commit f55d2a57c3b2b715eb67167bb413da5c0df36299 Author: Joywayer Date: Fri May 8 11:04:00 2026 +0800 chore: initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c8a923a --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# Unity generated folders +[Ll]ibrary/ +[Tt]emp/ +[Oo]bj/ +[Bb]uild/ +[Bb]uilds/ +[Ll]ogs/ +[Mm]emoryCaptures/ +UserSettings/ + +# Addressables generated +ServerData/ + +# Visual Studio / Rider +.vs/ +.idea/ +*.csproj +*.sln.iml +*.user +*.userprefs +*.pidb +*.booproj +*.svd +*.pdb +*.mdb +*.opendb +*.VC.db + +# Unity metadata cache +sysinfo.txt + +# OS files +.DS_Store +Thumbs.db + +# VS Code local settings +.vscode/* +!.vscode/extensions.json +!.vscode/settings.json +!.vscode/launch.json +!.vscode/tasks.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..ddb6ff8 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "visualstudiotoolsforunity.vstuc" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..da60e25 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,10 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Unity", + "type": "vstuc", + "request": "attach" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6b55f73 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,60 @@ +{ + "files.exclude": { + "**/.DS_Store": true, + "**/.git": true, + "**/.vs": true, + "**/.gitmodules": true, + "**/.vsconfig": true, + "**/*.booproj": true, + "**/*.pidb": true, + "**/*.suo": true, + "**/*.user": true, + "**/*.userprefs": true, + "**/*.unityproj": true, + "**/*.dll": true, + "**/*.exe": true, + "**/*.pdf": true, + "**/*.mid": true, + "**/*.midi": true, + "**/*.wav": true, + "**/*.gif": true, + "**/*.ico": true, + "**/*.jpg": true, + "**/*.jpeg": true, + "**/*.png": true, + "**/*.psd": true, + "**/*.tga": true, + "**/*.tif": true, + "**/*.tiff": true, + "**/*.3ds": true, + "**/*.3DS": true, + "**/*.fbx": true, + "**/*.FBX": true, + "**/*.lxo": true, + "**/*.LXO": true, + "**/*.ma": true, + "**/*.MA": true, + "**/*.obj": true, + "**/*.OBJ": true, + "**/*.asset": true, + "**/*.cubemap": true, + "**/*.flare": true, + "**/*.mat": true, + "**/*.meta": true, + "**/*.prefab": true, + "**/*.unity": true, + "build/": true, + "Build/": true, + "Library/": true, + "library/": true, + "obj/": true, + "Obj/": true, + "Logs/": true, + "logs/": true, + "ProjectSettings/": true, + "UserSettings/": true, + "temp/": true, + "Temp/": true + }, + "dotnet.defaultSolution": "zeling_v2.sln" +} \ No newline at end of file diff --git a/Assets/AddressableAssetsData.meta b/Assets/AddressableAssetsData.meta new file mode 100644 index 0000000..9bcdd2c --- /dev/null +++ b/Assets/AddressableAssetsData.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a48bb620c92a3f944b27b2e634b65113 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/Assets/AddressableAssetsData/AddressableAssetSettings.asset new file mode 100644 index 0000000..7cd26ab --- /dev/null +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset @@ -0,0 +1,109 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 468a46d0ae32c3544b7d98094e6448a9, type: 3} + m_Name: AddressableAssetSettings + m_EditorClassIdentifier: + m_DefaultGroup: 9ce5c865a2d3a0840aabdd8ccb3fd4b1 + m_currentHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_OptimizeCatalogSize: 0 + m_BuildRemoteCatalog: 0 + m_BundleLocalCatalog: 0 + m_CatalogRequestsTimeout: 0 + m_DisableCatalogUpdateOnStart: 0 + m_IgnoreUnsupportedFilesInBuild: 0 + m_UniqueBundleIds: 0 + m_NonRecursiveBuilding: 1 + m_CCDEnabled: 0 + m_maxConcurrentWebRequests: 3 + m_ContiguousBundles: 1 + m_StripUnityVersionFromBundleBuild: 0 + m_DisableVisibleSubAssetRepresentations: 0 + m_ShaderBundleNaming: 0 + m_ShaderBundleCustomNaming: + m_MonoScriptBundleNaming: 0 + m_CheckForContentUpdateRestrictionsOption: 0 + m_MonoScriptBundleCustomNaming: + m_RemoteCatalogBuildPath: + m_Id: + m_RemoteCatalogLoadPath: + m_Id: + m_ContentStateBuildPathProfileVariableName: + m_CustomContentStateBuildPath: + m_ContentStateBuildPath: + m_BuildAddressablesWithPlayerBuild: 0 + m_overridePlayerVersion: '[UnityEditor.PlayerSettings.bundleVersion]' + m_GroupAssets: + - {fileID: 11400000, guid: c22627c324f1c25498607e9b6e157457, type: 2} + - {fileID: 11400000, guid: 0123a97ef69d06c429118db4ea81ab47, type: 2} + m_BuildSettings: + m_CompileScriptsInVirtualMode: 0 + m_CleanupStreamingAssetsAfterBuilds: 1 + m_LogResourceManagerExceptions: 1 + m_BundleBuildPath: Temp/com.unity.addressables/AssetBundles + m_ProfileSettings: + m_Profiles: + - m_InheritedParent: + m_Id: 392414fc25b25dd469451de6ebfa2b9c + m_ProfileName: Default + m_Values: + - m_Id: 102449c73c4173c4187d41fb3b1dc194 + m_Value: ServerData/[BuildTarget] + - m_Id: 469d755f7b5dabb49b20dc963335bb75 + m_Value: '[UnityEditor.EditorUserBuildSettings.activeBuildTarget]' + - m_Id: 73c9344a578e0e643b43425f06c4894a + m_Value: http://[PrivateIpAddress]:[HostingServicePort] + - m_Id: 768ef6c5b40cf3841a6e6188ed781ca3 + m_Value: '[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]' + - m_Id: a9ed4dec0ec20c2459505631f5a924dd + m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]' + m_ProfileEntryNames: + - m_Id: 102449c73c4173c4187d41fb3b1dc194 + m_Name: Remote.BuildPath + m_InlineUsage: 0 + - m_Id: 469d755f7b5dabb49b20dc963335bb75 + m_Name: BuildTarget + m_InlineUsage: 0 + - m_Id: 73c9344a578e0e643b43425f06c4894a + m_Name: Remote.LoadPath + m_InlineUsage: 0 + - m_Id: 768ef6c5b40cf3841a6e6188ed781ca3 + m_Name: Local.BuildPath + m_InlineUsage: 0 + - m_Id: a9ed4dec0ec20c2459505631f5a924dd + m_Name: Local.LoadPath + m_InlineUsage: 0 + m_ProfileVersion: 1 + m_LabelTable: + m_LabelNames: + - default + m_SchemaTemplates: [] + m_GroupTemplateObjects: + - {fileID: 11400000, guid: f9701da6026b3a54f9b4d6eb144ee443, type: 2} + m_InitializationObjects: [] + m_CertificateHandlerType: + m_AssemblyName: + m_ClassName: + m_ActivePlayerDataBuilderIndex: 3 + m_DataBuilders: + - {fileID: 11400000, guid: a656b767a109fa44ca1622a3fc2dc4b2, type: 2} + - {fileID: 11400000, guid: da5d2a403cea7674981bf24138964b12, type: 2} + - {fileID: 11400000, guid: 560046465f5c319428272e98bee1fc54, type: 2} + - {fileID: 11400000, guid: 4d521a338471c494984103057387f993, type: 2} + m_ActiveProfileId: 392414fc25b25dd469451de6ebfa2b9c + m_HostingServicesManager: + m_HostingServiceInfos: [] + m_Settings: {fileID: 11400000} + m_NextInstanceId: 0 + m_RegisteredServiceTypeRefs: [] + m_PingTimeoutInMilliseconds: 5000 diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta b/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta new file mode 100644 index 0000000..94858af --- /dev/null +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea6262c4e52d79d41ab2c167b19171ff +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates.meta b/Assets/AddressableAssetsData/AssetGroupTemplates.meta new file mode 100644 index 0000000..059c955 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b950ab84b9063ca42a22337482fd74da +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset new file mode 100644 index 0000000..8ab5876 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-7405429206224315023 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3} + m_Name: BundledAssetGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 0} + m_InternalBundleIdMode: 1 + m_Compression: 1 + m_IncludeAddressInCatalog: 1 + m_IncludeGUIDInCatalog: 1 + m_IncludeLabelsInCatalog: 1 + m_InternalIdNamingMode: 0 + m_CacheClearBehavior: 0 + m_IncludeInBuild: 1 + m_BundledAssetProviderType: + m_AssemblyName: + m_ClassName: + m_ForceUniqueProvider: 0 + m_UseAssetBundleCache: 1 + m_UseAssetBundleCrc: 1 + m_UseAssetBundleCrcForCachedBundles: 1 + m_UseUWRForLocalBundles: 0 + m_Timeout: 0 + m_ChunkedTransfer: 0 + m_RedirectLimit: -1 + m_RetryCount: 0 + m_BuildPath: + m_Id: + m_LoadPath: + m_Id: + m_BundleMode: 0 + m_AssetBundleProviderType: + m_AssemblyName: + m_ClassName: + m_BundleNaming: 0 + m_AssetLoadMode: 0 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1a3c5d64ac83548c09dd1678b9f6f1cd, type: 3} + m_Name: Packed Assets + m_EditorClassIdentifier: + m_SchemaObjects: + - {fileID: -7405429206224315023} + - {fileID: 1139605461418381522} + m_Description: Pack assets into asset bundles. + m_Settings: {fileID: 11400000, guid: ea6262c4e52d79d41ab2c167b19171ff, type: 2} +--- !u!114 &1139605461418381522 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3} + m_Name: ContentUpdateGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 0} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta new file mode 100644 index 0000000..134707e --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroupTemplates/Packed Assets.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9701da6026b3a54f9b4d6eb144ee443 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups.meta b/Assets/AddressableAssetsData/AssetGroups.meta new file mode 100644 index 0000000..60495c5 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21bc135c555357844bcbc6a0d2d3340e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset b/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset new file mode 100644 index 0000000..4183254 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bbb281ee3bf0b054c82ac2347e9e782c, type: 3} + m_Name: Built In Data + m_EditorClassIdentifier: + m_GroupName: Built In Data + m_Data: + m_SerializedData: [] + m_GUID: dbfb32c3773366040a45a3a3b19e12ca + m_SerializeEntries: + - m_GUID: EditorSceneList + m_Address: EditorSceneList + m_ReadOnly: 1 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + - m_GUID: Resources + m_Address: Resources + m_ReadOnly: 1 + m_SerializedLabels: [] + FlaggedDuringContentUpdateRestriction: 0 + m_ReadOnly: 1 + m_Settings: {fileID: 11400000, guid: ea6262c4e52d79d41ab2c167b19171ff, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: ed8df0cbc5cb607488af5c30d7f46615, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset.meta new file mode 100644 index 0000000..aecd2f0 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0123a97ef69d06c429118db4ea81ab47 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset new file mode 100644 index 0000000..7557f17 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset @@ -0,0 +1,25 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bbb281ee3bf0b054c82ac2347e9e782c, type: 3} + m_Name: Default Local Group + m_EditorClassIdentifier: + m_GroupName: Default Local Group + m_Data: + m_SerializedData: [] + m_GUID: 9ce5c865a2d3a0840aabdd8ccb3fd4b1 + m_SerializeEntries: [] + m_ReadOnly: 0 + m_Settings: {fileID: 11400000, guid: ea6262c4e52d79d41ab2c167b19171ff, type: 2} + m_SchemaSet: + m_Schemas: + - {fileID: 11400000, guid: db1bc100864e92248aee8fc25a65d499, type: 2} + - {fileID: 11400000, guid: 46ea11535f9082f49870170724286937, type: 2} diff --git a/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta new file mode 100644 index 0000000..2f30935 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Default Local Group.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c22627c324f1c25498607e9b6e157457 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas.meta new file mode 100644 index 0000000..54d3009 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fcf956d5bed4cca46af324bb4b6c69da +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Built In Data_PlayerDataGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Built In Data_PlayerDataGroupSchema.asset new file mode 100644 index 0000000..ffd5dc7 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Built In Data_PlayerDataGroupSchema.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b1487f5d688e4f94f828f879d599dbdc, type: 3} + m_Name: Built In Data_PlayerDataGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: 0123a97ef69d06c429118db4ea81ab47, type: 2} + m_IncludeResourcesFolders: 1 + m_IncludeBuildSettingsScenes: 1 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Built In Data_PlayerDataGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Built In Data_PlayerDataGroupSchema.asset.meta new file mode 100644 index 0000000..0a3093b --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Built In Data_PlayerDataGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed8df0cbc5cb607488af5c30d7f46615 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset new file mode 100644 index 0000000..c5ebc7a --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset @@ -0,0 +1,45 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e5d17a21594effb4e9591490b009e7aa, type: 3} + m_Name: Default Local Group_BundledAssetGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: c22627c324f1c25498607e9b6e157457, type: 2} + m_InternalBundleIdMode: 1 + m_Compression: 1 + m_IncludeAddressInCatalog: 1 + m_IncludeGUIDInCatalog: 1 + m_IncludeLabelsInCatalog: 1 + m_InternalIdNamingMode: 0 + m_CacheClearBehavior: 0 + m_IncludeInBuild: 1 + m_BundledAssetProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider + m_ForceUniqueProvider: 0 + m_UseAssetBundleCache: 1 + m_UseAssetBundleCrc: 1 + m_UseAssetBundleCrcForCachedBundles: 1 + m_UseUWRForLocalBundles: 0 + m_Timeout: 0 + m_ChunkedTransfer: 0 + m_RedirectLimit: -1 + m_RetryCount: 0 + m_BuildPath: + m_Id: 768ef6c5b40cf3841a6e6188ed781ca3 + m_LoadPath: + m_Id: a9ed4dec0ec20c2459505631f5a924dd + m_BundleMode: 0 + m_AssetBundleProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider + m_BundleNaming: 0 + m_AssetLoadMode: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta new file mode 100644 index 0000000..a70471c --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_BundledAssetGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db1bc100864e92248aee8fc25a65d499 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset new file mode 100644 index 0000000..6733565 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5834b5087d578d24c926ce20cd31e6d6, type: 3} + m_Name: Default Local Group_ContentUpdateGroupSchema + m_EditorClassIdentifier: + m_Group: {fileID: 11400000, guid: c22627c324f1c25498607e9b6e157457, type: 2} + m_StaticContent: 0 diff --git a/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta new file mode 100644 index 0000000..1c9ca68 --- /dev/null +++ b/Assets/AddressableAssetsData/AssetGroups/Schemas/Default Local Group_ContentUpdateGroupSchema.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 46ea11535f9082f49870170724286937 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders.meta b/Assets/AddressableAssetsData/DataBuilders.meta new file mode 100644 index 0000000..c37b13e --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8869b438ceb275b4bb3f0f8778830f51 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset new file mode 100644 index 0000000..50d30dc --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88d21199f5d473f4db36845f2318f180, type: 3} + m_Name: BuildScriptFastMode + m_EditorClassIdentifier: + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta new file mode 100644 index 0000000..599cfdb --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptFastMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a656b767a109fa44ca1622a3fc2dc4b2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset new file mode 100644 index 0000000..ec875f9 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3e2e0ffa088c91d41a086d0b8cb16bdc, type: 3} + m_Name: BuildScriptPackedMode + m_EditorClassIdentifier: + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta new file mode 100644 index 0000000..2bd816b --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d521a338471c494984103057387f993 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset new file mode 100644 index 0000000..7628845 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ad8c280d42ee0ed41a27db23b43dd2bf, type: 3} + m_Name: BuildScriptPackedPlayMode + m_EditorClassIdentifier: + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta new file mode 100644 index 0000000..cdce9f5 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptPackedPlayMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 560046465f5c319428272e98bee1fc54 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptVirtualMode.asset b/Assets/AddressableAssetsData/DataBuilders/BuildScriptVirtualMode.asset new file mode 100644 index 0000000..dfb2d58 --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptVirtualMode.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bb0e4994b34add1409fd8ccaf4a82de5, type: 3} + m_Name: BuildScriptVirtualMode + m_EditorClassIdentifier: + instanceProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider + sceneProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.SceneProvider diff --git a/Assets/AddressableAssetsData/DataBuilders/BuildScriptVirtualMode.asset.meta b/Assets/AddressableAssetsData/DataBuilders/BuildScriptVirtualMode.asset.meta new file mode 100644 index 0000000..96a2c4e --- /dev/null +++ b/Assets/AddressableAssetsData/DataBuilders/BuildScriptVirtualMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da5d2a403cea7674981bf24138964b12 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/DefaultObject.asset b/Assets/AddressableAssetsData/DefaultObject.asset new file mode 100644 index 0000000..b2b0e97 --- /dev/null +++ b/Assets/AddressableAssetsData/DefaultObject.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a189bb168d8d90478a09ea08c2f3d72, type: 3} + m_Name: DefaultObject + m_EditorClassIdentifier: + m_AddressableAssetSettingsGuid: ea6262c4e52d79d41ab2c167b19171ff diff --git a/Assets/AddressableAssetsData/DefaultObject.asset.meta b/Assets/AddressableAssetsData/DefaultObject.asset.meta new file mode 100644 index 0000000..9624c81 --- /dev/null +++ b/Assets/AddressableAssetsData/DefaultObject.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5afba7e2911543d418af812de1160fb1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/AddressableAssetsData/ProfileDataSourceSettings.asset b/Assets/AddressableAssetsData/ProfileDataSourceSettings.asset new file mode 100644 index 0000000..588fc4c --- /dev/null +++ b/Assets/AddressableAssetsData/ProfileDataSourceSettings.asset @@ -0,0 +1,34 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7e3976da977cb49238499ea3b4c237ae, type: 3} + m_Name: ProfileDataSourceSettings + m_EditorClassIdentifier: + profileGroupTypes: + - m_GroupTypePrefix: Built-In + m_Variables: + - m_Suffix: BuildPath + m_Value: '[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]' + - m_Suffix: LoadPath + m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]' + - m_GroupTypePrefix: Editor Hosted + m_Variables: + - m_Suffix: BuildPath + m_Value: ServerData/[BuildTarget] + - m_Suffix: LoadPath + m_Value: http://[PrivateIpAddress]:[HostingServicePort] + environments: [] + currentEnvironment: + id: + projectId: + projectGenesisId: + name: + isDefault: 0 diff --git a/Assets/AddressableAssetsData/ProfileDataSourceSettings.asset.meta b/Assets/AddressableAssetsData/ProfileDataSourceSettings.asset.meta new file mode 100644 index 0000000..26c03b3 --- /dev/null +++ b/Assets/AddressableAssetsData/ProfileDataSourceSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07f6c4558e6e84f4280d3197d9bb83ae +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data.meta b/Assets/Data.meta new file mode 100644 index 0000000..584008d --- /dev/null +++ b/Assets/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6cb28652357fc3d4e8f6d320e216197b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Audio.meta b/Assets/Data/Audio.meta new file mode 100644 index 0000000..5b469d5 --- /dev/null +++ b/Assets/Data/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 78b7b29096141de48a6faa959512b8fe +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Audio/.gitkeep b/Assets/Data/Audio/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Combat.meta b/Assets/Data/Combat.meta new file mode 100644 index 0000000..8a349ee --- /dev/null +++ b/Assets/Data/Combat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4df76b18997441c44af76e7749ad6ae4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Combat/DamageSources.meta b/Assets/Data/Combat/DamageSources.meta new file mode 100644 index 0000000..acc95d8 --- /dev/null +++ b/Assets/Data/Combat/DamageSources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8dec4408c2611fb448688ea881931320 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Combat/DamageSources/.gitkeep b/Assets/Data/Combat/DamageSources/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Combat/Weapons.meta b/Assets/Data/Combat/Weapons.meta new file mode 100644 index 0000000..632b6fc --- /dev/null +++ b/Assets/Data/Combat/Weapons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0b19b365dc8fea42b19c639096b1c2b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Combat/Weapons/.gitkeep b/Assets/Data/Combat/Weapons/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Enemies.meta b/Assets/Data/Enemies.meta new file mode 100644 index 0000000..7f8173a --- /dev/null +++ b/Assets/Data/Enemies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 030bd70f4e8cf9a49892882397ebaf4d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Enemies/.gitkeep b/Assets/Data/Enemies/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Events.meta b/Assets/Data/Events.meta new file mode 100644 index 0000000..af5d0ed --- /dev/null +++ b/Assets/Data/Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5fabd030ec07254fbe59237b925772f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Audio.meta b/Assets/Data/Events/Audio.meta new file mode 100644 index 0000000..e5fd650 --- /dev/null +++ b/Assets/Data/Events/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1eeda67ef9805449817d7553e4a8425 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Audio/EVT_BGMRequest.asset b/Assets/Data/Events/Audio/EVT_BGMRequest.asset new file mode 100644 index 0000000..26213f1 --- /dev/null +++ b/Assets/Data/Events/Audio/EVT_BGMRequest.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 23dad55c2f7bcc54a92ed61cc6f27c5b, type: 3} + m_Name: EVT_BGMRequest + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Audio/EVT_BGMRequest.asset.meta b/Assets/Data/Events/Audio/EVT_BGMRequest.asset.meta new file mode 100644 index 0000000..389b3a2 --- /dev/null +++ b/Assets/Data/Events/Audio/EVT_BGMRequest.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 757ae011f0e08ae47b1973d395fd5a8a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Audio/EVT_BGMStop.asset b/Assets/Data/Events/Audio/EVT_BGMStop.asset new file mode 100644 index 0000000..518f71e --- /dev/null +++ b/Assets/Data/Events/Audio/EVT_BGMStop.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_BGMStop + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Audio/EVT_BGMStop.asset.meta b/Assets/Data/Events/Audio/EVT_BGMStop.asset.meta new file mode 100644 index 0000000..4d089f0 --- /dev/null +++ b/Assets/Data/Events/Audio/EVT_BGMStop.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51651b4617bc0334dbce668ae415f1a1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Boss.meta b/Assets/Data/Events/Boss.meta new file mode 100644 index 0000000..2c4beed --- /dev/null +++ b/Assets/Data/Events/Boss.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d05a39e2a87f4547a1868bd38748153 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Boss/EVT_BossPhase.asset b/Assets/Data/Events/Boss/EVT_BossPhase.asset new file mode 100644 index 0000000..2ac86e3 --- /dev/null +++ b/Assets/Data/Events/Boss/EVT_BossPhase.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 647b6596e515ba64483b7ff337c76699, type: 3} + m_Name: EVT_BossPhase + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Boss/EVT_BossPhase.asset.meta b/Assets/Data/Events/Boss/EVT_BossPhase.asset.meta new file mode 100644 index 0000000..1cf79c5 --- /dev/null +++ b/Assets/Data/Events/Boss/EVT_BossPhase.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3fbdb065acd9b2a4ea09463ec8a766e1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Boss/EVT_BossSkill.asset b/Assets/Data/Events/Boss/EVT_BossSkill.asset new file mode 100644 index 0000000..9b19d35 --- /dev/null +++ b/Assets/Data/Events/Boss/EVT_BossSkill.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8230eab2acba8c24499b2d20df81adb7, type: 3} + m_Name: EVT_BossSkill + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Boss/EVT_BossSkill.asset.meta b/Assets/Data/Events/Boss/EVT_BossSkill.asset.meta new file mode 100644 index 0000000..57bf434 --- /dev/null +++ b/Assets/Data/Events/Boss/EVT_BossSkill.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6fafc19e81cdbec43b83c607d6504805 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Boss/EVT_StatusEffect.asset b/Assets/Data/Events/Boss/EVT_StatusEffect.asset new file mode 100644 index 0000000..2db3bf7 --- /dev/null +++ b/Assets/Data/Events/Boss/EVT_StatusEffect.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 933f8f3ce17ee54409502057bd1a8138, type: 3} + m_Name: EVT_StatusEffect + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Boss/EVT_StatusEffect.asset.meta b/Assets/Data/Events/Boss/EVT_StatusEffect.asset.meta new file mode 100644 index 0000000..e8e3ac9 --- /dev/null +++ b/Assets/Data/Events/Boss/EVT_StatusEffect.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8adb331562e8e824e8b46dbffc2a0049 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Combat.meta b/Assets/Data/Events/Combat.meta new file mode 100644 index 0000000..c4a879c --- /dev/null +++ b/Assets/Data/Events/Combat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ecde9ffb4673f3a489050869aed76701 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Combat/.gitkeep b/Assets/Data/Events/Combat/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Events/Combat/EVT_EnemyDied.asset b/Assets/Data/Events/Combat/EVT_EnemyDied.asset new file mode 100644 index 0000000..d39d2b8 --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_EnemyDied.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_EnemyDied + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Combat/EVT_EnemyDied.asset.meta b/Assets/Data/Events/Combat/EVT_EnemyDied.asset.meta new file mode 100644 index 0000000..67e1ee9 --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_EnemyDied.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 50b412d5ad2e90e439baf577ac4ed796 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Combat/EVT_HitConfirmed.asset b/Assets/Data/Events/Combat/EVT_HitConfirmed.asset new file mode 100644 index 0000000..e7e3bc3 --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_HitConfirmed.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 86e5ffa3ce0537845b1b601c267d76ef, type: 3} + m_Name: EVT_HitConfirmed + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Combat/EVT_HitConfirmed.asset.meta b/Assets/Data/Events/Combat/EVT_HitConfirmed.asset.meta new file mode 100644 index 0000000..a1a407b --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_HitConfirmed.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1d39b9a422a1984bb739bf1ea054f69 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Combat/EVT_ParrySuccess.asset b/Assets/Data/Events/Combat/EVT_ParrySuccess.asset new file mode 100644 index 0000000..e73f9b5 --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_ParrySuccess.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_ParrySuccess + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Combat/EVT_ParrySuccess.asset.meta b/Assets/Data/Events/Combat/EVT_ParrySuccess.asset.meta new file mode 100644 index 0000000..99a3e1e --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_ParrySuccess.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ef0e7ee40750ec468b9545d4a2b9f6c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Combat/EVT_PlayerDied.asset b/Assets/Data/Events/Combat/EVT_PlayerDied.asset new file mode 100644 index 0000000..18186b1 --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_PlayerDied.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_PlayerDied + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Combat/EVT_PlayerDied.asset.meta b/Assets/Data/Events/Combat/EVT_PlayerDied.asset.meta new file mode 100644 index 0000000..dc81d7f --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_PlayerDied.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fdd67499acc1ed4ea5042536c51cda2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Combat/EVT_PlayerRespawn.asset b/Assets/Data/Events/Combat/EVT_PlayerRespawn.asset new file mode 100644 index 0000000..2bc0181 --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_PlayerRespawn.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_PlayerRespawn + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Combat/EVT_PlayerRespawn.asset.meta b/Assets/Data/Events/Combat/EVT_PlayerRespawn.asset.meta new file mode 100644 index 0000000..72ea1b6 --- /dev/null +++ b/Assets/Data/Events/Combat/EVT_PlayerRespawn.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d910e443aaf21048891b480598c85ed +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core.meta b/Assets/Data/Events/Core.meta new file mode 100644 index 0000000..72e1f68 --- /dev/null +++ b/Assets/Data/Events/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db624cfd12d123a4b8d9040bda9f3b19 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/.gitkeep b/Assets/Data/Events/Core/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Events/Core/EVT_Bool.asset b/Assets/Data/Events/Core/EVT_Bool.asset new file mode 100644 index 0000000..1254812 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Bool.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d3e424c1787e5be4fa918201b1830192, type: 3} + m_Name: EVT_Bool + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_Bool.asset.meta b/Assets/Data/Events/Core/EVT_Bool.asset.meta new file mode 100644 index 0000000..5031dd6 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Bool.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ef8ebb673257ab4aada5c65b70d2a64 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/EVT_Float.asset b/Assets/Data/Events/Core/EVT_Float.asset new file mode 100644 index 0000000..9c300e3 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Float.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 62f2d5b0575789048b6badd7d1608db3, type: 3} + m_Name: EVT_Float + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_Float.asset.meta b/Assets/Data/Events/Core/EVT_Float.asset.meta new file mode 100644 index 0000000..1728469 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Float.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 689936c23613d7741bdb675c2671bb09 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/EVT_GameState.asset b/Assets/Data/Events/Core/EVT_GameState.asset new file mode 100644 index 0000000..9175e26 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_GameState.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c060c20fe37837c408cc5a628f6d8863, type: 3} + m_Name: EVT_GameState + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_GameState.asset.meta b/Assets/Data/Events/Core/EVT_GameState.asset.meta new file mode 100644 index 0000000..237a2cb --- /dev/null +++ b/Assets/Data/Events/Core/EVT_GameState.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4dfacb5d8c3eb2d43af027e86a7ad3a2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/EVT_Int.asset b/Assets/Data/Events/Core/EVT_Int.asset new file mode 100644 index 0000000..d87c810 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Int.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ce6e33f4353535944a0d2573df0a08d4, type: 3} + m_Name: EVT_Int + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_Int.asset.meta b/Assets/Data/Events/Core/EVT_Int.asset.meta new file mode 100644 index 0000000..a44156f --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Int.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 63f88954adaacdd4789d247fb3ff385c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/EVT_SceneLoadRequest.asset b/Assets/Data/Events/Core/EVT_SceneLoadRequest.asset new file mode 100644 index 0000000..6cb4a46 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_SceneLoadRequest.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7b5bc8e9a164cd54ea37027bc06c37ff, type: 3} + m_Name: EVT_SceneLoadRequest + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_SceneLoadRequest.asset.meta b/Assets/Data/Events/Core/EVT_SceneLoadRequest.asset.meta new file mode 100644 index 0000000..5eca76f --- /dev/null +++ b/Assets/Data/Events/Core/EVT_SceneLoadRequest.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 238abf3dd30428145b9346c940be1a1b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/EVT_String.asset b/Assets/Data/Events/Core/EVT_String.asset new file mode 100644 index 0000000..7560f01 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_String.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 23dad55c2f7bcc54a92ed61cc6f27c5b, type: 3} + m_Name: EVT_String + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_String.asset.meta b/Assets/Data/Events/Core/EVT_String.asset.meta new file mode 100644 index 0000000..75a6780 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_String.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 88613a493085d2c4e8f7bbb6170e0eb4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/EVT_Transform.asset b/Assets/Data/Events/Core/EVT_Transform.asset new file mode 100644 index 0000000..54113a2 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Transform.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 19580b3794783e647be1e1c0771814d0, type: 3} + m_Name: EVT_Transform + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_Transform.asset.meta b/Assets/Data/Events/Core/EVT_Transform.asset.meta new file mode 100644 index 0000000..5bce700 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Transform.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0cf8c55073186d04d9ba4c52bf94b8b2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/EVT_Vector2.asset b/Assets/Data/Events/Core/EVT_Vector2.asset new file mode 100644 index 0000000..d9a019d --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Vector2.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1d28df1b130e12348a582259a89fa4e2, type: 3} + m_Name: EVT_Vector2 + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_Vector2.asset.meta b/Assets/Data/Events/Core/EVT_Vector2.asset.meta new file mode 100644 index 0000000..fbb5399 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Vector2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c4da0ca9773931449ba83f43e344206 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Core/EVT_Void.asset b/Assets/Data/Events/Core/EVT_Void.asset new file mode 100644 index 0000000..47ea315 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Void.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_Void + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Core/EVT_Void.asset.meta b/Assets/Data/Events/Core/EVT_Void.asset.meta new file mode 100644 index 0000000..f0678d4 --- /dev/null +++ b/Assets/Data/Events/Core/EVT_Void.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6cfcff7b7ac47824f9d7fd806ae46762 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Dialogue.meta b/Assets/Data/Events/Dialogue.meta new file mode 100644 index 0000000..9034aa6 --- /dev/null +++ b/Assets/Data/Events/Dialogue.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3174f2c7b4722af4abc62d8c7b591f95 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Dialogue/EVT_DialogueEnded.asset b/Assets/Data/Events/Dialogue/EVT_DialogueEnded.asset new file mode 100644 index 0000000..4598ce7 --- /dev/null +++ b/Assets/Data/Events/Dialogue/EVT_DialogueEnded.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_DialogueEnded + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Dialogue/EVT_DialogueEnded.asset.meta b/Assets/Data/Events/Dialogue/EVT_DialogueEnded.asset.meta new file mode 100644 index 0000000..3b136dc --- /dev/null +++ b/Assets/Data/Events/Dialogue/EVT_DialogueEnded.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bc04c64c59cbaf640aa8323cb0859f52 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Dialogue/EVT_DialogueStartRequest.asset b/Assets/Data/Events/Dialogue/EVT_DialogueStartRequest.asset new file mode 100644 index 0000000..18e529f --- /dev/null +++ b/Assets/Data/Events/Dialogue/EVT_DialogueStartRequest.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4929240a254c7d9418b239971866e6af, type: 3} + m_Name: EVT_DialogueStartRequest + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Dialogue/EVT_DialogueStartRequest.asset.meta b/Assets/Data/Events/Dialogue/EVT_DialogueStartRequest.asset.meta new file mode 100644 index 0000000..8500792 --- /dev/null +++ b/Assets/Data/Events/Dialogue/EVT_DialogueStartRequest.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4965c9ccace28ae4790eddecab1e5f73 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Dialogue/EVT_ShopPurchase.asset b/Assets/Data/Events/Dialogue/EVT_ShopPurchase.asset new file mode 100644 index 0000000..2b3a2e7 --- /dev/null +++ b/Assets/Data/Events/Dialogue/EVT_ShopPurchase.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d3d88263c925f8347bf1e19b7fa71036, type: 3} + m_Name: EVT_ShopPurchase + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Dialogue/EVT_ShopPurchase.asset.meta b/Assets/Data/Events/Dialogue/EVT_ShopPurchase.asset.meta new file mode 100644 index 0000000..2250618 --- /dev/null +++ b/Assets/Data/Events/Dialogue/EVT_ShopPurchase.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c286ed5f69034c428cbab5e268ef031 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Difficulty.meta b/Assets/Data/Events/Difficulty.meta new file mode 100644 index 0000000..b700e94 --- /dev/null +++ b/Assets/Data/Events/Difficulty.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58582979ceab82e4a897b923d2977204 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Difficulty/EVT_DifficultyChanged.asset b/Assets/Data/Events/Difficulty/EVT_DifficultyChanged.asset new file mode 100644 index 0000000..f6f597e --- /dev/null +++ b/Assets/Data/Events/Difficulty/EVT_DifficultyChanged.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b3f48b426d66154797d7c9af9c6b02f, type: 3} + m_Name: EVT_DifficultyChanged + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Difficulty/EVT_DifficultyChanged.asset.meta b/Assets/Data/Events/Difficulty/EVT_DifficultyChanged.asset.meta new file mode 100644 index 0000000..16b7835 --- /dev/null +++ b/Assets/Data/Events/Difficulty/EVT_DifficultyChanged.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d24e25a7a7b70b646b5424cb0de21351 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Player.meta b/Assets/Data/Events/Player.meta new file mode 100644 index 0000000..f98a7a6 --- /dev/null +++ b/Assets/Data/Events/Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd6cf6d9186f2d7498772d9ad78c3042 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Player/.gitkeep b/Assets/Data/Events/Player/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Events/Player/EVT_AbilityUnlocked.asset b/Assets/Data/Events/Player/EVT_AbilityUnlocked.asset new file mode 100644 index 0000000..3abeed4 --- /dev/null +++ b/Assets/Data/Events/Player/EVT_AbilityUnlocked.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c8eab760bd9b37468f12fa79d3d0693, type: 3} + m_Name: EVT_AbilityUnlocked + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Player/EVT_AbilityUnlocked.asset.meta b/Assets/Data/Events/Player/EVT_AbilityUnlocked.asset.meta new file mode 100644 index 0000000..11beb54 --- /dev/null +++ b/Assets/Data/Events/Player/EVT_AbilityUnlocked.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c4057e86b2bd9b4493ed5b73464c9ad +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Player/EVT_AbilityUnlockedStr.asset b/Assets/Data/Events/Player/EVT_AbilityUnlockedStr.asset new file mode 100644 index 0000000..5781a46 --- /dev/null +++ b/Assets/Data/Events/Player/EVT_AbilityUnlockedStr.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 23dad55c2f7bcc54a92ed61cc6f27c5b, type: 3} + m_Name: EVT_AbilityUnlockedStr + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Player/EVT_AbilityUnlockedStr.asset.meta b/Assets/Data/Events/Player/EVT_AbilityUnlockedStr.asset.meta new file mode 100644 index 0000000..57b1e38 --- /dev/null +++ b/Assets/Data/Events/Player/EVT_AbilityUnlockedStr.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a09f3a71280fc0046904d8ba7940c615 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Progression.meta b/Assets/Data/Events/Progression.meta new file mode 100644 index 0000000..8bd1558 --- /dev/null +++ b/Assets/Data/Events/Progression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4484562f4bcdbd1499829364bbc514f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Progression/EVT_AchievementUnlocked.asset b/Assets/Data/Events/Progression/EVT_AchievementUnlocked.asset new file mode 100644 index 0000000..568b432 --- /dev/null +++ b/Assets/Data/Events/Progression/EVT_AchievementUnlocked.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f7432d3960c5c3f4f865bb5e0ec84bb5, type: 3} + m_Name: EVT_AchievementUnlocked + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Progression/EVT_AchievementUnlocked.asset.meta b/Assets/Data/Events/Progression/EVT_AchievementUnlocked.asset.meta new file mode 100644 index 0000000..89a180b --- /dev/null +++ b/Assets/Data/Events/Progression/EVT_AchievementUnlocked.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c69b6638547be34c83995f5e9df35e5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Progression/EVT_ToolUsed.asset b/Assets/Data/Events/Progression/EVT_ToolUsed.asset new file mode 100644 index 0000000..7456a43 --- /dev/null +++ b/Assets/Data/Events/Progression/EVT_ToolUsed.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5ab7a70182c725f4fad23afda850433e, type: 3} + m_Name: EVT_ToolUsed + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Progression/EVT_ToolUsed.asset.meta b/Assets/Data/Events/Progression/EVT_ToolUsed.asset.meta new file mode 100644 index 0000000..bf8afa8 --- /dev/null +++ b/Assets/Data/Events/Progression/EVT_ToolUsed.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 740abc82982b29b428392074e98d2eae +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Quest.meta b/Assets/Data/Events/Quest.meta new file mode 100644 index 0000000..1a89cc3 --- /dev/null +++ b/Assets/Data/Events/Quest.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 97733725c9f02d94aa9bb43dd3730737 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Quest/EVT_QuestObjective.asset b/Assets/Data/Events/Quest/EVT_QuestObjective.asset new file mode 100644 index 0000000..f827d20 --- /dev/null +++ b/Assets/Data/Events/Quest/EVT_QuestObjective.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4a46bd0c0af9fcd4dae69a00c6565be5, type: 3} + m_Name: EVT_QuestObjective + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Quest/EVT_QuestObjective.asset.meta b/Assets/Data/Events/Quest/EVT_QuestObjective.asset.meta new file mode 100644 index 0000000..9b1166e --- /dev/null +++ b/Assets/Data/Events/Quest/EVT_QuestObjective.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df1a5b34105159b4aa8fa9408ed70219 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/Quest/EVT_QuestStateChanged.asset b/Assets/Data/Events/Quest/EVT_QuestStateChanged.asset new file mode 100644 index 0000000..997a527 --- /dev/null +++ b/Assets/Data/Events/Quest/EVT_QuestStateChanged.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9eeac19c9884b3144b390577d1c0c99f, type: 3} + m_Name: EVT_QuestStateChanged + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/Quest/EVT_QuestStateChanged.asset.meta b/Assets/Data/Events/Quest/EVT_QuestStateChanged.asset.meta new file mode 100644 index 0000000..f058765 --- /dev/null +++ b/Assets/Data/Events/Quest/EVT_QuestStateChanged.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f09c82e9caab650479cb8b60ba5b3491 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/UI.meta b/Assets/Data/Events/UI.meta new file mode 100644 index 0000000..0662141 --- /dev/null +++ b/Assets/Data/Events/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e3cb05b7f1714e43bdc43ff8164fde8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/UI/.gitkeep b/Assets/Data/Events/UI/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Events/UI/EVT_ColorblindMode.asset b/Assets/Data/Events/UI/EVT_ColorblindMode.asset new file mode 100644 index 0000000..1494b6f --- /dev/null +++ b/Assets/Data/Events/UI/EVT_ColorblindMode.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a9227f70cba3e7949a837c0622653f33, type: 3} + m_Name: EVT_ColorblindMode + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/UI/EVT_ColorblindMode.asset.meta b/Assets/Data/Events/UI/EVT_ColorblindMode.asset.meta new file mode 100644 index 0000000..8a689b5 --- /dev/null +++ b/Assets/Data/Events/UI/EVT_ColorblindMode.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfcd791dd0efded4fb30b5a930a5273e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/UI/EVT_PauseRequested.asset b/Assets/Data/Events/UI/EVT_PauseRequested.asset new file mode 100644 index 0000000..33a6546 --- /dev/null +++ b/Assets/Data/Events/UI/EVT_PauseRequested.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_PauseRequested + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/UI/EVT_PauseRequested.asset.meta b/Assets/Data/Events/UI/EVT_PauseRequested.asset.meta new file mode 100644 index 0000000..8621fd0 --- /dev/null +++ b/Assets/Data/Events/UI/EVT_PauseRequested.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 032b9e347985f7a46ac37371acd2f619 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/UI/EVT_PauseResumed.asset b/Assets/Data/Events/UI/EVT_PauseResumed.asset new file mode 100644 index 0000000..705447d --- /dev/null +++ b/Assets/Data/Events/UI/EVT_PauseResumed.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 07c5881d0d5ca3c42949a79f40939c3e, type: 3} + m_Name: EVT_PauseResumed + m_EditorClassIdentifier: + description: diff --git a/Assets/Data/Events/UI/EVT_PauseResumed.asset.meta b/Assets/Data/Events/UI/EVT_PauseResumed.asset.meta new file mode 100644 index 0000000..d614560 --- /dev/null +++ b/Assets/Data/Events/UI/EVT_PauseResumed.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a7600ccd030921e44baee9e3ac505530 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/World.meta b/Assets/Data/Events/World.meta new file mode 100644 index 0000000..3ef2279 --- /dev/null +++ b/Assets/Data/Events/World.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13c3a7e5d7c73804694a014f2bae42a1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Events/World/.gitkeep b/Assets/Data/Events/World/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Player.meta b/Assets/Data/Player.meta new file mode 100644 index 0000000..30844d3 --- /dev/null +++ b/Assets/Data/Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af39e1cb73ef3ea42b9600346ce88f46 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Player/Forms.meta b/Assets/Data/Player/Forms.meta new file mode 100644 index 0000000..ff2a840 --- /dev/null +++ b/Assets/Data/Player/Forms.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8faa2e8d68548e47a65bd8676e86bc7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Player/Forms/.gitkeep b/Assets/Data/Player/Forms/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Player/Input.meta b/Assets/Data/Player/Input.meta new file mode 100644 index 0000000..12a8e30 --- /dev/null +++ b/Assets/Data/Player/Input.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6a0880f172d9d6846bd2e98118d3803c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Player/Input/.gitkeep b/Assets/Data/Player/Input/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Progression.meta b/Assets/Data/Progression.meta new file mode 100644 index 0000000..307fa31 --- /dev/null +++ b/Assets/Data/Progression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 759eebd5edb353b45b13dc8a10bd4549 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Progression/.gitkeep b/Assets/Data/Progression/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/Settings.meta b/Assets/Data/Settings.meta new file mode 100644 index 0000000..8fb9e2c --- /dev/null +++ b/Assets/Data/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d4e201e84c738f4dbcc4f94ef7cb928 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/Settings/.gitkeep b/Assets/Data/Settings/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/UI.meta b/Assets/Data/UI.meta new file mode 100644 index 0000000..1f7c5f8 --- /dev/null +++ b/Assets/Data/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd7288a2fcf43a247ba698ea65320076 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/UI/.gitkeep b/Assets/Data/UI/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Data/World.meta b/Assets/Data/World.meta new file mode 100644 index 0000000..b1b02e0 --- /dev/null +++ b/Assets/Data/World.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48230e45db2fde04486b597e155d7c4f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Data/World/.gitkeep b/Assets/Data/World/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Feel.meta b/Assets/Feel.meta new file mode 100644 index 0000000..094e99f --- /dev/null +++ b/Assets/Feel.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e5594e1e7ea598d409319855db3fd1f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks.meta b/Assets/Feel/MMFeedbacks.meta new file mode 100644 index 0000000..d9bd6d4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b22304f1aade44dc86db2bcb325574a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Authorizations.meta b/Assets/Feel/MMFeedbacks/Authorizations.meta new file mode 100644 index 0000000..510eec9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Authorizations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4ad6833276c9b1b4b86f0a85803055e4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Authorizations/MMFeedbacksAuthorizations.cs b/Assets/Feel/MMFeedbacks/Authorizations/MMFeedbacksAuthorizations.cs new file mode 100644 index 0000000..9cb6174 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Authorizations/MMFeedbacksAuthorizations.cs @@ -0,0 +1,586 @@ +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this class to an empty object in your scene and it will prevent any unchecked feedback in its inspector from playing + /// + public partial class MMFeedbacksAuthorizations : MMMonoBehaviour + { + [MMInspectorGroup("Animation", true, 16)] [MMInspectorButton("ToggleAnimation")] + public bool ToggleAnimationButton; + + public bool AnimationParameter = true; + public bool AnimatorSpeed = true; + + [MMInspectorGroup("Audio", true, 17)] [MMInspectorButton("ToggleAudio")] + public bool ToggleAudioButton; + + public bool AudioFilterDistortion = true; + public bool AudioFilterEcho = true; + public bool AudioFilterHighPass = true; + public bool AudioFilterLowPass = true; + public bool AudioFilterReverb = true; + public bool AudioMixerSnapshotTransition = true; + public bool AudioSource = true; + public bool AudioSourcePitch = true; + public bool AudioSourceStereoPan = true; + public bool AudioSourceVolume = true; + public bool MMPlaylist = true; + public bool MMSoundManagerAllSoundsControl = true; + public bool MMSoundManagerSaveAndLoad = true; + public bool MMSoundManagerSound = true; + public bool MMSoundManagerSoundControl = true; + public bool MMSoundManagerSoundFade = true; + public bool MMSoundManagerTrackControl = true; + public bool MMSoundManagerTrackFade = true; + public bool Sound = true; + + [MMInspectorGroup("Camera", true, 18)] [MMInspectorButton("ToggleCamera")] + public bool ToggleCameraButton; + + public bool CameraShake = true; + public bool CameraZoom = true; + #if MM_CINEMACHINE || MM_CINEMACHINE3 + public bool CinemachineImpulse = true; + public bool CinemachineImpulseClear = true; + public bool CinemachineImpulseSource = true; + public bool CinemachineTransition = true; + #endif + public bool ClippingPlanes = true; + public bool Fade = true; + public bool FieldOfView = true; + public bool Flash = true; + public bool OrthographicSize = true; + + [MMInspectorGroup("Debug", true, 19)] [MMInspectorButton("ToggleDebug")] + public bool ToggleDebugButton; + + public bool Comment = true; + public bool Log = true; + + [MMInspectorGroup("Events", true, 20)] [MMInspectorButton("ToggleEvents")] + public bool ToggleEventsButton; + + public bool MMGameEvent = true; + public bool UnityEvents = true; + + [MMInspectorGroup("GameObject", true, 47)] [MMInspectorButton("ToggleGameObject")] + public bool ToggleGameObjectButton; + + public bool Broadcast = true; + public bool Collider = true; + public bool Collider2D = true; + public bool DestroyTargetObject = true; + public bool EnableBehaviour = true; + public bool FloatController = true; + public bool InstantiateObject = true; + public bool MMRadioSignal = true; + public bool Rigidbody = true; + public bool Rigidbody2D = true; + public bool SetActive = true; + + + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + [MMInspectorGroup("Haptics", true, 22)] [MMInspectorButton("ToggleHaptics")] + public bool ToggleHapticsButton; + + public bool HapticClip = true; + public bool HapticContinuous = true; + public bool HapticControl = true; + public bool HapticEmphasis = true; + public bool HapticPreset = true; + #endif + + [MMInspectorGroup("Light", true, 23)] [MMInspectorButton("ToggleLight")] + public bool ToggleLightButton; + + public bool Light = true; + + [MMInspectorGroup("Loop", true, 24)] [MMInspectorButton("ToggleLoop")] + public bool ToggleLoopButton; + + public bool Looper = true; + public bool LooperStart = true; + + [MMInspectorGroup("Particles", true, 25)] [MMInspectorButton("ToggleParticles")] + public bool ToggleParticlesButton; + + public bool ParticlesInstantiation = true; + public bool ParticlesPlay = true; + + [MMInspectorGroup("Pause", true, 26)] [MMInspectorButton("TogglePause")] + public bool TogglePauseButton; + + public bool HoldingPause = true; + public bool Pause = true; + + [MMInspectorGroup("Post Process", true, 27)] [MMInspectorButton("TogglePostProcess")] + public bool TogglePostProcessButton; + + public bool Bloom = true; + public bool ChromaticAberration = true; + public bool ColorGrading = true; + public bool DepthOfField = true; + public bool GlobalPPVolumeAutoBlend = true; + public bool LensDistortion = true; + public bool PPMovingFilter = true; + public bool Vignette = true; + + [MMInspectorGroup("Flicker", true, 28)] [MMInspectorButton("ToggleFlicker")] + public bool ToggleFlickerButton; + + public bool Flicker = true; + public bool Fog = true; + public bool Material = true; + public bool MMBlink = true; + public bool ShaderGlobal = true; + public bool ShaderController = true; + public bool Skybox = true; + public bool SpriteRenderer = true; + public bool TextureOffset = true; + public bool TextureScale = true; + + [MMInspectorGroup("Scene", true, 29)] [MMInspectorButton("ToggleScene")] + public bool ToggleSceneButton; + + public bool LoadScene = true; + public bool UnloadScene = true; + + [MMInspectorGroup("Time", true, 31)] [MMInspectorButton("ToggleTime")] + public bool ToggleTimeButton; + + public bool FreezeFrame = true; + public bool TimescaleModifier = true; + + [MMInspectorGroup("Transform", true, 32)] [MMInspectorButton("ToggleTransform")] + public bool ToggleTransformButton; + + public bool Destination = true; + public bool Position = true; + public bool PositionShake = true; + public bool RotatePositionAround = true; + public bool Rotation = true; + public bool RotationShake = true; + public bool Scale = true; + public bool ScaleShake = true; + public bool SquashAndStretch = true; + public bool Wiggle = true; + + [MMInspectorGroup("UI", true, 33)] [MMInspectorButton("ToggleUI")] + public bool ToggleUiButton; + + public bool CanvasGroup = true; + public bool CanvasGroupBlocksRaycasts = true; + public bool FloatingText = true; + public bool Graphic = true; + public bool GraphicCrossFade = true; + public bool Image = true; + public bool ImageAlpha = true; + public bool ImageFill = true; + public bool ImageRaycastTarget = true; + public bool ImageTextureOffset = true; + public bool ImageTextureScale = true; + public bool RectTransformAnchor = true; + public bool RectTransformOffset = true; + public bool RectTransformPivot = true; + public bool RectTransformSizeDelta = true; + public bool Text = true; + public bool TextColor = true; + public bool TextFontSize = true; + public bool VideoPlayer = true; + + [MMInspectorGroup("TextMesh Pro", true, 30)] [MMInspectorButton("ToggleTextMeshPro")] + public bool ToggleTextMeshProButton; + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public bool TMPAlpha = true; + public bool TMPCharacterSpacing = true; + public bool TMPColor = true; + public bool TMPCountTo = true; + public bool TMPDilate = true; + public bool TMPFontSize = true; + public bool TMPLineSpacing = true; + public bool TMPOutlineColor = true; + public bool TMPOutlineWidth = true; + public bool TMPParagraphSpacing = true; + public bool TMPSoftness = true; + public bool TMPText = true; + public bool TMPTextReveal = true; + public bool TMPWordSpacing = true; + #endif + + #region ToggleMethods + + private void ToggleAnimation() + { + AnimationParameter = !AnimationParameter; + AnimatorSpeed = !AnimatorSpeed; + } + + private void ToggleAudio() + { + AudioFilterDistortion = !AudioFilterDistortion; + AudioFilterEcho = !AudioFilterEcho; + AudioFilterHighPass = !AudioFilterHighPass; + AudioFilterLowPass = !AudioFilterLowPass; + AudioFilterReverb = !AudioFilterReverb; + AudioMixerSnapshotTransition = !AudioMixerSnapshotTransition; + AudioSource = !AudioSource; + AudioSourcePitch = !AudioSourcePitch; + AudioSourceStereoPan = !AudioSourceStereoPan; + AudioSourceVolume = !AudioSourceVolume; + MMPlaylist = !MMPlaylist; + MMSoundManagerAllSoundsControl = !MMSoundManagerAllSoundsControl; + MMSoundManagerSaveAndLoad = !MMSoundManagerSaveAndLoad; + MMSoundManagerSound = !MMSoundManagerSound; + MMSoundManagerSoundControl = !MMSoundManagerSoundControl; + MMSoundManagerSoundFade = !MMSoundManagerSoundFade; + MMSoundManagerTrackControl = !MMSoundManagerTrackControl; + MMSoundManagerTrackFade = !MMSoundManagerTrackFade; + Sound = !Sound; + } + + private void ToggleCamera() + { + CameraShake = !CameraShake; + CameraZoom = !CameraZoom; + #if MM_CINEMACHINE || MM_CINEMACHINE3 + CinemachineImpulse = !CinemachineImpulse; + CinemachineImpulseClear = !CinemachineImpulseClear; + CinemachineImpulseSource = !CinemachineImpulseSource; + CinemachineTransition = !CinemachineTransition; + #endif + ClippingPlanes = !ClippingPlanes; + Fade = !Fade; + FieldOfView = !FieldOfView; + Flash = !Flash; + OrthographicSize = !OrthographicSize; + } + + private void ToggleDebug() + { + Comment = !Comment; + Log = !Log; + } + + private void ToggleEvents() + { + MMGameEvent = !MMGameEvent; + UnityEvents = !UnityEvents; + } + + private void ToggleGameObject() + { + Broadcast = !Broadcast; + Collider = !Collider; + Collider2D = !Collider2D; + DestroyTargetObject = !DestroyTargetObject; + EnableBehaviour = !EnableBehaviour; + FloatController = !FloatController; + InstantiateObject = !InstantiateObject; + MMRadioSignal = !MMRadioSignal; + Rigidbody = !Rigidbody; + Rigidbody2D = !Rigidbody2D; + SetActive = !SetActive; + } + + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + private void ToggleHaptics() + { + HapticClip = !HapticClip; + HapticContinuous = !HapticContinuous; + HapticControl = !HapticControl; + HapticEmphasis = !HapticEmphasis; + HapticPreset = !HapticPreset; + } + #endif + + private void ToggleLight() + { + Light = !Light; + } + + private void ToggleLoop() + { + Looper = !Looper; + LooperStart = !LooperStart; + } + + private void ToggleParticles() + { + ParticlesInstantiation = !ParticlesInstantiation; + ParticlesPlay = !ParticlesPlay; + } + + private void TogglePause() + { + HoldingPause = !HoldingPause; + Pause = !Pause; + } + + #if MM_POSTPROCESSING + private void TogglePostProcess() + { + Bloom = !Bloom; + ChromaticAberration = !ChromaticAberration; + ColorGrading = !ColorGrading; + DepthOfField = !DepthOfField; + GlobalPPVolumeAutoBlend = !GlobalPPVolumeAutoBlend; + LensDistortion = !LensDistortion; + PPMovingFilter = !PPMovingFilter; + Vignette = !Vignette; + } + #endif + + private void ToggleFlicker() + { + Flicker = !Flicker; + Fog = !Fog; + Material = !Material; + MMBlink = !MMBlink; + ShaderGlobal = !ShaderGlobal; + ShaderController = !ShaderController; + Skybox = !Skybox; + SpriteRenderer = !SpriteRenderer; + TextureOffset = !TextureOffset; + TextureScale = !TextureScale; + } + + private void ToggleScene() + { + LoadScene = !LoadScene; + UnloadScene = !UnloadScene; + } + + private void ToggleTime() + { + FreezeFrame = !FreezeFrame; + TimescaleModifier = !TimescaleModifier; + } + + private void ToggleTransform() + { + Destination = !Destination; + Position = !Position; + PositionShake = !PositionShake; + RotatePositionAround = !RotatePositionAround; + Rotation = !Rotation; + RotationShake = !RotationShake; + Scale = !Scale; + ScaleShake = !ScaleShake; + SquashAndStretch = !SquashAndStretch; + Wiggle = !Wiggle; + } + + private void ToggleUI() + { + CanvasGroup = !CanvasGroup; + CanvasGroupBlocksRaycasts = !CanvasGroupBlocksRaycasts; + FloatingText = !FloatingText; + Graphic = !Graphic; + GraphicCrossFade = !GraphicCrossFade; + Image = !Image; + ImageAlpha = !ImageAlpha; + ImageFill = !ImageFill; + ImageRaycastTarget = !ImageRaycastTarget; + ImageTextureOffset = !ImageTextureOffset; + ImageTextureScale = !ImageTextureScale; + RectTransformAnchor = !RectTransformAnchor; + RectTransformOffset = !RectTransformOffset; + RectTransformPivot = !RectTransformPivot; + RectTransformSizeDelta = !RectTransformSizeDelta; + Text = !Text; + TextColor = !TextColor; + TextFontSize = !TextFontSize; + VideoPlayer = !VideoPlayer; + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + private void ToggleTextMeshPro() + { + TMPAlpha = !TMPAlpha; + TMPCharacterSpacing = !TMPCharacterSpacing; + TMPColor = !TMPColor; + TMPCountTo = !TMPCountTo; + TMPDilate = !TMPDilate; + TMPFontSize = !TMPFontSize; + TMPLineSpacing = !TMPLineSpacing; + TMPOutlineColor = !TMPOutlineColor; + TMPOutlineWidth = !TMPOutlineWidth; + TMPParagraphSpacing = !TMPParagraphSpacing; + TMPSoftness = !TMPSoftness; + TMPText = !TMPText; + TMPTextReveal = !TMPTextReveal; + TMPWordSpacing = !TMPWordSpacing; + } + #endif + + #endregion + + private void Start() + { + MMF_Animation.FeedbackTypeAuthorized = AnimationParameter; + MMF_AnimatorSpeed.FeedbackTypeAuthorized = AnimatorSpeed; + MMF_AudioFilterDistortion.FeedbackTypeAuthorized = AudioFilterDistortion; + MMF_AudioFilterEcho.FeedbackTypeAuthorized = AudioFilterEcho; + MMF_AudioFilterHighPass.FeedbackTypeAuthorized = AudioFilterHighPass; + MMF_AudioFilterLowPass.FeedbackTypeAuthorized = AudioFilterLowPass; + MMF_AudioFilterReverb.FeedbackTypeAuthorized = AudioFilterReverb; + MMF_AudioMixerSnapshotTransition.FeedbackTypeAuthorized = AudioMixerSnapshotTransition; + MMF_AudioSource.FeedbackTypeAuthorized = AudioSource; + MMF_AudioSourcePitch.FeedbackTypeAuthorized = AudioSourcePitch; + MMF_AudioSourceStereoPan.FeedbackTypeAuthorized = AudioSourceStereoPan; + MMF_AudioSourceVolume.FeedbackTypeAuthorized = AudioSourceVolume; + MMF_Playlist.FeedbackTypeAuthorized = MMPlaylist; + MMF_MMSoundManagerAllSoundsControl.FeedbackTypeAuthorized = MMSoundManagerAllSoundsControl; + MMF_MMSoundManagerSaveLoad.FeedbackTypeAuthorized = MMSoundManagerSaveAndLoad; + MMF_MMSoundManagerSound.FeedbackTypeAuthorized = MMSoundManagerSound; + MMF_MMSoundManagerSoundControl.FeedbackTypeAuthorized = MMSoundManagerSoundControl; + MMF_MMSoundManagerSoundFade.FeedbackTypeAuthorized = MMSoundManagerSoundFade; + MMF_MMSoundManagerTrackControl.FeedbackTypeAuthorized = MMSoundManagerTrackControl; + MMF_MMSoundManagerTrackFade.FeedbackTypeAuthorized = MMSoundManagerTrackFade; + MMF_Sound.FeedbackTypeAuthorized = Sound; + MMF_CameraShake.FeedbackTypeAuthorized = CameraShake; + MMF_CameraZoom.FeedbackTypeAuthorized = CameraZoom; + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + MMF_CinemachineImpulse.FeedbackTypeAuthorized = CinemachineImpulse; + MMF_CinemachineImpulseClear.FeedbackTypeAuthorized = CinemachineImpulseClear; + MMF_CinemachineImpulseSource.FeedbackTypeAuthorized = CinemachineImpulseSource; + MMF_CinemachineTransition.FeedbackTypeAuthorized = CinemachineTransition; + #endif + + MMF_CameraClippingPlanes.FeedbackTypeAuthorized = ClippingPlanes; + MMF_CameraFieldOfView.FeedbackTypeAuthorized = FieldOfView; + MMF_CameraOrthographicSize.FeedbackTypeAuthorized = OrthographicSize; + MMF_DebugComment.FeedbackTypeAuthorized = Comment; + MMF_DebugLog.FeedbackTypeAuthorized = Log; + MMF_MMGameEvent.FeedbackTypeAuthorized = MMGameEvent; + MMF_Events.FeedbackTypeAuthorized = UnityEvents; + MMF_Broadcast.FeedbackTypeAuthorized = Broadcast; + MMF_Collider.FeedbackTypeAuthorized = Collider; + MMF_Collider2D.FeedbackTypeAuthorized = Collider2D; + MMF_Destroy.FeedbackTypeAuthorized = DestroyTargetObject; + MMF_Enable.FeedbackTypeAuthorized = EnableBehaviour; + MMF_FloatController.FeedbackTypeAuthorized = FloatController; + MMF_InstantiateObject.FeedbackTypeAuthorized = InstantiateObject; + MMF_RadioSignal.FeedbackTypeAuthorized = MMRadioSignal; + MMF_Rigidbody.FeedbackTypeAuthorized = Rigidbody; + MMF_Rigidbody2D.FeedbackTypeAuthorized = Rigidbody2D; + MMF_SetActive.FeedbackTypeAuthorized = SetActive; + + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + MMF_Haptics.FeedbackTypeAuthorized = HapticClip; + MMF_NVContinuous.FeedbackTypeAuthorized = HapticContinuous; + MMF_NVControl.FeedbackTypeAuthorized = HapticControl; + MMF_NVEmphasis.FeedbackTypeAuthorized = HapticEmphasis; + MMF_NVPreset.FeedbackTypeAuthorized = HapticPreset; + #endif + + MMF_Light.FeedbackTypeAuthorized = Light; + MMF_Looper.FeedbackTypeAuthorized = Looper; + MMF_LooperStart.FeedbackTypeAuthorized = LooperStart; + MMF_ParticlesInstantiation.FeedbackTypeAuthorized = ParticlesInstantiation; + MMF_Particles.FeedbackTypeAuthorized = ParticlesPlay; + MMF_HoldingPause.FeedbackTypeAuthorized = HoldingPause; + MMF_Pause.FeedbackTypeAuthorized = Pause; + MMF_Flicker.FeedbackTypeAuthorized = Flicker; + MMF_Fog.FeedbackTypeAuthorized = Fog; + MMF_Material.FeedbackTypeAuthorized = Material; + MMF_Blink.FeedbackTypeAuthorized = MMBlink; + MMF_ShaderGlobal.FeedbackTypeAuthorized = ShaderGlobal; + MMF_Skybox.FeedbackTypeAuthorized = Skybox; + MMF_SpriteRenderer.FeedbackTypeAuthorized = SpriteRenderer; + MMF_TextureOffset.FeedbackTypeAuthorized = TextureOffset; + MMF_TextureScale.FeedbackTypeAuthorized = TextureScale; + MMF_LoadScene.FeedbackTypeAuthorized = LoadScene; + MMF_UnloadScene.FeedbackTypeAuthorized = UnloadScene; + MMF_FreezeFrame.FeedbackTypeAuthorized = FreezeFrame; + MMF_TimescaleModifier.FeedbackTypeAuthorized = TimescaleModifier; + MMF_DestinationTransform.FeedbackTypeAuthorized = Destination; + MMF_Position.FeedbackTypeAuthorized = Position; + MMF_PositionShake.FeedbackTypeAuthorized = PositionShake; + MMF_RotatePositionAround.FeedbackTypeAuthorized = RotatePositionAround; + MMF_Rotation.FeedbackTypeAuthorized = Rotation; + MMF_RotationShake.FeedbackTypeAuthorized = RotationShake; + MMF_Scale.FeedbackTypeAuthorized = Scale; + MMF_ScaleShake.FeedbackTypeAuthorized = ScaleShake; + MMF_SquashAndStretch.FeedbackTypeAuthorized = SquashAndStretch; + MMF_Wiggle.FeedbackTypeAuthorized = Wiggle; + MMF_CanvasGroup.FeedbackTypeAuthorized = CanvasGroup; + MMF_CanvasGroupBlocksRaycasts.FeedbackTypeAuthorized = CanvasGroupBlocksRaycasts; + + MMF_FloatingText.FeedbackTypeAuthorized = FloatingText; + MMF_RectTransformAnchor.FeedbackTypeAuthorized = RectTransformAnchor; + MMF_RectTransformOffset.FeedbackTypeAuthorized = RectTransformOffset; + MMF_RectTransformPivot.FeedbackTypeAuthorized = RectTransformPivot; + MMF_RectTransformSizeDelta.FeedbackTypeAuthorized = RectTransformSizeDelta; + MMF_VideoPlayer.FeedbackTypeAuthorized = VideoPlayer; + + #if MM_UI + MMF_ShaderController.FeedbackTypeAuthorized = ShaderController; + MMF_Graphic.FeedbackTypeAuthorized = Graphic; + MMF_GraphicCrossFade.FeedbackTypeAuthorized = GraphicCrossFade; + MMF_Image.FeedbackTypeAuthorized = Image; + MMF_ImageAlpha.FeedbackTypeAuthorized = ImageAlpha; + MMF_ImageFill.FeedbackTypeAuthorized = ImageFill; + MMF_ImageRaycastTarget.FeedbackTypeAuthorized = ImageRaycastTarget; + MMF_ImageTextureOffset.FeedbackTypeAuthorized = ImageTextureOffset; + MMF_ImageTextureScale.FeedbackTypeAuthorized = ImageTextureScale; + MMF_Text.FeedbackTypeAuthorized = Text; + MMF_TextColor.FeedbackTypeAuthorized = TextColor; + MMF_TextFontSize.FeedbackTypeAuthorized = TextFontSize; + MMF_Fade.FeedbackTypeAuthorized = Fade; + MMF_Flash.FeedbackTypeAuthorized = Flash; + #endif + + #if MM_POSTPROCESSING + MMF_Bloom.FeedbackTypeAuthorized = Bloom; + MMF_ChromaticAberration.FeedbackTypeAuthorized = ChromaticAberration; + MMF_ColorGrading.FeedbackTypeAuthorized = ColorGrading; + MMF_DepthOfField.FeedbackTypeAuthorized = DepthOfField; + MMF_GlobalPPVolumeAutoBlend.FeedbackTypeAuthorized = GlobalPPVolumeAutoBlend; + MMF_LensDistortion.FeedbackTypeAuthorized = LensDistortion; + MMF_Vignette.FeedbackTypeAuthorized = Vignette; + MMF_PPMovingFilter.FeedbackTypeAuthorized = PPMovingFilter; + #endif + + #if MM_HDRP + MMF_Bloom_HDRP.FeedbackTypeAuthorized = Bloom; + MMF_ChromaticAberration_HDRP.FeedbackTypeAuthorized = ChromaticAberration; + MMF_LensDistortion_HDRP.FeedbackTypeAuthorized = LensDistortion; + MMF_ColorAdjustments_HDRP.FeedbackTypeAuthorized = ColorGrading; + MMF_LensDistortion_HDRP.FeedbackTypeAuthorized = LensDistortion; + MMF_Vignette_HDRP.FeedbackTypeAuthorized = Vignette; + #endif + + #if MM_URP + MMF_Bloom_URP.FeedbackTypeAuthorized = Bloom; + MMF_ChromaticAberration_URP.FeedbackTypeAuthorized = ChromaticAberration; + MMF_LensDistortion_URP.FeedbackTypeAuthorized = LensDistortion; + MMF_ColorAdjustments_URP.FeedbackTypeAuthorized = ColorGrading; + MMF_LensDistortion_URP.FeedbackTypeAuthorized = LensDistortion; + MMF_Vignette_URP.FeedbackTypeAuthorized = Vignette; + #endif + + #if (MM_TEXTMESHPRO || MM_UGUI2) + MMF_TMPAlpha.FeedbackTypeAuthorized = TMPAlpha; + MMF_TMPCharacterSpacing.FeedbackTypeAuthorized = TMPCharacterSpacing; + MMF_TMPColor.FeedbackTypeAuthorized = TMPColor; + MMF_TMPCountTo.FeedbackTypeAuthorized = TMPCountTo; + MMF_TMPDilate.FeedbackTypeAuthorized = TMPDilate; + MMF_TMPFontSize.FeedbackTypeAuthorized = TMPFontSize; + MMF_TMPLineSpacing.FeedbackTypeAuthorized = TMPLineSpacing; + MMF_TMPOutlineColor.FeedbackTypeAuthorized = TMPOutlineColor; + MMF_TMPOutlineWidth.FeedbackTypeAuthorized = TMPOutlineWidth; + MMF_TMPParagraphSpacing.FeedbackTypeAuthorized = TMPParagraphSpacing; + MMF_TMPSoftness.FeedbackTypeAuthorized = TMPSoftness; + MMF_TMPText.FeedbackTypeAuthorized = TMPText; + MMF_TMPTextReveal.FeedbackTypeAuthorized = TMPTextReveal; + #endif + } + } + +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Authorizations/MMFeedbacksAuthorizations.cs.meta b/Assets/Feel/MMFeedbacks/Authorizations/MMFeedbacksAuthorizations.cs.meta new file mode 100644 index 0000000..94dad5e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Authorizations/MMFeedbacksAuthorizations.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be090172b5d6e3149b78c6da8b309d47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Authorizations/MoreMountains.Feedbacks.Authorizations.asmref b/Assets/Feel/MMFeedbacks/Authorizations/MoreMountains.Feedbacks.Authorizations.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Authorizations/MoreMountains.Feedbacks.Authorizations.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Authorizations/MoreMountains.Feedbacks.Authorizations.asmref.meta b/Assets/Feel/MMFeedbacks/Authorizations/MoreMountains.Feedbacks.Authorizations.asmref.meta new file mode 100644 index 0000000..8cf6cef --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Authorizations/MoreMountains.Feedbacks.Authorizations.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9a55bdc9c20a8d640a83b706174628dd +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor.meta b/Assets/Feel/MMFeedbacks/Editor.meta new file mode 100644 index 0000000..5dc2748 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b38c3aee5b446914b9307897b3f70ece +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core.meta b/Assets/Feel/MMFeedbacks/Editor/Core.meta new file mode 100644 index 0000000..b1d3680 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c15bb0862679ae743bdf21a29103355a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/AttributeDrawers.cs b/Assets/Feel/MMFeedbacks/Editor/Core/AttributeDrawers.cs new file mode 100644 index 0000000..d0e2354 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/AttributeDrawers.cs @@ -0,0 +1,271 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Feedbacks +{ + [CustomPropertyDrawer(typeof(MMFEnumConditionAttribute))] + public class MMFEnumConditionAttributeDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + MMFEnumConditionAttribute enumConditionAttribute = (MMFEnumConditionAttribute)attribute; + bool enabled = GetConditionAttributeResult(enumConditionAttribute, property); + bool previouslyEnabled = GUI.enabled; + GUI.enabled = enabled; + if (!enumConditionAttribute.Hidden || enabled) + { + EditorGUI.PropertyField(position, property, label, true); + } + GUI.enabled = previouslyEnabled; + } + + private bool GetConditionAttributeResult(MMFEnumConditionAttribute enumConditionAttribute, SerializedProperty property) + { + bool enabled = true; + string propertyPath = property.propertyPath; + string conditionPath = propertyPath.Replace(property.name, enumConditionAttribute.ConditionEnum); + SerializedProperty sourcePropertyValue = property.serializedObject.FindProperty(conditionPath); + + if ((sourcePropertyValue != null) && (sourcePropertyValue.propertyType == SerializedPropertyType.Enum)) + { + int currentEnum = sourcePropertyValue.enumValueIndex; + enabled = enumConditionAttribute.ContainsBitFlag(currentEnum); + } + else + { + Debug.LogWarning("No matching boolean found for ConditionAttribute in object: " + enumConditionAttribute.ConditionEnum); + } + + return enabled; + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + MMFEnumConditionAttribute enumConditionAttribute = (MMFEnumConditionAttribute)attribute; + bool enabled = GetConditionAttributeResult(enumConditionAttribute, property); + + if (!enumConditionAttribute.Hidden || enabled) + { + return EditorGUI.GetPropertyHeight(property, label); + } + else + { + /*int multiplier = 1; // this multiplier fixes issues in differing property spacing between MMFeedbacks and MMF_Player + if (property.depth > 0) + { + multiplier = property.depth; + }*/ + return -EditorGUIUtility.standardVerticalSpacing /** multiplier*/; + } + } + } + + // original implementation by http://www.brechtos.com/hiding-or-disabling-inspector-properties-using-propertydrawers-within-unity-5/ + [CustomPropertyDrawer(typeof(MMFConditionAttribute))] + public class MMFConditionAttributeDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + MMFConditionAttribute conditionAttribute = (MMFConditionAttribute)attribute; + bool enabled = GetConditionAttributeResult(conditionAttribute, property); + bool previouslyEnabled = GUI.enabled; + GUI.enabled = conditionAttribute.Negative ? !enabled : enabled; + if (ShouldDisplay(conditionAttribute, enabled)) + { + EditorGUI.PropertyField(position, property, label, true); + } + GUI.enabled = previouslyEnabled; + } + + private bool GetConditionAttributeResult(MMFConditionAttribute conditionAttribute, SerializedProperty property) + { + bool enabled = true; + string propertyPath = property.propertyPath; + string conditionPath = propertyPath.Replace(property.name, conditionAttribute.ConditionBoolean); + SerializedProperty sourcePropertyValue = property.serializedObject.FindProperty(conditionPath); + + if (sourcePropertyValue != null) + { + enabled = sourcePropertyValue.boolValue; + } + else + { + Debug.LogWarning("No matching boolean found for ConditionAttribute in object: " + conditionAttribute.ConditionBoolean); + } + + return enabled; + } + + private bool ShouldDisplay(MMFConditionAttribute conditionAttribute, bool result) + { + bool shouldDisplay = !conditionAttribute.Hidden || result; + if (conditionAttribute.Negative) + { + shouldDisplay = !shouldDisplay; + } + return shouldDisplay; + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + MMFConditionAttribute conditionAttribute = (MMFConditionAttribute)attribute; + bool enabled = GetConditionAttributeResult(conditionAttribute, property); + + if (ShouldDisplay(conditionAttribute, enabled)) + { + return EditorGUI.GetPropertyHeight(property, label); + } + else + { + /*int multiplier = 1; // this multiplier fixes issues in differing property spacing between MMFeedbacks and MMF_Player + if (property.depth > 0) + { + //multiplier = property.depth; + }*/ + return -EditorGUIUtility.standardVerticalSpacing /** multiplier*/; + } + } + } + + [CustomPropertyDrawer(typeof(MMFHiddenAttribute))] + public class MMFHiddenAttributeDrawer : PropertyDrawer + { + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 0f; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + + } + } + + [CustomPropertyDrawer(typeof(MMFInformationAttribute))] + /// + /// This class allows the display of a message box (warning, info, error...) next to a property (before or after) + /// + public class MMFInformationAttributeDrawer : PropertyDrawer + { + // determines the space after the help box, the space before the text box, and the width of the help box icon + const int spaceBeforeTheTextBox = 5; + const int spaceAfterTheTextBox = 10; + const int iconWidth = 55; + + MMFInformationAttribute informationAttribute { get { return ((MMFInformationAttribute)attribute); } } + + /// + /// OnGUI, displays the property and the textbox in the specified order + /// + /// Rect. + /// Property. + /// Label. + public override void OnGUI(Rect rect, SerializedProperty prop, GUIContent label) + { + if (HelpEnabled()) + { + EditorStyles.helpBox.richText = true; + Rect helpPosition = rect; + Rect textFieldPosition = rect; + + if (!informationAttribute.MessageAfterProperty) + { + // we position the message before the property + helpPosition.height = DetermineTextboxHeight(informationAttribute.Message); + + textFieldPosition.y += helpPosition.height + spaceBeforeTheTextBox; + textFieldPosition.height = GetPropertyHeight(prop, label); + } + else + { + // we position the property first, then the message + textFieldPosition.height = GetPropertyHeight(prop, label); + + helpPosition.height = DetermineTextboxHeight(informationAttribute.Message); + // we add the complete property height (property + helpbox, as overridden in this very script), and substract both to get just the property + helpPosition.y += GetPropertyHeight(prop, label) - DetermineTextboxHeight(informationAttribute.Message) - spaceAfterTheTextBox; + } + + EditorGUI.HelpBox(helpPosition, informationAttribute.Message, informationAttribute.Type); + EditorGUI.PropertyField(textFieldPosition, prop, label, true); + } + else + { + Rect textFieldPosition = rect; + textFieldPosition.height = GetPropertyHeight(prop, label); + EditorGUI.PropertyField(textFieldPosition, prop, label, true); + } + } + + /// + /// Returns the complete height of the whole block (property + help text) + /// + /// The block height. + /// Property. + /// Label. + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + if (HelpEnabled()) + { + return EditorGUI.GetPropertyHeight(property) + DetermineTextboxHeight(informationAttribute.Message) + spaceAfterTheTextBox + spaceBeforeTheTextBox; + } + else + { + return EditorGUI.GetPropertyHeight(property); + } + } + + /// + /// Checks the editor prefs to see if help is enabled or not + /// + /// true, if enabled was helped, false otherwise. + protected virtual bool HelpEnabled() + { + bool helpEnabled = false; + if (EditorPrefs.HasKey("MMShowHelpInInspectors")) + { + if (EditorPrefs.GetBool("MMShowHelpInInspectors")) + { + helpEnabled = true; + } + } + return helpEnabled; + } + + /// + /// Determines the height of the textbox. + /// + /// The textbox height. + /// Message. + protected virtual float DetermineTextboxHeight(string message) + { + GUIStyle style = new GUIStyle(EditorStyles.helpBox); + style.richText = true; + + float newHeight = style.CalcHeight(new GUIContent(message), EditorGUIUtility.currentViewWidth - iconWidth); + return newHeight; + } + } + + [CustomPropertyDrawer(typeof(MMFReadOnlyAttribute))] + public class MMFReadOnlyAttributeDrawer : PropertyDrawer + { + // Necessary since some properties tend to collapse smaller than their content + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label, true); + } + + // Draw a disabled property field + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + GUI.enabled = false; // Disable fields + EditorGUI.PropertyField(position, property, label, true); + GUI.enabled = true; // Enable fields + } + } + + +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/AttributeDrawers.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/AttributeDrawers.cs.meta new file mode 100644 index 0000000..316825c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/AttributeDrawers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb4df52d2a954374b913a14cc5d474d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspector.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspector.cs new file mode 100644 index 0000000..f1b2a67 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspector.cs @@ -0,0 +1,462 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Reflection; +using System.Linq; +using System.Collections.Generic; + +namespace MoreMountains.Feedbacks +{ + public class MMFInspectorGroupData + { + public bool GroupIsOpen; + public MMFInspectorGroupAttribute GroupAttribute; + public List PropertiesList = new List(); + public HashSet GroupHashSet = new HashSet(); + public Color GroupColor; + + public void ClearGroup() + { + GroupAttribute = null; + GroupHashSet.Clear(); + PropertiesList.Clear(); + } + } + + public class MMF_FeedbackInspector + { + public bool DrawerInitialized; + public List PropertiesList = new List(); + public Dictionary GroupData = new Dictionary(); + + private string[] _mmHiddenPropertiesToHide; + private bool _hasMMHiddenProperties = false; + protected bool _shouldDrawBase = true; + protected SerializedProperty _currentProperty; + protected MMF_Feedback _feedback; + protected bool _expandGroupInspectors; + private const string _channelFieldName = "Channel"; + private const string _channelModeFieldName = "ChannelMode"; + private const string _channelDefinitionFieldName = "MMChannelDefinition"; + private const string _automatedTargetAcquisitionName = "AutomatedTargetAcquisition"; + + public virtual void OnEnable() + { + DrawerInitialized = false; + PropertiesList.Clear(); + GroupData.Clear(); + + MMFHiddenPropertiesAttribute[] hiddenProperties = (MMFHiddenPropertiesAttribute[])_currentProperty.GetType().GetCustomAttributes(typeof(MMFHiddenPropertiesAttribute), false); + if (hiddenProperties != null && hiddenProperties.Length > 0 && hiddenProperties[0].PropertiesNames != null) + { + _mmHiddenPropertiesToHide = hiddenProperties[0].PropertiesNames; + _hasMMHiddenProperties = true; + } + } + + public virtual void OnDisable() + { + foreach (KeyValuePair groupData in GroupData) + { + if (groupData.Value != null) + { + EditorPrefs.SetBool(string.Format($"{groupData.Value.GroupAttribute.GroupName}{groupData.Value.PropertiesList[0].name}{_feedback.UniqueID}"), groupData.Value.GroupIsOpen); + groupData.Value.ClearGroup(); + } + } + } + + protected Dictionary _conditionDictionary = new Dictionary(); + protected Dictionary _enumConditionDictionary = new Dictionary(); + protected MMFConditionAttribute _conditionAttributeStore; + protected MMFEnumConditionAttribute _enumConditionAttributeStore; + + public virtual void Initialization(SerializedProperty currentProperty, MMF_Feedback feedback, bool expandGroupInspectors) + { + if (DrawerInitialized) + { + return; + } + + _expandGroupInspectors = expandGroupInspectors; + _currentProperty = currentProperty; + _feedback = feedback; + _conditionDictionary.Clear(); + _enumConditionDictionary.Clear(); + + List fieldInfoList; + MMFInspectorGroupAttribute previousGroupAttribute = default; + int fieldInfoLength = MMF_FieldInfo.GetFieldInfo(feedback, out fieldInfoList); + + for (int i = 0; i < fieldInfoLength; i++) + { + SearchForConditions(fieldInfoList[i]); + MMFInspectorGroupAttribute group = Attribute.GetCustomAttribute(fieldInfoList[i], typeof(MMFInspectorGroupAttribute)) as MMFInspectorGroupAttribute; + + MMFInspectorGroupData groupData; + if (group == null) + { + if (previousGroupAttribute != null && previousGroupAttribute.GroupAllFieldsUntilNextGroupAttribute) + { + _shouldDrawBase = false; + if (!GroupData.TryGetValue(previousGroupAttribute.GroupName, out groupData)) + { + if (!ShouldSkipGroup(previousGroupAttribute.GroupName)) + { + GroupData.Add(previousGroupAttribute.GroupName, new MMFInspectorGroupData + { + GroupAttribute = previousGroupAttribute, + GroupHashSet = new HashSet { fieldInfoList[i].Name }, + GroupColor = MMFeedbacksColors.GetColorAt(previousGroupAttribute.GroupColorIndex) + }); + } + } + else + { + groupData.GroupColor = MMFeedbacksColors.GetColorAt(previousGroupAttribute.GroupColorIndex); + groupData.GroupHashSet.Add(fieldInfoList[i].Name); + } + } + + continue; + } + + previousGroupAttribute = group; + + if (!GroupData.TryGetValue(group.GroupName, out groupData)) + { + bool fallbackOpenState = _expandGroupInspectors; + if (group.ClosedByDefault) { fallbackOpenState = false; } + bool groupIsOpen = EditorPrefs.GetBool(string.Format($"{group.GroupName}{fieldInfoList[i].Name}{feedback.UniqueID}"), fallbackOpenState); + + if (!ShouldSkipGroup(previousGroupAttribute.GroupName)) + { + GroupData.Add(group.GroupName, new MMFInspectorGroupData + { + GroupAttribute = group, + GroupColor = MMFeedbacksColors.GetColorAt(previousGroupAttribute.GroupColorIndex), + GroupHashSet = new HashSet { fieldInfoList[i].Name }, GroupIsOpen = groupIsOpen + }); + } + } + else + { + groupData.GroupHashSet.Add(fieldInfoList[i].Name); + groupData.GroupColor = MMFeedbacksColors.GetColorAt(previousGroupAttribute.GroupColorIndex); + } + } + + if (currentProperty.NextVisible(true)) + { + do + { + FillPropertiesList(currentProperty); + } while (currentProperty.NextVisible(false)); + } + + DrawerInitialized = true; + } + + protected virtual bool ShouldSkipGroup(string groupName) + { + bool skip = false; + + if (groupName == MMF_Feedback._randomnessGroupName && !_feedback.HasRandomness) + { + skip = true; + } + + if (groupName == MMF_Feedback._rangeGroupName && !_feedback.HasRange) + { + skip = true; + } + + if (groupName == MMF_Feedback._automaticSetupGroupName && !_feedback.HasAutomaticShakerSetup) + { + skip = true; + } + + return skip; + } + + protected virtual void SearchForConditions(FieldInfo fieldInfo) + { + _conditionAttributeStore = Attribute.GetCustomAttribute(fieldInfo, typeof(MMFConditionAttribute)) as MMFConditionAttribute; + if (_conditionAttributeStore != null) + { + _conditionDictionary.Add(fieldInfo.Name, _conditionAttributeStore); + } + _enumConditionAttributeStore = Attribute.GetCustomAttribute(fieldInfo, typeof(MMFEnumConditionAttribute)) as MMFEnumConditionAttribute; + if (_enumConditionAttributeStore != null) + { + _enumConditionDictionary.Add(fieldInfo.Name, _enumConditionAttributeStore); + } + } + + public void FillPropertiesList(SerializedProperty serializedProperty) + { + bool shouldClose = false; + + foreach (KeyValuePair pair in GroupData) + { + if (pair.Value.GroupHashSet.Contains(serializedProperty.name)) + { + SerializedProperty property = serializedProperty.Copy(); + shouldClose = true; + pair.Value.PropertiesList.Add(property); + break; + } + } + + if (!shouldClose) + { + SerializedProperty property = serializedProperty.Copy(); + PropertiesList.Add(property); + } + } + + public void DrawInspector(SerializedProperty currentProperty, MMF_Feedback feedback) + { + Initialization(currentProperty, feedback, _expandGroupInspectors); + if (!DrawBase(currentProperty, feedback)) + { + DrawContainer(feedback); + DrawContents(feedback); + } + } + + protected virtual bool DrawBase(SerializedProperty currentProperty, MMF_Feedback feedback) + { + if (_shouldDrawBase || !feedback.DrawGroupInspectors) + { + DrawNoGroupInspector(currentProperty, feedback); + return true; + } + else + { + return false; + } + } + + protected virtual void DrawContainer(MMF_Feedback feedback) + { + if (PropertiesList.Count == 0) + { + return; + } + + foreach (KeyValuePair pair in GroupData) + { + DrawVerticalLayout(() => DrawGroup(pair.Value, feedback), MMF_FeedbackInspectorStyle.ContainerStyle); + EditorGUI.indentLevel = 0; + } + } + + protected virtual void DrawContents(MMF_Feedback feedback) + { + if (PropertiesList.Count == 0) + { + return; + } + + EditorGUILayout.Space(); + for (int i = 1; i < PropertiesList.Count; i++) + { + if (_hasMMHiddenProperties && (!_mmHiddenPropertiesToHide.Contains(PropertiesList[i].name))) + { + if (!DrawCustomInspectors(PropertiesList[i], feedback)) + { + EditorGUILayout.PropertyField(PropertiesList[i], true); + } + } + } + } + + protected Rect _leftBorderRect = new Rect(); + protected Rect _setupRect = new Rect(); + protected Rect _verticalGroup = new Rect(); + protected Rect _widthRect = new Rect(); + protected GUIContent _groupTitle = new GUIContent(); + + protected virtual void DrawGroup(MMFInspectorGroupData groupData, MMF_Feedback feedback) + { + _verticalGroup = EditorGUILayout.BeginVertical(); + + // we draw a colored line on the left + _leftBorderRect.x = _verticalGroup.xMin + 5; + _leftBorderRect.y = _verticalGroup.yMin - 0; + _leftBorderRect.width = 3f; + _leftBorderRect.height = _verticalGroup.height + 0; + _leftBorderRect.xMin = 15f; + _leftBorderRect.xMax = 18f; + EditorGUI.DrawRect(_leftBorderRect, groupData.GroupColor); + + if (groupData.GroupAttribute.RequiresSetup && feedback.RequiresSetup) + { + // we draw a warning sign if needed + _widthRect = EditorGUILayout.GetControlRect(false, 0); + float setupRectWidth = 20f; + _setupRect.x = _widthRect.xMax - setupRectWidth; + _setupRect.y = _verticalGroup.yMin; + _setupRect.width = setupRectWidth; + _setupRect.height = 17f; + + EditorGUI.LabelField(_setupRect, MMF_PlayerStyling._setupRequiredIcon); + } + + groupData.GroupIsOpen = EditorGUILayout.Foldout(groupData.GroupIsOpen, groupData.GroupAttribute.GroupName, true, MMF_FeedbackInspectorStyle.GroupStyle); + + if (groupData.GroupIsOpen) + { + EditorGUI.indentLevel = 0; + + for (int i = 0; i < groupData.PropertiesList.Count; i++) + { + DrawVerticalLayout(() => DrawChild(i, feedback), MMF_FeedbackInspectorStyle.BoxChildStyle); + } + } + + EditorGUILayout.EndVertical(); + + void DrawChild(int i, MMF_Feedback feedbackDrawn) + { + if (i > groupData.PropertiesList.Count - 1) + { + return; + } + + if ((_hasMMHiddenProperties) && (_mmHiddenPropertiesToHide.Contains(groupData.PropertiesList[i].name))) + { + return; + } + + if (!feedback.HasChannel + && (groupData.PropertiesList[i].name == _channelFieldName + || groupData.PropertiesList[i].name == _channelModeFieldName + || groupData.PropertiesList[i].name == _channelDefinitionFieldName)) + { + return; + } + + _groupTitle.text = ObjectNames.NicifyVariableName(groupData.PropertiesList[i].name); + _groupTitle.tooltip = groupData.PropertiesList[i].tooltip; + + if (!DrawCustomInspectors(groupData.PropertiesList[i], feedback)) + { + bool shouldDraw = !((groupData.PropertiesList[i].name == _automatedTargetAcquisitionName) && + (!feedbackDrawn.HasAutomatedTargetAcquisition)); + if (shouldDraw) + { + EditorGUILayout.PropertyField(groupData.PropertiesList[i], _groupTitle, true); + } + } + } + } + + public static void DrawVerticalLayout(Action action, GUIStyle style) + { + EditorGUILayout.BeginVertical(style); + action(); + EditorGUILayout.EndVertical(); + } + + public void DrawNoGroupInspector(SerializedProperty currentProperty, MMF_Feedback feedback) + { + SerializedProperty endProp = currentProperty.GetEndProperty(); + + while (currentProperty.NextVisible(true) && !EqualContents(endProp, currentProperty)) + { + if (currentProperty.depth <= 2) + { + if (!DrawCustomInspectors(currentProperty, feedback)) + { + EditorGUILayout.PropertyField(currentProperty, true); + } + } + } + } + + protected GUIContent _tweenCurveGUIContent = new GUIContent("MM Tween Curve"); + protected GUIContent _animationCurveGUIContent = new GUIContent("Animation Curve"); + protected const string _customInspectorButtonPropertyName = "MMF_Button"; + protected const string _customTweenTypePropertyName = "MMTweenType"; + protected const string _findPropertyRelativeMMTweenDefinitionType = "MMTweenDefinitionType"; + protected const string _mmTweenCurvePropertyName = "MMTweenCurve"; + protected const string _curvePropertyName = "Curve"; + protected SerializedProperty _mmTweenTypeProperty; + protected MMFConditionAttribute _conditionAttribute; + protected MMFEnumConditionAttribute _enumConditionAttribute; + + private bool DrawCustomInspectors(SerializedProperty currentProperty, MMF_Feedback feedback) + { + if (feedback.HasCustomInspectors) + { + switch (currentProperty.type) + { + case _customInspectorButtonPropertyName: + MMF_Button myButton = (MMF_Button)(currentProperty.MMFGetObjectValue()); + if (GUILayout.Button(myButton.ButtonText)) + { + myButton.TargetMethod(); + } + return true; + case _customTweenTypePropertyName: + // if we're displaying a tween type, we need to handle conditions manually + + _animationCurveGUIContent.tooltip = currentProperty.tooltip; + _tweenCurveGUIContent.tooltip = currentProperty.tooltip; + + _mmTweenTypeProperty = currentProperty.FindPropertyRelative(_findPropertyRelativeMMTweenDefinitionType); + if (_conditionDictionary.TryGetValue(currentProperty.name, out _conditionAttribute)) + { + string propertyPath = currentProperty.propertyPath; + string conditionPath = propertyPath.Replace(currentProperty.name, _conditionAttribute.ConditionBoolean); + SerializedProperty sourcePropertyValue = currentProperty.serializedObject.FindProperty(conditionPath); + if (!_conditionAttribute.Negative && !sourcePropertyValue.boolValue) + { + return true; + } + if (_conditionAttribute.Negative && sourcePropertyValue.boolValue) + { + return true; + } + } + + if (_enumConditionDictionary.TryGetValue(currentProperty.name, out _enumConditionAttribute)) + { + string propertyPath = currentProperty.propertyPath; + string conditionPath = propertyPath.Replace(currentProperty.name, _enumConditionAttribute.ConditionEnum); + SerializedProperty sourcePropertyValue = currentProperty.serializedObject.FindProperty(conditionPath); + + if ((sourcePropertyValue != null) && (sourcePropertyValue.propertyType == SerializedPropertyType.Enum)) + { + int currentEnum = sourcePropertyValue.enumValueIndex; + if (!_enumConditionAttribute.ContainsBitFlag(currentEnum)) + { + return true; + } + } + } + + EditorGUILayout.PropertyField(_mmTweenTypeProperty, new GUIContent(currentProperty.displayName, currentProperty.tooltip)); + if (_mmTweenTypeProperty.enumValueIndex == 0) + { + EditorGUILayout.PropertyField(currentProperty.FindPropertyRelative(_mmTweenCurvePropertyName), _tweenCurveGUIContent); + } + if (_mmTweenTypeProperty.enumValueIndex == 1) + { + EditorGUILayout.PropertyField(currentProperty.FindPropertyRelative(_curvePropertyName), _animationCurveGUIContent); + } + return true; + } + } + + return false; + } + + private bool EqualContents(SerializedProperty a, SerializedProperty b) + { + return SerializedProperty.EqualContents(a, b); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspector.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspector.cs.meta new file mode 100644 index 0000000..63e8289 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a25970639430d894ab27292af3987aa2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspectorStyle.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspectorStyle.cs new file mode 100644 index 0000000..b5952de --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspectorStyle.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + static class MMF_FeedbackInspectorStyle + { + public static GUIStyle ContainerStyle; + public static GUIStyle BoxChildStyle; + public static GUIStyle GroupStyle; + public static GUIStyle TextStyle; + + public static bool IsProSkin = EditorGUIUtility.isProSkin; + public static Texture2D GroupClosedTriangle = Resources.Load("IN foldout focus-6510"); + public static Texture2D GroupOpenTriangle = Resources.Load("IN foldout focus on-5718"); + public static Texture2D NoTexture = new Texture2D(0, 0); + + static MMF_FeedbackInspectorStyle() + { + // TEXT STYLE -------------------------------------------------------------------------------------------------------------- + + TextStyle = new GUIStyle(EditorStyles.largeLabel); + TextStyle.richText = true; + TextStyle.contentOffset = new Vector2(0, 25); + + //TextStyle.font = Font.CreateDynamicFontFromOSFont(new[] { "Terminus (TTF) for Windows", "Calibri" }, 14); + + // GROUP STYLE -------------------------------------------------------------------------------------------------------------- + + GroupStyle = new GUIStyle(EditorStyles.foldout); + + GroupStyle.active.background = GroupClosedTriangle; + GroupStyle.focused.background = GroupClosedTriangle; + GroupStyle.hover.background = GroupClosedTriangle; + GroupStyle.onActive.background = GroupOpenTriangle; + GroupStyle.onFocused.background = GroupOpenTriangle; + GroupStyle.onHover.background = GroupOpenTriangle; + + GroupStyle.fontStyle = FontStyle.Bold; + + GroupStyle.overflow = new RectOffset(100, 0, 0, 0); + GroupStyle.padding = new RectOffset(20, 0, 0, 0); + + // CONTAINER STYLE -------------------------------------------------------------------------------------------------------------- + + ContainerStyle = new GUIStyle(GUI.skin.box); + ContainerStyle.padding = new RectOffset(20, 0, 0, 0); + + // BOX CHILD STYLE -------------------------------------------------------------------------------------------------------------- + + BoxChildStyle = new GUIStyle(GUI.skin.box); + BoxChildStyle.padding = new RectOffset(0, 0, 0, 0); + BoxChildStyle.margin = new RectOffset(0, 0, 0, 0); + BoxChildStyle.normal.background = NoTexture; + + } + + static Texture2D MakeTex(int width, int height, Color col) + { + Color[] pix = new Color[width * height]; + for (int i = 0; i < pix.Length; ++i) + { + pix[i] = col; + } + Texture2D result = new Texture2D(width, height); + result.SetPixels(pix); + result.Apply(); + return result; + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspectorStyle.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspectorStyle.cs.meta new file mode 100644 index 0000000..f8ccaaa --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_FeedbackInspectorStyle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 678bc44d826a7b54c9edfa8fa70a76ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerConfiguration.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerConfiguration.cs new file mode 100644 index 0000000..46a9ddb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerConfiguration.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// An asset to store copy information, as well as global feedback settings. + /// It requires that one (and only one) MMFeedbacksConfiguration asset be created and stored in a Resources folder. + /// That's already done when installing MMFeedbacks. + /// + [CreateAssetMenu(menuName = "MoreMountains/MMFeedbacks/Configuration", fileName = "MMFeedbacksConfiguration")] + public class MMF_PlayerConfiguration : ScriptableObject + { + private static MMF_PlayerConfiguration _instance; + private static bool _instantiated; + + /// + /// Singleton pattern + /// + public static MMF_PlayerConfiguration Instance + { + get + { + if (_instantiated) + { + return _instance; + } + + string assetName = typeof(MMF_PlayerConfiguration).Name; + + MMF_PlayerConfiguration loadedAsset = Resources.Load("MMF_PlayerConfiguration"); + _instance = loadedAsset; + _instantiated = true; + + return _instance; + } + } + + [Header("Help settings")] + /// if this is true, inspector tips will be shown for MMFeedbacks + public bool ShowInspectorTips = true; + /// if this is true, when exiting play mode when KeepPlaymodeChanges is active, it'll turn off automatically, otherwise it'll remain on + public bool AutoDisableKeepPlaymodeChanges = true; + /// if this is true, when exiting play mode when KeepPlaymodeChanges is active, it'll turn off automatically, otherwise it'll remain on + public bool InspectorGroupsExpandedByDefault = true; + + + + private void OnDestroy(){ _instantiated = false; } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerConfiguration.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerConfiguration.cs.meta new file mode 100644 index 0000000..ab53c57 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bcf466015f0b254893ff0208fccf90f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerCopy.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerCopy.cs new file mode 100644 index 0000000..48dd5eb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerCopy.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using System.Linq; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// A helper class to copy and paste feedback properties + /// + static class MMF_PlayerCopy + { + static public System.Type Type { get; private set; } + public static readonly List CopiedFeedbacks = new List(); + public static readonly Dictionary> RuntimeChanges = new Dictionary>(); + + static string[] IgnoreList = new string[] + { + "m_ObjectHideFlags", + "m_CorrespondingSourceObject", + "m_PrefabInstance", + "m_PrefabAsset", + "m_GameObject", + "m_Enabled", + "m_EditorHideFlags", + "m_Script", + "m_Name", + "m_EditorClassIdentifier" + }; + + static MMF_PlayerCopy() + { + EditorApplication.playModeStateChanged += ModeChanged; + } + + private static void ModeChanged(PlayModeStateChange playModeState) + { + switch (playModeState) + { + case PlayModeStateChange.ExitingPlayMode: + StoreRuntimeChanges(); + break; + + case PlayModeStateChange.EnteredEditMode: + ApplyRuntimeChanges(); + break; + } + } + + private static void StoreRuntimeChanges() + { + foreach (MMF_Player player in MonoBehaviour.FindObjectsOfType(true).Where(p => p.KeepPlayModeChanges)) + { + MMF_PlayerCopy.StoreRuntimeChanges(player); + } + } + + private static void ApplyRuntimeChanges() + { + foreach (MMF_Player player in MonoBehaviour.FindObjectsOfType(true).Where(MMF_PlayerCopy.RuntimeChanges.ContainsKey)) + { + MMF_PlayerCopy.ApplyRuntimeChanges(player); + } + } + + static public bool HasCopy() + { + return CopiedFeedbacks != null && CopiedFeedbacks.Count == 1; + } + + static public bool HasMultipleCopies() + { + return CopiedFeedbacks != null && CopiedFeedbacks.Count > 1; + } + + static public void Copy(MMF_Feedback feedback) + { + Type feedbackType = feedback.GetType(); + MMF_Feedback newFeedback = (MMF_Feedback)Activator.CreateInstance(feedbackType); + EditorUtility.CopySerializedManagedFieldsOnly(feedback, newFeedback); + CopiedFeedbacks.Clear(); + CopiedFeedbacks.Add(newFeedback); + } + + static public void CopyAll(MMF_Player sourceFeedbacks) + { + CopiedFeedbacks.Clear(); + foreach (MMF_Feedback feedback in sourceFeedbacks.FeedbacksList) + { + Type feedbackType = feedback.GetType(); + MMF_Feedback newFeedback = (MMF_Feedback)Activator.CreateInstance(feedbackType); + EditorUtility.CopySerializedManagedFieldsOnly(feedback, newFeedback); + CopiedFeedbacks.Add(newFeedback); + } + } + + // Multiple Copy ---------------------------------------------------------- + + static public void PasteAll(MMF_PlayerEditor targetEditor) + { + foreach (MMF_Feedback feedback in MMF_PlayerCopy.CopiedFeedbacks) + { + targetEditor.TargetMmfPlayer.AddFeedback(feedback); + } + CopiedFeedbacks.Clear(); + } + + // Runtime Changes + + static public void StoreRuntimeChanges(MMF_Player player) + { + RuntimeChanges[player] = new List(); + foreach (MMF_Feedback feedback in player.FeedbacksList) + { + Type feedbackType = feedback.GetType(); + MMF_Feedback newFeedback = (MMF_Feedback)Activator.CreateInstance(feedbackType); + EditorUtility.CopySerializedManagedFieldsOnly(feedback, newFeedback); + RuntimeChanges[player].Add(newFeedback); + } + } + + static public void ApplyRuntimeChanges(MMF_Player player) + { + SerializedObject playerSerialized = new SerializedObject(player); + playerSerialized.Update(); + Undo.RecordObject(player, "Replace all feedbacks"); + player.FeedbacksList.Clear(); + foreach (MMF_Feedback feedback in MMF_PlayerCopy.RuntimeChanges[player]) + { + player.AddFeedback(feedback); + } + playerSerialized.ApplyModifiedProperties(); + PrefabUtility.RecordPrefabInstancePropertyModifications(player); + if (MMF_PlayerConfiguration.Instance.AutoDisableKeepPlaymodeChanges) + { + playerSerialized.Update(); + player.KeepPlayModeChanges = false; + playerSerialized.ApplyModifiedProperties(); + } + player.RefreshCache(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerCopy.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerCopy.cs.meta new file mode 100644 index 0000000..ac45ee9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerCopy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f7bf459716aa484c8db5d1ef3ef8049 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerEditor.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerEditor.cs new file mode 100644 index 0000000..85718fc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerEditor.cs @@ -0,0 +1,1109 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// A custom editor displaying a foldable list of MMFeedbacks, a dropdown to add more, as well as test buttons to test your feedbacks at runtime + /// + [CustomEditor(typeof(MMF_Player), true)] + public class MMF_PlayerEditor : Editor + { + /// + /// A data structure to store types and names + /// + public struct FeedbackTypePair + { + public System.Type FeedbackType; + public string FeedbackName; + } + + public MMF_Player TargetMmfPlayer; + protected SerializedProperty _mmfeedbacksList; + protected SerializedProperty _mmfeedbacksInitializationMode; + protected SerializedProperty _mmfeedbacksAutoInitialization; + protected SerializedProperty _mmfeedbacksAutoPlayOnStart; + protected SerializedProperty _mmfeedbacksAutoPlayOnEnable; + protected SerializedProperty _mmfeedbacksDirection; + protected SerializedProperty _mmfeedbacksFeedbacksIntensity; + protected SerializedProperty _mmfeedbacksAutoChangeDirectionOnEnd; + protected SerializedProperty _mmfeedbacksDurationMultiplier; + protected SerializedProperty _mmfeedbacksTimescaleMultiplier; + protected SerializedProperty _mmfeedbacksForceTimescaleMode; + protected SerializedProperty _mmfeedbacksForcedTimescaleMode; + protected SerializedProperty _mmfeedbacksPlayerTimescaleMode; + protected SerializedProperty _mmfeedbacksDisplayFullDurationDetails; + protected SerializedProperty _mmfeedbacksCooldownDuration; + protected SerializedProperty _mmfeedbacksInitialDelay; + protected SerializedProperty _mmfeedbacksCanPlay; + protected SerializedProperty _mmfeedbacksCanPlayWhileAlreadyPlaying; + protected SerializedProperty _mmfeedbacksPerformanceMode; + protected SerializedProperty _mmfeedbacksStopFeedbacksOnDisable; + protected SerializedProperty _mmfeedbacksPlayCount; + protected SerializedProperty _mmfeedbacksEvents; + protected SerializedProperty _keepPlayModeChanges; + protected SerializedProperty _mmfeedbacksChanceToPlay; + protected SerializedProperty _mmfeedbacksRandomizeDuration; + protected SerializedProperty _mmfeedbacksRandomDurationMultiplier; + + protected SerializedProperty _mmfeedbacksOnlyPlayIfWithinRange; + protected SerializedProperty _mmfeedbacksRangeCenter; + protected SerializedProperty _mmfeedbacksRangeDistance; + protected SerializedProperty _mmfeedbacksUseRangeFalloff; + protected SerializedProperty _mmfeedbacksRangeFalloff; + protected SerializedProperty _mmfeedbacksRemapRangeFalloff; + protected SerializedProperty _mmfeedbacksIgnoreRangeEvents; + + protected bool _feedbackListIsExpanded; + protected string _feedbackListLabel; + protected bool _feedbackListPause; + protected SerializedProperty _feedbackListProperty; + protected MMF_Feedback _feedbackListFeedback; + protected Dictionary _editors; + protected List _typeNames = new List(); + public static List _typesAndNames = new List(); + public static string[] _typeDisplays; + protected int _draggedStartID = -1; + protected int _draggedEndID = -1; + private static bool _debugView = false; + protected Texture2D _scriptDrivenBoxBackgroundTexture; + private static bool _settingsMenuDropdown; + protected Rect _helpBoxRect; + protected Event _currentEvent; + protected bool _cachedGUI = false; + + // GUI Styles + protected GUIStyle _directionButtonStyle = new GUIStyle(); + protected GUIStyle _playingStyle = new GUIStyle(); + + // Icons + protected GUIContent _directionIconUp; + protected GUIContent _directionIconDown; + + // Colors + protected Color _scriptDrivenBoxColorFrom = new Color(1f,0f,0f,1f); + protected Color _scriptDrivenBoxColorTo = new Color(0.7f,0.1f,0.1f,1f); + protected Color _playButtonColor = new Color32(193, 255, 2, 255); + protected Color _keepPlaymodeChangesButtonColor = new Color32(255, 97, 33, 255); + protected Color _originalBackgroundColor; + protected Color _scriptDrivenBoxColor; + protected Color _baseColor; + protected Color _draggedColor = new Color(0, 1, 1, 0.2f); + protected Color _redBackgroundColor = new Color32(255, 97, 33, 255); + protected Color _savedTextColor; + + protected Texture2D _whiteTexture; + protected Texture2D _redWarningBoxBackgroundTexture; + + protected float _durationRectWidth = 70f; + protected float _playingRectWidth = 70f; + protected float _directionRectWidth = 16f; + protected Rect _durationRect = new Rect(); + protected Rect _playingRect = new Rect(); + protected Rect _directionRect = new Rect(); + + protected GUIContent _pasteAsNewGUIContent; + protected GUIContent _replaceAllGUIContent; + protected GUIContent _pasteAllAsNewGUIContent; + protected GUIContent _feedbackPlayGUIContent; + protected GUIContent _feedbackRemoveGUIContent; + protected GUIContent _feedbackResetGUIContent; + protected GUIContent _feedbackDuplicateGUIContent; + protected GUIContent _feedbackCopyGUIContent; + protected GUIContent _feedbackPasteGUIContent; + + protected GUIStyle _helptextStyle; + protected GUIStyle _redWarningBoxStyle; + protected Texture2D _savedBackground; + + protected GUILayoutOption _pasteAsNewOption; + protected GUILayoutOption _replaceAllOption; + protected GUILayoutOption _pasteAllAsNewOption; + + protected Dictionary MMF_FeedbackInspectors = + new Dictionary(); + + protected const string _copyAllText = "Copy all"; + protected const string _pasteAsNewText = "Paste as new"; + protected const string _replaceAllText = "Replace all"; + protected const string _pasteAllAsNewText = "Paste all as new"; + protected const string _inactiveMessage = "All MMFeedbacks, including this one, are currently disabled. This is done via script, by changing the value of the MMFeedbacks.GlobalMMFeedbacksActive boolean. Right now this value has been set to false. Setting it back to true will allow MMFeedbacks to play again."; + protected const string _instructionsMessage = "Select Feedbacks from the 'add a feedback' dropdown and customize them. Remember, if you don't use auto initialization (Awake or Start), you'll need to initialize them via script."; + protected const string _initializationText = "Initialization"; + protected const string _directionText = "Direction"; + protected const string _intensityText = "Intensity"; + protected const string _timingText = "Timing"; + protected const string _rangeText = "Range"; + protected const string _playConditionsText = "Play Settings"; + protected const string _eventsText = "Events"; + protected const string _settingsText = "Settings"; + protected const string _playingBracketsText = "[PLAYING] "; + protected const string _infiniteLoopText = "[Infinite Loop] "; + protected const string _allFeedbacksDebugText = "All Feedbacks Debug"; + protected const string _initializeText = "Initialize"; + protected const string _playText = "Play"; + protected const string _removeText = "Remove"; + protected const string _pauseText = "Pause"; + protected const string _stopText = "Stop"; + protected const string _resetText = "Reset"; + protected const string _revertText = "Revert"; + protected const string _duplicateText = "Duplicate"; + protected const string _copyText = "Copy"; + protected const string _pasteText = "Paste"; + protected const string _skipText = "Skip"; + protected const string _restoreText = "Restore"; + protected const string _keepPlaymodeChangesText = "Keep Playmode Changes"; + protected const string _scriptDrivenInProgressText = "Script driven pause in progress, call Resume() to exit pause"; + protected const string _resumeText = "Resume"; + protected const string _undoText = "Modified Feedback Manager"; + protected const string _feedbacksSectionTitle = "Feedbacks"; + protected bool _expandGroupsInInspectors = true; + + #region Initialization + + /// + /// On Enable, grabs properties and initializes the add feedback dropdown's contents + /// + protected virtual void OnEnable() + { + Initialization(); + EditorApplication.playModeStateChanged += ModeChanged; + } + + protected virtual void Initialization() + { + // Get properties + TargetMmfPlayer = target as MMF_Player; + _mmfeedbacksList = serializedObject.FindProperty("FeedbacksList"); + _mmfeedbacksInitializationMode = serializedObject.FindProperty("InitializationMode"); + _mmfeedbacksAutoInitialization = serializedObject.FindProperty("AutoInitialization"); + _mmfeedbacksAutoPlayOnStart = serializedObject.FindProperty("AutoPlayOnStart"); + _mmfeedbacksAutoPlayOnEnable = serializedObject.FindProperty("AutoPlayOnEnable"); + _mmfeedbacksDirection = serializedObject.FindProperty("Direction"); + _mmfeedbacksAutoChangeDirectionOnEnd = serializedObject.FindProperty("AutoChangeDirectionOnEnd"); + _mmfeedbacksDurationMultiplier = serializedObject.FindProperty("DurationMultiplier"); + _mmfeedbacksTimescaleMultiplier = serializedObject.FindProperty("TimescaleMultiplier"); + _mmfeedbacksRandomizeDuration = serializedObject.FindProperty("RandomizeDuration"); + _mmfeedbacksRandomDurationMultiplier = serializedObject.FindProperty("RandomDurationMultiplier"); + _mmfeedbacksForceTimescaleMode = serializedObject.FindProperty("ForceTimescaleMode"); + _mmfeedbacksForcedTimescaleMode = serializedObject.FindProperty("ForcedTimescaleMode"); + _mmfeedbacksPlayerTimescaleMode = serializedObject.FindProperty("PlayerTimescaleMode"); + _mmfeedbacksDisplayFullDurationDetails = serializedObject.FindProperty("DisplayFullDurationDetails"); + _mmfeedbacksCooldownDuration = serializedObject.FindProperty("CooldownDuration"); + _mmfeedbacksInitialDelay = serializedObject.FindProperty("InitialDelay"); + _mmfeedbacksCanPlay = serializedObject.FindProperty("CanPlay"); + _mmfeedbacksCanPlayWhileAlreadyPlaying = serializedObject.FindProperty("CanPlayWhileAlreadyPlaying"); + _mmfeedbacksFeedbacksIntensity = serializedObject.FindProperty("FeedbacksIntensity"); + _keepPlayModeChanges = serializedObject.FindProperty("KeepPlayModeChanges"); + _mmfeedbacksPerformanceMode = serializedObject.FindProperty("PerformanceMode"); + _mmfeedbacksStopFeedbacksOnDisable = serializedObject.FindProperty("StopFeedbacksOnDisable"); + _mmfeedbacksPlayCount = serializedObject.FindProperty("PlayCount"); + _mmfeedbacksChanceToPlay = serializedObject.FindProperty("ChanceToPlay"); + + _mmfeedbacksOnlyPlayIfWithinRange = serializedObject.FindProperty("OnlyPlayIfWithinRange"); + _mmfeedbacksRangeCenter = serializedObject.FindProperty("RangeCenter"); + _mmfeedbacksRangeDistance = serializedObject.FindProperty("RangeDistance"); + _mmfeedbacksUseRangeFalloff = serializedObject.FindProperty("UseRangeFalloff"); + _mmfeedbacksRangeFalloff = serializedObject.FindProperty("RangeFalloff"); + _mmfeedbacksRemapRangeFalloff = serializedObject.FindProperty("RemapRangeFalloff"); + _mmfeedbacksIgnoreRangeEvents = serializedObject.FindProperty("IgnoreRangeEvents"); + + _expandGroupsInInspectors = MMF_PlayerConfiguration.Instance.InspectorGroupsExpandedByDefault; + + _mmfeedbacksEvents = serializedObject.FindProperty("Events"); + + // store GUI bg color + _originalBackgroundColor = GUI.backgroundColor; + + PrepareFeedbackTypeList(); + + foreach (KeyValuePair inspector in MMF_FeedbackInspectors) + { + inspector.Value.OnEnable(); + } + + // we force the styles to initialize on the next OnInspectorGUI call + _cachedGUI = false; + } + + /// + /// Lists all feedbacks, builds the dropdown list, and stores it in a static + protected virtual void PrepareFeedbackTypeList() + { + if ((_typeDisplays != null) && (_typeDisplays.Length > 0)) + { + return; + } + + // Retrieve available feedbacks + List types = (from domainAssembly in System.AppDomain.CurrentDomain.GetAssemblies() + from assemblyType in domainAssembly.GetTypes() + where assemblyType.IsSubclassOf(typeof(MMF_Feedback)) + select assemblyType).ToList(); + + // Create display list from types + _typeNames.Clear(); + for (int i = 0; i < types.Count; i++) + { + FeedbackTypePair _newType = new FeedbackTypePair(); + _newType.FeedbackType = types[i]; + _newType.FeedbackName = FeedbackPathAttribute.GetFeedbackDefaultPath(types[i]); + if ((_newType.FeedbackName == "MMF_FeedbackBase") || (_newType.FeedbackName == null)) + { + continue; + } + _typesAndNames.Add(_newType); + } + + _typesAndNames = _typesAndNames.OrderBy(t => t.FeedbackName).ToList(); + + _typeNames.Add("Add new feedback..."); + for (int i = 0; i < _typesAndNames.Count; i++) + { + _typeNames.Add(_typesAndNames[i].FeedbackName); + } + + _typeDisplays = _typeNames.ToArray(); + } + + #endregion Initialization + + #region InspectorMain + + /// + /// Draws the inspector, complete with helpbox, init mode selection, list of feedbacks, feedback selection and test buttons + /// + public override void OnInspectorGUI() + { + _currentEvent = Event.current; + serializedObject.Update(); + Undo.RecordObject(target, _undoText); + + InspectorCaching(); + DrawInspectorActiveWarning(); + DrawHelpBox(); + DrawSettingsDropDown(); + DrawDurationAndDirection(); + DrawFeedbacksList(); + DrawBottomBar(); + HandleReordering(); + DrawDebugControls(); + DrawDebugView(); + + serializedObject.ApplyModifiedProperties(); + } + + protected virtual void InspectorCaching() + { + if (_cachedGUI) + { + return; + } + + MMF_PlayerStyling.CacheStyling(); + + _directionIconUp = new GUIContent(Resources.Load("FeelArrowUp") as Texture); + _directionIconDown = new GUIContent(Resources.Load("FeelArrowDown") as Texture); + _whiteTexture = Texture2D.whiteTexture; + + _redWarningBoxBackgroundTexture = new Texture2D(2,2); + _redWarningBoxBackgroundTexture.CreateColorTexture(_redBackgroundColor); + + _directionButtonStyle.border.left = 0; + _directionButtonStyle.border.right = 0; + _directionButtonStyle.border.top = 0; + _directionButtonStyle.border.bottom = 0; + + _playingStyle.normal.textColor = Color.yellow; + + _pasteAsNewGUIContent = new GUIContent(_pasteAsNewText); + _replaceAllGUIContent = new GUIContent(_replaceAllText); + _pasteAllAsNewGUIContent = new GUIContent(_pasteAllAsNewText); + _feedbackPlayGUIContent = new GUIContent(_playText); + _feedbackRemoveGUIContent = new GUIContent(_removeText); + _feedbackResetGUIContent = new GUIContent(_resetText); + _feedbackDuplicateGUIContent = new GUIContent(_duplicateText); + _feedbackCopyGUIContent = new GUIContent(_copyText); + _feedbackPasteGUIContent = new GUIContent(_pasteText); + _pasteAsNewOption = GUILayout.Width(EditorStyles.miniButton.CalcSize(_pasteAsNewGUIContent).x); + _replaceAllOption = GUILayout.Width(EditorStyles.miniButton.CalcSize(_replaceAllGUIContent).x); + _pasteAllAsNewOption = GUILayout.Width(EditorStyles.miniButton.CalcSize(_pasteAllAsNewGUIContent).x); + + _helptextStyle = new GUIStyle(EditorStyles.helpBox); + _helptextStyle.richText = true; + _helptextStyle.fontSize = 11; + _helptextStyle.padding = new RectOffset(8, 8, 8, 8); + } + + protected virtual void DrawInspectorActiveWarning() + { + EditorGUILayout.Space(); + + if (!MMF_Player.GlobalMMFeedbacksActive) + { + _baseColor = GUI.color; + GUI.color = Color.red; + EditorGUILayout.HelpBox(_inactiveMessage, MessageType.Warning); + EditorGUILayout.Space(); + GUI.color = _baseColor; + } + } + + protected virtual void DrawHelpBox() + { + if (MMF_PlayerConfiguration.Instance.ShowInspectorTips) + { + EditorGUILayout.HelpBox(_instructionsMessage, MessageType.None); + } + + _helpBoxRect = GUILayoutUtility.GetLastRect(); + } + + + protected virtual void DrawSettingsDropDown() + { + _settingsMenuDropdown = EditorGUILayout.Foldout(_settingsMenuDropdown, _settingsText, true, EditorStyles.foldout); + if (_settingsMenuDropdown) + { + EditorGUILayout.Space(10); + EditorGUILayout.LabelField(_initializationText, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksInitializationMode); + EditorGUILayout.PropertyField(_mmfeedbacksAutoPlayOnStart); + EditorGUILayout.PropertyField(_mmfeedbacksAutoPlayOnEnable); + EditorGUILayout.PropertyField(_mmfeedbacksAutoInitialization); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField(_directionText, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksDirection); + EditorGUILayout.PropertyField(_mmfeedbacksAutoChangeDirectionOnEnd); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField(_intensityText, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksFeedbacksIntensity); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField(_timingText, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksDurationMultiplier); + EditorGUILayout.PropertyField(_mmfeedbacksRandomizeDuration); + EditorGUILayout.PropertyField(_mmfeedbacksRandomDurationMultiplier); + EditorGUILayout.PropertyField(_mmfeedbacksDisplayFullDurationDetails); + EditorGUILayout.PropertyField(_mmfeedbacksCooldownDuration); + EditorGUILayout.PropertyField(_mmfeedbacksInitialDelay); + EditorGUILayout.PropertyField(_mmfeedbacksChanceToPlay); + EditorGUILayout.PropertyField(_mmfeedbacksPlayerTimescaleMode); + EditorGUILayout.PropertyField(_mmfeedbacksForceTimescaleMode); + EditorGUILayout.PropertyField(_mmfeedbacksForcedTimescaleMode); + EditorGUILayout.PropertyField(_mmfeedbacksTimescaleMultiplier); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField(_rangeText, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksOnlyPlayIfWithinRange); + + if (TargetMmfPlayer.OnlyPlayIfWithinRange) + { + EditorGUILayout.PropertyField(_mmfeedbacksRangeCenter); + EditorGUILayout.PropertyField(_mmfeedbacksRangeDistance); + EditorGUILayout.PropertyField(_mmfeedbacksUseRangeFalloff); + EditorGUILayout.PropertyField(_mmfeedbacksRangeFalloff); + if (TargetMmfPlayer.UseRangeFalloff) + { + EditorGUILayout.PropertyField(_mmfeedbacksRemapRangeFalloff); + } + EditorGUILayout.PropertyField(_mmfeedbacksIgnoreRangeEvents); + } + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField(_playConditionsText, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksCanPlay); + EditorGUILayout.PropertyField(_mmfeedbacksCanPlayWhileAlreadyPlaying); + EditorGUILayout.PropertyField(_mmfeedbacksPerformanceMode); + EditorGUILayout.PropertyField(_mmfeedbacksStopFeedbacksOnDisable); + if (Application.isPlaying) + { + EditorGUILayout.PropertyField(_mmfeedbacksPlayCount); + } + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField(_eventsText, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksEvents); + + if (!Application.isPlaying && TargetMmfPlayer.HasAutomaticShakerSetup) + { + EditorGUILayout.Space(10); + if (GUILayout.Button("Automatic Shaker Setup")) + { + TargetMmfPlayer.AutomaticShakerSetup(); + } + } + } + } + + protected virtual void DrawDurationAndDirection() + { + _durationRect.x = _helpBoxRect.xMax - _durationRectWidth; + _durationRect.y = _helpBoxRect.yMax + 6; + _durationRect.width = _durationRectWidth; + _durationRect.height = 17f; + _durationRect.xMin = _helpBoxRect.xMax - _durationRectWidth; + _durationRect.xMax = _helpBoxRect.xMax; + + _playingRect.x = _helpBoxRect.xMax - _playingRectWidth - _durationRectWidth; + _playingRect.y = _helpBoxRect.yMax + 6; + _playingRect.width = _playingRectWidth; + _playingRect.height = 17f; + _playingRect.xMin = _helpBoxRect.xMax - _durationRectWidth- _playingRectWidth; + _playingRect.xMax = _helpBoxRect.xMax; + + _directionRect.x = _helpBoxRect.xMax - _directionRectWidth; + _directionRect.y = _helpBoxRect.yMax + 5; + _directionRect.width = _directionRectWidth; + _directionRect.height = 17f; + _directionRect.xMin = _helpBoxRect.xMax - _directionRectWidth; + _directionRect.xMax = _helpBoxRect.xMax; + + if ((target as MMF_Player).IsPlaying) + { + GUI.Label(_playingRect, _playingBracketsText, _playingStyle); + } + + GUI.Label(_durationRect, "["+TargetMmfPlayer.TotalDuration.ToString("F2")+"s]"); + + if (TargetMmfPlayer.Direction == MMF_Player.Directions.BottomToTop) + { + + if (GUI.Button(_directionRect, _directionIconUp, _directionButtonStyle)) + { + TargetMmfPlayer.Revert(); + } + } + else + { + + if (GUI.Button(_directionRect, _directionIconDown, _directionButtonStyle)) + { + TargetMmfPlayer.Revert(); + } + } + } + + protected virtual void DrawDebugControls() + { + MMF_PlayerStyling.DrawSection(_allFeedbacksDebugText); + + // Testing buttons + + EditorGUI.BeginDisabledGroup(!Application.isPlaying); + EditorGUILayout.BeginHorizontal(); + { + // initialize button + if (GUILayout.Button(_initializeText, EditorStyles.miniButtonLeft)) + { + (target as MMF_Player).Initialization(); + } + + // play button + _originalBackgroundColor = GUI.backgroundColor; + GUI.backgroundColor = _playButtonColor; + if (GUILayout.Button(_playText, EditorStyles.miniButtonMid)) + { + (target as MMF_Player).PlayFeedbacks(); + } + GUI.backgroundColor = _originalBackgroundColor; + + // pause button + if ((target as MMF_Player).ContainsLoop) + { + if (GUILayout.Button(_pauseText, EditorStyles.miniButtonMid)) + { + (target as MMF_Player).PauseFeedbacks(); + } + } + + // stop button + if (GUILayout.Button(_stopText, EditorStyles.miniButtonMid)) + { + (target as MMF_Player).StopFeedbacks(); + } + + // skip button + if (GUILayout.Button(_skipText, EditorStyles.miniButtonMid)) + { + (target as MMF_Player).SkipToTheEnd(); + } + + // restore button + if (GUILayout.Button(_restoreText, EditorStyles.miniButtonMid)) + { + (target as MMF_Player).RestoreInitialValues(); + } + + // reset button + if (GUILayout.Button(_resetText, EditorStyles.miniButtonMid)) + { + (target as MMF_Player).ResetFeedbacks(); + } + EditorGUI.EndDisabledGroup(); + + // reverse button + if (GUILayout.Button(_revertText, EditorStyles.miniButtonMid)) + { + (target as MMF_Player).Revert(); + } + } + EditorGUILayout.EndHorizontal(); + + // keep runtime changes button + _originalBackgroundColor = GUI.backgroundColor; + if (_keepPlayModeChanges.boolValue) + { + GUI.backgroundColor = _keepPlaymodeChangesButtonColor; + } + if (GUILayout.Button(_keepPlaymodeChangesText)) + { + _keepPlayModeChanges.boolValue = !_keepPlayModeChanges.boolValue; + } + GUI.backgroundColor = _originalBackgroundColor; + + float pingPong = Mathf.PingPong(Time.unscaledTime, 0.25f); + + // if in pause, we display additional controls + if (TargetMmfPlayer.InScriptDrivenPause) + { + // draws a warning box + _scriptDrivenBoxColor = Color.Lerp(_scriptDrivenBoxColorFrom, _scriptDrivenBoxColorTo, pingPong); + GUI.skin.box.normal.background = _whiteTexture; + GUI.backgroundColor = _scriptDrivenBoxColor; + GUI.skin.box.normal.textColor = Color.black; + GUILayout.Box(_scriptDrivenInProgressText, GUILayout.ExpandWidth(true)); + GUI.backgroundColor = _originalBackgroundColor; + GUI.skin.box.normal.background = _scriptDrivenBoxBackgroundTexture; + + // draws resume button + if (GUILayout.Button(_resumeText)) + { + TargetMmfPlayer.ResumeFeedbacks(); + } + } + } + + protected virtual void DrawBottomBar() + { + // Draw add new item + + if (_mmfeedbacksList.arraySize > 0) + { + MMF_PlayerStyling.DrawSplitter(); + } + + EditorGUILayout.Space(); + + EditorGUILayout.BeginHorizontal(); + { + // Feedback list + + int newItem = EditorGUILayout.Popup(0, _typeDisplays) - 1; + if (newItem >= 0) + { + serializedObject.Update(); + Undo.RecordObject(target, "Add new feedback"); + AddFeedback(_typesAndNames[newItem].FeedbackType); + serializedObject.ApplyModifiedProperties(); + PrefabUtility.RecordPrefabInstancePropertyModifications(TargetMmfPlayer); + ForceRepaint(); + } + + // Paste feedback copy as new + + if (MMF_PlayerCopy.HasCopy()) + { + if (GUILayout.Button(_pasteAsNewText, EditorStyles.miniButton, _pasteAsNewOption)) + { + PasteAsNew(); + } + } + + if (MMF_PlayerCopy.HasMultipleCopies()) + { + if (GUILayout.Button(_replaceAllText, EditorStyles.miniButton, _replaceAllOption)) + { + ReplaceAll(); + } + if (GUILayout.Button(_pasteAllAsNewText, EditorStyles.miniButton, _pasteAllAsNewOption)) + { + PasteAllAsNew(); + } + } + } + + if (!MMF_PlayerCopy.HasMultipleCopies()) + { + if (GUILayout.Button(_copyAllText, EditorStyles.miniButton, _pasteAsNewOption)) + { + CopyAll(); + } + } + + EditorGUILayout.EndHorizontal(); + } + + protected virtual void DrawDebugView() + { + if (_debugView) + { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.PropertyField(_mmfeedbacksList, true); + EditorGUI.EndDisabledGroup(); + } + } + + protected virtual void HandleReordering() + { + if (_draggedStartID >= 0 && _draggedEndID >= 0) + { + if (_draggedEndID != _draggedStartID) + { + if (_draggedEndID > _draggedStartID) + _draggedEndID--; + _mmfeedbacksList.MoveArrayElement(_draggedStartID, _draggedEndID); + _draggedStartID = _draggedEndID; + MMF_FeedbackInspectors.Clear(); + } + } + + if (_draggedStartID >= 0 || _draggedEndID >= 0) + { + switch (_currentEvent.type) + { + case EventType.MouseUp: + _draggedStartID = -1; + _draggedEndID = -1; + _currentEvent.Use(); + break; + default: + break; + } + } + } + + #endregion InspectorMain + + #region InspectorList + + protected MMF_FeedbackInspector _mmfFeedbackInspector; + + protected virtual void DrawFeedbacksList() + { + MMF_PlayerStyling.DrawSection(_feedbacksSectionTitle); + for (int i = 0; i < _mmfeedbacksList.arraySize; i++) + { + DrawFeedbackHeader(i); + + // If expanded, draw feedback editor + _feedbackListFeedback.IsExpanded = _feedbackListIsExpanded; + if (_feedbackListIsExpanded) + { + MMF_PlayerStyling.DrawSplitter(); + EditorGUI.BeginDisabledGroup(!_feedbackListFeedback.Active); + + DrawFeedbackHelp(); + + EditorGUILayout.Space(); + + // --------------------------------------------------------------------------------------------------------------------------------- + + SerializedProperty currentProperty = _feedbackListProperty; + + if (_feedbackListFeedback.IsExpanded) + { + if(MMF_FeedbackInspectors.TryGetValue(_feedbackListFeedback.UniqueID, out _mmfFeedbackInspector)) + { + _mmfFeedbackInspector.DrawInspector(currentProperty, _feedbackListFeedback); + } + else + { + MMF_FeedbackInspector newInspector = new MMF_FeedbackInspector(); + MMF_FeedbackInspectors.Add(_feedbackListFeedback.UniqueID, newInspector); + newInspector.Initialization(currentProperty, _feedbackListFeedback, _expandGroupsInInspectors); + } + } + + // --------------------------------------------------------------------------------------------------------------------------------- + + EditorGUI.EndDisabledGroup(); + + DrawFeedbackBottomBar(i); + } + } + } + + protected virtual bool DrawCustomInspectors(SerializedProperty currentProperty) + { + if (_feedbackListFeedback.HasCustomInspectors) + { + switch (currentProperty.type) + { + case "MMF_Button": + MMF_Button myButton = (MMF_Button)(currentProperty.MMFGetObjectValue()); + if (GUILayout.Button(myButton.ButtonText)) + { + myButton.TargetMethod(); + } + return true; + } + } + + return false; + } + + protected virtual void DrawFeedbackHeader(int i) + { + MMF_PlayerStyling.DrawSplitter(); + _feedbackListProperty = _mmfeedbacksList.GetArrayElementAtIndex(i); + + // Retrieve feedback + _feedbackListFeedback = TargetMmfPlayer.FeedbacksList[i]; + + if (_feedbackListFeedback == null) + { + return; + } + + // Draw header + _feedbackListIsExpanded = _feedbackListFeedback.IsExpanded; + _feedbackListLabel = _feedbackListFeedback.Label; + _feedbackListPause = false; + + if (_feedbackListFeedback.Pause != null) + { + _feedbackListPause = true; + } + if ((_feedbackListFeedback.LooperPause == true) && (Application.isPlaying)) + { + if ((_feedbackListFeedback as MMF_Looper).InfiniteLoop) + { + _feedbackListLabel = _feedbackListLabel + _infiniteLoopText; + } + else + { + _feedbackListLabel = _feedbackListLabel + "[ " + (_feedbackListFeedback as MMF_Looper).NumberOfLoopsLeft + " loops left ] "; + } + } + + Rect headerRect = MMF_PlayerStyling.DrawHeader( + ref _feedbackListIsExpanded, + ref _feedbackListFeedback.Active, + _feedbackListLabel, + _feedbackListFeedback.FeedbackColor, + (GenericMenu menu) => + { + if (Application.isPlaying) + menu.AddItem(_feedbackPlayGUIContent, false, () => PlayFeedback(i)); + else + menu.AddDisabledItem(_feedbackPlayGUIContent); + menu.AddSeparator(null); + menu.AddItem(_feedbackRemoveGUIContent, false, () => RemoveFeedback(i)); + menu.AddItem(_feedbackResetGUIContent, false, () => ResetContextMenuFeedback(i)); + menu.AddSeparator(null); + menu.AddItem(_feedbackDuplicateGUIContent, false, () => DuplicateFeedback(i)); + menu.AddItem(_feedbackCopyGUIContent, false, () => CopyFeedback(i)); + if (MMF_PlayerCopy.HasCopy()) + menu.AddItem(_feedbackPasteGUIContent, false, PasteAsNew); + else + menu.AddDisabledItem(_feedbackPasteGUIContent); + }, + _feedbackListFeedback.FeedbackStartedAt, + _feedbackListFeedback.FeedbackDuration, + _feedbackListFeedback.TotalDuration, + _feedbackListFeedback.Timing, + _feedbackListPause, + _feedbackListFeedback.RequiresSetup, + _feedbackListFeedback.RequiredTarget, + _feedbackListFeedback.DisplayColor, + _feedbackListFeedback.DisplayFullHeaderColor, + TargetMmfPlayer + ); + + // Check if we start dragging this feedback + + switch (_currentEvent.type) + { + case EventType.MouseDown: + if (headerRect.Contains(_currentEvent.mousePosition)) + { + _draggedStartID = i; + _currentEvent.Use(); + } + break; + } + + // Draw blue rect if feedback is being dragged + + if (_draggedStartID == i && headerRect != Rect.zero) + { + EditorGUI.DrawRect(headerRect, _draggedColor); + } + + // If hovering at the top of the feedback while dragging one, check where the feedback should be dropped : top or bottom + + if (headerRect.Contains(_currentEvent.mousePosition)) + { + if (_draggedStartID >= 0) + { + _draggedEndID = i; + Rect headerSplit = headerRect; + headerSplit.height *= 0.5f; + headerSplit.y += headerSplit.height; + if (headerSplit.Contains(_currentEvent.mousePosition)) + { + _draggedEndID = i + 1; + } + } + } + } + + protected virtual void DrawFeedbackHelp() + { + string helpText = FeedbackHelpAttribute.GetFeedbackHelpText(_feedbackListFeedback.GetType()); + + if ( (!string.IsNullOrEmpty(helpText)) && (MMF_PlayerConfiguration.Instance.ShowInspectorTips)) + { + float newHeight = _helptextStyle.CalcHeight(new GUIContent(helpText), EditorGUIUtility.currentViewWidth); + EditorGUILayout.LabelField(helpText, _helptextStyle); + } + + if (_feedbackListFeedback.RequiresSetup) + { + _redWarningBoxStyle = GUI.skin.GetStyle("helpbox"); + _savedBackground = _redWarningBoxStyle.normal.background; + _savedTextColor = _redWarningBoxStyle.normal.textColor; + _redWarningBoxStyle.normal.background = _redWarningBoxBackgroundTexture; + _redWarningBoxStyle.normal.textColor = Color.black; + _redWarningBoxStyle.fontSize = 11; + _redWarningBoxStyle.padding = new RectOffset(8, 8, 8, 8); + EditorGUILayout.Space(); + EditorGUILayout.HelpBox(_feedbackListFeedback.RequiresSetupText, MessageType.Warning); + _redWarningBoxStyle.normal.background = _savedBackground; + _redWarningBoxStyle.normal.textColor = _savedTextColor; + } + } + + protected virtual void DrawFeedbackBottomBar(int i) + { + EditorGUILayout.Space(); + + EditorGUI.BeginDisabledGroup(!Application.isPlaying); + EditorGUILayout.BeginHorizontal(); + { + if (GUILayout.Button(_playText, EditorStyles.miniButtonMid)) + { + PlayFeedback(i); + } + if (GUILayout.Button(_stopText, EditorStyles.miniButtonMid)) + { + StopFeedback(i); + } + } + EditorGUILayout.EndHorizontal(); + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + + #endregion InspectorList + + #region Helpers + + /// + /// We need to repaint constantly if dragging a feedback around + /// + public override bool RequiresConstantRepaint() + { + return !TargetMmfPlayer.PerformanceMode && TargetMmfPlayer.IsPlaying; + } + + #endregion Helpers + + #region FeedbacksControls + + /// + /// Add a feedback to the list + /// + protected virtual MMF_Feedback AddFeedback(System.Type type) + { + return (target as MMF_Player).AddFeedback(type); + } + + /// + /// Remove the selected feedback + /// + protected virtual void RemoveFeedback(int id) + { + Undo.RecordObject(target, "Remove feedback"); + MMF_FeedbackInspectors.Remove(TargetMmfPlayer.FeedbacksList[id].UniqueID); + (target as MMF_Player).RemoveFeedback(id); + serializedObject.ApplyModifiedProperties(); + ForceRepaint(); + PrefabUtility.RecordPrefabInstancePropertyModifications(TargetMmfPlayer); + } + + protected virtual void ResetContextMenuFeedback(int id) + { + Undo.RecordObject(target, "Reset feedback"); + + Type feedbackType = (target as MMF_Player).FeedbacksList[id].GetType(); + MMF_Feedback newFeedback = (target as MMF_Player).AddFeedback(feedbackType, false); + (target as MMF_Player).FeedbacksList[id] = newFeedback; + serializedObject.ApplyModifiedProperties(); + ForceRepaint(); + PrefabUtility.RecordPrefabInstancePropertyModifications(TargetMmfPlayer); + } + + /// + /// Play the selected feedback + /// + protected virtual void InitializeFeedback(int id) + { + MMF_Feedback feedback = TargetMmfPlayer.FeedbacksList[id]; + feedback.Initialization(TargetMmfPlayer, id); + } + + /// + /// Play the selected feedback + /// + protected virtual void PlayFeedback(int id) + { + MMF_Feedback feedback = TargetMmfPlayer.FeedbacksList[id]; + feedback.Play(TargetMmfPlayer.transform.position, TargetMmfPlayer.FeedbacksIntensity); + } + + /// + /// Play the selected feedback + /// + protected virtual void StopFeedback(int id) + { + MMF_Feedback feedback = TargetMmfPlayer.FeedbacksList[id]; + feedback.Stop(TargetMmfPlayer.transform.position); + } + + /// + /// Resets the selected feedback + /// + /// + protected virtual void ResetFeedback(int id) + { + MMF_Feedback feedback = TargetMmfPlayer.FeedbacksList[id]; + feedback.ResetFeedback(); + } + + #endregion + + #region FeedbacksCopy + + /// + /// Copy the selected feedback + /// + protected virtual void CopyFeedback(int id) + { + MMF_Feedback feedback = TargetMmfPlayer.FeedbacksList[id]; + + MMF_PlayerCopy.Copy(feedback); + } + + /// + /// Copies and instantly pastes the selected feedback + /// + protected virtual void DuplicateFeedback(int id) + { + MMF_Feedback feedback = TargetMmfPlayer.FeedbacksList[id]; + + MMF_PlayerCopy.Copy(feedback); + PasteAsNew(); + } + + /// + /// Asks for a full copy of the source + /// + protected virtual void CopyAll() + { + MMF_PlayerCopy.CopyAll(target as MMF_Player); + } + + /// + /// Creates a new feedback and applies the previoulsy copied feedback values + /// + protected virtual void PasteAsNew() + { + serializedObject.Update(); + Undo.RecordObject(target, "Paste feedback"); + MMF_PlayerCopy.PasteAll(this); + serializedObject.ApplyModifiedProperties(); + PrefabUtility.RecordPrefabInstancePropertyModifications(TargetMmfPlayer); + } + + /// + /// Asks for a paste of all feedbacks in the source + /// + protected virtual void PasteAllAsNew() + { + serializedObject.Update(); + Undo.RecordObject(target, "Paste all feedbacks as new"); + MMF_PlayerCopy.PasteAll(this); + serializedObject.ApplyModifiedProperties(); + PrefabUtility.RecordPrefabInstancePropertyModifications(TargetMmfPlayer); + } + + protected virtual void ReplaceAll() + { + serializedObject.Update(); + Undo.RecordObject(target, "Replace all feedbacks"); + TargetMmfPlayer.FeedbacksList.Clear(); + MMF_PlayerCopy.PasteAll(this); + serializedObject.ApplyModifiedProperties(); + PrefabUtility.RecordPrefabInstancePropertyModifications(TargetMmfPlayer); + } + + #endregion + + #region Events + + protected virtual void OnDisable() + { + foreach (KeyValuePair inspector in MMF_FeedbackInspectors) + { + inspector.Value.OnDisable(); + } + EditorApplication.playModeStateChanged -= ModeChanged; + } + + public virtual void ModeChanged(PlayModeStateChange playModeState) + { + switch (playModeState) + { + case PlayModeStateChange.EnteredEditMode: + ForceRepaint(); + break; + } + } + + public virtual void ForceRepaint() + { + MMF_FeedbackInspectors.Clear(); + Initialization(); + (target as MMF_Player).RefreshCache(); + Repaint(); + } + + protected virtual void Reset() + { + ForceRepaint(); + } + + #endregion + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerEditor.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerEditor.cs.meta new file mode 100644 index 0000000..d7b5276 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5677ceae3cf1ede41a9bc25c50471513 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerStyling.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerStyling.cs new file mode 100644 index 0000000..c8a9eae --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerStyling.cs @@ -0,0 +1,444 @@ +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Feedbacks +{ + /// + /// A class used to regroup most of the styling options for the MMFeedback editors + /// + public static class MMF_PlayerStyling + { + public static readonly GUIStyle SmallTickbox = new GUIStyle("ShurikenToggle"); + + static readonly Color _splitterdark = new Color(0.12f, 0.12f, 0.12f, 1.333f); + static readonly Color _splitterlight = new Color(0.6f, 0.6f, 0.6f, 1.333f); + public static Color Splitter { get { return EditorGUIUtility.isProSkin ? _splitterdark : _splitterlight; } } + + static readonly Color _headerbackgrounddark = new Color(0.1f, 0.1f, 0.1f, 0.2f); + static readonly Color _headerbackgroundlight = new Color(1f, 1f, 1f, 0.4f); + public static Color HeaderBackground { get { return EditorGUIUtility.isProSkin ? _headerbackgrounddark : _headerbackgroundlight; } } + + static readonly Color _reorderdark = new Color(1f, 1f, 1f, 0.2f); + static readonly Color _reorderlight = new Color(0.1f, 0.1f, 0.1f, 0.2f); + public static Color Reorder { get { return EditorGUIUtility.isProSkin ? _reorderdark : _reorderlight; } } + + static readonly Color _timingDark = new Color(1f, 1f, 1f, 0.5f); + static readonly Color _timingLight = new Color(0f, 0f, 0f, 0.5f); + static readonly Color _targetLabelColor = new Color(1f, 1f, 1f, 0.4f); + + static readonly Texture2D _paneoptionsicondark; + static readonly Texture2D _paneoptionsiconlight; + + private static Rect _splitterRect; + + public static Texture2D PaneOptionsIcon { get { return EditorGUIUtility.isProSkin ? _paneoptionsicondark : _paneoptionsiconlight; } } + + static MMF_PlayerStyling() + { + _paneoptionsicondark = (Texture2D)EditorGUIUtility.Load("Builtin Skins/DarkSkin/Images/pane options.png"); + _paneoptionsiconlight = (Texture2D)EditorGUIUtility.Load("Builtin Skins/LightSkin/Images/pane options.png"); + } + + private static GUIStyle _timingStyle = new GUIStyle(); + + private static Rect _backgroundRect; + private static Rect _progressRect; + private static Rect _timingRect; + private static Rect _reorderRect; + private static Rect _labelRect; + private static Rect _foldoutRect; + private static Rect _toggleRect; + private static Rect _directionRect; + private static Rect _setupRect; + private static Texture2D _menuIcon; + private static Rect _menuRect; + private static Rect _workRect; + private static Rect _colorRect; + private static Rect _genericMenuRect; + private static Color _headerBackgroundColor; + private static Color _barColor; + private static GUIContent _directionUpIcon; + private static GUIStyle _targetLabelStyle; + private static GUIContent _directionDownIcon; + public static GUIContent _setupRequiredIcon; + private static GenericMenu _genericMenu; + + public static void CacheStyling() + { + _menuIcon = PaneOptionsIcon; + _menuRect = new Rect(); + _colorRect = new Rect(); + _directionRect = new Rect(); + _setupRect = new Rect(); + _timingRect = new Rect(); + _directionUpIcon = new GUIContent(Resources.Load("FeelArrowUp") as Texture); + _directionDownIcon = new GUIContent(Resources.Load("FeelArrowDown") as Texture); + _setupRequiredIcon = new GUIContent(Resources.Load("FeelSetupRequired") as Texture); + _genericMenu = new GenericMenu(); + _targetLabelStyle = new GUIStyle(GUI.skin.label); + _targetLabelStyle.alignment = TextAnchor.MiddleRight; + _targetLabelStyle.normal.textColor = _targetLabelColor; + } + + /// + /// Simply drow a splitter line and a title bellow + /// + static public void DrawSection(string title) + { + EditorGUILayout.Space(); + DrawSplitter(); + EditorGUILayout.Space(); + EditorGUILayout.Space(); + EditorGUILayout.LabelField(title, EditorStyles.boldLabel); + } + + /// + /// Draw a separator line + /// + static public void DrawSplitter() + { + // Helper to draw a separator line + + _splitterRect = GUILayoutUtility.GetRect(1f, 1f); + + _splitterRect.xMin = 0f; + _splitterRect.width += 4f; + + if (Event.current.type != EventType.Repaint) + { + return; + } + + EditorGUI.DrawRect(_splitterRect, Splitter); + } + + /// + /// Draw a header similar to the one used for the post-process stack + /// + static public Rect DrawSimpleHeader(ref bool expanded, ref bool activeField, string title) + { + var e = Event.current; + + // Initialize Rects + + _backgroundRect = GUILayoutUtility.GetRect(1f, 17f); + + _reorderRect = _backgroundRect; + _reorderRect.xMin -= 8f; + _reorderRect.y += 5f; + _reorderRect.width = 9f; + _reorderRect.height = 9f; + + _labelRect = _backgroundRect; + _labelRect.xMin += 32f; + _labelRect.xMax -= 20f; + + _foldoutRect = _backgroundRect; + _foldoutRect.y += 1f; + _foldoutRect.width = 13f; + _foldoutRect.height = 13f; + + _toggleRect = _backgroundRect; + _toggleRect.x += 16f; + _toggleRect.y += 2f; + _toggleRect.width = 13f; + _toggleRect.height = 13f; + + // Background rect should be full-width + _backgroundRect.xMin = 0f; + _backgroundRect.width += 4f; + + // Background + EditorGUI.DrawRect(_backgroundRect, HeaderBackground); + + // Foldout + expanded = GUI.Toggle(_foldoutRect, expanded, GUIContent.none, EditorStyles.foldout); + + // Title + EditorGUI.LabelField(_labelRect, title, EditorStyles.boldLabel); + + // Active checkbox + activeField = GUI.Toggle(_toggleRect, activeField, GUIContent.none, SmallTickbox); + + // Handle events + + if (e.type == EventType.MouseDown && _labelRect.Contains(e.mousePosition) && e.button == 0) + { + expanded = !expanded; + e.Use(); + } + + return _backgroundRect; + } + + /// + /// Draw a header similar to the one used for the post-process stack + /// + static public Rect DrawHeader(ref bool expanded, ref bool activeField, string title, Color feedbackColor, System.Action fillGenericMenu, + float startedAt, float duration, float totalDuration, MMFeedbackTiming timing, bool pause, bool requiresSetup, string requiredTarget, Color displayColor, + bool displayFullHeaderColor, MMF_Player host) + { + float thisTime = timing.TimescaleMode == TimescaleModes.Scaled ? Time.time : Time.unscaledTime; + float thisDeltaTime = timing.TimescaleMode == TimescaleModes.Scaled ? Time.deltaTime : Time.unscaledDeltaTime; + if (host.ForceTimescaleMode) + { + thisTime = host.ForcedTimescaleMode == TimescaleModes.Scaled ? Time.time : Time.unscaledTime; + thisDeltaTime = host.ForcedTimescaleMode == TimescaleModes.Scaled ? Time.deltaTime : Time.unscaledDeltaTime; + } + + var e = Event.current; + + // Initialize Rects + _backgroundRect = GUILayoutUtility.GetRect(1f, 17f); + _progressRect = GUILayoutUtility.GetRect(1f, 2f); + + var offset = 4f; + + _reorderRect = _backgroundRect; + _reorderRect.xMin -= 8f; + _reorderRect.y += 5f; + _reorderRect.width = 9f; + _reorderRect.height = 9f; + + _labelRect = _backgroundRect; + _labelRect.xMin += 32f + offset; + _labelRect.xMax -= 20f; + + _foldoutRect = _backgroundRect; + _foldoutRect.y += 1f; + _foldoutRect.xMin += offset; + _foldoutRect.width = 13f; + _foldoutRect.height = 13f; + + _toggleRect = _backgroundRect; + _toggleRect.x += 16f; + _toggleRect.xMin += offset; + _toggleRect.y += 2f; + _toggleRect.width = 13f; + _toggleRect.height = 13f; + + _timingStyle.normal.textColor = EditorGUIUtility.isProSkin ? _timingDark : _timingLight; + _timingStyle.alignment = TextAnchor.MiddleRight; + + _colorRect.x = _labelRect.xMin; + _colorRect.y = _labelRect.yMin; + _colorRect.width = 5f; + _colorRect.height = 17f; + _colorRect.xMin = 0f; + _colorRect.xMax = 5f; + EditorGUI.DrawRect(_colorRect, feedbackColor); + + // Background rect should be full-width + _backgroundRect.xMin = 0f; + _backgroundRect.width += 4f; + + _progressRect.xMin = 0f; + _progressRect.width += 4f; + + _headerBackgroundColor = Color.white; + // Background - if color is white we draw the default color + if (!displayFullHeaderColor) + { + _headerBackgroundColor = HeaderBackground; + } + else + { + _headerBackgroundColor = feedbackColor; + } + + if (displayColor != Color.black) + { + _headerBackgroundColor = displayColor; + } + + EditorGUI.DrawRect(_backgroundRect, _headerBackgroundColor); + + // Foldout + expanded = GUI.Toggle(_foldoutRect, expanded, GUIContent.none, EditorStyles.foldout); + + // Title ---------------------------------------------------------------------------------------------------- + + using (new EditorGUI.DisabledScope(!activeField)) + { + EditorGUI.LabelField(_labelRect, title, EditorStyles.boldLabel); + } + + // Direction ---------------------------------------------------------------------------------------------- + + float directionRectWidth = 70f; + _directionRect.x = _labelRect.xMax - directionRectWidth; + _directionRect.y = _labelRect.yMin; + _directionRect.width = directionRectWidth; + _directionRect.height = 17f; + _directionRect.xMin = _labelRect.xMax - directionRectWidth; + _directionRect.xMax = _labelRect.xMax; + + if (timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenBackwards) + { + + EditorGUI.LabelField(_directionRect, _directionUpIcon); + } + + if (timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenForwards) + { + EditorGUI.LabelField(_directionRect, _directionDownIcon); + } + + if (!host.DisplayFullDurationDetails) + { + if (requiresSetup) + { + float setupRectWidth = 90f; + _setupRect.x = _labelRect.xMax - setupRectWidth; + _setupRect.y = _labelRect.yMin; + _setupRect.width = setupRectWidth; + _setupRect.height = 17f; + _setupRect.xMin = _labelRect.xMax - setupRectWidth; + _setupRect.xMax = _labelRect.xMax; + + EditorGUI.LabelField(_setupRect, _setupRequiredIcon); + } + else + { + // otherwise we draw the name of our target + float setupRectWidth = _labelRect.width / 2f; + _setupRect.x = _labelRect.xMax - setupRectWidth - 73f; + _setupRect.y = _labelRect.yMin; + _setupRect.width = setupRectWidth; + _setupRect.height = 17f; + + EditorGUI.LabelField(_setupRect, requiredTarget, _targetLabelStyle); + } + } + + // Time ----------------------------------------------------------------------------------------------------- + + string timingInfo = ""; + bool displayTotal = false; + if (host.DisplayFullDurationDetails) + { + if (timing.InitialDelay != 0) + { + timingInfo += host.ApplyTimeMultiplier(timing.InitialDelay).ToString() + "s + "; + displayTotal = true; + } + + timingInfo += duration.ToString("F2") + "s"; + + if (timing.NumberOfRepeats != 0) + { + float delayBetweenRepeats = host.ApplyTimeMultiplier(timing.DelayBetweenRepeats); + + timingInfo += " + "+ timing.NumberOfRepeats.ToString() + " x "; + timingInfo += host.ApplyTimeMultiplier(timing.DelayBetweenRepeats) + "s"; + displayTotal = true; + } + + if (displayTotal) + { + timingInfo += " = " + totalDuration.ToString("F2") + "s"; + } + } + else + { + timingInfo = totalDuration.ToString("F2") + "s"; + } + + float timingRectWidth = 150f; + + _timingRect.x = _labelRect.xMax - timingRectWidth; + _timingRect.y = _labelRect.yMin; + _timingRect.width = timingRectWidth; + _timingRect.height = 17f; + + _timingRect.xMin = _labelRect.xMax - timingRectWidth; + _timingRect.xMax = _labelRect.xMax; + EditorGUI.LabelField(_timingRect, timingInfo, _timingStyle); + + // Progress bar + if (totalDuration == 0f) + { + totalDuration = 0.1f; + } + + if (startedAt == 0f) + { + startedAt = 0.001f; + } + if (host.IsPlaying && (startedAt > 0f) && (thisTime - startedAt < totalDuration + 0.05f)) + { + float fullWidth = _progressRect.width; + if (totalDuration == 0f) { totalDuration = 0.1f; } + float percent = ((thisTime - startedAt) / totalDuration) * 100f; + _progressRect.width = percent * fullWidth / 100f; + _barColor = Color.white; + if (thisTime - startedAt > totalDuration) + { + _barColor = Color.yellow; + } + EditorGUI.DrawRect(_progressRect, _barColor); + } + else + { + EditorGUI.DrawRect(_progressRect, _headerBackgroundColor); + } + + // Active checkbox + activeField = GUI.Toggle(_toggleRect, activeField, GUIContent.none, SmallTickbox); + + + _menuRect.x = _labelRect.xMax + 4f; + _menuRect.y = _labelRect.y + 4f; + _menuRect.width = _menuIcon.width; + _menuRect.height = _menuIcon.height; + + // Dropdown menu icon + GUI.DrawTexture(_menuRect, _menuIcon); + + for(int i = 0; i < 3; i++) + { + _workRect = _reorderRect; + _workRect.height = 1; + _workRect.y = _reorderRect.y + _reorderRect.height * (i / 3.0f); + EditorGUI.DrawRect(_workRect, Reorder); + } + + // Handle events + + if (e.type == EventType.MouseDown) + { + if (_menuRect.Contains(e.mousePosition)) + { + fillGenericMenu(_genericMenu); + + _genericMenuRect.x = _menuRect.x; + _genericMenuRect.y = _menuRect.yMax; + _genericMenuRect.width = 0f; + _genericMenuRect.height = 0f; + _genericMenu.DropDown(_genericMenuRect); + e.Use(); + } + } + + if (e.type == EventType.MouseDown && _labelRect.Contains(e.mousePosition) && e.button == 0) + { + expanded = !expanded; + e.Use(); + } + + return _backgroundRect; + } + + public static void CreateColorTexture(this Texture2D texture2D, Color32 color) + { + Color32[] colorArray = texture2D.GetPixels32(); + + for (int i = 0; i < colorArray.Length; ++i) + { + colorArray[i] = color; + } + texture2D.SetPixels32(colorArray); + texture2D.Apply(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerStyling.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerStyling.cs.meta new file mode 100644 index 0000000..0bf3d6b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMF_PlayerStyling.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f1df3b488b690940994f84f1bd65166 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbackStyling.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbackStyling.cs new file mode 100644 index 0000000..f3f8020 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbackStyling.cs @@ -0,0 +1,351 @@ +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Feedbacks +{ + /// + /// A class used to regroup most of the styling options for the MMFeedback editors + /// + public static class MMFeedbackStyling + { + public static readonly GUIStyle SmallTickbox = new GUIStyle("ShurikenToggle"); + + static readonly Color _splitterdark = new Color(0.12f, 0.12f, 0.12f, 1.333f); + static readonly Color _splitterlight = new Color(0.6f, 0.6f, 0.6f, 1.333f); + public static Color Splitter { get { return EditorGUIUtility.isProSkin ? _splitterdark : _splitterlight; } } + + static readonly Color _headerbackgrounddark = new Color(0.1f, 0.1f, 0.1f, 0.2f); + static readonly Color _headerbackgroundlight = new Color(1f, 1f, 1f, 0.4f); + public static Color HeaderBackground { get { return EditorGUIUtility.isProSkin ? _headerbackgrounddark : _headerbackgroundlight; } } + + static readonly Color _reorderdark = new Color(1f, 1f, 1f, 0.2f); + static readonly Color _reorderlight = new Color(0.1f, 0.1f, 0.1f, 0.2f); + public static Color Reorder { get { return EditorGUIUtility.isProSkin ? _reorderdark : _reorderlight; } } + + static readonly Color _timingDark = new Color(1f, 1f, 1f, 0.5f); + static readonly Color _timingLight = new Color(0f, 0f, 0f, 0.5f); + + static readonly Texture2D _paneoptionsicondark; + static readonly Texture2D _paneoptionsiconlight; + public static Texture2D PaneOptionsIcon { get { return EditorGUIUtility.isProSkin ? _paneoptionsicondark : _paneoptionsiconlight; } } + + static MMFeedbackStyling() + { + _paneoptionsicondark = (Texture2D)EditorGUIUtility.Load("Builtin Skins/DarkSkin/Images/pane options.png"); + _paneoptionsiconlight = (Texture2D)EditorGUIUtility.Load("Builtin Skins/LightSkin/Images/pane options.png"); + } + + private static GUIStyle _timingStyle = new GUIStyle(); + + /// + /// Simply drow a splitter line and a title bellow + /// + static public void DrawSection(string title) + { + EditorGUILayout.Space(); + + DrawSplitter(); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField(title, EditorStyles.boldLabel); + } + + /// + /// Draw a separator line + /// + static public void DrawSplitter() + { + // Helper to draw a separator line + + var rect = GUILayoutUtility.GetRect(1f, 1f); + + rect.xMin = 0f; + rect.width += 4f; + + if (Event.current.type != EventType.Repaint) + return; + + EditorGUI.DrawRect(rect, Splitter); + } + + /// + /// Draw a header similar to the one used for the post-process stack + /// + static public Rect DrawSimpleHeader(ref bool expanded, ref bool activeField, string title) + { + var e = Event.current; + + // Initialize Rects + + var backgroundRect = GUILayoutUtility.GetRect(1f, 17f); + + var reorderRect = backgroundRect; + reorderRect.xMin -= 8f; + reorderRect.y += 5f; + reorderRect.width = 9f; + reorderRect.height = 9f; + + var labelRect = backgroundRect; + labelRect.xMin += 32f; + labelRect.xMax -= 20f; + + var foldoutRect = backgroundRect; + foldoutRect.y += 1f; + foldoutRect.width = 13f; + foldoutRect.height = 13f; + + var toggleRect = backgroundRect; + toggleRect.x += 16f; + toggleRect.y += 2f; + toggleRect.width = 13f; + toggleRect.height = 13f; + + var menuIcon = PaneOptionsIcon; + var menuRect = new Rect(labelRect.xMax + 4f, labelRect.y + 4f, menuIcon.width, menuIcon.height); + + // Background rect should be full-width + backgroundRect.xMin = 0f; + backgroundRect.width += 4f; + + // Background + EditorGUI.DrawRect(backgroundRect, HeaderBackground); + + // Foldout + expanded = GUI.Toggle(foldoutRect, expanded, GUIContent.none, EditorStyles.foldout); + + // Title + EditorGUI.LabelField(labelRect, title, EditorStyles.boldLabel); + + // Active checkbox + activeField = GUI.Toggle(toggleRect, activeField, GUIContent.none, SmallTickbox); + + // Handle events + + if (e.type == EventType.MouseDown && labelRect.Contains(e.mousePosition) && e.button == 0) + { + expanded = !expanded; + e.Use(); + } + + return backgroundRect; + } + + /// + /// Draw a header similar to the one used for the post-process stack + /// + static public Rect DrawHeader(ref bool expanded, ref bool activeField, string title, Color feedbackColor, System.Action fillGenericMenu, + float startedAt, float duration, float totalDuration, MMFeedbackTiming timing, bool pause, MMFeedbacks host) + { + float thisTime = timing.TimescaleMode == TimescaleModes.Scaled ? Time.time : Time.unscaledTime; + float thisDeltaTime = timing.TimescaleMode == TimescaleModes.Scaled ? Time.deltaTime : Time.unscaledDeltaTime; + + var e = Event.current; + + // Initialize Rects + var backgroundRect = GUILayoutUtility.GetRect(1f, 17f); + + var progressRect = GUILayoutUtility.GetRect(1f, 2f); + + var offset = 4f; + + var reorderRect = backgroundRect; + reorderRect.xMin -= 8f; + reorderRect.y += 5f; + reorderRect.width = 9f; + reorderRect.height = 9f; + + var labelRect = backgroundRect; + labelRect.xMin += 32f + offset; + labelRect.xMax -= 20f; + + var foldoutRect = backgroundRect; + foldoutRect.y += 1f; + foldoutRect.xMin += offset; + foldoutRect.width = 13f; + foldoutRect.height = 13f; + + var toggleRect = backgroundRect; + toggleRect.x += 16f; + toggleRect.xMin += offset; + toggleRect.y += 2f; + toggleRect.width = 13f; + toggleRect.height = 13f; + + var menuIcon = PaneOptionsIcon; + var menuRect = new Rect(labelRect.xMax + 4f, labelRect.y + 4f, menuIcon.width, menuIcon.height); + + _timingStyle.normal.textColor = EditorGUIUtility.isProSkin ? _timingDark : _timingLight; + _timingStyle.alignment = TextAnchor.MiddleRight; + + var colorRect = new Rect(labelRect.xMin, labelRect.yMin, 5f, 17f); + colorRect.xMin = 0f; + colorRect.xMax = 5f; + EditorGUI.DrawRect(colorRect, feedbackColor); + + // Background rect should be full-width + backgroundRect.xMin = 0f; + backgroundRect.width += 4f; + + progressRect.xMin = 0f; + progressRect.width += 4f; + + Color headerBackgroundColor = Color.white; + // Background - if color is white we draw the default color + if (!pause) + { + headerBackgroundColor = HeaderBackground; + } + else + { + headerBackgroundColor = feedbackColor; + } + EditorGUI.DrawRect(backgroundRect, headerBackgroundColor); + + // Foldout + expanded = GUI.Toggle(foldoutRect, expanded, GUIContent.none, EditorStyles.foldout); + + // Title ---------------------------------------------------------------------------------------------------- + + using (new EditorGUI.DisabledScope(!activeField)) + { + EditorGUI.LabelField(labelRect, title, EditorStyles.boldLabel); + } + + // Direction ---------------------------------------------------------------------------------------------- + + float directionRectWidth = 70f; + var directionRect = new Rect(labelRect.xMax - directionRectWidth, labelRect.yMin, directionRectWidth, 17f); + directionRect.xMin = labelRect.xMax - directionRectWidth; + directionRect.xMax = labelRect.xMax; + + if (timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenBackwards) + { + Texture arrowUpIcon = Resources.Load("FeelArrowUp") as Texture; + GUIContent directionIcon = new GUIContent(arrowUpIcon); + EditorGUI.LabelField(directionRect, directionIcon); + } + + if (timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenForwards) + { + Texture arrowDownIcon = Resources.Load("FeelArrowDown") as Texture; + GUIContent directionIcon = new GUIContent(arrowDownIcon); + EditorGUI.LabelField(directionRect, directionIcon); + } + + // Time ----------------------------------------------------------------------------------------------------- + + string timingInfo = ""; + bool displayTotal = false; + if (host.DisplayFullDurationDetails) + { + if (timing.InitialDelay != 0) + { + timingInfo += host.ApplyTimeMultiplier(timing.InitialDelay).ToString() + "s + "; + displayTotal = true; + } + + timingInfo += duration.ToString("F2") + "s"; + + if (timing.NumberOfRepeats != 0) + { + float delayBetweenRepeats = host.ApplyTimeMultiplier(timing.DelayBetweenRepeats); + + timingInfo += " + "+ timing.NumberOfRepeats.ToString() + " x "; + if (timing.DelayBetweenRepeats > 0) + { + timingInfo += "("; + } + timingInfo += duration + "s"; + if (timing.DelayBetweenRepeats > 0) + { + timingInfo += " + " + host.ApplyTimeMultiplier(timing.DelayBetweenRepeats) + "s )"; + } + displayTotal = true; + } + + if (displayTotal) + { + timingInfo += " = " + totalDuration.ToString("F2") + "s"; + } + } + else + { + timingInfo = totalDuration.ToString("F2") + "s"; + } + + //"[ 2s + 3 x (4s + 1s) ]" + + float timingRectWidth = 150f; + var timingRect = new Rect(labelRect.xMax - timingRectWidth, labelRect.yMin, timingRectWidth, 17f); + timingRect.xMin = labelRect.xMax - timingRectWidth; + timingRect.xMax = labelRect.xMax; + EditorGUI.LabelField(timingRect, timingInfo, _timingStyle); + + // Progress bar + if (totalDuration == 0f) + { + totalDuration = 0.1f; + } + + if (startedAt == 0f) + { + startedAt = 0.001f; + } + if ((startedAt > 0f) && (thisTime - startedAt < totalDuration + 0.05f)) + { + float fullWidth = progressRect.width; + if (totalDuration == 0f) { totalDuration = 0.1f; } + float percent = ((thisTime - startedAt) / totalDuration) * 100f; + progressRect.width = percent * fullWidth / 100f; + Color barColor = Color.white; + if (thisTime - startedAt > totalDuration) + { + barColor = Color.yellow; + } + EditorGUI.DrawRect(progressRect, barColor); + } + else + { + EditorGUI.DrawRect(progressRect, headerBackgroundColor); + } + + // Active checkbox + activeField = GUI.Toggle(toggleRect, activeField, GUIContent.none, SmallTickbox); + + // Dropdown menu icon + GUI.DrawTexture(menuRect, menuIcon); + + for(int i = 0; i < 3; i++) + { + Rect r = reorderRect; + r.height = 1; + r.y = reorderRect.y + reorderRect.height * (i / 3.0f); + EditorGUI.DrawRect(r, Reorder); + } + + + // Handle events + + if (e.type == EventType.MouseDown) + { + if (menuRect.Contains(e.mousePosition)) + { + var menu = new GenericMenu(); + fillGenericMenu(menu); + menu.DropDown(new Rect(new Vector2(menuRect.x, menuRect.yMax), Vector2.zero)); + e.Use(); + } + } + + if (e.type == EventType.MouseDown && labelRect.Contains(e.mousePosition) && e.button == 0) + { + expanded = !expanded; + e.Use(); + } + + return backgroundRect; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbackStyling.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbackStyling.cs.meta new file mode 100644 index 0000000..6722cd2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbackStyling.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74bba79889819c645bedf0dcd6d6cfa3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksColors.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksColors.cs new file mode 100644 index 0000000..855fd19 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksColors.cs @@ -0,0 +1,396 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace MoreMountains.Feedbacks +{ + /// + /// Color helpers + /// + public static class MMFeedbacksColors + { + // via https://gist.github.com/LotteMakesStuff/f7ce43f11e545a151b95b5e87f76304c + // NOTE: The follwing color names come from the CSS3 specification, Section 4.3 Extended Color Keywords + // http://www.w3.org/TR/css3-color/#svg-color + + public static readonly Color AliceBlue = new Color32(240, 248, 255, 255); + public static readonly Color AntiqueWhite = new Color32(250, 235, 215, 255); + public static readonly Color Aqua = new Color32(0, 255, 255, 255); + public static readonly Color Aquamarine = new Color32(127, 255, 212, 255); + public static readonly Color Azure = new Color32(240, 255, 255, 255); + public static readonly Color Beige = new Color32(245, 245, 220, 255); + public static readonly Color Bisque = new Color32(255, 228, 196, 255); + public static readonly Color Black = new Color32(0, 0, 0, 255); + public static readonly Color BlanchedAlmond = new Color32(255, 235, 205, 255); + public static readonly Color Blue = new Color32(0, 0, 255, 255); + public static readonly Color BlueViolet = new Color32(138, 43, 226, 255); + public static readonly Color Brown = new Color32(165, 42, 42, 255); + public static readonly Color Burlywood = new Color32(222, 184, 135, 255); + public static readonly Color CadetBlue = new Color32(95, 158, 160, 255); + public static readonly Color Chartreuse = new Color32(127, 255, 0, 255); + public static readonly Color Chocolate = new Color32(210, 105, 30, 255); + public static readonly Color Coral = new Color32(255, 127, 80, 255); + public static readonly Color CornflowerBlue = new Color32(100, 149, 237, 255); + public static readonly Color Cornsilk = new Color32(255, 248, 220, 255); + public static readonly Color Crimson = new Color32(220, 20, 60, 255); + public static readonly Color Cyan = new Color32(0, 255, 255, 255); + public static readonly Color DarkBlue = new Color32(0, 0, 139, 255); + public static readonly Color DarkCyan = new Color32(0, 139, 139, 255); + public static readonly Color DarkGoldenrod = new Color32(184, 134, 11, 255); + public static readonly Color DarkGray = new Color32(169, 169, 169, 255); + public static readonly Color DarkGreen = new Color32(0, 100, 0, 255); + public static readonly Color DarkKhaki = new Color32(189, 183, 107, 255); + public static readonly Color DarkMagenta = new Color32(139, 0, 139, 255); + public static readonly Color DarkOliveGreen = new Color32(85, 107, 47, 255); + public static readonly Color DarkOrange = new Color32(255, 140, 0, 255); + public static readonly Color DarkOrchid = new Color32(153, 50, 204, 255); + public static readonly Color DarkRed = new Color32(139, 0, 0, 255); + public static readonly Color DarkSalmon = new Color32(233, 150, 122, 255); + public static readonly Color DarkSeaGreen = new Color32(143, 188, 143, 255); + public static readonly Color DarkSlateBlue = new Color32(72, 61, 139, 255); + public static readonly Color DarkSlateGray = new Color32(47, 79, 79, 255); + public static readonly Color DarkTurquoise = new Color32(0, 206, 209, 255); + public static readonly Color DarkViolet = new Color32(148, 0, 211, 255); + public static readonly Color DeepPink = new Color32(255, 20, 147, 255); + public static readonly Color DeepSkyBlue = new Color32(0, 191, 255, 255); + public static readonly Color DimGray = new Color32(105, 105, 105, 255); + public static readonly Color DodgerBlue = new Color32(30, 144, 255, 255); + public static readonly Color FireBrick = new Color32(178, 34, 34, 255); + public static readonly Color FloralWhite = new Color32(255, 250, 240, 255); + public static readonly Color ForestGreen = new Color32(34, 139, 34, 255); + public static readonly Color Fuchsia = new Color32(255, 0, 255, 255); + public static readonly Color Gainsboro = new Color32(220, 220, 220, 255); + public static readonly Color GhostWhite = new Color32(248, 248, 255, 255); + public static readonly Color Gold = new Color32(255, 215, 0, 255); + public static readonly Color Goldenrod = new Color32(218, 165, 32, 255); + public static readonly Color Gray = new Color32(128, 128, 128, 255); + public static readonly Color Green = new Color32(0, 128, 0, 255); + public static readonly Color GreenYellow = new Color32(173, 255, 47, 255); + public static readonly Color Honeydew = new Color32(240, 255, 240, 255); + public static readonly Color HotPink = new Color32(255, 105, 180, 255); + public static readonly Color IndianRed = new Color32(205, 92, 92, 255); + public static readonly Color Indigo = new Color32(75, 0, 130, 255); + public static readonly Color Ivory = new Color32(255, 255, 240, 255); + public static readonly Color Khaki = new Color32(240, 230, 140, 255); + public static readonly Color Lavender = new Color32(230, 230, 250, 255); + public static readonly Color Lavenderblush = new Color32(255, 240, 245, 255); + public static readonly Color LawnGreen = new Color32(124, 252, 0, 255); + public static readonly Color LemonChiffon = new Color32(255, 250, 205, 255); + public static readonly Color LightBlue = new Color32(173, 216, 230, 255); + public static readonly Color LightCoral = new Color32(240, 128, 128, 255); + public static readonly Color LightCyan = new Color32(224, 255, 255, 255); + public static readonly Color LightGoldenodYellow = new Color32(250, 250, 210, 255); + public static readonly Color LightGray = new Color32(211, 211, 211, 255); + public static readonly Color LightGreen = new Color32(144, 238, 144, 255); + public static readonly Color LightPink = new Color32(255, 182, 193, 255); + public static readonly Color LightSalmon = new Color32(255, 160, 122, 255); + public static readonly Color LightSeaGreen = new Color32(32, 178, 170, 255); + public static readonly Color LightSkyBlue = new Color32(135, 206, 250, 255); + public static readonly Color LightSlateGray = new Color32(119, 136, 153, 255); + public static readonly Color LightSteelBlue = new Color32(176, 196, 222, 255); + public static readonly Color LightYellow = new Color32(255, 255, 224, 255); + public static readonly Color Lime = new Color32(0, 255, 0, 255); + public static readonly Color LimeGreen = new Color32(50, 205, 50, 255); + public static readonly Color Linen = new Color32(250, 240, 230, 255); + public static readonly Color Magenta = new Color32(255, 0, 255, 255); + public static readonly Color Maroon = new Color32(128, 0, 0, 255); + public static readonly Color MediumAquamarine = new Color32(102, 205, 170, 255); + public static readonly Color MediumBlue = new Color32(0, 0, 205, 255); + public static readonly Color MediumOrchid = new Color32(186, 85, 211, 255); + public static readonly Color MediumPurple = new Color32(147, 112, 219, 255); + public static readonly Color MediumSeaGreen = new Color32(60, 179, 113, 255); + public static readonly Color MediumSlateBlue = new Color32(123, 104, 238, 255); + public static readonly Color MediumSpringGreen = new Color32(0, 250, 154, 255); + public static readonly Color MediumTurquoise = new Color32(72, 209, 204, 255); + public static readonly Color MediumVioletRed = new Color32(199, 21, 133, 255); + public static readonly Color MidnightBlue = new Color32(25, 25, 112, 255); + public static readonly Color Mintcream = new Color32(245, 255, 250, 255); + public static readonly Color MistyRose = new Color32(255, 228, 225, 255); + public static readonly Color Moccasin = new Color32(255, 228, 181, 255); + public static readonly Color NavajoWhite = new Color32(255, 222, 173, 255); + public static readonly Color Navy = new Color32(0, 0, 128, 255); + public static readonly Color OldLace = new Color32(253, 245, 230, 255); + public static readonly Color Olive = new Color32(128, 128, 0, 255); + public static readonly Color Olivedrab = new Color32(107, 142, 35, 255); + public static readonly Color Orange = new Color32(255, 165, 0, 255); + public static readonly Color Orangered = new Color32(255, 69, 0, 255); + public static readonly Color Orchid = new Color32(218, 112, 214, 255); + public static readonly Color PaleGoldenrod = new Color32(238, 232, 170, 255); + public static readonly Color PaleGreen = new Color32(152, 251, 152, 255); + public static readonly Color PaleTurquoise = new Color32(175, 238, 238, 255); + public static readonly Color PaleVioletred = new Color32(219, 112, 147, 255); + public static readonly Color PapayaWhip = new Color32(255, 239, 213, 255); + public static readonly Color PeachPuff = new Color32(255, 218, 185, 255); + public static readonly Color Peru = new Color32(205, 133, 63, 255); + public static readonly Color Pink = new Color32(255, 192, 203, 255); + public static readonly Color Plum = new Color32(221, 160, 221, 255); + public static readonly Color PowderBlue = new Color32(176, 224, 230, 255); + public static readonly Color Purple = new Color32(128, 0, 128, 255); + public static readonly Color Red = new Color32(255, 0, 0, 255); + public static readonly Color RosyBrown = new Color32(188, 143, 143, 255); + public static readonly Color RoyalBlue = new Color32(65, 105, 225, 255); + public static readonly Color SaddleBrown = new Color32(139, 69, 19, 255); + public static readonly Color Salmon = new Color32(250, 128, 114, 255); + public static readonly Color SandyBrown = new Color32(244, 164, 96, 255); + public static readonly Color SeaGreen = new Color32(46, 139, 87, 255); + public static readonly Color Seashell = new Color32(255, 245, 238, 255); + public static readonly Color Sienna = new Color32(160, 82, 45, 255); + public static readonly Color Silver = new Color32(192, 192, 192, 255); + public static readonly Color SkyBlue = new Color32(135, 206, 235, 255); + public static readonly Color SlateBlue = new Color32(106, 90, 205, 255); + public static readonly Color SlateGray = new Color32(112, 128, 144, 255); + public static readonly Color Snow = new Color32(255, 250, 250, 255); + public static readonly Color SpringGreen = new Color32(0, 255, 127, 255); + public static readonly Color SteelBlue = new Color32(70, 130, 180, 255); + public static readonly Color Tan = new Color32(210, 180, 140, 255); + public static readonly Color Teal = new Color32(0, 128, 128, 255); + public static readonly Color Thistle = new Color32(216, 191, 216, 255); + public static readonly Color Tomato = new Color32(255, 99, 71, 255); + public static readonly Color Turquoise = new Color32(64, 224, 208, 255); + public static readonly Color Violet = new Color32(238, 130, 238, 255); + public static readonly Color Wheat = new Color32(245, 222, 179, 255); + public static readonly Color White = new Color32(255, 255, 255, 255); + public static readonly Color WhiteSmoke = new Color32(245, 245, 245, 255); + public static readonly Color Yellow = new Color32(255, 255, 0, 255); + public static readonly Color YellowGreen = new Color32(154, 205, 50, 255); + public static readonly Color ReunoYellow = new Color32(255, 196, 0, 255); + public static readonly Color BestRed = new Color32(255, 24, 0, 255); + + public static Dictionary ColorDictionary; + + public static Color RandomColor() + { + int random = Random.Range(0, 140); + return GetColorAt(random); + } + + public static Color GetColorAt(int index) + { + if (ColorDictionary == null) + { + InitializeDictionary(); + } + + if (index < ColorDictionary.Count) + { + return ColorDictionary[index]; + } + else + { + return Color.white; + } + } + + public static void InitializeDictionary() + { + ColorDictionary = new Dictionary + { + { 0, AliceBlue }, + { 1, AntiqueWhite }, + { 2, Aqua }, + { 3, Aquamarine }, + { 4, Azure }, + { 5, Beige }, + { 6, Bisque }, + { 7, Black }, + { 8, BlanchedAlmond }, + { 9, Blue }, + { 10, BlueViolet }, + { 11, Brown }, + { 12, Burlywood }, + { 13, CadetBlue }, + { 14, Chartreuse }, + { 15, Chocolate }, + { 16, Coral }, + { 17, CornflowerBlue }, + { 18, Cornsilk }, + { 19, Crimson }, + { 20, Cyan }, + { 21, DarkBlue }, + { 22, DarkCyan }, + { 23, DarkGoldenrod }, + { 24, DarkGray }, + { 25, DarkGreen }, + { 26, DarkKhaki }, + { 27, DarkMagenta }, + { 28, DarkOliveGreen }, + { 29, DarkOrange }, + { 30, DarkOrchid }, + { 31, DarkRed }, + { 32, DarkSalmon }, + { 33, DarkSeaGreen }, + { 34, DarkSlateBlue }, + { 35, DarkSlateGray }, + { 36, DarkTurquoise }, + { 37, DarkViolet }, + { 38, DeepPink }, + { 39, DeepSkyBlue }, + { 40, DimGray }, + { 41, DodgerBlue }, + { 42, FireBrick }, + { 43, FloralWhite }, + { 44, ForestGreen }, + { 45, Fuchsia }, + { 46, Gainsboro }, + { 47, GhostWhite }, + { 48, Gold }, + { 49, Goldenrod }, + { 50, Gray }, + { 51, Green }, + { 52, GreenYellow }, + { 53, Honeydew }, + { 54, HotPink }, + { 55, IndianRed }, + { 56, Indigo }, + { 57, Ivory }, + { 58, Khaki }, + { 59, Lavender }, + { 60, Lavenderblush }, + { 61, LawnGreen }, + { 62, LemonChiffon }, + { 63, LightBlue }, + { 64, LightCoral }, + { 65, LightCyan }, + { 66, LightGoldenodYellow }, + { 67, LightGray }, + { 68, LightGreen }, + { 69, LightPink }, + { 70, LightSalmon }, + { 71, LightSeaGreen }, + { 72, LightSkyBlue }, + { 73, LightSlateGray }, + { 74, LightSteelBlue }, + { 75, LightYellow }, + { 76, Lime }, + { 77, LimeGreen }, + { 78, Linen }, + { 79, Magenta }, + { 80, Maroon }, + { 81, MediumAquamarine }, + { 82, MediumBlue }, + { 83, MediumOrchid }, + { 84, MediumPurple }, + { 85, MediumSeaGreen }, + { 86, MediumSlateBlue }, + { 87, MediumSpringGreen }, + { 88, MediumTurquoise }, + { 89, MediumVioletRed }, + { 90, MidnightBlue }, + { 91, Mintcream }, + { 92, MistyRose }, + { 93, Moccasin }, + { 94, NavajoWhite }, + { 95, Navy }, + { 96, OldLace }, + { 97, Olive }, + { 98, Olivedrab }, + { 99, Orange }, + { 100, Orangered }, + { 101, Orchid }, + { 102, PaleGoldenrod }, + { 103, PaleGreen }, + { 104, PaleTurquoise }, + { 105, PaleVioletred }, + { 106, PapayaWhip }, + { 107, PeachPuff }, + { 108, Peru }, + { 109, Pink }, + { 110, Plum }, + { 111, PowderBlue }, + { 112, Purple }, + { 113, Red }, + { 114, RosyBrown }, + { 115, RoyalBlue }, + { 116, SaddleBrown }, + { 117, Salmon }, + { 118, SandyBrown }, + { 119, SeaGreen }, + { 120, Seashell }, + { 121, Sienna }, + { 122, Silver }, + { 123, SkyBlue }, + { 124, SlateBlue }, + { 125, SlateGray }, + { 126, Snow }, + { 127, SpringGreen }, + { 128, SteelBlue }, + { 129, Tan }, + { 130, Teal }, + { 131, Thistle }, + { 132, Tomato }, + { 133, Turquoise }, + { 134, Violet }, + { 135, Wheat }, + { 136, White }, + { 137, WhiteSmoke }, + { 138, Yellow }, + { 139, YellowGreen }, + { 140, ReunoYellow }, + { 141, BestRed } + }; + } + + /// + /// Returns a random color between the two min/max specified + /// + /// + /// + /// + /// + public static Color MMRandomColor(this Color color, Color min, Color max) + { + Color c = new Color() + { + r = UnityEngine.Random.Range(min.r, max.r), + g = UnityEngine.Random.Range(min.g, max.g), + b = UnityEngine.Random.Range(min.b, max.b), + a = UnityEngine.Random.Range(min.a, max.a) + }; + + return c; + } + + + /// + /// Tint : Uses HSV color conversions, keeps the original values, multiplies alpha + /// Multiply : The whole color, including alpha, is multiplied over the original + /// Replace : completely replaces the original with the target color + /// ReplaceKeepAlpha : color is replaced but the original alpha channel is ignored + /// Add : target color gets added (including its alpha) + /// + public enum ColoringMode { Tint, Multiply, Replace, ReplaceKeepAlpha, Add } + + public static Color MMColorize(this Color originalColor, Color targetColor, ColoringMode coloringMode, float lerpAmount = 1.0f) + { + Color resultColor = Color.white; + switch (coloringMode) + { + case ColoringMode.Tint: + { + float s_h, s_s, s_v, t_h, t_s, t_v; + Color.RGBToHSV(originalColor, out s_h, out s_s, out s_v); + Color.RGBToHSV(targetColor, out t_h, out t_s, out t_v); + resultColor = Color.HSVToRGB(t_h, t_s, s_v * t_v); + resultColor.a = originalColor.a * targetColor.a; + } + break; + case ColoringMode.Multiply: + resultColor = originalColor * targetColor; + break; + case ColoringMode.Replace: + resultColor = targetColor; + break; + case ColoringMode.ReplaceKeepAlpha: + resultColor = targetColor; + resultColor.a = originalColor.a; + break; + case ColoringMode.Add: + resultColor = originalColor + targetColor; + break; + default: + break; + } + return Color.Lerp(originalColor, resultColor, lerpAmount); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksColors.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksColors.cs.meta new file mode 100644 index 0000000..6256b94 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksColors.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 822282e53ae1ea84d9795a45c89280db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksConfiguration.cs b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksConfiguration.cs new file mode 100644 index 0000000..0902754 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksConfiguration.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// An asset to store copy information, as well as global feedback settings. + /// It requires that one (and only one) MMFeedbacksConfiguration asset be created and stored in a Resources folder. + /// That's already done when installing MMFeedbacks. + /// + [CreateAssetMenu(menuName = "MoreMountains/MMFeedbacks/Configuration", fileName = "MMFeedbacksConfiguration")] + public class MMFeedbacksConfiguration : ScriptableObject + { + private static MMFeedbacksConfiguration _instance; + private static bool _instantiated; + + /// + /// Singleton pattern + /// + public static MMFeedbacksConfiguration Instance + { + get + { + if (_instantiated) + { + return _instance; + } + + string assetName = typeof(MMFeedbacksConfiguration).Name; + + MMFeedbacksConfiguration loadedAsset = Resources.Load("MMFeedbacksConfiguration"); + _instantiated = true; + _instance = loadedAsset; + + return _instance; + } + } + + [Header("Debug")] + /// storage for copy/paste + public MMFeedbacks _mmFeedbacks; + + [Header("Help settings")] + /// if this is true, inspector tips will be shown for MMFeedbacks + public bool ShowInspectorTips = true; + + private void OnDestroy(){ _instantiated = false; } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksConfiguration.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksConfiguration.cs.meta new file mode 100644 index 0000000..56c5e6c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Core/MMFeedbacksConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00bf1cad26d9e9342b90f463840caf08 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Curves.meta b/Assets/Feel/MMFeedbacks/Editor/Curves.meta new file mode 100644 index 0000000..b954377 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Curves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64a86544d830f6144b6588a93f78e3d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Curves/Editor.meta b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor.meta new file mode 100644 index 0000000..af05486 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e028a42d652a2e449be3c8795c6b39e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFAntiCurves.curves b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFAntiCurves.curves new file mode 100644 index 0000000..70f9a8c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFAntiCurves.curves @@ -0,0 +1,14261 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12322, guid: 0000000000000000e000000000000000, type: 0} + m_Name: MMFAntiCurves + m_EditorClassIdentifier: + m_Presets: + - m_Name: LinearTween + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.9999995 + outSlope: -0.9999995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.97959185 + inSlope: -0.9999995 + outSlope: -0.9999995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9591837 + inSlope: -0.9999995 + outSlope: -0.9999995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.93877554 + inSlope: -1.000001 + outSlope: -1.000001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9183673 + inSlope: -1.000001 + outSlope: -1.000001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.8979592 + inSlope: -0.99999946 + outSlope: -0.99999946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.877551 + inSlope: -0.99999946 + outSlope: -0.99999946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.85714287 + inSlope: -0.99999964 + outSlope: -0.99999964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.8367347 + inSlope: -1.0000011 + outSlope: -1.0000011 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.8163265 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.79591835 + inSlope: -0.99999964 + outSlope: -0.99999964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.7755102 + inSlope: -0.99999964 + outSlope: -0.99999964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.75510204 + inSlope: -0.99999964 + outSlope: -0.99999964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.7346939 + inSlope: -0.9999993 + outSlope: -0.9999993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.71428573 + inSlope: -0.9999993 + outSlope: -0.9999993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.6938776 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.6734694 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.6530612 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.63265306 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.6122449 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.5918367 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.57142854 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.5510204 + inSlope: -0.9999993 + outSlope: -0.9999993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.53061223 + inSlope: -0.9999993 + outSlope: -0.9999993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5102041 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.48979592 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.46938777 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.44897962 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.4285714 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.40816325 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.3877551 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.36734694 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.3469388 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.32653064 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.30612242 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.28571427 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.26530612 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.24489796 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.22448981 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.20408165 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.18367344 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.16326529 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.14285713 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.12244898 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.10204083 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.081632674 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.06122446 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.040816307 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.020408154 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.020409346 + outSlope: -0.020409346 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9995835 + inSlope: -0.04081577 + outSlope: -0.04081577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99833405 + inSlope: -0.08163154 + outSlope: -0.08163154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9962516 + inSlope: -0.12245023 + outSlope: -0.12245023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9933361 + inSlope: -0.16326599 + outSlope: -0.16326599 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.98958766 + inSlope: -0.20408031 + outSlope: -0.20408031 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9850063 + inSlope: -0.24489753 + outSlope: -0.24489753 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.97959185 + inSlope: -0.2857148 + outSlope: -0.2857148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.97334445 + inSlope: -0.32653058 + outSlope: -0.32653058 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.96626407 + inSlope: -0.3673477 + outSlope: -0.3673477 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.95835066 + inSlope: -0.4081636 + outSlope: -0.4081636 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.94960433 + inSlope: -0.44897938 + outSlope: -0.44897938 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.940025 + inSlope: -0.4897966 + outSlope: -0.4897966 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.92961264 + inSlope: -0.5306122 + outSlope: -0.5306122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9183673 + inSlope: -0.57142794 + outSlope: -0.57142794 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.90628904 + inSlope: -0.6122441 + outSlope: -0.6122441 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8933778 + inSlope: -0.6530609 + outSlope: -0.6530609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8796335 + inSlope: -0.6938782 + outSlope: -0.6938782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8650562 + inSlope: -0.7346945 + outSlope: -0.7346945 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.849646 + inSlope: -0.77550966 + outSlope: -0.77550966 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.83340275 + inSlope: -0.8163269 + outSlope: -0.8163269 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8163265 + inSlope: -0.8571433 + outSlope: -0.8571433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.7984173 + inSlope: -0.8979584 + outSlope: -0.8979584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.7796751 + inSlope: -0.93877566 + outSlope: -0.93877566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.76009995 + inSlope: -0.9795921 + outSlope: -0.9795921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.7396918 + inSlope: -1.0204079 + outSlope: -1.0204079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.71845067 + inSlope: -1.0612237 + outSlope: -1.0612237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.69637656 + inSlope: -1.1020408 + outSlope: -1.1020408 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.67346936 + inSlope: -1.142858 + outSlope: -1.142858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.64972925 + inSlope: -1.183674 + outSlope: -1.183674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.62515616 + inSlope: -1.2244897 + outSlope: -1.2244897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.5997501 + inSlope: -1.2653055 + outSlope: -1.2653055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.57351106 + inSlope: -1.3061213 + outSlope: -1.3061213 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.54643905 + inSlope: -1.3469381 + outSlope: -1.3469381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.51853395 + inSlope: -1.3877554 + outSlope: -1.3877554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.48979592 + inSlope: -1.4285731 + outSlope: -1.4285731 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.46022487 + inSlope: -1.469389 + outSlope: -1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.4298209 + inSlope: -1.5102032 + outSlope: -1.5102032 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.39858395 + inSlope: -1.5510205 + outSlope: -1.5510205 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.36651397 + inSlope: -1.5918368 + outSlope: -1.5918368 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.33361095 + inSlope: -1.6326525 + outSlope: -1.6326525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.29987502 + inSlope: -1.6734693 + outSlope: -1.6734693 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.26530612 + inSlope: -1.7142851 + outSlope: -1.7142851 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.22990423 + inSlope: -1.7551024 + outSlope: -1.7551024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.19366932 + inSlope: -1.7959197 + outSlope: -1.7959197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.15660143 + inSlope: -1.836734 + outSlope: -1.836734 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.118700504 + inSlope: -1.8775499 + outSlope: -1.8775499 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.079966664 + inSlope: -1.9183685 + outSlope: -1.9183685 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.04039979 + inSlope: -1.9591842 + outSlope: -1.9591842 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1.9795907 + outSlope: -1.9795907 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -1.9795897 + outSlope: -1.9795897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9596002 + inSlope: -1.9591832 + outSlope: -1.9591832 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.92003334 + inSlope: -1.9183674 + outSlope: -1.9183674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.8812995 + inSlope: -1.8775518 + outSlope: -1.8775518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.8433986 + inSlope: -1.8367358 + outSlope: -1.8367358 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.8063307 + inSlope: -1.7959186 + outSlope: -1.7959186 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.77009577 + inSlope: -1.7551014 + outSlope: -1.7551014 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.7346939 + inSlope: -1.7142844 + outSlope: -1.7142844 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.700125 + inSlope: -1.6734717 + outSlope: -1.6734717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.6663889 + inSlope: -1.6326537 + outSlope: -1.6326537 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.63348603 + inSlope: -1.5918357 + outSlope: -1.5918357 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.60141605 + inSlope: -1.5510199 + outSlope: -1.5510199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.5701791 + inSlope: -1.5102026 + outSlope: -1.5102026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.53977513 + inSlope: -1.4693878 + outSlope: -1.4693878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.5102041 + inSlope: -1.428572 + outSlope: -1.428572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.48146605 + inSlope: -1.3877544 + outSlope: -1.3877544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.45356107 + inSlope: -1.3469391 + outSlope: -1.3469391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.42648894 + inSlope: -1.3061233 + outSlope: -1.3061233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.4002499 + inSlope: -1.2653055 + outSlope: -1.2653055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.37484384 + inSlope: -1.2244918 + outSlope: -1.2244918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.35027063 + inSlope: -1.1836746 + outSlope: -1.1836746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.32653058 + inSlope: -1.1428567 + outSlope: -1.1428567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.30362344 + inSlope: -1.10204 + outSlope: -1.10204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.28154933 + inSlope: -1.0612229 + outSlope: -1.0612229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.2603082 + inSlope: -1.0204079 + outSlope: -1.0204079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.23990005 + inSlope: -0.9795921 + outSlope: -0.9795921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.22032487 + inSlope: -0.9387763 + outSlope: -0.9387763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.20158267 + inSlope: -0.89795923 + outSlope: -0.89795923 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.18367344 + inSlope: -0.857142 + outSlope: -0.857142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.16659725 + inSlope: -0.816326 + outSlope: -0.816326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.15035403 + inSlope: -0.7755102 + outSlope: -0.7755102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.13494378 + inSlope: -0.7346945 + outSlope: -0.7346945 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.120366514 + inSlope: -0.6938772 + outSlope: -0.6938772 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.10662228 + inSlope: -0.65306044 + outSlope: -0.65306044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.09371096 + inSlope: -0.61224616 + outSlope: -0.61224616 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.081632614 + inSlope: -0.57142836 + outSlope: -0.57142836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.07038736 + inSlope: -0.5306111 + outSlope: -0.5306111 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.059975028 + inSlope: -0.4897968 + outSlope: -0.4897968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.050395668 + inSlope: -0.44897956 + outSlope: -0.44897956 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.04164934 + inSlope: -0.4081632 + outSlope: -0.4081632 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.03373593 + inSlope: -0.3673474 + outSlope: -0.3673474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.026655555 + inSlope: -0.3265307 + outSlope: -0.3265307 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.020408154 + inSlope: -0.28571492 + outSlope: -0.28571492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.014993727 + inSlope: -0.24489766 + outSlope: -0.24489766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.010412335 + inSlope: -0.2040804 + outSlope: -0.2040804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0066639185 + inSlope: -0.16326588 + outSlope: -0.16326588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.003748417 + inSlope: -0.12245008 + outSlope: -0.12245008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0016659498 + inSlope: -0.081631586 + outSlope: -0.081631586 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00041651726 + inSlope: -0.04081579 + outSlope: -0.04081579 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.020409355 + outSlope: -0.020409355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.04081577 + outSlope: -0.04081577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.999167 + inSlope: -0.081633 + outSlope: -0.081633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99666804 + inSlope: -0.163266 + outSlope: -0.163266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9925031 + inSlope: -0.24489754 + outSlope: -0.24489754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9866722 + inSlope: -0.32653052 + outSlope: -0.32653052 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9791753 + inSlope: -0.40816355 + outSlope: -0.40816355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9700125 + inSlope: -0.48979506 + outSlope: -0.48979506 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9591837 + inSlope: -0.5714282 + outSlope: -0.5714282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9466889 + inSlope: -0.65306115 + outSlope: -0.65306115 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.93252814 + inSlope: -0.7346939 + outSlope: -0.7346939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9167014 + inSlope: -0.8163272 + outSlope: -0.8163272 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.89920866 + inSlope: -0.8979602 + outSlope: -0.8979602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.88004994 + inSlope: -0.9795918 + outSlope: -0.9795918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.85922533 + inSlope: -1.0612243 + outSlope: -1.0612243 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.83673465 + inSlope: -1.1428573 + outSlope: -1.1428573 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8125781 + inSlope: -1.2244883 + outSlope: -1.2244883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.78675556 + inSlope: -1.3061218 + outSlope: -1.3061218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.759267 + inSlope: -1.3877563 + outSlope: -1.3877563 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.73011243 + inSlope: -1.469389 + outSlope: -1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.69929194 + inSlope: -1.5510193 + outSlope: -1.5510193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.6668055 + inSlope: -1.6326523 + outSlope: -1.6326523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.63265306 + inSlope: -1.7142866 + outSlope: -1.7142866 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.59683466 + inSlope: -1.7959182 + outSlope: -1.7959182 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.55935025 + inSlope: -1.8775513 + outSlope: -1.8775513 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5201999 + inSlope: -1.9489796 + outSlope: -1.9489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.4798001 + inSlope: -1.9489796 + outSlope: -1.9489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.44064975 + inSlope: -1.8775512 + outSlope: -1.8775512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.4031654 + inSlope: -1.7959185 + outSlope: -1.7959185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.36734688 + inSlope: -1.7142855 + outSlope: -1.7142855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.3331945 + inSlope: -1.632652 + outSlope: -1.632652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.30070806 + inSlope: -1.5510204 + outSlope: -1.5510204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.26988757 + inSlope: -1.469389 + outSlope: -1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.24073303 + inSlope: -1.3877559 + outSlope: -1.3877559 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.2132445 + inSlope: -1.3061224 + outSlope: -1.3061224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.18742186 + inSlope: -1.2244895 + outSlope: -1.2244895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.16326529 + inSlope: -1.1428567 + outSlope: -1.1428567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.14077467 + inSlope: -1.0612237 + outSlope: -1.0612237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.119950056 + inSlope: -0.97959214 + outSlope: -0.97959214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.100791335 + inSlope: -0.89796054 + outSlope: -0.89796054 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.08329862 + inSlope: -0.8163264 + outSlope: -0.8163264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.06747186 + inSlope: -0.7346933 + outSlope: -0.7346933 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.05331111 + inSlope: -0.6530614 + outSlope: -0.6530614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.040816307 + inSlope: -0.57142836 + outSlope: -0.57142836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.029987514 + inSlope: -0.48979533 + outSlope: -0.48979533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.02082467 + inSlope: -0.40816373 + outSlope: -0.40816373 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.013327777 + inSlope: -0.32653028 + outSlope: -0.32653028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0074968934 + inSlope: -0.24489725 + outSlope: -0.24489725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0033319592 + inSlope: -0.16326609 + outSlope: -0.16326609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.0008329749 + inSlope: -0.08163304 + outSlope: -0.08163304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.04081579 + outSlope: -0.04081579 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.00041764975 + outSlope: -0.00041764975 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9999915 + inSlope: -0.001666218 + outSlope: -0.001666218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.999932 + inSlope: -0.005413383 + outSlope: -0.005413383 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9997705 + inSlope: -0.011662066 + outSlope: -0.011662066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.999456 + inSlope: -0.020409344 + outSlope: -0.020409344 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9989375 + inSlope: -0.0316523 + outSlope: -0.0316523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99816406 + inSlope: -0.045396768 + outSlope: -0.045396768 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99708456 + inSlope: -0.061641317 + outSlope: -0.061641317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9956481 + inSlope: -0.08038298 + outSlope: -0.08038298 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9938036 + inSlope: -0.10162467 + outSlope: -0.10162467 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.99150014 + inSlope: -0.12536503 + outSlope: -0.12536503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9886867 + inSlope: -0.15160394 + outSlope: -0.15160394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9853122 + inSlope: -0.18034148 + outSlope: -0.18034148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9813258 + inSlope: -0.2115775 + outSlope: -0.2115775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9766764 + inSlope: -0.24531367 + outSlope: -0.24531367 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.971313 + inSlope: -0.2815501 + outSlope: -0.2815501 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.96518457 + inSlope: -0.32028323 + outSlope: -0.32028323 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9582402 + inSlope: -0.36151522 + outSlope: -0.36151522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.95042884 + inSlope: -0.40524894 + outSlope: -0.40524894 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.94169945 + inSlope: -0.45147926 + outSlope: -0.45147926 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9320011 + inSlope: -0.5002085 + outSlope: -0.5002085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.92128277 + inSlope: -0.55143666 + outSlope: -0.55143666 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.9094935 + inSlope: -0.6051641 + outSlope: -0.6051641 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.8965822 + inSlope: -0.6613921 + outSlope: -0.6613921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.8824979 + inSlope: -0.72011614 + outSlope: -0.72011614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.8671897 + inSlope: -0.7813413 + outSlope: -0.7813413 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.85060644 + inSlope: -0.845065 + outSlope: -0.845065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.8326973 + inSlope: -0.911286 + outSlope: -0.911286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.81341106 + inSlope: -0.98000836 + outSlope: -0.98000836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.7926969 + inSlope: -1.0512292 + outSlope: -1.0512292 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.77050376 + inSlope: -1.1249474 + outSlope: -1.1249474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.7467807 + inSlope: -1.2011657 + outSlope: -1.2011657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.7214766 + inSlope: -1.2798839 + outSlope: -1.2798839 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.69454056 + inSlope: -1.3611002 + outSlope: -1.3611002 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.66592145 + inSlope: -1.4448142 + outSlope: -1.4448142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.6355685 + inSlope: -1.5310287 + outSlope: -1.5310287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.6034305 + inSlope: -1.6197429 + outSlope: -1.6197429 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.5694566 + inSlope: -1.7109542 + outSlope: -1.7109542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.5335957 + inSlope: -1.8046639 + outSlope: -1.8046639 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.49579686 + inSlope: -1.9008739 + outSlope: -1.9008739 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.4560089 + inSlope: -1.999584 + outSlope: -1.999584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.4141811 + inSlope: -2.100791 + outSlope: -2.100791 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.37026238 + inSlope: -2.204498 + outSlope: -2.204498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.32420164 + inSlope: -2.3107038 + outSlope: -2.3107038 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.275948 + inSlope: -2.419408 + outSlope: -2.419408 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.22545034 + inSlope: -2.530613 + outSlope: -2.530613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.17265755 + inSlope: -2.6443148 + outSlope: -2.6443148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.11751902 + inSlope: -2.7605157 + outSlope: -2.7605157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.059983492 + inSlope: -2.8792174 + outSlope: -2.8792174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -2.9391925 + outSlope: -2.9391925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -2.939191 + outSlope: -2.939191 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9400165 + inSlope: -2.8792162 + outSlope: -2.8792162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.882481 + inSlope: -2.7605143 + outSlope: -2.7605143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.82734245 + inSlope: -2.6443172 + outSlope: -2.6443172 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.77454966 + inSlope: -2.5306156 + outSlope: -2.5306156 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.724052 + inSlope: -2.419407 + outSlope: -2.419407 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.67579836 + inSlope: -2.3107026 + outSlope: -2.3107026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.6297376 + inSlope: -2.2044973 + outSlope: -2.2044973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.5858189 + inSlope: -2.1007931 + outSlope: -2.1007931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.54399097 + inSlope: -1.9995853 + outSlope: -1.9995853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.50420314 + inSlope: -1.9008732 + outSlope: -1.9008732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.46640432 + inSlope: -1.8046633 + outSlope: -1.8046633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.43054342 + inSlope: -1.7109535 + outSlope: -1.7109535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.3965695 + inSlope: -1.6197417 + outSlope: -1.6197417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.3644315 + inSlope: -1.5310276 + outSlope: -1.5310276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.33407855 + inSlope: -1.4448147 + outSlope: -1.4448147 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.3054595 + inSlope: -1.3611013 + outSlope: -1.3611013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.2785234 + inSlope: -1.2798843 + outSlope: -1.2798843 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.2532193 + inSlope: -1.2011657 + outSlope: -1.2011657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.22949624 + inSlope: -1.124948 + outSlope: -1.124948 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.20730305 + inSlope: -1.05123 + outSlope: -1.05123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.18658888 + inSlope: -0.9800083 + outSlope: -0.9800083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.16730273 + inSlope: -0.9112853 + outSlope: -0.9112853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.14939356 + inSlope: -0.8450644 + outSlope: -0.8450644 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.1328103 + inSlope: -0.7813413 + outSlope: -0.7813413 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.11750209 + inSlope: -0.72011614 + outSlope: -0.72011614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.103417814 + inSlope: -0.661391 + outSlope: -0.661391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.09050655 + inSlope: -0.6051651 + outSlope: -0.6051651 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.07871717 + inSlope: -0.55143726 + outSlope: -0.55143726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.067998886 + inSlope: -0.50020736 + outSlope: -0.50020736 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.058300555 + inSlope: -0.4514796 + outSlope: -0.4514796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.049571157 + inSlope: -0.40524894 + outSlope: -0.40524894 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.04175979 + inSlope: -0.36151546 + outSlope: -0.36151546 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.03481543 + inSlope: -0.32028303 + outSlope: -0.32028303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.028687 + inSlope: -0.28154963 + outSlope: -0.28154963 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.023323596 + inSlope: -0.24531385 + outSlope: -0.24531385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.018674195 + inSlope: -0.21157765 + outSlope: -0.21157765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.014687777 + inSlope: -0.18034154 + outSlope: -0.18034154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.011313319 + inSlope: -0.151604 + outSlope: -0.151604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.008499861 + inSlope: -0.12536491 + outSlope: -0.12536491 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.0061963797 + inSlope: -0.10162458 + outSlope: -0.10162458 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.004351914 + inSlope: -0.08038302 + outSlope: -0.08038302 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.002915442 + inSlope: -0.061641335 + outSlope: -0.061641335 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0018359423 + inSlope: -0.045396797 + outSlope: -0.045396797 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0010625124 + inSlope: -0.031652316 + outSlope: -0.031652316 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0005440116 + inSlope: -0.020409334 + outSlope: -0.020409334 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.00022947788 + inSlope: -0.011662049 + outSlope: -0.011662049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0000680089 + inSlope: -0.005413386 + outSlope: -0.005413386 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.000008523464 + inSlope: -0.0016662189 + outSlope: -0.0016662189 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.00041764995 + outSlope: -0.00041764995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.0016647577 + outSlope: -0.0016647577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.999966 + inSlope: -0.006663412 + outSlope: -0.006663412 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.999728 + inSlope: -0.021657912 + outSlope: -0.021657912 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.999082 + inSlope: -0.046648264 + outSlope: -0.046648264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.997824 + inSlope: -0.081632994 + outSlope: -0.081632994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.99575007 + inSlope: -0.12661359 + outSlope: -0.12661359 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9926561 + inSlope: -0.18159145 + outSlope: -0.18159145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9883382 + inSlope: -0.2465638 + outSlope: -0.2465638 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9825923 + inSlope: -0.32153192 + outSlope: -0.32153192 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9752144 + inSlope: -0.40649724 + outSlope: -0.40649724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.96600056 + inSlope: -0.50145864 + outSlope: -0.50145864 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9547467 + inSlope: -0.6064143 + outSlope: -0.6064143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.94124895 + inSlope: -0.7213659 + outSlope: -0.7213659 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9253032 + inSlope: -0.8463144 + outSlope: -0.8463144 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9067055 + inSlope: -0.9812577 + outSlope: -0.9812577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8852519 + inSlope: -1.1261975 + outSlope: -1.1261975 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8607383 + inSlope: -1.2811329 + outSlope: -1.2811329 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8329607 + inSlope: -1.4460638 + outSlope: -1.4460638 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.80171525 + inSlope: -1.6209915 + outSlope: -1.6209915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.76679784 + inSlope: -1.805914 + outSlope: -1.805914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.72800446 + inSlope: -2.0008326 + outSlope: -2.0008326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.6851312 + inSlope: -2.2057467 + outSlope: -2.2057467 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.637974 + inSlope: -2.4206593 + outSlope: -2.4206593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.58632874 + inSlope: -2.6455653 + outSlope: -2.6455653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.52999175 + inSlope: -2.8498535 + outSlope: -2.8498535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.47000825 + inSlope: -2.8498535 + outSlope: -2.8498535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.41367126 + inSlope: -2.645564 + outSlope: -2.645564 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.3620261 + inSlope: -2.4206593 + outSlope: -2.4206593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.31486875 + inSlope: -2.2057476 + outSlope: -2.2057476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.27199548 + inSlope: -2.0008326 + outSlope: -2.0008326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.23320216 + inSlope: -1.8059139 + outSlope: -1.8059139 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.19828475 + inSlope: -1.6209915 + outSlope: -1.6209915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.16703928 + inSlope: -1.4460647 + outSlope: -1.4460647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.13926172 + inSlope: -1.2811337 + outSlope: -1.2811337 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.11474806 + inSlope: -1.1261971 + outSlope: -1.1261971 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.09329444 + inSlope: -0.98125684 + outSlope: -0.98125684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.07469678 + inSlope: -0.8463136 + outSlope: -0.8463136 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.058751047 + inSlope: -0.72136617 + outSlope: -0.72136617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.045253277 + inSlope: -0.60641456 + outSlope: -0.60641456 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.033999443 + inSlope: -0.50145817 + outSlope: -0.50145817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.024785578 + inSlope: -0.40649688 + outSlope: -0.40649688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.017407715 + inSlope: -0.32153207 + outSlope: -0.32153207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.011661828 + inSlope: -0.24656388 + outSlope: -0.24656388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0073438883 + inSlope: -0.18159157 + outSlope: -0.18159157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0042499304 + inSlope: -0.12661365 + outSlope: -0.12661365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0021759868 + inSlope: -0.08163296 + outSlope: -0.08163296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.00091797113 + inSlope: -0.046648197 + outSlope: -0.046648197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.000271976 + inSlope: -0.021657925 + outSlope: -0.021657925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.000033974648 + inSlope: -0.006663415 + outSlope: -0.006663415 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.0016647585 + outSlope: -0.0016647585 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.000008761883 + outSlope: -0.000008761883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9999998 + inSlope: -0.00006863475 + outSlope: -0.00006863475 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9999972 + inSlope: -0.0003402531 + outSlope: -0.0003402531 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99998593 + inSlope: -0.001019299 + outSlope: -0.001019299 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9999556 + inSlope: -0.0023116765 + outSlope: -0.0023116765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9998916 + inSlope: -0.00442037 + outSlope: -0.00442037 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9997752 + inSlope: -0.007548361 + outSlope: -0.007548361 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9995835 + inSlope: -0.011900099 + outSlope: -0.011900099 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.99928945 + inSlope: -0.017678559 + outSlope: -0.017678559 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9988619 + inSlope: -0.025091104 + outSlope: -0.025091104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9982653 + inSlope: -0.034339286 + outSlope: -0.034339286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9974603 + inSlope: -0.045627505 + outSlope: -0.045627505 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.996403 + inSlope: -0.05916024 + outSlope: -0.05916024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9950456 + inSlope: -0.07513896 + outSlope: -0.07513896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9933361 + inSlope: -0.093769655 + outSlope: -0.093769655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.99121827 + inSlope: -0.11525679 + outSlope: -0.11525679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9886317 + inSlope: -0.13980602 + outSlope: -0.13980602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9855119 + inSlope: -0.16761771 + outSlope: -0.16761771 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9817902 + inSlope: -0.19889629 + outSlope: -0.19889629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9773937 + inSlope: -0.23384875 + outSlope: -0.23384875 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.97224534 + inSlope: -0.27267557 + outSlope: -0.27267557 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.96626407 + inSlope: -0.31558272 + outSlope: -0.31558272 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.9593644 + inSlope: -0.36277395 + outSlope: -0.36277395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.95145696 + inSlope: -0.41445303 + outSlope: -0.41445303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.94244796 + inSlope: -0.47082436 + outSlope: -0.47082436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.93223965 + inSlope: -0.5320904 + outSlope: -0.5320904 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.92073 + inSlope: -0.59845877 + outSlope: -0.59845877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.9078128 + inSlope: -0.67013 + outSlope: -0.67013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.8933777 + inSlope: -0.7473076 + outSlope: -0.7473076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.8773104 + inSlope: -0.8301976 + outSlope: -0.8301976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8594921 + inSlope: -0.91900516 + outSlope: -0.91900516 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8398 + inSlope: -1.0139314 + outSlope: -1.0139314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8181072 + inSlope: -1.1151809 + outSlope: -1.1151809 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.79428244 + inSlope: -1.2229605 + outSlope: -1.2229605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.7681904 + inSlope: -1.337471 + outSlope: -1.337471 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.73969173 + inSlope: -1.4589155 + outSlope: -1.4589155 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.70864284 + inSlope: -1.587502 + outSlope: -1.587502 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.67489576 + inSlope: -1.7234311 + outSlope: -1.7234311 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.63829875 + inSlope: -1.8669083 + outSlope: -1.8669083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.59869546 + inSlope: -2.0181398 + outSlope: -2.0181398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.5559256 + inSlope: -2.1773243 + outSlope: -2.1773243 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.509825 + inSlope: -2.3446693 + outSlope: -2.3446693 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.46022487 + inSlope: -2.5203772 + outSlope: -2.5203772 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.4069525 + inSlope: -2.7046542 + outSlope: -2.7046542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.34983087 + inSlope: -2.897705 + outSlope: -2.897705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.28867888 + inSlope: -3.099729 + outSlope: -3.099729 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.22331119 + inSlope: -3.3109326 + outSlope: -3.3109326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.15353864 + inSlope: -3.5315223 + outSlope: -3.5315223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.079167485 + inSlope: -3.7616987 + outSlope: -3.7616987 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -3.8792086 + outSlope: -3.8792086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -3.879207 + outSlope: -3.879207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9208325 + inSlope: -3.7616968 + outSlope: -3.7616968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.84646136 + inSlope: -3.5315206 + outSlope: -3.5315206 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.7766888 + inSlope: -3.310936 + outSlope: -3.310936 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.7113211 + inSlope: -3.099732 + outSlope: -3.099732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.65016913 + inSlope: -2.8977034 + outSlope: -2.8977034 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.5930475 + inSlope: -2.7046528 + outSlope: -2.7046528 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.53977513 + inSlope: -2.5203762 + outSlope: -2.5203762 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.490175 + inSlope: -2.3446712 + outSlope: -2.3446712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.44407427 + inSlope: -2.1773257 + outSlope: -2.1773257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.40130454 + inSlope: -2.0181394 + outSlope: -2.0181394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.36170125 + inSlope: -1.8669077 + outSlope: -1.8669077 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.32510424 + inSlope: -1.7234304 + outSlope: -1.7234304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.29135716 + inSlope: -1.5875009 + outSlope: -1.5875009 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.26030827 + inSlope: -1.4589144 + outSlope: -1.4589144 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.23180962 + inSlope: -1.3374715 + outSlope: -1.3374715 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.20571762 + inSlope: -1.2229614 + outSlope: -1.2229614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.18189281 + inSlope: -1.1151814 + outSlope: -1.1151814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.1602 + inSlope: -1.0139314 + outSlope: -1.0139314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.14050788 + inSlope: -0.919006 + outSlope: -0.919006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.122689545 + inSlope: -0.8301984 + outSlope: -0.8301984 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.10662222 + inSlope: -0.7473072 + outSlope: -0.7473072 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.092187226 + inSlope: -0.6701291 + outSlope: -0.6701291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.079270005 + inSlope: -0.59845835 + outSlope: -0.59845835 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.06776035 + inSlope: -0.5320904 + outSlope: -0.5320904 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.05755204 + inSlope: -0.47082436 + outSlope: -0.47082436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.048543036 + inSlope: -0.41445333 + outSlope: -0.41445333 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.040635586 + inSlope: -0.36277375 + outSlope: -0.36277375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.03373593 + inSlope: -0.31558222 + outSlope: -0.31558222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.027754664 + inSlope: -0.27267575 + outSlope: -0.27267575 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.022606313 + inSlope: -0.23384893 + outSlope: -0.23384893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.018209815 + inSlope: -0.19889629 + outSlope: -0.19889629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.014488101 + inSlope: -0.16761637 + outSlope: -0.16761637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.011368334 + inSlope: -0.13980594 + outSlope: -0.13980594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.008781731 + inSlope: -0.11525951 + outSlope: -0.11525951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.006663859 + inSlope: -0.093769714 + outSlope: -0.093769714 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.0049543977 + inSlope: -0.075137556 + outSlope: -0.075137556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.003597021 + inSlope: -0.059160262 + outSlope: -0.059160262 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.0025396943 + inSlope: -0.045627527 + outSlope: -0.045627527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.001734674 + inSlope: -0.034339253 + outSlope: -0.034339253 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.0011380911 + inSlope: -0.025091082 + outSlope: -0.025091082 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.00071054697 + inSlope: -0.017678566 + outSlope: -0.017678566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.00041651726 + inSlope: -0.011900103 + outSlope: -0.011900103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.00022482872 + inSlope: -0.0075483657 + outSlope: -0.0075483657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.00010842085 + inSlope: -0.0044203717 + outSlope: -0.0044203717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.00004440546 + inSlope: -0.0023116756 + outSlope: -0.0023116756 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.000014066696 + inSlope: -0.0010192974 + outSlope: -0.0010192974 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0000028014183 + inSlope: -0.0003402533 + outSlope: -0.0003402533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00000017881393 + inSlope: -0.00006863478 + outSlope: -0.00006863478 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.000008761887 + outSlope: -0.000008761887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.000067174435 + outSlope: -0.000067174435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9999986 + inSlope: -0.00054469705 + outSlope: -0.00054469705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99997777 + inSlope: -0.0027205644 + outSlope: -0.0027205644 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9998876 + inSlope: -0.008158773 + outSlope: -0.008158773 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99964476 + inSlope: -0.018494872 + outSlope: -0.018494872 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9991327 + inSlope: -0.03536004 + outSlope: -0.03536004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9982015 + inSlope: -0.060383968 + outSlope: -0.060383968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99666804 + inSlope: -0.09519787 + outSlope: -0.09519787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.99431586 + inSlope: -0.14143723 + outSlope: -0.14143723 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9908951 + inSlope: -0.20073321 + outSlope: -0.20073321 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.98612267 + inSlope: -0.27471572 + outSlope: -0.27471572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9796822 + inSlope: -0.36501712 + outSlope: -0.36501712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.971224 + inSlope: -0.4732717 + outSlope: -0.4732717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.960365 + inSlope: -0.6011102 + outSlope: -0.6011102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9466889 + inSlope: -0.7501645 + outSlope: -0.7501645 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.92974603 + inSlope: -0.922066 + outSlope: -0.922066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.90905356 + inSlope: -1.1184452 + outSlope: -1.1184452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8840952 + inSlope: -1.3409373 + outSlope: -1.3409373 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8543214 + inSlope: -1.5911732 + outSlope: -1.5911732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8191494 + inSlope: -1.8707855 + outSlope: -1.8707855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.7779628 + inSlope: -2.1814046 + outSlope: -2.1814046 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.73011243 + inSlope: -2.5246618 + outSlope: -2.5246618 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.67491543 + inSlope: -2.9021916 + outSlope: -2.9021916 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.6116556 + inSlope: -3.3156257 + outSlope: -3.3156257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.53958374 + inSlope: -3.7053654 + outSlope: -3.7053654 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.46041626 + inSlope: -3.7053654 + outSlope: -3.7053654 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.3883444 + inSlope: -3.3156252 + outSlope: -3.3156252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.3250847 + inSlope: -2.902193 + outSlope: -2.902193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.26988745 + inSlope: -2.524662 + outSlope: -2.524662 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.22203714 + inSlope: -2.1814032 + outSlope: -2.1814032 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.18085063 + inSlope: -1.8707855 + outSlope: -1.8707855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.14567858 + inSlope: -1.5911732 + outSlope: -1.5911732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.11590481 + inSlope: -1.3409381 + outSlope: -1.3409381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.090946436 + inSlope: -1.1184461 + outSlope: -1.1184461 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.07025391 + inSlope: -0.9220645 + outSlope: -0.9220645 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.05331111 + inSlope: -0.75016356 + outSlope: -0.75016356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.039635003 + inSlope: -0.6011107 + outSlope: -0.6011107 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.02877599 + inSlope: -0.47327185 + outSlope: -0.47327185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.020317793 + inSlope: -0.3650173 + outSlope: -0.3650173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.013877332 + inSlope: -0.27471548 + outSlope: -0.27471548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.0091049075 + inSlope: -0.20073304 + outSlope: -0.20073304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.0056841373 + inSlope: -0.14143729 + outSlope: -0.14143729 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0033319592 + inSlope: -0.0951979 + outSlope: -0.0951979 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0017985106 + inSlope: -0.060384005 + outSlope: -0.060384005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0008673072 + inSlope: -0.035360053 + outSlope: -0.035360053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.00035524368 + inSlope: -0.018494865 + outSlope: -0.018494865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.00011241436 + inSlope: -0.00815876 + outSlope: -0.00815876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.000022232533 + inSlope: -0.002720566 + outSlope: -0.002720566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.0000013709068 + inSlope: -0.0005446973 + outSlope: -0.0005446973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.000067174464 + outSlope: -0.000067174464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1 + inSlope: -0.0000029206276 + outSlope: -0.0000029206276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9999999 + inSlope: -0.000020444391 + outSlope: -0.000020444391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99999917 + inSlope: -0.00008615852 + outSlope: -0.00008615852 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99999636 + inSlope: -0.00025117394 + outSlope: -0.00025117394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9999889 + inSlope: -0.00058558583 + outSlope: -0.00058558583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99997246 + inSlope: -0.0011857747 + outSlope: -0.0011857747 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9999405 + inSlope: -0.0021671061 + outSlope: -0.0021671061 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.999884 + inSlope: -0.0036639275 + outSlope: -0.0036639275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.99979097 + inSlope: -0.0058310316 + outSlope: -0.0058310316 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.999646 + inSlope: -0.008846583 + outSlope: -0.008846583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9994299 + inSlope: -0.012909174 + outSlope: -0.012909174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9991191 + inSlope: -0.018234942 + outSlope: -0.018234942 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9986856 + inSlope: -0.025064817 + outSlope: -0.025064817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.99809605 + inSlope: -0.03366023 + outSlope: -0.03366023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9973117 + inSlope: -0.0443001 + outSlope: -0.0443001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9962879 + inSlope: -0.057285167 + outSlope: -0.057285167 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.99497354 + inSlope: -0.0729412 + outSlope: -0.0729412 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9933107 + inSlope: -0.09161137 + outSlope: -0.09161137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9912343 + inSlope: -0.11365765 + outSlope: -0.11365765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9886716 + inSlope: -0.13946724 + outSlope: -0.13946724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.98554176 + inSlope: -0.16944614 + outSlope: -0.16944614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.98175544 + inSlope: -0.20401892 + outSlope: -0.20401892 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.97721446 + inSlope: -0.24363285 + outSlope: -0.24363285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.97181123 + inSlope: -0.28875822 + outSlope: -0.28875822 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.9654284 + inSlope: -0.3398853 + outSlope: -0.3398853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.9579384 + inSlope: -0.39752388 + outSlope: -0.39752388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.94920295 + inSlope: -0.46220195 + outSlope: -0.46220195 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.93907297 + inSlope: -0.53447145 + outSlope: -0.53447145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9273878 + inSlope: -0.6149063 + outSlope: -0.6149063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.91397476 + inSlope: -0.70410085 + outSlope: -0.70410085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.898649 + inSlope: -0.80266774 + outSlope: -0.80266774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.88121283 + inSlope: -0.91124064 + outSlope: -0.91124064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8614555 + inSlope: -1.0304767 + outSlope: -1.0304767 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.8391525 + inSlope: -1.1610521 + outSlope: -1.1610521 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.8140656 + inSlope: -1.3036666 + outSlope: -1.3036666 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.78594166 + inSlope: -1.4590353 + outSlope: -1.4590353 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.75451314 + inSlope: -1.6278958 + outSlope: -1.6278958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.71949697 + inSlope: -1.811012 + outSlope: -1.811012 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.6805943 + inSlope: -2.009162 + outSlope: -2.009162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.6374903 + inSlope: -2.223146 + outSlope: -2.223146 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.5898536 + inSlope: -2.4537897 + outSlope: -2.4537897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.53733563 + inSlope: -2.7019367 + outSlope: -2.7019367 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.4795705 + inSlope: -2.9684455 + outSlope: -2.9684455 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.41617465 + inSlope: -3.2542043 + outSlope: -3.2542043 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.3467459 + inSlope: -3.5601187 + outSlope: -3.5601187 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.27086353 + inSlope: -3.8871138 + outSlope: -3.8871138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.18808806 + inSlope: -4.236139 + outSlope: -4.236139 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.097959995 + inSlope: -4.60816 + outSlope: -4.60816 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -4.800042 + outSlope: -4.800042 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -4.80004 + outSlope: -4.80004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.90204 + inSlope: -4.608157 + outSlope: -4.608157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.81191194 + inSlope: -4.2361364 + outSlope: -4.2361364 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.72913647 + inSlope: -3.8871174 + outSlope: -3.8871174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.6532541 + inSlope: -3.560122 + outSlope: -3.560122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.58382535 + inSlope: -3.2542024 + outSlope: -3.2542024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.5204295 + inSlope: -2.9684439 + outSlope: -2.9684439 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.46266437 + inSlope: -2.7019355 + outSlope: -2.7019355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.41014642 + inSlope: -2.4537919 + outSlope: -2.4537919 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.3625096 + inSlope: -2.2231476 + outSlope: -2.2231476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.31940567 + inSlope: -2.0091612 + outSlope: -2.0091612 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.28050303 + inSlope: -1.8110113 + outSlope: -1.8110113 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.24548686 + inSlope: -1.6278951 + outSlope: -1.6278951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.21405834 + inSlope: -1.4590342 + outSlope: -1.4590342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.18593442 + inSlope: -1.3036655 + outSlope: -1.3036655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.16084749 + inSlope: -1.1610522 + outSlope: -1.1610522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.13854456 + inSlope: -1.0304775 + outSlope: -1.0304775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.11878717 + inSlope: -0.9112414 + outSlope: -0.9112414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.10135102 + inSlope: -0.80266774 + outSlope: -0.80266774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.08602524 + inSlope: -0.7041018 + outSlope: -0.7041018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.07261217 + inSlope: -0.61490726 + outSlope: -0.61490726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.060926974 + inSlope: -0.53447074 + outSlope: -0.53447074 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.050797045 + inSlope: -0.4622009 + outSlope: -0.4622009 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.042061627 + inSlope: -0.39752358 + outSlope: -0.39752358 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.034571588 + inSlope: -0.3398853 + outSlope: -0.3398853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.028188765 + inSlope: -0.28875822 + outSlope: -0.28875822 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.022785544 + inSlope: -0.24363303 + outSlope: -0.24363303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.018244565 + inSlope: -0.2040188 + outSlope: -0.2040188 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.014458239 + inSlope: -0.16944587 + outSlope: -0.16944587 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.011328399 + inSlope: -0.13946733 + outSlope: -0.13946733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.0087656975 + inSlope: -0.11365774 + outSlope: -0.11365774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.00668931 + inSlope: -0.09161137 + outSlope: -0.09161137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.0050264597 + inSlope: -0.07294124 + outSlope: -0.07294124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.0037121177 + inSlope: -0.057285145 + outSlope: -0.057285145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.0026882887 + inSlope: -0.044300027 + outSlope: -0.044300027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.0019039512 + inSlope: -0.033660248 + outSlope: -0.033660248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.0013144016 + inSlope: -0.025064837 + outSlope: -0.025064837 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.00088089705 + inSlope: -0.018234946 + outSlope: -0.018234946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.0005701184 + inSlope: -0.01290918 + outSlope: -0.01290918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.00035399199 + inSlope: -0.008846574 + outSlope: -0.008846574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.00020903349 + inSlope: -0.0058310255 + outSlope: -0.0058310255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.00011599064 + inSlope: -0.0036639292 + outSlope: -0.0036639292 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.000059485435 + inSlope: -0.0021671066 + outSlope: -0.0021671066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.000027537346 + inSlope: -0.0011857754 + outSlope: -0.0011857754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.000011086464 + inSlope: -0.0005855861 + outSlope: -0.0005855861 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0000036358833 + inSlope: -0.0002511739 + outSlope: -0.0002511739 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.000000834465 + inSlope: -0.000086158354 + outSlope: -0.000086158354 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.00000011920929 + inSlope: -0.000020444404 + outSlope: -0.000020444404 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0 + inSlope: -0.000002920629 + outSlope: -0.000002920629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.0000029206276 + outSlope: -0.0000029206276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.99999994 + inSlope: -0.000043809414 + outSlope: -0.000043809414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9999982 + inSlope: -0.00033587214 + outSlope: -0.00033587214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99998623 + inSlope: -0.001377076 + outSlope: -0.001377076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.999942 + inSlope: -0.003999799 + outSlope: -0.003999799 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.999823 + inSlope: -0.009370834 + outSlope: -0.009370834 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9995595 + inSlope: -0.018986998 + outSlope: -0.018986998 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.999048 + inSlope: -0.034681 + outSlope: -0.034681 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.998144 + inSlope: -0.05861992 + outSlope: -0.05861992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.99665534 + inSlope: -0.09330089 + outSlope: -0.09330089 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9943358 + inSlope: -0.14155117 + outSlope: -0.14155117 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.99087775 + inSlope: -0.20653802 + outSlope: -0.20653802 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.98590565 + inSlope: -0.2917605 + outSlope: -0.2917605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.97896916 + inSlope: -0.40104437 + outSlope: -0.40104437 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9695365 + inSlope: -0.5385534 + outSlope: -0.5385534 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9569874 + inSlope: -0.70878696 + outSlope: -0.70878696 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9406064 + inSlope: -0.9165715 + outSlope: -0.9165715 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9195763 + inSlope: -1.1670709 + outSlope: -1.1670709 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.89297086 + inSlope: -1.4657819 + outSlope: -1.4657819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8597485 + inSlope: -1.8185296 + outSlope: -1.8185296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.81874514 + inSlope: -2.2314758 + outSlope: -2.2314758 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.7686678 + inSlope: -2.7111177 + outSlope: -2.7111177 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.7080873 + inSlope: -3.2642822 + outSlope: -3.2642822 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.63543177 + inSlope: -3.898129 + outSlope: -3.898129 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.54898 + inSlope: -4.5180902 + outSlope: -4.5180902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.45102 + inSlope: -4.5180902 + outSlope: -4.5180902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.36456823 + inSlope: -3.8981285 + outSlope: -3.8981285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.2919128 + inSlope: -3.2642817 + outSlope: -3.2642817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.23133212 + inSlope: -2.7111177 + outSlope: -2.7111177 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.1812548 + inSlope: -2.2314758 + outSlope: -2.2314758 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.14025152 + inSlope: -1.8185296 + outSlope: -1.8185296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.10702914 + inSlope: -1.4657819 + outSlope: -1.4657819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.08042371 + inSlope: -1.1670717 + outSlope: -1.1670717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.059393585 + inSlope: -0.9165711 + outSlope: -0.9165711 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.04301262 + inSlope: -0.70878583 + outSlope: -0.70878583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.030463517 + inSlope: -0.5385538 + outSlope: -0.5385538 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.021030843 + inSlope: -0.4010447 + outSlope: -0.4010447 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.014094353 + inSlope: -0.29176062 + outSlope: -0.29176062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.009122252 + inSlope: -0.20653811 + outSlope: -0.20653811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.0056642294 + inSlope: -0.14155103 + outSlope: -0.14155103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.003344655 + inSlope: -0.09330079 + outSlope: -0.09330079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.001856029 + inSlope: -0.058619946 + outSlope: -0.058619946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0009520054 + inSlope: -0.034681007 + outSlope: -0.034681007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.00044047832 + inSlope: -0.01898701 + outSlope: -0.01898701 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0001770258 + inSlope: -0.009370838 + outSlope: -0.009370838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.00005799532 + inSlope: -0.003999798 + outSlope: -0.003999798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.000013768673 + inSlope: -0.0013770733 + outSlope: -0.0013770733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0000017881393 + inSlope: -0.00033587235 + outSlope: -0.00033587235 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.000000059604645 + inSlope: -0.000043809436 + outSlope: -0.000043809436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.000002920629 + outSlope: -0.000002920629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.02517581 + outSlope: -0.02517581 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9994862 + inSlope: -0.050337017 + outSlope: -0.050337017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9979454 + inSlope: -0.100624375 + outSlope: -0.100624375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9953791 + inSlope: -0.15080807 + outSlope: -0.15080807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99179 + inSlope: -0.200834 + outSlope: -0.200834 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9871818 + inSlope: -0.25065553 + outSlope: -0.25065553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.98155916 + inSlope: -0.30022004 + outSlope: -0.30022004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9749279 + inSlope: -0.34947503 + outSlope: -0.34947503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9672949 + inSlope: -0.3983707 + outSlope: -0.3983707 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9586679 + inSlope: -0.44685882 + outSlope: -0.44685882 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.94905573 + inSlope: -0.4948858 + outSlope: -0.4948858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.93846846 + inSlope: -0.5424044 + outSlope: -0.5424044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9269168 + inSlope: -0.5893667 + outSlope: -0.5893667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9144127 + inSlope: -0.63572407 + outSlope: -0.63572407 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.90096885 + inSlope: -0.68142754 + outSlope: -0.68142754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8865993 + inSlope: -0.7264291 + outSlope: -0.7264291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8713187 + inSlope: -0.7706848 + outSlope: -0.7706848 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8551428 + inSlope: -0.8141496 + outSlope: -0.8141496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8380881 + inSlope: -0.8567782 + outSlope: -0.8567782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.82017225 + inSlope: -0.898525 + outSlope: -0.898525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.8014136 + inSlope: -0.9393481 + outSlope: -0.9393481 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.7818315 + inSlope: -0.97920656 + outSlope: -0.97920656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.761446 + inSlope: -1.0180604 + outSlope: -1.0180604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.740278 + inSlope: -1.0558679 + outSlope: -1.0558679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.71834934 + inSlope: -1.0925883 + outSlope: -1.0925883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.6956826 + inSlope: -1.1281865 + outSlope: -1.1281865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.67230093 + inSlope: -1.1626265 + outSlope: -1.1626265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.64822847 + inSlope: -1.1958716 + outSlope: -1.1958716 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.6234898 + inSlope: -1.2278876 + outSlope: -1.2278876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.59811056 + inSlope: -1.2586422 + outSlope: -1.2586422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.5721167 + inSlope: -1.288104 + outSlope: -1.288104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.5455349 + inSlope: -1.3162398 + outSlope: -1.3162398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.5183926 + inSlope: -1.3430264 + outSlope: -1.3430264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.49071753 + inSlope: -1.368431 + outSlope: -1.368431 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.46253824 + inSlope: -1.3924268 + outSlope: -1.3924268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.43388373 + inSlope: -1.4149951 + outSlope: -1.4149951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.40478337 + inSlope: -1.4361098 + outSlope: -1.4361098 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.37526703 + inSlope: -1.4557495 + outSlope: -1.4557495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.34536505 + inSlope: -1.4738896 + outSlope: -1.4738896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.3151083 + inSlope: -1.4905174 + outSlope: -1.4905174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.28452754 + inSlope: -1.5056142 + outSlope: -1.5056142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.2536546 + inSlope: -1.5191622 + outSlope: -1.5191622 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.22252095 + inSlope: -1.5311514 + outSlope: -1.5311514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.19115865 + inSlope: -1.5415664 + outSlope: -1.5415664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.1595999 + inSlope: -1.5503969 + outSlope: -1.5503969 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.12787718 + inSlope: -1.5576334 + outSlope: -1.5576334 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.09602296 + inSlope: -1.5632688 + outSlope: -1.5632688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.064070225 + inSlope: -1.5673001 + outSlope: -1.5673001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.032051563 + inSlope: -1.5697212 + outSlope: -1.5697212 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1.5705273 + outSlope: -1.5705273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -1.5705266 + outSlope: -1.5705266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.96794844 + inSlope: -1.5697205 + outSlope: -1.5697205 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9359298 + inSlope: -1.5672992 + outSlope: -1.5672992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.90397704 + inSlope: -1.5632703 + outSlope: -1.5632703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.8721228 + inSlope: -1.5576348 + outSlope: -1.5576348 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.8404001 + inSlope: -1.550396 + outSlope: -1.550396 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.80884135 + inSlope: -1.5415655 + outSlope: -1.5415655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.77747905 + inSlope: -1.5311508 + outSlope: -1.5311508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.7463454 + inSlope: -1.5191646 + outSlope: -1.5191646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.71547234 + inSlope: -1.5056152 + outSlope: -1.5056152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.6848917 + inSlope: -1.4905162 + outSlope: -1.4905162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.65463495 + inSlope: -1.4738891 + outSlope: -1.4738891 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.624733 + inSlope: -1.455749 + outSlope: -1.455749 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.59521663 + inSlope: -1.4361088 + outSlope: -1.4361088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.5661163 + inSlope: -1.414994 + outSlope: -1.414994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.53746176 + inSlope: -1.3924289 + outSlope: -1.3924289 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.50928247 + inSlope: -1.368432 + outSlope: -1.368432 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.48160738 + inSlope: -1.3430254 + outSlope: -1.3430254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.4544651 + inSlope: -1.3162398 + outSlope: -1.3162398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.42788333 + inSlope: -1.2881045 + outSlope: -1.2881045 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.40188938 + inSlope: -1.2586427 + outSlope: -1.2586427 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.37651014 + inSlope: -1.2278879 + outSlope: -1.2278879 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.35177153 + inSlope: -1.1958711 + outSlope: -1.1958711 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.32769907 + inSlope: -1.1626256 + outSlope: -1.1626256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.3043174 + inSlope: -1.1281865 + outSlope: -1.1281865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.28165066 + inSlope: -1.0925883 + outSlope: -1.0925883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.259722 + inSlope: -1.0558672 + outSlope: -1.0558672 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.23855406 + inSlope: -1.0180597 + outSlope: -1.0180597 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.2181685 + inSlope: -0.97920805 + outSlope: -0.97920805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.19858634 + inSlope: -0.93934876 + outSlope: -0.93934876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.17982775 + inSlope: -0.89852417 + outSlope: -0.89852417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.1619119 + inSlope: -0.8567782 + outSlope: -0.8567782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.14485723 + inSlope: -0.81415015 + outSlope: -0.81415015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.1286813 + inSlope: -0.7706857 + outSlope: -0.7706857 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.11340064 + inSlope: -0.72642946 + outSlope: -0.72642946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.09903109 + inSlope: -0.6814265 + outSlope: -0.6814265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.08558732 + inSlope: -0.6357231 + outSlope: -0.6357231 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.07308322 + inSlope: -0.5893669 + outSlope: -0.5893669 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.061531544 + inSlope: -0.54240465 + outSlope: -0.54240465 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.05094427 + inSlope: -0.49488527 + outSlope: -0.49488527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.041332126 + inSlope: -0.44685847 + outSlope: -0.44685847 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.03270513 + inSlope: -0.39837086 + outSlope: -0.39837086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.025072098 + inSlope: -0.34947515 + outSlope: -0.34947515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.018440843 + inSlope: -0.3002202 + outSlope: -0.3002202 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.012818217 + inSlope: -0.25065568 + outSlope: -0.25065568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.008210003 + inSlope: -0.20083533 + outSlope: -0.20083533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.00462085 + inSlope: -0.15080789 + outSlope: -0.15080789 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.002054572 + inSlope: -0.10062297 + outSlope: -0.10062297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00051379204 + inSlope: -0.05033704 + outSlope: -0.05033704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.025175821 + outSlope: -0.025175821 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.050337017 + outSlope: -0.050337017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9989727 + inSlope: -0.10057181 + outSlope: -0.10057181 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.995895 + inSlope: -0.2007318 + outSlope: -0.2007318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9907796 + inSlope: -0.30006528 + outSlope: -0.30006528 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.98364747 + inSlope: -0.39816767 + outSlope: -0.39816767 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.97452784 + inSlope: -0.49463162 + outSlope: -0.49463162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9634584 + inSlope: -0.58906424 + outSlope: -0.58906424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9504844 + inSlope: -0.6810773 + outSlope: -0.6810773 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.93565935 + inSlope: -0.7702893 + outSlope: -0.7702893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.919044 + inSlope: -0.856338 + outSlope: -0.856338 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.90070677 + inSlope: -0.93886507 + outSlope: -0.93886507 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.880723 + inSlope: -1.0175365 + outSlope: -1.0175365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.85917467 + inSlope: -1.0920272 + outSlope: -1.0920272 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.83615047 + inSlope: -1.1620283 + outSlope: -1.1620283 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.8117449 + inSlope: -1.2272577 + outSlope: -1.2272577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.7860583 + inSlope: -1.2874424 + outSlope: -1.2874424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.7591963 + inSlope: -1.3423347 + outSlope: -1.3423347 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.7312691 + inSlope: -1.3917123 + outSlope: -1.3917123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.7023917 + inSlope: -1.4353724 + outSlope: -1.4353724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.6726825 + inSlope: -1.4731336 + outSlope: -1.4731336 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.64226377 + inSlope: -1.5048399 + outSlope: -1.5048399 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.6112605 + inSlope: -1.5303643 + outSlope: -1.5303643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.57979995 + inSlope: -1.5495999 + outSlope: -1.5495999 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.5480115 + inSlope: -1.5624667 + outSlope: -1.5624667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5160258 + inSlope: -1.5689137 + outSlope: -1.5689137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.48397422 + inSlope: -1.5689137 + outSlope: -1.5689137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.45198852 + inSlope: -1.5624664 + outSlope: -1.5624664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.4202001 + inSlope: -1.5496002 + outSlope: -1.5496002 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.38873947 + inSlope: -1.530365 + outSlope: -1.530365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.35773617 + inSlope: -1.5048394 + outSlope: -1.5048394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.32731748 + inSlope: -1.4731331 + outSlope: -1.4731331 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.29760832 + inSlope: -1.4353724 + outSlope: -1.4353724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.26873088 + inSlope: -1.3917133 + outSlope: -1.3917133 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.24080372 + inSlope: -1.3423352 + outSlope: -1.3423352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.21394163 + inSlope: -1.2874405 + outSlope: -1.2874405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.18825507 + inSlope: -1.227257 + outSlope: -1.227257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.16384953 + inSlope: -1.1620293 + outSlope: -1.1620293 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.14082533 + inSlope: -1.0920277 + outSlope: -1.0920277 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.119277 + inSlope: -1.0175369 + outSlope: -1.0175369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.09929323 + inSlope: -0.93886554 + outSlope: -0.93886554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.08095592 + inSlope: -0.8563388 + outSlope: -0.8563388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.06434059 + inSlope: -0.77028966 + outSlope: -0.77028966 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.049515545 + inSlope: -0.68107605 + outSlope: -0.68107605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.03654158 + inSlope: -0.5890631 + outSlope: -0.5890631 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.025472164 + inSlope: -0.4946319 + outSlope: -0.4946319 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.016352534 + inSlope: -0.39816883 + outSlope: -0.39816883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.009220362 + inSlope: -0.30006492 + outSlope: -0.30006492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.004104972 + inSlope: -0.20073044 + outSlope: -0.20073044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.001027286 + inSlope: -0.100571856 + outSlope: -0.100571856 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.05033704 + outSlope: -0.05033704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -10.290323 + outSlope: -10.290323 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.7899934 + inSlope: -12.382375 + outSlope: -12.382375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.49459696 + inSlope: -14.794611 + outSlope: -14.794611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.18613172 + inSlope: -14.044153 + outSlope: -14.044153 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: -0.078633785 + inSlope: -11.040623 + outSlope: -11.040623 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: -0.26450598 + inSlope: -6.860612 + outSlope: -6.860612 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: -0.3586588 + inSlope: -2.5196607 + outSlope: -2.5196607 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: -0.36734927 + inSlope: 1.1890029 + outSlope: 1.1890029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.3101281 + inSlope: 3.777382 + outSlope: 3.777382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.21317041 + inSlope: 5.0722027 + outSlope: 5.0722027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.103099346 + inSlope: 5.1674433 + outSlope: 5.1674433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.0022543669 + inSlope: 4.3421707 + outSlope: 4.3421707 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.074132085 + inSlope: 2.9664814 + outSlope: 2.9664814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.11882651 + inSlope: 1.4148178 + outSlope: 1.4148178 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.13187975 + inSlope: -0.00009393692 + outSlope: -0.00009393692 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.118822694 + inSlope: -1.0663304 + outSlope: -1.0663304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.08835608 + inSlope: -1.6847181 + outSlope: -1.6847181 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.050058663 + inSlope: -1.8582635 + outSlope: -1.8582635 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.012508571 + inSlope: -1.6664568 + outSlope: -1.6664568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.017959952 + inSlope: -1.232626 + outSlope: -1.232626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.037802696 + inSlope: -0.691724 + outSlope: -0.691724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.0461936 + inSlope: -0.16402838 + outSlope: -0.16402838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.04449773 + inSlope: 0.2621115 + outSlope: 0.2621115 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: -0.035495162 + inSlope: 0.53774005 + outSlope: 0.53774005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.022549152 + inSlope: 0.6520976 + outSlope: 0.6520976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.008878946 + inSlope: 0.6250745 + outSlope: 0.6250745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.0029640794 + inSlope: 0.49620318 + outSlope: 0.49620318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.011374235 + inSlope: 0.31294656 + outSlope: 0.31294656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.015737414 + inSlope: 0.120522365 + outSlope: 0.120522365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.016293526 + inSlope: -0.04540556 + outSlope: -0.04540556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.013884127 + inSlope: -0.16256514 + outSlope: -0.16256514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.009658217 + inSlope: -0.22263518 + outSlope: -0.22263518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.004796982 + inSlope: -0.22925332 + outSlope: -0.22925332 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.00030094385 + inSlope: -0.19444063 + outSlope: -0.19444063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: -0.0031393766 + inSlope: -0.1344553 + outSlope: -0.1344553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: -0.0051870346 + inSlope: -0.06591275 + outSlope: -0.06591275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: -0.005829692 + inSlope: -0.002815486 + outSlope: -0.002815486 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.0053019524 + inSlope: 0.04522302 + outSlope: 0.04522302 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.0039838552 + inSlope: 0.07357356 + outSlope: 0.07357356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.0022989511 + inSlope: 0.082165934 + outSlope: 0.082165934 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.0006301403 + inSlope: 0.07437515 + outSlope: 0.07437515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.000736773 + inSlope: 0.055592712 + outSlope: 0.055592712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0016389489 + inSlope: 0.031791046 + outSlope: 0.031791046 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0020343661 + inSlope: 0.008334015 + outSlope: 0.008334015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0019791126 + inSlope: -0.010790264 + outSlope: -0.010790264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0015939474 + inSlope: -0.023327023 + outSlope: -0.023327023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.001026988 + inSlope: -0.028725807 + outSlope: -0.028725807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.00042146444 + inSlope: -0.02780731 + outSlope: -0.02780731 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.000108003616 + inSlope: -0.02228878 + outSlope: -0.02228878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: -0.00048828125 + inSlope: -0.018633613 + outSlope: -0.018633613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1.0004883 + inSlope: -0.018633604 + outSlope: -0.018633604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.000108 + inSlope: -0.02228877 + outSlope: -0.02228877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99957854 + inSlope: -0.027807295 + outSlope: -0.027807295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.998973 + inSlope: -0.028725833 + outSlope: -0.028725833 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99840605 + inSlope: -0.023327053 + outSlope: -0.023327053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9980209 + inSlope: -0.010790256 + outSlope: -0.010790256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99796563 + inSlope: 0.008334008 + outSlope: 0.008334008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99836105 + inSlope: 0.03179104 + outSlope: 0.03179104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9992632 + inSlope: 0.05559269 + outSlope: 0.05559269 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.0006301 + inSlope: 0.07437523 + outSlope: 0.07437523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.002299 + inSlope: 0.08216602 + outSlope: 0.08216602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0039839 + inSlope: 0.073573545 + outSlope: 0.073573545 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.005302 + inSlope: 0.045222998 + outSlope: 0.045222998 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 1.0058297 + inSlope: -0.0028154636 + outSlope: -0.0028154636 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 1.005187 + inSlope: -0.06591273 + outSlope: -0.06591273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 1.0031394 + inSlope: -0.13445553 + outSlope: -0.13445553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.99969906 + inSlope: -0.19444071 + outSlope: -0.19444071 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.995203 + inSlope: -0.22925314 + outSlope: -0.22925314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9903418 + inSlope: -0.22263518 + outSlope: -0.22263518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9861159 + inSlope: -0.16256505 + outSlope: -0.16256505 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9837065 + inSlope: -0.04540547 + outSlope: -0.04540547 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.9842626 + inSlope: 0.12052268 + outSlope: 0.12052268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.98862576 + inSlope: 0.31294656 + outSlope: 0.31294656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.9970359 + inSlope: 0.4962029 + outSlope: 0.4962029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.008879 + inSlope: 0.6250745 + outSlope: 0.6250745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.0225492 + inSlope: 0.6520976 + outSlope: 0.6520976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 1.0354952 + inSlope: 0.53774035 + outSlope: 0.53774035 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0444977 + inSlope: 0.2621088 + outSlope: 0.2621088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.0461935 + inSlope: -0.1640285 + outSlope: -0.1640285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.0378027 + inSlope: -0.6917218 + outSlope: -0.6917218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.01796 + inSlope: -1.2326267 + outSlope: -1.2326267 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9874914 + inSlope: -1.6664568 + outSlope: -1.6664568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.94994134 + inSlope: -1.8582633 + outSlope: -1.8582633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.911644 + inSlope: -1.6847174 + outSlope: -1.6847174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.8811773 + inSlope: -1.0663297 + outSlope: -1.0663297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.86812025 + inSlope: -0.00009346008 + outSlope: -0.00009346008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.8811735 + inSlope: 1.4148183 + outSlope: 1.4148183 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9258679 + inSlope: 2.9664798 + outSlope: 2.9664798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0022542 + inSlope: 4.342172 + outSlope: 4.342172 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.1030993 + inSlope: 5.1674433 + outSlope: 5.1674433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.2131705 + inSlope: 5.072199 + outSlope: 5.072199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.3101281 + inSlope: 3.777381 + outSlope: 3.777381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 1.3673493 + inSlope: 1.1890028 + outSlope: 1.1890028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 1.3586588 + inSlope: -2.5196617 + outSlope: -2.5196617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 1.264506 + inSlope: -6.86061 + outSlope: -6.86061 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 1.078634 + inSlope: -11.04062 + outSlope: -11.04062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.81386787 + inSlope: -14.044155 + outSlope: -14.044155 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.5054027 + inSlope: -14.794611 + outSlope: -14.794611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.21000648 + inSlope: -12.382372 + outSlope: -12.382372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -10.290322 + outSlope: -10.290322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -12.382375 + outSlope: -12.382375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.7472985 + inSlope: -13.213264 + outSlope: -13.213264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.4606831 + inSlope: -10.452383 + outSlope: -10.452383 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.3206706 + inSlope: -2.835805 + outSlope: -2.835805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.34493595 + inSlope: 3.1306028 + outSlope: 3.1306028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.44845033 + inSlope: 4.7071867 + outSlope: 4.7071867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.53706604 + inSlope: 2.8784947 + outSlope: 2.8784947 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.5659399 + inSlope: 0.17424273 + outSlope: 0.17424273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.544178 + inSlope: -1.462297 + outSlope: -1.462297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.5062543 + inSlope: -1.5454438 + outSlope: -1.5454438 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.48109865 + inSlope: -0.6983278 + outSlope: -0.6983278 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.47775114 + inSlope: 0.18685582 + outSlope: 0.18685582 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.48872542 + inSlope: 0.5814065 + outSlope: 0.5814065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.501482 + inSlope: 0.46901044 + outSlope: 0.46901044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.5078687 + inSlope: 0.13377042 + outSlope: 0.13377042 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.50694203 + inSlope: -0.13402036 + outSlope: -0.13402036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.5023985 + inSlope: -0.20853715 + outSlope: -0.20853715 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.4984303 + inSlope: -0.13017666 + outSlope: -0.13017666 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.49708515 + inSlope: -0.010344867 + outSlope: -0.010344867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.49800807 + inSlope: 0.06369448 + outSlope: 0.06369448 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.49968493 + inSlope: 0.06887859 + outSlope: 0.06887859 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.50081944 + inSlope: 0.031963363 + outSlope: 0.031963363 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.50098956 + inSlope: -0.0074957777 + outSlope: -0.0074957777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.5005135 + inSlope: -0.02556717 + outSlope: -0.02556717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.499946 + inSlope: -0.011257565 + outSlope: -0.011257565 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.500054 + inSlope: -0.011257565 + outSlope: -0.011257565 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.4994865 + inSlope: -0.025567185 + outSlope: -0.025567185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.49901044 + inSlope: -0.0074958066 + outSlope: -0.0074958066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.49918056 + inSlope: 0.031963352 + outSlope: 0.031963352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.50031507 + inSlope: 0.06887865 + outSlope: 0.06887865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.5019919 + inSlope: 0.06369454 + outSlope: 0.06369454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.50291485 + inSlope: -0.010344867 + outSlope: -0.010344867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.5015697 + inSlope: -0.13017681 + outSlope: -0.13017681 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.4976015 + inSlope: -0.20853695 + outSlope: -0.20853695 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.49305797 + inSlope: -0.13402003 + outSlope: -0.13402003 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.4921313 + inSlope: 0.13377064 + outSlope: 0.13377064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.498518 + inSlope: 0.46901065 + outSlope: 0.46901065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.5112746 + inSlope: 0.5814067 + outSlope: 0.5814067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.52224886 + inSlope: 0.18685746 + outSlope: 0.18685746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.5189014 + inSlope: -0.6983264 + outSlope: -0.6983264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.49374568 + inSlope: -1.5454446 + outSlope: -1.5454446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.455822 + inSlope: -1.4622976 + outSlope: -1.4622976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.4340601 + inSlope: 0.17424327 + outSlope: 0.17424327 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.46293396 + inSlope: 2.878496 + outSlope: 2.878496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.5515497 + inSlope: 4.7071867 + outSlope: 4.7071867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.6550639 + inSlope: 3.1306014 + outSlope: 3.1306014 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.67932934 + inSlope: -2.8358114 + outSlope: -2.8358114 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.53931665 + inSlope: -10.452391 + outSlope: -10.452391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.25270134 + inSlope: -13.213264 + outSlope: -13.213264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -12.382372 + outSlope: -12.382372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.031571984 + outSlope: 0.031571984 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.0006443 + inSlope: 0.060973942 + outSlope: 0.060973942 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 1.0024887 + inSlope: 0.11653303 + outSlope: 0.11653303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 1.0054008 + inSlope: 0.16559958 + outSlope: 0.16559958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 1.0092479 + inSlope: 0.20816478 + outSlope: 0.20816478 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 1.0138973 + inSlope: 0.24423163 + outSlope: 0.24423163 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 1.0192165 + inSlope: 0.273803 + outSlope: 0.273803 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 1.0250729 + inSlope: 0.296876 + outSlope: 0.296876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.0313339 + inSlope: 0.31345055 + outSlope: 0.31345055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.0378668 + inSlope: 0.3235295 + outSlope: 0.3235295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.0445392 + inSlope: 0.32711616 + outSlope: 0.32711616 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0512185 + inSlope: 0.32419845 + outSlope: 0.32419845 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.0577718 + inSlope: 0.31478527 + outSlope: 0.31478527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 1.0640669 + inSlope: 0.29887652 + outSlope: 0.29887652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 1.0699708 + inSlope: 0.27646652 + outSlope: 0.27646652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 1.0753512 + inSlope: 0.2475642 + outSlope: 0.2475642 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 1.0800755 + inSlope: 0.2121631 + outSlope: 0.2121631 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 1.084011 + inSlope: 0.17026085 + outSlope: 0.17026085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 1.0870249 + inSlope: 0.12186617 + outSlope: 0.12186617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.0889851 + inSlope: 0.06697291 + outSlope: 0.06697291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.0897585 + inSlope: 0.0055783736 + outSlope: 0.0055783736 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.0892128 + inSlope: -0.06230578 + outSlope: -0.06230578 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0872154 + inSlope: -0.13669115 + outSlope: -0.13669115 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 1.0836335 + inSlope: -0.21757796 + outSlope: -0.21757796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.0783347 + inSlope: -0.30495748 + outSlope: -0.30495748 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.0711863 + inSlope: -0.39883232 + outSlope: -0.39883232 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 1.0620558 + inSlope: -0.4992085 + outSlope: -0.4992085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0508105 + inSlope: -0.6060821 + outSlope: -0.6060821 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.0373178 + inSlope: -0.7194493 + outSlope: -0.7194493 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.0214452 + inSlope: -0.8393158 + outSlope: -0.8393158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.00306 + inSlope: -0.9656812 + outSlope: -0.9656812 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9820296 + inSlope: -1.0985435 + outSlope: -1.0985435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9582215 + inSlope: -1.2379013 + outSlope: -1.2379013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.93150306 + inSlope: -1.3837569 + outSlope: -1.3837569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.90174156 + inSlope: -1.5361099 + outSlope: -1.5361099 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.86880463 + inSlope: -1.6949593 + outSlope: -1.6949593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.8325596 + inSlope: -1.8603078 + outSlope: -1.8603078 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.79287374 + inSlope: -2.0321531 + outSlope: -2.0321531 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.7496146 + inSlope: -2.2104955 + outSlope: -2.2104955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.7026495 + inSlope: -2.3953357 + outSlope: -2.3953357 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.6518457 + inSlope: -2.5866718 + outSlope: -2.5866718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.59707093 + inSlope: -2.7845073 + outSlope: -2.7845073 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.5381924 + inSlope: -2.9888387 + outSlope: -2.9888387 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.47507757 + inSlope: -3.1996675 + outSlope: -3.1996675 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.4075938 + inSlope: -3.4169927 + outSlope: -3.4169927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.33560854 + inSlope: -3.6408157 + outSlope: -3.6408157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.25898892 + inSlope: -3.8711379 + outSlope: -3.8711379 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.17760277 + inSlope: -4.107955 + outSlope: -4.107955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.091317356 + inSlope: -4.3512697 + outSlope: -4.3512697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -4.4745526 + outSlope: -4.4745526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -4.4745507 + outSlope: -4.4745507 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.90868264 + inSlope: -4.351268 + outSlope: -4.351268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.82239723 + inSlope: -4.107953 + outSlope: -4.107953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.7410111 + inSlope: -3.8711414 + outSlope: -3.8711414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.66439146 + inSlope: -3.640819 + outSlope: -3.640819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.5924062 + inSlope: -3.4169908 + outSlope: -3.4169908 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.52492243 + inSlope: -3.1996655 + outSlope: -3.1996655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.4618076 + inSlope: -2.9888377 + outSlope: -2.9888377 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.40292907 + inSlope: -2.7845092 + outSlope: -2.7845092 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.3481542 + inSlope: -2.5866737 + outSlope: -2.5866737 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.29735053 + inSlope: -2.3953354 + outSlope: -2.3953354 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.2503854 + inSlope: -2.210495 + outSlope: -2.210495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.20712626 + inSlope: -2.0321524 + outSlope: -2.0321524 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.16744041 + inSlope: -1.8603065 + outSlope: -1.8603065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.13119537 + inSlope: -1.694958 + outSlope: -1.694958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.098258436 + inSlope: -1.5361106 + outSlope: -1.5361106 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.068497 + inSlope: -1.3837581 + outSlope: -1.3837581 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.041778505 + inSlope: -1.2379018 + outSlope: -1.2379018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.017970383 + inSlope: -1.0985435 + outSlope: -1.0985435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.0030599833 + inSlope: -0.9656805 + outSlope: -0.9656805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.021445155 + inSlope: -0.83931506 + outSlope: -0.83931506 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.037317753 + inSlope: -0.71945024 + outSlope: -0.71945024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.050810456 + inSlope: -0.6060827 + outSlope: -0.6060827 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: -0.062055826 + inSlope: -0.4992081 + outSlope: -0.4992081 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.071186304 + inSlope: -0.39883232 + outSlope: -0.39883232 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.07833469 + inSlope: -0.30495748 + outSlope: -0.30495748 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: -0.08363354 + inSlope: -0.2175781 + outSlope: -0.2175781 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.08721542 + inSlope: -0.13669406 + outSlope: -0.13669406 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.089212894 + inSlope: -0.062305637 + outSlope: -0.062305637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.089758515 + inSlope: 0.005581322 + outSlope: 0.005581322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.088985085 + inSlope: 0.06697294 + outSlope: 0.06697294 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: -0.08702493 + inSlope: 0.12186617 + outSlope: 0.12186617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: -0.08401096 + inSlope: 0.170261 + outSlope: 0.170261 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: -0.0800755 + inSlope: 0.21216291 + outSlope: 0.21216291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: -0.07535124 + inSlope: 0.24756385 + outSlope: 0.24756385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: -0.069970846 + inSlope: 0.27646673 + outSlope: 0.27646673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: -0.06406689 + inSlope: 0.29887673 + outSlope: 0.29887673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.057771802 + inSlope: 0.3147854 + outSlope: 0.3147854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.05121851 + inSlope: 0.32419857 + outSlope: 0.32419857 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.044539213 + inSlope: 0.3271158 + outSlope: 0.3271158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.03786683 + inSlope: 0.32352927 + outSlope: 0.32352927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.031333923 + inSlope: 0.31345066 + outSlope: 0.31345066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: -0.025072932 + inSlope: 0.2968761 + outSlope: 0.2968761 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: -0.019216537 + inSlope: 0.2738031 + outSlope: 0.2738031 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: -0.0138973 + inSlope: 0.24423176 + outSlope: 0.24423176 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: -0.009247899 + inSlope: 0.20816463 + outSlope: 0.20816463 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: -0.005400777 + inSlope: 0.16559939 + outSlope: 0.16559939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: -0.0024887323 + inSlope: 0.1165331 + outSlope: 0.1165331 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.0006443262 + inSlope: 0.060973972 + outSlope: 0.060973972 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0.031572 + outSlope: 0.031572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.060976863 + outSlope: 0.060976863 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.0012444 + inSlope: 0.1132853 + outSlope: 0.1132853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 1.0046239 + inSlope: 0.20491415 + outSlope: 0.20491415 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 1.0096083 + inSlope: 0.27055526 + outSlope: 0.27055526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 1.015667 + inSlope: 0.31020275 + outSlope: 0.31020275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 1.0222696 + inSlope: 0.32386544 + outSlope: 0.32386544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 1.028886 + inSlope: 0.31153747 + outSlope: 0.31153747 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 1.0349854 + inSlope: 0.27321887 + outSlope: 0.27321887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.0400378 + inSlope: 0.20891252 + outSlope: 0.20891252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.0435125 + inSlope: 0.11861834 + outSlope: 0.11861834 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.0448793 + inSlope: 0.002333559 + outSlope: 0.002333559 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0436077 + inSlope: -0.13994186 + outSlope: -0.13994186 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.0391674 + inSlope: -0.30820513 + outSlope: -0.30820513 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 1.0310279 + inSlope: -0.5024587 + outSlope: -0.5024587 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 1.0186589 + inSlope: -0.7227005 + outSlope: -0.7227005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 1.0015299 + inSlope: -0.96892893 + outSlope: -0.96892893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9791108 + inSlope: -1.241148 + outSlope: -1.241148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9508708 + inSlope: -1.5393589 + outSlope: -1.5393589 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9162798 + inSlope: -1.8635569 + outSlope: -1.8635569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8748073 + inSlope: -2.2137444 + outSlope: -2.2137444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.82592285 + inSlope: -2.5899215 + outSlope: -2.5899215 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.7690962 + inSlope: -2.992088 + outSlope: -2.992088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.70379686 + inSlope: -3.4202423 + outSlope: -3.4202423 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.6294944 + inSlope: -3.874384 + outSlope: -3.874384 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5456587 + inSlope: -4.291254 + outSlope: -4.291254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.4543413 + inSlope: -4.291254 + outSlope: -4.291254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.37050557 + inSlope: -3.874385 + outSlope: -3.874385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.2962032 + inSlope: -3.4202418 + outSlope: -3.4202418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.23090374 + inSlope: -2.9920864 + outSlope: -2.9920864 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.1740771 + inSlope: -2.589922 + outSlope: -2.589922 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.1251927 + inSlope: -2.2137446 + outSlope: -2.2137446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.08372021 + inSlope: -1.8635569 + outSlope: -1.8635569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.049129188 + inSlope: -1.5393584 + outSlope: -1.5393584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.020889282 + inSlope: -1.2411504 + outSlope: -1.2411504 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: -0.0015300512 + inSlope: -0.9689287 + outSlope: -0.9689287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: -0.018658876 + inSlope: -0.722698 + outSlope: -0.722698 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: -0.031027913 + inSlope: -0.50245917 + outSlope: -0.50245917 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.039167404 + inSlope: -0.30820522 + outSlope: -0.30820522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.04360771 + inSlope: -0.13994193 + outSlope: -0.13994193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.044879317 + inSlope: 0.0023334846 + outSlope: 0.0023334846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.043512464 + inSlope: 0.118618324 + outSlope: 0.118618324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.04003775 + inSlope: 0.20891258 + outSlope: 0.20891258 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: -0.034985423 + inSlope: 0.273219 + outSlope: 0.273219 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: -0.02888596 + inSlope: 0.31153765 + outSlope: 0.31153765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: -0.022269607 + inSlope: 0.32386562 + outSlope: 0.32386562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: -0.015666962 + inSlope: 0.31020248 + outSlope: 0.31020248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: -0.009608269 + inSlope: 0.27055496 + outSlope: 0.27055496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: -0.00462389 + inSlope: 0.20491424 + outSlope: 0.20491424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.0012444258 + inSlope: 0.113285355 + outSlope: 0.113285355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0.060976893 + outSlope: 0.060976893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.055123925 + outSlope: -0.055123925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.998875 + inSlope: -0.031748682 + outSlope: -0.031748682 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99870414 + inSlope: -0.009011596 + outSlope: -0.009011596 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9985072 + inSlope: -0.010382831 + outSlope: -0.010382831 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99828035 + inSlope: -0.011959969 + outSlope: -0.011959969 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.99801904 + inSlope: -0.0137766 + outSlope: -0.0137766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99771804 + inSlope: -0.01586923 + outSlope: -0.01586923 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9973713 + inSlope: -0.018281672 + outSlope: -0.018281672 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.99697185 + inSlope: -0.021060647 + outSlope: -0.021060647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9965117 + inSlope: -0.024260186 + outSlope: -0.024260186 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.99598163 + inSlope: -0.027946029 + outSlope: -0.027946029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.99537104 + inSlope: -0.03219262 + outSlope: -0.03219262 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.99466765 + inSlope: -0.037083216 + outSlope: -0.037083216 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.99385744 + inSlope: -0.042718545 + outSlope: -0.042718545 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.99292403 + inSlope: -0.049211107 + outSlope: -0.049211107 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9918488 + inSlope: -0.05668795 + outSlope: -0.05668795 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.99061024 + inSlope: -0.0653023 + outSlope: -0.0653023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9891834 + inSlope: -0.07522513 + outSlope: -0.07522513 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9875398 + inSlope: -0.086656526 + outSlope: -0.086656526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9856464 + inSlope: -0.0998241 + outSlope: -0.0998241 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9834654 + inSlope: -0.11499093 + outSlope: -0.11499093 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.9809529 + inSlope: -0.13246512 + outSlope: -0.13246512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.97805864 + inSlope: -0.15259399 + outSlope: -0.15259399 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.9747246 + inSlope: -0.17578086 + outSlope: -0.17578086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.9708839 + inSlope: -0.20249012 + outSlope: -0.20249012 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.9664597 + inSlope: -0.23325896 + outSlope: -0.23325896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.96136314 + inSlope: -0.2687052 + outSlope: -0.2687052 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.95549214 + inSlope: -0.3095351 + outSlope: -0.3095351 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.94872904 + inSlope: -0.35656887 + outSlope: -0.35656887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9409383 + inSlope: -0.4107514 + outSlope: -0.4107514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9319637 + inSlope: -0.4731667 + outSlope: -0.4731667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9216254 + inSlope: -0.5450653 + outSlope: -0.5450653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9097161 + inSlope: -0.62789 + outSlope: -0.62789 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8959972 + inSlope: -0.72329843 + outSlope: -0.72329843 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.8801937 + inSlope: -0.8332061 + outSlope: -0.8332061 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.8619888 + inSlope: -0.959815 + outSlope: -0.959815 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.8410176 + inSlope: -1.105661 + outSlope: -1.105661 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.8168598 + inSlope: -1.2736688 + outSlope: -1.2736688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.78903115 + inSlope: -1.4672058 + outSlope: -1.4672058 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.75697386 + inSlope: -1.6901536 + outSlope: -1.6901536 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.7200452 + inSlope: -1.9469762 + outSlope: -1.9469762 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.6775054 + inSlope: -2.242824 + outSlope: -2.242824 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.6285014 + inSlope: -2.5836291 + outSlope: -2.5836291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.57205117 + inSlope: -2.9762173 + outSlope: -2.9762173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.5070232 + inSlope: -3.428462 + outSlope: -3.428462 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.432114 + inSlope: -3.9494276 + outSlope: -3.9494276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.34582192 + inSlope: -4.549556 + outSlope: -4.549556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.2464177 + inSlope: -5.2408733 + outSlope: -5.2408733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.13190883 + inSlope: -6.037236 + outSlope: -6.037236 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -6.463536 + outSlope: -6.463536 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -6.463533 + outSlope: -6.463533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.86809117 + inSlope: -6.037234 + outSlope: -6.037234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.7535823 + inSlope: -5.2408705 + outSlope: -5.2408705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.6541781 + inSlope: -4.5495596 + outSlope: -4.5495596 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.567886 + inSlope: -3.9494317 + outSlope: -3.9494317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.49297678 + inSlope: -3.4284601 + outSlope: -3.4284601 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.42794883 + inSlope: -2.9762158 + outSlope: -2.9762158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.37149858 + inSlope: -2.5836282 + outSlope: -2.5836282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.32249463 + inSlope: -2.242826 + outSlope: -2.242826 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.27995467 + inSlope: -1.9469774 + outSlope: -1.9469774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.24302614 + inSlope: -1.6901526 + outSlope: -1.6901526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.21096885 + inSlope: -1.4672053 + outSlope: -1.4672053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.18314022 + inSlope: -1.2736683 + outSlope: -1.2736683 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.1589824 + inSlope: -1.1056603 + outSlope: -1.1056603 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.13801122 + inSlope: -0.9598143 + outSlope: -0.9598143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.11980629 + inSlope: -0.83320725 + outSlope: -0.83320725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.104002774 + inSlope: -0.72329915 + outSlope: -0.72329915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.09028387 + inSlope: -0.6278895 + outSlope: -0.6278895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.078374624 + inSlope: -0.5450653 + outSlope: -0.5450653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.06803632 + inSlope: -0.4731664 + outSlope: -0.4731664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.059061706 + inSlope: -0.4107511 + outSlope: -0.4107511 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.05127096 + inSlope: -0.35656935 + outSlope: -0.35656935 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.04450786 + inSlope: -0.30953535 + outSlope: -0.30953535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.038636863 + inSlope: -0.26870495 + outSlope: -0.26870495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.03354031 + inSlope: -0.23325896 + outSlope: -0.23325896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.029116094 + inSlope: -0.20249012 + outSlope: -0.20249012 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.02527541 + inSlope: -0.17578098 + outSlope: -0.17578098 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.021941364 + inSlope: -0.1525939 + outSlope: -0.1525939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.019047081 + inSlope: -0.13246492 + outSlope: -0.13246492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.016534626 + inSlope: -0.11499101 + outSlope: -0.11499101 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.014353573 + inSlope: -0.099824175 + outSlope: -0.099824175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.012460172 + inSlope: -0.086656526 + outSlope: -0.086656526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.010816574 + inSlope: -0.075225174 + outSlope: -0.075225174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.009389758 + inSlope: -0.06530225 + outSlope: -0.06530225 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.008151174 + inSlope: -0.05668786 + outSlope: -0.05668786 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.0070759654 + inSlope: -0.049211137 + outSlope: -0.049211137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.0061425567 + inSlope: -0.04271858 + outSlope: -0.04271858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.0053323507 + inSlope: -0.037083223 + outSlope: -0.037083223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.0046289563 + inSlope: -0.032192633 + outSlope: -0.032192633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.0040183663 + inSlope: -0.027946 + outSlope: -0.027946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.0034883022 + inSlope: -0.024260167 + outSlope: -0.024260167 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.0030281544 + inSlope: -0.021060657 + outSlope: -0.021060657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.002628684 + inSlope: -0.018281676 + outSlope: -0.018281676 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0022819638 + inSlope: -0.015869237 + outSlope: -0.015869237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0019809604 + inSlope: -0.013776608 + outSlope: -0.013776608 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0017196536 + inSlope: -0.01195996 + outSlope: -0.01195996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0014927983 + inSlope: -0.01038282 + outSlope: -0.01038282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0012958646 + inSlope: -0.0090116 + outSlope: -0.0090116 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.0011249781 + inSlope: -0.031748697 + outSlope: -0.031748697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.05512395 + outSlope: -0.05512395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.031750143 + outSlope: -0.031750143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.99935204 + inSlope: -0.021065027 + outSlope: -0.021065027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9991402 + inSlope: -0.012078255 + outSlope: -0.012078255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99885905 + inSlope: -0.016029865 + outSlope: -0.016029865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9984859 + inSlope: -0.021270929 + outSlope: -0.021270929 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.99799085 + inSlope: -0.028226405 + outSlope: -0.028226405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9973338 + inSlope: -0.037457045 + outSlope: -0.037457045 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.996462 + inSlope: -0.049703248 + outSlope: -0.049703248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9953051 + inSlope: -0.06595653 + outSlope: -0.06595653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9937699 + inSlope: -0.087523885 + outSlope: -0.087523885 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9917327 + inSlope: -0.11614315 + outSlope: -0.11614315 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.98902935 + inSlope: -0.15412298 + outSlope: -0.15412298 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.985442 + inSlope: -0.20452136 + outSlope: -0.20452136 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.98068154 + inSlope: -0.27139777 + outSlope: -0.27139777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9743645 + inSlope: -0.36014253 + outSlope: -0.36014253 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.96598184 + inSlope: -0.47790837 + outSlope: -0.47790837 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.95485806 + inSlope: -0.6341819 + outSlope: -0.6341819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.94009686 + inSlope: -0.8415568 + outSlope: -0.8415568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9205088 + inSlope: -1.1167419 + outSlope: -1.1167419 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8945156 + inSlope: -1.4819113 + outSlope: -1.4819113 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.8600226 + inSlope: -1.966489 + outSlope: -1.966489 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8142507 + inSlope: -2.6095207 + outSlope: -2.6095207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.7535116 + inSlope: -3.4628234 + outSlope: -3.4628234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.6729109 + inSlope: -4.5951495 + outSlope: -4.5951495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.56595445 + inSlope: -5.8522043 + outSlope: -5.8522043 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.43404555 + inSlope: -5.8522043 + outSlope: -5.8522043 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.32708907 + inSlope: -4.5951495 + outSlope: -4.5951495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.24648851 + inSlope: -3.4628234 + outSlope: -3.4628234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.18574923 + inSlope: -2.6095207 + outSlope: -2.6095207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.13997734 + inSlope: -1.9664887 + outSlope: -1.9664887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.105484426 + inSlope: -1.4819111 + outSlope: -1.4819111 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.0794912 + inSlope: -1.1167419 + outSlope: -1.1167419 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.059903145 + inSlope: -0.8415574 + outSlope: -0.8415574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.045141935 + inSlope: -0.6341817 + outSlope: -0.6341817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.03401816 + inSlope: -0.4779076 + outSlope: -0.4779076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.02563548 + inSlope: -0.36014277 + outSlope: -0.36014277 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.019318461 + inSlope: -0.27139798 + outSlope: -0.27139798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.014558017 + inSlope: -0.20452142 + outSlope: -0.20452142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.010970652 + inSlope: -0.15412305 + outSlope: -0.15412305 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.008267283 + inSlope: -0.11614305 + outSlope: -0.11614305 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.006230116 + inSlope: -0.0875238 + outSlope: -0.0875238 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.004694879 + inSlope: -0.06595656 + outSlope: -0.06595656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0035380125 + inSlope: -0.049703263 + outSlope: -0.049703263 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0026661754 + inSlope: -0.037457064 + outSlope: -0.037457064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0020091534 + inSlope: -0.028226418 + outSlope: -0.028226418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0015140772 + inSlope: -0.021270914 + outSlope: -0.021270914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0011409521 + inSlope: -0.016029846 + outSlope: -0.016029846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.000859797 + inSlope: -0.012078261 + outSlope: -0.012078261 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.0006479621 + inSlope: -0.021065036 + outSlope: -0.021065036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.031750157 + outSlope: -0.031750157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.05231428 + outSlope: 0.05231428 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.0010676 + inSlope: 0.025444508 + outSlope: 0.025444508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 1.0010386 + inSlope: -0.005233764 + outSlope: -0.005233764 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 1.000854 + inSlope: -0.013458252 + outSlope: -0.013458252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 1.0004892 + inSlope: -0.022478607 + outSlope: -0.022478607 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9999365 + inSlope: -0.031294525 + outSlope: -0.031294525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9992119 + inSlope: -0.03859901 + outSlope: -0.03859901 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99836105 + inSlope: -0.04286898 + outSlope: -0.04286898 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.99746215 + inSlope: -0.042514123 + outSlope: -0.042514123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9966258 + inSlope: -0.036069743 + outSlope: -0.036069743 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9959899 + inSlope: -0.022452325 + outSlope: -0.022452325 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.99570936 + inSlope: -0.0012295889 + outSlope: -0.0012295889 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.99593973 + inSlope: 0.027106352 + outSlope: 0.027106352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.99681574 + inSlope: 0.060899436 + outSlope: 0.060899436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9984254 + inSlope: 0.09719117 + outSlope: 0.09719117 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 1.0007827 + inSlope: 0.13169846 + outSlope: 0.13169846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 1.0038009 + inSlope: 0.15898724 + outSlope: 0.15898724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 1.007272 + inSlope: 0.172869 + outSlope: 0.172869 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 1.0108567 + inSlope: 0.16701326 + outSlope: 0.16701326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.0140889 + inSlope: 0.13578288 + outSlope: 0.13578288 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.0163989 + inSlope: 0.07526161 + outSlope: 0.07526161 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.0171608 + inSlope: -0.015613681 + outSlope: -0.015613681 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0157616 + inSlope: -0.13401291 + outSlope: -0.13401291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 1.0116909 + inSlope: -0.27231055 + outSlope: -0.27231055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.0046469 + inSlope: -0.41757548 + outSlope: -0.41757548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.99464697 + inSlope: -0.55168927 + outSlope: -0.55168927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.982129 + inSlope: -0.65216917 + outSlope: -0.65216917 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.96802783 + inSlope: -0.693901 + outSlope: -0.693901 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.95380646 + inSlope: -0.65181327 + outSlope: -0.65181327 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9414232 + inSlope: -0.5044087 + outSlope: -0.5044087 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.93321836 + inSlope: -0.23795532 + outSlope: -0.23795532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9317107 + inSlope: 0.14904992 + outSlope: 0.14904992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.939302 + inSlope: 0.64167094 + outSlope: 0.64167094 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.95790136 + inSlope: 1.2052464 + outSlope: 1.2052464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9884958 + inSlope: 1.7838216 + outSlope: 1.7838216 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 1.0307105 + inSlope: 2.3010292 + outSlope: 2.3010292 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 1.0824153 + inSlope: 2.664154 + outSlope: 2.664154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.1394514 + inSlope: 2.771814 + outSlope: 2.771814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.1955506 + inSlope: 2.5253482 + outSlope: 2.5253482 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.2425268 + inSlope: 1.8435807 + outSlope: 1.8435807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.2707988 + inSlope: 0.6799263 + outSlope: 0.6799263 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.2702789 + inSlope: -0.959745 + outSlope: -0.959745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 1.2316256 + inSlope: -3.0007682 + outSlope: -3.0007682 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 1.1477987 + inSlope: -5.2877083 + outSlope: -5.2877083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 1.0158008 + inSlope: -7.579758 + outSlope: -7.579758 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.8384209 + inSlope: -9.556637 + outSlope: -9.556637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.6257336 + inSlope: -10.837618 + outSlope: -10.837618 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.39606875 + inSlope: -11.01522 + outSlope: -11.01522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.17613304 + inSlope: -9.70369 + outSlope: -9.70369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -8.630523 + outSlope: -8.630523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -8.630519 + outSlope: -8.630519 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.82386696 + inSlope: -9.703685 + outSlope: -9.703685 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.60393125 + inSlope: -11.015214 + outSlope: -11.015214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.3742664 + inSlope: -10.837628 + outSlope: -10.837628 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.16157907 + inSlope: -9.556646 + outSlope: -9.556646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: -0.015800834 + inSlope: -7.579754 + outSlope: -7.579754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: -0.14779866 + inSlope: -5.2877054 + outSlope: -5.2877054 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: -0.23162556 + inSlope: -3.0007668 + outSlope: -3.0007668 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.27027893 + inSlope: -0.95974207 + outSlope: -0.95974207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.27079868 + inSlope: 0.67992777 + outSlope: 0.67992777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.24252677 + inSlope: 1.8435793 + outSlope: 1.8435793 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.19555056 + inSlope: 2.5253472 + outSlope: 2.5253472 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.13945138 + inSlope: 2.7718132 + outSlope: 2.7718132 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: -0.08241534 + inSlope: 2.6641521 + outSlope: 2.6641521 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: -0.030710459 + inSlope: 2.3010273 + outSlope: 2.3010273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.011504173 + inSlope: 1.7838223 + outSlope: 1.7838223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.04209858 + inSlope: 1.205248 + outSlope: 1.205248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.060697973 + inSlope: 0.6416718 + outSlope: 0.6416718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.06828928 + inSlope: 0.14904992 + outSlope: 0.14904992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.06678164 + inSlope: -0.23795503 + outSlope: -0.23795503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.058576822 + inSlope: -0.5044084 + outSlope: -0.5044084 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.04619354 + inSlope: -0.65181434 + outSlope: -0.65181434 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.03197217 + inSlope: -0.69390154 + outSlope: -0.69390154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.017871022 + inSlope: -0.65216863 + outSlope: -0.65216863 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.0053530335 + inSlope: -0.55168927 + outSlope: -0.55168927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.0046468973 + inSlope: -0.41757548 + outSlope: -0.41757548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: -0.011690855 + inSlope: -0.27231067 + outSlope: -0.27231067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.015761614 + inSlope: -0.13401589 + outSlope: -0.13401589 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.017160892 + inSlope: -0.015613584 + outSlope: -0.015613584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.016398907 + inSlope: 0.07526461 + outSlope: 0.07526461 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.014088869 + inSlope: 0.13578296 + outSlope: 0.13578296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: -0.010856748 + inSlope: 0.16701326 + outSlope: 0.16701326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: -0.007272005 + inSlope: 0.17286912 + outSlope: 0.17286912 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: -0.003800869 + inSlope: 0.15898713 + outSlope: 0.15898713 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: -0.0007827282 + inSlope: 0.13169825 + outSlope: 0.13169825 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.0015745759 + inSlope: 0.09719123 + outSlope: 0.09719123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.003184259 + inSlope: 0.060899496 + outSlope: 0.060899496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.0040602684 + inSlope: 0.027106356 + outSlope: 0.027106356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.0042906404 + inSlope: -0.0012295847 + outSlope: -0.0012295847 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.0040100813 + inSlope: -0.02245229 + outSlope: -0.02245229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.003374219 + inSlope: -0.03606972 + outSlope: -0.03606972 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.0025378466 + inSlope: -0.042514138 + outSlope: -0.042514138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0016389489 + inSlope: -0.042868994 + outSlope: -0.042868994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0007880926 + inSlope: -0.038599033 + outSlope: -0.038599033 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.00006347895 + inSlope: -0.03129454 + outSlope: -0.03129454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: -0.0004892349 + inSlope: -0.022478595 + outSlope: -0.022478595 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: -0.00085401535 + inSlope: -0.013458233 + outSlope: -0.013458233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: -0.0010385513 + inSlope: -0.0052337674 + outSlope: -0.0052337674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.0010676384 + inSlope: 0.02544452 + outSlope: 0.02544452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0.052314308 + outSlope: 0.052314308 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.025444508 + outSlope: 0.025444508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.0005193 + inSlope: 0.005993128 + outSlope: 0.005993128 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 1.0002446 + inSlope: -0.022376386 + outSlope: -0.022376386 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99960595 + inSlope: -0.03708175 + outSlope: -0.03708175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9987311 + inSlope: -0.03946936 + outSlope: -0.03946936 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.99799496 + inSlope: -0.018649664 + outSlope: -0.018649664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99796987 + inSlope: 0.029835664 + outSlope: 0.029835664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99921274 + inSlope: 0.096298955 + outSlope: 0.096298955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.0019004 + inSlope: 0.15228444 + outSlope: 0.15228444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.0054284 + inSlope: 0.15432593 + outSlope: 0.15432593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.0081995 + inSlope: 0.060083132 + outSlope: 0.060083132 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0078808 + inSlope: -0.14396062 + outSlope: -0.14396062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.0023235 + inSlope: -0.41199988 + outSlope: -0.41199988 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9910645 + inSlope: -0.62279737 + outSlope: -0.62279737 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9769032 + inSlope: -0.59915483 + outSlope: -0.59915483 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9666092 + inSlope: -0.17767793 + outSlope: -0.17767793 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.96965104 + inSlope: 0.67714846 + outSlope: 0.67714846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9942479 + inSlope: 1.7531374 + outSlope: 1.7531374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 1.0412077 + inSlope: 2.5364203 + outSlope: 2.5364203 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.0977752 + inSlope: 2.3076956 + outSlope: 2.3076956 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.1353993 + inSlope: 0.44191903 + outSlope: 0.44191903 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.1158128 + inSlope: -3.1237237 + outSlope: -3.1237237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0079005 + inSlope: -7.422173 + outSlope: -7.422173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.8128668 + inSlope: -10.285931 + outSlope: -10.285931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5880665 + inSlope: -9.822871 + outSlope: -9.822871 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.41193348 + inSlope: -9.822871 + outSlope: -9.822871 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.1871332 + inSlope: -10.285931 + outSlope: -10.285931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.007900238 + inSlope: -7.422175 + outSlope: -7.422175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.1158129 + inSlope: -3.1237218 + outSlope: -3.1237218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.13539934 + inSlope: 0.44192326 + outSlope: 0.44192326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.09777522 + inSlope: 2.307697 + outSlope: 2.307697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: -0.04120767 + inSlope: 2.5364203 + outSlope: 2.5364203 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.0057520866 + inSlope: 1.7531382 + outSlope: 1.7531382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.030348957 + inSlope: 0.67714906 + outSlope: 0.67714906 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.03339082 + inSlope: -0.1776796 + outSlope: -0.1776796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.02309674 + inSlope: -0.59915537 + outSlope: -0.59915537 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.008935511 + inSlope: -0.6227964 + outSlope: -0.6227964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.0023235083 + inSlope: -0.41199997 + outSlope: -0.41199997 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.007880807 + inSlope: -0.14396071 + outSlope: -0.14396071 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.008199453 + inSlope: 0.060082983 + outSlope: 0.060082983 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.0054284334 + inSlope: 0.15432584 + outSlope: 0.15432584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.0019004345 + inSlope: 0.15228452 + outSlope: 0.15228452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.00078725815 + inSlope: 0.09629898 + outSlope: 0.09629898 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0020301342 + inSlope: 0.029835686 + outSlope: 0.029835686 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0020050406 + inSlope: -0.018649677 + outSlope: -0.018649677 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0012689233 + inSlope: -0.039469317 + outSlope: -0.039469317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0003940463 + inSlope: -0.037081704 + outSlope: -0.037081704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: -0.00024461746 + inSlope: -0.0223764 + outSlope: -0.0223764 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.00051927567 + inSlope: 0.005993131 + outSlope: 0.005993131 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0.02544452 + outSlope: 0.02544452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.010204673 + outSlope: -0.010204673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.99979174 + inSlope: -0.020416647 + outSlope: -0.020416647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99916667 + inSlope: -0.04085958 + outSlope: -0.04085958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.998124 + inSlope: -0.061352164 + outSlope: -0.061352164 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9966625 + inSlope: -0.0819236 + outSlope: -0.0819236 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9947802 + inSlope: -0.10259873 + outSlope: -0.10259873 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9924748 + inSlope: -0.12340235 + outSlope: -0.12340235 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.98974335 + inSlope: -0.14436811 + outSlope: -0.14436811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9865822 + inSlope: -0.1655222 + outSlope: -0.1655222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.98298734 + inSlope: -0.1868953 + outSlope: -0.1868953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.97895384 + inSlope: -0.20851678 + outSlope: -0.20851678 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.97447646 + inSlope: -0.23042294 + outSlope: -0.23042294 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9695488 + inSlope: -0.25265038 + outSlope: -0.25265038 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9641642 + inSlope: -0.27523255 + outSlope: -0.27523255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.95831484 + inSlope: -0.298215 + outSlope: -0.298215 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.95199215 + inSlope: -0.32164156 + outSlope: -0.32164156 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9451866 + inSlope: -0.34555686 + outSlope: -0.34555686 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9378878 + inSlope: -0.37001422 + outSlope: -0.37001422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.930084 + inSlope: -0.39507204 + outSlope: -0.39507204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9217624 + inSlope: -0.42078787 + outSlope: -0.42078787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.912909 + inSlope: -0.44723558 + outSlope: -0.44723558 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.9035079 + inSlope: -0.47449124 + outSlope: -0.47449124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.893542 + inSlope: -0.5026355 + outSlope: -0.5026355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.88299215 + inSlope: -0.53176874 + outSlope: -0.53176874 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.87183714 + inSlope: -0.5620006 + outSlope: -0.5620006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.86005336 + inSlope: -0.59344995 + outSlope: -0.59344995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.8476147 + inSlope: -0.6262588 + outSlope: -0.6262588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.8344918 + inSlope: -0.66059124 + outSlope: -0.66059124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.82065177 + inSlope: -0.69663036 + outSlope: -0.69663036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.8060579 + inSlope: -0.73459804 + outSlope: -0.73459804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.7906682 + inSlope: -0.7747523 + outSlope: -0.7747523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.77443534 + inSlope: -0.817395 + outSlope: -0.817395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.75730515 + inSlope: -0.8628955 + outSlope: -0.8628955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.73921514 + inSlope: -0.9116978 + outSlope: -0.9116978 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.72009295 + inSlope: -0.9643421 + outSlope: -0.9643421 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.6998542 + inSlope: -1.0215075 + outSlope: -1.0215075 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.6783988 + inSlope: -1.0840498 + outSlope: -1.0840498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.6556073 + inSlope: -1.1530614 + outSlope: -1.1530614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.6313351 + inSlope: -1.2299806 + outSlope: -1.2299806 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.605404 + inSlope: -1.3167374 + outSlope: -1.3167374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.57759064 + inSlope: -1.4159906 + outSlope: -1.4159906 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.54760844 + inSlope: -1.5315428 + outSlope: -1.5315428 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.5150787 + inSlope: -1.6690679 + outSlope: -1.6690679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.47948325 + inSlope: -1.8375006 + outSlope: -1.8375006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.44007874 + inSlope: -2.0519783 + outSlope: -2.0519783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.39572906 + inSlope: -2.3409562 + outSlope: -2.3409562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.3445294 + inSlope: -2.767158 + outSlope: -2.767158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.28278375 + inSlope: -3.5165439 + outSlope: -3.5165439 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.20099705 + inSlope: -6.9282055 + outSlope: -6.9282055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -9.848861 + outSlope: -9.848861 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -9.848856 + outSlope: -9.848856 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.79900295 + inSlope: -6.9282017 + outSlope: -6.9282017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.71721625 + inSlope: -3.516542 + outSlope: -3.516542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.6554706 + inSlope: -2.7671604 + outSlope: -2.7671604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.60427094 + inSlope: -2.3409588 + outSlope: -2.3409588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.55992126 + inSlope: -2.0519774 + outSlope: -2.0519774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.52051675 + inSlope: -1.8374996 + outSlope: -1.8374996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.48492128 + inSlope: -1.6690673 + outSlope: -1.6690673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.45239156 + inSlope: -1.5315437 + outSlope: -1.5315437 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.4224093 + inSlope: -1.4159914 + outSlope: -1.4159914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.39459598 + inSlope: -1.3167374 + outSlope: -1.3167374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.36866492 + inSlope: -1.2299801 + outSlope: -1.2299801 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.34439272 + inSlope: -1.1530609 + outSlope: -1.1530609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.3216012 + inSlope: -1.084049 + outSlope: -1.084049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.3001458 + inSlope: -1.0215068 + outSlope: -1.0215068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.27990705 + inSlope: -0.964342 + outSlope: -0.964342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.26078492 + inSlope: -0.91169846 + outSlope: -0.91169846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.24269485 + inSlope: -0.86289626 + outSlope: -0.86289626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.22556466 + inSlope: -0.817395 + outSlope: -0.817395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.20933181 + inSlope: -0.7747518 + outSlope: -0.7747518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.19394213 + inSlope: -0.734599 + outSlope: -0.734599 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.17934817 + inSlope: -0.6966313 + outSlope: -0.6966313 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.16550821 + inSlope: -0.6605903 + outSlope: -0.6605903 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.1523853 + inSlope: -0.6262583 + outSlope: -0.6262583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.13994664 + inSlope: -0.59344995 + outSlope: -0.59344995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.12816286 + inSlope: -0.5620006 + outSlope: -0.5620006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.11700785 + inSlope: -0.53176916 + outSlope: -0.53176916 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.10645801 + inSlope: -0.5026366 + outSlope: -0.5026366 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.09649205 + inSlope: -0.47449052 + outSlope: -0.47449052 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.08709103 + inSlope: -0.44723445 + outSlope: -0.44723445 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.07823759 + inSlope: -0.42078817 + outSlope: -0.42078817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.06991601 + inSlope: -0.39507204 + outSlope: -0.39507204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.062112212 + inSlope: -0.3700145 + outSlope: -0.3700145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.054813385 + inSlope: -0.34555668 + outSlope: -0.34555668 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.048007846 + inSlope: -0.32164255 + outSlope: -0.32164255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.041685104 + inSlope: -0.2982152 + outSlope: -0.2982152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.035835803 + inSlope: -0.2752313 + outSlope: -0.2752313 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.030451179 + inSlope: -0.25265047 + outSlope: -0.25265047 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.025523543 + inSlope: -0.23042303 + outSlope: -0.23042303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.021046162 + inSlope: -0.20851657 + outSlope: -0.20851657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.017012656 + inSlope: -0.18689515 + outSlope: -0.18689515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.01341778 + inSlope: -0.16552228 + outSlope: -0.16552228 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.010256648 + inSlope: -0.14436814 + outSlope: -0.14436814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0075252056 + inSlope: -0.12340242 + outSlope: -0.12340242 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.005219817 + inSlope: -0.10259877 + outSlope: -0.10259877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0033375025 + inSlope: -0.081923544 + outSlope: -0.081923544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0018759966 + inSlope: -0.06135209 + outSlope: -0.06135209 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.00083333254 + inSlope: -0.040859602 + outSlope: -0.040859602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00020825863 + inSlope: -0.020416657 + outSlope: -0.020416657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.0102046775 + outSlope: -0.0102046775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.020415187 + outSlope: -0.020415187 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.99958336 + inSlope: -0.040884405 + outSlope: -0.040884405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99833125 + inSlope: -0.081976175 + outSlope: -0.081976175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9962374 + inSlope: -0.123482674 + outSlope: -0.123482674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99329114 + inSlope: -0.1656317 + outSlope: -0.1656317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9894769 + inSlope: -0.20865986 + outSlope: -0.20865986 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9847744 + inSlope: -0.25282705 + outSlope: -0.25282705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.97915745 + inSlope: -0.29843706 + outSlope: -0.29843706 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9725933 + inSlope: -0.34582862 + outSlope: -0.34582862 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.965042 + inSlope: -0.3954003 + outSlope: -0.3954003 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9564545 + inSlope: -0.4476388 + outSlope: -0.4476388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.946771 + inSlope: -0.50313073 + outSlope: -0.50313073 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.93591857 + inSlope: -0.5626093 + outSlope: -0.5626093 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9238074 + inSlope: -0.6270206 + outSlope: -0.6270206 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9103259 + inSlope: -0.69759464 + outSlope: -0.69759464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8953341 + inSlope: -0.77599657 + outSlope: -0.77599657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8786526 + inSlope: -0.8645464 + outSlope: -0.8645464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8600465 + inSlope: -0.96660197 + outSlope: -0.96660197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8391994 + inSlope: -1.087286 + outSlope: -1.087286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8156675 + inSlope: -1.2348994 + outSlope: -1.2348994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.78879535 + inSlope: -1.4241385 + outSlope: -1.4241385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.7575394 + inSlope: -1.6845224 + outSlope: -1.6845224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.72003937 + inSlope: -2.0892293 + outSlope: -2.0892293 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.6722647 + inSlope: -2.9287496 + outSlope: -2.9287496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.60049856 + inSlope: -6.682703 + outSlope: -6.682703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.39950144 + inSlope: -6.682703 + outSlope: -6.682703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.3277353 + inSlope: -2.9287498 + outSlope: -2.9287498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.2799607 + inSlope: -2.0892284 + outSlope: -2.0892284 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.24246061 + inSlope: -1.6845212 + outSlope: -1.6845212 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.21120465 + inSlope: -1.4241395 + outSlope: -1.4241395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.18433249 + inSlope: -1.2349004 + outSlope: -1.2349004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.16080058 + inSlope: -1.087286 + outSlope: -1.087286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.1399535 + inSlope: -0.96660256 + outSlope: -0.96660256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.12134743 + inSlope: -0.8645458 + outSlope: -0.8645458 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.104665875 + inSlope: -0.7759953 + outSlope: -0.7759953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.089674115 + inSlope: -0.6975951 + outSlope: -0.6975951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.07619262 + inSlope: -0.6270211 + outSlope: -0.6270211 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.06408143 + inSlope: -0.56260955 + outSlope: -0.56260955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.053228974 + inSlope: -0.5031295 + outSlope: -0.5031295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.043545544 + inSlope: -0.44763833 + outSlope: -0.44763833 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.034958005 + inSlope: -0.39540142 + outSlope: -0.39540142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.027406693 + inSlope: -0.34582877 + outSlope: -0.34582877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.020842552 + inSlope: -0.29843718 + outSlope: -0.29843718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.015225589 + inSlope: -0.25282717 + outSlope: -0.25282717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.010523081 + inSlope: -0.20865995 + outSlope: -0.20865995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0067088604 + inSlope: -0.16563158 + outSlope: -0.16563158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0037626028 + inSlope: -0.123482525 + outSlope: -0.123482525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0016687512 + inSlope: -0.08197622 + outSlope: -0.08197622 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00041663647 + inSlope: -0.040884424 + outSlope: -0.040884424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.020415196 + outSlope: -0.020415196 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.12314382 + value: -0.99922705 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.25508228 + value: 1.0390507 + inSlope: 2.8190482 + outSlope: 2.8190482 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4470894 + value: -0.53901064 + inSlope: 0.0036140734 + outSlope: 0.0036140734 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6409262 + value: 0.49787748 + inSlope: 4.620454 + outSlope: 4.620454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7868408 + value: -0.26380616 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9014592 + value: 0.13793975 + inSlope: 1.80238 + outSlope: 1.80238 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 diff --git a/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFAntiCurves.curves.meta b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFAntiCurves.curves.meta new file mode 100644 index 0000000..826fc39 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFAntiCurves.curves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dcef6f636a0aab845a6c8d9b97bb4b51 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFCurves.curves b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFCurves.curves new file mode 100644 index 0000000..08e043c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFCurves.curves @@ -0,0 +1,14182 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12322, guid: 0000000000000000e000000000000000, type: 0} + m_Name: MMFCurves + m_EditorClassIdentifier: + m_Presets: + - m_Name: LinearTween + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.020408163 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.040816326 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.06122449 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.08163265 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.10204082 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.12244898 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.14285715 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.1632653 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.18367347 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.20408164 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.2244898 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.24489796 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.26530612 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.2857143 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.30612245 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.3265306 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.3469388 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.36734694 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.3877551 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.40816328 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.42857143 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.4489796 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.46938777 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.48979592 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5102041 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.53061223 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.5510204 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.5714286 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.59183675 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.6122449 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.63265306 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.6530612 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.67346936 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.6938776 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.71428573 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.7346939 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.75510204 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.7755102 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.79591835 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.81632656 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.8367347 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.85714287 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.877551 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.8979592 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9183673 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.93877554 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9591837 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.97959185 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.020408163 + outSlope: 0.020408163 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0004164931 + inSlope: 0.040816326 + outSlope: 0.040816326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0016659724 + inSlope: 0.08163266 + outSlope: 0.08163266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0037484383 + inSlope: 0.12244898 + outSlope: 0.12244898 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0066638896 + inSlope: 0.1632653 + outSlope: 0.1632653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.010412329 + inSlope: 0.20408165 + outSlope: 0.20408165 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.014993753 + inSlope: 0.24489796 + outSlope: 0.24489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.020408165 + inSlope: 0.28571427 + outSlope: 0.28571427 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.026655558 + inSlope: 0.32653067 + outSlope: 0.32653067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.033735946 + inSlope: 0.36734694 + outSlope: 0.36734694 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.041649316 + inSlope: 0.40816325 + outSlope: 0.40816325 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.050395668 + inSlope: 0.44897965 + outSlope: 0.44897965 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.059975013 + inSlope: 0.4897959 + outSlope: 0.4897959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.07038733 + inSlope: 0.5306122 + outSlope: 0.5306122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.08163266 + inSlope: 0.57142866 + outSlope: 0.57142866 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.09371096 + inSlope: 0.61224484 + outSlope: 0.61224484 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.106622234 + inSlope: 0.6530611 + outSlope: 0.6530611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.12036652 + inSlope: 0.6938778 + outSlope: 0.6938778 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.13494378 + inSlope: 0.7346939 + outSlope: 0.7346939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.15035401 + inSlope: 0.77551 + outSlope: 0.77551 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.16659726 + inSlope: 0.8163265 + outSlope: 0.8163265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.18367347 + inSlope: 0.8571429 + outSlope: 0.8571429 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.20158267 + inSlope: 0.8979591 + outSlope: 0.8979591 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.22032487 + inSlope: 0.93877566 + outSlope: 0.93877566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.23990005 + inSlope: 0.9795921 + outSlope: 0.9795921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.2603082 + inSlope: 1.0204079 + outSlope: 1.0204079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.28154933 + inSlope: 1.0612245 + outSlope: 1.0612245 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.30362347 + inSlope: 1.1020408 + outSlope: 1.1020408 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.32653064 + inSlope: 1.1428573 + outSlope: 1.1428573 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.35027075 + inSlope: 1.183674 + outSlope: 1.183674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.37484384 + inSlope: 1.2244897 + outSlope: 1.2244897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.4002499 + inSlope: 1.2653055 + outSlope: 1.2653055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.42648894 + inSlope: 1.3061221 + outSlope: 1.3061221 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.45356098 + inSlope: 1.3469388 + outSlope: 1.3469388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.48146608 + inSlope: 1.3877546 + outSlope: 1.3877546 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.5102041 + inSlope: 1.4285724 + outSlope: 1.4285724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.53977513 + inSlope: 1.469389 + outSlope: 1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.5701791 + inSlope: 1.5102032 + outSlope: 1.5102032 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.60141605 + inSlope: 1.5510205 + outSlope: 1.5510205 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.63348603 + inSlope: 1.5918368 + outSlope: 1.5918368 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.66638905 + inSlope: 1.6326525 + outSlope: 1.6326525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.700125 + inSlope: 1.6734693 + outSlope: 1.6734693 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.7346939 + inSlope: 1.7142851 + outSlope: 1.7142851 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.77009577 + inSlope: 1.7551024 + outSlope: 1.7551024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.8063307 + inSlope: 1.7959197 + outSlope: 1.7959197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.8433986 + inSlope: 1.836734 + outSlope: 1.836734 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.8812995 + inSlope: 1.8775499 + outSlope: 1.8775499 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.92003334 + inSlope: 1.9183685 + outSlope: 1.9183685 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9596002 + inSlope: 1.9591842 + outSlope: 1.9591842 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1.9795907 + outSlope: 1.9795907 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1.9795897 + outSlope: 1.9795897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.04039979 + inSlope: 1.9591832 + outSlope: 1.9591832 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.079966664 + inSlope: 1.9183674 + outSlope: 1.9183674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.118700504 + inSlope: 1.8775518 + outSlope: 1.8775518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.15660143 + inSlope: 1.8367358 + outSlope: 1.8367358 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.19366932 + inSlope: 1.7959186 + outSlope: 1.7959186 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.22990423 + inSlope: 1.7551014 + outSlope: 1.7551014 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.26530612 + inSlope: 1.7142844 + outSlope: 1.7142844 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.29987502 + inSlope: 1.6734717 + outSlope: 1.6734717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.33361107 + inSlope: 1.6326537 + outSlope: 1.6326537 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.36651397 + inSlope: 1.5918357 + outSlope: 1.5918357 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.39858395 + inSlope: 1.5510199 + outSlope: 1.5510199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.4298209 + inSlope: 1.5102026 + outSlope: 1.5102026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.46022487 + inSlope: 1.4693878 + outSlope: 1.4693878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.48979592 + inSlope: 1.428572 + outSlope: 1.428572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.51853395 + inSlope: 1.3877544 + outSlope: 1.3877544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.54643893 + inSlope: 1.3469391 + outSlope: 1.3469391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.57351106 + inSlope: 1.3061233 + outSlope: 1.3061233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.5997501 + inSlope: 1.2653055 + outSlope: 1.2653055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.62515616 + inSlope: 1.2244918 + outSlope: 1.2244918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.6497294 + inSlope: 1.1836746 + outSlope: 1.1836746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.6734694 + inSlope: 1.1428567 + outSlope: 1.1428567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.69637656 + inSlope: 1.10204 + outSlope: 1.10204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.71845067 + inSlope: 1.0612229 + outSlope: 1.0612229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.7396918 + inSlope: 1.0204079 + outSlope: 1.0204079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.76009995 + inSlope: 0.9795921 + outSlope: 0.9795921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.7796751 + inSlope: 0.9387763 + outSlope: 0.9387763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7984173 + inSlope: 0.89795923 + outSlope: 0.89795923 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.81632656 + inSlope: 0.857142 + outSlope: 0.857142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.83340275 + inSlope: 0.816326 + outSlope: 0.816326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.849646 + inSlope: 0.7755102 + outSlope: 0.7755102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8650562 + inSlope: 0.7346945 + outSlope: 0.7346945 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8796335 + inSlope: 0.6938772 + outSlope: 0.6938772 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8933777 + inSlope: 0.65306044 + outSlope: 0.65306044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.90628904 + inSlope: 0.61224616 + outSlope: 0.61224616 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9183674 + inSlope: 0.57142836 + outSlope: 0.57142836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.92961264 + inSlope: 0.5306111 + outSlope: 0.5306111 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.940025 + inSlope: 0.4897968 + outSlope: 0.4897968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.94960433 + inSlope: 0.44897956 + outSlope: 0.44897956 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.95835066 + inSlope: 0.4081632 + outSlope: 0.4081632 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.96626407 + inSlope: 0.3673474 + outSlope: 0.3673474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.97334445 + inSlope: 0.3265307 + outSlope: 0.3265307 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.97959185 + inSlope: 0.28571492 + outSlope: 0.28571492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9850063 + inSlope: 0.24489766 + outSlope: 0.24489766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.98958766 + inSlope: 0.2040804 + outSlope: 0.2040804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9933361 + inSlope: 0.16326588 + outSlope: 0.16326588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9962516 + inSlope: 0.12245008 + outSlope: 0.12245008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99833405 + inSlope: 0.081631586 + outSlope: 0.081631586 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9995835 + inSlope: 0.04081579 + outSlope: 0.04081579 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.020409355 + outSlope: 0.020409355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.040816326 + outSlope: 0.040816326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0008329862 + inSlope: 0.08163265 + outSlope: 0.08163265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0033319448 + inSlope: 0.16326532 + outSlope: 0.16326532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0074968766 + inSlope: 0.24489796 + outSlope: 0.24489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.013327779 + inSlope: 0.3265306 + outSlope: 0.3265306 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.020824658 + inSlope: 0.4081633 + outSlope: 0.4081633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.029987507 + inSlope: 0.48979592 + outSlope: 0.48979592 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.04081633 + inSlope: 0.57142854 + outSlope: 0.57142854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.053311117 + inSlope: 0.65306133 + outSlope: 0.65306133 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.06747189 + inSlope: 0.7346939 + outSlope: 0.7346939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.08329863 + inSlope: 0.8163265 + outSlope: 0.8163265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.100791335 + inSlope: 0.8979593 + outSlope: 0.8979593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.119950026 + inSlope: 0.9795918 + outSlope: 0.9795918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.14077467 + inSlope: 1.0612243 + outSlope: 1.0612243 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.16326532 + inSlope: 1.1428573 + outSlope: 1.1428573 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.18742192 + inSlope: 1.2244897 + outSlope: 1.2244897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.21324447 + inSlope: 1.3061222 + outSlope: 1.3061222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.24073304 + inSlope: 1.3877556 + outSlope: 1.3877556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.26988757 + inSlope: 1.4693878 + outSlope: 1.4693878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.30070803 + inSlope: 1.55102 + outSlope: 1.55102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.33319452 + inSlope: 1.632653 + outSlope: 1.632653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.36734694 + inSlope: 1.7142859 + outSlope: 1.7142859 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.40316534 + inSlope: 1.7959182 + outSlope: 1.7959182 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.44064975 + inSlope: 1.8775513 + outSlope: 1.8775513 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.4798001 + inSlope: 1.9489796 + outSlope: 1.9489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5201999 + inSlope: 1.9489796 + outSlope: 1.9489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.55935025 + inSlope: 1.8775512 + outSlope: 1.8775512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.5968346 + inSlope: 1.7959185 + outSlope: 1.7959185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.6326531 + inSlope: 1.7142855 + outSlope: 1.7142855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.6668055 + inSlope: 1.632652 + outSlope: 1.632652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.69929194 + inSlope: 1.5510204 + outSlope: 1.5510204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.73011243 + inSlope: 1.469389 + outSlope: 1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.759267 + inSlope: 1.3877559 + outSlope: 1.3877559 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.7867555 + inSlope: 1.3061224 + outSlope: 1.3061224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.81257814 + inSlope: 1.2244895 + outSlope: 1.2244895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.8367347 + inSlope: 1.1428567 + outSlope: 1.1428567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.85922533 + inSlope: 1.0612237 + outSlope: 1.0612237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.88004994 + inSlope: 0.97959214 + outSlope: 0.97959214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.89920866 + inSlope: 0.89796054 + outSlope: 0.89796054 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9167014 + inSlope: 0.8163264 + outSlope: 0.8163264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.93252814 + inSlope: 0.7346933 + outSlope: 0.7346933 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9466889 + inSlope: 0.6530614 + outSlope: 0.6530614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9591837 + inSlope: 0.57142836 + outSlope: 0.57142836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9700125 + inSlope: 0.48979533 + outSlope: 0.48979533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9791753 + inSlope: 0.40816373 + outSlope: 0.40816373 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9866722 + inSlope: 0.32653028 + outSlope: 0.32653028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9925031 + inSlope: 0.24489725 + outSlope: 0.24489725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99666804 + inSlope: 0.16326609 + outSlope: 0.16326609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.999167 + inSlope: 0.08163304 + outSlope: 0.08163304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.04081579 + outSlope: 0.04081579 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.0004164931 + outSlope: 0.0004164931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.000008499859 + inSlope: 0.0016659724 + outSlope: 0.0016659724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00006799887 + inSlope: 0.0054144105 + outSlope: 0.0054144105 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.00022949622 + inSlope: 0.011661807 + outSlope: 0.011661807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.000543991 + inSlope: 0.020408165 + outSlope: 0.020408165 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0010624826 + inSlope: 0.03165348 + outSlope: 0.03165348 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.0018359697 + inSlope: 0.04539775 + outSlope: 0.04539775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0029154522 + inSlope: 0.061640985 + outSlope: 0.061640985 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.004351928 + inSlope: 0.08038317 + outSlope: 0.08038317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.006196398 + inSlope: 0.101624325 + outSlope: 0.101624325 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.008499861 + inSlope: 0.12536444 + outSlope: 0.12536444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.011313313 + inSlope: 0.15160349 + outSlope: 0.15160349 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.014687758 + inSlope: 0.18034154 + outSlope: 0.18034154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.018674191 + inSlope: 0.2115785 + outSlope: 0.2115785 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.023323618 + inSlope: 0.24531445 + outSlope: 0.24531445 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.028687028 + inSlope: 0.28154936 + outSlope: 0.28154936 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.034815423 + inSlope: 0.32028317 + outSlope: 0.32028317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.041759815 + inSlope: 0.36151603 + outSlope: 0.36151603 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.049571183 + inSlope: 0.40524787 + outSlope: 0.40524787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.058300536 + inSlope: 0.4514786 + outSlope: 0.4514786 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.067998886 + inSlope: 0.5002082 + outSlope: 0.5002082 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.0787172 + inSlope: 0.55143684 + outSlope: 0.55143684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.0905065 + inSlope: 0.60516465 + outSlope: 0.60516465 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.10341781 + inSlope: 0.66139114 + outSlope: 0.66139114 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.11750206 + inSlope: 0.7201167 + outSlope: 0.7201167 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.13281031 + inSlope: 0.7813413 + outSlope: 0.7813413 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.14939353 + inSlope: 0.8450643 + outSlope: 0.8450643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.16730271 + inSlope: 0.9112867 + outSlope: 0.9112867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.18658894 + inSlope: 0.98000836 + outSlope: 0.98000836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.20730309 + inSlope: 1.051229 + outSlope: 1.051229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.22949623 + inSlope: 1.1249478 + outSlope: 1.1249478 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.2532193 + inSlope: 1.2011659 + outSlope: 1.2011659 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.2785234 + inSlope: 1.2798839 + outSlope: 1.2798839 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.30545944 + inSlope: 1.3610995 + outSlope: 1.3610995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.33407852 + inSlope: 1.4448142 + outSlope: 1.4448142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.3644315 + inSlope: 1.5310287 + outSlope: 1.5310287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.39656946 + inSlope: 1.6197422 + outSlope: 1.6197422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.4305434 + inSlope: 1.7109542 + outSlope: 1.7109542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.4664043 + inSlope: 1.8046646 + outSlope: 1.8046646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.50420314 + inSlope: 1.9008746 + outSlope: 1.9008746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.5439911 + inSlope: 1.999584 + outSlope: 1.999584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.5858189 + inSlope: 2.100791 + outSlope: 2.100791 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.6297376 + inSlope: 2.204498 + outSlope: 2.204498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.67579836 + inSlope: 2.3107038 + outSlope: 2.3107038 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.724052 + inSlope: 2.419408 + outSlope: 2.419408 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.77454966 + inSlope: 2.530613 + outSlope: 2.530613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.82734245 + inSlope: 2.6443148 + outSlope: 2.6443148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.882481 + inSlope: 2.7605157 + outSlope: 2.7605157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9400165 + inSlope: 2.8792174 + outSlope: 2.8792174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2.9391925 + outSlope: 2.9391925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2.939191 + outSlope: 2.939191 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.059983492 + inSlope: 2.8792162 + outSlope: 2.8792162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.11751902 + inSlope: 2.7605143 + outSlope: 2.7605143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.17265755 + inSlope: 2.6443172 + outSlope: 2.6443172 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.22545034 + inSlope: 2.5306156 + outSlope: 2.5306156 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.275948 + inSlope: 2.419407 + outSlope: 2.419407 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.32420164 + inSlope: 2.3107026 + outSlope: 2.3107026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.37026238 + inSlope: 2.2044973 + outSlope: 2.2044973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.4141811 + inSlope: 2.1007931 + outSlope: 2.1007931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.45600903 + inSlope: 1.9995853 + outSlope: 1.9995853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.49579686 + inSlope: 1.9008732 + outSlope: 1.9008732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.5335957 + inSlope: 1.8046633 + outSlope: 1.8046633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.5694566 + inSlope: 1.7109535 + outSlope: 1.7109535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.6034305 + inSlope: 1.6197417 + outSlope: 1.6197417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.6355685 + inSlope: 1.5310276 + outSlope: 1.5310276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.66592145 + inSlope: 1.4448147 + outSlope: 1.4448147 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.6945405 + inSlope: 1.3611013 + outSlope: 1.3611013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.7214766 + inSlope: 1.2798843 + outSlope: 1.2798843 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.7467807 + inSlope: 1.2011657 + outSlope: 1.2011657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.77050376 + inSlope: 1.124948 + outSlope: 1.124948 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.79269695 + inSlope: 1.05123 + outSlope: 1.05123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8134111 + inSlope: 0.9800083 + outSlope: 0.9800083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.8326973 + inSlope: 0.9112853 + outSlope: 0.9112853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.85060644 + inSlope: 0.8450644 + outSlope: 0.8450644 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.8671897 + inSlope: 0.7813413 + outSlope: 0.7813413 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.8824979 + inSlope: 0.72011614 + outSlope: 0.72011614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.8965822 + inSlope: 0.661391 + outSlope: 0.661391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.90949345 + inSlope: 0.6051651 + outSlope: 0.6051651 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.9212828 + inSlope: 0.55143726 + outSlope: 0.55143726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9320011 + inSlope: 0.50020736 + outSlope: 0.50020736 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.94169945 + inSlope: 0.4514796 + outSlope: 0.4514796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.95042884 + inSlope: 0.40524894 + outSlope: 0.40524894 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9582402 + inSlope: 0.36151546 + outSlope: 0.36151546 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.96518457 + inSlope: 0.32028303 + outSlope: 0.32028303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.971313 + inSlope: 0.28154963 + outSlope: 0.28154963 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9766764 + inSlope: 0.24531385 + outSlope: 0.24531385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9813258 + inSlope: 0.21157765 + outSlope: 0.21157765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9853122 + inSlope: 0.18034154 + outSlope: 0.18034154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9886867 + inSlope: 0.151604 + outSlope: 0.151604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.99150014 + inSlope: 0.12536491 + outSlope: 0.12536491 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9938036 + inSlope: 0.10162458 + outSlope: 0.10162458 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9956481 + inSlope: 0.08038302 + outSlope: 0.08038302 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99708456 + inSlope: 0.061641335 + outSlope: 0.061641335 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99816406 + inSlope: 0.045396797 + outSlope: 0.045396797 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9989375 + inSlope: 0.031652316 + outSlope: 0.031652316 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.999456 + inSlope: 0.020409334 + outSlope: 0.020409334 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9997705 + inSlope: 0.011662049 + outSlope: 0.011662049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.999932 + inSlope: 0.005413386 + outSlope: 0.005413386 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9999915 + inSlope: 0.0016662189 + outSlope: 0.0016662189 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.00041764995 + outSlope: 0.00041764995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.0016659724 + outSlope: 0.0016659724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.000033999437 + inSlope: 0.0066638896 + outSlope: 0.0066638896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0002719955 + inSlope: 0.021657642 + outSlope: 0.021657642 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0009179849 + inSlope: 0.04664723 + outSlope: 0.04664723 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.002175964 + inSlope: 0.08163266 + outSlope: 0.08163266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0042499304 + inSlope: 0.12661391 + outSlope: 0.12661391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.007343879 + inSlope: 0.181591 + outSlope: 0.181591 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.011661809 + inSlope: 0.24656394 + outSlope: 0.24656394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.017407712 + inSlope: 0.32153267 + outSlope: 0.32153267 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.024785591 + inSlope: 0.4064973 + outSlope: 0.4064973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.033999443 + inSlope: 0.50145775 + outSlope: 0.50145775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.04525325 + inSlope: 0.60641396 + outSlope: 0.60641396 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.05875103 + inSlope: 0.72136617 + outSlope: 0.72136617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.074696764 + inSlope: 0.846314 + outSlope: 0.846314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.09329447 + inSlope: 0.9812578 + outSlope: 0.9812578 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.11474811 + inSlope: 1.1261975 + outSlope: 1.1261975 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.1392617 + inSlope: 1.2811327 + outSlope: 1.2811327 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.16703926 + inSlope: 1.4460641 + outSlope: 1.4460641 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.19828473 + inSlope: 1.6209915 + outSlope: 1.6209915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.23320214 + inSlope: 1.8059144 + outSlope: 1.8059144 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.27199554 + inSlope: 2.0008328 + outSlope: 2.0008328 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.3148688 + inSlope: 2.2057474 + outSlope: 2.2057474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.362026 + inSlope: 2.4206586 + outSlope: 2.4206586 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.41367123 + inSlope: 2.6455646 + outSlope: 2.6455646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.47000825 + inSlope: 2.849854 + outSlope: 2.849854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.52999175 + inSlope: 2.8498535 + outSlope: 2.8498535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.58632874 + inSlope: 2.645564 + outSlope: 2.645564 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.6379739 + inSlope: 2.4206593 + outSlope: 2.4206593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.68513125 + inSlope: 2.2057476 + outSlope: 2.2057476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.7280045 + inSlope: 2.0008326 + outSlope: 2.0008326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.76679784 + inSlope: 1.8059139 + outSlope: 1.8059139 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.80171525 + inSlope: 1.6209915 + outSlope: 1.6209915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8329607 + inSlope: 1.4460647 + outSlope: 1.4460647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8607383 + inSlope: 1.2811337 + outSlope: 1.2811337 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.88525194 + inSlope: 1.1261971 + outSlope: 1.1261971 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.90670556 + inSlope: 0.98125684 + outSlope: 0.98125684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9253032 + inSlope: 0.8463136 + outSlope: 0.8463136 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.94124895 + inSlope: 0.72136617 + outSlope: 0.72136617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9547467 + inSlope: 0.60641456 + outSlope: 0.60641456 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.96600056 + inSlope: 0.50145817 + outSlope: 0.50145817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9752144 + inSlope: 0.40649688 + outSlope: 0.40649688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9825923 + inSlope: 0.32153207 + outSlope: 0.32153207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9883382 + inSlope: 0.24656388 + outSlope: 0.24656388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9926561 + inSlope: 0.18159157 + outSlope: 0.18159157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.99575007 + inSlope: 0.12661365 + outSlope: 0.12661365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.997824 + inSlope: 0.08163296 + outSlope: 0.08163296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.999082 + inSlope: 0.046648197 + outSlope: 0.046648197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.999728 + inSlope: 0.021657925 + outSlope: 0.021657925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.999966 + inSlope: 0.006663415 + outSlope: 0.006663415 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.0016647585 + outSlope: 0.0016647585 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.000008499859 + outSlope: 0.000008499859 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00000017346652 + inSlope: 0.00006799887 + outSlope: 0.00006799887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0000027754643 + inSlope: 0.00033999438 + outSlope: 0.00033999438 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.000014050789 + inSlope: 0.0010199832 + outSlope: 0.0010199832 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.00004440743 + inSlope: 0.0023119617 + outSlope: 0.0023119617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.00010841659 + inSlope: 0.0044199275 + outSlope: 0.0044199275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.00022481263 + inSlope: 0.007547876 + outSlope: 0.007547876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0004164932 + inSlope: 0.011899805 + outSlope: 0.011899805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.00071051886 + inSlope: 0.017679708 + outSlope: 0.017679708 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.0011381139 + inSlope: 0.025091585 + outSlope: 0.025091585 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.0017346655 + inSlope: 0.034339435 + outSlope: 0.034339435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.0025397232 + inSlope: 0.04562725 + outSlope: 0.04562725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.003597002 + inSlope: 0.05915902 + outSlope: 0.05915902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.0049543767 + inSlope: 0.075138755 + outSlope: 0.075138755 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.006663891 + inSlope: 0.09377046 + outSlope: 0.09377046 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.008781743 + inSlope: 0.11525811 + outSlope: 0.11525811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.011368302 + inSlope: 0.1398057 + outSlope: 0.1398057 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.0144881 + inSlope: 0.16761723 + outSlope: 0.16761723 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.018209822 + inSlope: 0.19889674 + outSlope: 0.19889674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.02260633 + inSlope: 0.23384815 + outSlope: 0.23384815 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.027754648 + inSlope: 0.27267554 + outSlope: 0.27267554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.033735946 + inSlope: 0.31558275 + outSlope: 0.31558275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.04063557 + inSlope: 0.36277395 + outSlope: 0.36277395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.04854305 + inSlope: 0.4144532 + outSlope: 0.4144532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.057552032 + inSlope: 0.47082418 + outSlope: 0.47082418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.067760356 + inSlope: 0.53209114 + outSlope: 0.53209114 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.07927003 + inSlope: 0.59845823 + outSlope: 0.59845823 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.09218721 + inSlope: 0.6701289 + outSlope: 0.6701289 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.10662226 + inSlope: 0.7473076 + outSlope: 0.7473076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.12268959 + inSlope: 0.8301984 + outSlope: 0.8301984 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.14050789 + inSlope: 0.91900474 + outSlope: 0.91900474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.16019997 + inSlope: 1.0139314 + outSlope: 1.0139314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.18189283 + inSlope: 1.1151816 + outSlope: 1.1151816 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.20571756 + inSlope: 1.2229598 + outSlope: 1.2229598 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.2318096 + inSlope: 1.3374703 + outSlope: 1.3374703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.26030824 + inSlope: 1.4589158 + outSlope: 1.4589158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.29135716 + inSlope: 1.587502 + outSlope: 1.587502 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.3251042 + inSlope: 1.7234318 + outSlope: 1.7234318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.36170128 + inSlope: 1.8669091 + outSlope: 1.8669091 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.40130454 + inSlope: 2.0181384 + outSlope: 2.0181384 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.44407436 + inSlope: 2.1773238 + outSlope: 2.1773238 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.49017498 + inSlope: 2.34467 + outSlope: 2.34467 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.53977513 + inSlope: 2.520378 + outSlope: 2.520378 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.5930475 + inSlope: 2.7046542 + outSlope: 2.7046542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.65016913 + inSlope: 2.897705 + outSlope: 2.897705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.7113211 + inSlope: 3.099729 + outSlope: 3.099729 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.7766888 + inSlope: 3.3109326 + outSlope: 3.3109326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.84646136 + inSlope: 3.5315223 + outSlope: 3.5315223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9208325 + inSlope: 3.7616987 + outSlope: 3.7616987 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 3.8792086 + outSlope: 3.8792086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 3.879207 + outSlope: 3.879207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.079167485 + inSlope: 3.7616968 + outSlope: 3.7616968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.15353864 + inSlope: 3.5315206 + outSlope: 3.5315206 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.22331119 + inSlope: 3.310936 + outSlope: 3.310936 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.28867888 + inSlope: 3.099732 + outSlope: 3.099732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.34983087 + inSlope: 2.8977034 + outSlope: 2.8977034 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.4069525 + inSlope: 2.7046528 + outSlope: 2.7046528 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.46022487 + inSlope: 2.5203762 + outSlope: 2.5203762 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.509825 + inSlope: 2.3446712 + outSlope: 2.3446712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.5559257 + inSlope: 2.1773257 + outSlope: 2.1773257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.59869546 + inSlope: 2.0181394 + outSlope: 2.0181394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.63829875 + inSlope: 1.8669077 + outSlope: 1.8669077 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.67489576 + inSlope: 1.7234304 + outSlope: 1.7234304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.70864284 + inSlope: 1.5875009 + outSlope: 1.5875009 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.73969173 + inSlope: 1.4589144 + outSlope: 1.4589144 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.7681904 + inSlope: 1.3374715 + outSlope: 1.3374715 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.7942824 + inSlope: 1.2229614 + outSlope: 1.2229614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8181072 + inSlope: 1.1151814 + outSlope: 1.1151814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8398 + inSlope: 1.0139314 + outSlope: 1.0139314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8594921 + inSlope: 0.919006 + outSlope: 0.919006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.87731045 + inSlope: 0.8301984 + outSlope: 0.8301984 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8933778 + inSlope: 0.7473072 + outSlope: 0.7473072 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.9078128 + inSlope: 0.6701291 + outSlope: 0.6701291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.92073 + inSlope: 0.59845835 + outSlope: 0.59845835 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.93223965 + inSlope: 0.5320904 + outSlope: 0.5320904 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.94244796 + inSlope: 0.47082436 + outSlope: 0.47082436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.95145696 + inSlope: 0.41445333 + outSlope: 0.41445333 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.9593644 + inSlope: 0.36277375 + outSlope: 0.36277375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.96626407 + inSlope: 0.31558222 + outSlope: 0.31558222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.97224534 + inSlope: 0.27267575 + outSlope: 0.27267575 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9773937 + inSlope: 0.23384893 + outSlope: 0.23384893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9817902 + inSlope: 0.19889629 + outSlope: 0.19889629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9855119 + inSlope: 0.16761637 + outSlope: 0.16761637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.98863167 + inSlope: 0.13980594 + outSlope: 0.13980594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.99121827 + inSlope: 0.11525951 + outSlope: 0.11525951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.99333614 + inSlope: 0.093769714 + outSlope: 0.093769714 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9950456 + inSlope: 0.075137556 + outSlope: 0.075137556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.996403 + inSlope: 0.059160262 + outSlope: 0.059160262 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9974603 + inSlope: 0.045627527 + outSlope: 0.045627527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9982653 + inSlope: 0.034339253 + outSlope: 0.034339253 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9988619 + inSlope: 0.025091082 + outSlope: 0.025091082 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.99928945 + inSlope: 0.017678566 + outSlope: 0.017678566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9995835 + inSlope: 0.011900103 + outSlope: 0.011900103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9997752 + inSlope: 0.0075483657 + outSlope: 0.0075483657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9998916 + inSlope: 0.0044203717 + outSlope: 0.0044203717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9999556 + inSlope: 0.0023116756 + outSlope: 0.0023116756 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99998593 + inSlope: 0.0010192974 + outSlope: 0.0010192974 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9999972 + inSlope: 0.0003402533 + outSlope: 0.0003402533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9999998 + inSlope: 0.00006863478 + outSlope: 0.00006863478 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.000008761887 + outSlope: 0.000008761887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.00006799887 + outSlope: 0.00006799887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0000013877321 + inSlope: 0.000543991 + outSlope: 0.000543991 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.000022203714 + inSlope: 0.002719955 + outSlope: 0.002719955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.00011240631 + inSlope: 0.008159866 + outSlope: 0.008159866 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.00035525943 + inSlope: 0.018495694 + outSlope: 0.018495694 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.00086733274 + inSlope: 0.03535942 + outSlope: 0.03535942 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.001798501 + inSlope: 0.060383007 + outSlope: 0.060383007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0033319455 + inSlope: 0.09519844 + outSlope: 0.09519844 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.005684151 + inSlope: 0.14143766 + outSlope: 0.14143766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.009104911 + inSlope: 0.20073268 + outSlope: 0.20073268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.013877324 + inSlope: 0.27471548 + outSlope: 0.27471548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.020317785 + inSlope: 0.365018 + outSlope: 0.365018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.028776016 + inSlope: 0.47327217 + outSlope: 0.47327217 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.039635014 + inSlope: 0.60111004 + outSlope: 0.60111004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.05331113 + inSlope: 0.7501637 + outSlope: 0.7501637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.070253946 + inSlope: 0.9220649 + outSlope: 0.9220649 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.09094641 + inSlope: 1.1184456 + outSlope: 1.1184456 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.1159048 + inSlope: 1.3409379 + outSlope: 1.3409379 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.14567858 + inSlope: 1.5911739 + outSlope: 1.5911739 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.18085064 + inSlope: 1.8707852 + outSlope: 1.8707852 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.22203718 + inSlope: 2.1814044 + outSlope: 2.1814044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.26988757 + inSlope: 2.524662 + outSlope: 2.524662 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.32508457 + inSlope: 2.9021916 + outSlope: 2.9021916 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.3883444 + inSlope: 3.3156257 + outSlope: 3.3156257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.46041626 + inSlope: 3.7053654 + outSlope: 3.7053654 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.53958374 + inSlope: 3.7053654 + outSlope: 3.7053654 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.6116556 + inSlope: 3.3156252 + outSlope: 3.3156252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.6749153 + inSlope: 2.902193 + outSlope: 2.902193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.73011255 + inSlope: 2.524662 + outSlope: 2.524662 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.77796286 + inSlope: 2.1814032 + outSlope: 2.1814032 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8191494 + inSlope: 1.8707855 + outSlope: 1.8707855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8543214 + inSlope: 1.5911732 + outSlope: 1.5911732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8840952 + inSlope: 1.3409381 + outSlope: 1.3409381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.90905356 + inSlope: 1.1184461 + outSlope: 1.1184461 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9297461 + inSlope: 0.9220645 + outSlope: 0.9220645 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9466889 + inSlope: 0.75016356 + outSlope: 0.75016356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.960365 + inSlope: 0.6011107 + outSlope: 0.6011107 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.971224 + inSlope: 0.47327185 + outSlope: 0.47327185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9796822 + inSlope: 0.3650173 + outSlope: 0.3650173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.98612267 + inSlope: 0.27471548 + outSlope: 0.27471548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9908951 + inSlope: 0.20073304 + outSlope: 0.20073304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.99431586 + inSlope: 0.14143729 + outSlope: 0.14143729 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99666804 + inSlope: 0.0951979 + outSlope: 0.0951979 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9982015 + inSlope: 0.060384005 + outSlope: 0.060384005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9991327 + inSlope: 0.035360053 + outSlope: 0.035360053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99964476 + inSlope: 0.018494865 + outSlope: 0.018494865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9998876 + inSlope: 0.00815876 + outSlope: 0.00815876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99997777 + inSlope: 0.002720566 + outSlope: 0.002720566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9999986 + inSlope: 0.0005446973 + outSlope: 0.0005446973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.000067174464 + outSlope: 0.000067174464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.00000017346652 + outSlope: 0.00000017346652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0000000035401329 + inSlope: 0.0000027754643 + outSlope: 0.0000027754643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00000011328425 + inSlope: 0.00002098945 + outSlope: 0.00002098945 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0000008602524 + inSlope: 0.00008603939 + outSlope: 0.00008603939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.000003625096 + inSlope: 0.00024996526 + outSlope: 0.00024996526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.000011062918 + inSlope: 0.00058562297 + outSlope: 0.00058562297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.000027528076 + inSlope: 0.0011866846 + outSlope: 0.0011866846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.00005949903 + inSlope: 0.002167638 + outSlope: 0.002167638 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.00011600307 + inSlope: 0.0036637862 + outSlope: 0.0036637862 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.00020904133 + inSlope: 0.005831251 + outSlope: 0.005831251 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.00035401338 + inSlope: 0.008846967 + outSlope: 0.008846967 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.00057014194 + inSlope: 0.012908684 + outSlope: 0.012908684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.00088089844 + inSlope: 0.018234976 + outSlope: 0.018234976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.0013144265 + inSlope: 0.025065219 + outSlope: 0.025065219 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.001903969 + inSlope: 0.03365962 + outSlope: 0.03365962 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.0026882887 + inSlope: 0.044299193 + outSlope: 0.044299193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.0037120983 + inSlope: 0.057285763 + outSlope: 0.057285763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.005026484 + inSlope: 0.07294199 + outSlope: 0.07294199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.0066893226 + inSlope: 0.091611326 + outSlope: 0.091611326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.00876572 + inSlope: 0.11365804 + outSlope: 0.11365804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.011328428 + inSlope: 0.13946727 + outSlope: 0.13946727 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.014458262 + inSlope: 0.16944489 + outSlope: 0.16944489 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.018244542 + inSlope: 0.20401761 + outSlope: 0.20401761 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.022785515 + inSlope: 0.24363306 + outSlope: 0.24363306 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.02818875 + inSlope: 0.28875947 + outSlope: 0.28875947 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.03457161 + inSlope: 0.3398862 + outSlope: 0.3398862 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.04206165 + inSlope: 0.397523 + outSlope: 0.397523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.05079703 + inSlope: 0.46220076 + outSlope: 0.46220076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.060927007 + inSlope: 0.53447145 + outSlope: 0.53447145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.07261221 + inSlope: 0.61490697 + outSlope: 0.61490697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.08602524 + inSlope: 0.70410085 + outSlope: 0.70410085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.10135101 + inSlope: 0.80266714 + outSlope: 0.80266714 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.11878715 + inSlope: 0.91124064 + outSlope: 0.91124064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.13854448 + inSlope: 1.0304772 + outSlope: 1.0304772 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.16084749 + inSlope: 1.1610532 + outSlope: 1.1610532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.18593445 + inSlope: 1.3036662 + outSlope: 1.3036662 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.21405832 + inSlope: 1.4590342 + outSlope: 1.4590342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.24548684 + inSlope: 1.6278962 + outSlope: 1.6278962 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.28050303 + inSlope: 1.8110116 + outSlope: 1.8110116 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.31940565 + inSlope: 2.009161 + outSlope: 2.009161 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.3625097 + inSlope: 2.223147 + outSlope: 2.223147 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.41014642 + inSlope: 2.4537914 + outSlope: 2.4537914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.4626644 + inSlope: 2.7019367 + outSlope: 2.7019367 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.5204295 + inSlope: 2.9684448 + outSlope: 2.9684448 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.58382535 + inSlope: 3.2542043 + outSlope: 3.2542043 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.6532541 + inSlope: 3.5601187 + outSlope: 3.5601187 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.72913647 + inSlope: 3.8871138 + outSlope: 3.8871138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.81191194 + inSlope: 4.236139 + outSlope: 4.236139 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.90204 + inSlope: 4.60816 + outSlope: 4.60816 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 4.800042 + outSlope: 4.800042 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.80004 + outSlope: 4.80004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.097959995 + inSlope: 4.608157 + outSlope: 4.608157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.18808806 + inSlope: 4.2361364 + outSlope: 4.2361364 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.27086353 + inSlope: 3.8871174 + outSlope: 3.8871174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.3467459 + inSlope: 3.560122 + outSlope: 3.560122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.41617465 + inSlope: 3.2542024 + outSlope: 3.2542024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.4795705 + inSlope: 2.9684439 + outSlope: 2.9684439 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.53733563 + inSlope: 2.7019355 + outSlope: 2.7019355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.5898536 + inSlope: 2.4537919 + outSlope: 2.4537919 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.6374904 + inSlope: 2.2231476 + outSlope: 2.2231476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.6805943 + inSlope: 2.0091612 + outSlope: 2.0091612 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.71949697 + inSlope: 1.8110113 + outSlope: 1.8110113 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.75451314 + inSlope: 1.6278951 + outSlope: 1.6278951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.78594166 + inSlope: 1.4590342 + outSlope: 1.4590342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.8140656 + inSlope: 1.3036655 + outSlope: 1.3036655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8391525 + inSlope: 1.1610522 + outSlope: 1.1610522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.86145544 + inSlope: 1.0304775 + outSlope: 1.0304775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.88121283 + inSlope: 0.9112414 + outSlope: 0.9112414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.898649 + inSlope: 0.80266774 + outSlope: 0.80266774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.91397476 + inSlope: 0.7041018 + outSlope: 0.7041018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.92738783 + inSlope: 0.61490726 + outSlope: 0.61490726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.939073 + inSlope: 0.53447074 + outSlope: 0.53447074 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.94920295 + inSlope: 0.4622009 + outSlope: 0.4622009 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.9579384 + inSlope: 0.39752358 + outSlope: 0.39752358 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.9654284 + inSlope: 0.3398853 + outSlope: 0.3398853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.97181123 + inSlope: 0.28875822 + outSlope: 0.28875822 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.97721446 + inSlope: 0.24363303 + outSlope: 0.24363303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.98175544 + inSlope: 0.2040188 + outSlope: 0.2040188 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.98554176 + inSlope: 0.16944587 + outSlope: 0.16944587 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9886716 + inSlope: 0.13946733 + outSlope: 0.13946733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9912343 + inSlope: 0.11365774 + outSlope: 0.11365774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9933107 + inSlope: 0.09161137 + outSlope: 0.09161137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.99497354 + inSlope: 0.07294124 + outSlope: 0.07294124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.9962879 + inSlope: 0.057285145 + outSlope: 0.057285145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9973117 + inSlope: 0.044300027 + outSlope: 0.044300027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.99809605 + inSlope: 0.033660248 + outSlope: 0.033660248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9986856 + inSlope: 0.025064837 + outSlope: 0.025064837 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9991191 + inSlope: 0.018234946 + outSlope: 0.018234946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9994299 + inSlope: 0.01290918 + outSlope: 0.01290918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.999646 + inSlope: 0.008846574 + outSlope: 0.008846574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.99979097 + inSlope: 0.0058310255 + outSlope: 0.0058310255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.999884 + inSlope: 0.0036639292 + outSlope: 0.0036639292 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9999405 + inSlope: 0.0021671066 + outSlope: 0.0021671066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99997246 + inSlope: 0.0011857754 + outSlope: 0.0011857754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9999889 + inSlope: 0.0005855861 + outSlope: 0.0005855861 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99999636 + inSlope: 0.0002511739 + outSlope: 0.0002511739 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99999917 + inSlope: 0.000086158354 + outSlope: 0.000086158354 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9999999 + inSlope: 0.000020444404 + outSlope: 0.000020444404 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1 + inSlope: 0.000002920629 + outSlope: 0.000002920629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.0000027754643 + outSlope: 0.0000027754643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.000000056642126 + inSlope: 0.00004440743 + outSlope: 0.00004440743 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.000001812548 + inSlope: 0.0003358312 + outSlope: 0.0003358312 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.000013764038 + inSlope: 0.0013766303 + outSlope: 0.0013766303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.000058001537 + inSlope: 0.003999444 + outSlope: 0.003999444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.00017700669 + inSlope: 0.0093699675 + outSlope: 0.0093699675 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.00044044922 + inSlope: 0.018986953 + outSlope: 0.018986953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0009519845 + inSlope: 0.034682207 + outSlope: 0.034682207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.0018560492 + inSlope: 0.05862058 + outSlope: 0.05862058 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.0033446613 + inSlope: 0.093300015 + outSlope: 0.093300015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.005664214 + inSlope: 0.14155146 + outSlope: 0.14155146 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.009122271 + inSlope: 0.20653895 + outSlope: 0.20653895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.014094375 + inSlope: 0.2917596 + outSlope: 0.2917596 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.021030825 + inSlope: 0.4010435 + outSlope: 0.4010435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.030463504 + inSlope: 0.5385539 + outSlope: 0.5385539 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.04301262 + inSlope: 0.7087871 + outSlope: 0.7087871 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.059393574 + inSlope: 0.9165722 + outSlope: 0.9165722 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.08042374 + inSlope: 1.1670718 + outSlope: 1.1670718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.10702916 + inSlope: 1.4657812 + outSlope: 1.4657812 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.14025152 + inSlope: 1.8185287 + outSlope: 1.8185287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.18125485 + inSlope: 2.2314763 + outSlope: 2.2314763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.2313322 + inSlope: 2.7111182 + outSlope: 2.7111182 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.29191267 + inSlope: 3.2642817 + outSlope: 3.2642817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.36456823 + inSlope: 3.898129 + outSlope: 3.898129 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.45102 + inSlope: 4.5180902 + outSlope: 4.5180902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.54898 + inSlope: 4.5180902 + outSlope: 4.5180902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.63543177 + inSlope: 3.8981285 + outSlope: 3.8981285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7080872 + inSlope: 3.2642817 + outSlope: 3.2642817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.7686679 + inSlope: 2.7111177 + outSlope: 2.7111177 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.8187452 + inSlope: 2.2314758 + outSlope: 2.2314758 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8597485 + inSlope: 1.8185296 + outSlope: 1.8185296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.89297086 + inSlope: 1.4657819 + outSlope: 1.4657819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9195763 + inSlope: 1.1670717 + outSlope: 1.1670717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.9406064 + inSlope: 0.9165711 + outSlope: 0.9165711 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9569874 + inSlope: 0.70878583 + outSlope: 0.70878583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9695365 + inSlope: 0.5385538 + outSlope: 0.5385538 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.97896916 + inSlope: 0.4010447 + outSlope: 0.4010447 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.98590565 + inSlope: 0.29176062 + outSlope: 0.29176062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.99087775 + inSlope: 0.20653811 + outSlope: 0.20653811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9943358 + inSlope: 0.14155103 + outSlope: 0.14155103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.99665534 + inSlope: 0.09330079 + outSlope: 0.09330079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.998144 + inSlope: 0.058619946 + outSlope: 0.058619946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.999048 + inSlope: 0.034681007 + outSlope: 0.034681007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9995595 + inSlope: 0.01898701 + outSlope: 0.01898701 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.999823 + inSlope: 0.009370838 + outSlope: 0.009370838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.999942 + inSlope: 0.003999798 + outSlope: 0.003999798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99998623 + inSlope: 0.0013770733 + outSlope: 0.0013770733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9999982 + inSlope: 0.00033587235 + outSlope: 0.00033587235 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.99999994 + inSlope: 0.000043809436 + outSlope: 0.000043809436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.000002920629 + outSlope: 0.000002920629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.02517581 + outSlope: 0.02517581 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00051379204 + inSlope: 0.050337017 + outSlope: 0.050337017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.002054572 + inSlope: 0.100624375 + outSlope: 0.100624375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0046209097 + inSlope: 0.15080807 + outSlope: 0.15080807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.008210003 + inSlope: 0.200834 + outSlope: 0.200834 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.012818217 + inSlope: 0.25065553 + outSlope: 0.25065553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.018440843 + inSlope: 0.30022004 + outSlope: 0.30022004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.025072098 + inSlope: 0.34947503 + outSlope: 0.34947503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.03270513 + inSlope: 0.3983707 + outSlope: 0.3983707 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.041332126 + inSlope: 0.44685882 + outSlope: 0.44685882 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.05094427 + inSlope: 0.4948858 + outSlope: 0.4948858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.061531544 + inSlope: 0.5424044 + outSlope: 0.5424044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.07308322 + inSlope: 0.5893667 + outSlope: 0.5893667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.08558732 + inSlope: 0.63572407 + outSlope: 0.63572407 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.09903115 + inSlope: 0.68142754 + outSlope: 0.68142754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.1134007 + inSlope: 0.7264291 + outSlope: 0.7264291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.1286813 + inSlope: 0.7706848 + outSlope: 0.7706848 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.14485723 + inSlope: 0.8141496 + outSlope: 0.8141496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.1619119 + inSlope: 0.8567782 + outSlope: 0.8567782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.17982775 + inSlope: 0.898525 + outSlope: 0.898525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.1985864 + inSlope: 0.9393481 + outSlope: 0.9393481 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.2181685 + inSlope: 0.97920656 + outSlope: 0.97920656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.238554 + inSlope: 1.0180604 + outSlope: 1.0180604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.259722 + inSlope: 1.0558679 + outSlope: 1.0558679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.28165066 + inSlope: 1.0925883 + outSlope: 1.0925883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.3043174 + inSlope: 1.1281865 + outSlope: 1.1281865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.32769907 + inSlope: 1.1626265 + outSlope: 1.1626265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.35177153 + inSlope: 1.1958716 + outSlope: 1.1958716 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.3765102 + inSlope: 1.2278876 + outSlope: 1.2278876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.40188944 + inSlope: 1.2586422 + outSlope: 1.2586422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.42788333 + inSlope: 1.288104 + outSlope: 1.288104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.4544651 + inSlope: 1.3162398 + outSlope: 1.3162398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.48160738 + inSlope: 1.3430264 + outSlope: 1.3430264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.50928247 + inSlope: 1.368431 + outSlope: 1.368431 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.53746176 + inSlope: 1.3924268 + outSlope: 1.3924268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.5661163 + inSlope: 1.4149951 + outSlope: 1.4149951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.59521663 + inSlope: 1.4361098 + outSlope: 1.4361098 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.624733 + inSlope: 1.4557495 + outSlope: 1.4557495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.65463495 + inSlope: 1.4738896 + outSlope: 1.4738896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.6848917 + inSlope: 1.4905174 + outSlope: 1.4905174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.71547246 + inSlope: 1.5056142 + outSlope: 1.5056142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.7463454 + inSlope: 1.5191622 + outSlope: 1.5191622 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.77747905 + inSlope: 1.5311514 + outSlope: 1.5311514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.80884135 + inSlope: 1.5415664 + outSlope: 1.5415664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.8404001 + inSlope: 1.5503969 + outSlope: 1.5503969 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.8721228 + inSlope: 1.5576334 + outSlope: 1.5576334 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.90397704 + inSlope: 1.5632688 + outSlope: 1.5632688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9359298 + inSlope: 1.5673001 + outSlope: 1.5673001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.96794844 + inSlope: 1.5697212 + outSlope: 1.5697212 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1.5705273 + outSlope: 1.5705273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1.5705266 + outSlope: 1.5705266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.032051563 + inSlope: 1.5697205 + outSlope: 1.5697205 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.064070225 + inSlope: 1.5672992 + outSlope: 1.5672992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.09602296 + inSlope: 1.5632703 + outSlope: 1.5632703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.12787718 + inSlope: 1.5576348 + outSlope: 1.5576348 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.1595999 + inSlope: 1.550396 + outSlope: 1.550396 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.19115865 + inSlope: 1.5415655 + outSlope: 1.5415655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.22252095 + inSlope: 1.5311508 + outSlope: 1.5311508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.2536546 + inSlope: 1.5191646 + outSlope: 1.5191646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.28452766 + inSlope: 1.5056152 + outSlope: 1.5056152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.3151083 + inSlope: 1.4905162 + outSlope: 1.4905162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.34536505 + inSlope: 1.4738891 + outSlope: 1.4738891 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.37526703 + inSlope: 1.455749 + outSlope: 1.455749 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.40478337 + inSlope: 1.4361088 + outSlope: 1.4361088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.43388373 + inSlope: 1.414994 + outSlope: 1.414994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.46253824 + inSlope: 1.3924289 + outSlope: 1.3924289 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.49071753 + inSlope: 1.368432 + outSlope: 1.368432 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.5183926 + inSlope: 1.3430254 + outSlope: 1.3430254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.5455349 + inSlope: 1.3162398 + outSlope: 1.3162398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.5721167 + inSlope: 1.2881045 + outSlope: 1.2881045 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.5981106 + inSlope: 1.2586427 + outSlope: 1.2586427 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.62348986 + inSlope: 1.2278879 + outSlope: 1.2278879 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.64822847 + inSlope: 1.1958711 + outSlope: 1.1958711 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.67230093 + inSlope: 1.1626256 + outSlope: 1.1626256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.6956826 + inSlope: 1.1281865 + outSlope: 1.1281865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.71834934 + inSlope: 1.0925883 + outSlope: 1.0925883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.740278 + inSlope: 1.0558672 + outSlope: 1.0558672 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.76144594 + inSlope: 1.0180597 + outSlope: 1.0180597 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.7818315 + inSlope: 0.97920805 + outSlope: 0.97920805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.80141366 + inSlope: 0.93934876 + outSlope: 0.93934876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.82017225 + inSlope: 0.89852417 + outSlope: 0.89852417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8380881 + inSlope: 0.8567782 + outSlope: 0.8567782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8551428 + inSlope: 0.81415015 + outSlope: 0.81415015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8713187 + inSlope: 0.7706857 + outSlope: 0.7706857 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.88659936 + inSlope: 0.72642946 + outSlope: 0.72642946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9009689 + inSlope: 0.6814265 + outSlope: 0.6814265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9144127 + inSlope: 0.6357231 + outSlope: 0.6357231 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9269168 + inSlope: 0.5893669 + outSlope: 0.5893669 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.93846846 + inSlope: 0.54240465 + outSlope: 0.54240465 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.94905573 + inSlope: 0.49488527 + outSlope: 0.49488527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9586679 + inSlope: 0.44685847 + outSlope: 0.44685847 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9672949 + inSlope: 0.39837086 + outSlope: 0.39837086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9749279 + inSlope: 0.34947515 + outSlope: 0.34947515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.98155916 + inSlope: 0.3002202 + outSlope: 0.3002202 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9871818 + inSlope: 0.25065568 + outSlope: 0.25065568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99179 + inSlope: 0.20083533 + outSlope: 0.20083533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99537915 + inSlope: 0.15080789 + outSlope: 0.15080789 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9979454 + inSlope: 0.10062297 + outSlope: 0.10062297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9994862 + inSlope: 0.05033704 + outSlope: 0.05033704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.025175821 + outSlope: 0.025175821 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.050337017 + outSlope: 0.050337017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.001027286 + inSlope: 0.10057254 + outSlope: 0.10057254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0041050017 + inSlope: 0.2007318 + outSlope: 0.2007318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.009220421 + inSlope: 0.30006528 + outSlope: 0.30006528 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.016352564 + inSlope: 0.39816692 + outSlope: 0.39816692 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.025472134 + inSlope: 0.49463162 + outSlope: 0.49463162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.03654161 + inSlope: 0.58906424 + outSlope: 0.58906424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.049515575 + inSlope: 0.6810765 + outSlope: 0.6810765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.06434065 + inSlope: 0.7702893 + outSlope: 0.7702893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.08095595 + inSlope: 0.8563373 + outSlope: 0.8563373 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.0992932 + inSlope: 0.9388658 + outSlope: 0.9388658 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.119277 + inSlope: 1.0175372 + outSlope: 1.0175372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.14082533 + inSlope: 1.0920272 + outSlope: 1.0920272 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.16384953 + inSlope: 1.162029 + outSlope: 1.162029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.1882551 + inSlope: 1.227257 + outSlope: 1.227257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.21394166 + inSlope: 1.287441 + outSlope: 1.287441 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.24080369 + inSlope: 1.3423355 + outSlope: 1.3423355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.26873088 + inSlope: 1.391713 + outSlope: 1.391713 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.29760832 + inSlope: 1.4353724 + outSlope: 1.4353724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.32731748 + inSlope: 1.4731336 + outSlope: 1.4731336 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.35773623 + inSlope: 1.5048399 + outSlope: 1.5048399 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.38873953 + inSlope: 1.5303643 + outSlope: 1.5303643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.42020005 + inSlope: 1.5495999 + outSlope: 1.5495999 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.45198852 + inSlope: 1.5624667 + outSlope: 1.5624667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.48397422 + inSlope: 1.5689137 + outSlope: 1.5689137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5160258 + inSlope: 1.5689137 + outSlope: 1.5689137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.5480115 + inSlope: 1.5624664 + outSlope: 1.5624664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.5797999 + inSlope: 1.5496002 + outSlope: 1.5496002 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.61126053 + inSlope: 1.530365 + outSlope: 1.530365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.6422638 + inSlope: 1.5048394 + outSlope: 1.5048394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.6726825 + inSlope: 1.4731331 + outSlope: 1.4731331 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.7023917 + inSlope: 1.4353724 + outSlope: 1.4353724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.7312691 + inSlope: 1.3917133 + outSlope: 1.3917133 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.7591963 + inSlope: 1.3423352 + outSlope: 1.3423352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.78605837 + inSlope: 1.2874405 + outSlope: 1.2874405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.8117449 + inSlope: 1.227257 + outSlope: 1.227257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.83615047 + inSlope: 1.1620293 + outSlope: 1.1620293 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.85917467 + inSlope: 1.0920277 + outSlope: 1.0920277 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.880723 + inSlope: 1.0175369 + outSlope: 1.0175369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.90070677 + inSlope: 0.93886554 + outSlope: 0.93886554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9190441 + inSlope: 0.8563388 + outSlope: 0.8563388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9356594 + inSlope: 0.77028966 + outSlope: 0.77028966 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.95048445 + inSlope: 0.68107605 + outSlope: 0.68107605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9634584 + inSlope: 0.5890631 + outSlope: 0.5890631 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.97452784 + inSlope: 0.4946319 + outSlope: 0.4946319 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.98364747 + inSlope: 0.39816883 + outSlope: 0.39816883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99077964 + inSlope: 0.30006492 + outSlope: 0.30006492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.995895 + inSlope: 0.20073044 + outSlope: 0.20073044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9989727 + inSlope: 0.100571856 + outSlope: 0.100571856 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.05033704 + outSlope: 0.05033704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 10.290323 + outSlope: 10.290323 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.2100066 + inSlope: 12.382375 + outSlope: 12.382375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.50540304 + inSlope: 14.794611 + outSlope: 14.794611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.8138683 + inSlope: 14.044153 + outSlope: 14.044153 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 1.0786338 + inSlope: 11.040623 + outSlope: 11.040623 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 1.264506 + inSlope: 6.860612 + outSlope: 6.860612 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 1.3586588 + inSlope: 2.5196607 + outSlope: 2.5196607 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 1.3673493 + inSlope: -1.1890029 + outSlope: -1.1890029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.3101281 + inSlope: -3.777382 + outSlope: -3.777382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.2131704 + inSlope: -5.0722027 + outSlope: -5.0722027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.1030993 + inSlope: -5.1674433 + outSlope: -5.1674433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0022544 + inSlope: -4.3421707 + outSlope: -4.3421707 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9258679 + inSlope: -2.9664814 + outSlope: -2.9664814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.8811735 + inSlope: -1.4148178 + outSlope: -1.4148178 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.86812025 + inSlope: 0.00009393692 + outSlope: 0.00009393692 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8811773 + inSlope: 1.0663304 + outSlope: 1.0663304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9116439 + inSlope: 1.6847181 + outSlope: 1.6847181 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.94994134 + inSlope: 1.8582635 + outSlope: 1.8582635 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9874914 + inSlope: 1.6664568 + outSlope: 1.6664568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.01796 + inSlope: 1.232626 + outSlope: 1.232626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.0378027 + inSlope: 0.691724 + outSlope: 0.691724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.0461936 + inSlope: 0.16402838 + outSlope: 0.16402838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0444977 + inSlope: -0.2621115 + outSlope: -0.2621115 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 1.0354952 + inSlope: -0.53774005 + outSlope: -0.53774005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.0225492 + inSlope: -0.6520976 + outSlope: -0.6520976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.008879 + inSlope: -0.6250745 + outSlope: -0.6250745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.9970359 + inSlope: -0.49620318 + outSlope: -0.49620318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.98862576 + inSlope: -0.31294656 + outSlope: -0.31294656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.9842626 + inSlope: -0.120522365 + outSlope: -0.120522365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9837065 + inSlope: 0.04540556 + outSlope: 0.04540556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9861159 + inSlope: 0.16256514 + outSlope: 0.16256514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9903418 + inSlope: 0.22263518 + outSlope: 0.22263518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.995203 + inSlope: 0.22925332 + outSlope: 0.22925332 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.99969906 + inSlope: 0.19444063 + outSlope: 0.19444063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 1.0031394 + inSlope: 0.1344553 + outSlope: 0.1344553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 1.005187 + inSlope: 0.06591275 + outSlope: 0.06591275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 1.0058297 + inSlope: 0.002815486 + outSlope: 0.002815486 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.005302 + inSlope: -0.04522302 + outSlope: -0.04522302 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0039839 + inSlope: -0.07357356 + outSlope: -0.07357356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.002299 + inSlope: -0.082165934 + outSlope: -0.082165934 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.0006301 + inSlope: -0.07437515 + outSlope: -0.07437515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9992632 + inSlope: -0.055592712 + outSlope: -0.055592712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99836105 + inSlope: -0.031791046 + outSlope: -0.031791046 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99796563 + inSlope: -0.008334015 + outSlope: -0.008334015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9980209 + inSlope: 0.010790264 + outSlope: 0.010790264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99840605 + inSlope: 0.023327023 + outSlope: 0.023327023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.998973 + inSlope: 0.028725807 + outSlope: 0.028725807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99957854 + inSlope: 0.02780731 + outSlope: 0.02780731 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.000108 + inSlope: 0.02228878 + outSlope: 0.02228878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1.0004883 + inSlope: 0.018633613 + outSlope: 0.018633613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.00048828125 + inSlope: 0.018633604 + outSlope: 0.018633604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.000108003616 + inSlope: 0.02228877 + outSlope: 0.02228877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00042146444 + inSlope: 0.027807295 + outSlope: 0.027807295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.001026988 + inSlope: 0.028725833 + outSlope: 0.028725833 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0015939474 + inSlope: 0.023327053 + outSlope: 0.023327053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0019791126 + inSlope: 0.010790256 + outSlope: 0.010790256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.0020343661 + inSlope: -0.008334008 + outSlope: -0.008334008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0016389489 + inSlope: -0.03179104 + outSlope: -0.03179104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.000736773 + inSlope: -0.05559269 + outSlope: -0.05559269 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.0006301403 + inSlope: -0.07437523 + outSlope: -0.07437523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.0022989511 + inSlope: -0.08216602 + outSlope: -0.08216602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.0039838552 + inSlope: -0.073573545 + outSlope: -0.073573545 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.0053019524 + inSlope: -0.045222998 + outSlope: -0.045222998 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: -0.005829692 + inSlope: 0.0028154636 + outSlope: 0.0028154636 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: -0.0051870346 + inSlope: 0.06591273 + outSlope: 0.06591273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: -0.0031393766 + inSlope: 0.13445553 + outSlope: 0.13445553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.00030094385 + inSlope: 0.19444071 + outSlope: 0.19444071 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.004796982 + inSlope: 0.22925314 + outSlope: 0.22925314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.009658217 + inSlope: 0.22263518 + outSlope: 0.22263518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.013884127 + inSlope: 0.16256505 + outSlope: 0.16256505 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.016293526 + inSlope: 0.04540547 + outSlope: 0.04540547 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.015737414 + inSlope: -0.12052268 + outSlope: -0.12052268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.011374235 + inSlope: -0.31294656 + outSlope: -0.31294656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.0029640794 + inSlope: -0.4962029 + outSlope: -0.4962029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.008878946 + inSlope: -0.6250745 + outSlope: -0.6250745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.022549152 + inSlope: -0.6520976 + outSlope: -0.6520976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: -0.035495162 + inSlope: -0.53774035 + outSlope: -0.53774035 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.04449773 + inSlope: -0.2621088 + outSlope: -0.2621088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.04619348 + inSlope: 0.1640285 + outSlope: 0.1640285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.037802696 + inSlope: 0.6917218 + outSlope: 0.6917218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.017959952 + inSlope: 1.2326267 + outSlope: 1.2326267 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.012508571 + inSlope: 1.6664568 + outSlope: 1.6664568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.050058663 + inSlope: 1.8582633 + outSlope: 1.8582633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.08835602 + inSlope: 1.6847174 + outSlope: 1.6847174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.118822694 + inSlope: 1.0663297 + outSlope: 1.0663297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.13187975 + inSlope: 0.00009346008 + outSlope: 0.00009346008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.11882651 + inSlope: -1.4148183 + outSlope: -1.4148183 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.074132085 + inSlope: -2.9664798 + outSlope: -2.9664798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.0022542477 + inSlope: -4.342172 + outSlope: -4.342172 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.103099346 + inSlope: -5.1674433 + outSlope: -5.1674433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.21317053 + inSlope: -5.072199 + outSlope: -5.072199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.3101281 + inSlope: -3.777381 + outSlope: -3.777381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: -0.36734927 + inSlope: -1.1890028 + outSlope: -1.1890028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: -0.3586588 + inSlope: 2.5196617 + outSlope: 2.5196617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: -0.26450598 + inSlope: 6.86061 + outSlope: 6.86061 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: -0.07863402 + inSlope: 11.04062 + outSlope: 11.04062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.18613213 + inSlope: 14.044155 + outSlope: 14.044155 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.49459732 + inSlope: 14.794611 + outSlope: 14.794611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.7899935 + inSlope: 12.382372 + outSlope: 12.382372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 10.290322 + outSlope: 10.290322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 12.382375 + outSlope: 12.382375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.25270152 + inSlope: 13.213264 + outSlope: 13.213264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.5393169 + inSlope: 10.452383 + outSlope: 10.452383 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.6793294 + inSlope: 2.835805 + outSlope: 2.835805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.65506405 + inSlope: -3.1306028 + outSlope: -3.1306028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.5515497 + inSlope: -4.7071867 + outSlope: -4.7071867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.46293396 + inSlope: -2.878494 + outSlope: -2.878494 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.43406013 + inSlope: -0.17424345 + outSlope: -0.17424345 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.45582196 + inSlope: 1.462297 + outSlope: 1.462297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.4937457 + inSlope: 1.5454446 + outSlope: 1.5454446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.51890135 + inSlope: 0.69832706 + outSlope: 0.69832706 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.52224886 + inSlope: -0.18685582 + outSlope: -0.18685582 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.5112746 + inSlope: -0.58140725 + outSlope: -0.58140725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.49851796 + inSlope: -0.46901047 + outSlope: -0.46901047 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.4921313 + inSlope: -0.13377042 + outSlope: -0.13377042 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.49305794 + inSlope: 0.13402036 + outSlope: 0.13402036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.4976015 + inSlope: 0.20853788 + outSlope: 0.20853788 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.5015697 + inSlope: 0.13017666 + outSlope: 0.13017666 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.50291485 + inSlope: 0.010344867 + outSlope: 0.010344867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.5019919 + inSlope: -0.06369448 + outSlope: -0.06369448 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.50031507 + inSlope: -0.06887932 + outSlope: -0.06887932 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.49918053 + inSlope: -0.031963363 + outSlope: -0.031963363 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.49901044 + inSlope: 0.007496508 + outSlope: 0.007496508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.4994865 + inSlope: 0.02556717 + outSlope: 0.02556717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.500054 + inSlope: 0.011257565 + outSlope: 0.011257565 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.499946 + inSlope: 0.011257565 + outSlope: 0.011257565 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.5005135 + inSlope: 0.025567185 + outSlope: 0.025567185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.50098956 + inSlope: 0.0074958066 + outSlope: 0.0074958066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.50081944 + inSlope: -0.031963352 + outSlope: -0.031963352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.49968493 + inSlope: -0.06887865 + outSlope: -0.06887865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.49800807 + inSlope: -0.06369454 + outSlope: -0.06369454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.49708515 + inSlope: 0.010344867 + outSlope: 0.010344867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.4984303 + inSlope: 0.13017681 + outSlope: 0.13017681 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.5023985 + inSlope: 0.20853695 + outSlope: 0.20853695 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.50694203 + inSlope: 0.13402003 + outSlope: 0.13402003 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.5078687 + inSlope: -0.13377064 + outSlope: -0.13377064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.501482 + inSlope: -0.46901065 + outSlope: -0.46901065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.48872542 + inSlope: -0.5814067 + outSlope: -0.5814067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.47775114 + inSlope: -0.18685746 + outSlope: -0.18685746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.4810986 + inSlope: 0.6983264 + outSlope: 0.6983264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.5062543 + inSlope: 1.5454446 + outSlope: 1.5454446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.544178 + inSlope: 1.4622976 + outSlope: 1.4622976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.5659399 + inSlope: -0.17424327 + outSlope: -0.17424327 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.53706604 + inSlope: -2.878496 + outSlope: -2.878496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.44845033 + inSlope: -4.7071867 + outSlope: -4.7071867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.34493607 + inSlope: -3.1306014 + outSlope: -3.1306014 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.32067066 + inSlope: 2.8358114 + outSlope: 2.8358114 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.46068335 + inSlope: 10.452391 + outSlope: 10.452391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.74729866 + inSlope: 13.213264 + outSlope: 13.213264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 12.382372 + outSlope: 12.382372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -0.03157018 + outSlope: -0.03157018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.00064428936 + inSlope: -0.060974594 + outSlope: -0.060974594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: -0.0024887589 + inSlope: -0.11653477 + outSlope: -0.11653477 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: -0.005400811 + inSlope: -0.16559766 + outSlope: -0.16559766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: -0.009247847 + inSlope: -0.20816328 + outSlope: -0.20816328 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: -0.013897272 + inSlope: -0.24423158 + outSlope: -0.24423158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: -0.019216483 + inSlope: -0.2738026 + outSlope: -0.2738026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: -0.02507289 + inSlope: -0.2968763 + outSlope: -0.2968763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.031333882 + inSlope: -0.3134527 + outSlope: -0.3134527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.037866876 + inSlope: -0.3235319 + outSlope: -0.3235319 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.04453927 + inSlope: -0.3271137 + outSlope: -0.3271137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.051218454 + inSlope: -0.32419828 + outSlope: -0.32419828 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.05777185 + inSlope: -0.31478554 + outSlope: -0.31478554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: -0.06406684 + inSlope: -0.2988755 + outSlope: -0.2988755 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: -0.06997085 + inSlope: -0.27646816 + outSlope: -0.27646816 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: -0.07535126 + inSlope: -0.24756347 + outSlope: -0.24756347 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: -0.08007548 + inSlope: -0.21216165 + outSlope: -0.21216165 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: -0.08401092 + inSlope: -0.1702623 + outSlope: -0.1702623 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: -0.087024964 + inSlope: -0.1218658 + outSlope: -0.1218658 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.08898503 + inSlope: -0.06697218 + outSlope: -0.06697218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.08975852 + inSlope: -0.005580929 + outSlope: -0.005580929 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.08921283 + inSlope: 0.06230742 + outSlope: 0.06230742 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.087215364 + inSlope: 0.13669297 + outSlope: 0.13669297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: -0.08363352 + inSlope: 0.21757597 + outSlope: 0.21757597 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.07833471 + inSlope: 0.3049562 + outSlope: 0.3049562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.071186334 + inSlope: 0.39883387 + outSlope: 0.39883387 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: -0.062055785 + inSlope: 0.4992087 + outSlope: 0.4992087 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.05081048 + inSlope: 0.6060808 + outSlope: 0.6060808 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.037317768 + inSlope: 0.71945024 + outSlope: 0.71945024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.021445137 + inSlope: 0.83931696 + outSlope: 0.83931696 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.0030599472 + inSlope: 0.96568096 + outSlope: 0.96568096 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.017970396 + inSlope: 1.0985422 + outSlope: 1.0985422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.04177849 + inSlope: 1.2379007 + outSlope: 1.2379007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.068496935 + inSlope: 1.3837566 + outSlope: 1.3837566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.09825841 + inSlope: 1.5361102 + outSlope: 1.5361102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.13119537 + inSlope: 1.6949606 + outSlope: 1.6949606 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.16744044 + inSlope: 1.8603082 + outSlope: 1.8603082 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.20712627 + inSlope: 2.0321531 + outSlope: 2.0321531 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.25038543 + inSlope: 2.210495 + outSlope: 2.210495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.29735053 + inSlope: 2.3953357 + outSlope: 2.3953357 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.34815434 + inSlope: 2.5866725 + outSlope: 2.5866725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.4029291 + inSlope: 2.7845063 + outSlope: 2.7845063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.4618076 + inSlope: 2.9888382 + outSlope: 2.9888382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.52492243 + inSlope: 3.1996675 + outSlope: 3.1996675 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.5924062 + inSlope: 3.4169927 + outSlope: 3.4169927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.66439146 + inSlope: 3.6408157 + outSlope: 3.6408157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.7410111 + inSlope: 3.8711379 + outSlope: 3.8711379 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.82239723 + inSlope: 4.107955 + outSlope: 4.107955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.90868264 + inSlope: 4.3512697 + outSlope: 4.3512697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 4.4745526 + outSlope: 4.4745526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.4745507 + outSlope: 4.4745507 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.091317356 + inSlope: 4.351268 + outSlope: 4.351268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.17760277 + inSlope: 4.107953 + outSlope: 4.107953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.25898892 + inSlope: 3.8711414 + outSlope: 3.8711414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.33560854 + inSlope: 3.640819 + outSlope: 3.640819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.4075938 + inSlope: 3.4169908 + outSlope: 3.4169908 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.47507757 + inSlope: 3.1996655 + outSlope: 3.1996655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.5381924 + inSlope: 2.9888377 + outSlope: 2.9888377 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.59707093 + inSlope: 2.7845092 + outSlope: 2.7845092 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.6518458 + inSlope: 2.5866737 + outSlope: 2.5866737 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.7026495 + inSlope: 2.3953354 + outSlope: 2.3953354 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.7496146 + inSlope: 2.210495 + outSlope: 2.210495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.79287374 + inSlope: 2.0321524 + outSlope: 2.0321524 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.8325596 + inSlope: 1.8603065 + outSlope: 1.8603065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.86880463 + inSlope: 1.694958 + outSlope: 1.694958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.90174156 + inSlope: 1.5361106 + outSlope: 1.5361106 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.931503 + inSlope: 1.3837581 + outSlope: 1.3837581 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9582215 + inSlope: 1.2379018 + outSlope: 1.2379018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9820296 + inSlope: 1.0985435 + outSlope: 1.0985435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.00306 + inSlope: 0.9656805 + outSlope: 0.9656805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.0214452 + inSlope: 0.83931506 + outSlope: 0.83931506 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.0373178 + inSlope: 0.71945024 + outSlope: 0.71945024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0508105 + inSlope: 0.6060827 + outSlope: 0.6060827 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 1.0620558 + inSlope: 0.4992081 + outSlope: 0.4992081 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.0711863 + inSlope: 0.39883232 + outSlope: 0.39883232 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.0783347 + inSlope: 0.30495748 + outSlope: 0.30495748 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 1.0836335 + inSlope: 0.2175781 + outSlope: 0.2175781 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0872154 + inSlope: 0.13669406 + outSlope: 0.13669406 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.0892129 + inSlope: 0.062305637 + outSlope: 0.062305637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.0897585 + inSlope: -0.005581322 + outSlope: -0.005581322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.0889851 + inSlope: -0.06697294 + outSlope: -0.06697294 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 1.0870249 + inSlope: -0.12186617 + outSlope: -0.12186617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 1.084011 + inSlope: -0.170261 + outSlope: -0.170261 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 1.0800755 + inSlope: -0.21216291 + outSlope: -0.21216291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 1.0753512 + inSlope: -0.24756385 + outSlope: -0.24756385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 1.0699708 + inSlope: -0.27646673 + outSlope: -0.27646673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 1.0640669 + inSlope: -0.29887673 + outSlope: -0.29887673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.0577718 + inSlope: -0.3147854 + outSlope: -0.3147854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0512185 + inSlope: -0.32419857 + outSlope: -0.32419857 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.0445392 + inSlope: -0.3271158 + outSlope: -0.3271158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.0378668 + inSlope: -0.32352927 + outSlope: -0.32352927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.0313339 + inSlope: -0.31345066 + outSlope: -0.31345066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 1.0250729 + inSlope: -0.2968761 + outSlope: -0.2968761 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 1.0192165 + inSlope: -0.2738031 + outSlope: -0.2738031 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 1.0138973 + inSlope: -0.24423176 + outSlope: -0.24423176 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 1.0092479 + inSlope: -0.20816463 + outSlope: -0.20816463 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 1.0054008 + inSlope: -0.16559939 + outSlope: -0.16559939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 1.0024887 + inSlope: -0.1165331 + outSlope: -0.1165331 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.0006443 + inSlope: -0.060973972 + outSlope: -0.060973972 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.031572 + outSlope: -0.031572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -0.060974594 + outSlope: -0.060974594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.0012443794 + inSlope: -0.11328613 + outSlope: -0.11328613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: -0.0046239235 + inSlope: -0.20491463 + outSlope: -0.20491463 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: -0.009608242 + inSlope: -0.27055395 + outSlope: -0.27055395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: -0.015666941 + inSlope: -0.3102041 + outSlope: -0.3102041 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: -0.022269635 + inSlope: -0.3238651 + outSlope: -0.3238651 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: -0.028885925 + inSlope: -0.3115369 + outSlope: -0.3115369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: -0.034985427 + inSlope: -0.2732195 + outSlope: -0.2732195 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.04003774 + inSlope: -0.2089129 + outSlope: -0.2089129 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.043512482 + inSlope: -0.118617244 + outSlope: -0.118617244 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.04487926 + inSlope: -0.0023323726 + outSlope: -0.0023323726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.043607682 + inSlope: 0.13994168 + outSlope: 0.13994168 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.039167356 + inSlope: 0.3082049 + outSlope: 0.3082049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: -0.031027893 + inSlope: 0.5024574 + outSlope: 0.5024574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: -0.018658884 + inSlope: 0.7226989 + outSlope: 0.7226989 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: -0.0015299736 + inSlope: 0.96892965 + outSlope: 0.96892965 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.020889245 + inSlope: 1.2411494 + outSlope: 1.2411494 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.049129207 + inSlope: 1.5393586 + outSlope: 1.5393586 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.08372022 + inSlope: 1.8635569 + outSlope: 1.8635569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.12519272 + inSlope: 2.2137444 + outSlope: 2.2137444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.17407717 + inSlope: 2.589921 + outSlope: 2.589921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.2309038 + inSlope: 2.992087 + outSlope: 2.992087 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.2962031 + inSlope: 3.4202416 + outSlope: 3.4202416 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.37050554 + inSlope: 3.8743854 + outSlope: 3.8743854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.45434132 + inSlope: 4.2912545 + outSlope: 4.2912545 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5456587 + inSlope: 4.291253 + outSlope: 4.291253 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.6294944 + inSlope: 3.874385 + outSlope: 3.874385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7037968 + inSlope: 3.4202418 + outSlope: 3.4202418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.76909626 + inSlope: 2.9920864 + outSlope: 2.9920864 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.8259229 + inSlope: 2.589922 + outSlope: 2.589922 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8748073 + inSlope: 2.2137446 + outSlope: 2.2137446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9162798 + inSlope: 1.8635569 + outSlope: 1.8635569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9508708 + inSlope: 1.5393584 + outSlope: 1.5393584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.9791107 + inSlope: 1.2411504 + outSlope: 1.2411504 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 1.00153 + inSlope: 0.9689287 + outSlope: 0.9689287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 1.0186589 + inSlope: 0.722698 + outSlope: 0.722698 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 1.0310279 + inSlope: 0.50245917 + outSlope: 0.50245917 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.0391674 + inSlope: 0.30820522 + outSlope: 0.30820522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0436077 + inSlope: 0.13994193 + outSlope: 0.13994193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.0448793 + inSlope: -0.0023334846 + outSlope: -0.0023334846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.0435125 + inSlope: -0.118618324 + outSlope: -0.118618324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.0400378 + inSlope: -0.20891258 + outSlope: -0.20891258 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 1.0349854 + inSlope: -0.273219 + outSlope: -0.273219 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 1.028886 + inSlope: -0.31153765 + outSlope: -0.31153765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 1.0222696 + inSlope: -0.32386562 + outSlope: -0.32386562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 1.015667 + inSlope: -0.31020248 + outSlope: -0.31020248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 1.0096083 + inSlope: -0.27055496 + outSlope: -0.27055496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 1.0046239 + inSlope: -0.20491424 + outSlope: -0.20491424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.0012444 + inSlope: -0.113285355 + outSlope: -0.113285355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.060976893 + outSlope: -0.060976893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.05512274 + outSlope: 0.05512274 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0011249539 + inSlope: 0.031749398 + outSlope: 0.031749398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0012958937 + inSlope: 0.009012432 + outSlope: 0.009012432 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0014928082 + inSlope: 0.010381917 + outSlope: 0.010381917 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0017196453 + inSlope: 0.011959475 + outSlope: 0.011959475 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0019809501 + inSlope: 0.013776734 + outSlope: 0.013776734 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.002281961 + inSlope: 0.015870143 + outSlope: 0.015870143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.002628711 + inSlope: 0.018281661 + outSlope: 0.018281661 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.003028151 + inSlope: 0.021059643 + outSlope: 0.021059643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.0034882883 + inSlope: 0.024259709 + outSlope: 0.024259709 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.0040183435 + inSlope: 0.027946007 + outSlope: 0.027946007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.0046289414 + inSlope: 0.032192472 + outSlope: 0.032192472 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.005332322 + inSlope: 0.037084218 + outSlope: 0.037084218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.0061425827 + inSlope: 0.042719252 + outSlope: 0.042719252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.0070759654 + inSlope: 0.049210556 + outSlope: 0.049210556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.008151177 + inSlope: 0.056688268 + outSlope: 0.056688268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.009389771 + inSlope: 0.0653023 + outSlope: 0.0653023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.010816578 + inSlope: 0.07522516 + outSlope: 0.07522516 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.012460186 + inSlope: 0.08665575 + outSlope: 0.08665575 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.014353545 + inSlope: 0.09982344 + outSlope: 0.09982344 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.016534613 + inSlope: 0.11499189 + outSlope: 0.11499189 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.019047093 + inSlope: 0.13246512 + outSlope: 0.13246512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.02194135 + inSlope: 0.15259348 + outSlope: 0.15259348 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.0252754 + inSlope: 0.17578049 + outSlope: 0.17578049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.029116066 + inSlope: 0.2024909 + outSlope: 0.2024909 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.03354033 + inSlope: 0.23326 + outSlope: 0.23326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.038636878 + inSlope: 0.26870453 + outSlope: 0.26870453 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.044507857 + inSlope: 0.3095349 + outSlope: 0.3095349 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.05127097 + inSlope: 0.35656962 + outSlope: 0.35656962 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.059061732 + inSlope: 0.4107514 + outSlope: 0.4107514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.068036325 + inSlope: 0.47316626 + outSlope: 0.47316626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.07837463 + inSlope: 0.54506516 + outSlope: 0.54506516 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.09028387 + inSlope: 0.6278893 + outSlope: 0.6278893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.10400275 + inSlope: 0.72329885 + outSlope: 0.72329885 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.119806305 + inSlope: 0.8332063 + outSlope: 0.8332063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.1380112 + inSlope: 0.9598143 + outSlope: 0.9598143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.15898238 + inSlope: 1.105661 + outSlope: 1.105661 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.1831402 + inSlope: 1.2736691 + outSlope: 1.2736691 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.21096885 + inSlope: 1.4672065 + outSlope: 1.4672065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.24302615 + inSlope: 1.6901529 + outSlope: 1.6901529 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.27995476 + inSlope: 1.9469767 + outSlope: 1.9469767 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.32249466 + inSlope: 2.2428246 + outSlope: 2.2428246 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.37149858 + inSlope: 2.5836287 + outSlope: 2.5836287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.42794883 + inSlope: 2.976218 + outSlope: 2.976218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.4929768 + inSlope: 3.428462 + outSlope: 3.428462 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.567886 + inSlope: 3.9494267 + outSlope: 3.9494267 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.6541781 + inSlope: 4.549556 + outSlope: 4.549556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.7535823 + inSlope: 5.2408733 + outSlope: 5.2408733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.86809117 + inSlope: 6.037236 + outSlope: 6.037236 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 6.463536 + outSlope: 6.463536 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 6.463533 + outSlope: 6.463533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.13190883 + inSlope: 6.037234 + outSlope: 6.037234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.2464177 + inSlope: 5.2408705 + outSlope: 5.2408705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.34582192 + inSlope: 4.5495596 + outSlope: 4.5495596 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.432114 + inSlope: 3.9494317 + outSlope: 3.9494317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.5070232 + inSlope: 3.4284601 + outSlope: 3.4284601 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.57205117 + inSlope: 2.9762158 + outSlope: 2.9762158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.6285014 + inSlope: 2.5836282 + outSlope: 2.5836282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.6775054 + inSlope: 2.242826 + outSlope: 2.242826 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.7200453 + inSlope: 1.9469774 + outSlope: 1.9469774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.75697386 + inSlope: 1.6901526 + outSlope: 1.6901526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.78903115 + inSlope: 1.4672053 + outSlope: 1.4672053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.8168598 + inSlope: 1.2736683 + outSlope: 1.2736683 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.8410176 + inSlope: 1.1056603 + outSlope: 1.1056603 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.8619888 + inSlope: 0.9598143 + outSlope: 0.9598143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8801937 + inSlope: 0.83320725 + outSlope: 0.83320725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8959972 + inSlope: 0.72329915 + outSlope: 0.72329915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9097161 + inSlope: 0.6278895 + outSlope: 0.6278895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9216254 + inSlope: 0.5450653 + outSlope: 0.5450653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9319637 + inSlope: 0.4731664 + outSlope: 0.4731664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9409383 + inSlope: 0.4107511 + outSlope: 0.4107511 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.94872904 + inSlope: 0.35656935 + outSlope: 0.35656935 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.95549214 + inSlope: 0.30953535 + outSlope: 0.30953535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.96136314 + inSlope: 0.26870495 + outSlope: 0.26870495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.9664597 + inSlope: 0.23325896 + outSlope: 0.23325896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.9708839 + inSlope: 0.20249012 + outSlope: 0.20249012 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.9747246 + inSlope: 0.17578098 + outSlope: 0.17578098 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.97805864 + inSlope: 0.1525939 + outSlope: 0.1525939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.9809529 + inSlope: 0.13246492 + outSlope: 0.13246492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9834654 + inSlope: 0.11499101 + outSlope: 0.11499101 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9856464 + inSlope: 0.099824175 + outSlope: 0.099824175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9875398 + inSlope: 0.086656526 + outSlope: 0.086656526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9891834 + inSlope: 0.075225174 + outSlope: 0.075225174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.99061024 + inSlope: 0.06530225 + outSlope: 0.06530225 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9918488 + inSlope: 0.05668786 + outSlope: 0.05668786 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.99292403 + inSlope: 0.049211137 + outSlope: 0.049211137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.99385744 + inSlope: 0.04271858 + outSlope: 0.04271858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.99466765 + inSlope: 0.037083223 + outSlope: 0.037083223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.99537104 + inSlope: 0.032192633 + outSlope: 0.032192633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.99598163 + inSlope: 0.027946 + outSlope: 0.027946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9965117 + inSlope: 0.024260167 + outSlope: 0.024260167 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.99697185 + inSlope: 0.021060657 + outSlope: 0.021060657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9973713 + inSlope: 0.018281676 + outSlope: 0.018281676 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99771804 + inSlope: 0.015869237 + outSlope: 0.015869237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.99801904 + inSlope: 0.013776608 + outSlope: 0.013776608 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99828035 + inSlope: 0.01195996 + outSlope: 0.01195996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9985072 + inSlope: 0.01038282 + outSlope: 0.01038282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99870414 + inSlope: 0.0090116 + outSlope: 0.0090116 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.998875 + inSlope: 0.031748697 + outSlope: 0.031748697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.05512395 + outSlope: 0.05512395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.031749398 + outSlope: 0.031749398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00064794684 + inSlope: 0.021065656 + outSlope: 0.021065656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00085982267 + inSlope: 0.012079325 + outSlope: 0.012079325 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0011409805 + inSlope: 0.016029196 + outSlope: 0.016029196 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0015140756 + inSlope: 0.021270683 + outSlope: 0.021270683 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0020091718 + inSlope: 0.028226089 + outSlope: 0.028226089 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.002666161 + inSlope: 0.037455864 + outSlope: 0.037455864 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0035379827 + inSlope: 0.049703762 + outSlope: 0.049703762 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.0046948856 + inSlope: 0.06595671 + outSlope: 0.06595671 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.006230093 + inSlope: 0.087524295 + outSlope: 0.087524295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.008267307 + inSlope: 0.116144285 + outSlope: 0.116144285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.010970675 + inSlope: 0.1541228 + outSlope: 0.1541228 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.014558033 + inSlope: 0.20452026 + outSlope: 0.20452026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.019318439 + inSlope: 0.27139747 + outSlope: 0.27139747 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.025635485 + inSlope: 0.36014318 + outSlope: 0.36014318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.034018163 + inSlope: 0.47790825 + outSlope: 0.47790825 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.045141935 + inSlope: 0.634182 + outSlope: 0.634182 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.059903152 + inSlope: 0.8415566 + outSlope: 0.8415566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.07949119 + inSlope: 1.1167417 + outSlope: 1.1167417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.105484426 + inSlope: 1.4819112 + outSlope: 1.4819112 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.13997738 + inSlope: 1.966489 + outSlope: 1.966489 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.18574929 + inSlope: 2.6095214 + outSlope: 2.6095214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.2464884 + inSlope: 3.4628224 + outSlope: 3.4628224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.32708904 + inSlope: 4.59515 + outSlope: 4.59515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.43404558 + inSlope: 5.8522053 + outSlope: 5.8522053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.56595445 + inSlope: 5.8522034 + outSlope: 5.8522034 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.6729109 + inSlope: 4.5951495 + outSlope: 4.5951495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7535115 + inSlope: 3.4628234 + outSlope: 3.4628234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.81425077 + inSlope: 2.6095207 + outSlope: 2.6095207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.86002266 + inSlope: 1.9664887 + outSlope: 1.9664887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8945156 + inSlope: 1.4819111 + outSlope: 1.4819111 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9205088 + inSlope: 1.1167419 + outSlope: 1.1167419 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.94009686 + inSlope: 0.8415574 + outSlope: 0.8415574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.95485806 + inSlope: 0.6341817 + outSlope: 0.6341817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.96598184 + inSlope: 0.4779076 + outSlope: 0.4779076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9743645 + inSlope: 0.36014277 + outSlope: 0.36014277 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.98068154 + inSlope: 0.27139798 + outSlope: 0.27139798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.985442 + inSlope: 0.20452142 + outSlope: 0.20452142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.98902935 + inSlope: 0.15412305 + outSlope: 0.15412305 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9917327 + inSlope: 0.11614305 + outSlope: 0.11614305 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9937699 + inSlope: 0.0875238 + outSlope: 0.0875238 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9953051 + inSlope: 0.06595656 + outSlope: 0.06595656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.996462 + inSlope: 0.049703263 + outSlope: 0.049703263 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9973338 + inSlope: 0.037457064 + outSlope: 0.037457064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.99799085 + inSlope: 0.028226418 + outSlope: 0.028226418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9984859 + inSlope: 0.021270914 + outSlope: 0.021270914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99885905 + inSlope: 0.016029846 + outSlope: 0.016029846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9991402 + inSlope: 0.012078261 + outSlope: 0.012078261 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.99935204 + inSlope: 0.021065036 + outSlope: 0.021065036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.031750157 + outSlope: 0.031750157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -0.052314557 + outSlope: -0.052314557 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.001067644 + inSlope: -0.025444414 + outSlope: -0.025444414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: -0.0010385475 + inSlope: 0.005232752 + outSlope: 0.005232752 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: -0.00085406227 + inSlope: 0.0134568885 + outSlope: 0.0134568885 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: -0.0004892868 + inSlope: 0.022480093 + outSlope: 0.022480093 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.00006349263 + inSlope: 0.03129618 + outSlope: 0.03129618 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.00078810833 + inSlope: 0.038599297 + outSlope: 0.038599297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0016389742 + inSlope: 0.042868868 + outSlope: 0.042868868 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.0025378577 + inSlope: 0.04251311 + outSlope: 0.04251311 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.0033742029 + inSlope: 0.036069594 + outSlope: 0.036069594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.0040100864 + inSlope: 0.022452787 + outSlope: 0.022452787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.004290643 + inSlope: 0.0012296122 + outSlope: 0.0012296122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.0040602745 + inSlope: -0.02710609 + outSlope: -0.02710609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.0031842724 + inSlope: -0.06090013 + outSlope: -0.06090013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.0015745537 + inSlope: -0.0971908 + outSlope: -0.0971908 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: -0.0007826995 + inSlope: -0.13169663 + outSlope: -0.13169663 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: -0.0038008164 + inSlope: -0.15898778 + outSlope: -0.15898778 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: -0.0072719986 + inSlope: -0.17287135 + outSlope: -0.17287135 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: -0.010856791 + inSlope: -0.16701306 + outSlope: -0.16701306 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.014088855 + inSlope: -0.13578062 + outSlope: -0.13578062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.016398858 + inSlope: -0.075263314 + outSlope: -0.075263314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.01716083 + inSlope: 0.015613956 + outSlope: 0.015613956 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.015761554 + inSlope: 0.13401467 + outSlope: 0.13401467 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: -0.011690839 + inSlope: 0.27230874 + outSlope: 0.27230874 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.0046469118 + inSlope: 0.41757476 + outSlope: 0.41757476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.005353021 + inSlope: 0.5516899 + outSlope: 0.5516899 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.017871033 + inSlope: 0.65216935 + outSlope: 0.65216935 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.031972166 + inSlope: 0.693901 + outSlope: 0.693901 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.04619355 + inSlope: 0.6518136 + outSlope: 0.6518136 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.058576833 + inSlope: 0.50440913 + outSlope: 0.50440913 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.06678167 + inSlope: 0.23795524 + outSlope: 0.23795524 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.06828929 + inSlope: -0.14905128 + outSlope: -0.14905128 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.060697947 + inSlope: -0.64167124 + outSlope: -0.64167124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.042098638 + inSlope: -1.2052464 + outSlope: -1.2052464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.011504148 + inSlope: -1.7838209 + outSlope: -1.7838209 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: -0.030710435 + inSlope: -2.3010278 + outSlope: -2.3010278 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: -0.08241531 + inSlope: -2.664154 + outSlope: -2.664154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.13945137 + inSlope: -2.7718143 + outSlope: -2.7718143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.19555055 + inSlope: -2.5253499 + outSlope: -2.5253499 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.24252683 + inSlope: -1.8435811 + outSlope: -1.8435811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.2707988 + inSlope: -0.6799241 + outSlope: -0.6799241 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.2702789 + inSlope: 0.95974493 + outSlope: 0.95974493 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: -0.23162556 + inSlope: 3.0007684 + outSlope: 3.0007684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: -0.14779861 + inSlope: 5.2877083 + outSlope: 5.2877083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: -0.015800836 + inSlope: 7.5797567 + outSlope: 7.5797567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.16157909 + inSlope: 9.556637 + outSlope: 9.556637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.37426642 + inSlope: 10.837618 + outSlope: 10.837618 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.60393125 + inSlope: 11.015219 + outSlope: 11.015219 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.82386696 + inSlope: 9.70369 + outSlope: 9.70369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 8.630523 + outSlope: 8.630523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 8.630519 + outSlope: 8.630519 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.17613304 + inSlope: 9.703685 + outSlope: 9.703685 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.39606875 + inSlope: 11.015214 + outSlope: 11.015214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.6257336 + inSlope: 10.837628 + outSlope: 10.837628 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.8384209 + inSlope: 9.556646 + outSlope: 9.556646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 1.0158008 + inSlope: 7.579754 + outSlope: 7.579754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 1.1477987 + inSlope: 5.2877054 + outSlope: 5.2877054 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 1.2316256 + inSlope: 3.0007668 + outSlope: 3.0007668 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.2702789 + inSlope: 0.95974207 + outSlope: 0.95974207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.2707987 + inSlope: -0.67992777 + outSlope: -0.67992777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.2425268 + inSlope: -1.8435793 + outSlope: -1.8435793 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.1955506 + inSlope: -2.5253472 + outSlope: -2.5253472 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.1394514 + inSlope: -2.7718132 + outSlope: -2.7718132 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 1.0824153 + inSlope: -2.6641521 + outSlope: -2.6641521 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 1.0307105 + inSlope: -2.3010273 + outSlope: -2.3010273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9884958 + inSlope: -1.7838223 + outSlope: -1.7838223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9579014 + inSlope: -1.205248 + outSlope: -1.205248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.939302 + inSlope: -0.6416718 + outSlope: -0.6416718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9317107 + inSlope: -0.14904992 + outSlope: -0.14904992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.93321836 + inSlope: 0.23795503 + outSlope: 0.23795503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9414232 + inSlope: 0.5044084 + outSlope: 0.5044084 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.95380646 + inSlope: 0.65181434 + outSlope: 0.65181434 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.96802783 + inSlope: 0.69390154 + outSlope: 0.69390154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.982129 + inSlope: 0.65216863 + outSlope: 0.65216863 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.99464697 + inSlope: 0.55168927 + outSlope: 0.55168927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.0046469 + inSlope: 0.41757548 + outSlope: 0.41757548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 1.0116909 + inSlope: 0.27231067 + outSlope: 0.27231067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0157616 + inSlope: 0.13401589 + outSlope: 0.13401589 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.0171609 + inSlope: 0.015613584 + outSlope: 0.015613584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.0163989 + inSlope: -0.07526461 + outSlope: -0.07526461 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.0140889 + inSlope: -0.13578296 + outSlope: -0.13578296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 1.0108567 + inSlope: -0.16701326 + outSlope: -0.16701326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 1.007272 + inSlope: -0.17286912 + outSlope: -0.17286912 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 1.0038009 + inSlope: -0.15898713 + outSlope: -0.15898713 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 1.0007827 + inSlope: -0.13169825 + outSlope: -0.13169825 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9984254 + inSlope: -0.09719123 + outSlope: -0.09719123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.99681574 + inSlope: -0.060899496 + outSlope: -0.060899496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.99593973 + inSlope: -0.027106356 + outSlope: -0.027106356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.99570936 + inSlope: 0.0012295847 + outSlope: 0.0012295847 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9959899 + inSlope: 0.02245229 + outSlope: 0.02245229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9966258 + inSlope: 0.03606972 + outSlope: 0.03606972 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.99746215 + inSlope: 0.042514138 + outSlope: 0.042514138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99836105 + inSlope: 0.042868994 + outSlope: 0.042868994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9992119 + inSlope: 0.038599033 + outSlope: 0.038599033 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9999365 + inSlope: 0.03129454 + outSlope: 0.03129454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 1.0004892 + inSlope: 0.022478595 + outSlope: 0.022478595 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 1.000854 + inSlope: 0.013458233 + outSlope: 0.013458233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 1.0010386 + inSlope: 0.0052337674 + outSlope: 0.0052337674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.0010676 + inSlope: -0.02544452 + outSlope: -0.02544452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.052314308 + outSlope: -0.052314308 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -0.025444414 + outSlope: -0.025444414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.00051927374 + inSlope: -0.0059937635 + outSlope: -0.0059937635 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: -0.0002446434 + inSlope: 0.022376532 + outSlope: 0.022376532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.00039405416 + inSlope: 0.03708252 + outSlope: 0.03708252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0012689289 + inSlope: 0.039469227 + outSlope: 0.039469227 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0020050432 + inSlope: 0.0186496 + outSlope: 0.0186496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.0020301372 + inSlope: -0.02983527 + outSlope: -0.02983527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.00078727683 + inSlope: -0.09629839 + outSlope: -0.09629839 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.0019004082 + inSlope: -0.152284 + outSlope: -0.152284 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.0054283957 + inSlope: -0.15432598 + outSlope: -0.15432598 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.008199429 + inSlope: -0.060083322 + outSlope: -0.060083322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.007880777 + inSlope: 0.1439613 + outSlope: 0.1439613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.0023234559 + inSlope: 0.4119993 + outSlope: 0.4119993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.008935517 + inSlope: 0.62279546 + outSlope: 0.62279546 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.023096776 + inSlope: 0.59915507 + outSlope: 0.59915507 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.033390835 + inSlope: 0.17767891 + outSlope: 0.17767891 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.030348973 + inSlope: -0.6771491 + outSlope: -0.6771491 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.005752074 + inSlope: -1.7531375 + outSlope: -1.7531375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: -0.041207656 + inSlope: -2.5364213 + outSlope: -2.5364213 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.09777527 + inSlope: -2.3076975 + outSlope: -2.3076975 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.1353994 + inSlope: -0.44191775 + outSlope: -0.44191775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.11581278 + inSlope: 3.1237266 + outSlope: 3.1237266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.007900418 + inSlope: 7.422173 + outSlope: 7.422173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.18713321 + inSlope: 10.285929 + outSlope: 10.285929 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.41193348 + inSlope: 9.82287 + outSlope: 9.82287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5880665 + inSlope: 9.822871 + outSlope: 9.822871 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.8128668 + inSlope: 10.285931 + outSlope: 10.285931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0079002 + inSlope: 7.422175 + outSlope: 7.422175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.1158129 + inSlope: 3.1237218 + outSlope: 3.1237218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.1353993 + inSlope: -0.44192326 + outSlope: -0.44192326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.0977752 + inSlope: -2.307697 + outSlope: -2.307697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 1.0412077 + inSlope: -2.5364203 + outSlope: -2.5364203 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9942479 + inSlope: -1.7531382 + outSlope: -1.7531382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.96965104 + inSlope: -0.67714906 + outSlope: -0.67714906 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9666092 + inSlope: 0.1776796 + outSlope: 0.1776796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.97690326 + inSlope: 0.59915537 + outSlope: 0.59915537 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9910645 + inSlope: 0.6227964 + outSlope: 0.6227964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.0023235 + inSlope: 0.41199997 + outSlope: 0.41199997 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0078808 + inSlope: 0.14396071 + outSlope: 0.14396071 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.0081995 + inSlope: -0.060082983 + outSlope: -0.060082983 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.0054284 + inSlope: -0.15432584 + outSlope: -0.15432584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.0019004 + inSlope: -0.15228452 + outSlope: -0.15228452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99921274 + inSlope: -0.09629898 + outSlope: -0.09629898 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99796987 + inSlope: -0.029835686 + outSlope: -0.029835686 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.99799496 + inSlope: 0.018649677 + outSlope: 0.018649677 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9987311 + inSlope: 0.039469317 + outSlope: 0.039469317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99960595 + inSlope: 0.037081704 + outSlope: 0.037081704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 1.0002446 + inSlope: 0.0223764 + outSlope: 0.0223764 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.0005193 + inSlope: -0.005993131 + outSlope: -0.005993131 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.02544452 + outSlope: -0.02544452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.010204673 + outSlope: 0.010204673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00020825863 + inSlope: 0.020416647 + outSlope: 0.020416647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00083333254 + inSlope: 0.04085958 + outSlope: 0.04085958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0018759966 + inSlope: 0.061352164 + outSlope: 0.061352164 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0033375025 + inSlope: 0.0819236 + outSlope: 0.0819236 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.005219817 + inSlope: 0.10259873 + outSlope: 0.10259873 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.0075252056 + inSlope: 0.12340235 + outSlope: 0.12340235 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.010256648 + inSlope: 0.14436811 + outSlope: 0.14436811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.01341778 + inSlope: 0.1655222 + outSlope: 0.1655222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.017012656 + inSlope: 0.1868953 + outSlope: 0.1868953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.021046162 + inSlope: 0.20851678 + outSlope: 0.20851678 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.025523543 + inSlope: 0.23042294 + outSlope: 0.23042294 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.030451179 + inSlope: 0.25265038 + outSlope: 0.25265038 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.035835803 + inSlope: 0.27523255 + outSlope: 0.27523255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.041685164 + inSlope: 0.298215 + outSlope: 0.298215 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.048007846 + inSlope: 0.32164156 + outSlope: 0.32164156 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.054813385 + inSlope: 0.34555686 + outSlope: 0.34555686 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.062112212 + inSlope: 0.37001422 + outSlope: 0.37001422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.06991601 + inSlope: 0.39507204 + outSlope: 0.39507204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.07823759 + inSlope: 0.42078787 + outSlope: 0.42078787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.08709103 + inSlope: 0.44723558 + outSlope: 0.44723558 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.09649211 + inSlope: 0.47449124 + outSlope: 0.47449124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.10645801 + inSlope: 0.5026355 + outSlope: 0.5026355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.11700785 + inSlope: 0.53176874 + outSlope: 0.53176874 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.12816286 + inSlope: 0.5620006 + outSlope: 0.5620006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.13994664 + inSlope: 0.59344995 + outSlope: 0.59344995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.1523853 + inSlope: 0.6262588 + outSlope: 0.6262588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.16550821 + inSlope: 0.66059124 + outSlope: 0.66059124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.17934823 + inSlope: 0.69663036 + outSlope: 0.69663036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.19394213 + inSlope: 0.73459804 + outSlope: 0.73459804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.20933181 + inSlope: 0.7747523 + outSlope: 0.7747523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.22556466 + inSlope: 0.817395 + outSlope: 0.817395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.24269485 + inSlope: 0.8628955 + outSlope: 0.8628955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.26078486 + inSlope: 0.9116978 + outSlope: 0.9116978 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.27990705 + inSlope: 0.9643421 + outSlope: 0.9643421 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.3001458 + inSlope: 1.0215075 + outSlope: 1.0215075 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.3216012 + inSlope: 1.0840498 + outSlope: 1.0840498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.34439272 + inSlope: 1.1530614 + outSlope: 1.1530614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.36866492 + inSlope: 1.2299806 + outSlope: 1.2299806 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.39459598 + inSlope: 1.3167374 + outSlope: 1.3167374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.42240936 + inSlope: 1.4159906 + outSlope: 1.4159906 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.45239156 + inSlope: 1.5315428 + outSlope: 1.5315428 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.48492128 + inSlope: 1.6690679 + outSlope: 1.6690679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.52051675 + inSlope: 1.8375006 + outSlope: 1.8375006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.55992126 + inSlope: 2.0519783 + outSlope: 2.0519783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.60427094 + inSlope: 2.3409562 + outSlope: 2.3409562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.6554706 + inSlope: 2.767158 + outSlope: 2.767158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.71721625 + inSlope: 3.5165439 + outSlope: 3.5165439 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.79900295 + inSlope: 6.9282055 + outSlope: 6.9282055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 9.848861 + outSlope: 9.848861 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 9.848856 + outSlope: 9.848856 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.20099705 + inSlope: 6.9282017 + outSlope: 6.9282017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.28278375 + inSlope: 3.516542 + outSlope: 3.516542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.3445294 + inSlope: 2.7671604 + outSlope: 2.7671604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.39572906 + inSlope: 2.3409588 + outSlope: 2.3409588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.44007874 + inSlope: 2.0519774 + outSlope: 2.0519774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.47948325 + inSlope: 1.8374996 + outSlope: 1.8374996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.5150787 + inSlope: 1.6690673 + outSlope: 1.6690673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.54760844 + inSlope: 1.5315437 + outSlope: 1.5315437 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.5775907 + inSlope: 1.4159914 + outSlope: 1.4159914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.605404 + inSlope: 1.3167374 + outSlope: 1.3167374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.6313351 + inSlope: 1.2299801 + outSlope: 1.2299801 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.6556073 + inSlope: 1.1530609 + outSlope: 1.1530609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.6783988 + inSlope: 1.084049 + outSlope: 1.084049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.6998542 + inSlope: 1.0215068 + outSlope: 1.0215068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.72009295 + inSlope: 0.964342 + outSlope: 0.964342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.7392151 + inSlope: 0.91169846 + outSlope: 0.91169846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.75730515 + inSlope: 0.86289626 + outSlope: 0.86289626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.77443534 + inSlope: 0.817395 + outSlope: 0.817395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.7906682 + inSlope: 0.7747518 + outSlope: 0.7747518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.8060579 + inSlope: 0.734599 + outSlope: 0.734599 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8206518 + inSlope: 0.6966313 + outSlope: 0.6966313 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.8344918 + inSlope: 0.6605903 + outSlope: 0.6605903 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.8476147 + inSlope: 0.6262583 + outSlope: 0.6262583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.86005336 + inSlope: 0.59344995 + outSlope: 0.59344995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.87183714 + inSlope: 0.5620006 + outSlope: 0.5620006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.88299215 + inSlope: 0.53176916 + outSlope: 0.53176916 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.893542 + inSlope: 0.5026366 + outSlope: 0.5026366 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.90350795 + inSlope: 0.47449052 + outSlope: 0.47449052 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.912909 + inSlope: 0.44723445 + outSlope: 0.44723445 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9217624 + inSlope: 0.42078817 + outSlope: 0.42078817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.930084 + inSlope: 0.39507204 + outSlope: 0.39507204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9378878 + inSlope: 0.3700145 + outSlope: 0.3700145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.9451866 + inSlope: 0.34555668 + outSlope: 0.34555668 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.95199215 + inSlope: 0.32164255 + outSlope: 0.32164255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9583149 + inSlope: 0.2982152 + outSlope: 0.2982152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9641642 + inSlope: 0.2752313 + outSlope: 0.2752313 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9695488 + inSlope: 0.25265047 + outSlope: 0.25265047 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.97447646 + inSlope: 0.23042303 + outSlope: 0.23042303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.97895384 + inSlope: 0.20851657 + outSlope: 0.20851657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.98298734 + inSlope: 0.18689515 + outSlope: 0.18689515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9865822 + inSlope: 0.16552228 + outSlope: 0.16552228 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.98974335 + inSlope: 0.14436814 + outSlope: 0.14436814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9924748 + inSlope: 0.12340242 + outSlope: 0.12340242 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9947802 + inSlope: 0.10259877 + outSlope: 0.10259877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9966625 + inSlope: 0.081923544 + outSlope: 0.081923544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.998124 + inSlope: 0.06135209 + outSlope: 0.06135209 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99916667 + inSlope: 0.040859602 + outSlope: 0.040859602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.99979174 + inSlope: 0.020416657 + outSlope: 0.020416657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.0102046775 + outSlope: 0.0102046775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.020416647 + outSlope: 0.020416647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00041666627 + inSlope: 0.040884405 + outSlope: 0.040884405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0016687512 + inSlope: 0.081975445 + outSlope: 0.081975445 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0037626028 + inSlope: 0.123483405 + outSlope: 0.123483405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.00670889 + inSlope: 0.1656317 + outSlope: 0.1656317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.010523081 + inSlope: 0.20865911 + outSlope: 0.20865911 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.015225589 + inSlope: 0.25282776 + outSlope: 0.25282776 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.020842582 + inSlope: 0.29843706 + outSlope: 0.29843706 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.027406693 + inSlope: 0.34582788 + outSlope: 0.34582788 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.034958005 + inSlope: 0.39540103 + outSlope: 0.39540103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.043545514 + inSlope: 0.44763952 + outSlope: 0.44763952 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.053229004 + inSlope: 0.50312996 + outSlope: 0.50312996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.06408143 + inSlope: 0.5626093 + outSlope: 0.5626093 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.07619265 + inSlope: 0.6270206 + outSlope: 0.6270206 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.089674115 + inSlope: 0.69759464 + outSlope: 0.69759464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.104665905 + inSlope: 0.7759965 + outSlope: 0.7759965 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.12134743 + inSlope: 0.8645464 + outSlope: 0.8645464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.13995352 + inSlope: 0.9666027 + outSlope: 0.9666027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.1608006 + inSlope: 1.0872844 + outSlope: 1.0872844 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.18433246 + inSlope: 1.2348994 + outSlope: 1.2348994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.21120468 + inSlope: 1.4241401 + outSlope: 1.4241401 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.24246064 + inSlope: 1.6845217 + outSlope: 1.6845217 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.27996063 + inSlope: 2.0892286 + outSlope: 2.0892286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.3277353 + inSlope: 2.9287503 + outSlope: 2.9287503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.39950147 + inSlope: 6.682703 + outSlope: 6.682703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.60049856 + inSlope: 6.682702 + outSlope: 6.682702 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.6722647 + inSlope: 2.9287498 + outSlope: 2.9287498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7200393 + inSlope: 2.0892284 + outSlope: 2.0892284 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.7575394 + inSlope: 1.6845212 + outSlope: 1.6845212 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.78879535 + inSlope: 1.4241395 + outSlope: 1.4241395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8156675 + inSlope: 1.2349004 + outSlope: 1.2349004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8391994 + inSlope: 1.087286 + outSlope: 1.087286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8600465 + inSlope: 0.96660256 + outSlope: 0.96660256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8786526 + inSlope: 0.8645458 + outSlope: 0.8645458 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.8953341 + inSlope: 0.7759953 + outSlope: 0.7759953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9103259 + inSlope: 0.6975951 + outSlope: 0.6975951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9238074 + inSlope: 0.6270211 + outSlope: 0.6270211 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.93591857 + inSlope: 0.56260955 + outSlope: 0.56260955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.946771 + inSlope: 0.5031295 + outSlope: 0.5031295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.95645446 + inSlope: 0.44763833 + outSlope: 0.44763833 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.965042 + inSlope: 0.39540142 + outSlope: 0.39540142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9725933 + inSlope: 0.34582877 + outSlope: 0.34582877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.97915745 + inSlope: 0.29843718 + outSlope: 0.29843718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9847744 + inSlope: 0.25282717 + outSlope: 0.25282717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9894769 + inSlope: 0.20865995 + outSlope: 0.20865995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99329114 + inSlope: 0.16563158 + outSlope: 0.16563158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9962374 + inSlope: 0.123482525 + outSlope: 0.123482525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99833125 + inSlope: 0.08197622 + outSlope: 0.08197622 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.99958336 + inSlope: 0.040884424 + outSlope: 0.040884424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.020415196 + outSlope: 0.020415196 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 diff --git a/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFCurves.curves.meta b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFCurves.curves.meta new file mode 100644 index 0000000..9654bd8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Curves/Editor/MMFCurves.curves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 378d85c023238454db159ae565d259dd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter.meta b/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter.meta new file mode 100644 index 0000000..78dba24 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b2481f480a67bd4dac8e31521065205 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter/FeedbackListOutputer.cs b/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter/FeedbackListOutputer.cs new file mode 100644 index 0000000..9d09c69 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter/FeedbackListOutputer.cs @@ -0,0 +1,77 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.PackageManager.Requests; +using UnityEditor.PackageManager; +using UnityEngine; +using System.Threading.Tasks; +using System.Linq; +using System.Text; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + /// + /// This class is used to automatically install optional dependencies used in MMFeedbacks + /// + public static class FeedbackListOutputer + { + /// + /// Outputs a list of all MMFeedbacks to the console (there's only one target user for this and it's me hello!) + /// + [MenuItem("Tools/More Mountains/MMFeedbacks/Output MMF_Feedbacks list", false, 705)] + public static void OutputIFeedbacksList() + { + // Retrieve available feedbacks + List types = (from domainAssembly in System.AppDomain.CurrentDomain.GetAssemblies() + from assemblyType in domainAssembly.GetTypes() + where assemblyType.IsSubclassOf(typeof(MMF_Feedback)) + select assemblyType).ToList(); + + List typeNames = new List(); + + + string previousType = ""; + for (int i = 0; i < types.Count; i++) + { + MMFeedbacksEditor.FeedbackTypePair newType = new MMFeedbacksEditor.FeedbackTypePair(); + newType.FeedbackType = types[i]; + newType.FeedbackName = FeedbackPathAttribute.GetFeedbackDefaultPath(types[i]); + if (newType.FeedbackName == "MMF_FeedbackBase") + { + continue; + } + + string newEntry = FeedbackPathAttribute.GetFeedbackDefaultPath(newType.FeedbackType); + typeNames.Add(newEntry); + } + + typeNames.Sort(); + StringBuilder builder = new StringBuilder(); + int counter = 1; + foreach (string typeName in typeNames) + { + if (typeName == null) + { + continue; + } + string[] splitArray = typeName.Split(char.Parse("/")); + + if ((previousType != splitArray[0]) && (counter > 1)) + { + builder.Append("\n"); + } + + builder.Append("- [ ] "); + builder.Append(counter.ToString("000")); + builder.Append(" - "); + builder.Append(typeName); + builder.Append("\n"); + + previousType = splitArray[0]; + counter++; + } + MMDebug.DebugLogInfo(builder.ToString()); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter/FeedbackListOutputer.cs.meta b/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter/FeedbackListOutputer.cs.meta new file mode 100644 index 0000000..8143429 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/FeedbackListOutputter/FeedbackListOutputer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f832a347ffbe22e478be454dc5dc3cff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Legacy.meta b/Assets/Feel/MMFeedbacks/Editor/Legacy.meta new file mode 100644 index 0000000..38cd7d7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Legacy.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04eddc1d6a8109645a0d9160d1c807dc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Legacy/MMFeedbacksEditor.cs b/Assets/Feel/MMFeedbacks/Editor/Legacy/MMFeedbacksEditor.cs new file mode 100644 index 0000000..329e9ca --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Legacy/MMFeedbacksEditor.cs @@ -0,0 +1,1122 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using MoreMountains.Tools; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// A custom editor displaying a foldable list of MMFeedbacks, a dropdown to add more, as well as test buttons to test your feedbacks at runtime + /// + [CustomEditor(typeof(MMFeedbacks))] + public class MMFeedbacksEditor : Editor + { + /// + /// A data structure to store types and names + /// + public class FeedbackTypePair + { + public System.Type FeedbackType; + public string FeedbackName; + } + + /// + /// A helper class to copy and paste feedback properties + /// + static class FeedbackCopy + { + // Single Copy -------------------------------------------------------------------- + + static public System.Type Type { get; private set; } + static List Properties = new List(); + + public static string[] IgnoreList = new string[] + { + "m_ObjectHideFlags", + "m_CorrespondingSourceObject", + "m_PrefabInstance", + "m_PrefabAsset", + "m_GameObject", + "m_Enabled", + "m_EditorHideFlags", + "m_Script", + "m_Name", + "m_EditorClassIdentifier" + }; + + static public void Copy(SerializedObject serializedObject) + { + Type = serializedObject.targetObject.GetType(); + Properties.Clear(); + + SerializedProperty property = serializedObject.GetIterator(); + property.Next(true); + do + { + if (!IgnoreList.Contains(property.name)) + { + Properties.Add(property.Copy()); + } + } while (property.Next(false)); + } + + static public void Paste(SerializedObject target) + { + if (target.targetObject.GetType() == Type) + { + for (int i = 0; i < Properties.Count; i++) + { + target.CopyFromSerializedProperty(Properties[i]); + } + } + } + + static public bool HasCopy() + { + return Properties != null && Properties.Count > 0; + } + + // Multiple Copy ---------------------------------------------------------- + + static public void CopyAll(MMFeedbacks sourceFeedbacks) + { + MMFeedbacksConfiguration.Instance._mmFeedbacks = sourceFeedbacks; + } + + static public bool HasMultipleCopies() + { + return (MMFeedbacksConfiguration.Instance._mmFeedbacks != null); + } + + static public void PasteAll(MMFeedbacksEditor targetEditor) + { + var sourceFeedbacks = new SerializedObject(MMFeedbacksConfiguration.Instance._mmFeedbacks); + SerializedProperty feedbacks = sourceFeedbacks.FindProperty("Feedbacks"); + + for (int i = 0; i < feedbacks.arraySize; i++) + { + MMFeedback arrayFeedback = (feedbacks.GetArrayElementAtIndex(i).objectReferenceValue as MMFeedback); + + FeedbackCopy.Copy(new SerializedObject(arrayFeedback)); + MMFeedback newFeedback = targetEditor.AddFeedback(arrayFeedback.GetType()); + SerializedObject serialized = new SerializedObject(newFeedback); + serialized.Update(); + FeedbackCopy.Paste(serialized); + serialized.ApplyModifiedProperties(); + } + MMFeedbacksConfiguration.Instance._mmFeedbacks = null; + } + } + + protected MMFeedbacks _targetMMFeedbacks; + protected SerializedProperty _mmfeedbacks; + protected SerializedProperty _mmfeedbacksInitializationMode; + protected SerializedProperty _mmfeedbacksSafeMode; + protected SerializedProperty _mmfeedbacksAutoPlayOnStart; + protected SerializedProperty _mmfeedbacksAutoPlayOnEnable; + protected SerializedProperty _mmfeedbacksDirection; + protected SerializedProperty _mmfeedbacksFeedbacksIntensity; + protected SerializedProperty _mmfeedbacksAutoChangeDirectionOnEnd; + protected SerializedProperty _mmfeedbacksDurationMultiplier; + protected SerializedProperty _mmfeedbacksDisplayFullDurationDetails; + protected SerializedProperty _mmfeedbacksCooldownDuration; + protected SerializedProperty _mmfeedbacksInitialDelay; + protected SerializedProperty _mmfeedbacksCanPlay; + protected SerializedProperty _mmfeedbacksCanPlayWhileAlreadyPlaying; + protected SerializedProperty _mmfeedbacksEvents; + protected SerializedProperty _mmfeedbacksChanceToPlay; + protected bool _canDisplayInspector = true; + + protected Dictionary _editors; + protected List _typesAndNames = new List(); + protected string[] _typeDisplays; + protected int _draggedStartID = -1; + protected int _draggedEndID = -1; + private static bool _debugView = false; + protected Color _originalBackgroundColor; + protected Color _scriptDrivenBoxColor; + protected Texture2D _scriptDrivenBoxBackgroundTexture; + protected Color _scriptDrivenBoxColorFrom = new Color(1f,0f,0f,1f); + protected Color _scriptDrivenBoxColorTo = new Color(0.7f,0.1f,0.1f,1f); + protected Color _playButtonColor = new Color32(193, 255, 2, 255); + private static bool _settingsMenuDropdown; + protected GUIStyle _directionButtonStyle; + protected GUIStyle _playingStyle; + + /// + /// On Enable, grabs properties and initializes the add feedback dropdown's contents + /// + void OnEnable() + { + // Get properties + _targetMMFeedbacks = target as MMFeedbacks; + _mmfeedbacks = serializedObject.FindProperty("Feedbacks"); + _mmfeedbacksInitializationMode = serializedObject.FindProperty("InitializationMode"); + _mmfeedbacksSafeMode = serializedObject.FindProperty("SafeMode"); + _mmfeedbacksAutoPlayOnStart = serializedObject.FindProperty("AutoPlayOnStart"); + _mmfeedbacksAutoPlayOnEnable = serializedObject.FindProperty("AutoPlayOnEnable"); + _mmfeedbacksDirection = serializedObject.FindProperty("Direction"); + _mmfeedbacksAutoChangeDirectionOnEnd = serializedObject.FindProperty("AutoChangeDirectionOnEnd"); + _mmfeedbacksDurationMultiplier = serializedObject.FindProperty("DurationMultiplier"); + _mmfeedbacksDisplayFullDurationDetails = serializedObject.FindProperty("DisplayFullDurationDetails"); + _mmfeedbacksCooldownDuration = serializedObject.FindProperty("CooldownDuration"); + _mmfeedbacksInitialDelay = serializedObject.FindProperty("InitialDelay"); + _mmfeedbacksCanPlay = serializedObject.FindProperty("CanPlay"); + _mmfeedbacksCanPlayWhileAlreadyPlaying = serializedObject.FindProperty("CanPlayWhileAlreadyPlaying"); + _mmfeedbacksFeedbacksIntensity = serializedObject.FindProperty("FeedbacksIntensity"); + _mmfeedbacksChanceToPlay = serializedObject.FindProperty("ChanceToPlay"); + + _mmfeedbacksEvents = serializedObject.FindProperty("Events"); + + // store GUI bg color + _originalBackgroundColor = GUI.backgroundColor; + + // Repair routine to catch feedbacks that may have escaped due to Unity's serialization issues + RepairRoutine(); + + // Create editors + _editors = new Dictionary(); + for (int i = 0; i < _mmfeedbacks.arraySize; i++) + { + AddEditor(_mmfeedbacks.GetArrayElementAtIndex(i).objectReferenceValue as MMFeedback); + } + + // Retrieve available feedbacks + List types = (from domainAssembly in System.AppDomain.CurrentDomain.GetAssemblies() + from assemblyType in domainAssembly.GetTypes() + where assemblyType.IsSubclassOf(typeof(MMFeedback)) + select assemblyType).ToList(); + + // Create display list from types + List typeNames = new List(); + for (int i = 0; i < types.Count; i++) + { + FeedbackTypePair newType = new FeedbackTypePair(); + newType.FeedbackType = types[i]; + newType.FeedbackName = FeedbackPathAttribute.GetFeedbackDefaultPath(types[i]); + if (newType.FeedbackName == "MMFeedbackBase") + { + continue; + } + _typesAndNames.Add(newType); + } + + _typesAndNames = _typesAndNames.OrderBy(t => t.FeedbackName).ToList(); + + typeNames.Add("Add new feedback..."); + for (int i = 0; i < _typesAndNames.Count; i++) + { + typeNames.Add(_typesAndNames[i].FeedbackName); + } + + _typeDisplays = typeNames.ToArray(); + + _directionButtonStyle = new GUIStyle(); + _directionButtonStyle.border.left = 0; + _directionButtonStyle.border.right = 0; + _directionButtonStyle.border.top = 0; + _directionButtonStyle.border.bottom = 0; + + _playingStyle = new GUIStyle(); + _playingStyle.normal.textColor = Color.yellow; + + } + + /// + /// Calls the repair routine if needed + /// + protected virtual void RepairRoutine() + { + _targetMMFeedbacks = target as MMFeedbacks; + if ((_targetMMFeedbacks.SafeMode == MMFeedbacks.SafeModes.EditorOnly) || (_targetMMFeedbacks.SafeMode == MMFeedbacks.SafeModes.Full)) + { + _targetMMFeedbacks.AutoRepair(); + } + serializedObject.ApplyModifiedProperties(); + } + + /// + /// Draws the inspector, complete with helpbox, init mode selection, list of feedbacks, feedback selection and test buttons + /// + public override void OnInspectorGUI() + { + if (!_canDisplayInspector) + { + return; + } + + var e = Event.current; + serializedObject.Update(); + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.Space(); + + if (!MMFeedbacks.GlobalMMFeedbacksActive) + { + Color baseColor = GUI.color; + GUI.color = Color.red; + EditorGUILayout.HelpBox("All MMFeedbacks, including this one, are currently disabled. This is done via script, by changing the value of the MMFeedbacks.GlobalMMFeedbacksActive boolean. Right now this value has been set to false. Setting it back to true will allow MMFeedbacks to play again.", MessageType.Warning); + EditorGUILayout.Space(); + GUI.color = baseColor; + } + + if (MMFeedbacksConfiguration.Instance.ShowInspectorTips) + { + EditorGUILayout.HelpBox("The MMFeedbacks component got deprecated with the introduction of the MMF Player, in v3.0. " + + "The MMF Player improves performance, lets you keep runtime changes, and much more! And it works just like MMFeedbacks. " + + "With the release of v4.0, the MMF Player is now completely removed from Feel and phased out.", MessageType.Warning); + } + + Rect helpBoxRect = GUILayoutUtility.GetLastRect(); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "Modified Feedback Manager"); + } + + // Settings dropdown ------------------------------------------------------------------------------------- + + _settingsMenuDropdown = EditorGUILayout.Foldout(_settingsMenuDropdown, "Settings", true, EditorStyles.foldout); + if (_settingsMenuDropdown) + { + EditorGUILayout.Space(10); + EditorGUILayout.LabelField("Initialization", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksSafeMode); + EditorGUILayout.PropertyField(_mmfeedbacksInitializationMode); + EditorGUILayout.PropertyField(_mmfeedbacksAutoPlayOnStart); + EditorGUILayout.PropertyField(_mmfeedbacksAutoPlayOnEnable); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField("Direction", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksDirection); + EditorGUILayout.PropertyField(_mmfeedbacksAutoChangeDirectionOnEnd); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField("Intensity", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksFeedbacksIntensity); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField("Timing", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksDurationMultiplier); + EditorGUILayout.PropertyField(_mmfeedbacksDisplayFullDurationDetails); + EditorGUILayout.PropertyField(_mmfeedbacksCooldownDuration); + EditorGUILayout.PropertyField(_mmfeedbacksInitialDelay); + EditorGUILayout.PropertyField(_mmfeedbacksChanceToPlay); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField("Play Conditions", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksCanPlay); + EditorGUILayout.PropertyField(_mmfeedbacksCanPlayWhileAlreadyPlaying); + + EditorGUILayout.Space(10); + EditorGUILayout.LabelField("Events", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_mmfeedbacksEvents); + + if (!Application.isPlaying) + { + EditorGUILayout.Space(10); + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("Generate MMF_Player")) + { + this.ConvertToMMF_Player(true); + } + if (GUILayout.Button("Convert to MMF_Player")) + { + this.ConvertToMMF_Player(false); + } + EditorGUILayout.EndHorizontal(); + } + } + + // Duration ---------------------------------------------------------------------------------------------- + + float durationRectWidth = 70f; + Rect durationRect = new Rect(helpBoxRect.xMax - durationRectWidth, helpBoxRect.yMax + 6, durationRectWidth, 17f); + durationRect.xMin = helpBoxRect.xMax - durationRectWidth; + durationRect.xMax = helpBoxRect.xMax; + + float playingRectWidth = 70f; + Rect playingRect = new Rect(helpBoxRect.xMax - playingRectWidth - durationRectWidth, helpBoxRect.yMax + 6, playingRectWidth, 17f); + playingRect.xMin = helpBoxRect.xMax - durationRectWidth- playingRectWidth; + playingRect.xMax = helpBoxRect.xMax; + + // Direction ---------------------------------------------------------------------------------------------- + + float directionRectWidth = 16f; + Rect directionRect = new Rect(helpBoxRect.xMax - directionRectWidth, helpBoxRect.yMax + 5, directionRectWidth, 17f); + directionRect.xMin = helpBoxRect.xMax - directionRectWidth; + directionRect.xMax = helpBoxRect.xMax; + + if ((target as MMFeedbacks).IsPlaying) + { + GUI.Label(playingRect, "[PLAYING] ", _playingStyle); + } + + GUI.Label(durationRect, "["+_targetMMFeedbacks.TotalDuration.ToString("F2")+"s]"); + + if (_targetMMFeedbacks.Direction == MMFeedbacks.Directions.BottomToTop) + { + Texture arrowUpIcon = Resources.Load("FeelArrowUp") as Texture; + GUIContent directionIcon = new GUIContent(arrowUpIcon); + + if (GUI.Button(directionRect, directionIcon, _directionButtonStyle)) + { + _targetMMFeedbacks.Revert(); + } + } + else + { + Texture arrowDownIcon = Resources.Load("FeelArrowDown") as Texture; + GUIContent directionIcon = new GUIContent(arrowDownIcon); + + if (GUI.Button(directionRect, directionIcon, _directionButtonStyle)) + { + _targetMMFeedbacks.Revert(); + } + } + + // Draw list ------------------------------------------------------------------------------------------ + + MMFeedbackStyling.DrawSection("Feedbacks"); + + if (!_canDisplayInspector) + { + return; + } + + for (int i = 0; i < _mmfeedbacks.arraySize; i++) + { + if (!_canDisplayInspector) + { + return; + } + + MMFeedbackStyling.DrawSplitter(); + + SerializedProperty property = _mmfeedbacks.GetArrayElementAtIndex(i); + + // Failsafe but should not happen + if (property.objectReferenceValue == null) + { + continue; + } + + // Retrieve feedback + + MMFeedback feedback = property.objectReferenceValue as MMFeedback; + feedback.hideFlags = _debugView ? HideFlags.None : HideFlags.HideInInspector; + + Undo.RecordObject(feedback, "Modified Feedback"); + + // Draw header + + int id = i; + bool isExpanded = property.isExpanded; + string label = feedback.Label; + bool pause = false; + + if (feedback.Pause != null) + { + pause = true; + } + + Rect headerRect = MMFeedbackStyling.DrawHeader( + ref isExpanded, + ref feedback.Active, + label, + feedback.FeedbackColor, + (GenericMenu menu) => + { + if (Application.isPlaying) + menu.AddItem(new GUIContent("Play"), false, () => PlayFeedback(id)); + else + menu.AddDisabledItem(new GUIContent("Play")); + menu.AddSeparator(null); + //menu.AddItem(new GUIContent("Reset"), false, () => ResetFeedback(id)); + menu.AddItem(new GUIContent("Remove"), false, () => RemoveFeedback(id)); + menu.AddSeparator(null); + menu.AddItem(new GUIContent("Copy"), false, () => CopyFeedback(id)); + if (FeedbackCopy.HasCopy() && FeedbackCopy.Type == feedback.GetType()) + menu.AddItem(new GUIContent("Paste"), false, () => PasteFeedback(id)); + else + menu.AddDisabledItem(new GUIContent("Paste")); + }, + feedback.FeedbackStartedAt, + feedback.FeedbackDuration, + feedback.TotalDuration, + feedback.Timing, + pause, + _targetMMFeedbacks + ); + + // Check if we start dragging this feedback + + switch (e.type) + { + case EventType.MouseDown: + if (headerRect.Contains(e.mousePosition)) + { + _draggedStartID = i; + e.Use(); + } + break; + default: + break; + } + + // Draw blue rect if feedback is being dragged + + if (_draggedStartID == i && headerRect != Rect.zero) + { + Color color = new Color(0, 1, 1, 0.2f); + EditorGUI.DrawRect(headerRect, color); + } + + // If hovering at the top of the feedback while dragging one, check where the feedback should be dropped : top or bottom + + if (headerRect.Contains(e.mousePosition)) + { + if (_draggedStartID >= 0) + { + _draggedEndID = i; + + Rect headerSplit = headerRect; + headerSplit.height *= 0.5f; + headerSplit.y += headerSplit.height; + if (headerSplit.Contains(e.mousePosition)) + _draggedEndID = i + 1; + } + } + + // If expanded, draw feedback editor + + property.isExpanded = isExpanded; + if (isExpanded) + { + EditorGUI.BeginDisabledGroup(!feedback.Active); + + string helpText = FeedbackHelpAttribute.GetFeedbackHelpText(feedback.GetType()); + + if ( (!string.IsNullOrEmpty(helpText)) && (MMFeedbacksConfiguration.Instance.ShowInspectorTips)) + { + GUIStyle style = new GUIStyle(EditorStyles.helpBox); + style.richText = true; + float newHeight = style.CalcHeight(new GUIContent(helpText), EditorGUIUtility.currentViewWidth); + EditorGUILayout.LabelField(helpText, style); + } + + EditorGUILayout.Space(); + + if (!_editors.ContainsKey(feedback)) + { + AddEditor(feedback); + } + + Editor editor = _editors[feedback]; + CreateCachedEditor(feedback, feedback.GetType(), ref editor); + + editor.OnInspectorGUI(); + + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.Space(); + + EditorGUI.BeginDisabledGroup(!Application.isPlaying); + EditorGUILayout.BeginHorizontal(); + { + if (GUILayout.Button("Play", EditorStyles.miniButtonMid)) + { + PlayFeedback(id); + } + if (GUILayout.Button("Stop", EditorStyles.miniButtonMid)) + { + StopFeedback(id); + } + } + EditorGUILayout.EndHorizontal(); + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + } + + // Draw add new item + + if (_mmfeedbacks.arraySize > 0) + { + MMFeedbackStyling.DrawSplitter(); + } + + EditorGUILayout.Space(); + + EditorGUILayout.BeginHorizontal(); + { + // Feedback list + + int newItem = EditorGUILayout.Popup(0, _typeDisplays) - 1; + if (newItem >= 0) + { + AddFeedback(_typesAndNames[newItem].FeedbackType); + } + + // Paste feedback copy as new + + if (FeedbackCopy.HasCopy()) + { + if (GUILayout.Button("Paste as new", EditorStyles.miniButton, GUILayout.Width(EditorStyles.miniButton.CalcSize(new GUIContent("Paste as new")).x))) + { + PasteAsNew(); + } + } + + if (FeedbackCopy.HasMultipleCopies()) + { + if (GUILayout.Button("Paste all as new", EditorStyles.miniButton, GUILayout.Width(EditorStyles.miniButton.CalcSize(new GUIContent("Paste all as new")).x))) + { + PasteAllAsNew(); + } + } + } + + if (!FeedbackCopy.HasMultipleCopies()) + { + if (GUILayout.Button("Copy all", EditorStyles.miniButton, GUILayout.Width(EditorStyles.miniButton.CalcSize(new GUIContent("Paste as new")).x))) + { + CopyAll(); + } + } + + EditorGUILayout.EndHorizontal(); + + // Reorder + + if (_draggedStartID >= 0 && _draggedEndID >= 0) + { + if (_draggedEndID != _draggedStartID) + { + if (_draggedEndID > _draggedStartID) + _draggedEndID--; + _mmfeedbacks.MoveArrayElement(_draggedStartID, _draggedEndID); + _draggedStartID = _draggedEndID; + } + } + + if (_draggedStartID >= 0 || _draggedEndID >= 0) + { + switch (e.type) + { + case EventType.MouseUp: + _draggedStartID = -1; + _draggedEndID = -1; + e.Use(); + break; + default: + break; + } + } + + // Clean up + + bool wasRemoved = false; + for (int i = _mmfeedbacks.arraySize - 1; i >= 0; i--) + { + if (_mmfeedbacks.GetArrayElementAtIndex(i).objectReferenceValue == null) + { + wasRemoved = true; + _mmfeedbacks.DeleteArrayElementAtIndex(i); + } + } + + if (wasRemoved) + { + GameObject gameObject = (target as MMFeedbacks).gameObject; + foreach (var c in gameObject.GetComponents()) + { + if (c != null) + { + c.hideFlags = HideFlags.None; + } + } + } + + // Apply changes + + serializedObject.ApplyModifiedProperties(); + + // Draw debug + + + MMFeedbackStyling.DrawSection("All Feedbacks Debug"); + + // Testing buttons + + EditorGUI.BeginDisabledGroup(!Application.isPlaying); + EditorGUILayout.BeginHorizontal(); + { + // initialize button + if (GUILayout.Button("Initialize", EditorStyles.miniButtonLeft)) + { + (target as MMFeedbacks).Initialization(); + } + + // play button + _originalBackgroundColor = GUI.backgroundColor; + GUI.backgroundColor = _playButtonColor; + if (GUILayout.Button("Play", EditorStyles.miniButtonMid)) + { + (target as MMFeedbacks).PlayFeedbacks(); + } + GUI.backgroundColor = _originalBackgroundColor; + + // pause button + if ((target as MMFeedbacks).ContainsLoop) + { + if (GUILayout.Button("Pause", EditorStyles.miniButtonMid)) + { + (target as MMFeedbacks).PauseFeedbacks(); + } + } + + // stop button + if (GUILayout.Button("Stop", EditorStyles.miniButtonMid)) + { + (target as MMFeedbacks).StopFeedbacks(); + } + + // reset button + if (GUILayout.Button("Reset", EditorStyles.miniButtonMid)) + { + (target as MMFeedbacks).ResetFeedbacks(); + } + EditorGUI.EndDisabledGroup(); + + // reverse button + if (GUILayout.Button("Revert", EditorStyles.miniButtonMid)) + { + (target as MMFeedbacks).Revert(); + } + + // debug button + EditorGUI.BeginChangeCheck(); + { + _debugView = GUILayout.Toggle(_debugView, "Debug View", EditorStyles.miniButtonRight); + + if (EditorGUI.EndChangeCheck()) + { + foreach (var f in (target as MMFeedbacks).Feedbacks) + f.hideFlags = _debugView ? HideFlags.HideInInspector : HideFlags.None; + UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); + } + } + } + EditorGUILayout.EndHorizontal(); + + + float pingPong = Mathf.PingPong(Time.unscaledTime, 0.25f); + + // if in pause, we display additional controls + if (_targetMMFeedbacks.InScriptDrivenPause) + { + // draws a warning box + _scriptDrivenBoxColor = Color.Lerp(_scriptDrivenBoxColorFrom, _scriptDrivenBoxColorTo, pingPong); + GUI.skin.box.normal.background = Texture2D.whiteTexture; + GUI.backgroundColor = _scriptDrivenBoxColor; + GUI.skin.box.normal.textColor = Color.black; + GUILayout.Box("Script driven pause in progress, call Resume() to exit pause", GUILayout.ExpandWidth(true)); + GUI.backgroundColor = _originalBackgroundColor; + GUI.skin.box.normal.background = _scriptDrivenBoxBackgroundTexture; + + // draws resume button + if (GUILayout.Button("Resume")) + { + _targetMMFeedbacks.ResumeFeedbacks(); + } + } + + // Debug draw + if (_debugView) + { + EditorGUI.BeginDisabledGroup(true); + EditorGUILayout.PropertyField(_mmfeedbacks, true); + EditorGUI.EndDisabledGroup(); + } + } + + /// + /// We need to repaint constantly if dragging a feedback around + /// + public override bool RequiresConstantRepaint() + { + return true; + } + + /// + /// Add a feedback to the list + /// + protected virtual MMFeedback AddFeedback(System.Type type) + { + /*GameObject gameObject = (target as MMFeedbacks).gameObject; + + MMFeedback newFeedback = Undo.AddComponent(gameObject, type) as MMFeedback; + newFeedback.hideFlags = _debugView ? HideFlags.None : HideFlags.HideInInspector; + newFeedback.Label = FeedbackPathAttribute.GetFeedbackDefaultName(type); + + AddEditor(newFeedback); + + _mmfeedbacks.arraySize++; + _mmfeedbacks.GetArrayElementAtIndex(_mmfeedbacks.arraySize - 1).objectReferenceValue = newFeedback; + + return newFeedback;*/ + return (target as MMFeedbacks).AddFeedback(type); + } + + /// + /// Remove the selected feedback + /// + protected virtual void RemoveFeedback(int id) + { + /*SerializedProperty property = _mmfeedbacks.GetArrayElementAtIndex(id); + MMFeedback feedback = property.objectReferenceValue as MMFeedback; + + (target as MMFeedbacks).Feedbacks.Remove(feedback); + + _editors.Remove(feedback); + Undo.DestroyObjectImmediate(feedback);*/ + + (target as MMFeedbacks).RemoveFeedback(id); + } + + // + // Editors management + // + + /// + /// Create the editor for a feedback + /// + protected virtual void AddEditor(MMFeedback feedback) + { + if (feedback == null) + return; + + if (!_editors.ContainsKey(feedback)) + { + Editor editor = null; + CreateCachedEditor(feedback, null, ref editor); + + _editors.Add(feedback, editor as Editor); + } + } + + /// + /// Destroy the editor for a feedback + /// + protected virtual void RemoveEditor(MMFeedback feedback) + { + if (feedback == null) + return; + + if (_editors.ContainsKey(feedback)) + { + DestroyImmediate(_editors[feedback]); + _editors.Remove(feedback); + } + } + + // + // Feedback generic menus + // + + /// + /// Play the selected feedback + /// + protected virtual void InitializeFeedback(int id) + { + SerializedProperty property = _mmfeedbacks.GetArrayElementAtIndex(id); + MMFeedback feedback = property.objectReferenceValue as MMFeedback; + feedback.Initialization(feedback.gameObject); + } + + /// + /// Play the selected feedback + /// + protected virtual void PlayFeedback(int id) + { + SerializedProperty property = _mmfeedbacks.GetArrayElementAtIndex(id); + MMFeedback feedback = property.objectReferenceValue as MMFeedback; + feedback.Play(feedback.transform.position, _targetMMFeedbacks.FeedbacksIntensity); + } + + /// + /// Play the selected feedback + /// + protected virtual void StopFeedback(int id) + { + SerializedProperty property = _mmfeedbacks.GetArrayElementAtIndex(id); + MMFeedback feedback = property.objectReferenceValue as MMFeedback; + feedback.Stop(feedback.transform.position); + } + + /// + /// Resets the selected feedback + /// + /// + protected virtual void ResetFeedback(int id) + { + SerializedProperty property = _mmfeedbacks.GetArrayElementAtIndex(id); + MMFeedback feedback = property.objectReferenceValue as MMFeedback; + feedback.ResetFeedback(); + } + + /// + /// Copy the selected feedback + /// + protected virtual void CopyFeedback(int id) + { + SerializedProperty property = _mmfeedbacks.GetArrayElementAtIndex(id); + MMFeedback feedback = property.objectReferenceValue as MMFeedback; + + FeedbackCopy.Copy(new SerializedObject(feedback)); + } + + /// + /// Asks for a full copy of the source + /// + protected virtual void CopyAll() + { + FeedbackCopy.CopyAll(target as MMFeedbacks); + } + + /// + /// Paste the previously copied feedback values into the selected feedback + /// + protected virtual void PasteFeedback(int id) + { + SerializedProperty property = _mmfeedbacks.GetArrayElementAtIndex(id); + MMFeedback feedback = property.objectReferenceValue as MMFeedback; + + SerializedObject serialized = new SerializedObject(feedback); + + FeedbackCopy.Paste(serialized); + serialized.ApplyModifiedProperties(); + } + + /// + /// Creates a new feedback and applies the previoulsy copied feedback values + /// + protected virtual void PasteAsNew() + { + MMFeedback newFeedback = AddFeedback(FeedbackCopy.Type); + SerializedObject serialized = new SerializedObject(newFeedback); + + serialized.Update(); + FeedbackCopy.Paste(serialized); + serialized.ApplyModifiedProperties(); + } + + /// + /// Asks for a paste of all feedbacks in the source + /// + protected virtual void PasteAllAsNew() + { + serializedObject.Update(); + Undo.RecordObject(target, "Paste all MMFeedbacks"); + FeedbackCopy.PasteAll(this); + serializedObject.ApplyModifiedProperties(); + } + + /// + /// Converts a MMFeedbacks and all its contents into the new and improved MMF_Player + /// To convert from MMFeedbacks to MMF_Player you have a few options : + /// - on a MMFeedbacks Settings panel, press the Generate MMF_Player button, this will create a new MMF_Player component on the same object, and copy feedbacks to it, ready to use. + /// The old MMFeedbacks won't be touched. + /// - press the Convert feedback, and this will try to replace the current MMFeedbacks with a new MMF_Player with the same settings. + /// - if you're inside a prefab instance, regular replace won't work, and you'll want to add, at the prefab level, an empty MMF_Player that will be the recipient of the conversion + /// + /// + public virtual void ConvertToMMF_Player(bool generateOnly) + { + GameObject targetObject = _targetMMFeedbacks.gameObject; + MMF_Player oldMMFPlayer = targetObject.GetComponent(); + + // we remove any MMF_Player that may already be on that object + if ((oldMMFPlayer != null) && (oldMMFPlayer.FeedbacksList.Count > 0)) + { + DestroyImmediate(oldMMFPlayer); + } + + // if we don't have an old player to work with and are inside a prefab, we give up to not break stuff + if (!generateOnly && (oldMMFPlayer == null)) + { + // conversion can't happen on a prefab instance unfortunately + if (PrefabUtility.IsPartOfPrefabAsset(targetObject) + || PrefabUtility.IsPartOfPrefabInstance(targetObject) + || PrefabUtility.IsPartOfNonAssetPrefabInstance(targetObject)) + { + Debug.LogWarning("Unfortunately, you can't use conversion on a prefab instance."); + return; + } + } + + _canDisplayInspector = false; + serializedObject.Update(); + Undo.RegisterCompleteObjectUndo(target, "Convert to MMF_Player"); + MMDebug.DebugLogInfo("Starting conversion to MMF_Player --------"); + + if (generateOnly) + { + // we create a new player + if (oldMMFPlayer == null) + { + MMF_Player newPlayer = targetObject.AddComponent(); + CopyFromMMFeedbacksToMMF_Player(newPlayer); + } + else + { + CopyFromMMFeedbacksToMMF_Player(oldMMFPlayer); + } + serializedObject.ApplyModifiedProperties(); + return; + } + + GameObject temporaryHost = null; + // we create a new player + if (oldMMFPlayer == null) + { + temporaryHost = new GameObject("TemporaryHost"); + MMF_Player newPlayer = temporaryHost.AddComponent(); + CopyFromMMFeedbacksToMMF_Player(newPlayer); + + MonoScript yourReplacementScript = MonoScript.FromMonoBehaviour(newPlayer); + SerializedProperty scriptProperty = serializedObject.FindProperty("m_Script"); + serializedObject.Update(); + scriptProperty.objectReferenceValue = yourReplacementScript; + serializedObject.ApplyModifiedProperties(); + + // we copy back from our temp object + MMF_Player finalPlayer = targetObject.GetComponent(); + finalPlayer.InitializationMode = newPlayer.InitializationMode; + finalPlayer.SafeMode = newPlayer.SafeMode; + finalPlayer.Direction = newPlayer.Direction; + finalPlayer.AutoChangeDirectionOnEnd = newPlayer.AutoChangeDirectionOnEnd; + finalPlayer.AutoPlayOnStart = newPlayer.AutoPlayOnStart; + finalPlayer.AutoPlayOnEnable = newPlayer.AutoPlayOnEnable; + finalPlayer.DurationMultiplier = newPlayer.DurationMultiplier; + finalPlayer.DisplayFullDurationDetails = newPlayer.DisplayFullDurationDetails; + finalPlayer.CooldownDuration = newPlayer.CooldownDuration; + finalPlayer.InitialDelay = newPlayer.InitialDelay; + finalPlayer.CanPlay = newPlayer.CanPlay; + finalPlayer.CanPlayWhileAlreadyPlaying = newPlayer.CanPlayWhileAlreadyPlaying; + finalPlayer.FeedbacksIntensity = newPlayer.FeedbacksIntensity; + finalPlayer.Events = newPlayer.Events; + finalPlayer.FeedbacksList = newPlayer.FeedbacksList; + if (finalPlayer.FeedbacksList != null && finalPlayer.FeedbacksList.Count > 0) + { + foreach (MMF_Feedback feedback in finalPlayer.FeedbacksList) + { + feedback.Owner = finalPlayer; + feedback.UniqueID = Guid.NewGuid().GetHashCode(); + } + } + } + else + { + CopyFromMMFeedbacksToMMF_Player(oldMMFPlayer); + PrefabUtility.RecordPrefabInstancePropertyModifications(oldMMFPlayer); + serializedObject.Update(); + serializedObject.ApplyModifiedProperties(); + DestroyImmediate(_targetMMFeedbacks); + } + + // we remove all remaining feedbacks + Component[] feedbackArray = targetObject.GetComponents(typeof(MMFeedback)); + foreach (Component comp in feedbackArray) + { + DestroyImmediate(comp); + } + + if (temporaryHost != null) + { + DestroyImmediate(temporaryHost); + } + + MMDebug.DebugLogInfo("Conversion complete --------"); + } + + protected virtual void CopyFromMMFeedbacksToMMF_Player(MMF_Player newPlayer) + { + // we copy all its settings + newPlayer.InitializationMode = _targetMMFeedbacks.InitializationMode; + newPlayer.SafeMode = _targetMMFeedbacks.SafeMode; + newPlayer.Direction = _targetMMFeedbacks.Direction; + newPlayer.AutoChangeDirectionOnEnd = _targetMMFeedbacks.AutoChangeDirectionOnEnd; + newPlayer.AutoPlayOnStart = _targetMMFeedbacks.AutoPlayOnStart; + newPlayer.AutoPlayOnEnable = _targetMMFeedbacks.AutoPlayOnEnable; + newPlayer.DurationMultiplier = _targetMMFeedbacks.DurationMultiplier; + newPlayer.DisplayFullDurationDetails = _targetMMFeedbacks.DisplayFullDurationDetails; + newPlayer.CooldownDuration = _targetMMFeedbacks.CooldownDuration; + newPlayer.InitialDelay = _targetMMFeedbacks.InitialDelay; + newPlayer.CanPlay = _targetMMFeedbacks.CanPlay; + newPlayer.CanPlayWhileAlreadyPlaying = _targetMMFeedbacks.CanPlayWhileAlreadyPlaying; + newPlayer.FeedbacksIntensity = _targetMMFeedbacks.FeedbacksIntensity; + newPlayer.Events = _targetMMFeedbacks.Events; + + // we copy all its feedbacks + SerializedProperty feedbacks = serializedObject.FindProperty("Feedbacks"); + for (int i = 0; i < feedbacks.arraySize; i++) + { + MMFeedback oldFeedback = (feedbacks.GetArrayElementAtIndex(i).objectReferenceValue as MMFeedback); + + // we look for a match in the new classes + Type oldType = oldFeedback.GetType(); + string oldTypeName = oldType.Name.ToString(); + string newTypeName = oldTypeName.Replace("MMFeedback", "MMF_"); + Type newType = MMFeedbackStaticMethods.MMFGetTypeByName(newTypeName); + + if (newType == null) + { + MMDebug.DebugLogInfo("Couldn't find any MMF_Feedback matching "+oldTypeName+""); + } + else + { + MMF_Feedback newFeedback = newPlayer.AddFeedback(newType); + + List oldFieldsList; + int oldFieldsListLength = MMF_FieldInfo.GetFieldInfo(oldFeedback, out oldFieldsList); + + for (int j = 0; j < oldFieldsListLength; j++) + { + string searchedField = oldFieldsList[j].Name; + + if (!FeedbackCopy.IgnoreList.Contains(searchedField)) + { + FieldInfo newField = newType.GetField(searchedField); + FieldInfo oldField = oldType.GetField(searchedField); + + if (newField != null) + { + if (newField.FieldType == oldField.FieldType) + { + newField.SetValue(newFeedback, oldField.GetValue(oldFeedback)); + } + else + { + if (oldField.FieldType.IsEnum) + { + newField.SetValue(newFeedback, (int)oldField.GetValue(oldFeedback)); + } + } + } + } + } + MMDebug.DebugLogInfo("Added new feedback of type "+newTypeName); + } + } + newPlayer.RefreshCache(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Legacy/MMFeedbacksEditor.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Legacy/MMFeedbacksEditor.cs.meta new file mode 100644 index 0000000..808357f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Legacy/MMFeedbacksEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4beaab234dd88a499a16fd7a67bb948 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/MoreMountains.Feedbacks.Editor.asmref b/Assets/Feel/MMFeedbacks/Editor/MoreMountains.Feedbacks.Editor.asmref new file mode 100644 index 0000000..4de2cbc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/MoreMountains.Feedbacks.Editor.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:d9dbf313afb206f458581847ac758375" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/MoreMountains.Feedbacks.Editor.asmref.meta b/Assets/Feel/MMFeedbacks/Editor/MoreMountains.Feedbacks.Editor.asmref.meta new file mode 100644 index 0000000..92f89c1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/MoreMountains.Feedbacks.Editor.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9722df90d8b438e4b8b47fee471fbbee +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources.meta b/Assets/Feel/MMFeedbacks/Editor/Resources.meta new file mode 100644 index 0000000..5e06f6e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 198046438e4ccfa469931b781c7c8685 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowDown.png b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowDown.png new file mode 100644 index 0000000..b2b2419 Binary files /dev/null and b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowDown.png differ diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowDown.png.meta b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowDown.png.meta new file mode 100644 index 0000000..25d41c8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowDown.png.meta @@ -0,0 +1,144 @@ +fileFormatVersion: 2 +guid: a29898adbcfeacb438ad390d9e925afe +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowUp.png b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowUp.png new file mode 100644 index 0000000..cc0acef Binary files /dev/null and b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowUp.png differ diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowUp.png.meta b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowUp.png.meta new file mode 100644 index 0000000..523384a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelArrowUp.png.meta @@ -0,0 +1,144 @@ +fileFormatVersion: 2 +guid: 87529e0fd28c3774fa086315a42b1860 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/FeelSetupRequired.png b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelSetupRequired.png new file mode 100644 index 0000000..5899532 Binary files /dev/null and b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelSetupRequired.png differ diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/FeelSetupRequired.png.meta b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelSetupRequired.png.meta new file mode 100644 index 0000000..a9d00ae --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Resources/FeelSetupRequired.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 1d575a145584c7549994d8a51c689ef8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/MMF_PlayerConfiguration.asset b/Assets/Feel/MMFeedbacks/Editor/Resources/MMF_PlayerConfiguration.asset new file mode 100644 index 0000000..5328132 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Resources/MMF_PlayerConfiguration.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8bcf466015f0b254893ff0208fccf90f, type: 3} + m_Name: MMF_PlayerConfiguration + m_EditorClassIdentifier: + ShowInspectorTips: 1 + AutoDisableKeepPlaymodeChanges: 1 + InspectorGroupsExpandedByDefault: 1 diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/MMF_PlayerConfiguration.asset.meta b/Assets/Feel/MMFeedbacks/Editor/Resources/MMF_PlayerConfiguration.asset.meta new file mode 100644 index 0000000..4f0cd80 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Resources/MMF_PlayerConfiguration.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c14ab46a507c8324c8b54e6a3fdc2b0e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/MMFeedbacksConfiguration.asset b/Assets/Feel/MMFeedbacks/Editor/Resources/MMFeedbacksConfiguration.asset new file mode 100644 index 0000000..bded11a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Resources/MMFeedbacksConfiguration.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 00bf1cad26d9e9342b90f463840caf08, type: 3} + m_Name: MMFeedbacksConfiguration + m_EditorClassIdentifier: + _mmFeedbacks: {fileID: 0} + ShowInspectorTips: 1 diff --git a/Assets/Feel/MMFeedbacks/Editor/Resources/MMFeedbacksConfiguration.asset.meta b/Assets/Feel/MMFeedbacks/Editor/Resources/MMFeedbacksConfiguration.asset.meta new file mode 100644 index 0000000..8cc6d56 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Resources/MMFeedbacksConfiguration.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59a4add72d602ce4a9693b14a97d2a83 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing.meta b/Assets/Feel/MMFeedbacks/Editor/Sequencing.meta new file mode 100644 index 0000000..a43976d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Sequencing.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4afdef3fd4947674681b935fb47100f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMInputSequenceRecorderEditor.cs b/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMInputSequenceRecorderEditor.cs new file mode 100644 index 0000000..f723067 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMInputSequenceRecorderEditor.cs @@ -0,0 +1,189 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Custom editor for sequence recorder + /// + [CustomEditor(typeof(MMInputSequenceRecorder), true)] + [CanEditMultipleObjects] + public class MMInputSequenceRecorderEditor : Editor + { + protected SerializedProperty _Recording; + protected float _inspectorWidth; + protected int _externalMargin = 10; + protected Rect _rect; + protected Color _recordingColor = Color.red; + protected Color _recordingTextColor = Color.white; + protected Vector2 _boxPosition; + protected Vector2 _boxSize; + protected GUIStyle _recordingStyle; + protected MMInputSequenceRecorder _targetRecorder; + protected Event _currentEvent; + + /// + /// Forces constant inspector repaints + /// + /// + public override bool RequiresConstantRepaint() + { + return true; + } + + /// + /// On enable we initialize our styles and listen for input in editor mode + /// + protected virtual void OnEnable() + { + _Recording = serializedObject.FindProperty("Recording"); + + _recordingStyle = new GUIStyle(); + _recordingStyle.normal.textColor = Color.white; + _recordingStyle.fontSize = 30; + _recordingStyle.alignment = TextAnchor.MiddleCenter; + _targetRecorder = (MMInputSequenceRecorder)target; + + System.Reflection.FieldInfo info = typeof(EditorApplication).GetField("globalEventHandler", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); + EditorApplication.CallbackFunction value = (EditorApplication.CallbackFunction)info.GetValue(null); + value += EditorGlobalKeyPress; + info.SetValue(null, value); + } + + /// + /// Looks for input + /// + protected virtual void EditorGlobalKeyPress() + { + if (Application.isPlaying) + { + return; + } + + HandleUtility.AddDefaultControl(GUIUtility.GetControlID(FocusType.Passive)); + _currentEvent = Event.current; + + if (_currentEvent == null) + { + return; + } + + DetectStartAndEnd(); + EditorDetectRecording(); + } + + /// + /// Detects presses on the start or end keys + /// + protected virtual void DetectStartAndEnd() + { + if (_currentEvent.isKey) + { + if (!_targetRecorder.Recording) + { + if ((_currentEvent.keyCode == _targetRecorder.StartRecordingHotkey) && (_currentEvent.type == EventType.KeyDown)) + { + _targetRecorder.StartRecording(); + } + } + else + { + if ((_currentEvent.keyCode == _targetRecorder.StopRecordingHotkey) && (_currentEvent.type == EventType.KeyDown)) + { + _targetRecorder.StopRecording(); + } + } + } + } + + /// + /// Looks for key presses on sequence key bindings + /// + protected virtual void EditorDetectRecording() + { + if (_targetRecorder.Recording && (_targetRecorder.SequenceScriptableObject != null)) + { + if (_currentEvent.isKey) + { + foreach (MMSequenceTrack track in _targetRecorder.SequenceScriptableObject.SequenceTracks) + { + if (_currentEvent.keyCode == (track.Key)) + { + if (track.State == MMSequenceTrackStates.Up) + { + track.State = MMSequenceTrackStates.Idle; + } + if (_currentEvent.type == EventType.KeyDown) + { + if (track.State != MMSequenceTrackStates.Down) + { + // key is down for the first time + _targetRecorder.AddNoteToTrack(track); + } + track.State = MMSequenceTrackStates.Down; + } + if (_currentEvent.type == EventType.KeyUp) + { + // key is up + track.State = MMSequenceTrackStates.Up; + } + } + } + } + } + } + + /// + /// Draws the custom inspector + /// + public override void OnInspectorGUI() + { + serializedObject.Update(); + Undo.RecordObject(target, "Modified Sequence Recorder"); + + _inspectorWidth = EditorGUIUtility.currentViewWidth - 24; + + // display recording label + if (_Recording.boolValue) + { + GUILayout.Box("", GUILayout.Width(_inspectorWidth - _externalMargin), GUILayout.Height(50)); + _boxPosition = GUILayoutUtility.GetLastRect().position; + _boxSize = GUILayoutUtility.GetLastRect().size; + _rect.x = _boxPosition.x; + _rect.y = _boxPosition.y; + _rect.width = _boxSize.x; + _rect.height = _boxSize.y; + EditorGUI.DrawRect(_rect, _recordingColor); + + EditorGUI.LabelField(_rect, "RECORDING", _recordingStyle); + } + + DrawDefaultInspector(); + + // separator + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Controls", EditorStyles.boldLabel); + + if (!_Recording.boolValue) + { + // display start recording button + if (GUILayout.Button("Start Recording")) + { + _targetRecorder.StartRecording(); + } + } + else + { + // display stop recording button + if (GUILayout.Button("Stop Recording")) + { + _targetRecorder.StopRecording(); + } + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMInputSequenceRecorderEditor.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMInputSequenceRecorderEditor.cs.meta new file mode 100644 index 0000000..99c0c05 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMInputSequenceRecorderEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 356e077c6b0c8614fa08b93f8099bedf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMSequencerEditor.cs b/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMSequencerEditor.cs new file mode 100644 index 0000000..2ea5ba5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMSequencerEditor.cs @@ -0,0 +1,418 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Custom editor for MMSequencer, handles recalibration and sequencer display + /// + [CustomEditor(typeof(MMSequencer), true)] + [CanEditMultipleObjects] + public class MMSequencerEditor : Editor + { + protected MMSequencer _targetSequencer; + protected float _inspectorWidth; + protected GUIStyle _buttonStyle; + protected GUIStyle _trackControlStyle; + protected GUIStyle _indexStyle; + protected Texture2D _buttonBackground; + protected Texture2D _dotBackground; + protected Color _buttonColor; + protected Color _trackControlColor; + + protected Color _emptyButtonColor = new Color(0,0,0,0.5f); + protected Color _empty4ButtonColor = new Color(0, 0, 0, 0.75f); + protected const float _buttonWidth = 24; + protected const float _trackControlWidth = 11; + protected const float _distanceBetweenButtons = 6f; + protected int _boxesPerLine; + protected Color _originalBackgroundColor; + protected Color _controlColor; + + protected List _trackControlLastUseTimestamps; + + /// + /// We want constant repaint on this inspector + /// + /// + public override bool RequiresConstantRepaint() + { + return true; + } + + /// + /// On enable we grab our textures and initialize our styles + /// + protected virtual void OnEnable() + { + _targetSequencer = (MMSequencer)target; + _buttonBackground = Resources.Load("SequencerButtonBackground") as Texture2D; + _dotBackground = Resources.Load("SequencerDotBackground") as Texture2D; + _originalBackgroundColor = GUI.backgroundColor; + + _buttonStyle = new GUIStyle(); + _buttonStyle.normal.background = _buttonBackground; + _buttonStyle.fixedWidth = _buttonWidth; + _buttonStyle.fixedHeight = _buttonWidth; + + _trackControlStyle = new GUIStyle(); + _trackControlStyle.normal.background = _dotBackground; + _trackControlStyle.normal.textColor = (Application.isPlaying) ? Color.black : Color.white; + _trackControlStyle.fixedWidth = _trackControlWidth; + _trackControlStyle.fixedHeight = _trackControlWidth; + _trackControlStyle.margin = new RectOffset(0, 0, 1, 0); + _trackControlStyle.alignment = TextAnchor.MiddleCenter; + _trackControlStyle.fontSize = 10; + + + _indexStyle = new GUIStyle(); + _indexStyle.normal.background = _dotBackground; + _indexStyle.normal.textColor = Color.white; + _indexStyle.alignment = TextAnchor.MiddleCenter; + _indexStyle.fixedWidth = _trackControlWidth * 1.5f; + _indexStyle.fixedHeight = _trackControlWidth * 1.5f; + + FillControlList(); + } + + protected virtual void FillControlList() + { + // fill the control timer list + if (_targetSequencer.Sequence != null) + { + _trackControlLastUseTimestamps = new List(); + foreach (MMSequenceTrack track in _targetSequencer.Sequence.SequenceTracks) + { + _trackControlLastUseTimestamps.Add(0f); + } + } + } + + /// + /// Draws the default inspector and the sequencer + /// + public override void OnInspectorGUI() + { + serializedObject.Update(); + Undo.RecordObject(target, "Modified Sequence Recorder"); + + DrawDefaultInspector(); + + if (_targetSequencer.Sequence == null) + { + _targetSequencer.LastSequence = null; + return; + } + + // gets the width and computes how many boxes we can fit per line + _inspectorWidth = EditorGUIUtility.currentViewWidth - 24; + _boxesPerLine = (int)Mathf.Round( + (_inspectorWidth - ((_targetSequencer.Sequence.SequenceTracks.Count) * _distanceBetweenButtons) - _trackControlWidth - _distanceBetweenButtons) + / (_buttonWidth + _distanceBetweenButtons) + ) + 1; + + LookForChanges(); + + // separator + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Sequencer", EditorStyles.boldLabel); + + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("Destroy and rebuild sequence", EditorStyles.miniButtonLeft)) + { + _targetSequencer.Sequence.QuantizedSequence = null; + _targetSequencer.LastTracksCount = -1; + _targetSequencer.ApplySequencerLengthToSequence(); + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + if (GUILayout.Button("Clear Sequence", EditorStyles.miniButtonMid)) + { + _targetSequencer.ClearSequence(); + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + if (GUILayout.Button("[ - ] Length - 1", EditorStyles.miniButtonMid)) + { + _targetSequencer.DecrementLength(); + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + if (GUILayout.Button("[ + ] Length + 1", EditorStyles.miniButtonRight)) + { + _targetSequencer.IncrementLength(); + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + DrawSequenceIndexes(); + for (int i = 0; i < _targetSequencer.Sequence.SequenceTracks.Count; i++) + { + DrawTrack(i); + } + + DrawControlButtons(); + + serializedObject.ApplyModifiedProperties(); + } + + /// + /// Whenever we detect a change in the settings we recalibrate our sequence accordingly + /// + protected virtual void LookForChanges() + { + if (_targetSequencer.LastSequence != _targetSequencer.Sequence) + { + FillControlList(); + if (_targetSequencer.Sequence.QuantizedSequence.Count > 0) + { + if (_targetSequencer.Sequence.QuantizedSequence[0].Line.Count != _targetSequencer.SequencerLength) + { + _targetSequencer.SequencerLength = _targetSequencer.Sequence.QuantizedSequence[0].Line.Count; + _targetSequencer.LastSequencerLength = _targetSequencer.SequencerLength; + _targetSequencer.LastSequence = _targetSequencer.Sequence; + _targetSequencer.LastTracksCount = _targetSequencer.Sequence.SequenceTracks.Count; + } + } + else + { + _targetSequencer.ApplySequencerLengthToSequence(); + _targetSequencer.LastSequence = _targetSequencer.Sequence; + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + } + + if (_targetSequencer.LastSequence == _targetSequencer.Sequence) + { + if (_targetSequencer.LastTracksCount != _targetSequencer.Sequence.SequenceTracks.Count) + { + FillControlList(); + _targetSequencer.ApplySequencerLengthToSequence(); + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + if (_targetSequencer.LastBPM != _targetSequencer.BPM) + { + _targetSequencer.UpdateTimestampsToMatchNewBPM(); + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + } + + _targetSequencer.EditorMaintenance(); + } + + /// + /// Draws control buttons + /// + protected virtual void DrawControlButtons() + { + if (!Application.isPlaying) + { + return; + } + GUI.backgroundColor = _originalBackgroundColor; + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Controls", EditorStyles.boldLabel); + + if (_targetSequencer.Playing) + { + if (GUILayout.Button("Stop Playing")) + { + _targetSequencer.StopSequence(); + } + } + else + { + if (GUILayout.Button("Start Playing")) + { + _targetSequencer.PlaySequence(); + } + } + if (GUILayout.Button("Play Next Beat")) + { + _targetSequencer.PlayBeat(); + } + } + + /// + /// Draws an index for each sequence item + /// + protected virtual void DrawSequenceIndexes() + { + GUILayout.BeginHorizontal(); + + GUI.backgroundColor = _emptyButtonColor; + GUILayout.Label("", GUILayout.Width(_trackControlWidth + _distanceBetweenButtons), GUILayout.Height(_trackControlWidth)); + string label = ""; + for (int i = 0; i < _targetSequencer.SequencerLength; i++) + { + label = i < 10 ? " " + i.ToString() : i.ToString(); + _trackControlStyle.fontStyle = (i % 4 == 0) ? FontStyle.Bold : FontStyle.Normal; + //GUILayout.Label(label, _indexStyle, GUILayout.Width(_buttonWidth + _distanceBetweenButtons), GUILayout.Height(_trackControlWidth)); + if (GUILayout.Button(label, _indexStyle, GUILayout.Width(_buttonWidth + _distanceBetweenButtons), GUILayout.Height(_trackControlWidth))) + { + _targetSequencer.ToggleStep(i); + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + } + GUI.backgroundColor = _originalBackgroundColor; + GUILayout.EndHorizontal(); + GUILayout.Space(_distanceBetweenButtons * 1.5f); + } + + /// + /// Draws a line of the sequencer + /// + /// + protected virtual void DrawTrack(int trackIndex) + { + int counter = 0; + + if (_targetSequencer.Sequence.QuantizedSequence == null) + { + return; + } + + if (_targetSequencer.Sequence.QuantizedSequence.Count != _targetSequencer.Sequence.SequenceTracks.Count) + { + return; + } + + GUILayout.BeginHorizontal(); + + + GUILayout.BeginVertical(); + + // draw active track control + + if (_targetSequencer.Sequence.SequenceTracks[trackIndex].Active) + { + _trackControlColor = _targetSequencer.Sequence.SequenceTracks[trackIndex].TrackColor; + } + else + { + _trackControlColor = _emptyButtonColor; + } + + GUI.backgroundColor = _trackControlColor; + if (GUILayout.Button("", _trackControlStyle, GUILayout.Width(_trackControlWidth), GUILayout.Height(_trackControlWidth))) + { + if (_targetSequencer.TrackEvents[trackIndex] != null) + { + _targetSequencer.ToggleActive(trackIndex); + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + } + + GUILayout.Space(_distanceBetweenButtons / 5); + + // draw test track control + _trackControlColor = _targetSequencer.Sequence.SequenceTracks[trackIndex].TrackColor; + _controlColor = Application.isPlaying ? SequencerColor(_trackControlLastUseTimestamps[trackIndex], _trackControlColor) : Color.black; + GUI.backgroundColor = _controlColor; + if (GUILayout.Button(trackIndex.ToString(), _trackControlStyle, GUILayout.Width(_trackControlWidth), GUILayout.Height(_trackControlWidth))) + { + if (_targetSequencer.TrackEvents[trackIndex] != null) + { + _trackControlLastUseTimestamps[trackIndex] = Time.time; + _targetSequencer.PlayTrackEvent(trackIndex); + } + } + GUILayout.EndVertical(); + + GUILayout.Space(_distanceBetweenButtons); + + for (int i = 0; i < _targetSequencer.Sequence.QuantizedSequence[trackIndex].Line.Count; i++) + { + // handle new lines + if (counter > _boxesPerLine ) + { + GUILayout.EndHorizontal(); + GUILayout.Space(_distanceBetweenButtons); + GUILayout.BeginHorizontal(); + counter = 0; + } + + if (_targetSequencer.Sequence.QuantizedSequence[trackIndex].Line[i].ID != -1) + { + _buttonColor = _targetSequencer.Sequence.SequenceTracks[trackIndex].TrackColor; + } + else + { + if (i % 4 == 0) + { + _buttonColor = _empty4ButtonColor; + } + else + { + _buttonColor = _emptyButtonColor; + } + } + // if the track is inactive, we reduce colors + if (!_targetSequencer.Sequence.SequenceTracks[trackIndex].Active) + { + _buttonColor = _buttonColor / 2f; + } + + DrawSequenceButton(trackIndex, i, _buttonColor); + + counter++; + } + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + GUILayout.Space(_distanceBetweenButtons); + } + + /// + /// Draws an interactive button for the sequencer + /// + /// + /// + /// + protected virtual void DrawSequenceButton(int trackIndex, int sequenceIndex, Color buttonColor) + { + + if (Application.isPlaying && _targetSequencer.PlayedOnce && (_targetSequencer.LastBeatIndex == sequenceIndex)) + { + if (_targetSequencer.BeatThisFrame) + { + _buttonColor = Color.white; + } + else + { + _buttonColor = SequencerColor(_targetSequencer.LastBeatTimestamp, buttonColor); + } + } + else + { + _buttonColor = buttonColor; + } + + GUI.backgroundColor = _buttonColor; + if (GUILayout.Button("", _buttonStyle, GUILayout.Width(_buttonWidth), GUILayout.Height(_buttonWidth))) + { + bool active = (_targetSequencer.Sequence.QuantizedSequence[trackIndex].Line[sequenceIndex].ID == _targetSequencer.Sequence.SequenceTracks[trackIndex].ID); + _targetSequencer.Sequence.QuantizedSequence[trackIndex].Line[sequenceIndex].ID = active ? -1 : _targetSequencer.Sequence.SequenceTracks[trackIndex].ID; + EditorUtility.SetDirty(_targetSequencer.Sequence); + } + GUILayout.Space(_distanceBetweenButtons); + } + + /// + /// Color interpolation on hits + /// + /// + /// + /// + protected virtual Color SequencerColor(float lastBeatTimestamp, Color buttonColor) + { + float x = (Time.time - lastBeatTimestamp); + float A = 0f; + float B = (60f / _targetSequencer.BPM) / 4f; + float C = 0f; + float D = 1f; + float t = C + (x - A) / (B - A) * (D - C); + return Color.Lerp(Color.white, buttonColor, t); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMSequencerEditor.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMSequencerEditor.cs.meta new file mode 100644 index 0000000..af7d7ee --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Sequencing/MMSequencerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f57413f575191641b987d9d04e61e3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources.meta b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources.meta new file mode 100644 index 0000000..d895361 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45d354ba7398508478aa7bd1ea7fd93d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerButtonBackground.png b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerButtonBackground.png new file mode 100644 index 0000000..1e9a807 Binary files /dev/null and b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerButtonBackground.png differ diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerButtonBackground.png.meta b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerButtonBackground.png.meta new file mode 100644 index 0000000..29a189c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerButtonBackground.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: e802b29e86b4ef74abe728250ecaf37c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 2, y: 2, z: 2, w: 2} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerDotBackground.png b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerDotBackground.png new file mode 100644 index 0000000..f387874 Binary files /dev/null and b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerDotBackground.png differ diff --git a/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerDotBackground.png.meta b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerDotBackground.png.meta new file mode 100644 index 0000000..b322e81 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Sequencing/Resources/SequencerDotBackground.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 82c9d5c8726c57249b51c39e76eee072 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Shakers.meta b/Assets/Feel/MMFeedbacks/Editor/Shakers.meta new file mode 100644 index 0000000..1476fb1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Shakers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2578f5ded293ceb49bcce2465e848ec0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Shakers/MMWiggleEditor.cs b/Assets/Feel/MMFeedbacks/Editor/Shakers/MMWiggleEditor.cs new file mode 100644 index 0000000..e423881 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Shakers/MMWiggleEditor.cs @@ -0,0 +1,264 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(MMWiggle), true)] + public class MMWiggleEditor : Editor + { + public struct WiggleEditorProperties + { + public SerializedProperty WigglePermitted; + + public SerializedProperty WiggleType; + public SerializedProperty UseUnscaledTime; + public SerializedProperty TimeMultiplier; + public SerializedProperty RelativeAmplitude; + public SerializedProperty UniformValues; + public SerializedProperty ForceVectorLength; + public SerializedProperty ForcedVectorLength; + public SerializedProperty StartWigglingAutomatically; + + public SerializedProperty SmoothPingPong; + public SerializedProperty UseSpeedCurve; + public SerializedProperty SpeedCurve; + + public SerializedProperty FrequencyMin; + public SerializedProperty FrequencyMax; + + public SerializedProperty AmplitudeMin; + public SerializedProperty AmplitudeMax; + public SerializedProperty PauseMin; + public SerializedProperty PauseMax; + + public SerializedProperty NoiseFrequencyMin; + public SerializedProperty NoiseFrequencyMax; + public SerializedProperty NoiseShiftMin; + public SerializedProperty NoiseShiftMax; + + public SerializedProperty LimitedTime; + public SerializedProperty LimitedTimeTotal; + public SerializedProperty LimitedTimeLeft; + public SerializedProperty LimitedTimeFalloff; + public SerializedProperty LimitedTimeResetValue; + + public SerializedProperty Curve; + public SerializedProperty RemapCurveZeroMin; + public SerializedProperty RemapCurveZeroMax; + public SerializedProperty RemapCurveOneMin; + public SerializedProperty RemapCurveOneMax; + public SerializedProperty RelativeCurveAmplitude; + public SerializedProperty CurvePingPong; + } + + protected SerializedProperty _updateMode; + + protected SerializedProperty _positionActive; + protected SerializedProperty _rotationActive; + protected SerializedProperty _scaleActive; + + protected SerializedProperty _positionProperties; + protected SerializedProperty _rotationProperties; + protected SerializedProperty _scaleProperties; + + protected WiggleEditorProperties _positionEditorProperties; + protected WiggleEditorProperties _rotationEditorProperties; + protected WiggleEditorProperties _scaleEditorProperties; + + protected SerializedProperty _debugWiggleDuration; + + protected MMWiggle _mmWiggle; + + public bool StartWigglingAutomatically = true; + + protected virtual void OnEnable() + { + _mmWiggle = (MMWiggle)target; + + _updateMode = serializedObject.FindProperty("UpdateMode"); + + _positionProperties = serializedObject.FindProperty("PositionWiggleProperties"); + _rotationProperties = serializedObject.FindProperty("RotationWiggleProperties"); + _scaleProperties = serializedObject.FindProperty("ScaleWiggleProperties"); + + _positionActive = serializedObject.FindProperty("PositionActive"); + _rotationActive = serializedObject.FindProperty("RotationActive"); + _scaleActive = serializedObject.FindProperty("ScaleActive"); + + _debugWiggleDuration = serializedObject.FindProperty("DebugWiggleDuration"); + + InitializeProperties(_positionProperties, ref _positionEditorProperties); + InitializeProperties(_rotationProperties, ref _rotationEditorProperties); + InitializeProperties(_scaleProperties, ref _scaleEditorProperties); + } + + protected virtual void InitializeProperties(SerializedProperty targetProperty, ref WiggleEditorProperties editorProperties) + { + editorProperties.WigglePermitted = targetProperty.FindPropertyRelative("WigglePermitted"); + editorProperties.WiggleType = targetProperty.FindPropertyRelative("WiggleType"); + editorProperties.UseUnscaledTime = targetProperty.FindPropertyRelative("UseUnscaledTime"); + editorProperties.TimeMultiplier = targetProperty.FindPropertyRelative("TimeMultiplier"); + editorProperties.RelativeAmplitude = targetProperty.FindPropertyRelative("RelativeAmplitude"); + editorProperties.UniformValues = targetProperty.FindPropertyRelative("UniformValues"); + editorProperties.ForceVectorLength = targetProperty.FindPropertyRelative("ForceVectorLength"); + editorProperties.ForcedVectorLength = targetProperty.FindPropertyRelative("ForcedVectorLength"); + editorProperties.StartWigglingAutomatically = targetProperty.FindPropertyRelative("StartWigglingAutomatically"); + editorProperties.SmoothPingPong = targetProperty.FindPropertyRelative("SmoothPingPong"); + editorProperties.UseSpeedCurve = targetProperty.FindPropertyRelative("UseSpeedCurve"); + editorProperties.SpeedCurve = targetProperty.FindPropertyRelative("SpeedCurve"); + editorProperties.FrequencyMin = targetProperty.FindPropertyRelative("FrequencyMin"); + editorProperties.FrequencyMax = targetProperty.FindPropertyRelative("FrequencyMax"); + editorProperties.AmplitudeMin = targetProperty.FindPropertyRelative("AmplitudeMin"); + editorProperties.AmplitudeMax = targetProperty.FindPropertyRelative("AmplitudeMax"); + editorProperties.PauseMin = targetProperty.FindPropertyRelative("PauseMin"); + editorProperties.PauseMax = targetProperty.FindPropertyRelative("PauseMax"); + editorProperties.NoiseFrequencyMin = targetProperty.FindPropertyRelative("NoiseFrequencyMin"); + editorProperties.NoiseFrequencyMax = targetProperty.FindPropertyRelative("NoiseFrequencyMax"); + editorProperties.NoiseShiftMin = targetProperty.FindPropertyRelative("NoiseShiftMin"); + editorProperties.NoiseShiftMax = targetProperty.FindPropertyRelative("NoiseShiftMax"); + editorProperties.LimitedTime = targetProperty.FindPropertyRelative("LimitedTime"); + editorProperties.LimitedTimeTotal = targetProperty.FindPropertyRelative("LimitedTimeTotal"); + editorProperties.LimitedTimeLeft = targetProperty.FindPropertyRelative("LimitedTimeLeft"); + editorProperties.LimitedTimeFalloff = targetProperty.FindPropertyRelative("LimitedTimeFalloff"); + editorProperties.LimitedTimeResetValue = targetProperty.FindPropertyRelative("LimitedTimeResetValue"); + editorProperties.Curve = targetProperty.FindPropertyRelative("Curve"); + editorProperties.RemapCurveZeroMin = targetProperty.FindPropertyRelative("RemapCurveZeroMin"); + editorProperties.RemapCurveZeroMax = targetProperty.FindPropertyRelative("RemapCurveZeroMax"); + editorProperties.RemapCurveOneMin = targetProperty.FindPropertyRelative("RemapCurveOneMin"); + editorProperties.RemapCurveOneMax = targetProperty.FindPropertyRelative("RemapCurveOneMax"); + editorProperties.RelativeCurveAmplitude = targetProperty.FindPropertyRelative("RelativeCurveAmplitude"); + editorProperties.CurvePingPong = targetProperty.FindPropertyRelative("CurvePingPong"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + Undo.RecordObject(target, "Modified MMWiggle"); + + EditorGUILayout.Space(); + EditorGUILayout.PropertyField(_updateMode); + EditorGUILayout.Space(); + MMFeedbackStyling.DrawSplitter(); + DrawValueEditor("Position", _positionActive, _positionEditorProperties, _mmWiggle.PositionWiggleProperties.WiggleType); + DrawValueEditor("Rotation", _rotationActive, _rotationEditorProperties, _mmWiggle.RotationWiggleProperties.WiggleType); + DrawValueEditor("Scale", _scaleActive, _scaleEditorProperties, _mmWiggle.ScaleWiggleProperties.WiggleType); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Debug", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(_debugWiggleDuration); + EditorGUILayout.BeginHorizontal(); + { + if (GUILayout.Button("Wiggle Position", EditorStyles.miniButtonLeft)) + { + _mmWiggle.WigglePosition(_debugWiggleDuration.floatValue); + } + if (GUILayout.Button("Wiggle Rotation", EditorStyles.miniButtonMid)) + { + _mmWiggle.WiggleRotation(_debugWiggleDuration.floatValue); + } + if (GUILayout.Button("Wiggle Scale", EditorStyles.miniButtonRight)) + { + _mmWiggle.WiggleScale(_debugWiggleDuration.floatValue); + } + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.Space(); + + serializedObject.ApplyModifiedProperties(); + } + + protected virtual void DrawValueEditor(string title, SerializedProperty propertyActive, WiggleEditorProperties editorProperties, WiggleTypes wiggleType) + { + bool propertyIsExpanded = propertyActive.isExpanded; + bool propertyIsActive = propertyActive.boolValue; + + + Rect headerRect = MMFeedbackStyling.DrawSimpleHeader( + ref propertyIsExpanded, + ref propertyIsActive, + title); + + propertyActive.isExpanded = propertyIsExpanded; + propertyActive.boolValue = propertyIsActive; + + if (propertyIsExpanded) + { + EditorGUI.BeginDisabledGroup(!propertyIsActive); + + EditorGUILayout.PropertyField(editorProperties.WigglePermitted); + EditorGUILayout.PropertyField(editorProperties.WiggleType); + EditorGUILayout.PropertyField(editorProperties.UseUnscaledTime); + EditorGUILayout.PropertyField(editorProperties.TimeMultiplier); + + if ((wiggleType == WiggleTypes.PingPong) || (wiggleType == WiggleTypes.Random)) + { + if (wiggleType == WiggleTypes.PingPong) + { + EditorGUILayout.PropertyField(editorProperties.SmoothPingPong); + } + EditorGUILayout.PropertyField(editorProperties.UseSpeedCurve); + if (editorProperties.UseSpeedCurve.boolValue) + { + EditorGUILayout.PropertyField(editorProperties.SpeedCurve); + } + EditorGUILayout.PropertyField(editorProperties.AmplitudeMin); + EditorGUILayout.PropertyField(editorProperties.AmplitudeMax); + EditorGUILayout.PropertyField(editorProperties.RelativeAmplitude); + EditorGUILayout.PropertyField(editorProperties.UniformValues); + EditorGUILayout.PropertyField(editorProperties.ForceVectorLength); + EditorGUILayout.PropertyField(editorProperties.ForcedVectorLength); + EditorGUILayout.PropertyField(editorProperties.FrequencyMin); + EditorGUILayout.PropertyField(editorProperties.FrequencyMax); + EditorGUILayout.PropertyField(editorProperties.PauseMin); + EditorGUILayout.PropertyField(editorProperties.PauseMax); + } + + if (wiggleType == WiggleTypes.Noise) + { + EditorGUILayout.PropertyField(editorProperties.AmplitudeMin); + EditorGUILayout.PropertyField(editorProperties.AmplitudeMax); + EditorGUILayout.PropertyField(editorProperties.RelativeAmplitude); + EditorGUILayout.PropertyField(editorProperties.UniformValues); + EditorGUILayout.PropertyField(editorProperties.ForceVectorLength); + EditorGUILayout.PropertyField(editorProperties.ForcedVectorLength); + EditorGUILayout.PropertyField(editorProperties.NoiseFrequencyMin); + EditorGUILayout.PropertyField(editorProperties.NoiseFrequencyMax); + EditorGUILayout.PropertyField(editorProperties.NoiseShiftMin); + EditorGUILayout.PropertyField(editorProperties.NoiseShiftMax); + } + + if (wiggleType == WiggleTypes.Curve) + { + EditorGUILayout.PropertyField(editorProperties.Curve); + EditorGUILayout.PropertyField(editorProperties.RemapCurveZeroMin); + EditorGUILayout.PropertyField(editorProperties.RemapCurveZeroMax); + EditorGUILayout.PropertyField(editorProperties.RemapCurveOneMin); + EditorGUILayout.PropertyField(editorProperties.RemapCurveOneMax); + EditorGUILayout.PropertyField(editorProperties.RelativeCurveAmplitude); + EditorGUILayout.PropertyField(editorProperties.UniformValues); + EditorGUILayout.PropertyField(editorProperties.ForceVectorLength); + EditorGUILayout.PropertyField(editorProperties.ForcedVectorLength); + EditorGUILayout.PropertyField(editorProperties.CurvePingPong); + EditorGUILayout.PropertyField(editorProperties.FrequencyMin); + EditorGUILayout.PropertyField(editorProperties.FrequencyMax); + } + + EditorGUILayout.PropertyField(editorProperties.LimitedTime); + if (editorProperties.LimitedTime.boolValue) + { + EditorGUILayout.PropertyField(editorProperties.LimitedTimeTotal); + EditorGUILayout.PropertyField(editorProperties.LimitedTimeLeft); + EditorGUILayout.PropertyField(editorProperties.LimitedTimeFalloff); + EditorGUILayout.PropertyField(editorProperties.LimitedTimeResetValue); + } + + EditorGUI.EndDisabledGroup(); + EditorGUILayout.Space(); + } + MMFeedbackStyling.DrawSplitter(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/Editor/Shakers/MMWiggleEditor.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Shakers/MMWiggleEditor.cs.meta new file mode 100644 index 0000000..59c9d8d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Shakers/MMWiggleEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ad790ad6438c39448c9177b592c30fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs.meta b/Assets/Feel/MMFeedbacks/Editor/Springs.meta new file mode 100644 index 0000000..f587cc7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cff4a142d4465664f80a1a78930b3ab5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringColorPropertyDrawer.cs b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringColorPropertyDrawer.cs new file mode 100644 index 0000000..eefdb42 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringColorPropertyDrawer.cs @@ -0,0 +1,28 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace MoreMountains.Feedbacks +{ + [CustomPropertyDrawer(typeof(MMSpringColor))] + class MMSpringColorPropertyDrawer : PropertyDrawer + { + protected float _lastTarget; + protected float _max; + + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var root = new VisualElement(); + + SerializedProperty _colorSpring = property.FindPropertyRelative("ColorSpring"); + root.Add(new PropertyField(_colorSpring)); + + return root; + } + + } +} + + diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringColorPropertyDrawer.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringColorPropertyDrawer.cs.meta new file mode 100644 index 0000000..d29e4ce --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringColorPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d274a27f7628664db49fa023801aa2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringDebugPropertyDrawer.cs b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringDebugPropertyDrawer.cs new file mode 100644 index 0000000..b858f18 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringDebugPropertyDrawer.cs @@ -0,0 +1,71 @@ +using MoreMountains.Tools; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [CustomPropertyDrawer(typeof(MMSpringDebug))] + public class MMSpringDebugPropertyDrawer : PropertyDrawer + { + protected Color _backgroundBarColor = new Color(0f, 0f, 0f, 0.3f); + protected Color _frontBarColor = MMColors.Yellow; + + protected SerializedProperty _currentValue; + protected SerializedProperty _targetValue; + + protected Rect _rect; + protected float _lastTarget; + protected float _max; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + _currentValue = property.FindPropertyRelative("CurrentValue"); + _targetValue = property.FindPropertyRelative("TargetValue"); + + EditorGUI.BeginProperty(position, label, property); + EditorGUI.BeginDisabledGroup(true); + position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); + var indent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + _rect.x = position.x; + _rect.y = position.y; + _rect.width = position.width; + _rect.height = position.height; + EditorGUI.DrawRect(_rect, _backgroundBarColor); + + if (Application.isPlaying) + { + float current = _currentValue.floatValue; + float target = _targetValue.floatValue; + float normalizedValue = 0f; + float diff = target - current; + if (Mathf.Abs(diff) > Mathf.Abs(_max)) + { + _max = diff; + } + + if (_lastTarget != target) + { + _max = diff; + } + + normalizedValue = MMMaths.Remap(diff, -_max, _max, -1f, 1f); + + float newWidth = MMMaths.Remap(normalizedValue, -1f, 1f, -position.width/2f, position.width/2f); + _rect.x = position.x + (position.width/2f); + _rect.y = position.y; + _rect.width = newWidth; + _rect.height = position.height; + EditorGUI.DrawRect(_rect, _frontBarColor); + + _lastTarget = target; + } + + EditorGUI.indentLevel = indent; + EditorGUI.EndDisabledGroup(); + EditorGUI.EndProperty(); + + } + } +} diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringDebugPropertyDrawer.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringDebugPropertyDrawer.cs.meta new file mode 100644 index 0000000..5770a28 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringDebugPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35b7126fb201e074ea5a3421ba27c5b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringFloatPropertyDrawer.cs b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringFloatPropertyDrawer.cs new file mode 100644 index 0000000..3b2dd9e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringFloatPropertyDrawer.cs @@ -0,0 +1,67 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace MoreMountains.Feedbacks +{ + [CustomPropertyDrawer(typeof(MMSpringFloat))] + class MMSpringFloatPropertyDrawer : PropertyDrawer + { + protected float _lastTarget; + protected float _max; + + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var root = new VisualElement(); + + root.style.backgroundColor = new StyleColor(new Color(255,255,255,0.03f)); + root.style.marginTop = 5; + root.style.paddingRight = 5; + + SerializedProperty _damping = property.FindPropertyRelative("Damping"); + SerializedProperty _frequency = property.FindPropertyRelative("Frequency"); + SerializedProperty _unifiedSpring = property.FindPropertyRelative("UnifiedSpring"); + SerializedProperty _springDebug = property.FindPropertyRelative("SpringDebug"); + + root.Add(new PropertyField(_damping)); + root.Add(new PropertyField(_frequency)); + + if (!_unifiedSpring.boolValue) + { + SerializedProperty _clampSettings = property.FindPropertyRelative("ClampSettings"); + root.Add(new PropertyField(_clampSettings)); + } + + if (Application.isPlaying && !_unifiedSpring.boolValue) + { + VisualElement horizontalLayout = new VisualElement(); + horizontalLayout.style.flexDirection = FlexDirection.Row; + root.Add(horizontalLayout); + + FloatField currentValue = new FloatField("CurrentValue") { bindingPath = "CurrentValueDisplay", isReadOnly = true, style = { flexGrow = 1, paddingRight = 10 } }; + currentValue.SetEnabled(false); + currentValue.AddToClassList("mm-fixed-width-floatfield"); + horizontalLayout.Add(currentValue); + + FloatField targetValue = new FloatField("TargetValue") { bindingPath = "TargetValueDisplay", isReadOnly = true, style = { flexGrow = 1} }; + targetValue.SetEnabled(false); + targetValue.AddToClassList("mm-fixed-width-floatfield"); + horizontalLayout.Add(targetValue); + + FloatField velocity = new FloatField("Velocity") { bindingPath = "VelocityDisplay", isReadOnly = true, style = { flexGrow = 1, paddingLeft = 10} }; + velocity.SetEnabled(false); + velocity.AddToClassList("mm-fixed-width-floatfield"); + horizontalLayout.Add(velocity); + + root.Add(new PropertyField(_springDebug)); + } + + return root; + } + + } +} + + diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringFloatPropertyDrawer.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringFloatPropertyDrawer.cs.meta new file mode 100644 index 0000000..8ac1af6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringFloatPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de1ae83f81ca8aa4ea1a8f2fa8b5a8b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector2PropertyDrawer.cs b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector2PropertyDrawer.cs new file mode 100644 index 0000000..0c7f102 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector2PropertyDrawer.cs @@ -0,0 +1,81 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace MoreMountains.Feedbacks +{ + [CustomPropertyDrawer(typeof(MMSpringVector2))] + class MMSpringVector2PropertyDrawer : PropertyDrawer + { + protected float _lastTarget; + protected float _max; + + protected PropertyField _unifiedSpringField; + protected Label _springXLabel; + protected PropertyField _springXField; + protected Label _springYLabel; + protected PropertyField _springYField; + + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var root = new VisualElement(); + + SerializedProperty _separateAxis = property.FindPropertyRelative("SeparateAxis"); + SerializedProperty _unifiedSpring = property.FindPropertyRelative("UnifiedSpring"); + SerializedProperty _springX = property.FindPropertyRelative("SpringX"); + SerializedProperty _springY = property.FindPropertyRelative("SpringY"); + + Toggle boolToggle = new Toggle("SeparateAxis") { value = property.FindPropertyRelative("SeparateAxis").boolValue }; + boolToggle.RegisterValueChangedCallback(evt => + { + property.FindPropertyRelative("SeparateAxis").boolValue = evt.newValue; + ToggleFields(evt.newValue); + _separateAxis.serializedObject.ApplyModifiedProperties(); + }); + root.Add(boolToggle); + + _unifiedSpringField = new PropertyField(_unifiedSpring); + + _springXLabel = new Label("Spring X"); + _springXLabel.style.backgroundColor = new StyleColor(new Color(255,0,0,0.2f)); + _springXLabel.style.marginLeft = -10; + _springXLabel.style.paddingLeft = 14; + _springXLabel.style.paddingBottom = 3; + _springXLabel.style.paddingTop = 3; + _springXField = new PropertyField(_springX); + + + _springYLabel = new Label("Spring Y"); + _springYLabel.style.backgroundColor = new StyleColor(new Color(0,255,0,0.1f)); + _springYLabel.style.marginLeft = -10; + _springYLabel.style.paddingLeft = 14; + _springYLabel.style.paddingBottom = 3; + _springYLabel.style.paddingTop = 3; + _springYField = new PropertyField(_springY); + + root.Add(_unifiedSpringField); + root.Add(_springXLabel); + root.Add(_springXField); + root.Add(_springYLabel); + root.Add(_springYField); + + ToggleFields(boolToggle.value); + + return root; + } + + private void ToggleFields(bool show) + { + _unifiedSpringField.style.display = show ? DisplayStyle.None : DisplayStyle.Flex; + _springXLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springXField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springYLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springYField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + } + + } +} + + diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector2PropertyDrawer.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector2PropertyDrawer.cs.meta new file mode 100644 index 0000000..7496f34 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector2PropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ce385a1b7b20b9489103d52d3105023 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector3PropertyDrawer.cs b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector3PropertyDrawer.cs new file mode 100644 index 0000000..10b3ba4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector3PropertyDrawer.cs @@ -0,0 +1,97 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace MoreMountains.Feedbacks +{ + [CustomPropertyDrawer(typeof(MMSpringVector3))] + class MMSpringVector3PropertyDrawer : PropertyDrawer + { + protected float _lastTarget; + protected float _max; + + protected PropertyField _unifiedSpringField; + protected Label _springXLabel; + protected PropertyField _springXField; + protected Label _springYLabel; + protected PropertyField _springYField; + protected Label _springZLabel; + protected PropertyField _springZField; + + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var root = new VisualElement(); + + SerializedProperty _separateAxis = property.FindPropertyRelative("SeparateAxis"); + SerializedProperty _unifiedSpring = property.FindPropertyRelative("UnifiedSpring"); + SerializedProperty _springX = property.FindPropertyRelative("SpringX"); + SerializedProperty _springY = property.FindPropertyRelative("SpringY"); + SerializedProperty _springZ = property.FindPropertyRelative("SpringZ"); + + Toggle boolToggle = new Toggle("SeparateAxis") { value = property.FindPropertyRelative("SeparateAxis").boolValue }; + boolToggle.RegisterValueChangedCallback(evt => + { + property.FindPropertyRelative("SeparateAxis").boolValue = evt.newValue; + ToggleFields(evt.newValue); + _separateAxis.serializedObject.ApplyModifiedProperties(); + }); + root.Add(boolToggle); + + _unifiedSpringField = new PropertyField(_unifiedSpring); + + _springXLabel = new Label("Spring X"); + _springXLabel.style.backgroundColor = new StyleColor(new Color(1f,0,0,0.2f)); + _springXLabel.style.marginLeft = -10; + _springXLabel.style.paddingLeft = 14; + _springXLabel.style.paddingBottom = 3; + _springXLabel.style.paddingTop = 3; + _springXField = new PropertyField(_springX); + + + _springYLabel = new Label("Spring Y"); + _springYLabel.style.backgroundColor = new StyleColor(new Color(0,1f,0,0.1f)); + _springYLabel.style.marginLeft = -10; + _springYLabel.style.paddingLeft = 14; + _springYLabel.style.paddingBottom = 3; + _springYLabel.style.paddingTop = 3; + _springYField = new PropertyField(_springY); + + + _springZLabel = new Label("Spring Z"); + _springZLabel.style.backgroundColor = new StyleColor(new Color(0,0.4f,0.9f,0.2f)); + _springZLabel.style.marginLeft = -10; + _springZLabel.style.paddingLeft = 14; + _springZLabel.style.paddingBottom = 3; + _springZLabel.style.paddingTop = 3; + _springZField = new PropertyField(_springZ); + + root.Add(_unifiedSpringField); + root.Add(_springXLabel); + root.Add(_springXField); + root.Add(_springYLabel); + root.Add(_springYField); + root.Add(_springZLabel); + root.Add(_springZField); + + ToggleFields(boolToggle.value); + + return root; + } + + private void ToggleFields(bool show) + { + _unifiedSpringField.style.display = show ? DisplayStyle.None : DisplayStyle.Flex; + _springXLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springXField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springYLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springYField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springZLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springZField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + } + + } +} + + diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector3PropertyDrawer.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector3PropertyDrawer.cs.meta new file mode 100644 index 0000000..2fc805c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector3PropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a4e11f66ff9ee844abeabf0af54b970 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector4PropertyDrawer.cs b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector4PropertyDrawer.cs new file mode 100644 index 0000000..ebf5c9d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector4PropertyDrawer.cs @@ -0,0 +1,110 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEditor; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace MoreMountains.Feedbacks +{ + [CustomPropertyDrawer(typeof(MMSpringVector4))] + class MMSpringVector4PropertyDrawer : PropertyDrawer + { + protected float _lastTarget; + protected float _max; + + protected PropertyField _unifiedSpringField; + protected Label _springXLabel; + protected PropertyField _springXField; + protected Label _springYLabel; + protected PropertyField _springYField; + protected Label _springZLabel; + protected PropertyField _springZField; + protected Label _springWLabel; + protected PropertyField _springWField; + + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var root = new VisualElement(); + + SerializedProperty _separateAxis = property.FindPropertyRelative("SeparateAxis"); + SerializedProperty _unifiedSpring = property.FindPropertyRelative("UnifiedSpring"); + SerializedProperty _springX = property.FindPropertyRelative("SpringX"); + SerializedProperty _springY = property.FindPropertyRelative("SpringY"); + SerializedProperty _springZ = property.FindPropertyRelative("SpringZ"); + SerializedProperty _springW = property.FindPropertyRelative("SpringW"); + + Toggle boolToggle = new Toggle("SeparateAxis") { value = property.FindPropertyRelative("SeparateAxis").boolValue }; + boolToggle.RegisterValueChangedCallback(evt => + { + property.FindPropertyRelative("SeparateAxis").boolValue = evt.newValue; + ToggleFields(evt.newValue); + _separateAxis.serializedObject.ApplyModifiedProperties(); + }); + root.Add(boolToggle); + + _unifiedSpringField = new PropertyField(_unifiedSpring); + + _springXLabel = new Label("Spring X"); + _springXLabel.style.backgroundColor = new StyleColor(new Color(1f,0,0,0.2f)); + _springXLabel.style.marginLeft = -10; + _springXLabel.style.paddingLeft = 14; + _springXLabel.style.paddingBottom = 3; + _springXLabel.style.paddingTop = 3; + _springXField = new PropertyField(_springX); + + _springYLabel = new Label("Spring Y"); + _springYLabel.style.backgroundColor = new StyleColor(new Color(0,1f,0,0.1f)); + _springYLabel.style.marginLeft = -10; + _springYLabel.style.paddingLeft = 14; + _springYLabel.style.paddingBottom = 3; + _springYLabel.style.paddingTop = 3; + _springYField = new PropertyField(_springY); + + _springZLabel = new Label("Spring Z"); + _springZLabel.style.backgroundColor = new StyleColor(new Color(0,0.4f,0.9f,0.2f)); + _springZLabel.style.marginLeft = -10; + _springZLabel.style.paddingLeft = 14; + _springZLabel.style.paddingBottom = 3; + _springZLabel.style.paddingTop = 3; + _springZField = new PropertyField(_springZ); + + _springWLabel = new Label("Spring W"); + _springWLabel.style.backgroundColor = new StyleColor(new Color(0.7f,0f,0.7f,0.2f)); + _springWLabel.style.marginLeft = -10; + _springWLabel.style.paddingLeft = 14; + _springWLabel.style.paddingBottom = 3; + _springWLabel.style.paddingTop = 3; + _springWField = new PropertyField(_springW); + + root.Add(_unifiedSpringField); + root.Add(_springXLabel); + root.Add(_springXField); + root.Add(_springYLabel); + root.Add(_springYField); + root.Add(_springZLabel); + root.Add(_springZField); + root.Add(_springWLabel); + root.Add(_springWField); + + ToggleFields(boolToggle.value); + + return root; + } + + private void ToggleFields(bool show) + { + _unifiedSpringField.style.display = show ? DisplayStyle.None : DisplayStyle.Flex; + _springXLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springXField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springYLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springYField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springZLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springZField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springWLabel.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + _springWField.style.display = show ? DisplayStyle.Flex : DisplayStyle.None; + } + + } +} + + diff --git a/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector4PropertyDrawer.cs.meta b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector4PropertyDrawer.cs.meta new file mode 100644 index 0000000..47fed05 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/Editor/Springs/MMSpringVector4PropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbd00ea6a74ff2c4295668162e4661bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks.meta new file mode 100644 index 0000000..c41709e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b888f4ea3ac60494f904d3e7ec5446dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core.meta new file mode 100644 index 0000000..60c8356 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cbec76858b8d01142a6f76e37c5299bb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy.meta new file mode 100644 index 0000000..cbe6dc9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 244b68853eb429a4a8fabd54b720495a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedback.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedback.cs new file mode 100644 index 0000000..d389b0f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedback.cs @@ -0,0 +1,598 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + /// + /// A base class, meant to be extended, defining a Feedback. A Feedback is an action triggered by a MMFeedbacks, usually in reaction to the player's input or actions, + /// to help communicate both emotion and legibility, improving game feel. + /// To create a new feedback, extend this class and override its Custom methods, declared at the end of this class. You can look at the many examples for reference. + /// + [AddComponentMenu("")] + [System.Serializable] + [ExecuteAlways] + public abstract class MMFeedback : MonoBehaviour + { + /// whether or not this feedback is active + [Tooltip("whether or not this feedback is active")] + public bool Active = true; + /// the name of this feedback to display in the inspector + [Tooltip("the name of this feedback to display in the inspector")] + public string Label = "MMFeedback"; + /// the chance of this feedback happening (in percent : 100 : happens all the time, 0 : never happens, 50 : happens once every two calls, etc) + [Tooltip("the chance of this feedback happening (in percent : 100 : happens all the time, 0 : never happens, 50 : happens once every two calls, etc)")] + [Range(0,100)] + public float Chance = 100f; + /// a number of timing-related values (delay, repeat, etc) + [Tooltip("a number of timing-related values (delay, repeat, etc)")] + public MMFeedbackTiming Timing; + /// the Owner of the feedback, as defined when calling the Initialization method + public GameObject Owner { get; set; } + [HideInInspector] + /// whether or not this feedback is in debug mode + public bool DebugActive = false; + /// set this to true if your feedback should pause the execution of the feedback sequence + public virtual IEnumerator Pause { get { return null; } } + /// if this is true, this feedback will wait until all previous feedbacks have run + public virtual bool HoldingPause { get { return false; } } + /// if this is true, this feedback will wait until all previous feedbacks have run, then run all previous feedbacks again + public virtual bool LooperPause { get { return false; } } + /// if this is true, this feedback will pause and wait until Resume() is called on its parent MMFeedbacks to resume execution + public virtual bool ScriptDrivenPause { get; set; } + /// if this is a positive value, the feedback will auto resume after that duration if it hasn't been resumed via script already + public virtual float ScriptDrivenPauseAutoResume { get; set; } + /// if this is true, this feedback will wait until all previous feedbacks have run, then run all previous feedbacks again + public virtual bool LooperStart { get { return false; } } + /// an overridable color for your feedback, that can be redefined per feedback. White is the only reserved color, and the feedback will revert to + /// normal (light or dark skin) when left to White + #if UNITY_EDITOR + public virtual Color FeedbackColor { get { return Color.white; } } + #endif + /// returns true if this feedback is in cooldown at this time (and thus can't play), false otherwise + public virtual bool InCooldown { get { return (Timing.CooldownDuration > 0f) && (FeedbackTime - _lastPlayTimestamp < Timing.CooldownDuration); } } + /// if this is true, this feedback is currently playing + public virtual bool IsPlaying { get; set; } + + /// the time (or unscaled time) based on the selected Timing settings + public float FeedbackTime + { + get + { + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + return Time.time; + } + else + { + return Time.unscaledTime; + } + } + } + + /// the delta time (or unscaled delta time) based on the selected Timing settings + public float FeedbackDeltaTime + { + get + { + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + return Time.deltaTime; + } + else + { + return Time.unscaledDeltaTime; + } + } + } + + + /// + /// The total duration of this feedback : + /// total = initial delay + duration * (number of repeats + delay between repeats) + /// + public float TotalDuration + { + get + { + if ((Timing != null) && (!Timing.ContributeToTotalDuration)) + { + return 0f; + } + + float totalTime = 0f; + + if (Timing == null) + { + return 0f; + } + + if (Timing.InitialDelay != 0) + { + totalTime += ApplyTimeMultiplier(Timing.InitialDelay); + } + + totalTime += FeedbackDuration; + + if (Timing.NumberOfRepeats > 0) + { + float delayBetweenRepeats = ApplyTimeMultiplier(Timing.DelayBetweenRepeats); + + totalTime += (Timing.NumberOfRepeats * FeedbackDuration) + (Timing.NumberOfRepeats * delayBetweenRepeats); + } + + return totalTime; + } + } + + // the timestamp at which this feedback was last played + public virtual float FeedbackStartedAt { get { return _lastPlayTimestamp; } } + // the perceived duration of the feedback, to be used to display its progress bar, meant to be overridden with meaningful data by each feedback + public virtual float FeedbackDuration { get { return 0f; } set { } } + /// whether or not this feedback is playing right now + public virtual bool FeedbackPlaying { get { return ((FeedbackStartedAt > 0f) && (Time.time - FeedbackStartedAt < FeedbackDuration)); } } + + public virtual MMChannelData ChannelData(int channel) => _channelData.Set(MMChannelModes.Int, channel, null); + + protected float _lastPlayTimestamp = -1f; + protected int _playsLeft; + protected bool _initialized = false; + protected Coroutine _playCoroutine; + protected Coroutine _infinitePlayCoroutine; + protected Coroutine _sequenceCoroutine; + protected Coroutine _repeatedPlayCoroutine; + protected int _sequenceTrackID = 0; + protected MMFeedbacks _hostMMFeedbacks; + + protected float _beatInterval; + protected bool BeatThisFrame = false; + protected int LastBeatIndex = 0; + protected int CurrentSequenceIndex = 0; + protected float LastBeatTimestamp = 0f; + protected bool _isHostMMFeedbacksNotNull; + protected MMChannelData _channelData; + + protected virtual void OnEnable() + { + _hostMMFeedbacks = this.gameObject.GetComponent(); + _isHostMMFeedbacksNotNull = _hostMMFeedbacks != null; + } + + /// + /// Initializes the feedback and its timing related variables + /// + /// + public virtual void Initialization(GameObject owner) + { + _initialized = true; + Owner = owner; + _playsLeft = Timing.NumberOfRepeats + 1; + _hostMMFeedbacks = this.gameObject.GetComponent(); + _channelData = new MMChannelData(MMChannelModes.Int, 0, null); + + SetInitialDelay(Timing.InitialDelay); + SetDelayBetweenRepeats(Timing.DelayBetweenRepeats); + SetSequence(Timing.Sequence); + + CustomInitialization(owner); + } + + /// + /// Plays the feedback + /// + /// + /// + public virtual void Play(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active) + { + return; + } + + if (!_initialized) + { + Debug.LogWarning("The " + this + " feedback is being played without having been initialized. Call Initialization() first."); + } + + // we check the cooldown + if (InCooldown) + { + return; + } + + if (Timing.InitialDelay > 0f) + { + _playCoroutine = StartCoroutine(PlayCoroutine(position, feedbacksIntensity)); + } + else + { + _lastPlayTimestamp = FeedbackTime; + RegularPlay(position, feedbacksIntensity); + } + } + + /// + /// An internal coroutine delaying the initial play of the feedback + /// + /// + /// + /// + protected virtual IEnumerator PlayCoroutine(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + yield return MMFeedbacksCoroutine.WaitFor(Timing.InitialDelay); + } + else + { + yield return MMFeedbacksCoroutine.WaitForUnscaled(Timing.InitialDelay); + } + _lastPlayTimestamp = FeedbackTime; + RegularPlay(position, feedbacksIntensity); + } + + /// + /// Triggers delaying coroutines if needed + /// + /// + /// + protected virtual void RegularPlay(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Chance == 0f) + { + return; + } + if (Chance != 100f) + { + // determine the odds + float random = Random.Range(0f, 100f); + if (random > Chance) + { + return; + } + } + + if (Timing.UseIntensityInterval) + { + if ((feedbacksIntensity < Timing.IntensityIntervalMin) || (feedbacksIntensity >= Timing.IntensityIntervalMax)) + { + return; + } + } + + if (Timing.RepeatForever) + { + _infinitePlayCoroutine = StartCoroutine(InfinitePlay(position, feedbacksIntensity)); + return; + } + if (Timing.NumberOfRepeats > 0) + { + _repeatedPlayCoroutine = StartCoroutine(RepeatedPlay(position, feedbacksIntensity)); + return; + } + if (Timing.Sequence == null) + { + CustomPlayFeedback(position, feedbacksIntensity); + } + else + { + _sequenceCoroutine = StartCoroutine(SequenceCoroutine(position, feedbacksIntensity)); + } + + } + + /// + /// Internal coroutine used for repeated play without end + /// + /// + /// + /// + protected virtual IEnumerator InfinitePlay(Vector3 position, float feedbacksIntensity = 1.0f) + { + while (true) + { + _lastPlayTimestamp = FeedbackTime; + if (Timing.Sequence == null) + { + CustomPlayFeedback(position, feedbacksIntensity); + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + yield return MMFeedbacksCoroutine.WaitFor(Timing.DelayBetweenRepeats); + } + else + { + yield return MMFeedbacksCoroutine.WaitForUnscaled(Timing.DelayBetweenRepeats); + } + } + else + { + _sequenceCoroutine = StartCoroutine(SequenceCoroutine(position, feedbacksIntensity)); + + float delay = ApplyTimeMultiplier(Timing.DelayBetweenRepeats) + Timing.Sequence.Length; + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + yield return MMFeedbacksCoroutine.WaitFor(delay); + } + else + { + yield return MMFeedbacksCoroutine.WaitForUnscaled(delay); + } + } + } + } + + /// + /// Internal coroutine used for repeated play + /// + /// + /// + /// + protected virtual IEnumerator RepeatedPlay(Vector3 position, float feedbacksIntensity = 1.0f) + { + while (_playsLeft > 0) + { + _lastPlayTimestamp = FeedbackTime; + _playsLeft--; + if (Timing.Sequence == null) + { + CustomPlayFeedback(position, feedbacksIntensity); + + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + yield return MMFeedbacksCoroutine.WaitFor(Timing.DelayBetweenRepeats); + } + else + { + yield return MMFeedbacksCoroutine.WaitForUnscaled(Timing.DelayBetweenRepeats); + } + } + else + { + _sequenceCoroutine = StartCoroutine(SequenceCoroutine(position, feedbacksIntensity)); + + float delay = ApplyTimeMultiplier(Timing.DelayBetweenRepeats) + Timing.Sequence.Length; + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + yield return MMFeedbacksCoroutine.WaitFor(delay); + } + else + { + yield return MMFeedbacksCoroutine.WaitForUnscaled(delay); + } + } + } + _playsLeft = Timing.NumberOfRepeats + 1; + } + + /// + /// A coroutine used to play this feedback on a sequence + /// + /// + /// + /// + protected virtual IEnumerator SequenceCoroutine(Vector3 position, float feedbacksIntensity = 1.0f) + { + yield return null; + float timeStartedAt = FeedbackTime; + float lastFrame = FeedbackTime; + + BeatThisFrame = false; + LastBeatIndex = 0; + CurrentSequenceIndex = 0; + LastBeatTimestamp = 0f; + + if (Timing.Quantized) + { + while (CurrentSequenceIndex < Timing.Sequence.QuantizedSequence[0].Line.Count) + { + _beatInterval = 60f / Timing.TargetBPM; + + if ((FeedbackTime - LastBeatTimestamp >= _beatInterval) || (LastBeatTimestamp == 0f)) + { + BeatThisFrame = true; + LastBeatIndex = CurrentSequenceIndex; + LastBeatTimestamp = FeedbackTime; + + for (int i = 0; i < Timing.Sequence.SequenceTracks.Count; i++) + { + if (Timing.Sequence.QuantizedSequence[i].Line[CurrentSequenceIndex].ID == Timing.TrackID) + { + CustomPlayFeedback(position, feedbacksIntensity); + } + } + CurrentSequenceIndex++; + } + yield return null; + } + } + else + { + while (FeedbackTime - timeStartedAt < Timing.Sequence.Length) + { + foreach (MMSequenceNote item in Timing.Sequence.OriginalSequence.Line) + { + if ((item.ID == Timing.TrackID) && (item.Timestamp >= lastFrame) && (item.Timestamp <= FeedbackTime - timeStartedAt)) + { + CustomPlayFeedback(position, feedbacksIntensity); + } + } + lastFrame = FeedbackTime - timeStartedAt; + yield return null; + } + } + + } + + /// + /// Stops all feedbacks from playing. Will stop repeating feedbacks, and call custom stop implementations + /// + /// + /// + public virtual void Stop(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (_playCoroutine != null) { StopCoroutine(_playCoroutine); } + if (_infinitePlayCoroutine != null) { StopCoroutine(_infinitePlayCoroutine); } + if (_repeatedPlayCoroutine != null) { StopCoroutine(_repeatedPlayCoroutine); } + if (_sequenceCoroutine != null) { StopCoroutine(_sequenceCoroutine); } + + _lastPlayTimestamp = 0f; + _playsLeft = Timing.NumberOfRepeats + 1; + if (Timing.InterruptsOnStop) + { + CustomStopFeedback(position, feedbacksIntensity); + } + } + + /// + /// Calls this feedback's custom reset + /// + public virtual void ResetFeedback() + { + _playsLeft = Timing.NumberOfRepeats + 1; + CustomReset(); + } + + /// + /// Use this method to change this feedback's sequence at runtime + /// + /// + public virtual void SetSequence(MMSequence newSequence) + { + Timing.Sequence = newSequence; + if (Timing.Sequence != null) + { + for (int i = 0; i < Timing.Sequence.SequenceTracks.Count; i++) + { + if (Timing.Sequence.SequenceTracks[i].ID == Timing.TrackID) + { + _sequenceTrackID = i; + } + } + } + } + + /// + /// Use this method to specify a new delay between repeats at runtime + /// + /// + public virtual void SetDelayBetweenRepeats(float delay) + { + Timing.DelayBetweenRepeats = delay; + } + + /// + /// Use this method to specify a new initial delay at runtime + /// + /// + public virtual void SetInitialDelay(float delay) + { + Timing.InitialDelay = delay; + } + + /// + /// Returns a new value of the normalized time based on the current play direction of this feedback + /// + /// + /// + protected virtual float ApplyDirection(float normalizedTime) + { + return NormalPlayDirection ? normalizedTime : 1 - normalizedTime; + } + + /// + /// Returns true if this feedback should play normally, or false if it should play in rewind + /// + public virtual bool NormalPlayDirection + { + get + { + switch (Timing.PlayDirection) + { + case MMFeedbackTiming.PlayDirections.FollowMMFeedbacksDirection: + return (_hostMMFeedbacks.Direction == MMFeedbacks.Directions.TopToBottom); + case MMFeedbackTiming.PlayDirections.AlwaysNormal: + return true; + case MMFeedbackTiming.PlayDirections.AlwaysRewind: + return false; + case MMFeedbackTiming.PlayDirections.OppositeMMFeedbacksDirection: + return !(_hostMMFeedbacks.Direction == MMFeedbacks.Directions.TopToBottom); + } + return true; + } + } + + /// + /// Returns true if this feedback should play in the current parent MMFeedbacks direction, according to its MMFeedbacksDirectionCondition setting + /// + public virtual bool ShouldPlayInThisSequenceDirection + { + get + { + switch (Timing.MMFeedbacksDirectionCondition) + { + case MMFeedbackTiming.MMFeedbacksDirectionConditions.Always: + return true; + case MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenForwards: + return (_hostMMFeedbacks.Direction == MMFeedbacks.Directions.TopToBottom); + case MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenBackwards: + return (_hostMMFeedbacks.Direction == MMFeedbacks.Directions.BottomToTop); + } + return true; + } + } + + /// + /// Returns the t value at which to evaluate a curve at the end of this feedback's play time + /// + protected virtual float FinalNormalizedTime + { + get + { + return NormalPlayDirection ? 1f : 0f; + } + } + + /// + /// Applies the host MMFeedbacks' time multiplier to this feedback + /// + /// + /// + protected virtual float ApplyTimeMultiplier(float duration) + { + if (_isHostMMFeedbacksNotNull) + { + return _hostMMFeedbacks.ApplyTimeMultiplier(duration); + } + + return duration; + } + + /// + /// This method describes all custom initialization processes the feedback requires, in addition to the main Initialization method + /// + /// + protected virtual void CustomInitialization(GameObject owner) { } + + /// + /// This method describes what happens when the feedback gets played + /// + /// + /// + protected abstract void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f); + + /// + /// This method describes what happens when the feedback gets stopped + /// + /// + /// + protected virtual void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) { } + + /// + /// This method describes what happens when the feedback gets reset + /// + protected virtual void CustomReset() { } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedback.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedback.cs.meta new file mode 100644 index 0000000..e173868 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b1d3a32ffe67b94187272c15134cae5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacks.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacks.cs new file mode 100644 index 0000000..c853083 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacks.cs @@ -0,0 +1,924 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Feedbacks; +using System.Linq; +using MoreMountains.Tools; +using UnityEditor.Experimental; +using UnityEngine.Events; +using Random = UnityEngine.Random; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Feedbacks +{ + /// + /// A collection of MMFeedback, meant to be played altogether. + /// This class provides a custom inspector to add and customize feedbacks, and public methods to trigger them, stop them, etc. + /// You can either use it on its own, or bind it from another class and trigger it from there. + /// + [AddComponentMenu("")] + public class MMFeedbacks : MonoBehaviour + { + /// the possible directions MMFeedbacks can be played + public enum Directions { TopToBottom, BottomToTop } + /// the possible SafeModes (will perform checks to make sure no serialization error has damaged them) + /// - nope : no safety + /// - editor only : performs checks on enable + /// - runtime only : performs checks on Awake + /// - full : performs both editor and runtime checks, recommended setting + public enum SafeModes { Nope, EditorOnly, RuntimeOnly, Full } + + /// a list of MMFeedback to trigger + public List Feedbacks = new List(); + + /// the possible initialization modes. If you use Script, you'll have to initialize manually by calling the Initialization method and passing it an owner + /// Otherwise, you can have this component initialize itself at Awake or Start, and in this case the owner will be the MMFeedbacks itself + public enum InitializationModes { Script, Awake, Start } + /// the chosen initialization mode + [Tooltip("the chosen initialization modes. If you use Script, you'll have to initialize manually by calling the " + + "Initialization method and passing it an owner. Otherwise, you can have this component initialize " + + "itself at Awake or Start, and in this case the owner will be the MMFeedbacks itself")] + public InitializationModes InitializationMode = InitializationModes.Start; + /// if you set this to true, the system will make changes to ensure that initialization always happens before play + [Tooltip("if you set this to true, the system will make changes to ensure that initialization always happens before play")] + public bool AutoInitialization = true; + /// the selected safe mode + [Tooltip("the selected safe mode")] + public SafeModes SafeMode = SafeModes.Full; + /// the selected direction + [Tooltip("the selected direction these feedbacks should play in")] + public Directions Direction = Directions.TopToBottom; + /// whether or not this MMFeedbacks should invert its direction when all feedbacks have played + [Tooltip("whether or not this MMFeedbacks should invert its direction when all feedbacks have played")] + public bool AutoChangeDirectionOnEnd = false; + /// whether or not to play this feedbacks automatically on Start + [Tooltip("whether or not to play this feedbacks automatically on Start")] + public bool AutoPlayOnStart = false; + /// whether or not to play this feedbacks automatically on Enable + [Tooltip("whether or not to play this feedbacks automatically on Enable")] + public bool AutoPlayOnEnable = false; + + /// if this is true, all feedbacks within that player will work on the specified ForcedTimescaleMode, regardless of their individual settings + [Tooltip("if this is true, all feedbacks within that player will work on the specified ForcedTimescaleMode, regardless of their individual settings")] + public bool ForceTimescaleMode = false; + /// the time scale mode all feedbacks on this player should work on, if ForceTimescaleMode is true + [Tooltip("the time scale mode all feedbacks on this player should work on, if ForceTimescaleMode is true")] + [MMFCondition("ForceTimescaleMode", true)] + public TimescaleModes ForcedTimescaleMode = TimescaleModes.Unscaled; + /// a time multiplier that will be applied to all feedback durations (initial delay, duration, delay between repeats...) + [Tooltip("a time multiplier that will be applied to all feedback durations (initial delay, duration, delay between repeats...)")] + public float DurationMultiplier = 1f; + /// a multiplier to apply to all timescale operations (1: normal, less than 1: slower operations, higher than 1: faster operations) + [Tooltip("a multiplier to apply to all timescale operations (1: normal, less than 1: slower operations, higher than 1: faster operations)")] + public float TimescaleMultiplier = 1f; + /// if this is true, will expose a RandomDurationMultiplier. The final duration of each feedback will be : their base duration * DurationMultiplier * a random value between RandomDurationMultiplier.x and RandomDurationMultiplier.y + [Tooltip("if this is true, will expose a RandomDurationMultiplier. The final duration of each feedback will be : their base duration * DurationMultiplier * a random value between RandomDurationMultiplier.x and RandomDurationMultiplier.y")] + public bool RandomizeDuration = false; + /// if RandomizeDuration is true, the min (x) and max (y) values for the random duration multiplier + [Tooltip("if RandomizeDuration is true, the min (x) and max (y) values for the random duration multiplier")] + [MMCondition("RandomizeDuration", true)] + public Vector2 RandomDurationMultiplier = new Vector2(0.5f, 1.5f); + /// if this is true, more editor-only, detailed info will be displayed per feedback in the duration slot + [Tooltip("if this is true, more editor-only, detailed info will be displayed per feedback in the duration slot")] + public bool DisplayFullDurationDetails = false; + /// the timescale at which the player itself will operate. This notably impacts sequencing and pauses duration evaluation. + [Tooltip("the timescale at which the player itself will operate. This notably impacts sequencing and pauses duration evaluation.")] + public TimescaleModes PlayerTimescaleMode = TimescaleModes.Unscaled; + + /// if this is true, this feedback will only play if its distance to RangeCenter is lower or equal to RangeDistance + [Tooltip("if this is true, this feedback will only play if its distance to RangeCenter is lower or equal to RangeDistance")] + public bool OnlyPlayIfWithinRange = false; + /// when in OnlyPlayIfWithinRange mode, the transform to consider as the center of the range + [Tooltip("when in OnlyPlayIfWithinRange mode, the transform to consider as the center of the range")] + public Transform RangeCenter; + /// when in OnlyPlayIfWithinRange mode, the distance to the center within which the feedback will play + [Tooltip("when in OnlyPlayIfWithinRange mode, the distance to the center within which the feedback will play")] + public float RangeDistance = 5f; + /// when in OnlyPlayIfWithinRange mode, whether or not to modify the intensity of feedbacks based on the RangeFallOff curve + [Tooltip("when in OnlyPlayIfWithinRange mode, whether or not to modify the intensity of feedbacks based on the RangeFallOff curve")] + public bool UseRangeFalloff = false; + /// the animation curve to use to define falloff (on the x 0 represents the range center, 1 represents the max distance to it) + [Tooltip("the animation curve to use to define falloff (on the x 0 represents the range center, 1 represents the max distance to it)")] + [MMFCondition("UseRangeFalloff", true)] + public AnimationCurve RangeFalloff = new AnimationCurve(new Keyframe(0f, 1f), new Keyframe(1f, 0f)); + /// the values to remap the falloff curve's y axis' 0 and 1 + [Tooltip("the values to remap the falloff curve's y axis' 0 and 1")] + [MMFVector("Zero","One")] + public Vector2 RemapRangeFalloff = new Vector2(0f, 1f); + /// whether or not to ignore MMSetFeedbackRangeCenterEvent, used to set the RangeCenter from anywhere + [Tooltip("whether or not to ignore MMSetFeedbackRangeCenterEvent, used to set the RangeCenter from anywhere")] + public bool IgnoreRangeEvents = false; + + /// a duration, in seconds, during which triggering a new play of this MMFeedbacks after it's been played once will be impossible + [Tooltip("a duration, in seconds, during which triggering a new play of this MMFeedbacks after it's been played once will be impossible")] + public float CooldownDuration = 0f; + /// a duration, in seconds, to delay the start of this MMFeedbacks' contents play + [Tooltip("a duration, in seconds, to delay the start of this MMFeedbacks' contents play")] + public float InitialDelay = 0f; + /// whether this player can be played or not, useful to temporarily prevent play from another class, for example + [Tooltip("whether this player can be played or not, useful to temporarily prevent play from another class, for example")] + public bool CanPlay = true; + /// if this is true, you'll be able to trigger a new Play while this feedback is already playing, otherwise you won't be able to + [Tooltip("if this is true, you'll be able to trigger a new Play while this feedback is already playing, otherwise you won't be able to")] + public bool CanPlayWhileAlreadyPlaying = true; + /// the chance of this sequence happening (in percent : 100 : happens all the time, 0 : never happens, 50 : happens once every two calls, etc) + [Tooltip("the chance of this sequence happening (in percent : 100 : happens all the time, 0 : never happens, 50 : happens once every two calls, etc)")] + [Range(0,100)] + public float ChanceToPlay = 100f; + + /// the intensity at which to play this feedback. That value will be used by most feedbacks to tune their amplitude. 1 is normal, 0.5 is half power, 0 is no effect. + /// Note that what this value controls depends from feedback to feedback, don't hesitate to check the code to see what it does exactly. + [Tooltip("the intensity at which to play this feedback. That value will be used by most feedbacks to tune their amplitude. 1 is normal, 0.5 is half power, 0 is no effect." + + "Note that what this value controls depends from feedback to feedback, don't hesitate to check the code to see what it does exactly.")] + public float FeedbacksIntensity = 1f; + + /// a number of UnityEvents that can be triggered at the various stages of this MMFeedbacks + [Tooltip("a number of UnityEvents that can be triggered at the various stages of this MMFeedbacks")] + public MMFeedbacksEvents Events; + + /// a global switch used to turn all feedbacks on or off globally + [Tooltip("a global switch used to turn all feedbacks on or off globally")] + public static bool GlobalMMFeedbacksActive = true; + + [HideInInspector] + /// whether or not this MMFeedbacks is in debug mode + public bool DebugActive = false; + /// whether or not this MMFeedbacks is playing right now - meaning it hasn't been stopped yet. + /// if you don't stop your MMFeedbacks it'll remain true of course + public bool IsPlaying { get; protected set; } + /// if this MMFeedbacks is playing the time since it started playing + public virtual float ElapsedTime => IsPlaying ? GetTime() - _lastStartAt : 0f; + /// the amount of times this MMFeedbacks has been played + public int TimesPlayed { get; protected set; } + /// whether or not the execution of this MMFeedbacks' sequence is being prevented and waiting for a Resume() call + public bool InScriptDrivenPause { get; set; } + /// true if this MMFeedbacks contains at least one loop + public bool ContainsLoop { get; set; } + /// true if this feedback should change play direction next time it's played + public bool ShouldRevertOnNextPlay { get; set; } + /// true if this player is forcing unscaled mode + public bool ForcingUnscaledTimescaleMode { get { return (ForceTimescaleMode && ForcedTimescaleMode == TimescaleModes.Unscaled); } } + /// The total duration (in seconds) of all the active feedbacks in this MMFeedbacks + public virtual float TotalDuration + { + get + { + float total = 0f; + foreach (MMFeedback feedback in Feedbacks) + { + if ((feedback != null) && (feedback.Active)) + { + if (total < feedback.TotalDuration) + { + total = feedback.TotalDuration; + } + } + } + return ComputedInitialDelay + total; + } + } + + public virtual float GetTime() { return (PlayerTimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (PlayerTimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + public virtual float ComputedInitialDelay => ApplyTimeMultiplier(InitialDelay); + + protected float _startTime = 0f; + protected float _holdingMax = 0f; + protected float _lastStartAt = -float.MaxValue; + protected int _lastStartFrame = -1; + protected bool _pauseFound = false; + protected float _totalDuration = 0f; + protected bool _shouldStop = false; + protected const float _smallValue = 0.001f; + protected float _randomDurationMultiplier = 1f; + protected float _lastOnEnableFrame = -1; + + #region INITIALIZATION + + /// + /// On Awake we initialize our feedbacks if we're in auto mode + /// + protected virtual void Awake() + { + // if our MMFeedbacks is in AutoPlayOnEnable mode, we add a little helper to it that will re-enable it if needed if the parent game object gets turned off and on again + if (AutoPlayOnEnable) + { + MMFeedbacksEnabler enabler = GetComponent(); + if (enabler == null) + { + enabler = this.gameObject.AddComponent(); + } + enabler.TargetMMFeedbacks = this; + } + + if ((InitializationMode == InitializationModes.Awake) && (Application.isPlaying)) + { + Initialization(this.gameObject); + } + CheckForLoops(); + } + + /// + /// On Start we initialize our feedbacks if we're in auto mode + /// + protected virtual void Start() + { + if ((InitializationMode == InitializationModes.Start) && (Application.isPlaying)) + { + Initialization(this.gameObject); + } + if (AutoPlayOnStart && Application.isPlaying) + { + PlayFeedbacks(); + } + CheckForLoops(); + } + + /// + /// On Enable we initialize our feedbacks if we're in auto mode + /// + protected virtual void OnEnable() + { + if (AutoPlayOnEnable && Application.isPlaying) + { + PlayFeedbacks(); + } + } + + /// + /// Initializes the MMFeedbacks, setting this MMFeedbacks as the owner + /// + public virtual void Initialization(bool forceInitIfPlaying = false) + { + Initialization(this.gameObject); + } + + /// + /// A public method to initialize the feedback, specifying an owner that will be used as the reference for position and hierarchy by feedbacks + /// + /// + /// + public virtual void Initialization(GameObject owner) + { + if ((SafeMode == MMFeedbacks.SafeModes.RuntimeOnly) || (SafeMode == MMFeedbacks.SafeModes.Full)) + { + AutoRepair(); + } + + IsPlaying = false; + TimesPlayed = 0; + _lastStartAt = -float.MaxValue; + + for (int i = 0; i < Feedbacks.Count; i++) + { + if (Feedbacks[i] != null) + { + Feedbacks[i].Initialization(owner); + } + } + } + + #endregion + + #region PLAY + + /// + /// Plays all feedbacks using the MMFeedbacks' position as reference, and no attenuation + /// + public virtual void PlayFeedbacks() + { + PlayFeedbacksInternal(this.transform.position, FeedbacksIntensity); + } + + /// + /// Plays all feedbacks and awaits until completion + /// + /// + /// + /// + public virtual async System.Threading.Tasks.Task PlayFeedbacksTask(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + PlayFeedbacks(position, feedbacksIntensity, forceRevert); + while (IsPlaying) + { + await System.Threading.Tasks.Task.Yield(); + } + } + + /// + /// Plays all feedbacks and awaits until completion + /// + public virtual async System.Threading.Tasks.Task PlayFeedbacksTask() + { + PlayFeedbacks(); + while (IsPlaying) + { + await System.Threading.Tasks.Task.Yield(); + } + } + + /// + /// Plays all feedbacks, specifying a position and intensity. The position may be used by each Feedback and taken into account to spark a particle or play a sound for example. + /// The feedbacks intensity is a factor that can be used by each Feedback to lower its intensity, usually you'll want to define that attenuation based on time or distance (using a lower + /// intensity value for feedbacks happening further away from the Player). + /// Additionally you can force the feedback to play in reverse, ignoring its current condition + /// + /// + /// + /// + public virtual void PlayFeedbacks(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + PlayFeedbacksInternal(position, feedbacksIntensity, forceRevert); + } + + /// + /// Plays all feedbacks using the MMFeedbacks' position as reference, and no attenuation, and in reverse (from bottom to top) + /// + public virtual void PlayFeedbacksInReverse() + { + PlayFeedbacksInternal(this.transform.position, FeedbacksIntensity, true); + } + + /// + /// Plays all feedbacks using the MMFeedbacks' position as reference, and no attenuation, and in reverse (from bottom to top) + /// + public virtual void PlayFeedbacksInReverse(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + PlayFeedbacksInternal(position, feedbacksIntensity, forceRevert); + } + + /// + /// Plays all feedbacks in the sequence, but only if this MMFeedbacks is playing in reverse order + /// + public virtual void PlayFeedbacksOnlyIfReversed() + { + + if ( (Direction == Directions.BottomToTop && !ShouldRevertOnNextPlay) + || ((Direction == Directions.TopToBottom) && ShouldRevertOnNextPlay) ) + { + PlayFeedbacks(); + } + } + + /// + /// Plays all feedbacks in the sequence, but only if this MMFeedbacks is playing in reverse order + /// + public virtual void PlayFeedbacksOnlyIfReversed(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + + if ( (Direction == Directions.BottomToTop && !ShouldRevertOnNextPlay) + || ((Direction == Directions.TopToBottom) && ShouldRevertOnNextPlay) ) + { + PlayFeedbacks(position, feedbacksIntensity, forceRevert); + } + } + + /// + /// Plays all feedbacks in the sequence, but only if this MMFeedbacks is playing in normal order + /// + public virtual void PlayFeedbacksOnlyIfNormalDirection() + { + if (Direction == Directions.TopToBottom) + { + PlayFeedbacks(); + } + } + + /// + /// Plays all feedbacks in the sequence, but only if this MMFeedbacks is playing in normal order + /// + public virtual void PlayFeedbacksOnlyIfNormalDirection(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + if (Direction == Directions.TopToBottom) + { + PlayFeedbacks(position, feedbacksIntensity, forceRevert); + } + } + + /// + /// A public coroutine you can call externally when you want to yield in a coroutine of yours until the MMFeedbacks has stopped playing + /// typically : yield return myFeedback.PlayFeedbacksCoroutine(this.transform.position, 1.0f, false); + /// + /// The position at which the MMFeedbacks should play + /// The intensity of the feedback + /// Whether or not the MMFeedbacks should play in reverse or not + /// + public virtual IEnumerator PlayFeedbacksCoroutine(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + PlayFeedbacks(position, feedbacksIntensity, forceRevert); + while (IsPlaying) + { + yield return null; + } + } + + #endregion + + #region SEQUENCE + + /// + /// An internal method used to play feedbacks, shouldn't be called externally + /// + /// + /// + protected virtual void PlayFeedbacksInternal(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + if (!CanPlay) + { + return; + } + + if (IsPlaying && !CanPlayWhileAlreadyPlaying) + { + return; + } + + if (!EvaluateChance()) + { + return; + } + + // if we have a cooldown we prevent execution if needed + if (CooldownDuration > 0f) + { + if (GetTime() - _lastStartAt < CooldownDuration) + { + return; + } + } + + // if all MMFeedbacks are disabled globally, we stop and don't play + if (!GlobalMMFeedbacksActive) + { + return; + } + + if (!this.gameObject.activeInHierarchy) + { + return; + } + + if (ShouldRevertOnNextPlay) + { + Revert(); + ShouldRevertOnNextPlay = false; + } + + if (forceRevert) + { + Direction = (Direction == Directions.BottomToTop) ? Directions.TopToBottom : Directions.BottomToTop; + } + + ResetFeedbacks(); + this.enabled = true; + TimesPlayed++; + IsPlaying = true; + _startTime = GetTime(); + _lastStartAt = _startTime; + _totalDuration = TotalDuration; + CheckForPauses(); + + if (ComputedInitialDelay > 0f) + { + StartCoroutine(HandleInitialDelayCo(position, feedbacksIntensity, forceRevert)); + } + else + { + PreparePlay(position, feedbacksIntensity, forceRevert); + } + } + + protected virtual void PreparePlay(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + Events.TriggerOnPlay(this); + + _holdingMax = 0f; + CheckForPauses(); + + if (!_pauseFound) + { + PlayAllFeedbacks(position, feedbacksIntensity, forceRevert); + } + else + { + // if at least one pause was found + StartCoroutine(PausedFeedbacksCo(position, feedbacksIntensity)); + } + } + + protected virtual void CheckForPauses() + { + _pauseFound = false; + for (int i = 0; i < Feedbacks.Count; i++) + { + if (Feedbacks[i] != null) + { + if ((Feedbacks[i].Pause != null) && (Feedbacks[i].Active) && (Feedbacks[i].ShouldPlayInThisSequenceDirection)) + { + _pauseFound = true; + } + if ((Feedbacks[i].HoldingPause == true) && (Feedbacks[i].Active) && (Feedbacks[i].ShouldPlayInThisSequenceDirection)) + { + _pauseFound = true; + } + } + } + } + + protected virtual void PlayAllFeedbacks(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + // if no pause was found, we just play all feedbacks at once + for (int i = 0; i < Feedbacks.Count; i++) + { + if (FeedbackCanPlay(Feedbacks[i])) + { + Feedbacks[i].Play(position, feedbacksIntensity); + } + } + } + + protected virtual IEnumerator HandleInitialDelayCo(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + IsPlaying = true; + yield return MMFeedbacksCoroutine.WaitFor(ComputedInitialDelay); + PreparePlay(position, feedbacksIntensity, forceRevert); + } + + protected virtual void Update() + { + if (_shouldStop) + { + if (HasFeedbackStillPlaying()) + { + return; + } + IsPlaying = false; + Events.TriggerOnComplete(this); + ApplyAutoRevert(); + this.enabled = false; + _shouldStop = false; + } + if (IsPlaying) + { + if (!_pauseFound) + { + if (GetTime() - _startTime > _totalDuration) + { + _shouldStop = true; + } + } + } + else + { + this.enabled = false; + } + } + + /// + /// Returns true if feedbacks are still playing + /// + /// + public virtual bool HasFeedbackStillPlaying() + { + int count = Feedbacks.Count; + for (int i = 0; i < count; i++) + { + if ((Feedbacks[i] != null) && (Feedbacks[i].IsPlaying)) + { + return true; + } + } + return false; + } + + /// + /// A coroutine used to handle the sequence of feedbacks if pauses are involved + /// + /// + /// + /// + protected virtual IEnumerator PausedFeedbacksCo(Vector3 position, float feedbacksIntensity) + { + yield return null; + } + + #endregion + + #region STOP + + /// + /// Stops all further feedbacks from playing, without stopping individual feedbacks + /// + public virtual void StopFeedbacks() + { + StopFeedbacks(true); + } + + /// + /// Stops all feedbacks from playing, with an option to also stop individual feedbacks + /// + public virtual void StopFeedbacks(bool stopAllFeedbacks = true) + { + StopFeedbacks(this.transform.position, 1.0f, stopAllFeedbacks); + } + + /// + /// Stops all feedbacks from playing, specifying a position and intensity that can be used by the Feedbacks + /// + /// + /// + public virtual void StopFeedbacks(Vector3 position, float feedbacksIntensity = 1.0f, bool stopAllFeedbacks = true) + { + if (stopAllFeedbacks) + { + for (int i = 0; i < Feedbacks.Count; i++) + { + if (Feedbacks[i] != null) + { + Feedbacks[i].Stop(position, feedbacksIntensity); + } + } + } + IsPlaying = false; + StopAllCoroutines(); + } + + #endregion + + #region CONTROLS + + /// + /// Calls each feedback's Reset method if they've defined one. An example of that can be resetting the initial color of a flickering renderer. + /// + public virtual void ResetFeedbacks() + { + for (int i = 0; i < Feedbacks.Count; i++) + { + if ((Feedbacks[i] != null) && (Feedbacks[i].Active)) + { + Feedbacks[i].ResetFeedback(); + } + } + IsPlaying = false; + } + + /// + /// Changes the direction of this MMFeedbacks + /// + public virtual void Revert() + { + Events.TriggerOnRevert(this); + Direction = (Direction == Directions.BottomToTop) ? Directions.TopToBottom : Directions.BottomToTop; + } + + /// + /// Use this method to authorize or prevent this player from being played + /// + /// + public virtual void SetCanPlay(bool newState) + { + CanPlay = newState; + } + + /// + /// Pauses execution of a sequence, which can then be resumed by calling ResumeFeedbacks() + /// + public virtual void PauseFeedbacks() + { + Events.TriggerOnPause(this); + InScriptDrivenPause = true; + } + + /// + /// Resumes execution of a sequence if a script driven pause is in progress + /// + public virtual void ResumeFeedbacks() + { + Events.TriggerOnResume(this); + InScriptDrivenPause = false; + } + + #endregion + + #region MODIFICATION + + public virtual MMFeedback AddFeedback(System.Type feedbackType, bool add = true) + { + MMFeedback newFeedback; + + #if UNITY_EDITOR + if (!Application.isPlaying) + { + newFeedback = Undo.AddComponent(this.gameObject, feedbackType) as MMFeedback; + } + else + { + newFeedback = this.gameObject.AddComponent(feedbackType) as MMFeedback; + } + #else + newFeedback = this.gameObject.AddComponent(feedbackType) as MMFeedback; + #endif + + newFeedback.hideFlags = HideFlags.HideInInspector; + newFeedback.Label = FeedbackPathAttribute.GetFeedbackDefaultName(feedbackType); + + AutoRepair(); + + return newFeedback; + } + + public virtual void RemoveFeedback(int id) + { + #if UNITY_EDITOR + if (!Application.isPlaying) + { + Undo.DestroyObjectImmediate(Feedbacks[id]); + } + else + { + DestroyImmediate(Feedbacks[id]); + } + #else + DestroyImmediate(Feedbacks[id]); + #endif + + Feedbacks.RemoveAt(id); + AutoRepair(); + } + + #endregion MODIFICATION + + #region HELPERS + + /// + /// Evaluates the chance of this feedback to play, and returns true if this feedback can play, false otherwise + /// + /// + protected virtual bool EvaluateChance() + { + if (ChanceToPlay == 0f) + { + return false; + } + if (ChanceToPlay != 100f) + { + // determine the odds + float random = Random.Range(0f, 100f); + if (random > ChanceToPlay) + { + return false; + } + } + + return true; + } + + /// + /// Checks whether or not this MMFeedbacks contains one or more looper feedbacks + /// + protected virtual void CheckForLoops() + { + ContainsLoop = false; + for (int i = 0; i < Feedbacks.Count; i++) + { + if (Feedbacks[i] != null) + { + if (Feedbacks[i].LooperPause && Feedbacks[i].Active) + { + ContainsLoop = true; + return; + } + } + } + } + + /// + /// This will return true if the conditions defined in the specified feedback's Timing section allow it to play in the current play direction of this MMFeedbacks + /// + /// + /// + protected bool FeedbackCanPlay(MMFeedback feedback) + { + if (feedback == null) + { + return false; + } + + if (feedback.Timing == null) + { + return false; + } + + if (feedback.Timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.Always) + { + return true; + } + else if (((Direction == Directions.TopToBottom) && (feedback.Timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenForwards)) + || ((Direction == Directions.BottomToTop) && (feedback.Timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenBackwards))) + { + return true; + } + return false; + } + + /// + /// Readies the MMFeedbacks to revert direction on the next play + /// + protected virtual void ApplyAutoRevert() + { + if (AutoChangeDirectionOnEnd) + { + ShouldRevertOnNextPlay = true; + } + } + + /// + /// Applies this feedback's time multiplier to a duration (in seconds) + /// + /// + /// + public virtual float ApplyTimeMultiplier(float duration) + { + return duration * Mathf.Clamp(DurationMultiplier, _smallValue, Single.MaxValue); + } + + /// + /// Unity sometimes has serialization issues. + /// This method fixes that by fixing any bad sync that could happen. + /// + public virtual void AutoRepair() + { + List components = components = new List(); + components = this.gameObject.GetComponents().ToList(); + foreach (Component component in components) + { + if (component is MMFeedback) + { + bool found = false; + for (int i = 0; i < Feedbacks.Count; i++) + { + if (Feedbacks[i] == (MMFeedback)component) + { + found = true; + break; + } + } + if (!found) + { + Feedbacks.Add((MMFeedback)component); + } + } + } + } + + #endregion + + #region EVENTS + + /// + /// On Disable we stop all feedbacks + /// + protected virtual void OnDisable() + { + /*if (IsPlaying) + { + StopFeedbacks(); + StopAllCoroutines(); + }*/ + } + + /// + /// On validate, we make sure our DurationMultiplier remains positive + /// + protected virtual void OnValidate() + { + DurationMultiplier = Mathf.Clamp(DurationMultiplier, _smallValue, Single.MaxValue); + } + + /// + /// On Destroy, removes all feedbacks from this MMFeedbacks to avoid any leftovers + /// + protected virtual void OnDestroy() + { + IsPlaying = false; + #if UNITY_EDITOR + if (!Application.isPlaying) + { + // we remove all binders + foreach (MMFeedback feedback in Feedbacks) + { + EditorApplication.delayCall += () => + { + DestroyImmediate(feedback); + }; + } + } + #endif + } + + #endregion EVENTS + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacks.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacks.cs.meta new file mode 100644 index 0000000..0f6ed39 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 841b72de2996c5c40bfb394f3d0e0a98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacksEnabler.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacksEnabler.cs new file mode 100644 index 0000000..09cbd13 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacksEnabler.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// A helper class added automatically by MMFeedbacks if they're in AutoPlayOnEnable mode + /// This lets them play again should their parent game object be disabled/enabled + /// + [AddComponentMenu("")] + public class MMFeedbacksEnabler : MonoBehaviour + { + /// the MMFeedbacks to pilot + public MMFeedbacks TargetMMFeedbacks { get; set; } + + /// + /// On enable, we re-enable (and thus play) our MMFeedbacks if needed + /// + protected virtual void OnEnable() + { + if ((TargetMMFeedbacks != null) && !TargetMMFeedbacks.enabled && TargetMMFeedbacks.AutoPlayOnEnable) + { + TargetMMFeedbacks.enabled = true; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacksEnabler.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacksEnabler.cs.meta new file mode 100644 index 0000000..316c7b4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/Legacy/MMFeedbacksEnabler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd5c9de2e9b0d6540b318450df3fb297 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels.meta new file mode 100644 index 0000000..1896a37 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8f397bae44366904cb741a56fb7cc568 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelA.asset b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelA.asset new file mode 100644 index 0000000..a5c3e72 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelA.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 09e29c2242d13d64480d58af86fcb50f, type: 3} + m_Name: ChannelA + m_EditorClassIdentifier: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelA.asset.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelA.asset.meta new file mode 100644 index 0000000..aeeebe1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelA.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ba165fd91edb434aa2f1cd6f6b05885 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelB.asset b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelB.asset new file mode 100644 index 0000000..32ba82e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelB.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 09e29c2242d13d64480d58af86fcb50f, type: 3} + m_Name: ChannelB + m_EditorClassIdentifier: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelB.asset.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelB.asset.meta new file mode 100644 index 0000000..225aa75 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelB.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7471a7ccb4c5bdb4e9c9d5b51f6db888 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelC.asset b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelC.asset new file mode 100644 index 0000000..f9194f0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelC.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 09e29c2242d13d64480d58af86fcb50f, type: 3} + m_Name: ChannelC + m_EditorClassIdentifier: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelC.asset.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelC.asset.meta new file mode 100644 index 0000000..d28faa7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/ChannelC.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 277be439bdc9329468f9e6d0799d54be +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/MMChannel.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/MMChannel.cs new file mode 100644 index 0000000..901e779 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/MMChannel.cs @@ -0,0 +1,92 @@ +using System; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// The possible modes used to identify a channel, either via an int or a MMChannel scriptable object + /// + public enum MMChannelModes + { + Int, + MMChannel + } + + /// + /// A data structure used to pass channel information + /// + [Serializable] + public class MMChannelData + { + public MMChannelModes MMChannelMode; + public int Channel; + public MMChannel MMChannelDefinition; + + public MMChannelData(MMChannelModes mode, int channel, MMChannel channelDefinition) + { + MMChannelMode = mode; + Channel = channel; + MMChannelDefinition = channelDefinition; + } + } + + /// + /// Extensions class for MMChannelData + /// + public static class MMChannelDataExtensions + { + public static MMChannelData Set(this MMChannelData data, MMChannelModes mode, int channel, MMChannel channelDefinition) + { + data.MMChannelMode = mode; + data.Channel = channel; + data.MMChannelDefinition = channelDefinition; + return data; + } + } + + /// + /// A scriptable object you can create assets from, to identify Channels, used mostly (but not only) in feedbacks and shakers, + /// to determine a channel of communication, usually between emitters and receivers + /// + [CreateAssetMenu(menuName = "MoreMountains/MMChannel", fileName = "MMChannel")] + public class MMChannel : ScriptableObject + { + public static bool Match(MMChannelData dataA, MMChannelData dataB) + { + if (dataA.MMChannelMode != dataB.MMChannelMode) + { + return false; + } + + if (dataA.MMChannelMode == MMChannelModes.Int) + { + return dataA.Channel == dataB.Channel; + } + else + { + return dataA.MMChannelDefinition == dataB.MMChannelDefinition; + } + } + public static bool Match(MMChannelData dataA, MMChannelModes modeB, int channelB, MMChannel channelDefinitionB) + { + if (dataA == null) + { + return true; + } + + if (dataA.MMChannelMode != modeB) + { + return false; + } + + if (dataA.MMChannelMode == MMChannelModes.Int) + { + return dataA.Channel == channelB; + } + else + { + return dataA.MMChannelDefinition == channelDefinitionB; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/MMChannel.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/MMChannel.cs.meta new file mode 100644 index 0000000..9d8c4a1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMChannels/MMChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09e29c2242d13d64480d58af86fcb50f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player.meta new file mode 100644 index 0000000..a8ad5a7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 29c391bec7aa5dc4e914145af8159c87 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Feedback.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Feedback.cs new file mode 100644 index 0000000..c72fb4c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Feedback.cs @@ -0,0 +1,1220 @@ +using System; +using System.Collections; +using UnityEngine; +using MoreMountains.Tools; +using Random = UnityEngine.Random; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public abstract class MMF_Feedback + { + #region Properties + + public const string _randomnessGroupName = "Feedback Randomness"; + public const string _rangeGroupName = "Feedback Range"; + public const string _automaticSetupGroupName = "Automatic Setup"; + + [MMFInspectorGroup("Feedback Settings", true, 0, false, true)] + /// whether or not this feedback is active + [Tooltip("whether or not this feedback is active")] + public bool Active = true; + + [HideInInspector] public int UniqueID; + + /// the name of this feedback to display in the inspector + [Tooltip("the name of this feedback to display in the inspector")] + public string Label = "MMFeedback"; + + /// whether to broadcast this feedback's message using an int or a scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip( + "whether to broadcast this feedback's message using an int or a scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + + /// the ID of the channel on which this feedback will communicate + [Tooltip("the ID of the channel on which this feedback will communicate")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + + /// the MMChannel definition asset to use to broadcast this feedback. The shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip( + "the MMChannel definition asset to use to broadcast this feedback. The shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + /// the chance of this feedback happening (in percent : 100 : happens all the time, 0 : never happens, 50 : happens once every two calls, etc) + [Tooltip( + "the chance of this feedback happening (in percent : 100 : happens all the time, 0 : never happens, 50 : happens once every two calls, etc)")] + [Range(0, 100)] + public float Chance = 100f; + + /// use this color to customize the background color of the feedback in the MMF_Player's list + [Tooltip("use this color to customize the background color of the feedback in the MMF_Player's list")] + public Color DisplayColor = Color.black; + + /// a number of timing-related values (delay, repeat, etc) + [Tooltip("a number of timing-related values (delay, repeat, etc)")] + public MMFeedbackTiming Timing; + + /// a set of settings letting you define automated target acquisition for this feedback, to (for example) automatically grab the target on this game object, or a parent, a child, or on a reference holder + [Tooltip("a set of settings letting you define automated target acquisition for this feedback, to (for example) automatically grab the target on this game object, or a parent, a child, or on a reference holder")] + public MMFeedbackTargetAcquisition AutomatedTargetAcquisition; + + [MMFInspectorGroup(_randomnessGroupName, true, 58, false, true)] + /// if this is true, intensity will be multiplied by a random value on play, picked between RandomMultiplier.x and RandomMultiplier.y + [Tooltip( + "if this is true, intensity will be multiplied by a random value on play, picked between RandomMultiplier.x and RandomMultiplier.y")] + public bool RandomizeOutput = false; + + /// a random value (randomized between its x and y) by which to multiply the output of this feedback, if RandomizeOutput is true + [Tooltip( + "a random value (randomized between its x and y) by which to multiply the output of this feedback, if RandomizeOutput is true")] + [MMFCondition("RandomizeOutput", true)] + [MMFVector("Min", "Max")] + public Vector2 RandomMultiplier = new Vector2(0.8f, 1f); + + /// if this is true, this feedback's duration will be multiplied by a random value on play, picked between RandomDurationMultiplier.x and RandomDurationMultiplier.y + [Tooltip( + "if this is true, this feedback's duration will be multiplied by a random value on play, picked between RandomDurationMultiplier.x and RandomDurationMultiplier.y")] + public bool RandomizeDuration = false; + + /// a random value (randomized between its x and y) by which to multiply the duration of this feedback, if RandomizeDuration is true + [Tooltip( + "a random value (randomized between its x and y) by which to multiply the duration of this feedback, if RandomizeDuration is true")] + [MMFCondition("RandomizeDuration", true)] + [MMFVector("Min", "Max")] + public Vector2 RandomDurationMultiplier = new Vector2(0.5f, 2f); + + [MMFInspectorGroup(_rangeGroupName, true, 47)] + /// if this is true, only shakers within the specified range will respond to this feedback + [Tooltip("if this is true, only shakers within the specified range will respond to this feedback")] + public bool UseRange = false; + + /// when in UseRange mode, only shakers within that distance will respond to this feedback + [Tooltip("when in UseRange mode, only shakers within that distance will respond to this feedback")] + public float RangeDistance = 5f; + + /// when in UseRange mode, whether or not to modify the shake intensity based on the RangeFallOff curve + [Tooltip("when in UseRange mode, whether or not to modify the shake intensity based on the RangeFallOff curve")] + public bool UseRangeFalloff = false; + + /// the animation curve to use to define falloff (on the x 0 represents the range center, 1 represents the max distance to it) + [Tooltip( + "the animation curve to use to define falloff (on the x 0 represents the range center, 1 represents the max distance to it)")] + public AnimationCurve RangeFalloff = new AnimationCurve(new Keyframe(0f, 1f), new Keyframe(1f, 0f)); + + /// the values to remap the falloff curve's y axis' 0 and 1 + [Tooltip("the values to remap the falloff curve's y axis' 0 and 1")] + [MMFVector("Zero", "One")] + public Vector2 RemapRangeFalloff = new Vector2(0f, 1f); + + [MMFInspectorGroup(_automaticSetupGroupName, true, 49, false, true)] + + /// a button used to attempt an auto shaker setup for this feedback, adding whatever shaker it requires to function to the scene + [Tooltip("a button used to attempt an auto shaker setup for this feedback, adding whatever shaker it requires to function to the scene")] + public MMF_Button AutomaticShakerSetupButton; + + /// the Owner of the feedback, as defined when calling the Initialization method + [HideInInspector] public MMF_Player Owner; + + [HideInInspector] + /// whether or not this feedback is in debug mode + public bool DebugActive = false; + + /// set this to true if your feedback should pause the execution of the feedback sequence + public virtual IEnumerator Pause => null; + + /// if this is true, this feedback will wait until all previous feedbacks have run + public virtual bool HoldingPause => false; + + /// if this is true, this feedback will wait until all previous feedbacks have run, then run all previous feedbacks again + public virtual bool LooperPause => false; + + /// if this is true, this feedback will pause and wait until Resume() is called on its parent MMFeedbacks to resume execution + public virtual bool ScriptDrivenPause { get; set; } + + /// if this is a positive value, the feedback will auto resume after that duration if it hasn't been resumed via script already + public virtual float ScriptDrivenPauseAutoResume { get; set; } + + /// if this is true, this feedback will wait until all previous feedbacks have run, then run all previous feedbacks again + public virtual bool LooperStart => false; + + /// if this is true, the Channel property will be displayed, otherwise it'll be hidden + public virtual bool HasChannel => false; + + /// if this is true, this feedback will display an automatic shaker setup button + public virtual bool HasAutomaticShakerSetup => false; + + /// if this is true, the Randomness group will be displayed, otherwise it'll be hidden + public virtual bool HasRandomness => false; + + /// if this is true, this feedback implements ForceInitialState, otherwise calling that method will have no effect + public virtual bool CanForceInitialValue => false; + + /// if this is true, force initial value will happen over two frames + public virtual bool ForceInitialValueDelayed => false; + + /// whether or not this feedback can automatically grab the target on this game object, or a parent, a child, or on a reference holder + public virtual bool HasAutomatedTargetAcquisition => false; + /// when in forced reference mode, this will contain the forced reference holder that will be used (usually set by itself) + public virtual MMF_ReferenceHolder ForcedReferenceHolder { get; set; } + + /// if this is true, the Range group will be displayed, otherwise it'll be hidden + public virtual bool HasRange => false; + + /// the total amount of plays this feedback has left + public virtual int PlaysLeft => _playsLeft; + + public virtual bool HasCustomInspectors => false; + /// an overridable color for your feedback, that can be redefined per feedback. White is the only reserved color, and the feedback will revert to + /// normal (light or dark skin) when left to White + #if UNITY_EDITOR + public virtual Color FeedbackColor => Color.white; + #endif + /// returns true if this feedback is in cooldown at this time (and thus can't play), false otherwise + public virtual bool InCooldown => (Timing.CooldownDuration > 0f) && + (FeedbackTime - _lastPlayTimestamp < Timing.CooldownDuration); + + /// if this is true, this feedback is currently playing + public virtual bool IsPlaying { get; set; } + + /// + /// Computes the new intensity, taking into account constant intensity and potential randomness + /// + /// + /// + public virtual float ComputeIntensity(float intensity, Vector3 position) + { + float result = Timing.ConstantIntensity ? 1f : intensity; + result *= ComputedRandomMultiplier; + result *= Owner.ComputeRangeIntensityMultiplier(position); + return result; + } + + /// + /// Returns the random multiplier to apply to this feedback's output + /// + public virtual float ComputedRandomMultiplier => + RandomizeOutput ? Random.Range(RandomMultiplier.x, RandomMultiplier.y) : 1f; + + /// + /// Returns the timescale mode to use in logic, taking into account the one set at the feedback level and the player level + /// + public virtual TimescaleModes ComputedTimescaleMode + { + get + { + if (Owner.ForceTimescaleMode) + { + return Owner.ForcedTimescaleMode; + } + + return Timing.TimescaleMode; + } + } + + /// returns true if this feedback is in Scaled timescale mode, false otherwise + public virtual bool InScaledTimescaleMode + { + get + { + if (Owner.ForceTimescaleMode) + { + return (Owner.ForcedTimescaleMode == TimescaleModes.Scaled); + } + + return (Timing.TimescaleMode == TimescaleModes.Scaled); + } + } + + /// the time (or unscaled time) based on the selected Timing settings + public virtual float FeedbackTime + { + get + { + float timescaleMultiplier = Owner.TimescaleMultiplier; + + #if UNITY_EDITOR + if (!Application.isPlaying) + { + return (float)EditorApplication.timeSinceStartup * timescaleMultiplier; + } + #endif + + if (Timing.UseScriptDrivenTimescale) + { + return Timing.ScriptDrivenTime * timescaleMultiplier; + } + + if (Owner.ForceTimescaleMode) + { + if (Owner.ForcedTimescaleMode == TimescaleModes.Scaled) + { + return Time.time * timescaleMultiplier; + } + else + { + return Time.unscaledTime * timescaleMultiplier; + } + } + + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + return Time.time * timescaleMultiplier; + } + else + { + return Time.unscaledTime * timescaleMultiplier; + } + } + } + + /// the delta time (or unscaled delta time) based on the selected Timing settings + public virtual float FeedbackDeltaTime + { + get + { + float timescaleMultiplier = Owner.TimescaleMultiplier; + + if (Timing.UseScriptDrivenTimescale) + { + return Timing.ScriptDrivenDeltaTime * timescaleMultiplier; + } + + if (Owner.ForceTimescaleMode) + { + if (Owner.ForcedTimescaleMode == TimescaleModes.Scaled) + { + return Time.deltaTime * timescaleMultiplier; + } + else + { + return Time.unscaledDeltaTime * timescaleMultiplier; + } + } + + if (Owner.SkippingToTheEnd) + { + return float.MaxValue; + } + + if (Timing.TimescaleMode == TimescaleModes.Scaled) + { + return Time.deltaTime * timescaleMultiplier; + } + else + { + return Time.unscaledDeltaTime * timescaleMultiplier; + } + } + } + + /// + /// The total duration of this feedback : + /// total = initial delay + duration * (number of repeats + delay between repeats) + /// + public virtual float TotalDuration + { + get + { + return _totalDuration; + } + } + + public virtual bool IsExpanded { get; set; } + + /// + /// A flag used to determine if a feedback has all it needs, or if it requires some extra setup. + /// This flag will be used to display a warning icon in the inspector if the feedback is not ready to be played. + /// + public virtual bool RequiresSetup => _requiresSetup; + public virtual string RequiredTarget => _requiredTarget; + + public virtual void CacheRequiresSetup() + { + #if UNITY_EDITOR + + _requiresSetup = EvaluateRequiresSetup(); + if (_requiresSetup && HasAutomatedTargetAcquisition && (AutomatedTargetAcquisition != null) && (AutomatedTargetAcquisition.Mode != MMFeedbackTargetAcquisition.Modes.None)) + { + _requiresSetup = false; + } + if ((RequiredTargetText != _requiredTargetTextCached) || (RequiredTargetTextExtra != _requiredTargetTextCachedExtra)) + { + _requiredTarget = RequiredTargetText == "" ? "" : "[" + RequiredTargetText + "]" + RequiredTargetTextExtra; + _requiredTargetTextCached = RequiredTargetText; + _requiredTargetTextCachedExtra = RequiredTargetTextExtra; + } + + #endif + } + /// if this is true, group inspectors will be displayed within this feedback + public virtual bool DrawGroupInspectors => true; + /// if this is true, the feedback will be displayed in the MMF Player's list with a full color background, as opposed to just a small line on the left + public virtual bool DisplayFullHeaderColor => false; + /// defines the setup text that will be displayed on the feedback, should setup be required + public virtual string RequiresSetupText => "This feedback requires some additional setup."; + /// the text used to describe the required target + public virtual string RequiredTargetText => ""; + /// the text used to describe the required target, if more info is needed + public virtual string RequiredTargetTextExtra => ""; + + /// + /// Override this method to determine if a feedback requires setup + /// + /// + public virtual bool EvaluateRequiresSetup() => false; + + public virtual string RequiredChannelText + { + get + { + if (ChannelMode == MMChannelModes.MMChannel) + { + if (MMChannelDefinition == null) + { + return "None"; + } + + return MMChannelDefinition.name; + } + + return "Channel "+Channel; + } + } + + // the timestamp at which this feedback was last played + public virtual float FeedbackStartedAt => Application.isPlaying ? _lastPlayTimestamp : -1f; + + // the perceived duration of the feedback, to be used to display its progress bar, meant to be overridden with meaningful data by each feedback + public virtual float FeedbackDuration + { + get { return 0f; } + set { } + } + + /// + /// Use this method to change the duration of this feedback + /// + /// + public virtual void SetFeedbackDuration(float newDuration) + { + FeedbackDuration = newDuration; + Owner.ComputeCachedTotalDuration(); + } + + /// whether or not this feedback is playing right now + public virtual bool FeedbackPlaying => + ((FeedbackStartedAt > 0f) && (Time.time - FeedbackStartedAt < FeedbackDuration)); + + /// a ChannelData object, ready to pass to an event + public virtual MMChannelData ChannelData => _channelData.Set(ChannelMode, Channel, MMChannelDefinition); + + protected float _lastPlayTimestamp = -1f; + protected int _playsLeft; + protected bool _initialized = false; + protected Coroutine _playCoroutine; + protected Coroutine _infinitePlayCoroutine; + protected Coroutine _sequenceCoroutine; + protected Coroutine _repeatedPlayCoroutine; + protected bool _requiresSetup = false; + protected string _requiredTarget = ""; + protected float _randomDurationMultiplier = 1f; + protected int _sequenceTrackID = 0; + protected float _beatInterval; + protected bool BeatThisFrame = false; + protected int LastBeatIndex = 0; + protected int CurrentSequenceIndex = 0; + protected float LastBeatTimestamp = 0f; + protected MMChannelData _channelData; + protected float _totalDuration = 0f; + protected int _indexInOwnerFeedbackList = 0; + protected string _requiredTargetTextCached = "."; + protected string _requiredTargetTextCachedExtra = ""; + protected float _repeatOffset = 0f; + + #endregion Properties + + #region Initialization + + /// + /// Runs at Awake, lets you preinitialize your custom feedback before Initialization + /// + /// + /// + public virtual void PreInitialization(MMF_Player owner, int index) + { + _channelData = new MMChannelData(ChannelMode, Channel, MMChannelDefinition); + } + + /// + /// Typically runs on Start, Initializes the feedback and its timing related variables + /// + /// + public virtual void Initialization(MMF_Player owner, int index) + { + if (Timing == null) + { + Timing = new MMFeedbackTiming(); + } + + SetIndexInFeedbacksList(index); + _lastPlayTimestamp = -1f; + Timing.PlayCount = 0; + _initialized = true; + Owner = owner; + _playsLeft = Timing.NumberOfRepeats + 1; + _repeatOffset = 0f; + _channelData = new MMChannelData(ChannelMode, Channel, MMChannelDefinition); + AutomateTargetAcquisitionInternal(); + SetInitialDelay(Timing.InitialDelay); + SetDelayBetweenRepeats(Timing.DelayBetweenRepeats); + SetSequence(Timing.Sequence); + CustomInitialization(owner); + } + + /// + /// Lets you specify at what index this feedback is in the list - use carefully (or don't use at all) + /// + /// + public virtual void SetIndexInFeedbacksList(int index) + { + _indexInOwnerFeedbackList = index; + } + + /// + /// Call this method (either directly or via the inspector button) to try and automatically setup this feedback's + /// corresponding shaker in the scene + /// + public virtual void AutomaticShakerSetup() + { + + } + + #endregion Initialization + + #region Automation + + /// + /// Performs automated target acquisition, if needed + /// + protected virtual void AutomateTargetAcquisitionInternal() + { + if (!HasAutomatedTargetAcquisition) + { + return; + } + + if (AutomatedTargetAcquisition == null) + { + AutomatedTargetAcquisition = new MMFeedbackTargetAcquisition(); + } + + if (AutomatedTargetAcquisition.Mode == MMFeedbackTargetAcquisition.Modes.None) + { + return; + } + + AutomateTargetAcquisition(); + CacheRequiresSetup(); + } + + /// + /// Lets you force target acquisition, outside of initialization where it usually occurs + /// + public virtual void ForceAutomateTargetAcquisition() + { + AutomateTargetAcquisition(); + CacheRequiresSetup(); + } + + /// + /// A method meant to be implemented per feedback letting you specify what happens (usually setting a target) + /// + protected virtual void AutomateTargetAcquisition() + { + + } + + /// + /// + /// + /// + protected virtual GameObject FindAutomatedTargetGameObject() + { + return MMFeedbackTargetAcquisition.FindAutomatedTargetGameObject(AutomatedTargetAcquisition, Owner, _indexInOwnerFeedbackList); + } + + /// + /// + /// + /// + /// + protected virtual T FindAutomatedTarget() + { + return MMFeedbackTargetAcquisition.FindAutomatedTarget(AutomatedTargetAcquisition, Owner, _indexInOwnerFeedbackList); + } + + #endregion Automation + + #region Play + + /// + /// Plays the feedback + /// + /// + /// + public virtual void Play(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active) + { + return; + } + + if (!_initialized) + { + string feedbackName = this.ToString().Replace("MoreMountains.Feedbacks.", ""); + Debug.LogWarning("The " + feedbackName + + " feedback on "+Owner.gameObject.name+" is being played without having been initialized. Always call the Initialization() method first. This can be done manually, or on Start or Awake (automatically on Start is the default). If you're auto playing your feedback on Start or on Enable, initialize on Awake (which runs before Start and Enable). You can change that setting on your MMF Player, unfold the Settings foldout at the top, and change the Initialization Mode.", Owner.gameObject); + } + + // we check the cooldown + if (InCooldown) + { + return; + } + + if (Timing.InitialDelay > 0f) + { + _playCoroutine = Owner.StartCoroutine(PlayCoroutine(position, feedbacksIntensity)); + } + else + { + RegularPlay(position, feedbacksIntensity); + } + } + + /// + /// An internal coroutine delaying the initial play of the feedback + /// + /// + /// + /// + protected virtual IEnumerator PlayCoroutine(Vector3 position, float feedbacksIntensity = 1.0f) + { + yield return WaitFor(ApplyTimeMultiplier(Timing.InitialDelay)); + RegularPlay(position, feedbacksIntensity); + } + + /// + /// Triggers delaying coroutines if needed + /// + /// + /// + protected virtual void RegularPlay(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Chance == 0f) + { + return; + } + + if (Chance != 100f) + { + // determine the odds + float random = Random.Range(0f, 100f); + if (random > Chance) + { + return; + } + } + + if (Timing.LimitPlayCount && (Timing.PlayCount >= Timing.MaxPlayCount)) + { + return; + } + + if (Timing.UseIntensityInterval) + { + if ((feedbacksIntensity < Timing.IntensityIntervalMin) || + (feedbacksIntensity >= Timing.IntensityIntervalMax)) + { + return; + } + } + + _repeatOffset = 0f; + + if (Timing.RepeatForever) + { + _infinitePlayCoroutine = Owner.StartCoroutine(InfinitePlay(position, feedbacksIntensity)); + return; + } + + if (Timing.NumberOfRepeats > 0) + { + _repeatedPlayCoroutine = Owner.StartCoroutine(RepeatedPlay(position, feedbacksIntensity)); + return; + } + + if (Timing.Sequence == null) + { + TriggerCustomPlay(position, feedbacksIntensity); + } + else + { + _sequenceCoroutine = Owner.StartCoroutine(SequenceCoroutine(position, feedbacksIntensity)); + } + } + + /// + /// Triggers a custom play + /// + /// + /// + protected virtual void TriggerCustomPlay(Vector3 position, float intensity) + { + Timing.PlayCount++; + _lastPlayTimestamp = FeedbackTime; + CustomPlayFeedback(position, intensity); + } + + /// + /// Internal coroutine used for repeated play without end + /// + /// + /// + /// + protected virtual IEnumerator InfinitePlay(Vector3 position, float feedbacksIntensity = 1.0f) + { + while (true) + { + yield return TriggerRepeatedPlay(position, feedbacksIntensity); + } + } + + /// + /// Internal coroutine used for repeated play + /// + /// + /// + /// + protected virtual IEnumerator RepeatedPlay(Vector3 position, float feedbacksIntensity = 1.0f) + { + while (_playsLeft > 0) + { + _playsLeft--; + yield return TriggerRepeatedPlay(position, feedbacksIntensity); + } + + _playsLeft = Timing.NumberOfRepeats + 1; + } + + protected virtual IEnumerator TriggerRepeatedPlay(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Timing.Sequence == null) + { + TriggerCustomPlay(position, feedbacksIntensity); + float repeatStartTime = Time.time; + + float repeatDuration = Timing.DelayBetweenRepeats + FeedbackDuration; + if (_repeatOffset <= Timing.DelayBetweenRepeats) + { + repeatDuration = Timing.DelayBetweenRepeats + FeedbackDuration - _repeatOffset; + } + + yield return WaitFor(repeatDuration); + yield return null; + _repeatOffset = (Time.time - repeatStartTime - repeatDuration); + } + else + { + _sequenceCoroutine = Owner.StartCoroutine(SequenceCoroutine(position, feedbacksIntensity)); + float delay = ApplyTimeMultiplier(Timing.DelayBetweenRepeats) + Timing.Sequence.Length; + yield return WaitFor(delay); + } + } + + #endregion Play + + #region Sequence + + /// + /// A coroutine used to play this feedback on a sequence + /// + /// + /// + /// + protected virtual IEnumerator SequenceCoroutine(Vector3 position, float feedbacksIntensity = 1.0f) + { + yield return null; + float timeStartedAt = FeedbackTime; + float lastFrame = FeedbackTime; + + BeatThisFrame = false; + LastBeatIndex = 0; + CurrentSequenceIndex = 0; + LastBeatTimestamp = 0f; + + if (Timing.Quantized) + { + while (CurrentSequenceIndex < Timing.Sequence.QuantizedSequence[0].Line.Count) + { + _beatInterval = 60f / Timing.TargetBPM; + + if ((FeedbackTime - LastBeatTimestamp >= _beatInterval) || (LastBeatTimestamp == 0f)) + { + BeatThisFrame = true; + LastBeatIndex = CurrentSequenceIndex; + LastBeatTimestamp = FeedbackTime; + + for (int i = 0; i < Timing.Sequence.SequenceTracks.Count; i++) + { + if (Timing.Sequence.QuantizedSequence[i].Line[CurrentSequenceIndex].ID == Timing.TrackID) + { + TriggerCustomPlay(position, feedbacksIntensity); + } + } + + CurrentSequenceIndex++; + } + + yield return null; + } + } + else + { + while (FeedbackTime - timeStartedAt < Timing.Sequence.Length) + { + foreach (MMSequenceNote item in Timing.Sequence.OriginalSequence.Line) + { + if ((item.ID == Timing.TrackID) && (item.Timestamp >= lastFrame) && + (item.Timestamp <= FeedbackTime - timeStartedAt)) + { + TriggerCustomPlay(position, feedbacksIntensity); + } + } + + lastFrame = FeedbackTime - timeStartedAt; + yield return null; + } + } + } + + /// + /// Use this method to change this feedback's sequence at runtime + /// + /// + public virtual void SetSequence(MMSequence newSequence) + { + Timing.Sequence = newSequence; + if (Timing.Sequence != null) + { + for (int i = 0; i < Timing.Sequence.SequenceTracks.Count; i++) + { + if (Timing.Sequence.SequenceTracks[i].ID == Timing.TrackID) + { + _sequenceTrackID = i; + } + } + } + } + + #endregion Sequence + + #region Controls + + /// + /// Stops all feedbacks from playing. Will stop repeating feedbacks, and call custom stop implementations + /// + /// + /// + public virtual void Stop(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (_playCoroutine != null) + { + Owner.StopCoroutine(_playCoroutine); + } + + if (_infinitePlayCoroutine != null) + { + Owner.StopCoroutine(_infinitePlayCoroutine); + } + + if (_repeatedPlayCoroutine != null) + { + Owner.StopCoroutine(_repeatedPlayCoroutine); + } + + if (_sequenceCoroutine != null) + { + Owner.StopCoroutine(_sequenceCoroutine); + } + + _lastPlayTimestamp = -1f; + _playsLeft = Timing.NumberOfRepeats + 1; + if (Timing.InterruptsOnStop) + { + CustomStopFeedback(position, feedbacksIntensity); + } + } + + /// + /// Called when skipping to the end of MMF_Player, calls custom Skip on all feedbacks + /// + /// + /// + public virtual void SkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) + { + CustomSkipToTheEnd(position, feedbacksIntensity); + } + + /// + /// Forces the feedback to set its initial value (behavior will change from feedback to feedback, + /// but for example, a Position feedback that moves a Transform from point A to B would + /// automatically move the Transform to point A when ForceInitialState is called + /// + public virtual void ForceInitialValue(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!CanForceInitialValue) + { + return; + } + if (ForceInitialValueDelayed) + { + Owner.StartCoroutine(ForceInitialValueDelayedCo(position, feedbacksIntensity)); + } + else + { + Play(position, feedbacksIntensity); + Stop(position, feedbacksIntensity); + } + } + + /// + /// A coroutine used to delay the Stop when forcing initial values (used mostly with shaker based feedbacks) + /// + /// + /// + /// + protected virtual IEnumerator ForceInitialValueDelayedCo(Vector3 position, float feedbacksIntensity = 1.0f) + { + Play(position, feedbacksIntensity); + yield return new WaitForEndOfFrame(); + Stop(position, feedbacksIntensity); + + } + + /// + /// Called when restoring the initial state of a player, calls custom Restore on all feedbacks + /// + /// + /// + public virtual void RestoreInitialValues() + { + CustomRestoreInitialValues(); + } + + /// + /// Calls this feedback's custom reset + /// + public virtual void ResetFeedback() + { + _playsLeft = Timing.NumberOfRepeats + 1; + if (Timing.SetPlayCountToZeroOnReset) + { + ResetPlayCount(); + } + CustomReset(); + } + + /// + /// This gets called by the MMF Player when all feedbacks have completed playing + /// + public virtual void PlayerComplete() + { + CustomPlayerComplete(); + } + + #endregion + + #region Time + + /// + /// Use this method to specify a new delay between repeats at runtime + /// + /// + public virtual void SetDelayBetweenRepeats(float delay) + { + Timing.DelayBetweenRepeats = delay; + } + + /// + /// Use this method to specify a new initial delay at runtime + /// + /// + public virtual void SetInitialDelay(float delay) + { + Timing.InitialDelay = delay; + } + + /// + /// Returns the t value at which to evaluate a curve at the end of this feedback's play time + /// + protected virtual float FinalNormalizedTime + { + get { return NormalPlayDirection ? 1f : 0f; } + } + + /// + /// Computes a new random duration multiplier + /// + public virtual void ComputeNewRandomDurationMultiplier() + { + _randomDurationMultiplier = Random.Range(RandomDurationMultiplier.x, RandomDurationMultiplier.y); + } + + /// + /// Resets the play count of this feedback + /// + public virtual void ResetPlayCount() + { + Timing.PlayCount = 0; + } + + /// + /// Applies the host MMFeedbacks' time multiplier to this feedback + /// + /// + /// + protected virtual float ApplyTimeMultiplier(float duration) + { + if (Owner == null) + { + return 0f; + } + + if (RandomizeDuration) + { + duration = duration * _randomDurationMultiplier; + } + + return Owner.ApplyTimeMultiplier(duration); + } + + /// + /// Internal method used to wait for a duration, on scaled or unscaled time + /// + /// + /// + protected virtual IEnumerator WaitFor(float delay) + { + if (InScaledTimescaleMode) + { + yield return MMFeedbacksCoroutine.WaitFor(delay); + } + else + { + yield return MMFeedbacksCoroutine.WaitForUnscaled(delay); + } + } + + /// + /// Computes the total duration of this feedback + /// + public virtual void ComputeTotalDuration() + { + if ((Timing != null) && (!Timing.ContributeToTotalDuration)) + { + _totalDuration = 0f; + return; + } + + float totalTime = 0f; + + if (Timing == null) + { + _totalDuration = 0f; + return; + } + + if (Timing.InitialDelay != 0) + { + totalTime += ApplyTimeMultiplier(Timing.InitialDelay); + } + + totalTime += FeedbackDuration; + + if (Timing.NumberOfRepeats != 0) + { + float delayBetweenRepeats = ApplyTimeMultiplier(Timing.DelayBetweenRepeats); + + totalTime += (Timing.NumberOfRepeats * delayBetweenRepeats); + } + + _totalDuration = totalTime; + } + + #endregion Time + + #region Direction + + /// + /// Returns a new value of the normalized time based on the current play direction of this feedback + /// + /// + /// + protected virtual float ApplyDirection(float normalizedTime) + { + return NormalPlayDirection ? normalizedTime : 1 - normalizedTime; + } + + /// + /// Returns true if this feedback should play normally, or false if it should play in rewind + /// + public virtual bool NormalPlayDirection + { + get + { + switch (Timing.PlayDirection) + { + case MMFeedbackTiming.PlayDirections.FollowMMFeedbacksDirection: + return (Owner.Direction == MMF_Player.Directions.TopToBottom); + case MMFeedbackTiming.PlayDirections.AlwaysNormal: + return true; + case MMFeedbackTiming.PlayDirections.AlwaysRewind: + return false; + case MMFeedbackTiming.PlayDirections.OppositeMMFeedbacksDirection: + return !(Owner.Direction == MMF_Player.Directions.TopToBottom); + } + + return true; + } + } + + /// + /// Returns true if this feedback should play in the current parent MMFeedbacks direction, according to its MMFeedbacksDirectionCondition setting + /// + public virtual bool ShouldPlayInThisSequenceDirection + { + get + { + if (Timing == null) + { + return true; + } + switch (Timing.MMFeedbacksDirectionCondition) + { + case MMFeedbackTiming.MMFeedbacksDirectionConditions.Always: + return true; + case MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenForwards: + return (Owner.Direction == MMF_Player.Directions.TopToBottom); + case MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenBackwards: + return (Owner.Direction == MMF_Player.Directions.BottomToTop); + } + + return true; + } + } + + #endregion Direction + + #region Overrides + + /// + /// This method describes all custom initialization processes the feedback requires, in addition to the main Initialization method + /// + /// + protected virtual void CustomInitialization(MMF_Player owner) { } + + /// + /// This method describes what happens when the feedback gets played + /// + /// + /// + protected abstract void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f); + + /// + /// This method describes what happens when the feedback gets stopped + /// + /// + /// + protected virtual void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) { } + + /// + /// This method describes what happens when the feedback gets skipped to the end + /// + /// + /// + protected virtual void CustomSkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) { } + + /// + /// This method describes what happens when the feedback gets restored + /// + protected virtual void CustomRestoreInitialValues() { } + /// + /// This method describes what happens when the player this feedback belongs to completes playing + /// + protected virtual void CustomPlayerComplete() { } + + /// + /// This method describes what happens when the feedback gets reset + /// + protected virtual void CustomReset() { } + + /// + /// Use this method to initialize any custom attributes you may have + /// + public virtual void InitializeCustomAttributes() + { + if (HasAutomaticShakerSetup) + { + AutomaticShakerSetupButton = new MMF_Button("Automatic Shaker Setup", AutomaticShakerSetup); + } + } + + #endregion Overrides + + #region Event functions + + /// + /// Triggered when a change happens in the inspector + /// + public virtual void OnValidate() + { + InitializeCustomAttributes(); + ComputeTotalDuration(); + } + + /// + /// Triggered when the feedback gets added to the player + /// + public virtual void OnAddFeedback() + { + + } + + /// + /// Triggered when that feedback gets destroyed + /// + public virtual void OnDestroy() { } + + /// + /// Triggered when the host MMF Player gets disabled + /// + public virtual void OnDisable() { } + + /// + /// Triggered when the host MMF Player gets selected, can be used to draw gizmos + /// + public virtual void OnDrawGizmosSelectedHandler() { } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Feedback.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Feedback.cs.meta new file mode 100644 index 0000000..072127f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Feedback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1466e386bacf73e428d7e19707b9e185 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_FeedbackAttributes.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_FeedbackAttributes.cs new file mode 100644 index 0000000..b988eb9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_FeedbackAttributes.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public class MMF_Button + { + public delegate void ButtonMethod(); + + public string ButtonText; + public ButtonMethod TargetMethod; + + public MMF_Button(string buttonText, ButtonMethod method) + { + ButtonText = buttonText; + TargetMethod = method; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_FeedbackAttributes.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_FeedbackAttributes.cs.meta new file mode 100644 index 0000000..66a36cc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_FeedbackAttributes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecda383e35cc53e4ca2b9d5857dbd8f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Player.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Player.cs new file mode 100644 index 0000000..b850c14 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Player.cs @@ -0,0 +1,1682 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Feedbacks/MMF Player")] + [DisallowMultipleComponent] + public class MMF_Player : MMFeedbacks + { + #region PROPERTIES + + [SerializeReference] + public List FeedbacksList; + + public override float TotalDuration + { + get + { + return _cachedTotalDuration; + } + } + + public bool KeepPlayModeChanges = false; + /// if this is true, the inspector won't refresh while the feedback plays, this saves on performance but feedback inspectors' progress bars for example won't look as smooth + [Tooltip("if this is true, the inspector won't refresh while the feedback plays, this saves on performance but feedback inspectors' progress bars for example won't look as smooth")] + public bool PerformanceMode = false; + /// if this is true, StopFeedbacks will be called on all feedbacks on Disable + [Tooltip("if this is true, StopFeedbacks will be called on all feedbacks on Disable")] + public bool StopFeedbacksOnDisable = false; + /// how many times this player has started playing + [Tooltip("how many times this player has started playing")] + [MMReadOnly] + public int PlayCount = 0; + + public virtual bool SkippingToTheEnd { get; protected set; } + + protected Type _t; + protected float _cachedTotalDuration; + protected bool _initialized = false; + + #endregion + + #region INITIALIZATION + + /// + /// On Awake we initialize our feedbacks if we're in auto mode + /// + protected override void Awake() + { + if (AutoInitialization && (AutoPlayOnEnable || AutoPlayOnStart)) + { + InitializationMode = InitializationModes.Awake; + } + + // if our MMFeedbacks is in AutoPlayOnEnable mode, we add a little helper to it that will re-enable it if needed if the parent game object gets turned off and on again + if (AutoPlayOnEnable) + { + MMF_PlayerEnabler playerEnabler = GetComponent(); + if (playerEnabler == null) + { + playerEnabler = this.gameObject.AddComponent(); + } + playerEnabler.TargetMmfPlayer = this; + } + + if ((InitializationMode == InitializationModes.Awake) && (Application.isPlaying)) + { + Initialization(); + } + + InitializeFeedbackList(); + ExtraInitializationChecks(); + CheckForLoops(); + ComputeCachedTotalDuration(); + PreInitialization(); + } + + /// + /// On Start we initialize our feedbacks if we're in auto mode + /// + protected override void Start() + { + if ((InitializationMode == InitializationModes.Start) && (Application.isPlaying)) + { + Initialization(); + } + if (AutoPlayOnStart && Application.isPlaying) + { + PlayFeedbacks(); + } + CheckForLoops(); + } + + /// + /// We initialize our list of feedbacks + /// + protected virtual void InitializeFeedbackList() + { + if (FeedbacksList == null) + { + FeedbacksList = new List(); + } + } + + /// + /// Performs extra checks, mostly to cover cases of dynamic creation + /// + protected virtual void ExtraInitializationChecks() + { + if (Events == null) + { + Events = new MMFeedbacksEvents(); + Events.Initialization(); + } + } + + /// + /// On Enable we initialize our feedbacks if we're in auto mode + /// + protected override void OnEnable() + { + Events.TriggerOnEnable(this); + + if (OnlyPlayIfWithinRange) + { + MMSetFeedbackRangeCenterEvent.Register(OnMMSetFeedbackRangeCenterEvent); + } + foreach (MMF_Feedback feedback in FeedbacksList) + { + feedback.CacheRequiresSetup(); + } + if (AutoPlayOnEnable && Application.isPlaying) + { + if (_lastOnEnableFrame == Time.frameCount) + { + return; + } + + // if we're in the very first frames, we delay our play for 2 frames to avoid Unity bugs + if (Time.frameCount < 2) + { + _lastOnEnableFrame = 2; + StartCoroutine(PlayFeedbacksAfterFrames(2)); + } + else + { + PlayFeedbacks(); + } + } + } + + /// + /// A coroutine you can start to play this player's feedbacks after X frames + /// + /// + /// + public virtual IEnumerator PlayFeedbacksAfterFrames(int framesAmount) + { + yield return MMFeedbacksCoroutine.WaitForFrames(framesAmount); + PlayFeedbacks(); + } + + public virtual void PreInitialization() + { + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if (FeedbacksList[i] != null) + { + FeedbacksList[i].PreInitialization(this, i); + } + } + } + + /// + /// A public method to initialize the feedback, specifying an owner that will be used as the reference for position and hierarchy by feedbacks + /// + /// + /// + public override void Initialization(bool forceInitIfPlaying = false) + { + if (IsPlaying && !forceInitIfPlaying) + { + return; + } + + SkippingToTheEnd = false; + IsPlaying = false; + _lastStartAt = -float.MaxValue; + + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if (FeedbacksList[i] != null) + { + FeedbacksList[i].Initialization(this, i); + } + } + + Events.TriggerOnInitializationComplete(this); + + _initialized = true; + } + + /// + /// When calling the legacy init method that used to specify an owner, we force the MMF Player init to run + /// + /// + public override void Initialization(GameObject owner) + { + Initialization(); + } + + #endregion + + #region PLAY + + /// + /// Plays all feedbacks using the MMFeedbacks' position as reference, and no attenuation + /// + public override void PlayFeedbacks() + { + PlayFeedbacksInternal(this.transform.position, FeedbacksIntensity); + } + + /// + /// Plays all feedbacks, specifying a position and intensity. The position may be used by each Feedback and taken into account to spark a particle or play a sound for example. + /// The feedbacks intensity is a factor that can be used by each Feedback to lower its intensity, usually you'll want to define that attenuation based on time or distance (using a lower + /// intensity value for feedbacks happening further away from the Player). + /// Additionally you can force the feedback to play in reverse, ignoring its current condition + /// + /// + /// + /// + public override void PlayFeedbacks(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + PlayFeedbacksInternal(position, feedbacksIntensity, forceRevert); + } + + /// + /// Plays all feedbacks using the MMFeedbacks' position as reference, and no attenuation, and in reverse (from bottom to top) + /// + public override void PlayFeedbacksInReverse() + { + PlayFeedbacksInternal(this.transform.position, FeedbacksIntensity, true); + } + + /// + /// Plays all feedbacks using the MMFeedbacks' position as reference, and no attenuation, and in reverse (from bottom to top) + /// + public override void PlayFeedbacksInReverse(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + PlayFeedbacksInternal(position, feedbacksIntensity, forceRevert); + } + + /// + /// Plays all feedbacks in the sequence, but only if this MMFeedbacks is playing in reverse order + /// + public override void PlayFeedbacksOnlyIfReversed() + { + + if ( (Direction == Directions.BottomToTop && !ShouldRevertOnNextPlay) + || ((Direction == Directions.TopToBottom) && ShouldRevertOnNextPlay) ) + { + PlayFeedbacks(); + } + } + + /// + /// Plays all feedbacks in the sequence, but only if this MMFeedbacks is playing in reverse order + /// + public override void PlayFeedbacksOnlyIfReversed(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + + if ( (Direction == Directions.BottomToTop && !ShouldRevertOnNextPlay) + || ((Direction == Directions.TopToBottom) && ShouldRevertOnNextPlay) ) + { + PlayFeedbacks(position, feedbacksIntensity, forceRevert); + } + } + + /// + /// Plays all feedbacks in the sequence, but only if this MMFeedbacks is playing in normal order + /// + public override void PlayFeedbacksOnlyIfNormalDirection() + { + if (Direction == Directions.TopToBottom) + { + PlayFeedbacks(); + } + } + + /// + /// Plays all feedbacks in the sequence, but only if this MMFeedbacks is playing in normal order + /// + public override void PlayFeedbacksOnlyIfNormalDirection(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + if (Direction == Directions.TopToBottom) + { + PlayFeedbacks(position, feedbacksIntensity, forceRevert); + } + } + + /// + /// A public coroutine you can call externally when you want to yield in a coroutine of yours until the MMFeedbacks has stopped playing + /// typically : yield return myFeedback.PlayFeedbacksCoroutine(this.transform.position, 1.0f, false); + /// + /// The position at which the MMFeedbacks should play + /// The intensity of the feedback + /// Whether or not the MMFeedbacks should play in reverse or not + /// + public override IEnumerator PlayFeedbacksCoroutine(Vector3 position, float feedbacksIntensity = 1.0f, bool forceRevert = false) + { + PlayFeedbacks(position, feedbacksIntensity, forceRevert); + while (IsPlaying) + { + yield return null; + } + } + + #endregion + + #region SEQUENCE + + /// + /// An internal method used to play feedbacks, shouldn't be called externally + /// + /// + /// + protected override void PlayFeedbacksInternal(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + if (AutoInitialization) + { + if (!_initialized) + { + Initialization(); + } + } + + if (!IsAllowedToPlay(position)) + { + return; + } + + SkippingToTheEnd = false; + + if (ShouldRevertOnNextPlay) + { + Revert(); + ShouldRevertOnNextPlay = false; + } + + if (forceRevert) + { + Direction = (Direction == Directions.BottomToTop) ? Directions.TopToBottom : Directions.BottomToTop; + } + + ResetFeedbacks(); + _lastStartFrame = Time.frameCount; + _startTime = GetTime(); + _lastStartAt = _startTime; + this.enabled = true; + IsPlaying = true; + PlayCount++; + ComputeNewRandomDurationMultipliers(); + CheckForPauses(); + + if (Time.frameCount < 2) + { + this.enabled = false; + StartCoroutine(FrameOnePlayCo(position, feedbacksIntensity, forceRevert)); + return; + } + + if (InitialDelay > 0f) + { + StartCoroutine(HandleInitialDelayCo(position, feedbacksIntensity, forceRevert)); + } + else + { + PreparePlay(position, feedbacksIntensity, forceRevert); + } + } + + /// + /// Returns true if this feedback is allowed to play, false otherwise + /// + /// + /// + public virtual bool IsAllowedToPlay(Vector3 position) + { + // if CanPlay is false, we're not allowed to play + if (!CanPlay) + { + return false; + } + + // if we're already playing and can't play while already playing, we're not allowed to play + if (IsPlaying && !CanPlayWhileAlreadyPlaying) + { + return false; + } + + if (AutoPlayOnEnable && (_lastStartFrame == Time.frameCount)) + { + return false; + } + + // if we roll a dice and are below our chance rate, we're not allowed to play + if (!EvaluateChance()) + { + return false; + } + + // if we are in cooldown, we're not allowed to play + if (CooldownDuration > 0f) + { + if (GetTime() - _lastStartAt < CooldownDuration) + { + return false; + } + } + + // if all MMFeedbacks are disabled globally, we're not allowed to play + if (!GlobalMMFeedbacksActive) + { + return false; + } + + // if the game object this player is on disabled, we're not allowed to play + if (!this.gameObject.activeInHierarchy) + { + return false; + } + + // if we're using range and are not within range, we're not allowed to play + if (OnlyPlayIfWithinRange) + { + if (RangeCenter == null) + { + return false; + } + float distanceToCenter = Vector3.Distance(position, RangeCenter.position); + if (distanceToCenter > RangeDistance) + { + return false; + } + } + + return true; + } + + protected virtual IEnumerator FrameOnePlayCo(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + yield return null; + this.enabled = true; + _startTime = GetTime(); + _lastStartAt = _startTime; + IsPlaying = true; + yield return MMFeedbacksCoroutine.WaitForUnscaled(ComputedInitialDelay); + PreparePlay(position, feedbacksIntensity, forceRevert); + } + + protected override void PreparePlay(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + Events.TriggerOnPlay(this); + _holdingMax = 0f; + CheckForPauses(); + + if (!_pauseFound) + { + PlayAllFeedbacks(position, feedbacksIntensity, forceRevert); + } + else + { + // if at least one pause was found + StartCoroutine(PausedFeedbacksCo(position, feedbacksIntensity)); + } + } + + protected override void CheckForPauses() + { + _pauseFound = false; + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if (FeedbacksList[i] != null) + { + if ((FeedbacksList[i].Pause != null) && (FeedbacksList[i].Active) && (FeedbacksList[i].ShouldPlayInThisSequenceDirection)) + { + _pauseFound = true; + } + if ((FeedbacksList[i].HoldingPause == true) && (FeedbacksList[i].Active) && (FeedbacksList[i].ShouldPlayInThisSequenceDirection)) + { + _pauseFound = true; + } + } + } + } + + protected override void PlayAllFeedbacks(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + // if no pause was found, we just play all feedbacks at once + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if (FeedbackCanPlay(FeedbacksList[i])) + { + FeedbacksList[i].Play(position, feedbacksIntensity); + } + } + } + + protected override IEnumerator HandleInitialDelayCo(Vector3 position, float feedbacksIntensity, bool forceRevert = false) + { + IsPlaying = true; + + if (PlayerTimescaleMode == TimescaleModes.Scaled) + { + yield return MMFeedbacksCoroutine.WaitFor(ComputedInitialDelay); + } + else + { + yield return MMFeedbacksCoroutine.WaitForUnscaled(ComputedInitialDelay); + } + + PreparePlay(position, feedbacksIntensity, forceRevert); + } + + protected override void Update() + { + if (_shouldStop) + { + if (HasFeedbackStillPlaying()) + { + return; + } + IsPlaying = false; + ApplyAutoRevert(); + this.enabled = false; + _shouldStop = false; + PlayerCompleteFeedbacks(); + Events.TriggerOnComplete(this); + } + if (IsPlaying) + { + if (!_pauseFound) + { + if (GetTime() - _startTime > TotalDuration) + { + _shouldStop = true; + } + } + } + else + { + this.enabled = false; + } + } + + /// + /// A coroutine used to handle the sequence of feedbacks if pauses are involved + /// + /// + /// + /// + protected override IEnumerator PausedFeedbacksCo(Vector3 position, float feedbacksIntensity) + { + IsPlaying = true; + + int i = (Direction == Directions.TopToBottom) ? 0 : FeedbacksList.Count-1; + + int count = FeedbacksList.Count; + while ((i >= 0) && (i < count)) + { + if (!IsPlaying) + { + yield break; + } + + if (FeedbacksList[i] == null) + { + yield break; + } + + if (((FeedbacksList[i].Active) && (FeedbacksList[i].ScriptDrivenPause)) || InScriptDrivenPause) + { + InScriptDrivenPause = true; + + bool inAutoResume = (FeedbacksList[i].ScriptDrivenPauseAutoResume > 0f); + float scriptDrivenPauseStartedAt = GetTime(); + float autoResumeDuration = FeedbacksList[i].ScriptDrivenPauseAutoResume; + + while (InScriptDrivenPause) + { + if (inAutoResume && (GetTime() - scriptDrivenPauseStartedAt > autoResumeDuration)) + { + ResumeFeedbacks(); + } + yield return null; + } + } + + // handles holding pauses + if ((FeedbacksList[i].Active) + && ((FeedbacksList[i].HoldingPause == true) || (FeedbacksList[i].LooperPause == true)) + && (FeedbacksList[i].ShouldPlayInThisSequenceDirection)) + { + Events.TriggerOnPause(this); + // we stay here until all previous feedbacks have finished + while ((GetTime() - _lastStartAt < _holdingMax / TimescaleMultiplier) && !SkippingToTheEnd) + { + yield return null; + } + _holdingMax = 0f; + _lastStartAt = GetTime(); + } + + // plays the feedback + if (FeedbackCanPlay(FeedbacksList[i])) + { + FeedbacksList[i].Play(position, feedbacksIntensity); + } + + // Handles pause + if ((FeedbacksList[i].Pause != null) && (FeedbacksList[i].Active) && (FeedbacksList[i].ShouldPlayInThisSequenceDirection) && !SkippingToTheEnd) + { + bool shouldPause = true; + if (FeedbacksList[i].Chance < 100) + { + float random = Random.Range(0f, 100f); + if (random > FeedbacksList[i].Chance) + { + shouldPause = false; + } + } + + if (shouldPause) + { + yield return FeedbacksList[i].Pause; + Events.TriggerOnResume(this); + _lastStartAt = GetTime(); + _holdingMax = 0f; + } + } + + // updates holding max + if (FeedbacksList[i].Active) + { + if ((FeedbacksList[i].Pause == null) && (FeedbacksList[i].ShouldPlayInThisSequenceDirection) && (!FeedbacksList[i].Timing.ExcludeFromHoldingPauses)) + { + float feedbackDuration = FeedbacksList[i].TotalDuration; + _holdingMax = Mathf.Max(feedbackDuration, _holdingMax); + } + } + + // handles looper + if ((FeedbacksList[i].LooperPause == true) + && (FeedbacksList[i].Active) + && (FeedbacksList[i].ShouldPlayInThisSequenceDirection) + && (((FeedbacksList[i] as MMF_Looper).NumberOfLoopsLeft > 0) || (FeedbacksList[i] as MMF_Looper).InInfiniteLoop)) + { + while (HasFeedbackStillPlaying() && !SkippingToTheEnd) + { + yield return null; + } + + // we determine the index we should start again at + bool loopAtLastPause = (FeedbacksList[i] as MMF_Looper).LoopAtLastPause; + bool loopAtLastLoopStart = (FeedbacksList[i] as MMF_Looper).LoopAtLastLoopStart; + + int newi = 0; + + int j = (Direction == Directions.TopToBottom) ? i - 1 : i + 1; + + int listCount = FeedbacksList.Count; + while ((j >= 0) && (j <= listCount)) + { + // if we're at the start + if (j == 0) + { + newi = j - 1; + break; + } + if (j == listCount) + { + newi = j ; + break; + } + // if we've found a pause + if ((FeedbacksList[j].Pause != null) + && !SkippingToTheEnd + && (FeedbacksList[j].FeedbackDuration > 0f) + && loopAtLastPause && (FeedbacksList[j].Active)) + { + newi = j; + break; + } + // if we've found a looper start + if ((FeedbacksList[j].LooperStart == true) + && !SkippingToTheEnd + && loopAtLastLoopStart + && (FeedbacksList[j].Active)) + { + newi = j; + break; + } + + j += (Direction == Directions.TopToBottom) ? -1 : 1; + } + i = newi; + } + i += (Direction == Directions.TopToBottom) ? 1 : -1; + } + float unscaledTimeAtEnd = GetTime(); + while ((GetTime() - unscaledTimeAtEnd < _holdingMax) && !SkippingToTheEnd) + { + yield return null; + } + while (HasFeedbackStillPlaying() && !SkippingToTheEnd) + { + yield return null; + } + IsPlaying = false; + PlayerCompleteFeedbacks(); + Events.TriggerOnComplete(this); + ApplyAutoRevert(); + } + + protected virtual IEnumerator SkipToTheEndCo() + { + if (_startTime == GetTime()) + { + yield return null; + } + SkippingToTheEnd = true; + Events.TriggerOnSkipToTheEnd(this); + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if ((FeedbacksList[i] != null) && (FeedbacksList[i].Active)) + { + FeedbacksList[i].SkipToTheEnd(this.transform.position); + } + } + yield return null; + yield return null; + SkippingToTheEnd = false; + StopFeedbacks(); + } + + #endregion + + #region STOP + + /// + /// Stops all further feedbacks from playing, as well as stopping individual feedbacks + /// + public override void StopFeedbacks() + { + StopFeedbacks(true); + } + + /// + /// Stops all feedbacks from playing, with an option to also stop individual feedbacks + /// + public override void StopFeedbacks(bool stopAllFeedbacks = true) + { + StopFeedbacks(this.transform.position, 1.0f, stopAllFeedbacks); + } + + /// + /// Stops all feedbacks from playing, specifying a position and intensity that can be used by the Feedbacks + /// + /// + /// + public override void StopFeedbacks(Vector3 position, float feedbacksIntensity = 1.0f, bool stopAllFeedbacks = true) + { + if (stopAllFeedbacks) + { + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + FeedbacksList[i].Stop(position, feedbacksIntensity); + } + } + IsPlaying = false; + StopAllCoroutines(); + } + + #endregion + + #region CONTROLS + + /// + /// Calls each feedback's Reset method if they've defined one. An example of that can be resetting the initial color of a flickering renderer. It's usually called automatically before playing them. + /// + public override void ResetFeedbacks() + { + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if ((FeedbacksList[i] != null) && (FeedbacksList[i].Active)) + { + FeedbacksList[i].ResetFeedback(); + } + } + IsPlaying = false; + } + + /// + /// Changes the direction of this MMFeedbacks + /// + public override void Revert() + { + Events.TriggerOnRevert(this); + Direction = (Direction == Directions.BottomToTop) ? Directions.TopToBottom : Directions.BottomToTop; + } + + /// + /// Sets the direction of the player to the one specified in parameters + /// + public virtual void SetDirection(Directions newDirection) + { + Direction = newDirection; + } + + /// + /// Sets the direction to top to bottom + /// + public void SetDirectionTopToBottom() + { + Direction = Directions.TopToBottom; + } + + /// + /// Sets the direction to bottom to top + /// + public void SetDirectionBottomToTop() + { + Direction = Directions.BottomToTop; + } + + /// + /// When the player is done playing, we call PlayerComplete on all its feedbacks to let them know + /// the player is done + /// + public virtual void PlayerCompleteFeedbacks() + { + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if ((FeedbacksList[i] != null) && (FeedbacksList[i].Active)) + { + FeedbacksList[i].PlayerComplete(); + } + } + } + + /// + /// Pauses execution of a sequence, which can then be resumed by calling ResumeFeedbacks() + /// + public override void PauseFeedbacks() + { + Events.TriggerOnPause(this); + InScriptDrivenPause = true; + } + + /// + /// Pauses execution of a sequence, which can then be resumed by calling ResumeFeedbacks() + /// Note that this doesn't stop feedbacks, by design, but in most cases you'll probably want to call StopFeedbacks() first + /// + public virtual void RestoreInitialValues() + { + if (PlayCount <= 0) + { + return; + } + + int count = FeedbacksList.Count; + for (int i = count - 1; i >= 0; i--) + { + if ((FeedbacksList[i] != null) && (FeedbacksList[i].Active)) + { + FeedbacksList[i].RestoreInitialValues(); + } + } + + Events.TriggerOnRestoreInitialValues(this); + } + + /// + /// Forces initial vales on all feedbacks that support it. + /// For example, a position feedback that'd move a Transform from A to B would move that transform to A + /// + public virtual void ForceInitialValues() + { + int count = FeedbacksList.Count; + for (int i = count - 1; i >= 0; i--) + { + if ((FeedbacksList[i] != null) && (FeedbacksList[i].Active)) + { + FeedbacksList[i].ForceInitialValue(this.transform.position, FeedbacksIntensity); + } + } + } + + /// + /// Skips to the end of a sequence of feedbacks. Note that depending on your setup, this can take up to 3 frames to complete, don't disable your player instantly, or it won't complete the skipping + /// + public virtual void SkipToTheEnd() + { + StartCoroutine(SkipToTheEndCo()); + } + + /// + /// Resumes execution of a sequence if a script driven pause is in progress + /// + public override void ResumeFeedbacks() + { + Events.TriggerOnResume(this); + InScriptDrivenPause = false; + } + + #endregion + + #region MODIFICATION + + /// + /// Adds the specified MMF_Feedback to the player + /// + /// + public virtual void AddFeedback(MMF_Feedback newFeedback) + { + InitializeFeedbackList(); + newFeedback.Owner = this; + newFeedback.UniqueID = Guid.NewGuid().GetHashCode(); + FeedbacksList.Add(newFeedback); + newFeedback.OnAddFeedback(); + newFeedback.CacheRequiresSetup(); + newFeedback.InitializeCustomAttributes(); + } + + /// + /// Adds a feedback of the specified type to the player + /// + /// + /// + public new MMF_Feedback AddFeedback(System.Type feedbackType, bool add = true) + { + InitializeFeedbackList(); + MMF_Feedback newFeedback = (MMF_Feedback)Activator.CreateInstance(feedbackType); + newFeedback.Label = FeedbackPathAttribute.GetFeedbackDefaultName(feedbackType); + newFeedback.Owner = this; + newFeedback.Timing = new MMFeedbackTiming(); + newFeedback.UniqueID = Guid.NewGuid().GetHashCode(); + if (add) + { + FeedbacksList.Add(newFeedback); + } + newFeedback.OnAddFeedback(); + newFeedback.InitializeCustomAttributes(); + newFeedback.CacheRequiresSetup(); + return newFeedback; + } + + /// + /// Removes the feedback at the specified index + /// + /// + public override void RemoveFeedback(int id) + { + if (FeedbacksList.Count < id) + { + return; + } + FeedbacksList.RemoveAt(id); + } + + [Serializable] + /// a class used to copy feedback lists at runtime + private class MMF_FeedbackListCopy + { + [SerializeReference] + public List FeedbackList; + + /// + /// Returns a list of feedbacks copied from the list on the specified source MMF Player + /// + /// + /// + public static List CopyFrom(MMF_Player source) + { + MMF_FeedbackListCopy listCopy = new MMF_FeedbackListCopy(); + listCopy.FeedbackList = source.FeedbacksList; + string json = JsonUtility.ToJson(listCopy); + listCopy.FeedbackList = null; + JsonUtility.FromJsonOverwrite(json, listCopy); + return listCopy.FeedbackList; + } + } + + /// + /// Replaces the current feedback list and player settings with the ones on the target MMF Player + /// + /// + public virtual void CopyPlayerFrom(MMF_Player source) + { + JsonUtility.FromJsonOverwrite(JsonUtility.ToJson(source), this); + } + + /// + /// Replaces the current feedback list with the feedbacks on the target MMF Player + /// + /// + public virtual void CopyFeedbackListFrom(MMF_Player source) + { + FeedbacksList = MMF_FeedbackListCopy.CopyFrom(source); + } + + /// + /// Adds the feedbacks on the target MMF Player to the current feedback list + /// + /// + public virtual void AddFeedbackListFrom(MMF_Player source) + { + List tempList = new List(); + List tempList2 = new List(); + + tempList = MMF_FeedbackListCopy.CopyFrom(this); + tempList2 = MMF_FeedbackListCopy.CopyFrom(source); + + tempList.AddRange(tempList2); + + FeedbacksList = tempList; + } + + /// + /// Returns true if one or more of the feedbacks on this MMF Player have an option for automatic shaker setup, false otherwise + /// + public virtual bool HasAutomaticShakerSetup + { + get + { + if (FeedbacksList == null) + { + return false; + } + + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if (FeedbacksList[i] != null) + { + if (FeedbacksList[i].HasAutomaticShakerSetup) + { + return true; + } + } + } + return false; + } + } + + /// + /// Calls the AutomaticShakerSetup method on all feedbacks that have it + /// + public virtual void AutomaticShakerSetup() + { + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if (FeedbacksList[i] != null) + { + FeedbacksList[i].AutomaticShakerSetup(); + } + } + } + + #endregion MODIFICATION + + #region HELPERS + + /// + /// Returns true if feedbacks are still playing + /// + /// + public override bool HasFeedbackStillPlaying() + { + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if ((FeedbacksList[i].IsPlaying + && !FeedbacksList[i].Timing.ExcludeFromHoldingPauses) + || FeedbacksList[i].Timing.RepeatForever + || ((FeedbacksList[i].Timing.NumberOfRepeats > 0) && (FeedbacksList[i].PlaysLeft > 0))) + { + return true; + } + } + return false; + } + + /// + /// Checks whether or not this MMFeedbacks contains one or more looper feedbacks + /// + protected override void CheckForLoops() + { + ContainsLoop = false; + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if (FeedbacksList[i] != null) + { + if (FeedbacksList[i].LooperPause && FeedbacksList[i].Active) + { + ContainsLoop = true; + return; + } + } + } + } + + /// + /// Computes new random duration multipliers on all feedbacks if needed + /// + protected virtual void ComputeNewRandomDurationMultipliers() + { + if (RandomizeDuration) + { + _randomDurationMultiplier = Random.Range(RandomDurationMultiplier.x, RandomDurationMultiplier.y); + } + + int count = FeedbacksList.Count; + for (int i = 0; i < count; i++) + { + if ((FeedbacksList[i] != null) && (FeedbacksList[i].RandomizeDuration)) + { + FeedbacksList[i].ComputeNewRandomDurationMultiplier(); + } + } + } + + /// + /// Determines the intensity multiplier to apply + /// + /// + /// + public virtual float ComputeRangeIntensityMultiplier(Vector3 position) + { + if (!OnlyPlayIfWithinRange) + { + return 1f; + } + + if (RangeCenter == null) + { + return 0f; + } + + float distanceToCenter = Vector3.Distance(position, RangeCenter.position); + + if (distanceToCenter > RangeDistance) + { + return 0f; + } + + if (!UseRangeFalloff) + { + return 1f; + } + + float normalizedDistance = MMFeedbacksHelpers.Remap(distanceToCenter, 0f, RangeDistance, 0f, 1f); + float curveValue = RangeFalloff.Evaluate(normalizedDistance); + float newIntensity = MMFeedbacksHelpers.Remap(curveValue, 0f, 1f, RemapRangeFalloff.x, RemapRangeFalloff.y); + return newIntensity; + } + + /// + /// This will return true if the conditions defined in the specified feedback's Timing section allow it to play in the current play direction of this MMFeedbacks + /// + /// + /// + protected bool FeedbackCanPlay(MMF_Feedback feedback) + { + if (feedback.Timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.Always) + { + return true; + } + else if (((Direction == Directions.TopToBottom) && (feedback.Timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenForwards)) + || ((Direction == Directions.BottomToTop) && (feedback.Timing.MMFeedbacksDirectionCondition == MMFeedbackTiming.MMFeedbacksDirectionConditions.OnlyWhenBackwards))) + { + return true; + } + return false; + } + + /// + /// Readies the MMFeedbacks to revert direction on the next play + /// + protected override void ApplyAutoRevert() + { + if (AutoChangeDirectionOnEnd) + { + ShouldRevertOnNextPlay = true; + } + } + + /// + /// Applies this feedback's time multiplier to a duration (in seconds) + /// + /// + /// + public override float ApplyTimeMultiplier(float duration) + { + return duration * Mathf.Clamp(DurationMultiplier, _smallValue, float.MaxValue) * _randomDurationMultiplier / TimescaleMultiplier; + } + + /// + /// Lets you destroy objects from feedbacks + /// + /// + public virtual void ProxyDestroy(GameObject gameObjectToDestroy) + { + Destroy(gameObjectToDestroy); + } + + /// + /// Lets you destroy objects after a delay from feedbacks + /// + /// + /// + public virtual void ProxyDestroy(GameObject gameObjectToDestroy, float delay) + { + Destroy(gameObjectToDestroy, delay); + } + + /// + /// Lets you DestroyImmediate objects from feedbacks + /// + /// + public virtual void ProxyDestroyImmediate(GameObject gameObjectToDestroy) + { + DestroyImmediate(gameObjectToDestroy); + } + + #endregion + + #region ACCESS + + public enum AccessMethods { First, Previous, Closest, Next, Last } + + /// + /// Returns the first feedback found in this player's list based on the chosen method and type + /// First : first feedback of the matching type in the list, from top to bottom + /// Previous : first feedback of the matching type located before (so above) the feedback at the reference index + /// Closest : first feedback of the matching type located before or after the feedback at the reference index + /// Next : first feedback of the matching type located after (so below) the feedback at the reference index + /// First : last feedback of the matching type in the list, from top to bottom + /// + /// + /// + /// + /// + public virtual T GetFeedbackOfType(AccessMethods method, int referenceIndex) where T:MMF_Feedback + { + _t = typeof(T); + + referenceIndex = Mathf.Clamp(referenceIndex, 0, FeedbacksList.Count); + + switch (method) + { + case AccessMethods.First: + for (int i = 0; i < FeedbacksList.Count; i++) + { + if (Check(i)) { return (T)FeedbacksList[i]; } + } + break; + case AccessMethods.Previous: + for (int i = referenceIndex; i >= 0; i--) + { + if (Check(i)) { return (T)FeedbacksList[i]; } + } + break; + case AccessMethods.Closest: + int closestIndexBack = referenceIndex; + int closestIndexForward = referenceIndex; + for (int i = referenceIndex; i >= 0; i--) + { + if (Check(i)) + { + closestIndexBack = i; + break; + } + } + + for (int i = referenceIndex; i < FeedbacksList.Count; i++) + { + if (Check(i)) + { + closestIndexForward = i; + break; + } + } + + int foundIndex; + if ((closestIndexBack != referenceIndex) || (closestIndexForward != referenceIndex)) + { + if (closestIndexBack == referenceIndex) { foundIndex = closestIndexForward; } + else if (closestIndexForward == referenceIndex) { foundIndex = closestIndexBack; } + else + { + int distanceBack = Mathf.Abs(referenceIndex - closestIndexBack); + int distanceForward = Mathf.Abs(referenceIndex - closestIndexForward); + foundIndex = (distanceBack > distanceForward) ? closestIndexForward : closestIndexBack; + } + return (T)FeedbacksList[foundIndex]; + } + else + { + return null; + } + case AccessMethods.Next: + for (int i = referenceIndex; i < FeedbacksList.Count; i++) + { + if (Check(i)) { return (T)FeedbacksList[i]; } + } + break; + case AccessMethods.Last: + for (int i = FeedbacksList.Count - 1; i >= 0; i--) + { + if (Check(i)) { return (T)FeedbacksList[i]; } + } + break; + } + return null; + + bool Check(int i) + { + return (FeedbacksList[i].GetType() == _t); + } + } + + /// + /// Returns the first feedback of the searched type on this MMF_Player + /// + /// + /// + public virtual T GetFeedbackOfType() where T:MMF_Feedback + { + _t = typeof(T); + foreach (MMF_Feedback feedback in FeedbacksList) + { + if (feedback.GetType() == _t) + { + return (T)feedback; + } + } + return null; + } + + /// + /// Returns a list of all the feedbacks of the searched type on this MMF_Player + /// + /// + /// + public virtual List GetFeedbacksOfType() where T:MMF_Feedback + { + _t = typeof(T); + List list = new List(); + foreach (MMF_Feedback feedback in FeedbacksList) + { + if (feedback.GetType() == _t) + { + list.Add((T)feedback); + } + } + return list; + } + + /// + /// Returns the first feedback of the searched type on this MMF_Player + /// + /// + /// + public virtual T GetFeedbackOfType(string searchedLabel) where T:MMF_Feedback + { + _t = typeof(T); + foreach (MMF_Feedback feedback in FeedbacksList) + { + if ((feedback.GetType() == _t) && (feedback.Label == searchedLabel)) + { + return (T)feedback; + } + } + return null; + } + + /// + /// Returns a list of all the feedbacks of the searched type on this MMF_Player + /// + /// + /// + public virtual List GetFeedbacksOfType(string searchedLabel) where T:MMF_Feedback + { + _t = typeof(T); + List list = new List(); + foreach (MMF_Feedback feedback in FeedbacksList) + { + if ((feedback.GetType() == _t) && (feedback.Label == searchedLabel)) + { + list.Add((T)feedback); + } + } + return list; + } + + #endregion + + #region EVENTS + + /// + /// When we get a MMSetFeedbackRangeCenterEvent, we set our new range center + /// + /// + protected virtual void OnMMSetFeedbackRangeCenterEvent(Transform newTransform) + { + if (IgnoreRangeEvents) + { + return; + } + RangeCenter = newTransform; + } + + /// + /// On Disable we stop all feedbacks + /// + protected override void OnDisable() + { + if (OnlyPlayIfWithinRange) + { + MMSetFeedbackRangeCenterEvent.Unregister(OnMMSetFeedbackRangeCenterEvent); + } + + if (IsPlaying) + { + if (StopFeedbacksOnDisable) + { + StopFeedbacks(); + } + StopAllCoroutines(); + for (int i = FeedbacksList.Count - 1; i >= 0; i--) + { + FeedbacksList[i].OnDisable(); + } + } + } + + /// + /// On validate, we make sure our DurationMultiplier remains positive + /// + protected override void OnValidate() + { + RefreshCache(); + + if ((FeedbacksList != null) && (FeedbacksList.Count > 0)) + { + for (int i = FeedbacksList.Count - 1; i >= 0; i--) + { + FeedbacksList[i].OnValidate(); + } + } + } + + /// + /// Refreshes cached feedbacks + /// + public virtual void RefreshCache() + { + if (FeedbacksList == null) + { + return; + } + + DurationMultiplier = Mathf.Clamp(DurationMultiplier, _smallValue, Single.MaxValue); + + for (int i = FeedbacksList.Count - 1; i >= 0; i--) + { + if (FeedbacksList[i] == null) + { + FeedbacksList.RemoveAt(i); + } + else + { + FeedbacksList[i].Owner = this; + FeedbacksList[i].CacheRequiresSetup(); + } + } + + ComputeCachedTotalDuration(); + } + + /// + /// Computes the total duration of the player's sequence of feedbacks + /// + public virtual void ComputeCachedTotalDuration() + { + float total = 0f; + if (FeedbacksList == null) + { + _cachedTotalDuration = ComputedInitialDelay; + return; + } + + CheckForPauses(); + + if (!_pauseFound) + { + foreach (MMF_Feedback feedback in FeedbacksList) + { + feedback.ComputeTotalDuration(); + if ((feedback != null) && (feedback.Active) && feedback.ShouldPlayInThisSequenceDirection) + { + if (total < feedback.TotalDuration) + { + total = feedback.TotalDuration; + } + } + } + } + else + { + int lastLooperStart = 0; + int lastLoopFoundAt = 0; + int lastPauseFoundAt = 0; + int loopsLeft = 0; + int iterations = 0; + int maxIterationsSafety = 1000; + float currentPauseDelay = 0f; + int i = (Direction == Directions.TopToBottom) ? 0 : Feedbacks.Count-1; + float intermediateTotal = 0f; + while ((i >= 0) && (i < FeedbacksList.Count) && (iterations < maxIterationsSafety)) + { + iterations++; + + if ((FeedbacksList[i] != null) && FeedbacksList[i].Active && FeedbacksList[i].ShouldPlayInThisSequenceDirection) + { + FeedbacksList[i].ComputeTotalDuration(); + if (FeedbacksList[i].Pause != null) + { + if (FeedbacksList[i].Timing != null && !FeedbacksList[i].Timing.ContributeToTotalDuration) + { + continue; + } + + // pause + if (FeedbacksList[i].HoldingPause) + { + intermediateTotal += ApplyTimeMultiplier((FeedbacksList[i] as MMF_Pause).PauseDuration); + total += intermediateTotal; + intermediateTotal = 0f; + } + else + { + currentPauseDelay += ApplyTimeMultiplier((FeedbacksList[i] as MMF_Pause).PauseDuration); + } + + //loops + if (FeedbacksList[i].LooperStart) + { + lastLooperStart = i; + } + + if (!FeedbacksList[i].LooperPause) + { + lastPauseFoundAt = i; + } + + if (FeedbacksList[i].LooperPause && ((FeedbacksList[i] as MMF_Looper).NumberOfLoops > 0)) + { + if (i == lastLoopFoundAt) + { + loopsLeft--; + if (loopsLeft <= 0) + { + i += (Direction == Directions.TopToBottom) ? 1 : -1; + continue; + } + } + else + { + lastLoopFoundAt = i; + loopsLeft = (FeedbacksList[i] as MMF_Looper).NumberOfLoops - 1; + } + + if ((FeedbacksList[i] as MMF_Looper).InfiniteLoop) + { + _cachedTotalDuration = 999f; + return; + } + + if ((FeedbacksList[i] as MMF_Looper).LoopAtLastPause) + { + i = lastPauseFoundAt; + total += intermediateTotal; + intermediateTotal = 0f; + currentPauseDelay = 0f; + continue; + } + else if ((FeedbacksList[i] as MMF_Looper).LoopAtLastLoopStart) + { + i = lastLooperStart; + total += intermediateTotal; + intermediateTotal = 0f; + currentPauseDelay = 0f; + continue; + } + else + { + i = 0; + total += intermediateTotal; + intermediateTotal = 0f; + currentPauseDelay = 0f; + continue; + } + } + } + else + { + float feedbackDuration = FeedbacksList[i].TotalDuration + currentPauseDelay; + if (intermediateTotal < feedbackDuration) + { + intermediateTotal = feedbackDuration; + } + } + } + + i += (Direction == Directions.TopToBottom) ? 1 : -1; + } + total += intermediateTotal; + } + _cachedTotalDuration = ComputedInitialDelay + total; + _cachedTotalDuration /= TimescaleMultiplier; + } + + /// + /// On Destroy, removes all feedbacks from this MMFeedbacks to avoid any leftovers + /// + protected override void OnDestroy() + { + IsPlaying = false; + + foreach (MMF_Feedback feedback in FeedbacksList) + { + feedback.OnDestroy(); + } + } + + /// + /// Draws gizmos, when the MMF_Player is selected, for all feedbacks that implement the method of the same name + /// + protected void OnDrawGizmosSelected() + { + if (FeedbacksList == null) + { + return; + } + + for (int i = FeedbacksList.Count - 1; i >= 0; i--) + { + FeedbacksList[i].OnDrawGizmosSelectedHandler(); + } + } + + #endregion EVENTS + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Player.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Player.cs.meta new file mode 100644 index 0000000..81a6355 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_Player.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6da43522623d4704e979466dc7650b65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerDebugInput.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerDebugInput.cs new file mode 100644 index 0000000..70d0416 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerDebugInput.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Feedbacks; +using UnityEngine; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this debug component to a MMF Player, and you'll be able to play it at runtime at the press of a (customisable) key, useful when tweaking or debugging your feedbacks + /// + public class MMF_PlayerDebugInput : MonoBehaviour + { + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + /// the button used to cause a debug play of this feedback + public Key PlayKey = Key.P; + #else + /// the button used to cause a debug play of this feedback + public KeyCode PlayButton = KeyCode.P; + #endif + + protected MMF_Player _player; + + /// + /// On Awake we store our MMF Player + /// + protected virtual void Awake() + { + _player = this.gameObject.GetComponent(); + } + + /// + /// On Update, we play our feedback if the right button is pressed + /// + protected virtual void Update() + { + bool keyPressed = false; + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + keyPressed = Keyboard.current[PlayKey].wasPressedThisFrame; + #else + keyPressed = Input.GetKeyDown(PlayButton); + #endif + + if (keyPressed) + { + _player.PlayFeedbacks(); + } + } + } +} + diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerDebugInput.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerDebugInput.cs.meta new file mode 100644 index 0000000..4220deb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerDebugInput.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4474026fd06a48748b3ac7eef71e802d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerEnabler.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerEnabler.cs new file mode 100644 index 0000000..495c158 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerEnabler.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// A helper class added automatically by MMFeedbacks if they're in AutoPlayOnEnable mode + /// This lets them play again should their parent game object be disabled/enabled + /// + [AddComponentMenu("")] + public class MMF_PlayerEnabler : MonoBehaviour + { + /// the MMFeedbacks to pilot + public virtual MMF_Player TargetMmfPlayer { get; set; } + + /// + /// On enable, we re-enable (and thus play) our MMFeedbacks if needed + /// + protected virtual void OnEnable() + { + if ((TargetMmfPlayer != null) && !TargetMmfPlayer.enabled && TargetMmfPlayer.AutoPlayOnEnable) + { + TargetMmfPlayer.enabled = true; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerEnabler.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerEnabler.cs.meta new file mode 100644 index 0000000..7df7f2a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMF_Player/MMF_PlayerEnabler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 109f4af2c917dc74aa07733bafe2f548 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTargetAcquisition.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTargetAcquisition.cs new file mode 100644 index 0000000..2047c87 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTargetAcquisition.cs @@ -0,0 +1,123 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// A class collecting target acquisition settings + /// + [System.Serializable] + public class MMFeedbackTargetAcquisition + { + public enum Modes { None, Self, AnyChild, ChildAtIndex, Parent, FirstReferenceHolder, PreviousReferenceHolder, ClosestReferenceHolder, NextReferenceHolder, LastReferenceHolder } + + /// the selected mode for target acquisition + /// None : nothing will happen + /// Self : the target will be picked on the MMF Player's game object + /// AnyChild : the target will be picked on any of the MMF Player's child objects + /// ChildAtIndex : the target will be picked on the child at index X of the MMF Player + /// Parent : the target will be picked on the first parent where a matching target is found + /// Various reference holders : the target will be picked on the specified reference holder in the list (either the first one, previous : first one found before this feedback in the list, closest in any direction from this feedback, the next one found, or the last one in the list) + [Tooltip("the selected mode for target acquisition\n"+ + "None : nothing will happen\n"+ + "Self : the target will be picked on the MMF Player's game object\n"+ + "AnyChild : the target will be picked on any of the MMF Player's child objects\n"+ + "ChildAtIndex : the target will be picked on the child at index X of the MMF Player\n"+ + "Parent : the target will be picked on the first parent where a matching target is found\n"+ + "Various reference holders : the target will be picked on the specified reference holder in the list " + + "(either the first one, previous : first one found before this feedback in the list, closest in any direction from this feedback, the next one found, or the last one in the list)")] + public Modes Mode = Modes.None; + + [MMFEnumCondition("Mode", (int)Modes.ChildAtIndex)] + public int ChildIndex = 0; + + private static MMF_ReferenceHolder _referenceHolder; + + public static MMF_ReferenceHolder GetReferenceHolder(MMFeedbackTargetAcquisition settings, MMF_Player owner, int currentFeedbackIndex) + { + switch (settings.Mode) + { + case Modes.FirstReferenceHolder: + return owner.GetFeedbackOfType(MMF_Player.AccessMethods.First, currentFeedbackIndex); + case Modes.PreviousReferenceHolder: + return owner.GetFeedbackOfType(MMF_Player.AccessMethods.Previous, currentFeedbackIndex); + case Modes.ClosestReferenceHolder: + return owner.GetFeedbackOfType(MMF_Player.AccessMethods.Closest, currentFeedbackIndex); + case Modes.NextReferenceHolder: + return owner.GetFeedbackOfType(MMF_Player.AccessMethods.Next, currentFeedbackIndex); + case Modes.LastReferenceHolder: + return owner.GetFeedbackOfType(MMF_Player.AccessMethods.Last, currentFeedbackIndex); + } + return null; + } + + public static GameObject FindAutomatedTargetGameObject(MMFeedbackTargetAcquisition settings, MMF_Player owner, int currentFeedbackIndex) + { + if (owner.FeedbacksList[currentFeedbackIndex].ForcedReferenceHolder != null) + { + return owner.FeedbacksList[currentFeedbackIndex].ForcedReferenceHolder.GameObjectReference; + } + + _referenceHolder = GetReferenceHolder(settings, owner, currentFeedbackIndex); + switch (settings.Mode) + { + case Modes.Self: + return owner.gameObject; + case Modes.ChildAtIndex: + return owner.transform.GetChild(settings.ChildIndex).gameObject; + case Modes.AnyChild: + return owner.transform.GetChild(0).gameObject; + case Modes.Parent: + return owner.transform.parent.gameObject; + case Modes.FirstReferenceHolder: + case Modes.PreviousReferenceHolder: + case Modes.ClosestReferenceHolder: + case Modes.NextReferenceHolder: + case Modes.LastReferenceHolder: + return _referenceHolder?.GameObjectReference; + } + return null; + } + + public static T FindAutomatedTarget(MMFeedbackTargetAcquisition settings, MMF_Player owner, int currentFeedbackIndex) + { + if (owner.FeedbacksList[currentFeedbackIndex].ForcedReferenceHolder != null) + { + return owner.FeedbacksList[currentFeedbackIndex].ForcedReferenceHolder.GameObjectReference.GetComponent(); + } + _referenceHolder = GetReferenceHolder(settings, owner, currentFeedbackIndex); + switch (settings.Mode) + { + case Modes.Self: + return owner.GetComponent(); + case Modes.ChildAtIndex: + return owner.transform.GetChild(settings.ChildIndex).gameObject.GetComponent(); + case Modes.AnyChild: + for (int i = 0; i < owner.transform.childCount; i++) + { + if (owner.transform.GetChild(i).GetComponent() != null) + { + return owner.transform.GetChild(i).GetComponent(); + } + } + return owner.GetComponentInChildren(); + case Modes.Parent: + return owner.transform.parent.GetComponentInParent(); + case Modes.FirstReferenceHolder: + case Modes.PreviousReferenceHolder: + case Modes.ClosestReferenceHolder: + case Modes.NextReferenceHolder: + case Modes.LastReferenceHolder: + return (_referenceHolder != null) + ? _referenceHolder.GameObjectReference.GetComponent() + : default(T); + } + return default(T); + } + + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTargetAcquisition.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTargetAcquisition.cs.meta new file mode 100644 index 0000000..14b50e3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTargetAcquisition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a40118e4d239fe146bb900366085611f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTiming.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTiming.cs new file mode 100644 index 0000000..879c0ac --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTiming.cs @@ -0,0 +1,137 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// the possible modes for the timescale + public enum TimescaleModes { Scaled, Unscaled } + + /// + /// A class collecting delay, cooldown and repeat values, to be used to define the behaviour of each MMFeedback + /// + [System.Serializable] + public class MMFeedbackTiming + { + /// the possible ways this feedback can play based on the host MMFeedbacks' directions + public enum MMFeedbacksDirectionConditions { Always, OnlyWhenForwards, OnlyWhenBackwards }; + /// the possible ways this feedback can play + public enum PlayDirections { FollowMMFeedbacksDirection, OppositeMMFeedbacksDirection, AlwaysNormal, AlwaysRewind } + + [Header("Timescale")] + /// whether we're working on scaled or unscaled time + [Tooltip("whether we're working on scaled or unscaled time")] + public TimescaleModes TimescaleMode = TimescaleModes.Scaled; + + [Header("Exceptions")] + /// if this is true, holding pauses won't wait for this feedback to finish + [Tooltip("if this is true, holding pauses won't wait for this feedback to finish")] + public bool ExcludeFromHoldingPauses = false; + /// whether to count this feedback in the parent MMFeedbacks(Player) total duration or not + [Tooltip("whether to count this feedback in the parent MMFeedbacks(Player) total duration or not")] + public bool ContributeToTotalDuration = true; + + [Header("Delays")] + /// the initial delay to apply before playing the delay (in seconds) + [Tooltip("the initial delay to apply before playing the delay (in seconds)")] + public float InitialDelay = 0f; + /// the cooldown duration mandatory between two plays + [Tooltip("the cooldown duration mandatory between two plays")] + public float CooldownDuration = 0f; + + [Header("Stop")] + /// if this is true, this feedback will interrupt itself when Stop is called on its parent MMFeedbacks, otherwise it'll keep running + [Tooltip("if this is true, this feedback will interrupt itself when Stop is called on its parent MMFeedbacks, otherwise it'll keep running")] + public bool InterruptsOnStop = true; + + [Header("Repeat")] + /// the repeat mode, whether the feedback should be played once, multiple times, or forever + [Tooltip("the repeat mode, whether the feedback should be played once, multiple times, or forever")] + public int NumberOfRepeats = 0; + /// if this is true, the feedback will be repeated forever + [Tooltip("if this is true, the feedback will be repeated forever")] + public bool RepeatForever = false; + /// the delay (in seconds) between two firings of this feedback. This doesn't include the duration of the feedback. + [Tooltip("the delay (in seconds) between two firings of this feedback. This doesn't include the duration of the feedback.")] + public float DelayBetweenRepeats = 1f; + + [Header("PlayCount")] + /// the number of times this feedback's been played since its initialization (or last reset if SetPlayCountToZeroOnReset is true) + [Tooltip("the number of times this feedback's been played since its initialization (or last reset if SetPlayCountToZeroOnReset is true)")] + [MMFReadOnly] + public int PlayCount = 0; + /// whether or not to limit the amount of times this feedback can be played. beyond that amount, it won't play anymore + [Tooltip("whether or not to limit the amount of times this feedback can be played. beyond that amount, it won't play anymore")] + public bool LimitPlayCount = false; + /// if LimitPlayCount is true, the maximum amount of times this feedback can be played + [Tooltip("if LimitPlayCount is true, the maximum amount of times this feedback can be played")] + [MMFCondition("LimitPlayCount", true)] + public int MaxPlayCount = 3; + /// if LimitPlayCount is true, whether or not to reset the play count to zero when the feedback is reset + [Tooltip("if LimitPlayCount is true, whether or not to reset the play count to zero when the feedback is reset")] + [MMFCondition("LimitPlayCount", true)] + public bool SetPlayCountToZeroOnReset = false; + + [Header("Play Direction")] + /// this defines how this feedback should play when the host MMFeedbacks is played : + /// - always (default) : this feedback will always play + /// - OnlyWhenForwards : this feedback will only play if the host MMFeedbacks is played in the top to bottom direction (forwards) + /// - OnlyWhenBackwards : this feedback will only play if the host MMFeedbacks is played in the bottom to top direction (backwards) + [Tooltip("this defines how this feedback should play when the host MMFeedbacks is played :" + + "- always (default) : this feedback will always play" + + "- OnlyWhenForwards : this feedback will only play if the host MMFeedbacks is played in the top to bottom direction (forwards)" + + "- OnlyWhenBackwards : this feedback will only play if the host MMFeedbacks is played in the bottom to top direction (backwards)")] + public MMFeedbacksDirectionConditions MMFeedbacksDirectionCondition = MMFeedbacksDirectionConditions.Always; + /// this defines the way this feedback will play. It can play in its normal direction, or in rewind (a sound will play backwards, + /// an object normally scaling up will scale down, a curve will be evaluated from right to left, etc) + /// - BasedOnMMFeedbacksDirection : will play normally when the host MMFeedbacks is played forwards, in rewind when it's played backwards + /// - OppositeMMFeedbacksDirection : will play in rewind when the host MMFeedbacks is played forwards, and normally when played backwards + /// - Always Normal : will always play normally, regardless of the direction of the host MMFeedbacks + /// - Always Rewind : will always play in rewind, regardless of the direction of the host MMFeedbacks + [Tooltip("this defines the way this feedback will play. It can play in its normal direction, or in rewind (a sound will play backwards," + + " an object normally scaling up will scale down, a curve will be evaluated from right to left, etc)" + + "- BasedOnMMFeedbacksDirection : will play normally when the host MMFeedbacks is played forwards, in rewind when it's played backwards" + + "- OppositeMMFeedbacksDirection : will play in rewind when the host MMFeedbacks is played forwards, and normally when played backwards" + + "- Always Normal : will always play normally, regardless of the direction of the host MMFeedbacks" + + "- Always Rewind : will always play in rewind, regardless of the direction of the host MMFeedbacks")] + public PlayDirections PlayDirection = PlayDirections.FollowMMFeedbacksDirection; + + [Header("Intensity")] + /// if this is true, intensity will be constant, even if the parent MMFeedbacks is played at a lower intensity + [Tooltip("if this is true, intensity will be constant, even if the parent MMFeedbacks is played at a lower intensity")] + public bool ConstantIntensity = false; + /// if this is true, this feedback will only play if its intensity is higher or equal to IntensityIntervalMin and lower than IntensityIntervalMax + [Tooltip("if this is true, this feedback will only play if its intensity is higher or equal to IntensityIntervalMin and lower than IntensityIntervalMax")] + public bool UseIntensityInterval = false; + /// the minimum intensity required for this feedback to play + [Tooltip("the minimum intensity required for this feedback to play")] + [MMFCondition("UseIntensityInterval", true)] + public float IntensityIntervalMin = 0f; + /// the maximum intensity required for this feedback to play + [Tooltip("the maximum intensity required for this feedback to play")] + [MMFCondition("UseIntensityInterval", true)] + public float IntensityIntervalMax = 0f; + + [Header("Sequence")] + /// A MMSequence to use to play these feedbacks on + [Tooltip("A MMSequence to use to play these feedbacks on")] + public MMSequence Sequence; + /// The MMSequence's TrackID to consider + [Tooltip("The MMSequence's TrackID to consider")] + public int TrackID = 0; + /// whether or not to use the quantized version of the target sequence + [Tooltip("whether or not to use the quantized version of the target sequence")] + public bool Quantized = false; + /// if using the quantized version of the target sequence, the BPM to apply to the sequence when playing it + [Tooltip("if using the quantized version of the target sequence, the BPM to apply to the sequence when playing it")] + [MMFCondition("Quantized", true)] + public int TargetBPM = 120; + + /// from any class, you can set UseScriptDrivenTimescale:true, from there, instead of looking at Time.time, Time.deltaTime (or their unscaled equivalents), this feedback will compute time based on the values you feed them via ScriptDrivenDeltaTime and ScriptDrivenTime + public virtual bool UseScriptDrivenTimescale { get; set; } + /// the value this feedback should use for delta time + public virtual float ScriptDrivenDeltaTime { get; set; } + /// the value this feedback should use for time + public virtual float ScriptDrivenTime { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTiming.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTiming.cs.meta new file mode 100644 index 0000000..bc895e8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbackTiming.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 293c62544284dea419e338a8524a7fb4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksCoroutine.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksCoroutine.cs new file mode 100644 index 0000000..be1116d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksCoroutine.cs @@ -0,0 +1,55 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Coroutine helpers + /// + public static class MMFeedbacksCoroutine + { + /// + /// Waits for the specified amount of frames + /// use : yield return MMCoroutine.WaitFor(1); + /// + /// + /// + public static IEnumerator WaitForFrames(int frameCount) + { + while (frameCount > 0) + { + frameCount--; + yield return null; + } + } + + /// + /// Waits for the specified amount of seconds (using regular time) + /// use : yield return MMCoroutine.WaitFor(1f); + /// + /// + /// + public static IEnumerator WaitFor(float seconds) + { + for (float timer = 0f; timer < seconds; timer += Time.deltaTime) + { + yield return null; + } + } + + /// + /// Waits for the specified amount of seconds (using unscaled time) + /// use : yield return MMCoroutine.WaitForUnscaled(1f); + /// + /// + /// + public static IEnumerator WaitForUnscaled(float seconds) + { + for (float timer = 0f; timer < seconds; timer += Time.unscaledDeltaTime) + { + yield return null; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksCoroutine.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksCoroutine.cs.meta new file mode 100644 index 0000000..b2eeff4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksCoroutine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fff95d1eb5038764b9fdf57b6818aa6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksEvents.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksEvents.cs new file mode 100644 index 0000000..5605f66 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksEvents.cs @@ -0,0 +1,306 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Feedbacks +{ + /// + /// Events triggered by a MMFeedbacks when playing a series of feedbacks + /// - play : when a MMFeedbacks starts playing + /// - pause : when a holding pause is met + /// - resume : after a holding pause resumes + /// - revert : when a MMFeedbacks reverts its play direction + /// - complete : when a MMFeedbacks has played its last feedback + /// + /// to listen to these events : + /// + /// public virtual void OnMMFeedbacksEvent(MMFeedbacks source, EventTypes type) + /// { + /// // do something + /// } + /// + /// protected virtual void OnEnable() + /// { + /// MMFeedbacksEvent.Register(OnMMFeedbacksEvent); + /// } + /// + /// protected virtual void OnDisable() + /// { + /// MMFeedbacksEvent.Unregister(OnMMFeedbacksEvent); + /// } + /// + /// + public struct MMFeedbacksEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public enum EventTypes { Play, Pause, Resume, Revert, Complete, SkipToTheEnd, RestoreInitialValues, Loop, Enable, Disable, InitializationComplete } + public delegate void Delegate(MMFeedbacks source, EventTypes type); + static public void Trigger(MMFeedbacks source, EventTypes type) + { + OnEvent?.Invoke(source, type); + } + } + + /// + /// An event used to set the RangeCenter on all feedbacks that listen for it + /// + public struct MMSetFeedbackRangeCenterEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(Transform newCenter); + + static public void Trigger(Transform newCenter) + { + OnEvent?.Invoke(newCenter); + } + } + + /// + /// A subclass of MMFeedbacks, contains UnityEvents that can be played, + /// + [Serializable] + public class MMFeedbacksEvents + { + /// whether or not this MMFeedbacks should fire MMFeedbacksEvents + [Tooltip("whether or not this MMFeedbacks should fire MMFeedbacksEvents")] + public bool TriggerMMFeedbacksEvents = false; + /// whether or not this MMFeedbacks should fire Unity Events + [Tooltip("whether or not this MMFeedbacks should fire Unity Events")] + public bool TriggerUnityEvents = true; + /// This event will fire every time this MMFeedbacks gets played + [Tooltip("This event will fire every time this MMFeedbacks gets played")] + public UnityEvent OnPlay; + /// This event will fire every time this MMFeedbacks starts a holding pause + [Tooltip("This event will fire every time this MMFeedbacks starts a holding pause")] + public UnityEvent OnPause; + /// This event will fire every time this MMFeedbacks resumes after a holding pause + [Tooltip("This event will fire every time this MMFeedbacks resumes after a holding pause")] + public UnityEvent OnResume; + /// This event will fire every time this MMFeedbacks reverts its play direction + [Tooltip("This event will fire every time this MMFeedbacks reverts its play direction")] + public UnityEvent OnRevert; + /// This event will fire every time this MMFeedbacks plays its last MMFeedback + [Tooltip("This event will fire every time this MMFeedbacks plays its last MMFeedback")] + public UnityEvent OnComplete; + /// This event will fire every time this MMFeedbacks gets restored to its initial values + [Tooltip("This event will fire every time this MMFeedbacks gets restored to its initial values")] + public UnityEvent OnRestoreInitialValues; + /// This event will fire every time this MMFeedbacks gets skipped to the end + [Tooltip("This event will fire every time this MMFeedbacks gets skipped to the end")] + public UnityEvent OnSkipToTheEnd; + /// This event will fire after the MMF Player is done initializing + [Tooltip("This event will fire after the MMF Player is done initializing")] + public UnityEvent OnInitializationComplete; + /// This event will fire every time this MMFeedbacks' game object gets enabled + [Tooltip("This event will fire every time this MMFeedbacks' game object gets enabled")] + public UnityEvent OnEnable; + /// This event will fire every time this MMFeedbacks' game object gets disabled + [Tooltip("This event will fire every time this MMFeedbacks' game object gets disabled")] + public UnityEvent OnDisable; + + public virtual bool OnPlayIsNull { get; protected set; } + public virtual bool OnPauseIsNull { get; protected set; } + public virtual bool OnResumeIsNull { get; protected set; } + public virtual bool OnRevertIsNull { get; protected set; } + public virtual bool OnCompleteIsNull { get; protected set; } + public virtual bool OnRestoreInitialValuesIsNull { get; protected set; } + public virtual bool OnSkipToTheEndIsNull { get; protected set; } + public virtual bool OnInitializationCompleteIsNull { get; protected set; } + public virtual bool OnEnableIsNull { get; protected set; } + public virtual bool OnDisableIsNull { get; protected set; } + + /// + /// On init we store for each event whether or not we have one to invoke + /// + public virtual void Initialization() + { + OnPlayIsNull = OnPlay == null; + OnPauseIsNull = OnPause == null; + OnResumeIsNull = OnResume == null; + OnRevertIsNull = OnRevert == null; + OnCompleteIsNull = OnComplete == null; + OnRestoreInitialValuesIsNull = OnRestoreInitialValues == null; + OnSkipToTheEndIsNull = OnSkipToTheEnd == null; + OnInitializationCompleteIsNull = OnInitializationComplete == null; + OnEnableIsNull = OnEnable == null; + OnDisableIsNull = OnDisable == null; + } + + /// + /// Fires Play events if needed + /// + /// + public virtual void TriggerOnPlay(MMFeedbacks source) + { + if (!OnPlayIsNull && TriggerUnityEvents) + { + OnPlay.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.Play); + } + } + + /// + /// Fires pause events if needed + /// + /// + public virtual void TriggerOnPause(MMFeedbacks source) + { + if (!OnPauseIsNull && TriggerUnityEvents) + { + OnPause.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.Pause); + } + } + + /// + /// Fires resume events if needed + /// + /// + public virtual void TriggerOnResume(MMFeedbacks source) + { + if (!OnResumeIsNull && TriggerUnityEvents) + { + OnResume.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.Resume); + } + } + + /// + /// Fires revert events if needed + /// + /// + public virtual void TriggerOnRevert(MMFeedbacks source) + { + if (!OnRevertIsNull && TriggerUnityEvents) + { + OnRevert.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.Revert); + } + } + + /// + /// Fires complete events if needed + /// + /// + public virtual void TriggerOnComplete(MMFeedbacks source) + { + if (!OnCompleteIsNull && TriggerUnityEvents) + { + OnComplete.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.Complete); + } + } + + /// + /// Fires skip events if needed + /// + /// + public virtual void TriggerOnSkipToTheEnd(MMFeedbacks source) + { + if (!OnSkipToTheEndIsNull && TriggerUnityEvents) + { + OnSkipToTheEnd.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.SkipToTheEnd); + } + } + + public virtual void TriggerOnInitializationComplete(MMFeedbacks source) + { + if (!OnInitializationCompleteIsNull && TriggerUnityEvents) + { + OnInitializationComplete.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.InitializationComplete); + } + } + + /// + /// Fires revert events if needed + /// + /// + public virtual void TriggerOnRestoreInitialValues(MMFeedbacks source) + { + if (!OnRestoreInitialValuesIsNull && TriggerUnityEvents) + { + OnRestoreInitialValues.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.RestoreInitialValues); + } + } + + /// + /// Fires enable events if needed + /// + /// + public virtual void TriggerOnEnable(MMF_Player source) + { + if (!OnEnableIsNull && TriggerUnityEvents) + { + OnEnable.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.Enable); + } + } + + /// + /// Fires disable events if needed + /// + /// + public virtual void TriggerOnDisable(MMF_Player source) + { + if (!OnDisableIsNull && TriggerUnityEvents) + { + OnDisable.Invoke(); + } + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.Disable); + } + } + } + +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksEvents.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksEvents.cs.meta new file mode 100644 index 0000000..4f0c3d9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 716ed1aa8290ba04ba69b411a3d8554a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksHelpers.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksHelpers.cs new file mode 100644 index 0000000..c38762a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksHelpers.cs @@ -0,0 +1,568 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; +using System.Linq; +using System.Reflection; +using MoreMountains.Tools; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("")] + public class MMFeedbacksHelpers : MonoBehaviour + { + /// + /// Remaps a value x in interval [A,B], to the proportional value in interval [C,D] + /// + /// The value to remap. + /// the minimum bound of interval [A,B] that contains the x value + /// the maximum bound of interval [A,B] that contains the x value + /// the minimum bound of target interval [C,D] + /// the maximum bound of target interval [C,D] + public static float Remap(float x, float A, float B, float C, float D) + { + float remappedValue = C + (x - A) / (B - A) * (D - C); + return remappedValue; + } + + /// + /// A helper used to migrate values from an AnimationCurve field to a MMTweenType, useful when updating + /// old feedbacks to use them without losing legacy values + /// + /// + /// + /// + public static void MigrateCurve(AnimationCurve oldCurve, MMTweenType newTweenType, MMF_Player owner) + { + if ((oldCurve.keys.Length > 0) && (!newTweenType.Initialized)) + { + newTweenType.Curve = oldCurve; + newTweenType.MMTweenDefinitionType = MMTweenDefinitionTypes.AnimationCurve; + oldCurve = null; + newTweenType.Initialized = true; + #if UNITY_EDITOR + UnityEditor.Undo.RecordObject(owner, "Ports animation curve to tween system"); + #endif + } + } + } + + public class MMFReadOnlyAttribute : PropertyAttribute { } + + [System.AttributeUsage(System.AttributeTargets.Field)] + public class MMFInspectorButtonAttribute : PropertyAttribute + { + public readonly string MethodName; + + public MMFInspectorButtonAttribute(string MethodName) + { + this.MethodName = MethodName; + } + } + + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct, Inherited = true)] + public class MMFEnumConditionAttribute : PropertyAttribute + { + public string ConditionEnum = ""; + public bool Hidden = false; + + BitArray bitArray = new BitArray(32); + public bool ContainsBitFlag(int enumValue) + { + return bitArray.Get(enumValue); + } + + public MMFEnumConditionAttribute(string conditionBoolean, params int[] enumValues) + { + this.ConditionEnum = conditionBoolean; + this.Hidden = true; + + for (int i = 0; i < enumValues.Length; i++) + { + bitArray.Set(enumValues[i], true); + } + } + } + + #if UNITY_EDITOR + [CustomPropertyDrawer(typeof(MMFInspectorButtonAttribute))] + public class MMFInspectorButtonPropertyDrawer : PropertyDrawer + { + private MethodInfo _eventMethodInfo = null; + + public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) + { + MMFInspectorButtonAttribute inspectorButtonAttribute = (MMFInspectorButtonAttribute)attribute; + + float buttonLength = position.width; + Rect buttonRect = new Rect(position.x + (position.width - buttonLength) * 0.5f, position.y, buttonLength, position.height); + + if (GUI.Button(buttonRect, inspectorButtonAttribute.MethodName)) + { + System.Type eventOwnerType = prop.serializedObject.targetObject.GetType(); + string eventName = inspectorButtonAttribute.MethodName; + + if (_eventMethodInfo == null) + { + _eventMethodInfo = eventOwnerType.GetMethod(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + } + + if (_eventMethodInfo != null) + { + _eventMethodInfo.Invoke(prop.serializedObject.targetObject, null); + } + else + { + Debug.LogWarning(string.Format("InspectorButton: Unable to find method {0} in {1}", eventName, eventOwnerType)); + } + } + } + } + #endif + + public class MMFInformationAttribute : PropertyAttribute + { + public enum InformationType { Error, Info, None, Warning } + + #if UNITY_EDITOR + public string Message; + public MessageType Type; + public bool MessageAfterProperty; + + public MMFInformationAttribute(string message, InformationType type, bool messageAfterProperty) + { + this.Message = message; + if (type == InformationType.Error) { this.Type = UnityEditor.MessageType.Error; } + if (type == InformationType.Info) { this.Type = UnityEditor.MessageType.Info; } + if (type == InformationType.Warning) { this.Type = UnityEditor.MessageType.Warning; } + if (type == InformationType.None) { this.Type = UnityEditor.MessageType.None; } + this.MessageAfterProperty = messageAfterProperty; + } + #else + public MMFInformationAttribute(string message, InformationType type, bool messageAfterProperty) + { + + } + #endif + } + + public class MMFHiddenAttribute : PropertyAttribute { } + + [AttributeUsage(System.AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct, Inherited = true)] + public class MMFConditionAttribute : PropertyAttribute + { + public string ConditionBoolean = ""; + public bool Hidden = false; + public bool Negative = false; + + public MMFConditionAttribute(string conditionBoolean) + { + this.ConditionBoolean = conditionBoolean; + this.Hidden = false; + this.Negative = false; + } + + public MMFConditionAttribute(string conditionBoolean, bool hideInInspector) + { + this.ConditionBoolean = conditionBoolean; + this.Hidden = hideInInspector; + this.Negative = false; + } + + public MMFConditionAttribute(string conditionBoolean, bool hideInInspector, bool negative) + { + this.ConditionBoolean = conditionBoolean; + this.Hidden = hideInInspector; + this.Negative = negative; + } + } + + public class MMFVectorAttribute : PropertyAttribute + { + public readonly string[] Labels; + + public MMFVectorAttribute(params string[] labels) + { + Labels = labels; + } + } + + #if UNITY_EDITOR + [CustomPropertyDrawer(typeof(MMFVectorAttribute))] + public class MMVectorLabelsAttributeDrawer : PropertyDrawer + { + protected static readonly GUIContent[] originalLabels = new GUIContent[] { new GUIContent("X"), new GUIContent("Y"), new GUIContent("Z"), new GUIContent("W") }; + protected const int padding = 375; + + public override float GetPropertyHeight(SerializedProperty property, GUIContent guiContent) + { + int ratio = (padding > Screen.width) ? 2 : 1; + return ratio * base.GetPropertyHeight(property, guiContent); + } + + public override void OnGUI(Rect rect, SerializedProperty property, GUIContent guiContent) + { + MMFVectorAttribute vector = (MMFVectorAttribute)attribute; + + if (property.propertyType == SerializedPropertyType.Vector2) + { + float[] fieldArray = new float[] { property.vector2Value.x, property.vector2Value.y }; + fieldArray = DrawFields(rect, fieldArray, ObjectNames.NicifyVariableName(property.name), EditorGUI.FloatField, vector, guiContent); + property.vector2Value = new Vector2(fieldArray[0], fieldArray[1]); + } + else if (property.propertyType == SerializedPropertyType.Vector3) + { + float[] fieldArray = new float[] { property.vector3Value.x, property.vector3Value.y, property.vector3Value.z }; + fieldArray = DrawFields(rect, fieldArray, ObjectNames.NicifyVariableName(property.name), EditorGUI.FloatField, vector, guiContent); + property.vector3Value = new Vector3(fieldArray[0], fieldArray[1], fieldArray[2]); + } + else if (property.propertyType == SerializedPropertyType.Vector4) + { + float[] fieldArray = new float[] { property.vector4Value.x, property.vector4Value.y, property.vector4Value.z, property.vector4Value.w }; + fieldArray = DrawFields(rect, fieldArray, ObjectNames.NicifyVariableName(property.name), EditorGUI.FloatField, vector, guiContent); + property.vector4Value = new Vector4(fieldArray[0], fieldArray[1], fieldArray[2]); + } + else if (property.propertyType == SerializedPropertyType.Vector2Int) + { + int[] fieldArray = new int[] { property.vector2IntValue.x, property.vector2IntValue.y }; + fieldArray = DrawFields(rect, fieldArray, ObjectNames.NicifyVariableName(property.name), EditorGUI.IntField, vector, guiContent); + property.vector2IntValue = new Vector2Int(fieldArray[0], fieldArray[1]); + } + else if (property.propertyType == SerializedPropertyType.Vector3Int) + { + int[] array = new int[] { property.vector3IntValue.x, property.vector3IntValue.y, property.vector3IntValue.z }; + array = DrawFields(rect, array, ObjectNames.NicifyVariableName(property.name), EditorGUI.IntField, vector, guiContent); + property.vector3IntValue = new Vector3Int(array[0], array[1], array[2]); + } + } + + protected T[] DrawFields(Rect rect, T[] vector, string mainLabel, System.Func fieldDrawer, MMFVectorAttribute vectors, GUIContent originalGuiContent) + { + T[] result = vector; + + bool shortSpace = (Screen.width < padding); + + Rect mainLabelRect = rect; + mainLabelRect.width = EditorGUIUtility.labelWidth; + if (shortSpace) + { + mainLabelRect.height *= 0.5f; + } + + Rect fieldRect = rect; + if (shortSpace) + { + fieldRect.height *= 0.5f; + fieldRect.y += fieldRect.height; + fieldRect.width = rect.width / vector.Length; + } + else + { + fieldRect.x += mainLabelRect.width; + fieldRect.width = (rect.width - mainLabelRect.width) / vector.Length; + } + + GUIContent mainLabelContent = new GUIContent(); + mainLabelContent.text = mainLabel; + mainLabelContent.tooltip = originalGuiContent.tooltip; + EditorGUI.LabelField(mainLabelRect, mainLabelContent); + + for (int i = 0; i < vector.Length; i++) + { + GUIContent label = vectors.Labels.Length > i ? new GUIContent(vectors.Labels[i]) : originalLabels[i]; + Vector2 labelSize = EditorStyles.label.CalcSize(label); + EditorGUIUtility.labelWidth = Mathf.Max(labelSize.x + 5, 0.3f * fieldRect.width); + result[i] = fieldDrawer(fieldRect, label, vector[i]); + fieldRect.x += fieldRect.width; + } + + EditorGUIUtility.labelWidth = 0; + return result; + } + } + #endif + + [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] + public class MMFHiddenPropertiesAttribute : Attribute + { + public string[] PropertiesNames; + + public MMFHiddenPropertiesAttribute(params string[] propertiesNames) + { + PropertiesNames = propertiesNames; + } + } + + /// + /// An attribute used to group inspector fields under common dropdowns + /// Implementation inspired by Rodrigo Prinheiro's work, available at https://github.com/RodrigoPrinheiro/unityFoldoutAttribute + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct, Inherited = true)] + public class MMFInspectorGroupAttribute : PropertyAttribute + { + public string GroupName; + public bool GroupAllFieldsUntilNextGroupAttribute; + public int GroupColorIndex; + public bool RequiresSetup; + public bool ClosedByDefault; + + public MMFInspectorGroupAttribute(string groupName, bool groupAllFieldsUntilNextGroupAttribute = false, int groupColorIndex = 24, bool requiresSetup = false, bool closedByDefault = false) + { + if (groupColorIndex > 139) { groupColorIndex = 139; } + + this.GroupName = groupName; + this.GroupAllFieldsUntilNextGroupAttribute = groupAllFieldsUntilNextGroupAttribute; + this.GroupColorIndex = groupColorIndex; + this.RequiresSetup = requiresSetup; + this.ClosedByDefault = closedByDefault; + } + } + + [AttributeUsage(AttributeTargets.Field, AllowMultiple = true, Inherited = true)] + public class TmpAttribute : PropertyAttribute + { + /// + /// The header text. + /// + /// + public readonly string header; + + /// + /// Add a header above some fields in the Inspector. + /// + /// The header text. + /// + public TmpAttribute(string header) => this.header = header; + } + + public static class MMFeedbackStaticMethods + { + static List m_ComponentCache = new List(); + + /// + /// Grabs a component without allocating memory uselessly + /// + /// + /// + /// + public static Component GetComponentNoAlloc(this GameObject @this, System.Type componentType) + { + @this.GetComponents(componentType, m_ComponentCache); + var component = m_ComponentCache.Count > 0 ? m_ComponentCache[0] : null; + m_ComponentCache.Clear(); + return component; + } + + public static Type MMFGetTypeByName(string name) + { + foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) + { + foreach (Type type in assembly.GetTypes()) + { + if (type.Name == name) + { + return type; + } + } + } + + return null; + } + + /// + /// Grabs a component without allocating memory uselessly + /// + /// + /// + /// + public static T MMFGetComponentNoAlloc(this GameObject @this) where T : Component + { + @this.GetComponents(typeof(T), m_ComponentCache); + Component component = m_ComponentCache.Count > 0 ? m_ComponentCache[0] : null; + m_ComponentCache.Clear(); + return component as T; + } + + #if UNITY_EDITOR + /// + /// Returns the object value of a target serialized property + /// + /// + /// + public static object MMFGetObjectValue(this SerializedProperty property) + { + if (property == null) + { + return null; + } + + string propertyPath = property.propertyPath.Replace(".Array.data[", "["); + object targetObject = property.serializedObject.targetObject; + var elements = propertyPath.Split('.'); + foreach (var element in elements) + { + if (!element.Contains("[")) + { + targetObject = MMFGetPropertyValue(targetObject, element); + } + else + { + string elementName = element.Substring(0, element.IndexOf("[")); + int elementIndex = System.Convert.ToInt32(element.Substring(element.IndexOf("[")).Replace("[", "").Replace("]", "")); + targetObject = MMFGetPropertyValue(targetObject, elementName, elementIndex); + } + } + return targetObject; + } + + private static object MMFGetPropertyValue(object source, string propertyName) + { + if (source == null) + { + return null; + } + + Type propertyType = source.GetType(); + + while (propertyType != null) + { + FieldInfo fieldInfo = propertyType.GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + if (fieldInfo != null) + { + return fieldInfo.GetValue(source); + } + PropertyInfo propertyInfo = propertyType.GetProperty(propertyName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance); + if (propertyInfo != null) + { + return propertyInfo.GetValue(source, null); + } + propertyType = propertyType.BaseType; + } + return null; + } + + private static object MMFGetPropertyValue(object source, string propertyName, int index) + { + var enumerable = MMFGetPropertyValue(source, propertyName) as System.Collections.IEnumerable; + if (enumerable == null) + { + return null; + } + var enumerator = enumerable.GetEnumerator(); + for (int i = 0; i <= index; i++) + { + if (!enumerator.MoveNext()) + { + return null; + } + } + return enumerator.Current; + } + #endif + } + + /// + /// Atttribute used to mark feedback class. + /// The provided path is used to sort the feedback list displayed in the feedback manager dropdown + /// + [System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)] + public class FeedbackPathAttribute : System.Attribute + { + public string Path; + public string Name; + + public FeedbackPathAttribute(string path) + { + Path = path; + Name = path.Split('/').Last(); + } + + static public string GetFeedbackDefaultName(System.Type type) + { + FeedbackPathAttribute attribute = type.GetCustomAttributes(false).OfType().FirstOrDefault(); + return attribute != null ? attribute.Name : type.Name; + } + + static public string GetFeedbackDefaultPath(System.Type type) + { + FeedbackPathAttribute attribute = type.GetCustomAttributes(false).OfType().FirstOrDefault(); + return attribute != null ? attribute.Path : null; + } + } + + /// + /// Atttribute used to mark feedback class. + /// The contents allow you to specify a help text for each feedback + /// + [System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)] + public class FeedbackHelpAttribute : System.Attribute + { + public string HelpText; + + public FeedbackHelpAttribute(string helpText) + { + HelpText = helpText; + } + + static public string GetFeedbackHelpText(System.Type type) + { + FeedbackHelpAttribute attribute = type.GetCustomAttributes(false).OfType().FirstOrDefault(); + return attribute != null ? attribute.HelpText : ""; + } + } + + public static class MMF_FieldInfo + { + public static Dictionary> FieldInfoList = new Dictionary>(); + + + public static int GetFieldInfo(MMF_Feedback target, out List fieldInfoList) + { + Type targetType = target.GetType(); + int targetTypeHashCode = targetType.GetHashCode(); + + if (!FieldInfoList.TryGetValue(targetTypeHashCode, out fieldInfoList)) + { + IList typeTree = targetType.GetBaseTypes(); + fieldInfoList = target.GetType().GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic) + .OrderByDescending(x => typeTree.IndexOf(x.DeclaringType)) + .ToList(); + FieldInfoList.Add(targetTypeHashCode, fieldInfoList); + } + + return fieldInfoList.Count; + } + + public static int GetFieldInfo(UnityEngine.Object target, out List fieldInfoList) + { + Type targetType = target.GetType(); + int targetTypeHashCode = targetType.GetHashCode(); + + if (!FieldInfoList.TryGetValue(targetTypeHashCode, out fieldInfoList)) + { + IList typeTree = targetType.GetBaseTypes(); + fieldInfoList = target.GetType().GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic) + .OrderByDescending(x => typeTree.IndexOf(x.DeclaringType)) + .ToList(); + FieldInfoList.Add(targetTypeHashCode, fieldInfoList); + } + + return fieldInfoList.Count; + } + + public static IList GetBaseTypes(this Type t) + { + var types = new List(); + while (t.BaseType != null) + { + types.Add(t); + t = t.BaseType; + } + + return types; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksHelpers.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksHelpers.cs.meta new file mode 100644 index 0000000..d52669b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0542c719094b3924cbee2c7229b1f4eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksInspectorColors.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksInspectorColors.cs new file mode 100644 index 0000000..57eb77b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksInspectorColors.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Feedbacks; + +namespace MoreMountains.Feedbacks +{ + public class MMFeedbacksInspectorColors : MonoBehaviour + { + public static Color32 GameObjectColor = new Color32(76, 174, 80, 255); + public static Color32 PostProcessColor = new Color32(254, 234, 59, 255); + public static Color32 RendererColor = new Color32(254, 151, 0, 255); + public static Color32 TransformColor = new Color32(134, 209, 243, 255); + public static Color32 CameraColor = new Color32(237, 0, 0, 255); + public static Color32 SoundsColor = new Color32(155, 39, 175, 255); + public static Color32 EventsColor = new Color32(232, 30, 99, 255); + public static Color32 SceneColor = new Color32(232, 30, 99, 255); + public static Color32 TimeColor = new Color32(240, 172, 172, 255); + public static Color32 LightColor = new Color32(254, 192, 7, 255); + public static Color32 ParticlesColor = new Color32(0, 149, 135, 255); + public static Color32 UIColor = new Color32(225, 2, 65, 255); + public static Color32 TMPColor = new Color32(135, 206, 250, 255); + public static Color32 HapticsColor = new Color32(61, 206, 250, 255); + public static Color32 FeedbacksColor = new Color32(105, 32, 133, 255); + public static Color32 AnimationColor = new Color32(200, 48, 128, 255); + public static Color32 SpringColor = new Color32(221, 230, 128, 255); + + public static Color32 PauseColor = new Color32(98, 115, 0, 255); + public static Color32 HoldingPauseColor = new Color32(0, 114, 61, 255); + public static Color32 LooperColor = new Color32(12, 100, 128, 255); + public static Color32 DebugColor = new Color32(255, 0, 0, 255); + public static Color32 LooperStartColor = new Color32(166, 75, 5, 255); + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksInspectorColors.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksInspectorColors.cs.meta new file mode 100644 index 0000000..2a1ed3f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMFeedbacksInspectorColors.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97e6ede6fceb23f40805fef166a6f181 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMShaker.cs new file mode 100644 index 0000000..a0bcffe --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMShaker.cs @@ -0,0 +1,365 @@ +using System; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + public class MMShaker : MMMonoBehaviour + { + [MMInspectorGroup("Shaker Settings", true, 3)] + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 0.2f; + /// if this is true this shaker will play on awake + [Tooltip("if this is true this shaker will play on awake")] + public bool PlayOnAwake = false; + /// if this is true, the shaker will shake permanently as long as its game object is active + [Tooltip("if this is true, the shaker will shake permanently as long as its game object is active")] + public bool PermanentShake = false; + /// if this is true, a new shake can happen while shaking + [Tooltip("if this is true, a new shake can happen while shaking")] + public bool Interruptible = true; + /// if this is true, this shaker will always reset target values, regardless of how it was called + [Tooltip("if this is true, this shaker will always reset target values, regardless of how it was called")] + public bool AlwaysResetTargetValuesAfterShake = false; + /// if this is true, this shaker will ignore any value passed in an event that triggered it, and will instead use the values set on its inspector + [Tooltip("if this is true, this shaker will ignore any value passed in an event that triggered it, and will instead use the values set on its inspector")] + public bool OnlyUseShakerValues = false; + /// a cooldown, in seconds, after a shake, during which no other shake can start + [Tooltip("a cooldown, in seconds, after a shake, during which no other shake can start")] + public float CooldownBetweenShakes = 0f; + /// whether or not this shaker is shaking right now + [Tooltip("whether or not this shaker is shaking right now")] + [MMFReadOnly] + public bool Shaking = false; + + [HideInInspector] + public bool ForwardDirection = true; + + [HideInInspector] + public TimescaleModes TimescaleMode = TimescaleModes.Scaled; + + public virtual float GetTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + public virtual MMChannelData ChannelData => new MMChannelData(ChannelMode, Channel, MMChannelDefinition); + + public virtual bool ListeningToEvents => _listeningToEvents; + + [HideInInspector] + internal bool _listeningToEvents = false; + protected float _shakeStartedTimestamp = -Single.MaxValue; + protected float _remappedTimeSinceStart; + protected bool _resetShakerValuesAfterShake; + protected bool _resetTargetValuesAfterShake; + protected float _journey; + + /// + /// On Awake we grab our volume and profile + /// + protected virtual void Awake() + { + Initialization(); + // in case someone else trigger StartListening before Awake + if (!_listeningToEvents) + { + StartListening(); + } + Shaking = PlayOnAwake; + this.enabled = PlayOnAwake; + } + + /// + /// Override this method to initialize your shaker + /// + protected virtual void Initialization() + { + } + + /// + /// Call this externally if you need to force a new initialization + /// + public virtual void ForceInitialization() + { + Initialization(); + } + + /// + /// Starts shaking the values + /// + public virtual void StartShaking() + { + _journey = ForwardDirection ? 0f : ShakeDuration; + + if (GetTime() - _shakeStartedTimestamp < CooldownBetweenShakes) + { + return; + } + + if (Shaking) + { + return; + } + else + { + this.enabled = true; + _shakeStartedTimestamp = GetTime(); + Shaking = true; + GrabInitialValues(); + ShakeStarts(); + } + } + + /// + /// Describes what happens when a shake starts + /// + protected virtual void ShakeStarts() + { + + } + + /// + /// A method designed to collect initial values + /// + protected virtual void GrabInitialValues() + { + + } + + /// + /// On Update, we shake our values if needed, or reset if our shake has ended + /// + protected virtual void Update() + { + if (Shaking || PermanentShake) + { + Shake(); + _journey += ForwardDirection ? GetDeltaTime() : -GetDeltaTime(); + } + + if (Shaking && !PermanentShake && ((_journey < 0) || (_journey > ShakeDuration))) + { + Shaking = false; + ShakeComplete(); + } + + if (PermanentShake) + { + if (_journey < 0) + { + _journey = ShakeDuration; + } + + if (_journey > ShakeDuration) + { + _journey = 0; + } + } + } + + /// + /// Override this method to implement shake over time + /// + protected virtual void Shake() + { + + } + + /// + /// A method used to "shake" a flot over time along a curve + /// + /// + /// + /// + /// + /// + /// + protected virtual float ShakeFloat(AnimationCurve curve, float remapMin, float remapMax, bool relativeIntensity, float initialValue) + { + float newValue = 0f; + + float remappedTime = MMFeedbacksHelpers.Remap(_journey, 0f, ShakeDuration, 0f, 1f); + + float curveValue = curve.Evaluate(remappedTime); + newValue = MMFeedbacksHelpers.Remap(curveValue, 0f, 1f, remapMin, remapMax); + if (relativeIntensity) + { + newValue += initialValue; + } + return newValue; + } + + protected virtual Color ShakeGradient(Gradient gradient) + { + float remappedTime = MMFeedbacksHelpers.Remap(_journey, 0f, ShakeDuration, 0f, 1f); + return gradient.Evaluate(remappedTime); + } + + /// + /// Resets the values on the target + /// + protected virtual void ResetTargetValues() + { + + } + + /// + /// Resets the values on the shaker + /// + protected virtual void ResetShakerValues() + { + + } + + /// + /// Describes what happens when the shake is complete + /// + protected virtual void ShakeComplete() + { + _journey = ForwardDirection ? ShakeDuration : 0f; + Shake(); + + if (_resetTargetValuesAfterShake || AlwaysResetTargetValuesAfterShake) + { + ResetTargetValues(); + } + if (_resetShakerValuesAfterShake) + { + ResetShakerValues(); + } + this.enabled = false; + } + + /// + /// On enable we start shaking if needed + /// + protected virtual void OnEnable() + { + StartShaking(); + } + + /// + /// On destroy we stop listening for events + /// + protected virtual void OnDestroy() + { + StopListening(); + } + + /// + /// On disable we complete our shake if it was in progress + /// + protected virtual void OnDisable() + { + if (Shaking) + { + ShakeComplete(); + } + } + + /// + /// Starts this shaker + /// + public virtual void Play() + { + if (GetTime() - _shakeStartedTimestamp < CooldownBetweenShakes) + { + return; + } + this.enabled = true; + } + + /// + /// Stops this shaker + /// + public virtual void Stop() + { + Shaking = false; + ShakeComplete(); + } + + /// + /// Starts listening for events + /// + public virtual void StartListening() + { + _listeningToEvents = true; + } + + /// + /// Stops listening for events + /// + public virtual void StopListening() + { + _listeningToEvents = false; + } + + /// + /// Returns true if this shaker should listen to events, false otherwise + /// + /// + /// + protected virtual bool CheckEventAllowed(MMChannelData channelData, bool useRange = false, float range = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return false; + } + if (!this.gameObject.activeInHierarchy) + { + return false; + } + else + { + if (useRange) + { + if (Vector3.Distance(this.transform.position, eventOriginPosition) > range) + { + return false; + } + } + + return true; + } + } + + public virtual float ComputeRangeIntensity(bool useRange, float rangeDistance, bool useRangeFalloff, AnimationCurve rangeFalloff, Vector2 remapRangeFalloff, Vector3 rangePosition) + { + if (!useRange) + { + return 1f; + } + + float distanceToCenter = Vector3.Distance(rangePosition, this.transform.position); + + if (distanceToCenter > rangeDistance) + { + return 0f; + } + + if (!useRangeFalloff) + { + return 1f; + } + + float normalizedDistance = MMMaths.Remap(distanceToCenter, 0f, rangeDistance, 0f, 1f); + float curveValue = rangeFalloff.Evaluate(normalizedDistance); + float newIntensity = MMMaths.Remap(curveValue, 0f, 1f, remapRangeFalloff.x, remapRangeFalloff.y); + return newIntensity; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMShaker.cs.meta new file mode 100644 index 0000000..58eeae8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/MMShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25d31bbce27b6524192fba29ccfe28df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool.meta new file mode 100644 index 0000000..218d7d4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dea619c1b9acaab45aaea2653a61c4af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniObjectPooler.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniObjectPooler.cs new file mode 100644 index 0000000..f132ecd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniObjectPooler.cs @@ -0,0 +1,236 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Feedbacks +{ + public class MMMiniObjectPooler : MonoBehaviour + { + /// the game object we'll instantiate + public GameObject GameObjectToPool; + /// the number of objects we'll add to the pool + public int PoolSize = 20; + /// if true, the pool will automatically add objects to the itself if needed + public bool PoolCanExpand = true; + /// if this is true, the pool will try not to create a new waiting pool if it finds one with the same name. + public bool MutualizeWaitingPools = false; + /// if this is true, all waiting and active objects will be regrouped under an empty game object. Otherwise they'll just be at top level in the hierarchy + public bool NestWaitingPool = true; + + /// this object is just used to group the pooled objects + protected GameObject _waitingPool = null; + protected MMMiniObjectPool _objectPool; + protected const int _initialPoolsListCapacity = 5; + + static List _pools = new List(_initialPoolsListCapacity); + + /// + /// Adds a pooler to the static list if needed + /// + /// + public static void AddPool(MMMiniObjectPool pool) + { + if (_pools == null) + { + _pools = new List(_initialPoolsListCapacity); + } + if (!_pools.Contains(pool)) + { + _pools.Add(pool); + } + } + + /// + /// Removes a pooler from the static list + /// + /// + public static void RemovePool(MMMiniObjectPool pool) + { + _pools?.Remove(pool); + } + + /// + /// On awake we fill our object pool + /// + protected virtual void Awake() + { + FillObjectPool(); + } + + /// + /// On Destroy we remove ourselves from the list of poolers + /// + private void OnDestroy() + { + if (_objectPool != null) + { + RemovePool(_objectPool); + } + } + + /// + /// Looks for an existing pooler for the same object, returns it if found, returns null otherwise + /// + /// + /// + public virtual MMMiniObjectPool ExistingPool(string poolName) + { + if (_pools == null) + { + _pools = new List(_initialPoolsListCapacity); + } + + if (_pools.Count == 0) + { + var pools = FindObjectsOfType(); + if (pools.Length > 0) + { + _pools.AddRange(pools); + } + } + foreach (MMMiniObjectPool pool in _pools) + { + if ((pool != null) && (pool.name == poolName)/* && (pool.gameObject.scene == this.gameObject.scene)*/) + { + return pool; + } + } + return null; + } + + /// + /// Creates the waiting pool or tries to reuse one if there's already one available + /// + protected virtual void CreateWaitingPool() + { + if (!MutualizeWaitingPools) + { + // we create a container that will hold all the instances we create + _objectPool = this.gameObject.AddComponent(); + _objectPool.PooledGameObjects = new List(); + return; + } + else + { + MMMiniObjectPool waitingPool = ExistingPool(DetermineObjectPoolName(GameObjectToPool)); + + if (waitingPool != null) + { + _waitingPool = waitingPool.gameObject; + _objectPool = waitingPool; + } + else + { + GameObject newPool = new GameObject(); + newPool.name = DetermineObjectPoolName(GameObjectToPool); + SceneManager.MoveGameObjectToScene(newPool, this.gameObject.scene); + _objectPool = newPool.AddComponent(); + _objectPool.PooledGameObjects = new List(); + AddPool(_objectPool); + } + } + } + + /// + /// Determines the name of the object pool. + /// + /// The object pool name. + public static string DetermineObjectPoolName(GameObject gameObjectToPool) + { + return (gameObjectToPool.name + "_pool"); + } + + /// + /// Implement this method to fill the pool with objects + /// + public virtual void FillObjectPool() + { + if (GameObjectToPool == null) + { + return; + } + + CreateWaitingPool(); + + int objectsToSpawn = PoolSize; + + if (_objectPool != null) + { + objectsToSpawn -= _objectPool.PooledGameObjects.Count; + } + + // we add to the pool the specified number of objects + for (int i = 0; i < objectsToSpawn; i++) + { + AddOneObjectToThePool(); + } + } + + /// + /// Implement this method to return a gameobject + /// + /// The pooled game object. + public virtual GameObject GetPooledGameObject() + { + // we go through the pool looking for an inactive object + for (int i = 0; i < _objectPool.PooledGameObjects.Count; i++) + { + if (!_objectPool.PooledGameObjects[i].gameObject.activeInHierarchy) + { + // if we find one, we return it + return _objectPool.PooledGameObjects[i]; + } + } + // if we haven't found an inactive object (the pool is empty), and if we can extend it, we add one new object to the pool, and return it + if (PoolCanExpand) + { + return AddOneObjectToThePool(); + } + // if the pool is empty and can't grow, we return nothing. + return null; + } + + /// + /// Adds one object of the specified type (in the inspector) to the pool. + /// + /// The one object to the pool. + protected virtual GameObject AddOneObjectToThePool() + { + if (GameObjectToPool == null) + { + Debug.LogWarning("The " + gameObject.name + " ObjectPooler doesn't have any GameObjectToPool defined.", gameObject); + return null; + } + GameObjectToPool.gameObject.SetActive(false); + GameObject newGameObject = (GameObject)Instantiate(GameObjectToPool); + SceneManager.MoveGameObjectToScene(newGameObject, this.gameObject.scene); + if (NestWaitingPool) + { + newGameObject.transform.SetParent(_objectPool.transform); + } + newGameObject.name = GameObjectToPool.name + "-" + _objectPool.PooledGameObjects.Count; + + _objectPool.PooledGameObjects.Add(newGameObject); + + return newGameObject; + } + + /// + /// Destroys the object pool + /// + public virtual void DestroyObjectPool() + { + if (_waitingPool != null) + { + Destroy(_waitingPool.gameObject); + } + } + } + + + public class MMMiniObjectPool : MonoBehaviour + { + [MMFReadOnly] + public List PooledGameObjects; + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniObjectPooler.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniObjectPooler.cs.meta new file mode 100644 index 0000000..83ac2a3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniObjectPooler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a2e3aab8bd306249afbd26c52205f46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniPoolableObject.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniPoolableObject.cs new file mode 100644 index 0000000..31fc3d8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniPoolableObject.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Feedbacks; +using System; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this class to an object that you expect to pool from an objectPooler. + /// Note that these objects can't be destroyed by calling Destroy(), they'll just be set inactive (that's the whole point). + /// + public class MMMiniPoolableObject : MonoBehaviour + { + public delegate void Events(); + public event Events OnSpawnComplete; + + /// The life time, in seconds, of the object. If set to 0 it'll live forever, if set to any positive value it'll be set inactive after that time. + public float LifeTime = 0f; + + /// + /// Turns the instance inactive, in order to eventually reuse it. + /// + public virtual void Destroy() + { + gameObject.SetActive(false); + } + + /// + /// When the objects get enabled (usually after having been pooled from an ObjectPooler, we initiate its death countdown. + /// + protected virtual void OnEnable() + { + if (LifeTime > 0) + { + Invoke("Destroy", LifeTime); + } + } + + /// + /// When the object gets disabled (maybe it got out of bounds), we cancel its programmed death + /// + protected virtual void OnDisable() + { + CancelInvoke(); + } + + /// + /// Triggers the on spawn complete event + /// + public virtual void TriggerOnSpawnComplete() + { + if(OnSpawnComplete != null) + { + OnSpawnComplete(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniPoolableObject.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniPoolableObject.cs.meta new file mode 100644 index 0000000..3a48cb5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Core/ObjectPool/MMMiniPoolableObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0b3f00a75cc857439b13b8bafb37894 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks.meta new file mode 100644 index 0000000..f469f17 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f426746d965f3a84bbc27fdca344c170 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Animation.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Animation.cs new file mode 100644 index 0000000..ac737c9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Animation.cs @@ -0,0 +1,323 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to trigger an animation (bool, int, float or trigger) on the associated animator, with or without randomness + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will allow you to send to an animator (bound in its inspector) a bool, int, float or trigger parameter, allowing you to trigger an animation, with or without randomness.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Animation/Animation Parameter")] + public class MMF_Animation : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// the possible modes that pilot triggers + public enum TriggerModes { SetTrigger, ResetTrigger } + + /// the possible ways to set a value + public enum ValueModes { None, Constant, Random, Incremental } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.AnimationColor; } } + public override bool EvaluateRequiresSetup() { return (BoundAnimator == null); } + public override string RequiredTargetText { get { return BoundAnimator != null ? BoundAnimator.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundAnimator be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is the declared duration + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundAnimator = FindAutomatedTarget(); + + [MMFInspectorGroup("Animation", true, 12, true)] + /// the animator whose parameters you want to update + [Tooltip("the animator whose parameters you want to update")] + public Animator BoundAnimator; + /// the list of extra animators whose parameters you want to update + [Tooltip("the list of extra animators whose parameters you want to update")] + public List ExtraBoundAnimators; + /// the duration for the player to consider. This won't impact your animation, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual animation, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your animation, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual animation, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + [MMFInspectorGroup("Trigger", true, 16)] + /// if this is true, will update the specified trigger parameter + [Tooltip("if this is true, will update the specified trigger parameter")] + public bool UpdateTrigger = false; + /// the selected mode to interact with this trigger + [Tooltip("the selected mode to interact with this trigger")] + [MMFCondition("UpdateTrigger", true)] + public TriggerModes TriggerMode = TriggerModes.SetTrigger; + /// the trigger animator parameter to, well, trigger when the feedback is played + [Tooltip("the trigger animator parameter to, well, trigger when the feedback is played")] + [MMFCondition("UpdateTrigger", true)] + public string TriggerParameterName; + + [MMFInspectorGroup("Random Trigger", true, 20)] + /// if this is true, will update a random trigger parameter, picked from the list below + [Tooltip("if this is true, will update a random trigger parameter, picked from the list below")] + public bool UpdateRandomTrigger = false; + /// the selected mode to interact with this trigger + [Tooltip("the selected mode to interact with this trigger")] + [MMFCondition("UpdateRandomTrigger", true)] + public TriggerModes RandomTriggerMode = TriggerModes.SetTrigger; + /// the trigger animator parameters to trigger at random when the feedback is played + [Tooltip("the trigger animator parameters to trigger at random when the feedback is played")] + public List RandomTriggerParameterNames; + + [MMFInspectorGroup("Bool", true, 17)] + /// if this is true, will update the specified bool parameter + [Tooltip("if this is true, will update the specified bool parameter")] + public bool UpdateBool = false; + /// the bool parameter to turn true when the feedback gets played + [Tooltip("the bool parameter to turn true when the feedback gets played")] + [MMFCondition("UpdateBool", true)] + public string BoolParameterName; + /// when in bool mode, whether to set the bool parameter to true or false + [Tooltip("when in bool mode, whether to set the bool parameter to true or false")] + [MMFCondition("UpdateBool", true)] + public bool BoolParameterValue = true; + + [MMFInspectorGroup("Random Bool", true, 19)] + /// if this is true, will update a random bool parameter picked from the list below + [Tooltip("if this is true, will update a random bool parameter picked from the list below")] + public bool UpdateRandomBool = false; + /// when in bool mode, whether to set the bool parameter to true or false + [Tooltip("when in bool mode, whether to set the bool parameter to true or false")] + [MMFCondition("UpdateRandomBool", true)] + public bool RandomBoolParameterValue = true; + /// the bool parameter to turn true when the feedback gets played + [Tooltip("the bool parameter to turn true when the feedback gets played")] + public List RandomBoolParameterNames; + + [MMFInspectorGroup("Int", true, 24)] + /// the int parameter to turn true when the feedback gets played + [Tooltip("the int parameter to turn true when the feedback gets played")] + public ValueModes IntValueMode = ValueModes.None; + /// the int parameter to turn true when the feedback gets played + [Tooltip("the int parameter to turn true when the feedback gets played")] + [MMFEnumCondition("IntValueMode", (int)ValueModes.Constant, (int)ValueModes.Random, (int)ValueModes.Incremental)] + public string IntParameterName; + /// the value to set to that int parameter + [Tooltip("the value to set to that int parameter")] + [MMFEnumCondition("IntValueMode", (int)ValueModes.Constant)] + public int IntValue; + /// the min value (inclusive) to set at random to that int parameter + [Tooltip("the min value (inclusive) to set at random to that int parameter")] + [MMFEnumCondition("IntValueMode", (int)ValueModes.Random)] + public int IntValueMin; + /// the max value (exclusive) to set at random to that int parameter + [Tooltip("the max value (exclusive) to set at random to that int parameter")] + [MMFEnumCondition("IntValueMode", (int)ValueModes.Random)] + public int IntValueMax = 5; + /// the value to increment that int parameter by + [Tooltip("the value to increment that int parameter by")] + [MMFEnumCondition("IntValueMode", (int)ValueModes.Incremental)] + public int IntIncrement = 1; + + [MMFInspectorGroup("Float", true, 22)] + /// the Float parameter to turn true when the feedback gets played + [Tooltip("the Float parameter to turn true when the feedback gets played")] + public ValueModes FloatValueMode = ValueModes.None; + /// the float parameter to turn true when the feedback gets played + [Tooltip("the float parameter to turn true when the feedback gets played")] + [MMFEnumCondition("FloatValueMode", (int)ValueModes.Constant, (int)ValueModes.Random, (int)ValueModes.Incremental)] + public string FloatParameterName; + /// the value to set to that float parameter + [Tooltip("the value to set to that float parameter")] + [MMFEnumCondition("FloatValueMode", (int)ValueModes.Constant)] + public float FloatValue; + /// the min value (inclusive) to set at random to that float parameter + [Tooltip("the min value (inclusive) to set at random to that float parameter")] + [MMFEnumCondition("FloatValueMode", (int)ValueModes.Random)] + public float FloatValueMin; + /// the max value (exclusive) to set at random to that float parameter + [Tooltip("the max value (exclusive) to set at random to that float parameter")] + [MMFEnumCondition("FloatValueMode", (int)ValueModes.Random)] + public float FloatValueMax = 5; + /// the value to increment that float parameter by + [Tooltip("the value to increment that float parameter by")] + [MMFEnumCondition("FloatValueMode", (int)ValueModes.Incremental)] + public float FloatIncrement = 1; + + [MMFInspectorGroup("Layer Weights", true, 22)] + /// whether or not to set layer weights on the specified layer when playing this feedback + [Tooltip("whether or not to set layer weights on the specified layer when playing this feedback")] + public bool SetLayerWeight = false; + /// the index of the layer to target when changing layer weights + [Tooltip("the index of the layer to target when changing layer weights")] + [MMFCondition("SetLayerWeight", true)] + public int TargetLayerIndex = 1; + /// the new weight to set on the target animator layer + [Tooltip("the new weight to set on the target animator layer")] + [MMFCondition("SetLayerWeight", true)] + public float NewWeight = 0.5f; + + protected int _triggerParameter; + protected int _boolParameter; + protected int _intParameter; + protected int _floatParameter; + protected List _randomTriggerParameters; + protected List _randomBoolParameters; + + /// + /// Custom Init + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + _triggerParameter = Animator.StringToHash(TriggerParameterName); + _boolParameter = Animator.StringToHash(BoolParameterName); + _intParameter = Animator.StringToHash(IntParameterName); + _floatParameter = Animator.StringToHash(FloatParameterName); + + _randomTriggerParameters = new List(); + foreach (string name in RandomTriggerParameterNames) + { + _randomTriggerParameters.Add(Animator.StringToHash(name)); + } + + _randomBoolParameters = new List(); + foreach (string name in RandomBoolParameterNames) + { + _randomBoolParameters.Add(Animator.StringToHash(name)); + } + } + + /// + /// On Play, checks if an animator is bound and triggers parameters + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (BoundAnimator == null) + { + Debug.LogWarning("No animator was set for " + Owner.name); + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + ApplyValue(BoundAnimator, intensityMultiplier); + foreach (Animator animator in ExtraBoundAnimators) + { + ApplyValue(animator, intensityMultiplier); + } + } + + /// + /// Applies values on the target Animator + /// + /// + /// + protected virtual void ApplyValue(Animator targetAnimator, float intensityMultiplier) + { + if (UpdateTrigger) + { + if (TriggerMode == TriggerModes.SetTrigger) + { + targetAnimator.SetTrigger(_triggerParameter); + } + if (TriggerMode == TriggerModes.ResetTrigger) + { + targetAnimator.ResetTrigger(_triggerParameter); + } + } + + if (UpdateRandomTrigger) + { + int randomParameter = _randomTriggerParameters[Random.Range(0, _randomTriggerParameters.Count)]; + + if (RandomTriggerMode == TriggerModes.SetTrigger) + { + targetAnimator.SetTrigger(randomParameter); + } + if (RandomTriggerMode == TriggerModes.ResetTrigger) + { + targetAnimator.ResetTrigger(randomParameter); + } + } + + if (UpdateBool) + { + targetAnimator.SetBool(_boolParameter, BoolParameterValue); + } + + if (UpdateRandomBool) + { + int randomParameter = _randomBoolParameters[Random.Range(0, _randomBoolParameters.Count)]; + + targetAnimator.SetBool(randomParameter, RandomBoolParameterValue); + } + + switch (IntValueMode) + { + case ValueModes.Constant: + targetAnimator.SetInteger(_intParameter, IntValue); + break; + case ValueModes.Incremental: + int newValue = targetAnimator.GetInteger(_intParameter) + IntIncrement; + targetAnimator.SetInteger(_intParameter, newValue); + break; + case ValueModes.Random: + int randomValue = Random.Range(IntValueMin, IntValueMax); + targetAnimator.SetInteger(_intParameter, randomValue); + break; + } + + switch (FloatValueMode) + { + case ValueModes.Constant: + targetAnimator.SetFloat(_floatParameter, FloatValue * intensityMultiplier); + break; + case ValueModes.Incremental: + float newValue = targetAnimator.GetFloat(_floatParameter) + FloatIncrement * intensityMultiplier; + targetAnimator.SetFloat(_floatParameter, newValue); + break; + case ValueModes.Random: + float randomValue = Random.Range(FloatValueMin, FloatValueMax) * intensityMultiplier; + targetAnimator.SetFloat(_floatParameter, randomValue); + break; + } + + if (SetLayerWeight) + { + targetAnimator.SetLayerWeight(TargetLayerIndex, NewWeight); + } + } + + /// + /// On stop, turns the bool parameter to false + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !UpdateBool || !FeedbackTypeAuthorized) + { + return; + } + + BoundAnimator.SetBool(_boolParameter, false); + foreach (Animator animator in ExtraBoundAnimators) + { + animator.SetBool(_boolParameter, false); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Animation.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Animation.cs.meta new file mode 100644 index 0000000..4162397 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Animation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88367c53ef5132e4c9df08d23e92c06d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimationCrossfade.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimationCrossfade.cs new file mode 100644 index 0000000..e4bb5e9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimationCrossfade.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to trigger an animation (bool, int, float or trigger) on the associated animator, with or without randomness + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will allow you to cross fade a target Animator to the specified state.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Animation/Animation Crossfade")] + public class MMF_AnimationCrossfade : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// the possible modes that pilot triggers + public enum TriggerModes { SetTrigger, ResetTrigger } + + /// the possible ways to set a value + public enum ValueModes { None, Constant, Random, Incremental } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.AnimationColor; } } + public override bool EvaluateRequiresSetup() { return (BoundAnimator == null); } + public override string RequiredTargetText { get { return BoundAnimator != null ? BoundAnimator.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundAnimator be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is the declared duration + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundAnimator = FindAutomatedTarget(); + + public enum Modes { Seconds, Normalized } + + [MMFInspectorGroup("Animation", true, 12, true)] + /// the animator whose parameters you want to update + [Tooltip("the animator whose parameters you want to update")] + public Animator BoundAnimator; + /// the list of extra animators whose parameters you want to update + [Tooltip("the list of extra animators whose parameters you want to update")] + public List ExtraBoundAnimators; + /// the duration for the player to consider. This won't impact your animation, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual animation, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your animation, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual animation, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + [MMFInspectorGroup("CrossFade", true, 16)] + + /// the name of the state towards which to transition. That's the name of the yellow or gray box in your Animator + [Tooltip("the name of the state towards which to transition. That's the name of the yellow or gray box in your Animator")] + public string StateName = "NewState"; + /// the ID of the Animator layer you want the crossfade to occur on + [Tooltip("the ID of the Animator layer you want the crossfade to occur on")] + public int Layer = -1; + + /// whether to specify timing data for the crossfade in seconds or in normalized (0-1) values + [Tooltip("whether to specify timing data for the crossfade in seconds or in normalized (0-1) values")] + public Modes Mode = Modes.Seconds; + + /// in Seconds mode, the duration of the transition, in seconds + [Tooltip("in Seconds mode, the duration of the transition, in seconds")] + [MMFEnumCondition("Mode", (int)Modes.Seconds)] + public float TransitionDuration = 0.1f; + /// in Seconds mode, the offset at which to transition to, in seconds + [Tooltip("in Seconds mode, the offset at which to transition to, in seconds")] + [MMFEnumCondition("Mode", (int)Modes.Seconds)] + public float TimeOffset = 0f; + + /// in Normalized mode, the duration of the transition, normalized between 0 and 1 + [Tooltip("in Normalized mode, the duration of the transition, normalized between 0 and 1")] + [MMFEnumCondition("Mode", (int)Modes.Normalized)] + public float NormalizedTransitionDuration = 0.1f; + /// in Normalized mode, the offset at which to transition to, normalized between 0 and 1 + [Tooltip("in Normalized mode, the offset at which to transition to, normalized between 0 and 1")] + [MMFEnumCondition("Mode", (int)Modes.Normalized)] + public float NormalizedTimeOffset = 0f; + + /// according to Unity's docs, 'the time of the transition, normalized'. Really nobody's sure what this does. It's optional. + [Tooltip("according to Unity's docs, 'the time of the transition, normalized'. Really nobody's sure what this does. It's optional.")] + public float NormalizedTransitionTime = 0f; + + protected int _stateHashName; + + /// + /// Custom Init + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + _stateHashName = Animator.StringToHash(StateName); + } + + /// + /// On Play, checks if an animator is bound and crossfades to the specified state + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (BoundAnimator == null) + { + Debug.LogWarning("No animator was set for " + Owner.name); + return; + } + + CrossFade(BoundAnimator); + foreach (Animator animator in ExtraBoundAnimators) + { + CrossFade(animator); + } + } + + /// + /// Crossfades either via fixed time or regular (normalized) calls + /// + /// + protected virtual void CrossFade(Animator targetAnimator) + { + switch (Mode) + { + case Modes.Seconds: + targetAnimator.CrossFadeInFixedTime(_stateHashName, TransitionDuration, Layer, TimeOffset, NormalizedTransitionTime); + break; + case Modes.Normalized: + targetAnimator.CrossFade(_stateHashName, NormalizedTransitionDuration, Layer, NormalizedTimeOffset, NormalizedTransitionTime); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimationCrossfade.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimationCrossfade.cs.meta new file mode 100644 index 0000000..114da5b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimationCrossfade.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0952ef5bf0c90a4eb36a3217da349b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimatorSpeed.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimatorSpeed.cs new file mode 100644 index 0000000..f585fe6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimatorSpeed.cs @@ -0,0 +1,170 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the speed of a target animator, either once, or instantly and then reset it, or interpolate it over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the speed of a target animator, either once, or instantly and then reset it, or interpolate it over time")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Animation/Animator Speed")] + public class MMF_AnimatorSpeed : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.AnimationColor; } } + public override bool EvaluateRequiresSetup() { return (BoundAnimator == null); } + public override string RequiredTargetText { get { return BoundAnimator != null ? BoundAnimator.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundAnimator be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasRandomness => true; + public override bool CanForceInitialValue => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundAnimator = FindAutomatedTarget(); + + public enum SpeedModes { Once, InstantThenReset, OverTime } + + [MMFInspectorGroup("Animation", true, 12, true)] + /// the animator whose parameters you want to update + [Tooltip("the animator whose parameters you want to update")] + public Animator BoundAnimator; + + [MMFInspectorGroup("Speed", true, 14, true)] + /// whether to change the speed of the target animator once, instantly and reset it later, or have it change over time + [Tooltip("whether to change the speed of the target animator once, instantly and reset it later, or have it change over time")] + public SpeedModes Mode = SpeedModes.Once; + /// the new minimum speed at which to set the animator - value will be randomized between min and max + [Tooltip("the new minimum speed at which to set the animator - value will be randomized between min and max")] + public float NewSpeedMin = 0f; + /// the new maximum speed at which to set the animator - value will be randomized between min and max + [Tooltip("the new maximum speed at which to set the animator - value will be randomized between min and max")] + public float NewSpeedMax = 0f; + /// when in instant then reset or over time modes, the duration of the effect + [Tooltip("when in instant then reset or over time modes, the duration of the effect")] + [MMFEnumCondition("Mode", (int)SpeedModes.InstantThenReset, (int)SpeedModes.OverTime)] + public float Duration = 1f; + /// when in over time mode, the curve against which to evaluate the new speed + [Tooltip("when in over time mode, the curve against which to evaluate the new speed")] + [MMFEnumCondition("Mode", (int)SpeedModes.OverTime)] + public AnimationCurve Curve = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.5f, 1f), new Keyframe(1, 0f)); + + protected Coroutine _coroutine; + protected float _initialSpeed; + protected float _startedAt; + + /// + /// On Play, checks if an animator is bound and triggers parameters + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (BoundAnimator == null) + { + Debug.LogWarning("No animator was set for " + Owner.name); + return; + } + + if (!IsPlaying) + { + _initialSpeed = BoundAnimator.speed; + } + + if (Mode == SpeedModes.Once) + { + BoundAnimator.speed = ComputeIntensity(DetermineNewSpeed(), position); + } + else + { + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeSpeedCo()); + } + } + + /// + /// A coroutine used in ForDuration mode + /// + /// + protected virtual IEnumerator ChangeSpeedCo() + { + if (Mode == SpeedModes.InstantThenReset) + { + IsPlaying = true; + BoundAnimator.speed = DetermineNewSpeed(); + yield return MMCoroutine.WaitFor(Duration); + BoundAnimator.speed = _initialSpeed; + IsPlaying = false; + } + else if (Mode == SpeedModes.OverTime) + { + IsPlaying = true; + _startedAt = FeedbackTime; + float newTargetSpeed = DetermineNewSpeed(); + while (FeedbackTime - _startedAt < Duration) + { + float time = MMFeedbacksHelpers.Remap(FeedbackTime - _startedAt, 0f, Duration, 0f, 1f); + float t = Curve.Evaluate(time); + BoundAnimator.speed = Mathf.Max(0f, MMFeedbacksHelpers.Remap(t, 0f, 1f, _initialSpeed, newTargetSpeed)); + yield return null; + } + BoundAnimator.speed = _initialSpeed; + IsPlaying = false; + } + } + + /// + /// Determines the new speed for the target animator + /// + /// + protected virtual float DetermineNewSpeed() + { + return Mathf.Abs(Random.Range(NewSpeedMin, NewSpeedMax)); + } + + /// + /// On stop, turns the bool parameter to false + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + + BoundAnimator.speed = _initialSpeed; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + BoundAnimator.speed = _initialSpeed; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimatorSpeed.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimatorSpeed.cs.meta new file mode 100644 index 0000000..e02c548 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AnimatorSpeed.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42453e475524af140ac923a2fe1e86f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterDistortion.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterDistortion.cs new file mode 100644 index 0000000..6b91e1f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterDistortion.cs @@ -0,0 +1,109 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the distortion level of a distortion filter. You'll need a MMAudioFilterDistortionShaker on the filter. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/Audio Filter Distortion")] + [FeedbackHelp("This feedback lets you control a distortion audio filter over time. You'll need a MMAudioFilterDistortionShaker on the filter.")] + public class MMF_AudioFilterDistortion : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Distortion Filter", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeDistortion = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeDistortion = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapDistortionZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapDistortionOne = 1f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + float remapZero = 0f; + float remapOne = 0f; + + if (!Timing.ConstantIntensity) + { + remapZero = RemapDistortionZero * intensityMultiplier; + remapOne = RemapDistortionOne * intensityMultiplier; + } + + MMAudioFilterDistortionShakeEvent.Trigger(ShakeDistortion, FeedbackDuration, remapZero, remapOne, RelativeDistortion, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioFilterDistortionShakeEvent.Trigger(ShakeDistortion, FeedbackDuration, 0f,0f, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioFilterDistortionShakeEvent.Trigger(ShakeDistortion, FeedbackDuration, 0f,0f, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterDistortion.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterDistortion.cs.meta new file mode 100644 index 0000000..12c6987 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterDistortion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d956ba1792f2034a94f45a349064ba1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterEcho.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterEcho.cs new file mode 100644 index 0000000..12ba295 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterEcho.cs @@ -0,0 +1,99 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the wetmix level of an echo filter. You'll need a MMAudioFilterEchoShaker on your filter. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/Audio Filter Echo")] + [FeedbackHelp("This feedback lets you control an echo audio filter's wet mix value over time. You'll need a MMAudioFilterEchoShaker on your filter.")] + public class MMF_AudioFilterEcho : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Echo Filter", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeEcho = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeEcho = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Range(0f, 1f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapEchoZero = 0f; + /// the value to remap the curve's 1 to + [Range(0f, 1f)] + [Tooltip("the value to remap the curve's 1 to")] + public float RemapEchoOne = 1f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMAudioFilterEchoShakeEvent.Trigger(ShakeEcho, FeedbackDuration, RemapEchoZero, RemapEchoOne, RelativeEcho, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMAudioFilterEchoShakeEvent.Trigger(ShakeEcho, FeedbackDuration, RemapEchoZero, RemapEchoOne, RelativeEcho, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioFilterEchoShakeEvent.Trigger(ShakeEcho, FeedbackDuration, RemapEchoZero, RemapEchoOne, RelativeEcho, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterEcho.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterEcho.cs.meta new file mode 100644 index 0000000..2abdce4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterEcho.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3a9753eaf81ae04aa91936d315f19f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterHighPass.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterHighPass.cs new file mode 100644 index 0000000..af9a6cf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterHighPass.cs @@ -0,0 +1,98 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the cutoff frequency of a high pass filter. You'll need a MMAudioFilterHighPassShaker on your filter. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/Audio Filter High Pass")] + [FeedbackHelp("This feedback lets you control a high pass audio filter over time. You'll need a MMAudioFilterHighPassShaker on your filter.")] + public class MMF_AudioFilterHighPass : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("High Pass Filter", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeHighPass = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeHighPass = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.5f, 1f), new Keyframe(1, 0f)); + /// the value to remap the curve's 0 to + [Range(10f, 22000f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapHighPassZero = 0f; + /// the value to remap the curve's 1 to + [Range(10f, 22000f)] + [Tooltip("the value to remap the curve's 1 to")] + public float RemapHighPassOne = 10000f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMAudioFilterHighPassShakeEvent.Trigger(ShakeHighPass, FeedbackDuration, RemapHighPassZero, RemapHighPassOne, RelativeHighPass, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMAudioFilterHighPassShakeEvent.Trigger(ShakeHighPass, FeedbackDuration, RemapHighPassZero, RemapHighPassOne, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioFilterHighPassShakeEvent.Trigger(ShakeHighPass, FeedbackDuration, RemapHighPassZero, RemapHighPassOne, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterHighPass.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterHighPass.cs.meta new file mode 100644 index 0000000..4e5e980 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterHighPass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1398e413230465419066aaaf13ffe1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterLowPass.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterLowPass.cs new file mode 100644 index 0000000..6fbf3a3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterLowPass.cs @@ -0,0 +1,100 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the cutoff frequency of a low pass filter. You'll need a MMAudioFilterLowPassShaker on your filter. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/Audio Filter Low Pass")] + [FeedbackHelp( + "This feedback lets you control a low pass audio filter over time. You'll need a MMAudioFilterLowPassShaker on your filter.")] + public class MMF_AudioFilterLowPass : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Low Pass Filter", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeLowPass = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeLowPass = new AnimationCurve(new Keyframe(0, 1f), new Keyframe(0.5f, 0f), new Keyframe(1, 1f)); + /// the value to remap the curve's 0 to + [Range(10f, 22000f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapLowPassZero = 0f; + /// the value to remap the curve's 1 to + [Range(10f, 22000f)] + [Tooltip("the value to remap the curve's 1 to")] + public float RemapLowPassOne = 10000f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMAudioFilterLowPassShakeEvent.Trigger(ShakeLowPass, FeedbackDuration, RemapLowPassZero, RemapLowPassOne, RelativeLowPass, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMAudioFilterLowPassShakeEvent.Trigger(ShakeLowPass, FeedbackDuration, RemapLowPassZero, RemapLowPassOne, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioFilterLowPassShakeEvent.Trigger(ShakeLowPass, FeedbackDuration, RemapLowPassZero, RemapLowPassOne, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterLowPass.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterLowPass.cs.meta new file mode 100644 index 0000000..b9467be --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterLowPass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6112045d35430d84797f5786482c0129 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterReverb.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterReverb.cs new file mode 100644 index 0000000..57c0857 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterReverb.cs @@ -0,0 +1,100 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the reverb level of a reverb filter. You'll need a MMAudioFilterReverbShaker on your filter. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/Audio Filter Reverb")] + [FeedbackHelp( + "This feedback lets you control a low pass audio filter over time. You'll need a MMAudioFilterReverbShaker on your filter.")] + public class MMF_AudioFilterReverb : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Reverb Filter", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeReverb = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeReverb = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.5f, 1f), new Keyframe(1, 0f)); + /// the value to remap the curve's 0 to + [Range(-10000f, 2000f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapReverbZero = -10000f; + /// the value to remap the curve's 1 to + [Range(-10000f, 2000f)] + [Tooltip("the value to remap the curve's 1 to")] + public float RemapReverbOne = 2000f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMAudioFilterReverbShakeEvent.Trigger(ShakeReverb, FeedbackDuration, RemapReverbZero, RemapReverbOne, RelativeReverb, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMAudioFilterReverbShakeEvent.Trigger(ShakeReverb, FeedbackDuration, RemapReverbZero, RemapReverbOne, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioFilterReverbShakeEvent.Trigger(ShakeReverb, FeedbackDuration, RemapReverbZero, RemapReverbOne, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterReverb.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterReverb.cs.meta new file mode 100644 index 0000000..ad90a26 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioFilterReverb.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb2fb44761e9da645a012cd87424fc10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioMixerSnapshotTransition.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioMixerSnapshotTransition.cs new file mode 100644 index 0000000..de98e0d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioMixerSnapshotTransition.cs @@ -0,0 +1,72 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you transition to a target AudioMixer Snapshot over a specified time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you transition to a target AudioMixer Snapshot over a specified time")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/AudioMixer Snapshot Transition")] + public class MMF_AudioMixerSnapshotTransition : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return ((TargetSnapshot == null) || (OriginalSnapshot == null)); } + public override string RequiredTargetText { get { return ((TargetSnapshot != null) && (OriginalSnapshot != null)) ? TargetSnapshot.name + " to "+ OriginalSnapshot.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that both a OriginalSnapshot and TargetSnapshot be set to be able to work properly. You can set these below."; } } + #endif + + [MMFInspectorGroup("AudioMixer Snapshot", true, 44)] + /// the target audio mixer snapshot we want to transition to + [Tooltip("the target audio mixer snapshot we want to transition to")] + public AudioMixerSnapshot TargetSnapshot; + /// the audio mixer snapshot we want to transition from, optional, only needed if you plan to play this feedback in reverse + [Tooltip("the audio mixer snapshot we want to transition from, optional, only needed if you plan to play this feedback in reverse")] + public AudioMixerSnapshot OriginalSnapshot; + /// the duration, in seconds, over which to transition to the selected snapshot + [Tooltip("the duration, in seconds, over which to transition to the selected snapshot")] + public float TransitionDuration = 1f; + + /// + /// On play we transition to the selected snapshot + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetSnapshot == null) + { + return; + } + + if (!NormalPlayDirection) + { + if (OriginalSnapshot != null) + { + OriginalSnapshot.TransitionTo(TransitionDuration); + } + else + { + TargetSnapshot.TransitionTo(TransitionDuration); + } + } + else + { + TargetSnapshot.TransitionTo(TransitionDuration); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioMixerSnapshotTransition.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioMixerSnapshotTransition.cs.meta new file mode 100644 index 0000000..4ae5ade --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioMixerSnapshotTransition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89f0c7ac1091bf24aa52fc37f6bbd307 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSource.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSource.cs new file mode 100644 index 0000000..11c42ee --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSource.cs @@ -0,0 +1,154 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/AudioSource")] + [FeedbackHelp("This feedback lets you play a target audio source, with some elements at random.")] + public class MMF_AudioSource : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override bool EvaluateRequiresSetup() { return (TargetAudioSource == null); } + public override string RequiredTargetText { get { return TargetAudioSource != null ? TargetAudioSource.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetAudioSource be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetAudioSource = FindAutomatedTarget(); + + /// the possible ways to interact with the audiosource + public enum Modes { Play, Pause, UnPause, Stop } + + [MMFInspectorGroup("Audiosource", true, 28, true)] + /// the target audio source to play + [Tooltip("the target audio source to play")] + public AudioSource TargetAudioSource; + /// whether we should play the audio source or stop it or pause it + [Tooltip("whether we should play the audio source or stop it or pause it")] + public Modes Mode = Modes.Play; + + [Header("Random Sound")] + /// an array to pick a random sfx from + [Tooltip("an array to pick a random sfx from")] + public AudioClip[] RandomSfx; + + [MMFInspectorGroup("Audio Settings", true, 29)] + + [Header("Volume")] + /// the minimum volume to play the sound at + [Tooltip("the minimum volume to play the sound at")] + public float MinVolume = 1f; + /// the maximum volume to play the sound at + [Tooltip("the maximum volume to play the sound at")] + public float MaxVolume = 1f; + + [Header("Pitch")] + /// the minimum pitch to play the sound at + [Tooltip("the minimum pitch to play the sound at")] + public float MinPitch = 1f; + /// the maximum pitch to play the sound at + [Tooltip("the maximum pitch to play the sound at")] + public float MaxPitch = 1f; + + [Header("Mixer")] + /// the audiomixer to play the sound with (optional) + [Tooltip("the audiomixer to play the sound with (optional)")] + public AudioMixerGroup SfxAudioMixerGroup; + + /// the duration of this feedback is the duration of the clip being played + public override float FeedbackDuration { get { return _duration; } set { _duration = value; } } + + protected AudioClip _randomClip; + protected float _duration; + + /// + /// Plays either a random sound or the specified sfx + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + switch(Mode) + { + case Modes.Play: + if (RandomSfx.Length > 0) + { + _randomClip = RandomSfx[Random.Range(0, RandomSfx.Length)]; + TargetAudioSource.clip = _randomClip; + } + float volume = Random.Range(MinVolume, MaxVolume) * intensityMultiplier; + float pitch = Random.Range(MinPitch, MaxPitch); + _duration = TargetAudioSource.clip.length; + PlayAudioSource(TargetAudioSource, volume, pitch); + break; + + case Modes.Pause: + _duration = 0.1f; + TargetAudioSource.Pause(); + break; + + case Modes.UnPause: + _duration = 0.1f; + TargetAudioSource.UnPause(); + break; + + case Modes.Stop: + _duration = 0.1f; + TargetAudioSource.Stop(); + break; + } + } + + /// + /// Plays the audiosource at the selected volume and pitch + /// + /// + /// + /// + protected virtual void PlayAudioSource(AudioSource audioSource, float volume, float pitch) + { + // we set the audio source volume to the one in parameters + audioSource.volume = volume; + audioSource.pitch = pitch; + audioSource.timeSamples = 0; + + if (!NormalPlayDirection) + { + audioSource.pitch = -1; + audioSource.timeSamples = audioSource.clip.samples - 1; + } + + // we start playing the sound + audioSource.Play(); + } + + /// + /// Stops the audiosource from playing + /// + /// + /// + public override void Stop(Vector3 position, float feedbacksIntensity = 1.0f) + { + base.Stop(position, feedbacksIntensity); + if (TargetAudioSource != null) + { + TargetAudioSource?.Stop(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSource.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSource.cs.meta new file mode 100644 index 0000000..fa4744f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d6b34f746558214f8be920b214b567e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourcePitch.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourcePitch.cs new file mode 100644 index 0000000..5095dd7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourcePitch.cs @@ -0,0 +1,98 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the pitch of an AudioSource over time + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/AudioSource Pitch")] + [FeedbackHelp("This feedback lets you control the pitch of a target AudioSource over time.")] + public class MMF_AudioSourcePitch : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("AudioSource Pitch", true, 77)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativePitch = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve PitchTween = new AnimationCurve(new Keyframe(0, 1f), new Keyframe(0.5f, 0f), new Keyframe(1, 1f)); + /// the value to remap the curve's 0 to + [Range(-3f, 3f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapPitchZero = 0f; + /// the value to remap the curve's 1 to + [Range(-3f, 3f)] + [Tooltip("the value to remap the curve's 1 to")] + public float RemapPitchOne = 1f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMAudioSourcePitchShakeEvent.Trigger(PitchTween, FeedbackDuration, RemapPitchZero, RemapPitchOne, RelativePitch, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMAudioSourcePitchShakeEvent.Trigger(PitchTween, FeedbackDuration, RemapPitchZero, RemapPitchOne, RelativePitch, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioSourcePitchShakeEvent.Trigger(PitchTween, FeedbackDuration, RemapPitchZero, RemapPitchOne, RelativePitch, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourcePitch.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourcePitch.cs.meta new file mode 100644 index 0000000..b6b1d7b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourcePitch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a5f5fa0a0eb12242b82f5e32e147334 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceStereoPan.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceStereoPan.cs new file mode 100644 index 0000000..e7a18ce --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceStereoPan.cs @@ -0,0 +1,99 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the stereo pan of a target AudioSource over time. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/AudioSource Stereo Pan")] + [FeedbackHelp("This feedback lets you control the stereo pan of a target AudioSource over time.")] + public class MMF_AudioSourceStereoPan : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("AudioSource Stereo Pan", true, 48)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeStereoPan = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeStereoPan = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.3f, 1f), new Keyframe(0.6f, -1f), new Keyframe(1, 0f)); + /// the value to remap the curve's 0 to + [Range(-1f, 1f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapStereoPanZero = 0f; + /// the value to remap the curve's 1 to + [Range(-1f, 1f)] + [Tooltip("the value to remap the curve's 1 to")] + public float RemapStereoPanOne = 1f; + + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMAudioSourceStereoPanShakeEvent.Trigger(ShakeStereoPan, FeedbackDuration, RemapStereoPanZero, RemapStereoPanOne, RelativeStereoPan, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMAudioSourceStereoPanShakeEvent.Trigger(ShakeStereoPan, FeedbackDuration, RemapStereoPanZero, RemapStereoPanOne, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioSourceStereoPanShakeEvent.Trigger(ShakeStereoPan, FeedbackDuration, RemapStereoPanZero, RemapStereoPanOne, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceStereoPan.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceStereoPan.cs.meta new file mode 100644 index 0000000..ebf9119 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceStereoPan.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1d30844a1ef58b4f8e34a359c02ccd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceVolume.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceVolume.cs new file mode 100644 index 0000000..706bdf6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceVolume.cs @@ -0,0 +1,98 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the volume of a target AudioSource over time. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Audio/AudioSource Volume")] + [FeedbackHelp("This feedback lets you control the volume of a target AudioSource over time.")] + public class MMF_AudioSourceVolume : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("AudioSource Volume", true, 87)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeVolume = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve VolumeTween = new AnimationCurve(new Keyframe(0, 1f), new Keyframe(0.5f, 0f), new Keyframe(1, 1f)); + /// the value to remap the curve's 0 to + [Range(-1f, 1f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapVolumeZero = 0f; + /// the value to remap the curve's 1 to + [Range(-1f, 1f)] + [Tooltip("the value to remap the curve's 1 to")] + public float RemapVolumeOne = 1f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMAudioSourceVolumeShakeEvent.Trigger(VolumeTween, FeedbackDuration, RemapVolumeZero, RemapVolumeOne, RelativeVolume, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMAudioSourceVolumeShakeEvent.Trigger(VolumeTween, FeedbackDuration, RemapVolumeZero, RemapVolumeOne, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMAudioSourceVolumeShakeEvent.Trigger(VolumeTween, FeedbackDuration, RemapVolumeZero, RemapVolumeOne, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceVolume.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceVolume.cs.meta new file mode 100644 index 0000000..8ea6ea5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_AudioSourceVolume.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d02d555b253bdc24e98b4e6bc088c59c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraClippingPlanes.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraClippingPlanes.cs new file mode 100644 index 0000000..816112b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraClippingPlanes.cs @@ -0,0 +1,115 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control a camera's clipping planes over time. You'll need a MMCameraClippingPlanesShaker on your camera. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Camera/Clipping Planes")] + [FeedbackHelp("This feedback lets you control a camera's clipping planes over time. You'll need a MMCameraClippingPlanesShaker on your camera.")] + public class MMF_CameraClippingPlanes : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Clipping Planes", true, 52)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeClippingPlanes = false; + + [MMFInspectorGroup("Near Plane", true, 53)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeNear = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapNearZero = 0.01f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapNearOne = 6.25f; + + [MMFInspectorGroup("Far Plane", true, 54)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeFar = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFarZero = 1000f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFarOne = 5000f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + feedbacksIntensity = ComputeIntensity(feedbacksIntensity, position); + + MMCameraClippingPlanesShakeEvent.Trigger(ShakeNear, FeedbackDuration, RemapNearZero, RemapNearOne, + ShakeFar, RemapFarZero, RemapFarOne, + RelativeClippingPlanes, + feedbacksIntensity, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMCameraClippingPlanesShakeEvent.Trigger(ShakeNear, FeedbackDuration, RemapNearZero, RemapNearOne, + ShakeFar, RemapFarZero, RemapFarOne, stop: true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMCameraClippingPlanesShakeEvent.Trigger(ShakeNear, FeedbackDuration, RemapNearZero, RemapNearOne, + ShakeFar, RemapFarZero, RemapFarOne, restore: true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraClippingPlanes.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraClippingPlanes.cs.meta new file mode 100644 index 0000000..344e4eb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraClippingPlanes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b76fc03c4a7392642aa1edd7647ffdac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraFieldOfView.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraFieldOfView.cs new file mode 100644 index 0000000..69e3576 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraFieldOfView.cs @@ -0,0 +1,155 @@ +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control a camera's field of view over time. You'll need a MMCameraFieldOfViewShaker on your camera. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Camera/Field of View")] + [FeedbackHelp( + "This feedback lets you control a camera's field of view over time. You'll need a MMCameraFieldOfViewShaker on your camera.")] + public class MMF_CameraFieldOfView : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor => MMFeedbacksInspectorColors.CameraColor; + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration + { + get { return ApplyTimeMultiplier(Duration); } + set { Duration = value; } + } + + public override bool HasChannel => true; + public override bool CanForceInitialValue => true; + public override bool ForceInitialValueDelayed => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Field of View", true, 37)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeFieldOfView = false; + + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeFieldOfView = + new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] [Range(0f, 179f)] + public float RemapFieldOfViewZero = 60f; + + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] [Range(0f, 179f)] + public float RemapFieldOfViewOne = 120f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMCameraFieldOfViewShakeEvent.Trigger(ShakeFieldOfView, FeedbackDuration, RemapFieldOfViewZero, + RemapFieldOfViewOne, RelativeFieldOfView, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, + NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + MMCameraFieldOfViewShakeEvent.Trigger(ShakeFieldOfView, FeedbackDuration, RemapFieldOfViewZero, + RemapFieldOfViewOne, stop: true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMCameraFieldOfViewShakeEvent.Trigger(ShakeFieldOfView, FeedbackDuration, RemapFieldOfViewZero, + RemapFieldOfViewOne, restore: true); + } + + /// + /// Automatically tries to add a MMCameraFieldOfViewShaker to the main camera, if none are present + /// + public override void AutomaticShakerSetup() + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + bool virtualCameraFound = false; + #endif + + #if MMCINEMACHINE + CinemachineVirtualCamera virtualCamera = (CinemachineVirtualCamera)Object.FindObjectOfType(typeof(CinemachineVirtualCamera)); + virtualCameraFound = (virtualCamera != null); + #elif MMCINEMACHINE3 + CinemachineCamera virtualCamera = (CinemachineCamera)Object.FindObjectOfType(typeof(CinemachineCamera)); + virtualCameraFound = (virtualCamera != null); + #endif + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (virtualCameraFound) + { + MMCinemachineHelpers.AutomaticCinemachineShakersSetup(Owner, "CinemachineImpulse"); + return; + } + #endif + + MMCameraFieldOfViewShaker fieldOfViewShaker = (MMCameraFieldOfViewShaker)Object.FindObjectOfType(typeof(MMCameraFieldOfViewShaker)); + if (fieldOfViewShaker != null) + { + return; + } + + Camera.main.gameObject.MMGetOrAddComponent(); + MMDebug.DebugLogInfo( "Added a MMCameraFieldOfViewShaker to the main camera. You're all set."); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraFieldOfView.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraFieldOfView.cs.meta new file mode 100644 index 0000000..b001498 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraFieldOfView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6313950da8f5bbf459733aed2e327e0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraOrthographicSize.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraOrthographicSize.cs new file mode 100644 index 0000000..dffd78d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraOrthographicSize.cs @@ -0,0 +1,136 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control a camera's orthographic size over time. You'll need a MMCameraOrthographicSizeShaker on your camera. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Camera/Orthographic Size")] + [FeedbackHelp("This feedback lets you control a camera's orthographic size over time. You'll need a MMCameraOrthographicSizeShaker on your camera.")] + public class MMF_CameraOrthographicSize : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor => MMFeedbacksInspectorColors.CameraColor; + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + + [MMFInspectorGroup("Orthographic Size", true, 41)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeOrthographicSize = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeOrthographicSize = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapOrthographicSizeZero = 5f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapOrthographicSizeOne = 10f; + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMCameraOrthographicSizeShakeEvent.Trigger(ShakeOrthographicSize, FeedbackDuration, RemapOrthographicSizeZero, RemapOrthographicSizeOne, RelativeOrthographicSize, + feedbacksIntensity, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMCameraOrthographicSizeShakeEvent.Trigger(ShakeOrthographicSize, FeedbackDuration, + RemapOrthographicSizeZero, RemapOrthographicSizeOne, stop: true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMCameraOrthographicSizeShakeEvent.Trigger(ShakeOrthographicSize, FeedbackDuration, + RemapOrthographicSizeZero, RemapOrthographicSizeOne, restore: true); + } + + /// + /// Automatically tries to add a MMCameraFieldOfViewShaker to the main camera, if none are present + /// + public override void AutomaticShakerSetup() + { + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + bool virtualCameraFound = false; + #endif + + #if MMCINEMACHINE + CinemachineVirtualCamera virtualCamera = (CinemachineVirtualCamera)Object.FindObjectOfType(typeof(CinemachineVirtualCamera)); + virtualCameraFound = (virtualCamera != null); + #elif MMCINEMACHINE3 + CinemachineCamera virtualCamera = (CinemachineCamera)Object.FindObjectOfType(typeof(CinemachineCamera)); + virtualCameraFound = (virtualCamera != null); + #endif + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (virtualCameraFound) + { + MMCinemachineHelpers.AutomaticCinemachineShakersSetup(Owner, "CinemachineImpulse"); + return; + } + #endif + + MMCameraOrthographicSizeShaker orthographicSizeShaker = (MMCameraOrthographicSizeShaker)Object.FindObjectOfType(typeof(MMCameraOrthographicSizeShaker)); + if (orthographicSizeShaker != null) + { + return; + } + + Camera.main.gameObject.MMGetOrAddComponent(); + MMDebug.DebugLogInfo( "Added a MMCameraOrthographicSizeShaker to the main camera. You're all set."); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraOrthographicSize.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraOrthographicSize.cs.meta new file mode 100644 index 0000000..7b4e673 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraOrthographicSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a5c04124f3de9c4c99bc8ccccb85f21 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraShake.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraShake.cs new file mode 100644 index 0000000..6013efe --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraShake.cs @@ -0,0 +1,116 @@ +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will send a shake event when played + /// + [AddComponentMenu("")] + [FeedbackHelp("Define camera shake properties (duration in seconds, amplitude and frequency), and this will broadcast a MMCameraShakeEvent with these same settings. " + + "You'll need to add a MMCameraShaker on your camera for this to work (or a MMCinemachineCameraShaker component on your virtual camera if you're using Cinemachine). " + + "Note that although this event and system was built for cameras in mind, you could technically use it to shake other objects as well.")] + [FeedbackPath("Camera/Camera Shake")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + public class MMF_CameraShake : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(CameraShakeProperties.Duration); } set { CameraShakeProperties.Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Camera Shake", true, 57)] + /// whether or not this shake should repeat forever, until stopped + [Tooltip("whether or not this shake should repeat forever, until stopped")] + public bool RepeatUntilStopped = false; + /// the properties of the shake (duration, intensity, frequenc) + [Tooltip("the properties of the shake (duration, intensity, frequenc)")] + public MMCameraShakeProperties CameraShakeProperties = new MMCameraShakeProperties(0.1f, 0.2f, 40f); + + /// + /// On Play, sends a shake camera event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMCameraShakeEvent.Trigger(FeedbackDuration, CameraShakeProperties.Amplitude * intensityMultiplier, CameraShakeProperties.Frequency, + CameraShakeProperties.AmplitudeX * intensityMultiplier, CameraShakeProperties.AmplitudeY * intensityMultiplier, CameraShakeProperties.AmplitudeZ * intensityMultiplier, + RepeatUntilStopped, ChannelData, ComputedTimescaleMode == TimescaleModes.Unscaled); + } + + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMCameraShakeStopEvent.Trigger(ChannelData); + } + + /// + /// Automatically tries to add a camera rig if none are present + /// + public override void AutomaticShakerSetup() + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + bool virtualCameraFound = false; + #endif + + #if MMCINEMACHINE + CinemachineVirtualCamera virtualCamera = (CinemachineVirtualCamera)Object.FindObjectOfType(typeof(CinemachineVirtualCamera)); + virtualCameraFound = (virtualCamera != null); + #elif MMCINEMACHINE3 + CinemachineCamera virtualCamera = (CinemachineCamera)Object.FindObjectOfType(typeof(CinemachineCamera)); + virtualCameraFound = (virtualCamera != null); + #endif + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (virtualCameraFound) + { + MMCinemachineHelpers.AutomaticCinemachineShakersSetup(Owner, "CinemachineImpulse"); + return; + } + #endif + + MMCameraShaker camShaker = (MMCameraShaker)Object.FindObjectOfType(typeof(MMCameraShaker)); + if (camShaker != null) + { + return; + } + + GameObject cameraRig = new GameObject("CameraRig"); + cameraRig.transform.position = Camera.main.transform.position; + GameObject cameraShaker = new GameObject("CameraShaker"); + cameraShaker.transform.SetParent(cameraRig.transform); + cameraShaker.transform.localPosition = Vector3.zero; + cameraShaker.AddComponent(); + MMWiggle wiggle = cameraShaker.GetComponent(); + wiggle.PositionActive = true; + wiggle.PositionWiggleProperties = new WiggleProperties(); + wiggle.PositionWiggleProperties.WigglePermitted = false; + wiggle.PositionWiggleProperties.WiggleType = WiggleTypes.Noise; + Camera.main.transform.SetParent(cameraShaker.transform); + + MMDebug.DebugLogInfo( "Added a CameraRig to the main camera. You're all set."); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraShake.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraShake.cs.meta new file mode 100644 index 0000000..7a868c3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraShake.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3cc2a6a2ccbc204299038009e15eb65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraZoom.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraZoom.cs new file mode 100644 index 0000000..45f03b8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraZoom.cs @@ -0,0 +1,136 @@ +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback that will allow you to change the zoom of a (3D) camera when played + /// + [AddComponentMenu("")] + [FeedbackHelp("Define zoom properties : For will set the zoom to the specified parameters for a certain duration, " + + "Set will leave them like that forever. Zoom properties include the field of view, the duration of the " + + "zoom transition (in seconds) and the zoom duration (the time the camera should remain zoomed in, in seconds). " + + "For this to work, you'll need to add a MMCameraZoom component to your Camera, or a MMCinemachineZoom if you're " + + "using virtual cameras.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Camera/Camera Zoom")] + public class MMF_CameraZoom : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the zoom + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ZoomDuration); } set { ZoomDuration = value; } } + public override bool HasChannel => true; + public override bool CanForceInitialValue => true; + + [MMFInspectorGroup("Camera Zoom", true, 72)] + /// the zoom mode (for : forward for TransitionDuration, static for Duration, backwards for TransitionDuration) + [Tooltip("the zoom mode (for : forward for TransitionDuration, static for Duration, backwards for TransitionDuration)")] + public MMCameraZoomModes ZoomMode = MMCameraZoomModes.For; + /// the target field of view + [Tooltip("the target field of view")] + public float ZoomFieldOfView = 30f; + /// the zoom transition duration + [Tooltip("the zoom transition duration")] + public float ZoomTransitionDuration = 0.05f; + /// the duration for which the zoom is at max zoom + [Tooltip("the duration for which the zoom is at max zoom")] + public float ZoomDuration = 0.1f; + /// whether or not ZoomFieldOfView should add itself to the current camera's field of view value + [Tooltip("whether or not ZoomFieldOfView should add itself to the current camera's field of view value")] + public bool RelativeFieldOfView = false; + [Header("Transition Speed")] + /// the animation curve to apply to the zoom transition + [Tooltip("the animation curve to apply to the zoom transition")] + public MMTweenType ZoomTween = new MMTweenType( new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f))); + + /// + /// On Play, triggers a zoom event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMCameraZoomEvent.Trigger(ZoomMode, ZoomFieldOfView, ZoomTransitionDuration, FeedbackDuration, ChannelData, + ComputedTimescaleMode == TimescaleModes.Unscaled, false, RelativeFieldOfView, tweenType: ZoomTween); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMCameraZoomEvent.Trigger(ZoomMode, ZoomFieldOfView, ZoomTransitionDuration, FeedbackDuration, ChannelData, + ComputedTimescaleMode == TimescaleModes.Unscaled, stop:true, tweenType: ZoomTween); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMCameraZoomEvent.Trigger(ZoomMode, ZoomFieldOfView, ZoomTransitionDuration, FeedbackDuration, ChannelData, + ComputedTimescaleMode == TimescaleModes.Unscaled, restore:true, tweenType: ZoomTween); + } + + /// + /// Automatically tries to add a MMCameraZoom to the main camera, if none are present + /// + public override void AutomaticShakerSetup() + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + bool virtualCameraFound = false; + #endif + + #if MMCINEMACHINE + CinemachineVirtualCamera virtualCamera = (CinemachineVirtualCamera)Object.FindObjectOfType(typeof(CinemachineVirtualCamera)); + virtualCameraFound = (virtualCamera != null); + #elif MMCINEMACHINE3 + CinemachineCamera virtualCamera = (CinemachineCamera)Object.FindObjectOfType(typeof(CinemachineCamera)); + virtualCameraFound = (virtualCamera != null); + #endif + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (virtualCameraFound) + { + MMCinemachineHelpers.AutomaticCinemachineShakersSetup(Owner, "CinemachineImpulse"); + return; + } + #endif + + MMCameraZoom camZoom = (MMCameraZoom)Object.FindObjectOfType(typeof(MMCameraZoom)); + if (camZoom != null) + { + return; + } + + Camera.main.gameObject.MMGetOrAddComponent(); + MMDebug.DebugLogInfo( "Added a MMCameraZoom to the main camera. You're all set."); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraZoom.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraZoom.cs.meta new file mode 100644 index 0000000..f5d1277 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CameraZoom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 258c18f9cd813e644ad4c42e5b4f0d02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CanvasGroupBlocksRaycasts.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CanvasGroupBlocksRaycasts.cs new file mode 100644 index 0000000..756d283 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CanvasGroupBlocksRaycasts.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine;using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you turn the BlocksRaycast parameter of a target CanvasGroup on or off on play + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you turn the BlocksRaycast parameter of a target CanvasGroup on or off on play")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/CanvasGroup BlocksRaycasts")] + public class MMF_CanvasGroupBlocksRaycasts : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetCanvasGroup == null); } + public override string RequiredTargetText { get { return TargetCanvasGroup != null ? TargetCanvasGroup.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetCanvasGroup be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetCanvasGroup = FindAutomatedTarget(); + + [MMFInspectorGroup("Block Raycasts", true, 54, true)] + /// the target canvas group we want to control the BlocksRaycasts parameter on + [Tooltip("the target canvas group we want to control the BlocksRaycasts parameter on")] + public CanvasGroup TargetCanvasGroup; + /// if this is true, on play, the target canvas group will block raycasts, if false it won't + [Tooltip("if this is true, on play, the target canvas group will block raycasts, if false it won't")] + public bool ShouldBlockRaycasts = true; + + protected bool _initialState; + + /// + /// On play we turn raycast block on or off + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetCanvasGroup == null) + { + return; + } + + _initialState = TargetCanvasGroup.blocksRaycasts; + TargetCanvasGroup.blocksRaycasts = ShouldBlockRaycasts; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetCanvasGroup.blocksRaycasts = _initialState; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CanvasGroupBlocksRaycasts.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CanvasGroupBlocksRaycasts.cs.meta new file mode 100644 index 0000000..a247c5a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_CanvasGroupBlocksRaycasts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d3188dd93bc22141a98ee77523b7853 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider.cs new file mode 100644 index 0000000..b0701ec --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you enable/disable/toggle a target collider, or change its trigger status + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you enable/disable/toggle a target collider, or change its trigger status")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("GameObject/Collider")] + public class MMF_Collider : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (TargetCollider == null); } + public override string RequiredTargetText { get { return TargetCollider != null ? TargetCollider.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetCollider be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetCollider = FindAutomatedTarget(); + + /// the possible effects the feedback can have on the target collider's status + public enum Modes { Enable, Disable, ToggleActive, Trigger, NonTrigger, ToggleTrigger } + + [MMFInspectorGroup("Collider", true, 12, true)] + /// the collider to act upon + [Tooltip("the collider to act upon")] + public Collider TargetCollider; + /// the effect the feedback will have on the target collider's status + public Modes Mode = Modes.Disable; + + protected bool _initialState; + + /// + /// On Play we change the state of our collider if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (TargetCollider != null) + { + ApplyChanges(Mode); + } + } + + /// + /// Changes the state of the collider + /// + /// + protected virtual void ApplyChanges(Modes mode) + { + switch (mode) + { + case Modes.Enable: + _initialState = TargetCollider.enabled; + TargetCollider.enabled = true; + break; + case Modes.Disable: + _initialState = TargetCollider.enabled; + TargetCollider.enabled = false; + break; + case Modes.ToggleActive: + _initialState = TargetCollider.enabled; + TargetCollider.enabled = !TargetCollider.enabled; + break; + case Modes.Trigger: + _initialState = TargetCollider.isTrigger; + TargetCollider.isTrigger = true; + break; + case Modes.NonTrigger: + _initialState = TargetCollider.isTrigger; + TargetCollider.isTrigger = false; + break; + case Modes.ToggleTrigger: + _initialState = TargetCollider.isTrigger; + TargetCollider.isTrigger = !TargetCollider.isTrigger; + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (Mode) + { + case Modes.Enable: + TargetCollider.enabled = _initialState; + break; + case Modes.Disable: + TargetCollider.enabled = _initialState; + break; + case Modes.ToggleActive: + TargetCollider.enabled = _initialState; + break; + case Modes.Trigger: + TargetCollider.isTrigger = _initialState; + break; + case Modes.NonTrigger: + TargetCollider.isTrigger = _initialState; + break; + case Modes.ToggleTrigger: + TargetCollider.isTrigger = _initialState; + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider.cs.meta new file mode 100644 index 0000000..667e2c5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eba8f600b11482740a9ae555e6cd1ea9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider2D.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider2D.cs new file mode 100644 index 0000000..0ebc4de --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider2D.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you enable/disable/toggle a target collider 2D, or change its trigger status + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you enable/disable/toggle a target collider 2D, or change its trigger status")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("GameObject/Collider2D")] + public class MMF_Collider2D : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (TargetCollider2D == null); } + public override string RequiredTargetText { get { return TargetCollider2D != null ? TargetCollider2D.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetCollider2D be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetCollider2D = FindAutomatedTarget(); + + /// the possible effects the feedback can have on the target collider's status + public enum Modes { Enable, Disable, ToggleActive, Trigger, NonTrigger, ToggleTrigger } + + [MMFInspectorGroup("Collider 2D", true, 12, true)] + /// the collider to act upon + [Tooltip("the collider to act upon")] + public Collider2D TargetCollider2D; + /// the effect the feedback will have on the target collider's status + public Modes Mode = Modes.Disable; + + protected bool _initialState; + + /// + /// On Play we change the state of our collider if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetCollider2D == null)) + { + return; + } + ApplyChanges(Mode); + } + + /// + /// Changes the state of the collider + /// + /// + protected virtual void ApplyChanges(Modes mode) + { + switch (mode) + { + case Modes.Enable: + _initialState = TargetCollider2D.enabled; + TargetCollider2D.enabled = true; + break; + case Modes.Disable: + _initialState = TargetCollider2D.enabled; + TargetCollider2D.enabled = false; + break; + case Modes.ToggleActive: + _initialState = TargetCollider2D.enabled; + TargetCollider2D.enabled = !TargetCollider2D.enabled; + break; + case Modes.Trigger: + _initialState = TargetCollider2D.isTrigger; + TargetCollider2D.isTrigger = true; + break; + case Modes.NonTrigger: + _initialState = TargetCollider2D.isTrigger; + TargetCollider2D.isTrigger = false; + break; + case Modes.ToggleTrigger: + _initialState = TargetCollider2D.isTrigger; + TargetCollider2D.isTrigger = !TargetCollider2D.isTrigger; + break; + default: + throw new ArgumentOutOfRangeException(nameof(mode), mode, null); + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (Mode) + { + case Modes.Enable: + TargetCollider2D.enabled = _initialState; + break; + case Modes.Disable: + TargetCollider2D.enabled = _initialState; + break; + case Modes.ToggleActive: + TargetCollider2D.enabled = _initialState; + break; + case Modes.Trigger: + TargetCollider2D.isTrigger = _initialState; + break; + case Modes.NonTrigger: + TargetCollider2D.isTrigger = _initialState; + break; + case Modes.ToggleTrigger: + TargetCollider2D.isTrigger = _initialState; + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider2D.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider2D.cs.meta new file mode 100644 index 0000000..ca751ee --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Collider2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b117019c414540246a342a9d82792889 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_DestinationTransform.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_DestinationTransform.cs new file mode 100644 index 0000000..3520e4b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_DestinationTransform.cs @@ -0,0 +1,275 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you animate the position/rotation/scale of a target transform to match the one of a destination transform. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you animate the position/rotation/scale of a target transform to match the one of a destination transform.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Destination")] + public class MMF_DestinationTransform : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the possible timescales this feedback can animate on + public enum TimeScales { Scaled, Unscaled } + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (TargetTransform == null) || (Destination == null); } + public override string RequiredTargetText { get { return TargetTransform != null ? TargetTransform.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTransform and a Destination be set to be able to work properly. You can set one below."; } } + public override bool HasCustomInspectors { get { return true; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTransform = FindAutomatedTarget(); + + [MMFInspectorGroup("Target to animate", true, 61, true)] + /// the target transform we want to animate properties on + [Tooltip("the target transform we want to animate properties on")] + public Transform TargetTransform; + + /// whether or not we want to force an origin transform. If not, the current position of the target transform will be used as origin instead + [Tooltip("whether or not we want to force an origin transform. If not, the current position of the target transform will be used as origin instead")] + public bool ForceOrigin = false; + /// the transform to use as origin in ForceOrigin mode + [Tooltip("the transform to use as origin in ForceOrigin mode")] + [MMFCondition("ForceOrigin", true)] + public Transform Origin; + /// the destination transform whose properties we want to match + [Tooltip("the destination transform whose properties we want to match")] + public Transform Destination; + + [MMFInspectorGroup("Transition", true, 63)] + /// a global curve to animate all properties on, unless dedicated ones are specified + [Tooltip("a global curve to animate all properties on, unless dedicated ones are specified")] + public MMTweenType GlobalAnimationTween = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the duration of the transition, in seconds + [Tooltip("the duration of the transition, in seconds")] + public float Duration = 0.2f; + + [MMFInspectorGroup("Axis Locks", true, 64)] + + /// whether or not to animate the X position + [Tooltip("whether or not to animate the X Position")] + public bool AnimatePositionX = true; + /// whether or not to animate the Y position + [Tooltip("whether or not to animate the Y Position")] + public bool AnimatePositionY = true; + /// whether or not to animate the Z position + [Tooltip("whether or not to animate the Z Position")] + public bool AnimatePositionZ = true; + /// whether or not to animate the X rotation + [Tooltip("whether or not to animate the X rotation")] + public bool AnimateRotationX = true; + /// whether or not to animate the Y rotation + [Tooltip("whether or not to animate the Y rotation")] + public bool AnimateRotationY = true; + /// whether or not to animate the Z rotation + [Tooltip("whether or not to animate the Z rotation")] + public bool AnimateRotationZ = true; + /// whether or not to animate the W rotation + [Tooltip("whether or not to animate the W rotation")] + public bool AnimateRotationW = true; + /// whether or not to animate the X scale + [Tooltip("whether or not to animate the X scale")] + public bool AnimateScaleX = true; + /// whether or not to animate the Y scale + [Tooltip("whether or not to animate the Y scale")] + public bool AnimateScaleY = true; + /// whether or not to animate the Z scale + [Tooltip("whether or not to animate the Z scale")] + public bool AnimateScaleZ = true; + + [MMFInspectorGroup("Separate Curves", true, 65)] + /// whether or not to use a separate animation curve to animate the position + [Tooltip("whether or not to use a separate animation curve to animate the position")] + public bool SeparatePositionCurve = false; + /// the curve to use to animate the position on + [Tooltip("the curve to use to animate the position on")] + [MMFCondition("SeparatePositionCurve", true)] + public MMTweenType AnimatePositionTween = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + + /// whether or not to use a separate animation curve to animate the rotation + [Tooltip("whether or not to use a separate animation curve to animate the rotation")] + public bool SeparateRotationCurve = false; + /// the curve to use to animate the rotation on + [Tooltip("the curve to use to animate the rotation on")] + [MMFCondition("SeparateRotationCurve", true)] + public MMTweenType AnimateRotationTween = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + + /// whether or not to use a separate animation curve to animate the scale + [Tooltip("whether or not to use a separate animation curve to animate the scale")] + public bool SeparateScaleCurve = false; + /// the curve to use to animate the scale on + [Tooltip("the curve to use to animate the scale on")] + [MMFCondition("SeparateScaleCurve", true)] + public MMTweenType AnimateScaleTween = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + + /// the duration of this feedback is the duration of the movement + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + /// a global curve to animate all properties on, unless dedicated ones are specified + [HideInInspector] public AnimationCurve GlobalAnimationCurve = null; + /// the curve to use to animate the position on + [HideInInspector] public AnimationCurve AnimateScaleCurve = null; + /// the curve to use to animate the rotation on + [HideInInspector] public AnimationCurve AnimatePositionCurve = null; + /// the curve to use to animate the scale on + [HideInInspector] public AnimationCurve AnimateRotationCurve = null; + + protected Coroutine _coroutine; + protected Vector3 _newPosition; + protected Quaternion _newRotation; + protected Vector3 _newScale; + protected Vector3 _pointAPosition; + protected Vector3 _pointBPosition; + protected Quaternion _pointARotation; + protected Quaternion _pointBRotation; + protected Vector3 _pointAScale; + protected Vector3 _pointBScale; + protected MMTweenType _animationTweenType; + + protected Vector3 _initialPosition; + protected Vector3 _initialScale; + protected Quaternion _initialRotation; + + /// + /// On Play we animate the pos/rotation/scale of the target transform towards its destination + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetTransform == null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(AnimateToDestination()); + } + + /// + /// A coroutine used to animate the pos/rotation/scale of the target transform towards its destination + /// + /// + protected virtual IEnumerator AnimateToDestination() + { + _initialPosition = TargetTransform.position; + _initialRotation = TargetTransform.rotation; + _initialScale = TargetTransform.localScale; + + _pointAPosition = ForceOrigin ? Origin.transform.position : TargetTransform.position; + _pointBPosition = Destination.transform.position; + + if (!AnimatePositionX) { _pointAPosition.x = TargetTransform.position.x; _pointBPosition.x = _pointAPosition.x; } + if (!AnimatePositionY) { _pointAPosition.y = TargetTransform.position.y; _pointBPosition.y = _pointAPosition.y; } + if (!AnimatePositionZ) { _pointAPosition.z = TargetTransform.position.z; _pointBPosition.z = _pointAPosition.z; } + + _pointARotation = ForceOrigin ? Origin.transform.rotation : TargetTransform.rotation; + _pointBRotation = Destination.transform.rotation; + + if (!AnimateRotationX) { _pointARotation.x = TargetTransform.rotation.x; _pointBRotation.x = _pointARotation.x; } + if (!AnimateRotationY) { _pointARotation.y = TargetTransform.rotation.y; _pointBRotation.y = _pointARotation.y; } + if (!AnimateRotationZ) { _pointARotation.z = TargetTransform.rotation.z; _pointBRotation.z = _pointARotation.z; } + if (!AnimateRotationW) { _pointARotation.w = TargetTransform.rotation.w; _pointBRotation.w = _pointARotation.w; } + + _pointAScale = ForceOrigin ? Origin.transform.localScale : TargetTransform.localScale; + _pointBScale = Destination.transform.localScale; + + if (!AnimateScaleX) { _pointAScale.x = TargetTransform.localScale.x; _pointBScale.x = _pointAScale.x; } + if (!AnimateScaleY) { _pointAScale.y = TargetTransform.localScale.y; _pointBScale.y = _pointAScale.y; } + if (!AnimateScaleZ) { _pointAScale.z = TargetTransform.localScale.z; _pointBScale.z = _pointAScale.z; } + + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float percent = Mathf.Clamp01(journey / FeedbackDuration); + ChangeTransformValues(percent); + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + + // set final position + ChangeTransformValues(1f); + + IsPlaying = false; + _coroutine = null; + yield break; + } + + /// + /// Computes the new position, rotation and scale for our transform, and applies it to the transform + /// + /// + protected virtual void ChangeTransformValues(float percent) + { + _animationTweenType = SeparatePositionCurve ? AnimatePositionTween : GlobalAnimationTween; + _newPosition = Vector3.LerpUnclamped(_pointAPosition, _pointBPosition, _animationTweenType.Evaluate(percent)); + + _animationTweenType = SeparateRotationCurve ? AnimateRotationTween : GlobalAnimationTween; + _newRotation = Quaternion.LerpUnclamped(_pointARotation, _pointBRotation, _animationTweenType.Evaluate(percent)); + + _animationTweenType = SeparateScaleCurve ? AnimateScaleTween : GlobalAnimationTween; + _newScale = Vector3.LerpUnclamped(_pointAScale, _pointBScale, _animationTweenType.Evaluate(percent)); + + TargetTransform.position = _newPosition; + TargetTransform.rotation = _newRotation; + TargetTransform.localScale = _newScale; + } + + /// + /// On Stop we stop our coroutine if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + + if ((TargetTransform != null) && (_coroutine != null)) + { + Owner.StopCoroutine(_coroutine); + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetTransform.position = _initialPosition; + TargetTransform.rotation = _initialRotation; + TargetTransform.localScale = _initialScale; + } + + /// + /// On Validate, we migrate our deprecated animation curves to our tween types if needed + /// + public override void OnValidate() + { + base.OnValidate(); + MMFeedbacksHelpers.MigrateCurve(GlobalAnimationCurve, GlobalAnimationTween, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimatePositionCurve, AnimatePositionTween, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimateRotationCurve, AnimateRotationTween, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimateScaleCurve, AnimateScaleTween, Owner); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_DestinationTransform.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_DestinationTransform.cs.meta new file mode 100644 index 0000000..7da7e2b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_DestinationTransform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a22f321adcb1374cb909aee327ff9f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Destroy.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Destroy.cs new file mode 100644 index 0000000..327babd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Destroy.cs @@ -0,0 +1,101 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback allows you to destroy a target gameobject, either via Destroy, DestroyImmediate, or SetActive:False + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to destroy a target gameobject, either via Destroy, DestroyImmediate, or SetActive:False")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("GameObject/Destroy")] + public class MMF_Destroy : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (TargetGameObject == null); } + public override string RequiredTargetText { get { return TargetGameObject != null ? TargetGameObject.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetGameObject be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetGameObject = FindAutomatedTargetGameObject(); + + /// the possible ways to destroy an object + public enum Modes { Destroy, DestroyImmediate, Disable } + + [MMFInspectorGroup("Destruction", true, 18, true)] + /// the gameobject we want to change the active state of + [Tooltip("the game object we want to destroy")] + public GameObject TargetGameObject; + /// the optional list of extra gameobjects we want to change the active state of + [Tooltip("the optional list of extra gameobjects we want to change the active state of")] + public List ExtraTargetGameObjects; + + /// the selected destruction mode + [Tooltip("the selected destruction mode")] + public Modes Mode; + + protected bool _initialActiveState; + + /// + /// On Play we change the state of our Behaviour if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetGameObject == null)) + { + return; + } + ProceedWithDestruction(TargetGameObject); + foreach (GameObject go in ExtraTargetGameObjects) + { + ProceedWithDestruction(go); + } + } + + /// + /// Changes the status of the Behaviour + /// + /// + protected virtual void ProceedWithDestruction(GameObject go) + { + switch (Mode) + { + case Modes.Destroy: + Owner.ProxyDestroy(go); + break; + case Modes.DestroyImmediate: + Owner.ProxyDestroyImmediate(go); + break; + case Modes.Disable: + _initialActiveState = go.activeInHierarchy; + go.SetActive(false); + break; + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (Mode == Modes.Disable) + { + TargetGameObject.SetActive(_initialActiveState); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Destroy.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Destroy.cs.meta new file mode 100644 index 0000000..10cfd67 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Destroy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ed6dae7e25050744b45262d80b35bdf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Enable.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Enable.cs new file mode 100644 index 0000000..4869f87 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Enable.cs @@ -0,0 +1,196 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// Turns an object active or inactive at the various stages of the feedback + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to change the state of a behaviour on a target gameobject from active to inactive (or the opposite), on init, play, stop or reset. " + + "For each of these you can specify if you want to force a state (enabled or disabled), or toggle it (enabled becomes disabled, disabled becomes enabled).")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("GameObject/Enable Behaviour")] + public class MMF_Enable : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (TargetBehaviour == null); } + public override string RequiredTargetText { get { return TargetBehaviour != null ? TargetBehaviour.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetBehaviour be set to be able to work properly. You can set one below."; } } + #endif + + /// the possible effects the feedback can have on the target object's status + public enum PossibleStates { Enabled, Disabled, Toggle } + + [MMFInspectorGroup("Enable Target Monobehaviour", true, 86, true)] + /// the gameobject we want to change the active state of + [Tooltip("the gameobject we want to change the active state of")] + public Behaviour TargetBehaviour; + /// a list of extra gameobjects we want to change the active state of + [Tooltip("a list of extra gameobjects we want to change the active state of")] + public List ExtraTargetBehaviours; + /// whether or not we should alter the state of the target object on init + [Tooltip("whether or not we should alter the state of the target object on init")] + public bool SetStateOnInit = false; + /// how to change the state on init + [MMFCondition("SetStateOnInit", true)] + [Tooltip("how to change the state on init")] + public PossibleStates StateOnInit = PossibleStates.Disabled; + /// whether or not we should alter the state of the target object on play + [Tooltip("whether or not we should alter the state of the target object on play")] + public bool SetStateOnPlay = false; + /// how to change the state on play + [MMFCondition("SetStateOnPlay", true)] + [Tooltip("how to change the state on play")] + public PossibleStates StateOnPlay = PossibleStates.Disabled; + /// whether or not we should alter the state of the target object on stop + [Tooltip("whether or not we should alter the state of the target object on stop")] + public bool SetStateOnStop = false; + /// how to change the state on stop + [Tooltip("how to change the state on stop")] + [MMFCondition("SetStateOnStop", true)] + public PossibleStates StateOnStop = PossibleStates.Disabled; + /// whether or not we should alter the state of the target object on reset + [Tooltip("whether or not we should alter the state of the target object on reset")] + public bool SetStateOnReset = false; + /// how to change the state on reset + [Tooltip("how to change the state on reset")] + [MMFCondition("SetStateOnReset", true)] + public PossibleStates StateOnReset = PossibleStates.Disabled; + + protected bool _initialState; + + /// + /// On init we change the state of our Behaviour if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active && (TargetBehaviour != null)) + { + if (SetStateOnInit) + { + SetStatus(StateOnInit); + } + } + } + + /// + /// On Play we change the state of our Behaviour if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetBehaviour == null)) + { + return; + } + if (SetStateOnPlay) + { + SetStatus(StateOnPlay); + } + } + + /// + /// On Stop we change the state of our Behaviour if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (TargetBehaviour == null)) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + if (SetStateOnStop) + { + SetStatus(StateOnStop); + } + } + + /// + /// On Reset we change the state of our Behaviour if needed + /// + protected override void CustomReset() + { + base.CustomReset(); + + if (InCooldown) + { + return; + } + + if (!Active || !FeedbackTypeAuthorized || (TargetBehaviour == null)) + { + return; + } + + if (SetStateOnReset) + { + SetStatus(StateOnReset); + } + } + + /// + /// Changes the status of the Behaviour + /// + /// + protected virtual void SetStatus(PossibleStates state) + { + SetStatus(state, TargetBehaviour); + foreach (Behaviour extra in ExtraTargetBehaviours) + { + SetStatus(state, extra); + } + } + + /// + /// Sets the specified status on the target Behaviour + /// + /// + /// + protected virtual void SetStatus(PossibleStates state, Behaviour target) + { + _initialState = target.enabled; + switch (state) + { + case PossibleStates.Enabled: + target.enabled = NormalPlayDirection ? true : false; + break; + case PossibleStates.Disabled: + target.enabled = NormalPlayDirection ? false : true; + break; + case PossibleStates.Toggle: + target.enabled = !target.enabled; + break; + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + TargetBehaviour.enabled = _initialState; + foreach (Behaviour extra in ExtraTargetBehaviours) + { + extra.enabled = _initialState; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Enable.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Enable.cs.meta new file mode 100644 index 0000000..873a2d3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Enable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15fc18f096da54f4c9777f3cabf74f3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Events.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Events.cs new file mode 100644 index 0000000..8bd962c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Events.cs @@ -0,0 +1,93 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback to bind Unity events to and trigger them when played + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to bind any type of Unity events to this feebdack's Play, Stop, Initialization and Reset methods.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Events/Unity Events")] + public class MMF_Events : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.EventsColor; } } + #endif + + [MMFInspectorGroup("Events", true, 44)] + /// the events to trigger when the feedback is played + [Tooltip("the events to trigger when the feedback is played")] + public UnityEvent PlayEvents; + /// the events to trigger when the feedback is stopped + [Tooltip("the events to trigger when the feedback is stopped")] + public UnityEvent StopEvents; + /// the events to trigger when the feedback is initialized + [Tooltip("the events to trigger when the feedback is initialized")] + public UnityEvent InitializationEvents; + /// the events to trigger when the feedback is reset + [Tooltip("the events to trigger when the feedback is reset")] + public UnityEvent ResetEvents; + + /// + /// On init, triggers the init events + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active && (InitializationEvents != null)) + { + InitializationEvents.Invoke(); + } + } + + /// + /// On Play, triggers the play events + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (PlayEvents == null)) + { + return; + } + PlayEvents.Invoke(); + } + + /// + /// On Stop, triggers the stop events + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (StopEvents == null)) + { + return; + } + StopEvents.Invoke(); + } + + /// + /// On reset, triggers the reset events + /// + protected override void CustomReset() + { + if (!Active || !FeedbackTypeAuthorized || (ResetEvents == null)) + { + return; + } + base.CustomReset(); + ResetEvents.Invoke(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Events.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Events.cs.meta new file mode 100644 index 0000000..4dd09a4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Events.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 931b39b62e090af46bb775a436d4cb0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Feedbacks.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Feedbacks.cs new file mode 100644 index 0000000..558847a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Feedbacks.cs @@ -0,0 +1,112 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback allows you to trigger a target MMFeedbacks, or any MMFeedbacks on the specified Channel within a certain range. You'll need an MMFeedbacksShaker on them. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to trigger a target MMFeedbacks, or any MMFeedbacks on the specified Channel within a certain range. You'll need an MMFeedbacksShaker on them.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Feedbacks/Feedbacks Player")] + public class MMF_Feedbacks : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.FeedbacksColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// the duration of this feedback is the duration of our target feedback + public override float FeedbackDuration + { + get + { + if (TargetFeedbacks == Owner) + { + return 0f; + } + if ((Mode == Modes.PlayTargetFeedbacks) && (TargetFeedbacks != null)) + { + return TargetFeedbacks.TotalDuration; + } + else + { + return 0f; + } + } + } + public override bool HasChannel => true; + + public enum Modes { PlayFeedbacksInArea, PlayTargetFeedbacks } + + [MMFInspectorGroup("Feedbacks", true, 79)] + + /// the selected mode for this feedback + [Tooltip("the selected mode for this feedback")] + public Modes Mode = Modes.PlayFeedbacksInArea; + + /// a specific MMFeedbacks / MMF_Player to play + [MMFEnumCondition("Mode", (int)Modes.PlayTargetFeedbacks)] + [Tooltip("a specific MMFeedbacks / MMF_Player to play")] + public MMFeedbacks TargetFeedbacks; + + /// whether or not to use a range + [MMFEnumCondition("Mode", (int)Modes.PlayFeedbacksInArea)] + [Tooltip("whether or not to use a range")] + public bool OnlyTriggerPlayersInRange = false; + /// the range of the event, in units + [MMFEnumCondition("Mode", (int)Modes.PlayFeedbacksInArea)] + [Tooltip("the range of the event, in units")] + public float EventRange = 100f; + /// the transform to use to broadcast the event as origin point + [MMFEnumCondition("Mode", (int)Modes.PlayFeedbacksInArea)] + [Tooltip("the transform to use to broadcast the event as origin point")] + public Transform EventOriginTransform; + + /// + /// On init we turn the light off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (EventOriginTransform == null) + { + EventOriginTransform = owner.transform; + } + } + + /// + /// On Play we trigger our target feedback or trigger a feedback shake event to shake feedbacks in the area + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (TargetFeedbacks == Owner) + { + return; + } + + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (Mode == Modes.PlayFeedbacksInArea) + { + MMFeedbacksShakeEvent.Trigger(ChannelData, OnlyTriggerPlayersInRange, EventRange, EventOriginTransform.position); + } + else if (Mode == Modes.PlayTargetFeedbacks) + { + TargetFeedbacks?.PlayFeedbacks(position, feedbacksIntensity); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Feedbacks.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Feedbacks.cs.meta new file mode 100644 index 0000000..e3ee728 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Feedbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f665ed98106607d4a8be79b240b4a801 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flash.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flash.cs new file mode 100644 index 0000000..d3d8856 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flash.cs @@ -0,0 +1,131 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; +using UnityEngine.Serialization; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will trigger a flash event (to be caught by a MMFlash) when played + /// + [AddComponentMenu("")] + [FeedbackHelp("On play, this feedback will broadcast a MMFlashEvent. If you create a UI image with a MMFlash component on it (see example in the Demo scene), it will intercept that event, and flash (usually you'll want it to take the full size of your screen, but that's not mandatory). In the feedback's inspector, you can define the color of the flash, its duration, alpha, and a FlashID. That FlashID needs to be the same on your feedback and MMFlash for them to work together. This allows you to have multiple MMFlashs in your scene, and flash them separately.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Camera/Flash")] + public class MMF_Flash : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + /// the duration of this feedback is the duration of the flash + public override float FeedbackDuration { get { return ApplyTimeMultiplier(FlashDuration); } set { FlashDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Flash", true, 37)] + /// the color of the flash + [Tooltip("the color of the flash")] + public Color FlashColor = Color.white; + /// the flash duration (in seconds) + [Tooltip("the flash duration (in seconds)")] + public float FlashDuration = 0.2f; + /// the alpha of the flash + [Tooltip("the alpha of the flash")] + public float FlashAlpha = 1f; + /// the ID of the flash (usually 0). You can specify on each MMFlash object an ID, allowing you to have different flash images in one scene and call them separately (one for damage, one for health pickups, etc) + [Tooltip("the ID of the flash (usually 0). You can specify on each MMFlash object an ID, allowing you to have different flash images in one scene and call them separately (one for damage, one for health pickups, etc)")] + public int FlashID = 0; + + [Header("Optional Target")] + /// this field lets you bind a specific MMFlash to this feedback. If left empty, the feedback will trigger a MMFlashEvent instead, targeting all matching flashes. If you fill it, only that specific MMFlash will be targeted. + [Tooltip("this field lets you bind a specific MMFlash to this feedback. If left empty, the feedback will trigger a MMFlashEvent instead, targeting all matching flashes. If you fill it, only that specific MMFlash will be targeted.")] + public MMFlash TargetFlash; + + /// + /// On Play we trigger a flash event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + if (TargetFlash != null) + { + TargetFlash.Flash(FlashColor, FlashDuration * intensityMultiplier, FlashAlpha, ComputedTimescaleMode); + } + else + { + MMFlashEvent.Trigger(FlashColor, FeedbackDuration * intensityMultiplier, FlashAlpha, FlashID, ChannelData, ComputedTimescaleMode); + } + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMFlashEvent.Trigger(FlashColor, FeedbackDuration, FlashAlpha, FlashID, ChannelData, ComputedTimescaleMode, stop:true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMFlashEvent.Trigger(FlashColor, FeedbackDuration, FlashAlpha, FlashID, ChannelData, ComputedTimescaleMode, stop:true); + } + + /// + /// Automatically tries to add a MMFlash setup to the scene + /// + public override void AutomaticShakerSetup() + { + if (GameObject.FindObjectOfType() != null) + { + return; + } + + (Canvas canvas, bool createdNewCanvas) = Owner.gameObject.MMFindOrCreateObjectOfType("FlashCanvas", null); + canvas.renderMode = RenderMode.ScreenSpaceOverlay; + (Image image, bool createdNewImage) = canvas.gameObject.MMFindOrCreateObjectOfType("FlashImage", canvas.transform, true); + image.raycastTarget = false; + image.color = Color.white; + + RectTransform rectTransform = image.GetComponent(); + rectTransform.anchorMin = new Vector2(0f, 0f); + rectTransform.anchorMax = new Vector2(1f, 1f); + rectTransform.offsetMin = Vector2.zero; + rectTransform.offsetMax = Vector2.zero; + + image.gameObject.AddComponent(); + image.gameObject.GetComponent().alpha = 0; + image.gameObject.GetComponent().interactable = false; + + MMDebug.DebugLogInfo("Added a MMFlash to the scene. You're all set."); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flash.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flash.cs.meta new file mode 100644 index 0000000..cf80855 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flash.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 829c0c502ddd29f4c9e90c02353b2c34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flicker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flicker.cs new file mode 100644 index 0000000..34ed0e1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flicker.cs @@ -0,0 +1,395 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will make the bound renderer flicker for the set duration when played (and restore its initial color when stopped) + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you flicker the color of a specified renderer (sprite, mesh, etc) for a certain duration, at the specified octave, and with the specified color. Useful when a character gets hit, for example (but so much more!).")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/Flicker")] + public class MMF_Flicker : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.RendererColor; } } + public override bool EvaluateRequiresSetup() => (BoundRenderer == null); + public override string RequiredTargetText => BoundRenderer != null ? BoundRenderer.name : ""; + public override string RequiresSetupText => "This feedback requires that a BoundRenderer be set to be able to work properly. You can set one below."; + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundRenderer = FindAutomatedTarget(); + + /// the possible modes + /// Color : will control material.color + /// PropertyName : will target a specific shader property by name + public enum Modes { Color, PropertyName } + + [MMFInspectorGroup("Flicker", true, 61, true)] + /// the renderer to flicker when played + [Tooltip("the renderer to flicker when played")] + public Renderer BoundRenderer; + /// more renderers to flicker when played + [Tooltip("more renderers to flicker when played")] + public List ExtraBoundRenderers; + /// the selected mode to flicker the renderer + [Tooltip("the selected mode to flicker the renderer")] + public Modes Mode = Modes.Color; + /// the name of the property to target + [MMFEnumCondition("Mode", (int)Modes.PropertyName)] + [Tooltip("the name of the property to target")] + public string PropertyName = "_Tint"; + /// the duration of the flicker when getting damage + [Tooltip("the duration of the flicker when getting damage")] + public float FlickerDuration = 0.2f; + /// the duration of the period for the flicker + [Tooltip("the duration of the period for the flicker")] + [FormerlySerializedAs("FlickerOctave")] + public float FlickerPeriod = 0.04f; + /// the color we should flicker the sprite to + [Tooltip("the color we should flicker the sprite to")] + [ColorUsage(true, true)] + public Color FlickerColor = new Color32(255, 20, 20, 255); + /// the list of material indexes we want to flicker on the target renderer. If left empty, will only target the material at index 0 + [Tooltip("the list of material indexes we want to flicker on the target renderer. If left empty, will only target the material at index 0")] + public int[] MaterialIndexes; + /// if this is true, this component will use material property blocks instead of working on an instance of the material. + [Tooltip("if this is true, this component will use material property blocks instead of working on an instance of the material.")] + public bool UseMaterialPropertyBlocks = false; + /// if using material property blocks on a sprite renderer, you'll want to make sure the sprite texture gets passed to the block when updating it. For that, you need to specify your sprite's material's shader's texture property name. If you're not working with a sprite renderer, you can safely ignore this. + [Tooltip("if using material property blocks on a sprite renderer, you'll want to make sure the sprite texture gets passed to the block when updating it. For that, you need to specify your sprite's material's shader's texture property name. If you're not working with a sprite renderer, you can safely ignore this.")] + [MMCondition("UseMaterialPropertyBlocks", true)] + public string SpriteRendererTextureProperty = "_MainTex"; + + /// the duration of this feedback is the duration of the flicker + public override float FeedbackDuration { get { return ApplyTimeMultiplier(FlickerDuration); } set { FlickerDuration = value; } } + + protected const string _colorPropertyName = "_Color"; + + protected int[] _propertyIDs; + protected bool[] _propertiesFound; + protected bool _spriteRendererIsNull; + + protected Coroutine[] _coroutines; + protected List _extraCoroutines; + + protected Color[] _initialFlickerColors; + protected List _extraInitialFlickerColors; + + protected MaterialPropertyBlock _propertyBlock; + protected List _extraPropertyBlocks; + + protected SpriteRenderer _spriteRenderer; + protected List _spriteRenderers; + + protected Texture2D _spriteRendererTexture; + protected List _spriteRendererTextures; + + /// + /// On init we grab our initial color and components + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + // init material indexes + if (MaterialIndexes.Length == 0) + { + MaterialIndexes = new int[1]; + MaterialIndexes[0] = 0; + } + + _coroutines = new Coroutine[MaterialIndexes.Length]; + _initialFlickerColors = new Color[MaterialIndexes.Length]; + + _extraCoroutines = new List(); + _extraInitialFlickerColors = new List(); + foreach (Renderer renderer in ExtraBoundRenderers) + { + _extraCoroutines.Add(new Coroutine[MaterialIndexes.Length]); + _extraInitialFlickerColors.Add(new Color[MaterialIndexes.Length]); + } + + _propertyIDs = new int[MaterialIndexes.Length]; + _propertiesFound = new bool[MaterialIndexes.Length]; + _propertyBlock = new MaterialPropertyBlock(); + + AcquireRenderers(owner); + StoreSpriteRendererTexture(); + + for (int i = 0; i < MaterialIndexes.Length; i++) + { + _propertiesFound[i] = false; + int index = MaterialIndexes[i]; + + if (Active && (BoundRenderer != null)) + { + if (Mode == Modes.Color) + { + _propertiesFound[i] = UseMaterialPropertyBlocks ? BoundRenderer.sharedMaterials[index].HasProperty(_colorPropertyName) : BoundRenderer.materials[index].HasProperty(_colorPropertyName); + if (_propertiesFound[i]) + { + _initialFlickerColors[i] = UseMaterialPropertyBlocks ? BoundRenderer.sharedMaterials[index].color : BoundRenderer.materials[index].color; + foreach (Renderer renderer in ExtraBoundRenderers) + { + _extraInitialFlickerColors[ExtraBoundRenderers.IndexOf(renderer)][i] = UseMaterialPropertyBlocks ? renderer.sharedMaterials[index].color : renderer.materials[index].color; + } + } + } + else + { + _propertiesFound[i] = UseMaterialPropertyBlocks ? BoundRenderer.sharedMaterials[index].HasProperty(PropertyName) : BoundRenderer.materials[index].HasProperty(PropertyName); + if (_propertiesFound[i]) + { + _propertyIDs[i] = Shader.PropertyToID(PropertyName); + _initialFlickerColors[i] = UseMaterialPropertyBlocks ? BoundRenderer.sharedMaterials[index].GetColor(_propertyIDs[i]) : BoundRenderer.materials[index].GetColor(_propertyIDs[i]); + foreach (Renderer renderer in ExtraBoundRenderers) + { + _extraInitialFlickerColors[ExtraBoundRenderers.IndexOf(renderer)][i] = UseMaterialPropertyBlocks ? renderer.sharedMaterials[index].GetColor(_propertyIDs[i]) : renderer.materials[index].GetColor(_propertyIDs[i]); + } + } + } + } + } + } + + protected virtual void AcquireRenderers(MMF_Player owner) + { + if (Active && (BoundRenderer == null) && (owner != null)) + { + if (Owner.gameObject.MMFGetComponentNoAlloc() != null) + { + BoundRenderer = owner.GetComponent(); + } + if (BoundRenderer == null) + { + BoundRenderer = owner.GetComponentInChildren(); + } + } + if (BoundRenderer == null) + { + Debug.LogWarning("[MMFeedbackFlicker] The flicker feedback on "+Owner.name+" doesn't have a bound renderer, it won't work. You need to specify a renderer to flicker in its inspector."); + } + + _spriteRenderer = BoundRenderer.GetComponent(); + _spriteRenderers = new List(); + foreach (Renderer renderer in ExtraBoundRenderers) + { + if (renderer.GetComponent() != null) + { + _spriteRenderers.Add(renderer.GetComponent()); + } + } + _spriteRendererIsNull = _spriteRenderer == null; + } + + protected virtual void StoreSpriteRendererTexture() + { + if (_spriteRendererIsNull) + { + return; + } + _spriteRendererTexture = _spriteRenderer.sprite.texture; + _spriteRendererTextures = new List(); + for (var index = 0; index < ExtraBoundRenderers.Count; index++) + { + _spriteRendererTextures.Add(_spriteRenderers[index].sprite.texture); + } + } + + /// + /// On play we make our renderer flicker + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (BoundRenderer == null)) + { + return; + } + for (int i = 0; i < MaterialIndexes.Length; i++) + { + if (_coroutines[i] != null) { Owner.StopCoroutine(_coroutines[i]); } + _coroutines[i] = Owner.StartCoroutine(Flicker(BoundRenderer, i, _initialFlickerColors[i], FlickerColor, FlickerPeriod, FeedbackDuration)); + for (var index = 0; index < ExtraBoundRenderers.Count; index++) + { + _extraCoroutines[index][i] = Owner.StartCoroutine(Flicker(ExtraBoundRenderers[index], i, _extraInitialFlickerColors[index][i], FlickerColor, FlickerPeriod, FeedbackDuration)); + } + } + } + + /// + /// On reset we make our renderer stop flickering + /// + protected override void CustomReset() + { + base.CustomReset(); + + if (InCooldown) + { + return; + } + + if (Active && FeedbackTypeAuthorized && (BoundRenderer != null)) + { + for (int i = 0; i < MaterialIndexes.Length; i++) + { + SetColor(BoundRenderer, i, _initialFlickerColors[i]); + } + } + + foreach (Renderer renderer in ExtraBoundRenderers) + { + for (int i = 0; i < MaterialIndexes.Length; i++) + { + SetColor(renderer, i, _extraInitialFlickerColors[ExtraBoundRenderers.IndexOf(renderer)][i]); + } + } + } + + protected virtual void SetStoredSpriteRendererTexture(Renderer renderer, MaterialPropertyBlock block) + { + if (_spriteRendererIsNull) + { + return; + } + + if (renderer == BoundRenderer) + { + block.SetTexture(SpriteRendererTextureProperty, _spriteRendererTexture); + } + else + { + block.SetTexture(SpriteRendererTextureProperty, _spriteRendererTextures[ExtraBoundRenderers.IndexOf(renderer)]); + } + } + + public virtual IEnumerator Flicker(Renderer renderer, int materialIndex, Color initialColor, Color flickerColor, float flickerSpeed, float flickerDuration) + { + if (renderer == null) + { + yield break; + } + + if (!_propertiesFound[materialIndex]) + { + yield break; + } + + if (initialColor == flickerColor) + { + yield break; + } + + float flickerStop = FeedbackTime + flickerDuration; + IsPlaying = true; + + StoreSpriteRendererTexture(); + + while (FeedbackTime < flickerStop) + { + SetColor(renderer, materialIndex, flickerColor); + yield return WaitFor(flickerSpeed); + SetColor(renderer, materialIndex, initialColor); + yield return WaitFor(flickerSpeed); + } + + SetColor(renderer, materialIndex, initialColor); + IsPlaying = false; + } + + + protected virtual void SetColor(Renderer renderer, int materialIndex, Color color) + { + if (!_propertiesFound[materialIndex]) + { + return; + } + + if (Mode == Modes.Color) + { + if (UseMaterialPropertyBlocks) + { + renderer.GetPropertyBlock(_propertyBlock, MaterialIndexes[materialIndex]); + _propertyBlock.SetColor(_colorPropertyName, color); + SetStoredSpriteRendererTexture(renderer, _propertyBlock); + renderer.SetPropertyBlock(_propertyBlock, MaterialIndexes[materialIndex]); + } + else + { + renderer.materials[MaterialIndexes[materialIndex]].color = color; + } + } + else + { + if (UseMaterialPropertyBlocks) + { + renderer.GetPropertyBlock(_propertyBlock, MaterialIndexes[materialIndex]); + _propertyBlock.SetColor(_propertyIDs[materialIndex], color); + SetStoredSpriteRendererTexture(renderer, _propertyBlock); + renderer.SetPropertyBlock(_propertyBlock, MaterialIndexes[materialIndex]); + } + else + { + renderer.materials[MaterialIndexes[materialIndex]].SetColor(_propertyIDs[materialIndex], color); + } + } + } + + /// + /// Stops this feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + IsPlaying = false; + for (int i = 0; i < _coroutines.Length; i++) + { + if (_coroutines[i] != null) + { + Owner.StopCoroutine(_coroutines[i]); + } + _coroutines[i] = null; + } + foreach (Renderer renderer in ExtraBoundRenderers) + { + for (int i = 0; i < MaterialIndexes.Length; i++) + { + if (_extraCoroutines[ExtraBoundRenderers.IndexOf(renderer)][i] != null) + { + Owner.StopCoroutine(_extraCoroutines[ExtraBoundRenderers.IndexOf(renderer)][i]); + } + _extraCoroutines[ExtraBoundRenderers.IndexOf(renderer)][i] = null; + } + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + CustomReset(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flicker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flicker.cs.meta new file mode 100644 index 0000000..f67755e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Flicker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dee9d1a07405d2146a51836ab3877138 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_FreezeFrame.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_FreezeFrame.cs new file mode 100644 index 0000000..a72455d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_FreezeFrame.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will trigger a freeze frame event when played, pausing the game for the specified duration (usually short, but not necessarily) + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will freeze the timescale for the specified duration (in seconds). I usually go with 0.01s or 0.02s, but feel free to tweak it to your liking. It requires a MMTimeManager in your scene to work.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Time/Freeze Frame")] + public class MMF_FreezeFrame : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TimeColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + [MMFInspectorGroup("Freeze Frame", true, 63)] + /// the duration of the freeze frame + [Tooltip("the duration of the freeze frame")] + public float FreezeFrameDuration = 0.02f; + /// the minimum value the timescale should be at for this freeze frame to happen. This can be useful to avoid triggering freeze frames when the timescale is already frozen. + [Tooltip("the minimum value the timescale should be at for this freeze frame to happen. This can be useful to avoid triggering freeze frames when the timescale is already frozen.")] + public float MinimumTimescaleThreshold = 0.1f; + + /// the duration of this feedback is the duration of the freeze frame + public override float FeedbackDuration { get { return ApplyTimeMultiplier(FreezeFrameDuration); } set { FreezeFrameDuration = value; } } + + /// + /// On Play we trigger a freeze frame event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (Time.timeScale < MinimumTimescaleThreshold) + { + return; + } + + MMFreezeFrameEvent.Trigger(FeedbackDuration); + } + + /// + /// Automatically adds a MMTimeManager to the scene + /// + public override void AutomaticShakerSetup() + { + (MMTimeManager timeManager, bool createdNew) = Owner.gameObject.MMFindOrCreateObjectOfType("MMTimeManager", null); + if (createdNew) + { + MMDebug.DebugLogInfo("Added a MMTimeManager to the scene. You're all set."); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_FreezeFrame.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_FreezeFrame.cs.meta new file mode 100644 index 0000000..1bdcda0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_FreezeFrame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 623d70b4da82bca44ba2a5afde9d09a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Graphic.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Graphic.cs new file mode 100644 index 0000000..64c7d24 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Graphic.cs @@ -0,0 +1,216 @@ +using System.Collections; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the color of a target Graphic over time. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the color of a target Graphic over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Graphic")] + public class MMF_Graphic : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetGraphic == null); } + public override string RequiredTargetText { get { return TargetGraphic != null ? TargetGraphic.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetGraphic be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is the duration of the Graphic, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetGraphic = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + + [MMFInspectorGroup("Graphic", true, 54, true)] + /// the Graphic to affect when playing the feedback + [Tooltip("the Graphic to affect when playing the feedback")] + public Graphic TargetGraphic; + /// whether the feedback should affect the Graphic instantly or over a period of time + [Tooltip("whether the feedback should affect the Graphic instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the Graphic should change over time + [Tooltip("how long the Graphic should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// whether or not that Graphic should be turned off on start + [Tooltip("whether or not that Graphic should be turned off on start")] + public bool StartsOff = false; + /// if this is true, the target will be disabled when this feedbacks is stopped + [Tooltip("if this is true, the target will be disabled when this feedbacks is stopped")] + public bool DisableOnStop = false; + + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// whether or not to modify the color of the Graphic + [Tooltip("whether or not to modify the color of the Graphic")] + public bool ModifyColor = true; + /// the colors to apply to the Graphic over time + [Tooltip("the colors to apply to the Graphic over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public Gradient ColorOverTime; + /// the color to move to in instant mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Color InstantColor; + + protected Coroutine _coroutine; + protected Color _initialColor; + + /// + /// On init we turn the Graphic off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (Active) + { + if (StartsOff) + { + Turn(false); + } + } + } + + /// + /// On Play we turn our Graphic on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _initialColor = TargetGraphic.color; + Turn(true); + switch (Mode) + { + case Modes.Instant: + if (ModifyColor) + { + TargetGraphic.color = InstantColor; + } + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(GraphicSequence()); + break; + } + } + + /// + /// This coroutine will modify the values on the Graphic + /// + /// + protected virtual IEnumerator GraphicSequence() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetGraphicValues(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetGraphicValues(FinalNormalizedTime); + if (StartsOff) + { + Turn(false); + } + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + _coroutine = null; + yield return null; + } + + /// + /// Sets the various values on the Graphic on a specified time (between 0 and 1) + /// + /// + protected virtual void SetGraphicValues(float time) + { + if (ModifyColor) + { + TargetGraphic.color = ColorOverTime.Evaluate(time); + } + } + + /// + /// Turns the Graphic off on stop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + IsPlaying = false; + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active && DisableOnStop) + { + Turn(false); + } + + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + + _coroutine = null; + } + + /// + /// Turns the Graphic on or off + /// + /// + protected virtual void Turn(bool status) + { + TargetGraphic.gameObject.SetActive(status); + TargetGraphic.enabled = status; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetGraphic.color = _initialColor; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Graphic.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Graphic.cs.meta new file mode 100644 index 0000000..7cf42d7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Graphic.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a26c425236d5ebe48ad8c31f240eae65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_GraphicCrossFade.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_GraphicCrossFade.cs new file mode 100644 index 0000000..6241ef2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_GraphicCrossFade.cs @@ -0,0 +1,147 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you trigger cross fades on a target Graphic. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you trigger cross fades on a target Graphic.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Graphic CrossFade")] + public class MMF_GraphicCrossFade : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetGraphic == null); } + public override string RequiredTargetText { get { return TargetGraphic != null ? TargetGraphic.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetGraphic be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is the duration of the Image, or 0 if instant + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetGraphic = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { Alpha, Color } + + [MMFInspectorGroup("Graphic Cross Fade", true, 54, true)] + /// the Graphic to affect when playing the feedback + [Tooltip("the Graphic to affect when playing the feedback")] + public Graphic TargetGraphic; + /// whether the feedback should affect the Image instantly or over a period of time + [Tooltip("whether the feedback should affect the Image instantly or over a period of time")] + public Modes Mode = Modes.Alpha; + /// how long the Graphic should change over time + [Tooltip("how long the Graphic should change over time")] + public float Duration = 0.2f; + /// the target alpha + [Tooltip("the target alpha")] + [MMFEnumCondition("Mode", (int)Modes.Alpha)] + public float TargetAlpha = 0.2f; + /// the target color + [Tooltip("the target color")] + [MMFEnumCondition("Mode", (int)Modes.Color)] + public Color TargetColor = Color.red; + /// whether or not the crossfade should also tween the alpha channel + [Tooltip("whether or not the crossfade should also tween the alpha channel")] + [MMFEnumCondition("Mode", (int)Modes.Color)] + public bool UseAlpha = true; + /// if this is true, the target will be disabled when this feedbacks is stopped + [Tooltip("if this is true, the target will be disabled when this feedbacks is stopped")] + public bool DisableOnStop = false; + + protected Coroutine _coroutine; + protected Color _initialColor; + + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (TargetGraphic != null) + { + _initialColor = TargetGraphic.color; + } + } + + /// + /// On Play we turn our Graphic on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetGraphic == null)) + { + return; + } + + Turn(true); + bool ignoreTimeScale = !InScaledTimescaleMode; + switch (Mode) + { + case Modes.Alpha: + // the following lines fix a bug with CrossFadeAlpha + _initialColor.a = NormalPlayDirection ? 1 : 0; + TargetGraphic.color = NormalPlayDirection ? _initialColor : TargetColor; + TargetGraphic.CrossFadeAlpha(NormalPlayDirection ? 0f : 1f, 0f, true); + + TargetGraphic.CrossFadeAlpha(NormalPlayDirection ? TargetAlpha : _initialColor.a, Duration, ignoreTimeScale); + break; + case Modes.Color: + TargetGraphic.CrossFadeColor(NormalPlayDirection ? TargetColor : _initialColor, Duration, ignoreTimeScale, UseAlpha); + break; + } + } + + /// + /// Turns the Graphic off on stop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + IsPlaying = false; + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active && DisableOnStop) + { + Turn(false); + } + } + + /// + /// Turns the Graphic on or off + /// + /// + protected virtual void Turn(bool status) + { + TargetGraphic.gameObject.SetActive(status); + TargetGraphic.enabled = status; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetGraphic.color = _initialColor; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_GraphicCrossFade.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_GraphicCrossFade.cs.meta new file mode 100644 index 0000000..a9b1091 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_GraphicCrossFade.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 236af7dac17a2d24ea29f240d245f2cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_HoldingPause.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_HoldingPause.cs new file mode 100644 index 0000000..37c476c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_HoldingPause.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine;using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// this feedback will "hold", or wait, until all previous feedbacks have been executed, and will then pause the execution of your MMFeedbacks sequence, for the specified duration + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will 'hold', or wait, until all previous feedbacks have been executed, and will then pause the execution of your MMFeedbacks sequence, for the specified duration.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Pause/Holding Pause")] + public class MMF_HoldingPause : MMF_Pause + { + /// sets the color of this feedback in the inspector + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.HoldingPauseColor; } } + #endif + public override bool HoldingPause { get { return true; } } + + /// the duration of this feedback is the duration of the pause + public override float FeedbackDuration { get { return ApplyTimeMultiplier(PauseDuration); } set { PauseDuration = value; } } + + /// + /// On custom play we just play our pause + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active) + { + ProcessNewPauseDuration(); + Owner.StartCoroutine(PlayPause()); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_HoldingPause.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_HoldingPause.cs.meta new file mode 100644 index 0000000..8f4b163 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_HoldingPause.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c6d499e66c8acc44a215001b8c76b8a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Image.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Image.cs new file mode 100644 index 0000000..1eee43d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Image.cs @@ -0,0 +1,223 @@ +#if MM_UI +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the color of a target sprite renderer over time, and flip it on X or Y. You can also use it to command one or many MMSpriteRendererShakers. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the color of a target Image over time. You can also use it to command one or many MMImageShakers.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Image")] + public class MMF_Image : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (BoundImage == null); } + public override string RequiredTargetText { get { return BoundImage != null ? BoundImage.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundImage be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is the duration of the Image, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundImage = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + + [MMFInspectorGroup("Image", true, 54, true)] + /// the Image to affect when playing the feedback + [Tooltip("the Image to affect when playing the feedback")] + public Image BoundImage; + /// whether the feedback should affect the Image instantly or over a period of time + [Tooltip("whether the feedback should affect the Image instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the Image should change over time + [Tooltip("how long the Image should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// whether or not to modify the color of the image + [Tooltip("whether or not to modify the color of the image")] + public bool ModifyColor = true; + /// the colors to apply to the Image over time + [Tooltip("the colors to apply to the Image over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public Gradient ColorOverTime; + /// the color to move to in instant mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Color InstantColor; + /// whether or not that Image should be turned off on start + [Tooltip("whether or not that Image should be turned off on start")] + [FormerlySerializedAs("StartsOff")] + public bool DisableOnInit = false; + /// if this is true, the target will be enabled when this feedback gets played + [Tooltip("if this is true, the target will be enabled when this feedback gets played")] + public bool EnableOnPlay = true; + /// if this is true, the target disabled after the color over time change ends + [Tooltip("if this is true, the target disabled after the color over time change ends")] + public bool DisableOnSequenceEnd = false; + /// if this is true, the target will be disabled when this feedbacks is stopped + [Tooltip("if this is true, the target will be disabled when this feedbacks is stopped")] + public bool DisableOnStop = false; + + protected Coroutine _coroutine; + protected Color _initialColor; + + /// + /// On init we turn the Image off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (Active) + { + if (DisableOnInit) + { + Turn(false); + } + } + } + + /// + /// On Play we turn our Image on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _initialColor = BoundImage.color; + if (EnableOnPlay) + { + Turn(true); + } + switch (Mode) + { + case Modes.Instant: + if (ModifyColor) + { + BoundImage.color = InstantColor; + } + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ImageSequence()); + break; + } + } + + /// + /// This coroutine will modify the values on the Image + /// + /// + protected virtual IEnumerator ImageSequence() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetImageValues(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetImageValues(FinalNormalizedTime); + if (DisableOnSequenceEnd) + { + Turn(false); + } + IsPlaying = false; + _coroutine = null; + yield return null; + } + + /// + /// Sets the various values on the sprite renderer on a specified time (between 0 and 1) + /// + /// + protected virtual void SetImageValues(float time) + { + if (ModifyColor) + { + BoundImage.color = ColorOverTime.Evaluate(time); + } + } + + /// + /// Turns the sprite renderer off on stop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + IsPlaying = false; + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active && DisableOnStop) + { + Turn(false); + } + + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + + _coroutine = null; + } + + /// + /// Turns the sprite renderer on or off + /// + /// + protected virtual void Turn(bool status) + { + BoundImage.gameObject.SetActive(status); + BoundImage.enabled = status; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + BoundImage.color = _initialColor; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Image.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Image.cs.meta new file mode 100644 index 0000000..e4513ff --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Image.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da50fb2dabbb9534fb964920e61a0446 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageMaterial.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageMaterial.cs new file mode 100644 index 0000000..511d9a5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageMaterial.cs @@ -0,0 +1,73 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the material on a target UI Image + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the material on a target UI Image")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/Image Material")] + public class MMF_ImageMaterial : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetImage == null); } + public override string RequiredTargetText { get { return TargetImage != null ? TargetImage.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetImage be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetImage = FindAutomatedTarget(); + + [MMFInspectorGroup("Image", true, 12, true)] + /// the target Image we want to change the material on + [Tooltip("the target Image we want to change the material on")] + public Image TargetImage; + + /// the new material to apply to the target image + [Tooltip("the new material to apply to the target image")] + public Material NewMaterial; + + protected Material _initialMaterial; + + /// + /// On play we turn raycastTarget on or off + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetImage == null) + { + return; + } + + _initialMaterial = TargetImage.material; + TargetImage.material = NewMaterial; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetImage.material = _initialMaterial; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageMaterial.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageMaterial.cs.meta new file mode 100644 index 0000000..d55260c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageMaterial.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2021724c083d14e468ef1f53b7d99472 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageRaycastTarget.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageRaycastTarget.cs new file mode 100644 index 0000000..28cf021 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageRaycastTarget.cs @@ -0,0 +1,72 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control the RaycastTarget parameter of a target image, turning it on or off on play + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you control the RaycastTarget parameter of a target image, turning it on or off on play")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Image RaycastTarget")] + public class MMF_ImageRaycastTarget : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetImage == null); } + public override string RequiredTargetText { get { return TargetImage != null ? TargetImage.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetImage be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetImage = FindAutomatedTarget(); + + [MMFInspectorGroup("Image", true, 12, true)] + /// the target Image we want to control the RaycastTarget parameter on + [Tooltip("the target Image we want to control the RaycastTarget parameter on")] + public Image TargetImage; + /// if this is true, when played, the target image will become a raycast target + [Tooltip("if this is true, when played, the target image will become a raycast target")] + public bool ShouldBeRaycastTarget = true; + + protected bool _initialState; + + /// + /// On play we turn raycastTarget on or off + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetImage == null) + { + return; + } + + _initialState = TargetImage.raycastTarget; + TargetImage.raycastTarget = NormalPlayDirection ? ShouldBeRaycastTarget : !ShouldBeRaycastTarget; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetImage.raycastTarget = _initialState; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageRaycastTarget.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageRaycastTarget.cs.meta new file mode 100644 index 0000000..248e699 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageRaycastTarget.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59e17accdf8e47d4ab7fd8d8d6cec437 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureOffset.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureOffset.cs new file mode 100644 index 0000000..2bf0f35 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureOffset.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control the texture offset of a target UI Image over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you control the texture offset of a target UI Image over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Image Texture Offset")] + public class MMF_ImageTextureOffset : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetImage == null); } + public override string RequiredTargetText { get { return TargetImage != null ? TargetImage.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetImage be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetImage = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + // + public enum MaterialPropertyTypes { Main, TextureID } + + [MMFInspectorGroup("Texture Scale", true, 63, true)] + /// the UI Image on which to change texture offset on + [Tooltip("the UI Image on which to change texture offset on")] + public Image TargetImage; + /// whether to target the main texture property, or one specified in MaterialPropertyName + [Tooltip("whether to target the main texture property, or one specified in MaterialPropertyName")] + public MaterialPropertyTypes MaterialPropertyType = MaterialPropertyTypes.Main; + /// the property name, for example _MainTex_ST, or _MainTex if you don't have UseMaterialPropertyBlocks set to true + [Tooltip("the property name, for example _MainTex_ST, or _MainTex if you don't have UseMaterialPropertyBlocks set to true")] + [MMEnumCondition("MaterialPropertyType", (int)MaterialPropertyTypes.TextureID)] + public string MaterialPropertyName = "_MainTex_ST"; + /// whether the feedback should affect the material instantly or over a period of time + [Tooltip("whether the feedback should affect the material instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the material should change over time + [Tooltip("how long the material should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// whether or not the values should be relative + [Tooltip("whether or not the values should be relative")] + public bool RelativeValues = true; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + [MMFInspectorGroup("Intensity", true, 65)] + /// the curve to tween the offset on + [Tooltip("the curve to tween the offset on")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public AnimationCurve OffsetCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the offset curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the offset curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapZero = Vector2.zero; + /// the value to remap the offset curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the offset curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapOne = Vector2.one; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Vector2 InstantOffset; + + protected Vector2 _initialValue; + protected Coroutine _coroutine; + protected Vector2 _newValue; + protected Material _material; + + /// the duration of this feedback is the duration of the transition + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasRandomness => true; + + /// + /// On init we store our initial texture offset + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + _material = TargetImage.materialForRendering; + + switch (MaterialPropertyType) + { + case MaterialPropertyTypes.Main: + _initialValue = _material.mainTextureOffset; + break; + case MaterialPropertyTypes.TextureID: + _initialValue = _material.GetTextureOffset(MaterialPropertyName); + break; + } + } + + /// + /// On Play we initiate our offset change + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + switch (Mode) + { + case Modes.Instant: + ApplyValue(InstantOffset * intensityMultiplier); + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(TransitionCo(intensityMultiplier)); + break; + } + } + + /// + /// This coroutine will modify the offset value over time + /// + /// + protected virtual IEnumerator TransitionCo(float intensityMultiplier) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetMaterialValues(remappedTime, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetMaterialValues(FinalNormalizedTime, intensityMultiplier); + IsPlaying = false; + _coroutine = null; + yield return null; + } + + /// + /// Applies offset to the target material + /// + /// + protected virtual void SetMaterialValues(float time, float intensityMultiplier) + { + _newValue.x = MMFeedbacksHelpers.Remap(OffsetCurve.Evaluate(time), 0f, 1f, RemapZero.x, RemapOne.x); + _newValue.y = MMFeedbacksHelpers.Remap(OffsetCurve.Evaluate(time), 0f, 1f, RemapZero.y, RemapOne.y); + + if (RelativeValues) + { + _newValue += _initialValue; + } + + ApplyValue(_newValue * intensityMultiplier); + } + + /// + /// Applies the specified value to the material + /// + /// + protected virtual void ApplyValue(Vector2 newValue) + { + switch (MaterialPropertyType) + { + case MaterialPropertyTypes.Main: + _material.mainTextureOffset = newValue; + break; + case MaterialPropertyTypes.TextureID: + _material.SetTextureOffset(MaterialPropertyName, newValue); + break; + } + } + + /// + /// Stops this feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureOffset.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureOffset.cs.meta new file mode 100644 index 0000000..6c19e5e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureOffset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff113397ac737b84494337e5512328d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureScale.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureScale.cs new file mode 100644 index 0000000..a484f92 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureScale.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control the texture scale of a target UI Image over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you control the texture scale of a target UI Image over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Image Texture Scale")] + public class MMF_ImageTextureScale : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetImage == null); } + public override string RequiredTargetText { get { return TargetImage != null ? TargetImage.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetImage be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetImage = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + // + public enum MaterialPropertyTypes { Main, TextureID } + + [MMFInspectorGroup("Texture Scale", true, 63, true)] + /// the UI Image on which to change texture scale on + [Tooltip("the UI Image on which to change texture scale on")] + public Image TargetImage; + /// whether to target the main texture property, or one specified in MaterialPropertyName + [Tooltip("whether to target the main texture property, or one specified in MaterialPropertyName")] + public MaterialPropertyTypes MaterialPropertyType = MaterialPropertyTypes.Main; + /// the property name, for example _MainTex_ST, or _MainTex if you don't have UseMaterialPropertyBlocks set to true + [Tooltip("the property name, for example _MainTex_ST, or _MainTex if you don't have UseMaterialPropertyBlocks set to true")] + [MMEnumCondition("MaterialPropertyType", (int)MaterialPropertyTypes.TextureID)] + public string MaterialPropertyName = "_MainTex_ST"; + /// whether the feedback should affect the material instantly or over a period of time + [Tooltip("whether the feedback should affect the material instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the material should change over time + [Tooltip("how long the material should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// whether or not the values should be relative + [Tooltip("whether or not the values should be relative")] + public bool RelativeValues = true; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + [MMFInspectorGroup("Intensity", true, 65)] + /// the curve to tween the scale on + [Tooltip("the curve to tween the scale on")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public AnimationCurve ScaleCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the scale curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the scale curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapZero = Vector2.zero; + /// the value to remap the scale curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the scale curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapOne = Vector2.one; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Vector2 InstantScale; + + protected Vector2 _initialValue; + protected Coroutine _coroutine; + protected Vector2 _newValue; + protected Material _material; + + /// the duration of this feedback is the duration of the transition + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + /// + /// On init we store our initial texture scale + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + _material = TargetImage.material; + + switch (MaterialPropertyType) + { + case MaterialPropertyTypes.Main: + _initialValue = _material.mainTextureScale; + break; + case MaterialPropertyTypes.TextureID: + _initialValue = _material.GetTextureScale(MaterialPropertyName); + break; + } + } + + /// + /// On Play we initiate our scale change + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + switch (Mode) + { + case Modes.Instant: + ApplyValue(InstantScale * intensityMultiplier); + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(TransitionCo(intensityMultiplier)); + break; + } + } + + /// + /// This coroutine will modify the scale value over time + /// + /// + protected virtual IEnumerator TransitionCo(float intensityMultiplier) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetMaterialValues(remappedTime, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetMaterialValues(FinalNormalizedTime, intensityMultiplier); + IsPlaying = false; + _coroutine = null; + yield return null; + } + + /// + /// Applies scale to the target material + /// + /// + protected virtual void SetMaterialValues(float time, float intensityMultiplier) + { + _newValue.x = MMFeedbacksHelpers.Remap(ScaleCurve.Evaluate(time), 0f, 1f, RemapZero.x, RemapOne.x); + _newValue.y = MMFeedbacksHelpers.Remap(ScaleCurve.Evaluate(time), 0f, 1f, RemapZero.y, RemapOne.y); + + if (RelativeValues) + { + _newValue += _initialValue; + } + + ApplyValue(_newValue * intensityMultiplier); + } + + /// + /// Applies the specified value to the material + /// + /// + protected virtual void ApplyValue(Vector2 newValue) + { + switch (MaterialPropertyType) + { + case MaterialPropertyTypes.Main: + _material.mainTextureScale = newValue; + break; + case MaterialPropertyTypes.TextureID: + _material.SetTextureScale(MaterialPropertyName, newValue); + break; + } + } + + /// + /// Stops this feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureScale.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureScale.cs.meta new file mode 100644 index 0000000..09072fa --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ImageTextureScale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6012357a5b6f714ca471d66b44e12b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_InstantiateObject.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_InstantiateObject.cs new file mode 100644 index 0000000..a8273dc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_InstantiateObject.cs @@ -0,0 +1,262 @@ +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will instantiate the associated object (usually a VFX, but not necessarily), optionnally creating an object pool of them for performance + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to instantiate the object specified in its inspector, at the feedback's position (plus an optional offset). You can also optionally (and automatically) create an object pool at initialization to save on performance. In that case you'll need to specify a pool size (usually the maximum amount of these instantiated objects you plan on having in your scene at each given time).")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("GameObject/Instantiate Object")] + public class MMF_InstantiateObject : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the different ways to position the instantiated object : + /// - FeedbackPosition : object will be instantiated at the position of the feedback, plus an optional offset + /// - Transform : the object will be instantiated at the specified Transform's position, plus an optional offset + /// - WorldPosition : the object will be instantiated at the specified world position vector, plus an optional offset + /// - Script : the position passed in parameters when calling the feedback + public enum PositionModes { FeedbackPosition, Transform, WorldPosition, Script } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (GameObjectToInstantiate == null); } + public override string RequiredTargetText { get { return GameObjectToInstantiate != null ? GameObjectToInstantiate.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a GameObjectToInstantiate be set to be able to work properly. You can set one below."; } } + #endif + + [MMFInspectorGroup("Instantiate Object", true, 37, true)] + /// the object to instantiate + [Tooltip("the object to instantiate")] + [FormerlySerializedAs("VfxToInstantiate")] + public GameObject GameObjectToInstantiate; + + [MMFInspectorGroup("Position", true, 39)] + /// the chosen way to position the object + [Tooltip("the chosen way to position the object")] + public PositionModes PositionMode = PositionModes.FeedbackPosition; + /// the chosen way to position the object + [Tooltip("the chosen way to position the object")] + public bool AlsoApplyRotation = false; + /// the chosen way to position the object + [Tooltip("the chosen way to position the object")] + public bool AlsoApplyScale = false; + /// the transform at which to instantiate the object + [Tooltip("the transform at which to instantiate the object")] + [MMFEnumCondition("PositionMode", (int)PositionModes.Transform)] + public Transform TargetTransform; + /// the transform at which to instantiate the object + [Tooltip("the transform at which to instantiate the object")] + [MMFEnumCondition("PositionMode", (int)PositionModes.WorldPosition)] + public Vector3 TargetPosition; + /// the position offset at which to instantiate the object + [Tooltip("the position offset at which to instantiate the object")] + [FormerlySerializedAs("VfxPositionOffset")] + public Vector3 PositionOffset; + + /// if this is true, instantiation position will be randomized between RandomizeMin and RandomizeMax + [Tooltip("if this is true, instantiation position will be randomized between RandomizeMin and RandomizeMax")] + public bool RandomizePosition = false; + /// the minimum value we'll randomize our position with + [Tooltip("the minimum value we'll randomize our position with")] + [MMFCondition("RandomizePosition", true)] + public Vector3 RandomizedPositionMin = Vector3.zero; + /// the maximum value we'll randomize our position with + [Tooltip("the maximum value we'll randomize our position with")] + [MMFCondition("RandomizePosition", true)] + public Vector3 RandomizedPositionMax = Vector3.one; + + [MMFInspectorGroup("Parent", true, 47)] + /// if specified, the instantiated object will be parented to this transform + [Tooltip("if specified, the instantiated object will be parented to this transform ")] + public Transform ParentTransform; + + [MMFInspectorGroup("Object Pool", true, 40)] + /// whether or not we should create automatically an object pool for this object + [Tooltip("whether or not we should create automatically an object pool for this object")] + [FormerlySerializedAs("VfxCreateObjectPool")] + public bool CreateObjectPool; + /// the initial and planned size of this object pool + [Tooltip("the initial and planned size of this object pool")] + [MMFCondition("CreateObjectPool", true)] + [FormerlySerializedAs("VfxObjectPoolSize")] + public int ObjectPoolSize = 5; + /// whether or not to create a new pool even if one already exists for that same prefab + [Tooltip("whether or not to create a new pool even if one already exists for that same prefab")] + [MMFCondition("CreateObjectPool", true)] + public bool MutualizePools = false; + /// the transform the pool of objects will be parented to + [Tooltip("the transform the pool of objects will be parented to")] + [MMFCondition("CreateObjectPool", true)] + public Transform PoolParentTransform; + + protected MMMiniObjectPooler _objectPooler; + protected GameObject _newGameObject; + protected bool _poolCreatedOrFound = false; + protected Vector3 _randomizedPosition = Vector3.zero; + + /// + /// On init we create an object pool if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (Active && CreateObjectPool && !_poolCreatedOrFound) + { + if (_objectPooler != null) + { + _objectPooler.DestroyObjectPool(); + owner.ProxyDestroy(_objectPooler.gameObject); + } + + GameObject objectPoolGo = new GameObject(); + objectPoolGo.name = Owner.name+"_ObjectPooler"; + _objectPooler = objectPoolGo.AddComponent(); + _objectPooler.GameObjectToPool = GameObjectToInstantiate; + _objectPooler.PoolSize = ObjectPoolSize; + if (PoolParentTransform != null) + { + _objectPooler.transform.SetParent(PoolParentTransform); + } + _objectPooler.MutualizeWaitingPools = MutualizePools; + _objectPooler.FillObjectPool(); + if ((Owner != null) && (objectPoolGo.transform.parent == null)) + { + SceneManager.MoveGameObjectToScene(objectPoolGo, Owner.gameObject.scene); + } + _poolCreatedOrFound = true; + } + } + + /// + /// On Play we instantiate the specified object, either from the object pool or from scratch + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (GameObjectToInstantiate == null)) + { + return; + } + + if (_objectPooler != null) + { + _newGameObject = _objectPooler.GetPooledGameObject(); + if (_newGameObject != null) + { + PositionObject(position); + _newGameObject.SetActive(true); + } + } + else + { + _newGameObject = GameObject.Instantiate(GameObjectToInstantiate) as GameObject; + if (_newGameObject != null) + { + SceneManager.MoveGameObjectToScene(_newGameObject, Owner.gameObject.scene); + PositionObject(position); + } + } + } + + protected virtual void PositionObject(Vector3 position) + { + _newGameObject.transform.position = GetPosition(position); + if (AlsoApplyRotation) + { + _newGameObject.transform.rotation = GetRotation(); + } + if (AlsoApplyScale) + { + _newGameObject.transform.localScale = GetScale(); + } + if (ParentTransform != null) + { + _newGameObject.transform.SetParent(ParentTransform); + } + } + + /// + /// Gets the desired position of that particle system + /// + /// + /// + protected virtual Vector3 GetPosition(Vector3 position) + { + if (RandomizePosition) + { + _randomizedPosition.x = UnityEngine.Random.Range(RandomizedPositionMin.x, RandomizedPositionMax.x); + _randomizedPosition.y = UnityEngine.Random.Range(RandomizedPositionMin.y, RandomizedPositionMax.y); + _randomizedPosition.z = UnityEngine.Random.Range(RandomizedPositionMin.z, RandomizedPositionMax.z); + } + + switch (PositionMode) + { + case PositionModes.FeedbackPosition: + return Owner.transform.position + PositionOffset + _randomizedPosition; + case PositionModes.Transform: + return TargetTransform.position + PositionOffset + _randomizedPosition; + case PositionModes.WorldPosition: + return TargetPosition + PositionOffset + _randomizedPosition; + case PositionModes.Script: + return position + PositionOffset + _randomizedPosition; + default: + return position + PositionOffset + _randomizedPosition; + } + } + + + /// + /// Gets the desired rotation of that particle system + /// + /// + /// + protected virtual Quaternion GetRotation() + { + switch (PositionMode) + { + case PositionModes.FeedbackPosition: + return Owner.transform.rotation; + case PositionModes.Transform: + return TargetTransform.rotation; + case PositionModes.WorldPosition: + return Quaternion.identity; + case PositionModes.Script: + return Owner.transform.rotation; + default: + return Owner.transform.rotation; + } + } + + /// + /// Gets the desired scale of that particle system + /// + /// + /// + protected virtual Vector3 GetScale() + { + switch (PositionMode) + { + case PositionModes.FeedbackPosition: + return Owner.transform.localScale; + case PositionModes.Transform: + return TargetTransform.localScale; + case PositionModes.WorldPosition: + return Owner.transform.localScale; + case PositionModes.Script: + return Owner.transform.localScale; + default: + return Owner.transform.localScale; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_InstantiateObject.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_InstantiateObject.cs.meta new file mode 100644 index 0000000..6efa333 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_InstantiateObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ce2978bc356b834984f6553e51886ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Light.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Light.cs new file mode 100644 index 0000000..f2895a2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Light.cs @@ -0,0 +1,401 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control the color and intensity of a Light when played + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the color and intensity of a Light in your scene for a certain duration (or instantly).")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Lights/Light")] + public class MMF_Light : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.LightColor; } } + public override bool EvaluateRequiresSetup() { return (BoundLight == null); } + public override string RequiredTargetText { get { return BoundLight != null ? BoundLight.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundLight be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is the duration of the light, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundLight = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant, ShakerEvent, ToDestination } + + [MMFInspectorGroup("Light", true, 37, true)] + /// the light to affect when playing the feedback + [Tooltip("the light to affect when playing the feedback")] + public Light BoundLight; + /// whether the feedback should affect the light instantly or over a period of time + [Tooltip("whether the feedback should affect the light instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the light should change over time + [Tooltip("how long the light should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public float Duration = 0.2f; + /// whether or not that light should be turned off on start + [Tooltip("whether or not that light should be turned off on start")] + public bool StartsOff = true; + /// if this is true, the light will be disabled when this feedbacks is stopped + [Tooltip("if this is true, the light will be disabled when this feedbacks is stopped")] + public bool DisableOnStop = false; + /// whether or not the values should be relative or not + [Tooltip("whether or not the values should be relative or not")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.Instant)] + public bool RelativeValues = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to broadcast a range to only affect certain shakers + [Tooltip("whether or not to broadcast a range to only affect certain shakers")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool OnlyBroadcastInRange = false; + /// the range of the event, in units + [Tooltip("the range of the event, in units")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public float EventRange = 100f; + /// the transform to use to broadcast the event as origin point + [Tooltip("the transform to use to broadcast the event as origin point")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public Transform EventOriginTransform; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + [MMFInspectorGroup("Color", true, 38, true)] + /// whether or not to modify the color of the light + [Tooltip("whether or not to modify the color of the light")] + public bool ModifyColor = true; + /// the colors to apply to the light over time + [Tooltip("the colors to apply to the light over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public Gradient ColorOverTime; + /// the color to move to in instant mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant, (int)Modes.ShakerEvent)] + public Color InstantColor = Color.red; + /// the color to move to in destination mode + [Tooltip("the color to move to in destination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public Color ToDestinationColor = Color.red; + + [MMFInspectorGroup("Intensity", true, 39, true)] + /// whether or not to modify the intensity of the light + [Tooltip("whether or not to modify the intensity of the light")] + public bool ModifyIntensity = true; + /// the curve to tween the intensity on + [Tooltip("the curve to tween the intensity on")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public AnimationCurve IntensityCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the intensity curve's 0 to + [Tooltip("the value to remap the intensity curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapIntensityZero = 0f; + /// the value to remap the intensity curve's 1 to + [Tooltip("the value to remap the intensity curve's 1 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapIntensityOne = 1f; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantIntensity = 1f; + /// the value to move the intensity to in ToDestination mode + [Tooltip("the value to move the intensity to in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationIntensity = 1f; + + [MMFInspectorGroup("Range", true, 40, true)] + /// whether or not to modify the range of the light + [Tooltip("whether or not to modify the range of the light")] + public bool ModifyRange = true; + /// the range to apply to the light over time + [Tooltip("the range to apply to the light over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public AnimationCurve RangeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the range curve's 0 to + [Tooltip("the value to remap the range curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapRangeZero = 0f; + /// the value to remap the range curve's 0 to + [Tooltip("the value to remap the range curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapRangeOne = 10f; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantRange = 10f; + /// the value to move the intensity to in ToDestination mode + [Tooltip("the value to move the intensity to in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationRange = 10f; + + [MMFInspectorGroup("Shadow Strength", true, 41, true)] + /// whether or not to modify the shadow strength of the light + [Tooltip("whether or not to modify the shadow strength of the light")] + public bool ModifyShadowStrength = true; + /// the range to apply to the light over time + [Tooltip("the range to apply to the light over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public AnimationCurve ShadowStrengthCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the shadow strength's curve's 0 to + [Tooltip("the value to remap the shadow strength's curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapShadowStrengthZero = 0f; + /// the value to remap the shadow strength's curve's 1 to + [Tooltip("the value to remap the shadow strength's curve's 1 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapShadowStrengthOne = 1f; + /// the value to move the shadow strength to in instant mode + [Tooltip("the value to move the shadow strength to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantShadowStrength = 1f; + /// the value to move the shadow strength to in ToDestination mode + [Tooltip("the value to move the shadow strength to in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationShadowStrength = 1f; + + protected float _initialRange; + protected float _initialShadowStrength; + protected float _initialIntensity; + protected Coroutine _coroutine; + protected Color _initialColor; + protected Color _targetColor; + + /// + /// On init we turn the light off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (BoundLight == null) + { + return; + } + + _initialRange = BoundLight.range; + _initialShadowStrength = BoundLight.shadowStrength; + _initialIntensity = BoundLight.intensity; + _initialColor = BoundLight.color; + + if (EventOriginTransform == null) + { + EventOriginTransform = owner.transform; + } + + if (Active) + { + if (StartsOff) + { + Turn(false); + } + } + } + + /// + /// On Play we turn our light on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (Mode == Modes.ToDestination) + { + _initialRange = BoundLight.range; + _initialShadowStrength = BoundLight.shadowStrength; + _initialIntensity = BoundLight.intensity; + _initialColor = BoundLight.color; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + Turn(true); + switch (Mode) + { + case Modes.Instant: + BoundLight.intensity = InstantIntensity * intensityMultiplier; + BoundLight.shadowStrength = InstantShadowStrength; + BoundLight.range = InstantRange; + if (ModifyColor) + { + BoundLight.color = InstantColor; + } + break; + case Modes.OverTime: + case Modes.ToDestination: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(LightSequence(intensityMultiplier)); + break; + case Modes.ShakerEvent: + MMLightShakeEvent.Trigger(FeedbackDuration, RelativeValues, ModifyColor, ColorOverTime, IntensityCurve, + RemapIntensityZero, RemapIntensityOne, RangeCurve, RemapRangeZero * intensityMultiplier, RemapRangeOne * intensityMultiplier, + ShadowStrengthCurve, RemapShadowStrengthZero, RemapShadowStrengthOne, feedbacksIntensity, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, + OnlyBroadcastInRange, EventRange, EventOriginTransform.position); + break; + } + } + + /// + /// This coroutine will modify the intensity and color of the light over time + /// + /// + protected virtual IEnumerator LightSequence(float intensityMultiplier) + { + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetLightValues(remappedTime, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetLightValues(FinalNormalizedTime, intensityMultiplier); + if (DisableOnStop) + { + Turn(false); + } + IsPlaying = false; + _coroutine = null; + yield return null; + } + + + /// + /// Sets the various values on the light on a specified time (between 0 and 1) + /// + /// + protected virtual void SetLightValues(float time, float intensityMultiplier) + { + float intensity = 0f; + float range = 0f; + float shadowStrength = 0f; + + switch (Mode) + { + case Modes.OverTime: + intensity = MMFeedbacksHelpers.Remap(IntensityCurve.Evaluate(time), 0f, 1f, RemapIntensityZero, RemapIntensityOne); + range = MMFeedbacksHelpers.Remap(RangeCurve.Evaluate(time), 0f, 1f, RemapRangeZero, RemapRangeOne); + shadowStrength = MMFeedbacksHelpers.Remap(ShadowStrengthCurve.Evaluate(time), 0f, 1f, RemapShadowStrengthZero, RemapShadowStrengthOne); + _targetColor = ColorOverTime.Evaluate(time); + break; + case Modes.ToDestination: + intensity = Mathf.Lerp(_initialIntensity, ToDestinationIntensity, IntensityCurve.Evaluate(time)); + range = Mathf.Lerp(_initialRange, ToDestinationRange, RangeCurve.Evaluate(time)); + shadowStrength = Mathf.Lerp(_initialShadowStrength, ToDestinationShadowStrength, ShadowStrengthCurve.Evaluate(time)); + _targetColor = Color.Lerp(_initialColor, ToDestinationColor, time); + break; + } + + if (RelativeValues && (Mode != Modes.ToDestination)) + { + intensity += _initialIntensity; + shadowStrength += _initialShadowStrength; + range += _initialRange; + } + + if (ModifyIntensity) + { + BoundLight.intensity = intensity * intensityMultiplier; + } + if (ModifyRange) + { + BoundLight.range = range; + } + if (ModifyShadowStrength) + { + BoundLight.shadowStrength = Mathf.Clamp01(shadowStrength); + } + if (ModifyColor) + { + BoundLight.color = _targetColor; + } + } + + /// + /// Turns the light off on stop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!FeedbackTypeAuthorized) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (Active && (_coroutine != null)) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + if (Active && DisableOnStop) + { + Turn(false); + } + } + + /// + /// Turns the light on or off + /// + /// + protected virtual void Turn(bool status) + { + BoundLight.enabled = status; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + BoundLight.range = _initialRange; + BoundLight.shadowStrength = _initialShadowStrength; + BoundLight.intensity = _initialIntensity; + BoundLight.color = _initialColor; + + if (StartsOff) + { + Turn(false); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Light.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Light.cs.meta new file mode 100644 index 0000000..43807fe --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Light.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7559d3ffebbab24885ba248a4e0e548 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LookAt.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LookAt.cs new file mode 100644 index 0000000..cbce437 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LookAt.cs @@ -0,0 +1,294 @@ +using System; +using System.Collections; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you animate the rotation of a transform to look at a target over time. + /// You can also use it to broadcast a MMLookAtShake event, that MMLookAtShakers on the right channel will be able to listen for and act upon + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you animate the rotation of a transform to look at a target over time. You can also use it to broadcast a MMLookAtShake event, that MMLookAtShakers on the right channel will be able to listen for and act upon.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/LookAt")] + public class MMF_LookAt : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() + { + if (Mode == Modes.Direct) + { + return TransformToRotate == null; + } + else + { + return false; + } + } + public override string RequiredTargetText + { + get + { + if ((Mode == Modes.Direct) && (TransformToRotate != null)) + { + return TransformToRotate.name; + } + else + { + return ""; + } + } + } + public override string RequiresSetupText { get { return "In Direct mode, this feedback requires that a DirectTargetTransform be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is the duration of the movement, in seconds + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRange => true; + + /// the possible modes for this feedback, either directly targeting a transform, or broadcasting an event + public enum Modes { Direct, Event } + /// whether to look at a specific transform, at a position in the world, or at a direction vector + public enum LookAtTargetModes { Transform, TargetWorldPosition, Direction } + /// the vector to consider as "up" when looking at a direction + public enum UpwardVectors { Forward, Up, Right } + + [MMFInspectorGroup("Look at settings", true, 37, true)] + /// the duration of this feedback, in seconds + [Tooltip("the duration of this feedback, in seconds")] + public float Duration = 1f; + /// the curve over which to animate the look at transition + [Tooltip("the curve over which to animate the look at transition")] + public MMTweenType LookAtTween = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// whether or not to lock rotation on the x axis + [Tooltip("whether or not to lock rotation on the x axis")] + public bool LockXAxis = false; + /// whether or not to lock rotation on the y axis + [Tooltip("whether or not to lock rotation on the y axis")] + public bool LockYAxis = false; + /// whether or not to lock rotation on the z axis + [Tooltip("whether or not to lock rotation on the z axis")] + public bool LockZAxis = false; + + [MMFInspectorGroup("What we want to rotate", true, 37, true)] + /// whether to make a certain transform look at a target, or to broadcast an event + [Tooltip("whether to make a certain transform look at a target, or to broadcast an event")] + public Modes Mode = Modes.Direct; + /// in Direct mode, the transform to rotate to have it look at our target + [Tooltip("in Direct mode, the transform to rotate to have it look at our target")] + [MMFEnumCondition("Mode", (int)Modes.Direct)] + public Transform TransformToRotate; + /// the vector representing the up direction on the object we want to rotate and look at our target + [Tooltip("the vector representing the up direction on the object we want to rotate and look at our target")] + [MMFEnumCondition("Mode", (int)Modes.Direct)] + public UpwardVectors UpwardVector = UpwardVectors.Up; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + [MMFEnumCondition("Mode", (int)Modes.Event)] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + [MMFEnumCondition("Mode", (int)Modes.Event)] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("What we want to look at", true, 37, true)] + /// the different target modes : either a specific transform to look at, the coordinates of a world position, or a direction vector + [Tooltip("the different target modes : either a specific transform to look at, the coordinates of a world position, or a direction vector")] + public LookAtTargetModes LookAtTargetMode = LookAtTargetModes.Transform; + /// the transform we want to look at + [Tooltip("the transform we want to look at")] + [MMFEnumCondition("LookAtTargetMode", (int)LookAtTargetModes.Transform)] + public Transform LookAtTarget; + /// the coordinates of a point the world that we want to look at + [Tooltip("the coordinates of a point the world that we want to look at")] + [MMFEnumCondition("LookAtTargetMode", (int)LookAtTargetModes.TargetWorldPosition)] + public Vector3 LookAtTargetWorldPosition = Vector3.forward; + /// a direction (from our rotating object) that we want to look at + [Tooltip("a direction (from our rotating object) that we want to look at")] + [MMFEnumCondition("LookAtTargetMode", (int)LookAtTargetModes.Direction)] + public Vector3 LookAtDirection = Vector3.forward; + + protected Coroutine _coroutine; + protected Quaternion _initialDirectTargetTransformRotation; + protected Quaternion _newRotation; + protected Vector3 _lookAtPosition; + protected Vector3 _upwards; + protected Vector3 _direction; + protected Quaternion _initialRotation; + + /// + /// On init we initialize our upwards vector + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + switch (UpwardVector) + { + case UpwardVectors.Forward: + _upwards = Vector3.forward; + break; + case UpwardVectors.Up: + _upwards = Vector3.up; + break; + case UpwardVectors.Right: + _upwards = Vector3.right; + break; + } + } + + /// + /// On Play we start looking at our target + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (Active || Owner.AutoPlayOnEnable) + { + InitiateLookAt(position); + } + } + + /// + /// Depending on our selected mode, initiates the lookat by starting a coroutine or broadcasting an event + /// + /// + protected virtual void InitiateLookAt(Vector3 position) + { + _initialRotation = TransformToRotate.transform.rotation; + + switch (Mode) + { + case Modes.Direct: + ClearCoroutine(); + _coroutine = Owner.StartCoroutine(AnimateLookAt()); + break; + case Modes.Event: + MMLookAtShaker.MMLookAtShakeEvent.Trigger(Duration, LockXAxis, LockYAxis, LockZAxis, UpwardVector, + LookAtTargetMode, LookAtTarget, LookAtTargetWorldPosition, LookAtDirection, null, + LookAtTween, + UseRange, RangeDistance, UseRangeFalloff, RangeFalloff, RemapRangeFalloff, position, + 1f, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, + ComputedTimescaleMode); + break; + } + } + + /// + /// Animates look at direction over time + /// + /// + protected virtual IEnumerator AnimateLookAt() + { + if (TransformToRotate != null) + { + _initialDirectTargetTransformRotation = TransformToRotate.transform.rotation; + } + + float duration = FeedbackDuration; + float journey = NormalPlayDirection ? 0f : duration; + + IsPlaying = true; + + while ((journey >= 0) && (journey <= duration) && (duration > 0)) + { + float percent = Mathf.Clamp01(journey / duration); + percent = LookAtTween.Evaluate(percent); + ApplyRotation(percent); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + + yield return null; + } + + ApplyRotation(LookAtTween.Evaluate(1f)); + _coroutine = null; + IsPlaying = false; + } + + /// + /// Applies rotation at the specified time along the journey + /// + /// + protected virtual void ApplyRotation(float percent) + { + switch (LookAtTargetMode) + { + case LookAtTargetModes.Transform: + _lookAtPosition = LookAtTarget.position; + break; + case LookAtTargetModes.TargetWorldPosition: + _lookAtPosition = LookAtTargetWorldPosition; + break; + case LookAtTargetModes.Direction: + _lookAtPosition = TransformToRotate.position + LookAtDirection; + break; + } + + _direction = _lookAtPosition - TransformToRotate.position; + _newRotation = Quaternion.LookRotation(_direction, _upwards); + + if (LockXAxis) { _newRotation.x = TransformToRotate.rotation.x; } + if (LockYAxis) { _newRotation.y = TransformToRotate.rotation.y; } + if (LockZAxis) { _newRotation.z = TransformToRotate.rotation.z; } + + TransformToRotate.transform.rotation = Quaternion.SlerpUnclamped(_initialDirectTargetTransformRotation, _newRotation, percent); + } + + /// + /// On Stop we stop our movement if we had one going (only in Direct mode) + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + ClearCoroutine(); + } + + /// + /// Clears the current coroutine + /// + protected virtual void ClearCoroutine() + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TransformToRotate.transform.rotation = _initialRotation; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LookAt.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LookAt.cs.meta new file mode 100644 index 0000000..f686303 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LookAt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c4357fb44dc45247923329e5534f898 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Looper.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Looper.cs new file mode 100644 index 0000000..4901e70 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Looper.cs @@ -0,0 +1,130 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will move the current "head" of an MMFeedbacks sequence back to another feedback above in the list. + /// What feedback the head lands on depends on your settings : you can decide to have it loop at last pause, or at the last LoopStart feedback in the list (or both). + /// Furthermore, you can decide to have it loop multiple times and cause a pause when met. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will move the current 'head' of an MMFeedbacks sequence back to another feedback above in the list. " + + "What feedback the head lands on depends on your settings : you can decide to have it loop at last pause, " + + "or at the last LoopStart feedback in the list (or both). Furthermore, you can decide to have it loop multiple times and cause a pause when met.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Loop/Looper")] + public class MMF_Looper : MMF_Pause + { + [MMFInspectorGroup("Loop", true, 34)] + + [Header("Loop conditions")] + /// if this is true, this feedback, when met, will cause the MMFeedbacks to reposition its 'head' to the first pause found above it (going from this feedback to the top), or to the start if none is found + [Tooltip("if this is true, this feedback, when met, will cause the MMFeedbacks to reposition its 'head' to the first pause found above it (going from this feedback to the top), or to the start if none is found")] + public bool LoopAtLastPause = true; + /// if this is true, this feedback, when met, will cause the MMFeedbacks to reposition its 'head' to the first LoopStart feedback found above it (going from this feedback to the top), or to the start if none is found + [Tooltip("if this is true, this feedback, when met, will cause the MMFeedbacks to reposition its 'head' to the first LoopStart feedback found above it (going from this feedback to the top), or to the start if none is found")] + public bool LoopAtLastLoopStart = true; + + [Header("Loop")] + /// if this is true, the looper will loop forever + [Tooltip("if this is true, the looper will loop forever")] + public bool InfiniteLoop = false; + /// how many times this loop should run + [Tooltip("how many times this loop should run")] + [MMCondition("InfiniteLoop", true, true)] + public int NumberOfLoops = 2; + /// the amount of loops left (updated at runtime) + [Tooltip("the amount of loops left (updated at runtime)")] + [MMFReadOnly] + public int NumberOfLoopsLeft = 1; + /// whether we are in an infinite loop at this time or not + [Tooltip("whether we are in an infinite loop at this time or not")] + [MMFReadOnly] + public bool InInfiniteLoop = false; + /// whether or not to trigger a Loop MMFeedbacksEvent when this looper is reached + [Tooltip("whether or not to trigger a Loop MMFeedbacksEvent when this looper is reached")] + public bool TriggerMMFeedbacksEvents = true; + + [Header("Events")] + /// a Unity Event to invoke when the looper is reached + [Tooltip("a Unity Event to invoke when the looper is reached")] + public UnityEvent OnLoop; + + /// sets the color of this feedback in the inspector + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.LooperColor; } } + #endif + public override bool LooperPause { get { return true; } } + + /// the duration of this feedback is the duration of the pause + public override float FeedbackDuration { get { return ApplyTimeMultiplier(PauseDuration); } set { PauseDuration = value; } } + + /// + /// On init we initialize our number of loops left + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + InInfiniteLoop = InfiniteLoop; + NumberOfLoopsLeft = NumberOfLoops; + } + + /// + /// On play we decrease our counter and play our pause + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active) + { + ProcessNewPauseDuration(); + InInfiniteLoop = InfiniteLoop; + NumberOfLoopsLeft--; + Owner.StartCoroutine(PlayPause()); + TriggerOnLoop(Owner); + } + } + + /// + /// + /// + /// + public virtual void TriggerOnLoop(MMFeedbacks source) + { + OnLoop.Invoke(); + + if (TriggerMMFeedbacksEvents) + { + MMFeedbacksEvent.Trigger(source, MMFeedbacksEvent.EventTypes.Loop); + } + } + + /// + /// On custom stop, we exit our infinite loop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + InInfiniteLoop = false; + } + + /// + /// On reset we reset our amount of loops left + /// + protected override void CustomReset() + { + base.CustomReset(); + InInfiniteLoop = InfiniteLoop; + NumberOfLoopsLeft = NumberOfLoops; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Looper.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Looper.cs.meta new file mode 100644 index 0000000..c437772 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Looper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 968b4fa81982e914bb16c2928a085407 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LooperStart.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LooperStart.cs new file mode 100644 index 0000000..8158d8e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LooperStart.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback can act as a pause but also as a start point for your loops. Add a FeedbackLooper below this (and after a few feedbacks) and your MMFeedbacks will loop between both + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback can act as a pause but also as a start point for your loops. Add a FeedbackLooper below this (and after a few feedbacks) and your MMFeedbacks will loop between both.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Loop/Looper Start")] + public class MMF_LooperStart : MMF_Pause + { + /// sets the color of this feedback in the inspector + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.LooperStartColor; } } + #endif + public override bool LooperStart { get { return true; } } + + /// the duration of this feedback is the duration of the pause + public override float FeedbackDuration { get { return ApplyTimeMultiplier(PauseDuration); } set { PauseDuration = value; } } + + /// + /// Overrides the default value + /// + protected virtual void Reset() + { + PauseDuration = 0; + } + + /// + /// On play we run our pause + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active) + { + ProcessNewPauseDuration(); + Owner.StartCoroutine(PlayPause()); + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LooperStart.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LooperStart.cs.meta new file mode 100644 index 0000000..5be21ff --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_LooperStart.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46aeaceda13e9344d9c572b88bd8e0c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Material.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Material.cs new file mode 100644 index 0000000..6cdd5f6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Material.cs @@ -0,0 +1,276 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the material of the target renderer everytime it's played.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/Material")] + public class MMF_Material : MMF_Feedback + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get => MMFeedbacksInspectorColors.RendererColor; } + public override bool EvaluateRequiresSetup() => (TargetRenderer == null); + public override string RequiredTargetText => TargetRenderer != null ? TargetRenderer.name : ""; + public override string RequiresSetupText => "This feedback requires that a TargetRenderer be set to be able to work properly. You can set one below."; + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetRenderer = FindAutomatedTarget(); + + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return (InterpolateTransition) ? TransitionDuration : 0f; } set { if (InterpolateTransition) { TransitionDuration = value; } } } + + /// the possible methods to switch materials + public enum Methods { Sequential, Random } + + [MMFInspectorGroup("Target Material", true, 61, true)] + /// the renderer to change material on + [Tooltip("the renderer to change material on")] + public Renderer TargetRenderer; + /// the list of material indexes we want to change on the target renderer. If left empty, will only target the material at index 0 + [FormerlySerializedAs("MaterialIndexes")] [Tooltip("the list of material indexes we want to change on the target renderer. If left empty, will only target the material at index 0")] + public int[] RendererMaterialIndexes; + + [MMFInspectorGroup("Material Change", true, 33)] + /// the selected method + [Tooltip("the selected method")] + public Methods Method; + /// whether or not the sequential order should loop + [MMFEnumCondition("Method", (int)Methods.Sequential)] + [Tooltip("whether or not the sequential order should loop")] + public bool Loop = true; + /// whether or not to always pick a new material in random mode + [MMFEnumCondition("Method", (int)Methods.Random)] + [Tooltip("whether or not to always pick a new material in random mode")] + public bool AlwaysNewMaterial = true; + /// the initial index to start with + [Tooltip("the initial index to start with")] + public int InitialIndex = 0; + /// the list of materials to pick from + [Tooltip("the list of materials to pick from")] + public List Materials; + + [MMFInspectorGroup("Interpolation", true, 35)] + /// whether or not to interpolate between 2 materials + /// IMPORTANT : this will only work for materials that share the same shader and texture (see https://docs.unity3d.com/ScriptReference/Material.Lerp.html) + public bool InterpolateTransition = false; + /// the duration of the interpolation, in seconds + public float TransitionDuration = 1f; + /// the animation curve to interpolate the transition on + public AnimationCurve TransitionCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1)); + + public virtual float GetTime() { return (ComputedTimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (ComputedTimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + protected int _currentIndex; + protected float _startedAt; + protected Coroutine[] _coroutines; + protected Material[] _tempMaterials; + protected Material[] _initialMaterials; + + /// + /// On init, grabs the current index + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + InitializeMaterials(); + } + + protected virtual void InitializeMaterials() + { + if (TargetRenderer == null) + { + return; + } + _currentIndex = InitialIndex; + _tempMaterials = new Material[TargetRenderer.materials.Length]; + _initialMaterials = new Material[TargetRenderer.materials.Length]; + for (int i = 0; i < _initialMaterials.Length; i++) + { + _initialMaterials[i] = new Material(TargetRenderer.materials[i]); + } + + if (RendererMaterialIndexes == null) + { + RendererMaterialIndexes = new int[1]; + } + if (RendererMaterialIndexes.Length == 0) + { + RendererMaterialIndexes = new int[1]; + RendererMaterialIndexes[0] = 0; + } + _coroutines = new Coroutine[RendererMaterialIndexes.Length]; + } + + /// + /// On play feedback, we change the material if possible + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (Materials.Count == 0) + { + Debug.LogError("[MMFeedbackMaterial on " + Owner.name + "] The Materials array is empty."); + return; + } + + int newIndex = DetermineNextIndex(); + + if (Materials[newIndex] == null) + { + Debug.LogError("[MMFeedbackMaterial on " + Owner.name + "] Attempting to switch to a null material."); + return; + } + + if (InterpolateTransition) + { + for (int i = 0; i < RendererMaterialIndexes.Length; i++) + { + if (_coroutines[i] != null) { Owner.StopCoroutine(_coroutines[i]); } + _coroutines[i] = Owner.StartCoroutine(TransitionMaterial(TargetRenderer.materials[RendererMaterialIndexes[i]], Materials[newIndex], RendererMaterialIndexes[i])); + } + } + else + { + ApplyMaterial(Materials[newIndex]); + } + } + + /// + /// Applies the new material to all indexes + /// + /// + protected virtual void ApplyMaterial(Material material) + { + _tempMaterials = TargetRenderer.materials; + for (int i = 0; i < RendererMaterialIndexes.Length; i++) + { + _tempMaterials[RendererMaterialIndexes[i]] = material; + } + TargetRenderer.materials = _tempMaterials; + } + + /// + /// Lerps to destination material for all indexes + /// + /// + /// + /// + /// + protected virtual void LerpMaterial(Material fromMaterial, Material toMaterial, float t, int materialIndex) + { + _tempMaterials = TargetRenderer.materials; + for (int i = 0; i < RendererMaterialIndexes.Length; i++) + { + _tempMaterials[materialIndex].Lerp(fromMaterial, toMaterial, t); + } + TargetRenderer.materials = _tempMaterials; + } + + /// + /// A coroutine used to interpolate between materials + /// + /// + /// + /// + protected virtual IEnumerator TransitionMaterial(Material originalMaterial, Material newMaterial, int materialIndex) + { + IsPlaying = true; + _startedAt = GetTime(); + while (GetTime() - _startedAt < TransitionDuration) + { + float time = MMFeedbacksHelpers.Remap(GetTime() - _startedAt, 0f, TransitionDuration, 0f, 1f); + float t = TransitionCurve.Evaluate(time); + + LerpMaterial(originalMaterial, newMaterial, t, materialIndex); + yield return null; + } + float finalt = TransitionCurve.Evaluate(1f); + LerpMaterial(originalMaterial, newMaterial, finalt, materialIndex); + IsPlaying = false; + } + + /// + /// Determines the new material to pick + /// + /// + protected virtual int DetermineNextIndex() + { + switch(Method) + { + case Methods.Random: + int random = Random.Range(0, Materials.Count); + if (AlwaysNewMaterial) + { + while (_currentIndex == random) + { + random = Random.Range(0, Materials.Count); + } + } + _currentIndex = random; + return _currentIndex; + + case Methods.Sequential: + _currentIndex++; + if (_currentIndex >= Materials.Count) + { + _currentIndex = Loop ? 0 : _currentIndex - 1; + } + return _currentIndex; + } + return 0; + } + + /// + /// Stops the transition on stop if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active && FeedbackTypeAuthorized && (_coroutines != null)) + { + IsPlaying = false; + for (int i = 0; i < RendererMaterialIndexes.Length; i++) + { + if (_coroutines[i] != null) + { + Owner.StopCoroutine(_coroutines[i]); + } + _coroutines[i] = null; + } + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + TargetRenderer.materials = _initialMaterials; + InitializeMaterials(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Material.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Material.cs.meta new file mode 100644 index 0000000..8da6366 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Material.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1a5ec5dd90c97b4290f922165118df9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_MaterialSetProperty.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_MaterialSetProperty.cs new file mode 100644 index 0000000..c6829e9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_MaterialSetProperty.cs @@ -0,0 +1,311 @@ +using MoreMountains.Tools; +using UnityEngine; +using System.Collections; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you set a property on the target renderer's material + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you set a property on the target renderer's material")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/Material Set Property")] + public class MMF_MaterialSetProperty : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRenderer == null); } + public override string RequiredTargetText { get { return TargetRenderer != null ? TargetRenderer.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRenderer be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasRandomness => true; + public override bool HasCustomInspectors => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetRenderer = FindAutomatedTarget(); + + public enum PropertyTypes { Color, Float, Integer, Texture, TextureOffset, TextureScale, Vector } + + [MMFInspectorGroup("Material", true, 12, true)] + /// the renderer to change the material on + [Tooltip("the renderer to change the material on")] + public Renderer TargetRenderer; + /// the ID of the material to target on the renderer + [Tooltip("the ID of the material to target on the renderer")] + public int MaterialID = 0; + /// the ID of the property to set, as exposed by the Visual Effect Graph + [Tooltip("the ID of the property to set, as exposed by the Visual Effect Graph")] + public string PropertyID; + /// the type of the property to set + [Tooltip("the type of the property to set")] + public PropertyTypes PropertyType = PropertyTypes.Float; + + /// if the property is a color, the new color to set + [Tooltip("if the property is a color, the new color to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Color)] + public Color NewColor = Color.red; + /// if the property is a float, the new float to set + [Tooltip("if the property is a float, the new float to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Float)] + public float NewFloat = 1f; + /// if the property is an int, the new int to set + [Tooltip("if the property is an int, the new int to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Integer)] + public int NewInt; + /// if the property is a texture, the new texture to set + [Tooltip("if the property is a texture, the new texture to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Texture)] + public Texture NewTexture; + /// if the property is a texture offset, the new offset to set + [Tooltip("if the property is a texture offset, the new offset to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.TextureOffset)] + public Vector2 NewOffset; + /// if the property is a texture scale, the new scale to set + [Tooltip("if the property is a texture scale, the new scale to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.TextureScale)] + public Vector2 NewScale; + /// if the property is a vector, the new vector4 to set + [Tooltip("if the property is a vector4, the new vector4 to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Vector)] + public Vector4 NewVector; + + [Header("Interpolation")] + /// whether or not to interpolate the value over time. If set to false, the change will be instant + [Tooltip("whether or not to interpolate the value over time. If set to false, the change will be instant")] + public bool InterpolateValue = false; + /// the duration of the interpolation + [Tooltip("the duration of the interpolation")] + [MMFCondition("InterpolateValue", true)] + public float Duration = 2f; + /// the curve over which to interpolate the value + [Tooltip("the curve over which to interpolate the value")] + [MMFCondition("InterpolateValue", true)] + public MMTweenType InterpolationCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + + public override float FeedbackDuration { get { return (InterpolateValue) ? ApplyTimeMultiplier(Duration) : 0f; } set { if (InterpolateValue) { Duration = value; } } } + + protected int _propertyID; + protected Color _initialColor; + protected float _initialFloat; + protected int _initialInt; + protected Texture _initialTexture; + protected Vector2 _initialOffset; + protected Vector2 _initialScale; + protected Vector4 _initialVector; + protected Coroutine _coroutine; + protected Color _newColor; + protected Vector2 _newVector2; + protected Vector2 _newVector4; + + /// + /// On init we turn the sprite renderer off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + _propertyID = Shader.PropertyToID(PropertyID); + + // we store the initial value of the property based on its type + if (Active) + { + switch (PropertyType) + { + case PropertyTypes.Color: + _initialColor = TargetRenderer.materials[MaterialID].GetColor(_propertyID); + break; + case PropertyTypes.Float: + _initialFloat = TargetRenderer.materials[MaterialID].GetFloat(_propertyID); + break; + case PropertyTypes.Integer: + _initialInt = TargetRenderer.materials[MaterialID].GetInt(_propertyID); + break; + case PropertyTypes.Texture: + _initialTexture = TargetRenderer.materials[MaterialID].GetTexture(_propertyID); + break; + case PropertyTypes.TextureOffset: + _initialOffset = TargetRenderer.materials[MaterialID].GetTextureOffset(_propertyID); + break; + case PropertyTypes.TextureScale: + _initialScale = TargetRenderer.materials[MaterialID].GetTextureScale(_propertyID); + break; + case PropertyTypes.Vector: + _initialVector = TargetRenderer.materials[MaterialID].GetVector(_propertyID); + break; + } + } + } + + /// + /// On play we turn raycastTarget on or off + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetRenderer == null) + { + return; + } + + if (InterpolateValue) + { + Owner.StartCoroutine(InterpolationSequence(feedbacksIntensity)); + } + else + { + switch (PropertyType) + { + case PropertyTypes.Color: + TargetRenderer.materials[MaterialID].SetColor(_propertyID, NewColor); + break; + case PropertyTypes.Float: + TargetRenderer.materials[MaterialID].SetFloat(_propertyID, NewFloat); + break; + case PropertyTypes.Integer: + TargetRenderer.materials[MaterialID].SetInt(_propertyID, NewInt); + break; + case PropertyTypes.Texture: + TargetRenderer.materials[MaterialID].SetTexture(_propertyID, NewTexture); + break; + case PropertyTypes.TextureOffset: + TargetRenderer.materials[MaterialID].SetTextureOffset(_propertyID, NewOffset); + break; + case PropertyTypes.TextureScale: + TargetRenderer.materials[MaterialID].SetTextureScale(_propertyID, NewScale); + break; + case PropertyTypes.Vector: + TargetRenderer.materials[MaterialID].SetVector(_propertyID, NewVector); + break; + } + } + + } + + /// + /// An internal coroutine used to interpolate the value over time + /// + /// + /// + protected virtual IEnumerator InterpolationSequence(float intensityMultiplier) + { + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetValueAtTime(remappedTime, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetValueAtTime(FinalNormalizedTime, intensityMultiplier); + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// Sets the value of the property at a certain time + /// + /// + /// + protected virtual void SetValueAtTime(float t, float intensityMultiplier) + { + switch (PropertyType) + { + case PropertyTypes.Color: + float evaluated = MMTween.Tween(t, 0f, 1f, _initialFloat, NewFloat, InterpolationCurve); + _newColor = Color.Lerp(_initialColor, NewColor, evaluated); + TargetRenderer.materials[MaterialID].SetColor(_propertyID, _newColor); + break; + case PropertyTypes.Float: + float newFloatValue = MMTween.Tween(t, 0f, 1f, _initialFloat, NewFloat, InterpolationCurve); + TargetRenderer.materials[MaterialID].SetFloat(_propertyID, newFloatValue); + break; + case PropertyTypes.Integer: + int newIntValue = (int)MMTween.Tween(t, 0f, 1f, _initialInt, NewInt, InterpolationCurve); + TargetRenderer.materials[MaterialID].SetInt(_propertyID, newIntValue); + break; + case PropertyTypes.Texture: + TargetRenderer.materials[MaterialID].SetTexture(_propertyID, NewTexture); + break; + case PropertyTypes.TextureOffset: + _newVector2 = MMTween.Tween(t, 0f, 1f, _initialOffset, NewOffset, InterpolationCurve); + TargetRenderer.materials[MaterialID].SetTextureOffset(_propertyID, _newVector2); + break; + case PropertyTypes.TextureScale: + _newVector2 = MMTween.Tween(t, 0f, 1f, _initialScale, NewScale, InterpolationCurve); + TargetRenderer.materials[MaterialID].SetTextureScale(_propertyID, _newVector2); + break; + case PropertyTypes.Vector: + _newVector4 = MMTween.Tween(t, 0f, 1f, _initialVector, NewVector, InterpolationCurve); + TargetRenderer.materials[MaterialID].SetVector(_propertyID, _newVector4); + break; + } + } + + /// + /// Stops this feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + // we restore initial values based on the property type + switch (PropertyType) + { + case PropertyTypes.Color: + TargetRenderer.materials[MaterialID].SetColor(_propertyID, _initialColor); + break; + case PropertyTypes.Float: + TargetRenderer.materials[MaterialID].SetFloat(_propertyID, _initialFloat); + break; + case PropertyTypes.Integer: + TargetRenderer.materials[MaterialID].SetInt(_propertyID, _initialInt); + break; + case PropertyTypes.Texture: + TargetRenderer.materials[MaterialID].SetTexture(_propertyID, _initialTexture); + break; + case PropertyTypes.TextureOffset: + TargetRenderer.materials[MaterialID].SetTextureOffset(_propertyID, _initialOffset); + break; + case PropertyTypes.TextureScale: + TargetRenderer.materials[MaterialID].SetTextureScale(_propertyID, _initialScale); + break; + case PropertyTypes.Vector: + TargetRenderer.materials[MaterialID].SetVector(_propertyID, _initialVector); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_MaterialSetProperty.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_MaterialSetProperty.cs.meta new file mode 100644 index 0000000..48a74d7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_MaterialSetProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4fc82dc40d8eff44e8cda79abbc18f87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Particles.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Particles.cs new file mode 100644 index 0000000..e6ce561 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Particles.cs @@ -0,0 +1,231 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Assertions; +using Random = UnityEngine.Random; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will play the associated particles system on play, and stop it on stop + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will simply play the specified ParticleSystem (from your scene) when played.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Particles/Particles Play")] + public class MMF_Particles : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundParticleSystem = FindAutomatedTarget(); + + #if UNITY_EDITOR + /// sets the inspector color for this feedback + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.ParticlesColor; } } + public override bool EvaluateRequiresSetup() { return (BoundParticleSystem == null); } + public override string RequiredTargetText { get { return BoundParticleSystem != null ? BoundParticleSystem.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundParticleSystem be set to be able to work properly. You can set one below."; } } + #endif + + public enum Modes { Play, Stop, Pause, Emit } + + [MMFInspectorGroup("Bound Particles", true, 41, true)] + /// whether to Play, Stop or Pause the target particle system when that feedback is played + [Tooltip("whether to Play, Stop or Pause the target particle system when that feedback is played")] + public Modes Mode = Modes.Play; + /// in Emit mode, the amount of particles per emit + [Tooltip("in Emit mode, the amount of particles per emit")] + [MMFEnumCondition("Mode", (int)Modes.Emit)] + public int EmitCount = 100; + /// the particle system to play with this feedback + [Tooltip("the particle system to play with this feedback")] + public ParticleSystem BoundParticleSystem; + /// a list of (optional) particle systems + [Tooltip("a list of (optional) particle systems")] + public List RandomParticleSystems; + /// if this is true, the particles will be moved to the position passed in parameters + [Tooltip("if this is true, the particles will be moved to the position passed in parameters")] + public bool MoveToPosition = false; + /// if this is true, the particle system's object will be set active on play + [Tooltip("if this is true, the particle system's object will be set active on play")] + public bool ActivateOnPlay = false; + /// if this is true, the particle system will be stopped on initialization + [Tooltip("if this is true, the particle system will be stopped on initialization")] + public bool StopSystemOnInit = true; + /// if this is true, the particle system will be stopped on reset + [Tooltip("if this is true, the particle system will be stopped on reset")] + public bool StopSystemOnReset = true; + /// if this is true, the particle system will be stopped on feedback stop + [Tooltip("if this is true, the particle system will be stopped on feedback stop")] + public bool StopSystemOnStopFeedback = true; + + /// the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + [MMFInspectorGroup("Simulation Speed", true, 43, false)] + /// whether or not to force a specific simulation speed on the target particle system(s) + [Tooltip("whether or not to force a specific simulation speed on the target particle system(s)")] + public bool ForceSimulationSpeed = false; + /// The min and max values at which to randomize the simulation speed, if ForceSimulationSpeed is true. A new value will be randomized every time this feedback plays + [Tooltip("The min and max values at which to randomize the simulation speed, if ForceSimulationSpeed is true. A new value will be randomized every time this feedback plays")] + [MMFCondition("ForceSimulationSpeed", true)] + public Vector2 ForcedSimulationSpeed = new Vector2(0.1f,1f); + + protected ParticleSystem.EmitParams _emitParams; + + /// + /// On init we stop our particle system + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (StopSystemOnInit) + { + StopParticles(); + } + } + + /// + /// On play we play our particle system + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + PlayParticles(position); + } + + /// + /// On Stop, stops the particle system + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (StopSystemOnStopFeedback) + { + StopParticles(); + } + } + + /// + /// On Reset, stops the particle system + /// + protected override void CustomReset() + { + base.CustomReset(); + + if (InCooldown) + { + return; + } + + if (StopSystemOnReset) + { + StopParticles(); + } + } + + /// + /// Plays a particle system + /// + /// + protected virtual void PlayParticles(Vector3 position) + { + if (MoveToPosition) + { + if (Mode != Modes.Emit) + { + BoundParticleSystem.transform.position = position; + foreach (ParticleSystem system in RandomParticleSystems) + { + system.transform.position = position; + } + } + else + { + _emitParams.position = position; + } + } + + if (ActivateOnPlay) + { + BoundParticleSystem.gameObject.SetActive(true); + foreach (ParticleSystem system in RandomParticleSystems) + { + system.gameObject.SetActive(true); + } + } + + if (RandomParticleSystems.Count > 0) + { + int random = Random.Range(0, RandomParticleSystems.Count); + HandleParticleSystemAction(RandomParticleSystems[random]); + } + else if (BoundParticleSystem != null) + { + HandleParticleSystemAction(BoundParticleSystem); + } + } + + /// + /// Changes the target particle system's sim speed if needed, and calls the specified action on it + /// + /// + protected virtual void HandleParticleSystemAction(ParticleSystem targetParticleSystem) + { + if (ForceSimulationSpeed) + { + ParticleSystem.MainModule main = targetParticleSystem.main; + main.simulationSpeed = Random.Range(ForcedSimulationSpeed.x, ForcedSimulationSpeed.y); + } + + switch (Mode) + { + case Modes.Play: + targetParticleSystem?.Play(); + break; + case Modes.Emit: + _emitParams.applyShapeToPosition = true; + targetParticleSystem.Emit(_emitParams, EmitCount); + break; + case Modes.Stop: + targetParticleSystem?.Stop(); + break; + case Modes.Pause: + targetParticleSystem?.Pause(); + break; + } + } + + /// + /// Stops all particle systems + /// + protected virtual void StopParticles() + { + foreach(ParticleSystem system in RandomParticleSystems) + { + system?.Stop(); + } + if (BoundParticleSystem != null) + { + BoundParticleSystem.Stop(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Particles.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Particles.cs.meta new file mode 100644 index 0000000..f3b3c4e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Particles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 917c0ac4eae5a1242b4e00cc4381eba1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ParticlesInstantiation.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ParticlesInstantiation.cs new file mode 100644 index 0000000..61858e2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ParticlesInstantiation.cs @@ -0,0 +1,513 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.SceneManagement; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will instantiate a particle system and play/stop it when playing/stopping the feedback + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will instantiate the specified ParticleSystem at the specified position on Start or on Play, optionally nesting them.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Particles/Particles Instantiation")] + public class MMF_ParticlesInstantiation : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + #if UNITY_EDITOR + /// sets the inspector color for this feedback + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.ParticlesColor; } } + public override bool EvaluateRequiresSetup() { return (ParticlesPrefab == null); } + public override string RequiredTargetText { get { return ParticlesPrefab != null ? ParticlesPrefab.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a ParticlesPrefab be set to be able to work properly. You can set one below."; } } + #endif + /// the different ways to position the instantiated object : + /// - FeedbackPosition : object will be instantiated at the position of the feedback, plus an optional offset + /// - Transform : the object will be instantiated at the specified Transform's position, plus an optional offset + /// - WorldPosition : the object will be instantiated at the specified world position vector, plus an optional offset + /// - Script : the position passed in parameters when calling the feedback + public enum PositionModes { FeedbackPosition, Transform, WorldPosition, Script } + /// the possible delivery modes + /// - cached : will cache a copy of the particle system and reuse it + /// - on demand : will instantiate a new particle system for every play + public enum Modes { Cached, OnDemand, Pool } + + [MMFInspectorGroup("Particles Instantiation", true, 37, true)] + /// whether the particle system should be cached or created on demand the first time + [Tooltip("whether the particle system should be cached or created on demand the first time")] + public Modes Mode = Modes.Pool; + + /// the initial and planned size of this object pool + [Tooltip("the initial and planned size of this object pool")] + [MMFEnumCondition("Mode", (int)Modes.Pool)] + public int ObjectPoolSize = 5; + /// whether or not to create a new pool even if one already exists for that same prefab + [Tooltip("whether or not to create a new pool even if one already exists for that same prefab")] + [MMFEnumCondition("Mode", (int)Modes.Pool)] + public bool MutualizePools = false; + /// if specified, the instantiated object (or the pool of objects) will be parented to this transform + [Tooltip("if specified, the instantiated object (or the pool of objects) will be parented to this transform ")] + [MMFEnumCondition("Mode", (int)Modes.Pool)] + public Transform ParentTransform; + + /// if this is false, a brand new particle system will be created every time + [Tooltip("if this is false, a brand new particle system will be created every time")] + [MMFEnumCondition("Mode", (int)Modes.OnDemand)] + public bool CachedRecycle = true; + /// the particle system to spawn + [Tooltip("the particle system to spawn")] + public ParticleSystem ParticlesPrefab; + /// the possible random particle systems + [Tooltip("the possible random particle systems")] + public List RandomParticlePrefabs; + /// if this is true, the particle system game object will be activated on Play, useful if you've somehow disabled it in a past Play + [Tooltip("if this is true, the particle system game object will be activated on Play, useful if you've somehow disabled it in a past Play")] + public bool ForceSetActiveOnPlay = false; + /// if this is true, the particle system will be stopped every time the feedback is reset - usually before play + [Tooltip("if this is true, the particle system will be stopped every time the feedback is reset - usually before play")] + public bool StopOnReset = false; + /// the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + [MMFInspectorGroup("Position", true, 29)] + /// the selected position mode + [Tooltip("the selected position mode")] + public PositionModes PositionMode = PositionModes.FeedbackPosition; + /// the position at which to spawn this particle system + [Tooltip("the position at which to spawn this particle system")] + [MMFEnumCondition("PositionMode", (int)PositionModes.Transform)] + public Transform InstantiateParticlesPosition; + /// the world position to move to when in WorldPosition mode + [Tooltip("the world position to move to when in WorldPosition mode")] + [MMFEnumCondition("PositionMode", (int)PositionModes.WorldPosition)] + public Vector3 TargetWorldPosition; + /// an offset to apply to the instantiation position + [Tooltip("an offset to apply to the instantiation position")] + public Vector3 Offset; + /// whether or not the particle system should be nested in hierarchy or floating on its own + [Tooltip("whether or not the particle system should be nested in hierarchy or floating on its own")] + [MMFEnumCondition("PositionMode", (int)PositionModes.Transform, (int)PositionModes.FeedbackPosition)] + public bool NestParticles = true; + /// whether or not to also apply rotation + [Tooltip("whether or not to also apply rotation")] + public bool ApplyRotation = false; + /// whether or not to also apply scale + [Tooltip("whether or not to also apply scale")] + public bool ApplyScale = false; + + [MMFInspectorGroup("Simulation Speed", true, 43, false)] + /// whether or not to force a specific simulation speed on the target particle system(s) + [Tooltip("whether or not to force a specific simulation speed on the target particle system(s)")] + public bool ForceSimulationSpeed = false; + /// The min and max values at which to randomize the simulation speed, if ForceSimulationSpeed is true. A new value will be randomized every time this feedback plays + [Tooltip("The min and max values at which to randomize the simulation speed, if ForceSimulationSpeed is true. A new value will be randomized every time this feedback plays")] + [MMFCondition("ForceSimulationSpeed", true)] + public Vector2 ForcedSimulationSpeed = new Vector2(0.1f,1f); + + protected ParticleSystem _instantiatedParticleSystem; + protected List _instantiatedRandomParticleSystems; + + protected MMMiniObjectPooler _objectPooler; + protected GameObject _newGameObject; + protected bool _poolCreatedOrFound = false; + protected Vector3 _scriptPosition; + + /// + /// On init, instantiates the particle system, positions it and nests it if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + if (!Active) + { + return; + } + + CacheParticleSystem(); + + CreatePools(owner); + } + + protected virtual bool ShouldCache => (Mode == Modes.OnDemand && CachedRecycle) || (Mode == Modes.Cached); + + protected virtual void CreatePools(MMF_Player owner) + { + if (Mode != Modes.Pool) + { + return; + } + + if ((ParticlesPrefab == null) && (RandomParticlePrefabs.Count == 0)) + { + return; + } + + if (!_poolCreatedOrFound) + { + if (_objectPooler != null) + { + _objectPooler.DestroyObjectPool(); + owner.ProxyDestroy(_objectPooler.gameObject); + } + + GameObject objectPoolGo = new GameObject(); + objectPoolGo.name = Owner.name+"_ObjectPooler"; + _objectPooler = objectPoolGo.AddComponent(); + _objectPooler.GameObjectToPool = ParticlesPrefab.gameObject; + _objectPooler.PoolSize = ObjectPoolSize; + _objectPooler.NestWaitingPool = NestParticles; + if (ParentTransform != null) + { + _objectPooler.transform.SetParent(ParentTransform); + } + else + { + _objectPooler.transform.SetParent(Owner.transform); + } + _objectPooler.MutualizeWaitingPools = MutualizePools; + _objectPooler.FillObjectPool(); + if ((Owner != null) && (objectPoolGo.transform.parent == null)) + { + SceneManager.MoveGameObjectToScene(objectPoolGo, Owner.gameObject.scene); + } + _poolCreatedOrFound = true; + } + + } + + protected virtual void CacheParticleSystem() + { + if (!ShouldCache) + { + return; + } + + InstantiateParticleSystem(); + } + + /// + /// Instantiates the particle system + /// + protected virtual void InstantiateParticleSystem() + { + Transform newParent = null; + + if (NestParticles) + { + if (PositionMode == PositionModes.FeedbackPosition) + { + newParent = Owner.transform; + } + if (PositionMode == PositionModes.Transform) + { + newParent = InstantiateParticlesPosition; + } + } + + if (RandomParticlePrefabs.Count > 0) + { + if (ShouldCache) + { + _instantiatedRandomParticleSystems = new List(); + foreach(ParticleSystem system in RandomParticlePrefabs) + { + ParticleSystem newSystem = GameObject.Instantiate(system, newParent) as ParticleSystem; + if (newParent == null) + { + SceneManager.MoveGameObjectToScene(newSystem.gameObject, Owner.gameObject.scene); + } + newSystem.Stop(); + _instantiatedRandomParticleSystems.Add(newSystem); + } + } + else + { + int random = Random.Range(0, RandomParticlePrefabs.Count); + _instantiatedParticleSystem = GameObject.Instantiate(RandomParticlePrefabs[random], newParent) as ParticleSystem; + if (newParent == null) + { + SceneManager.MoveGameObjectToScene(_instantiatedParticleSystem.gameObject, Owner.gameObject.scene); + } + } + } + else + { + if (ParticlesPrefab == null) + { + return; + } + _instantiatedParticleSystem = GameObject.Instantiate(ParticlesPrefab, newParent) as ParticleSystem; + _instantiatedParticleSystem.Stop(); + if (newParent == null) + { + SceneManager.MoveGameObjectToScene(_instantiatedParticleSystem.gameObject, Owner.gameObject.scene); + } + } + + if (_instantiatedParticleSystem != null) + { + PositionParticleSystem(_instantiatedParticleSystem); + } + + if ((_instantiatedRandomParticleSystems != null) && (_instantiatedRandomParticleSystems.Count > 0)) + { + foreach (ParticleSystem system in _instantiatedRandomParticleSystems) + { + PositionParticleSystem(system); + } + } + } + + protected virtual void PositionParticleSystem(ParticleSystem system) + { + if (InstantiateParticlesPosition == null) + { + if (Owner != null) + { + InstantiateParticlesPosition = Owner.transform; + } + } + + if (system != null) + { + system.Stop(); + + system.transform.position = GetPosition(Owner.transform.position); + + if (ApplyRotation) + { + system.transform.rotation = GetRotation(Owner.transform); + } + + if (ApplyScale) + { + system.transform.localScale = GetScale(Owner.transform); + } + + system.Clear(); + } + } + + /// + /// Gets the desired rotation of that particle system + /// + /// + /// + protected virtual Quaternion GetRotation(Transform target) + { + switch (PositionMode) + { + case PositionModes.FeedbackPosition: + return Owner.transform.rotation; + case PositionModes.Transform: + return InstantiateParticlesPosition.rotation; + case PositionModes.WorldPosition: + return Quaternion.identity; + case PositionModes.Script: + return Owner.transform.rotation; + default: + return Owner.transform.rotation; + } + } + + /// + /// Gets the desired scale of that particle system + /// + /// + /// + protected virtual Vector3 GetScale(Transform target) + { + switch (PositionMode) + { + case PositionModes.FeedbackPosition: + return Owner.transform.localScale; + case PositionModes.Transform: + return InstantiateParticlesPosition.localScale; + case PositionModes.WorldPosition: + return Owner.transform.localScale; + case PositionModes.Script: + return Owner.transform.localScale; + default: + return Owner.transform.localScale; + } + } + + /// + /// Gets the position + /// + /// + /// + protected virtual Vector3 GetPosition(Vector3 position) + { + switch (PositionMode) + { + case PositionModes.FeedbackPosition: + return Owner.transform.position + Offset; + case PositionModes.Transform: + return InstantiateParticlesPosition.position + Offset; + case PositionModes.WorldPosition: + return TargetWorldPosition + Offset; + case PositionModes.Script: + return _scriptPosition + Offset; + default: + return _scriptPosition + Offset; + } + } + + /// + /// On Play, plays the feedback + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _scriptPosition = position; + + if (Mode == Modes.Pool) + { + if (_objectPooler != null) + { + _newGameObject = _objectPooler.GetPooledGameObject(); + _instantiatedParticleSystem = _newGameObject.MMFGetComponentNoAlloc(); + if (_instantiatedParticleSystem != null) + { + PositionParticleSystem(_instantiatedParticleSystem); + _newGameObject.SetActive(true); + } + } + } + else + { + if (!ShouldCache) + { + InstantiateParticleSystem(); + } + else + { + GrabCachedParticleSystem(); + } + } + + if (_instantiatedParticleSystem != null) + { + if (ForceSetActiveOnPlay) + { + _instantiatedParticleSystem.gameObject.SetActive(true); + } + _instantiatedParticleSystem.Stop(); + _instantiatedParticleSystem.transform.position = GetPosition(position); + PositionParticleSystem(_instantiatedParticleSystem); + _instantiatedParticleSystem.gameObject.SetActive(true); + PlayTargetParticleSystem(_instantiatedParticleSystem); + } + + if ((_instantiatedRandomParticleSystems != null) && (_instantiatedRandomParticleSystems.Count > 0)) + { + foreach (ParticleSystem system in _instantiatedRandomParticleSystems) + { + + if (ForceSetActiveOnPlay) + { + system.gameObject.SetActive(true); + } + system.Stop(); + system.transform.position = GetPosition(position); + } + int random = Random.Range(0, _instantiatedRandomParticleSystems.Count); + PlayTargetParticleSystem(_instantiatedRandomParticleSystems[random]); + } + } + + /// + /// Forces the sim speed if needed, then plays the target particle system + /// + /// + protected virtual void PlayTargetParticleSystem(ParticleSystem targetParticleSystem) + { + if (ForceSimulationSpeed) + { + ParticleSystem.MainModule main = targetParticleSystem.main; + main.simulationSpeed = Random.Range(ForcedSimulationSpeed.x, ForcedSimulationSpeed.y); + } + targetParticleSystem.Play(); + } + + /// + /// Grabs and stores a random particle prefab + /// + protected virtual void GrabCachedParticleSystem() + { + if (RandomParticlePrefabs.Count > 0) + { + int random = Random.Range(0, RandomParticlePrefabs.Count); + _instantiatedParticleSystem = _instantiatedRandomParticleSystems[random]; + } + } + + /// + /// On Stop, stops the feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (_instantiatedParticleSystem != null) + { + _instantiatedParticleSystem?.Stop(); + } + if ((_instantiatedRandomParticleSystems != null) && (_instantiatedRandomParticleSystems.Count > 0)) + { + foreach(ParticleSystem system in _instantiatedRandomParticleSystems) + { + system.Stop(); + } + } + } + + /// + /// On Reset, stops the feedback + /// + protected override void CustomReset() + { + base.CustomReset(); + + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (InCooldown) + { + return; + } + + if (StopOnReset && (_instantiatedParticleSystem != null)) + { + _instantiatedParticleSystem.Stop(); + } + if ((_instantiatedRandomParticleSystems != null) && (_instantiatedRandomParticleSystems.Count > 0)) + { + foreach (ParticleSystem system in _instantiatedRandomParticleSystems) + { + system.Stop(); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ParticlesInstantiation.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ParticlesInstantiation.cs.meta new file mode 100644 index 0000000..2861fce --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ParticlesInstantiation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c0c9d2b8139a174a9adcecbfebc5ddb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Pause.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Pause.cs new file mode 100644 index 0000000..fb52ce0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Pause.cs @@ -0,0 +1,113 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine;using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will cause a pause when met, preventing any other feedback lower in the sequence to run until it's complete. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will cause a pause when met, preventing any other feedback lower in the sequence to run until it's complete.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Pause/Pause")] + public class MMF_Pause : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PauseColor; } } + public override bool DisplayFullHeaderColor => true; + #endif + public override IEnumerator Pause { get { return PauseWait(); } } + + [MMFInspectorGroup("Pause", true, 32)] + /// the duration of the pause, in seconds + [Tooltip("the duration of the pause, in seconds")] + public float PauseDuration = 1f; + + public bool RandomizePauseDuration = false; + + [MMFCondition("RandomizePauseDuration", true)] + public float MinPauseDuration = 1f; + [MMFCondition("RandomizePauseDuration", true)] + public float MaxPauseDuration = 3f; + [MMFCondition("RandomizePauseDuration", true)] + public bool RandomizeOnEachPlay = true; + + /// if this is true, you'll need to call the Resume() method on the host MMFeedbacks for this pause to stop, and the rest of the sequence to play + [Tooltip("if this is true, you'll need to call the Resume() method on the host MMFeedbacks for this pause to stop, and the rest of the sequence to play")] + public bool ScriptDriven = false; + /// if this is true, a script driven pause will resume after its AutoResumeAfter delay, whether it has been manually resumed or not + [Tooltip("if this is true, a script driven pause will resume after its AutoResumeAfter delay, whether it has been manually resumed or not")] + [MMFCondition("ScriptDriven", true)] + public bool AutoResume = false; + /// the duration after which to auto resume, regardless of manual resume calls beforehand + [Tooltip("the duration after which to auto resume, regardless of manual resume calls beforehand")] + [MMFCondition("AutoResume", true)] + public float AutoResumeAfter = 0.25f; + + /// the duration of this feedback is the duration of the pause + public override float FeedbackDuration { get { return ApplyTimeMultiplier(PauseDuration); } set { PauseDuration = value; } } + + /// + /// An IEnumerator used to wait for the duration of the pause, on scaled or unscaled time + /// + /// + protected virtual IEnumerator PauseWait() + { + yield return WaitFor(ApplyTimeMultiplier(PauseDuration)); + } + + /// + /// On init we cache our wait for seconds + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + ScriptDrivenPause = ScriptDriven; + ScriptDrivenPauseAutoResume = AutoResume ? AutoResumeAfter : -1f; + if (RandomizePauseDuration) + { + PauseDuration = Random.Range(MinPauseDuration, MaxPauseDuration); + } + } + + /// + /// On play we trigger our pause + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + ProcessNewPauseDuration(); + Owner.StartCoroutine(PlayPause()); + } + + /// + /// Computes a new pause duration if needed + /// + protected virtual void ProcessNewPauseDuration() + { + if (RandomizePauseDuration && RandomizeOnEachPlay) + { + PauseDuration = Random.Range(MinPauseDuration, MaxPauseDuration); + } + } + + /// + /// Pause coroutine + /// + /// + protected virtual IEnumerator PlayPause() + { + yield return Pause; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Pause.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Pause.cs.meta new file mode 100644 index 0000000..f6e797c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Pause.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12023ad27a32d0447a80e1043fa53b22 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerChain.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerChain.cs new file mode 100644 index 0000000..7d0574b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerChain.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback allows you to chain any number of target MMF Players and play them in sequence, with optional delays before and after + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to chain any number of target MMF Players and play them in sequence, with optional delays before and after")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Feedbacks/MMF Player Chain")] + public class MMF_PlayerChain : MMF_Feedback + { + /// + /// A class used to store and define items in a chain of MMF Players + /// + [Serializable] + public class PlayerChainItem + { + /// the target MMF Player + [Tooltip("the target MMF Player")] + public MMF_Player TargetPlayer; + /// a delay in seconds to wait for before playing this MMF Player (x) and after (y) + [Tooltip("a delay in seconds to wait for before playing this MMF Player (x) and after (y)")] + [MMVector("Before", "After")] + public Vector2 Delay; + /// whether this player is active in the list or not. Inactive players will be skipped when playing the chain of players + [Tooltip("whether this player is active in the list or not. Inactive players will be skipped when playing the chain of players")] + public bool Inactive = false; + /// if this is true, the sequence will be blocked until this player has completed playing + [Tooltip("if this is true, the sequence will be blocked until this player has completed playing")] + public bool WaitUntilComplete = true; + } + + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.FeedbacksColor; } } + #endif + /// the duration of this feedback is the duration of the chain + public override float FeedbackDuration + { + get + { + if ((Players == null) || (Players.Count == 0)) + { + return 0f; + } + + float totalDuration = 0f; + foreach (PlayerChainItem item in Players) + { + if ((item == null) || (item.TargetPlayer == null) || item.Inactive) + { + continue; + } + + totalDuration += item.Delay.x; + totalDuration += item.TargetPlayer.TotalDuration; + totalDuration += item.Delay.y; + } + return totalDuration; + } + } + + [MMFInspectorGroup("Feedbacks", true, 79)] + /// the list of MMF Player that make up the chain. The chain's items will be played from index 0 to the last in the list + [Tooltip("the list of MMF Player that make up the chain. The chain's items will be played from index 0 to the last in the list")] + public List Players; + + /// + /// On Play we start our chain + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if ((Players == null) || (Players.Count == 0)) + { + return; + } + + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + Owner.StartCoroutine(PlayChain()); + } + + /// + /// Plays all players in the chain in sequence + /// + /// + protected virtual IEnumerator PlayChain() + { + IsPlaying = true; + foreach (PlayerChainItem item in Players) + { + if ((item == null) || (item.TargetPlayer == null) || item.Inactive) + { + continue; + } + + if (item.Delay.x > 0) { yield return WaitFor(item.Delay.x); } + + if (item.WaitUntilComplete) + { + item.TargetPlayer.PlayFeedbacks(); + yield return WaitFor(item.TargetPlayer.TotalDuration); + } + else + { + item.TargetPlayer.PlayFeedbacks(); + } + + if (item.Delay.y > 0) { yield return WaitFor(item.Delay.y); } + } + while (FeedbacksStillPlaying()) + { + yield return null; + } + IsPlaying = false; + } + + protected virtual bool FeedbacksStillPlaying() + { + bool feedbacksStillPlaying = false; + foreach (PlayerChainItem item in Players) + { + if (item.TargetPlayer.IsPlaying) + { + feedbacksStillPlaying = true; + } + } + return feedbacksStillPlaying; + } + + /// + /// On skip to the end, we skip for all players in our chain + /// + /// + /// + protected override void CustomSkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) + { + foreach (PlayerChainItem item in Players) + { + if ((item == null) || (item.TargetPlayer == null) || item.Inactive) + { + continue; + } + + item.TargetPlayer.PlayFeedbacks(); + item.TargetPlayer.SkipToTheEnd(); + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + foreach (PlayerChainItem item in Players) + { + item.TargetPlayer.RestoreInitialValues(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerChain.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerChain.cs.meta new file mode 100644 index 0000000..80e59d5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerChain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d44c523d89caed94faa174d7a7b628f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerControl.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerControl.cs new file mode 100644 index 0000000..5f39108 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerControl.cs @@ -0,0 +1,187 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback allows you to control one or more target MMF Players + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control one or more target MMF Players")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Feedbacks/MMF Player Control")] + public class MMF_PlayerControl : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.FeedbacksColor; } } + public override string RequiredTargetText => Mode.ToString(); + #endif + + public override bool HasChannel => false; + + public override float FeedbackDuration + { + get + { + if (TargetPlayers == null) + { + return 0f; + } + + if (!WaitForTargetPlayersToFinish) + { + return 0f; + } + + if ((Mode == Modes.PlayFeedbacks) && (TargetPlayers.Count > 0)) + { + float totalDuration = 0f; + foreach (MMF_Player player in TargetPlayers) + { + if ((player != null) && (totalDuration < player.TotalDuration)) + { + totalDuration = player.TotalDuration; + } + } + + return totalDuration; + } + + return 0f; + } + } + + public override bool IsPlaying + { + get + { + if (WaitForTargetPlayersToFinish) + { + foreach (MMF_Player player in TargetPlayers) + { + if (player.IsPlaying) + { + return true; + } + } + } + + return false; + } + } + + public enum Modes + { + PlayFeedbacks, + StopFeedbacks, + PauseFeedbacks, + ResumeFeedbacks, + Initialization, + PlayFeedbacksInReverse, + PlayFeedbacksOnlyIfReversed, + PlayFeedbacksOnlyIfNormalDirection, + ResetFeedbacks, + Revert, + SetDirectionTopToBottom, + SetDirectionBottomToTop, + RestoreInitialValues, + SkipToTheEnd, + RefreshCache + } + + + [MMFInspectorGroup("MMF Player", true, 79)] + + /// a list of target MMF_Players to play + [Tooltip("a specific MMFeedbacks / MMF_Player to play")] + public List TargetPlayers; + /// if this is true, this feedback will be considered as Playing while any of the target players are still Playing + [Tooltip("if this is true, this feedback will be considered as Playing while any of the target players are still Playing")] + public bool WaitForTargetPlayersToFinish = true; + + public Modes Mode = Modes.PlayFeedbacks; + + /// + /// On init we turn the light off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + } + + /// + /// On Play we trigger the selected method on our target players + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (TargetPlayers.Count == 0) + { + return; + } + + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (Mode) + { + case Modes.PlayFeedbacks: + foreach (MMF_Player player in TargetPlayers) { player.PlayFeedbacks(position, feedbacksIntensity); } + break; + case Modes.StopFeedbacks: + foreach (MMF_Player player in TargetPlayers) { player.StopFeedbacks(); } + break; + case Modes.PauseFeedbacks: + foreach (MMF_Player player in TargetPlayers) { player.PauseFeedbacks(); } + break; + case Modes.ResumeFeedbacks: + foreach (MMF_Player player in TargetPlayers) { player.ResumeFeedbacks(); } + break; + case Modes.Initialization: + foreach (MMF_Player player in TargetPlayers) { player.Initialization(); } + break; + case Modes.PlayFeedbacksInReverse: + foreach (MMF_Player player in TargetPlayers) { player.PlayFeedbacksInReverse(position, feedbacksIntensity); } + break; + case Modes.PlayFeedbacksOnlyIfReversed: + foreach (MMF_Player player in TargetPlayers) { player.PlayFeedbacksOnlyIfReversed(position, feedbacksIntensity); } + break; + case Modes.PlayFeedbacksOnlyIfNormalDirection: + foreach (MMF_Player player in TargetPlayers) { player.PlayFeedbacksOnlyIfNormalDirection(position, feedbacksIntensity); } + break; + case Modes.ResetFeedbacks: + foreach (MMF_Player player in TargetPlayers) { player.ResetFeedbacks(); } + break; + case Modes.Revert: + foreach (MMF_Player player in TargetPlayers) { player.Revert(); } + break; + case Modes.SetDirectionTopToBottom: + foreach (MMF_Player player in TargetPlayers) { player.SetDirectionTopToBottom(); } + break; + case Modes.SetDirectionBottomToTop: + foreach (MMF_Player player in TargetPlayers) { player.SetDirectionBottomToTop(); } + break; + case Modes.RestoreInitialValues: + foreach (MMF_Player player in TargetPlayers) { player.RestoreInitialValues(); } + break; + case Modes.SkipToTheEnd: + foreach (MMF_Player player in TargetPlayers) { player.SkipToTheEnd(); } + break; + case Modes.RefreshCache: + foreach (MMF_Player player in TargetPlayers) { player.RefreshCache(); } + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerControl.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerControl.cs.meta new file mode 100644 index 0000000..50e9f98 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PlayerControl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3229bd32ac955842a56a44c38a45f9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Position.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Position.cs new file mode 100644 index 0000000..2a9a6fd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Position.cs @@ -0,0 +1,469 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// this feedback will let you animate the position of + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will animate the target object's position over time, for the specified duration, from the chosen initial position to the chosen destination. These can either be relative Vector3 offsets from the Feedback's position, or Transforms. If you specify transforms, the Vector3 values will be ignored.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Position")] + public class MMF_Position : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor => MMFeedbacksInspectorColors.TransformColor; + public override bool EvaluateRequiresSetup() => (AnimatePositionTarget == null); + public override string RequiredTargetText => AnimatePositionTarget != null ? AnimatePositionTarget.name : ""; + public override string RequiresSetupText => "This feedback requires that a AnimatePositionTarget and a Destination be set to be able to work properly. You can set one below."; + public override bool HasCustomInspectors => true; + #endif + public override bool HasRandomness => true; + public override bool CanForceInitialValue => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => AnimatePositionTarget = FindAutomatedTargetGameObject(); + + public enum Spaces { World, Local, RectTransform, Self } + public enum Modes { AtoB, AlongCurve, ToDestination } + public enum TimeScales { Scaled, Unscaled } + + [MMFInspectorGroup("Position Target", true, 61, true)] + /// the object this feedback will animate the position for + [Tooltip("the object this feedback will animate the position for")] + public GameObject AnimatePositionTarget; + + [MMFInspectorGroup("Transition", true, 63)] + /// the mode this animation should follow (either going from A to B, or moving along a curve) + [Tooltip("the mode this animation should follow (either going from A to B, or moving along a curve)")] + public Modes Mode = Modes.AtoB; + /// the space in which to move the position in + [Tooltip("the space in which to move the position in")] + public Spaces Space = Spaces.World; + + /// whether or not to randomize remap values between their base and alt values on play, useful to add some variety every time you play this feedback + [Tooltip("whether or not to randomize remap values between their base and alt values on play, useful to add some variety every time you play this feedback")] + [MMFEnumCondition("Mode", (int)Modes.AlongCurve)] + public bool RandomizeRemap = false; + /// the duration of the animation on play + [Tooltip("the duration of the animation on play")] + public float AnimatePositionDuration = 0.2f; + + /// the MMTween curve definition to use instead of the animation curve to define the acceleration of the movement + [Tooltip("the MMTween curve definition to use instead of the animation curve to define the acceleration of the movement")] + [MMFEnumCondition("Mode", (int)Modes.AtoB, (int)Modes.ToDestination)] + public MMTweenType AnimatePositionTween = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + + /// the value to remap the curve's 0 value to + [MMFEnumCondition("Mode", (int)Modes.AlongCurve)] + [Tooltip("the value to remap the curve's 0 value to")] + public float RemapCurveZero = 0f; + /// in randomize remap mode, the value to remap the curve's 0 value to (randomized between this and RemapCurveZero) + [MMFCondition("RandomizeRemap", true)] + [MMFEnumCondition("Mode", (int)Modes.AlongCurve)] + [Tooltip("in randomize remap mode, the value to remap the curve's 0 value to (randomized between this and RemapCurveZero")] + public float RemapCurveZeroAlt = 0f; + /// the value to remap the curve's 1 value to + [Tooltip("the value to remap the curve's 1 value to")] + [MMFEnumCondition("Mode", (int)Modes.AlongCurve)] + [FormerlySerializedAs("CurveMultiplier")] + public float RemapCurveOne = 1f; + /// in randomize remap mode, the value to remap the curve's 1 value to (randomized between this and RemapCurveOne) + [Tooltip("in randomize remap mode, the value to remap the curve's 1 value to (randomized between this and RemapCurveOne)")] + [MMFCondition("RandomizeRemap", true)] + [MMFEnumCondition("Mode", (int)Modes.AlongCurve)] + public float RemapCurveOneAlt = 1f; + /// if this is true, the x position will be animated + [Tooltip("if this is true, the x position will be animated")] + [MMFEnumCondition("Mode", (int)Modes.AlongCurve)] + public bool AnimateX; + /// the acceleration of the movement + [Tooltip("the acceleration of the movement")] + [MMFCondition("AnimateX", true)] + public MMTweenType AnimatePositionTweenX = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(0.6f, -1f), new Keyframe(1, 0f))); + /// if this is true, the y position will be animated + [Tooltip("if this is true, the y position will be animated")] + [MMFEnumCondition("Mode", (int)Modes.AlongCurve)] + public bool AnimateY; + /// the acceleration of the movement + [Tooltip("the acceleration of the movement")] + [MMFCondition("AnimateY", true)] + public MMTweenType AnimatePositionTweenY = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(0.6f, -1f), new Keyframe(1, 0f))); + /// if this is true, the z position will be animated + [Tooltip("if this is true, the z position will be animated")] + [MMFEnumCondition("Mode", (int)Modes.AlongCurve)] + public bool AnimateZ; + /// the acceleration of the movement + [Tooltip("the acceleration of the movement")] + [MMFCondition("AnimateZ", true)] + public MMTweenType AnimatePositionTweenZ = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(0.6f, -1f), new Keyframe(1, 0f))); + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + [MMFInspectorGroup("Positions", true, 64)] + /// if this is true, movement will be relative to the object's initial position. So moving its y position along a curve going from 0 to 1 will move it up one unit. If this is false, in that same example, it'll be moved from 0 to 1 in absolute coordinates. + [Tooltip("if this is true, movement will be relative to the object's initial position. So moving its y position along a curve going from 0 to 1 will move it up one unit. If this is false, in that same example, it'll be moved from 0 to 1 in absolute coordinates.")] + public bool RelativePosition = true; + /// if this is true, initial and destination positions will be recomputed on every play + [Tooltip("if this is true, initial and destination positions will be recomputed on every play")] + public bool DeterminePositionsOnPlay = false; + /// the initial position + [Tooltip("the initial position")] + [MMFEnumCondition("Mode", (int)Modes.AtoB, (int)Modes.AlongCurve)] + public Vector3 InitialPosition = Vector3.zero; + /// the destination position + [Tooltip("the destination position")] + [MMFEnumCondition("Mode", (int)Modes.AtoB, (int)Modes.ToDestination)] + public Vector3 DestinationPosition = Vector3.one; + /// the initial transform - if set, takes precedence over the Vector3 above + [Tooltip("the initial transform - if set, takes precedence over the Vector3 above")] + [MMFEnumCondition("Mode", (int)Modes.AtoB, (int)Modes.AlongCurve)] + public Transform InitialPositionTransform; + /// the destination transform - if set, takes precedence over the Vector3 above + [Tooltip("the destination transform - if set, takes precedence over the Vector3 above")] + [MMFEnumCondition("Mode", (int)Modes.AtoB, (int)Modes.ToDestination)] + public Transform DestinationPositionTransform; + /// the duration of this feedback is the duration of its animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(AnimatePositionDuration); } set { AnimatePositionDuration = value; } } + + /// [DEPRECATED] the acceleration of the movement + [HideInInspector] public AnimationCurve AnimatePositionCurveX = null; + /// [DEPRECATED] the acceleration of the movement + [HideInInspector] public AnimationCurve AnimatePositionCurveY = null; + /// [DEPRECATED] the acceleration of the movement + [HideInInspector] public AnimationCurve AnimatePositionCurveZ = null; + /// [DEPRECATED] the acceleration of the movement - this is not used anymore, replaced by the AnimatePositionTween + [HideInInspector] public AnimationCurve AnimatePositionCurve = null; + + protected Vector3 _newPosition; + protected Vector3 _currentPosition; + protected RectTransform _rectTransform; + protected Vector3 _initialPosition; + protected Vector3 _destinationPosition; + protected Coroutine _coroutine; + protected Vector3 _workInitialPosition; + protected Vector3 _workDestinationPosition; + protected float _remapCurveZero; + protected float _remapCurveOne; + + /// + /// On init, we set our initial and destination positions (transform will take precedence over vector3s) + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active) + { + if (AnimatePositionTarget == null) + { + Debug.LogWarning("The animate position target for " + this + " is null, you have to define it in the inspector"); + return; + } + + if (Space == Spaces.RectTransform) + { + _rectTransform = AnimatePositionTarget.GetComponent(); + } + + if (!DeterminePositionsOnPlay) + { + DeterminePositions(); + } + } + } + + protected virtual void DeterminePositions() + { + if (DeterminePositionsOnPlay && RelativePosition && (InitialPosition != Vector3.zero)) + { + return; + } + + if (InitialPositionTransform != null) + { + _workInitialPosition = GetPosition(InitialPositionTransform); + } + else + { + _workInitialPosition = RelativePosition ? GetPosition(AnimatePositionTarget.transform) + InitialPosition : InitialPosition; + if (Space == Spaces.Self && !RelativePosition) + { + _workInitialPosition = AnimatePositionTarget.transform.position + InitialPosition; + } + } + if (DestinationPositionTransform != null) + { + _workDestinationPosition = GetPosition(DestinationPositionTransform); + } + else + { + _workDestinationPosition = RelativePosition ? GetPosition(AnimatePositionTarget.transform) + DestinationPosition : DestinationPosition; + } + } + + /// + /// On Play, we move our object from A to B + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (AnimatePositionTarget == null)) + { + return; + } + + if (Active || Owner.AutoPlayOnEnable) + { + if (DeterminePositionsOnPlay && NormalPlayDirection) + { + DeterminePositions(); + } + + switch (Mode) + { + case Modes.ToDestination: + _initialPosition = GetPosition(AnimatePositionTarget.transform); + _destinationPosition = _workDestinationPosition; + if (DestinationPositionTransform != null) + { + _destinationPosition = GetPosition(DestinationPositionTransform); + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(MoveFromTo(AnimatePositionTarget, _initialPosition, _destinationPosition, FeedbackDuration, AnimatePositionTween)); + break; + case Modes.AtoB: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(MoveFromTo(AnimatePositionTarget, _workInitialPosition, _workDestinationPosition, FeedbackDuration, AnimatePositionTween)); + break; + case Modes.AlongCurve: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + _remapCurveZero = RandomizeRemap ? Random.Range(RemapCurveZero, RemapCurveZeroAlt) : RemapCurveZero; + _remapCurveOne = RandomizeRemap ? Random.Range(RemapCurveOne, RemapCurveOneAlt) : RemapCurveOne; + + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(MoveAlongCurve(AnimatePositionTarget, _workInitialPosition, FeedbackDuration, intensityMultiplier)); + break; + } + } + } + + /// + /// Moves the object along a curve + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator MoveAlongCurve(GameObject movingObject, Vector3 initialPosition, float duration, float intensityMultiplier) + { + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : duration; + while ((journey >= 0) && (journey <= duration) && (duration > 0)) + { + float percent = Mathf.Clamp01(journey / duration); + + ComputeNewCurvePosition(movingObject, initialPosition, percent, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + ComputeNewCurvePosition(movingObject, initialPosition, FinalNormalizedTime, intensityMultiplier); + _coroutine = null; + IsPlaying = false; + yield break; + } + + /// + /// Evaluates the position curves and computes the new position + /// + /// + /// + /// + protected virtual void ComputeNewCurvePosition(GameObject movingObject, Vector3 initialPosition, float percent, float intensityMultiplier) + { + float newValueX = MMTween.Tween(percent, 0f, 1f, _remapCurveZero * intensityMultiplier, _remapCurveOne * intensityMultiplier, AnimatePositionTweenX); + float newValueY = MMTween.Tween(percent, 0f, 1f, _remapCurveZero * intensityMultiplier, _remapCurveOne * intensityMultiplier, AnimatePositionTweenY); + float newValueZ = MMTween.Tween(percent, 0f, 1f, _remapCurveZero * intensityMultiplier, _remapCurveOne * intensityMultiplier, AnimatePositionTweenZ); + + _newPosition = initialPosition; + _currentPosition = GetPosition(movingObject.transform); + + if (RelativePosition) + { + _newPosition.x = AnimateX ? initialPosition.x + newValueX : _currentPosition.x; + _newPosition.y = AnimateY ? initialPosition.y + newValueY : _currentPosition.y; + _newPosition.z = AnimateZ ? initialPosition.z + newValueZ : _currentPosition.z; + } + else + { + _newPosition.x = AnimateX ? newValueX : _currentPosition.x; + _newPosition.y = AnimateY ? newValueY : _currentPosition.y; + _newPosition.z = AnimateZ ? newValueZ : _currentPosition.z; + } + + if (Space == Spaces.Self) + { + _newPosition.x = AnimateX ? newValueX : 0f; + _newPosition.y = AnimateY ? newValueY : 0f; + _newPosition.z = AnimateZ ? newValueZ : 0f; + } + + SetPosition(movingObject.transform, _newPosition); + } + + /// + /// Moves an object from point A to point B in a given time + /// + /// Moving object. + /// Point a. + /// Point b. + /// Time. + protected virtual IEnumerator MoveFromTo(GameObject movingObject, Vector3 pointA, Vector3 pointB, float duration, MMTweenType tweenType) + { + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : duration; + while ((journey >= 0) && (journey <= duration) && (duration > 0)) + { + float curveValue = MMTween.Tween(journey, 0f, duration, 0f, 1f, tweenType); + + _newPosition = Vector3.LerpUnclamped(pointA, pointB, curveValue); + SetPosition(movingObject.transform, _newPosition); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + + // set final position + if (NormalPlayDirection) + { + SetPosition(movingObject.transform, pointB); + } + else + { + SetPosition(movingObject.transform, pointA); + } + _coroutine = null; + IsPlaying = false; + yield break; + } + + /// + /// Gets the world, local or anchored position + /// + /// + /// + protected virtual Vector3 GetPosition(Transform target) + { + switch (Space) + { + case Spaces.World: + return target.position; + case Spaces.Local: + return target.localPosition; + case Spaces.RectTransform: + return target.gameObject.GetComponent().anchoredPosition; + case Spaces.Self: + return target.position; + } + return Vector3.zero; + } + + /// + /// Sets the position, localposition or anchoredposition of the target + /// + /// + /// + protected virtual void SetPosition(Transform target, Vector3 newPosition) + { + switch (Space) + { + case Spaces.World: + target.position = newPosition; + break; + case Spaces.Local: + target.localPosition = newPosition; + break; + case Spaces.RectTransform: + _rectTransform.anchoredPosition = newPosition; + break; + case Spaces.Self: + target.position = _workInitialPosition; + if ((Mode == Modes.AtoB) || (Mode == Modes.ToDestination)) + { + newPosition -= _workInitialPosition; + } + target.Translate(newPosition, target); + break; + } + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + SetPosition(AnimatePositionTarget.transform, _workInitialPosition); + } + + /// + /// On disable we reset our coroutine + /// + public override void OnDisable() + { + _coroutine = null; + } + + /// + /// On Validate, we migrate our deprecated animation curves to our tween types if needed + /// + public override void OnValidate() + { + base.OnValidate(); + MMFeedbacksHelpers.MigrateCurve(AnimatePositionCurve, AnimatePositionTween, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimatePositionCurveX, AnimatePositionTweenX, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimatePositionCurveY, AnimatePositionTweenY, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimatePositionCurveZ, AnimatePositionTweenZ, Owner); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Position.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Position.cs.meta new file mode 100644 index 0000000..f4ec4df --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Position.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0712f49a894a7149b9dcdb51af896d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionShake.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionShake.cs new file mode 100644 index 0000000..1087236 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionShake.cs @@ -0,0 +1,193 @@ +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you emit a PositionShake event. This will be caught by MMPositionShakers (on the specified channel). + /// Position shakers, as the name suggests, are used to shake the position of a transform, along a direction, with optional noise and other fine control options. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Position Shake")] + [FeedbackHelp("This feedback lets you emit a PositionShake event. This will be caught by MMPositionShakers (on the specified channel)." + + " Position shakers, as the name suggests, are used to shake the position of a transform, along a direction, with optional noise and other fine control options.")] + public class MMF_PositionShake : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + public override bool HasRange => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetShaker = FindAutomatedTarget(); + + [MMFInspectorGroup("Optional Target", true, 33)] + /// a specific (and optional) shaker to target, regardless of its channel + [Tooltip("a specific (and optional) shaker to target, regardless of its channel")] + public MMPositionShaker TargetShaker; + + [MMFInspectorGroup("Position Shake", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.5f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Shake Settings", true, 42)] + /// the speed at which the transform should shake + [Tooltip("the speed at which the transform should shake")] + public float ShakeSpeed = 20f; + /// the maximum distance from its initial position the transform will move to during the shake + [Tooltip("the maximum distance from its initial position the transform will move to during the shake")] + public float ShakeRange = 0.5f; + + [MMFInspectorGroup("Direction", true, 43)] + /// the direction along which to shake the transform's position + [Tooltip("the direction along which to shake the transform's position")] + public Vector3 ShakeMainDirection = Vector3.up; + /// if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection + [Tooltip("if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection")] + public bool RandomizeDirection = false; + /// when in RandomizeDirection mode, a vector against which to randomize the main direction + [Tooltip("when in RandomizeDirection mode, a vector against which to randomize the main direction")] + [MMFCondition("RandomizeDirection", true)] + public Vector3 ShakeAltDirection = Vector3.up; + /// if this is true, a new direction will be randomized every time a shake happens + [Tooltip("if this is true, a new direction will be randomized every time a shake happens")] + public bool RandomizeDirectionOnPlay = false; + /// whether or not to randomize the x value of the main direction + [Tooltip("whether or not to randomize the x value of the main direction")] + public bool RandomizeDirectionX = true; + /// whether or not to randomize the y value of the main direction + [Tooltip("whether or not to randomize the y value of the main direction")] + public bool RandomizeDirectionY = true; + /// whether or not to randomize the z value of the main direction + [Tooltip("whether or not to randomize the z value of the main direction")] + public bool RandomizeDirectionZ= true; + + [MMFInspectorGroup("Directional Noise", true, 47)] + /// whether or not to add noise to the main direction + [Tooltip("whether or not to add noise to the main direction")] + public bool AddDirectionalNoise = true; + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax")] + [MMFCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMin = new Vector3(0.25f, 0.25f, 0.25f); + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin")] + [MMFCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMax = new Vector3(0.25f, 0.25f, 0.25f); + + [MMFInspectorGroup("Randomness", true, 44)] + /// a unique seed you can use to get different outcomes when shaking more than one transform at once + [Tooltip("a unique seed you can use to get different outcomes when shaking more than one transform at once")] + public Vector3 RandomnessSeed; + /// whether or not to generate a unique seed automatically on every shake + [Tooltip("whether or not to generate a unique seed automatically on every shake")] + public bool RandomizeSeedOnShake = true; + + [MMFInspectorGroup("One Time", true, 45)] + /// whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve + [Tooltip("whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve")] + public bool UseAttenuation = true; + /// the animation curve used to define attenuation, impacting the amplitude of the shake + [Tooltip("the animation curve used to define attenuation, impacting the amplitude of the shake")] + [MMFCondition("UseAttenuation", true)] + public AnimationCurve AttenuationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + if (TargetShaker == null) + { + MMPositionShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, + RandomizeDirectionX, RandomizeDirectionY, RandomizeDirectionZ, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, + UseRange, RangeDistance, UseRangeFalloff, RangeFalloff, RemapRangeFalloff, position, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + else + { + TargetShaker?.OnMMPositionShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, + RandomizeDirectionX, RandomizeDirectionY, RandomizeDirectionZ, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, + UseRange, RangeDistance, UseRangeFalloff, RangeFalloff, RemapRangeFalloff, position, + intensityMultiplier, TargetShaker.ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + if (TargetShaker == null) + { + MMPositionShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, + RandomizeDirectionX, RandomizeDirectionY, RandomizeDirectionZ, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, stop:true); + } + else + { + TargetShaker?.OnMMPositionShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, + RandomizeDirectionX, RandomizeDirectionY, RandomizeDirectionZ, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, channelData:TargetShaker.ChannelData, stop:true); + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetShaker == null) + { + MMPositionShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, + RandomizeDirectionX, RandomizeDirectionY, RandomizeDirectionZ, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, restore:true); + } + else + { + TargetShaker?.OnMMPositionShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, + RandomizeDirectionX, RandomizeDirectionY, RandomizeDirectionZ, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, channelData:TargetShaker.ChannelData, restore:true); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionShake.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionShake.cs.meta new file mode 100644 index 0000000..a69d9a2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionShake.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e19b4303c2b04a49a00bb24fcccfd5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionSpring.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionSpring.cs new file mode 100644 index 0000000..852c019 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionSpring.cs @@ -0,0 +1,307 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you animate the position of the target object over time, with a spring effect + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Position Spring")] + [FeedbackHelp("This feedback will let you animate the position of the target object over time, with a spring effect.")] + public class MMF_PositionSpring : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (AnimatePositionTarget == null); } + public override string RequiredTargetText { get { return AnimatePositionTarget != null ? AnimatePositionTarget.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that an AnimatePositionTarget be set to be able to work properly. You can set one below."; } } + public override bool HasCustomInspectors { get { return true; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => AnimatePositionTarget = FindAutomatedTarget(); + /// the duration of this feedback is the duration of the position animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasRandomness => true; + + public enum Modes { MoveTo, MoveToAdditive, Bump } + public enum Spaces { World, Local, RectTransform } + + [MMFInspectorGroup("Target", true, 12, true)] + /// the object to animate + [Tooltip("the object to animate")] + public Transform AnimatePositionTarget; + /// spring duration is determined by the spring (and could be impacted real time), so it's up to you to determine how long this feedback should last, from the point of view of its parent MMF Player + [Tooltip("spring duration is determined by the spring (and could be impacted real time), so it's up to you to determine how long this feedback should last, from the point of view of its parent MMF Player")] + public float DeclaredDuration = 0f; + /// the space in which to move the position in + [Tooltip("the space in which to move the position in")] + public Spaces Space = Spaces.World; + + [MMFInspectorGroup("Spring Settings", true, 18)] + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingX = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyX = 6f; + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingY = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyY = 6f; + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingZ = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyZ = 6f; + + [MMFInspectorGroup("Spring Mode", true, 19)] + /// the chosen mode for this spring. MoveTo will move the target the specified position (randomized between min and max). MoveToAdditive will add the specified position (randomized between min and max) to the target's current position. Bump will bump the target's position by the specified power (randomized between min and max) + [Tooltip("the chosen mode for this spring. MoveTo will move the target the specified position (randomized between min and max). MoveToAdditive will add the specified position (randomized between min and max) to the target's current position. Bump will bump the target's position by the specified power (randomized between min and max)")] + public Modes Mode = Modes.Bump; + /// the min value from which to pick a random target value when in MoveTo or MoveToAdditive modes + [Tooltip("the min value from which to pick a random target value when in MoveTo or MoveToAdditive modes")] + [MMFEnumCondition("Mode", (int)Modes.MoveTo, (int)Modes.MoveToAdditive)] + public Vector3 MoveToPositionMin = new Vector3(1f, 1f, 1f); + /// the max value from which to pick a random target value when in MoveTo or MoveToAdditive modes + [Tooltip("the max value from which to pick a random target value when in MoveTo or MoveToAdditive modes")] + [MMFEnumCondition("Mode", (int)Modes.MoveTo, (int)Modes.MoveToAdditive)] + public Vector3 MoveToPositionMax = new Vector3(2f, 2f, 2f); + /// the min value from which to pick a random bump amount when in Bump mode + [Tooltip("the min value from which to pick a random bump amount when in Bump mode")] + [MMFEnumCondition("Mode", (int)Modes.Bump)] + public Vector3 BumpPositionMin = new Vector3(0f, 20f, 0f); + /// the max value from which to pick a random bump amount when in Bump mode + [Tooltip("the max value from which to pick a random bump amount when in Bump mode")] + [MMFEnumCondition("Mode", (int)Modes.Bump)] + public Vector3 BumpPositionMax = new Vector3(0f, 30f, 0f); + + public bool ForceAbsolute = false; + + protected Vector3 _currentValue = Vector3.zero; + protected Vector3 _targetValue = Vector3.zero; + protected Vector3 _velocity = Vector3.zero; + + protected Vector3 _initialPosition; + protected virtual bool LowVelocity => (Mathf.Abs(_velocity.x) + Mathf.Abs(_velocity.y) + Mathf.Abs(_velocity.z)) < _velocityLowThreshold; + protected Coroutine _coroutine; + protected float _velocityLowThreshold = 0.001f; + protected RectTransform _rectTransform; + + /// + /// On init we store our initial position + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Space == Spaces.RectTransform) + { + _rectTransform = AnimatePositionTarget.GetComponent(); + } + if (Active && (AnimatePositionTarget != null)) + { + GetInitialValues(); + } + } + + /// + /// Stores initial position for future use + /// + protected virtual void GetInitialValues() + { + switch (Space) + { + case Spaces.World: + _initialPosition = AnimatePositionTarget.position; + break; + case Spaces.Local: + _initialPosition = AnimatePositionTarget.localPosition; + break; + case Spaces.RectTransform: + _initialPosition = _rectTransform.anchoredPosition3D; + break; + } + _currentValue = _initialPosition; + _targetValue = _currentValue; + } + + /// + /// On Play, triggers the position animation + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (AnimatePositionTarget == null)) + { + return; + } + + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + + switch (Mode) + { + case Modes.MoveTo: + _targetValue.x = Random.Range(MoveToPositionMin.x, MoveToPositionMax.x); + _targetValue.y = Random.Range(MoveToPositionMin.y, MoveToPositionMax.y); + _targetValue.z = Random.Range(MoveToPositionMin.z, MoveToPositionMax.z); + break; + case Modes.MoveToAdditive: + _targetValue.x += Random.Range(MoveToPositionMin.x, MoveToPositionMax.x); + _targetValue.y += Random.Range(MoveToPositionMin.y, MoveToPositionMax.y); + _targetValue.z += Random.Range(MoveToPositionMin.z, MoveToPositionMax.z); + break; + case Modes.Bump: + _velocity.x = Random.Range(BumpPositionMin.x, BumpPositionMax.x); + _velocity.y = Random.Range(BumpPositionMin.y, BumpPositionMax.y); + _velocity.z = Random.Range(BumpPositionMin.z, BumpPositionMax.z); + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + _velocity.x *= intensityMultiplier; + break; + } + _coroutine = Owner.StartCoroutine(Spring()); + } + + /// + /// a coroutine running on the Owner used to move the spring + /// + /// + protected virtual IEnumerator Spring() + { + IsPlaying = true; + UpdateSpring(); + while (!LowVelocity) + { + yield return null; + UpdateSpring(); + ApplyValue(); + } + + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + _currentValue = _targetValue; + ApplyValue(); + + IsPlaying = false; + } + + /// + /// Updates the spring's values + /// + protected virtual void UpdateSpring() + { + MMMaths.Spring(ref _currentValue.x, _targetValue.x, ref _velocity.x, DampingX, FrequencyX, FeedbackDeltaTime); + MMMaths.Spring(ref _currentValue.y, _targetValue.y, ref _velocity.y, DampingY, FrequencyY, FeedbackDeltaTime); + MMMaths.Spring(ref _currentValue.z, _targetValue.z, ref _velocity.z, DampingZ, FrequencyZ, FeedbackDeltaTime); + ApplyValue(); + } + + protected Vector3 _appliedPosition; + + /// + /// Applies the current spring value to the target + /// + protected virtual void ApplyValue() + { + _appliedPosition = _currentValue; + if (ForceAbsolute) + { + _appliedPosition.x = Mathf.Abs(_appliedPosition.x - _initialPosition.x) + _initialPosition.x; + _appliedPosition.y = Mathf.Abs(_appliedPosition.y - _initialPosition.y) + _initialPosition.y; + _appliedPosition.z = Mathf.Abs(_appliedPosition.z - _initialPosition.z) + _initialPosition.z; + } + + if (Space == Spaces.World) + { + AnimatePositionTarget.position = _appliedPosition; + } + else if (Space == Spaces.RectTransform) + { + _rectTransform.anchoredPosition3D = _appliedPosition; + } + else if (Space == Spaces.Local) + { + AnimatePositionTarget.localPosition = _appliedPosition; + } + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + IsPlaying = false; + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + _targetValue = _currentValue; + ApplyValue(); + } + + /// + /// Skips to the end, matching the target value + /// + /// + /// + protected override void CustomSkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized && (AnimatePositionTarget != null)) + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + _currentValue = _targetValue; + IsPlaying = false; + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + ApplyValue(); + } + } + + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _currentValue = _initialPosition; + _targetValue = _currentValue; + ApplyValue(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionSpring.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionSpring.cs.meta new file mode 100644 index 0000000..bf56a42 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_PositionSpring.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6949e897c69920b4bb002749389fbd3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ReferenceHolder.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ReferenceHolder.cs new file mode 100644 index 0000000..ddba37e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ReferenceHolder.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback allows you to hold a reference, that can then be used by other feedbacks to automatically set their target. + /// It doesn't do anything when played. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to hold a reference, that can then be used by other feedbacks to automatically set their target. It doesn't do anything when played.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Feedbacks/MMF Reference Holder")] + public class MMF_ReferenceHolder : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.FeedbacksColor; } } + public override string RequiredTargetText => GameObjectReference != null ? GameObjectReference.name : ""; + #endif + /// the duration of this feedback is 0 + public override float FeedbackDuration => 0f; + public override bool DisplayFullHeaderColor => true; + + [MMFInspectorGroup("References", true, 37, true)] + /// the game object to set as the target (or on which to look for a specific component as a target) of all feedbacks that may look at this reference holder for a target + [Tooltip("the game object to set as the target (or on which to look for a specific component as a target) of all feedbacks that may look at this reference holder for a target")] + public GameObject GameObjectReference; + /// whether or not to force this reference holder on all compatible feedbacks in the MMF Player's list + [Tooltip("whether or not to force this reference holder on all compatible feedbacks in the MMF Player's list")] + public bool ForceReferenceOnAll = false; + + /// + /// On init we force our reference on all feedbacks if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (ForceReferenceOnAll) + { + for (int index = 0; index < Owner.FeedbacksList.Count; index++) + { + if (Owner.FeedbacksList[index].HasAutomatedTargetAcquisition) + { + Owner.FeedbacksList[index].SetIndexInFeedbacksList(index); + Owner.FeedbacksList[index].ForcedReferenceHolder = this; + Owner.FeedbacksList[index].ForceAutomateTargetAcquisition(); + } + } + } + } + + /// + /// On Play we do nothing + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + return; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ReferenceHolder.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ReferenceHolder.cs.meta new file mode 100644 index 0000000..5850906 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ReferenceHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1ff13de90405b44ca56efcdfea7be6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody.cs new file mode 100644 index 0000000..956a4e9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody.cs @@ -0,0 +1,119 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// this feedback will let you apply forces and torques (relative or not) to a Rigidbody + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you apply forces and torques (relative or not) to a Rigidbody.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("GameObject/Rigidbody")] + public class MMF_Rigidbody : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRigidbody == null); } + public override string RequiredTargetText { get { return TargetRigidbody != null ? TargetRigidbody.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRigidbody be set to be able to work properly. You can set one below."; } } + #endif + public enum Modes { AddForce, AddRelativeForce, AddTorque, AddRelativeTorque } + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetRigidbody = FindAutomatedTarget(); + + [MMFInspectorGroup("Rigidbody", true, 61, true)] + /// the rigidbody to target on play + [Tooltip("the rigidbody to target on play")] + public Rigidbody TargetRigidbody; + /// a list of extra rigidbodies to target on play + [Tooltip("a list of extra rigidbodies to target on play")] + public List ExtraTargetRigidbodies; + /// the selected mode for this feedback + [Tooltip("the selected mode for this feedback")] + public Modes Mode = Modes.AddForce; + /// the min force or torque to apply + [Tooltip("the min force or torque to apply")] + public Vector3 MinForce; + /// the max force or torque to apply + [Tooltip("the max force or torque to apply")] + public Vector3 MaxForce; + /// the force mode to apply + [Tooltip("the force mode to apply")] + public ForceMode AppliedForceMode = ForceMode.Impulse; + /// if this is true, the velocity of the rigidbody will be reset before applying the new force + [Tooltip("if this is true, the velocity of the rigidbody will be reset before applying the new force")] + public bool ResetVelocityOnPlay = false; + /// if this is true, the magnitude of the min/max force will be applied in the target transform's forward direction + [Tooltip("if this is true, the magnitude of the min/max force will be applied in the target transform's forward direction")] + public bool ForwardForce = false; + + protected Vector3 _force; + + /// + /// On Custom Play, we apply our force or torque to the target rigidbody + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetRigidbody == null)) + { + return; + } + + _force.x = Random.Range(MinForce.x, MaxForce.x); + _force.y = Random.Range(MinForce.y, MaxForce.y); + _force.z = Random.Range(MinForce.z, MaxForce.z); + + if (!Timing.ConstantIntensity) + { + _force *= feedbacksIntensity; + } + + ApplyForce(TargetRigidbody); + foreach (Rigidbody rb in ExtraTargetRigidbodies) + { + ApplyForce(rb); + } + } + + /// + /// Applies the computed force to the target rigidbody + /// + /// + protected virtual void ApplyForce(Rigidbody rb) + { + if(ResetVelocityOnPlay) + { + rb.velocity = Vector3.zero; + } + + if (ForwardForce) + { + _force = _force.magnitude * rb.transform.forward; + } + + switch (Mode) + { + case Modes.AddForce: + rb.AddForce(_force, AppliedForceMode); + break; + case Modes.AddRelativeForce: + rb.AddRelativeForce(_force, AppliedForceMode); + break; + case Modes.AddTorque: + rb.AddTorque(_force, AppliedForceMode); + break; + case Modes.AddRelativeTorque: + rb.AddRelativeTorque(_force, AppliedForceMode); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody.cs.meta new file mode 100644 index 0000000..0e98811 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f64f66e3526fb1458a4c1e34e5300a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody2D.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody2D.cs new file mode 100644 index 0000000..92611a8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody2D.cs @@ -0,0 +1,120 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// this feedback will let you apply forces and torques (relative or not) to a Rigidbody + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you apply forces and torques (relative or not) to a Rigidbody.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("GameObject/Rigidbody2D")] + public class MMF_Rigidbody2D : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRigidbody2D == null); } + public override string RequiredTargetText { get { return TargetRigidbody2D != null ? TargetRigidbody2D.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRigidbody2D be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetRigidbody2D = FindAutomatedTarget(); + + public enum Modes { AddForce, AddRelativeForce, AddTorque} + + [MMFInspectorGroup("Rigidbody2D", true, 32, true)] + /// the rigidbody to target on play + [Tooltip("the rigidbody to target on play")] + public Rigidbody2D TargetRigidbody2D; + /// an extra list of rigidbodies to target on play + [Tooltip("an extra list of rigidbodies to target on play")] + public List ExtraTargetRigidbodies2D; + /// the selected mode for this feedback + [Tooltip("the selected mode for this feedback")] + public Modes Mode = Modes.AddForce; + /// the min force or torque to apply + [Tooltip("the min force or torque to apply")] + [MMFEnumCondition("Mode", (int)Modes.AddForce, (int)Modes.AddRelativeForce)] + public Vector2 MinForce; + /// the max force or torque to apply + [Tooltip("the max force or torque to apply")] + [MMFEnumCondition("Mode", (int)Modes.AddForce, (int)Modes.AddRelativeForce)] + public Vector2 MaxForce; + /// the min torque to apply to this rigidbody on play + [Tooltip("the min torque to apply to this rigidbody on play")] + [MMFEnumCondition("Mode", (int)Modes.AddTorque)] + public float MinTorque; + /// the max torque to apply to this rigidbody on play + [Tooltip("the max torque to apply to this rigidbody on play")] + [MMFEnumCondition("Mode", (int)Modes.AddTorque)] + public float MaxTorque; + /// the force mode to apply + [Tooltip("the force mode to apply")] + public ForceMode2D AppliedForceMode = ForceMode2D.Impulse; + /// if this is true, the velocity of the rigidbody will be reset before applying the new force + [Tooltip("if this is true, the velocity of the rigidbody will be reset before applying the new force")] + public bool ResetVelocityOnPlay = false; + + protected Vector2 _force; + protected float _torque; + + /// + /// On Custom Play, we apply our force or torque to the target rigidbody + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetRigidbody2D == null)) + { + return; + } + + ApplyForce(TargetRigidbody2D, feedbacksIntensity); + foreach (Rigidbody2D rb in ExtraTargetRigidbodies2D) + { + ApplyForce(rb, feedbacksIntensity); + } + } + + /// + /// Applies the computed force to the target rigidbody + /// + /// + /// + protected virtual void ApplyForce(Rigidbody2D rb, float feedbacksIntensity) + { + if(ResetVelocityOnPlay) + { + rb.velocity = Vector2.zero; + } + + switch (Mode) + { + case Modes.AddForce: + _force.x = Random.Range(MinForce.x, MaxForce.x); + _force.y = Random.Range(MinForce.y, MaxForce.y); + if (!Timing.ConstantIntensity) { _force *= feedbacksIntensity; } + rb.AddForce(_force, AppliedForceMode); + break; + case Modes.AddRelativeForce: + _force.x = Random.Range(MinForce.x, MaxForce.x); + _force.y = Random.Range(MinForce.y, MaxForce.y); + if (!Timing.ConstantIntensity) { _force *= feedbacksIntensity; } + rb.AddRelativeForce(_force, AppliedForceMode); + break; + case Modes.AddTorque: + _torque = Random.Range(MinTorque, MaxTorque); + if (!Timing.ConstantIntensity) { _torque *= feedbacksIntensity; } + rb.AddTorque(_torque, AppliedForceMode); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody2D.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody2D.cs.meta new file mode 100644 index 0000000..fe0d3c7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rigidbody2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e33ffe483e6d97f4fa9c59542152a536 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotatePositionAround.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotatePositionAround.cs new file mode 100644 index 0000000..a09dfe6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotatePositionAround.cs @@ -0,0 +1,272 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will animate the target's position (not its rotation), on an arc around the specified rotation center, for the specified duration (in seconds). + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will animate the target's position (not its rotation), on an arc around the specified rotation center, for the specified duration (in seconds).")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Rotate Position Around")] + public class MMF_RotatePositionAround : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the timescale modes this feedback can operate on + public enum TimeScales { Scaled, Unscaled } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (AnimateRotationTarget == null); } + public override string RequiredTargetText { get { return ((AnimateRotationTarget != null) || (AnimateRotationCenter != null)) ? AnimateRotationTarget.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a AnimatePositionTarget and a AnimateRotationCenter be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => AnimateRotationTarget = FindAutomatedTarget(); + + [MMFInspectorGroup("Animation Targets", true, 61, true)] + /// the object whose rotation you want to animate + [Tooltip("the object whose rotation you want to animate")] + public Transform AnimateRotationTarget; + /// the object around which to rotate AnimateRotationTarget + [Tooltip("the object around which to rotate AnimateRotationTarget")] + public Transform AnimateRotationCenter; + + [MMFInspectorGroup("Transition", true, 63)] + /// the duration of the transition + [Tooltip("the duration of the transition")] + public float AnimateRotationDuration = 0.2f; + /// the value to remap the curve's 0 value to + [Tooltip("the value to remap the curve's 0 value to")] + public float RemapCurveZero = 0f; + /// the value to remap the curve's 1 value to + [Tooltip("the value to remap the curve's 1 value to")] + public float RemapCurveOne = 180f; + /// if this is true, should animate movement on the X axis + [Tooltip("if this is true, should animate movement on the X axis")] + public bool AnimateX = false; + /// how the x part of the movement should animate over time, in degrees + [Tooltip("how the x part of the movement should animate over time, in degrees")] + [MMCondition("AnimateX", true)] + public AnimationCurve AnimateRotationX = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// if this is true, should animate movement on the Y axis + [Tooltip("if this is true, should animate movement on the Y axis")] + public bool AnimateY = true; + /// how the y part of the rotation should animate over time, in degrees + [Tooltip("how the y part of the rotation should animate over time, in degrees")] + [MMCondition("AnimateY", true)] + public AnimationCurve AnimateRotationY = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// if this is true, should animate movement on the Z axis + [Tooltip("if this is true, should animate movement on the Z axis")] + public bool AnimateZ = false; + /// how the z part of the rotation should animate over time, in degrees + [Tooltip("how the z part of the rotation should animate over time, in degrees")] + [MMCondition("AnimateZ", true)] + public AnimationCurve AnimateRotationZ = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// if this is true, initial and destination rotations will be recomputed on every play + [Tooltip("if this is true, initial and destination rotations will be recomputed on every play")] + public bool DetermineRotationOnPlay = false; + + /// the duration of this feedback is the duration of the rotation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(AnimateRotationDuration); } set { AnimateRotationDuration = value; } } + public override bool HasRandomness => true; + + protected Vector3 _initialPosition; + protected Vector3 _rotationAngles; + protected Coroutine _coroutine; + + /// + /// On init we store our initial rotation + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (Active && (AnimateRotationTarget != null)) + { + GetInitialPosition(); + } + } + + /// + /// Stores initial rotation for future use + /// + protected virtual void GetInitialPosition() + { + _initialPosition = AnimateRotationTarget.transform.position; + } + + /// + /// On play, we trigger our rotation animation + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (AnimateRotationTarget == null)) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + if (Active || Owner.AutoPlayOnEnable) + { + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (DetermineRotationOnPlay && NormalPlayDirection) { GetInitialPosition(); } + ClearCoroutine(); + _coroutine = Owner.StartCoroutine(AnimateRotation(AnimateRotationTarget, Vector3.zero, FeedbackDuration, AnimateRotationX, AnimateRotationY, AnimateRotationZ, RemapCurveZero * intensityMultiplier, RemapCurveOne * intensityMultiplier)); + } + } + + protected virtual void ClearCoroutine() + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// A coroutine used to compute the rotation over time + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator AnimateRotation(Transform targetTransform, + Vector3 vector, + float duration, + AnimationCurve curveX, + AnimationCurve curveY, + AnimationCurve curveZ, + float remapZero, + float remapOne) + { + if (targetTransform == null) + { + yield break; + } + + if ((curveX == null) || (curveY == null) || (curveZ == null)) + { + yield break; + } + + if (duration == 0f) + { + yield break; + } + + float journey = NormalPlayDirection ? 0f : duration; + + IsPlaying = true; + + while ((journey >= 0) && (journey <= duration) && (duration > 0)) + { + float percent = Mathf.Clamp01(journey / duration); + + ApplyRotation(targetTransform, remapZero, remapOne, curveX, curveY, curveZ, percent); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + + yield return null; + } + + ApplyRotation(targetTransform, remapZero, remapOne, curveX, curveY, curveZ, FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + + yield break; + } + + /// + /// Computes and applies the rotation to the object + /// + /// + /// + /// + /// + /// + /// + protected virtual void ApplyRotation(Transform targetTransform, float remapZero, float remapOne, AnimationCurve curveX, AnimationCurve curveY, AnimationCurve curveZ, float percent) + { + targetTransform.position = _initialPosition; + + _rotationAngles.x = 0f; + _rotationAngles.y = 0f; + _rotationAngles.z= 0f; + + if (AnimateX) + { + _rotationAngles.x = curveX.Evaluate(percent); + _rotationAngles.x = MMFeedbacksHelpers.Remap(_rotationAngles.x, 0f, 1f, remapZero, remapOne); + } + if (AnimateY) + { + _rotationAngles.y = curveY.Evaluate(percent); + _rotationAngles.y = MMFeedbacksHelpers.Remap(_rotationAngles.y, 0f, 1f, remapZero, remapOne); + } + if (AnimateZ) + { + _rotationAngles.z = curveZ.Evaluate(percent); + _rotationAngles.z = MMFeedbacksHelpers.Remap(_rotationAngles.z, 0f, 1f, remapZero, remapOne); + } + + targetTransform.position = MMMaths.RotatePointAroundPivot(targetTransform.position, AnimateRotationCenter.position, _rotationAngles); + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized && (_coroutine != null)) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + IsPlaying = false; + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + AnimateRotationTarget.transform.position = _initialPosition; + } + + /// + /// On disable we reset our coroutine + /// + public override void OnDisable() + { + _coroutine = null; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotatePositionAround.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotatePositionAround.cs.meta new file mode 100644 index 0000000..142f662 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotatePositionAround.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d721bd69a5a65bf4ab07b36ad0883acf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rotation.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rotation.cs new file mode 100644 index 0000000..4fbd1f1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rotation.cs @@ -0,0 +1,414 @@ +using System.Collections; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback animates the rotation of the specified object when played + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will animate the target's rotation on the 3 specified animation curves (one per axis), for the specified duration (in seconds).")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Rotation")] + public class MMF_Rotation : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the possible modes for this feedback (Absolute : always follow the curve from start to finish, Additive : add to the values found when this feedback gets played) + public enum Modes { Absolute, Additive, ToDestination } + /// the timescale modes this feedback can operate on + public enum TimeScales { Scaled, Unscaled } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (AnimateRotationTarget == null); } + public override string RequiredTargetText { get { return AnimateRotationTarget != null ? AnimateRotationTarget.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a AnimatePositionTarget and a Destination be set to be able to work properly. You can set one below."; } } + public override bool HasCustomInspectors { get { return true; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => AnimateRotationTarget = FindAutomatedTarget(); + + [MMFInspectorGroup("Rotation Target", true, 61, true)] + /// the object whose rotation you want to animate + [Tooltip("the object whose rotation you want to animate")] + public Transform AnimateRotationTarget; + + [MMFInspectorGroup("Transition", true, 63)] + /// whether this feedback should animate in absolute values or additive + [Tooltip("whether this feedback should animate in absolute values or additive")] + public Modes Mode = Modes.Absolute; + /// whether this feedback should play on local or world rotation + [Tooltip("whether this feedback should play on local or world rotation")] + public Space RotationSpace = Space.World; + /// the duration of the transition + [Tooltip("the duration of the transition")] + public float AnimateRotationDuration = 0.2f; + /// the value to remap the curve's 0 value to + [Tooltip("the value to remap the curve's 0 value to")] + [MMFEnumCondition("Mode", (int)Modes.Absolute, (int)Modes.Additive)] + public float RemapCurveZero = 0f; + /// the value to remap the curve's 1 value to + [Tooltip("the value to remap the curve's 1 value to")] + [MMFEnumCondition("Mode", (int)Modes.Absolute, (int)Modes.Additive)] + public float RemapCurveOne = 360f; + /// if this is true, should animate the X rotation + [Tooltip("if this is true, should animate the X rotation")] + [MMFEnumCondition("Mode", (int)Modes.Absolute, (int)Modes.Additive)] + public bool AnimateX = true; + + + /// how the x part of the rotation should animate over time, in degrees + [Tooltip("how the x part of the rotation should animate over time, in degrees")] + [MMFCondition("AnimateX")] + public MMTweenType AnimateRotationTweenX = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// if this is true, should animate the Y rotation + [Tooltip("if this is true, should animate the Y rotation")] + [MMFEnumCondition("Mode", (int)Modes.Absolute, (int)Modes.Additive)] + public bool AnimateY = true; + /// how the y part of the rotation should animate over time, in degrees + [Tooltip("how the y part of the rotation should animate over time, in degrees")] + [MMFCondition("AnimateY")] + public MMTweenType AnimateRotationTweenY = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// if this is true, should animate the Z rotation + [Tooltip("if this is true, should animate the Z rotation")] + [MMFEnumCondition("Mode", (int)Modes.Absolute, (int)Modes.Additive)] + public bool AnimateZ = true; + /// how the z part of the rotation should animate over time, in degrees + [Tooltip("how the z part of the rotation should animate over time, in degrees")] + [MMFCondition("AnimateZ")] + public MMTweenType AnimateRotationTweenZ = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + + + + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// if this is true, initial and destination rotations will be recomputed on every play + [Tooltip("if this is true, initial and destination rotations will be recomputed on every play")] + public bool DetermineRotationOnPlay = false; + + [Header("To Destination")] + /// the space in which the ToDestination mode should operate + [Tooltip("the space in which the ToDestination mode should operate")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public Space ToDestinationSpace = Space.World; + /// the angles to match when in ToDestination mode + [Tooltip("the angles to match when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public Vector3 DestinationAngles = new Vector3(0f, 180f, 0f); + /// how the x part of the rotation should animate over time, in degrees + [Tooltip("how the x part of the rotation should animate over time, in degrees")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public MMTweenType ToDestinationTween = new MMTweenType(MMTween.MMTweenCurve.EaseInQuintic); + + /// the duration of this feedback is the duration of the rotation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(AnimateRotationDuration); } set { AnimateRotationDuration = value; } } + public override bool HasRandomness => true; + + /// [DEPRECATED] how the x part of the rotation should animate over time, in degrees + [HideInInspector] public AnimationCurve AnimateRotationX = null; + /// [DEPRECATED] how the y part of the rotation should animate over time, in degrees + [HideInInspector] public AnimationCurve AnimateRotationY = null; + /// [DEPRECATED] how the z part of the rotation should animate over time, in degrees + [HideInInspector] public AnimationCurve AnimateRotationZ = null; + /// [DEPRECATED] the animation curve to use when animating to destination (individual x,y,z curves above won't be used) + [HideInInspector] public AnimationCurve ToDestinationCurve = null; + + protected Quaternion _initialRotation; + protected Vector3 _initialToDestinationAngles; + protected Quaternion _destinationRotation; + protected Coroutine _coroutine; + + /// + /// On init we store our initial rotation + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active && (AnimateRotationTarget != null)) + { + GetInitialRotation(); + } + } + + /// + /// Stores initial rotation for future use + /// + protected virtual void GetInitialRotation() + { + _initialRotation = (RotationSpace == Space.World) ? AnimateRotationTarget.rotation : AnimateRotationTarget.localRotation; + _initialToDestinationAngles = _initialRotation.eulerAngles; + } + + /// + /// On play, we trigger our rotation animation + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (AnimateRotationTarget == null)) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + if (Active || Owner.AutoPlayOnEnable) + { + if ((Mode == Modes.Absolute) || (Mode == Modes.Additive)) + { + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (DetermineRotationOnPlay && NormalPlayDirection) { GetInitialRotation(); } + ClearCoroutine(); + _coroutine = Owner.StartCoroutine(AnimateRotation(AnimateRotationTarget, Vector3.zero, FeedbackDuration, AnimateRotationTweenX, AnimateRotationTweenY, AnimateRotationTweenZ, RemapCurveZero * intensityMultiplier, RemapCurveOne * intensityMultiplier)); + } + else if (Mode == Modes.ToDestination) + { + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (DetermineRotationOnPlay && NormalPlayDirection) { GetInitialRotation(); } + ClearCoroutine(); + _coroutine = Owner.StartCoroutine(RotateToDestination()); + } + } + } + + protected virtual void ClearCoroutine() + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// A coroutine used to rotate the target to its destination rotation + /// + /// + protected virtual IEnumerator RotateToDestination() + { + if (AnimateRotationTarget == null) + { + yield break; + } + + if ((AnimateRotationTweenX == null) || (AnimateRotationTweenY == null) || (AnimateRotationTweenZ == null)) + { + yield break; + } + + if (FeedbackDuration == 0f) + { + yield break; + } + + Vector3 destinationAngles = NormalPlayDirection ? DestinationAngles : _initialToDestinationAngles; + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + + _initialRotation = AnimateRotationTarget.transform.rotation; + if (ToDestinationSpace == Space.Self) + { + AnimateRotationTarget.transform.localRotation = Quaternion.Euler(destinationAngles); + } + else + { + AnimateRotationTarget.transform.rotation = Quaternion.Euler(destinationAngles); + } + + _destinationRotation = AnimateRotationTarget.transform.rotation; + AnimateRotationTarget.transform.rotation = _initialRotation; + IsPlaying = true; + + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float percent = Mathf.Clamp01(journey / FeedbackDuration); + percent = ToDestinationTween.Evaluate(percent); + + Quaternion newRotation = Quaternion.LerpUnclamped(_initialRotation, _destinationRotation, percent); + AnimateRotationTarget.transform.rotation = newRotation; + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + + yield return null; + } + + if (ToDestinationSpace == Space.Self) + { + AnimateRotationTarget.transform.localRotation = Quaternion.Euler(destinationAngles); + } + else + { + AnimateRotationTarget.transform.rotation = Quaternion.Euler(destinationAngles); + } + IsPlaying = false; + _coroutine = null; + yield break; + } + + /// + /// A coroutine used to compute the rotation over time + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator AnimateRotation(Transform targetTransform, + Vector3 vector, + float duration, + MMTweenType curveX, + MMTweenType curveY, + MMTweenType curveZ, + float remapZero, + float remapOne) + { + if (targetTransform == null) + { + yield break; + } + + if ((curveX == null) || (curveY == null) || (curveZ == null)) + { + yield break; + } + + if (duration == 0f) + { + yield break; + } + + float journey = NormalPlayDirection ? 0f : duration; + + if (Mode == Modes.Additive) + { + _initialRotation = (RotationSpace == Space.World) ? targetTransform.rotation : targetTransform.localRotation; + } + + IsPlaying = true; + + while ((journey >= 0) && (journey <= duration) && (duration > 0)) + { + float percent = Mathf.Clamp01(journey / duration); + + ApplyRotation(targetTransform, remapZero, remapOne, curveX, curveY, curveZ, percent); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + + yield return null; + } + + ApplyRotation(targetTransform, remapZero, remapOne, curveX, curveY, curveZ, FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + + yield break; + } + + /// + /// Computes and applies the rotation to the object + /// + /// + /// + /// + /// + /// + /// + protected virtual void ApplyRotation(Transform targetTransform, float remapZero, float remapOne, MMTweenType curveX, MMTweenType curveY, MMTweenType curveZ, float percent) + { + if (RotationSpace == Space.World) + { + targetTransform.transform.rotation = _initialRotation; + } + else + { + targetTransform.transform.localRotation = _initialRotation; + } + + if (AnimateX) + { + float x = MMTween.Tween(percent, 0f, 1f, remapZero, remapOne, curveX); + targetTransform.Rotate(Vector3.right, x, RotationSpace); + } + if (AnimateY) + { + float y = MMTween.Tween(percent, 0f, 1f, remapZero, remapOne, curveY); + targetTransform.Rotate(Vector3.up, y, RotationSpace); + } + if (AnimateZ) + { + float z = MMTween.Tween(percent, 0f, 1f, remapZero, remapOne, curveZ); + targetTransform.Rotate(Vector3.forward, z, RotationSpace); + } + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized && (_coroutine != null)) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + IsPlaying = false; + } + } + + /// + /// On disable we reset our coroutine + /// + public override void OnDisable() + { + _coroutine = null; + } + + /// + /// On Validate, we migrate our deprecated animation curves to our tween types if needed + /// + public override void OnValidate() + { + base.OnValidate(); + MMFeedbacksHelpers.MigrateCurve(AnimateRotationX, AnimateRotationTweenX, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimateRotationY, AnimateRotationTweenY, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimateRotationZ, AnimateRotationTweenZ, Owner); + MMFeedbacksHelpers.MigrateCurve(ToDestinationCurve, ToDestinationTween, Owner); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (RotationSpace == Space.World) + { + AnimateRotationTarget.rotation = _initialRotation; + } + else + { + AnimateRotationTarget.localRotation= _initialRotation; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rotation.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rotation.cs.meta new file mode 100644 index 0000000..8c093de --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Rotation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd84fe1c93f4349449c5a9eecc793678 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationShake.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationShake.cs new file mode 100644 index 0000000..283f3c7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationShake.cs @@ -0,0 +1,178 @@ +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you emit a RotationShake event. This will be caught by MMRotationShakers (on the specified channel). + /// Rotation shakers, as the name suggests, are used to shake the rotation of a transform, along a direction, with optional noise and other fine control options. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Rotation Shake")] + [FeedbackHelp("This feedback lets you emit a RotationShake event. This will be caught by MMRotationShakers (on the specified channel)." + + " Rotation shakers, as the name suggests, are used to shake the rotation of a transform, along a direction, with optional noise and other fine control options.")] + public class MMF_RotationShake : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override string RequiredTargetText { get { return RequiredChannelText; } } + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + public override bool HasRange => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetShaker = FindAutomatedTarget(); + + [MMFInspectorGroup("Optional Target", true, 33)] + /// a specific (and optional) shaker to target, regardless of its channel + [Tooltip("a specific (and optional) shaker to target, regardless of its channel")] + public MMRotationShaker TargetShaker; + + [MMFInspectorGroup("Rotation Shake", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.5f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Shake Settings", true, 42)] + /// the speed at which the transform should shake + [Tooltip("the speed at which the transform should shake")] + public float ShakeSpeed = 20f; + /// the maximum distance from its initial rotation the transform will move to during the shake + [Tooltip("the maximum distance from its initial rotation the transform will move to during the shake")] + public float ShakeRange = 50f; + + [MMFInspectorGroup("Direction", true, 43)] + /// the direction along which to shake the transform's rotation + [Tooltip("the direction along which to shake the transform's rotation")] + public Vector3 ShakeMainDirection = Vector3.up; + /// if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection + [Tooltip("if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection")] + public bool RandomizeDirection = false; + /// when in RandomizeDirection mode, a vector against which to randomize the main direction + [Tooltip("when in RandomizeDirection mode, a vector against which to randomize the main direction")] + [MMFCondition("RandomizeDirection", true)] + public Vector3 ShakeAltDirection = Vector3.up; + /// if this is true, a new direction will be randomized every time a shake happens + [Tooltip("if this is true, a new direction will be randomized every time a shake happens")] + public bool RandomizeDirectionOnPlay = false; + + [MMFInspectorGroup("Directional Noise", true, 47)] + /// whether or not to add noise to the main direction + [Tooltip("whether or not to add noise to the main direction")] + public bool AddDirectionalNoise = true; + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax")] + [MMFCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMin = new Vector3(0.25f, 0.25f, 0.25f); + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin")] + [MMFCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMax = new Vector3(0.25f, 0.25f, 0.25f); + + [MMFInspectorGroup("Randomness", true, 44)] + /// a unique seed you can use to get different outcomes when shaking more than one transform at once + [Tooltip("a unique seed you can use to get different outcomes when shaking more than one transform at once")] + public Vector3 RandomnessSeed; + /// whether or not to generate a unique seed automatically on every shake + [Tooltip("whether or not to generate a unique seed automatically on every shake")] + public bool RandomizeSeedOnShake = true; + + [MMFInspectorGroup("One Time", true, 45)] + /// whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve + [Tooltip("whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve")] + public bool UseAttenuation = true; + /// the animation curve used to define attenuation, impacting the amplitude of the shake + [Tooltip("the animation curve used to define attenuation, impacting the amplitude of the shake")] + [MMFCondition("UseAttenuation", true)] + public AnimationCurve AttenuationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + if (TargetShaker == null) + { + MMRotationShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, + UseRange, RangeDistance, UseRangeFalloff, RangeFalloff, RemapRangeFalloff, position, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + else + { + TargetShaker?.OnMMRotationShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, + UseRange, RangeDistance, UseRangeFalloff, RangeFalloff, RemapRangeFalloff, position, + intensityMultiplier, TargetShaker.ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + if (TargetShaker == null) + { + MMRotationShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, stop:true); + } + else + { + TargetShaker?.OnMMRotationShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, channelData: TargetShaker.ChannelData, stop:true); + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetShaker == null) + { + MMRotationShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, restore:true); + } + else + { + TargetShaker?.OnMMRotationShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, channelData: TargetShaker.ChannelData, restore:true); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationShake.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationShake.cs.meta new file mode 100644 index 0000000..04b1e61 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationShake.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9bba16bb0fb2b94f972e8ffe57ba804 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationSpring.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationSpring.cs new file mode 100644 index 0000000..f24db56 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationSpring.cs @@ -0,0 +1,284 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you animate the rotation of the target object over time, with a spring effect + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Rotation Spring")] + [FeedbackHelp("This feedback will let you animate the rotation of the target object over time, with a spring effect.")] + public class MMF_RotationSpring : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (AnimateRotationTarget == null); } + public override string RequiredTargetText { get { return AnimateRotationTarget != null ? AnimateRotationTarget.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that an AnimateRotationTarget be set to be able to work properly. You can set one below."; } } + public override bool HasCustomInspectors { get { return true; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => AnimateRotationTarget = FindAutomatedTarget(); + /// the duration of this feedback is the duration of the rotation animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasRandomness => true; + + public enum Modes { MoveTo, MoveToAdditive, Bump } + + [MMFInspectorGroup("Target", true, 12, true)] + /// the object to animate + [Tooltip("the object to animate")] + public Transform AnimateRotationTarget; + /// spring duration is determined by the spring (and could be impacted real time), so it's up to you to determine how long this feedback should last, from the point of view of its parent MMF Player + [Tooltip("spring duration is determined by the spring (and could be impacted real time), so it's up to you to determine how long this feedback should last, from the point of view of its parent MMF Player")] + public float DeclaredDuration = 0f; + /// whether this feedback should play on local or world rotation + [Tooltip("whether this feedback should play on local or world rotation")] + public Space RotationSpace = Space.World; + + [MMFInspectorGroup("Spring Settings", true, 18)] + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingX = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyX = 6f; + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingY = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyY = 6f; + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingZ = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyZ = 6f; + + [MMFInspectorGroup("Spring Mode", true, 19)] + /// the chosen mode for this spring. MoveTo will move the target the specified rotation (randomized between min and max). MoveToAdditive will add the specified rotation (randomized between min and max) to the target's current rotation. Bump will bump the target's rotation by the specified power (randomized between min and max) + [Tooltip("the chosen mode for this spring. MoveTo will move the target the specified rotation (randomized between min and max). MoveToAdditive will add the specified rotation (randomized between min and max) to the target's current rotation. Bump will bump the target's rotation by the specified power (randomized between min and max)")] + public Modes Mode = Modes.Bump; + /// the min value from which to pick a random target value when in MoveTo or MoveToAdditive modes + [Tooltip("the min value from which to pick a random target value when in MoveTo or MoveToAdditive modes")] + [MMFEnumCondition("Mode", (int)Modes.MoveTo, (int)Modes.MoveToAdditive)] + public Vector3 MoveToRotationMin = new Vector3(45f, 0f, 0f); + /// the max value from which to pick a random target value when in MoveTo or MoveToAdditive modes + [Tooltip("the max value from which to pick a random target value when in MoveTo or MoveToAdditive modes")] + [MMFEnumCondition("Mode", (int)Modes.MoveTo, (int)Modes.MoveToAdditive)] + public Vector3 MoveToRotationMax = new Vector3(90f, 0f, 0f); + /// the min value from which to pick a random bump amount when in Bump mode + [Tooltip("the min value from which to pick a random bump amount when in Bump mode")] + [MMFEnumCondition("Mode", (int)Modes.Bump)] + public Vector3 BumpRotationMin = new Vector3(2000f, 2000f, 0f); + /// the max value from which to pick a random bump amount when in Bump mode + [Tooltip("the max value from which to pick a random bump amount when in Bump mode")] + [MMFEnumCondition("Mode", (int)Modes.Bump)] + public Vector3 BumpRotationMax = new Vector3(3000f, 3000f, 0f); + + protected Vector3 _currentValue = Vector3.zero; + protected Vector3 _targetValue = Vector3.zero; + protected Vector3 _velocity = Vector3.zero; + + protected Vector3 _initialRotation; + protected virtual bool LowVelocity => (Mathf.Abs(_velocity.x) + Mathf.Abs(_velocity.y) + Mathf.Abs(_velocity.z)) < _velocityLowThreshold; + protected Coroutine _coroutine; + protected float _velocityLowThreshold = 0.001f; + + /// + /// On init we store our initial rotation + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active && (AnimateRotationTarget != null)) + { + GetInitialValues(); + } + } + + /// + /// Stores initial rotation for future use + /// + protected virtual void GetInitialValues() + { + if (RotationSpace == Space.Self) + { + _initialRotation = AnimateRotationTarget.localRotation.eulerAngles; + } + else + { + _initialRotation = AnimateRotationTarget.rotation.eulerAngles; + } + _currentValue = _initialRotation; + _targetValue = _currentValue; + } + + /// + /// On Play, triggers the rotation animation + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (AnimateRotationTarget == null)) + { + return; + } + + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + + switch (Mode) + { + case Modes.MoveTo: + _targetValue.x = Random.Range(MoveToRotationMin.x, MoveToRotationMax.x); + _targetValue.y = Random.Range(MoveToRotationMin.y, MoveToRotationMax.y); + _targetValue.z = Random.Range(MoveToRotationMin.z, MoveToRotationMax.z); + break; + case Modes.MoveToAdditive: + _targetValue.x += Random.Range(MoveToRotationMin.x, MoveToRotationMax.x); + _targetValue.y += Random.Range(MoveToRotationMin.y, MoveToRotationMax.y); + _targetValue.z += Random.Range(MoveToRotationMin.z, MoveToRotationMax.z); + break; + case Modes.Bump: + _velocity.x = Random.Range(BumpRotationMin.x, BumpRotationMax.x); + _velocity.y = Random.Range(BumpRotationMin.y, BumpRotationMax.y); + _velocity.z = Random.Range(BumpRotationMin.z, BumpRotationMax.z); + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + _velocity.x *= intensityMultiplier; + break; + } + _coroutine = Owner.StartCoroutine(Spring()); + } + + /// + /// a coroutine running on the Owner used to move the spring + /// + /// + protected virtual IEnumerator Spring() + { + IsPlaying = true; + UpdateSpring(); + while (!LowVelocity) + { + yield return null; + UpdateSpring(); + ApplyValue(); + } + + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + _currentValue = _targetValue; + ApplyValue(); + + IsPlaying = false; + } + + /// + /// Updates the spring's values + /// + protected virtual void UpdateSpring() + { + MMMaths.Spring(ref _currentValue.x, _targetValue.x, ref _velocity.x, DampingX, FrequencyX, FeedbackDeltaTime); + MMMaths.Spring(ref _currentValue.y, _targetValue.y, ref _velocity.y, DampingY, FrequencyY, FeedbackDeltaTime); + MMMaths.Spring(ref _currentValue.z, _targetValue.z, ref _velocity.z, DampingZ, FrequencyZ, FeedbackDeltaTime); + ApplyValue(); + } + + /// + /// Applies the current spring value to the target + /// + protected virtual void ApplyValue() + { + if (RotationSpace == Space.World) + { + AnimateRotationTarget.rotation = Quaternion.Euler(_currentValue); + } + else + { + AnimateRotationTarget.localRotation = Quaternion.Euler(_currentValue); + } + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + IsPlaying = false; + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + _targetValue = _currentValue; + ApplyValue(); + } + + /// + /// Skips to the end, matching the target value + /// + /// + /// + protected override void CustomSkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized && (AnimateRotationTarget != null)) + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + _currentValue = _targetValue; + IsPlaying = false; + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + ApplyValue(); + } + } + + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _currentValue = _initialRotation; + _targetValue = _currentValue; + ApplyValue(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationSpring.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationSpring.cs.meta new file mode 100644 index 0000000..de0cfb3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_RotationSpring.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c25af41a2abe72640a4aaf1ff7537feb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Scale.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Scale.cs new file mode 100644 index 0000000..d8eb0b7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Scale.cs @@ -0,0 +1,443 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will animate the scale of the target object over time when played + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Scale")] + [FeedbackHelp("This feedback will animate the target's scale on the 3 specified animation curves, for the specified duration (in seconds). You can apply a multiplier, that will multiply each animation curve value.")] + public class MMF_Scale : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the possible modes this feedback can operate on + public enum Modes { Absolute, Additive, ToDestination } + /// the possible timescales for the animation of the scale + public enum TimeScales { Scaled, Unscaled } + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (AnimateScaleTarget == null); } + public override string RequiredTargetText { get { return AnimateScaleTarget != null ? AnimateScaleTarget.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that an AnimateScaleTarget be set to be able to work properly. You can set one below."; } } + public override bool HasCustomInspectors { get { return true; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => AnimateScaleTarget = FindAutomatedTarget(); + + [MMFInspectorGroup("Scale Mode", true, 12, true)] + /// the mode this feedback should operate on + /// Absolute : follows the curve + /// Additive : adds to the current scale of the target + /// ToDestination : sets the scale to the destination target, whatever the current scale is + [Tooltip("the mode this feedback should operate on" + + "Absolute : follows the curve" + + "Additive : adds to the current scale of the target" + + "ToDestination : sets the scale to the destination target, whatever the current scale is")] + public Modes Mode = Modes.Absolute; + /// the object to animate + [Tooltip("the object to animate")] + public Transform AnimateScaleTarget; + + [MMFInspectorGroup("Scale Animation", true, 13)] + /// the duration of the animation + [Tooltip("the duration of the animation")] + public float AnimateScaleDuration = 0.2f; + /// the value to remap the curve's 0 value to + [Tooltip("the value to remap the curve's 0 value to")] + public float RemapCurveZero = 1f; + /// the value to remap the curve's 1 value to + [Tooltip("the value to remap the curve's 1 value to")] + [FormerlySerializedAs("Multiplier")] + public float RemapCurveOne = 2f; + /// how much should be added to the curve + [Tooltip("how much should be added to the curve")] + public float Offset = 0f; + /// if this is true, should animate the X scale value + [Tooltip("if this is true, should animate the X scale value")] + public bool AnimateX = true; + /// the x scale animation definition + [Tooltip("the x scale animation definition")] + [MMFCondition("AnimateX", true)] + public MMTweenType AnimateScaleTweenX = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1.5f), new Keyframe(1, 0))); + /// if this is true, should animate the Y scale value + [Tooltip("if this is true, should animate the Y scale value")] + public bool AnimateY = true; + /// the y scale animation definition + [Tooltip("the y scale animation definition")] + [MMFCondition("AnimateY", true)] + public MMTweenType AnimateScaleTweenY = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1.5f), new Keyframe(1, 0))); + /// if this is true, should animate the z scale value + [Tooltip("if this is true, should animate the z scale value")] + public bool AnimateZ = true; + /// the z scale animation definition + [Tooltip("the z scale animation definition")] + [MMFCondition("AnimateZ", true)] + public MMTweenType AnimateScaleTweenZ = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1.5f), new Keyframe(1, 0))); + /// if this is true, the AnimateX curve only will be used, and applied to all axis + [Tooltip("if this is true, the AnimateX curve only will be used, and applied to all axis")] + public bool UniformScaling = false; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// if this is true, initial and destination scales will be recomputed on every play + [Tooltip("if this is true, initial and destination scales will be recomputed on every play")] + public bool DetermineScaleOnPlay = false; + /// the scale to reach when in ToDestination mode + [Tooltip("the scale to reach when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public Vector3 DestinationScale = new Vector3(0.5f, 0.5f, 0.5f); + + /// the duration of this feedback is the duration of the scale animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(AnimateScaleDuration); } set { AnimateScaleDuration = value; } } + public override bool HasRandomness => true; + + /// [DEPRECATED] the x scale animation definition + [HideInInspector] public AnimationCurve AnimateScaleX = null; + /// [DEPRECATED] the y scale animation definition + [HideInInspector] public AnimationCurve AnimateScaleY = null; + /// [DEPRECATED] the z scale animation definition + [HideInInspector] public AnimationCurve AnimateScaleZ = null; + + protected Vector3 _initialScale; + protected Vector3 _newScale; + protected Coroutine _coroutine; + + /// + /// On init we store our initial scale + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active && (AnimateScaleTarget != null)) + { + GetInitialScale(); + } + } + + /// + /// Stores initial scale for future use + /// + protected virtual void GetInitialScale() + { + _initialScale = AnimateScaleTarget.localScale; + } + + /// + /// On Play, triggers the scale animation + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (AnimateScaleTarget == null)) + { + return; + } + + if (DetermineScaleOnPlay && NormalPlayDirection) + { + GetInitialScale(); + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + if (Active || Owner.AutoPlayOnEnable) + { + if ((Mode == Modes.Absolute) || (Mode == Modes.Additive)) + { + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(AnimateScale(AnimateScaleTarget, Vector3.zero, FeedbackDuration, AnimateScaleTweenX, AnimateScaleTweenY, AnimateScaleTweenZ, RemapCurveZero * intensityMultiplier, RemapCurveOne * intensityMultiplier)); + } + if (Mode == Modes.ToDestination) + { + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ScaleToDestination()); + } + } + } + + /// + /// An internal coroutine used to scale the target to its destination scale + /// + /// + protected virtual IEnumerator ScaleToDestination() + { + if (AnimateScaleTarget == null) + { + yield break; + } + + if ((AnimateScaleTweenX == null) || (AnimateScaleTweenY == null) || (AnimateScaleTweenZ == null)) + { + yield break; + } + + if (FeedbackDuration == 0f) + { + yield break; + } + + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + + _initialScale = AnimateScaleTarget.localScale; + _newScale = _initialScale; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float percent = Mathf.Clamp01(journey / FeedbackDuration); + + if (AnimateX) + { + _newScale.x = Mathf.LerpUnclamped(_initialScale.x, DestinationScale.x, AnimateScaleTweenX.Evaluate(percent) + Offset); + _newScale.x = MMFeedbacksHelpers.Remap(_newScale.x, 0f, 1f, RemapCurveZero, RemapCurveOne); + } + + if (AnimateY) + { + _newScale.y = Mathf.LerpUnclamped(_initialScale.y, DestinationScale.y, AnimateScaleTweenY.Evaluate(percent) + Offset); + _newScale.y = MMFeedbacksHelpers.Remap(_newScale.y, 0f, 1f, RemapCurveZero, RemapCurveOne); + } + + if (AnimateZ) + { + _newScale.z = Mathf.LerpUnclamped(_initialScale.z, DestinationScale.z, AnimateScaleTweenZ.Evaluate(percent) + Offset); + _newScale.z = MMFeedbacksHelpers.Remap(_newScale.z, 0f, 1f, RemapCurveZero, RemapCurveOne); + } + + if (UniformScaling) + { + _newScale.y = _newScale.x; + _newScale.z = _newScale.x; + } + + AnimateScaleTarget.localScale = _newScale; + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + + yield return null; + } + + AnimateScaleTarget.localScale = NormalPlayDirection ? DestinationScale : _initialScale; + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// An internal coroutine used to animate the scale over time + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator AnimateScale(Transform targetTransform, Vector3 vector, float duration, MMTweenType curveX, MMTweenType curveY, MMTweenType curveZ, float remapCurveZero = 0f, float remapCurveOne = 1f) + { + if (targetTransform == null) + { + yield break; + } + + if ((curveX == null) || (curveY == null) || (curveZ == null)) + { + yield break; + } + + if (duration == 0f) + { + yield break; + } + + float journey = NormalPlayDirection ? 0f : duration; + + _initialScale = targetTransform.localScale; + + IsPlaying = true; + + while ((journey >= 0) && (journey <= duration) && (duration > 0)) + { + vector = Vector3.zero; + float percent = Mathf.Clamp01(journey / duration); + + if (AnimateX) + { + vector.x = AnimateX ? curveX.Evaluate(percent) + Offset : targetTransform.localScale.x; + vector.x = MMFeedbacksHelpers.Remap(vector.x, 0f, 1f, remapCurveZero, remapCurveOne); + if (Mode == Modes.Additive) + { + vector.x += _initialScale.x; + } + } + else + { + vector.x = targetTransform.localScale.x; + } + + if (AnimateY) + { + vector.y = AnimateY ? curveY.Evaluate(percent) + Offset : targetTransform.localScale.y; + vector.y = MMFeedbacksHelpers.Remap(vector.y, 0f, 1f, remapCurveZero, remapCurveOne); + if (Mode == Modes.Additive) + { + vector.y += _initialScale.y; + } + } + else + { + vector.y = targetTransform.localScale.y; + } + + if (AnimateZ) + { + vector.z = AnimateZ ? curveZ.Evaluate(percent) + Offset : targetTransform.localScale.z; + vector.z = MMFeedbacksHelpers.Remap(vector.z, 0f, 1f, remapCurveZero, remapCurveOne); + if (Mode == Modes.Additive) + { + vector.z += _initialScale.z; + } + } + else + { + vector.z = targetTransform.localScale.z; + } + + if (UniformScaling) + { + vector.y = vector.x; + vector.z = vector.x; + } + + targetTransform.localScale = vector; + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + + yield return null; + } + + vector = Vector3.zero; + + if (AnimateX) + { + vector.x = AnimateX ? curveX.Evaluate(FinalNormalizedTime) + Offset : targetTransform.localScale.x; + vector.x = MMFeedbacksHelpers.Remap(vector.x, 0f, 1f, remapCurveZero, remapCurveOne); + if (Mode == Modes.Additive) + { + vector.x += _initialScale.x; + } + } + else + { + vector.x = targetTransform.localScale.x; + } + + if (AnimateY) + { + vector.y = AnimateY ? curveY.Evaluate(FinalNormalizedTime) + Offset : targetTransform.localScale.y; + vector.y = MMFeedbacksHelpers.Remap(vector.y, 0f, 1f, remapCurveZero, remapCurveOne); + if (Mode == Modes.Additive) + { + vector.y += _initialScale.y; + } + } + else + { + vector.y = targetTransform.localScale.y; + } + + if (AnimateZ) + { + vector.z = AnimateZ ? curveZ.Evaluate(FinalNormalizedTime) + Offset : targetTransform.localScale.z; + vector.z = MMFeedbacksHelpers.Remap(vector.z, 0f, 1f, remapCurveZero, remapCurveOne); + if (Mode == Modes.Additive) + { + vector.z += _initialScale.z; + } + } + else + { + vector.z = targetTransform.localScale.z; + } + + if (UniformScaling) + { + vector.y = vector.x; + vector.z = vector.x; + } + + targetTransform.localScale = vector; + IsPlaying = false; + _coroutine = null; + yield return null; + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + + } + + /// + /// On disable we reset our coroutine + /// + public override void OnDisable() + { + _coroutine = null; + } + + /// + /// On Validate, we migrate our deprecated animation curves to our tween types if needed + /// + public override void OnValidate() + { + base.OnValidate(); + MMFeedbacksHelpers.MigrateCurve(AnimateScaleX, AnimateScaleTweenX, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimateScaleY, AnimateScaleTweenY, Owner); + MMFeedbacksHelpers.MigrateCurve(AnimateScaleZ, AnimateScaleTweenZ, Owner); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + AnimateScaleTarget.localScale = _initialScale; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Scale.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Scale.cs.meta new file mode 100644 index 0000000..0e7057c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Scale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2cba57e3c6751145ba55ff4962addea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleShake.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleShake.cs new file mode 100644 index 0000000..0ca3435 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleShake.cs @@ -0,0 +1,178 @@ +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you emit a ScaleShake event. This will be caught by MMScaleShakers (on the specified channel). + /// Scale shakers, as the name suggests, are used to shake the scale of a transform, along a direction, with optional noise and other fine control options. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Scale Shake")] + [FeedbackHelp("This feedback lets you emit a ScaleShake event. This will be caught by MMScaleShakers (on the specified channel)." + + " Scale shakers, as the name suggests, are used to shake the scale of a transform, along a direction, with optional noise and other fine control options.")] + public class MMF_ScaleShake : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + /// returns the duration of the feedback + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + public override bool HasRange => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetShaker = FindAutomatedTarget(); + + [MMFInspectorGroup("Optional Target", true, 33)] + /// a specific (and optional) shaker to target, regardless of its channel + [Tooltip("a specific (and optional) shaker to target, regardless of its channel")] + public MMScaleShaker TargetShaker; + + [MMFInspectorGroup("Scale Shake", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.5f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Shake Settings", true, 42)] + /// the speed at which the transform should shake + [Tooltip("the speed at which the transform should shake")] + public float ShakeSpeed = 20f; + /// the maximum distance from its initial scale the transform will move to during the shake + [Tooltip("the maximum distance from its initial scale the transform will move to during the shake")] + public float ShakeRange = 0.5f; + + [MMFInspectorGroup("Direction", true, 43)] + /// the direction along which to shake the transform's scale + [Tooltip("the direction along which to shake the transform's scale")] + public Vector3 ShakeMainDirection = Vector3.up; + /// if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection + [Tooltip("if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection")] + public bool RandomizeDirection = false; + /// when in RandomizeDirection mode, a vector against which to randomize the main direction + [Tooltip("when in RandomizeDirection mode, a vector against which to randomize the main direction")] + [MMFCondition("RandomizeDirection", true)] + public Vector3 ShakeAltDirection = Vector3.up; + /// if this is true, a new direction will be randomized every time a shake happens + [Tooltip("if this is true, a new direction will be randomized every time a shake happens")] + public bool RandomizeDirectionOnPlay = false; + + [MMFInspectorGroup("Directional Noise", true, 47)] + /// whether or not to add noise to the main direction + [Tooltip("whether or not to add noise to the main direction")] + public bool AddDirectionalNoise = true; + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax")] + [MMFCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMin = new Vector3(0.25f, 0.25f, 0.25f); + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin")] + [MMFCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMax = new Vector3(0.25f, 0.25f, 0.25f); + + [MMFInspectorGroup("Randomness", true, 44)] + /// a unique seed you can use to get different outcomes when shaking more than one transform at once + [Tooltip("a unique seed you can use to get different outcomes when shaking more than one transform at once")] + public Vector3 RandomnessSeed; + /// whether or not to generate a unique seed automatically on every shake + [Tooltip("whether or not to generate a unique seed automatically on every shake")] + public bool RandomizeSeedOnShake = true; + + [MMFInspectorGroup("One Time", true, 45)] + /// whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve + [Tooltip("whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve")] + public bool UseAttenuation = true; + /// the animation curve used to define attenuation, impacting the amplitude of the shake + [Tooltip("the animation curve used to define attenuation, impacting the amplitude of the shake")] + [MMFCondition("UseAttenuation", true)] + public AnimationCurve AttenuationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + /// + /// Triggers the corresponding coroutine + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + if (TargetShaker == null) + { + MMScaleShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, + UseRange, RangeDistance, UseRangeFalloff, RangeFalloff, RemapRangeFalloff, position, + intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + else + { + TargetShaker?.OnMMScaleShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, + UseRange, RangeDistance, UseRangeFalloff, RangeFalloff, RemapRangeFalloff, position, + intensityMultiplier, TargetShaker.ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + if (TargetShaker == null) + { + MMScaleShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, stop:true); + } + else + { + TargetShaker?.OnMMScaleShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, channelData:TargetShaker.ChannelData, stop:true); + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetShaker == null) + { + MMScaleShakeEvent.Trigger(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, restore:true); + } + else + { + TargetShaker?.OnMMScaleShakeEvent(Duration, ShakeSpeed, ShakeRange, ShakeMainDirection, RandomizeDirection, ShakeAltDirection, RandomizeDirectionOnPlay, AddDirectionalNoise, + DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax, RandomnessSeed, RandomizeSeedOnShake, UseAttenuation, AttenuationCurve, channelData:TargetShaker.ChannelData, restore:true); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleShake.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleShake.cs.meta new file mode 100644 index 0000000..aaaa71a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleShake.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dabf1ff37a1366d46b6421d7438ab929 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleSpring.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleSpring.cs new file mode 100644 index 0000000..ad2e0e9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleSpring.cs @@ -0,0 +1,268 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you animate the scale of the target object over time, with a spring effect + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Scale Spring")] + [FeedbackHelp("This feedback will let you animate the scale of the target object over time, with a spring effect.")] + public class MMF_ScaleSpring : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (AnimateScaleTarget == null); } + public override string RequiredTargetText { get { return AnimateScaleTarget != null ? AnimateScaleTarget.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that an AnimateScaleTarget be set to be able to work properly. You can set one below."; } } + public override bool HasCustomInspectors { get { return true; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => AnimateScaleTarget = FindAutomatedTarget(); + /// the duration of this feedback is the duration of the scale animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasRandomness => true; + + public enum Modes { MoveTo, MoveToAdditive, Bump } + + [MMFInspectorGroup("Target", true, 12, true)] + /// the object to animate + [Tooltip("the object to animate")] + public Transform AnimateScaleTarget; + /// spring duration is determined by the spring (and could be impacted real time), so it's up to you to determine how long this feedback should last, from the point of view of its parent MMF Player + [Tooltip("spring duration is determined by the spring (and could be impacted real time), so it's up to you to determine how long this feedback should last, from the point of view of its parent MMF Player")] + public float DeclaredDuration = 0f; + + [MMFInspectorGroup("Spring Settings", true, 18)] + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingX = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyX = 6f; + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingY = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyY = 6f; + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float DampingZ = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float FrequencyZ = 6f; + + [MMFInspectorGroup("Spring Mode", true, 19)] + /// the chosen mode for this spring. MoveTo will move the target the specified scale (randomized between min and max). MoveToAdditive will add the specified scale (randomized between min and max) to the target's current scale. Bump will bump the target's scale by the specified power (randomized between min and max) + [Tooltip("the chosen mode for this spring. MoveTo will move the target the specified scale (randomized between min and max). MoveToAdditive will add the specified scale (randomized between min and max) to the target's current scale. Bump will bump the target's scale by the specified power (randomized between min and max)")] + public Modes Mode = Modes.Bump; + /// the min value from which to pick a random target value when in MoveTo or MoveToAdditive modes + [Tooltip("the min value from which to pick a random target value when in MoveTo or MoveToAdditive modes")] + [MMFEnumCondition("Mode", (int)Modes.MoveTo, (int)Modes.MoveToAdditive)] + public Vector3 MoveToScaleMin = new Vector3(1f, 1f, 1f); + /// the max value from which to pick a random target value when in MoveTo or MoveToAdditive modes + [Tooltip("the max value from which to pick a random target value when in MoveTo or MoveToAdditive modes")] + [MMFEnumCondition("Mode", (int)Modes.MoveTo, (int)Modes.MoveToAdditive)] + public Vector3 MoveToScaleMax = new Vector3(2f, 2f, 2f); + /// the min value from which to pick a random bump amount when in Bump mode + [Tooltip("the min value from which to pick a random bump amount when in Bump mode")] + [MMFEnumCondition("Mode", (int)Modes.Bump)] + public Vector3 BumpScaleMin = new Vector3(20f, 20f, 20f); + /// the max value from which to pick a random bump amount when in Bump mode + [Tooltip("the max value from which to pick a random bump amount when in Bump mode")] + [MMFEnumCondition("Mode", (int)Modes.Bump)] + public Vector3 BumpScaleMax = new Vector3(30f, 30f, 30f); + + protected Vector3 _currentValue = Vector3.zero; + protected Vector3 _targetValue = Vector3.zero; + protected Vector3 _velocity = Vector3.zero; + + protected Vector3 _initialScale; + protected virtual bool LowVelocity => (Mathf.Abs(_velocity.x) + Mathf.Abs(_velocity.y) + Mathf.Abs(_velocity.z)) < _velocityLowThreshold; + protected Coroutine _coroutine; + protected float _velocityLowThreshold = 0.001f; + protected Vector3 _newScale; + + /// + /// On init we store our initial scale + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active && (AnimateScaleTarget != null)) + { + GetInitialValues(); + } + } + + /// + /// Stores initial scale for future use + /// + protected virtual void GetInitialValues() + { + _initialScale = AnimateScaleTarget.localScale; + _currentValue = AnimateScaleTarget.localScale; + _targetValue = _currentValue; + } + + /// + /// On Play, triggers the scale animation + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (AnimateScaleTarget == null)) + { + return; + } + + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + + switch (Mode) + { + case Modes.MoveTo: + _targetValue.x = Random.Range(MoveToScaleMin.x, MoveToScaleMax.x); + _targetValue.y = Random.Range(MoveToScaleMin.y, MoveToScaleMax.y); + _targetValue.z = Random.Range(MoveToScaleMin.z, MoveToScaleMax.z); + break; + case Modes.MoveToAdditive: + _targetValue.x += Random.Range(MoveToScaleMin.x, MoveToScaleMax.x); + _targetValue.y += Random.Range(MoveToScaleMin.y, MoveToScaleMax.y); + _targetValue.z += Random.Range(MoveToScaleMin.z, MoveToScaleMax.z); + break; + case Modes.Bump: + _velocity.x = Random.Range(BumpScaleMin.x, BumpScaleMax.x); + _velocity.y = Random.Range(BumpScaleMin.y, BumpScaleMax.y); + _velocity.z = Random.Range(BumpScaleMin.z, BumpScaleMax.z); + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + _velocity.x *= intensityMultiplier; + break; + } + _coroutine = Owner.StartCoroutine(Spring()); + } + + /// + /// a coroutine running on the Owner used to move the spring + /// + /// + protected virtual IEnumerator Spring() + { + IsPlaying = true; + UpdateSpring(); + while (!LowVelocity) + { + yield return null; + UpdateSpring(); + ApplyValue(); + } + + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + _currentValue = _targetValue; + ApplyValue(); + + IsPlaying = false; + } + + /// + /// Updates the spring's values + /// + protected virtual void UpdateSpring() + { + MMMaths.Spring(ref _currentValue.x, _targetValue.x, ref _velocity.x, DampingX, FrequencyX, FeedbackDeltaTime); + MMMaths.Spring(ref _currentValue.y, _targetValue.y, ref _velocity.y, DampingY, FrequencyY, FeedbackDeltaTime); + MMMaths.Spring(ref _currentValue.z, _targetValue.z, ref _velocity.z, DampingZ, FrequencyZ, FeedbackDeltaTime); + ApplyValue(); + } + + /// + /// Applies the current spring value to the target + /// + protected virtual void ApplyValue() + { + _newScale.x = Mathf.Abs(_currentValue.x); + _newScale.y = Mathf.Abs(_currentValue.y); + _newScale.z = Mathf.Abs(_currentValue.z); + AnimateScaleTarget.localScale = _currentValue; + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + IsPlaying = false; + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + _targetValue = _currentValue; + ApplyValue(); + } + + /// + /// Skips to the end, matching the target value + /// + /// + /// + protected override void CustomSkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized && (AnimateScaleTarget != null)) + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + _currentValue = _targetValue; + IsPlaying = false; + _velocity.x = 0f; + _velocity.y = 0f; + _velocity.z = 0f; + ApplyValue(); + } + } + + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _currentValue = _initialScale; + _targetValue = _currentValue; + ApplyValue(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleSpring.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleSpring.cs.meta new file mode 100644 index 0000000..6fb9055 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ScaleSpring.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e352b5419942c704c85f5410c6d2ada3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetActive.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetActive.cs new file mode 100644 index 0000000..d540acb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetActive.cs @@ -0,0 +1,280 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// Turns an object active or inactive at the various stages of the feedback + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to change the state of the target gameobject from active to inactive (or the opposite), on init, play, stop or reset. For each of these you can specify if you want to force a state (active or inactive), or toggle it (active becomes inactive, inactive becomes active).")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("GameObject/Set Active")] + public class MMF_SetActive : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor => MMFeedbacksInspectorColors.GameObjectColor; + public override bool EvaluateRequiresSetup() => (TargetGameObject == null); + public override string RequiredTargetText => TargetGameObject != null ? TargetGameObject.name : ""; + public override string RequiredTargetTextExtra + { + get + { + if (ExtraTargetGameObjects.Count > 0) + { + return " (+"+ExtraTargetGameObjects.Count+")"; + } + return ""; + } + } + public override string RequiresSetupText => "This feedback requires that a TargetGameObject be set to be able to work properly. You can set one below."; + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetGameObject = FindAutomatedTargetGameObject(); + + /// the possible effects the feedback can have on the target object's status + public enum PossibleStates { Active, Inactive, Toggle } + + [MMFInspectorGroup("Set Active Target", true, 12, true)] + /// the gameobject we want to change the active state of + [Tooltip("the gameobject we want to change the active state of")] + public GameObject TargetGameObject; + /// a list of extra gameobjects we want to change the active state of + [Tooltip("a list of extra gameobjects we want to change the active state of")] + public List ExtraTargetGameObjects; + + [MMFInspectorGroup("States", true, 14)] + /// whether or not we should alter the state of the target object on init + [Tooltip("whether or not we should alter the state of the target object on init")] + public bool SetStateOnInit = false; + [MMFCondition("SetStateOnInit", true)] + /// how to change the state on init + [Tooltip("how to change the state on init")] + public PossibleStates StateOnInit = PossibleStates.Inactive; + /// whether or not we should alter the state of the target object on play + [Tooltip("whether or not we should alter the state of the target object on play")] + public bool SetStateOnPlay = false; + /// how to change the state on play + [Tooltip("how to change the state on play")] + [MMFCondition("SetStateOnPlay", true)] + public PossibleStates StateOnPlay = PossibleStates.Inactive; + /// whether or not we should alter the state of the target object on stop + [Tooltip("whether or not we should alter the state of the target object on stop")] + public bool SetStateOnStop = false; + /// how to change the state on stop + [Tooltip("how to change the state on stop")] + [MMFCondition("SetStateOnStop", true)] + public PossibleStates StateOnStop = PossibleStates.Inactive; + /// whether or not we should alter the state of the target object on reset + [Tooltip("whether or not we should alter the state of the target object on reset")] + public bool SetStateOnReset = false; + /// how to change the state on reset + [Tooltip("how to change the state on reset")] + [MMFCondition("SetStateOnReset", true)] + public PossibleStates StateOnReset = PossibleStates.Inactive; + /// whether or not we should alter the state of the target object on skip + [Tooltip("whether or not we should alter the state of the target object on skip")] + public bool SetStateOnSkip = false; + /// how to change the state on skip + [Tooltip("how to change the state on skip")] + [MMFCondition("SetStateOnSkip", true)] + public PossibleStates StateOnSkip = PossibleStates.Inactive; + /// whether or not we should alter the state of the target object when the player this feedback belongs to is done playing all its feedbacks + [Tooltip("whether or not we should alter the state of the target object when the player this feedback belongs to is done playing all its feedbacks")] + public bool SetStateOnPlayerComplete = false; + /// how to change the state on player complete + [Tooltip("how to change the state on player complete")] + [MMFCondition("SetStateOnPlayerComplete", true)] + public PossibleStates StateOnPlayerComplete = PossibleStates.Inactive; + + protected bool _initialState; + protected List _initialStates; + + /// + /// On init we change the state of our object if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + _initialStates = new List(ExtraTargetGameObjects.Count); + + if (Active && (TargetGameObject != null)) + { + _initialState = TargetGameObject.activeInHierarchy; + + for (int i = 0; i < ExtraTargetGameObjects.Count; i++) + { + _initialStates.Add(ExtraTargetGameObjects[i].activeInHierarchy); + } + + if (SetStateOnInit) + { + SetStatus(StateOnInit); + } + } + } + + /// + /// On Play we change the state of our object if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetGameObject == null)) + { + return; + } + + if (SetStateOnPlay) + { + SetStatus(StateOnPlay); + } + } + + /// + /// On Stop we change the state of our object if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + + if (Active && FeedbackTypeAuthorized && (TargetGameObject != null)) + { + if (SetStateOnStop) + { + SetStatus(StateOnStop); + } + } + } + + /// + /// On Reset we change the state of our object if needed + /// + protected override void CustomReset() + { + base.CustomReset(); + + if (InCooldown) + { + return; + } + + if (Active && FeedbackTypeAuthorized && (TargetGameObject != null)) + { + if (SetStateOnReset) + { + SetStatus(StateOnReset); + } + } + } + + /// + /// On PlayerComplete we change the state of our object if needed + /// + protected override void CustomPlayerComplete() + { + base.CustomPlayerComplete(); + + if (InCooldown) + { + return; + } + + if (Active && FeedbackTypeAuthorized && (TargetGameObject != null)) + { + if (SetStateOnPlayerComplete) + { + SetStatus(StateOnPlayerComplete); + } + } + } + + + /// + /// On Skip, changes the state of our target object if needed + /// + /// + /// + protected override void CustomSkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) + { + base.CustomSkipToTheEnd(position, feedbacksIntensity); + + if (InCooldown) + { + return; + } + + if (Active && FeedbackTypeAuthorized && (TargetGameObject != null)) + { + if (SetStateOnSkip) + { + SetStatus(StateOnSkip); + } + } + } + + /// + /// Changes the status of the object + /// + /// + protected virtual void SetStatus(PossibleStates state) + { + bool newState = false; + switch (state) + { + case PossibleStates.Active: + newState = NormalPlayDirection ? true : false; + break; + case PossibleStates.Inactive: + newState = NormalPlayDirection ? false : true; + break; + case PossibleStates.Toggle: + newState = !TargetGameObject.activeInHierarchy; + break; + } + + ApplyStatus(TargetGameObject, newState); + foreach (GameObject go in ExtraTargetGameObjects) + { + ApplyStatus(go, newState); + } + } + + /// + /// Applies the status to the target game object + /// + /// + /// + protected virtual void ApplyStatus(GameObject target, bool newState) + { + target.SetActive(newState); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetGameObject.SetActive(_initialState); + for (int i = 0; i < ExtraTargetGameObjects.Count; i++) + { + ExtraTargetGameObjects[i].SetActive(_initialStates[i]); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetActive.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetActive.cs.meta new file mode 100644 index 0000000..72c8a87 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetActive.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99dee6f19eeff614d8e1497cb5a83677 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetParent.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetParent.cs new file mode 100644 index 0000000..ed68f98 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetParent.cs @@ -0,0 +1,59 @@ +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to change the parent of a transform + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you change the parent of a transform.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Set Parent")] + public class MMF_SetParent : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (ObjectToParent == null); } + public override string RequiredTargetText { get { return ObjectToParent != null ? ObjectToParent.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires an ObjectToParent, that will be reparented to NewParent"; } } + #endif + + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => ObjectToParent = FindAutomatedTarget(); + + [MMFInspectorGroup("Parenting", true, 12, true)] + /// the object we want to change the parent of + [Tooltip("the object we want to change the parent of")] + public Transform ObjectToParent; + /// the object ObjectToParent should now be parented to after playing this feedback + [Tooltip("the object ObjectToParent should now be parented to after playing this feedback")] + public Transform NewParent; + /// if true, the parent-relative position, scale and rotation are modified such that the object keeps the same world space position, rotation and scale as before + [Tooltip("if true, the parent-relative position, scale and rotation are modified such that the object keeps the same world space position, rotation and scale as before")] + public bool WorldPositionStays = true; + + /// + /// On Play, changes the parent of the target transform + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (ObjectToParent == null) + { + Debug.LogWarning("No object to parent was set for " + Owner.name); + return; + } + ObjectToParent.SetParent(NewParent, WorldPositionStays); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetParent.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetParent.cs.meta new file mode 100644 index 0000000..c47ca20 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SetParent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8eb29863876e355408fe5429a4948fe5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ShaderGlobal.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ShaderGlobal.cs new file mode 100644 index 0000000..e19befe --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ShaderGlobal.cs @@ -0,0 +1,236 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// Turns an object active or inactive at the various stages of the feedback + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to set global properties on your shader, or enable/disable keywords.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/Shader Global")] + public class MMF_ShaderGlobal : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.RendererColor; } } + public override string RequiredTargetText { get { return Mode.ToString(); } } + #endif + + public enum Modes { SetGlobalColor, SetGlobalFloat, SetGlobalInt, SetGlobalMatrix, SetGlobalTexture, SetGlobalVector, EnableKeyword, DisableKeyword, WarmupAllShaders } + + [MMFInspectorGroup("Shader Global", true, 24)] + /// the selected mode for this feedback + [Tooltip("the selected mode for this feedback")] + public Modes Mode = Modes.SetGlobalFloat; + /// the name of the global property + [Tooltip("the name of the global property")] + [MMFEnumCondition("Mode", (int)Modes.SetGlobalColor, (int)Modes.SetGlobalFloat, (int)Modes.SetGlobalInt, (int)Modes.SetGlobalMatrix, (int)Modes.SetGlobalTexture, (int)Modes.SetGlobalVector)] + public string PropertyName = ""; + /// the name ID of the property retrieved by Shader.PropertyToID + [Tooltip("the name ID of the property retrieved by Shader.PropertyToID")] + [MMFEnumCondition("Mode", (int)Modes.SetGlobalColor, (int)Modes.SetGlobalFloat, (int)Modes.SetGlobalInt, (int)Modes.SetGlobalMatrix, (int)Modes.SetGlobalTexture, (int)Modes.SetGlobalVector)] + public int PropertyNameID = 0; + /// a global color property for all shaders + [Tooltip("a global color property for all shaders")] + [MMFEnumCondition("Mode", (int)Modes.SetGlobalColor)] + public Color GlobalColor = Color.yellow; + /// a global float property for all shaders + [Tooltip("a global float property for all shaders")] + [MMFEnumCondition("Mode", (int)Modes.SetGlobalFloat)] + public float GlobalFloat = 1f; + /// a global int property for all shaders + [Tooltip("a global int property for all shaders")] + [MMFEnumCondition("Mode", (int)Modes.SetGlobalInt)] + public int GlobalInt = 1; + /// a global matrix property for all shaders + [Tooltip("a global matrix property for all shaders")] + [MMFEnumCondition("Mode", (int)Modes.SetGlobalMatrix)] + public Matrix4x4 GlobalMatrix = Matrix4x4.identity; + /// a global texture property for all shaders + [Tooltip("a global texture property for all shaders")] + [MMFEnumCondition("Mode", (int)Modes.SetGlobalTexture)] + public RenderTexture GlobalTexture; + /// a global vector property for all shaders + [Tooltip("a global vector property for all shaders")] + [MMFEnumCondition("Mode", (int)Modes.SetGlobalVector)] + public Vector4 GlobalVector; + /// a global shader keyword + [Tooltip("a global shader keyword")] + [MMFEnumCondition("Mode", (int)Modes.EnableKeyword, (int)Modes.DisableKeyword)] + public string Keyword; + + protected Color _initialColor; + protected float _initialFloat; + protected int _initialInt; + protected Matrix4x4 _initialMatrix; + protected RenderTexture _initialTexture; + protected Vector4 _initialVector; + + /// + /// On Play we set our global shader property + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (Mode) + { + case Modes.SetGlobalColor: + if (PropertyName == "") + { + Shader.SetGlobalColor(PropertyNameID, GlobalColor); + } + else + { + Shader.SetGlobalColor(PropertyName, GlobalColor); + } + break; + case Modes.SetGlobalFloat: + if (PropertyName == "") + { + Shader.SetGlobalFloat(PropertyNameID, GlobalFloat); + } + else + { + Shader.SetGlobalFloat(PropertyName, GlobalFloat); + } + break; + case Modes.SetGlobalInt: + if (PropertyName == "") + { + Shader.SetGlobalInt(PropertyNameID, GlobalInt); + } + else + { + Shader.SetGlobalInt(PropertyName, GlobalInt); + } + break; + case Modes.SetGlobalMatrix: + if (PropertyName == "") + { + Shader.SetGlobalMatrix(PropertyNameID, GlobalMatrix); + } + else + { + Shader.SetGlobalMatrix(PropertyName, GlobalMatrix); + } + break; + case Modes.SetGlobalTexture: + if (PropertyName == "") + { + Shader.SetGlobalTexture(PropertyNameID, GlobalTexture); + } + else + { + Shader.SetGlobalTexture(PropertyName, GlobalTexture); + } + break; + case Modes.SetGlobalVector: + if (PropertyName == "") + { + Shader.SetGlobalVector(PropertyNameID, GlobalVector); + } + else + { + Shader.SetGlobalVector(PropertyName, GlobalVector); + } + break; + case Modes.EnableKeyword: + Shader.EnableKeyword(Keyword); + break; + case Modes.DisableKeyword: + Shader.DisableKeyword(Keyword); + break; + case Modes.WarmupAllShaders: + Shader.WarmupAllShaders(); + break; + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + switch (Mode) + { + case Modes.SetGlobalColor: + if (PropertyName == "") + { + Shader.SetGlobalColor(PropertyNameID, _initialColor); + } + else + { + Shader.SetGlobalColor(PropertyName, _initialColor); + } + break; + case Modes.SetGlobalFloat: + if (PropertyName == "") + { + Shader.SetGlobalFloat(PropertyNameID, _initialFloat); + } + else + { + Shader.SetGlobalFloat(PropertyName, _initialFloat); + } + break; + case Modes.SetGlobalInt: + if (PropertyName == "") + { + Shader.SetGlobalInt(PropertyNameID, _initialInt); + } + else + { + Shader.SetGlobalInt(PropertyName, _initialInt); + } + break; + case Modes.SetGlobalMatrix: + if (PropertyName == "") + { + Shader.SetGlobalMatrix(PropertyNameID, _initialMatrix); + } + else + { + Shader.SetGlobalMatrix(PropertyName, _initialMatrix); + } + break; + case Modes.SetGlobalTexture: + if (PropertyName == "") + { + Shader.SetGlobalTexture(PropertyNameID, _initialTexture); + } + else + { + Shader.SetGlobalTexture(PropertyName, _initialTexture); + } + break; + case Modes.SetGlobalVector: + if (PropertyName == "") + { + Shader.SetGlobalVector(PropertyNameID, _initialVector); + } + else + { + Shader.SetGlobalVector(PropertyName, _initialVector); + } + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ShaderGlobal.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ShaderGlobal.cs.meta new file mode 100644 index 0000000..f1f4041 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_ShaderGlobal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2be5777d688f22c4c90502e72d32cf60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Skybox.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Skybox.cs new file mode 100644 index 0000000..21ec7ef --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Skybox.cs @@ -0,0 +1,74 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the scene's skybox on play, replacing it with another one, either a specific one, or one picked at random among multiple skyboxes. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the scene's skybox on play, replacing it with another one, either a specific one, or one picked at random among multiple skyboxes.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/Skybox")] + public class MMF_Skybox : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.RendererColor; } } + #endif + + /// whether skyboxes are selected at random or not + public enum Modes { Single, Random } + + [MMFInspectorGroup("Skybox", true, 65)] + /// the selected mode + public Modes Mode = Modes.Single; + /// the skybox to assign when in Single mode + public Material SingleSkybox; + /// the skyboxes to pick from when in Random mode + public Material[] RandomSkyboxes; + + protected Material _initialSkybox; + + /// + /// On play, we set the scene's skybox to a new one + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _initialSkybox = RenderSettings.skybox; + + if (Mode == Modes.Single) + { + RenderSettings.skybox = SingleSkybox; + } + else if (Mode == Modes.Random) + { + RenderSettings.skybox = RandomSkyboxes[Random.Range(0, RandomSkyboxes.Length)]; + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + RenderSettings.skybox = _initialSkybox; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Skybox.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Skybox.cs.meta new file mode 100644 index 0000000..ff7a8ff --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Skybox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb9fd307ae590c649a39344a277d14ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SpriteRenderer.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SpriteRenderer.cs new file mode 100644 index 0000000..bf82ccf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SpriteRenderer.cs @@ -0,0 +1,360 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the color of a target sprite renderer over time, and flip it on X or Y. You can also use it to command one or many MMSpriteRendererShakers. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the color of a target sprite renderer over time, and flip it on X or Y. You can also use it to command one or many MMSpriteRendererShakers.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/SpriteRenderer")] + public class MMF_SpriteRenderer : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.RendererColor; } } + public override bool EvaluateRequiresSetup() => (BoundSpriteRenderer == null); + public override string RequiredTargetText => BoundSpriteRenderer != null ? BoundSpriteRenderer.name : ""; + public override string RequiresSetupText => "This feedback requires that a BoundSpriteRenderer be set to be able to work properly. You can set one below."; + #endif + + /// the duration of this feedback is the duration of the sprite renderer, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundSpriteRenderer = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant, ShakerEvent, ToDestinationColor, ToDestinationColorAndBack } + /// the different ways to grab initial color + public enum InitialColorModes { InitialColorOnInit, InitialColorOnPlay } + + [MMFInspectorGroup("Sprite Renderer", true, 51, true)] + /// the SpriteRenderer to affect when playing the feedback + [Tooltip("the SpriteRenderer to affect when playing the feedback")] + public SpriteRenderer BoundSpriteRenderer; + /// whether the feedback should affect the sprite renderer instantly or over a period of time + [Tooltip("whether the feedback should affect the sprite renderer instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the sprite renderer should change over time + [Tooltip("how long the sprite renderer should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestinationColor, (int)Modes.ToDestinationColorAndBack)] + public float Duration = 0.2f; + /// whether or not that sprite renderer should be turned off on start + [Tooltip("whether or not that sprite renderer should be turned off on start")] + public bool StartsOff = false; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to broadcast a range to only affect certain shakers + [Tooltip("whether or not to broadcast a range to only affect certain shakers")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool OnlyBroadcastInRange = false; + /// the range of the event, in units + [Tooltip("the range of the event, in units")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public float EventRange = 100f; + /// the transform to use to broadcast the event as origin point + [Tooltip("the transform to use to broadcast the event as origin point")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public Transform EventOriginTransform; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// whether to grab the initial color to (potentially) go back to at init or when the feedback plays + [Tooltip("whether to grab the initial color to (potentially) go back to at init or when the feedback plays")] + public InitialColorModes InitialColorMode = InitialColorModes.InitialColorOnPlay; + + [MMFInspectorGroup("Color", true, 52)] + /// whether or not to modify the color of the sprite renderer + [Tooltip("whether or not to modify the color of the sprite renderer")] + public bool ModifyColor = true; + /// the colors to apply to the sprite renderer over time + [Tooltip("the colors to apply to the sprite renderer over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public Gradient ColorOverTime; + /// the color to move to in instant mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant, (int)Modes.ShakerEvent)] + public Color InstantColor; + /// the color to move to in ToDestination mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant, (int)Modes.ToDestinationColor, (int)Modes.ToDestinationColorAndBack)] + public Color ToDestinationColor = Color.red; + /// the color to move to in ToDestination mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant, (int)Modes.ToDestinationColor, (int)Modes.ToDestinationColorAndBack)] + public AnimationCurve ToDestinationColorCurve = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(1, 1f)); + + [MMFInspectorGroup("Flip", true, 53)] + /// whether or not to flip the sprite on X + [Tooltip("whether or not to flip the sprite on X")] + public bool FlipX = false; + /// whether or not to flip the sprite on Y + [Tooltip("whether or not to flip the sprite on Y")] + public bool FlipY = false; + + protected Coroutine _coroutine; + protected Color _initialColor; + protected bool _initialFlipX; + protected bool _initialFlipY; + + /// + /// On init we turn the sprite renderer off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (EventOriginTransform == null) + { + EventOriginTransform = Owner.transform; + } + + if (Active) + { + if (StartsOff) + { + Turn(false); + } + } + + if ((BoundSpriteRenderer != null) && (InitialColorMode == InitialColorModes.InitialColorOnInit)) + { + _initialColor = BoundSpriteRenderer.color; + _initialFlipX = BoundSpriteRenderer.flipX; + _initialFlipY = BoundSpriteRenderer.flipY; + } + } + + /// + /// On Play we turn our sprite renderer on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if ((BoundSpriteRenderer != null) && (InitialColorMode == InitialColorModes.InitialColorOnPlay)) + { + _initialColor = BoundSpriteRenderer.color; + _initialFlipX = BoundSpriteRenderer.flipX; + _initialFlipY = BoundSpriteRenderer.flipY; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + Turn(true); + switch (Mode) + { + case Modes.Instant: + if (ModifyColor) + { + BoundSpriteRenderer.color = InstantColor; + } + Flip(); + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(SpriteRendererSequence()); + break; + case Modes.ShakerEvent: + MMSpriteRendererShakeEvent.Trigger(FeedbackDuration, ModifyColor, ColorOverTime, + FlipX, FlipY, + intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, + OnlyBroadcastInRange, EventRange, EventOriginTransform.position); + break; + case Modes.ToDestinationColor: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(SpriteRendererToDestinationSequence(false)); + break; + case Modes.ToDestinationColorAndBack: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(SpriteRendererToDestinationSequence(true)); + break; + } + } + + /// + /// This coroutine will modify the values on the SpriteRenderer + /// + /// + protected virtual IEnumerator SpriteRendererSequence() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + Flip(); + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetSpriteRendererValues(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetSpriteRendererValues(FinalNormalizedTime); + if (StartsOff) + { + Turn(false); + } + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// This coroutine will modify the values on the SpriteRenderer + /// + /// + protected virtual IEnumerator SpriteRendererToDestinationSequence(bool andBack) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + Flip(); + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + if (andBack) + { + remappedTime = (remappedTime < 0.5f) + ? MMFeedbacksHelpers.Remap(remappedTime, 0f, 0.5f, 0f, 1f) + : MMFeedbacksHelpers.Remap(remappedTime, 0.5f, 1f, 1f, 0f); + } + + float evalTime = ToDestinationColorCurve.Evaluate(remappedTime); + + if (ModifyColor) + { + BoundSpriteRenderer.color = Color.LerpUnclamped(_initialColor, ToDestinationColor, evalTime); + } + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + if (ModifyColor) + { + BoundSpriteRenderer.color = andBack ? _initialColor : ToDestinationColor; + } + if (StartsOff) + { + Turn(false); + } + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// Flips the sprite on X or Y based on the FlipX/FlipY settings + /// + protected virtual void Flip() + { + if (FlipX) + { + BoundSpriteRenderer.flipX = !BoundSpriteRenderer.flipX; + } + if (FlipY) + { + BoundSpriteRenderer.flipY = !BoundSpriteRenderer.flipY; + } + } + + /// + /// Sets the various values on the sprite renderer on a specified time (between 0 and 1) + /// + /// + protected virtual void SetSpriteRendererValues(float time) + { + if (ModifyColor) + { + BoundSpriteRenderer.color = ColorOverTime.Evaluate(time); + } + } + + /// + /// Stops the transition on stop if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + Owner.StopCoroutine(_coroutine); + IsPlaying = false; + _coroutine = null; + } + + /// + /// Turns the sprite renderer on or off + /// + /// + protected virtual void Turn(bool status) + { + BoundSpriteRenderer.gameObject.SetActive(status); + BoundSpriteRenderer.enabled = status; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (BoundSpriteRenderer != null) + { + BoundSpriteRenderer.color = _initialColor; + BoundSpriteRenderer.flipX = _initialFlipX; + BoundSpriteRenderer.flipY = _initialFlipY; + } + } + + /// + /// On disable, + /// + public override void OnDisable() + { + _coroutine = null; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SpriteRenderer.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SpriteRenderer.cs.meta new file mode 100644 index 0000000..f4f09ea --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SpriteRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9722bddba2de794aa1baf2d5fa37d5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretch.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretch.cs new file mode 100644 index 0000000..cf2a18b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretch.cs @@ -0,0 +1,389 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Animations; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you modify the scale of an object on an axis while the other two axis (or only one) get automatically modified to conserve mass + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Squash and Stretch")] + [FeedbackHelp("This feedback will let you modify the scale of an object on an axis while the other two axis (or only one) get automatically modified to conserve mass.")] + public class MMF_SquashAndStretch : MMF_Feedback + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (SquashAndStretchTarget == null); } + public override string RequiredTargetText { get { return SquashAndStretchTarget != null ? SquashAndStretchTarget.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a SquashAndStretchTarget be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => SquashAndStretchTarget = FindAutomatedTarget(); + + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the possible modes this feedback can operate on + public enum Modes { Absolute, Additive, ToDestination } + /// the various axis on which to apply the squash and stretch + public enum PossibleAxis { XtoYZ, XtoY, XtoZ, YtoXZ, YtoX, YtoZ, ZtoXZ, ZtoX, ZtoY } + /// the possible timescales for the animation of the scale + public enum TimeScales { Scaled, Unscaled } + + [MMFInspectorGroup("Squash & Stretch", true, 54, true)] + + /// the object to animate + [Tooltip("the object to animate")] + public Transform SquashAndStretchTarget; + /// the mode this feedback should operate on + /// Absolute : follows the curve + /// Additive : adds to the current scale of the target + /// ToDestination : sets the scale to the destination target, whatever the current scale is + [Tooltip("the mode this feedback should operate on" + + "Absolute : follows the curve" + + "Additive : adds to the current scale of the target" + + "ToDestination : sets the scale to the destination target, whatever the current scale is")] + public Modes Mode = Modes.Absolute; + public PossibleAxis Axis = PossibleAxis.YtoXZ; + /// the duration of the animation + [Tooltip("the duration of the animation")] + public float AnimateScaleDuration = 0.2f; + /// the value to remap the curve's 0 value to + [Tooltip("the value to remap the curve's 0 value to")] + public float RemapCurveZero = 1f; + /// the value to remap the curve's 1 value to + [Tooltip("the value to remap the curve's 1 value to")] + [FormerlySerializedAs("Multiplier")] + public float RemapCurveOne = 2f; + /// how much should be added to the curve + [Tooltip("how much should be added to the curve")] + public float Offset = 0f; + /// the curve along which to animate the scale + [Tooltip("the curve along which to animate the scale")] + public AnimationCurve AnimateCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1.5f), new Keyframe(1, 0)); + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// if this is true, initial and destination scales will be recomputed on every play + [Tooltip("if this is true, initial and destination scales will be recomputed on every play")] + public bool DetermineScaleOnPlay = false; + /// the scale to reach when in ToDestination mode + [Tooltip("the scale to reach when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float DestinationScale = 2f; + + /// the duration of this feedback is the duration of the scale animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(AnimateScaleDuration); } set { AnimateScaleDuration = value; } } + public override bool HasRandomness => true; + + protected Vector3 _initialScale; + protected float _initialAxisScale; + protected Vector3 _newScale; + protected Coroutine _coroutine; + + /// + /// On init we store our initial scale + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active && (SquashAndStretchTarget != null)) + { + GetInitialScale(); + } + } + + /// + /// Stores initial scale for future use + /// + protected virtual void GetInitialScale() + { + _initialScale = SquashAndStretchTarget.localScale; + } + + protected virtual void GetAxisScale() + { + switch (Axis) + { + case PossibleAxis.XtoYZ: + _initialAxisScale = SquashAndStretchTarget.localScale.x; + break; + case PossibleAxis.XtoY: + _initialAxisScale = SquashAndStretchTarget.localScale.x; + break; + case PossibleAxis.XtoZ: + _initialAxisScale = SquashAndStretchTarget.localScale.x; + break; + case PossibleAxis.YtoXZ: + _initialAxisScale = SquashAndStretchTarget.localScale.y; + break; + case PossibleAxis.YtoX: + _initialAxisScale = SquashAndStretchTarget.localScale.y; + break; + case PossibleAxis.YtoZ: + _initialAxisScale = SquashAndStretchTarget.localScale.y; + break; + case PossibleAxis.ZtoXZ: + _initialAxisScale = SquashAndStretchTarget.localScale.z; + break; + case PossibleAxis.ZtoX: + _initialAxisScale = SquashAndStretchTarget.localScale.z; + break; + case PossibleAxis.ZtoY: + _initialAxisScale = SquashAndStretchTarget.localScale.z; + break; + } + } + + /// + /// On Play, triggers the scale animation + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (SquashAndStretchTarget == null)) + { + return; + } + + if (DetermineScaleOnPlay && NormalPlayDirection) + { + GetInitialScale(); + } + + GetAxisScale(); + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + if (Active || Owner.AutoPlayOnEnable) + { + if ((Mode == Modes.Absolute) || (Mode == Modes.Additive)) + { + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(AnimateScale(SquashAndStretchTarget, FeedbackDuration, AnimateCurve, Axis, RemapCurveZero, RemapCurveOne * intensityMultiplier)); + } + if (Mode == Modes.ToDestination) + { + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ScaleToDestination()); + } + } + } + + /// + /// An internal coroutine used to scale the target to its destination scale + /// + /// + protected virtual IEnumerator ScaleToDestination() + { + if (SquashAndStretchTarget == null) + { + yield break; + } + + if (FeedbackDuration == 0f) + { + yield break; + } + + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + + _initialScale = SquashAndStretchTarget.localScale; + _newScale = _initialScale; + GetAxisScale(); + IsPlaying = true; + + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float percent = Mathf.Clamp01(journey / FeedbackDuration); + + float newScale = Mathf.LerpUnclamped(_initialAxisScale, DestinationScale, AnimateCurve.Evaluate(percent) + Offset); + newScale = MMFeedbacksHelpers.Remap(newScale, 0f, 1f, RemapCurveZero, RemapCurveOne); + + ApplyScale(newScale); + + SquashAndStretchTarget.localScale = _newScale; + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + + yield return null; + } + + ApplyScale(DestinationScale); + SquashAndStretchTarget.localScale = NormalPlayDirection ? _newScale : _initialScale; + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// An internal coroutine used to animate the scale over time + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator AnimateScale(Transform targetTransform, float duration, AnimationCurve curve, PossibleAxis axis, float remapCurveZero = 0f, float remapCurveOne = 1f) + { + if (targetTransform == null) + { + yield break; + } + + if (duration == 0f) + { + yield break; + } + + float journey = NormalPlayDirection ? 0f : duration; + + _initialScale = targetTransform.localScale; + IsPlaying = true; + + while ((journey >= 0) && (journey <= duration) && (duration > 0)) + { + float percent = Mathf.Clamp01(journey / duration); + ComputeAndApplyScale(percent, curve, remapCurveZero, remapCurveOne, targetTransform); + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + + ComputeAndApplyScale(1f, curve, remapCurveZero, remapCurveOne, targetTransform); + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// Computes the new scale based on the current percent, and applies it to the transform + /// + /// + /// + /// + /// + /// + protected virtual void ComputeAndApplyScale(float percent, AnimationCurve curve, float remapCurveZero, float remapCurveOne, Transform targetTransform) + { + float newScale = curve.Evaluate(percent) + Offset; + newScale = MMFeedbacksHelpers.Remap(newScale, 0f, 1f, remapCurveZero, remapCurveOne); + if (Mode == Modes.Additive) + { + newScale += _initialAxisScale; + } + newScale = Mathf.Abs(newScale); + ApplyScale(newScale); + targetTransform.localScale = _newScale; + } + + /// + /// Applies the new scale on the selected axis + /// + /// + protected virtual void ApplyScale(float newScale) + { + float invertScale = 1 / Mathf.Sqrt(newScale); + switch (Axis) + { + case PossibleAxis.XtoYZ: + _newScale.x = newScale; + _newScale.y = invertScale; + _newScale.z = invertScale; + break; + case PossibleAxis.XtoY: + _newScale.x = newScale; + _newScale.y = invertScale; + _newScale.z = _initialScale.z; + break; + case PossibleAxis.XtoZ: + _newScale.x = newScale; + _newScale.y = _initialScale.y; + _newScale.z = invertScale; + break; + case PossibleAxis.YtoXZ: + _newScale.x = invertScale; + _newScale.y = newScale; + _newScale.z = invertScale; + break; + case PossibleAxis.YtoX: + _newScale.x = invertScale; + _newScale.y = newScale; + _newScale.z = _initialScale.z; + break; + case PossibleAxis.YtoZ: + _newScale.x = newScale; + _newScale.y = _initialScale.y; + _newScale.z = invertScale; + break; + case PossibleAxis.ZtoXZ: + _newScale.x = invertScale; + _newScale.y = invertScale; + _newScale.z = newScale; + break; + case PossibleAxis.ZtoX: + _newScale.x = invertScale; + _newScale.y = _initialScale.y; + _newScale.z = newScale; + break; + case PossibleAxis.ZtoY: + _newScale.x = _initialScale.x; + _newScale.y = invertScale; + _newScale.z = newScale; + break; + } + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && (_coroutine != null)) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + IsPlaying = false; + } + } + + /// + /// On disable we reset our coroutine + /// + public override void OnDisable() + { + _coroutine = null; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + SquashAndStretchTarget.localScale = _initialScale; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretch.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretch.cs.meta new file mode 100644 index 0000000..e71cfc6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c49da9accb2eb1440a67851db7465381 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretchSpring.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretchSpring.cs new file mode 100644 index 0000000..73d2a7f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretchSpring.cs @@ -0,0 +1,295 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.Scripting.APIUpdating; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you animate the scale of the target object over time, with a spring + squash and stretch effect + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Squash and Stretch Spring")] + [FeedbackHelp("This feedback will let you animate the scale of the target object over time, with a spring + squash and stretch effect")] + public class MMF_SquashAndStretchSpring : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (AnimateScaleTarget == null); } + public override string RequiredTargetText { get { return AnimateScaleTarget != null ? AnimateScaleTarget.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that an AnimateScaleTarget be set to be able to work properly. You can set one below."; } } + public override bool HasCustomInspectors { get { return true; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => AnimateScaleTarget = FindAutomatedTarget(); + /// the duration of this feedback is the duration of the scale animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasRandomness => true; + + public enum Modes { MoveTo, MoveToAdditive, Bump } + public enum PossibleAxis { XtoYZ, XtoY, XtoZ, YtoXZ, YtoX, YtoZ, ZtoXZ, ZtoX, ZtoY } + + [MMFInspectorGroup("Target", true, 12, true)] + /// the object to animate + [Tooltip("the object to animate")] + public Transform AnimateScaleTarget; + /// spring duration is determined by the spring (and could be impacted real time), so it's up to you to determine how long this feedback should last, from the point of view of its parent MMF Player + [Tooltip("spring duration is determined by the spring (and could be impacted real time), so it's up to you to determine how long this feedback should last, from the point of view of its parent MMF Player")] + public float DeclaredDuration = 0f; + /// the axis on which to operate squashing and stretching + [Tooltip("the axis on which to operate squashing and stretching")] + public PossibleAxis Axis = PossibleAxis.XtoYZ; + + [MMFInspectorGroup("Spring Settings", true, 18)] + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float Damping = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float Frequency = 6f; + + [MMFInspectorGroup("Spring Mode", true, 19)] + /// the chosen mode for this spring. MoveTo will move the target the specified scale (randomized between min and max). MoveToAdditive will add the specified scale (randomized between min and max) to the target's current scale. Bump will bump the target's scale by the specified power (randomized between min and max) + [Tooltip("the chosen mode for this spring. MoveTo will move the target the specified scale (randomized between min and max). MoveToAdditive will add the specified scale (randomized between min and max) to the target's current scale. Bump will bump the target's scale by the specified power (randomized between min and max)")] + public Modes Mode = Modes.Bump; + /// the min value from which to pick a random target value when in MoveTo or MoveToAdditive modes + [Tooltip("the min value from which to pick a random target value when in MoveTo or MoveToAdditive modes")] + [MMFEnumCondition("Mode", (int)Modes.MoveTo, (int)Modes.MoveToAdditive)] + public float MoveToMin = 1f; + /// the max value from which to pick a random target value when in MoveTo or MoveToAdditive modes + [Tooltip("the max value from which to pick a random target value when in MoveTo or MoveToAdditive modes")] + [MMFEnumCondition("Mode", (int)Modes.MoveTo, (int)Modes.MoveToAdditive)] + public float MoveToMax = 2f; + + /// the min value from which to pick a random bump amount when in Bump mode + [Tooltip("the min value from which to pick a random bump amount when in Bump mode")] + [MMFEnumCondition("Mode", (int)Modes.Bump)] + public float BumpScaleMin = 20f; + + /// the max value from which to pick a random bump amount when in Bump mode + [Tooltip("the max value from which to pick a random bump amount when in Bump mode")] + [MMFEnumCondition("Mode", (int)Modes.Bump)] + public float BumpScaleMax = 30f; + + protected float _currentValue = 0f; + protected float _targetValue = 0f; + protected float _velocity = 0f; + + protected virtual bool LowVelocity => Mathf.Abs(_velocity) < _velocityLowThreshold; + protected Coroutine _coroutine; + protected float _velocityLowThreshold = 0.001f; + + protected Vector3 _newScale; + protected Vector3 _initialScale; + + /// + /// On init we store our initial scale + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (Active && (AnimateScaleTarget != null)) + { + GetInitialValues(); + } + } + + /// + /// Stores initial scale for future use + /// + protected virtual void GetInitialValues() + { + _initialScale = AnimateScaleTarget.localScale; + _currentValue = AnimateScaleTarget.localScale.x; + _targetValue = _currentValue; + } + + /// + /// On Play, triggers the scale animation + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (AnimateScaleTarget == null)) + { + return; + } + + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + + switch (Mode) + { + case Modes.MoveTo: + _targetValue = Random.Range(MoveToMin, MoveToMax); + break; + case Modes.MoveToAdditive: + _targetValue += Random.Range(MoveToMin, MoveToMax); + break; + case Modes.Bump: + _velocity = Random.Range(BumpScaleMin, BumpScaleMax); + break; + } + _coroutine = Owner.StartCoroutine(Spring()); + } + + /// + /// a coroutine running on the Owner used to move the spring + /// + /// + protected virtual IEnumerator Spring() + { + IsPlaying = true; + UpdateSpring(); + while (!LowVelocity) + { + yield return null; + UpdateSpring(); + ApplyValue(); + } + + _velocity = 0f; + _currentValue = _targetValue; + ApplyValue(); + + IsPlaying = false; + } + + /// + /// Updates the spring's values + /// + protected virtual void UpdateSpring() + { + MMMaths.Spring(ref _currentValue, _targetValue, ref _velocity, Damping, Frequency, FeedbackDeltaTime); + ApplyValue(); + } + + /// + /// Applies the current spring value to the target + /// + protected virtual void ApplyValue() + { + float newValue = _currentValue; + float invertScale = 1 / Mathf.Sqrt(newValue); + switch (Axis) + { + case PossibleAxis.XtoYZ: + _newScale.x = newValue; + _newScale.y = invertScale; + _newScale.z = invertScale; + break; + case PossibleAxis.XtoY: + _newScale.x = newValue; + _newScale.y = invertScale; + _newScale.z = _initialScale.z; + break; + case PossibleAxis.XtoZ: + _newScale.x = newValue; + _newScale.y = _initialScale.y; + _newScale.z = invertScale; + break; + case PossibleAxis.YtoXZ: + _newScale.x = invertScale; + _newScale.y = newValue; + _newScale.z = invertScale; + break; + case PossibleAxis.YtoX: + _newScale.x = invertScale; + _newScale.y = newValue; + _newScale.z = _initialScale.z; + break; + case PossibleAxis.YtoZ: + _newScale.x = newValue; + _newScale.y = _initialScale.y; + _newScale.z = invertScale; + break; + case PossibleAxis.ZtoXZ: + _newScale.x = invertScale; + _newScale.y = invertScale; + _newScale.z = newValue; + break; + case PossibleAxis.ZtoX: + _newScale.x = invertScale; + _newScale.y = _initialScale.y; + _newScale.z = newValue; + break; + case PossibleAxis.ZtoY: + _newScale.x = _initialScale.x; + _newScale.y = invertScale; + _newScale.z = newValue; + break; + } + _newScale.x = Mathf.Abs(_newScale.x); + _newScale.y = Mathf.Abs(_newScale.y); + _newScale.z = Mathf.Abs(_newScale.z); + AnimateScaleTarget.localScale = _newScale; + } + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + IsPlaying = false; + _velocity = 0f; + _targetValue = _currentValue; + ApplyValue(); + } + + /// + /// Skips to the end, matching the target value + /// + /// + /// + protected override void CustomSkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized && (AnimateScaleTarget != null)) + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + _currentValue = _targetValue; + IsPlaying = false; + _velocity = 0f; + ApplyValue(); + } + } + + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _currentValue = _initialScale.x; + _targetValue = _currentValue; + ApplyValue(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretchSpring.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretchSpring.cs.meta new file mode 100644 index 0000000..6fc3e74 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_SquashAndStretchSpring.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb2e3394a85703748ad01e196cf50ee1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Text.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Text.cs new file mode 100644 index 0000000..50a7d82 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Text.cs @@ -0,0 +1,77 @@ +using UnityEngine; +using System.Collections; +#if MM_UI +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the contents of a target Text over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the contents of a target Text over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Text")] + public class MMF_Text : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public enum ColorModes { Instant, Gradient, Interpolate } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetText == null); } + public override string RequiredTargetText { get { return TargetText != null ? TargetText.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetText be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetText = FindAutomatedTarget(); + + [MMFInspectorGroup("Text", true, 76, true)] + /// the Text component to control + [Tooltip(" Text component to control")] + public Text TargetText; + /// the new text to replace the old one with + [Tooltip("the new text to replace the old one with")] + [TextArea] + public string NewText = "Hello World"; + + protected string _initialText; + + /// + /// On play we change the text of our target TMPText + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetText == null) + { + return; + } + + _initialText = TargetText.text; + TargetText.text = NewText; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetText.text = _initialText; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Text.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Text.cs.meta new file mode 100644 index 0000000..89878df --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Text.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6428d294fb684dc48917b398c67f178f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextColor.cs new file mode 100644 index 0000000..acc0978 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextColor.cs @@ -0,0 +1,200 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.Scripting.APIUpdating; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the color of a target Text over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the color of a target Text over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Text Color")] + public class MMF_TextColor : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public enum ColorModes { Instant, Gradient, Interpolate } + + /// the duration of this feedback is the duration of the color transition, or 0 if instant + public override float FeedbackDuration { get { return (ColorMode == ColorModes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetText == null); } + public override string RequiredTargetText { get { return TargetText != null ? TargetText.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetText be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 58, true)] + /// the Text component to control + [Tooltip(" Text component to control")] + public Text TargetText; + + [MMFInspectorGroup("Color", true, 36)] + /// the selected color mode : + /// None : nothing will happen, + /// gradient : evaluates the color over time on that gradient, from left to right, + /// interpolate : lerps from the current color to the destination one + [Tooltip("the selected color mode :" + + "None : nothing will happen," + + "gradient : evaluates the color over time on that gradient, from left to right," + + "interpolate : lerps from the current color to the destination one ")] + public ColorModes ColorMode = ColorModes.Interpolate; + /// how long the color of the text should change over time + [Tooltip("how long the color of the text should change over time")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate, (int)ColorModes.Gradient)] + public float Duration = 0.2f; + /// the color to apply + [Tooltip("the color to apply")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Instant)] + public Color InstantColor = Color.yellow; + /// the gradient to use to animate the color over time + [Tooltip("the gradient to use to animate the color over time")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Gradient)] + [GradientUsage(true)] + public Gradient ColorGradient; + /// the destination color when in interpolate mode + [Tooltip("the destination color when in interpolate mode")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate)] + public Color DestinationColor = Color.yellow; + /// the curve to use when interpolating towards the destination color + [Tooltip("the curve to use when interpolating towards the destination color")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate)] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + protected Color _initialColor; + protected Coroutine _coroutine; + + /// + /// On init we store our initial color + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (TargetText == null) + { + return; + } + + _initialColor = TargetText.color; + } + + /// + /// On Play we change our text's color + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetText == null)) + { + return; + } + + switch (ColorMode) + { + case ColorModes.Instant: + TargetText.color = InstantColor; + break; + case ColorModes.Gradient: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeColor()); + break; + case ColorModes.Interpolate: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeColor()); + break; + } + } + + /// + /// Changes the color of the text over time + /// + /// + protected virtual IEnumerator ChangeColor() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetColor(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetColor(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield break; + } + + /// + /// Applies the color change + /// + /// + protected virtual void SetColor(float time) + { + if (ColorMode == ColorModes.Gradient) + { + TargetText.color = ColorGradient.Evaluate(time); + } + else if (ColorMode == ColorModes.Interpolate) + { + float factor = ColorCurve.Evaluate(time); + TargetText.color = Color.LerpUnclamped(_initialColor, DestinationColor, factor); + } + } + + /// + /// Stops the coroutine if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active && (_coroutine != null)) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + TargetText.color = _initialColor; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextColor.cs.meta new file mode 100644 index 0000000..28c9173 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d7191dea72ef72449889a6e04ba83a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureOffset.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureOffset.cs new file mode 100644 index 0000000..a1621a0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureOffset.cs @@ -0,0 +1,232 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control the texture offset of a target material over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you control the texture offset of a target material over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/Texture Offset")] + public class MMF_TextureOffset : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.RendererColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRenderer == null); } + public override string RequiredTargetText { get { return TargetRenderer != null ? TargetRenderer.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRenderer be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetRenderer = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + + [MMFInspectorGroup("Texture Scale", true, 63, true)] + /// the renderer on which to change texture offset on + [Tooltip("the renderer on which to change texture offset on")] + public Renderer TargetRenderer; + /// the material index + [Tooltip("the material index")] + public int MaterialIndex = 0; + /// the property name, for example _MainTex_ST, or _MainTex if you don't have UseMaterialPropertyBlocks set to true + [Tooltip("the property name, for example _MainTex_ST, or _MainTex if you don't have UseMaterialPropertyBlocks set to true")] + public string MaterialPropertyName = "_MainTex_ST"; + /// whether the feedback should affect the material instantly or over a period of time + [Tooltip("whether the feedback should affect the material instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the material should change over time + [Tooltip("how long the material should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// whether or not the values should be relative + [Tooltip("whether or not the values should be relative")] + public bool RelativeValues = true; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// if this is true, this component will use material property blocks instead of working on an instance of the material. + [Tooltip("if this is true, this component will use material property blocks instead of working on an instance of the material.")] + public bool UseMaterialPropertyBlocks = false; + + [MMFInspectorGroup("Intensity", true, 65)] + /// the curve to tween the offset on + [Tooltip("the curve to tween the offset on")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public AnimationCurve OffsetCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the offset curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the offset curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapZero = Vector2.zero; + /// the value to remap the offset curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the offset curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapOne = Vector2.one; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Vector2 InstantOffset; + + protected Vector2 _initialValue; + protected Coroutine _coroutine; + protected Vector2 _newValue; + protected MaterialPropertyBlock _propertyBlock; + protected Vector4 _propertyBlockVector; + + /// the duration of this feedback is the duration of the transition + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasRandomness => true; + + /// + /// On init we store our initial texture offset + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (UseMaterialPropertyBlocks) + { + _propertyBlock = new MaterialPropertyBlock(); + TargetRenderer.GetPropertyBlock(_propertyBlock); + _propertyBlockVector.x = TargetRenderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).x; + _propertyBlockVector.y = TargetRenderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).y; + _initialValue.x = TargetRenderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).z; + _initialValue.y = TargetRenderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).w; + } + else + { + _initialValue = TargetRenderer.materials[MaterialIndex].GetTextureOffset(MaterialPropertyName); + } + } + + /// + /// On Play we initiate our offset change + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + switch (Mode) + { + case Modes.Instant: + ApplyValue(InstantOffset * intensityMultiplier); + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(TransitionCo(intensityMultiplier)); + break; + } + } + + /// + /// This coroutine will modify the offset value over time + /// + /// + protected virtual IEnumerator TransitionCo(float intensityMultiplier) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetMaterialValues(remappedTime, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetMaterialValues(FinalNormalizedTime, intensityMultiplier); + IsPlaying = false; + _coroutine = null; + yield return null; + } + + /// + /// Applies offset to the target material + /// + /// + protected virtual void SetMaterialValues(float time, float intensityMultiplier) + { + _newValue.x = MMFeedbacksHelpers.Remap(OffsetCurve.Evaluate(time), 0f, 1f, RemapZero.x, RemapOne.x); + _newValue.y = MMFeedbacksHelpers.Remap(OffsetCurve.Evaluate(time), 0f, 1f, RemapZero.y, RemapOne.y); + + if (RelativeValues) + { + _newValue += _initialValue; + } + + ApplyValue(_newValue * intensityMultiplier); + } + + /// + /// Applies the specified value to the material + /// + /// + protected virtual void ApplyValue(Vector2 newValue) + { + if (UseMaterialPropertyBlocks) + { + TargetRenderer.GetPropertyBlock(_propertyBlock); + _propertyBlockVector.z = newValue.x; + _propertyBlockVector.w = newValue.y; + _propertyBlock.SetVector(MaterialPropertyName, _propertyBlockVector); + TargetRenderer.SetPropertyBlock(_propertyBlock, MaterialIndex); + } + else + { + TargetRenderer.materials[MaterialIndex].SetTextureOffset(MaterialPropertyName, newValue); + } + } + + /// + /// Stops this feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + ApplyValue(_initialValue); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureOffset.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureOffset.cs.meta new file mode 100644 index 0000000..792edb8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureOffset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1649500b034fa9c4b8b816af28f3ff64 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureScale.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureScale.cs new file mode 100644 index 0000000..b487927 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureScale.cs @@ -0,0 +1,232 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control the texture scale of a target material over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you control the texture scale of a target material over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Renderer/Texture Scale")] + public class MMF_TextureScale : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.RendererColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRenderer == null); } + public override string RequiredTargetText { get { return TargetRenderer != null ? TargetRenderer.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRenderer be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetRenderer = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + + [MMFInspectorGroup("Texture Scale", true, 62, true)] + /// the renderer on which to change texture scale on + [Tooltip("the renderer on which to change texture scale on")] + public Renderer TargetRenderer; + /// the material index + [Tooltip("the material index")] + public int MaterialIndex = 0; + /// the property name, for example _MainTex_ST, or _MainTex if you don't have UseMaterialPropertyBlocks set to true + [Tooltip("the property name, for example _MainTex_ST, or _MainTex if you don't have UseMaterialPropertyBlocks set to true")] + public string MaterialPropertyName = "_MainTex_ST"; + /// whether the feedback should affect the material instantly or over a period of time + [Tooltip("whether the feedback should affect the material instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the material should change over time + [Tooltip("how long the material should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// whether or not the values should be relative + [Tooltip("whether or not the values should be relative")] + public bool RelativeValues = true; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// if this is true, this component will use material property blocks instead of working on an instance of the material. + [Tooltip("if this is true, this component will use material property blocks instead of working on an instance of the material.")] + public bool UseMaterialPropertyBlocks = false; + + [MMFInspectorGroup("Intensity", true, 64)] + /// the curve to tween the scale on + [Tooltip("the curve to tween the scale on")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public AnimationCurve ScaleCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the scale curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the scale curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapZero = Vector2.zero; + /// the value to remap the scale curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the scale curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapOne = Vector2.one; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Vector2 InstantScale; + + protected Vector2 _initialValue; + protected Coroutine _coroutine; + protected Vector2 _newValue; + protected MaterialPropertyBlock _propertyBlock; + protected Vector4 _propertyBlockVector; + + /// the duration of this feedback is the duration of the transition + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasRandomness => true; + + /// + /// On init we store our texture scale + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (UseMaterialPropertyBlocks) + { + _propertyBlock = new MaterialPropertyBlock(); + TargetRenderer.GetPropertyBlock(_propertyBlock); + _propertyBlockVector.x = TargetRenderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).w; + _propertyBlockVector.y = TargetRenderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).z; + _initialValue.x = TargetRenderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).x; + _initialValue.y = TargetRenderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).y; + } + else + { + _initialValue = TargetRenderer.materials[MaterialIndex].GetTextureScale(MaterialPropertyName); + } + } + + /// + /// On Play we modify our texture scale + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + switch (Mode) + { + case Modes.Instant: + ApplyValue(InstantScale * intensityMultiplier); + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(TransitionCo(intensityMultiplier)); + + break; + } + } + + /// + /// This coroutine will animate the target material's scale over time + /// + /// + protected virtual IEnumerator TransitionCo(float intensityMultiplier) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetMaterialValues(remappedTime, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetMaterialValues(FinalNormalizedTime, intensityMultiplier); + IsPlaying = true; + _coroutine = null; + yield return null; + } + + /// + /// Applies the scale to the target material + /// + /// + protected virtual void SetMaterialValues(float time, float intensityMultiplier) + { + _newValue.x = MMFeedbacksHelpers.Remap(ScaleCurve.Evaluate(time), 0f, 1f, RemapZero.x, RemapOne.x); + _newValue.y = MMFeedbacksHelpers.Remap(ScaleCurve.Evaluate(time), 0f, 1f, RemapZero.y, RemapOne.y); + + if (RelativeValues) + { + _newValue += _initialValue; + } + + ApplyValue(_newValue * intensityMultiplier); + } + + /// + /// Applies the specified value to the material + /// + /// + protected virtual void ApplyValue(Vector2 newValue) + { + if (UseMaterialPropertyBlocks) + { + TargetRenderer.GetPropertyBlock(_propertyBlock); + _propertyBlockVector.x = newValue.x; + _propertyBlockVector.y = newValue.y; + _propertyBlock.SetVector(MaterialPropertyName, _propertyBlockVector); + TargetRenderer.SetPropertyBlock(_propertyBlock, MaterialIndex); + } + else + { + TargetRenderer.materials[MaterialIndex].SetTextureScale(MaterialPropertyName, newValue); + } + } + + /// + /// Stops this feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + ApplyValue(_initialValue); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureScale.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureScale.cs.meta new file mode 100644 index 0000000..75d9844 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TextureScale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 447f85d5ac582a541bd440a4dcc469e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TimescaleModifier.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TimescaleModifier.cs new file mode 100644 index 0000000..5ac4748 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TimescaleModifier.cs @@ -0,0 +1,155 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback changes the timescale by sending a TimeScale event on play + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback triggers a MMTimeScaleEvent, which, if you have a MMTimeManager object in your scene, will be caught and used to modify the timescale according to the specified settings. These settings are the new timescale (0.5 will be twice slower than normal, 2 twice faster, etc), the duration of the timescale modification, and the optional speed at which to transition between normal and altered time scale.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Time/Timescale Modifier")] + public class MMF_TimescaleModifier : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// + /// The possible modes for this feedback : + /// - shake : changes the timescale for a certain duration + /// - change : sets the timescale to a new value, forever (until you change it again) + /// - reset : resets the timescale to its previous value + /// + public enum Modes { Shake, Change, Reset, Unfreeze } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TimeColor; } } + public override string RequiredTargetText { get { return Mode.ToString() + " x" + TimeScale ; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + [MMFInspectorGroup("Timescale Modifier", true, 63)] + /// the selected mode + [Tooltip("the selected mode : shake : changes the timescale for a certain duration" + + "- change : sets the timescale to a new value, forever (until you change it again)" + + "- reset : resets the timescale to its previous value")] + public Modes Mode = Modes.Shake; + + /// the new timescale to apply + [Tooltip("the new timescale to apply")] + public float TimeScale = 0.5f; + /// the duration of the timescale modification + [Tooltip("the duration of the timescale modification")] + [MMFEnumCondition("Mode", (int)Modes.Shake)] + public float TimeScaleDuration = 1f; + /// whether to reset the timescale on Stop or not + [Tooltip("whether to reset the timescale on Stop or not")] + public bool ResetTimescaleOnStop = false; + + [MMFInspectorGroup("Interpolation", true, 63)] + /// whether or not we should lerp the timescale + [Tooltip("whether or not we should lerp the timescale")] + public bool TimeScaleLerp = false; + /// whether to lerp over a set duration, or at a certain speed + [Tooltip("whether to lerp over a set duration, or at a certain speed")] + public MMTimeScaleLerpModes TimescaleLerpMode = MMTimeScaleLerpModes.Speed; + /// in Speed mode, the speed at which to lerp the timescale + [Tooltip("in Speed mode, the speed at which to lerp the timescale")] + [MMFEnumCondition("TimescaleLerpMode", (int)MMTimeScaleLerpModes.Speed)] + public float TimeScaleLerpSpeed = 1f; + /// in Duration mode, the curve to use to lerp the timescale + [Tooltip("in Duration mode, the curve to use to lerp the timescale")] + [MMFEnumCondition("TimescaleLerpMode", (int)MMTimeScaleLerpModes.Duration)] + public MMTweenType TimescaleLerpCurve = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// in Duration mode, the duration of the timescale interpolation, in unscaled time seconds + [Tooltip("in Duration mode, the duration of the timescale interpolation, in unscaled time seconds")] + [MMFEnumCondition("TimescaleLerpMode", (int)MMTimeScaleLerpModes.Duration)] + public float TimescaleLerpDuration = 1f; + /// whether or not we should lerp the timescale as it goes back to normal afterwards + [Tooltip("whether or not we should lerp the timescale as it goes back to normal afterwards")] + [MMFEnumCondition("TimescaleLerpMode", (int)MMTimeScaleLerpModes.Duration)] + public bool TimeScaleLerpOnReset = false; + /// in Duration mode, the curve to use to lerp the timescale + [Tooltip("in Duration mode, the curve to use to lerp the timescale")] + [MMFEnumCondition("TimescaleLerpMode", (int)MMTimeScaleLerpModes.Duration)] + public MMTweenType TimescaleLerpCurveOnReset = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// in Duration mode, the duration of the timescale interpolation, in unscaled time seconds + [Tooltip("in Duration mode, the duration of the timescale interpolation, in unscaled time seconds")] + [MMFEnumCondition("TimescaleLerpMode", (int)MMTimeScaleLerpModes.Duration)] + public float TimescaleLerpDurationOnReset = 1f; + + /// the duration of this feedback is the duration of the time modification + public override float FeedbackDuration { get { return ApplyTimeMultiplier(TimeScaleDuration); } set { TimeScaleDuration = value; } } + + /// + /// On Play, triggers a time scale event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + switch (Mode) + { + case Modes.Shake: + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.For, TimeScale, FeedbackDuration, TimeScaleLerp, TimeScaleLerpSpeed, false, TimescaleLerpMode, TimescaleLerpCurve, TimescaleLerpDuration, TimeScaleLerpOnReset, TimescaleLerpCurveOnReset, TimescaleLerpDurationOnReset); + break; + case Modes.Change: + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.For, TimeScale, 0f, TimeScaleLerp, TimeScaleLerpSpeed, true, TimescaleLerpMode, TimescaleLerpCurve, TimescaleLerpDuration, TimeScaleLerpOnReset, TimescaleLerpCurveOnReset, TimescaleLerpDurationOnReset); + break; + case Modes.Reset: + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.Reset, TimeScale, 0f, false, 0f, true); + break; + case Modes.Unfreeze: + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.Unfreeze, TimeScale, 0f, false, 0f, true); + break; + } + } + + /// + /// On stop, we reset timescale if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || !ResetTimescaleOnStop) + { + return; + } + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.Reset, TimeScale, 0f, false, 0f, true); + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.Reset, TimeScale, 0f, false, 0f, true); + } + + /// + /// Automatically adds a MMTimeManager to the scene + /// + public override void AutomaticShakerSetup() + { + (MMTimeManager timeManager, bool createdNew) = Owner.gameObject.MMFindOrCreateObjectOfType("MMTimeManager", null); + if (createdNew) + { + MMDebug.DebugLogInfo("Added a MMTimeManager to the scene. You're all set."); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TimescaleModifier.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TimescaleModifier.cs.meta new file mode 100644 index 0000000..75e3169 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_TimescaleModifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5de5c1aa74da1b742a5654a4e584f246 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_UnloadScene.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_UnloadScene.cs new file mode 100644 index 0000000..1aa3939 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_UnloadScene.cs @@ -0,0 +1,101 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.SceneManagement; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you unload a scene by name or build index + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you unload a scene by name or build index")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Scene/Unload Scene")] + public class MMF_UnloadScene : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public enum ColorModes { Instant, Gradient, Interpolate } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SceneColor; } } + + public override bool EvaluateRequiresSetup() + { + if (Method == Methods.BuildIndex) + { + return false; + + } + else if (Method == Methods.SceneName) + { + return ((SceneName == null) || (SceneName == "")); + } + return false; + } + public override string RequiredTargetText { get { return SceneName; } } + public override string RequiresSetupText { get { return "This feedback requires that you specify a SceneName below. Make sure you also add that destination scene to your Build Settings."; } } + #endif + + public enum Methods { BuildIndex, SceneName } + + [MMFInspectorGroup("Unload Scene", true, 43, false)] + + /// whether to unload a scene by build index or by name + [Tooltip("whether to unload a scene by build index or by name")] + public Methods Method = Methods.SceneName; + + /// the build ID of the scene to unload, find it in your Build Settings + [Tooltip("the build ID of the scene to unload, find it in your Build Settings")] + [MMFEnumCondition("Method", (int)Methods.BuildIndex)] + public int BuildIndex = 0; + + /// the name of the scene to unload + [Tooltip("the name of the scene to unload")] + [MMFEnumCondition("Method", (int)Methods.SceneName)] + public string SceneName = ""; + + + /// whether or not to output warnings if the scene doesn't exist or can't be loaded + [Tooltip("whether or not to output warnings if the scene doesn't exist or can't be loaded")] + public bool OutputWarningsIfNeeded = true; + + protected Scene _sceneToUnload; + + /// + /// On play we change the text of our target TMPText + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (Method == Methods.BuildIndex) + { + _sceneToUnload = SceneManager.GetSceneByBuildIndex(BuildIndex); + } + else + { + _sceneToUnload = SceneManager.GetSceneByName(SceneName); + } + + if ((_sceneToUnload != null) && (_sceneToUnload.isLoaded)) + { + SceneManager.UnloadSceneAsync(_sceneToUnload); + } + else + { + if (OutputWarningsIfNeeded) + { + Debug.LogWarning("Unload Scene Feedback : you're trying to unload a scene that hasn't been loaded."); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_UnloadScene.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_UnloadScene.cs.meta new file mode 100644 index 0000000..f5dd386 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_UnloadScene.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4709d37264c824e4ebdb775cd0902847 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_VideoPlayer.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_VideoPlayer.cs new file mode 100644 index 0000000..0c591f3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_VideoPlayer.cs @@ -0,0 +1,125 @@ +using UnityEngine; +using UnityEngine.Video; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control video players in all sorts of ways (Play, Pause, Toggle, Stop, Prepare, StepForward, StepBackward, SetPlaybackSpeed, SetDirectAudioVolume, SetDirectAudioMute, GoToFrame, ToggleLoop) + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control video players in all sorts of ways (Play, Pause, Toggle, Stop, Prepare, StepForward, StepBackward, SetPlaybackSpeed, SetDirectAudioVolume, SetDirectAudioMute, GoToFrame, ToggleLoop)")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("UI/Video Player")] + public class MMF_VideoPlayer : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public enum VideoActions { Play, Pause, Toggle, Stop, Prepare, StepForward, StepBackward, SetPlaybackSpeed, SetDirectAudioVolume, SetDirectAudioMute, GoToFrame, ToggleLoop } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetVideoPlayer == null); } + public override string RequiredTargetText { get { return TargetVideoPlayer != null ? TargetVideoPlayer.name + " " + VideoAction.ToString() : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetVideoPlayer be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetVideoPlayer = FindAutomatedTarget(); + + [MMFInspectorGroup("Video Player", true, 58, true)] + /// the Video Player to control with this feedback + [Tooltip("the Video Player to control with this feedback")] + public VideoPlayer TargetVideoPlayer; + /// the Video Player to control with this feedback + [Tooltip("the Video Player to control with this feedback")] + public VideoActions VideoAction = VideoActions.Pause; + /// the frame at which to jump when in GoToFrame mode + [Tooltip("the frame at which to jump when in GoToFrame mode")] + [MMFEnumCondition("VideoAction", (int)VideoActions.GoToFrame)] + public long TargetFrame = 10; + /// the new playback speed (between 0 and 10) + [Tooltip("the new playback speed (between 0 and 10)")] + [MMFEnumCondition("VideoAction", (int)VideoActions.SetPlaybackSpeed)] + public float PlaybackSpeed = 2f; + /// the track index on which to control volume + [Tooltip("the track index on which to control volume")] + [MMFEnumCondition("VideoAction", (int)VideoActions.SetDirectAudioMute, (int)VideoActions.SetDirectAudioVolume)] + public int TrackIndex = 0; + /// the new volume for the specified track, between 0 and 1 + [Tooltip("the new volume for the specified track, between 0 and 1")] + [MMFEnumCondition("VideoAction", (int)VideoActions.SetDirectAudioVolume)] + public float Volume = 1f; + /// whether to mute the track or not when that feedback plays + [Tooltip("whether to mute the track or not when that feedback plays")] + [MMFEnumCondition("VideoAction", (int)VideoActions.SetDirectAudioMute)] + public bool Mute = true; + + /// + /// On play we apply the selected command to our target video player + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetVideoPlayer == null) + { + return; + } + + switch (VideoAction) + { + case VideoActions.Play: + TargetVideoPlayer.Play(); + break; + case VideoActions.Pause: + TargetVideoPlayer.Pause(); + break; + case VideoActions.Toggle: + if (TargetVideoPlayer.isPlaying) + { + TargetVideoPlayer.Pause(); + } + else + { + TargetVideoPlayer.Play(); + } + break; + case VideoActions.Stop: + TargetVideoPlayer.Stop(); + break; + case VideoActions.Prepare: + TargetVideoPlayer.Prepare(); + break; + case VideoActions.StepForward: + TargetVideoPlayer.StepForward(); + break; + case VideoActions.StepBackward: + TargetVideoPlayer.Pause(); + TargetVideoPlayer.frame = TargetVideoPlayer.frame - 1; + break; + case VideoActions.SetPlaybackSpeed: + TargetVideoPlayer.playbackSpeed = PlaybackSpeed; + break; + case VideoActions.SetDirectAudioVolume: + TargetVideoPlayer.SetDirectAudioVolume((ushort)TrackIndex, Volume); + break; + case VideoActions.SetDirectAudioMute: + TargetVideoPlayer.SetDirectAudioMute((ushort)TrackIndex, Mute); + break; + case VideoActions.GoToFrame: + TargetVideoPlayer.frame = TargetFrame; + break; + case VideoActions.ToggleLoop: + TargetVideoPlayer.isLooping = !TargetVideoPlayer.isLooping; + break; + } + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_VideoPlayer.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_VideoPlayer.cs.meta new file mode 100644 index 0000000..658696e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_VideoPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 506d62157a9f2474f92cb4abb6666090 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Wiggle.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Wiggle.cs new file mode 100644 index 0000000..f2277ed --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Wiggle.cs @@ -0,0 +1,128 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// When played, this feedback will activate the Wiggle method of a MMWiggle object based on the selected settings, wiggling either its position, rotation, scale, or all of these. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you trigger position, rotation and/or scale wiggles on an object equipped with a MMWiggle component, for the specified durations.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Transform/Wiggle")] + public class MMF_Wiggle : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TransformColor; } } + public override bool EvaluateRequiresSetup() { return (TargetWiggle == null); } + public override string RequiredTargetText { get { return TargetWiggle != null ? TargetWiggle.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetWiggle be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetWiggle = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 54, true)] + /// the Wiggle component to target + [Tooltip("the Wiggle component to target")] + public MMWiggle TargetWiggle; + + [MMFInspectorGroup("Position", true, 55)] + /// whether or not to wiggle position + [Tooltip("whether or not to wiggle position")] + public bool WigglePosition = true; + /// the duration (in seconds) of the position wiggle + [Tooltip("the duration (in seconds) of the position wiggle")] + public float WigglePositionDuration; + + [MMFInspectorGroup("Rotation", true, 56)] + /// whether or not to wiggle rotation + [Tooltip("whether or not to wiggle rotation")] + public bool WiggleRotation; + /// the duration (in seconds) of the rotation wiggle + [Tooltip("the duration (in seconds) of the rotation wiggle")] + public float WiggleRotationDuration; + + [MMFInspectorGroup("Scale", true, 57)] + /// whether or not to wiggle scale + [Tooltip("whether or not to wiggle scale")] + public bool WiggleScale; + /// the duration (in seconds) of the scale wiggle + [Tooltip("the duration (in seconds) of the scale wiggle")] + public float WiggleScaleDuration; + + + /// the duration of this feedback is the duration of the clip being played + public override float FeedbackDuration + { + get { return Mathf.Max(ApplyTimeMultiplier(WigglePositionDuration), ApplyTimeMultiplier(WiggleRotationDuration), ApplyTimeMultiplier(WiggleScaleDuration)); } + set { WigglePositionDuration = value; + WiggleRotationDuration = value; + WiggleScaleDuration = value; + } + } + + /// + /// On Play we trigger the desired wiggles + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetWiggle == null)) + { + return; + } + + TargetWiggle.enabled = true; + if (WigglePosition) + { + TargetWiggle.PositionWiggleProperties.UseUnscaledTime = !InScaledTimescaleMode; + TargetWiggle.WigglePosition(ApplyTimeMultiplier(WigglePositionDuration)); + } + if (WiggleRotation) + { + TargetWiggle.RotationWiggleProperties.UseUnscaledTime = !InScaledTimescaleMode; + TargetWiggle.WiggleRotation(ApplyTimeMultiplier(WiggleRotationDuration)); + } + if (WiggleScale) + { + TargetWiggle.ScaleWiggleProperties.UseUnscaledTime = !InScaledTimescaleMode; + TargetWiggle.WiggleScale(ApplyTimeMultiplier(WiggleScaleDuration)); + } + } + + /// + /// On Stop we change the state of our object if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (TargetWiggle == null)) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + TargetWiggle.enabled = false; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + TargetWiggle.RestoreInitialValues(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Wiggle.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Wiggle.cs.meta new file mode 100644 index 0000000..321ef3e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Feedbacks/MMF_Wiggle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 037cbc62bd5d73b4fa2ca5ae37aba2da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText.meta new file mode 100644 index 0000000..28d9d04 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 062ad1f0041f2c041a1388803626e5ac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingText.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingText.cs new file mode 100644 index 0000000..6575e43 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingText.cs @@ -0,0 +1,358 @@ +using UnityEngine; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + /// + /// A class used to handle the movement and behaviour of floating texts, usually used to display damage text. + /// This is designed to be spawned by a MMFloatingTextSpawner, not used on its own. + /// It also requires a specific hierarchy. You'll find examples of it in the MMTools/Tools/MMFloatingText/Prefabs folder + /// + public class MMFloatingText : MonoBehaviour + { + [Header("Bindings")] + + /// the part of the prefab that we'll move + [Tooltip("the part of the prefab that we'll move")] + public Transform MovingPart; + /// the part of the prefab that we'll rotate to face the target camera + [Tooltip("the part of the prefab that we'll rotate to face the target camera")] + public Transform Billboard; + /// the TextMesh used to display the value + [Tooltip("the TextMesh used to display the value")] + public TextMesh TargetTextMesh; + + [Header("Debug")] + + /// the direction of this floating text, used for debug only + [Tooltip("the direction of this floating text, used for debug only")] + [MMReadOnly] + public Vector3 Direction = Vector3.up; + + protected bool _useUnscaledTime = false; + public virtual float GetTime() { return (_useUnscaledTime) ? Time.unscaledTime : Time.time; } + public virtual float GetDeltaTime() { return _useUnscaledTime ? Time.unscaledDeltaTime : Time.unscaledTime; } + + protected float _startedAt; + protected float _lifetime; + protected Vector3 _newPosition; + protected Color _initialTextColor; + protected bool _animateMovement; + protected bool _animateX; + protected AnimationCurve _animateXCurve; + protected float _remapXZero; + protected float _remapXOne; + protected bool _animateY; + protected AnimationCurve _animateYCurve; + protected float _remapYZero; + protected float _remapYOne; + protected bool _animateZ; + protected AnimationCurve _animateZCurve; + protected float _remapZZero; + protected float _remapZOne; + protected MMFloatingTextSpawner.AlignmentModes _alignmentMode; + protected Vector3 _fixedAlignment; + protected Vector3 _movementDirection; + protected Vector3 _movingPartPositionLastFrame; + protected bool _alwaysFaceCamera; + protected Camera _targetCamera; + protected Quaternion _targetCameraRotation; + protected bool _animateOpacity; + protected AnimationCurve _animateOpacityCurve; + protected float _remapOpacityZero; + protected float _remapOpacityOne; + protected bool _animateScale; + protected AnimationCurve _animateScaleCurve; + protected float _remapScaleZero; + protected float _remapScaleOne; + protected bool _animateColor; + protected Gradient _animateColorGradient; + protected Vector3 _newScale; + protected Color _newColor; + + protected float _elapsedTime; + protected float _remappedTime; + + /// + /// On enable, we initialize our floating text + /// + protected virtual void OnEnable() + { + Initialization(); + } + + /// + /// Changes whether or not this floating text should use unscaled time + /// + /// + public virtual void SetUseUnscaledTime(bool status, bool resetStartedAt) + { + _useUnscaledTime = status; + if (resetStartedAt) + { + _startedAt = GetTime(); + } + } + + /// + /// Stores start time and initial color + /// + protected virtual void Initialization() + { + _startedAt = GetTime(); + if (TargetTextMesh != null) + { + _initialTextColor = TargetTextMesh.color; + } + } + + /// + /// On Update we move our text + /// + protected virtual void Update() + { + UpdateFloatingText(); + } + + /// + /// Handles the text's life cycle, movement, scale, color, opacity, alignment and billboard + /// + protected virtual void UpdateFloatingText() + { + + _elapsedTime = GetTime() - _startedAt; + _remappedTime = MMMaths.Remap(_elapsedTime, 0f, _lifetime, 0f, 1f); + + // lifetime + if (_elapsedTime > _lifetime) + { + TurnOff(); + } + + HandleMovement(); + HandleColor(); + HandleOpacity(); + HandleScale(); + HandleAlignment(); + HandleBillboard(); + } + + /// + /// Moves the text along the specified curves + /// + protected virtual void HandleMovement() + { + // position movement + if (_animateMovement) + { + this.transform.up = Direction; + + _newPosition.x = _animateX ? MMMaths.Remap(_animateXCurve.Evaluate(_remappedTime), 0f, 1, _remapXZero, _remapXOne) : 0f; + _newPosition.y = _animateY ? MMMaths.Remap(_animateYCurve.Evaluate(_remappedTime), 0f, 1, _remapYZero, _remapYOne) : 0f; + _newPosition.z = _animateZ ? MMMaths.Remap(_animateZCurve.Evaluate(_remappedTime), 0f, 1, _remapZZero, _remapZOne) : 0f; + + // we move the moving part + MovingPart.transform.localPosition = _newPosition; + + // we store the last position + if (Vector3.Distance(_movingPartPositionLastFrame, MovingPart.position) > 0.5f) + { + _movingPartPositionLastFrame = MovingPart.position; + } + } + } + + /// + /// Animates the text's color over the specified gradient + /// + protected virtual void HandleColor() + { + if (_animateColor) + { + _newColor = _animateColorGradient.Evaluate(_remappedTime); + SetColor(_newColor); + } + } + + /// + /// Animates the text's opacity over the specified curve + /// + protected virtual void HandleOpacity() + { + if (_animateOpacity) + { + float newOpacity = MMMaths.Remap(_animateOpacityCurve.Evaluate(_remappedTime), 0f, 1f, _remapOpacityZero, _remapOpacityOne); + SetOpacity(newOpacity); + } + } + + /// + /// Animates the text's scale over the specified curve + /// + protected virtual void HandleScale() + { + if (_animateScale) + { + _newScale = Vector3.one * MMMaths.Remap(_animateScaleCurve.Evaluate(_remappedTime), 0f, 1f, _remapScaleZero, _remapScaleOne); + MovingPart.transform.localScale = _newScale; + } + } + + /// + /// Handles text rotation to match either a fixed alignment, the initial direction or the movement's direction + /// + protected virtual void HandleAlignment() + { + if (_alignmentMode == MMFloatingTextSpawner.AlignmentModes.Fixed) + { + MovingPart.transform.up = _fixedAlignment; + } + else if (_alignmentMode == MMFloatingTextSpawner.AlignmentModes.MatchInitialDirection) + { + MovingPart.transform.up = this.transform.up; + } + else if (_alignmentMode == MMFloatingTextSpawner.AlignmentModes.MatchMovementDirection) + { + _movementDirection = MovingPart.position - _movingPartPositionLastFrame; + MovingPart.transform.up = _movementDirection.normalized; + } + } + + /// + /// Forces the text to face the camera + /// + protected virtual void HandleBillboard() + { + if (_alwaysFaceCamera) + { + _targetCameraRotation = _targetCamera.transform.rotation; + Billboard.transform.LookAt(MovingPart.transform.position + _targetCameraRotation * Vector3.forward, _targetCameraRotation * MovingPart.up); + } + } + + /// + /// Called by the spawner, sets all required variables + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public virtual void SetProperties(string value, float lifetime, Vector3 direction, bool animateMovement, + MMFloatingTextSpawner.AlignmentModes alignmentMode, Vector3 fixedAlignment, + bool alwaysFaceCamera, Camera targetCamera, + bool animateX, AnimationCurve animateXCurve, float remapXZero, float remapXOne, + bool animateY, AnimationCurve animateYCurve, float remapYZero, float remapYOne, + bool animateZ, AnimationCurve animateZCurve, float remapZZero, float remapZOne, + bool animateOpacity, AnimationCurve animateOpacityCurve, float remapOpacityZero, float remapOpacityOne, + bool animateScale, AnimationCurve animateScaleCurve, float remapScaleZero, float remapScaleOne, + bool animateColor, Gradient animateColorGradient) + { + SetText(value); + _lifetime = lifetime; + Direction = direction; + _animateMovement = animateMovement; + _animateX = animateX; + _animateXCurve = animateXCurve; + _remapXZero = remapXZero; + _remapXOne = remapXOne; + _animateY = animateY; + _animateYCurve = animateYCurve; + _remapYZero = remapYZero; + _remapYOne = remapYOne; + _animateZ = animateZ; + _animateZCurve = animateZCurve; + _remapZZero = remapZZero; + _remapZOne = remapZOne; + _alignmentMode = alignmentMode; + _fixedAlignment = fixedAlignment; + _alwaysFaceCamera = alwaysFaceCamera; + _targetCamera = targetCamera; + _animateOpacity = animateOpacity; + _animateOpacityCurve = animateOpacityCurve; + _remapOpacityZero = remapOpacityZero; + _remapOpacityOne = remapOpacityOne; + _animateScale = animateScale; + _animateScaleCurve = animateScaleCurve; + _remapScaleZero = remapScaleZero; + _remapScaleOne = remapScaleOne; + _animateColor = animateColor; + _animateColorGradient = animateColorGradient; + UpdateFloatingText(); + } + + /// + /// Resets this text's position + /// + public virtual void ResetPosition() + { + if (_animateMovement) + { + MovingPart.transform.localPosition = Vector3.zero; + } + _movingPartPositionLastFrame = MovingPart.position - Direction; + } + + /// + /// Sets the target mesh's text value + /// + /// + public virtual void SetText(string newValue) + { + TargetTextMesh.text = newValue; + } + + /// + /// Sets the color of the target text + /// + /// + public virtual void SetColor(Color newColor) + { + TargetTextMesh.color = newColor; + } + + /// + /// Sets the opacity of the target text + /// + /// + public virtual void SetOpacity(float newOpacity) + { + _newColor = TargetTextMesh.color; + _newColor.a = newOpacity; + TargetTextMesh.color = _newColor; + } + + /// + /// Turns of the text for recycling + /// + protected virtual void TurnOff() + { + this.gameObject.SetActive(false); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingText.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingText.cs.meta new file mode 100644 index 0000000..f47dd50 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bae8ea1d0fd577d4b8a4adf809027eee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingTextSpawner.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingTextSpawner.cs new file mode 100644 index 0000000..44b9692 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingTextSpawner.cs @@ -0,0 +1,565 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + #region Events + /// + /// An event used (usually by feedbacks) to trigger the spawn of a new floating text + /// + public struct MMFloatingTextSpawnEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(MMChannelData channelData, Vector3 spawnPosition, string value, Vector3 direction, float intensity, + bool forceLifetime = false, float lifetime = 1f, bool forceColor = false, Gradient animateColorGradient = null, bool useUnscaledTime = false); + static public void Trigger(MMChannelData channelData, Vector3 spawnPosition, string value, Vector3 direction, float intensity, + bool forceLifetime = false, float lifetime = 1f, bool forceColor = false, Gradient animateColorGradient = null, bool useUnscaledTime = false) + { + OnEvent?.Invoke(channelData, spawnPosition, value, direction, intensity, forceLifetime, lifetime, forceColor, animateColorGradient, useUnscaledTime); + } + } + #endregion + + /// + /// This class will let you pool, recycle and spawn floating texts, usually to show damage info. + /// It requires as input a MMFloatingText object. + /// + public class MMFloatingTextSpawner : MMMonoBehaviour + { + /// whether to spawn a single prefab or one at random + public enum PoolerModes { Simple, Multiple } + /// whether the spawned text should have a fixed alignment, orient to match the initial spawn direction, or its movement curve + public enum AlignmentModes { Fixed, MatchInitialDirection, MatchMovementDirection } + + [MMInspectorGroup("General Settings", true, 10)] + + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + /// whether or not this spawner can spawn at this time + [Tooltip("whether or not this spawner can spawn at this time")] + public bool CanSpawn = true; + /// whether or not this spawner should spawn objects on unscaled time + [Tooltip("whether or not this spawner should spawn objects on unscaled time")] + public bool UseUnscaledTime = false; + + [MMInspectorGroup("Pooler", true, 24)] + + /// the selected pooler mode (single prefab or multiple ones) + [Tooltip("the selected pooler mode (single prefab or multiple ones)")] + public PoolerModes PoolerMode = PoolerModes.Simple; + /// the prefab to spawn (ignored if in multiple mode) + [Tooltip("the prefab to spawn (ignored if in multiple mode)")] + public MMFloatingText PooledSimpleMMFloatingText; + /// the prefabs to spawn (ignored if in simple mode) + [Tooltip("the prefabs to spawn (ignored if in simple mode)")] + public List PooledMultipleMMFloatingText; + /// the amount of objects to pool to avoid having to instantiate them at runtime. Should be bigger than the max amount of texts you plan on having on screen at any given moment + [Tooltip("the amount of objects to pool to avoid having to instantiate them at runtime. Should be bigger than the max amount of texts you plan on having on screen at any given moment")] + public int PoolSize = 20; + /// whether or not to nest the waiting pools + [Tooltip("whether or not to nest the waiting pools")] + public bool NestWaitingPool = true; + /// whether or not to mutualize the waiting pools + [Tooltip("whether or not to mutualize the waiting pools")] + public bool MutualizeWaitingPools = true; + /// whether or not the text pool can expand if the pool is empty + [Tooltip("whether or not the text pool can expand if the pool is empty")] + public bool PoolCanExpand = true; + + [MMInspectorGroup("Spawn Settings", true, 14)] + + /// the random min and max lifetime duration for the spawned texts (in seconds) + [Tooltip("the random min and max lifetime duration for the spawned texts (in seconds)")] + [MMVector("Min", "Max")] + public Vector2 Lifetime = Vector2.one; + + [Header("Spawn Position Offset")] + /// the random min position at which to spawn the text, relative to its intended spawn position + [Tooltip("the random min position at which to spawn the text, relative to its intended spawn position")] + public Vector3 SpawnOffsetMin = Vector3.zero; + /// the random max position at which to spawn the text, relative to its intended spawn position + [Tooltip("the random max position at which to spawn the text, relative to its intended spawn position")] + public Vector3 SpawnOffsetMax = Vector3.zero; + + [MMInspectorGroup("Animate Position", true, 15)] + + [Header("Movement")] + + /// whether or not to animate the movement of spawned texts + [Tooltip("whether or not to animate the movement of spawned texts")] + public bool AnimateMovement = true; + /// whether or not to animate the X movement of spawned texts + [Tooltip("whether or not to animate the X movement of spawned texts")] + public bool AnimateX = false; + /// the value to which the x movement curve's zero should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to which the x movement curve's zero should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMCondition("AnimateX", true)] + [MMVector("Min", "Max")] + public Vector2 RemapXZero = Vector2.zero; + /// the value to which the x movement curve's one should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to which the x movement curve's one should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMCondition("AnimateX", true)] + [MMVector("Min", "Max")] + public Vector2 RemapXOne = Vector2.one; + /// the curve on which to animate the x movement + [Tooltip("the curve on which to animate the x movement")] + [MMCondition("AnimateX", true)] + public AnimationCurve AnimateXCurve = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f)); + /// whether or not to animate the Y movement of spawned texts + [Tooltip("whether or not to animate the Y movement of spawned texts")] + public bool AnimateY = true; + /// the value to which the y movement curve's zero should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to which the y movement curve's zero should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMCondition("AnimateY", true)] + [MMVector("Min", "Max")] + public Vector2 RemapYZero = Vector2.zero; + /// the value to which the y movement curve's one should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to which the y movement curve's one should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMCondition("AnimateY", true)] + [MMVector("Min", "Max")] + public Vector2 RemapYOne = new Vector2(5f, 5f); + /// the curve on which to animate the y movement + [Tooltip("the curve on which to animate the y movement")] + [MMCondition("AnimateY", true)] + public AnimationCurve AnimateYCurve = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f)); + /// whether or not to animate the Z movement of spawned texts + [Tooltip("whether or not to animate the Z movement of spawned texts")] + public bool AnimateZ = false; + /// the value to which the z movement curve's zero should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to which the z movement curve's zero should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMCondition("AnimateZ", true)] + [MMVector("Min", "Max")] + public Vector2 RemapZZero = Vector2.zero; + /// the value to which the z movement curve's one should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to which the z movement curve's one should be remapped to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMCondition("AnimateZ", true)] + [MMVector("Min", "Max")] + public Vector2 RemapZOne = Vector2.one; + /// the curve on which to animate the z movement + [Tooltip("the curve on which to animate the z movement")] + [MMCondition("AnimateZ", true)] + public AnimationCurve AnimateZCurve = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f)); + + [MMInspectorGroup("Facing Directions", true, 16)] + + [Header("Alignment")] + + /// the selected alignment mode (whether the spawned text should have a fixed alignment, orient to match the initial spawn direction, or its movement curve) + [Tooltip("the selected alignment mode (whether the spawned text should have a fixed alignment, orient to match the initial spawn direction, or its movement curve)")] + public AlignmentModes AlignmentMode = AlignmentModes.Fixed; + /// when in fixed mode, the direction in which to keep the spawned texts + [Tooltip("when in fixed mode, the direction in which to keep the spawned texts")] + [MMEnumCondition("AlignmentMode", (int)AlignmentModes.Fixed)] + public Vector3 FixedAlignment = Vector3.up; + + [Header("Billboard")] + + /// whether or not spawned texts should always face the camera + [Tooltip("whether or not spawned texts should always face the camera")] + public bool AlwaysFaceCamera; + /// whether or not this spawner should automatically grab the main camera on start + [Tooltip("whether or not this spawner should automatically grab the main camera on start")] + [MMCondition("AlwaysFaceCamera", true)] + public bool AutoGrabMainCameraOnStart = true; + /// if not in auto grab mode, the camera to use for billboards + [Tooltip("if not in auto grab mode, the camera to use for billboards")] + [MMCondition("AlwaysFaceCamera", true)] + public Camera TargetCamera; + + [MMInspectorGroup("Animate Scale", true, 46)] + + /// whether or not to animate the scale of spawned texts + [Tooltip("whether or not to animate the scale of spawned texts")] + public bool AnimateScale = true; + /// the value to which the scale curve's zero should be remapped to + [Tooltip("the value to which the scale curve's zero should be remapped to")] + [MMCondition("AnimateScale", true)] + public Vector2 RemapScaleZero = Vector2.zero; + /// the value to which the scale curve's one should be remapped to + [Tooltip("the value to which the scale curve's one should be remapped to")] + [MMCondition("AnimateScale", true)] + public Vector2 RemapScaleOne = Vector2.one; + /// the curve on which to animate the scale + [Tooltip("the curve on which to animate the scale")] + [MMCondition("AnimateScale", true)] + public AnimationCurve AnimateScaleCurve = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(0.15f, 1f), new Keyframe(0.85f, 1f), new Keyframe(1f, 0f)); + + [MMInspectorGroup("Animate Color", true, 55)] + + /// whether or not to animate the spawned text's color over time + [Tooltip("whether or not to animate the spawned text's color over time")] + public bool AnimateColor = false; + /// the gradient over which to animate the spawned text's color over time + [Tooltip("the gradient over which to animate the spawned text's color over time")] + [GradientUsage(true)] + public Gradient AnimateColorGradient = new Gradient(); + + [MMInspectorGroup("Animate Opacity", true, 45)] + + /// whether or not to animate the opacity of the spawned texts + [Tooltip("whether or not to animate the opacity of the spawned texts")] + public bool AnimateOpacity = true; + /// the value to which the opacity curve's zero should be remapped to + [Tooltip("the value to which the opacity curve's zero should be remapped to")] + [MMCondition("AnimateOpacity", true)] + public Vector2 RemapOpacityZero = Vector2.zero; + /// the value to which the opacity curve's one should be remapped to + [Tooltip("the value to which the opacity curve's one should be remapped to")] + [MMCondition("AnimateOpacity", true)] + public Vector2 RemapOpacityOne = Vector2.one; + /// the curve on which to animate the opacity + [Tooltip("the curve on which to animate the opacity")] + [MMCondition("AnimateOpacity", true)] + public AnimationCurve AnimateOpacityCurve = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(0.2f, 1f), new Keyframe(0.8f, 1f), new Keyframe(1f, 0f)); + + [MMInspectorGroup("Intensity Multipliers", true, 45)] + + /// whether or not the intensity multiplier should impact lifetime + [Tooltip("whether or not the intensity multiplier should impact lifetime")] + public bool IntensityImpactsLifetime = false; + /// when getting an intensity multiplier, the value by which to multiply the lifetime + [Tooltip("when getting an intensity multiplier, the value by which to multiply the lifetime")] + [MMCondition("IntensityImpactsLifetime", true)] + public float IntensityLifetimeMultiplier = 1f; + /// whether or not the intensity multiplier should impact movement + [Tooltip("whether or not the intensity multiplier should impact movement")] + public bool IntensityImpactsMovement = false; + /// when getting an intensity multiplier, the value by which to multiply the movement values + [Tooltip("when getting an intensity multiplier, the value by which to multiply the movement values")] + [MMCondition("IntensityImpactsMovement", true)] + public float IntensityMovementMultiplier = 1f; + /// whether or not the intensity multiplier should impact scale + [Tooltip("whether or not the intensity multiplier should impact scale")] + public bool IntensityImpactsScale = false; + /// when getting an intensity multiplier, the value by which to multiply the scale values + [Tooltip("when getting an intensity multiplier, the value by which to multiply the scale values")] + [MMCondition("IntensityImpactsScale", true)] + public float IntensityScaleMultiplier = 1f; + + [MMInspectorGroup("Debug", true, 12)] + + /// a random value to display when pressing the TestSpawnOne button + [Tooltip("a random value to display when pressing the TestSpawnOne button")] + public Vector2Int DebugRandomValue = new Vector2Int(100, 500); + /// the min and max bounds within which to pick a value to output when pressing the TestSpawnMany button + [Tooltip("the min and max bounds within which to pick a value to output when pressing the TestSpawnMany button")] + [MMVector("Min", "Max")] + public Vector2 DebugInterval = new Vector2(0.3f, 0.5f); + /// a button used to test the spawn of one text + [Tooltip("a button used to test the spawn of one text")] + [MMInspectorButton("TestSpawnOne")] + public bool TestSpawnOneBtn; + /// a button used to start/stop the spawn of texts at regular intervals + [Tooltip("a button used to start/stop the spawn of texts at regular intervals")] + [MMInspectorButton("TestSpawnMany")] + public bool TestSpawnManyBtn; + + protected MMObjectPooler _pooler; + protected MMFloatingText _floatingText; + protected Coroutine _testSpawnCoroutine; + + protected float _lifetime; + protected float _speed; + protected Vector3 _spawnOffset; + protected Vector3 _direction; + protected Gradient _colorGradient; + protected bool _animateColor; + + #region Initialization + + /// + /// On awake we initialize our spawner + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// On Start we grab our main camera if needed + /// + protected virtual void Start() + { + GrabMainCamera(); + } + + /// + /// On init, we instantiate our object pool and grab the main camera + /// + protected virtual void Initialization() + { + InstantiateObjectPool(); + } + + /// + /// Instantiates the specified type of object pool + /// + protected virtual void InstantiateObjectPool() + { + if (_pooler == null) + { + if (PoolerMode == PoolerModes.Simple) + { + InstantiateSimplePool(); + } + else + { + InstantiateMultiplePool(); + } + } + } + + /// + /// Instantiates a simple object pooler and sets it up + /// + protected virtual void InstantiateSimplePool() + { + if (PooledSimpleMMFloatingText == null) + { + Debug.LogError(this.name + " : no PooledSimpleMMFloatingText prefab has been set."); + return; + } + GameObject newPooler = new GameObject(); + SceneManager.MoveGameObjectToScene(newPooler, this.gameObject.scene); + newPooler.name = PooledSimpleMMFloatingText.name + "_Pooler"; + newPooler.transform.SetParent(this.transform); + MMSimpleObjectPooler simplePooler = newPooler.AddComponent(); + simplePooler.PoolSize = PoolSize; + simplePooler.GameObjectToPool = PooledSimpleMMFloatingText.gameObject; + simplePooler.NestWaitingPool = NestWaitingPool; + simplePooler.MutualizeWaitingPools = MutualizeWaitingPools; + simplePooler.PoolCanExpand = PoolCanExpand; + simplePooler.FillObjectPool(); + _pooler = simplePooler; + } + + /// + /// Instantiates a multiple object pooler and sets it up + /// + protected virtual void InstantiateMultiplePool() + { + GameObject newPooler = new GameObject(); + SceneManager.MoveGameObjectToScene(newPooler, this.gameObject.scene); + newPooler.name = this.name + "_Pooler"; + newPooler.transform.SetParent(this.transform); + MMMultipleObjectPooler multiplePooler = newPooler.AddComponent(); + multiplePooler.Pool = new List(); + foreach (MMFloatingText obj in PooledMultipleMMFloatingText) + { + MMMultipleObjectPoolerObject item = new MMMultipleObjectPoolerObject(); + item.GameObjectToPool = obj.gameObject; + item.PoolCanExpand = PoolCanExpand; + item.PoolSize = PoolSize; + item.Enabled = true; + multiplePooler.Pool.Add(item); + } + multiplePooler.NestWaitingPool = NestWaitingPool; + multiplePooler.MutualizeWaitingPools = MutualizeWaitingPools; + multiplePooler.FillObjectPool(); + _pooler = multiplePooler; + } + + /// + /// Grabs the main camera if needed + /// + protected virtual void GrabMainCamera() + { + if (AutoGrabMainCameraOnStart) + { + TargetCamera = Camera.main; + } + } + + #endregion + + /// + /// Spawns a new floating text + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual void Spawn(string value, Vector3 position, Vector3 direction, float intensity = 1f, + bool forceLifetime = false, float lifetime = 1f, bool forceColor = false, Gradient animateColorGradient = null) + { + if (!CanSpawn) + { + return; + } + + _direction = (direction != Vector3.zero) ? direction + this.transform.up : this.transform.up; + + this.transform.position = position; + + GameObject nextGameObject = _pooler.GetPooledGameObject(); + + float lifetimeMultiplier = IntensityImpactsLifetime ? intensity * IntensityLifetimeMultiplier : 1f; + float movementMultiplier = IntensityImpactsMovement ? intensity * IntensityMovementMultiplier : 1f; + float scaleMultiplier = IntensityImpactsScale ? intensity * IntensityScaleMultiplier : 1f; + + _lifetime = UnityEngine.Random.Range(Lifetime.x, Lifetime.y) * lifetimeMultiplier; + _spawnOffset = MMMaths.RandomVector3(SpawnOffsetMin, SpawnOffsetMax); + _animateColor = AnimateColor; + _colorGradient = AnimateColorGradient; + + float remapXZero = UnityEngine.Random.Range(RemapXZero.x, RemapXZero.y); + float remapXOne = UnityEngine.Random.Range(RemapXOne.x, RemapXOne.y) * movementMultiplier; + float remapYZero = UnityEngine.Random.Range(RemapYZero.x, RemapYZero.y); + float remapYOne = UnityEngine.Random.Range(RemapYOne.x, RemapYOne.y) * movementMultiplier; + float remapZZero = UnityEngine.Random.Range(RemapZZero.x, RemapZZero.y); + float remapZOne = UnityEngine.Random.Range(RemapZOne.x, RemapZOne.y) * movementMultiplier; + float remapOpacityZero = UnityEngine.Random.Range(RemapOpacityZero.x, RemapOpacityZero.y); + float remapOpacityOne = UnityEngine.Random.Range(RemapOpacityOne.x, RemapOpacityOne.y); + float remapScaleZero = UnityEngine.Random.Range(RemapScaleZero.x, RemapOpacityZero.y); + float remapScaleOne = UnityEngine.Random.Range(RemapScaleOne.x, RemapScaleOne.y) * scaleMultiplier; + + if (forceLifetime) + { + _lifetime = lifetime; + } + + if (forceColor) + { + _animateColor = true; + _colorGradient = animateColorGradient; + } + + // mandatory checks + if (nextGameObject==null) { return; } + + // we activate the object + nextGameObject.gameObject.SetActive(true); + nextGameObject.gameObject.MMGetComponentNoAlloc().TriggerOnSpawnComplete(); + + // we position the object + nextGameObject.transform.position = this.transform.position + _spawnOffset; + + _floatingText = nextGameObject.MMGetComponentNoAlloc(); + _floatingText.SetUseUnscaledTime(UseUnscaledTime, true); + _floatingText.ResetPosition(); + _floatingText.SetProperties(value, _lifetime, _direction, AnimateMovement, + AlignmentMode, FixedAlignment, AlwaysFaceCamera, TargetCamera, + AnimateX, AnimateXCurve, remapXZero, remapXOne, + AnimateY, AnimateYCurve, remapYZero, remapYOne, + AnimateZ, AnimateZCurve, remapZZero, remapZOne, + AnimateOpacity, AnimateOpacityCurve, remapOpacityZero, remapOpacityOne, + AnimateScale, AnimateScaleCurve, remapScaleZero, remapScaleOne, + _animateColor, _colorGradient); + } + + /// + /// When we get a floating text event on this spawner's Channel, we spawn a new floating text + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMFloatingTextSpawnEvent(MMChannelData channelData, Vector3 spawnPosition, string value, Vector3 direction, float intensity, + bool forceLifetime = false, float lifetime = 1f, bool forceColor = false, Gradient animateColorGradient = null, bool useUnscaledTime = false) + { + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return; + } + + UseUnscaledTime = useUnscaledTime; + Spawn(value, spawnPosition, direction, intensity, forceLifetime, lifetime, forceColor, animateColorGradient); + } + + /// + /// On enable we start listening for floating text events + /// + protected virtual void OnEnable() + { + MMFloatingTextSpawnEvent.Register(OnMMFloatingTextSpawnEvent); + } + + /// + /// On disable we stop listening for floating text events + /// + protected virtual void OnDisable() + { + MMFloatingTextSpawnEvent.Unregister(OnMMFloatingTextSpawnEvent); + } + + // Test methods ---------------------------------------------------------------------------------------- + + #region TestMethods + + /// + /// A test method that spawns one floating text + /// + protected virtual void TestSpawnOne() + { + string test = UnityEngine.Random.Range(DebugRandomValue.x, DebugRandomValue.y).ToString(); + Spawn(test, this.transform.position, Vector3.zero); + } + + /// + /// A method used to start/stop the regular spawning of debug floating texts + /// + protected virtual void TestSpawnMany() + { + if (_testSpawnCoroutine == null) + { + _testSpawnCoroutine = StartCoroutine(TestSpawnManyCo()); + } + else + { + StopCoroutine(_testSpawnCoroutine); + _testSpawnCoroutine = null; + } + } + + /// + /// A coroutine used to spawn debug floating texts until stopped + /// + /// + protected virtual IEnumerator TestSpawnManyCo() + { + float lastSpawnAt = Time.time; + float interval = UnityEngine.Random.Range(DebugInterval.x, DebugInterval.y); + while (true) + { + if (Time.time - lastSpawnAt > interval) + { + TestSpawnOne(); + lastSpawnAt = Time.time; + interval = UnityEngine.Random.Range(DebugInterval.x, DebugInterval.y); + } + yield return null; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingTextSpawner.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingTextSpawner.cs.meta new file mode 100644 index 0000000..4410926 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/MMFloatingTextSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca323e22713fb3a40af2f80e436eb449 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs.meta new file mode 100644 index 0000000..561be4d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 843a648457ad8a848b15ecab15cdf23d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingText.prefab b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingText.prefab new file mode 100644 index 0000000..1f066d0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingText.prefab @@ -0,0 +1,660 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &680726281506754398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1396945909397809018} + - component: {fileID: 2745095665700041492} + m_Layer: 0 + m_Name: AppearFeedbacks + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1396945909397809018 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680726281506754398} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1418480443928390042} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2745095665700041492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680726281506754398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + InitializationMode: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 1 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - id: 0 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + ForceStopFeedbacksOnDisable: 1 + PlayCount: 0 + references: + version: 1 + 00000000: + type: {class: MMF_Scale, ns: MoreMountains.Feedbacks, asm: MoreMountains.Feedbacks} + data: + Active: 0 + UniqueID: -144428664 + Label: Scale + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + Owner: {fileID: 2745095665700041492} + DebugActive: 0 + Mode: 0 + AnimateScaleTarget: {fileID: 1418480443928390042} + AnimateScaleDuration: 0.2 + RemapCurveZero: 1 + RemapCurveOne: 2 + Offset: 0 + AnimateX: 1 + AnimateScaleTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 1 + AnimateScaleTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 1 + AnimateScaleTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + UniformScaling: 0 + AllowAdditivePlays: 0 + DetermineScaleOnPlay: 0 + DestinationScale: {x: 0.5, y: 0.5, z: 0.5} + AnimateScaleX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateScaleY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateScaleZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &740555631209764096 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6522080239221119930} + m_Layer: 0 + m_Name: MovingContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6522080239221119930 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740555631209764096} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5952698596636219053} + m_Father: {fileID: 1418480443928390042} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1418480443928390021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1418480443928390042} + - component: {fileID: 1418480443928390043} + - component: {fileID: 2580486995947534351} + m_Layer: 0 + m_Name: MMFloatingText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1418480443928390042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480443928390021} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6522080239221119930} + - {fileID: 1396945909397809018} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1418480443928390043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480443928390021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bae8ea1d0fd577d4b8a4adf809027eee, type: 3} + m_Name: + m_EditorClassIdentifier: + MovingPart: {fileID: 6522080239221119930} + Billboard: {fileID: 5952698596636219053} + TargetTextMesh: {fileID: 1418480444232694739} + Direction: {x: 0, y: 1, z: 0} +--- !u!114 &2580486995947534351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480443928390021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72de0b0360096ea41a18d17864ecb963, type: 3} + m_Name: + m_EditorClassIdentifier: + BoundsBasedOn: 3 + ExecuteOnEnable: + m_PersistentCalls: + m_Calls: [] + ExecuteOnDisable: + m_PersistentCalls: + m_Calls: [] + LifeTime: 0 +--- !u!1 &1418480444232694749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1418480444232694738} + - component: {fileID: 1418480444232694736} + - component: {fileID: 1418480444232694739} + - component: {fileID: 7667752602398773305} + m_Layer: 0 + m_Name: TextMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1418480444232694738 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480444232694749} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 5952698596636219053} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1418480444232694736 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480444232694749} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 955296f4b4df04345b06197dc1151a1c, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 961700441 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!102 &1418480444232694739 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480444232694749} + m_Text: 150 + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 4 + m_Alignment: 1 + m_TabSize: 4 + m_FontSize: 106 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 12800000, guid: 955296f4b4df04345b06197dc1151a1c, type: 3} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!114 &7667752602398773305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480444232694749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b89e406878a092438282239ce29006e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1870161310708674147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5952698596636219053} + m_Layer: 0 + m_Name: Billboard + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5952698596636219053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870161310708674147} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1418480444232694738} + m_Father: {fileID: 6522080239221119930} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingText.prefab.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingText.prefab.meta new file mode 100644 index 0000000..da15c91 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingText.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e3bc05dce75bc334eac3d6b4cc83f92f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingTextPixel.prefab b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingTextPixel.prefab new file mode 100644 index 0000000..4764500 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingTextPixel.prefab @@ -0,0 +1,647 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &680726281506754398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1396945909397809018} + - component: {fileID: 2745095665700041492} + m_Layer: 0 + m_Name: AppearFeedbacks + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1396945909397809018 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680726281506754398} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1418480443928390042} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2745095665700041492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 680726281506754398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + InitializationMode: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 1 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - id: 0 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + ForceStopFeedbacksOnDisable: 1 + PlayCount: 0 + references: + version: 1 + 00000000: + type: {class: MMF_Scale, ns: MoreMountains.Feedbacks, asm: MoreMountains.Feedbacks} + data: + Active: 0 + UniqueID: 1877074780 + Label: Scale + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + Owner: {fileID: 2745095665700041492} + DebugActive: 0 + Mode: 0 + AnimateScaleTarget: {fileID: 1418480443928390042} + AnimateScaleDuration: 0.2 + RemapCurveZero: 1 + RemapCurveOne: 2 + Offset: 0 + AnimateX: 1 + AnimateScaleTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 1 + AnimateScaleTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 1 + AnimateScaleTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + UniformScaling: 0 + AllowAdditivePlays: 0 + DetermineScaleOnPlay: 0 + DestinationScale: {x: 0.5, y: 0.5, z: 0.5} + AnimateScaleX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateScaleY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateScaleZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &740555631209764096 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6522080239221119930} + m_Layer: 0 + m_Name: MovingContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6522080239221119930 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740555631209764096} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5952698596636219053} + m_Father: {fileID: 1418480443928390042} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1418480443928390021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1418480443928390042} + - component: {fileID: 1418480443928390043} + - component: {fileID: 2580486995947534351} + m_Layer: 0 + m_Name: MMFloatingTextPixel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1418480443928390042 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480443928390021} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6522080239221119930} + - {fileID: 1396945909397809018} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1418480443928390043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480443928390021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bae8ea1d0fd577d4b8a4adf809027eee, type: 3} + m_Name: + m_EditorClassIdentifier: + MovingPart: {fileID: 6522080239221119930} + Billboard: {fileID: 5952698596636219053} + TargetTextMesh: {fileID: 1418480444232694739} + Direction: {x: 0, y: 1, z: 0} +--- !u!114 &2580486995947534351 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480443928390021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72de0b0360096ea41a18d17864ecb963, type: 3} + m_Name: + m_EditorClassIdentifier: + BoundsBasedOn: 3 + ExecuteOnEnable: + m_PersistentCalls: + m_Calls: [] + ExecuteOnDisable: + m_PersistentCalls: + m_Calls: [] + LifeTime: 0 +--- !u!1 &1418480444232694749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1418480444232694738} + - component: {fileID: 1418480444232694736} + - component: {fileID: 1418480444232694739} + m_Layer: 0 + m_Name: TextMesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1418480444232694738 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480444232694749} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 5952698596636219053} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1418480444232694736 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480444232694749} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!102 &1418480444232694739 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418480444232694749} + m_Text: 150 + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 4 + m_Alignment: 1 + m_TabSize: 4 + m_FontSize: 106 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 12800000, guid: 61165c170c0b97c48a9bf5be5ee0f5b6, type: 3} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!1 &1870161310708674147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5952698596636219053} + m_Layer: 0 + m_Name: Billboard + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5952698596636219053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870161310708674147} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1418480444232694738} + m_Father: {fileID: 6522080239221119930} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingTextPixel.prefab.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingTextPixel.prefab.meta new file mode 100644 index 0000000..a30c146 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MMFloatingText/Prefabs/MMFloatingTextPixel.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4c1c6a83883bc4142b27d3223056e9da +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MoreMountains.Feedbacks.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacks/MoreMountains.Feedbacks.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MoreMountains.Feedbacks.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/MoreMountains.Feedbacks.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/MoreMountains.Feedbacks.asmref.meta new file mode 100644 index 0000000..e034f14 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/MoreMountains.Feedbacks.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2a7f62b6c20f8fa459a2d976d9bc2fcf +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing.meta new file mode 100644 index 0000000..ca01547 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 063026b919361a546864af26fd1da3de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts.meta new file mode 100644 index 0000000..4cc2641 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfb8ae0b563eb11439f697b292317e30 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMAudioSourceSequencer.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMAudioSourceSequencer.cs new file mode 100644 index 0000000..970aba6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMAudioSourceSequencer.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Feedbacks +{ + /// + /// A MMSequencer with ready made slots to play AudioSources + /// + [AddComponentMenu("More Mountains/Feedbacks/Sequencing/MMAudioSourceSequencer")] + public class MMAudioSourceSequencer : MMSequencer + { + /// the list of audio sources to play (one per track) + [Tooltip("the list of audio sources to play (one per track)")] + public List AudioSources; + + /// + /// On beat we play our audio sources + /// + protected override void OnBeat() + { + base.OnBeat(); + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + if ((Sequence.SequenceTracks[i].Active) && (Sequence.QuantizedSequence[i].Line[CurrentSequenceIndex].ID != -1)) + { + if ((AudioSources.Count > i) && (AudioSources[i] != null)) + { + AudioSources[i].Play(); + } + } + } + } + + /// + /// When playing our event for control, we play our audiosource + /// + /// + public override void PlayTrackEvent(int index) + { + if (!Application.isPlaying) + { + return; + } + base.PlayTrackEvent(index); + AudioSources[index].Play(); + } + + /// + /// When looking for changes we make sure we have enough audiosources in our array + /// + public override void EditorMaintenance() + { + base.EditorMaintenance(); + SetupSounds(); + } + + /// + /// Ensures the array is always the right length + /// + public virtual void SetupSounds() + { + if (Sequence == null) + { + return; + } + // setup events + if (AudioSources.Count < Sequence.SequenceTracks.Count) + { + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + if (i >= AudioSources.Count) + { + AudioSources.Add(null); + } + } + } + if (AudioSources.Count > Sequence.SequenceTracks.Count) + { + AudioSources.Clear(); + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + AudioSources.Add(null); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMAudioSourceSequencer.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMAudioSourceSequencer.cs.meta new file mode 100644 index 0000000..a35cdab --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMAudioSourceSequencer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ede43f27f84b01545832f1dee8880684 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMFeedbacksSequencer.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMFeedbacksSequencer.cs new file mode 100644 index 0000000..6319657 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMFeedbacksSequencer.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Feedbacks +{ + /// + /// A MMSequencer with ready made slots to play MMFeedbacks + /// + [AddComponentMenu("More Mountains/Feedbacks/Sequencing/MMFeedbacksSequencer")] + public class MMFeedbacksSequencer : MMSequencer + { + /// the list of audio clips to play (one per track) + [Tooltip("the list of audio clips to play (one per track)")] + public List Feedbacks; + + /// + /// On beat we play our audio sources + /// + protected override void OnBeat() + { + base.OnBeat(); + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + if ((Sequence.SequenceTracks[i].Active) && (Sequence.QuantizedSequence[i].Line[CurrentSequenceIndex].ID != -1)) + { + if ((Feedbacks.Count > i) && (Feedbacks[i] != null)) + { + Feedbacks[i].PlayFeedbacks(); + } + } + } + } + + /// + /// When playing our event for control, we play our audiosource + /// + /// + public override void PlayTrackEvent(int index) + { + if (!Application.isPlaying) + { + return; + } + base.PlayTrackEvent(index); + Feedbacks[index].PlayFeedbacks(); + } + + /// + /// When looking for changes we make sure we have enough sounds in our array + /// + public override void EditorMaintenance() + { + base.EditorMaintenance(); + SetupFeedbacks(); + } + + /// + /// Ensures the array is always the right length + /// + public virtual void SetupFeedbacks() + { + if (Sequence == null) + { + return; + } + // setup events + if (Feedbacks.Count < Sequence.SequenceTracks.Count) + { + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + if (i >= Feedbacks.Count) + { + Feedbacks.Add(null); + } + } + } + if (Feedbacks.Count > Sequence.SequenceTracks.Count) + { + Feedbacks.Clear(); + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + Feedbacks.Add(null); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMFeedbacksSequencer.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMFeedbacksSequencer.cs.meta new file mode 100644 index 0000000..d9b2ef3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMFeedbacksSequencer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e640499a55d3f348b303b7c2ce7d452 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMInputSequenceRecorder.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMInputSequenceRecorder.cs new file mode 100644 index 0000000..134a06a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMInputSequenceRecorder.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// This class lets you record sequences via input presses + /// + [AddComponentMenu("More Mountains/Feedbacks/Sequencing/MMInputSequenceRecorder")] + [ExecuteAlways] + public class MMInputSequenceRecorder : MonoBehaviour + { + [Header("Target")] + /// the target scriptable object to write to + [Tooltip("the target scriptable object to write to")] + public MMSequence SequenceScriptableObject; + + [Header("Recording")] + /// whether this recorder is recording right now or not + [MMFReadOnly] + [Tooltip("whether this recorder is recording right now or not")] + public bool Recording; + /// whether any silence between the start of the recording and the first press should be removed or not + [Tooltip("whether any silence between the start of the recording and the first press should be removed or not")] + public bool RemoveInitialSilence = true; + /// whether this recording should write on top of existing entries or not + [Tooltip("whether this recording should write on top of existing entries or not")] + public bool AdditiveRecording = false; + /// whether this recorder should start recording when entering play mode + [Tooltip("whether this recorder should start recording when entering play mode")] + public bool StartRecordingOnGameStart = false; + /// the offset to apply to entries + [Tooltip("the offset to apply to entries")] + public float RecordingStartOffset = 0f; + + [Header("Recorder Keys")] + /// the key binding for recording start + [Tooltip("the key binding for recording start")] + public KeyCode StartRecordingHotkey = KeyCode.Home; + /// the key binding for recording stop + [Tooltip("the key binding for recording stop")] + public KeyCode StopRecordingHotkey = KeyCode.End; + + protected MMSequenceNote _note; + protected float _recordingStartedAt = 0f; + + /// + /// On awake we initialize our recorder + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// Makes sure we have a scriptable object to record to + /// + public virtual void Initialization() + { + Recording = false; + + _note = new MMSequenceNote(); + + if (SequenceScriptableObject == null) + { + Debug.LogError(this.name + " this input based sequencer needs a bound scriptable object to function, please create one and bind it in the inspector."); + } + } + + /// + /// On Start, starts a recording if needed + /// + protected virtual void Start() + { + if (StartRecordingOnGameStart) + { + StartRecording(); + } + } + + /// + /// Clears the sequence if needed and starts recording + /// + public virtual void StartRecording() + { + Recording = true; + if (!AdditiveRecording) + { + SequenceScriptableObject.OriginalSequence.Line.Clear(); + } + _recordingStartedAt = Time.realtimeSinceStartup; + } + + /// + /// Stops the recording + /// + public virtual void StopRecording() + { + Recording = false; + SequenceScriptableObject.QuantizeOriginalSequence(); + } + + /// + /// On update we look for key presses + /// + protected virtual void Update() + { + if (!Application.isPlaying) + { + return; + } + DetectStartAndEnd(); + DetectRecording(); + } + + /// + /// Detects key presses for start and end recording actions + /// + protected virtual void DetectStartAndEnd() + { + #if !ENABLE_INPUT_SYSTEM || ENABLE_LEGACY_INPUT_MANAGER + if (!Recording) + { + if (Input.GetKeyDown(StartRecordingHotkey)) + { + StartRecording(); + } + } + else + { + if (Input.GetKeyDown(StartRecordingHotkey)) + { + StopRecording(); + } + } + #endif + } + + /// + /// Look for key presses to write to the sequence + /// + protected virtual void DetectRecording() + { + if (Recording && (SequenceScriptableObject != null)) + { + foreach (MMSequenceTrack track in SequenceScriptableObject.SequenceTracks) + { + if (Input.GetKeyDown(track.Key)) + { + AddNoteToTrack(track); + } + } + } + } + + /// + /// Adds a note to the specified track + /// + /// + public virtual void AddNoteToTrack(MMSequenceTrack track) + { + if ((SequenceScriptableObject.OriginalSequence.Line.Count == 0) && RemoveInitialSilence) + { + _recordingStartedAt = Time.realtimeSinceStartup; + } + + _note = new MMSequenceNote(); + _note.ID = track.ID; + _note.Timestamp = Time.realtimeSinceStartup + RecordingStartOffset - _recordingStartedAt; + SequenceScriptableObject.OriginalSequence.Line.Add(_note); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMInputSequenceRecorder.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMInputSequenceRecorder.cs.meta new file mode 100644 index 0000000..5529848 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMInputSequenceRecorder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06ab5e1bf51197d47a2b3cb81ac38c37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequence.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequence.cs new file mode 100644 index 0000000..d0a8554 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequence.cs @@ -0,0 +1,298 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// the possible states for sequence notes + public enum MMSequenceTrackStates { Idle, Down, Up } + + /// + /// A class describing the contents of a sequence note, basically a timestamp and the ID to play at that timestamp + /// + [System.Serializable] + public class MMSequenceNote + { + public float Timestamp; + public int ID; + + public virtual MMSequenceNote Copy() + { + MMSequenceNote newNote = new MMSequenceNote(); + newNote.ID = this.ID; + newNote.Timestamp = this.Timestamp; + return newNote; + } + } + + /// + /// A class describing the properties of a sequence's track : ID, color (for the inspector), Key (for the recorder), State (for the recorder) + /// + [System.Serializable] + public class MMSequenceTrack + { + public int ID = 0; + public Color TrackColor; + public KeyCode Key = KeyCode.Space; + public bool Active = true; + [MMFReadOnly] + public MMSequenceTrackStates State = MMSequenceTrackStates.Idle; + [HideInInspector] + public bool Initialized = false; + + public virtual void SetDefaults(int index) + { + if (!Initialized) + { + ID = index; + TrackColor = MMSequence.RandomSequenceColor(); + Key = KeyCode.Space; + Active = true; + State = MMSequenceTrackStates.Idle; + Initialized = true; + } + } + } + + /// + /// A class used to store sequence notes + /// + [System.Serializable] + public class MMSequenceList + { + public List Line; + } + + /// + /// This scriptable object holds "sequences", data used to record and play events in sequence + /// MMSequences can be played by MMFeedbacks from their Timing section, by Sequencers and potentially other classes + /// + [CreateAssetMenu(menuName = "MoreMountains/Sequencer/MMSequence")] + public class MMSequence : ScriptableObject + { + [Header("Sequence")] + /// the length (in seconds) of the sequence + [Tooltip("the length (in seconds) of the sequence")] + [MMFReadOnly] + public float Length; + /// the original sequence (as outputted by the input sequence recorder) + [Tooltip("the original sequence (as outputted by the input sequence recorder)")] + public MMSequenceList OriginalSequence; + /// the duration in seconds to apply after the last input + [Tooltip("the duration in seconds to apply after the last input")] + public float EndSilenceDuration = 0f; + + [Header("Sequence Contents")] + /// the list of tracks for this sequence + [Tooltip("the list of tracks for this sequence")] + public List SequenceTracks; + + [Header("Quantizing")] + /// whether this sequence should be used in quantized form or not + [Tooltip("whether this sequence should be used in quantized form or not")] + public bool Quantized; + /// the target BPM for this sequence + [Tooltip("the target BPM for this sequence")] + public int TargetBPM = 120; + /// the contents of the quantized sequence + [Tooltip("the contents of the quantized sequence")] + public List QuantizedSequence; + + [Space] + [Header("Controls")] + [MMFInspectorButton("RandomizeTrackColors")] + public bool RandomizeTrackColorsButton; + + protected float[] _quantizedBeats; + protected List _deleteList; + + /// + /// Compares and sorts two sequence notes + /// + /// + /// + /// + static int SortByTimestamp(MMSequenceNote p1, MMSequenceNote p2) + { + return p1.Timestamp.CompareTo(p2.Timestamp); + } + + /// + /// Sorts the original sequence based on timestamps + /// + public virtual void SortOriginalSequence() + { + OriginalSequence.Line.Sort(SortByTimestamp); + } + + /// + /// Quantizes the original sequence, filling the QuantizedSequence list, arranging events on the beat + /// + public virtual void QuantizeOriginalSequence() + { + ComputeLength(); + QuantizeSequenceToBPM(OriginalSequence.Line); + } + + /// + /// Computes the length of the sequence + /// + public virtual void ComputeLength() + { + Length = OriginalSequence.Line[OriginalSequence.Line.Count - 1].Timestamp + EndSilenceDuration; + } + + /// + /// Makes every timestamp in the sequence match the BPM track + /// + public virtual void QuantizeSequenceToBPM(List baseSequence) + { + float sequenceLength = Length; + float beatDuration = 60f / TargetBPM; + int numberOfBeatsInSequence = (int)(sequenceLength / beatDuration); + QuantizedSequence = new List(); + _deleteList = new List(); + _deleteList.Clear(); + + // we fill the BPM track with the computed timestamps + _quantizedBeats = new float[numberOfBeatsInSequence]; + for (int i = 0; i < numberOfBeatsInSequence; i++) + { + _quantizedBeats[i] = i * beatDuration; + } + + for (int i = 0; i < SequenceTracks.Count; i++) + { + QuantizedSequence.Add(new MMSequenceList()); + QuantizedSequence[i].Line = new List(); + for (int j = 0; j < numberOfBeatsInSequence; j++) + { + MMSequenceNote newNote = new MMSequenceNote(); + newNote.ID = -1; + newNote.Timestamp = _quantizedBeats[j]; + QuantizedSequence[i].Line.Add(newNote); + + foreach (MMSequenceNote note in baseSequence) + { + float newTimestamp = RoundFloatToArray(note.Timestamp, _quantizedBeats); + if ((newTimestamp == _quantizedBeats[j]) && (note.ID == SequenceTracks[i].ID)) + { + QuantizedSequence[i].Line[j].ID = note.ID; + } + } + } + } + } + + /// + /// On validate, we initialize our track's properties + /// + protected virtual void OnValidate() + { + for (int i = 0; i < SequenceTracks.Count; i++) + { + SequenceTracks[i].SetDefaults(i); + } + } + + /// + /// Randomizes track colors + /// + protected virtual void RandomizeTrackColors() + { + foreach(MMSequenceTrack track in SequenceTracks) + { + track.TrackColor = RandomSequenceColor(); + } + } + + /// + /// Returns a random color for the sequence tracks + /// + /// + public static Color RandomSequenceColor() + { + int random = UnityEngine.Random.Range(0, 32); + switch (random) + { + case 0: return new Color32(240, 248, 255, 255); + case 1: return new Color32(127, 255, 212, 255); + case 2: return new Color32(245, 245, 220, 255); + case 3: return new Color32(95, 158, 160, 255); + case 4: return new Color32(255, 127, 80, 255); + case 5: return new Color32(0, 255, 255, 255); + case 6: return new Color32(255, 215, 0, 255); + case 7: return new Color32(255, 0, 255, 255); + case 8: return new Color32(50, 128, 120, 255); + case 9: return new Color32(173, 255, 47, 255); + case 10: return new Color32(255, 105, 180, 255); + case 11: return new Color32(75, 0, 130, 255); + case 12: return new Color32(255, 255, 240, 255); + case 13: return new Color32(124, 252, 0, 255); + case 14: return new Color32(255, 160, 122, 255); + case 15: return new Color32(0, 255, 0, 255); + case 16: return new Color32(245, 255, 250, 255); + case 17: return new Color32(255, 228, 225, 255); + case 18: return new Color32(218, 112, 214, 255); + case 19: return new Color32(255, 192, 203, 255); + case 20: return new Color32(255, 0, 0, 255); + case 21: return new Color32(196, 112, 255, 255); + case 22: return new Color32(250, 128, 114, 255); + case 23: return new Color32(46, 139, 87, 255); + case 24: return new Color32(192, 192, 192, 255); + case 25: return new Color32(135, 206, 235, 255); + case 26: return new Color32(0, 255, 127, 255); + case 27: return new Color32(210, 180, 140, 255); + case 28: return new Color32(0, 128, 128, 255); + case 29: return new Color32(255, 99, 71, 255); + case 30: return new Color32(64, 224, 208, 255); + case 31: return new Color32(255, 255, 0, 255); + case 32: return new Color32(154, 205, 50, 255); + } + return new Color32(240, 248, 255, 255); + } + + /// + /// Rounds a float to the closest float in an array (array has to be sorted) + /// + /// + /// + /// + public static float RoundFloatToArray(float value, float[] array) + { + int min = 0; + if (array[min] >= value) return array[min]; + + int max = array.Length - 1; + if (array[max] <= value) return array[max]; + + while (max - min > 1) + { + int mid = (max + min) / 2; + + if (array[mid] == value) + { + return array[mid]; + } + else if (array[mid] < value) + { + min = mid; + } + else + { + max = mid; + } + } + + if (array[max] - value <= value - array[min]) + { + return array[max]; + } + else + { + return array[min]; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequence.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequence.cs.meta new file mode 100644 index 0000000..894dd4b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequence.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6480c3a11ef13143b71f9c64c7da64c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequencer.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequencer.cs new file mode 100644 index 0000000..72aad33 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequencer.cs @@ -0,0 +1,445 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Feedbacks +{ + /// + /// This class lets you design a quantized MMSequence using a sequencer interface, and lets you play a quantized sequence, triggering events on beats if specified + /// + [AddComponentMenu("More Mountains/Feedbacks/Sequencing/MMSequencer")] + public class MMSequencer : MonoBehaviour + { + public enum TimeScales { Scaled, Unscaled } + + [Header("Sequence")] + /// the sequence to design on or to play + [Tooltip("the sequence to design on or to play")] + public MMSequence Sequence; + /// the intended BPM for playback and design + [Tooltip("the intended BPM for playback and design")] + public int BPM = 160; + /// the number of notes in the sequence + [Tooltip("the number of notes in the sequence")] + public int SequencerLength = 8; + + [Header("Playback")] + /// the timescale on which this sequencer should play + [Tooltip("the timescale on which this sequencer should play")] + public TimeScales TimeScale = TimeScales.Scaled; + /// whether the sequence should loop or not when played back + [Tooltip("whether the sequence should loop or not when played back")] + public bool Loop = true; + /// if this is true the sequence will play in random order + [Tooltip("if this is true the sequence will play in random order")] + public bool RandomSequence = false; + /// whether that sequencer should start playing on application start + [Tooltip("whether that sequencer should start playing on application start")] + public bool PlayOnStart = false; + + [Header("Metronome")] + /// a sound to play every beat + [Tooltip("a sound to play every beat")] + public AudioClip MetronomeSound; + /// the volume of the metronome sound + [Tooltip("the volume of the metronome sound")] + [Range(0f, 1f)] + public float MetronomeVolume = 0.2f; + + [Header("Events")] + /// a list of events to play every time an active beat is found on each track (one event per track) + [Tooltip("a list of events to play every time an active beat is found on each track (one event per track)")] + public List TrackEvents; + + [Header("Monitor")] + /// true if the sequencer is playing right now + [Tooltip("true if the sequencer is playing right now")] + [MMFReadOnly] + public bool Playing = false; + /// true if the sequencer has been played once + [Tooltip("true if the sequencer has been played once")] + [HideInInspector] + public bool PlayedOnce = false; + /// true if a perfect beat was found this frame + [Tooltip("true if a perfect beat was found this frame")] + [MMFReadOnly] + public bool BeatThisFrame = false; + /// the index of the last played bit (our position in the playing sequence) + [Tooltip("the index of the last played bit (our position in the playing sequence)")] + [MMFReadOnly] + public int LastBeatIndex = 0; + + public float InternalTime => TimeScale == TimeScales.Scaled ? Time.time : Time.unscaledTime; + + [HideInInspector] + public int LastBPM = -1; + [HideInInspector] + public int LastTracksCount = -1; + [HideInInspector] + public int LastSequencerLength = -1; + [HideInInspector] + public MMSequence LastSequence; + [HideInInspector] + public int CurrentSequenceIndex = 0; + [HideInInspector] + public float LastBeatTimestamp = 0f; + + protected float _beatInterval; + protected AudioSource _beatSoundAudiosource; + + /// + /// On Start we initialize our sequencer + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init, initializes the metronome and plays the sequence if needed + /// + protected virtual void Initialization() + { + Playing = false; + if (MetronomeSound != null) + { + GameObject go = new GameObject(); + SceneManager.MoveGameObjectToScene(go, this.gameObject.scene); + go.name = "BeatSoundAudioSource"; + go.transform.SetParent(this.transform); + _beatSoundAudiosource = go.AddComponent(); + _beatSoundAudiosource.clip = MetronomeSound; + _beatSoundAudiosource.loop = false; + _beatSoundAudiosource.playOnAwake = false; + } + if (PlayOnStart) + { + PlaySequence(); + } + } + + /// + /// Plays or stops the sequence based on its current state + /// + public virtual void ToggleSequence() + { + if (Playing) + { + StopSequence(); + } + else + { + PlaySequence(); + } + } + + /// + /// Starts playing the sequence + /// + public virtual void PlaySequence() + { + CurrentSequenceIndex = 0; + Playing = true; + LastBeatTimestamp = 0f; + } + + /// + /// Stops the playback of the sequence + /// + public virtual void StopSequence() + { + Playing = false; + } + + /// + /// Clears the contents of the sequence + /// + public virtual void ClearSequence() + { + for (int trackIndex = 0; trackIndex < Sequence.SequenceTracks.Count; trackIndex++) + { + for (int i = 0; i < SequencerLength; i++) + { + Sequence.QuantizedSequence[trackIndex].Line[i].ID = -1; + } + } + } + + /// + /// On update we handle our beat + /// + protected virtual void Update() + { + HandleBeat(); + } + + /// + /// Determines if we're on a beat, and plays the beat if needed + /// + protected virtual void HandleBeat() + { + BeatThisFrame = false; + + if (!Playing) + { + return; + } + + if (CurrentSequenceIndex >= SequencerLength) + { + StopSequence(); + return; + } + + _beatInterval = 60f / BPM; + + if ((InternalTime - LastBeatTimestamp >= _beatInterval) || (LastBeatTimestamp == 0f)) + { + PlayBeat(); + } + } + + /// + /// Triggers events on the beat if needed + /// + public virtual void PlayBeat() + { + BeatThisFrame = true; + LastBeatIndex = CurrentSequenceIndex; + LastBeatTimestamp = InternalTime; + PlayedOnce = true; + PlayMetronomeSound(); + OnBeat(); + + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + if ((Sequence.SequenceTracks[i].Active) && (Sequence.QuantizedSequence[i].Line[CurrentSequenceIndex].ID != -1)) + { + if (TrackEvents[i] != null) + { + TrackEvents[i].Invoke(); + } + } + } + CurrentSequenceIndex++; + if ((CurrentSequenceIndex >= SequencerLength) && Loop) + { + CurrentSequenceIndex = 0; + } + if (RandomSequence) + { + CurrentSequenceIndex = UnityEngine.Random.Range(0, SequencerLength); + } + } + + /// + /// Triggered every time a beat is found, meant to be overriden + /// + protected virtual void OnBeat() + { + + } + + /// + /// Plays the track event supposed to happen for the specified track + /// + /// + public virtual void PlayTrackEvent(int index) + { + TrackEvents[index].Invoke(); + } + + /// + /// Turns a sequence track active (will play its notes) or inactive (won't do it) + /// + /// + public virtual void ToggleActive(int trackIndex) + { + Sequence.SequenceTracks[trackIndex].Active = !Sequence.SequenceTracks[trackIndex].Active; + } + + /// + /// Toggles a whole step column, turning all its notes active or inactive + /// + /// + public virtual void ToggleStep(int stepIndex) + { + bool active = (Sequence.QuantizedSequence[0].Line[stepIndex].ID != -1); + + for (int trackIndex = 0; trackIndex < Sequence.SequenceTracks.Count; trackIndex++) + { + if (active) + { + Sequence.QuantizedSequence[trackIndex].Line[stepIndex].ID = -1; + } + else + { + Sequence.QuantizedSequence[trackIndex].Line[stepIndex].ID = Sequence.SequenceTracks[trackIndex].ID; + } + } + } + + /// + /// Plays the sound of the metronome + /// + protected virtual void PlayMetronomeSound() + { + if (MetronomeSound != null) + { + _beatSoundAudiosource.volume = MetronomeVolume; + _beatSoundAudiosource.Play(); + } + } + + /// + /// Adds one column at the end of the sequence + /// + public virtual void IncrementLength() + { + if (Sequence == null) + { + return; + } + float beatDuration = 60f / BPM; + SequencerLength++; + Sequence.Length = SequencerLength * beatDuration; + LastSequencerLength = SequencerLength; + + for (int trackIndex = 0; trackIndex < Sequence.SequenceTracks.Count; trackIndex++) + { + MMSequenceNote newNote = new MMSequenceNote(); + newNote.ID = -1; + newNote.Timestamp = Sequence.QuantizedSequence[trackIndex].Line.Count * beatDuration; + Sequence.QuantizedSequence[trackIndex].Line.Add(newNote); + } + } + + /// + /// Removes the last column of the sequence + /// + public virtual void DecrementLength() + { + if (Sequence == null) + { + return; + } + float beatDuration = 60f / BPM; + SequencerLength--; + Sequence.Length = SequencerLength * beatDuration; + LastSequencerLength = SequencerLength; + + for (int trackIndex = 0; trackIndex < Sequence.SequenceTracks.Count; trackIndex++) + { + int removeIndex = Sequence.QuantizedSequence[trackIndex].Line.Count - 1; + Sequence.QuantizedSequence[trackIndex].Line.RemoveAt(removeIndex); + } + } + + /// + /// Parses the sequence contents and updates timestamps to match the new BPM + /// + public virtual void UpdateTimestampsToMatchNewBPM() + { + if (Sequence == null) + { + return; + } + float beatDuration = 60f / BPM; + + Sequence.TargetBPM = BPM; + Sequence.Length = SequencerLength * beatDuration; + Sequence.EndSilenceDuration = beatDuration; + Sequence.Quantized = true; + + for (int trackIndex = 0; trackIndex < Sequence.SequenceTracks.Count; trackIndex++) + { + for (int i = 0; i < SequencerLength; i++) + { + Sequence.QuantizedSequence[trackIndex].Line[i].Timestamp = i * beatDuration; + } + } + LastBPM = BPM; + } + + /// + /// Rebuilds the sequence properties to match length and track count - will destroy contents + /// + public virtual void ApplySequencerLengthToSequence() + { + if (Sequence == null) + { + return; + } + + float beatDuration = 60f / BPM; + + Sequence.TargetBPM = BPM; + Sequence.Length = SequencerLength * beatDuration; + Sequence.EndSilenceDuration = beatDuration; + Sequence.Quantized = true; + + if ((LastSequencerLength != SequencerLength) || (LastTracksCount != Sequence.SequenceTracks.Count)) + { + Sequence.QuantizedSequence = new List(); + + for (int trackIndex = 0; trackIndex < Sequence.SequenceTracks.Count; trackIndex++) + { + Sequence.QuantizedSequence.Add(new MMSequenceList()); + Sequence.QuantizedSequence[trackIndex].Line = new List(); + for (int i = 0; i < SequencerLength; i++) + { + MMSequenceNote note = new MMSequenceNote(); + note.ID = -1; + note.Timestamp = i * beatDuration; + Sequence.QuantizedSequence[trackIndex].Line.Add(note); + } + } + } + + LastTracksCount = Sequence.SequenceTracks.Count; + LastSequencerLength = SequencerLength; + } + + /// + /// Performed every frame by the editor to handle potential changes + /// + public virtual void EditorMaintenance() + { + SetupTrackEvents(); + } + + /// + /// Adds or rebuilds to the event list + /// + public virtual void SetupTrackEvents() + { + if (Sequence == null) + { + return; + } + + // setup events + if (TrackEvents.Count < Sequence.SequenceTracks.Count) + { + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + if (i >= TrackEvents.Count) + { + TrackEvents.Add(new UnityEvent()); + } + } + } + if (TrackEvents.Count > Sequence.SequenceTracks.Count) + { + TrackEvents.Clear(); + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + TrackEvents.Add(new UnityEvent()); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequencer.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequencer.cs.meta new file mode 100644 index 0000000..a660706 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSequencer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1049f71bc5747d14fa10e114f6cfcfe5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSoundSequencer.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSoundSequencer.cs new file mode 100644 index 0000000..5419df9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSoundSequencer.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Feedbacks +{ + /// + /// A MMSequencer with ready made slots to play sounds + /// + [AddComponentMenu("More Mountains/Feedbacks/Sequencing/MMSoundSequencer")] + public class MMSoundSequencer : MMSequencer + { + /// the list of audio clips to play (one per track) + [Tooltip("the list of audio clips to play (one per track)")] + public List Sounds; + + protected List _audioSources; + + /// + /// On Initialization we create our audiosources to play later + /// + protected override void Initialization() + { + base.Initialization(); + _audioSources = new List(); + foreach(AudioClip sound in Sounds) + { + GameObject asGO = new GameObject(); + SceneManager.MoveGameObjectToScene(asGO, this.gameObject.scene); + asGO.name = "AudioSource - " + sound.name; + asGO.transform.SetParent(this.transform); + AudioSource source = asGO.AddComponent(); + source.loop = false; + source.playOnAwake = false; + source.clip = sound; + source.volume = 1f; + source.pitch = 1f; + _audioSources.Add(source); + } + } + + /// + /// On beat we play our audio sources + /// + protected override void OnBeat() + { + base.OnBeat(); + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + if ((Sequence.SequenceTracks[i].Active) && (Sequence.QuantizedSequence[i].Line[CurrentSequenceIndex].ID != -1)) + { + if ((_audioSources.Count > i) && (_audioSources[i] != null)) + { + _audioSources[i].Play(); + } + } + } + } + + /// + /// When playing our event for control, we play our audiosource + /// + /// + public override void PlayTrackEvent(int index) + { + if (!Application.isPlaying) + { + return; + } + base.PlayTrackEvent(index); + _audioSources[index].Play(); + } + + /// + /// When looking for changes we make sure we have enough sounds in our array + /// + public override void EditorMaintenance() + { + base.EditorMaintenance(); + SetupSounds(); + } + + /// + /// Ensures the array is always the right length + /// + public virtual void SetupSounds() + { + if (Sequence == null) + { + return; + } + // setup events + if (Sounds.Count < Sequence.SequenceTracks.Count) + { + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + if (i >= Sounds.Count) + { + Sounds.Add(null); + } + } + } + if (Sounds.Count > Sequence.SequenceTracks.Count) + { + Sounds.Clear(); + for (int i = 0; i < Sequence.SequenceTracks.Count; i++) + { + Sounds.Add(null); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSoundSequencer.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSoundSequencer.cs.meta new file mode 100644 index 0000000..75326c4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Sequencing/Scripts/MMSoundSequencer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d286788c116ce6547b8144f05f2f14d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers.meta new file mode 100644 index 0000000..628999b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a098719172799a2408953e68db997583 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterDistortionShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterDistortionShaker.cs new file mode 100644 index 0000000..e23dd56 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterDistortionShaker.cs @@ -0,0 +1,193 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an audio distortion filter to shake its values remapped along a curve + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Audio/MMAudioFilterDistortionShaker")] + [RequireComponent(typeof(AudioDistortionFilter))] + public class MMAudioFilterDistortionShaker : MMShaker + { + [MMInspectorGroup("Distortion", true, 51)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeDistortion = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeDistortion = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapDistortionZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapDistortionOne = 1f; + + /// the audio source to pilot + protected AudioDistortionFilter _targetAudioDistortionFilter; + protected float _initialDistortion; + protected float _originalShakeDuration; + protected bool _originalRelativeDistortion; + protected AnimationCurve _originalShakeDistortion; + protected float _originalRemapDistortionZero; + protected float _originalRemapDistortionOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetAudioDistortionFilter = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newDistortionLevel = ShakeFloat(ShakeDistortion, RemapDistortionZero, RemapDistortionOne, RelativeDistortion, _initialDistortion); + _targetAudioDistortionFilter.distortionLevel = newDistortionLevel; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialDistortion = _targetAudioDistortionFilter.distortionLevel; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMAudioFilterDistortionShakeEvent(AnimationCurve distortionCurve, float duration, float remapMin, float remapMax, bool relativeDistortion = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeDistortion = ShakeDistortion; + _originalRemapDistortionZero = RemapDistortionZero; + _originalRemapDistortionOne = RemapDistortionOne; + _originalRelativeDistortion = RelativeDistortion; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeDistortion = distortionCurve; + RemapDistortionZero = remapMin * feedbacksIntensity; + RemapDistortionOne = remapMax * feedbacksIntensity; + RelativeDistortion = relativeDistortion; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetAudioDistortionFilter.distortionLevel = _initialDistortion; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeDistortion = _originalShakeDistortion; + RemapDistortionZero = _originalRemapDistortionZero; + RemapDistortionOne = _originalRemapDistortionOne; + RelativeDistortion = _originalRelativeDistortion; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMAudioFilterDistortionShakeEvent.Register(OnMMAudioFilterDistortionShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMAudioFilterDistortionShakeEvent.Unregister(OnMMAudioFilterDistortionShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMAudioFilterDistortionShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve distortionCurve, float duration, float remapMin, float remapMax, bool relativeDistortion = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve distortionCurve, float duration, float remapMin, float remapMax, bool relativeDistortion = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(distortionCurve, duration, remapMin, remapMax, relativeDistortion, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterDistortionShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterDistortionShaker.cs.meta new file mode 100644 index 0000000..34a2134 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterDistortionShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9da38c3c0ef84574b9a95440721bcf17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterEchoShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterEchoShaker.cs new file mode 100644 index 0000000..2c24adb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterEchoShaker.cs @@ -0,0 +1,193 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an audio echo filter to shake its values remapped along a curve + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Audio/MMAudioFilterEchoShaker")] + [RequireComponent(typeof(AudioEchoFilter))] + public class MMAudioFilterEchoShaker : MMShaker + { + [MMInspectorGroup("Echo", true, 52)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeEcho = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeEcho = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapEchoZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapEchoOne = 1f; + + /// the audio source to pilot + protected AudioEchoFilter _targetAudioEchoFilter; + protected float _initialEcho; + protected float _originalShakeDuration; + protected bool _originalRelativeEcho; + protected AnimationCurve _originalShakeEcho; + protected float _originalRemapEchoZero; + protected float _originalRemapEchoOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetAudioEchoFilter = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newEchoLevel = ShakeFloat(ShakeEcho, RemapEchoZero, RemapEchoOne, RelativeEcho, _initialEcho); + _targetAudioEchoFilter.wetMix = newEchoLevel; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialEcho = _targetAudioEchoFilter.wetMix; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMAudioFilterEchoShakeEvent(AnimationCurve echoCurve, float duration, float remapMin, float remapMax, bool relativeEcho = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeEcho = ShakeEcho; + _originalRemapEchoZero = RemapEchoZero; + _originalRemapEchoOne = RemapEchoOne; + _originalRelativeEcho = RelativeEcho; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeEcho = echoCurve; + RemapEchoZero = remapMin * feedbacksIntensity; + RemapEchoOne = remapMax * feedbacksIntensity; + RelativeEcho = relativeEcho; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetAudioEchoFilter.wetMix = _initialEcho; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeEcho = _originalShakeEcho; + RemapEchoZero = _originalRemapEchoZero; + RemapEchoOne = _originalRemapEchoOne; + RelativeEcho = _originalRelativeEcho; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMAudioFilterEchoShakeEvent.Register(OnMMAudioFilterEchoShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMAudioFilterEchoShakeEvent.Unregister(OnMMAudioFilterEchoShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMAudioFilterEchoShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve echoCurve, float duration, float remapMin, float remapMax, bool relativeEcho = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve echoCurve, float duration, float remapMin, float remapMax, bool relativeEcho = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(echoCurve, duration, remapMin, remapMax, relativeEcho, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterEchoShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterEchoShaker.cs.meta new file mode 100644 index 0000000..700552f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterEchoShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14662af9a6e0b6e409e588758b806feb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterHighPassShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterHighPassShaker.cs new file mode 100644 index 0000000..084d2e3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterHighPassShaker.cs @@ -0,0 +1,193 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an audio high pass filter to shake its values remapped along a curve + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Audio/MMAudioFilterHighPassShaker")] + [RequireComponent(typeof(AudioHighPassFilter))] + public class MMAudioFilterHighPassShaker : MMShaker + { + [MMInspectorGroup("High Pass", true, 53)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeHighPass = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeHighPass = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.5f, 1f), new Keyframe(1, 0f)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(10f, 22000f)] + public float RemapHighPassZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(10f, 22000f)] + public float RemapHighPassOne = 10000f; + + /// the audio source to pilot + protected AudioHighPassFilter _targetAudioHighPassFilter; + protected float _initialHighPass; + protected float _originalShakeDuration; + protected bool _originalRelativeHighPass; + protected AnimationCurve _originalShakeHighPass; + protected float _originalRemapHighPassZero; + protected float _originalRemapHighPassOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetAudioHighPassFilter = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newHighPassLevel = ShakeFloat(ShakeHighPass, RemapHighPassZero, RemapHighPassOne, RelativeHighPass, _initialHighPass); + _targetAudioHighPassFilter.cutoffFrequency = newHighPassLevel; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialHighPass = _targetAudioHighPassFilter.cutoffFrequency; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMAudioFilterHighPassShakeEvent(AnimationCurve highPassCurve, float duration, float remapMin, float remapMax, bool relativeHighPass = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeHighPass = ShakeHighPass; + _originalRemapHighPassZero = RemapHighPassZero; + _originalRemapHighPassOne = RemapHighPassOne; + _originalRelativeHighPass = RelativeHighPass; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeHighPass = highPassCurve; + RemapHighPassZero = remapMin * feedbacksIntensity; + RemapHighPassOne = remapMax * feedbacksIntensity; + RelativeHighPass = relativeHighPass; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetAudioHighPassFilter.cutoffFrequency = _initialHighPass; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeHighPass = _originalShakeHighPass; + RemapHighPassZero = _originalRemapHighPassZero; + RemapHighPassOne = _originalRemapHighPassOne; + RelativeHighPass = _originalRelativeHighPass; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMAudioFilterHighPassShakeEvent.Register(OnMMAudioFilterHighPassShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMAudioFilterHighPassShakeEvent.Unregister(OnMMAudioFilterHighPassShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMAudioFilterHighPassShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve highPassCurve, float duration, float remapMin, float remapMax, bool relativeHighPass = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve highPassCurve, float duration, float remapMin, float remapMax, bool relativeHighPass = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(highPassCurve, duration, remapMin, remapMax, relativeHighPass, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterHighPassShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterHighPassShaker.cs.meta new file mode 100644 index 0000000..a7f5885 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterHighPassShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ca043dc9da4b1e49a30103f3e9a5fa8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterLowPassShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterLowPassShaker.cs new file mode 100644 index 0000000..51eb358 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterLowPassShaker.cs @@ -0,0 +1,193 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an audio distortion low pass to shake its values remapped along a curve + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Audio/MMAudioFilterLowPassShaker")] + [RequireComponent(typeof(AudioLowPassFilter))] + public class MMAudioFilterLowPassShaker : MMShaker + { + [MMInspectorGroup("Low Pass", true, 54)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeLowPass = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeLowPass = new AnimationCurve(new Keyframe(0, 1f), new Keyframe(0.5f, 0f), new Keyframe(1, 1f)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(10f, 22000f)] + public float RemapLowPassZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(10f, 22000f)] + public float RemapLowPassOne = 10000f; + + /// the audio source to pilot + protected AudioLowPassFilter _targetAudioLowPassFilter; + protected float _initialLowPass; + protected float _originalShakeDuration; + protected bool _originalRelativeLowPass; + protected AnimationCurve _originalShakeLowPass; + protected float _originalRemapLowPassZero; + protected float _originalRemapLowPassOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetAudioLowPassFilter = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newLowPassLevel = ShakeFloat(ShakeLowPass, RemapLowPassZero, RemapLowPassOne, RelativeLowPass, _initialLowPass); + _targetAudioLowPassFilter.cutoffFrequency = newLowPassLevel; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialLowPass = _targetAudioLowPassFilter.cutoffFrequency; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMAudioFilterLowPassShakeEvent(AnimationCurve lowPassCurve, float duration, float remapMin, float remapMax, bool relativeLowPass = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeLowPass = ShakeLowPass; + _originalRemapLowPassZero = RemapLowPassZero; + _originalRemapLowPassOne = RemapLowPassOne; + _originalRelativeLowPass = RelativeLowPass; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeLowPass = lowPassCurve; + RemapLowPassZero = remapMin * feedbacksIntensity; + RemapLowPassOne = remapMax * feedbacksIntensity; + RelativeLowPass = relativeLowPass; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetAudioLowPassFilter.cutoffFrequency = _initialLowPass; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeLowPass = _originalShakeLowPass; + RemapLowPassZero = _originalRemapLowPassZero; + RemapLowPassOne = _originalRemapLowPassOne; + RelativeLowPass = _originalRelativeLowPass; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMAudioFilterLowPassShakeEvent.Register(OnMMAudioFilterLowPassShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMAudioFilterLowPassShakeEvent.Unregister(OnMMAudioFilterLowPassShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMAudioFilterLowPassShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve lowPassCurve, float duration, float remapMin, float remapMax, bool relativeLowPass = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve lowPassCurve, float duration, float remapMin, float remapMax, bool relativeLowPass = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(lowPassCurve, duration, remapMin, remapMax, relativeLowPass, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterLowPassShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterLowPassShaker.cs.meta new file mode 100644 index 0000000..a11f4cc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterLowPassShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebf9417587f151a47b3524335d88983e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterReverbShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterReverbShaker.cs new file mode 100644 index 0000000..9ed61eb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterReverbShaker.cs @@ -0,0 +1,199 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an audio reverb filter to shake its values remapped along a curve + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Audio/MMAudioFilterReverbShaker")] + [RequireComponent(typeof(AudioReverbFilter))] + public class MMAudioFilterReverbShaker : MMShaker + { + [MMInspectorGroup("Reverb", true, 55)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeReverb = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeReverb = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.5f, 1f), new Keyframe(1, 0f)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-10000f, 2000f)] + public float RemapReverbZero = -10000f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-10000f, 2000f)] + public float RemapReverbOne = 2000f; + + /// the audio source to pilot + protected AudioReverbFilter _targetAudioReverbFilter; + protected float _initialReverb; + protected float _originalShakeDuration; + protected bool _originalRelativeReverb; + protected AnimationCurve _originalShakeReverb; + protected float _originalRemapReverbZero; + protected float _originalRemapReverbOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetAudioReverbFilter = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newReverbLevel = ShakeFloat(ShakeReverb, RemapReverbZero, RemapReverbOne, RelativeReverb, _initialReverb); + _targetAudioReverbFilter.reverbLevel = newReverbLevel; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialReverb = _targetAudioReverbFilter.reverbLevel; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMAudioFilterReverbShakeEvent(AnimationCurve reverbCurve, float duration, float remapMin, float remapMax, bool relativeReverb = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeReverb = ShakeReverb; + _originalRemapReverbZero = RemapReverbZero; + _originalRemapReverbOne = RemapReverbOne; + _originalRelativeReverb = RelativeReverb; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeReverb = reverbCurve; + RemapReverbZero = remapMin * feedbacksIntensity; + RemapReverbOne = remapMax * feedbacksIntensity; + RelativeReverb = relativeReverb; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetAudioReverbFilter.reverbLevel = _initialReverb; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeReverb = _originalShakeReverb; + RemapReverbZero = _originalRemapReverbZero; + RemapReverbOne = _originalRemapReverbOne; + RelativeReverb = _originalRelativeReverb; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMAudioFilterReverbShakeEvent.Register(OnMMAudioFilterReverbShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMAudioFilterReverbShakeEvent.Unregister(OnMMAudioFilterReverbShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMAudioFilterReverbShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve reverbCurve, float duration, float remapMin, float remapMax, bool relativeReverb = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve reverbCurve, float duration, float remapMin, float remapMax, bool relativeReverb = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(reverbCurve, duration, remapMin, remapMax, relativeReverb, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterReverbShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterReverbShaker.cs.meta new file mode 100644 index 0000000..40bf64c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioFilterReverbShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e16a029f4e85daf40b26bf34dcb47b4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourcePitchShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourcePitchShaker.cs new file mode 100644 index 0000000..40476bf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourcePitchShaker.cs @@ -0,0 +1,193 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an AudioSource to shake its pitch remapped along a curve + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Audio/MMAudioSourcePitchShaker")] + [RequireComponent(typeof(AudioSource))] + public class MMAudioSourcePitchShaker : MMShaker + { + [MMInspectorGroup("Pitch", true, 57)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativePitch = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakePitch = new AnimationCurve(new Keyframe(0, 1f), new Keyframe(0.5f, 0f), new Keyframe(1, 1f)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-3f, 3f)] + public float RemapPitchZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-3f, 3f)] + public float RemapPitchOne = 1f; + + /// the audio source to pilot + protected AudioSource _targetAudioSource; + protected float _initialPitch; + protected float _originalShakeDuration; + protected bool _originalRelativePitch; + protected AnimationCurve _originalShakePitch; + protected float _originalRemapPitchZero; + protected float _originalRemapPitchOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetAudioSource = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newPitch = ShakeFloat(ShakePitch, RemapPitchZero, RemapPitchOne, RelativePitch, _initialPitch); + _targetAudioSource.pitch = newPitch; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialPitch = _targetAudioSource.pitch; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMAudioSourcePitchShakeEvent(AnimationCurve pitchCurve, float duration, float remapMin, float remapMax, bool relativePitch = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakePitch = ShakePitch; + _originalRemapPitchZero = RemapPitchZero; + _originalRemapPitchOne = RemapPitchOne; + _originalRelativePitch = RelativePitch; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakePitch = pitchCurve; + RemapPitchZero = remapMin * feedbacksIntensity; + RemapPitchOne = remapMax * feedbacksIntensity; + RelativePitch = relativePitch; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetAudioSource.pitch = _initialPitch; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakePitch = _originalShakePitch; + RemapPitchZero = _originalRemapPitchZero; + RemapPitchOne = _originalRemapPitchOne; + RelativePitch = _originalRelativePitch; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMAudioSourcePitchShakeEvent.Register(OnMMAudioSourcePitchShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMAudioSourcePitchShakeEvent.Unregister(OnMMAudioSourcePitchShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMAudioSourcePitchShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve pitchCurve, float duration, float remapMin, float remapMax, bool relativePitch = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve pitchCurve, float duration, float remapMin, float remapMax, bool relativePitch = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(pitchCurve, duration, remapMin, remapMax, relativePitch, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourcePitchShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourcePitchShaker.cs.meta new file mode 100644 index 0000000..bb99a1e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourcePitchShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cfddfd71be34fb43b85eec28d5cf24a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceStereoPanShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceStereoPanShaker.cs new file mode 100644 index 0000000..f7b30cf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceStereoPanShaker.cs @@ -0,0 +1,193 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an AudioSource to shake its stereo pan values remapped along a curve + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Audio/MMAudioSourceStereoPanShaker")] + [RequireComponent(typeof(AudioSource))] + public class MMAudioSourceStereoPanShaker : MMShaker + { + [MMInspectorGroup("Stereo Pan", true, 57)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeStereoPan = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeStereoPan = new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.3f, 1f), new Keyframe(0.6f, -1f), new Keyframe(1, 0f)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-1f, 1f)] + public float RemapStereoPanZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-1f, 1f)] + public float RemapStereoPanOne = 1f; + + /// the audio source to pilot + protected AudioSource _targetAudioSource; + protected float _initialStereoPan; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakeStereoPan; + protected float _originalRemapStereoPanZero; + protected float _originalRemapStereoPanOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetAudioSource = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newStereoPan = ShakeFloat(ShakeStereoPan, RemapStereoPanZero, RemapStereoPanOne, RelativeStereoPan, _initialStereoPan); + _targetAudioSource.panStereo = newStereoPan; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialStereoPan = _targetAudioSource.panStereo; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMAudioSourceStereoPanShakeEvent(AnimationCurve stereoPanCurve, float duration, float remapMin, float remapMax, bool relativeStereoPan = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeStereoPan = ShakeStereoPan; + _originalRemapStereoPanZero = RemapStereoPanZero; + _originalRemapStereoPanOne = RemapStereoPanOne; + _originalRelativeValues = RelativeStereoPan; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeStereoPan = stereoPanCurve; + RemapStereoPanZero = remapMin * feedbacksIntensity; + RemapStereoPanOne = remapMax * feedbacksIntensity; + RelativeStereoPan = relativeStereoPan; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetAudioSource.panStereo = _initialStereoPan; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeStereoPan = _originalShakeStereoPan; + RemapStereoPanZero = _originalRemapStereoPanZero; + RemapStereoPanOne = _originalRemapStereoPanOne; + RelativeStereoPan = _originalRelativeValues; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMAudioSourceStereoPanShakeEvent.Register(OnMMAudioSourceStereoPanShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMAudioSourceStereoPanShakeEvent.Unregister(OnMMAudioSourceStereoPanShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMAudioSourceStereoPanShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve stereoPanCurve, float duration, float remapMin, float remapMax, bool relativeStereoPan = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve stereoPanCurve, float duration, float remapMin, float remapMax, bool relativeStereoPan = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(stereoPanCurve, duration, remapMin, remapMax, relativeStereoPan, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceStereoPanShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceStereoPanShaker.cs.meta new file mode 100644 index 0000000..3487dd4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceStereoPanShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed3e1ef7541c2d7439c23e2e5f185b96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceVolumeShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceVolumeShaker.cs new file mode 100644 index 0000000..a13f4a3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceVolumeShaker.cs @@ -0,0 +1,193 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an AudioSource to shake its volume remapped along a curve + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Audio/MMAudioSourceVolumeShaker")] + [RequireComponent(typeof(AudioSource))] + public class MMAudioSourceVolumeShaker : MMShaker + { + [MMInspectorGroup("Volume", true, 59)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeVolume = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeVolume = new AnimationCurve(new Keyframe(0, 1f), new Keyframe(0.5f, 0f), new Keyframe(1, 1f)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-1f, 1f)] + public float RemapVolumeZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-1f, 1f)] + public float RemapVolumeOne = 1f; + + /// the audio source to pilot + protected AudioSource _targetAudioSource; + protected float _initialVolume; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakeVolume; + protected float _originalRemapVolumeZero; + protected float _originalRemapVolumeOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetAudioSource = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newVolume = ShakeFloat(ShakeVolume, RemapVolumeZero, RemapVolumeOne, RelativeVolume, _initialVolume); + _targetAudioSource.volume = newVolume; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialVolume = _targetAudioSource.volume; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMAudioSourceVolumeShakeEvent(AnimationCurve volumeCurve, float duration, float remapMin, float remapMax, bool relativeVolume = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeVolume = ShakeVolume; + _originalRemapVolumeZero = RemapVolumeZero; + _originalRemapVolumeOne = RemapVolumeOne; + _originalRelativeValues = RelativeVolume; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeVolume = volumeCurve; + RemapVolumeZero = remapMin * feedbacksIntensity; + RemapVolumeOne = remapMax * feedbacksIntensity; + RelativeVolume = relativeVolume; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetAudioSource.volume = _initialVolume; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeVolume = _originalShakeVolume; + RemapVolumeZero = _originalRemapVolumeZero; + RemapVolumeOne = _originalRemapVolumeOne; + RelativeVolume = _originalRelativeValues; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMAudioSourceVolumeShakeEvent.Register(OnMMAudioSourceVolumeShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMAudioSourceVolumeShakeEvent.Unregister(OnMMAudioSourceVolumeShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMAudioSourceVolumeShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve volumeCurve, float duration, float remapMin, float remapMax, bool relativeVolume = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve volumeCurve, float duration, float remapMin, float remapMax, bool relativeVolume = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(volumeCurve, duration, remapMin, remapMax, relativeVolume, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceVolumeShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceVolumeShaker.cs.meta new file mode 100644 index 0000000..6bb5dfd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMAudioSourceVolumeShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90d58dde470982e44ab64592b6029c50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMBlink.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMBlink.cs new file mode 100644 index 0000000..3c959eb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMBlink.cs @@ -0,0 +1,482 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Feedbacks; +using System; +using System.Collections.Generic; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + /// + /// Describes a blink phase, defined by a duration for the phase, and the time it should remain inactive and active, sequentially + /// For the duration of the phase, the object will be off for OffDuration, then on for OnDuration, then off again for OffDuration, etc + /// If you want a grenade to blink briefly every .2 seconds, for 1 second, these parameters are what you're after : + /// PhaseDuration = 1f; + /// OffDuration = 0.2f; + /// OnDuration = 0.1f; + /// + [Serializable] + public class BlinkPhase + { + /// the duration of that specific phase, in seconds + public float PhaseDuration = 1f; + /// the time the object should remain off + public float OffDuration = 0.2f; + /// the time the object should then remain on + public float OnDuration = 0.1f; + /// the speed at which to lerp to off state + public float OffLerpDuration = 0.05f; + /// the speed at which to lerp to on state + public float OnLerpDuration = 0.05f; + } + + [Serializable] + public class BlinkTargetRenderer + { + public Renderer TargetRenderer; + public int TargetMaterialIndex; + } + + /// + /// Add this class to a GameObject to make it blink, either by enabling/disabling a gameobject, changing its alpha, emission intensity, or a value on a shader) + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Various/MMBlink")] + public class MMBlink : MMMonoBehaviour + { + /// the possible states of the blinking object + public enum States { On, Off } + /// the possible methods to blink an object + public enum Methods { SetGameObjectActive, MaterialAlpha, MaterialEmissionIntensity, ShaderFloatValue } + + [MMInspectorGroup("Blink Method", true, 17)] + /// the selected method to blink the target object + [Tooltip("the selected method to blink the target object")] + public Methods Method = Methods.SetGameObjectActive; + /// the object to set active/inactive if that method was chosen + [Tooltip("the object to set active/inactive if that method was chosen")] + [MMFEnumCondition("Method", (int)Methods.SetGameObjectActive)] + public GameObject TargetGameObject; + /// the target renderer to work with + [Tooltip("the target renderer to work with")] + [MMFEnumCondition("Method", (int)Methods.MaterialAlpha, (int)Methods.MaterialEmissionIntensity, (int)Methods.ShaderFloatValue)] + public Renderer TargetRenderer; + /// the material index to target + [Tooltip("the material index to target")] + [MMFEnumCondition("Method", (int)Methods.MaterialAlpha, (int)Methods.MaterialEmissionIntensity, (int)Methods.ShaderFloatValue)] + public int MaterialIndex = 0; + /// the shader property to alter a float on + [Tooltip("the shader property to alter a float on")] + [MMFEnumCondition("Method", (int)Methods.MaterialAlpha, (int)Methods.MaterialEmissionIntensity, (int)Methods.ShaderFloatValue)] + public string ShaderPropertyName = "_Color"; + /// the value to apply when blinking is off + [Tooltip("the value to apply when blinking is off")] + [MMFEnumCondition("Method", (int)Methods.MaterialAlpha, (int)Methods.MaterialEmissionIntensity, (int)Methods.ShaderFloatValue)] + public float OffValue = 0f; + /// the value to apply when blinking is on + [Tooltip("the value to apply when blinking is on")] + [MMFEnumCondition("Method", (int)Methods.MaterialAlpha, (int)Methods.MaterialEmissionIntensity, (int)Methods.ShaderFloatValue)] + public float OnValue = 1f; + /// whether to lerp these values or not + [Tooltip("whether to lerp these values or not")] + [MMFEnumCondition("Method", (int)Methods.MaterialAlpha, (int)Methods.MaterialEmissionIntensity, (int)Methods.ShaderFloatValue)] + public bool LerpValue = true; + /// the curve to apply to the lerping + [Tooltip("the curve to apply to the lerping")] + [MMFEnumCondition("Method", (int)Methods.MaterialAlpha, (int)Methods.MaterialEmissionIntensity, (int)Methods.ShaderFloatValue)] + public AnimationCurve Curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1.05f), new Keyframe(1, 0)); + /// if this is true, this component will use material property blocks instead of working on an instance of the material. + [Tooltip("if this is true, this component will use material property blocks instead of working on an instance of the material.")] + public bool UseMaterialPropertyBlocks = false; + + [MMInspectorGroup("Extra Targets", true, 12)] + /// a list of optional extra renderers and their material index to target + [Tooltip("a list of optional extra renderers and their material index to target")] + public List ExtraRenderers; + /// a list of optional extra game objects to target + [Tooltip("a list of optional extra game objects to target")] + public List ExtraGameObjects; + + [MMInspectorGroup("State", true, 18)] + /// whether the object should blink or not + [Tooltip("whether the object should blink or not")] + public bool Blinking = true; + /// whether or not to force a certain state on exit + [Tooltip("whether or not to force a certain state on exit")] + public bool ForceStateOnExit = false; + /// the state to apply on exit + [Tooltip("the state to apply on exit")] + [MMFCondition("ForceStateOnExit", true)] + public States StateOnExit = States.On; + + [MMInspectorGroup("TimeScale", true, 120)] + /// whether or not this MMBlink should operate on unscaled time + [Tooltip("whether or not this MMBlink should operate on unscaled time")] + public TimescaleModes TimescaleMode = TimescaleModes.Scaled; + + [MMInspectorGroup("Sequence", true, 121)] + /// how many times the sequence should repeat (-1 : infinite) + [Tooltip("how many times the sequence should repeat (-1 : infinite)")] + public int RepeatCount = 0; + /// The list of phases to apply blinking with + [Tooltip("The list of phases to apply blinking with")] + public List Phases; + + [MMInspectorGroup("Debug", true, 122)] + + [MMInspectorButtonBar(new string[] { "ToggleBlinking", "StartBlinking", "StopBlinking" }, + new string[] { "ToggleBlinking", "StartBlinking", "StopBlinking" }, + new bool[] { true, true, true }, + new string[] { "main-call-to-action", "", "" })] + public bool DebugToolbar; + + /// is the blinking object in an active state right now? + [Tooltip("is the blinking object in an active state right now?")] + [MMFReadOnly] + public bool Active = false; + /// the index of the phase we're currently in + [Tooltip("the index of the phase we're currently in")] + [MMFReadOnly] + public int CurrentPhaseIndex = 0; + + + public virtual float GetTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + protected float _lastBlinkAt = 0f; + protected float _currentPhaseStartedAt = 0f; + protected float _currentBlinkDuration; + protected float _currentLerpDuration; + protected int _propertyID; + protected float _initialShaderFloatValue; + protected Color _initialColor; + protected Color _currentColor; + protected int _repeatCount; + protected MaterialPropertyBlock _propertyBlock; + protected List _extraPropertyBlocks; + protected List _extraInitialColors; + + /// + /// Makes the object blink if it wasn't already blinking, stops it otherwise + /// + public virtual void ToggleBlinking() + { + Blinking = !Blinking; + ResetBlinkProperties(); + } + + /// + /// Makes the object start blinking + /// + public virtual void StartBlinking() + { + this.enabled = true; + Blinking = true; + ResetBlinkProperties(); + } + + /// + /// Makes the object stop blinking + /// + public virtual void StopBlinking() + { + Blinking = false; + ResetBlinkProperties(); + } + + /// + /// On Update, we blink if we are supposed to + /// + protected virtual void Update() + { + DetermineState(); + + if (!Blinking) + { + return; + } + + Blink(); + } + + /// + /// Determines the current phase and determines whether the object should be active or inactive + /// + protected virtual void DetermineState() + { + DetermineCurrentPhase(); + + if (!Blinking) + { + return; + } + + if (Active) + { + if (GetTime() - _lastBlinkAt > Phases[CurrentPhaseIndex].OnDuration) + { + Active = false; + _lastBlinkAt = GetTime(); + } + } + else + { + if (GetTime() - _lastBlinkAt > Phases[CurrentPhaseIndex].OffDuration) + { + Active = true; + _lastBlinkAt = GetTime(); + } + } + _currentBlinkDuration = Active ? Phases[CurrentPhaseIndex].OnDuration : Phases[CurrentPhaseIndex].OffDuration; + _currentLerpDuration = Active ? Phases[CurrentPhaseIndex].OnLerpDuration : Phases[CurrentPhaseIndex].OffLerpDuration; + } + + /// + /// Blinks the object based on its computed state + /// + protected virtual void Blink() + { + float currentValue = _currentColor.a; + float initialValue = Active ? OffValue : OnValue; + float targetValue = Active ? OnValue : OffValue; + float newValue = targetValue; + + if (LerpValue && (GetTime() - _lastBlinkAt < _currentLerpDuration)) + { + float t = MMFeedbacksHelpers.Remap(GetTime() - _lastBlinkAt, 0f, _currentLerpDuration, 0f, 1f); + newValue = Curve.Evaluate(t); + newValue = MMFeedbacksHelpers.Remap(newValue, 0f, 1f, initialValue, targetValue); + } + else + { + newValue = targetValue; + } + + ApplyBlink(Active, newValue); + } + + /// + /// The duration of the blink is the sum of its phases' durations, plus the time it takes to repeat them all + /// + public virtual float Duration + { + get + { + if ((RepeatCount < 0) + || (Phases.Count == 0)) + { + return 0f; + } + + float totalDuration = 0f; + foreach (BlinkPhase phase in Phases) + { + totalDuration += phase.PhaseDuration; + } + return totalDuration + totalDuration * RepeatCount; + } + } + + /// + /// Applies the blink to the object based on its type + /// + /// + /// + protected virtual void ApplyBlink(bool active, float value) + { + switch (Method) + { + case Methods.SetGameObjectActive: + TargetGameObject.SetActive(active); + foreach (GameObject go in ExtraGameObjects) + { + go.SetActive(active); + } + break; + case Methods.MaterialAlpha: + _currentColor.a = value; + ApplyCurrentColor(TargetRenderer); + for (var index = 0; index < ExtraRenderers.Count; index++) + { + var blinkRenderer = ExtraRenderers[index]; + ApplyCurrentColor(blinkRenderer.TargetRenderer); + } + break; + case Methods.MaterialEmissionIntensity: + _currentColor = _initialColor * value; + ApplyCurrentColor(TargetRenderer); + for (var index = 0; index < ExtraRenderers.Count; index++) + { + var blinkRenderer = ExtraRenderers[index]; + ApplyCurrentColor(blinkRenderer.TargetRenderer); + } + break; + case Methods.ShaderFloatValue: + ApplyFloatValue(TargetRenderer, value); + for (var index = 0; index < ExtraRenderers.Count; index++) + { + var blinkRenderer = ExtraRenderers[index]; + ApplyFloatValue(blinkRenderer.TargetRenderer, value); + } + break; + } + } + + protected virtual void ApplyFloatValue(Renderer targetRenderer, float value) + { + if (UseMaterialPropertyBlocks) + { + targetRenderer.GetPropertyBlock(_propertyBlock, MaterialIndex); + _propertyBlock.SetFloat(_propertyID, value); + targetRenderer.SetPropertyBlock(_propertyBlock); + } + else + { + targetRenderer.materials[MaterialIndex].SetFloat(_propertyID, value); + } + } + + protected virtual void ApplyCurrentColor(Renderer targetRenderer) + { + if (UseMaterialPropertyBlocks) + { + targetRenderer.GetPropertyBlock(_propertyBlock, MaterialIndex); + _propertyBlock.SetColor(_propertyID, _currentColor); + targetRenderer.SetPropertyBlock(_propertyBlock); + } + else + { + targetRenderer.materials[MaterialIndex].SetColor(_propertyID, _currentColor); + } + } + + /// + /// Determines the current phase index based on phase durations + /// + protected virtual void DetermineCurrentPhase() + { + // if the phase duration is null or less, we'll be in that phase forever, and return + if (Phases[CurrentPhaseIndex].PhaseDuration <= 0) + { + return; + } + // if the phase's duration is elapsed, we move to the next phase + if (GetTime() - _currentPhaseStartedAt > Phases[CurrentPhaseIndex].PhaseDuration) + { + CurrentPhaseIndex++; + _currentPhaseStartedAt = GetTime(); + } + if (CurrentPhaseIndex > Phases.Count -1) + { + CurrentPhaseIndex = 0; + if (RepeatCount != -1) + { + _repeatCount--; + if (_repeatCount < 0) + { + ResetBlinkProperties(); + + if (ForceStateOnExit) + { + if (StateOnExit == States.Off) + { + ApplyBlink(false, 0f); + } + else + { + ApplyBlink(true, 1f); + } + } + + Blinking = false; + } + } + } + } + + /// + /// On enable, initializes blink properties + /// + protected virtual void OnEnable() + { + InitializeBlinkProperties(); + } + + /// + /// Resets counters and grabs properties and initial colors + /// + protected virtual void InitializeBlinkProperties() + { + if (Phases.Count == 0) + { + Debug.LogError("MMBlink : You need to define at least one phase for this component to work."); + this.enabled = false; + return; + } + + _currentPhaseStartedAt = GetTime(); + CurrentPhaseIndex = 0; + _repeatCount = RepeatCount; + _propertyBlock = new MaterialPropertyBlock(); + + switch (Method) + { + case Methods.MaterialAlpha: + GetInitialColor(); + break; + case Methods.MaterialEmissionIntensity: + GetInitialColor(); + break; + case Methods.ShaderFloatValue: + GetInitialFloatValue(); + break; + } + } + + protected virtual void GetInitialColor() + { + TargetRenderer.GetPropertyBlock(_propertyBlock, MaterialIndex); + _propertyID = Shader.PropertyToID(ShaderPropertyName); + _initialColor = UseMaterialPropertyBlocks ? TargetRenderer.sharedMaterials[MaterialIndex].GetColor(_propertyID) : TargetRenderer.materials[MaterialIndex].GetColor(_propertyID); + _currentColor = _initialColor; + } + + protected virtual void GetInitialFloatValue() + { + TargetRenderer.GetPropertyBlock(_propertyBlock, MaterialIndex); + _propertyID = Shader.PropertyToID(ShaderPropertyName); + _initialShaderFloatValue = UseMaterialPropertyBlocks ? TargetRenderer.sharedMaterials[MaterialIndex].GetFloat(_propertyID) : TargetRenderer.materials[MaterialIndex].GetFloat(_propertyID); + } + + /// + /// Resets blinking properties to original values + /// + protected virtual void ResetBlinkProperties() + { + _currentPhaseStartedAt = GetTime(); + CurrentPhaseIndex = 0; + _repeatCount = RepeatCount; + + float value = 1f; + if (Method == Methods.ShaderFloatValue) + { + value = _initialShaderFloatValue; + } + ApplyBlink(false, value); + } + + protected void OnDisable() + { + if (ForceStateOnExit) + { + if (StateOnExit == States.Off) + { + ApplyBlink(false, 0f); + } + else + { + ApplyBlink(true, 1f); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMBlink.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMBlink.cs.meta new file mode 100644 index 0000000..9ba7555 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMBlink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39cb364c2dfacad469e5df86d6ec5e92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraClippingPlanesShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraClippingPlanesShaker.cs new file mode 100644 index 0000000..66f2f31 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraClippingPlanesShaker.cs @@ -0,0 +1,228 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to a camera and it'll let you control its near and far clipping planes + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Camera/MMCameraClippingPlanesShaker")] + [RequireComponent(typeof(Camera))] + public class MMCameraClippingPlanesShaker : MMShaker + { + [MMInspectorGroup("Clipping Planes", true, 31)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeClippingPlanes = false; + + [MMInspectorGroup("Near Plane", true, 32)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeNear = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapNearZero = 0.3f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapNearOne = 100f; + + [MMInspectorGroup("Far Plane", true, 33)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeFar = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFarZero = 1000f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFarOne = 1000f; + + protected Camera _targetCamera; + protected float _initialNear; + protected float _initialFar; + + protected float _originalShakeDuration; + protected bool _originalRelativeClippingPlanes; + + protected AnimationCurve _originalShakeNear; + protected float _originalRemapNearZero; + protected float _originalRemapNearOne; + + protected AnimationCurve _originalShakeFar; + protected float _originalRemapFarZero; + protected float _originalRemapFarOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetCamera = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newNear = ShakeFloat(ShakeNear, RemapNearZero, RemapNearOne, RelativeClippingPlanes, _initialNear); + _targetCamera.nearClipPlane = newNear; + float newFar = ShakeFloat(ShakeFar, RemapFarZero, RemapFarOne, RelativeClippingPlanes, _initialFar); + _targetCamera.farClipPlane = newFar; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialNear = _targetCamera.nearClipPlane; + _initialFar = _targetCamera.farClipPlane; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMCameraClippingPlanesShakeEvent(AnimationCurve animNearCurve, float duration, float remapNearMin, float remapNearMax, AnimationCurve animFarCurve, float remapFarMin, float remapFarMax, bool relativeValues = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + if (!Interruptible && Shaking) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeNear = ShakeNear; + _originalShakeFar = ShakeFar; + _originalRemapNearZero = RemapNearZero; + _originalRemapNearOne = RemapNearOne; + _originalRemapFarZero = RemapFarZero; + _originalRemapFarOne = RemapFarOne; + _originalRelativeClippingPlanes = RelativeClippingPlanes; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeNear = animNearCurve; + RemapNearZero = remapNearMin * feedbacksIntensity; + RemapNearOne = remapNearMax * feedbacksIntensity; + ShakeFar = animFarCurve; + RemapFarZero = remapFarMin * feedbacksIntensity; + RemapFarOne = remapFarMax * feedbacksIntensity; + RelativeClippingPlanes = relativeValues; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetCamera.nearClipPlane = _initialNear; + _targetCamera.farClipPlane = _initialFar; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeNear = _originalShakeNear; + ShakeFar = _originalShakeFar; + RemapNearZero = _originalRemapNearZero; + RemapNearOne = _originalRemapNearOne; + RemapFarZero = _originalRemapFarZero; + RemapFarOne = _originalRemapFarOne; + RelativeClippingPlanes = _originalRelativeClippingPlanes; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMCameraClippingPlanesShakeEvent.Register(OnMMCameraClippingPlanesShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMCameraClippingPlanesShakeEvent.Unregister(OnMMCameraClippingPlanesShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMCameraClippingPlanesShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve animNearCurve, float duration, float remapNearMin, float remapNearMax, AnimationCurve animFarCurve, float remapFarMin, float remapFarMax, bool relativeValue = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve animNearCurve, float duration, float remapNearMin, float remapNearMax, AnimationCurve animFarCurve, float remapFarMin, float remapFarMax, bool relativeValue = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(animNearCurve, duration, remapNearMin, remapNearMax, animFarCurve, remapFarMin, remapFarMax, relativeValue, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraClippingPlanesShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraClippingPlanesShaker.cs.meta new file mode 100644 index 0000000..68c2e8e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraClippingPlanesShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96f05f56a5059314193ef8b32da639ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraFieldOfViewShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraFieldOfViewShaker.cs new file mode 100644 index 0000000..490fce0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraFieldOfViewShaker.cs @@ -0,0 +1,197 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to a camera and it'll let you control its field of view over time, can be piloted by a MMFeedbackCameraFieldOfView + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Camera/MMCameraFieldOfViewShaker")] + [RequireComponent(typeof(Camera))] + public class MMCameraFieldOfViewShaker : MMShaker + { + [MMInspectorGroup("Field of View", true, 34)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeFieldOfView = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeFieldOfView = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 179f)] + public float RemapFieldOfViewZero = 60f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 179f)] + public float RemapFieldOfViewOne = 120f; + + protected Camera _targetCamera; + protected float _initialFieldOfView; + protected float _originalShakeDuration; + protected bool _originalRelativeFieldOfView; + protected AnimationCurve _originalShakeFieldOfView; + protected float _originalRemapFieldOfViewZero; + protected float _originalRemapFieldOfViewOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetCamera = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newFieldOfView = ShakeFloat(ShakeFieldOfView, RemapFieldOfViewZero, RemapFieldOfViewOne, RelativeFieldOfView, _initialFieldOfView); + _targetCamera.fieldOfView = newFieldOfView; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialFieldOfView = _targetCamera.fieldOfView; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMCameraFieldOfViewShakeEvent(AnimationCurve distortionCurve, float duration, float remapMin, float remapMax, bool relativeDistortion = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + if (!Interruptible && Shaking) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeFieldOfView = ShakeFieldOfView; + _originalRemapFieldOfViewZero = RemapFieldOfViewZero; + _originalRemapFieldOfViewOne = RemapFieldOfViewOne; + _originalRelativeFieldOfView = RelativeFieldOfView; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeFieldOfView = distortionCurve; + RemapFieldOfViewZero = remapMin * feedbacksIntensity; + RemapFieldOfViewOne = remapMax * feedbacksIntensity; + RelativeFieldOfView = relativeDistortion; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetCamera.fieldOfView = _initialFieldOfView; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeFieldOfView = _originalShakeFieldOfView; + RemapFieldOfViewZero = _originalRemapFieldOfViewZero; + RemapFieldOfViewOne = _originalRemapFieldOfViewOne; + RelativeFieldOfView = _originalRelativeFieldOfView; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMCameraFieldOfViewShakeEvent.Register(OnMMCameraFieldOfViewShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMCameraFieldOfViewShakeEvent.Unregister(OnMMCameraFieldOfViewShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMCameraFieldOfViewShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve animCurve, float duration, float remapMin, float remapMax, bool relativeValue = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve animCurve, float duration, float remapMin, float remapMax, bool relativeValue = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(animCurve, duration, remapMin, remapMax, relativeValue, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraFieldOfViewShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraFieldOfViewShaker.cs.meta new file mode 100644 index 0000000..eb27af8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraFieldOfViewShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1b8594b6c8c7fe478fab3b86d0b62db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraOrthographicSizeShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraOrthographicSizeShaker.cs new file mode 100644 index 0000000..f49b796 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraOrthographicSizeShaker.cs @@ -0,0 +1,195 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to a camera and it'll let you control its orthographic size over time, can be piloted by a MMFeedbackCameraOrthographicSize + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Camera/MMCameraOrthographicSizeShaker")] + [RequireComponent(typeof(Camera))] + public class MMCameraOrthographicSizeShaker : MMShaker + { + [MMInspectorGroup("Orthographic Size", true, 37)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeOrthographicSize = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeOrthographicSize = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapOrthographicSizeZero = 5f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapOrthographicSizeOne = 10f; + + protected Camera _targetCamera; + protected float _initialOrthographicSize; + protected float _originalShakeDuration; + protected bool _originalRelativeOrthographicSize; + protected AnimationCurve _originalShakeOrthographicSize; + protected float _originalRemapOrthographicSizeZero; + protected float _originalRemapOrthographicSizeOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _targetCamera = this.gameObject.GetComponent(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newOrthographicSize = ShakeFloat(ShakeOrthographicSize, RemapOrthographicSizeZero, RemapOrthographicSizeOne, RelativeOrthographicSize, _initialOrthographicSize); + _targetCamera.orthographicSize = newOrthographicSize; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialOrthographicSize = _targetCamera.orthographicSize; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMCameraOrthographicSizeShakeEvent(AnimationCurve distortionCurve, float duration, float remapMin, float remapMax, bool relativeDistortion = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + if (!Interruptible && Shaking) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeOrthographicSize = ShakeOrthographicSize; + _originalRemapOrthographicSizeZero = RemapOrthographicSizeZero; + _originalRemapOrthographicSizeOne = RemapOrthographicSizeOne; + _originalRelativeOrthographicSize = RelativeOrthographicSize; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeOrthographicSize = distortionCurve; + RemapOrthographicSizeZero = remapMin * feedbacksIntensity; + RemapOrthographicSizeOne = remapMax * feedbacksIntensity; + RelativeOrthographicSize = relativeDistortion; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _targetCamera.orthographicSize = _initialOrthographicSize; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeOrthographicSize = _originalShakeOrthographicSize; + RemapOrthographicSizeZero = _originalRemapOrthographicSizeZero; + RemapOrthographicSizeOne = _originalRemapOrthographicSizeOne; + RelativeOrthographicSize = _originalRelativeOrthographicSize; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMCameraOrthographicSizeShakeEvent.Register(OnMMCameraOrthographicSizeShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMCameraOrthographicSizeShakeEvent.Unregister(OnMMCameraOrthographicSizeShakeEvent); + } + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMCameraOrthographicSizeShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve animCurve, float duration, float remapMin, float remapMax, bool relativeValue = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve animCurve, float duration, float remapMin, float remapMax, bool relativeValue = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(animCurve, duration, remapMin, remapMax, relativeValue, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraOrthographicSizeShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraOrthographicSizeShaker.cs.meta new file mode 100644 index 0000000..eca0150 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraOrthographicSizeShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31579fc1a653bad4fb53e3b1931fdd27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShaker.cs new file mode 100644 index 0000000..ef37695 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShaker.cs @@ -0,0 +1,183 @@ +using UnityEngine; +using System; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + /// + /// Camera shake properties + /// + public struct MMCameraShakeProperties + { + public float Duration; + public float Amplitude; + public float Frequency; + public float AmplitudeX; + public float AmplitudeY; + public float AmplitudeZ; + + public MMCameraShakeProperties(float duration, float amplitude, float frequency, float amplitudeX = 0f, float amplitudeY = 0f, float amplitudeZ = 0f) + { + Duration = duration; + Amplitude = amplitude; + Frequency = frequency; + AmplitudeX = amplitudeX; + AmplitudeY = amplitudeY; + AmplitudeZ = amplitudeZ; + } + } + + public enum MMCameraZoomModes { For, Set, Reset } + + public struct MMCameraZoomEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(MMCameraZoomModes mode, float newFieldOfView, float transitionDuration, float duration, MMChannelData channelData, bool useUnscaledTime = false, bool stop = false, bool relative = false, bool restore = false, MMTweenType tweenType = null); + + static public void Trigger(MMCameraZoomModes mode, float newFieldOfView, float transitionDuration, float duration, MMChannelData channelData, bool useUnscaledTime = false, bool stop = false, bool relative = false, bool restore = false, MMTweenType tweenType = null) + { + OnEvent?.Invoke(mode, newFieldOfView, transitionDuration, duration, channelData, useUnscaledTime, stop, relative, restore, tweenType); + } + } + + public struct MMCameraShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float duration, float amplitude, float frequency, float amplitudeX, float amplitudeY, float amplitudeZ, bool infinite = false, MMChannelData channelData = null, bool useUnscaledTime = false); + + static public void Trigger(float duration, float amplitude, float frequency, float amplitudeX, float amplitudeY, float amplitudeZ, bool infinite = false, MMChannelData channelData = null, bool useUnscaledTime = false) + { + OnEvent?.Invoke(duration, amplitude, frequency, amplitudeX, amplitudeY, amplitudeZ, infinite, channelData, useUnscaledTime); + } + } + + public struct MMCameraShakeStopEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(MMChannelData channelData); + + static public void Trigger(MMChannelData channelData) + { + OnEvent?.Invoke(channelData); + } + } + + [RequireComponent(typeof(MMWiggle))] + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Camera/MMCameraShaker")] + /// + /// A class to add to your camera. It'll listen to MMCameraShakeEvents and will shake your camera accordingly + /// + public class MMCameraShaker : MonoBehaviour + { + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + /// a cooldown, in seconds, after a shake, during which no other shake can start + [Tooltip("a cooldown, in seconds, after a shake, during which no other shake can start")] + public float CooldownBetweenShakes = 0f; + + protected MMWiggle _wiggle; + protected float _shakeStartedTimestamp = -Single.MaxValue; + + /// + /// On Awake, grabs the MMShaker component + /// + protected virtual void Awake() + { + _wiggle = GetComponent(); + } + + /// + /// Shakes the camera for Duration seconds, by the desired amplitude and frequency + /// + /// Duration. + /// Amplitude. + /// Frequency. + public virtual void ShakeCamera(float duration, float amplitude, float frequency, float amplitudeX, float amplitudeY, float amplitudeZ, bool useUnscaledTime) + { + if (Time.unscaledTime - _shakeStartedTimestamp < CooldownBetweenShakes) + { + return; + } + + if ((amplitudeX != 0f) || (amplitudeY != 0f) || (amplitudeZ != 0f)) + { + _wiggle.PositionWiggleProperties.AmplitudeMin.x = -amplitudeX; + _wiggle.PositionWiggleProperties.AmplitudeMin.y = -amplitudeY; + _wiggle.PositionWiggleProperties.AmplitudeMin.z = -amplitudeZ; + + _wiggle.PositionWiggleProperties.AmplitudeMax.x = amplitudeX; + _wiggle.PositionWiggleProperties.AmplitudeMax.y = amplitudeY; + _wiggle.PositionWiggleProperties.AmplitudeMax.z = amplitudeZ; + } + else + { + _wiggle.PositionWiggleProperties.AmplitudeMin = Vector3.one * -amplitude; + _wiggle.PositionWiggleProperties.AmplitudeMax = Vector3.one * amplitude; + } + + _shakeStartedTimestamp = Time.unscaledTime; + _wiggle.PositionWiggleProperties.UseUnscaledTime = useUnscaledTime; + _wiggle.PositionWiggleProperties.FrequencyMin = frequency; + _wiggle.PositionWiggleProperties.FrequencyMax = frequency; + _wiggle.PositionWiggleProperties.NoiseFrequencyMin = frequency * Vector3.one; + _wiggle.PositionWiggleProperties.NoiseFrequencyMax = frequency * Vector3.one; + _wiggle.WigglePosition(duration); + } + + /// + /// When a MMCameraShakeEvent is caught, shakes the camera + /// + /// Shake event. + public virtual void OnCameraShakeEvent(float duration, float amplitude, float frequency, float amplitudeX, float amplitudeY, float amplitudeZ, bool infinite, MMChannelData channelData, bool useUnscaledTime) + { + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return; + } + this.ShakeCamera (duration, amplitude, frequency, amplitudeX, amplitudeY, amplitudeZ, useUnscaledTime); + } + + /// + /// On enable, starts listening for events + /// + protected virtual void OnEnable() + { + MMCameraShakeEvent.Register(OnCameraShakeEvent); + } + + /// + /// On disable, stops listening to events + /// + protected virtual void OnDisable() + { + MMCameraShakeEvent.Unregister(OnCameraShakeEvent); + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShaker.cs.meta new file mode 100644 index 0000000..844a76a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShaker.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6bf8e915527fa424a8b17dc168fe20eb +timeCreated: 1522004600 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShakerRotation.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShakerRotation.cs new file mode 100644 index 0000000..e8f1aeb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShakerRotation.cs @@ -0,0 +1,44 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// A variant of the Camera Shaker that acts on the rotation instead of the position. Careful, can cause vertigo to some users. + /// + public class MMCameraShakerRotation : MMCameraShaker + { + /// + /// Shakes the camera for Duration seconds, by the desired amplitude and frequency + /// + /// Duration. + /// Amplitude. + /// Frequency. + public override void ShakeCamera(float duration, float amplitude, float frequency, float amplitudeX, float amplitudeY, float amplitudeZ, bool useUnscaledTime) + { + if ((amplitudeX != 0f) || (amplitudeY != 0f) || (amplitudeZ != 0f)) + { + _wiggle.RotationWiggleProperties.AmplitudeMin.x = -amplitudeX; + _wiggle.RotationWiggleProperties.AmplitudeMin.y = -amplitudeY; + _wiggle.RotationWiggleProperties.AmplitudeMin.z = -amplitudeZ; + + _wiggle.RotationWiggleProperties.AmplitudeMax.x = amplitudeX; + _wiggle.RotationWiggleProperties.AmplitudeMax.y = amplitudeY; + _wiggle.RotationWiggleProperties.AmplitudeMax.z = amplitudeZ; + } + else + { + _wiggle.RotationWiggleProperties.AmplitudeMin = Vector3.one * -amplitude; + _wiggle.RotationWiggleProperties.AmplitudeMax = Vector3.one * amplitude; + } + + _wiggle.RotationWiggleProperties.UseUnscaledTime = useUnscaledTime; + _wiggle.RotationWiggleProperties.FrequencyMin = frequency; + _wiggle.RotationWiggleProperties.FrequencyMax = frequency; + _wiggle.RotationWiggleProperties.NoiseFrequencyMin = frequency * Vector3.one; + _wiggle.RotationWiggleProperties.NoiseFrequencyMax = frequency * Vector3.one; + _wiggle.WiggleRotation(duration); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShakerRotation.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShakerRotation.cs.meta new file mode 100644 index 0000000..2b3e836 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraShakerRotation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 531894cbc68d4bf49a71825ad87c3305 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraZoom.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraZoom.cs new file mode 100644 index 0000000..794e8d4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraZoom.cs @@ -0,0 +1,228 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This class will allow you to trigger zooms on your camera by sending MMCameraZoomEvents from any other class + /// + [RequireComponent(typeof(Camera))] + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Camera/MMCameraZoom")] + public class MMCameraZoom : MonoBehaviour + { + [Header("Channel")] + [MMFInspectorGroup("Shaker Settings", true, 3)] + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + [Header("Transition Speed")] + /// the animation curve to apply to the zoom transition + [Tooltip("the animation curve to apply to the zoom transition")] + public MMTweenType ZoomTween = new MMTweenType( new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f))); + + [Header("Test Zoom")] + /// the mode to apply the zoom in when using the test button in the inspector + [Tooltip("the mode to apply the zoom in when using the test button in the inspector")] + public MMCameraZoomModes TestMode; + /// the target field of view to apply the zoom in when using the test button in the inspector + [Tooltip("the target field of view to apply the zoom in when using the test button in the inspector")] + public float TestFieldOfView = 30f; + /// the transition duration to apply the zoom in when using the test button in the inspector + [Tooltip("the transition duration to apply the zoom in when using the test button in the inspector")] + public float TestTransitionDuration = 0.1f; + /// the duration to apply the zoom in when using the test button in the inspector + [Tooltip("the duration to apply the zoom in when using the test button in the inspector")] + public float TestDuration = 0.05f; + + [MMFInspectorButton("TestZoom")] + /// an inspector button to test the zoom in play mode + public bool TestZoomButton; + + public virtual float GetTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + public virtual TimescaleModes TimescaleMode { get; set; } + + protected Camera _camera; + protected float _initialFieldOfView; + protected MMCameraZoomModes _mode; + protected bool _zooming = false; + protected float _startFieldOfView; + protected float _transitionDuration; + protected float _duration; + protected float _targetFieldOfView; + protected int _direction = 1; + protected float _reachedDestinationTimestamp; + protected bool _destinationReached = false; + protected float _elapsedTime = 0f; + protected float _zoomStartedAt = 0f; + + /// + /// On Awake we grab our virtual camera + /// + protected virtual void Awake() + { + _camera = this.gameObject.GetComponent(); + _initialFieldOfView = _camera.fieldOfView; + } + + /// + /// On Update if we're zooming we modify our field of view accordingly + /// + protected virtual void Update() + { + if (!_zooming) + { + return; + } + + _elapsedTime = GetTime() - _zoomStartedAt; + if (_elapsedTime <= _transitionDuration) + { + float t = MMMaths.Remap(_elapsedTime, 0f, _transitionDuration, 0f, 1f); + _camera.fieldOfView = Mathf.LerpUnclamped(_startFieldOfView, _targetFieldOfView, ZoomTween.Evaluate(t)); + } + else + { + if (!_destinationReached) + { + _reachedDestinationTimestamp = GetTime(); + _destinationReached = true; + } + if ((_mode == MMCameraZoomModes.For) && (_direction == 1)) + { + if (GetTime() - _reachedDestinationTimestamp > _duration) + { + _direction = -1; + _zoomStartedAt = GetTime(); + _startFieldOfView = _targetFieldOfView; + _targetFieldOfView = _initialFieldOfView; + } + } + else + { + _zooming = false; + } + } + } + + /// + /// A method that triggers the zoom, ideally only to be called via an event, but public for convenience + /// + /// + /// + /// + /// + public virtual void Zoom(MMCameraZoomModes mode, float newFieldOfView, float transitionDuration, float duration, + bool useUnscaledTime, bool relative = false, MMTweenType tweenType = null) + { + if (_zooming) + { + return; + } + + _zooming = true; + _elapsedTime = 0f; + _mode = mode; + + TimescaleMode = useUnscaledTime ? TimescaleModes.Unscaled : TimescaleModes.Scaled; + _startFieldOfView = _camera.fieldOfView; + _transitionDuration = transitionDuration; + _duration = duration; + _transitionDuration = transitionDuration; + _direction = 1; + _destinationReached = false; + _zoomStartedAt = GetTime(); + + if (tweenType != null) + { + ZoomTween = tweenType; + } + + switch (mode) + { + case MMCameraZoomModes.For: + _targetFieldOfView = newFieldOfView; + break; + + case MMCameraZoomModes.Set: + _targetFieldOfView = newFieldOfView; + break; + + case MMCameraZoomModes.Reset: + _targetFieldOfView = _initialFieldOfView; + break; + } + + if (relative) + { + _targetFieldOfView += _initialFieldOfView; + } + + } + + /// + /// The method used by the test button to trigger a test zoom + /// + protected virtual void TestZoom() + { + Zoom(TestMode, TestFieldOfView, TestTransitionDuration, TestDuration, false, tweenType: ZoomTween); + } + + /// + /// When we get an MMCameraZoomEvent we call our zoom method + /// + /// + public virtual void OnCameraZoomEvent(MMCameraZoomModes mode, float newFieldOfView, float transitionDuration, float duration, MMChannelData channelData, + bool useUnscaledTime, bool stop = false, bool relative = false, bool restore = false, MMTweenType tweenType = null) + { + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return; + } + if (stop) + { + _zooming = false; + return; + } + if (restore) + { + _camera.fieldOfView = _initialFieldOfView; + return; + } + this.Zoom(mode, newFieldOfView, transitionDuration, duration, useUnscaledTime, relative, tweenType); + } + + /// + /// Starts listening for MMCameraZoomEvents + /// + protected virtual void OnEnable() + { + MMCameraZoomEvent.Register(OnCameraZoomEvent); + } + + /// + /// Stops listening for MMCameraZoomEvents + /// + protected virtual void OnDisable() + { + MMCameraZoomEvent.Unregister(OnCameraZoomEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraZoom.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraZoom.cs.meta new file mode 100644 index 0000000..74ee676 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMCameraZoom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 547ab53f5c5bd8f47958e648c03ed7e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFeedbacksShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFeedbacksShaker.cs new file mode 100644 index 0000000..b971ae1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFeedbacksShaker.cs @@ -0,0 +1,76 @@ +using UnityEngine; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + [RequireComponent(typeof(MMFeedbacks))] + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Feedbacks/MMFeedbacksShaker")] + public class MMFeedbacksShaker : MMShaker + { + protected MMFeedbacks _mmFeedbacks; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _mmFeedbacks = this.gameObject.GetComponent(); + } + + public virtual void OnMMFeedbacksShakeEvent(MMChannelData channelData = null, bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + if (!CheckEventAllowed(channelData, useRange, eventRange, eventOriginPosition) || (!Interruptible && Shaking)) + { + return; + } + Play(); + } + + protected override void ShakeStarts() + { + _mmFeedbacks.PlayFeedbacks(); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.01f; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMFeedbacksShakeEvent.Register(OnMMFeedbacksShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMFeedbacksShakeEvent.Unregister(OnMMFeedbacksShakeEvent); + } + } + + public struct MMFeedbacksShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(MMChannelData channelData = null, bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)); + + static public void Trigger(MMChannelData channelData = null, bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + OnEvent?.Invoke(channelData, useRange, eventRange, eventOriginPosition); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFeedbacksShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFeedbacksShaker.cs.meta new file mode 100644 index 0000000..f957015 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFeedbacksShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf25723e7c003d74399d0f62f1098637 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFlash.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFlash.cs new file mode 100644 index 0000000..d8625d3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFlash.cs @@ -0,0 +1,236 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Feedbacks; +using System; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + public struct MMFlashEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(Color flashColor, float duration, float alpha, int flashID, MMChannelData channelData, TimescaleModes timescaleMode, bool stop = false); + + static public void Trigger(Color flashColor, float duration, float alpha, int flashID, MMChannelData channelData, TimescaleModes timescaleMode, bool stop = false) + { + OnEvent?.Invoke(flashColor, duration, alpha, flashID, channelData, timescaleMode, stop); + } + } + + [Serializable] + public class MMFlashDebugSettings + { + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + /// the color of the flash + public Color FlashColor = Color.white; + /// the flash duration (in seconds) + public float FlashDuration = 0.2f; + /// the alpha of the flash + public float FlashAlpha = 1f; + /// the ID of the flash (usually 0). You can specify on each MMFlash object an ID, allowing you to have different flash images in one scene and call them separately (one for damage, one for health pickups, etc) + public int FlashID = 0; + } + + [RequireComponent(typeof(Image))] + [RequireComponent(typeof(CanvasGroup))] + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Various/MMFlash")] + /// + /// Add this class to an image and it'll flash when getting a MMFlashEvent + /// + public class MMFlash : MMMonoBehaviour + { + [MMInspectorGroup("Flash", true, 121)] + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + /// the ID of this MMFlash object. When triggering a MMFlashEvent you can specify an ID, and only MMFlash objects with this ID will answer the call and flash, allowing you to have more than one flash object in a scene + [Tooltip("the ID of this MMFlash object. When triggering a MMFlashEvent you can specify an ID, and only MMFlash objects with this ID will answer the call and flash, allowing you to have more than one flash object in a scene")] + public int FlashID = 0; + /// if this is true, the MMFlash will stop before playing on every new event received + [Tooltip("if this is true, the MMFlash will stop before playing on every new event received")] + public bool Interruptable = false; + + [MMInspectorGroup("Interpolation", true, 122)] + /// the animation curve to use when flashing in + [Tooltip("the animation curve to use when flashing in")] + public MMTweenType FlashInTween = new MMTweenType(MMTween.MMTweenCurve.LinearTween); + /// the animation curve to use when flashing out + [Tooltip("the animation curve to use when flashing out")] + public MMTweenType FlashOutTween = new MMTweenType(MMTween.MMTweenCurve.LinearTween); + + [MMInspectorGroup("Debug", true, 123)] + /// the set of test settings to use when pressing the DebugTest button + [Tooltip("the set of test settings to use when pressing the DebugTest button")] + public MMFlashDebugSettings DebugSettings; + /// a test button that calls the DebugTest method + [Tooltip("a test button that calls the DebugTest method")] + [MMFInspectorButton("DebugTest")] + public bool DebugTestButton; + + public virtual float GetTime() { return (_timescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (_timescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + protected Image _image; + protected CanvasGroup _canvasGroup; + protected bool _flashing = false; + protected float _targetAlpha; + protected Color _initialColor; + protected float _delta; + protected float _flashStartedTimestamp; + protected int _direction = 1; + protected float _duration; + protected TimescaleModes _timescaleMode; + protected MMTweenType _currentTween; + + /// + /// On start we grab our image component + /// + protected virtual void Start() + { + _image = GetComponent(); + _canvasGroup = GetComponent(); + _initialColor = _image.color; + } + + /// + /// On update we flash our image if needed + /// + protected virtual void Update() + { + if (_flashing) + { + _image.enabled = true; + + _currentTween = FlashInTween; + if (GetTime() - _flashStartedTimestamp > _duration / 2f) + { + _direction = -1; + _currentTween = FlashOutTween; + } + + if (_direction == 1) + { + _delta += GetDeltaTime() / (_duration / 2f); + } + else + { + _delta -= GetDeltaTime() / (_duration / 2f); + } + + if (GetTime() - _flashStartedTimestamp > _duration) + { + _flashing = false; + } + + float percent = MMMaths.Remap(_delta, 0f, _duration/2f, 0f, 1f); + float tweenValue = _currentTween.Evaluate(percent); + + _canvasGroup.alpha = Mathf.Lerp(0f, _targetAlpha, tweenValue); + } + else + { + _image.enabled = false; + } + } + + public virtual void DebugTest() + { + MMFlashEvent.Trigger(DebugSettings.FlashColor, DebugSettings.FlashDuration, DebugSettings.FlashAlpha, DebugSettings.FlashID, new MMChannelData(DebugSettings.ChannelMode, DebugSettings.Channel, DebugSettings.MMChannelDefinition), TimescaleModes.Unscaled); + } + + /// + /// When getting a flash event, we turn our image on + /// + public virtual void OnMMFlashEvent(Color flashColor, float duration, float alpha, int flashID, MMChannelData channelData, TimescaleModes timescaleMode, bool stop = false) + { + if (flashID != FlashID) + { + return; + } + + if (stop) + { + _flashing = false; + return; + } + + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return; + } + + Flash(flashColor, duration, alpha, timescaleMode); + } + + public virtual void Flash(Color flashColor, float duration, float alpha, TimescaleModes timescaleMode) + { + if (_flashing && Interruptable) + { + _flashing = false; + } + + if (!_flashing) + { + _flashing = true; + _direction = 1; + _canvasGroup.alpha = 0; + _targetAlpha = alpha; + _delta = 0f; + _image.color = flashColor; + _duration = duration; + _timescaleMode = timescaleMode; + _flashStartedTimestamp = GetTime(); + } + } + + /// + /// On enable we start listening for events + /// + protected virtual void OnEnable() + { + MMFlashEvent.Register(OnMMFlashEvent); + } + + /// + /// On disable we stop listening for events + /// + protected virtual void OnDisable() + { + MMFlashEvent.Unregister(OnMMFlashEvent); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFlash.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFlash.cs.meta new file mode 100644 index 0000000..472583e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMFlash.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5463d50a0cd9b2449a50f538278303d2 +timeCreated: 1522014059 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLightShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLightShaker.cs new file mode 100644 index 0000000..bdd75ba --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLightShaker.cs @@ -0,0 +1,268 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to a light to have it receive MMLightShakeEvents from feedbacks or to shake it locally + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Lights/MMLightShaker")] + [RequireComponent(typeof(Light))] + public class MMLightShaker : MMShaker + { + [MMInspectorGroup("Light", true, 37)] + /// the light to affect when playing the feedback + [Tooltip("the light to affect when playing the feedback")] + public Light BoundLight; + /// whether or not that light should be turned off on start + [Tooltip("whether or not that light should be turned off on start")] + public bool StartsOff = true; + /// whether or not the values should be relative or not + [Tooltip("whether or not the values should be relative or not")] + public bool RelativeValues = true; + + [MMInspectorGroup("Color", true, 41)] + /// whether or not this shaker should modify color + [Tooltip("whether or not this shaker should modify color")] + public bool ModifyColor = true; + /// the colors to apply to the light over time + [Tooltip("the colors to apply to the light over time")] + public Gradient ColorOverTime; + + [MMInspectorGroup("Intensity", true, 40)] + /// the intensity to apply to the light over time + /// the curve to tween the intensity on + [Tooltip("the intensity to apply to the light over time")] + public AnimationCurve IntensityCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the intensity curve's 0 to + [Tooltip("the value to remap the intensity curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the intensity curve's 1 to + [Tooltip("the value to remap the intensity curve's 1 to")] + public float RemapIntensityOne = 1f; + + [MMInspectorGroup("Range", true, 39)] + /// the range to apply to the light over time + [Tooltip("the range to apply to the light over time")] + public AnimationCurve RangeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the range curve's 0 to + [Tooltip("the value to remap the range curve's 0 to")] + public float RemapRangeZero = 0f; + /// the value to remap the range curve's 0 to + [Tooltip("the value to remap the range curve's 0 to")] + public float RemapRangeOne = 10f; + + [MMInspectorGroup("Shadow Strength", true, 38)] + /// the range to apply to the light over time + [Tooltip("the range to apply to the light over time")] + public AnimationCurve ShadowStrengthCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the shadow strength's curve's 0 to + [Tooltip("the value to remap the shadow strength's curve's 0 to")] + public float RemapShadowStrengthZero = 0f; + /// the value to remap the shadow strength's curve's 1 to + [Tooltip("the value to remap the shadow strength's curve's 1 to")] + public float RemapShadowStrengthOne = 1f; + + protected Color _initialColor; + protected float _initialRange; + protected float _initialIntensity; + protected float _initialShadowStrength; + + protected bool _originalRelativeValues; + protected bool _originalModifyColor; + protected float _originalShakeDuration; + protected Gradient _originalColorOverTime; + protected AnimationCurve _originalIntensityCurve; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected AnimationCurve _originalRangeCurve; + protected float _originalRemapRangeZero; + protected float _originalRemapRangeOne; + protected AnimationCurve _originalShadowStrengthCurve; + protected float _originalRemapShadowStrengthZero; + protected float _originalRemapShadowStrengthOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + if (BoundLight == null) + { + BoundLight = this.gameObject.GetComponent(); + } + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 1f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newRange = ShakeFloat(RangeCurve, RemapRangeZero, RemapRangeOne, RelativeValues, _initialRange); + BoundLight.range = newRange; + float newIntensity = ShakeFloat(IntensityCurve, RemapIntensityZero, RemapIntensityOne, RelativeValues, _initialIntensity); + BoundLight.intensity = newIntensity; + float newShadowStrength = ShakeFloat(ShadowStrengthCurve, RemapShadowStrengthZero, RemapShadowStrengthOne, RelativeValues, _initialShadowStrength); + BoundLight.shadowStrength = Mathf.Clamp01(newShadowStrength); + if (ModifyColor) + { + BoundLight.color = ColorOverTime.Evaluate(_remappedTimeSinceStart); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialColor = BoundLight.color; + _initialRange = BoundLight.range; + _initialIntensity = BoundLight.intensity; + _initialShadowStrength = BoundLight.shadowStrength; + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + BoundLight.color = _initialColor; + BoundLight.range = _initialRange; + BoundLight.intensity = _initialIntensity; + BoundLight.shadowStrength = _initialShadowStrength; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ModifyColor = _originalModifyColor; + RelativeValues = _originalRelativeValues; + ShakeDuration = _originalShakeDuration; + ColorOverTime = _originalColorOverTime; + IntensityCurve = _originalIntensityCurve; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RangeCurve = _originalRangeCurve; + RemapRangeZero =_originalRemapRangeZero; + RemapRangeOne = _originalRemapRangeOne; + ShadowStrengthCurve = _originalShadowStrengthCurve; + RemapShadowStrengthZero = _originalRemapShadowStrengthZero; + RemapShadowStrengthOne = _originalRemapShadowStrengthOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMLightShakeEvent.Register(OnMMLightShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMLightShakeEvent.Unregister(OnMMLightShakeEvent); + } + + public virtual void OnMMLightShakeEvent(float shakeDuration, bool relativeValues, bool modifyColor, Gradient colorOverTime, + AnimationCurve intensityCurve, float remapIntensityZero, float remapIntensityOne, + AnimationCurve rangeCurve, float remapRangeZero, float remapRangeOne, + AnimationCurve shadowStrengthCurve, float remapShadowStrengthZero, float remapShadowStrengthOne, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + if (!CheckEventAllowed(channelData, useRange, eventRange, eventOriginPosition) || (!Interruptible && Shaking)) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalModifyColor = ModifyColor; + _originalRelativeValues = RelativeValues; + _originalShakeDuration = ShakeDuration; + _originalColorOverTime = ColorOverTime; + _originalIntensityCurve = IntensityCurve; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRangeCurve = RangeCurve; + _originalRemapRangeZero = RemapRangeZero; + _originalRemapRangeOne = RemapRangeOne; + _originalShadowStrengthCurve = ShadowStrengthCurve; + _originalRemapShadowStrengthZero = RemapShadowStrengthZero; + _originalRemapShadowStrengthOne = RemapShadowStrengthOne; + } + + if (!OnlyUseShakerValues) + { + ModifyColor = modifyColor; + RelativeValues = relativeValues; + ShakeDuration = shakeDuration; + ColorOverTime = colorOverTime; + IntensityCurve = intensityCurve; + RemapIntensityZero = remapIntensityZero; + RemapIntensityOne = remapIntensityOne; + RangeCurve = rangeCurve; + RemapRangeZero = remapRangeZero; + RemapRangeOne = remapRangeOne; + ShadowStrengthCurve = shadowStrengthCurve; + RemapShadowStrengthZero = remapShadowStrengthZero; + RemapShadowStrengthOne = remapShadowStrengthOne; + } + + Play(); + } + } + + public struct MMLightShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float shakeDuration, bool relativeValues, bool modifyColor, Gradient colorOverTime, + AnimationCurve intensityCurve, float remapIntensityZero, float remapIntensityOne, + AnimationCurve rangeCurve, float remapRangeZero, float remapRangeOne, + AnimationCurve shadowStrengthCurve, float remapShadowStrengthZero, float remapShadowStrengthOne, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)); + + static public void Trigger(float shakeDuration, bool relativeValues, bool modifyColor, Gradient colorOverTime, + AnimationCurve intensityCurve, float remapIntensityZero, float remapIntensityOne, + AnimationCurve rangeCurve, float remapRangeZero, float remapRangeOne, + AnimationCurve shadowStrengthCurve, float remapShadowStrengthZero, float remapShadowStrengthOne, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + OnEvent?.Invoke(shakeDuration, relativeValues, modifyColor, colorOverTime, + intensityCurve, remapIntensityZero, remapIntensityOne, + rangeCurve, remapRangeZero, remapRangeOne, + shadowStrengthCurve, remapShadowStrengthZero, remapShadowStrengthOne, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, + useRange, eventRange, eventOriginPosition); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLightShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLightShaker.cs.meta new file mode 100644 index 0000000..4eb57f4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLightShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c32d98c861c973c409133940cf9c2231 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLookAtShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLookAtShaker.cs new file mode 100644 index 0000000..4c3c380 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLookAtShaker.cs @@ -0,0 +1,273 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to an object and it'll be able to listen for MMFLookAtShakeEvents, and when one is received, it will rotate its associated transform accordingly + /// + public class MMLookAtShaker : MMShaker + { + [MMInspectorGroup("Look at settings", true, 37)] + /// the duration of this shake, in seconds + [Tooltip("the duration of this shake, in seconds")] + public float Duration = 1f; + /// the curve over which to animate the look at transition + [Tooltip("the curve over which to animate the look at transition")] + public MMTweenType LookAtTween = new MMTweenType( new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// whether or not to lock rotation on the x axis + [Tooltip("whether or not to lock rotation on the x axis")] + public bool LockXAxis = false; + /// whether or not to lock rotation on the y axis + [Tooltip("whether or not to lock rotation on the y axis")] + public bool LockYAxis = false; + /// whether or not to lock rotation on the z axis + [Tooltip("whether or not to lock rotation on the z axis")] + public bool LockZAxis = false; + + [MMInspectorGroup("What we want to rotate", true, 37)] + /// in Direct mode, the transform to rotate to have it look at our target - if left empty, will be the transform this shaker is on + [Tooltip("in Direct mode, the transform to rotate to have it look at our target - if left empty, will be the transform this shaker is on")] + public Transform TransformToRotate; + /// the vector representing the up direction on the object we want to rotate and look at our target + public MMF_LookAt.UpwardVectors UpwardVector = MMF_LookAt.UpwardVectors.Up; + + [MMInspectorGroup("What we want to look at", true, 37)] + /// the different target modes : either a specific transform to look at, the coordinates of a world position, or a direction vector + [Tooltip("the different target modes : either a specific transform to look at, the coordinates of a world position, or a direction vector")] + public MMF_LookAt.LookAtTargetModes LookAtTargetMode = MMF_LookAt.LookAtTargetModes.Transform; + /// the transform we want to look at + [Tooltip("the transform we want to look at")] + [MMFEnumCondition("LookAtTargetMode", (int)MMF_LookAt.LookAtTargetModes.Transform)] + public Transform LookAtTarget; + /// the coordinates of a point the world that we want to look at + [Tooltip("the coordinates of a point the world that we want to look at")] + [MMFEnumCondition("LookAtTargetMode", (int)MMF_LookAt.LookAtTargetModes.TargetWorldPosition)] + public Vector3 LookAtTargetWorldPosition = Vector3.forward; + /// a direction (from our rotating object) that we want to look at + [Tooltip("a direction (from our rotating object) that we want to look at")] + [MMFEnumCondition("LookAtTargetMode", (int)MMF_LookAt.LookAtTargetModes.Direction)] + public Vector3 LookAtDirection = Vector3.forward; + + [MMInspectorGroup("Test", true, 46)] + [MMInspectorButton("StartShaking")] + public bool StartShakingButton; + + /// + /// An event used to trigger a look at shake + /// + public struct MMLookAtShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float duration, + bool lockXAxis, bool lockYAxis, bool lockZAxis, MMF_LookAt.UpwardVectors upwardVector, MMF_LookAt.LookAtTargetModes lookAtTargetMode,Transform lookAtTarget, Vector3 lookAtTargetWorldPosition, Vector3 lookAtDirection, Transform transformToRotate, MMTweenType lookAtTween, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false); + + static public void Trigger(float duration, + bool lockXAxis, bool lockYAxis, bool lockZAxis, MMF_LookAt.UpwardVectors upwardVector, MMF_LookAt.LookAtTargetModes lookAtTargetMode,Transform lookAtTarget, Vector3 lookAtTargetWorldPosition, Vector3 lookAtDirection, Transform transformToRotate, MMTweenType lookAtTween, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false) + { + OnEvent?.Invoke( duration, lockXAxis, lockYAxis, lockZAxis, upwardVector, lookAtTargetMode, lookAtTarget, lookAtTargetWorldPosition, lookAtDirection, transformToRotate, lookAtTween, + useRange, rangeDistance, useRangeFalloff, rangeFalloff, remapRangeFalloff, rangePosition, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop); + } + } + + protected Quaternion _newRotation; + protected Vector3 _lookAtPosition; + protected Vector3 _upwards; + protected Vector3 _direction; + protected Quaternion _initialRotation; + protected float _originalDuration = 1f; + protected MMTweenType _originalLookAtTween; + protected bool _originalLockXAxis; + protected bool _originalLockYAxis; + protected bool _originalLockZAxis; + protected MMF_LookAt.UpwardVectors _originalUpwardVector; + protected MMF_LookAt.LookAtTargetModes _originalLookAtTargetMode; + protected Transform _originalLookAtTarget; + protected Vector3 _originalLookAtTargetWorldPosition; + protected Vector3 _originalLookAtDirection; + + /// + /// On init we store our initial rotation + /// + protected override void Initialization() + { + base.Initialization(); + if (TransformToRotate == null) + { + TransformToRotate = this.transform; + } + _initialRotation = TransformToRotate.rotation; + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + /// + /// On shake we apply rotation on our target transform + /// + protected override void Shake() + { + ApplyRotation(_journey); + } + + /// + /// On shake complete, we apply our final rotation + /// + protected override void ShakeComplete() + { + ApplyRotation(1f); + base.ShakeComplete(); + } + + /// + /// Rotates the associated transform to look at our target + /// + /// + protected virtual void ApplyRotation(float journey) + { + float percent = Mathf.Clamp01(journey / ShakeDuration); + percent = LookAtTween.Evaluate(percent); + + switch (LookAtTargetMode) + { + case MMF_LookAt.LookAtTargetModes.Transform: + _lookAtPosition = LookAtTarget.position; + break; + case MMF_LookAt.LookAtTargetModes.TargetWorldPosition: + _lookAtPosition = LookAtTargetWorldPosition; + break; + case MMF_LookAt.LookAtTargetModes.Direction: + _lookAtPosition = TransformToRotate.position + LookAtDirection; + break; + } + + if (LockXAxis) { _lookAtPosition.x = TransformToRotate.position.x; } + if (LockYAxis) { _lookAtPosition.y = TransformToRotate.position.y; } + if (LockZAxis) { _lookAtPosition.z = TransformToRotate.position.z; } + + _direction = _lookAtPosition - TransformToRotate.position; + _newRotation = Quaternion.LookRotation(_direction, _upwards); + + TransformToRotate.transform.rotation = Quaternion.SlerpUnclamped(_initialRotation, _newRotation, percent); + } + + /// + /// When getting a new look at event, we make our transform look at the specified target + /// + public virtual void OnMMLookAtShakeEvent(float duration, + bool lockXAxis, bool lockYAxis, bool lockZAxis, MMF_LookAt.UpwardVectors upwardVector, MMF_LookAt.LookAtTargetModes lookAtTargetMode,Transform lookAtTarget, Vector3 lookAtTargetWorldPosition, Vector3 lookAtDirection, Transform transformToRotate, MMTweenType lookAtTween, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false) + { + if (!CheckEventAllowed(channelData, useRange, rangeDistance, rangePosition) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalDuration = ShakeDuration; + _originalLookAtTween = LookAtTween; + _originalLockXAxis = LockXAxis; + _originalLockYAxis = LockYAxis; + _originalLockZAxis = LockZAxis; + _originalUpwardVector = UpwardVector; + _originalLookAtTargetMode = LookAtTargetMode; + _originalLookAtTarget = LookAtTarget; + _originalLookAtTargetWorldPosition = LookAtTargetWorldPosition; + _originalLookAtDirection = LookAtDirection; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + LookAtTween = lookAtTween; + LockXAxis = lockXAxis; + LockYAxis = lockYAxis; + LockZAxis = lockZAxis; + UpwardVector = upwardVector; + LookAtTargetMode = lookAtTargetMode; + LookAtTarget = lookAtTarget; + LookAtTargetWorldPosition = lookAtTargetWorldPosition; + LookAtDirection = lookAtDirection; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// On ResetTargetValue, we reset our target transform's rotation + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + TransformToRotate.rotation = _initialRotation; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalDuration; + LookAtTween = _originalLookAtTween; + LockXAxis = _originalLockXAxis; + LockYAxis = _originalLockYAxis; + LockZAxis = _originalLockZAxis; + UpwardVector = _originalUpwardVector; + LookAtTargetMode = _originalLookAtTargetMode; + LookAtTarget = _originalLookAtTarget; + LookAtTargetWorldPosition = _originalLookAtTargetWorldPosition; + LookAtDirection = _originalLookAtDirection; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMLookAtShakeEvent.Register(OnMMLookAtShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMLookAtShakeEvent.Unregister(OnMMLookAtShakeEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLookAtShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLookAtShaker.cs.meta new file mode 100644 index 0000000..1cfb65c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMLookAtShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ae5a7b14d18753448a2b01437ea288e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMPositionShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMPositionShaker.cs new file mode 100644 index 0000000..8cd3579 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMPositionShaker.cs @@ -0,0 +1,413 @@ +using System; +using System.Collections; +using MoreMountains.Tools; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + /// + /// This shaker will let you move the position of a transform, either once or permanently, shaking its position for the specified duration and within the specified range. + /// You can apply that shake along a direction, randomized or not, with optional noise and attenuation + /// + public class MMPositionShaker : MMShaker + { + public enum Modes { Transform, RectTransform } + + [MMInspectorGroup("Target", true, 41)] + /// whether this shaker should target Transforms or RectTransforms + [Tooltip("whether this shaker should target Transforms or RectTransforms")] + public Modes Mode = Modes.Transform; + /// the transform to shake the position of. If left blank, this component will target the transform it's put on. + [Tooltip("the transform to shake the position of. If left blank, this component will target the transform it's put on.")] + [MMEnumCondition("Mode", (int)Modes.Transform)] + public Transform TargetTransform; + /// the rect transform to shake the position of. If left blank, this component will target the transform it's put on. + [Tooltip("the rect transform to shake the position of. If left blank, this component will target the transform it's put on.")] + [MMEnumCondition("Mode", (int)Modes.RectTransform)] + public RectTransform TargetRectTransform; + + [MMInspectorGroup("Shake Settings", true, 42)] + /// the speed at which the transform should shake + [Tooltip("the speed at which the transform should shake")] + public float ShakeSpeed = 20f; + /// the maximum distance from its initial position the transform will move to during the shake + [Tooltip("the maximum distance from its initial position the transform will move to during the shake")] + public float ShakeRange = 0.5f; + /// an offset to apply to the oscillation + [Tooltip("an offset to apply to the oscillation")] + public float OscillationOffset = 0f; + + [MMInspectorGroup("Direction", true, 43)] + /// the direction along which to shake the transform's position + [Tooltip("the direction along which to shake the transform's position")] + public Vector3 ShakeMainDirection = Vector3.up; + /// if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection + [Tooltip("if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection")] + public bool RandomizeDirection = false; + /// when in RandomizeDirection mode, a vector against which to randomize the main direction + [Tooltip("when in RandomizeDirection mode, a vector against which to randomize the main direction")] + [MMCondition("RandomizeDirection", true)] + public Vector3 ShakeAltDirection = Vector3.up; + /// if this is true, a new direction will be randomized every time a shake happens + [Tooltip("if this is true, a new direction will be randomized every time a shake happens")] + public bool RandomizeDirectionOnPlay = false; + + /// whether or not to randomize the x value of the main direction + [Tooltip("whether or not to randomize the x value of the main direction")] + public bool RandomizeDirectionX = true; + /// whether or not to randomize the y value of the main direction + [Tooltip("whether or not to randomize the y value of the main direction")] + public bool RandomizeDirectionY = true; + /// whether or not to randomize the z value of the main direction + [Tooltip("whether or not to randomize the z value of the main direction")] + public bool RandomizeDirectionZ= true; + + [MMInspectorGroup("Directional Noise", true, 47)] + /// whether or not to add noise to the main direction + [Tooltip("whether or not to add noise to the main direction")] + public bool AddDirectionalNoise = true; + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax")] + [MMCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMin = new Vector3(0.25f, 0.25f, 0.25f); + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin")] + [MMCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMax = new Vector3(0.25f, 0.25f, 0.25f); + + [MMInspectorGroup("Randomness", true, 44)] + /// a unique seed you can use to get different outcomes when shaking more than one transform at once + [Tooltip("a unique seed you can use to get different outcomes when shaking more than one transform at once")] + public Vector3 RandomnessSeed; + /// whether or not to generate a unique seed automatically on every shake + [Tooltip("whether or not to generate a unique seed automatically on every shake")] + public bool RandomizeSeedOnShake = true; + + [MMInspectorGroup("One Time", true, 45)] + /// whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve + [Tooltip("whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve")] + public bool UseAttenuation = true; + /// the animation curve used to define attenuation, impacting the amplitude of the shake + [Tooltip("the animation curve used to define attenuation, impacting the amplitude of the shake")] + [MMCondition("UseAttenuation", true)] + public AnimationCurve AttenuationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + [MMInspectorGroup("Test", true, 46)] + [MMInspectorButton("StartShaking")] + public bool StartShakingButton; + + public virtual float Randomness => RandomnessSeed.x + RandomnessSeed.y + RandomnessSeed.z; + + protected float _attenuation = 1f; + protected float _oscillation; + protected Vector3 _initialPosition; + protected Vector3 _workDirection; + protected Vector3 _noiseVector; + protected Vector3 _newPosition; + protected Vector3 _randomNoiseStrength; + protected Vector3 _noNoise = Vector3.zero; + protected Vector3 _randomizedDirection; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + if (TargetTransform == null) { TargetTransform = this.transform; } + if (TargetRectTransform == null) { TargetRectTransform = this.GetComponent(); } + + GrabInitialPosition(); + } + + public virtual void GrabInitialPosition() + { + switch (Mode) + { + case Modes.Transform: + _initialPosition = TargetTransform.localPosition; + break; + case Modes.RectTransform: + _initialPosition = TargetRectTransform.anchoredPosition; + break; + } + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + protected override void ShakeStarts() + { + GrabInitialPosition(); + + if (RandomizeSeedOnShake) + { + RandomnessSeed = Random.insideUnitSphere; + } + + if (RandomizeDirectionOnPlay) + { + ShakeMainDirection.x = RandomizeDirectionX ? Random.insideUnitSphere.x : ShakeMainDirection.x; + ShakeMainDirection.y = RandomizeDirectionY ? Random.insideUnitSphere.y : ShakeMainDirection.y; + ShakeMainDirection.z = RandomizeDirectionZ ? Random.insideUnitSphere.z : ShakeMainDirection.z; + ShakeAltDirection.x = RandomizeDirectionX ? Random.insideUnitSphere.x : ShakeAltDirection.x; + ShakeAltDirection.y = RandomizeDirectionY ? Random.insideUnitSphere.y : ShakeAltDirection.y; + ShakeAltDirection.z = RandomizeDirectionZ ? Random.insideUnitSphere.z : ShakeAltDirection.z; + } + + _randomizedDirection = RandomizeDirection ? MMMaths.RandomVector3(ShakeMainDirection, ShakeAltDirection) : ShakeMainDirection; + if (!RandomizeDirectionX) { _randomizedDirection.x = ShakeMainDirection.x; } + if (!RandomizeDirectionY) { _randomizedDirection.y = ShakeMainDirection.y; } + if (!RandomizeDirectionZ) { _randomizedDirection.z = ShakeMainDirection.z; } + } + + protected override void Shake() + { + _oscillation = OscillationOffset + Mathf.Sin(ShakeSpeed * (Randomness + _journey)); + float remappedTime = MMFeedbacksHelpers.Remap(_journey, 0f, ShakeDuration, 0f, 1f); + + _attenuation = ComputeAttenuation(remappedTime); + _workDirection = ShakeMainDirection + ComputeNoise(_journey); + _workDirection.Normalize(); + _newPosition = ComputeNewPosition(); + ApplyNewPosition(_newPosition); + } + + protected override void ShakeComplete() + { + base.ShakeComplete(); + _attenuation = 0f; + _newPosition = ComputeNewPosition(); + if (TargetTransform != null) + { + ApplyNewPosition(_newPosition); + } + } + + protected virtual void ApplyNewPosition(Vector3 newPosition) + { + switch (Mode) + { + case Modes.Transform: + TargetTransform.localPosition = newPosition; + break; + case Modes.RectTransform: + TargetRectTransform.anchoredPosition = newPosition; + break; + } + } + + protected virtual Vector3 ComputeNewPosition() + { + return _initialPosition + _workDirection * _oscillation * ShakeRange * _attenuation; + } + + protected virtual float ComputeAttenuation(float remappedTime) + { + return (UseAttenuation && !PermanentShake) ? AttenuationCurve.Evaluate(remappedTime) : 1f; + } + + protected virtual Vector3 ComputeNoise(float time) + { + if (!AddDirectionalNoise) + { + return _noNoise; + } + + _randomNoiseStrength = MMMaths.RandomVector3(DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax); + + _noiseVector.x = _randomNoiseStrength.x * (Mathf.PerlinNoise(RandomnessSeed.x, time) - 0.5f) ; + _noiseVector.y = _randomNoiseStrength.y * (Mathf.PerlinNoise(RandomnessSeed.y, time) - 0.5f); + _noiseVector.z = _randomNoiseStrength.z * (Mathf.PerlinNoise(RandomnessSeed.z, time) - 0.5f); + + return _noiseVector; + } + + protected float _originalDuration; + protected float _originalShakeSpeed; + protected float _originalShakeRange; + protected Vector3 _originalShakeMainDirection; + protected bool _originalRandomizeDirection; + protected Vector3 _originalShakeAltDirection; + protected bool _originalRandomizeDirectionOnPlay; + protected bool _originalRandomizeDirectionX; + protected bool _originalRandomizeDirectionY; + protected bool _originalRandomizeDirectionZ; + protected bool _originalAddDirectionalNoise; + protected Vector3 _originalDirectionalNoiseStrengthMin; + protected Vector3 _originalDirectionalNoiseStrengthMax; + protected Vector3 _originalRandomnessSeed; + protected bool _originalRandomizeSeedOnShake; + protected bool _originalUseAttenuation; + protected AnimationCurve _originalAttenuationCurve; + + public virtual void OnMMPositionShakeEvent(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, + bool randomizeDirectionX, bool randomizeDirectionY, bool randomizeDirectionZ, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData, useRange, rangeDistance, rangePosition) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalDuration = ShakeDuration; + _originalShakeSpeed = ShakeSpeed; + _originalShakeRange = ShakeRange; + _originalShakeMainDirection = ShakeMainDirection; + _originalRandomizeDirection = RandomizeDirection; + _originalShakeAltDirection = ShakeAltDirection; + _originalRandomizeDirectionOnPlay = RandomizeDirectionOnPlay; + _originalRandomizeDirectionX = RandomizeDirectionX; + _originalRandomizeDirectionY = RandomizeDirectionY; + _originalRandomizeDirectionZ = RandomizeDirectionZ; + _originalAddDirectionalNoise = AddDirectionalNoise; + _originalDirectionalNoiseStrengthMin = DirectionalNoiseStrengthMin; + _originalDirectionalNoiseStrengthMax = DirectionalNoiseStrengthMax; + _originalRandomnessSeed = RandomnessSeed; + _originalRandomizeSeedOnShake = RandomizeSeedOnShake; + _originalUseAttenuation = UseAttenuation; + _originalAttenuationCurve = AttenuationCurve; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeSpeed = shakeSpeed; + ShakeRange = shakeRange * feedbacksIntensity * ComputeRangeIntensity(useRange, rangeDistance, useRangeFalloff, rangeFalloff, remapRangeFalloff, rangePosition); + ShakeMainDirection = shakeMainDirection; + RandomizeDirection = randomizeDirection; + ShakeAltDirection = shakeAltDirection; + RandomizeDirectionOnPlay = randomizeDirectionOnPlay; + RandomizeDirectionX = randomizeDirectionX; + RandomizeDirectionY = randomizeDirectionY; + RandomizeDirectionZ = randomizeDirectionZ; + AddDirectionalNoise = addDirectionalNoise; + DirectionalNoiseStrengthMin = directionalNoiseStrengthMin; + DirectionalNoiseStrengthMax = directionalNoiseStrengthMax; + RandomnessSeed = randomnessSeed; + RandomizeSeedOnShake = randomizeSeedOnShake; + UseAttenuation = useAttenuation; + AttenuationCurve = attenuationCurve; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + switch (Mode) + { + case Modes.Transform: + TargetTransform.localPosition = _initialPosition; + break; + case Modes.RectTransform: + TargetRectTransform.anchoredPosition = _initialPosition; + break; + } + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalDuration; + ShakeSpeed = _originalShakeSpeed; + ShakeRange = _originalShakeRange; + ShakeMainDirection = _originalShakeMainDirection; + RandomizeDirection = _originalRandomizeDirection; + ShakeAltDirection = _originalShakeAltDirection; + RandomizeDirectionOnPlay = _originalRandomizeDirectionOnPlay; + RandomizeDirectionX = _originalRandomizeDirectionX; + RandomizeDirectionY = _originalRandomizeDirectionY; + RandomizeDirectionZ = _originalRandomizeDirectionZ; + AddDirectionalNoise = _originalAddDirectionalNoise; + DirectionalNoiseStrengthMin = _originalDirectionalNoiseStrengthMin; + DirectionalNoiseStrengthMax = _originalDirectionalNoiseStrengthMax; + RandomnessSeed = _originalRandomnessSeed; + RandomizeSeedOnShake = _originalRandomizeSeedOnShake; + UseAttenuation = _originalUseAttenuation; + AttenuationCurve = _originalAttenuationCurve; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMPositionShakeEvent.Register(OnMMPositionShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMPositionShakeEvent.Unregister(OnMMPositionShakeEvent); + } + } + + public struct MMPositionShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, + bool randomizeDirectionX, bool randomizeDirectionY, bool randomizeDirectionZ, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, + bool randomizeDirectionX, bool randomizeDirectionY, bool randomizeDirectionZ, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke( duration, shakeSpeed, shakeRange, shakeMainDirection, randomizeDirection, shakeAltDirection, randomizeDirectionOnPlay, + randomizeDirectionX, randomizeDirectionY, randomizeDirectionZ, addDirectionalNoise, + directionalNoiseStrengthMin, directionalNoiseStrengthMax, randomnessSeed, randomizeSeedOnShake, useAttenuation, attenuationCurve, + useRange, rangeDistance, useRangeFalloff, rangeFalloff, remapRangeFalloff, rangePosition, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMPositionShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMPositionShaker.cs.meta new file mode 100644 index 0000000..b3e5b30 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMPositionShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0a82a086afdc494db67a8b50f091d1e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMRotationShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMRotationShaker.cs new file mode 100644 index 0000000..6e5e08d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMRotationShaker.cs @@ -0,0 +1,376 @@ +using System; +using System.Collections; +using MoreMountains.Tools; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + /// + /// This shaker will let you move the rotation of a transform, either once or permanently, shaking its rotation for the specified duration and within the specified range. + /// You can apply that shake along a direction, randomized or not, with optional noise and attenuation + /// + public class MMRotationShaker : MMShaker + { + public enum Modes { Transform, RectTransform } + + [MMInspectorGroup("Target", true, 41)] + /// whether this shaker should target Transforms or RectTransforms + [Tooltip("whether this shaker should target Transforms or RectTransforms")] + public Modes Mode = Modes.Transform; + /// the transform to shake the rotation of. If left blank, this component will target the transform it's put on. + [Tooltip("the transform to shake the rotation of. If left blank, this component will target the transform it's put on.")] + [MMEnumCondition("Mode", (int)Modes.Transform)] + public Transform TargetTransform; + /// the rect transform to shake the rotation of. If left blank, this component will target the transform it's put on. + [Tooltip("the rect transform to shake the rotation of. If left blank, this component will target the transform it's put on.")] + [MMEnumCondition("Mode", (int)Modes.RectTransform)] + public RectTransform TargetRectTransform; + + [MMInspectorGroup("Shake Settings", true, 42)] + /// the speed at which the transform should shake + [Tooltip("the speed at which the transform should shake")] + public float ShakeSpeed = 20f; + /// the maximum distance from its initial rotation the transform will move to during the shake + [Tooltip("the maximum distance from its initial rotation the transform will move to during the shake")] + public float ShakeRange = 50f; + + [MMInspectorGroup("Direction", true, 43)] + /// the direction along which to shake the transform's rotation + [Tooltip("the direction along which to shake the transform's rotation")] + public Vector3 ShakeMainDirection = Vector3.up; + /// if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection + [Tooltip("if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection")] + public bool RandomizeDirection = false; + /// when in RandomizeDirection mode, a vector against which to randomize the main direction + [Tooltip("when in RandomizeDirection mode, a vector against which to randomize the main direction")] + [MMCondition("RandomizeDirection", true)] + public Vector3 ShakeAltDirection = Vector3.up; + /// if this is true, a new direction will be randomized every time a shake happens + [Tooltip("if this is true, a new direction will be randomized every time a shake happens")] + public bool RandomizeDirectionOnPlay = false; + + [MMInspectorGroup("Directional Noise", true, 47)] + /// whether or not to add noise to the main direction + [Tooltip("whether or not to add noise to the main direction")] + public bool AddDirectionalNoise = true; + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax")] + [MMCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMin = new Vector3(0.25f, 0.25f, 0.25f); + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin")] + [MMCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMax = new Vector3(0.25f, 0.25f, 0.25f); + + [MMInspectorGroup("Randomness", true, 44)] + /// a unique seed you can use to get different outcomes when shaking more than one transform at once + [Tooltip("a unique seed you can use to get different outcomes when shaking more than one transform at once")] + public Vector3 RandomnessSeed; + /// whether or not to generate a unique seed automatically on every shake + [Tooltip("whether or not to generate a unique seed automatically on every shake")] + public bool RandomizeSeedOnShake = true; + + [MMInspectorGroup("One Time", true, 45)] + /// whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve + [Tooltip("whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve")] + public bool UseAttenuation = true; + /// the animation curve used to define attenuation, impacting the amplitude of the shake + [Tooltip("the animation curve used to define attenuation, impacting the amplitude of the shake")] + [MMCondition("UseAttenuation", true)] + public AnimationCurve AttenuationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + [MMInspectorGroup("Test", true, 46)] + [MMInspectorButton("StartShaking")] + public bool StartShakingButton; + + public virtual float Randomness => RandomnessSeed.x + RandomnessSeed.y + RandomnessSeed.z; + + protected float _attenuation = 1f; + protected float _oscillation; + protected Vector3 _initialRotation; + protected Vector3 _workDirection; + protected Vector3 _noiseVector; + protected Vector3 _newRotation; + protected Vector3 _randomNoiseStrength; + protected Vector3 _noNoise = Vector3.zero; + protected Vector3 _randomizedDirection; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + if (TargetTransform == null) { TargetTransform = this.transform; } + if (TargetRectTransform == null) { TargetRectTransform = this.GetComponent(); } + GrabLocalRotation(); + } + + public virtual void GrabLocalRotation() + { + switch (Mode) + { + case Modes.Transform: + _initialRotation = TargetTransform.localRotation.eulerAngles; + break; + case Modes.RectTransform: + _initialRotation = TargetRectTransform.localRotation.eulerAngles; + break; + } + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + protected override void ShakeStarts() + { + GrabLocalRotation(); + if (RandomizeSeedOnShake) + { + RandomnessSeed = Random.insideUnitSphere; + } + + if (RandomizeDirectionOnPlay) + { + ShakeMainDirection = Random.insideUnitSphere; + ShakeAltDirection = Random.insideUnitSphere; + } + + _randomizedDirection = RandomizeDirection ? MMMaths.RandomVector3(ShakeMainDirection, ShakeAltDirection) : ShakeMainDirection; + } + + protected override void Shake() + { + _oscillation = Mathf.Sin(ShakeSpeed * (Randomness + _journey)); + float remappedTime = MMFeedbacksHelpers.Remap(_journey, 0f, ShakeDuration, 0f, 1f); + + _attenuation = ComputeAttenuation(remappedTime); + _workDirection = ShakeMainDirection + ComputeNoise(_journey); + _workDirection.Normalize(); + _newRotation = ComputeNewRotation(); + ApplyNewRotation(_newRotation); + } + + protected override void ShakeComplete() + { + base.ShakeComplete(); + _attenuation = 0f; + _newRotation = ComputeNewRotation(); + if (TargetTransform != null) + { + ApplyNewRotation(_newRotation); + } + } + + protected virtual void ApplyNewRotation(Vector3 newRotation) + { + switch (Mode) + { + case Modes.Transform: + TargetTransform.localRotation = Quaternion.Euler(newRotation); + break; + case Modes.RectTransform: + TargetRectTransform.localRotation = Quaternion.Euler(newRotation); + break; + } + } + + protected virtual Vector3 ComputeNewRotation() + { + return _initialRotation + _workDirection * _oscillation * ShakeRange * _attenuation; + } + + protected virtual float ComputeAttenuation(float remappedTime) + { + return (UseAttenuation && !PermanentShake) ? AttenuationCurve.Evaluate(remappedTime) : 1f; + } + + protected virtual Vector3 ComputeNoise(float time) + { + if (!AddDirectionalNoise) + { + return _noNoise; + } + + _randomNoiseStrength = MMMaths.RandomVector3(DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax); + + _noiseVector.x = _randomNoiseStrength.x * (Mathf.PerlinNoise(RandomnessSeed.x, time) - 0.5f) ; + _noiseVector.y = _randomNoiseStrength.y * (Mathf.PerlinNoise(RandomnessSeed.y, time) - 0.5f); + _noiseVector.z = _randomNoiseStrength.z * (Mathf.PerlinNoise(RandomnessSeed.z, time) - 0.5f); + + return _noiseVector; + } + + protected float _originalDuration; + protected float _originalShakeSpeed; + protected float _originalShakeRange; + protected Vector3 _originalShakeMainDirection; + protected bool _originalRandomizeDirection; + protected Vector3 _originalShakeAltDirection; + protected bool _originalRandomizeDirectionOnPlay; + protected bool _originalAddDirectionalNoise; + protected Vector3 _originalDirectionalNoiseStrengthMin; + protected Vector3 _originalDirectionalNoiseStrengthMax; + protected Vector3 _originalRandomnessSeed; + protected bool _originalRandomizeSeedOnShake; + protected bool _originalUseAttenuation; + protected AnimationCurve _originalAttenuationCurve; + + public virtual void OnMMRotationShakeEvent(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalDuration = ShakeDuration; + _originalShakeSpeed = ShakeSpeed; + _originalShakeRange = ShakeRange; + _originalShakeMainDirection = ShakeMainDirection; + _originalRandomizeDirection = RandomizeDirection; + _originalShakeAltDirection = ShakeAltDirection; + _originalRandomizeDirectionOnPlay = RandomizeDirectionOnPlay; + _originalAddDirectionalNoise = AddDirectionalNoise; + _originalDirectionalNoiseStrengthMin = DirectionalNoiseStrengthMin; + _originalDirectionalNoiseStrengthMax = DirectionalNoiseStrengthMax; + _originalRandomnessSeed = RandomnessSeed; + _originalRandomizeSeedOnShake = RandomizeSeedOnShake; + _originalUseAttenuation = UseAttenuation; + _originalAttenuationCurve = AttenuationCurve; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeSpeed = shakeSpeed; + ShakeRange = shakeRange * feedbacksIntensity * ComputeRangeIntensity(useRange, rangeDistance, + useRangeFalloff, rangeFalloff, remapRangeFalloff, rangePosition); + ShakeMainDirection = shakeMainDirection; + RandomizeDirection = randomizeDirection; + ShakeAltDirection = shakeAltDirection; + RandomizeDirectionOnPlay = randomizeDirectionOnPlay; + AddDirectionalNoise = addDirectionalNoise; + DirectionalNoiseStrengthMin = directionalNoiseStrengthMin; + DirectionalNoiseStrengthMax = directionalNoiseStrengthMax; + RandomnessSeed = randomnessSeed; + RandomizeSeedOnShake = randomizeSeedOnShake; + UseAttenuation = useAttenuation; + AttenuationCurve = attenuationCurve; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + switch (Mode) + { + case Modes.Transform: + TargetTransform.localRotation = Quaternion.Euler(_initialRotation); + break; + case Modes.RectTransform: + TargetRectTransform.localRotation = Quaternion.Euler(_initialRotation); + break; + } + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalDuration; + ShakeSpeed = _originalShakeSpeed; + ShakeRange = _originalShakeRange; + ShakeMainDirection = _originalShakeMainDirection; + RandomizeDirection = _originalRandomizeDirection; + ShakeAltDirection = _originalShakeAltDirection; + RandomizeDirectionOnPlay = _originalRandomizeDirectionOnPlay; + AddDirectionalNoise = _originalAddDirectionalNoise; + DirectionalNoiseStrengthMin = _originalDirectionalNoiseStrengthMin; + DirectionalNoiseStrengthMax = _originalDirectionalNoiseStrengthMax; + RandomnessSeed = _originalRandomnessSeed; + RandomizeSeedOnShake = _originalRandomizeSeedOnShake; + UseAttenuation = _originalUseAttenuation; + AttenuationCurve = _originalAttenuationCurve; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMRotationShakeEvent.Register(OnMMRotationShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMRotationShakeEvent.Unregister(OnMMRotationShakeEvent); + } + } + + public struct MMRotationShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke( duration, shakeSpeed, shakeRange, shakeMainDirection, randomizeDirection, shakeAltDirection, randomizeDirectionOnPlay, addDirectionalNoise, + directionalNoiseStrengthMin, directionalNoiseStrengthMax, randomnessSeed, randomizeSeedOnShake, useAttenuation, attenuationCurve, + useRange, rangeDistance, useRangeFalloff, rangeFalloff, remapRangeFalloff, rangePosition, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMRotationShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMRotationShaker.cs.meta new file mode 100644 index 0000000..17f7d1d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMRotationShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b821aa41cbf734458af19d8c6507e92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMScaleShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMScaleShaker.cs new file mode 100644 index 0000000..9070ca2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMScaleShaker.cs @@ -0,0 +1,376 @@ +using System; +using System.Collections; +using MoreMountains.Tools; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + /// + /// This shaker will let you move the scale of a transform, either once or permanently, shaking its scale for the specified duration and within the specified range. + /// You can apply that shake along a direction, randomized or not, with optional noise and attenuation + /// + public class MMScaleShaker : MMShaker + { + public enum Modes { Transform, RectTransform } + + [MMInspectorGroup("Target", true, 41)] + /// whether this shaker should target Transforms or RectTransforms + [Tooltip("whether this shaker should target Transforms or RectTransforms")] + public Modes Mode = Modes.Transform; + /// the transform to shake the scale of. If left blank, this component will target the transform it's put on. + [Tooltip("the transform to shake the scale of. If left blank, this component will target the transform it's put on.")] + [MMEnumCondition("Mode", (int)Modes.Transform)] + public Transform TargetTransform; + /// the rect transform to shake the scale of. If left blank, this component will target the transform it's put on. + [Tooltip("the rect transform to shake the scale of. If left blank, this component will target the transform it's put on.")] + [MMEnumCondition("Mode", (int)Modes.RectTransform)] + public RectTransform TargetRectTransform; + + [MMInspectorGroup("Shake Settings", true, 42)] + /// the speed at which the transform should shake + [Tooltip("the speed at which the transform should shake")] + public float ShakeSpeed = 20f; + /// the maximum distance from its initial scale the transform will move to during the shake + [Tooltip("the maximum distance from its initial scale the transform will move to during the shake")] + public float ShakeRange = 0.5f; + + [MMInspectorGroup("Direction", true, 43)] + /// the direction along which to shake the transform's scale + [Tooltip("the direction along which to shake the transform's scale")] + public Vector3 ShakeMainDirection = Vector3.up; + /// if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection + [Tooltip("if this is true, instead of using ShakeMainDirection as the direction of the shake, a random vector3 will be generated, randomized between ShakeMainDirection and ShakeAltDirection")] + public bool RandomizeDirection = false; + /// when in RandomizeDirection mode, a vector against which to randomize the main direction + [Tooltip("when in RandomizeDirection mode, a vector against which to randomize the main direction")] + [MMCondition("RandomizeDirection", true)] + public Vector3 ShakeAltDirection = Vector3.up; + /// if this is true, a new direction will be randomized every time a shake happens + [Tooltip("if this is true, a new direction will be randomized every time a shake happens")] + public bool RandomizeDirectionOnPlay = false; + + [MMInspectorGroup("Directional Noise", true, 47)] + /// whether or not to add noise to the main direction + [Tooltip("whether or not to add noise to the main direction")] + public bool AddDirectionalNoise = true; + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMax")] + [MMCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMin = new Vector3(0.25f, 0.25f, 0.25f); + /// when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin + [Tooltip("when adding directional noise, noise strength will be randomized between this value and DirectionalNoiseStrengthMin")] + [MMCondition("AddDirectionalNoise", true)] + public Vector3 DirectionalNoiseStrengthMax = new Vector3(0.25f, 0.25f, 0.25f); + + [MMInspectorGroup("Randomness", true, 44)] + /// a unique seed you can use to get different outcomes when shaking more than one transform at once + [Tooltip("a unique seed you can use to get different outcomes when shaking more than one transform at once")] + public Vector3 RandomnessSeed; + /// whether or not to generate a unique seed automatically on every shake + [Tooltip("whether or not to generate a unique seed automatically on every shake")] + public bool RandomizeSeedOnShake = true; + + [MMInspectorGroup("One Time", true, 45)] + /// whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve + [Tooltip("whether or not to use attenuation, which will impact the amplitude of the shake, along the defined curve")] + public bool UseAttenuation = true; + /// the animation curve used to define attenuation, impacting the amplitude of the shake + [Tooltip("the animation curve used to define attenuation, impacting the amplitude of the shake")] + [MMCondition("UseAttenuation", true)] + public AnimationCurve AttenuationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + [MMInspectorGroup("Test", true, 46)] + [MMInspectorButton("StartShaking")] + public bool StartShakingButton; + + public virtual float Randomness => RandomnessSeed.x + RandomnessSeed.y + RandomnessSeed.z; + + protected float _attenuation = 1f; + protected float _oscillation; + protected Vector3 _initialScale; + protected Vector3 _workDirection; + protected Vector3 _noiseVector; + protected Vector3 _newScale; + protected Vector3 _randomNoiseStrength; + protected Vector3 _noNoise = Vector3.zero; + protected Vector3 _randomizedDirection; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + if (TargetTransform == null) { TargetTransform = this.transform; } + if (TargetRectTransform == null) { TargetRectTransform = this.GetComponent(); } + GrabInitialScale(); + } + + public virtual void GrabInitialScale() + { + switch (Mode) + { + case Modes.Transform: + _initialScale = TargetTransform.localScale; + break; + case Modes.RectTransform: + _initialScale = TargetRectTransform.localScale; + break; + } + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + protected override void ShakeStarts() + { + GrabInitialScale(); + if (RandomizeSeedOnShake) + { + RandomnessSeed = Random.insideUnitSphere; + } + + if (RandomizeDirectionOnPlay) + { + ShakeMainDirection = Random.insideUnitSphere; + ShakeAltDirection = Random.insideUnitSphere; + } + + _randomizedDirection = RandomizeDirection ? MMMaths.RandomVector3(ShakeMainDirection, ShakeAltDirection) : ShakeMainDirection; + } + + protected override void Shake() + { + _oscillation = Mathf.Sin(ShakeSpeed * (Randomness + _journey)); + float remappedTime = MMFeedbacksHelpers.Remap(_journey, 0f, ShakeDuration, 0f, 1f); + + _attenuation = ComputeAttenuation(remappedTime); + _workDirection = ShakeMainDirection + ComputeNoise(_journey); + _workDirection.Normalize(); + _newScale = ComputeNewScale(); + ApplyNewScale(_newScale); + } + + protected override void ShakeComplete() + { + base.ShakeComplete(); + _attenuation = 0f; + _newScale = ComputeNewScale(); + if (TargetTransform != null) + { + ApplyNewScale(_newScale); + } + } + + protected virtual void ApplyNewScale(Vector3 newScale) + { + switch (Mode) + { + case Modes.Transform: + TargetTransform.localScale = newScale; + break; + case Modes.RectTransform: + TargetRectTransform.localScale = newScale; + break; + } + } + + protected virtual Vector3 ComputeNewScale() + { + return _initialScale + _workDirection * _oscillation * ShakeRange * _attenuation; + } + + protected virtual float ComputeAttenuation(float remappedTime) + { + return (UseAttenuation && !PermanentShake) ? AttenuationCurve.Evaluate(remappedTime) : 1f; + } + + protected virtual Vector3 ComputeNoise(float time) + { + if (!AddDirectionalNoise) + { + return _noNoise; + } + + _randomNoiseStrength = MMMaths.RandomVector3(DirectionalNoiseStrengthMin, DirectionalNoiseStrengthMax); + + _noiseVector.x = _randomNoiseStrength.x * (Mathf.PerlinNoise(RandomnessSeed.x, time) - 0.5f) ; + _noiseVector.y = _randomNoiseStrength.y * (Mathf.PerlinNoise(RandomnessSeed.y, time) - 0.5f); + _noiseVector.z = _randomNoiseStrength.z * (Mathf.PerlinNoise(RandomnessSeed.z, time) - 0.5f); + + return _noiseVector; + } + + protected float _originalDuration; + protected float _originalShakeSpeed; + protected float _originalShakeRange; + protected Vector3 _originalShakeMainDirection; + protected bool _originalRandomizeDirection; + protected Vector3 _originalShakeAltDirection; + protected bool _originalRandomizeDirectionOnPlay; + protected bool _originalAddDirectionalNoise; + protected Vector3 _originalDirectionalNoiseStrengthMin; + protected Vector3 _originalDirectionalNoiseStrengthMax; + protected Vector3 _originalRandomnessSeed; + protected bool _originalRandomizeSeedOnShake; + protected bool _originalUseAttenuation; + protected AnimationCurve _originalAttenuationCurve; + + public virtual void OnMMScaleShakeEvent(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalDuration = ShakeDuration; + _originalShakeSpeed = ShakeSpeed; + _originalShakeRange = ShakeRange; + _originalShakeMainDirection = ShakeMainDirection; + _originalRandomizeDirection = RandomizeDirection; + _originalShakeAltDirection = ShakeAltDirection; + _originalRandomizeDirectionOnPlay = RandomizeDirectionOnPlay; + _originalAddDirectionalNoise = AddDirectionalNoise; + _originalDirectionalNoiseStrengthMin = DirectionalNoiseStrengthMin; + _originalDirectionalNoiseStrengthMax = DirectionalNoiseStrengthMax; + _originalRandomnessSeed = RandomnessSeed; + _originalRandomizeSeedOnShake = RandomizeSeedOnShake; + _originalUseAttenuation = UseAttenuation; + _originalAttenuationCurve = AttenuationCurve; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeSpeed = shakeSpeed; + ShakeRange = shakeRange * feedbacksIntensity * ComputeRangeIntensity(useRange, rangeDistance, + useRangeFalloff, rangeFalloff, remapRangeFalloff, rangePosition); + ShakeMainDirection = shakeMainDirection; + RandomizeDirection = randomizeDirection; + ShakeAltDirection = shakeAltDirection; + RandomizeDirectionOnPlay = randomizeDirectionOnPlay; + AddDirectionalNoise = addDirectionalNoise; + DirectionalNoiseStrengthMin = directionalNoiseStrengthMin; + DirectionalNoiseStrengthMax = directionalNoiseStrengthMax; + RandomnessSeed = randomnessSeed; + RandomizeSeedOnShake = randomizeSeedOnShake; + UseAttenuation = useAttenuation; + AttenuationCurve = attenuationCurve; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + switch (Mode) + { + case Modes.Transform: + TargetTransform.localScale = _initialScale; + break; + case Modes.RectTransform: + TargetRectTransform.localScale = _initialScale; + break; + } + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalDuration; + ShakeSpeed = _originalShakeSpeed; + ShakeRange = _originalShakeRange; + ShakeMainDirection = _originalShakeMainDirection; + RandomizeDirection = _originalRandomizeDirection; + ShakeAltDirection = _originalShakeAltDirection; + RandomizeDirectionOnPlay = _originalRandomizeDirectionOnPlay; + AddDirectionalNoise = _originalAddDirectionalNoise; + DirectionalNoiseStrengthMin = _originalDirectionalNoiseStrengthMin; + DirectionalNoiseStrengthMax = _originalDirectionalNoiseStrengthMax; + RandomnessSeed = _originalRandomnessSeed; + RandomizeSeedOnShake = _originalRandomizeSeedOnShake; + UseAttenuation = _originalUseAttenuation; + AttenuationCurve = _originalAttenuationCurve; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMScaleShakeEvent.Register(OnMMScaleShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMScaleShakeEvent.Unregister(OnMMScaleShakeEvent); + } + } + + public struct MMScaleShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(float duration, float shakeSpeed, float shakeRange, Vector3 shakeMainDirection, bool randomizeDirection, Vector3 shakeAltDirection, bool randomizeDirectionOnPlay, bool addDirectionalNoise, + Vector3 directionalNoiseStrengthMin, Vector3 directionalNoiseStrengthMax, Vector3 randomnessSeed, bool randomizeSeedOnShake, bool useAttenuation, AnimationCurve attenuationCurve, + bool useRange = false, float rangeDistance = 0f, bool useRangeFalloff = false, AnimationCurve rangeFalloff = null, Vector2 remapRangeFalloff = default(Vector2), Vector3 rangePosition = default(Vector3), + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke( duration, shakeSpeed, shakeRange, shakeMainDirection, randomizeDirection, shakeAltDirection, randomizeDirectionOnPlay, addDirectionalNoise, + directionalNoiseStrengthMin, directionalNoiseStrengthMax, randomnessSeed, randomizeSeedOnShake, useAttenuation, attenuationCurve, + useRange, rangeDistance, useRangeFalloff, rangeFalloff, remapRangeFalloff, rangePosition, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMScaleShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMScaleShaker.cs.meta new file mode 100644 index 0000000..da38d8f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMScaleShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cb29398a27cf104bb97fac0554c9457 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMSpriteRendererShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMSpriteRendererShaker.cs new file mode 100644 index 0000000..f9693c2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMSpriteRendererShaker.cs @@ -0,0 +1,196 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to a SpriteRenderer to have it receive MMSpriteRendererShakeEvents from feedbacks or to shake it locally + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Renderer/MMSpriteRendererShaker")] + [RequireComponent(typeof(SpriteRenderer))] + public class MMSpriteRendererShaker : MMShaker + { + [MMInspectorGroup("SpriteRenderer", true, 39)] + /// the SpriteRenderer to affect when playing the feedback + [Tooltip("the SpriteRenderer to affect when playing the feedback")] + public SpriteRenderer BoundSpriteRenderer; + /// whether or not that SpriteRenderer should be turned off on start + [Tooltip("whether or not that SpriteRenderer should be turned off on start")] + public bool StartsOff = true; + + [MMInspectorGroup("Color", true, 40)] + /// whether or not this shaker should modify color + [Tooltip("whether or not this shaker should modify color")] + public bool ModifyColor = true; + /// the colors to apply to the SpriteRenderer over time + [Tooltip("the colors to apply to the SpriteRenderer over time")] + public Gradient ColorOverTime; + + [MMInspectorGroup("Flip", true, 41)] + /// whether or not to flip the sprite on X + [Tooltip("whether or not to flip the sprite on X")] + public bool FlipX = false; + /// whether or not to flip the sprite on Y + [Tooltip("whether or not to flip the sprite on Y")] + public bool FlipY = false; + + protected Color _initialColor; + protected bool _originalModifyColor; + protected float _originalShakeDuration; + protected Gradient _originalColorOverTime; + protected bool _originalFlipX; + protected bool _originalFlipY; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + if (BoundSpriteRenderer == null) + { + BoundSpriteRenderer = this.gameObject.GetComponent(); + } + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 1f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + if (ModifyColor) + { + _remappedTimeSinceStart = MMFeedbacksHelpers.Remap(Time.time - _shakeStartedTimestamp, 0f, ShakeDuration, 0f, 1f); + BoundSpriteRenderer.color = ColorOverTime.Evaluate(_remappedTimeSinceStart); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialColor = BoundSpriteRenderer.color; + _originalFlipX = BoundSpriteRenderer.flipX; + _originalFlipY = BoundSpriteRenderer.flipY; + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + BoundSpriteRenderer.color = _initialColor; + BoundSpriteRenderer.flipX = _originalFlipX; + BoundSpriteRenderer.flipY = _originalFlipY; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ModifyColor = _originalModifyColor; + ShakeDuration = _originalShakeDuration; + ColorOverTime = _originalColorOverTime; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMSpriteRendererShakeEvent.Register(OnMMSpriteRendererShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMSpriteRendererShakeEvent.Unregister(OnMMSpriteRendererShakeEvent); + } + + public virtual void OnMMSpriteRendererShakeEvent(float shakeDuration, bool modifyColor, Gradient colorOverTime, + bool flipX, bool flipY, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + if (!CheckEventAllowed(channelData, useRange, eventRange, eventOriginPosition) || (!Interruptible && Shaking)) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalModifyColor = ModifyColor; + _originalShakeDuration = ShakeDuration; + _originalColorOverTime = ColorOverTime; + } + + if (!OnlyUseShakerValues) + { + ModifyColor = modifyColor; + ShakeDuration = shakeDuration; + ColorOverTime = colorOverTime; + FlipX = flipX; + FlipY = flipY; + } + + if (FlipX) + { + BoundSpriteRenderer.flipX = !BoundSpriteRenderer.flipX; + } + if (FlipY) + { + BoundSpriteRenderer.flipY = !BoundSpriteRenderer.flipY; + } + + Play(); + } + } + + /// + /// An event used (usually from MMFeeedbackSpriteRenderer) to shake the values of a SpriteRenderer + /// + public struct MMSpriteRendererShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float shakeDuration, bool modifyColor, Gradient colorOverTime, + bool flipX, bool flipY, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)); + + static public void Trigger(float shakeDuration, bool modifyColor, Gradient colorOverTime, + bool flipX, bool flipY, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + OnEvent?.Invoke(shakeDuration, modifyColor, colorOverTime, + flipX, flipY, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, + useRange, eventRange, eventOriginPosition); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMSpriteRendererShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMSpriteRendererShaker.cs.meta new file mode 100644 index 0000000..cc41b46 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMSpriteRendererShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9dd0616922ed17418e0d66673193441 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMWiggle.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMWiggle.cs new file mode 100644 index 0000000..c68375a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMWiggle.cs @@ -0,0 +1,729 @@ +using UnityEngine; +using System.Collections; +using System; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + /// the possible types of wiggle + public enum WiggleTypes { None, Random, PingPong, Noise, Curve } + + /// + /// A class to store public wiggle properties + /// + [Serializable] + public class WiggleProperties + { + [Header("Status")] + public bool WigglePermitted = true; + + [Header("Type")] + /// the position mode : none, random or ping pong - none won't do anything, random will randomize min and max bounds, ping pong will oscillate between min and max bounds + [Tooltip("the position mode : none, random or ping pong - none won't do anything, random will randomize min and max bounds, ping pong will oscillate between min and max bounds")] + public WiggleTypes WiggleType = WiggleTypes.Random; + /// if this is true, unscaled delta time, otherwise regular delta time + [Tooltip("if this is true, unscaled delta time, otherwise regular delta time")] + public bool UseUnscaledTime = false; + /// a multiplier to apply to all time related operations, allowing you to speed up or slow down the wiggle + [Tooltip("a multiplier to apply to all time related operations, allowing you to speed up or slow down the wiggle")] + public float TimeMultiplier = 1f; + + /// whether or not this object should start wiggling automatically on Start() + [Tooltip("whether or not this object should start wiggling automatically on Start()")] + public bool StartWigglingAutomatically = true; + /// if this is true, position will be ping ponged with an ease in/out curve + [Tooltip("if this is true, position will be ping ponged with an ease in/out curve")] + public bool SmoothPingPong = true; + + [Header("Speed")] + /// Whether or not the position's speed curve will be used + [Tooltip("Whether or not the position's speed curve will be used")] + public bool UseSpeedCurve = false; + /// an animation curve to define the speed over time from one position to the other (x), and the actual position (y), allowing for overshoot + [Tooltip("an animation curve to define the speed over time from one position to the other (x), and the actual position (y), allowing for overshoot")] + public AnimationCurve SpeedCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f); + + [Header("Frequency")] + /// the minimum time (in seconds) between two position changes + [Tooltip("the minimum time (in seconds) between two position changes")] + public float FrequencyMin = 0f; + /// the maximum time (in seconds) between two position changes + [Tooltip("the maximum time (in seconds) between two position changes")] + public float FrequencyMax = 1f; + + [Header("Amplitude")] + /// the minimum position the object can have + [Tooltip("the minimum position the object can have")] + public Vector3 AmplitudeMin = Vector3.zero; + /// the maximum position the object can have + [Tooltip("the maximum position the object can have")] + public Vector3 AmplitudeMax = Vector3.one; + /// if this is true, amplitude will be relative, otherwise world space + [Tooltip("if this is true, amplitude will be relative, otherwise world space")] + public bool RelativeAmplitude = true; + /// if this is true, all amplitude values will match the x amplitude value + [Tooltip("if this is true, all amplitude values will match the x amplitude value")] + public bool UniformValues = false; + /// if this is true, when randomizing amplitude, the resulting vector's length will be forced to match ForcedVectorLength + [Tooltip("if this is true, when randomizing amplitude, the resulting vector's length will be forced to match ForcedVectorLength")] + public bool ForceVectorLength = false; + /// the length of the randomized amplitude if ForceVectorLength is true + [Tooltip("the length of the randomized amplitude if ForceVectorLength is true")] + [MMCondition("ForceVectorLength", true)] + public float ForcedVectorLength = 1f; + + [Header("Curve")] + /// a curve to animate this property on + [Tooltip("a curve to animate this property on")] + public AnimationCurve Curve = AnimationCurve.Linear(0f, 0f, 1f, 1f); + /// the minimum value to randomize the curve's zero remap to + [Tooltip("the minimum value to randomize the curve's zero remap to")] + public Vector3 RemapCurveZeroMin = Vector3.zero; + /// the maximum value to randomize the curve's zero remap to + [Tooltip("the maximum value to randomize the curve's zero remap to")] + public Vector3 RemapCurveZeroMax = Vector3.zero; + /// the minimum value to randomize the curve's one remap to + [Tooltip("the minimum value to randomize the curve's one remap to")] + public Vector3 RemapCurveOneMin = Vector3.one; + /// the maximum value to randomize the curve's one remap to + [Tooltip("the maximum value to randomize the curve's one remap to")] + public Vector3 RemapCurveOneMax = Vector3.one; + /// whether or not to add the initial value of this property to the curve's outcome + [Tooltip("whether or not to add the initial value of this property to the curve's outcome")] + public bool RelativeCurveAmplitude = true; + /// whether or not the curve should be read from left to right, then right to left + [Tooltip("whether or not the curve should be read from left to right, then right to left")] + public bool CurvePingPong = false; + + [Header("Pause")] + /// the minimum time to spend between two random positions + [Tooltip("the minimum time to spend between two random positions")] + public float PauseMin = 0f; + /// the maximum time to spend between two random positions + [Tooltip("the maximum time to spend between two random positions")] + public float PauseMax = 0f; + + [Header("Limited Time")] + /// if this is true, this property will only animate for the specified time + [Tooltip("if this is true, this property will only animate for the specified time")] + public bool LimitedTime = false; + /// the maximum time left + [Tooltip("the maximum time left")] + public float LimitedTimeTotal; + /// the animation curve to use to decrease the effect of the wiggle as time goes + [Tooltip("the animation curve to use to decrease the effect of the wiggle as time goes")] + public AnimationCurve LimitedTimeFalloff = AnimationCurve.Linear(0f, 1f, 1f, 0f); + /// if this is true, original position will be restored when time left reaches zero + [Tooltip("if this is true, original position will be restored when time left reaches zero")] + public bool LimitedTimeResetValue = true; + /// the actual time left + [Tooltip("the actual time left")] + [MMFReadOnly] + public float LimitedTimeLeft; + + [Header("Noise Frequency")] + /// the minimum time between two changes of noise frequency + [Tooltip("the minimum time between two changes of noise frequency")] + public Vector3 NoiseFrequencyMin = Vector3.zero; + /// the maximum time between two changes of noise frequency + [Tooltip("the maximum time between two changes of noise frequency")] + public Vector3 NoiseFrequencyMax = Vector3.one; + + [Header("Noise Shift")] + /// how much the noise should be shifted at minimum + [Tooltip("how much the noise should be shifted at minimum")] + public Vector3 NoiseShiftMin = Vector3.zero; + /// how much the noise should be shifted at maximum + [Tooltip("how much the noise should be shifted at maximum")] + public Vector3 NoiseShiftMax = Vector3.zero; + + + /// + /// Returns the delta time, either regular or unscaled + /// + /// + public float GetDeltaTime() + { + float deltaTime = UseUnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime; + deltaTime *= TimeMultiplier; + return deltaTime; + } + + /// + /// Returns the time, either regular or unscaled + /// + /// + public float GetTime() + { + float time = UseUnscaledTime ? Time.unscaledTime : Time.time; + time *= TimeMultiplier; + return time; + } + } + + /// + /// A struct used to store internal wiggle properties + /// + public struct InternalWiggleProperties + { + public Vector3 returnVector; + public Vector3 newValue; + public Vector3 initialValue; + public Vector3 startValue; + public float timeSinceLastChange ; + public float randomFrequency; + public Vector3 randomNoiseFrequency; + public Vector3 randomAmplitude; + public Vector3 randomNoiseShift; + public float timeSinceLastPause; + public float pauseDuration; + public float noiseElapsedTime; + public Vector3 limitedTimeValueSave; + public Vector3 remapZero; + public Vector3 remapOne; + public float curveDirection; + public bool ping; + } + + /// + /// Add this class to a GameObject to be able to control its position/rotation/scale individually and periodically, allowing it to "wiggle" (or just move however you want on a periodic basis) + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Various/MMWiggle")] + public class MMWiggle : MonoBehaviour + { + /// the possible update modes + public enum UpdateModes { Update, FixedUpdate, LateUpdate } + + /// the selected update mode + [Tooltip("the selected update mode")] + public UpdateModes UpdateMode = UpdateModes.Update; + /// whether or not position wiggle is active + [Tooltip("whether or not position wiggle is active")] + public bool PositionActive = false; + /// whether or not rotation wiggle is active + [Tooltip("whether or not rotation wiggle is active")] + public bool RotationActive = false; + /// whether or not scale wiggle is active + [Tooltip("whether or not scale wiggle is active")] + public bool ScaleActive = false; + /// all public info related to position wiggling + [Tooltip("all public info related to position wiggling")] + public WiggleProperties PositionWiggleProperties; + /// all public info related to rotation wiggling + [Tooltip("all public info related to rotation wiggling")] + public WiggleProperties RotationWiggleProperties; + /// all public info related to scale wiggling + [Tooltip("all public info related to scale wiggling")] + public WiggleProperties ScaleWiggleProperties; + /// a debug duration used in conjunction with the debug buttons + [Tooltip("a debug duration used in conjunction with the debug buttons")] + public float DebugWiggleDuration = 2f; + + protected InternalWiggleProperties _positionInternalProperties; + protected InternalWiggleProperties _rotationInternalProperties; + protected InternalWiggleProperties _scaleInternalProperties; + + public virtual void WigglePosition(float duration) + { + WiggleValue(ref PositionWiggleProperties, ref _positionInternalProperties, duration); + } + + public virtual void WiggleRotation(float duration) + { + WiggleValue(ref RotationWiggleProperties, ref _rotationInternalProperties, duration); + } + + public virtual void WiggleScale(float duration) + { + WiggleValue(ref ScaleWiggleProperties, ref _scaleInternalProperties, duration); + } + + protected virtual void WiggleValue(ref WiggleProperties property, ref InternalWiggleProperties internalProperties, float duration) + { + InitializeRandomValues(ref property, ref internalProperties); + internalProperties.limitedTimeValueSave = internalProperties.initialValue; + property.LimitedTime = true; + property.LimitedTimeLeft = duration; + property.LimitedTimeTotal = duration; + property.WigglePermitted = true; + } + + /// + /// On Start() we trigger the initialization + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init we get the start values and trigger our coroutines for each property + /// + public virtual void Initialization() + { + _positionInternalProperties.initialValue = transform.localPosition; + _positionInternalProperties.startValue = this.transform.localPosition; + + _rotationInternalProperties.initialValue = transform.localEulerAngles; + _rotationInternalProperties.startValue = this.transform.localEulerAngles; + + _scaleInternalProperties.initialValue = transform.localScale; + _scaleInternalProperties.startValue = this.transform.localScale; + + InitializeRandomValues(ref PositionWiggleProperties, ref _positionInternalProperties); + InitializeRandomValues(ref RotationWiggleProperties, ref _rotationInternalProperties); + InitializeRandomValues(ref ScaleWiggleProperties, ref _scaleInternalProperties); + } + + /// + /// Initializes internal properties of the specified wiggle value + /// + /// + /// + protected virtual void InitializeRandomValues(ref WiggleProperties properties, ref InternalWiggleProperties internalProperties) + { + internalProperties.newValue = internalProperties.initialValue; + internalProperties.timeSinceLastChange = 0; + internalProperties.returnVector = Vector3.zero; + internalProperties.randomFrequency = UnityEngine.Random.Range(properties.FrequencyMin, properties.FrequencyMax); + internalProperties.randomNoiseFrequency = Vector3.zero; + internalProperties.randomAmplitude = Vector3.zero; + internalProperties.timeSinceLastPause = 0; + internalProperties.pauseDuration = 0; + internalProperties.noiseElapsedTime = 0; + internalProperties.curveDirection = 1f; + properties.LimitedTimeLeft = properties.LimitedTimeTotal; + + RandomizeVector3(ref internalProperties.randomAmplitude, properties.AmplitudeMin, properties.AmplitudeMax); + RandomizeVector3(ref internalProperties.randomNoiseFrequency, properties.NoiseFrequencyMin, properties.NoiseFrequencyMax); + RandomizeVector3(ref internalProperties.randomNoiseShift, properties.NoiseShiftMin, properties.NoiseShiftMax); + RandomizeVector3(ref internalProperties.remapZero, properties.RemapCurveZeroMin, properties.RemapCurveZeroMax); + RandomizeVector3(ref internalProperties.remapOne, properties.RemapCurveOneMin, properties.RemapCurveOneMax); + + if (properties.ForceVectorLength) + { + internalProperties.randomAmplitude = internalProperties.randomAmplitude.normalized * properties.ForcedVectorLength; + } + + internalProperties.newValue = DetermineNewValue(properties, internalProperties.newValue, internalProperties.initialValue, ref internalProperties.startValue, + ref internalProperties.randomAmplitude, ref internalProperties.randomFrequency, ref internalProperties.pauseDuration, true); + } + + /// + /// Every frame we update our object's position, rotation and scale + /// + protected virtual void Update() + { + if (UpdateMode == UpdateModes.Update) + { + ProcessUpdate(); + } + } + + /// + /// Every frame we update our object's position, rotation and scale + /// + protected virtual void LateUpdate() + { + if (UpdateMode == UpdateModes.LateUpdate) + { + ProcessUpdate(); + } + } + + /// + /// Every frame we update our object's position, rotation and scale + /// + protected virtual void FixedUpdate() + { + if (UpdateMode == UpdateModes.FixedUpdate) + { + ProcessUpdate(); + } + } + + /// + /// Meant to be executed at the selected UpdateMode + /// + protected virtual void ProcessUpdate() + { + _positionInternalProperties.returnVector = transform.localPosition; + if (UpdateValue(PositionActive, PositionWiggleProperties, ref _positionInternalProperties)) + { + transform.localPosition = _positionInternalProperties.returnVector; + } + + _rotationInternalProperties.returnVector = transform.localEulerAngles; + if (UpdateValue(RotationActive, RotationWiggleProperties, ref _rotationInternalProperties)) + { + transform.localEulerAngles = _rotationInternalProperties.returnVector; + } + + _scaleInternalProperties.returnVector = transform.localScale; + if (UpdateValue(ScaleActive, ScaleWiggleProperties, ref _scaleInternalProperties)) + { + transform.localScale = _scaleInternalProperties.returnVector; + } + } + + /// + /// Computes the next Vector3 value for the specified property + /// + /// + /// + /// + /// + protected virtual bool UpdateValue(bool valueActive, WiggleProperties properties, ref InternalWiggleProperties internalProperties) + { + if (!valueActive) { return false; } + if (!properties.WigglePermitted) { return false; } + + // handle limited time + if ((properties.LimitedTime) && (properties.LimitedTimeTotal > 0f)) + { + float timeSave = properties.LimitedTimeLeft; + properties.LimitedTimeLeft -= properties.GetDeltaTime(); + if (properties.LimitedTimeLeft <= 0) + { + if (timeSave > 0f) + { + if (properties.LimitedTimeResetValue) + { + internalProperties.returnVector = internalProperties.limitedTimeValueSave; + properties.LimitedTimeLeft = 0; + properties.WigglePermitted = false; + return true; + } + } + return false; + } + } + + switch (properties.WiggleType) + { + case WiggleTypes.PingPong: + return MoveVector3TowardsTarget(ref internalProperties.returnVector, properties, ref internalProperties.startValue, internalProperties.initialValue, + ref internalProperties.newValue, ref internalProperties.timeSinceLastPause, + ref internalProperties.timeSinceLastChange, ref internalProperties.randomAmplitude, + ref internalProperties.randomFrequency, + ref internalProperties.pauseDuration, internalProperties.randomFrequency); + + + case WiggleTypes.Random: + return MoveVector3TowardsTarget(ref internalProperties.returnVector, properties, ref internalProperties.startValue, internalProperties.initialValue, + ref internalProperties.newValue, ref internalProperties.timeSinceLastPause, + ref internalProperties.timeSinceLastChange, ref internalProperties.randomAmplitude, + ref internalProperties.randomFrequency, + ref internalProperties.pauseDuration, internalProperties.randomFrequency); + + case WiggleTypes.Noise: + internalProperties.returnVector = AnimateNoiseValue(ref internalProperties, properties); + return true; + + case WiggleTypes.Curve: + internalProperties.returnVector = AnimateCurveValue(ref internalProperties, properties); + return true; + } + return false; + } + + /// + /// Applies a falloff to the computed value based on time spent and a falloff animation curve + /// + /// + /// + /// + protected float ApplyFalloff(WiggleProperties properties) + { + float newValue = 1f; + if ((properties.LimitedTime) && (properties.LimitedTimeTotal > 0f)) + { + float curveProgress = (properties.LimitedTimeTotal - properties.LimitedTimeLeft) / properties.LimitedTimeTotal; + newValue = properties.LimitedTimeFalloff.Evaluate(curveProgress); + } + return newValue; + } + + /// + /// Animates a Vector3 value along a perlin noise + /// + /// + /// + /// + protected virtual Vector3 AnimateNoiseValue(ref InternalWiggleProperties internalProperties, WiggleProperties properties) + { + internalProperties.noiseElapsedTime += properties.GetDeltaTime(); + + internalProperties.newValue.x = (Mathf.PerlinNoise(internalProperties.randomNoiseFrequency.x * internalProperties.noiseElapsedTime, internalProperties.randomNoiseShift.x) * 2.0f - 1.0f) * internalProperties.randomAmplitude.x; + internalProperties.newValue.y = (Mathf.PerlinNoise(internalProperties.randomNoiseFrequency.y * internalProperties.noiseElapsedTime, internalProperties.randomNoiseShift.y) * 2.0f - 1.0f) * internalProperties.randomAmplitude.y; + internalProperties.newValue.z = (Mathf.PerlinNoise(internalProperties.randomNoiseFrequency.z * internalProperties.noiseElapsedTime, internalProperties.randomNoiseShift.z) * 2.0f - 1.0f) * internalProperties.randomAmplitude.z; + + internalProperties.newValue *= ApplyFalloff(properties); + + if (properties.RelativeAmplitude) + { + internalProperties.newValue += internalProperties.initialValue; + } + + if (properties.UniformValues) + { + internalProperties.newValue.y = internalProperties.newValue.x; + internalProperties.newValue.z = internalProperties.newValue.x; + } + + return internalProperties.newValue; + } + + /// + /// Animates a Vector3 value along a specified curve + /// + /// + /// + /// + protected virtual Vector3 AnimateCurveValue(ref InternalWiggleProperties internalProperties, WiggleProperties properties) + { + internalProperties.timeSinceLastPause += properties.GetDeltaTime(); + internalProperties.timeSinceLastChange += properties.GetDeltaTime(); + + // handle pause + if (internalProperties.timeSinceLastPause < internalProperties.pauseDuration) + { + float curveProgress = (internalProperties.curveDirection == 1f) ? 1f : 0f; + + EvaluateCurve(properties.Curve, curveProgress, internalProperties.remapZero, internalProperties.remapOne, ref internalProperties.newValue, properties); + if (properties.RelativeCurveAmplitude) + { + internalProperties.newValue += internalProperties.initialValue; + } + } + + // if we're just out of a pause + if (internalProperties.timeSinceLastPause == internalProperties.timeSinceLastChange) + { + internalProperties.timeSinceLastChange = 0f; + } + + // if we've reached the end + if (internalProperties.randomFrequency > 0) + { + float curveProgress = (internalProperties.timeSinceLastChange) / internalProperties.randomFrequency; + if (internalProperties.curveDirection < 0f) + { + curveProgress = 1 - curveProgress; + } + + EvaluateCurve(properties.Curve, curveProgress, internalProperties.remapZero, internalProperties.remapOne, ref internalProperties.newValue, properties); + + if (internalProperties.timeSinceLastChange > internalProperties.randomFrequency) + { + internalProperties.timeSinceLastChange = 0f; + internalProperties.timeSinceLastPause = 0f; + if (properties.CurvePingPong) + { + internalProperties.curveDirection = -internalProperties.curveDirection; + } + + RandomizeFloat(ref internalProperties.randomFrequency, properties.FrequencyMin, properties.FrequencyMax); + } + } + + if (properties.RelativeCurveAmplitude) + { + internalProperties.newValue = internalProperties.initialValue + internalProperties.newValue; + } + + return internalProperties.newValue; + } + + protected virtual void EvaluateCurve(AnimationCurve curve, float percent, Vector3 remapMin, Vector3 remapMax, ref Vector3 returnValue, WiggleProperties properties) + { + returnValue.x = MMFeedbacksHelpers.Remap(curve.Evaluate(percent), 0f, 1f, remapMin.x, remapMax.x); + returnValue.y = MMFeedbacksHelpers.Remap(curve.Evaluate(percent), 0f, 1f, remapMin.y, remapMax.y); + returnValue.z = MMFeedbacksHelpers.Remap(curve.Evaluate(percent), 0f, 1f, remapMin.z, remapMax.z); + returnValue *= ApplyFalloff(properties); + } + + /// + /// Moves a vector3's values towards a target + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual bool MoveVector3TowardsTarget(ref Vector3 movedValue, WiggleProperties properties, ref Vector3 startValue, Vector3 initialValue, + ref Vector3 destinationValue, ref float timeSinceLastPause, ref float timeSinceLastValueChange, + ref Vector3 randomAmplitude, ref float randomFrequency, + ref float pauseDuration, float frequency) + { + timeSinceLastPause += properties.GetDeltaTime(); + timeSinceLastValueChange += properties.GetDeltaTime(); + + // handle pause + if (timeSinceLastPause < pauseDuration) + { + return false; + } + + // if we're just out of a pause + if (timeSinceLastPause == timeSinceLastValueChange) + { + timeSinceLastValueChange = 0f; + } + + // if we've reached the end + if (frequency > 0) + { + float curveProgress = (timeSinceLastValueChange) / frequency; + + if (!properties.UseSpeedCurve) + { + movedValue = Vector3.Lerp(startValue, destinationValue, curveProgress); + } + else + { + float curvePercent = properties.SpeedCurve.Evaluate(curveProgress); + movedValue = Vector3.LerpUnclamped(startValue, destinationValue, curvePercent); + } + + if (timeSinceLastValueChange > frequency) + { + timeSinceLastValueChange = 0f; + timeSinceLastPause = 0f; + movedValue = destinationValue; + destinationValue = DetermineNewValue(properties, movedValue, initialValue, ref startValue, + ref randomAmplitude, ref randomFrequency, ref pauseDuration); + } + } + return true; + } + + /// + /// Picks a new target value + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual Vector3 DetermineNewValue(WiggleProperties properties, Vector3 newValue, Vector3 initialValue, ref Vector3 startValue, + ref Vector3 randomAmplitude, ref float randomFrequency, ref float pauseDuration, bool firstPlay = false) + { + switch (properties.WiggleType) + { + case WiggleTypes.PingPong: + if (properties.RelativeAmplitude) + { + if (firstPlay) + { + startValue = properties.AmplitudeMin * ApplyFalloff(properties) + initialValue; + newValue = properties.AmplitudeMax * ApplyFalloff(properties) + initialValue; + } + else + { + if (newValue == properties.AmplitudeMin + initialValue) + { + startValue = newValue; + newValue = properties.AmplitudeMax * ApplyFalloff(properties) + initialValue; + } + else + { + startValue = newValue; + newValue = properties.AmplitudeMin * ApplyFalloff(properties) + initialValue; + } + } + } + else + { + if (firstPlay) + { + startValue = properties.AmplitudeMin * ApplyFalloff(properties); + newValue = properties.AmplitudeMax * ApplyFalloff(properties); + } + else + { + startValue = newValue; + newValue = (newValue == properties.AmplitudeMin) ? properties.AmplitudeMax * ApplyFalloff(properties) : properties.AmplitudeMin; + } + } + RandomizeFloat(ref randomFrequency, properties.FrequencyMin, properties.FrequencyMax); + RandomizeFloat(ref pauseDuration, properties.PauseMin, properties.PauseMax); + + if (properties.UniformValues) + { + newValue.y = newValue.x; + newValue.z = newValue.x; + } + + return newValue; + + case WiggleTypes.Random: + startValue = newValue; + RandomizeFloat(ref randomFrequency, properties.FrequencyMin, properties.FrequencyMax); + RandomizeVector3(ref randomAmplitude, properties.AmplitudeMin, properties.AmplitudeMax); + RandomizeFloat(ref pauseDuration, properties.PauseMin, properties.PauseMax); + newValue = randomAmplitude; + + if (properties.UniformValues) + { + newValue.y = newValue.x; + newValue.z = newValue.x; + } + + newValue *= ApplyFalloff(properties); + if (properties.RelativeAmplitude) + { + newValue += initialValue; + } + + return newValue; + } + return Vector3.zero; + } + + /// + /// Randomizes a float between bounds + /// + /// + /// + /// + /// + protected virtual float RandomizeFloat(ref float randomizedFloat, float floatMin, float floatMax) + { + randomizedFloat = UnityEngine.Random.Range(floatMin, floatMax); + return randomizedFloat; + } + + /// + /// Randomizes a vector3 within bounds + /// + /// + /// + /// + /// + protected virtual Vector3 RandomizeVector3(ref Vector3 randomizedVector, Vector3 vectorMin, Vector3 vectorMax) + { + randomizedVector.x = UnityEngine.Random.Range(vectorMin.x, vectorMax.x); + randomizedVector.y = UnityEngine.Random.Range(vectorMin.y, vectorMax.y); + randomizedVector.z = UnityEngine.Random.Range(vectorMin.z, vectorMax.z); + return randomizedVector; + } + + public virtual void RestoreInitialValues() + { + transform.localPosition = _positionInternalProperties.initialValue; + transform.localEulerAngles = _rotationInternalProperties.initialValue; + transform.localScale = _scaleInternalProperties.initialValue; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMWiggle.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMWiggle.cs.meta new file mode 100644 index 0000000..14e844e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Shakers/MMWiggle.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 347013242dca7c44fb5001793033ea59 +timeCreated: 1523894079 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs.meta new file mode 100644 index 0000000..6611a2e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9fca3eb86e0e824dbcb0bbb518a57cb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core.meta new file mode 100644 index 0000000..b5b85b1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 40832f4612d515b4f94ce63fc891d082 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components.meta new file mode 100644 index 0000000..d34f090 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 98fda51640f38b147ab02c136d21765b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringColorComponent.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringColorComponent.cs new file mode 100644 index 0000000..72b7a6c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringColorComponent.cs @@ -0,0 +1,403 @@ +using System.Collections; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MoreMountains.Feedbacks +{ + /// + /// An event used to pilot a MMSpringColor component + /// + public struct MMSpringColorEvent + { + static MMSpringColorEvent e; + + public MMChannelData ChannelData; + public MMSpringComponentBase TargetSpring; + public SpringCommands Command; + public Color MoveToValue; + public Color BumpAmount; + public Color MoveToRandomValueMin; + public Color MoveToRandomValueMax; + public Color BumpAmountRandomValueMin; + public Color BumpAmountRandomValueMax; + public bool OverrideDamping; + public float NewDamping; + public bool OverrideFrequency; + public float NewFrequency; + + public static void Trigger(SpringCommands command, MMSpringComponentBase targetSpring, MMChannelData channelData, + Color moveToValue = default, Color bumpAmount = default, + Color moveToRandomValueMin = default, Color moveToRandomValueMax = default, + Color bumpAmountRandomValueMin = default, Color bumpAmountRandomValueMax = default, + bool overrideDamping = false, float newDamping = default, bool overrideFrequency = false, float newFrequency = default) + { + e.ChannelData = channelData; + e.TargetSpring = targetSpring; + e.Command = command; + e.MoveToValue = moveToValue; + e.BumpAmount = bumpAmount; + e.MoveToRandomValueMin = moveToRandomValueMin; + e.MoveToRandomValueMax = moveToRandomValueMax; + e.BumpAmountRandomValueMin = bumpAmountRandomValueMin; + e.BumpAmountRandomValueMax = bumpAmountRandomValueMax; + e.OverrideDamping = overrideDamping; + e.NewDamping = newDamping; + e.OverrideFrequency = overrideFrequency; + e.NewFrequency = newFrequency; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// A spring component used to pilot color values on a target + /// + public abstract class MMSpringColorComponent : MMSpringComponentBase, MMEventListener where T:Component + { + [MMInspectorGroup("Target", true, 17)] + public T Target; + + [MMInspectorGroup("Channel & TimeScale", true, 16, true)] + /// whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes) + [Tooltip("whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes)")] + public TimeScaleModes TimeScaleMode = TimeScaleModes.Scaled; + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + [MMInspectorGroup("Spring Settings", true, 18)] + [Header("Spring")] + /// the spring definition driving all sub spring components for this color spring + [Tooltip("the spring definition driving all sub spring components for this color spring")] + public MMSpringColor ColorSpring; + /// the multiplier to apply when bumping this color spring (increase this if you're not getting enough of the bump color on bump) + [Tooltip("the multiplier to apply when bumping this color spring (increase this if you're not getting enough of the bump color on bump)")] + public float BumpMultiplier = 20f; + + [MMInspectorGroup("Randomness", true, 12, true)] + + [Header("Move To Random")] + + /// the min color from which to pick a random color in MoveToRandom mode + [Tooltip("the min color from which to pick a random color in MoveToRandom mode")] + public Color MoveToRandomColorMin = MMColors.LawnGreen; + /// the max color from which to pick a random color in MoveToRandom mode + [Tooltip("the max color from which to pick a random color in MoveToRandom mode")] + public Color MoveToRandomColorMax = MMColors.MediumSeaGreen; + + /// the min color from which to pick a random color in BumpRandom mode + [Tooltip("the min color from which to pick a random color in BumpRandom mode")] + public Color BumpRandomColorMin = MMColors.HotPink; + /// the max color from which to pick a random color in BumpRandom mode + [Tooltip("the max color from which to pick a random color in BumpRandom mode")] + public Color BumpRandomColorMax = MMColors.Plum; + + [MMInspectorGroup("Test", true, 20, true)] + /// the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector + [Tooltip("the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector")] + public Color TestMoveToColor = MMColors.Aquamarine; + [MMInspectorButtonBar(new string[] { "MoveTo", "MoveToAdditive", "MoveToSubtractive", "MoveToRandom", "MoveToInstant" }, + new string[] { "TestMoveTo", "TestMoveToAdditive", "TestMoveToSubtractive", "TestMoveToRandom", "TestMoveToInstant" }, + new bool[] { true, true, true, true, true }, + new string[] { "main-call-to-action", "", "", "", "" })] + public bool MoveToToolbar; + + /// the amount by which to bump this spring when interacting with the Bump debug button in its inspector + [Tooltip("the amount by which to bump this spring when interacting with the Bump debug button in its inspector")] + public Color TestBumpColor = MMColors.Orange; + + [MMInspectorButtonBar(new string[] { "Bump", "BumpRandom" }, + new string[] { "TestBump", "TestBumpRandom" }, + new bool[] { true, true }, + new string[] { "main-call-to-action", "" })] + public bool BumpToToolbar; + + [MMInspectorButtonBar(new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new bool[] { true, true, true, true }, + new string[] { "", "", "", "" })] + public bool OtherControlsToToolbar; + + public override bool LowVelocity => (Mathf.Abs(ColorSpring.Velocity.r) + Mathf.Abs(ColorSpring.Velocity.g) + Mathf.Abs(ColorSpring.Velocity.b) + Mathf.Abs(ColorSpring.Velocity.a) + Mathf.Abs(ColorSpring.ColorSpring.Velocity)) < _velocityLowThreshold; + public float DeltaTime => (TimeScaleMode == TimeScaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; + + public virtual Color TargetColor { get; set; } + + protected bool _bumping = false; + protected Color _newBumpColor; + protected Color _bumpTargetColor; + protected Color _initialBumpColor; + protected Coroutine _coroutine; + + #region PUBLIC_API + + public virtual void MoveTo(Color newColor) + { + Activate(); + ColorSpring.MoveTo(newColor); + } + + public virtual void MoveToAdditive(Color newValue) + { + Activate(); + ColorSpring.MoveToAdditive(newValue); + } + + public virtual void MoveToSubtractive(Color newValue) + { + Activate(); + ColorSpring.MoveToSubtractive(newValue); + } + + public virtual void MoveToRandom() + { + Activate(); + ColorSpring.MoveToRandom(MoveToRandomColorMin, MoveToRandomColorMax); + } + + public virtual void MoveToInstant(Vector4 newValue) + { + Activate(); + ColorSpring.MoveToInstant(newValue); + } + + public virtual void MoveToRandom(Color min, Color max) + { + Activate(); + ColorSpring.MoveToRandom(min, max); + } + + public virtual void Bump(Color bumpColor) + { + Activate(); + _bumping = true; + _bumpTargetColor = bumpColor; + _initialBumpColor = ColorSpring.CurrentValue; + ColorSpring.Bump(bumpColor); + } + + public virtual void BumpRandom() + { + Activate(); + _bumpTargetColor = _bumpTargetColor.MMRandomColor(BumpRandomColorMin, BumpRandomColorMax); + Bump(_bumpTargetColor); + } + + public virtual void BumpRandom(Color min, Color max) + { + Activate(); + _bumpTargetColor = _bumpTargetColor.MMRandomColor(min, max); + Bump(_bumpTargetColor); + } + + public override void Stop() + { + base.Stop(); + this.enabled = false; + GrabCurrentValue(); + ColorSpring.Stop(); + if (_coroutine != null) + { + StopCoroutine(_coroutine); + _coroutine = null; + } + } + + public override void RestoreInitialValue() + { + ColorSpring.RestoreInitialValue(); + ApplyValue(ColorSpring.CurrentValue); + } + + public override void ResetInitialValue() + { + ColorSpring.SetCurrentValueAsInitialValue(); + } + + protected override void UpdateSpringValue() + { + if (_bumping) + { + float t = ColorSpring.ColorSpring.CurrentValue * BumpMultiplier; + ColorSpring.UpdateSpringValue(DeltaTime); + _newBumpColor = Color.Lerp(_initialBumpColor, _bumpTargetColor, t); + ApplyValue(_newBumpColor); + } + else + { + ColorSpring.UpdateSpringValue(DeltaTime); + ApplyValue(ColorSpring.CurrentValue); + } + } + + public override void Finish() + { + _bumping = false; + ColorSpring.Finish(); + ApplyValue(ColorSpring.CurrentValue); + } + + #endregion + + #region INTERNAL + + protected override void Initialization() + { + base.Initialization(); + GrabCurrentValue(); + ColorSpring.SetInitialValue(ColorSpring.CurrentValue); + ColorSpring.TargetValue = ColorSpring.CurrentValue; + } + + protected override void GrabCurrentValue() + { + base.GrabCurrentValue(); + ColorSpring.CurrentValue = TargetColor; + + } + + protected virtual void ApplyValue(Color newColor) + { + TargetColor = newColor; + } + + /*protected virtual void ReplicateDriverSpring() + { + _springX.Damping = ColorSpring.Damping; + _springY.Damping = ColorSpring.Damping; + _springZ.Damping = ColorSpring.Damping; + _springW.Damping = ColorSpring.Damping; + _springX.Frequency = ColorSpring.Frequency; + _springY.Frequency = ColorSpring.Frequency; + _springZ.Frequency = ColorSpring.Frequency; + _springW.Frequency = ColorSpring.Frequency; + }*/ + + #endregion + + #region EVENTS + + public void OnMMEvent(MMSpringColorEvent springEvent) + { + bool eventMatch = springEvent.ChannelData != null && MMChannel.Match(springEvent.ChannelData, ChannelMode, Channel, MMChannelDefinition); + bool targetMatch = springEvent.TargetSpring != null && springEvent.TargetSpring.Equals(this); + if (!eventMatch && !targetMatch) + { + return; + } + + if (springEvent.OverrideDamping) + { + ColorSpring.SetDamping(springEvent.NewDamping); + } + if (springEvent.OverrideFrequency) + { + ColorSpring.SetFrequency(springEvent.NewFrequency); + } + switch (springEvent.Command) + { + case SpringCommands.MoveTo: + MoveTo(springEvent.MoveToValue); + break; + case SpringCommands.MoveToAdditive: + MoveToAdditive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToSubtractive: + MoveToSubtractive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToRandom: + MoveToRandom(springEvent.MoveToRandomValueMin, springEvent.MoveToRandomValueMax); + break; + case SpringCommands.MoveToInstant: + MoveToInstant(springEvent.MoveToValue); + break; + case SpringCommands.Bump: + Bump(springEvent.BumpAmount); + break; + case SpringCommands.BumpRandom: + BumpRandom(springEvent.BumpAmountRandomValueMin, springEvent.BumpAmountRandomValueMax); + break; + case SpringCommands.Stop: + Stop(); + break; + case SpringCommands.Finish: + Finish(); + break; + case SpringCommands.RestoreInitialValue: + RestoreInitialValue(); + break; + case SpringCommands.ResetInitialValue: + ResetInitialValue(); + break; + } + } + + protected override void Awake() + { + if (Target == null) + { + Target = GetComponent(); + } + base.Awake(); + this.MMEventStartListening(); + } + + protected void OnDestroy() + { + this.MMEventStopListening(); + } + + #endregion + + #region TEST_METHODS + + protected override void TestMoveTo() + { + MoveTo(TestMoveToColor); + } + + protected override void TestMoveToAdditive() + { + MoveToAdditive(TestMoveToColor); + } + + protected override void TestMoveToSubtractive() + { + MoveToSubtractive(TestMoveToColor); + } + + protected override void TestMoveToRandom() + { + MoveToRandom(); + } + + protected override void TestMoveToInstant() + { + MoveToInstant(TestMoveToColor); + } + + protected override void TestBump() + { + Bump(TestBumpColor); + } + + protected override void TestBumpRandom() + { + BumpRandom(); + } + + #endregion + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringColorComponent.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringColorComponent.cs.meta new file mode 100644 index 0000000..3888729 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringColorComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce8507eee5dca844dae81d478b63d348 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringFloatComponent.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringFloatComponent.cs new file mode 100644 index 0000000..492a292 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringFloatComponent.cs @@ -0,0 +1,359 @@ +using System; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MoreMountains.Feedbacks +{ + /// + /// The possible commands used to pilot a spring + /// MoveTo : move the current value of the spring to the MoveToValue specified in the event + /// MoveToAdditive : adds the MoveToValue specified in the event to the current target value of the spring + /// MoveToSubtractive : subtracts the MoveToValue specified in the event to the current target value of the spring + /// MoveToRandom : moves the current value of the spring to a random value using MoveToRandomValue + /// MoveToInstant : instantly moves the current value of the spring to the MoveToValue specified in the event + /// Bump : bumps the spring by the BumpAmount specified in the event + /// BumpRandom : bumps the spring by a random amount specified in the event + /// Stop : stops the spring instantly + /// Finish : instantly moves the spring to its final target value + /// RestoreInitialValue : restores the spring's initial value + /// ResetInitialValue : resets the spring's initial value to its current value + /// + public enum SpringCommands { MoveTo, MoveToAdditive, MoveToSubtractive, MoveToRandom, MoveToInstant, Bump, BumpRandom, Stop, Finish, RestoreInitialValue, ResetInitialValue } + + /// + /// An event used to pilot a MMSpringColor component + /// + public struct MMSpringFloatEvent + { + static MMSpringFloatEvent e; + + public MMChannelData ChannelData; + public MMSpringComponentBase TargetSpring; + public SpringCommands Command; + public float MoveToValue; + public float BumpAmount; + public Vector2 MoveToRandomValue; + public Vector2 BumpAmountRandomValue; + public bool OverrideDamping; + public float NewDamping; + public bool OverrideFrequency; + public float NewFrequency; + + public static void Trigger(SpringCommands command, MMSpringComponentBase targetSpring, MMChannelData channelData, + float moveToValue = 1f, float bumpAmount = 1f, Vector2 moveToRandomValue = default, Vector2 bumpAmountRandomValue = default, + bool overrideDamping = false, float newDamping = 0.8f, bool overrideFrequency = false, float newFrequency = 5f) + { + e.ChannelData = channelData; + e.TargetSpring = targetSpring; + e.Command = command; + e.MoveToValue = moveToValue; + e.BumpAmount = bumpAmount; + e.MoveToRandomValue = moveToRandomValue; + e.BumpAmountRandomValue = bumpAmountRandomValue; + e.OverrideDamping = overrideDamping; + e.NewDamping = newDamping; + e.OverrideFrequency = overrideFrequency; + e.NewFrequency = newFrequency; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// A spring component used to pilot float values on a target + /// + public abstract class MMSpringFloatComponent : MMSpringComponentBase, MMEventListener where T:Component + { + [MMInspectorGroup("Target", true, 17)] + public T Target; + + [MMInspectorGroup("Channel & TimeScale", true, 16, true)] + /// whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes) + [Tooltip("whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes)")] + public TimeScaleModes TimeScaleMode = TimeScaleModes.Scaled; + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + [MMInspectorGroup("Spring Settings", true, 18)] + public MMSpringFloat FloatSpring; + + [MMInspectorGroup("Randomness", true, 12, true)] + /// the min (x) and max (y) values between which a random target value will be picked when calling MoveToRandom + [Tooltip("the min (x) and max (y) values between which a random target value will be picked when calling MoveToRandom")] + [MMVector("Min", "Max")] + public Vector2 MoveToRandomValue = new Vector2(-2f, 2f); + /// the min (x) and max (y) values between which a random bump value will be picked when calling BumpRandom + [Tooltip("the min (x) and max (y) values between which a random bump value will be picked when calling BumpRandom")] + [MMVector("Min", "Max")] + public Vector2 BumpAmountRandomValue = new Vector2(20f, 100f); + + [MMInspectorGroup("Test", true, 20, true)] + /// the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector + [Tooltip("the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector")] + public float TestMoveToValue = 2f; + [MMInspectorButtonBar(new string[] { "MoveTo", "MoveToAdditive", "MoveToSubtractive", "MoveToRandom", "MoveToInstant" }, + new string[] { "TestMoveTo", "TestMoveToAdditive", "TestMoveToSubtractive", "TestMoveToRandom", "TestMoveToInstant" }, + new bool[] { true, true, true, true, true }, + new string[] { "main-call-to-action", "", "", "", "" })] + public bool MoveToToolbar; + + /// the amount by which to bump this spring when interacting with the Bump debug button in its inspector + [Tooltip("the amount by which to bump this spring when interacting with the Bump debug button in its inspector")] + public float TestBumpAmount = 75f; + [MMInspectorButtonBar(new string[] { "Bump", "BumpRandom" }, + new string[] { "TestBump", "TestBumpRandom" }, + new bool[] { true, true }, + new string[] { "main-call-to-action", "" })] + public bool BumpToToolbar; + + [MMInspectorButtonBar(new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new bool[] { true, true, true, true }, + new string[] { "", "", "", "" })] + public bool OtherControlsToToolbar; + + public override bool LowVelocity => Mathf.Abs(FloatSpring.Velocity) < _velocityLowThreshold; + public float DeltaTime => (TimeScaleMode == TimeScaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; + + public virtual float TargetFloat { get; set; } + + #region PUBLIC_API + + public virtual void MoveTo(float newValue) + { + Activate(); + FloatSpring.MoveTo(newValue); + } + + public virtual void MoveToAdditive(float newValue) + { + Activate(); + FloatSpring.MoveToAdditive(newValue); + } + + public virtual void MoveToSubtractive(float newValue) + { + Activate(); + FloatSpring.MoveToSubtractive(newValue); + } + + public virtual void MoveToRandom() + { + Activate(); + FloatSpring.MoveToRandom(MoveToRandomValue.x, MoveToRandomValue.y); + } + + public virtual void MoveToInstant(float newValue) + { + Activate(); + FloatSpring.MoveToInstant(newValue); + } + + public virtual void MoveToRandom(float min, float max) + { + Activate(); + FloatSpring.MoveToRandom(min, max); + } + + public virtual void Bump(float bumpAmount) + { + Activate(); + FloatSpring.Bump(bumpAmount); + } + + public virtual void BumpRandom() + { + Activate(); + FloatSpring.BumpRandom(BumpAmountRandomValue.x, BumpAmountRandomValue.y); + } + + public virtual void BumpRandom(float min, float max) + { + Activate(); + FloatSpring.BumpRandom(min, max); + } + + public override void Stop() + { + base.Stop(); + this.enabled = false; + GrabCurrentValue(); + FloatSpring.Stop(); + } + + public override void RestoreInitialValue() + { + FloatSpring.RestoreInitialValue(); + ApplyValue(FloatSpring.CurrentValue); + } + + public override void ResetInitialValue() + { + FloatSpring.SetCurrentValueAsInitialValue(); + } + + protected override void UpdateSpringValue() + { + FloatSpring.UpdateSpringValue(DeltaTime); + ApplyValue(FloatSpring.CurrentValue); + } + + public override void Finish() + { + FloatSpring.Finish(); + ApplyValue(FloatSpring.CurrentValue); + } + + #endregion + + #region INTERNAL + + protected override void Initialization() + { + base.Initialization(); + GrabCurrentValue(); + FloatSpring.SetInitialValue(FloatSpring.CurrentValue); + FloatSpring.TargetValue = FloatSpring.CurrentValue; + } + + protected virtual void ApplyValue(float newValue) + { + TargetFloat = newValue; + } + + protected override void GrabCurrentValue() + { + base.GrabCurrentValue(); + FloatSpring.CurrentValue = TargetFloat; + } + + #endregion + + #region EVENTS + + public void OnMMEvent(MMSpringFloatEvent springEvent) + { + bool eventMatch = springEvent.ChannelData != null && MMChannel.Match(springEvent.ChannelData, ChannelMode, Channel, MMChannelDefinition); + bool targetMatch = springEvent.TargetSpring != null && springEvent.TargetSpring.Equals(this); + if (!eventMatch && !targetMatch) + { + return; + } + + if (springEvent.OverrideDamping) + { + FloatSpring.Damping = springEvent.NewDamping; + } + if (springEvent.OverrideFrequency) + { + FloatSpring.Frequency = springEvent.NewFrequency; + } + + switch (springEvent.Command) + { + case SpringCommands.MoveTo: + MoveTo(springEvent.MoveToValue); + break; + case SpringCommands.MoveToAdditive: + MoveToAdditive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToSubtractive: + MoveToSubtractive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToRandom: + MoveToRandom(springEvent.MoveToRandomValue.x, springEvent.MoveToRandomValue.y); + break; + case SpringCommands.MoveToInstant: + MoveToInstant(springEvent.MoveToValue); + break; + case SpringCommands.Bump: + Bump(springEvent.BumpAmount); + break; + case SpringCommands.BumpRandom: + BumpRandom(springEvent.BumpAmountRandomValue.x, springEvent.BumpAmountRandomValue.y); + break; + case SpringCommands.Stop: + Stop(); + break; + case SpringCommands.Finish: + Finish(); + break; + case SpringCommands.RestoreInitialValue: + RestoreInitialValue(); + break; + case SpringCommands.ResetInitialValue: + ResetInitialValue(); + break; + } + } + + protected override void Awake() + { + if (Target == null) + { + Target = GetComponent(); + } + base.Awake(); + this.MMEventStartListening(); + } + + protected void OnDestroy() + { + this.MMEventStopListening(); + } + + #endregion + + #region TEST_METHODS + + protected override void TestMoveTo() + { + MoveTo(TestMoveToValue); + } + + protected override void TestMoveToAdditive() + { + MoveToAdditive(TestMoveToValue); + } + + protected override void TestMoveToSubtractive() + { + MoveToSubtractive(TestMoveToValue); + } + + protected override void TestMoveToRandom() + { + MoveToRandom(); + } + + protected override void TestMoveToInstant() + { + MoveToInstant(TestMoveToValue); + } + + protected override void TestBump() + { + Bump(TestBumpAmount); + } + + protected override void TestBumpRandom() + { + BumpRandom(); + } + + #endregion + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringFloatComponent.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringFloatComponent.cs.meta new file mode 100644 index 0000000..33d4ead --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringFloatComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 350a2c9fae5188346b6494925847d4e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector2Component.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector2Component.cs new file mode 100644 index 0000000..280b749 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector2Component.cs @@ -0,0 +1,357 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MoreMountains.Feedbacks +{ + /// + /// An event used to pilot a MMSpringVector2 component + /// + public struct MMSpringVector2Event + { + static MMSpringVector2Event e; + + public MMChannelData ChannelData; + public MMSpringComponentBase TargetSpring; + public SpringCommands Command; + public Vector2 MoveToValue; + public Vector2 BumpAmount; + public Vector2 MoveToRandomValueMin; + public Vector2 MoveToRandomValueMax; + public Vector2 BumpAmountRandomValueMin; + public Vector2 BumpAmountRandomValueMax; + public bool OverrideDamping; + public Vector2 NewDamping; + public bool OverrideFrequency; + public Vector2 NewFrequency; + + public static void Trigger(SpringCommands command, MMSpringComponentBase targetSpring, MMChannelData channelData, + Vector2 moveToValue = default, Vector2 bumpAmount = default, + Vector2 moveToRandomValueMin = default, Vector2 moveToRandomValueMax = default, + Vector2 bumpAmountRandomValueMin = default, Vector2 bumpAmountRandomValueMax = default, + bool overrideDamping = false, Vector2 newDamping = default, bool overrideFrequency = false, Vector2 newFrequency = default) + { + e.ChannelData = channelData; + e.TargetSpring = targetSpring; + e.Command = command; + e.MoveToValue = moveToValue; + e.BumpAmount = bumpAmount; + e.MoveToRandomValueMin = moveToRandomValueMin; + e.MoveToRandomValueMax = moveToRandomValueMax; + e.BumpAmountRandomValueMin = bumpAmountRandomValueMin; + e.BumpAmountRandomValueMax = bumpAmountRandomValueMax; + e.OverrideDamping = overrideDamping; + e.NewDamping = newDamping; + e.OverrideFrequency = overrideFrequency; + e.NewFrequency = newFrequency; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// A spring component used to pilot Vector2 values on a target + /// + public abstract class MMSpringVector2Component : MMSpringComponentBase, MMEventListener where T:Component + { + [MMInspectorGroup("Target", true, 17)] + public T Target; + + [MMInspectorGroup("Channel & TimeScale", true, 16, true)] + /// whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes) + [Tooltip("whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes)")] + public TimeScaleModes TimeScaleMode = TimeScaleModes.Scaled; + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + [MMInspectorGroup("Spring Settings", true, 18)] + [Header("SpringVector2")] + public MMSpringVector2 SpringVector2; + + [MMInspectorGroup("Randomness", true, 12, true)] + + [Header("Move To Random")] + /// the minimum vector from which to pick a random value when calling MoveToRandom() + [Tooltip("the minimum vector from which to pick a random value when calling MoveToRandom()")] + public Vector2 MoveToRandomValueMin = new Vector2(-2f, -2f); + /// the maximum vector from which to pick a random value when calling MoveToRandom() + [Tooltip("the maximum vector from which to pick a random value when calling MoveToRandom()")] + public Vector2 MoveToRandomValueMax = new Vector2(2f, 2f); + + [Header("Bump Random")] + /// the minimum vector from which to pick a random value when calling BumpRandom() + [Tooltip("the minimum vector from which to pick a random value when calling BumpRandom()")] + [MMVector("Min", "Max")] + public Vector2 BumpAmountRandomValueMin = new Vector2(-20f, -20f); + /// the maximum vector from which to pick a random value when calling BumpRandom() + [Tooltip("the maximum vector from which to pick a random value when calling BumpRandom()")] + [MMVector("Min", "Max")] + public Vector2 BumpAmountRandomValueMax = new Vector2(20f, 20f); + + [MMInspectorGroup("Test", true, 20, true)] + /// the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector + [Tooltip("the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector")] + public Vector2 TestMoveToValue = new Vector2(2f, 2f); + [MMInspectorButtonBar(new string[] { "MoveTo", "MoveToAdditive", "MoveToSubtractive", "MoveToRandom", "MoveToInstant" }, + new string[] { "TestMoveTo", "TestMoveToAdditive", "TestMoveToSubtractive", "TestMoveToRandom", "TestMoveToInstant" }, + new bool[] { true, true, true, true, true }, + new string[] { "main-call-to-action", "", "", "", "" })] + public bool MoveToToolbar; + + /// the amount by which to bump this spring when interacting with the Bump debug button in its inspector + [Tooltip("the amount by which to bump this spring when interacting with the Bump debug button in its inspector")] + public Vector2 TestBumpAmount = new Vector2(75f, 100f); + [MMInspectorButtonBar(new string[] { "Bump", "BumpRandom" }, + new string[] { "TestBump", "TestBumpRandom" }, + new bool[] { true, true }, + new string[] { "main-call-to-action", "" })] + public bool BumpToToolbar; + + [MMInspectorButtonBar(new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new bool[] { true, true, true, true }, + new string[] { "", "", "", "" })] + public bool OtherControlsToToolbar; + + public override bool LowVelocity => (Mathf.Abs(SpringVector2.Velocity.x) + Mathf.Abs(SpringVector2.Velocity.y)) < _velocityLowThreshold; + public float DeltaTime => (TimeScaleMode == TimeScaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; + public virtual Vector2 TargetVector2 { get; set; } + + #region PUBLIC_API + + public virtual void MoveTo(Vector2 newValue) + { + Activate(); + SpringVector2.MoveTo(newValue); + } + + public virtual void MoveToAdditive(Vector2 newValue) + { + Activate(); + SpringVector2.MoveToAdditive(newValue); + } + + public virtual void MoveToSubtractive(Vector2 newValue) + { + Activate(); + SpringVector2.MoveToSubtractive(newValue); + } + + public virtual void MoveToRandom() + { + Activate(); + SpringVector2.MoveToRandom(MoveToRandomValueMin, MoveToRandomValueMax); + } + + public virtual void MoveToInstant(Vector2 newValue) + { + Activate(); + SpringVector2.MoveToInstant(newValue); + } + + public virtual void MoveToRandom(Vector2 min, Vector2 max) + { + Activate(); + SpringVector2.MoveToRandom(min, max); + } + + public virtual void Bump(Vector2 bumpAmount) + { + Activate(); + SpringVector2.Bump(bumpAmount); + } + + public virtual void BumpRandom() + { + Activate(); + SpringVector2.BumpRandom(BumpAmountRandomValueMin, BumpAmountRandomValueMax); + } + + public virtual void BumpRandom(Vector2 min, Vector2 max) + { + Activate(); + SpringVector2.BumpRandom(min, max); + } + + public override void Stop() + { + base.Stop(); + this.enabled = false; + GrabCurrentValue(); + SpringVector2.Stop(); + } + + public override void RestoreInitialValue() + { + SpringVector2.RestoreInitialValue(); + ApplyValue(SpringVector2.CurrentValue); + } + + public override void ResetInitialValue() + { + SpringVector2.SetCurrentValueAsInitialValue(); + } + + protected override void UpdateSpringValue() + { + SpringVector2.UpdateSpringValue(DeltaTime); + ApplyValue(SpringVector2.CurrentValue); + } + + public override void Finish() + { + SpringVector2.Finish(); + ApplyValue(SpringVector2.CurrentValue); + } + + #endregion + + #region INTERNAL + + protected override void Initialization() + { + base.Initialization(); + GrabCurrentValue(); + SpringVector2.SetInitialValue(SpringVector2.CurrentValue); + SpringVector2.TargetValue = SpringVector2.CurrentValue; + } + + protected virtual void ApplyValue(Vector2 newValue) + { + TargetVector2 = newValue; + } + + protected override void GrabCurrentValue() + { + base.GrabCurrentValue(); + SpringVector2.CurrentValue = TargetVector2; + } + + #endregion + + #region EVENTS + + public void OnMMEvent(MMSpringVector2Event springEvent) + { + bool eventMatch = springEvent.ChannelData != null && MMChannel.Match(springEvent.ChannelData, ChannelMode, Channel, MMChannelDefinition); + bool targetMatch = springEvent.TargetSpring != null && springEvent.TargetSpring.Equals(this); + if (!eventMatch && !targetMatch) + { + return; + } + + if (springEvent.OverrideDamping) + { + SpringVector2.SetDamping(springEvent.NewDamping); + } + if (springEvent.OverrideFrequency) + { + SpringVector2.SetFrequency(springEvent.NewFrequency); + } + switch (springEvent.Command) + { + case SpringCommands.MoveTo: + MoveTo(springEvent.MoveToValue); + break; + case SpringCommands.MoveToAdditive: + MoveToAdditive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToSubtractive: + MoveToSubtractive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToRandom: + MoveToRandom(springEvent.MoveToRandomValueMin, springEvent.MoveToRandomValueMax); + break; + case SpringCommands.MoveToInstant: + MoveToInstant(springEvent.MoveToValue); + break; + case SpringCommands.Bump: + Bump(springEvent.BumpAmount); + break; + case SpringCommands.BumpRandom: + BumpRandom(springEvent.BumpAmountRandomValueMin, springEvent.BumpAmountRandomValueMax); + break; + case SpringCommands.Stop: + Stop(); + break; + case SpringCommands.Finish: + Finish(); + break; + case SpringCommands.RestoreInitialValue: + RestoreInitialValue(); + break; + case SpringCommands.ResetInitialValue: + ResetInitialValue(); + break; + } + } + + protected override void Awake() + { + if (Target == null) + { + Target = GetComponent(); + } + base.Awake(); + this.MMEventStartListening(); + } + + protected void OnDestroy() + { + this.MMEventStopListening(); + } + + #endregion + + #region TEST_METHODS + + protected override void TestMoveTo() + { + MoveTo(TestMoveToValue); + } + + protected override void TestMoveToAdditive() + { + MoveToAdditive(TestMoveToValue); + } + + protected override void TestMoveToSubtractive() + { + MoveToSubtractive(TestMoveToValue); + } + + protected override void TestMoveToRandom() + { + MoveToRandom(); + } + + protected override void TestMoveToInstant() + { + MoveToInstant(TestMoveToValue); + } + + protected override void TestBump() + { + Bump(TestBumpAmount); + } + + protected override void TestBumpRandom() + { + BumpRandom(); + } + + #endregion + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector2Component.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector2Component.cs.meta new file mode 100644 index 0000000..76d4840 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector2Component.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e980ecbe40d8ec64eb0a87b32fed766e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector3Component.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector3Component.cs new file mode 100644 index 0000000..3e624c5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector3Component.cs @@ -0,0 +1,355 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MoreMountains.Feedbacks +{ + /// + /// An event used to pilot a MMSpringVector3 component + /// + public struct MMSpringVector3Event + { + static MMSpringVector3Event e; + + public MMChannelData ChannelData; + public MMSpringComponentBase TargetSpring; + public SpringCommands Command; + public Vector3 MoveToValue; + public Vector3 BumpAmount; + public Vector3 MoveToRandomValueMin; + public Vector3 MoveToRandomValueMax; + public Vector3 BumpAmountRandomValueMin; + public Vector3 BumpAmountRandomValueMax; + public bool OverrideDamping; + public Vector3 NewDamping; + public bool OverrideFrequency; + public Vector3 NewFrequency; + + public static void Trigger(SpringCommands command, MMSpringComponentBase targetSpring, MMChannelData channelData, + Vector3 moveToValue = default, Vector3 bumpAmount = default, + Vector3 moveToRandomValueMin = default, Vector3 moveToRandomValueMax = default, + Vector3 bumpAmountRandomValueMin = default, Vector3 bumpAmountRandomValueMax = default, + bool overrideDamping = false, Vector3 newDamping = default, bool overrideFrequency = false, Vector3 newFrequency = default) + { + e.ChannelData = channelData; + e.TargetSpring = targetSpring; + e.Command = command; + e.MoveToValue = moveToValue; + e.BumpAmount = bumpAmount; + e.MoveToRandomValueMin = moveToRandomValueMin; + e.MoveToRandomValueMax = moveToRandomValueMax; + e.BumpAmountRandomValueMin = bumpAmountRandomValueMin; + e.BumpAmountRandomValueMax = bumpAmountRandomValueMax; + e.OverrideDamping = overrideDamping; + e.NewDamping = newDamping; + e.OverrideFrequency = overrideFrequency; + e.NewFrequency = newFrequency; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// A spring component used to pilot Vector3 values on a target + /// + public abstract class MMSpringVector3Component : MMSpringComponentBase, MMEventListener where T:Component + { + [MMInspectorGroup("Target", true, 17)] + public T Target; + + [MMInspectorGroup("Channel & TimeScale", true, 16, true)] + /// whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes) + [Tooltip("whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes)")] + public TimeScaleModes TimeScaleMode = TimeScaleModes.Scaled; + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + [MMInspectorGroup("Spring Settings", true, 18)] + [Header("SpringVector3")] + public MMSpringVector3 SpringVector3; + + [MMInspectorGroup("Randomness", true, 12, true)] + + [Header("Move To Random")] + /// the minimum vector from which to pick a random value when calling MoveToRandom() + [Tooltip("the minimum vector from which to pick a random value when calling MoveToRandom()")] + public Vector3 MoveToRandomValueMin = new Vector3(-2f, -2f, -2f); + /// the maximum vector from which to pick a random value when calling MoveToRandom() + [Tooltip("the maximum vector from which to pick a random value when calling MoveToRandom()")] + public Vector3 MoveToRandomValueMax = new Vector3(2f, 2f, 2f); + + [Header("Bump Random")] + /// the minimum vector from which to pick a random value when calling BumpRandom() + [Tooltip("the minimum vector from which to pick a random value when calling BumpRandom()")] + public Vector3 BumpAmountRandomValueMin = new Vector3(-20f, 20f, -20f); + /// the maximum vector from which to pick a random value when calling BumpRandom() + [Tooltip("the maximum vector from which to pick a random value when calling BumpRandom()")] + public Vector3 BumpAmountRandomValueMax = new Vector3(20f, 20f, 20f); + + [MMInspectorGroup("Test", true, 20, true)] + /// the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector + [Tooltip("the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector")] + public Vector3 TestMoveToValue = new Vector3(2f, 2f, 2f); + [MMInspectorButtonBar(new string[] { "MoveTo", "MoveToAdditive", "MoveToSubtractive", "MoveToRandom", "MoveToInstant" }, + new string[] { "TestMoveTo", "TestMoveToAdditive", "TestMoveToSubtractive", "TestMoveToRandom", "TestMoveToInstant" }, + new bool[] { true, true, true, true, true }, + new string[] { "main-call-to-action", "", "", "", "" })] + public bool MoveToToolbar; + + /// the amount by which to bump this spring when interacting with the Bump debug button in its inspector + [Tooltip("the amount by which to bump this spring when interacting with the Bump debug button in its inspector")] + public Vector3 TestBumpAmount = new Vector3(75f, 100f, 50f); + [MMInspectorButtonBar(new string[] { "Bump", "BumpRandom" }, + new string[] { "TestBump", "TestBumpRandom" }, + new bool[] { true, true }, + new string[] { "main-call-to-action", "" })] + public bool BumpToToolbar; + + [MMInspectorButtonBar(new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new bool[] { true, true, true, true }, + new string[] { "", "", "", "" })] + public bool OtherControlsToToolbar; + + public override bool LowVelocity => (Mathf.Abs(SpringVector3.Velocity.x) + Mathf.Abs(SpringVector3.Velocity.y) + Mathf.Abs(SpringVector3.Velocity.z)) < _velocityLowThreshold; + public float DeltaTime => (TimeScaleMode == TimeScaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; + public virtual Vector3 TargetVector3 { get; set; } + + #region PUBLIC_API + + public virtual void MoveTo(Vector3 newValue) + { + Activate(); + SpringVector3.MoveTo(newValue); + } + + public virtual void MoveToAdditive(Vector3 newValue) + { + Activate(); + SpringVector3.MoveToAdditive(newValue); + } + + public virtual void MoveToSubtractive(Vector3 newValue) + { + Activate(); + SpringVector3.MoveToSubtractive(newValue); + } + + public virtual void MoveToRandom() + { + Activate(); + SpringVector3.MoveToRandom(MoveToRandomValueMin, MoveToRandomValueMax); + } + + public virtual void MoveToInstant(Vector3 newValue) + { + Activate(); + SpringVector3.MoveToInstant(newValue); + } + + public virtual void MoveToRandom(Vector3 min, Vector3 max) + { + Activate(); + SpringVector3.MoveToRandom(min, max); + } + + public virtual void Bump(Vector3 bumpAmount) + { + Activate(); + SpringVector3.Bump(bumpAmount); + } + + public virtual void BumpRandom() + { + Activate(); + SpringVector3.BumpRandom(BumpAmountRandomValueMin, BumpAmountRandomValueMax); + } + + public virtual void BumpRandom(Vector3 min, Vector3 max) + { + Activate(); + SpringVector3.BumpRandom(min, max); + } + + public override void Stop() + { + base.Stop(); + this.enabled = false; + GrabCurrentValue(); + SpringVector3.Stop(); + } + + public override void RestoreInitialValue() + { + SpringVector3.RestoreInitialValue(); + ApplyValue(SpringVector3.CurrentValue); + } + + public override void ResetInitialValue() + { + SpringVector3.SetCurrentValueAsInitialValue(); + } + + protected override void UpdateSpringValue() + { + SpringVector3.UpdateSpringValue(DeltaTime); + ApplyValue(SpringVector3.CurrentValue); + } + + public override void Finish() + { + SpringVector3.Finish(); + ApplyValue(SpringVector3.CurrentValue); + } + + #endregion + + #region INTERNAL + + protected override void Initialization() + { + base.Initialization(); + GrabCurrentValue(); + SpringVector3.SetInitialValue(SpringVector3.CurrentValue); + SpringVector3.TargetValue = SpringVector3.CurrentValue; + } + + protected virtual void ApplyValue(Vector3 newValue) + { + TargetVector3 = newValue; + } + + protected override void GrabCurrentValue() + { + base.GrabCurrentValue(); + SpringVector3.CurrentValue = TargetVector3; + } + + #endregion + + #region EVENTS + + public void OnMMEvent(MMSpringVector3Event springEvent) + { + bool eventMatch = springEvent.ChannelData != null && MMChannel.Match(springEvent.ChannelData, ChannelMode, Channel, MMChannelDefinition); + bool targetMatch = springEvent.TargetSpring != null && springEvent.TargetSpring.Equals(this); + if (!eventMatch && !targetMatch) + { + return; + } + + if (springEvent.OverrideDamping) + { + SpringVector3.SetDamping(springEvent.NewDamping); + } + if (springEvent.OverrideFrequency) + { + SpringVector3.SetFrequency(springEvent.NewFrequency); + } + switch (springEvent.Command) + { + case SpringCommands.MoveTo: + MoveTo(springEvent.MoveToValue); + break; + case SpringCommands.MoveToAdditive: + MoveToAdditive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToSubtractive: + MoveToSubtractive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToRandom: + MoveToRandom(springEvent.MoveToRandomValueMin, springEvent.MoveToRandomValueMax); + break; + case SpringCommands.MoveToInstant: + MoveToInstant(springEvent.MoveToValue); + break; + case SpringCommands.Bump: + Bump(springEvent.BumpAmount); + break; + case SpringCommands.BumpRandom: + BumpRandom(springEvent.BumpAmountRandomValueMin, springEvent.BumpAmountRandomValueMax); + break; + case SpringCommands.Stop: + Stop(); + break; + case SpringCommands.Finish: + Finish(); + break; + case SpringCommands.RestoreInitialValue: + RestoreInitialValue(); + break; + case SpringCommands.ResetInitialValue: + ResetInitialValue(); + break; + } + } + + protected override void Awake() + { + if (Target == null) + { + Target = GetComponent(); + } + base.Awake(); + this.MMEventStartListening(); + } + + protected void OnDestroy() + { + this.MMEventStopListening(); + } + + #endregion + + #region TEST_METHODS + + protected override void TestMoveTo() + { + MoveTo(TestMoveToValue); + } + + protected override void TestMoveToAdditive() + { + MoveToAdditive(TestMoveToValue); + } + + protected override void TestMoveToSubtractive() + { + MoveToSubtractive(TestMoveToValue); + } + + protected override void TestMoveToRandom() + { + MoveToRandom(); + } + + protected override void TestMoveToInstant() + { + MoveToInstant(TestMoveToValue); + } + + protected override void TestBump() + { + Bump(TestBumpAmount); + } + + protected override void TestBumpRandom() + { + BumpRandom(); + } + + #endregion + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector3Component.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector3Component.cs.meta new file mode 100644 index 0000000..fa04fad --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector3Component.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb1b2db13e60f244dae9130e1ea580d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector4Component.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector4Component.cs new file mode 100644 index 0000000..67dfabf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector4Component.cs @@ -0,0 +1,355 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MoreMountains.Feedbacks +{ + /// + /// An event used to pilot a MMSpringVector4 component + /// + public struct MMSpringVector4Event + { + static MMSpringVector4Event e; + + public MMChannelData ChannelData; + public MMSpringComponentBase TargetSpring; + public SpringCommands Command; + public Vector4 MoveToValue; + public Vector4 BumpAmount; + public Vector4 MoveToRandomValueMin; + public Vector4 MoveToRandomValueMax; + public Vector4 BumpAmountRandomValueMin; + public Vector4 BumpAmountRandomValueMax; + public bool OverrideDamping; + public Vector4 NewDamping; + public bool OverrideFrequency; + public Vector4 NewFrequency; + + public static void Trigger(SpringCommands command, MMSpringComponentBase targetSpring, MMChannelData channelData, + Vector4 moveToValue = default, Vector4 bumpAmount = default, + Vector4 moveToRandomValueMin = default, Vector4 moveToRandomValueMax = default, + Vector4 bumpAmountRandomValueMin = default, Vector4 bumpAmountRandomValueMax = default, + bool overrideDamping = false, Vector4 newDamping = default, bool overrideFrequency = false, Vector4 newFrequency = default) + { + e.ChannelData = channelData; + e.TargetSpring = targetSpring; + e.Command = command; + e.MoveToValue = moveToValue; + e.BumpAmount = bumpAmount; + e.MoveToRandomValueMin = moveToRandomValueMin; + e.MoveToRandomValueMax = moveToRandomValueMax; + e.BumpAmountRandomValueMin = bumpAmountRandomValueMin; + e.BumpAmountRandomValueMax = bumpAmountRandomValueMax; + e.OverrideDamping = overrideDamping; + e.NewDamping = newDamping; + e.OverrideFrequency = overrideFrequency; + e.NewFrequency = newFrequency; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// A spring component used to pilot Vector4 values on a target + /// + public abstract class MMSpringVector4 : MMSpringComponentBase, MMEventListener where T:Component + { + [MMInspectorGroup("Target", true, 17)] + public T Target; + + [MMInspectorGroup("Channel & TimeScale", true, 16, true)] + /// whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes) + [Tooltip("whether this spring should run on scaled time (and be impacted by time scale changes) or unscaled time (and not be impacted by time scale changes)")] + public TimeScaleModes TimeScaleMode = TimeScaleModes.Scaled; + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + [MMInspectorGroup("Spring Settings", true, 18)] + [Header("SpringVector4")] + public MMSpringVector4 SpringVector4; + + [MMInspectorGroup("Randomness", true, 12, true)] + + [Header("Move To Random")] + /// the minimum vector from which to pick a random value when calling MoveToRandom() + [Tooltip("the minimum vector from which to pick a random value when calling MoveToRandom()")] + public Vector4 MoveToRandomValueMin = new Vector4(-2f, -2f, -2f, -2f); + /// the maximum vector from which to pick a random value when calling MoveToRandom() + [Tooltip("the maximum vector from which to pick a random value when calling MoveToRandom()")] + public Vector4 MoveToRandomValueMax = new Vector4(2f, 2f, 2f, 2f); + + [Header("Bump Random")] + /// the minimum vector from which to pick a random value when calling BumpRandom() + [Tooltip("the minimum vector from which to pick a random value when calling BumpRandom()")] + public Vector2 BumpAmountRandomValueMin = new Vector4(-20f, -20f, -20f, -20f); + /// the maximum vector from which to pick a random value when calling BumpRandom() + [Tooltip("the maximum vector from which to pick a random value when calling BumpRandom()")] + public Vector2 BumpAmountRandomValueMax = new Vector4(20f, 20f, 20f, 20f); + + [MMInspectorGroup("Test", true, 20, true)] + /// the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector + [Tooltip("the value to move this spring to when interacting with any of the MoveTo debug buttons in its inspector")] + public Vector4 TestMoveToValue = new Vector4(2f, 2f, 2f, 2f); + [MMInspectorButtonBar(new string[] { "MoveTo", "MoveToAdditive", "MoveToSubtractive", "MoveToRandom", "MoveToInstant" }, + new string[] { "TestMoveTo", "TestMoveToAdditive", "TestMoveToSubtractive", "TestMoveToRandom", "TestMoveToInstant" }, + new bool[] { true, true, true, true, true }, + new string[] { "main-call-to-action", "", "", "", "" })] + public bool MoveToToolbar; + + /// the amount by which to bump this spring when interacting with the Bump debug button in its inspector + [Tooltip("the amount by which to bump this spring when interacting with the Bump debug button in its inspector")] + public Vector4 TestBumpAmount = new Vector4(75f, 100f, 50f, 25f); + [MMInspectorButtonBar(new string[] { "Bump", "BumpRandom" }, + new string[] { "TestBump", "TestBumpRandom" }, + new bool[] { true, true }, + new string[] { "main-call-to-action", "" })] + public bool BumpToToolbar; + + [MMInspectorButtonBar(new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new string[] { "Stop", "Finish", "RestoreInitialValue", "ResetInitialValue" }, + new bool[] { true, true, true, true }, + new string[] { "", "", "", "" })] + public bool OtherControlsToToolbar; + + public override bool LowVelocity => (Mathf.Abs(SpringVector4.SpringX.Velocity) + Mathf.Abs(SpringVector4.SpringY.Velocity) + Mathf.Abs(SpringVector4.SpringZ.Velocity) + Mathf.Abs(SpringVector4.SpringW.Velocity)) < _velocityLowThreshold; + public float DeltaTime => (TimeScaleMode == TimeScaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; + public virtual Vector4 TargetVector4 { get; set; } + + #region PUBLIC_API + + public virtual void MoveTo(Vector4 newValue) + { + Activate(); + SpringVector4.MoveTo(newValue); + } + + public virtual void MoveToAdditive(Vector4 newValue) + { + Activate(); + SpringVector4.MoveToAdditive(newValue); + } + + public virtual void MoveToSubtractive(Vector4 newValue) + { + Activate(); + SpringVector4.MoveToSubtractive(newValue); + } + + public virtual void MoveToRandom() + { + Activate(); + SpringVector4.MoveToRandom(MoveToRandomValueMin, MoveToRandomValueMax); + } + + public virtual void MoveToInstant(Vector4 newValue) + { + Activate(); + SpringVector4.MoveToInstant(newValue); + } + + public virtual void MoveToRandom(Vector4 min, Vector4 max) + { + Activate(); + SpringVector4.MoveToRandom(min, max); + } + + public virtual void Bump(Vector4 bumpAmount) + { + Activate(); + SpringVector4.Bump(bumpAmount); + } + + public virtual void BumpRandom() + { + Activate(); + SpringVector4.BumpRandom(BumpAmountRandomValueMin, BumpAmountRandomValueMax); + } + + public virtual void BumpRandom(Vector4 min, Vector4 max) + { + Activate(); + SpringVector4.BumpRandom(min, max); + } + + public override void Stop() + { + base.Stop(); + this.enabled = false; + GrabCurrentValue(); + SpringVector4.Stop(); + } + + public override void RestoreInitialValue() + { + SpringVector4.RestoreInitialValue(); + ApplyValue(SpringVector4.CurrentValue); + } + + public override void ResetInitialValue() + { + SpringVector4.RestoreInitialValue(); + } + + protected override void UpdateSpringValue() + { + SpringVector4.UpdateSpringValue(DeltaTime); + ApplyValue(SpringVector4.CurrentValue); + } + + public override void Finish() + { + SpringVector4.Finish(); + ApplyValue(SpringVector4.CurrentValue); + } + + #endregion + + #region INTERNAL + + protected override void Initialization() + { + base.Initialization(); + GrabCurrentValue(); + SpringVector4.SetInitialValue(SpringVector4.CurrentValue); + SpringVector4.TargetValue = SpringVector4.CurrentValue; + } + + protected virtual void ApplyValue(Vector4 newValue) + { + TargetVector4 = newValue; + } + + protected override void GrabCurrentValue() + { + base.GrabCurrentValue(); + SpringVector4.CurrentValue = TargetVector4; + } + + #endregion + + #region EVENTS + + public void OnMMEvent(MMSpringVector4Event springEvent) + { + bool eventMatch = springEvent.ChannelData != null && MMChannel.Match(springEvent.ChannelData, ChannelMode, Channel, MMChannelDefinition); + bool targetMatch = springEvent.TargetSpring != null && springEvent.TargetSpring.Equals(this); + if (!eventMatch && !targetMatch) + { + return; + } + + if (springEvent.OverrideDamping) + { + SpringVector4.SetDamping(springEvent.NewDamping); + } + if (springEvent.OverrideFrequency) + { + SpringVector4.SetFrequency(springEvent.NewFrequency); + } + switch (springEvent.Command) + { + case SpringCommands.MoveTo: + MoveTo(springEvent.MoveToValue); + break; + case SpringCommands.MoveToAdditive: + MoveToAdditive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToSubtractive: + MoveToSubtractive(springEvent.MoveToValue); + break; + case SpringCommands.MoveToRandom: + MoveToRandom(springEvent.MoveToRandomValueMin, springEvent.MoveToRandomValueMax); + break; + case SpringCommands.MoveToInstant: + MoveToInstant(springEvent.MoveToValue); + break; + case SpringCommands.Bump: + Bump(springEvent.BumpAmount); + break; + case SpringCommands.BumpRandom: + BumpRandom(springEvent.BumpAmountRandomValueMin, springEvent.BumpAmountRandomValueMax); + break; + case SpringCommands.Stop: + Stop(); + break; + case SpringCommands.Finish: + Finish(); + break; + case SpringCommands.RestoreInitialValue: + RestoreInitialValue(); + break; + case SpringCommands.ResetInitialValue: + ResetInitialValue(); + break; + } + } + + protected override void Awake() + { + if (Target == null) + { + Target = GetComponent(); + } + base.Awake(); + this.MMEventStartListening(); + } + + protected void OnDestroy() + { + this.MMEventStopListening(); + } + + #endregion + + #region TEST_METHODS + + protected override void TestMoveTo() + { + MoveTo(TestMoveToValue); + } + + protected override void TestMoveToAdditive() + { + MoveToAdditive(TestMoveToValue); + } + + protected override void TestMoveToSubtractive() + { + MoveToSubtractive(TestMoveToValue); + } + + protected override void TestMoveToRandom() + { + MoveToRandom(); + } + + protected override void TestMoveToInstant() + { + MoveToInstant(TestMoveToValue); + } + + protected override void TestBump() + { + Bump(TestBumpAmount); + } + + protected override void TestBumpRandom() + { + BumpRandom(); + } + + #endregion + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector4Component.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector4Component.cs.meta new file mode 100644 index 0000000..955228f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/Components/MMSpringVector4Component.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f249c8f8a47aba49964aa06c41068bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringClampSettings.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringClampSettings.cs new file mode 100644 index 0000000..af4ccb2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringClampSettings.cs @@ -0,0 +1,63 @@ +using System; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public class MMSpringClampSettings + { + [Header("Min")] + /// whether or not to clamp the min value of this spring, preventing it from going below a certain value + [Tooltip("whether or not to clamp the min value of this spring, preventing it from going below a certain value")] + public bool ClampMin = false; + /// the value below which this spring can't go + [Tooltip("the value below which this spring can't go")] + [MMCondition("ClampMin", true)] + public float ClampMinValue = 0f; + /// if ClampMin is true, whether or not to use the initial value as the min value + [Tooltip("if ClampMin is true, whether or not to use the initial value as the min value")] + [MMCondition("ClampMin", true)] + public bool ClampMinInitial = false; + /// whether or not the spring should bounce off the min value or not + [Tooltip("whether or not the spring should bounce off the min value or not")] + [MMCondition("ClampMin", true)] + public bool ClampMinBounce = false; + + [Header("Max")] + /// whether or not to clamp the max value of this spring, preventing it from going above a certain value + [Tooltip("whether or not to clamp the max value of this spring, preventing it from going above a certain value")] + public bool ClampMax = false; + /// the value above which this spring can't go + [Tooltip("the value above which this spring can't go")] + [MMCondition("ClampMax", true)] + public float ClampMaxValue = 10f; + /// if ClampMax is true, whether or not to use the initial value as the max value + [Tooltip("if ClampMax is true, whether or not to use the initial value as the max value")] + [MMCondition("ClampMax", true)] + public bool ClampMaxInitial = false; + /// whether or not the spring should bounce off the max value or not + [Tooltip("whether or not the spring should bounce off the max value or not")] + [MMCondition("ClampMax", true)] + public bool ClampMaxBounce = false; + + public bool ClampNeeded => ClampMin || ClampMax || ClampMinBounce || ClampMaxBounce; + + public virtual float GetTargetValue(float value, float initialValue) + { + float targetValue = value; + float clampMinValue = ClampMinInitial ? initialValue : ClampMinValue; + if (ClampMin && value < clampMinValue) + { + targetValue = clampMinValue; + } + float clampMaxValue = ClampMaxInitial ? initialValue : ClampMaxValue; + if (ClampMax && value > clampMaxValue) + { + targetValue = clampMaxValue; + } + return targetValue; + } + } +} + diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringClampSettings.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringClampSettings.cs.meta new file mode 100644 index 0000000..a1b3f4b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringClampSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa26be0caf703664aa4524fb89373dd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringColor.cs new file mode 100644 index 0000000..1a34f96 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringColor.cs @@ -0,0 +1,221 @@ +using System; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public class MMSpringColor : MMSpringDefinition + { + public MMSpringFloat ColorSpring; + + public MMSpringFloat SpringR; + public MMSpringFloat SpringG; + public MMSpringFloat SpringB; + public MMSpringFloat SpringA; + + protected Color _returnCurrentValue; + protected Color _returnTargetValue; + protected Color _returnVelocity; + + public MMSpringColor() + { + SpringR = new MMSpringFloat(); + SpringG = new MMSpringFloat(); + SpringB = new MMSpringFloat(); + SpringA = new MMSpringFloat(); + ColorSpring = new MMSpringFloat(); + } + + public virtual void SetDamping(float newDamping) + { + ColorSpring.Damping = newDamping; + SpringR.Damping = newDamping; + SpringG.Damping = newDamping; + SpringB.Damping = newDamping; + SpringA.Damping = newDamping; + } + + public virtual void SetFrequency(float newFrequency) + { + ColorSpring.Frequency = newFrequency; + SpringR.Frequency = newFrequency; + SpringG.Frequency = newFrequency; + SpringB.Frequency = newFrequency; + SpringA.Frequency = newFrequency; + } + + public override Color CurrentValue + { + get + { + _returnCurrentValue.r = SpringR.CurrentValue; + _returnCurrentValue.g = SpringG.CurrentValue; + _returnCurrentValue.b = SpringB.CurrentValue; + _returnCurrentValue.a = SpringA.CurrentValue; + return _returnCurrentValue; + } + set + { + SpringR.CurrentValue = value.r; + SpringG.CurrentValue = value.g; + SpringB.CurrentValue = value.b; + SpringA.CurrentValue = value.a; + } + } + + public override Color TargetValue + { + get + { + _returnTargetValue.r = SpringR.TargetValue; + _returnTargetValue.g = SpringG.TargetValue; + _returnTargetValue.b = SpringB.TargetValue; + _returnTargetValue.a = SpringA.TargetValue; + return _returnTargetValue; + } + set + { + SpringR.TargetValue = value.r; + SpringG.TargetValue = value.g; + SpringB.TargetValue = value.b; + SpringA.TargetValue = value.a; + } + } + + public override Color Velocity + { + get + { + _returnVelocity.r = SpringR.Velocity; + _returnVelocity.g = SpringG.Velocity; + _returnVelocity.b = SpringB.Velocity; + _returnVelocity.a = SpringA.Velocity; + return _returnVelocity; + } + set + { + SpringR.Velocity = value.r; + SpringG.Velocity = value.g; + SpringB.Velocity = value.b; + SpringA.Velocity = value.a; + } + } + + public override void UpdateSpringValue(float deltaTime) + { + SpringR.Damping = ColorSpring.Damping; + SpringG.Damping = ColorSpring.Damping; + SpringB.Damping = ColorSpring.Damping; + SpringA.Damping = ColorSpring.Damping; + SpringR.Frequency = ColorSpring.Frequency; + SpringG.Frequency = ColorSpring.Frequency; + SpringB.Frequency = ColorSpring.Frequency; + SpringA.Frequency = ColorSpring.Frequency; + + SpringR.UpdateSpringValue(deltaTime); + SpringG.UpdateSpringValue(deltaTime); + SpringB.UpdateSpringValue(deltaTime); + SpringA.UpdateSpringValue(deltaTime); + ColorSpring.UpdateSpringValue(deltaTime); + } + + public override void MoveToInstant(Color newValue) + { + SpringR.MoveToInstant(newValue.r); + SpringG.MoveToInstant(newValue.g); + SpringB.MoveToInstant(newValue.b); + SpringA.MoveToInstant(newValue.a); + ColorSpring.MoveToInstant(newValue.Sum()); + } + + public override void Stop() + { + SpringR.Stop(); + SpringG.Stop(); + SpringB.Stop(); + SpringA.Stop(); + ColorSpring.Stop(); + } + + public override void SetInitialValue(Color newInitialValue) + { + SpringR.SetInitialValue(newInitialValue.r); + SpringG.SetInitialValue(newInitialValue.g); + SpringB.SetInitialValue(newInitialValue.b); + SpringA.SetInitialValue(newInitialValue.a); + } + + public override void RestoreInitialValue() + { + SpringR.RestoreInitialValue(); + SpringG.RestoreInitialValue(); + SpringB.RestoreInitialValue(); + SpringA.RestoreInitialValue(); + } + + public override void SetCurrentValueAsInitialValue() + { + SpringR.SetCurrentValueAsInitialValue(); + SpringG.SetCurrentValueAsInitialValue(); + SpringB.SetCurrentValueAsInitialValue(); + SpringA.SetCurrentValueAsInitialValue(); + ColorSpring.SetCurrentValueAsInitialValue(); + } + + public override void MoveTo(Color newValue) + { + SpringR.MoveTo(newValue.r); + SpringG.MoveTo(newValue.g); + SpringB.MoveTo(newValue.b); + SpringA.MoveTo(newValue.a); + ColorSpring.MoveTo(newValue.Sum()); + } + + public override void MoveToAdditive(Color newValue) + { + SpringR.MoveToAdditive(newValue.r); + SpringG.MoveToAdditive(newValue.g); + SpringB.MoveToAdditive(newValue.b); + SpringA.MoveToAdditive(newValue.a); + ColorSpring.MoveToAdditive(newValue.Sum()); + } + + public override void MoveToSubtractive(Color newValue) + { + SpringR.MoveToSubtractive(newValue.r); + SpringG.MoveToSubtractive(newValue.g); + SpringB.MoveToSubtractive(newValue.b); + SpringA.MoveToSubtractive(newValue.a); + ColorSpring.MoveToSubtractive(newValue.Sum()); + } + + public override void MoveToRandom(Color min, Color max) + { + SpringR.MoveToRandom(min.r, max.r); + SpringG.MoveToRandom(min.g, max.g); + SpringB.MoveToRandom(min.b, max.b); + SpringA.MoveToRandom(min.a, max.a); + ColorSpring.MoveToRandom(min.Sum(), max.Sum()); + } + + public override void Bump(Color bumpAmount) + { + ColorSpring.Bump(bumpAmount.Sum()); + } + + public override void BumpRandom(Color min, Color max) + { + ColorSpring.BumpRandom(min.Sum(), max.Sum()); + } + + public override void Finish() + { + SpringR.Finish(); + SpringG.Finish(); + SpringB.Finish(); + SpringA.Finish(); + ColorSpring.Finish(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringColor.cs.meta new file mode 100644 index 0000000..eef5dcc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1193a6fa247fd0a49bb7636d5a09dce3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringComponentBase.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringComponentBase.cs new file mode 100644 index 0000000..94fa63f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringComponentBase.cs @@ -0,0 +1,124 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.PlayerLoop; + +namespace MoreMountains.Feedbacks +{ + /// + /// An abstract class used to build spring components to pilot various properties (float, vector2, vector3, color, etc) + /// + [MMRequiresConstantRepaintOnlyWhenPlaying] + public abstract class MMSpringComponentBase : MMMonoBehaviour + { + /// the different possible timescale modes for the spring + public enum TimeScaleModes { Unscaled, Scaled } + /// whether or not this spring has reached a low enough velocity to self disable + public virtual bool LowVelocity => false; + + [MMInspectorGroup("Events", true, 16, true)] + public UnityEvent OnEquilibriumReached; + + protected float _velocityLowThreshold = 0.001f; + + /// + /// Sets the threshold under which the spring will consider its velocity as too low and will self disable + /// + /// + public virtual void SetVelocityLowThreshold(float threshold) + { + _velocityLowThreshold = threshold; + } + + /// + /// On awake we self disable + /// + protected virtual void Awake() + { + Initialization(); + this.enabled = false; + } + + /// + /// On update we update our spring value and self disable if needed + /// + protected virtual void Update() + { + UpdateSpringValue(); + SelfDisable(); + } + + /// + /// Activates this component + /// + protected virtual void Activate() + { + this.enabled = true; + } + + /// + /// Disables this component + /// + protected virtual void SelfDisable() + { + if (LowVelocity) + { + if (OnEquilibriumReached != null) + { + OnEquilibriumReached.Invoke(); + } + Finish(); + this.enabled = false; + } + } + + /// + /// Stops all value movement on this spring + /// + public virtual void Stop() { } + + /// + /// Moves this spring to its destination and disables it + /// + public virtual void Finish() { } + + /// + /// Restores this spring's initial value + /// + public virtual void RestoreInitialValue() { } + + /// + /// Sets the current value of this spring as its new initial value, overriding the previous one + /// + public virtual void ResetInitialValue() { } + + /// + /// Performs initialization for this spring + /// + protected virtual void Initialization() { } + + /// + /// Grabs the current value on the spring's target + /// + protected virtual void GrabCurrentValue() { } + + /// + /// Updates the spring's target value + /// + protected virtual void UpdateSpringValue() { } + + + #region TEST_METHODS + + protected virtual void TestMoveTo() { } + protected virtual void TestMoveToAdditive() { } + protected virtual void TestMoveToSubtractive() { } + protected virtual void TestMoveToRandom() { } + protected virtual void TestMoveToInstant() { } + protected virtual void TestBump() { } + protected virtual void TestBumpRandom() { } + + #endregion + + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringComponentBase.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringComponentBase.cs.meta new file mode 100644 index 0000000..17f27ea --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringComponentBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2e30721e98d6264b98d28d6f10fa395 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDebug.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDebug.cs new file mode 100644 index 0000000..65621f0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDebug.cs @@ -0,0 +1,24 @@ +using System; + +namespace MoreMountains.Feedbacks +{ + /// + /// This class is used to display debug information in classes using the MMSpring system + /// + [Serializable] + public class MMSpringDebug + { + /// the current value of the spring + public float CurrentValue; + /// the target value of the spring + public float TargetValue; + + /// Updates both the current and target values with the ones passed in parameters + public void Update(float value, float target) + { + CurrentValue = value; + TargetValue = target; + } + } +} + diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDebug.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDebug.cs.meta new file mode 100644 index 0000000..0c8f89a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDebug.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23b3aadda32833144bf093d88a493ca6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDefinition.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDefinition.cs new file mode 100644 index 0000000..251dca0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDefinition.cs @@ -0,0 +1,42 @@ +using System; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public abstract class MMSpringDefinition + { + public abstract T CurrentValue { get; set; } + + public abstract T TargetValue { get; set; } + + public abstract T Velocity { get; set; } + + public abstract void UpdateSpringValue(float deltaTime); + + public abstract void MoveToInstant(T newValue); + + public abstract void Stop(); + + public abstract void SetInitialValue(T newInitialValue); + + public abstract void RestoreInitialValue(); + + public abstract void SetCurrentValueAsInitialValue(); + + public abstract void MoveTo(T newValue); + + public abstract void MoveToAdditive(T newValue); + + public abstract void MoveToSubtractive(T newValue); + + public abstract void MoveToRandom(T min, T max); + + public abstract void Bump(T bumpAmount); + + public abstract void BumpRandom(T min, T max); + + public abstract void Finish(); + } +} + diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDefinition.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDefinition.cs.meta new file mode 100644 index 0000000..bfdba8d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26c20b10971f75d4f959b05982a2d1ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringFloat.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringFloat.cs new file mode 100644 index 0000000..aaa344d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringFloat.cs @@ -0,0 +1,207 @@ +using System; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public class MMSpringFloat : MMSpringDefinition + { + /// the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly + [Tooltip("the dumping ratio determines how fast the spring will evolve after a disturbance. At a low value, it'll oscillate for a long time, while closer to 1 it'll stop oscillating quickly")] + [Range(0.01f, 1f)] + public float Damping = 0.4f; + /// the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second + [Tooltip("the frequency determines how fast the spring will oscillate when disturbed, low frequency means less oscillations per second, high frequency means more oscillations per second")] + public float Frequency = 6f; + + [MMInspectorGroup("Debug", true, 19, true)] + /// the current value of this spring + [Tooltip("the current value of this spring")] + public override float CurrentValue + { + get + { + return _returnCurrentValue; + } + set + { + _actualCurrentValue = value; + _returnCurrentValue = value; + UpdateSpringDebug(); + } + } + + public MMSpringClampSettings ClampSettings; + + /// the value towards which this spring is trending, and that it'll reach once it stops oscillating + [Tooltip("the value towards which this spring is trending, and that it'll reach once it stops oscillating")] + public override float TargetValue + { + get + { + return _targetValue; + } + set + { + _targetValue = ClampSettings.GetTargetValue(value, InitialValue); + UpdateSpringDebug(); + } + } + + /// the current velocity of the spring + [Tooltip("the current velocity of the spring")] + public override float Velocity + { + get + { + return _velocity; + } + set + { + _velocity = value; + UpdateSpringDebug(); + } + } + + public float InitialValue { get; protected set; } + + public MMSpringDebug SpringDebug = new MMSpringDebug(); + + [MMHidden] + public bool UnifiedSpring = false; + [MMHidden] + public float CurrentValueDisplay; + [MMHidden] + public float TargetValueDisplay; + [MMHidden] + public float VelocityDisplay; + + protected float _actualCurrentValue; + protected float _returnCurrentValue; + protected float _targetValue; + protected float _velocity; + + public override void UpdateSpringValue(float deltaTime) + { + MMMaths.Spring(ref _actualCurrentValue, TargetValue, ref _velocity, Damping, Frequency, deltaTime); + _returnCurrentValue = _actualCurrentValue; + if (ClampSettings.ClampNeeded) + { + HandleClampMode(); + } + UpdateSpringDebug(); + } + + protected virtual void HandleClampMode() + { + float minValue = ClampSettings.ClampMinInitial ? InitialValue : ClampSettings.ClampMinValue; + float maxValue = ClampSettings.ClampMaxInitial ? InitialValue : ClampSettings.ClampMaxValue; + + if (ClampSettings.ClampMin && (_actualCurrentValue < minValue)) + { + + if (ClampSettings.ClampMinBounce) + { + _returnCurrentValue = Mathf.Abs(_actualCurrentValue - minValue) + minValue; + } + else + { + _returnCurrentValue = Mathf.Max(_actualCurrentValue, minValue); + } + } + + if (ClampSettings.ClampMax && (_actualCurrentValue > maxValue)) + { + if (ClampSettings.ClampMaxBounce) + { + _returnCurrentValue = maxValue - (_actualCurrentValue - maxValue); + } + else + { + _returnCurrentValue = Mathf.Min(_actualCurrentValue, maxValue); + } + } + } + + protected virtual void UpdateSpringDebug() + { + #if UNITY_EDITOR + CurrentValueDisplay = (float)Math.Round(CurrentValue,3); + TargetValueDisplay = (float)Math.Round(TargetValue,3); + VelocityDisplay = (float)Math.Round(Velocity,3); + SpringDebug.Update(_returnCurrentValue, TargetValue); + #endif + } + + public override void MoveToInstant(float newValue) + { + _actualCurrentValue = newValue; + _returnCurrentValue = newValue; + TargetValue = newValue; + Velocity = 0; + } + + public override void Stop() + { + Velocity = 0f; + TargetValue = _actualCurrentValue; + } + + public override void SetInitialValue(float newInitialValue) + { + InitialValue = newInitialValue; + } + + public override void RestoreInitialValue() + { + _actualCurrentValue = InitialValue; + _returnCurrentValue = InitialValue; + TargetValue = _actualCurrentValue; + UpdateSpringDebug(); + } + + public override void SetCurrentValueAsInitialValue() + { + InitialValue = _actualCurrentValue; + } + + public override void MoveTo(float newValue) + { + TargetValue = newValue; + } + + public override void MoveToAdditive(float newValue) + { + TargetValue += newValue; + } + + public override void MoveToSubtractive(float newValue) + { + TargetValue -= newValue; + } + + public override void MoveToRandom(float min, float max) + { + TargetValue = UnityEngine.Random.Range(min, max); + } + + public override void Bump(float bumpAmount) + { + Velocity += bumpAmount; + } + + public override void BumpRandom(float min, float max) + { + Velocity += UnityEngine.Random.Range(min, max); + } + + public override void Finish() + { + Velocity = 0f; + _actualCurrentValue = TargetValue; + _returnCurrentValue = TargetValue; + UpdateSpringDebug(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringFloat.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringFloat.cs.meta new file mode 100644 index 0000000..c8a2a1e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringFloat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e455783e305d0724081dddf0f5e9dbab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector2.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector2.cs new file mode 100644 index 0000000..0b0b8a6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector2.cs @@ -0,0 +1,171 @@ +using System; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public class MMSpringVector2 : MMSpringDefinition + { + public bool SeparateAxis = false; + public MMSpringFloat UnifiedSpring; + public MMSpringFloat SpringX; + public MMSpringFloat SpringY; + + protected Vector2 _returnCurrentValue; + protected Vector2 _returnTargetValue; + protected Vector2 _returnVelocity; + + public MMSpringVector2() + { + SpringX = new MMSpringFloat(); + SpringY = new MMSpringFloat(); + UnifiedSpring = new MMSpringFloat(); + UnifiedSpring.UnifiedSpring = true; + } + + public virtual void SetDamping(Vector2 newDamping) + { + UnifiedSpring.Damping = newDamping.x; + SpringX.Damping = newDamping.x; + SpringY.Damping = newDamping.y; + } + + public virtual void SetFrequency(Vector2 newFrequency) + { + UnifiedSpring.Frequency = newFrequency.x; + SpringX.Frequency = newFrequency.x; + SpringY.Frequency = newFrequency.y; + } + + public override Vector2 CurrentValue + { + get + { + _returnCurrentValue.x = SpringX.CurrentValue; + _returnCurrentValue.y = SpringY.CurrentValue; + return _returnCurrentValue; + } + set + { + SpringX.CurrentValue = value.x; + SpringY.CurrentValue = value.y; + } + } + + public override Vector2 TargetValue + { + get + { + _returnTargetValue.x = SpringX.TargetValue; + _returnTargetValue.y = SpringY.TargetValue; + return _returnTargetValue; + } + set + { + SpringX.TargetValue = value.x; + SpringY.TargetValue = value.y; + } + } + + public override Vector2 Velocity + { + get + { + _returnVelocity.x = SpringX.Velocity; + _returnVelocity.y = SpringY.Velocity; + return _returnVelocity; + } + set + { + SpringX.Velocity = value.x; + SpringY.Velocity = value.y; + } + } + + public override void UpdateSpringValue(float deltaTime) + { + if (!SeparateAxis) + { + SpringX.Damping = UnifiedSpring.Damping; + SpringX.Frequency = UnifiedSpring.Frequency; + SpringY.Damping = UnifiedSpring.Damping; + SpringY.Frequency = UnifiedSpring.Frequency; + } + SpringX.UpdateSpringValue(deltaTime); + SpringY.UpdateSpringValue(deltaTime); + } + + public override void MoveToInstant(Vector2 newValue) + { + SpringX.MoveToInstant(newValue.x); + SpringY.MoveToInstant(newValue.y); + } + + public override void Stop() + { + SpringX.Stop(); + SpringY.Stop(); + } + + public override void SetInitialValue(Vector2 newInitialValue) + { + SpringX.SetInitialValue(newInitialValue.x); + SpringY.SetInitialValue(newInitialValue.y); + } + + public override void RestoreInitialValue() + { + SpringX.RestoreInitialValue(); + SpringY.RestoreInitialValue(); + } + + public override void SetCurrentValueAsInitialValue() + { + SpringX.SetCurrentValueAsInitialValue(); + SpringY.SetCurrentValueAsInitialValue(); + } + + public override void MoveTo(Vector2 newValue) + { + SpringX.MoveTo(newValue.x); + SpringY.MoveTo(newValue.y); + } + + public override void MoveToAdditive(Vector2 newValue) + { + SpringX.MoveToAdditive(newValue.x); + SpringY.MoveToAdditive(newValue.y); + } + + public override void MoveToSubtractive(Vector2 newValue) + { + SpringX.MoveToSubtractive(newValue.x); + SpringY.MoveToSubtractive(newValue.y); + } + + public override void MoveToRandom(Vector2 min, Vector2 max) + { + SpringX.MoveToRandom(min.x, max.x); + SpringY.MoveToRandom(min.y, max.y); + } + + public override void Bump(Vector2 bumpAmount) + { + SpringX.Bump(bumpAmount.x); + SpringY.Bump(bumpAmount.y); + } + + public override void BumpRandom(Vector2 min, Vector2 max) + { + SpringX.BumpRandom(min.x, max.x); + SpringY.BumpRandom(min.y, max.y); + } + + public override void Finish() + { + SpringX.Finish(); + SpringY.Finish(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector2.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector2.cs.meta new file mode 100644 index 0000000..a39e9d3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e7af6eb6162e4f41a19087b663c52eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector3.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector3.cs new file mode 100644 index 0000000..f7518ff --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector3.cs @@ -0,0 +1,196 @@ +using System; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public class MMSpringVector3 : MMSpringDefinition + { + public bool SeparateAxis = false; + public MMSpringFloat UnifiedSpring; + public MMSpringFloat SpringX; + public MMSpringFloat SpringY; + public MMSpringFloat SpringZ; + + protected Vector3 _returnCurrentValue; + protected Vector3 _returnTargetValue; + protected Vector3 _returnVelocity; + + public MMSpringVector3() + { + SpringX = new MMSpringFloat(); + SpringY = new MMSpringFloat(); + SpringZ = new MMSpringFloat(); + UnifiedSpring = new MMSpringFloat(); + UnifiedSpring.UnifiedSpring = true; + } + + public virtual void SetDamping(Vector3 newDamping) + { + UnifiedSpring.Damping = newDamping.x; + SpringX.Damping = newDamping.x; + SpringY.Damping = newDamping.y; + SpringZ.Damping = newDamping.z; + } + + public virtual void SetFrequency(Vector3 newFrequency) + { + UnifiedSpring.Frequency = newFrequency.x; + SpringX.Frequency = newFrequency.x; + SpringY.Frequency = newFrequency.y; + SpringZ.Frequency = newFrequency.z; + } + + public override Vector3 CurrentValue + { + get + { + _returnCurrentValue.x = SpringX.CurrentValue; + _returnCurrentValue.y = SpringY.CurrentValue; + _returnCurrentValue.z = SpringZ.CurrentValue; + return _returnCurrentValue; + } + set + { + SpringX.CurrentValue = value.x; + SpringY.CurrentValue = value.y; + SpringZ.CurrentValue = value.z; + } + } + + public override Vector3 TargetValue + { + get + { + _returnTargetValue.x = SpringX.TargetValue; + _returnTargetValue.y = SpringY.TargetValue; + _returnTargetValue.z = SpringZ.TargetValue; + return _returnTargetValue; + } + set + { + SpringX.TargetValue = value.x; + SpringY.TargetValue = value.y; + SpringZ.TargetValue = value.z; + } + } + + public override Vector3 Velocity + { + get + { + _returnVelocity.x = SpringX.Velocity; + _returnVelocity.y = SpringY.Velocity; + _returnVelocity.z = SpringZ.Velocity; + return _returnVelocity; + } + set + { + SpringX.Velocity = value.x; + SpringY.Velocity = value.y; + SpringZ.Velocity = value.z; + } + } + + public override void UpdateSpringValue(float deltaTime) + { + if (!SeparateAxis) + { + SpringX.Damping = UnifiedSpring.Damping; + SpringX.Frequency = UnifiedSpring.Frequency; + SpringY.Damping = UnifiedSpring.Damping; + SpringY.Frequency = UnifiedSpring.Frequency; + SpringZ.Damping = UnifiedSpring.Damping; + SpringZ.Frequency = UnifiedSpring.Frequency; + } + SpringX.UpdateSpringValue(deltaTime); + SpringY.UpdateSpringValue(deltaTime); + SpringZ.UpdateSpringValue(deltaTime); + } + + public override void MoveToInstant(Vector3 newValue) + { + SpringX.MoveToInstant(newValue.x); + SpringY.MoveToInstant(newValue.y); + SpringZ.MoveToInstant(newValue.z); + } + + public override void Stop() + { + SpringX.Stop(); + SpringY.Stop(); + SpringZ.Stop(); + } + + public override void SetInitialValue(Vector3 newInitialValue) + { + SpringX.SetInitialValue(newInitialValue.x); + SpringY.SetInitialValue(newInitialValue.y); + SpringZ.SetInitialValue(newInitialValue.z); + } + + public override void RestoreInitialValue() + { + SpringX.RestoreInitialValue(); + SpringY.RestoreInitialValue(); + SpringZ.RestoreInitialValue(); + } + + public override void SetCurrentValueAsInitialValue() + { + SpringX.SetCurrentValueAsInitialValue(); + SpringY.SetCurrentValueAsInitialValue(); + SpringZ.SetCurrentValueAsInitialValue(); + } + + public override void MoveTo(Vector3 newValue) + { + SpringX.MoveTo(newValue.x); + SpringY.MoveTo(newValue.y); + SpringZ.MoveTo(newValue.z); + } + + public override void MoveToAdditive(Vector3 newValue) + { + SpringX.MoveToAdditive(newValue.x); + SpringY.MoveToAdditive(newValue.y); + SpringZ.MoveToAdditive(newValue.z); + } + + public override void MoveToSubtractive(Vector3 newValue) + { + SpringX.MoveToSubtractive(newValue.x); + SpringY.MoveToSubtractive(newValue.y); + SpringZ.MoveToSubtractive(newValue.z); + } + + public override void MoveToRandom(Vector3 min, Vector3 max) + { + SpringX.MoveToRandom(min.x, max.x); + SpringY.MoveToRandom(min.y, max.y); + SpringZ.MoveToRandom(min.z, max.z); + } + + public override void Bump(Vector3 bumpAmount) + { + SpringX.Bump(bumpAmount.x); + SpringY.Bump(bumpAmount.y); + SpringZ.Bump(bumpAmount.z); + } + + public override void BumpRandom(Vector3 min, Vector3 max) + { + SpringX.BumpRandom(min.x, max.x); + SpringY.BumpRandom(min.y, max.y); + SpringZ.BumpRandom(min.z, max.z); + } + + public override void Finish() + { + SpringX.Finish(); + SpringY.Finish(); + SpringZ.Finish(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector3.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector3.cs.meta new file mode 100644 index 0000000..3f95401 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0268287db794044a9b5492805490c05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector4.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector4.cs new file mode 100644 index 0000000..ca1b28c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector4.cs @@ -0,0 +1,221 @@ +using System; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [Serializable] + public class MMSpringVector4 : MMSpringDefinition + { + public bool SeparateAxis = false; + public MMSpringFloat UnifiedSpring; + public MMSpringFloat SpringX; + public MMSpringFloat SpringY; + public MMSpringFloat SpringZ; + public MMSpringFloat SpringW; + + protected Vector4 _returnCurrentValue; + protected Vector4 _returnTargetValue; + protected Vector4 _returnVelocity; + + public MMSpringVector4() + { + SpringX = new MMSpringFloat(); + SpringY = new MMSpringFloat(); + SpringZ = new MMSpringFloat(); + SpringW = new MMSpringFloat(); + UnifiedSpring = new MMSpringFloat(); + UnifiedSpring.UnifiedSpring = true; + } + + public virtual void SetDamping(Vector4 newDamping) + { + UnifiedSpring.Damping = newDamping.x; + SpringX.Damping = newDamping.x; + SpringY.Damping = newDamping.y; + SpringZ.Damping = newDamping.z; + SpringW.Damping = newDamping.w; + } + + public virtual void SetFrequency(Vector4 newFrequency) + { + UnifiedSpring.Frequency = newFrequency.x; + SpringX.Frequency = newFrequency.x; + SpringY.Frequency = newFrequency.y; + SpringZ.Frequency = newFrequency.z; + SpringW.Frequency = newFrequency.w; + } + + public override Vector4 CurrentValue + { + get + { + _returnCurrentValue.x = SpringX.CurrentValue; + _returnCurrentValue.y = SpringY.CurrentValue; + _returnCurrentValue.z = SpringZ.CurrentValue; + _returnCurrentValue.w = SpringW.CurrentValue; + return _returnCurrentValue; + } + set + { + SpringX.CurrentValue = value.x; + SpringY.CurrentValue = value.y; + SpringZ.CurrentValue = value.z; + SpringW.CurrentValue = value.w; + } + } + + public override Vector4 TargetValue + { + get + { + _returnTargetValue.x = SpringX.TargetValue; + _returnTargetValue.y = SpringY.TargetValue; + _returnTargetValue.z = SpringZ.TargetValue; + _returnTargetValue.w = SpringW.TargetValue; + return _returnTargetValue; + } + set + { + SpringX.TargetValue = value.x; + SpringY.TargetValue = value.y; + SpringZ.TargetValue = value.z; + SpringW.TargetValue = value.w; + } + } + + public override Vector4 Velocity + { + get + { + _returnVelocity.x = SpringX.Velocity; + _returnVelocity.y = SpringY.Velocity; + _returnVelocity.z = SpringZ.Velocity; + _returnVelocity.w = SpringW.Velocity; + return _returnVelocity; + } + set + { + SpringX.Velocity = value.x; + SpringY.Velocity = value.y; + SpringZ.Velocity = value.z; + SpringW.Velocity = value.w; + } + } + + public override void UpdateSpringValue(float deltaTime) + { + if (!SeparateAxis) + { + SpringX.Damping = UnifiedSpring.Damping; + SpringX.Frequency = UnifiedSpring.Frequency; + SpringY.Damping = UnifiedSpring.Damping; + SpringY.Frequency = UnifiedSpring.Frequency; + SpringZ.Damping = UnifiedSpring.Damping; + SpringZ.Frequency = UnifiedSpring.Frequency; + SpringW.Damping = UnifiedSpring.Damping; + SpringW.Frequency = UnifiedSpring.Frequency; + } + SpringX.UpdateSpringValue(deltaTime); + SpringY.UpdateSpringValue(deltaTime); + SpringZ.UpdateSpringValue(deltaTime); + SpringW.UpdateSpringValue(deltaTime); + } + + public override void MoveToInstant(Vector4 newValue) + { + SpringX.MoveToInstant(newValue.x); + SpringY.MoveToInstant(newValue.y); + SpringZ.MoveToInstant(newValue.z); + SpringW.MoveToInstant(newValue.w); + } + + public override void Stop() + { + SpringX.Stop(); + SpringY.Stop(); + SpringZ.Stop(); + SpringW.Stop(); + } + + public override void SetInitialValue(Vector4 newInitialValue) + { + SpringX.SetInitialValue(newInitialValue.x); + SpringY.SetInitialValue(newInitialValue.y); + SpringZ.SetInitialValue(newInitialValue.z); + SpringW.SetInitialValue(newInitialValue.w); + } + + public override void RestoreInitialValue() + { + SpringX.RestoreInitialValue(); + SpringY.RestoreInitialValue(); + SpringZ.RestoreInitialValue(); + SpringW.RestoreInitialValue(); + } + + public override void SetCurrentValueAsInitialValue() + { + SpringX.SetCurrentValueAsInitialValue(); + SpringY.SetCurrentValueAsInitialValue(); + SpringZ.SetCurrentValueAsInitialValue(); + SpringW.SetCurrentValueAsInitialValue(); + } + + public override void MoveTo(Vector4 newValue) + { + SpringX.MoveTo(newValue.x); + SpringY.MoveTo(newValue.y); + SpringZ.MoveTo(newValue.z); + SpringW.MoveTo(newValue.w); + } + + public override void MoveToAdditive(Vector4 newValue) + { + SpringX.MoveToAdditive(newValue.x); + SpringY.MoveToAdditive(newValue.y); + SpringZ.MoveToAdditive(newValue.z); + SpringW.MoveToAdditive(newValue.w); + } + + public override void MoveToSubtractive(Vector4 newValue) + { + SpringX.MoveToSubtractive(newValue.x); + SpringY.MoveToSubtractive(newValue.y); + SpringZ.MoveToSubtractive(newValue.z); + SpringW.MoveToSubtractive(newValue.w); + } + + public override void MoveToRandom(Vector4 min, Vector4 max) + { + SpringX.MoveToRandom(min.x, max.x); + SpringY.MoveToRandom(min.y, max.y); + SpringZ.MoveToRandom(min.z, max.z); + SpringW.MoveToRandom(min.w, max.w); + } + + public override void Bump(Vector4 bumpAmount) + { + SpringX.Bump(bumpAmount.x); + SpringY.Bump(bumpAmount.y); + SpringZ.Bump(bumpAmount.z); + SpringW.Bump(bumpAmount.w); + } + + public override void BumpRandom(Vector4 min, Vector4 max) + { + SpringX.BumpRandom(min.x, max.x); + SpringY.BumpRandom(min.y, max.y); + SpringZ.BumpRandom(min.z, max.z); + SpringW.BumpRandom(min.w, max.w); + } + + public override void Finish() + { + SpringX.Finish(); + SpringY.Finish(); + SpringZ.Finish(); + SpringW.Finish(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector4.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector4.cs.meta new file mode 100644 index 0000000..5d43cb6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Core/MMSpringVector4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59b1afce1a5338c48befe053811a37df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks.meta new file mode 100644 index 0000000..b4a78b5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fbca3af068595bc419e9de3dc43d2856 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringColor.cs new file mode 100644 index 0000000..9171931 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringColor.cs @@ -0,0 +1,135 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to pilot color springs + /// + [AddComponentMenu("")] + [FeedbackHelp("A feedback used to pilot color springs")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Springs/Spring Color")] + public class MMF_SpringColor : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SpringColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + #endif + + /// the duration of this feedback is the duration of the zoom + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasChannel => true; + public override bool CanForceInitialValue => true; + + [MMFInspectorGroup("Spring", true, 72)] + + /// the Color spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info + [Tooltip("the Color spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info")] + public MMSpringComponentBase TargetSpring; + + /// the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + /// the command to use on that spring + [Tooltip("the command to use on that spring")] + public SpringCommands Command = SpringCommands.Bump; + [MMEnumCondition("Command", (int)SpringCommands.MoveTo, (int)SpringCommands.MoveToAdditive, (int)SpringCommands.MoveToSubtractive, (int)SpringCommands.MoveToInstant)] + /// the new color this spring should move towards + [Tooltip("the new color this spring should move towards")] + public Color MoveToColor = MMColors.Aquamarine; + /// the color to add to the spring's current velocity to disturb it and make it bump + [Tooltip("the color to add to the spring's current velocity to disturb it and make it bump")] + [MMEnumCondition("Command", (int)SpringCommands.Bump)] + public Color BumpColor = MMColors.Orange; + + /// the min color from which to pick a random color in MoveToRandom mode + [Tooltip("the min color from which to pick a random color in MoveToRandom mode")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Color MoveToRandomColorMin = MMColors.LawnGreen; + /// the max color from which to pick a random color in MoveToRandom mode + [Tooltip("the max color from which to pick a random color in MoveToRandom mode")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Color MoveToRandomColorMax = MMColors.MediumSeaGreen; + + /// the min color from which to pick a random color in BumpRandom mode + [Tooltip("the min color from which to pick a random color in BumpRandom mode")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Color BumpRandomColorMin = MMColors.HotPink; + /// the max color from which to pick a random color in BumpRandom mode + [Tooltip("the max color from which to pick a random color in BumpRandom mode")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Color BumpRandomColorMax = MMColors.Plum; + + [Header("Overrides")] + /// whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping) + [Tooltip("whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping)")] + public bool OverrideDamping = false; + /// the new damping value to apply to the target spring(s) if OverrideDamping is true + [Tooltip("the new damping value to apply to the target spring(s) if OverrideDamping is true")] + [MMFCondition("OverrideDamping", true)] + public float NewDamping = 0.8f; + /// whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency) + [Tooltip("whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency)")] + public bool OverrideFrequency = false; + /// the new frequency value to apply to the target spring(s) if OverrideFrequency is true + [Tooltip("the new frequency value to apply to the target spring(s) if OverrideFrequency is true")] + [MMFCondition("OverrideFrequency", true)] + public float NewFrequency = 5f; + + protected MMChannelData _eventChannelData; + + /// + /// On Play, triggers a spring event with the selected settings + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringColorEvent.Trigger(Command, TargetSpring, _eventChannelData, MoveToColor, BumpColor, + MoveToRandomColorMin, MoveToRandomColorMax, + BumpRandomColorMin, BumpRandomColorMax, + OverrideDamping, NewDamping, OverrideFrequency, NewFrequency); + } + + /// + /// On stop, triggers a spring stop event + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringColorEvent.Trigger(SpringCommands.Stop, TargetSpring, _eventChannelData); + } + + /// + /// On restore, triggers a spring RestoreInitialValue event + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringColorEvent.Trigger(SpringCommands.RestoreInitialValue, TargetSpring, _eventChannelData); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringColor.cs.meta new file mode 100644 index 0000000..94355a3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed6b74fe854687046873209aef2e5498 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringFloat.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringFloat.cs new file mode 100644 index 0000000..f0e1c9e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringFloat.cs @@ -0,0 +1,123 @@ +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to pilot float springs + /// + [AddComponentMenu("")] + [FeedbackHelp("A feedback used to pilot float springs")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Springs/Spring Float")] + public class MMF_SpringFloat : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SpringColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + #endif + + /// the duration of this feedback is the duration of the zoom + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasChannel => true; + public override bool CanForceInitialValue => true; + + [MMFInspectorGroup("Spring", true, 72)] + + /// the spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info + [Tooltip("the spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info")] + public MMSpringComponentBase TargetSpring; + + /// the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + /// the command to use on that spring + [Tooltip("the command to use on that spring")] + public SpringCommands Command = SpringCommands.Bump; + [MMEnumCondition("Command", (int)SpringCommands.MoveTo, (int)SpringCommands.MoveToAdditive, (int)SpringCommands.MoveToSubtractive, (int)SpringCommands.MoveToInstant)] + /// the new value this spring should move towards + [Tooltip("the new value this spring should move towards")] + public float MoveToValue = 2f; + /// the amount to add to the spring's current velocity to disturb it and make it bump + [Tooltip("the amount to add to the spring's current velocity to disturb it and make it bump")] + [MMEnumCondition("Command", (int)SpringCommands.Bump)] + public float BumpAmount = 75f; + /// a min and max values to pick a random value from to move the spring to when MoveToRandom is called + [Tooltip("a min and max values to pick a random value from to move the spring to when MoveToRandom is called")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Vector2 MoveToRandomValue = new Vector2(-2f, 2f); + /// a min and max values to pick a random value from to add to the spring's velocity when BumpRandom is called + [Tooltip("a min and max values to pick a random value from to add to the spring's velocity when BumpRandom is called")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Vector2 BumpAmountRandomValue = new Vector2(-50f, 50f); + + [Header("Overrides")] + /// whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping) + [Tooltip("whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping)")] + public bool OverrideDamping = false; + /// the new damping value to apply to the target spring(s) if OverrideDamping is true + [Tooltip("the new damping value to apply to the target spring(s) if OverrideDamping is true")] + [MMFCondition("OverrideDamping", true)] + public float NewDamping = 0.8f; + /// whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency) + [Tooltip("whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency)")] + public bool OverrideFrequency = false; + /// the new frequency value to apply to the target spring(s) if OverrideFrequency is true + [Tooltip("the new frequency value to apply to the target spring(s) if OverrideFrequency is true")] + [MMFCondition("OverrideFrequency", true)] + public float NewFrequency = 5f; + + protected MMChannelData _eventChannelData; + + /// + /// On Play, triggers a spring event with the selected settings + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringFloatEvent.Trigger(Command, TargetSpring, _eventChannelData, MoveToValue, BumpAmount, MoveToRandomValue, BumpAmountRandomValue, OverrideDamping, NewDamping, OverrideFrequency, NewFrequency); + } + + /// + /// On stop, triggers a spring stop event + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringFloatEvent.Trigger(SpringCommands.Stop, TargetSpring, _eventChannelData); + } + + /// + /// On restore, triggers a spring RestoreInitialValue event + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringFloatEvent.Trigger(SpringCommands.RestoreInitialValue, TargetSpring, _eventChannelData); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringFloat.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringFloat.cs.meta new file mode 100644 index 0000000..3889477 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringFloat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d948bd127b797e94fbf989672ffe1847 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector2.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector2.cs new file mode 100644 index 0000000..38a75fc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector2.cs @@ -0,0 +1,136 @@ +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to pilot Vector2 springs + /// + [AddComponentMenu("")] + [FeedbackHelp("A feedback used to pilot Vector2 springs")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Springs/Spring Vector2")] + public class MMF_SpringVector2 : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SpringColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + #endif + + /// the duration of this feedback is the duration of the zoom + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasChannel => true; + public override bool CanForceInitialValue => true; + + [MMFInspectorGroup("Spring", true, 72)] + + /// the Vector2 spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info + [Tooltip("the Vector2 spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info")] + public MMSpringComponentBase TargetSpring; + + /// the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + /// the command to use on that spring + [Tooltip("the command to use on that spring")] + public SpringCommands Command = SpringCommands.Bump; + [MMEnumCondition("Command", (int)SpringCommands.MoveTo, (int)SpringCommands.MoveToAdditive, (int)SpringCommands.MoveToSubtractive, (int)SpringCommands.MoveToInstant)] + /// the new value this spring should move towards + [Tooltip("the new value this spring should move towards")] + public Vector2 MoveToValue = new Vector2(2f, 2f); + /// the amount to add to the spring's current velocity to disturb it and make it bump + [Tooltip("the amount to add to the spring's current velocity to disturb it and make it bump")] + [MMEnumCondition("Command", (int)SpringCommands.Bump)] + public Vector2 BumpAmount = new Vector2(75f, 75f); + + /// the min values between which a random target x value will be picked when calling MoveToRandom + [Tooltip("the min values between which a random target x value will be picked when calling MoveToRandom")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Vector2 MoveToRandomValueMin = new Vector2(-2f, -2f); + /// the min (x) and max (y) values between which a random target y value will be picked when calling MoveToRandom + [Tooltip("the min (x) and max (y) values between which a random target y value will be picked when calling MoveToRandom")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Vector2 MoveToRandomValueMax = new Vector2(2f, 2f); + + /// the min (x) and max (y) values between which a random bump x value will be picked when calling BumpRandom + [Tooltip("the min (x) and max (y) values between which a random bump x value will be picked when calling BumpRandom")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Vector2 BumpAmountRandomValueMin = new Vector2(-20f, -20f); + /// the min (x) and max (y) values between which a random bump y value will be picked when calling BumpRandom + [Tooltip("the min (x) and max (y) values between which a random bump y value will be picked when calling BumpRandom")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Vector2 BumpAmountRandomValueMax = new Vector2(20f, 20f); + + [Header("Overrides")] + /// whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping) + [Tooltip("whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping)")] + public bool OverrideDamping = false; + /// the new damping value to apply to the target spring(s) if OverrideDamping is true + [Tooltip("the new damping value to apply to the target spring(s) if OverrideDamping is true")] + [MMFCondition("OverrideDamping", true)] + public Vector2 NewDamping = new Vector2(0.8f, 0.8f); + /// whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency) + [Tooltip("whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency)")] + public bool OverrideFrequency = false; + /// the new frequency value to apply to the target spring(s) if OverrideFrequency is true + [Tooltip("the new frequency value to apply to the target spring(s) if OverrideFrequency is true")] + [MMFCondition("OverrideFrequency", true)] + public Vector2 NewFrequency = new Vector2(5f, 5f); + + protected MMChannelData _eventChannelData; + + /// + /// On Play, triggers a spring event with the selected settings + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector2Event.Trigger(Command, TargetSpring, _eventChannelData, MoveToValue, BumpAmount, + MoveToRandomValueMin, MoveToRandomValueMax, + BumpAmountRandomValueMin, BumpAmountRandomValueMax, + OverrideDamping, NewDamping, OverrideFrequency, NewFrequency); + } + + /// + /// On stop, triggers a spring stop event + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector2Event.Trigger(SpringCommands.Stop, TargetSpring, _eventChannelData); + } + + /// + /// On restore, triggers a spring RestoreInitialValue event + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector2Event.Trigger(SpringCommands.RestoreInitialValue, TargetSpring, _eventChannelData); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector2.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector2.cs.meta new file mode 100644 index 0000000..df4b221 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7f15f032bd296c4e8197aa296f04fbb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector3.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector3.cs new file mode 100644 index 0000000..87daa1a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector3.cs @@ -0,0 +1,136 @@ +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to pilot Vector3 springs + /// + [AddComponentMenu("")] + [FeedbackHelp("A feedback used to pilot Vector3 springs")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Springs/Spring Vector3")] + public class MMF_SpringVector3 : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SpringColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + #endif + + /// the duration of this feedback is the duration of the zoom + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasChannel => true; + public override bool CanForceInitialValue => true; + + [MMFInspectorGroup("Spring", true, 72)] + + /// the Vector3 spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info + [Tooltip("the Vector3 spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info")] + public MMSpringComponentBase TargetSpring; + + /// the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + /// the command to use on that spring + [Tooltip("the command to use on that spring")] + public SpringCommands Command = SpringCommands.Bump; + [MMEnumCondition("Command", (int)SpringCommands.MoveTo, (int)SpringCommands.MoveToAdditive, (int)SpringCommands.MoveToSubtractive, (int)SpringCommands.MoveToInstant)] + /// the new value this spring should move towards + [Tooltip("the new value this spring should move towards")] + public Vector3 MoveToValue = new Vector3(2f, 2f, 2f); + /// the amount to add to the spring's current velocity to disturb it and make it bump + [Tooltip("the amount to add to the spring's current velocity to disturb it and make it bump")] + [MMEnumCondition("Command", (int)SpringCommands.Bump)] + public Vector3 BumpAmount = new Vector3(75f, 75f, 75f); + + /// the min values between which a random target x value will be picked when calling MoveToRandom + [Tooltip("the min values between which a random target x value will be picked when calling MoveToRandom")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Vector3 MoveToRandomValueMin = new Vector3(-2f, -2f, -2f); + /// the min (x) and max (y) values between which a random target y value will be picked when calling MoveToRandom + [Tooltip("the min (x) and max (y) values between which a random target y value will be picked when calling MoveToRandom")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Vector3 MoveToRandomValueMax = new Vector3(2f, 2f, 2f); + + /// the min (x) and max (y) values between which a random bump x value will be picked when calling BumpRandom + [Tooltip("the min (x) and max (y) values between which a random bump x value will be picked when calling BumpRandom")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Vector3 BumpAmountRandomValueMin = new Vector3(-20f, -20f, -20f); + /// the min (x) and max (y) values between which a random bump y value will be picked when calling BumpRandom + [Tooltip("the min (x) and max (y) values between which a random bump y value will be picked when calling BumpRandom")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Vector3 BumpAmountRandomValueMax = new Vector3(20f, 20f, 20f); + + [Header("Overrides")] + /// whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping) + [Tooltip("whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping)")] + public bool OverrideDamping = false; + /// the new damping value to apply to the target spring(s) if OverrideDamping is true + [Tooltip("the new damping value to apply to the target spring(s) if OverrideDamping is true")] + [MMFCondition("OverrideDamping", true)] + public Vector3 NewDamping = new Vector3(0.8f, 0.8f, 0.8f); + /// whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency) + [Tooltip("whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency)")] + public bool OverrideFrequency = false; + /// the new frequency value to apply to the target spring(s) if OverrideFrequency is true + [Tooltip("the new frequency value to apply to the target spring(s) if OverrideFrequency is true")] + [MMFCondition("OverrideFrequency", true)] + public Vector3 NewFrequency = new Vector3(5f, 5f, 5f); + + protected MMChannelData _eventChannelData; + + /// + /// On Play, triggers a spring event with the selected settings + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector3Event.Trigger(Command, TargetSpring, _eventChannelData, MoveToValue, BumpAmount, + MoveToRandomValueMin, MoveToRandomValueMax, + BumpAmountRandomValueMin, BumpAmountRandomValueMax, + OverrideDamping, NewDamping, OverrideFrequency, NewFrequency); + } + + /// + /// On stop, triggers a spring stop event + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector3Event.Trigger(SpringCommands.Stop, TargetSpring, _eventChannelData); + } + + /// + /// On restore, triggers a spring RestoreInitialValue event + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector3Event.Trigger(SpringCommands.RestoreInitialValue, TargetSpring, _eventChannelData); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector3.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector3.cs.meta new file mode 100644 index 0000000..7e63c30 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d82dce2d70e40844290719d664b4ed1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector4.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector4.cs new file mode 100644 index 0000000..3171834 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector4.cs @@ -0,0 +1,136 @@ +using MoreMountains.FeedbacksForThirdParty; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to pilot Vector4 springs + /// + [AddComponentMenu("")] + [FeedbackHelp("A feedback used to pilot Vector4 springs")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Springs/Spring Vector4")] + public class MMF_SpringVector4 : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SpringColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + #endif + + /// the duration of this feedback is the duration of the zoom + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasChannel => true; + public override bool CanForceInitialValue => true; + + [MMFInspectorGroup("Spring", true, 72)] + + /// the spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info + [Tooltip("the spring we want to pilot using this feedback. If you set one, only that spring will be targeted. If you don't, an event will be sent out to all springs matching the channel data info")] + public MMSpringComponentBase TargetSpring; + + /// the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your particle system, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + /// the command to use on that spring + [Tooltip("the command to use on that spring")] + public SpringCommands Command = SpringCommands.Bump; + [MMEnumCondition("Command", (int)SpringCommands.MoveTo, (int)SpringCommands.MoveToAdditive, (int)SpringCommands.MoveToSubtractive, (int)SpringCommands.MoveToInstant)] + /// the new value this spring should move towards + [Tooltip("the new value this spring should move towards")] + public Vector4 MoveToValue = new Vector4(2f, 2f, 2f, 2f); + /// the amount to add to the spring's current velocity to disturb it and make it bump + [Tooltip("the amount to add to the spring's current velocity to disturb it and make it bump")] + [MMEnumCondition("Command", (int)SpringCommands.Bump)] + public Vector4 BumpAmount = new Vector4(75f, 75f, 75f, 75f); + + /// the min values between which a random target x value will be picked when calling MoveToRandom + [Tooltip("the min values between which a random target x value will be picked when calling MoveToRandom")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Vector4 MoveToRandomValueMin = new Vector4(-2f, -2f, -2f, -2f); + /// the min (x) and max (y) values between which a random target y value will be picked when calling MoveToRandom + [Tooltip("the min (x) and max (y) values between which a random target y value will be picked when calling MoveToRandom")] + [MMEnumCondition("Command", (int)SpringCommands.MoveToRandom)] + public Vector4 MoveToRandomValueMax = new Vector4(2f, 2f, 2f, 2f); + + /// the min (x) and max (y) values between which a random bump x value will be picked when calling BumpRandom + [Tooltip("the min (x) and max (y) values between which a random bump x value will be picked when calling BumpRandom")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Vector4 BumpAmountRandomValueMin = new Vector4(-20f, -20f, -20f, -20f); + /// the min (x) and max (y) values between which a random bump y value will be picked when calling BumpRandom + [Tooltip("the min (x) and max (y) values between which a random bump y value will be picked when calling BumpRandom")] + [MMEnumCondition("Command", (int)SpringCommands.BumpRandom)] + public Vector4 BumpAmountRandomValueMax = new Vector4(20f, 20f, 20f, 20f); + + [Header("Overrides")] + /// whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping) + [Tooltip("whether or not to override the current Damping value of the target spring(s) with the one specified below (NewDamping)")] + public bool OverrideDamping = false; + /// the new damping value to apply to the target spring(s) if OverrideDamping is true + [Tooltip("the new damping value to apply to the target spring(s) if OverrideDamping is true")] + [MMFCondition("OverrideDamping", true)] + public Vector4 NewDamping = new Vector4(0.8f, 0.8f, 0.8f, 0.8f); + /// whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency) + [Tooltip("whether or not to override the current Frequency value of the target spring(s) with the one specified below (NewFrequency)")] + public bool OverrideFrequency = false; + /// the new frequency value to apply to the target spring(s) if OverrideFrequency is true + [Tooltip("the new frequency value to apply to the target spring(s) if OverrideFrequency is true")] + [MMFCondition("OverrideFrequency", true)] + public Vector4 NewFrequency = new Vector4(5f, 5f, 5f, 5f); + + protected MMChannelData _eventChannelData; + + /// + /// On Play, triggers a spring event with the selected settings + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector4Event.Trigger(Command, TargetSpring, _eventChannelData, MoveToValue, BumpAmount, + MoveToRandomValueMin, MoveToRandomValueMax, + BumpAmountRandomValueMin, BumpAmountRandomValueMax, + OverrideDamping, NewDamping, OverrideFrequency, NewFrequency); + } + + /// + /// On stop, triggers a spring stop event + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector4Event.Trigger(SpringCommands.Stop, TargetSpring, _eventChannelData); + } + + /// + /// On restore, triggers a spring RestoreInitialValue event + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _eventChannelData = (TargetSpring == null) ? ChannelData : null; + MMSpringVector4Event.Trigger(SpringCommands.RestoreInitialValue, TargetSpring, _eventChannelData); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector4.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector4.cs.meta new file mode 100644 index 0000000..a1d7ab8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Feedbacks/MMF_SpringVector4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 627c672fde1366f4ba7e81dbe83a464c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs.meta new file mode 100644 index 0000000..32e6737 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 39b5c5bb2a68acd46922850c1a386c19 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAnimatorSpeed.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAnimatorSpeed.cs new file mode 100644 index 0000000..6ccb2f9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAnimatorSpeed.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringAnimatorSpeed")] + public class MMSpringAnimatorSpeed : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.speed; + set => Target.speed = Mathf.Abs(value); + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAnimatorSpeed.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAnimatorSpeed.cs.meta new file mode 100644 index 0000000..9ecafc5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAnimatorSpeed.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6a00a894837bd744b10fbeb03d1287b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourcePitch.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourcePitch.cs new file mode 100644 index 0000000..3cf0cbd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourcePitch.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringAudioSourcePitch")] + public class MMSpringAudioSourcePitch : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.pitch; + set => Target.pitch = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourcePitch.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourcePitch.cs.meta new file mode 100644 index 0000000..2e61a41 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourcePitch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01d2d7068b8e40b48bdbdfd98d3edf52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourceVolume.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourceVolume.cs new file mode 100644 index 0000000..4af5d66 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourceVolume.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringAudioSourceVolume")] + public class MMSpringAudioSourceVolume : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.volume; + set => Target.volume = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourceVolume.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourceVolume.cs.meta new file mode 100644 index 0000000..885ea53 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringAudioSourceVolume.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9675984066528d34ebf02a5535fe188f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraFieldOfView.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraFieldOfView.cs new file mode 100644 index 0000000..e4a25b1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraFieldOfView.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringCameraFieldOfView")] + public class MMSpringCameraFieldOfView : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.fieldOfView; + set => Target.fieldOfView = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraFieldOfView.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraFieldOfView.cs.meta new file mode 100644 index 0000000..f4aa563 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraFieldOfView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 501b92ed18cfbdc48a6c90492e8834fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraOrthographicSize.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraOrthographicSize.cs new file mode 100644 index 0000000..842e22b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraOrthographicSize.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringCameraOrthographicSize")] + public class MMSpringCameraOrthographicSize : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.orthographicSize; + set => Target.orthographicSize = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraOrthographicSize.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraOrthographicSize.cs.meta new file mode 100644 index 0000000..e93d482 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringCameraOrthographicSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c99aae5652b2184e88338afde13f993 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageAlpha.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageAlpha.cs new file mode 100644 index 0000000..effc8d3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageAlpha.cs @@ -0,0 +1,25 @@ +#if MM_UI +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringImageAlpha")] + public class MMSpringImageAlpha : MMSpringFloatComponent + { + protected Color _color; + + public override float TargetFloat + { + get => Target.color.a; + set + { + _color = Target.color; + _color.a = value; + Target.color = _color; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageAlpha.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageAlpha.cs.meta new file mode 100644 index 0000000..b42dc27 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageAlpha.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7bf3b8d115b7a0d42a8f0289c3c6e0cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageColor.cs new file mode 100644 index 0000000..2ba9d3f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageColor.cs @@ -0,0 +1,18 @@ +using MoreMountains.Tools; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringImageColor")] + public class MMSpringImageColor : MMSpringColorComponent + { + public override Color TargetColor + { + get => Target.color; + set => Target.color = value; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageColor.cs.meta new file mode 100644 index 0000000..20bd1f5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 023e5778f8d3894419aef3ebf75dc74d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageFillAmount.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageFillAmount.cs new file mode 100644 index 0000000..2023d73 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageFillAmount.cs @@ -0,0 +1,18 @@ +#if MM_UI +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringImageFillAmount")] + public class MMSpringImageFillAmount : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.fillAmount; + set => Target.fillAmount = value; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageFillAmount.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageFillAmount.cs.meta new file mode 100644 index 0000000..b57884d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringImageFillAmount.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5bea8581ef5d28a4bb265a7720c925e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightColor.cs new file mode 100644 index 0000000..bd7c18f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightColor.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringLightColor")] + public class MMSpringLightColor : MMSpringColorComponent + { + public override Color TargetColor + { + get => Target.color; + set => Target.color = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightColor.cs.meta new file mode 100644 index 0000000..cd0711f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 410f70980477c8447b83369c392945f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightIntensity.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightIntensity.cs new file mode 100644 index 0000000..759c34c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightIntensity.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringLightIntensity")] + public class MMSpringLightIntensity : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.intensity; + set => Target.intensity = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightIntensity.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightIntensity.cs.meta new file mode 100644 index 0000000..e52194a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightIntensity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74afe8fa850212e4cb811213ee9ae400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightRange.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightRange.cs new file mode 100644 index 0000000..37e6fdb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightRange.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringLightRange")] + public class MMSpringLightRange : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.range; + set => Target.range = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightRange.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightRange.cs.meta new file mode 100644 index 0000000..9190996 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringLightRange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22f8635412949d74b887ff1dc1a31742 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringMMTimeScale.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringMMTimeScale.cs new file mode 100644 index 0000000..8f87dd5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringMMTimeScale.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringMMTimeScale")] + public class MMSpringMMTimeScale : MMSpringFloatComponent + { + protected override void Initialization() + { + base.Initialization(); + FloatSpring.ClampSettings.ClampMin = true; + FloatSpring.ClampSettings.ClampMinValue = 0f; + FloatSpring.ClampSettings.ClampMinBounce = true; + } + + public override float TargetFloat + { + get => MMTimeManager.Instance.CurrentTimeScale; + set => MMTimeScaleEvent.Trigger(MMTimeScaleMethods.For, value, 0f, false, 0f, true); + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringMMTimeScale.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringMMTimeScale.cs.meta new file mode 100644 index 0000000..a977d56 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringMMTimeScale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11ac693b84e2c634d8baf89d406335ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringPosition.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringPosition.cs new file mode 100644 index 0000000..3f26411 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringPosition.cs @@ -0,0 +1,30 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringPosition")] + public class MMSpringPosition : MMSpringVector3Component + { + public enum Spaces { Local, World } + + [MMInspectorGroup("Target", true, 17)] + public Spaces Space = Spaces.World; + + public override Vector3 TargetVector3 + { + get => (Space == Spaces.Local) ? Target.localPosition : Target.position; + set + { + if (Space == Spaces.Local) + { + Target.localPosition = value; + } + else + { + Target.position = value; + } + } + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringPosition.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringPosition.cs.meta new file mode 100644 index 0000000..11ba82b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringPosition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcada72f36389ee498301db873e7cd1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformPosition.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformPosition.cs new file mode 100644 index 0000000..0af724b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformPosition.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringRectTransformPosition")] + public class MMSpringRectTransformPosition : MMSpringVector3Component + { + public override Vector3 TargetVector3 + { + get => Target.anchoredPosition3D; + set => Target.anchoredPosition3D = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformPosition.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformPosition.cs.meta new file mode 100644 index 0000000..a31a77e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformPosition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea0440c408d18a54cb9610dd676e7e65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformSizeDelta.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformSizeDelta.cs new file mode 100644 index 0000000..9245935 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformSizeDelta.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringRectTransformSizeDelta")] + public class MMSpringRectTransformSizeDelta : MMSpringVector2Component + { + public override Vector2 TargetVector2 + { + get => Target.sizeDelta; + set => Target.sizeDelta = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformSizeDelta.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformSizeDelta.cs.meta new file mode 100644 index 0000000..6d5ca10 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRectTransformSizeDelta.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 751d6cd81845c5542a535cd29ab8d777 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotation.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotation.cs new file mode 100644 index 0000000..37c5d5c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotation.cs @@ -0,0 +1,30 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringRotation")] + public class MMSpringRotation : MMSpringVector3Component + { + public enum Spaces { Local, World } + + [MMInspectorGroup("Target", true, 17)] + public Spaces Space = Spaces.World; + + public override Vector3 TargetVector3 + { + get => (Space == Spaces.Local) ? Target.localRotation.eulerAngles : Target.rotation.eulerAngles; + set + { + if (Space == Spaces.Local) + { + Target.localRotation = Quaternion.Euler(value); + } + else + { + Target.rotation = Quaternion.Euler(value); + } + } + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotation.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotation.cs.meta new file mode 100644 index 0000000..2ae7fa2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77e19943fc6c12249aa90e2f613265ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotationAround.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotationAround.cs new file mode 100644 index 0000000..e895e1a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotationAround.cs @@ -0,0 +1,45 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringRotationAround")] + public class MMSpringRotationAround : MMSpringFloatComponent + { + public Transform RotationCenter; + public Vector3 RotationAxis = Vector3.up; + public bool FaceRotationCenter = true; + + protected float _currentAngle; + protected Vector3 _initialPosition; + protected Quaternion _initialRotation; + + protected override void Initialization() + { + base.Initialization(); + _currentAngle = 0; + _initialPosition = Target.position; + _initialRotation = Target.rotation; + } + + + public override float TargetFloat + { + get + { + return _currentAngle; + } + set + { + _currentAngle = value; + Target.position = _initialPosition; + Target.rotation = _initialRotation; + Target.position = MMMaths.RotatePointAroundPivot(Target.position, RotationCenter.position, _currentAngle * RotationAxis); + if (FaceRotationCenter) + { + Target.LookAt(RotationCenter); + } + } + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotationAround.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotationAround.cs.meta new file mode 100644 index 0000000..13616db --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringRotationAround.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3431d42f2979ef548bf60186ddc6fe44 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringScale.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringScale.cs new file mode 100644 index 0000000..a8c3fb4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringScale.cs @@ -0,0 +1,32 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringScale")] + public class MMSpringScale : MMSpringVector3Component + { + protected override void Initialization() + { + base.Initialization(); + + SpringVector3.SpringX.ClampSettings.ClampMin = true; + SpringVector3.SpringX.ClampSettings.ClampMinValue = 0f; + SpringVector3.SpringX.ClampSettings.ClampMinBounce = true; + + SpringVector3.SpringY.ClampSettings.ClampMin = true; + SpringVector3.SpringY.ClampSettings.ClampMinValue = 0f; + SpringVector3.SpringY.ClampSettings.ClampMinBounce = true; + + SpringVector3.SpringZ.ClampSettings.ClampMin = true; + SpringVector3.SpringZ.ClampSettings.ClampMinValue = 0f; + SpringVector3.SpringZ.ClampSettings.ClampMinBounce = true; + } + + public override Vector3 TargetVector3 + { + get => Target.localScale; + set => Target.localScale = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringScale.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringScale.cs.meta new file mode 100644 index 0000000..4be3716 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringScale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd48b27a4bcde354a99ab15f0bd82486 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringShaderController.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringShaderController.cs new file mode 100644 index 0000000..fe44cb1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringShaderController.cs @@ -0,0 +1,17 @@ +using MoreMountains.Tools; +using UnityEngine; + +#if MM_UI +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringShaderController")] + public class MMSpringShaderController : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.DrivenLevel; + set => Target.DrivenLevel = value; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringShaderController.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringShaderController.cs.meta new file mode 100644 index 0000000..cb80db8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringShaderController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e157e875e121b174d903add782257618 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSpriteColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSpriteColor.cs new file mode 100644 index 0000000..a88ac94 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSpriteColor.cs @@ -0,0 +1,15 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringSpriteColor")] + public class MMSpringSpriteColor : MMSpringColorComponent + { + public override Color TargetColor + { + get => Target.color; + set => Target.color = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSpriteColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSpriteColor.cs.meta new file mode 100644 index 0000000..1f6419b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSpriteColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8671651c483f78429d998c7d9f5827f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSquashAndStretch.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSquashAndStretch.cs new file mode 100644 index 0000000..076417d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSquashAndStretch.cs @@ -0,0 +1,85 @@ +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringSquashAndStretch")] + public class MMSpringSquashAndStretch : MMSpringFloatComponent + { + public enum PossibleAxis { XtoYZ, XtoY, XtoZ, YtoXZ, YtoX, YtoZ, ZtoXZ, ZtoX, ZtoY } + + [MMInspectorGroup("Target", true, 17)] + public PossibleAxis Axis = PossibleAxis.XtoYZ; + + protected Vector3 _newScale; + protected Vector3 _initialScale; + + protected override void Initialization() + { + base.Initialization(); + FloatSpring.ClampSettings.ClampMin = true; + FloatSpring.ClampSettings.ClampMinValue = 0f; + FloatSpring.ClampSettings.ClampMinBounce = true; + _initialScale = Target.localScale; + } + + protected override void ApplyValue(float newValue) + { + float invertScale = 1 / Mathf.Sqrt(newValue); + switch (Axis) + { + case PossibleAxis.XtoYZ: + _newScale.x = newValue; + _newScale.y = invertScale; + _newScale.z = invertScale; + break; + case PossibleAxis.XtoY: + _newScale.x = newValue; + _newScale.y = invertScale; + _newScale.z = _initialScale.z; + break; + case PossibleAxis.XtoZ: + _newScale.x = newValue; + _newScale.y = _initialScale.y; + _newScale.z = invertScale; + break; + case PossibleAxis.YtoXZ: + _newScale.x = invertScale; + _newScale.y = newValue; + _newScale.z = invertScale; + break; + case PossibleAxis.YtoX: + _newScale.x = invertScale; + _newScale.y = newValue; + _newScale.z = _initialScale.z; + break; + case PossibleAxis.YtoZ: + _newScale.x = newValue; + _newScale.y = _initialScale.y; + _newScale.z = invertScale; + break; + case PossibleAxis.ZtoXZ: + _newScale.x = invertScale; + _newScale.y = invertScale; + _newScale.z = newValue; + break; + case PossibleAxis.ZtoX: + _newScale.x = invertScale; + _newScale.y = _initialScale.y; + _newScale.z = newValue; + break; + case PossibleAxis.ZtoY: + _newScale.x = _initialScale.x; + _newScale.y = invertScale; + _newScale.z = newValue; + break; + } + Target.localScale = _newScale; + } + + protected override void GrabCurrentValue() + { + FloatSpring.CurrentValue = Target.localScale.x; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSquashAndStretch.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSquashAndStretch.cs.meta new file mode 100644 index 0000000..2abcea7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringSquashAndStretch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e08cd56fd2838f45bb3577428403529 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPAlpha.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPAlpha.cs new file mode 100644 index 0000000..612ca9b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPAlpha.cs @@ -0,0 +1,17 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTMPAlpha")] + public class MMSpringTMPAlpha : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.alpha; + set => Target.alpha = value; + } + } +} +#endif diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPAlpha.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPAlpha.cs.meta new file mode 100644 index 0000000..3776c1b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPAlpha.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea8b9abba4f1a2949b1f9d03a2440aa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPCharacterSpacing.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPCharacterSpacing.cs new file mode 100644 index 0000000..717cf66 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPCharacterSpacing.cs @@ -0,0 +1,17 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTMPCharacterSpacing")] + public class MMSpringTMPCharacterSpacing : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.characterSpacing; + set => Target.characterSpacing = value; + } + } +} +#endif diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPCharacterSpacing.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPCharacterSpacing.cs.meta new file mode 100644 index 0000000..dd0b3cc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPCharacterSpacing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d786b9e198e820439b64c5406322429 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPDilate.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPDilate.cs new file mode 100644 index 0000000..97f7c23 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPDilate.cs @@ -0,0 +1,22 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTMPDilate")] + public class MMSpringTMPDilate : MMSpringFloatComponent + { + protected override void ApplyValue(float newValue) + { + base.ApplyValue(newValue); + Target.fontMaterial.SetFloat(ShaderUtilities.ID_FaceDilate, newValue); + } + + protected override void GrabCurrentValue() + { + FloatSpring.CurrentValue = Target.fontMaterial.GetFloat(ShaderUtilities.ID_FaceDilate); + } + } +} +#endif diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPDilate.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPDilate.cs.meta new file mode 100644 index 0000000..ac8aaac --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPDilate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 672424a3a46489f459437ba5a9afa89d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPFontSize.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPFontSize.cs new file mode 100644 index 0000000..bba76fd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPFontSize.cs @@ -0,0 +1,17 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTMPFontSize")] + public class MMSpringTMPFontSize : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.fontSize; + set => Target.fontSize = (int)value; + } + } +} +#endif diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPFontSize.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPFontSize.cs.meta new file mode 100644 index 0000000..14f80ac --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPFontSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2082a521ddffd7144aca9043d2728a9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPLineSpacing.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPLineSpacing.cs new file mode 100644 index 0000000..cf37abb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPLineSpacing.cs @@ -0,0 +1,17 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTMPLineSpacing")] + public class MMSpringTMPLineSpacing : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.lineSpacing; + set => Target.lineSpacing = value; + } + } +} +#endif diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPLineSpacing.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPLineSpacing.cs.meta new file mode 100644 index 0000000..caa81ce --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPLineSpacing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38a2b9ccac643d24393293543ef5d825 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPSoftness.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPSoftness.cs new file mode 100644 index 0000000..21f7401 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPSoftness.cs @@ -0,0 +1,22 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTMPSoftness")] + public class MMSpringTMPSoftness : MMSpringFloatComponent + { + protected override void ApplyValue(float newValue) + { + base.ApplyValue(newValue); + Target.fontSharedMaterial.SetFloat(ShaderUtilities.ID_OutlineSoftness, newValue); + } + + protected override void GrabCurrentValue() + { + FloatSpring.CurrentValue = Target.fontMaterial.GetFloat(ShaderUtilities.ID_OutlineSoftness); + } + } +} +#endif diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPSoftness.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPSoftness.cs.meta new file mode 100644 index 0000000..2b5ae90 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPSoftness.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49fca3db2731cab418491d2611d6577b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPTextColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPTextColor.cs new file mode 100644 index 0000000..2ac1183 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPTextColor.cs @@ -0,0 +1,17 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTMPTextColor")] + public class MMSpringTMPTextColor : MMSpringColorComponent + { + public override Color TargetColor + { + get => Target.color; + set => Target.color = value; + } + } +} +#endif diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPTextColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPTextColor.cs.meta new file mode 100644 index 0000000..20a95f0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPTextColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c305c1f0b1c3f8e448d224c11baaaf9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPWordSpacing.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPWordSpacing.cs new file mode 100644 index 0000000..7d5a6af --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPWordSpacing.cs @@ -0,0 +1,17 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTMPWordSpacing")] + public class MMSpringTMPWordSpacing : MMSpringFloatComponent + { + public override float TargetFloat + { + get => Target.wordSpacing; + set => Target.wordSpacing = value; + } + } +} +#endif diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPWordSpacing.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPWordSpacing.cs.meta new file mode 100644 index 0000000..4b8dcb3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTMPWordSpacing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45c7e7c8965a9e247b9e9b53897db43b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureOffset.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureOffset.cs new file mode 100644 index 0000000..5318fbf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureOffset.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTextureOffset")] + public class MMSpringTextureOffset : MMSpringVector2Component + { + public override Vector2 TargetVector2 + { + get => Target.material.mainTextureOffset; + set => Target.material.mainTextureOffset = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureOffset.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureOffset.cs.meta new file mode 100644 index 0000000..0cc6ef5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureOffset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9db8f29e9da6c1041b8ced3bcd99acf6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureScale.cs b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureScale.cs new file mode 100644 index 0000000..d07c8da --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureScale.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringTextureScale")] + public class MMSpringTextureScale : MMSpringVector2Component + { + public override Vector2 TargetVector2 + { + get => Target.material.mainTextureScale; + set => Target.material.mainTextureScale = value; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureScale.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureScale.cs.meta new file mode 100644 index 0000000..033d0b1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacks/Springs/Springs/MMSpringTextureScale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6234e4f3a210834b84433feac1a602d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty.meta new file mode 100644 index 0000000..45fa7ee --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d04548596f615eb4bb39c931329aae7a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine.meta new file mode 100644 index 0000000..c1ff97d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0cd952ed9971344c97734e47ae5bfdc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks.meta new file mode 100644 index 0000000..7329230 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76b756cf8480fcd4bb9db669233c29c5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulse.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulse.cs new file mode 100644 index 0000000..a83e508 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulse.cs @@ -0,0 +1,165 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + [AddComponentMenu("")] + #if MM_CINEMACHINE || MM_CINEMACHINE3 + [FeedbackPath("Camera/Cinemachine Impulse")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.Cinemachine")] + [FeedbackHelp("This feedback lets you trigger a Cinemachine Impulse event. You'll need a Cinemachine Impulse Listener on your camera for this to work.")] + public class MMF_CinemachineImpulse : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + public override bool HasRandomness => true; + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + [MMFInspectorGroup("Cinemachine Impulse", true, 28)] + /// the impulse definition to broadcast + [Tooltip("the impulse definition to broadcast")] + public CinemachineImpulseDefinition m_ImpulseDefinition = new CinemachineImpulseDefinition(); + /// the velocity to apply to the impulse shake + [Tooltip("the velocity to apply to the impulse shake")] + public Vector3 Velocity; + /// whether or not to clear impulses (stopping camera shakes) when the Stop method is called on that feedback + [Tooltip("whether or not to clear impulses (stopping camera shakes) when the Stop method is called on that feedback")] + public bool ClearImpulseOnStop = false; + #endif + + [Header("Gizmos")] + /// whether or not to draw gizmos to showcase the various distance properties of this feedback, when applicable. Dissipation distance in blue, impact radius in yellow. + [Tooltip("whether or not to draw gizmos to showcase the various distance properties of this feedback, when applicable. Dissipation distance in blue, impact radius in yellow.")] + public bool DrawGizmos = false; + + #if MM_CINEMACHINE + /// the duration of this feedback is the duration of the impulse + public override float FeedbackDuration { get { return m_ImpulseDefinition != null ? m_ImpulseDefinition.m_TimeEnvelope.Duration : 0f; } } + #elif MM_CINEMACHINE3 + /// the duration of this feedback is the duration of the impulse + public override float FeedbackDuration { get { return m_ImpulseDefinition != null ? m_ImpulseDefinition.TimeEnvelope.Duration : 0f; } } + #endif + + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + CinemachineImpulseManager.Instance.IgnoreTimeScale = !InScaledTimescaleMode; + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + m_ImpulseDefinition.CreateEvent(position, Velocity * intensityMultiplier); + #endif + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (!Active || !FeedbackTypeAuthorized || !ClearImpulseOnStop) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + CinemachineImpulseManager.Instance.Clear(); + #endif + } + + /// + /// When adding the feedback we initialize its cinemachine impulse definition + /// + public override void OnAddFeedback() + { + #if MM_CINEMACHINE + // sets the feedback properties + if (this.m_ImpulseDefinition == null) + { + this.m_ImpulseDefinition = new CinemachineImpulseDefinition(); + } + this.m_ImpulseDefinition.m_RawSignal = Resources.Load("MM_6D_Shake"); + this.Velocity = new Vector3(5f, 5f, 5f); + #elif MM_CINEMACHINE3 + // sets the feedback properties + if (this.m_ImpulseDefinition == null) + { + this.m_ImpulseDefinition = new CinemachineImpulseDefinition(); + } + this.m_ImpulseDefinition.RawSignal = Resources.Load("MM_6D_Shake"); + this.Velocity = new Vector3(5f, 5f, 5f); + #endif + } + + /// + /// Draws dissipation distance and impact distance gizmos if necessary + /// + public override void OnDrawGizmosSelectedHandler() + { + if (!DrawGizmos) + { + return; + } + #if MM_CINEMACHINE + { + if ( (this.m_ImpulseDefinition.m_ImpulseType == CinemachineImpulseDefinition.ImpulseTypes.Dissipating) + || (this.m_ImpulseDefinition.m_ImpulseType == CinemachineImpulseDefinition.ImpulseTypes.Propagating) + || (this.m_ImpulseDefinition.m_ImpulseType == CinemachineImpulseDefinition.ImpulseTypes.Legacy) ) + { + Gizmos.color = MMColors.Aqua; + Gizmos.DrawWireSphere(Owner.transform.position, this.m_ImpulseDefinition.m_DissipationDistance); + } + if (this.m_ImpulseDefinition.m_ImpulseType == CinemachineImpulseDefinition.ImpulseTypes.Legacy) + { + Gizmos.color = MMColors.ReunoYellow; + Gizmos.DrawWireSphere(Owner.transform.position, this.m_ImpulseDefinition.m_ImpactRadius); + } + } + #elif MM_CINEMACHINE3 + if (this.m_ImpulseDefinition != null) + { + if ( (this.m_ImpulseDefinition.ImpulseType == CinemachineImpulseDefinition.ImpulseTypes.Dissipating) + || (this.m_ImpulseDefinition.ImpulseType == CinemachineImpulseDefinition.ImpulseTypes.Propagating) + || (this.m_ImpulseDefinition.ImpulseType == CinemachineImpulseDefinition.ImpulseTypes.Legacy) ) + { + Gizmos.color = MMColors.Aqua; + Gizmos.DrawWireSphere(Owner.transform.position, this.m_ImpulseDefinition.DissipationDistance); + } + if (this.m_ImpulseDefinition.ImpulseType == CinemachineImpulseDefinition.ImpulseTypes.Legacy) + { + Gizmos.color = MMColors.ReunoYellow; + Gizmos.DrawWireSphere(Owner.transform.position, this.m_ImpulseDefinition.ImpactRadius); + } + } + #endif + } + + /// + /// Automatically adds a Cinemachine Impulse Listener to the camera + /// + public override void AutomaticShakerSetup() + { + MMCinemachineHelpers.AutomaticCinemachineShakersSetup(Owner, "CinemachineImpulse"); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulse.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulse.cs.meta new file mode 100644 index 0000000..42d57c7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ee48f409bf2e3e4baf85ca77d2ca0af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseClear.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseClear.cs new file mode 100644 index 0000000..22c6f5c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseClear.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + [AddComponentMenu("")] + #if MM_CINEMACHINE || MM_CINEMACHINE3 + [FeedbackPath("Camera/Cinemachine Impulse Clear")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.Cinemachine")] + [FeedbackHelp("This feedback lets you trigger a Cinemachine Impulse clear, stopping instantly any impulse that may be playing.")] + public class MMF_CinemachineImpulseClear : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + #endif + + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if MM_CINEMACHINE || MM_CINEMACHINE3 + CinemachineImpulseManager.Instance.Clear(); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseClear.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseClear.cs.meta new file mode 100644 index 0000000..5a93960 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseClear.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2362762ee575ad4ab16bb938247878b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseSource.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseSource.cs new file mode 100644 index 0000000..a338560 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseSource.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + [AddComponentMenu("")] + #if MM_CINEMACHINE || MM_CINEMACHINE3 + [FeedbackPath("Camera/Cinemachine Impulse Source")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.Cinemachine")] + [FeedbackHelp("This feedback lets you generate an impulse on a Cinemachine Impulse source. You'll need a Cinemachine Impulse Listener on your camera for this to work.")] + public class MMF_CinemachineImpulseSource : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + #if MM_CINEMACHINE || MM_CINEMACHINE3 + public override bool EvaluateRequiresSetup() { return (ImpulseSource == null); } + public override string RequiredTargetText { get { return ImpulseSource != null ? ImpulseSource.name : ""; } } + #endif + public override string RequiresSetupText { get { return "This feedback requires that an ImpulseSource be set to be able to work properly. You can set one below."; } } + #endif + + + [MMFInspectorGroup("Cinemachine Impulse Source", true, 28)] + + /// the velocity to apply to the impulse shake + [Tooltip("the velocity to apply to the impulse shake")] + public Vector3 Velocity = new Vector3(1f,1f,1f); + #if MM_CINEMACHINE || MM_CINEMACHINE3 + /// the impulse definition to broadcast + [Tooltip("the impulse definition to broadcast")] + public CinemachineImpulseSource ImpulseSource; + + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => ImpulseSource = FindAutomatedTarget(); + #endif + /// whether or not to clear impulses (stopping camera shakes) when the Stop method is called on that feedback + [Tooltip("whether or not to clear impulses (stopping camera shakes) when the Stop method is called on that feedback")] + public bool ClearImpulseOnStop = false; + + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (ImpulseSource != null) + { + ImpulseSource.GenerateImpulse(Velocity); + } + #endif + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || !ClearImpulseOnStop) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + CinemachineImpulseManager.Instance.Clear(); + #endif + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + CinemachineImpulseManager.Instance.Clear(); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseSource.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseSource.cs.meta new file mode 100644 index 0000000..57d7ae2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineImpulseSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f6892e7c981ffa45ad8e24c33bdac4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineTransition.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineTransition.cs new file mode 100644 index 0000000..2344e45 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineTransition.cs @@ -0,0 +1,150 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the priorities of your cameras. + /// It requires a bit of setup : adding a MMCinemachinePriorityListener to your different cameras, with unique Channel values on them. + /// Optionally, you can add a MMCinemachinePriorityBrainListener on your Cinemachine Brain to handle different transition types and durations. + /// Then all you have to do is pick a channel and a new priority on your feedback, and play it. Magic transition! + /// + [AddComponentMenu("")] + #if MM_CINEMACHINE || MM_CINEMACHINE3 + [FeedbackPath("Camera/Cinemachine Transition")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.Cinemachine")] + [FeedbackHelp("This feedback will let you change the priorities of your cameras. It requires a bit of setup : " + + "adding a MMCinemachinePriorityListener to your different cameras, with unique Channel values on them. " + + "Optionally, you can add a MMCinemachinePriorityBrainListener on your Cinemachine Brain to handle different transition types and durations. " + + "Then all you have to do is pick a channel and a new priority on your feedback, and play it. Magic transition!")] + public class MMF_CinemachineTransition : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public enum Modes { Event, Binding } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + #if MM_CINEMACHINE + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(BlendDefintion.m_Time); } set { BlendDefintion.m_Time = value; } } + #elif MM_CINEMACHINE3 + public override float FeedbackDuration { get { return ApplyTimeMultiplier(BlendDefintion.Time); } set { BlendDefintion.Time = value; } } + #endif + #if MM_CINEMACHINE || MM_CINEMACHINE3 + public override bool HasAutomatedTargetAcquisition => true; + #endif + #if MM_CINEMACHINE + protected override void AutomateTargetAcquisition() => TargetVirtualCamera = FindAutomatedTarget(); + #elif MM_CINEMACHINE3 + protected override void AutomateTargetAcquisition() => TargetCinemachineCamera = FindAutomatedTarget(); + #endif + public override bool HasChannel => true; + + [MMFInspectorGroup("Cinemachine Transition", true, 52)] + /// the selected mode (either via event, or via direct binding of a specific camera) + [Tooltip("the selected mode (either via event, or via direct binding of a specific camera)")] + public Modes Mode = Modes.Event; + #if MM_CINEMACHINE + /// the virtual camera to target + [Tooltip("the virtual camera to target")] + [MMFEnumCondition("Mode", (int)Modes.Binding)] + public CinemachineVirtualCamera TargetVirtualCamera; + #elif MM_CINEMACHINE3 + /// the Cinemachine camera to target + [Tooltip("the Cinemachine camera to target")] + [MMFEnumCondition("Mode", (int)Modes.Binding)] + public CinemachineCamera TargetCinemachineCamera; + #endif + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetValuesAfterTransition = true; + + [Header("Priority")] + /// the new priority to apply to all virtual cameras on the specified channel + [Tooltip("the new priority to apply to all virtual cameras on the specified channel")] + public int NewPriority = 10; + /// whether or not to force all virtual cameras on other channels to reset their priority to zero + [Tooltip("whether or not to force all virtual cameras on other channels to reset their priority to zero")] + public bool ForceMaxPriority = true; + /// whether or not to apply a new blend + [Tooltip("whether or not to apply a new blend")] + public bool ForceTransition = false; + #if MM_CINEMACHINE || MM_CINEMACHINE3 + /// the new blend definition to apply + [Tooltip("the new blend definition to apply")] + [MMFCondition("ForceTransition", true)] + public CinemachineBlendDefinition BlendDefintion; + + protected CinemachineBlendDefinition _tempBlend; + #endif + + /// + /// Triggers a priority change on listening virtual cameras + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + _tempBlend = BlendDefintion; + #endif + #if MM_CINEMACHINE + _tempBlend.m_Time = FeedbackDuration; + #elif MM_CINEMACHINE3 + _tempBlend.Time = FeedbackDuration; + #endif + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (Mode == Modes.Event) + { + MMCinemachinePriorityEvent.Trigger(ChannelData, ForceMaxPriority, NewPriority, ForceTransition, _tempBlend, ResetValuesAfterTransition, ComputedTimescaleMode); + } + else + { + MMCinemachinePriorityEvent.Trigger(ChannelData, ForceMaxPriority, 0, ForceTransition, _tempBlend, ResetValuesAfterTransition, ComputedTimescaleMode); + SetPriority(NewPriority); + } + #endif + } + + protected virtual void SetPriority(int newPriority) + { + #if MM_CINEMACHINE + TargetVirtualCamera.Priority = newPriority; + #elif MM_CINEMACHINE3 + PrioritySettings prioritySettings = TargetCinemachineCamera.Priority; + prioritySettings.Value = newPriority; + TargetCinemachineCamera.Priority = prioritySettings; + #endif + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if MM_CINEMACHINE || MM_CINEMACHINE3 + MMCinemachinePriorityEvent.Trigger(ChannelData, ForceMaxPriority, 0, ForceTransition, _tempBlend, ResetValuesAfterTransition, ComputedTimescaleMode, true); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineTransition.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineTransition.cs.meta new file mode 100644 index 0000000..83a5f32 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Feedbacks/MMF_CinemachineTransition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2838524600839f84591c1d8a457b2176 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers.meta new file mode 100644 index 0000000..5358725 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 012099a7c01491d498f5f9098f2c1537 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers/MMCinemachineHelpers.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers/MMCinemachineHelpers.cs new file mode 100644 index 0000000..8dc02cf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers/MMCinemachineHelpers.cs @@ -0,0 +1,99 @@ +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + public class MMCinemachineHelpers : MonoBehaviour + { + public static GameObject AutomaticCinemachineShakersSetup(MMF_Player owner, string feedbackName) + { + GameObject virtualCameraGo = null; + + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + bool newVcam = false; + string additions = owner.name + " "+feedbackName+" feedback automatic shaker setup : "; + #endif + + #if MM_CINEMACHINE + //looks for a Cinemachine Brain in the scene + CinemachineBrain cinemachineBrain = (CinemachineBrain)Object.FindObjectOfType(typeof(CinemachineBrain)); + if (cinemachineBrain == null) + { + cinemachineBrain = Camera.main.gameObject.AddComponent(); + additions += "Added a Cinemachine Brain to the scene. "; + } + + // looks for a vcam in the scene + CinemachineVirtualCamera virtualCamera = (CinemachineVirtualCamera)Object.FindObjectOfType(typeof(CinemachineVirtualCamera)); + if (virtualCamera == null) + { + GameObject newVirtualCamera = new GameObject("CinemachineVirtualCamera"); + if (Camera.main != null) + { + newVirtualCamera.transform.position = Camera.main.transform.position; + } + virtualCamera = newVirtualCamera.AddComponent(); + additions += "Added a Cinemachine Virtual Camera to the scene. "; + newVcam = true; + } + virtualCameraGo = virtualCamera.gameObject; + CinemachineImpulseListener impulseListener = virtualCamera.GetComponent(); + if (impulseListener == null) + { + impulseListener = virtualCamera.gameObject.AddComponent(); + additions += "Added an impulse listener. "; + } + #elif MM_CINEMACHINE3 + //looks for a Cinemachine Brain in the scene + CinemachineBrain cinemachineBrain = (CinemachineBrain)Object.FindObjectOfType(typeof(CinemachineBrain)); + if (cinemachineBrain == null) + { + cinemachineBrain = Camera.main.gameObject.AddComponent(); + additions += "Added a Cinemachine Brain to the scene. "; + } + // looks for a vcam in the scene + CinemachineCamera virtualCamera = (CinemachineCamera)Object.FindObjectOfType(typeof(CinemachineCamera)); + if (virtualCamera == null) + { + GameObject newVirtualCamera = new GameObject("CinemachineCamera"); + if (Camera.main != null) + { + newVirtualCamera.transform.position = Camera.main.transform.position; + } + virtualCamera = newVirtualCamera.AddComponent(); + additions += "Added a Cinemachine Camera to the scene. "; + newVcam = true; + } + virtualCameraGo = virtualCamera.gameObject; + CinemachineImpulseListener impulseListener = virtualCamera.GetComponent(); + if (impulseListener == null) + { + impulseListener = virtualCamera.gameObject.AddComponent(); + additions += "Added an impulse listener. "; + } + #endif + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (newVcam) + { + virtualCameraGo.MMGetOrAddComponent(); + virtualCameraGo.MMGetOrAddComponent(); + virtualCameraGo.MMGetOrAddComponent(); + virtualCameraGo.MMGetOrAddComponent(); + virtualCameraGo.MMGetOrAddComponent(); + additions += "Added camera shaker, zoom, priority listener, clipping planes shaker and field of view shaker to the Cinemachine Camera. "; + } + + MMDebug.DebugLogInfo( additions + "You're all set."); + #endif + return virtualCameraGo; + } + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers/MMCinemachineHelpers.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers/MMCinemachineHelpers.cs.meta new file mode 100644 index 0000000..19df05f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers/MMCinemachineHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53907edcd2e7d344c8517b4e1da9e75f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/MoreMountains.Feedbacks.Cinemachine.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/MoreMountains.Feedbacks.Cinemachine.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/MoreMountains.Feedbacks.Cinemachine.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/MoreMountains.Feedbacks.Cinemachine.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/MoreMountains.Feedbacks.Cinemachine.asmref.meta new file mode 100644 index 0000000..939c289 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/MoreMountains.Feedbacks.Cinemachine.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: afb2be2d186835148b46d3b0c4ae900d +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources.meta new file mode 100644 index 0000000..e705f5c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6f6a830756be1b440bf6d073f91619d7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources/MM_6D_Shake.asset b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources/MM_6D_Shake.asset new file mode 100644 index 0000000..67fd064 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources/MM_6D_Shake.asset @@ -0,0 +1,87 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b7f59e54f2bfd184b9dd451a678d089b, type: 3} + m_Name: MM_6D_Shake + m_EditorClassIdentifier: + PositionNoise: + - X: + Frequency: 3.2 + Amplitude: 0.011 + Constant: 1 + Y: + Frequency: 1.9 + Amplitude: 0.059 + Constant: 1 + Z: + Frequency: 3.33 + Amplitude: 0.021 + Constant: 1 + - X: + Frequency: 7.7 + Amplitude: 0.009 + Constant: 1 + Y: + Frequency: 9.1 + Amplitude: 0.04 + Constant: 0 + Z: + Frequency: 9.22 + Amplitude: 0.009 + Constant: 1 + - X: + Frequency: 51.51 + Amplitude: 0.002 + Constant: 1 + Y: + Frequency: 55.54 + Amplitude: 0.05 + Constant: 1 + Z: + Frequency: 58.55 + Amplitude: 0.017 + Constant: 1 + OrientationNoise: + - X: + Frequency: 5.83 + Amplitude: 0.09 + Constant: 1 + Y: + Frequency: 1.8 + Amplitude: 0.059 + Constant: 1 + Z: + Frequency: 2.38 + Amplitude: 0.017 + Constant: 1 + - X: + Frequency: 9.17 + Amplitude: 0.14 + Constant: 1 + Y: + Frequency: 11.35 + Amplitude: 0.041 + Constant: 1 + Z: + Frequency: 10.52 + Amplitude: 0.009 + Constant: 1 + - X: + Frequency: 57.17 + Amplitude: 0.15 + Constant: 1 + Y: + Frequency: 54.17 + Amplitude: 0.048 + Constant: 1 + Z: + Frequency: 63.76 + Amplitude: 0.016 + Constant: 1 diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources/MM_6D_Shake.asset.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources/MM_6D_Shake.asset.meta new file mode 100644 index 0000000..f317977 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Resources/MM_6D_Shake.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bcf6524ce6451f34cb7106d0c00da9a5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers.meta new file mode 100644 index 0000000..ebc6e5b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22217fa6cb1ecde4ba6e2ccdeff4ba33 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineCameraShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineCameraShaker.cs new file mode 100644 index 0000000..b4027ec --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineCameraShaker.cs @@ -0,0 +1,232 @@ +using System.Collections; +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using MoreMountains.Feedbacks; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this component to your Cinemachine Virtual Camera to have it shake when calling its ShakeCamera methods. + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Cinemachine/MMCinemachineCameraShaker")] + #if MM_CINEMACHINE + [RequireComponent(typeof(CinemachineVirtualCamera))] + #elif MM_CINEMACHINE3 + [RequireComponent(typeof(CinemachineCamera))] + #endif + public class MMCinemachineCameraShaker : MonoBehaviour + { + [Header("Settings")] + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + /// The default amplitude that will be applied to your shakes if you don't specify one + [Tooltip("The default amplitude that will be applied to your shakes if you don't specify one")] + public float DefaultShakeAmplitude = .5f; + /// The default frequency that will be applied to your shakes if you don't specify one + [Tooltip("The default frequency that will be applied to your shakes if you don't specify one")] + public float DefaultShakeFrequency = 10f; + /// the amplitude of the camera's noise when it's idle + [Tooltip("the amplitude of the camera's noise when it's idle")] + [MMFReadOnly] + public float IdleAmplitude; + /// the frequency of the camera's noise when it's idle + [Tooltip("the frequency of the camera's noise when it's idle")] + [MMFReadOnly] + public float IdleFrequency = 1f; + /// the speed at which to interpolate the shake + [Tooltip("the speed at which to interpolate the shake")] + public float LerpSpeed = 5f; + + [Header("Test")] + /// a duration (in seconds) to apply when testing this shake via the TestShake button + [Tooltip("a duration (in seconds) to apply when testing this shake via the TestShake button")] + public float TestDuration = 0.3f; + /// the amplitude to apply when testing this shake via the TestShake button + [Tooltip("the amplitude to apply when testing this shake via the TestShake button")] + public float TestAmplitude = 2f; + /// the frequency to apply when testing this shake via the TestShake button + [Tooltip("the frequency to apply when testing this shake via the TestShake button")] + public float TestFrequency = 20f; + + [MMFInspectorButton("TestShake")] + public bool TestShakeButton; + + public virtual float GetTime() { return (_timescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (_timescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + protected TimescaleModes _timescaleMode; + protected Vector3 _initialPosition; + protected Quaternion _initialRotation; + #if MM_CINEMACHINE + protected Cinemachine.CinemachineBasicMultiChannelPerlin _perlin; + protected Cinemachine.CinemachineVirtualCamera _virtualCamera; + #elif MM_CINEMACHINE3 + protected CinemachineBasicMultiChannelPerlin _perlin; + protected CinemachineCamera _virtualCamera; + #endif + protected float _targetAmplitude; + protected float _targetFrequency; + private Coroutine _shakeCoroutine; + + /// + /// On awake we grab our components + /// + protected virtual void Awake() + { + #if MM_CINEMACHINE + _virtualCamera = this.gameObject.GetComponent(); + _perlin = _virtualCamera.GetCinemachineComponent(); + #elif MM_CINEMACHINE3 + _virtualCamera = this.gameObject.GetComponent(); + _perlin = _virtualCamera.GetCinemachineComponent(CinemachineCore.Stage.Noise) as CinemachineBasicMultiChannelPerlin; + #endif + } + + /// + /// On Start we reset our camera to apply our base amplitude and frequency + /// + protected virtual void Start() + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (_perlin != null) + { + #if MM_CINEMACHINE + IdleAmplitude = _perlin.m_AmplitudeGain; + IdleFrequency = _perlin.m_FrequencyGain; + #elif MM_CINEMACHINE3 + IdleAmplitude = _perlin.AmplitudeGain; + IdleFrequency = _perlin.FrequencyGain; + #endif + } + #endif + + _targetAmplitude = IdleAmplitude; + _targetFrequency = IdleFrequency; + } + + protected virtual void Update() + { + #if MM_CINEMACHINE + if (_perlin != null) + { + _perlin.m_AmplitudeGain = _targetAmplitude; + _perlin.m_FrequencyGain = Mathf.Lerp(_perlin.m_FrequencyGain, _targetFrequency, GetDeltaTime() * LerpSpeed); + } + #elif MM_CINEMACHINE3 + if (_perlin != null) + { + _perlin.AmplitudeGain = _targetAmplitude; + _perlin.FrequencyGain = Mathf.Lerp(_perlin.FrequencyGain, _targetFrequency, GetDeltaTime() * LerpSpeed); + } + #endif + } + + /// + /// Use this method to shake the camera for the specified duration (in seconds) with the default amplitude and frequency + /// + /// Duration. + public virtual void ShakeCamera(float duration, bool infinite, bool useUnscaledTime = false) + { + StartCoroutine(ShakeCameraCo(duration, DefaultShakeAmplitude, DefaultShakeFrequency, infinite, useUnscaledTime)); + } + + /// + /// Use this method to shake the camera for the specified duration (in seconds), amplitude and frequency + /// + /// Duration. + /// Amplitude. + /// Frequency. + public virtual void ShakeCamera(float duration, float amplitude, float frequency, bool infinite, bool useUnscaledTime = false) + { + if (_shakeCoroutine != null) + { + StopCoroutine(_shakeCoroutine); + } + _shakeCoroutine = StartCoroutine(ShakeCameraCo(duration, amplitude, frequency, infinite, useUnscaledTime)); + } + + /// + /// This coroutine will shake the + /// + /// The camera co. + /// Duration. + /// Amplitude. + /// Frequency. + protected virtual IEnumerator ShakeCameraCo(float duration, float amplitude, float frequency, bool infinite, bool useUnscaledTime) + { + _targetAmplitude = amplitude; + _targetFrequency = frequency; + _timescaleMode = useUnscaledTime ? TimescaleModes.Unscaled : TimescaleModes.Scaled; + if (!infinite) + { + yield return new WaitForSeconds(duration); + CameraReset(); + } + } + + /// + /// Resets the camera's noise values to their idle values + /// + public virtual void CameraReset() + { + _targetAmplitude = IdleAmplitude; + _targetFrequency = IdleFrequency; + } + + public virtual void OnCameraShakeEvent(float duration, float amplitude, float frequency, float amplitudeX, float amplitudeY, float amplitudeZ, bool infinite, MMChannelData channelData, bool useUnscaledTime) + { + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return; + } + this.ShakeCamera(duration, amplitude, frequency, infinite, useUnscaledTime); + } + + public virtual void OnCameraShakeStopEvent(MMChannelData channelData) + { + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return; + } + if (_shakeCoroutine != null) + { + StopCoroutine(_shakeCoroutine); + } + CameraReset(); + } + + protected virtual void OnEnable() + { + MMCameraShakeEvent.Register(OnCameraShakeEvent); + MMCameraShakeStopEvent.Register(OnCameraShakeStopEvent); + } + + protected virtual void OnDisable() + { + MMCameraShakeEvent.Unregister(OnCameraShakeEvent); + MMCameraShakeStopEvent.Unregister(OnCameraShakeStopEvent); + } + + protected virtual void TestShake() + { + MMCameraShakeEvent.Trigger(TestDuration, TestAmplitude, TestFrequency, 0f, 0f, 0f, false, new MMChannelData(ChannelMode, Channel, MMChannelDefinition)); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineCameraShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineCameraShaker.cs.meta new file mode 100644 index 0000000..393cab2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineCameraShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d66462bf720d28469c8db4b2e52720c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineClippingPlanesShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineClippingPlanesShaker.cs new file mode 100644 index 0000000..f8b3de1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineClippingPlanesShaker.cs @@ -0,0 +1,233 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this to a Cinemachine virtual camera and it'll let you control its near and far clipping planes + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Cinemachine/MMCinemachineClippingPlanesShaker")] + #if MM_CINEMACHINE + [RequireComponent(typeof(CinemachineVirtualCamera))] + #elif MM_CINEMACHINE3 + [RequireComponent(typeof(CinemachineCamera))] + #endif + public class MMCinemachineClippingPlanesShaker : MMShaker + { + [MMInspectorGroup("Clipping Planes", true, 45)] + /// whether or not to add to the initial value + public bool RelativeClippingPlanes = false; + + [MMInspectorGroup("Near Plane", true, 46)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeNear = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapNearZero = 0.3f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapNearOne = 100f; + + [MMInspectorGroup("Far Plane", true, 47)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeFar = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFarZero = 1000f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFarOne = 1000f; + + #if MM_CINEMACHINE + protected CinemachineVirtualCamera _targetCamera; + #elif MM_CINEMACHINE3 + protected CinemachineCamera _targetCamera; + #endif + protected float _initialNear; + protected float _initialFar; + protected float _originalShakeDuration; + protected bool _originalRelativeClippingPlanes; + protected AnimationCurve _originalShakeNear; + protected float _originalRemapNearZero; + protected float _originalRemapNearOne; + protected AnimationCurve _originalShakeFar; + protected float _originalRemapFarZero; + protected float _originalRemapFarOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + #if MM_CINEMACHINE + _targetCamera = this.gameObject.GetComponent(); + #elif MM_CINEMACHINE3 + _targetCamera = this.gameObject.GetComponent(); + #endif + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newNear = ShakeFloat(ShakeNear, RemapNearZero, RemapNearOne, RelativeClippingPlanes, _initialNear); + float newFar = ShakeFloat(ShakeFar, RemapFarZero, RemapFarOne, RelativeClippingPlanes, _initialFar); + SetNearFar(newNear, newFar); + } + + protected virtual void SetNearFar(float near, float far) + { + #if MM_CINEMACHINE + _targetCamera.m_Lens.NearClipPlane = near; + _targetCamera.m_Lens.FarClipPlane = far; + #elif MM_CINEMACHINE3 + _targetCamera.Lens.NearClipPlane = near; + _targetCamera.Lens.FarClipPlane = far; + #endif + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + #if MM_CINEMACHINE + _initialNear = _targetCamera.m_Lens.NearClipPlane; + _initialFar = _targetCamera.m_Lens.FarClipPlane; + #elif MM_CINEMACHINE3 + _initialNear = _targetCamera.Lens.NearClipPlane; + _initialFar = _targetCamera.Lens.FarClipPlane; + #endif + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMCameraClippingPlanesShakeEvent(AnimationCurve animNearCurve, float duration, float remapNearMin, float remapNearMax, AnimationCurve animFarCurve, float remapFarMin, float remapFarMax, bool relativeValues = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + if (!Interruptible && Shaking) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeNear = ShakeNear; + _originalShakeFar = ShakeFar; + _originalRemapNearZero = RemapNearZero; + _originalRemapNearOne = RemapNearOne; + _originalRemapFarZero = RemapFarZero; + _originalRemapFarOne = RemapFarOne; + _originalRelativeClippingPlanes = RelativeClippingPlanes; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeNear = animNearCurve; + RemapNearZero = remapNearMin * feedbacksIntensity; + RemapNearOne = remapNearMax * feedbacksIntensity; + ShakeFar = animFarCurve; + RemapFarZero = remapFarMin * feedbacksIntensity; + RemapFarOne = remapFarMax * feedbacksIntensity; + RelativeClippingPlanes = relativeValues; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + SetNearFar(_initialNear, _initialFar); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeNear = _originalShakeNear; + ShakeFar = _originalShakeFar; + RemapNearZero = _originalRemapNearZero; + RemapNearOne = _originalRemapNearOne; + RemapFarZero = _originalRemapFarZero; + RemapFarOne = _originalRemapFarOne; + RelativeClippingPlanes = _originalRelativeClippingPlanes; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMCameraClippingPlanesShakeEvent.Register(OnMMCameraClippingPlanesShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMCameraClippingPlanesShakeEvent.Unregister(OnMMCameraClippingPlanesShakeEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineClippingPlanesShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineClippingPlanesShaker.cs.meta new file mode 100644 index 0000000..8192a24 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineClippingPlanesShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ff80f834f6ca564da816a2f08bc75f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFieldOfViewShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFieldOfViewShaker.cs new file mode 100644 index 0000000..c8dcb69 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFieldOfViewShaker.cs @@ -0,0 +1,203 @@ +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this to a Cinemachine virtual camera and it'll let you control its field of view over time, can be piloted by a MMFeedbackCameraFieldOfView + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Cinemachine/MMCinemachineFieldOfViewShaker")] + #if MM_CINEMACHINE + [RequireComponent(typeof(CinemachineVirtualCamera))] + #elif MM_CINEMACHINE3 + [RequireComponent(typeof(CinemachineCamera))] + #endif + public class MMCinemachineFieldOfViewShaker : MMShaker + { + [MMInspectorGroup("Field of view", true, 41)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeFieldOfView = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeFieldOfView = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 179f)] + public float RemapFieldOfViewZero = 60f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 179f)] + public float RemapFieldOfViewOne = 120f; + + #if MM_CINEMACHINE + protected CinemachineVirtualCamera _targetCamera; + #elif MM_CINEMACHINE3 + protected CinemachineCamera _targetCamera; + #endif + protected float _initialFieldOfView; + protected float _originalShakeDuration; + protected bool _originalRelativeFieldOfView; + protected AnimationCurve _originalShakeFieldOfView; + protected float _originalRemapFieldOfViewZero; + protected float _originalRemapFieldOfViewOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + #if MM_CINEMACHINE + _targetCamera = this.gameObject.GetComponent(); + #elif MM_CINEMACHINE3 + _targetCamera = this.gameObject.GetComponent(); + #endif + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newFieldOfView = ShakeFloat(ShakeFieldOfView, RemapFieldOfViewZero, RemapFieldOfViewOne, RelativeFieldOfView, _initialFieldOfView); + SetFieldOfView(newFieldOfView); + } + + protected virtual void SetFieldOfView(float newFieldOfView) + { + #if MM_CINEMACHINE + _targetCamera.m_Lens.FieldOfView = newFieldOfView; + #elif MM_CINEMACHINE3 + _targetCamera.Lens.FieldOfView = newFieldOfView; + #endif + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + #if MM_CINEMACHINE + _initialFieldOfView = _targetCamera.m_Lens.FieldOfView; + #elif MM_CINEMACHINE3 + _initialFieldOfView = _targetCamera.Lens.FieldOfView; + #endif + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMCameraFieldOfViewShakeEvent(AnimationCurve distortionCurve, float duration, float remapMin, float remapMax, bool relativeDistortion = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + if (!Interruptible && Shaking) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeFieldOfView = ShakeFieldOfView; + _originalRemapFieldOfViewZero = RemapFieldOfViewZero; + _originalRemapFieldOfViewOne = RemapFieldOfViewOne; + _originalRelativeFieldOfView = RelativeFieldOfView; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeFieldOfView = distortionCurve; + RemapFieldOfViewZero = remapMin * feedbacksIntensity; + RemapFieldOfViewOne = remapMax * feedbacksIntensity; + RelativeFieldOfView = relativeDistortion; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + SetFieldOfView(_initialFieldOfView); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeFieldOfView = _originalShakeFieldOfView; + RemapFieldOfViewZero = _originalRemapFieldOfViewZero; + RemapFieldOfViewOne = _originalRemapFieldOfViewOne; + RelativeFieldOfView = _originalRelativeFieldOfView; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMCameraFieldOfViewShakeEvent.Register(OnMMCameraFieldOfViewShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMCameraFieldOfViewShakeEvent.Unregister(OnMMCameraFieldOfViewShakeEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFieldOfViewShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFieldOfViewShaker.cs.meta new file mode 100644 index 0000000..62e11d4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFieldOfViewShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d68394ff0deaba948873307b5fe5a801 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFreeLookZoom.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFreeLookZoom.cs new file mode 100644 index 0000000..0dc9ee1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFreeLookZoom.cs @@ -0,0 +1,257 @@ +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This class will allow you to trigger zooms on your cinemachine camera by sending MMCameraZoomEvents from any other class + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Cinemachine/MMCinemachineFreeLookZoom")] + #if MM_CINEMACHINE + [RequireComponent(typeof(Cinemachine.CinemachineFreeLook))] + #elif MM_CINEMACHINE3 + [RequireComponent(typeof(CinemachineCamera))] + #endif + public class MMCinemachineFreeLookZoom : MonoBehaviour + { + [Header("Channel")] + [MMFInspectorGroup("Shaker Settings", true, 3)] + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + [Header("Transition Speed")] + /// the animation curve to apply to the zoom transition + [Tooltip("the animation curve to apply to the zoom transition")] + public MMTweenType ZoomTween = new MMTweenType( new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f))); + + [Header("Test Zoom")] + /// the mode to apply the zoom in when using the test button in the inspector + [Tooltip("the mode to apply the zoom in when using the test button in the inspector")] + public MMCameraZoomModes TestMode; + /// the target field of view to apply the zoom in when using the test button in the inspector + [Tooltip("the target field of view to apply the zoom in when using the test button in the inspector")] + public float TestFieldOfView = 30f; + /// the transition duration to apply the zoom in when using the test button in the inspector + [Tooltip("the transition duration to apply the zoom in when using the test button in the inspector")] + public float TestTransitionDuration = 0.1f; + /// the duration to apply the zoom in when using the test button in the inspector + [Tooltip("the duration to apply the zoom in when using the test button in the inspector")] + public float TestDuration = 0.05f; + + [MMFInspectorButton("TestZoom")] + /// an inspector button to test the zoom in play mode + public bool TestZoomButton; + + public virtual float GetTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + public virtual TimescaleModes TimescaleMode { get; set; } + + #if MM_CINEMACHINE + protected Cinemachine.CinemachineFreeLook _freeLookCamera; + #elif MM_CINEMACHINE3 + protected CinemachineCamera _freeLookCamera; + #endif + protected float _initialFieldOfView; + protected MMCameraZoomModes _mode; + protected bool _zooming = false; + protected float _startFieldOfView; + protected float _transitionDuration; + protected float _duration; + protected float _targetFieldOfView; + protected float _delta = 0f; + protected int _direction = 1; + protected float _reachedDestinationTimestamp; + protected bool _destinationReached = false; + protected float _elapsedTime = 0f; + protected float _zoomStartedAt = 0f; + + /// + /// On Awake we grab our virtual camera + /// + protected virtual void Awake() + { + #if MM_CINEMACHINE + _freeLookCamera = this.gameObject.GetComponent(); + _initialFieldOfView = _freeLookCamera.m_Lens.FieldOfView; + #elif MM_CINEMACHINE3 + _freeLookCamera = this.gameObject.GetComponent(); + _initialFieldOfView = _freeLookCamera.Lens.FieldOfView; + #endif + } + + /// + /// On Update if we're zooming we modify our field of view accordingly + /// + protected virtual void Update() + { + if (!_zooming) + { + return; + } + + _elapsedTime = GetTime() - _zoomStartedAt; + if (_elapsedTime <= _transitionDuration) + { + float t = MMMaths.Remap(_elapsedTime, 0f, _transitionDuration, 0f, 1f); + #if MM_CINEMACHINE + _freeLookCamera.m_Lens.FieldOfView = Mathf.LerpUnclamped(_startFieldOfView, _targetFieldOfView, ZoomTween.Evaluate(t)); + #elif MM_CINEMACHINE3 + _freeLookCamera.Lens.FieldOfView = Mathf.LerpUnclamped(_startFieldOfView, _targetFieldOfView, ZoomTween.Evaluate(t)); + #endif + } + else + { + if (!_destinationReached) + { + _reachedDestinationTimestamp = GetTime(); + _destinationReached = true; + } + if ((_mode == MMCameraZoomModes.For) && (_direction == 1)) + { + if (GetTime() - _reachedDestinationTimestamp > _duration) + { + _direction = -1; + _zoomStartedAt = GetTime(); + _startFieldOfView = _targetFieldOfView; + _targetFieldOfView = _initialFieldOfView; + } + } + else + { + _zooming = false; + } + } + } + + /// + /// A method that triggers the zoom, ideally only to be called via an event, but public for convenience + /// + /// + /// + /// + /// + public virtual void Zoom(MMCameraZoomModes mode, float newFieldOfView, float transitionDuration, + float duration, bool relative = false, MMTweenType tweenType = null) + { + if (_zooming) + { + return; + } + + _zooming = true; + _elapsedTime = 0f; + _mode = mode; + + #if MM_CINEMACHINE + _startFieldOfView = _freeLookCamera.m_Lens.FieldOfView; + #elif MM_CINEMACHINE3 + _startFieldOfView = _freeLookCamera.Lens.FieldOfView; + #endif + + _transitionDuration = transitionDuration; + _duration = duration; + _transitionDuration = transitionDuration; + _direction = 1; + _destinationReached = false; + _zoomStartedAt = GetTime(); + + if (tweenType != null) + { + ZoomTween = tweenType; + } + + switch (mode) + { + case MMCameraZoomModes.For: + _targetFieldOfView = newFieldOfView; + break; + + case MMCameraZoomModes.Set: + _targetFieldOfView = newFieldOfView; + break; + + case MMCameraZoomModes.Reset: + _targetFieldOfView = _initialFieldOfView; + break; + } + + if (relative) + { + _targetFieldOfView += _initialFieldOfView; + } + + } + + /// + /// The method used by the test button to trigger a test zoom + /// + protected virtual void TestZoom() + { + Zoom(TestMode, TestFieldOfView, TestTransitionDuration, TestDuration); + } + + /// + /// When we get an MMCameraZoomEvent we call our zoom method + /// + /// + public virtual void OnCameraZoomEvent(MMCameraZoomModes mode, float newFieldOfView, float transitionDuration, float duration, + MMChannelData channelData, bool useUnscaledTime, bool stop = false, bool relative = false, bool restore = false, MMTweenType tweenType = null) + { + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return; + } + if (stop) + { + _zooming = false; + return; + } + if (restore) + { + #if MM_CINEMACHINE + _freeLookCamera.m_Lens.FieldOfView = _initialFieldOfView; + #elif MM_CINEMACHINE3 + _freeLookCamera.Lens.FieldOfView = _initialFieldOfView; + #endif + return; + } + this.Zoom(mode, newFieldOfView, transitionDuration, duration, relative, tweenType); + } + + /// + /// Starts listening for MMCameraZoomEvents + /// + protected virtual void OnEnable() + { + MMCameraZoomEvent.Register(OnCameraZoomEvent); + } + + /// + /// Stops listening for MMCameraZoomEvents + /// + protected virtual void OnDisable() + { + MMCameraZoomEvent.Unregister(OnCameraZoomEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFreeLookZoom.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFreeLookZoom.cs.meta new file mode 100644 index 0000000..1037910 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineFreeLookZoom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5c6086564eb2a44db13fc3cd3a66644 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineOrthographicSizeShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineOrthographicSizeShaker.cs new file mode 100644 index 0000000..7dc0858 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineOrthographicSizeShaker.cs @@ -0,0 +1,200 @@ +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this to a Cinemachine virtual camera and it'll let you control its orthographic size over time, can be piloted by a MMFeedbackCameraOrthographicSize + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Cinemachine/MMCinemachineOrthographicSizeShaker")] + #if MM_CINEMACHINE + [RequireComponent(typeof(CinemachineVirtualCamera))] + #elif MM_CINEMACHINE3 + [RequireComponent(typeof(CinemachineCamera))] + #endif + public class MMCinemachineOrthographicSizeShaker : MMShaker + { + [MMInspectorGroup("Orthographic Size", true, 43)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeOrthographicSize = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeOrthographicSize = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapOrthographicSizeZero = 5f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapOrthographicSizeOne = 10f; + + #if MM_CINEMACHINE + protected CinemachineVirtualCamera _targetCamera; + #elif MM_CINEMACHINE3 + protected CinemachineCamera _targetCamera; + #endif + protected float _initialOrthographicSize; + protected float _originalShakeDuration; + protected bool _originalRelativeOrthographicSize; + protected AnimationCurve _originalShakeOrthographicSize; + protected float _originalRemapOrthographicSizeZero; + protected float _originalRemapOrthographicSizeOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + #if MM_CINEMACHINE + _targetCamera = this.gameObject.GetComponent(); + #elif MM_CINEMACHINE3 + _targetCamera = this.gameObject.GetComponent(); + #endif + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.5f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newOrthographicSize = ShakeFloat(ShakeOrthographicSize, RemapOrthographicSizeZero, RemapOrthographicSizeOne, RelativeOrthographicSize, _initialOrthographicSize); + #if MM_CINEMACHINE + _targetCamera.m_Lens.OrthographicSize = newOrthographicSize; + #elif MM_CINEMACHINE3 + _targetCamera.Lens.OrthographicSize = newOrthographicSize; + #endif + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + #if MM_CINEMACHINE + _initialOrthographicSize = _targetCamera.m_Lens.OrthographicSize; + #elif MM_CINEMACHINE3 + _initialOrthographicSize = _targetCamera.Lens.OrthographicSize; + #endif + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMCameraOrthographicSizeShakeEvent(AnimationCurve distortionCurve, float duration, float remapMin, float remapMax, bool relativeDistortion = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + if (!Interruptible && Shaking) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeOrthographicSize = ShakeOrthographicSize; + _originalRemapOrthographicSizeZero = RemapOrthographicSizeZero; + _originalRemapOrthographicSizeOne = RemapOrthographicSizeOne; + _originalRelativeOrthographicSize = RelativeOrthographicSize; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeOrthographicSize = distortionCurve; + RemapOrthographicSizeZero = remapMin * feedbacksIntensity; + RemapOrthographicSizeOne = remapMax * feedbacksIntensity; + RelativeOrthographicSize = relativeDistortion; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + #if MM_CINEMACHINE + _targetCamera.m_Lens.OrthographicSize = _initialOrthographicSize; + #elif MM_CINEMACHINE3 + _targetCamera.Lens.OrthographicSize = _initialOrthographicSize; + #endif + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeOrthographicSize = _originalShakeOrthographicSize; + RemapOrthographicSizeZero = _originalRemapOrthographicSizeZero; + RemapOrthographicSizeOne = _originalRemapOrthographicSizeOne; + RelativeOrthographicSize = _originalRelativeOrthographicSize; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMCameraOrthographicSizeShakeEvent.Register(OnMMCameraOrthographicSizeShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMCameraOrthographicSizeShakeEvent.Unregister(OnMMCameraOrthographicSizeShakeEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineOrthographicSizeShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineOrthographicSizeShaker.cs.meta new file mode 100644 index 0000000..cd1cce1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineOrthographicSizeShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0aded04d7fa45744fb33cc0a43b0d6ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityBrainListener.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityBrainListener.cs new file mode 100644 index 0000000..b6a20b3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityBrainListener.cs @@ -0,0 +1,131 @@ +using System.Collections; +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using MoreMountains.Feedbacks; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this to a Cinemachine brain and it'll be able to accept custom blend transitions (used with MMFeedbackCinemachineTransition) + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Cinemachine/MMCinemachinePriorityBrainListener")] + #if MM_CINEMACHINE || MM_CINEMACHINE3 + [RequireComponent(typeof(CinemachineBrain))] + #endif + public class MMCinemachinePriorityBrainListener : MonoBehaviour + { + + [HideInInspector] + public TimescaleModes TimescaleMode = TimescaleModes.Scaled; + + + public virtual float GetTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + protected CinemachineBrain _brain; + protected CinemachineBlendDefinition _initialDefinition; + #endif + protected Coroutine _coroutine; + + /// + /// On Awake we grab our brain + /// + protected virtual void Awake() + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + _brain = this.gameObject.GetComponent(); + #endif + } + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + /// + /// When getting an event we change our default transition if needed + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMCinemachinePriorityEvent(MMChannelData channelData, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition, TimescaleModes timescaleMode, bool restore = false) + { + if (forceTransition) + { + if (_coroutine != null) + { + StopCoroutine(_coroutine); + } + else + { + #if MM_CINEMACHINE + _initialDefinition = _brain.m_DefaultBlend; + #elif MM_CINEMACHINE3 + _initialDefinition = _brain.DefaultBlend; + #endif + } + #if MM_CINEMACHINE + _brain.m_DefaultBlend = blendDefinition; + #elif MM_CINEMACHINE3 + _brain.DefaultBlend = blendDefinition; + #endif + TimescaleMode = timescaleMode; + #if MM_CINEMACHINE + _coroutine = StartCoroutine(ResetBlendDefinition(blendDefinition.m_Time)); + #elif MM_CINEMACHINE3 + _coroutine = StartCoroutine(ResetBlendDefinition(blendDefinition.Time)); + #endif + } + } + #endif + + /// + /// a coroutine used to reset the default transition to its initial value + /// + /// + /// + protected virtual IEnumerator ResetBlendDefinition(float delay) + { + for (float timer = 0; timer < delay; timer += GetDeltaTime()) + { + yield return null; + } + #if MM_CINEMACHINE + _brain.m_DefaultBlend = _initialDefinition; + #elif MM_CINEMACHINE3 + _brain.DefaultBlend = _initialDefinition; + #endif + _coroutine = null; + } + + /// + /// On enable we start listening for events + /// + protected virtual void OnEnable() + { + _coroutine = null; + #if MM_CINEMACHINE || MM_CINEMACHINE3 + MMCinemachinePriorityEvent.Register(OnMMCinemachinePriorityEvent); + #endif + } + + /// + /// Stops listening for events + /// + protected virtual void OnDisable() + { + if (_coroutine != null) + { + StopCoroutine(_coroutine); + } + _coroutine = null; + #if MM_CINEMACHINE || MM_CINEMACHINE3 + MMCinemachinePriorityEvent.Unregister(OnMMCinemachinePriorityEvent); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityBrainListener.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityBrainListener.cs.meta new file mode 100644 index 0000000..e45f96d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityBrainListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2436c2ba147129746badf6cfa2ee2d1b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityListener.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityListener.cs new file mode 100644 index 0000000..b837f1f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityListener.cs @@ -0,0 +1,150 @@ +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using MoreMountains.Feedbacks; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this to a Cinemachine virtual camera and it'll be able to listen to MMCinemachinePriorityEvent, usually triggered by a MMFeedbackCinemachineTransition + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Cinemachine/MMCinemachinePriorityListener")] + #if MM_CINEMACHINE || MM_CINEMACHINE3 + [RequireComponent(typeof(CinemachineVirtualCameraBase))] + #endif + public class MMCinemachinePriorityListener : MonoBehaviour + { + + [HideInInspector] + public TimescaleModes TimescaleMode = TimescaleModes.Scaled; + + + public virtual float GetTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + [Header("Priority Listener")] + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + protected CinemachineVirtualCameraBase _camera; + protected int _initialPriority; + #endif + + /// + /// On Awake we store our virtual camera + /// + protected virtual void Awake() + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + _camera = this.gameObject.GetComponent(); + #endif + #if MM_CINEMACHINE + _initialPriority = _camera.Priority; + #elif MM_CINEMACHINE3 + _initialPriority = _camera.Priority.Value; + #endif + } + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + /// + /// When we get an event we change our priorities if needed + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMCinemachinePriorityEvent(MMChannelData channelData, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition, TimescaleModes timescaleMode, bool restore = false) + { + TimescaleMode = timescaleMode; + if (MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + if (restore) + { + SetPriority(_initialPriority); + return; + } + SetPriority(newPriority); + } + else + { + if (forceMaxPriority) + { + if (restore) + { + SetPriority(_initialPriority); + return; + } + SetPriority(0); + } + } + } + #endif + + protected virtual void SetPriority(int newPriority) + { + #if MM_CINEMACHINE + _camera.Priority = newPriority; + #elif MM_CINEMACHINE3 + PrioritySettings prioritySettings = _camera.Priority; + prioritySettings.Value = newPriority; + _camera.Priority = prioritySettings; + #endif + } + + /// + /// On enable we start listening for events + /// + protected virtual void OnEnable() + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + MMCinemachinePriorityEvent.Register(OnMMCinemachinePriorityEvent); + #endif + } + + /// + /// Stops listening for events + /// + protected virtual void OnDisable() + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + MMCinemachinePriorityEvent.Unregister(OnMMCinemachinePriorityEvent); + #endif + } + } + + /// + /// An event used to pilot priorities on cinemachine virtual cameras and brain transitions + /// + public struct MMCinemachinePriorityEvent + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(MMChannelData channelData, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition, TimescaleModes timescaleMode, bool restore = false); + static public void Trigger(MMChannelData channelData, bool forceMaxPriority, int newPriority, bool forceTransition, CinemachineBlendDefinition blendDefinition, bool resetValuesAfterTransition, TimescaleModes timescaleMode, bool restore = false) + { + OnEvent?.Invoke(channelData, forceMaxPriority, newPriority, forceTransition, blendDefinition, resetValuesAfterTransition, timescaleMode, restore); + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityListener.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityListener.cs.meta new file mode 100644 index 0000000..6e41f9f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachinePriorityListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8650a79a9f5e38449718559d1d6a2f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineZoom.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineZoom.cs new file mode 100644 index 0000000..331cfe1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineZoom.cs @@ -0,0 +1,254 @@ +using UnityEngine; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This class will allow you to trigger zooms on your cinemachine camera by sending MMCameraZoomEvents from any other class + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Cinemachine/MMCinemachineZoom")] + #if MM_CINEMACHINE + [RequireComponent(typeof(Cinemachine.CinemachineVirtualCamera))] + #elif MM_CINEMACHINE3 + [RequireComponent(typeof(CinemachineCamera))] + #endif + public class MMCinemachineZoom : MonoBehaviour + { + [Header("Channel")] + [MMFInspectorGroup("Shaker Settings", true, 3)] + /// whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. + /// MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable + [Tooltip("whether to listen on a channel defined by an int or by a MMChannel scriptable object. Ints are simple to setup but can get messy and make it harder to remember what int corresponds to what. " + + "MMChannel scriptable objects require you to create them in advance, but come with a readable name and are more scalable")] + public MMChannelModes ChannelMode = MMChannelModes.Int; + /// the channel to listen to - has to match the one on the feedback + [Tooltip("the channel to listen to - has to match the one on the feedback")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.Int)] + public int Channel = 0; + /// the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, + /// right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name + [Tooltip("the MMChannel definition asset to use to listen for events. The feedbacks targeting this shaker will have to reference that same MMChannel definition to receive events - to create a MMChannel, " + + "right click anywhere in your project (usually in a Data folder) and go MoreMountains > MMChannel, then name it with some unique name")] + [MMFEnumCondition("ChannelMode", (int)MMChannelModes.MMChannel)] + public MMChannel MMChannelDefinition = null; + + [Header("Transition Speed")] + /// the animation curve to apply to the zoom transition + [Tooltip("the animation curve to apply to the zoom transition")] + public MMTweenType ZoomTween = new MMTweenType( new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f))); + + [Header("Test Zoom")] + /// the mode to apply the zoom in when using the test button in the inspector + [Tooltip("the mode to apply the zoom in when using the test button in the inspector")] + public MMCameraZoomModes TestMode; + /// the target field of view to apply the zoom in when using the test button in the inspector + [Tooltip("the target field of view to apply the zoom in when using the test button in the inspector")] + public float TestFieldOfView = 30f; + /// the transition duration to apply the zoom in when using the test button in the inspector + [Tooltip("the transition duration to apply the zoom in when using the test button in the inspector")] + public float TestTransitionDuration = 0.1f; + /// the duration to apply the zoom in when using the test button in the inspector + [Tooltip("the duration to apply the zoom in when using the test button in the inspector")] + public float TestDuration = 0.05f; + + [MMFInspectorButton("TestZoom")] + /// an inspector button to test the zoom in play mode + public bool TestZoomButton; + + public virtual float GetTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.time : Time.unscaledTime; } + public virtual float GetDeltaTime() { return (TimescaleMode == TimescaleModes.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } + + public virtual TimescaleModes TimescaleMode { get; set; } + + #if MM_CINEMACHINE + protected Cinemachine.CinemachineVirtualCamera _virtualCamera; + #elif MM_CINEMACHINE3 + protected CinemachineCamera _virtualCamera; + #endif + protected float _initialFieldOfView; + protected MMCameraZoomModes _mode; + protected bool _zooming = false; + protected float _startFieldOfView; + protected float _transitionDuration; + protected float _duration; + protected float _targetFieldOfView; + protected float _elapsedTime = 0f; + protected int _direction = 1; + protected float _reachedDestinationTimestamp; + protected bool _destinationReached = false; + protected float _zoomStartedAt = 0f; + + /// + /// On Awake we grab our virtual camera + /// + protected virtual void Awake() + { + #if MM_CINEMACHINE + _virtualCamera = this.gameObject.GetComponent(); + _initialFieldOfView = _virtualCamera.m_Lens.FieldOfView; + #elif MM_CINEMACHINE3 + _virtualCamera = this.gameObject.GetComponent(); + _initialFieldOfView = _virtualCamera.Lens.FieldOfView; + #endif + } + + /// + /// On Update if we're zooming we modify our field of view accordingly + /// + protected virtual void Update() + { + if (!_zooming) + { + return; + } + + _elapsedTime = GetTime() - _zoomStartedAt; + if (_elapsedTime <= _transitionDuration) + { + float t = MMMaths.Remap(_elapsedTime, 0f, _transitionDuration, 0f, 1f); + #if MM_CINEMACHINE + _virtualCamera.m_Lens.FieldOfView = Mathf.LerpUnclamped(_startFieldOfView, _targetFieldOfView, ZoomTween.Evaluate(t)); + #elif MM_CINEMACHINE3 + _virtualCamera.Lens.FieldOfView = Mathf.LerpUnclamped(_startFieldOfView, _targetFieldOfView, ZoomTween.Evaluate(t)); + #endif + } + else + { + if (!_destinationReached) + { + _reachedDestinationTimestamp = GetTime(); + _destinationReached = true; + } + if ((_mode == MMCameraZoomModes.For) && (_direction == 1)) + { + if (GetTime() - _reachedDestinationTimestamp > _duration) + { + _direction = -1; + _zoomStartedAt = GetTime(); + _startFieldOfView = _targetFieldOfView; + _targetFieldOfView = _initialFieldOfView; + } + } + else + { + _zooming = false; + } + } + } + + /// + /// A method that triggers the zoom, ideally only to be called via an event, but public for convenience + /// + /// + /// + /// + /// + public virtual void Zoom(MMCameraZoomModes mode, float newFieldOfView, float transitionDuration, float duration, bool useUnscaledTime, bool relative = false, MMTweenType tweenType = null) + { + if (_zooming) + { + return; + } + + _zooming = true; + _elapsedTime = 0f; + _mode = mode; + + TimescaleMode = useUnscaledTime ? TimescaleModes.Unscaled : TimescaleModes.Scaled; + #if MM_CINEMACHINE + _startFieldOfView = _virtualCamera.m_Lens.FieldOfView; + #elif MM_CINEMACHINE3 + _startFieldOfView = _virtualCamera.Lens.FieldOfView; + #endif + _transitionDuration = transitionDuration; + _duration = duration; + _transitionDuration = transitionDuration; + _direction = 1; + _destinationReached = false; + _zoomStartedAt = GetTime(); + + if (tweenType != null) + { + ZoomTween = tweenType; + } + + switch (mode) + { + case MMCameraZoomModes.For: + _targetFieldOfView = newFieldOfView; + break; + + case MMCameraZoomModes.Set: + _targetFieldOfView = newFieldOfView; + break; + + case MMCameraZoomModes.Reset: + _targetFieldOfView = _initialFieldOfView; + break; + } + + if (relative) + { + _targetFieldOfView += _initialFieldOfView; + } + } + + /// + /// The method used by the test button to trigger a test zoom + /// + protected virtual void TestZoom() + { + Zoom(TestMode, TestFieldOfView, TestTransitionDuration, TestDuration, false); + } + + /// + /// When we get an MMCameraZoomEvent we call our zoom method + /// + /// + public virtual void OnCameraZoomEvent(MMCameraZoomModes mode, float newFieldOfView, float transitionDuration, float duration, MMChannelData channelData, + bool useUnscaledTime, bool stop = false, bool relative = false, bool restore = false, MMTweenType tweenType = null) + { + if (!MMChannel.Match(channelData, ChannelMode, Channel, MMChannelDefinition)) + { + return; + } + if (stop) + { + _zooming = false; + return; + } + if (restore) + { + #if MM_CINEMACHINE + _virtualCamera.m_Lens.FieldOfView = _initialFieldOfView; + #elif MM_CINEMACHINE3 + _virtualCamera.Lens.FieldOfView = _initialFieldOfView; + #endif + return; + } + this.Zoom(mode, newFieldOfView, transitionDuration, duration, useUnscaledTime, relative, tweenType); + } + + /// + /// Starts listening for MMCameraZoomEvents + /// + protected virtual void OnEnable() + { + MMCameraZoomEvent.Register(OnCameraZoomEvent); + } + + /// + /// Stops listening for MMCameraZoomEvents + /// + protected virtual void OnDisable() + { + MMCameraZoomEvent.Unregister(OnCameraZoomEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineZoom.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineZoom.cs.meta new file mode 100644 index 0000000..ad8074d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Shakers/MMCinemachineZoom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51662a222e352d74a8ad12e5843f7501 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP.meta new file mode 100644 index 0000000..cac83a4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b759321662343a46b31c4fe585dbf02 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks.meta new file mode 100644 index 0000000..0df9eb5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7dab5186b8781443af2d704b2a93808 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Bloom_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Bloom_HDRP.cs new file mode 100644 index 0000000..a94688b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Bloom_HDRP.cs @@ -0,0 +1,132 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control bloom intensity and threshold over time. It requires you have in your scene an object with a Volume with Bloom active, and a MMBloomShaker_HDRP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control bloom intensity and threshold over time. It requires you have in your scene an object with a Volume " + + "with Bloom active, and a MMBloomShaker_HDRP component.")] + #if MM_HDRP + [FeedbackPath("PostProcess/Bloom HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + public class MMF_Bloom_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Bloom", true, 3)] + /// the duration of the feedback, in seconds + [Tooltip("the duration of the feedback, in seconds")] + public float ShakeDuration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeValues = true; + + [MMFInspectorGroup("Intensity", true, 4)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapIntensityOne = 1f; + + [MMFInspectorGroup("Threshold", true, 5)] + /// the curve to animate the threshold on + [Tooltip("the curve to animate the threshold on")] + public AnimationCurve ShakeThreshold = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapThresholdZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapThresholdOne = 0f; + + /// + /// Triggers a bloom shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float attenuation = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + attenuation = ComputeIntensity(attenuation, position); + + MMBloomShakeEvent_HDRP.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, attenuation, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMBloomShakeEvent_HDRP.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMBloomShakeEvent_HDRP.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "Bloom"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Bloom_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Bloom_HDRP.cs.meta new file mode 100644 index 0000000..bde8dc9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Bloom_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 979e16096485bd645b1d47e00aabc982 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChannelMixer_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChannelMixer_HDRP.cs new file mode 100644 index 0000000..68147f0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChannelMixer_HDRP.cs @@ -0,0 +1,157 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control channel mixer's red, green and blue over time. + /// It requires you have in your scene an object with a Volume + /// with Channel Mixer active, and a MMChannelMixerShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Channel Mixer HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control channel mixer's red, green and blue over time." + + "It requires you have in your scene an object with a Volume" + + "with Channel Mixer active, and a MM Channel Mixer HDRP component.")] + public class MMF_ChannelMixer_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Color Grading", true, 10)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 1f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Red", true, 13)] + /// the curve used to animate the red value on + [Tooltip("the curve used to animate the red value on")] + public AnimationCurve ShakeRed = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapRedZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapRedOne = 200f; + + [MMFInspectorGroup("Green", true, 12)] + /// the curve used to animate the green value on + [Tooltip("the curve used to animate the green value on")] + public AnimationCurve ShakeGreen = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapGreenZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapGreenOne = 200f; + + [MMFInspectorGroup("Blue", true, 11)] + /// the curve used to animate the blue value on + [Tooltip("the curve used to animate the blue value on")] + public AnimationCurve ShakeBlue = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapBlueZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapBlueOne = 200f; + + /// + /// Triggers a color adjustments shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMChannelMixerShakeEvent_HDRP.Trigger(ShakeRed, RemapRedZero, RemapRedOne, + ShakeGreen, RemapGreenZero, RemapGreenOne, + ShakeBlue, RemapBlueZero, RemapBlueOne, + FeedbackDuration, + RelativeIntensity, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMChannelMixerShakeEvent_HDRP.Trigger(ShakeRed, RemapRedZero, RemapRedOne, + ShakeGreen, RemapGreenZero, RemapGreenOne, + ShakeBlue, RemapBlueZero, RemapBlueOne, + FeedbackDuration, + RelativeIntensity, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMChannelMixerShakeEvent_HDRP.Trigger(ShakeRed, RemapRedZero, RemapRedOne, + ShakeGreen, RemapGreenZero, RemapGreenOne, + ShakeBlue, RemapBlueZero, RemapBlueOne, + FeedbackDuration, + RelativeIntensity, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "Channel Mixer"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChannelMixer_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChannelMixer_HDRP.cs.meta new file mode 100644 index 0000000..03f7924 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChannelMixer_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a8a0c934ca68d7418c2a935f4d8f7c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChromaticAberration_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChromaticAberration_HDRP.cs new file mode 100644 index 0000000..cf1cd3a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChromaticAberration_HDRP.cs @@ -0,0 +1,124 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control chromatic aberration intensity over time. It requires you have in your scene an object with a Volume + /// with HDRP Chromatic Aberration active, and a MMChromaticAberrationShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Chromatic Aberration HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control chromatic aberration intensity over time. It requires you have in your scene an object with a Volume " + + "with Chromatic Aberration active, and a MMChromaticAberrationShaker_HDRP component.")] + public class MMF_ChromaticAberration_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Chromatic Aberration", true, 10)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + [MMFInspectorGroup("Intensity", true, 11)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the multiplier to apply to the intensity curve + [Tooltip("the multiplier to apply to the intensity curve")] + [Range(0f, 1f)] + public float Amplitude = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + /// + /// Triggers a chromatic aberration shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMChromaticAberrationShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMChromaticAberrationShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMChromaticAberrationShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "ChromaticAberration"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChromaticAberration_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChromaticAberration_HDRP.cs.meta new file mode 100644 index 0000000..d8bffa5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ChromaticAberration_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3631f6ce0e380d74295fbb1d1f9ebbb8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ColorAdjustments_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ColorAdjustments_HDRP.cs new file mode 100644 index 0000000..cfbff51 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ColorAdjustments_HDRP.cs @@ -0,0 +1,202 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control color adjustments' post exposure, hue shift, saturation and contrast over time. + /// It requires you have in your scene an object with a Volume + /// with Color Adjustments active, and a MMColorAdjustmentsShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Color Adjustments HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control color adjustments' post exposure, hue shift, saturation and contrast over time. " + + "It requires you have in your scene an object with a Volume " + + "with Color Adjustments active, and a MMColorAdjustmentsShaker_HDRP component.")] + public class MMF_ColorAdjustments_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Color Grading", true, 16)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 1f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Post Exposure", true, 15)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakePostExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapPostExposureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapPostExposureOne = 1f; + + [MMFInspectorGroup("Hue Shift", true, 14)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeHueShift = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-180f, 180f)] + public float RemapHueShiftZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-180f, 180f)] + public float RemapHueShiftOne = 180f; + + [MMFInspectorGroup("Saturation", true, 13)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeSaturation = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapSaturationZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapSaturationOne = 100f; + + [MMFInspectorGroup("Contrast", true, 12)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeContrast = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapContrastZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapContrastOne = 100f; + + [Header("Color Filter")] + /// the selected color filter mode : + /// None : nothing will happen, + /// gradient : evaluates the color over time on that gradient, from left to right, + /// interpolate : lerps from the current color to the destination one + [Tooltip("the selected color filter mode :" + + "None : nothing will happen," + + "gradient : evaluates the color over time on that gradient, from left to right," + + "interpolate : lerps from the current color to the destination one ")] + public MMColorAdjustmentsShaker_HDRP.ColorFilterModes ColorFilterMode = MMColorAdjustmentsShaker_HDRP.ColorFilterModes.None; + /// the gradient to use to animate the color filter over time + [Tooltip("the gradient to use to animate the color filter over time")] + [MMFEnumCondition("ColorFilterMode", (int)MMColorAdjustmentsShaker_HDRP.ColorFilterModes.Gradient)] + [GradientUsage(true)] + public Gradient ColorFilterGradient; + /// the destination color when in interpolate mode + [Tooltip("the destination color when in interpolate mode")] + [MMFEnumCondition("ColorFilterMode", (int) MMColorAdjustmentsShaker_HDRP.ColorFilterModes.Interpolate)] + public Color ColorFilterDestination = Color.yellow; + /// the curve to use when interpolating towards the destination color + [Tooltip("the curve to use when interpolating towards the destination color")] + [MMFEnumCondition("ColorFilterMode", (int) MMColorAdjustmentsShaker_HDRP.ColorFilterModes.Interpolate)] + public AnimationCurve ColorFilterCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + + /// + /// Triggers a color adjustments shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMColorAdjustmentsShakeEvent_HDRP.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ColorFilterMode, ColorFilterGradient, ColorFilterDestination, ColorFilterCurve, + FeedbackDuration, + RelativeIntensity, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMColorAdjustmentsShakeEvent_HDRP.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ColorFilterMode, ColorFilterGradient, ColorFilterDestination, ColorFilterCurve, + FeedbackDuration, + RelativeIntensity, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMColorAdjustmentsShakeEvent_HDRP.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ColorFilterMode, ColorFilterGradient, ColorFilterDestination, ColorFilterCurve, + FeedbackDuration, + RelativeIntensity, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "ColorAdjustments"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ColorAdjustments_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ColorAdjustments_HDRP.cs.meta new file mode 100644 index 0000000..6b9bd41 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_ColorAdjustments_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e5152d83c531f540987d09bea4675bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_DepthOfField_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_DepthOfField_HDRP.cs new file mode 100644 index 0000000..569a700 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_DepthOfField_HDRP.cs @@ -0,0 +1,199 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control HDRP Depth of Field focus distance or near/far ranges over time. + /// It requires you have in your scene an object with a Volume + /// with Depth of Field active, and a MMDepthOfFieldShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Depth of Field HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control HDRP Depth of Field focus distance or near/far ranges over time." + + "It requires you have in your scene an object with a Volume " + + "with Depth of Field active, and a MMDepthOfFieldShaker_HDRP component.")] + public class MMF_DepthOfField_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Depth of Field", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Focus Distance", true, 53)] + /// whether or not to animate the focus distance + [Tooltip("whether or not to animate the focus distance")] + public bool AnimateFocusDistance = true; + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + [MMFCondition("AnimateFocusDistance", true)] + public AnimationCurve ShakeFocusDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFCondition("AnimateFocusDistance", true)] + public float RemapFocusDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFCondition("AnimateFocusDistance", true)] + public float RemapFocusDistanceOne = 3f; + + + [MMFInspectorGroup("Near Range", true, 52)] + + [Header("Near Range Start")] + /// whether or not to animate the near range start + [Tooltip("whether or not to animate the near range start")] + public bool AnimateNearRangeStart = false; + /// the curve used to animate the near range start on + [Tooltip("the curve used to animate the near range start on")] + [MMFCondition("AnimateNearRangeStart", true)] + public AnimationCurve ShakeNearRangeStart = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFCondition("AnimateNearRangeStart", true)] + public float RemapNearRangeStartZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFCondition("AnimateNearRangeStart", true)] + public float RemapNearRangeStartOne = 3f; + + [Header("Near Range End")] + /// whether or not to animate the near range end + [Tooltip("whether or not to animate the near range end")] + public bool AnimateNearRangeEnd = false; + /// the curve used to animate the near range end on + [Tooltip("the curve used to animate the near range end on")] + [MMFCondition("AnimateNearRangeEnd", true)] + public AnimationCurve ShakeNearRangeEnd = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFCondition("AnimateNearRangeEnd", true)] + public float RemapNearRangeEndZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFCondition("AnimateNearRangeEnd", true)] + public float RemapNearRangeEndOne = 3f; + + [MMFInspectorGroup("Far Range", true, 51)] + + [Header("Far Range Start")] + /// whether or not to animate the far range start + [Tooltip("whether or not to animate the far range start")] + public bool AnimateFarRangeStart = false; + /// the curve used to animate the far range start on + [Tooltip("the curve used to animate the far range start on")] + [MMFCondition("AnimateFarRangeStart", true)] + public AnimationCurve ShakeFarRangeStart = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFCondition("AnimateFarRangeStart", true)] + public float RemapFarRangeStartZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFCondition("AnimateFarRangeStart", true)] + public float RemapFarRangeStartOne = 3f; + + [Header("Far Range End")] + /// whether or not to animate the far range end + [Tooltip("whether or not to animate the far range end")] + public bool AnimateFarRangeEnd = false; + /// the curve used to animate the far range end on + [Tooltip("the curve used to animate the far range end on")] + [MMFCondition("AnimateFarRangeEnd", true)] + public AnimationCurve ShakeFarRangeEnd = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFCondition("AnimateFarRangeEnd", true)] + public float RemapFarRangeEndZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFCondition("AnimateFarRangeEnd", true)] + public float RemapFarRangeEndOne = 3f; + + /// + /// Triggers a vignette shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMDepthOfFieldShakeEvent_HDRP.Trigger(Duration, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, + ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode, false, false, + AnimateFocusDistance, ShakeFocusDistance, RemapFocusDistanceZero, RemapFocusDistanceOne, + AnimateNearRangeStart, ShakeNearRangeStart, RemapNearRangeStartZero, RemapNearRangeStartOne, + AnimateNearRangeEnd, ShakeNearRangeEnd, RemapNearRangeEndZero, RemapNearRangeEndOne, + AnimateFarRangeStart, ShakeFarRangeStart, RemapFarRangeStartZero, RemapFarRangeStartOne, + AnimateFarRangeEnd, ShakeFarRangeEnd,RemapFarRangeEndZero,RemapFarRangeEndOne); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMDepthOfFieldShakeEvent_HDRP.Trigger(Duration, channelData: ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMDepthOfFieldShakeEvent_HDRP.Trigger(Duration, channelData: ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "DepthOfField"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_DepthOfField_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_DepthOfField_HDRP.cs.meta new file mode 100644 index 0000000..c09c640 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_DepthOfField_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7aa06285ee4b40b458022beb52aa9f94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Exposure_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Exposure_HDRP.cs new file mode 100644 index 0000000..a8db3ff --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Exposure_HDRP.cs @@ -0,0 +1,123 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control HDRP exposure intensity over time. + /// It requires you have in your scene an object with a Volume + /// with Exposure active, and a MMExposureShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Exposure HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control Exposure intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with Exposure active, and a MMExposureShaker_HDRP component.")] + public class MMF_Exposure_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Exposure", true, 17)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 18)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve FixedExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFixedExposureZero = 8.5f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFixedExposureOne = 6f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeFixedExposure = false; + + /// + /// Triggers a Exposure shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMExposureShakeEvent_HDRP.Trigger(FixedExposure, FeedbackDuration, RemapFixedExposureZero, RemapFixedExposureOne, RelativeFixedExposure, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMExposureShakeEvent_HDRP.Trigger(FixedExposure, FeedbackDuration, RemapFixedExposureZero, + RemapFixedExposureOne, RelativeFixedExposure, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMExposureShakeEvent_HDRP.Trigger(FixedExposure, FeedbackDuration, RemapFixedExposureZero, + RemapFixedExposureOne, RelativeFixedExposure, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "Exposure"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Exposure_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Exposure_HDRP.cs.meta new file mode 100644 index 0000000..55b8f8e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Exposure_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbc9fda1740ba45499291b2e305fee54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_FilmGrain_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_FilmGrain_HDRP.cs new file mode 100644 index 0000000..3f11f4c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_FilmGrain_HDRP.cs @@ -0,0 +1,122 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control HDRP Film Grain intensity over time. + /// It requires you have in your scene an object with a Volume + /// with Film Grain active, and a MMFilmGrainShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Film Grain HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control Film Grain intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with Film Grain active, and a MMFilmGrainShaker_HDRP component.")] + public class MMF_FilmGrain_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Film Grain", true, 20)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 21)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's zero to + [Tooltip("the value to remap the curve's zero to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's one to + [Tooltip("the value to remap the curve's one to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + /// + /// Triggers a Film Grain shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMFilmGrainShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMFilmGrainShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMFilmGrainShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "FilmGrain"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_FilmGrain_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_FilmGrain_HDRP.cs.meta new file mode 100644 index 0000000..a240660 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_FilmGrain_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1abead95d414bfc41842b81d3822dd9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_LensDistortion_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_LensDistortion_HDRP.cs new file mode 100644 index 0000000..1fa0c04 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_LensDistortion_HDRP.cs @@ -0,0 +1,133 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control HDRP lens distortion intensity over time. + /// It requires you have in your scene an object with a Volume + /// with Lens Distortion active, and a MMLensDistortionShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Lens Distortion HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control HDRP lens distortion intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with Lens Distortion active, and a MMLensDistortionShaker_HDRP component.")] + public class MMF_LensDistortion_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Lens Distortion", true, 22)] + /// the duration of the shake in seconds + [Tooltip("the duration of the shake in seconds")] + public float Duration = 0.8f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 23)] + /// whether or not to add to the initial intensity value + [Tooltip("whether or not to add to the initial intensity value")] + public bool RelativeIntensity = false; + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), + new Keyframe(0.2f, 1), + new Keyframe(0.25f, -1), + new Keyframe(0.35f, 0.7f), + new Keyframe(0.4f, -0.7f), + new Keyframe(0.6f, 0.3f), + new Keyframe(0.65f, -0.3f), + new Keyframe(0.8f, 0.1f), + new Keyframe(0.85f, -0.1f), + new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-1f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-1f, 1f)] + public float RemapIntensityOne = 0.5f; + + /// + /// Triggers a lens distortion shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMLensDistortionShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMLensDistortionShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, + RelativeIntensity, channelData:ChannelData, stop: true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMLensDistortionShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, + RelativeIntensity, channelData:ChannelData, restore: true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "LensDistortion"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_LensDistortion_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_LensDistortion_HDRP.cs.meta new file mode 100644 index 0000000..03451d2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_LensDistortion_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 238ecd560015b8747bc952b63dc334c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_MotionBlur_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_MotionBlur_HDRP.cs new file mode 100644 index 0000000..697567e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_MotionBlur_HDRP.cs @@ -0,0 +1,121 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control HDRP motion blur intensity over time. + /// It requires you have in your scene an object with a Volume + /// with MotionBlur active, and a MMMotionBlurShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Motion Blur HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control motion blur intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with MotionBlur active, and a MMMotionBlurShaker_HDRP component.")] + public class MMF_MotionBlur_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Motion Blur", true, 24)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 25)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to which to remap the curve's zero to + [Tooltip("the value to which to remap the curve's zero to")] + public float RemapIntensityZero = 0f; + /// the value to which to remap the curve's one to + [Tooltip("the value to which to remap the curve's one to")] + public float RemapIntensityOne = 1000f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + /// + /// Triggers a motion blur shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMMotionBlurShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMMotionBlurShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, + RelativeIntensity, channelData:ChannelData, stop: true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMMotionBlurShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, + RelativeIntensity, channelData:ChannelData, restore: true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "MotionBlur"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_MotionBlur_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_MotionBlur_HDRP.cs.meta new file mode 100644 index 0000000..6cab802 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_MotionBlur_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1bc2946b57a0e7f40a9cb297b9f96923 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_PaniniProjection_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_PaniniProjection_HDRP.cs new file mode 100644 index 0000000..51fd5ea --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_PaniniProjection_HDRP.cs @@ -0,0 +1,119 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control Panini Projection distance and crop to fit over time. + /// It requires you have in your scene an object with a Volume with Bloom active, and a MMPaniniProjectionShaker_HDRP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control Panini Projection distance and crop to fit over time. " + + "It requires you have in your scene an object with a Volume " + + "with PaniniProjection active, and a MMPaniniProjectionShaker_HDRP component.")] + #if MM_HDRP + [FeedbackPath("PostProcess/Panini Projection HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + public class MMF_PaniniProjection_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Panini Projection", true, 26)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Distance", true, 27)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeDistance = false; + /// the curve used to animate the distance value on + [Tooltip("the curve used to animate the distance value on")] + public AnimationCurve ShakeDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapDistanceOne = 1f; + + /// + /// Triggers a bloom shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMPaniniProjectionShakeEvent_HDRP.Trigger(ShakeDistance, FeedbackDuration, RemapDistanceZero, RemapDistanceOne, RelativeDistance, intensityMultiplier, ChannelData, + ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMPaniniProjectionShakeEvent_HDRP.Trigger(ShakeDistance, FeedbackDuration, RemapDistanceZero, RemapDistanceOne, RelativeDistance, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMPaniniProjectionShakeEvent_HDRP.Trigger(ShakeDistance, FeedbackDuration, RemapDistanceZero, RemapDistanceOne, RelativeDistance, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "PaniniProjection"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_PaniniProjection_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_PaniniProjection_HDRP.cs.meta new file mode 100644 index 0000000..467943f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_PaniniProjection_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37877494ec9bebd499aa2b7ee97f204e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Vignette_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Vignette_HDRP.cs new file mode 100644 index 0000000..3bbfa01 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Vignette_HDRP.cs @@ -0,0 +1,140 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control HDRP vignette intensity over time. + /// It requires you have in your scene an object with a Volume + /// with Vignette active, and a MMVignetteShaker_HDRP component. + /// + [AddComponentMenu("")] + #if MM_HDRP + [FeedbackPath("PostProcess/Vignette HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + [FeedbackHelp("This feedback allows you to control vignette intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with Vignette active, and a MMVignetteShaker_HDRP component.")] + public class MMF_Vignette_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Vignette", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 29)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's zero to + [Tooltip("the value to remap the curve's zero to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's one to + [Tooltip("the value to remap the curve's one to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + [Header("Color")] + /// whether or not to also animate the vignette's color + [Tooltip("whether or not to also animate the vignette's color")] + public bool InterpolateColor = false; + /// the curve to animate the color on + [Tooltip("the curve to animate the color on")] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.05f, 1f), new Keyframe(0.95f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0, 1)] + public float RemapColorZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapColorOne = 1f; + /// the color to lerp towards + [Tooltip("the color to lerp towards")] + public Color TargetColor = Color.red; + + /// + /// Triggers a vignette shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMVignetteShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode, false, false, InterpolateColor, + ColorCurve, RemapColorZero, RemapColorOne, TargetColor); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMVignetteShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMVignetteShakeEvent_HDRP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "Vignette"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Vignette_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Vignette_HDRP.cs.meta new file mode 100644 index 0000000..cba456e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_Vignette_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 294ea96cd093b544b8428037f5a17b43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_WhiteBalance_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_WhiteBalance_HDRP.cs new file mode 100644 index 0000000..4874805 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_WhiteBalance_HDRP.cs @@ -0,0 +1,135 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control white balance temperature and tint over time. + /// It requires you have in your scene an object with a Volume with White Balance active, and a MMWhiteBalanceShaker_HDRP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control white balance temperature and tint over time. " + + "It requires you have in your scene an object with a Volume " + + "with WhiteBalance active, and a MMWhiteBalanceShaker_HDRP component.")] + #if MM_HDRP + [FeedbackPath("PostProcess/White Balance HDRP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.HDRP")] + public class MMF_WhiteBalance_HDRP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("White Balance", true, 32)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 1f; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeValues = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Temperature", true, 33)] + /// the curve used to animate the temperature value on + [Tooltip("the curve used to animate the temperature value on")] + public AnimationCurve ShakeTemperature = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapTemperatureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapTemperatureOne = 100f; + + [MMFInspectorGroup("Tint", true, 34)] + /// the curve used to animate the tint value on + [Tooltip("the curve used to animate the tint value on")] + public AnimationCurve ShakeTint = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapTintZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapTintOne = 100f; + + /// + /// Triggers a white balance shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMWhiteBalanceShakeEvent_HDRP.Trigger(ShakeTemperature, FeedbackDuration, RemapTemperatureZero, RemapTemperatureOne, + ShakeTint, RemapTintZero, RemapTintOne, RelativeValues, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMWhiteBalanceShakeEvent_HDRP.Trigger(ShakeTemperature, FeedbackDuration, RemapTemperatureZero, RemapTemperatureOne, + ShakeTint, RemapTintZero, RemapTintOne, RelativeValues, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMWhiteBalanceShakeEvent_HDRP.Trigger(ShakeTemperature, FeedbackDuration, RemapTemperatureZero, RemapTemperatureOne, + ShakeTint, RemapTintZero, RemapTintOne, RelativeValues, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_HDRP && UNITY_EDITOR + MMHDRPHelpers.GetOrCreateVolume(Owner, "WhiteBalance"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_WhiteBalance_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_WhiteBalance_HDRP.cs.meta new file mode 100644 index 0000000..a244a0f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Feedbacks/MMF_WhiteBalance_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c85a8307aa986a14d83db219ddc633da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers.meta new file mode 100644 index 0000000..237c846 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb24ea5872be22e4398def836ab33158 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers/MMHDRPHelpers.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers/MMHDRPHelpers.cs new file mode 100644 index 0000000..ea2f9f6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers/MMHDRPHelpers.cs @@ -0,0 +1,64 @@ +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +#if MM_HDRP +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; +#endif +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + public class MMHDRPHelpers : MonoBehaviour + { + #if UNITY_EDITOR && MM_HDRP + public static void GetOrCreateVolume(MMF_Player owner, string feedbackName) where T:VolumeComponent where U:MMShaker + { + string additions = owner.name + " "+feedbackName+" feedback automatic shaker setup : "; + + // looks for the main camera + /*HDAdditionalCameraData cameraData = Camera.main.get(); + cameraData.renderPostProcessing = true; + additions += "Set PostProcessing:true on the "+Camera.main.name+" camera. ";*/ + + if (Application.isPlaying) + { + Debug.LogWarning("Automatic shaker setup is only available outside of play mode."); + return; + } + + // looks for a Volume + Volume volume = (Volume)Object.FindObjectOfType(typeof(Volume)); + if (volume == null) + { + GameObject postProcessingObject = GameObject.Instantiate(Resources.Load("MMDefaultHDRPVolume")); + volume = postProcessingObject.GetComponent(); + additions += "Added a Volume to the scene. "; + } + + // looks for a setting on the volume + T effect; + if (!volume.sharedProfile.TryGet(out effect)) + { + effect = volume.sharedProfile.Add(); + AssetDatabase.AddObjectToAsset(effect, volume.sharedProfile); + EditorUtility.SetDirty(volume.sharedProfile); + AssetDatabase.SaveAssets(); + additions += "Added a "+feedbackName+" post process effect to the "+volume.gameObject.name+" Volume. "; + } + + // looks for a matching shaker + U shaker = volume.GetComponent(); + if (shaker == null) + { + shaker = volume.gameObject.AddComponent(); + additions += "Added a "+feedbackName+" Shaker to the "+volume.gameObject.name+" Post Process Volume. "; + } + + MMDebug.DebugLogInfo( additions + "You're all set."); + } + #endif + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers/MMHDRPHelpers.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers/MMHDRPHelpers.cs.meta new file mode 100644 index 0000000..7614e81 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Helpers/MMHDRPHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d40819da14d2d1499237afb52ba159b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/MoreMountains.Feedbacks.HDRP.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/MoreMountains.Feedbacks.HDRP.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/MoreMountains.Feedbacks.HDRP.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/MoreMountains.Feedbacks.HDRP.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/MoreMountains.Feedbacks.HDRP.asmref.meta new file mode 100644 index 0000000..f5a3be9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/MoreMountains.Feedbacks.HDRP.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a7a2bc31348bf0944bdfecbcd88c4c5f +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources.meta new file mode 100644 index 0000000..9b3a153 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9a571ec0a051de4cad61decc0778d60 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPProfile.asset b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPProfile.asset new file mode 100644 index 0000000..a3b28e6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPProfile.asset @@ -0,0 +1,555 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6864796670186077981 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2d08ce26990eb1a4a9177b860541e702, type: 3} + m_Name: Exposure + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 0 + m_Value: 0 + meteringMode: + m_OverrideState: 0 + m_Value: 2 + luminanceSource: + m_OverrideState: 0 + m_Value: 1 + fixedExposure: + m_OverrideState: 0 + m_Value: 0 + compensation: + m_OverrideState: 0 + m_Value: 0 + limitMin: + m_OverrideState: 0 + m_Value: -1 + limitMax: + m_OverrideState: 0 + m_Value: 14 + curveMap: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: -10 + value: -10 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 20 + value: 20 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + limitMinCurveMap: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: -10 + value: -12 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 20 + value: 18 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + limitMaxCurveMap: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: -10 + value: -8 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 20 + value: 22 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + adaptationMode: + m_OverrideState: 0 + m_Value: 1 + adaptationSpeedDarkToLight: + m_OverrideState: 0 + m_Value: 3 + adaptationSpeedLightToDark: + m_OverrideState: 0 + m_Value: 1 + weightTextureMask: + m_OverrideState: 0 + m_Value: {fileID: 0} + histogramPercentages: + m_OverrideState: 0 + m_Value: {x: 40, y: 90} + histogramUseCurveRemapping: + m_OverrideState: 0 + m_Value: 0 + targetMidGray: + m_OverrideState: 0 + m_Value: 0 + centerAroundExposureTarget: + m_OverrideState: 0 + m_Value: 0 + proceduralCenter: + m_OverrideState: 0 + m_Value: {x: 0.5, y: 0.5} + proceduralRadii: + m_OverrideState: 0 + m_Value: {x: 0.3, y: 0.3} + maskMinIntensity: + m_OverrideState: 0 + m_Value: -30 + maskMaxIntensity: + m_OverrideState: 0 + m_Value: 30 + proceduralSoftness: + m_OverrideState: 0 + m_Value: 0.5 +--- !u!114 &-4721986238830533519 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 598e2d32e2c7b0c418e030c3236d663a, type: 3} + m_Name: ChromaticAberration + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 1 + spectralLut: + m_OverrideState: 0 + m_Value: {fileID: 0} + intensity: + m_OverrideState: 0 + m_Value: 0 + m_MaxSamples: + m_OverrideState: 0 + m_Value: 6 +--- !u!114 &-3418317779778852996 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4b709909182ba0943abef2c49ed59205, type: 3} + m_Name: PaniniProjection + m_EditorClassIdentifier: + active: 1 + distance: + m_OverrideState: 0 + m_Value: 0 + cropToFit: + m_OverrideState: 0 + m_Value: 1 +--- !u!114 &-3100227611986916207 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5a6b00fcf518bb94a90b408492e07b44, type: 3} + m_Name: FilmGrain + m_EditorClassIdentifier: + active: 1 + type: + m_OverrideState: 0 + m_Value: 0 + intensity: + m_OverrideState: 0 + m_Value: 0 + response: + m_OverrideState: 0 + m_Value: 0.8 + texture: + m_OverrideState: 0 + m_Value: {fileID: 0} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: MMDefaultHDRPProfile + m_EditorClassIdentifier: + components: + - {fileID: 3130278352603341482} + - {fileID: 8114150874529261208} + - {fileID: -4721986238830533519} + - {fileID: 4364790808715750781} + - {fileID: 1206188211813505803} + - {fileID: -6864796670186077981} + - {fileID: -3100227611986916207} + - {fileID: 2749208635296186750} + - {fileID: 2419058983776598554} + - {fileID: -3418317779778852996} + - {fileID: 5180638621136054042} + - {fileID: 7041725288631384964} +--- !u!114 &1206188211813505803 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aaa3b8214f75b354e9ba2caadd022259, type: 3} + m_Name: DepthOfField + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 1 + focusMode: + m_OverrideState: 0 + m_Value: 0 + focusDistance: + m_OverrideState: 0 + m_Value: 10 + focusDistanceMode: + m_OverrideState: 0 + m_Value: 0 + nearFocusStart: + m_OverrideState: 0 + m_Value: 0 + nearFocusEnd: + m_OverrideState: 0 + m_Value: 4 + farFocusStart: + m_OverrideState: 0 + m_Value: 10 + farFocusEnd: + m_OverrideState: 0 + m_Value: 20 + m_NearSampleCount: + m_OverrideState: 0 + m_Value: 5 + m_NearMaxBlur: + m_OverrideState: 0 + m_Value: 4 + m_FarSampleCount: + m_OverrideState: 0 + m_Value: 7 + m_FarMaxBlur: + m_OverrideState: 0 + m_Value: 8 + m_Resolution: + m_OverrideState: 0 + m_Value: 2 + m_HighQualityFiltering: + m_OverrideState: 0 + m_Value: 1 + m_PhysicallyBased: + m_OverrideState: 0 + m_Value: 0 + m_LimitManualRangeNearBlur: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &2419058983776598554 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bcf384b154398e341b6b29969c078198, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 1 + intensity: + m_OverrideState: 0 + m_Value: 0 + maximumVelocity: + m_OverrideState: 0 + m_Value: 200 + minimumVelocity: + m_OverrideState: 0 + m_Value: 2 + cameraMotionBlur: + m_OverrideState: 0 + m_Value: 1 + specialCameraClampMode: + m_OverrideState: 0 + m_Value: 0 + cameraVelocityClamp: + m_OverrideState: 0 + m_Value: 0.05 + cameraTranslationVelocityClamp: + m_OverrideState: 0 + m_Value: 0.05 + cameraRotationVelocityClamp: + m_OverrideState: 0 + m_Value: 0.03 + depthComparisonExtent: + m_OverrideState: 0 + m_Value: 1 + m_SampleCount: + m_OverrideState: 0 + m_Value: 8 +--- !u!114 &2749208635296186750 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9c1bfcd0f0fa7b8468f281d6bbbaf320, type: 3} + m_Name: LensDistortion + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 0 + m_Value: 0 + xMultiplier: + m_OverrideState: 0 + m_Value: 1 + yMultiplier: + m_OverrideState: 0 + m_Value: 1 + center: + m_OverrideState: 0 + m_Value: {x: 0.5, y: 0.5} + scale: + m_OverrideState: 0 + m_Value: 1 +--- !u!114 &3130278352603341482 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 24f077503be6ae942a1e1245dbd53ea9, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 1 + threshold: + m_OverrideState: 0 + m_Value: 0 + intensity: + m_OverrideState: 0 + m_Value: 0 + scatter: + m_OverrideState: 0 + m_Value: 0.7 + tint: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + dirtTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + dirtIntensity: + m_OverrideState: 0 + m_Value: 0 + anamorphic: + m_OverrideState: 0 + m_Value: 1 + m_Resolution: + m_OverrideState: 0 + m_Value: 2 + m_HighQualityPrefiltering: + m_OverrideState: 0 + m_Value: 0 + m_HighQualityFiltering: + m_OverrideState: 0 + m_Value: 1 +--- !u!114 &4364790808715750781 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4b8bcdf71d7fafa419fca1ed162f5fc9, type: 3} + m_Name: ColorAdjustments + m_EditorClassIdentifier: + active: 1 + postExposure: + m_OverrideState: 0 + m_Value: 0 + contrast: + m_OverrideState: 0 + m_Value: 0 + colorFilter: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + hueShift: + m_OverrideState: 0 + m_Value: 0 + saturation: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &5180638621136054042 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2c1be1b6c95cd2e41b27903b9270817f, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 0 + m_Value: 0 + color: + m_OverrideState: 0 + m_Value: {r: 0, g: 0, b: 0, a: 1} + center: + m_OverrideState: 0 + m_Value: {x: 0.5, y: 0.5} + intensity: + m_OverrideState: 0 + m_Value: 0 + smoothness: + m_OverrideState: 0 + m_Value: 0.2 + roundness: + m_OverrideState: 0 + m_Value: 1 + rounded: + m_OverrideState: 0 + m_Value: 0 + mask: + m_OverrideState: 0 + m_Value: {fileID: 0} + opacity: + m_OverrideState: 0 + m_Value: 1 +--- !u!114 &7041725288631384964 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b51a78e223a2e504bb88a059b55229ea, type: 3} + m_Name: WhiteBalance + m_EditorClassIdentifier: + active: 1 + temperature: + m_OverrideState: 0 + m_Value: 0 + tint: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &8114150874529261208 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a7649d9368d3a5c4ab8ad01a63e04962, type: 3} + m_Name: ChannelMixer + m_EditorClassIdentifier: + active: 1 + redOutRedIn: + m_OverrideState: 0 + m_Value: 100 + redOutGreenIn: + m_OverrideState: 0 + m_Value: 0 + redOutBlueIn: + m_OverrideState: 0 + m_Value: 0 + greenOutRedIn: + m_OverrideState: 0 + m_Value: 0 + greenOutGreenIn: + m_OverrideState: 0 + m_Value: 100 + greenOutBlueIn: + m_OverrideState: 0 + m_Value: 0 + blueOutRedIn: + m_OverrideState: 0 + m_Value: 0 + blueOutGreenIn: + m_OverrideState: 0 + m_Value: 0 + blueOutBlueIn: + m_OverrideState: 0 + m_Value: 100 diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPProfile.asset.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPProfile.asset.meta new file mode 100644 index 0000000..07d0059 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6c55732adbfa0d4593bd219357d1a00 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPVolume.prefab b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPVolume.prefab new file mode 100644 index 0000000..36491a7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPVolume.prefab @@ -0,0 +1,51 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4977394314651325502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9096337897072025802} + - component: {fileID: 2928670984742858032} + m_Layer: 0 + m_Name: MMDefaultHDRPVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9096337897072025802 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4977394314651325502} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2928670984742858032 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4977394314651325502} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: d6c55732adbfa0d4593bd219357d1a00, type: 2} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPVolume.prefab.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPVolume.prefab.meta new file mode 100644 index 0000000..ef746cb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Resources/MMDefaultHDRPVolume.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 041a480513ea4f947a590bb1195e91a0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers.meta new file mode 100644 index 0000000..76c0b81 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c66cd8a28b9b11e40b7e222449c416cf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMBloomShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMBloomShaker_HDRP.cs new file mode 100644 index 0000000..ac15500 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMBloomShaker_HDRP.cs @@ -0,0 +1,225 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine.Rendering; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP bloom post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMBloomShaker_HDRP")] + public class MMBloomShaker_HDRP : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Bloom Intensity", true, 42)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapIntensityOne = 1f; + + [MMInspectorGroup("Bloom Threshold", true, 43)] + /// the curve used to animate the threshold value on + [Tooltip("the curve used to animate the threshold value on")] + public AnimationCurve ShakeThreshold = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapThresholdZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapThresholdOne = 0f; + + #if MM_HDRP + protected Volume _volume; + protected Bloom _bloom; + protected float _initialIntensity; + protected float _initialThreshold; + protected float _originalShakeDuration; + protected bool _originalRelativeIntensity; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected AnimationCurve _originalShakeThreshold; + protected float _originalRemapThresholdZero; + protected float _originalRemapThresholdOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _bloom); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newIntensity = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeValues, _initialIntensity); + _bloom.intensity.Override(newIntensity); + float newThreshold = ShakeFloat(ShakeThreshold, RemapThresholdZero, RemapThresholdOne, RelativeValues, _initialThreshold); + _bloom.threshold.Override(newThreshold); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _bloom.intensity.value; + _initialThreshold = _bloom.threshold.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnBloomShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, + bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeValues; + _originalShakeThreshold = ShakeThreshold; + _originalRemapThresholdZero = RemapThresholdZero; + _originalRemapThresholdOne = RemapThresholdOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeValues = relativeIntensity; + ShakeThreshold = threshold; + RemapThresholdZero = remapThresholdMin; + RemapThresholdOne = remapThresholdMax; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _bloom.intensity.Override(_initialIntensity); + _bloom.threshold.Override(_initialThreshold); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeValues = _originalRelativeIntensity; + ShakeThreshold = _originalShakeThreshold; + RemapThresholdZero = _originalRemapThresholdZero; + RemapThresholdOne = _originalRemapThresholdOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMBloomShakeEvent_HDRP.Register(OnBloomShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMBloomShakeEvent_HDRP.Unregister(OnBloomShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMBloomShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, + bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, + TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, threshold, remapThresholdMin, remapThresholdMax, relativeIntensity, + attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMBloomShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMBloomShaker_HDRP.cs.meta new file mode 100644 index 0000000..a6403e6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMBloomShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09ed30f22b4748a44bc7862a66f01f2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChannelMixerShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChannelMixerShaker_HDRP.cs new file mode 100644 index 0000000..e5cbaa4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChannelMixerShaker_HDRP.cs @@ -0,0 +1,277 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP color adjustments post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMChannelMixerShaker_HDRP")] + public class MMChannelMixerShaker_HDRP : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Red", true, 42)] + /// the curve used to animate the red value on + [Tooltip("the curve used to animate the red value on")] + public AnimationCurve ShakeRed = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapRedZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapRedOne = 200f; + + [MMInspectorGroup("Green", true, 43)] + /// the curve used to animate the green value on + [Tooltip("the curve used to animate the green value on")] + public AnimationCurve ShakeGreen = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapGreenZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapGreenOne = 200f; + + [MMInspectorGroup("Blue", true, 44)] + /// the curve used to animate the blue value on + [Tooltip("the curve used to animate the blue value on")] + public AnimationCurve ShakeBlue = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapBlueZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapBlueOne = 200f; + + #if MM_HDRP + protected Volume _volume; + protected ChannelMixer _channelMixer; + protected float _initialRed; + protected float _initialGreen; + protected float _initialBlue; + protected float _initialContrast; + protected Color _initialColorFilterColor; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + + protected AnimationCurve _originalShakeRed; + protected float _originalRemapRedZero; + protected float _originalRemapRedOne; + protected AnimationCurve _originalShakeGreen; + protected float _originalRemapGreenZero; + protected float _originalRemapGreenOne; + protected AnimationCurve _originalShakeBlue; + protected float _originalRemapBlueZero; + protected float _originalRemapBlueOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _channelMixer); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.8f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newRed = ShakeFloat(ShakeRed, RemapRedZero, RemapRedOne, RelativeValues, _initialRed); + _channelMixer.redOutRedIn.Override(newRed); + float newGreen = ShakeFloat(ShakeGreen, RemapGreenZero, RemapGreenOne, RelativeValues, _initialGreen); + _channelMixer.greenOutGreenIn.Override(newGreen); + float newBlue = ShakeFloat(ShakeBlue, RemapBlueZero, RemapBlueOne, RelativeValues, _initialBlue); + _channelMixer.blueOutBlueIn.Override(newBlue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialRed = _channelMixer.redOutRedIn.value; + _initialGreen = _channelMixer.greenOutGreenIn.value; + _initialBlue = _channelMixer.blueOutBlueIn.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMChannelMixerShakeEvent(AnimationCurve shakeRed, float remapRedZero, float remapRedOne, + AnimationCurve shakeGreen, float remapGreenZero, float remapGreenOne, + AnimationCurve shakeBlue, float remapBlueZero, float remapBlueOne, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalRelativeValues = RelativeValues; + _originalShakeRed = ShakeRed; + _originalRemapRedZero = RemapRedZero; + _originalRemapRedOne = RemapRedOne; + _originalShakeGreen = ShakeGreen; + _originalRemapGreenZero = RemapGreenZero; + _originalRemapGreenOne = RemapGreenOne; + _originalShakeBlue = ShakeBlue; + _originalRemapBlueZero = RemapBlueZero; + _originalRemapBlueOne = RemapBlueOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + RelativeValues = relativeValues; + ShakeRed = shakeRed; + RemapRedZero = remapRedZero; + RemapRedOne = remapRedOne; + ShakeGreen = shakeGreen; + RemapGreenZero = remapGreenZero; + RemapGreenOne = remapGreenOne; + ShakeBlue = shakeBlue; + RemapBlueZero = remapBlueZero; + RemapBlueOne = remapBlueOne; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _channelMixer.redOutRedIn.Override(_initialRed); + _channelMixer.greenOutGreenIn.Override(_initialGreen); + _channelMixer.blueOutBlueIn.Override(_initialBlue); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + RelativeValues = _originalRelativeValues; + ShakeRed = _originalShakeRed; + RemapRedZero = _originalRemapRedZero; + RemapRedOne = _originalRemapRedOne; + ShakeGreen = _originalShakeGreen; + RemapGreenZero = _originalRemapGreenZero; + RemapGreenOne = _originalRemapGreenOne; + ShakeBlue = _originalShakeBlue; + RemapBlueZero = _originalRemapBlueZero; + RemapBlueOne = _originalRemapBlueOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMChannelMixerShakeEvent_HDRP.Register(OnMMChannelMixerShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMChannelMixerShakeEvent_HDRP.Unregister(OnMMChannelMixerShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMChannelMixerShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate( + AnimationCurve shakeRed, float remapRedZero, float remapRedOne, + AnimationCurve shakeGreen, float remapGreenZero, float remapGreenOne, + AnimationCurve shakeBlue, float remapBlueZero, float remapBlueOne, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger( + AnimationCurve shakeRed, float remapRedZero, float remapRedOne, + AnimationCurve shakeGreen, float remapGreenZero, float remapGreenOne, + AnimationCurve shakeBlue, float remapBlueZero, float remapBlueOne, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(shakeRed, remapRedZero, remapRedOne, + shakeGreen, remapGreenZero, remapGreenOne, + shakeBlue, remapBlueZero, remapBlueOne, + duration, relativeValues, attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChannelMixerShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChannelMixerShaker_HDRP.cs.meta new file mode 100644 index 0000000..946dae2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChannelMixerShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33e96efc928fc8848b7698b3703f9f02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChromaticAberrationShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChromaticAberrationShaker_HDRP.cs new file mode 100644 index 0000000..41cd8de --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChromaticAberrationShaker_HDRP.cs @@ -0,0 +1,193 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP chromatic aberration post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMChromaticAberrationShaker_HDRP")] + public class MMChromaticAberrationShaker_HDRP : MMShaker + { + [MMInspectorGroup("Chromatic Aberration Intensity", true, 44)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + #if MM_HDRP + protected Volume _volume; + protected ChromaticAberration _chromaticAberration; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _chromaticAberration); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _chromaticAberration.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _chromaticAberration.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMChromaticAberrationShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _chromaticAberration.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMChromaticAberrationShakeEvent_HDRP.Register(OnMMChromaticAberrationShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMChromaticAberrationShakeEvent_HDRP.Unregister(OnMMChromaticAberrationShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMChromaticAberrationShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, resetShakerValuesAfterShake, + resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChromaticAberrationShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChromaticAberrationShaker_HDRP.cs.meta new file mode 100644 index 0000000..5e72f9b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMChromaticAberrationShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0f7ebe879e82aa489329e54525c43ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMColorAdjustmentsShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMColorAdjustmentsShaker_HDRP.cs new file mode 100644 index 0000000..eabc6b9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMColorAdjustmentsShaker_HDRP.cs @@ -0,0 +1,359 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Tools; +using MoreMountains.Feedbacks; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP color adjustments post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMColorAdjustmentsShaker_HDRP")] + public class MMColorAdjustmentsShaker_HDRP : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Post Exposure", true, 44)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakePostExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapPostExposureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapPostExposureOne = 1f; + + [MMInspectorGroup("Hue Shift", true, 45)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeHueShift = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Range(-180f, 180f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapHueShiftZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-180f, 180f)] + public float RemapHueShiftOne = 180f; + + [MMInspectorGroup("Saturation", true, 46)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeSaturation = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapSaturationZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapSaturationOne = 100f; + + [MMInspectorGroup("Contrast", true, 47)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeContrast = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapContrastZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapContrastOne = 100f; + + public enum ColorFilterModes { None, Gradient, Interpolate } + + [MMInspectorGroup("Color Filter", true, 48)] + /// the color filter mode to work with (none, over a gradient, or interpolate to a destination color + [Tooltip("the color filter mode to work with (none, over a gradient, or interpolate to a destination color")] + public ColorFilterModes ColorFilterMode = ColorFilterModes.None; + /// the gradient over which to modify the color filter + [Tooltip("the gradient over which to modify the color filter")] + [MMFEnumCondition("ColorFilterMode", (int)ColorFilterModes.Gradient)] + [GradientUsage(true)] + public Gradient ColorFilterGradient; + /// the destination color to match when in Interpolate mode + [Tooltip("the destination color to match when in Interpolate mode")] + [MMFEnumCondition("ColorFilterMode", (int) ColorFilterModes.Interpolate)] + public Color ColorFilterDestination = Color.yellow; + /// the curve over which to interpolate the color filter + [Tooltip("the curve over which to interpolate the color filter")] + [MMFEnumCondition("ColorFilterMode", (int) ColorFilterModes.Interpolate)] + public AnimationCurve ColorFilterCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + #if MM_HDRP + protected Volume _volume; + protected ColorAdjustments _colorAdjustments; + protected float _initialPostExposure; + protected float _initialHueShift; + protected float _initialSaturation; + protected float _initialContrast; + protected Color _initialColorFilterColor; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakePostExposure; + protected float _originalRemapPostExposureZero; + protected float _originalRemapPostExposureOne; + protected AnimationCurve _originalShakeHueShift; + protected float _originalRemapHueShiftZero; + protected float _originalRemapHueShiftOne; + protected AnimationCurve _originalShakeSaturation; + protected float _originalRemapSaturationZero; + protected float _originalRemapSaturationOne; + protected AnimationCurve _originalShakeContrast; + protected float _originalRemapContrastZero; + protected float _originalRemapContrastOne; + protected ColorFilterModes _originalColorFilterMode; + protected Gradient _originalColorFilterGradient; + protected Color _originalColorFilterDestination; + protected AnimationCurve _originalColorFilterCurve; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _colorAdjustments); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.8f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newPostExposure = ShakeFloat(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, RelativeValues, _initialPostExposure); + _colorAdjustments.postExposure.Override(newPostExposure); + float newHueShift = ShakeFloat(ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, RelativeValues, _initialHueShift); + _colorAdjustments.hueShift.Override(newHueShift); + float newSaturation = ShakeFloat(ShakeSaturation, RemapSaturationZero, RemapSaturationOne, RelativeValues, _initialSaturation); + _colorAdjustments.saturation.Override(newSaturation); + float newContrast = ShakeFloat(ShakeContrast, RemapContrastZero, RemapContrastOne, RelativeValues, _initialContrast); + _colorAdjustments.contrast.Override(newContrast); + + _remappedTimeSinceStart = MMFeedbacksHelpers.Remap(Time.time - _shakeStartedTimestamp, 0f, ShakeDuration, 0f, 1f); + + if (ColorFilterMode == ColorFilterModes.Gradient) + { + _colorAdjustments.colorFilter.Override(ColorFilterGradient.Evaluate(_remappedTimeSinceStart)); + } + else if (ColorFilterMode == ColorFilterModes.Interpolate) + { + float factor = ColorFilterCurve.Evaluate(_remappedTimeSinceStart); + _colorAdjustments.colorFilter.Override(Color.LerpUnclamped(_initialColorFilterColor, ColorFilterDestination, factor)); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialPostExposure = _colorAdjustments.postExposure.value; + _initialHueShift = _colorAdjustments.hueShift.value; + _initialSaturation = _colorAdjustments.saturation.value; + _initialContrast = _colorAdjustments.contrast.value; + _initialColorFilterColor = _colorAdjustments.colorFilter.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMColorGradingShakeEvent(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + ColorFilterModes colorFilterMode, Gradient colorFilterGradient, Color colorFilterDestination,AnimationCurve colorFilterCurve, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalRelativeValues = RelativeValues; + _originalShakePostExposure = ShakePostExposure; + _originalRemapPostExposureZero = RemapPostExposureZero; + _originalRemapPostExposureOne = RemapPostExposureOne; + _originalShakeHueShift = ShakeHueShift; + _originalRemapHueShiftZero = RemapHueShiftZero; + _originalRemapHueShiftOne = RemapHueShiftOne; + _originalShakeSaturation = ShakeSaturation; + _originalRemapSaturationZero = RemapSaturationZero; + _originalRemapSaturationOne = RemapSaturationOne; + _originalShakeContrast = ShakeContrast; + _originalRemapContrastZero = RemapContrastZero; + _originalRemapContrastOne = RemapContrastOne; + _originalColorFilterMode = ColorFilterMode; + _originalColorFilterGradient = ColorFilterGradient; + _originalColorFilterDestination = ColorFilterDestination; + _originalColorFilterCurve = ColorFilterCurve; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + RelativeValues = relativeValues; + ShakePostExposure = shakePostExposure; + RemapPostExposureZero = remapPostExposureZero; + RemapPostExposureOne = remapPostExposureOne; + ShakeHueShift = shakeHueShift; + RemapHueShiftZero = remapHueShiftZero; + RemapHueShiftOne = remapHueShiftOne; + ShakeSaturation = shakeSaturation; + RemapSaturationZero = remapSaturationZero; + RemapSaturationOne = remapSaturationOne; + ShakeContrast = shakeContrast; + RemapContrastZero = remapContrastZero; + RemapContrastOne = remapContrastOne; + ColorFilterMode = colorFilterMode; + ColorFilterGradient = colorFilterGradient; + ColorFilterDestination = colorFilterDestination; + ColorFilterCurve = colorFilterCurve; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _colorAdjustments.postExposure.Override(_initialPostExposure); + _colorAdjustments.hueShift.Override(_initialHueShift); + _colorAdjustments.saturation.Override(_initialSaturation); + _colorAdjustments.contrast.Override(_initialContrast); + _colorAdjustments.colorFilter.Override(_initialColorFilterColor); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + RelativeValues = _originalRelativeValues; + ShakePostExposure = _originalShakePostExposure; + RemapPostExposureZero = _originalRemapPostExposureZero; + RemapPostExposureOne = _originalRemapPostExposureOne; + ShakeHueShift = _originalShakeHueShift; + RemapHueShiftZero = _originalRemapHueShiftZero; + RemapHueShiftOne = _originalRemapHueShiftOne; + ShakeSaturation = _originalShakeSaturation; + RemapSaturationZero = _originalRemapSaturationZero; + RemapSaturationOne = _originalRemapSaturationOne; + ShakeContrast = _originalShakeContrast; + RemapContrastZero = _originalRemapContrastZero; + RemapContrastOne = _originalRemapContrastOne; + ColorFilterMode = _originalColorFilterMode; + ColorFilterGradient = _originalColorFilterGradient; + ColorFilterDestination = _originalColorFilterDestination; + ColorFilterCurve = _originalColorFilterCurve; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMColorAdjustmentsShakeEvent_HDRP.Register(OnMMColorGradingShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMColorAdjustmentsShakeEvent_HDRP.Unregister(OnMMColorGradingShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMColorAdjustmentsShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + MMColorAdjustmentsShaker_HDRP.ColorFilterModes colorFilterMode, Gradient colorFilterGradient, Color colorFilterDestination,AnimationCurve colorFilterCurve, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + MMColorAdjustmentsShaker_HDRP.ColorFilterModes colorFilterMode, Gradient colorFilterGradient, Color colorFilterDestination,AnimationCurve colorFilterCurve, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(shakePostExposure, remapPostExposureZero, remapPostExposureOne, + shakeHueShift, remapHueShiftZero, remapHueShiftOne, + shakeSaturation, remapSaturationZero, remapSaturationOne, + shakeContrast, remapContrastZero, remapContrastOne, + colorFilterMode, colorFilterGradient, colorFilterDestination, colorFilterCurve, + duration, relativeValues, attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMColorAdjustmentsShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMColorAdjustmentsShaker_HDRP.cs.meta new file mode 100644 index 0000000..960eab2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMColorAdjustmentsShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74e91560821f43e47a56cefccaf584cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMDepthOfFieldShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMDepthOfFieldShaker_HDRP.cs new file mode 100644 index 0000000..6bd5f4f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMDepthOfFieldShaker_HDRP.cs @@ -0,0 +1,393 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP depth of field post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMDepthOfFieldShaker_HDRP")] + public class MMDepthOfFieldShaker_HDRP : MMShaker + { + [MMInspectorGroup("Focus Distance", true, 53)] + /// whether or not to animate the focus distance + [Tooltip("whether or not to animate the focus distance")] + public bool AnimateFocusDistance = true; + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + [MMCondition("AnimateFocusDistance", true)] + public AnimationCurve ShakeFocusDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMCondition("AnimateFocusDistance", true)] + public float RemapFocusDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMCondition("AnimateFocusDistance", true)] + public float RemapFocusDistanceOne = 3f; + + + [MMInspectorGroup("Near Range", true, 52)] + + [Header("Near Range Start")] + /// whether or not to animate the near range start + [Tooltip("whether or not to animate the near range start")] + public bool AnimateNearRangeStart = false; + /// the curve used to animate the near range start on + [Tooltip("the curve used to animate the near range start on")] + [MMCondition("AnimateNearRangeStart", true)] + public AnimationCurve ShakeNearRangeStart = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMCondition("AnimateNearRangeStart", true)] + public float RemapNearRangeStartZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMCondition("AnimateNearRangeStart", true)] + public float RemapNearRangeStartOne = 3f; + + [Header("Near Range End")] + /// whether or not to animate the near range end + [Tooltip("whether or not to animate the near range end")] + public bool AnimateNearRangeEnd = false; + /// the curve used to animate the near range end on + [Tooltip("the curve used to animate the near range end on")] + [MMCondition("AnimateNearRangeEnd", true)] + public AnimationCurve ShakeNearRangeEnd = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMCondition("AnimateNearRangeEnd", true)] + public float RemapNearRangeEndZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMCondition("AnimateNearRangeEnd", true)] + public float RemapNearRangeEndOne = 3f; + + [MMInspectorGroup("Far Range", true, 51)] + + [Header("Far Range Start")] + /// whether or not to animate the far range start + [Tooltip("whether or not to animate the far range start")] + public bool AnimateFarRangeStart = false; + /// the curve used to animate the far range start on + [Tooltip("the curve used to animate the far range start on")] + [MMCondition("AnimateFarRangeStart", true)] + public AnimationCurve ShakeFarRangeStart = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMCondition("AnimateFarRangeStart", true)] + public float RemapFarRangeStartZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMCondition("AnimateFarRangeStart", true)] + public float RemapFarRangeStartOne = 3f; + + [Header("Far Range End")] + /// whether or not to animate the far range end + [Tooltip("whether or not to animate the far range end")] + public bool AnimateFarRangeEnd = false; + /// the curve used to animate the far range end on + [Tooltip("the curve used to animate the far range end on")] + [MMCondition("AnimateFarRangeEnd", true)] + public AnimationCurve ShakeFarRangeEnd = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMCondition("AnimateFarRangeEnd", true)] + public float RemapFarRangeEndZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMCondition("AnimateFarRangeEnd", true)] + public float RemapFarRangeEndOne = 3f; + + #if MM_HDRP + protected Volume _volume; + protected DepthOfField _depthOfField; + protected float _originalShakeDuration; + + protected float _initialFocusDistance; + protected float _initialNearRangeStart; + protected float _initialNearRangeEnd; + protected float _initialFarRangeStart; + protected float _initialFarRangeEnd; + + protected bool _originalAnimateFocusDistance; + protected AnimationCurve _originalShakeFocusDistance; + protected float _originalRemapFocusDistanceZero; + protected float _originalRemapFocusDistanceOne; + + protected bool _originalAnimateNearRangeStart; + protected AnimationCurve _originalShakeNearRangeStart; + protected float _originalRemapNearRangeStartZero; + protected float _originalRemapNearRangeStartOne; + protected bool _originalAnimateNearRangeEnd; + protected AnimationCurve _originalShakeNearRangeEnd; + protected float _originalRemapNearRangeEndZero; + protected float _originalRemapNearRangeEndOne; + protected bool _originalAnimateFarRangeStart; + protected AnimationCurve _originalShakeFarRangeStart; + protected float _originalRemapFarRangeStartZero; + protected float _originalRemapFarRangeStartOne; + protected bool _originalAnimateFarRangeEnd; + protected AnimationCurve _originalShakeFarRangeEnd; + protected float _originalRemapFarRangeEndZero; + protected float _originalRemapFarRangeEndOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _depthOfField); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + if (AnimateFocusDistance) + { + float newValue = ShakeFloat(ShakeFocusDistance, RemapFocusDistanceZero, RemapFocusDistanceOne, false, _initialFocusDistance); + _depthOfField.focusDistance.Override(newValue); + } + if (AnimateNearRangeStart) + { + float newValue = ShakeFloat(ShakeNearRangeStart, RemapNearRangeStartZero, RemapNearRangeStartOne, false, _initialNearRangeStart); + _depthOfField.nearFocusStart.Override(newValue); + } + if (AnimateNearRangeEnd) + { + float newValue = ShakeFloat(ShakeNearRangeEnd, RemapNearRangeEndZero, RemapNearRangeEndOne, false, _initialNearRangeEnd); + _depthOfField.nearFocusEnd.Override(newValue); + } + if (AnimateFarRangeStart) + { + float newValue = ShakeFloat(ShakeFarRangeStart, RemapFarRangeStartZero, RemapFarRangeStartOne, false, _initialFarRangeStart); + _depthOfField.farFocusStart.Override(newValue); + } + if (AnimateFarRangeEnd) + { + float newValue = ShakeFloat(ShakeFarRangeEnd, RemapFarRangeEndZero, RemapFarRangeEndOne, false, _initialFarRangeEnd); + _depthOfField.farFocusEnd.Override(newValue); + } + + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialFocusDistance = _depthOfField.focusDistance.value; + _initialNearRangeStart = _depthOfField.nearFocusStart.value; + _initialNearRangeEnd = _depthOfField.nearFocusEnd.value; + _initialFarRangeStart = _depthOfField.farFocusStart.value; + _initialFarRangeEnd = _depthOfField.farFocusEnd.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnDepthOfFieldShakeEvent(float duration, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool animateFocusDistance = false, AnimationCurve shakeFocusDistance = null, float remapFocusDistanceZero = 0f, float remapFocusDistanceOne = 1f, + bool animateNearRangeStart = false, AnimationCurve shakeNearRangeStart = null,float remapNearRangeStartZero = 0f, float remapNearRangeStartOne = 0f, + bool animateNearRangeEnd = false, AnimationCurve shakeNearRangeEnd = null,float remapNearRangeEndZero = 0f, float remapNearRangeEndOne = 0f, + bool animateFarRangeStart = false, AnimationCurve shakeFarRangeStart = null,float remapFarRangeStartZero = 0f, float remapFarRangeStartOne = 0f, + bool animateFarRangeEnd = false, AnimationCurve shakeFarRangeEnd = null,float remapFarRangeEndZero = 0f, float remapFarRangeEndOne = 0f) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + + _originalAnimateFocusDistance = AnimateFocusDistance; + _originalShakeFocusDistance = ShakeFocusDistance; + _originalRemapFocusDistanceZero = RemapFocusDistanceZero; + _originalRemapFocusDistanceOne = RemapFocusDistanceOne; + _originalAnimateNearRangeStart = AnimateNearRangeStart; + _originalShakeNearRangeStart = ShakeNearRangeStart; + _originalRemapNearRangeStartZero = RemapNearRangeStartZero; + _originalRemapNearRangeStartOne = RemapNearRangeStartOne; + _originalAnimateNearRangeEnd = AnimateNearRangeEnd; + _originalShakeNearRangeEnd = ShakeNearRangeEnd; + _originalRemapNearRangeEndZero = RemapNearRangeEndZero; + _originalRemapNearRangeEndOne = RemapNearRangeEndOne; + _originalAnimateFarRangeStart = AnimateFarRangeStart; + _originalShakeFarRangeStart = ShakeFarRangeStart; + _originalRemapFarRangeStartZero = RemapFarRangeStartZero; + _originalRemapFarRangeStartOne = RemapFarRangeStartOne; + _originalAnimateFarRangeEnd = AnimateFarRangeEnd; + _originalShakeFarRangeEnd = ShakeFarRangeEnd; + _originalRemapFarRangeEndZero = RemapFarRangeEndZero; + _originalRemapFarRangeEndOne = RemapFarRangeEndOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ForwardDirection = forwardDirection; + + AnimateFocusDistance = animateFocusDistance; + ShakeFocusDistance = shakeFocusDistance; + RemapFocusDistanceZero = remapFocusDistanceZero; + RemapFocusDistanceOne = remapFocusDistanceOne; + + AnimateNearRangeStart = animateNearRangeStart; + ShakeNearRangeStart = shakeNearRangeStart; + RemapNearRangeStartZero = remapNearRangeStartZero; + RemapNearRangeStartOne = remapNearRangeStartOne; + AnimateNearRangeEnd = animateNearRangeEnd; + ShakeNearRangeEnd = shakeNearRangeEnd; + RemapNearRangeEndZero = remapNearRangeEndZero; + RemapNearRangeEndOne = remapNearRangeEndOne; + AnimateFarRangeStart = animateFarRangeStart; + ShakeFarRangeStart = shakeFarRangeStart; + RemapFarRangeStartZero = remapFarRangeStartZero; + RemapFarRangeStartOne = remapFarRangeStartOne; + AnimateFarRangeEnd = animateFarRangeEnd; + ShakeFarRangeEnd = shakeFarRangeEnd; + RemapFarRangeEndZero = remapFarRangeEndZero; + RemapFarRangeEndOne = remapFarRangeEndOne; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _depthOfField.focusDistance.Override(_initialFocusDistance); + _depthOfField.nearFocusStart.Override(_initialNearRangeStart); + _depthOfField.nearFocusEnd.Override(_initialNearRangeEnd); + _depthOfField.farFocusStart.Override(_initialFarRangeStart); + _depthOfField.farFocusEnd.Override(_initialFarRangeEnd); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + + AnimateFocusDistance = _originalAnimateFocusDistance; + ShakeFocusDistance = _originalShakeFocusDistance; + RemapFocusDistanceZero = _originalRemapFocusDistanceZero; + RemapFocusDistanceOne = _originalRemapFocusDistanceOne; + AnimateNearRangeStart = _originalAnimateNearRangeStart; + ShakeNearRangeStart = _originalShakeNearRangeStart; + RemapNearRangeStartZero = _originalRemapNearRangeStartZero; + RemapNearRangeStartOne = _originalRemapNearRangeStartOne; + AnimateNearRangeEnd = _originalAnimateNearRangeEnd; + ShakeNearRangeEnd = _originalShakeNearRangeEnd; + RemapNearRangeEndZero = _originalRemapNearRangeEndZero; + RemapNearRangeEndOne = _originalRemapNearRangeEndOne; + AnimateFarRangeStart = _originalAnimateFarRangeStart; + ShakeFarRangeStart = _originalShakeFarRangeStart; + RemapFarRangeStartZero = _originalRemapFarRangeStartZero; + RemapFarRangeStartOne = _originalRemapFarRangeStartOne; + AnimateFarRangeEnd = _originalAnimateFarRangeEnd; + ShakeFarRangeEnd = _originalShakeFarRangeEnd; + RemapFarRangeEndZero = _originalRemapFarRangeEndZero; + RemapFarRangeEndOne = _originalRemapFarRangeEndOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMDepthOfFieldShakeEvent_HDRP.Register(OnDepthOfFieldShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMDepthOfFieldShakeEvent_HDRP.Unregister(OnDepthOfFieldShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMDepthOfFieldShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float duration, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool animateFocusDistance = false, AnimationCurve shakeFocusDistance = null, float remapFocusDistanceZero = 0f, float remapFocusDistanceOne = 1f, + bool animateNearRangeStart = false, AnimationCurve shakeNearRangeStart = null,float remapNearRangeStartZero = 0f, float remapNearRangeStartOne = 0f, + bool animateNearRangeEnd = false, AnimationCurve shakeNearRangeEnd = null,float remapNearRangeEndZero = 0f, float remapNearRangeEndOne = 0f, + bool animateFarRangeStart = false, AnimationCurve shakeFarRangeStart = null,float remapFarRangeStartZero = 0f, float remapFarRangeStartOne = 0f, + bool animateFarRangeEnd = false, AnimationCurve shakeFarRangeEnd = null,float remapFarRangeEndZero = 0f, float remapFarRangeEndOne = 0f); + + static public void Trigger(float duration, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool animateFocusDistance = false, AnimationCurve shakeFocusDistance = null, float remapFocusDistanceZero = 0f, float remapFocusDistanceOne = 1f, + bool animateNearRangeStart = false, AnimationCurve shakeNearRangeStart = null,float remapNearRangeStartZero = 0f, float remapNearRangeStartOne = 0f, + bool animateNearRangeEnd = false, AnimationCurve shakeNearRangeEnd = null,float remapNearRangeEndZero = 0f, float remapNearRangeEndOne = 0f, + bool animateFarRangeStart = false, AnimationCurve shakeFarRangeStart = null,float remapFarRangeStartZero = 0f, float remapFarRangeStartOne = 0f, + bool animateFarRangeEnd = false, AnimationCurve shakeFarRangeEnd = null,float remapFarRangeEndZero = 0f, float remapFarRangeEndOne = 0f) + { + OnEvent?.Invoke(duration, attenuation, channelData, resetShakerValuesAfterShake, + resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore, animateFocusDistance, shakeFocusDistance, remapFocusDistanceZero, remapFocusDistanceOne, + animateNearRangeStart, shakeNearRangeStart, remapNearRangeStartZero, remapNearRangeStartOne, + animateNearRangeEnd, shakeNearRangeEnd, remapNearRangeEndZero, remapNearRangeEndOne, + animateFarRangeStart, shakeFarRangeStart, remapFarRangeStartZero, remapFarRangeStartOne, + animateFarRangeEnd, shakeFarRangeEnd,remapFarRangeEndZero,remapFarRangeEndOne); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMDepthOfFieldShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMDepthOfFieldShaker_HDRP.cs.meta new file mode 100644 index 0000000..a7d540e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMDepthOfFieldShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8dccaa5e1799e3b48ab214e494816880 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMExposureShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMExposureShaker_HDRP.cs new file mode 100644 index 0000000..91ebaeb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMExposureShaker_HDRP.cs @@ -0,0 +1,191 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP exposure post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMExposureShaker_HDRP")] + public class MMExposureShaker_HDRP : MMShaker + { + [MMInspectorGroup("Exposure Intensity", true, 46)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeFixedExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFixedExposureZero = 8.5f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFixedExposureOne = 6f; + + #if MM_HDRP + protected Volume _volume; + protected Exposure _exposure; + protected float _initialFixedExposure; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeFixedExposure; + protected float _originalRemapFixedExposureZero; + protected float _originalRemapFixedExposureOne; + protected bool _originalRelativeFixedExposure; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _exposure); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeFixedExposure, RemapFixedExposureZero, RemapFixedExposureOne, RelativeIntensity, _initialFixedExposure); + _exposure.fixedExposure.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialFixedExposure = _exposure.fixedExposure.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnExposureShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeFixedExposure = ShakeFixedExposure; + _originalRemapFixedExposureZero = RemapFixedExposureZero; + _originalRemapFixedExposureOne = RemapFixedExposureOne; + _originalRelativeFixedExposure = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeFixedExposure = intensity; + RemapFixedExposureZero = remapMin * attenuation; + RemapFixedExposureOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _exposure.fixedExposure.Override(_initialFixedExposure); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeFixedExposure = _originalShakeFixedExposure; + RemapFixedExposureZero = _originalRemapFixedExposureZero; + RemapFixedExposureOne = _originalRemapFixedExposureOne; + RelativeIntensity = _originalRelativeFixedExposure; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMExposureShakeEvent_HDRP.Register(OnExposureShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMExposureShakeEvent_HDRP.Unregister(OnExposureShakeEvent); + } + #endif + } + + /// + /// An event used to trigger exposure shakes + /// + public struct MMExposureShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve fixedExposure, float duration, float remapMin, float remapMax, bool relativeFixedExposure = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve fixedExposure, float duration, float remapMin, float remapMax, bool relativeFixedExposure = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(fixedExposure, duration, remapMin, remapMax, relativeFixedExposure, attenuation, channelData, resetShakerValuesAfterShake, + resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMExposureShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMExposureShaker_HDRP.cs.meta new file mode 100644 index 0000000..959360d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMExposureShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cacc4f51dca0d494dabb441565c23f0b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMFilmGrainShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMFilmGrainShaker_HDRP.cs new file mode 100644 index 0000000..34651de --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMFilmGrainShaker_HDRP.cs @@ -0,0 +1,192 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP FilmGrain post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMFilmGrainShaker_HDRP")] + public class MMFilmGrainShaker_HDRP : MMShaker + { + [MMInspectorGroup("Film Grain Intensity", true, 47)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + #if MM_HDRP + protected Volume _volume; + protected FilmGrain _filmGrain; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _filmGrain); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _filmGrain.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _filmGrain.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnFilmGrainShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _filmGrain.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMFilmGrainShakeEvent_HDRP.Register(OnFilmGrainShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMFilmGrainShakeEvent_HDRP.Unregister(OnFilmGrainShakeEvent); + } + #endif + } + + /// + /// An event used to trigger FilmGrain shakes + /// + public struct MMFilmGrainShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMFilmGrainShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMFilmGrainShaker_HDRP.cs.meta new file mode 100644 index 0000000..736b088 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMFilmGrainShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2f88b719c3eddc45be16396a493f8d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMLensDistortionShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMLensDistortionShaker_HDRP.cs new file mode 100644 index 0000000..5907daa --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMLensDistortionShaker_HDRP.cs @@ -0,0 +1,210 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP lens distortion post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMLensDistortionShaker_HDRP")] + public class MMLensDistortionShaker_HDRP : MMShaker + { + [MMInspectorGroup("Lens Distortion Intensity", true, 47)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), + new Keyframe(0.2f, 1), + new Keyframe(0.25f, -1), + new Keyframe(0.35f, 0.7f), + new Keyframe(0.4f, -0.7f), + new Keyframe(0.6f, 0.3f), + new Keyframe(0.65f, -0.3f), + new Keyframe(0.8f, 0.1f), + new Keyframe(0.85f, -0.1f), + new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapIntensityOne = 0.5f; + + #if MM_HDRP + protected Volume _volume; + protected LensDistortion _lensDistortion; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _lensDistortion); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.8f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _lensDistortion.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _lensDistortion.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMLensDistortionShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _lensDistortion.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMLensDistortionShakeEvent_HDRP.Register(OnMMLensDistortionShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMLensDistortionShakeEvent_HDRP.Unregister(OnMMLensDistortionShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMLensDistortionShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, + resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMLensDistortionShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMLensDistortionShaker_HDRP.cs.meta new file mode 100644 index 0000000..b0db36d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMLensDistortionShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 519fc1b1af1286148b6fbb86b4ef2eeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMMotionBlurShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMMotionBlurShaker_HDRP.cs new file mode 100644 index 0000000..6e11920 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMMotionBlurShaker_HDRP.cs @@ -0,0 +1,191 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP vignette post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMMotionBlurShaker_HDRP")] + public class MMMotionBlurShaker_HDRP : MMShaker + { + [MMInspectorGroup("Motion Blur Intensity", true, 48)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapIntensityOne = 1000f; + + #if MM_HDRP + protected Volume _volume; + protected MotionBlur _motionBlur; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _motionBlur); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _motionBlur.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _motionBlur.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMotionBlurShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _motionBlur.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMMotionBlurShakeEvent_HDRP.Register(OnMotionBlurShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMMotionBlurShakeEvent_HDRP.Unregister(OnMotionBlurShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMMotionBlurShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, + resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMMotionBlurShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMMotionBlurShaker_HDRP.cs.meta new file mode 100644 index 0000000..7be27db --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMMotionBlurShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbf1b6f8b44acf042a0f2bed486492e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMPaniniProjectionShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMPaniniProjectionShaker_HDRP.cs new file mode 100644 index 0000000..0598312 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMPaniniProjectionShaker_HDRP.cs @@ -0,0 +1,193 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Rendering; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP vignette post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMPaniniProjectionShaker_HDRP")] + public class MMPaniniProjectionShaker_HDRP : MMShaker + { + [MMInspectorGroup("Panini Projection Distance", true, 49)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeDistance = false; + /// the curve used to animate the distance value on + [Tooltip("the curve used to animate the distance value on")] + public AnimationCurve ShakeDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapDistanceOne = 1f; + + #if MM_HDRP + protected Volume _volume; + protected PaniniProjection _paniniProjection; + protected float _initialDistance; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeDistance; + protected float _originalRemapDistanceZero; + protected float _originalRemapDistanceOne; + protected bool _originalRelativeDistance; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _paniniProjection); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeDistance, RemapDistanceZero, RemapDistanceOne, RelativeDistance, _initialDistance); + _paniniProjection.distance.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialDistance = _paniniProjection.distance.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnPaniniProjectionShakeEvent(AnimationCurve distance, float duration, float remapMin, float remapMax, bool relativeDistance = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeDistance = ShakeDistance; + _originalRemapDistanceZero = RemapDistanceZero; + _originalRemapDistanceOne = RemapDistanceOne; + _originalRelativeDistance = RelativeDistance; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeDistance = distance; + RemapDistanceZero = remapMin * attenuation; + RemapDistanceOne = remapMax * attenuation; + RelativeDistance = relativeDistance; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _paniniProjection.distance.Override(_initialDistance); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeDistance = _originalShakeDistance; + RemapDistanceZero = _originalRemapDistanceZero; + RemapDistanceOne = _originalRemapDistanceOne; + RelativeDistance = _originalRelativeDistance; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMPaniniProjectionShakeEvent_HDRP.Register(OnPaniniProjectionShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMPaniniProjectionShakeEvent_HDRP.Unregister(OnPaniniProjectionShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMPaniniProjectionShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve distance, float duration, float remapMin, float remapMax, bool relativeDistance = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve distance, float duration, float remapMin, float remapMax, bool relativeDistance = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(distance, duration, remapMin, remapMax, relativeDistance, attenuation, channelData, resetShakerValuesAfterShake, + resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMPaniniProjectionShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMPaniniProjectionShaker_HDRP.cs.meta new file mode 100644 index 0000000..f48d4bc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMPaniniProjectionShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00b9fc554bc35094d9e423683c81474e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMVignetteShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMVignetteShaker_HDRP.cs new file mode 100644 index 0000000..77c6c83 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMVignetteShaker_HDRP.cs @@ -0,0 +1,243 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a HDRP vignette post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMVignetteShaker_HDRP")] + public class MMVignetteShaker_HDRP : MMShaker + { + [Header("Intensity")] + [MMInspectorGroup("Vignette Intensity", true, 46)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + [MMFInspectorGroup("Vignette Color", true, 60)] + /// whether or not to also animate the vignette's color + [Tooltip("whether or not to also animate the vignette's color")] + public bool InterpolateColor = false; + /// the curve to animate the color on + [Tooltip("the curve to animate the color on")] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.05f, 1f), new Keyframe(0.95f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0, 1)] + public float RemapColorZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapColorOne = 1f; + /// the color to lerp towards + [Tooltip("the color to lerp towards")] + public Color TargetColor = Color.red; + + #if MM_HDRP + protected Volume _volume; + protected Vignette _vignette; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + protected bool _originalInterpolateColor; + protected AnimationCurve _originalColorCurve; + protected float _originalRemapColorZero; + protected float _originalRemapColorOne; + protected Color _originalTargetColor; + protected Color _initialColor; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _vignette); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _vignette.intensity.Override(newValue); + + if (InterpolateColor) + { + float newColorValue = ShakeFloat(ColorCurve, RemapColorZero, RemapColorOne, RelativeIntensity, 0); + _vignette.color.Override(Color.Lerp(_initialColor, TargetColor, newColorValue)); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _vignette.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnVignetteShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + _originalInterpolateColor = InterpolateColor; + _originalColorCurve = ColorCurve; + _originalRemapColorZero = RemapColorZero; + _originalRemapColorOne = RemapColorOne; + _originalTargetColor = TargetColor; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + InterpolateColor = interpolateColor; + ColorCurve = colorCurve; + RemapColorZero = remapColorZero; + RemapColorOne = remapColorOne; + TargetColor = targetColor; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _vignette.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + InterpolateColor = _originalInterpolateColor; + ColorCurve = _originalColorCurve; + RemapColorZero = _originalRemapColorZero; + RemapColorOne = _originalRemapColorOne; + TargetColor = _originalTargetColor; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMVignetteShakeEvent_HDRP.Register(OnVignetteShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMVignetteShakeEvent_HDRP.Unregister(OnVignetteShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMVignetteShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, resetShakerValuesAfterShake, + resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore, interpolateColor, colorCurve, remapColorZero, remapColorOne, targetColor); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMVignetteShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMVignetteShaker_HDRP.cs.meta new file mode 100644 index 0000000..75eb59f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMVignetteShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d92a948b1d89a964dad3e880ab3b9712 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMWhiteBalanceShaker_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMWhiteBalanceShaker_HDRP.cs new file mode 100644 index 0000000..55686dd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMWhiteBalanceShaker_HDRP.cs @@ -0,0 +1,228 @@ +using UnityEngine; +using UnityEngine.Rendering; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +#if MM_HDRP +using UnityEngine.Rendering.HighDefinition; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a white balance post processing and it'll be able to "shake" its values by getting events + /// + #if MM_HDRP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMWhiteBalanceShaker_HDRP")] + public class MMWhiteBalanceShaker_HDRP : MMShaker + { + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeValues = true; + + [MMInspectorGroup("Temperature", true, 47)] + /// the curve used to animate the temperature value on + [Tooltip("the curve used to animate the temperature value on")] + public AnimationCurve ShakeTemperature = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapTemperatureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapTemperatureOne = 100f; + + [MMInspectorGroup("Tint", true, 48)] + /// the curve used to animate the tint value on + [Tooltip("the curve used to animate the tint value on")] + public AnimationCurve ShakeTint = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapTintZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapTintOne = 100f; + + #if MM_HDRP + protected Volume _volume; + protected WhiteBalance _whiteBalance; + protected float _initialTemperature; + protected float _initialTint; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakeTemperature; + protected float _originalRemapTemperatureZero; + protected float _originalRemapTemperatureOne; + protected AnimationCurve _originalShakeTint; + protected float _originalRemapTintZero; + protected float _originalRemapTintOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _whiteBalance); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newTemperature = ShakeFloat(ShakeTemperature, RemapTemperatureZero, RemapTemperatureOne, RelativeValues, _initialTemperature); + _whiteBalance.temperature.Override(newTemperature); + float newTint = ShakeFloat(ShakeTint, RemapTintZero, RemapTintOne, RelativeValues, _initialTint); + _whiteBalance.tint.Override(newTint); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialTemperature = _whiteBalance.temperature.value; + _initialTint = _whiteBalance.tint.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnWhiteBalanceShakeEvent(AnimationCurve temperature, float duration, float remapTemperatureMin, float remapTemperatureMax, + AnimationCurve tint, float remapTintMin, float remapTintMax, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeTemperature = ShakeTemperature; + _originalRemapTemperatureZero = RemapTemperatureZero; + _originalRemapTemperatureOne = RemapTemperatureOne; + _originalRelativeValues = RelativeValues; + _originalShakeTint = ShakeTint; + _originalRemapTintZero = RemapTintZero; + _originalRemapTintOne = RemapTintOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeTemperature = temperature; + RemapTemperatureZero = remapTemperatureMin * attenuation; + RemapTemperatureOne = remapTemperatureMax * attenuation; + RelativeValues = relativeValues; + ShakeTint = tint; + RemapTintZero = remapTintMin; + RemapTintOne = remapTintMax; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _whiteBalance.temperature.Override(_initialTemperature); + _whiteBalance.tint.Override(_initialTint); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeTemperature = _originalShakeTemperature; + RemapTemperatureZero = _originalRemapTemperatureZero; + RemapTemperatureOne = _originalRemapTemperatureOne; + RelativeValues = _originalRelativeValues; + ShakeTint = _originalShakeTint; + RemapTintZero = _originalRemapTintZero; + RemapTintOne = _originalRemapTintOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMWhiteBalanceShakeEvent_HDRP.Register(OnWhiteBalanceShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMWhiteBalanceShakeEvent_HDRP.Unregister(OnWhiteBalanceShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMWhiteBalanceShakeEvent_HDRP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve temperature, float duration, float remapTemperatureMin, float remapTemperatureMax, + AnimationCurve tint, float remapTintMin, float remapTintMax, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve temperature, float duration, float remapTemperatureMin, float remapTemperatureMax, + AnimationCurve tint, float remapTintMin, float remapTintMax, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(temperature, duration, remapTemperatureMin, remapTemperatureMax, + tint, remapTintMin, remapTintMax, relativeValues, + attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMWhiteBalanceShaker_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMWhiteBalanceShaker_HDRP.cs.meta new file mode 100644 index 0000000..3c82d2d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Shakers/MMWhiteBalanceShaker_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa659f9a4e4d1ac44942408d91a6d90c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs.meta new file mode 100644 index 0000000..0be95d0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02bbc4cc2e8216141a1611c34fd4d3de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringBloomIntensity_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringBloomIntensity_HDRP.cs new file mode 100644 index 0000000..7c00b98 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringBloomIntensity_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringBloomIntensity_HDRP")] + public class MMSpringBloomIntensity_HDRP : MMSpringFloatComponent + { + protected Bloom _bloom; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _bloom); + base.Initialization(); + } + + public override float TargetFloat + { + get => _bloom.intensity.value; + set => _bloom.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringBloomIntensity_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringBloomIntensity_HDRP.cs.meta new file mode 100644 index 0000000..1f4a542 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringBloomIntensity_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0056b25dc228574191f188adc74a57a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringChromaticAberrationIntensity_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringChromaticAberrationIntensity_HDRP.cs new file mode 100644 index 0000000..9fdd665 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringChromaticAberrationIntensity_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringChromaticAberrationIntensity_HDRP")] + public class MMSpringChromaticAberrationIntensity_HDRP : MMSpringFloatComponent + { + protected ChromaticAberration _chromaticAberration; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _chromaticAberration); + base.Initialization(); + } + + public override float TargetFloat + { + get => _chromaticAberration.intensity.value; + set => _chromaticAberration.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringChromaticAberrationIntensity_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringChromaticAberrationIntensity_HDRP.cs.meta new file mode 100644 index 0000000..7669c3a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringChromaticAberrationIntensity_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bba9508cc683bc449975959a80f4ac6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsContrast_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsContrast_HDRP.cs new file mode 100644 index 0000000..c91f725 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsContrast_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorAdjustmentsContrast_HDRP")] + public class MMSpringColorAdjustmentsContrast_HDRP : MMSpringFloatComponent + { + protected ColorAdjustments _colorAdjustments; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _colorAdjustments); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorAdjustments.contrast.value; + set => _colorAdjustments.contrast.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsContrast_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsContrast_HDRP.cs.meta new file mode 100644 index 0000000..ded3eed --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsContrast_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1f799d610ab96d409225e15095ce227 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsHueShift_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsHueShift_HDRP.cs new file mode 100644 index 0000000..5314e35 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsHueShift_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorAdjustmentsHueShift_HDRP")] + public class MMSpringColorAdjustmentsHueShift_HDRP : MMSpringFloatComponent + { + protected ColorAdjustments _colorAdjustments; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _colorAdjustments); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorAdjustments.hueShift.value; + set => _colorAdjustments.hueShift.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsHueShift_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsHueShift_HDRP.cs.meta new file mode 100644 index 0000000..398a920 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsHueShift_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2e66687d665f8a4bb4d00f4b8ca3d1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsSaturation_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsSaturation_HDRP.cs new file mode 100644 index 0000000..8e4d626 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsSaturation_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorAdjustmentsSaturation_HDRP")] + public class MMSpringColorAdjustmentsSaturation_HDRP : MMSpringFloatComponent + { + protected ColorAdjustments _colorAdjustments; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _colorAdjustments); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorAdjustments.saturation.value; + set => _colorAdjustments.saturation.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsSaturation_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsSaturation_HDRP.cs.meta new file mode 100644 index 0000000..4cbbb17 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringColorAdjustmentsSaturation_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0c6834fc909cbf439bdf1d669ef2958 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringDepthOfFieldFocusDistance_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringDepthOfFieldFocusDistance_HDRP.cs new file mode 100644 index 0000000..d5e00f2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringDepthOfFieldFocusDistance_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringDepthOfFieldFocusDistance_HDRP")] + public class MMSpringDepthOfFieldFocusDistance_HDRP : MMSpringFloatComponent + { + protected DepthOfField _depthOfField; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _depthOfField); + base.Initialization(); + } + + public override float TargetFloat + { + get => _depthOfField.focusDistance.value; + set => _depthOfField.focusDistance.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringDepthOfFieldFocusDistance_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringDepthOfFieldFocusDistance_HDRP.cs.meta new file mode 100644 index 0000000..1ba06c5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringDepthOfFieldFocusDistance_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7969c2e1fc64bc64b8e2c338f430fa49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringLensDistortionIntensity_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringLensDistortionIntensity_HDRP.cs new file mode 100644 index 0000000..0dee6bf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringLensDistortionIntensity_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringLensDistortionIntensity_HDRP")] + public class MMSpringLensDistortionIntensity_HDRP : MMSpringFloatComponent + { + protected LensDistortion _lensDistortion; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _lensDistortion); + base.Initialization(); + } + + public override float TargetFloat + { + get => _lensDistortion.intensity.value; + set => _lensDistortion.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringLensDistortionIntensity_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringLensDistortionIntensity_HDRP.cs.meta new file mode 100644 index 0000000..6b1deb6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringLensDistortionIntensity_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e43c981f3033d36468c3cf0e9cbb5ef2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringMotionBlurIntensity_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringMotionBlurIntensity_HDRP.cs new file mode 100644 index 0000000..8f7cfab --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringMotionBlurIntensity_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringMotionBlurIntensity_HDRP")] + public class MMSpringMotionBlurIntensity_HDRP : MMSpringFloatComponent + { + protected MotionBlur _motionBlur; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _motionBlur); + base.Initialization(); + } + + public override float TargetFloat + { + get => _motionBlur.intensity.value; + set => _motionBlur.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringMotionBlurIntensity_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringMotionBlurIntensity_HDRP.cs.meta new file mode 100644 index 0000000..1da07c8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringMotionBlurIntensity_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eab722862e080484cab1481e2481a922 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringPaniniProjectionDistance_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringPaniniProjectionDistance_HDRP.cs new file mode 100644 index 0000000..d4a659f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringPaniniProjectionDistance_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringPaniniProjectionDistance_HDRP")] + public class MMSpringPaniniProjectionDistance_HDRP : MMSpringFloatComponent + { + protected PaniniProjection _paniniProjection; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _paniniProjection); + base.Initialization(); + } + + public override float TargetFloat + { + get => _paniniProjection.distance.value; + set => _paniniProjection.distance.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringPaniniProjectionDistance_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringPaniniProjectionDistance_HDRP.cs.meta new file mode 100644 index 0000000..71866fb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringPaniniProjectionDistance_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20aa8b632ddbeab44ab5759e02005195 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteCenter_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteCenter_HDRP.cs new file mode 100644 index 0000000..1ca4d93 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteCenter_HDRP.cs @@ -0,0 +1,30 @@ +using UnityEngine; +#if MM_HDRP +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteCenter_HDRP")] + public class MMSpringVignetteCenter_HDRP : MMSpringVector2Component + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _vignette); + base.Initialization(); + } + + public override Vector2 TargetVector2 + { + get => _vignette.center.value; + set => _vignette.center.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteCenter_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteCenter_HDRP.cs.meta new file mode 100644 index 0000000..44b232c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteCenter_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9680118cd018daf4e92199c3b12ba729 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteColor_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteColor_HDRP.cs new file mode 100644 index 0000000..1e178f1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteColor_HDRP.cs @@ -0,0 +1,30 @@ +using UnityEngine; +#if MM_HDRP +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteColor_HDRP")] + public class MMSpringVignetteColor_HDRP : MMSpringColorComponent + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _vignette); + base.Initialization(); + } + + public override Color TargetColor + { + get => _vignette.color.value; + set => _vignette.color.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteColor_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteColor_HDRP.cs.meta new file mode 100644 index 0000000..badf678 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteColor_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15ea18286341f8e4aa898fb1b8eb2cfa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteIntensity_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteIntensity_HDRP.cs new file mode 100644 index 0000000..395b15b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteIntensity_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteIntensity_HDRP")] + public class MMSpringVignetteIntensity_HDRP : MMSpringFloatComponent + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _vignette); + base.Initialization(); + } + + public override float TargetFloat + { + get => _vignette.intensity.value; + set => _vignette.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteIntensity_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteIntensity_HDRP.cs.meta new file mode 100644 index 0000000..fe94f14 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringVignetteIntensity_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6cf2103244e0c94f993f2f0f281b0c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTemperature_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTemperature_HDRP.cs new file mode 100644 index 0000000..03751e3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTemperature_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringWhiteBalanceTemperature_HDRP")] + public class MMSpringWhiteBalanceTemperature_HDRP : MMSpringFloatComponent + { + protected WhiteBalance _whiteBalance; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _whiteBalance); + base.Initialization(); + } + + public override float TargetFloat + { + get => _whiteBalance.temperature.value; + set => _whiteBalance.temperature.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTemperature_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTemperature_HDRP.cs.meta new file mode 100644 index 0000000..ae423ee --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTemperature_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0516121ec1782264898972570320fbc9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTint_HDRP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTint_HDRP.cs new file mode 100644 index 0000000..7256e95 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTint_HDRP.cs @@ -0,0 +1,30 @@ +#if MM_HDRP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringWhiteBalanceTint_HDRP")] + public class MMSpringWhiteBalanceTint_HDRP : MMSpringFloatComponent + { + protected WhiteBalance _whiteBalance; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _whiteBalance); + base.Initialization(); + } + + public override float TargetFloat + { + get => _whiteBalance.tint.value; + set => _whiteBalance.tint.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTint_HDRP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTint_HDRP.cs.meta new file mode 100644 index 0000000..c15c424 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/HDRP/Springs/MMSpringWhiteBalanceTint_HDRP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 732c2868ba8b5ae43b78fceeb122bda4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools.meta new file mode 100644 index 0000000..9b9ef27 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 92069ac0f6705bb49b7e9b8cab5b050d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks.meta new file mode 100644 index 0000000..c3d6195 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f81ac7d016b3bba44b13af28b6f81506 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Blink.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Blink.cs new file mode 100644 index 0000000..af9bf10 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Blink.cs @@ -0,0 +1,126 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will trigger a MMBlink object, letting you blink something + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you trigger a blink on an MMBlink object.")] + [FeedbackPath("Renderer/MMBlink")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + public class MMF_Blink : MMF_Feedback + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get => MMFeedbacksInspectorColors.RendererColor; } + public override bool HasCustomInspectors { get { return true; } } + public override bool EvaluateRequiresSetup() => (TargetBlink == null); + public override string RequiredTargetText => TargetBlink != null ? TargetBlink.name : ""; + public override string RequiresSetupText => "This feedback requires that a TargetBlink be set to be able to work properly. You can set one below."; + #endif + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetBlink = FindAutomatedTarget(); + + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// the possible modes for this feedback, that correspond to MMBlink's public methods + public enum BlinkModes { Toggle, Start, Stop } + + [MMFInspectorGroup("Blink", true, 61, true)] + /// the target object to blink + [Tooltip("the target object to blink")] + public MMBlink TargetBlink; + /// an optional list of extra target objects to blink + [Tooltip("an optional list of extra target objects to blink")] + public List ExtraTargetBlinks; + /// the selected mode for this feedback + [Tooltip("the selected mode for this feedback")] + public BlinkModes BlinkMode = BlinkModes.Toggle; + /// the duration of the blink. You can set it manually, or you can press the GrabDurationFromBlink button to automatically compute it. For performance reasons, this isn't updated unless you press the button, make sure you do so if you change the blink's duration. + [Tooltip("the duration of the blink. You can set it manually, or you can press the GrabDurationFromBlink button to automatically compute it. For performance reasons, this isn't updated unless you press the button, make sure you do so if you change the blink's duration.")] + public float Duration; + public MMF_Button GrabDurationFromBlinkButton; + + /// + /// Initializes our duration button + /// + public override void InitializeCustomAttributes() + { + GrabDurationFromBlinkButton = new MMF_Button("Grab Duration From Blink Component", GrabDurationFromBlink); + } + + /// + /// On Custom play, we trigger our MMBlink object + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetBlink == null)) + { + return; + } + HandleBlink(TargetBlink); + foreach (MMBlink blink in ExtraTargetBlinks) + { + HandleBlink(blink); + } + } + + /// + /// Toggles, starts or stops blink on the target + /// + /// + protected virtual void HandleBlink(MMBlink target) + { + target.TimescaleMode = ComputedTimescaleMode; + switch (BlinkMode) + { + case BlinkModes.Toggle: + target.ToggleBlinking(); + break; + case BlinkModes.Start: + target.StartBlinking(); + break; + case BlinkModes.Stop: + target.StopBlinking(); + break; + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + TargetBlink.StopBlinking(); + foreach (MMBlink blink in ExtraTargetBlinks) + { + blink.StopBlinking(); + } + } + + /// + /// Grabs and stores the duration from our target blink component if one is set + /// + public virtual void GrabDurationFromBlink() + { + if (TargetBlink != null) + { + Duration = TargetBlink.Duration; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Blink.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Blink.cs.meta new file mode 100644 index 0000000..e7a0351 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Blink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b3c116d0e316af4f98aea90424ad690 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Broadcast.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Broadcast.cs new file mode 100644 index 0000000..1039d9b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Broadcast.cs @@ -0,0 +1,75 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you broadcast a float value to the MMRadio system + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you broadcast a float value to the MMRadio system.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("GameObject/Broadcast")] + public class MMF_Broadcast : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + #endif + public override bool HasChannel => true; + + [Header("Level")] + /// the curve to tween the intensity on + [Tooltip("the curve to tween the intensity on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType Curve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the intensity curve's 0 to + [Tooltip("the value to remap the intensity curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + /// the value to remap the intensity curve's 1 to + [Tooltip("the value to remap the intensity curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 1f; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantChange; + + protected MMF_BroadcastProxy _proxy; + + /// + /// On init we store our initial alpha + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + _proxy = Owner.gameObject.AddComponent(); + _proxy.Channel = Channel; + PrepareTargets(); + } + + /// + /// We setup our target with this object + /// + protected override void FillTargets() + { + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = Owner.gameObject; + receiver.TargetComponent = _proxy; + receiver.TargetPropertyName = "ThisLevel"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = Curve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantChange; + + _targets.Add(target); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Broadcast.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Broadcast.cs.meta new file mode 100644 index 0000000..badecd4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Broadcast.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f92a3f5abd60c5e41b92ebf0add536a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_BroadcastProxy.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_BroadcastProxy.cs new file mode 100644 index 0000000..01d9b2f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_BroadcastProxy.cs @@ -0,0 +1,51 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This component will be automatically added by the MMF_Broadcast feedback + /// + public class MMF_BroadcastProxy : MonoBehaviour + { + /// the channel on which to broadcast + [Tooltip("the channel on which to broadcast")] + [MMReadOnly] + public int Channel; + /// a debug view of the current level being broadcasted + [Tooltip("a debug view of the current level being broadcasted")] + [MMReadOnly] + public float DebugLevel; + /// whether or not a broadcast is in progress (will be false while the value is not changing, and thus not broadcasting) + [Tooltip("whether or not a broadcast is in progress (will be false while the value is not changing, and thus not broadcasting)")] + [MMReadOnly] + public bool BroadcastInProgress = false; + + public virtual float ThisLevel { get; set; } + protected float _levelLastFrame; + + /// + /// On Update we process our broadcast + /// + protected virtual void Update() + { + ProcessBroadcast(); + } + + /// + /// Broadcasts the value if needed + /// + protected virtual void ProcessBroadcast() + { + BroadcastInProgress = false; + if (ThisLevel != _levelLastFrame) + { + MMRadioLevelEvent.Trigger(Channel, ThisLevel); + BroadcastInProgress = true; + } + DebugLevel = ThisLevel; + _levelLastFrame = ThisLevel; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_BroadcastProxy.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_BroadcastProxy.cs.meta new file mode 100644 index 0000000..cff97ac --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_BroadcastProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8117ecb7d1e9e3a49bf38e7ab2c09ff7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_CanvasGroup.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_CanvasGroup.cs new file mode 100644 index 0000000..35e9189 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_CanvasGroup.cs @@ -0,0 +1,78 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the opacity of a canvas group over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the opacity of a canvas group over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/CanvasGroup")] + public class MMF_CanvasGroup : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetCanvasGroup == null); } + public override string RequiredTargetText { get { return TargetCanvasGroup != null ? TargetCanvasGroup.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetCanvasGroup be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetCanvasGroup = FindAutomatedTarget(); + + [MMFInspectorGroup("Canvas Group", true, 12, true)] + /// the receiver to write the level to + [Tooltip("the receiver to write the level to")] + public CanvasGroup TargetCanvasGroup; + + /// the curve to tween the opacity on + [Tooltip("the curve to tween the opacity on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType AlphaCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the opacity curve's 0 to + [Tooltip("the value to remap the opacity curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + /// the value to remap the opacity curve's 1 to + [Tooltip("the value to remap the opacity curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 1f; + /// the value to move the opacity to in instant mode + [Tooltip("the value to move the opacity to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantAlpha; + + public override void OnAddFeedback() + { + base.OnAddFeedback(); + RelativeValues = false; + } + + protected override void FillTargets() + { + if (TargetCanvasGroup == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetCanvasGroup.gameObject; + receiver.TargetComponent = TargetCanvasGroup; + receiver.TargetPropertyName = "alpha"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = AlphaCurve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantAlpha; + + _targets.Add(target); + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_CanvasGroup.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_CanvasGroup.cs.meta new file mode 100644 index 0000000..27fd545 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_CanvasGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bcfac83087655f42bcb7a42d7d02f05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugBreak.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugBreak.cs new file mode 100644 index 0000000..a6b04ae --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugBreak.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will force a break, pausing the editor + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will will force a break, pausing the editor")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Debug/Break")] + public class MMF_DebugLBreak : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the duration of this feedback is 0 + public override float FeedbackDuration { get { return 0f; } } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.DebugColor; } } + #endif + + /// + /// On Play we break + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + Debug.Break(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugBreak.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugBreak.cs.meta new file mode 100644 index 0000000..16c142b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugBreak.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af342e664060d4e42bd5f6a5753d95e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugComment.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugComment.cs new file mode 100644 index 0000000..268b4be --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugComment.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback doesn't do anything by default, it's just meant as a comment, you can store text in it for future reference, maybe to remember how you setup a particular MMFeedbacks. Optionally it can also output that comment to the console on Play. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback doesn't do anything by default, it's just meant as a comment, you can store text in it for future reference, maybe to remember how you setup a particular MMFeedbacks. Optionally it can also output that comment to the console on Play.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Debug/Comment")] + public class MMF_DebugComment : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.DebugColor; } } + #endif + + [MMFInspectorGroup("Comment", true, 61)] + /// the comment / note associated to this feedback + [Tooltip("the comment / note associated to this feedback")] + [TextArea(10,30)] + public string Comment; + + /// if this is true, the comment will be output to the console on Play + [Tooltip("if this is true, the comment will be output to the console on Play")] + public bool LogComment = false; + /// the color of the message when in DebugLogTime mode + [Tooltip("the color of the message when in DebugLogTime mode")] + [MMCondition("LogComment", true)] + public Color DebugColor = Color.gray; + + /// + /// On Play we output our message to the console if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || !LogComment) + { + return; + } + + MMDebug.DebugLogInfo(Comment); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugComment.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugComment.cs.meta new file mode 100644 index 0000000..e75d616 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugComment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e5ef4e0e1b94c54b97bc6387c8009bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugLog.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugLog.cs new file mode 100644 index 0000000..ca0ba4a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugLog.cs @@ -0,0 +1,82 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you output a message to the console, using a custom MM debug method, or Log, Assertion, Error or Warning logs. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you output a message to the console, using a custom MM debug method, or Log, Assertion, Error or Warning logs.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Debug/Log")] + public class MMF_DebugLog : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the duration of this feedback is 0 + public override float FeedbackDuration { get { return 0f; } } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.DebugColor; } } + #endif + + /// the possible debug modes + public enum DebugLogModes { DebugLogTime, Log, Assertion, Error, Warning } + + [MMFInspectorGroup("Debug", true, 17)] + /// the selected debug mode + [Tooltip("the selected debug mode")] + public DebugLogModes DebugLogMode = DebugLogModes.DebugLogTime; + + /// the message to display + [Tooltip("the message to display")] + [TextArea] + public string DebugMessage = "YOUR DEBUG MESSAGE GOES HERE"; + /// the color of the message when in DebugLogTime mode + [Tooltip("the color of the message when in DebugLogTime mode")] + [MMFEnumCondition("DebugLogMode", (int) DebugLogModes.DebugLogTime)] + public Color DebugColor = Color.cyan; + /// whether or not to display the frame count when in DebugLogTime mode + [Tooltip("whether or not to display the frame count when in DebugLogTime mode")] + [MMFEnumCondition("DebugLogMode", (int) DebugLogModes.DebugLogTime)] + public bool DisplayFrameCount = true; + + /// + /// On Play we output our message to the console using the selected mode + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (DebugLogMode) + { + case DebugLogModes.Assertion: + Debug.LogAssertion(DebugMessage); + break; + case DebugLogModes.Log: + Debug.Log(DebugMessage); + break; + case DebugLogModes.Error: + Debug.LogError(DebugMessage); + break; + case DebugLogModes.Warning: + Debug.LogWarning(DebugMessage); + break; + case DebugLogModes.DebugLogTime: + string color = "#" + ColorUtility.ToHtmlStringRGB(DebugColor); + MMDebug.DebugLogTime(DebugMessage, color, 3, DisplayFrameCount); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugLog.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugLog.cs.meta new file mode 100644 index 0000000..4b4a3f2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_DebugLog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18d70b42b0fd93e49b47f2970addf779 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fade.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fade.cs new file mode 100644 index 0000000..0b36289 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fade.cs @@ -0,0 +1,222 @@ +#if MM_UI +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; +using UnityEngine.UI; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will trigger a one time play on a target FloatController + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you trigger a fade event.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Camera/Fade")] + public class MMF_Fade : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.CameraColor; } } + public override string RequiredTargetText { get { return "ID "+ID; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + /// the different possible types of fades + public enum FadeTypes { FadeIn, FadeOut, Custom } + /// the different ways to send the position to the fader : + /// - FeedbackPosition : fade at the position of the feedback, plus an optional offset + /// - Transform : fade at the specified Transform's position, plus an optional offset + /// - WorldPosition : fade at the specified world position vector, plus an optional offset + /// - Script : the position passed in parameters when calling the feedback + public enum PositionModes { FeedbackPosition, Transform, WorldPosition, Script } + + [MMFInspectorGroup("Fade", true, 43)] + /// the type of fade we want to use when this feedback gets played + [Tooltip("the type of fade we want to use when this feedback gets played")] + public FadeTypes FadeType; + /// the ID of the fader(s) to pilot + [Tooltip("the ID of the fader(s) to pilot")] + public int ID = 0; + /// the duration (in seconds) of the fade + [Tooltip("the duration (in seconds) of the fade")] + public float Duration = 1f; + /// the curve to use for this fade + [Tooltip("the curve to use for this fade")] + public MMTweenType Curve = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + /// whether or not this fade should ignore timescale + [Tooltip("whether or not this fade should ignore timescale")] + public bool IgnoreTimeScale = true; + + [Header("Custom")] + /// the target alpha we're aiming for with this fade + [Tooltip("the target alpha we're aiming for with this fade")] + public float TargetAlpha; + + [Header("Position")] + /// the chosen way to position the fade + [Tooltip("the chosen way to position the fade")] + public PositionModes PositionMode = PositionModes.FeedbackPosition; + /// the transform on which to center the fade + [Tooltip("the transform on which to center the fade")] + [MMFEnumCondition("PositionMode", (int)PositionModes.Transform)] + public Transform TargetTransform; + /// the coordinates on which to center the fadet + [Tooltip("the coordinates on which to center the fade")] + [MMFEnumCondition("PositionMode", (int)PositionModes.WorldPosition)] + public Vector3 TargetPosition; + /// the position offset to apply when centering the fade + [Tooltip("the position offset to apply when centering the fade")] + public Vector3 PositionOffset; + + [Header("Optional Target")] + /// this field lets you bind a specific MMFader to this feedback. If left empty, the feedback will trigger a MMFadeEvent instead, targeting all matching faders. If you fill it, only that specific fader will be targeted. + [Tooltip("this field lets you bind a specific MMFader to this feedback. If left empty, the feedback will trigger a MMFadeEvent instead, targeting all matching faders. If you fill it, only that specific fader will be targeted.")] + public MMFader TargetFader; + + /// the duration of this feedback is the duration of the fade + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + protected Vector3 _position; + protected FadeTypes _fadeType; + + /// + /// On play we trigger the selected fade event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _position = GetPosition(position); + _fadeType = FadeType; + if (!NormalPlayDirection) + { + if (FadeType == FadeTypes.FadeIn) + { + _fadeType = FadeTypes.FadeOut; + } + else if (FadeType == FadeTypes.FadeOut) + { + _fadeType = FadeTypes.FadeIn; + } + } + + if (TargetFader != null) + { + switch (_fadeType) + { + case FadeTypes.Custom: + TargetFader.Fade(TargetAlpha, FeedbackDuration, Curve, IgnoreTimeScale); + break; + case FadeTypes.FadeIn: + TargetFader.FadeIn(FeedbackDuration, Curve, IgnoreTimeScale); + break; + case FadeTypes.FadeOut: + TargetFader.FadeOut(FeedbackDuration, Curve, IgnoreTimeScale); + break; + } + } + else + { + switch (_fadeType) + { + case FadeTypes.Custom: + MMFadeEvent.Trigger(FeedbackDuration, TargetAlpha, Curve, ID, IgnoreTimeScale, _position); + break; + case FadeTypes.FadeIn: + MMFadeInEvent.Trigger(FeedbackDuration, Curve, ID, IgnoreTimeScale, _position); + break; + case FadeTypes.FadeOut: + MMFadeOutEvent.Trigger(FeedbackDuration, Curve, ID, IgnoreTimeScale, _position); + break; + } + } + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMFadeStopEvent.Trigger(ID); + } + + /// + /// Computes the proper position for this fade + /// + /// + /// + protected virtual Vector3 GetPosition(Vector3 position) + { + switch (PositionMode) + { + case PositionModes.FeedbackPosition: + return Owner.transform.position + PositionOffset; + case PositionModes.Transform: + return TargetTransform.position + PositionOffset; + case PositionModes.WorldPosition: + return TargetPosition + PositionOffset; + case PositionModes.Script: + return position + PositionOffset; + default: + return position + PositionOffset; + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMFadeStopEvent.Trigger(ID, true); + } + + /// + /// Automatically tries to add a MMFader setup to the scene + /// + public override void AutomaticShakerSetup() + { + if (GameObject.FindObjectOfType() != null) + { + return; + } + + (Canvas canvas, bool createdNewCanvas) = Owner.gameObject.MMFindOrCreateObjectOfType("FadeCanvas", null); + canvas.renderMode = RenderMode.ScreenSpaceOverlay; + (Image image, bool createdNewImage) = canvas.gameObject.MMFindOrCreateObjectOfType("FadeImage", canvas.transform, true); + image.raycastTarget = false; + image.color = Color.black; + + RectTransform rectTransform = image.GetComponent(); + rectTransform.anchorMin = new Vector2(0f, 0f); + rectTransform.anchorMax = new Vector2(1f, 1f); + rectTransform.offsetMin = Vector2.zero; + rectTransform.offsetMax = Vector2.zero; + + image.gameObject.AddComponent(); + image.gameObject.GetComponent().alpha = 0; + image.gameObject.GetComponent().interactable = false; + + MMDebug.DebugLogInfo("Added a MMFader to the scene. You're all set."); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fade.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fade.cs.meta new file mode 100644 index 0000000..64f154a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fade.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0dc617b01bf230943a22cac5dec24291 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatController.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatController.cs new file mode 100644 index 0000000..adf89d9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatController.cs @@ -0,0 +1,241 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will trigger a one time play on a target FloatController + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you trigger a one time play on a target FloatController.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("GameObject/FloatController")] + public class MMF_FloatController : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the different possible modes + public enum Modes { OneTime, ToDestination } + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (TargetFloatController == null); } + public override string RequiredTargetText { get { return TargetFloatController != null ? TargetFloatController.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetFloatController be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasRandomness => true; + public override bool CanForceInitialValue => true; + public override bool ForceInitialValueDelayed => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetFloatController = FindAutomatedTarget(); + + [MMFInspectorGroup("Float Controller", true, 36, true)] + /// the mode this controller is in + [Tooltip("the mode this controller is in")] + public Modes Mode = Modes.OneTime; + /// the float controller to trigger a one time play on + [Tooltip("the float controller to trigger a one time play on")] + public FloatController TargetFloatController; + /// a list of extra and optional float controllers to trigger a one time play on + [Tooltip("a list of extra and optional float controllers to trigger a one time play on")] + public List ExtraTargetFloatControllers; + /// whether this should revert to original at the end + [Tooltip("whether this should revert to original at the end")] + public bool RevertToInitialValueAfterEnd = false; + /// the duration of the One Time shake + [Tooltip("the duration of the One Time shake")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public float OneTimeDuration = 1f; + /// the amplitude of the One Time shake (this will be multiplied by the curve's height) + [Tooltip("the amplitude of the One Time shake (this will be multiplied by the curve's height)")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public float OneTimeAmplitude = 1f; + /// the low value to remap the normalized curve value to + [Tooltip("the low value to remap the normalized curve value to")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public float OneTimeRemapMin = 0f; + /// the high value to remap the normalized curve value to + [Tooltip("the high value to remap the normalized curve value to")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public float OneTimeRemapMax = 1f; + /// the curve to apply to the one time shake + [Tooltip("the curve to apply to the one time shake")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public AnimationCurve OneTimeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to move this float controller to + [Tooltip("the value to move this float controller to")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationValue = 1f; + /// the duration over which to move the value + [Tooltip("the duration over which to move the value")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationDuration = 1f; + /// the curve over which to move the value in ToDestination mode + [Tooltip("the curve over which to move the value in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public AnimationCurve ToDestinationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + /// the duration of this feedback is the duration of the one time hit + public override float FeedbackDuration + { + get { return (Mode == Modes.OneTime) ? ApplyTimeMultiplier(OneTimeDuration) : ApplyTimeMultiplier(ToDestinationDuration); } + set { OneTimeDuration = value; ToDestinationDuration = value; } + } + + protected float _oneTimeDurationStorage; + protected float _oneTimeAmplitudeStorage; + protected float _oneTimeRemapMinStorage; + protected float _oneTimeRemapMaxStorage; + protected AnimationCurve _oneTimeCurveStorage; + protected float _toDestinationValueStorage; + protected float _toDestinationDurationStorage; + protected AnimationCurve _toDestinationCurveStorage; + protected bool _revertToInitialValueAfterEndStorage; + + /// + /// On init we grab our initial values on the target float controller + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + if (Active && (TargetFloatController != null)) + { + _oneTimeDurationStorage = TargetFloatController.OneTimeDuration; + _oneTimeAmplitudeStorage = TargetFloatController.OneTimeAmplitude; + _oneTimeCurveStorage = TargetFloatController.OneTimeCurve; + _oneTimeRemapMinStorage = TargetFloatController.OneTimeRemapMin; + _oneTimeRemapMaxStorage = TargetFloatController.OneTimeRemapMax; + _toDestinationCurveStorage = TargetFloatController.ToDestinationCurve; + _toDestinationDurationStorage = TargetFloatController.ToDestinationDuration; + _toDestinationValueStorage = TargetFloatController.ToDestinationValue; + _revertToInitialValueAfterEndStorage = TargetFloatController.RevertToInitialValueAfterEnd; + } + } + + /// + /// On play we trigger a one time or ToDestination play on our target float controller + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetFloatController == null)) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + HandleFloatController(TargetFloatController, intensityMultiplier); + foreach (FloatController floatController in ExtraTargetFloatControllers) + { + HandleFloatController(floatController, intensityMultiplier); + } + } + + /// + /// Applies values to and triggers the target float controller + /// + /// + /// + protected virtual void HandleFloatController(FloatController target, float intensityMultiplier) + { + target.RevertToInitialValueAfterEnd = RevertToInitialValueAfterEnd; + + if (Mode == Modes.OneTime) + { + target.OneTimeDuration = FeedbackDuration; + target.OneTimeAmplitude = OneTimeAmplitude; + target.OneTimeCurve = OneTimeCurve; + if (NormalPlayDirection) + { + target.OneTimeRemapMin = OneTimeRemapMin * intensityMultiplier; + target.OneTimeRemapMax = OneTimeRemapMax * intensityMultiplier; + } + else + { + target.OneTimeRemapMin = OneTimeRemapMax * intensityMultiplier; + target.OneTimeRemapMax = OneTimeRemapMin * intensityMultiplier; + } + target.OneTime(); + } + if (Mode == Modes.ToDestination) + { + target.ToDestinationCurve = ToDestinationCurve; + target.ToDestinationDuration = FeedbackDuration; + target.ToDestinationValue = ToDestinationValue; + target.ToDestination(); + } + } + + /// + /// On reset we reset our values on the target controller with the ones stored initially + /// + protected override void CustomReset() + { + base.CustomReset(); + if (Active && FeedbackTypeAuthorized && (TargetFloatController != null)) + { + ResetFloatController(TargetFloatController); + foreach (FloatController controller in ExtraTargetFloatControllers) + { + ResetFloatController(controller); + } + } + } + + protected virtual void ResetFloatController(FloatController controller) + { + controller.OneTimeDuration = _oneTimeDurationStorage; + controller.OneTimeAmplitude = _oneTimeAmplitudeStorage; + controller.OneTimeCurve = _oneTimeCurveStorage; + controller.OneTimeRemapMin = _oneTimeRemapMinStorage; + controller.OneTimeRemapMax = _oneTimeRemapMaxStorage; + controller.ToDestinationCurve = _toDestinationCurveStorage; + controller.ToDestinationDuration = _toDestinationDurationStorage; + controller.ToDestinationValue = _toDestinationValueStorage; + controller.RevertToInitialValueAfterEnd = _revertToInitialValueAfterEndStorage; + } + + + /// + /// On stop, we interrupt movement if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetFloatController != null) + { + TargetFloatController.Stop(); + foreach (FloatController controller in ExtraTargetFloatControllers) + { + controller.Stop(); + } + } + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetFloatController.RestoreInitialValues(); + foreach (FloatController controller in ExtraTargetFloatControllers) + { + controller.RestoreInitialValues(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatController.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatController.cs.meta new file mode 100644 index 0000000..74130f1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35b65ddee73b8544486c63441149886c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatingText.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatingText.cs new file mode 100644 index 0000000..a01290a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatingText.cs @@ -0,0 +1,159 @@ +using MoreMountains.Tools; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will request the spawn of a floating text, usually to signify damage, but not necessarily + /// This requires that a MMFloatingTextSpawner be correctly setup in the scene, otherwise nothing will happen. + /// To do so, create a new empty object, add a MMFloatingTextSpawner to it. Drag (at least) one MMFloatingText prefab into its PooledSimpleMMFloatingText slot. + /// You'll find such prefabs already made in the MMTools/Tools/MMFloatingText/Prefabs folder, but feel free to create your own. + /// Using that feedback will always spawn the same text. While this may be what you want, if you're using the Corgi Engine or TopDown Engine, you'll find dedicated versions + /// directly hooked to the Health component, letting you display damage taken. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will request the spawn of a floating text, usually to signify damage, but not necessarily. " + + "This requires that a MMFloatingTextSpawner be correctly setup in the scene, otherwise nothing will happen. " + + "To do so, create a new empty object, add a MMFloatingTextSpawner to it. Drag (at least) one MMFloatingText prefab into its PooledSimpleMMFloatingText slot. " + + "You'll find such prefabs already made in the MMTools/Tools/MMFloatingText/Prefabs folder, but feel free to create your own. " + + "Using that feedback will always spawn the same text. While this may be what you want, if you're using the Corgi Engine or TopDown Engine, you'll find dedicated versions " + + "directly hooked to the Health component, letting you display damage taken.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/Floating Text")] + public class MMF_FloatingText : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + #endif + + /// the duration of this feedback is a fixed value or the lifetime + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Lifetime); } set { Lifetime = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + /// the possible places where the floating text should spawn at + public enum PositionModes { TargetTransform, FeedbackPosition, PlayPosition } + + [MMFInspectorGroup("Floating Text", true, 64)] + /// the Intensity to spawn this text with, will act as a lifetime/movement/scale multiplier based on the spawner's settings + [Tooltip("the Intensity to spawn this text with, will act as a lifetime/movement/scale multiplier based on the spawner's settings")] + public float Intensity = 1f; + /// the value to display when spawning this text + [Tooltip("the value to display when spawning this text")] + public string Value = "100"; + /// if this is true, the intensity passed to this feedback will be the value displayed + [Tooltip("if this is true, the intensity passed to this feedback will be the value displayed")] + public bool UseIntensityAsValue = false; + + /// the possible methods that can be applied to the output value (when using intensity as the output value, string values won't get rounded) + public enum RoundingMethods { NoRounding, Round, Ceil, Floor } + + /// the rounding methods to apply to the output value (when using intensity as the output value, string values won't get rounded) + [Tooltip("the rounding methods to apply to the output value (when using intensity as the output value, string values won't get rounded)")] + [MMFInspectorGroup("Rounding", true, 68)] + public RoundingMethods RoundingMethod = RoundingMethods.NoRounding; + + [MMFInspectorGroup("Color", true, 65)] + /// whether or not to force a color on the new text, if not, the default colors of the spawner will be used + [Tooltip("whether or not to force a color on the new text, if not, the default colors of the spawner will be used")] + public bool ForceColor = false; + /// the gradient to apply over the lifetime of the text + [Tooltip("the gradient to apply over the lifetime of the text")] + [GradientUsage(true)] + public Gradient AnimateColorGradient = new Gradient(); + + [MMFInspectorGroup("Lifetime", true, 66)] + /// whether or not to force a lifetime on the new text, if not, the default colors of the spawner will be used + [Tooltip("whether or not to force a lifetime on the new text, if not, the default colors of the spawner will be used")] + public bool ForceLifetime = false; + /// the forced lifetime for the spawned text + [Tooltip("the forced lifetime for the spawned text")] + [MMFCondition("ForceLifetime", true)] + public float Lifetime = 0.5f; + + [MMFInspectorGroup("Position", true, 67)] + /// where to spawn the new text (at the position of the feedback, or on a specified Transform) + [Tooltip("where to spawn the new text (at the position of the feedback, or on a specified Transform)")] + public PositionModes PositionMode = PositionModes.FeedbackPosition; + /// in transform mode, the Transform on which to spawn the new floating text + [Tooltip("in transform mode, the Transform on which to spawn the new floating text")] + [MMFEnumCondition("PositionMode", (int)PositionModes.TargetTransform)] + public Transform TargetTransform; + /// the direction to apply to the new floating text (leave it to 0 to let the Spawner decide based on its settings) + [Tooltip("the direction to apply to the new floating text (leave it to 0 to let the Spawner decide based on its settings)")] + public Vector3 Direction = Vector3.zero; + + protected Vector3 _playPosition; + protected string _value; + + /// + /// On play we ask the spawner on the specified channel to spawn a new floating text + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + switch (PositionMode) + { + case PositionModes.FeedbackPosition: + _playPosition = Owner.transform.position; + break; + case PositionModes.PlayPosition: + _playPosition = position; + break; + case PositionModes.TargetTransform: + _playPosition = TargetTransform.position; + break; + } + + if (RoundingMethod != RoundingMethods.NoRounding) + { + switch (RoundingMethod) + { + case RoundingMethods.Ceil: + + + break; + } + } + + feedbacksIntensity = ApplyRounding(feedbacksIntensity); + + _value = UseIntensityAsValue ? feedbacksIntensity.ToString() : Value; + + MMFloatingTextSpawnEvent.Trigger(ChannelData, _playPosition, _value, Direction, Intensity * intensityMultiplier, ForceLifetime, Lifetime, ForceColor, AnimateColorGradient, ComputedTimescaleMode == TimescaleModes.Unscaled); + } + + protected virtual float ApplyRounding(float value) + { + if (RoundingMethod == RoundingMethods.NoRounding) + { + return value; + } + + switch (RoundingMethod) + { + case RoundingMethods.Round: + return Mathf.Round(value); + case RoundingMethods.Ceil: + return Mathf.Ceil(value); + case RoundingMethods.Floor: + return Mathf.Floor(value); + } + + return value; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatingText.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatingText.cs.meta new file mode 100644 index 0000000..cdcd28d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_FloatingText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b34371db751e55942bc9b51871b77ca1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fog.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fog.cs new file mode 100644 index 0000000..9e3c638 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fog.cs @@ -0,0 +1,251 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you animate the density, color, end and start distance of your scene's fog + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you animate the density, color, end and start distance of your scene's fog")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Renderer/Fog")] + public class MMF_Fog : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.RendererColor; } } + public override string RequiredTargetText { get { return Mode.ToString(); } } + #endif + public override bool HasRandomness => true; + public override bool HasCustomInspectors => true; + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + + [MMFInspectorGroup("Fog", true, 24)] + /// whether the feedback should affect the sprite renderer instantly or over a period of time + [Tooltip("whether the feedback should affect the sprite renderer instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the sprite renderer should change over time + [Tooltip("how long the sprite renderer should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 2f; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + [MMFInspectorGroup("Fog Density", true, 25)] + /// whether or not to modify the fog's density + [Tooltip("whether or not to modify the fog's density")] + public bool ModifyFogDensity = true; + /// a curve to use to animate the fog's density over time + [Tooltip("a curve to use to animate the fog's density over time")] + public MMTweenType DensityCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the fog's density curve zero value to + [Tooltip("the value to remap the fog's density curve zero value to")] + public float DensityRemapZero = 0.01f; + /// the value to remap the fog's density curve one value to + [Tooltip("the value to remap the fog's density curve one value to")] + public float DensityRemapOne = 0.05f; + /// the value to change the fog's density to when in instant mode + [Tooltip("the value to change the fog's density to when in instant mode")] + public float DensityInstantChange; + + [MMFInspectorGroup("Fog Start Distance", true, 26)] + /// whether or not to modify the fog's start distance + [Tooltip("whether or not to modify the fog's start distance")] + public bool ModifyStartDistance = true; + /// a curve to use to animate the fog's start distance over time + [Tooltip("a curve to use to animate the fog's start distance over time")] + public MMTweenType StartDistanceCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the fog's start distance curve zero value to + [Tooltip("the value to remap the fog's start distance curve zero value to")] + public float StartDistanceRemapZero = 0f; + /// the value to remap the fog's start distance curve one value to + [Tooltip("the value to remap the fog's start distance curve one value to")] + public float StartDistanceRemapOne = 0f; + /// the value to change the fog's start distance to when in instant mode + [Tooltip("the value to change the fog's start distance to when in instant mode")] + public float StartDistanceInstantChange; + + [MMFInspectorGroup("Fog End Distance", true, 27)] + /// whether or not to modify the fog's end distance + [Tooltip("whether or not to modify the fog's end distance")] + public bool ModifyEndDistance = true; + /// a curve to use to animate the fog's end distance over time + [Tooltip("a curve to use to animate the fog's end distance over time")] + public MMTweenType EndDistanceCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the fog's end distance curve zero value to + [Tooltip("the value to remap the fog's end distance curve zero value to")] + public float EndDistanceRemapZero = 0f; + /// the value to remap the fog's end distance curve one value to + [Tooltip("the value to remap the fog's end distance curve one value to")] + public float EndDistanceRemapOne = 300f; + /// the value to change the fog's end distance to when in instant mode + [Tooltip("the value to change the fog's end distance to when in instant mode")] + public float EndDistanceInstantChange; + + [MMFInspectorGroup("Fog Color", true, 28)] + /// whether or not to modify the fog's color + [Tooltip("whether or not to modify the fog's color")] + public bool ModifyColor = true; + /// the colors to apply to the sprite renderer over time + [Tooltip("the colors to apply to the sprite renderer over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public Gradient ColorOverTime; + /// the color to move to in instant mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Color InstantColor; + + /// the duration of this feedback is the duration of the sprite renderer, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { if (Mode != Modes.Instant) { Duration = value; } } } + + protected Coroutine _coroutine; + protected Color _initialColor; + protected float _initialStartDistance; + protected float _initialEndDistance; + protected float _initialDensity; + + /// + /// On Play we change the values of our fog + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _initialColor = RenderSettings.fogColor; + _initialStartDistance = RenderSettings.fogStartDistance; + _initialEndDistance = RenderSettings.fogEndDistance; + _initialDensity = RenderSettings.fogDensity; + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + switch (Mode) + { + case Modes.Instant: + if (ModifyColor) + { + RenderSettings.fogColor = InstantColor; + } + + if (ModifyStartDistance) + { + RenderSettings.fogStartDistance = StartDistanceInstantChange; + } + + if (ModifyEndDistance) + { + RenderSettings.fogEndDistance = EndDistanceInstantChange; + } + + if (ModifyFogDensity) + { + RenderSettings.fogDensity = DensityInstantChange * intensityMultiplier; + } + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(FogSequence(intensityMultiplier)); + break; + } + } + + /// + /// This coroutine will modify the values on the fog settings + /// + /// + protected virtual IEnumerator FogSequence(float intensityMultiplier) + { + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetFogValues(remappedTime, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetFogValues(FinalNormalizedTime, intensityMultiplier); + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// Sets the various values on the fog on a specified time (between 0 and 1) + /// + /// + protected virtual void SetFogValues(float time, float intensityMultiplier) + { + if (ModifyColor) + { + RenderSettings.fogColor = ColorOverTime.Evaluate(time); + } + + if (ModifyFogDensity) + { + RenderSettings.fogDensity = MMTween.Tween(time, 0f, 1f, DensityRemapZero, DensityRemapOne, DensityCurve) * intensityMultiplier; + } + + if (ModifyStartDistance) + { + RenderSettings.fogStartDistance = MMTween.Tween(time, 0f, 1f, StartDistanceRemapZero, StartDistanceRemapOne, StartDistanceCurve); + } + + if (ModifyEndDistance) + { + RenderSettings.fogEndDistance = MMTween.Tween(time, 0f, 1f, EndDistanceRemapZero, EndDistanceRemapOne, EndDistanceCurve); + } + } + + /// + /// Stops this feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + RenderSettings.fogColor = _initialColor; + RenderSettings.fogStartDistance = _initialStartDistance; + RenderSettings.fogEndDistance = _initialEndDistance; + RenderSettings.fogDensity = _initialDensity; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fog.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fog.cs.meta new file mode 100644 index 0000000..475e97f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Fog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab9c4511f66964b488597580ab1b228f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageAlpha.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageAlpha.cs new file mode 100644 index 0000000..01022ad --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageAlpha.cs @@ -0,0 +1,219 @@ +#if MM_UI +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the alpha of a target sprite renderer over time. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the alpha of a target Image over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/Image Alpha")] + public class MMF_ImageAlpha : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (BoundImage == null); } + public override string RequiredTargetText { get { return BoundImage != null ? BoundImage.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundImage be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasCustomInspectors => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundImage = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant, ToDestination } + + [MMFInspectorGroup("Target Image", true, 12, true)] + + /// the Image to affect when playing the feedback + [Tooltip("the Image to affect when playing the feedback")] + public Image BoundImage; + + [MMFInspectorGroup("Image Alpha Animation", true, 24)] + /// whether the feedback should affect the Image instantly or over a period of time + [Tooltip("whether the feedback should affect the Image instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the Image should change over time + [Tooltip("how long the Image should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ToDestination)] + public float Duration = 0.2f; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// the alpha to move to in instant mode + [Tooltip("the alpha to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantAlpha = 1f; + /// the curve to use when interpolating towards the destination alpha + [Tooltip("the curve to use when interpolating towards the destination alpha")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ToDestination)] + public MMTweenType Curve = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + /// the value to which the curve's 0 should be remapped + [Tooltip("the value to which the curve's 0 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float CurveRemapZero = 0f; + /// the value to which the curve's 1 should be remapped + [Tooltip("the value to which the curve's 1 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float CurveRemapOne = 1f; + /// the alpha to aim towards when in ToDestination mode + [Tooltip("the alpha to aim towards when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float DestinationAlpha = 1f; + /// if this is true, the target will be disabled when this feedbacks is stopped + [Tooltip("if this is true, the target will be disabled when this feedbacks is stopped")] + public bool DisableOnStop = false; + + /// the duration of this feedback is the duration of the Image, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + protected Coroutine _coroutine; + protected Color _imageColor; + protected Color _initialColor; + protected float _initialAlpha; + + /// + /// On Play we turn our Image on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + _initialColor = BoundImage.color; + Turn(true); + switch (Mode) + { + case Modes.Instant: + _imageColor = BoundImage.color; + _imageColor.a = InstantAlpha; + BoundImage.color = _imageColor; + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ImageSequence()); + break; + case Modes.ToDestination: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ImageSequence()); + break; + } + } + + /// + /// This coroutine will modify the values on the Image + /// + /// + protected virtual IEnumerator ImageSequence() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + _imageColor = BoundImage.color; + _initialAlpha = BoundImage.color.a; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetAlpha(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetAlpha(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// Sets the various values on the sprite renderer on a specified time (between 0 and 1) + /// + /// + protected virtual void SetAlpha(float time) + { + float newAlpha = 0f; + if (Mode == Modes.OverTime) + { + newAlpha = MMTween.Tween(time, 0f, 1f, CurveRemapZero, CurveRemapOne, Curve); + } + else if (Mode == Modes.ToDestination) + { + newAlpha = MMTween.Tween(time, 0f, 1f, _initialAlpha, DestinationAlpha, Curve); + } + + _imageColor.a = newAlpha; + + BoundImage.color = _imageColor; + } + + /// + /// Turns the sprite renderer off on stop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + IsPlaying = false; + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active && DisableOnStop) + { + Turn(false); + } + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + _coroutine = null; + } + + /// + /// Turns the sprite renderer on or off + /// + /// + protected virtual void Turn(bool status) + { + BoundImage.gameObject.SetActive(status); + BoundImage.enabled = status; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + BoundImage.color = _initialColor; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageAlpha.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageAlpha.cs.meta new file mode 100644 index 0000000..b250b1c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageAlpha.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14a47d8bf77ba3943a535dae0d46e99d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageFill.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageFill.cs new file mode 100644 index 0000000..776819e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageFill.cs @@ -0,0 +1,215 @@ +#if MM_UI +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the fill value of a target Image over time. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you modify the fill value of a target Image over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/Image Fill")] + public class MMF_ImageFill : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (BoundImage == null); } + public override string RequiredTargetText { get { return BoundImage != null ? BoundImage.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundImage be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasCustomInspectors => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundImage = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant, ToDestination } + + [MMFInspectorGroup("Target Image", true, 12, true)] + + /// the Image to affect when playing the feedback + [Tooltip("the Image to affect when playing the feedback")] + public Image BoundImage; + + [MMFInspectorGroup("Image Fill Animation", true, 24)] + /// whether the feedback should affect the Image instantly or over a period of time + [Tooltip("whether the feedback should affect the Image instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the Image should change over time + [Tooltip("how long the Image should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ToDestination)] + public float Duration = 0.2f; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// the fill to move to in instant mode + [Tooltip("the fill to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantFill = 1f; + /// the curve to use when interpolating towards the destination fill + [Tooltip("the curve to use when interpolating towards the destination fill")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ToDestination)] + public MMTweenType Curve = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + /// the value to which the curve's 0 should be remapped + [Tooltip("the value to which the curve's 0 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float CurveRemapZero = 0f; + /// the value to which the curve's 1 should be remapped + [Tooltip("the value to which the curve's 1 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float CurveRemapOne = 1f; + /// the fill to aim towards when in ToDestination mode + [Tooltip("the fill to aim towards when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float DestinationFill = 1f; + /// if this is true, the target will be disabled when this feedbacks is stopped + [Tooltip("if this is true, the target will be disabled when this feedbacks is stopped")] + public bool DisableOnStop = false; + + /// the duration of this feedback is the duration of the Image, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + protected Coroutine _coroutine; + protected float _initialFill; + protected bool _initialState; + + /// + /// On Play we turn our Image on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _initialState = BoundImage.gameObject.activeInHierarchy; + Turn(true); + _initialFill = BoundImage.fillAmount; + switch (Mode) + { + case Modes.Instant: + BoundImage.fillAmount = InstantFill; + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ImageSequence()); + break; + case Modes.ToDestination: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ImageSequence()); + break; + } + } + + /// + /// This coroutine will modify the values on the Image + /// + /// + protected virtual IEnumerator ImageSequence() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + _initialFill = BoundImage.fillAmount; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetFill(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetFill(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// Sets the various values on the sprite renderer on a specified time (between 0 and 1) + /// + /// + protected virtual void SetFill(float time) + { + float newFill = 0f; + if (Mode == Modes.OverTime) + { + newFill = MMTween.Tween(time, 0f, 1f, CurveRemapZero, CurveRemapOne, Curve); + } + else if (Mode == Modes.ToDestination) + { + newFill = MMTween.Tween(time, 0f, 1f, _initialFill, DestinationFill, Curve); + } + + BoundImage.fillAmount = newFill; + } + + /// + /// Turns the sprite renderer off on stop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + IsPlaying = false; + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active && DisableOnStop) + { + Turn(false); + } + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + } + _coroutine = null; + } + + /// + /// Turns the sprite renderer on or off + /// + /// + protected virtual void Turn(bool status) + { + BoundImage.gameObject.SetActive(status); + BoundImage.enabled = status; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + Turn(_initialState); + BoundImage.fillAmount = _initialFill; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageFill.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageFill.cs.meta new file mode 100644 index 0000000..7132729 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ImageFill.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95530134bb5ab7b4a959774f63c2e92f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_LoadScene.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_LoadScene.cs new file mode 100644 index 0000000..ebb07d2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_LoadScene.cs @@ -0,0 +1,145 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.SceneManagement; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will request the load of a new scene, using the method of your choice + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will request the load of a new scene, using the method of your choice")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Scene/Load Scene")] + public class MMF_LoadScene : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SceneColor; } } + public override bool EvaluateRequiresSetup() { return (DestinationSceneName == ""); } + public override string RequiredTargetText { get { return DestinationSceneName; } } + public override string RequiresSetupText { get { return "This feedback requires that you specify a DestinationSceneName below. Make sure you also add that destination scene to your Build Settings."; } } + #endif + + /// the possible ways to load a new scene : + /// - direct : uses Unity's SceneManager API + /// - direct additive : uses Unity's SceneManager API, but with additive mode (so loading the scene on top of the current one) + /// - MMSceneLoadingManager : the simple, original MM way of loading scenes + /// - MMAdditiveSceneLoadingManager : a more advanced way of loading scenes, with (way) more options + public enum LoadingModes { Direct, MMSceneLoadingManager, MMAdditiveSceneLoadingManager, DirectAdditive } + + [MMFInspectorGroup("Scene Loading", true, 57, true)] + /// the name of the loading screen scene to use + [Tooltip("the name of the loading screen scene to use - HAS TO BE ADDED TO YOUR BUILD SETTINGS")] + public string LoadingSceneName = "MMAdditiveLoadingScreen"; + /// the name of the destination scene + [Tooltip("the name of the destination scene - HAS TO BE ADDED TO YOUR BUILD SETTINGS")] + public string DestinationSceneName = ""; + + [Header("Mode")] + /// the loading mode to use + [Tooltip("the loading mode to use to load the destination scene : " + + "- direct : uses Unity's SceneManager API" + + "- MMSceneLoadingManager : the simple, original MM way of loading scenes" + + "- MMAdditiveSceneLoadingManager : a more advanced way of loading scenes, with (way) more options")] + public LoadingModes LoadingMode = LoadingModes.MMAdditiveSceneLoadingManager; + + [Header("Loading Scene Manager")] + /// the priority to use when loading the new scenes + [Tooltip("the priority to use when loading the new scenes")] + public ThreadPriority Priority = ThreadPriority.High; + /// whether or not to perform extra checks to make sure the loading screen and destination scene are in the build settings + [Tooltip("whether or not to perform extra checks to make sure the loading screen and destination scene are in the build settings")] + public bool SecureLoad = true; + /// the chosen way to unload scenes (none, only the active scene, all loaded scenes) + [Tooltip("the chosen way to unload scenes (none, only the active scene, all loaded scenes)")] + [MMFEnumCondition("LoadingMode", (int)LoadingModes.MMAdditiveSceneLoadingManager)] + public MMAdditiveSceneLoadingManagerSettings.UnloadMethods UnloadMethod = + MMAdditiveSceneLoadingManagerSettings.UnloadMethods.AllScenes; + /// the name of the anti spill scene to use when loading additively. + /// If left empty, that scene will be automatically created, but you can specify any scene to use for that. Usually you'll want your own anti spill scene to be just an empty scene, but you can customize its lighting settings for example. + [Tooltip("the name of the anti spill scene to use when loading additively." + + "If left empty, that scene will be automatically created, but you can specify any scene to use for that. Usually you'll want your own anti spill scene to be just an empty scene, but you can customize its lighting settings for example.")] + [MMFEnumCondition("LoadingMode", (int)LoadingModes.MMAdditiveSceneLoadingManager)] + public string AntiSpillSceneName = ""; + + [MMFInspectorGroup("Loading Scene Delays", true, 58)] + /// a delay (in seconds) to apply before the first fade plays + [Tooltip("a delay (in seconds) to apply before the first fade plays")] + public float BeforeEntryFadeDelay = 0f; + /// the duration (in seconds) of the entry fade + [Tooltip("the duration (in seconds) of the entry fade")] + public float EntryFadeDuration = 0.2f; + /// a delay (in seconds) to apply after the first fade plays + [Tooltip("a delay (in seconds) to apply after the first fade plays")] + public float AfterEntryFadeDelay = 0f; + /// a delay (in seconds) to apply before the exit fade plays + [Tooltip("a delay (in seconds) to apply before the exit fade plays")] + public float BeforeExitFadeDelay = 0f; + /// the duration (in seconds) of the exit fade + [Tooltip("the duration (in seconds) of the exit fade")] + public float ExitFadeDuration = 0.2f; + + [MMFInspectorGroup("Speed", true, 59)] + /// whether or not to interpolate progress (slower, but usually looks better and smoother) + [Tooltip("whether or not to interpolate progress (slower, but usually looks better and smoother)")] + public bool InterpolateProgress = true; + /// the speed at which the progress bar should move if interpolated + [Tooltip("the speed at which the progress bar should move if interpolated")] + public float ProgressInterpolationSpeed = 5f; + /// a list of progress intervals (values should be between 0 and 1) and their associated speeds, letting you have the bar progress less linearly + [Tooltip("a list of progress intervals (values should be between 0 and 1) and their associated speeds, letting you have the bar progress less linearly")] + public List SpeedIntervals; + + [MMFInspectorGroup("Transitions", true, 59)] + /// the order in which to play fades (really depends on the type of fader you have in your loading screen + [Tooltip("the order in which to play fades (really depends on the type of fader you have in your loading screen")] + public MMAdditiveSceneLoadingManager.FadeModes FadeMode = MMAdditiveSceneLoadingManager.FadeModes.FadeInThenOut; + /// the tween to use on the entry fade + [Tooltip("the tween to use on the entry fade")] + public MMTweenType EntryFadeTween = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// the tween to use on the exit fade + [Tooltip("the tween to use on the exit fade")] + public MMTweenType ExitFadeTween = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + + /// + /// On play, we request a load of the destination scene using hte specified method + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + switch (LoadingMode) + { + case LoadingModes.Direct: + SceneManager.LoadScene(DestinationSceneName); + break; + case LoadingModes.DirectAdditive: + SceneManager.LoadScene(DestinationSceneName, LoadSceneMode.Additive); + break; + case LoadingModes.MMSceneLoadingManager: + MMSceneLoadingManager.LoadScene(DestinationSceneName, LoadingSceneName); + break; + case LoadingModes.MMAdditiveSceneLoadingManager: + MMAdditiveSceneLoadingManager.LoadScene(DestinationSceneName, LoadingSceneName, + Priority, SecureLoad, InterpolateProgress, + BeforeEntryFadeDelay, EntryFadeDuration, + AfterEntryFadeDelay, + BeforeExitFadeDelay, ExitFadeDuration, + EntryFadeTween, ExitFadeTween, + ProgressInterpolationSpeed, FadeMode, UnloadMethod, AntiSpillSceneName, + SpeedIntervals); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_LoadScene.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_LoadScene.cs.meta new file mode 100644 index 0000000..708a6c9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_LoadScene.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4f6df1207b1c5e478e225b94a41fa42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMGameEvent.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMGameEvent.cs new file mode 100644 index 0000000..130bf99 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMGameEvent.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will trigger a MMGameEvent of the specified name when played + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will trigger a MMGameEvent of the specified name when played")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Events/MMGameEvent")] + public class MMF_MMGameEvent : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.EventsColor; } } + public override bool EvaluateRequiresSetup() { return (MMGameEventName == ""); } + public override string RequiredTargetText { get { return MMGameEventName; } } + public override string RequiresSetupText { get { return "This feedback requires that you specify a MMGameEventName below."; } } + #endif + + [MMFInspectorGroup("MMGameEvent", true, 57, true)] + public string MMGameEventName; + + [MMFInspectorGroup("Optional Payload", true, 58, true)] + public int IntParameter; + public Vector2 Vector2Parameter; + public Vector3 Vector3Parameter; + public bool BoolParameter; + public string StringParameter; + + /// + /// On Play we change the values of our fog + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMGameEvent.Trigger(MMGameEventName, IntParameter, Vector2Parameter, Vector3Parameter, BoolParameter, StringParameter); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMGameEvent.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMGameEvent.cs.meta new file mode 100644 index 0000000..f8e463f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMGameEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5093ea98124b9ba4f88d699459437e2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerAllSoundsControl.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerAllSoundsControl.cs new file mode 100644 index 0000000..1408c35 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerAllSoundsControl.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Threading.Tasks; +using MoreMountains.Tools; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A feedback used to control all sounds playing on the MMSoundManager at once. It'll let you pause, play, stop and free (stop and returns the audiosource to the pool) sounds. You will need a MMSoundManager in your scene for this to work. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Audio/MMSoundManager All Sounds Control")] + [FeedbackHelp("A feedback used to control all sounds playing on the MMSoundManager at once. It'll let you pause, play, stop and free (stop and returns the audiosource to the pool) sounds. You will need a MMSoundManager in your scene for this to work.")] + public class MMF_MMSoundManagerAllSoundsControl : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText { get { return ControlMode.ToString(); } } + #endif + + [MMFInspectorGroup("MMSoundManager All Sounds Control", true, 30)] + /// The selected control mode. + [Tooltip("The selected control mode")] + public MMSoundManagerAllSoundsControlEventTypes ControlMode = MMSoundManagerAllSoundsControlEventTypes.Pause; + + /// + /// On Play, we call the specified event, to be caught by the MMSoundManager + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (ControlMode) + { + case MMSoundManagerAllSoundsControlEventTypes.Pause: + MMSoundManagerAllSoundsControlEvent.Trigger(MMSoundManagerAllSoundsControlEventTypes.Pause); + break; + case MMSoundManagerAllSoundsControlEventTypes.Play: + MMSoundManagerAllSoundsControlEvent.Trigger(MMSoundManagerAllSoundsControlEventTypes.Play); + break; + case MMSoundManagerAllSoundsControlEventTypes.Stop: + MMSoundManagerAllSoundsControlEvent.Trigger(MMSoundManagerAllSoundsControlEventTypes.Stop); + break; + case MMSoundManagerAllSoundsControlEventTypes.Free: + MMSoundManagerAllSoundsControlEvent.Trigger(MMSoundManagerAllSoundsControlEventTypes.Free); + break; + case MMSoundManagerAllSoundsControlEventTypes.FreeAllButPersistent: + MMSoundManagerAllSoundsControlEvent.Trigger(MMSoundManagerAllSoundsControlEventTypes.FreeAllButPersistent); + break; + case MMSoundManagerAllSoundsControlEventTypes.FreeAllLooping: + MMSoundManagerAllSoundsControlEvent.Trigger(MMSoundManagerAllSoundsControlEventTypes.FreeAllLooping); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerAllSoundsControl.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerAllSoundsControl.cs.meta new file mode 100644 index 0000000..58bc918 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerAllSoundsControl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f641f9c946f40f346b424ed65100be88 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSaveLoad.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSaveLoad.cs new file mode 100644 index 0000000..e11b9e3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSaveLoad.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Threading.Tasks; +using MoreMountains.Tools; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you trigger save, load, and reset on MMSoundManager settings. You will need a MMSoundManager in your scene for this to work. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Audio/MMSoundManager Save and Load")] + [FeedbackHelp("This feedback will let you trigger save, load, and reset on MMSoundManager settings. You will need a MMSoundManager in your scene for this to work.")] + public class MMF_MMSoundManagerSaveLoad : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText { get { return Mode.ToString(); } } + #endif + + /// the possible modes you can use to interact with save settings + public enum Modes { Save, Load, Reset } + + [MMFInspectorGroup("MMSoundManager Save and Load", true, 30)] + /// the selected mode to interact with save settings on the MMSoundManager + [Tooltip("the selected mode to interact with save settings on the MMSoundManager")] + public Modes Mode = Modes.Save; + + /// + /// On Play, saves, loads or resets settings + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (Mode) + { + case Modes.Save: + MMSoundManagerEvent.Trigger(MMSoundManagerEventTypes.SaveSettings); + break; + case Modes.Load: + MMSoundManagerEvent.Trigger(MMSoundManagerEventTypes.LoadSettings); + break; + case Modes.Reset: + MMSoundManagerEvent.Trigger(MMSoundManagerEventTypes.ResetSettings); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSaveLoad.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSaveLoad.cs.meta new file mode 100644 index 0000000..9c856f2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSaveLoad.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 685b5496a166328449da980c010a79f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSound.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSound.cs new file mode 100644 index 0000000..5772eaf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSound.cs @@ -0,0 +1,743 @@ +using UnityEngine; +using System.Threading.Tasks; +using MoreMountains.Tools; +using UnityEngine.Audio; +using UnityEngine.SceneManagement; +using Object = UnityEngine.Object; +using Random = UnityEngine.Random; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you play a sound via the MMSoundManager. You will need a game object in your scene with a MMSoundManager object on it for this to work. + /// + [ExecuteAlways] + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Audio/MMSoundManager Sound")] + [FeedbackHelp("This feedback will let you play a sound via the MMSoundManager. You will need a game object in your scene with a MMSoundManager object on it for this to work.")] + public class MMF_MMSoundManagerSound : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + public override bool EvaluateRequiresSetup() + { + bool requiresSetup = false; + if (Sfx == null) + { + requiresSetup = true; + } + if ((RandomSfx != null) && (RandomSfx.Length > 0)) + { + requiresSetup = false; + foreach (AudioClip clip in RandomSfx) + { + if (clip == null) + { + requiresSetup = true; + } + } + } + if (SoundDataSO != null) + { + requiresSetup = false; + } + return requiresSetup; + } + public override string RequiredTargetText { get { return Sfx != null ? Sfx.name + " - ID:" + ID : ""; } } + + public override string RequiresSetupText { get { return "This feedback requires that you set an Audio clip in its Sfx slot below, or one or more clips in the Random Sfx array."; } } + #endif + + /// the duration of this feedback is the duration of the clip being played + public override float FeedbackDuration { get { return GetDuration(); } } + public override bool HasRandomness => true; + + [MMFInspectorGroup("Sound", true, 14, true)] + /// the sound clip to play + [Tooltip("the sound clip to play")] + public AudioClip Sfx; + + [MMFInspectorGroup("Random Sound", true, 34, true)] + + /// an array to pick a random sfx from + [Tooltip("an array to pick a random sfx from")] + public AudioClip[] RandomSfx; + /// if this is true, random sfx audio clips will be played in sequential order instead of at random + [Tooltip("if this is true, random sfx audio clips will be played in sequential order instead of at random")] + public bool SequentialOrder = false; + /// if we're in sequential order, determines whether or not to hold at the last index, until either a cooldown is met, or the ResetSequentialIndex method is called + [Tooltip("if we're in sequential order, determines whether or not to hold at the last index, until either a cooldown is met, or the ResetSequentialIndex method is called")] + [MMFCondition("SequentialOrder", true)] + public bool SequentialOrderHoldLast = false; + /// if we're in sequential order hold last mode, index will reset to 0 automatically after this duration, unless it's 0, in which case it'll be ignored + [Tooltip("if we're in sequential order hold last mode, index will reset to 0 automatically after this duration, unless it's 0, in which case it'll be ignored")] + [MMFCondition("SequentialOrderHoldLast", true)] + public float SequentialOrderHoldCooldownDuration = 2f; + /// if this is true, sfx will be picked at random until all have been played. once this happens, the list is shuffled again, and it starts over + [Tooltip("if this is true, sfx will be picked at random until all have been played. once this happens, the list is shuffled again, and it starts over")] + public bool RandomUnique = false; + + [MMFInspectorGroup("Scriptable Object", true, 14, true)] + /// a scriptable object (created via the Create/MoreMountains/Audio/MMF_SoundData menu) to define settings that will override all other settings on this feedback + [Tooltip("a scriptable object (created via the Create/MoreMountains/Audio/MMF_SoundData menu) to define settings that will override all other settings on this feedback")] + public MMF_MMSoundManagerSoundData SoundDataSO; + + [MMFInspectorGroup("Sound Properties", true, 24)] + [Header("Volume")] + /// the minimum volume to play the sound at + [Tooltip("the minimum volume to play the sound at")] + [Range(0f,2f)] + public float MinVolume = 1f; + /// the maximum volume to play the sound at + [Tooltip("the maximum volume to play the sound at")] + [Range(0f,2f)] + public float MaxVolume = 1f; + + [Header("Pitch")] + /// the minimum pitch to play the sound at + [Tooltip("the minimum pitch to play the sound at")] + [Range(-3f,3f)] + public float MinPitch = 1f; + /// the maximum pitch to play the sound at + [Tooltip("the maximum pitch to play the sound at")] + [Range(-3f,3f)] + public float MaxPitch = 1f; + + [MMFInspectorGroup("SoundManager Options", true, 28)] + /// the track on which to play the sound. Pick the one that matches the nature of your sound + [Tooltip("the track on which to play the sound. Pick the one that matches the nature of your sound")] + public MMSoundManager.MMSoundManagerTracks MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Sfx; + /// the ID of the sound. This is useful if you plan on using sound control feedbacks on it afterwards. + [Tooltip("the ID of the sound. This is useful if you plan on using sound control feedbacks on it afterwards.")] + public int ID = 0; + /// the AudioGroup on which to play the sound. If you're already targeting a preset track, you can leave it blank, otherwise the group you specify here will override it. + [Tooltip("the AudioGroup on which to play the sound. If you're already targeting a preset track, you can leave it blank, otherwise the group you specify here will override it.")] + public AudioMixerGroup AudioGroup = null; + /// if (for some reason) you've already got an audiosource and wouldn't like to use the built-in pool system, you can specify it here + [Tooltip("if (for some reason) you've already got an audiosource and wouldn't like to use the built-in pool system, you can specify it here")] + public AudioSource RecycleAudioSource = null; + /// whether or not this sound should loop + [Tooltip("whether or not this sound should loop")] + public bool Loop = false; + /// whether or not this sound should continue playing when transitioning to another scene + [Tooltip("whether or not this sound should continue playing when transitioning to another scene")] + public bool Persistent = false; + /// whether or not this sound should play if the same sound clip is already playing + [Tooltip("whether or not this sound should play if the same sound clip is already playing")] + public bool DoNotPlayIfClipAlreadyPlaying = false; + /// if this is true, this sound will stop playing when stopping the feedback + [Tooltip("if this is true, this sound will stop playing when stopping the feedback")] + public bool StopSoundOnFeedbackStop = false; + + [MMFInspectorGroup("Fade", true, 30)] + /// whether or not to fade this sound in when playing it + [Tooltip("whether or not to fade this sound in when playing it")] + public bool Fade = false; + /// if fading, the volume at which to start the fade + [Tooltip("if fading, the volume at which to start the fade")] + [MMCondition("Fade", true)] + public float FadeInitialVolume = 0f; + /// if fading, the duration of the fade, in seconds + [Tooltip("if fading, the duration of the fade, in seconds")] + [MMCondition("Fade", true)] + public float FadeDuration = 1f; + /// if fading, the tween over which to fade the sound + [Tooltip("if fading, the tween over which to fade the sound ")] + [MMCondition("Fade", true)] + public MMTweenType FadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInOutQuartic); + + [MMFInspectorGroup("Solo", true, 32)] + /// whether or not this sound should play in solo mode over its destination track. If yes, all other sounds on that track will be muted when this sound starts playing + [Tooltip("whether or not this sound should play in solo mode over its destination track. If yes, all other sounds on that track will be muted when this sound starts playing")] + public bool SoloSingleTrack = false; + /// whether or not this sound should play in solo mode over all other tracks. If yes, all other tracks will be muted when this sound starts playing + [Tooltip("whether or not this sound should play in solo mode over all other tracks. If yes, all other tracks will be muted when this sound starts playing")] + public bool SoloAllTracks = false; + /// if in any of the above solo modes, AutoUnSoloOnEnd will unmute the track(s) automatically once that sound stops playing + [Tooltip("if in any of the above solo modes, AutoUnSoloOnEnd will unmute the track(s) automatically once that sound stops playing")] + public bool AutoUnSoloOnEnd = false; + + [MMFInspectorGroup("Spatial Settings", true, 33)] + /// Pans a playing sound in a stereo way (left or right). This only applies to sounds that are Mono or Stereo. + [Tooltip("Pans a playing sound in a stereo way (left or right). This only applies to sounds that are Mono or Stereo.")] + [Range(-1f,1f)] + public float PanStereo; + /// Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D. + [Tooltip("Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D.")] + [Range(0f,1f)] + public float SpatialBlend; + /// a Transform this sound can 'attach' to and follow it along as it plays + [Tooltip("a Transform this sound can 'attach' to and follow it along as it plays")] + public Transform AttachToTransform; + + [MMFInspectorGroup("Effects", true, 36)] + /// Bypass effects (Applied from filter components or global listener filters). + [Tooltip("Bypass effects (Applied from filter components or global listener filters).")] + public bool BypassEffects = false; + /// When set global effects on the AudioListener will not be applied to the audio signal generated by the AudioSource. Does not apply if the AudioSource is playing into a mixer group. + [Tooltip("When set global effects on the AudioListener will not be applied to the audio signal generated by the AudioSource. Does not apply if the AudioSource is playing into a mixer group.")] + public bool BypassListenerEffects = false; + /// When set doesn't route the signal from an AudioSource into the global reverb associated with reverb zones. + [Tooltip("When set doesn't route the signal from an AudioSource into the global reverb associated with reverb zones.")] + public bool BypassReverbZones = false; + /// Sets the priority of the AudioSource. + [Tooltip("Sets the priority of the AudioSource.")] + [Range(0, 256)] + public int Priority = 128; + /// The amount by which the signal from the AudioSource will be mixed into the global reverb associated with the Reverb Zones. + [Tooltip("The amount by which the signal from the AudioSource will be mixed into the global reverb associated with the Reverb Zones.")] + [Range(0f,1.1f)] + public float ReverbZoneMix = 1f; + + [MMFInspectorGroup("Time Options", true, 15)] + /// a timestamp (in seconds, randomized between the defined min and max) at which the sound will start playing, equivalent to the Audiosource API's Time) + [Tooltip("a timestamp (in seconds, randomized between the defined min and max) at which the sound will start playing, equivalent to the Audiosource API's Time)")] + [MMVector("Min", "Max")] + public Vector2 PlaybackTime = new Vector2(0f, 0f); + /// a duration (in seconds, randomized between the defined min and max) for which the sound will play before stopping. Ignored if min and max are zero. + [Tooltip("a duration (in seconds, randomized between the defined min and max) for which the sound will play before stopping. Ignored if min and max are zero.")] + [MMVector("Min", "Max")] + public Vector2 PlaybackDuration = new Vector2(0f, 0f); + + [MMFInspectorGroup("3D Sound Settings", true, 37)] + /// Sets the Doppler scale for this AudioSource. + [Tooltip("Sets the Doppler scale for this AudioSource.")] + [Range(0f,5f)] + public float DopplerLevel = 1f; + /// Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space. + [Tooltip("Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space.")] + [Range(0,360)] + public int Spread = 0; + /// Sets/Gets how the AudioSource attenuates over distance. + [Tooltip("Sets/Gets how the AudioSource attenuates over distance.")] + public AudioRolloffMode RolloffMode = AudioRolloffMode.Logarithmic; + /// Within the Min distance the AudioSource will cease to grow louder in volume. + [Tooltip("Within the Min distance the AudioSource will cease to grow louder in volume.")] + public float MinDistance = 1f; + /// (Logarithmic rolloff) MaxDistance is the distance a sound stops attenuating at. + [Tooltip("(Logarithmic rolloff) MaxDistance is the distance a sound stops attenuating at.")] + public float MaxDistance = 500f; + /// whether or not to use a custom curve for custom volume rolloff + [Tooltip("whether or not to use a custom curve for custom volume rolloff")] + public bool UseCustomRolloffCurve = false; + /// the curve to use for custom volume rolloff if UseCustomRolloffCurve is true + [Tooltip("the curve to use for custom volume rolloff if UseCustomRolloffCurve is true")] + [MMFCondition("UseCustomRolloffCurve", true)] + public AnimationCurve CustomRolloffCurve; + /// whether or not to use a custom curve for spatial blend + [Tooltip("whether or not to use a custom curve for spatial blend")] + public bool UseSpatialBlendCurve = false; + /// the curve to use for custom spatial blend if UseSpatialBlendCurve is true + [Tooltip("the curve to use for custom spatial blend if UseSpatialBlendCurve is true")] + [MMFCondition("UseSpatialBlendCurve", true)] + public AnimationCurve SpatialBlendCurve; + /// whether or not to use a custom curve for reverb zone mix + [Tooltip("whether or not to use a custom curve for reverb zone mix")] + public bool UseReverbZoneMixCurve = false; + /// the curve to use for custom reverb zone mix if UseReverbZoneMixCurve is true + [Tooltip("the curve to use for custom reverb zone mix if UseReverbZoneMixCurve is true")] + [MMFCondition("UseReverbZoneMixCurve", true)] + public AnimationCurve ReverbZoneMixCurve; + /// whether or not to use a custom curve for spread + [Tooltip("whether or not to use a custom curve for spread")] + public bool UseSpreadCurve = false; + /// the curve to use for custom spread if UseSpreadCurve is true + [Tooltip("the curve to use for custom spread if UseSpreadCurve is true")] + [MMFCondition("UseSpreadCurve", true)] + public AnimationCurve SpreadCurve; + + [MMFInspectorGroup("Debug", true, 31)] + /// whether or not to draw sound falloff gizmos when this MMF Player is selected + [Tooltip("whether or not to draw sound falloff gizmos when this MMF Player is selected")] + public bool DrawGizmos = false; + /// an object to use as the center of the gizmos. If left empty, this MMF Player's position will be used. + [Tooltip("an object to use as the center of the gizmos. If left empty, this MMF Player's position will be used.")] + [MMFCondition("DrawGizmos", true)] + public Transform GizmosCenter; + /// the color to use to draw the min distance sphere of the sound falloff gizmos + [Tooltip("the color to use to draw the min distance sphere of the sound falloff gizmos")] + [MMFCondition("DrawGizmos", true)] + public Color MinDistanceColor = MMColors.CadetBlue; + /// the color to use to draw the max distance sphere of the sound falloff gizmos + [Tooltip("the color to use to draw the max distance sphere of the sound falloff gizmos")] + [MMFCondition("DrawGizmos", true)] + public Color MaxDistanceColor = MMColors.Orangered; + /// a test button used to play the sound in inspector + public MMF_Button TestPlayButton; + /// a test button used to stop the sound in inspector + public MMF_Button TestStopButton; + /// a test button used to stop the sound in inspector + public MMF_Button ResetSequentialIndexButton; + + protected AudioClip _randomClip; + protected AudioSource _editorAudioSource; + protected MMSoundManagerPlayOptions _options; + protected AudioSource _playedAudioSource; + protected float _randomPlaybackTime; + protected float _randomPlaybackDuration; + protected int _currentIndex = 0; + protected Vector3 _gizmoCenter; + protected MMShufflebag _randomUniqueShuffleBag; + protected AudioClip _lastPlayedClip; + + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + HandleSO(); + + _lastPlayedClip = null; + + if (RandomUnique) + { + _randomUniqueShuffleBag = new MMShufflebag(RandomSfx.Length); + for (int i = 0; i < RandomSfx.Length; i++) + { + _randomUniqueShuffleBag.Add(i,1); + } + } + } + + /// + /// Initializes the debug buttons + /// + public override void InitializeCustomAttributes() + { + base.InitializeCustomAttributes(); + TestPlayButton = new MMF_Button("Debug Play Sound", TestPlaySound); + TestStopButton = new MMF_Button("Debug Stop Sound", TestStopSound); + ResetSequentialIndexButton = new MMF_Button("Reset Sequential Index", ResetSequentialIndex); + } + + /// + /// Plays either a random sound or the specified sfx + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + + if (RandomSfx.Length > 0) + { + _randomClip = PickRandomClip(); + + if (_randomClip != null) + { + PlaySound(_randomClip, position, intensityMultiplier); + return; + } + } + + if (Sfx != null) + { + PlaySound(Sfx, position, intensityMultiplier); + return; + } + } + + /// + /// On Stop, we stop our sound if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (StopSoundOnFeedbackStop && (_playedAudioSource != null)) + { + _playedAudioSource.Stop(); + MMSoundManager.Instance.FreeSound(_playedAudioSource); + } + } + + /// + /// If a scriptable object is specified, we grab its values + /// + protected virtual void HandleSO() + { + if (SoundDataSO == null) + { + return; + } + + Sfx = SoundDataSO.Sfx; + RandomSfx = SoundDataSO.RandomSfx; + SequentialOrder = SoundDataSO.SequentialOrder; + SequentialOrderHoldLast = SoundDataSO.SequentialOrderHoldLast; + SequentialOrderHoldCooldownDuration = SoundDataSO.SequentialOrderHoldCooldownDuration; + RandomUnique = SoundDataSO.RandomUnique; + MinVolume = SoundDataSO.MinVolume; + MaxVolume = SoundDataSO.MaxVolume; + MinPitch = SoundDataSO.MinPitch; + MaxPitch = SoundDataSO.MaxPitch; + PlaybackTime = SoundDataSO.PlaybackTime; + PlaybackDuration = SoundDataSO.PlaybackDuration; + MmSoundManagerTrack = SoundDataSO.MmSoundManagerTrack; + ID = SoundDataSO.ID; + AudioGroup = SoundDataSO.AudioGroup; + RecycleAudioSource = SoundDataSO.RecycleAudioSource; + Loop = SoundDataSO.Loop; + Persistent = SoundDataSO.Persistent; + DoNotPlayIfClipAlreadyPlaying = SoundDataSO.DoNotPlayIfClipAlreadyPlaying; + StopSoundOnFeedbackStop = SoundDataSO.StopSoundOnFeedbackStop; + Fade = SoundDataSO.Fade; + FadeInitialVolume = SoundDataSO.FadeInitialVolume; + FadeDuration = SoundDataSO.FadeDuration; + FadeTween = SoundDataSO.FadeTween; + SoloSingleTrack = SoundDataSO.SoloSingleTrack; + SoloAllTracks = SoundDataSO.SoloAllTracks; + AutoUnSoloOnEnd = SoundDataSO.AutoUnSoloOnEnd; + PanStereo = SoundDataSO.PanStereo; + SpatialBlend = SoundDataSO.SpatialBlend; + AttachToTransform = SoundDataSO.AttachToTransform; + BypassEffects = SoundDataSO.BypassEffects; + BypassListenerEffects = SoundDataSO.BypassListenerEffects; + BypassReverbZones = SoundDataSO.BypassReverbZones; + Priority = SoundDataSO.Priority; + ReverbZoneMix = SoundDataSO.ReverbZoneMix; + DopplerLevel = SoundDataSO.DopplerLevel; + Spread = SoundDataSO.Spread; + RolloffMode = SoundDataSO.RolloffMode; + MinDistance = SoundDataSO.MinDistance; + MaxDistance = SoundDataSO.MaxDistance; + UseCustomRolloffCurve = SoundDataSO.UseCustomRolloffCurve; + CustomRolloffCurve = SoundDataSO.CustomRolloffCurve; + UseSpatialBlendCurve = SoundDataSO.UseSpatialBlendCurve; + SpatialBlendCurve = SoundDataSO.SpatialBlendCurve; + UseReverbZoneMixCurve = SoundDataSO.UseReverbZoneMixCurve; + ReverbZoneMixCurve = SoundDataSO.ReverbZoneMixCurve; + UseSpreadCurve = SoundDataSO.UseSpreadCurve; + SpreadCurve = SoundDataSO.SpreadCurve; + } + + /// + /// Randomizes playback time and playback duration + /// + public virtual void RandomizeTimes() + { + _randomPlaybackTime = Random.Range(PlaybackTime.x, PlaybackTime.y); + _randomPlaybackDuration = Random.Range(PlaybackDuration.x, PlaybackDuration.y); + Owner.ComputeCachedTotalDuration(); + } + + /// + /// Triggers a play sound event + /// + /// + /// + /// + protected virtual void PlaySound(AudioClip sfx, Vector3 position, float intensity) + { + if (DoNotPlayIfClipAlreadyPlaying) + { + if ((MMSoundManager.Instance.FindByClip(sfx) != null) && (MMSoundManager.Instance.FindByClip(sfx).isPlaying)) + { + return; + } + } + + float volume = Random.Range(MinVolume, MaxVolume); + + if (!Timing.ConstantIntensity) + { + volume = volume * intensity; + } + + float pitch = Random.Range(MinPitch, MaxPitch); + RandomizeTimes(); + + int timeSamples = NormalPlayDirection ? 0 : sfx.samples - 1; + + _options.MmSoundManagerTrack = MmSoundManagerTrack; + _options.Location = position; + _options.Loop = Loop; + _options.Volume = volume; + _options.ID = ID; + _options.Fade = Fade; + _options.FadeInitialVolume = FadeInitialVolume; + _options.FadeDuration = FadeDuration; + _options.FadeTween = FadeTween; + _options.Persistent = Persistent; + _options.RecycleAudioSource = RecycleAudioSource; + _options.AudioGroup = AudioGroup; + _options.Pitch = pitch; + _options.PlaybackTime = _randomPlaybackTime; + _options.PlaybackDuration = _randomPlaybackDuration; + _options.PanStereo = PanStereo; + _options.SpatialBlend = SpatialBlend; + _options.SoloSingleTrack = SoloSingleTrack; + _options.SoloAllTracks = SoloAllTracks; + _options.AutoUnSoloOnEnd = AutoUnSoloOnEnd; + _options.BypassEffects = BypassEffects; + _options.BypassListenerEffects = BypassListenerEffects; + _options.BypassReverbZones = BypassReverbZones; + _options.Priority = Priority; + _options.ReverbZoneMix = ReverbZoneMix; + _options.DopplerLevel = DopplerLevel; + _options.Spread = Spread; + _options.RolloffMode = RolloffMode; + _options.MinDistance = MinDistance; + _options.MaxDistance = MaxDistance; + _options.AttachToTransform = AttachToTransform; + _options.UseSpreadCurve = UseSpreadCurve; + _options.SpreadCurve = SpreadCurve; + _options.UseCustomRolloffCurve = UseCustomRolloffCurve; + _options.CustomRolloffCurve = CustomRolloffCurve; + _options.UseSpatialBlendCurve = UseSpatialBlendCurve; + _options.SpatialBlendCurve = SpatialBlendCurve; + _options.UseReverbZoneMixCurve = UseReverbZoneMixCurve; + _options.ReverbZoneMixCurve = ReverbZoneMixCurve; + _options.DoNotAutoRecycleIfNotDonePlaying = true; + + _playedAudioSource = MMSoundManagerSoundPlayEvent.Trigger(sfx, _options); + + _lastPlayTimestamp = FeedbackTime; + _lastPlayedClip = sfx; + } + + /// + /// Returns the duration of the sound, or of the longest of the random sounds + /// + /// + protected virtual float GetDuration() + { + if (SoundDataSO != null) + { + return ComputeDuration(SoundDataSO.Sfx, SoundDataSO.RandomSfx); + } + else + { + return ComputeDuration(Sfx, RandomSfx); + } + } + + protected virtual float ComputeDuration(AudioClip sfx, AudioClip[] randomSfx) + { + if (sfx != null) + { + return (_randomPlaybackDuration > 0) ? _randomPlaybackDuration : sfx.length - _randomPlaybackTime; + } + + float longest = 0f; + if ((randomSfx != null) && (randomSfx.Length > 0)) + { + if (_lastPlayedClip != null) + { + return _lastPlayedClip.length; + } + + foreach (AudioClip clip in randomSfx) + { + if ((clip != null) && (clip.length > longest)) + { + longest = clip.length; + } + } + + return (_randomPlaybackDuration > 0) ? _randomPlaybackDuration : longest - _randomPlaybackTime; + } + + return 0f; + } + + public override void OnDrawGizmosSelectedHandler() + { + if (!DrawGizmos) + { + return; + } + + _gizmoCenter = GizmosCenter != null ? GizmosCenter.position : Owner.transform.position; + Gizmos.color = MinDistanceColor; + Gizmos.DrawWireSphere(_gizmoCenter, MinDistance); + Gizmos.color = MaxDistanceColor; + Gizmos.DrawWireSphere(_gizmoCenter, MaxDistance); + } + + /// + /// Automatically tries to add a MMSoundManager to the scene if none are present + /// + public override void AutomaticShakerSetup() + { + MMSoundManager soundManager = (MMSoundManager)Object.FindObjectOfType(typeof(MMSoundManager)); + if (soundManager == null) + { + GameObject soundManagerGo = new GameObject("MMSoundManager"); + soundManagerGo.AddComponent(); + MMDebug.DebugLogInfo( "Added a MMSoundManager to the scene. You're all set."); + } + } + + #region TestMethods + + /// + /// A test method that creates an audiosource, plays it, and destroys itself after play + /// + protected virtual async void TestPlaySound() + { + AudioClip tmpAudioClip = null; + + if (Sfx != null) + { + tmpAudioClip = Sfx; + } + + if ((RandomSfx != null) && (RandomSfx.Length > 0)) + { + tmpAudioClip = PickRandomClip(); + } + + if (tmpAudioClip == null) + { + Debug.LogError(Label + " on " + Owner.gameObject.name + " can't play in editor mode, you haven't set its Sfx."); + return; + } + + float volume = Random.Range(MinVolume, MaxVolume); + float pitch = Random.Range(MinPitch, MaxPitch); + RandomizeTimes(); + GameObject temporaryAudioHost = new GameObject("EditorTestAS_WillAutoDestroy"); + SceneManager.MoveGameObjectToScene(temporaryAudioHost.gameObject, Owner.gameObject.scene); + temporaryAudioHost.transform.position = Owner.transform.position; + _editorAudioSource = temporaryAudioHost.AddComponent() as AudioSource; + PlayAudioSource(_editorAudioSource, tmpAudioClip, volume, pitch, _randomPlaybackTime, _randomPlaybackDuration); + _lastPlayTimestamp = FeedbackTime; + _lastPlayedClip = tmpAudioClip; + float length = (_randomPlaybackDuration > 0) ? _randomPlaybackDuration : tmpAudioClip.length; + length *= 1000; + length = length / Mathf.Abs(pitch); + await Task.Delay((int)length); + Object.DestroyImmediate(temporaryAudioHost); + } + + /// + /// A test method that stops the test sound + /// + protected virtual void TestStopSound() + { + if (_editorAudioSource != null) + { + _editorAudioSource.Stop(); + } + } + + /// + /// Plays the audio source with the specified volume and pitch + /// + /// + /// + /// + /// + protected virtual void PlayAudioSource(AudioSource audioSource, AudioClip sfx, float volume, float pitch, float time, float playbackDuration) + { + // we set that audio source clip to the one in paramaters + audioSource.clip = sfx; + audioSource.time = time; + // we set the audio source volume to the one in parameters + audioSource.volume = volume; + audioSource.pitch = pitch; + // we set our loop setting + audioSource.loop = false; + // we start playing the sound + audioSource.Play(); + } + + /// + /// Determines the next index to play when dealing with random clips + /// + /// + protected virtual AudioClip PickRandomClip() + { + int newIndex = 0; + + if (!SequentialOrder) + { + if (RandomUnique) + { + newIndex = _randomUniqueShuffleBag.Pick(); + } + else + { + newIndex = Random.Range(0, RandomSfx.Length); + } + } + else + { + newIndex = _currentIndex; + + if (newIndex >= RandomSfx.Length) + { + if (SequentialOrderHoldLast) + { + newIndex--; + if ((SequentialOrderHoldCooldownDuration > 0) + && (FeedbackTime - _lastPlayTimestamp > SequentialOrderHoldCooldownDuration)) + { + newIndex = 0; + } + } + else + { + newIndex = 0; + } + } + _currentIndex = newIndex + 1; + } + return RandomSfx[newIndex]; + } + + /// + /// Forces a reset of the sequential index to 0 + /// + public virtual void ResetSequentialIndex() + { + _currentIndex = 0; + } + + /// + /// Forces a reset of the sequential index to the value specified in parameters + /// + /// + public virtual void SetSequentialIndex(int newIndex) + { + _currentIndex = newIndex; + } + + /// + /// On validate we randomize our times + /// + public override void OnValidate() + { + base.OnValidate(); + RandomizeTimes(); + + if ((RandomSfx != null) && (RandomSfx.Length > 0)) + { + _randomUniqueShuffleBag = new MMShufflebag(RandomSfx.Length); + for (int i = 0; i < RandomSfx.Length; i++) + { + _randomUniqueShuffleBag.Add(i,1); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSound.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSound.cs.meta new file mode 100644 index 0000000..9029980 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSound.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae23e6af7cee13748b98cf83b79d01c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundControl.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundControl.cs new file mode 100644 index 0000000..e7129f7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundControl.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Threading.Tasks; +using MoreMountains.Tools; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control a specific sound (or sounds), targeted by SoundID, which has to match the SoundID of the sound you intially played. You will need a MMSoundManager in your scene for this to work. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Audio/MMSoundManager Sound Control")] + [FeedbackHelp("This feedback will let you control a specific sound (or sounds), targeted by SoundID, which has to match the SoundID of the sound you intially played. You will need a MMSoundManager in your scene for this to work.")] + public class MMF_MMSoundManagerSoundControl : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText { get { return ControlMode.ToString(); } } + #endif + + [MMFInspectorGroup("MMSoundManager Sound Control", true, 30)] + /// the action to trigger on the specified sound + [Tooltip("the action to trigger on the specified sound")] + public MMSoundManagerSoundControlEventTypes ControlMode = MMSoundManagerSoundControlEventTypes.Pause; + /// the ID of the sound, has to match the one you specified when playing it + [Tooltip("the ID of the sound, has to match the one you specified when playing it")] + public int SoundID = 0; + + protected AudioSource _targetAudioSource; + + /// + /// On play, triggers an event meant to be caught by the MMSoundManager and acted upon + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMSoundManagerSoundControlEvent.Trigger(ControlMode, SoundID); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundControl.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundControl.cs.meta new file mode 100644 index 0000000..82e15ea --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundControl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55d739433fa69b24e9b9e0fc7388da77 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundData.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundData.cs new file mode 100644 index 0000000..fe0dab1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundData.cs @@ -0,0 +1,204 @@ +using System; +using UnityEngine; +using UnityEngine.Audio; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// A scriptable object used to store data for MMSoundManager play + /// + [Serializable] + [CreateAssetMenu(menuName = "MoreMountains/Audio/MMF_SoundData")] + public class MMF_MMSoundManagerSoundData : ScriptableObject + { + [Header("Sound")] + /// the sound clip to play + [Tooltip("the sound clip to play")] + public AudioClip Sfx; + + [Header("Random Sound")] + /// an array to pick a random sfx from + [Tooltip("an array to pick a random sfx from")] + public AudioClip[] RandomSfx; + /// if this is true, random sfx audio clips will be played in sequential order instead of at random + [Tooltip("if this is true, random sfx audio clips will be played in sequential order instead of at random")] + public bool SequentialOrder = false; + /// if we're in sequential order, determines whether or not to hold at the last index, until either a cooldown is met, or the ResetSequentialIndex method is called + [Tooltip("if we're in sequential order, determines whether or not to hold at the last index, until either a cooldown is met, or the ResetSequentialIndex method is called")] + [MMFCondition("SequentialOrder", true)] + public bool SequentialOrderHoldLast = false; + /// if we're in sequential order hold last mode, index will reset to 0 automatically after this duration, unless it's 0, in which case it'll be ignored + [Tooltip("if we're in sequential order hold last mode, index will reset to 0 automatically after this duration, unless it's 0, in which case it'll be ignored")] + [MMFCondition("SequentialOrderHoldLast", true)] + public float SequentialOrderHoldCooldownDuration = 2f; + /// if this is true, sfx will be picked at random until all have been played. once this happens, the list is shuffled again, and it starts over + [Tooltip("if this is true, sfx will be picked at random until all have been played. once this happens, the list is shuffled again, and it starts over")] + public bool RandomUnique = false; + + [Header("Sound Properties")] + [Header("Volume")] + /// the minimum volume to play the sound at + [Tooltip("the minimum volume to play the sound at")] + [Range(0f,2f)] + public float MinVolume = 1f; + /// the maximum volume to play the sound at + [Tooltip("the maximum volume to play the sound at")] + [Range(0f,2f)] + public float MaxVolume = 1f; + + [Header("Pitch")] + /// the minimum pitch to play the sound at + [Tooltip("the minimum pitch to play the sound at")] + [Range(-3f,3f)] + public float MinPitch = 1f; + /// the maximum pitch to play the sound at + [Tooltip("the maximum pitch to play the sound at")] + [Range(-3f,3f)] + public float MaxPitch = 1f; + + [Header("Time")] + /// a timestamp (in seconds, randomized between the defined min and max) at which the sound will start playing, equivalent to the Audiosource API's Time) + [Tooltip("a timestamp (in seconds, randomized between the defined min and max) at which the sound will start playing, equivalent to the Audiosource API's Time)")] + [MMFVector("Min", "Max")] + public Vector2 PlaybackTime = new Vector2(0f, 0f); + /// a duration (in seconds, randomized between the defined min and max) for which the sound will play before stopping. Ignored if min and max are zero. + [Tooltip("a duration (in seconds, randomized between the defined min and max) for which the sound will play before stopping. Ignored if min and max are zero.")] + [MMVector("Min", "Max")] + public Vector2 PlaybackDuration = new Vector2(0f, 0f); + + [Header("Sound Manager Options")] + /// the track on which to play the sound. Pick the one that matches the nature of your sound + [Tooltip("the track on which to play the sound. Pick the one that matches the nature of your sound")] + public MMSoundManager.MMSoundManagerTracks MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Sfx; + /// the ID of the sound. This is useful if you plan on using sound control feedbacks on it afterwards. + [Tooltip("the ID of the sound. This is useful if you plan on using sound control feedbacks on it afterwards.")] + public int ID = 0; + /// the AudioGroup on which to play the sound. If you're already targeting a preset track, you can leave it blank, otherwise the group you specify here will override it. + [Tooltip("the AudioGroup on which to play the sound. If you're already targeting a preset track, you can leave it blank, otherwise the group you specify here will override it.")] + public AudioMixerGroup AudioGroup = null; + /// if (for some reason) you've already got an audiosource and wouldn't like to use the built-in pool system, you can specify it here + [Tooltip("if (for some reason) you've already got an audiosource and wouldn't like to use the built-in pool system, you can specify it here")] + public AudioSource RecycleAudioSource = null; + /// whether or not this sound should loop + [Tooltip("whether or not this sound should loop")] + public bool Loop = false; + /// whether or not this sound should continue playing when transitioning to another scene + [Tooltip("whether or not this sound should continue playing when transitioning to another scene")] + public bool Persistent = false; + /// whether or not this sound should play if the same sound clip is already playing + [Tooltip("whether or not this sound should play if the same sound clip is already playing")] + public bool DoNotPlayIfClipAlreadyPlaying = false; + /// if this is true, this sound will stop playing when stopping the feedback + [Tooltip("if this is true, this sound will stop playing when stopping the feedback")] + public bool StopSoundOnFeedbackStop = false; + + [Header("Fade")] + /// whether or not to fade this sound in when playing it + [Tooltip("whether or not to fade this sound in when playing it")] + public bool Fade = false; + /// if fading, the volume at which to start the fade + [Tooltip("if fading, the volume at which to start the fade")] + [MMCondition("Fade", true)] + public float FadeInitialVolume = 0f; + /// if fading, the duration of the fade, in seconds + [Tooltip("if fading, the duration of the fade, in seconds")] + [MMCondition("Fade", true)] + public float FadeDuration = 1f; + /// if fading, the tween over which to fade the sound + [Tooltip("if fading, the tween over which to fade the sound ")] + [MMCondition("Fade", true)] + public MMTweenType FadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInOutQuartic); + + [Header("Solo")] + /// whether or not this sound should play in solo mode over its destination track. If yes, all other sounds on that track will be muted when this sound starts playing + [Tooltip("whether or not this sound should play in solo mode over its destination track. If yes, all other sounds on that track will be muted when this sound starts playing")] + public bool SoloSingleTrack = false; + /// whether or not this sound should play in solo mode over all other tracks. If yes, all other tracks will be muted when this sound starts playing + [Tooltip("whether or not this sound should play in solo mode over all other tracks. If yes, all other tracks will be muted when this sound starts playing")] + public bool SoloAllTracks = false; + /// if in any of the above solo modes, AutoUnSoloOnEnd will unmute the track(s) automatically once that sound stops playing + [Tooltip("if in any of the above solo modes, AutoUnSoloOnEnd will unmute the track(s) automatically once that sound stops playing")] + public bool AutoUnSoloOnEnd = false; + + [Header("Spatial Settings")] + /// Pans a playing sound in a stereo way (left or right). This only applies to sounds that are Mono or Stereo. + [Tooltip("Pans a playing sound in a stereo way (left or right). This only applies to sounds that are Mono or Stereo.")] + [Range(-1f,1f)] + public float PanStereo; + /// Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D. + [Tooltip("Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D.")] + [Range(0f,1f)] + public float SpatialBlend; + /// a Transform this sound can 'attach' to and follow it along as it plays + [Tooltip("a Transform this sound can 'attach' to and follow it along as it plays")] + public Transform AttachToTransform; + + [Header("Effects")] + /// Bypass effects (Applied from filter components or global listener filters). + [Tooltip("Bypass effects (Applied from filter components or global listener filters).")] + public bool BypassEffects = false; + /// When set global effects on the AudioListener will not be applied to the audio signal generated by the AudioSource. Does not apply if the AudioSource is playing into a mixer group. + [Tooltip("When set global effects on the AudioListener will not be applied to the audio signal generated by the AudioSource. Does not apply if the AudioSource is playing into a mixer group.")] + public bool BypassListenerEffects = false; + /// When set doesn't route the signal from an AudioSource into the global reverb associated with reverb zones. + [Tooltip("When set doesn't route the signal from an AudioSource into the global reverb associated with reverb zones.")] + public bool BypassReverbZones = false; + /// Sets the priority of the AudioSource. + [Tooltip("Sets the priority of the AudioSource.")] + [Range(0, 256)] + public int Priority = 128; + /// The amount by which the signal from the AudioSource will be mixed into the global reverb associated with the Reverb Zones. + [Tooltip("The amount by which the signal from the AudioSource will be mixed into the global reverb associated with the Reverb Zones.")] + [Range(0f,1.1f)] + public float ReverbZoneMix = 1f; + + [Header("3D Sound Settings")] + /// Sets the Doppler scale for this AudioSource. + [Tooltip("Sets the Doppler scale for this AudioSource.")] + [Range(0f,5f)] + public float DopplerLevel = 1f; + /// Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space. + [Tooltip("Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space.")] + [Range(0,360)] + public int Spread = 0; + /// Sets/Gets how the AudioSource attenuates over distance. + [Tooltip("Sets/Gets how the AudioSource attenuates over distance.")] + public AudioRolloffMode RolloffMode = AudioRolloffMode.Logarithmic; + /// Within the Min distance the AudioSource will cease to grow louder in volume. + [Tooltip("Within the Min distance the AudioSource will cease to grow louder in volume.")] + public float MinDistance = 1f; + /// (Logarithmic rolloff) MaxDistance is the distance a sound stops attenuating at. + [Tooltip("(Logarithmic rolloff) MaxDistance is the distance a sound stops attenuating at.")] + public float MaxDistance = 500f; + /// whether or not to use a custom curve for custom volume rolloff + [Tooltip("whether or not to use a custom curve for custom volume rolloff")] + public bool UseCustomRolloffCurve = false; + /// the curve to use for custom volume rolloff if UseCustomRolloffCurve is true + [Tooltip("the curve to use for custom volume rolloff if UseCustomRolloffCurve is true")] + [MMCondition("UseCustomRolloffCurve", true)] + public AnimationCurve CustomRolloffCurve; + /// whether or not to use a custom curve for spatial blend + [Tooltip("whether or not to use a custom curve for spatial blend")] + public bool UseSpatialBlendCurve = false; + /// the curve to use for custom spatial blend if UseSpatialBlendCurve is true + [Tooltip("the curve to use for custom spatial blend if UseSpatialBlendCurve is true")] + [MMCondition("UseSpatialBlendCurve", true)] + public AnimationCurve SpatialBlendCurve; + /// whether or not to use a custom curve for reverb zone mix + [Tooltip("whether or not to use a custom curve for reverb zone mix")] + public bool UseReverbZoneMixCurve = false; + /// the curve to use for custom reverb zone mix if UseReverbZoneMixCurve is true + [Tooltip("the curve to use for custom reverb zone mix if UseReverbZoneMixCurve is true")] + [MMCondition("UseReverbZoneMixCurve", true)] + public AnimationCurve ReverbZoneMixCurve; + /// whether or not to use a custom curve for spread + [Tooltip("whether or not to use a custom curve for spread")] + public bool UseSpreadCurve = false; + /// the curve to use for custom spread if UseSpreadCurve is true + [Tooltip("the curve to use for custom spread if UseSpreadCurve is true")] + [MMCondition("UseSpreadCurve", true)] + public AnimationCurve SpreadCurve; + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundData.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundData.cs.meta new file mode 100644 index 0000000..87e1f80 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93cb35ed4e3a7554cbb5cdc5e2bdfd4d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundFade.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundFade.cs new file mode 100644 index 0000000..a55dd2d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundFade.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Threading.Tasks; +using MoreMountains.Tools; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you trigger fades on a specific sound via the MMSoundManager. You will need a MMSoundManager in your scene for this to work. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Audio/MMSoundManager Sound Fade")] + [FeedbackHelp("This feedback lets you trigger fades on a specific sound via the MMSoundManager. You will need a MMSoundManager in your scene for this to work.")] + public class MMF_MMSoundManagerSoundFade : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText { get { return "ID "+SoundID; } } + #endif + + [MMFInspectorGroup("MMSoundManager Sound Fade", true, 30)] + /// the ID of the sound you want to fade. Has to match the ID you specified when playing the sound initially + [Tooltip("the ID of the sound you want to fade. Has to match the ID you specified when playing the sound initially")] + public int SoundID = 0; + /// the duration of the fade, in seconds + [Tooltip("the duration of the fade, in seconds")] + public float FadeDuration = 1f; + /// the volume towards which to fade + [Tooltip("the volume towards which to fade")] + [Range(MMSoundManagerSettings._minimalVolume,MMSoundManagerSettings._maxVolume)] + public float FinalVolume = MMSoundManagerSettings._minimalVolume; + /// the tween to apply over the fade + [Tooltip("the tween to apply over the fade")] + public MMTweenType FadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInOutQuartic); + + protected AudioSource _targetAudioSource; + + /// + /// On play, we start our fade via a fade event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMSoundManagerSoundFadeEvent.Trigger(MMSoundManagerSoundFadeEvent.Modes.PlayFade, SoundID, FadeDuration, FinalVolume, FadeTween); + } + + /// + /// On stop, we stop our fade via a fade event + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMSoundManagerSoundFadeEvent.Trigger(MMSoundManagerSoundFadeEvent.Modes.StopFade, SoundID, FadeDuration, FinalVolume, FadeTween); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundFade.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundFade.cs.meta new file mode 100644 index 0000000..bd0dbb2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerSoundFade.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14c18eda2751dd04ba846546118f8d97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackControl.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackControl.cs new file mode 100644 index 0000000..3e53c88 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackControl.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Threading.Tasks; +using MoreMountains.Tools; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control all sounds playing on a specific track (master, UI, music, sfx), and play, pause, mute, unmute, resume, stop, free them all at once. You will need a MMSoundManager in your scene for this to work. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Audio/MMSoundManager Track Control")] + [FeedbackHelp("This feedback will let you control all sounds playing on a specific track (master, UI, music, sfx), and play, pause, mute, unmute, resume, stop, free them all at once. You will need a MMSoundManager in your scene for this to work.")] + public class MMF_MMSoundManagerTrackControl : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText { get { return Track.ToString() + " " + ControlMode.ToString(); } } + #endif + + /// the possible modes you can use to interact with the track. Free will stop all sounds and return them to the pool + public enum ControlModes { Mute, UnMute, SetVolume, Pause, Play, Stop, Free } + + [MMFInspectorGroup("MMSoundManager Track Control", true, 30)] + /// the track to mute/unmute/pause/play/stop/free/etc + [Tooltip("the track to mute/unmute/pause/play/stop/free/etc")] + public MMSoundManager.MMSoundManagerTracks Track; + /// the selected control mode to interact with the track. Free will stop all sounds and return them to the pool + [Tooltip("the selected control mode to interact with the track. Free will stop all sounds and return them to the pool")] + public ControlModes ControlMode = ControlModes.Pause; + /// if setting the volume, the volume to assign to the track + [Tooltip("if setting the volume, the volume to assign to the track")] + [MMEnumCondition("ControlMode", (int) ControlModes.SetVolume)] + public float Volume = 0.5f; + + /// + /// On play, orders the entire track to follow the specific command, via a MMSoundManager event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (ControlMode) + { + case ControlModes.Mute: + MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.MuteTrack, Track); + break; + case ControlModes.UnMute: + MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.UnmuteTrack, Track); + break; + case ControlModes.SetVolume: + MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.SetVolumeTrack, Track, Volume); + break; + case ControlModes.Pause: + MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.PauseTrack, Track); + break; + case ControlModes.Play: + MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.PlayTrack, Track); + break; + case ControlModes.Stop: + MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.StopTrack, Track); + break; + case ControlModes.Free: + MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.FreeTrack, Track); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackControl.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackControl.cs.meta new file mode 100644 index 0000000..1bbb5c1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackControl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5c2406e2726fb2418de78aecddaefbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackFade.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackFade.cs new file mode 100644 index 0000000..dcc2b76 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackFade.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Threading.Tasks; +using MoreMountains.Tools; +using UnityEngine.Audio; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you fade all the sounds on a specific track at once. You will need a MMSoundManager in your scene for this to work. + /// + [AddComponentMenu("")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Audio/MMSoundManager Track Fade")] + [FeedbackHelp("This feedback will let you fade all the sounds on a specific track at once. You will need a MMSoundManager in your scene for this to work.")] + public class MMF_MMSoundManagerTrackFade : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText { get { return Track.ToString(); } } + #endif + + /// the duration of this feedback is the duration of the fade + public override float FeedbackDuration { get { return FadeDuration; } } + + [MMFInspectorGroup("MMSoundManager Track Fade", true, 30)] + /// the track to fade the volume on + [Tooltip("the track to fade the volume on")] + public MMSoundManager.MMSoundManagerTracks Track; + /// the duration of the fade, in seconds + [Tooltip("the duration of the fade, in seconds")] + public float FadeDuration = 1f; + /// the volume to reach at the end of the fade + [Tooltip("the volume to reach at the end of the fade")] + [Range(MMSoundManagerSettings._minimalVolume,MMSoundManagerSettings._maxVolume)] + public float FinalVolume = MMSoundManagerSettings._minimalVolume; + /// the tween to operate the fade on + [Tooltip("the tween to operate the fade on")] + public MMTweenType FadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInOutQuartic); + + /// + /// On Play, triggers a fade event, meant to be caught by the MMSoundManager + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMSoundManagerTrackFadeEvent.Trigger(MMSoundManagerTrackFadeEvent.Modes.PlayFade, Track, FadeDuration, FinalVolume, FadeTween); + } + + /// + /// On stop, we stop our fade via a fade event + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMSoundManagerTrackFadeEvent.Trigger(MMSoundManagerTrackFadeEvent.Modes.StopFade, Track, FadeDuration, FinalVolume, FadeTween); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackFade.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackFade.cs.meta new file mode 100644 index 0000000..de91c99 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_MMSoundManagerTrackFade.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 266e8e08f7762ff488684f17ba9da511 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_PPMovingFilter.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_PPMovingFilter.cs new file mode 100644 index 0000000..bfe43e2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_PPMovingFilter.cs @@ -0,0 +1,95 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will trigger a post processing moving filter event, meant to be caught by a MMPostProcessingMovableFilter object + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will trigger a post processing moving filter event, meant to be caught by a MMPostProcessingMovableFilter object")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("PostProcess/PPMovingFilter")] + public class MMF_PPMovingFilter : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override string RequiredTargetText => RequiredChannelText; + #endif + + /// the duration of this feedback is the duration of the transition + public override float FeedbackDuration { get { return ApplyTimeMultiplier(TransitionDuration); } set { TransitionDuration = value; } } + public override bool HasChannel => true; + + /// the possible modes for this feedback + public enum Modes { Toggle, On, Off } + + [MMFInspectorGroup("PostProcessing Profile Moving Filter", true, 54)] + /// the selected mode for this feedback + [Tooltip("the selected mode for this feedback")] + public Modes Mode = Modes.Toggle; + /// the duration of the transition + [Tooltip("the duration of the transition")] + public float TransitionDuration = 1f; + /// the curve to move along to + [Tooltip("the curve to move along to")] + public MMTweenType Curve = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + + protected bool _active = false; + protected bool _toggle = false; + + /// + /// On custom play, we trigger a MMPostProcessingMovingFilterEvent with the selected parameters + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _active = (Mode == Modes.On); + _toggle = (Mode == Modes.Toggle); + + MMPostProcessingMovingFilterEvent.Trigger(Curve, _active, _toggle, FeedbackDuration, Channel); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMPostProcessingMovingFilterEvent.Trigger(Curve, _active, _toggle, FeedbackDuration, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMPostProcessingMovingFilterEvent.Trigger(Curve, _active, _toggle, FeedbackDuration, restore:true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_PPMovingFilter.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_PPMovingFilter.cs.meta new file mode 100644 index 0000000..cddbb2a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_PPMovingFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bad88d19339cd824eae939fb6492e1db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Playlist.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Playlist.cs new file mode 100644 index 0000000..f44fe2d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Playlist.cs @@ -0,0 +1,101 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you pilot a MMPlaylist + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you pilot a MMPlaylist")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Audio/MMPlaylist")] + public class MMF_Playlist : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override string RequiredTargetText { get => Mode.ToString(); } + public override bool HasChannel => true; + #endif + + public enum Modes { Play, PlayNext, PlayPrevious, Stop, Pause, PlaySongAt, SetVolumeMultiplier, ChangePlaylist } + + [MMFInspectorGroup("MMPlaylist", true, 13)] + /// the action to call on the playlist + [Tooltip("the action to call on the playlist")] + public Modes Mode = Modes.PlayNext; + /// the index of the song to play + [Tooltip("the index of the song to play")] + [MMEnumCondition("Mode", (int)Modes.PlaySongAt)] + public int SongIndex = 0; + /// the volume multiplier to apply + [Tooltip("the volume multiplier to apply")] + [MMEnumCondition("Mode", (int)Modes.SetVolumeMultiplier)] + public float VolumeMultiplier = 1f; + /// whether to apply the volume multiplier instantly (true) or only when the next song starts playing (false) + [Tooltip("whether to apply the volume multiplier instantly (true) or only when the next song starts playing (false)")] + [MMEnumCondition("Mode", (int)Modes.SetVolumeMultiplier)] + public bool ApplyVolumeMultiplierInstantly = false; + /// in change playlist mode, the playlist to which to switch to. Only works with MMSMPlaylistManager + [Tooltip("in change playlist mode, the playlist to which to switch to. Only works with MMSMPlaylistManager")] + [MMEnumCondition("Mode", (int)Modes.ChangePlaylist)] + public MMSMPlaylist NewPlaylist; + /// in change playlist mode, whether or not to play the new playlist after the switch. Only works with MMSMPlaylistManager + [Tooltip("in change playlist mode, whether or not to play the new playlist after the switch. Only works with MMSMPlaylistManager")] + [MMEnumCondition("Mode", (int)Modes.ChangePlaylist)] + public bool ChangePlaylistAndPlay = true; + + protected Coroutine _coroutine; + + /// + /// On Play we change the values of our fog + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (Mode) + { + case Modes.Play: + MMPlaylistPlayEvent.Trigger(Channel); + break; + case Modes.PlayNext: + MMPlaylistPlayNextEvent.Trigger(Channel); + break; + case Modes.PlayPrevious: + MMPlaylistPlayPreviousEvent.Trigger(Channel); + break; + case Modes.Stop: + MMPlaylistStopEvent.Trigger(Channel); + break; + case Modes.Pause: + MMPlaylistPauseEvent.Trigger(Channel); + break; + case Modes.PlaySongAt: + MMPlaylistPlayIndexEvent.Trigger(Channel, SongIndex); + break; + case Modes.SetVolumeMultiplier: + MMPlaylistVolumeMultiplierEvent.Trigger(Channel, VolumeMultiplier, ApplyVolumeMultiplierInstantly); + break; + case Modes.ChangePlaylist: + MMPlaylistChangeEvent.Trigger(Channel, NewPlaylist, ChangePlaylistAndPlay); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Playlist.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Playlist.cs.meta new file mode 100644 index 0000000..1247c86 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Playlist.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd1ba6e99150bc54788ab1cadf6a8f09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Property.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Property.cs new file mode 100644 index 0000000..f9f84d8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Property.cs @@ -0,0 +1,293 @@ +using MoreMountains.Tools; +using System.Collections; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you target (almost) any property, on any object in your scene. + /// It also works on scriptable objects. Drag an object, select a property, and setup your feedback " + + /// to update that property over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you target (almost) any property, on any object in your scene. " + + "It also works on scriptable objects. Drag an object, select a property, and setup your feedback " + + "to update that property over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("GameObject/Property")] + public class MMF_Property : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the duration of this feedback is the duration of the target property, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { if (Mode != Modes.Instant) { Duration = value; } } } + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (Target == null); } + public override string RequiresSetupText { get { return "This feedback requires that a Target be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasRandomness => true; + public override bool CanForceInitialValue => true; + public override bool ForceInitialValueDelayed => true; + public override bool HasCustomInspectors => true; + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant, ToDestination } + + [MMFInspectorGroup("Target Property", true, 12)] + /// the receiver to write the level to + [Tooltip("the receiver to write the level to")] + public MMPropertyReceiver Target; + + [MMFInspectorGroup("Mode", true, 29)] + /// whether the feedback should affect the target property instantly or over a period of time + [Tooltip("whether the feedback should affect the target property instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the target property should change over time + [Tooltip("how long the target property should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ToDestination)] + public float Duration = 0.2f; + /// whether or not that target property should be turned off on start + [Tooltip("whether or not that target property should be turned off on start")] + public bool StartsOff = false; + /// whether or not the values should be relative or not + [Tooltip("whether or not the values should be relative or not")] + public bool RelativeValues = true; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// if this is true, initial value will be computed for every play, otherwise only once, on initialization + [Tooltip("if this is true, initial value will be computed for every play, otherwise only once, on initialization")] + public bool DetermineInitialValueOnPlay = false; + + [MMFInspectorGroup("Level", true, 30)] + /// the curve to tween the intensity on + [Tooltip("the curve to tween the intensity on")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ToDestination)] + public MMTweenType LevelCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the intensity curve's 0 to + [Tooltip("the value to remap the intensity curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float RemapLevelZero = 0f; + /// the value to remap the intensity curve's 1 to + [Tooltip("the value to remap the intensity curve's 1 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float RemapLevelOne = 1f; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantLevel; + /// the value towards which to animate when in ToDestination mode + [Tooltip("the value towards which to animate when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationLevel = 5f; + + protected float _initialIntensity; + protected Coroutine _coroutine; + + /// + /// On init we turn the target property off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + Target.Initialization(Owner.gameObject); + GetInitialIntensity(); + + if (Active) + { + if (StartsOff) + { + Turn(false); + } + } + } + + /// + /// Stores the current level of the target + /// + protected virtual void GetInitialIntensity() + { + _initialIntensity = Target.Level; + } + + /// + /// On Play we turn our target property on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (DetermineInitialValueOnPlay) + { + GetInitialIntensity(); + } + + Turn(true); + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + switch (Mode) + { + case Modes.Instant: + Target.SetLevel(InstantLevel); + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(UpdateValueSequence(intensityMultiplier)); + break; + case Modes.ToDestination: + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ToDestinationSequence(intensityMultiplier)); + break; + } + } + + /// + /// This coroutine will animate the target property's value towards the defined ToDestinationLevel. + /// Note that in RelativeValue mode, this ToDestinationLevel will be added to the initial value + /// + /// + protected virtual IEnumerator ToDestinationSequence(float intensityMultiplier) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + float initialValue = Target.Level; + float destinationValue = ToDestinationLevel; + + if (RelativeValues) + { + destinationValue += _initialIntensity; + } + + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetValues(remappedTime, intensityMultiplier, initialValue, destinationValue, false); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetValues(FinalNormalizedTime, intensityMultiplier, initialValue, destinationValue, false); + if (StartsOff) + { + Turn(false); + } + + _coroutine = null; + yield return null; + } + + /// + /// This coroutine will modify the values on the target property + /// + /// + protected virtual IEnumerator UpdateValueSequence(float intensityMultiplier) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetValues(remappedTime, intensityMultiplier, RemapLevelZero, RemapLevelOne, true); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetValues(FinalNormalizedTime, intensityMultiplier, RemapLevelZero, RemapLevelOne, true); + if (StartsOff) + { + Turn(false); + } + + _coroutine = null; + yield return null; + } + + /// + /// Sets the various values on the target property on a specified time (between 0 and 1) + /// + /// + protected virtual void SetValues(float time, float intensityMultiplier, float remapZero, float remapOne, bool applyRelative) + { + float intensity = MMTween.Tween(time, 0f, 1f, remapZero, remapOne, LevelCurve); + + intensity *= intensityMultiplier; + + if (applyRelative && RelativeValues) + { + intensity += _initialIntensity; + } + + Target.SetLevel(intensity); + } + + /// + /// Turns the target property object off on stop if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active) + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + Target.SetLevel(_initialIntensity); + } + + if (StartsOff) + { + Turn(false); + } + } + } + + /// + /// Turns the target object on or off + /// + /// + protected virtual void Turn(bool status) + { + if (Target.TargetComponent.gameObject != null) + { + Target.TargetComponent.gameObject.SetActive(status); + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (StartsOff) + { + Turn(false); + } + + Target.SetLevel(_initialIntensity); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Property.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Property.cs.meta new file mode 100644 index 0000000..c53b099 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Property.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b567abd7b952dc748b9dd6b139e37bbf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RadioSignal.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RadioSignal.cs new file mode 100644 index 0000000..6d3daf1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RadioSignal.cs @@ -0,0 +1,104 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you trigger a play on a target MMRadioSignal (usually used by a MMRadioBroadcaster to emit a value that can then be listened to by MMRadioReceivers. From this feedback you can also specify a duration, timescale and multiplier. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you trigger a play on a target MMRadioSignal (usually used by a MMRadioBroadcaster to emit a value that can then be listened to by MMRadioReceivers. From this feedback you can also specify a duration, timescale and multiplier.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("GameObject/MMRadioSignal")] + public class MMF_RadioSignal : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.GameObjectColor; } } + public override bool EvaluateRequiresSetup() { return (TargetSignal == null); } + public override string RequiredTargetText { get { return TargetSignal != null ? TargetSignal.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetSignal be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is 0 + public override float FeedbackDuration { get { return 0f; } } + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetSignal = FindAutomatedTarget(); + + [MMFInspectorGroup("Radio Signal", true, 72)] + /// The target MMRadioSignal to trigger + [Tooltip("The target MMRadioSignal to trigger")] + public MMRadioSignal TargetSignal; + /// the timescale to operate on + [Tooltip("the timescale to operate on")] + public MMRadioSignal.TimeScales TimeScale = MMRadioSignal.TimeScales.Unscaled; + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 1f; + /// a global multiplier to apply to the end result of the combination + [Tooltip("a global multiplier to apply to the end result of the combination")] + public float GlobalMultiplier = 1f; + + + /// + /// On Play we set the values on our target signal and make it start shaking its level + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized) + { + if (TargetSignal != null) + { + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + TargetSignal.Duration = Duration; + TargetSignal.GlobalMultiplier = GlobalMultiplier * intensityMultiplier; + TargetSignal.TimeScale = TimeScale; + TargetSignal.StartShaking(); + } + } + } + + /// + /// On Stop, stops the target signal + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active) + { + if (TargetSignal != null) + { + TargetSignal.Stop(); + } + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetSignal != null) + { + TargetSignal.Stop(); + TargetSignal.ApplyLevel(0f); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RadioSignal.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RadioSignal.cs.meta new file mode 100644 index 0000000..f19fdeb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RadioSignal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d01c21882f8c03844831b4d587f470b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformAnchor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformAnchor.cs new file mode 100644 index 0000000..1980972 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformAnchor.cs @@ -0,0 +1,108 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the min and max anchors of a RectTransform over time. That's the normalized position in the parent RectTransform that the lower left and upper right corners are anchored to. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the min and max anchors of a RectTransform over time. That's the normalized position in the parent RectTransform that the lower left and upper right corners are anchored to.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/RectTransform Anchor")] + public class MMF_RectTransformAnchor : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRectTransform == null); } + public override string RequiredTargetText { get { return TargetRectTransform != null ? TargetRectTransform.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRectTransform be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetRectTransform = FindAutomatedTarget(); + + [MMFInspectorGroup("Target RectTransform", true, 37, true)] + /// the target RectTransform to control + [Tooltip("the target RectTransform to control")] + public RectTransform TargetRectTransform; + + [MMFInspectorGroup("Anchor Min", true, 43)] + /// whether or not to modify the min anchor + [Tooltip("whether or not to modify the min anchor")] + public bool ModifyAnchorMin = true; + /// the curve to animate the min anchor on + [Tooltip("the curve to animate the min anchor on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType AnchorMinCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// the value to remap the min anchor curve's 0 on + [Tooltip("the value to remap the min anchor curve's 0 on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public Vector2 AnchorMinRemapZero = Vector2.zero; + /// the value to remap the min anchor curve's 1 on + [Tooltip("the value to remap the min anchor curve's 1 on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime, (int)MMFeedbackBase.Modes.Instant)] + public Vector2 AnchorMinRemapOne = Vector2.one; + + [MMFInspectorGroup("Anchor Max", true, 44)] + /// whether or not to modify the max anchor + [Tooltip("whether or not to modify the max anchor")] + public bool ModifyAnchorMax = true; + /// the curve to animate the max anchor on + [Tooltip("the curve to animate the max anchor on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType AnchorMaxCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// the value to remap the max anchor curve's 0 on + [Tooltip("the value to remap the max anchor curve's 0 on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public Vector2 AnchorMaxRemapZero = Vector2.zero; + /// the value to remap the max anchor curve's 1 on + [Tooltip("the value to remap the max anchor curve's 1 on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime, (int)MMFeedbackBase.Modes.Instant)] + public Vector2 AnchorMaxRemapOne = Vector2.one; + + protected override void FillTargets() + { + if (TargetRectTransform == null) + { + return; + } + + MMF_FeedbackBaseTarget targetMin = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiverMin = new MMPropertyReceiver(); + receiverMin.TargetObject = TargetRectTransform.gameObject; + receiverMin.TargetComponent = TargetRectTransform; + receiverMin.TargetPropertyName = "anchorMin"; + receiverMin.RelativeValue = RelativeValues; + receiverMin.Vector2RemapZero = AnchorMinRemapZero; + receiverMin.Vector2RemapOne = AnchorMinRemapOne; + receiverMin.ShouldModifyValue = ModifyAnchorMin; + targetMin.Target = receiverMin; + targetMin.LevelCurve = AnchorMinCurve; + targetMin.RemapLevelZero = 0f; + targetMin.RemapLevelOne = 1f; + targetMin.InstantLevel = 1f; + + _targets.Add(targetMin); + + MMF_FeedbackBaseTarget targetMax = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiverMax = new MMPropertyReceiver(); + receiverMax.TargetObject = TargetRectTransform.gameObject; + receiverMax.TargetComponent = TargetRectTransform; + receiverMax.TargetPropertyName = "anchorMax"; + receiverMax.RelativeValue = RelativeValues; + receiverMax.Vector2RemapZero = AnchorMaxRemapZero; + receiverMax.Vector2RemapOne = AnchorMaxRemapOne; + receiverMax.ShouldModifyValue = ModifyAnchorMax; + targetMax.Target = receiverMax; + targetMax.LevelCurve = AnchorMaxCurve; + targetMax.RemapLevelZero = 0f; + targetMax.RemapLevelOne = 1f; + targetMax.InstantLevel = 1f; + + _targets.Add(targetMax); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformAnchor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformAnchor.cs.meta new file mode 100644 index 0000000..1b26072 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformAnchor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40c1cb23e17feb24ca503ff4d7cbf7b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformOffset.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformOffset.cs new file mode 100644 index 0000000..599d30e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformOffset.cs @@ -0,0 +1,108 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the offset of the lower left corner of the rectangle relative to the lower left anchor, and the offset of the upper right corner of the rectangle relative to the upper right anchor. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the offset of the lower left corner of the rectangle relative to the lower left anchor, and the offset of the upper right corner of the rectangle relative to the upper right anchor.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/RectTransform Offset")] + public class MMF_RectTransformOffset : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRectTransform == null); } + public override string RequiredTargetText { get { return TargetRectTransform != null ? TargetRectTransform.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRectTransform be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetRectTransform = FindAutomatedTarget(); + + [MMFInspectorGroup("Target RectTransform", true, 37, true)] + /// The RectTransform we want to modify + public RectTransform TargetRectTransform; + + [MMFInspectorGroup("Offset Min", true, 40)] + /// whether we should modify the offset min or not + [Tooltip("whether we should modify the offset min or not")] + public bool ModifyOffsetMin = true; + /// the curve to animate the min offset on + [Tooltip("the curve to animate the min offset on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType OffsetMinCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// the value to remap the min curve's 0 on + [Tooltip("the value to remap the min curve's 0 on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public Vector2 OffsetMinRemapZero = Vector2.zero; + /// the value to remap the min curve's 1 on + [Tooltip("the value to remap the min curve's 1 on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime, (int)MMFeedbackBase.Modes.Instant)] + public Vector2 OffsetMinRemapOne = Vector2.one; + + [MMFInspectorGroup("Offset Max", true, 41)] + /// whether we should modify the offset max or not + [Tooltip("whether we should modify the offset max or not")] + public bool ModifyOffsetMax = true; + /// the curve to animate the max offset on + [Tooltip("the curve to animate the max offset on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType OffsetMaxCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// the value to remap the max curve's 0 on + [Tooltip("the value to remap the max curve's 0 on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public Vector2 OffsetMaxRemapZero = Vector2.zero; + /// the value to remap the max curve's 1 on + [Tooltip("the value to remap the max curve's 1 on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime, (int)MMFeedbackBase.Modes.Instant)] + public Vector2 OffsetMaxRemapOne = Vector2.one; + + protected override void FillTargets() + { + if (TargetRectTransform == null) + { + return; + } + + MMF_FeedbackBaseTarget targetMin = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiverMin = new MMPropertyReceiver(); + receiverMin.TargetObject = TargetRectTransform.gameObject; + receiverMin.TargetComponent = TargetRectTransform; + receiverMin.TargetPropertyName = "offsetMin"; + receiverMin.RelativeValue = RelativeValues; + receiverMin.Vector2RemapZero = OffsetMinRemapZero; + receiverMin.Vector2RemapOne = OffsetMinRemapOne; + receiverMin.ShouldModifyValue = ModifyOffsetMin; + targetMin.Target = receiverMin; + targetMin.LevelCurve = OffsetMinCurve; + targetMin.RemapLevelZero = 0f; + targetMin.RemapLevelOne = 1f; + targetMin.InstantLevel = 1f; + + _targets.Add(targetMin); + + MMF_FeedbackBaseTarget targetMax = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiverMax = new MMPropertyReceiver(); + receiverMax.TargetObject = TargetRectTransform.gameObject; + receiverMax.TargetComponent = TargetRectTransform; + receiverMax.TargetPropertyName = "offsetMax"; + receiverMax.RelativeValue = RelativeValues; + receiverMax.Vector2RemapZero = OffsetMaxRemapZero; + receiverMax.Vector2RemapOne = OffsetMaxRemapOne; + receiverMax.ShouldModifyValue = ModifyOffsetMax; + targetMax.Target = receiverMax; + targetMax.LevelCurve = OffsetMaxCurve; + targetMax.RemapLevelZero = 0f; + targetMax.RemapLevelOne = 1f; + targetMax.InstantLevel = 1f; + + _targets.Add(targetMax); + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformOffset.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformOffset.cs.meta new file mode 100644 index 0000000..8ea92db --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformOffset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d18225582eee064fa0fefcd74282b2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformPivot.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformPivot.cs new file mode 100644 index 0000000..cdb5ac3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformPivot.cs @@ -0,0 +1,72 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the position of a RectTransform's pivot over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the position of a RectTransform's pivot over time")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/RectTransform Pivot")] + public class MMF_RectTransformPivot : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRectTransform == null); } + public override string RequiredTargetText { get { return TargetRectTransform != null ? TargetRectTransform.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRectTransform be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetRectTransform = FindAutomatedTarget(); + + [MMFInspectorGroup("Target RectTransform", true, 37, true)] + /// the RectTransform whose position you want to control over time + [Tooltip("the RectTransform whose position you want to control over time")] + public RectTransform TargetRectTransform; + + [MMFInspectorGroup("Pivot", true, 39)] + /// The curve along which to evaluate the position of the RectTransform's pivot + [Tooltip("The curve along which to evaluate the position of the RectTransform's pivot")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType SpeedCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// the position to remap the curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the position to remap the curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapZero = Vector2.zero; + /// the position to remap the curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the position to remap the curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime, (int)MMFeedbackBase.Modes.Instant)] + [MMFVector("Min", "Max")] + public Vector2 RemapOne = Vector2.one; + + protected override void FillTargets() + { + if (TargetRectTransform == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetRectTransform.gameObject; + receiver.TargetComponent = TargetRectTransform; + receiver.TargetPropertyName = "pivot"; + receiver.RelativeValue = RelativeValues; + receiver.Vector2RemapZero = RemapZero; + receiver.Vector2RemapOne = RemapOne; + target.Target = receiver; + target.LevelCurve = SpeedCurve; + target.RemapLevelZero = 0f; + target.RemapLevelOne = 1f; + target.InstantLevel = 1f; + + _targets.Add(target); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformPivot.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformPivot.cs.meta new file mode 100644 index 0000000..92466f7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformPivot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 047a03483b611234e98bb00d93390155 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformSizeDelta.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformSizeDelta.cs new file mode 100644 index 0000000..59474b5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformSizeDelta.cs @@ -0,0 +1,73 @@ +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the size delta property (the size of this RectTransform relative to the distances between the anchors) of a RectTransform, over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the size delta property (the size of this RectTransform relative to the distances between the anchors) of a RectTransform, over time")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/RectTransformSizeDelta")] + public class MMF_RectTransformSizeDelta : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetRectTransform == null); } + public override string RequiredTargetText { get { return TargetRectTransform != null ? TargetRectTransform.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetRectTransform be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetRectTransform = FindAutomatedTarget(); + + [MMFInspectorGroup("Target RectTransform", true, 37, true)] + /// the rect transform we want to impact + [Tooltip("the rect transform we want to impact")] + public RectTransform TargetRectTransform; + + [MMFInspectorGroup("Size Delta", true, 38)] + /// the speed at which we should animate the size delta + [Tooltip("the speed at which we should animate the size delta")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType SpeedCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1))); + /// the value to remap the curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the curve's 0 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + [MMFVector("Min", "Max")] + public Vector2 RemapZero = Vector2.zero; + /// the value to remap the curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness + [Tooltip("the value to remap the curve's 1 to, randomized between its min and max - put the same value in both min and max if you don't want any randomness")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime, (int)MMFeedbackBase.Modes.Instant)] + [MMFVector("Min", "Max")] + public Vector2 RemapOne = Vector2.one; + + protected override void FillTargets() + { + if (TargetRectTransform == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetRectTransform.gameObject; + receiver.TargetComponent = TargetRectTransform; + receiver.TargetPropertyName = "sizeDelta"; + receiver.RelativeValue = RelativeValues; + receiver.Vector2RemapZero = RemapZero; + receiver.Vector2RemapOne = RemapOne; + target.Target = receiver; + target.LevelCurve = SpeedCurve; + target.RemapLevelZero = 0f; + target.RemapLevelOne = 1f; + target.InstantLevel = 1f; + + _targets.Add(target); + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformSizeDelta.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformSizeDelta.cs.meta new file mode 100644 index 0000000..03315df --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_RectTransformSizeDelta.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58875ceee40a651498d6e840f42a38bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ShaderController.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ShaderController.cs new file mode 100644 index 0000000..4f46106 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ShaderController.cs @@ -0,0 +1,253 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +#if MM_UI +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you control values on a target ShaderController, letting you modify the behaviour and aspect of a shader driven material at runtime + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you trigger a one time play on a target ShaderController.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("Renderer/ShaderController")] + public class MMF_ShaderController : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the different possible modes + public enum Modes { OneTime, ToDestination } + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.RendererColor; } } + public override bool EvaluateRequiresSetup() { return (TargetShaderController == null); } + public override string RequiredTargetText { get { return TargetShaderController != null ? TargetShaderController.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetShaderController be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetShaderController = FindAutomatedTarget(); + + [MMFInspectorGroup("Shader Controller", true, 37, true)] + /// the mode this controller is in + [Tooltip("the mode this controller is in")] + public Modes Mode = Modes.OneTime; + /// the float controller to trigger a one time play on + [Tooltip("the float controller to trigger a one time play on")] + public ShaderController TargetShaderController; + /// an optional list of float controllers to trigger a one time play on + [Tooltip("an optional list of float controllers to trigger a one time play on")] + public List TargetShaderControllerList; + /// whether this should revert to original at the end + [Tooltip("whether this should revert to original at the end")] + public bool RevertToInitialValueAfterEnd = false; + + /// whether or not to initialize the initial value to the current value on a OneTime play + [Tooltip("whether or not to initialize the initial value to the current value on a OneTime play")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public bool GetInitialValueOnOneTime = false; + /// the duration of the One Time shake + [Tooltip("the duration of the One Time shake")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public float OneTimeDuration = 1f; + /// the amplitude of the One Time shake (this will be multiplied by the curve's height) + [Tooltip("the amplitude of the One Time shake (this will be multiplied by the curve's height)")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public float OneTimeAmplitude = 1f; + /// the low value to remap the normalized curve value to + [Tooltip("the low value to remap the normalized curve value to")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public float OneTimeRemapMin = 0f; + /// the high value to remap the normalized curve value to + [Tooltip("the high value to remap the normalized curve value to")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public float OneTimeRemapMax = 1f; + /// the curve to apply to the one time shake + [Tooltip("the curve to apply to the one time shake")] + [MMFEnumCondition("Mode", (int)Modes.OneTime)] + public AnimationCurve OneTimeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + /// the new value towards which to move the current value + [Tooltip("the new value towards which to move the current value")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationValue = 1f; + /// the duration over which to interpolate the target value + [Tooltip("the duration over which to interpolate the target value")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationDuration = 1f; + /// the color to aim for (when targetting a Color property + [Tooltip("the color to aim for (when targetting a Color property")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public Color ToDestinationColor = Color.red; + /// the curve over which to interpolate the value + [Tooltip("the curve over which to interpolate the value")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public AnimationCurve ToDestinationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + /// the duration of this feedback is the duration of the one time hit + public override float FeedbackDuration + { + get { return (Mode == Modes.OneTime) ? ApplyTimeMultiplier(OneTimeDuration) : ApplyTimeMultiplier(ToDestinationDuration); } + set { OneTimeDuration = value; ToDestinationDuration = value; } + } + + protected float _oneTimeDurationStorage; + protected float _oneTimeAmplitudeStorage; + protected float _oneTimeRemapMinStorage; + protected float _oneTimeRemapMaxStorage; + protected AnimationCurve _oneTimeCurveStorage; + protected float _toDestinationValueStorage; + protected float _toDestinationDurationStorage; + protected AnimationCurve _toDestinationCurveStorage; + protected bool _revertToInitialValueAfterEndStorage; + + /// + /// On init we grab our initial controller values + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + if (Active && (TargetShaderController != null)) + { + _oneTimeDurationStorage = TargetShaderController.OneTimeDuration; + _oneTimeAmplitudeStorage = TargetShaderController.OneTimeAmplitude; + _oneTimeCurveStorage = TargetShaderController.OneTimeCurve; + _oneTimeRemapMinStorage = TargetShaderController.OneTimeRemapMin; + _oneTimeRemapMaxStorage = TargetShaderController.OneTimeRemapMax; + _toDestinationCurveStorage = TargetShaderController.ToDestinationCurve; + _toDestinationDurationStorage = TargetShaderController.ToDestinationDuration; + _toDestinationValueStorage = TargetShaderController.ToDestinationValue; + _revertToInitialValueAfterEndStorage = TargetShaderController.RevertToInitialValueAfterEnd; + } + } + + /// + /// On play we trigger a OneTime or ToDestination play on our shader controller + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetShaderController == null)) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + PerformPlay(TargetShaderController, intensityMultiplier); + + foreach (ShaderController shaderController in TargetShaderControllerList) + { + PerformPlay(shaderController, intensityMultiplier); + } + } + + protected virtual void PerformPlay(ShaderController shaderController, float intensityMultiplier) + { + shaderController.RevertToInitialValueAfterEnd = RevertToInitialValueAfterEnd; + if (Mode == Modes.OneTime) + { + shaderController.OneTimeDuration = FeedbackDuration; + shaderController.GetInitialValueOnOneTime = GetInitialValueOnOneTime; + shaderController.OneTimeAmplitude = OneTimeAmplitude; + shaderController.OneTimeCurve = OneTimeCurve; + if (NormalPlayDirection) + { + shaderController.OneTimeRemapMin = OneTimeRemapMin * intensityMultiplier; + shaderController.OneTimeRemapMax = OneTimeRemapMax * intensityMultiplier; + } + else + { + shaderController.OneTimeRemapMin = OneTimeRemapMax * intensityMultiplier; + shaderController.OneTimeRemapMax = OneTimeRemapMin * intensityMultiplier; + } + shaderController.OneTime(); + } + if (Mode == Modes.ToDestination) + { + shaderController.ToColor = ToDestinationColor; + shaderController.ToDestinationCurve = ToDestinationCurve; + shaderController.ToDestinationDuration = FeedbackDuration; + shaderController.ToDestinationValue = ToDestinationValue; + shaderController.ToDestination(); + } + } + + /// + /// Stops this feedback + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + if (TargetShaderController != null) + { + TargetShaderController.Stop(); + } + + foreach (ShaderController shaderController in TargetShaderControllerList) + { + shaderController.Stop(); + } + } + + /// + /// On reset we restore our initial values + /// + protected override void CustomReset() + { + base.CustomReset(); + if (Active && FeedbackTypeAuthorized && (TargetShaderController != null)) + { + PerformReset(TargetShaderController); + } + + foreach (ShaderController shaderController in TargetShaderControllerList) + { + PerformReset(shaderController); + } + } + + protected virtual void PerformReset(ShaderController shaderController) + { + shaderController.OneTimeDuration = _oneTimeDurationStorage; + shaderController.OneTimeAmplitude = _oneTimeAmplitudeStorage; + shaderController.OneTimeCurve = _oneTimeCurveStorage; + shaderController.OneTimeRemapMin = _oneTimeRemapMinStorage; + shaderController.OneTimeRemapMax = _oneTimeRemapMaxStorage; + shaderController.ToDestinationCurve = _toDestinationCurveStorage; + shaderController.ToDestinationDuration = _toDestinationDurationStorage; + shaderController.ToDestinationValue = _toDestinationValueStorage; + shaderController.RevertToInitialValueAfterEnd = _revertToInitialValueAfterEndStorage; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + TargetShaderController.RestoreInitialValues(); + + foreach (ShaderController shaderController in TargetShaderControllerList) + { + shaderController.RestoreInitialValues(); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ShaderController.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ShaderController.cs.meta new file mode 100644 index 0000000..cb62738 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_ShaderController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09758e9809f18be4db32f0059b184095 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Sound.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Sound.cs new file mode 100644 index 0000000..26fa6a2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Sound.cs @@ -0,0 +1,525 @@ +using System; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.Audio; +using MoreMountains.Tools; +using UnityEngine.SceneManagement; +using UnityEngine.Scripting.APIUpdating; +using Random = UnityEngine.Random; + +namespace MoreMountains.Feedbacks +{ + [ExecuteAlways] + [AddComponentMenu("")] + [FeedbackPath("Audio/Sound")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackHelp("WARNING: this is a very simple feedback, that will let you play a sound. Nothing wrong with it being simple of course, but if you want more features, you'll want to look at the MMSoundManager Sound feedback.\n\nThis feedback lets you play the specified AudioClip, either via event (you'll need something in your scene to catch a MMSfxEvent, for example a MMSoundManager), or cached (AudioSource gets created on init, and is then ready to be played), or on demand (instantiated on Play). For all these methods you can define a random volume between min/max boundaries (just set the same value in both fields if you don't want randomness), random pitch, and an optional AudioMixerGroup.")] + public class MMF_Sound : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.SoundsColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + public override bool EvaluateRequiresSetup() + { + bool requiresSetup = false; + if (Sfx == null) + { + requiresSetup = true; + } + if ((RandomSfx != null) && (RandomSfx.Length > 0)) + { + requiresSetup = false; + foreach (AudioClip clip in RandomSfx) + { + if (clip == null) + { + requiresSetup = true; + } + } + } + return requiresSetup; + } + public override string RequiredTargetText { get { return Sfx != null ? Sfx.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that you set an Audio clip in its Sfx slot below, or one or more clips in the Random Sfx array."; } } + #endif + public override bool HasRandomness => true; + /// the duration of this feedback is the duration of the clip being played + public override float FeedbackDuration { get { return GetDuration(); } } + + /// + /// The possible methods to play the sound with. + /// Event : sends a MMSfxEvent, you'll need a class to catch this event and play the sound + /// Cached : creates and stores an audiosource to play the sound with, parented to the owner + /// OnDemand : creates an audiosource and destroys it everytime you want to play the sound + /// + public enum PlayMethods { Event, Cached, OnDemand, Pool } + + [MMFInspectorGroup("Sound", true, 14, true)] + /// the sound clip to play + [Tooltip("the sound clip to play")] + public AudioClip Sfx; + + /// an array to pick a random sfx from + [Tooltip("an array to pick a random sfx from")] + public AudioClip[] RandomSfx; + + /// a test button used to play the sound in inspector + public MMF_Button TestPlayButton; + /// a test button used to stop the sound in inspector + public MMF_Button TestStopButton; + + [MMFInspectorGroup("Play Method", true, 27)] + /// the play method to use when playing the sound (event, cached or on demand) + [Tooltip("the play method to use when playing the sound (event, cached or on demand)")] + public PlayMethods PlayMethod = PlayMethods.Event; + /// the size of the pool when in Pool mode + [Tooltip("the size of the pool when in Pool mode")] + [MMFEnumCondition("PlayMethod", (int)PlayMethods.Pool)] + public int PoolSize = 10; + /// in event mode, whether to use legacy events (MMSfxEvent) or the current events (MMSoundManagerSoundPlayEvent) + [Tooltip("in event mode, whether to use legacy events (MMSfxEvent) or the current events (MMSoundManagerSoundPlayEvent)")] + [MMFEnumCondition("PlayMethod", (int)PlayMethods.Event)] + public bool UseLegacyEventsMode = false; + /// if this is true, calling Stop on this feedback will also stop the sound from playing further + [Tooltip("if this is true, calling Stop on this feedback will also stop the sound from playing further")] + public bool StopSoundOnFeedbackStop = true; + + [MMFInspectorGroup("Sound Properties", true, 28)] + + [Header("Volume")] + /// the minimum volume to play the sound at + [Tooltip("the minimum volume to play the sound at")] + [Range(0f,2f)] + public float MinVolume = 1f; + /// the maximum volume to play the sound at + [Tooltip("the maximum volume to play the sound at")] + [Range(0f,2f)] + public float MaxVolume = 1f; + + [Header("Pitch")] + /// the minimum pitch to play the sound at + [Tooltip("the minimum pitch to play the sound at")] + [Range(-3f,3f)] + public float MinPitch = 1f; + /// the maximum pitch to play the sound at + [Tooltip("the maximum pitch to play the sound at")] + [Range(-3f,3f)] + public float MaxPitch = 1f; + + [Header("Mixer")] + /// the audiomixer to play the sound with (optional) + [Tooltip("the audiomixer to play the sound with (optional)")] + public AudioMixerGroup SfxAudioMixerGroup; + /// the audiosource priority + [Tooltip("the audiosource priority, to be specified if needed between 0 (highest) and 256")] + public int Priority = 128; + + [MMFInspectorGroup("Spatial Settings", true, 33, false, true)] + /// Pans a playing sound in a stereo way (left or right). This only applies to sounds that are Mono or Stereo. + [Tooltip("Pans a playing sound in a stereo way (left or right). This only applies to sounds that are Mono or Stereo.")] + [Range(-1f,1f)] + public float PanStereo; + /// Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D. + [Tooltip("Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D.")] + [Range(0f,1f)] + public float SpatialBlend; + + [MMFInspectorGroup("3D Sound Settings", true, 37, false, true)] + /// Sets the Doppler scale for this AudioSource. + [Tooltip("Sets the Doppler scale for this AudioSource.")] + [Range(0f,5f)] + public float DopplerLevel = 1f; + /// Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space. + [Tooltip("Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space.")] + [Range(0,360)] + public int Spread = 0; + /// Sets/Gets how the AudioSource attenuates over distance. + [Tooltip("Sets/Gets how the AudioSource attenuates over distance.")] + public AudioRolloffMode RolloffMode = AudioRolloffMode.Logarithmic; + /// Within the Min distance the AudioSource will cease to grow louder in volume. + [Tooltip("Within the Min distance the AudioSource will cease to grow louder in volume.")] + public float MinDistance = 1f; + /// (Logarithmic rolloff) MaxDistance is the distance a sound stops attenuating at. + [Tooltip("(Logarithmic rolloff) MaxDistance is the distance a sound stops attenuating at.")] + public float MaxDistance = 500f; + /// whether or not to use a custom curve for custom volume rolloff + [Tooltip("whether or not to use a custom curve for custom volume rolloff")] + public bool UseCustomRolloffCurve = false; + /// the curve to use for custom volume rolloff if UseCustomRolloffCurve is true + [Tooltip("the curve to use for custom volume rolloff if UseCustomRolloffCurve is true")] + [MMFCondition("UseCustomRolloffCurve", true)] + public AnimationCurve CustomRolloffCurve; + /// whether or not to use a custom curve for spatial blend + [Tooltip("whether or not to use a custom curve for spatial blend")] + public bool UseSpatialBlendCurve = false; + /// the curve to use for custom spatial blend if UseSpatialBlendCurve is true + [Tooltip("the curve to use for custom spatial blend if UseSpatialBlendCurve is true")] + [MMFCondition("UseSpatialBlendCurve", true)] + public AnimationCurve SpatialBlendCurve; + /// whether or not to use a custom curve for reverb zone mix + [Tooltip("whether or not to use a custom curve for reverb zone mix")] + public bool UseReverbZoneMixCurve = false; + /// the curve to use for custom reverb zone mix if UseReverbZoneMixCurve is true + [Tooltip("the curve to use for custom reverb zone mix if UseReverbZoneMixCurve is true")] + [MMFCondition("UseReverbZoneMixCurve", true)] + public AnimationCurve ReverbZoneMixCurve; + /// whether or not to use a custom curve for spread + [Tooltip("whether or not to use a custom curve for spread")] + public bool UseSpreadCurve = false; + /// the curve to use for custom spread if UseSpreadCurve is true + [Tooltip("the curve to use for custom spread if UseSpreadCurve is true")] + [MMFCondition("UseSpreadCurve", true)] + public AnimationCurve SpreadCurve; + + protected AudioClip _randomClip; + protected AudioSource _cachedAudioSource; + protected AudioSource[] _pool; + protected AudioSource _tempAudioSource; + protected float _duration; + protected AudioSource _editorAudioSource; + protected AudioSource _audioSource; + protected AudioClip _lastPlayedClip; + + public override void InitializeCustomAttributes() + { + base.InitializeCustomAttributes(); + TestPlayButton = new MMF_Button("Debug Play Sound", TestPlaySound); + TestStopButton = new MMF_Button("Debug Stop Sound", TestStopSound); + } + + /// + /// Custom init to cache the audiosource if required + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if (PlayMethod == PlayMethods.Cached) + { + _cachedAudioSource = CreateAudioSource(owner.gameObject, "CachedFeedbackAudioSource"); + } + _lastPlayedClip = null; + if (PlayMethod == PlayMethods.Pool) + { + // create a pool + _pool = new AudioSource[PoolSize]; + for (int i = 0; i < PoolSize; i++) + { + _pool[i] = CreateAudioSource(owner.gameObject, "PooledAudioSource"+i); + } + } + } + + protected virtual AudioSource CreateAudioSource(GameObject owner, string audioSourceName) + { + // we create a temporary game object to host our audio source + GameObject temporaryAudioHost = new GameObject(audioSourceName); + SceneManager.MoveGameObjectToScene(temporaryAudioHost.gameObject, Owner.gameObject.scene); + // we set the temp audio's position + temporaryAudioHost.transform.position = owner.transform.position; + temporaryAudioHost.transform.SetParent(owner.transform); + // we add an audio source to that host + _tempAudioSource = temporaryAudioHost.AddComponent() as AudioSource; + _tempAudioSource.playOnAwake = false; + return _tempAudioSource; + } + + /// + /// Plays either a random sound or the specified sfx + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + if (Sfx != null) + { + _duration = Sfx.length; + PlaySound(Sfx, position, intensityMultiplier); + return; + } + + if (RandomSfx.Length > 0) + { + _randomClip = RandomSfx[Random.Range(0, RandomSfx.Length)]; + + if (_randomClip != null) + { + _duration = _randomClip.length; + PlaySound(_randomClip, position, intensityMultiplier); + } + + } + } + + protected virtual float GetDuration() + { + if (Sfx != null) + { + return Sfx.length; + } + + float longest = 0f; + if ((RandomSfx != null) && (RandomSfx.Length > 0)) + { + if (_lastPlayedClip != null) + { + return _lastPlayedClip.length; + } + + foreach (AudioClip clip in RandomSfx) + { + if ((clip != null) && (clip.length > longest)) + { + longest = clip.length; + } + } + + return longest; + } + + return 0f; + } + + /// + /// Plays a sound differently based on the selected play method + /// + /// + /// + protected virtual void PlaySound(AudioClip sfx, Vector3 position, float intensity) + { + float volume = Random.Range(MinVolume, MaxVolume); + + if (!Timing.ConstantIntensity) + { + volume = volume * intensity; + } + + float pitch = Random.Range(MinPitch, MaxPitch); + + int timeSamples = NormalPlayDirection ? 0 : sfx.samples - 1; + + if (!NormalPlayDirection) + { + pitch = -pitch; + } + + _lastPlayedClip = sfx; + Owner.ComputeCachedTotalDuration(); + + switch (PlayMethod) + { + case PlayMethods.Event: + if (UseLegacyEventsMode) + { + MMSfxEvent.Trigger(sfx, SfxAudioMixerGroup, volume, pitch, Priority); + } + else + { + MMSoundManagerPlayOptions options = new MMSoundManagerPlayOptions(); + options = MMSoundManagerPlayOptions.Default; + options.Location = Owner.transform.position; + options.AudioGroup = SfxAudioMixerGroup; + options.DoNotAutoRecycleIfNotDonePlaying = true; + options.Volume = volume; + options.Pitch = pitch; + options.PanStereo = PanStereo; + options.SpatialBlend = SpatialBlend; + options.Priority = Priority; + options.DopplerLevel = DopplerLevel; + options.Spread = Spread; + options.RolloffMode = RolloffMode; + options.MinDistance = MinDistance; + options.MaxDistance = MaxDistance; + options.UseSpreadCurve = UseSpreadCurve; + options.SpreadCurve = SpreadCurve; + options.UseCustomRolloffCurve = UseCustomRolloffCurve; + options.CustomRolloffCurve = CustomRolloffCurve; + options.UseSpatialBlendCurve = UseSpatialBlendCurve; + options.SpatialBlendCurve = SpatialBlendCurve; + options.UseReverbZoneMixCurve = UseReverbZoneMixCurve; + options.ReverbZoneMixCurve = ReverbZoneMixCurve; + + if (Priority >= 0) + { + options.Priority = Mathf.Min(Priority, 256); + } + options.MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Sfx; + options.Loop = false; + _audioSource = MMSoundManagerSoundPlayEvent.Trigger(sfx, options); + } + break; + case PlayMethods.Cached: + // we set that audio source clip to the one in paramaters + PlayAudioSource(_cachedAudioSource, sfx, volume, pitch, timeSamples, SfxAudioMixerGroup, Priority); + break; + case PlayMethods.OnDemand: + // we create a temporary game object to host our audio source + GameObject temporaryAudioHost = new GameObject("TempAudio"); + SceneManager.MoveGameObjectToScene(temporaryAudioHost.gameObject, Owner.gameObject.scene); + // we set the temp audio's position + temporaryAudioHost.transform.position = position; + // we add an audio source to that host + AudioSource audioSource = temporaryAudioHost.AddComponent() as AudioSource; + PlayAudioSource(audioSource, sfx, volume, pitch, timeSamples, SfxAudioMixerGroup, Priority); + // we destroy the host after the clip has played + Owner.ProxyDestroy(temporaryAudioHost, sfx.length * Time.timeScale); + break; + case PlayMethods.Pool: + _tempAudioSource = GetAudioSourceFromPool(); + if (_tempAudioSource != null) + { + PlayAudioSource(_tempAudioSource, sfx, volume, pitch, timeSamples, SfxAudioMixerGroup, Priority); + } + break; + } + } + + /// + /// On Stop, we stop our sound if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (StopSoundOnFeedbackStop && (_audioSource != null)) + { + _audioSource.Stop(); + } + } + + /// + /// Plays the audio source with the specified volume and pitch + /// + /// + /// + /// + /// + protected virtual void PlayAudioSource(AudioSource audioSource, AudioClip sfx, float volume, float pitch, int timeSamples, AudioMixerGroup audioMixerGroup = null, int priority = 128) + { + _audioSource = audioSource; + // we set that audio source clip to the one in paramaters + audioSource.clip = sfx; + audioSource.timeSamples = timeSamples; + // we set the audio source volume to the one in parameters + audioSource.volume = volume; + audioSource.pitch = pitch; + audioSource.priority = priority; + // we set spatial settings + audioSource.panStereo = PanStereo; + audioSource.spatialBlend = SpatialBlend; + audioSource.dopplerLevel = DopplerLevel; + audioSource.spread = Spread; + audioSource.rolloffMode = RolloffMode; + audioSource.minDistance = MinDistance; + audioSource.maxDistance = MaxDistance; + if (UseSpreadCurve) { audioSource.SetCustomCurve(AudioSourceCurveType.Spread, SpreadCurve); } + if (UseCustomRolloffCurve) { audioSource.SetCustomCurve(AudioSourceCurveType.CustomRolloff, CustomRolloffCurve); } + if (UseSpatialBlendCurve) { audioSource.SetCustomCurve(AudioSourceCurveType.SpatialBlend, SpatialBlendCurve); } + if (UseReverbZoneMixCurve) { audioSource.SetCustomCurve(AudioSourceCurveType.ReverbZoneMix, ReverbZoneMixCurve); } + // we set our loop setting + audioSource.loop = false; + if (audioMixerGroup != null) + { + audioSource.outputAudioMixerGroup = audioMixerGroup; + } + // we start playing the sound + audioSource.Play(); + } + + /// + /// Gets an audio source from the pool if possible + /// + /// + protected virtual AudioSource GetAudioSourceFromPool() + { + for (int i = 0; i < PoolSize; i++) + { + if (!_pool[i].isPlaying) + { + return _pool[i]; + } + } + return null; + } + + /// + /// A test method that creates an audiosource, plays it, and destroys itself after play + /// + protected virtual async void TestPlaySound() + { + AudioClip tmpAudioClip = null; + + if (Sfx != null) + { + tmpAudioClip = Sfx; + } + + if (RandomSfx.Length > 0) + { + tmpAudioClip = RandomSfx[Random.Range(0, RandomSfx.Length)]; + } + + if (tmpAudioClip == null) + { + Debug.LogError(Label + " on " + Owner.gameObject.name + " can't play in editor mode, you haven't set its Sfx."); + return; + } + + float volume = Random.Range(MinVolume, MaxVolume); + float pitch = Random.Range(MinPitch, MaxPitch); + GameObject temporaryAudioHost = new GameObject("EditorTestAS_WillAutoDestroy"); + SceneManager.MoveGameObjectToScene(temporaryAudioHost.gameObject, Owner.gameObject.scene); + temporaryAudioHost.transform.position = Owner.transform.position; + _editorAudioSource = temporaryAudioHost.AddComponent() as AudioSource; + PlayAudioSource(_editorAudioSource, tmpAudioClip, volume, pitch, 0); + float length = 1000 * tmpAudioClip.length; + await Task.Delay((int)length); + Owner.ProxyDestroyImmediate(temporaryAudioHost); + } + + /// + /// A test method that stops the test sound + /// + protected virtual void TestStopSound() + { + if (_editorAudioSource != null) + { + _editorAudioSource.Stop(); + } + } + + /// + /// Automatically tries to add a MMSoundManager to the scene if none are present + /// + public override void AutomaticShakerSetup() + { + if (PlayMethod != PlayMethods.Event) + { + return; + } + MMSoundManager soundManager = (MMSoundManager)UnityEngine.Object.FindObjectOfType(typeof(MMSoundManager)); + if (soundManager == null) + { + GameObject soundManagerGo = new GameObject("MMSoundManager"); + soundManagerGo.AddComponent(); + MMDebug.DebugLogInfo( "Added a MMSoundManager to the scene. You're all set."); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Sound.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Sound.cs.meta new file mode 100644 index 0000000..9e10faf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_Sound.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 074e2f162fb1f104087f3cc4bef82972 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_TextFontSize.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_TextFontSize.cs new file mode 100644 index 0000000..32d9af3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_TextFontSize.cs @@ -0,0 +1,75 @@ +#if MM_UI +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the font size of a target Text over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the font size of a target Text over time.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.MMTools")] + [FeedbackPath("UI/Text Font Size")] + public class MMF_TextFontSize : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override bool EvaluateRequiresSetup() { return (TargetText == null); } + public override string RequiredTargetText { get { return TargetText != null ? TargetText.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetText be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 58, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public Text TargetText; + + [MMFInspectorGroup("Font Size", true, 59)] + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType FontSizeCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 1f; + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantFontSize; + + protected override void FillTargets() + { + if (TargetText == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetText.gameObject; + receiver.TargetComponent = TargetText; + receiver.TargetPropertyName = "fontSize"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = FontSizeCurve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantFontSize; + + _targets.Add(target); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_TextFontSize.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_TextFontSize.cs.meta new file mode 100644 index 0000000..65ed273 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Feedbacks/MMF_TextFontSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93076aeef94b6194eacceebc74fcd3b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio.meta new file mode 100644 index 0000000..a11b949 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f70eabfbd004ab4bbadc093dc39761b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy.meta new file mode 100644 index 0000000..48dce5a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe68cc0665ffaa849842ed77ae03c24a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy/MMFeedbackBase.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy/MMFeedbackBase.cs new file mode 100644 index 0000000..b2dfcce --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy/MMFeedbackBase.cs @@ -0,0 +1,256 @@ +using MoreMountains.Tools; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + public class MMFeedbackBaseTarget + { + /// the receiver to write the level to + public MMPropertyReceiver Target; + /// the curve to tween the intensity on + public MMTweenType LevelCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the intensity curve's 0 to + public float RemapLevelZero = 0f; + /// the value to remap the intensity curve's 1 to + public float RemapLevelOne = 1f; + /// the value to move the intensity to in instant mode + public float InstantLevel; + /// the initial value for this level + public float InitialLevel; + } + + public abstract class MMFeedbackBase : MMFeedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + + [Header("Mode")] + /// whether the feedback should affect the target property instantly or over a period of time + [Tooltip("whether the feedback should affect the target property instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the target property should change over time + [Tooltip("how long the target property should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// whether or not that target property should be turned off on start + [Tooltip("whether or not that target property should be turned off on start")] + public bool StartsOff = false; + /// whether or not the values should be relative or not + [Tooltip("whether or not the values should be relative or not")] + public bool RelativeValues = true; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + /// if this is true, the target object will be disabled on stop + [Tooltip("if this is true, the target object will be disabled on stop")] + public bool DisableOnStop = false; + + /// the duration of this feedback is the duration of the target property, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { if (Mode != Modes.Instant) { Duration = value; } } } + + protected List _targets; + protected Coroutine _coroutine = null; + + /// + /// On init we turn the target property off if needed + /// + /// + protected override void CustomInitialization(GameObject owner) + { + base.CustomInitialization(owner); + + PrepareTargets(); + + if (Active) + { + if (StartsOff) + { + Turn(false); + } + } + } + + /// + /// Creates a new list, fills the targets, and initializes them + /// + protected virtual void PrepareTargets() + { + _targets = new List(); + FillTargets(); + InitializeTargets(); + } + + /// + /// On validate (if a value has changed in the inspector), we reinitialize what needs to be + /// + protected virtual void OnValidate() + { + PrepareTargets(); + } + + /// + /// Fills our list of targets, meant to be extended + /// + protected abstract void FillTargets(); + + /// + /// Initializes each target in the list + /// + protected virtual void InitializeTargets() + { + if (_targets.Count == 0) + { + return; + } + + foreach(MMFeedbackBaseTarget target in _targets) + { + target.Target.Initialization(this.gameObject); + target.InitialLevel = target.Target.Level; + } + } + + /// + /// On Play we turn our target property on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized) + { + Turn(true); + switch (Mode) + { + case Modes.Instant: + Instant(); + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + _coroutine = StartCoroutine(UpdateValueSequence(feedbacksIntensity)); + break; + } + } + } + + /// + /// Plays an instant feedback + /// + protected virtual void Instant() + { + if (_targets.Count == 0) + { + return; + } + + foreach (MMFeedbackBaseTarget target in _targets) + { + target.Target.SetLevel(target.InstantLevel); + } + } + + /// + /// This coroutine will modify the values on the target property + /// + /// + protected virtual IEnumerator UpdateValueSequence(float feedbacksIntensity) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + SetValues(remappedTime, feedbacksIntensity); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetValues(FinalNormalizedTime, feedbacksIntensity); + if (StartsOff) + { + Turn(false); + } + IsPlaying = false; + _coroutine = null; + yield return null; + } + + + + /// + /// Sets the various values on the target property on a specified time (between 0 and 1) + /// + /// + protected virtual void SetValues(float time, float feedbacksIntensity) + { + if (_targets.Count == 0) + { + return; + } + + float intensityMultiplier = Timing.ConstantIntensity ? 1f : feedbacksIntensity; + + foreach (MMFeedbackBaseTarget target in _targets) + { + float intensity = MMTween.Tween(time, 0f, 1f, target.RemapLevelZero, target.RemapLevelOne, target.LevelCurve); + if (RelativeValues) + { + intensity += target.InitialLevel; + } + target.Target.SetLevel(intensity * intensityMultiplier); + } + } + + /// + /// Turns the target property object off on stop if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active) + { + if (_coroutine != null) + { + StopCoroutine(_coroutine); + _coroutine = null; + } + IsPlaying = false; + if (DisableOnStop) + { + Turn(false); + } + } + } + + /// + /// Turns the target object on or off + /// + /// + protected virtual void Turn(bool status) + { + if (_targets.Count == 0) + { + return; + } + foreach (MMFeedbackBaseTarget target in _targets) + { + if (target.Target.TargetComponent.gameObject != null) + { + target.Target.TargetComponent.gameObject.SetActive(status); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy/MMFeedbackBase.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy/MMFeedbackBase.cs.meta new file mode 100644 index 0000000..bc02307 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/Legacy/MMFeedbackBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f4f5b5a7ea2cc745891557ab909c6c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/MMF_FeedbackBase.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/MMF_FeedbackBase.cs new file mode 100644 index 0000000..62a3313 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/MMF_FeedbackBase.cs @@ -0,0 +1,314 @@ +using MoreMountains.Tools; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Feedbacks +{ + public class MMF_FeedbackBaseTarget + { + /// the receiver to write the level to + public MMPropertyReceiver Target; + /// the curve to tween the intensity on + public MMTweenType LevelCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the intensity curve's 0 to + public float RemapLevelZero = 0f; + /// the value to remap the intensity curve's 1 to + public float RemapLevelOne = 1f; + /// the value to move the intensity to in instant mode + public float InstantLevel; + /// the initial value for this level + public float InitialLevel; + } + + public abstract class MMF_FeedbackBase : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + + [MMFInspectorGroup("Mode", true, 64)] + /// whether the feedback should affect the target property instantly or over a period of time + [Tooltip("whether the feedback should affect the target property instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the target property should change over time + [Tooltip("how long the target property should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// whether or not that target property should be turned off on start + [Tooltip("whether or not that target property should be turned off on start")] + public bool StartsOff = false; + /// whether or not that target property should be turned off once the feedback is done playing + [Tooltip("whether or not that target property should be turned off once the feedback is done playing")] + public bool EndsOff = false; + /// whether or not the values should be relative or not + [Tooltip("whether or not the values should be relative or not")] + public bool RelativeValues = true; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// if this is true, the target object will be disabled on stop + [Tooltip("if this is true, the target object will be disabled on stop")] + public bool DisableOnStop = false; + /// if this is true, this feedback will only play if its target is active in hierarchy + [Tooltip("if this is true, this feedback will only play if its target is active in hierarchy")] + public bool OnlyPlayIfTargetIsActive = false; + /// the duration of this feedback is the duration of the target property, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { if (Mode != Modes.Instant) { Duration = value; } } } + public override bool HasRandomness => true; + public override bool HasCustomInspectors => true; + + protected List _targets; + protected Coroutine _coroutine = null; + + /// + /// On init we turn the target property off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + PrepareTargets(); + + if (Active) + { + if (StartsOff) + { + Turn(false); + } + } + } + + /// + /// Creates a new list, fills the targets, and initializes them + /// + public virtual void PrepareTargets() + { + _targets = new List(); + FillTargets(); + InitializeTargets(); + } + + /// + /// On validate (if a value has changed in the inspector), we reinitialize what needs to be + /// + public override void OnValidate() + { + base.OnValidate(); + PrepareTargets(); + } + + /// + /// Fills our list of targets, meant to be extended + /// + protected abstract void FillTargets(); + + /// + /// Initializes each target in the list + /// + protected virtual void InitializeTargets() + { + if (_targets.Count == 0) + { + return; + } + + foreach(MMF_FeedbackBaseTarget target in _targets) + { + target.Target.Initialization(Owner.gameObject); + target.InitialLevel = target.Target.Level; + } + } + + /// + /// On Play we turn our target property on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (Active && FeedbackTypeAuthorized) + { + if (!CanPlay()) + { + return; + } + + Turn(true); + + switch (Mode) + { + case Modes.Instant: + Instant(); + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(UpdateValueSequence(feedbacksIntensity, position)); + break; + } + } + } + + /// + /// Plays an instant feedback + /// + protected virtual void Instant() + { + if (_targets.Count == 0) + { + return; + } + + foreach (MMF_FeedbackBaseTarget target in _targets) + { + target.Target.SetLevel(target.InstantLevel); + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (_targets.Count == 0) + { + return; + } + + foreach (MMF_FeedbackBaseTarget target in _targets) + { + target.Target.SetLevel(target.InitialLevel); + } + } + + /// + /// This coroutine will modify the values on the target property + /// + /// + protected virtual IEnumerator UpdateValueSequence(float feedbacksIntensity, Vector3 position) + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + SetValues(remappedTime, feedbacksIntensity, position); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetValues(FinalNormalizedTime, feedbacksIntensity, position); + if (EndsOff) + { + Turn(false); + } + IsPlaying = false; + _coroutine = null; + yield return null; + } + + + + /// + /// Sets the various values on the target property on a specified time (between 0 and 1) + /// + /// + protected virtual void SetValues(float time, float feedbacksIntensity, Vector3 position) + { + if (_targets.Count == 0) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + + foreach (MMF_FeedbackBaseTarget target in _targets) + { + float intensity = MMTween.Tween(time, 0f, 1f, target.RemapLevelZero, target.RemapLevelOne, target.LevelCurve); + if (RelativeValues) + { + intensity += target.InitialLevel; + } + target.Target.SetLevel(intensity * intensityMultiplier); + } + } + + /// + /// Turns the target property object off on stop if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + if (Active) + { + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + IsPlaying = false; + if (DisableOnStop) + { + Turn(false); + } + } + } + + /// + /// Turns the target object on or off + /// + /// + protected virtual void Turn(bool status) + { + if (_targets.Count == 0) + { + return; + } + foreach (MMF_FeedbackBaseTarget target in _targets) + { + if (target.Target.TargetComponent.gameObject != null) + { + target.Target.TargetComponent.gameObject.SetActive(status); + } + } + } + + /// + /// Checks whether or not this feedback should play according to the defined settings + /// + /// + protected virtual bool CanPlay() + { + if (_targets.Count == 0) + { + return false; + } + foreach (MMF_FeedbackBaseTarget target in _targets) + { + if (OnlyPlayIfTargetIsActive) + { + if (!target.Target.TargetComponent.gameObject.activeInHierarchy) + { + return false; + } + } + } + + return true; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/MMF_FeedbackBase.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/MMF_FeedbackBase.cs.meta new file mode 100644 index 0000000..1d0cad7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MMRadio/MMF_FeedbackBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6906d20e526ebe749b396f651e78e047 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MoreMountains.Feedbacks.MMTools.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MoreMountains.Feedbacks.MMTools.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MoreMountains.Feedbacks.MMTools.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MoreMountains.Feedbacks.MMTools.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MoreMountains.Feedbacks.MMTools.asmref.meta new file mode 100644 index 0000000..4d69aa0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/MoreMountains.Feedbacks.MMTools.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f66483fc4928824e96ba9aa3eb86e6f +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers.meta new file mode 100644 index 0000000..6f145aa --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f20699338969e5a4bb1837ea73f00963 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers/MMPostProcessingMovingFilter.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers/MMPostProcessingMovingFilter.cs new file mode 100644 index 0000000..31e5f70 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers/MMPostProcessingMovingFilter.cs @@ -0,0 +1,267 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// An event used to move filters on and off a camera + /// + public struct MMPostProcessingMovingFilterEvent + { + static private event Delegate OnEvent; + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + private static void RuntimeInitialization() + { + OnEvent = null; + } + + static public void Register(Delegate callback) + { + OnEvent += callback; + } + + static public void Unregister(Delegate callback) + { + OnEvent -= callback; + } + + public delegate void Delegate(MMTweenType curve, bool active, bool toggle, float duration, int channel = 0, + bool stop = false, bool restore = false); + + static public void Trigger(MMTweenType curve, bool active, bool toggle, float duration, int channel = 0, + bool stop = false, bool restore = false) + { + OnEvent?.Invoke(curve, active, toggle, duration, channel, stop, restore); + } + } + + /// + /// + /// This class lets you create moving filters, very much like the old gelatin camera filters, that will move to connect to your camera + /// Typically a moving filter should be made of a MMPostProcessingMovingFilter component, + /// a PostProcessing volume, and a BoxCollider (recommended size is 1,1,1 if you want to use the default offset) + /// The filter will move on the y axis. + /// + /// Use : + /// MMPostProcessingMovingFilterEvent.Trigger(MMTween.MMTweenCurve.EaseInOutCubic, TrueOrFalse, Duration, ChannelID); + /// + /// + [AddComponentMenu("More Mountains/Tools/Camera/MMPostProcessingMovingFilter")] + public class MMPostProcessingMovingFilter : MonoBehaviour + { + public enum TimeScales + { + Unscaled, + Scaled + } + + [Header("Settings")] + /// the channel ID for this filter. Any event with a different channel ID will be ignored + public int Channel = 0; + + /// whether this should use scaled or unscaled time + public TimeScales TimeScale = TimeScales.Unscaled; + + /// the curve to use for this movement + public MMTweenType Curve = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + + /// whether the filter is active at start or not + public bool Active = false; + + [MMVector("On", "Off")] + /// the vertical offsets to apply when the filter is on or off + public Vector2 FilterOffset = new Vector2(0f, 5f); + + /// whether or not to add the initial position + public bool AddToInitialPosition = true; + + [Header("Tests")] + /// the duration to apply to the test methods + public float TestDuration = 0.5f; + + /// a test button to toggle the filter on or off + [MMInspectorButton("PostProcessingToggle")] + public bool PostProcessingToggleButton; + + /// a test button to turn the filter off + [MMInspectorButton("PostProcessingTriggerOff")] + public bool PostProcessingTriggerOffButton; + + /// a test button to turn the filter on + [MMInspectorButton("PostProcessingTriggerOn")] + public bool PostProcessingTriggerOnButton; + + protected bool _lastReachedState = false; + protected float _duration = 2f; + protected float _lastMovementStartedAt = 0f; + protected Vector3 _initialPosition; + protected Vector3 _positionToRestore; + protected Vector3 _newPosition; + + /// + /// On Start we initialize our filter + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// Sets the filter at the right initial position + /// + protected virtual void Initialization() + { + _lastMovementStartedAt = 0f; + + _positionToRestore = this.transform.localPosition; + + if (AddToInitialPosition) + { + _initialPosition = this.transform.localPosition; + } + else + { + _initialPosition = Vector3.zero; + } + + _newPosition = _initialPosition; + _newPosition.y = Active ? _initialPosition.y + FilterOffset.x : _initialPosition.y + FilterOffset.y; + this.transform.localPosition = _newPosition; + _lastReachedState = Active; + } + + /// + /// On update we move if needed + /// + protected virtual void Update() + { + // if we're already at destination, we do nothing and exit + if (_lastReachedState == Active) + { + return; + } + + MoveTowardsCurrentTarget(); + } + + /// + /// Moves the filter towards its current target position + /// + protected virtual void MoveTowardsCurrentTarget() + { + if (_newPosition != this.transform.localPosition) + { + this.transform.localPosition = _newPosition; + } + + float originY = Active ? _initialPosition.y + FilterOffset.y : _initialPosition.y + FilterOffset.x; + float targetY = Active ? _initialPosition.y + FilterOffset.x : _initialPosition.y + FilterOffset.y; + float currentTime = (TimeScale == TimeScales.Unscaled) ? Time.unscaledTime : Time.time; + + _newPosition = this.transform.localPosition; + _newPosition.y = + MMTween.Tween(currentTime - _lastMovementStartedAt, 0f, _duration, originY, targetY, Curve); + + if (currentTime - _lastMovementStartedAt > _duration) + { + _newPosition.y = targetY; + this.transform.localPosition = _newPosition; + _lastReachedState = Active; + } + } + + public virtual void RestoreInitialPosition() + { + this.transform.localPosition = _positionToRestore; + } + + /// + /// if we get a PostProcessingTriggerEvent + /// + /// + /// + /// + /// + public virtual void OnMMPostProcessingMovingFilterEvent(MMTweenType curve, bool active, bool toggle, + float duration, int channel = 0, bool stop = false, bool restore = false) + { + if ((channel != Channel) && (channel != -1) && (Channel != -1)) + { + return; + } + + if (stop) + { + _lastReachedState = Active; + return; + } + + if (restore) + { + RestoreInitialPosition(); + return; + } + + Curve = curve; + _duration = duration; + + if (toggle) + { + Active = !Active; + } + else + { + Active = active; + } + + float currentTime = (TimeScale == TimeScales.Unscaled) ? Time.unscaledTime : Time.time; + _lastMovementStartedAt = currentTime; + } + + /// + /// On enable, we start listening to MMPostProcessingTriggerEvents + /// + protected virtual void OnEnable() + { + MMPostProcessingMovingFilterEvent.Register(OnMMPostProcessingMovingFilterEvent); + } + + /// + /// On disable, we stop listening to MMPostProcessingTriggerEvents + /// + protected virtual void OnDisable() + { + MMPostProcessingMovingFilterEvent.Unregister(OnMMPostProcessingMovingFilterEvent); + } + + // TEST METHODS -------------------------------------------------------------------------------------------------------------------- + + /// + /// Toggles the post processing effect on or off + /// + protected virtual void PostProcessingToggle() + { + MMPostProcessingMovingFilterEvent.Trigger(new MMTweenType(MMTween.MMTweenCurve.EaseInOutCubic), false, true, + TestDuration, 0); + } + + /// + /// Turns the post processing effect off + /// + protected virtual void PostProcessingTriggerOff() + { + MMPostProcessingMovingFilterEvent.Trigger(new MMTweenType(MMTween.MMTweenCurve.EaseInOutCubic), false, + false, TestDuration, 0); + } + + /// + /// Turns the post processing effect on + /// + protected virtual void PostProcessingTriggerOn() + { + MMPostProcessingMovingFilterEvent.Trigger(new MMTweenType(MMTween.MMTweenCurve.EaseInOutCubic), true, false, + TestDuration, 0); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers/MMPostProcessingMovingFilter.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers/MMPostProcessingMovingFilter.cs.meta new file mode 100644 index 0000000..1e67f46 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/MMTools/Shakers/MMPostProcessingMovingFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6acbf0a8faacbb342ad72339d38c5a4d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations.meta new file mode 100644 index 0000000..ecfbc17 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06eec75266feac744b95f07d584b384c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks.meta new file mode 100644 index 0000000..ebe89b1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 94bdc8dfc1e5b1745b2e9a81629047f8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy.meta new file mode 100644 index 0000000..dbabbbe --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d69e81340dd6ec419cf2600d5fddf0f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy/MMFeedbackNVSettings.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy/MMFeedbackNVSettings.cs new file mode 100644 index 0000000..459fbb6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy/MMFeedbackNVSettings.cs @@ -0,0 +1,77 @@ +using UnityEngine; +#if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED +using Lofelt.NiceVibrations; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// A class used to store and manage common Nice Vibrations feedback settings + /// + [System.Serializable] + public class MMFeedbackNVSettings + { + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + /// whether or not to force this haptic to play on a specific gamepad + [Tooltip("whether or not to force this haptic to play on a specific gamepad")] + public bool ForceGamepadID = false; + /// The ID of the gamepad on which to play this haptic + [Tooltip("The ID of the gamepad on which to play this haptic")] + public int GamepadID = 0; + /// whether or not this haptic should play only if haptics are supported + [Tooltip("whether or not this haptic should play only if haptics are supported")] + public bool OnlyPlayIfHapticsSupported = true; + /// whether or not this haptic should play only if advanced haptics requirements are met on the device + [Tooltip("whether or not this haptic should play only if advanced haptics requirements are met on the device")] + public bool OnlyPlayIfAdvancedRequirementsMet = false; + /// whether or not this haptic should play only if the device supports amplitude modulation + [Tooltip("whether or not this haptic should play only if the device supports amplitude modulation")] + public bool OnlyPlayIfAmplitudeModulationSupported = false; + /// whether or not this haptic should play only if the device supports frequency modulation + [Tooltip("whether or not this haptic should play only if the device supports frequency modulation")] + public bool OnlyPlayIfFrequencyModulationSupported = false; + + /// + /// If necessary, forces the current haptic to play on a specific gamepad + /// + public virtual void SetGamepad() + { + if (ForceGamepadID) + { + GamepadRumbler.SetCurrentGamepad(GamepadID); + } + } + + /// + /// Whether or not this haptic can play based on the specified conditions + /// + /// + public virtual bool CanPlay() + { + #if UNITY_IOS || UNITY_ANDROID + if (OnlyPlayIfHapticsSupported && !DeviceCapabilities.isVersionSupported) + { + return false; + } + #endif + + if (OnlyPlayIfAdvancedRequirementsMet && !DeviceCapabilities.meetsAdvancedRequirements) + { + return false; + } + + if (OnlyPlayIfAmplitudeModulationSupported && !DeviceCapabilities.hasAmplitudeModulation) + { + return false; + } + + if (OnlyPlayIfFrequencyModulationSupported && !DeviceCapabilities.hasFrequencyModulation) + { + return false; + } + + return true; + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy/MMFeedbackNVSettings.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy/MMFeedbackNVSettings.cs.meta new file mode 100644 index 0000000..f93b6fa --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/Legacy/MMFeedbackNVSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3abc70b7028a09449b0976268deba80b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_Haptics.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_Haptics.cs new file mode 100644 index 0000000..e6654c3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_Haptics.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this feedback to be able to trigger haptic feedbacks via the NiceVibration library. + /// It'll let you create transient or continuous vibrations, play presets or advanced patterns via AHAP files, and stop any vibration at any time + /// This feedback has been deprecated, and is just here to avoid errors in case you were to update from an old version. Use the new haptic feedbacks instead. + /// + [AddComponentMenu("")] + [FeedbackPath("Haptics/Haptics DEPRECATED!")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.NiceVibrations")] + [FeedbackHelp("This feedback has been deprecated, and is just here to avoid errors in case you were to update from an old version. Use any of the new haptic feedbacks instead.")] + public class MMF_Haptics : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + [Header("Deprecated Feedback")] + /// if this is true, this feedback will output a warning when played + public bool OutputDeprecationWarning = true; + + /// + /// When this feedback gets played + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (OutputDeprecationWarning) + { + Debug.LogWarning(Owner.name + " : the haptic feedback on this object is using the old version of Nice Vibrations, and won't work anymore. Replace it with any of the new haptic feedbacks."); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_Haptics.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_Haptics.cs.meta new file mode 100644 index 0000000..3aa7ec3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_Haptics.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd8d60a3aa719934084bb1539d7e4ef3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVClip.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVClip.cs new file mode 100644 index 0000000..1f972f1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVClip.cs @@ -0,0 +1,112 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED +using Lofelt.NiceVibrations; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this feedback to play a .haptic clip, optionally randomizing its level and frequency + /// + [AddComponentMenu("")] + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + [FeedbackPath("Haptics/Haptic Clip")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.NiceVibrations")] + [FeedbackHelp("This feedback will let you play a haptic clip, and randomize its level and frequency.")] + public class MMF_NVClip : MMF_Feedback + { + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.HapticsColor; } } + public override bool EvaluateRequiresSetup() { return (Clip == null); } + public override string RequiredTargetText { get { return Clip != null ? Clip.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a Clip be set to be able to work properly. You can set one below."; } } + #endif + + [MMFInspectorGroup("Haptic Clip", true, 13, true)] + /// the haptic clip to play with this feedback + [Tooltip("the haptic clip to play with this feedback")] + public HapticClip Clip; + /// a preset to play should the device you're running your game on doesn't support playing haptic clips + [Tooltip("a preset to play should the device you're running your game on doesn't support playing haptic clips")] + public HapticPatterns.PresetType FallbackPreset = HapticPatterns.PresetType.LightImpact; + /// whether or not this clip should play on a loop, until stopped (won't work on gamepads) + [Tooltip("whether or not this clip should play on a loop, until stopped (won't work on gamepads)")] + public bool Loop = false; + /// at what timestamp this clip should start playing + [Tooltip("at what timestamp this clip should start playing")] + public float SeekTime = 0f; + + [MMFInspectorGroup("Level", true, 14)] + /// the minimum level at which this clip should play (level will be randomized between MinLevel and MaxLevel) + [Tooltip("the minimum level at which this clip should play (level will be randomized between MinLevel and MaxLevel)")] + [Range(0f, 5f)] + public float MinLevel = 1f; + /// the maximum level at which this clip should play (level will be randomized between MinLevel and MaxLevel) + [Tooltip("the maximum level at which this clip should play (level will be randomized between MinLevel and MaxLevel)")] + [Range(0f, 5f)] + public float MaxLevel = 1f; + + [MMFInspectorGroup("Frequency Shift", true, 15)] + /// the minimum frequency shift at which this clip should play (frequency shift will be randomized between MinFrequencyShift and MaxLevel) + [Tooltip("the minimum frequency shift at which this clip should play (frequency shift will be randomized between MinFrequencyShift and MaxFrequencyShift)")] + [Range(-1f, 1f)] + public float MinFrequencyShift = 0f; + /// the maximum frequency shift at which this clip should play (frequency shift will be randomized between MinFrequencyShift and MaxLevel) + [Tooltip("the maximum frequency shift at which this clip should play (frequency shift will be randomized between MinFrequencyShift and MaxFrequencyShift)")] + [Range(-1f, 1f)] + public float MaxFrequencyShift = 0f; + + [MMFInspectorGroup("Settings", true, 16)] + /// a set of settings you can tweak to specify how and when exactly this haptic should play + [Tooltip("a set of settings you can tweak to specify how and when exactly this haptic should play")] + public MMFeedbackNVSettings HapticSettings; + + /// + /// On play, we load our clip, set its settings and play it + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || !HapticSettings.CanPlay() || (Clip == null)) + { + return; + } + + HapticController.Load(Clip); + HapticSettings.SetGamepad(); + HapticController.fallbackPreset = FallbackPreset; + HapticController.Loop(Loop); + HapticController.Seek(SeekTime); + HapticController.clipLevel = Random.Range(MinLevel, MaxLevel); + HapticController.clipFrequencyShift = Random.Range(MinFrequencyShift, MaxFrequencyShift); + HapticController.Play(); + } + + /// + /// On stop we stop haptics + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!FeedbackTypeAuthorized) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + HapticController.Stop(); + } + #else + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) { } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVClip.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVClip.cs.meta new file mode 100644 index 0000000..6333e23 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVClip.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a7b40b69918c9840b090deb2a59d5eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVContinuous.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVContinuous.cs new file mode 100644 index 0000000..c1c161d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVContinuous.cs @@ -0,0 +1,154 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Feedbacks; +#if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED +using Lofelt.NiceVibrations; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this feedback to play a continuous haptic of the specified amplitude and frequency over a certain duration. This feedback will also let you randomize these, and modulate them over time. + /// + [AddComponentMenu("")] + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + [FeedbackPath("Haptics/Haptic Continuous")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.NiceVibrations")] + [FeedbackHelp("Add this feedback to play a continuous haptic of the specified amplitude and frequency over a certain duration. This feedback will also let you randomize these, and modulate them over time.")] + public class MMF_NVContinuous : MMF_Feedback + { + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.HapticsColor; } } + #endif + public override float FeedbackDuration { get { return ApplyTimeMultiplier(_duration); } set { _duration = value; } } + + [MMFInspectorGroup("Haptic Amplitude", true, 31)] + /// the minimum amplitude at which this clip should play (amplitude will be randomized between MinAmplitude and MaxAmplitude) + [Tooltip("the minimum amplitude at which this clip should play (amplitude will be randomized between MinAmplitude and MaxAmplitude)")] + [Range(0f, 1f)] + public float MinAmplitude = 1f; + /// the maximum amplitude at which this clip should play (amplitude will be randomized between MinAmplitude and MaxAmplitude) + [Tooltip("the maximum amplitude at which this clip should play (amplitude will be randomized between MinAmplitude and MaxAmplitude)")] + [Range(0f, 1f)] + public float MaxAmplitude = 1f; + + [MMFInspectorGroup("Haptic Frequency", true, 32)] + /// the minimum frequency at which this clip should play (frequency will be randomized between MinFrequency and MaxFrequency) + [Tooltip("the minimum frequency at which this clip should play (frequency will be randomized between MinFrequency and MaxFrequency)")] + [Range(0f, 1f)] + public float MinFrequency = 1f; + /// the maximum frequency at which this clip should play (frequency will be randomized between MinFrequency and MaxFrequency) + [Tooltip("the maximum frequency at which this clip should play (frequency will be randomized between MinFrequency and MaxFrequency)")] + [Range(0f, 1f)] + public float MaxFrequency = 1f; + + [MMFInspectorGroup("Duration", true, 33)] + /// the minimum duration at which this clip should play (duration will be randomized between MinDuration and MaxDuration) + [Tooltip("the minimum duration at which this clip should play (duration will be randomized between MinDuration and MaxDuration)")] + public float MinDuration = 1f; + /// the maximum duration at which this clip should play (duration will be randomized between MinDuration and MaxDuration) + [Tooltip("the maximum duration at which this clip should play (duration will be randomized between MinDuration and MaxDuration)")] + public float MaxDuration = 1f; + + [MMFInspectorGroup("Real-time Modulation", true, 34)] + /// whether or not to modulate the haptic signal at runtime + [Tooltip("whether or not to modulate the haptic signal at runtime")] + public bool UseRealTimeModulation = false; + /// if UseRealTimeModulation:true, the curve along which to modulate amplitude for this continuous haptic, over its total duration + [Tooltip("if UseRealTimeModulation:true, the curve along which to modulate amplitude for this continuous haptic, over its total duration")] + [MMFCondition("UseRealTimeModulation", true)] + public AnimationCurve AmplitudeMultiplication = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1f), new Keyframe(1, 0f)); + /// if UseRealTimeModulation:true, the curve along which to modulate frequency for this continuous haptic, over its total duration + [Tooltip("if UseRealTimeModulation:true, the curve along which to modulate frequency for this continuous haptic, over its total duration")] + [MMFCondition("UseRealTimeModulation", true)] + public AnimationCurve ShiftFrequency = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1f), new Keyframe(1, 0f)); + + [MMFInspectorGroup("Settings", true, 16)] + /// a set of settings you can tweak to specify how and when exactly this haptic should play + [Tooltip("a set of settings you can tweak to specify how and when exactly this haptic should play")] + public MMFeedbackNVSettings HapticSettings; + + protected Coroutine _coroutine; + protected float _duration = 0f; + + /// + /// On play we randomize our amplitude and frequency, trigger our haptic, and initialize real time modulation if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || !HapticSettings.CanPlay()) + { + return; + } + + float amplitude = Random.Range(MinAmplitude, MaxAmplitude); + float frequency = Random.Range(MinFrequency, MaxFrequency); + _duration = Random.Range(MinDuration, MaxDuration); + HapticSettings.SetGamepad(); + HapticPatterns.PlayConstant(amplitude, frequency, FeedbackDuration); + + if (UseRealTimeModulation) + { + _coroutine = Owner.StartCoroutine(RealtimeModulationCo()); + } + } + + /// + /// A coroutine used to modulate frequency and amplitude at runtime + /// + /// + protected virtual IEnumerator RealtimeModulationCo() + { + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + HapticController.clipLevel = AmplitudeMultiplication.Evaluate(remappedTime); + HapticController.clipFrequencyShift = ShiftFrequency.Evaluate(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + HapticController.clipLevel = AmplitudeMultiplication.Evaluate(FinalNormalizedTime); + HapticController.clipFrequencyShift = ShiftFrequency.Evaluate(FinalNormalizedTime); + + IsPlaying = false; + _coroutine = null; + yield return null; + } + + /// + /// On stop we stop haptics and our coroutine + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!FeedbackTypeAuthorized) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + HapticController.Stop(); + if (Active && (_coroutine != null)) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + #else + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) { } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVContinuous.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVContinuous.cs.meta new file mode 100644 index 0000000..7279499 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVContinuous.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67fc7d627b6e1074895b5ed483eb737d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVControl.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVControl.cs new file mode 100644 index 0000000..af7ff62 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVControl.cs @@ -0,0 +1,79 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED +using Lofelt.NiceVibrations; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this feedback to interact with haptics at a global level, stopping them all, enabling or disabling them, adjusting their global level or initializing/release the haptic engine + /// + [AddComponentMenu("")] + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + [FeedbackPath("Haptics/Haptic Control")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.NiceVibrations")] + [FeedbackHelp("Add this feedback to interact with haptics at a global level, stopping them all, enabling or disabling them, adjusting their global level or initializing/release the haptic engine.")] + public class MMF_NVControl : MMF_Feedback + { + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.HapticsColor; } } + public override string RequiredTargetText { get { return ControlType.ToString(); } } + #endif + + public enum ControlTypes { Stop, EnableHaptics, DisableHaptics, AdjustHapticsLevel, Initialize, Release } + + [MMFInspectorGroup("Haptic Control", true, 24)] + /// the type of control order to trigger when playing this feedback - check Nice Vibrations' documentation for the exact behaviour of these + [Tooltip("the type of control order to trigger when playing this feedback - check Nice Vibrations' documentation for the exact behaviour of these")] + public ControlTypes ControlType = ControlTypes.Stop; + /// the output level when in AdjustHapticsLevel mode + [Tooltip("the output level when in AdjustHapticsLevel mode")] + [MMFEnumCondition("ControlType", (int)ControlTypes.AdjustHapticsLevel)] + public float OutputLevel = 1f; + + /// + /// On play we apply the specified order + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (ControlType) + { + case ControlTypes.Stop: + HapticController.Stop(); + break; + case ControlTypes.EnableHaptics: + HapticController.hapticsEnabled = true; + break; + case ControlTypes.DisableHaptics: + HapticController.hapticsEnabled = false; + break; + case ControlTypes.AdjustHapticsLevel: + HapticController.outputLevel = OutputLevel; + break; + case ControlTypes.Initialize: + LofeltHaptics.Initialize(); + HapticController.Init(); + break; + case ControlTypes.Release: + LofeltHaptics.Release(); + break; + } + } + #else + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) { } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVControl.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVControl.cs.meta new file mode 100644 index 0000000..ddb47fc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVControl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a3a1491160f1b944b35c4ba60eaedb2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVEmphasis.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVEmphasis.cs new file mode 100644 index 0000000..79c3396 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVEmphasis.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED +using Lofelt.NiceVibrations; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Use this feedback to play an Emphasis haptics, short haptic bursts whose amplitude and frequency can be controlled in real time, also called Transients in CoreHaptics/iOS + /// + [AddComponentMenu("")] + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + [FeedbackPath("Haptics/Haptic Emphasis")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.NiceVibrations")] + [FeedbackHelp("Use this feedback to play an Emphasis haptics, short haptic bursts whose amplitude and frequency can be controlled in real time, also called Transients in CoreHaptics/iOS")] + public class MMF_NVEmphasis : MMF_Feedback + { + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.HapticsColor; } } + #endif + + [MMFInspectorGroup("Haptic Amplitude", true, 23)] + /// the minimum amplitude at which this clip should play (amplitude will be randomized between MinAmplitude and MaxAmplitude) + [Tooltip("the minimum amplitude at which this clip should play (amplitude will be randomized between MinAmplitude and MaxAmplitude)")] + [Range(0f, 1f)] + public float MinAmplitude = 1f; + /// the maximum amplitude at which this clip should play (amplitude will be randomized between MinAmplitude and MaxAmplitude) + [Tooltip("the maximum amplitude at which this clip should play (amplitude will be randomized between MinAmplitude and MaxAmplitude)")] + [Range(0f, 1f)] + public float MaxAmplitude = 1f; + + [MMFInspectorGroup("Haptic Frequency", true, 22)] + /// the minimum frequency at which this clip should play (frequency will be randomized between MinFrequency and MaxFrequency) + [Tooltip("the minimum frequency at which this clip should play (frequency will be randomized between MinFrequency and MaxFrequency)")] + [Range(0f, 1f)] + public float MinFrequency = 1f; + /// the maximum frequency at which this clip should play (frequency will be randomized between MinFrequency and MaxFrequency) + [Tooltip("the maximum frequency at which this clip should play (frequency will be randomized between MinFrequency and MaxFrequency)")] + [Range(0f, 1f)] + public float MaxFrequency = 1f; + + [MMFInspectorGroup("Settings", true, 16)] + /// a set of settings you can tweak to specify how and when exactly this haptic should play + [Tooltip("a set of settings you can tweak to specify how and when exactly this haptic should play")] + public MMFeedbackNVSettings HapticSettings; + + /// + /// On play, we randomize our amplitude and frequency and play our emphasis haptic + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || !HapticSettings.CanPlay()) + { + return; + } + + float amplitude = Random.Range(MinAmplitude, MaxAmplitude); + float frequency = Random.Range(MinFrequency, MaxFrequency); + HapticSettings.SetGamepad(); + HapticPatterns.PlayEmphasis(amplitude, frequency); + } + #else + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) { } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVEmphasis.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVEmphasis.cs.meta new file mode 100644 index 0000000..0cf9e59 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVEmphasis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72f4893994302d847bdb90bf4feead48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVPreset.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVPreset.cs new file mode 100644 index 0000000..0e4218b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVPreset.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED +using Lofelt.NiceVibrations; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Use this feedback to play a preset haptic, limited but super simple predifined haptic patterns + /// + [AddComponentMenu("")] + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + [FeedbackPath("Haptics/Haptic Preset")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.NiceVibrations")] + [FeedbackHelp("Use this feedback to play a preset haptic, limited but super simple predifined haptic patterns")] + public class MMF_NVPreset : MMF_Feedback + { + #if MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.HapticsColor; } } + public override string RequiredTargetText { get { return Preset.ToString(); } } + #endif + + [MMFInspectorGroup("Haptic Preset", true, 21)] + /// the preset to play with this feedback + [Tooltip("the preset to play with this feedback")] + public HapticPatterns.PresetType Preset = HapticPatterns.PresetType.LightImpact; + + [MMFInspectorGroup("Settings", true, 16)] + /// a set of settings you can tweak to specify how and when exactly this haptic should play + [Tooltip("a set of settings you can tweak to specify how and when exactly this haptic should play")] + public MMFeedbackNVSettings HapticSettings; + + /// + /// On play we play our preset haptic + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || !HapticSettings.CanPlay()) + { + return; + } + + HapticSettings.SetGamepad(); + HapticPatterns.PlayPreset(Preset); + } + #else + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) { } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVPreset.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVPreset.cs.meta new file mode 100644 index 0000000..d481986 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/Feedbacks/MMF_NVPreset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ccb12f2582242744685c2cb083debab8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/MoreMountains.Feedbacks.NiceVibrations.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/MoreMountains.Feedbacks.NiceVibrations.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/MoreMountains.Feedbacks.NiceVibrations.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/MoreMountains.Feedbacks.NiceVibrations.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/MoreMountains.Feedbacks.NiceVibrations.asmref.meta new file mode 100644 index 0000000..98ec67e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/NiceVibrations/MoreMountains.Feedbacks.NiceVibrations.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c05f8d9b1617d624cba54512d0bda394 +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing.meta new file mode 100644 index 0000000..461861e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc4c8122d825fac40b47a894c4296e06 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks.meta new file mode 100644 index 0000000..3a48e1a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60ce467e2a1f60d4e91a0f8257fed472 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Bloom.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Bloom.cs new file mode 100644 index 0000000..c057407 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Bloom.cs @@ -0,0 +1,132 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control bloom intensity and threshold over time. It requires you have in your scene an object with a PostProcessVolume + /// with Bloom active, and a MMBloomShaker component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control bloom intensity and threshold over time. It requires you have in your scene an object with a PostProcessVolume " + + "with Bloom active, and a MMBloomShaker component.")] + #if MM_POSTPROCESSING + [FeedbackPath("PostProcess/Bloom")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.PostProcessing")] + public class MMF_Bloom : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Bloom", true, 41)] + /// the duration of the feedback, in seconds + [Tooltip("the duration of the feedback, in seconds")] + public float ShakeDuration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeValues = true; + + [MMFInspectorGroup("Intensity", true, 42)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapIntensityOne = 10f; + + [MMFInspectorGroup("Threshold", true, 43)] + /// the curve to animate the threshold on + [Tooltip("the curve to animate the threshold on")] + public AnimationCurve ShakeThreshold = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapThresholdZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapThresholdOne = 0f; + + /// + /// Triggers a bloom shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMBloomShakeEvent.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMBloomShakeEvent.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMBloomShakeEvent.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if UNITY_EDITOR && MM_POSTPROCESSING + MMPostProcessingHelpers.GetOrCreateVolume(Owner, "Bloom"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Bloom.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Bloom.cs.meta new file mode 100644 index 0000000..f94e9cd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Bloom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30d11dc2faf07c54ea2ca17622dd3728 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ChromaticAberration.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ChromaticAberration.cs new file mode 100644 index 0000000..97399a0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ChromaticAberration.cs @@ -0,0 +1,122 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control chromatic aberration intensity over time. It requires you have in your scene an object with a PostProcessVolume + /// with Chromatic Aberration active, and a MMChromaticAberrationShaker component. + /// + [AddComponentMenu("")] + #if MM_POSTPROCESSING + [FeedbackPath("PostProcess/Chromatic Aberration")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.PostProcessing")] + [FeedbackHelp("This feedback allows you to control chromatic aberration intensity over time. It requires you have in your scene an object with a PostProcessVolume " + + "with Chromatic Aberration active, and a MMChromaticAberrationShaker component.")] + public class MMF_ChromaticAberration : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Chromatic Aberration", true, 44)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + [MMFInspectorGroup("Intensity", true, 45)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the multiplier to apply to the intensity curve + [Tooltip("the multiplier to apply to the intensity curve")] + [Range(0f, 1f)] + public float Amplitude = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + /// + /// Triggers a chromatic aberration shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMChromaticAberrationShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMChromaticAberrationShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMChromaticAberrationShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if UNITY_EDITOR && MM_POSTPROCESSING + MMPostProcessingHelpers.GetOrCreateVolume(Owner, "Chromatic Aberration"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ChromaticAberration.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ChromaticAberration.cs.meta new file mode 100644 index 0000000..7eb5fad --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ChromaticAberration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68f2e968d11ecbf46882dff546d9da6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ColorGrading.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ColorGrading.cs new file mode 100644 index 0000000..5aad4ac --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ColorGrading.cs @@ -0,0 +1,187 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control color grading post exposure, hue shift, saturation and contrast over time. + /// It requires you have in your scene an object with a PostProcessVolume + /// with Color Grading active, and a MMColorGradingShaker component. + /// + [AddComponentMenu("")] + #if MM_POSTPROCESSING + [FeedbackPath("PostProcess/Color Grading")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.PostProcessing")] + [FeedbackHelp("This feedback allows you to control color grading post exposure, hue shift, saturation and contrast over time. " + + "It requires you have in your scene an object with a PostProcessVolume " + + "with Color Grading active, and a MMColorGradingShaker component.")] + public class MMF_ColorGrading : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Color Grading", true, 46)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 1f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Post Exposure", true, 47)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakePostExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapPostExposureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapPostExposureOne = 1f; + + [MMFInspectorGroup("Hue Shift", true, 48)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeHueShift = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-180f, 180f)] + public float RemapHueShiftZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-180f, 180f)] + public float RemapHueShiftOne = 180f; + + [MMFInspectorGroup("Saturation", true, 49)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeSaturation = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapSaturationZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapSaturationOne = 100f; + + [MMFInspectorGroup("Contrast", true, 50)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeContrast = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapContrastZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapContrastOne = 100f; + + [MMFInspectorGroup("Color Filter", true, 50)] + /// if this is true, the color filter will be animated over the gradient below + [Tooltip("if this is true, the color filter will be animated over the gradient below")] + public bool ShakeColorFilter = false; + /// the gradient to use to animate the color filter over time + [Tooltip("the gradient to use to animate the color filter over time")] + [GradientUsage(true)] + public Gradient ColorFilterGradient; + + /// + /// Triggers a color grading shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMColorGradingShakeEvent.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ShakeColorFilter, ColorFilterGradient, + FeedbackDuration, + RelativeIntensity, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMColorGradingShakeEvent.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ShakeColorFilter, ColorFilterGradient, + FeedbackDuration, + stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMColorGradingShakeEvent.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ShakeColorFilter, ColorFilterGradient, + FeedbackDuration, + restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if UNITY_EDITOR && MM_POSTPROCESSING + MMPostProcessingHelpers.GetOrCreateVolume(Owner, "Color Grading"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ColorGrading.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ColorGrading.cs.meta new file mode 100644 index 0000000..9d541b2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_ColorGrading.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a7e8d0ecb9743b489dc9f0ee9627be6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_DepthOfField.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_DepthOfField.cs new file mode 100644 index 0000000..4fbfaba --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_DepthOfField.cs @@ -0,0 +1,156 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control depth of field focus distance, aperture and focal length over time. + /// It requires you have in your scene an object with a PostProcessVolume + /// with Depth of Field active, and a MMDepthOfFieldShaker component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control depth of field focus distance, aperture and focal length over time. " + + "It requires you have in your scene an object with a PostProcessVolume " + + "with Depth of Field active, and a MMDepthOfFieldShaker component.")] + #if MM_POSTPROCESSING + [FeedbackPath("PostProcess/Depth Of Field")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.PostProcessing")] + public class MMF_DepthOfField : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Depth Of Field", true, 51)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 2f; + /// whether or not to add to the initial values + [Tooltip("whether or not to add to the initial values")] + public bool RelativeValues = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Focus Distance", true, 52)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakeFocusDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFocusDistanceZero = 4f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFocusDistanceOne = 50f; + + [MMFInspectorGroup("Aperture", true, 53)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeAperture = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0.1f, 32f)] + public float RemapApertureZero = 0.6f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0.1f, 32f)] + public float RemapApertureOne = 0.2f; + + [MMFInspectorGroup("Focal Length", true, 54)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeFocalLength = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 300f)] + public float RemapFocalLengthZero = 27.5f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 300f)] + public float RemapFocalLengthOne = 27.5f; + + /// + /// Triggers a DoF shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMDepthOfFieldShakeEvent.Trigger(ShakeFocusDistance, FeedbackDuration, RemapFocusDistanceZero, RemapFocusDistanceOne, + ShakeAperture, RemapApertureZero, RemapApertureOne, + ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, + RelativeValues, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMDepthOfFieldShakeEvent.Trigger(ShakeFocusDistance, FeedbackDuration, RemapFocusDistanceZero, RemapFocusDistanceOne, + ShakeAperture, RemapApertureZero, RemapApertureOne, + ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, + RelativeValues, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMDepthOfFieldShakeEvent.Trigger(ShakeFocusDistance, FeedbackDuration, RemapFocusDistanceZero, RemapFocusDistanceOne, + ShakeAperture, RemapApertureZero, RemapApertureOne, + ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, + RelativeValues, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if UNITY_EDITOR && MM_POSTPROCESSING + MMPostProcessingHelpers.GetOrCreateVolume(Owner, "DepthOfField"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_DepthOfField.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_DepthOfField.cs.meta new file mode 100644 index 0000000..f7e4d05 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_DepthOfField.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0378a3a19b50e044aafc329deb33665a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_GlobalPPVolumeAutoBlend.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_GlobalPPVolumeAutoBlend.cs new file mode 100644 index 0000000..1b97e67 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_GlobalPPVolumeAutoBlend.cs @@ -0,0 +1,198 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you pilot a Global PostProcessing Volume AutoBlend component. A GPPVAB component is placed on a PostProcessing Volume, and will let you control and blend its weight over time on demand. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you pilot a Global PostProcessing Volume AutoBlend component. " + + "A GPPVAB component is placed on a PostProcessing Volume, and will let you control and blend its weight over time on demand.")] + #if MM_POSTPROCESSING + [FeedbackPath("PostProcess/Global PP Volume Auto Blend")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.PostProcessing")] + public class MMF_GlobalPPVolumeAutoBlend : MMF_Feedback + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool EvaluateRequiresSetup() { return (TargetAutoBlend == null); } + public override string RequiredTargetText { get { return TargetAutoBlend != null ? TargetAutoBlend.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetAutoBlend be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetAutoBlend = FindAutomatedTarget(); + + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the possible modes for this feedback : + /// - default : will let you trigger Blend() and BlendBack() on the blender + /// - override : lets you specify new initial, final, duration and curve values on the blender, and triggers a Blend() + public enum Modes { Default, Override } + /// the possible actions when in Default mode + public enum Actions { Blend, BlendBack } + /// defines the duration of the feedback + public override float FeedbackDuration + { + get + { + if (Mode == Modes.Override) + { + return ApplyTimeMultiplier(BlendDuration); + } + else + { + if (TargetAutoBlend == null) + { + return 0.1f; + } + else + { + return ApplyTimeMultiplier(TargetAutoBlend.BlendDuration); + } + } + } + } + + [MMFInspectorGroup("PostProcess Volume Blend", true, 53, true)] + /// the target auto blend to pilot with this feedback + [Tooltip("the target auto blend to pilot with this feedback")] + public MMGlobalPostProcessingVolumeAutoBlend TargetAutoBlend; + /// the chosen mode + [Tooltip("the chosen mode")] + public Modes Mode = Modes.Default; + /// the chosen action when in default mode + [Tooltip("the chosen action when in default mode")] + [MMFEnumCondition("Mode", (int)Modes.Default)] + public Actions BlendAction = Actions.Blend; + /// the duration of the blend, in seconds when in override mode + [Tooltip("the duration of the blend, in seconds when in override mode")] + [MMFEnumCondition("Mode", (int)Modes.Override)] + public float BlendDuration = 1f; + /// the curve to apply to the blend + [Tooltip("the curve to apply to the blend")] + [MMFEnumCondition("Mode", (int)Modes.Override)] + public AnimationCurve BlendCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1f)); + /// the weight to blend from + [Tooltip("the weight to blend from")] + [MMFEnumCondition("Mode", (int)Modes.Override)] + public float InitialWeight = 0f; + /// the weight to blend to + [Tooltip("the weight to blend to")] + [MMFEnumCondition("Mode", (int)Modes.Override)] + public float FinalWeight = 1f; + /// whether or not to reset to the initial value at the end of the shake + [Tooltip("whether or not to reset to the initial value at the end of the shake")] + [MMFEnumCondition("Mode", (int)Modes.Override)] + public bool ResetToInitialValueOnEnd = true; + + + /// + /// On custom play, triggers a blend on the target blender, overriding its settings if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if MM_POSTPROCESSING + + if (TargetAutoBlend == null) + { + Debug.LogWarning(Owner.name + " : this MMFeedbackGlobalPPVolumeAutoBlend needs a TargetAutoBlend, please set one in its inspector."); + return; + } + if (Mode == Modes.Default) + { + if (!NormalPlayDirection) + { + if (BlendAction == Actions.Blend) + { + TargetAutoBlend.BlendBack(); + return; + } + if (BlendAction == Actions.BlendBack) + { + TargetAutoBlend.Blend(); + return; + } + } + else + { + if (BlendAction == Actions.Blend) + { + TargetAutoBlend.Blend(); + return; + } + if (BlendAction == Actions.BlendBack) + { + TargetAutoBlend.BlendBack(); + return; + } + } + } + else + { + TargetAutoBlend.BlendDuration = ApplyTimeMultiplier(BlendDuration); + TargetAutoBlend.Curve = BlendCurve; + TargetAutoBlend.TimeScale = (ComputedTimescaleMode == TimescaleModes.Scaled) ? MMGlobalPostProcessingVolumeAutoBlend.TimeScales.Scaled : MMGlobalPostProcessingVolumeAutoBlend.TimeScales.Unscaled; + if (!NormalPlayDirection) + { + TargetAutoBlend.InitialWeight = FinalWeight; + TargetAutoBlend.FinalWeight = InitialWeight; + } + else + { + TargetAutoBlend.InitialWeight = InitialWeight; + TargetAutoBlend.FinalWeight = FinalWeight; + } + TargetAutoBlend.ResetToInitialValueOnEnd = ResetToInitialValueOnEnd; + TargetAutoBlend.Blend(); + } + #endif + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if MM_POSTPROCESSING + base.CustomStopFeedback(position, feedbacksIntensity); + + if (TargetAutoBlend != null) + { + TargetAutoBlend.StopBlending(); + } + #endif + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if UNITY_EDITOR && MM_POSTPROCESSING + TargetAutoBlend.RestoreInitialValues(); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_GlobalPPVolumeAutoBlend.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_GlobalPPVolumeAutoBlend.cs.meta new file mode 100644 index 0000000..92fef2e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_GlobalPPVolumeAutoBlend.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9004edcd6234bf449a2d7812b79b5806 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_LensDistortion.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_LensDistortion.cs new file mode 100644 index 0000000..0cfbc7a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_LensDistortion.cs @@ -0,0 +1,131 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control lens distortion intensity over time. + /// It requires you have in your scene an object with a PostProcessVolume + /// with Lens Distortion active, and a MMLensDistortionShaker component. + /// + [AddComponentMenu("")] + #if MM_POSTPROCESSING + [FeedbackPath("PostProcess/Lens Distortion")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.PostProcessing")] + [FeedbackHelp("This feedback allows you to control lens distortion intensity over time. " + + "It requires you have in your scene an object with a PostProcessVolume " + + "with Lens Distortion active, and a MMLensDistortionShaker component.")] + public class MMF_LensDistortion : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Lens Distortion", true, 56)] + /// the duration of the shake in seconds + [Tooltip("the duration of the shake in seconds")] + public float Duration = 0.5f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 57)] + /// whether or not to add to the initial intensity value + [Tooltip("whether or not to add to the initial intensity value")] + public bool RelativeIntensity = false; + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), + new Keyframe(0.2f, 1), + new Keyframe(0.25f, -1), + new Keyframe(0.35f, 0.7f), + new Keyframe(0.4f, -0.7f), + new Keyframe(0.6f, 0.3f), + new Keyframe(0.65f, -0.3f), + new Keyframe(0.8f, 0.1f), + new Keyframe(0.85f, -0.1f), + new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapIntensityOne = 40f; + + /// + /// Triggers a lens distortion shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMLensDistortionShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMLensDistortionShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMLensDistortionShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if UNITY_EDITOR && MM_POSTPROCESSING + MMPostProcessingHelpers.GetOrCreateVolume(Owner, "Lens Distortion"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_LensDistortion.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_LensDistortion.cs.meta new file mode 100644 index 0000000..6934cfa --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_LensDistortion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80890712e6d1d954e9a1cfbd3b70e79f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Vignette.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Vignette.cs new file mode 100644 index 0000000..c503e40 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Vignette.cs @@ -0,0 +1,142 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control vignette intensity over time. + /// It requires you have in your scene an object with a PostProcessVolume + /// with Vignette active, and a MMVignetteShaker component. + /// + [AddComponentMenu("")] + #if MM_POSTPROCESSING + [FeedbackPath("PostProcess/Vignette")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.PostProcessing")] + [FeedbackHelp("This feedback allows you to control vignette intensity over time. " + + "It requires you have in your scene an object with a PostProcessVolume " + + "with Vignette active, and a MMVignetteShaker component.")] + public class MMF_Vignette : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override string RequiredTargetText => RequiredChannelText; + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Vignette", true, 58)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 59)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the intensity's zero to + [Tooltip("the value to remap the intensity's zero to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the intensity's one to + [Tooltip("the value to remap the intensity's one to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + [MMFInspectorGroup("Vignette Color", true, 60)] + /// whether or not to also animate the vignette's color + [Tooltip("whether or not to also animate the vignette's color")] + public bool InterpolateColor = false; + /// the curve to animate the color on + [Tooltip("the curve to animate the color on")] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.05f, 1f), new Keyframe(0.95f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0, 1)] + public float RemapColorZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapColorOne = 1f; + /// the color to lerp towards + [Tooltip("the color to lerp towards")] + public Color TargetColor = Color.red; + + + /// + /// Triggers a vignette shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMVignetteShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode, false, false, InterpolateColor, + ColorCurve, RemapColorZero, RemapColorOne, TargetColor); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMVignetteShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMVignetteShakeEvent.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if UNITY_EDITOR && MM_POSTPROCESSING + MMPostProcessingHelpers.GetOrCreateVolume(Owner, "Vignette"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Vignette.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Vignette.cs.meta new file mode 100644 index 0000000..8ea5d5d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Feedbacks/MMF_Vignette.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97f57704667c5aa4586dab47e71ecade +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers.meta new file mode 100644 index 0000000..3253880 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 391473e32bda6014ca706e507b8f9d95 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMGlobalPostProcessingVolumeAutoBlend.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMGlobalPostProcessingVolumeAutoBlend.cs new file mode 100644 index 0000000..9dbee6f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMGlobalPostProcessingVolumeAutoBlend.cs @@ -0,0 +1,202 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Use this class to have a global PP volume auto blend its weight on cue, between a start and end values + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMGlobalPostProcessingVolumeAutoBlend")] + #if MM_POSTPROCESSING + [RequireComponent(typeof(PostProcessVolume))] + #endif + public class MMGlobalPostProcessingVolumeAutoBlend : MonoBehaviour + { + /// the possible timescales this blend can operate on + public enum TimeScales { Scaled, Unscaled } + /// the possible blend trigger modes + public enum BlendTriggerModes { OnEnable, Script } + + [Header("Blend")] + /// the trigger mode for this MMGlobalPostProcessingVolumeAutoBlend + /// Start : will play automatically on enable + [Tooltip("the trigger mode for this MMGlobalPostProcessingVolumeAutoBlend")] + public BlendTriggerModes BlendTriggerMode = BlendTriggerModes.OnEnable; + /// the duration of the blend (in seconds) + [Tooltip("the duration of the blend (in seconds)")] + public float BlendDuration = 1f; + /// the curve to use to blend + [Tooltip("the curve to use to blend")] + public AnimationCurve Curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1f)); + + [Header("Weight")] + /// the weight at the start of the blend + [Tooltip("the weight at the start of the blend")] + [Range(0f, 1f)] + public float InitialWeight = 0f; + /// the desired weight at the end of the blend + [Tooltip("the desired weight at the end of the blend")] + [Range(0f, 1f)] + public float FinalWeight = 1f; + + [Header("Behaviour")] + /// the timescale to operate on + [Tooltip("the timescale to operate on")] + public TimeScales TimeScale = TimeScales.Unscaled; + /// whether or not the associated volume should be disabled at 0 + [Tooltip("whether or not the associated volume should be disabled at 0")] + public bool DisableVolumeOnZeroWeight = true; + /// whether or not this blender should disable itself at 0 + [Tooltip("whether or not this blender should disable itself at 0")] + public bool DisableSelfAfterEnd = true; + /// whether or not this blender can be interrupted + [Tooltip("whether or not this blender can be interrupted")] + public bool Interruptable = true; + /// whether or not this blender should pick the current value as its starting point + [Tooltip("whether or not this blender should pick the current value as its starting point")] + public bool StartFromCurrentValue = true; + /// reset to initial value on end + [Tooltip("reset to initial value on end ")] + public bool ResetToInitialValueOnEnd = false; + + [Header("Tests")] + /// test blend button + [Tooltip("test blend button")] + [MMFInspectorButton("Blend")] + public bool TestBlend; + /// test blend back button + [Tooltip("test blend back button")] + [MMFInspectorButton("BlendBack")] + public bool TestBlendBackwards; + + /// + /// Returns the correct timescale based on the chosen settings + /// + /// + protected float GetTime() + { + return (TimeScale == TimeScales.Unscaled) ? Time.unscaledTime : Time.time; + } + + protected float _initial; + protected float _destination; + protected float _startTime; + protected bool _blending = false; + #if MM_POSTPROCESSING + protected PostProcessVolume _volume; + + /// + /// On Awake we store our volume + /// + protected virtual void Awake() + { + #if MM_POSTPROCESSING + _volume = this.gameObject.GetComponent(); + _volume.weight = InitialWeight; + #endif + } + + /// + /// On start we start blending if needed + /// + protected virtual void OnEnable() + { + if ((BlendTriggerMode == BlendTriggerModes.OnEnable) && !_blending) + { + Blend(); + } + } + + /// + /// Blends the volume's weight from the initial value to the final one + /// + public virtual void Blend() + { + if (_blending && !Interruptable) + { + return; + } + _initial = StartFromCurrentValue ? _volume.weight : InitialWeight; + _destination = FinalWeight; + StartBlending(); + } + + /// + /// Blends the volume's weight from the final value to the initial one + /// + public virtual void BlendBack() + { + if (_blending && !Interruptable) + { + return; + } + _initial = StartFromCurrentValue ? _volume.weight : FinalWeight; + _destination = InitialWeight; + StartBlending(); + } + + /// + /// Internal method used to start blending + /// + protected virtual void StartBlending() + { + _startTime = GetTime(); + _blending = true; + this.enabled = true; + if (DisableVolumeOnZeroWeight) + { + _volume.enabled = true; + } + } + + /// + /// Stops any blending that may be in progress + /// + public virtual void StopBlending() + { + _blending = false; + } + + /// + /// On update, processes the blend if needed + /// + protected virtual void Update() + { + if (!_blending) + { + return; + } + + float timeElapsed = (GetTime() - _startTime); + if (timeElapsed < BlendDuration) + { + float remapped = MMFeedbacksHelpers.Remap(timeElapsed, 0f, BlendDuration, 0f, 1f); + _volume.weight = Mathf.LerpUnclamped(_initial, _destination, Curve.Evaluate(remapped)); + } + else + { + // after end is reached + _volume.weight = ResetToInitialValueOnEnd ? _initial : _destination; + _blending = false; + if (DisableVolumeOnZeroWeight && (_volume.weight == 0f)) + { + _volume.enabled = false; + } + if (DisableSelfAfterEnd) + { + this.enabled = false; + } + } + } + + public virtual void RestoreInitialValues() + { + _volume.weight = _initial; + } + + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMGlobalPostProcessingVolumeAutoBlend.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMGlobalPostProcessingVolumeAutoBlend.cs.meta new file mode 100644 index 0000000..546e80f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMGlobalPostProcessingVolumeAutoBlend.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d073f09c04a999428a9149986800bfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMPostProcessingHelpers.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMPostProcessingHelpers.cs new file mode 100644 index 0000000..322deda --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMPostProcessingHelpers.cs @@ -0,0 +1,67 @@ +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + public class MMPostProcessingHelpers : MonoBehaviour + { + #if UNITY_EDITOR && MM_POSTPROCESSING + public static void GetOrCreateVolume(MMF_Player owner, string feedbackName) where T:PostProcessEffectSettings where U:MMShaker + { + string additions = owner.name + " "+feedbackName+" feedback automatic shaker setup : "; + + if (Application.isPlaying) + { + Debug.LogWarning("Automatic shaker setup is only available outside of play mode."); + return; + } + + // looks for a post process layer + PostProcessLayer postProcessLayer = Object.FindObjectOfType(); + if (postProcessLayer == null) + { + postProcessLayer = Camera.main.gameObject.AddComponent(); + postProcessLayer.volumeLayer = -1; + additions += "Added a PostProcessLayer component to the "+Camera.main.name+" camera. "; + } + + // looks for a post processing volume + PostProcessVolume volume = (PostProcessVolume)Object.FindObjectOfType(typeof(PostProcessVolume)); + if (volume == null) + { + GameObject postProcessingObject = GameObject.Instantiate(Resources.Load("MMDefaultPostProcessingVolume")); + volume = postProcessingObject.GetComponent(); + additions += "Added a PostProcessingVolume to the scene. "; + } + + // looks for a setting on the volume + T effect; + if (!volume.sharedProfile.TryGetSettings(out effect)) + { + effect = volume.sharedProfile.AddSettings(); + AssetDatabase.AddObjectToAsset(effect, volume.sharedProfile); + EditorUtility.SetDirty(volume.sharedProfile); + AssetDatabase.SaveAssets(); + additions += "Added a "+feedbackName+" post process effect to the "+volume.gameObject.name+" Post Process Volume. "; + } + + // looks for a matching shaker + U shaker = volume.GetComponent(); + if (shaker == null) + { + shaker = volume.gameObject.AddComponent(); + additions += "Added a "+feedbackName+" Shaker to the "+volume.gameObject.name+" Post Process Volume. "; + } + + MMDebug.DebugLogInfo( additions + "You're all set."); + } + #endif + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMPostProcessingHelpers.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMPostProcessingHelpers.cs.meta new file mode 100644 index 0000000..0cef694 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Helpers/MMPostProcessingHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c90af9401f16038488cbc1a21e79de15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/MoreMountains.Feedbacks.PostProcessing.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/MoreMountains.Feedbacks.PostProcessing.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/MoreMountains.Feedbacks.PostProcessing.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/MoreMountains.Feedbacks.PostProcessing.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/MoreMountains.Feedbacks.PostProcessing.asmref.meta new file mode 100644 index 0000000..3b9616b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/MoreMountains.Feedbacks.PostProcessing.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6b8430789e6f2fc4fab154da3d6a848a +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources.meta new file mode 100644 index 0000000..db7471d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7f800bfd1e2b44cab325b237412ed63 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingProfile.asset b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingProfile.asset new file mode 100644 index 0000000..ee600e6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingProfile.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3} + m_Name: MMDefaultPostProcessingProfile + m_EditorClassIdentifier: + settings: [] diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingProfile.asset.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingProfile.asset.meta new file mode 100644 index 0000000..5eea8c3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c1bea42a5942a4c09a3ecd393f6054aa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingVolume.prefab b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingVolume.prefab new file mode 100644 index 0000000..d2a9608 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingVolume.prefab @@ -0,0 +1,51 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5003270845818652397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6453743960439743923} + - component: {fileID: 8467938703123916945} + m_Layer: 0 + m_Name: MMDefaultPostProcessingVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6453743960439743923 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5003270845818652397} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8467938703123916945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5003270845818652397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: c1bea42a5942a4c09a3ecd393f6054aa, type: 2} + isGlobal: 1 + blendDistance: 0 + weight: 1 + priority: 0 diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingVolume.prefab.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingVolume.prefab.meta new file mode 100644 index 0000000..6fea77b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Resources/MMDefaultPostProcessingVolume.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 948e90df3bdde44068685e4ebecfcc25 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers.meta new file mode 100644 index 0000000..bd6a236 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c76da35ce073ac24b81dcdf06a1ba93f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs new file mode 100644 index 0000000..215bd1e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs @@ -0,0 +1,73 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using MoreMountains.Feedbacks; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This class will set the depth of field to focus on the set of targets specified in its inspector. + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMAutoFocus")] + #if MM_POSTPROCESSING + [RequireComponent(typeof(PostProcessVolume))] + #endif + public class MMAutoFocus : MonoBehaviour + { + [Header("Bindings")] + /// the position of the camera + [Tooltip("the position of the camera")] + public Transform CameraTransform; + /// a list of all possible targets + [Tooltip("a list of all possible targets")] + public Transform[] FocusTargets; + /// an offset to apply to the focus target + [Tooltip("an offset to apply to the focus target")] + public Vector3 Offset; + + [Header("Setup")] + /// the current target of this auto focus + [Tooltip("the current target of this auto focus")] + public float FocusTargetID; + + [Header("Desired Aperture")] + /// the aperture to work with + [Tooltip("the aperture to work with")] + [Range(0.1f, 20f)] + public float Aperture = 0.1f; + + + #if MM_POSTPROCESSING + protected PostProcessVolume _volume; + protected PostProcessProfile _profile; + protected DepthOfField _depthOfField; + + /// + /// On start we grab our volume and profile + /// + void Start() + { + _volume = GetComponent(); + _profile = _volume.profile; + _profile.TryGetSettings(out _depthOfField); + } + + /// + /// Adapts DoF to target + /// + void Update() + { + int focusTargetID = Mathf.FloorToInt(FocusTargetID); + if (focusTargetID < FocusTargets.Length) + { + float distance = Vector3.Distance(CameraTransform.position, FocusTargets[focusTargetID].position + Offset); + _depthOfField.focusDistance.Override(distance); + _depthOfField.aperture.Override(Aperture); + } + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs.meta new file mode 100644 index 0000000..61fa927 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMAutoFocus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b05280df6098734a9d93da081ea29f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs new file mode 100644 index 0000000..7500543 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs @@ -0,0 +1,220 @@ +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a bloom post processing and it'll be able to "shake" its values by getting events + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMBloomShaker")] + #if MM_POSTPROCESSING + [RequireComponent(typeof(PostProcessVolume))] + #endif + public class MMBloomShaker : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Bloom Intensity", true, 45)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapIntensityOne = 10f; + + [MMInspectorGroup("Bloom Threshold", true, 46)] + /// the curve used to animate the threshold value on + [Tooltip("the curve used to animate the threshold value on")] + public AnimationCurve ShakeThreshold = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapThresholdZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapThresholdOne = 0f; + + #if MM_POSTPROCESSING + protected PostProcessVolume _volume; + protected Bloom _bloom; + protected float _initialIntensity; + protected float _initialThreshold; + protected float _originalShakeDuration; + protected bool _originalRelativeIntensity; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected AnimationCurve _originalShakeThreshold; + protected float _originalRemapThresholdZero; + protected float _originalRemapThresholdOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGetSettings(out _bloom); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newIntensity = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeValues, _initialIntensity); + _bloom.intensity.Override(newIntensity); + float newThreshold = ShakeFloat(ShakeThreshold, RemapThresholdZero, RemapThresholdOne, RelativeValues, _initialThreshold); + _bloom.threshold.Override(newThreshold); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _bloom.intensity; + _initialThreshold = _bloom.threshold; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnBloomShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeValues; + _originalShakeThreshold = ShakeThreshold; + _originalRemapThresholdZero = RemapThresholdZero; + _originalRemapThresholdOne = RemapThresholdOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * feedbacksIntensity; + RemapIntensityOne = remapMax * feedbacksIntensity; + RelativeValues = relativeIntensity; + ShakeThreshold = threshold; + RemapThresholdZero = remapThresholdMin; + RemapThresholdOne = remapThresholdMax; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _bloom.intensity.Override(_initialIntensity); + _bloom.threshold.Override(_initialThreshold); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeValues = _originalRelativeIntensity; + ShakeThreshold = _originalShakeThreshold; + RemapThresholdZero = _originalRemapThresholdZero; + RemapThresholdOne = _originalRemapThresholdOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMBloomShakeEvent.Register(OnBloomShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMBloomShakeEvent.Unregister(OnBloomShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMBloomShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, + bool resetTargetValuesAfterShake = true, bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, threshold, remapThresholdMin, remapThresholdMax, relativeIntensity, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs.meta new file mode 100644 index 0000000..32564f3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMBloomShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04189ce672fd8c349b61eb900b1dc0ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMChromaticAberrationShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMChromaticAberrationShaker.cs new file mode 100644 index 0000000..a1d3b36 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMChromaticAberrationShaker.cs @@ -0,0 +1,191 @@ +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a chromatic aberration post processing and it'll be able to "shake" its values by getting events + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMChromaticAberrationShaker")] + #if MM_POSTPROCESSING + [RequireComponent(typeof(PostProcessVolume))] + #endif + public class MMChromaticAberrationShaker : MMShaker + { + [MMInspectorGroup("Chromatic Aberration Intensity", true, 46)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + #if MM_POSTPROCESSING + protected PostProcessVolume _volume; + protected ChromaticAberration _chromaticAberration; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGetSettings(out _chromaticAberration); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _chromaticAberration.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _chromaticAberration.intensity; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMChromaticAberrationShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * feedbacksIntensity; + RemapIntensityOne = remapMax * feedbacksIntensity; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _chromaticAberration.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMChromaticAberrationShakeEvent.Register(OnMMChromaticAberrationShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMChromaticAberrationShakeEvent.Unregister(OnMMChromaticAberrationShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMChromaticAberrationShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMChromaticAberrationShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMChromaticAberrationShaker.cs.meta new file mode 100644 index 0000000..26cd500 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMChromaticAberrationShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1297b688774526f418895a2f09176619 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMColorGradingShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMColorGradingShaker.cs new file mode 100644 index 0000000..da1d274 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMColorGradingShaker.cs @@ -0,0 +1,334 @@ +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a color grading post processing and it'll be able to "shake" its values by getting events + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMColorGradingShaker")] + #if MM_POSTPROCESSING + [RequireComponent(typeof(PostProcessVolume))] + #endif + public class MMColorGradingShaker : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Post Exposure", true, 40)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakePostExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapPostExposureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapPostExposureOne = 1f; + + [MMInspectorGroup("Hue Shift", true, 49)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeHueShift = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-180f, 180f)] + public float RemapHueShiftZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-180f, 180f)] + public float RemapHueShiftOne = 180f; + + [MMInspectorGroup("Saturation", true, 48)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeSaturation = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapSaturationZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapSaturationOne = 100f; + + [MMInspectorGroup("Contrast", true, 47)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeContrast = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapContrastZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapContrastOne = 100f; + + [MMFInspectorGroup("Color Filter", true, 50)] + /// if this is true, the color filter will be animated over the gradient below + [Tooltip("if this is true, the color filter will be animated over the gradient below")] + public bool ShakeColorFilter = false; + /// the gradient to use to animate the color filter over time + [Tooltip("the gradient to use to animate the color filter over time")] + [GradientUsage(true)] + public Gradient ColorFilterGradient; + + #if MM_POSTPROCESSING + protected PostProcessVolume _volume; + protected ColorGrading _colorGrading; + protected float _initialPostExposure; + protected float _initialHueShift; + protected float _initialSaturation; + protected float _initialContrast; + protected Color _initialColorFilter; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakePostExposure; + protected float _originalRemapPostExposureZero; + protected float _originalRemapPostExposureOne; + protected AnimationCurve _originalShakeHueShift; + protected float _originalRemapHueShiftZero; + protected float _originalRemapHueShiftOne; + protected AnimationCurve _originalShakeSaturation; + protected float _originalRemapSaturationZero; + protected float _originalRemapSaturationOne; + protected AnimationCurve _originalShakeContrast; + protected float _originalRemapContrastZero; + protected float _originalRemapContrastOne; + protected bool _originalShakeColorFilter; + protected Gradient _originalColorFilter; + protected Color _newColorFilter; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGetSettings(out _colorGrading); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.8f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newPostExposure = ShakeFloat(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, RelativeValues, _initialPostExposure); + _colorGrading.postExposure.Override(newPostExposure); + float newHueShift = ShakeFloat(ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, RelativeValues, _initialHueShift); + _colorGrading.hueShift.Override(newHueShift); + float newSaturation = ShakeFloat(ShakeSaturation, RemapSaturationZero, RemapSaturationOne, RelativeValues, _initialSaturation); + _colorGrading.saturation.Override(newSaturation); + float newContrast = ShakeFloat(ShakeContrast, RemapContrastZero, RemapContrastOne, RelativeValues, _initialContrast); + _colorGrading.contrast.Override(newContrast); + + if (ShakeColorFilter) + { + _newColorFilter = ShakeGradient(ColorFilterGradient); + _colorGrading.colorFilter.Override(_newColorFilter); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialPostExposure = _colorGrading.postExposure; + _initialHueShift = _colorGrading.hueShift; + _initialSaturation = _colorGrading.saturation; + _initialContrast = _colorGrading.contrast; + _initialColorFilter = _colorGrading.colorFilter; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMColorGradingShakeEvent(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + bool shakeColorFilter, Gradient colorFilterGradient, + float duration, bool relativeValues = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalRelativeValues = RelativeValues; + _originalShakePostExposure = ShakePostExposure; + _originalRemapPostExposureZero = RemapPostExposureZero; + _originalRemapPostExposureOne = RemapPostExposureOne; + _originalShakeHueShift = ShakeHueShift; + _originalRemapHueShiftZero = RemapHueShiftZero; + _originalRemapHueShiftOne = RemapHueShiftOne; + _originalShakeSaturation = ShakeSaturation; + _originalRemapSaturationZero = RemapSaturationZero; + _originalRemapSaturationOne = RemapSaturationOne; + _originalShakeContrast = ShakeContrast; + _originalRemapContrastZero = RemapContrastZero; + _originalRemapContrastOne = RemapContrastOne; + _originalShakeColorFilter = ShakeColorFilter; + _originalColorFilter = ColorFilterGradient; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + RelativeValues = relativeValues; + ShakePostExposure = shakePostExposure; + RemapPostExposureZero = remapPostExposureZero; + RemapPostExposureOne = remapPostExposureOne; + ShakeHueShift = shakeHueShift; + RemapHueShiftZero = remapHueShiftZero; + RemapHueShiftOne = remapHueShiftOne; + ShakeSaturation = shakeSaturation; + RemapSaturationZero = remapSaturationZero; + RemapSaturationOne = remapSaturationOne; + ShakeContrast = shakeContrast; + RemapContrastZero = remapContrastZero; + RemapContrastOne = remapContrastOne; + ForwardDirection = forwardDirection; + ShakeColorFilter = shakeColorFilter; + ColorFilterGradient = colorFilterGradient; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _colorGrading.postExposure.Override(_initialPostExposure); + _colorGrading.hueShift.Override(_initialHueShift); + _colorGrading.saturation.Override(_initialSaturation); + _colorGrading.contrast.Override(_initialContrast); + _colorGrading.colorFilter.Override(_initialColorFilter); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + RelativeValues = _originalRelativeValues; + ShakePostExposure = _originalShakePostExposure; + RemapPostExposureZero = _originalRemapPostExposureZero; + RemapPostExposureOne = _originalRemapPostExposureOne; + ShakeHueShift = _originalShakeHueShift; + RemapHueShiftZero = _originalRemapHueShiftZero; + RemapHueShiftOne = _originalRemapHueShiftOne; + ShakeSaturation = _originalShakeSaturation; + RemapSaturationZero = _originalRemapSaturationZero; + RemapSaturationOne = _originalRemapSaturationOne; + ShakeContrast = _originalShakeContrast; + RemapContrastZero = _originalRemapContrastZero; + RemapContrastOne = _originalRemapContrastOne; + ShakeColorFilter = _originalShakeColorFilter; + ColorFilterGradient = _originalColorFilter; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMColorGradingShakeEvent.Register(OnMMColorGradingShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMColorGradingShakeEvent.Unregister(OnMMColorGradingShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMColorGradingShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + bool shakeColorFilter, Gradient colorFilterGradient, + float duration, bool relativeValues = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + bool shakeColorFilter, Gradient colorFilterGradient, + float duration, bool relativeValues = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(shakePostExposure, remapPostExposureZero, remapPostExposureOne, + shakeHueShift, remapHueShiftZero, remapHueShiftOne, + shakeSaturation, remapSaturationZero, remapSaturationOne, + shakeContrast, remapContrastZero, remapContrastOne, + shakeColorFilter, colorFilterGradient, + duration, relativeValues, feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMColorGradingShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMColorGradingShaker.cs.meta new file mode 100644 index 0000000..5b6174b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMColorGradingShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 416f266b197306a49975dadec6e05526 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMDepthOfFieldShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMDepthOfFieldShaker.cs new file mode 100644 index 0000000..aec8a7c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMDepthOfFieldShaker.cs @@ -0,0 +1,279 @@ +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a depth of field post processing and it'll be able to "shake" its values by getting events + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMDepthOfFieldShaker")] + #if MM_POSTPROCESSING + [RequireComponent(typeof(PostProcessVolume))] + #endif + public class MMDepthOfFieldShaker : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Focus Distance", true, 49)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakeFocusDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFocusDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFocusDistanceOne = 3f; + + [MMInspectorGroup("Aperture", true, 50)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeAperture = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0.1f, 32f)] + public float RemapApertureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0.1f, 32f)] + public float RemapApertureOne = 0f; + + [MMInspectorGroup("Focal Length", true, 51)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeFocalLength = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 300f)] + public float RemapFocalLengthZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 300f)] + public float RemapFocalLengthOne = 0f; + + #if MM_POSTPROCESSING + protected PostProcessVolume _volume; + protected DepthOfField _depthOfField; + protected float _initialFocusDistance; + protected float _initialAperture; + protected float _initialFocalLength; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakeFocusDistance; + protected float _originalRemapFocusDistanceZero; + protected float _originalRemapFocusDistanceOne; + protected AnimationCurve _originalShakeAperture; + protected float _originalRemapApertureZero; + protected float _originalRemapApertureOne; + protected AnimationCurve _originalShakeFocalLength; + protected float _originalRemapFocalLengthZero; + protected float _originalRemapFocalLengthOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGetSettings(out _depthOfField); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newFocusDistance = ShakeFloat(ShakeFocusDistance, RemapFocusDistanceZero, RemapFocusDistanceOne, RelativeValues, _initialFocusDistance); + _depthOfField.focusDistance.Override(newFocusDistance); + + float newAperture = ShakeFloat(ShakeAperture, RemapApertureZero, RemapApertureOne, RelativeValues, _initialAperture); + _depthOfField.aperture.Override(newAperture); + + float newFocalLength = ShakeFloat(ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, RelativeValues, _initialFocalLength); + _depthOfField.focalLength.Override(newFocalLength); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialFocusDistance = _depthOfField.focusDistance; + _initialAperture = _depthOfField.aperture; + _initialFocalLength = _depthOfField.focalLength; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnDepthOfFieldShakeEvent(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax, + AnimationCurve aperture, float remapApertureMin, float remapApertureMax, + AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax, + bool relativeValues = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalRelativeValues = RelativeValues; + + _originalShakeFocusDistance = ShakeFocusDistance; + _originalRemapFocusDistanceZero = RemapFocusDistanceZero; + _originalRemapFocusDistanceOne = RemapFocusDistanceOne; + + _originalShakeAperture = ShakeAperture; + _originalRemapApertureZero = RemapApertureZero; + _originalRemapApertureOne = RemapApertureOne; + + _originalShakeFocalLength = ShakeFocalLength; + _originalRemapFocalLengthZero = RemapFocalLengthZero; + _originalRemapFocalLengthOne = RemapFocalLengthOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + RelativeValues = relativeValues; + ShakeFocusDistance = focusDistance; + RemapFocusDistanceZero = remapFocusDistanceMin; + RemapFocusDistanceOne = remapFocusDistanceMax; + ShakeAperture = aperture; + RemapApertureZero = remapApertureMin; + RemapApertureOne = remapApertureMax; + ShakeFocalLength = focalLength; + RemapFocalLengthZero = remapFocalLengthMin; + RemapFocalLengthOne = remapFocalLengthMax; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + + _depthOfField.focusDistance.Override(_initialFocusDistance); + _depthOfField.aperture.Override(_initialAperture); + _depthOfField.focalLength.Override(_initialFocalLength); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + + ShakeDuration = _originalShakeDuration; + RelativeValues = _originalRelativeValues; + + ShakeFocusDistance = _originalShakeFocusDistance; + RemapFocusDistanceZero = _originalRemapFocusDistanceZero; + RemapFocusDistanceOne = _originalRemapFocusDistanceOne; + + ShakeAperture = _originalShakeAperture; + RemapApertureZero = _originalRemapApertureZero; + RemapApertureOne = _originalRemapApertureOne; + + ShakeFocalLength = _originalShakeFocalLength; + RemapFocalLengthZero = _originalRemapFocalLengthZero; + RemapFocalLengthOne = _originalRemapFocalLengthOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMDepthOfFieldShakeEvent.Register(OnDepthOfFieldShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMDepthOfFieldShakeEvent.Unregister(OnDepthOfFieldShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMDepthOfFieldShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax, + AnimationCurve aperture, float remapApertureMin, float remapApertureMax, + AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax, + bool relativeValues = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax, + AnimationCurve aperture, float remapApertureMin, float remapApertureMax, + AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax, + bool relativeValues = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(focusDistance, duration, remapFocusDistanceMin, remapFocusDistanceMax, + aperture, remapApertureMin, remapApertureMax, + focalLength, remapFocalLengthMin, remapFocalLengthMax, relativeValues, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMDepthOfFieldShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMDepthOfFieldShaker.cs.meta new file mode 100644 index 0000000..a5e254b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMDepthOfFieldShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4792d6bb2cfe7644da1e6972d3da260d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMLensDistortionShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMLensDistortionShaker.cs new file mode 100644 index 0000000..4ddb3d2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMLensDistortionShaker.cs @@ -0,0 +1,208 @@ +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a lens distortion post processing and it'll be able to "shake" its values by getting events + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMLensDistortionShaker")] + #if MM_POSTPROCESSING + [RequireComponent(typeof(PostProcessVolume))] + #endif + public class MMLensDistortionShaker : MMShaker + { + [MMInspectorGroup("Lens Distortion Intensity", true, 51)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), + new Keyframe(0.2f, 1), + new Keyframe(0.25f, -1), + new Keyframe(0.35f, 0.7f), + new Keyframe(0.4f, -0.7f), + new Keyframe(0.6f, 0.3f), + new Keyframe(0.65f, -0.3f), + new Keyframe(0.8f, 0.1f), + new Keyframe(0.85f, -0.1f), + new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapIntensityOne = 50f; + + #if MM_POSTPROCESSING + protected PostProcessVolume _volume; + protected LensDistortion _lensDistortion; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGetSettings(out _lensDistortion); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.8f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _lensDistortion.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _lensDistortion.intensity; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMLensDistortionShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * feedbacksIntensity; + RemapIntensityOne = remapMax * feedbacksIntensity; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _lensDistortion.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMLensDistortionShakeEvent.Register(OnMMLensDistortionShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMLensDistortionShakeEvent.Unregister(OnMMLensDistortionShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMLensDistortionShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMLensDistortionShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMLensDistortionShaker.cs.meta new file mode 100644 index 0000000..1c24d7e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMLensDistortionShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7efc6a4a233d87b4fbc72cda82ca4a31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs new file mode 100644 index 0000000..fd129af --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs @@ -0,0 +1,251 @@ +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a vignette post processing and it'll be able to "shake" its values by getting events + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMVignetteShaker")] + #if MM_POSTPROCESSING + [RequireComponent(typeof(PostProcessVolume))] + #endif + public class MMVignetteShaker : MMShaker + { + [MMInspectorGroup("Vignette Intensity", true, 53)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = true; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 0.1f; + + [MMInspectorGroup("Vignette Color", true, 51)] + /// whether or not to also animate the vignette's color + [Tooltip("whether or not to also animate the vignette's color")] + public bool InterpolateColor = false; + /// the curve to animate the color on + [Tooltip("the curve to animate the color on")] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.05f, 1f), new Keyframe(0.95f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0, 1)] + public float RemapColorZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapColorOne = 1f; + /// the color to lerp towards + [Tooltip("the color to lerp towards")] + public Color TargetColor = Color.red; + + + #if MM_POSTPROCESSING + protected PostProcessVolume _volume; + protected Vignette _vignette; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + protected bool _originalInterpolateColor; + protected AnimationCurve _originalColorCurve; + protected float _originalRemapColorZero; + protected float _originalRemapColorOne; + protected Color _originalTargetColor; + protected Color _initialColor; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGetSettings(out _vignette); + _initialColor = _vignette.color; + } + + public virtual void SetVignette(float newValue) + { + _vignette.intensity.Override(newValue); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _vignette.intensity.Override(newValue); + + if (InterpolateColor) + { + float newColorValue = ShakeFloat(ColorCurve, RemapColorZero, RemapColorOne, RelativeIntensity, 0); + _vignette.color.Override(Color.Lerp(_initialColor, TargetColor, newColorValue)); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _vignette.intensity; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnVignetteShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + _originalInterpolateColor = InterpolateColor; + _originalColorCurve = ColorCurve; + _originalRemapColorZero = RemapColorZero; + _originalRemapColorOne = RemapColorOne; + _originalTargetColor = TargetColor; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * feedbacksIntensity; + RemapIntensityOne = remapMax * feedbacksIntensity; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + InterpolateColor = interpolateColor; + ColorCurve = colorCurve; + RemapColorZero = remapColorZero; + RemapColorOne = remapColorOne; + TargetColor = targetColor; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _vignette.intensity.Override(_initialIntensity); + _vignette.color.Override(_initialColor); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + InterpolateColor = _originalInterpolateColor; + ColorCurve = _originalColorCurve; + RemapColorZero = _originalRemapColorZero; + RemapColorOne = _originalRemapColorOne; + TargetColor = _originalTargetColor; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMVignetteShakeEvent.Register(OnVignetteShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMVignetteShakeEvent.Unregister(OnVignetteShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMVignetteShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, feedbacksIntensity, channelData, resetShakerValuesAfterShake, + resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore, + interpolateColor, colorCurve, remapColorZero, remapColorOne, targetColor); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs.meta new file mode 100644 index 0000000..db3cf28 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Shakers/MMVignetteShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81cf12de3b3c98d489779a3382046725 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs.meta new file mode 100644 index 0000000..7f7c30d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2b1fd2c39e4bee34da845ef8f1d71ae7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringBloomIntensity.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringBloomIntensity.cs new file mode 100644 index 0000000..d5e5f1d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringBloomIntensity.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringBloomIntensity")] + public class MMSpringBloomIntensity : MMSpringFloatComponent + { + protected Bloom _bloom; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _bloom); + base.Initialization(); + } + + public override float TargetFloat + { + get => _bloom.intensity; + set => _bloom.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringBloomIntensity.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringBloomIntensity.cs.meta new file mode 100644 index 0000000..acfcac8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringBloomIntensity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e65f2e076950e5b4e87408581f939749 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringChromaticAberrationIntensity.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringChromaticAberrationIntensity.cs new file mode 100644 index 0000000..013c60a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringChromaticAberrationIntensity.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringChromaticAberrationIntensity")] + public class MMSpringChromaticAberrationIntensity : MMSpringFloatComponent + { + protected ChromaticAberration _chromaticAberration; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _chromaticAberration); + base.Initialization(); + } + + public override float TargetFloat + { + get => _chromaticAberration.intensity; + set => _chromaticAberration.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringChromaticAberrationIntensity.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringChromaticAberrationIntensity.cs.meta new file mode 100644 index 0000000..fbc20be --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringChromaticAberrationIntensity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05b2a6b602b3ef04c90ed55c3fa03450 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingContrast.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingContrast.cs new file mode 100644 index 0000000..cd70658 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingContrast.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorGradingContrast")] + public class MMSpringColorGradingContrast : MMSpringFloatComponent + { + protected ColorGrading _colorGrading; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _colorGrading); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorGrading.contrast; + set => _colorGrading.contrast.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingContrast.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingContrast.cs.meta new file mode 100644 index 0000000..d060985 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingContrast.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 273314aadc2d09c4b8f7b497c86f6d3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingHueShift.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingHueShift.cs new file mode 100644 index 0000000..de1dacb --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingHueShift.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorGradingHueShift")] + public class MMSpringColorGradingHueShift : MMSpringFloatComponent + { + protected ColorGrading _colorGrading; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _colorGrading); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorGrading.hueShift; + set => _colorGrading.hueShift.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingHueShift.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingHueShift.cs.meta new file mode 100644 index 0000000..7c61e2b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingHueShift.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cd46e2eb52b6f14aaed1ac0024deeeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingSaturation.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingSaturation.cs new file mode 100644 index 0000000..9d4d85f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingSaturation.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorGradingSaturation")] + public class MMSpringColorGradingSaturation : MMSpringFloatComponent + { + protected ColorGrading _colorGrading; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _colorGrading); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorGrading.saturation; + set => _colorGrading.saturation.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingSaturation.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingSaturation.cs.meta new file mode 100644 index 0000000..07f7126 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingSaturation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cafaf96adab44845be91a12c573cf50 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTemperature.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTemperature.cs new file mode 100644 index 0000000..4c66e1c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTemperature.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorGradingTemperature")] + public class MMSpringColorGradingTemperature : MMSpringFloatComponent + { + protected ColorGrading _colorGrading; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _colorGrading); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorGrading.temperature; + set => _colorGrading.temperature.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTemperature.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTemperature.cs.meta new file mode 100644 index 0000000..b83cf82 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTemperature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc41dad25c8ecab4b8dba885fea5e5c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTint.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTint.cs new file mode 100644 index 0000000..17ca6be --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTint.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorGradingTint")] + public class MMSpringColorGradingTint : MMSpringFloatComponent + { + protected ColorGrading _colorGrading; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _colorGrading); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorGrading.tint; + set => _colorGrading.tint.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTint.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTint.cs.meta new file mode 100644 index 0000000..06189b7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringColorGradingTint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f122798344263f34ea0ec3c27298c57a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringDepthOfFieldFocusDistance.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringDepthOfFieldFocusDistance.cs new file mode 100644 index 0000000..8d1c340 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringDepthOfFieldFocusDistance.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringDepthOfFieldFocusDistance")] + public class MMSpringDepthOfFieldFocusDistance : MMSpringFloatComponent + { + protected DepthOfField _depthOfField; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _depthOfField); + base.Initialization(); + } + + public override float TargetFloat + { + get => _depthOfField.focusDistance; + set => _depthOfField.focusDistance.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringDepthOfFieldFocusDistance.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringDepthOfFieldFocusDistance.cs.meta new file mode 100644 index 0000000..82673a6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringDepthOfFieldFocusDistance.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df7eb734a87468a40a9194761576a513 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringLensDistortionIntensity.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringLensDistortionIntensity.cs new file mode 100644 index 0000000..dfb5564 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringLensDistortionIntensity.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringLensDistortionIntensity")] + public class MMSpringLensDistortionIntensity : MMSpringFloatComponent + { + protected LensDistortion _lensDistortion; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _lensDistortion); + base.Initialization(); + } + + public override float TargetFloat + { + get => _lensDistortion.intensity; + set => _lensDistortion.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringLensDistortionIntensity.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringLensDistortionIntensity.cs.meta new file mode 100644 index 0000000..d6f9257 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringLensDistortionIntensity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ede055534d39df4bad9ee11f7ab2a13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringMotionBlurShutterAngle.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringMotionBlurShutterAngle.cs new file mode 100644 index 0000000..7036637 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringMotionBlurShutterAngle.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringMotionBlurShutterAngle")] + public class MMSpringMotionBlurShutterAngle : MMSpringFloatComponent + { + protected MotionBlur _motionBlur; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _motionBlur); + base.Initialization(); + } + + public override float TargetFloat + { + get => _motionBlur.shutterAngle; + set => _motionBlur.shutterAngle.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringMotionBlurShutterAngle.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringMotionBlurShutterAngle.cs.meta new file mode 100644 index 0000000..bc6508e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringMotionBlurShutterAngle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24ee678719e0c084eae35248ed08c192 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteCenter.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteCenter.cs new file mode 100644 index 0000000..d12c9de --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteCenter.cs @@ -0,0 +1,29 @@ +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteCenter")] + public class MMSpringVignetteCenter : MMSpringVector2Component + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _vignette); + base.Initialization(); + } + + public override Vector2 TargetVector2 + { + get => _vignette.center; + set => _vignette.center.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteCenter.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteCenter.cs.meta new file mode 100644 index 0000000..587d4ad --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteCenter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4cd9f982e331c347a78bcae05117b99 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteColor.cs new file mode 100644 index 0000000..8993a34 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteColor.cs @@ -0,0 +1,29 @@ +using UnityEngine; +#if MM_POSTPROCESSING +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteColor")] + public class MMSpringVignetteColor : MMSpringColorComponent + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _vignette); + base.Initialization(); + } + + public override Color TargetColor + { + get => _vignette.color; + set => _vignette.color.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteColor.cs.meta new file mode 100644 index 0000000..a181306 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17b834b8463b2c344871f84ca5852a03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteIntensity.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteIntensity.cs new file mode 100644 index 0000000..6e404c0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteIntensity.cs @@ -0,0 +1,29 @@ +#if MM_POSTPROCESSING +using UnityEngine; +using UnityEngine.Rendering.PostProcessing; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteIntensity")] + public class MMSpringVignetteIntensity : MMSpringFloatComponent + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGetSettings(out _vignette); + base.Initialization(); + } + + public override float TargetFloat + { + get => _vignette.intensity; + set => _vignette.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteIntensity.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteIntensity.cs.meta new file mode 100644 index 0000000..c04239f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/PostProcessing/Springs/MMSpringVignetteIntensity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33c059583b0a7e44ebd9aa776e815cce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro.meta new file mode 100644 index 0000000..5d2ccd5 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 259be0a85d7c67b499d8e4167b4bcbbc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks.meta new file mode 100644 index 0000000..a2a9864 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ac352fa314ec244f83e6bc0c61ad8c4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPAlpha.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPAlpha.cs new file mode 100644 index 0000000..e0fa478 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPAlpha.cs @@ -0,0 +1,231 @@ +using MoreMountains.Tools; +using UnityEngine; +using System.Collections; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the alpha of a target TMP over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the alpha of a target TMP over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Alpha")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPAlpha : MMF_Feedback + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public enum AlphaModes { Instant, Interpolate, ToDestination } + + /// the duration of this feedback is the duration of the color transition, or 0 if instant + public override float FeedbackDuration { get { return (AlphaMode == AlphaModes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + public override bool HasCustomInspectors => true; + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip(" TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Alpha", true, 16)] + /// the selected color mode : + /// None : nothing will happen, + /// gradient : evaluates the color over time on that gradient, from left to right, + /// interpolate : lerps from the current color to the destination one + [Tooltip("the selected color mode :" + + "Instant : the alpha will change instantly to the target one," + + "Curve : the alpha will be interpolated along the curve," + + "interpolate : lerps from the current color to the destination one ")] + public AlphaModes AlphaMode = AlphaModes.Interpolate; + /// how long the color of the text should change over time + [Tooltip("how long the color of the text should change over time")] + [MMFEnumCondition("AlphaMode", (int)AlphaModes.Interpolate, (int)AlphaModes.ToDestination)] + public float Duration = 0.2f; + /// the alpha to apply when in instant mode + [Tooltip("the alpha to apply when in instant mode")] + [MMFEnumCondition("AlphaMode", (int)AlphaModes.Instant)] + public float InstantAlpha = 1f; + + /// the curve to use when interpolating towards the destination alpha + [Tooltip("the curve to use when interpolating towards the destination alpha")] + [MMFEnumCondition("AlphaMode", (int)AlphaModes.Interpolate, (int)AlphaModes.ToDestination)] + public MMTweenType Curve = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + /// the value to which the curve's 0 should be remapped + [Tooltip("the value to which the curve's 0 should be remapped")] + [MMFEnumCondition("AlphaMode", (int)AlphaModes.Interpolate)] + public float CurveRemapZero = 0f; + /// the value to which the curve's 1 should be remapped + [Tooltip("the value to which the curve's 1 should be remapped")] + [MMFEnumCondition("AlphaMode", (int)AlphaModes.Interpolate)] + public float CurveRemapOne = 1f; + /// the alpha to aim towards when in ToDestination mode + [Tooltip("the alpha to aim towards when in ToDestination mode")] + [MMFEnumCondition("AlphaMode", (int)AlphaModes.ToDestination)] + public float DestinationAlpha = 1f; + + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + protected float _initialAlpha; + protected Coroutine _coroutine; + + /// + /// On init we store our initial alpha + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + _initialAlpha = TargetTMPText.alpha; + #endif + } + + /// + /// On Play we change our text's alpha + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + switch (AlphaMode) + { + case AlphaModes.Instant: + TargetTMPText.alpha = InstantAlpha; + break; + case AlphaModes.Interpolate: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeAlpha()); + break; + case AlphaModes.ToDestination: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + _initialAlpha = TargetTMPText.alpha; + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeAlpha()); + break; + } + #endif + } + + /// + /// Changes the color of the text over time + /// + /// + protected virtual IEnumerator ChangeAlpha() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetAlpha(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetAlpha(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield break; + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// Applies the alpha change + /// + /// + protected virtual void SetAlpha(float time) + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + float newAlpha = 0f; + if (AlphaMode == AlphaModes.Interpolate) + { + newAlpha = MMTween.Tween(time, 0f, 1f, CurveRemapZero, CurveRemapOne, Curve); + } + else if (AlphaMode == AlphaModes.ToDestination) + { + newAlpha = MMTween.Tween(time, 0f, 1f, _initialAlpha, DestinationAlpha, Curve); + } + TargetTMPText.alpha = newAlpha; + #endif + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.alpha = _initialAlpha; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPAlpha.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPAlpha.cs.meta new file mode 100644 index 0000000..583656a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPAlpha.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4be8a3950b608c4785907ebe6be06ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCharacterSpacing.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCharacterSpacing.cs new file mode 100644 index 0000000..2c9d8d7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCharacterSpacing.cs @@ -0,0 +1,86 @@ +using MoreMountains.Tools; +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the character spacing of a target TMP over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the character spacing of a target TMP over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Character Spacing")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPCharacterSpacing : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Character Spacing", true, 16)] + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType CharacterSpacingCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 1f; + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantFontSize; + + protected override void FillTargets() + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetTMPText.gameObject; + receiver.TargetComponent = TargetTMPText; + receiver.TargetPropertyName = "characterSpacing"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = CharacterSpacingCurve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantFontSize; + + _targets.Add(target); + #endif + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCharacterSpacing.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCharacterSpacing.cs.meta new file mode 100644 index 0000000..92da411 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCharacterSpacing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f58aef5c589e998418e5d3ec374edefe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPColor.cs new file mode 100644 index 0000000..7c54e92 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPColor.cs @@ -0,0 +1,223 @@ +using UnityEngine; +using System.Collections; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the color of a target TMP over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the color of a target TMP over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Color")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPColor : MMF_Feedback + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public enum ColorModes { Instant, Gradient, Interpolate } + + /// the duration of this feedback is the duration of the color transition, or 0 if instant + public override float FeedbackDuration { get { return (ColorMode == ColorModes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip(" TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Color", true, 16)] + /// the selected color mode : + /// None : nothing will happen, + /// gradient : evaluates the color over time on that gradient, from left to right, + /// interpolate : lerps from the current color to the destination one + [Tooltip("the selected color mode :" + + "None : nothing will happen," + + "gradient : evaluates the color over time on that gradient, from left to right," + + "interpolate : lerps from the current color to the destination one ")] + public ColorModes ColorMode = ColorModes.Interpolate; + /// how long the color of the text should change over time + [Tooltip("how long the color of the text should change over time")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate, (int)ColorModes.Gradient)] + public float Duration = 0.2f; + /// the color to apply + [Tooltip("the color to apply")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Instant)] + public Color InstantColor = Color.yellow; + /// the gradient to use to animate the color over time + [Tooltip("the gradient to use to animate the color over time")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Gradient)] + [GradientUsage(true)] + public Gradient ColorGradient; + /// the destination color when in interpolate mode + [Tooltip("the destination color when in interpolate mode")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate)] + public Color DestinationColor = Color.yellow; + /// the curve to use when interpolating towards the destination color + [Tooltip("the curve to use when interpolating towards the destination color")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate)] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + protected Color _initialColor; + protected Coroutine _coroutine; + + /// + /// On init we store our initial color + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + _initialColor = TargetTMPText.color; + #endif + } + + /// + /// On Play we change our text's color + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + + if (TargetTMPText == null) + { + return; + } + + switch (ColorMode) + { + case ColorModes.Instant: + TargetTMPText.color = InstantColor; + break; + case ColorModes.Gradient: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeColor()); + break; + case ColorModes.Interpolate: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeColor()); + break; + } + + #endif + } + + /// + /// Changes the color of the text over time + /// + /// + protected virtual IEnumerator ChangeColor() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetColor(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetColor(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield break; + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// Applies the color change + /// + /// + protected virtual void SetColor(float time) + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (ColorMode == ColorModes.Gradient) + { + TargetTMPText.color = ColorGradient.Evaluate(time); + } + else if (ColorMode == ColorModes.Interpolate) + { + float factor = ColorCurve.Evaluate(time); + TargetTMPText.color = Color.LerpUnclamped(_initialColor, DestinationColor, factor); + } + #endif + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.color = _initialColor; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPColor.cs.meta new file mode 100644 index 0000000..8c82ee9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb001ad73daba6d49b6183ff4079ebb6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountTo.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountTo.cs new file mode 100644 index 0000000..99ba504 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountTo.cs @@ -0,0 +1,185 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you update a TMP text value over time, with a value going from A to B over time, on a curve + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you update a TMP text value over time, with a value going from A to B over time, on a curve")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Count To")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPCountTo : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + /// the duration of this feedback is the duration of the scale animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("TextMeshPro Target Text", true, 12, true)] + /// the target TMP_Text component we want to change the text on + [Tooltip("the target TMP_Text component we want to change the text on")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Count Settings", true, 13)] + /// the value from which to count from + [Tooltip("the value from which to count from")] + public float CountFrom = 0f; + /// the value to count towards + [Tooltip("the value to count towards")] + public float CountTo = 10f; + /// the curve on which to animate the count + [Tooltip("the curve on which to animate the count")] + public MMTweenType CountingCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the duration of the count, in seconds + [Tooltip("the duration of the count, in seconds")] + public float Duration = 5f; + /// the format with which to display the count + [Tooltip("the format with which to display the count")] + public string Format = "00.00"; + /// whether or not value should be floored + [Tooltip("whether or not value should be floored")] + public bool FloorValues = true; + /// the minimum frequency (in seconds) at which to refresh the text field + [Tooltip("the minimum frequency (in seconds) at which to refresh the text field")] + public float MinRefreshFrequency = 0f; + + protected string _newText; + protected float _startTime; + protected float _lastRefreshAt; + protected string _initialText; + protected Coroutine _coroutine; + + /// + /// On play we change the text of our target TMPText over time + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + _initialText = TargetTMPText.text; + #endif + _coroutine = Owner.StartCoroutine(CountCo()); + } + + /// + /// A coroutine used to animate the text + /// + /// + protected virtual IEnumerator CountCo() + { + _lastRefreshAt = -float.MaxValue; + float currentValue = CountFrom; + _startTime = FeedbackTime; + + while (FeedbackTime - _startTime <= Duration) + { + if (FeedbackTime - _lastRefreshAt >= MinRefreshFrequency) + { + currentValue = ProcessCount(); + UpdateText(currentValue); + _lastRefreshAt = FeedbackTime; + } + + yield return null; + } + UpdateText(CountTo); + } + + /// + /// Updates the text of the target TMPText component with the updated value + /// + /// + protected virtual void UpdateText(float currentValue) + { + if (FloorValues) + { + _newText = Mathf.Floor(currentValue).ToString(Format); + } + else + { + _newText = currentValue.ToString(Format); + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.text = _newText; + #endif + } + + /// + /// Computes the new value of the count for the current time + /// + /// + /// + protected virtual float ProcessCount() + { + float currentTime = FeedbackTime - _startTime; + float currentValue = MMTween.Tween(currentTime, 0f, Duration, CountFrom, CountTo, CountingCurve); + return currentValue; + } + + /// + /// On stop, we interrupt counting if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.text = _initialText; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountTo.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountTo.cs.meta new file mode 100644 index 0000000..d52457a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountTo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76ee492955c4d2f4fa9c0dd9f9a59f12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountToLong.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountToLong.cs new file mode 100644 index 0000000..8c4684f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountToLong.cs @@ -0,0 +1,173 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you update a TMP text value over time, with a long value going from A to B over time, on a curve + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you update a TMP text value over time, with a long value going from A to B over time, on a curve")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Count To Long")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPCountToLong : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + /// the duration of this feedback is the duration of the scale animation + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("TextMeshPro Target Text", true, 12, true)] + /// the target TMP_Text component we want to change the text on + [Tooltip("the target TMP_Text component we want to change the text on")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Count Settings", true, 13)] + /// the value from which to count from + [Tooltip("the value from which to count from")] + public long CountFrom = 0; + /// the value to count towards + [Tooltip("the value to count towards")] + public long CountTo = 100000001; + /// the curve on which to animate the count + [Tooltip("the curve on which to animate the count")] + public MMTweenType CountingCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the duration of the count, in seconds + [Tooltip("the duration of the count, in seconds")] + public float Duration = 5f; + /// the format with which to display the count + [Tooltip("the format with which to display the count")] + public string Format = "00.00"; + /// the minimum frequency (in seconds) at which to refresh the text field + [Tooltip("the minimum frequency (in seconds) at which to refresh the text field")] + public float MinRefreshFrequency = 0f; + + protected string _newText; + protected float _startTime; + protected float _lastRefreshAt; + protected string _initialText; + protected Coroutine _coroutine; + + /// + /// On play we change the text of our target TMPText over time + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + _initialText = TargetTMPText.text; + #endif + _coroutine = Owner.StartCoroutine(CountCo()); + } + + /// + /// A coroutine used to animate the text + /// + /// + protected virtual IEnumerator CountCo() + { + _lastRefreshAt = -float.MaxValue; + long currentValue = CountFrom; + _startTime = FeedbackTime; + + while (FeedbackTime - _startTime <= Duration) + { + if (FeedbackTime - _lastRefreshAt >= MinRefreshFrequency) + { + currentValue = ProcessCount(); + UpdateText(currentValue); + _lastRefreshAt = FeedbackTime; + } + + yield return null; + } + UpdateText(CountTo); + } + + /// + /// Updates the text of the target TMPText component with the updated value + /// + /// + protected virtual void UpdateText(long currentValue) + { + _newText = currentValue.ToString(Format); + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.text = _newText; + #endif + } + + /// + /// Computes the new value of the count for the current time + /// + /// + /// + protected virtual long ProcessCount() + { + float currentTime = FeedbackTime - _startTime; + return MMTween.Tween(currentTime, 0f, Duration, CountFrom, CountTo, CountingCurve); + } + + /// + /// On stop, we interrupt counting if it was active + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (_coroutine == null)) + { + return; + } + IsPlaying = false; + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.text = _initialText; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountToLong.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountToLong.cs.meta new file mode 100644 index 0000000..ca844e8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPCountToLong.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9276c6165f72f7046bb1a60b59461c8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPDilate.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPDilate.cs new file mode 100644 index 0000000..d9a3528 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPDilate.cs @@ -0,0 +1,215 @@ +using MoreMountains.Tools; +using UnityEngine; +using System.Collections; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you dilate a TMP text over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you dilate a TMP text over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Dilate")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPDilate : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + public override bool HasCustomInspectors => true; + + /// the duration of this feedback is the duration of the transition, or 0 if instant + public override float FeedbackDuration { get { return (Mode == MMFeedbackBase.Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Dilate", true, 16)] + /// whether or not values should be relative + [Tooltip("whether or not values should be relative")] + public bool RelativeValues = true; + /// the selected mode + [Tooltip("the selected mode")] + public MMFeedbackBase.Modes Mode = MMFeedbackBase.Modes.OverTime; + /// the duration of the feedback, in seconds + [Tooltip("the duration of the feedback, in seconds")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float Duration = 0.5f; + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType DilateCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0.5f), new Keyframe(0.3f, 1f), new Keyframe(1, 0.5f))); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = -1f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 1f; + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantDilate; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + protected float _initialDilate; + protected Coroutine _coroutine; + + /// + /// On init we grab our initial dilate value + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (!Active) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + _initialDilate = TargetTMPText.fontMaterial.GetFloat(ShaderUtilities.ID_FaceDilate); + #endif + } + + /// + /// On Play we turn animate our transition + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + if (Active) + { + switch (Mode) + { + case MMFeedbackBase.Modes.Instant: + TargetTMPText.fontMaterial.SetFloat(ShaderUtilities.ID_FaceDilate, InstantDilate); + TargetTMPText.UpdateMeshPadding(); + break; + case MMFeedbackBase.Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ApplyValueOverTime()); + break; + } + } + #endif + } + + /// + /// Applies our dilate value over time + /// + /// + protected virtual IEnumerator ApplyValueOverTime() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetValue(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetValue(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield return null; + } + + /// + /// Sets the Dilate value + /// + /// + protected virtual void SetValue(float time) + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + float intensity = MMTween.Tween(time, 0f, 1f, RemapZero, RemapOne, DilateCurve); + float newValue = intensity; + if (RelativeValues) + { + newValue += _initialDilate; + } + TargetTMPText.fontMaterial.SetFloat(ShaderUtilities.ID_FaceDilate, newValue); + TargetTMPText.UpdateMeshPadding(); + #endif + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.fontMaterial.SetFloat(ShaderUtilities.ID_FaceDilate, _initialDilate); + TargetTMPText.UpdateMeshPadding(); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPDilate.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPDilate.cs.meta new file mode 100644 index 0000000..e7ce4ad --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPDilate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce42aabd176ab5e4d8ba2a0dc416e78e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPFontSize.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPFontSize.cs new file mode 100644 index 0000000..6075c5c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPFontSize.cs @@ -0,0 +1,104 @@ +using MoreMountains.Tools; +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the font size of a target TMP over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the font size of a target TMP over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Font Size")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPFontSize : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor + { + get { return MMFeedbacksInspectorColors.TMPColor; } + } + + public override string RequiresSetupText + { + get + { + return + "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; + } + } + #endif + + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() + { + return (TargetTMPText == null); + } + + public override string RequiredTargetText + { + get { return TargetTMPText != null ? TargetTMPText.name : ""; } + } + #endif + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Font Size", true, 16)] + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType FontSizeCurve = + new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 1f; + + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantFontSize; + + protected override void FillTargets() + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetTMPText.gameObject; + receiver.TargetComponent = TargetTMPText; + receiver.TargetPropertyName = "fontSize"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = FontSizeCurve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantFontSize; + + _targets.Add(target); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPFontSize.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPFontSize.cs.meta new file mode 100644 index 0000000..7b54f2a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPFontSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fffa36c603d1bd4ea253a17e4d17757 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPLineSpacing.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPLineSpacing.cs new file mode 100644 index 0000000..ff6966b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPLineSpacing.cs @@ -0,0 +1,85 @@ +using MoreMountains.Tools; +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the line spacing of a target TMP over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the line spacing of a target TMP over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Line Spacing")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPLineSpacing : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Paragraph Spacing", true, 37)] + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType LineSpacingCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 10f; + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantFontSize; + + protected override void FillTargets() + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetTMPText.gameObject; + receiver.TargetComponent = TargetTMPText; + receiver.TargetPropertyName = "lineSpacing"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = LineSpacingCurve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantFontSize; + + _targets.Add(target); + #endif + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPLineSpacing.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPLineSpacing.cs.meta new file mode 100644 index 0000000..393fb7f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPLineSpacing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 769890c09f9abdf42af40a0e8b1f8ea0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineColor.cs new file mode 100644 index 0000000..0463952 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineColor.cs @@ -0,0 +1,227 @@ +using UnityEngine; +using System.Collections; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the color of a target TMP's outline over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the color of a target TMP's outline over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Outline Color")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPOutlineColor : MMF_Feedback + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + public enum ColorModes { Instant, Gradient, Interpolate } + + /// the duration of this feedback is the duration of the color transition, or 0 if instant + public override float FeedbackDuration { get { return (ColorMode == ColorModes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Outline Color", true, 16)] + /// the selected color mode : + /// None : nothing will happen, + /// gradient : evaluates the color over time on that gradient, from left to right, + /// interpolate : lerps from the current color to the destination one + [Tooltip("the selected color mode :" + + "None : nothing will happen," + + "gradient : evaluates the color over time on that gradient, from left to right," + + "interpolate : lerps from the current color to the destination one ")] + public ColorModes ColorMode = ColorModes.Interpolate; + /// how long the color of the text should change over time + [Tooltip("how long the color of the text should change over time")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate, (int)ColorModes.Gradient)] + public float Duration = 0.2f; + /// the color to apply + [Tooltip("the color to apply")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Instant)] + public Color32 InstantColor = Color.yellow; + /// the gradient to use to animate the color over time + [Tooltip("the gradient to use to animate the color over time")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Gradient)] + [GradientUsage(true)] + public Gradient ColorGradient; + /// the destination color when in interpolate mode + [Tooltip("the destination color when in interpolate mode")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate)] + public Color32 DestinationColor = Color.yellow; + /// the curve to use when interpolating towards the destination color + [Tooltip("the curve to use when interpolating towards the destination color")] + [MMFEnumCondition("ColorMode", (int)ColorModes.Interpolate)] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + protected Color _initialColor; + protected Coroutine _coroutine; + + /// + /// On init we store our initial outline color + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + _initialColor = TargetTMPText.outlineColor; + #endif + } + + /// + /// On Play we change our text's outline's color + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + switch (ColorMode) + { + case ColorModes.Instant: + TargetTMPText.outlineColor = InstantColor; + break; + case ColorModes.Gradient: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeColor()); + break; + case ColorModes.Interpolate: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeColor()); + break; + } + #endif + } + + /// + /// Changes the color of the text's outline over time + /// + /// + protected virtual IEnumerator ChangeColor() + { + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetColor(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetColor(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield break; + } + + /// + /// Applies the color change + /// + /// + protected virtual void SetColor(float time) + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (ColorMode == ColorModes.Gradient) + { + // we set our object inactive then active, otherwise for some reason outline color isn't applied. + TargetTMPText.gameObject.SetActive(false); + TargetTMPText.outlineColor = ColorGradient.Evaluate(time); + TargetTMPText.gameObject.SetActive(true); + } + else if (ColorMode == ColorModes.Interpolate) + { + float factor = ColorCurve.Evaluate(time); + TargetTMPText.gameObject.SetActive(false); + TargetTMPText.outlineColor = Color.LerpUnclamped(_initialColor, DestinationColor, factor); + TargetTMPText.gameObject.SetActive(true); + } + #endif + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.gameObject.SetActive(false); + TargetTMPText.outlineColor = _initialColor; + TargetTMPText.gameObject.SetActive(true); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineColor.cs.meta new file mode 100644 index 0000000..1e2a79d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e39702c3d8077294887f6c1ddec28589 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineWidth.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineWidth.cs new file mode 100644 index 0000000..62968af --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineWidth.cs @@ -0,0 +1,96 @@ +using MoreMountains.Tools; +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the outline width of a target TMP over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the outline width of a target TMP over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Outline Width")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPOutlineWidth : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor + { + get { return MMFeedbacksInspectorColors.TMPColor; } + } + + public override string RequiresSetupText + { + get + { + return + "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; + } + } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Outline Width", true, 22)] + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType OutlineWidthCurve = + new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 1f; + + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantFontSize; + + protected override void FillTargets() + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetTMPText.gameObject; + receiver.TargetComponent = TargetTMPText; + receiver.TargetPropertyName = "outlineWidth"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = OutlineWidthCurve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantFontSize; + + _targets.Add(target); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineWidth.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineWidth.cs.meta new file mode 100644 index 0000000..e285d43 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPOutlineWidth.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 932d7950b01edc04d8d29d2669394cf5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPParagraphSpacing.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPParagraphSpacing.cs new file mode 100644 index 0000000..5dfa130 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPParagraphSpacing.cs @@ -0,0 +1,85 @@ +using MoreMountains.Tools; +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the paragraph spacing of a target TMP over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the paragraph spacing of a target TMP over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Paragraph Spacing")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPParagraphSpacing : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Paragraph Spacing", true, 21)] + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType ParagraphSpacingCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 10f; + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantFontSize; + + protected override void FillTargets() + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetTMPText.gameObject; + receiver.TargetComponent = TargetTMPText; + receiver.TargetPropertyName = "paragraphSpacing"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = ParagraphSpacingCurve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantFontSize; + + _targets.Add(target); + #endif + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPParagraphSpacing.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPParagraphSpacing.cs.meta new file mode 100644 index 0000000..86275b7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPParagraphSpacing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0be258710b59b254097822aef1c6820e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPSoftness.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPSoftness.cs new file mode 100644 index 0000000..0fef0ad --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPSoftness.cs @@ -0,0 +1,202 @@ +using MoreMountains.Tools; +using UnityEngine; +using System.Collections; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you tweak the softness of a TMP text over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you tweak the softness of a TMP text over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Softness")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPSoftness : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + public override bool HasCustomInspectors => true; + + /// the duration of this feedback is the duration of the transition, or 0 if instant + public override float FeedbackDuration { get { return (Mode == MMFeedbackBase.Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Softness", true, 13)] + /// whether or not values should be relative + [Tooltip("whether or not values should be relative")] + public bool RelativeValues = true; + /// the selected mode + [Tooltip("the selected mode")] + public MMFeedbackBase.Modes Mode = MMFeedbackBase.Modes.OverTime; + /// the duration of the feedback, in seconds + [Tooltip("the duration of the feedback, in seconds")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float Duration = 0.5f; + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType SoftnessCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0f), new Keyframe(0.3f, 1f), new Keyframe(1, 0f))); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 1f; + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantSoftness; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + protected float _initialSoftness; + protected Coroutine _coroutine; + + /// + /// On init we grab our initial softness + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (!Active) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + _initialSoftness = TargetTMPText.fontMaterial.GetFloat(ShaderUtilities.ID_OutlineSoftness); + #endif + } + + /// + /// On Play we animate our softness + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + + if (Active && FeedbackTypeAuthorized) + { + switch (Mode) + { + case MMFeedbackBase.Modes.Instant: + TargetTMPText.fontMaterial.SetFloat(ShaderUtilities.ID_OutlineSoftness, InstantSoftness); + TargetTMPText.UpdateMeshPadding(); + break; + case MMFeedbackBase.Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ApplyValueOverTime()); + break; + } + } + #endif + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + protected virtual IEnumerator ApplyValueOverTime() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetValue(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetValue(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield return null; + } + + protected virtual void SetValue(float time) + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + float intensity = MMTween.Tween(time, 0f, 1f, RemapZero, RemapOne, SoftnessCurve); + float newValue = intensity; + if (RelativeValues) + { + newValue += _initialSoftness; + } + TargetTMPText.fontMaterial.SetFloat(ShaderUtilities.ID_OutlineSoftness, newValue); + TargetTMPText.UpdateMeshPadding(); + #endif + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.fontMaterial.SetFloat(ShaderUtilities.ID_OutlineSoftness, _initialSoftness); + TargetTMPText.UpdateMeshPadding(); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPSoftness.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPSoftness.cs.meta new file mode 100644 index 0000000..4638485 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPSoftness.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef0aa39dbc6e77a4492bee30af779378 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPText.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPText.cs new file mode 100644 index 0000000..af09124 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPText.cs @@ -0,0 +1,83 @@ +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you change the text of a target TMP text component + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the text of a target TMP text component")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Text")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPText : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("TextMeshPro Change Text", true, 12, true)] + /// the target TMP_Text component we want to change the text on + [Tooltip("the target TMP_Text component we want to change the text on")] + public TMP_Text TargetTMPText; + /// the new text to replace the old one with + [Tooltip("the new text to replace the old one with")] + [TextArea] + public string NewText = "Hello World"; + #endif + + protected string _initialText; + + /// + /// On play we change the text of our target TMPText + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + if (TargetTMPText == null) + { + return; + } + + _initialText = TargetTMPText.text; + TargetTMPText.text = NewText; + #endif + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.text = _initialText; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPText.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPText.cs.meta new file mode 100644 index 0000000..5b10aa7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3085c8741c1bb84ca7a609f2989b7e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPTextReveal.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPTextReveal.cs new file mode 100644 index 0000000..c5cbde7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPTextReveal.cs @@ -0,0 +1,489 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.Events; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using MoreMountains.Tools; +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback will let you reveal words, lines, or characters in a target TMP, one at a time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you reveal words, lines, or characters in a target TMP, one at a time")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Text Reveal")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPTextReveal : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + protected string _originalText; + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + protected TMP_TextInfo _textInfo; + + /// the duration of this feedback + public override float FeedbackDuration + { + get + { + if (DurationMode == DurationModes.TotalDuration) + { + return RevealDuration; + } + else + { + if (TargetTMPText == null) + { + return 0f; + } + + if (TargetTMPText.textInfo == null) + { + bool initiallyActive = TargetTMPText.gameObject.activeSelf; + TargetTMPText.gameObject.SetActive(true); + TargetTMPText.ForceMeshUpdate(true); + TargetTMPText.gameObject.SetActive(initiallyActive); + } + + if (AllowHierarchyActivationForDurationComputation) + { + List disabledParents = TargetTMPText.transform.MMEnumerateAllParents(true).Where(p => !p.gameObject.activeSelf).ToList(); + disabledParents.ForEach(p => p.gameObject.SetActive(true)); + TargetTMPText.ForceMeshUpdate(true); + disabledParents.ForEach(p => p.gameObject.SetActive(false)); + } + + if (TargetTMPText.textInfo == null) + { + return 0f; + } + + float foundLength = 0f; + + if (ReplaceText) + { + _originalText = TargetTMPText.text; + TargetTMPText.text = NewText; + } + + switch (RevealMode) + { + case RevealModes.Character: + foundLength = RichTextLength(TargetTMPText.text) * IntervalBetweenReveals; + break; + case RevealModes.Lines: + foundLength = TargetTMPText.textInfo.lineCount * IntervalBetweenReveals; + break; + case RevealModes.Words: + foundLength = TargetTMPText.textInfo.wordCount * IntervalBetweenReveals; + break; + } + + if (ReplaceText) + { + TargetTMPText.text = _originalText; + } + + return foundLength; + } + } + set + { + if (DurationMode == DurationModes.TotalDuration) + { + RevealDuration = value; + } + else + { + if (TargetTMPText != null) + { + if (ReplaceText) + { + _originalText = TargetTMPText.text; + TargetTMPText.text = NewText; + } + switch (RevealMode) + { + case RevealModes.Character: + IntervalBetweenReveals = value / RichTextLength(TargetTMPText.text); + break; + case RevealModes.Lines: + IntervalBetweenReveals = value / TargetTMPText.textInfo.lineCount; + break; + case RevealModes.Words: + IntervalBetweenReveals = value / TargetTMPText.textInfo.wordCount; + break; + } + if (ReplaceText) + { + TargetTMPText.text = _originalText; + } + } + } + } + } + + #endif + + /// the possible ways to reveal the text + public enum RevealModes { Character, Lines, Words } + /// whether to define duration by the time interval between two unit reveals, or by the total duration the reveal should take + public enum DurationModes { Interval, TotalDuration } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + [MMFInspectorGroup("Target", true, 12, true)] + /// the target TMP_Text component we want to change the text on + [Tooltip("the target TMP_Text component we want to change the text on")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Change Text", true, 13)] + + /// whether or not to replace the current TMP target's text on play + [Tooltip("whether or not to replace the current TMP target's text on play")] + public bool ReplaceText = false; + /// the new text to replace the old one with + [Tooltip("the new text to replace the old one with")] + [TextArea] + public string NewText = "Hello World"; + + [MMFInspectorGroup("Reveal", true, 14)] + /// the selected way to reveal the text (character by character, word by word, or line by line) + [Tooltip("the selected way to reveal the text (character by character, word by word, or line by line)")] + public RevealModes RevealMode = RevealModes.Character; + /// whether to define duration by the time interval between two unit reveals, or by the total duration the reveal should take + [Tooltip("whether to define duration by the time interval between two unit reveals, or by the total duration the reveal should take")] + public DurationModes DurationMode = DurationModes.Interval; + /// the interval (in seconds) between two reveals + [Tooltip("the interval (in seconds) between two reveals")] + [MMFEnumCondition("DurationMode", (int)DurationModes.Interval)] + public float IntervalBetweenReveals = 0.05f; + /// the total duration of the text reveal, in seconds + [Tooltip("the total duration of the text reveal, in seconds")] + [MMFEnumCondition("DurationMode", (int)DurationModes.TotalDuration)] + public float RevealDuration = 1f; + /// a UnityEvent to invoke every time a reveal happens (word, line or character) + [Tooltip("a UnityEvent to invoke every time a reveal happens (word, line or character)")] + public UnityEvent OnReveal; + /// alright so that one will be weird : for reasons, TextMeshPro won't let you read the length of a disabled text, so to do so, we need to enable it, even if it's just to disable it again right after. If you're targeting a disabled text, or a text that is part of a disabled hierarchy, you'll probably want to set this to true so that the system can proceed with accurate duration computation. If you don't, and your target transform is disabled, duration won't be computed correctly. + [Tooltip("alright so that one will be weird : for reasons, TextMeshPro won't let you read the length of a disabled text, so to do so, we need to enable it, even if it's just to disable it again right after. If you're targeting a disabled text, or a text that is part of a disabled hierarchy, you'll probably want to set this to true so that the system can proceed with accurate duration computation. If you don't, and your target transform is disabled, duration won't be computed correctly.")] + public bool AllowHierarchyActivationForDurationComputation = false; + + protected float _delay; + protected Coroutine _coroutine; + protected int _richTextLength; + + protected int _totalCharacters; + protected int _totalLines; + protected int _totalWords; + protected string _initialText; + protected int _indexLastTime = -1; + + /// + /// On play we change the text of our target TMPText + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + + if (TargetTMPText == null) + { + return; + } + + _initialText = TargetTMPText.text; + _textInfo = TargetTMPText.textInfo; + + if (ReplaceText) + { + TargetTMPText.text = NewText; + TargetTMPText.ForceMeshUpdate(); + } + _richTextLength = RichTextLength(TargetTMPText.text); + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + switch (RevealMode) + { + case RevealModes.Character: + _delay = (DurationMode == DurationModes.Interval) ? IntervalBetweenReveals : RevealDuration / _richTextLength; + TargetTMPText.maxVisibleCharacters = 0; + _coroutine = Owner.StartCoroutine(RevealCharacters()); + break; + case RevealModes.Lines: + _delay = (DurationMode == DurationModes.Interval) ? IntervalBetweenReveals : RevealDuration / TargetTMPText.textInfo.lineCount; + TargetTMPText.maxVisibleLines = 0; + _coroutine = Owner.StartCoroutine(RevealLines()); + break; + case RevealModes.Words: + _delay = (DurationMode == DurationModes.Interval) ? IntervalBetweenReveals : RevealDuration / TargetTMPText.textInfo.wordCount; + TargetTMPText.maxVisibleWords = 0; + _coroutine = Owner.StartCoroutine(RevealWords()); + break; + } + #endif + } + + #if (MM_TEXTMESHPRO || MM_UGUI2) + + /// + /// Reveals characters one at a time + /// + /// + protected virtual IEnumerator RevealCharacters() + { + float startTime = FeedbackTime; + _totalCharacters = _richTextLength; + int visibleCharacters = 0; + float lastCharAt = 0f; + + IsPlaying = true; + while ((visibleCharacters <= _totalCharacters) && !Owner.SkippingToTheEnd) + { + float time = FeedbackTime; + + if (time - lastCharAt < IntervalBetweenReveals) + { + yield return null; + } + + TargetTMPText.maxVisibleCharacters = visibleCharacters; + InvokeRevealEvents(); + visibleCharacters++; + lastCharAt = time; + + // we adjust our delay + + float delay = 0f; + + if (DurationMode == DurationModes.Interval) + { + _delay = Mathf.Max(IntervalBetweenReveals, FeedbackDeltaTime); + delay = _delay - FeedbackDeltaTime; + } + else + { + int remainingCharacters = _totalCharacters - visibleCharacters; + float elapsedTime = time - startTime; + if (remainingCharacters != 0) + { + _delay = (RevealDuration - elapsedTime) / remainingCharacters; + } + delay = _delay - FeedbackDeltaTime; + } + + yield return WaitFor(delay); + } + TargetTMPText.maxVisibleCharacters = _richTextLength; + IsPlaying = false; + } + + /// + /// Reveals lines one at a time + /// + /// + protected virtual IEnumerator RevealLines() + { + _totalLines = TargetTMPText.textInfo.lineCount; + int visibleLines = 0; + + IsPlaying = true; + while ((visibleLines <= _totalLines) && !Owner.SkippingToTheEnd) + { + TargetTMPText.maxVisibleLines = visibleLines; + InvokeRevealEvents(); + visibleLines++; + + yield return WaitFor(_delay); + } + TargetTMPText.maxVisibleLines = _totalLines; + IsPlaying = false; + } + + /// + /// Reveals words one at a time + /// + /// + protected virtual IEnumerator RevealWords() + { + _totalWords = TargetTMPText.textInfo.wordCount; + int visibleWords = 0; + + IsPlaying = true; + while ((visibleWords <= _totalWords) && !Owner.SkippingToTheEnd) + { + TargetTMPText.maxVisibleWords = visibleWords; + InvokeRevealEvents(); + visibleWords++; + yield return WaitFor(_delay); + } + TargetTMPText.maxVisibleWords = _totalWords; + IsPlaying = false; + } + + /// + /// Invokes on reveal events + /// + protected virtual void InvokeRevealEvents() + { + if ( ((RevealMode == RevealModes.Character) && (TargetTMPText.maxVisibleCharacters == 0)) + || ((RevealMode == RevealModes.Character) && !IsNewVisibleCharacter()) + || ((RevealMode == RevealModes.Lines) && (TargetTMPText.maxVisibleLines == 0)) + || ((RevealMode == RevealModes.Words) && (TargetTMPText.maxVisibleWords == 0)) ) + { + return; + } + + OnReveal?.Invoke(); + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// On skip, we display our entire text + /// + /// + /// + protected override void CustomSkipToTheEnd(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!IsPlaying) + { + return; + } + + switch (RevealMode) + { + case RevealModes.Character: + TargetTMPText.maxVisibleCharacters = _totalCharacters; + break; + case RevealModes.Lines: + TargetTMPText.maxVisibleLines = _totalLines; + break; + case RevealModes.Words: + TargetTMPText.maxVisibleWords = _totalWords; + break; + } + } + + /// + /// Returns the length of a rich text, excluding its tags + /// + /// + /// + protected int RichTextLength(string richText) + { + int richTextLength = 0; + bool insideTag = false; + + richText = richText.Replace("
", "-"); + + foreach (char character in richText) + { + if (character == '<') + { + insideTag = true; + continue; + } + else if (character == '>') + { + insideTag = false; + } + else if (!insideTag) + { + richTextLength++; + } + } + + return richTextLength; + } + + /// + /// Returns true if the last visible letter of the TMP text is new and visible and a letter or digit + /// + /// + protected virtual bool IsNewVisibleCharacter() + { + int lastVisibleCharIndex = -1; + _textInfo = TargetTMPText.GetTextInfo(TargetTMPText.text); + + for (int i = 0; i < _textInfo.characterCount; i++) + { + if (_textInfo.characterInfo[i].isVisible) + { + lastVisibleCharIndex = i; + } + } + + if ((lastVisibleCharIndex < 0) + || (lastVisibleCharIndex > TargetTMPText.text.Length) + || (lastVisibleCharIndex == _indexLastTime)) + { + return false; + } + + _indexLastTime = lastVisibleCharIndex; + return Char.IsLetterOrDigit(_textInfo.characterInfo[lastVisibleCharIndex].character); + } + + #endif + + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + TargetTMPText.text = _initialText; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPTextReveal.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPTextReveal.cs.meta new file mode 100644 index 0000000..5da604d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPTextReveal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45c7b8525ec6efc459e80a97bb09c688 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPWordSpacing.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPWordSpacing.cs new file mode 100644 index 0000000..5b213df --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPWordSpacing.cs @@ -0,0 +1,85 @@ +using MoreMountains.Tools; +using UnityEngine; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.Feedbacks +{ + /// + /// This feedback lets you control the word spacing of a target TMP over time + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback lets you control the word spacing of a target TMP over time.")] + #if (MM_TEXTMESHPRO || MM_UGUI2) + [FeedbackPath("TextMesh Pro/TMP Word Spacing")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.TextMeshPro")] + public class MMF_TMPWordSpacing : MMF_FeedbackBase + { + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.TMPColor; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetTMPText be set to be able to work properly. You can set one below."; } } + #endif + + #if UNITY_EDITOR && (MM_TEXTMESHPRO || MM_UGUI2) + public override bool EvaluateRequiresSetup() { return (TargetTMPText == null); } + public override string RequiredTargetText { get { return TargetTMPText != null ? TargetTMPText.name : ""; } } + #endif + + #if (MM_TEXTMESHPRO || MM_UGUI2) + public override bool HasAutomatedTargetAcquisition => true; + public override bool CanForceInitialValue => true; + protected override void AutomateTargetAcquisition() => TargetTMPText = FindAutomatedTarget(); + + [MMFInspectorGroup("Target", true, 12, true)] + /// the TMP_Text component to control + [Tooltip("the TMP_Text component to control")] + public TMP_Text TargetTMPText; + #endif + + [MMFInspectorGroup("Word Spacing", true, 15)] + /// the curve to tween on + [Tooltip("the curve to tween on")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public MMTweenType WordSpacingCurve = new MMTweenType(new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0))); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.OverTime)] + public float RemapOne = 10f; + /// the value to move to in instant mode + [Tooltip("the value to move to in instant mode")] + [MMFEnumCondition("Mode", (int)MMFeedbackBase.Modes.Instant)] + public float InstantFontSize; + + protected override void FillTargets() + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (TargetTMPText == null) + { + return; + } + MMF_FeedbackBaseTarget target = new MMF_FeedbackBaseTarget(); + MMPropertyReceiver receiver = new MMPropertyReceiver(); + receiver.TargetObject = TargetTMPText.gameObject; + receiver.TargetComponent = TargetTMPText; + receiver.TargetPropertyName = "wordSpacing"; + receiver.RelativeValue = RelativeValues; + target.Target = receiver; + target.LevelCurve = WordSpacingCurve; + target.RemapLevelZero = RemapZero; + target.RemapLevelOne = RemapOne; + target.InstantLevel = InstantFontSize; + + _targets.Add(target); + #endif + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPWordSpacing.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPWordSpacing.cs.meta new file mode 100644 index 0000000..0bfca36 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/Feedbacks/MMF_TMPWordSpacing.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bfe04c61ac8739b4eb65938198bcc344 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText.meta new file mode 100644 index 0000000..2d2e828 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d265da3a4cf322549861a44a1d93a31e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/MMFloatingTextMeshPro.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/MMFloatingTextMeshPro.cs new file mode 100644 index 0000000..e108b88 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/MMFloatingTextMeshPro.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using MoreMountains.Tools; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif + +namespace MoreMountains.Feedbacks +{ + /// + /// A floating text variant using TextMeshPro instead of regular TextMesh + /// + public class MMFloatingTextMeshPro : MMFloatingText + { + #if (MM_TEXTMESHPRO || MM_UGUI2) + [Header("TextMeshPro")] + /// the TextMeshPro object to use to display values + public TextMeshPro TargetTextMeshPro; + + /// + /// On init we grab our TMP's color + /// + protected override void Initialization() + { + base.Initialization(); + _initialTextColor = TargetTextMeshPro.color; + } + + /// + /// Sets the TMP's value + /// + /// + public override void SetText(string newValue) + { + TargetTextMeshPro.text = newValue; + } + + /// + /// Sets the color of the target TMP + /// + /// + public override void SetColor(Color newColor) + { + TargetTextMeshPro.color = newColor; + } + + /// + /// Sets the opacity of the target TMP + /// + /// + public override void SetOpacity(float newOpacity) + { + _newColor = TargetTextMeshPro.color; + _newColor.a = newOpacity; + TargetTextMeshPro.color = _newColor; + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/MMFloatingTextMeshPro.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/MMFloatingTextMeshPro.cs.meta new file mode 100644 index 0000000..0f89a4b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/MMFloatingTextMeshPro.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2192c456bb84f804aa4b04b6c64a7acb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs.meta new file mode 100644 index 0000000..2976b70 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b9b8f20a8548085498911ff8bf94d712 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs/MMFloatingTextMeshPro.prefab b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs/MMFloatingTextMeshPro.prefab new file mode 100644 index 0000000..03d78a7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs/MMFloatingTextMeshPro.prefab @@ -0,0 +1,806 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4206607447451609638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1390129691196447985} + - component: {fileID: 9212669487376954193} + - component: {fileID: 4791405907307182499} + m_Layer: 0 + m_Name: TMP SubMesh [Lato SDF Material + Lato-Bold SDF Atlas] + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1390129691196447985 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4206607447451609638} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7621044863247771369} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &9212669487376954193 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4206607447451609638} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &4791405907307182499 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4206607447451609638} + m_Mesh: {fileID: 0} +--- !u!1 &7372881786062947483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3258814973617716309} + m_Layer: 0 + m_Name: Billboard + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3258814973617716309 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7372881786062947483} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7621044863247771369} + m_Father: {fileID: 2676981279837942082} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7785295853672088445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7785295853672088418} + - component: {fileID: 6659172821923877623} + - component: {fileID: 7284800961402381166} + m_Layer: 0 + m_Name: MMFloatingTextMeshPro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7785295853672088418 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7785295853672088445} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 6.93, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2676981279837942082} + - {fileID: 7838352154683608450} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6659172821923877623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7785295853672088445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72de0b0360096ea41a18d17864ecb963, type: 3} + m_Name: + m_EditorClassIdentifier: + BoundsBasedOn: 3 + ExecuteOnEnable: + m_PersistentCalls: + m_Calls: [] + ExecuteOnDisable: + m_PersistentCalls: + m_Calls: [] + LifeTime: 0 +--- !u!114 &7284800961402381166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7785295853672088445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2192c456bb84f804aa4b04b6c64a7acb, type: 3} + m_Name: + m_EditorClassIdentifier: + MovingPart: {fileID: 2676981279837942082} + Billboard: {fileID: 3258814973617716309} + TargetTextMesh: {fileID: 0} + Direction: {x: 0, y: 1, z: 0} + TargetTextMeshPro: {fileID: 8042657054365514525} +--- !u!1 &8494741392771170296 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2676981279837942082} + m_Layer: 0 + m_Name: MovingContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2676981279837942082 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8494741392771170296} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3258814973617716309} + m_Father: {fileID: 7785295853672088418} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8563583507991455142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7838352154683608450} + - component: {fileID: 6466343129216784876} + m_Layer: 0 + m_Name: AppearFeedbacks + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7838352154683608450 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8563583507991455142} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7785295853672088418} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6466343129216784876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8563583507991455142} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + InitializationMode: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 1 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - id: 0 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + ForceStopFeedbacksOnDisable: 1 + PlayCount: 0 + references: + version: 1 + 00000000: + type: {class: MMF_Scale, ns: MoreMountains.Feedbacks, asm: MoreMountains.Feedbacks} + data: + Active: 0 + UniqueID: -129877084 + Label: Scale + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + Owner: {fileID: 6466343129216784876} + DebugActive: 0 + Mode: 0 + AnimateScaleTarget: {fileID: 7785295853672088418} + AnimateScaleDuration: 0.2 + RemapCurveZero: 1 + RemapCurveOne: 2 + Offset: 0 + AnimateX: 1 + AnimateScaleTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 1 + AnimateScaleTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 1 + AnimateScaleTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + UniformScaling: 0 + AllowAdditivePlays: 0 + DetermineScaleOnPlay: 0 + DestinationScale: {x: 0.5, y: 0.5, z: 0.5} + AnimateScaleX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateScaleY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateScaleZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1.5 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &8775573913838539411 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7621044863247771369} + - component: {fileID: 7099137272689354293} + - component: {fileID: 8042657054365514525} + m_Layer: 0 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7621044863247771369 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8775573913838539411} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1390129691196447985} + m_Father: {fileID: 3258814973617716309} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &7099137272689354293 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8775573913838539411} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 7159369417392969216, guid: 3944eaaf70beffa4097d8c293604125e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &8042657054365514525 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8775573913838539411} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 150 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3944eaaf70beffa4097d8c293604125e, type: 2} + m_sharedMaterial: {fileID: 7159369417392969216, guid: 3944eaaf70beffa4097d8c293604125e, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 10 + m_fontSizeBase: 10 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 7099137272689354293} + m_maskType: 0 + _SortingLayer: 0 + _SortingLayerID: 0 + _SortingOrder: 0 diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs/MMFloatingTextMeshPro.prefab.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs/MMFloatingTextMeshPro.prefab.meta new file mode 100644 index 0000000..aa1d3c3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MMFloatingText/Prefabs/MMFloatingTextMeshPro.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0453e37c3c22e7145b8c23c7fa96de36 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MoreMountains.Feedbacks.TextMeshPro.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MoreMountains.Feedbacks.TextMeshPro.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MoreMountains.Feedbacks.TextMeshPro.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MoreMountains.Feedbacks.TextMeshPro.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MoreMountains.Feedbacks.TextMeshPro.asmref.meta new file mode 100644 index 0000000..bf6d7b9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/TextMeshPro/MoreMountains.Feedbacks.TextMeshPro.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b04ed8e9bde180e45bebd340d0981646 +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit.meta new file mode 100644 index 0000000..a3082d6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1626a40c45de9f54aac0e7922bf45c97 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base.meta new file mode 100644 index 0000000..53a5785 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 45ecfa47ab5e26f459c0b53c2db0d2d3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkit.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkit.cs new file mode 100644 index 0000000..b8f3ab1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkit.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Feedbacks; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.UIElements; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback is a base for UI Toolkit feedbacks + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback is a base for UI Toolkit feedbacks")] + public class MMF_UIToolkit : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.UIColor; } } + public override bool EvaluateRequiresSetup() { return (TargetDocument == null); } + public override string RequiredTargetText { get { return TargetDocument != null ? TargetDocument.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires a target UI Document, set one in the TargetDocument field below"; } } + #endif + + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetDocument = FindAutomatedTarget(); + public enum QueryModes { Name, Class } + + [MMFInspectorGroup("Target", true, 54, true)] + /// the UI document on which to make modifications + [Tooltip("the UI document on which to make modifications")] + public UIDocument TargetDocument; + /// the way to perform the query, either via element name or via class + [Tooltip("the way to perform the query, either via element name or via class")] + public QueryModes QueryMode = QueryModes.Name; + /// the query to perform (replace this with your own element name or class) + [Tooltip("the query to perform (replace this with your own element name or class)")] + public string Query = "ButtonA"; + /// whether to mark the UI document dirty after the operation. Set this to true when making a change that requires a repaint such as when using generateVisualContent to render a mesh and the mesh data has now changed. + [Tooltip("whether to mark the UI document dirty after the operation. Set this to true when making a change that requires a repaint such as when using generateVisualContent to render a mesh and the mesh data has now changed.")] + public bool MarkDirty = false; + + protected List _visualElements = new List(); + + /// + /// On init we turn the Image off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + PerformQuery(); + } + + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1) + { + } + + /// + /// Performs the query and sets _visualElements with the result + /// + protected virtual void PerformQuery() + { + switch (QueryMode) + { + case QueryModes.Name: + _visualElements = TargetDocument.rootVisualElement.Query(Query).ToList(); + break; + case QueryModes.Class: + _visualElements = TargetDocument.rootVisualElement.Query(className: Query).ToList(); + break; + } + } + + protected virtual void HandleMarkDirty(VisualElement element) + { + if (MarkDirty) + { + element.MarkDirtyRepaint(); + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkit.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkit.cs.meta new file mode 100644 index 0000000..2d64539 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26da15f4b3a68a54295a67aede05e70b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitBoolBase.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitBoolBase.cs new file mode 100644 index 0000000..be1fbb6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitBoolBase.cs @@ -0,0 +1,97 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.UIElements; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// A base feedback to set a bool on a target UI Document + /// + [AddComponentMenu("")] + public class MMF_UIToolkitBoolBase : MMF_UIToolkit + { + /// the duration of this feedback is the duration of the color transition, or 0 if instant + public override float FeedbackDuration { get { return 0f; }} + public override bool HasCustomInspectors => true; + + protected bool _initialValue; + + /// + /// On init we store our initial value + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if ((_visualElements == null) || (_visualElements.Count == 0)) + { + return; + } + _initialValue = GetInitialValue(); + } + + /// + /// On Play we change our text's alpha + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if ((_visualElements == null) || (_visualElements.Count == 0)) + { + return; + } + + SetValue(); + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + } + + protected virtual void SetValue() + { + + } + protected virtual void SetValue(bool newValue) + { + + } + + protected virtual bool GetInitialValue() + { + return false; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + SetValue(_initialValue); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitBoolBase.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitBoolBase.cs.meta new file mode 100644 index 0000000..725e3d6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitBoolBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 267821bdecaf2b14993cc3df8c285df5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitColorBase.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitColorBase.cs new file mode 100644 index 0000000..b36d7d3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitColorBase.cs @@ -0,0 +1,224 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.UIElements; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// A base feedback to set a color on a target UI Document + /// + [AddComponentMenu("")] + public class MMF_UIToolkitColorBase : MMF_UIToolkit + { + /// the duration of this feedback is whatever value's been defined for it + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant } + + [MMFInspectorGroup("Color", true, 55, true)] + /// whether the feedback should affect the Image instantly or over a period of time + [Tooltip("whether the feedback should affect the Image instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the Image should change over time + [Tooltip("how long the Image should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public float Duration = 0.2f; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// whether or not to modify the color of the image + [Tooltip("whether or not to modify the color of the image")] + public bool ModifyColor = true; + /// the colors to apply to the Image over time + [Tooltip("the colors to apply to the Image over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public Gradient ColorOverTime = + new Gradient() + { + colorKeys = new GradientColorKey[] + { + new GradientColorKey(Color.white, 0f), + new GradientColorKey(Color.red, 0.5f), + new GradientColorKey(Color.white, 1f) + }, + alphaKeys = new GradientAlphaKey[] + { + new GradientAlphaKey(1f, 0f), + new GradientAlphaKey(1f, 0.5f), + new GradientAlphaKey(1f, 1f) + } + }; + /// the color to move to in instant mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Color InstantColor; + /// if this is true, the initial color will be applied to the gradient start + [Tooltip("if this is true, the initial color will be applied to the gradient start")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public bool ApplyInitialColorToGradientStart = false; + /// if this is true, the initial color will be applied to the gradient end + [Tooltip("if this is true, the initial color will be applied to the gradient end")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public bool ApplyInitialColorToGradientEnd = false; + /// if this is true, the initial color will be applied to the gradient start and end on play + [FormerlySerializedAs("GrabInitialColorsOnPlay")] + [Tooltip("if this is true, the initial color will be applied to the gradient start and end on play")] + [MMFEnumCondition("Mode", (int)Modes.OverTime)] + public bool ApplyInitialColorsOnPlay = true; + + protected Coroutine _coroutine; + protected Color _initialColor; + + /// + /// On init we turn the Image off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + HandleApplyInitialColors(); + } + + protected virtual void HandleApplyInitialColors() + { + var colorKeys = ColorOverTime.colorKeys; + var alphaKeys = ColorOverTime.alphaKeys; + + if (ApplyInitialColorToGradientStart) + { + colorKeys[0] = new GradientColorKey(GetInitialColor(),0f); + alphaKeys[0] = new GradientAlphaKey(GetInitialColor().a,0f); + } + + if (ApplyInitialColorToGradientEnd) + { + int lastIndex = ColorOverTime.colorKeys.Length - 1; + colorKeys[lastIndex] = new GradientColorKey(GetInitialColor(),1f); + alphaKeys[lastIndex] = new GradientAlphaKey(GetInitialColor().a,1f); + } + + if (ApplyInitialColorToGradientEnd || ApplyInitialColorToGradientStart) + { + ColorOverTime.SetKeys(colorKeys, alphaKeys); + } + } + + protected virtual void ApplyColor(Color newColor) + { + + } + + protected virtual Color GetInitialColor() + { + return Color.white; + } + + /// + /// On Play we turn our Image on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + _initialColor = GetInitialColor(); + + if (ApplyInitialColorsOnPlay) + { + HandleApplyInitialColors(); + } + + switch (Mode) + { + case Modes.Instant: + if (ModifyColor) + { + ApplyColor(InstantColor); + } + break; + case Modes.OverTime: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ImageSequence()); + break; + } + } + + /// + /// This coroutine will modify the values on the Image + /// + /// + protected virtual IEnumerator ImageSequence() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetImageValues(remappedTime); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetImageValues(FinalNormalizedTime); + + IsPlaying = false; + _coroutine = null; + yield return null; + } + + /// + /// Sets the various values on the sprite renderer on a specified time (between 0 and 1) + /// + /// + protected virtual void SetImageValues(float time) + { + if (ModifyColor) + { + ApplyColor(ColorOverTime.Evaluate(time)); + } + } + + /// + /// Turns the sprite renderer off on stop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + IsPlaying = false; + base.CustomStopFeedback(position, feedbacksIntensity); + _coroutine = null; + } + + /// + /// On restore, we restore our initial state + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + ApplyColor(_initialColor); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitColorBase.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitColorBase.cs.meta new file mode 100644 index 0000000..fdb7a96 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitColorBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f642848870e854947bbbb090be8948d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitFloatBase.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitFloatBase.cs new file mode 100644 index 0000000..5f94388 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitFloatBase.cs @@ -0,0 +1,216 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.UIElements; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// A base feedback to set a float on a target UI Document + /// + [AddComponentMenu("")] + public class MMF_UIToolkitFloatBase : MMF_UIToolkit + { + /// a static bool used to disable all feedbacks of this type at once + public enum Modes { Instant, Interpolate, ToDestination } + + /// the duration of this feedback is the duration of the color transition, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasCustomInspectors => true; + + [MMFInspectorGroup("Value", true, 16)] + /// the selected color mode : + /// None : nothing will happen, + /// gradient : evaluates the color over time on that gradient, from left to right, + /// interpolate : lerps from the current color to the destination one + [Tooltip("the selected mode :" + + "Instant : the value will change instantly to the target one," + + "Curve : the value will be interpolated along the curve," + + "interpolate : lerps from the current value to the destination one ")] + public Modes Mode = Modes.Interpolate; + /// whether or not the value should be applied relatively to the initial value + [Tooltip("whether or not the value should be applied relatively to the initial value")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate, (int)Modes.Instant)] + public bool RelativeValue = false; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + /// how long the color of the text should change over time + [Tooltip("how long the color of the text should change over time")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate, (int)Modes.ToDestination)] + public float Duration = 0.2f; + /// the value to apply when in instant mode + [Tooltip("the value to apply when in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantValue = 1f; + + /// the curve to use when interpolating towards the destination value + [Tooltip("the curve to use when interpolating towards the destination value")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate, (int)Modes.ToDestination)] + public MMTweenType Curve = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + /// the value to which the curve's 0 should be remapped + [Tooltip("the value to which the curve's 0 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate)] + public float CurveRemapZero = 0f; + /// the value to which the curve's 1 should be remapped + [Tooltip("the value to which the curve's 1 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate)] + public float CurveRemapOne = 1f; + /// the value to aim towards when in ToDestination mode + [Tooltip("the value to aim towards when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float DestinationValue = 1f; + + protected float _initialValue; + protected Coroutine _coroutine; + + /// + /// On init we store our initial value + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if ((_visualElements == null) || (_visualElements.Count == 0)) + { + return; + } + _initialValue = GetInitialValue(); + } + + /// + /// On Play we change our text's alpha + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if ((_visualElements == null) || (_visualElements.Count == 0)) + { + return; + } + + if (RelativeValue) + { + _initialValue = GetInitialValue(); + } + + switch (Mode) + { + case Modes.Instant: + float newInstantValue = RelativeValue ? InstantValue + _initialValue : InstantValue; + SetValue(newInstantValue); + break; + case Modes.Interpolate: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeValue()); + break; + case Modes.ToDestination: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + _initialValue = GetInitialValue(); + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeValue()); + break; + } + } + + /// + /// Changes the color of the text over time + /// + /// + protected virtual IEnumerator ChangeValue() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + ApplyTime(remappedTime); + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + ApplyTime(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield break; + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// Applies the alpha change + /// + /// + protected virtual void ApplyTime(float time) + { + float newValue = 0f; + if (Mode == Modes.Interpolate) + { + float startValue = RelativeValue ? CurveRemapZero + _initialValue : CurveRemapZero; + float endValue = RelativeValue ? CurveRemapOne + _initialValue : CurveRemapOne; + + newValue = MMTween.Tween(time, 0f, 1f, startValue, endValue, Curve); + } + else if (Mode == Modes.ToDestination) + { + newValue = MMTween.Tween(time, 0f, 1f, _initialValue, DestinationValue, Curve); + } + + SetValue(newValue); + } + + protected virtual void SetValue(float newValue) + { + + } + + protected virtual float GetInitialValue() + { + return 0f; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + SetValue(_initialValue); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitFloatBase.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitFloatBase.cs.meta new file mode 100644 index 0000000..1ff280b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitFloatBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 889e935e9689c09488cc64807a889d5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitVector2Base.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitVector2Base.cs new file mode 100644 index 0000000..69d83cc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitVector2Base.cs @@ -0,0 +1,263 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.UIElements; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// A base feedback to set a vector2 on a target UI Document + /// + [AddComponentMenu("")] + public class MMF_UIToolkitVector2Base : MMF_UIToolkit + { + /// a static bool used to disable all feedbacks of this type at once + public enum Modes { Instant, Interpolate, ToDestination } + + /// the duration of this feedback is the duration of the color transition, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasCustomInspectors => true; + + [MMFInspectorGroup("Value", true, 16)] + /// the selected color mode : + /// None : nothing will happen, + /// gradient : evaluates the color over time on that gradient, from left to right, + /// interpolate : lerps from the current color to the destination one + [Tooltip("the selected mode :" + + "Instant : the value will change instantly to the target one," + + "Curve : the value will be interpolated along the curve," + + "interpolate : lerps from the current value to the destination one ")] + public Modes Mode = Modes.Interpolate; + /// whether or not the value should be applied relatively to the initial value + [Tooltip("whether or not the value should be applied relatively to the initial value")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate, (int)Modes.Instant)] + public bool RelativeValues = false; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + /// how long the color of the text should change over time + [Tooltip("how long the color of the text should change over time")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate, (int)Modes.ToDestination)] + public float Duration = 0.2f; + + + /// the value to apply when in instant mode + [Tooltip("the value to apply when in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public Vector2 InstantValue = new Vector2(1f, 1f); + + [Header("X")] + /// whether or not to animate the x value + [Tooltip("whether or not to animate the x value")] + public bool AnimateX = true; + /// the curve to use when interpolating towards the destination value + [Tooltip("the curve to use when interpolating towards the destination value")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate, (int)Modes.ToDestination)] + public MMTweenType CurveX = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + /// the value to which the curve's 0 should be remapped + [Tooltip("the value to which the curve's 0 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate)] + public float CurveRemapZeroX = 0f; + /// the value to which the curve's 1 should be remapped + [Tooltip("the value to which the curve's 1 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate)] + public float CurveRemapOneX = 1f; + /// the value to aim towards when in ToDestination mode + [Tooltip("the value to aim towards when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float DestinationValueX = 1f; + + [Header("Y")] + /// whether or not to animate the y value + [Tooltip("whether or not to animate the y value")] + public bool AnimateY = true; + /// the curve to use when interpolating towards the destination value + [Tooltip("the curve to use when interpolating towards the destination value")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate, (int)Modes.ToDestination)] + public MMTweenType CurveY = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + /// the value to which the curve's 0 should be remapped + [Tooltip("the value to which the curve's 0 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate)] + public float CurveRemapZeroY = 0f; + /// the value to which the curve's 1 should be remapped + [Tooltip("the value to which the curve's 1 should be remapped")] + [MMFEnumCondition("Mode", (int)Modes.Interpolate)] + public float CurveRemapOneY = 1f; + /// the value to aim towards when in ToDestination mode + [Tooltip("the value to aim towards when in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float DestinationValueY = 1f; + + protected Vector2 _initialValue; + protected Coroutine _coroutine; + protected Vector2 _newValue; + + /// + /// On init we store our initial value + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if ((_visualElements == null) || (_visualElements.Count == 0)) + { + return; + } + _initialValue = GetInitialValue(); + } + + /// + /// On Play we change our text's alpha + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if ((_visualElements == null) || (_visualElements.Count == 0)) + { + return; + } + + if (RelativeValues) + { + _initialValue = GetInitialValue(); + } + + switch (Mode) + { + case Modes.Instant: + Vector2 newInstantValue = RelativeValues ? InstantValue + _initialValue : InstantValue; + SetValue(newInstantValue); + break; + case Modes.Interpolate: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeValue()); + break; + case Modes.ToDestination: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + _initialValue = GetInitialValue(); + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(ChangeValue()); + break; + } + } + + /// + /// Changes the color of the text over time + /// + /// + protected virtual IEnumerator ChangeValue() + { + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + IsPlaying = true; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + ApplyTime(remappedTime); + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + ApplyTime(FinalNormalizedTime); + _coroutine = null; + IsPlaying = false; + yield break; + } + + /// + /// Stops the animation if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (_coroutine != null) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + } + + /// + /// Applies the alpha change + /// + /// + protected virtual void ApplyTime(float time) + { + _newValue.x = _initialValue.x; + _newValue.y = _initialValue.y; + + if (Mode == Modes.Interpolate) + { + if (AnimateX) + { + float startValueX = RelativeValues ? CurveRemapZeroX + _initialValue.x : CurveRemapZeroX; + float endValueX = RelativeValues ? CurveRemapOneX + _initialValue.x : CurveRemapOneX; + _newValue.x = MMTween.Tween(time, 0f, 1f, startValueX, endValueX, CurveX); + } + + if (AnimateY) + { + float startValueY = RelativeValues ? CurveRemapZeroY + _initialValue.y : CurveRemapZeroY; + float endValueY = RelativeValues ? CurveRemapOneY + _initialValue.y : CurveRemapOneY; + _newValue.y = MMTween.Tween(time, 0f, 1f, startValueY, endValueY, CurveY); + } + } + else if (Mode == Modes.ToDestination) + { + if (AnimateX) + { + _newValue.x = MMTween.Tween(time, 0f, 1f, _initialValue.x, DestinationValueX, CurveX); + } + if (AnimateY) + { + _newValue.y = MMTween.Tween(time, 0f, 1f, _initialValue.y, DestinationValueY, CurveY); + } + } + + SetValue(_newValue); + } + + protected virtual void SetValue(Vector2 newValue) + { + + } + + protected virtual Vector2 GetInitialValue() + { + return Vector2.zero; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + SetValue(_initialValue); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitVector2Base.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitVector2Base.cs.meta new file mode 100644 index 0000000..d272ae9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Base/MMF_UIToolkitVector2Base.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ac2960c7e2121849bdf55de52559dd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks.meta new file mode 100644 index 0000000..f6125a3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89ff2eae561a5ac4392fc023b51034c5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBackgroundColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBackgroundColor.cs new file mode 100644 index 0000000..1662520 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBackgroundColor.cs @@ -0,0 +1,32 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using UnityEngine; +using UnityEngine.Scripting.APIUpdating; +using UnityEngine.UIElements; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the background color of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the background color of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Background Color")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitBackgroundColor : MMF_UIToolkitColorBase + { + protected override void ApplyColor(Color newColor) + { + foreach (VisualElement element in _visualElements) + { + element.style.backgroundColor = newColor; + HandleMarkDirty(element); + } + } + + protected override Color GetInitialColor() + { + return _visualElements[0].resolvedStyle.backgroundColor; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBackgroundColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBackgroundColor.cs.meta new file mode 100644 index 0000000..4276ab6 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBackgroundColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a191453c9f5a69348a9014eb1f7a35d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderColor.cs new file mode 100644 index 0000000..17fda44 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderColor.cs @@ -0,0 +1,78 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the border color of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the border color of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Border Color")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitBorderColor : MMF_UIToolkitColorBase + { + [MMFInspectorGroup("Borders", true, 55, true)] + /// whether or not the feedback should modify the color of the left border + [Tooltip("whether or not the feedback should modify the color of the left border")] + public bool BorderLeft = true; + /// whether or not the feedback should modify the color of the right border + [Tooltip("whether or not the feedback should modify the color of the right border")] + public bool BorderRight = true; + /// whether or not the feedback should modify the color of the bottom border + [Tooltip("whether or not the feedback should modify the color of the bottom border")] + public bool BorderBottom = true; + /// whether or not the feedback should modify the color of the top border + [Tooltip("whether or not the feedback should modify the color of the top border")] + public bool BorderTop = true; + + protected override void ApplyColor(Color newColor) + { + foreach (VisualElement element in _visualElements) + { + if (BorderLeft) + { + element.style.borderLeftColor = newColor; + } + if (BorderRight) + { + element.style.borderRightColor = newColor; + } + if (BorderBottom) + { + element.style.borderBottomColor = newColor; + } + if (BorderTop) + { + element.style.borderTopColor = newColor; + } + HandleMarkDirty(element); + } + } + + protected override Color GetInitialColor() + { + if (BorderLeft) + { + return _visualElements[0].resolvedStyle.borderLeftColor; + } + if (BorderRight) + { + return _visualElements[0].resolvedStyle.borderRightColor; + } + if (BorderBottom) + { + return _visualElements[0].resolvedStyle.borderBottomColor; + } + if (BorderTop) + { + return _visualElements[0].resolvedStyle.borderTopColor; + } + return Color.black; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderColor.cs.meta new file mode 100644 index 0000000..57eee01 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72c972a1271fae14a92c46848763b4c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderRadius.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderRadius.cs new file mode 100644 index 0000000..8e6cec0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderRadius.cs @@ -0,0 +1,53 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the border radius of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the border radius of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Border Radius")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitBorderRadius : MMF_UIToolkitFloatBase + { + /// whether to modify the bottom left border radius or not + [Tooltip("whether to modify the bottom left border radius or not")] + public bool BottomLeft = true; + /// whether to modify the bottom right border radius or not + [Tooltip("whether to modify the bottom right border radius or not")] + public bool BottomRight = true; + /// whether to modify the top left border radius or not + [Tooltip("whether to modify the top left border radius or not")] + public bool TopLeft = true; + /// whether to modify the top right border radius or not + [Tooltip("whether to modify the top right border radius or not")] + public bool TopRight = true; + + protected override void SetValue(float newValue) + { + foreach (VisualElement element in _visualElements) + { + if (BottomLeft) element.style.borderBottomLeftRadius = newValue; + if (BottomRight) element.style.borderBottomRightRadius = newValue; + if (TopLeft) element.style.borderTopLeftRadius = newValue; + if (TopRight) element.style.borderTopRightRadius = newValue; + HandleMarkDirty(element); + } + } + + protected override float GetInitialValue() + { + if (BottomLeft) return _visualElements[0].resolvedStyle.borderBottomLeftRadius; + if (BottomRight) return _visualElements[0].resolvedStyle.borderBottomRightRadius; + if (TopLeft) return _visualElements[0].resolvedStyle.borderTopLeftRadius; + if (TopRight) return _visualElements[0].resolvedStyle.borderTopRightRadius; + return _visualElements[0].resolvedStyle.borderBottomLeftRadius; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderRadius.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderRadius.cs.meta new file mode 100644 index 0000000..b38f5be --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderRadius.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ad38ecaccfcdc04d886cb21721bfa60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderWidth.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderWidth.cs new file mode 100644 index 0000000..02690a2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderWidth.cs @@ -0,0 +1,54 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.Serialization; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the border width of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the border width of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Border Width")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitBorderWidth : MMF_UIToolkitFloatBase + { + /// whether to modify the left border width or not + [Tooltip("whether to modify the left border width or not")] + public bool Left = true; + /// whether to modify the right border width or not + [Tooltip("whether to modify the right border width or not")] + public bool Right = true; + /// whether to modify the top border width or not + [Tooltip("whether to modify the top border width or not")] + public bool Top = true; + /// whether to modify the bottom border width or not + [Tooltip("whether to modify the bottom border width or not")] + public bool Bottom = true; + + protected override void SetValue(float newValue) + { + foreach (VisualElement element in _visualElements) + { + if (Left) element.style.borderLeftWidth = newValue; + if (Right) element.style.borderRightWidth = newValue; + if (Bottom) element.style.borderBottomWidth = newValue; + if (Top) element.style.borderTopWidth = newValue; + HandleMarkDirty(element); + } + } + + protected override float GetInitialValue() + { + if (Left) return _visualElements[0].resolvedStyle.borderLeftWidth; + if (Right) return _visualElements[0].resolvedStyle.borderRightWidth; + if (Bottom) return _visualElements[0].resolvedStyle.borderBottomWidth; + if (Top) return _visualElements[0].resolvedStyle.borderTopWidth; + return _visualElements[0].resolvedStyle.borderLeftWidth; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderWidth.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderWidth.cs.meta new file mode 100644 index 0000000..8e0dde4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitBorderWidth.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c771cf4cdbab1ff43a08d35743880364 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitClass.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitClass.cs new file mode 100644 index 0000000..15eb95b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitClass.cs @@ -0,0 +1,61 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the class of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the class of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Class")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitClass : MMF_UIToolkit + { + public enum Modes { AddToClassList, EnableInClassList, ToggleInClassList, RemoveFromClassList, ClearClassList} + + [Header("Class Manipulation")] + /// whether to add, enable, toggle, remove or clear the class list + [Tooltip("whether to add, enable, toggle, remove or clear the class list")] + public Modes Mode = Modes.AddToClassList; + /// the name of the class to add, enable, toggle or remove + [Tooltip("the name of the class to add, enable, toggle or remove")] + [MMFEnumCondition("Mode", (int)Modes.AddToClassList, (int)Modes.EnableInClassList, (int)Modes.ToggleInClassList, (int)Modes.RemoveFromClassList)] + public string ClassName = ""; + /// in EnableInClassList mode, whether to enable or disable the class + [Tooltip("in EnableInClassList mode, whether to enable or disable the class")] + [MMFEnumCondition("Mode", (int)Modes.EnableInClassList)] + public bool Enable = true; + + + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1) + { + foreach (VisualElement element in _visualElements) + { + switch (Mode) + { + case Modes.AddToClassList: + element.AddToClassList(ClassName); + break; + case Modes.EnableInClassList: + element.EnableInClassList(ClassName, Enable); + break; + case Modes.ToggleInClassList: + element.ToggleInClassList(ClassName); + break; + case Modes.RemoveFromClassList: + element.RemoveFromClassList(ClassName); + break; + case Modes.ClearClassList: + element.ClearClassList(); + break; + } + HandleMarkDirty(element); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitClass.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitClass.cs.meta new file mode 100644 index 0000000..b5c10ff --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitClass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f494035fcb1bd449ba11daf0b0280f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitFontSize.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitFontSize.cs new file mode 100644 index 0000000..8ef5e27 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitFontSize.cs @@ -0,0 +1,34 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the font size of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the font size of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Font Size")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitFontSize : MMF_UIToolkitFloatBase + { + protected override void SetValue(float newValue) + { + foreach (VisualElement element in _visualElements) + { + int newSize = Mathf.FloorToInt(newValue); + element.style.fontSize = newSize; + HandleMarkDirty(element); + } + } + + protected override float GetInitialValue() + { + return _visualElements[0].resolvedStyle.fontSize; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitFontSize.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitFontSize.cs.meta new file mode 100644 index 0000000..b52195f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitFontSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 755aedfb494d0004cacdb9dddcb170b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitImageTint.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitImageTint.cs new file mode 100644 index 0000000..4155ffc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitImageTint.cs @@ -0,0 +1,32 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the image tint of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the image tint of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Image Tint")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitImageTint : MMF_UIToolkitColorBase + { + protected override void ApplyColor(Color newColor) + { + foreach (VisualElement element in _visualElements) + { + element.style.unityBackgroundImageTintColor = newColor; + HandleMarkDirty(element); + } + } + + protected override Color GetInitialColor() + { + return _visualElements[0].resolvedStyle.unityBackgroundImageTintColor; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitImageTint.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitImageTint.cs.meta new file mode 100644 index 0000000..d6437b7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitImageTint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c32b4600f4e8964ea69bf0c126763e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitOpacity.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitOpacity.cs new file mode 100644 index 0000000..b3560a0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitOpacity.cs @@ -0,0 +1,32 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the opacity of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the opacity of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Opacity")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitOpacity : MMF_UIToolkitFloatBase + { + protected override void SetValue(float newValue) + { + foreach (VisualElement element in _visualElements) + { + element.style.opacity = newValue; + HandleMarkDirty(element); + } + } + + protected override float GetInitialValue() + { + return _visualElements[0].resolvedStyle.opacity; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitOpacity.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitOpacity.cs.meta new file mode 100644 index 0000000..369e075 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitOpacity.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 10a07c80400c0ab45a2f60fcda5d5013 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitRotate.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitRotate.cs new file mode 100644 index 0000000..84b8b2d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitRotate.cs @@ -0,0 +1,35 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you rotate an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you rotate an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Rotate")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitRotate : MMF_UIToolkitFloatBase + { + protected StyleRotate _styleRotate; + + protected override void SetValue(float newValue) + { + foreach (VisualElement element in _visualElements) + { + _styleRotate = new Rotate(newValue); + element.style.rotate = _styleRotate; + HandleMarkDirty(element); + } + } + + protected override float GetInitialValue() + { + return _visualElements[0].resolvedStyle.rotate.angle.value; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitRotate.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitRotate.cs.meta new file mode 100644 index 0000000..5ed8dcd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitRotate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e1c231ece781884ba12b20110efeb03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitScale.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitScale.cs new file mode 100644 index 0000000..44e34c8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitScale.cs @@ -0,0 +1,33 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you scale an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you scale an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Scale")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitScale : MMF_UIToolkitVector2Base + { + protected override void SetValue(Vector2 newValue) + { + foreach (VisualElement element in _visualElements) + { + element.style.scale = new StyleScale(new Scale(newValue)); + HandleMarkDirty(element); + } + } + + protected override Vector2 GetInitialValue() + { + return _visualElements[0].resolvedStyle.scale.value; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitScale.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitScale.cs.meta new file mode 100644 index 0000000..246b96b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitScale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff1bc0ee84c11704b9fdeae5c51f6a76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitSize.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitSize.cs new file mode 100644 index 0000000..16b1809 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitSize.cs @@ -0,0 +1,34 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the size an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the size an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Size")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitSize : MMF_UIToolkitVector2Base + { + protected override void SetValue(Vector2 newValue) + { + foreach (VisualElement element in _visualElements) + { + element.style.width = newValue.x; + element.style.height = newValue.y; + HandleMarkDirty(element); + } + } + + protected override Vector2 GetInitialValue() + { + return new Vector2(_visualElements[0].resolvedStyle.width, _visualElements[0].resolvedStyle.height); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitSize.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitSize.cs.meta new file mode 100644 index 0000000..f27f548 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b08364980f6e884695f3959f374f6ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitStylesheet.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitStylesheet.cs new file mode 100644 index 0000000..476a4be --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitStylesheet.cs @@ -0,0 +1,33 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the stylesheet on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the stylesheet on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Stylesheet")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitStylesheet : MMF_UIToolkit + { + [Header("Stylesheet")] + /// the new stylesheet to apply to the document + [Tooltip("the new stylesheet to apply to the document")] + public StyleSheet NewStylesheet; + + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1) + { + foreach (VisualElement element in _visualElements) + { + element.styleSheets.Add(NewStylesheet); + HandleMarkDirty(element); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitStylesheet.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitStylesheet.cs.meta new file mode 100644 index 0000000..2f3fa56 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitStylesheet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0585acb66fc8f9d40a59342095941c09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitText.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitText.cs new file mode 100644 index 0000000..ab351b7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitText.cs @@ -0,0 +1,67 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the text an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the text an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Text")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitText : MMF_UIToolkit + { + [Header("Text")] + /// the new text to set on the target object(s) + [Tooltip("the new text to set on the target object(s)")] + public string NewText = ""; + + protected string _initialText; + + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1) + { + SetValue(NewText); + } + + protected virtual void SetValue(string newValue) + { + foreach (VisualElement element in _visualElements) + { + (element as TextElement).text = newValue; + HandleMarkDirty(element); + } + } + + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + if ((_visualElements == null) || (_visualElements.Count == 0)) + { + return; + } + _initialText = GetInitialValue(); + } + + protected virtual string GetInitialValue() + { + return (_visualElements[0] as TextElement).text; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + SetValue(_initialText); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitText.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitText.cs.meta new file mode 100644 index 0000000..96b11a1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1beb22790c538de4180c96ef7cbd68a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTextColor.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTextColor.cs new file mode 100644 index 0000000..cab819f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTextColor.cs @@ -0,0 +1,32 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the text color an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the text color an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Text Color")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitTextColor : MMF_UIToolkitColorBase + { + protected override void ApplyColor(Color newColor) + { + foreach (VisualElement element in _visualElements) + { + element.style.color = newColor; + HandleMarkDirty(element); + } + } + + protected override Color GetInitialColor() + { + return _visualElements[0].resolvedStyle.color; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTextColor.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTextColor.cs.meta new file mode 100644 index 0000000..6495dcc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTextColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 413dbb3ab27b9eb40a8bc94473c0565c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTransformOrigin.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTransformOrigin.cs new file mode 100644 index 0000000..806c55d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTransformOrigin.cs @@ -0,0 +1,41 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you change the transform origin an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you change the transform origin an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Transform Origin")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitTransformOrigin : MMF_UIToolkitVector2Base + { + [Header("Units")] + /// how to interpret the x value + [Tooltip("how to interpret the x value")] + public LengthUnit LengthUnitX = LengthUnit.Pixel; + /// how to interpret the y value + [Tooltip("how to interpret the y value")] + public LengthUnit LengthUnitY = LengthUnit.Pixel; + + protected override void SetValue(Vector2 newValue) + { + foreach (VisualElement element in _visualElements) + { + element.style.transformOrigin = new StyleTransformOrigin(new TransformOrigin(new Length(newValue.x, LengthUnitX), new Length(newValue.y, LengthUnitY))); + HandleMarkDirty(element); + } + } + + protected override Vector2 GetInitialValue() + { + return _visualElements[0].resolvedStyle.transformOrigin; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTransformOrigin.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTransformOrigin.cs.meta new file mode 100644 index 0000000..6bc486d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTransformOrigin.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20a16824553d34440a2d4a0aef9f6305 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTranslate.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTranslate.cs new file mode 100644 index 0000000..9217cd4 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTranslate.cs @@ -0,0 +1,41 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you translate an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you translate an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Translate")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitTranslate : MMF_UIToolkitVector2Base + { + [Header("Units")] + /// how to interpret the x value + [Tooltip("how to interpret the x value")] + public LengthUnit LengthUnitX = LengthUnit.Pixel; + /// how to interpret the y value + [Tooltip("how to interpret the y value")] + public LengthUnit LengthUnitY = LengthUnit.Pixel; + + protected override void SetValue(Vector2 newValue) + { + foreach (VisualElement element in _visualElements) + { + element.style.translate = new StyleTranslate(new Translate(new Length(newValue.x, LengthUnitX), new Length(newValue.y, LengthUnitY))); + HandleMarkDirty(element); + } + } + + protected override Vector2 GetInitialValue() + { + return _visualElements[0].resolvedStyle.translate; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTranslate.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTranslate.cs.meta new file mode 100644 index 0000000..a57d75d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitTranslate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e932172a6c02a94c9cc24b921edb17e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitVisible.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitVisible.cs new file mode 100644 index 0000000..ce36e15 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitVisible.cs @@ -0,0 +1,61 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +using UnityEngine.UIElements; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you set the visibility of an element on a target UI Document + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you set the visibility of an element on a target UI Document")] + [FeedbackPath("UI Toolkit/UITK Visible")] + [MovedFrom(false, null, "MoreMountains.Feedbacks.UIToolkit")] + public class MMF_UIToolkitVisible : MMF_UIToolkitBoolBase + { + public enum Modes { Set, Toggle } + + [Header("Visible")] + /// the selected mode (set : sets the object visible or not, toggle : toggles the object's visibility) + [Tooltip("the selected mode (set : sets the object visible or not, toggle : toggles the object's visibility)")] + public Modes Mode = Modes.Set; + /// whether to set the object visible (true) or not + [Tooltip("whether to set the object visible (true) or not")] + [MMFEnumCondition("Mode", (int)Modes.Set)] + public bool Visible = false; + + protected override void SetValue() + { + foreach (VisualElement element in _visualElements) + { + switch (Mode) + { + case Modes.Set: + element.visible = Visible; + break; + case Modes.Toggle: + element.visible = !element.visible; + break; + } + HandleMarkDirty(element); + } + } + + protected override void SetValue(bool newValue) + { + foreach (VisualElement element in _visualElements) + { + element.visible = newValue; + HandleMarkDirty(element); + } + } + + protected override bool GetInitialValue() + { + return _visualElements[0].visible; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitVisible.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitVisible.cs.meta new file mode 100644 index 0000000..222b2c9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/Feedbacks/MMF_UIToolkitVisible.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ec5758e2d9e3f14abd3e218d26005d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/MoreMountains.Feedbacks.UIToolkit.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/MoreMountains.Feedbacks.UIToolkit.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/MoreMountains.Feedbacks.UIToolkit.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/MoreMountains.Feedbacks.UIToolkit.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/MoreMountains.Feedbacks.UIToolkit.asmref.meta new file mode 100644 index 0000000..b5fc70e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/UIToolkit/MoreMountains.Feedbacks.UIToolkit.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6acf6d4477d762d4d9d58016b9ff1c1d +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP.meta new file mode 100644 index 0000000..d87a46d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5943b7d06b7eb224c950a9c3bd271a8a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks.meta new file mode 100644 index 0000000..e3a043c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5a12cd7956445649a4fff949522c747 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Bloom_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Bloom_URP.cs new file mode 100644 index 0000000..6634f80 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Bloom_URP.cs @@ -0,0 +1,132 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control bloom intensity and threshold over time. It requires you have in your scene an object with a Volume with Bloom active, and a MMBloomShaker_URP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control bloom intensity and threshold over time. It requires you have in your scene an object with a Volume " + + "with Bloom active, and a MMBloomShaker_URP component.")] + #if MM_URP + [FeedbackPath("PostProcess/Bloom URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + public class MMF_Bloom_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Bloom", true, 41)] + /// the duration of the feedback, in seconds + [Tooltip("the duration of the feedback, in seconds")] + public float ShakeDuration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeValues = true; + + [MMFInspectorGroup("Intensity", true, 42)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapIntensityOne = 1f; + + [MMFInspectorGroup("Threshold", true, 43)] + /// the curve to animate the threshold on + [Tooltip("the curve to animate the threshold on")] + public AnimationCurve ShakeThreshold = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapThresholdZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapThresholdOne = 0f; + + /// + /// Triggers a bloom shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float attenuation = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + attenuation = ComputeIntensity(attenuation, position); + + MMBloomShakeEvent_URP.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, attenuation, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMBloomShakeEvent_URP.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, + ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, channelData:ChannelData, stop: true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMBloomShakeEvent_URP.Trigger(ShakeIntensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, + ShakeThreshold, RemapThresholdZero, RemapThresholdOne, + RelativeValues, channelData:ChannelData, restore: true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "Bloom"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Bloom_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Bloom_URP.cs.meta new file mode 100644 index 0000000..ad919ea --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Bloom_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2745b12389b632b4793a46c0329b78a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChannelMixer_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChannelMixer_URP.cs new file mode 100644 index 0000000..2451336 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChannelMixer_URP.cs @@ -0,0 +1,156 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control bloom intensity and threshold over time. It requires you have in your scene an object with a Volume with Bloom active, and a MMBloomShaker_URP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control bloom intensity and threshold over time. It requires you have in your scene an object with a Volume " + + "with Bloom active, and a MMBloomShaker_URP component.")] + #if MM_URP + [FeedbackPath("PostProcess/Channel Mixer URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + public class MMF_ChannelMixer_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Channel Mixer", true, 41)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 1f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Red", true, 42)] + /// the curve used to animate the red value on + [Tooltip("the curve used to animate the red value on")] + public AnimationCurve ShakeRed = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapRedZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapRedOne = -200f; + + [MMFInspectorGroup("Green", true, 43)] + /// the curve used to animate the green value on + [Tooltip("the curve used to animate the green value on")] + public AnimationCurve ShakeGreen = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapGreenZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapGreenOne = 200f; + + [MMFInspectorGroup("Blue", true, 44)] + /// the curve used to animate the blue value on + [Tooltip("the curve used to animate the blue value on")] + public AnimationCurve ShakeBlue = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapBlueZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapBlueOne = 200f; + + /// + /// Triggers a color adjustments shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMChannelMixerShakeEvent_URP.Trigger(ShakeRed, RemapRedZero, RemapRedOne, + ShakeGreen, RemapGreenZero, RemapGreenOne, + ShakeBlue, RemapBlueZero, RemapBlueOne, + FeedbackDuration, + RelativeIntensity, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMChannelMixerShakeEvent_URP.Trigger(ShakeRed, RemapRedZero, RemapRedOne, + ShakeGreen, RemapGreenZero, RemapGreenOne, + ShakeBlue, RemapBlueZero, RemapBlueOne, + FeedbackDuration, + RelativeIntensity, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMChannelMixerShakeEvent_URP.Trigger(ShakeRed, RemapRedZero, RemapRedOne, + ShakeGreen, RemapGreenZero, RemapGreenOne, + ShakeBlue, RemapBlueZero, RemapBlueOne, + FeedbackDuration, + RelativeIntensity, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "Channel Mixer"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChannelMixer_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChannelMixer_URP.cs.meta new file mode 100644 index 0000000..331fe35 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChannelMixer_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91ee58105ec38c84b905bd3f290dd6b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChromaticAberration_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChromaticAberration_URP.cs new file mode 100644 index 0000000..03d45c3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChromaticAberration_URP.cs @@ -0,0 +1,124 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control chromatic aberration intensity over time. It requires you have in your scene an object with a Volume + /// with URP Chromatic Aberration active, and a MMChromaticAberrationShaker_URP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control chromatic aberration intensity over time. It requires you have in your scene an object with a Volume " + + "with Chromatic Aberration active, and a MMChromaticAberrationShaker_URP component.")] + #if MM_URP + [FeedbackPath("PostProcess/Chromatic Aberration URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + public class MMF_ChromaticAberration_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Chromatic Aberration", true, 42)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + [MMFInspectorGroup("Intensity", true, 43)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the multiplier to apply to the intensity curve + [Tooltip("the multiplier to apply to the intensity curve")] + [Range(0f, 1f)] + public float Amplitude = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + /// + /// Triggers a chromatic aberration shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMChromaticAberrationShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMChromaticAberrationShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, channelData:ChannelData, stop:true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMChromaticAberrationShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, channelData:ChannelData, restore:true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "Chromatic Aberration"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChromaticAberration_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChromaticAberration_URP.cs.meta new file mode 100644 index 0000000..e3395d7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ChromaticAberration_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5d6c0f2232e3b149b9e1b618c6f9592 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ColorAdjustments_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ColorAdjustments_URP.cs new file mode 100644 index 0000000..4418a9a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ColorAdjustments_URP.cs @@ -0,0 +1,201 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control color adjustments' post exposure, hue shift, saturation and contrast over time. + /// It requires you have in your scene an object with a Volume + /// with Color Adjustments active, and a MMColorAdjustmentsShaker_URP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control color adjustments' post exposure, hue shift, saturation and contrast over time. " + + "It requires you have in your scene an object with a Volume " + + "with Color Adjustments active, and a MMColorAdjustmentsShaker_URP component.")] + #if MM_URP + [FeedbackPath("PostProcess/Color Adjustments URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + public class MMF_ColorAdjustments_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Color Grading", true, 43)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 1f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Post Exposure", true, 48)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakePostExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapPostExposureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapPostExposureOne = 1f; + + [MMFInspectorGroup("Hue Shift", true, 47)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeHueShift = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-180f, 180f)] + public float RemapHueShiftZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-180f, 180f)] + public float RemapHueShiftOne = 180f; + + [MMFInspectorGroup("Saturation", true, 46)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeSaturation = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapSaturationZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapSaturationOne = 100f; + + [MMFInspectorGroup("Contrast", true, 45)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeContrast = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapContrastZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapContrastOne = 100f; + + [MMFInspectorGroup("Color Filter", true, 44)] + /// the selected color filter mode : + /// None : nothing will happen, + /// gradient : evaluates the color over time on that gradient, from left to right, + /// interpolate : lerps from the current color to the destination one + [Tooltip("the selected color filter mode :" + + "None : nothing will happen," + + "gradient : evaluates the color over time on that gradient, from left to right," + + "interpolate : lerps from the current color to the destination one ")] + public MMColorAdjustmentsShaker_URP.ColorFilterModes ColorFilterMode = MMColorAdjustmentsShaker_URP.ColorFilterModes.None; + /// the gradient to use to animate the color filter over time + [Tooltip("the gradient to use to animate the color filter over time")] + [MMFEnumCondition("ColorFilterMode", (int)MMColorAdjustmentsShaker_URP.ColorFilterModes.Gradient)] + [GradientUsage(true)] + public Gradient ColorFilterGradient; + /// the destination color when in interpolate mode + [Tooltip("the destination color when in interpolate mode")] + [MMFEnumCondition("ColorFilterMode", (int) MMColorAdjustmentsShaker_URP.ColorFilterModes.Interpolate)] + public Color ColorFilterDestination = Color.yellow; + /// the curve to use when interpolating towards the destination color + [Tooltip("the curve to use when interpolating towards the destination color")] + [MMFEnumCondition("ColorFilterMode", (int) MMColorAdjustmentsShaker_URP.ColorFilterModes.Interpolate)] + public AnimationCurve ColorFilterCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + /// + /// Triggers a color adjustments shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMColorAdjustmentsShakeEvent_URP.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ColorFilterMode, ColorFilterGradient, ColorFilterDestination, ColorFilterCurve, + FeedbackDuration, + RelativeIntensity, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMColorAdjustmentsShakeEvent_URP.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ColorFilterMode, ColorFilterGradient, ColorFilterDestination, ColorFilterCurve, + FeedbackDuration, + RelativeIntensity, channelData: ChannelData, stop: true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMColorAdjustmentsShakeEvent_URP.Trigger(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, + ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, + ShakeSaturation, RemapSaturationZero, RemapSaturationOne, + ShakeContrast, RemapContrastZero, RemapContrastOne, + ColorFilterMode, ColorFilterGradient, ColorFilterDestination, ColorFilterCurve, + FeedbackDuration, + RelativeIntensity, channelData: ChannelData, restore: true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "ColorAdjustments"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ColorAdjustments_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ColorAdjustments_URP.cs.meta new file mode 100644 index 0000000..463330e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_ColorAdjustments_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d72ca77766228434bac267331d9890d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_DepthOfField_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_DepthOfField_URP.cs new file mode 100644 index 0000000..333382f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_DepthOfField_URP.cs @@ -0,0 +1,154 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control URP depth of field focus distance, aperture and focal length over time. + /// It requires you have in your scene an object with a Volume + /// with Depth of Field active, and a MMDepthOfFieldShaker_URP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control URP depth of field focus distance, aperture and focal length over time. " + + "It requires you have in your scene an object with a Volume " + + "with Depth of Field active, and a MMDepthOfFieldShaker_URP component.")] + #if MM_URP + [FeedbackPath("PostProcess/Depth Of Field URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + public class MMF_DepthOfField_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Depth Of Field", true, 49)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 2f; + /// whether or not to add to the initial values + [Tooltip("whether or not to add to the initial values")] + public bool RelativeValues = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Focus Distance", true, 50)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakeFocusDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFocusDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFocusDistanceOne = 3f; + + [MMFInspectorGroup("Aperture", true, 51)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeAperture = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0.1f, 32f)] + public float RemapApertureZero = .1f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0.1f, 32f)] + public float RemapApertureOne = 32f; + + [MMFInspectorGroup("Focal Length", true, 20)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeFocalLength = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 300f)] + public float RemapFocalLengthZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 300f)] + public float RemapFocalLengthOne = 0f; + + /// + /// Triggers a depth of field event + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMDepthOfFieldShakeEvent_URP.Trigger(ShakeFocusDistance, FeedbackDuration, RemapFocusDistanceZero, RemapFocusDistanceOne, + ShakeAperture, RemapApertureZero, RemapApertureOne, + ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, + RelativeValues, intensityMultiplier, ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMDepthOfFieldShakeEvent_URP.Trigger(ShakeFocusDistance, FeedbackDuration, RemapFocusDistanceZero, RemapFocusDistanceOne, + ShakeAperture, RemapApertureZero, RemapApertureOne, + ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, + RelativeValues, channelData: ChannelData, stop: true ); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMDepthOfFieldShakeEvent_URP.Trigger(ShakeFocusDistance, FeedbackDuration, RemapFocusDistanceZero, RemapFocusDistanceOne, + ShakeAperture, RemapApertureZero, RemapApertureOne, + ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, + RelativeValues, channelData: ChannelData, restore: true ); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "DepthOfField"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_DepthOfField_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_DepthOfField_URP.cs.meta new file mode 100644 index 0000000..1c176f0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_DepthOfField_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 951e153e1b6cbb442865fac50d3ea0db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_FilmGrain_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_FilmGrain_URP.cs new file mode 100644 index 0000000..3b559d9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_FilmGrain_URP.cs @@ -0,0 +1,123 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control URP Film Grain intensity over time. + /// It requires you have in your scene an object with a Volume + /// with Film Grain active, and a MMFilmGrainShaker_URP component. + /// + [AddComponentMenu("")] + #if MM_URP + [FeedbackPath("PostProcess/Film Grain URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + [FeedbackHelp("This feedback allows you to control Film Grain intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with Film Grain active, and a MMFilmGrainShaker_URP component.")] + public class MMF_FilmGrain_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Film Grain", true, 21)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 22)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's zero to + [Tooltip("the value to remap the curve's zero to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's one to + [Tooltip("the value to remap the curve's one to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + /// + /// Triggers a Film Grain shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMFilmGrainShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + MMFilmGrainShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, stop:true, channelData: ChannelData); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMFilmGrainShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, restore:true, channelData: ChannelData); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "FilmGrain"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_FilmGrain_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_FilmGrain_URP.cs.meta new file mode 100644 index 0000000..3456b0f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_FilmGrain_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78ba34f29f369984099f450eb0a6777c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_GlobalPPVolumeAutoBlend_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_GlobalPPVolumeAutoBlend_URP.cs new file mode 100644 index 0000000..a4d75fe --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_GlobalPPVolumeAutoBlend_URP.cs @@ -0,0 +1,165 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you pilot a Global PostProcessing Volume AutoBlend URP component. A GPPVAB component is placed on a PostProcessing Volume, and will let you control and blend its weight over time on demand. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you pilot a Global PostProcessing Volume AutoBlend URP component. A GPPVAB component is placed on a PostProcessing Volume, and will let you control and blend its weight over time on demand.")] + #if MM_URP + [FeedbackPath("PostProcess/Global PP Volume Auto Blend URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + public class MMF_GlobalPPVolumeAutoBlend_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// the possible modes for this feedback : + /// - default : will let you trigger Blend() and BlendBack() on the blender + /// - override : lets you specify new initial, final, duration and curve values on the blender, and triggers a Blend() + public enum Modes { Default, Override } + /// the possible actions when in Default mode + public enum Actions { Blend, BlendBack } + + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool EvaluateRequiresSetup() { return (TargetAutoBlend == null); } + public override string RequiredTargetText { get { return TargetAutoBlend != null ? TargetAutoBlend.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a TargetCanvasGroup be set to be able to work properly. You can set one below."; } } + #endif + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => TargetAutoBlend = FindAutomatedTarget(); + + /// defines the duration of the feedback + public override float FeedbackDuration + { + get + { + if (Mode == Modes.Override) + { + return ApplyTimeMultiplier(BlendDuration); + } + else + { + if (TargetAutoBlend == null) + { + return 0.1f; + } + else + { + return ApplyTimeMultiplier(TargetAutoBlend.BlendDuration); + } + } + } + set + { + BlendDuration = value; + if (TargetAutoBlend != null) + { + TargetAutoBlend.BlendDuration = value; + } + } + } + + [MMFInspectorGroup("PostProcess Volume Blend", true, 22, true)] + /// the target auto blend to pilot with this feedback + public MMGlobalPostProcessingVolumeAutoBlend_URP TargetAutoBlend; + /// the chosen mode + public Modes Mode = Modes.Default; + /// the chosen action when in default mode + [MMFEnumCondition("Mode", (int)Modes.Default)] + public Actions BlendAction = Actions.Blend; + /// the duration of the blend, in seconds when in override mode + [MMFEnumCondition("Mode", (int)Modes.Override)] + public float BlendDuration = 1f; + /// the curve to apply to the blend + [MMFEnumCondition("Mode", (int)Modes.Override)] + public AnimationCurve BlendCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1f)); + /// the weight to blend from + [MMFEnumCondition("Mode", (int)Modes.Override)] + public float InitialWeight = 0f; + /// the weight to blend to + [MMFEnumCondition("Mode", (int)Modes.Override)] + public float FinalWeight = 1f; + + /// + /// On custom play, triggers a blend on the target blender, overriding its settings if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (TargetAutoBlend == null) + { + Debug.LogWarning(Owner.name + " : this MMFeedbackGlobalPPVolumeAutoBlend needs a TargetAutoBlend, please set one in its inspector."); + return; + } + if (Mode == Modes.Default) + { + if (BlendAction == Actions.Blend) + { + TargetAutoBlend.Blend(); + return; + } + if (BlendAction == Actions.BlendBack) + { + TargetAutoBlend.BlendBack(); + return; + } + } + else + { + TargetAutoBlend.TimeScale = (ComputedTimescaleMode == TimescaleModes.Scaled) ? MMGlobalPostProcessingVolumeAutoBlend_URP.TimeScales.Scaled : MMGlobalPostProcessingVolumeAutoBlend_URP.TimeScales.Unscaled; + TargetAutoBlend.BlendDuration = FeedbackDuration; + TargetAutoBlend.Curve = BlendCurve; + TargetAutoBlend.InitialWeight = InitialWeight; + TargetAutoBlend.FinalWeight = FinalWeight; + TargetAutoBlend.Blend(); + } + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + + if (TargetAutoBlend != null) + { + TargetAutoBlend.StopBlending(); + } + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + TargetAutoBlend.RestoreInitialValues(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_GlobalPPVolumeAutoBlend_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_GlobalPPVolumeAutoBlend_URP.cs.meta new file mode 100644 index 0000000..72ad33d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_GlobalPPVolumeAutoBlend_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47f1225adf998da428534e361e152700 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_LensDistortion_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_LensDistortion_URP.cs new file mode 100644 index 0000000..8bc3f7b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_LensDistortion_URP.cs @@ -0,0 +1,131 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control URP lens distortion intensity over time. + /// It requires you have in your scene an object with a Volume + /// with Lens Distortion active, and a MMLensDistortionShaker_URP component. + /// + [AddComponentMenu("")] + #if MM_URP + [FeedbackPath("PostProcess/Lens Distortion URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + [FeedbackHelp("This feedback allows you to control URP lens distortion intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with Lens Distortion active, and a MMLensDistortionShaker_URP component.")] + public class MMF_LensDistortion_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Lens Distortion", true, 22)] + /// the duration of the shake in seconds + [Tooltip("the duration of the shake in seconds")] + public float Duration = 0.8f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 23)] + /// whether or not to add to the initial intensity value + [Tooltip("whether or not to add to the initial intensity value")] + public bool RelativeIntensity = false; + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), + new Keyframe(0.2f, 1), + new Keyframe(0.25f, -1), + new Keyframe(0.35f, 0.7f), + new Keyframe(0.4f, -0.7f), + new Keyframe(0.6f, 0.3f), + new Keyframe(0.65f, -0.3f), + new Keyframe(0.8f, 0.1f), + new Keyframe(0.85f, -0.1f), + new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-1f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-1f, 1f)] + public float RemapIntensityOne = 0.5f; + + /// + /// Triggers a lens distortion shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMLensDistortionShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMLensDistortionShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, stop:true, channelData: ChannelData); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMLensDistortionShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, restore:true, channelData: ChannelData); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "LensDistortion"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_LensDistortion_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_LensDistortion_URP.cs.meta new file mode 100644 index 0000000..33e9b15 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_LensDistortion_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43306c87c2558ad4c960d73c419e65aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Light2D_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Light2D_URP.cs new file mode 100644 index 0000000..b75231d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Light2D_URP.cs @@ -0,0 +1,450 @@ +using System.Collections; +using MoreMountains.Feedbacks; +using UnityEngine; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + #if MM_URP + /// + /// This feedback will let you control a 2D light's intensity, color, falloff, shadow strength and volumetric intensity over time, or instantly. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you control a 2D light's intensity, color, falloff, shadow strength and volumetric intensity over time, or instantly.")] + [MovedFrom(false, null, "MoreMountains.Feedbacks")] + [FeedbackPath("Lights/Light2D_URP")] + public class MMF_Light2D_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.LightColor; } } + public override bool EvaluateRequiresSetup() { return (BoundLight == null); } + public override string RequiredTargetText { get { return BoundLight != null ? BoundLight.name : ""; } } + public override string RequiresSetupText { get { return "This feedback requires that a BoundLight be set to be able to work properly. You can set one below."; } } + #endif + + /// the duration of this feedback is the duration of the light, or 0 if instant + public override float FeedbackDuration { get { return (Mode == Modes.Instant) ? 0f : ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + public override bool HasAutomatedTargetAcquisition => true; + protected override void AutomateTargetAcquisition() => BoundLight = FindAutomatedTarget(); + + /// the possible modes for this feedback + public enum Modes { OverTime, Instant, ShakerEvent, ToDestination } + + [MMFInspectorGroup("Light", true, 37, true)] + /// the light to affect when playing the feedback + [Tooltip("the light to affect when playing the feedback")] + public Light2D BoundLight; + /// whether the feedback should affect the light instantly or over a period of time + [Tooltip("whether the feedback should affect the light instantly or over a period of time")] + public Modes Mode = Modes.OverTime; + /// how long the light should change over time + [Tooltip("how long the light should change over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public float Duration = 0.2f; + /// whether or not that light should be turned off on start + [Tooltip("whether or not that light should be turned off on start")] + public bool StartsOff = true; + /// if this is true, the light will be disabled when this feedbacks is stopped + [Tooltip("if this is true, the light will be disabled when this feedbacks is stopped")] + public bool DisableOnStop = false; + /// whether or not the values should be relative or not + [Tooltip("whether or not the values should be relative or not")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.Instant)] + public bool RelativeValues = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool ResetTargetValuesAfterShake = true; + /// whether or not to broadcast a range to only affect certain shakers + [Tooltip("whether or not to broadcast a range to only affect certain shakers")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public bool OnlyBroadcastInRange = false; + /// the range of the event, in units + [Tooltip("the range of the event, in units")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public float EventRange = 100f; + /// the transform to use to broadcast the event as origin point + [Tooltip("the transform to use to broadcast the event as origin point")] + [MMFEnumCondition("Mode", (int)Modes.ShakerEvent)] + public Transform EventOriginTransform; + /// if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over + [Tooltip("if this is true, calling that feedback will trigger it, even if it's in progress. If it's false, it'll prevent any new Play until the current one is over")] + public bool AllowAdditivePlays = false; + + [MMFInspectorGroup("Color", true, 38, true)] + /// whether or not to modify the color of the light + [Tooltip("whether or not to modify the color of the light")] + public bool ModifyColor = true; + /// the colors to apply to the light over time + [Tooltip("the colors to apply to the light over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public Gradient ColorOverTime; + /// the color to move to in instant mode + [Tooltip("the color to move to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant, (int)Modes.ShakerEvent)] + public Color InstantColor = Color.red; + /// the color to move to in destination mode + [Tooltip("the color to move to in destination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public Color ToDestinationColor = Color.red; + + [MMFInspectorGroup("Intensity", true, 39, true)] + /// whether or not to modify the intensity of the light + [Tooltip("whether or not to modify the intensity of the light")] + public bool ModifyIntensity = true; + /// the curve to tween the intensity on + [Tooltip("the curve to tween the intensity on")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public AnimationCurve IntensityCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the intensity curve's 0 to + [Tooltip("the value to remap the intensity curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapIntensityZero = 0f; + /// the value to remap the intensity curve's 1 to + [Tooltip("the value to remap the intensity curve's 1 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapIntensityOne = 1f; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantIntensity = 1f; + /// the value to move the intensity to in ToDestination mode + [Tooltip("the value to move the intensity to in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationIntensity = 1f; + + [MMFInspectorGroup("Falloff", true, 40, true)] + /// whether or not to modify the falloff of the light + [Tooltip("whether or not to modify the falloff of the light")] + public bool ModifyFalloff = true; + /// the falloff to apply to the light over time + [Tooltip("the falloff to apply to the light over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public AnimationCurve FalloffCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the falloff curve's 0 to + [Tooltip("the value to remap the falloff curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapFalloffZero = 0f; + /// the value to remap the falloff curve's 0 to + [Tooltip("the value to remap the falloff curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapFalloffOne = 10f; + /// the value to move the intensity to in instant mode + [Tooltip("the value to move the intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantFalloff = 10f; + /// the value to move the intensity to in ToDestination mode + [Tooltip("the value to move the intensity to in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationFalloff = 10f; + + [MMFInspectorGroup("Shadow Strength", true, 41, true)] + /// whether or not to modify the shadow strength of the light + [Tooltip("whether or not to modify the shadow strength of the light")] + public bool ModifyShadowStrength = true; + /// the shadow strength to apply to the light over time + [Tooltip("the shadow strength to apply to the light over time")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public AnimationCurve ShadowStrengthCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the shadow strength's curve's 0 to + [Tooltip("the value to remap the shadow strength's curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapShadowStrengthZero = 0f; + /// the value to remap the shadow strength's curve's 1 to + [Tooltip("the value to remap the shadow strength's curve's 1 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapShadowStrengthOne = 1f; + /// the value to move the shadow strength to in instant mode + [Tooltip("the value to move the shadow strength to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantShadowStrength = 1f; + /// the value to move the shadow strength to in ToDestination mode + [Tooltip("the value to move the shadow strength to in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationShadowStrength = 1f; + + [MMFInspectorGroup("Volumetric Intensity", true, 39, true)] + /// whether or not to modify the volumetric intensity of the light + [Tooltip("whether or not to modify the volumetric intensity of the light")] + public bool ModifyVolumetricIntensity = true; + /// the curve to tween the volumetric intensity on + [Tooltip("the curve to tween the volumetric intensity on")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent, (int)Modes.ToDestination)] + public AnimationCurve VolumetricIntensityCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the volumetric intensity curve's 0 to + [Tooltip("the value to remap the volumetric intensity curve's 0 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapVolumetricIntensityZero = 0f; + /// the value to remap the volumetric intensity curve's 1 to + [Tooltip("the value to remap the volumetric intensity curve's 1 to")] + [MMFEnumCondition("Mode", (int)Modes.OverTime, (int)Modes.ShakerEvent)] + public float RemapVolumetricIntensityOne = 1f; + /// the value to move the volumetric intensity to in instant mode + [Tooltip("the value to move the volumetric intensity to in instant mode")] + [MMFEnumCondition("Mode", (int)Modes.Instant)] + public float InstantVolumetricIntensity = 1f; + /// the value to move the volumetric intensity to in ToDestination mode + [Tooltip("the value to move the volumetric intensity to in ToDestination mode")] + [MMFEnumCondition("Mode", (int)Modes.ToDestination)] + public float ToDestinationVolumetricIntensity = 1f; + + protected float _initialFalloff; + protected float _initialShadowStrength; + protected float _initialIntensity; + protected float _initialVolumetricIntensity; + protected Coroutine _coroutine; + protected Color _initialColor; + protected Color _targetColor; + + /// + /// On init we turn the light off if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (BoundLight == null) + { + return; + } + + _initialFalloff = BoundLight.shapeLightFalloffSize ; + _initialShadowStrength = BoundLight.shadowIntensity; + _initialIntensity = BoundLight.intensity; + _initialVolumetricIntensity = BoundLight.volumeIntensity; + _initialColor = BoundLight.color; + + if (EventOriginTransform == null) + { + EventOriginTransform = owner.transform; + } + + if (Active) + { + if (StartsOff) + { + Turn(false); + } + } + } + + /// + /// On Play we turn our light on and start an over time coroutine if needed + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + if (Mode == Modes.ToDestination) + { + _initialFalloff = BoundLight.shapeLightFalloffSize ; + _initialShadowStrength = BoundLight.shadowIntensity; + _initialIntensity = BoundLight.intensity; + _initialIntensity = BoundLight.volumeIntensity; + _initialColor = BoundLight.color; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + Turn(true); + switch (Mode) + { + case Modes.Instant: + BoundLight.intensity = InstantIntensity * intensityMultiplier; + BoundLight.intensity = InstantVolumetricIntensity * intensityMultiplier; + BoundLight.shadowIntensity = InstantShadowStrength; + BoundLight.shapeLightFalloffSize = InstantFalloff; + if (ModifyColor) + { + BoundLight.color = InstantColor; + } + break; + case Modes.OverTime: + case Modes.ToDestination: + if (!AllowAdditivePlays && (_coroutine != null)) + { + return; + } + if (_coroutine != null) { Owner.StopCoroutine(_coroutine); } + _coroutine = Owner.StartCoroutine(LightSequence(intensityMultiplier)); + break; + case Modes.ShakerEvent: + if (EventOriginTransform == null) + { + EventOriginTransform = Owner.transform; + } + MMLight2DShakeEvent.Trigger(FeedbackDuration, RelativeValues, ModifyColor, ColorOverTime, IntensityCurve, + RemapIntensityZero, RemapIntensityOne, FalloffCurve, RemapFalloffZero * intensityMultiplier, RemapFalloffOne * intensityMultiplier, + ShadowStrengthCurve, RemapShadowStrengthZero, RemapShadowStrengthOne, feedbacksIntensity, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, + OnlyBroadcastInRange, EventRange, EventOriginTransform.position); + break; + } + } + + /// + /// This coroutine will modify the intensity and color of the light over time + /// + /// + protected virtual IEnumerator LightSequence(float intensityMultiplier) + { + IsPlaying = true; + float journey = NormalPlayDirection ? 0f : FeedbackDuration; + while ((journey >= 0) && (journey <= FeedbackDuration) && (FeedbackDuration > 0)) + { + float remappedTime = MMFeedbacksHelpers.Remap(journey, 0f, FeedbackDuration, 0f, 1f); + + SetLightValues(remappedTime, intensityMultiplier); + + journey += NormalPlayDirection ? FeedbackDeltaTime : -FeedbackDeltaTime; + yield return null; + } + SetLightValues(FinalNormalizedTime, intensityMultiplier); + if (DisableOnStop) + { + Turn(false); + } + IsPlaying = false; + _coroutine = null; + yield return null; + } + + + /// + /// Sets the various values on the light on a specified time (between 0 and 1) + /// + /// + protected virtual void SetLightValues(float time, float intensityMultiplier) + { + float intensity = 0f; + float volumeIntensity = 0f; + float falloff = 0f; + float shadowStrength = 0f; + + switch (Mode) + { + case Modes.OverTime: + intensity = MMFeedbacksHelpers.Remap(IntensityCurve.Evaluate(time), 0f, 1f, RemapIntensityZero, RemapIntensityOne); + volumeIntensity = MMFeedbacksHelpers.Remap(VolumetricIntensityCurve.Evaluate(time), 0f, 1f, RemapVolumetricIntensityZero, RemapVolumetricIntensityOne); + falloff = MMFeedbacksHelpers.Remap(FalloffCurve.Evaluate(time), 0f, 1f, RemapFalloffZero, RemapFalloffOne); + shadowStrength = MMFeedbacksHelpers.Remap(ShadowStrengthCurve.Evaluate(time), 0f, 1f, RemapShadowStrengthZero, RemapShadowStrengthOne); + _targetColor = ColorOverTime.Evaluate(time); + break; + case Modes.ToDestination: + intensity = Mathf.Lerp(_initialIntensity, ToDestinationIntensity, IntensityCurve.Evaluate(time)); + volumeIntensity = Mathf.Lerp(_initialVolumetricIntensity, ToDestinationVolumetricIntensity, VolumetricIntensityCurve.Evaluate(time)); + falloff = Mathf.Lerp(_initialFalloff, ToDestinationFalloff, FalloffCurve.Evaluate(time)); + shadowStrength = Mathf.Lerp(_initialShadowStrength, ToDestinationShadowStrength, ShadowStrengthCurve.Evaluate(time)); + _targetColor = Color.Lerp(_initialColor, ToDestinationColor, time); + break; + } + + if (RelativeValues && (Mode != Modes.ToDestination)) + { + intensity += _initialIntensity; + volumeIntensity += _initialVolumetricIntensity; + shadowStrength += _initialShadowStrength; + falloff += _initialFalloff; + } + + if (ModifyIntensity) + { + BoundLight.intensity = intensity * intensityMultiplier; + } + if (ModifyVolumetricIntensity) + { + BoundLight.volumeIntensity = volumeIntensity * intensityMultiplier; + } + if (ModifyFalloff) + { + BoundLight.shapeLightFalloffSize = falloff; + } + if (ModifyShadowStrength) + { + BoundLight.shadowIntensity = Mathf.Clamp01(shadowStrength); + } + if (ModifyColor) + { + BoundLight.color = _targetColor; + } + } + + /// + /// Turns the light off on stop + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!FeedbackTypeAuthorized) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + IsPlaying = false; + if (Active && (_coroutine != null)) + { + Owner.StopCoroutine(_coroutine); + _coroutine = null; + } + if (Active && DisableOnStop) + { + Turn(false); + } + } + + /// + /// Turns the light on or off + /// + /// + protected virtual void Turn(bool status) + { + if (BoundLight == null) + { + return; + } + BoundLight.enabled = status; + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + BoundLight.shapeLightFalloffSize = _initialFalloff; + BoundLight.shadowIntensity = _initialShadowStrength; + BoundLight.intensity = _initialIntensity; + BoundLight.volumeIntensity = _initialVolumetricIntensity; + BoundLight.color = _initialColor; + + if (StartsOff) + { + Turn(false); + } + } + } + #endif +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Light2D_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Light2D_URP.cs.meta new file mode 100644 index 0000000..91e7e4f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Light2D_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1bb65b535952c9c4188009b61f3a31ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_MotionBlur_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_MotionBlur_URP.cs new file mode 100644 index 0000000..ae88541 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_MotionBlur_URP.cs @@ -0,0 +1,122 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control URP motion blur intensity over time. + /// It requires you have in your scene an object with a Volume + /// with MotionBlur active, and a MMMotionBlurShaker_URP component. + /// + [AddComponentMenu("")] + #if MM_URP + [FeedbackPath("PostProcess/Motion Blur URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + [FeedbackHelp("This feedback allows you to control motion blur intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with MotionBlur active, and a MMMotionBlurShaker_URP component.")] + public class MMF_MotionBlur_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Motion Blur", true, 25)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 24)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to which to remap the curve's zero to + [Tooltip("the value to which to remap the curve's zero to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to which to remap the curve's one to + [Tooltip("the value to which to remap the curve's one to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + /// + /// Triggers a motion blur shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMMotionBlurShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMMotionBlurShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, stop: true, channelData: ChannelData); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMMotionBlurShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, restore: true, channelData: ChannelData); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "MotionBlur"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_MotionBlur_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_MotionBlur_URP.cs.meta new file mode 100644 index 0000000..7319093 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_MotionBlur_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51cd42785d86b984f857efaa3a7e0f28 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_PaniniProjection_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_PaniniProjection_URP.cs new file mode 100644 index 0000000..298ee1c --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_PaniniProjection_URP.cs @@ -0,0 +1,121 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control Panini Projection distance and crop to fit over time. + /// It requires you have in your scene an object with a Volume with Bloom active, and a MMPaniniProjectionShaker_URP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control Panini Projection distance and crop to fit over time. " + + "It requires you have in your scene an object with a Volume " + + "with PaniniProjection active, and a MMPaniniProjectionShaker_URP component.")] + #if MM_URP + [FeedbackPath("PostProcess/Panini Projection URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + public class MMF_PaniniProjection_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Panini Projection", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Distance", true, 27)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeDistance = false; + /// the curve used to animate the distance value on + [Tooltip("the curve used to animate the distance value on")] + public AnimationCurve ShakeDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapDistanceOne = 1f; + + /// + /// Triggers a bloom shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMPaniniProjectionShakeEvent_URP.Trigger(ShakeDistance, FeedbackDuration, RemapDistanceZero, RemapDistanceOne, RelativeDistance, intensityMultiplier, ChannelData, + ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + MMPaniniProjectionShakeEvent_URP.Trigger(ShakeDistance, FeedbackDuration, RemapDistanceZero, RemapDistanceOne, RelativeDistance, channelData: ChannelData, stop: true); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMPaniniProjectionShakeEvent_URP.Trigger(ShakeDistance, FeedbackDuration, RemapDistanceZero, RemapDistanceOne, RelativeDistance, channelData: ChannelData, restore: true); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "PaniniProjection"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_PaniniProjection_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_PaniniProjection_URP.cs.meta new file mode 100644 index 0000000..746f00b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_PaniniProjection_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd752e51b75d9404f8567b2de4478a17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Vignette_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Vignette_URP.cs new file mode 100644 index 0000000..cffa5f1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Vignette_URP.cs @@ -0,0 +1,143 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control URP vignette intensity over time. + /// It requires you have in your scene an object with a Volume + /// with Vignette active, and a MMVignetteShaker_URP component. + /// + [AddComponentMenu("")] + #if MM_URP + [FeedbackPath("PostProcess/Vignette URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + [FeedbackHelp("This feedback allows you to control vignette intensity over time. " + + "It requires you have in your scene an object with a Volume " + + "with Vignette active, and a MMVignetteShaker_URP component.")] + public class MMF_Vignette_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(Duration); } set { Duration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Vignette", true, 28)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float Duration = 0.2f; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Intensity", true, 29)] + /// the curve to animate the intensity on + [Tooltip("the curve to animate the intensity on")] + public AnimationCurve Intensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's zero to + [Tooltip("the value to remap the curve's zero to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's one to + [Tooltip("the value to remap the curve's one to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1.0f; + /// whether or not to add to the initial intensity + [Tooltip("whether or not to add to the initial intensity")] + public bool RelativeIntensity = false; + + [Header("Color")] + /// whether or not to also animate the vignette's color + [Tooltip("whether or not to also animate the vignette's color")] + public bool InterpolateColor = false; + /// the curve to animate the color on + [Tooltip("the curve to animate the color on")] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.05f, 1f), new Keyframe(0.95f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0, 1)] + public float RemapColorZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapColorOne = 1f; + /// the color to lerp towards + [Tooltip("the color to lerp towards")] + public Color TargetColor = Color.red; + + /// + /// Triggers a vignette shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMVignetteShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode, false, false, InterpolateColor, + ColorCurve, RemapColorZero, RemapColorOne, TargetColor); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + base.CustomStopFeedback(position, feedbacksIntensity); + + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + MMVignetteShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, stop: true, channelData: ChannelData); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMVignetteShakeEvent_URP.Trigger(Intensity, FeedbackDuration, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, restore: true, channelData: ChannelData); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "Vignette"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Vignette_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Vignette_URP.cs.meta new file mode 100644 index 0000000..81926ac --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_Vignette_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4184b673db0e27469895c376f79e78c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_WhiteBalance_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_WhiteBalance_URP.cs new file mode 100644 index 0000000..45f9fc1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_WhiteBalance_URP.cs @@ -0,0 +1,139 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Scripting.APIUpdating; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback allows you to control white balance temperature and tint over time. + /// It requires you have in your scene an object with a Volume with White Balance active, and a MMWhiteBalanceShaker_URP component. + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback allows you to control white balance temperature and tint over time. " + + "It requires you have in your scene an object with a Volume " + + "with WhiteBalance active, and a MMWhiteBalanceShaker_URP component.")] + #if MM_URP + [FeedbackPath("PostProcess/White Balance URP")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.URP")] + public class MMF_WhiteBalance_URP : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.PostProcessColor; } } + public override bool HasCustomInspectors => true; + public override bool HasAutomaticShakerSetup => true; + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(ShakeDuration); } set { ShakeDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("White Balance", true, 29)] + /// the duration of the shake, in seconds + [Tooltip("the duration of the shake, in seconds")] + public float ShakeDuration = 1f; + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeValues = true; + /// whether or not to reset shaker values after shake + [Tooltip("whether or not to reset shaker values after shake")] + public bool ResetShakerValuesAfterShake = true; + /// whether or not to reset the target's values after shake + [Tooltip("whether or not to reset the target's values after shake")] + public bool ResetTargetValuesAfterShake = true; + + [MMFInspectorGroup("Temperature", true, 29)] + /// the curve used to animate the temperature value on + [Tooltip("the curve used to animate the temperature value on")] + public AnimationCurve ShakeTemperature = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapTemperatureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapTemperatureOne = 100f; + + [MMFInspectorGroup("Tint", true, 29)] + /// the curve used to animate the tint value on + [Tooltip("the curve used to animate the tint value on")] + public AnimationCurve ShakeTint = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapTintZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapTintOne = 100f; + + /// + /// Triggers a white balance shake + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float feedbacksIntensity = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + float intensityMultiplier = ComputeIntensity(feedbacksIntensity, position); + MMWhiteBalanceShakeEvent_URP.Trigger(ShakeTemperature, FeedbackDuration, RemapTemperatureZero, RemapTemperatureOne, + ShakeTint, RemapTintZero, RemapTintOne, RelativeValues, intensityMultiplier, + ChannelData, ResetShakerValuesAfterShake, ResetTargetValuesAfterShake, NormalPlayDirection, ComputedTimescaleMode); + + } + + /// + /// On stop we stop our transition + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + base.CustomStopFeedback(position, feedbacksIntensity); + + MMWhiteBalanceShakeEvent_URP.Trigger(ShakeTemperature, FeedbackDuration, RemapTemperatureZero, RemapTemperatureOne, + ShakeTint, RemapTintZero, RemapTintOne, RelativeValues, stop: true, channelData: ChannelData); + } + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + MMWhiteBalanceShakeEvent_URP.Trigger(ShakeTemperature, FeedbackDuration, RemapTemperatureZero, RemapTemperatureOne, + ShakeTint, RemapTintZero, RemapTintOne, RelativeValues, restore: true, channelData: ChannelData); + } + + /// + /// Automaticall sets up the post processing profile and shaker + /// + public override void AutomaticShakerSetup() + { + #if MM_URP && UNITY_EDITOR + MMURPHelpers.GetOrCreateVolume(Owner, "WhiteBalance"); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_WhiteBalance_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_WhiteBalance_URP.cs.meta new file mode 100644 index 0000000..5518dcc --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Feedbacks/MMF_WhiteBalance_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ea237bea7ee0284eb3c367668540cdc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers.meta new file mode 100644 index 0000000..7c008b7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce78b4097230f9d40ab184d4a00c27aa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMGlobalPostProcessingVolumeAutoBlend_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMGlobalPostProcessingVolumeAutoBlend_URP.cs new file mode 100644 index 0000000..ef9619d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMGlobalPostProcessingVolumeAutoBlend_URP.cs @@ -0,0 +1,195 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Use this class to have a global PP volume auto blend its weight on cue, between a start and end values + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMGlobalPostProcessingVolumeAutoBlend_URP")] + public class MMGlobalPostProcessingVolumeAutoBlend_URP : MonoBehaviour + { + /// the possible timescales this blend can operate on + public enum TimeScales { Scaled, Unscaled } + /// the possible blend trigger modes + public enum BlendTriggerModes { OnEnable, Script } + + [Header("Blend")] + /// the trigger mode for this MMGlobalPostProcessingVolumeAutoBlend + /// Start : will play automatically on enable + public BlendTriggerModes BlendTriggerMode = BlendTriggerModes.OnEnable; + /// the duration of the blend (in seconds) + public float BlendDuration = 1f; + /// the curve to use to blend + public AnimationCurve Curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1f)); + + [Header("Weight")] + /// the weight at the start of the blend + [Range(0f, 1f)] + public float InitialWeight = 0f; + /// the desired weight at the end of the blend + [Range(0f, 1f)] + public float FinalWeight = 1f; + + [Header("Behaviour")] + /// the timescale to operate on + public TimeScales TimeScale = TimeScales.Unscaled; + /// whether or not the associated volume should be disabled at 0 + public bool DisableVolumeOnZeroWeight = true; + /// whether or not this blender should disable itself at 0 + public bool DisableSelfAfterEnd = true; + /// whether or not this blender can be interrupted + public bool Interruptable = true; + /// whether or not this blender should pick the current value as its starting point + public bool StartFromCurrentValue = true; + + [Header("Tests")] + /// test blend button + [MMFInspectorButton("Blend")] + public bool TestBlend; + /// test blend back button + [MMFInspectorButton("BlendBack")] + public bool TestBlendBackwards; + + /// + /// Returns the correct timescale based on the chosen settings + /// + /// + protected float GetTime() + { + return (TimeScale == TimeScales.Unscaled) ? Time.unscaledTime : Time.time; + } + + protected float _initial; + protected float _destination; + protected float _startTime; + protected bool _blending = false; + #if MM_URP + protected Volume _volume; + + /// + /// On Awake we store our volume + /// + protected virtual void Awake() + { + _volume = this.gameObject.GetComponent(); + _volume.weight = InitialWeight; + } + #endif + + /// + /// On start we start blending if needed + /// + protected virtual void OnEnable() + { + if ((BlendTriggerMode == BlendTriggerModes.OnEnable) && !_blending) + { + Blend(); + } + } + + /// + /// Blends the volume's weight from the initial value to the final one + /// + public virtual void Blend() + { + #if MM_URP + if (_blending && !Interruptable) + { + return; + } + _initial = StartFromCurrentValue ? _volume.weight : InitialWeight; + _destination = FinalWeight; + StartBlending(); + #endif + } + + /// + /// Blends the volume's weight from the final value to the initial one + /// + public virtual void BlendBack() + { + #if MM_URP + if (_blending && !Interruptable) + { + return; + } + _initial = StartFromCurrentValue ? _volume.weight : FinalWeight; + _destination = InitialWeight; + StartBlending(); + #endif + } + + /// + /// Internal method used to start blending + /// + protected virtual void StartBlending() + { + #if MM_URP + _startTime = GetTime(); + _blending = true; + this.enabled = true; + if (DisableVolumeOnZeroWeight) + { + _volume.enabled = true; + } + #endif + } + + /// + /// Stops any blending that may be in progress + /// + public virtual void StopBlending() + { + _blending = false; + } + + /// + /// On update, processes the blend if needed + /// + protected virtual void Update() + { + if (!_blending) + { + return; + } + + #if MM_URP + float timeElapsed = (GetTime() - _startTime); + if (timeElapsed < BlendDuration) + { + float remapped = MMFeedbacksHelpers.Remap(timeElapsed, 0f, BlendDuration, 0f, 1f); + _volume.weight = Mathf.LerpUnclamped(_initial, _destination, Curve.Evaluate(remapped)); + } + else + { + // after end is reached + _volume.weight = _destination; + _blending = false; + if (DisableVolumeOnZeroWeight && (_volume.weight == 0f)) + { + _volume.enabled = false; + } + if (DisableSelfAfterEnd) + { + this.enabled = false; + } + } + #endif + } + + public virtual void RestoreInitialValues() + { + #if MM_URP + _volume.weight = _initial; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMGlobalPostProcessingVolumeAutoBlend_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMGlobalPostProcessingVolumeAutoBlend_URP.cs.meta new file mode 100644 index 0000000..6f93990 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMGlobalPostProcessingVolumeAutoBlend_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 863e22bb4bee3884e8c0e9d1823db321 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMURPHelpers.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMURPHelpers.cs new file mode 100644 index 0000000..f0a1ec0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMURPHelpers.cs @@ -0,0 +1,64 @@ +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine; +#if MM_URP +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +#endif +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + public class MMURPHelpers : MonoBehaviour + { + #if UNITY_EDITOR && MM_URP + public static void GetOrCreateVolume(MMF_Player owner, string feedbackName) where T:VolumeComponent where U:MMShaker + { + string additions = owner.name + " "+feedbackName+" feedback automatic shaker setup : "; + + if (Application.isPlaying) + { + Debug.LogWarning("Automatic shaker setup is only available outside of play mode."); + return; + } + + // looks for the main camera + UniversalAdditionalCameraData cameraData = Camera.main.GetUniversalAdditionalCameraData(); + cameraData.renderPostProcessing = true; + additions += "Set PostProcessing:true on the "+Camera.main.name+" camera. "; + + // looks for a Volume + Volume volume = (Volume)Object.FindObjectOfType(typeof(Volume)); + if (volume == null) + { + GameObject postProcessingObject = GameObject.Instantiate(Resources.Load("MMDefaultURPVolume")); + volume = postProcessingObject.GetComponent(); + additions += "Added a Volume to the scene. "; + } + + // looks for a setting on the volume + T effect; + if (!volume.sharedProfile.TryGet(out effect)) + { + effect = volume.sharedProfile.Add(); + AssetDatabase.AddObjectToAsset(effect, volume.sharedProfile); + EditorUtility.SetDirty(volume.sharedProfile); + AssetDatabase.SaveAssets(); + additions += "Added a "+feedbackName+" post process effect to the "+volume.gameObject.name+" Volume. "; + } + + // looks for a matching shaker + U shaker = volume.GetComponent(); + if (shaker == null) + { + shaker = volume.gameObject.AddComponent(); + additions += "Added a "+feedbackName+" Shaker to the "+volume.gameObject.name+" Post Process Volume. "; + } + + MMDebug.DebugLogInfo( additions + "You're all set."); + } + #endif + } +} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMURPHelpers.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMURPHelpers.cs.meta new file mode 100644 index 0000000..a19e163 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Helpers/MMURPHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e0304051f9f8464c9fe5ca7e5103140 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/MoreMountains.Feedbacks.URP.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/MoreMountains.Feedbacks.URP.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/MoreMountains.Feedbacks.URP.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/MoreMountains.Feedbacks.URP.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/MoreMountains.Feedbacks.URP.asmref.meta new file mode 100644 index 0000000..8aedebd --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/MoreMountains.Feedbacks.URP.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4d249ce4961d8fc48b6cb4dc6b165261 +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources.meta new file mode 100644 index 0000000..6a84e0d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 470ffde11be3baf4e986ef76e291490f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPProfile.asset b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPProfile.asset new file mode 100644 index 0000000..00ee159 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPProfile.asset @@ -0,0 +1,347 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8933951220825085215 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81180773991d8724ab7f2d216912b564, type: 3} + m_Name: ChromaticAberration + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &-8836045386534409196 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb60a22f311433c4c962b888d1393f88, type: 3} + m_Name: PaniniProjection + m_EditorClassIdentifier: + active: 1 + distance: + m_OverrideState: 0 + m_Value: 0 + cropToFit: + m_OverrideState: 0 + m_Value: 1 +--- !u!114 &-8579874560378656748 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccf1aba9553839d41ae37dd52e9ebcce, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 0 + m_Value: 0 + quality: + m_OverrideState: 0 + m_Value: 0 + intensity: + m_OverrideState: 0 + m_Value: 0 + clamp: + m_OverrideState: 0 + m_Value: 0.05 +--- !u!114 &-7675463635007233747 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + skipIterations: + m_OverrideState: 0 + m_Value: 1 + threshold: + m_OverrideState: 0 + m_Value: 0.9 + intensity: + m_OverrideState: 0 + m_Value: 0 + scatter: + m_OverrideState: 0 + m_Value: 0.7 + clamp: + m_OverrideState: 0 + m_Value: 65472 + tint: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + highQualityFiltering: + m_OverrideState: 0 + m_Value: 0 + downscale: + m_OverrideState: 0 + m_Value: 0 + maxIterations: + m_OverrideState: 0 + m_Value: 6 + dirtTexture: + m_OverrideState: 0 + m_Value: {fileID: 0} + dimension: 1 + dirtIntensity: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &-6671754296521664740 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 221518ef91623a7438a71fef23660601, type: 3} + m_Name: WhiteBalance + m_EditorClassIdentifier: + active: 1 + temperature: + m_OverrideState: 0 + m_Value: 0 + tint: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &-4481560927439474264 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66f335fb1ffd8684294ad653bf1c7564, type: 3} + m_Name: ColorAdjustments + m_EditorClassIdentifier: + active: 1 + postExposure: + m_OverrideState: 0 + m_Value: 0 + contrast: + m_OverrideState: 0 + m_Value: 0 + colorFilter: + m_OverrideState: 0 + m_Value: {r: 1, g: 1, b: 1, a: 1} + hueShift: + m_OverrideState: 0 + m_Value: 0 + saturation: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &-2517722764101782983 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdfbdbb87d3286943a057f7791b43141, type: 3} + m_Name: ChannelMixer + m_EditorClassIdentifier: + active: 1 + redOutRedIn: + m_OverrideState: 0 + m_Value: 100 + redOutGreenIn: + m_OverrideState: 0 + m_Value: 0 + redOutBlueIn: + m_OverrideState: 0 + m_Value: 0 + greenOutRedIn: + m_OverrideState: 0 + m_Value: 0 + greenOutGreenIn: + m_OverrideState: 0 + m_Value: 100 + greenOutBlueIn: + m_OverrideState: 0 + m_Value: 0 + blueOutRedIn: + m_OverrideState: 0 + m_Value: 0 + blueOutGreenIn: + m_OverrideState: 0 + m_Value: 0 + blueOutBlueIn: + m_OverrideState: 0 + m_Value: 100 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: MMDefaultURPProfile + m_EditorClassIdentifier: + components: + - {fileID: -7675463635007233747} + - {fileID: -2517722764101782983} + - {fileID: -8933951220825085215} + - {fileID: -4481560927439474264} + - {fileID: 217984836807129381} + - {fileID: 6645323203276824829} + - {fileID: 6924170477083331223} + - {fileID: -8579874560378656748} + - {fileID: -8836045386534409196} + - {fileID: 6306196269677473977} + - {fileID: -6671754296521664740} +--- !u!114 &217984836807129381 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c01700fd266d6914ababb731e09af2eb, type: 3} + m_Name: DepthOfField + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 0 + m_Value: 0 + gaussianStart: + m_OverrideState: 0 + m_Value: 10 + gaussianEnd: + m_OverrideState: 0 + m_Value: 30 + gaussianMaxRadius: + m_OverrideState: 0 + m_Value: 1 + highQualitySampling: + m_OverrideState: 0 + m_Value: 0 + focusDistance: + m_OverrideState: 0 + m_Value: 10 + aperture: + m_OverrideState: 0 + m_Value: 5.6 + focalLength: + m_OverrideState: 0 + m_Value: 50 + bladeCount: + m_OverrideState: 0 + m_Value: 5 + bladeCurvature: + m_OverrideState: 0 + m_Value: 1 + bladeRotation: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &6306196269677473977 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + color: + m_OverrideState: 0 + m_Value: {r: 0, g: 0, b: 0, a: 1} + center: + m_OverrideState: 0 + m_Value: {x: 0.5, y: 0.5} + intensity: + m_OverrideState: 0 + m_Value: 0 + smoothness: + m_OverrideState: 0 + m_Value: 0.2 + rounded: + m_OverrideState: 0 + m_Value: 0 +--- !u!114 &6645323203276824829 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 29fa0085f50d5e54f8144f766051a691, type: 3} + m_Name: FilmGrain + m_EditorClassIdentifier: + active: 1 + type: + m_OverrideState: 0 + m_Value: 0 + intensity: + m_OverrideState: 0 + m_Value: 0 + response: + m_OverrideState: 0 + m_Value: 0.8 + texture: + m_OverrideState: 0 + m_Value: {fileID: 0} +--- !u!114 &6924170477083331223 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c5e1dc532bcb41949b58bc4f2abfbb7e, type: 3} + m_Name: LensDistortion + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 0 + m_Value: 0 + xMultiplier: + m_OverrideState: 0 + m_Value: 1 + yMultiplier: + m_OverrideState: 0 + m_Value: 1 + center: + m_OverrideState: 0 + m_Value: {x: 0.5, y: 0.5} + scale: + m_OverrideState: 0 + m_Value: 1 diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPProfile.asset.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPProfile.asset.meta new file mode 100644 index 0000000..b5dee5d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 57d94797548149846b6fb7aec61488f2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPVolume.prefab b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPVolume.prefab new file mode 100644 index 0000000..02fd0ec --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPVolume.prefab @@ -0,0 +1,51 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4801003995234742267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6807295894926285510} + - component: {fileID: 312252722905117236} + m_Layer: 0 + m_Name: MMDefaultURPVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6807295894926285510 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4801003995234742267} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.16053773, y: 0.068112195, z: 0.110220835} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &312252722905117236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4801003995234742267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: 57d94797548149846b6fb7aec61488f2, type: 2} diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPVolume.prefab.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPVolume.prefab.meta new file mode 100644 index 0000000..792e101 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Resources/MMDefaultURPVolume.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f41da011e26b4194cbae36ef66842b50 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers.meta new file mode 100644 index 0000000..799f44f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0554a55c58ecf44192e8e881ceac4cb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMAutoFocus_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMAutoFocus_URP.cs new file mode 100644 index 0000000..8ec915a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMAutoFocus_URP.cs @@ -0,0 +1,64 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This class will set the URP depth of field to focus on the set of targets specified in its inspector. + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMAutoFocus_URP")] + public class MMAutoFocus_URP : MonoBehaviour + { + [Header("Bindings")] + /// the position of the camera + [Tooltip("the position of the camera")] + public Transform CameraTransform; + /// a list of all possible targets + [Tooltip("a list of all possible targets")] + public Transform[] FocusTargets; + [Header("Setup")] + /// the current target of this auto focus + [Tooltip("the current target of this auto focus")] + public float FocusTargetID; + [Header("Desired Aperture")] + /// the aperture to work with + [Tooltip("the aperture to work with")] + [Range(0.1f, 20f)] + public float Aperture = 0.1f; + + #if MM_URP + protected Volume _volume; + protected VolumeProfile _profile; + protected DepthOfField _depthOfField; + + /// + /// On Start, stores volume, profile and DoF + /// + void Start() + { + _volume = GetComponent(); + _profile = _volume.profile; + _profile.TryGet(out _depthOfField); + } + + /// + /// On update we set our focus distance and aperture + /// + void Update() + { + float distance = Vector3.Distance(CameraTransform.position, FocusTargets[Mathf.FloorToInt(FocusTargetID)].position); + _depthOfField.focusDistance.Override(distance); + _depthOfField.aperture.Override(Aperture); + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMAutoFocus_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMAutoFocus_URP.cs.meta new file mode 100644 index 0000000..8685a52 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMAutoFocus_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97e17950a649fa84189ca3446539280b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMBloomShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMBloomShaker_URP.cs new file mode 100644 index 0000000..1983b46 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMBloomShaker_URP.cs @@ -0,0 +1,222 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP bloom post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMBloomShaker_URP")] + public class MMBloomShaker_URP : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Bloom Intensity", true, 51)] + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapIntensityOne = 1f; + + [MMInspectorGroup("Bloom Threshold", true, 52)] + /// the curve used to animate the threshold value on + [Tooltip("the curve used to animate the threshold value on")] + public AnimationCurve ShakeThreshold = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapThresholdZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapThresholdOne = 0f; + + #if MM_URP + protected Volume _volume; + protected Bloom _bloom; + protected float _initialIntensity; + protected float _initialThreshold; + protected float _originalShakeDuration; + protected bool _originalRelativeIntensity; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected AnimationCurve _originalShakeThreshold; + protected float _originalRemapThresholdZero; + protected float _originalRemapThresholdOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _bloom); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newIntensity = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeValues, _initialIntensity); + _bloom.intensity.Override(newIntensity); + float newThreshold = ShakeFloat(ShakeThreshold, RemapThresholdZero, RemapThresholdOne, RelativeValues, _initialThreshold); + _bloom.threshold.Override(newThreshold); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _bloom.intensity.value; + _initialThreshold = _bloom.threshold.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnBloomShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeValues; + _originalShakeThreshold = ShakeThreshold; + _originalRemapThresholdZero = RemapThresholdZero; + _originalRemapThresholdOne = RemapThresholdOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeValues = relativeIntensity; + ShakeThreshold = threshold; + RemapThresholdZero = remapThresholdMin; + RemapThresholdOne = remapThresholdMax; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _bloom.intensity.Override(_initialIntensity); + _bloom.threshold.Override(_initialThreshold); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeValues = _originalRelativeIntensity; + ShakeThreshold = _originalShakeThreshold; + RemapThresholdZero = _originalRemapThresholdZero; + RemapThresholdOne = _originalRemapThresholdOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMBloomShakeEvent_URP.Register(OnBloomShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMBloomShakeEvent_URP.Unregister(OnBloomShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMBloomShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, + AnimationCurve threshold, float remapThresholdMin, float remapThresholdMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, threshold, remapThresholdMin, remapThresholdMax, relativeIntensity, + attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMBloomShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMBloomShaker_URP.cs.meta new file mode 100644 index 0000000..f1c6d40 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMBloomShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 485e02e02c638cf4b9ca8344fd6213a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChannelMixerShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChannelMixerShaker_URP.cs new file mode 100644 index 0000000..f7e0931 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChannelMixerShaker_URP.cs @@ -0,0 +1,279 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP color adjustments post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMChannelMixerShaker_URP")] + public class MMChannelMixerShaker_URP : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Red", true, 43)] + /// the curve used to animate the red value on + [Tooltip("the curve used to animate the red value on")] + public AnimationCurve ShakeRed = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapRedZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapRedOne = 200f; + + [MMInspectorGroup("Green", true, 44)] + /// the curve used to animate the green value on + [Tooltip("the curve used to animate the green value on")] + public AnimationCurve ShakeGreen = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapGreenZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapGreenOne = 200f; + + [MMInspectorGroup("Blue", true, 45)] + /// the curve used to animate the blue value on + [Tooltip("the curve used to animate the blue value on")] + public AnimationCurve ShakeBlue = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-200f, 200f)] + public float RemapBlueZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-200f, 200f)] + public float RemapBlueOne = 200f; + + #if MM_URP + protected Volume _volume; + protected ChannelMixer _channelMixer; + protected float _initialRed; + protected float _initialGreen; + protected float _initialBlue; + protected float _initialContrast; + protected Color _initialColorFilterColor; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + + protected AnimationCurve _originalShakeRed; + protected float _originalRemapRedZero; + protected float _originalRemapRedOne; + protected AnimationCurve _originalShakeGreen; + protected float _originalRemapGreenZero; + protected float _originalRemapGreenOne; + protected AnimationCurve _originalShakeBlue; + protected float _originalRemapBlueZero; + protected float _originalRemapBlueOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _channelMixer); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.8f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newRed = ShakeFloat(ShakeRed, RemapRedZero, RemapRedOne, RelativeValues, _initialRed); + _channelMixer.redOutRedIn.Override(newRed); + float newGreen = ShakeFloat(ShakeGreen, RemapGreenZero, RemapGreenOne, RelativeValues, _initialGreen); + _channelMixer.greenOutGreenIn.Override(newGreen); + float newBlue = ShakeFloat(ShakeBlue, RemapBlueZero, RemapBlueOne, RelativeValues, _initialBlue); + _channelMixer.blueOutBlueIn.Override(newBlue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialRed = _channelMixer.redOutRedIn.value; + _initialGreen = _channelMixer.greenOutGreenIn.value; + _initialBlue = _channelMixer.blueOutBlueIn.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMChannelMixerShakeEvent(AnimationCurve shakeRed, float remapRedZero, float remapRedOne, + AnimationCurve shakeGreen, float remapGreenZero, float remapGreenOne, + AnimationCurve shakeBlue, float remapBlueZero, float remapBlueOne, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalRelativeValues = RelativeValues; + _originalShakeRed = ShakeRed; + _originalRemapRedZero = RemapRedZero; + _originalRemapRedOne = RemapRedOne; + _originalShakeGreen = ShakeGreen; + _originalRemapGreenZero = RemapGreenZero; + _originalRemapGreenOne = RemapGreenOne; + _originalShakeBlue = ShakeBlue; + _originalRemapBlueZero = RemapBlueZero; + _originalRemapBlueOne = RemapBlueOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + RelativeValues = relativeValues; + ShakeRed = shakeRed; + RemapRedZero = remapRedZero; + RemapRedOne = remapRedOne; + ShakeGreen = shakeGreen; + RemapGreenZero = remapGreenZero; + RemapGreenOne = remapGreenOne; + ShakeBlue = shakeBlue; + RemapBlueZero = remapBlueZero; + RemapBlueOne = remapBlueOne; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _channelMixer.redOutRedIn.Override(_initialRed); + _channelMixer.greenOutGreenIn.Override(_initialGreen); + _channelMixer.blueOutBlueIn.Override(_initialBlue); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + RelativeValues = _originalRelativeValues; + ShakeRed = _originalShakeRed; + RemapRedZero = _originalRemapRedZero; + RemapRedOne = _originalRemapRedOne; + ShakeGreen = _originalShakeGreen; + RemapGreenZero = _originalRemapGreenZero; + RemapGreenOne = _originalRemapGreenOne; + ShakeBlue = _originalShakeBlue; + RemapBlueZero = _originalRemapBlueZero; + RemapBlueOne = _originalRemapBlueOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMChannelMixerShakeEvent_URP.Register(OnMMChannelMixerShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMChannelMixerShakeEvent_URP.Unregister(OnMMChannelMixerShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMChannelMixerShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate( + AnimationCurve shakeRed, float remapRedZero, float remapRedOne, + AnimationCurve shakeGreen, float remapGreenZero, float remapGreenOne, + AnimationCurve shakeBlue, float remapBlueZero, float remapBlueOne, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger( + AnimationCurve shakeRed, float remapRedZero, float remapRedOne, + AnimationCurve shakeGreen, float remapGreenZero, float remapGreenOne, + AnimationCurve shakeBlue, float remapBlueZero, float remapBlueOne, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(shakeRed, remapRedZero, remapRedOne, + shakeGreen, remapGreenZero, remapGreenOne, + shakeBlue, remapBlueZero, remapBlueOne, + duration, relativeValues, attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChannelMixerShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChannelMixerShaker_URP.cs.meta new file mode 100644 index 0000000..6256976 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChannelMixerShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e79061224d0604740b66d87c50047581 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChromaticAberrationShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChromaticAberrationShaker_URP.cs new file mode 100644 index 0000000..1c8c63d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChromaticAberrationShaker_URP.cs @@ -0,0 +1,193 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP chromatic aberration post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMChromaticAberrationShaker_URP")] + public class MMChromaticAberrationShaker_URP : MMShaker + { + [MMInspectorGroup("Chromatic Aberration Intensity", true, 45)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + #if MM_URP + protected Volume _volume; + protected ChromaticAberration _chromaticAberration; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _chromaticAberration); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _chromaticAberration.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _chromaticAberration.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMChromaticAberrationShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _chromaticAberration.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMChromaticAberrationShakeEvent_URP.Register(OnMMChromaticAberrationShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMChromaticAberrationShakeEvent_URP.Unregister(OnMMChromaticAberrationShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMChromaticAberrationShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, + resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChromaticAberrationShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChromaticAberrationShaker_URP.cs.meta new file mode 100644 index 0000000..cfecb8f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMChromaticAberrationShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d01154bce0123949a8800d85a063092 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMColorAdjustmentsShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMColorAdjustmentsShaker_URP.cs new file mode 100644 index 0000000..53169c7 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMColorAdjustmentsShaker_URP.cs @@ -0,0 +1,361 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP color adjustments post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMColorAdjustmentsShaker_URP")] + public class MMColorAdjustmentsShaker_URP : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Post Exposure", true, 43)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakePostExposure = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapPostExposureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapPostExposureOne = 1f; + + [MMInspectorGroup("Hue Shift", true, 44)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeHueShift = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Range(-180f, 180f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapHueShiftZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-180f, 180f)] + public float RemapHueShiftOne = 180f; + + [MMInspectorGroup("Saturation", true, 45)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeSaturation = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapSaturationZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapSaturationOne = 100f; + + [MMInspectorGroup("Contrast", true, 47)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeContrast = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapContrastZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapContrastOne = 100f; + + public enum ColorFilterModes { None, Gradient, Interpolate } + + [MMInspectorGroup("Color Filter", true, 48)] + /// the color filter mode to work with (none, over a gradient, or interpolate to a destination color + [Tooltip("the color filter mode to work with (none, over a gradient, or interpolate to a destination color")] + public ColorFilterModes ColorFilterMode = ColorFilterModes.None; + /// the gradient over which to modify the color filter + [Tooltip("the gradient over which to modify the color filter")] + [MMFEnumCondition("ColorFilterMode", (int)ColorFilterModes.Gradient)] + [GradientUsage(true)] + public Gradient ColorFilterGradient; + /// the destination color to match when in Interpolate mode + [Tooltip("the destination color to match when in Interpolate mode")] + [MMFEnumCondition("ColorFilterMode", (int) ColorFilterModes.Interpolate)] + public Color ColorFilterDestination = Color.yellow; + /// the curve over which to interpolate the color filter + [Tooltip("the curve over which to interpolate the color filter")] + [MMFEnumCondition("ColorFilterMode", (int) ColorFilterModes.Interpolate)] + public AnimationCurve ColorFilterCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + + #if MM_URP + protected Volume _volume; + protected ColorAdjustments _colorAdjustments; + protected float _initialPostExposure; + protected float _initialHueShift; + protected float _initialSaturation; + protected float _initialContrast; + protected Color _initialColorFilterColor; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakePostExposure; + protected float _originalRemapPostExposureZero; + protected float _originalRemapPostExposureOne; + protected AnimationCurve _originalShakeHueShift; + protected float _originalRemapHueShiftZero; + protected float _originalRemapHueShiftOne; + protected AnimationCurve _originalShakeSaturation; + protected float _originalRemapSaturationZero; + protected float _originalRemapSaturationOne; + protected AnimationCurve _originalShakeContrast; + protected float _originalRemapContrastZero; + protected float _originalRemapContrastOne; + protected ColorFilterModes _originalColorFilterMode; + protected Gradient _originalColorFilterGradient; + protected Color _originalColorFilterDestination; + protected AnimationCurve _originalColorFilterCurve; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _colorAdjustments); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.8f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newPostExposure = ShakeFloat(ShakePostExposure, RemapPostExposureZero, RemapPostExposureOne, RelativeValues, _initialPostExposure); + _colorAdjustments.postExposure.Override(newPostExposure); + float newHueShift = ShakeFloat(ShakeHueShift, RemapHueShiftZero, RemapHueShiftOne, RelativeValues, _initialHueShift); + _colorAdjustments.hueShift.Override(newHueShift); + float newSaturation = ShakeFloat(ShakeSaturation, RemapSaturationZero, RemapSaturationOne, RelativeValues, _initialSaturation); + _colorAdjustments.saturation.Override(newSaturation); + float newContrast = ShakeFloat(ShakeContrast, RemapContrastZero, RemapContrastOne, RelativeValues, _initialContrast); + _colorAdjustments.contrast.Override(newContrast); + + _remappedTimeSinceStart = MMFeedbacksHelpers.Remap(Time.time - _shakeStartedTimestamp, 0f, ShakeDuration, 0f, 1f); + + if (ColorFilterMode == ColorFilterModes.Gradient) + { + _colorAdjustments.colorFilter.Override(ColorFilterGradient.Evaluate(_remappedTimeSinceStart)); + } + else if (ColorFilterMode == ColorFilterModes.Interpolate) + { + float factor = ColorFilterCurve.Evaluate(_remappedTimeSinceStart); + _colorAdjustments.colorFilter.Override(Color.LerpUnclamped(_initialColorFilterColor, ColorFilterDestination, factor)); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialPostExposure = _colorAdjustments.postExposure.value; + _initialHueShift = _colorAdjustments.hueShift.value; + _initialSaturation = _colorAdjustments.saturation.value; + _initialContrast = _colorAdjustments.contrast.value; + _initialColorFilterColor = _colorAdjustments.colorFilter.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMColorGradingShakeEvent(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + ColorFilterModes colorFilterMode, Gradient colorFilterGradient, Color colorFilterDestination,AnimationCurve colorFilterCurve, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalRelativeValues = RelativeValues; + _originalShakePostExposure = ShakePostExposure; + _originalRemapPostExposureZero = RemapPostExposureZero; + _originalRemapPostExposureOne = RemapPostExposureOne; + _originalShakeHueShift = ShakeHueShift; + _originalRemapHueShiftZero = RemapHueShiftZero; + _originalRemapHueShiftOne = RemapHueShiftOne; + _originalShakeSaturation = ShakeSaturation; + _originalRemapSaturationZero = RemapSaturationZero; + _originalRemapSaturationOne = RemapSaturationOne; + _originalShakeContrast = ShakeContrast; + _originalRemapContrastZero = RemapContrastZero; + _originalRemapContrastOne = RemapContrastOne; + _originalColorFilterMode = ColorFilterMode; + _originalColorFilterGradient = ColorFilterGradient; + _originalColorFilterDestination = ColorFilterDestination; + _originalColorFilterCurve = ColorFilterCurve; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + RelativeValues = relativeValues; + ShakePostExposure = shakePostExposure; + RemapPostExposureZero = remapPostExposureZero; + RemapPostExposureOne = remapPostExposureOne; + ShakeHueShift = shakeHueShift; + RemapHueShiftZero = remapHueShiftZero; + RemapHueShiftOne = remapHueShiftOne; + ShakeSaturation = shakeSaturation; + RemapSaturationZero = remapSaturationZero; + RemapSaturationOne = remapSaturationOne; + ShakeContrast = shakeContrast; + RemapContrastZero = remapContrastZero; + RemapContrastOne = remapContrastOne; + ColorFilterMode = colorFilterMode; + ColorFilterGradient = colorFilterGradient; + ColorFilterDestination = colorFilterDestination; + ColorFilterCurve = colorFilterCurve; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _colorAdjustments.postExposure.Override(_initialPostExposure); + _colorAdjustments.hueShift.Override(_initialHueShift); + _colorAdjustments.saturation.Override(_initialSaturation); + _colorAdjustments.contrast.Override(_initialContrast); + _colorAdjustments.colorFilter.Override(_initialColorFilterColor); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + RelativeValues = _originalRelativeValues; + ShakePostExposure = _originalShakePostExposure; + RemapPostExposureZero = _originalRemapPostExposureZero; + RemapPostExposureOne = _originalRemapPostExposureOne; + ShakeHueShift = _originalShakeHueShift; + RemapHueShiftZero = _originalRemapHueShiftZero; + RemapHueShiftOne = _originalRemapHueShiftOne; + ShakeSaturation = _originalShakeSaturation; + RemapSaturationZero = _originalRemapSaturationZero; + RemapSaturationOne = _originalRemapSaturationOne; + ShakeContrast = _originalShakeContrast; + RemapContrastZero = _originalRemapContrastZero; + RemapContrastOne = _originalRemapContrastOne; + ColorFilterMode = _originalColorFilterMode; + ColorFilterGradient = _originalColorFilterGradient; + ColorFilterDestination = _originalColorFilterDestination; + ColorFilterCurve = _originalColorFilterCurve; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMColorAdjustmentsShakeEvent_URP.Register(OnMMColorGradingShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMColorAdjustmentsShakeEvent_URP.Unregister(OnMMColorGradingShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMColorAdjustmentsShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + MMColorAdjustmentsShaker_URP.ColorFilterModes colorFilterMode, Gradient colorFilterGradient, Color colorFilterDestination,AnimationCurve colorFilterCurve, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve shakePostExposure, float remapPostExposureZero, float remapPostExposureOne, + AnimationCurve shakeHueShift, float remapHueShiftZero, float remapHueShiftOne, + AnimationCurve shakeSaturation, float remapSaturationZero, float remapSaturationOne, + AnimationCurve shakeContrast, float remapContrastZero, float remapContrastOne, + MMColorAdjustmentsShaker_URP.ColorFilterModes colorFilterMode, Gradient colorFilterGradient, Color colorFilterDestination,AnimationCurve colorFilterCurve, + float duration, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(shakePostExposure, remapPostExposureZero, remapPostExposureOne, + shakeHueShift, remapHueShiftZero, remapHueShiftOne, + shakeSaturation, remapSaturationZero, remapSaturationOne, + shakeContrast, remapContrastZero, remapContrastOne, + colorFilterMode, colorFilterGradient, colorFilterDestination, colorFilterCurve, + duration, relativeValues, attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMColorAdjustmentsShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMColorAdjustmentsShaker_URP.cs.meta new file mode 100644 index 0000000..bac22d3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMColorAdjustmentsShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71d1f877a9ca4ed48963fe747f743dfc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMDepthOfFieldShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMDepthOfFieldShaker_URP.cs new file mode 100644 index 0000000..417faf0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMDepthOfFieldShaker_URP.cs @@ -0,0 +1,272 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP depth of field post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMDepthOfFieldShaker_URP")] + public class MMDepthOfFieldShaker_URP : MMShaker + { + /// whether or not to add to the initial value + public bool RelativeValues = true; + + [MMInspectorGroup("Focus Distance", true, 51)] + /// the curve used to animate the focus distance value on + [Tooltip("the curve used to animate the focus distance value on")] + public AnimationCurve ShakeFocusDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + public float RemapFocusDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + public float RemapFocusDistanceOne = 3f; + + [MMInspectorGroup("Aperture", true, 52)] + /// the curve used to animate the aperture value on + [Tooltip("the curve used to animate the aperture value on")] + public AnimationCurve ShakeAperture = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Range(0.1f, 32f)] + [Tooltip("the value to remap the curve's 0 to")] + public float RemapApertureZero = 0f; + /// the value to remap the curve's 1 to + [Range(0.1f, 32f)] + [Tooltip("the value to remap the curve's 1 to")] + public float RemapApertureOne = 0f; + + [MMInspectorGroup("Focal Length", true, 53)] + /// the curve used to animate the focal length value on + [Tooltip("the curve used to animate the focal length value on")] + public AnimationCurve ShakeFocalLength = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 300f)] + public float RemapFocalLengthZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 300f)] + public float RemapFocalLengthOne = 0f; + + #if MM_URP + protected Volume _volume; + protected DepthOfField _depthOfField; + protected float _initialFocusDistance; + protected float _initialAperture; + protected float _initialFocalLength; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakeFocusDistance; + protected float _originalRemapFocusDistanceZero; + protected float _originalRemapFocusDistanceOne; + protected AnimationCurve _originalShakeAperture; + protected float _originalRemapApertureZero; + protected float _originalRemapApertureOne; + protected AnimationCurve _originalShakeFocalLength; + protected float _originalRemapFocalLengthZero; + protected float _originalRemapFocalLengthOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _depthOfField); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newFocusDistance = ShakeFloat(ShakeFocusDistance, RemapFocusDistanceZero, RemapFocusDistanceOne, RelativeValues, _initialFocusDistance); + _depthOfField.focusDistance.Override(newFocusDistance); + float newAperture = ShakeFloat(ShakeAperture, RemapApertureZero, RemapApertureOne, RelativeValues, _initialAperture); + _depthOfField.aperture.Override(newAperture); + float newFocalLength = ShakeFloat(ShakeFocalLength, RemapFocalLengthZero, RemapFocalLengthOne, RelativeValues, _initialFocalLength); + _depthOfField.focalLength.Override(newFocalLength); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 2f; + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialFocusDistance = _depthOfField.focusDistance.value; + _initialAperture = _depthOfField.aperture.value; + _initialFocalLength = _depthOfField.focalLength.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnDepthOfFieldShakeEvent(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax, + AnimationCurve aperture, float remapApertureMin, float remapApertureMax, + AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax, + bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalRelativeValues = RelativeValues; + _originalShakeFocusDistance = ShakeFocusDistance; + _originalRemapFocusDistanceZero = RemapFocusDistanceZero; + _originalRemapFocusDistanceOne = RemapFocusDistanceOne; + _originalShakeAperture = ShakeAperture; + _originalRemapApertureZero = RemapApertureZero; + _originalRemapApertureOne = RemapApertureOne; + _originalShakeFocalLength = ShakeFocalLength; + _originalRemapFocalLengthZero = RemapFocalLengthZero; + _originalRemapFocalLengthOne = RemapFocalLengthOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + RelativeValues = relativeValues; + ShakeFocusDistance = focusDistance; + RemapFocusDistanceZero = remapFocusDistanceMin; + RemapFocusDistanceOne = remapFocusDistanceMax; + ShakeAperture = aperture; + RemapApertureZero = remapApertureMin; + RemapApertureOne = remapApertureMax; + ShakeFocalLength = focalLength; + RemapFocalLengthZero = remapFocalLengthMin; + RemapFocalLengthOne = remapFocalLengthMax; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _depthOfField.focusDistance.Override(_initialFocusDistance); + _depthOfField.aperture.Override(_initialAperture); + _depthOfField.focalLength.Override(_initialFocalLength); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + RelativeValues = _originalRelativeValues; + ShakeFocusDistance = _originalShakeFocusDistance; + RemapFocusDistanceZero = _originalRemapFocusDistanceZero; + RemapFocusDistanceOne = _originalRemapFocusDistanceOne; + ShakeAperture = _originalShakeAperture; + RemapApertureZero = _originalRemapApertureZero; + RemapApertureOne = _originalRemapApertureOne; + ShakeFocalLength = _originalShakeFocalLength; + RemapFocalLengthZero = _originalRemapFocalLengthZero; + RemapFocalLengthOne = _originalRemapFocalLengthOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMDepthOfFieldShakeEvent_URP.Register(OnDepthOfFieldShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMDepthOfFieldShakeEvent_URP.Unregister(OnDepthOfFieldShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMDepthOfFieldShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax, + AnimationCurve aperture, float remapApertureMin, float remapApertureMax, + AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax, + bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve focusDistance, float duration, float remapFocusDistanceMin, float remapFocusDistanceMax, + AnimationCurve aperture, float remapApertureMin, float remapApertureMax, + AnimationCurve focalLength, float remapFocalLengthMin, float remapFocalLengthMax, + bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(focusDistance, duration, remapFocusDistanceMin, remapFocusDistanceMax, + aperture, remapApertureMin, remapApertureMax, + focalLength, remapFocalLengthMin, remapFocalLengthMax, relativeValues, + attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMDepthOfFieldShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMDepthOfFieldShaker_URP.cs.meta new file mode 100644 index 0000000..b4e01ee --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMDepthOfFieldShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f39d038dce44a7428bbe3628ec512d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMFilmGrainShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMFilmGrainShaker_URP.cs new file mode 100644 index 0000000..2aaebff --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMFilmGrainShaker_URP.cs @@ -0,0 +1,195 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP FilmGrain post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMFilmGrainShaker_URP")] + public class MMFilmGrainShaker_URP : MMShaker + { + [MMInspectorGroup("Film Grain Intensity", true, 51)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + #if MM_URP + protected Volume _volume; + protected FilmGrain _filmGrain; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _filmGrain); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _filmGrain.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _filmGrain.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnFilmGrainShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _filmGrain.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMFilmGrainShakeEvent_URP.Register(OnFilmGrainShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMFilmGrainShakeEvent_URP.Unregister(OnFilmGrainShakeEvent); + } + #endif + } + + /// + /// An event used to trigger FilmGrain shakes + /// + public struct MMFilmGrainShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, + resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMFilmGrainShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMFilmGrainShaker_URP.cs.meta new file mode 100644 index 0000000..412925d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMFilmGrainShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5efb216979c3fd489936ad2e22d7e94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLensDistortionShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLensDistortionShaker_URP.cs new file mode 100644 index 0000000..9d9160a --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLensDistortionShaker_URP.cs @@ -0,0 +1,212 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP lens distortion post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMLensDistortionShaker_URP")] + public class MMLensDistortionShaker_URP : MMShaker + { + [MMInspectorGroup("Lens Distortion Intensity", true, 51)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), + new Keyframe(0.2f, 1), + new Keyframe(0.25f, -1), + new Keyframe(0.35f, 0.7f), + new Keyframe(0.4f, -0.7f), + new Keyframe(0.6f, 0.3f), + new Keyframe(0.65f, -0.3f), + new Keyframe(0.8f, 0.1f), + new Keyframe(0.85f, -0.1f), + new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapIntensityOne = 0.5f; + + #if MM_URP + protected Volume _volume; + protected LensDistortion _lensDistortion; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _lensDistortion); + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 0.8f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _lensDistortion.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _lensDistortion.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMMLensDistortionShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _lensDistortion.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMLensDistortionShakeEvent_URP.Register(OnMMLensDistortionShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMLensDistortionShakeEvent_URP.Unregister(OnMMLensDistortionShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMLensDistortionShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, + resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLensDistortionShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLensDistortionShaker_URP.cs.meta new file mode 100644 index 0000000..18b509d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLensDistortionShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbf0ffd851dbe2d4fb5d79335529e131 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLight2DShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLight2DShaker_URP.cs new file mode 100644 index 0000000..ae5e451 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLight2DShaker_URP.cs @@ -0,0 +1,273 @@ +using MoreMountains.Tools; +using UnityEngine; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif + +namespace MoreMountains.Feedbacks +{ + /// + /// Add this to a light 2D to have it receive MMLightShakeEvents from feedbacks or to shake it locally + /// + #if MM_URP + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Lights/MMLight2DShaker_URP")] + [RequireComponent(typeof(Light2D))] + #endif + public class MMLight2DShaker_URP : MMShaker + { + #if MM_URP + [MMInspectorGroup("Light", true, 37)] + /// the light to affect when playing the feedback + [Tooltip("the light to affect when playing the feedback")] + public Light2D BoundLight; + /// whether or not that light should be turned off on start + [Tooltip("whether or not that light should be turned off on start")] + public bool StartsOff = true; + /// whether or not the values should be relative or not + [Tooltip("whether or not the values should be relative or not")] + public bool RelativeValues = true; + + [MMInspectorGroup("Color", true, 41)] + /// whether or not this shaker should modify color + [Tooltip("whether or not this shaker should modify color")] + public bool ModifyColor = true; + /// the colors to apply to the light over time + [Tooltip("the colors to apply to the light over time")] + public Gradient ColorOverTime; + + [MMInspectorGroup("Intensity", true, 40)] + /// the intensity to apply to the light over time + /// the curve to tween the intensity on + [Tooltip("the intensity to apply to the light over time")] + public AnimationCurve IntensityCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the intensity curve's 0 to + [Tooltip("the value to remap the intensity curve's 0 to")] + public float RemapIntensityZero = 0f; + /// the value to remap the intensity curve's 1 to + [Tooltip("the value to remap the intensity curve's 1 to")] + public float RemapIntensityOne = 1f; + + [MMInspectorGroup("Range", true, 39)] + /// the range to apply to the light over time + [Tooltip("the range to apply to the light over time")] + public AnimationCurve FalloffCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the range curve's 0 to + [Tooltip("the value to remap the range curve's 0 to")] + public float FalloffRangeZero = 0f; + /// the value to remap the range curve's 0 to + [Tooltip("the value to remap the range curve's 0 to")] + public float RemapFalloffOne = 10f; + + [MMInspectorGroup("Shadow Strength", true, 38)] + /// the range to apply to the light over time + [Tooltip("the range to apply to the light over time")] + public AnimationCurve ShadowStrengthCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// the value to remap the shadow strength's curve's 0 to + [Tooltip("the value to remap the shadow strength's curve's 0 to")] + public float RemapShadowStrengthZero = 0f; + /// the value to remap the shadow strength's curve's 1 to + [Tooltip("the value to remap the shadow strength's curve's 1 to")] + public float RemapShadowStrengthOne = 1f; + + protected Color _initialColor; + protected float _initialRange; + protected float _initialIntensity; + protected float _initialShadowStrength; + + protected bool _originalRelativeValues; + protected bool _originalModifyColor; + protected float _originalShakeDuration; + protected Gradient _originalColorOverTime; + protected AnimationCurve _originalIntensityCurve; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected AnimationCurve _originalRangeCurve; + protected float _originalRemapRangeZero; + protected float _originalRemapRangeOne; + protected AnimationCurve _originalShadowStrengthCurve; + protected float _originalRemapShadowStrengthZero; + protected float _originalRemapShadowStrengthOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + if (BoundLight == null) + { + BoundLight = this.gameObject.GetComponent(); + } + } + + /// + /// When that shaker gets added, we initialize its shake duration + /// + protected virtual void Reset() + { + ShakeDuration = 1f; + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newRange = ShakeFloat(FalloffCurve, FalloffRangeZero, RemapFalloffOne, RelativeValues, _initialRange); + BoundLight.shapeLightFalloffSize = newRange; + float newIntensity = ShakeFloat(IntensityCurve, RemapIntensityZero, RemapIntensityOne, RelativeValues, _initialIntensity); + BoundLight.intensity = newIntensity; + float newShadowStrength = ShakeFloat(ShadowStrengthCurve, RemapShadowStrengthZero, RemapShadowStrengthOne, RelativeValues, _initialShadowStrength); + BoundLight.shadowIntensity = Mathf.Clamp01(newShadowStrength); + if (ModifyColor) + { + BoundLight.color = ColorOverTime.Evaluate(_remappedTimeSinceStart); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialColor = BoundLight.color; + _initialRange = BoundLight.shapeLightFalloffSize; + _initialIntensity = BoundLight.intensity; + _initialShadowStrength = BoundLight.shadowIntensity; + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + BoundLight.color = _initialColor; + BoundLight.shapeLightFalloffSize = _initialRange; + BoundLight.intensity = _initialIntensity; + BoundLight.shadowIntensity = _initialShadowStrength; + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ModifyColor = _originalModifyColor; + RelativeValues = _originalRelativeValues; + ShakeDuration = _originalShakeDuration; + ColorOverTime = _originalColorOverTime; + IntensityCurve = _originalIntensityCurve; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + FalloffCurve = _originalRangeCurve; + FalloffRangeZero =_originalRemapRangeZero; + RemapFalloffOne = _originalRemapRangeOne; + ShadowStrengthCurve = _originalShadowStrengthCurve; + RemapShadowStrengthZero = _originalRemapShadowStrengthZero; + RemapShadowStrengthOne = _originalRemapShadowStrengthOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMLight2DShakeEvent.Register(OnMMLight2DShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMLight2DShakeEvent.Unregister(OnMMLight2DShakeEvent); + } + + public virtual void OnMMLight2DShakeEvent(float shakeDuration, bool relativeValues, bool modifyColor, Gradient colorOverTime, + AnimationCurve intensityCurve, float remapIntensityZero, float remapIntensityOne, + AnimationCurve rangeCurve, float remapRangeZero, float remapRangeOne, + AnimationCurve shadowStrengthCurve, float remapShadowStrengthZero, float remapShadowStrengthOne, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + if (!CheckEventAllowed(channelData, useRange, eventRange, eventOriginPosition) || (!Interruptible && Shaking)) + { + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalModifyColor = ModifyColor; + _originalRelativeValues = RelativeValues; + _originalShakeDuration = ShakeDuration; + _originalColorOverTime = ColorOverTime; + _originalIntensityCurve = IntensityCurve; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRangeCurve = FalloffCurve; + _originalRemapRangeZero = FalloffRangeZero; + _originalRemapRangeOne = RemapFalloffOne; + _originalShadowStrengthCurve = ShadowStrengthCurve; + _originalRemapShadowStrengthZero = RemapShadowStrengthZero; + _originalRemapShadowStrengthOne = RemapShadowStrengthOne; + } + + if (!OnlyUseShakerValues) + { + ModifyColor = modifyColor; + RelativeValues = relativeValues; + ShakeDuration = shakeDuration; + ColorOverTime = colorOverTime; + IntensityCurve = intensityCurve; + RemapIntensityZero = remapIntensityZero; + RemapIntensityOne = remapIntensityOne; + FalloffCurve = rangeCurve; + FalloffRangeZero = remapRangeZero; + RemapFalloffOne = remapRangeOne; + ShadowStrengthCurve = shadowStrengthCurve; + RemapShadowStrengthZero = remapShadowStrengthZero; + RemapShadowStrengthOne = remapShadowStrengthOne; + } + + Play(); + } + } + + public struct MMLight2DShakeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float shakeDuration, bool relativeValues, bool modifyColor, Gradient colorOverTime, + AnimationCurve intensityCurve, float remapIntensityZero, float remapIntensityOne, + AnimationCurve rangeCurve, float remapRangeZero, float remapRangeOne, + AnimationCurve shadowStrengthCurve, float remapShadowStrengthZero, float remapShadowStrengthOne, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)); + + static public void Trigger(float shakeDuration, bool relativeValues, bool modifyColor, Gradient colorOverTime, + AnimationCurve intensityCurve, float remapIntensityZero, float remapIntensityOne, + AnimationCurve rangeCurve, float remapRangeZero, float remapRangeOne, + AnimationCurve shadowStrengthCurve, float remapShadowStrengthZero, float remapShadowStrengthOne, + float feedbacksIntensity = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool useRange = false, float eventRange = 0f, Vector3 eventOriginPosition = default(Vector3)) + { + OnEvent?.Invoke(shakeDuration, relativeValues, modifyColor, colorOverTime, + intensityCurve, remapIntensityZero, remapIntensityOne, + rangeCurve, remapRangeZero, remapRangeOne, + shadowStrengthCurve, remapShadowStrengthZero, remapShadowStrengthOne, + feedbacksIntensity, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, + useRange, eventRange, eventOriginPosition); + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLight2DShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLight2DShaker_URP.cs.meta new file mode 100644 index 0000000..7f0ed4f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMLight2DShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 869d9e226f9d85148ba6b532ba92aa63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMMotionBlurShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMMotionBlurShaker_URP.cs new file mode 100644 index 0000000..907d8bf --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMMotionBlurShaker_URP.cs @@ -0,0 +1,195 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP vignette post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMMotionBlurShaker_URP")] + public class MMMotionBlurShaker_URP : MMShaker + { + [MMInspectorGroup("Motion Blur Intensity", true, 61)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + #if MM_URP + protected Volume _volume; + protected MotionBlur _motionBlur; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _motionBlur); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _motionBlur.intensity.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _motionBlur.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnMotionBlurShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _motionBlur.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMMotionBlurShakeEvent_URP.Register(OnMotionBlurShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMMotionBlurShakeEvent_URP.Unregister(OnMotionBlurShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMMotionBlurShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, + resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMMotionBlurShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMMotionBlurShaker_URP.cs.meta new file mode 100644 index 0000000..30efac3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMMotionBlurShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f83ea5980293ee4bb6961962edb0cc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMPaniniProjectionShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMPaniniProjectionShaker_URP.cs new file mode 100644 index 0000000..6c59345 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMPaniniProjectionShaker_URP.cs @@ -0,0 +1,195 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP vignette post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMPaniniProjectionShaker_URP")] + public class MMPaniniProjectionShaker_URP : MMShaker + { + [MMInspectorGroup("Distance", true, 62)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeDistance = false; + /// the curve used to animate the distance value on + [Tooltip("the curve used to animate the distance value on")] + public AnimationCurve ShakeDistance = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapDistanceZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapDistanceOne = 1f; + + #if MM_URP + protected Volume _volume; + protected PaniniProjection _paniniProjection; + protected float _initialDistance; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeDistance; + protected float _originalRemapDistanceZero; + protected float _originalRemapDistanceOne; + protected bool _originalRelativeDistance; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _paniniProjection); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeDistance, RemapDistanceZero, RemapDistanceOne, RelativeDistance, _initialDistance); + _paniniProjection.distance.Override(newValue); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialDistance = _paniniProjection.distance.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnPaniniProjectionShakeEvent(AnimationCurve distance, float duration, float remapMin, float remapMax, bool relativeDistance = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeDistance = ShakeDistance; + _originalRemapDistanceZero = RemapDistanceZero; + _originalRemapDistanceOne = RemapDistanceOne; + _originalRelativeDistance = RelativeDistance; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeDistance = distance; + RemapDistanceZero = remapMin * attenuation; + RemapDistanceOne = remapMax * attenuation; + RelativeDistance = relativeDistance; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _paniniProjection.distance.Override(_initialDistance); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeDistance = _originalShakeDistance; + RemapDistanceZero = _originalRemapDistanceZero; + RemapDistanceOne = _originalRemapDistanceOne; + RelativeDistance = _originalRelativeDistance; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMPaniniProjectionShakeEvent_URP.Register(OnPaniniProjectionShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMPaniniProjectionShakeEvent_URP.Unregister(OnPaniniProjectionShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMPaniniProjectionShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve distance, float duration, float remapMin, float remapMax, bool relativeDistance = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve distance, float duration, float remapMin, float remapMax, bool relativeDistance = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(distance, duration, remapMin, remapMax, relativeDistance, attenuation, channelData, + resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMPaniniProjectionShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMPaniniProjectionShaker_URP.cs.meta new file mode 100644 index 0000000..a190d1e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMPaniniProjectionShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6fe51abeddc2b844abf21fdba23b947 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMVignetteShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMVignetteShaker_URP.cs new file mode 100644 index 0000000..849e080 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMVignetteShaker_URP.cs @@ -0,0 +1,245 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a URP vignette post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMVignetteShaker_URP")] + public class MMVignetteShaker_URP : MMShaker + { + [MMInspectorGroup("Vignette Intensity", true, 63)] + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeIntensity = false; + /// the curve used to animate the intensity value on + [Tooltip("the curve used to animate the intensity value on")] + public AnimationCurve ShakeIntensity = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0f, 1f)] + public float RemapIntensityZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapIntensityOne = 1f; + + [MMFInspectorGroup("Vignette Color", true, 60)] + /// whether or not to also animate the vignette's color + [Tooltip("whether or not to also animate the vignette's color")] + public bool InterpolateColor = false; + /// the curve to animate the color on + [Tooltip("the curve to animate the color on")] + public AnimationCurve ColorCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.05f, 1f), new Keyframe(0.95f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(0, 1)] + public float RemapColorZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(0f, 1f)] + public float RemapColorOne = 1f; + /// the color to lerp towards + [Tooltip("the color to lerp towards")] + public Color TargetColor = Color.red; + + #if MM_URP + protected Volume _volume; + protected Vignette _vignette; + protected float _initialIntensity; + protected float _originalShakeDuration; + protected AnimationCurve _originalShakeIntensity; + protected float _originalRemapIntensityZero; + protected float _originalRemapIntensityOne; + protected bool _originalRelativeIntensity; + protected bool _originalInterpolateColor; + protected AnimationCurve _originalColorCurve; + protected float _originalRemapColorZero; + protected float _originalRemapColorOne; + protected Color _originalTargetColor; + protected Color _initialColor; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _vignette); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newValue = ShakeFloat(ShakeIntensity, RemapIntensityZero, RemapIntensityOne, RelativeIntensity, _initialIntensity); + _vignette.intensity.Override(newValue); + + if (InterpolateColor) + { + float newColorValue = ShakeFloat(ColorCurve, RemapColorZero, RemapColorOne, RelativeIntensity, 0); + _vignette.color.Override(Color.Lerp(_initialColor, TargetColor, newColorValue)); + } + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialIntensity = _vignette.intensity.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnVignetteShakeEvent(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeIntensity = ShakeIntensity; + _originalRemapIntensityZero = RemapIntensityZero; + _originalRemapIntensityOne = RemapIntensityOne; + _originalRelativeIntensity = RelativeIntensity; + _originalInterpolateColor = InterpolateColor; + _originalColorCurve = ColorCurve; + _originalRemapColorZero = RemapColorZero; + _originalRemapColorOne = RemapColorOne; + _originalTargetColor = TargetColor; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeIntensity = intensity; + RemapIntensityZero = remapMin * attenuation; + RemapIntensityOne = remapMax * attenuation; + RelativeIntensity = relativeIntensity; + ForwardDirection = forwardDirection; + InterpolateColor = interpolateColor; + ColorCurve = colorCurve; + RemapColorZero = remapColorZero; + RemapColorOne = remapColorOne; + TargetColor = targetColor; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _vignette.intensity.Override(_initialIntensity); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeIntensity = _originalShakeIntensity; + RemapIntensityZero = _originalRemapIntensityZero; + RemapIntensityOne = _originalRemapIntensityOne; + RelativeIntensity = _originalRelativeIntensity; + InterpolateColor = _originalInterpolateColor; + ColorCurve = _originalColorCurve; + RemapColorZero = _originalRemapColorZero; + RemapColorOne = _originalRemapColorOne; + TargetColor = _originalTargetColor; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMVignetteShakeEvent_URP.Register(OnVignetteShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMVignetteShakeEvent_URP.Unregister(OnVignetteShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMVignetteShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)); + + static public void Trigger(AnimationCurve intensity, float duration, float remapMin, float remapMax, bool relativeIntensity = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false, + bool interpolateColor = false, AnimationCurve colorCurve = null, float remapColorZero = 0f, float remapColorOne = 1f, Color targetColor = default(Color)) + { + OnEvent?.Invoke(intensity, duration, remapMin, remapMax, relativeIntensity, attenuation, channelData, + resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore, + interpolateColor, colorCurve, remapColorZero, remapColorOne, targetColor); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMVignetteShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMVignetteShaker_URP.cs.meta new file mode 100644 index 0000000..e877218 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMVignetteShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94df1ffae0c2c7d4ba695b68267eea10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMWhiteBalanceShaker_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMWhiteBalanceShaker_URP.cs new file mode 100644 index 0000000..d085e2e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMWhiteBalanceShaker_URP.cs @@ -0,0 +1,230 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Rendering; +#if MM_URP +using UnityEngine.Rendering.Universal; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// Add this class to a Camera with a white balance post processing and it'll be able to "shake" its values by getting events + /// + #if MM_URP + [RequireComponent(typeof(Volume))] + #endif + [AddComponentMenu("More Mountains/Feedbacks/Shakers/PostProcessing/MMWhiteBalanceShaker_URP")] + public class MMWhiteBalanceShaker_URP : MMShaker + { + /// whether or not to add to the initial value + [Tooltip("whether or not to add to the initial value")] + public bool RelativeValues = true; + + [MMInspectorGroup("Temperature", true, 55)] + /// the curve used to animate the temperature value on + [Tooltip("the curve used to animate the temperature value on")] + public AnimationCurve ShakeTemperature = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapTemperatureZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapTemperatureOne = 100f; + + [MMInspectorGroup("Tint", true, 56)] + /// the curve used to animate the tint value on + [Tooltip("the curve used to animate the tint value on")] + public AnimationCurve ShakeTint = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// the value to remap the curve's 0 to + [Tooltip("the value to remap the curve's 0 to")] + [Range(-100f, 100f)] + public float RemapTintZero = 0f; + /// the value to remap the curve's 1 to + [Tooltip("the value to remap the curve's 1 to")] + [Range(-100f, 100f)] + public float RemapTintOne = 100f; + + #if MM_URP + protected Volume _volume; + protected WhiteBalance _whiteBalance; + protected float _initialTemperature; + protected float _initialTint; + protected float _originalShakeDuration; + protected bool _originalRelativeValues; + protected AnimationCurve _originalShakeTemperature; + protected float _originalRemapTemperatureZero; + protected float _originalRemapTemperatureOne; + protected AnimationCurve _originalShakeTint; + protected float _originalRemapTintZero; + protected float _originalRemapTintOne; + + /// + /// On init we initialize our values + /// + protected override void Initialization() + { + base.Initialization(); + _volume = this.gameObject.GetComponent(); + _volume.profile.TryGet(out _whiteBalance); + } + + /// + /// Shakes values over time + /// + protected override void Shake() + { + float newTemperature = ShakeFloat(ShakeTemperature, RemapTemperatureZero, RemapTemperatureOne, RelativeValues, _initialTemperature); + _whiteBalance.temperature.Override(newTemperature); + float newTint = ShakeFloat(ShakeTint, RemapTintZero, RemapTintOne, RelativeValues, _initialTint); + _whiteBalance.tint.Override(newTint); + } + + /// + /// Collects initial values on the target + /// + protected override void GrabInitialValues() + { + _initialTemperature = _whiteBalance.temperature.value; + _initialTint = _whiteBalance.tint.value; + } + + /// + /// When we get the appropriate event, we trigger a shake + /// + /// + /// + /// + /// + /// + /// + public virtual void OnWhiteBalanceShakeEvent(AnimationCurve temperature, float duration, float remapTemperatureMin, float remapTemperatureMax, + AnimationCurve tint, float remapTintMin, float remapTintMax, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + if (!CheckEventAllowed(channelData) || (!Interruptible && Shaking)) + { + return; + } + + if (stop) + { + Stop(); + return; + } + + if (restore) + { + ResetTargetValues(); + return; + } + + _resetShakerValuesAfterShake = resetShakerValuesAfterShake; + _resetTargetValuesAfterShake = resetTargetValuesAfterShake; + + if (resetShakerValuesAfterShake) + { + _originalShakeDuration = ShakeDuration; + _originalShakeTemperature = ShakeTemperature; + _originalRemapTemperatureZero = RemapTemperatureZero; + _originalRemapTemperatureOne = RemapTemperatureOne; + _originalRelativeValues = RelativeValues; + _originalShakeTint = ShakeTint; + _originalRemapTintZero = RemapTintZero; + _originalRemapTintOne = RemapTintOne; + } + + if (!OnlyUseShakerValues) + { + TimescaleMode = timescaleMode; + ShakeDuration = duration; + ShakeTemperature = temperature; + RemapTemperatureZero = remapTemperatureMin * attenuation; + RemapTemperatureOne = remapTemperatureMax * attenuation; + RelativeValues = relativeValues; + ShakeTint = tint; + RemapTintZero = remapTintMin; + RemapTintOne = remapTintMax; + ForwardDirection = forwardDirection; + } + + Play(); + } + + /// + /// Resets the target's values + /// + protected override void ResetTargetValues() + { + base.ResetTargetValues(); + _whiteBalance.temperature.Override(_initialTemperature); + _whiteBalance.tint.Override(_initialTint); + } + + /// + /// Resets the shaker's values + /// + protected override void ResetShakerValues() + { + base.ResetShakerValues(); + ShakeDuration = _originalShakeDuration; + ShakeTemperature = _originalShakeTemperature; + RemapTemperatureZero = _originalRemapTemperatureZero; + RemapTemperatureOne = _originalRemapTemperatureOne; + RelativeValues = _originalRelativeValues; + ShakeTint = _originalShakeTint; + RemapTintZero = _originalRemapTintZero; + RemapTintOne = _originalRemapTintOne; + } + + /// + /// Starts listening for events + /// + public override void StartListening() + { + base.StartListening(); + MMWhiteBalanceShakeEvent_URP.Register(OnWhiteBalanceShakeEvent); + } + + /// + /// Stops listening for events + /// + public override void StopListening() + { + base.StopListening(); + MMWhiteBalanceShakeEvent_URP.Unregister(OnWhiteBalanceShakeEvent); + } + #endif + } + + /// + /// An event used to trigger vignette shakes + /// + public struct MMWhiteBalanceShakeEvent_URP + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AnimationCurve temperature, float duration, float remapTemperatureMin, float remapTemperatureMax, + AnimationCurve tint, float remapTintMin, float remapTintMax, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false); + + static public void Trigger(AnimationCurve temperature, float duration, float remapTemperatureMin, float remapTemperatureMax, + AnimationCurve tint, float remapTintMin, float remapTintMax, bool relativeValues = false, + float attenuation = 1.0f, MMChannelData channelData = null, bool resetShakerValuesAfterShake = true, bool resetTargetValuesAfterShake = true, + bool forwardDirection = true, TimescaleModes timescaleMode = TimescaleModes.Scaled, bool stop = false, bool restore = false) + { + OnEvent?.Invoke(temperature, duration, remapTemperatureMin, remapTemperatureMax, + tint, remapTintMin, remapTintMax, relativeValues, + attenuation, channelData, resetShakerValuesAfterShake, resetTargetValuesAfterShake, forwardDirection, timescaleMode, stop, restore); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMWhiteBalanceShaker_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMWhiteBalanceShaker_URP.cs.meta new file mode 100644 index 0000000..8630969 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Shakers/MMWhiteBalanceShaker_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 413e26d7ac278d24fb4ab58e410a9850 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs.meta new file mode 100644 index 0000000..df76f42 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2efb4545fd8d7ee44b2b56896bf7faca +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringBloomIntensity_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringBloomIntensity_URP.cs new file mode 100644 index 0000000..42eca47 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringBloomIntensity_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringBloomIntensity_URP")] + public class MMSpringBloomIntensity_URP : MMSpringFloatComponent + { + protected Bloom _bloom; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _bloom); + base.Initialization(); + } + + public override float TargetFloat + { + get => _bloom.intensity.value; + set => _bloom.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringBloomIntensity_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringBloomIntensity_URP.cs.meta new file mode 100644 index 0000000..d6e1a9d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringBloomIntensity_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 474936ac5716a714abf16bab43955d3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringChromaticAberrationIntensity_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringChromaticAberrationIntensity_URP.cs new file mode 100644 index 0000000..ff94a99 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringChromaticAberrationIntensity_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringChromaticAberrationIntensity_URP")] + public class MMSpringChromaticAberrationIntensity_URP : MMSpringFloatComponent + { + protected ChromaticAberration _chromaticAberration; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _chromaticAberration); + base.Initialization(); + } + + public override float TargetFloat + { + get => _chromaticAberration.intensity.value; + set => _chromaticAberration.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringChromaticAberrationIntensity_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringChromaticAberrationIntensity_URP.cs.meta new file mode 100644 index 0000000..1dfce1e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringChromaticAberrationIntensity_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b91ce6d480b92e488d567b5558e559e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsContrast_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsContrast_URP.cs new file mode 100644 index 0000000..d92bc36 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsContrast_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorAdjustmentsContrast_URP")] + public class MMSpringColorAdjustmentsContrast_URP : MMSpringFloatComponent + { + protected ColorAdjustments _colorAdjustments; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _colorAdjustments); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorAdjustments.contrast.value; + set => _colorAdjustments.contrast.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsContrast_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsContrast_URP.cs.meta new file mode 100644 index 0000000..5ebc8a2 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsContrast_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81b13cdaf196f864186817b183b55f91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsHueShift_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsHueShift_URP.cs new file mode 100644 index 0000000..7a5a4f8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsHueShift_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorAdjustmentsHueShift_URP")] + public class MMSpringColorAdjustmentsHueShift_URP : MMSpringFloatComponent + { + protected ColorAdjustments _colorAdjustments; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _colorAdjustments); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorAdjustments.hueShift.value; + set => _colorAdjustments.hueShift.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsHueShift_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsHueShift_URP.cs.meta new file mode 100644 index 0000000..b170716 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsHueShift_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01b19754f5c052d4096f67cfce76eb7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsSaturation_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsSaturation_URP.cs new file mode 100644 index 0000000..61028ab --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsSaturation_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringColorAdjustmentsSaturation_URP")] + public class MMSpringColorAdjustmentsSaturation_URP : MMSpringFloatComponent + { + protected ColorAdjustments _colorAdjustments; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _colorAdjustments); + base.Initialization(); + } + + public override float TargetFloat + { + get => _colorAdjustments.saturation.value; + set => _colorAdjustments.saturation.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsSaturation_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsSaturation_URP.cs.meta new file mode 100644 index 0000000..f376971 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringColorAdjustmentsSaturation_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f6a82eb72bef1c489dbd967387f8f08 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringDepthOfFieldFocalLength_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringDepthOfFieldFocalLength_URP.cs new file mode 100644 index 0000000..bc04b67 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringDepthOfFieldFocalLength_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringDepthOfFieldFocalLength_URP")] + public class MMSpringDepthOfFieldFocalLength_URP : MMSpringFloatComponent + { + protected DepthOfField _depthOfField; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _depthOfField); + base.Initialization(); + } + + public override float TargetFloat + { + get => _depthOfField.focalLength.value; + set => _depthOfField.focalLength.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringDepthOfFieldFocalLength_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringDepthOfFieldFocalLength_URP.cs.meta new file mode 100644 index 0000000..d9f83f9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringDepthOfFieldFocalLength_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24c2aeb149cc5a640a406cfe9255b64e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringLensDistortionIntensity_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringLensDistortionIntensity_URP.cs new file mode 100644 index 0000000..59aeb44 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringLensDistortionIntensity_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringLensDistortionIntensity_URP")] + public class MMSpringLensDistortionIntensity_URP : MMSpringFloatComponent + { + protected LensDistortion _lensDistortion; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _lensDistortion); + base.Initialization(); + } + + public override float TargetFloat + { + get => _lensDistortion.intensity.value; + set => _lensDistortion.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringLensDistortionIntensity_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringLensDistortionIntensity_URP.cs.meta new file mode 100644 index 0000000..404d98d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringLensDistortionIntensity_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39c2e38fedd7ea6458db806a703669ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringMotionBlurIntensity_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringMotionBlurIntensity_URP.cs new file mode 100644 index 0000000..3923393 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringMotionBlurIntensity_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringMotionBlurIntensity_URP")] + public class MMSpringMotionBlurIntensity_URP : MMSpringFloatComponent + { + protected MotionBlur _motionBlur; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _motionBlur); + base.Initialization(); + } + + public override float TargetFloat + { + get => _motionBlur.intensity.value; + set => _motionBlur.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringMotionBlurIntensity_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringMotionBlurIntensity_URP.cs.meta new file mode 100644 index 0000000..7a7a323 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringMotionBlurIntensity_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5412ea97eaefefa4fa53519f330cfaad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringPaniniProjectionDistance_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringPaniniProjectionDistance_URP.cs new file mode 100644 index 0000000..527b3f1 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringPaniniProjectionDistance_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringPaniniProjectionDistance_URP")] + public class MMSpringPaniniProjectionDistance_URP : MMSpringFloatComponent + { + protected PaniniProjection _paniniProjection; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _paniniProjection); + base.Initialization(); + } + + public override float TargetFloat + { + get => _paniniProjection.distance.value; + set => _paniniProjection.distance.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringPaniniProjectionDistance_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringPaniniProjectionDistance_URP.cs.meta new file mode 100644 index 0000000..b16972e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringPaniniProjectionDistance_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f96d4bb1a57044c4baa681871d059ec3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteCenter_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteCenter_URP.cs new file mode 100644 index 0000000..672477f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteCenter_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteCenter_URP")] + public class MMSpringVignetteCenter_URP : MMSpringVector2Component + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _vignette); + base.Initialization(); + } + + public override Vector2 TargetVector2 + { + get => _vignette.center.value; + set => _vignette.center.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteCenter_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteCenter_URP.cs.meta new file mode 100644 index 0000000..43bf743 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteCenter_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ffa54671933237418443d1faa5b3a23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteColor_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteColor_URP.cs new file mode 100644 index 0000000..bdfc5a9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteColor_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteColor_URP")] + public class MMSpringVignetteColor_URP : MMSpringColorComponent + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _vignette); + base.Initialization(); + } + + public override Color TargetColor + { + get => _vignette.color.value; + set => _vignette.color.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteColor_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteColor_URP.cs.meta new file mode 100644 index 0000000..bfbab22 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteColor_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0b0662717e477a49ab069670a2b5bc6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteIntensity_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteIntensity_URP.cs new file mode 100644 index 0000000..52be08e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteIntensity_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringVignetteIntensity_URP")] + public class MMSpringVignetteIntensity_URP : MMSpringFloatComponent + { + protected Vignette _vignette; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _vignette); + base.Initialization(); + } + + public override float TargetFloat + { + get => _vignette.intensity.value; + set => _vignette.intensity.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteIntensity_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteIntensity_URP.cs.meta new file mode 100644 index 0000000..16dc072 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringVignetteIntensity_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df5cccc1b626f954881aee460f519752 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTemperature_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTemperature_URP.cs new file mode 100644 index 0000000..e530f5b --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTemperature_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringWhiteBalanceTemperature_URP")] + public class MMSpringWhiteBalanceTemperature_URP : MMSpringFloatComponent + { + protected WhiteBalance _whiteBalance; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _whiteBalance); + base.Initialization(); + } + + public override float TargetFloat + { + get => _whiteBalance.temperature.value; + set => _whiteBalance.temperature.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTemperature_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTemperature_URP.cs.meta new file mode 100644 index 0000000..294e536 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTemperature_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ffac7400616d3f44b99ca936f6ab406 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTint_URP.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTint_URP.cs new file mode 100644 index 0000000..b79ac50 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTint_URP.cs @@ -0,0 +1,30 @@ +#if MM_URP +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace MoreMountains.Feedbacks +{ + [AddComponentMenu("More Mountains/Springs/MMSpringWhiteBalanceTint_URP")] + public class MMSpringWhiteBalanceTint_URP : MMSpringFloatComponent + { + protected WhiteBalance _whiteBalance; + + protected override void Initialization() + { + if (Target == null) + { + Target = this.gameObject.GetComponent(); + } + Target.profile.TryGet(out _whiteBalance); + base.Initialization(); + } + + public override float TargetFloat + { + get => _whiteBalance.tint.value; + set => _whiteBalance.tint.Override(value); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTint_URP.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTint_URP.cs.meta new file mode 100644 index 0000000..528588f --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/URP/Springs/MMSpringWhiteBalanceTint_URP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03434ee759b2dcc45b2a246dfc70ec89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph.meta new file mode 100644 index 0000000..34974f3 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 015b7c5c8dbfa8142b38ff1ee5a86931 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks.meta new file mode 100644 index 0000000..03c504e --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f38df9b6e33510c4489a3e1a4571ebf9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffect.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffect.cs new file mode 100644 index 0000000..94a6820 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffect.cs @@ -0,0 +1,183 @@ +using System; +using UnityEngine; +#if MM_VISUALEFFECTGRAPH +using UnityEngine.VFX; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you apply basic controls to a target VisualEffect + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you apply basic controls to a target VisualEffect")] + #if MM_VISUALEFFECTGRAPH + [FeedbackPath("Particles/VisualEffect")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.VisualEffectGraph")] + public class MMF_VisualEffect : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.ParticlesColor; } } + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Visual Effect", true, 41)] + /// the duration for the player to consider. This won't impact your visual effect, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual visual effect, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your visual effect, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual visual effect, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + #if MM_VISUALEFFECTGRAPH + + /// the various modes to control the target visual effect + public enum Modes { Play, Stop, Pause, Unpause, AdvanceOneFrame, Reinit, SetPlayRate, Simulate } + + /// the visual effect to control when playing this feedback + [Tooltip("the visual effect to control when playing this feedback")] + public VisualEffect TargetVisualEffect; + /// the selected mode, the instruction to send to the target visual effect when playing this feedback + [Tooltip("the selected mode, the instruction to send to the target visual effect when playing this feedback")] + public Modes Mode = Modes.Play; + /// when in SetPlayRate mode, the new play rate to apply + [Tooltip("when in SetPlayRate mode, the new play rate to apply")] + [MMFEnumCondition("Mode", (int)Modes.SetPlayRate)] + public float NewPlayRate = 1f; + /// when in Simulate mode, the delta time to use + [Tooltip("when in Simulate mode, the delta time to use")] + [MMFEnumCondition("Mode", (int)Modes.Simulate)] + public float StepDeltaTime = 1f; + /// when in Simulate mode, the number of steps to simulate + [Tooltip("when in Simulate mode, the number of steps to simulate")] + [MMFEnumCondition("Mode", (int)Modes.Simulate)] + public uint StepCount = 5; + /// whether or not to stop the visual effect when stopping this feedback + [Tooltip("whether or not to stop the visual effect when stopping this feedback")] + public bool StopVisualEffectOnStopFeedback = false; + /// whether or not to stop the visual effect when resetting this feedback + [Tooltip("whether or not to stop the visual effect when resetting this feedback")] + public bool StopVisualEffectOnReset = false; + /// whether or not to stop the visual effect when initializing this feedback + [Tooltip("whether or not to stop the visual effect when initializing this feedback")] + public bool StopVisualEffectOnInit = false; + + protected VFXEventAttribute _eventAttribute; + + /// + /// On init we stop our visual effect if needed + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + if (StopVisualEffectOnInit) + { + StopVisualEffect(); + } + } + + /// + /// On play we pass the selected instruction to our target visual effect + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float attenuation = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetVisualEffect == null)) + { + return; + } + + switch (Mode) + { + case Modes.Play: + TargetVisualEffect.Play(); + break; + case Modes.Stop: + StopVisualEffect(); + break; + case Modes.Pause: + TargetVisualEffect.pause = true; + break; + case Modes.Unpause: + TargetVisualEffect.pause = false; + break; + case Modes.AdvanceOneFrame: + TargetVisualEffect.AdvanceOneFrame(); + break; + case Modes.Reinit: + TargetVisualEffect.Reinit(); + break; + case Modes.SetPlayRate: + TargetVisualEffect.playRate = NewPlayRate; + break; + case Modes.Simulate: + TargetVisualEffect.Simulate(StepDeltaTime, StepCount); + break; + } + } + + /// + /// On stop we stop our visual effect if needed + /// + /// + /// + protected override void CustomStopFeedback(Vector3 position, float feedbacksIntensity = 1) + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + base.CustomStopFeedback(position, feedbacksIntensity); + + if (StopVisualEffectOnStopFeedback) + { + StopVisualEffect(); + } + } + + /// + /// On Reset, stops the visual effect if needed + /// + protected override void CustomReset() + { + base.CustomReset(); + + if (InCooldown) + { + return; + } + + if (StopVisualEffectOnReset) + { + StopVisualEffect(); + } + } + + /// + /// Stops the target visual effect + /// + protected virtual void StopVisualEffect() + { + if (TargetVisualEffect == null) + { + return; + } + + TargetVisualEffect.Stop(); + } + #else + protected override void CustomPlayFeedback(Vector3 position, float attenuation = 1.0f) { } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffect.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffect.cs.meta new file mode 100644 index 0000000..b9a7dd8 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffect.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 086f0a7e77273714b82f2e7d7b310521 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffectSetProperty.cs b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffectSetProperty.cs new file mode 100644 index 0000000..74e984d --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffectSetProperty.cs @@ -0,0 +1,271 @@ +using System; +using UnityEngine; +#if MM_VISUALEFFECTGRAPH +using UnityEngine.VFX; +#endif +using MoreMountains.Feedbacks; +using MoreMountains.Tools; +using UnityEngine.Scripting.APIUpdating; + +namespace MoreMountains.FeedbacksForThirdParty +{ + /// + /// This feedback will let you set a property on a target VisualEffect + /// + [AddComponentMenu("")] + [FeedbackHelp("This feedback will let you set a property on a target VisualEffect")] + #if MM_VISUALEFFECTGRAPH + [FeedbackPath("Particles/VisualEffectSetProperty")] + #endif + [MovedFrom(false, null, "MoreMountains.Feedbacks.VisualEffectGraph")] + public class MMF_VisualEffectSetProperty : MMF_Feedback + { + /// a static bool used to disable all feedbacks of this type at once + public static bool FeedbackTypeAuthorized = true; + /// sets the inspector color for this feedback + #if UNITY_EDITOR + public override Color FeedbackColor { get { return MMFeedbacksInspectorColors.ParticlesColor; } } + #endif + + /// the duration of this feedback is the duration of the shake + public override float FeedbackDuration { get { return ApplyTimeMultiplier(DeclaredDuration); } set { DeclaredDuration = value; } } + public override bool HasChannel => true; + public override bool HasRandomness => true; + + [MMFInspectorGroup("Visual Effect Property", true, 41)] + /// the duration for the player to consider. This won't impact your visual effect, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses. + [Tooltip("the duration for the player to consider. This won't impact your visual effect, but is a way to communicate to the MMF Player the duration of this feedback. Usually you'll want it to match your actual particle system, and setting it can be useful to have this feedback work with holding pauses.")] + public float DeclaredDuration = 0f; + + #if MM_VISUALEFFECTGRAPH + + public enum PropertyTypes { AnimationCurve, Bool, Float, Gradient, Int, Mesh, Texture, UInt, Vector2, Vector3, Vector4, } + + /// the visual effect on which to set a property + [Tooltip("the visual effect on which to set a property")] + public VisualEffect TargetVisualEffect; + /// the ID of the property to set, as exposed by the Visual Effect Graph + [Tooltip("the ID of the property to set, as exposed by the Visual Effect Graph")] + public string PropertyID; + /// the type of the property to set + [Tooltip("the type of the property to set")] + public PropertyTypes PropertyType = PropertyTypes.Float; + /// if the property is an animation curve, the new animation curve to set + [Tooltip("if the property is an animation curve, the new animation curve to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.AnimationCurve)] + public AnimationCurve NewAnimationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// if the property is a bool, the new bool to set + [Tooltip("if the property is a bool, the new bool to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Bool)] + public bool NewBool = true; + /// if the property is a float, the new float to set + [Tooltip("if the property is a float, the new float to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Float)] + public float NewFloat = 1f; + /// if the property is a gradient, the new gradient to set + [Tooltip("if the property is a gradient, the new gradient to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Gradient)] + [GradientUsage(true)] + public Gradient NewGradient = new Gradient(); + /// if the property is an int, the new int to set + [Tooltip("if the property is an int, the new int to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Int)] + public int NewInt; + /// if the property is a mesh, the new mesh to set + [Tooltip("if the property is a mesh, the new mesh to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Mesh)] + public Mesh NewMesh; + /// if the property is a texture, the new texture to set + [Tooltip("if the property is a texture, the new texture to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Texture)] + public Texture NewTexture; + /// if the property is an unsigned int, the new unsigned int to set + [Tooltip("if the property is an unsigned int, the new unsigned int to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.UInt)] + public uint NewUInt; + /// if the property is a vector2, the new vector2 to set + [Tooltip("if the property is a vector2, the new vector2 to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Vector2)] + public Vector2 NewVector2; + /// if the property is a vector3, the new vector3 to set + [Tooltip("if the property is a vector3, the new vector3 to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Vector3)] + public Vector3 NewVector3; + /// if the property is a vector4, the new vector4 to set + [Tooltip("if the property is a vector4, the new vector4 to set")] + [MMFEnumCondition("PropertyType", (int)PropertyTypes.Vector4)] + public Vector4 NewVector4; + + protected int _propertyID; + + protected AnimationCurve _initialAnimationCurve; + protected bool _initialBool; + protected float _initialFloat; + protected Gradient _initialGradient; + protected int _initialInt; + protected Mesh _initialMesh; + protected Texture _initialTexture; + protected uint _initialUInt; + protected Vector2 _initialVector2; + protected Vector3 _initialVector3; + protected Vector4 _initialVector4; + + /// + /// On init we cache our property ID + /// + /// + protected override void CustomInitialization(MMF_Player owner) + { + base.CustomInitialization(owner); + + _propertyID = Shader.PropertyToID(PropertyID); + GetInitialValue(); + } + + /// + /// Grabs and stores the initial value of the target property + /// + protected virtual void GetInitialValue() + { + switch (PropertyType) + { + case PropertyTypes.AnimationCurve: + _initialAnimationCurve = TargetVisualEffect.GetAnimationCurve(_propertyID); + break; + case PropertyTypes.Bool: + _initialBool = TargetVisualEffect.GetBool(_propertyID); + break; + case PropertyTypes.Float: + _initialFloat = TargetVisualEffect.GetFloat(_propertyID); + break; + case PropertyTypes.Gradient: + _initialGradient = TargetVisualEffect.GetGradient(_propertyID); + break; + case PropertyTypes.Int: + _initialInt = TargetVisualEffect.GetInt(_propertyID); + break; + case PropertyTypes.Mesh: + _initialMesh = TargetVisualEffect.GetMesh(_propertyID); + break; + case PropertyTypes.Texture: + _initialTexture = TargetVisualEffect.GetTexture(_propertyID); + break; + case PropertyTypes.UInt: + _initialUInt = TargetVisualEffect.GetUInt(_propertyID); + break; + case PropertyTypes.Vector2: + _initialVector2 = TargetVisualEffect.GetVector2(_propertyID); + break; + case PropertyTypes.Vector3: + _initialVector3 = TargetVisualEffect.GetVector3(_propertyID); + break; + case PropertyTypes.Vector4: + _initialVector4 = TargetVisualEffect.GetVector4(_propertyID); + break; + } + } + + /// + /// Sets the target property on the target VisualEffect to the specified new value + /// + /// + /// + protected override void CustomPlayFeedback(Vector3 position, float attenuation = 1.0f) + { + if (!Active || !FeedbackTypeAuthorized || (TargetVisualEffect == null)) + { + return; + } + + switch (PropertyType) + { + case PropertyTypes.AnimationCurve: + TargetVisualEffect.SetAnimationCurve(_propertyID, NewAnimationCurve); + break; + case PropertyTypes.Bool: + TargetVisualEffect.SetBool(_propertyID, NewBool); + break; + case PropertyTypes.Float: + TargetVisualEffect.SetFloat(_propertyID, NewFloat); + break; + case PropertyTypes.Gradient: + TargetVisualEffect.SetGradient(_propertyID, NewGradient); + break; + case PropertyTypes.Int: + TargetVisualEffect.SetInt(_propertyID, NewInt); + break; + case PropertyTypes.Mesh: + TargetVisualEffect.SetMesh(_propertyID, NewMesh); + break; + case PropertyTypes.Texture: + TargetVisualEffect.SetTexture(_propertyID, NewTexture); + break; + case PropertyTypes.UInt: + TargetVisualEffect.SetUInt(_propertyID, NewUInt); + break; + case PropertyTypes.Vector2: + TargetVisualEffect.SetVector2(_propertyID, NewVector2); + break; + case PropertyTypes.Vector3: + TargetVisualEffect.SetVector3(_propertyID, NewVector3); + break; + case PropertyTypes.Vector4: + TargetVisualEffect.SetVector4(_propertyID, NewVector4); + break; + } + } + + + /// + /// On restore, we put our object back at its initial position + /// + protected override void CustomRestoreInitialValues() + { + if (!Active || !FeedbackTypeAuthorized) + { + return; + } + + switch (PropertyType) + { + case PropertyTypes.AnimationCurve: + TargetVisualEffect.SetAnimationCurve(_propertyID, _initialAnimationCurve); + break; + case PropertyTypes.Bool: + TargetVisualEffect.SetBool(_propertyID, _initialBool); + break; + case PropertyTypes.Float: + TargetVisualEffect.SetFloat(_propertyID, _initialFloat); + break; + case PropertyTypes.Gradient: + TargetVisualEffect.SetGradient(_propertyID, _initialGradient); + break; + case PropertyTypes.Int: + TargetVisualEffect.SetInt(_propertyID, _initialInt); + break; + case PropertyTypes.Mesh: + TargetVisualEffect.SetMesh(_propertyID, _initialMesh); + break; + case PropertyTypes.Texture: + TargetVisualEffect.SetTexture(_propertyID, _initialTexture); + break; + case PropertyTypes.UInt: + TargetVisualEffect.SetUInt(_propertyID, _initialUInt); + break; + case PropertyTypes.Vector2: + TargetVisualEffect.SetVector2(_propertyID, _initialVector2); + break; + case PropertyTypes.Vector3: + TargetVisualEffect.SetVector3(_propertyID, _initialVector3); + break; + case PropertyTypes.Vector4: + TargetVisualEffect.SetVector4(_propertyID, _initialVector4); + break; + } + } + + #else + protected override void CustomPlayFeedback(Vector3 position, float attenuation = 1.0f) { } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffectSetProperty.cs.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffectSetProperty.cs.meta new file mode 100644 index 0000000..8c3d8f9 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/Feedbacks/MMF_VisualEffectSetProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4aae7df61e7da94d9c2215e2527012f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/MoreMountains.Feedbacks.VisualEffectGraph.asmref b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/MoreMountains.Feedbacks.VisualEffectGraph.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/MoreMountains.Feedbacks.VisualEffectGraph.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/MoreMountains.Feedbacks.VisualEffectGraph.asmref.meta b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/MoreMountains.Feedbacks.VisualEffectGraph.asmref.meta new file mode 100644 index 0000000..c3374d0 --- /dev/null +++ b/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/VisualEffectGraph/MoreMountains.Feedbacks.VisualEffectGraph.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c1936492d497f004da5f6dca108969fd +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools.meta b/Assets/Feel/MMTools.meta new file mode 100644 index 0000000..9fb9a08 --- /dev/null +++ b/Assets/Feel/MMTools.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79c51d612bcac48518e6d3f141243d14 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories.meta b/Assets/Feel/MMTools/Accessories.meta new file mode 100644 index 0000000..fc856f1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9823516016a64ab4b8d13a78601b4015 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor.meta b/Assets/Feel/MMTools/Accessories/Editor.meta new file mode 100644 index 0000000..696c8cb --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 667213dc8c0f24a4f98a9e4892d8f3d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMActivation.meta b/Assets/Feel/MMTools/Accessories/Editor/MMActivation.meta new file mode 100644 index 0000000..5014872 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMActivation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06f439531d4532444a8ec2b6c5c0c7ca +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMActivation/MMTriggerAndCollisionEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMActivation/MMTriggerAndCollisionEditor.cs new file mode 100644 index 0000000..2cd011f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMActivation/MMTriggerAndCollisionEditor.cs @@ -0,0 +1,108 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + [CustomEditor(typeof(MMTriggerAndCollision), true)] + [CanEditMultipleObjects] + public class MMTriggerAndCollisionEditor : Editor + { + protected SerializedProperty _CollisionLayerMask; + protected SerializedProperty _OnCollisionEnterEvent; + protected SerializedProperty _OnCollisionExitEvent; + protected SerializedProperty _OnCollisionStayEvent; + + protected SerializedProperty _TriggerLayerMask; + protected SerializedProperty _OnTriggerEnterEvent; + protected SerializedProperty _OnTriggerExitEvent; + protected SerializedProperty _OnTriggerStayEvent; + + protected SerializedProperty _Collision2DLayerMask; + protected SerializedProperty _OnCollision2DEnterEvent; + protected SerializedProperty _OnCollision2DExitEvent; + protected SerializedProperty _OnCollision2DStayEvent; + + protected SerializedProperty _Trigger2DLayerMask; + protected SerializedProperty _OnTrigger2DEnterEvent; + protected SerializedProperty _OnTrigger2DExitEvent; + protected SerializedProperty _OnTrigger2DStayEvent; + + protected bool OnCollision; + protected bool OnTrigger; + protected bool OnCollision2D; + protected bool OnTrigger2D; + + protected virtual void OnEnable() + { + _CollisionLayerMask = serializedObject.FindProperty("CollisionLayerMask"); + _OnCollisionEnterEvent = serializedObject.FindProperty("OnCollisionEnterEvent"); + _OnCollisionExitEvent = serializedObject.FindProperty("OnCollisionExitEvent"); + _OnCollisionStayEvent = serializedObject.FindProperty("OnCollisionStayEvent"); + + _TriggerLayerMask = serializedObject.FindProperty("TriggerLayerMask"); + _OnTriggerEnterEvent = serializedObject.FindProperty("OnTriggerEnterEvent"); + _OnTriggerExitEvent = serializedObject.FindProperty("OnTriggerExitEvent"); + _OnTriggerStayEvent = serializedObject.FindProperty("OnTriggerStayEvent"); + + _Collision2DLayerMask = serializedObject.FindProperty("Collision2DLayerMask"); + _OnCollision2DEnterEvent = serializedObject.FindProperty("OnCollision2DEnterEvent"); + _OnCollision2DExitEvent = serializedObject.FindProperty("OnCollision2DExitEvent"); + _OnCollision2DStayEvent = serializedObject.FindProperty("OnCollision2DStayEvent"); + + _Trigger2DLayerMask = serializedObject.FindProperty("Trigger2DLayerMask"); + _OnTrigger2DEnterEvent = serializedObject.FindProperty("OnTrigger2DEnterEvent"); + _OnTrigger2DExitEvent = serializedObject.FindProperty("OnTrigger2DExitEvent"); + _OnTrigger2DStayEvent = serializedObject.FindProperty("OnTrigger2DStayEvent"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + Undo.RecordObject(target, "Modified MMTriggerAndCollision"); + + OnCollision = EditorGUILayout.Foldout(OnCollision, "OnCollision"); + + if (OnCollision) + { + EditorGUILayout.PropertyField(_CollisionLayerMask); + EditorGUILayout.PropertyField(_OnCollisionEnterEvent); + EditorGUILayout.PropertyField(_OnCollisionExitEvent); + EditorGUILayout.PropertyField(_OnCollisionStayEvent); + } + + OnTrigger = EditorGUILayout.Foldout(OnTrigger, "OnTrigger"); + + if (OnTrigger) + { + EditorGUILayout.PropertyField(_TriggerLayerMask); + EditorGUILayout.PropertyField(_OnTriggerEnterEvent); + EditorGUILayout.PropertyField(_OnTriggerExitEvent); + EditorGUILayout.PropertyField(_OnTriggerStayEvent); + } + + OnCollision2D = EditorGUILayout.Foldout(OnCollision2D, "OnCollision2D"); + + if (OnCollision2D) + { + EditorGUILayout.PropertyField(_Collision2DLayerMask); + EditorGUILayout.PropertyField(_OnCollision2DEnterEvent); + EditorGUILayout.PropertyField(_OnCollision2DExitEvent); + EditorGUILayout.PropertyField(_OnCollision2DStayEvent); + } + + OnTrigger2D = EditorGUILayout.Foldout(OnTrigger2D, "OnTrigger2D"); + + if (OnTrigger2D) + { + EditorGUILayout.PropertyField(_Trigger2DLayerMask); + EditorGUILayout.PropertyField(_OnTrigger2DEnterEvent); + EditorGUILayout.PropertyField(_OnTrigger2DExitEvent); + EditorGUILayout.PropertyField(_OnTrigger2DStayEvent); + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMActivation/MMTriggerAndCollisionEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMActivation/MMTriggerAndCollisionEditor.cs.meta new file mode 100644 index 0000000..3b2abdd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMActivation/MMTriggerAndCollisionEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58ec23fbdf517a348851de2bb297888e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCamera.meta b/Assets/Feel/MMTools/Accessories/Editor/MMCamera.meta new file mode 100644 index 0000000..8fb2c36 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCamera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07f79b5a8110a854ca5cb1aae7ef890e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCamera/MMAspectRatioSafeZonesEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMCamera/MMAspectRatioSafeZonesEditor.cs new file mode 100644 index 0000000..a1a6bfa --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCamera/MMAspectRatioSafeZonesEditor.cs @@ -0,0 +1,167 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + /// + /// Custom editor for the MMScreenSafeZones component + /// + [CustomEditor(typeof(MMAspectRatioSafeZones), true)] + [CanEditMultipleObjects] + public class MMAspectRatioSafeZonesEditor : Editor + { + static MMAspectRatioSafeZones safeZones; + + /// + /// On enable, registers to the OnSceneGUI hook + /// + void OnEnable() + { + SceneView.duringSceneGui -= OnSceneGUI; + safeZones = (MMAspectRatioSafeZones)target; + SceneView.duringSceneGui += OnSceneGUI; + } + + /// + /// OnSceneGUI, draws center and ratios + /// + /// + private static void OnSceneGUI(SceneView sceneView) + { + DrawFrameCenter(sceneView); + DrawRatios(sceneView); + } + + /// + /// Draws a rectangle for each ratio + /// + /// + private static void DrawRatios(SceneView sceneView) + { + if (!safeZones.DrawRatios) + { + return; + } + + Vector3 center = sceneView.pivot; + + float width = sceneView.position.width; + float height = sceneView.position.height; + + Vector3 bottomLeft = new Vector3(center.x - width / 2f, center.y - height / 2f, 0f); + Vector3 topRight = new Vector3(center.x + width / 2f, center.y + height / 2f, 0f); + + Vector3 topLeft = bottomLeft; + topLeft.y = topRight.y; + Vector3 bottomRight = topRight; + bottomRight.y = bottomLeft.y; + + float size = safeZones.CameraSize; + + // dotted lines + float spacing = 2f; + Color dottedLineColor = Color.white; + dottedLineColor.a = 0.4f; + Handles.color = dottedLineColor; + // top + Handles.DrawDottedLine(new Vector3(topLeft.x, center.y + size, 0f), new Vector3(topRight.x, center.y + size, 0f), spacing); + // bottom + Handles.DrawDottedLine(new Vector3(topLeft.x, center.y - size, 0f), new Vector3(topRight.x, center.y - size, 0f), spacing); + + foreach (Ratio ratio in safeZones.Ratios) + { + if (ratio.DrawRatio) + { + float aspectRatio = ratio.Size.x / ratio.Size.y; + + Handles.color = ratio.RatioColor; + + // aspect ratio positions + Vector3 ratioTopLeft = new Vector3(center.x - size * aspectRatio, center.y + size, 0f); + Vector3 ratioTopRight = new Vector3(center.x + size * aspectRatio, center.y + size, 0f); + Vector3 ratioBottomLeft = new Vector3(center.x - size * aspectRatio, center.y - size, 0f); + Vector3 ratioBottomRight = new Vector3(center.x + size * aspectRatio, center.y - size, 0f); + Vector3 ratioLabelPosition = ratioBottomLeft + 0.1f * Vector3.down + 0.1f * Vector3.right; + + // draws a label under the rectangle + GUIStyle style = new GUIStyle(); + style.normal.textColor = ratio.RatioColor; + style.fontSize = 8; + Handles.Label(ratioLabelPosition, ratio.Size.x + ":" + ratio.Size.y, style); + + // draws a rectangle around the aspect ratio + Vector3[] verts = new Vector3[] { ratioTopLeft, ratioTopRight, ratioBottomRight, ratioBottomLeft }; + Handles.DrawSolidRectangleWithOutline(verts, new Color(0, 0, 0, 0), ratio.RatioColor); + + // draws the dead zone of that ratio + Color zoneColor = ratio.RatioColor; + zoneColor.a = zoneColor.a * safeZones.UnsafeZonesOpacity; + + // top rectangle + verts = new Vector3[] { topLeft, topRight, new Vector3(topLeft.x, ratioTopLeft.y, 0f), new Vector3(topRight.x, ratioTopRight.y, 0f) }; + Handles.DrawSolidRectangleWithOutline(verts, zoneColor, new Color(0, 0, 0, 0)); + + // bottom rectangle + verts = new Vector3[] { bottomLeft, new Vector3(topLeft.x, ratioBottomLeft.y, 0f), new Vector3(topRight.x, ratioBottomRight.y, 0f), bottomRight }; + Handles.DrawSolidRectangleWithOutline(verts, zoneColor, new Color(0, 0, 0, 0)); + + // left rectangle + verts = new Vector3[] { new Vector3(topLeft.x, ratioTopLeft.y, 0f), ratioTopLeft, ratioBottomLeft, new Vector3(bottomLeft.x, ratioBottomLeft.y, 0f) }; + Handles.DrawSolidRectangleWithOutline(verts, zoneColor, new Color(0, 0, 0, 0)); + + // right rectangle + verts = new Vector3[] { new Vector3(topRight.x, ratioTopRight.y, 0f), new Vector3(bottomRight.x, ratioBottomRight.y, 0f), ratioBottomRight, ratioTopRight}; + Handles.DrawSolidRectangleWithOutline(verts, zoneColor, new Color(0, 0, 0, 0)); + + // dotted line left + Handles.DrawDottedLine(new Vector3(ratioBottomLeft.x, topLeft.y, 0f), new Vector3(ratioTopLeft.x, bottomLeft.y, 0f), spacing); + // dotted line right + Handles.DrawDottedLine(new Vector3(ratioBottomRight.x, topLeft.y, 0f), new Vector3(ratioBottomRight.x, bottomLeft.y, 0f), spacing); + } + } + } + + /// + /// Draws a crosshair at the center + /// + /// + private static void DrawFrameCenter(SceneView sceneView) + { + if (!safeZones.DrawCenterCrosshair) + { + return; + } + + Vector3 center = sceneView.pivot; + float crossHairSize = safeZones.CenterCrosshairSize; + + float reticleSize = crossHairSize / 10f; + + Handles.color = safeZones.CenterCrosshairColor; + + Vector3 crosshairTopLeft = new Vector3(center.x - crossHairSize / 2f, center.y + crossHairSize / 2f, 0f); + Vector3 crosshairTopRight = new Vector3(center.x + crossHairSize / 2f, center.y + crossHairSize / 2f, 0f); + Vector3 crosshairBottomLeft = new Vector3(center.x - crossHairSize / 2f, center.y - crossHairSize / 2f, 0f); + Vector3 crosshairBottomRight = new Vector3(center.x + crossHairSize / 2f, center.y - crossHairSize / 2f, 0f); + + // cross + Handles.DrawLine(new Vector3(center.x, center.y + crossHairSize / 2f, 0f), new Vector3(center.x, center.y - crossHairSize / 2f, 0f)); + Handles.DrawLine(new Vector3(center.x - crossHairSize / 2f, center.y, 0f), new Vector3(center.x + crossHairSize / 2f, center.y, 0f)); + + // top left + Handles.DrawLine(crosshairTopLeft, new Vector3(crosshairTopLeft.x + reticleSize, crosshairTopLeft.y, 0f)); + Handles.DrawLine(crosshairTopLeft, new Vector3(crosshairTopLeft.x, crosshairTopLeft.y - reticleSize, 0f)); + // top right + Handles.DrawLine(crosshairTopRight, new Vector3(crosshairTopRight.x - reticleSize, crosshairTopRight.y, 0f)); + Handles.DrawLine(crosshairTopRight, new Vector3(crosshairTopRight.x, crosshairTopRight.y - reticleSize, 0f)); + // bottom left + Handles.DrawLine(crosshairBottomLeft, new Vector3(crosshairBottomLeft.x + reticleSize, crosshairBottomLeft.y, 0f)); + Handles.DrawLine(crosshairBottomLeft, new Vector3(crosshairBottomLeft.x, crosshairBottomLeft.y + reticleSize, 0f)); + // bottom right + Handles.DrawLine(crosshairBottomRight, new Vector3(crosshairBottomRight.x - reticleSize, crosshairBottomRight.y, 0f)); + Handles.DrawLine(crosshairBottomRight, new Vector3(crosshairBottomRight.x, crosshairBottomRight.y + reticleSize, 0f)); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCamera/MMAspectRatioSafeZonesEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMCamera/MMAspectRatioSafeZonesEditor.cs.meta new file mode 100644 index 0000000..3948449 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCamera/MMAspectRatioSafeZonesEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3318ec2edbd59284a9d8a7371e84a33e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCollisions.meta b/Assets/Feel/MMTools/Accessories/Editor/MMCollisions.meta new file mode 100644 index 0000000..3b5ace0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCollisions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d248dd8f3ec6b8408475234fb90f890 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCollisions/MMMeshToPolygonCollider2D.cs b/Assets/Feel/MMTools/Accessories/Editor/MMCollisions/MMMeshToPolygonCollider2D.cs new file mode 100644 index 0000000..34d1edb --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCollisions/MMMeshToPolygonCollider2D.cs @@ -0,0 +1,134 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class that lets you create polygon collider 2D out of mesh filters + /// + public class MMMeshToPolygonCollider2D : MonoBehaviour + { + /// + /// Generates a PolygonCollider2D out of a meshfilter + /// + /// + private static void GeneratePolygonCollider2D(MeshFilter meshFilter) + { + // we validate our mesh + if (!ValidateMesh(meshFilter)) + { + return; + } + + // we grab or create our PolygonCollider2D + PolygonCollider2D polygonCollider2D = InitializePolygonCollider2D(meshFilter); + if (polygonCollider2D == null) + { + return; + } + + Vector3[] vectors = MeshFilterToVectors(meshFilter); + Vector2[] newPoints = VectorsToPoints(vectors); + EditorUtility.SetDirty(polygonCollider2D); + polygonCollider2D.SetPath(0, newPoints); + } + + /// + /// Takes an array of vectors and outputs points + /// + /// + /// + private static Vector2[] VectorsToPoints(Vector3[] vectors) + { + List newColliderVertices = new List(); + + for (int i = 0; i < vectors.Length; i++) + { + newColliderVertices.Add(new Vector2(vectors[i].x, vectors[i].y)); + } + + Vector2[] newPoints = newColliderVertices.Distinct().ToArray(); + return newPoints; + } + + /// + /// Turns a meshfilter into an array of vectors + /// + /// + /// + private static Vector3[] MeshFilterToVectors(MeshFilter meshFilter) + { + List vertices = new List(); + meshFilter.sharedMesh.GetVertices(vertices); + + List boundaryPath = MMGeometry.GetEdges(meshFilter.sharedMesh.triangles).FindBoundary().SortEdges(); + + Vector3[] vectors = new Vector3[boundaryPath.Count]; + for (int i = 0; i < boundaryPath.Count; i++) + { + vectors[i] = vertices[boundaryPath[i].Vertice1]; + } + + return vectors; + } + + /// + /// Grabs or creates a polygon collider 2D + /// + /// + /// + private static PolygonCollider2D InitializePolygonCollider2D(MeshFilter meshFilter) + { + PolygonCollider2D polygonCollider2D = meshFilter.GetComponent(); + if (polygonCollider2D == null) + { + polygonCollider2D = meshFilter.gameObject.AddComponent(); + } + polygonCollider2D.pathCount = 1; + return polygonCollider2D; + } + + /// + /// Makes sure that + /// + /// + /// + private static bool ValidateMesh(MeshFilter meshFilter) + { + if (meshFilter.sharedMesh == null) + { + Debug.LogWarning("[MMMeshToPolygonCollider2D] " + + meshFilter.gameObject.name + + " needs to have at least a mesh set on its mesh filter component."); + return false; + } + return true; + } + + /// + /// A method meant to be called via the Tools menu, that will go through all mesh colliders on an object and generate a polygon collider2D out of it + /// + [MenuItem("Tools/More Mountains/Collisions/Generate PolygonCollider2D", false, 601)] + public static void GeneratePolygonCollider2DMenu() + { + Transform activeTransform = Selection.activeTransform; + if (activeTransform == null) + { + Debug.LogWarning("[MMMeshToPolygonCollider2D] You need to select a gameobject first."); + return; + } + + EditorSceneManager.MarkSceneDirty(activeTransform.gameObject.scene); + MeshFilter[] meshFilters = activeTransform.GetComponentsInChildren(); + + foreach (MeshFilter meshFilter in meshFilters) + { + GeneratePolygonCollider2D(meshFilter); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCollisions/MMMeshToPolygonCollider2D.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMCollisions/MMMeshToPolygonCollider2D.cs.meta new file mode 100644 index 0000000..8927749 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCollisions/MMMeshToPolygonCollider2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff6c7676065e39545a4f7ccb2f5d67b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCurves.meta b/Assets/Feel/MMTools/Accessories/Editor/MMCurves.meta new file mode 100644 index 0000000..e6a7ac2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCurves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c87e76a9104d58848990d987427637b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMAntiCurves.curves b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMAntiCurves.curves new file mode 100644 index 0000000..cfd341d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMAntiCurves.curves @@ -0,0 +1,14261 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12322, guid: 0000000000000000e000000000000000, type: 0} + m_Name: MMAntiCurves + m_EditorClassIdentifier: + m_Presets: + - m_Name: LinearTween + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.9999995 + outSlope: -0.9999995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.97959185 + inSlope: -0.9999995 + outSlope: -0.9999995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9591837 + inSlope: -0.9999995 + outSlope: -0.9999995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.93877554 + inSlope: -1.000001 + outSlope: -1.000001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9183673 + inSlope: -1.000001 + outSlope: -1.000001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.8979592 + inSlope: -0.99999946 + outSlope: -0.99999946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.877551 + inSlope: -0.99999946 + outSlope: -0.99999946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.85714287 + inSlope: -0.99999964 + outSlope: -0.99999964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.8367347 + inSlope: -1.0000011 + outSlope: -1.0000011 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.8163265 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.79591835 + inSlope: -0.99999964 + outSlope: -0.99999964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.7755102 + inSlope: -0.99999964 + outSlope: -0.99999964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.75510204 + inSlope: -0.99999964 + outSlope: -0.99999964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.7346939 + inSlope: -0.9999993 + outSlope: -0.9999993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.71428573 + inSlope: -0.9999993 + outSlope: -0.9999993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.6938776 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.6734694 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.6530612 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.63265306 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.6122449 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.5918367 + inSlope: -1.0000007 + outSlope: -1.0000007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.57142854 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.5510204 + inSlope: -0.9999993 + outSlope: -0.9999993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.53061223 + inSlope: -0.9999993 + outSlope: -0.9999993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5102041 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.48979592 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.46938777 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.44897962 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.4285714 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.40816325 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.3877551 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.36734694 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.3469388 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.32653064 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.30612242 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.28571427 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.26530612 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.24489796 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.22448981 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.20408165 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.18367344 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.16326529 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.14285713 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.12244898 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.10204083 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.081632674 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.06122446 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.040816307 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.020408154 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.020409346 + outSlope: -0.020409346 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9995835 + inSlope: -0.04081577 + outSlope: -0.04081577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99833405 + inSlope: -0.08163154 + outSlope: -0.08163154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9962516 + inSlope: -0.12245023 + outSlope: -0.12245023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9933361 + inSlope: -0.16326599 + outSlope: -0.16326599 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.98958766 + inSlope: -0.20408031 + outSlope: -0.20408031 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9850063 + inSlope: -0.24489753 + outSlope: -0.24489753 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.97959185 + inSlope: -0.2857148 + outSlope: -0.2857148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.97334445 + inSlope: -0.32653058 + outSlope: -0.32653058 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.96626407 + inSlope: -0.3673477 + outSlope: -0.3673477 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.95835066 + inSlope: -0.4081636 + outSlope: -0.4081636 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.94960433 + inSlope: -0.44897938 + outSlope: -0.44897938 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.940025 + inSlope: -0.4897966 + outSlope: -0.4897966 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.92961264 + inSlope: -0.5306122 + outSlope: -0.5306122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9183673 + inSlope: -0.57142794 + outSlope: -0.57142794 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.90628904 + inSlope: -0.6122441 + outSlope: -0.6122441 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8933778 + inSlope: -0.6530609 + outSlope: -0.6530609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8796335 + inSlope: -0.6938782 + outSlope: -0.6938782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8650562 + inSlope: -0.7346945 + outSlope: -0.7346945 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.849646 + inSlope: -0.77550966 + outSlope: -0.77550966 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.83340275 + inSlope: -0.8163269 + outSlope: -0.8163269 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8163265 + inSlope: -0.8571433 + outSlope: -0.8571433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.7984173 + inSlope: -0.8979584 + outSlope: -0.8979584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.7796751 + inSlope: -0.93877566 + outSlope: -0.93877566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.76009995 + inSlope: -0.9795921 + outSlope: -0.9795921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.7396918 + inSlope: -1.0204079 + outSlope: -1.0204079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.71845067 + inSlope: -1.0612237 + outSlope: -1.0612237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.69637656 + inSlope: -1.1020408 + outSlope: -1.1020408 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.67346936 + inSlope: -1.142858 + outSlope: -1.142858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.64972925 + inSlope: -1.183674 + outSlope: -1.183674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.62515616 + inSlope: -1.2244897 + outSlope: -1.2244897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.5997501 + inSlope: -1.2653055 + outSlope: -1.2653055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.57351106 + inSlope: -1.3061213 + outSlope: -1.3061213 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.54643905 + inSlope: -1.3469381 + outSlope: -1.3469381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.51853395 + inSlope: -1.3877554 + outSlope: -1.3877554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.48979592 + inSlope: -1.4285731 + outSlope: -1.4285731 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.46022487 + inSlope: -1.469389 + outSlope: -1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.4298209 + inSlope: -1.5102032 + outSlope: -1.5102032 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.39858395 + inSlope: -1.5510205 + outSlope: -1.5510205 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.36651397 + inSlope: -1.5918368 + outSlope: -1.5918368 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.33361095 + inSlope: -1.6326525 + outSlope: -1.6326525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.29987502 + inSlope: -1.6734693 + outSlope: -1.6734693 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.26530612 + inSlope: -1.7142851 + outSlope: -1.7142851 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.22990423 + inSlope: -1.7551024 + outSlope: -1.7551024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.19366932 + inSlope: -1.7959197 + outSlope: -1.7959197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.15660143 + inSlope: -1.836734 + outSlope: -1.836734 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.118700504 + inSlope: -1.8775499 + outSlope: -1.8775499 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.079966664 + inSlope: -1.9183685 + outSlope: -1.9183685 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.04039979 + inSlope: -1.9591842 + outSlope: -1.9591842 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1.9795907 + outSlope: -1.9795907 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -1.9795897 + outSlope: -1.9795897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9596002 + inSlope: -1.9591832 + outSlope: -1.9591832 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.92003334 + inSlope: -1.9183674 + outSlope: -1.9183674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.8812995 + inSlope: -1.8775518 + outSlope: -1.8775518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.8433986 + inSlope: -1.8367358 + outSlope: -1.8367358 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.8063307 + inSlope: -1.7959186 + outSlope: -1.7959186 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.77009577 + inSlope: -1.7551014 + outSlope: -1.7551014 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.7346939 + inSlope: -1.7142844 + outSlope: -1.7142844 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.700125 + inSlope: -1.6734717 + outSlope: -1.6734717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.6663889 + inSlope: -1.6326537 + outSlope: -1.6326537 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.63348603 + inSlope: -1.5918357 + outSlope: -1.5918357 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.60141605 + inSlope: -1.5510199 + outSlope: -1.5510199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.5701791 + inSlope: -1.5102026 + outSlope: -1.5102026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.53977513 + inSlope: -1.4693878 + outSlope: -1.4693878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.5102041 + inSlope: -1.428572 + outSlope: -1.428572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.48146605 + inSlope: -1.3877544 + outSlope: -1.3877544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.45356107 + inSlope: -1.3469391 + outSlope: -1.3469391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.42648894 + inSlope: -1.3061233 + outSlope: -1.3061233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.4002499 + inSlope: -1.2653055 + outSlope: -1.2653055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.37484384 + inSlope: -1.2244918 + outSlope: -1.2244918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.35027063 + inSlope: -1.1836746 + outSlope: -1.1836746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.32653058 + inSlope: -1.1428567 + outSlope: -1.1428567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.30362344 + inSlope: -1.10204 + outSlope: -1.10204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.28154933 + inSlope: -1.0612229 + outSlope: -1.0612229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.2603082 + inSlope: -1.0204079 + outSlope: -1.0204079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.23990005 + inSlope: -0.9795921 + outSlope: -0.9795921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.22032487 + inSlope: -0.9387763 + outSlope: -0.9387763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.20158267 + inSlope: -0.89795923 + outSlope: -0.89795923 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.18367344 + inSlope: -0.857142 + outSlope: -0.857142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.16659725 + inSlope: -0.816326 + outSlope: -0.816326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.15035403 + inSlope: -0.7755102 + outSlope: -0.7755102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.13494378 + inSlope: -0.7346945 + outSlope: -0.7346945 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.120366514 + inSlope: -0.6938772 + outSlope: -0.6938772 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.10662228 + inSlope: -0.65306044 + outSlope: -0.65306044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.09371096 + inSlope: -0.61224616 + outSlope: -0.61224616 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.081632614 + inSlope: -0.57142836 + outSlope: -0.57142836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.07038736 + inSlope: -0.5306111 + outSlope: -0.5306111 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.059975028 + inSlope: -0.4897968 + outSlope: -0.4897968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.050395668 + inSlope: -0.44897956 + outSlope: -0.44897956 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.04164934 + inSlope: -0.4081632 + outSlope: -0.4081632 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.03373593 + inSlope: -0.3673474 + outSlope: -0.3673474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.026655555 + inSlope: -0.3265307 + outSlope: -0.3265307 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.020408154 + inSlope: -0.28571492 + outSlope: -0.28571492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.014993727 + inSlope: -0.24489766 + outSlope: -0.24489766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.010412335 + inSlope: -0.2040804 + outSlope: -0.2040804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0066639185 + inSlope: -0.16326588 + outSlope: -0.16326588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.003748417 + inSlope: -0.12245008 + outSlope: -0.12245008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0016659498 + inSlope: -0.081631586 + outSlope: -0.081631586 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00041651726 + inSlope: -0.04081579 + outSlope: -0.04081579 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.020409355 + outSlope: -0.020409355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.04081577 + outSlope: -0.04081577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.999167 + inSlope: -0.081633 + outSlope: -0.081633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99666804 + inSlope: -0.163266 + outSlope: -0.163266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9925031 + inSlope: -0.24489754 + outSlope: -0.24489754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9866722 + inSlope: -0.32653052 + outSlope: -0.32653052 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9791753 + inSlope: -0.40816355 + outSlope: -0.40816355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9700125 + inSlope: -0.48979506 + outSlope: -0.48979506 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9591837 + inSlope: -0.5714282 + outSlope: -0.5714282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9466889 + inSlope: -0.65306115 + outSlope: -0.65306115 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.93252814 + inSlope: -0.7346939 + outSlope: -0.7346939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9167014 + inSlope: -0.8163272 + outSlope: -0.8163272 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.89920866 + inSlope: -0.8979602 + outSlope: -0.8979602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.88004994 + inSlope: -0.9795918 + outSlope: -0.9795918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.85922533 + inSlope: -1.0612243 + outSlope: -1.0612243 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.83673465 + inSlope: -1.1428573 + outSlope: -1.1428573 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8125781 + inSlope: -1.2244883 + outSlope: -1.2244883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.78675556 + inSlope: -1.3061218 + outSlope: -1.3061218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.759267 + inSlope: -1.3877563 + outSlope: -1.3877563 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.73011243 + inSlope: -1.469389 + outSlope: -1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.69929194 + inSlope: -1.5510193 + outSlope: -1.5510193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.6668055 + inSlope: -1.6326523 + outSlope: -1.6326523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.63265306 + inSlope: -1.7142866 + outSlope: -1.7142866 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.59683466 + inSlope: -1.7959182 + outSlope: -1.7959182 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.55935025 + inSlope: -1.8775513 + outSlope: -1.8775513 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5201999 + inSlope: -1.9489796 + outSlope: -1.9489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.4798001 + inSlope: -1.9489796 + outSlope: -1.9489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.44064975 + inSlope: -1.8775512 + outSlope: -1.8775512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.4031654 + inSlope: -1.7959185 + outSlope: -1.7959185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.36734688 + inSlope: -1.7142855 + outSlope: -1.7142855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.3331945 + inSlope: -1.632652 + outSlope: -1.632652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.30070806 + inSlope: -1.5510204 + outSlope: -1.5510204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.26988757 + inSlope: -1.469389 + outSlope: -1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.24073303 + inSlope: -1.3877559 + outSlope: -1.3877559 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.2132445 + inSlope: -1.3061224 + outSlope: -1.3061224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.18742186 + inSlope: -1.2244895 + outSlope: -1.2244895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.16326529 + inSlope: -1.1428567 + outSlope: -1.1428567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.14077467 + inSlope: -1.0612237 + outSlope: -1.0612237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.119950056 + inSlope: -0.97959214 + outSlope: -0.97959214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.100791335 + inSlope: -0.89796054 + outSlope: -0.89796054 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.08329862 + inSlope: -0.8163264 + outSlope: -0.8163264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.06747186 + inSlope: -0.7346933 + outSlope: -0.7346933 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.05331111 + inSlope: -0.6530614 + outSlope: -0.6530614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.040816307 + inSlope: -0.57142836 + outSlope: -0.57142836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.029987514 + inSlope: -0.48979533 + outSlope: -0.48979533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.02082467 + inSlope: -0.40816373 + outSlope: -0.40816373 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.013327777 + inSlope: -0.32653028 + outSlope: -0.32653028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0074968934 + inSlope: -0.24489725 + outSlope: -0.24489725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0033319592 + inSlope: -0.16326609 + outSlope: -0.16326609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.0008329749 + inSlope: -0.08163304 + outSlope: -0.08163304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.04081579 + outSlope: -0.04081579 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.00041764975 + outSlope: -0.00041764975 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9999915 + inSlope: -0.001666218 + outSlope: -0.001666218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.999932 + inSlope: -0.005413383 + outSlope: -0.005413383 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9997705 + inSlope: -0.011662066 + outSlope: -0.011662066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.999456 + inSlope: -0.020409344 + outSlope: -0.020409344 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9989375 + inSlope: -0.0316523 + outSlope: -0.0316523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99816406 + inSlope: -0.045396768 + outSlope: -0.045396768 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99708456 + inSlope: -0.061641317 + outSlope: -0.061641317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9956481 + inSlope: -0.08038298 + outSlope: -0.08038298 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9938036 + inSlope: -0.10162467 + outSlope: -0.10162467 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.99150014 + inSlope: -0.12536503 + outSlope: -0.12536503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9886867 + inSlope: -0.15160394 + outSlope: -0.15160394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9853122 + inSlope: -0.18034148 + outSlope: -0.18034148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9813258 + inSlope: -0.2115775 + outSlope: -0.2115775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9766764 + inSlope: -0.24531367 + outSlope: -0.24531367 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.971313 + inSlope: -0.2815501 + outSlope: -0.2815501 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.96518457 + inSlope: -0.32028323 + outSlope: -0.32028323 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9582402 + inSlope: -0.36151522 + outSlope: -0.36151522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.95042884 + inSlope: -0.40524894 + outSlope: -0.40524894 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.94169945 + inSlope: -0.45147926 + outSlope: -0.45147926 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9320011 + inSlope: -0.5002085 + outSlope: -0.5002085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.92128277 + inSlope: -0.55143666 + outSlope: -0.55143666 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.9094935 + inSlope: -0.6051641 + outSlope: -0.6051641 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.8965822 + inSlope: -0.6613921 + outSlope: -0.6613921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.8824979 + inSlope: -0.72011614 + outSlope: -0.72011614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.8671897 + inSlope: -0.7813413 + outSlope: -0.7813413 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.85060644 + inSlope: -0.845065 + outSlope: -0.845065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.8326973 + inSlope: -0.911286 + outSlope: -0.911286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.81341106 + inSlope: -0.98000836 + outSlope: -0.98000836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.7926969 + inSlope: -1.0512292 + outSlope: -1.0512292 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.77050376 + inSlope: -1.1249474 + outSlope: -1.1249474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.7467807 + inSlope: -1.2011657 + outSlope: -1.2011657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.7214766 + inSlope: -1.2798839 + outSlope: -1.2798839 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.69454056 + inSlope: -1.3611002 + outSlope: -1.3611002 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.66592145 + inSlope: -1.4448142 + outSlope: -1.4448142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.6355685 + inSlope: -1.5310287 + outSlope: -1.5310287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.6034305 + inSlope: -1.6197429 + outSlope: -1.6197429 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.5694566 + inSlope: -1.7109542 + outSlope: -1.7109542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.5335957 + inSlope: -1.8046639 + outSlope: -1.8046639 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.49579686 + inSlope: -1.9008739 + outSlope: -1.9008739 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.4560089 + inSlope: -1.999584 + outSlope: -1.999584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.4141811 + inSlope: -2.100791 + outSlope: -2.100791 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.37026238 + inSlope: -2.204498 + outSlope: -2.204498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.32420164 + inSlope: -2.3107038 + outSlope: -2.3107038 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.275948 + inSlope: -2.419408 + outSlope: -2.419408 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.22545034 + inSlope: -2.530613 + outSlope: -2.530613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.17265755 + inSlope: -2.6443148 + outSlope: -2.6443148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.11751902 + inSlope: -2.7605157 + outSlope: -2.7605157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.059983492 + inSlope: -2.8792174 + outSlope: -2.8792174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -2.9391925 + outSlope: -2.9391925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -2.939191 + outSlope: -2.939191 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9400165 + inSlope: -2.8792162 + outSlope: -2.8792162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.882481 + inSlope: -2.7605143 + outSlope: -2.7605143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.82734245 + inSlope: -2.6443172 + outSlope: -2.6443172 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.77454966 + inSlope: -2.5306156 + outSlope: -2.5306156 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.724052 + inSlope: -2.419407 + outSlope: -2.419407 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.67579836 + inSlope: -2.3107026 + outSlope: -2.3107026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.6297376 + inSlope: -2.2044973 + outSlope: -2.2044973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.5858189 + inSlope: -2.1007931 + outSlope: -2.1007931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.54399097 + inSlope: -1.9995853 + outSlope: -1.9995853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.50420314 + inSlope: -1.9008732 + outSlope: -1.9008732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.46640432 + inSlope: -1.8046633 + outSlope: -1.8046633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.43054342 + inSlope: -1.7109535 + outSlope: -1.7109535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.3965695 + inSlope: -1.6197417 + outSlope: -1.6197417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.3644315 + inSlope: -1.5310276 + outSlope: -1.5310276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.33407855 + inSlope: -1.4448147 + outSlope: -1.4448147 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.3054595 + inSlope: -1.3611013 + outSlope: -1.3611013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.2785234 + inSlope: -1.2798843 + outSlope: -1.2798843 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.2532193 + inSlope: -1.2011657 + outSlope: -1.2011657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.22949624 + inSlope: -1.124948 + outSlope: -1.124948 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.20730305 + inSlope: -1.05123 + outSlope: -1.05123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.18658888 + inSlope: -0.9800083 + outSlope: -0.9800083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.16730273 + inSlope: -0.9112853 + outSlope: -0.9112853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.14939356 + inSlope: -0.8450644 + outSlope: -0.8450644 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.1328103 + inSlope: -0.7813413 + outSlope: -0.7813413 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.11750209 + inSlope: -0.72011614 + outSlope: -0.72011614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.103417814 + inSlope: -0.661391 + outSlope: -0.661391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.09050655 + inSlope: -0.6051651 + outSlope: -0.6051651 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.07871717 + inSlope: -0.55143726 + outSlope: -0.55143726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.067998886 + inSlope: -0.50020736 + outSlope: -0.50020736 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.058300555 + inSlope: -0.4514796 + outSlope: -0.4514796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.049571157 + inSlope: -0.40524894 + outSlope: -0.40524894 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.04175979 + inSlope: -0.36151546 + outSlope: -0.36151546 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.03481543 + inSlope: -0.32028303 + outSlope: -0.32028303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.028687 + inSlope: -0.28154963 + outSlope: -0.28154963 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.023323596 + inSlope: -0.24531385 + outSlope: -0.24531385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.018674195 + inSlope: -0.21157765 + outSlope: -0.21157765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.014687777 + inSlope: -0.18034154 + outSlope: -0.18034154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.011313319 + inSlope: -0.151604 + outSlope: -0.151604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.008499861 + inSlope: -0.12536491 + outSlope: -0.12536491 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.0061963797 + inSlope: -0.10162458 + outSlope: -0.10162458 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.004351914 + inSlope: -0.08038302 + outSlope: -0.08038302 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.002915442 + inSlope: -0.061641335 + outSlope: -0.061641335 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0018359423 + inSlope: -0.045396797 + outSlope: -0.045396797 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0010625124 + inSlope: -0.031652316 + outSlope: -0.031652316 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0005440116 + inSlope: -0.020409334 + outSlope: -0.020409334 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.00022947788 + inSlope: -0.011662049 + outSlope: -0.011662049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0000680089 + inSlope: -0.005413386 + outSlope: -0.005413386 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.000008523464 + inSlope: -0.0016662189 + outSlope: -0.0016662189 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.00041764995 + outSlope: -0.00041764995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.0016647577 + outSlope: -0.0016647577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.999966 + inSlope: -0.006663412 + outSlope: -0.006663412 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.999728 + inSlope: -0.021657912 + outSlope: -0.021657912 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.999082 + inSlope: -0.046648264 + outSlope: -0.046648264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.997824 + inSlope: -0.081632994 + outSlope: -0.081632994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.99575007 + inSlope: -0.12661359 + outSlope: -0.12661359 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9926561 + inSlope: -0.18159145 + outSlope: -0.18159145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9883382 + inSlope: -0.2465638 + outSlope: -0.2465638 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9825923 + inSlope: -0.32153192 + outSlope: -0.32153192 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9752144 + inSlope: -0.40649724 + outSlope: -0.40649724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.96600056 + inSlope: -0.50145864 + outSlope: -0.50145864 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9547467 + inSlope: -0.6064143 + outSlope: -0.6064143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.94124895 + inSlope: -0.7213659 + outSlope: -0.7213659 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9253032 + inSlope: -0.8463144 + outSlope: -0.8463144 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9067055 + inSlope: -0.9812577 + outSlope: -0.9812577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8852519 + inSlope: -1.1261975 + outSlope: -1.1261975 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8607383 + inSlope: -1.2811329 + outSlope: -1.2811329 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8329607 + inSlope: -1.4460638 + outSlope: -1.4460638 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.80171525 + inSlope: -1.6209915 + outSlope: -1.6209915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.76679784 + inSlope: -1.805914 + outSlope: -1.805914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.72800446 + inSlope: -2.0008326 + outSlope: -2.0008326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.6851312 + inSlope: -2.2057467 + outSlope: -2.2057467 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.637974 + inSlope: -2.4206593 + outSlope: -2.4206593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.58632874 + inSlope: -2.6455653 + outSlope: -2.6455653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.52999175 + inSlope: -2.8498535 + outSlope: -2.8498535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.47000825 + inSlope: -2.8498535 + outSlope: -2.8498535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.41367126 + inSlope: -2.645564 + outSlope: -2.645564 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.3620261 + inSlope: -2.4206593 + outSlope: -2.4206593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.31486875 + inSlope: -2.2057476 + outSlope: -2.2057476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.27199548 + inSlope: -2.0008326 + outSlope: -2.0008326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.23320216 + inSlope: -1.8059139 + outSlope: -1.8059139 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.19828475 + inSlope: -1.6209915 + outSlope: -1.6209915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.16703928 + inSlope: -1.4460647 + outSlope: -1.4460647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.13926172 + inSlope: -1.2811337 + outSlope: -1.2811337 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.11474806 + inSlope: -1.1261971 + outSlope: -1.1261971 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.09329444 + inSlope: -0.98125684 + outSlope: -0.98125684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.07469678 + inSlope: -0.8463136 + outSlope: -0.8463136 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.058751047 + inSlope: -0.72136617 + outSlope: -0.72136617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.045253277 + inSlope: -0.60641456 + outSlope: -0.60641456 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.033999443 + inSlope: -0.50145817 + outSlope: -0.50145817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.024785578 + inSlope: -0.40649688 + outSlope: -0.40649688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.017407715 + inSlope: -0.32153207 + outSlope: -0.32153207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.011661828 + inSlope: -0.24656388 + outSlope: -0.24656388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0073438883 + inSlope: -0.18159157 + outSlope: -0.18159157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0042499304 + inSlope: -0.12661365 + outSlope: -0.12661365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0021759868 + inSlope: -0.08163296 + outSlope: -0.08163296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.00091797113 + inSlope: -0.046648197 + outSlope: -0.046648197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.000271976 + inSlope: -0.021657925 + outSlope: -0.021657925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.000033974648 + inSlope: -0.006663415 + outSlope: -0.006663415 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.0016647585 + outSlope: -0.0016647585 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.000008761883 + outSlope: -0.000008761883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9999998 + inSlope: -0.00006863475 + outSlope: -0.00006863475 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9999972 + inSlope: -0.0003402531 + outSlope: -0.0003402531 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99998593 + inSlope: -0.001019299 + outSlope: -0.001019299 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9999556 + inSlope: -0.0023116765 + outSlope: -0.0023116765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9998916 + inSlope: -0.00442037 + outSlope: -0.00442037 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9997752 + inSlope: -0.007548361 + outSlope: -0.007548361 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9995835 + inSlope: -0.011900099 + outSlope: -0.011900099 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.99928945 + inSlope: -0.017678559 + outSlope: -0.017678559 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9988619 + inSlope: -0.025091104 + outSlope: -0.025091104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9982653 + inSlope: -0.034339286 + outSlope: -0.034339286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9974603 + inSlope: -0.045627505 + outSlope: -0.045627505 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.996403 + inSlope: -0.05916024 + outSlope: -0.05916024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9950456 + inSlope: -0.07513896 + outSlope: -0.07513896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9933361 + inSlope: -0.093769655 + outSlope: -0.093769655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.99121827 + inSlope: -0.11525679 + outSlope: -0.11525679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9886317 + inSlope: -0.13980602 + outSlope: -0.13980602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9855119 + inSlope: -0.16761771 + outSlope: -0.16761771 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9817902 + inSlope: -0.19889629 + outSlope: -0.19889629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9773937 + inSlope: -0.23384875 + outSlope: -0.23384875 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.97224534 + inSlope: -0.27267557 + outSlope: -0.27267557 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.96626407 + inSlope: -0.31558272 + outSlope: -0.31558272 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.9593644 + inSlope: -0.36277395 + outSlope: -0.36277395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.95145696 + inSlope: -0.41445303 + outSlope: -0.41445303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.94244796 + inSlope: -0.47082436 + outSlope: -0.47082436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.93223965 + inSlope: -0.5320904 + outSlope: -0.5320904 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.92073 + inSlope: -0.59845877 + outSlope: -0.59845877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.9078128 + inSlope: -0.67013 + outSlope: -0.67013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.8933777 + inSlope: -0.7473076 + outSlope: -0.7473076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.8773104 + inSlope: -0.8301976 + outSlope: -0.8301976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8594921 + inSlope: -0.91900516 + outSlope: -0.91900516 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8398 + inSlope: -1.0139314 + outSlope: -1.0139314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8181072 + inSlope: -1.1151809 + outSlope: -1.1151809 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.79428244 + inSlope: -1.2229605 + outSlope: -1.2229605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.7681904 + inSlope: -1.337471 + outSlope: -1.337471 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.73969173 + inSlope: -1.4589155 + outSlope: -1.4589155 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.70864284 + inSlope: -1.587502 + outSlope: -1.587502 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.67489576 + inSlope: -1.7234311 + outSlope: -1.7234311 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.63829875 + inSlope: -1.8669083 + outSlope: -1.8669083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.59869546 + inSlope: -2.0181398 + outSlope: -2.0181398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.5559256 + inSlope: -2.1773243 + outSlope: -2.1773243 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.509825 + inSlope: -2.3446693 + outSlope: -2.3446693 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.46022487 + inSlope: -2.5203772 + outSlope: -2.5203772 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.4069525 + inSlope: -2.7046542 + outSlope: -2.7046542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.34983087 + inSlope: -2.897705 + outSlope: -2.897705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.28867888 + inSlope: -3.099729 + outSlope: -3.099729 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.22331119 + inSlope: -3.3109326 + outSlope: -3.3109326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.15353864 + inSlope: -3.5315223 + outSlope: -3.5315223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.079167485 + inSlope: -3.7616987 + outSlope: -3.7616987 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -3.8792086 + outSlope: -3.8792086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -3.879207 + outSlope: -3.879207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9208325 + inSlope: -3.7616968 + outSlope: -3.7616968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.84646136 + inSlope: -3.5315206 + outSlope: -3.5315206 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.7766888 + inSlope: -3.310936 + outSlope: -3.310936 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.7113211 + inSlope: -3.099732 + outSlope: -3.099732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.65016913 + inSlope: -2.8977034 + outSlope: -2.8977034 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.5930475 + inSlope: -2.7046528 + outSlope: -2.7046528 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.53977513 + inSlope: -2.5203762 + outSlope: -2.5203762 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.490175 + inSlope: -2.3446712 + outSlope: -2.3446712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.44407427 + inSlope: -2.1773257 + outSlope: -2.1773257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.40130454 + inSlope: -2.0181394 + outSlope: -2.0181394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.36170125 + inSlope: -1.8669077 + outSlope: -1.8669077 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.32510424 + inSlope: -1.7234304 + outSlope: -1.7234304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.29135716 + inSlope: -1.5875009 + outSlope: -1.5875009 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.26030827 + inSlope: -1.4589144 + outSlope: -1.4589144 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.23180962 + inSlope: -1.3374715 + outSlope: -1.3374715 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.20571762 + inSlope: -1.2229614 + outSlope: -1.2229614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.18189281 + inSlope: -1.1151814 + outSlope: -1.1151814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.1602 + inSlope: -1.0139314 + outSlope: -1.0139314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.14050788 + inSlope: -0.919006 + outSlope: -0.919006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.122689545 + inSlope: -0.8301984 + outSlope: -0.8301984 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.10662222 + inSlope: -0.7473072 + outSlope: -0.7473072 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.092187226 + inSlope: -0.6701291 + outSlope: -0.6701291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.079270005 + inSlope: -0.59845835 + outSlope: -0.59845835 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.06776035 + inSlope: -0.5320904 + outSlope: -0.5320904 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.05755204 + inSlope: -0.47082436 + outSlope: -0.47082436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.048543036 + inSlope: -0.41445333 + outSlope: -0.41445333 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.040635586 + inSlope: -0.36277375 + outSlope: -0.36277375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.03373593 + inSlope: -0.31558222 + outSlope: -0.31558222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.027754664 + inSlope: -0.27267575 + outSlope: -0.27267575 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.022606313 + inSlope: -0.23384893 + outSlope: -0.23384893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.018209815 + inSlope: -0.19889629 + outSlope: -0.19889629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.014488101 + inSlope: -0.16761637 + outSlope: -0.16761637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.011368334 + inSlope: -0.13980594 + outSlope: -0.13980594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.008781731 + inSlope: -0.11525951 + outSlope: -0.11525951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.006663859 + inSlope: -0.093769714 + outSlope: -0.093769714 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.0049543977 + inSlope: -0.075137556 + outSlope: -0.075137556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.003597021 + inSlope: -0.059160262 + outSlope: -0.059160262 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.0025396943 + inSlope: -0.045627527 + outSlope: -0.045627527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.001734674 + inSlope: -0.034339253 + outSlope: -0.034339253 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.0011380911 + inSlope: -0.025091082 + outSlope: -0.025091082 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.00071054697 + inSlope: -0.017678566 + outSlope: -0.017678566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.00041651726 + inSlope: -0.011900103 + outSlope: -0.011900103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.00022482872 + inSlope: -0.0075483657 + outSlope: -0.0075483657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.00010842085 + inSlope: -0.0044203717 + outSlope: -0.0044203717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.00004440546 + inSlope: -0.0023116756 + outSlope: -0.0023116756 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.000014066696 + inSlope: -0.0010192974 + outSlope: -0.0010192974 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0000028014183 + inSlope: -0.0003402533 + outSlope: -0.0003402533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00000017881393 + inSlope: -0.00006863478 + outSlope: -0.00006863478 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.000008761887 + outSlope: -0.000008761887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.000067174435 + outSlope: -0.000067174435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9999986 + inSlope: -0.00054469705 + outSlope: -0.00054469705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99997777 + inSlope: -0.0027205644 + outSlope: -0.0027205644 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9998876 + inSlope: -0.008158773 + outSlope: -0.008158773 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99964476 + inSlope: -0.018494872 + outSlope: -0.018494872 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9991327 + inSlope: -0.03536004 + outSlope: -0.03536004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9982015 + inSlope: -0.060383968 + outSlope: -0.060383968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99666804 + inSlope: -0.09519787 + outSlope: -0.09519787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.99431586 + inSlope: -0.14143723 + outSlope: -0.14143723 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9908951 + inSlope: -0.20073321 + outSlope: -0.20073321 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.98612267 + inSlope: -0.27471572 + outSlope: -0.27471572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9796822 + inSlope: -0.36501712 + outSlope: -0.36501712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.971224 + inSlope: -0.4732717 + outSlope: -0.4732717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.960365 + inSlope: -0.6011102 + outSlope: -0.6011102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9466889 + inSlope: -0.7501645 + outSlope: -0.7501645 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.92974603 + inSlope: -0.922066 + outSlope: -0.922066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.90905356 + inSlope: -1.1184452 + outSlope: -1.1184452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8840952 + inSlope: -1.3409373 + outSlope: -1.3409373 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8543214 + inSlope: -1.5911732 + outSlope: -1.5911732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8191494 + inSlope: -1.8707855 + outSlope: -1.8707855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.7779628 + inSlope: -2.1814046 + outSlope: -2.1814046 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.73011243 + inSlope: -2.5246618 + outSlope: -2.5246618 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.67491543 + inSlope: -2.9021916 + outSlope: -2.9021916 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.6116556 + inSlope: -3.3156257 + outSlope: -3.3156257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.53958374 + inSlope: -3.7053654 + outSlope: -3.7053654 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.46041626 + inSlope: -3.7053654 + outSlope: -3.7053654 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.3883444 + inSlope: -3.3156252 + outSlope: -3.3156252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.3250847 + inSlope: -2.902193 + outSlope: -2.902193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.26988745 + inSlope: -2.524662 + outSlope: -2.524662 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.22203714 + inSlope: -2.1814032 + outSlope: -2.1814032 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.18085063 + inSlope: -1.8707855 + outSlope: -1.8707855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.14567858 + inSlope: -1.5911732 + outSlope: -1.5911732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.11590481 + inSlope: -1.3409381 + outSlope: -1.3409381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.090946436 + inSlope: -1.1184461 + outSlope: -1.1184461 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.07025391 + inSlope: -0.9220645 + outSlope: -0.9220645 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.05331111 + inSlope: -0.75016356 + outSlope: -0.75016356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.039635003 + inSlope: -0.6011107 + outSlope: -0.6011107 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.02877599 + inSlope: -0.47327185 + outSlope: -0.47327185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.020317793 + inSlope: -0.3650173 + outSlope: -0.3650173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.013877332 + inSlope: -0.27471548 + outSlope: -0.27471548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.0091049075 + inSlope: -0.20073304 + outSlope: -0.20073304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.0056841373 + inSlope: -0.14143729 + outSlope: -0.14143729 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0033319592 + inSlope: -0.0951979 + outSlope: -0.0951979 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0017985106 + inSlope: -0.060384005 + outSlope: -0.060384005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0008673072 + inSlope: -0.035360053 + outSlope: -0.035360053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.00035524368 + inSlope: -0.018494865 + outSlope: -0.018494865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.00011241436 + inSlope: -0.00815876 + outSlope: -0.00815876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.000022232533 + inSlope: -0.002720566 + outSlope: -0.002720566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.0000013709068 + inSlope: -0.0005446973 + outSlope: -0.0005446973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.000067174464 + outSlope: -0.000067174464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1 + inSlope: -0.0000029206276 + outSlope: -0.0000029206276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9999999 + inSlope: -0.000020444391 + outSlope: -0.000020444391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99999917 + inSlope: -0.00008615852 + outSlope: -0.00008615852 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99999636 + inSlope: -0.00025117394 + outSlope: -0.00025117394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9999889 + inSlope: -0.00058558583 + outSlope: -0.00058558583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99997246 + inSlope: -0.0011857747 + outSlope: -0.0011857747 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9999405 + inSlope: -0.0021671061 + outSlope: -0.0021671061 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.999884 + inSlope: -0.0036639275 + outSlope: -0.0036639275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.99979097 + inSlope: -0.0058310316 + outSlope: -0.0058310316 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.999646 + inSlope: -0.008846583 + outSlope: -0.008846583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.9994299 + inSlope: -0.012909174 + outSlope: -0.012909174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9991191 + inSlope: -0.018234942 + outSlope: -0.018234942 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9986856 + inSlope: -0.025064817 + outSlope: -0.025064817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.99809605 + inSlope: -0.03366023 + outSlope: -0.03366023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9973117 + inSlope: -0.0443001 + outSlope: -0.0443001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9962879 + inSlope: -0.057285167 + outSlope: -0.057285167 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.99497354 + inSlope: -0.0729412 + outSlope: -0.0729412 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9933107 + inSlope: -0.09161137 + outSlope: -0.09161137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9912343 + inSlope: -0.11365765 + outSlope: -0.11365765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9886716 + inSlope: -0.13946724 + outSlope: -0.13946724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.98554176 + inSlope: -0.16944614 + outSlope: -0.16944614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.98175544 + inSlope: -0.20401892 + outSlope: -0.20401892 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.97721446 + inSlope: -0.24363285 + outSlope: -0.24363285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.97181123 + inSlope: -0.28875822 + outSlope: -0.28875822 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.9654284 + inSlope: -0.3398853 + outSlope: -0.3398853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.9579384 + inSlope: -0.39752388 + outSlope: -0.39752388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.94920295 + inSlope: -0.46220195 + outSlope: -0.46220195 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.93907297 + inSlope: -0.53447145 + outSlope: -0.53447145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9273878 + inSlope: -0.6149063 + outSlope: -0.6149063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.91397476 + inSlope: -0.70410085 + outSlope: -0.70410085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.898649 + inSlope: -0.80266774 + outSlope: -0.80266774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.88121283 + inSlope: -0.91124064 + outSlope: -0.91124064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8614555 + inSlope: -1.0304767 + outSlope: -1.0304767 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.8391525 + inSlope: -1.1610521 + outSlope: -1.1610521 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.8140656 + inSlope: -1.3036666 + outSlope: -1.3036666 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.78594166 + inSlope: -1.4590353 + outSlope: -1.4590353 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.75451314 + inSlope: -1.6278958 + outSlope: -1.6278958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.71949697 + inSlope: -1.811012 + outSlope: -1.811012 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.6805943 + inSlope: -2.009162 + outSlope: -2.009162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.6374903 + inSlope: -2.223146 + outSlope: -2.223146 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.5898536 + inSlope: -2.4537897 + outSlope: -2.4537897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.53733563 + inSlope: -2.7019367 + outSlope: -2.7019367 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.4795705 + inSlope: -2.9684455 + outSlope: -2.9684455 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.41617465 + inSlope: -3.2542043 + outSlope: -3.2542043 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.3467459 + inSlope: -3.5601187 + outSlope: -3.5601187 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.27086353 + inSlope: -3.8871138 + outSlope: -3.8871138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.18808806 + inSlope: -4.236139 + outSlope: -4.236139 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.097959995 + inSlope: -4.60816 + outSlope: -4.60816 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -4.800042 + outSlope: -4.800042 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -4.80004 + outSlope: -4.80004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.90204 + inSlope: -4.608157 + outSlope: -4.608157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.81191194 + inSlope: -4.2361364 + outSlope: -4.2361364 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.72913647 + inSlope: -3.8871174 + outSlope: -3.8871174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.6532541 + inSlope: -3.560122 + outSlope: -3.560122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.58382535 + inSlope: -3.2542024 + outSlope: -3.2542024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.5204295 + inSlope: -2.9684439 + outSlope: -2.9684439 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.46266437 + inSlope: -2.7019355 + outSlope: -2.7019355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.41014642 + inSlope: -2.4537919 + outSlope: -2.4537919 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.3625096 + inSlope: -2.2231476 + outSlope: -2.2231476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.31940567 + inSlope: -2.0091612 + outSlope: -2.0091612 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.28050303 + inSlope: -1.8110113 + outSlope: -1.8110113 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.24548686 + inSlope: -1.6278951 + outSlope: -1.6278951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.21405834 + inSlope: -1.4590342 + outSlope: -1.4590342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.18593442 + inSlope: -1.3036655 + outSlope: -1.3036655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.16084749 + inSlope: -1.1610522 + outSlope: -1.1610522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.13854456 + inSlope: -1.0304775 + outSlope: -1.0304775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.11878717 + inSlope: -0.9112414 + outSlope: -0.9112414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.10135102 + inSlope: -0.80266774 + outSlope: -0.80266774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.08602524 + inSlope: -0.7041018 + outSlope: -0.7041018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.07261217 + inSlope: -0.61490726 + outSlope: -0.61490726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.060926974 + inSlope: -0.53447074 + outSlope: -0.53447074 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.050797045 + inSlope: -0.4622009 + outSlope: -0.4622009 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.042061627 + inSlope: -0.39752358 + outSlope: -0.39752358 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.034571588 + inSlope: -0.3398853 + outSlope: -0.3398853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.028188765 + inSlope: -0.28875822 + outSlope: -0.28875822 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.022785544 + inSlope: -0.24363303 + outSlope: -0.24363303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.018244565 + inSlope: -0.2040188 + outSlope: -0.2040188 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.014458239 + inSlope: -0.16944587 + outSlope: -0.16944587 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.011328399 + inSlope: -0.13946733 + outSlope: -0.13946733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.0087656975 + inSlope: -0.11365774 + outSlope: -0.11365774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.00668931 + inSlope: -0.09161137 + outSlope: -0.09161137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.0050264597 + inSlope: -0.07294124 + outSlope: -0.07294124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.0037121177 + inSlope: -0.057285145 + outSlope: -0.057285145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.0026882887 + inSlope: -0.044300027 + outSlope: -0.044300027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.0019039512 + inSlope: -0.033660248 + outSlope: -0.033660248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.0013144016 + inSlope: -0.025064837 + outSlope: -0.025064837 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.00088089705 + inSlope: -0.018234946 + outSlope: -0.018234946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.0005701184 + inSlope: -0.01290918 + outSlope: -0.01290918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.00035399199 + inSlope: -0.008846574 + outSlope: -0.008846574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.00020903349 + inSlope: -0.0058310255 + outSlope: -0.0058310255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.00011599064 + inSlope: -0.0036639292 + outSlope: -0.0036639292 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.000059485435 + inSlope: -0.0021671066 + outSlope: -0.0021671066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.000027537346 + inSlope: -0.0011857754 + outSlope: -0.0011857754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.000011086464 + inSlope: -0.0005855861 + outSlope: -0.0005855861 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0000036358833 + inSlope: -0.0002511739 + outSlope: -0.0002511739 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.000000834465 + inSlope: -0.000086158354 + outSlope: -0.000086158354 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.00000011920929 + inSlope: -0.000020444404 + outSlope: -0.000020444404 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0 + inSlope: -0.000002920629 + outSlope: -0.000002920629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.0000029206276 + outSlope: -0.0000029206276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.99999994 + inSlope: -0.000043809414 + outSlope: -0.000043809414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9999982 + inSlope: -0.00033587214 + outSlope: -0.00033587214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99998623 + inSlope: -0.001377076 + outSlope: -0.001377076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.999942 + inSlope: -0.003999799 + outSlope: -0.003999799 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.999823 + inSlope: -0.009370834 + outSlope: -0.009370834 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9995595 + inSlope: -0.018986998 + outSlope: -0.018986998 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.999048 + inSlope: -0.034681 + outSlope: -0.034681 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.998144 + inSlope: -0.05861992 + outSlope: -0.05861992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.99665534 + inSlope: -0.09330089 + outSlope: -0.09330089 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9943358 + inSlope: -0.14155117 + outSlope: -0.14155117 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.99087775 + inSlope: -0.20653802 + outSlope: -0.20653802 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.98590565 + inSlope: -0.2917605 + outSlope: -0.2917605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.97896916 + inSlope: -0.40104437 + outSlope: -0.40104437 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9695365 + inSlope: -0.5385534 + outSlope: -0.5385534 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9569874 + inSlope: -0.70878696 + outSlope: -0.70878696 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9406064 + inSlope: -0.9165715 + outSlope: -0.9165715 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9195763 + inSlope: -1.1670709 + outSlope: -1.1670709 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.89297086 + inSlope: -1.4657819 + outSlope: -1.4657819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8597485 + inSlope: -1.8185296 + outSlope: -1.8185296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.81874514 + inSlope: -2.2314758 + outSlope: -2.2314758 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.7686678 + inSlope: -2.7111177 + outSlope: -2.7111177 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.7080873 + inSlope: -3.2642822 + outSlope: -3.2642822 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.63543177 + inSlope: -3.898129 + outSlope: -3.898129 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.54898 + inSlope: -4.5180902 + outSlope: -4.5180902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.45102 + inSlope: -4.5180902 + outSlope: -4.5180902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.36456823 + inSlope: -3.8981285 + outSlope: -3.8981285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.2919128 + inSlope: -3.2642817 + outSlope: -3.2642817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.23133212 + inSlope: -2.7111177 + outSlope: -2.7111177 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.1812548 + inSlope: -2.2314758 + outSlope: -2.2314758 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.14025152 + inSlope: -1.8185296 + outSlope: -1.8185296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.10702914 + inSlope: -1.4657819 + outSlope: -1.4657819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.08042371 + inSlope: -1.1670717 + outSlope: -1.1670717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.059393585 + inSlope: -0.9165711 + outSlope: -0.9165711 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.04301262 + inSlope: -0.70878583 + outSlope: -0.70878583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.030463517 + inSlope: -0.5385538 + outSlope: -0.5385538 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.021030843 + inSlope: -0.4010447 + outSlope: -0.4010447 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.014094353 + inSlope: -0.29176062 + outSlope: -0.29176062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.009122252 + inSlope: -0.20653811 + outSlope: -0.20653811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.0056642294 + inSlope: -0.14155103 + outSlope: -0.14155103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.003344655 + inSlope: -0.09330079 + outSlope: -0.09330079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.001856029 + inSlope: -0.058619946 + outSlope: -0.058619946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0009520054 + inSlope: -0.034681007 + outSlope: -0.034681007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.00044047832 + inSlope: -0.01898701 + outSlope: -0.01898701 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0001770258 + inSlope: -0.009370838 + outSlope: -0.009370838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.00005799532 + inSlope: -0.003999798 + outSlope: -0.003999798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.000013768673 + inSlope: -0.0013770733 + outSlope: -0.0013770733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0000017881393 + inSlope: -0.00033587235 + outSlope: -0.00033587235 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.000000059604645 + inSlope: -0.000043809436 + outSlope: -0.000043809436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.000002920629 + outSlope: -0.000002920629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.02517581 + outSlope: -0.02517581 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9994862 + inSlope: -0.050337017 + outSlope: -0.050337017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9979454 + inSlope: -0.100624375 + outSlope: -0.100624375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9953791 + inSlope: -0.15080807 + outSlope: -0.15080807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99179 + inSlope: -0.200834 + outSlope: -0.200834 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9871818 + inSlope: -0.25065553 + outSlope: -0.25065553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.98155916 + inSlope: -0.30022004 + outSlope: -0.30022004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9749279 + inSlope: -0.34947503 + outSlope: -0.34947503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9672949 + inSlope: -0.3983707 + outSlope: -0.3983707 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9586679 + inSlope: -0.44685882 + outSlope: -0.44685882 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.94905573 + inSlope: -0.4948858 + outSlope: -0.4948858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.93846846 + inSlope: -0.5424044 + outSlope: -0.5424044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9269168 + inSlope: -0.5893667 + outSlope: -0.5893667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9144127 + inSlope: -0.63572407 + outSlope: -0.63572407 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.90096885 + inSlope: -0.68142754 + outSlope: -0.68142754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8865993 + inSlope: -0.7264291 + outSlope: -0.7264291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8713187 + inSlope: -0.7706848 + outSlope: -0.7706848 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8551428 + inSlope: -0.8141496 + outSlope: -0.8141496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8380881 + inSlope: -0.8567782 + outSlope: -0.8567782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.82017225 + inSlope: -0.898525 + outSlope: -0.898525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.8014136 + inSlope: -0.9393481 + outSlope: -0.9393481 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.7818315 + inSlope: -0.97920656 + outSlope: -0.97920656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.761446 + inSlope: -1.0180604 + outSlope: -1.0180604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.740278 + inSlope: -1.0558679 + outSlope: -1.0558679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.71834934 + inSlope: -1.0925883 + outSlope: -1.0925883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.6956826 + inSlope: -1.1281865 + outSlope: -1.1281865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.67230093 + inSlope: -1.1626265 + outSlope: -1.1626265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.64822847 + inSlope: -1.1958716 + outSlope: -1.1958716 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.6234898 + inSlope: -1.2278876 + outSlope: -1.2278876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.59811056 + inSlope: -1.2586422 + outSlope: -1.2586422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.5721167 + inSlope: -1.288104 + outSlope: -1.288104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.5455349 + inSlope: -1.3162398 + outSlope: -1.3162398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.5183926 + inSlope: -1.3430264 + outSlope: -1.3430264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.49071753 + inSlope: -1.368431 + outSlope: -1.368431 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.46253824 + inSlope: -1.3924268 + outSlope: -1.3924268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.43388373 + inSlope: -1.4149951 + outSlope: -1.4149951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.40478337 + inSlope: -1.4361098 + outSlope: -1.4361098 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.37526703 + inSlope: -1.4557495 + outSlope: -1.4557495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.34536505 + inSlope: -1.4738896 + outSlope: -1.4738896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.3151083 + inSlope: -1.4905174 + outSlope: -1.4905174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.28452754 + inSlope: -1.5056142 + outSlope: -1.5056142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.2536546 + inSlope: -1.5191622 + outSlope: -1.5191622 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.22252095 + inSlope: -1.5311514 + outSlope: -1.5311514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.19115865 + inSlope: -1.5415664 + outSlope: -1.5415664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.1595999 + inSlope: -1.5503969 + outSlope: -1.5503969 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.12787718 + inSlope: -1.5576334 + outSlope: -1.5576334 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.09602296 + inSlope: -1.5632688 + outSlope: -1.5632688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.064070225 + inSlope: -1.5673001 + outSlope: -1.5673001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.032051563 + inSlope: -1.5697212 + outSlope: -1.5697212 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1.5705273 + outSlope: -1.5705273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -1.5705266 + outSlope: -1.5705266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.96794844 + inSlope: -1.5697205 + outSlope: -1.5697205 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9359298 + inSlope: -1.5672992 + outSlope: -1.5672992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.90397704 + inSlope: -1.5632703 + outSlope: -1.5632703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.8721228 + inSlope: -1.5576348 + outSlope: -1.5576348 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.8404001 + inSlope: -1.550396 + outSlope: -1.550396 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.80884135 + inSlope: -1.5415655 + outSlope: -1.5415655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.77747905 + inSlope: -1.5311508 + outSlope: -1.5311508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.7463454 + inSlope: -1.5191646 + outSlope: -1.5191646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.71547234 + inSlope: -1.5056152 + outSlope: -1.5056152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.6848917 + inSlope: -1.4905162 + outSlope: -1.4905162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.65463495 + inSlope: -1.4738891 + outSlope: -1.4738891 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.624733 + inSlope: -1.455749 + outSlope: -1.455749 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.59521663 + inSlope: -1.4361088 + outSlope: -1.4361088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.5661163 + inSlope: -1.414994 + outSlope: -1.414994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.53746176 + inSlope: -1.3924289 + outSlope: -1.3924289 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.50928247 + inSlope: -1.368432 + outSlope: -1.368432 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.48160738 + inSlope: -1.3430254 + outSlope: -1.3430254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.4544651 + inSlope: -1.3162398 + outSlope: -1.3162398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.42788333 + inSlope: -1.2881045 + outSlope: -1.2881045 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.40188938 + inSlope: -1.2586427 + outSlope: -1.2586427 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.37651014 + inSlope: -1.2278879 + outSlope: -1.2278879 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.35177153 + inSlope: -1.1958711 + outSlope: -1.1958711 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.32769907 + inSlope: -1.1626256 + outSlope: -1.1626256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.3043174 + inSlope: -1.1281865 + outSlope: -1.1281865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.28165066 + inSlope: -1.0925883 + outSlope: -1.0925883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.259722 + inSlope: -1.0558672 + outSlope: -1.0558672 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.23855406 + inSlope: -1.0180597 + outSlope: -1.0180597 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.2181685 + inSlope: -0.97920805 + outSlope: -0.97920805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.19858634 + inSlope: -0.93934876 + outSlope: -0.93934876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.17982775 + inSlope: -0.89852417 + outSlope: -0.89852417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.1619119 + inSlope: -0.8567782 + outSlope: -0.8567782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.14485723 + inSlope: -0.81415015 + outSlope: -0.81415015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.1286813 + inSlope: -0.7706857 + outSlope: -0.7706857 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.11340064 + inSlope: -0.72642946 + outSlope: -0.72642946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.09903109 + inSlope: -0.6814265 + outSlope: -0.6814265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.08558732 + inSlope: -0.6357231 + outSlope: -0.6357231 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.07308322 + inSlope: -0.5893669 + outSlope: -0.5893669 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.061531544 + inSlope: -0.54240465 + outSlope: -0.54240465 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.05094427 + inSlope: -0.49488527 + outSlope: -0.49488527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.041332126 + inSlope: -0.44685847 + outSlope: -0.44685847 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.03270513 + inSlope: -0.39837086 + outSlope: -0.39837086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.025072098 + inSlope: -0.34947515 + outSlope: -0.34947515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.018440843 + inSlope: -0.3002202 + outSlope: -0.3002202 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.012818217 + inSlope: -0.25065568 + outSlope: -0.25065568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.008210003 + inSlope: -0.20083533 + outSlope: -0.20083533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.00462085 + inSlope: -0.15080789 + outSlope: -0.15080789 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.002054572 + inSlope: -0.10062297 + outSlope: -0.10062297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00051379204 + inSlope: -0.05033704 + outSlope: -0.05033704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.025175821 + outSlope: -0.025175821 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.050337017 + outSlope: -0.050337017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.9989727 + inSlope: -0.10057181 + outSlope: -0.10057181 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.995895 + inSlope: -0.2007318 + outSlope: -0.2007318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9907796 + inSlope: -0.30006528 + outSlope: -0.30006528 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.98364747 + inSlope: -0.39816767 + outSlope: -0.39816767 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.97452784 + inSlope: -0.49463162 + outSlope: -0.49463162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9634584 + inSlope: -0.58906424 + outSlope: -0.58906424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9504844 + inSlope: -0.6810773 + outSlope: -0.6810773 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.93565935 + inSlope: -0.7702893 + outSlope: -0.7702893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.919044 + inSlope: -0.856338 + outSlope: -0.856338 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.90070677 + inSlope: -0.93886507 + outSlope: -0.93886507 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.880723 + inSlope: -1.0175365 + outSlope: -1.0175365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.85917467 + inSlope: -1.0920272 + outSlope: -1.0920272 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.83615047 + inSlope: -1.1620283 + outSlope: -1.1620283 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.8117449 + inSlope: -1.2272577 + outSlope: -1.2272577 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.7860583 + inSlope: -1.2874424 + outSlope: -1.2874424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.7591963 + inSlope: -1.3423347 + outSlope: -1.3423347 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.7312691 + inSlope: -1.3917123 + outSlope: -1.3917123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.7023917 + inSlope: -1.4353724 + outSlope: -1.4353724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.6726825 + inSlope: -1.4731336 + outSlope: -1.4731336 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.64226377 + inSlope: -1.5048399 + outSlope: -1.5048399 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.6112605 + inSlope: -1.5303643 + outSlope: -1.5303643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.57979995 + inSlope: -1.5495999 + outSlope: -1.5495999 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.5480115 + inSlope: -1.5624667 + outSlope: -1.5624667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5160258 + inSlope: -1.5689137 + outSlope: -1.5689137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.48397422 + inSlope: -1.5689137 + outSlope: -1.5689137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.45198852 + inSlope: -1.5624664 + outSlope: -1.5624664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.4202001 + inSlope: -1.5496002 + outSlope: -1.5496002 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.38873947 + inSlope: -1.530365 + outSlope: -1.530365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.35773617 + inSlope: -1.5048394 + outSlope: -1.5048394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.32731748 + inSlope: -1.4731331 + outSlope: -1.4731331 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.29760832 + inSlope: -1.4353724 + outSlope: -1.4353724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.26873088 + inSlope: -1.3917133 + outSlope: -1.3917133 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.24080372 + inSlope: -1.3423352 + outSlope: -1.3423352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.21394163 + inSlope: -1.2874405 + outSlope: -1.2874405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.18825507 + inSlope: -1.227257 + outSlope: -1.227257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.16384953 + inSlope: -1.1620293 + outSlope: -1.1620293 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.14082533 + inSlope: -1.0920277 + outSlope: -1.0920277 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.119277 + inSlope: -1.0175369 + outSlope: -1.0175369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.09929323 + inSlope: -0.93886554 + outSlope: -0.93886554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.08095592 + inSlope: -0.8563388 + outSlope: -0.8563388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.06434059 + inSlope: -0.77028966 + outSlope: -0.77028966 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.049515545 + inSlope: -0.68107605 + outSlope: -0.68107605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.03654158 + inSlope: -0.5890631 + outSlope: -0.5890631 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.025472164 + inSlope: -0.4946319 + outSlope: -0.4946319 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.016352534 + inSlope: -0.39816883 + outSlope: -0.39816883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.009220362 + inSlope: -0.30006492 + outSlope: -0.30006492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.004104972 + inSlope: -0.20073044 + outSlope: -0.20073044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.001027286 + inSlope: -0.100571856 + outSlope: -0.100571856 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.05033704 + outSlope: -0.05033704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -10.290323 + outSlope: -10.290323 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.7899934 + inSlope: -12.382375 + outSlope: -12.382375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.49459696 + inSlope: -14.794611 + outSlope: -14.794611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.18613172 + inSlope: -14.044153 + outSlope: -14.044153 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: -0.078633785 + inSlope: -11.040623 + outSlope: -11.040623 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: -0.26450598 + inSlope: -6.860612 + outSlope: -6.860612 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: -0.3586588 + inSlope: -2.5196607 + outSlope: -2.5196607 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: -0.36734927 + inSlope: 1.1890029 + outSlope: 1.1890029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.3101281 + inSlope: 3.777382 + outSlope: 3.777382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.21317041 + inSlope: 5.0722027 + outSlope: 5.0722027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.103099346 + inSlope: 5.1674433 + outSlope: 5.1674433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.0022543669 + inSlope: 4.3421707 + outSlope: 4.3421707 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.074132085 + inSlope: 2.9664814 + outSlope: 2.9664814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.11882651 + inSlope: 1.4148178 + outSlope: 1.4148178 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.13187975 + inSlope: -0.00009393692 + outSlope: -0.00009393692 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.118822694 + inSlope: -1.0663304 + outSlope: -1.0663304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.08835608 + inSlope: -1.6847181 + outSlope: -1.6847181 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.050058663 + inSlope: -1.8582635 + outSlope: -1.8582635 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.012508571 + inSlope: -1.6664568 + outSlope: -1.6664568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.017959952 + inSlope: -1.232626 + outSlope: -1.232626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.037802696 + inSlope: -0.691724 + outSlope: -0.691724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.0461936 + inSlope: -0.16402838 + outSlope: -0.16402838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.04449773 + inSlope: 0.2621115 + outSlope: 0.2621115 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: -0.035495162 + inSlope: 0.53774005 + outSlope: 0.53774005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.022549152 + inSlope: 0.6520976 + outSlope: 0.6520976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.008878946 + inSlope: 0.6250745 + outSlope: 0.6250745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.0029640794 + inSlope: 0.49620318 + outSlope: 0.49620318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.011374235 + inSlope: 0.31294656 + outSlope: 0.31294656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.015737414 + inSlope: 0.120522365 + outSlope: 0.120522365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.016293526 + inSlope: -0.04540556 + outSlope: -0.04540556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.013884127 + inSlope: -0.16256514 + outSlope: -0.16256514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.009658217 + inSlope: -0.22263518 + outSlope: -0.22263518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.004796982 + inSlope: -0.22925332 + outSlope: -0.22925332 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.00030094385 + inSlope: -0.19444063 + outSlope: -0.19444063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: -0.0031393766 + inSlope: -0.1344553 + outSlope: -0.1344553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: -0.0051870346 + inSlope: -0.06591275 + outSlope: -0.06591275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: -0.005829692 + inSlope: -0.002815486 + outSlope: -0.002815486 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.0053019524 + inSlope: 0.04522302 + outSlope: 0.04522302 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.0039838552 + inSlope: 0.07357356 + outSlope: 0.07357356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.0022989511 + inSlope: 0.082165934 + outSlope: 0.082165934 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.0006301403 + inSlope: 0.07437515 + outSlope: 0.07437515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.000736773 + inSlope: 0.055592712 + outSlope: 0.055592712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0016389489 + inSlope: 0.031791046 + outSlope: 0.031791046 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0020343661 + inSlope: 0.008334015 + outSlope: 0.008334015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0019791126 + inSlope: -0.010790264 + outSlope: -0.010790264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0015939474 + inSlope: -0.023327023 + outSlope: -0.023327023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.001026988 + inSlope: -0.028725807 + outSlope: -0.028725807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.00042146444 + inSlope: -0.02780731 + outSlope: -0.02780731 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.000108003616 + inSlope: -0.02228878 + outSlope: -0.02228878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: -0.00048828125 + inSlope: -0.018633613 + outSlope: -0.018633613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1.0004883 + inSlope: -0.018633604 + outSlope: -0.018633604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.000108 + inSlope: -0.02228877 + outSlope: -0.02228877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99957854 + inSlope: -0.027807295 + outSlope: -0.027807295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.998973 + inSlope: -0.028725833 + outSlope: -0.028725833 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99840605 + inSlope: -0.023327053 + outSlope: -0.023327053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9980209 + inSlope: -0.010790256 + outSlope: -0.010790256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99796563 + inSlope: 0.008334008 + outSlope: 0.008334008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99836105 + inSlope: 0.03179104 + outSlope: 0.03179104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9992632 + inSlope: 0.05559269 + outSlope: 0.05559269 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.0006301 + inSlope: 0.07437523 + outSlope: 0.07437523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.002299 + inSlope: 0.08216602 + outSlope: 0.08216602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0039839 + inSlope: 0.073573545 + outSlope: 0.073573545 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.005302 + inSlope: 0.045222998 + outSlope: 0.045222998 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 1.0058297 + inSlope: -0.0028154636 + outSlope: -0.0028154636 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 1.005187 + inSlope: -0.06591273 + outSlope: -0.06591273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 1.0031394 + inSlope: -0.13445553 + outSlope: -0.13445553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.99969906 + inSlope: -0.19444071 + outSlope: -0.19444071 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.995203 + inSlope: -0.22925314 + outSlope: -0.22925314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9903418 + inSlope: -0.22263518 + outSlope: -0.22263518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9861159 + inSlope: -0.16256505 + outSlope: -0.16256505 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9837065 + inSlope: -0.04540547 + outSlope: -0.04540547 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.9842626 + inSlope: 0.12052268 + outSlope: 0.12052268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.98862576 + inSlope: 0.31294656 + outSlope: 0.31294656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.9970359 + inSlope: 0.4962029 + outSlope: 0.4962029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.008879 + inSlope: 0.6250745 + outSlope: 0.6250745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.0225492 + inSlope: 0.6520976 + outSlope: 0.6520976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 1.0354952 + inSlope: 0.53774035 + outSlope: 0.53774035 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0444977 + inSlope: 0.2621088 + outSlope: 0.2621088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.0461935 + inSlope: -0.1640285 + outSlope: -0.1640285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.0378027 + inSlope: -0.6917218 + outSlope: -0.6917218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.01796 + inSlope: -1.2326267 + outSlope: -1.2326267 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9874914 + inSlope: -1.6664568 + outSlope: -1.6664568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.94994134 + inSlope: -1.8582633 + outSlope: -1.8582633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.911644 + inSlope: -1.6847174 + outSlope: -1.6847174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.8811773 + inSlope: -1.0663297 + outSlope: -1.0663297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.86812025 + inSlope: -0.00009346008 + outSlope: -0.00009346008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.8811735 + inSlope: 1.4148183 + outSlope: 1.4148183 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9258679 + inSlope: 2.9664798 + outSlope: 2.9664798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0022542 + inSlope: 4.342172 + outSlope: 4.342172 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.1030993 + inSlope: 5.1674433 + outSlope: 5.1674433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.2131705 + inSlope: 5.072199 + outSlope: 5.072199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.3101281 + inSlope: 3.777381 + outSlope: 3.777381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 1.3673493 + inSlope: 1.1890028 + outSlope: 1.1890028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 1.3586588 + inSlope: -2.5196617 + outSlope: -2.5196617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 1.264506 + inSlope: -6.86061 + outSlope: -6.86061 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 1.078634 + inSlope: -11.04062 + outSlope: -11.04062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.81386787 + inSlope: -14.044155 + outSlope: -14.044155 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.5054027 + inSlope: -14.794611 + outSlope: -14.794611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.21000648 + inSlope: -12.382372 + outSlope: -12.382372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -10.290322 + outSlope: -10.290322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -12.382375 + outSlope: -12.382375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.7472985 + inSlope: -13.213264 + outSlope: -13.213264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.4606831 + inSlope: -10.452383 + outSlope: -10.452383 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.3206706 + inSlope: -2.835805 + outSlope: -2.835805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.34493595 + inSlope: 3.1306028 + outSlope: 3.1306028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.44845033 + inSlope: 4.7071867 + outSlope: 4.7071867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.53706604 + inSlope: 2.8784947 + outSlope: 2.8784947 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.5659399 + inSlope: 0.17424273 + outSlope: 0.17424273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.544178 + inSlope: -1.462297 + outSlope: -1.462297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.5062543 + inSlope: -1.5454438 + outSlope: -1.5454438 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.48109865 + inSlope: -0.6983278 + outSlope: -0.6983278 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.47775114 + inSlope: 0.18685582 + outSlope: 0.18685582 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.48872542 + inSlope: 0.5814065 + outSlope: 0.5814065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.501482 + inSlope: 0.46901044 + outSlope: 0.46901044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.5078687 + inSlope: 0.13377042 + outSlope: 0.13377042 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.50694203 + inSlope: -0.13402036 + outSlope: -0.13402036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.5023985 + inSlope: -0.20853715 + outSlope: -0.20853715 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.4984303 + inSlope: -0.13017666 + outSlope: -0.13017666 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.49708515 + inSlope: -0.010344867 + outSlope: -0.010344867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.49800807 + inSlope: 0.06369448 + outSlope: 0.06369448 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.49968493 + inSlope: 0.06887859 + outSlope: 0.06887859 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.50081944 + inSlope: 0.031963363 + outSlope: 0.031963363 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.50098956 + inSlope: -0.0074957777 + outSlope: -0.0074957777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.5005135 + inSlope: -0.02556717 + outSlope: -0.02556717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.499946 + inSlope: -0.011257565 + outSlope: -0.011257565 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.500054 + inSlope: -0.011257565 + outSlope: -0.011257565 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.4994865 + inSlope: -0.025567185 + outSlope: -0.025567185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.49901044 + inSlope: -0.0074958066 + outSlope: -0.0074958066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.49918056 + inSlope: 0.031963352 + outSlope: 0.031963352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.50031507 + inSlope: 0.06887865 + outSlope: 0.06887865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.5019919 + inSlope: 0.06369454 + outSlope: 0.06369454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.50291485 + inSlope: -0.010344867 + outSlope: -0.010344867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.5015697 + inSlope: -0.13017681 + outSlope: -0.13017681 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.4976015 + inSlope: -0.20853695 + outSlope: -0.20853695 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.49305797 + inSlope: -0.13402003 + outSlope: -0.13402003 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.4921313 + inSlope: 0.13377064 + outSlope: 0.13377064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.498518 + inSlope: 0.46901065 + outSlope: 0.46901065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.5112746 + inSlope: 0.5814067 + outSlope: 0.5814067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.52224886 + inSlope: 0.18685746 + outSlope: 0.18685746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.5189014 + inSlope: -0.6983264 + outSlope: -0.6983264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.49374568 + inSlope: -1.5454446 + outSlope: -1.5454446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.455822 + inSlope: -1.4622976 + outSlope: -1.4622976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.4340601 + inSlope: 0.17424327 + outSlope: 0.17424327 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.46293396 + inSlope: 2.878496 + outSlope: 2.878496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.5515497 + inSlope: 4.7071867 + outSlope: 4.7071867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.6550639 + inSlope: 3.1306014 + outSlope: 3.1306014 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.67932934 + inSlope: -2.8358114 + outSlope: -2.8358114 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.53931665 + inSlope: -10.452391 + outSlope: -10.452391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.25270134 + inSlope: -13.213264 + outSlope: -13.213264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -12.382372 + outSlope: -12.382372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.031571984 + outSlope: 0.031571984 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.0006443 + inSlope: 0.060973942 + outSlope: 0.060973942 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 1.0024887 + inSlope: 0.11653303 + outSlope: 0.11653303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 1.0054008 + inSlope: 0.16559958 + outSlope: 0.16559958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 1.0092479 + inSlope: 0.20816478 + outSlope: 0.20816478 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 1.0138973 + inSlope: 0.24423163 + outSlope: 0.24423163 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 1.0192165 + inSlope: 0.273803 + outSlope: 0.273803 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 1.0250729 + inSlope: 0.296876 + outSlope: 0.296876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.0313339 + inSlope: 0.31345055 + outSlope: 0.31345055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.0378668 + inSlope: 0.3235295 + outSlope: 0.3235295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.0445392 + inSlope: 0.32711616 + outSlope: 0.32711616 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0512185 + inSlope: 0.32419845 + outSlope: 0.32419845 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.0577718 + inSlope: 0.31478527 + outSlope: 0.31478527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 1.0640669 + inSlope: 0.29887652 + outSlope: 0.29887652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 1.0699708 + inSlope: 0.27646652 + outSlope: 0.27646652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 1.0753512 + inSlope: 0.2475642 + outSlope: 0.2475642 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 1.0800755 + inSlope: 0.2121631 + outSlope: 0.2121631 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 1.084011 + inSlope: 0.17026085 + outSlope: 0.17026085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 1.0870249 + inSlope: 0.12186617 + outSlope: 0.12186617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.0889851 + inSlope: 0.06697291 + outSlope: 0.06697291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.0897585 + inSlope: 0.0055783736 + outSlope: 0.0055783736 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.0892128 + inSlope: -0.06230578 + outSlope: -0.06230578 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0872154 + inSlope: -0.13669115 + outSlope: -0.13669115 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 1.0836335 + inSlope: -0.21757796 + outSlope: -0.21757796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.0783347 + inSlope: -0.30495748 + outSlope: -0.30495748 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.0711863 + inSlope: -0.39883232 + outSlope: -0.39883232 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 1.0620558 + inSlope: -0.4992085 + outSlope: -0.4992085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0508105 + inSlope: -0.6060821 + outSlope: -0.6060821 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.0373178 + inSlope: -0.7194493 + outSlope: -0.7194493 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.0214452 + inSlope: -0.8393158 + outSlope: -0.8393158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.00306 + inSlope: -0.9656812 + outSlope: -0.9656812 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9820296 + inSlope: -1.0985435 + outSlope: -1.0985435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9582215 + inSlope: -1.2379013 + outSlope: -1.2379013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.93150306 + inSlope: -1.3837569 + outSlope: -1.3837569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.90174156 + inSlope: -1.5361099 + outSlope: -1.5361099 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.86880463 + inSlope: -1.6949593 + outSlope: -1.6949593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.8325596 + inSlope: -1.8603078 + outSlope: -1.8603078 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.79287374 + inSlope: -2.0321531 + outSlope: -2.0321531 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.7496146 + inSlope: -2.2104955 + outSlope: -2.2104955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.7026495 + inSlope: -2.3953357 + outSlope: -2.3953357 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.6518457 + inSlope: -2.5866718 + outSlope: -2.5866718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.59707093 + inSlope: -2.7845073 + outSlope: -2.7845073 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.5381924 + inSlope: -2.9888387 + outSlope: -2.9888387 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.47507757 + inSlope: -3.1996675 + outSlope: -3.1996675 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.4075938 + inSlope: -3.4169927 + outSlope: -3.4169927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.33560854 + inSlope: -3.6408157 + outSlope: -3.6408157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.25898892 + inSlope: -3.8711379 + outSlope: -3.8711379 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.17760277 + inSlope: -4.107955 + outSlope: -4.107955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.091317356 + inSlope: -4.3512697 + outSlope: -4.3512697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -4.4745526 + outSlope: -4.4745526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -4.4745507 + outSlope: -4.4745507 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.90868264 + inSlope: -4.351268 + outSlope: -4.351268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.82239723 + inSlope: -4.107953 + outSlope: -4.107953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.7410111 + inSlope: -3.8711414 + outSlope: -3.8711414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.66439146 + inSlope: -3.640819 + outSlope: -3.640819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.5924062 + inSlope: -3.4169908 + outSlope: -3.4169908 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.52492243 + inSlope: -3.1996655 + outSlope: -3.1996655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.4618076 + inSlope: -2.9888377 + outSlope: -2.9888377 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.40292907 + inSlope: -2.7845092 + outSlope: -2.7845092 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.3481542 + inSlope: -2.5866737 + outSlope: -2.5866737 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.29735053 + inSlope: -2.3953354 + outSlope: -2.3953354 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.2503854 + inSlope: -2.210495 + outSlope: -2.210495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.20712626 + inSlope: -2.0321524 + outSlope: -2.0321524 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.16744041 + inSlope: -1.8603065 + outSlope: -1.8603065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.13119537 + inSlope: -1.694958 + outSlope: -1.694958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.098258436 + inSlope: -1.5361106 + outSlope: -1.5361106 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.068497 + inSlope: -1.3837581 + outSlope: -1.3837581 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.041778505 + inSlope: -1.2379018 + outSlope: -1.2379018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.017970383 + inSlope: -1.0985435 + outSlope: -1.0985435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.0030599833 + inSlope: -0.9656805 + outSlope: -0.9656805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.021445155 + inSlope: -0.83931506 + outSlope: -0.83931506 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.037317753 + inSlope: -0.71945024 + outSlope: -0.71945024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.050810456 + inSlope: -0.6060827 + outSlope: -0.6060827 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: -0.062055826 + inSlope: -0.4992081 + outSlope: -0.4992081 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.071186304 + inSlope: -0.39883232 + outSlope: -0.39883232 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.07833469 + inSlope: -0.30495748 + outSlope: -0.30495748 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: -0.08363354 + inSlope: -0.2175781 + outSlope: -0.2175781 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.08721542 + inSlope: -0.13669406 + outSlope: -0.13669406 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.089212894 + inSlope: -0.062305637 + outSlope: -0.062305637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.089758515 + inSlope: 0.005581322 + outSlope: 0.005581322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.088985085 + inSlope: 0.06697294 + outSlope: 0.06697294 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: -0.08702493 + inSlope: 0.12186617 + outSlope: 0.12186617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: -0.08401096 + inSlope: 0.170261 + outSlope: 0.170261 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: -0.0800755 + inSlope: 0.21216291 + outSlope: 0.21216291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: -0.07535124 + inSlope: 0.24756385 + outSlope: 0.24756385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: -0.069970846 + inSlope: 0.27646673 + outSlope: 0.27646673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: -0.06406689 + inSlope: 0.29887673 + outSlope: 0.29887673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.057771802 + inSlope: 0.3147854 + outSlope: 0.3147854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.05121851 + inSlope: 0.32419857 + outSlope: 0.32419857 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.044539213 + inSlope: 0.3271158 + outSlope: 0.3271158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.03786683 + inSlope: 0.32352927 + outSlope: 0.32352927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.031333923 + inSlope: 0.31345066 + outSlope: 0.31345066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: -0.025072932 + inSlope: 0.2968761 + outSlope: 0.2968761 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: -0.019216537 + inSlope: 0.2738031 + outSlope: 0.2738031 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: -0.0138973 + inSlope: 0.24423176 + outSlope: 0.24423176 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: -0.009247899 + inSlope: 0.20816463 + outSlope: 0.20816463 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: -0.005400777 + inSlope: 0.16559939 + outSlope: 0.16559939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: -0.0024887323 + inSlope: 0.1165331 + outSlope: 0.1165331 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.0006443262 + inSlope: 0.060973972 + outSlope: 0.060973972 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0.031572 + outSlope: 0.031572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.060976863 + outSlope: 0.060976863 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.0012444 + inSlope: 0.1132853 + outSlope: 0.1132853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 1.0046239 + inSlope: 0.20491415 + outSlope: 0.20491415 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 1.0096083 + inSlope: 0.27055526 + outSlope: 0.27055526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 1.015667 + inSlope: 0.31020275 + outSlope: 0.31020275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 1.0222696 + inSlope: 0.32386544 + outSlope: 0.32386544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 1.028886 + inSlope: 0.31153747 + outSlope: 0.31153747 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 1.0349854 + inSlope: 0.27321887 + outSlope: 0.27321887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.0400378 + inSlope: 0.20891252 + outSlope: 0.20891252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.0435125 + inSlope: 0.11861834 + outSlope: 0.11861834 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.0448793 + inSlope: 0.002333559 + outSlope: 0.002333559 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0436077 + inSlope: -0.13994186 + outSlope: -0.13994186 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.0391674 + inSlope: -0.30820513 + outSlope: -0.30820513 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 1.0310279 + inSlope: -0.5024587 + outSlope: -0.5024587 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 1.0186589 + inSlope: -0.7227005 + outSlope: -0.7227005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 1.0015299 + inSlope: -0.96892893 + outSlope: -0.96892893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9791108 + inSlope: -1.241148 + outSlope: -1.241148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9508708 + inSlope: -1.5393589 + outSlope: -1.5393589 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9162798 + inSlope: -1.8635569 + outSlope: -1.8635569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8748073 + inSlope: -2.2137444 + outSlope: -2.2137444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.82592285 + inSlope: -2.5899215 + outSlope: -2.5899215 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.7690962 + inSlope: -2.992088 + outSlope: -2.992088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.70379686 + inSlope: -3.4202423 + outSlope: -3.4202423 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.6294944 + inSlope: -3.874384 + outSlope: -3.874384 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5456587 + inSlope: -4.291254 + outSlope: -4.291254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.4543413 + inSlope: -4.291254 + outSlope: -4.291254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.37050557 + inSlope: -3.874385 + outSlope: -3.874385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.2962032 + inSlope: -3.4202418 + outSlope: -3.4202418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.23090374 + inSlope: -2.9920864 + outSlope: -2.9920864 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.1740771 + inSlope: -2.589922 + outSlope: -2.589922 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.1251927 + inSlope: -2.2137446 + outSlope: -2.2137446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.08372021 + inSlope: -1.8635569 + outSlope: -1.8635569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.049129188 + inSlope: -1.5393584 + outSlope: -1.5393584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.020889282 + inSlope: -1.2411504 + outSlope: -1.2411504 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: -0.0015300512 + inSlope: -0.9689287 + outSlope: -0.9689287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: -0.018658876 + inSlope: -0.722698 + outSlope: -0.722698 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: -0.031027913 + inSlope: -0.50245917 + outSlope: -0.50245917 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.039167404 + inSlope: -0.30820522 + outSlope: -0.30820522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.04360771 + inSlope: -0.13994193 + outSlope: -0.13994193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.044879317 + inSlope: 0.0023334846 + outSlope: 0.0023334846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.043512464 + inSlope: 0.118618324 + outSlope: 0.118618324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.04003775 + inSlope: 0.20891258 + outSlope: 0.20891258 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: -0.034985423 + inSlope: 0.273219 + outSlope: 0.273219 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: -0.02888596 + inSlope: 0.31153765 + outSlope: 0.31153765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: -0.022269607 + inSlope: 0.32386562 + outSlope: 0.32386562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: -0.015666962 + inSlope: 0.31020248 + outSlope: 0.31020248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: -0.009608269 + inSlope: 0.27055496 + outSlope: 0.27055496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: -0.00462389 + inSlope: 0.20491424 + outSlope: 0.20491424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.0012444258 + inSlope: 0.113285355 + outSlope: 0.113285355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0.060976893 + outSlope: 0.060976893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.055123925 + outSlope: -0.055123925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.998875 + inSlope: -0.031748682 + outSlope: -0.031748682 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99870414 + inSlope: -0.009011596 + outSlope: -0.009011596 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9985072 + inSlope: -0.010382831 + outSlope: -0.010382831 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99828035 + inSlope: -0.011959969 + outSlope: -0.011959969 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.99801904 + inSlope: -0.0137766 + outSlope: -0.0137766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99771804 + inSlope: -0.01586923 + outSlope: -0.01586923 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.9973713 + inSlope: -0.018281672 + outSlope: -0.018281672 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.99697185 + inSlope: -0.021060647 + outSlope: -0.021060647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9965117 + inSlope: -0.024260186 + outSlope: -0.024260186 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.99598163 + inSlope: -0.027946029 + outSlope: -0.027946029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.99537104 + inSlope: -0.03219262 + outSlope: -0.03219262 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.99466765 + inSlope: -0.037083216 + outSlope: -0.037083216 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.99385744 + inSlope: -0.042718545 + outSlope: -0.042718545 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.99292403 + inSlope: -0.049211107 + outSlope: -0.049211107 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9918488 + inSlope: -0.05668795 + outSlope: -0.05668795 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.99061024 + inSlope: -0.0653023 + outSlope: -0.0653023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9891834 + inSlope: -0.07522513 + outSlope: -0.07522513 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9875398 + inSlope: -0.086656526 + outSlope: -0.086656526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9856464 + inSlope: -0.0998241 + outSlope: -0.0998241 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9834654 + inSlope: -0.11499093 + outSlope: -0.11499093 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.9809529 + inSlope: -0.13246512 + outSlope: -0.13246512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.97805864 + inSlope: -0.15259399 + outSlope: -0.15259399 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.9747246 + inSlope: -0.17578086 + outSlope: -0.17578086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.9708839 + inSlope: -0.20249012 + outSlope: -0.20249012 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.9664597 + inSlope: -0.23325896 + outSlope: -0.23325896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.96136314 + inSlope: -0.2687052 + outSlope: -0.2687052 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.95549214 + inSlope: -0.3095351 + outSlope: -0.3095351 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.94872904 + inSlope: -0.35656887 + outSlope: -0.35656887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9409383 + inSlope: -0.4107514 + outSlope: -0.4107514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9319637 + inSlope: -0.4731667 + outSlope: -0.4731667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9216254 + inSlope: -0.5450653 + outSlope: -0.5450653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9097161 + inSlope: -0.62789 + outSlope: -0.62789 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8959972 + inSlope: -0.72329843 + outSlope: -0.72329843 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.8801937 + inSlope: -0.8332061 + outSlope: -0.8332061 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.8619888 + inSlope: -0.959815 + outSlope: -0.959815 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.8410176 + inSlope: -1.105661 + outSlope: -1.105661 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.8168598 + inSlope: -1.2736688 + outSlope: -1.2736688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.78903115 + inSlope: -1.4672058 + outSlope: -1.4672058 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.75697386 + inSlope: -1.6901536 + outSlope: -1.6901536 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.7200452 + inSlope: -1.9469762 + outSlope: -1.9469762 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.6775054 + inSlope: -2.242824 + outSlope: -2.242824 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.6285014 + inSlope: -2.5836291 + outSlope: -2.5836291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.57205117 + inSlope: -2.9762173 + outSlope: -2.9762173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.5070232 + inSlope: -3.428462 + outSlope: -3.428462 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.432114 + inSlope: -3.9494276 + outSlope: -3.9494276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.34582192 + inSlope: -4.549556 + outSlope: -4.549556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.2464177 + inSlope: -5.2408733 + outSlope: -5.2408733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.13190883 + inSlope: -6.037236 + outSlope: -6.037236 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -6.463536 + outSlope: -6.463536 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -6.463533 + outSlope: -6.463533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.86809117 + inSlope: -6.037234 + outSlope: -6.037234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.7535823 + inSlope: -5.2408705 + outSlope: -5.2408705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.6541781 + inSlope: -4.5495596 + outSlope: -4.5495596 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.567886 + inSlope: -3.9494317 + outSlope: -3.9494317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.49297678 + inSlope: -3.4284601 + outSlope: -3.4284601 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.42794883 + inSlope: -2.9762158 + outSlope: -2.9762158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.37149858 + inSlope: -2.5836282 + outSlope: -2.5836282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.32249463 + inSlope: -2.242826 + outSlope: -2.242826 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.27995467 + inSlope: -1.9469774 + outSlope: -1.9469774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.24302614 + inSlope: -1.6901526 + outSlope: -1.6901526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.21096885 + inSlope: -1.4672053 + outSlope: -1.4672053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.18314022 + inSlope: -1.2736683 + outSlope: -1.2736683 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.1589824 + inSlope: -1.1056603 + outSlope: -1.1056603 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.13801122 + inSlope: -0.9598143 + outSlope: -0.9598143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.11980629 + inSlope: -0.83320725 + outSlope: -0.83320725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.104002774 + inSlope: -0.72329915 + outSlope: -0.72329915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.09028387 + inSlope: -0.6278895 + outSlope: -0.6278895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.078374624 + inSlope: -0.5450653 + outSlope: -0.5450653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.06803632 + inSlope: -0.4731664 + outSlope: -0.4731664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.059061706 + inSlope: -0.4107511 + outSlope: -0.4107511 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.05127096 + inSlope: -0.35656935 + outSlope: -0.35656935 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.04450786 + inSlope: -0.30953535 + outSlope: -0.30953535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.038636863 + inSlope: -0.26870495 + outSlope: -0.26870495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.03354031 + inSlope: -0.23325896 + outSlope: -0.23325896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.029116094 + inSlope: -0.20249012 + outSlope: -0.20249012 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.02527541 + inSlope: -0.17578098 + outSlope: -0.17578098 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.021941364 + inSlope: -0.1525939 + outSlope: -0.1525939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.019047081 + inSlope: -0.13246492 + outSlope: -0.13246492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.016534626 + inSlope: -0.11499101 + outSlope: -0.11499101 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.014353573 + inSlope: -0.099824175 + outSlope: -0.099824175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.012460172 + inSlope: -0.086656526 + outSlope: -0.086656526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.010816574 + inSlope: -0.075225174 + outSlope: -0.075225174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.009389758 + inSlope: -0.06530225 + outSlope: -0.06530225 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.008151174 + inSlope: -0.05668786 + outSlope: -0.05668786 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.0070759654 + inSlope: -0.049211137 + outSlope: -0.049211137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.0061425567 + inSlope: -0.04271858 + outSlope: -0.04271858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.0053323507 + inSlope: -0.037083223 + outSlope: -0.037083223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.0046289563 + inSlope: -0.032192633 + outSlope: -0.032192633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.0040183663 + inSlope: -0.027946 + outSlope: -0.027946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.0034883022 + inSlope: -0.024260167 + outSlope: -0.024260167 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.0030281544 + inSlope: -0.021060657 + outSlope: -0.021060657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.002628684 + inSlope: -0.018281676 + outSlope: -0.018281676 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0022819638 + inSlope: -0.015869237 + outSlope: -0.015869237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0019809604 + inSlope: -0.013776608 + outSlope: -0.013776608 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0017196536 + inSlope: -0.01195996 + outSlope: -0.01195996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0014927983 + inSlope: -0.01038282 + outSlope: -0.01038282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0012958646 + inSlope: -0.0090116 + outSlope: -0.0090116 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.0011249781 + inSlope: -0.031748697 + outSlope: -0.031748697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.05512395 + outSlope: -0.05512395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.031750143 + outSlope: -0.031750143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.99935204 + inSlope: -0.021065027 + outSlope: -0.021065027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.9991402 + inSlope: -0.012078255 + outSlope: -0.012078255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99885905 + inSlope: -0.016029865 + outSlope: -0.016029865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9984859 + inSlope: -0.021270929 + outSlope: -0.021270929 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.99799085 + inSlope: -0.028226405 + outSlope: -0.028226405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9973338 + inSlope: -0.037457045 + outSlope: -0.037457045 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.996462 + inSlope: -0.049703248 + outSlope: -0.049703248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9953051 + inSlope: -0.06595653 + outSlope: -0.06595653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9937699 + inSlope: -0.087523885 + outSlope: -0.087523885 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9917327 + inSlope: -0.11614315 + outSlope: -0.11614315 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.98902935 + inSlope: -0.15412298 + outSlope: -0.15412298 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.985442 + inSlope: -0.20452136 + outSlope: -0.20452136 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.98068154 + inSlope: -0.27139777 + outSlope: -0.27139777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9743645 + inSlope: -0.36014253 + outSlope: -0.36014253 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.96598184 + inSlope: -0.47790837 + outSlope: -0.47790837 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.95485806 + inSlope: -0.6341819 + outSlope: -0.6341819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.94009686 + inSlope: -0.8415568 + outSlope: -0.8415568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9205088 + inSlope: -1.1167419 + outSlope: -1.1167419 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8945156 + inSlope: -1.4819113 + outSlope: -1.4819113 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.8600226 + inSlope: -1.966489 + outSlope: -1.966489 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8142507 + inSlope: -2.6095207 + outSlope: -2.6095207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.7535116 + inSlope: -3.4628234 + outSlope: -3.4628234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.6729109 + inSlope: -4.5951495 + outSlope: -4.5951495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.56595445 + inSlope: -5.8522043 + outSlope: -5.8522043 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.43404555 + inSlope: -5.8522043 + outSlope: -5.8522043 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.32708907 + inSlope: -4.5951495 + outSlope: -4.5951495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.24648851 + inSlope: -3.4628234 + outSlope: -3.4628234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.18574923 + inSlope: -2.6095207 + outSlope: -2.6095207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.13997734 + inSlope: -1.9664887 + outSlope: -1.9664887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.105484426 + inSlope: -1.4819111 + outSlope: -1.4819111 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.0794912 + inSlope: -1.1167419 + outSlope: -1.1167419 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.059903145 + inSlope: -0.8415574 + outSlope: -0.8415574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.045141935 + inSlope: -0.6341817 + outSlope: -0.6341817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.03401816 + inSlope: -0.4779076 + outSlope: -0.4779076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.02563548 + inSlope: -0.36014277 + outSlope: -0.36014277 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.019318461 + inSlope: -0.27139798 + outSlope: -0.27139798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.014558017 + inSlope: -0.20452142 + outSlope: -0.20452142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.010970652 + inSlope: -0.15412305 + outSlope: -0.15412305 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.008267283 + inSlope: -0.11614305 + outSlope: -0.11614305 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.006230116 + inSlope: -0.0875238 + outSlope: -0.0875238 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.004694879 + inSlope: -0.06595656 + outSlope: -0.06595656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0035380125 + inSlope: -0.049703263 + outSlope: -0.049703263 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0026661754 + inSlope: -0.037457064 + outSlope: -0.037457064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0020091534 + inSlope: -0.028226418 + outSlope: -0.028226418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0015140772 + inSlope: -0.021270914 + outSlope: -0.021270914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0011409521 + inSlope: -0.016029846 + outSlope: -0.016029846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.000859797 + inSlope: -0.012078261 + outSlope: -0.012078261 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.0006479621 + inSlope: -0.021065036 + outSlope: -0.021065036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.031750157 + outSlope: -0.031750157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.05231428 + outSlope: 0.05231428 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.0010676 + inSlope: 0.025444508 + outSlope: 0.025444508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 1.0010386 + inSlope: -0.005233764 + outSlope: -0.005233764 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 1.000854 + inSlope: -0.013458252 + outSlope: -0.013458252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 1.0004892 + inSlope: -0.022478607 + outSlope: -0.022478607 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9999365 + inSlope: -0.031294525 + outSlope: -0.031294525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9992119 + inSlope: -0.03859901 + outSlope: -0.03859901 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99836105 + inSlope: -0.04286898 + outSlope: -0.04286898 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.99746215 + inSlope: -0.042514123 + outSlope: -0.042514123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.9966258 + inSlope: -0.036069743 + outSlope: -0.036069743 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9959899 + inSlope: -0.022452325 + outSlope: -0.022452325 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.99570936 + inSlope: -0.0012295889 + outSlope: -0.0012295889 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.99593973 + inSlope: 0.027106352 + outSlope: 0.027106352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.99681574 + inSlope: 0.060899436 + outSlope: 0.060899436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9984254 + inSlope: 0.09719117 + outSlope: 0.09719117 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 1.0007827 + inSlope: 0.13169846 + outSlope: 0.13169846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 1.0038009 + inSlope: 0.15898724 + outSlope: 0.15898724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 1.007272 + inSlope: 0.172869 + outSlope: 0.172869 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 1.0108567 + inSlope: 0.16701326 + outSlope: 0.16701326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.0140889 + inSlope: 0.13578288 + outSlope: 0.13578288 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.0163989 + inSlope: 0.07526161 + outSlope: 0.07526161 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.0171608 + inSlope: -0.015613681 + outSlope: -0.015613681 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0157616 + inSlope: -0.13401291 + outSlope: -0.13401291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 1.0116909 + inSlope: -0.27231055 + outSlope: -0.27231055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.0046469 + inSlope: -0.41757548 + outSlope: -0.41757548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.99464697 + inSlope: -0.55168927 + outSlope: -0.55168927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.982129 + inSlope: -0.65216917 + outSlope: -0.65216917 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.96802783 + inSlope: -0.693901 + outSlope: -0.693901 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.95380646 + inSlope: -0.65181327 + outSlope: -0.65181327 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9414232 + inSlope: -0.5044087 + outSlope: -0.5044087 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.93321836 + inSlope: -0.23795532 + outSlope: -0.23795532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9317107 + inSlope: 0.14904992 + outSlope: 0.14904992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.939302 + inSlope: 0.64167094 + outSlope: 0.64167094 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.95790136 + inSlope: 1.2052464 + outSlope: 1.2052464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9884958 + inSlope: 1.7838216 + outSlope: 1.7838216 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 1.0307105 + inSlope: 2.3010292 + outSlope: 2.3010292 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 1.0824153 + inSlope: 2.664154 + outSlope: 2.664154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.1394514 + inSlope: 2.771814 + outSlope: 2.771814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.1955506 + inSlope: 2.5253482 + outSlope: 2.5253482 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.2425268 + inSlope: 1.8435807 + outSlope: 1.8435807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.2707988 + inSlope: 0.6799263 + outSlope: 0.6799263 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.2702789 + inSlope: -0.959745 + outSlope: -0.959745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 1.2316256 + inSlope: -3.0007682 + outSlope: -3.0007682 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 1.1477987 + inSlope: -5.2877083 + outSlope: -5.2877083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 1.0158008 + inSlope: -7.579758 + outSlope: -7.579758 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.8384209 + inSlope: -9.556637 + outSlope: -9.556637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.6257336 + inSlope: -10.837618 + outSlope: -10.837618 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.39606875 + inSlope: -11.01522 + outSlope: -11.01522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.17613304 + inSlope: -9.70369 + outSlope: -9.70369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -8.630523 + outSlope: -8.630523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -8.630519 + outSlope: -8.630519 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.82386696 + inSlope: -9.703685 + outSlope: -9.703685 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.60393125 + inSlope: -11.015214 + outSlope: -11.015214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.3742664 + inSlope: -10.837628 + outSlope: -10.837628 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.16157907 + inSlope: -9.556646 + outSlope: -9.556646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: -0.015800834 + inSlope: -7.579754 + outSlope: -7.579754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: -0.14779866 + inSlope: -5.2877054 + outSlope: -5.2877054 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: -0.23162556 + inSlope: -3.0007668 + outSlope: -3.0007668 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.27027893 + inSlope: -0.95974207 + outSlope: -0.95974207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.27079868 + inSlope: 0.67992777 + outSlope: 0.67992777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.24252677 + inSlope: 1.8435793 + outSlope: 1.8435793 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.19555056 + inSlope: 2.5253472 + outSlope: 2.5253472 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.13945138 + inSlope: 2.7718132 + outSlope: 2.7718132 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: -0.08241534 + inSlope: 2.6641521 + outSlope: 2.6641521 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: -0.030710459 + inSlope: 2.3010273 + outSlope: 2.3010273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.011504173 + inSlope: 1.7838223 + outSlope: 1.7838223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.04209858 + inSlope: 1.205248 + outSlope: 1.205248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.060697973 + inSlope: 0.6416718 + outSlope: 0.6416718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.06828928 + inSlope: 0.14904992 + outSlope: 0.14904992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.06678164 + inSlope: -0.23795503 + outSlope: -0.23795503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.058576822 + inSlope: -0.5044084 + outSlope: -0.5044084 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.04619354 + inSlope: -0.65181434 + outSlope: -0.65181434 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.03197217 + inSlope: -0.69390154 + outSlope: -0.69390154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.017871022 + inSlope: -0.65216863 + outSlope: -0.65216863 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.0053530335 + inSlope: -0.55168927 + outSlope: -0.55168927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.0046468973 + inSlope: -0.41757548 + outSlope: -0.41757548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: -0.011690855 + inSlope: -0.27231067 + outSlope: -0.27231067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.015761614 + inSlope: -0.13401589 + outSlope: -0.13401589 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.017160892 + inSlope: -0.015613584 + outSlope: -0.015613584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.016398907 + inSlope: 0.07526461 + outSlope: 0.07526461 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.014088869 + inSlope: 0.13578296 + outSlope: 0.13578296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: -0.010856748 + inSlope: 0.16701326 + outSlope: 0.16701326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: -0.007272005 + inSlope: 0.17286912 + outSlope: 0.17286912 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: -0.003800869 + inSlope: 0.15898713 + outSlope: 0.15898713 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: -0.0007827282 + inSlope: 0.13169825 + outSlope: 0.13169825 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.0015745759 + inSlope: 0.09719123 + outSlope: 0.09719123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.003184259 + inSlope: 0.060899496 + outSlope: 0.060899496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.0040602684 + inSlope: 0.027106356 + outSlope: 0.027106356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.0042906404 + inSlope: -0.0012295847 + outSlope: -0.0012295847 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.0040100813 + inSlope: -0.02245229 + outSlope: -0.02245229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.003374219 + inSlope: -0.03606972 + outSlope: -0.03606972 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.0025378466 + inSlope: -0.042514138 + outSlope: -0.042514138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.0016389489 + inSlope: -0.042868994 + outSlope: -0.042868994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0007880926 + inSlope: -0.038599033 + outSlope: -0.038599033 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.00006347895 + inSlope: -0.03129454 + outSlope: -0.03129454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: -0.0004892349 + inSlope: -0.022478595 + outSlope: -0.022478595 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: -0.00085401535 + inSlope: -0.013458233 + outSlope: -0.013458233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: -0.0010385513 + inSlope: -0.0052337674 + outSlope: -0.0052337674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.0010676384 + inSlope: 0.02544452 + outSlope: 0.02544452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0.052314308 + outSlope: 0.052314308 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0.025444508 + outSlope: 0.025444508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 1.0005193 + inSlope: 0.005993128 + outSlope: 0.005993128 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 1.0002446 + inSlope: -0.022376386 + outSlope: -0.022376386 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.99960595 + inSlope: -0.03708175 + outSlope: -0.03708175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9987311 + inSlope: -0.03946936 + outSlope: -0.03946936 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.99799496 + inSlope: -0.018649664 + outSlope: -0.018649664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.99796987 + inSlope: 0.029835664 + outSlope: 0.029835664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.99921274 + inSlope: 0.096298955 + outSlope: 0.096298955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.0019004 + inSlope: 0.15228444 + outSlope: 0.15228444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.0054284 + inSlope: 0.15432593 + outSlope: 0.15432593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.0081995 + inSlope: 0.060083132 + outSlope: 0.060083132 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0078808 + inSlope: -0.14396062 + outSlope: -0.14396062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.0023235 + inSlope: -0.41199988 + outSlope: -0.41199988 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9910645 + inSlope: -0.62279737 + outSlope: -0.62279737 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9769032 + inSlope: -0.59915483 + outSlope: -0.59915483 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9666092 + inSlope: -0.17767793 + outSlope: -0.17767793 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.96965104 + inSlope: 0.67714846 + outSlope: 0.67714846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9942479 + inSlope: 1.7531374 + outSlope: 1.7531374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 1.0412077 + inSlope: 2.5364203 + outSlope: 2.5364203 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.0977752 + inSlope: 2.3076956 + outSlope: 2.3076956 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.1353993 + inSlope: 0.44191903 + outSlope: 0.44191903 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.1158128 + inSlope: -3.1237237 + outSlope: -3.1237237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0079005 + inSlope: -7.422173 + outSlope: -7.422173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.8128668 + inSlope: -10.285931 + outSlope: -10.285931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.5880665 + inSlope: -9.822871 + outSlope: -9.822871 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.41193348 + inSlope: -9.822871 + outSlope: -9.822871 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.1871332 + inSlope: -10.285931 + outSlope: -10.285931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.007900238 + inSlope: -7.422175 + outSlope: -7.422175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.1158129 + inSlope: -3.1237218 + outSlope: -3.1237218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.13539934 + inSlope: 0.44192326 + outSlope: 0.44192326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.09777522 + inSlope: 2.307697 + outSlope: 2.307697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: -0.04120767 + inSlope: 2.5364203 + outSlope: 2.5364203 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.0057520866 + inSlope: 1.7531382 + outSlope: 1.7531382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.030348957 + inSlope: 0.67714906 + outSlope: 0.67714906 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.03339082 + inSlope: -0.1776796 + outSlope: -0.1776796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.02309674 + inSlope: -0.59915537 + outSlope: -0.59915537 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.008935511 + inSlope: -0.6227964 + outSlope: -0.6227964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.0023235083 + inSlope: -0.41199997 + outSlope: -0.41199997 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.007880807 + inSlope: -0.14396071 + outSlope: -0.14396071 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.008199453 + inSlope: 0.060082983 + outSlope: 0.060082983 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.0054284334 + inSlope: 0.15432584 + outSlope: 0.15432584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.0019004345 + inSlope: 0.15228452 + outSlope: 0.15228452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.00078725815 + inSlope: 0.09629898 + outSlope: 0.09629898 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0020301342 + inSlope: 0.029835686 + outSlope: 0.029835686 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.0020050406 + inSlope: -0.018649677 + outSlope: -0.018649677 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0012689233 + inSlope: -0.039469317 + outSlope: -0.039469317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0003940463 + inSlope: -0.037081704 + outSlope: -0.037081704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: -0.00024461746 + inSlope: -0.0223764 + outSlope: -0.0223764 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: -0.00051927567 + inSlope: 0.005993131 + outSlope: 0.005993131 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0.02544452 + outSlope: 0.02544452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.010204673 + outSlope: -0.010204673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.99979174 + inSlope: -0.020416647 + outSlope: -0.020416647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99916667 + inSlope: -0.04085958 + outSlope: -0.04085958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.998124 + inSlope: -0.061352164 + outSlope: -0.061352164 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.9966625 + inSlope: -0.0819236 + outSlope: -0.0819236 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9947802 + inSlope: -0.10259873 + outSlope: -0.10259873 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9924748 + inSlope: -0.12340235 + outSlope: -0.12340235 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.98974335 + inSlope: -0.14436811 + outSlope: -0.14436811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9865822 + inSlope: -0.1655222 + outSlope: -0.1655222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.98298734 + inSlope: -0.1868953 + outSlope: -0.1868953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.97895384 + inSlope: -0.20851678 + outSlope: -0.20851678 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.97447646 + inSlope: -0.23042294 + outSlope: -0.23042294 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9695488 + inSlope: -0.25265038 + outSlope: -0.25265038 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9641642 + inSlope: -0.27523255 + outSlope: -0.27523255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.95831484 + inSlope: -0.298215 + outSlope: -0.298215 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.95199215 + inSlope: -0.32164156 + outSlope: -0.32164156 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9451866 + inSlope: -0.34555686 + outSlope: -0.34555686 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9378878 + inSlope: -0.37001422 + outSlope: -0.37001422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.930084 + inSlope: -0.39507204 + outSlope: -0.39507204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9217624 + inSlope: -0.42078787 + outSlope: -0.42078787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.912909 + inSlope: -0.44723558 + outSlope: -0.44723558 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.9035079 + inSlope: -0.47449124 + outSlope: -0.47449124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.893542 + inSlope: -0.5026355 + outSlope: -0.5026355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.88299215 + inSlope: -0.53176874 + outSlope: -0.53176874 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.87183714 + inSlope: -0.5620006 + outSlope: -0.5620006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.86005336 + inSlope: -0.59344995 + outSlope: -0.59344995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.8476147 + inSlope: -0.6262588 + outSlope: -0.6262588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.8344918 + inSlope: -0.66059124 + outSlope: -0.66059124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.82065177 + inSlope: -0.69663036 + outSlope: -0.69663036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.8060579 + inSlope: -0.73459804 + outSlope: -0.73459804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.7906682 + inSlope: -0.7747523 + outSlope: -0.7747523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.77443534 + inSlope: -0.817395 + outSlope: -0.817395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.75730515 + inSlope: -0.8628955 + outSlope: -0.8628955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.73921514 + inSlope: -0.9116978 + outSlope: -0.9116978 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.72009295 + inSlope: -0.9643421 + outSlope: -0.9643421 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.6998542 + inSlope: -1.0215075 + outSlope: -1.0215075 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.6783988 + inSlope: -1.0840498 + outSlope: -1.0840498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.6556073 + inSlope: -1.1530614 + outSlope: -1.1530614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.6313351 + inSlope: -1.2299806 + outSlope: -1.2299806 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.605404 + inSlope: -1.3167374 + outSlope: -1.3167374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.57759064 + inSlope: -1.4159906 + outSlope: -1.4159906 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.54760844 + inSlope: -1.5315428 + outSlope: -1.5315428 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.5150787 + inSlope: -1.6690679 + outSlope: -1.6690679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.47948325 + inSlope: -1.8375006 + outSlope: -1.8375006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.44007874 + inSlope: -2.0519783 + outSlope: -2.0519783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.39572906 + inSlope: -2.3409562 + outSlope: -2.3409562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.3445294 + inSlope: -2.767158 + outSlope: -2.767158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.28278375 + inSlope: -3.5165439 + outSlope: -3.5165439 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.20099705 + inSlope: -6.9282055 + outSlope: -6.9282055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -9.848861 + outSlope: -9.848861 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -9.848856 + outSlope: -9.848856 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.79900295 + inSlope: -6.9282017 + outSlope: -6.9282017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.71721625 + inSlope: -3.516542 + outSlope: -3.516542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.6554706 + inSlope: -2.7671604 + outSlope: -2.7671604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.60427094 + inSlope: -2.3409588 + outSlope: -2.3409588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.55992126 + inSlope: -2.0519774 + outSlope: -2.0519774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.52051675 + inSlope: -1.8374996 + outSlope: -1.8374996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.48492128 + inSlope: -1.6690673 + outSlope: -1.6690673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.45239156 + inSlope: -1.5315437 + outSlope: -1.5315437 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.4224093 + inSlope: -1.4159914 + outSlope: -1.4159914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.39459598 + inSlope: -1.3167374 + outSlope: -1.3167374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.36866492 + inSlope: -1.2299801 + outSlope: -1.2299801 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.34439272 + inSlope: -1.1530609 + outSlope: -1.1530609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.3216012 + inSlope: -1.084049 + outSlope: -1.084049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.3001458 + inSlope: -1.0215068 + outSlope: -1.0215068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.27990705 + inSlope: -0.964342 + outSlope: -0.964342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.26078492 + inSlope: -0.91169846 + outSlope: -0.91169846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.24269485 + inSlope: -0.86289626 + outSlope: -0.86289626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.22556466 + inSlope: -0.817395 + outSlope: -0.817395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.20933181 + inSlope: -0.7747518 + outSlope: -0.7747518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.19394213 + inSlope: -0.734599 + outSlope: -0.734599 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.17934817 + inSlope: -0.6966313 + outSlope: -0.6966313 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.16550821 + inSlope: -0.6605903 + outSlope: -0.6605903 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.1523853 + inSlope: -0.6262583 + outSlope: -0.6262583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.13994664 + inSlope: -0.59344995 + outSlope: -0.59344995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.12816286 + inSlope: -0.5620006 + outSlope: -0.5620006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.11700785 + inSlope: -0.53176916 + outSlope: -0.53176916 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.10645801 + inSlope: -0.5026366 + outSlope: -0.5026366 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.09649205 + inSlope: -0.47449052 + outSlope: -0.47449052 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.08709103 + inSlope: -0.44723445 + outSlope: -0.44723445 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.07823759 + inSlope: -0.42078817 + outSlope: -0.42078817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.06991601 + inSlope: -0.39507204 + outSlope: -0.39507204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.062112212 + inSlope: -0.3700145 + outSlope: -0.3700145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.054813385 + inSlope: -0.34555668 + outSlope: -0.34555668 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.048007846 + inSlope: -0.32164255 + outSlope: -0.32164255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.041685104 + inSlope: -0.2982152 + outSlope: -0.2982152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.035835803 + inSlope: -0.2752313 + outSlope: -0.2752313 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.030451179 + inSlope: -0.25265047 + outSlope: -0.25265047 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.025523543 + inSlope: -0.23042303 + outSlope: -0.23042303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.021046162 + inSlope: -0.20851657 + outSlope: -0.20851657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.017012656 + inSlope: -0.18689515 + outSlope: -0.18689515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.01341778 + inSlope: -0.16552228 + outSlope: -0.16552228 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.010256648 + inSlope: -0.14436814 + outSlope: -0.14436814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.0075252056 + inSlope: -0.12340242 + outSlope: -0.12340242 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.005219817 + inSlope: -0.10259877 + outSlope: -0.10259877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0033375025 + inSlope: -0.081923544 + outSlope: -0.081923544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0018759966 + inSlope: -0.06135209 + outSlope: -0.06135209 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.00083333254 + inSlope: -0.040859602 + outSlope: -0.040859602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00020825863 + inSlope: -0.020416657 + outSlope: -0.020416657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.0102046775 + outSlope: -0.0102046775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: -0.020415187 + outSlope: -0.020415187 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.99958336 + inSlope: -0.040884405 + outSlope: -0.040884405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.99833125 + inSlope: -0.081976175 + outSlope: -0.081976175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.9962374 + inSlope: -0.123482674 + outSlope: -0.123482674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.99329114 + inSlope: -0.1656317 + outSlope: -0.1656317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.9894769 + inSlope: -0.20865986 + outSlope: -0.20865986 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.9847744 + inSlope: -0.25282705 + outSlope: -0.25282705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.97915745 + inSlope: -0.29843706 + outSlope: -0.29843706 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.9725933 + inSlope: -0.34582862 + outSlope: -0.34582862 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.965042 + inSlope: -0.3954003 + outSlope: -0.3954003 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.9564545 + inSlope: -0.4476388 + outSlope: -0.4476388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.946771 + inSlope: -0.50313073 + outSlope: -0.50313073 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.93591857 + inSlope: -0.5626093 + outSlope: -0.5626093 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.9238074 + inSlope: -0.6270206 + outSlope: -0.6270206 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.9103259 + inSlope: -0.69759464 + outSlope: -0.69759464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8953341 + inSlope: -0.77599657 + outSlope: -0.77599657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8786526 + inSlope: -0.8645464 + outSlope: -0.8645464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8600465 + inSlope: -0.96660197 + outSlope: -0.96660197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8391994 + inSlope: -1.087286 + outSlope: -1.087286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8156675 + inSlope: -1.2348994 + outSlope: -1.2348994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.78879535 + inSlope: -1.4241385 + outSlope: -1.4241385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.7575394 + inSlope: -1.6845224 + outSlope: -1.6845224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.72003937 + inSlope: -2.0892293 + outSlope: -2.0892293 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.6722647 + inSlope: -2.9287496 + outSlope: -2.9287496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.60049856 + inSlope: -6.682703 + outSlope: -6.682703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.39950144 + inSlope: -6.682703 + outSlope: -6.682703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.3277353 + inSlope: -2.9287498 + outSlope: -2.9287498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.2799607 + inSlope: -2.0892284 + outSlope: -2.0892284 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.24246061 + inSlope: -1.6845212 + outSlope: -1.6845212 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.21120465 + inSlope: -1.4241395 + outSlope: -1.4241395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.18433249 + inSlope: -1.2349004 + outSlope: -1.2349004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.16080058 + inSlope: -1.087286 + outSlope: -1.087286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.1399535 + inSlope: -0.96660256 + outSlope: -0.96660256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.12134743 + inSlope: -0.8645458 + outSlope: -0.8645458 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.104665875 + inSlope: -0.7759953 + outSlope: -0.7759953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.089674115 + inSlope: -0.6975951 + outSlope: -0.6975951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.07619262 + inSlope: -0.6270211 + outSlope: -0.6270211 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.06408143 + inSlope: -0.56260955 + outSlope: -0.56260955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.053228974 + inSlope: -0.5031295 + outSlope: -0.5031295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.043545544 + inSlope: -0.44763833 + outSlope: -0.44763833 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.034958005 + inSlope: -0.39540142 + outSlope: -0.39540142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.027406693 + inSlope: -0.34582877 + outSlope: -0.34582877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.020842552 + inSlope: -0.29843718 + outSlope: -0.29843718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.015225589 + inSlope: -0.25282717 + outSlope: -0.25282717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.010523081 + inSlope: -0.20865995 + outSlope: -0.20865995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.0067088604 + inSlope: -0.16563158 + outSlope: -0.16563158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.0037626028 + inSlope: -0.123482525 + outSlope: -0.123482525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.0016687512 + inSlope: -0.08197622 + outSlope: -0.08197622 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.00041663647 + inSlope: -0.040884424 + outSlope: -0.040884424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -0.020415196 + outSlope: -0.020415196 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.12314382 + value: -0.99922705 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.25508228 + value: 1.0390507 + inSlope: 2.8190482 + outSlope: 2.8190482 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4470894 + value: -0.53901064 + inSlope: 0.0036140734 + outSlope: 0.0036140734 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6409262 + value: 0.49787748 + inSlope: 4.620454 + outSlope: 4.620454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7868408 + value: -0.26380616 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9014592 + value: 0.13793975 + inSlope: 1.80238 + outSlope: 1.80238 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMAntiCurves.curves.meta b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMAntiCurves.curves.meta new file mode 100644 index 0000000..b92fa66 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMAntiCurves.curves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9bd36e0fdcb17346bb804d148559eb2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMCurves.curves b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMCurves.curves new file mode 100644 index 0000000..8050759 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMCurves.curves @@ -0,0 +1,14182 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 12322, guid: 0000000000000000e000000000000000, type: 0} + m_Name: MMCurves + m_EditorClassIdentifier: + m_Presets: + - m_Name: LinearTween + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.020408163 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.040816326 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.06122449 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.08163265 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.10204082 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.12244898 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.14285715 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.1632653 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.18367347 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.20408164 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.2244898 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.24489796 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.26530612 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.2857143 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.30612245 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.3265306 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.3469388 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.36734694 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.3877551 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.40816328 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.42857143 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.4489796 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.46938777 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.48979592 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5102041 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.53061223 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.5510204 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.5714286 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.59183675 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.6122449 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.63265306 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.6530612 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.67346936 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.6938776 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.71428573 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.7346939 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.75510204 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.7755102 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.79591835 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.81632656 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.8367347 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.85714287 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.877551 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.8979592 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9183673 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.93877554 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9591837 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.97959185 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.020408163 + outSlope: 0.020408163 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0004164931 + inSlope: 0.040816326 + outSlope: 0.040816326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0016659724 + inSlope: 0.08163266 + outSlope: 0.08163266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0037484383 + inSlope: 0.12244898 + outSlope: 0.12244898 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0066638896 + inSlope: 0.1632653 + outSlope: 0.1632653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.010412329 + inSlope: 0.20408165 + outSlope: 0.20408165 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.014993753 + inSlope: 0.24489796 + outSlope: 0.24489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.020408165 + inSlope: 0.28571427 + outSlope: 0.28571427 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.026655558 + inSlope: 0.32653067 + outSlope: 0.32653067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.033735946 + inSlope: 0.36734694 + outSlope: 0.36734694 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.041649316 + inSlope: 0.40816325 + outSlope: 0.40816325 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.050395668 + inSlope: 0.44897965 + outSlope: 0.44897965 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.059975013 + inSlope: 0.4897959 + outSlope: 0.4897959 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.07038733 + inSlope: 0.5306122 + outSlope: 0.5306122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.08163266 + inSlope: 0.57142866 + outSlope: 0.57142866 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.09371096 + inSlope: 0.61224484 + outSlope: 0.61224484 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.106622234 + inSlope: 0.6530611 + outSlope: 0.6530611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.12036652 + inSlope: 0.6938778 + outSlope: 0.6938778 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.13494378 + inSlope: 0.7346939 + outSlope: 0.7346939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.15035401 + inSlope: 0.77551 + outSlope: 0.77551 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.16659726 + inSlope: 0.8163265 + outSlope: 0.8163265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.18367347 + inSlope: 0.8571429 + outSlope: 0.8571429 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.20158267 + inSlope: 0.8979591 + outSlope: 0.8979591 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.22032487 + inSlope: 0.93877566 + outSlope: 0.93877566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.23990005 + inSlope: 0.9795921 + outSlope: 0.9795921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.2603082 + inSlope: 1.0204079 + outSlope: 1.0204079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.28154933 + inSlope: 1.0612245 + outSlope: 1.0612245 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.30362347 + inSlope: 1.1020408 + outSlope: 1.1020408 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.32653064 + inSlope: 1.1428573 + outSlope: 1.1428573 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.35027075 + inSlope: 1.183674 + outSlope: 1.183674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.37484384 + inSlope: 1.2244897 + outSlope: 1.2244897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.4002499 + inSlope: 1.2653055 + outSlope: 1.2653055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.42648894 + inSlope: 1.3061221 + outSlope: 1.3061221 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.45356098 + inSlope: 1.3469388 + outSlope: 1.3469388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.48146608 + inSlope: 1.3877546 + outSlope: 1.3877546 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.5102041 + inSlope: 1.4285724 + outSlope: 1.4285724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.53977513 + inSlope: 1.469389 + outSlope: 1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.5701791 + inSlope: 1.5102032 + outSlope: 1.5102032 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.60141605 + inSlope: 1.5510205 + outSlope: 1.5510205 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.63348603 + inSlope: 1.5918368 + outSlope: 1.5918368 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.66638905 + inSlope: 1.6326525 + outSlope: 1.6326525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.700125 + inSlope: 1.6734693 + outSlope: 1.6734693 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.7346939 + inSlope: 1.7142851 + outSlope: 1.7142851 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.77009577 + inSlope: 1.7551024 + outSlope: 1.7551024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.8063307 + inSlope: 1.7959197 + outSlope: 1.7959197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.8433986 + inSlope: 1.836734 + outSlope: 1.836734 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.8812995 + inSlope: 1.8775499 + outSlope: 1.8775499 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.92003334 + inSlope: 1.9183685 + outSlope: 1.9183685 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9596002 + inSlope: 1.9591842 + outSlope: 1.9591842 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1.9795907 + outSlope: 1.9795907 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1.9795897 + outSlope: 1.9795897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.04039979 + inSlope: 1.9591832 + outSlope: 1.9591832 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.079966664 + inSlope: 1.9183674 + outSlope: 1.9183674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.118700504 + inSlope: 1.8775518 + outSlope: 1.8775518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.15660143 + inSlope: 1.8367358 + outSlope: 1.8367358 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.19366932 + inSlope: 1.7959186 + outSlope: 1.7959186 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.22990423 + inSlope: 1.7551014 + outSlope: 1.7551014 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.26530612 + inSlope: 1.7142844 + outSlope: 1.7142844 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.29987502 + inSlope: 1.6734717 + outSlope: 1.6734717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.33361107 + inSlope: 1.6326537 + outSlope: 1.6326537 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.36651397 + inSlope: 1.5918357 + outSlope: 1.5918357 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.39858395 + inSlope: 1.5510199 + outSlope: 1.5510199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.4298209 + inSlope: 1.5102026 + outSlope: 1.5102026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.46022487 + inSlope: 1.4693878 + outSlope: 1.4693878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.48979592 + inSlope: 1.428572 + outSlope: 1.428572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.51853395 + inSlope: 1.3877544 + outSlope: 1.3877544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.54643893 + inSlope: 1.3469391 + outSlope: 1.3469391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.57351106 + inSlope: 1.3061233 + outSlope: 1.3061233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.5997501 + inSlope: 1.2653055 + outSlope: 1.2653055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.62515616 + inSlope: 1.2244918 + outSlope: 1.2244918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.6497294 + inSlope: 1.1836746 + outSlope: 1.1836746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.6734694 + inSlope: 1.1428567 + outSlope: 1.1428567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.69637656 + inSlope: 1.10204 + outSlope: 1.10204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.71845067 + inSlope: 1.0612229 + outSlope: 1.0612229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.7396918 + inSlope: 1.0204079 + outSlope: 1.0204079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.76009995 + inSlope: 0.9795921 + outSlope: 0.9795921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.7796751 + inSlope: 0.9387763 + outSlope: 0.9387763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7984173 + inSlope: 0.89795923 + outSlope: 0.89795923 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.81632656 + inSlope: 0.857142 + outSlope: 0.857142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.83340275 + inSlope: 0.816326 + outSlope: 0.816326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.849646 + inSlope: 0.7755102 + outSlope: 0.7755102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8650562 + inSlope: 0.7346945 + outSlope: 0.7346945 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8796335 + inSlope: 0.6938772 + outSlope: 0.6938772 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8933777 + inSlope: 0.65306044 + outSlope: 0.65306044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.90628904 + inSlope: 0.61224616 + outSlope: 0.61224616 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9183674 + inSlope: 0.57142836 + outSlope: 0.57142836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.92961264 + inSlope: 0.5306111 + outSlope: 0.5306111 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.940025 + inSlope: 0.4897968 + outSlope: 0.4897968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.94960433 + inSlope: 0.44897956 + outSlope: 0.44897956 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.95835066 + inSlope: 0.4081632 + outSlope: 0.4081632 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.96626407 + inSlope: 0.3673474 + outSlope: 0.3673474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.97334445 + inSlope: 0.3265307 + outSlope: 0.3265307 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.97959185 + inSlope: 0.28571492 + outSlope: 0.28571492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9850063 + inSlope: 0.24489766 + outSlope: 0.24489766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.98958766 + inSlope: 0.2040804 + outSlope: 0.2040804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9933361 + inSlope: 0.16326588 + outSlope: 0.16326588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9962516 + inSlope: 0.12245008 + outSlope: 0.12245008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99833405 + inSlope: 0.081631586 + outSlope: 0.081631586 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9995835 + inSlope: 0.04081579 + outSlope: 0.04081579 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.020409355 + outSlope: 0.020409355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuadratic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.040816326 + outSlope: 0.040816326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0008329862 + inSlope: 0.08163265 + outSlope: 0.08163265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0033319448 + inSlope: 0.16326532 + outSlope: 0.16326532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0074968766 + inSlope: 0.24489796 + outSlope: 0.24489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.013327779 + inSlope: 0.3265306 + outSlope: 0.3265306 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.020824658 + inSlope: 0.4081633 + outSlope: 0.4081633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.029987507 + inSlope: 0.48979592 + outSlope: 0.48979592 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.04081633 + inSlope: 0.57142854 + outSlope: 0.57142854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.053311117 + inSlope: 0.65306133 + outSlope: 0.65306133 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.06747189 + inSlope: 0.7346939 + outSlope: 0.7346939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.08329863 + inSlope: 0.8163265 + outSlope: 0.8163265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.100791335 + inSlope: 0.8979593 + outSlope: 0.8979593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.119950026 + inSlope: 0.9795918 + outSlope: 0.9795918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.14077467 + inSlope: 1.0612243 + outSlope: 1.0612243 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.16326532 + inSlope: 1.1428573 + outSlope: 1.1428573 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.18742192 + inSlope: 1.2244897 + outSlope: 1.2244897 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.21324447 + inSlope: 1.3061222 + outSlope: 1.3061222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.24073304 + inSlope: 1.3877556 + outSlope: 1.3877556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.26988757 + inSlope: 1.4693878 + outSlope: 1.4693878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.30070803 + inSlope: 1.55102 + outSlope: 1.55102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.33319452 + inSlope: 1.632653 + outSlope: 1.632653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.36734694 + inSlope: 1.7142859 + outSlope: 1.7142859 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.40316534 + inSlope: 1.7959182 + outSlope: 1.7959182 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.44064975 + inSlope: 1.8775513 + outSlope: 1.8775513 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.4798001 + inSlope: 1.9489796 + outSlope: 1.9489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5201999 + inSlope: 1.9489796 + outSlope: 1.9489796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.55935025 + inSlope: 1.8775512 + outSlope: 1.8775512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.5968346 + inSlope: 1.7959185 + outSlope: 1.7959185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.6326531 + inSlope: 1.7142855 + outSlope: 1.7142855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.6668055 + inSlope: 1.632652 + outSlope: 1.632652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.69929194 + inSlope: 1.5510204 + outSlope: 1.5510204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.73011243 + inSlope: 1.469389 + outSlope: 1.469389 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.759267 + inSlope: 1.3877559 + outSlope: 1.3877559 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.7867555 + inSlope: 1.3061224 + outSlope: 1.3061224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.81257814 + inSlope: 1.2244895 + outSlope: 1.2244895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.8367347 + inSlope: 1.1428567 + outSlope: 1.1428567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.85922533 + inSlope: 1.0612237 + outSlope: 1.0612237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.88004994 + inSlope: 0.97959214 + outSlope: 0.97959214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.89920866 + inSlope: 0.89796054 + outSlope: 0.89796054 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9167014 + inSlope: 0.8163264 + outSlope: 0.8163264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.93252814 + inSlope: 0.7346933 + outSlope: 0.7346933 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9466889 + inSlope: 0.6530614 + outSlope: 0.6530614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9591837 + inSlope: 0.57142836 + outSlope: 0.57142836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9700125 + inSlope: 0.48979533 + outSlope: 0.48979533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9791753 + inSlope: 0.40816373 + outSlope: 0.40816373 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9866722 + inSlope: 0.32653028 + outSlope: 0.32653028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9925031 + inSlope: 0.24489725 + outSlope: 0.24489725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99666804 + inSlope: 0.16326609 + outSlope: 0.16326609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.999167 + inSlope: 0.08163304 + outSlope: 0.08163304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.04081579 + outSlope: 0.04081579 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.0004164931 + outSlope: 0.0004164931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.000008499859 + inSlope: 0.0016659724 + outSlope: 0.0016659724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00006799887 + inSlope: 0.0054144105 + outSlope: 0.0054144105 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.00022949622 + inSlope: 0.011661807 + outSlope: 0.011661807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.000543991 + inSlope: 0.020408165 + outSlope: 0.020408165 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0010624826 + inSlope: 0.03165348 + outSlope: 0.03165348 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.0018359697 + inSlope: 0.04539775 + outSlope: 0.04539775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0029154522 + inSlope: 0.061640985 + outSlope: 0.061640985 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.004351928 + inSlope: 0.08038317 + outSlope: 0.08038317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.006196398 + inSlope: 0.101624325 + outSlope: 0.101624325 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.008499861 + inSlope: 0.12536444 + outSlope: 0.12536444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.011313313 + inSlope: 0.15160349 + outSlope: 0.15160349 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.014687758 + inSlope: 0.18034154 + outSlope: 0.18034154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.018674191 + inSlope: 0.2115785 + outSlope: 0.2115785 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.023323618 + inSlope: 0.24531445 + outSlope: 0.24531445 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.028687028 + inSlope: 0.28154936 + outSlope: 0.28154936 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.034815423 + inSlope: 0.32028317 + outSlope: 0.32028317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.041759815 + inSlope: 0.36151603 + outSlope: 0.36151603 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.049571183 + inSlope: 0.40524787 + outSlope: 0.40524787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.058300536 + inSlope: 0.4514786 + outSlope: 0.4514786 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.067998886 + inSlope: 0.5002082 + outSlope: 0.5002082 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.0787172 + inSlope: 0.55143684 + outSlope: 0.55143684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.0905065 + inSlope: 0.60516465 + outSlope: 0.60516465 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.10341781 + inSlope: 0.66139114 + outSlope: 0.66139114 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.11750206 + inSlope: 0.7201167 + outSlope: 0.7201167 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.13281031 + inSlope: 0.7813413 + outSlope: 0.7813413 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.14939353 + inSlope: 0.8450643 + outSlope: 0.8450643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.16730271 + inSlope: 0.9112867 + outSlope: 0.9112867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.18658894 + inSlope: 0.98000836 + outSlope: 0.98000836 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.20730309 + inSlope: 1.051229 + outSlope: 1.051229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.22949623 + inSlope: 1.1249478 + outSlope: 1.1249478 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.2532193 + inSlope: 1.2011659 + outSlope: 1.2011659 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.2785234 + inSlope: 1.2798839 + outSlope: 1.2798839 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.30545944 + inSlope: 1.3610995 + outSlope: 1.3610995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.33407852 + inSlope: 1.4448142 + outSlope: 1.4448142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.3644315 + inSlope: 1.5310287 + outSlope: 1.5310287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.39656946 + inSlope: 1.6197422 + outSlope: 1.6197422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.4305434 + inSlope: 1.7109542 + outSlope: 1.7109542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.4664043 + inSlope: 1.8046646 + outSlope: 1.8046646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.50420314 + inSlope: 1.9008746 + outSlope: 1.9008746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.5439911 + inSlope: 1.999584 + outSlope: 1.999584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.5858189 + inSlope: 2.100791 + outSlope: 2.100791 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.6297376 + inSlope: 2.204498 + outSlope: 2.204498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.67579836 + inSlope: 2.3107038 + outSlope: 2.3107038 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.724052 + inSlope: 2.419408 + outSlope: 2.419408 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.77454966 + inSlope: 2.530613 + outSlope: 2.530613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.82734245 + inSlope: 2.6443148 + outSlope: 2.6443148 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.882481 + inSlope: 2.7605157 + outSlope: 2.7605157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9400165 + inSlope: 2.8792174 + outSlope: 2.8792174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2.9391925 + outSlope: 2.9391925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2.939191 + outSlope: 2.939191 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.059983492 + inSlope: 2.8792162 + outSlope: 2.8792162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.11751902 + inSlope: 2.7605143 + outSlope: 2.7605143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.17265755 + inSlope: 2.6443172 + outSlope: 2.6443172 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.22545034 + inSlope: 2.5306156 + outSlope: 2.5306156 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.275948 + inSlope: 2.419407 + outSlope: 2.419407 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.32420164 + inSlope: 2.3107026 + outSlope: 2.3107026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.37026238 + inSlope: 2.2044973 + outSlope: 2.2044973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.4141811 + inSlope: 2.1007931 + outSlope: 2.1007931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.45600903 + inSlope: 1.9995853 + outSlope: 1.9995853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.49579686 + inSlope: 1.9008732 + outSlope: 1.9008732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.5335957 + inSlope: 1.8046633 + outSlope: 1.8046633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.5694566 + inSlope: 1.7109535 + outSlope: 1.7109535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.6034305 + inSlope: 1.6197417 + outSlope: 1.6197417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.6355685 + inSlope: 1.5310276 + outSlope: 1.5310276 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.66592145 + inSlope: 1.4448147 + outSlope: 1.4448147 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.6945405 + inSlope: 1.3611013 + outSlope: 1.3611013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.7214766 + inSlope: 1.2798843 + outSlope: 1.2798843 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.7467807 + inSlope: 1.2011657 + outSlope: 1.2011657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.77050376 + inSlope: 1.124948 + outSlope: 1.124948 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.79269695 + inSlope: 1.05123 + outSlope: 1.05123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8134111 + inSlope: 0.9800083 + outSlope: 0.9800083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.8326973 + inSlope: 0.9112853 + outSlope: 0.9112853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.85060644 + inSlope: 0.8450644 + outSlope: 0.8450644 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.8671897 + inSlope: 0.7813413 + outSlope: 0.7813413 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.8824979 + inSlope: 0.72011614 + outSlope: 0.72011614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.8965822 + inSlope: 0.661391 + outSlope: 0.661391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.90949345 + inSlope: 0.6051651 + outSlope: 0.6051651 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.9212828 + inSlope: 0.55143726 + outSlope: 0.55143726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9320011 + inSlope: 0.50020736 + outSlope: 0.50020736 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.94169945 + inSlope: 0.4514796 + outSlope: 0.4514796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.95042884 + inSlope: 0.40524894 + outSlope: 0.40524894 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9582402 + inSlope: 0.36151546 + outSlope: 0.36151546 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.96518457 + inSlope: 0.32028303 + outSlope: 0.32028303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.971313 + inSlope: 0.28154963 + outSlope: 0.28154963 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9766764 + inSlope: 0.24531385 + outSlope: 0.24531385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9813258 + inSlope: 0.21157765 + outSlope: 0.21157765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9853122 + inSlope: 0.18034154 + outSlope: 0.18034154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9886867 + inSlope: 0.151604 + outSlope: 0.151604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.99150014 + inSlope: 0.12536491 + outSlope: 0.12536491 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9938036 + inSlope: 0.10162458 + outSlope: 0.10162458 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9956481 + inSlope: 0.08038302 + outSlope: 0.08038302 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99708456 + inSlope: 0.061641335 + outSlope: 0.061641335 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99816406 + inSlope: 0.045396797 + outSlope: 0.045396797 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9989375 + inSlope: 0.031652316 + outSlope: 0.031652316 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.999456 + inSlope: 0.020409334 + outSlope: 0.020409334 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9997705 + inSlope: 0.011662049 + outSlope: 0.011662049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.999932 + inSlope: 0.005413386 + outSlope: 0.005413386 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9999915 + inSlope: 0.0016662189 + outSlope: 0.0016662189 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.00041764995 + outSlope: 0.00041764995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutCubic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.0016659724 + outSlope: 0.0016659724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.000033999437 + inSlope: 0.0066638896 + outSlope: 0.0066638896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0002719955 + inSlope: 0.021657642 + outSlope: 0.021657642 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0009179849 + inSlope: 0.04664723 + outSlope: 0.04664723 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.002175964 + inSlope: 0.08163266 + outSlope: 0.08163266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0042499304 + inSlope: 0.12661391 + outSlope: 0.12661391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.007343879 + inSlope: 0.181591 + outSlope: 0.181591 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.011661809 + inSlope: 0.24656394 + outSlope: 0.24656394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.017407712 + inSlope: 0.32153267 + outSlope: 0.32153267 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.024785591 + inSlope: 0.4064973 + outSlope: 0.4064973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.033999443 + inSlope: 0.50145775 + outSlope: 0.50145775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.04525325 + inSlope: 0.60641396 + outSlope: 0.60641396 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.05875103 + inSlope: 0.72136617 + outSlope: 0.72136617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.074696764 + inSlope: 0.846314 + outSlope: 0.846314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.09329447 + inSlope: 0.9812578 + outSlope: 0.9812578 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.11474811 + inSlope: 1.1261975 + outSlope: 1.1261975 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.1392617 + inSlope: 1.2811327 + outSlope: 1.2811327 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.16703926 + inSlope: 1.4460641 + outSlope: 1.4460641 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.19828473 + inSlope: 1.6209915 + outSlope: 1.6209915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.23320214 + inSlope: 1.8059144 + outSlope: 1.8059144 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.27199554 + inSlope: 2.0008328 + outSlope: 2.0008328 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.3148688 + inSlope: 2.2057474 + outSlope: 2.2057474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.362026 + inSlope: 2.4206586 + outSlope: 2.4206586 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.41367123 + inSlope: 2.6455646 + outSlope: 2.6455646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.47000825 + inSlope: 2.849854 + outSlope: 2.849854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.52999175 + inSlope: 2.8498535 + outSlope: 2.8498535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.58632874 + inSlope: 2.645564 + outSlope: 2.645564 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.6379739 + inSlope: 2.4206593 + outSlope: 2.4206593 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.68513125 + inSlope: 2.2057476 + outSlope: 2.2057476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.7280045 + inSlope: 2.0008326 + outSlope: 2.0008326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.76679784 + inSlope: 1.8059139 + outSlope: 1.8059139 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.80171525 + inSlope: 1.6209915 + outSlope: 1.6209915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8329607 + inSlope: 1.4460647 + outSlope: 1.4460647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8607383 + inSlope: 1.2811337 + outSlope: 1.2811337 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.88525194 + inSlope: 1.1261971 + outSlope: 1.1261971 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.90670556 + inSlope: 0.98125684 + outSlope: 0.98125684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9253032 + inSlope: 0.8463136 + outSlope: 0.8463136 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.94124895 + inSlope: 0.72136617 + outSlope: 0.72136617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9547467 + inSlope: 0.60641456 + outSlope: 0.60641456 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.96600056 + inSlope: 0.50145817 + outSlope: 0.50145817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9752144 + inSlope: 0.40649688 + outSlope: 0.40649688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9825923 + inSlope: 0.32153207 + outSlope: 0.32153207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9883382 + inSlope: 0.24656388 + outSlope: 0.24656388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9926561 + inSlope: 0.18159157 + outSlope: 0.18159157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.99575007 + inSlope: 0.12661365 + outSlope: 0.12661365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.997824 + inSlope: 0.08163296 + outSlope: 0.08163296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.999082 + inSlope: 0.046648197 + outSlope: 0.046648197 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.999728 + inSlope: 0.021657925 + outSlope: 0.021657925 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.999966 + inSlope: 0.006663415 + outSlope: 0.006663415 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.0016647585 + outSlope: 0.0016647585 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.000008499859 + outSlope: 0.000008499859 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00000017346652 + inSlope: 0.00006799887 + outSlope: 0.00006799887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0000027754643 + inSlope: 0.00033999438 + outSlope: 0.00033999438 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.000014050789 + inSlope: 0.0010199832 + outSlope: 0.0010199832 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.00004440743 + inSlope: 0.0023119617 + outSlope: 0.0023119617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.00010841659 + inSlope: 0.0044199275 + outSlope: 0.0044199275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.00022481263 + inSlope: 0.007547876 + outSlope: 0.007547876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0004164932 + inSlope: 0.011899805 + outSlope: 0.011899805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.00071051886 + inSlope: 0.017679708 + outSlope: 0.017679708 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.0011381139 + inSlope: 0.025091585 + outSlope: 0.025091585 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.0017346655 + inSlope: 0.034339435 + outSlope: 0.034339435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.0025397232 + inSlope: 0.04562725 + outSlope: 0.04562725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.003597002 + inSlope: 0.05915902 + outSlope: 0.05915902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.0049543767 + inSlope: 0.075138755 + outSlope: 0.075138755 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.006663891 + inSlope: 0.09377046 + outSlope: 0.09377046 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.008781743 + inSlope: 0.11525811 + outSlope: 0.11525811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.011368302 + inSlope: 0.1398057 + outSlope: 0.1398057 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.0144881 + inSlope: 0.16761723 + outSlope: 0.16761723 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.018209822 + inSlope: 0.19889674 + outSlope: 0.19889674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.02260633 + inSlope: 0.23384815 + outSlope: 0.23384815 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.027754648 + inSlope: 0.27267554 + outSlope: 0.27267554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.033735946 + inSlope: 0.31558275 + outSlope: 0.31558275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.04063557 + inSlope: 0.36277395 + outSlope: 0.36277395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.04854305 + inSlope: 0.4144532 + outSlope: 0.4144532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.057552032 + inSlope: 0.47082418 + outSlope: 0.47082418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.067760356 + inSlope: 0.53209114 + outSlope: 0.53209114 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.07927003 + inSlope: 0.59845823 + outSlope: 0.59845823 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.09218721 + inSlope: 0.6701289 + outSlope: 0.6701289 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.10662226 + inSlope: 0.7473076 + outSlope: 0.7473076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.12268959 + inSlope: 0.8301984 + outSlope: 0.8301984 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.14050789 + inSlope: 0.91900474 + outSlope: 0.91900474 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.16019997 + inSlope: 1.0139314 + outSlope: 1.0139314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.18189283 + inSlope: 1.1151816 + outSlope: 1.1151816 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.20571756 + inSlope: 1.2229598 + outSlope: 1.2229598 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.2318096 + inSlope: 1.3374703 + outSlope: 1.3374703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.26030824 + inSlope: 1.4589158 + outSlope: 1.4589158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.29135716 + inSlope: 1.587502 + outSlope: 1.587502 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.3251042 + inSlope: 1.7234318 + outSlope: 1.7234318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.36170128 + inSlope: 1.8669091 + outSlope: 1.8669091 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.40130454 + inSlope: 2.0181384 + outSlope: 2.0181384 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.44407436 + inSlope: 2.1773238 + outSlope: 2.1773238 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.49017498 + inSlope: 2.34467 + outSlope: 2.34467 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.53977513 + inSlope: 2.520378 + outSlope: 2.520378 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.5930475 + inSlope: 2.7046542 + outSlope: 2.7046542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.65016913 + inSlope: 2.897705 + outSlope: 2.897705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.7113211 + inSlope: 3.099729 + outSlope: 3.099729 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.7766888 + inSlope: 3.3109326 + outSlope: 3.3109326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.84646136 + inSlope: 3.5315223 + outSlope: 3.5315223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9208325 + inSlope: 3.7616987 + outSlope: 3.7616987 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 3.8792086 + outSlope: 3.8792086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 3.879207 + outSlope: 3.879207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.079167485 + inSlope: 3.7616968 + outSlope: 3.7616968 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.15353864 + inSlope: 3.5315206 + outSlope: 3.5315206 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.22331119 + inSlope: 3.310936 + outSlope: 3.310936 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.28867888 + inSlope: 3.099732 + outSlope: 3.099732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.34983087 + inSlope: 2.8977034 + outSlope: 2.8977034 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.4069525 + inSlope: 2.7046528 + outSlope: 2.7046528 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.46022487 + inSlope: 2.5203762 + outSlope: 2.5203762 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.509825 + inSlope: 2.3446712 + outSlope: 2.3446712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.5559257 + inSlope: 2.1773257 + outSlope: 2.1773257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.59869546 + inSlope: 2.0181394 + outSlope: 2.0181394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.63829875 + inSlope: 1.8669077 + outSlope: 1.8669077 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.67489576 + inSlope: 1.7234304 + outSlope: 1.7234304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.70864284 + inSlope: 1.5875009 + outSlope: 1.5875009 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.73969173 + inSlope: 1.4589144 + outSlope: 1.4589144 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.7681904 + inSlope: 1.3374715 + outSlope: 1.3374715 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.7942824 + inSlope: 1.2229614 + outSlope: 1.2229614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.8181072 + inSlope: 1.1151814 + outSlope: 1.1151814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.8398 + inSlope: 1.0139314 + outSlope: 1.0139314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.8594921 + inSlope: 0.919006 + outSlope: 0.919006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.87731045 + inSlope: 0.8301984 + outSlope: 0.8301984 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8933778 + inSlope: 0.7473072 + outSlope: 0.7473072 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.9078128 + inSlope: 0.6701291 + outSlope: 0.6701291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.92073 + inSlope: 0.59845835 + outSlope: 0.59845835 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.93223965 + inSlope: 0.5320904 + outSlope: 0.5320904 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.94244796 + inSlope: 0.47082436 + outSlope: 0.47082436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.95145696 + inSlope: 0.41445333 + outSlope: 0.41445333 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.9593644 + inSlope: 0.36277375 + outSlope: 0.36277375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.96626407 + inSlope: 0.31558222 + outSlope: 0.31558222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.97224534 + inSlope: 0.27267575 + outSlope: 0.27267575 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9773937 + inSlope: 0.23384893 + outSlope: 0.23384893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9817902 + inSlope: 0.19889629 + outSlope: 0.19889629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9855119 + inSlope: 0.16761637 + outSlope: 0.16761637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.98863167 + inSlope: 0.13980594 + outSlope: 0.13980594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.99121827 + inSlope: 0.11525951 + outSlope: 0.11525951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.99333614 + inSlope: 0.093769714 + outSlope: 0.093769714 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9950456 + inSlope: 0.075137556 + outSlope: 0.075137556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.996403 + inSlope: 0.059160262 + outSlope: 0.059160262 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9974603 + inSlope: 0.045627527 + outSlope: 0.045627527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9982653 + inSlope: 0.034339253 + outSlope: 0.034339253 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9988619 + inSlope: 0.025091082 + outSlope: 0.025091082 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.99928945 + inSlope: 0.017678566 + outSlope: 0.017678566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9995835 + inSlope: 0.011900103 + outSlope: 0.011900103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9997752 + inSlope: 0.0075483657 + outSlope: 0.0075483657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9998916 + inSlope: 0.0044203717 + outSlope: 0.0044203717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9999556 + inSlope: 0.0023116756 + outSlope: 0.0023116756 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99998593 + inSlope: 0.0010192974 + outSlope: 0.0010192974 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9999972 + inSlope: 0.0003402533 + outSlope: 0.0003402533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9999998 + inSlope: 0.00006863478 + outSlope: 0.00006863478 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.000008761887 + outSlope: 0.000008761887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuartic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.00006799887 + outSlope: 0.00006799887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0000013877321 + inSlope: 0.000543991 + outSlope: 0.000543991 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.000022203714 + inSlope: 0.002719955 + outSlope: 0.002719955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.00011240631 + inSlope: 0.008159866 + outSlope: 0.008159866 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.00035525943 + inSlope: 0.018495694 + outSlope: 0.018495694 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.00086733274 + inSlope: 0.03535942 + outSlope: 0.03535942 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.001798501 + inSlope: 0.060383007 + outSlope: 0.060383007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0033319455 + inSlope: 0.09519844 + outSlope: 0.09519844 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.005684151 + inSlope: 0.14143766 + outSlope: 0.14143766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.009104911 + inSlope: 0.20073268 + outSlope: 0.20073268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.013877324 + inSlope: 0.27471548 + outSlope: 0.27471548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.020317785 + inSlope: 0.365018 + outSlope: 0.365018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.028776016 + inSlope: 0.47327217 + outSlope: 0.47327217 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.039635014 + inSlope: 0.60111004 + outSlope: 0.60111004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.05331113 + inSlope: 0.7501637 + outSlope: 0.7501637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.070253946 + inSlope: 0.9220649 + outSlope: 0.9220649 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.09094641 + inSlope: 1.1184456 + outSlope: 1.1184456 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.1159048 + inSlope: 1.3409379 + outSlope: 1.3409379 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.14567858 + inSlope: 1.5911739 + outSlope: 1.5911739 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.18085064 + inSlope: 1.8707852 + outSlope: 1.8707852 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.22203718 + inSlope: 2.1814044 + outSlope: 2.1814044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.26988757 + inSlope: 2.524662 + outSlope: 2.524662 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.32508457 + inSlope: 2.9021916 + outSlope: 2.9021916 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.3883444 + inSlope: 3.3156257 + outSlope: 3.3156257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.46041626 + inSlope: 3.7053654 + outSlope: 3.7053654 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.53958374 + inSlope: 3.7053654 + outSlope: 3.7053654 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.6116556 + inSlope: 3.3156252 + outSlope: 3.3156252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.6749153 + inSlope: 2.902193 + outSlope: 2.902193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.73011255 + inSlope: 2.524662 + outSlope: 2.524662 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.77796286 + inSlope: 2.1814032 + outSlope: 2.1814032 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8191494 + inSlope: 1.8707855 + outSlope: 1.8707855 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8543214 + inSlope: 1.5911732 + outSlope: 1.5911732 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8840952 + inSlope: 1.3409381 + outSlope: 1.3409381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.90905356 + inSlope: 1.1184461 + outSlope: 1.1184461 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9297461 + inSlope: 0.9220645 + outSlope: 0.9220645 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9466889 + inSlope: 0.75016356 + outSlope: 0.75016356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.960365 + inSlope: 0.6011107 + outSlope: 0.6011107 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.971224 + inSlope: 0.47327185 + outSlope: 0.47327185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9796822 + inSlope: 0.3650173 + outSlope: 0.3650173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.98612267 + inSlope: 0.27471548 + outSlope: 0.27471548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9908951 + inSlope: 0.20073304 + outSlope: 0.20073304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.99431586 + inSlope: 0.14143729 + outSlope: 0.14143729 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99666804 + inSlope: 0.0951979 + outSlope: 0.0951979 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9982015 + inSlope: 0.060384005 + outSlope: 0.060384005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9991327 + inSlope: 0.035360053 + outSlope: 0.035360053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99964476 + inSlope: 0.018494865 + outSlope: 0.018494865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9998876 + inSlope: 0.00815876 + outSlope: 0.00815876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99997777 + inSlope: 0.002720566 + outSlope: 0.002720566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9999986 + inSlope: 0.0005446973 + outSlope: 0.0005446973 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.000067174464 + outSlope: 0.000067174464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.00000017346652 + outSlope: 0.00000017346652 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0000000035401329 + inSlope: 0.0000027754643 + outSlope: 0.0000027754643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00000011328425 + inSlope: 0.00002098945 + outSlope: 0.00002098945 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0000008602524 + inSlope: 0.00008603939 + outSlope: 0.00008603939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.000003625096 + inSlope: 0.00024996526 + outSlope: 0.00024996526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.000011062918 + inSlope: 0.00058562297 + outSlope: 0.00058562297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.000027528076 + inSlope: 0.0011866846 + outSlope: 0.0011866846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.00005949903 + inSlope: 0.002167638 + outSlope: 0.002167638 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.00011600307 + inSlope: 0.0036637862 + outSlope: 0.0036637862 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.00020904133 + inSlope: 0.005831251 + outSlope: 0.005831251 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.00035401338 + inSlope: 0.008846967 + outSlope: 0.008846967 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.00057014194 + inSlope: 0.012908684 + outSlope: 0.012908684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.00088089844 + inSlope: 0.018234976 + outSlope: 0.018234976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.0013144265 + inSlope: 0.025065219 + outSlope: 0.025065219 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.001903969 + inSlope: 0.03365962 + outSlope: 0.03365962 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.0026882887 + inSlope: 0.044299193 + outSlope: 0.044299193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.0037120983 + inSlope: 0.057285763 + outSlope: 0.057285763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.005026484 + inSlope: 0.07294199 + outSlope: 0.07294199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.0066893226 + inSlope: 0.091611326 + outSlope: 0.091611326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.00876572 + inSlope: 0.11365804 + outSlope: 0.11365804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.011328428 + inSlope: 0.13946727 + outSlope: 0.13946727 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.014458262 + inSlope: 0.16944489 + outSlope: 0.16944489 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.018244542 + inSlope: 0.20401761 + outSlope: 0.20401761 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.022785515 + inSlope: 0.24363306 + outSlope: 0.24363306 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.02818875 + inSlope: 0.28875947 + outSlope: 0.28875947 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.03457161 + inSlope: 0.3398862 + outSlope: 0.3398862 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.04206165 + inSlope: 0.397523 + outSlope: 0.397523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.05079703 + inSlope: 0.46220076 + outSlope: 0.46220076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.060927007 + inSlope: 0.53447145 + outSlope: 0.53447145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.07261221 + inSlope: 0.61490697 + outSlope: 0.61490697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.08602524 + inSlope: 0.70410085 + outSlope: 0.70410085 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.10135101 + inSlope: 0.80266714 + outSlope: 0.80266714 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.11878715 + inSlope: 0.91124064 + outSlope: 0.91124064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.13854448 + inSlope: 1.0304772 + outSlope: 1.0304772 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.16084749 + inSlope: 1.1610532 + outSlope: 1.1610532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.18593445 + inSlope: 1.3036662 + outSlope: 1.3036662 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.21405832 + inSlope: 1.4590342 + outSlope: 1.4590342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.24548684 + inSlope: 1.6278962 + outSlope: 1.6278962 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.28050303 + inSlope: 1.8110116 + outSlope: 1.8110116 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.31940565 + inSlope: 2.009161 + outSlope: 2.009161 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.3625097 + inSlope: 2.223147 + outSlope: 2.223147 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.41014642 + inSlope: 2.4537914 + outSlope: 2.4537914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.4626644 + inSlope: 2.7019367 + outSlope: 2.7019367 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.5204295 + inSlope: 2.9684448 + outSlope: 2.9684448 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.58382535 + inSlope: 3.2542043 + outSlope: 3.2542043 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.6532541 + inSlope: 3.5601187 + outSlope: 3.5601187 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.72913647 + inSlope: 3.8871138 + outSlope: 3.8871138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.81191194 + inSlope: 4.236139 + outSlope: 4.236139 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.90204 + inSlope: 4.60816 + outSlope: 4.60816 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 4.800042 + outSlope: 4.800042 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.80004 + outSlope: 4.80004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.097959995 + inSlope: 4.608157 + outSlope: 4.608157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.18808806 + inSlope: 4.2361364 + outSlope: 4.2361364 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.27086353 + inSlope: 3.8871174 + outSlope: 3.8871174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.3467459 + inSlope: 3.560122 + outSlope: 3.560122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.41617465 + inSlope: 3.2542024 + outSlope: 3.2542024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.4795705 + inSlope: 2.9684439 + outSlope: 2.9684439 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.53733563 + inSlope: 2.7019355 + outSlope: 2.7019355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.5898536 + inSlope: 2.4537919 + outSlope: 2.4537919 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.6374904 + inSlope: 2.2231476 + outSlope: 2.2231476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.6805943 + inSlope: 2.0091612 + outSlope: 2.0091612 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.71949697 + inSlope: 1.8110113 + outSlope: 1.8110113 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.75451314 + inSlope: 1.6278951 + outSlope: 1.6278951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.78594166 + inSlope: 1.4590342 + outSlope: 1.4590342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.8140656 + inSlope: 1.3036655 + outSlope: 1.3036655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8391525 + inSlope: 1.1610522 + outSlope: 1.1610522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.86145544 + inSlope: 1.0304775 + outSlope: 1.0304775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.88121283 + inSlope: 0.9112414 + outSlope: 0.9112414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.898649 + inSlope: 0.80266774 + outSlope: 0.80266774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.91397476 + inSlope: 0.7041018 + outSlope: 0.7041018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.92738783 + inSlope: 0.61490726 + outSlope: 0.61490726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.939073 + inSlope: 0.53447074 + outSlope: 0.53447074 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.94920295 + inSlope: 0.4622009 + outSlope: 0.4622009 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.9579384 + inSlope: 0.39752358 + outSlope: 0.39752358 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.9654284 + inSlope: 0.3398853 + outSlope: 0.3398853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.97181123 + inSlope: 0.28875822 + outSlope: 0.28875822 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.97721446 + inSlope: 0.24363303 + outSlope: 0.24363303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.98175544 + inSlope: 0.2040188 + outSlope: 0.2040188 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.98554176 + inSlope: 0.16944587 + outSlope: 0.16944587 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9886716 + inSlope: 0.13946733 + outSlope: 0.13946733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9912343 + inSlope: 0.11365774 + outSlope: 0.11365774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9933107 + inSlope: 0.09161137 + outSlope: 0.09161137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.99497354 + inSlope: 0.07294124 + outSlope: 0.07294124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.9962879 + inSlope: 0.057285145 + outSlope: 0.057285145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9973117 + inSlope: 0.044300027 + outSlope: 0.044300027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.99809605 + inSlope: 0.033660248 + outSlope: 0.033660248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9986856 + inSlope: 0.025064837 + outSlope: 0.025064837 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9991191 + inSlope: 0.018234946 + outSlope: 0.018234946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.9994299 + inSlope: 0.01290918 + outSlope: 0.01290918 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.999646 + inSlope: 0.008846574 + outSlope: 0.008846574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.99979097 + inSlope: 0.0058310255 + outSlope: 0.0058310255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.999884 + inSlope: 0.0036639292 + outSlope: 0.0036639292 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9999405 + inSlope: 0.0021671066 + outSlope: 0.0021671066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99997246 + inSlope: 0.0011857754 + outSlope: 0.0011857754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9999889 + inSlope: 0.0005855861 + outSlope: 0.0005855861 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99999636 + inSlope: 0.0002511739 + outSlope: 0.0002511739 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99999917 + inSlope: 0.000086158354 + outSlope: 0.000086158354 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9999999 + inSlope: 0.000020444404 + outSlope: 0.000020444404 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1 + inSlope: 0.000002920629 + outSlope: 0.000002920629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutQuintic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.0000027754643 + outSlope: 0.0000027754643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.000000056642126 + inSlope: 0.00004440743 + outSlope: 0.00004440743 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.000001812548 + inSlope: 0.0003358312 + outSlope: 0.0003358312 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.000013764038 + inSlope: 0.0013766303 + outSlope: 0.0013766303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.000058001537 + inSlope: 0.003999444 + outSlope: 0.003999444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.00017700669 + inSlope: 0.0093699675 + outSlope: 0.0093699675 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.00044044922 + inSlope: 0.018986953 + outSlope: 0.018986953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0009519845 + inSlope: 0.034682207 + outSlope: 0.034682207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.0018560492 + inSlope: 0.05862058 + outSlope: 0.05862058 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.0033446613 + inSlope: 0.093300015 + outSlope: 0.093300015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.005664214 + inSlope: 0.14155146 + outSlope: 0.14155146 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.009122271 + inSlope: 0.20653895 + outSlope: 0.20653895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.014094375 + inSlope: 0.2917596 + outSlope: 0.2917596 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.021030825 + inSlope: 0.4010435 + outSlope: 0.4010435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.030463504 + inSlope: 0.5385539 + outSlope: 0.5385539 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.04301262 + inSlope: 0.7087871 + outSlope: 0.7087871 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.059393574 + inSlope: 0.9165722 + outSlope: 0.9165722 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.08042374 + inSlope: 1.1670718 + outSlope: 1.1670718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.10702916 + inSlope: 1.4657812 + outSlope: 1.4657812 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.14025152 + inSlope: 1.8185287 + outSlope: 1.8185287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.18125485 + inSlope: 2.2314763 + outSlope: 2.2314763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.2313322 + inSlope: 2.7111182 + outSlope: 2.7111182 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.29191267 + inSlope: 3.2642817 + outSlope: 3.2642817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.36456823 + inSlope: 3.898129 + outSlope: 3.898129 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.45102 + inSlope: 4.5180902 + outSlope: 4.5180902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.54898 + inSlope: 4.5180902 + outSlope: 4.5180902 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.63543177 + inSlope: 3.8981285 + outSlope: 3.8981285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7080872 + inSlope: 3.2642817 + outSlope: 3.2642817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.7686679 + inSlope: 2.7111177 + outSlope: 2.7111177 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.8187452 + inSlope: 2.2314758 + outSlope: 2.2314758 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8597485 + inSlope: 1.8185296 + outSlope: 1.8185296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.89297086 + inSlope: 1.4657819 + outSlope: 1.4657819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9195763 + inSlope: 1.1670717 + outSlope: 1.1670717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.9406064 + inSlope: 0.9165711 + outSlope: 0.9165711 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9569874 + inSlope: 0.70878583 + outSlope: 0.70878583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9695365 + inSlope: 0.5385538 + outSlope: 0.5385538 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.97896916 + inSlope: 0.4010447 + outSlope: 0.4010447 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.98590565 + inSlope: 0.29176062 + outSlope: 0.29176062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.99087775 + inSlope: 0.20653811 + outSlope: 0.20653811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9943358 + inSlope: 0.14155103 + outSlope: 0.14155103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.99665534 + inSlope: 0.09330079 + outSlope: 0.09330079 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.998144 + inSlope: 0.058619946 + outSlope: 0.058619946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.999048 + inSlope: 0.034681007 + outSlope: 0.034681007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9995595 + inSlope: 0.01898701 + outSlope: 0.01898701 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.999823 + inSlope: 0.009370838 + outSlope: 0.009370838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.999942 + inSlope: 0.003999798 + outSlope: 0.003999798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99998623 + inSlope: 0.0013770733 + outSlope: 0.0013770733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9999982 + inSlope: 0.00033587235 + outSlope: 0.00033587235 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.99999994 + inSlope: 0.000043809436 + outSlope: 0.000043809436 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.000002920629 + outSlope: 0.000002920629 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.02517581 + outSlope: 0.02517581 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00051379204 + inSlope: 0.050337017 + outSlope: 0.050337017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.002054572 + inSlope: 0.100624375 + outSlope: 0.100624375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0046209097 + inSlope: 0.15080807 + outSlope: 0.15080807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.008210003 + inSlope: 0.200834 + outSlope: 0.200834 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.012818217 + inSlope: 0.25065553 + outSlope: 0.25065553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.018440843 + inSlope: 0.30022004 + outSlope: 0.30022004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.025072098 + inSlope: 0.34947503 + outSlope: 0.34947503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.03270513 + inSlope: 0.3983707 + outSlope: 0.3983707 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.041332126 + inSlope: 0.44685882 + outSlope: 0.44685882 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.05094427 + inSlope: 0.4948858 + outSlope: 0.4948858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.061531544 + inSlope: 0.5424044 + outSlope: 0.5424044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.07308322 + inSlope: 0.5893667 + outSlope: 0.5893667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.08558732 + inSlope: 0.63572407 + outSlope: 0.63572407 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.09903115 + inSlope: 0.68142754 + outSlope: 0.68142754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.1134007 + inSlope: 0.7264291 + outSlope: 0.7264291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.1286813 + inSlope: 0.7706848 + outSlope: 0.7706848 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.14485723 + inSlope: 0.8141496 + outSlope: 0.8141496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.1619119 + inSlope: 0.8567782 + outSlope: 0.8567782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.17982775 + inSlope: 0.898525 + outSlope: 0.898525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.1985864 + inSlope: 0.9393481 + outSlope: 0.9393481 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.2181685 + inSlope: 0.97920656 + outSlope: 0.97920656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.238554 + inSlope: 1.0180604 + outSlope: 1.0180604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.259722 + inSlope: 1.0558679 + outSlope: 1.0558679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.28165066 + inSlope: 1.0925883 + outSlope: 1.0925883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.3043174 + inSlope: 1.1281865 + outSlope: 1.1281865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.32769907 + inSlope: 1.1626265 + outSlope: 1.1626265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.35177153 + inSlope: 1.1958716 + outSlope: 1.1958716 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.3765102 + inSlope: 1.2278876 + outSlope: 1.2278876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.40188944 + inSlope: 1.2586422 + outSlope: 1.2586422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.42788333 + inSlope: 1.288104 + outSlope: 1.288104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.4544651 + inSlope: 1.3162398 + outSlope: 1.3162398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.48160738 + inSlope: 1.3430264 + outSlope: 1.3430264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.50928247 + inSlope: 1.368431 + outSlope: 1.368431 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.53746176 + inSlope: 1.3924268 + outSlope: 1.3924268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.5661163 + inSlope: 1.4149951 + outSlope: 1.4149951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.59521663 + inSlope: 1.4361098 + outSlope: 1.4361098 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.624733 + inSlope: 1.4557495 + outSlope: 1.4557495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.65463495 + inSlope: 1.4738896 + outSlope: 1.4738896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.6848917 + inSlope: 1.4905174 + outSlope: 1.4905174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.71547246 + inSlope: 1.5056142 + outSlope: 1.5056142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.7463454 + inSlope: 1.5191622 + outSlope: 1.5191622 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.77747905 + inSlope: 1.5311514 + outSlope: 1.5311514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.80884135 + inSlope: 1.5415664 + outSlope: 1.5415664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.8404001 + inSlope: 1.5503969 + outSlope: 1.5503969 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.8721228 + inSlope: 1.5576334 + outSlope: 1.5576334 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.90397704 + inSlope: 1.5632688 + outSlope: 1.5632688 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9359298 + inSlope: 1.5673001 + outSlope: 1.5673001 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.96794844 + inSlope: 1.5697212 + outSlope: 1.5697212 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1.5705273 + outSlope: 1.5705273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1.5705266 + outSlope: 1.5705266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.032051563 + inSlope: 1.5697205 + outSlope: 1.5697205 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.064070225 + inSlope: 1.5672992 + outSlope: 1.5672992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.09602296 + inSlope: 1.5632703 + outSlope: 1.5632703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.12787718 + inSlope: 1.5576348 + outSlope: 1.5576348 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.1595999 + inSlope: 1.550396 + outSlope: 1.550396 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.19115865 + inSlope: 1.5415655 + outSlope: 1.5415655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.22252095 + inSlope: 1.5311508 + outSlope: 1.5311508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.2536546 + inSlope: 1.5191646 + outSlope: 1.5191646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.28452766 + inSlope: 1.5056152 + outSlope: 1.5056152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.3151083 + inSlope: 1.4905162 + outSlope: 1.4905162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.34536505 + inSlope: 1.4738891 + outSlope: 1.4738891 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.37526703 + inSlope: 1.455749 + outSlope: 1.455749 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.40478337 + inSlope: 1.4361088 + outSlope: 1.4361088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.43388373 + inSlope: 1.414994 + outSlope: 1.414994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.46253824 + inSlope: 1.3924289 + outSlope: 1.3924289 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.49071753 + inSlope: 1.368432 + outSlope: 1.368432 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.5183926 + inSlope: 1.3430254 + outSlope: 1.3430254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.5455349 + inSlope: 1.3162398 + outSlope: 1.3162398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.5721167 + inSlope: 1.2881045 + outSlope: 1.2881045 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.5981106 + inSlope: 1.2586427 + outSlope: 1.2586427 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.62348986 + inSlope: 1.2278879 + outSlope: 1.2278879 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.64822847 + inSlope: 1.1958711 + outSlope: 1.1958711 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.67230093 + inSlope: 1.1626256 + outSlope: 1.1626256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.6956826 + inSlope: 1.1281865 + outSlope: 1.1281865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.71834934 + inSlope: 1.0925883 + outSlope: 1.0925883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.740278 + inSlope: 1.0558672 + outSlope: 1.0558672 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.76144594 + inSlope: 1.0180597 + outSlope: 1.0180597 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.7818315 + inSlope: 0.97920805 + outSlope: 0.97920805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.80141366 + inSlope: 0.93934876 + outSlope: 0.93934876 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.82017225 + inSlope: 0.89852417 + outSlope: 0.89852417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8380881 + inSlope: 0.8567782 + outSlope: 0.8567782 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8551428 + inSlope: 0.81415015 + outSlope: 0.81415015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8713187 + inSlope: 0.7706857 + outSlope: 0.7706857 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.88659936 + inSlope: 0.72642946 + outSlope: 0.72642946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9009689 + inSlope: 0.6814265 + outSlope: 0.6814265 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9144127 + inSlope: 0.6357231 + outSlope: 0.6357231 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9269168 + inSlope: 0.5893669 + outSlope: 0.5893669 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.93846846 + inSlope: 0.54240465 + outSlope: 0.54240465 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.94905573 + inSlope: 0.49488527 + outSlope: 0.49488527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9586679 + inSlope: 0.44685847 + outSlope: 0.44685847 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9672949 + inSlope: 0.39837086 + outSlope: 0.39837086 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9749279 + inSlope: 0.34947515 + outSlope: 0.34947515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.98155916 + inSlope: 0.3002202 + outSlope: 0.3002202 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9871818 + inSlope: 0.25065568 + outSlope: 0.25065568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99179 + inSlope: 0.20083533 + outSlope: 0.20083533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99537915 + inSlope: 0.15080789 + outSlope: 0.15080789 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9979454 + inSlope: 0.10062297 + outSlope: 0.10062297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9994862 + inSlope: 0.05033704 + outSlope: 0.05033704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.025175821 + outSlope: 0.025175821 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutSinusoidal + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.050337017 + outSlope: 0.050337017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.001027286 + inSlope: 0.10057254 + outSlope: 0.10057254 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0041050017 + inSlope: 0.2007318 + outSlope: 0.2007318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.009220421 + inSlope: 0.30006528 + outSlope: 0.30006528 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.016352564 + inSlope: 0.39816692 + outSlope: 0.39816692 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.025472134 + inSlope: 0.49463162 + outSlope: 0.49463162 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.03654161 + inSlope: 0.58906424 + outSlope: 0.58906424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.049515575 + inSlope: 0.6810765 + outSlope: 0.6810765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.06434065 + inSlope: 0.7702893 + outSlope: 0.7702893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.08095595 + inSlope: 0.8563373 + outSlope: 0.8563373 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.0992932 + inSlope: 0.9388658 + outSlope: 0.9388658 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.119277 + inSlope: 1.0175372 + outSlope: 1.0175372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.14082533 + inSlope: 1.0920272 + outSlope: 1.0920272 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.16384953 + inSlope: 1.162029 + outSlope: 1.162029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.1882551 + inSlope: 1.227257 + outSlope: 1.227257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.21394166 + inSlope: 1.287441 + outSlope: 1.287441 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.24080369 + inSlope: 1.3423355 + outSlope: 1.3423355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.26873088 + inSlope: 1.391713 + outSlope: 1.391713 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.29760832 + inSlope: 1.4353724 + outSlope: 1.4353724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.32731748 + inSlope: 1.4731336 + outSlope: 1.4731336 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.35773623 + inSlope: 1.5048399 + outSlope: 1.5048399 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.38873953 + inSlope: 1.5303643 + outSlope: 1.5303643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.42020005 + inSlope: 1.5495999 + outSlope: 1.5495999 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.45198852 + inSlope: 1.5624667 + outSlope: 1.5624667 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.48397422 + inSlope: 1.5689137 + outSlope: 1.5689137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5160258 + inSlope: 1.5689137 + outSlope: 1.5689137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.5480115 + inSlope: 1.5624664 + outSlope: 1.5624664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.5797999 + inSlope: 1.5496002 + outSlope: 1.5496002 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.61126053 + inSlope: 1.530365 + outSlope: 1.530365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.6422638 + inSlope: 1.5048394 + outSlope: 1.5048394 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.6726825 + inSlope: 1.4731331 + outSlope: 1.4731331 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.7023917 + inSlope: 1.4353724 + outSlope: 1.4353724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.7312691 + inSlope: 1.3917133 + outSlope: 1.3917133 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.7591963 + inSlope: 1.3423352 + outSlope: 1.3423352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.78605837 + inSlope: 1.2874405 + outSlope: 1.2874405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.8117449 + inSlope: 1.227257 + outSlope: 1.227257 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.83615047 + inSlope: 1.1620293 + outSlope: 1.1620293 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.85917467 + inSlope: 1.0920277 + outSlope: 1.0920277 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.880723 + inSlope: 1.0175369 + outSlope: 1.0175369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.90070677 + inSlope: 0.93886554 + outSlope: 0.93886554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9190441 + inSlope: 0.8563388 + outSlope: 0.8563388 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9356594 + inSlope: 0.77028966 + outSlope: 0.77028966 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.95048445 + inSlope: 0.68107605 + outSlope: 0.68107605 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9634584 + inSlope: 0.5890631 + outSlope: 0.5890631 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.97452784 + inSlope: 0.4946319 + outSlope: 0.4946319 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.98364747 + inSlope: 0.39816883 + outSlope: 0.39816883 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99077964 + inSlope: 0.30006492 + outSlope: 0.30006492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.995895 + inSlope: 0.20073044 + outSlope: 0.20073044 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.9989727 + inSlope: 0.100571856 + outSlope: 0.100571856 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.05033704 + outSlope: 0.05033704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 10.290323 + outSlope: 10.290323 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.2100066 + inSlope: 12.382375 + outSlope: 12.382375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.50540304 + inSlope: 14.794611 + outSlope: 14.794611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.8138683 + inSlope: 14.044153 + outSlope: 14.044153 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 1.0786338 + inSlope: 11.040623 + outSlope: 11.040623 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 1.264506 + inSlope: 6.860612 + outSlope: 6.860612 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 1.3586588 + inSlope: 2.5196607 + outSlope: 2.5196607 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 1.3673493 + inSlope: -1.1890029 + outSlope: -1.1890029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.3101281 + inSlope: -3.777382 + outSlope: -3.777382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.2131704 + inSlope: -5.0722027 + outSlope: -5.0722027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.1030993 + inSlope: -5.1674433 + outSlope: -5.1674433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.0022544 + inSlope: -4.3421707 + outSlope: -4.3421707 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.9258679 + inSlope: -2.9664814 + outSlope: -2.9664814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.8811735 + inSlope: -1.4148178 + outSlope: -1.4148178 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.86812025 + inSlope: 0.00009393692 + outSlope: 0.00009393692 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8811773 + inSlope: 1.0663304 + outSlope: 1.0663304 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9116439 + inSlope: 1.6847181 + outSlope: 1.6847181 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.94994134 + inSlope: 1.8582635 + outSlope: 1.8582635 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9874914 + inSlope: 1.6664568 + outSlope: 1.6664568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.01796 + inSlope: 1.232626 + outSlope: 1.232626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.0378027 + inSlope: 0.691724 + outSlope: 0.691724 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.0461936 + inSlope: 0.16402838 + outSlope: 0.16402838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0444977 + inSlope: -0.2621115 + outSlope: -0.2621115 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 1.0354952 + inSlope: -0.53774005 + outSlope: -0.53774005 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.0225492 + inSlope: -0.6520976 + outSlope: -0.6520976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.008879 + inSlope: -0.6250745 + outSlope: -0.6250745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.9970359 + inSlope: -0.49620318 + outSlope: -0.49620318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.98862576 + inSlope: -0.31294656 + outSlope: -0.31294656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.9842626 + inSlope: -0.120522365 + outSlope: -0.120522365 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9837065 + inSlope: 0.04540556 + outSlope: 0.04540556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9861159 + inSlope: 0.16256514 + outSlope: 0.16256514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9903418 + inSlope: 0.22263518 + outSlope: 0.22263518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.995203 + inSlope: 0.22925332 + outSlope: 0.22925332 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.99969906 + inSlope: 0.19444063 + outSlope: 0.19444063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 1.0031394 + inSlope: 0.1344553 + outSlope: 0.1344553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 1.005187 + inSlope: 0.06591275 + outSlope: 0.06591275 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 1.0058297 + inSlope: 0.002815486 + outSlope: 0.002815486 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.005302 + inSlope: -0.04522302 + outSlope: -0.04522302 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0039839 + inSlope: -0.07357356 + outSlope: -0.07357356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.002299 + inSlope: -0.082165934 + outSlope: -0.082165934 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.0006301 + inSlope: -0.07437515 + outSlope: -0.07437515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9992632 + inSlope: -0.055592712 + outSlope: -0.055592712 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99836105 + inSlope: -0.031791046 + outSlope: -0.031791046 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99796563 + inSlope: -0.008334015 + outSlope: -0.008334015 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9980209 + inSlope: 0.010790264 + outSlope: 0.010790264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99840605 + inSlope: 0.023327023 + outSlope: 0.023327023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.998973 + inSlope: 0.028725807 + outSlope: 0.028725807 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99957854 + inSlope: 0.02780731 + outSlope: 0.02780731 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.000108 + inSlope: 0.02228878 + outSlope: 0.02228878 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1.0004883 + inSlope: 0.018633613 + outSlope: 0.018633613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -0.00048828125 + inSlope: 0.018633604 + outSlope: 0.018633604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.000108003616 + inSlope: 0.02228877 + outSlope: 0.02228877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00042146444 + inSlope: 0.027807295 + outSlope: 0.027807295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.001026988 + inSlope: 0.028725833 + outSlope: 0.028725833 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0015939474 + inSlope: 0.023327053 + outSlope: 0.023327053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0019791126 + inSlope: 0.010790256 + outSlope: 0.010790256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.0020343661 + inSlope: -0.008334008 + outSlope: -0.008334008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0016389489 + inSlope: -0.03179104 + outSlope: -0.03179104 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.000736773 + inSlope: -0.05559269 + outSlope: -0.05559269 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.0006301403 + inSlope: -0.07437523 + outSlope: -0.07437523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.0022989511 + inSlope: -0.08216602 + outSlope: -0.08216602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.0039838552 + inSlope: -0.073573545 + outSlope: -0.073573545 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.0053019524 + inSlope: -0.045222998 + outSlope: -0.045222998 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: -0.005829692 + inSlope: 0.0028154636 + outSlope: 0.0028154636 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: -0.0051870346 + inSlope: 0.06591273 + outSlope: 0.06591273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: -0.0031393766 + inSlope: 0.13445553 + outSlope: 0.13445553 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.00030094385 + inSlope: 0.19444071 + outSlope: 0.19444071 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.004796982 + inSlope: 0.22925314 + outSlope: 0.22925314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.009658217 + inSlope: 0.22263518 + outSlope: 0.22263518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.013884127 + inSlope: 0.16256505 + outSlope: 0.16256505 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.016293526 + inSlope: 0.04540547 + outSlope: 0.04540547 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.015737414 + inSlope: -0.12052268 + outSlope: -0.12052268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.011374235 + inSlope: -0.31294656 + outSlope: -0.31294656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.0029640794 + inSlope: -0.4962029 + outSlope: -0.4962029 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.008878946 + inSlope: -0.6250745 + outSlope: -0.6250745 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.022549152 + inSlope: -0.6520976 + outSlope: -0.6520976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: -0.035495162 + inSlope: -0.53774035 + outSlope: -0.53774035 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.04449773 + inSlope: -0.2621088 + outSlope: -0.2621088 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.04619348 + inSlope: 0.1640285 + outSlope: 0.1640285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.037802696 + inSlope: 0.6917218 + outSlope: 0.6917218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.017959952 + inSlope: 1.2326267 + outSlope: 1.2326267 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.012508571 + inSlope: 1.6664568 + outSlope: 1.6664568 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.050058663 + inSlope: 1.8582633 + outSlope: 1.8582633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.08835602 + inSlope: 1.6847174 + outSlope: 1.6847174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.118822694 + inSlope: 1.0663297 + outSlope: 1.0663297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.13187975 + inSlope: 0.00009346008 + outSlope: 0.00009346008 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.11882651 + inSlope: -1.4148183 + outSlope: -1.4148183 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.074132085 + inSlope: -2.9664798 + outSlope: -2.9664798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.0022542477 + inSlope: -4.342172 + outSlope: -4.342172 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.103099346 + inSlope: -5.1674433 + outSlope: -5.1674433 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.21317053 + inSlope: -5.072199 + outSlope: -5.072199 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.3101281 + inSlope: -3.777381 + outSlope: -3.777381 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: -0.36734927 + inSlope: -1.1890028 + outSlope: -1.1890028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: -0.3586588 + inSlope: 2.5196617 + outSlope: 2.5196617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: -0.26450598 + inSlope: 6.86061 + outSlope: 6.86061 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: -0.07863402 + inSlope: 11.04062 + outSlope: 11.04062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.18613213 + inSlope: 14.044155 + outSlope: 14.044155 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.49459732 + inSlope: 14.794611 + outSlope: 14.794611 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.7899935 + inSlope: 12.382372 + outSlope: 12.382372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 10.290322 + outSlope: 10.290322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutBounce + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 12.382375 + outSlope: 12.382375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.25270152 + inSlope: 13.213264 + outSlope: 13.213264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.5393169 + inSlope: 10.452383 + outSlope: 10.452383 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.6793294 + inSlope: 2.835805 + outSlope: 2.835805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.65506405 + inSlope: -3.1306028 + outSlope: -3.1306028 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.5515497 + inSlope: -4.7071867 + outSlope: -4.7071867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.46293396 + inSlope: -2.878494 + outSlope: -2.878494 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.43406013 + inSlope: -0.17424345 + outSlope: -0.17424345 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.45582196 + inSlope: 1.462297 + outSlope: 1.462297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.4937457 + inSlope: 1.5454446 + outSlope: 1.5454446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.51890135 + inSlope: 0.69832706 + outSlope: 0.69832706 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.52224886 + inSlope: -0.18685582 + outSlope: -0.18685582 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.5112746 + inSlope: -0.58140725 + outSlope: -0.58140725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.49851796 + inSlope: -0.46901047 + outSlope: -0.46901047 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.4921313 + inSlope: -0.13377042 + outSlope: -0.13377042 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.49305794 + inSlope: 0.13402036 + outSlope: 0.13402036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.4976015 + inSlope: 0.20853788 + outSlope: 0.20853788 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.5015697 + inSlope: 0.13017666 + outSlope: 0.13017666 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.50291485 + inSlope: 0.010344867 + outSlope: 0.010344867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.5019919 + inSlope: -0.06369448 + outSlope: -0.06369448 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.50031507 + inSlope: -0.06887932 + outSlope: -0.06887932 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.49918053 + inSlope: -0.031963363 + outSlope: -0.031963363 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.49901044 + inSlope: 0.007496508 + outSlope: 0.007496508 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.4994865 + inSlope: 0.02556717 + outSlope: 0.02556717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.500054 + inSlope: 0.011257565 + outSlope: 0.011257565 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.499946 + inSlope: 0.011257565 + outSlope: 0.011257565 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.5005135 + inSlope: 0.025567185 + outSlope: 0.025567185 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.50098956 + inSlope: 0.0074958066 + outSlope: 0.0074958066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.50081944 + inSlope: -0.031963352 + outSlope: -0.031963352 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.49968493 + inSlope: -0.06887865 + outSlope: -0.06887865 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.49800807 + inSlope: -0.06369454 + outSlope: -0.06369454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.49708515 + inSlope: 0.010344867 + outSlope: 0.010344867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.4984303 + inSlope: 0.13017681 + outSlope: 0.13017681 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.5023985 + inSlope: 0.20853695 + outSlope: 0.20853695 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.50694203 + inSlope: 0.13402003 + outSlope: 0.13402003 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.5078687 + inSlope: -0.13377064 + outSlope: -0.13377064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.501482 + inSlope: -0.46901065 + outSlope: -0.46901065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.48872542 + inSlope: -0.5814067 + outSlope: -0.5814067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.47775114 + inSlope: -0.18685746 + outSlope: -0.18685746 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.4810986 + inSlope: 0.6983264 + outSlope: 0.6983264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.5062543 + inSlope: 1.5454446 + outSlope: 1.5454446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.544178 + inSlope: 1.4622976 + outSlope: 1.4622976 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.5659399 + inSlope: -0.17424327 + outSlope: -0.17424327 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.53706604 + inSlope: -2.878496 + outSlope: -2.878496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.44845033 + inSlope: -4.7071867 + outSlope: -4.7071867 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.34493607 + inSlope: -3.1306014 + outSlope: -3.1306014 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.32067066 + inSlope: 2.8358114 + outSlope: 2.8358114 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.46068335 + inSlope: 10.452391 + outSlope: 10.452391 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.74729866 + inSlope: 13.213264 + outSlope: 13.213264 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 12.382372 + outSlope: 12.382372 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -0.03157018 + outSlope: -0.03157018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.00064428936 + inSlope: -0.060974594 + outSlope: -0.060974594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: -0.0024887589 + inSlope: -0.11653477 + outSlope: -0.11653477 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: -0.005400811 + inSlope: -0.16559766 + outSlope: -0.16559766 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: -0.009247847 + inSlope: -0.20816328 + outSlope: -0.20816328 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: -0.013897272 + inSlope: -0.24423158 + outSlope: -0.24423158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: -0.019216483 + inSlope: -0.2738026 + outSlope: -0.2738026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: -0.02507289 + inSlope: -0.2968763 + outSlope: -0.2968763 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.031333882 + inSlope: -0.3134527 + outSlope: -0.3134527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.037866876 + inSlope: -0.3235319 + outSlope: -0.3235319 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.04453927 + inSlope: -0.3271137 + outSlope: -0.3271137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.051218454 + inSlope: -0.32419828 + outSlope: -0.32419828 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.05777185 + inSlope: -0.31478554 + outSlope: -0.31478554 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: -0.06406684 + inSlope: -0.2988755 + outSlope: -0.2988755 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: -0.06997085 + inSlope: -0.27646816 + outSlope: -0.27646816 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: -0.07535126 + inSlope: -0.24756347 + outSlope: -0.24756347 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: -0.08007548 + inSlope: -0.21216165 + outSlope: -0.21216165 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: -0.08401092 + inSlope: -0.1702623 + outSlope: -0.1702623 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: -0.087024964 + inSlope: -0.1218658 + outSlope: -0.1218658 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.08898503 + inSlope: -0.06697218 + outSlope: -0.06697218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.08975852 + inSlope: -0.005580929 + outSlope: -0.005580929 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.08921283 + inSlope: 0.06230742 + outSlope: 0.06230742 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.087215364 + inSlope: 0.13669297 + outSlope: 0.13669297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: -0.08363352 + inSlope: 0.21757597 + outSlope: 0.21757597 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.07833471 + inSlope: 0.3049562 + outSlope: 0.3049562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: -0.071186334 + inSlope: 0.39883387 + outSlope: 0.39883387 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: -0.062055785 + inSlope: 0.4992087 + outSlope: 0.4992087 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: -0.05081048 + inSlope: 0.6060808 + outSlope: 0.6060808 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: -0.037317768 + inSlope: 0.71945024 + outSlope: 0.71945024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: -0.021445137 + inSlope: 0.83931696 + outSlope: 0.83931696 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: -0.0030599472 + inSlope: 0.96568096 + outSlope: 0.96568096 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.017970396 + inSlope: 1.0985422 + outSlope: 1.0985422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.04177849 + inSlope: 1.2379007 + outSlope: 1.2379007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.068496935 + inSlope: 1.3837566 + outSlope: 1.3837566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.09825841 + inSlope: 1.5361102 + outSlope: 1.5361102 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.13119537 + inSlope: 1.6949606 + outSlope: 1.6949606 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.16744044 + inSlope: 1.8603082 + outSlope: 1.8603082 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.20712627 + inSlope: 2.0321531 + outSlope: 2.0321531 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.25038543 + inSlope: 2.210495 + outSlope: 2.210495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.29735053 + inSlope: 2.3953357 + outSlope: 2.3953357 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.34815434 + inSlope: 2.5866725 + outSlope: 2.5866725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.4029291 + inSlope: 2.7845063 + outSlope: 2.7845063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.4618076 + inSlope: 2.9888382 + outSlope: 2.9888382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.52492243 + inSlope: 3.1996675 + outSlope: 3.1996675 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.5924062 + inSlope: 3.4169927 + outSlope: 3.4169927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.66439146 + inSlope: 3.6408157 + outSlope: 3.6408157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.7410111 + inSlope: 3.8711379 + outSlope: 3.8711379 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.82239723 + inSlope: 4.107955 + outSlope: 4.107955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.90868264 + inSlope: 4.3512697 + outSlope: 4.3512697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 4.4745526 + outSlope: 4.4745526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.4745507 + outSlope: 4.4745507 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.091317356 + inSlope: 4.351268 + outSlope: 4.351268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.17760277 + inSlope: 4.107953 + outSlope: 4.107953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.25898892 + inSlope: 3.8711414 + outSlope: 3.8711414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.33560854 + inSlope: 3.640819 + outSlope: 3.640819 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.4075938 + inSlope: 3.4169908 + outSlope: 3.4169908 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.47507757 + inSlope: 3.1996655 + outSlope: 3.1996655 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.5381924 + inSlope: 2.9888377 + outSlope: 2.9888377 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.59707093 + inSlope: 2.7845092 + outSlope: 2.7845092 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.6518458 + inSlope: 2.5866737 + outSlope: 2.5866737 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.7026495 + inSlope: 2.3953354 + outSlope: 2.3953354 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.7496146 + inSlope: 2.210495 + outSlope: 2.210495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.79287374 + inSlope: 2.0321524 + outSlope: 2.0321524 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.8325596 + inSlope: 1.8603065 + outSlope: 1.8603065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.86880463 + inSlope: 1.694958 + outSlope: 1.694958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.90174156 + inSlope: 1.5361106 + outSlope: 1.5361106 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.931503 + inSlope: 1.3837581 + outSlope: 1.3837581 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9582215 + inSlope: 1.2379018 + outSlope: 1.2379018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9820296 + inSlope: 1.0985435 + outSlope: 1.0985435 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 1.00306 + inSlope: 0.9656805 + outSlope: 0.9656805 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 1.0214452 + inSlope: 0.83931506 + outSlope: 0.83931506 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 1.0373178 + inSlope: 0.71945024 + outSlope: 0.71945024 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 1.0508105 + inSlope: 0.6060827 + outSlope: 0.6060827 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 1.0620558 + inSlope: 0.4992081 + outSlope: 0.4992081 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 1.0711863 + inSlope: 0.39883232 + outSlope: 0.39883232 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.0783347 + inSlope: 0.30495748 + outSlope: 0.30495748 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 1.0836335 + inSlope: 0.2175781 + outSlope: 0.2175781 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0872154 + inSlope: 0.13669406 + outSlope: 0.13669406 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.0892129 + inSlope: 0.062305637 + outSlope: 0.062305637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.0897585 + inSlope: -0.005581322 + outSlope: -0.005581322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.0889851 + inSlope: -0.06697294 + outSlope: -0.06697294 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 1.0870249 + inSlope: -0.12186617 + outSlope: -0.12186617 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 1.084011 + inSlope: -0.170261 + outSlope: -0.170261 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 1.0800755 + inSlope: -0.21216291 + outSlope: -0.21216291 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 1.0753512 + inSlope: -0.24756385 + outSlope: -0.24756385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 1.0699708 + inSlope: -0.27646673 + outSlope: -0.27646673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 1.0640669 + inSlope: -0.29887673 + outSlope: -0.29887673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.0577718 + inSlope: -0.3147854 + outSlope: -0.3147854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0512185 + inSlope: -0.32419857 + outSlope: -0.32419857 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.0445392 + inSlope: -0.3271158 + outSlope: -0.3271158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.0378668 + inSlope: -0.32352927 + outSlope: -0.32352927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.0313339 + inSlope: -0.31345066 + outSlope: -0.31345066 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 1.0250729 + inSlope: -0.2968761 + outSlope: -0.2968761 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 1.0192165 + inSlope: -0.2738031 + outSlope: -0.2738031 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 1.0138973 + inSlope: -0.24423176 + outSlope: -0.24423176 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 1.0092479 + inSlope: -0.20816463 + outSlope: -0.20816463 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 1.0054008 + inSlope: -0.16559939 + outSlope: -0.16559939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 1.0024887 + inSlope: -0.1165331 + outSlope: -0.1165331 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.0006443 + inSlope: -0.060973972 + outSlope: -0.060973972 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.031572 + outSlope: -0.031572 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutOverhead + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -0.060974594 + outSlope: -0.060974594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.0012443794 + inSlope: -0.11328613 + outSlope: -0.11328613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: -0.0046239235 + inSlope: -0.20491463 + outSlope: -0.20491463 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: -0.009608242 + inSlope: -0.27055395 + outSlope: -0.27055395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: -0.015666941 + inSlope: -0.3102041 + outSlope: -0.3102041 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: -0.022269635 + inSlope: -0.3238651 + outSlope: -0.3238651 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: -0.028885925 + inSlope: -0.3115369 + outSlope: -0.3115369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: -0.034985427 + inSlope: -0.2732195 + outSlope: -0.2732195 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.04003774 + inSlope: -0.2089129 + outSlope: -0.2089129 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.043512482 + inSlope: -0.118617244 + outSlope: -0.118617244 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.04487926 + inSlope: -0.0023323726 + outSlope: -0.0023323726 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.043607682 + inSlope: 0.13994168 + outSlope: 0.13994168 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.039167356 + inSlope: 0.3082049 + outSlope: 0.3082049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: -0.031027893 + inSlope: 0.5024574 + outSlope: 0.5024574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: -0.018658884 + inSlope: 0.7226989 + outSlope: 0.7226989 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: -0.0015299736 + inSlope: 0.96892965 + outSlope: 0.96892965 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.020889245 + inSlope: 1.2411494 + outSlope: 1.2411494 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.049129207 + inSlope: 1.5393586 + outSlope: 1.5393586 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.08372022 + inSlope: 1.8635569 + outSlope: 1.8635569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.12519272 + inSlope: 2.2137444 + outSlope: 2.2137444 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.17407717 + inSlope: 2.589921 + outSlope: 2.589921 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.2309038 + inSlope: 2.992087 + outSlope: 2.992087 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.2962031 + inSlope: 3.4202416 + outSlope: 3.4202416 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.37050554 + inSlope: 3.8743854 + outSlope: 3.8743854 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.45434132 + inSlope: 4.2912545 + outSlope: 4.2912545 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5456587 + inSlope: 4.291253 + outSlope: 4.291253 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.6294944 + inSlope: 3.874385 + outSlope: 3.874385 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7037968 + inSlope: 3.4202418 + outSlope: 3.4202418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.76909626 + inSlope: 2.9920864 + outSlope: 2.9920864 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.8259229 + inSlope: 2.589922 + outSlope: 2.589922 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8748073 + inSlope: 2.2137446 + outSlope: 2.2137446 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9162798 + inSlope: 1.8635569 + outSlope: 1.8635569 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9508708 + inSlope: 1.5393584 + outSlope: 1.5393584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.9791107 + inSlope: 1.2411504 + outSlope: 1.2411504 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 1.00153 + inSlope: 0.9689287 + outSlope: 0.9689287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 1.0186589 + inSlope: 0.722698 + outSlope: 0.722698 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 1.0310279 + inSlope: 0.50245917 + outSlope: 0.50245917 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.0391674 + inSlope: 0.30820522 + outSlope: 0.30820522 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0436077 + inSlope: 0.13994193 + outSlope: 0.13994193 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.0448793 + inSlope: -0.0023334846 + outSlope: -0.0023334846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.0435125 + inSlope: -0.118618324 + outSlope: -0.118618324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.0400378 + inSlope: -0.20891258 + outSlope: -0.20891258 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 1.0349854 + inSlope: -0.273219 + outSlope: -0.273219 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 1.028886 + inSlope: -0.31153765 + outSlope: -0.31153765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 1.0222696 + inSlope: -0.32386562 + outSlope: -0.32386562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 1.015667 + inSlope: -0.31020248 + outSlope: -0.31020248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 1.0096083 + inSlope: -0.27055496 + outSlope: -0.27055496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 1.0046239 + inSlope: -0.20491424 + outSlope: -0.20491424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.0012444 + inSlope: -0.113285355 + outSlope: -0.113285355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.060976893 + outSlope: -0.060976893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.05512274 + outSlope: 0.05512274 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.0011249539 + inSlope: 0.031749398 + outSlope: 0.031749398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0012958937 + inSlope: 0.009012432 + outSlope: 0.009012432 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0014928082 + inSlope: 0.010381917 + outSlope: 0.010381917 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0017196453 + inSlope: 0.011959475 + outSlope: 0.011959475 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0019809501 + inSlope: 0.013776734 + outSlope: 0.013776734 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.002281961 + inSlope: 0.015870143 + outSlope: 0.015870143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.002628711 + inSlope: 0.018281661 + outSlope: 0.018281661 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.003028151 + inSlope: 0.021059643 + outSlope: 0.021059643 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.0034882883 + inSlope: 0.024259709 + outSlope: 0.024259709 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.0040183435 + inSlope: 0.027946007 + outSlope: 0.027946007 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.0046289414 + inSlope: 0.032192472 + outSlope: 0.032192472 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.005332322 + inSlope: 0.037084218 + outSlope: 0.037084218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.0061425827 + inSlope: 0.042719252 + outSlope: 0.042719252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.0070759654 + inSlope: 0.049210556 + outSlope: 0.049210556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.008151177 + inSlope: 0.056688268 + outSlope: 0.056688268 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.009389771 + inSlope: 0.0653023 + outSlope: 0.0653023 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.010816578 + inSlope: 0.07522516 + outSlope: 0.07522516 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.012460186 + inSlope: 0.08665575 + outSlope: 0.08665575 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.014353545 + inSlope: 0.09982344 + outSlope: 0.09982344 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.016534613 + inSlope: 0.11499189 + outSlope: 0.11499189 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.019047093 + inSlope: 0.13246512 + outSlope: 0.13246512 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.02194135 + inSlope: 0.15259348 + outSlope: 0.15259348 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.0252754 + inSlope: 0.17578049 + outSlope: 0.17578049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.029116066 + inSlope: 0.2024909 + outSlope: 0.2024909 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.03354033 + inSlope: 0.23326 + outSlope: 0.23326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.038636878 + inSlope: 0.26870453 + outSlope: 0.26870453 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.044507857 + inSlope: 0.3095349 + outSlope: 0.3095349 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.05127097 + inSlope: 0.35656962 + outSlope: 0.35656962 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.059061732 + inSlope: 0.4107514 + outSlope: 0.4107514 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.068036325 + inSlope: 0.47316626 + outSlope: 0.47316626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.07837463 + inSlope: 0.54506516 + outSlope: 0.54506516 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.09028387 + inSlope: 0.6278893 + outSlope: 0.6278893 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.10400275 + inSlope: 0.72329885 + outSlope: 0.72329885 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.119806305 + inSlope: 0.8332063 + outSlope: 0.8332063 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.1380112 + inSlope: 0.9598143 + outSlope: 0.9598143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.15898238 + inSlope: 1.105661 + outSlope: 1.105661 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.1831402 + inSlope: 1.2736691 + outSlope: 1.2736691 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.21096885 + inSlope: 1.4672065 + outSlope: 1.4672065 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.24302615 + inSlope: 1.6901529 + outSlope: 1.6901529 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.27995476 + inSlope: 1.9469767 + outSlope: 1.9469767 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.32249466 + inSlope: 2.2428246 + outSlope: 2.2428246 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.37149858 + inSlope: 2.5836287 + outSlope: 2.5836287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.42794883 + inSlope: 2.976218 + outSlope: 2.976218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.4929768 + inSlope: 3.428462 + outSlope: 3.428462 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.567886 + inSlope: 3.9494267 + outSlope: 3.9494267 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.6541781 + inSlope: 4.549556 + outSlope: 4.549556 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.7535823 + inSlope: 5.2408733 + outSlope: 5.2408733 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.86809117 + inSlope: 6.037236 + outSlope: 6.037236 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 6.463536 + outSlope: 6.463536 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 6.463533 + outSlope: 6.463533 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.13190883 + inSlope: 6.037234 + outSlope: 6.037234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.2464177 + inSlope: 5.2408705 + outSlope: 5.2408705 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.34582192 + inSlope: 4.5495596 + outSlope: 4.5495596 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.432114 + inSlope: 3.9494317 + outSlope: 3.9494317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.5070232 + inSlope: 3.4284601 + outSlope: 3.4284601 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.57205117 + inSlope: 2.9762158 + outSlope: 2.9762158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.6285014 + inSlope: 2.5836282 + outSlope: 2.5836282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.6775054 + inSlope: 2.242826 + outSlope: 2.242826 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.7200453 + inSlope: 1.9469774 + outSlope: 1.9469774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.75697386 + inSlope: 1.6901526 + outSlope: 1.6901526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.78903115 + inSlope: 1.4672053 + outSlope: 1.4672053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.8168598 + inSlope: 1.2736683 + outSlope: 1.2736683 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.8410176 + inSlope: 1.1056603 + outSlope: 1.1056603 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.8619888 + inSlope: 0.9598143 + outSlope: 0.9598143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.8801937 + inSlope: 0.83320725 + outSlope: 0.83320725 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.8959972 + inSlope: 0.72329915 + outSlope: 0.72329915 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.9097161 + inSlope: 0.6278895 + outSlope: 0.6278895 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9216254 + inSlope: 0.5450653 + outSlope: 0.5450653 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.9319637 + inSlope: 0.4731664 + outSlope: 0.4731664 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9409383 + inSlope: 0.4107511 + outSlope: 0.4107511 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.94872904 + inSlope: 0.35656935 + outSlope: 0.35656935 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.95549214 + inSlope: 0.30953535 + outSlope: 0.30953535 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.96136314 + inSlope: 0.26870495 + outSlope: 0.26870495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.9664597 + inSlope: 0.23325896 + outSlope: 0.23325896 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.9708839 + inSlope: 0.20249012 + outSlope: 0.20249012 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.9747246 + inSlope: 0.17578098 + outSlope: 0.17578098 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.97805864 + inSlope: 0.1525939 + outSlope: 0.1525939 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.9809529 + inSlope: 0.13246492 + outSlope: 0.13246492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.9834654 + inSlope: 0.11499101 + outSlope: 0.11499101 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9856464 + inSlope: 0.099824175 + outSlope: 0.099824175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9875398 + inSlope: 0.086656526 + outSlope: 0.086656526 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9891834 + inSlope: 0.075225174 + outSlope: 0.075225174 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.99061024 + inSlope: 0.06530225 + outSlope: 0.06530225 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9918488 + inSlope: 0.05668786 + outSlope: 0.05668786 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.99292403 + inSlope: 0.049211137 + outSlope: 0.049211137 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.99385744 + inSlope: 0.04271858 + outSlope: 0.04271858 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.99466765 + inSlope: 0.037083223 + outSlope: 0.037083223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.99537104 + inSlope: 0.032192633 + outSlope: 0.032192633 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.99598163 + inSlope: 0.027946 + outSlope: 0.027946 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9965117 + inSlope: 0.024260167 + outSlope: 0.024260167 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.99697185 + inSlope: 0.021060657 + outSlope: 0.021060657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.9973713 + inSlope: 0.018281676 + outSlope: 0.018281676 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99771804 + inSlope: 0.015869237 + outSlope: 0.015869237 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.99801904 + inSlope: 0.013776608 + outSlope: 0.013776608 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99828035 + inSlope: 0.01195996 + outSlope: 0.01195996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9985072 + inSlope: 0.01038282 + outSlope: 0.01038282 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99870414 + inSlope: 0.0090116 + outSlope: 0.0090116 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.998875 + inSlope: 0.031748697 + outSlope: 0.031748697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.05512395 + outSlope: 0.05512395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutExponential + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.031749398 + outSlope: 0.031749398 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00064794684 + inSlope: 0.021065656 + outSlope: 0.021065656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00085982267 + inSlope: 0.012079325 + outSlope: 0.012079325 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0011409805 + inSlope: 0.016029196 + outSlope: 0.016029196 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0015140756 + inSlope: 0.021270683 + outSlope: 0.021270683 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0020091718 + inSlope: 0.028226089 + outSlope: 0.028226089 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.002666161 + inSlope: 0.037455864 + outSlope: 0.037455864 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0035379827 + inSlope: 0.049703762 + outSlope: 0.049703762 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.0046948856 + inSlope: 0.06595671 + outSlope: 0.06595671 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.006230093 + inSlope: 0.087524295 + outSlope: 0.087524295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.008267307 + inSlope: 0.116144285 + outSlope: 0.116144285 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.010970675 + inSlope: 0.1541228 + outSlope: 0.1541228 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.014558033 + inSlope: 0.20452026 + outSlope: 0.20452026 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.019318439 + inSlope: 0.27139747 + outSlope: 0.27139747 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.025635485 + inSlope: 0.36014318 + outSlope: 0.36014318 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.034018163 + inSlope: 0.47790825 + outSlope: 0.47790825 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.045141935 + inSlope: 0.634182 + outSlope: 0.634182 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.059903152 + inSlope: 0.8415566 + outSlope: 0.8415566 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.07949119 + inSlope: 1.1167417 + outSlope: 1.1167417 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.105484426 + inSlope: 1.4819112 + outSlope: 1.4819112 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.13997738 + inSlope: 1.966489 + outSlope: 1.966489 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.18574929 + inSlope: 2.6095214 + outSlope: 2.6095214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.2464884 + inSlope: 3.4628224 + outSlope: 3.4628224 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.32708904 + inSlope: 4.59515 + outSlope: 4.59515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.43404558 + inSlope: 5.8522053 + outSlope: 5.8522053 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.56595445 + inSlope: 5.8522034 + outSlope: 5.8522034 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.6729109 + inSlope: 4.5951495 + outSlope: 4.5951495 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7535115 + inSlope: 3.4628234 + outSlope: 3.4628234 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.81425077 + inSlope: 2.6095207 + outSlope: 2.6095207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.86002266 + inSlope: 1.9664887 + outSlope: 1.9664887 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8945156 + inSlope: 1.4819111 + outSlope: 1.4819111 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.9205088 + inSlope: 1.1167419 + outSlope: 1.1167419 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.94009686 + inSlope: 0.8415574 + outSlope: 0.8415574 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.95485806 + inSlope: 0.6341817 + outSlope: 0.6341817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.96598184 + inSlope: 0.4779076 + outSlope: 0.4779076 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9743645 + inSlope: 0.36014277 + outSlope: 0.36014277 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.98068154 + inSlope: 0.27139798 + outSlope: 0.27139798 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.985442 + inSlope: 0.20452142 + outSlope: 0.20452142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.98902935 + inSlope: 0.15412305 + outSlope: 0.15412305 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9917327 + inSlope: 0.11614305 + outSlope: 0.11614305 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9937699 + inSlope: 0.0875238 + outSlope: 0.0875238 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9953051 + inSlope: 0.06595656 + outSlope: 0.06595656 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.996462 + inSlope: 0.049703263 + outSlope: 0.049703263 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9973338 + inSlope: 0.037457064 + outSlope: 0.037457064 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.99799085 + inSlope: 0.028226418 + outSlope: 0.028226418 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9984859 + inSlope: 0.021270914 + outSlope: 0.021270914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99885905 + inSlope: 0.016029846 + outSlope: 0.016029846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.9991402 + inSlope: 0.012078261 + outSlope: 0.012078261 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.99935204 + inSlope: 0.021065036 + outSlope: 0.021065036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.031750157 + outSlope: 0.031750157 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -0.052314557 + outSlope: -0.052314557 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.001067644 + inSlope: -0.025444414 + outSlope: -0.025444414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: -0.0010385475 + inSlope: 0.005232752 + outSlope: 0.005232752 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: -0.00085406227 + inSlope: 0.0134568885 + outSlope: 0.0134568885 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: -0.0004892868 + inSlope: 0.022480093 + outSlope: 0.022480093 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.00006349263 + inSlope: 0.03129618 + outSlope: 0.03129618 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.00078810833 + inSlope: 0.038599297 + outSlope: 0.038599297 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.0016389742 + inSlope: 0.042868868 + outSlope: 0.042868868 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.0025378577 + inSlope: 0.04251311 + outSlope: 0.04251311 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.0033742029 + inSlope: 0.036069594 + outSlope: 0.036069594 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.0040100864 + inSlope: 0.022452787 + outSlope: 0.022452787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.004290643 + inSlope: 0.0012296122 + outSlope: 0.0012296122 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.0040602745 + inSlope: -0.02710609 + outSlope: -0.02710609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.0031842724 + inSlope: -0.06090013 + outSlope: -0.06090013 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.0015745537 + inSlope: -0.0971908 + outSlope: -0.0971908 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: -0.0007826995 + inSlope: -0.13169663 + outSlope: -0.13169663 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: -0.0038008164 + inSlope: -0.15898778 + outSlope: -0.15898778 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: -0.0072719986 + inSlope: -0.17287135 + outSlope: -0.17287135 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: -0.010856791 + inSlope: -0.16701306 + outSlope: -0.16701306 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.014088855 + inSlope: -0.13578062 + outSlope: -0.13578062 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.016398858 + inSlope: -0.075263314 + outSlope: -0.075263314 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.01716083 + inSlope: 0.015613956 + outSlope: 0.015613956 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.015761554 + inSlope: 0.13401467 + outSlope: 0.13401467 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: -0.011690839 + inSlope: 0.27230874 + outSlope: 0.27230874 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: -0.0046469118 + inSlope: 0.41757476 + outSlope: 0.41757476 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.005353021 + inSlope: 0.5516899 + outSlope: 0.5516899 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.017871033 + inSlope: 0.65216935 + outSlope: 0.65216935 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.031972166 + inSlope: 0.693901 + outSlope: 0.693901 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.04619355 + inSlope: 0.6518136 + outSlope: 0.6518136 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.058576833 + inSlope: 0.50440913 + outSlope: 0.50440913 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.06678167 + inSlope: 0.23795524 + outSlope: 0.23795524 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.06828929 + inSlope: -0.14905128 + outSlope: -0.14905128 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.060697947 + inSlope: -0.64167124 + outSlope: -0.64167124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.042098638 + inSlope: -1.2052464 + outSlope: -1.2052464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.011504148 + inSlope: -1.7838209 + outSlope: -1.7838209 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: -0.030710435 + inSlope: -2.3010278 + outSlope: -2.3010278 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: -0.08241531 + inSlope: -2.664154 + outSlope: -2.664154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: -0.13945137 + inSlope: -2.7718143 + outSlope: -2.7718143 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: -0.19555055 + inSlope: -2.5253499 + outSlope: -2.5253499 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: -0.24252683 + inSlope: -1.8435811 + outSlope: -1.8435811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: -0.2707988 + inSlope: -0.6799241 + outSlope: -0.6799241 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: -0.2702789 + inSlope: 0.95974493 + outSlope: 0.95974493 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: -0.23162556 + inSlope: 3.0007684 + outSlope: 3.0007684 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: -0.14779861 + inSlope: 5.2877083 + outSlope: 5.2877083 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: -0.015800836 + inSlope: 7.5797567 + outSlope: 7.5797567 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.16157909 + inSlope: 9.556637 + outSlope: 9.556637 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.37426642 + inSlope: 10.837618 + outSlope: 10.837618 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.60393125 + inSlope: 11.015219 + outSlope: 11.015219 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.82386696 + inSlope: 9.70369 + outSlope: 9.70369 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 8.630523 + outSlope: 8.630523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 8.630519 + outSlope: 8.630519 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.17613304 + inSlope: 9.703685 + outSlope: 9.703685 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.39606875 + inSlope: 11.015214 + outSlope: 11.015214 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.6257336 + inSlope: 10.837628 + outSlope: 10.837628 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.8384209 + inSlope: 9.556646 + outSlope: 9.556646 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 1.0158008 + inSlope: 7.579754 + outSlope: 7.579754 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 1.1477987 + inSlope: 5.2877054 + outSlope: 5.2877054 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 1.2316256 + inSlope: 3.0007668 + outSlope: 3.0007668 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 1.2702789 + inSlope: 0.95974207 + outSlope: 0.95974207 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 1.2707987 + inSlope: -0.67992777 + outSlope: -0.67992777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 1.2425268 + inSlope: -1.8435793 + outSlope: -1.8435793 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 1.1955506 + inSlope: -2.5253472 + outSlope: -2.5253472 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 1.1394514 + inSlope: -2.7718132 + outSlope: -2.7718132 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 1.0824153 + inSlope: -2.6641521 + outSlope: -2.6641521 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 1.0307105 + inSlope: -2.3010273 + outSlope: -2.3010273 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.9884958 + inSlope: -1.7838223 + outSlope: -1.7838223 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.9579014 + inSlope: -1.205248 + outSlope: -1.205248 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.939302 + inSlope: -0.6416718 + outSlope: -0.6416718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.9317107 + inSlope: -0.14904992 + outSlope: -0.14904992 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.93321836 + inSlope: 0.23795503 + outSlope: 0.23795503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.9414232 + inSlope: 0.5044084 + outSlope: 0.5044084 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.95380646 + inSlope: 0.65181434 + outSlope: 0.65181434 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.96802783 + inSlope: 0.69390154 + outSlope: 0.69390154 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.982129 + inSlope: 0.65216863 + outSlope: 0.65216863 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.99464697 + inSlope: 0.55168927 + outSlope: 0.55168927 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 1.0046469 + inSlope: 0.41757548 + outSlope: 0.41757548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 1.0116909 + inSlope: 0.27231067 + outSlope: 0.27231067 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0157616 + inSlope: 0.13401589 + outSlope: 0.13401589 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.0171609 + inSlope: 0.015613584 + outSlope: 0.015613584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.0163989 + inSlope: -0.07526461 + outSlope: -0.07526461 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.0140889 + inSlope: -0.13578296 + outSlope: -0.13578296 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 1.0108567 + inSlope: -0.16701326 + outSlope: -0.16701326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 1.007272 + inSlope: -0.17286912 + outSlope: -0.17286912 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 1.0038009 + inSlope: -0.15898713 + outSlope: -0.15898713 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 1.0007827 + inSlope: -0.13169825 + outSlope: -0.13169825 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9984254 + inSlope: -0.09719123 + outSlope: -0.09719123 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.99681574 + inSlope: -0.060899496 + outSlope: -0.060899496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.99593973 + inSlope: -0.027106356 + outSlope: -0.027106356 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.99570936 + inSlope: 0.0012295847 + outSlope: 0.0012295847 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.9959899 + inSlope: 0.02245229 + outSlope: 0.02245229 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.9966258 + inSlope: 0.03606972 + outSlope: 0.03606972 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.99746215 + inSlope: 0.042514138 + outSlope: 0.042514138 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99836105 + inSlope: 0.042868994 + outSlope: 0.042868994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9992119 + inSlope: 0.038599033 + outSlope: 0.038599033 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9999365 + inSlope: 0.03129454 + outSlope: 0.03129454 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 1.0004892 + inSlope: 0.022478595 + outSlope: 0.022478595 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 1.000854 + inSlope: 0.013458233 + outSlope: 0.013458233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 1.0010386 + inSlope: 0.0052337674 + outSlope: 0.0052337674 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.0010676 + inSlope: -0.02544452 + outSlope: -0.02544452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.052314308 + outSlope: -0.052314308 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutElastic + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -0.025444414 + outSlope: -0.025444414 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: -0.00051927374 + inSlope: -0.0059937635 + outSlope: -0.0059937635 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: -0.0002446434 + inSlope: 0.022376532 + outSlope: 0.022376532 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.00039405416 + inSlope: 0.03708252 + outSlope: 0.03708252 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0012689289 + inSlope: 0.039469227 + outSlope: 0.039469227 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.0020050432 + inSlope: 0.0186496 + outSlope: 0.0186496 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.0020301372 + inSlope: -0.02983527 + outSlope: -0.02983527 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.00078727683 + inSlope: -0.09629839 + outSlope: -0.09629839 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: -0.0019004082 + inSlope: -0.152284 + outSlope: -0.152284 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: -0.0054283957 + inSlope: -0.15432598 + outSlope: -0.15432598 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: -0.008199429 + inSlope: -0.060083322 + outSlope: -0.060083322 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: -0.007880777 + inSlope: 0.1439613 + outSlope: 0.1439613 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: -0.0023234559 + inSlope: 0.4119993 + outSlope: 0.4119993 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.008935517 + inSlope: 0.62279546 + outSlope: 0.62279546 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.023096776 + inSlope: 0.59915507 + outSlope: 0.59915507 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.033390835 + inSlope: 0.17767891 + outSlope: 0.17767891 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.030348973 + inSlope: -0.6771491 + outSlope: -0.6771491 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.005752074 + inSlope: -1.7531375 + outSlope: -1.7531375 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: -0.041207656 + inSlope: -2.5364213 + outSlope: -2.5364213 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: -0.09777527 + inSlope: -2.3076975 + outSlope: -2.3076975 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: -0.1353994 + inSlope: -0.44191775 + outSlope: -0.44191775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: -0.11581278 + inSlope: 3.1237266 + outSlope: 3.1237266 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: -0.007900418 + inSlope: 7.422173 + outSlope: 7.422173 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.18713321 + inSlope: 10.285929 + outSlope: 10.285929 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.41193348 + inSlope: 9.82287 + outSlope: 9.82287 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.5880665 + inSlope: 9.822871 + outSlope: 9.822871 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.8128668 + inSlope: 10.285931 + outSlope: 10.285931 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 1.0079002 + inSlope: 7.422175 + outSlope: 7.422175 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 1.1158129 + inSlope: 3.1237218 + outSlope: 3.1237218 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 1.1353993 + inSlope: -0.44192326 + outSlope: -0.44192326 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 1.0977752 + inSlope: -2.307697 + outSlope: -2.307697 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 1.0412077 + inSlope: -2.5364203 + outSlope: -2.5364203 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9942479 + inSlope: -1.7531382 + outSlope: -1.7531382 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.96965104 + inSlope: -0.67714906 + outSlope: -0.67714906 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.9666092 + inSlope: 0.1776796 + outSlope: 0.1776796 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.97690326 + inSlope: 0.59915537 + outSlope: 0.59915537 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9910645 + inSlope: 0.6227964 + outSlope: 0.6227964 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 1.0023235 + inSlope: 0.41199997 + outSlope: 0.41199997 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 1.0078808 + inSlope: 0.14396071 + outSlope: 0.14396071 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 1.0081995 + inSlope: -0.060082983 + outSlope: -0.060082983 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 1.0054284 + inSlope: -0.15432584 + outSlope: -0.15432584 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 1.0019004 + inSlope: -0.15228452 + outSlope: -0.15228452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.99921274 + inSlope: -0.09629898 + outSlope: -0.09629898 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.99796987 + inSlope: -0.029835686 + outSlope: -0.029835686 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.99799496 + inSlope: 0.018649677 + outSlope: 0.018649677 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9987311 + inSlope: 0.039469317 + outSlope: 0.039469317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.99960595 + inSlope: 0.037081704 + outSlope: 0.037081704 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 1.0002446 + inSlope: 0.0223764 + outSlope: 0.0223764 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 1.0005193 + inSlope: -0.005993131 + outSlope: -0.005993131 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.02544452 + outSlope: -0.02544452 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.010204673 + outSlope: 0.010204673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00020825863 + inSlope: 0.020416647 + outSlope: 0.020416647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.00083333254 + inSlope: 0.04085958 + outSlope: 0.04085958 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0018759966 + inSlope: 0.061352164 + outSlope: 0.061352164 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.0033375025 + inSlope: 0.0819236 + outSlope: 0.0819236 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.005219817 + inSlope: 0.10259873 + outSlope: 0.10259873 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.0075252056 + inSlope: 0.12340235 + outSlope: 0.12340235 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.010256648 + inSlope: 0.14436811 + outSlope: 0.14436811 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.01341778 + inSlope: 0.1655222 + outSlope: 0.1655222 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.017012656 + inSlope: 0.1868953 + outSlope: 0.1868953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.021046162 + inSlope: 0.20851678 + outSlope: 0.20851678 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.025523543 + inSlope: 0.23042294 + outSlope: 0.23042294 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.030451179 + inSlope: 0.25265038 + outSlope: 0.25265038 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.035835803 + inSlope: 0.27523255 + outSlope: 0.27523255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.041685164 + inSlope: 0.298215 + outSlope: 0.298215 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.048007846 + inSlope: 0.32164156 + outSlope: 0.32164156 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.054813385 + inSlope: 0.34555686 + outSlope: 0.34555686 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.062112212 + inSlope: 0.37001422 + outSlope: 0.37001422 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.06991601 + inSlope: 0.39507204 + outSlope: 0.39507204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.07823759 + inSlope: 0.42078787 + outSlope: 0.42078787 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.08709103 + inSlope: 0.44723558 + outSlope: 0.44723558 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.09649211 + inSlope: 0.47449124 + outSlope: 0.47449124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.10645801 + inSlope: 0.5026355 + outSlope: 0.5026355 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.11700785 + inSlope: 0.53176874 + outSlope: 0.53176874 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.12816286 + inSlope: 0.5620006 + outSlope: 0.5620006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.13994664 + inSlope: 0.59344995 + outSlope: 0.59344995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.1523853 + inSlope: 0.6262588 + outSlope: 0.6262588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.16550821 + inSlope: 0.66059124 + outSlope: 0.66059124 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.17934823 + inSlope: 0.69663036 + outSlope: 0.69663036 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.19394213 + inSlope: 0.73459804 + outSlope: 0.73459804 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.20933181 + inSlope: 0.7747523 + outSlope: 0.7747523 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.22556466 + inSlope: 0.817395 + outSlope: 0.817395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.24269485 + inSlope: 0.8628955 + outSlope: 0.8628955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.26078486 + inSlope: 0.9116978 + outSlope: 0.9116978 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.27990705 + inSlope: 0.9643421 + outSlope: 0.9643421 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.3001458 + inSlope: 1.0215075 + outSlope: 1.0215075 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.3216012 + inSlope: 1.0840498 + outSlope: 1.0840498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.34439272 + inSlope: 1.1530614 + outSlope: 1.1530614 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.36866492 + inSlope: 1.2299806 + outSlope: 1.2299806 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.39459598 + inSlope: 1.3167374 + outSlope: 1.3167374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.42240936 + inSlope: 1.4159906 + outSlope: 1.4159906 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.45239156 + inSlope: 1.5315428 + outSlope: 1.5315428 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.48492128 + inSlope: 1.6690679 + outSlope: 1.6690679 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.52051675 + inSlope: 1.8375006 + outSlope: 1.8375006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.55992126 + inSlope: 2.0519783 + outSlope: 2.0519783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.60427094 + inSlope: 2.3409562 + outSlope: 2.3409562 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.6554706 + inSlope: 2.767158 + outSlope: 2.767158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.71721625 + inSlope: 3.5165439 + outSlope: 3.5165439 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.79900295 + inSlope: 6.9282055 + outSlope: 6.9282055 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 9.848861 + outSlope: 9.848861 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseOutCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 9.848856 + outSlope: 9.848856 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.20099705 + inSlope: 6.9282017 + outSlope: 6.9282017 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.28278375 + inSlope: 3.516542 + outSlope: 3.516542 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.3445294 + inSlope: 2.7671604 + outSlope: 2.7671604 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.39572906 + inSlope: 2.3409588 + outSlope: 2.3409588 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.44007874 + inSlope: 2.0519774 + outSlope: 2.0519774 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.47948325 + inSlope: 1.8374996 + outSlope: 1.8374996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.5150787 + inSlope: 1.6690673 + outSlope: 1.6690673 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.54760844 + inSlope: 1.5315437 + outSlope: 1.5315437 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.5775907 + inSlope: 1.4159914 + outSlope: 1.4159914 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.605404 + inSlope: 1.3167374 + outSlope: 1.3167374 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.6313351 + inSlope: 1.2299801 + outSlope: 1.2299801 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.6556073 + inSlope: 1.1530609 + outSlope: 1.1530609 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.6783988 + inSlope: 1.084049 + outSlope: 1.084049 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.6998542 + inSlope: 1.0215068 + outSlope: 1.0215068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.72009295 + inSlope: 0.964342 + outSlope: 0.964342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.7392151 + inSlope: 0.91169846 + outSlope: 0.91169846 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.75730515 + inSlope: 0.86289626 + outSlope: 0.86289626 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.77443534 + inSlope: 0.817395 + outSlope: 0.817395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.7906682 + inSlope: 0.7747518 + outSlope: 0.7747518 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.8060579 + inSlope: 0.734599 + outSlope: 0.734599 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.8206518 + inSlope: 0.6966313 + outSlope: 0.6966313 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.8344918 + inSlope: 0.6605903 + outSlope: 0.6605903 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.8476147 + inSlope: 0.6262583 + outSlope: 0.6262583 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.86005336 + inSlope: 0.59344995 + outSlope: 0.59344995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.87183714 + inSlope: 0.5620006 + outSlope: 0.5620006 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.88299215 + inSlope: 0.53176916 + outSlope: 0.53176916 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.893542 + inSlope: 0.5026366 + outSlope: 0.5026366 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.90350795 + inSlope: 0.47449052 + outSlope: 0.47449052 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.912909 + inSlope: 0.44723445 + outSlope: 0.44723445 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.9217624 + inSlope: 0.42078817 + outSlope: 0.42078817 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.930084 + inSlope: 0.39507204 + outSlope: 0.39507204 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.9378878 + inSlope: 0.3700145 + outSlope: 0.3700145 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.9451866 + inSlope: 0.34555668 + outSlope: 0.34555668 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.95199215 + inSlope: 0.32164255 + outSlope: 0.32164255 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9583149 + inSlope: 0.2982152 + outSlope: 0.2982152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9641642 + inSlope: 0.2752313 + outSlope: 0.2752313 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.9695488 + inSlope: 0.25265047 + outSlope: 0.25265047 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.97447646 + inSlope: 0.23042303 + outSlope: 0.23042303 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.97895384 + inSlope: 0.20851657 + outSlope: 0.20851657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.98298734 + inSlope: 0.18689515 + outSlope: 0.18689515 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9865822 + inSlope: 0.16552228 + outSlope: 0.16552228 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.98974335 + inSlope: 0.14436814 + outSlope: 0.14436814 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9924748 + inSlope: 0.12340242 + outSlope: 0.12340242 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9947802 + inSlope: 0.10259877 + outSlope: 0.10259877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.9966625 + inSlope: 0.081923544 + outSlope: 0.081923544 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.998124 + inSlope: 0.06135209 + outSlope: 0.06135209 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99916667 + inSlope: 0.040859602 + outSlope: 0.040859602 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.99979174 + inSlope: 0.020416657 + outSlope: 0.020416657 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.0102046775 + outSlope: 0.0102046775 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - m_Name: EaseInOutCircular + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0.020416647 + outSlope: 0.020416647 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.020408163 + value: 0.00041666627 + inSlope: 0.040884405 + outSlope: 0.040884405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.040816326 + value: 0.0016687512 + inSlope: 0.081975445 + outSlope: 0.081975445 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.06122449 + value: 0.0037626028 + inSlope: 0.123483405 + outSlope: 0.123483405 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.08163265 + value: 0.00670889 + inSlope: 0.1656317 + outSlope: 0.1656317 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10204082 + value: 0.010523081 + inSlope: 0.20865911 + outSlope: 0.20865911 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.12244898 + value: 0.015225589 + inSlope: 0.25282776 + outSlope: 0.25282776 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.14285715 + value: 0.020842582 + inSlope: 0.29843706 + outSlope: 0.29843706 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1632653 + value: 0.027406693 + inSlope: 0.34582788 + outSlope: 0.34582788 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18367347 + value: 0.034958005 + inSlope: 0.39540103 + outSlope: 0.39540103 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.20408164 + value: 0.043545514 + inSlope: 0.44763952 + outSlope: 0.44763952 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2244898 + value: 0.053229004 + inSlope: 0.50312996 + outSlope: 0.50312996 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.24489796 + value: 0.06408143 + inSlope: 0.5626093 + outSlope: 0.5626093 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.26530612 + value: 0.07619265 + inSlope: 0.6270206 + outSlope: 0.6270206 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.2857143 + value: 0.089674115 + inSlope: 0.69759464 + outSlope: 0.69759464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.30612245 + value: 0.104665905 + inSlope: 0.7759965 + outSlope: 0.7759965 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3265306 + value: 0.12134743 + inSlope: 0.8645464 + outSlope: 0.8645464 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3469388 + value: 0.13995352 + inSlope: 0.9666027 + outSlope: 0.9666027 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.36734694 + value: 0.1608006 + inSlope: 1.0872844 + outSlope: 1.0872844 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.3877551 + value: 0.18433246 + inSlope: 1.2348994 + outSlope: 1.2348994 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.40816328 + value: 0.21120468 + inSlope: 1.4241401 + outSlope: 1.4241401 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.42857143 + value: 0.24246064 + inSlope: 1.6845217 + outSlope: 1.6845217 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4489796 + value: 0.27996063 + inSlope: 2.0892286 + outSlope: 2.0892286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.46938777 + value: 0.3277353 + inSlope: 2.9287503 + outSlope: 2.9287503 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.48979592 + value: 0.39950147 + inSlope: 6.682703 + outSlope: 6.682703 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5102041 + value: 0.60049856 + inSlope: 6.682702 + outSlope: 6.682702 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.53061223 + value: 0.6722647 + inSlope: 2.9287498 + outSlope: 2.9287498 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5510204 + value: 0.7200393 + inSlope: 2.0892284 + outSlope: 2.0892284 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.5714286 + value: 0.7575394 + inSlope: 1.6845212 + outSlope: 1.6845212 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.59183675 + value: 0.78879535 + inSlope: 1.4241395 + outSlope: 1.4241395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6122449 + value: 0.8156675 + inSlope: 1.2349004 + outSlope: 1.2349004 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.63265306 + value: 0.8391994 + inSlope: 1.087286 + outSlope: 1.087286 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6530612 + value: 0.8600465 + inSlope: 0.96660256 + outSlope: 0.96660256 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.67346936 + value: 0.8786526 + inSlope: 0.8645458 + outSlope: 0.8645458 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6938776 + value: 0.8953341 + inSlope: 0.7759953 + outSlope: 0.7759953 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.71428573 + value: 0.9103259 + inSlope: 0.6975951 + outSlope: 0.6975951 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7346939 + value: 0.9238074 + inSlope: 0.6270211 + outSlope: 0.6270211 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.75510204 + value: 0.93591857 + inSlope: 0.56260955 + outSlope: 0.56260955 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.7755102 + value: 0.946771 + inSlope: 0.5031295 + outSlope: 0.5031295 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.79591835 + value: 0.95645446 + inSlope: 0.44763833 + outSlope: 0.44763833 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.81632656 + value: 0.965042 + inSlope: 0.39540142 + outSlope: 0.39540142 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8367347 + value: 0.9725933 + inSlope: 0.34582877 + outSlope: 0.34582877 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85714287 + value: 0.97915745 + inSlope: 0.29843718 + outSlope: 0.29843718 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.877551 + value: 0.9847744 + inSlope: 0.25282717 + outSlope: 0.25282717 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8979592 + value: 0.9894769 + inSlope: 0.20865995 + outSlope: 0.20865995 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9183673 + value: 0.99329114 + inSlope: 0.16563158 + outSlope: 0.16563158 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.93877554 + value: 0.9962374 + inSlope: 0.123482525 + outSlope: 0.123482525 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9591837 + value: 0.99833125 + inSlope: 0.08197622 + outSlope: 0.08197622 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.97959185 + value: 0.99958336 + inSlope: 0.040884424 + outSlope: 0.040884424 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.020415196 + outSlope: 0.020415196 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMCurves.curves.meta b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMCurves.curves.meta new file mode 100644 index 0000000..fdc90e5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMCurves.curves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7ae097ceef007248a49d4df212cceb7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMPlotterEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMPlotterEditor.cs new file mode 100644 index 0000000..f9de3a2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMPlotterEditor.cs @@ -0,0 +1,50 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A custom editor displaying a foldable list of MMFeedbacks, a dropdown to add more, as well as test buttons to test your feedbacks at runtime + /// + [CanEditMultipleObjects] + [CustomEditor(typeof(MMPlotter), true)] + public class MMPlotterEditor : Editor + { + protected string[] _typeDisplays; + protected string[] _excludedProperties = new string[] { "TweenMethod", "m_Script" }; + + protected MMPlotter _mmPlotter; + + protected virtual void OnEnable() + { + _mmPlotter = target as MMPlotter; + _typeDisplays = _mmPlotter.GetMethodsList(); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + Undo.RecordObject(target, "Modified Plotter"); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Tween Method", EditorStyles.boldLabel); + + _mmPlotter.TweenMethodIndex = EditorGUILayout.Popup("Tween Method", _mmPlotter.TweenMethodIndex, _typeDisplays, EditorStyles.popup); + + //int newItem = EditorGUILayout.Popup(0, _typeDisplays) - 1; + //DrawDefaultInspector(); + DrawPropertiesExcluding(serializedObject, _excludedProperties); + + if (GUILayout.Button("Draw Graph")) + { + _mmPlotter.DrawGraph(); + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMPlotterEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMPlotterEditor.cs.meta new file mode 100644 index 0000000..4d55f4f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMCurves/MMPlotterEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e2bca92e67ccd243a920ed5311a183e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMGUI.meta b/Assets/Feel/MMTools/Accessories/Editor/MMGUI.meta new file mode 100644 index 0000000..dffb59d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMGUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec2c09d8ce924514f83d373d66c61bd2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMGUI/MMHealthBarEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMGUI/MMHealthBarEditor.cs new file mode 100644 index 0000000..63e69fd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMGUI/MMHealthBarEditor.cs @@ -0,0 +1,43 @@ +using UnityEditor; + +#if MM_UI +namespace MoreMountains.Tools +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(MMHealthBar),true)] + /// + /// Custom editor for health bars (mostly a switch for prefab based / drawn bars + /// + public class HealthBarEditor : Editor + { + public MMHealthBar HealthBarTarget + { + get + { + return (MMHealthBar)target; + } + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + switch (HealthBarTarget.HealthBarType) + { + case MMHealthBar.HealthBarTypes.Prefab: + Editor.DrawPropertiesExcluding(serializedObject, new string[] {"TargetProgressBar", "NestDrawnHealthBar", "Billboard", "FollowTargetMode", "Size","BackgroundPadding", "SortingLayerName", "InitialRotationAngles", "ForegroundColor", "DelayedColor", "BorderColor", "BackgroundColor", "Delay", "LerpFrontBar", "LerpFrontBarSpeed", "LerpDelayedBar", "LerpDelayedBarSpeed", "BumpScaleOnChange", "BumpDuration", "BumpAnimationCurve" }); + break; + case MMHealthBar.HealthBarTypes.Drawn: + Editor.DrawPropertiesExcluding(serializedObject, new string[] {"TargetProgressBar", "HealthBarPrefab" }); + break; + case MMHealthBar.HealthBarTypes.Existing: + Editor.DrawPropertiesExcluding(serializedObject, new string[] {"HealthBarPrefab", "NestDrawnHealthBar", "Billboard", "FollowTargetMode", "Size","BackgroundPadding", "SortingLayerName", "InitialRotationAngles", "ForegroundColor", "DelayedColor", "BorderColor", "BackgroundColor", "Delay", "LerpFrontBar", "LerpFrontBarSpeed", "LerpDelayedBar", "LerpDelayedBarSpeed", "BumpScaleOnChange", "BumpDuration", "BumpAnimationCurve" }); + break; + } + + serializedObject.ApplyModifiedProperties(); + } + + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMGUI/MMHealthBarEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMGUI/MMHealthBarEditor.cs.meta new file mode 100644 index 0000000..12cff8a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMGUI/MMHealthBarEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0cb989d69836540e780467ed8454742c +timeCreated: 1470860033 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMGizmos.meta b/Assets/Feel/MMTools/Accessories/Editor/MMGizmos.meta new file mode 100644 index 0000000..56719aa --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMGizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e8270d09483571e4991c729b5abcc708 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMGizmos/MMGizmoEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMGizmos/MMGizmoEditor.cs new file mode 100644 index 0000000..5ce2207 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMGizmos/MMGizmoEditor.cs @@ -0,0 +1,384 @@ +using UnityEditor; +using UnityEditor.ShortcutManagement; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// a custom editor for the MMGizmo component + /// + [CustomEditor(typeof(MMGizmo), true)] + [CanEditMultipleObjects] + public class MMGizmoEditor : Editor + { + /// + /// Lets you press G when in scene view to toggle gizmos on or off + /// + [Shortcut("Toggle Gizmos", typeof(SceneView), KeyCode.G, displayName = "ToggleGizmos")] + public static void ToggleGizmos() + { + SceneView.lastActiveSceneView.drawGizmos = !SceneView.lastActiveSceneView.drawGizmos; + } + + /// + /// When the target object is selected, we draw our gizmos + /// + /// + /// + [DrawGizmo(GizmoType.Selected)] + private static void DrawGizmoSelected(MMGizmo mmGizmo, GizmoType gizmoType) + { + if (!mmGizmo.DisplayGizmo) + { + return; + } + DrawGizmos(mmGizmo); + } + + /// + /// When the target object is not selected, we draw our gizmos if needed + /// + /// + /// + [DrawGizmo(GizmoType.NonSelected)] + private static void DrawGizmoNonSelected(MMGizmo mmGizmo, GizmoType gizmoType) + { + if (!mmGizmo.DisplayGizmo) + { + return; + } + if (mmGizmo.DisplayMode != MMGizmo.DisplayModes.Always) + { + return; + } + DrawGizmos(mmGizmo); + } + + /// + /// Draws gizmos and text + /// + /// + private static void DrawGizmos(MMGizmo mmGizmo) + { + if (!mmGizmo.Initialized) + { + Initialization(mmGizmo); + } + + if (TestDistance(mmGizmo, mmGizmo.ViewDistance)) + { + Gizmos.color = mmGizmo.GizmoColor; + Gizmos.matrix = mmGizmo.transform.localToWorldMatrix; + + switch (mmGizmo.GizmoType) + { + case MMGizmo.GizmoTypes.Collider: + DrawColliderGizmo(mmGizmo); + break; + case MMGizmo.GizmoTypes.Position: + DrawPositionGizmo(mmGizmo); + break; + } + } + DrawText(mmGizmo); + } + + /// + /// Tests whether or not gizmos should be drawn based on distance to the scene camera + /// + /// + /// + /// + private static bool TestDistance(MMGizmo mmGizmo, float viewDistance) + { + float distanceToCamera = 0f; + + if (SceneView.currentDrawingSceneView == null) + { + distanceToCamera = Vector3.Distance(mmGizmo.transform.position, Camera.main.transform.position); + return (distanceToCamera < viewDistance); + } + else + { + distanceToCamera = Vector3.Distance(mmGizmo.transform.position, SceneView.currentDrawingSceneView.camera.transform.position); + return (distanceToCamera < viewDistance); + } + } + + /// + /// On Enable we initialize our gizmo + /// + protected virtual void OnEnable() + { + Initialization(target as MMGizmo); + } + + /// + /// On validate we initialize our gizmo + /// + protected void OnValidate() + { + Initialization(target as MMGizmo); + } + + /// + /// Initializes the gizmo, caching components, values, and inits the GUIStyle + /// + /// + private static void Initialization(MMGizmo mmGizmo) + { + mmGizmo._sphereCollider = mmGizmo.gameObject.GetComponent(); + mmGizmo._boxCollider = mmGizmo.gameObject.GetComponent(); + mmGizmo._meshCollider = mmGizmo.gameObject.GetComponent(); + mmGizmo._circleCollider2D = mmGizmo.gameObject.GetComponent(); + mmGizmo._boxCollider2D = mmGizmo.gameObject.GetComponent(); + + mmGizmo._sphereColliderNotNull = (mmGizmo._sphereCollider != null); + mmGizmo._boxColliderNotNull = (mmGizmo._boxCollider != null); + mmGizmo._meshColliderNotNull = (mmGizmo._meshCollider != null); + mmGizmo._circleCollider2DNotNull = (mmGizmo._circleCollider2D != null); + mmGizmo._boxCollider2DNotNull = (mmGizmo._boxCollider2D != null); + + mmGizmo._vector3Zero = Vector3.zero; + mmGizmo._textureRect = new Rect(0f, 0f, mmGizmo.TextureSize.x, mmGizmo.TextureSize.y); + mmGizmo._positionTextureNotNull = (mmGizmo.PositionTexture != null); + + mmGizmo._textGUIStyle = new GUIStyle(); + mmGizmo._textGUIStyle.normal.textColor = mmGizmo.TextColor; + mmGizmo._textGUIStyle.fontSize = mmGizmo.TextSize; + mmGizmo._textGUIStyle.fontStyle = mmGizmo.TextFontStyle; + mmGizmo._textGUIStyle.padding = new RectOffset((int)mmGizmo.TextPadding.x, (int)mmGizmo.TextPadding.y, (int)mmGizmo.TextPadding.z, (int)mmGizmo.TextPadding.w); + mmGizmo._textGUIStyle.normal.background = MMGUI.MakeTex(600, 100, mmGizmo.TextBackgroundColor); + + mmGizmo.Initialized = true; + } + + /// + /// Draws a gizmo for the associated collider + /// + /// + private static void DrawColliderGizmo(MMGizmo mmGizmo) + { + if (mmGizmo._sphereColliderNotNull) + { + if (mmGizmo.ColliderRenderType == MMGizmo.ColliderRenderTypes.Full) + { + Gizmos.DrawSphere(ComputeGizmoPosition(mmGizmo, mmGizmo._sphereCollider.center), mmGizmo._sphereCollider.radius); + } + else + { + Gizmos.DrawWireSphere(ComputeGizmoPosition(mmGizmo, mmGizmo._sphereCollider.center), mmGizmo._sphereCollider.radius); + } + } + + if (mmGizmo._boxColliderNotNull) + { + if (mmGizmo.ColliderRenderType == MMGizmo.ColliderRenderTypes.Full) + { + Gizmos.DrawCube(ComputeGizmoPosition(mmGizmo, mmGizmo._boxCollider.center), mmGizmo._boxCollider.size); + } + else + { + Gizmos.DrawWireCube(ComputeGizmoPosition(mmGizmo, mmGizmo._boxCollider.center), mmGizmo._boxCollider.size); + } + } + + if (mmGizmo._circleCollider2DNotNull) + { + if (mmGizmo.ColliderRenderType == MMGizmo.ColliderRenderTypes.Full) + { + Gizmos.DrawSphere((Vector3)ComputeGizmoPosition(mmGizmo, mmGizmo._circleCollider2D.offset), mmGizmo._circleCollider2D.radius); + } + else + { + Gizmos.DrawWireSphere((Vector3)ComputeGizmoPosition(mmGizmo, mmGizmo._circleCollider2D.offset), mmGizmo._circleCollider2D.radius); + } + } + + if (mmGizmo._boxCollider2DNotNull) + { + Vector3 gizmoSize = new Vector3(); + gizmoSize.x = mmGizmo._boxCollider2D.size.x ; + gizmoSize.y = mmGizmo._boxCollider2D.size.y ; + gizmoSize.z = 0.1f; + if (mmGizmo.ColliderRenderType == MMGizmo.ColliderRenderTypes.Full) + { + Gizmos.DrawCube(ComputeGizmoPosition(mmGizmo, mmGizmo._boxCollider2D.offset), gizmoSize); + } + else + { + Gizmos.DrawWireCube(ComputeGizmoPosition(mmGizmo, mmGizmo._boxCollider2D.offset), gizmoSize); + } + } + + if (mmGizmo._meshColliderNotNull) + { + if (mmGizmo.ColliderRenderType == MMGizmo.ColliderRenderTypes.Full) + { + Gizmos.DrawMesh(mmGizmo._meshCollider.sharedMesh); + } + else + { + Gizmos.DrawWireMesh(mmGizmo._meshCollider.sharedMesh); + } + } + } + + /// + /// Draws a position gizmo + /// + /// + private static void DrawPositionGizmo(MMGizmo mmGizmo) + { + switch (mmGizmo.PositionMode) + { + case MMGizmo.PositionModes.Point: + MMDebug.DrawGizmoPoint(ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero), mmGizmo.GizmoColor, mmGizmo.PositionSize); + break; + case MMGizmo.PositionModes.Cube: + Gizmos.DrawCube(ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero), Vector3.one * mmGizmo.PositionSize); + break; + case MMGizmo.PositionModes.Sphere: + Gizmos.DrawSphere(ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero), mmGizmo.PositionSize); + break; + case MMGizmo.PositionModes.WireCube: + Gizmos.DrawWireCube(ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero), Vector3.one * mmGizmo.PositionSize); + break; + case MMGizmo.PositionModes.WireSphere: + Gizmos.DrawWireSphere(ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero), mmGizmo.PositionSize); + break; + case MMGizmo.PositionModes.Texture: + if (mmGizmo._positionTextureNotNull) + { + Handles.BeginGUI(); + mmGizmo._worldToGUIPosition = HandleUtility.WorldToGUIPoint(ComputeGizmoPosition(mmGizmo, mmGizmo.transform.position, false)); + mmGizmo._textureRect = new Rect(mmGizmo._worldToGUIPosition.x - mmGizmo.TextureSize.x/2f, mmGizmo._worldToGUIPosition.y - mmGizmo.TextureSize.y/2f, mmGizmo.TextureSize.x, mmGizmo.TextureSize.y); + GUI.Label(mmGizmo._textureRect, mmGizmo.PositionTexture); + Handles.EndGUI(); + } + break; + case MMGizmo.PositionModes.Arrows: + Handles.color = Handles.xAxisColor; + Handles.ArrowHandleCap(0, ComputeGizmoPosition(mmGizmo, mmGizmo.transform.position, false), + Quaternion.LookRotation(mmGizmo.transform.right, mmGizmo.transform.up), mmGizmo.PositionSize, EventType.Repaint); + Handles.color = Handles.yAxisColor; + Handles.ArrowHandleCap(0, ComputeGizmoPosition(mmGizmo, mmGizmo.transform.position, false), + Quaternion.LookRotation(mmGizmo.transform.up, mmGizmo.transform.up), mmGizmo.PositionSize, EventType.Repaint); + Handles.color = Handles.zAxisColor; + Handles.ArrowHandleCap(0, ComputeGizmoPosition(mmGizmo, mmGizmo.transform.position, false), + Quaternion.LookRotation(mmGizmo.transform.forward, mmGizmo.transform.up), mmGizmo.PositionSize, EventType.Repaint); + break; + case MMGizmo.PositionModes.RightArrow: + Handles.color = mmGizmo.GizmoColor; + Handles.ArrowHandleCap(0, ComputeGizmoPosition(mmGizmo, mmGizmo.transform.position, false), + Quaternion.LookRotation(mmGizmo.transform.right, mmGizmo.transform.up), mmGizmo.PositionSize, EventType.Repaint); + break; + case MMGizmo.PositionModes.UpArrow: + Handles.color = mmGizmo.GizmoColor; + Handles.ArrowHandleCap(0, ComputeGizmoPosition(mmGizmo, mmGizmo.transform.position, false), + Quaternion.LookRotation(mmGizmo.transform.up, mmGizmo.transform.up), mmGizmo.PositionSize, EventType.Repaint); + break; + case MMGizmo.PositionModes.ForwardArrow: + Handles.color = mmGizmo.GizmoColor; + Handles.ArrowHandleCap(0, ComputeGizmoPosition(mmGizmo, mmGizmo.transform.position, false), + Quaternion.LookRotation(mmGizmo.transform.forward, mmGizmo.transform.up), mmGizmo.PositionSize, EventType.Repaint); + break; + case MMGizmo.PositionModes.Lines: + Vector3 origin = ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero); + Vector3 destination = origin + Vector3.right * mmGizmo.PositionSize; + Gizmos.DrawLine(origin, destination); + destination = origin + Vector3.up * mmGizmo.PositionSize; + Gizmos.DrawLine(origin, destination); + destination = origin + Vector3.forward * mmGizmo.PositionSize; + Gizmos.DrawLine(origin, destination); + break; + case MMGizmo.PositionModes.RightLine: + Vector3 rightOrigin = ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero); + Vector3 rightDestination = rightOrigin + Vector3.right * mmGizmo.PositionSize; + Gizmos.DrawLine(rightOrigin, rightDestination); + break; + case MMGizmo.PositionModes.UpLine: + Vector3 upOrigin = ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero); + Vector3 upDestination = upOrigin + Vector3.up * mmGizmo.PositionSize; + Gizmos.DrawLine(upOrigin, upDestination); + break; + case MMGizmo.PositionModes.ForwardLine: + Vector3 fwdOrigin = ComputeGizmoPosition(mmGizmo, mmGizmo._vector3Zero); + Vector3 fwdDestination = fwdOrigin + Vector3.forward * mmGizmo.PositionSize; + Gizmos.DrawLine(fwdOrigin, fwdDestination); + break; + } + } + + /// + /// Draws our gizmo text + /// + /// + private static void DrawText(MMGizmo mmGizmo) + { + if (!mmGizmo.DisplayText) + { + return; + } + + if (!TestDistance(mmGizmo, mmGizmo.TextMaxDistance)) + { + return; + } + + switch (mmGizmo.TextMode) + { + case MMGizmo.TextModes.GameObjectName: + mmGizmo._textToDisplay = mmGizmo.gameObject.name; + break; + case MMGizmo.TextModes.CustomText: + mmGizmo._textToDisplay = mmGizmo.TextToDisplay; + break; + case MMGizmo.TextModes.Position: + mmGizmo._textToDisplay = mmGizmo.transform.position.ToString(); + break; + case MMGizmo.TextModes.Rotation: + mmGizmo._textToDisplay = mmGizmo.transform.rotation.ToString(); + break; + case MMGizmo.TextModes.Scale: + mmGizmo._textToDisplay = mmGizmo.transform.localScale.ToString(); + break; + case MMGizmo.TextModes.Property: + if (mmGizmo.TargetProperty.PropertyFound) + { + mmGizmo._textToDisplay = mmGizmo.TargetProperty.GetRawValue().ToString(); + } + break; + } + + if (mmGizmo._textToDisplay != "") + { + Handles.Label(mmGizmo.transform.position + mmGizmo.TextOffset, mmGizmo._textToDisplay, mmGizmo._textGUIStyle); + } + } + + /// + /// Computes the position at which to draw the gizmo + /// + /// + /// + /// + /// + private static Vector3 ComputeGizmoPosition(MMGizmo mmGizmo, Vector3 position, bool relativeLock = true) + { + mmGizmo._newPosition = position + mmGizmo.GizmoOffset; + + if (mmGizmo.LockX || mmGizmo.LockY || mmGizmo.LockZ) + { + Vector3 mmGizmoNewPosition = mmGizmo._newPosition; + if (mmGizmo.LockX) { mmGizmoNewPosition.x = relativeLock ? - mmGizmo.transform.position.x + mmGizmo.LockedX : mmGizmo.LockedX; } + if (mmGizmo.LockY) { mmGizmoNewPosition.y = relativeLock ? - mmGizmo.transform.position.y + mmGizmo.LockedY : mmGizmo.LockedY; } + if (mmGizmo.LockZ) { mmGizmoNewPosition.z = relativeLock ? - mmGizmo.transform.position.z + mmGizmo.LockedZ : mmGizmo.LockedZ; } + mmGizmo._newPosition = mmGizmoNewPosition; + } + + return mmGizmo._newPosition; + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMGizmos/MMGizmoEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMGizmos/MMGizmoEditor.cs.meta new file mode 100644 index 0000000..d308894 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMGizmos/MMGizmoEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b4b64ec300cb6948b1022cd5e3311c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance.meta new file mode 100644 index 0000000..22a4ced --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80980790afe30ae46a76dc36a8ae3fbc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanEmptyFolders.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanEmptyFolders.cs new file mode 100644 index 0000000..a52e766 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanEmptyFolders.cs @@ -0,0 +1,66 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using System.IO; +using System.Text; +using System.Linq; +using System; + +namespace MoreMountains.Tools +{ + /// + /// A maintenance class that removes all empty directories from a project via a menu item + /// + public class MMCleanEmptyFolders : MonoBehaviour + { + static string _consoleLog = ""; + static List _listOfEmptyDirectories = new List(); + + /// + /// Parses the project for empty directories and removes them, as well as their associated meta file + /// + [MenuItem("Tools/More Mountains/Cleanup empty folders", false, 504)] + protected static void CleanupMissingScripts() + { + _listOfEmptyDirectories.Clear(); + var assetsDir = Application.dataPath + Path.DirectorySeparatorChar; + GetEmptyDirectories(new DirectoryInfo(assetsDir), _listOfEmptyDirectories); + + if (0 < _listOfEmptyDirectories.Count) + { + _consoleLog = "[MMCleanEmptyFolders] Removed "+ _listOfEmptyDirectories.Count + " empty directories:\n"; + foreach (var d in _listOfEmptyDirectories) + { + _consoleLog += "· "+ d.FullName.Replace(assetsDir, "") + "\n"; + FileUtil.DeleteFileOrDirectory(d.FullName); + FileUtil.DeleteFileOrDirectory(d.FullName+".meta"); + } + + MMDebug.DebugLogInfo(_consoleLog); + _consoleLog = ""; + + AssetDatabase.Refresh(); + } + } + + /// + /// Returns true if a directory is empty and updates a list of empty directories + /// + /// + /// + /// + static bool GetEmptyDirectories(DirectoryInfo directory, List listOfEmptyDirectories) + { + bool directoryIsEmpty = true; + directoryIsEmpty = (directory.GetDirectories().Count(x => !GetEmptyDirectories(x, listOfEmptyDirectories)) == 0) && (directory.GetFiles("*.*").All(x => x.Extension == ".meta")); + + if (directoryIsEmpty) + { + listOfEmptyDirectories.Add(directory); + } + + return directoryIsEmpty; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanEmptyFolders.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanEmptyFolders.cs.meta new file mode 100644 index 0000000..76ba3b9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanEmptyFolders.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eef8a54b228d3d148b605064c04e66a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanupMissingScripts.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanupMissingScripts.cs new file mode 100644 index 0000000..2f33290 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanupMissingScripts.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This class lets you clean all missing scripts on a selection of gameobjects + /// + public class MMCleanupMissingScripts : MonoBehaviour + { + /// + /// Processes the cleaning of gameobjects for all missing scripts on them + /// + [MenuItem("Tools/More Mountains/Cleanup missing scripts on selected GameObjects", false, 504)] + protected static void CleanupMissingScripts() + { + Object[] collectedDeepHierarchy = EditorUtility.CollectDeepHierarchy(Selection.gameObjects); + int removedComponentsCounter = 0; + int gameobjectsAffectedCounter = 0; + foreach (Object targetObject in collectedDeepHierarchy) + { + if (targetObject is GameObject gameObject) + { + int amountOfMissingScripts = GameObjectUtility.GetMonoBehavioursWithMissingScriptCount(gameObject); + if (amountOfMissingScripts > 0) + { + Undo.RegisterCompleteObjectUndo(gameObject, "Removing missing scripts"); + GameObjectUtility.RemoveMonoBehavioursWithMissingScript(gameObject); + removedComponentsCounter += amountOfMissingScripts; + gameobjectsAffectedCounter++; + } + } + } + MMDebug.DebugLogInfo("[MMCleanupMissingScripts] Removed " + removedComponentsCounter + " missing scripts from " + gameobjectsAffectedCounter + " GameObjects"); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanupMissingScripts.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanupMissingScripts.cs.meta new file mode 100644 index 0000000..ef74787 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMCleanupMissingScripts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05ed97bf9ce684b47ab50ba3bf13134e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindMissingScriptsRecursively.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindMissingScriptsRecursively.cs new file mode 100644 index 0000000..782f377 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindMissingScriptsRecursively.cs @@ -0,0 +1,72 @@ +// Original FindMissingScriptsRecursively script by SimTex and Clement +// http://wiki.unity3d.com/index.php?title=FindMissingScripts + +#if UNITY_EDITOR + +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + public class MMFindMissingScriptsRecursively : EditorWindow + { + static int go_count = 0, components_count = 0, missing_count = 0; + + [MenuItem("Tools/More Mountains/Find missing scripts recursively", false, 505)] + public static void ShowWindow() + { + EditorWindow.GetWindow(typeof(MMFindMissingScriptsRecursively)); + } + + #if UNITY_EDITOR + public void OnGUI() + { + if (GUILayout.Button("Find Missing Scripts in selected GameObjects")) + { + FindInSelected(); + } + } + #endif + + private static void FindInSelected() + { + GameObject[] go = Selection.gameObjects; + go_count = 0; + components_count = 0; + missing_count = 0; + foreach (GameObject g in go) + { + FindInGO(g); + } + Debug.Log(string.Format("Searched {0} GameObjects, {1} components, found {2} missing", go_count, components_count, missing_count)); + } + + private static void FindInGO(GameObject g) + { + go_count++; + Component[] components = g.GetComponents(); + for (int i = 0; i < components.Length; i++) + { + components_count++; + if (components[i] == null) + { + missing_count++; + string s = g.name; + Transform t = g.transform; + while (t.parent != null) + { + s = t.parent.name +"/"+s; + t = t.parent; + } + Debug.Log (s + " has an empty script attached in position: " + i, g); + } + } + // Now recurse through each child GO (if there are any): + foreach (Transform childT in g.transform) + { + FindInGO(childT.gameObject); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindMissingScriptsRecursively.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindMissingScriptsRecursively.cs.meta new file mode 100644 index 0000000..efca91d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindMissingScriptsRecursively.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c87833dd08a8c842823386dde78cb2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindPrefabsByMono.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindPrefabsByMono.cs new file mode 100644 index 0000000..d3e3045 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindPrefabsByMono.cs @@ -0,0 +1,283 @@ +#if UNITY_EDITOR + +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// As static class that lets you look for missing scripts on any prefab in your project, or for prefabs equipped with a certain type of MonoBehaviour + /// + public class MMFindPrefabsByMono : EditorWindow + { + protected Vector2 _scrollView; + protected string[] _tabs = new string[] { "Find prefabs with missing components", "Find prefabs by MonoBehaviour" }; + protected int _selectedTab; + protected int _lastSelectedTab = -1; + protected MonoScript _searchedMonoBehaviour; + protected MonoScript _lastSearchedMonoBehaviour; + protected string _searchedMonoBehaviourName = ""; + protected List _resultsList; + + static GUIStyle _padded; + static GUIStyle _horizontalPadded; + static int _horizontalPadding = 20; + static int _verticalPadding = 20; + static RectOffset _padding; + static RectOffset _horizontalPaddingOnly; + + /// + /// Menu bound method + /// + [MenuItem("Tools/More Mountains/Prefab Finder", false, 504)] + public static void MenuAction() + { + OpenWindow(); + } + + /// + /// Opens and resizes the window + /// + public static void OpenWindow() + { + InitializePaddingAndStyles(); + MMFindPrefabsByMono window = (MMFindPrefabsByMono)EditorWindow.GetWindow(typeof(MMFindPrefabsByMono)); + window.position = new Rect(400, 400, 800, 600); + window.titleContent = new GUIContent("MM Prefabs Finder"); + window.Show(); + } + + /// + /// Initializes padding variables and GUI styles + /// + static void InitializePaddingAndStyles() + { + if (_padding == null) + { + _padding = new RectOffset(_horizontalPadding, _horizontalPadding, _verticalPadding, _verticalPadding); + _horizontalPaddingOnly = new RectOffset(_horizontalPadding, _horizontalPadding, 0, 0); + _padded = new GUIStyle + { + name = "padded", + padding = _padding + }; + _horizontalPadded = new GUIStyle + { + name = "horizontalPadded", + padding = _horizontalPaddingOnly + }; + } + } + + /// + /// Draws tab buttons + /// + protected virtual void DrawTabs() + { + GUI.skin.box.padding = _padding; + GUILayout.BeginHorizontal("box"); + GUILayout.Space(10); + _selectedTab = GUILayout.Toolbar(_selectedTab, _tabs); + GUILayout.EndHorizontal(); + } + + /// + /// Detects changes in tabs selection + /// + protected virtual void HandleTabsChange() + { + if (_lastSelectedTab != _selectedTab) + { + _lastSelectedTab = _selectedTab; + _resultsList = new List(); + _searchedMonoBehaviourName = _searchedMonoBehaviour == null ? "" : _searchedMonoBehaviour.name; + _lastSearchedMonoBehaviour = null; + } + } + + /// + /// Draws the content of the selected tab + /// + protected virtual void DrawSelectedTab() + { + switch (_selectedTab) + { + case 0: + DrawSearchMissing(); + break; + case 1: + DrawSearchByMonoBehaviour(); + break; + } + } + + /// + /// Draws the search by mono form + /// + protected virtual void DrawSearchByMonoBehaviour() + { + GUILayout.BeginHorizontal("box"); + GUILayout.Space(20); + GUILayout.BeginVertical(); + GUILayout.Label("Select a MonoBehaviour to search for:"); + _searchedMonoBehaviour = (MonoScript)EditorGUILayout.ObjectField(_searchedMonoBehaviour, typeof(MonoScript), false); + GUILayout.EndVertical(); + GUILayout.Space(10); + + if (_searchedMonoBehaviour != _lastSearchedMonoBehaviour) + { + string[] allPrefabsInProject = GetAllPrefabsInProject(); + + _lastSearchedMonoBehaviour = _searchedMonoBehaviour; + _searchedMonoBehaviourName = _searchedMonoBehaviour.name; + AssetDatabase.SaveAssets(); + string searchedMonoBehaviourPath = AssetDatabase.GetAssetPath(_searchedMonoBehaviour); + _resultsList = new List(); + foreach (string prefab in allPrefabsInProject) + { + string[] pathName = new string[] { prefab }; + string[] monoDependenciesPaths = AssetDatabase.GetDependencies(pathName, false); + foreach (string monoDependencyPath in monoDependenciesPaths) + { + if (monoDependencyPath == searchedMonoBehaviourPath) + { + _resultsList.Add(prefab); + } + } + } + } + GUILayout.EndHorizontal(); + } + + /// + /// Draws the search missing form + /// + protected virtual void DrawSearchMissing() + { + GUILayout.BeginHorizontal("box"); + GUILayout.Space(20); + if (GUILayout.Button("Search the project for prefabs with missing scripts")) + { + string[] allPrefabs = GetAllPrefabsInProject(); + _resultsList = new List(); + foreach (string prefab in allPrefabs) + { + UnityEngine.Object asset = AssetDatabase.LoadMainAssetAtPath(prefab); + GameObject assetGameObject; + try + { + assetGameObject = (GameObject)asset; + Component[] components = assetGameObject.GetComponentsInChildren(true); + foreach (Component component in components) + { + if (component == null) + { + _resultsList.Add(prefab); + } + } + } + catch + { + MMDebug.DebugLogInfo("An error occured with prefab " + prefab); + } + } + } + GUILayout.EndHorizontal(); + } + + /// + /// Draws the result list + /// + protected virtual void DrawResultsList() + { + GUILayout.BeginHorizontal(_padded); + if (_resultsList != null) + { + if (_resultsList.Count == 0) + { + switch (_selectedTab) + { + case 0: + GUILayout.Label("No prefabs have missing components.", EditorStyles.boldLabel); + break; + + case 1: + if (!string.IsNullOrEmpty(_searchedMonoBehaviourName)) + { + GUILayout.Label("No prefabs use component " + _searchedMonoBehaviourName, EditorStyles.boldLabel); + } + break; + } + GUILayout.EndHorizontal(); // end padded + } + else + { + switch (_selectedTab) + { + case 0: + GUILayout.Label("These prefabs have missing components :", EditorStyles.boldLabel); + break; + + case 1: + GUILayout.Label("MonoBehaviour " + _searchedMonoBehaviourName + " was found in these prefabs :", EditorStyles.boldLabel); + break; + } + GUILayout.EndHorizontal(); // end padded + + GUILayout.BeginHorizontal(); + GUI.skin.scrollView.padding = _padding; + _scrollView = GUILayout.BeginScrollView(_scrollView); + foreach (string s in _resultsList) + { + GUILayout.BeginHorizontal(_horizontalPadded); + GUILayout.Label(s, GUILayout.Width(4 * (position.width - 4 * _horizontalPadding) / 5)); + GUI.skin.button.alignment = TextAnchor.MiddleCenter; + if (GUILayout.Button("Select prefab", GUILayout.Width((position.width - 4 * _horizontalPadding) / 5 - 20))) + { + Selection.activeObject = AssetDatabase.LoadMainAssetAtPath(s); + } + GUILayout.EndHorizontal(); + } + GUILayout.EndScrollView(); + GUILayout.EndHorizontal(); + } + } + } + + #if UNITY_EDITOR + /// + /// On GUI we draw our window's contents + /// + protected virtual void OnGUI() + { + InitializePaddingAndStyles(); + DrawTabs(); + HandleTabsChange(); + DrawSelectedTab(); + DrawResultsList(); + } + #endif + + /// + /// Gets all prefabs and sorts them alphabetically + /// + /// + public static string[] GetAllPrefabsInProject() + { + string[] assetPaths = AssetDatabase.GetAllAssetPaths(); + List results = new List(); + foreach (string assetPath in assetPaths) + { + if (assetPath.Contains(".prefab")) + { + results.Add(assetPath); + } + } + results.Sort(); + return results.ToArray(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindPrefabsByMono.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindPrefabsByMono.cs.meta new file mode 100644 index 0000000..d5ae9c3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMFindPrefabsByMono.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6f3cc53c6ac3754bbf1b45956f64a21 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMGroupSelection.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMGroupSelection.cs new file mode 100644 index 0000000..03964b3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMGroupSelection.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + /// + /// A class used to add a menu item and a shortcut to group objects together under a parent game object + /// + public class MMGroupSelection + { + /// + /// Creates a parent object and puts all selected transforms under it + /// + [MenuItem("Tools/More Mountains/Group Selection %g")] + public static void GroupSelection() + { + if (!Selection.activeTransform) + { + return; + } + + GameObject groupObject = new GameObject(); + groupObject.name = "Group"; + + Undo.RegisterCreatedObjectUndo(groupObject, "Group Selection"); + + groupObject.transform.SetParent(Selection.activeTransform.parent, false); + + foreach (Transform selectedTransform in Selection.transforms) + { + Undo.SetTransformParent(selectedTransform, groupObject.transform, "Group Selection"); + } + Selection.activeGameObject = groupObject; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMGroupSelection.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMGroupSelection.cs.meta new file mode 100644 index 0000000..244035b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMGroupSelection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a908ed7f06f3bf34e8ff030a385f46f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMLockInspector.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMLockInspector.cs new file mode 100644 index 0000000..64a41f1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMLockInspector.cs @@ -0,0 +1,26 @@ +using System; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A simple class that lets you lock the current inspector by pressing ctrl (or cmd) + L + /// Pressing the same shortcut again unlocks the + /// + public class MMLockInspector : MonoBehaviour + { + [MenuItem("Tools/More Mountains/Lock Inspector %l")] + static public void LockInspector() + { + Type inspectorType = typeof(Editor).Assembly.GetType("UnityEditor.InspectorWindow"); + EditorWindow inspectorWindow = EditorWindow.GetWindow(inspectorType); + + PropertyInfo isLockedPropertyInfo = inspectorType.GetProperty("isLocked", BindingFlags.Public | BindingFlags.Instance); + bool state = (bool)isLockedPropertyInfo.GetGetMethod().Invoke(inspectorWindow, new object[] { }); + + isLockedPropertyInfo.GetSetMethod().Invoke(inspectorWindow, new object[] { !state }); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMLockInspector.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMLockInspector.cs.meta new file mode 100644 index 0000000..2b3a7f2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMaintenance/MMLockInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c0e71f738b287843b432d007a0626bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMovement.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMovement.meta new file mode 100644 index 0000000..351309e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMovement.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 23f010b4ae2814c42b0ee28eaf7d5428 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMAutoRotateEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMAutoRotateEditor.cs new file mode 100644 index 0000000..d3ae5f9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMAutoRotateEditor.cs @@ -0,0 +1,67 @@ +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + /// + /// Custom editor for the MMAutoRotate component + /// + [CustomEditor(typeof(MMAutoRotate), true)] + [CanEditMultipleObjects] + public class MMAutoRotateEditor : Editor + { + /// + /// + /// + /// + /// + [DrawGizmo(GizmoType.InSelectionHierarchy)] + static void DrawHandles(MMAutoRotate autoRotate, GizmoType gizmoType) + { + MMAutoRotate myTarget = autoRotate; + + // only draw gizmos if orbiting and gizmos enabled + if (!myTarget.Orbiting || !myTarget.DrawGizmos) + { + return; + }; + + // if we're not playing, we compute our center/axis + if (!Application.isPlaying) + { + if (myTarget.OrbitCenterTransform != null) + { + myTarget._orbitCenter = myTarget.OrbitCenterTransform.transform.position + myTarget.OrbitCenterOffset; + myTarget._worldRotationAxis = myTarget.OrbitCenterTransform.TransformDirection(myTarget.OrbitRotationAxis); + myTarget._rotationPlane.SetNormalAndPosition(myTarget._worldRotationAxis.normalized, myTarget._orbitCenter); + + myTarget._snappedPosition = myTarget._rotationPlane.ClosestPointOnPlane(myTarget.transform.position); + myTarget._radius = myTarget.OrbitRadius * Vector3.Normalize(myTarget._snappedPosition - myTarget._orbitCenter); + } + } + + // draws a plane disc + Handles.color = myTarget.OrbitPlaneColor; + Handles.DrawSolidDisc(myTarget._orbitCenter, myTarget._rotationPlane.normal, myTarget.OrbitRadius + 0.5f); + + // draws a circle to mark the orbit + Handles.color = myTarget.OrbitLineColor; + Handles.DrawWireArc(myTarget._orbitCenter, myTarget._rotationPlane.normal, Vector3.ProjectOnPlane(myTarget._orbitCenter + Vector3.forward, myTarget._rotationPlane.normal), 360f, myTarget.OrbitRadius); + + // draws an arrow to mark the direction + Quaternion newRotation = Quaternion.AngleAxis(1f, myTarget._worldRotationAxis); + Vector3 origin = myTarget._orbitCenter + newRotation * myTarget._radius; + newRotation = Quaternion.AngleAxis(15f, myTarget._worldRotationAxis); + Vector3 direction = Vector3.zero; + if (myTarget.OrbitRotationSpeed > 0f) + { + direction = (myTarget._orbitCenter + newRotation * myTarget._radius) - origin; + } + else + { + direction = origin - (myTarget._orbitCenter + newRotation * myTarget._radius); + } + MMDebug.DebugDrawArrow(origin, direction, myTarget.OrbitLineColor); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMAutoRotateEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMAutoRotateEditor.cs.meta new file mode 100644 index 0000000..156c55a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMAutoRotateEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b4bf5a88d386b6428629ffc983eb62c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement.meta new file mode 100644 index 0000000..5fb3707 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3c387a5c035e814eb1a19b914829253 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathEditor.cs new file mode 100644 index 0000000..00b93e0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathEditor.cs @@ -0,0 +1,88 @@ +#if UNITY_EDITOR + +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// This class adds names for each LevelMapPathElement next to it on the scene view, for easier setup + /// + [CustomEditor(typeof(MMPath),true)] + [InitializeOnLoad] + public class MMPathEditor : Editor + { + public MMPath pathTarget + { + get + { + return (MMPath)target; + } + } + + /// + /// OnSceneGUI, draws repositionable handles at every point in the path, for easier setup + /// + protected virtual void OnSceneGUI() + { + Handles.color=Color.green; + MMPath t = (target as MMPath); + + if (t.GetOriginalTransformPositionStatus() == false) + { + return; + } + + for (int i=0;i + /// Locks handles movement on x, y, or z axis + ///
+ /// + /// + /// + protected virtual Vector3 ApplyAxisLock(Vector3 oldPoint, Vector3 newPoint) + { + MMPath t = (target as MMPath); + if (t.LockHandlesOnXAxis) + { + newPoint.x = oldPoint.x; + } + if (t.LockHandlesOnYAxis) + { + newPoint.y = oldPoint.y; + } + if (t.LockHandlesOnZAxis) + { + newPoint.z = oldPoint.z; + } + + return newPoint; + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathEditor.cs.meta new file mode 100644 index 0000000..af208ed --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d103290728e03b448829fc4b58e285ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathMovementEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathMovementEditor.cs new file mode 100644 index 0000000..b2ebf4a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMMovement/MMPathMovement/MMPathMovementEditor.cs @@ -0,0 +1,78 @@ +#if UNITY_EDITOR + +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// This class adds names for each LevelMapPathElement next to it on the scene view, for easier setup + /// + [CustomEditor(typeof(MMPathMovement),true)] + [InitializeOnLoad] + public class MMPathMovementEditor : Editor + { + public MMPathMovement pathMovementTarget + { + get + { + return (MMPathMovement)target; + } + } + + public override void OnInspectorGUI() + { + serializedObject.Update (); + + if (pathMovementTarget.AccelerationType == MMPathMovement.PossibleAccelerationType.AnimationCurve) + { + DrawDefaultInspector (); + } + else + { + Editor.DrawPropertiesExcluding (serializedObject, new string [] { "Acceleration" }); + } + + serializedObject.ApplyModifiedProperties (); + } + + /// + /// OnSceneGUI, draws repositionable handles at every point in the path, for easier setup + /// + protected virtual void OnSceneGUI() + { + Handles.color = Color.green; + MMPathMovement t = (target as MMPathMovement); + + if (t.GetOriginalTransformPositionStatus() == false) + { + return; + } + + for (int i=0;i (); + + for (int i = 0; i (); + + for (int i = 0; i + /// Custom editor for the MMTilemapGenerator, handles generate button and reorderable layers + /// + [CustomEditor(typeof(MMTilemapGenerator), true)] + [CanEditMultipleObjects] + public class MMTilemapGeneratorEditor : Editor + { + + protected MMReorderableList _list; + + protected virtual void OnEnable() + { + _list = new MMReorderableList(serializedObject.FindProperty("Layers")); + _list.elementNameProperty = "Layer"; + _list.elementDisplayType = MMReorderableList.ElementDisplayType.Expandable; + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + DrawPropertiesExcluding(serializedObject, "Layers"); + EditorGUILayout.Space(10); + _list.DoLayoutList(); + serializedObject.ApplyModifiedProperties(); + + if (GUILayout.Button("Generate")) + { + (target as MMTilemapGenerator).Generate(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMProcedural/MMTilemapGeneratorEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMProcedural/MMTilemapGeneratorEditor.cs.meta new file mode 100644 index 0000000..13859e0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMProcedural/MMTilemapGeneratorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2fad23a01f1d6df49be8215ff24dbe62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities.meta b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities.meta new file mode 100644 index 0000000..f9b34b1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f665c4f93c9d0b14580bb7f5969a3068 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMDebugEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMDebugEditor.cs new file mode 100644 index 0000000..ec1db35 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMDebugEditor.cs @@ -0,0 +1,86 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using UnityEditor; + +namespace MoreMountains.Tools +{ + /// + /// An editor class used to display menu items + /// + public class MMDebugEditor + { + /// + /// Adds a menu item to enable debug logs + /// + [MenuItem("Tools/More Mountains/Enable Debug Logs", false, 100)] + private static void EnableDebugLogs() + { + MMDebug.SetDebugLogsEnabled(true); + } + + /// + /// Conditional method to determine if the "enable debug log" entry should be greyed or not + /// + [MenuItem("Tools/More Mountains/Enable Debug Logs", true)] + private static bool EnableDebugLogsValidation() + { + return !MMDebug.DebugLogsEnabled; + } + + /// + /// Adds a menu item to disable debug logs + /// + [MenuItem("Tools/More Mountains/Disable Debug Logs", false, 101)] + private static void DisableDebugLogs() + { + MMDebug.SetDebugLogsEnabled(false); + } + + /// + /// Conditional method to determine if the "disable debug log" entry should be greyed or not + /// + [MenuItem("Tools/More Mountains/Disable Debug Logs", true)] + private static bool DisableDebugLogsValidation() + { + return MMDebug.DebugLogsEnabled; + } + + /// + /// Adds a menu item to enable debug logs + /// + [MenuItem("Tools/More Mountains/Enable Debug Draws", false, 102)] + private static void EnableDebugDraws() + { + MMDebug.SetDebugDrawEnabled(true); + } + + [MenuItem("Tools/More Mountains/Enable Debug Draws", true)] + /// + /// Conditional method to determine if the "enable debug log" entry should be greyed or not + /// + private static bool EnableDebugDrawsValidation() + { + return !MMDebug.DebugDrawEnabled; + } + + [MenuItem("Tools/More Mountains/Disable Debug Draws", false, 103)] + /// + /// Adds a menu item to disable debug logs + /// + private static void DisableDebugDraws() + { + MMDebug.SetDebugDrawEnabled(false); + } + + [MenuItem("Tools/More Mountains/Disable Debug Draws", true)] + /// + /// Conditional method to determine if the "disable debug log" entry should be greyed or not + /// + private static bool DisableDebugDrawsValidation() + { + return MMDebug.DebugDrawEnabled; + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMDebugEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMDebugEditor.cs.meta new file mode 100644 index 0000000..04bed9c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMDebugEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75f9cc4cf2ef4324d99f4dc9d5709b63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMLayerPropertyDrawer.cs b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMLayerPropertyDrawer.cs new file mode 100644 index 0000000..85011f3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMLayerPropertyDrawer.cs @@ -0,0 +1,23 @@ +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMLayer))] + public class MMLayerPropertyDrawer : PropertyDrawer + { + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, GUIContent.none, property); + SerializedProperty layerIndex = property.FindPropertyRelative("_layerIndex"); + position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); + if (layerIndex != null) + { + layerIndex.intValue = EditorGUI.LayerField(position, layerIndex.intValue); + } + EditorGUI.EndProperty(); + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMLayerPropertyDrawer.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMLayerPropertyDrawer.cs.meta new file mode 100644 index 0000000..41399db --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMLayerPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d8d3d62d1a2e8f429db2998bbdeb237 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMScreenshotEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMScreenshotEditor.cs new file mode 100644 index 0000000..8e104e7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMScreenshotEditor.cs @@ -0,0 +1,46 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.IO; + +namespace MoreMountains.Tools +{ + [CustomEditor(typeof(MMAspectRatioSafeZones), true)] + public class MMScreenshotEditor : Editor + { + static string FolderName = "Screenshots"; + + [MenuItem("Tools/More Mountains/Screenshot/Take Screenshot Real Size", false, 801)] + public static void MenuScreenshotSize1() + { + string savePath = TakeScreenCaptureScreenshot(1); + } + [MenuItem("Tools/More Mountains/Screenshot/Take Screenshot Size x2", false, 802)] + public static void MenuScreenshotSize2() + { + string savePath = TakeScreenCaptureScreenshot(2); + } + [MenuItem("Tools/More Mountains/Screenshot/Take Screenshot Size x3 %k", false, 803)] + public static void MenuScreenshotSize3() + { + string savePath = TakeScreenCaptureScreenshot(3); + } + + protected static string TakeScreenCaptureScreenshot(int gameViewSizeMultiplier) + { + if (!Directory.Exists(FolderName)) + { + Directory.CreateDirectory(FolderName); + } + + float width = Screen.width * gameViewSizeMultiplier; + float height = Screen.height * gameViewSizeMultiplier; + string savePath = FolderName + "/screenshot_" + width + "x" + height + "_" + System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".png"; + + ScreenCapture.CaptureScreenshot(savePath, gameViewSizeMultiplier); + MMDebug.DebugLogInfo("[MMScreenshot] Screenshot taken with size multiplier of " + gameViewSizeMultiplier + " and saved at " + savePath); + return savePath; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMScreenshotEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMScreenshotEditor.cs.meta new file mode 100644 index 0000000..2f25f71 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMScreenshotEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82c6a6e2f2e591a498214d03f76d9f09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMTransformRandomizerEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMTransformRandomizerEditor.cs new file mode 100644 index 0000000..8b724a3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMTransformRandomizerEditor.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + /// + /// Custom editor for the MMTransformRandomizer class + /// + [CustomEditor(typeof(MMTransformRandomizer), true)] + [CanEditMultipleObjects] + public class MMTransformRandomizerEditor : Editor + { + /// + /// On inspector we handle undo and display a test button + /// + public override void OnInspectorGUI() + { + serializedObject.Update(); + Undo.RecordObject(target, "Modified MMTransformRandomizer"); + DrawDefaultInspector(); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Test", EditorStyles.boldLabel); + + if (GUILayout.Button("Randomize")) + { + foreach (MMTransformRandomizer randomizer in targets) + { + randomizer.Randomize(); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMTransformRandomizerEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMTransformRandomizerEditor.cs.meta new file mode 100644 index 0000000..923639f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/MMTransformRandomizerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6dbf82cbd8a266041acbda8137fc5b9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/ManagerIconEditor.cs b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/ManagerIconEditor.cs new file mode 100644 index 0000000..54fae7a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/ManagerIconEditor.cs @@ -0,0 +1,26 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// This class adds names for each LevelMapPathElement next to it on the scene view, for easier setup + /// + [CustomEditor(typeof(MMSceneViewIcon))] + [InitializeOnLoad] + public class SceneViewIconEditor : Editor + { + //protected SceneViewIcon _sceneViewIcon; + + [DrawGizmo(GizmoType.InSelectionHierarchy | GizmoType.NotInSelectionHierarchy)] + static void DrawGameObjectName(MMSceneViewIcon sceneViewIcon, GizmoType gizmoType) + { + GUIStyle style = new GUIStyle(); + style.normal.textColor = Color.blue; + Handles.Label(sceneViewIcon.transform.position, sceneViewIcon.gameObject.name,style); + } + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/ManagerIconEditor.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/ManagerIconEditor.cs.meta new file mode 100644 index 0000000..5d7cb06 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMUtilities/ManagerIconEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 22acaeb1b9f9e4fbbb6486133e649e67 +timeCreated: 1456229446 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMVision.meta b/Assets/Feel/MMTools/Accessories/Editor/MMVision.meta new file mode 100644 index 0000000..d9e27ea --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMVision.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 709786e9e9b9ad840b4edd10a1363bab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVision2DInspector.cs b/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVision2DInspector.cs new file mode 100644 index 0000000..5c2d8f6 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVision2DInspector.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using System.Collections.Generic; +using UnityEditor; + +namespace MoreMountains.Tools +{ + [CustomEditor(typeof(MMConeOfVision2D), true)] + public class MMConeOfVision2DInspector : Editor + { + protected MMConeOfVision2D _coneOfVision; + + protected virtual void OnSceneGUI() + { + // draws a circle around the character to represent the cone of vision's radius + _coneOfVision = (MMConeOfVision2D)target; + + Handles.color = Color.yellow; + Handles.DrawWireArc(_coneOfVision.transform.position, -Vector3.forward, Vector3.up, 360f, _coneOfVision.VisionRadius); + + // draws two lines to mark the vision angle + Vector3 visionAngleLeft = MMMaths.DirectionFromAngle2D(-_coneOfVision.VisionAngle / 2f, _coneOfVision.EulerAngles.y); + Vector3 visionAngleRight = MMMaths.DirectionFromAngle2D(_coneOfVision.VisionAngle / 2f, _coneOfVision.EulerAngles.y); + + Handles.DrawLine(_coneOfVision.transform.position, _coneOfVision.transform.position + visionAngleLeft * _coneOfVision.VisionRadius); + Handles.DrawLine(_coneOfVision.transform.position, _coneOfVision.transform.position + visionAngleRight * _coneOfVision.VisionRadius); + + foreach (Transform visibleTarget in _coneOfVision.VisibleTargets) + { + Handles.color = MMColors.Orange; + Handles.DrawLine(_coneOfVision.transform.position, visibleTarget.position); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVision2DInspector.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVision2DInspector.cs.meta new file mode 100644 index 0000000..eeadd77 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVision2DInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b5d530aed12d5f41b876b1237c161a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVisionInspector.cs b/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVisionInspector.cs new file mode 100644 index 0000000..adf7772 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVisionInspector.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using System.Collections.Generic; +using UnityEditor; + +namespace MoreMountains.Tools +{ + [CustomEditor(typeof(MMConeOfVision), true)] + public class MMConeOfVisionInspector : Editor + { + protected MMConeOfVision _coneOfVision; + + protected virtual void OnSceneGUI() + { + // draws a circle around the character to represent the cone of vision's radius + _coneOfVision = (MMConeOfVision)target; + + Handles.color = Color.yellow; + Handles.DrawWireArc(_coneOfVision.Center, Vector3.up, Vector3.forward, 360f, _coneOfVision.VisionRadius); + + // draws two lines to mark the vision angle + Vector3 visionAngleLeft = MMMaths.DirectionFromAngle(-_coneOfVision.VisionAngle / 2f, _coneOfVision.EulerAngles.y); + Vector3 visionAngleRight = MMMaths.DirectionFromAngle(_coneOfVision.VisionAngle / 2f, _coneOfVision.EulerAngles.y); + + Handles.DrawLine(_coneOfVision.Center, _coneOfVision.Center + visionAngleLeft * _coneOfVision.VisionRadius); + Handles.DrawLine(_coneOfVision.Center, _coneOfVision.Center + visionAngleRight * _coneOfVision.VisionRadius); + + foreach (Transform visibleTarget in _coneOfVision.VisibleTargets) + { + Handles.color = MMColors.Orange; + Handles.DrawLine(_coneOfVision.Center, visibleTarget.position); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVisionInspector.cs.meta b/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVisionInspector.cs.meta new file mode 100644 index 0000000..114fee0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MMVision/MMConeOfVisionInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 887e928caeb50c74593acce11770f85f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/Editor/MoreMountains.Tools.Accessories.Editor.asmref b/Assets/Feel/MMTools/Accessories/Editor/MoreMountains.Tools.Accessories.Editor.asmref new file mode 100644 index 0000000..4de2cbc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MoreMountains.Tools.Accessories.Editor.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:d9dbf313afb206f458581847ac758375" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/Editor/MoreMountains.Tools.Accessories.Editor.asmref.meta b/Assets/Feel/MMTools/Accessories/Editor/MoreMountains.Tools.Accessories.Editor.asmref.meta new file mode 100644 index 0000000..25e7226 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/Editor/MoreMountains.Tools.Accessories.Editor.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e4ca86eeefb9e704a9e99ebb71e8345d +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation.meta b/Assets/Feel/MMTools/Accessories/MMActivation.meta new file mode 100644 index 0000000..c2203e6 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 28a7af70e6a6fce4f9a6d27d6bbf82cc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMActivationOnStart.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMActivationOnStart.cs new file mode 100644 index 0000000..a264fe3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMActivationOnStart.cs @@ -0,0 +1,58 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Use this class to enable or disable other gameobjects automatically on Start or Awake + /// + + [AddComponentMenu("More Mountains/Tools/Activation/MMActivationOnStart")] + public class MMActivationOnStart : MonoBehaviour + { + /// The possible modes that define whether this should run at Awake or Start + public enum Modes { Awake, Start } + /// the selected mode for this instance + public Modes Mode = Modes.Start; + /// if true, objects will be activated on start, disabled otherwise + public bool StateOnStart = true; + /// the list of gameobjects whose active state will be affected on start + public List TargetObjects; + + /// + /// On Awake, we set our state if needed + /// + protected virtual void Awake() + { + if (Mode != Modes.Awake) + { + return; + } + SetState(); + } + + /// + /// On Start, we set our state if needed + /// + protected virtual void Start() + { + if (Mode != Modes.Start) + { + return; + } + SetState(); + } + + /// + /// Sets the state of all target objects + /// + protected virtual void SetState() + { + foreach (GameObject obj in TargetObjects) + { + obj.SetActive(StateOnStart); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMActivationOnStart.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMActivationOnStart.cs.meta new file mode 100644 index 0000000..be317ea --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMActivationOnStart.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55a9829731bf3d3458319a5a829f1f04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMApplicationPlatformActivation.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMApplicationPlatformActivation.cs new file mode 100644 index 0000000..3237ef8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMApplicationPlatformActivation.cs @@ -0,0 +1,106 @@ +using UnityEngine; +using System.Collections; +using System; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// A class used to store bindings + /// + [Serializable] + public class PlatformBindings + { + public enum PlatformActions { DoNothing, Disable } + public RuntimePlatform Platform = RuntimePlatform.WindowsPlayer; + public PlatformActions PlatformAction = PlatformActions.DoNothing; + } + + /// + /// Add this class to a gameobject, and it'll enable/disable it based on platform context, using Application.platform to detect the platform + /// + [AddComponentMenu("More Mountains/Tools/Activation/MMApplicationPlatformActivation")] + public class MMApplicationPlatformActivation : MonoBehaviour + { + /// the possible times at which this script can run + public enum ExecutionTimes { Awake, Start, OnEnable } + + [Header("Settings")] + /// the selected execution time + public ExecutionTimes ExecutionTime = ExecutionTimes.Awake; + /// whether or not this should output a debug line in the console + public bool DebugToTheConsole = false; + + [Header("Platforms")] + public List Platforms; + + /// + /// On Enable, processes the state if needed + /// + protected virtual void OnEnable() + { + if (ExecutionTime == ExecutionTimes.OnEnable) + { + Process(); + } + } + + /// + /// On Awake, processes the state if needed + /// + protected virtual void Awake() + { + if (ExecutionTime == ExecutionTimes.Awake) + { + Process(); + } + } + + /// + /// On Start, processes the state if needed + /// + protected virtual void Start() + { + if (ExecutionTime == ExecutionTimes.Start) + { + Process(); + } + } + + /// + /// Enables or disables the object based on current platform + /// + protected virtual void Process() + { + foreach (PlatformBindings platform in Platforms) + { + if (platform.Platform == Application.platform) + { + DisableIfNeeded(platform.PlatformAction, platform.Platform.ToString()); + } + } + + if (Application.platform == RuntimePlatform.Android) + { + + } + } + + /// + /// Disables the object if needed, and outputs a debug log if requested + /// + /// + /// + protected virtual void DisableIfNeeded(PlatformBindings.PlatformActions platform, string platformName) + { + if (this.gameObject.activeInHierarchy && (platform == PlatformBindings.PlatformActions.Disable)) + { + this.gameObject.SetActive(false); + if (DebugToTheConsole) + { + Debug.LogFormat(this.gameObject.name + " got disabled via MMPlatformActivation, platform : " + platformName + "."); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMApplicationPlatformActivation.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMApplicationPlatformActivation.cs.meta new file mode 100644 index 0000000..072f4d0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMApplicationPlatformActivation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b49077b56e67ff469bc52b6a64e5e17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMAutoExecution.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMAutoExecution.cs new file mode 100644 index 0000000..078f6d8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMAutoExecution.cs @@ -0,0 +1,106 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// A data class to store auto execution info to be used in MMAutoExecution + /// + [System.Serializable] + public class MMAutoExecutionItem + { + /// if this is true, Event will be invoked on Awake + public bool AutoExecuteOnAwake; + /// if this is true, Event will be invoked on Enable + public bool AutoExecuteOnEnable; + /// if this is true, Event will be invoked on Disable + public bool AutoExecuteOnDisable; + /// if this is true, Event will be invoked on Start + public bool AutoExecuteOnStart; + /// if this is true, Event will be invoked on Instantiate (you'll need to send a OnInstantiate message for this to happen + public bool AutoExecuteOnInstantiate; + public UnityEvent Event; + } + + /// + /// This simple class lets you trigger Unity events automatically, on Awake, Enable, Disable, Start, or on instantiate + /// For that last one, you'll want to send a "OnInstantiate" message when instantiating this object + /// + public class MMAutoExecution : MonoBehaviour + { + /// a list of events to trigger automatically + public List Events; + + /// + /// On Awake we invoke our events if needed + /// + protected virtual void Awake() + { + foreach (MMAutoExecutionItem item in Events) + { + if ((item.AutoExecuteOnAwake) && (item.Event != null)) + { + item.Event.Invoke(); + } + } + } + + /// + /// On Start we invoke our events if needed + /// + protected virtual void Start() + { + foreach (MMAutoExecutionItem item in Events) + { + if ((item.AutoExecuteOnStart) && (item.Event != null)) + { + item.Event.Invoke(); + } + } + } + + /// + /// On Enable we invoke our events if needed + /// + protected virtual void OnEnable() + { + foreach (MMAutoExecutionItem item in Events) + { + if ((item.AutoExecuteOnEnable) && (item.Event != null)) + { + item.Event.Invoke(); + } + } + } + + /// + /// On Enable we invoke our events if needed + /// + protected virtual void OnDisable() + { + foreach (MMAutoExecutionItem item in Events) + { + if ((item.AutoExecuteOnDisable) && (item.Event != null)) + { + item.Event.Invoke(); + } + } + } + + /// + /// On Instantiate we invoke our events if needed + /// + protected virtual void OnInstantiate() + { + foreach (MMAutoExecutionItem item in Events) + { + if ((item.AutoExecuteOnInstantiate) && (item.Event != null)) + { + item.Event.Invoke(); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMAutoExecution.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMAutoExecution.cs.meta new file mode 100644 index 0000000..c1c68fe --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMAutoExecution.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 723c68a65280145479e4e0b2f94a6ff0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMConditionalActivation.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMConditionalActivation.cs new file mode 100644 index 0000000..957b59a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMConditionalActivation.cs @@ -0,0 +1,46 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to a gameobject, and it'll let you enable target monos after all other targets have been disabled + /// + [AddComponentMenu("More Mountains/Tools/Activation/MMConditionalActivation")] + public class MMConditionalActivation : MonoBehaviour + { + /// a list of monos to enable + public MonoBehaviour[] EnableThese; + /// a list of all the monos that have to have been disabled first + public MonoBehaviour[] AfterTheseAreAllDisabled; + + protected bool _enabled = false; + + /// + /// On update, we check if we should disable + /// + protected virtual void Update() + { + if (_enabled) + { + return; + } + + bool allDisabled = true; + foreach (MonoBehaviour component in AfterTheseAreAllDisabled) + { + if (component.isActiveAndEnabled) + { + allDisabled = false; + } + } + if (allDisabled) + { + foreach (MonoBehaviour component in EnableThese) + { + component.enabled = true; + } + _enabled = true; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMConditionalActivation.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMConditionalActivation.cs.meta new file mode 100644 index 0000000..3cc9502 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMConditionalActivation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8434b53deaa9ae04f87f3c24bf70d482 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMDontDestroyOnLoad.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMDontDestroyOnLoad.cs new file mode 100644 index 0000000..83ae116 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMDontDestroyOnLoad.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object and it'll persist across scenes + /// + public class MMDontDestroyOnLoad : MonoBehaviour + { + /// + /// On Awake we make sure our object will not destroy on the next scene load + /// + protected void Awake() + { + DontDestroyOnLoad(this.gameObject); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMDontDestroyOnLoad.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMDontDestroyOnLoad.cs.meta new file mode 100644 index 0000000..8fa8f7c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMDontDestroyOnLoad.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c6dc6bc8e4bb2834e80531c648886d13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMInputExecution.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMInputExecution.cs new file mode 100644 index 0000000..a5e35b6 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMInputExecution.cs @@ -0,0 +1,106 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace MoreMountains.Tools +{ + /// + /// A class used to store MMInputExecution bindings, associating a target keycode to UnityEvents + /// + [System.Serializable] + public class MMInputExecutionBinding + { + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + public Key TargetInputKey = Key.Space; + #else + /// the key the user needs to press to trigger events + public KeyCode TargetKey = KeyCode.Space; + #endif + + /// the event to trigger when the key is pressed down + public UnityEvent OnKeyDown; + /// the event to trigger every frame if the key is being pressed + public UnityEvent OnKey; + /// the event to trigger when the key is released + public UnityEvent OnKeyUp; + + /// + /// Checks for input and invokes events if needed + /// + public virtual void ProcessInput() + { + bool key = false; + bool keyDown = false; + bool keyUp = false; + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + key = Keyboard.current[TargetInputKey].isPressed; + keyDown = Keyboard.current[TargetInputKey].wasPressedThisFrame; + keyUp = Keyboard.current[TargetInputKey].wasReleasedThisFrame; + #else + key = Input.GetKey(TargetKey); + keyDown = Input.GetKeyDown(TargetKey); + keyUp = Input.GetKeyUp(TargetKey); + #endif + + if (OnKey != null) + { + if (key) + { + OnKey.Invoke(); + } + } + if (OnKeyDown != null) + { + if (keyDown) + { + OnKeyDown.Invoke(); + } + } + if (OnKeyUp != null) + { + if (keyUp) + { + OnKeyUp.Invoke(); + } + } + } + } + + /// + /// A simple class used to bind target keys to specific events to trigger when the key is pressed or released + /// + public class MMInputExecution : MonoBehaviour + { + [Header("Bindings")] + /// a list of bindings + public List Bindings; + + /// + /// On update we process our input + /// + protected virtual void Update() + { + HandleInput(); + } + + /// + /// Parses all bindings and asks them to trigger events if needed + /// + protected virtual void HandleInput() + { + if (Bindings == null) + { + return; + } + foreach(MMInputExecutionBinding binding in Bindings) + { + binding.ProcessInput(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMInputExecution.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMInputExecution.cs.meta new file mode 100644 index 0000000..fd0382f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMInputExecution.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af3876ae77702e24e8e1b06f675c0860 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMOnMouse.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMOnMouse.cs new file mode 100644 index 0000000..ff57cc4 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMOnMouse.cs @@ -0,0 +1,71 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// Attach this class to a collider and it'll let you trigger events when the user clicks/drags/enters/etc that collider + /// + public class MMOnMouse : MonoBehaviour + { + /// OnMouseDown is called when the user has pressed the mouse button while over the Collider. + [Tooltip("OnMouseDown is called when the user has pressed the mouse button while over the Collider.")] + public UnityEvent OnMouseDownEvent; + /// OnMouseDrag is called when the user has clicked on a Collider and is still holding down the mouse. + [Tooltip("OnMouseDrag is called when the user has clicked on a Collider and is still holding down the mouse.")] + public UnityEvent OnMouseDragEvent; + /// Called when the mouse enters the Collider. + [Tooltip("Called when the mouse enters the Collider.")] + public UnityEvent OnMouseEnterEvent; + /// Called when the mouse is not any longer over the Collider. + [Tooltip("Called when the mouse is not any longer over the Collider.")] + public UnityEvent OnMouseExitEvent; + /// Called every frame while the mouse is over the Collider. + [Tooltip("Called every frame while the mouse is over the Collider.")] + public UnityEvent OnMouseOverEvent; + /// OnMouseUp is called when the user has released the mouse button. + [Tooltip("OnMouseUp is called when the user has released the mouse button.")] + public UnityEvent OnMouseUpEvent; + /// OnMouseUpAsButton is only called when the mouse is released over the same Collider as it was pressed. + [Tooltip("OnMouseUpAsButton is only called when the mouse is released over the same Collider as it was pressed.")] + public UnityEvent OnMouseUpAsButtonEvent; + + protected virtual void OnMouseDown() + { + OnMouseDownEvent.Invoke(); + } + + protected virtual void OnMouseDrag() + { + OnMouseDragEvent.Invoke(); + } + + protected virtual void OnMouseEnter() + { + OnMouseEnterEvent.Invoke(); + } + + protected virtual void OnMouseExit() + { + OnMouseExitEvent.Invoke(); + } + + protected virtual void OnMouseOver() + { + OnMouseOverEvent.Invoke(); + } + + protected virtual void OnMouseUp() + { + OnMouseUpEvent.Invoke(); + } + + protected virtual void OnMouseUpAsButton() + { + OnMouseUpAsButtonEvent.Invoke(); + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMOnMouse.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMOnMouse.cs.meta new file mode 100644 index 0000000..c0b1071 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMOnMouse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80361f5e0185bb247a814457c589c1f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMParentingOnStart.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMParentingOnStart.cs new file mode 100644 index 0000000..5d79db2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMParentingOnStart.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This component lets you parent the transform you put it on to any target parent (or to the root if none is set), on Awake, Start or anytime you call its Parent() method + /// + public class MMParentingOnStart : MonoBehaviour + { + /// the possible modes this can run on + public enum Modes { Awake, Start, Script } + /// the selected mode + public Modes Mode = Modes.Awake; + /// the parent to parent to, leave empty if you want to unparent completely + public Transform TargetParent; + + /// + /// On Awake we parent if needed + /// + protected virtual void Awake() + { + if (Mode == Modes.Awake) + { + Parent(); + } + } + + /// + /// On Start we parent if needed + /// + protected virtual void Start() + { + if (Mode == Modes.Start) + { + Parent(); + } + } + + /// + /// Sets this transform's parent to the target + /// + public virtual void Parent() + { + this.transform.SetParent(TargetParent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMParentingOnStart.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMParentingOnStart.cs.meta new file mode 100644 index 0000000..5288128 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMParentingOnStart.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 996385a9b56b4d14eb03dc65ed309620 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMPeriodicExecution.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMPeriodicExecution.cs new file mode 100644 index 0000000..de924b4 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMPeriodicExecution.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// This class will let you trigger a OnRandomInterval event periodically, at random intervals + /// + public class MMPeriodicExecution : MonoBehaviour + { + /// the min and max duration of the interval between two events, in seconds + [MMVector("Min", "Max")] + public Vector2 RandomIntervalDuration = new Vector2(1f, 3f); + /// the event to play at the end of each interval + public UnityEvent OnRandomInterval; + + protected float _lastUpdateAt = 0f; + protected float _currentInterval = 0f; + + /// + /// On Start we initialize our interval duration + /// + protected virtual void Start() + { + DetermineNewInterval(); + } + + /// + /// On Update we check if we've reached the end of an interval + /// + protected virtual void Update() + { + if (Time.time - _lastUpdateAt > _currentInterval) + { + OnRandomInterval?.Invoke(); + _lastUpdateAt = Time.time; + DetermineNewInterval(); + } + } + + /// + /// Randomizes a new duration + /// + protected virtual void DetermineNewInterval() + { + _currentInterval = Random.Range(RandomIntervalDuration.x, RandomIntervalDuration.y); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMPeriodicExecution.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMPeriodicExecution.cs.meta new file mode 100644 index 0000000..3669f83 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMPeriodicExecution.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b91c53058d9ddc04bbc92506986923a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMPlatformActivation.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMPlatformActivation.cs new file mode 100644 index 0000000..e0bd504 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMPlatformActivation.cs @@ -0,0 +1,230 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a gameobject, and it'll enable/disable it based on platform context, using conditional defintions to do so + /// + [AddComponentMenu("More Mountains/Tools/Activation/MMPlatformActivation")] + public class MMPlatformActivation : MonoBehaviour + { + /// the possible times at which this script can run + public enum ExecutionTimes { Awake, Start, OnEnable } + public enum PlatformActions { DoNothing, Disable } + + [Header("Settings")] + /// the selected execution time + public ExecutionTimes ExecutionTime = ExecutionTimes.Awake; + /// whether or not this should output a debug line in the console + public bool DebugToTheConsole = false; + + [Header("Desktop")] + /// whether or not this gameobject should be active on Windows + public PlatformActions UNITY_STANDALONE_WIN = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on OSX + public PlatformActions UNITY_STANDALONE_OSX = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on Linux + public PlatformActions UNITY_STANDALONE_LINUX = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on standalone + public PlatformActions UNITY_STANDALONE = PlatformActions.DoNothing; + + [Header("Mobile")] + /// whether or not this gameobject should be active on iOS + public PlatformActions UNITY_IOS = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on iPhone + public PlatformActions UNITY_IPHONE = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on Android + public PlatformActions UNITY_ANDROID = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on Tizen + public PlatformActions UNITY_TIZEN = PlatformActions.DoNothing; + + [Header("Console")] + /// whether or not this gameobject should be active on Wii + public PlatformActions UNITY_WII = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on PS4 + public PlatformActions UNITY_PS4 = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on XBoxOne + public PlatformActions UNITY_XBOXONE = PlatformActions.DoNothing; + + [Header("Others")] + /// whether or not this gameobject should be active on WebGL + public PlatformActions UNITY_WEBGL = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on Lumin + public PlatformActions UNITY_LUMIN = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on TVOS + public PlatformActions UNITY_TVOS = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on WSA + public PlatformActions UNITY_WSA = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on Facebook + public PlatformActions UNITY_FACEBOOK = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on Ads + public PlatformActions UNITY_ADS = PlatformActions.DoNothing; + /// whether or not this gameobject should be active on Analytics + public PlatformActions UNITY_ANALYTICS = PlatformActions.DoNothing; + + [Header("Active in Editor")] + /// whether or not this gameobject should be active in Editor + public PlatformActions UNITY_EDITOR = PlatformActions.DoNothing; + /// whether or not this gameobject should be active in Editor on Windows + public PlatformActions UNITY_EDITOR_WIN = PlatformActions.DoNothing; + /// whether or not this gameobject should be active in Editor on OSX + public PlatformActions UNITY_EDITOR_OSX = PlatformActions.DoNothing; + /// whether or not this gameobject should be active in Editor on Linux + public PlatformActions UNITY_EDITOR_LINUX = PlatformActions.DoNothing; + + /// + /// On Enable, processes the state if needed + /// + protected virtual void OnEnable() + { + if (ExecutionTime == ExecutionTimes.OnEnable) + { + Process(); + } + } + + /// + /// On Awake, processes the state if needed + /// + protected virtual void Awake() + { + if (ExecutionTime == ExecutionTimes.Awake) + { + Process(); + } + } + + /// + /// On Start, processes the state if needed + /// + protected virtual void Start() + { + if (ExecutionTime == ExecutionTimes.Start) + { + Process(); + } + } + + /// + /// Enables or disables the object based on current platform + /// + protected virtual void Process() + { + // DESKTOP ---------------------------------------------------------------------------------- + + #if UNITY_STANDALONE_WIN + DisableIfNeeded(UNITY_STANDALONE_WIN, "Windows"); + #endif + + #if UNITY_STANDALONE_OSX + DisableIfNeeded(UNITY_STANDALONE_OSX, "OSX"); + #endif + + #if UNITY_STANDALONE_LINUX + DisableIfNeeded(UNITY_STANDALONE_LINUX, "Linux"); + #endif + + #if UNITY_STANDALONE + DisableIfNeeded(UNITY_STANDALONE, "Standalone"); + #endif + + // MOBILE ---------------------------------------------------------------------------------- + + #if UNITY_IOS + DisableIfNeeded(UNITY_IOS, "iOS"); + #endif + + #if UNITY_IPHONE + DisableIfNeeded(UNITY_IPHONE, "iPhone"); + #endif + + #if UNITY_ANDROID + DisableIfNeeded(UNITY_ANDROID, "Android"); + #endif + + #if UNITY_TIZEN + DisableIfNeeded(UNITY_TIZEN, "Tizen"); + #endif + + // CONSOLE ---------------------------------------------------------------------------------- + + #if UNITY_WII + DisableIfNeeded(UNITY_WII, "Wii"); + #endif + + #if UNITY_PS4 + DisableIfNeeded(UNITY_PS4, "PS4"); + #endif + + #if UNITY_XBOXONE + DisableIfNeeded(UNITY_XBOXONE, "XBoxOne"); + #endif + + // CONSOLE ---------------------------------------------------------------------------------- + + #if UNITY_WEBGL + DisableIfNeeded(UNITY_WEBGL, "WebGL"); + #endif + + #if UNITY_LUMIN + DisableIfNeeded(UNITY_LUMIN, "Lumin"); + #endif + + #if UNITY_TVOS + DisableIfNeeded(UNITY_TVOS, "TV OS"); + #endif + + #if UNITY_WSA + DisableIfNeeded(UNITY_WSA, "WSA"); + #endif + + #if UNITY_FACEBOOK + DisableIfNeeded(UNITY_FACEBOOK, "Facebook"); + #endif + + #if UNITY_ADS + DisableIfNeeded(UNITY_ADS, "Ads"); + #endif + + #if UNITY_ANALYTICS + DisableIfNeeded(UNITY_ANALYTICS, "Analytics"); + #endif + + // EDITOR ---------------------------------------------------------------------------------- + + #if UNITY_EDITOR + DisableIfNeeded(UNITY_EDITOR, "Editor"); + #endif + + #if UNITY_EDITOR_WIN + DisableIfNeeded(UNITY_EDITOR_WIN, "Editor Windows"); + #endif + + #if UNITY_EDITOR_OSX + DisableIfNeeded(UNITY_EDITOR_OSX, "Editor OSX"); + #endif + + #if UNITY_EDITOR_LINUX + DisableIfNeeded(UNITY_EDITOR_LINUX, "Editor Linux"); + #endif + } + + /// + /// Disables the object if needed, and outputs a debug log if requested + /// + /// + /// + protected virtual void DisableIfNeeded(PlatformActions platform, string platformName) + { + if (this.gameObject.activeInHierarchy && (platform == PlatformActions.Disable)) + { + this.gameObject.SetActive(false); + if (DebugToTheConsole) + { + Debug.LogFormat(this.gameObject.name + " got disabled via MMPlatformActivation, platform : " + platformName + "."); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMPlatformActivation.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMPlatformActivation.cs.meta new file mode 100644 index 0000000..988fad4 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMPlatformActivation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a39fcd2b055db14184fbda2b333f40c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedActivation.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedActivation.cs new file mode 100644 index 0000000..982a6ac --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedActivation.cs @@ -0,0 +1,253 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.Events; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object and it'll be auto destroyed X seconds after its Start() + /// + [AddComponentMenu("More Mountains/Tools/Activation/MMTimedActivation")] + public class MMTimedActivation : MonoBehaviour + { + /// the possible activation modes + public enum TimedStatusChange { Enable, Disable, Destroy } + /// the possible trigger modes + public enum ActivationModes { Awake, Start, OnEnable, OnTriggerEnter, OnTriggerExit, OnTriggerEnter2D, OnTriggerExit2D, Script } + /// the possible ways to check if the collider matches + public enum TriggerModes { None, Tag, Layer } + /// the possible delay modes + public enum DelayModes { Time, Frames } + + [Header("Trigger Mode")] + /// the moment you want the countdown to state change to start + public ActivationModes ActivationMode = ActivationModes.Start; + /// the target layer for activation if using OnTriggerEnter or OnTriggerExit + [MMEnumCondition("ActivationMode", (int)ActivationModes.OnTriggerEnter, (int)ActivationModes.OnTriggerExit)] + public TriggerModes TriggerMode; + /// the layer the target collider should be on + [MMEnumCondition("TriggerMode", (int)TriggerModes.Layer)] + public LayerMask TargetTriggerLayer; + /// the tag the target collider should have + [MMEnumCondition("TriggerMode", (int)TriggerModes.Tag)] + public string TargetTriggerTag; + + + + [Header("Delay")] + /// the chosen delay mode, whether to wait in seconds or frames + public DelayModes DelayMode = DelayModes.Time; + /// The time (in seconds) before we destroy the object + [MMEnumCondition("DelayMode", (int)DelayModes.Time)] + public float TimeBeforeStateChange = 2; + /// the amount of frames to wait for when in Frames DelayMode + [MMEnumCondition("DelayMode", (int)DelayModes.Frames)] + public int FrameCount = 1; + + [Header("Timed Activation")] + /// the possible targets you want the state to change + public List TargetGameObjects; + /// the possible targets you want the state to change + public List TargetBehaviours; + /// the destruction mode for this object : destroy or disable + public TimedStatusChange TimeDestructionMode = TimedStatusChange.Disable; + + [Header("Actions")] + /// Unity events to trigger after the delay + public UnityEvent TimedActions; + + /// + /// On awake, initialize our delay and trigger our change state countdown if needed + /// + protected virtual void Awake() + { + if (ActivationMode == ActivationModes.Awake) + { + StartChangeState(); + } + } + + /// + /// Call this method to start the countdown to activation + /// + public virtual void TriggerSequence() + { + StartChangeState(); + } + + /// + /// On start, trigger our change state countdown if needed + /// + protected virtual void Start() + { + if (ActivationMode == ActivationModes.Start) + { + StartChangeState(); + } + } + + /// + /// On enable, trigger our change state countdown if needed + /// + protected virtual void OnEnable() + { + if (ActivationMode == ActivationModes.OnEnable) + { + StartChangeState(); + } + } + + /// + /// On trigger enter, we start our countdown if needed + /// + /// + protected virtual void OnTriggerEnter(Collider collider) + { + if ((ActivationMode == ActivationModes.OnTriggerEnter) && (CorrectTagOrLayer(collider.gameObject))) + { + StartChangeState(); + } + } + + /// + /// On trigger exit, we start our countdown if needed + /// + /// + protected virtual void OnTriggerExit(Collider collider) + { + if ((ActivationMode == ActivationModes.OnTriggerExit) && (CorrectTagOrLayer(collider.gameObject))) + { + StartChangeState(); + } + } + + /// + /// On trigger enter 2D, we start our countdown if needed + /// + /// + protected virtual void OnTriggerEnter2D(Collider2D collider) + { + if ((ActivationMode == ActivationModes.OnTriggerEnter2D) && (CorrectTagOrLayer(collider.gameObject))) + { + StartChangeState(); + } + } + + /// + /// On trigger exit 2D, we start our countdown if needed + /// + /// + protected virtual void OnTriggerExit2D(Collider2D collider) + { + if ((ActivationMode == ActivationModes.OnTriggerExit2D) && (CorrectTagOrLayer(collider.gameObject))) + { + StartChangeState(); + } + } + + /// + /// Returns true if the target matches our settings, false otherwise + /// + /// + /// + protected virtual bool CorrectTagOrLayer(GameObject target) + { + switch (TriggerMode) + { + case TriggerModes.None: + return true; + case TriggerModes.Layer: + if (((1 << target.layer) & TargetTriggerLayer) != 0) + { + return true; + } + else + { + return false; + } + case TriggerModes.Tag: + return (target.CompareTag(TargetTriggerTag)); + } + return false; + } + + /// + /// On start change state, starts the timed activation + /// + protected virtual void StartChangeState() + { + StartCoroutine(TimedActivationSequence()); + } + + /// + /// Waits and triggers state change and events + /// + protected virtual IEnumerator TimedActivationSequence() + { + if (DelayMode == DelayModes.Time) + { + yield return MMCoroutine.WaitFor(TimeBeforeStateChange); + } + else + { + yield return StartCoroutine(MMCoroutine.WaitForFrames(FrameCount)); + } + StateChange(); + Activate(); + } + + /// + /// Triggers actions if needed + /// + protected virtual void Activate() + { + if (TimedActions != null) + { + TimedActions.Invoke(); + } + } + + /// + /// Changes the object's status or destroys it + /// + protected virtual void StateChange() + { + foreach(GameObject targetGameObject in TargetGameObjects) + { + switch (TimeDestructionMode) + { + case TimedStatusChange.Destroy: + Destroy(targetGameObject); + break; + + case TimedStatusChange.Disable: + targetGameObject.SetActive(false); + break; + + case TimedStatusChange.Enable: + targetGameObject.SetActive(true); + break; + } + } + + foreach (MonoBehaviour targetBehaviour in TargetBehaviours) + { + switch (TimeDestructionMode) + { + case TimedStatusChange.Destroy: + Destroy(targetBehaviour); + break; + + case TimedStatusChange.Disable: + targetBehaviour.enabled = false; + break; + + case TimedStatusChange.Enable: + targetBehaviour.enabled = true; + break; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedActivation.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedActivation.cs.meta new file mode 100644 index 0000000..6c343ca --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedActivation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46840d8dc203908469ee327b591ae35f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedDestruction.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedDestruction.cs new file mode 100644 index 0000000..f5659da --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedDestruction.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object and it'll be auto destroyed X seconds after its Start() + /// + [AddComponentMenu("More Mountains/Tools/Activation/MMTimedDestruction")] + public class MMTimedDestruction : MonoBehaviour + { + /// the possible destruction modes + public enum TimedDestructionModes { Destroy, Disable } + + /// the destruction mode for this object : destroy or disable + public TimedDestructionModes TimeDestructionMode = TimedDestructionModes.Destroy; + /// The time (in seconds) before we destroy the object + public float TimeBeforeDestruction=2; + + /// + /// On Start(), we schedule the object's destruction + /// + protected virtual void Start () + { + StartCoroutine(Destruction()); + } + + /// + /// Destroys the object after TimeBeforeDestruction seconds + /// + protected virtual IEnumerator Destruction() + { + yield return MMCoroutine.WaitFor(TimeBeforeDestruction); + + if (TimeDestructionMode == TimedDestructionModes.Destroy) + { + Destroy(gameObject); + } + else + { + gameObject.SetActive(false); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedDestruction.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedDestruction.cs.meta new file mode 100644 index 0000000..c774673 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTimedDestruction.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9e71ad30bf1524741b90c1bd0354e1e0 +timeCreated: 1523894079 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMToggleActive.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMToggleActive.cs new file mode 100644 index 0000000..94ad3bc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMToggleActive.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This very simple class simply exposes a method to toggle the GameObject it's on (or a target one if left empty in the inspector) active or inactive + /// + public class MMToggleActive : MonoBehaviour + { + [Header("Target - leave empty for self")] + /// the target gameobject to toggle. Leave blank for auto grab + public GameObject TargetGameObject; + + /// a test button + [MMInspectorButton("ToggleActive")] + public bool ToggleActiveButton; + + /// + /// On awake, grabs self if needed + /// + protected virtual void Awake() + { + if (TargetGameObject == null) + { + TargetGameObject = this.gameObject; + } + } + + /// + /// Toggles the target gameobject's active state + /// + public virtual void ToggleActive() + { + TargetGameObject.SetActive(!TargetGameObject.activeInHierarchy); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMToggleActive.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMToggleActive.cs.meta new file mode 100644 index 0000000..20606c5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMToggleActive.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3aad8b45814dc6f4cab32abed0a152b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollision.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollision.cs new file mode 100644 index 0000000..91b141c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollision.cs @@ -0,0 +1,139 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + [AddComponentMenu("More Mountains/Tools/Activation/MMTriggerAndCollision")] + public class MMTriggerAndCollision : MonoBehaviour + { + public LayerMask CollisionLayerMask; + public UnityEvent OnCollisionEnterEvent; + public UnityEvent OnCollisionExitEvent; + public UnityEvent OnCollisionStayEvent; + + public LayerMask TriggerLayerMask; + public UnityEvent OnTriggerEnterEvent; + public UnityEvent OnTriggerExitEvent; + public UnityEvent OnTriggerStayEvent; + + public LayerMask Collision2DLayerMask; + public UnityEvent OnCollision2DEnterEvent; + public UnityEvent OnCollision2DExitEvent; + public UnityEvent OnCollision2DStayEvent; + + public LayerMask Trigger2DLayerMask; + public UnityEvent OnTrigger2DEnterEvent; + public UnityEvent OnTrigger2DExitEvent; + public UnityEvent OnTrigger2DStayEvent; + + // Collision 2D ------------------------------------------------------------------------------------ + + protected virtual void OnCollisionEnter2D (Collision2D collision) + { + if (Collision2DLayerMask.MMContains (collision.gameObject)) + { + OnCollision2DEnterEvent.Invoke(); + } + } + + protected virtual void OnCollisionExit2D (Collision2D collision) + { + if (Collision2DLayerMask.MMContains (collision.gameObject)) + { + OnCollision2DExitEvent.Invoke(); + } + } + + protected virtual void OnCollisionStay2D (Collision2D collision) + { + if (Collision2DLayerMask.MMContains (collision.gameObject)) + { + OnCollision2DStayEvent.Invoke(); + } + } + + // Trigger 2D ------------------------------------------------------------------------------------ + + protected virtual void OnTriggerEnter2D (Collider2D collider) + { + if (Trigger2DLayerMask.MMContains (collider.gameObject)) + { + OnTrigger2DEnterEvent.Invoke(); + } + } + + protected virtual void OnTriggerExit2D (Collider2D collider) + { + if (Trigger2DLayerMask.MMContains (collider.gameObject)) + { + OnTrigger2DExitEvent.Invoke(); + } + } + + protected virtual void OnTriggerStay2D (Collider2D collider) + { + if (Trigger2DLayerMask.MMContains (collider.gameObject)) + { + OnTrigger2DStayEvent.Invoke(); + } + } + + // Collision ------------------------------------------------------------------------------------ + + protected virtual void OnCollisionEnter(Collision c) + { + if (0 != (CollisionLayerMask.value & 1 << c.transform.gameObject.layer)) + { + OnCollisionEnterEvent.Invoke(); + } + } + + protected virtual void OnCollisionExit(Collision c) + { + if (0 != (CollisionLayerMask.value & 1 << c.transform.gameObject.layer)) + { + OnCollisionExitEvent.Invoke(); + } + } + + protected virtual void OnCollisionStay(Collision c) + { + if (0 != (CollisionLayerMask.value & 1 << c.transform.gameObject.layer)) + { + OnCollisionStayEvent.Invoke(); + } + } + + // Trigger ------------------------------------------------------------------------------------ + + protected virtual void OnTriggerEnter (Collider collider) + { + if (TriggerLayerMask.MMContains (collider.gameObject)) + { + OnTriggerEnterEvent.Invoke(); + } + } + + protected virtual void OnTriggerExit (Collider collider) + { + if (TriggerLayerMask.MMContains (collider.gameObject)) + { + OnTriggerExitEvent.Invoke(); + } + } + + protected virtual void OnTriggerStay (Collider collider) + { + if (TriggerLayerMask.MMContains (collider.gameObject)) + { + OnTriggerStayEvent.Invoke(); + } + } + + protected virtual void Reset() + { + Collision2DLayerMask = LayerMask.NameToLayer("Everything"); + CollisionLayerMask = LayerMask.NameToLayer("Everything"); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollision.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollision.cs.meta new file mode 100644 index 0000000..4c2a86f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollision.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 007ea1391362e4845aee91886eb0cda3 +timeCreated: 1523908029 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollisionFilter.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollisionFilter.cs new file mode 100644 index 0000000..8241fbf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollisionFilter.cs @@ -0,0 +1,157 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + [System.Flags] + public enum TriggerAndCollisionMask + { + IgnoreAll = 0, + OnTriggerEnter = 1 << 0, + OnTriggerStay = 1 << 1, + OnTriggerExit = 1 << 2, + OnCollisionEnter = 1 << 3, + OnCollisionStay = 1 << 4, + OnCollisionExit = 1 << 5, + OnTriggerEnter2D = 1 << 6, + OnTriggerStay2D = 1 << 7, + OnTriggerExit2D = 1 << 8, + OnCollisionEnter2D = 1 << 9, + OnCollisionStay2D = 1 << 10, + OnCollisionExit2D = 1 << 11, + + OnAnyTrigger3D = OnTriggerEnter | OnTriggerStay | OnTriggerExit, + OnAnyCollision3D = OnCollisionEnter | OnCollisionStay | OnCollisionExit, + OnAnyTrigger2D = OnTriggerEnter2D | OnTriggerStay2D | OnTriggerExit2D, + OnAnyCollision2D = OnCollisionEnter2D | OnCollisionStay2D | OnCollisionExit2D, + + OnAnyTrigger = OnAnyTrigger3D | OnAnyTrigger2D, + OnAnyCollision = OnAnyCollision3D | OnAnyCollision2D, + + All_3D = OnAnyTrigger3D | OnAnyCollision3D, + All_2D = OnAnyTrigger2D | OnAnyCollision2D, + All = All_3D | All_2D, + } + public abstract class MMTriggerAndCollisionFilter : MonoBehaviour + { + public TriggerAndCollisionMask TriggerAndCollisionFilter = TriggerAndCollisionMask.All; + + // Tested to check if callback should be used or ignored + protected virtual bool UseEvent(TriggerAndCollisionMask value) => 0 != (TriggerAndCollisionFilter & value); + + // Collision 2D ------------------------------------------------------------------------------------ + + protected abstract void OnCollisionEnter2D_(Collision2D collision); + void OnCollisionEnter2D (Collision2D collision) + { + if (UseEvent(TriggerAndCollisionMask.OnCollisionEnter2D)) + { + OnCollisionEnter2D_(collision); + } + } + + protected abstract void OnCollisionExit2D_(Collision2D collision); + void OnCollisionExit2D (Collision2D collision) + { + if (UseEvent(TriggerAndCollisionMask.OnCollisionExit2D)) + { + OnCollisionExit2D_(collision); + } + } + + protected abstract void OnCollisionStay2D_(Collision2D collision); + void OnCollisionStay2D (Collision2D collision) + { + if (UseEvent(TriggerAndCollisionMask.OnCollisionStay2D)) + { + OnCollisionStay2D_(collision); + } + } + + // Trigger 2D ------------------------------------------------------------------------------------ + + protected abstract void OnTriggerEnter2D_(Collider2D collider); + void OnTriggerEnter2D (Collider2D collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerEnter2D)) + { + OnTriggerEnter2D_(collider); + } + } + + protected abstract void OnTriggerExit2D_(Collider2D collider); + void OnTriggerExit2D (Collider2D collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerExit2D)) + { + OnTriggerExit2D_(collider); + } + } + + protected abstract void OnTriggerStay2D_ (Collider2D collider); + void OnTriggerStay2D (Collider2D collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerStay2D)) + { + OnTriggerStay2D_(collider); + } + } + + // Collision ------------------------------------------------------------------------------------ + + protected abstract void OnCollisionEnter_ (Collision c); + void OnCollisionEnter(Collision c) + { + if (UseEvent(TriggerAndCollisionMask.OnCollisionEnter)) + { + OnCollisionEnter_(c); + } + } + + protected abstract void OnCollisionExit_ (Collision c); + void OnCollisionExit(Collision c) + { + if (UseEvent(TriggerAndCollisionMask.OnCollisionExit)) + { + OnCollisionExit_(c); + } + } + + protected abstract void OnCollisionStay_ (Collision c); + void OnCollisionStay(Collision c) + { + if (UseEvent(TriggerAndCollisionMask.OnCollisionStay)) + { + OnCollisionStay_(c); + } + } + + // Trigger ------------------------------------------------------------------------------------ + + protected abstract void OnTriggerEnter_(Collider collider); + void OnTriggerEnter (Collider collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerEnter)) + { + OnTriggerEnter_(collider); + } + } + + protected abstract void OnTriggerExit_(Collider collider); + void OnTriggerExit (Collider collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerExit)) + { + OnTriggerExit_(collider); + } + } + + protected abstract void OnTriggerStay_(Collider collider); + void OnTriggerStay (Collider collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerStay)) + { + OnTriggerStay_(collider); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollisionFilter.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollisionFilter.cs.meta new file mode 100644 index 0000000..dc05d5c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerAndCollisionFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5cc2d50cc470a8b448cb93411e66d069 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerFilter.cs b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerFilter.cs new file mode 100644 index 0000000..10086bc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerFilter.cs @@ -0,0 +1,78 @@ +using System; +using System.Web; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public abstract class MMTriggerFilter : MonoBehaviour + { + public TriggerAndCollisionMask TriggerFilter = TriggerAndCollisionMask.All; + + protected virtual void OnValidate() + { + // Only allow trigger related bits + TriggerFilter &= TriggerAndCollisionMask.OnAnyTrigger; + } + + protected virtual bool UseEvent(TriggerAndCollisionMask value) => 0 != (TriggerFilter & value); + + // Trigger 2D ------------------------------------------------------------------------------------ + + protected abstract void OnTriggerEnter2D_(Collider2D collider); + void OnTriggerEnter2D (Collider2D collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerEnter2D)) + { + OnTriggerEnter2D_(collider); + } + } + + protected abstract void OnTriggerExit2D_(Collider2D collider); + void OnTriggerExit2D (Collider2D collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerExit2D)) + { + OnTriggerExit2D_(collider); + } + } + + protected abstract void OnTriggerStay2D_ (Collider2D collider); + void OnTriggerStay2D (Collider2D collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerStay2D)) + { + OnTriggerStay2D_(collider); + } + } + + + // Trigger ------------------------------------------------------------------------------------ + + protected abstract void OnTriggerEnter_(Collider collider); + void OnTriggerEnter (Collider collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerEnter)) + { + OnTriggerEnter_(collider); + } + } + + protected abstract void OnTriggerExit_(Collider collider); + void OnTriggerExit (Collider collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerExit)) + { + OnTriggerExit_(collider); + } + } + + protected abstract void OnTriggerStay_(Collider collider); + void OnTriggerStay (Collider collider) + { + if (UseEvent(TriggerAndCollisionMask.OnTriggerStay)) + { + OnTriggerStay_(collider); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerFilter.cs.meta b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerFilter.cs.meta new file mode 100644 index 0000000..7105112 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMActivation/MMTriggerFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8583d7ca8b7ea2c418257447cb3032f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCamera.meta b/Assets/Feel/MMTools/Accessories/MMCamera.meta new file mode 100644 index 0000000..6d4e83e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7811b057d03ff1d49b5a4b8bfe34cd08 +folderAsset: yes +timeCreated: 1523893762 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMAspectRatioSafeZones.cs b/Assets/Feel/MMTools/Accessories/MMCamera/MMAspectRatioSafeZones.cs new file mode 100644 index 0000000..176d991 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMAspectRatioSafeZones.cs @@ -0,0 +1,64 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace MoreMountains.Tools +{ + /// + /// A class to store ratio display info + /// + [Serializable] + public class Ratio + { + /// whether or not that ratio should be drawn + public bool DrawRatio = true; + /// the ratio's size (4:3, 16:9, etc) + public Vector2 Size; + /// the color of the handle to draw + public Color RatioColor; + + public Ratio(bool drawRatio, Vector2 size, Color ratioColor) + { + DrawRatio = drawRatio; + Size = size; + RatioColor = ratioColor; + } + } + + /// + /// A class to handle the automatic display of safe zones for the different ratios setup in the inspector + /// + [AddComponentMenu("More Mountains/Tools/Camera/MMAspectRatioSafeZones")] + public class MMAspectRatioSafeZones : MonoBehaviour + { + [Header("Center")] + /// whether or not to draw the center crosshair + public bool DrawCenterCrosshair = true; + /// the size of the center crosshair + public float CenterCrosshairSize = 1f; + /// the color of the center crosshair + public Color CenterCrosshairColor = MMColors.Wheat; + + [Header("Ratios")] + /// whether or not to draw any ratio + public bool DrawRatios = true; + /// the size of the projected ratios + public float CameraSize = 5f; + /// the opacity to apply to the dead zones + public float UnsafeZonesOpacity = 0.2f; + /// the list of ratios to draw + public List Ratios; + + [MMInspectorButton("AutoSetup")] + public bool AutoSetupButton; + + public virtual void AutoSetup() + { + Ratios.Clear(); + Ratios.Add(new Ratio(true, new Vector2(16, 9), MMColors.DeepSkyBlue)); + Ratios.Add(new Ratio(true, new Vector2(16, 10), MMColors.GreenYellow)); + Ratios.Add(new Ratio(true, new Vector2(4, 3), MMColors.HotPink)); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMAspectRatioSafeZones.cs.meta b/Assets/Feel/MMTools/Accessories/MMCamera/MMAspectRatioSafeZones.cs.meta new file mode 100644 index 0000000..95f943c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMAspectRatioSafeZones.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1425f31c35afe2d43944511ec551d73b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMBillboard.cs b/Assets/Feel/MMTools/Accessories/MMCamera/MMBillboard.cs new file mode 100644 index 0000000..c2b965c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMBillboard.cs @@ -0,0 +1,87 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to an object (usually a sprite) and it'll face the camera at all times + /// + [AddComponentMenu("More Mountains/Tools/Camera/MMBillboard")] + public class MMBillboard : MonoBehaviour + { + /// the camera we're facing + public virtual Camera MainCamera { get; set; } + /// whether or not this object should automatically grab a camera on start + [Tooltip("whether or not this object should automatically grab a camera on start")] + public bool GrabMainCameraOnStart = true; + /// whether or not to nest this object below a parent container + [Tooltip("whether or not to nest this object below a parent container")] + public bool NestObject = true; + /// the Vector3 to offset the look at direction by + [Tooltip("the Vector3 to offset the look at direction by")] + public Vector3 OffsetDirection = Vector3.back; + /// the Vector3 to consider as "world up" + [Tooltip("the Vector3 to consider as 'world up'")] + public Vector3 Up = Vector3.up; + + protected GameObject _parentContainer; + private Transform _transform; + + /// + /// On awake we grab a camera if needed, and nest our object + /// + protected virtual void Awake() + { + _transform = transform; + + if (GrabMainCameraOnStart == true) + { + GrabMainCamera (); + } + } + + private void Start() + { + if (NestObject) + { + NestThisObject(); + } + } + + /// + /// Nests this object below a parent container + /// + protected virtual void NestThisObject() + { + _parentContainer = new GameObject(); + SceneManager.MoveGameObjectToScene(_parentContainer, this.gameObject.scene); + _parentContainer.name = "Parent"+transform.gameObject.name; + _parentContainer.transform.position = transform.position; + transform.SetParent(_parentContainer.transform); + } + + /// + /// Grabs the main camera. + /// + protected virtual void GrabMainCamera() + { + MainCamera = Camera.main; + } + + /// + /// On update, we change our parent container's rotation to face the camera + /// + protected virtual void Update() + { + if (NestObject) + { + _parentContainer.transform.LookAt(_parentContainer.transform.position + MainCamera.transform.rotation * OffsetDirection, MainCamera.transform.rotation * Up); + } + else + { + _transform.LookAt(_transform.position + MainCamera.transform.rotation * OffsetDirection, MainCamera.transform.rotation * Up); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMBillboard.cs.meta b/Assets/Feel/MMTools/Accessories/MMCamera/MMBillboard.cs.meta new file mode 100644 index 0000000..bad48a6 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMBillboard.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 90e9b0613a9f9544580c1644719392dd +timeCreated: 1523900929 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraAspectRatio.cs b/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraAspectRatio.cs new file mode 100644 index 0000000..3a81ff0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraAspectRatio.cs @@ -0,0 +1,95 @@ +#if UNITY_EDITOR +using UnityEditor; +#endif +using UnityEngine; + +namespace MoreMountains.Tools +{ + [RequireComponent(typeof(Camera))] + /// + /// Forces an aspect ratio on a camera + /// + [AddComponentMenu("More Mountains/Tools/Camera/MMCameraAspectRatio")] + public class MMCameraAspectRatio : MonoBehaviour + { + public enum Modes { Fixed, ScreenRatio } + + [Header("Camera")] + /// the camera to change the aspect ratio on + [Tooltip("the camera to change the aspect ratio on")] + public Camera TargetCamera; + /// the mode of choice, fixed will force a specified ratio, while ScreenRatio will adapt the camera's aspect to the current screen ratio + [Tooltip("the mode of choice, fixed will force a specified ratio, while ScreenRatio will adapt the camera's aspect to the current screen ratio")] + public Modes Mode = Modes.Fixed; + /// in fixed mode, the ratio to apply to the camera + [Tooltip("in fixed mode, the ratio to apply to the camera")] + [MMEnumCondition("Mode", (int)Modes.Fixed)] + public Vector2 FixedAspectRatio = Vector2.zero; + + [Header("Automation")] + /// whether or not to apply the ratio automatically on Start + [Tooltip("whether or not to apply the ratio automatically on Start")] + public bool ApplyAspectRatioOnStart = true; + /// whether or not to apply the ratio automatically on enable + [Tooltip("whether or not to apply the ratio automatically on enable")] + public bool ApplyAspectRatioOnEnable = false; + + [Header("Debug")] + [MMInspectorButton("ApplyAspectRatio")] + public bool ApplyAspectRatioButton; + + protected float _defaultAspect = 16f / 9f; + + /// + /// On enable we apply our aspect ratio if needed + /// + protected virtual void OnEnable() + { + if (ApplyAspectRatioOnEnable) { ApplyAspectRatio(); } + } + + /// + /// On start we apply our aspect ratio if needed + /// + protected virtual void Start() + { + if (ApplyAspectRatioOnStart) { ApplyAspectRatio(); } + } + + /// + /// Applies the specified aspect ratio + /// + public virtual void ApplyAspectRatio() + { + if (TargetCamera == null) + { + return; + } + + float newAspectRatio = _defaultAspect; + float ratioX = 1f; + float ratioY = 1f; + switch (Mode) + { + case Modes.Fixed: + ratioX = FixedAspectRatio.x; + ratioY = FixedAspectRatio.y; + break; + case Modes.ScreenRatio: + #if UNITY_EDITOR + string[] res = UnityStats.screenRes.Split('x'); + ratioX = int.Parse(res[0]); + ratioY = int.Parse(res[1]); + #else + ratioX = Screen.width; + ratioY = Screen.height; + #endif + + break; + } + newAspectRatio = ratioY != 0f ? ratioX / ratioY : _defaultAspect; + TargetCamera.aspect = newAspectRatio; + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraAspectRatio.cs.meta b/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraAspectRatio.cs.meta new file mode 100644 index 0000000..7b79448 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraAspectRatio.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6d09203129ac2e44a8fada3ae8c32667 +timeCreated: 1523894079 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraFog.cs b/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraFog.cs new file mode 100644 index 0000000..abfa693 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraFog.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A simple class used to store fog properties + /// + [Serializable] + public class FogSettings + { + public bool FogEnabled = true; + public Color FogColor = Color.white; + public float FogDensity = 0.01f; + public UnityEngine.FogMode FogMode = FogMode.ExponentialSquared; + } + + /// + /// Add this class to a camera and it will override fog settings when active + /// + [ExecuteAlways] + public class MMCameraFog : MonoBehaviour + { + /// the settings to use to override fog settings + public FogSettings Settings; + + protected FogSettings _previousSettings; + + protected void Awake() + { + _previousSettings = new FogSettings(); + } + + /// + /// On pre render we store our current fog settings and override them + /// + protected virtual void OnPreRender() + { + _previousSettings.FogEnabled = RenderSettings.fog; + _previousSettings.FogColor = RenderSettings.fogColor; + _previousSettings.FogDensity = RenderSettings.fogDensity; + _previousSettings.FogMode = RenderSettings.fogMode; + + RenderSettings.fog = Settings.FogEnabled; + RenderSettings.fogColor = Settings.FogColor; + RenderSettings.fogDensity = Settings.FogDensity; + RenderSettings.fogMode = Settings.FogMode; + } + + /// + /// On post render we restore fog settings + /// + protected virtual void OnPostRender() + { + RenderSettings.fog = _previousSettings.FogEnabled; + RenderSettings.fogColor = _previousSettings.FogColor; + RenderSettings.fogDensity = _previousSettings.FogDensity; + RenderSettings.fogMode = _previousSettings.FogMode; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraFog.cs.meta b/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraFog.cs.meta new file mode 100644 index 0000000..f726781 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMCameraFog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 53e5d263afa31f84eba026d21225b8fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMOrbitalCamera.cs b/Assets/Feel/MMTools/Accessories/MMCamera/MMOrbitalCamera.cs new file mode 100644 index 0000000..68bf766 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMOrbitalCamera.cs @@ -0,0 +1,242 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// A class used to make a camera orbit around a target + /// + [AddComponentMenu("More Mountains/Tools/Camera/MMOrbitalCamera")] + public class MMOrbitalCamera : MonoBehaviour + { + /// the possible input modes for this camera + public enum Modes { Mouse, Touch } + + [Header("Setup")] + /// the selected input mode + public Modes Mode = Modes.Touch; + /// the object to orbit around + public Transform Target; + /// the offset to apply while orbiting + public Vector3 TargetOffset; + /// the current distance to target + [MMReadOnly] + public float DistanceToTarget = 5f; + + [Header("Rotation")] + /// whether or not rotation is enabled + public bool RotationEnabled = true; + /// the speed of the rotation + public Vector2 RotationSpeed = new Vector2(200f, 200f); + /// the minimum vertical angle limit + public int MinVerticalAngleLimit = -80; + /// the maximum vertical angle limit + public int MaxVerticalAngleLimit = 80; + + [Header("Zoom")] + /// whether or not zoom is enabled + public bool ZoomEnabled = true; + /// the minimum distance at which the user can zoom in + public float MinimumZoomDistance = 0.6f; + /// the max distance at which the user can zoom out + public float MaximumZoomDistance = 20; + /// the speed of the zoom interpolation + public int ZoomSpeed = 40; + /// the dampening to apply to the zoom + public float ZoomDampening = 5f; + + [Header("Mouse Zoom")] + /// the speed at which scrolling the mouse wheel will zoom + public float MouseWheelSpeed = 10f; + /// the max value at which to clamp the mouse wheel + public float MaxMouseWheelClamp = 10f; + + [Header("Steps")] + /// the distance after which to trigger a step + public float StepThreshold = 1; + /// an event to trigger when a step is met + public UnityEvent StepFeedback; + + protected float _angleX = 0f; + protected float _angleY = 0f; + protected float _currentDistance; + protected float _desiredDistance; + protected Quaternion _currentRotation; + protected Quaternion _desiredRotation; + protected Quaternion _rotation; + protected Vector3 _position; + protected float _scrollWheelAmount = 0; + protected float _stepBuffer = 0f; + + /// + /// On Start we initialize our orbital camera + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init we store our positions and rotations + /// + public virtual void Initialization() + { + // if no target is set, we throw an error and exit + if (Target == null) + { + Debug.LogError(this.gameObject.name + " : the MMOrbitalCamera doesn't have a target."); + return; + } + + DistanceToTarget = Vector3.Distance(Target.position, transform.position); + _currentDistance = DistanceToTarget; + _desiredDistance = DistanceToTarget; + + _position = transform.position; + _rotation = transform.rotation; + _currentRotation = transform.rotation; + _desiredRotation = transform.rotation; + + _angleX = Vector3.Angle(Vector3.right, transform.right); + _angleY = Vector3.Angle(Vector3.up, transform.up); + } + + /// + /// On late update we rotate, zoom, detect steps and finally apply our movement + /// + protected virtual void LateUpdate() + { + if (Target == null) + { + return; + } + + Rotation(); + Zoom(); + StepDetection(); + ApplyMovement(); + } + + /// + /// Rotates the camera around the object + /// + protected virtual void Rotation() + { + if (!RotationEnabled) + { + return; + } + + if (Mode == Modes.Touch && (Input.touchCount > 0)) + { + if ((Input.touches[0].phase == TouchPhase.Moved) && (Input.touchCount == 1)) + { + float screenHeight = Screen.currentResolution.height; + if (Input.touches[0].position.y < screenHeight/4) + { + return; + } + + float swipeSpeed = Input.touches[0].deltaPosition.magnitude / Input.touches[0].deltaTime; + + _angleX += Input.touches[0].deltaPosition.x * RotationSpeed.x * Time.deltaTime * swipeSpeed * 0.00001f; + _angleY -= Input.touches[0].deltaPosition.y * RotationSpeed.y * Time.deltaTime * swipeSpeed * 0.00001f; + _stepBuffer += Input.touches[0].deltaPosition.x; + + _angleY = MMMaths.ClampAngle(_angleY, MinVerticalAngleLimit, MaxVerticalAngleLimit); + _desiredRotation = Quaternion.Euler(_angleY, _angleX, 0); + _currentRotation = transform.rotation; + + _rotation = Quaternion.Lerp(_currentRotation, _desiredRotation, Time.deltaTime * ZoomDampening); + transform.rotation = _rotation; + } + else if (Input.touchCount == 1 && Input.touches[0].phase == TouchPhase.Began) + { + _desiredRotation = transform.rotation; + } + + if (transform.rotation != _desiredRotation) + { + _rotation = Quaternion.Lerp(transform.rotation, _desiredRotation, Time.deltaTime * ZoomDampening); + transform.rotation = _rotation; + } + } + else if (Mode == Modes.Mouse) + { + _angleX += Input.GetAxis("Mouse X") * RotationSpeed.x * Time.deltaTime; + _angleY += -Input.GetAxis("Mouse Y") * RotationSpeed.y * Time.deltaTime; + _angleY = Mathf.Clamp(_angleY, MinVerticalAngleLimit, MaxVerticalAngleLimit); + + _desiredRotation = Quaternion.Euler(new Vector3(_angleY, _angleX, 0)); + _currentRotation = transform.rotation; + _rotation = Quaternion.Lerp(_currentRotation, _desiredRotation, Time.deltaTime * ZoomDampening); + transform.rotation = _rotation; + } + } + + /// + /// Detects steps + /// + protected virtual void StepDetection() + { + if (Mathf.Abs(_stepBuffer) > StepThreshold) + { + StepFeedback?.Invoke(); + _stepBuffer = 0f; + } + } + + /// + /// Zooms + /// + protected virtual void Zoom() + { + if (!ZoomEnabled) + { + return; + } + + if (Mode == Modes.Touch && (Input.touchCount > 0)) + { + if (Input.touchCount == 2) + { + Touch firstTouch = Input.GetTouch(0); + Touch secondTouch = Input.GetTouch(1); + + Vector2 firstTouchPreviousPosition = firstTouch.position - firstTouch.deltaPosition; + Vector2 secondTouchPreviousPosition = secondTouch.position - secondTouch.deltaPosition; + + float previousTouchDeltaMagnitude = (firstTouchPreviousPosition - secondTouchPreviousPosition).magnitude; + float thisTouchDeltaMagnitude = (firstTouch.position - secondTouch.position).magnitude; + float deltaMagnitudeDifference = previousTouchDeltaMagnitude - thisTouchDeltaMagnitude; + + _desiredDistance += deltaMagnitudeDifference * Time.deltaTime * ZoomSpeed * Mathf.Abs(_desiredDistance) * 0.001f; + _desiredDistance = Mathf.Clamp(_desiredDistance, MinimumZoomDistance, MaximumZoomDistance); + _currentDistance = Mathf.Lerp(_currentDistance, _desiredDistance, Time.deltaTime * ZoomDampening); + } + } + else if (Mode == Modes.Mouse) + { + _scrollWheelAmount += - Input.GetAxis("Mouse ScrollWheel") * MouseWheelSpeed; + _scrollWheelAmount = Mathf.Clamp(_scrollWheelAmount, -MaxMouseWheelClamp, MaxMouseWheelClamp); + + float deltaMagnitudeDifference = _scrollWheelAmount; + + _desiredDistance += deltaMagnitudeDifference * Time.deltaTime * ZoomSpeed * Mathf.Abs(_desiredDistance) * 0.001f; + _desiredDistance = Mathf.Clamp(_desiredDistance, MinimumZoomDistance, MaximumZoomDistance); + _currentDistance = Mathf.Lerp(_currentDistance, _desiredDistance, Time.deltaTime * ZoomDampening); + + } + } + + /// + /// Moves the transform + /// + protected virtual void ApplyMovement() + { + _position = Target.position - (_rotation * Vector3.forward * _currentDistance + TargetOffset); + transform.position = _position; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMOrbitalCamera.cs.meta b/Assets/Feel/MMTools/Accessories/MMCamera/MMOrbitalCamera.cs.meta new file mode 100644 index 0000000..2b757c0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMOrbitalCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e8f18290b3c9ff499c82d3ff939754c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMViewportEdgeTeleporter.cs b/Assets/Feel/MMTools/Accessories/MMCamera/MMViewportEdgeTeleporter.cs new file mode 100644 index 0000000..63880ba --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMViewportEdgeTeleporter.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to an object and it will automatically teleport to the other end of the screen when reaching the screen's edges + /// + public class MMViewportEdgeTeleporter : MonoBehaviour + { + [Header("Camera")] + /// whether or not to grab the Camera.main and store it on init + public bool AutoGrabMainCamera; + /// the camera used to compute viewport positions + public Camera MainCamera; + + [Header("Viewport Bounds")] + /// the origin values of the viewport + [MMVector("X","Y")] + public Vector2 ViewportOrigin = new Vector2(0f, 0f); + /// the dimensions of the viewport + [MMVector("W","H")] + public Vector2 ViewportDimensions = new Vector2(1f, 1f); + + [Header("Teleport Bounds")] + /// the origin of the teleport destination zone + [MMVector("X","Y")] + public Vector2 TeleportOrigin = new Vector2(0f, 0f); + /// the dimensions of the teleport destination zone + [MMVector("W","H")] + public Vector2 TeleportDimensions = new Vector2(1f, 1f); + + [Header("Events")] + /// an event to trigger on teleport + public UnityEvent OnTeleport; + + protected Vector3 _viewportPosition; + protected Vector3 _newViewportPosition; + + /// + /// On Awake we initialize our teleporter + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// Stores the main camera if needed + /// + protected virtual void Initialization() + { + if (AutoGrabMainCamera) + { + MainCamera = Camera.main; + } + } + + /// + /// Sets a new camera + /// + /// + public virtual void SetCamera(Camera newCamera) + { + MainCamera = newCamera; + } + + /// + /// On Update we check our position relative to the edges + /// + protected virtual void Update() + { + DetectEdges(); + } + + /// + /// Detects edges, compares with our object's position, and moves it if needed + /// + protected virtual void DetectEdges() + { + _viewportPosition = MainCamera.WorldToViewportPoint(this.transform.position); + + bool teleport = false; + + if (_viewportPosition.x < ViewportOrigin.x) + { + _newViewportPosition.x = TeleportDimensions.x; + _newViewportPosition.y = _viewportPosition.y; + _newViewportPosition.z = _viewportPosition.z; + teleport = true; + } + else if (_viewportPosition.x >= ViewportDimensions.x) + { + _newViewportPosition.x = TeleportOrigin.x; + _newViewportPosition.y = _viewportPosition.y; + _newViewportPosition.z = _viewportPosition.z; + teleport = true; + } + if (_viewportPosition.y < ViewportOrigin.y) + { + _newViewportPosition.x = _viewportPosition.x; + _newViewportPosition.y = TeleportDimensions.y; + _newViewportPosition.z = _viewportPosition.z; + teleport = true; + } + else if (_viewportPosition.y >= ViewportDimensions.y) + { + _newViewportPosition.x = _viewportPosition.x; + _newViewportPosition.y = TeleportOrigin.y; + _newViewportPosition.z = _viewportPosition.z; + teleport = true; + } + + if (teleport) + { + OnTeleport?.Invoke(); + this.transform.position = MainCamera.ViewportToWorldPoint(_newViewportPosition); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCamera/MMViewportEdgeTeleporter.cs.meta b/Assets/Feel/MMTools/Accessories/MMCamera/MMViewportEdgeTeleporter.cs.meta new file mode 100644 index 0000000..938d078 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCamera/MMViewportEdgeTeleporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a1fc9c7a40e1f2245a0a7c067509a2ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine.meta b/Assets/Feel/MMTools/Accessories/MMCinemachine.meta new file mode 100644 index 0000000..dbfd04f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 105f42336117c9e4b98259b299d486e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone.meta b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone.meta new file mode 100644 index 0000000..c6a7129 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c20c27063571a2642918daa9b7b087cf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone.cs b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone.cs new file mode 100644 index 0000000..24484b0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone.cs @@ -0,0 +1,306 @@ +using System.Collections; +using System.Collections.Generic; +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// An abstract class that lets you define a zone that, when entered, enables a virtual camera, and takes care + /// of all the boilerplate setup + /// + [AddComponentMenu("")] + [ExecuteAlways] + public abstract class MMCinemachineZone : MonoBehaviour + { + public enum Modes { Enable, Priority } + + [Header("Virtual Camera")] + /// whether to enable/disable virtual cameras, or to play on their priority for transitions + [Tooltip("whether to enable/disable virtual cameras, or to play on their priority for transitions")] + public Modes Mode = Modes.Priority; + /// whether or not the camera in this zone should start active + [Tooltip("whether or not the camera in this zone should start active")] + public bool CameraStartsActive = false; + #if MM_CINEMACHINE + /// the virtual camera associated to this zone (will try to grab one in children if none is set) + [Tooltip("the virtual camera associated to this zone (will try to grab one in children if none is set)")] + public CinemachineVirtualCamera VirtualCamera; + #elif MM_CINEMACHINE3 + /// the virtual camera associated to this zone (will try to grab one in children if none is set) + [Tooltip("the virtual camera associated to this zone (will try to grab one in children if none is set)")] + public CinemachineCamera VirtualCamera; + #endif + + /// when in priority mode, the priority this camera should have when the zone is active + [Tooltip("when in priority mode, the priority this camera should have when the zone is active")] + [MMEnumCondition("Mode", (int)Modes.Priority)] + public int EnabledPriority = 10; + /// when in priority mode, the priority this camera should have when the zone is inactive + [Tooltip("when in priority mode, the priority this camera should have when the zone is inactive")] + [MMEnumCondition("Mode", (int)Modes.Priority)] + public int DisabledPriority = 0; + + [Header("Collisions")] + /// a layermask containing all the layers that should activate this zone + [Tooltip("a layermask containing all the layers that should activate this zone")] + public LayerMask TriggerMask; + + [Header("Confiner Setup")] + /// whether or not the zone should auto setup its camera's confiner on start - alternative is to manually click the ManualSetupConfiner, or do your own setup + [Tooltip("whether or not the zone should auto setup its camera's confiner on start - alternative is to manually click the ManualSetupConfiner, or do your own setup")] + public bool SetupConfinerOnStart = false; + + /// a debug button used to setup the confiner on click + [MMInspectorButton("ManualSetupConfiner")] + public bool GenerateConfinerSetup; + + [Header("State")] + /// whether this room is the current room or not + [Tooltip("whether this room is the current room or not")] + [MMReadOnly] + public bool CurrentRoom = false; + /// whether this room has already been visited or not + [Tooltip("whether this room has already been visited or not")] + public bool RoomVisited = false; + + [Header("Events")] + /// a UnityEvent to trigger when entering the zone for the first time + [Tooltip("a UnityEvent to trigger when entering the zone for the first time")] + public UnityEvent OnEnterZoneForTheFirstTimeEvent; + /// a UnityEvent to trigger when entering the zone + [Tooltip("a UnityEvent to trigger when entering the zone")] + public UnityEvent OnEnterZoneEvent; + /// a UnityEvent to trigger when exiting the zone + [Tooltip("a UnityEvent to trigger when exiting the zone")] + public UnityEvent OnExitZoneEvent; + + [Header("Activation")] + + /// a list of gameobjects to enable when entering the zone, and disable when exiting it + [Tooltip("a list of gameobjects to enable when entering the zone, and disable when exiting it")] + public List ActivationList; + + [Header("Debug")] + /// whether or not to draw shape gizmos to help visualize the zone's bounds + [Tooltip("whether or not to draw shape gizmos to help visualize the zone's bounds")] + public bool DrawGizmos = true; + /// the color of the gizmos to draw in edit mode + [Tooltip("the color of the gizmos to draw in edit mode")] + public Color GizmosColor; + + protected GameObject _confinerGameObject; + protected Vector3 _gizmoSize; + + /// + /// On Awake we proceed to init if app is playing + /// + protected virtual void Awake() + { + AlwaysInitialization(); + if (!Application.isPlaying) + { + return; + } + Initialization(); + } + + /// + /// On Awake we initialize our collider + /// + protected virtual void AlwaysInitialization() + { + InitializeCollider(); + } + + /// + /// On init we grab our virtual camera + /// + protected virtual void Initialization() + { + #if MM_CINEMACHINE + if (VirtualCamera == null) + { + VirtualCamera = GetComponentInChildren(); + } + #elif MM_CINEMACHINE3 + if (VirtualCamera == null) + { + VirtualCamera = GetComponentInChildren(); + } + #endif + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (VirtualCamera == null) + { + Debug.LogWarning("[MMCinemachineZone2D] " + this.name + " : no virtual camera is attached to this zone. Set one in its inspector."); + } + #endif + + if (SetupConfinerOnStart) + { + SetupConfinerGameObject(); + } + + foreach (GameObject go in ActivationList) + { + go.SetActive(false); + } + } + + /// + /// On Start we setup the confiner + /// + protected virtual void Start() + { + if (!Application.isPlaying) + { + return; + } + + if (SetupConfinerOnStart) + { + SetupConfiner(); + } + + StartCoroutine(EnableCamera(CameraStartsActive, 1)); + } + + /// + /// Describes what happens when initializing the collider + /// + protected abstract void InitializeCollider(); + + /// + /// Describes what happens when setting up the confiner + /// + protected abstract void SetupConfiner(); + + /// + /// A method used to manually create a confiner + /// + protected virtual void ManualSetupConfiner() + { + Initialization(); + SetupConfiner(); + } + + /// + /// Creates an object to host the confiner + /// + protected virtual void SetupConfinerGameObject() + { + // we remove the object if needed + Transform child = this.transform.Find("Confiner"); + if (child != null) + { + DestroyImmediate(child.gameObject); + } + + // we create an empty child object + _confinerGameObject = new GameObject(); + _confinerGameObject.transform.localPosition = Vector3.zero; + _confinerGameObject.transform.SetParent(this.transform); + _confinerGameObject.name = "Confiner"; + } + + /// + /// An extra test you can override to add extra collider conditions + /// + /// + /// + protected virtual bool TestCollidingGameObject(GameObject collider) + { + return true; + } + + /// + /// Enables the camera, either via enabled state or priority + /// + /// + /// + /// + protected virtual IEnumerator EnableCamera(bool state, int frames) + { + #if MM_CINEMACHINE || MM_CINEMACHINE3 + if (VirtualCamera == null) + { + yield break; + } + #endif + + if (frames > 0) + { + yield return MMCoroutine.WaitForFrames(frames); + } + + #if MM_CINEMACHINE + if (Mode == Modes.Enable) + { + VirtualCamera.enabled = state; + } + else if (Mode == Modes.Priority) + { + VirtualCamera.Priority = state ? EnabledPriority : DisabledPriority; + } + #elif MM_CINEMACHINE3 + if (Mode == Modes.Enable) + { + VirtualCamera.enabled = state; + } + else if (Mode == Modes.Priority) + { + PrioritySettings settings = VirtualCamera.Priority; + settings.Value = state ? EnabledPriority : DisabledPriority; + VirtualCamera.Priority = settings; + } + #endif + } + + protected virtual void EnterZone() + { + if (!RoomVisited) + { + OnEnterZoneForTheFirstTimeEvent.Invoke(); + } + + CurrentRoom = true; + RoomVisited = true; + + OnEnterZoneEvent.Invoke(); + StartCoroutine(EnableCamera(true, 0)); + foreach(GameObject go in ActivationList) + { + go.SetActive(true); + } + } + + protected virtual void ExitZone() + { + CurrentRoom = false; + OnExitZoneEvent.Invoke(); + if (this.gameObject.activeInHierarchy) + { + StartCoroutine(EnableCamera(false, 0)); + } + foreach (GameObject go in ActivationList) + { + go.SetActive(false); + } + } + + /// + /// On Reset we initialize our gizmo color + /// + protected virtual void Reset() + { + GizmosColor = MMColors.RandomColor(); + GizmosColor.a = 0.2f; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone.cs.meta b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone.cs.meta new file mode 100644 index 0000000..9ce8ffc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbe74d0e479b10244b0368e807488b5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone2D.cs b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone2D.cs new file mode 100644 index 0000000..5e58e16 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone2D.cs @@ -0,0 +1,179 @@ +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// 2D Implementation of the CinemachineZone abstract class + /// + [RequireComponent(typeof(Collider2D))] + public class MMCinemachineZone2D : MMCinemachineZone + { + protected Collider2D _collider2D; + protected Collider2D _confinerCollider2D; + protected Rigidbody2D _confinerRigidbody2D; + protected CompositeCollider2D _confinerCompositeCollider2D; + protected BoxCollider2D _boxCollider2D; + protected CircleCollider2D _circleCollider2D; + protected PolygonCollider2D _polygonCollider2D; + + #if MM_CINEMACHINE + protected CinemachineConfiner _cinemachineConfiner; + #elif MM_CINEMACHINE3 + protected CinemachineConfiner2D _cinemachineConfiner; + #endif + + /// + /// Gets and sets up the colliders + /// + protected override void InitializeCollider() + { + _collider2D = GetComponent(); + _boxCollider2D = GetComponent(); + _circleCollider2D = GetComponent(); + _polygonCollider2D = GetComponent(); + _collider2D.isTrigger = true; + } + + /// + /// Creates and sets up the camera's confiner + /// + protected override void SetupConfiner() + { + // we add a rigidbody2D to it and set it up + _confinerRigidbody2D = _confinerGameObject.AddComponent(); + _confinerRigidbody2D.bodyType = RigidbodyType2D.Static; + _confinerRigidbody2D.simulated = false; + _confinerRigidbody2D.useAutoMass = true; + _confinerRigidbody2D.bodyType = RigidbodyType2D.Dynamic; + + // we copy the collider and set it up + + CopyCollider(); + _confinerGameObject.transform.localPosition = Vector3.zero; + + // we reset these settings, set differently initially to avoid a weird Unity warning + _confinerRigidbody2D.bodyType = RigidbodyType2D.Static; + _confinerRigidbody2D.useAutoMass = false; + + // we add a composite collider 2D and set it up + _confinerCompositeCollider2D = _confinerGameObject.AddComponent(); + _confinerCompositeCollider2D.geometryType = CompositeCollider2D.GeometryType.Polygons; + + // we set the composite collider as the virtual camera's confiner + #if MM_CINEMACHINE + _cinemachineConfiner = VirtualCamera.gameObject.MMGetComponentAroundOrAdd(); + _cinemachineConfiner.m_ConfineMode = CinemachineConfiner.Mode.Confine2D; + _cinemachineConfiner.m_ConfineScreenEdges = true; + _cinemachineConfiner.m_BoundingShape2D = _confinerCompositeCollider2D; + #elif MM_CINEMACHINE3 + _cinemachineConfiner = VirtualCamera.gameObject.MMGetComponentAroundOrAdd(); + _cinemachineConfiner.BoundingShape2D = _confinerCompositeCollider2D; + _cinemachineConfiner.InvalidateBoundingShapeCache(); + _cinemachineConfiner.InvalidateLensCache(); + #endif + } + + /// + /// Copies the initial collider to the composite + /// + protected virtual void CopyCollider() + { + if (_boxCollider2D != null) + { + BoxCollider2D boxCollider2D = _confinerGameObject.AddComponent(); + boxCollider2D.size = _boxCollider2D.size; + boxCollider2D.offset = _boxCollider2D.offset; + boxCollider2D.usedByComposite = true; + boxCollider2D.isTrigger = true; + } + + if (_circleCollider2D != null) + { + CircleCollider2D circleCollider2D = _confinerGameObject.AddComponent(); + circleCollider2D.isTrigger = true; + circleCollider2D.usedByComposite = true; + circleCollider2D.offset = _circleCollider2D.offset; + circleCollider2D.radius = _circleCollider2D.radius; + } + + if (_polygonCollider2D != null) + { + PolygonCollider2D polygonCollider2D = _confinerGameObject.AddComponent(); + polygonCollider2D.isTrigger = true; + polygonCollider2D.usedByComposite = true; + polygonCollider2D.offset = _polygonCollider2D.offset; + polygonCollider2D.points = _polygonCollider2D.points; + } + } + + /// + /// On enter, enables the camera and triggers the enter event + /// + /// + protected virtual void OnTriggerEnter2D(Collider2D collider) + { + if (!TestCollidingGameObject(collider.gameObject)) + { + return; + } + if (TriggerMask.MMContains (collider.gameObject)) + { + EnterZone(); + } + } + + /// + /// On exit, disables the camera and invokes the exit event + /// + /// + protected virtual void OnTriggerExit2D(Collider2D collider) + { + if (!TestCollidingGameObject(collider.gameObject)) + { + return; + } + if (TriggerMask.MMContains (collider.gameObject)) + { + ExitZone(); + } + } + + #if UNITY_EDITOR + /// + /// Draws gizmos to show the shape of the zone + /// + protected virtual void OnDrawGizmos() + { + if (!DrawGizmos) + { + return; + } + + Gizmos.color = GizmosColor; + + if ((_boxCollider2D != null) && _boxCollider2D.enabled) + { + _gizmoSize.x = _boxCollider2D.bounds.size.x ; + _gizmoSize.y = _boxCollider2D.bounds.size.y ; + _gizmoSize.z = 1f; + Gizmos.DrawCube(_boxCollider2D.bounds.center, _gizmoSize); + } + if (_circleCollider2D != null && _circleCollider2D.enabled) + { + Gizmos.DrawSphere((Vector2)this.transform.position + _circleCollider2D.offset, _circleCollider2D.radius); + } + if (_polygonCollider2D != null && _polygonCollider2D.enabled) + { + Mesh mesh = _polygonCollider2D.CreateMesh(true, false); + mesh.RecalculateNormals(); + Gizmos.DrawMesh(mesh, Vector2.zero, this.transform.rotation, this.transform.lossyScale); + } + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone2D.cs.meta b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone2D.cs.meta new file mode 100644 index 0000000..53fffdb --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47cd2899f51fb4842857c11182c8e62a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone3D.cs b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone3D.cs new file mode 100644 index 0000000..df4d84f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone3D.cs @@ -0,0 +1,161 @@ +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// 3D Implementation of the CinemachineZone abstract class + /// + [RequireComponent(typeof(Collider))] + public class MMCinemachineZone3D : MMCinemachineZone + { + protected Collider _collider; + protected Collider _confinerCollider; + protected Rigidbody _confinerRigidbody; + protected BoxCollider _boxCollider; + protected SphereCollider _sphereCollider; + #if MM_CINEMACHINE + protected CinemachineConfiner _cinemachineConfiner; + #elif MM_CINEMACHINE3 + protected CinemachineConfiner3D _cinemachineConfiner; + #endif + + /// + /// Gets and sets up the colliders + /// + protected override void InitializeCollider() + { + _collider = GetComponent(); + _boxCollider = GetComponent(); + _sphereCollider = GetComponent(); + _collider.isTrigger = true; + } + + /// + /// Creates and sets up the camera's confiner + /// + protected override void SetupConfiner() + { + // we add a rigidbody to it and set it up + _confinerRigidbody = _confinerGameObject.AddComponent(); + _confinerRigidbody.useGravity = false; + _confinerRigidbody.gameObject.isStatic = true; + _confinerRigidbody.isKinematic = true; + + // we copy the collider and set it up + + CopyCollider(); + _confinerGameObject.transform.localPosition = Vector3.zero; + + + // we set the composite collider as the virtual camera's confiner + + #if MM_CINEMACHINE + _cinemachineConfiner = VirtualCamera.gameObject.MMGetComponentAroundOrAdd(); + _cinemachineConfiner.m_ConfineMode = CinemachineConfiner.Mode.Confine3D; + _cinemachineConfiner.m_ConfineScreenEdges = true; + if (_boxCollider != null) + { + _cinemachineConfiner.m_BoundingVolume = _boxCollider; + } + if (_sphereCollider != null) + { + _cinemachineConfiner.m_BoundingVolume = _sphereCollider; + } + #elif MM_CINEMACHINE3 + _cinemachineConfiner = VirtualCamera.gameObject.MMGetComponentAroundOrAdd(); + if (_boxCollider != null) + { + _cinemachineConfiner.BoundingVolume = _boxCollider; + } + if (_sphereCollider != null) + { + _cinemachineConfiner.BoundingVolume = _sphereCollider; + } + #endif + } + + /// + /// Copies the initial collider to the composite + /// + protected virtual void CopyCollider() + { + if (_boxCollider != null) + { + BoxCollider boxCollider = _confinerGameObject.AddComponent(); + boxCollider.size = _boxCollider.size; + boxCollider.center = _boxCollider.center; + boxCollider.isTrigger = true; + } + + if (_sphereCollider != null) + { + SphereCollider sphereCollider = _confinerGameObject.AddComponent(); + sphereCollider.isTrigger = true; + sphereCollider.center = _sphereCollider.center; + sphereCollider.radius = _sphereCollider.radius; + } + } + + /// + /// On enter, enables the camera and triggers the enter event + /// + /// + protected virtual void OnTriggerEnter(Collider collider) + { + if (!TestCollidingGameObject(collider.gameObject)) + { + return; + } + if (TriggerMask.MMContains (collider.gameObject)) + { + EnterZone(); + } + } + + /// + /// On exit, disables the camera and invokes the exit event + /// + /// + protected virtual void OnTriggerExit(Collider collider) + { + if (!TestCollidingGameObject(collider.gameObject)) + { + return; + } + if (TriggerMask.MMContains (collider.gameObject)) + { + ExitZone(); + } + } + + #if UNITY_EDITOR + /// + /// Draws gizmos to show the shape of the zone + /// + protected virtual void OnDrawGizmos() + { + if (!DrawGizmos) + { + return; + } + + Gizmos.color = GizmosColor; + + if ((_boxCollider != null) && _boxCollider.enabled) + { + _gizmoSize = _boxCollider.bounds.size ; + Gizmos.DrawCube(_boxCollider.bounds.center, _gizmoSize); + } + if (_sphereCollider != null && _sphereCollider.enabled) + { + Gizmos.DrawSphere(this.transform.position + _sphereCollider.center, _sphereCollider.radius); + } + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone3D.cs.meta b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone3D.cs.meta new file mode 100644 index 0000000..7fac897 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMCinemachineZone/MMCinemachineZone3D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49f0c9a373a7bee44ba595f666d21fc4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax.meta b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax.meta new file mode 100644 index 0000000..9040292 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dfa4f578826ffdb4eaa08a7ec896f075 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax/MMGyroParallax.cs b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax/MMGyroParallax.cs new file mode 100644 index 0000000..9071087 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax/MMGyroParallax.cs @@ -0,0 +1,156 @@ +#if MM_CINEMACHINE +using Cinemachine; +#elif MM_CINEMACHINE3 +using Unity.Cinemachine; +#endif +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class used to store gyro properties per camera + /// + [Serializable] + [AddComponentMenu("More Mountains/Tools/Cinemachine/MMGyroCam")] + public class MMGyroCam + { + #if MM_CINEMACHINE + /// the bound cinemachine camera + public CinemachineVirtualCamera Cam; + #elif MM_CINEMACHINE3 + /// the bound cinemachine camera + public CinemachineCamera Cam; + #endif + /// the transform this camera should look at + public Transform LookAt; + /// the transform this camera should rotate around + public Transform RotationCenter; + /// the minimum rotation to apply to this camera (in degrees) + public Vector2 MinRotation = new Vector2(-2f, -2f); + /// the maximum rotation to apply to this camera (in degrees) + public Vector2 MaxRotation = new Vector2(2f, 2f); + /// a transform to follow if the camera is animated + public Transform AnimatedPosition; + + /// the camera's initial angles + [MMReadOnly] + public Vector3 InitialAngles; + /// the camera's initial position + [MMReadOnly] + public Vector3 InitialPosition; + } + + /// + /// Add this class to a camera rig (an empty object), bind some Cinemachine virtual cameras to it, and they'll move around the specified object as your gyro powered device moves + /// + public class MMGyroParallax : MMGyroscope + { + [Header("Cameras")] + /// the list of cameras to move as the gyro moves + public List Cams; + + protected Vector3 _newAngles; + + #if MM_CINEMACHINE || MM_CINEMACHINE3 + + /// + /// On start we initialize our rig + /// + protected override void Start() + { + base.Start(); + Initialization(); + } + + /// + /// Grabs the cameras and stores their position + /// + public virtual void Initialization() + { + foreach (MMGyroCam cam in Cams) + { + cam.InitialAngles = cam.Cam.transform.localEulerAngles; + cam.InitialPosition = cam.Cam.transform.position; + } + } + + /// + /// On Update we move our cameras + /// + protected override void Update() + { + base.Update(); + MoveCameras(); + } + + /// + /// Moves cameras around based on gyro input + /// + protected virtual void MoveCameras() + { + foreach (MMGyroCam cam in Cams) + { + float newX = 0f; + float newY = 0f; + + var gyroGravity = LerpedCalibratedGyroscopeGravity; + if (gyroGravity.x > 0) + { + newX = MMMaths.Remap(LerpedCalibratedGyroscopeGravity.x, 0.5f, 0, cam.MinRotation.x, 0); + } + if (gyroGravity.x < 0) + { + newX = MMMaths.Remap(LerpedCalibratedGyroscopeGravity.x, 0, -.5f, 0, cam.MaxRotation.x); + } + if (gyroGravity.y > 0) + { + newY = MMMaths.Remap(LerpedCalibratedGyroscopeGravity.y, 0.5f, 0, cam.MinRotation.y, 0f); + } + if (gyroGravity.y < 0) + { + newY = MMMaths.Remap(LerpedCalibratedGyroscopeGravity.y, 0f, -0.5f, 0f, cam.MaxRotation.y); + } + + var camTransform = cam.Cam.transform; + + if (cam.AnimatedPosition != null) + { + _newAngles = cam.AnimatedPosition.localEulerAngles; + _newAngles.x += newX; + _newAngles.z += newY; + + camTransform.position = cam.AnimatedPosition.position; + camTransform.localEulerAngles = cam.AnimatedPosition.localEulerAngles; + } + else + { + _newAngles = cam.InitialAngles; + _newAngles.x += newX; + _newAngles.z += newY; + + camTransform.position = cam.InitialPosition; + camTransform.localEulerAngles = cam.InitialAngles; + } + + var rotationTransform = cam.RotationCenter.transform; + camTransform.RotateAround(rotationTransform.position, rotationTransform.up, newX); + camTransform.RotateAround(rotationTransform.position, rotationTransform.right, newY); + + if (cam.Cam.LookAt == null) // cinemachine is not tracking a target + { + if (cam.LookAt != null) // local lookout target + { + camTransform.LookAt(cam.LookAt); + } + else + { + camTransform.LookAt(cam.RotationCenter); + } + } + } + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax/MMGyroParallax.cs.meta b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax/MMGyroParallax.cs.meta new file mode 100644 index 0000000..573f097 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCinemachine/MMGyroParallax/MMGyroParallax.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 847621151d634804f820b7c88b89dacc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCurves.meta b/Assets/Feel/MMTools/Accessories/MMCurves.meta new file mode 100644 index 0000000..d364225 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCurves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f30d090a3ff0f644aba439b60c5af29b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCurves/Plotter.meta b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter.meta new file mode 100644 index 0000000..f9fed7d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfde5e1ce3c4a3042afdfeb3c9d1c52f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotter.cs b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotter.cs new file mode 100644 index 0000000..bb156c7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotter.cs @@ -0,0 +1,268 @@ +using UnityEngine; +using System.Reflection; +using System.Collections.Generic; +using System.Linq; + +namespace MoreMountains.Tools +{ + public class MMPlotter : MonoBehaviour + { + public MethodInfo TweenMethod; + public int TweenMethodIndex; + + [Header("Graph")] + public float GraphSize = 1f; + [Range(0, 1000)] + public int Resolution = 100; + + [Header("Points")] + public Transform PlotPointPrefab; + public float PointScaleFactor = 1f; + public Material PlotPointMaterial; + [MMReadOnly] + public float DistanceBetweenPoints = 1f; + + [Header("Axis")] + public MMPlotterAxis Axis; + /*public Material AxisMaterial; + public bool ShouldDrawAxis = true; + public Color AxisColor = Color.black; + public Color AxisLabelColor = Color.black; + public float AxisWidth = 1f; + public float AxisCrossOffset; + public Font AxisFont; + public int AxisPixelsPerUnit; + public Vector2 AxisLabelOffset;*/ + + protected Transform[] _points; + protected float _pointScale; + + protected Vector3 _scale; + protected Vector3 _position; + protected Transform _point; + + protected Vector3 _horizontalAxisStart; + protected Vector3 _horizontalAxisEnd; + protected Vector3 _verticalAxisStart; + protected Vector3 _verticalAxisEnd; + + protected float _axisWidth; + protected List _methodList; + protected Vector2 _pointValues = Vector2.zero; + protected object[] _parameter; + protected MMPlotterAxis _axis; + + protected Vector3 _positionPointInitialPosition; + protected Vector3 _positionPointVerticalInitialPosition; + protected Vector3 _rotationPointInitialRotation; + protected Vector3 _scalePointInitialScale; + + public virtual string[] GetMethodsList() + { + FillMethodList(); + List methodNames = new List(); + foreach (MethodInfo method in _methodList) + { + methodNames.Add(method.Name); + } + string[] _typeDisplays = methodNames.ToArray(); + return _typeDisplays; + } + + public virtual float InvokeTween(int index, object[] parameters) + { + return (float)_methodList[index].Invoke(this, parameters); + } + + public virtual string TweenName(int index) + { + if (_methodList == null) + { + FillMethodList(); + } + return _methodList[index].Name; + } + + protected virtual void FillMethodList() + { + BindingFlags flags = BindingFlags.Public | BindingFlags.Static; + MethodInfo[] methods = typeof(MMTweenDefinitions).GetMethods(flags); + _methodList = methods.OrderBy(item => item.Name).ToList(); + } + + protected virtual void OnEnable() + { + _parameter = new object[1]; + } + + protected virtual void Start() + { + FillMethodList(); + DrawGraph(); + } + + protected virtual void Initialization() + { + _points = new Transform[Resolution]; + DistanceBetweenPoints = GraphSize / Resolution; + _pointScale = DistanceBetweenPoints * PointScaleFactor; + _scale = _pointScale * Vector3.one; + _position = Vector3.zero; + } + + public virtual void DrawGraph() + { + Cleanup(); + Initialization(); + DrawAxis(); + DrawPoints(); + } + + protected virtual void DrawAxis() + { + _axis = Instantiate(Axis); + + _axis.SetLabel(TweenName(TweenMethodIndex).Replace("_"," ")); + _axis.transform.SetParent(this.transform); + _axis.transform.localPosition = Vector3.zero; + + _positionPointInitialPosition = _axis.PositionPoint.transform.localPosition; + _positionPointVerticalInitialPosition = _axis.PositionPointVertical.transform.localPosition; + _rotationPointInitialRotation = _axis.RotationPoint.transform.localEulerAngles; + _scalePointInitialScale = _axis.ScalePoint.transform.localScale; + } + + protected virtual void DrawPoints() + { + for (int i = 0; i < _points.Length; i++) + { + _point = Instantiate(PlotPointPrefab); + _point.name = this.name + "Point" + i; + + _pointValues.x = i * (1f / Resolution); + + _parameter[0] = _pointValues.x; + _pointValues.y = InvokeTween(TweenMethodIndex, _parameter); + + _position.x = i * DistanceBetweenPoints; + _position.y = _pointValues.y * GraphSize; + + _point.localPosition = _position; + _point.localScale = _scale; + + _point.gameObject.MMGetComponentNoAlloc().material = PlotPointMaterial; + + _point.SetParent(transform, false); + _points[i] = _point; + } + } + + public virtual void SetMaterial(Material newMaterial) + { + PlotPointMaterial = newMaterial; + } + + /*protected virtual void DrawLine(Vector3 start, Vector3 end, Color color, float width, Transform parent) + { + GameObject myLine = new GameObject(this.name+"LineRenderer"); + myLine.transform.localPosition = start; + myLine.AddComponent(); + LineRenderer lr = myLine.GetComponent(); + lr.material = AxisMaterial; + lr.startColor = color; + lr.endColor = color; + lr.startWidth = width; + lr.endWidth = width; + lr.SetPosition(0, start); + lr.SetPosition(1, end); + myLine.transform.SetParent(parent); + }*/ + + protected virtual void Cleanup() + { + this.transform.MMDestroyAllChildren(); + } + + [Header("Movement")] + public float MovementPauseDuration = 0.5f; + protected float _currentMovement = 0f; + protected float _lastMovementEndedAt = 0f; + protected Vector3 _curvePointNewMovement = Vector3.zero; + protected string _timeString; + protected const float _plotterCurvePointScale = 0.1f; + protected Vector3 _newScale; + protected float _newValue; + protected float _newScaleUnit; + protected Vector3 Vector3Zero = Vector3.zero; + + protected virtual void Update() + { + _curvePointNewMovement = Vector3Zero; + _curvePointNewMovement.x = _currentMovement; + _parameter[0] = _currentMovement; + _newValue = InvokeTween(TweenMethodIndex, _parameter); + + _curvePointNewMovement.y = _newValue; + _curvePointNewMovement *= GraphSize; + _axis.PlotterCurvePoint.transform.localPosition = _curvePointNewMovement; + + _curvePointNewMovement = _positionPointInitialPosition; + _curvePointNewMovement.x = _newValue; + _axis.PositionPoint.transform.localPosition = _curvePointNewMovement; + + _curvePointNewMovement = _positionPointVerticalInitialPosition; + _curvePointNewMovement.y = _newValue; + _axis.PositionPointVertical.transform.localPosition = _curvePointNewMovement; + + _curvePointNewMovement = _rotationPointInitialRotation; + _curvePointNewMovement.z = _newValue * 360f; + _axis.RotationPoint.transform.localEulerAngles = _curvePointNewMovement; + + _curvePointNewMovement = _scalePointInitialScale; + _curvePointNewMovement *= _newValue; + _axis.ScalePoint.transform.localScale = _curvePointNewMovement; + + if (Time.unscaledTime - _lastMovementEndedAt < MovementPauseDuration) + { + if (Time.unscaledTime - _lastMovementEndedAt < MovementPauseDuration / 2f) + { + _currentMovement = 1f; + _newScaleUnit = MMTween.Tween(Time.unscaledTime - _lastMovementEndedAt, 0f, (MovementPauseDuration / 2f), 1f, 0f, MMTween.MMTweenCurve.EaseInCubic); + _newScale = Vector3.one * _newScaleUnit; + + _axis.PlotterCurvePoint.localScale = _newScale * _plotterCurvePointScale; + _axis.PositionPoint.localScale = _newScale; + _axis.PositionPointVertical.localScale = _newScale; + _axis.RotationPoint.localScale = _newScale; + _axis.ScalePoint.localScale = _newScale; + } + else + { + _currentMovement = 0f; + _newScaleUnit = MMTween.Tween(Time.unscaledTime - _lastMovementEndedAt, (MovementPauseDuration / 2f), MovementPauseDuration, 0f, 1f, MMTween.MMTweenCurve.EaseOutCubic); + _newScale = Vector3.one * _newScaleUnit; + + _axis.PlotterCurvePoint.localScale = _newScale * _plotterCurvePointScale; + _axis.PositionPointVertical.localScale = _newScale; + _axis.PositionPoint.localScale = _newScale; + _axis.RotationPoint.localScale = _newScale; + _axis.ScalePoint.localScale = Vector3.zero; + } + } + else + { + _axis.PlotterCurvePoint.localScale = Vector3.one * _plotterCurvePointScale; + _currentMovement += Time.unscaledDeltaTime; + } + + if (_currentMovement > 1f) + { + _lastMovementEndedAt = Time.unscaledTime; + _currentMovement = 1f; + } + #if MM_UI + _axis.TimeLabel.text = _timeString; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotter.cs.meta b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotter.cs.meta new file mode 100644 index 0000000..3827e5b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotter.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: d9b44209469b244478c826d3b44489d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - PlotPointPrefab: {instanceID: 0} + - AxisMaterial: {fileID: 2100000, guid: 5a92d08a53a696f41b20d84ea487ab16, type: 2} + - AxisFont: {fileID: 12800000, guid: b44e0905eaa40914f9c28834f2843f19, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterAxis.cs b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterAxis.cs new file mode 100644 index 0000000..2accda9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterAxis.cs @@ -0,0 +1,33 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +#endif +using System.Collections; +using System; +using System.Reflection; +using System.Collections.Generic; +using System.Linq; + +namespace MoreMountains.Tools +{ + public class MMPlotterAxis : MonoBehaviour + { + #if MM_UI + public Text Label; + public Text TimeLabel; + #endif + public Transform PlotterCurvePoint; + + public Transform PositionPoint; + public Transform PositionPointVertical; + public Transform RotationPoint; + public Transform ScalePoint; + + public virtual void SetLabel(string newLabel) + { + #if MM_UI + Label.text = newLabel; + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterAxis.cs.meta b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterAxis.cs.meta new file mode 100644 index 0000000..32f0ed1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterAxis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1ac9205114b9d44a8eed663e283ea09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterGenerator.cs b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterGenerator.cs new file mode 100644 index 0000000..acb59b3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterGenerator.cs @@ -0,0 +1,103 @@ +using UnityEngine; +using System.Reflection; + +namespace MoreMountains.Tools +{ + public class MMPlotterGenerator : MonoBehaviour + { + public MMPlotter PlotterPrefab; + + public Vector2 Spacing; + public float VerticalOddSpacing; + public int RowLength; + + [Header("Materials")] + + public Material LinearMaterial; + public Material QuadraticMaterial; + public Material CubicMaterial; + public Material QuarticMaterial; + public Material QuinticMaterial; + public Material SinusoidalMaterial; + public Material BounceMaterial; + public Material OverheadMaterial; + public Material ExponentialMaterial; + public Material ElasticMaterial; + public Material CircularMaterial; + + protected Vector2 _position; + + [MMInspectorButton("GeneratePlotters")] + public bool GeneratePlottersButton; + + protected virtual void Awake() + { + Time.timeScale = 0f; + + GeneratePlotters(); + } + + protected virtual void GeneratePlotters() + { + this.transform.MMDestroyAllChildren(); + + BindingFlags flags = BindingFlags.Public | BindingFlags.Static; + MethodInfo[] methods = typeof(MMTweenDefinitions).GetMethods(flags); + + int row = 0; + int column = 0; + float yCoordinate = 0; + + for (int i=0; i < methods.Length; i++) + { + _position.x = column * Spacing.x; + + + _position.y = yCoordinate; + + MMPlotter plotter = Instantiate(PlotterPrefab); + plotter.transform.SetParent(this.transform); + plotter.transform.localPosition = _position; + plotter.TweenMethodIndex = i; + string tweenName = plotter.TweenName(plotter.TweenMethodIndex); + plotter.gameObject.name = tweenName; + + Material newMaterial = LinearMaterial; + if (tweenName.Contains("Linear")) { newMaterial = LinearMaterial; } + if (tweenName.Contains("Quadratic")) { newMaterial = QuadraticMaterial; } + if (tweenName.Contains("Cubic")) { newMaterial = CubicMaterial; } + if (tweenName.Contains("Quartic")) { newMaterial = QuarticMaterial; } + if (tweenName.Contains("Quintic")) { newMaterial = QuinticMaterial; } + if (tweenName.Contains("Sinusoidal")) { newMaterial = SinusoidalMaterial; } + if (tweenName.Contains("Bounce")) { newMaterial = BounceMaterial; } + if (tweenName.Contains("Overhead")) { newMaterial = OverheadMaterial; } + if (tweenName.Contains("Exponential")) { newMaterial = ExponentialMaterial; } + if (tweenName.Contains("Elastic")) { newMaterial = ElasticMaterial; } + if (tweenName.Contains("Circular")) { newMaterial = CircularMaterial; } + + plotter.SetMaterial(newMaterial); + plotter.GetMethodsList(); + plotter.DrawGraph(); + + if (column >= RowLength - 1) + { + column = 0; + row++; + if (row % 2 == 0) + { + yCoordinate += Spacing.y + VerticalOddSpacing; + } + else + { + yCoordinate += Spacing.y; + } + } + else + { + column++; + } + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterGenerator.cs.meta b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterGenerator.cs.meta new file mode 100644 index 0000000..5590a72 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMCurves/Plotter/MMPlotterGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d3b0924fd73b1a4f8dffd6776c61c55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu.meta new file mode 100644 index 0000000..2ffcf1f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b5572dcc699d3848985cae613accb71 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs.meta new file mode 100644 index 0000000..b3fc00c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56888cf1558ddfc45bfb462b0723fb65 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenu.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenu.prefab new file mode 100644 index 0000000..a37b4bd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenu.prefab @@ -0,0 +1,1277 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1539328850824494509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4291415237322959649} + - component: {fileID: 1702857050221043259} + - component: {fileID: 5165199505794862626} + m_Layer: 5 + m_Name: MMLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4291415237322959649 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539328850824494509} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8190412797783412089} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -60, y: 60} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 1, y: 0} +--- !u!222 &1702857050221043259 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539328850824494509} + m_CullTransparentMesh: 0 +--- !u!114 &5165199505794862626 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539328850824494509} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a5240da7fff0bf34da21c7edff42b1d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1958331962189299253 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8677376433526767680} + - component: {fileID: 5642080289093343819} + - component: {fileID: 6381313150946104913} + - component: {fileID: 9025660811552688502} + m_Layer: 5 + m_Name: TopBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8677376433526767680 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958331962189299253} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5795037546512799215} + - {fileID: 2121952919515877709} + - {fileID: 2871046300973356198} + m_Father: {fileID: 8190412797783412089} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &5642080289093343819 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958331962189299253} + m_CullTransparentMesh: 0 +--- !u!114 &6381313150946104913 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958331962189299253} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &9025660811552688502 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1958331962189299253} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6caabe887d9340e4cae45cc9f41897dc, type: 3} + m_Name: + m_EditorClassIdentifier: + Tabs: [] + TabsContents: [] +--- !u!1 &2121952919515877706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2121952919515877709} + - component: {fileID: 2121952919515877697} + - component: {fileID: 2121952919515877710} + - component: {fileID: 2121952919515877708} + - component: {fileID: 8771194486385602842} + - component: {fileID: 6810109772623686900} + m_Layer: 5 + m_Name: CloseButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2121952919515877709 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2121952919515877706} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 479665135125100280} + m_Father: {fileID: 8677376433526767680} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 875, y: 0} + m_SizeDelta: {x: -1750, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &2121952919515877697 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2121952919515877706} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &2121952919515877710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2121952919515877706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2121952919515877708 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2121952919515877706} + m_CullTransparentMesh: 0 +--- !u!114 &8771194486385602842 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2121952919515877706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 1, g: 0.76862746, b: 0, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2121952919515877710} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2121952920444363556} + m_TargetAssemblyTypeName: + m_MethodName: CloseMenu + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 6810109772623686900} + m_TargetAssemblyTypeName: + m_MethodName: PlayFeedbacks + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &6810109772623686900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2121952919515877706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + InitializationMode: 2 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - id: 0 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + ForceStopFeedbacksOnDisable: 1 + PlayCount: 0 + references: + version: 1 + 00000000: + type: {class: MMF_Rotation, ns: MoreMountains.Feedbacks, asm: MoreMountains.Feedbacks} + data: + Active: 1 + UniqueID: -1151750376 + Label: Rotation + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0.25 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + Owner: {fileID: 6810109772623686900} + DebugActive: 0 + AnimateRotationTarget: {fileID: 479665135125100280} + Mode: 1 + RotationSpace: 0 + AnimateRotationDuration: 0.1 + RemapCurveZero: 0 + RemapCurveOne: -90 + AnimateX: 0 + AnimateRotationTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimateRotationTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 1 + AnimateRotationTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + DetermineRotationOnPlay: 0 + ToDestinationSpace: 0 + DestinationAngles: {x: 0, y: 180, z: 0} + ToDestinationTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 10 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateRotationX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ToDestinationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &3124996723949155462 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5364450210634932008} + - component: {fileID: 4472485496547736860} + m_Layer: 5 + m_Name: TabContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5364450210634932008 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3124996723949155462} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8190412797783412089} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &4472485496547736860 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3124996723949155462} + m_CullTransparentMesh: 0 +--- !u!1 &4855656848195294708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2871046300973356198} + - component: {fileID: 7066582980588651076} + - component: {fileID: 3096851098894715447} + - component: {fileID: 5279382870981547313} + m_Layer: 5 + m_Name: TabsBottomLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2871046300973356198 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4855656848195294708} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8677376433526767680} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 2} + m_Pivot: {x: 0, y: 0} +--- !u!225 &7066582980588651076 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4855656848195294708} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3096851098894715447 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4855656848195294708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &5279382870981547313 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4855656848195294708} + m_CullTransparentMesh: 0 +--- !u!1 &5753543347963980626 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 479665135125100280} + - component: {fileID: 3178998390514811419} + - component: {fileID: 3937817146160758094} + m_Layer: 5 + m_Name: CloseModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &479665135125100280 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5753543347963980626} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2121952919515877709} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -16.65} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3178998390514811419 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5753543347963980626} + m_CullTransparentMesh: 0 +--- !u!114 &3937817146160758094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5753543347963980626} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -2741756353435428437, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &7130968222873511250 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5795037546512799215} + - component: {fileID: 4649205821548002161} + m_Layer: 0 + m_Name: TabBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5795037546512799215 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7130968222873511250} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8677376433526767680} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 889.35, y: -15} + m_SizeDelta: {x: 1721.3, y: -30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &4649205821548002161 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7130968222873511250} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 20 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 + m_ReverseArrangement: 0 +--- !u!1 &8190412795749199355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8190412795749199354} + - component: {fileID: 8190412795749199359} + - component: {fileID: 8190412795749199356} + - component: {fileID: 8190412795749199357} + - component: {fileID: 2121952920444363556} + m_Layer: 5 + m_Name: MMDebugMenu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8190412795749199354 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412795749199355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 8190412797783412089} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &8190412795749199359 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412795749199355} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 100 + m_TargetDisplay: 0 +--- !u!114 &8190412795749199356 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412795749199355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &8190412795749199357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412795749199355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 3 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 32 +--- !u!114 &2121952920444363556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412795749199355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65772fc08a0d9314f86205390e1e772d, type: 3} + m_Name: + m_EditorClassIdentifier: + Data: {fileID: 11400000, guid: 244fc583bba6930489841e197a9677db, type: 2} + MenuContainer: {fileID: 8190412797783412088} + Contents: {fileID: 5364450210634932008} + MenuBackground: {fileID: 8190412796205652997} + CloseIcon: {fileID: 3937817146160758094} + TabBar: {fileID: 5795037546512799215} + TabContainer: {fileID: 5364450210634932008} + TabManager: {fileID: 9025660811552688502} + MMLogo: {fileID: 5165199505794862626} + OnOpenEvent: + m_PersistentCalls: + m_Calls: [] + OnCloseEvent: + m_PersistentCalls: + m_Calls: [] + Active: 0 + ToggleButton: 0 +--- !u!1 &8190412796205652995 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8190412796205652994} + - component: {fileID: 8190412796205652996} + - component: {fileID: 8190412796205652997} + m_Layer: 5 + m_Name: SettingsMenuBackground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8190412796205652994 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412796205652995} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8190412797783412089} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8190412796205652996 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412796205652995} + m_CullTransparentMesh: 0 +--- !u!114 &8190412796205652997 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412796205652995} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8190412797783412070 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8190412797783412089} + - component: {fileID: 8190412797783412088} + m_Layer: 5 + m_Name: MenuContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8190412797783412089 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412797783412070} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8190412796205652994} + - {fileID: 4291415237322959649} + - {fileID: 5364450210634932008} + - {fileID: 8677376433526767680} + m_Father: {fileID: 8190412795749199354} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &8190412797783412088 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8190412797783412070} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenu.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenu.prefab.meta new file mode 100644 index 0000000..d2102d8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenu.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: da6a4f914ed52e6488c1fb9d94e8cbb0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButton.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButton.prefab new file mode 100644 index 0000000..0b487d6 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButton.prefab @@ -0,0 +1,295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7110842686833926475 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7110842686833926472} + - component: {fileID: 7110842686833926486} + - component: {fileID: 7110842686833926473} + m_Layer: 0 + m_Name: ButtonText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7110842686833926472 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842686833926475} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7110842687765492731} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &7110842686833926486 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842686833926475} + m_CullTransparentMesh: 0 +--- !u!114 &7110842686833926473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842686833926475} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hello I'm a button +--- !u!1 &7110842686995365622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7110842686995365623} + - component: {fileID: 7110842686995365619} + - component: {fileID: 7110842686995365618} + - component: {fileID: 7110842686995365621} + - component: {fileID: 7110842686995365620} + m_Layer: 0 + m_Name: ButtonBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7110842686995365623 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842686995365622} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7110842687765492731} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7110842686995365619 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842686995365622} + m_CullTransparentMesh: 0 +--- !u!114 &7110842686995365618 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842686995365622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &7110842686995365621 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842686995365622} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &7110842686995365620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842686995365622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 1, g: 0.76862746, b: 0, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 7110842686995365618} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7110842687765492728} + m_MethodName: TriggerButtonEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &7110842687765492730 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7110842687765492731} + - component: {fileID: 7110842687765492728} + - component: {fileID: 8431253226551248138} + m_Layer: 0 + m_Name: MMDebugMenuButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7110842687765492731 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842687765492730} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7110842686995365623} + - {fileID: 7110842686833926472} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7110842687765492728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842687765492730} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4111d7e29da39ee46b807daa22dd3af9, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetButton: {fileID: 7110842686995365620} + ButtonText: {fileID: 7110842686833926473} + ButtonBg: {fileID: 7110842686995365618} + ButtonEventName: Button +--- !u!114 &8431253226551248138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7110842687765492730} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 150 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButton.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButton.prefab.meta new file mode 100644 index 0000000..74d8612 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButton.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dbb3e138861cf2040b20217e62a5edf2 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButtonBorder.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButtonBorder.prefab new file mode 100644 index 0000000..22b8aa3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButtonBorder.prefab @@ -0,0 +1,296 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1985568127140099324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1985568127140099325} + - component: {fileID: 1985568127140099327} + - component: {fileID: 1985568127140099326} + m_Layer: 0 + m_Name: ButtonText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1985568127140099325 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568127140099324} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1985568128000399460} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &1985568127140099327 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568127140099324} + m_CullTransparentMesh: 0 +--- !u!114 &1985568127140099326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568127140099324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hello I'm also a button +--- !u!1 &1985568128000399467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1985568128000399460} + - component: {fileID: 1985568128000399461} + - component: {fileID: -1766573354249734030} + m_Layer: 0 + m_Name: MMDebugMenuButtonBorder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1985568128000399460 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568128000399467} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1985568128244455308} + - {fileID: 1985568127140099325} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1985568128000399461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568128000399467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4111d7e29da39ee46b807daa22dd3af9, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetButton: {fileID: 1985568128244455309} + ButtonText: {fileID: 1985568127140099326} + ButtonBg: {fileID: 1985568128244455311} + ButtonEventName: Button +--- !u!114 &-1766573354249734030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568128000399467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 150 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &1985568128244455315 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1985568128244455308} + - component: {fileID: 1985568128244455304} + - component: {fileID: 1985568128244455311} + - component: {fileID: 1985568128244455310} + - component: {fileID: 1985568128244455309} + m_Layer: 0 + m_Name: ButtonBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1985568128244455308 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568128244455315} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1985568128000399460} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1985568128244455304 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568128244455315} + m_CullTransparentMesh: 0 +--- !u!114 &1985568128244455311 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568128244455315} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -8121766140965501267, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1985568128244455310 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568128244455315} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1985568128244455309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985568128244455315} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 1, g: 0.76862746, b: 0, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1985568128244455311} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1985568128000399461} + m_MethodName: TriggerButtonEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButtonBorder.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButtonBorder.prefab.meta new file mode 100644 index 0000000..91275a8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuButtonBorder.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f2be8011322fbf943a44edc64dedbf2c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuCheckbox.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuCheckbox.prefab new file mode 100644 index 0000000..1ba1fb3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuCheckbox.prefab @@ -0,0 +1,419 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2731002163667230419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2731002163667230418} + - component: {fileID: 2731002163667230428} + - component: {fileID: 4925546967600633982} + m_Layer: 0 + m_Name: MMDebugMenuCheckbox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2731002163667230418 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002163667230419} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2731002165425871624} + - {fileID: 2731002165404421086} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 75} + m_Pivot: {x: 0, y: 0} +--- !u!114 &2731002163667230428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002163667230419} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 28ad17ba84c916d499cb74e758d28e8e, type: 3} + m_Name: + m_EditorClassIdentifier: + Switch: {fileID: 2731002165425871639} + SwitchText: {fileID: 2731002165404421081} + CheckboxEventName: Checkbox +--- !u!114 &4925546967600633982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002163667230419} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 75 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &2731002165404421087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2731002165404421086} + - component: {fileID: 2731002165404421080} + - component: {fileID: 2731002165404421081} + - component: {fileID: 2731002165404421082} + - component: {fileID: 2731002165404421083} + m_Layer: 0 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2731002165404421086 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165404421087} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2731002163667230418} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 100, y: -8.179981} + m_SizeDelta: {x: 827, y: 70.65} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &2731002165404421080 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165404421087} + m_CullTransparentMesh: 0 +--- !u!114 &2731002165404421081 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165404421087} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hello I'm a checkbox +--- !u!225 &2731002165404421082 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165404421087} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &2731002165404421083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165404421087} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 87a286771fa86194e979f187a1691a2a, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2731002165425871639} + m_MethodName: ToggleState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + DisabledChangeColor: 0 + DisabledColor: {r: 1, g: 1, b: 1, a: 1} + PressedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + HighlightedSprite: {fileID: 0} + HighlightedChangeColor: 0 + HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!1 &2731002165425871625 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2731002165425871624} + - component: {fileID: 2731002165425871636} + - component: {fileID: 2731002165425871637} + - component: {fileID: 2731002165425871626} + - component: {fileID: 2731002165425871627} + - component: {fileID: 2731002165425871639} + m_Layer: 0 + m_Name: Checkbox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2731002165425871624 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165425871625} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 2731002163667230418} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0.14873886} + m_SizeDelta: {x: 150, y: 150} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &2731002165425871636 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165425871625} + m_CullTransparentMesh: 0 +--- !u!114 &2731002165425871637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165425871625} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -8121766140965501267, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &2731002165425871626 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165425871625} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &2731002165425871627 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165425871625} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67c3b5deddd7fd5438aebce3a8ea178e, type: 3} + m_Name: + m_EditorClassIdentifier: + OnSprite: {fileID: -2239278724076068761, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + OffSprite: {fileID: -8121766140965501267, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + StartsOn: 0 +--- !u!114 &2731002165425871639 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2731002165425871625} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 752e7f2cbc3684a4ca1c13a049c09d5d, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2731002165425871639} + m_MethodName: ToggleState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 2731002163667230428} + m_MethodName: TriggerCheckboxEvent + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + DisabledChangeColor: 0 + DisabledColor: {r: 1, g: 1, b: 1, a: 1} + PressedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + HighlightedSprite: {fileID: 0} + HighlightedChangeColor: 0 + HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 2731002165425871627} + SwitchState: 0 + InitialState: 0 + OnSwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2731002163667230428} + m_MethodName: TriggerCheckboxEventTrue + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + OnSwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2731002163667230428} + m_MethodName: TriggerCheckboxEventFalse + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuCheckbox.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuCheckbox.prefab.meta new file mode 100644 index 0000000..72516dc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuCheckbox.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e48b9501c5356cf4e9c390d40d81438c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesThree.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesThree.prefab new file mode 100644 index 0000000..2f1a495 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesThree.prefab @@ -0,0 +1,787 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &383109221511850881 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7502973007697217679} + - component: {fileID: 6335207412036194119} + - component: {fileID: 1298559792229796020} + - component: {fileID: 6410278862327682636} + - component: {fileID: 6070921804749331112} + m_Layer: 0 + m_Name: ChoiceThreeBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7502973007697217679 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 383109221511850881} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1975943102150597852} + m_Father: {fileID: 6760114758540448055} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 326, y: 0} + m_Pivot: {x: 1, y: 0} +--- !u!222 &6335207412036194119 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 383109221511850881} + m_CullTransparentMesh: 0 +--- !u!114 &1298559792229796020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 383109221511850881} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -8121766140965501267, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &6410278862327682636 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 383109221511850881} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &6070921804749331112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 383109221511850881} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.8773585, g: 0.8773585, b: 0.8773585, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1298559792229796020} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 207464785538935126} + m_MethodName: Select + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 2 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 207464785538935126} + m_MethodName: TriggerButtonEvent + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 2 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &1054435460350824087 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6760114758540448055} + - component: {fileID: 1171095101194431976} + - component: {fileID: 207464785538935126} + m_Layer: 0 + m_Name: MMDebugMenuChoicesThree + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6760114758540448055 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1054435460350824087} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 209970641342374838} + - {fileID: 4836321302521809597} + - {fileID: 7502973007697217679} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1171095101194431976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1054435460350824087} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 150 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &207464785538935126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1054435460350824087} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b2bca3004ee68c45bb99ade8a9e5380, type: 3} + m_Name: + m_EditorClassIdentifier: + SelectedSprite: {fileID: 1282028943509491997, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + OffSprite: {fileID: -8121766140965501267, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + OnColor: {r: 1, g: 1, b: 1, a: 1} + OffColor: {r: 0, g: 0, b: 0, a: 1} + AccentColor: {r: 1, g: 0.76862746, b: 0, a: 1} + Choices: + - TargetButton: {fileID: 3972806657608312954} + ButtonText: {fileID: 3775360701543278049} + ButtonBg: {fileID: 5805660822123380926} + ButtonEventName: ButtonEvent + - TargetButton: {fileID: 7625263430954691411} + ButtonText: {fileID: 8136447574471181808} + ButtonBg: {fileID: 7130188133787434142} + ButtonEventName: ButtonEvent + - TargetButton: {fileID: 6070921804749331112} + ButtonText: {fileID: 7076417087094032436} + ButtonBg: {fileID: 1298559792229796020} + ButtonEventName: ButtonEvent +--- !u!1 &2321205232003346046 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4836321302521809597} + - component: {fileID: 3837585618877042378} + - component: {fileID: 7130188133787434142} + - component: {fileID: 4779463927223748043} + - component: {fileID: 7625263430954691411} + m_Layer: 0 + m_Name: ChoiceTwoBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4836321302521809597 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321205232003346046} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8135484652096555800} + m_Father: {fileID: 6760114758540448055} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 326, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3837585618877042378 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321205232003346046} + m_CullTransparentMesh: 0 +--- !u!114 &7130188133787434142 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321205232003346046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -8121766140965501267, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &4779463927223748043 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321205232003346046} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &7625263430954691411 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2321205232003346046} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.8773585, g: 0.8773585, b: 0.8773585, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 7130188133787434142} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 207464785538935126} + m_MethodName: Select + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 207464785538935126} + m_MethodName: TriggerButtonEvent + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &2549068602292611282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8135484652096555800} + - component: {fileID: 3562783613012279390} + - component: {fileID: 8136447574471181808} + m_Layer: 0 + m_Name: ChoiceTwoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8135484652096555800 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2549068602292611282} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4836321302521809597} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &3562783613012279390 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2549068602292611282} + m_CullTransparentMesh: 0 +--- !u!114 &8136447574471181808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2549068602292611282} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Two +--- !u!1 &4745673150296838236 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1975943102150597852} + - component: {fileID: 342843845882387862} + - component: {fileID: 7076417087094032436} + m_Layer: 0 + m_Name: ChoiceThreeText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1975943102150597852 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745673150296838236} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7502973007697217679} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &342843845882387862 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745673150296838236} + m_CullTransparentMesh: 0 +--- !u!114 &7076417087094032436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4745673150296838236} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Three +--- !u!1 &6322975861311710160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6278052392806340238} + - component: {fileID: 4743504137644315747} + - component: {fileID: 3775360701543278049} + m_Layer: 0 + m_Name: ChoiceOneText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6278052392806340238 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6322975861311710160} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 209970641342374838} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &4743504137644315747 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6322975861311710160} + m_CullTransparentMesh: 0 +--- !u!114 &3775360701543278049 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6322975861311710160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: One +--- !u!1 &8118830314669276476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 209970641342374838} + - component: {fileID: 6124567643145279271} + - component: {fileID: 5805660822123380926} + - component: {fileID: 5109768490221905728} + - component: {fileID: 3972806657608312954} + m_Layer: 0 + m_Name: ChoiceOneBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &209970641342374838 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118830314669276476} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6278052392806340238} + m_Father: {fileID: 6760114758540448055} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 326, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!222 &6124567643145279271 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118830314669276476} + m_CullTransparentMesh: 0 +--- !u!114 &5805660822123380926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118830314669276476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 1282028943509491997, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &5109768490221905728 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118830314669276476} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3972806657608312954 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8118830314669276476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.8773585, g: 0.8773585, b: 0.8773585, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5805660822123380926} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 207464785538935126} + m_MethodName: Select + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 207464785538935126} + m_MethodName: TriggerButtonEvent + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesThree.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesThree.prefab.meta new file mode 100644 index 0000000..f9cc0ec --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesThree.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 804c003da46ec914e80badaf93e6d2da +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesTwo.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesTwo.prefab new file mode 100644 index 0000000..7345d22 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesTwo.prefab @@ -0,0 +1,551 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1968918180993924283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7017719911542924810} + - component: {fileID: 6916212621819635423} + - component: {fileID: 4339780418274169012} + m_Layer: 0 + m_Name: ChoiceTwoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7017719911542924810 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968918180993924283} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 232686960364665325} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &6916212621819635423 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968918180993924283} + m_CullTransparentMesh: 0 +--- !u!114 &4339780418274169012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968918180993924283} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: I'm choice two +--- !u!1 &3311708387049411363 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 232686960364665325} + - component: {fileID: 7018557861459111351} + - component: {fileID: 1289887275677449767} + - component: {fileID: 6145176692397881644} + - component: {fileID: 3274604571883636814} + m_Layer: 0 + m_Name: ChoiceTwoBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &232686960364665325 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3311708387049411363} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7017719911542924810} + m_Father: {fileID: 3913685173871000925} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 252.5, y: 0} + m_SizeDelta: {x: -505, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7018557861459111351 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3311708387049411363} + m_CullTransparentMesh: 0 +--- !u!114 &1289887275677449767 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3311708387049411363} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -8121766140965501267, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &6145176692397881644 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3311708387049411363} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3274604571883636814 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3311708387049411363} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.8773585, g: 0.8773585, b: 0.8773585, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3913685174599282772} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 5258430688713385724} + m_MethodName: Select + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 5258430688713385724} + m_MethodName: TriggerButtonEvent + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &3913685173871000924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913685173871000925} + - component: {fileID: 2449727791441972140} + - component: {fileID: 5258430688713385724} + m_Layer: 0 + m_Name: MMDebugMenuChoicesTwo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913685173871000925 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685173871000924} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3913685174599282769} + - {fileID: 232686960364665325} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!114 &2449727791441972140 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685173871000924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 150 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &5258430688713385724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685173871000924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b2bca3004ee68c45bb99ade8a9e5380, type: 3} + m_Name: + m_EditorClassIdentifier: + SelectedSprite: {fileID: 1282028943509491997, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + OffSprite: {fileID: -8121766140965501267, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + OnColor: {r: 1, g: 1, b: 1, a: 1} + OffColor: {r: 0, g: 0, b: 0, a: 1} + AccentColor: {r: 1, g: 0.76862746, b: 0, a: 1} + Choices: + - TargetButton: {fileID: 3913685174599282770} + ButtonText: {fileID: 3913685174769070063} + ButtonBg: {fileID: 3913685174599282772} + ButtonEventName: ButtonEvent + - TargetButton: {fileID: 3274604571883636814} + ButtonText: {fileID: 4339780418274169012} + ButtonBg: {fileID: 1289887275677449767} + ButtonEventName: ButtonEvent +--- !u!1 &3913685174599282768 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913685174599282769} + - component: {fileID: 3913685174599282773} + - component: {fileID: 3913685174599282772} + - component: {fileID: 3913685174599282771} + - component: {fileID: 3913685174599282770} + m_Layer: 0 + m_Name: ChoiceOneBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913685174599282769 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685174599282768} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3913685174769070062} + m_Father: {fileID: 3913685173871000925} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -252.5, y: 0} + m_SizeDelta: {x: -505, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3913685174599282773 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685174599282768} + m_CullTransparentMesh: 0 +--- !u!114 &3913685174599282772 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685174599282768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 1282028943509491997, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &3913685174599282771 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685174599282768} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3913685174599282770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685174599282768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.8773585, g: 0.8773585, b: 0.8773585, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3913685174599282772} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 5258430688713385724} + m_MethodName: Select + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 5258430688713385724} + m_MethodName: TriggerButtonEvent + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &3913685174769070061 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3913685174769070062} + - component: {fileID: 3913685174769070064} + - component: {fileID: 3913685174769070063} + m_Layer: 0 + m_Name: ChoiceOneText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3913685174769070062 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685174769070061} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3913685174599282769} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &3913685174769070064 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685174769070061} + m_CullTransparentMesh: 0 +--- !u!114 &3913685174769070063 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3913685174769070061} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: I'm choice one diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesTwo.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesTwo.prefab.meta new file mode 100644 index 0000000..579b90d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuChoicesTwo.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 90a0e72c11dfcbe4f88bccc465c6a0cd +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuDebugPanel.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuDebugPanel.prefab new file mode 100644 index 0000000..5f25c35 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuDebugPanel.prefab @@ -0,0 +1,1217 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &788702056433936771 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3794347750845801073} + - component: {fileID: 710830936900763953} + - component: {fileID: 7228331713076437876} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3794347750845801073 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 788702056433936771} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2704280302633273139} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 10.789978, y: -0.5} + m_SizeDelta: {x: -41.59, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &710830936900763953 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 788702056433936771} + m_CullTransparentMesh: 0 +--- !u!114 &7228331713076437876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 788702056433936771} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!1 &1665185155508362414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2704280302633273139} + - component: {fileID: 3688956226469447104} + - component: {fileID: 574145035497974092} + - component: {fileID: 1663097974611461804} + - component: {fileID: 6486228185104242542} + m_Layer: 5 + m_Name: InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2704280302633273139 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665185155508362414} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4793585210590556594} + - {fileID: 3794347750845801073} + - {fileID: 8824451996877085551} + m_Father: {fileID: 2762144808884294746} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 950, y: 77} + m_SizeDelta: {x: 1500, y: 70} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3688956226469447104 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665185155508362414} + m_CullTransparentMesh: 0 +--- !u!114 &574145035497974092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665185155508362414} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.15686275} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1663097974611461804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665185155508362414} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 574145035497974092} + m_TextComponent: {fileID: 5210814426353115482} + m_Placeholder: {fileID: 7228331713076437876} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!114 &6486228185104242542 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1665185155508362414} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 70 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &2141562767541846580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8663448765582637376} + - component: {fileID: 5147900361984398078} + - component: {fileID: 5993476659770641988} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8663448765582637376 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2141562767541846580} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2512149589463769203} + - {fileID: 6936933485454934422} + - {fileID: 5783648402199945330} + m_Father: {fileID: 296737063104904183} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 50, y: -0.000030517578} + m_SizeDelta: {x: -50, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &5147900361984398078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2141562767541846580} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 50 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 +--- !u!114 &5993476659770641988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2141562767541846580} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &2369792332578014626 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5783648402199945330} + - component: {fileID: 2284708871270879260} + - component: {fileID: 4821872393339073275} + m_Layer: 0 + m_Name: MMDebugMenuSpacerSmall (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5783648402199945330 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2369792332578014626} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8663448765582637376} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2284708871270879260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2369792332578014626} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 28ad17ba84c916d499cb74e758d28e8e, type: 3} + m_Name: + m_EditorClassIdentifier: + Switch: {fileID: 0} + SwitchText: {fileID: 0} + CheckboxEventName: Checkbox +--- !u!114 &4821872393339073275 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2369792332578014626} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 50 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &2512149589463769202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2512149589463769203} + - component: {fileID: 2512149589463769206} + - component: {fileID: 174423408029674793} + m_Layer: 0 + m_Name: MMDebugMenuSpacerSmall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2512149589463769203 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2512149589463769202} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8663448765582637376} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2512149589463769206 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2512149589463769202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 28ad17ba84c916d499cb74e758d28e8e, type: 3} + m_Name: + m_EditorClassIdentifier: + Switch: {fileID: 0} + SwitchText: {fileID: 0} + CheckboxEventName: Checkbox +--- !u!114 &174423408029674793 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2512149589463769202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 25 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &3361040743363252691 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8824451996877085551} + - component: {fileID: 6625173915296107703} + - component: {fileID: 5210814426353115482} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8824451996877085551 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3361040743363252691} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2704280302633273139} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 10.789978, y: -0.5} + m_SizeDelta: {x: -41.59, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6625173915296107703 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3361040743363252691} + m_CullTransparentMesh: 0 +--- !u!114 &5210814426353115482 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3361040743363252691} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!1 &3918994191122592068 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4793585210590556594} + - component: {fileID: 6025401733431687573} + - component: {fileID: 3287754164696206233} + m_Layer: 5 + m_Name: PromptCharacter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4793585210590556594 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3918994191122592068} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2704280302633273139} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: 20, y: -13} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &6025401733431687573 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3918994191122592068} + m_CullTransparentMesh: 0 +--- !u!114 &3287754164696206233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3918994191122592068} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: \ +--- !u!1 &4308652478646491251 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 296737063104904183} + - component: {fileID: 4967745611219058913} + - component: {fileID: 2056684196043258520} + - component: {fileID: 2963515784503221686} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &296737063104904183 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4308652478646491251} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8663448765582637376} + m_Father: {fileID: 2762144808884294746} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 150, y: -150} + m_SizeDelta: {x: -150, y: -262} + m_Pivot: {x: 0, y: 1} +--- !u!222 &4967745611219058913 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4308652478646491251} + m_CullTransparentMesh: 0 +--- !u!114 &2056684196043258520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4308652478646491251} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2963515784503221686 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4308652478646491251} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &4466795306654022167 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6266477581826985613} + - component: {fileID: 5148687642563432838} + - component: {fileID: 7379109491080681607} + - component: {fileID: 9018560456321266797} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6266477581826985613 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4466795306654022167} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6266855208216407785} + m_Father: {fileID: 2762144808884294746} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 110, y: -250} + m_SizeDelta: {x: 20, y: -409.62} + m_Pivot: {x: 1, y: 1} +--- !u!222 &5148687642563432838 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4466795306654022167} + m_CullTransparentMesh: 0 +--- !u!114 &7379109491080681607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4466795306654022167} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &9018560456321266797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4466795306654022167} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1090862186280535602} + m_HandleRect: {fileID: 8360481486740247630} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &6936933485454934423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6936933485454934422} + - component: {fileID: 6936933485454934416} + - component: {fileID: 6936933485454934417} + - component: {fileID: 6936933485454934418} + - component: {fileID: 7188827909978530493} + - component: {fileID: 7326274054320399657} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6936933485454934422 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6936933485454934423} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8663448765582637376} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1500, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &6936933485454934416 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6936933485454934423} + m_CullTransparentMesh: 0 +--- !u!114 &6936933485454934417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6936933485454934423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'dfgdfgd + + fgd + + fg + + dfgd + + fgdfg + + dfgd + + fgdfg + + dfg' +--- !u!225 &6936933485454934418 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6936933485454934423} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &7188827909978530493 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6936933485454934423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!114 &7326274054320399657 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6936933485454934423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: 1 + m_LayoutPriority: 1 +--- !u!1 &7205563065712861545 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2762144808884294746} + - component: {fileID: 7827759324235578921} + - component: {fileID: 1764187818791410548} + - component: {fileID: 4628741985268593227} + - component: {fileID: 2610188149360702702} + - component: {fileID: 521718878734460126} + m_Layer: 5 + m_Name: MMDebugMenuDebugPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2762144808884294746 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7205563065712861545} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2704280302633273139} + - {fileID: 296737063104904183} + - {fileID: 6266477581826985613} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &7827759324235578921 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7205563065712861545} + m_CullTransparentMesh: 0 +--- !u!114 &1764187818791410548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7205563065712861545} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4628741985268593227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7205563065712861545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 8663448765582637376} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 296737063104904183} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 9018560456321266797} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &2610188149360702702 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7205563065712861545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d72d65b4a360e184da7662f4f4c6acc0, type: 3} + m_Name: + m_EditorClassIdentifier: + Index: 0 + Parent: {fileID: 8663448765582637376} +--- !u!114 &521718878734460126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7205563065712861545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f28e9eb155c32542978f8e9ecbc19f3, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugScrollRect: {fileID: 4628741985268593227} + DebugText: {fileID: 6936933485454934417} + CommandPrompt: {fileID: 1663097974611461804} + CommandPromptCharacter: {fileID: 3287754164696206233} + TouchScreenVisible: 0 +--- !u!1 &7491894480724166814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8360481486740247630} + - component: {fileID: 3591858702180585844} + - component: {fileID: 1090862186280535602} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8360481486740247630 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7491894480724166814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6266855208216407785} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3591858702180585844 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7491894480724166814} + m_CullTransparentMesh: 0 +--- !u!114 &1090862186280535602 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7491894480724166814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.5019608} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8800586724814678912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6266855208216407785} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6266855208216407785 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8800586724814678912} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8360481486740247630} + m_Father: {fileID: 6266477581826985613} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuDebugPanel.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuDebugPanel.prefab.meta new file mode 100644 index 0000000..bc65333 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuDebugPanel.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 94cfa935aa4cff74a9451b22cb7627a6 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSlider.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSlider.prefab new file mode 100644 index 0000000..59cbb11 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSlider.prefab @@ -0,0 +1,566 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6276652113604679146 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6276652113604679145} + - component: {fileID: 6276652113604679143} + m_Layer: 5 + m_Name: Slider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6276652113604679145 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652113604679146} + m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6276652113956304636} + - {fileID: 6276652114769672629} + m_Father: {fileID: 8595552693496322640} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 500.00003, y: 88} + m_SizeDelta: {x: 150, y: 1000} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6276652113604679143 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652113604679146} + m_CullTransparentMesh: 0 +--- !u!1 &6276652113956304637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6276652113956304636} + - component: {fileID: 6276652113956304634} + - component: {fileID: 6276652113956304635} + m_Layer: 5 + m_Name: SliderLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6276652113956304636 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652113956304637} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6276652113604679145} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -56, y: 0} + m_SizeDelta: {x: -122, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6276652113956304634 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652113956304637} + m_CullTransparentMesh: 0 +--- !u!114 &6276652113956304635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652113956304637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6276652114769672630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6276652114769672629} + - component: {fileID: 6276652114769672628} + m_Layer: 5 + m_Name: SliderArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6276652114769672629 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652114769672630} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6276652115217222260} + m_Father: {fileID: 6276652113604679145} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -57, y: 72.66} + m_SizeDelta: {x: -40, y: -143.29} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6276652114769672628 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652114769672630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 1, g: 0.76862746, b: 0, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6276652114970610756} + m_FillRect: {fileID: 0} + m_HandleRect: {fileID: 6276652115217222260} + m_Direction: 3 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 1 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: UpdateContinuousSharpness + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &6276652114970610758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6276652114970610757} + - component: {fileID: 6276652114970610755} + - component: {fileID: 6276652114970610756} + m_Layer: 5 + m_Name: SliderKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6276652114970610757 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652114970610758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 6276652115217222260} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6276652114970610755 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652114970610758} + m_CullTransparentMesh: 0 +--- !u!114 &6276652114970610756 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652114970610758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -6396098458971428934, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6276652115217222261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6276652115217222260} + m_Layer: 5 + m_Name: KnobContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6276652115217222260 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6276652115217222261} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6276652114970610757} + m_Father: {fileID: 6276652114769672629} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: -22.600067} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &8595552692904681607 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8595552692904681606} + - component: {fileID: 8595552692904681604} + - component: {fileID: 8595552692904681605} + m_Layer: 0 + m_Name: SliderValue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8595552692904681606 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552692904681607} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8595552693496322640} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 49.2, y: 0} + m_SizeDelta: {x: 955, y: 131.28} + m_Pivot: {x: 0, y: 1} +--- !u!222 &8595552692904681604 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552692904681607} + m_CullTransparentMesh: 0 +--- !u!114 &8595552692904681605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552692904681607} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 25 +--- !u!1 &8595552693064340958 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8595552693064340957} + - component: {fileID: 8595552693064340947} + - component: {fileID: 8595552693064340956} + m_Layer: 0 + m_Name: SliderText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8595552693064340957 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552693064340958} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8595552693496322640} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0.3, y: 0} + m_SizeDelta: {x: 912, y: 131.28} + m_Pivot: {x: 0, y: 1} +--- !u!222 &8595552693064340947 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552693064340958} + m_CullTransparentMesh: 0 +--- !u!114 &8595552693064340956 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552693064340958} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hello I'm a slider +--- !u!1 &8595552693496322641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8595552693496322640} + - component: {fileID: 8595552693496322647} + - component: {fileID: -5574890766936272688} + m_Layer: 0 + m_Name: MMDebugMenuSlider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8595552693496322640 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552693496322641} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6276652113604679145} + - {fileID: 8595552693064340957} + - {fileID: 8595552692904681606} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 130} + m_Pivot: {x: 0, y: 0} +--- !u!114 &8595552693496322647 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552693496322641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6d8d661dac43a98489944be49a162bda, type: 3} + m_Name: + m_EditorClassIdentifier: + Mode: 0 + TargetSlider: {fileID: 6276652114769672628} + SliderText: {fileID: 8595552693064340956} + SliderValueText: {fileID: 8595552692904681605} + SliderKnob: {fileID: 6276652114970610756} + SliderLine: {fileID: 6276652113956304635} + RemapZero: 0 + RemapOne: 25 + SliderEventName: Checkbox + SliderValue: 0 + SliderValueInt: 0 +--- !u!114 &-5574890766936272688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8595552693496322641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 130 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSlider.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSlider.prefab.meta new file mode 100644 index 0000000..2bccadd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSlider.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: addcaa6f7df18984691dc300b3be4f7b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerBig.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerBig.prefab new file mode 100644 index 0000000..29ed1be --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerBig.prefab @@ -0,0 +1,79 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8096383012134595547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8096383012134595546} + - component: {fileID: 8096383012134595551} + - component: {fileID: -3392478374538205568} + m_Layer: 0 + m_Name: MMDebugMenuSpacer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8096383012134595546 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8096383012134595547} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8096383012134595551 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8096383012134595547} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 28ad17ba84c916d499cb74e758d28e8e, type: 3} + m_Name: + m_EditorClassIdentifier: + Switch: {fileID: 0} + SwitchText: {fileID: 0} + OnSwitchTrue: + m_PersistentCalls: + m_Calls: [] + OnSwitchFalse: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &-3392478374538205568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8096383012134595547} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 200 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerBig.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerBig.prefab.meta new file mode 100644 index 0000000..b406a07 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerBig.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f72e7b8c96262ed4d976576afafd53b0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerSmall.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerSmall.prefab new file mode 100644 index 0000000..903c3bc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerSmall.prefab @@ -0,0 +1,79 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3952073977153845988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3952073977153845989} + - component: {fileID: 3952073977153845984} + - component: {fileID: 1616732619279398847} + m_Layer: 0 + m_Name: MMDebugMenuSpacerSmall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3952073977153845989 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3952073977153845988} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3952073977153845984 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3952073977153845988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 28ad17ba84c916d499cb74e758d28e8e, type: 3} + m_Name: + m_EditorClassIdentifier: + Switch: {fileID: 0} + SwitchText: {fileID: 0} + OnSwitchTrue: + m_PersistentCalls: + m_Calls: [] + OnSwitchFalse: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1616732619279398847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3952073977153845988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 100 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerSmall.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerSmall.prefab.meta new file mode 100644 index 0000000..a36a11c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuSpacerSmall.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1a4b9ae95443d5a489bd918c848e2390 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTab.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTab.prefab new file mode 100644 index 0000000..8ca7efe --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTab.prefab @@ -0,0 +1,243 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3956405159569841105 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4035498183064421348} + - component: {fileID: 3566213554412876061} + - component: {fileID: 3286960093763152731} + m_Layer: 0 + m_Name: TabText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4035498183064421348 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3956405159569841105} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1719189881547997600} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &3566213554412876061 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3956405159569841105} + m_CullTransparentMesh: 0 +--- !u!114 &3286960093763152731 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3956405159569841105} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: MY SETTINGS +--- !u!1 &6373951605789824784 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1719189881547997600} + - component: {fileID: 295973447106422697} + - component: {fileID: 3273633885726831621} + - component: {fileID: 4515265154145170826} + - component: {fileID: 1289416115409327648} + - component: {fileID: 3232960445196542265} + m_Layer: 0 + m_Name: MMDebugMenuTab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1719189881547997600 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373951605789824784} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4035498183064421348} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 320, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &295973447106422697 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373951605789824784} + m_CullTransparentMesh: 0 +--- !u!114 &3273633885726831621 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373951605789824784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 1282028943509491997, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &4515265154145170826 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373951605789824784} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1289416115409327648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373951605789824784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.8773585, g: 0.8773585, b: 0.8773585, a: 1} + m_SelectedColor: {r: 1, g: 1, b: 1, a: 1} + m_DisabledColor: {r: 1, g: 1, b: 1, a: 0.101960786} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3273633885726831621} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3232960445196542265} + m_MethodName: Select + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &3232960445196542265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373951605789824784} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5fe2233d73fc8b7449e98cbeb826216a, type: 3} + m_Name: + m_EditorClassIdentifier: + TabText: {fileID: 3286960093763152731} + TabBackground: {fileID: 3273633885726831621} + SelectedBackgroundColor: {r: 0, g: 0, b: 0, a: 0} + DeselectedBackgroundColor: {r: 0, g: 0, b: 0, a: 0} + SelectedTextColor: {r: 0, g: 0, b: 0, a: 0} + DeselectedTextColor: {r: 0, g: 0, b: 0, a: 0} + Index: 0 + Manager: {fileID: 0} diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTab.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTab.prefab.meta new file mode 100644 index 0000000..52d7a86 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTab.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a8296d633c27f554a99bbbf94958722e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabContents.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabContents.prefab new file mode 100644 index 0000000..4cb1db4 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabContents.prefab @@ -0,0 +1,519 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2226334097071465157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8892106968909044145} + - component: {fileID: 4912539852814119439} + - component: {fileID: 5796352249961213621} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8892106968909044145 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2226334097071465157} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 523512826028841734} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 50, y: -0.000030517578} + m_SizeDelta: {x: -50, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &4912539852814119439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2226334097071465157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 50 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 1 +--- !u!114 &5796352249961213621 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2226334097071465157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &4077644926070077570 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 523512826028841734} + - component: {fileID: 5164826942800125968} + - component: {fileID: 2294324029073480297} + - component: {fileID: 3061701224611183943} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &523512826028841734 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4077644926070077570} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8892106968909044145} + m_Father: {fileID: 2668594971799254187} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 100, y: -150} + m_SizeDelta: {x: -100, y: -150} + m_Pivot: {x: 0, y: 1} +--- !u!222 &5164826942800125968 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4077644926070077570} + m_CullTransparentMesh: 0 +--- !u!114 &2294324029073480297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4077644926070077570} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3061701224611183943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4077644926070077570} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &4512855621359278822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6172988980238167676} + - component: {fileID: 4912878316281655671} + - component: {fileID: 7294142620540074102} + - component: {fileID: 9112330290489578652} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6172988980238167676 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4512855621359278822} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6171492205590187544} + m_Father: {fileID: 2668594971799254187} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 110, y: -250} + m_SizeDelta: {x: 20, y: -350} + m_Pivot: {x: 1, y: 1} +--- !u!222 &4912878316281655671 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4512855621359278822} + m_CullTransparentMesh: 0 +--- !u!114 &7294142620540074102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4512855621359278822} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &9112330290489578652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4512855621359278822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 900255440345523907} + m_HandleRect: {fileID: 8600671806373885119} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &6963287966277779864 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2668594971799254187} + - component: {fileID: 8069348050861039320} + - component: {fileID: 1956386964678785925} + - component: {fileID: 4855237339684721338} + - component: {fileID: 2838565908494160927} + m_Layer: 5 + m_Name: MMDebugMenuTabContents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2668594971799254187 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6963287966277779864} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 523512826028841734} + - {fileID: 6172988980238167676} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &8069348050861039320 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6963287966277779864} + m_CullTransparentMesh: 0 +--- !u!114 &1956386964678785925 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6963287966277779864} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.392} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4855237339684721338 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6963287966277779864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 8892106968909044145} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 523512826028841734} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 9112330290489578652} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 0 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &2838565908494160927 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6963287966277779864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d72d65b4a360e184da7662f4f4c6acc0, type: 3} + m_Name: + m_EditorClassIdentifier: + Index: 0 + Parent: {fileID: 8892106968909044145} +--- !u!1 &7252293740118026351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8600671806373885119} + - component: {fileID: 3640320928205681029} + - component: {fileID: 900255440345523907} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8600671806373885119 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7252293740118026351} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6171492205590187544} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3640320928205681029 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7252293740118026351} + m_CullTransparentMesh: 0 +--- !u!114 &900255440345523907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7252293740118026351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.5019608} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8753918036581862257 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6171492205590187544} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6171492205590187544 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8753918036581862257} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8600671806373885119} + m_Father: {fileID: 6172988980238167676} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabContents.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabContents.prefab.meta new file mode 100644 index 0000000..8e9ca26 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabContents.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f2f0b25301bf93e43ac5ecc33208a420 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabSpacer.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabSpacer.prefab new file mode 100644 index 0000000..ff95026 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabSpacer.prefab @@ -0,0 +1,46 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5904922505485783898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2188017814106785258} + - component: {fileID: 980991719135470563} + m_Layer: 0 + m_Name: MMDebugMenuTabSpacer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2188017814106785258 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5904922505485783898} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 320, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &980991719135470563 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5904922505485783898} + m_CullTransparentMesh: 0 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabSpacer.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabSpacer.prefab.meta new file mode 100644 index 0000000..195545a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTabSpacer.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57633cde530d56a48995d0733efa9450 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextLong.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextLong.prefab new file mode 100644 index 0000000..007fc51 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextLong.prefab @@ -0,0 +1,164 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3621675441280142035 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3621675441280142034} + - component: {fileID: 3621675441280142036} + - component: {fileID: 3621675441280142037} + - component: {fileID: 3621675441280142038} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3621675441280142034 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3621675441280142035} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3621675442781020126} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &3621675441280142036 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3621675441280142035} + m_CullTransparentMesh: 0 +--- !u!114 &3621675441280142037 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3621675441280142035} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium + doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis. +--- !u!225 &3621675441280142038 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3621675441280142035} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &3621675442781020127 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3621675442781020126} + - component: {fileID: 6052766985867237746} + - component: {fileID: 7073910567540320170} + m_Layer: 0 + m_Name: MMDebugMenuTextLong + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3621675442781020126 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3621675442781020127} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3621675441280142034} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 500, y: -570} + m_SizeDelta: {x: 1000, y: 240} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6052766985867237746 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3621675442781020127} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 240 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &7073910567540320170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3621675442781020127} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 26996c3ee681f254592c7bbaf459447a, type: 3} + m_Name: + m_EditorClassIdentifier: + ContentText: {fileID: 3621675441280142037} diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextLong.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextLong.prefab.meta new file mode 100644 index 0000000..0b11b8c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextLong.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4332ad3ebf8592c41bc275ff77d24b29 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextSmall.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextSmall.prefab new file mode 100644 index 0000000..9cf590c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextSmall.prefab @@ -0,0 +1,164 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8414421117376755043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8414421117376755042} + - component: {fileID: 8414421117376755044} + - component: {fileID: 8414421117376755045} + - component: {fileID: 8414421117376755046} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8414421117376755042 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8414421117376755043} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8414421117719863406} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &8414421117376755044 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8414421117376755043} + m_CullTransparentMesh: 0 +--- !u!114 &8414421117376755045 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8414421117376755043} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod + tempor +--- !u!225 &8414421117376755046 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8414421117376755043} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &8414421117719863407 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8414421117719863406} + - component: {fileID: 1547969768632297154} + - component: {fileID: 6550416838355534067} + m_Layer: 0 + m_Name: MMDebugMenuTextSmall + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8414421117719863406 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8414421117719863407} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8414421117376755042} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 120} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1547969768632297154 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8414421117719863407} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 120 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &6550416838355534067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8414421117719863407} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 26996c3ee681f254592c7bbaf459447a, type: 3} + m_Name: + m_EditorClassIdentifier: + ContentText: {fileID: 8414421117376755045} diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextSmall.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextSmall.prefab.meta new file mode 100644 index 0000000..63e3eba --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextSmall.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6689802a48b01104ebd8e101f5cce555 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextTiny.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextTiny.prefab new file mode 100644 index 0000000..b6f4bcd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextTiny.prefab @@ -0,0 +1,163 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4776851047796715385 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4776851047796715384} + - component: {fileID: 2591735382848825812} + - component: {fileID: 7812354180902260709} + m_Layer: 0 + m_Name: MMDebugMenuTextTiny + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4776851047796715384 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4776851047796715385} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4776851049310173812} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2591735382848825812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4776851047796715385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 55 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &7812354180902260709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4776851047796715385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 26996c3ee681f254592c7bbaf459447a, type: 3} + m_Name: + m_EditorClassIdentifier: + ContentText: {fileID: 4776851049310173811} +--- !u!1 &4776851049310173813 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4776851049310173812} + - component: {fileID: 4776851049310173810} + - component: {fileID: 4776851049310173811} + - component: {fileID: 4776851049310173808} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4776851049310173812 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4776851049310173813} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4776851047796715384} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 32.822502} + m_SizeDelta: {x: 0, y: 64.64} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &4776851049310173810 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4776851049310173813} + m_CullTransparentMesh: 0 +--- !u!114 &4776851049310173811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4776851049310173813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hi I'm a tiny smol text +--- !u!225 &4776851049310173808 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4776851049310173813} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextTiny.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextTiny.prefab.meta new file mode 100644 index 0000000..01f989a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTextTiny.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57336066c3d7ff5418ae88b7880aafed +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTitle.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTitle.prefab new file mode 100644 index 0000000..4435260 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTitle.prefab @@ -0,0 +1,225 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2112759074153878704 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2112759074153878705} + - component: {fileID: 2112759074153878707} + - component: {fileID: 2112759074153878706} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2112759074153878705 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074153878704} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2112759074905327846} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 2} + m_Pivot: {x: 0, y: 0} +--- !u!222 &2112759074153878707 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074153878704} + m_CullTransparentMesh: 0 +--- !u!114 &2112759074153878706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074153878704} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2112759074670072756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2112759074670072757} + - component: {fileID: 2112759074670072759} + - component: {fileID: 2112759074670072758} + m_Layer: 0 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2112759074670072757 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074670072756} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2112759074905327846} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: -32.924988} + m_SizeDelta: {x: 1000, y: 134.15} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &2112759074670072759 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074670072756} + m_CullTransparentMesh: 0 +--- !u!114 &2112759074670072758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074670072756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 100 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SETTINGS +--- !u!1 &2112759074905327845 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2112759074905327846} + - component: {fileID: 2112759074905327847} + - component: {fileID: -6668850929698500579} + m_Layer: 0 + m_Name: MMDebugMenuTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2112759074905327846 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074905327845} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2112759074670072757} + - {fileID: 2112759074153878705} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 200} + m_Pivot: {x: 0, y: 0} +--- !u!114 &2112759074905327847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074905327845} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: debc95d929132814d968cb0e4c3c8bca, type: 3} + m_Name: + m_EditorClassIdentifier: + TitleText: {fileID: 2112759074670072758} + TitleLine: {fileID: 2112759074153878706} +--- !u!114 &-6668850929698500579 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2112759074905327845} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 200 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTitle.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTitle.prefab.meta new file mode 100644 index 0000000..8b0b9ed --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuTitle.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 80be1ec3d14da9c489fbefa63b82915f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuValue.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuValue.prefab new file mode 100644 index 0000000..c5313dd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuValue.prefab @@ -0,0 +1,304 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1274023242412750774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1274023242412750775} + - component: {fileID: 1274023242412750769} + - component: {fileID: 1274023242412750768} + - component: {fileID: 1274023242412750771} + m_Layer: 0 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1274023242412750775 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274023242412750774} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1274023243836023483} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 32.822502} + m_SizeDelta: {x: 0, y: 64.64} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &1274023242412750769 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274023242412750774} + m_CullTransparentMesh: 0 +--- !u!114 &1274023242412750768 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274023242412750774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: How many things? +--- !u!225 &1274023242412750771 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274023242412750774} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1274023243836023482 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1274023243836023483} + - component: {fileID: 8075873609782666263} + - component: {fileID: 3610448643810830552} + - component: {fileID: 5339045933480908020} + m_Layer: 0 + m_Name: MMDebugMenuValue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1274023243836023483 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274023243836023482} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1274023242412750775} + - {fileID: 60120433983097499} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 500, y: -402.5} + m_SizeDelta: {x: 1000, y: 55} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8075873609782666263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274023243836023482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: 1000 + m_PreferredHeight: 55 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &3610448643810830552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274023243836023482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5aecab0d11ad9fe47bd4744bf897a145, type: 3} + m_Name: + m_EditorClassIdentifier: + LabelText: {fileID: 1274023242412750768} + ValueText: {fileID: 2644213123065630599} + RadioReceiver: {fileID: 5339045933480908020} +--- !u!114 &5339045933480908020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274023243836023482} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1274023243836023482} + TargetComponent: {fileID: 3610448643810830552} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: Level + RelativeValue: 1 + ModifyX: 1 + ModifyY: 1 + ModifyZ: 1 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 0 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!1 &3596796120184071450 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 60120433983097499} + - component: {fileID: 1308932460096433410} + - component: {fileID: 2644213123065630599} + - component: {fileID: 128177831438745602} + m_Layer: 0 + m_Name: Value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &60120433983097499 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3596796120184071450} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1274023243836023483} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 32.822502} + m_SizeDelta: {x: 0, y: 64.64} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &1308932460096433410 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3596796120184071450} + m_CullTransparentMesh: 0 +--- !u!114 &2644213123065630599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3596796120184071450} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 462a5605cd4f4de48821603c760ce4a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 2566 +--- !u!225 &128177831438745602 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3596796120184071450} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuValue.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuValue.prefab.meta new file mode 100644 index 0000000..89b08d5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugMenuValue.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 855a2d614e531f44caecc17a8c3bd51c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugTouchDisplayPrefab.prefab b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugTouchDisplayPrefab.prefab new file mode 100644 index 0000000..0de8877 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugTouchDisplayPrefab.prefab @@ -0,0 +1,121 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3277800074376256856 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5958022166018464836} + - component: {fileID: 1511424800212680643} + m_Layer: 5 + m_Name: MMDebugTouchDisplayPrefab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5958022166018464836 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3277800074376256856} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5336229000931376357} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -467, y: -101} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1511424800212680643 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3277800074376256856} + m_CullTransparentMesh: 0 +--- !u!1 &4236871187128964548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5336229000931376357} + - component: {fileID: 2390421152137731147} + - component: {fileID: 5677636995112077356} + m_Layer: 5 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5336229000931376357 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4236871187128964548} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5958022166018464836} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 251, y: 251} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2390421152137731147 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4236871187128964548} + m_CullTransparentMesh: 0 +--- !u!114 &5677636995112077356 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4236871187128964548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 4694184556055176316, guid: 72f7a32ac9c7676409eb438757bc6b4a, + type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugTouchDisplayPrefab.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugTouchDisplayPrefab.prefab.meta new file mode 100644 index 0000000..bc21075 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Prefabs/MMDebugTouchDisplayPrefab.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 626a9fe06209d574da486d5d818915f2 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts.meta new file mode 100644 index 0000000..fb5528e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fd33b5a171ef290458423f666a1144cb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands.meta new file mode 100644 index 0000000..3d16712 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3c0ca99476dd73418f733dc8837d50b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands/MMDebugMenuCommands.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands/MMDebugMenuCommands.cs new file mode 100644 index 0000000..7fce181 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands/MMDebugMenuCommands.cs @@ -0,0 +1,173 @@ +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Reflection; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// Command lines to be run from the MMDebugMenu + /// To add new ones, add the [MMDebugLogCommand] attribute to any static method + /// + public class MMDebugMenuCommands : MonoBehaviour + { + /// + /// Outputs Time.time + /// + [MMDebugLogCommand] + public static void Now() + { + string message = "Time.time is " + Time.time; + MMDebug.DebugLogTime(message, "", 3, true); + } + + /// + /// Clears the console + /// + [MMDebugLogCommand] + public static void Clear() + { + MMDebug.DebugLogClear(); + } + + /// + /// Restarts the current scene + /// + [MMDebugLogCommand] + public static void Restart() + { + Scene scene = SceneManager.GetActiveScene(); + SceneManager.LoadScene(scene.name, LoadSceneMode.Single); + } + + /// + /// Reloads the current scene + /// + [MMDebugLogCommand] + public static void Reload() + { + Scene scene = SceneManager.GetActiveScene(); + SceneManager.LoadScene(scene.name, LoadSceneMode.Single); + } + + /// + /// Displays system info + /// + [MMDebugLogCommand] + public static void Sysinfo() + { + MMDebug.DebugLogTime(MMDebug.GetSystemInfo()); + } + + /// + /// Exits the application + /// + [MMDebugLogCommand] + public static void Quit() + { + InternalQuit(); + } + + /// + /// Exits the application + /// + [MMDebugLogCommand] + public static void Exit() + { + InternalQuit(); + } + + /// + /// Displays a list of all the commands + /// + [MMDebugLogCommand] + public static void Help() + { + string result = "LIST OF COMMANDS"; + foreach (MethodInfo method in MMDebug.Commands.OrderBy(m => m.Name)) + { + result += "\n- "+method.Name+""; + } + MMDebug.DebugLogTime(result, "#FFC400", 3, true); + } + + /// + /// Internal method used to exit the app + /// + private static void InternalQuit() + { + #if UNITY_EDITOR + UnityEditor.EditorApplication.isPlaying = false; + #else + Application.Quit(); + #endif + } + + /// + /// Sets the vsync count to the specified parameter + /// + /// + [MMDebugLogCommandArgumentCount(1)] + [MMDebugLogCommand] + public static void Vsync(string[] args) + { + if (int.TryParse(args[1], out int vSyncCount)) + { + QualitySettings.vSyncCount = vSyncCount; + MMDebug.DebugLogTime("VSyncCount set to " + vSyncCount, "#FFC400", 3, true); + } + } + + /// + /// Sets the target framerate to the specified value + /// + /// + [MMDebugLogCommandArgumentCount(1)] + [MMDebugLogCommand] + public static void Framerate(string[] args) + { + if (int.TryParse(args[1], out int framerate)) + { + Application.targetFrameRate = framerate; + MMDebug.DebugLogTime("Framerate set to " + framerate, "#FFC400", 3, true); + } + } + + /// + /// Sets the target timescale to the specified value + /// + /// + [MMDebugLogCommandArgumentCount(1)] + [MMDebugLogCommand] + public static void Timescale(string[] args) + { + if (float.TryParse(args[1], System.Globalization.NumberStyles.Float, CultureInfo.InvariantCulture, out float timescale)) + { + Time.timeScale = timescale; + MMDebug.DebugLogTime("Timescale set to " + timescale, "#FFC400", 3, true); + } + } + + /// + /// Computes and displays the biggest int out of the two passed in arguments + /// Just an example of how you can do multiple argument commands + /// + /// + [MMDebugLogCommandArgumentCount(2)] + [MMDebugLogCommand] + public static void Biggest(string[] args) + { + if (int.TryParse(args[1], out int i1) && int.TryParse(args[2], out int i2)) + { + string result; + int biggest = (i1 >= i2) ? i1 : i2; + result = biggest + " is the biggest number"; + MMDebug.DebugLogTime(result, "#FFC400", 3, true); + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands/MMDebugMenuCommands.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands/MMDebugMenuCommands.cs.meta new file mode 100644 index 0000000..3915115 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Commands/MMDebugMenuCommands.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e4e4b1cacbffd14ebb3aea93190805f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events.meta new file mode 100644 index 0000000..80f1e9c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eada5cd1ed867c44e9de94da9de97bde +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEvent.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEvent.cs new file mode 100644 index 0000000..a52e81f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEvent.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// An event used to broadcast button events from a MMDebugMenu + /// + public struct MMDebugMenuButtonEvent + { + public enum EventModes { FromButton, SetButton } + + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(string buttonEventName, bool active = true, EventModes eventMode = EventModes.FromButton); + static public void Trigger(string buttonEventName, bool active = true, EventModes eventMode = EventModes.FromButton) + { + OnEvent?.Invoke(buttonEventName, active, eventMode); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEvent.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEvent.cs.meta new file mode 100644 index 0000000..b359042 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fb7575f8c305d244ba40b4b661d997c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEventListener.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEventListener.cs new file mode 100644 index 0000000..bf72507 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEventListener.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// An event fired when a button gets pressed in a MMDebugMenu + /// + [Serializable] + public class MMDButtonPressedEvent : UnityEvent + { + } + + /// + /// A class used to listen to button events from a MMDebugMenu + /// + public class MMDebugMenuButtonEventListener : MonoBehaviour + { + [Header("Event")] + /// the name of the event to listen to + public string ButtonEventName = "Button"; + /// an event to fire when the event is heard + public MMDButtonPressedEvent MMDEvent; + + [Header("Test")] + public bool TestValue = true; + [MMInspectorButton("TestSetValue")] + public bool TestSetValueButton; + + /// + /// This test methods will send a set event to all buttons bound to the ButtonEventName + /// + protected virtual void TestSetValue() + { + MMDebugMenuButtonEvent.Trigger(ButtonEventName, TestValue, MMDebugMenuButtonEvent.EventModes.SetButton); + } + + /// + /// When we get a menu button event, we invoke + /// + /// + protected virtual void OnMMDebugMenuButtonEvent(string buttonEventName, bool value, MMDebugMenuButtonEvent.EventModes eventMode) + { + if ((eventMode == MMDebugMenuButtonEvent.EventModes.FromButton) && (buttonEventName == ButtonEventName)) + { + if (MMDEvent != null) + { + MMDEvent.Invoke(); + } + } + } + + /// + /// Starts listening for events + /// + public virtual void OnEnable() + { + MMDebugMenuButtonEvent.Register(OnMMDebugMenuButtonEvent); + } + + /// + /// Stops listening for events + /// + public virtual void OnDisable() + { + MMDebugMenuButtonEvent.Unregister(OnMMDebugMenuButtonEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEventListener.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEventListener.cs.meta new file mode 100644 index 0000000..806d07a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuButtonEventListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2313508e7b935c54d9877ca20548a1b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEvent.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEvent.cs new file mode 100644 index 0000000..5e9a404 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEvent.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// An event used to broadcast checkbox events from a MMDebugMenu + /// + public struct MMDebugMenuCheckboxEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public enum EventModes { FromCheckbox, SetCheckbox } + public delegate void Delegate(string checkboxEventName, bool value, EventModes eventMode = EventModes.FromCheckbox); + static public void Trigger(string checkboxEventName, bool value, EventModes eventMode = EventModes.FromCheckbox) + { + OnEvent?.Invoke(checkboxEventName, value, eventMode); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEvent.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEvent.cs.meta new file mode 100644 index 0000000..83eff14 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d039e33a2be33f14e98835c8a207cc1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEventListener.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEventListener.cs new file mode 100644 index 0000000..220948a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEventListener.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + [Serializable] + public class MMDCheckboxPressedEvent : UnityEvent { } + [Serializable] + public class MMDCheckboxTrueEvent : UnityEvent { } + [Serializable] + public class MMDCheckboxFalseEvent : UnityEvent { } + + /// + /// A class used to listen to events from a MMDebugMenu's checkbox + /// + public class MMDebugMenuCheckboxEventListener : MonoBehaviour + { + [Header("Events")] + /// the name of the event to listen to + public string CheckboxEventName = "CheckboxEventName"; + /// an event fired when the checkbox gets pressed + public MMDCheckboxPressedEvent MMDPressedEvent; + /// an event fired when the checkbox is pressed and becomes true/checked + public MMDCheckboxTrueEvent MMDTrueEvent; + /// an event fired when the checkbox is pressed and becomes false/unchecked + public MMDCheckboxFalseEvent MMDFalseEvent; + + [Header("Test")] + public bool TestValue = true; + [MMInspectorButton("TestSetValue")] + public bool TestSetValueButton; + + /// + /// This test methods will send a set event to all checkboxes bound to the CheckboxEventName + /// + protected virtual void TestSetValue() + { + MMDebugMenuCheckboxEvent.Trigger(CheckboxEventName, TestValue, MMDebugMenuCheckboxEvent.EventModes.SetCheckbox); + } + + /// + /// When get a checkbox event, we invoke our events if needed + /// + /// + /// + protected virtual void OnMMDebugMenuCheckboxEvent(string checkboxNameEvent, bool value, MMDebugMenuCheckboxEvent.EventModes eventMode) + { + if ((eventMode == MMDebugMenuCheckboxEvent.EventModes.FromCheckbox) && (checkboxNameEvent == CheckboxEventName)) + { + if (MMDPressedEvent != null) + { + MMDPressedEvent.Invoke(value); + } + + if (value) + { + if (MMDTrueEvent != null) + { + MMDTrueEvent.Invoke(); + } + } + else + { + if (MMDFalseEvent != null) + { + MMDFalseEvent.Invoke(); + } + } + } + } + + /// + /// Starts listening for events + /// + public virtual void OnEnable() + { + MMDebugMenuCheckboxEvent.Register(OnMMDebugMenuCheckboxEvent); + } + + /// + /// Stops listening for events + /// + public virtual void OnDisable() + { + MMDebugMenuCheckboxEvent.Unregister(OnMMDebugMenuCheckboxEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEventListener.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEventListener.cs.meta new file mode 100644 index 0000000..910e4af --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuCheckboxEventListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9091b3d5ef7624b47a328c984fa25e09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEvent.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEvent.cs new file mode 100644 index 0000000..f485e0d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEvent.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// An event used to broadcast slider events from a MMDebugMenu + /// + public struct MMDebugMenuSliderEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public enum EventModes { FromSlider, SetSlider } + public delegate void Delegate(string sliderEventName, float value, EventModes eventMode = EventModes.FromSlider); + static public void Trigger(string sliderEventName, float value, EventModes eventMode = EventModes.FromSlider) + { + OnEvent?.Invoke(sliderEventName, value, eventMode); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEvent.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEvent.cs.meta new file mode 100644 index 0000000..ab7717f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e815f28291646fc47a4ea53fa52db2a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEventListener.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEventListener.cs new file mode 100644 index 0000000..a65130f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEventListener.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + [Serializable] + public class MMDSliderValueChangedEvent : UnityEvent { } + + /// + /// A class used to listen to slider events from a MMDebugMenu + /// + public class MMDebugMenuSliderEventListener : MonoBehaviour + { + [Header("Events")] + /// the name of the slider event to listen to + public string SliderEventName = "SliderEventName"; + /// an event fired when the slider's value changes + public MMDSliderValueChangedEvent MMDValueChangedEvent; + + [Header("Test")] + [Range(0f, 1f)] + public float TestValue = 1f; + [MMInspectorButton("TestSetValue")] + public bool TestSetValueButton; + + /// + /// This test methods will send a set event to all sliders bound to the SliderEventName + /// + protected virtual void TestSetValue() + { + MMDebugMenuSliderEvent.Trigger(SliderEventName, TestValue, MMDebugMenuSliderEvent.EventModes.SetSlider); + } + + /// + /// When we get a slider event, we trigger an event if needed + /// + /// + /// + protected virtual void OnMMDebugMenuSliderEvent(string sliderEventName, float value, MMDebugMenuSliderEvent.EventModes eventMode) + { + if ( (eventMode == MMDebugMenuSliderEvent.EventModes.FromSlider) + && (sliderEventName == SliderEventName)) + { + if (MMDValueChangedEvent != null) + { + MMDValueChangedEvent.Invoke(value); + } + } + } + + /// + /// Starts listening for events + /// + public virtual void OnEnable() + { + MMDebugMenuSliderEvent.Register(OnMMDebugMenuSliderEvent); + } + + /// + /// Stops listening for events + /// + public virtual void OnDisable() + { + MMDebugMenuSliderEvent.Unregister(OnMMDebugMenuSliderEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEventListener.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEventListener.cs.meta new file mode 100644 index 0000000..29401d7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Events/MMDebugMenuSliderEventListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 186a986c8de07d3478b88dc10e508869 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenu.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenu.cs new file mode 100644 index 0000000..4371eaf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenu.cs @@ -0,0 +1,523 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.Events; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A debug menu helper, meant to help create quick mobile friendly debug menus + /// + public class MMDebugMenu : MonoBehaviour + { + /// the possible directions for the menu to appear + public enum ToggleDirections { TopToBottom, LeftToRight, RightToLeft, BottomToTop } + + [Header("Data")] + /// the scriptable object containing the menu's data + public MMDebugMenuData Data; + + [Header("Bindings")] + /// the container of the whole menu + public CanvasGroup MenuContainer; + /// the scrolling contents + public RectTransform Contents; + /// the menu's background image + public Image MenuBackground; + /// the icon used to close the menu + public Image CloseIcon; + /// the tab bar (where the tab buttons go) + public RectTransform TabBar; + /// the tab contents container (where the contents of the page will go) + public RectTransform TabContainer; + /// the tab manager + public MMDebugMenuTabManager TabManager; + /// the MoreMountains logo + public Image MMLogo; + + [Header("Events")] + /// an event to call when the menu opens + public UnityEvent OnOpenEvent; + /// an event to call when the menu closes + public UnityEvent OnCloseEvent; + + [Header("Test")] + /// whether or not this menu is active at this moment + [MMReadOnly] + public bool Active = false; + /// a test button to toggle the menu + [MMInspectorButton("ToggleMenu")] + public bool ToggleButton; + + protected RectTransform _containerRect; + protected Vector3 _initialContainerPosition; + protected Vector3 _offPosition; + protected Vector3 _newPosition; + protected bool _toggling = false; + + /// + /// On Start we init our menu + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// Prepares transitions and grabs components + /// + protected virtual void Initialization() + { + + if (Data != null) + { + FillMenu(); + } + + CloseIcon.color = Data.TextColor; + _containerRect = MenuContainer.GetComponent(); + _initialContainerPosition = _containerRect.localPosition; + MenuBackground.color = Data.BackgroundColor; + switch (Data.ToggleDirection) + { + case ToggleDirections.RightToLeft: + _offPosition = _initialContainerPosition + Vector3.right * _containerRect.rect.width; + break; + case ToggleDirections.LeftToRight: + _offPosition = _initialContainerPosition + Vector3.left * _containerRect.rect.width; + break; + case ToggleDirections.TopToBottom: + _offPosition = _initialContainerPosition + Vector3.up * _containerRect.rect.height; + break; + case ToggleDirections.BottomToTop: + _offPosition = _initialContainerPosition + Vector3.down * _containerRect.rect.height; + break; + } + + _containerRect.localPosition = _offPosition; + + } + + /// + /// Fills the menu based on the data's contents + /// + public virtual void FillMenu(bool triggerEvents = false) + { + int tabCounter = 0; + if (MMLogo != null) + { + MMLogo.color = Data.TextColor; + } + + foreach (Transform child in Contents.transform) + { + GameObject.Destroy(child.gameObject); + } + + foreach (Transform child in TabBar.transform) + Destroy(child.gameObject); + + TabManager.Tabs.Clear(); + TabManager.TabsContents.Clear(); + + foreach(MMDebugMenuTabData tab in Data.Tabs) + { + if (!tab.Active) + { + continue; + } + + // create tab in the menu + MMDebugMenuTab tabBarTab = Instantiate(Data.TabPrefab); + tabBarTab.SelectedBackgroundColor = Data.TextColor; + tabBarTab.SelectedTextColor = Data.BackgroundColor; + tabBarTab.DeselectedBackgroundColor = Data.BackgroundColor; + tabBarTab.DeselectedTextColor = Data.TextColor; + tabBarTab.TabText.text = tab.Name; + tabBarTab.TabText.font = Data.RegularFont; + tabBarTab.transform.SetParent(TabBar); + tabBarTab.Index = tabCounter; + tabBarTab.Manager = TabManager; + TabManager.Tabs.Add(tabBarTab); + + // create tab contents + MMDebugMenuTabContents contents = Instantiate(Data.TabContentsPrefab); + contents.transform.SetParent(TabContainer); + RectTransform rectTransform = contents.GetComponent(); + rectTransform.MMSetLeft(0f); + rectTransform.MMSetRight(0f); + rectTransform.MMSetTop(0f); + rectTransform.MMSetBottom(0f); + contents.Index = tabCounter; + FillTab(contents, tabCounter, triggerEvents); + if (tabCounter == Data.InitialActiveTabIndex) + { + contents.gameObject.SetActive(true); + tabBarTab.Select(); + } + else + { + contents.gameObject.SetActive(false); + tabBarTab.Deselect(); + } + TabManager.TabsContents.Add(contents); + + tabCounter++; + } + + // debug tab + if (Data.DisplayDebugTab) + { + MMDebugMenuTab tabBarTab = Instantiate(Data.TabPrefab); + tabBarTab.SelectedBackgroundColor = Data.TextColor; + tabBarTab.SelectedTextColor = Data.BackgroundColor; + tabBarTab.DeselectedBackgroundColor = Data.BackgroundColor; + tabBarTab.DeselectedTextColor = Data.TextColor; + tabBarTab.TabText.text = Data.DebugTabName; + tabBarTab.TabText.font = Data.RegularFont; + tabBarTab.transform.SetParent(TabBar); + tabBarTab.Index = tabCounter; + tabBarTab.Manager = TabManager; + TabManager.Tabs.Add(tabBarTab); + + MMDebugMenuDebugTab debugTab = Instantiate(Data.DebugTabPrefab); + debugTab.DebugText.color = Data.TextColor; + debugTab.DebugText.font = Data.RegularFont; + debugTab.transform.SetParent(TabContainer); + + debugTab.CommandPrompt.textComponent.font = Data.RegularFont; + debugTab.CommandPrompt.textComponent.color = Data.TextColor; + + debugTab.CommandPromptCharacter.font = Data.RegularFont; + debugTab.CommandPromptCharacter.color = Data.TextColor; + + MMDebugMenuTabContents debugTabContents = debugTab.GetComponent(); + debugTabContents.Index = tabCounter; + TabManager.TabsContents.Add(debugTabContents); + RectTransform rectTransform = debugTabContents.GetComponent(); + rectTransform.MMSetLeft(0f); + rectTransform.MMSetRight(0f); + rectTransform.MMSetTop(0f); + rectTransform.MMSetBottom(0f); + if (tabCounter == Data.InitialActiveTabIndex) + { + debugTab.gameObject.SetActive(true); + TabManager.Tabs[tabCounter].Select(); + } + else + { + debugTab.gameObject.SetActive(false); + TabManager.Tabs[tabCounter].Deselect(); + } + tabCounter++; + } + + // fill with spacers + int spacerCount = Data.MaxTabs - tabCounter; + for (int i = 0; i < spacerCount; i++) + { + RectTransform spacer = Instantiate(Data.TabSpacerPrefab); + spacer.transform.SetParent(TabBar); + } + + } + + protected virtual void FillTab(MMDebugMenuTabContents tab, int index, bool triggerEvents = false) + { + Transform parent = tab.Parent; + + foreach (MMDebugMenuItem item in Data.Tabs[index].MenuItems) + { + if (!item.Active) + { + continue; + } + + switch (item.Type) + { + case MMDebugMenuItem.MMDebugMenuItemTypes.Button: + MMDebugMenuItemButton button; + button = (item.ButtonType == MMDebugMenuItem.MMDebugMenuItemButtonTypes.Border) ? Instantiate(Data.ButtonBorderPrefab) : Instantiate(Data.ButtonPrefab); + button.name = "MMDebugMenuItemButton_" + item.Name; + button.ButtonText.text = item.ButtonText; + button.ButtonEventName = item.ButtonEventName; + if (item.ButtonType == MMDebugMenuItem.MMDebugMenuItemButtonTypes.Border) + { + button.ButtonText.color = Data.AccentColor; + button.ButtonBg.color = Data.TextColor; + } + else + { + button.ButtonText.color = Data.BackgroundColor; + button.ButtonBg.color = Data.AccentColor; + } + button.ButtonText.font = Data.RegularFont; + button.transform.SetParent(parent); + break; + + case MMDebugMenuItem.MMDebugMenuItemTypes.Checkbox: + MMDebugMenuItemCheckbox checkbox = Instantiate(Data.CheckboxPrefab); + checkbox.name = "MMDebugMenuItemCheckbox_" + item.Name; + checkbox.SwitchText.text = item.CheckboxText; + if (item.CheckboxInitialState) + { + checkbox.Switch.SetTrue(); + } + else + { + checkbox.Switch.SetFalse(); + } + checkbox.CheckboxEventName = item.CheckboxEventName; + checkbox.transform.SetParent(parent); + checkbox.Switch.GetComponent().color = Data.AccentColor; + checkbox.SwitchText.color = Data.TextColor; + checkbox.SwitchText.font = Data.RegularFont; + break; + + case MMDebugMenuItem.MMDebugMenuItemTypes.Slider: + MMDebugMenuItemSlider slider = Instantiate(Data.SliderPrefab); + slider.name = "MMDebugMenuItemSlider_" + item.Name; + slider.Mode = item.SliderMode; + slider.RemapZero = item.SliderRemapZero; + slider.RemapOne = item.SliderRemapOne; + slider.TargetSlider.value = MMMaths.Remap(item.SliderInitialValue, item.SliderRemapZero, item.SliderRemapOne, 0f, 1f); + slider.transform.SetParent(parent); + + slider.SliderText.text = item.SliderText; + slider.SliderText.color = Data.TextColor; + slider.SliderText.font = Data.RegularFont; + + slider.SliderValueText.text = (item.SliderMode == MMDebugMenuItemSlider.Modes.Int) ? item.SliderInitialValue.ToString() : item.SliderInitialValue.ToString("F3"); + slider.SliderValueText.color = Data.AccentColor; + slider.SliderValueText.font = Data.BoldFont; + + slider.SliderKnob.color = Data.AccentColor; + slider.SliderLine.color = Data.TextColor; + + slider.SliderEventName = item.SliderEventName; + break; + + case MMDebugMenuItem.MMDebugMenuItemTypes.Spacer: + GameObject spacerPrefab = (item.SpacerType == MMDebugMenuItem.MMDebugMenuItemSpacerTypes.Small) ? Data.SpacerSmallPrefab : Data.SpacerBigPrefab; + GameObject spacer = Instantiate(spacerPrefab); + spacer.name = "MMDebugMenuItemSpacer_" + item.Name; + spacer.transform.SetParent(parent); + break; + + case MMDebugMenuItem.MMDebugMenuItemTypes.Title: + MMDebugMenuItemTitle title = Instantiate(Data.TitlePrefab); + title.name = "MMDebugMenuItemSlider_" + item.Name; + title.TitleText.text = item.TitleText; + title.TitleText.color = Data.TextColor; + title.TitleText.font = Data.BoldFont; + title.TitleLine.color = Data.AccentColor; + title.transform.SetParent(parent); + break; + + case MMDebugMenuItem.MMDebugMenuItemTypes.Choices: + MMDebugMenuItemChoices choicesPrefab; + if (item.ChoicesType == MMDebugMenuItem.MMDebugMenuItemChoicesTypes.TwoChoices) + { + choicesPrefab = Data.TwoChoicesPrefab; + } + else + { + choicesPrefab = Data.ThreeChoicesPrefab; + } + + MMDebugMenuItemChoices choices = Instantiate(choicesPrefab); + choices.name = "MMDebugMenuItemChoices_" + item.Name; + + choices.Choices[0].ButtonText.text = item.ChoiceOneText; + choices.Choices[1].ButtonText.text = item.ChoiceTwoText; + + choices.Choices[0].ButtonEventName = item.ChoiceOneEventName; + choices.Choices[1].ButtonEventName = item.ChoiceTwoEventName; + + if (item.ChoicesType == MMDebugMenuItem.MMDebugMenuItemChoicesTypes.ThreeChoices) + { + choices.Choices[2].ButtonEventName = item.ChoiceThreeEventName; + choices.Choices[2].ButtonText.text = item.ChoiceThreeText; + } + + choices.OffColor = Data.BackgroundColor; + choices.OnColor = Data.TextColor; + choices.AccentColor = Data.AccentColor; + + foreach (MMDebugMenuChoiceEntry entry in choices.Choices) + { + if (entry != null) + { + entry.ButtonText.font = Data.RegularFont; + } + } + + choices.Select(item.SelectedChoice); + if (triggerEvents) + choices.TriggerButtonEvent(item.SelectedChoice); + + choices.transform.SetParent(parent); + break; + + case MMDebugMenuItem.MMDebugMenuItemTypes.Value: + MMDebugMenuItemValue value = Instantiate(Data.ValuePrefab); + value.name = "MMDebugMenuItemValue_" + item.Name; + value.LabelText.text = item.ValueLabel; + value.LabelText.color = Data.TextColor; + value.LabelText.font = Data.RegularFont; + value.ValueText.text = item.ValueInitialValue; + value.ValueText.color = Data.AccentColor; + value.ValueText.font = Data.BoldFont; + value.RadioReceiver.Channel = item.ValueMMRadioReceiverChannel; + value.transform.SetParent(parent); + break; + + case MMDebugMenuItem.MMDebugMenuItemTypes.Text: + + MMDebugMenuItemText textPrefab; + switch (item.TextType) + { + case MMDebugMenuItem.MMDebugMenuItemTextTypes.Tiny: + textPrefab = Data.TextTinyPrefab; + break; + case MMDebugMenuItem.MMDebugMenuItemTextTypes.Small: + textPrefab = Data.TextSmallPrefab; + break; + case MMDebugMenuItem.MMDebugMenuItemTextTypes.Long: + textPrefab = Data.TextLongPrefab; + break; + default: + textPrefab = Data.TextTinyPrefab; + break; + } + MMDebugMenuItemText text = Instantiate(textPrefab); + text.name = "MMDebugMenuItemText_" + item.Name; + text.ContentText.text = item.TextContents; + text.ContentText.color = Data.TextColor; + text.ContentText.font = Data.RegularFont; + text.transform.SetParent(parent); + break; + } + } + + // we always add a spacer at the end because scrollviews are terrible + GameObject finalSpacer = Instantiate(Data.SpacerBigPrefab); + finalSpacer.name = "MMDebugMenuItemSpacer_FinalSpacer"; + finalSpacer.transform.SetParent(parent); + } + + /// + /// Makes the menu appear + /// + public virtual void OpenMenu() + { + OnOpenEvent?.Invoke(); + StartCoroutine(ToggleCo(false)); + } + + /// + /// Makes the menu disappear + /// + public virtual void CloseMenu() + { + StartCoroutine(ToggleCo(true)); + } + + /// + /// Closes or opens the menu depending on its current state + /// + public virtual void ToggleMenu() + { + StartCoroutine(ToggleCo(Active)); + } + + /// + /// A coroutine used to toggle the menu + /// + /// + /// + protected virtual IEnumerator ToggleCo(bool active) + { + if (_toggling) + { + yield break; + } + if (!active) + { + OnOpenEvent?.Invoke(); + _containerRect.gameObject.SetActive(true); + } + _toggling = true; + Active = active; + _newPosition = active ? _offPosition : _initialContainerPosition; + MMTween.MoveRectTransform(this, _containerRect, _containerRect.localPosition, _newPosition, null, 0f, Data.ToggleDuration, Data.ToggleCurve, ignoreTimescale:true); + yield return MMCoroutine.WaitForUnscaled(Data.ToggleDuration); + if (active) + { + OnCloseEvent?.Invoke(); + _containerRect.gameObject.SetActive(false); + } + Active = !active; + _toggling = false; + } + + /// + /// On update we handle our input + /// + protected virtual void Update() + { + HandleInput(); + } + + /// + /// Looks for shortcut input + /// + protected virtual void HandleInput() + { + bool input = false; + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Data.ToggleKey].wasPressedThisFrame; + #else + input = Input.GetKeyDown(Data.ToggleShortcut); + #endif + + if (input) + { + ToggleMenu(); + } + } + + /// + /// Routes console logs to the MMDebugConsole + /// + /// + /// + /// + protected virtual void CaptureConsoleLog(string logString, string stackTrace, LogType type) + { + MMDebug.LogDebugToConsole(logString + " (" + type + ")", "#00FFFF", 3, false); + } + + /// + /// On Enable, we start listening for log messages + /// + protected virtual void OnEnable() + { + Application.logMessageReceived += CaptureConsoleLog; + } + + /// + /// On Disable, we stop listening for log messages + /// + protected virtual void OnDisable() + { + Application.logMessageReceived -= CaptureConsoleLog; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenu.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenu.cs.meta new file mode 100644 index 0000000..f40e814 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65772fc08a0d9314f86205390e1e772d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuData.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuData.cs new file mode 100644 index 0000000..82654ed --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuData.cs @@ -0,0 +1,179 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +#if MM_UI + +namespace MoreMountains.Tools +{ + /// + /// A class used to store and display a reorderable list of menu items + /// + [Serializable] + public class MMDebugMenuItemList : MMReorderableArray + { + + } + + [Serializable] + public class MMDebugMenuTabData + { + public string Name = "TabName"; + public bool Active = true; + [MMReorderableAttribute] + public MMDebugMenuItemList MenuItems; + } + + /// + /// A class used to store a menu item + /// + [Serializable] + public class MMDebugMenuItem + { + // EDITOR NAME + public string Name; + public bool Active = true; + public enum MMDebugMenuItemTypes { Title, Spacer, Button, Checkbox, Slider, Text, Value, Choices } + + public MMDebugMenuItemTypes Type = MMDebugMenuItemTypes.Title; + + // TITLE + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Title)] + public string TitleText = "Title text"; + + // TEXT + public enum MMDebugMenuItemTextTypes { Tiny, Small, Long } + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Text)] + public MMDebugMenuItemTextTypes TextType = MMDebugMenuItemTextTypes.Tiny; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Text)] + public string TextContents = "Lorem ipsum dolor sit amet"; + + // CHOICES + public enum MMDebugMenuItemChoicesTypes { TwoChoices, ThreeChoices } + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Choices)] + public MMDebugMenuItemChoicesTypes ChoicesType = MMDebugMenuItemChoicesTypes.TwoChoices; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Choices)] + public string ChoiceOneText; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Choices)] + public string ChoiceOneEventName = "ChoiceOneEvent"; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Choices)] + public string ChoiceTwoText; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Choices)] + public string ChoiceTwoEventName = "ChoiceTwoEvent"; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Choices)] + public string ChoiceThreeText; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Choices)] + public string ChoiceThreeEventName = "ChoiceThreeEvent"; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Choices)] + public int SelectedChoice = 0; + + // VALUE + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Value)] + public string ValueLabel = "Value Label"; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Value)] + public string ValueInitialValue = "255"; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Value)] + public int ValueMMRadioReceiverChannel = 0; + + // BUTTON + public enum MMDebugMenuItemButtonTypes { Border, Full } + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Button)] + public string ButtonText = "Button text"; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Button)] + public MMDebugMenuItemButtonTypes ButtonType = MMDebugMenuItemButtonTypes.Border; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Button)] + public string ButtonEventName = "Button"; + + // SPACER + public enum MMDebugMenuItemSpacerTypes { Small, Big } + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Spacer)] + public MMDebugMenuItemSpacerTypes SpacerType = MMDebugMenuItemSpacerTypes.Small; + + // CHECKBOX + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Checkbox)] + public string CheckboxText; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Checkbox)] + public bool CheckboxInitialState = false; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Checkbox)] + public string CheckboxEventName = "CheckboxEventName"; + + // SLIDER + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Slider)] + public MMDebugMenuItemSlider.Modes SliderMode = MMDebugMenuItemSlider.Modes.Float; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Slider)] + public string SliderText; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Slider)] + public float SliderRemapZero = 0f; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Slider)] + public float SliderRemapOne = 1f; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Slider)] + public float SliderInitialValue = 0f; + [MMEnumCondition("Type", (int)MMDebugMenuItemTypes.Slider)] + public string SliderEventName = "Slider"; + + [MMHidden] + public MMDebugMenuItemSlider TargetSlider; + [MMHidden] + public MMDebugMenuItemButton TargetButton; + [MMHidden] + public MMDebugMenuItemCheckbox TargetCheckbox; + } + + /// + /// A data class used to store the contents of a debug menu + /// + [CreateAssetMenu(fileName = "MMDebugMenuData", menuName = "MoreMountains/MMDebugMenu/MMDebugMenuData")] + public class MMDebugMenuData : ScriptableObject + { + [Header("Prefabs")] + public MMDebugMenuItemTitle TitlePrefab; + public MMDebugMenuItemButton ButtonPrefab; + public MMDebugMenuItemButton ButtonBorderPrefab; + public MMDebugMenuItemCheckbox CheckboxPrefab; + public MMDebugMenuItemSlider SliderPrefab; + public GameObject SpacerSmallPrefab; + public GameObject SpacerBigPrefab; + public MMDebugMenuItemText TextTinyPrefab; + public MMDebugMenuItemText TextSmallPrefab; + public MMDebugMenuItemText TextLongPrefab; + public MMDebugMenuItemValue ValuePrefab; + public MMDebugMenuItemChoices TwoChoicesPrefab; + public MMDebugMenuItemChoices ThreeChoicesPrefab; + public MMDebugMenuTab TabPrefab; + public MMDebugMenuTabContents TabContentsPrefab; + public RectTransform TabSpacerPrefab; + public MMDebugMenuDebugTab DebugTabPrefab; + public string DebugTabName = "Logs"; + + [Header("Tabs")] + public List Tabs; + public bool DisplayDebugTab = true; + public int MaxTabs = 5; + public int InitialActiveTabIndex = 0; + + [Header("Toggle")] + public MMDebugMenu.ToggleDirections ToggleDirection = MMDebugMenu.ToggleDirections.RightToLeft; + public float ToggleDuration = 0.2f; + public MMTween.MMTweenCurve ToggleCurve = MMTween.MMTweenCurve.EaseInCubic; + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + public Key ToggleKey = Key.Backquote; + #else + public KeyCode ToggleShortcut = KeyCode.Quote; + #endif + + [Header("Style")] + public Font RegularFont; + public Font BoldFont; + public Color BackgroundColor = Color.black; + public Color AccentColor = MMColors.ReunoYellow; + public Color TextColor = Color.white; + } +} + +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuData.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuData.cs.meta new file mode 100644 index 0000000..2fe460e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuData.cs.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: b950a5ce764708a4ca0425a952fce75f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - TitlePrefab: {fileID: 2112759074905327847, guid: 80be1ec3d14da9c489fbefa63b82915f, + type: 3} + - ButtonPrefab: {fileID: 7110842687765492728, guid: dbb3e138861cf2040b20217e62a5edf2, + type: 3} + - ButtonBorderPrefab: {fileID: 1985568128000399461, guid: f2be8011322fbf943a44edc64dedbf2c, + type: 3} + - CheckboxPrefab: {fileID: 2731002163667230428, guid: e48b9501c5356cf4e9c390d40d81438c, + type: 3} + - SliderPrefab: {fileID: 8595552693496322647, guid: addcaa6f7df18984691dc300b3be4f7b, + type: 3} + - SpacerSmallPrefab: {fileID: 3952073977153845988, guid: 1a4b9ae95443d5a489bd918c848e2390, + type: 3} + - SpacerBigPrefab: {fileID: 8096383012134595547, guid: f72e7b8c96262ed4d976576afafd53b0, + type: 3} + - TextTinyPrefab: {fileID: 7812354180902260709, guid: 57336066c3d7ff5418ae88b7880aafed, + type: 3} + - TextSmallPrefab: {fileID: 6550416838355534067, guid: 6689802a48b01104ebd8e101f5cce555, + type: 3} + - TextLongPrefab: {fileID: 7073910567540320170, guid: 4332ad3ebf8592c41bc275ff77d24b29, + type: 3} + - ValuePrefab: {fileID: 3610448643810830552, guid: 855a2d614e531f44caecc17a8c3bd51c, + type: 3} + - TwoChoicesPrefab: {fileID: 5258430688713385724, guid: 90a0e72c11dfcbe4f88bccc465c6a0cd, + type: 3} + - ThreeChoicesPrefab: {fileID: 207464785538935126, guid: 804c003da46ec914e80badaf93e6d2da, + type: 3} + - TabPrefab: {fileID: 3232960445196542265, guid: a8296d633c27f554a99bbbf94958722e, + type: 3} + - TabContentsPrefab: {fileID: 2838565908494160927, guid: f2f0b25301bf93e43ac5ecc33208a420, + type: 3} + - TabSpacerPrefab: {fileID: 2188017814106785258, guid: 57633cde530d56a48995d0733efa9450, + type: 3} + - DebugTabPrefab: {fileID: 521718878734460126, guid: 94cfa935aa4cff74a9451b22cb7627a6, + type: 3} + - RegularFont: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + - BoldFont: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems.meta new file mode 100644 index 0000000..f624169 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c68de6e839f65554eb79ea21fc34c164 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemButton.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemButton.cs new file mode 100644 index 0000000..9f74151 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemButton.cs @@ -0,0 +1,67 @@ +#if MM_UI +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to bind a button to a MMDebugMenu + /// + public class MMDebugMenuItemButton : MonoBehaviour + { + [Header("Bindings")] + /// the associated button + public Button TargetButton; + /// the button's text comp + public Text ButtonText; + /// the button's background image + public Image ButtonBg; + /// the name of the event bound to this button + public string ButtonEventName = "Button"; + + protected bool _listening = false; + + /// + /// Triggers a button event using the button's event name + /// + public virtual void TriggerButtonEvent() + { + MMDebugMenuButtonEvent.Trigger(ButtonEventName); + } + + protected virtual void OnMMDebugMenuButtonEvent(string checkboxEventName, bool active, MMDebugMenuButtonEvent.EventModes eventMode) + { + if ((eventMode == MMDebugMenuButtonEvent.EventModes.SetButton) + && (checkboxEventName == ButtonEventName) + && (TargetButton != null)) + { + TargetButton.interactable = active; + } + } + + /// + /// Starts listening for events + /// + public virtual void OnEnable() + { + if (!_listening) + { + _listening = true; + MMDebugMenuButtonEvent.Register(OnMMDebugMenuButtonEvent); + } + } + + /// + /// Stops listening for events + /// + public virtual void OnDestroy() + { + _listening = false; + MMDebugMenuButtonEvent.Unregister(OnMMDebugMenuButtonEvent); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemButton.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemButton.cs.meta new file mode 100644 index 0000000..2902637 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4111d7e29da39ee46b807daa22dd3af9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemCheckbox.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemCheckbox.cs new file mode 100644 index 0000000..a415f08 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemCheckbox.cs @@ -0,0 +1,104 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to bind a checkbox to a MMDebugMenu + /// + public class MMDebugMenuItemCheckbox : MonoBehaviour + { + [Header("Bindings")] + /// the switch used to display the checkbox + public MMDebugMenuSwitch Switch; + /// the text used to display the checkbox's text + public Text SwitchText; + /// the name of the checkbox event + public string CheckboxEventName = "Checkbox"; + + protected bool _valueSetThisFrame = false; + protected bool _listening = false; + + /// + /// Triggers an event when the checkbox gets pressed + /// + public virtual void TriggerCheckboxEvent() + { + if (_valueSetThisFrame) + { + _valueSetThisFrame = false; + return; + } + MMDebugMenuCheckboxEvent.Trigger(CheckboxEventName, Switch.SwitchState, MMDebugMenuCheckboxEvent.EventModes.FromCheckbox); + } + + /// + /// Triggers an event when the checkbox gets checked and becomes true + /// + public virtual void TriggerCheckboxEventTrue() + { + if (_valueSetThisFrame) + { + _valueSetThisFrame = false; + return; + } + MMDebugMenuCheckboxEvent.Trigger(CheckboxEventName, true, MMDebugMenuCheckboxEvent.EventModes.FromCheckbox); + } + + /// + /// Triggers an event when the checkbox gets unchecked and becomes false + /// + public virtual void TriggerCheckboxEventFalse() + { + if (_valueSetThisFrame) + { + _valueSetThisFrame = false; + return; + } + MMDebugMenuCheckboxEvent.Trigger(CheckboxEventName, false, MMDebugMenuCheckboxEvent.EventModes.FromCheckbox); + } + + protected virtual void OnMMDebugMenuCheckboxEvent(string checkboxEventName, bool value, MMDebugMenuCheckboxEvent.EventModes eventMode) + { + if ((eventMode == MMDebugMenuCheckboxEvent.EventModes.SetCheckbox) + && (checkboxEventName == CheckboxEventName)) + { + _valueSetThisFrame = true; + if (value) + { + Switch.SetTrue(); + } + else + { + Switch.SetFalse(); + } + } + } + + /// + /// Starts listening for events + /// + public virtual void OnEnable() + { + if (!_listening) + { + _listening = true; + MMDebugMenuCheckboxEvent.Register(OnMMDebugMenuCheckboxEvent); + } + } + + /// + /// Stops listening for events + /// + public virtual void OnDestroy() + { + _listening = false; + MMDebugMenuCheckboxEvent.Unregister(OnMMDebugMenuCheckboxEvent); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemCheckbox.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemCheckbox.cs.meta new file mode 100644 index 0000000..e8d902e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemCheckbox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28ad17ba84c916d499cb74e758d28e8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemChoices.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemChoices.cs new file mode 100644 index 0000000..c8d1736 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemChoices.cs @@ -0,0 +1,79 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to store choices contents + /// + [System.Serializable] + public class MMDebugMenuChoiceEntry + { + /// the button associated to this choice + public Button TargetButton; + /// the text comp used to display the button's text + public Text ButtonText; + /// the button's background image comp + public Image ButtonBg; + /// the name of the event bound to this button + public string ButtonEventName = "ButtonEvent"; + } + + /// + /// A class used to bind a Choice menu item to a MMDebugMenu + /// + public class MMDebugMenuItemChoices : MonoBehaviour + { + [Header("Bindings")] + /// the sprite to use when the button is active + public Sprite SelectedSprite; + /// the sprite to use as bg when the button is inactive + public Sprite OffSprite; + /// the color to use when the button is active + public Color OnColor = Color.white; + /// the color to use when the button is inactive + public Color OffColor = Color.black; + /// the color to use when the button is accented + public Color AccentColor = MMColors.ReunoYellow; + /// a list of choices + public List Choices; + + /// + /// Triggers a button event of the selected index + /// + /// + public virtual void TriggerButtonEvent(int index) + { + MMDebugMenuButtonEvent.Trigger(Choices[index].ButtonEventName); + } + + /// + /// Selects one of the buttons + /// + /// + public virtual void Select(int index) + { + Deselect(); + Choices[index].ButtonBg.sprite = SelectedSprite; + Choices[index].ButtonBg.color = AccentColor; + Choices[index].ButtonText.color = OffColor; + } + + /// + /// Deselects all buttons + /// + public virtual void Deselect() + { + foreach(MMDebugMenuChoiceEntry entry in Choices) + { + entry.ButtonBg.sprite = OffSprite; + entry.ButtonBg.color = OnColor; + entry.ButtonText.color = OnColor; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemChoices.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemChoices.cs.meta new file mode 100644 index 0000000..6bcfe64 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemChoices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b2bca3004ee68c45bb99ade8a9e5380 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemSlider.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemSlider.cs new file mode 100644 index 0000000..66c346c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemSlider.cs @@ -0,0 +1,141 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to bind a slider to a MMDebugMenu + /// + public class MMDebugMenuItemSlider : MonoBehaviour + { + /// the possible modes this slider can operate on + public enum Modes { Float, Int } + + [Header("Bindings")] + /// the selected mode for this slider + public Modes Mode = Modes.Float; + /// the Slider to use to change the value + public Slider TargetSlider; + /// the text comp used to display the slider's name + public Text SliderText; + /// the text comp used to display the slider's value + public Text SliderValueText; + /// the target knob + public Image SliderKnob; + /// the line behind the knob + public Image SliderLine; + /// the value to remap the slider's 0 to + public float RemapZero = 0f; + /// the value to remap the slider's 1 to + public float RemapOne = 1f; + /// the name of the event bound to this slider + public string SliderEventName = "Checkbox"; + + /// the current slider value + [MMReadOnly] + public float SliderValue; + /// the current slider int value + [MMReadOnly] + public int SliderValueInt; + + protected bool _valueSetThisFrame = false; + protected bool _listening = false; + + /// + /// On Awake we start listening for slider changes + /// + protected virtual void Awake() + { + TargetSlider.onValueChanged.AddListener(delegate { ValueChangeCheck(); }); + } + + /// + /// Invoked when the slider value changes + /// + public void ValueChangeCheck() + { + if (_valueSetThisFrame) + { + _valueSetThisFrame = false; + return; + } + + bool valueChanged = true; + + SliderValue = MMMaths.Remap(TargetSlider.value, 0f, 1f, RemapZero, RemapOne); + + if (Mode == Modes.Int) + { + SliderValue = Mathf.Round(SliderValue); + if (SliderValue == SliderValueInt) + { + valueChanged = false; + } + SliderValueInt = (int)SliderValue; + } + + if (valueChanged) + { + UpdateValue(SliderValue); + } + + TriggerSliderEvent(SliderValue); + } + + protected virtual void UpdateValue(float newValue) + { + SliderValueText.text = (Mode == Modes.Int) ? newValue.ToString() : newValue.ToString("F3"); + } + + /// + /// Triggers a slider event + /// + /// + protected virtual void TriggerSliderEvent(float value) + { + MMDebugMenuSliderEvent.Trigger(SliderEventName, value, MMDebugMenuSliderEvent.EventModes.FromSlider); + } + + /// + /// When we get a set slider event, we set our value + /// + /// + /// + protected virtual void OnMMDebugMenuSliderEvent(string sliderEventName, float value, MMDebugMenuSliderEvent.EventModes eventMode) + { + if ((eventMode == MMDebugMenuSliderEvent.EventModes.SetSlider) + && (sliderEventName == SliderEventName)) + { + _valueSetThisFrame = true; + TargetSlider.value = MMMaths.Remap(value, RemapZero, RemapOne, 0f, 1f); + UpdateValue(value); + } + } + + /// + /// Starts listening for events + /// + public virtual void OnEnable() + { + if (!_listening) + { + MMDebugMenuSliderEvent.Register(OnMMDebugMenuSliderEvent); + _listening = true; + } + } + + /// + /// Stops listening for events + /// + public virtual void OnDestroy() + { + _listening = false; + MMDebugMenuSliderEvent.Unregister(OnMMDebugMenuSliderEvent); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemSlider.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemSlider.cs.meta new file mode 100644 index 0000000..800e7fc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemSlider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d8d661dac43a98489944be49a162bda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemText.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemText.cs new file mode 100644 index 0000000..d293a11 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemText.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to bind a text item to a MMDebugMenu + /// + public class MMDebugMenuItemText : MonoBehaviour + { + [Header("Bindings")] + /// a text comp used to display the text + [TextArea] + public Text ContentText; + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemText.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemText.cs.meta new file mode 100644 index 0000000..17399fb --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemText.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26996c3ee681f254592c7bbaf459447a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemTitle.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemTitle.cs new file mode 100644 index 0000000..a1bc00d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemTitle.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to bind a title item to a MMDebugMenu + /// + public class MMDebugMenuItemTitle : MonoBehaviour + { + [Header("Bindings")] + /// the text comp used to display the title + public Text TitleText; + /// a line below the title + public Image TitleLine; + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemTitle.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemTitle.cs.meta new file mode 100644 index 0000000..6484bf5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemTitle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: debc95d929132814d968cb0e4c3c8bca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemValue.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemValue.cs new file mode 100644 index 0000000..f3c39a3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemValue.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to bind a value item to a MMDebugMenu + /// + public class MMDebugMenuItemValue : MonoBehaviour + { + [Header("Bindings")] + /// the label to display next to the value + public Text LabelText; + /// the text comp to display the value with + public Text ValueText; + /// a radio receiver to update the value with + public MMRadioReceiver RadioReceiver; + /// the current level of this value item + public virtual float Level { get { return _level; } set { _level = value; ValueText.text = value.ToString("F2"); } } + + protected float _level; + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemValue.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemValue.cs.meta new file mode 100644 index 0000000..fed4d31 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugMenuItems/MMDebugMenuItemValue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5aecab0d11ad9fe47bd4744bf897a145 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugTouchDisplay.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugTouchDisplay.cs new file mode 100644 index 0000000..9a1e3f3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugTouchDisplay.cs @@ -0,0 +1,93 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a canvas and it'll automatically reposition TouchPrefabs at the position of touches + /// You can set a higher TouchProvision if your game gets more than the default number (6) simultaneous touches + /// Disable/enable this mono for it to stop/work + /// + public class MMDebugTouchDisplay : MonoBehaviour + { + [Header("Bindings")] + /// the canvas to display the TouchPrefabs on + public Canvas TargetCanvas; + + [Header("Touches")] + /// the prefabs to instantiate to signify the position of the touches + public RectTransform TouchPrefab; + /// the amount of these prefabs to pool and provision + public int TouchProvision = 6; + + protected List _touchDisplays; + + /// + /// On Start we initialize our pool + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// Creates the pool of prefabs + /// + protected virtual void Initialization() + { + _touchDisplays = new List(); + + for (int i = 0; i < TouchProvision; i++) + { + RectTransform touchDisplay = Instantiate(TouchPrefab); + touchDisplay.transform.SetParent(TargetCanvas.transform); + touchDisplay.name = "MMDebugTouchDisplay_" + i; + touchDisplay.gameObject.SetActive(false); + _touchDisplays.Add(touchDisplay); + } + + this.enabled = false; + } + + /// + /// On update we detect touches and move our prefabs at their position + /// + protected virtual void Update() + { + DisableAllDisplays(); + DetectTouches(); + } + + /// + /// Acts on all touches + /// + protected virtual void DetectTouches() + { + for (int i = 0; i < Input.touchCount; ++i) + { + _touchDisplays[i].gameObject.SetActive(true); + _touchDisplays[i].position = Input.GetTouch(i).position; + } + } + + /// + /// Disables all touch prefabs + /// + protected virtual void DisableAllDisplays() + { + foreach(RectTransform display in _touchDisplays) + { + display.gameObject.SetActive(false); + } + } + + /// + /// When this mono gets disabled we turn all our prefabs off + /// + protected virtual void OnDisable() + { + DisableAllDisplays(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugTouchDisplay.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugTouchDisplay.cs.meta new file mode 100644 index 0000000..72599ad --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/MMDebugTouchDisplay.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: e41826a58ab20124eab7cfc4d79a1eaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - TargetCanvas: {instanceID: 0} + - TouchPrefab: {fileID: 5958022166018464836, guid: 626a9fe06209d574da486d5d818915f2, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs.meta new file mode 100644 index 0000000..07e919f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b35e5eebb7959ed4a8a96d7e6fb73e86 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuDebugTab.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuDebugTab.cs new file mode 100644 index 0000000..b3ea34d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuDebugTab.cs @@ -0,0 +1,118 @@ +#if MM_UI +using System.Collections; +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to handle the display of a debug log tab in a MMDebugMenu + /// + public class MMDebugMenuDebugTab : MonoBehaviour + { + /// the scrollrect where the log will be displayed + public ScrollRect DebugScrollRect; + /// the text container + public Text DebugText; + /// the prompt input + public InputField CommandPrompt; + /// a decorative prompt character + public Text CommandPromptCharacter; + /// whether or not the touch screen is visible + public bool TouchScreenVisible = false; + protected TouchScreenKeyboard _touchScreenKeyboard; + protected RectTransform _rectTransform; + protected float _mobileMenuOffset = -1000f; + protected bool _touchScreenVisibleLastFrame; + + /// + /// On awake we prepare our prompt listener + /// + protected virtual void Awake() + { + MMDebug.MMDebugLogEvent.Register(OnMMDebugLogEvent); + DebugText.text = ""; + _rectTransform = this.gameObject.GetComponent(); + + CommandPrompt.onEndEdit.AddListener(val => + { + CommandPrompt.text = ""; + if (val != "") + { + MMDebug.DebugLogCommand(val); + } + }); + } + + /// + /// if the mobile touchscreen is open, we move away + /// + protected virtual void Update() + { + TouchScreenVisible = TouchScreenKeyboard.visible; + + if (TouchScreenVisible) + { + _rectTransform.MMSetBottom(650f); + } + else + { + _rectTransform.MMSetBottom(0f); + } + } + + /// + /// on late update we scroll to the bottom if needed + /// + protected virtual void LateUpdate() + { + if (_touchScreenVisibleLastFrame != TouchScreenVisible) + { + StartCoroutine(ScrollToLogBottomCo()); + } + _touchScreenVisibleLastFrame = TouchScreenVisible; + } + + /// + /// Scrolls to the bottom on enable + /// + protected virtual void OnEnable() + { + StartCoroutine(ScrollToLogBottomCo()); + } + + /// + /// when we get a new log event, we update our text and scroll to the bottom + /// + /// + protected virtual void OnMMDebugLogEvent(MMDebug.DebugLogItem item) + { + DebugText.text = MMDebug.LogHistoryText; + if (this.gameObject.activeInHierarchy) + { + StartCoroutine(ScrollToLogBottomCo()); + } + } + + /// + /// A coroutine used to scroll to the bottom + /// + /// + protected virtual IEnumerator ScrollToLogBottomCo() + { + yield return new WaitForEndOfFrame(); + DebugScrollRect.normalizedPosition = Vector2.zero; + CommandPrompt.ActivateInputField(); + CommandPrompt.Select(); + } + + /// + /// Stops listening for events + /// + public virtual void OnDestroy() + { + MMDebug.MMDebugLogEvent.Unregister(OnMMDebugLogEvent); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuDebugTab.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuDebugTab.cs.meta new file mode 100644 index 0000000..9962de2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuDebugTab.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f28e9eb155c32542978f8e9ecbc19f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTab.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTab.cs new file mode 100644 index 0000000..088599e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTab.cs @@ -0,0 +1,70 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to handle the display of a tab in a MMDebugMenu + /// + public class MMDebugMenuTab : MonoBehaviour + { + /// the tab's title + public Text TabText; + /// the tab's background image + public Image TabBackground; + /// the color to use for the background when the tab is selected + public Color SelectedBackgroundColor; + /// the color to use for the background when the tab is not selected + public Color DeselectedBackgroundColor; + /// the color to use for the text when the tab is selected + public Color SelectedTextColor; + /// the color to use for the text when the tab is not selected + public Color DeselectedTextColor; + /// the index of that tab, auto setup by the manager + public int Index; + /// the manager for this tab, auto setup + public MMDebugMenuTabManager Manager; + /// if this is true, scale will be forced to one on init + public bool ForceScaleOne = true; + + /// + /// On Start we initialize this tab item + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init we force the scale to one + /// + protected virtual void Initialization() + { + if (ForceScaleOne) + { + this.gameObject.GetComponent().localScale = Vector3.one; + } + } + + /// + /// Selects this tab + /// + public virtual void Select() + { + Manager.Select(Index); + TabText.color = SelectedTextColor; + TabBackground.color = SelectedBackgroundColor; + } + + /// + /// Deselects this tab + /// + public virtual void Deselect() + { + TabText.color = DeselectedTextColor; + TabBackground.color = DeselectedBackgroundColor; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTab.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTab.cs.meta new file mode 100644 index 0000000..935a6a2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTab.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fe2233d73fc8b7449e98cbeb826216a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabContents.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabContents.cs new file mode 100644 index 0000000..02d3094 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabContents.cs @@ -0,0 +1,39 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to describe tab contents + /// + public class MMDebugMenuTabContents : MonoBehaviour + { + /// the index of the tab, setup by MMDebugMenu + public int Index = 0; + /// the parent of the tab, setup by MMDebugMenu + public Transform Parent; + /// if this is true, scale will be forced to one on init + public bool ForceScaleOne = true; + + /// + /// On Start we initialize this tab contents + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init we force the scale to one + /// + protected virtual void Initialization() + { + if (ForceScaleOne) + { + this.gameObject.GetComponent().localScale = Vector3.one; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabContents.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabContents.cs.meta new file mode 100644 index 0000000..f8fa54f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabContents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d72d65b4a360e184da7662f4f4c6acc0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabManager.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabManager.cs new file mode 100644 index 0000000..68cdb0b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabManager.cs @@ -0,0 +1,45 @@ +#if MM_UI +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class used to keep track of tabs and their contents in a MMDebugMenu + /// + public class MMDebugMenuTabManager : MonoBehaviour + { + /// a list of all the tabs under that manager + public List Tabs; + /// a list of all the tabs contents under that manager + public List TabsContents; + + /// + /// Selects a tab, hides the others + /// + /// + public virtual void Select(int selected) + { + foreach(MMDebugMenuTab tab in Tabs) + { + if (tab.Index != selected) + { + tab.Deselect(); + } + } + foreach(MMDebugMenuTabContents contents in TabsContents) + { + if (contents.Index == selected) + { + contents.gameObject.SetActive(true); + } + else + { + contents.gameObject.SetActive(false); + } + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabManager.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabManager.cs.meta new file mode 100644 index 0000000..cedb040 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/Tabs/MMDebugMenuTabManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6caabe887d9340e4cae45cc9f41897dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses.meta new file mode 100644 index 0000000..ee09028 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea78b83e8173dc24e884ce1186c14ac7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuRadioButton.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuRadioButton.cs new file mode 100644 index 0000000..c333bc8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuRadioButton.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; + +#if MM_UI +namespace MoreMountains.Tools +{ + /// + /// A class to handle radio buttons. + /// To group them, just use the same RadioButtonGroupName string for all radio buttons in the group + /// + public class MMDebugMenuRadioButton : MMDebugMenuSpriteReplace + { + /// The name of the radio button group. Use the same one for each buttons in the group + public string RadioButtonGroupName; + + protected List _group; + + /// + /// On Init, we grab all buttons from the group + /// + public override void Initialization() + { + base.Initialization (); + FindAllRadioButtonsFromTheSameGroup (); + } + + /// + /// Finds all radio buttons from the same group. + /// + protected virtual void FindAllRadioButtonsFromTheSameGroup () + { + _group = new List (); + + MMDebugMenuRadioButton[] radioButtons = FindObjectsOfType(typeof(MMDebugMenuRadioButton)) as MMDebugMenuRadioButton[]; + foreach (MMDebugMenuRadioButton radioButton in radioButtons) + { + if ((radioButton.RadioButtonGroupName == RadioButtonGroupName) + && (radioButton != this)) + { + _group.Add (radioButton); + } + } + } + + /// + /// When turning the button on, we turn off all other buttons in the group + /// + protected override void SpriteOn() + { + base.SpriteOn (); + if (_group.Count >= 1) + { + foreach (MMDebugMenuRadioButton radioButton in _group) + { + radioButton.SwitchToOffSprite (); + } + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuRadioButton.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuRadioButton.cs.meta new file mode 100644 index 0000000..d76638e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuRadioButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17217ce8411bdf240a5e6ab4b8ad0a65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSpriteReplace.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSpriteReplace.cs new file mode 100644 index 0000000..ef98170 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSpriteReplace.cs @@ -0,0 +1,114 @@ +#if MM_UI +using UnityEngine; +using System.Collections; +using System; +using MoreMountains.Tools; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A class to add to an image to have it act like a button with a different sprite for on and off states + /// + public class MMDebugMenuSpriteReplace : MonoBehaviour + { + /// the sprite to use when in the "on" state + public Sprite OnSprite; + /// the sprite to use when in the "off" state + public Sprite OffSprite; + /// if this is true, the button will start if "on" state + public bool StartsOn = true; + /// the current state of the button + public virtual bool CurrentValue { get { return (_image.sprite == OnSprite); } } + + protected Image _image; + protected MMTouchButton _mmTouchButton; + + /// + /// On Start we initialize our button + /// + protected virtual void Awake() + { + //Initialization (); + } + + /// + /// On init, we grab our image component, and set our sprite in its initial state + /// + public virtual void Initialization() + { + _image = this.gameObject.GetComponent (); + _mmTouchButton = this.gameObject.GetComponent (); + if (_mmTouchButton != null) + { + _mmTouchButton.ReturnToInitialSpriteAutomatically = false; + } + + if (_image == null) { return; } + if ((OnSprite == null) || (OffSprite == null)) { return; } + + if (StartsOn) + { + _image.sprite = OnSprite; + } + else + { + _image.sprite = OffSprite; + } + } + + /// + /// A public method to change the sprite + /// + public virtual void Swap() + { + if (_image.sprite != OnSprite) + { + SwitchToOnSprite (); + } + else + { + SwitchToOffSprite (); + } + } + + /// + /// a public method to switch to off sprite directly + /// + public virtual void SwitchToOffSprite() + { + if (_image == null) { return; } + if (OffSprite == null) { return; } + + SpriteOff (); + } + + /// + /// sets the image's sprite to off + /// + protected virtual void SpriteOff() + { + _image.sprite = OffSprite; + } + + /// + /// a public method to switch to on sprite directly + /// + public virtual void SwitchToOnSprite() + { + if (_image == null) { return; } + if (OnSprite == null) { return; } + + SpriteOn (); + } + + /// + /// sets the image's sprite to on + /// + protected virtual void SpriteOn() + { + _image.sprite = OnSprite; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSpriteReplace.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSpriteReplace.cs.meta new file mode 100644 index 0000000..72efa1b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSpriteReplace.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67c3b5deddd7fd5438aebce3a8ea178e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSwitch.cs b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSwitch.cs new file mode 100644 index 0000000..61093fb --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSwitch.cs @@ -0,0 +1,111 @@ +#if MM_UI +using UnityEngine; +using System.Collections; +using System; +using MoreMountains.Tools; +using UnityEngine.UI; +using System.Collections.Generic; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// A component to handle switches + /// + public class MMDebugMenuSwitch : MMTouchButton + { + [Header("Switch")] + /// a SpriteReplace to represent the switch knob + public MMDebugMenuSpriteReplace SwitchKnob; + /// the possible states of the switch + [MMReadOnly] + public bool SwitchState; + /// the state the switch should start in + public bool InitialState = false; + + [Header("Binding")] + /// the methods to call when the switch is turned on + public UnityEvent OnSwitchOn; + /// the methods to call when the switch is turned off + public UnityEvent OnSwitchOff; + /// the methods to call when the switch is turned off + public UnityEvent OnSwitchToggle; + + /// + /// On init, we set our current switch state + /// + protected override void Initialization() + { + base.Initialization (); + SwitchState = InitialState; + InitializeState (); + + SwitchKnob.Initialization(); + if (InitialState) + { + SwitchKnob.SwitchToOnSprite(); + } + else + { + SwitchKnob.SwitchToOffSprite(); + } + } + + public virtual void InitializeState() + { + /*if (CurrentSwitchState == SwitchStates.Left) + { + _animator?.Play ("RollLeft"); + } + else + { + _animator?.Play ("RollRight"); + }*/ + } + + public virtual void SetTrue() + { + SwitchState = true; + if (_animator != null) + { + _animator.SetTrigger("Right"); + } + SwitchKnob.SwitchToOnSprite(); + if (OnSwitchOn != null) + { + OnSwitchOn.Invoke(); + } + } + + public virtual void SetFalse() + { + SwitchState = false; + if (_animator != null) + { + _animator.SetTrigger("Left"); + } + SwitchKnob.SwitchToOffSprite(); + if (OnSwitchOff != null) + { + OnSwitchOff.Invoke(); + } + } + + /// + /// Use this method to go from one state to the other + /// + public virtual void ToggleState() + { + if (SwitchState == false) + { + SetTrue(); + } + else + { + SetFalse(); + } + OnSwitchToggle?.Invoke(SwitchState); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSwitch.cs.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSwitch.cs.meta new file mode 100644 index 0000000..a1b5e55 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Scripts/UIClasses/MMDebugMenuSwitch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 752e7f2cbc3684a4ca1c13a049c09d5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites.meta new file mode 100644 index 0000000..2c8b4e6 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 451b5e679e9a3104a8f313dca4bde6bb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites/MMDebugMenuSpritesheet.png b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites/MMDebugMenuSpritesheet.png new file mode 100644 index 0000000..924d46f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites/MMDebugMenuSpritesheet.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites/MMDebugMenuSpritesheet.png.meta b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites/MMDebugMenuSpritesheet.png.meta new file mode 100644 index 0000000..bcb4f07 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugMenu/Sprites/MMDebugMenuSpritesheet.png.meta @@ -0,0 +1,309 @@ +fileFormatVersion: 2 +guid: 72f7a32ac9c7676409eb438757bc6b4a +TextureImporter: + internalIDToNameTable: + - first: + 213: -2741756353435428437 + second: MMDebugMenuSpritesheet_Close + - first: + 213: 1282028943509491997 + second: MMDebugMenuSpritesheet_Button + - first: + 213: -8121766140965501267 + second: MMDebugMenuSpritesheet_ButtonBorder + - first: + 213: -2239278724076068761 + second: MMDebugMenuSpritesheet_Check + - first: + 213: -6396098458971428934 + second: MMDebugMenuSpritesheet_Check + - first: + 213: -2239278724076068761 + second: MMDebugMenuSpritesheet_Check + - first: + 213: -6396098458971428934 + second: MMDebugMenuSpritesheet_SliderKnob + - first: + 213: 4694184556055176316 + second: MMDebugMenuSpritesheet_Touch + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: MMDebugMenuSpritesheet_Close + rect: + serializedVersion: 2 + x: 0 + y: 896 + width: 128 + height: 128 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: ba99fcc7f1353f9d0800000000000000 + internalID: -2741756353435428437 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: MMDebugMenuSpritesheet_Button + rect: + serializedVersion: 2 + x: 0 + y: 768 + width: 128 + height: 128 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: d1117a9188eaac110800000000000000 + internalID: 1282028943509491997 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: MMDebugMenuSpritesheet_ButtonBorder + rect: + serializedVersion: 2 + x: 128 + y: 896 + width: 128 + height: 128 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 20, y: 20, z: 20, w: 20} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: da6c4fac9b0b94f80800000000000000 + internalID: -8121766140965501267 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: MMDebugMenuSpritesheet_Check + rect: + serializedVersion: 2 + x: 128 + y: 768 + width: 128 + height: 128 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 7602b5a5ddb7ce0e0800000000000000 + internalID: -2239278724076068761 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: MMDebugMenuSpritesheet_SliderKnob + rect: + serializedVersion: 2 + x: 256 + y: 896 + width: 128 + height: 128 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: ab7a59ce65e7c37a0800000000000000 + internalID: -6396098458971428934 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: MMDebugMenuSpritesheet_Touch + rect: + serializedVersion: 2 + x: 0 + y: 517 + width: 251 + height: 251 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: c742bcd9bf7152140800000000000000 + internalID: 4694184556055176316 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 50917cc409c24284499fbd599f4b57aa + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + MMDebugMenuSpritesheet_Button: 1282028943509491997 + MMDebugMenuSpritesheet_ButtonBorder: -8121766140965501267 + MMDebugMenuSpritesheet_Check: -2239278724076068761 + MMDebugMenuSpritesheet_Close: -2741756353435428437 + MMDebugMenuSpritesheet_SliderKnob: -6396098458971428934 + MMDebugMenuSpritesheet_Touch: 4694184556055176316 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugOnScreen.meta b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen.meta new file mode 100644 index 0000000..ac3db49 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7a7e71d7d173cb408abdb03ec5673e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources.meta b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources.meta new file mode 100644 index 0000000..4dc7df8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bdad59472b42b854baa70008ace547d8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources/MMDebugOnScreenConsole.prefab b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources/MMDebugOnScreenConsole.prefab new file mode 100644 index 0000000..223fb8c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources/MMDebugOnScreenConsole.prefab @@ -0,0 +1,560 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1067945256768035290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2272103072717628943} + - component: {fileID: 4679250170490519280} + m_Layer: 5 + m_Name: Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2272103072717628943 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067945256768035290} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8263837695432486848} + - {fileID: 8145416652676266342} + m_Father: {fileID: 8263837694839971384} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 50, y: 0} + m_SizeDelta: {x: 550, y: 250} + m_Pivot: {x: 0, y: 1} +--- !u!222 &4679250170490519280 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067945256768035290} + m_CullTransparentMesh: 0 +--- !u!1 &1285092237113076484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4860465933074435775} + - component: {fileID: 1884329705895565097} + - component: {fileID: 1905422975964358174} + m_Layer: 5 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4860465933074435775 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285092237113076484} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8145416652676266342} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 16, y: 16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1884329705895565097 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285092237113076484} + m_CullTransparentMesh: 0 +--- !u!114 &1905422975964358174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285092237113076484} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 0a9d566b902c9a84087bf3ca3a178e6b, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5009435801105555640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8145416652676266342} + - component: {fileID: 9152259897168163866} + - component: {fileID: 2144072471169865370} + - component: {fileID: 3291349007952663931} + m_Layer: 5 + m_Name: MMLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8145416652676266342 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5009435801105555640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4860465933074435775} + m_Father: {fileID: 2272103072717628943} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 30, y: -48} + m_SizeDelta: {x: 48, y: 48} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9152259897168163866 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5009435801105555640} + m_CullTransparentMesh: 0 +--- !u!114 &2144072471169865370 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5009435801105555640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3291349007952663931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5009435801105555640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 1, g: 0.76862746, b: 0, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2144072471169865370} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7673599999955701183} + m_MethodName: Toggle + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &8232925957239879115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8232925957239879114} + - component: {fileID: 8232925957239879112} + - component: {fileID: 8232925957239879113} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8232925957239879114 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8232925957239879115} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8263837695432486848} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &8232925957239879112 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8232925957239879115} + m_CullTransparentMesh: 0 +--- !u!114 &8232925957239879113 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8232925957239879115} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 99dec03033cf89c4b936367ceee96b05, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "25,0,36 POSITION \n\r78.02 SOMETHING \r\n1564.879996 POSITION " +--- !u!1 &8263837694839971385 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8263837694839971384} + - component: {fileID: 8263837694839971389} + - component: {fileID: 8263837694839971390} + - component: {fileID: 8263837694839971391} + - component: {fileID: 7673599999955701183} + m_Layer: 5 + m_Name: MMDebugOnScreenConsole + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8263837694839971384 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837694839971385} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 2272103072717628943} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &8263837694839971389 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837694839971385} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 99 + m_TargetDisplay: 0 +--- !u!114 &8263837694839971390 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837694839971385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &8263837694839971391 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837694839971385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 3 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 32 +--- !u!114 &7673599999955701183 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837694839971385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2f0223e337b99754ca91160443728c46, type: 3} + m_Name: + m_EditorClassIdentifier: + Container: {fileID: 2272103072717628943} + BackgroundImage: {fileID: 8263837695432486855} + ConsoleText: {fileID: 8232925957239879113} + LabelColor: {r: 1, g: 1, b: 1, a: 1} + ValueColor: '#FFC400' + ValueSizeRatio: 1.35 +--- !u!1 &8263837695432486849 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8263837695432486848} + - component: {fileID: 8263837695432486854} + - component: {fileID: 8263837695432486855} + - component: {fileID: 8263837695432486852} + - component: {fileID: 8263837695432486853} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8263837695432486848 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837695432486849} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8232925957239879114} + m_Father: {fileID: 2272103072717628943} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 600, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &8263837695432486854 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837695432486849} + m_CullTransparentMesh: 0 +--- !u!114 &8263837695432486855 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837695432486849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8263837695432486852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837695432486849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 20 + m_Right: 20 + m_Top: 60 + m_Bottom: 20 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 1 + m_ChildScaleHeight: 0 +--- !u!114 &8263837695432486853 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8263837695432486849} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 diff --git a/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources/MMDebugOnScreenConsole.prefab.meta b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources/MMDebugOnScreenConsole.prefab.meta new file mode 100644 index 0000000..e0c3c9f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Resources/MMDebugOnScreenConsole.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dbdbfb7cee2876a42980b6bcd9bc441a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites.meta b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites.meta new file mode 100644 index 0000000..6641136 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02305dbb5aeb13d45aba32a36ba48e1e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites/MMLogo16x16.png b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites/MMLogo16x16.png new file mode 100644 index 0000000..9e20d2b Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites/MMLogo16x16.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites/MMLogo16x16.png.meta b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites/MMLogo16x16.png.meta new file mode 100644 index 0000000..b7049ea --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMDebugOnScreen/Sprites/MMLogo16x16.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 0a9d566b902c9a84087bf3ca3a178e6b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI.meta b/Assets/Feel/MMTools/Accessories/MMGUI.meta new file mode 100644 index 0000000..4991762 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 93305c43ad014ee42b836571b83d0575 +folderAsset: yes +timeCreated: 1524187828 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMCountdown.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMCountdown.cs new file mode 100644 index 0000000..b365902 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMCountdown.cs @@ -0,0 +1,362 @@ +#if MM_UI +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + [RequireComponent(typeof(Text))] + [AddComponentMenu("More Mountains/Tools/Time/MMCountdown")] + public class MMCountdown : MMMonoBehaviour + { + [Serializable] + /// + /// A class to store floor information + /// + public class MMCountdownFloor + { + /// the value (in seconds) for this floor. Every FloorValue, the corresponding event will be triggered + public float FloorValue; + [MMReadOnly] + /// the time (in seconds) this floor was last triggered at + public float LastChangedAt = 0f; + /// the event to trigger when this floor is reached + public UnityEvent FloorEvent; + } + + /// the possible directions for this countdown + public enum MMCountdownDirections { Ascending, Descending } + + [MMInspectorGroup("Countdown", true, 18)] + [MMInformation("You can define the bounds of the countdown (how much it should count down from, and to how much, the format it should be displayed in (standard Unity float ToString formatting).", MoreMountains.Tools.MMInformationAttribute.InformationType.Info, false)] + /// the time (in seconds) to count down from + public float CountdownFrom = 60f; + /// the time (in seconds) to count down to + public float CountdownTo = 0f; + /// if this is true, the countdown will have no end and will just keep counting in its direction + public bool Infinite = false; + + public enum FormatMethods { Explicit, Choices } + + [MMInspectorGroup("Display", true, 19)] + /// the selected format method + public FormatMethods FormatMethod = FormatMethods.Choices; + /// whether or not values should be floored before displaying them + [MMEnumCondition("FormatMethod", (int)FormatMethods.Explicit)] + public bool FloorValues = true; + /// the format (standard Unity ToString) to use when displaying the time left in the text field + [MMEnumCondition("FormatMethod", (int)FormatMethods.Explicit)] + public string Format = "00.00"; + [MMEnumCondition("FormatMethod", (int)FormatMethods.Choices)] + public bool Hours = false; + [MMEnumCondition("FormatMethod", (int)FormatMethods.Choices)] + public bool Minutes = true; + [MMEnumCondition("FormatMethod", (int)FormatMethods.Choices)] + public bool Seconds = true; + [MMEnumCondition("FormatMethod", (int)FormatMethods.Choices)] + public bool Milliseconds = false; + + [MMInspectorGroup("Settings", true, 20)] + [MMInformation("You can choose whether or not the countdown should automatically start on its Start, at what frequency (in seconds) it should refresh (0 means every frame), and the countdown's speed multiplier " + + "(2 will be twice as fast, 0.5 half normal speed, etc). Floors are used to define and trigger events when certain floors are reached. For each floor, define a floor value (in seconds). Everytime this floor gets reached, the corresponding event will be triggered." + + "Bind events here to trigger them when the countdown reaches its To destination, or every time it gets refreshed.", MoreMountains.Tools.MMInformationAttribute.InformationType.Info, false)] + /// if this is true, the countdown will start as soon as this object Starts + public bool AutoStart = true; + /// if this is true, the countdown will automatically go back to its initial value when it reaches its destination + public bool AutoReset = false; + /// if this is true, the countdown will pingpong in the other direction when end is met + public bool PingPong = false; + + /// the frequency (in seconds) at which to refresh the text field + public float RefreshFrequency = 0.02f; + /// the speed of the countdown (2 : twice the normal speed, 0.5 : twice slower) + public float CountdownSpeed = 1f; + + [MMInspectorGroup("Floors", true, 21)] + /// a list of floors this countdown will evaluate and trigger if met + public List Floors; + + [MMInspectorGroup("Events", true, 22)] + /// an event to trigger when the countdown reaches its destination + public UnityEvent CountdownCompleteEvent; + /// an event to trigger every time the countdown text gets refreshed + public UnityEvent CountdownRefreshEvent; + + [MMInspectorGroup("Debug", true, 17)] + [MMReadOnly] + /// the time left in our countdown + public float CurrentTime; + [MMReadOnly] + /// the direction of the countdown (going 1, 2, 3 if Ascending, and 3, 2, 1 if Descending) + public MMCountdownDirections Direction; + + /// Debug button to stop the countdown + [MMInspectorButton("StopCountdown")] + public bool StopCountdownButton; + /// Debug button to start the countdown + [MMInspectorButton("StartCountdown")] + public bool StartCountdownButton; + /// Debug button to reset the countdown + [MMInspectorButton("ResetCountdown")] + public bool ResetCountdownButton; + /// Debug button to change the direction of the countdown + [MMInspectorButton("ChangeDirection")] + public bool ChangeDirectionButton; + /// A debug value to which to set the current time when pressing the DebugSetNewCurrentTime button + public float DebugNewCurrentTime = 5f; + /// Debug button to change the countdown's current time + [MMInspectorButton("DebugSetNewCurrentTime")] + public bool DebugSetNewCurrentTimeButton; + + /// + /// Debug method to change the current time to the specified debug value + /// + private void DebugSetNewCurrentTime() + { + SetCurrentTime(DebugNewCurrentTime); + } + + protected Text _text; + protected float _lastRefreshAt; + protected bool _countdowning = false; + protected int _lastUnitValue = 0; + + #region INITIALIZATION + + /// + /// On Start, grabs and stores the Text component, and autostarts if needed + /// + protected virtual void Start() + { + _text = this.gameObject.GetComponent(); + Initialization(); + } + + /// + /// On init, initializes the direction, handles auto start and floors + /// + protected virtual void Initialization() + { + _lastUnitValue = (int)CurrentTime; + Direction = (CountdownFrom > CountdownTo) ? MMCountdownDirections.Descending : MMCountdownDirections.Ascending; + + CurrentTime = CountdownFrom; + + if (AutoStart) + { + StartCountdown(); + } + foreach (MMCountdownFloor floor in Floors) + { + floor.LastChangedAt = CountdownFrom; + } + } + + #endregion + + #region UPDATE + + /// + /// On Update, updates the Time, text, checks for floors and checks for the end of the countdown + /// + protected virtual void Update() + { + // if we're not countdowning, we do nothing and exit + if (!_countdowning) + { + return; + } + // we update our current time + UpdateTime(); + UpdateText(); + CheckForFloors(); + CheckForEnd(); + } + + /// + /// Updates the CurrentTime value by substracting the delta time, factored by the defined speed + /// + protected virtual void UpdateTime() + { + if (Direction == MMCountdownDirections.Descending) + { + CurrentTime -= Time.deltaTime * CountdownSpeed; + } + else + { + CurrentTime += Time.deltaTime * CountdownSpeed; + } + } + + /// + /// Refreshes the text component at the specified refresh frequency + /// + protected virtual void UpdateText() + { + if (Time.time - _lastRefreshAt > RefreshFrequency) + { + if (_text != null) + { + string newText = ""; + + if (FormatMethod == FormatMethods.Explicit) + { + if (FloorValues) + { + newText = Mathf.Floor(CurrentTime).ToString(Format); + } + else + { + newText = CurrentTime.ToString(Format); + } + } + else + { + newText = MMTime.FloatToTimeString(CurrentTime, Hours, Minutes, Seconds, Milliseconds); + } + + _text.text = newText; + } + if (CountdownRefreshEvent != null) + { + CountdownRefreshEvent.Invoke(); + } + _lastRefreshAt = Time.time; + } + } + + /// + /// Checks whether or not we've reached the end of the countdown + /// + protected virtual void CheckForEnd() + { + if (Infinite) + { + return; + } + + bool endReached = (Direction == MMCountdownDirections.Ascending) ? (CurrentTime >= CountdownTo) : (CurrentTime <= CountdownTo); + + if (endReached) + { + if (CountdownCompleteEvent != null) + { + CountdownCompleteEvent.Invoke(); + } + if (PingPong) + { + Direction = (Direction == MMCountdownDirections.Ascending) ? MMCountdownDirections.Descending : MMCountdownDirections.Ascending; + _countdowning = true; + float temp = CountdownFrom; + CountdownFrom = CountdownTo; + CountdownTo = temp; + } + else if (AutoReset) + { + _countdowning = true; + CurrentTime = CountdownFrom; + } + else + { + CurrentTime = CountdownTo; + _countdowning = false; + } + } + } + + /// + /// Every frame, checks if we've reached one of the defined floors, and triggers the corresponding events if that's the case + /// + protected virtual void CheckForFloors() + { + foreach(MMCountdownFloor floor in Floors) + { + if (Mathf.Abs(CurrentTime - floor.LastChangedAt) >= floor.FloorValue) + { + if (floor.FloorEvent != null) + { + floor.FloorEvent.Invoke(); + } + + if (Direction == MMCountdownDirections.Descending) + { + if (floor.LastChangedAt == CountdownFrom) + { + floor.LastChangedAt = CountdownFrom - floor.FloorValue; + } + else + { + floor.LastChangedAt = floor.LastChangedAt - floor.FloorValue; + } + } + else + { + if (floor.LastChangedAt == CountdownFrom) + { + floor.LastChangedAt = CountdownFrom + floor.FloorValue; + } + else + { + floor.LastChangedAt = floor.LastChangedAt + floor.FloorValue; + } + } + } + } + } + + #endregion + + #region CONTROLS + + /// + /// Starts (or restarts) the countdown + /// + public virtual void StartCountdown() + { + _countdowning = true; + } + + /// + /// Stops the countdown from countdowning + /// + public virtual void StopCountdown() + { + _countdowning = false; + } + + /// + /// Resets the countdown, setting its current time to the one defined in the inspector + /// + public virtual void ResetCountdown() + { + CurrentTime = CountdownFrom; + Initialization(); + } + + /// + /// Changes the direction of the countdown from ascending to descending, or from descending to ascending + /// + public virtual void ChangeDirection() + { + Direction = Direction == MMCountdownDirections.Descending + ? MMCountdownDirections.Ascending + : MMCountdownDirections.Descending; + (CountdownFrom, CountdownTo) = (CountdownTo, CountdownFrom); + } + + /// + /// Sets the current time to the new specified value + /// + /// + public virtual void SetCurrentTime(float newCurrentTime) + { + CurrentTime = newCurrentTime; + } + + #endregion + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMCountdown.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMCountdown.cs.meta new file mode 100644 index 0000000..0425b1b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMCountdown.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9865be098e06f714091b51ba01ecec85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMCursorVisible.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMCursorVisible.cs new file mode 100644 index 0000000..a812a3f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMCursorVisible.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to an object and it'll make sure that the cursor is either visible or invisible + /// + [AddComponentMenu("More Mountains/Tools/GUI/MMCursorVisible")] + public class MMCursorVisible : MonoBehaviour + { + /// The possible states of the cursor + public enum CursorVisibilities { Visible, Invisible } + /// Whether that cursor should be visible or invisible + public CursorVisibilities CursorVisibility = CursorVisibilities.Visible; + + /// + /// On Update we change the status of our cursor accordingly + /// + protected virtual void Update() + { + if (CursorVisibility == CursorVisibilities.Visible) + { + Cursor.visible = true; + } + else + { + Cursor.visible = false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMCursorVisible.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMCursorVisible.cs.meta new file mode 100644 index 0000000..84636c1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMCursorVisible.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98e84bec6c36ca5419922f3def4d4267 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMGetFocusOnEnable.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMGetFocusOnEnable.cs new file mode 100644 index 0000000..088ba55 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMGetFocusOnEnable.cs @@ -0,0 +1,22 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; +using System.Collections; +using MoreMountains.Tools; +using UnityEngine.EventSystems; + +namespace MoreMountains.Tools +{ + /// + /// Add this helper to an object and focus will be set to it on Enable + /// + [AddComponentMenu("More Mountains/Tools/GUI/MMGetFocusOnEnable")] + public class MMGetFocusOnEnable : MonoBehaviour + { + protected virtual void OnEnable() + { + EventSystem.current.SetSelectedGameObject(this.gameObject, null); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMGetFocusOnEnable.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMGetFocusOnEnable.cs.meta new file mode 100644 index 0000000..f2b5ccc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMGetFocusOnEnable.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4c7437225490c3443b6d19ca7cc00196 +timeCreated: 1523894192 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMHealthBar.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMHealthBar.cs new file mode 100644 index 0000000..7332884 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMHealthBar.cs @@ -0,0 +1,523 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.SceneManagement; +#if MM_UI +using UnityEngine.UI; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object and it will show a healthbar above it + /// You can either use a prefab for it, or have the component draw one at the start + /// + [AddComponentMenu("More Mountains/Tools/GUI/MMHealthBar")] + public class MMHealthBar : MonoBehaviour + { + #if MM_UI + /// the possible health bar types + public enum HealthBarTypes { Prefab, Drawn, Existing } + /// the possible timescales the bar can work on + public enum TimeScales { UnscaledTime, Time } + + [MMInformation("Add this component to an object and it'll add a healthbar next to it to reflect its health level in real time. You can decide here whether the health bar should be drawn automatically or use a prefab.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// whether the healthbar uses a prefab or is drawn automatically + [Tooltip("whether the healthbar uses a prefab or is drawn automatically")] + public HealthBarTypes HealthBarType = HealthBarTypes.Drawn; + /// defines whether the bar will work on scaled or unscaled time (whether or not it'll keep moving if time is slowed down for example) + [Tooltip("defines whether the bar will work on scaled or unscaled time (whether or not it'll keep moving if time is slowed down for example)")] + public TimeScales TimeScale = TimeScales.UnscaledTime; + + [Header("Select a Prefab")] + [MMInformation("Select a prefab with a progress bar script on it. There is one example of such a prefab in Common/Prefabs/GUI.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// the prefab to use as the health bar + [Tooltip("the prefab to use as the health bar")] + public MMProgressBar HealthBarPrefab; + + [Header("Existing MMProgressBar")] + /// the MMProgressBar this health bar should update + [Tooltip("the MMProgressBar this health bar should update")] + public MMProgressBar TargetProgressBar; + + [Header("Drawn Healthbar Settings ")] + [MMInformation("Set the size (in world units), padding, back and front colors of the healthbar.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// if the healthbar is drawn, its size in world units + [Tooltip("if the healthbar is drawn, its size in world units")] + public Vector2 Size = new Vector2(1f,0.2f); + /// if the healthbar is drawn, the padding to apply to the foreground, in world units + [Tooltip("if the healthbar is drawn, the padding to apply to the foreground, in world units")] + public Vector2 BackgroundPadding = new Vector2(0.01f,0.01f); + /// the rotation to apply to the MMHealthBarContainer when drawing it + [Tooltip("the rotation to apply to the MMHealthBarContainer when drawing it")] + public Vector3 InitialRotationAngles; + /// if the healthbar is drawn, the color of its foreground + [Tooltip("if the healthbar is drawn, the color of its foreground")] + public Gradient ForegroundColor = new Gradient() + { + colorKeys = new GradientColorKey[2] { + new GradientColorKey(MMColors.BestRed, 0), + new GradientColorKey(MMColors.BestRed, 1f) + }, + alphaKeys = new GradientAlphaKey[2] {new GradientAlphaKey(1, 0),new GradientAlphaKey(1, 1)}}; + /// if the healthbar is drawn, the color of its delayed bar + [Tooltip("if the healthbar is drawn, the color of its delayed bar")] + public Gradient DelayedColor = new Gradient() + { + colorKeys = new GradientColorKey[2] { + new GradientColorKey(MMColors.Orange, 0), + new GradientColorKey(MMColors.Orange, 1f) + }, + alphaKeys = new GradientAlphaKey[2] { new GradientAlphaKey(1, 0), new GradientAlphaKey(1, 1) } + }; + /// if the healthbar is drawn, the color of its border + [Tooltip("if the healthbar is drawn, the color of its border")] + public Gradient BorderColor = new Gradient() + { + colorKeys = new GradientColorKey[2] { + new GradientColorKey(MMColors.AntiqueWhite, 0), + new GradientColorKey(MMColors.AntiqueWhite, 1f) + }, + alphaKeys = new GradientAlphaKey[2] { new GradientAlphaKey(1, 0), new GradientAlphaKey(1, 1) } + }; + /// if the healthbar is drawn, the color of its background + [Tooltip("if the healthbar is drawn, the color of its background")] + public Gradient BackgroundColor = new Gradient() + { + colorKeys = new GradientColorKey[2] { + new GradientColorKey(MMColors.Black, 0), + new GradientColorKey(MMColors.Black, 1f) + }, + alphaKeys = new GradientAlphaKey[2] { new GradientAlphaKey(1, 0), new GradientAlphaKey(1, 1) } + }; + /// the name of the sorting layer to put this health bar on + [Tooltip("the name of the sorting layer to put this health bar on")] + public string SortingLayerName = "UI"; + /// the delay to apply to the delayed bar if drawn + [Tooltip("the delay to apply to the delayed bar if drawn")] + public float Delay = 0.5f; + /// whether or not the front bar should lerp + [Tooltip("whether or not the front bar should lerp")] + public bool LerpFrontBar = true; + /// the speed at which the front bar lerps + [Tooltip("the speed at which the front bar lerps")] + public float LerpFrontBarSpeed = 15f; + /// whether or not the delayed bar should lerp + [Tooltip("whether or not the delayed bar should lerp")] + public bool LerpDelayedBar = true; + /// the speed at which the delayed bar lerps + [Tooltip("the speed at which the delayed bar lerps")] + public float LerpDelayedBarSpeed = 15f; + /// if this is true, bumps the scale of the healthbar when its value changes + [Tooltip("if this is true, bumps the scale of the healthbar when its value changes")] + public bool BumpScaleOnChange = true; + /// the duration of the bump animation + [Tooltip("the duration of the bump animation")] + public float BumpDuration = 0.2f; + /// the animation curve to map the bump animation on + [Tooltip("the animation curve to map the bump animation on")] + public AnimationCurve BumpAnimationCurve = AnimationCurve.Constant(0,1,1); + + + /// the mode the bar should follow the target in + [Tooltip("the mode the bar should follow the target in")] + public MMFollowTarget.UpdateModes FollowTargetMode = MMFollowTarget.UpdateModes.LateUpdate; + /// if this is true, the drawn health bar will adapt its rotation to match the one of its target + [Tooltip("if this is true, the drawn health bar will adapt its rotation to match the one of its target")] + public bool FollowRotation = false; + /// if this is true, the drawn health bar will adapt its scale to match the one of its target + [Tooltip("if this is true, the drawn health bar will adapt its scale to match the one of its target")] + public bool FollowScale = true; + /// if this is true, the drawn health bar will be nested below the MMHealthBar + [Tooltip("if this is true, the drawn health bar will be nested below the MMHealthBar")] + public bool NestDrawnHealthBar = false; + /// if this is true, a MMBillboard component will be added to the progress bar to make sure it always looks towards the camera + [Tooltip("if this is true, a MMBillboard component will be added to the progress bar to make sure it always looks towards the camera")] + public bool Billboard = false; + + [Header("Death")] + /// a gameobject (usually a particle system) to instantiate when the healthbar reaches zero + [Tooltip("a gameobject (usually a particle system) to instantiate when the healthbar reaches zero")] + public GameObject InstantiatedOnDeath; + + [Header("Offset")] + [MMInformation("Set the offset (in world units), relative to the object's center, to which the health bar will be displayed.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// the offset to apply to the healthbar compared to the object's center + [Tooltip("the offset to apply to the healthbar compared to the object's center")] + public Vector3 HealthBarOffset = new Vector3(0f,1f,0f); + + [Header("Display")] + [MMInformation("Here you can define whether or not the healthbar should always be visible. If not, you can set here how long after a hit it'll remain visible.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// whether or not the bar should be permanently displayed + [Tooltip("whether or not the bar should be permanently displayed")] + public bool AlwaysVisible = true; + /// the duration (in seconds) during which to display the bar + [Tooltip("the duration (in seconds) during which to display the bar")] + public float DisplayDurationOnHit = 1f; + /// if this is set to true the bar will hide itself when it reaches zero + [Tooltip("if this is set to true the bar will hide itself when it reaches zero")] + public bool HideBarAtZero = true; + /// the delay (in seconds) after which to hide the bar + [Tooltip("the delay (in seconds) after which to hide the bar")] + public float HideBarAtZeroDelay = 1f; + + [Header("Test")] + /// a test value to use when pressing the TestUpdateHealth button + [Tooltip("a test value to use when pressing the TestUpdateHealth button")] + public float TestMinHealth = 0f; + /// a test value to use when pressing the TestUpdateHealth button + [Tooltip("a test value to use when pressing the TestUpdateHealth button")] + public float TestMaxHealth = 100f; + /// a test value to use when pressing the TestUpdateHealth button + [Tooltip("a test value to use when pressing the TestUpdateHealth button")] + public float TestCurrentHealth = 25f; + [MMInspectorButton("TestUpdateHealth")] + public bool TestUpdateHealthButton; + + + protected MMProgressBar _progressBar; + protected MMFollowTarget _followTransform; + protected float _lastShowTimestamp = 0f; + protected bool _showBar = false; + protected Image _backgroundImage = null; + protected Image _borderImage = null; + protected Image _foregroundImage = null; + protected Image _delayedImage = null; + protected bool _finalHideStarted = false; + + /// + /// On Start, creates or sets the health bar up + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// On enable, initializes the bar again + /// + protected void OnEnable() + { + _finalHideStarted = false; + + SetInitialActiveState(); + } + + /// + /// Forces the bar into its initial active state (hiding it if AlwaysVisible is false) + /// + public virtual void SetInitialActiveState() + { + if (!AlwaysVisible && (_progressBar != null)) + { + ShowBar(false); + } + } + + /// + /// Shows or hides the bar by changing its object's active state + /// + /// + public virtual void ShowBar(bool state) + { + _progressBar.gameObject.SetActive(state); + } + + /// + /// Whether or not the bar is currently active + /// + /// + public virtual bool BarIsShown() + { + return _progressBar.gameObject.activeInHierarchy; + } + + /// + /// Initializes the bar (handles visibility, parenting, initial value + /// + public virtual void Initialization() + { + _finalHideStarted = false; + + if (_progressBar != null) + { + ShowBar(AlwaysVisible); + return; + } + + switch (HealthBarType) + { + case HealthBarTypes.Prefab: + if (HealthBarPrefab == null) + { + Debug.LogWarning(this.name + " : the HealthBar has no prefab associated to it, nothing will be displayed."); + return; + } + _progressBar = Instantiate(HealthBarPrefab, transform.position + HealthBarOffset, transform.rotation) as MMProgressBar; + SceneManager.MoveGameObjectToScene(_progressBar.gameObject, this.gameObject.scene); + _progressBar.transform.SetParent(this.transform); + _progressBar.gameObject.name = "HealthBar"; + break; + case HealthBarTypes.Drawn: + DrawHealthBar(); + UpdateDrawnColors(); + break; + case HealthBarTypes.Existing: + _progressBar = TargetProgressBar; + break; + } + + if (!AlwaysVisible) + { + ShowBar(false); + } + + if (_progressBar != null) + { + _progressBar.SetBar(100f, 0f, 100f); + } + } + + + /// + /// Draws the health bar. + /// + protected virtual void DrawHealthBar() + { + GameObject newGameObject = new GameObject(); + SceneManager.MoveGameObjectToScene(newGameObject, this.gameObject.scene); + newGameObject.name = "HealthBar|"+this.gameObject.name; + + if (NestDrawnHealthBar) + { + newGameObject.transform.SetParent(this.transform); + } + + _progressBar = newGameObject.AddComponent(); + + _followTransform = newGameObject.AddComponent(); + _followTransform.Offset = HealthBarOffset; + _followTransform.Target = this.transform; + _followTransform.FollowRotation = FollowRotation; + _followTransform.FollowScale = FollowScale; + _followTransform.InterpolatePosition = false; + _followTransform.InterpolateRotation = false; + _followTransform.UpdateMode = FollowTargetMode; + + Canvas newCanvas = newGameObject.AddComponent(); + newCanvas.renderMode = RenderMode.WorldSpace; + newCanvas.transform.localScale = Vector3.one; + newCanvas.GetComponent().sizeDelta = Size; + if (!string.IsNullOrEmpty(SortingLayerName)) + { + newCanvas.sortingLayerName = SortingLayerName; + } + + GameObject container = new GameObject(); + container.transform.SetParent(newGameObject.transform); + container.name = "MMProgressBarContainer"; + container.transform.localScale = Vector3.one; + + GameObject borderImageGameObject = new GameObject(); + borderImageGameObject.transform.SetParent(container.transform); + borderImageGameObject.name = "HealthBar Border"; + _borderImage = borderImageGameObject.AddComponent(); + _borderImage.transform.position = Vector3.zero; + _borderImage.transform.localScale = Vector3.one; + _borderImage.GetComponent().sizeDelta = Size; + _borderImage.GetComponent().anchoredPosition = Vector3.zero; + + GameObject bgImageGameObject = new GameObject(); + bgImageGameObject.transform.SetParent(container.transform); + bgImageGameObject.name = "HealthBar Background"; + _backgroundImage = bgImageGameObject.AddComponent(); + _backgroundImage.transform.position = Vector3.zero; + _backgroundImage.transform.localScale = Vector3.one; + _backgroundImage.GetComponent().sizeDelta = Size - BackgroundPadding*2; + _backgroundImage.GetComponent().anchoredPosition = -_backgroundImage.GetComponent().sizeDelta/2; + _backgroundImage.GetComponent().pivot = Vector2.zero; + + GameObject delayedImageGameObject = new GameObject(); + delayedImageGameObject.transform.SetParent(container.transform); + delayedImageGameObject.name = "HealthBar Delayed Foreground"; + _delayedImage = delayedImageGameObject.AddComponent(); + _delayedImage.transform.position = Vector3.zero; + _delayedImage.transform.localScale = Vector3.one; + _delayedImage.GetComponent().sizeDelta = Size - BackgroundPadding*2; + _delayedImage.GetComponent().anchoredPosition = -_delayedImage.GetComponent().sizeDelta/2; + _delayedImage.GetComponent().pivot = Vector2.zero; + + GameObject frontImageGameObject = new GameObject(); + frontImageGameObject.transform.SetParent(container.transform); + frontImageGameObject.name = "HealthBar Foreground"; + _foregroundImage = frontImageGameObject.AddComponent(); + _foregroundImage.transform.position = Vector3.zero; + _foregroundImage.transform.localScale = Vector3.one; + _foregroundImage.color = ForegroundColor.Evaluate(1); + _foregroundImage.GetComponent().sizeDelta = Size - BackgroundPadding*2; + _foregroundImage.GetComponent().anchoredPosition = -_foregroundImage.GetComponent().sizeDelta/2; + _foregroundImage.GetComponent().pivot = Vector2.zero; + + if (Billboard) + { + MMBillboard billboard = _progressBar.gameObject.AddComponent(); + billboard.NestObject = !NestDrawnHealthBar; + } + + _progressBar.LerpDecreasingDelayedBar = LerpDelayedBar; + _progressBar.LerpForegroundBar = LerpFrontBar; + _progressBar.LerpDecreasingDelayedBarSpeed = LerpDelayedBarSpeed; + _progressBar.LerpForegroundBarSpeedIncreasing = LerpFrontBarSpeed; + _progressBar.ForegroundBar = _foregroundImage.transform; + _progressBar.DelayedBarDecreasing = _delayedImage.transform; + _progressBar.DecreasingDelay = Delay; + _progressBar.BumpScaleOnChange = BumpScaleOnChange; + _progressBar.BumpDuration = BumpDuration; + _progressBar.BumpScaleAnimationCurve = BumpAnimationCurve; + _progressBar.TimeScale = (TimeScale == TimeScales.Time) ? MMProgressBar.TimeScales.Time : MMProgressBar.TimeScales.UnscaledTime; + container.transform.localEulerAngles = InitialRotationAngles; + _progressBar.Initialization(); + } + + /// + /// On Update, we hide or show our healthbar based on our current status + /// + protected virtual void Update() + { + if (_progressBar == null) + { + return; + } + + if (_finalHideStarted) + { + return; + } + + UpdateDrawnColors(); + + if (AlwaysVisible) + { + return; + } + + if (_showBar) + { + ShowBar(true); + float currentTime = (TimeScale == TimeScales.UnscaledTime) ? Time.unscaledTime : Time.time; + if (currentTime - _lastShowTimestamp > DisplayDurationOnHit) + { + _showBar = false; + } + } + else + { + if (BarIsShown()) + { + ShowBar(false); + } + } + } + + /// + /// Hides the bar when it reaches zero + /// + /// The hide bar. + protected virtual IEnumerator FinalHideBar() + { + _finalHideStarted = true; + if (InstantiatedOnDeath != null) + { + GameObject instantiatedOnDeath = Instantiate(InstantiatedOnDeath, this.transform.position + HealthBarOffset, this.transform.rotation); + SceneManager.MoveGameObjectToScene(instantiatedOnDeath.gameObject, this.gameObject.scene); + } + if (HideBarAtZeroDelay == 0) + { + _showBar = false; + ShowBar(false); + yield return null; + } + else + { + _progressBar.HideBar(HideBarAtZeroDelay); + } + } + + /// + /// Updates the colors of the different bars + /// + protected virtual void UpdateDrawnColors() + { + if (HealthBarType != HealthBarTypes.Drawn) + { + return; + } + + if (_progressBar.Bumping) + { + return; + } + + if (_borderImage != null) + { + _borderImage.color = BorderColor.Evaluate(_progressBar.BarProgress); + } + + if (_backgroundImage != null) + { + _backgroundImage.color = BackgroundColor.Evaluate(_progressBar.BarProgress); + } + + if (_delayedImage != null) + { + _delayedImage.color = DelayedColor.Evaluate(_progressBar.BarProgress); + } + + if (_foregroundImage != null) + { + _foregroundImage.color = ForegroundColor.Evaluate(_progressBar.BarProgress); + } + } + + /// + /// Updates the bar + /// + /// Current health. + /// Minimum health. + /// Max health. + /// Whether or not we should show the bar. + public virtual void UpdateBar(float currentHealth, float minHealth, float maxHealth, bool show) + { + // if the healthbar isn't supposed to be always displayed, we turn it on for the specified duration + if (!AlwaysVisible && show) + { + _showBar = true; + _lastShowTimestamp = (TimeScale == TimeScales.UnscaledTime) ? Time.unscaledTime : Time.time; + } + + if (_progressBar != null) + { + _progressBar.UpdateBar(currentHealth, minHealth, maxHealth) ; + + if (HideBarAtZero && _progressBar.BarTarget <= 0) + { + StartCoroutine(FinalHideBar()); + } + + if (BumpScaleOnChange) + { + _progressBar.Bump(); + } + } + } + + /// + /// A test method used to update the bar when pressing the TestUpdateHealth button in the inspector + /// + protected virtual void TestUpdateHealth() + { + UpdateBar(TestCurrentHealth, TestMinHealth, TestMaxHealth, true); + } + + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMHealthBar.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMHealthBar.cs.meta new file mode 100644 index 0000000..f4561ae --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMHealthBar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8abe6344b7148db4687d3c84e7712904 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMOnPointer.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMOnPointer.cs new file mode 100644 index 0000000..0715e74 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMOnPointer.cs @@ -0,0 +1,79 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.EventSystems; + +namespace MoreMountains.Tools +{ + /// + /// A simple helper class you can use to trigger methods on Unity's pointer events + /// Typically used on a UI Image + /// + public class MMOnPointer : MonoBehaviour, IPointerDownHandler, IPointerEnterHandler, IPointerUpHandler, IPointerExitHandler, IPointerClickHandler + { + [Header("Pointer movement")] + /// an event to trigger when the pointer enters the associated game object + [Tooltip("an event to trigger when the pointer enters the associated game object")] + public UnityEvent PointerEnter; + /// an event to trigger when the pointer exits the associated game object + [Tooltip("an event to trigger when the pointer exits the associated game object")] + public UnityEvent PointerExit; + + [Header("Clicks")] + /// an event to trigger when the pointer is pressed down on the associated game object + [Tooltip("an event to trigger when the pointer is pressed down on the associated game object")] + public UnityEvent PointerDown; + /// an event to trigger when the pointer is pressed up on the associated game object + [Tooltip("an event to trigger when the pointer is pressed up on the associated game object")] + public UnityEvent PointerUp; + /// an event to trigger when the pointer is clicked on the associated game object + [Tooltip("an event to trigger when the pointer is clicked on the associated game object")] + public UnityEvent PointerClick; + + /// + /// IPointerEnterHandler implementation + /// + /// + public void OnPointerEnter(PointerEventData eventData) + { + PointerEnter?.Invoke(); + } + + /// + /// IPointerExitHandler implementation + /// + /// + public void OnPointerExit(PointerEventData eventData) + { + PointerExit?.Invoke(); + } + + /// + /// IPointerDownHandler implementation + /// + /// + public void OnPointerDown(PointerEventData eventData) + { + PointerDown?.Invoke(); + } + + /// + /// IPointerUpHandler implementation + /// + /// + public void OnPointerUp(PointerEventData eventData) + { + PointerUp?.Invoke(); + } + + /// + /// IPointerClickHandler implementation + /// + /// + public void OnPointerClick(PointerEventData eventData) + { + PointerClick?.Invoke(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMOnPointer.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMOnPointer.cs.meta new file mode 100644 index 0000000..cd13a1b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMOnPointer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b69e4219f8a33d46b034129f4d3ddea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMPSBToUIConverter.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMPSBToUIConverter.cs new file mode 100644 index 0000000..9b63eda --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMPSBToUIConverter.cs @@ -0,0 +1,129 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + [AddComponentMenu("More Mountains/Tools/GUI/MMPSBToUIConverter")] + public class MMPSBToUIConverter : MonoBehaviour + { + [Header("Target")] + public Canvas TargetCanvas; + public float ScaleFactor = 100f; + public bool ReplicateNesting = false; + + [Header("Size")] + public float TargetWidth = 2048; + public float TargetHeight = 1152; + + [Header("Conversion")] + [MMInspectorButton("ConvertToCanvas")] + public bool ConvertToCanvasButton; + public Vector3 ChildImageOffset = new Vector3(-1024f, -576f, 0f); + + protected Transform _topLevel; + protected Dictionary _sortingOrders; + + public virtual void ConvertToCanvas() + { + Screen.SetResolution((int)TargetWidth, (int)TargetHeight, true); + + _sortingOrders = new Dictionary(); + + // remove existing canvas if found + foreach (Transform child in TargetCanvas.transform) + { + if (child.name == this.name) + { + child.MMDestroyAllChildren(); + DestroyImmediate(child.gameObject); + } + } + + // force size on canvas scaler + CanvasScaler canvasScaler = TargetCanvas.GetComponent(); + if (canvasScaler != null) + { + canvasScaler.referenceResolution = new Vector2(TargetWidth, TargetHeight); + } + + // create a parent in the target canvas + GameObject newRoot = new GameObject(this.name, typeof(RectTransform)); + newRoot.transform.SetParent(TargetCanvas.transform); + RectTransform newRootRect = newRoot.GetComponent(); + SetupForStretch(newRootRect); + + _topLevel = newRoot.transform; + CreateImageForChildren(this.transform, newRoot.transform); + + // apply sorting orders + foreach (KeyValuePair pair in _sortingOrders) + { + pair.Key.SetSiblingIndex(pair.Value); + } + } + + /// + /// Recursively goes through the children of the specified "root" Transform, and parents them to the specified "parent" + /// + /// + /// + protected virtual void CreateImageForChildren(Transform root, Transform parent) + { + foreach (Transform child in root) + { + GameObject imageGO = new GameObject(child.name, typeof(RectTransform)); + imageGO.transform.localPosition = ScaleFactor * child.transform.localPosition; + if (ReplicateNesting) + { + imageGO.transform.SetParent(parent); + } + else + { + imageGO.transform.SetParent(_topLevel); + Vector3 newLocalPosition = imageGO.transform.localPosition; + newLocalPosition.x = newLocalPosition.x + TargetWidth / 2f; + imageGO.transform.localPosition = newLocalPosition; + } + + SpriteRenderer spriteRenderer = child.gameObject.GetComponent(); + if (spriteRenderer != null) + { + Image image = imageGO.AddComponent(); + image.sprite = spriteRenderer.sprite; + _sortingOrders.Add(image.transform, spriteRenderer.sortingOrder); + image.SetNativeSize(); + + RectTransform imageGoRect = imageGO.GetComponent(); + Vector3 newPosition = imageGoRect.localPosition; + newPosition += ChildImageOffset; + newPosition.z = 0f; + imageGoRect.localPosition = newPosition; + } + else + { + imageGO.name += " - NODE"; + RectTransform imageGoRect = imageGO.GetComponent(); + imageGoRect.sizeDelta = new Vector2(TargetWidth, TargetHeight); + imageGoRect.localPosition = Vector3.zero; + } + imageGO.GetComponent().localScale = Vector3.one; + CreateImageForChildren(child, imageGO.transform); + } + } + + protected virtual void SetupForStretch(RectTransform rect) + { + rect.localPosition = Vector3.zero; + rect.anchorMin = new Vector2(0, 0); + rect.anchorMax = new Vector2(1, 1); + rect.pivot = new Vector2(0.5f, 0.5f); + rect.offsetMin = Vector2.zero; + rect.offsetMax = Vector2.zero; + rect.localScale = Vector3.one; + } + + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMPSBToUIConverter.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMPSBToUIConverter.cs.meta new file mode 100644 index 0000000..8182794 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMPSBToUIConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 886cecdd9d0da7e429a987be6cccf1da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMParallaxUI.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMParallaxUI.cs new file mode 100644 index 0000000..c56919d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMParallaxUI.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + using UnityEngine.InputSystem; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Use this class to bind a number of UI layers to the movements of a mouse cursor, or a mobile device gyroscope, or even have it be piloted by another script + /// By setting different speed/amplitude values for each of your UI layers, you'll be able to create a nice parallax effect + /// + public class MMParallaxUI : MonoBehaviour + { + /// + /// A class used to store layer settings + /// + [Serializable] + public class ParallaxLayer + { + /// the rect transform for this layer + public RectTransform Rect; + /// the speed at which this layer should move + public float Speed = 2f; + /// the maximum distance this layer can travel from its starting position + public float Amplitude = 50f; + /// the starting position for this layer + [HideInInspector] + public Vector2 StartPosition; + /// if this is false, this layer won't move + public bool Active = true; + } + + /// the possible modes used to pilot this parallax rig + public enum Modes { Mouse, Gyroscope, Script } + /// the selected mode for this parallax setup. note that gyroscope mode is only available on mobile devices + public Modes Mode = Modes.Mouse; + /// a multiplier to apply to all layers' amplitudes + public float AmplitudeMultiplier = 1f; + /// a speed multiplier to apply to all layers' speeds + public float SpeedMultiplier = 1f; + /// a list of all the layers to pilot + public List ParallaxLayers; + + protected Vector2 _referencePosition; + protected Vector3 _newPosition; + protected Vector2 _mousePosition; + + /// + /// On Start we initialize our reference position + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// Initializes the start position of all layers + /// + public virtual void Initialization() + { + foreach (ParallaxLayer layer in ParallaxLayers) + { + layer.StartPosition = layer.Rect.position; + } + } + + /// + /// On Update, moves all layers according to the selected mode + /// + protected virtual void Update() + { + MoveLayers(); + } + + /// + /// Computes the input data according to the selected mode, and moves the layers accordingly + /// + protected virtual void MoveLayers() + { + switch (Mode) + { + case Modes.Gyroscope: + _referencePosition = MMGyroscope.CalibratedInputAcceleration; + break; + case Modes.Mouse: + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + _mousePosition = Mouse.current.position.ReadValue(); + #else + _mousePosition = Input.mousePosition; + #endif + _referencePosition = Camera.main.ScreenToViewportPoint(_mousePosition); + break; + } + + foreach (ParallaxLayer layer in ParallaxLayers) + { + if (layer.Active) + { + _newPosition.x = Mathf.Lerp(layer.Rect.position.x, layer.StartPosition.x + _referencePosition.x * layer.Amplitude * AmplitudeMultiplier, layer.Speed * SpeedMultiplier * Time.deltaTime); + _newPosition.y = Mathf.Lerp(layer.Rect.position.y, layer.StartPosition.y + _referencePosition.y * layer.Amplitude * AmplitudeMultiplier, layer.Speed * SpeedMultiplier * Time.deltaTime); + _newPosition.z = 0; + + layer.Rect.position = _newPosition; + } + } + } + + /// + /// Sets a new reference position, to use when in Script mode + /// + /// + public virtual void SetReferencePosition(Vector3 newReferencePosition) + { + _referencePosition = newReferencePosition; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMParallaxUI.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMParallaxUI.cs.meta new file mode 100644 index 0000000..1e28320 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMParallaxUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2852911d573562f4a836903e5c779c94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMProgressBarDemoAuto.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMProgressBarDemoAuto.cs new file mode 100644 index 0000000..626ee75 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMProgressBarDemoAuto.cs @@ -0,0 +1,69 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +#endif +using System.Collections; +using MoreMountains.Tools; + +namespace MoreMountains.Tools +{ + public class MMProgressBarDemoAuto : MonoBehaviour + { + public enum TestModes { Permanent, OneTime } + public TestModes TestMode = TestModes.Permanent; + + [MMEnumCondition("TestMode", (int)TestModes.Permanent)] + public float CurrentValue = 0f; + [MMEnumCondition("TestMode", (int)TestModes.Permanent)] + public float MinValue = 0f; + [MMEnumCondition("TestMode", (int)TestModes.Permanent)] + public float MaxValue = 100f; + [MMEnumCondition("TestMode", (int)TestModes.Permanent)] + public float Speed = 1f; + + [MMEnumCondition("TestMode", (int)TestModes.OneTime)] + public float OneTimeNewValue; + [MMEnumCondition("TestMode", (int)TestModes.OneTime)] + public float OneTimeMinValue; + [MMEnumCondition("TestMode", (int)TestModes.OneTime)] + public float OneTimeMaxValue; + [MMEnumCondition("TestMode", (int)TestModes.OneTime)] + [MMInspectorButton("OneTime")] + public bool OneTimeButton; + + protected float _direction = 1f; + protected MMProgressBar _progressBar; + + protected virtual void Start() + { + Initialization (); + } + + protected virtual void Initialization() + { + _progressBar = GetComponent (); + } + + protected virtual void Update() + { + if (TestMode == TestModes.Permanent) + { + #if MM_UI + _progressBar.UpdateBar(CurrentValue, MinValue, MaxValue); + #endif + CurrentValue += Speed * Time.deltaTime * _direction; + if ((CurrentValue <= MinValue) || (CurrentValue >= MaxValue)) + { + _direction *= -1; + } + } + } + + protected virtual void OneTime() + { + #if MM_UI + _progressBar.UpdateBar(OneTimeNewValue, OneTimeMinValue, OneTimeMaxValue); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMProgressBarDemoAuto.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMProgressBarDemoAuto.cs.meta new file mode 100644 index 0000000..db9dc73 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMProgressBarDemoAuto.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 8d6b0cf6d1d21694084a7227b664276e +timeCreated: 1523894192 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMRadialProgressBar.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMRadialProgressBar.cs new file mode 100644 index 0000000..6b3bbed --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMRadialProgressBar.cs @@ -0,0 +1,60 @@ +#if MM_UI +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a radial image and it'll allow you to control its fill amount + /// This is a legacy class, and it's recommended to use MMProgressBar instead, it'll provide the same functionality + /// (make sure you pick FillAmount as the FillMode) + /// and much more options, such as delayed bars, events, bump, and more! + /// + [Obsolete("This component is obsolete, it's recommended to use MMProgressBar instead", true)] + public class MMRadialProgressBar : MonoBehaviour + { + /// the start fill amount value + public float StartValue = 1f; + /// the end goad fill amount value + public float EndValue = 0f; + /// the distance to the start or end value at which the class should start lerping + public float Tolerance = 0.01f; + /// optional - the ID of the player associated to this bar + public string PlayerID; + + protected Image _radialImage; + protected float _newPercent; + + /// + /// On awake we grab our Image component + /// + protected virtual void Awake() + { + _radialImage = GetComponent(); + } + + /// + /// Call this method to update the fill amount based on a currentValue between minValue and maxValue + /// + /// Current value. + /// Minimum value. + /// Max value. + public virtual void UpdateBar(float currentValue,float minValue,float maxValue) + { + _newPercent = MMMaths.Remap(currentValue,minValue,maxValue,StartValue,EndValue); + if (_radialImage == null) { return; } + _radialImage.fillAmount = _newPercent; + if (_radialImage.fillAmount > 1 - Tolerance) + { + _radialImage.fillAmount = 1; + } + if (_radialImage.fillAmount < Tolerance) + { + _radialImage.fillAmount = 0; + } + + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMRadialProgressBar.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMRadialProgressBar.cs.meta new file mode 100644 index 0000000..8887c7b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMRadialProgressBar.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6875477705097214296780853d481a87 +timeCreated: 1523969902 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMRaycastTarget.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMRaycastTarget.cs new file mode 100644 index 0000000..072c521 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMRaycastTarget.cs @@ -0,0 +1,25 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +using System.Collections; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a UI object to have it act as a raycast target without needing an Image component + /// + [AddComponentMenu("More Mountains/Tools/GUI/MMRaycastTarget")] + public class MMRaycastTarget : Graphic + { + public override void SetVerticesDirty() { return; } + public override void SetMaterialDirty() { return; } + + protected override void OnPopulateMesh(VertexHelper vh) + { + vh.Clear(); + return; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMRaycastTarget.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMRaycastTarget.cs.meta new file mode 100644 index 0000000..c2c334e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMRaycastTarget.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf220d92758f9a54bae271726c599936 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMSceneName.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMSceneName.cs new file mode 100644 index 0000000..d716b97 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMSceneName.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using UnityEngine.SceneManagement; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// This component, when added on a Text component, will display the name of the level + /// + public class MMSceneName : MonoBehaviour + { + protected Text _text; + + /// + /// On Awake, stores the Text component + /// + protected virtual void Awake() + { + _text = this.gameObject.GetComponent(); + } + + /// + /// On Start, sets the level name + /// + protected virtual void Start() + { + SetLevelNameText(); + } + + /// + /// Assigns the level name to the Text + /// + public virtual void SetLevelNameText() + { + if (_text != null) + { + _text.text = SceneManager.GetActiveScene().name; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMSceneName.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMSceneName.cs.meta new file mode 100644 index 0000000..54880ab --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMSceneName.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d45db69777541e74c8e5f0f820540601 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMSelectionBase.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMSelectionBase.cs new file mode 100644 index 0000000..30757a0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMSelectionBase.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace MoreMountains.Tools +{ + [SelectionBase] + /// + /// Add this component to an object and it'll always get selection in scene view, even if you select one of its children + /// + [AddComponentMenu("More Mountains/Tools/GUI/MMSelectionBase")] + public class MMSelectionBase : MonoBehaviour + { + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMSelectionBase.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMSelectionBase.cs.meta new file mode 100644 index 0000000..a3c1500 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMSelectionBase.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0617763b4190c364093ae8e7b62aea45 +timeCreated: 1523894192 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMSliderStep.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMSliderStep.cs new file mode 100644 index 0000000..5e4af0b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMSliderStep.cs @@ -0,0 +1,57 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a UI slider and it'll let you trigger events when the cursor moves past a certain step + /// + [AddComponentMenu("More Mountains/Tools/GUI/MMSliderStep")] + [RequireComponent(typeof(Slider))] + public class MMSliderStep : MonoBehaviour + { + [Header("Slider Step")] + /// the threshold to trigger steps at + public float StepThreshold = 0.1f; + /// the event to trigger when a step is met + public UnityEvent OnStep; + + protected Slider _slider; + protected float _lastStep = 0f; + + /// + /// On enable, starts listening for value change events + /// + protected virtual void OnEnable() + { + _slider = this.gameObject.GetComponent(); + _slider.onValueChanged.AddListener(ValueChangeCheck); + } + + /// + /// On disable, stops listening for value change events + /// + protected virtual void OnDisable() + { + _slider.onValueChanged.RemoveListener(ValueChangeCheck); + } + + /// + /// when a value change is met, we trigger an event + /// + /// + public virtual void ValueChangeCheck(float value) + { + if (Mathf.Abs(_slider.value - _lastStep) > StepThreshold) + { + _lastStep = _slider.value; + OnStep?.Invoke(); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMSliderStep.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMSliderStep.cs.meta new file mode 100644 index 0000000..113aece --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMSliderStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6b7fc2cafd170f4f8b039b213b568c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMTwoSidedUI.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMTwoSidedUI.cs new file mode 100644 index 0000000..06b64e4 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMTwoSidedUI.cs @@ -0,0 +1,136 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// This class lets you define an axis on which to flip a "two sided" UI element (made of two separate and usually aligned objects, effectively turning each side on/off everytime the container's scale goes above/below a certain threshold + /// + [ExecuteAlways] + public class MMTwoSidedUI : MonoBehaviour + { + /// the possible axis on which to flip the double object + public enum Axis { x, y, z } + + [Header("Bindings")] + /// the object to consider as the "front" of the two sided element. Will be visible if the scale is above the threshold + public GameObject Front; + /// the object to consider as the "back" of the two sided element. Will be visible if the scale is below the threshold + public GameObject Back; + + [Header("Axis")] + /// the axis on which to flip this object + public Axis FlipAxis; + /// the scale threshold at which the flip should occur + public float ScaleThreshold = 0f; + + [Header("Events")] + /// an event to invoke on flip + public UnityEvent OnFlip; + + [Header("Debug")] + /// whether or not we're in debug mode + public bool DebugMode; + /// the value to apply to the scale when in debug mode + [Range(-1f, 1f)] + public float ScaleValue; + /// whether or not our object is flipped right now + [MMReadOnly] + public bool BackVisible = false; + + protected RectTransform _rectTransform; + protected bool _initialized = false; + + /// + /// On Start we initialize our object + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init we grab our rect transform and initialize visibility + /// + protected virtual void Initialization() + { + _rectTransform = this.gameObject.GetComponent(); + _initialized = true; + + float axis = GetScaleValue(); + BackVisible = (axis < ScaleThreshold); + + Front.SetActive(!BackVisible); + Back.SetActive(BackVisible); + } + + /// + /// On Update we update visibility if needed + /// + protected virtual void Update() + { + #if UNITY_EDITOR + IfEditor(); + #endif + + float axis = GetScaleValue(); + + if ((axis < ScaleThreshold) != BackVisible) + { + Front.SetActive(BackVisible); + Back.SetActive(!BackVisible); + OnFlip?.Invoke(); + } + BackVisible = (axis < ScaleThreshold); + } + + /// + /// If in editor, we initialize if needed, and apply the debug scale value if needed + /// + protected virtual void IfEditor() + { + if (!_initialized) + { + Initialization(); + } + + if (DebugMode) + { + switch (FlipAxis) + { + case Axis.x: + _rectTransform.localScale = new Vector3(ScaleValue, _rectTransform.localScale.y, _rectTransform.localScale.z); + break; + case Axis.y: + _rectTransform.localScale = new Vector3(_rectTransform.localScale.x, ScaleValue, _rectTransform.localScale.z); + break; + case Axis.z: + _rectTransform.localScale = new Vector3(_rectTransform.localScale.x, _rectTransform.localScale.y, ScaleValue); + break; + } + } + } + + /// + /// Returns the scale of the selected axis + /// + /// + protected virtual float GetScaleValue() + { + switch (FlipAxis) + { + case Axis.x: + return _rectTransform.localScale.x; + case Axis.y: + return _rectTransform.localScale.y; + case Axis.z: + return _rectTransform.localScale.z; + } + + return 0f; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMTwoSidedUI.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMTwoSidedUI.cs.meta new file mode 100644 index 0000000..b2f4904 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMTwoSidedUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4c4ad5c65605834a8f3d6718580bd06 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMUIFollowMouse.cs b/Assets/Feel/MMTools/Accessories/MMGUI/MMUIFollowMouse.cs new file mode 100644 index 0000000..68154ec --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMUIFollowMouse.cs @@ -0,0 +1,28 @@ +using UnityEngine; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace MoreMountains.Tools +{ + /// + /// This component will let you have a UI object follow the mouse position + /// + public class MMUIFollowMouse : MonoBehaviour + { + public virtual Canvas TargetCanvas { get; set; } + protected Vector2 _newPosition; + protected Vector2 _mousePosition; + + protected virtual void LateUpdate() + { + #if !ENABLE_INPUT_SYSTEM || ENABLE_LEGACY_INPUT_MANAGER + _mousePosition = Input.mousePosition; + #else + _mousePosition = Mouse.current.position.ReadValue(); + #endif + RectTransformUtility.ScreenPointToLocalPointInRectangle(TargetCanvas.transform as RectTransform, _mousePosition, TargetCanvas.worldCamera, out _newPosition); + transform.position = TargetCanvas.transform.TransformPoint(_newPosition); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/MMUIFollowMouse.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/MMUIFollowMouse.cs.meta new file mode 100644 index 0000000..9fb62a3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/MMUIFollowMouse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 245a91b1a8b30dc479ea9c354ba36cb8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Materials.meta b/Assets/Feel/MMTools/Accessories/MMGUI/Materials.meta new file mode 100644 index 0000000..6e702f9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4d3807e6b23e624b8fab3d72a31e3c2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMask.mat b/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMask.mat new file mode 100644 index 0000000..94d3938 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMask.mat @@ -0,0 +1,84 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMFaderRoundMaterialMask + m_Shader: {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: UNITY_UI_ALPHACLIP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _ColorMask: 0 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stencil: 1 + - _StencilComp: 8 + - _StencilOp: 2 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _UseUIAlphaClip: 1 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMask.mat.meta b/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMask.mat.meta new file mode 100644 index 0000000..047501b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMask.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9497e52f2de0254eaec18ccb13d788f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMasked.mat b/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMasked.mat new file mode 100644 index 0000000..c97fd02 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMasked.mat @@ -0,0 +1,84 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMFaderRoundMaterialMasked + m_Shader: {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stencil: 2 + - _StencilComp: 3 + - _StencilOp: 0 + - _StencilReadMask: 1 + - _StencilWriteMask: 0 + - _UVSec: 0 + - _UseUIAlphaClip: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0, b: 0, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMasked.mat.meta b/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMasked.mat.meta new file mode 100644 index 0000000..ca74793 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/Materials/MMFaderRoundMaterialMasked.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1297af1e1808f5a48b35411d71934370 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/SelectionBase.cs b/Assets/Feel/MMTools/Accessories/MMGUI/SelectionBase.cs new file mode 100644 index 0000000..434500c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/SelectionBase.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace MoreMountains.Tools +{ + [SelectionBase] + /// + /// Add this component to an object and it'll always get selection in scene view, even if you select one of its children + /// + [AddComponentMenu("More Mountains/Tools/GUI/SelectionBase")] + public class SelectionBase : MonoBehaviour + { + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/SelectionBase.cs.meta b/Assets/Feel/MMTools/Accessories/MMGUI/SelectionBase.cs.meta new file mode 100644 index 0000000..1df10e0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/SelectionBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca4c1ca8bc423b748983b24393521cb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Sprites.meta b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites.meta new file mode 100644 index 0000000..52d4bb8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0e4f009781db7b2448c6cc133802cecf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMFaderRoundMask.png b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMFaderRoundMask.png new file mode 100644 index 0000000..4e22dc7 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMFaderRoundMask.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMFaderRoundMask.png.meta b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMFaderRoundMask.png.meta new file mode 100644 index 0000000..e893c25 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMFaderRoundMask.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 47332880f10dee4429534303790a8399 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 1cf89cd354fd1624b96d70e690de2f01 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMTools_GUI_1x1.png b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMTools_GUI_1x1.png new file mode 100644 index 0000000..8eefb90 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMTools_GUI_1x1.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMTools_GUI_1x1.png.meta b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMTools_GUI_1x1.png.meta new file mode 100644 index 0000000..45b8f6a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGUI/Sprites/MMTools_GUI_1x1.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: aff4855d499cb7646b344323f4129b58 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGizmos.meta b/Assets/Feel/MMTools/Accessories/MMGizmos.meta new file mode 100644 index 0000000..00711a7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0cc022323b189d543ad180cda15044c7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGizmos/MMGizmo.cs b/Assets/Feel/MMTools/Accessories/MMGizmos/MMGizmo.cs new file mode 100644 index 0000000..17690e8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGizmos/MMGizmo.cs @@ -0,0 +1,191 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object and it'll let you display a gizmo for its position or collider, and an optional text + /// + public class MMGizmo : MonoBehaviour + { + /// + /// the possible types of gizmos to display + /// + public enum GizmoTypes { None, Collider, Position } + /// + /// whether to display gizmos always or only when the object is selected + /// + public enum DisplayModes { Always, OnlyWhenSelected } + + /// + /// the shape of the gizmo to display the position of the object + /// + public enum PositionModes + { + Point, Cube, WireCube, Sphere, WireSphere, Texture, Arrows, RightArrow, UpArrow, ForwardArrow, + Lines, RightLine, UpLine, ForwardLine + } + /// + /// what to display as text for that gizmo + /// + public enum TextModes { GameObjectName, CustomText, Position, Rotation, Scale, Property } + /// + /// when displaying a collider, whether to display a full or wire gizmo + /// + public enum ColliderRenderTypes { Full, Wire } + + [Header("Modes")] + /// if this is true, gizmos will be displayed, if this is false, gizmos won't be displayed + [Tooltip("if this is true, gizmos will be displayed, if this is false, gizmos won't be displayed")] + public bool DisplayGizmo = true; + /// what the gizmos should represent. Collider will show the bounds of the associated collider, Position will show the position of the object + [Tooltip("what the gizmos should represent. Collider will show the bounds of the associated collider, Position will show the position of the object")] + public GizmoTypes GizmoType = GizmoTypes.Position; + /// whether gizmos should always be displayed, or only when selected + [Tooltip("whether gizmos should always be displayed, or only when selected")] + public DisplayModes DisplayMode = DisplayModes.Always; + + [Header("Settings")] + /// the color of the collider or position gizmo + [Tooltip("the color of the collider or position gizmo")] + public Color GizmoColor = MMColors.ReunoYellow; + /// the shape of the gizmo when in position mode + [Tooltip("the shape of the gizmo when in position mode")] + [MMEnumCondition("GizmoType", (int)GizmoTypes.Position)] + public PositionModes PositionMode = PositionModes.Point; + /// the texture to display as a gizmo when in position & texture mode + [Tooltip("the texture to display as a gizmo when in position & texture mode")] + [MMEnumCondition("PositionMode", (int)PositionModes.Texture)] + public Texture PositionTexture; + /// the size of the texture to display as a gizmo + [Tooltip("the size of the texture to display as a gizmo")] + [MMEnumCondition("PositionMode", (int)PositionModes.Texture)] + public Vector2 TextureSize = new Vector2(50f,50f); + /// the size of the gizmo when in position mode + [Tooltip("the size of the gizmo when in position mode")] + [MMEnumCondition("GizmoType", (int)GizmoTypes.Position)] + public float PositionSize = 0.2f; + /// whether to display the collider gizmo as a wire or a full mesh + [Tooltip("whether to display the collider gizmo as a wire or a full mesh")] + [MMEnumCondition("GizmoType", (int)GizmoTypes.Collider)] + public ColliderRenderTypes ColliderRenderType = ColliderRenderTypes.Full; + /// the distance from the scene view camera beyond which the gizmo won't be displayed + [Tooltip("the distance from the scene view camera beyond which the gizmo won't be displayed")] + public float ViewDistance = 20f; + + [Header("Offsets")] + /// an offset to apply when drawing a collider or position gizmo + [Tooltip("an offset to apply when drawing a collider or position gizmo")] + public Vector3 GizmoOffset = Vector3.zero; + + /// whether or not to lock the position of the gizmo on the x axis, regardless of the position of the object + [Tooltip("whether or not to lock the position of the gizmo on the x axis, regardless of the position of the object")] + public bool LockX = false; + /// the position at which to put the gizmo when locked on the x axis + [Tooltip("the position at which to put the gizmo when locked on the x axis")] + [MMCondition("LockX", true)] + public float LockedX = 0f; + + /// whether or not to lock the position of the gizmo on the y axis, regardless of the position of the object + [Tooltip("whether or not to lock the position of the gizmo on the y axis, regardless of the position of the object")] + public bool LockY = false; + /// the position at which to put the gizmo when locked on the y axis + [Tooltip("the position at which to put the gizmo when locked on the y axis")] + [MMCondition("LockY", true)] + public float LockedY = 0f; + + /// whether or not to lock the position of the gizmo on the z axis, regardless of the position of the object + [Tooltip("whether or not to lock the position of the gizmo on the z axis, regardless of the position of the object")] + public bool LockZ = false; + /// the position at which to put the gizmo when locked on the z axis + [Tooltip("the position at which to put the gizmo when locked on the z axis")] + [MMCondition("LockZ", true)] + public float LockedZ = 0f; + + [Header("Text")] + /// whether or not to display text on that gizmo + [Tooltip("whether or not to display text on that gizmo")] + public bool DisplayText = false; + /// what to display as text for that gizmo (some custom text, the object's name, position, rotation, scale, or a target property) + [Tooltip("what to display as text for that gizmo (some custom text, the object's name, position, rotation, scale, or a target property)")] + [MMCondition("DisplayText", true)] + public TextModes TextMode; + /// when in CustomText mode, the text to display on that gizmo + [Tooltip("when in CustomText mode, the text to display on that gizmo")] + [MMEnumCondition("TextMode", (int)TextModes.CustomText)] + public string TextToDisplay = "Some Text"; + /// the offset to apply to the text + [Tooltip("the offset to apply to the text")] + [MMCondition("DisplayText", true)] + public Vector3 TextOffset = new Vector3(0f, 0.5f, 0f); + /// what style to use for the text's font + [Tooltip("what style to use for the text's font")] + [MMCondition("DisplayText", true)] + public FontStyle TextFontStyle = FontStyle.Normal; + /// the size of the text's font + [Tooltip("the size of the text's font")] + [MMCondition("DisplayText", true)] + public int TextSize = 12; + /// the color in which to display the gizmo's text + [Tooltip("the color in which to display the gizmo's text")] + [MMCondition("DisplayText", true)] + public Color TextColor = MMColors.ReunoYellow; + /// the color of the background behind the text + [Tooltip("the color of the background behind the text")] + [MMCondition("DisplayText", true)] + public Color TextBackgroundColor = new Color(0,0,0,0.3f); + /// the padding to apply to the text's background + [Tooltip("the padding to apply to the text's background")] + [MMCondition("DisplayText", true)] + public Vector4 TextPadding = new Vector4(5,0,5,0); + /// the distance from the scene view camera beyond which the gizmo text won't be displayed + [Tooltip("the distance from the scene view camera beyond which the gizmo text won't be displayed")] + [MMCondition("DisplayText", true)] + public float TextMaxDistance = 14f; + /// when in Property mode, the property whose value to display on the gizmo + [Tooltip("when in Property mode, the property whose value to display on the gizmo")] + public MMPropertyPicker TargetProperty; + + public virtual bool Initialized { get; set; } + public virtual SphereCollider _sphereCollider { get; set; } + public virtual BoxCollider _boxCollider { get; set; } + public virtual MeshCollider _meshCollider { get; set; } + public virtual CircleCollider2D _circleCollider2D { get; set; } + public virtual BoxCollider2D _boxCollider2D { get; set; } + public virtual Vector3 _vector3Zero { get; set; } + public virtual Vector3 _newPosition { get; set; } + public virtual Vector2 _worldToGUIPosition { get; set; } + public virtual Rect _textureRect { get; set; } + public virtual GUIStyle _textGUIStyle { get; set; } + public virtual string _textToDisplay { get; set; } + public virtual bool _sphereColliderNotNull { get; set; } + public virtual bool _boxColliderNotNull { get; set; } + public virtual bool _meshColliderNotNull { get; set; } + public virtual bool _circleCollider2DNotNull { get; set; } + public virtual bool _boxCollider2DNotNull { get; set; } + public virtual bool _positionTextureNotNull { get; set; } + + #if UNITY_EDITOR + + /// + /// On awake we initialize our property + /// + protected virtual void Awake() + { + TargetProperty.Initialization(this.gameObject); + } + + #else + + /// + /// If we're not in editor, we disable ourselves + /// + protected virtual void Awake() + { + this.enabled = false; + } + + #endif + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGizmos/MMGizmo.cs.meta b/Assets/Feel/MMTools/Accessories/MMGizmos/MMGizmo.cs.meta new file mode 100644 index 0000000..4b7920f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGizmos/MMGizmo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99ca21bfff9408f44bf12916ef8f4363 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGyroscope.meta b/Assets/Feel/MMTools/Accessories/MMGyroscope.meta new file mode 100644 index 0000000..8dc268a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGyroscope.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 985e4156b89ddc843b8571b2985ae315 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMGyroscope/MMGyroscope.cs b/Assets/Feel/MMTools/Accessories/MMGyroscope/MMGyroscope.cs new file mode 100644 index 0000000..1b7e93a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGyroscope/MMGyroscope.cs @@ -0,0 +1,279 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [AddComponentMenu("More Mountains/Tools/Gyroscope/MMGyroscope")] + public class MMGyroscope : MonoBehaviour + { + public enum TimeScales { Scaled, Unscaled } + + public static bool GyroscopeActive = true; + public static TimeScales TimeScale = TimeScales.Scaled; + public static Vector2 Clamps = new Vector2(-1f, 1f); + public static float LerpSpeed = 1f; + public static bool TestMode; + + [Header("Debug")] + /// turn this on if you want to use the inspector to test this camera + public bool _TestMode = false; + /// the rotation to apply on the x axiswhen in test mode + [Range(-1f, 1f)] + public float TestXAcceleration = 0f; + /// the rotation to apply on the y axis while in test mode + [Range(-1f, 1f)] + public float TestYAcceleration = 0f; + /// the rotation to apply on the y axis while in test mode + [Range(-1f, 1f)] + public float TestZAcceleration = 0f; + + public static Quaternion GyroscopeAttitude { get { GetValues(); return m_GyroscopeAttitude; } } + public static Vector3 GyroscopeRotationRate { get { GetValues(); return m_GyroscopeRotationRate; } } + public static Vector3 GyroscopeAcceleration { get { GetValues(); return m_GyroscopeAcceleration; } } + public static Vector3 InputAcceleration { get { GetValues(); return m_InputAcceleration; } } + public static Vector3 GyroscopeGravity { get { GetValues(); return m_GyroscopeGravity; } } + + public static Quaternion InitialGyroscopeAttitude { get { GetValues(); return m_InitialGyroscopeAttitude; } } + public static Vector3 InitialGyroscopeRotationRate { get { GetValues(); return m_InitialGyroscopeRotationRate; } } + public static Vector3 InitialGyroscopeAcceleration { get { GetValues(); return m_InitialGyroscopeAcceleration; } } + public static Vector3 InitialInputAcceleration { get { GetValues(); return m_InitialInputAcceleration; } } + public static Vector3 InitialGyroscopeGravity { get { GetValues(); return m_InitialGyroscopeGravity; } } + + public static Vector3 CalibratedInputAcceleration { get { GetValues(); return m_CalibratedInputAcceleration; } } + public static Vector3 CalibratedGyroscopeGravity { get { GetValues(); return m_CalibratedGyroscopeGravity; } } + + public static Vector3 LerpedCalibratedInputAcceleration { get { GetValues(); return m_LerpedCalibratedInputAcceleration; } } + public static Vector3 LerpedCalibratedGyroscopeGravity { get { GetValues(); return m_LerpedCalibratedGyroscopeGravity; } } + + private static Quaternion m_GyroscopeAttitude; + private static Vector3 m_GyroscopeRotationRate; + private static Vector3 m_GyroscopeAcceleration; + private static Vector3 m_InputAcceleration; + private static Vector3 m_GyroscopeGravity; + private static Quaternion m_InitialGyroscopeAttitude; + private static Vector3 m_InitialGyroscopeRotationRate; + private static Vector3 m_InitialGyroscopeAcceleration; + private static Vector3 m_InitialInputAcceleration; + private static Vector3 m_InitialGyroscopeGravity; + private static Vector3 m_CalibratedInputAcceleration; + private static Vector3 m_CalibratedGyroscopeGravity; + private static Vector3 m_LerpedCalibratedInputAcceleration; + private static Vector3 m_LerpedCalibratedGyroscopeGravity; + + [Header("Settings")] + /// whether this rig should move in scaled or unscaled time + [SerializeField] + private TimeScales _TimeScale = TimeScales.Scaled; + /// the clamps to apply to the values + [SerializeField] + private Vector2 _Clamps = new Vector2(-1f, 1f); + /// the speed at which to move towards the new position + [SerializeField] + private float _LerpSpeed = 1f; + + [Header("Raw Values")] + [MMReadOnly] + [SerializeField] + private Quaternion _GyroscopeAttitude; + [MMReadOnly] + [SerializeField] + private Vector3 _GyroscopeRotationRate; + [MMReadOnly] + [SerializeField] + private Vector3 _GyroscopeAcceleration; + [MMReadOnly] + [SerializeField] + private Vector3 _InputAcceleration; + [MMReadOnly] + [SerializeField] + private Vector3 _GyroscopeGravity; + + [Header("AutoCalibration Values")] + [MMReadOnly] + [SerializeField] + private Quaternion _InitialGyroscopeAttitude; + [MMReadOnly] + [SerializeField] + private Vector3 _InitialGyroscopeRotationRate; + [MMReadOnly] + [SerializeField] + private Vector3 _InitialGyroscopeAcceleration; + [MMReadOnly] + [SerializeField] + private Vector3 _InitialInputAcceleration; + [MMReadOnly] + [SerializeField] + private Vector3 _InitialGyroscopeGravity; + + [Header("Relative Values")] + [MMReadOnly] + [SerializeField] + private Vector3 _CalibratedInputAcceleration; + [MMReadOnly] + [SerializeField] + private Vector3 _CalibratedGyroscopeGravity; + + [Header("Lerped Values")] + [MMReadOnly] + [SerializeField] + private Vector3 _LerpedCalibratedInputAcceleration; + [MMReadOnly] + [SerializeField] + private Vector3 _LerpedCalibratedGyroscopeGravity; + + [MMInspectorButton("Calibrate")] + public bool CalibrateButton; + + private static Gyroscope _gyroscope; + protected static Vector3 _testVector = Vector3.zero; + private static bool _initialized = false; + private static Matrix4x4 _accelerationMatrix; + private static Matrix4x4 _gravityMatrix; + private static float _lastGetValuesAt = 0f; + + protected virtual void Start() + { + TimeScale = _TimeScale; + Clamps = _Clamps; + LerpSpeed = _LerpSpeed; + TestMode = _TestMode; + GyroscopeInitialization(); + } + + public static void GyroscopeInitialization() + { + _gyroscope = Input.gyro; + _gyroscope.enabled = true; + } + + protected virtual void Update() + { + if (!GyroscopeActive) + { + return; + } + HandleTestMode(); + GetValues(); + _GyroscopeAttitude = m_GyroscopeAttitude; + _GyroscopeRotationRate = m_GyroscopeRotationRate; + _GyroscopeAcceleration = m_GyroscopeAcceleration; + _InputAcceleration = m_InputAcceleration; + _GyroscopeGravity = m_GyroscopeGravity; + _InitialGyroscopeAttitude = m_InitialGyroscopeAttitude; + _InitialGyroscopeRotationRate = m_InitialGyroscopeRotationRate; + _InitialGyroscopeAcceleration = m_InitialGyroscopeAcceleration; + _InitialInputAcceleration = m_InitialInputAcceleration; + _InitialGyroscopeGravity = m_InitialGyroscopeGravity; + _CalibratedInputAcceleration = m_CalibratedInputAcceleration; + _CalibratedGyroscopeGravity = m_CalibratedGyroscopeGravity; + _LerpedCalibratedInputAcceleration = m_LerpedCalibratedInputAcceleration; + _LerpedCalibratedGyroscopeGravity = m_LerpedCalibratedGyroscopeGravity; + } + + public static void GetValues() + { + if (Time.frameCount == _lastGetValuesAt) + { + return; + } + AutoCalibration(); + GetGyroValues(); + _lastGetValuesAt = Time.frameCount; + } + + private static void GetGyroValues() + { + float deltaTime = (TimeScale == TimeScales.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; + + m_GyroscopeAttitude = GyroscopeToUnity(Input.gyro.attitude); + m_GyroscopeRotationRate = Input.gyro.rotationRateUnbiased; + m_GyroscopeAcceleration = Input.gyro.userAcceleration; + + GetAccelerationAndGravity(); + ClampAcceleration(); + + m_CalibratedInputAcceleration = CalibratedAcceleration(m_InputAcceleration, _accelerationMatrix); + m_CalibratedGyroscopeGravity = CalibratedAcceleration(m_GyroscopeGravity, _gravityMatrix); + + m_LerpedCalibratedInputAcceleration = Vector3.Lerp(m_LerpedCalibratedInputAcceleration, m_CalibratedInputAcceleration, deltaTime * LerpSpeed); + m_LerpedCalibratedGyroscopeGravity = Vector3.Lerp(m_LerpedCalibratedGyroscopeGravity, m_CalibratedGyroscopeGravity, deltaTime * LerpSpeed); + } + + private static void AutoCalibration() + { + if (!_initialized && Time.time > 0.5f) + { + m_InitialGyroscopeAttitude = GyroscopeToUnity(Input.gyro.attitude); + m_InitialGyroscopeRotationRate = Input.gyro.rotationRateUnbiased; + m_InitialGyroscopeAcceleration = Input.gyro.userAcceleration; + m_InitialInputAcceleration = Input.acceleration; + m_InitialGyroscopeGravity = Input.gyro.gravity; + + Calibrate(); + + _initialized = true; + } + } + + protected static Quaternion GyroscopeToUnity(Quaternion q) + { + return new Quaternion(q.x, q.y, -q.z, -q.w); + } + + private static void ClampAcceleration() + { + m_InputAcceleration.x = Mathf.Clamp(m_InputAcceleration.x, Clamps.x, Clamps.y); + m_InputAcceleration.y = Mathf.Clamp(m_InputAcceleration.y, Clamps.x, Clamps.y); + m_InputAcceleration.z = Mathf.Clamp(m_InputAcceleration.z, Clamps.x, Clamps.y); + + m_GyroscopeGravity.x = Mathf.Clamp(m_GyroscopeGravity.x, Clamps.x, Clamps.y); + m_GyroscopeGravity.y = Mathf.Clamp(m_GyroscopeGravity.y, Clamps.x, Clamps.y); + m_GyroscopeGravity.z = Mathf.Clamp(m_GyroscopeGravity.z, Clamps.x, Clamps.y); + } + + protected virtual void HandleTestMode() + { + if (TestMode) + { + _testVector.x = TestXAcceleration; + _testVector.y = TestYAcceleration; + _testVector.z = TestZAcceleration; + m_InputAcceleration = _testVector; + m_GyroscopeGravity = _testVector; + } + else + { + GetAccelerationAndGravity(); + } + } + + private static void GetAccelerationAndGravity() + { + if (!TestMode) + { + m_InputAcceleration = Input.acceleration; + m_GyroscopeGravity = Input.gyro.gravity; + } + } + + private static void Calibrate() + { + _accelerationMatrix = CalibrateAcceleration(m_InputAcceleration); + _gravityMatrix = CalibrateAcceleration(Input.gyro.gravity); + } + + private static Matrix4x4 CalibrateAcceleration(Vector3 initialAcceleration) + { + Quaternion rotationQuaternion = Quaternion.FromToRotation(-Vector3.forward, initialAcceleration); + Matrix4x4 newMatrix = Matrix4x4.TRS(Vector3.zero, rotationQuaternion, Vector3.one); + return newMatrix.inverse; + } + + private static Vector3 CalibratedAcceleration(Vector3 accelerator, Matrix4x4 matrix) + { + Vector3 fixedAcceleration = matrix.MultiplyVector(accelerator); + return fixedAcceleration; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMGyroscope/MMGyroscope.cs.meta b/Assets/Feel/MMTools/Accessories/MMGyroscope/MMGyroscope.cs.meta new file mode 100644 index 0000000..e7060e3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMGyroscope/MMGyroscope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3640adb06e738074793e72dc490d3600 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMInput.meta b/Assets/Feel/MMTools/Accessories/MMInput.meta new file mode 100644 index 0000000..0734236 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInput.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5b4184f94e451c4e8518b5d57258393 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMInput/MMAutoInputModule.cs b/Assets/Feel/MMTools/Accessories/MMInput/MMAutoInputModule.cs new file mode 100644 index 0000000..c13d026 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInput/MMAutoInputModule.cs @@ -0,0 +1,58 @@ +#if MM_UI +using System.Collections; +using UnityEngine; +using UnityEngine.EventSystems; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem.UI; +#endif + +namespace MoreMountains.Tools +{ + /// + /// This helper class handles adding the appropriate input module depending on whether the project is using the old or new input system + /// + public class MMAutoInputModule : MonoBehaviour + { + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + protected InputSystemUIInputModule _module; + #endif + + protected GameObject _eventSystemGameObject; + + /// + /// On Awake, we initialize the input module + /// + protected virtual void Awake() + { + StartCoroutine(InitializeInputModule()); + } + + /// + /// We add the appropriate input module + /// + /// + protected virtual IEnumerator InitializeInputModule() + { + EventSystem eventSystem = GameObject.FindObjectOfType(); + + if (eventSystem == null) + { + yield break; + } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + _eventSystemGameObject = eventSystem.gameObject; + _module = eventSystem.gameObject.AddComponent(); + // thanks new input system. + yield return null; + _module.enabled = false; + yield return null; + _module.enabled = true; + #else + eventSystem.gameObject.AddComponent(); + #endif + yield return null; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMInput/MMAutoInputModule.cs.meta b/Assets/Feel/MMTools/Accessories/MMInput/MMAutoInputModule.cs.meta new file mode 100644 index 0000000..5d47407 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInput/MMAutoInputModule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c82cf35166701394ab910f41269944f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation.meta b/Assets/Feel/MMTools/Accessories/MMInstantiation.meta new file mode 100644 index 0000000..47bd958 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 935c748f2686cf74e821219de159ef5c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomBoundsInstantiator.cs b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomBoundsInstantiator.cs new file mode 100644 index 0000000..59a9705 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomBoundsInstantiator.cs @@ -0,0 +1,157 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// This class lets you randomly spawn objects within its bounds (defined by a 3D collider) + /// + [RequireComponent(typeof(Collider))] + public class MMRandomBoundsInstantiator : MonoBehaviour + { + /// the possible start modes + public enum StartModes { Awake, Start, None } + /// the possible scale modes you can use to rescale objects + public enum ScaleModes { Uniform, Vector3 } + + [Header("Random instantiation")] + /// whether this instantiator should auto trigger on Awake, Start, or never + public StartModes StartMode = StartModes.Awake; + /// the name to give to the instantiated object + public string InstantiatedObjectName = "RandomInstantiated"; + /// if this is true, the instantiated object will be parented to the spawner + public bool ParentInstantiatedToThisObject = true; + /// if this is true, every time InstantiateRandomObject is called, any previously instantiated object will be destroyed + public bool DestroyPreviouslyInstantiatedObjects = true; + + [Header("Spawn")] + /// the list containing all the objects that can potentially be instantiated + public List RandomPool; + /// the min and max bounds to use to determine a random quantity of objects to spawn + [MMVector("Min", "Max")] + public Vector2Int Quantity = new Vector2Int(1, 1); + + [Header("Scale")] + /// the scale mode to use (uniform scales the whole object, Vector3 randomizes x, y and z scale elements + public ScaleModes ScaleMode = ScaleModes.Uniform; + /// the min scale to use in uniform mode + [MMEnumCondition("ScaleMode", (int)ScaleModes.Uniform)] + public float MinScale = 1f; + /// the max scale to use in uniform mode + [MMEnumCondition("ScaleMode", (int)ScaleModes.Uniform)] + public float MaxScale = 1f; + + /// the min scale to use in vector3 mode + [MMEnumCondition("ScaleMode", (int)ScaleModes.Vector3)] + public Vector3 MinVectorScale = Vector3.one; + /// the max scale to use in vector3 mode + [MMEnumCondition("ScaleMode", (int)ScaleModes.Vector3)] + public Vector3 MaxVectorScale = Vector3.one; + + [Header("Test")] + /// a test button for your inspector + [MMInspectorButton("Instantiate")] + public bool InstantiateButton; + + protected Collider _collider; + protected List _instantiatedGameObjects; + protected Vector3 _newScale = Vector3.zero; + + /// + /// On awake we instantiate if needed + /// + protected virtual void Awake() + { + _collider = this.gameObject.GetComponent(); + + if (StartMode == StartModes.Awake) + { + Instantiate(); + } + } + + /// + /// On Start we instantiate if needed + /// + protected virtual void Start() + { + if (StartMode == StartModes.Start) + { + Instantiate(); + } + } + + /// + /// Instantiates as many objects as needed, clearing previously existing ones if needed + /// + protected virtual void Instantiate() + { + if (_instantiatedGameObjects == null) + { + _instantiatedGameObjects = new List(); + } + + // we destroy our previous object if needed + if (DestroyPreviouslyInstantiatedObjects) + { + foreach(GameObject go in _instantiatedGameObjects) + { + DestroyImmediate(go); + } + _instantiatedGameObjects.Clear(); + } + + int random = Random.Range(Quantity.x, Quantity.y); + for (int i = 0; i < random; i++) + { + InstantiateRandomObject(); + } + } + + /// + /// Spawns a random object from the pool of choices + /// + public virtual void InstantiateRandomObject() + { + // if the pool is empty we do nothing and exit + if (RandomPool.Count == 0) + { + return; + } + + // pick a random object and instantiates it + int randomIndex = Random.Range(0, RandomPool.Count); + GameObject obj = Instantiate(RandomPool[randomIndex], this.transform.position, this.transform.rotation); + SceneManager.MoveGameObjectToScene(obj.gameObject, this.gameObject.scene); + + // we pick a random point within the bounds then move it to account for rotation/scale + obj.transform.position = MMBoundsExtensions.MMRandomPointInBounds(_collider.bounds); + obj.transform.position = _collider.ClosestPoint(obj.transform.position); + + // we name and parent our object + obj.name = InstantiatedObjectName; + if (ParentInstantiatedToThisObject) + { + obj.transform.SetParent(this.transform); + } + + // we rescale the object + switch (ScaleMode) + { + case ScaleModes.Uniform: + float newScale = Random.Range(MinScale, MaxScale); + obj.transform.localScale = Vector3.one * newScale; + break; + case ScaleModes.Vector3: + _newScale = MMMaths.RandomVector3(MinVectorScale, MaxVectorScale); + obj.transform.localScale = _newScale; + break; + } + + // we add it to our list + _instantiatedGameObjects.Add(obj); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomBoundsInstantiator.cs.meta b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomBoundsInstantiator.cs.meta new file mode 100644 index 0000000..64bb382 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomBoundsInstantiator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 290476dd0718b944c9de1d397bfa0f4d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomInstantiator.cs b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomInstantiator.cs new file mode 100644 index 0000000..e918363 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomInstantiator.cs @@ -0,0 +1,90 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to an empty object, bind a few prefabs into its RandomPool slots, and it'll instantiate one of them at its position/rotation on Start or Awake + /// You can also call its InstantiateRandomObject method at any time, and it'll instantiate another random object on demand, + /// potentially destroying the previous one if you decide so + /// + public class MMRandomInstantiator : MonoBehaviour + { + /// the possible start modes + public enum StartModes { Awake, Start, None } + + [Header("Random instantiation")] + /// whether this instantiator should auto trigger on Awake, Start, or never + public StartModes StartMode = StartModes.Awake; + /// the name to give to the instantiated object + public string InstantiatedObjectName = "RandomInstantiated"; + /// if this is true, the instantiated object will be parented to the spawner + public bool ParentInstantiatedToThisObject = true; + /// if this is true, every time InstantiateRandomObject is called, any previously instantiated object will be destroyed + public bool DestroyPreviouslyInstantiatedObject = true; + /// the list containing all the objects that can potentially be instantiated + public List RandomPool; + + [Header("Test")] + /// a test button for your inspector + [MMInspectorButton("InstantiateRandomObject")] + public bool InstantiateButton; + + protected GameObject _instantiatedGameObject; + + /// + /// On awake we instantiate if needed + /// + protected virtual void Awake() + { + if (StartMode == StartModes.Awake) + { + InstantiateRandomObject(); + } + } + + /// + /// On Start we instantiate if needed + /// + protected virtual void Start() + { + if (StartMode == StartModes.Start) + { + InstantiateRandomObject(); + } + } + + /// + /// Spawns a random object from the pool of choices + /// + public virtual void InstantiateRandomObject() + { + // if the pool is empty we do nothing and exit + if (RandomPool.Count == 0) + { + return; + } + + // we destroy our previous object if needed + if (DestroyPreviouslyInstantiatedObject) + { + if (_instantiatedGameObject != null) + { + DestroyImmediate(_instantiatedGameObject); + } + } + + // pick a random object and instantiates it + int randomIndex = Random.Range(0, RandomPool.Count); + _instantiatedGameObject = Instantiate(RandomPool[randomIndex], this.transform.position, this.transform.rotation); + SceneManager.MoveGameObjectToScene(_instantiatedGameObject, this.gameObject.scene); + _instantiatedGameObject.name = InstantiatedObjectName; + if (ParentInstantiatedToThisObject) + { + _instantiatedGameObject.transform.SetParent(this.transform); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomInstantiator.cs.meta b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomInstantiator.cs.meta new file mode 100644 index 0000000..b7beca3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMRandomInstantiator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c62e684cc894124e8d7b2992e2118b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAround.cs b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAround.cs new file mode 100644 index 0000000..53e9c5e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAround.cs @@ -0,0 +1,233 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This class is used to describe spawn properties, to be used by the MMSpawnAround class. + /// It's meant to be exposed and used by classes that are designed to spawn objects, typically loot systems + /// + [System.Serializable] + public class MMSpawnAroundProperties + { + /// the possible shapes objects can be spawned within + public enum MMSpawnAroundShapes { Sphere, Cube } + /// the shape within which objects should spawn + [Header("Shape")] + [Tooltip("the shape within which objects should spawn")] + public MMSpawnAroundShapes Shape = MMSpawnAroundShapes.Sphere; + + [Header("Position")] + /// the minimum distance to the origin of the spawn at which objects can be spawned + [Tooltip("the minimum distance to the origin of the spawn at which objects can be spawned")] + [MMEnumCondition("Shape", (int)MMSpawnAroundShapes.Sphere)] + public float MinimumSphereRadius = 1f; + /// the maximum distance to the origin of the spawn at which objects can be spawned + [Tooltip("the maximum distance to the origin of the spawn at which objects can be spawned")] + [MMEnumCondition("Shape", (int)MMSpawnAroundShapes.Sphere)] + public float MaximumSphereRadius = 2f; + /// the minimum size of the cube's base + [Tooltip("the minimum size of the cube's base")] + [MMEnumCondition("Shape", (int)MMSpawnAroundShapes.Cube)] + public Vector3 MinimumCubeBaseSize = Vector3.one; + /// the maximum size of the cube's base + [Tooltip("the maximum size of the cube's base")] + [MMEnumCondition("Shape", (int)MMSpawnAroundShapes.Cube)] + public Vector3 MaximumCubeBaseSize = new Vector3(2f, 2f, 2f); + + [Header("Plane")] + /// if this is true, spawn will be constrained to the plane defined by the NormalToSpawnPlane property + [Tooltip("if this is true, spawn will be constrained to the plane defined by the NormalToSpawnPlane property")] + public bool ForcePlane = true; + /// a Vector3 that specifies the normal to the plane you want to spawn objects on (if you want to spawn objects on the x/z plane, the normal to that plane would be the y axis (0,1,0) + [Tooltip("a Vector3 that specifies the normal to the plane you want to spawn objects on (if you want to spawn objects on the x/z plane, the normal to that plane would be the y axis (0,1,0)")] + public Vector3 NormalToSpawnPlane = Vector3.up; + + [Header("NormalAxisOffset")] + /// the minimum offset to apply on the normal axis + [Tooltip("the minimum offset to apply on the normal axis")] + public float MinimumNormalAxisOffset = 0f; + /// the maximum offset to apply on the normal axis + [Tooltip("the maximum offset to apply on the normal axis")] + public float MaximumNormalAxisOffset = 0f; + + [Header("NormalAxisOffsetCurve")] + /// whether or not to use a curve to offset the object's spawn position along the spawn plane + [Tooltip("whether or not to use a curve to offset the object's spawn position along the spawn plane")] + public bool UseNormalAxisOffsetCurve = false; + /// a curve used to define how distance to the origin should be altered (potentially above min/max distance) + [Tooltip("a curve used to define how distance to the origin should be altered (potentially above min/max distance)")] + [MMCondition("UseNormalAxisOffsetCurve",true)] + public AnimationCurve NormalOffsetCurve = new AnimationCurve(new Keyframe(0, 1f), new Keyframe(1, 1f)); + /// the value to which the curve's zero should be remapped to + [Tooltip("the value to which the curve's zero should be remapped to")] + [MMCondition("UseNormalAxisOffsetCurve",true)] + public float NormalOffsetCurveRemapZero = 0f; + /// the value to which the curve's one should be remapped to + [Tooltip("the value to which the curve's one should be remapped to")] + [MMCondition("UseNormalAxisOffsetCurve",true)] + public float NormalOffsetCurveRemapOne = 1f; + /// whether or not to invert the curve (horizontally) + [Tooltip("whether or not to invert the curve (horizontally)")] + [MMCondition("UseNormalAxisOffsetCurve",true)] + public bool InvertNormalOffsetCurve = false; + + [Header("Rotation")] + /// the minimum random rotation to apply (in degrees) + [Tooltip("the minimum random rotation to apply (in degrees)")] + public Vector3 MinimumRotation = Vector3.zero; + /// the maximum random rotation to apply (in degrees) + [Tooltip("the maximum random rotation to apply (in degrees)")] + public Vector3 MaximumRotation = Vector3.zero; + + [Header("Scale")] + /// the minimum random scale to apply + [Tooltip("the minimum random scale to apply")] + public Vector3 MinimumScale = Vector3.one; + /// the maximum random scale to apply + [Tooltip("the maximum random scale to apply")] + public Vector3 MaximumScale = Vector3.one; + } + + /// + /// This static class is a spawn helper, useful to randomize position, rotation and scale when you need to + /// instantiate objects + /// + public static class MMSpawnAround + { + public static void ApplySpawnAroundProperties(GameObject instantiatedObj, MMSpawnAroundProperties props, Vector3 origin) + { + // we randomize the position + instantiatedObj.transform.position = SpawnAroundPosition(props, origin); + // we randomize the rotation + instantiatedObj.transform.rotation = SpawnAroundRotation(props); + // we randomize the scale + instantiatedObj.transform.localScale = SpawnAroundScale(props); + } + + /// + /// Returns the position at which the object should spawn + /// + /// + /// + /// + public static Vector3 SpawnAroundPosition(MMSpawnAroundProperties props, Vector3 origin) + { + // we get the position of the object based on the defined plane and distance + Vector3 newPosition; + if (props.Shape == MMSpawnAroundProperties.MMSpawnAroundShapes.Sphere) + { + float distance = Random.Range(props.MinimumSphereRadius, props.MaximumSphereRadius); + newPosition = Random.insideUnitSphere; + if (props.ForcePlane) + { + newPosition = Vector3.Cross(newPosition, props.NormalToSpawnPlane); + } + + newPosition.Normalize(); + newPosition *= distance; + } + else + { + newPosition = PickPositionInsideCube(props); + if (props.ForcePlane) + { + newPosition = Vector3.Cross(newPosition, props.NormalToSpawnPlane); + } + } + + float randomOffset = Random.Range(props.MinimumNormalAxisOffset, props.MaximumNormalAxisOffset); + // we correct the position based on the NormalOffsetCurve + if (props.UseNormalAxisOffsetCurve) + { + float normalizedOffset = 0f; + if (randomOffset != 0) + { + if (props.InvertNormalOffsetCurve) + { + normalizedOffset = MMMaths.Remap(randomOffset, props.MinimumNormalAxisOffset, props.MaximumNormalAxisOffset, 1f, 0f); + } + else + { + normalizedOffset = MMMaths.Remap(randomOffset, props.MinimumNormalAxisOffset, props.MaximumNormalAxisOffset, 0f, 1f); + } + } + + float offset = props.NormalOffsetCurve.Evaluate(normalizedOffset); + offset = MMMaths.Remap(offset, 0f, 1f, props.NormalOffsetCurveRemapZero, props.NormalOffsetCurveRemapOne); + + newPosition *= offset; + } + // we apply the normal offset + newPosition += props.NormalToSpawnPlane.normalized * randomOffset; + + // relative position + newPosition += origin; + + return newPosition; + } + + public static Vector3 PickPositionInsideCube(MMSpawnAroundProperties props) + { + int iterationsCount = 0; + int maxIterationsCount = 1000; + while (iterationsCount < maxIterationsCount) + { + float randomX = Random.Range(0f, props.MaximumCubeBaseSize.x); + float randomY = Random.Range(0f, props.MaximumCubeBaseSize.y); + float randomZ = Random.Range(0f, props.MaximumCubeBaseSize.z); + + if (randomX < props.MinimumCubeBaseSize.x && randomY < props.MinimumCubeBaseSize.y && randomZ < props.MinimumCubeBaseSize.z) + { + iterationsCount++; + continue; + } + else + { + randomX = MMMaths.RollADice(2) > 1 ? -randomX : randomX; + randomY = MMMaths.RollADice(2) > 1 ? -randomY : randomY; + randomZ = MMMaths.RollADice(2) > 1 ? -randomZ : randomZ; + return new Vector3(randomX, randomY, randomZ); + } + } + return Vector3.zero; + } + + /// + /// Returns the scale at which the object should spawn + /// + /// + /// + public static Vector3 SpawnAroundScale(MMSpawnAroundProperties props) + { + return MMMaths.RandomVector3(props.MinimumScale, props.MaximumScale); + } + + /// + /// Returns the rotation at which the object should spawn + /// + /// + /// + public static Quaternion SpawnAroundRotation(MMSpawnAroundProperties props) + { + return Quaternion.Euler(MMMaths.RandomVector3(props.MinimumRotation, props.MaximumRotation)); + } + + /// + /// Draws gizmos to show the shape of the spawn area + /// + /// + /// + /// + /// + public static void DrawGizmos(MMSpawnAroundProperties props, Vector3 origin, int quantity, float size, Color gizmosColor) + { + Gizmos.color = gizmosColor; + for (int i = 0; i < quantity; i++) + { + Gizmos.DrawCube(SpawnAroundPosition(props, origin), SpawnAroundScale(props) * size); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAround.cs.meta b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAround.cs.meta new file mode 100644 index 0000000..5ffae73 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAround.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9f71c3d801e5f84b88c2cb7256503ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAroundTester.cs b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAroundTester.cs new file mode 100644 index 0000000..9e830af --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAroundTester.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// A tester class used to show how the MMSpawnAround class can be used + /// + public class MMSpawnAroundTester : MonoBehaviour + { + /// a GameObject to instantiate and position around this object + public GameObject ObjectToInstantiate; + /// the spawn properties to consider when spawning the ObjectToInstantiate + public MMSpawnAroundProperties SpawnProperties; + + [Header("Debug")] + /// the amount of objects to spawn + public int DebugQuantity = 10000; + + /// a test button + [MMInspectorButton("DebugSpawn")] + public bool DebugSpawnButton; + + [Header("Gizmos")] + /// whether or not to draw gizmos to show the shape of the spawn area + public bool DrawGizmos = false; + /// the amount of gizmos to draw + public int GizmosQuantity = 1000; + /// the size at which to draw the gizmos + public float GizmosSize = 1f; + + protected GameObject _gameObject; + + /// + /// A test method that spawns DebugQuantity objects + /// + public virtual void DebugSpawn() + { + for (int i = 0; i < DebugQuantity; i++) + { + Spawn(); + } + } + + /// + /// Spawns a single object and positions it correctly + /// + public virtual void Spawn() + { + _gameObject = Instantiate(ObjectToInstantiate); + SceneManager.MoveGameObjectToScene(_gameObject, this.gameObject.scene); + MMSpawnAround.ApplySpawnAroundProperties(_gameObject, SpawnProperties, this.transform.position); + } + + /// + /// OnDrawGizmos, we draw the shape of the area within which objects will spawn + /// + protected virtual void OnDrawGizmos() + { + if (DrawGizmos) + { + MMSpawnAround.DrawGizmos(SpawnProperties, this.transform.position, GizmosQuantity, GizmosSize, Color.gray); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAroundTester.cs.meta b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAroundTester.cs.meta new file mode 100644 index 0000000..b39d4db --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMInstantiation/MMSpawnAroundTester.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25aad3ee60dba574fb749c6ea78d559d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement.meta b/Assets/Feel/MMTools/Accessories/MMMovement.meta new file mode 100644 index 0000000..ea39301 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e28bcd9720070b0459e9d319149f7d9f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMAim.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMAim.cs new file mode 100644 index 0000000..ed25e85 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMAim.cs @@ -0,0 +1,154 @@ +using System; +using UnityEngine; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace MoreMountains.Tools +{ + [Serializable] + public class MMAim + { + /// the list of possible control modes . + public enum AimControls { Off, PrimaryMovement, SecondaryMovement, Mouse, Script } + /// the list of possible rotation modes + public enum RotationModes { Free, Strict4Directions, Strict8Directions } + + [Header("Control Mode")] + [MMInformation("Pick a control mode : mouse (aims towards the pointer), primary movement (you'll aim towards the current input direction), or secondary movement (aims " + + "towards a second input axis, think twin stick shooters), and set minimum and maximum angles.", MoreMountains.Tools.MMInformationAttribute.InformationType.Info, false)] + /// the aim control mode + public AimControls AimControl = AimControls.SecondaryMovement; + /// the rotation mode + public RotationModes RotationMode = RotationModes.Free; + + [Header("Limits")] + [Range(-180, 180)] + /// the minimum angle at which the weapon's rotation will be clamped + public float MinimumAngle = -180f; + [Range(-180, 180)] + /// the maximum angle at which the weapon's rotation will be clamped + public float MaximumAngle = 180f; + + /// the current angle the weapon is aiming at + [MMReadOnly] + public float CurrentAngle; + + public virtual Vector3 CurrentPosition { get; set; } + public virtual Vector2 PrimaryMovement { get; set; } + public virtual Vector2 SecondaryMovement { get; set; } + + protected float[] _possibleAngleValues; + protected Vector3 _currentAim = Vector3.zero; + protected Vector3 _direction; + protected Vector3 _mousePosition; + protected Vector2 _inputSystemMousePosition; + + protected Camera _mainCamera; + + /// + /// Grabs the weapon component, initializes the angle values + /// + public virtual void Initialization() + { + if (RotationMode == RotationModes.Strict4Directions) + { + _possibleAngleValues = new float[5]; + _possibleAngleValues[0] = -180f; + _possibleAngleValues[1] = -90f; + _possibleAngleValues[2] = 0f; + _possibleAngleValues[3] = 90f; + _possibleAngleValues[4] = 180f; + } + if (RotationMode == RotationModes.Strict8Directions) + { + _possibleAngleValues = new float[9]; + _possibleAngleValues[0] = -180f; + _possibleAngleValues[1] = -135f; + _possibleAngleValues[2] = -90f; + _possibleAngleValues[3] = -45f; + _possibleAngleValues[4] = 0f; + _possibleAngleValues[5] = 45f; + _possibleAngleValues[6] = 90f; + _possibleAngleValues[7] = 135f; + _possibleAngleValues[8] = 180f; + } + + _mainCamera = Camera.main; + } + + /// + /// Computes the current aim direction + /// + public virtual Vector2 GetCurrentAim() + { + switch (AimControl) + { + case AimControls.Off: + _currentAim = Vector2.zero; + break; + + case AimControls.Script: + // in that mode we simply use _currentAim, as set by the SetAim method + break; + + case AimControls.PrimaryMovement: + _currentAim = PrimaryMovement; + break; + + case AimControls.SecondaryMovement: + _currentAim = SecondaryMovement; + break; + + case AimControls.Mouse: + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + _mousePosition = Mouse.current.position.ReadValue(); + #else + _mousePosition = Input.mousePosition; + #endif + _mousePosition.z = 10; + _direction = _mainCamera.ScreenToWorldPoint(_mousePosition); + _direction.z = CurrentPosition.z; + _currentAim = _direction - CurrentPosition; + break; + + default: + _currentAim = Vector2.zero; + break; + } + + // we compute our angle in degrees + CurrentAngle = Mathf.Atan2(_currentAim.y, _currentAim.x) * Mathf.Rad2Deg; + + // we clamp our raw angle if needed + if ((CurrentAngle < MinimumAngle) || (CurrentAngle > MaximumAngle)) + { + float minAngleDifference = Mathf.DeltaAngle(CurrentAngle, MinimumAngle); + float maxAngleDifference = Mathf.DeltaAngle(CurrentAngle, MaximumAngle); + CurrentAngle = (Mathf.Abs(minAngleDifference) < Mathf.Abs(maxAngleDifference)) ? MinimumAngle : MaximumAngle; + } + + // we round to the closest angle + if (RotationMode == RotationModes.Strict4Directions || RotationMode == RotationModes.Strict8Directions) + { + CurrentAngle = MMMaths.RoundToClosest(CurrentAngle, _possibleAngleValues); + } + + // we clamp the final value + CurrentAngle = Mathf.Clamp(CurrentAngle, MinimumAngle, MaximumAngle); + + // we return our aim vector + _currentAim = (_currentAim.magnitude == 0f) ? Vector2.zero : MMMaths.RotateVector2(Vector2.right, CurrentAngle); + return _currentAim; + } + + /// + /// Use this method to set the aim when in AimControl mode : Script + /// + /// + public virtual void SetAim(Vector2 newAim) + { + _currentAim = newAim; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMAim.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMAim.cs.meta new file mode 100644 index 0000000..9d9cf61 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMAim.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e078eaa3f1defa44cad7a1243d113a84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMAutoRotate.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMAutoRotate.cs new file mode 100644 index 0000000..8ddad3b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMAutoRotate.cs @@ -0,0 +1,166 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a GameObject to make it rotate on itself + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMAutoRotate")] + public class MMAutoRotate : MonoBehaviour + { + public enum UpdateModes { Update, LateUpdate, FixedUpdate } + + [Header("Rotation")] + /// whether or not this object should be rotating right now + public bool Rotating = true; + [MMCondition("Rotating", true)] + /// the space to apply the rotation in + public Space RotationSpace = Space.Self; + /// whether movement should happen at Update, FixedUpdate or LateUpdate + public UpdateModes UpdateMode = UpdateModes.Update; + [MMCondition("Rotating", true)] + /// The rotation speed. Positive means clockwise, negative means counter clockwise. + public Vector3 RotationSpeed = new Vector3(100f, 0f, 0f); + + [Header("Orbit")] + /// if this is true, the object will also move around a pivot (only the position is affected, not the rotation) + public bool Orbiting = false; + [MMCondition("Orbiting", true)] + /// if this is true, the orbit plane will rotate along with the parent + public bool AdditiveOrbitRotation = false; + /// the pivot to rotate around (if left blank, will be the object itself + [MMCondition("Orbiting", true)] + public Transform OrbitCenterTransform; + /// the pivot (relative to the object's position in local space) to rotate around + [MMCondition("Orbiting", true)] + public Vector3 OrbitCenterOffset = Vector3.zero; + /// the axis around which the object should rotate (don't make it zero) + [MMCondition("Orbiting", true)] + public Vector3 OrbitRotationAxis = new Vector3(0f, 1f, 0f); + /// the speed at which to rotate + [MMCondition("Orbiting", true)] + public float OrbitRotationSpeed = 10f; + /// the radius at which to orbit + [MMCondition("Orbiting", true)] + public float OrbitRadius = 3f; + /// the speed at which the object catches up when orbit radius or axis changes + [MMCondition("Orbiting", true)] + public float OrbitCorrectionSpeed = 10f; + + [Header("Settings")] + /// if this is true, will draw gizmos to show the plane, orbit and direction + public bool DrawGizmos = true; + [MMCondition("DrawGizmos", true)] + /// the color of the orbit disc + public Color OrbitPlaneColor = new Color(54f, 169f, 225f, 0.02f); + [MMCondition("DrawGizmos", true)] + /// the color of the orbit line + public Color OrbitLineColor = new Color(225f, 225f, 225f, 0.1f); + + [HideInInspector] + public Vector3 _orbitCenter; + [HideInInspector] + public Vector3 _worldRotationAxis; + [HideInInspector] + public Plane _rotationPlane; + [HideInInspector] + public Vector3 _snappedPosition; + [HideInInspector] + public Vector3 _radius; + + protected Quaternion _newRotation; + protected Vector3 _desiredOrbitPosition; + private Vector3 _previousPosition; + + /// + /// On start, we initialize our plane + /// + protected virtual void Start() + { + _rotationPlane = new Plane(); + } + + /// + /// Makes the object rotate on its center at Update + /// + protected virtual void Update() + { + if (UpdateMode == UpdateModes.Update) + { + Rotate(); + } + } + + /// + /// Makes the object rotate on its center at FixedUpdate + /// + protected virtual void FixedUpdate() + { + if (UpdateMode == UpdateModes.FixedUpdate) + { + Rotate(); + } + } + + /// + /// Makes the object rotate on its center at LateUpdate + /// + protected virtual void LateUpdate() + { + if (UpdateMode == UpdateModes.LateUpdate) + { + Rotate(); + } + } + + /// + /// Sets Rotating to true or false + /// + /// + public virtual void Rotate(bool status) + { + Rotating = status; + } + + /// + /// Sets Orbiting to true or false + /// + /// + public virtual void Orbit(bool status) + { + Orbiting = status; + } + + /// + /// Rotates the object + /// + protected virtual void Rotate() + { + if (Rotating) + { + transform.Rotate(RotationSpeed * Time.deltaTime, RotationSpace); + } + + if (Orbiting) + { + _orbitCenter = OrbitCenterTransform.transform.position + OrbitCenterOffset; + if (AdditiveOrbitRotation) + { + _worldRotationAxis = OrbitCenterTransform.TransformDirection(OrbitRotationAxis); + } + else + { + _worldRotationAxis = OrbitRotationAxis; + } + _rotationPlane.SetNormalAndPosition(_worldRotationAxis.normalized, _orbitCenter); + _snappedPosition = _rotationPlane.ClosestPointOnPlane(this.transform.position); + _radius = OrbitRadius * Vector3.Normalize(_snappedPosition - _orbitCenter); + _newRotation = Quaternion.AngleAxis(OrbitRotationSpeed * Time.deltaTime, _worldRotationAxis); + _desiredOrbitPosition = _orbitCenter + _newRotation * _radius; + this.transform.position = Vector3.Lerp(this.transform.position, _desiredOrbitPosition, OrbitCorrectionSpeed * Time.deltaTime); + _previousPosition = _desiredOrbitPosition; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMAutoRotate.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMAutoRotate.cs.meta new file mode 100644 index 0000000..98605aa --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMAutoRotate.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 7f009572b4d918346b24337ef83f88c1 +timeCreated: 1523894079 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMFaceDirection.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMFaceDirection.cs new file mode 100644 index 0000000..edc64fd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMFaceDirection.cs @@ -0,0 +1,147 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Use this script to have a Transform automatically face a certain direction, whether its own movement direction, or a specific target Transform + /// + public class MMFaceDirection : MonoBehaviour + { + /// the possible Updates this script should run at + public enum UpdateModes { Update, LateUpdate, FixedUpdate } + /// the vector to point towards the direction + public enum ForwardVectors { Forward, Up, Right } + /// whether to point at this transform's movement direction, or at a target + public enum FacingModes { MovementDirection, Target } + + [Header("Facing Mode")] + /// whether to point at this transform's movement direction, or at a target + public FacingModes FacingMode = FacingModes.MovementDirection; + /// the target to face + [MMEnumCondition("FacingMode", (int) FacingModes.Target)] + public Transform FacingTarget; + /// the minimum distance to consider when computing the movement direction + [MMEnumCondition("FacingMode", (int) FacingModes.MovementDirection)] + public float MinimumMovementThreshold = 0.2f; + + [Header("Directions")] + /// the vector to point towards the direction + public ForwardVectors ForwardVector = ForwardVectors.Forward; + /// the angles by which to rotate the direction (in degrees) + public Vector3 DirectionRotationAngles = Vector3.zero; + + [Header("Axis Locks")] + public bool LockXAxis = false; + public bool LockYAxis = false; + public bool LockZAxis = false; + + [Header("Timing")] + /// the possible Updates this script should run at + public UpdateModes UpdateMode = UpdateModes.LateUpdate; + /// the speed at which to interpolate the rotation + public float InterpolationSpeed = 0.15f; + + protected Vector3 _direction; + protected Vector3 _positionLastFrame; + protected Transform _transform; + protected Vector3 _upwards; + protected Vector3 _targetPosition; + + /// + /// On Awake we initialize our behaviour + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// Caches upwards vector and transform + /// + protected virtual void Initialization() + { + _transform = this.transform; + _positionLastFrame = _transform.position; + switch (ForwardVector) + { + case ForwardVectors.Forward: + _upwards = Vector3.forward; + break; + case ForwardVectors.Up: + _upwards = Vector3.up; + break; + case ForwardVectors.Right: + _upwards = Vector3.right; + break; + } + } + + /// + /// Computes the direction to face + /// + protected virtual void FaceDirection() + { + if (FacingMode == FacingModes.Target) + { + _targetPosition = FacingTarget.position; + if (LockXAxis) { _targetPosition.x = _transform.position.x; } + if (LockYAxis) { _targetPosition.y = _transform.position.y; } + if (LockZAxis) { _targetPosition.z = _transform.position.z; } + + _direction = _targetPosition - _transform.position; + _direction = Quaternion.Euler(DirectionRotationAngles.x, DirectionRotationAngles.y, DirectionRotationAngles.z) * _direction; + ApplyRotation(); + } + + if (FacingMode == FacingModes.MovementDirection) + { + _direction = (_transform.position - _positionLastFrame).normalized; + if (LockXAxis) { _direction.x = 0; } + if (LockYAxis) { _direction.y = 0; } + if (LockZAxis) { _direction.z = 0; } + _direction = Quaternion.Euler(DirectionRotationAngles.x, DirectionRotationAngles.y, DirectionRotationAngles.z) * _direction; + + if (Vector3.Distance(_transform.position, _positionLastFrame) > MinimumMovementThreshold) + { + ApplyRotation(); + _positionLastFrame = _transform.position; + } + } + } + + /// + /// Rotates the transform + /// + protected virtual void ApplyRotation() + { + transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(_direction, _upwards), InterpolationSpeed * Time.time); + } + + /// + /// On Update we compute our direction if needed + /// + protected virtual void Update() + { + if (UpdateMode == UpdateModes.Update) { FaceDirection(); } + } + + /// + /// On LateUpdate we compute our direction if needed + /// + protected virtual void LateUpdate() + { + if (UpdateMode == UpdateModes.LateUpdate) { FaceDirection(); } + } + + /// + /// On FixedUpdate we compute our direction if needed + /// + protected virtual void FixedUpdate() + { + if (UpdateMode == UpdateModes.FixedUpdate) { FaceDirection(); } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMFaceDirection.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMFaceDirection.cs.meta new file mode 100644 index 0000000..387a087 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMFaceDirection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1374d534191fbdf40b704f29771981b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement.meta new file mode 100644 index 0000000..d561554 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a81a0d0af22c3fb45818ed2f5e47b2e1 +folderAsset: yes +timeCreated: 1483901466 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPath.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPath.cs new file mode 100644 index 0000000..807696c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPath.cs @@ -0,0 +1,466 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using MoreMountains.Tools; + +namespace MoreMountains.Tools +{ + [System.Serializable] + /// + /// This class describes a node on an MMPath + /// + public class MMPathMovementElement + { + /// the point that make up the path the object will follow + public Vector3 PathElementPosition; + /// a delay (in seconds) associated to each node + public float Delay; + } + + /// + /// Add this component to an object and you'll be able to define a path, that can then be used by another component + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMPath")] + public class MMPath : MonoBehaviour + { + /// the possible cycle options + public enum CycleOptions + { + BackAndForth, + Loop, + OnlyOnce + } + + /// the possible movement directions + public enum MovementDirection + { + Ascending, + Descending + } + + [Header("Path")] + [MMInformation("Here you can select the 'Cycle Option'. Back and Forth will have your object follow the path until its end, and go back to the original point. If you select Loop, the path will be closed and the object will move along it until told otherwise. If you select Only Once, the object will move along the path from the first to the last point, and remain there forever.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + public CycleOptions CycleOption; + + [MMInformation("Add points to the Path (set the size of the path first), then position the points using either the inspector or by moving the handles directly in scene view. For each path element you can specify a delay (in seconds). The order of the points will be the order the object follows.\nFor looping paths, you can then decide if the object will go through the points in the Path in Ascending (1, 2, 3...) or Descending (Last, Last-1, Last-2...) order.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// the initial movement direction : ascending > will go from the points 0 to 1, 2, etc ; descending > will go from the last point to last-1, last-2, etc + public MovementDirection LoopInitialMovementDirection = MovementDirection.Ascending; + /// the points that make up the path the object will follow + public List PathElements; + /// another MMPath that you can reference. If set, the reference MMPath's data will replace this MMPath's + public MMPath ReferenceMMPath; + /// if this is true, this object will move to the 0 position of the reference path + public bool AbsoluteReferencePath = false; + /// the minimum distance to a point at which we'll arbitrarily decide the point's been reached + public float MinDistanceToGoal = .1f; + /// if this is true, the path has reached its end + public bool EndReached => _endReached; + + [Header("Gizmos")] + public bool LockHandlesOnXAxis = false; + public bool LockHandlesOnYAxis = false; + public bool LockHandlesOnZAxis = false; + + /// the original position of the transform, hidden and shouldn't be accessed + protected Vector3 _originalTransformPosition; + /// internal flag, hidden and shouldn't be accessed + protected bool _originalTransformPositionStatus=false; + /// if this is true, the object can move along the path + public virtual bool CanMove { get; set; } + /// if this is true, this path has gone through its Initialization method + public virtual bool Initialized { get; set; } + + public virtual int Direction => _direction; + + protected bool _active=false; + protected IEnumerator _currentPoint; + protected int _direction = 1; + protected Vector3 _initialPosition; + protected Vector3 _initialPositionThisFrame; + protected Vector3 _finalPosition; + protected Vector3 _previousPoint = Vector3.zero; + protected int _currentIndex; + protected float _distanceToNextPoint; + protected bool _endReached = false; + + /// + /// Initialization + /// + protected virtual void Start () + { + if (!Initialized) + { + Initialization (); + } + } + + /// + /// Flag inits, initial movement determination, and object positioning + /// + public virtual void Initialization() + { + // on Start, we set our active flag to true + _active=true; + _endReached = false; + CanMove = true; + + // we copy our reference if needed + if ((ReferenceMMPath != null) && (ReferenceMMPath.PathElements != null || ReferenceMMPath.PathElements.Count > 0)) + { + if (AbsoluteReferencePath) + { + this.transform.position = ReferenceMMPath.transform.position; + } + PathElements = ReferenceMMPath.PathElements; + } + + // if the path is null we exit + if (PathElements == null || PathElements.Count < 1) + { + return; + } + + // if the first path element isn't at 0, we offset everything + if (PathElements[0].PathElementPosition != Vector3.zero) + { + Vector3 path0Position = PathElements[0].PathElementPosition; + this.transform.position += path0Position; + + foreach (MMPathMovementElement element in PathElements) + { + element.PathElementPosition -= path0Position; + } + } + + // we set our initial direction based on the settings + if (LoopInitialMovementDirection == MovementDirection.Ascending) + { + _direction=1; + } + else + { + _direction=-1; + } + + // we initialize our path enumerator + _initialPosition = this.transform.position; + + _currentPoint = GetPathEnumerator(); + _previousPoint = _currentPoint.Current; + _currentPoint.MoveNext(); + + // initial positioning + if (!_originalTransformPositionStatus) + { + _originalTransformPositionStatus = true; + _originalTransformPosition = transform.position; + } + transform.position = _originalTransformPosition + _currentPoint.Current; + } + + public int CurrentIndex() + { + return _currentIndex; + } + + public Vector3 CurrentPoint() + { + return _initialPosition + _currentPoint.Current; + } + + public Vector3 CurrentPositionRelative() + { + return _currentPoint.Current; + } + + /// + /// On update we keep moving along the path + /// + protected virtual void Update () + { + // if the path is null we exit, if we only go once and have reached the end we exit, if we can't move we exit + if(PathElements == null + || PathElements.Count < 1 + || _endReached + || !CanMove + ) + { + return; + } + + ComputePath (); + } + + /// + /// Moves the object and determines when a point has been reached + /// + protected virtual void ComputePath() + { + // we store our initial position to compute the current speed at the end of the udpate + _initialPositionThisFrame = this.transform.position; + + // we decide if we've reached our next destination or not, if yes, we move our destination to the next point + _distanceToNextPoint = (this.transform.position - (_originalTransformPosition + _currentPoint.Current)).magnitude; + if(_distanceToNextPoint < MinDistanceToGoal) + { + _previousPoint = _currentPoint.Current; + _currentPoint.MoveNext(); + } + + // we determine the current speed + _finalPosition = this.transform.position; + } + + /// + /// Returns the current target point in the path + /// + /// The path enumerator. + public virtual IEnumerator GetPathEnumerator() + { + + // if the path is null we exit + if(PathElements == null || PathElements.Count < 1) + { + yield break; + } + + int index = 0; + _currentIndex = index; + while (true) + { + _currentIndex = index; + yield return PathElements[index].PathElementPosition; + + if(PathElements.Count <= 1) + { + continue; + } + + // if the path is looping + if (CycleOption == CycleOptions.Loop) + { + index = index + _direction; + if(index < 0) + { + index = PathElements.Count-1; + } + else if(index > PathElements.Count - 1) + { + index = 0; + } + } + + if (CycleOption == CycleOptions.BackAndForth) + { + if(index <= 0) + { + _direction = 1; + } + else if(index >= PathElements.Count - 1) + { + _direction = -1; + } + index = index + _direction; + } + + if (CycleOption == CycleOptions.OnlyOnce) + { + if(index <= 0) + { + _direction = 1; + } + else if(index >= PathElements.Count - 1) + { + _direction = 0; + _endReached = true; + } + index = index + _direction; + } + } + } + + /// + /// Call this method to force a change in direction at any time + /// + public virtual void ChangeDirection() + { + _direction = - _direction; + _currentPoint.MoveNext(); + } + + /// + /// On DrawGizmos, we draw lines to show the path the object will follow + /// + protected virtual void OnDrawGizmos() + { + #if UNITY_EDITOR + if (PathElements==null) + { + return; + } + + if (PathElements.Count==0) + { + return; + } + + // if we haven't stored the object's original position yet, we do it + if (_originalTransformPositionStatus==false) + { + _originalTransformPosition = this.transform.position; + _originalTransformPositionStatus=true; + } + // if we're not in runtime mode and the transform has changed, we update our position + if (transform.hasChanged && (_active == false)) + { + _originalTransformPosition = this.transform.position; + } + // for each point in the path + for (int i=0;i + /// Updates the original transform position. + /// + /// New original transform position. + public virtual void UpdateOriginalTransformPosition(Vector3 newOriginalTransformPosition) + { + _originalTransformPosition = newOriginalTransformPosition; + } + + /// + /// Gets the original transform position. + /// + /// The original transform position. + public virtual Vector3 GetOriginalTransformPosition() + { + return _originalTransformPosition; + } + + /// + /// Sets the original transform position status. + /// + /// If set to true status. + public virtual void SetOriginalTransformPositionStatus(bool status) + { + _originalTransformPositionStatus = status; + } + + /// + /// Gets the original transform position status. + /// + /// true, if original transform position status was gotten, false otherwise. + public virtual bool GetOriginalTransformPositionStatus() + { + return _originalTransformPositionStatus ; + } + + /// + /// A data structure + /// + [System.Serializable] public struct Data + { + public static Data ForwardLoopingPath(Vector3 ctr, Vector3[] vtx, float wait) + => new Data() + { + Center = ctr, Offsets = vtx, Delay = wait, + Cycle = CycleOptions.Loop, Direction = MovementDirection.Ascending + }; + public static Data ForwardBackAndForthPath(Vector3 ctr, Vector3[] vtx, float wait) + => new Data() + { + Center = ctr, Offsets = vtx, Delay = wait, + Cycle = CycleOptions.BackAndForth, Direction = MovementDirection.Ascending + }; + public static Data ForwardOnlyOncePath(Vector3 ctr, Vector3[] vtx, float wait) + => new Data() + { + Center = ctr, Offsets = vtx, Delay = wait, + Cycle = CycleOptions.OnlyOnce, Direction = MovementDirection.Ascending + }; + + public Vector3 Center; + public Vector3[] Offsets; + public float Delay; + public CycleOptions Cycle; + public MovementDirection Direction; + } + + /// + /// Replaces this MMPath's settings with the ones passed in parameters + /// + /// + public void SetPath(in Data configuration) + { + if (configuration.Offsets == null) return; + + // same as on Start, we set our active flag to true + _active = true; + _endReached = false; + CanMove = true; + + PathElements = PathElements ?? new List(configuration.Offsets.Length); + PathElements.Clear(); + + foreach (var offset in configuration.Offsets) + { + PathElements.Add(new MMPathMovementElement() {Delay = configuration.Delay, PathElementPosition = offset}); + } + + // if the path is null we exit + if (PathElements == null || PathElements.Count < 1) + { + return; + } + + CycleOption = configuration.Cycle; + + // we set our initial direction based on the settings + if (configuration.Direction == MovementDirection.Ascending) + { + _direction = 1; + } + else + { + _direction = -1; + } + + _initialPosition = configuration.Center; + _originalTransformPosition = configuration.Center; + _currentPoint = GetPathEnumerator(); + _previousPoint = _currentPoint.Current; + _currentPoint.MoveNext(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPath.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPath.cs.meta new file mode 100644 index 0000000..4d6cf7d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b81dc1a6e4b189d4bae2faab8a2a1a25 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPathMovement.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPathMovement.cs new file mode 100644 index 0000000..03da692 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPathMovement.cs @@ -0,0 +1,514 @@ +using System; +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using Random = UnityEngine.Random; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object and it'll be able to move along a path defined from its inspector. + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMPathMovement")] + public class MMPathMovement : MonoBehaviour + { + /// the possible movement types + public enum PossibleAccelerationType { ConstantSpeed, EaseOut, AnimationCurve } + /// the possible cycle options + public enum CycleOptions { BackAndForth, Loop, OnlyOnce, StopAtBounds, Random } + /// the possible movement directions + public enum MovementDirection { Ascending, Descending } + /// whether progress on the pass should be made at update, fixed update or late update + public enum UpdateModes { Update, FixedUpdate, LateUpdate } + /// whether to align the path on nothing, this object's rotation, or this object's parent's rotation + public enum AlignmentModes { None, ThisRotation, ParentRotation } + + [Header("Path")] + [MMInformation("Here you can select the 'Cycle Option'. Back and Forth will have your object follow the path until its end, and go back to the original point. If you select Loop, the path will be closed and the object will move along it until told otherwise. If you select Only Once, the object will move along the path from the first to the last point, and remain there forever.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + public CycleOptions CycleOption; + + [MMInformation("Add points to the Path (set the size of the path first), then position the points using either the inspector or by moving the handles directly in scene view. For each path element you can specify a delay (in seconds). The order of the points will be the order the object follows.\nFor looping paths, you can then decide if the object will go through the points in the Path in Ascending (1, 2, 3...) or Descending (Last, Last-1, Last-2...) order.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// the initial movement direction : ascending > will go from the points 0 to 1, 2, etc ; descending > will go from the last point to last-1, last-2, etc + [Tooltip("the initial movement direction : ascending > will go from the points 0 to 1, 2, etc ; descending > will go from the last point to last-1, last-2, etc")] + public MovementDirection LoopInitialMovementDirection = MovementDirection.Ascending; + /// the points that make up the path the object will follow + [Tooltip("the points that make up the path the object will follow")] + public List PathElements; + + [Header("Path Alignment")] + /// whether to align the path on nothing, this object's rotation, or this object's parent's rotation + [Tooltip("whether to align the path on nothing, this object's rotation, or this object's parent's rotation")] + public AlignmentModes AlignmentMode = AlignmentModes.None; + + [Header("Movement")] + [MMInformation("Set the speed at which the path will be crawled, and if the movement should be constant or eased.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// the movement speed + [Tooltip("the movement speed")] + public float MovementSpeed = 1; + /// returns the current speed at which the object is traveling + public virtual Vector3 CurrentSpeed { get; protected set; } + /// the movement type of the object + [Tooltip("the movement type of the object")] + public PossibleAccelerationType AccelerationType = PossibleAccelerationType.ConstantSpeed; + /// the acceleration to apply to an object traveling between two points of the path. + [Tooltip("the acceleration to apply to an object traveling between two points of the path.")] + public AnimationCurve Acceleration = new AnimationCurve(new Keyframe(0,1f),new Keyframe(1f,0f)); + /// the chosen update mode (update, fixed update, late update) + [Tooltip("the chosen update mode (update, fixed update, late update)")] + public UpdateModes UpdateMode = UpdateModes.Update; + + [Header("Settings")] + [MMInformation("The MinDistanceToGoal is used to check if we've (almost) reached a point in the Path. The 2 other settings here are for debug only, don't change them.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// the minimum distance to a point at which we'll arbitrarily decide the point's been reached + [Tooltip("the minimum distance to a point at which we'll arbitrarily decide the point's been reached")] + public float MinDistanceToGoal = .1f; + /// the original position of the transform, hidden and shouldn't be accessed + [Tooltip("the original position of the transform, hidden and shouldn't be accessed")] + protected Vector3 _originalTransformPosition; + /// if this is true, the object can move along the path + public virtual bool CanMove { get; set; } + + protected bool _originalTransformPositionStatus = false; + protected bool _active=false; + protected IEnumerator _currentPoint; + protected int _direction = 1; + protected Vector3 _initialPosition; + protected Vector3 _finalPosition; + protected Vector3 _previousPoint = Vector3.zero; + protected float _waiting=0; + protected int _currentIndex; + protected float _distanceToNextPoint; + protected bool _endReached = false; + protected Vector3 _positionLastFrame; + protected Vector3 _vector3Zero = Vector3.zero; + + /// + /// Initialization + /// + protected virtual void Awake () + { + Initialization (); + } + + /// + /// On Start we store our initial position + /// + protected virtual void Start() + { + _originalTransformPosition = transform.position; + } + + /// + /// A public method you can call to reset the path + /// + public virtual void ResetPath() + { + Initialization(); + CanMove = false; + transform.position = _originalTransformPosition; + } + + /// + /// Flag inits, initial movement determination, and object positioning + /// + protected virtual void Initialization() + { + // on Start, we set our active flag to true + _active=true; + _endReached = false; + CanMove = true; + + // if the path is null we exit + if(PathElements == null || PathElements.Count < 1) + { + return; + } + + // we set our initial direction based on the settings + if (LoopInitialMovementDirection == MovementDirection.Ascending) + { + _direction=1; + } + else + { + _direction=-1; + } + + // we initialize our path enumerator + _currentPoint = GetPathEnumerator(); + _previousPoint = _currentPoint.Current; + _currentPoint.MoveNext(); + + // initial positioning + if (!_originalTransformPositionStatus) + { + _originalTransformPositionStatus = true; + _originalTransformPosition = transform.position; + } + transform.position = PointPosition(_currentPoint.Current); + } + + protected virtual void FixedUpdate() + { + if (UpdateMode == UpdateModes.FixedUpdate) + { + ExecuteUpdate(); + } + } + + protected virtual void LateUpdate() + { + if (UpdateMode == UpdateModes.LateUpdate) + { + ExecuteUpdate(); + } + } + + protected virtual void Update() + { + if (UpdateMode == UpdateModes.Update) + { + ExecuteUpdate(); + } + } + + /// + /// Override this to describe what happens when a point is reached + /// + protected virtual void PointReached() + { + + } + + /// + /// Override this to describe what happens when the end of the path is reached + /// + protected virtual void EndReached() + { + + } + + /// + /// On update we keep moving along the path + /// + protected virtual void ExecuteUpdate () + { + // if the path is null we exit, if we only go once and have reached the end we exit, if we can't move we exit + if(PathElements == null + || PathElements.Count < 1 + || _endReached + || !CanMove + ) + { + CurrentSpeed = _vector3Zero; + return; + } + + Move (); + + _positionLastFrame = this.transform.position; + } + + /// + /// Moves the object and determines when a point has been reached + /// + protected virtual void Move() + { + // we wait until we can proceed + _waiting -= Time.deltaTime; + if (_waiting > 0) + { + CurrentSpeed = Vector3.zero; + return; + } + + // we store our initial position to compute the current speed at the end of the udpate + _initialPosition = transform.position; + + // we move our object + MoveAlongThePath(); + + // we decide if we've reached our next destination or not, if yes, we move our destination to the next point + _distanceToNextPoint = (transform.position - (PointPosition(_currentPoint.Current))).magnitude; + if(_distanceToNextPoint < MinDistanceToGoal) + { + //we check if we need to wait + if (PathElements.Count > _currentIndex) + { + _waiting = PathElements[_currentIndex].Delay; + } + PointReached(); + _previousPoint = _currentPoint.Current; + _currentPoint.MoveNext(); + } + + // we determine the current speed + _finalPosition = this.transform.position; + if (Time.deltaTime != 0f) + { + CurrentSpeed = (_finalPosition - _initialPosition) / Time.deltaTime; + } + + if (_endReached) + { + EndReached(); + CurrentSpeed = Vector3.zero; + } + } + + /// + /// Moves the object along the path according to the specified movement type. + /// + public virtual void MoveAlongThePath() + { + switch (AccelerationType) + { + case PossibleAccelerationType.ConstantSpeed: + transform.position = Vector3.MoveTowards (transform.position, PointPosition(_currentPoint.Current), Time.deltaTime * MovementSpeed); + break; + + case PossibleAccelerationType.EaseOut: + transform.position = Vector3.Lerp (transform.position, PointPosition(_currentPoint.Current), Time.deltaTime * MovementSpeed); + break; + + case PossibleAccelerationType.AnimationCurve: + float distanceBetweenPoints = Vector3.Distance (_previousPoint, _currentPoint.Current); + + if (distanceBetweenPoints <= 0) + { + return; + } + + float remappedDistance = 1 - MMMaths.Remap (_distanceToNextPoint, 0f, distanceBetweenPoints, 0f, 1f); + float speedFactor = Acceleration.Evaluate (remappedDistance); + + transform.position = Vector3.MoveTowards (transform.position, PointPosition(_currentPoint.Current), Time.deltaTime * MovementSpeed * speedFactor); + break; + } + } + + /// + /// Returns the current target point in the path + /// + /// The path enumerator. + public virtual IEnumerator GetPathEnumerator() + { + + // if the path is null we exit + if(PathElements == null || PathElements.Count < 1) + { + yield break; + } + + int index = 0; + _currentIndex = index; + while (true) + { + _currentIndex = index; + yield return PathElements[index].PathElementPosition; + + if(PathElements.Count <= 1) + { + continue; + } + + // if the path is looping + switch(CycleOption) + { + case CycleOptions.Loop: + index = index + _direction; + if (index < 0) + { + index = PathElements.Count - 1; + } + else if (index > PathElements.Count - 1) + { + index = 0; + } + break; + + case CycleOptions.BackAndForth: + if (index <= 0) + { + _direction = 1; + } + else if (index >= PathElements.Count - 1) + { + _direction = -1; + } + index = index + _direction; + break; + + case CycleOptions.OnlyOnce: + if (index <= 0) + { + _direction = 1; + } + else if (index >= PathElements.Count - 1) + { + _direction = 0; + CurrentSpeed = Vector3.zero; + _endReached = true; + } + index = index + _direction; + break; + + case CycleOptions.Random: + int newIndex = index; + if (PathElements.Count > 1) + { + while (newIndex == index) + { + newIndex = Random.Range(0, PathElements.Count); + } + } + index = newIndex; + break; + + case CycleOptions.StopAtBounds: + if (index <= 0) + { + if (_direction == -1) + { + CurrentSpeed = Vector3.zero; + _endReached = true; + } + _direction = 1; + } + else if (index >= PathElements.Count - 1) + { + if (_direction == 1) + { + CurrentSpeed = Vector3.zero; + _endReached = true; + } + _direction = -1; + } + index = index + _direction; + break; + } + } + } + + /// + /// Call this method to force a change in direction at any time + /// + public virtual void ChangeDirection() + { + _direction = -_direction; + _currentPoint.MoveNext(); + } + + /// + /// On DrawGizmos, we draw lines to show the path the object will follow + /// + protected virtual void OnDrawGizmos() + { + #if UNITY_EDITOR + if (PathElements == null) + { + return; + } + + if (PathElements.Count == 0) + { + return; + } + + // if we haven't stored the object's original position yet, we do it + if (_originalTransformPositionStatus == false) + { + _originalTransformPosition = this.transform.position; + _originalTransformPositionStatus = true; + } + // if we're not in runtime mode and the transform has changed, we update our position + if (transform.hasChanged && _active==false) + { + _originalTransformPosition = this.transform.position; + } + // for each point in the path + for (int i=0;i + /// Updates the original transform position. + /// + /// New original transform position. + public virtual void UpdateOriginalTransformPosition(Vector3 newOriginalTransformPosition) + { + _originalTransformPosition = newOriginalTransformPosition; + } + + /// + /// Gets the original transform position. + /// + /// The original transform position. + public virtual Vector3 GetOriginalTransformPosition() + { + return _originalTransformPosition; + } + + /// + /// Sets the original transform position status. + /// + /// If set to true status. + public virtual void SetOriginalTransformPositionStatus(bool status) + { + _originalTransformPositionStatus = status; + } + + /// + /// Gets the original transform position status. + /// + /// true, if original transform position status was gotten, false otherwise. + public virtual bool GetOriginalTransformPositionStatus() + { + return _originalTransformPositionStatus ; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPathMovement.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPathMovement.cs.meta new file mode 100644 index 0000000..01b2be7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPathMovement/MMPathMovement.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9e07de691a1179d4c8fc231dc7dcf219 +timeCreated: 1523894079 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPositionRecorder.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMPositionRecorder.cs new file mode 100644 index 0000000..82b220a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPositionRecorder.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this class on a Transform, and it'll record its position periodically + /// The Positions array can then be read from anywhere to know where that object was in the past + /// + public class MMPositionRecorder : MonoBehaviour + { + /// the possible modes to run this recorder on + public enum Modes { Framecount, Time } + + [Header("Recording Settings")] + /// the amount of positions to record + public int NumberOfPositionsToRecord = 100; + /// whether to record every X frames, or every X seconds + public Modes Mode = Modes.Framecount; + /// the amount of frames to wait for between two recordings + [MMEnumCondition("Mode", (int)Modes.Framecount)] + public int FrameInterval = 0; + /// the duration (in seconds) between two recordings + [MMEnumCondition("Mode", (int) Modes.Time)] + public float TimeInterval = 0.02f; + /// whether or not to record if the timescale is 0 + public bool RecordOnTimescaleZero = false; + + [Header("Debug")] + /// the array of positions (0 most recent, higher less recent) + public Vector3[] Positions; + /// the current frame counter + [MMReadOnly] + public int FrameCounter; + + protected int _frameCountLastRecord = 0; + protected float _timeLastRecord = 0f; + + /// + /// On Awake, we initialize our array of positions + /// + protected virtual void Awake() + { + Positions = new Vector3[NumberOfPositionsToRecord]; + for (int i = 0; i < Positions.Length; i++) + { + Positions[i] = this.transform.position; + } + } + + /// + /// On Update we store our positions + /// + protected virtual void Update() + { + if (!RecordOnTimescaleZero && Time.timeScale == 0f) + { + return; + } + StorePositions(); + } + + /// + /// Stores the position in the array and offsets it + /// + protected virtual void StorePositions() + { + FrameCounter = Time.frameCount; + + if (Mode == Modes.Framecount) + { + if (FrameCounter - _frameCountLastRecord < FrameInterval) + { + return; + } + + _frameCountLastRecord = FrameCounter; + } + else + { + if (Time.time - _timeLastRecord < TimeInterval) + { + return; + } + + _timeLastRecord = Time.time; + } + + // we put our current position in the array at index 0 + Positions[0] = this.transform.position; + + // we offset the array by 1 (index 0 moves to 1, etc) + Array.Copy(Positions, 0, Positions, 1, Positions.Length - 1); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPositionRecorder.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMPositionRecorder.cs.meta new file mode 100644 index 0000000..53a6a80 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPositionRecorder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d82c3eb70c39c44faf5889b222def4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough.cs new file mode 100644 index 0000000..a61da7d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough.cs @@ -0,0 +1,94 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Prevents fast moving objects from going through colliders by casting a ray backwards after each movement + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMPreventPassingThrough")] + public class MMPreventPassingThrough : MonoBehaviour + { + /// the layer mask to search obstacles on + public LayerMask ObstaclesLayerMask; + /// the bounds adjustment variable + public float SkinWidth = 0.1f; + + protected float _smallestBoundsWidth; + protected float _adjustedSmallestBoundsWidth; + protected float _squaredBoundsWidth; + protected Vector3 _positionLastFrame; + protected Rigidbody _rigidbody; + protected Collider _collider; + protected Vector3 _lastMovement; + protected float _lastMovementSquared; + + /// + /// On Start we initialize our object + /// + protected virtual void Start() + { + Initialization (); + } + + /// + /// Grabs the rigidbody and computes the bounds width + /// + protected virtual void Initialization() + { + _rigidbody = GetComponent(); + _positionLastFrame = _rigidbody.position; + + _collider = GetComponent(); + + _smallestBoundsWidth = Mathf.Min(Mathf.Min(_collider.bounds.extents.x, _collider.bounds.extents.y), _collider.bounds.extents.z); + _adjustedSmallestBoundsWidth = _smallestBoundsWidth * (1.0f - SkinWidth); + _squaredBoundsWidth = _smallestBoundsWidth * _smallestBoundsWidth; + } + + /// + /// On Enable, we initialize our last frame position + /// + protected virtual void OnEnable() + { + _positionLastFrame = this.transform.position; + } + + /// + /// On fixedUpdate, checks the last movement and if needed casts a ray to detect obstacles + /// + protected virtual void FixedUpdate() + { + _lastMovement = _rigidbody.position - _positionLastFrame; + _lastMovementSquared = _lastMovement.sqrMagnitude; + + // if we've moved further than our bounds, we may have missed something + if (_lastMovementSquared > _squaredBoundsWidth) + { + float movementMagnitude = Mathf.Sqrt(_lastMovementSquared); + + // we cast a ray backwards to see if we should have hit something + RaycastHit hitInfo; + if (Physics.Raycast(_positionLastFrame, _lastMovement, out hitInfo, movementMagnitude, ObstaclesLayerMask.value)) + { + if (!hitInfo.collider) + { + return; + } + + if (hitInfo.collider.isTrigger) + { + hitInfo.collider.SendMessage("OnTriggerEnter", _collider); + } + + if (!hitInfo.collider.isTrigger) + { + _rigidbody.position = hitInfo.point - (_lastMovement / movementMagnitude) * _adjustedSmallestBoundsWidth; + } + } + } + _positionLastFrame = _rigidbody.position; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough.cs.meta new file mode 100644 index 0000000..c782739 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b2a1f7815d40344186f7659d93abe80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough2D.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough2D.cs new file mode 100644 index 0000000..4f89c66 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough2D.cs @@ -0,0 +1,132 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MoreMountains.Tools +{ + /// + /// Prevents fast moving objects from going through colliders by casting a ray backwards after each movement + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMPreventPassingThrough2D")] + public class MMPreventPassingThrough2D : MonoBehaviour + { + public enum Modes { Raycast, BoxCast } + /// whether to cast a ray or a boxcast to look for targets + public Modes Mode = Modes.Raycast; + /// the layer mask to search obstacles on + public LayerMask ObstaclesLayerMask; + /// the bounds adjustment variable + public float SkinWidth = 0.1f; + /// whether or not to reposition the rb if hitting a trigger collider + public bool RepositionRigidbodyIfHitTrigger = true; + /// whether or not to reposition the rb if hitting a non trigger collider + [FormerlySerializedAs("RepositionRigidbody")] + public bool RepositionRigidbodyIfHitNonTrigger = true; + + [Header("Debug")] + [MMReadOnly] + public RaycastHit2D Hit; + + protected float _smallestBoundsWidth; + protected float _adjustedSmallestBoundsWidth; + protected float _squaredBoundsWidth; + protected Vector3 _positionLastFrame; + protected Rigidbody2D _rigidbody; + protected Collider2D _collider; + protected Vector2 _lastMovement; + protected float _lastMovementSquared; + protected RaycastHit2D _hitInfo; + protected Vector2 _colliderSize; + + /// + /// On Start we initialize our object + /// + protected virtual void Start() + { + Initialization (); + } + + /// + /// Grabs the rigidbody and computes the bounds width + /// + protected virtual void Initialization() + { + _rigidbody = GetComponent(); + _positionLastFrame = _rigidbody.position; + + _collider = GetComponent(); + if (_collider as BoxCollider2D != null) + { + _colliderSize = (_collider as BoxCollider2D).size; + } + + _smallestBoundsWidth = Mathf.Min(Mathf.Min(_collider.bounds.extents.x, _collider.bounds.extents.y), _collider.bounds.extents.z); + _adjustedSmallestBoundsWidth = _smallestBoundsWidth * (1.0f - SkinWidth); + _squaredBoundsWidth = _smallestBoundsWidth * _smallestBoundsWidth; + } + + /// + /// On Enable, we initialize our last frame position + /// + protected virtual void OnEnable() + { + _positionLastFrame = this.transform.position; + } + + /// + /// On fixedUpdate, checks the last movement and if needed casts a ray to detect obstacles + /// + protected virtual void Update() + { + _lastMovement = this.transform.position - _positionLastFrame; + _lastMovementSquared = _lastMovement.sqrMagnitude; + + // if we've moved further than our bounds, we may have missed something + if (_lastMovementSquared > _squaredBoundsWidth) + { + float movementMagnitude = Mathf.Sqrt(_lastMovementSquared); + + // we cast a ray backwards to see if we should have hit something + if (Mode == Modes.Raycast) + { + _hitInfo = MMDebug.RayCast(_positionLastFrame, _lastMovement.normalized, movementMagnitude, ObstaclesLayerMask, Color.blue, true); + } + else + { + _hitInfo = Physics2D.BoxCast(origin: _positionLastFrame, + size: _colliderSize, + angle: 0, + layerMask: ObstaclesLayerMask, + direction: _lastMovement.normalized, + distance: movementMagnitude); + } + + if (_hitInfo.collider != null) + { + if (_hitInfo.collider.isTrigger) + { + _hitInfo.collider.SendMessage("OnTriggerEnter2D", _collider, SendMessageOptions.DontRequireReceiver); + if (RepositionRigidbodyIfHitTrigger) + { + this.transform.position = _hitInfo.point - (_lastMovement / movementMagnitude) * _adjustedSmallestBoundsWidth; + _rigidbody.position = _hitInfo.point - (_lastMovement / movementMagnitude) * _adjustedSmallestBoundsWidth; + } + } + + if (!_hitInfo.collider.isTrigger) + { + Hit = _hitInfo; + this.gameObject.SendMessage("PreventedCollision2D", Hit, SendMessageOptions.DontRequireReceiver); + if (RepositionRigidbodyIfHitNonTrigger) + { + this.transform.position = _hitInfo.point - (_lastMovement / movementMagnitude) * _adjustedSmallestBoundsWidth; + _rigidbody.position = _hitInfo.point - (_lastMovement / movementMagnitude) * _adjustedSmallestBoundsWidth; + } + } + } + } + _positionLastFrame = this.transform.position; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough2D.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough2D.cs.meta new file mode 100644 index 0000000..7be7fbc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough2D.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: dfdd322a582c3bc429d2350807e8a2c3 +timeCreated: 1523900811 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough3D.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough3D.cs new file mode 100644 index 0000000..aac8579 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough3D.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MoreMountains.Tools +{ + /// + /// Prevents fast moving objects from going through colliders by casting a ray backwards after each movement + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMPreventPassingThrough3D")] + public class MMPreventPassingThrough3D : MonoBehaviour + { + /// the layer mask to search obstacles on + public LayerMask ObstaclesLayerMask; + /// the bounds adjustment variable + public float SkinWidth = 0.1f; + public bool RepositionRigidbody = true; + /// the layer mask to filter when to reposition rigidbody + public LayerMask RepositionRigidbodyLayerMask; + + public enum AdjustmentAxis { Auto, X, Y, Z } + /// the local axis of the collider to use for adjustment (usually you'll want to use the axis the object is moving on) + public AdjustmentAxis Adjustment = AdjustmentAxis.Auto; + + + protected float _adjustmentDistance; + protected float _adjustedDistance; + protected float _squaredBoundsWidth; + protected Vector3 _positionLastFrame; + protected Rigidbody _rigidbody; + protected Collider _collider; + protected Vector3 _lastMovement; + protected float _lastMovementSquared; + + protected virtual void OnValidate() + { + // force initialized RepositionRigidbodyLayerMask, same behavior as before + if (RepositionRigidbody) + { + if (RepositionRigidbodyLayerMask.value == default) + { + RepositionRigidbodyLayerMask = ObstaclesLayerMask; + } + } + } + + /// + /// On Start we initialize our object + /// + protected virtual void Start() + { + Initialization (); + } + + /// + /// Grabs the rigidbody and computes the bounds width + /// + protected virtual void Initialization() + { + _rigidbody = GetComponent(); + _positionLastFrame = _rigidbody.position; + + _collider = GetComponent(); + + _adjustmentDistance = ComputeAdjustmentDistance(); + _adjustedDistance = _adjustmentDistance * (1.0f - SkinWidth); + _squaredBoundsWidth = _adjustmentDistance * _adjustmentDistance; + } + + /// + /// Determines the adjustment distance, over which we decide whether or not we've moved too far + /// + /// + protected virtual float ComputeAdjustmentDistance() + { + switch (Adjustment) + { + case AdjustmentAxis.X: + return _collider.bounds.extents.x; + case AdjustmentAxis.Y: + return _collider.bounds.extents.y; + case AdjustmentAxis.Z: + return _collider.bounds.extents.z; + } + return Mathf.Min(Mathf.Min(_collider.bounds.extents.x, _collider.bounds.extents.y), _collider.bounds.extents.z); + } + + /// + /// On Enable, we initialize our last frame position + /// + protected virtual void OnEnable() + { + _positionLastFrame = this.transform.position; + } + + /// + /// On fixedUpdate, checks the last movement and if needed casts a ray to detect obstacles + /// + protected virtual void FixedUpdate() + { + _lastMovement = this.transform.position - _positionLastFrame; + _lastMovementSquared = _lastMovement.sqrMagnitude; + + // if we've moved further than our bounds, we may have missed something + if (_lastMovementSquared > _squaredBoundsWidth) + { + float movementMagnitude = Mathf.Sqrt(_lastMovementSquared); + + // we cast a ray backwards to see if we should have hit something + RaycastHit hitInfo; + if (Physics.Raycast(_positionLastFrame, _lastMovement, out hitInfo, movementMagnitude, ObstaclesLayerMask.value)) + { + if (!hitInfo.collider) + { + return; + } + + if (hitInfo.collider.isTrigger) + { + hitInfo.collider.SendMessage("OnTriggerEnter", _collider); + } + + if (!hitInfo.collider.isTrigger) + { + this.gameObject.SendMessage("PreventedCollision3D", hitInfo, SendMessageOptions.DontRequireReceiver); + if (RepositionRigidbody) + { + var hitLayer = hitInfo.collider.gameObject.layer; + if (0 != (1 << hitLayer & RepositionRigidbodyLayerMask)) + { + this.transform.position = hitInfo.point - (_lastMovement / movementMagnitude) * _adjustedDistance; + _rigidbody.position = hitInfo.point - (_lastMovement / movementMagnitude) * _adjustedDistance; + } + } + } + } + } + _positionLastFrame = this.transform.position; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough3D.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough3D.cs.meta new file mode 100644 index 0000000..665b936 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMPreventPassingThrough3D.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 194c644ad43b53c478e2164aa4f41cb0 +timeCreated: 1523900811 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMSquashAndStretch.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMSquashAndStretch.cs new file mode 100644 index 0000000..5dbd35c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMSquashAndStretch.cs @@ -0,0 +1,315 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This component will automatically update scale and rotation + /// Put it one level below the top, and have the model one level below that + /// Hierarchy should be as follows : + /// + /// Parent (where the logic (and optionnally rigidbody lies) + /// - MMSquashAndStretch + /// - - Model / sprite + /// + /// Make sure this intermediary layer only has one child + /// If movement feels glitchy make sure your rigidbody is on Interpolate + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMSquashAndStretch")] + public class MMSquashAndStretch : MonoBehaviour + { + public enum Timescales { Regular, Unscaled } + public enum Modes { Rigidbody, Rigidbody2D, Position } + + [MMInformation("This component will apply squash and stretch based on velocity (either position based or computed from a Rigidbody. It has to be put on an intermediary level in the hierarchy, between the logic (top level) and the model (bottom level).", MMInformationAttribute.InformationType.Info, false)] + [Header("Velocity Detection")] + /// the possible ways to get velocity from + [Tooltip("the possible ways to get velocity from")] + public Modes Mode = Modes.Position; + /// whether we should use deltaTime or unscaledDeltaTime + [Tooltip("whether we should use deltaTime or unscaledDeltaTime")] + public Timescales Timescale = Timescales.Regular; + + [Header("Settings")] + /// the intensity of the squash and stretch + [Tooltip("the intensity of the squash and stretch")] + public float Intensity = 0.02f; + /// the maximum velocity of your parent object, used to remap the computed one + [Tooltip("the maximum velocity of your parent object, used to remap the computed one")] + public float MaximumVelocity = 1f; + + [Header("Rescale")] + /// the minimum scale to apply to this object + [Tooltip("the minimum scale to apply to this object")] + public Vector3 MinimumScale = new Vector3(0.5f, 0.5f, 0.5f); + /// the maximum scale to apply to this object + [Tooltip("the maximum scale to apply to this object")] + public Vector3 MaximumScale = new Vector3(2f, 2f, 2f); + /// whether or not to rescale on the x axis + [Tooltip("whether or not to rescale on the x axis")] + public bool RescaleX = true; + /// whether or not to rescale on the y axis + [Tooltip("whether or not to rescale on the y axis")] + public bool RescaleY = true; + /// whether or not to rescale on the z axis + [Tooltip("whether or not to rescale on the z axis")] + public bool RescaleZ = true; + /// whether or not to rotate the transform to align with the current direction + [Tooltip("whether or not to rotate the transform to align with the current direction")] + public bool RotateToMatchDirection = true; + + [Header("Squash")] + /// if this is true, the object will squash once velocity goes below the specified threshold + [Tooltip("if this is true, the object will squash once velocity goes below the specified threshold")] + public bool AutoSquashOnStop = false; + /// the curve to apply when squashing the object (this describes scale on x and z, will be inverted for y to maintain mass) + [Tooltip("the curve to apply when squashing the object (this describes scale on x and z, will be inverted for y to maintain mass)")] + public AnimationCurve SquashCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1f), new Keyframe(1, 0f)); + /// the velocity threshold after which a squash can be triggered if the object stops + [Tooltip("the velocity threshold after which a squash can be triggered if the object stops")] + public float SquashVelocityThreshold = 0.1f; + /// the maximum duration of the squash (will be reduced if velocity is low) + [Tooltip("the maximum duration of the squash (will be reduced if velocity is low)")] + [MMVector("Min","Max")] + public Vector2 SquashDuration = new Vector2(0.25f, 0.5f); + /// the maximum intensity of the squash + [Tooltip("the maximum intensity of the squash")] + [MMVector("Min", "Max")] + public Vector2 SquashIntensity = new Vector2(0f, 1f); + + [Header("Spring")] + /// whether or not to add extra spring to the squash and stretch + [Tooltip("whether or not to add extra spring to the squash and stretch")] + public bool Spring = false; + /// the damping to apply to the spring + [Tooltip("the damping to apply to the spring")] + [MMCondition("Spring", true)] + public float SpringDamping = 0.3f; + /// the spring's frequency + [Tooltip("the spring's frequency")] + [MMCondition("Spring", true)] + public float SpringFrequency = 3f; + + [Header("Debug")] + [MMReadOnly] + /// the current velocity of the parent object + [Tooltip("the current velocity of the parent object")] + public Vector3 Velocity; + [MMReadOnly] + /// the remapped velocity + [Tooltip("the remapped velocity")] + public float RemappedVelocity; + [MMReadOnly] + /// the current velocity magnitude + [Tooltip("the current velocity magnitude")] + public float VelocityMagnitude; + + public virtual float TimescaleTime { get { return (Timescale == Timescales.Regular) ? Time.time : Time.unscaledTime; } } + public virtual float TimescaleDeltaTime { get { return (Timescale == Timescales.Regular) ? Time.deltaTime : Time.unscaledDeltaTime; } } + + protected Rigidbody2D _rigidbody2D; + protected Rigidbody _rigidbody; + protected Transform _childTransform; + protected Transform _parentTransform; + protected Vector3 _direction; + protected Vector3 _previousPosition; + protected Vector3 _newLocalScale; + protected Vector3 _initialScale; + protected Quaternion _newRotation = Quaternion.identity; + protected Quaternion _deltaRotation; + protected float _squashStartedAt = 0f; + protected bool _squashing = false; + protected float _squashIntensity; + protected float _squashDuration; + protected bool _movementStarted = false; + protected float _lastVelocity = 0f; + protected Vector3 _springScale; + protected Vector3 _springVelocity = Vector3.zero; + + /// + /// On start, we initialize our component + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// Stores the initial scale, grabs the rigidbodies (or tries to), as well as the parent and child + /// + protected virtual void Initialization() + { + _initialScale = this.transform.localScale; + _springScale = _initialScale; + + _rigidbody = this.transform.parent.GetComponent(); + _rigidbody2D = this.transform.parent.GetComponent(); + + _childTransform = this.transform.GetChild(0).transform; + _parentTransform = this.transform.parent.GetComponent(); + + _previousPosition = _parentTransform.position; + } + + /// + /// On late update, we apply our squash and stretch effect + /// + protected virtual void LateUpdate() + { + SquashAndStretch(); + } + + /// + /// Computes velocity and applies the effect + /// + protected virtual void SquashAndStretch() + { + if (TimescaleDeltaTime <= 0f) + { + return; + } + + ComputeVelocityAndDirection(); + ComputeNewRotation(); + ComputeNewLocalScale(); + StorePreviousPosition(); + } + + /// + /// Determines the current velocity and direction of the parent object + /// + protected virtual void ComputeVelocityAndDirection() + { + Velocity = Vector3.zero; + + switch (Mode) + { + case Modes.Rigidbody: + Velocity = _rigidbody.velocity; + break; + + case Modes.Rigidbody2D: + Velocity = _rigidbody2D.velocity; + break; + + case Modes.Position: + Velocity = (_previousPosition - _parentTransform.position) / TimescaleDeltaTime; + break; + } + + VelocityMagnitude = Velocity.magnitude; + RemappedVelocity = MMMaths.Remap(VelocityMagnitude, 0f, MaximumVelocity, 0f, 1f); + _direction = Vector3.Normalize(Velocity); + + if (AutoSquashOnStop) + { + // if we've moved fast enough and have now stopped, we trigger a squash + if (VelocityMagnitude > SquashVelocityThreshold) + { + _movementStarted = true; + _lastVelocity = Mathf.Clamp(VelocityMagnitude, 0f, MaximumVelocity); + } + else if (_movementStarted) + { + _movementStarted = false; + _squashing = true; + float duration = MMMaths.Remap(_lastVelocity, 0f, MaximumVelocity, SquashDuration.x, SquashDuration.y); + float intensity = MMMaths.Remap(_lastVelocity, 0f, MaximumVelocity, SquashIntensity.x, SquashIntensity.y); + Squash(duration, intensity); + } + } + } + + /// + /// Computes a new rotation for both this object and the child + /// + protected virtual void ComputeNewRotation() + { + if (!RotateToMatchDirection) + { + return; + } + if (VelocityMagnitude > 0.01f) + { + _newRotation = Quaternion.FromToRotation(Vector3.up, _direction); + } + _deltaRotation = _parentTransform.rotation; + this.transform.rotation = _newRotation; + _childTransform.rotation = _deltaRotation; + } + + /// + /// Computes a new local scale for this object + /// + protected virtual void ComputeNewLocalScale() + { + if (_squashing) + { + float elapsed = MMMaths.Remap(TimescaleTime - _squashStartedAt, 0f, _squashDuration, 0f, 1f); + float curveValue = SquashCurve.Evaluate(elapsed); + _newLocalScale.x = _initialScale.x + curveValue * _squashIntensity; + _newLocalScale.y = _initialScale.y - curveValue * _squashIntensity; + _newLocalScale.z = _initialScale.z + curveValue * _squashIntensity; + + if (elapsed >= 1f) + { + _squashing = false; + } + } + else + { + _newLocalScale.x = Mathf.Clamp01(1f / (RemappedVelocity + 0.001f)); + _newLocalScale.y = RemappedVelocity; + _newLocalScale.z = Mathf.Clamp01(1f / (RemappedVelocity + 0.001f)); + _newLocalScale = Vector3.Lerp(Vector3.one, _newLocalScale, VelocityMagnitude * Intensity); + } + + _newLocalScale.x = Mathf.Clamp(_newLocalScale.x, MinimumScale.x, MaximumScale.x); + _newLocalScale.y = Mathf.Clamp(_newLocalScale.y, MinimumScale.y, MaximumScale.y); + _newLocalScale.z = Mathf.Clamp(_newLocalScale.z, MinimumScale.z, MaximumScale.z); + + if (Spring) + { + MMMaths.Spring(ref _springScale, _newLocalScale, ref _springVelocity, SpringDamping, SpringFrequency, Time.deltaTime); + _newLocalScale = _springScale; + } + + if (!RescaleX) + { + _newLocalScale.x = _initialScale.x; + } + if (!RescaleY) + { + _newLocalScale.y = _initialScale.y; + } + if (!RescaleZ) + { + _newLocalScale.z = _initialScale.z; + } + + this.transform.localScale = _newLocalScale; + } + + /// + /// Stores the previous position of the parent to compute velocity + /// + protected virtual void StorePreviousPosition() + { + _previousPosition = _parentTransform.position; + } + + /// + /// Triggered either directly or via the AutoSquash setting, this squashes the object (usually after a contact / stop) + /// + /// + /// + public virtual void Squash(float duration, float intensity) + { + _squashStartedAt = TimescaleTime; + _squashing = true; + _squashIntensity = intensity; + _squashDuration = duration; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMSquashAndStretch.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMSquashAndStretch.cs.meta new file mode 100644 index 0000000..bb04b82 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMSquashAndStretch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aade595aee3a1d24c9845361684f77d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMStayInPlace.cs b/Assets/Feel/MMTools/Accessories/MMMovement/MMStayInPlace.cs new file mode 100644 index 0000000..47f047b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMStayInPlace.cs @@ -0,0 +1,120 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This class forces a transform to stay at a fixed position, rotation and/or scale. + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMStayInPlace")] + public class MMStayInPlace : MonoBehaviour + { + public enum Spaces { World, Local } + public enum UpdateModes { Update, FixedUpdate, LateUpdate } + + [Header("Modes")] + public UpdateModes UpdateMode = UpdateModes.LateUpdate; + public Spaces Space = Spaces.World; + + [Header("Attributes")] + + public bool FixedPosition = true; + public bool FixedRotation = true; + public bool FixedScale = true; + + [Header("Overrides")] + + public bool OverridePosition = false; + [MMCondition("OverridePosition", true)] + public Vector3 OverridePositionValue; + + public bool OverrideRotation = false; + [MMCondition("OverrideRotation", true)] + public Vector3 OverrideRotationValue; + + public bool OverrideScale = false; + [MMCondition("OverrideScale", true)] + public Vector3 OverrideScaleValue; + + protected Vector3 _initialPosition; + protected Quaternion _initialRotation; + protected Vector3 _initialScale; + + protected virtual void Awake() + { + Initialization(); + } + + protected virtual void Initialization() + { + _initialPosition = (Space == Spaces.World) ? this.transform.position : this.transform.localPosition; + _initialRotation = (Space == Spaces.World) ? this.transform.rotation : this.transform.localRotation; + _initialScale = (Space == Spaces.World) ? this.transform.position : this.transform.localScale; + + if (OverridePosition) + { + _initialPosition = OverridePositionValue; + } + if (OverrideRotation) + { + _initialRotation = Quaternion.Euler(OverrideRotationValue); + } + if (OverrideScale) + { + _initialScale = OverrideScaleValue; + } + } + + protected virtual void Update() + { + if (UpdateMode == UpdateModes.Update) + { + StayInPlace(); + } + } + protected virtual void FixedUpdate() + { + if (UpdateMode == UpdateModes.FixedUpdate) + { + StayInPlace(); + } + } + + protected virtual void LateUpdate() + { + if (UpdateMode == UpdateModes.LateUpdate) + { + StayInPlace(); + } + } + + protected virtual void StayInPlace() + { + if (Space == Spaces.World) + { + if (FixedPosition) + { + this.transform.position = _initialPosition; + } + if (FixedRotation) + { + this.transform.rotation = _initialRotation; + } + } + else + { + if (FixedPosition) + { + this.transform.localPosition = _initialPosition; + } + if (FixedRotation) + { + this.transform.localRotation = _initialRotation; + } + } + if (FixedScale) + { + this.transform.localScale = _initialScale; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMMovement/MMStayInPlace.cs.meta b/Assets/Feel/MMTools/Accessories/MMMovement/MMStayInPlace.cs.meta new file mode 100644 index 0000000..2ab44b4 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMMovement/MMStayInPlace.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b6f7c95fc9569f47a5b6b912da588a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMParticles.meta b/Assets/Feel/MMTools/Accessories/MMParticles.meta new file mode 100644 index 0000000..b897d81 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6f7001b5ded60f94cacfd8da7ccb88b4 +folderAsset: yes +timeCreated: 1462451430 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMAutoDestroyParticleSystem.cs b/Assets/Feel/MMTools/Accessories/MMParticles/MMAutoDestroyParticleSystem.cs new file mode 100644 index 0000000..32daa79 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMAutoDestroyParticleSystem.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a ParticleSystem so it auto destroys once it has stopped emitting. + /// Make sure your ParticleSystem isn't looping, otherwise this script will be useless + /// + [AddComponentMenu("More Mountains/Tools/Particles/MMAutoDestroyParticleSystem")] + public class MMAutoDestroyParticleSystem : MonoBehaviour + { + /// True if the ParticleSystem should also destroy its parent + public bool DestroyParent = false; + + /// If for some reason your particles don't get destroyed automatically at the end of the emission, you can force a destroy after a delay. Leave it at zero otherwise. + public float DestroyDelay = 0f; + + protected ParticleSystem _particleSystem; + protected float _startTime; + protected bool _started = false; + + /// + /// Initialization, we get the ParticleSystem component + /// + protected virtual void Start() + { + _started = false; + _particleSystem = GetComponent(); + if (DestroyDelay != 0) + { + _startTime = Time.time; + } + } + + /// + /// When the ParticleSystem stops playing, we destroy it. + /// + protected virtual void Update() + { + if ( (DestroyDelay != 0) && (Time.time - _startTime > DestroyDelay) ) + { + DestroyParticleSystem(); + } + + if (_particleSystem.isPlaying) + { + _started = true; + return; + } + + DestroyParticleSystem(); + } + + /// + /// Destroys the particle system. + /// + protected virtual void DestroyParticleSystem() + { + if (!_started) + { + return; + } + if (transform.parent!=null) + { + if(DestroyParent) + { + Destroy(transform.parent.gameObject); + } + } + Destroy (gameObject); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMAutoDestroyParticleSystem.cs.meta b/Assets/Feel/MMTools/Accessories/MMParticles/MMAutoDestroyParticleSystem.cs.meta new file mode 100644 index 0000000..53f5c15 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMAutoDestroyParticleSystem.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f13474093d5e96142b32136ddb5a8a14 +timeCreated: 1523900445 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMChangeFogColor.cs b/Assets/Feel/MMTools/Accessories/MMParticles/MMChangeFogColor.cs new file mode 100644 index 0000000..55b11ac --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMChangeFogColor.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + [ExecuteAlways] + /// + /// Adds this class to a UnityStandardAssets.ImageEffects.GlobalFog to change its color + /// Why this is not native, I don't know. + /// + [AddComponentMenu("More Mountains/Tools/Particles/MMChangeFogColor")] + public class MMChangeFogColor : MonoBehaviour + { + /// Adds this class to a UnityStandardAssets.ImageEffects.GlobalFog to change its color + [MMInformation("Adds this class to a UnityStandardAssets.ImageEffects.GlobalFog to change its color", MMInformationAttribute.InformationType.Info,false)] + public Color FogColor; + + /// + /// Sets the fog's color to the one set in the inspector + /// + protected virtual void SetupFogColor () + { + RenderSettings.fogColor = FogColor; + RenderSettings.fog = true; + } + + /// + /// On Start(), we set the fog's color + /// + protected virtual void Start() + { + SetupFogColor(); + } + + /// + /// Whenever there's a change in the camera's inspector, we change the fog's color + /// + protected virtual void OnValidate() + { + SetupFogColor(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMChangeFogColor.cs.meta b/Assets/Feel/MMTools/Accessories/MMParticles/MMChangeFogColor.cs.meta new file mode 100644 index 0000000..8f9ed7b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMChangeFogColor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ee885a74e6f1bb84989b1a044de340cf +timeCreated: 1523900472 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMDelayParticles.cs b/Assets/Feel/MMTools/Accessories/MMParticles/MMDelayParticles.cs new file mode 100644 index 0000000..371a58d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMDelayParticles.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [ExecuteAlways] + /// + /// MM delay particles. + /// + [AddComponentMenu("More Mountains/Tools/Particles/MMDelayParticles")] + public class MMDelayParticles : MonoBehaviour + { + [Header("Delay")] + /// the duration of the delay, in seconds + public float Delay; + /// if this is true, this will delay by the same amount all children particle systems of this object + public bool DelayChildren = true; + /// if this is true, the delay will be applied on Start + public bool ApplyDelayOnStart = false; + + [MMInspectorButtonAttribute("ApplyDelay")] + public bool ApplyDelayButton; + + protected Component[] particleSystems; + + protected virtual void Start() + { + if (ApplyDelayOnStart) + { + ApplyDelay(); + } + } + + protected virtual void ApplyDelay() + { + if (this.gameObject.GetComponent() != null) + { + ParticleSystem.MainModule main = this.gameObject.GetComponent().main; + main.startDelay = main.startDelay.constant + Delay; + } + + particleSystems = GetComponentsInChildren(); + foreach (ParticleSystem system in particleSystems) + { + ParticleSystem.MainModule main = system.main; + main.startDelay = main.startDelay.constant + Delay; + } + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMDelayParticles.cs.meta b/Assets/Feel/MMTools/Accessories/MMParticles/MMDelayParticles.cs.meta new file mode 100644 index 0000000..1529817 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMDelayParticles.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 03d0a01e308ebd141ba5386b17e109e3 +timeCreated: 1523900445 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMRendererSortingLayer.cs b/Assets/Feel/MMTools/Accessories/MMParticles/MMRendererSortingLayer.cs new file mode 100644 index 0000000..77939aa --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMRendererSortingLayer.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + [AddComponentMenu("More Mountains/Tools/Particles/MMRendererSortingLayer")] + public class MMRendererSortingLayer : MonoBehaviour + { + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMRendererSortingLayer.cs.meta b/Assets/Feel/MMTools/Accessories/MMParticles/MMRendererSortingLayer.cs.meta new file mode 100644 index 0000000..c30b75f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMRendererSortingLayer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1b89e406878a092438282239ce29006e +timeCreated: 1491155844 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMRuntimeParticleControl.cs b/Assets/Feel/MMTools/Accessories/MMParticles/MMRuntimeParticleControl.cs new file mode 100644 index 0000000..806c7e2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMRuntimeParticleControl.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Unity.Collections; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a particle system at runtime, and it'll expose controls to play/pause/stop it from the inspector + /// Because Unity's built-in controls somehow lack pause when in play mode + /// + [RequireComponent(typeof(ParticleSystem))] + public class MMRuntimeParticleControl : MonoBehaviour + { + /// + /// The possible modes for the tracker : + /// Basic will work with the main module's duration + /// ForcedBounds lets you specify within which bounds the slider should move + /// + public enum TrackerModes { Basic, ForcedBounds } + + [Header("Base Controls")] + /// a test button to play the associated particle system + [MMInspectorButton("Play")] public bool PlayButton; + /// a test button to pause the associated particle system + [MMInspectorButton("Pause")] public bool PauseButton; + /// a test button to stop the associated particle system + [MMInspectorButton("Stop")] public bool StopButton; + + [Header("Simulate")] + /// the timestamp at which to go when pressing the Simulate button + public float TargetTimestamp = 1f; + /// a test button to move the associated particle system to the specified timestamp + [MMInspectorButton("Simulate")] public bool FastForwardToTimeButton; + + [Header("Tracker")] + /// the selected tracker mode + public TrackerModes TrackerMode = TrackerModes.Basic; + /// when in ForcedBounds mode, the value to which the slider's lowest bound should be remapped + [MMEnumCondition("TrackerMode", (int)TrackerModes.ForcedBounds)] + public float MinBound; + /// when in ForcedBounds mode, the value to which the slider's highest bound should be remapped + [MMEnumCondition("TrackerMode", (int)TrackerModes.ForcedBounds)] + public float MaxBound; + /// a slider used to move the particle system through time at runtime + [Range(0f, 1f)] + public float Tracker; + [MMReadOnly] + public float Timestamp; + + protected ParticleSystem _particleSystem; + protected ParticleSystem.MainModule _mainModule; + + /// + /// On Awake we grab our components + /// + protected virtual void Awake() + { + _particleSystem = this.GetComponent(); + _mainModule = _particleSystem.main; + } + + /// + /// Plays the particle system + /// + protected virtual void Play() + { + _particleSystem.Play(); + } + + /// + /// Pauses the particle system + /// + protected virtual void Pause() + { + _particleSystem.Pause(); + } + + /// + /// Stops the particle system + /// + protected virtual void Stop() + { + _particleSystem.Stop(); + } + + /// + /// Moves the particle system to the specified timestamp + /// + protected virtual void Simulate() + { + _particleSystem.Simulate(TargetTimestamp, true, true); + } + + /// + /// On validate, moves the particle system to the chosen timestamp along the track + /// + protected void OnValidate() + { + float minBound = (TrackerMode == TrackerModes.Basic) ? 0f : MinBound; + float maxBound = (TrackerMode == TrackerModes.Basic) ? _mainModule.duration : MaxBound; + Timestamp = MMMaths.Remap(Tracker, 0f, 1f, minBound, maxBound); + _particleSystem.Simulate(Timestamp, true, true); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMRuntimeParticleControl.cs.meta b/Assets/Feel/MMTools/Accessories/MMParticles/MMRuntimeParticleControl.cs.meta new file mode 100644 index 0000000..b64d95e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMRuntimeParticleControl.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8dc3e8a4ec6c8c54d8507f3736517ac5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMTrailRendererSortingLayer.cs b/Assets/Feel/MMTools/Accessories/MMParticles/MMTrailRendererSortingLayer.cs new file mode 100644 index 0000000..dc995bc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMTrailRendererSortingLayer.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + [AddComponentMenu("More Mountains/Tools/Particles/MMTrailRendererSortingLayer")] + public class MMTrailRendererSortingLayer : MonoBehaviour + { + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMTrailRendererSortingLayer.cs.meta b/Assets/Feel/MMTools/Accessories/MMParticles/MMTrailRendererSortingLayer.cs.meta new file mode 100644 index 0000000..5fe5893 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMTrailRendererSortingLayer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e334a8b808ebad34dbfc09a6aa9f1102 +timeCreated: 1491155844 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMVisibleParticle.cs b/Assets/Feel/MMTools/Accessories/MMParticles/MMVisibleParticle.cs new file mode 100644 index 0000000..90190ac --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMVisibleParticle.cs @@ -0,0 +1,20 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Adds this class to particles to force their sorting layer + /// + [AddComponentMenu("More Mountains/Tools/Particles/MMVisibleParticle")] + public class MMVisibleParticle : MonoBehaviour { + + /// + /// Sets the particle system's renderer to the Visible Particles sorting layer + /// + protected virtual void Start () + { + GetComponent().GetComponent().sortingLayerName = "VisibleParticles"; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMParticles/MMVisibleParticle.cs.meta b/Assets/Feel/MMTools/Accessories/MMParticles/MMVisibleParticle.cs.meta new file mode 100644 index 0000000..0771011 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMParticles/MMVisibleParticle.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1b57176af794a1544ab1d2b6a1b25e8f +timeCreated: 1523900488 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPerformance.meta b/Assets/Feel/MMTools/Accessories/MMPerformance.meta new file mode 100644 index 0000000..de3d1da --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPerformance.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 230685454d7bf4c48a1eb09e8eee2cf4 +folderAsset: yes +timeCreated: 1462451383 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSCounter.cs b/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSCounter.cs new file mode 100644 index 0000000..69dac20 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSCounter.cs @@ -0,0 +1,117 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a gameObject with a Text component and it'll feed it the number of FPS in real time. + /// + [RequireComponent(typeof(Text))] + [AddComponentMenu("More Mountains/Tools/Performance/MMFPSCounter")] + public class MMFPSCounter : MonoBehaviour + { + public enum Modes { Instant, MovingAverage, InstantAndMovingAverage } + + /// the frequency at which the FPS counter should update (in seconds) + public float UpdateInterval = 0.3f; + /// if this is true, this counter will display a moving average of the framerate, not its instant framerate + public Modes Mode = Modes.Instant; + + protected float _framesAccumulated = 0f; + protected float _framesDrawnInTheInterval = 0f; + protected float _timeLeft ; + protected Text _text; + protected int _currentFPS; + protected int _totalFrames = 0; + protected int _average; + + static string[] _stringsFrom00To300 = { + "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", + "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", + "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", + "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", + "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", + "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", + "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", + "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", + "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", + "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", + "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", + "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", + "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", + "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", + "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", + "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", + "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", + "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", + "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", + "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", + "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", + "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", + "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", + "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", + "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", + "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", + "260", "261", "262", "263", "264", "265", "266", "267", "268", "269", + "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", + "280", "281", "282", "283", "284", "285", "286", "287", "288", "289", + "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", + "300" + }; + + /// + /// On Start(), we get the Text component and initialize our counter + /// + protected virtual void Start() + { + if(GetComponent()==null) + { + Debug.LogWarning ("FPSCounter requires a GUIText component."); + return; + } + _text = GetComponent(); + _timeLeft = UpdateInterval; + } + + /// + /// On Update, we increment our various counters, and if we've reached our UpdateInterval, we update our FPS counter + /// with the number of frames displayed since the last counter update + /// + protected virtual void Update() + { + _framesDrawnInTheInterval++; + _framesAccumulated = _framesAccumulated + Time.timeScale/Time.deltaTime; + _timeLeft = _timeLeft - Time.deltaTime; + + if( _timeLeft <= 0.0 ) + { + _currentFPS = (int)Mathf.Clamp (_framesAccumulated / _framesDrawnInTheInterval, 0, 300); + _framesDrawnInTheInterval = 0; + _framesAccumulated = 0f; + _timeLeft = UpdateInterval; + _totalFrames++; + _average += (_currentFPS - _average) / _totalFrames; + + if (_currentFPS >=0 && _currentFPS <= 300) + { + switch (Mode) + { + case Modes.Instant: + _text.text = _stringsFrom00To300[_currentFPS]; + break; + case Modes.MovingAverage: + _text.text = _stringsFrom00To300[_average]; + break; + case Modes.InstantAndMovingAverage: + _text.text = _stringsFrom00To300[_currentFPS] + " / " + _stringsFrom00To300[_average]; + break; + } + + } + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSCounter.cs.meta b/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSCounter.cs.meta new file mode 100644 index 0000000..52c7a36 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSCounter.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 06e8923c17983d643980d7d7773b7382 +timeCreated: 1523894079 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSUnlock.cs b/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSUnlock.cs new file mode 100644 index 0000000..628f075 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSUnlock.cs @@ -0,0 +1,149 @@ +using UnityEngine; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif +using UnityEngine.Rendering; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to any object and it'll set the target frame rate and vsync count. Note that vsync count must be 0 for the target FPS to work. + /// + [AddComponentMenu("More Mountains/Tools/Performance/MMFPSUnlock")] + public class MMFPSUnlock : MonoBehaviour + { + /// the target FPS you want the game to run at, that's up to how many times Update will run every second + [Tooltip("the target FPS you want the game to run at, that's up to how many times Update will run every second")] + public int TargetFPS = 300; + + /// the number of frames to wait before rendering the next one. 0 will render every frame, 1 will render every 2 frames, 5 will render every 5 frames, etc + [Tooltip("the number of frames to wait before rendering the next one. 0 will render every frame, 1 will render every 2 frames, 5 will render every 5 frames, etc")] + public int RenderFrameInterval = 0; + + [Range(0, 2)] + /// whether vsync should be enabled or not (on a 60Hz screen, 1 : 60fps, 2 : 30fps, 0 : don't wait for vsync) + [Tooltip("whether vsync should be enabled or not (on a 60Hz screen, 1 : 60fps, 2 : 30fps, 0 : don't wait for vsync)")] + public int VSyncCount = 0; + + /// if this is true, the user can press a number key to change the target FPS (1 : 10fps, 2 : 20fps, etc) + [Tooltip("if this is true, the user can press a number key to change the target FPS (1 : 10fps, 2 : 20fps, etc)")] + public bool EnableNumberShortcuts = false; + + /// + /// On start we change our target fps and vsync settings + /// + protected virtual void Start() + { + UpdateSettings(); + } + + /// + /// On update we check for input if needed + /// + protected virtual void Update() + { + HandleInput(); + } + + /// + /// When a value gets changed in the editor, we update our settings + /// + protected virtual void OnValidate() + { + UpdateSettings(); + } + + /// + /// Updates the target frame rate value and vsync count setting + /// + protected virtual void UpdateSettings() + { + QualitySettings.vSyncCount = VSyncCount; + Application.targetFrameRate = TargetFPS; + OnDemandRendering.renderFrameInterval = RenderFrameInterval; + } + + /// + /// Checks for presses on 0-9 keys and changes the target FPS accordingly + /// + protected virtual void HandleInput() + { + if (!EnableNumberShortcuts) + { + return; + } + + bool input; + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit0].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad0); + #endif + if (input) { TargetFPS = 300; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit1].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad1); + #endif + if (input) { TargetFPS = 10; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit2].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad2); + #endif + if (input) { TargetFPS = 20; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit3].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad3); + #endif + if (input) { TargetFPS = 30; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit4].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad4); + #endif + if (input) { TargetFPS = 40; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit5].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad5); + #endif + if (input) { TargetFPS = 50; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit6].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad6); + #endif + if (input) { TargetFPS = 60; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit7].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad7); + #endif + if (input) { TargetFPS = 70; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit8].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad8); + #endif + if (input) { TargetFPS = 80; UpdateSettings(); } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + input = Keyboard.current[Key.Digit9].wasPressedThisFrame; + #else + input = Input.GetKeyDown(KeyCode.Keypad9); + #endif + if (input) { TargetFPS = 90; UpdateSettings(); } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSUnlock.cs.meta b/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSUnlock.cs.meta new file mode 100644 index 0000000..c85d353 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPerformance/MMFPSUnlock.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 32dd23bf97680be41a75b45b50f0d8ac +timeCreated: 1523893764 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPerformance/MMSpeedTest.cs b/Assets/Feel/MMTools/Accessories/MMPerformance/MMSpeedTest.cs new file mode 100644 index 0000000..616e5cd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPerformance/MMSpeedTest.cs @@ -0,0 +1,69 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Diagnostics; + +namespace MoreMountains.Tools +{ + /// + /// A struct to store data associated to speed tests + /// + public struct MMSpeedTestItem + { + /// the name of the test, has to be unique + public string TestID; + /// a stopwatch to compute time + public Stopwatch Timer; + /// + /// Creates a speed test with the specified ID and starts the timer + /// + /// + public MMSpeedTestItem(string testID) + { + TestID = testID; + Timer = Stopwatch.StartNew(); + } + } + + /// + /// Use this class to run performance tests in your code. + /// It'll output the time spent between the StartTest and the EndTest calls + /// Make sure to use a unique ID for both calls + /// + public static class MMSpeedTest + { + private static readonly Dictionary _speedTests = new Dictionary(); + + /// + /// Starts a speed test of the specified ID + /// + /// + public static void StartTest(string testID) + { + if (_speedTests.ContainsKey(testID)) + { + _speedTests.Remove(testID); + } + + MMSpeedTestItem item = new MMSpeedTestItem(testID); + _speedTests.Add(testID, item); + } + + /// + /// Stops a speed test of the specified ID + /// + public static void EndTest(string testID) + { + if (!_speedTests.ContainsKey(testID)) + { + return; + } + + _speedTests[testID].Timer.Stop(); + float elapsedTime = _speedTests[testID].Timer.ElapsedMilliseconds / 1000f; + _speedTests.Remove(testID); + + MMDebug.DebugLogInfo("MMSpeedTest [Test "+testID+"] test duration : "+elapsedTime+"s"); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMPerformance/MMSpeedTest.cs.meta b/Assets/Feel/MMTools/Accessories/MMPerformance/MMSpeedTest.cs.meta new file mode 100644 index 0000000..bc11f8d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPerformance/MMSpeedTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0305ee4dd71cd604e95fb34a39ce09bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPhysics.meta b/Assets/Feel/MMTools/Accessories/MMPhysics.meta new file mode 100644 index 0000000..23380e1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPhysics.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: be85ff8dc0782b54db832e0de11d8a69 +folderAsset: yes +timeCreated: 1462451410 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyCenterOfMass.cs b/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyCenterOfMass.cs new file mode 100644 index 0000000..2b3dd25 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyCenterOfMass.cs @@ -0,0 +1,99 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a Rigidbody or Rigidbody2D to be able to edit its center of mass from the inspector directly + /// + public class MMRigidbodyCenterOfMass : MonoBehaviour + { + /// the possible modes this class can start on + public enum AutomaticSetModes { Awake, Start, ScriptOnly } + + [Header("CenterOfMass")] + /// the offset to apply to the center of mass + public Vector3 CenterOfMassOffset; + + [Header("Automation")] + /// whether to set the center of mass on awake, start, or via script only + public AutomaticSetModes AutomaticSetMode = AutomaticSetModes.Awake; + /// whether or not this component should auto destroy after a set + public bool AutoDestroyComponentAfterSet = true; + + [Header("Test")] + /// the size of the gizmo point to display at the center of mass + public float GizmoPointSize = 0.05f; + /// a button to test the set method + [MMInspectorButton("SetCenterOfMass")] + public bool SetCenterOfMassButton; + + protected Vector3 _gizmoCenter; + protected Rigidbody _rigidbody; + protected Rigidbody2D _rigidbody2D; + + /// + /// On Awake we grab our components and set our center of mass if needed + /// + protected virtual void Awake() + { + Initialization(); + + if (AutomaticSetMode == AutomaticSetModes.Awake) + { + SetCenterOfMass(); + } + } + + /// + /// On Start we set our center of mass if needed + /// + protected virtual void Start() + { + if (AutomaticSetMode == AutomaticSetModes.Start) + { + SetCenterOfMass(); + } + } + + /// + /// Grabs the rigidbody or rigidbody2D components + /// + protected virtual void Initialization() + { + _rigidbody = this.gameObject.MMGetComponentNoAlloc(); + _rigidbody2D = this.gameObject.MMGetComponentNoAlloc(); + } + + /// + /// Sets the center of mass on the rigidbody or rigidbody2D + /// + public virtual void SetCenterOfMass() + { + if (_rigidbody != null) + { + _rigidbody.centerOfMass = CenterOfMassOffset; + } + + if (_rigidbody2D != null) + { + _rigidbody2D.centerOfMass = CenterOfMassOffset; + } + + if (AutoDestroyComponentAfterSet) + { + Destroy(this); + } + } + + /// + /// On DrawGizmosSelected, we draw a yellow point at the position of our center of mass + /// + protected virtual void OnDrawGizmosSelected() + { + _gizmoCenter = this.transform.TransformPoint(CenterOfMassOffset); + MMDebug.DrawGizmoPoint(_gizmoCenter, GizmoPointSize, Color.yellow); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyCenterOfMass.cs.meta b/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyCenterOfMass.cs.meta new file mode 100644 index 0000000..1310a8a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyCenterOfMass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efda6721f0081284c9800ba75977ba30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyInterface.cs b/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyInterface.cs new file mode 100644 index 0000000..45441cc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyInterface.cs @@ -0,0 +1,316 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// This class acts as an interface to allow the demo levels to work whether the environment (colliders, rigidbodies) are set as 2D or 3D. + /// If you already know for sure that you're going for a 2D or 3D game, I suggest you replace the use of this class with the appropriate classes. + /// + [AddComponentMenu("More Mountains/Tools/Rigidbody Interface/MMRigidbodyInterface")] + public class MMRigidbodyInterface : MonoBehaviour + { + /// + /// Returns the rigidbody's position + /// + /// The position. + public Vector3 position + { + get + { + if (_rigidbody2D != null) + { + return _rigidbody2D.position; + } + if (_rigidbody != null) + { + return _rigidbody.position; + } + return Vector3.zero; + } + set { } + } + + /// + /// Only use if you absolutely need to target the rigidbody2D specifically + /// + /// The internal rigid body2 d. + public Rigidbody2D InternalRigidBody2D + { + get { + return _rigidbody2D; + } + } + + /// + /// Only use if you absolutely need to target the rigidbody2D specifically + /// + /// The internal rigid body. + public Rigidbody InternalRigidBody + { + get { + return _rigidbody; + } + } + + /// + /// Gets or sets the velocity of the rigidbody associated to the interface. + /// + /// The velocity. + public Vector3 Velocity + { + get + { + if (_mode == "2D") + { + return(_rigidbody2D.velocity); + } + else + { + if (_mode == "3D") + { + return(_rigidbody.velocity); + } + else + { + return new Vector3(0,0,0); + } + } + } + set + { + if (_mode == "2D") { + _rigidbody2D.velocity = value; + } + if (_mode == "3D") { + _rigidbody.velocity = value; + } + } + } + + /// + /// Gets the collider bounds. + /// + /// The collider bounds. + public Bounds ColliderBounds + { + get + { + if (_rigidbody2D != null) + { + return _collider2D.bounds; + } + if (_rigidbody != null) + { + return _collider.bounds; + } + return new Bounds(); + } + } + + /// + /// Gets a value indicating whether this is kinematic. + /// + /// true if is kinematic; otherwise, false. + public bool isKinematic + { + get + { + if (_mode == "2D") + { + return(_rigidbody2D.isKinematic); + } + if (_mode == "3D") + { + return(_rigidbody.isKinematic); + } + return false; + } + } + + protected string _mode; + protected Rigidbody2D _rigidbody2D; + protected Rigidbody _rigidbody; + protected Collider2D _collider2D; + protected Collider _collider; + protected Bounds _colliderBounds; + + /// + /// Initialization + /// + protected virtual void Awake () + { + // we check for rigidbodies, and depending on their presence determine if the interface will work with 2D or 3D rigidbodies and colliders. + _rigidbody2D=GetComponent(); + _rigidbody=GetComponent(); + + if (_rigidbody2D != null) + { + _mode="2D"; + _collider2D = GetComponent (); + } + if (_rigidbody != null) + { + _mode="3D"; + _collider = GetComponent (); + } + if (_rigidbody==null && _rigidbody2D==null) + { + Debug.LogWarning("A RigidBodyInterface has been added to "+gameObject+" but there's no Rigidbody or Rigidbody2D on it.", gameObject); + } + } + + /// + /// Adds the specified force to the rigidbody associated to the interface.. + /// + /// Force. + public virtual void AddForce(Vector3 force) + { + if (_mode == "2D") + { + _rigidbody2D.AddForce(force,ForceMode2D.Impulse); + } + if (_mode == "3D") + { + _rigidbody.AddForce(force); + } + } + + /// + /// Adds the specified relative force to the rigidbody associated to the interface.. + /// + /// Force. + public virtual void AddRelativeForce(Vector3 force) + { + if (_mode == "2D") + { + _rigidbody2D.AddRelativeForce(force,ForceMode2D.Impulse); + } + if (_mode == "3D") + { + _rigidbody.AddRelativeForce(force); + } + } + + + + /// + /// Move the rigidbody to the position vector specified + /// + /// + public virtual void MovePosition(Vector3 newPosition) + { + if (_mode == "2D") + { + _rigidbody2D.MovePosition(newPosition); + } + if (_mode == "3D") + { + _rigidbody.MovePosition(newPosition); + } + } + + /// + /// Resets the angular velocity. + /// + public virtual void ResetAngularVelocity() + { + if (_mode == "2D") + { + _rigidbody2D.angularVelocity = 0; + } + if (_mode == "3D") + { + _rigidbody.angularVelocity = Vector3.zero; + } + } + + /// + /// Resets the rotation. + /// + public virtual void ResetRotation() + { + if (_mode == "2D") + { + _rigidbody2D.rotation = 0; + } + if (_mode == "3D") + { + _rigidbody.rotation = Quaternion.identity; + } + } + + + /// + /// Determines whether the rigidbody associated to the interface is kinematic + /// + /// true if this instance is kinematic the specified status; otherwise, false. + /// If set to true status. + public virtual void IsKinematic(bool status) + { + if (_mode == "2D") + { + _rigidbody2D.isKinematic=status; + } + if (_mode == "3D") + { + _rigidbody.isKinematic=status; + } + } + + + /// + /// Enables the box collider associated to the interface. + /// + /// If set to true status. + public virtual void EnableBoxCollider(bool status) + { + if (_mode == "2D") + { + GetComponent().enabled=status; + } + if (_mode == "3D") + { + GetComponent().enabled=status; + } + } + + /// + /// Use this to check if you're dealing with a 3D object + /// + /// true if this instance is3 d; otherwise, false. + public bool Is3D + { + get + { + if (_mode=="3D") + { + return true; + } + else + { + return false; + } + } + } + + /// + /// Use this to check if you're dealing with a 2D object + /// + /// The position. + public bool Is2D + { + get + { + if (_mode=="2D") + { + return true; + } + else + { + return false; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyInterface.cs.meta b/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyInterface.cs.meta new file mode 100644 index 0000000..938bb6a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPhysics/MMRigidbodyInterface.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1eac7cbe197dc794dbaed99e0565d2de +timeCreated: 1523900507 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural.meta b/Assets/Feel/MMTools/Accessories/MMProcedural.meta new file mode 100644 index 0000000..2f09d08 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e99e41f77d8c64f448d6ecb70a1ce23c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators.meta new file mode 100644 index 0000000..f8bc7bc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09b33ad49e4509b4b8d32960e6a7b347 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGenerator.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGenerator.cs new file mode 100644 index 0000000..b9be95d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGenerator.cs @@ -0,0 +1,286 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Tilemaps; + +namespace MoreMountains.Tools +{ + public class MMGridGenerator + { + /// + /// Prepares the grid array for use in the generate methods + /// + /// + /// + /// + public static int[,] PrepareGrid(ref int width, ref int height) + { + int[,] grid = new int[width, height]; + return grid; + } + + /// + /// Carves or adds to the grid + /// + /// + /// + /// + /// + /// + public static bool SetGridCoordinate(int[,] grid, int x, int y, int value) + { + if ( + (x >= 0) + && (x <= grid.GetUpperBound(0)) + && (y >= 0) + && (y <= grid.GetUpperBound(1)) + ) + { + grid[x, y] = value; + return true; + } + else + { + return false; + } + } + + /// + /// Converts a tilemap's contents into a grid + /// + /// + /// + /// + /// + public static int[,] TilemapToGrid(Tilemap tilemap, int width, int height) + { + if(tilemap == null) + { + Debug.LogError("[MMGridGenerator] You're trying to convert a tilemap into a grid but didn't specify what tilemap to convert."); + return null; + } + + int[,] grid = new int[width, height]; + Vector3Int currentPosition = Vector3Int.zero; + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + currentPosition.x = i; + currentPosition.y = j; + currentPosition += MMTilemapGridRenderer.ComputeOffset(width-1, height-1); + + grid[i, j] = (tilemap.GetTile(currentPosition) == null) ? 0 : 1; + } + } + return grid; + } + + /// + /// Outputs the contents of a grid + /// + /// + /// + /// + public static void DebugGrid(int[,] grid, int width, int height) + { + string output = ""; + for (int j = height-1; j >= 0; j--) + { + output += "line "+j+" ["; + for (int i = 0; i < width; i++) + { + output += grid[i, j]; + if (i < width - 1) + { + output += ", "; + } + } + output += "]\n"; + } + MMDebug.DebugLogInfo(output); + } + + /// + /// Returns the int value at the specified coordinate on a grid + /// + /// + /// + /// + /// + /// + public static int GetValueAtGridCoordinate(int[,] grid, int x, int y, int errorValue) + { + if ( + (x >= 0) + && (x <= grid.GetUpperBound(0)) + && (y >= 0) + && (y <= grid.GetUpperBound(1)) + ) + { + return grid[x, y]; + } + else + { + return errorValue; + } + } + + /// + /// Inverts the contents of a grid (1 becomes 0, 0 becomes 1) + /// + /// + /// + public static int[,] InvertGrid(int[,] grid) + { + for (int i = 0; i <= grid.GetUpperBound(0); i++) + { + for (int j = 0; j <= grid.GetUpperBound(1); j++) + { + grid[i, j] = grid[i, j] == 0 ? 1 : 0; + } + } + + return grid; + } + + /// + /// Smoothens a grid to get rid of spikes / isolated points + /// + /// + /// + public static int[,] SmoothenGrid(int[,] grid) + { + int width = grid.GetUpperBound(0); + int height = grid.GetUpperBound(1); + + for (int i = 0; i <= width; i ++) + { + for (int j = 0; j <= height; j ++) + { + int adjacentWallsCount = GetAdjacentWallsCount(grid, i , j); + + if (adjacentWallsCount > 4) + { + grid[i,j] = 1; + } + else if (adjacentWallsCount < 4) + { + grid[i,j] = 0; + } + } + } + return grid; + } + + + /// + /// Carves "safe spots" with 0s into the specfied grid + /// + /// + /// + /// + public static int[,] ApplySafeSpots(int[,] grid, List safeSpots) + { + foreach (MMTilemapGeneratorLayer.MMTilemapGeneratorLayerSafeSpot safeSpot in safeSpots) + { + int minX = Mathf.Min(safeSpot.Start.x, safeSpot.End.x); + int maxX = Mathf.Max(safeSpot.Start.x, safeSpot.End.x); + int minY = Mathf.Min(safeSpot.Start.y, safeSpot.End.y); + int maxY = Mathf.Max(safeSpot.Start.y, safeSpot.End.y); + + for (int i = minX; i < maxX; i++) + { + for (int j = minY; j < maxY; j++) + { + SetGridCoordinate(grid, i, j, 0); + } + } + } + return grid; + } + + /// + /// Adds bounds (walls made of 1) to a grid, on the selected sides + /// + /// + /// + /// + /// + /// + /// + public static int[,] BindGrid(int[,] grid, bool top, bool bottom, bool left, bool right) + { + int width = grid.GetUpperBound(0); + int height = grid.GetUpperBound(1); + + if (top) + { + for (int i = 0; i <= width; i++) + { + + grid[i, height] = 1; + } + } + + if (bottom) + { + for (int i = 0; i <= width; i++) + { + grid[i, 0] = 1; + } + } + + if (left) + { + for (int j = 0; j <= height; j++) + { + grid[0, j] = 1; + } + } + + if (right) + { + for (int j = 0; j <= height; j++) + { + grid[width, j] = 1; + } + } + + return grid; + } + + /// + /// Returns the amount of adjacent walls for a specific coordinate + /// + /// + /// + /// + /// + public static int GetAdjacentWallsCount(int[,] grid, int x, int y) + { + int width = grid.GetUpperBound(0); + int height = grid.GetUpperBound(1); + int wallCount = 0; + for (int i = x - 1; i <= x + 1; i ++) + { + for (int j = y - 1; j <= y + 1; j ++) + { + if ((i >= 0) && (i <= width) && (j >= 0) && (j <= height)) + { + if ((i != x) || (j != y)) + { + wallCount += grid[i,j]; + } + } + else + { + wallCount ++; + } + } + } + return wallCount; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGenerator.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGenerator.cs.meta new file mode 100644 index 0000000..8713bdc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a5db094ce3821d44a8a41a4cb7d45cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorFull.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorFull.cs new file mode 100644 index 0000000..88ac3ac --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorFull.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Generates a grid of the specified size, either entirely full or empty + /// + public class MMGridGeneratorFull : MMGridGenerator + { + /// + /// Generates a grid of the specified size, either entirely full or empty + /// + /// + /// + /// + /// + public static int[,] Generate(int width, int height, bool full) + { + int[,] grid = PrepareGrid(ref width, ref height); + + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + SetGridCoordinate(grid, i, j, full ? 1 : 0); + } + } + return grid; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorFull.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorFull.cs.meta new file mode 100644 index 0000000..573122d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorFull.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa40f7f3424f6fb41b91e1888ad1d960 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPath.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPath.cs new file mode 100644 index 0000000..51d69d0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPath.cs @@ -0,0 +1,170 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace MoreMountains.Tools +{ + /// + /// Generates a grid with a path in the specified direction + /// + public class MMGridGeneratorPath : MMGridGenerator + { + public enum Directions { TopToBottom, BottomToTop, LeftToRight, RightToLeft } + + /// + /// Generates a grid with a path in the specified direction + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static int[,] Generate(int width, int height, int seed, Directions direction, Vector2Int startPosition, int pathMinWidth, int pathMaxWidth, int directionChangeDistance, int widthChangePercentage, int directionChangePercentage) + { + int[,] grid = PrepareGrid(ref width, ref height); + grid = MMGridGeneratorFull.Generate(width, height, true); + System.Random random = new System.Random(seed); + Random.InitState(seed); + + int pathWidth = 1; + int initialX = startPosition.x; + int initialY = startPosition.y; + + SetGridCoordinate(grid, initialX, initialY, 0); + + switch (direction) + { + case Directions.TopToBottom: + int x1 = initialX; + for (int i = -pathWidth; i <= pathWidth; i++) + { + SetGridCoordinate(grid, x1 + i, initialY, 0); + } + for (int y = initialY; y > 0; y--) + { + pathWidth = ComputeWidth(random, widthChangePercentage, pathMinWidth, pathMaxWidth, pathWidth); + x1 = DetermineNextStep(random, x1, directionChangeDistance, directionChangePercentage, pathMaxWidth, width); + for (int i = -pathWidth; i <= pathWidth; i++) + { + SetGridCoordinate(grid, x1 + i, y, 0); + } + } + break; + case Directions.BottomToTop: + int x2 = initialX; + for (int i = -pathWidth; i <= pathWidth; i++) + { + SetGridCoordinate(grid, x2 + i, initialY, 0); + } + for (int y = initialY; y < height; y++) + { + pathWidth = ComputeWidth(random, widthChangePercentage, pathMinWidth, pathMaxWidth, pathWidth); + x2 = DetermineNextStep(random, x2, directionChangeDistance, directionChangePercentage, pathMaxWidth, width); + for (int i = -pathWidth; i <= pathWidth; i++) + { + SetGridCoordinate(grid, x2 + i, y, 0); + } + } + break; + case Directions.LeftToRight: + int y1 = initialY; + for (int i = -pathWidth; i <= pathWidth; i++) + { + SetGridCoordinate(grid, initialX, y1 + i, 0); + } + for (int x = initialX; x < width; x++) + { + pathWidth = ComputeWidth(random, widthChangePercentage, pathMinWidth, pathMaxWidth, pathWidth); + y1 = DetermineNextStep(random, y1, directionChangeDistance, directionChangePercentage, pathMaxWidth, width); + for (int i = -pathWidth; i <= pathWidth; i++) + { + SetGridCoordinate(grid, x, y1 + i, 0); + } + } + break; + case Directions.RightToLeft: + int y2 = initialY; + for (int i = -pathWidth; i <= pathWidth; i++) + { + SetGridCoordinate(grid, initialX, y2 + i, 0); + } + for (int x = initialX; x > 0; x--) + { + pathWidth = ComputeWidth(random, widthChangePercentage, pathMinWidth, pathMaxWidth, pathWidth); + y2 = DetermineNextStep(random, y2, directionChangeDistance, directionChangePercentage, pathMaxWidth, width); + for (int i = -pathWidth; i <= pathWidth; i++) + { + SetGridCoordinate(grid, x, y2 + i, 0); + } + } + break; + } + return grid; + } + + /// + /// Determines the new width of the path + /// + /// + /// + /// + /// + /// + /// + private static int ComputeWidth(System.Random random, int widthChangePercentage, int pathMinWidth, int pathMaxWidth, int pathWidth) + { + if (random.Next(0, 100) > widthChangePercentage) + { + int widthChange = Random.Range(-pathMaxWidth, pathMaxWidth); + pathWidth += widthChange; + if (pathWidth < pathMinWidth) + { + pathWidth = pathMinWidth; + } + if (pathWidth > pathMaxWidth) + { + pathWidth = pathMaxWidth; + } + } + + return pathWidth; + } + + /// + /// Determines in what direction to move the path + /// + /// + /// + /// + /// + /// + /// + /// + private static int DetermineNextStep(System.Random random, int x, int directionChangeDistance, int directionChangePercentage, int pathMaxWidth, int width) + { + if (random.Next(0, 100) > directionChangePercentage) + { + int xChange = Random.Range(-directionChangeDistance, directionChangeDistance); + x += xChange; + if (x < pathMaxWidth) + { + x = pathMaxWidth; + } + if (x > (width - pathMaxWidth)) + { + x = width - pathMaxWidth; + } + } + + return x; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPath.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPath.cs.meta new file mode 100644 index 0000000..99d0ab2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPath.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6040f34cccf59644a9602da5bc052d06 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoise.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoise.cs new file mode 100644 index 0000000..6665d53 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoise.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Random = System.Random; + +namespace MoreMountains.Tools +{ + /// + /// Generates a grid of the specified size based on a seeded perlin noise, the smaller the seed, the blockier the grid + /// + public class MMGridGeneratorPerlinNoise : MMGridGenerator + { + + /// + /// Generates a grid of the specified size based on a seeded perlin noise, the smaller the seed, the blockier the grid + /// + /// + /// + /// + /// + public static int[,] Generate(int width, int height, float seed) + { + int[,] grid = PrepareGrid(ref width, ref height); + for (int i = 0; i < width; i++) + { + for (int j = 0; j < height; j++) + { + int value = Mathf.RoundToInt(Mathf.PerlinNoise(i * seed, j * seed)); + SetGridCoordinate(grid, i, j, value); + } + } + return grid; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoise.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoise.cs.meta new file mode 100644 index 0000000..e591962 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoise.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a6c4a44291630848b8d616911bd8c47 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoiseGround.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoiseGround.cs new file mode 100644 index 0000000..0d3d9ff --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoiseGround.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Random = System.Random; + +namespace MoreMountains.Tools +{ + /// + /// Generates a grid with a ground floor + /// + public class MMGridGeneratorPerlinNoiseGround : MMGridGenerator + { + /// + /// Generates a grid with a ground floor + /// + /// + /// + /// + /// + public static int[,] Generate(int width, int height, float seed) + { + int[,] grid = PrepareGrid(ref width, ref height); + + for (int i = 0; i < width; i++) + { + int groundHeight = Mathf.FloorToInt((Mathf.PerlinNoise(i, seed) - 0.5f) * height) + (height/2); + for (int j = groundHeight; j >= 0; j--) + { + SetGridCoordinate(grid, i, j, 1); + } + } + return grid; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoiseGround.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoiseGround.cs.meta new file mode 100644 index 0000000..b39aa76 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorPerlinNoiseGround.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4829c639bd6729945b0664d15e2f740e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandom.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandom.cs new file mode 100644 index 0000000..5f28bed --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandom.cs @@ -0,0 +1,41 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Generates a simple grid filled with random points + /// + public class MMGridGeneratorRandom : MMGridGenerator + { + /// + /// Generates a simple grid filled with random points + /// + /// + /// + /// + /// + /// + public static int[,] Generate(int width, int height, int seed, int fillPercentage) + { + int[,] grid = PrepareGrid(ref width, ref height); + + grid = MMGridGeneratorFull.Generate(width, height, true); + System.Random random = new System.Random(seed); + + for (int i = 0; i <= width; i ++) + { + for (int j = 0; j <= height; j ++) + { + int value = (random.Next(0,100) < fillPercentage)? 1: 0; + SetGridCoordinate(grid, i, j, value); + } + } + + return grid; + } + } + +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandom.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandom.cs.meta new file mode 100644 index 0000000..7fb4ffd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandom.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c05de6f8b07240b4e87c6219630c251d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalk.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalk.cs new file mode 100644 index 0000000..37caa07 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalk.cs @@ -0,0 +1,95 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Generates a grid with a path carved by a drunkard walk algorithm + /// See http://pcg.wikidot.com/pcg-algorithm:drunkard-walk + /// + public class MMGridGeneratorRandomWalk : MMGridGenerator + { + /// + /// Generates a grid with a path carved by a drunkard walk algorithm + /// + /// + /// + /// + /// + /// + public static int[,] Generate(int width, int height, int seed, int fillPercentage, Vector2Int startingPoint, int maxIterations) + { + int[,] grid = PrepareGrid(ref width, ref height); + grid = MMGridGeneratorFull.Generate(width, height, true); + System.Random random = new System.Random(seed); + + int requiredFillQuantity = ((width * height) * fillPercentage) / 100; + int fillCounter = 0; + + int currentX = startingPoint.x; + int currentY = startingPoint.y; + grid[currentX, currentY] = 0; + fillCounter++; + int iterationsCounter = 0; + + while ((fillCounter < requiredFillQuantity) && (iterationsCounter < maxIterations)) + { + int direction = random.Next(4); + + switch (direction) + { + case 0: + if ((currentY + 1) < height) + { + currentY++; + grid = Carve(grid, currentX, currentY, ref fillCounter); + } + break; + case 1: + if ((currentY - 1) > 1) + { + currentY--; + grid = Carve(grid, currentX, currentY, ref fillCounter); + } + break; + case 2: + if ((currentX - 1) > 1) + { + currentX--; + grid = Carve(grid, currentX, currentY, ref fillCounter); + } + break; + case 3: + if ((currentX + 1) < width) + { + currentX++; + grid = Carve(grid, currentX, currentY, ref fillCounter); + } + break; + } + + iterationsCounter++; + } + return grid; + } + + /// + /// + /// + /// + /// + /// + /// + /// + private static int[,] Carve(int[,] grid, int x, int y, ref int fillCounter) + { + if (grid[x, y] == 1) + { + grid[x, y] = 0; + fillCounter++; + } + return grid; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalk.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalk.cs.meta new file mode 100644 index 0000000..3a782bf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalk.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcddb04b7bb50904182da35f2b38777c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkAvoider.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkAvoider.cs new file mode 100644 index 0000000..287df40 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkAvoider.cs @@ -0,0 +1,106 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Generates a grid with a path carved by a drunkard walk algorithm that will avoid another grid's walls + /// + public class MMGridGeneratorRandomWalkAvoider : MMGridGenerator + { + /// + /// Generates a grid with a path carved by a drunkard walk algorithm that will avoid another grid's walls + /// + /// + /// + /// + /// + /// + public static int[,] Generate(int width, int height, int seed, int fillPercentage, Vector2Int startingPoint, int[,] obstacles, int obstacleDistance, int maxIterations) + { + int[,] grid = PrepareGrid(ref width, ref height); + grid = MMGridGeneratorFull.Generate(width, height, true); + System.Random random = new System.Random(seed); + + int requiredFillQuantity = ((width * height) * fillPercentage) / 100; + int fillCounter = 0; + + int currentX = startingPoint.x; + int currentY = startingPoint.y; + grid[currentX, currentY] = 0; + fillCounter++; + + int iterationsCount = 0; + + while ((fillCounter < requiredFillQuantity) && (iterationsCount < maxIterations)) + { + int direction = random.Next(4); + + switch (direction) + { + case 0: // up + if ( ((currentY + 1) <= height) && !ObstacleAt(obstacles, currentX, currentY + obstacleDistance) ) + { + currentY++; + grid = Carve(grid, currentX, currentY, ref fillCounter); + } + break; + case 1: // down + if ( ((currentY - 1) > 1) && !ObstacleAt(obstacles, currentX, currentY - obstacleDistance) ) + { + currentY--; + grid = Carve(grid, currentX, currentY, ref fillCounter); + } + break; + case 2: // left + if (((currentX - 1) > 1) && !ObstacleAt(obstacles, currentX - obstacleDistance, currentY ) ) + { + currentX--; + grid = Carve(grid, currentX, currentY, ref fillCounter); + } + break; + case 3: // right + if (((currentX + 1) <= width) && !ObstacleAt(obstacles, currentX + obstacleDistance, currentY) ) + { + currentX++; + grid = Carve(grid, currentX, currentY, ref fillCounter); + } + break; + } + iterationsCount++; + } + return grid; + } + + /// + /// Returns true if an obstacle is found at the specified coordinates, false otherwise + /// + /// + /// + /// + /// + private static bool ObstacleAt(int[,] obstacles, int x, int y) + { + return (MMGridGenerator.GetValueAtGridCoordinate(obstacles, x, y, 1) == 1); + } + + /// + /// + /// + /// + /// + /// + /// + /// + private static int[,] Carve(int[,] grid, int x, int y, ref int fillCounter) + { + if (GetValueAtGridCoordinate(grid, x, y, 0) == 1) + { + SetGridCoordinate(grid, x, y, 0); + fillCounter++; + } + return grid; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkAvoider.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkAvoider.cs.meta new file mode 100644 index 0000000..f872dfe --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkAvoider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c349afb15421f141ae3ba659175c815 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkGround.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkGround.cs new file mode 100644 index 0000000..12ee4a0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkGround.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Uses random walk to generate a ground with controlled elevation + /// + public class MMGridGeneratorRandomWalkGround : MMGridGenerator + { + /// + /// Uses random walk to generate a ground with controlled elevation + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static int[,] Generate(int width, int height, int seed, int minHeightDifference, int maxHeightDifference, int minFlatDistance, int maxFlatDistance, int maxHeight) + { + System.Random random = new System.Random(seed.GetHashCode()); + Random.InitState(seed); + + int[,] grid = PrepareGrid(ref width, ref height); + + int groundHeight = Random.Range(0, maxHeight); + int previousGroundHeight = groundHeight; + int currentFlatDistance = -1; + + for (int i = 0; i < width; i++) + { + groundHeight = previousGroundHeight; + int newElevation = Random.Range(minHeightDifference, maxHeightDifference); + int flatDistance = Random.Range(minFlatDistance, maxFlatDistance); + + if (currentFlatDistance >= flatDistance - 1) + { + if (random.Next(2) > 0) + { + groundHeight -= newElevation; + } + else if (previousGroundHeight + newElevation < height) + { + groundHeight += newElevation; + } + + groundHeight = Mathf.Clamp(groundHeight, 1, maxHeight); + currentFlatDistance = 0; + } + else + { + currentFlatDistance++; + } + + for (int j = groundHeight; j >= 0; j--) + { + grid[i, j] = 1; + } + + previousGroundHeight = groundHeight; + } + + return grid; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkGround.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkGround.cs.meta new file mode 100644 index 0000000..5e1cabc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMGridGenerators/MMGridGeneratorRandomWalkGround.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21e69a8c38f55e84ea754b184697f036 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator.meta new file mode 100644 index 0000000..9553a68 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 457a984195dd82e4194c80673fdf1c9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGenerator.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGenerator.cs new file mode 100644 index 0000000..266e318 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGenerator.cs @@ -0,0 +1,227 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection.Emit; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.Tilemaps; +using Random = UnityEngine.Random; + +namespace MoreMountains.Tools +{ + /// + /// This class will fill a tilemap with the data generated by the combination of its layers + /// + [ExecuteAlways] + public class MMTilemapGenerator : MonoBehaviour + { + [Header("Grid")] + /// The width of the grid, in cells + [Tooltip("The width of the grid, in cells")] + [MMVector("Min","Max")] + public Vector2Int GridWidth = new Vector2Int(50,50); + /// the height of the grid, in cells + [Tooltip("the height of the grid, in cells")] + [MMVector("Min","Max")] + public Vector2Int GridHeight = new Vector2Int(50,50); + + [Header("Data")] + /// the list of layers that will be used to generate the tilemap + [Tooltip("the list of layers that will be used to generate the tilemap")] + public MMTilemapGeneratorLayerList Layers; + + /// a value between 0 and 1 that will be used by all layers as their random seed. If you generate another map using the same seed, it'll look the same + [Tooltip("a value between 0 and 1 that will be used by all layers as their random seed. If you generate another map using the same seed, it'll look the same")] + public int GlobalSeed = 0; + /// whether or not to randomize the global seed every time a new map is generated + [Tooltip("whether or not to randomize the global seed every time a new map is generated")] + public bool RandomizeGlobalSeed = true; + + [Header("Slow Render")] + /// turning this to true will (at runtime only) draw the map progressively. This is really just for fun. + [Tooltip("turning this to true will (at runtime only) draw the map progressively. This is really just for fun.")] + public bool SlowRender = false; + /// the duration of the slow render, in seconds + [Tooltip("the duration of the slow render, in seconds")] + public float SlowRenderDuration = 1f; + /// the tween to use for the slow render + [Tooltip("the tween to use for the slow render")] + public MMTweenType SlowRenderTweenType = new MMTweenType(MMTween.MMTweenCurve.EaseInOutCubic); + + protected int[,] _grid; + + protected int _width; + protected int _height; + + /// + /// the possible methods that can be used to generate a random grid + /// + public enum GenerateMethods + { + Full, + Perlin, + PerlinGround, + Random, + RandomWalk, + RandomWalkAvoider, + RandomWalkGround, + Path, + Copy + } + + /// + /// Generates and renders every layer in the data stack + /// + public virtual void Generate() + { + Random.InitState((int)System.DateTime.Now.Ticks); + if (RandomizeGlobalSeed) { GlobalSeed = Mathf.Abs(Random.Range(int.MinValue, int.MaxValue)); } + + foreach (MMTilemapGeneratorLayer layer in Layers) + { + GenerateLayer(layer); + } + } + + /// + /// On reset, we initialize our list + /// + void Reset() + { + Layers = new MMTilemapGeneratorLayerList(){ + new MMTilemapGeneratorLayer() + }; + } + + /// + /// Generates a layer grid, and renders it + /// + /// + protected virtual void GenerateLayer(MMTilemapGeneratorLayer layer) + { + if (!layer.Active) + { + return; + } + + if (layer.TargetTilemap == null) { Debug.LogError("Tilemap Generator : you need to specify a Target Tilemap to paint on."); } + if (layer.Tile == null) { Debug.LogError("Tilemap Generator : you need to specify a Tile to paint with."); } + if (layer.GridWidth == 0) { Debug.LogError("Tilemap Generator : grid width can't be 0."); } + if (layer.GridHeight == 0) { Debug.LogError("Tilemap Generator : grid height can't be 0."); } + + float seedFloat = 0f; + float layerSeedFloat = 0f; + float globalSeedFloat = 0f; + + + UnityEngine.Random.InitState(GlobalSeed); + int width = layer.OverrideGridSize ? layer.GridWidth : UnityEngine.Random.Range(GridWidth.x, GridWidth.y); + int height = layer.OverrideGridSize ? layer.GridHeight : UnityEngine.Random.Range(GridHeight.x, GridHeight.y); + + globalSeedFloat = UnityEngine.Random.value; + + // random outside of the global seed + if (layer.DoNotUseGlobalSeed) + { + Random.InitState((int)System.DateTime.Now.Ticks); + if (layer.RandomizeSeed) + { + layer.Seed = Mathf.Abs(Random.Range(int.MinValue, int.MaxValue)); + } + UnityEngine.Random.InitState(layer.Seed); + layerSeedFloat = UnityEngine.Random.value; + } + + int seed = layer.DoNotUseGlobalSeed ? layer.Seed : GlobalSeed; + seedFloat = layer.DoNotUseGlobalSeed ? layerSeedFloat : globalSeedFloat; + + switch (layer.GenerateMethod) + { + case GenerateMethods.Full: + _grid = MMGridGeneratorFull.Generate(width, height, layer.FullGenerationFilled); + layer.Grid = _grid; + break; + case GenerateMethods.Perlin: + _grid = MMGridGeneratorPerlinNoise.Generate(width, height, seedFloat); + layer.Grid = _grid; + break; + case GenerateMethods.PerlinGround: + _grid = MMGridGeneratorPerlinNoiseGround.Generate(width, height, seedFloat); + layer.Grid = _grid; + break; + case GenerateMethods.Random: + _grid = MMGridGeneratorRandom.Generate(width, height, seed, layer.RandomFillPercentage); + layer.Grid = _grid; + break; + case GenerateMethods.RandomWalk: + _grid = MMGridGeneratorRandomWalk.Generate(width, height, seed, layer.RandomWalkPercent, layer.RandomWalkStartingPoint, layer.RandomWalkMaxIterations); + layer.Grid = _grid; + break; + case GenerateMethods.RandomWalkAvoider: + + int[,] obstacleGrid = MMGridGenerator.TilemapToGrid(layer.RandomWalkAvoiderObstaclesTilemap, width, height); + _grid = MMGridGeneratorRandomWalkAvoider.Generate(width, height, seed, layer.RandomWalkAvoiderPercent, layer.RandomWalkAvoiderStartingPoint, obstacleGrid, layer.RandomWalkAvoiderObstaclesDistance, layer.RandomWalkAvoiderMaxIterations); + layer.Grid = _grid; + break; + case GenerateMethods.RandomWalkGround: + _grid = MMGridGeneratorRandomWalkGround.Generate(width, height, seed, + layer.RandomWalkGroundMinHeightDifference, layer.RandomWalkGroundMaxHeightDifference, + layer.RandomWalkGroundMinFlatDistance, layer.RandomWalkGroundMaxFlatDistance, layer.RandomWalkGroundMaxHeight); + layer.Grid = _grid; + break; + case GenerateMethods.Path: + _grid = MMGridGeneratorPath.Generate(width, height, seed, layer.PathDirection, layer.PathStartPosition, layer.PathMinWidth, + layer.PathMaxWidth, layer.PathDirectionChangeDistance, layer.PathWidthChangePercentage, + layer.PathDirectionChangePercentage); + layer.Grid = _grid; + break; + case GenerateMethods.Copy: + layer.TargetTilemap.ClearAllTiles(); + DelayedCopy(layer); + break; + } + + if (layer.Smooth) { _grid = MMGridGenerator.SmoothenGrid(_grid); } + if (layer.InvertGrid) { _grid = MMGridGenerator.InvertGrid(_grid); } + + _grid = MMGridGenerator.BindGrid(_grid, layer.BoundsTop, layer.BoundsBottom, layer.BoundsLeft, layer.BoundsRight); + _grid = MMGridGenerator.ApplySafeSpots(_grid, layer.SafeSpots); + + RenderGrid(layer); + } + + /// + /// Copies the tilemap's content after a delay because Unity. + /// + /// + async static void DelayedCopy(MMTilemapGeneratorLayer layer) + { + await Task.Delay(500); + MMTilemapShadow.Copy(layer.CopyTilemap, layer.TargetTilemap); + } + + /// + /// Renders the grid with the selected modes to the specified target tilemap + /// + /// + protected virtual void RenderGrid(MMTilemapGeneratorLayer layer) + { + MMTilemapGridRenderer.RenderGrid(_grid, layer, SlowRender, SlowRenderDuration, SlowRenderTweenType,this); + } + + /// + /// Sets default values for all layers + /// + protected virtual void OnValidate() + { + if ((Layers == null) || (Layers.Count <= 0)) + { + return; + } + foreach (MMTilemapGeneratorLayer layer in Layers) + { + layer.SetDefaults(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGenerator.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGenerator.cs.meta new file mode 100644 index 0000000..baa9966 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1554ad3bc2245e64bbf7cf0a29ed7fa0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGeneratorLayer.cs b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGeneratorLayer.cs new file mode 100644 index 0000000..f1161e8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGeneratorLayer.cs @@ -0,0 +1,291 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Tilemaps; + +namespace MoreMountains.Tools +{ + /// + /// A class used to display a reoderable list of MMTilemapGeneratorLayers + /// + [System.Serializable] + public class MMTilemapGeneratorLayerList : MMReorderableArray + { + } + + /// + /// A class used to store and edit the data of MMTilemapGenerator layers, which you can use and combine + /// to generate unique and random grids + /// + [Serializable] + public class MMTilemapGeneratorLayer + { + /// the grid generated by this layer + public virtual int[,] Grid { get; set; } + + /// the various modes of fusion you can use on this layer. + /// Fusion modes will be applied on layers from top to bottom (the last to speak wins) + /// Normal : just generates a grid, default mode + /// NormalNoClear : generates a grid, but doesn't clear it first + /// Intersect : when painting on a target grid that already has content, will only keep the resulting intersection + /// Combine : adds the result of this grid to the existing target + /// Subtract : removes the result of this grid from the existing target + public enum FusionModes { Normal, NormalNoClear, Intersect, Combine, Subtract } + + /// the name of this layer, doesn't do anything, just used to organize things + [Tooltip("the name of this layer, doesn't do anything, just used to organize things")] + public string Name = "Layer"; + /// whether this layer should be taken into account when generating the final grid + [Tooltip("whether this layer should be taken into account when generating the final grid")] + public bool Active = true; + + [Header("Tilemaps")] + /// the tilemap on which to paint tiles + [Tooltip("the tilemap on which to paint tiles")] + public Tilemap TargetTilemap; + /// the tile to use to paint on the tilemap + [Tooltip("the tile to use to paint on the tilemap")] + public TileBase Tile; + + [Header("Grid")] + /// whether or not this layer should paint a grid of a different size than the global one + [Tooltip("whether or not this layer should paint a grid of a different size than the global one")] + public bool OverrideGridSize = false; + /// the new value of the grid width + [Tooltip("the new value of the grid width")] + [MMCondition("OverrideGridSize", true)] + public int GridWidth = 50; + /// the new value of the grid height + [Tooltip("the new value of the grid height")] + [MMCondition("OverrideGridSize", true)] + public int GridHeight = 50; + + [Header("Method")] + /// the algorithm to use to generate this layer's grid + [Tooltip("the algorithm to use to generate this layer's grid :\n" + + "Full : will fill or empty the grid\n" + + "Perlin : uses perlin noise to randomly fill the grid\n" + + "Perling Ground : uses perlin noise to generate a ground surface\n" + + "Random Walk : starts at point A then moves randomly, carving a path\n" + + "Random Walk Avoider : same, but avoids obstacles\n" + + "Path : starts at Point A, and carves a path in the selected direction\n" + + "Copy : copies another tilemap to generate a grid")] + public MMTilemapGenerator.GenerateMethods GenerateMethod = MMTilemapGenerator.GenerateMethods.Perlin; + /// if this is true, global seed won't be used for this layer + [Tooltip("if this is true, global seed won't be used for this layer")] + public bool DoNotUseGlobalSeed = false; + /// whether or not to randomize this layer's seed when pressing Generate + [Tooltip("whether or not to randomize this layer's seed when pressing Generate")] + [MMCondition("DoNotUseGlobalSeed", true)] + public bool RandomizeSeed = true; + /// the dedicated seed of this layer, when not using the global one + [Tooltip("the dedicated seed of this layer, when not using the global one")] + [MMCondition("DoNotUseGlobalSeed", true)] + public int Seed = 1; + + [Header("PostProcessing")] + /// whether or not to smoothen the resulting grid, gets rid of spikes/isolated points + [Tooltip("whether or not to smoothen the resulting grid, gets rid of spikes/isolated points")] + public bool Smooth = false; + /// whether or not to invert the grid to get the opposite result (filled becomes empty, empty becomes filled) + [Tooltip("whether or not to invert the grid to get the opposite result (filled becomes empty, empty becomes filled)")] + public bool InvertGrid = false; + /// The selected fusion mode + [Tooltip("the various modes of fusion you can use on this layer.\n" + + "Fusion modes will be applied on layers from top to bottom (the last to speak wins)\n" + + "Normal : just generates a grid, default mode\n" + + "NormalNoClear : generates a grid, but doesn't clear it first\n" + + "Intersect : when painting on a target grid that already has content, will only keep the resulting intersection\n" + + "Combine : adds the result of this grid to the existing target\n" + + "Subtract : removes the result of this grid from the existing target")] + public FusionModes FusionMode = FusionModes.Normal; + + [Header("Settings")] + + // full + /// in full mode, whether the grid should be full or empty + [Tooltip("in full mode, whether the grid should be full or empty")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.Full)] + public bool FullGenerationFilled = true; + + // random + /// in random mode, the percentage of the grid to fill + [Tooltip("in random mode, the percentage of the grid to fill")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.Random)] + public int RandomFillPercentage = 50; + + // random walk ground + /// in random walk ground mode,the minimum height difference between two steps + [Tooltip("in random walk ground mode,the minimum height difference between two steps")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkGround)] + public int RandomWalkGroundMinHeightDifference = 1; + /// in random walk ground mode,the maximum height difference between two steps + [Tooltip("in random walk ground mode,the maximum height difference between two steps")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkGround)] + public int RandomWalkGroundMaxHeightDifference = 3; + /// in random walk ground mode, the minimum distance that should remain flat + [Tooltip("in random walk ground mode, the minimum distance that should remain flat")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkGround)] + public int RandomWalkGroundMinFlatDistance = 1; + /// in random walk ground mode, the maximum distance that should remain flat + [Tooltip("in random walk ground mode, the maximum distance that should remain flat")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkGround)] + public int RandomWalkGroundMaxFlatDistance = 3; + /// in random walk ground mode, the maximum height of the tallest platfrom, from the bottom of the grid + [Tooltip("in random walk ground mode, the maximum height of the tallest platfrom, from the bottom of the grid")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkGround)] + public int RandomWalkGroundMaxHeight = 3; + + // random walk + /// in random walk mode, the percentage of the map the walker should try filling + [Tooltip("in random walk mode, the percentage of the map the walker should try filling")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalk)] + public int RandomWalkPercent = 50; + /// in random walk mode,the point at which the walker starts, in grid coordinates + [Tooltip("in random walk mode,the point at which the walker starts, in grid coordinates")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalk)] + public Vector2Int RandomWalkStartingPoint = Vector2Int.zero; + /// in random walk mode, the max amount of iterations to run the random on + [Tooltip("in random walk mode, the max amount of iterations to run the random on")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalk)] + public int RandomWalkMaxIterations = 1500; + + // random walk avoider + /// in random walk avoider mode, the percentage of the grid the walker should try filling + [Tooltip("in random walk avoider mode, the percentage of the grid the walker should try filling")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkAvoider)] + public int RandomWalkAvoiderPercent = 50; + /// in random walk avoider mode, the point in grid units at which the walker starts + [Tooltip("in random walk avoider mode, the point in grid units at which the walker starts")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkAvoider)] + public Vector2Int RandomWalkAvoiderStartingPoint = Vector2Int.zero; + /// in random walk avoider mode, the tilemap containing the data the walker will try to avoid + [Tooltip("in random walk avoider mode, the tilemap containing the data the walker will try to avoid")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkAvoider)] + public Tilemap RandomWalkAvoiderObstaclesTilemap; + /// in random walk avoider mode,the distance at which the walker should try to stay away from obstacles + [Tooltip("in random walk avoider mode,the distance at which the walker should try to stay away from obstacles")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkAvoider)] + public int RandomWalkAvoiderObstaclesDistance = 1; + /// in random walk avoider mode,the max amount of iterations this algorithm will iterate on + [Tooltip("in random walk avoider mode,the max amount of iterations this algorithm will iterate on")] + [MMEnumCondition("GenerateMethod", (int)MMTilemapGenerator.GenerateMethods.RandomWalkAvoider)] + public int RandomWalkAvoiderMaxIterations = 100; + + // path + /// in path mode, the start position of the path + [Tooltip("in path mode, the start position of the path")] + [MMEnumCondition("GenerateMethod", (int) MMTilemapGenerator.GenerateMethods.Path)] + public Vector2Int PathStartPosition = Vector2Int.zero; + /// in path mode, the direction the path should follow + [Tooltip("in path mode, the direction the path should follow")] + [MMEnumCondition("GenerateMethod", (int) MMTilemapGenerator.GenerateMethods.Path)] + public MMGridGeneratorPath.Directions PathDirection = MMGridGeneratorPath.Directions.BottomToTop; + /// in path mode, the minimum width of the path + [Tooltip("in path mode, the minimum width of the path")] + [MMEnumCondition("GenerateMethod", (int) MMTilemapGenerator.GenerateMethods.Path)] + public int PathMinWidth = 2; + /// in path mode, the maximum width of the path + [Tooltip("in path mode, the maximum width of the path")] + [MMEnumCondition("GenerateMethod", (int) MMTilemapGenerator.GenerateMethods.Path)] + public int PathMaxWidth = 4; + /// in path mode, the maximum number of units the path can change direction + [Tooltip("in path mode, the maximum number of units the path can change direction")] + [MMEnumCondition("GenerateMethod", (int) MMTilemapGenerator.GenerateMethods.Path)] + public int PathDirectionChangeDistance = 2; + /// in path mode, the chance (in percent) for the path to change width at every step + [Tooltip("in path mode, the chance (in percent) for the path to change width at every step")] + [MMEnumCondition("GenerateMethod", (int) MMTilemapGenerator.GenerateMethods.Path)] + public int PathWidthChangePercentage = 50; + /// in path mode, the chance percentage that the path will take a new direction + [Tooltip("in path mode, the chance percentage that the path will take a new direction")] + [MMEnumCondition("GenerateMethod", (int) MMTilemapGenerator.GenerateMethods.Path)] + public int PathDirectionChangePercentage = 50; + + // copy + /// in copy mode, the tilemap to copy + [Tooltip("in copy mode, the tilemap to copy")] + [MMEnumCondition("GenerateMethod", (int) MMTilemapGenerator.GenerateMethods.Copy)] + public Tilemap CopyTilemap; + + [Header("Bounds")] + /// whether or not to force a wall on the grid's top + [Tooltip("whether or not to force a wall on the grid's top")] + public bool BoundsTop = false; + /// whether or not to force a wall on the grid's bottom + [Tooltip("whether or not to force a wall on the grid's bottom")] + public bool BoundsBottom = false; + /// whether or not to force a wall on the grid's left + [Tooltip("whether or not to force a wall on the grid's left")] + public bool BoundsLeft = false; + /// whether or not to force a wall on the grid's right + [Tooltip("whether or not to force a wall on the grid's right")] + public bool BoundsRight = false; + + /// + /// A struct used to store safe spots dimensions + /// + [Serializable] + public struct MMTilemapGeneratorLayerSafeSpot + { + public Vector2Int Start; + public Vector2Int End; + } + + [Header("Safe Spots")] + /// a list of "safe spots" : defined by their start and end coordinates, these areas will be left empty + [Tooltip("a list of 'safe spots' : defined by their start and end coordinates, these areas will be left empty")] + public List SafeSpots; + + [HideInInspector] + /// this is only used to initialize the default values in the inspector + public bool Initialized = false; + + /// + /// This method will set default values, because Unity. + /// + public virtual void SetDefaults() + { + if (!Initialized) + { + GridWidth = 50; + GridHeight = 50; + GenerateMethod = MMTilemapGenerator.GenerateMethods.Perlin; + RandomizeSeed = true; + DoNotUseGlobalSeed = false; + FusionMode = FusionModes.Normal; + Seed = 123456789; + Smooth = false; + InvertGrid = false; + FullGenerationFilled = true; + RandomFillPercentage = 50; + RandomWalkGroundMinHeightDifference = 1; + RandomWalkGroundMaxHeightDifference = 3; + RandomWalkGroundMinFlatDistance = 1; + RandomWalkGroundMaxFlatDistance = 3; + RandomWalkGroundMaxHeight = 8; + RandomWalkPercent = 50; + RandomWalkStartingPoint = Vector2Int.zero; + RandomWalkMaxIterations = 1500; + PathMinWidth = 2; + PathMaxWidth = 4; + PathDirectionChangeDistance = 2; + PathWidthChangePercentage = 50; + PathDirectionChangePercentage = 50; + RandomWalkAvoiderPercent = 50; + RandomWalkAvoiderStartingPoint = Vector2Int.zero; + RandomWalkAvoiderObstaclesTilemap = null; + RandomWalkAvoiderObstaclesDistance = 1; + RandomWalkAvoiderMaxIterations = 100; + BoundsTop = false; + BoundsBottom = false; + BoundsLeft = false; + BoundsRight = false; + PathStartPosition = Vector2Int.zero; + PathDirection = MMGridGeneratorPath.Directions.BottomToTop; + Initialized = true; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGeneratorLayer.cs.meta b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGeneratorLayer.cs.meta new file mode 100644 index 0000000..11e5596 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMProcedural/MMTilemapGenerator/MMTilemapGeneratorLayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01608833a8be3af4587b87e116bffc68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures.meta new file mode 100644 index 0000000..2577c7f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0cc3214299b3c7d48b073d9adff3a39c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials.meta new file mode 100644 index 0000000..251ecd0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 513a503306b96634195ba1ff655a14c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueCrosses.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueCrosses.mat new file mode 100644 index 0000000..3e188fb --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueCrosses.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_BlueCrosses + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 3940f67cfdf57d642894f21532af98e6, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueCrosses.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueCrosses.mat.meta new file mode 100644 index 0000000..7f675c9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueCrosses.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3aa8708b27bfe524b8280cdc746690d3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueDots.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueDots.mat new file mode 100644 index 0000000..095660b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueDots.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_BlueDots + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: bdc5330a25b04664fbea7584bb62d859, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueDots.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueDots.mat.meta new file mode 100644 index 0000000..4d0f545 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueDots.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 391d11fb65b61014eb313e127073582f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueFrame.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueFrame.mat new file mode 100644 index 0000000..6d3a6be --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueFrame.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_BlueFrame + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 5da54437c52380745ab2d12656252b80, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueFrame.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueFrame.mat.meta new file mode 100644 index 0000000..559789a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueFrame.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0e8a571ef6fce34890952889b35afda +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueSquares.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueSquares.mat new file mode 100644 index 0000000..f0369ae --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueSquares.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_BlueSquares + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: ed68763c04a44fa49a0aa2316c3d46ee, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueSquares.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueSquares.mat.meta new file mode 100644 index 0000000..86e32ec --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_BlueSquares.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 594480777cec0fa489126aeb2273ecbc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyCrosses.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyCrosses.mat new file mode 100644 index 0000000..48af972 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyCrosses.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_DarkGreyCrosses + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 4113553176e622441936eaf5a3cfd2ae, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyCrosses.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyCrosses.mat.meta new file mode 100644 index 0000000..86985fc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyCrosses.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a42e638cd366184aad3203b2732b2e2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyDots.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyDots.mat new file mode 100644 index 0000000..3f365b8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyDots.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_DarkGreyDots + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 8274e1a60f17f4e4890fc0814db5e357, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyDots.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyDots.mat.meta new file mode 100644 index 0000000..e5b9f07 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyDots.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db11353047c997f46a4760754f00c788 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyFrame.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyFrame.mat new file mode 100644 index 0000000..a0cfb3f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyFrame.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_DarkGreyFrame + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 87cd835267fdf4e47b4c5974e3a3b4fc, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyFrame.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyFrame.mat.meta new file mode 100644 index 0000000..2e5b8bc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreyFrame.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13516cfdf366d2542bc2fa983b6f803a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreySquares.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreySquares.mat new file mode 100644 index 0000000..35d0cf1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreySquares.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_DarkGreySquares + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 296c95127ab0eee40b334cc33b1bc479, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreySquares.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreySquares.mat.meta new file mode 100644 index 0000000..42d3da4 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_DarkGreySquares.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2370f782aa1d374a8b4b05c11d259ea +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenCrosses.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenCrosses.mat new file mode 100644 index 0000000..987af14 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenCrosses.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_GreenCrosses + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: a6f79153eaeaf214e9259d50f28e637f, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenCrosses.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenCrosses.mat.meta new file mode 100644 index 0000000..4a406f5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenCrosses.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 467db2a28dc1c6a45b450dc6d124de59 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenDots.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenDots.mat new file mode 100644 index 0000000..89b865e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenDots.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_GreenDots + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 72c581fb2cdf1344f9da353c3f78ccd0, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenDots.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenDots.mat.meta new file mode 100644 index 0000000..ad8eb6b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenDots.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d19e7892e1d87fb4fb8433ec887fb8cc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenFrame.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenFrame.mat new file mode 100644 index 0000000..a44de00 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenFrame.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_GreenFrame + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 563d63a1a6da33c43a2b5c5a9e398c0f, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenFrame.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenFrame.mat.meta new file mode 100644 index 0000000..8e6701c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenFrame.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 40ebbdf2c7a17d342843431f58d3e892 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenSquares.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenSquares.mat new file mode 100644 index 0000000..543dcc1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenSquares.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_GreenSquares + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 785d13d865eaebc419648f8390c840b3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenSquares.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenSquares.mat.meta new file mode 100644 index 0000000..ef665e0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_GreenSquares.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb936a4576d8f9741b8d914d47f3ccce +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyCrosses.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyCrosses.mat new file mode 100644 index 0000000..35b5161 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyCrosses.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_LightGreyCrosses + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 5d158a0f06b330445acc858c5a32a269, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyCrosses.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyCrosses.mat.meta new file mode 100644 index 0000000..234ae44 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyCrosses.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 50ff9811d84ffeb42b11f0d57157a346 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyDots.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyDots.mat new file mode 100644 index 0000000..92e4595 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyDots.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_LightGreyDots + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 04edc4cbd72331c43b3ac89c21f37980, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyDots.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyDots.mat.meta new file mode 100644 index 0000000..2546bb0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyDots.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 06b0ed03b4a01634c8b5eb55bc95df8d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyFrame.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyFrame.mat new file mode 100644 index 0000000..2ca3c59 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyFrame.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_LightGreyFrame + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: a6bacc483b5f80645a74c1382418b149, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyFrame.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyFrame.mat.meta new file mode 100644 index 0000000..78c441f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreyFrame.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: adc4603b7be471c479ef63c42f19aa72 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreySquares.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreySquares.mat new file mode 100644 index 0000000..32b9493 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreySquares.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_LightGreySquares + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 9cf882a8a1f69ff43b2216f75cddd54d, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreySquares.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreySquares.mat.meta new file mode 100644 index 0000000..2084718 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_LightGreySquares.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01d51756b98901e41956185e673e6f18 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedCrosses.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedCrosses.mat new file mode 100644 index 0000000..5c340b9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedCrosses.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_RedCrosses + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: ee915ff2627397549b211481b14bbc42, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedCrosses.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedCrosses.mat.meta new file mode 100644 index 0000000..d44b975 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedCrosses.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 816fe783c3103644790f46de0cbeb161 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedDots.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedDots.mat new file mode 100644 index 0000000..35d1528 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedDots.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_RedDots + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: caa99440fded2af41b1d0c99fea51b69, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedDots.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedDots.mat.meta new file mode 100644 index 0000000..bb0a25f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedDots.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 40702ed620cf055428c35adf00a2c9b1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedFrame.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedFrame.mat new file mode 100644 index 0000000..285abc5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedFrame.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_RedFrame + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: e9ef29555e27c764193e85d5ac4cf4f4, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedFrame.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedFrame.mat.meta new file mode 100644 index 0000000..4d3fc84 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedFrame.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 959bef68856013d4da4cbe9176c989c0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedSquares.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedSquares.mat new file mode 100644 index 0000000..3185744 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedSquares.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_RedSquares + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 0bdb020a90b5f5247ab5695053e84e11, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedSquares.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedSquares.mat.meta new file mode 100644 index 0000000..2fb2f73 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_RedSquares.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a9e66cbf3543a44cb2cf068585f07d4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowCrosses.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowCrosses.mat new file mode 100644 index 0000000..47fc2df --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowCrosses.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_YellowCrosses + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: e7bd931b85ae0b54a86af9439440b98b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowCrosses.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowCrosses.mat.meta new file mode 100644 index 0000000..cb39fca --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowCrosses.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d642a4ab722ef8a46af4d261e5227b0c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowDots.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowDots.mat new file mode 100644 index 0000000..0d0ef36 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowDots.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_YellowDots + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 149489106c60322478987726a9b71cc1, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0.125, g: 0.125, b: 0.125, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowDots.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowDots.mat.meta new file mode 100644 index 0000000..8ffd8bd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowDots.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54ac4fc9dfd37074aab2e6bff0c2e6ca +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowFrame.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowFrame.mat new file mode 100644 index 0000000..6df68d5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowFrame.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_YellowFrame + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: be61fc00179c05846a6cdba7c2683514, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowFrame.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowFrame.mat.meta new file mode 100644 index 0000000..6e939cc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowFrame.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d99964e7e8afe34b8ee7943eabcd19e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowSquares.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowSquares.mat new file mode 100644 index 0000000..f545782 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowSquares.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBPR_YellowSquares + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 9fb2f7aca634c294ab8ca0d06ee4d78a, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowSquares.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowSquares.mat.meta new file mode 100644 index 0000000..d25f5dd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/MMBPR_YellowSquares.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6acb67784ba02a46b350cd11c745e4c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral.meta new file mode 100644 index 0000000..119e1ec --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6424629f0cbba364d95e71f90b9d5632 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralBlack.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralBlack.mat new file mode 100644 index 0000000..f41dafc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralBlack.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBRP_NeutralBlack + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP _SPECGLOSSMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 2800000, guid: 7e415b31b4facd24eae9598bb7644813, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.335 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.14150941, g: 0.14150941, b: 0.14150941, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralBlack.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralBlack.mat.meta new file mode 100644 index 0000000..3768abf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralBlack.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc636806db6f2654d970ed32802db8be +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralCheckers.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralCheckers.mat new file mode 100644 index 0000000..ad2e2c2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralCheckers.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBRP_NeutralCheckers + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP _SPECGLOSSMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: ff6ef20764af32745ad151687042db56, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 2800000, guid: 7e415b31b4facd24eae9598bb7644813, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.371 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralCheckers.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralCheckers.mat.meta new file mode 100644 index 0000000..02d7642 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Neutral/MMBRP_NeutralCheckers.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 98f9943149e70e84f969f66047eb997f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox.meta new file mode 100644 index 0000000..0a7d511 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a8332c60222cec45a09d1cc7d85d292 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox/MMBRP_BlueSkybox.mat b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox/MMBRP_BlueSkybox.mat new file mode 100644 index 0000000..651afe1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox/MMBRP_BlueSkybox.mat @@ -0,0 +1,90 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBRP_BlueSkybox + m_Shader: {fileID: 106, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLIC_SETUP _SUNDISK_HIGH_QUALITY + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AtmosphereThickness: 0.65 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Exposure: 1.25 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SunDisk: 2 + - _SunSize: 0.118 + - _SunSizeConvergence: 1 + - _UVSec: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _GroundColor: {r: 0.5424528, g: 0.7712264, b: 1, a: 1} + - _SkyTint: {r: 0.36196154, g: 0.6528827, b: 0.9245283, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox/MMBRP_BlueSkybox.mat.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox/MMBRP_BlueSkybox.mat.meta new file mode 100644 index 0000000..8387b70 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/MMBRP_Materials/Skybox/MMBRP_BlueSkybox.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 071011635f1949c46a85b7caac317267 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures.meta new file mode 100644 index 0000000..18156c5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e208cae29ba97543bf4696f71e54092 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers.meta new file mode 100644 index 0000000..2a81c1c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a453ef52d32f1e45ad51f7b242ef0a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers/MMCheckers.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers/MMCheckers.png new file mode 100644 index 0000000..97a09d5 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers/MMCheckers.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers/MMCheckers.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers/MMCheckers.png.meta new file mode 100644 index 0000000..4e62d72 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMCheckers/MMCheckers.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: ff6ef20764af32745ad151687042db56 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic.meta new file mode 100644 index 0000000..c826f91 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c2a4ae265b95ef41bac32f34dd267bf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticAO.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticAO.png new file mode 100644 index 0000000..05536ef Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticAO.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticAO.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticAO.png.meta new file mode 100644 index 0000000..addc230 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticAO.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 6380989b56d512c498442aa08d0dfe03 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticMetal.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticMetal.png new file mode 100644 index 0000000..1aad33f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticMetal.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticMetal.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticMetal.png.meta new file mode 100644 index 0000000..555fa19 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticMetal.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 7e415b31b4facd24eae9598bb7644813 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticNormal.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticNormal.png new file mode 100644 index 0000000..935bf6e Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticNormal.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticNormal.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticNormal.png.meta new file mode 100644 index 0000000..2a746df --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMPlastic/MMPlasticNormal.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 6fbe7cfe9fb9f934da15400bab41eae9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures.meta new file mode 100644 index 0000000..24de778 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 29e0b3d3b62d6534ba7d56fe640f38bf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueCrosses.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueCrosses.png new file mode 100644 index 0000000..98a216a Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueCrosses.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueCrosses.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueCrosses.png.meta new file mode 100644 index 0000000..13fbe75 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueCrosses.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 3940f67cfdf57d642894f21532af98e6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueDots.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueDots.png new file mode 100644 index 0000000..3482e8b Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueDots.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueDots.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueDots.png.meta new file mode 100644 index 0000000..f40c96b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueDots.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: bdc5330a25b04664fbea7584bb62d859 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueFrame.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueFrame.png new file mode 100644 index 0000000..5d110c1 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueFrame.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueFrame.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueFrame.png.meta new file mode 100644 index 0000000..8e8ac89 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueFrame.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 5da54437c52380745ab2d12656252b80 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueSquares.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueSquares.png new file mode 100644 index 0000000..a5046ba Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueSquares.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueSquares.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueSquares.png.meta new file mode 100644 index 0000000..f3f379f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_BlueSquares.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: ed68763c04a44fa49a0aa2316c3d46ee +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyCrosses.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyCrosses.png new file mode 100644 index 0000000..4aed7f9 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyCrosses.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyCrosses.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyCrosses.png.meta new file mode 100644 index 0000000..555e2bd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyCrosses.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 4113553176e622441936eaf5a3cfd2ae +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyDots.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyDots.png new file mode 100644 index 0000000..9e15cab Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyDots.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyDots.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyDots.png.meta new file mode 100644 index 0000000..259bcf5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyDots.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 8274e1a60f17f4e4890fc0814db5e357 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyFrame.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyFrame.png new file mode 100644 index 0000000..c9e1fe2 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyFrame.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyFrame.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyFrame.png.meta new file mode 100644 index 0000000..a020e11 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreyFrame.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 87cd835267fdf4e47b4c5974e3a3b4fc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreySquares.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreySquares.png new file mode 100644 index 0000000..1b23f43 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreySquares.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreySquares.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreySquares.png.meta new file mode 100644 index 0000000..7325c32 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_DarkGreySquares.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 296c95127ab0eee40b334cc33b1bc479 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenCrosses.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenCrosses.png new file mode 100644 index 0000000..6eb2cdf Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenCrosses.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenCrosses.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenCrosses.png.meta new file mode 100644 index 0000000..8e6d4ab --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenCrosses.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: a6f79153eaeaf214e9259d50f28e637f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenDots.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenDots.png new file mode 100644 index 0000000..54a0226 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenDots.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenDots.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenDots.png.meta new file mode 100644 index 0000000..570f8c2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenDots.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 72c581fb2cdf1344f9da353c3f78ccd0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenFrame.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenFrame.png new file mode 100644 index 0000000..3d25437 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenFrame.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenFrame.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenFrame.png.meta new file mode 100644 index 0000000..f4bf824 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenFrame.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 563d63a1a6da33c43a2b5c5a9e398c0f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenSquares.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenSquares.png new file mode 100644 index 0000000..ab9fb00 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenSquares.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenSquares.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenSquares.png.meta new file mode 100644 index 0000000..0c0875e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_GreenSquares.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 785d13d865eaebc419648f8390c840b3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyCrosses.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyCrosses.png new file mode 100644 index 0000000..d9be0eb Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyCrosses.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyCrosses.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyCrosses.png.meta new file mode 100644 index 0000000..9992d1d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyCrosses.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 5d158a0f06b330445acc858c5a32a269 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyDots.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyDots.png new file mode 100644 index 0000000..0560d19 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyDots.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyDots.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyDots.png.meta new file mode 100644 index 0000000..0f1dd5d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyDots.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 04edc4cbd72331c43b3ac89c21f37980 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyFrame.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyFrame.png new file mode 100644 index 0000000..a1cfe22 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyFrame.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyFrame.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyFrame.png.meta new file mode 100644 index 0000000..56a9701 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreyFrame.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: a6bacc483b5f80645a74c1382418b149 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreySquares.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreySquares.png new file mode 100644 index 0000000..4839a72 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreySquares.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreySquares.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreySquares.png.meta new file mode 100644 index 0000000..bea85cd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_LightGreySquares.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 9cf882a8a1f69ff43b2216f75cddd54d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedCrosses.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedCrosses.png new file mode 100644 index 0000000..ea7278c Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedCrosses.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedCrosses.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedCrosses.png.meta new file mode 100644 index 0000000..e7d2c1f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedCrosses.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: ee915ff2627397549b211481b14bbc42 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedDots.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedDots.png new file mode 100644 index 0000000..5016698 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedDots.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedDots.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedDots.png.meta new file mode 100644 index 0000000..037fd10 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedDots.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: caa99440fded2af41b1d0c99fea51b69 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedFrame.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedFrame.png new file mode 100644 index 0000000..60892dc Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedFrame.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedFrame.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedFrame.png.meta new file mode 100644 index 0000000..1509d7c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedFrame.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: e9ef29555e27c764193e85d5ac4cf4f4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedSquares.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedSquares.png new file mode 100644 index 0000000..052f0de Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedSquares.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedSquares.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedSquares.png.meta new file mode 100644 index 0000000..87e5d15 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_RedSquares.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 0bdb020a90b5f5247ab5695053e84e11 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowCrosses.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowCrosses.png new file mode 100644 index 0000000..d93b542 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowCrosses.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowCrosses.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowCrosses.png.meta new file mode 100644 index 0000000..0abbb7e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowCrosses.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: e7bd931b85ae0b54a86af9439440b98b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowDots.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowDots.png new file mode 100644 index 0000000..65ee41d Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowDots.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowDots.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowDots.png.meta new file mode 100644 index 0000000..986490e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowDots.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 149489106c60322478987726a9b71cc1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowFrame.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowFrame.png new file mode 100644 index 0000000..9bb514a Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowFrame.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowFrame.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowFrame.png.meta new file mode 100644 index 0000000..e534ef6 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowFrame.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: be61fc00179c05846a6cdba7c2683514 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowSquares.png b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowSquares.png new file mode 100644 index 0000000..21559d9 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowSquares.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowSquares.png.meta b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowSquares.png.meta new file mode 100644 index 0000000..efd87ab --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMPrototypeTextures/Textures/MMProtoTextures/MMProtoTextures_YellowSquares.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 9fb2f7aca634c294ab8ca0d06ee4d78a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders.meta b/Assets/Feel/MMTools/Accessories/MMShaders.meta new file mode 100644 index 0000000..83fbcb9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 185e1d5939addfe48a0f60d481005067 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MM2DReflection.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MM2DReflection.shader new file mode 100644 index 0000000..fc55cb2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MM2DReflection.shader @@ -0,0 +1,282 @@ +// Made with Amplify Shader Editor +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "MoreMountains/MM2DReflection" +{ + Properties + { + _ReflectionTexture("ReflectionTexture", 2D) = "white" {} + _ReflectionTextureStrength("ReflectionTextureStrength", Float) = 1 + _ReflectionTextureSpeed("ReflectionTextureSpeed", Float) = 0 + [Toggle(_USEGRADIENT_ON)] _UseGradient("UseGradient", Float) = 0 + _GradientPower("GradientPower", Float) = 1.24 + _GradientRemap1("GradientRemap1", Color) = (1,1,1,0) + _GradientRemap0("GradientRemap0", Color) = (0,0,0,0) + _RenderTexture("RenderTexture", 2D) = "white" {} + [HideInInspector] _texcoord( "", 2D ) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags + { + "RenderType" = "Transparent" "Queue" = "Transparent+0" "IgnoreProjector" = "True" "IsEmissive" = "true" + } + Cull Back + CGINCLUDE + #include "UnityShaderVariables.cginc" + #include "UnityPBSLighting.cginc" + #include "Lighting.cginc" + #pragma target 3.0 + #pragma shader_feature_local _USEGRADIENT_ON + struct Input + { + float2 uv_texcoord; + }; + + uniform sampler2D _RenderTexture; + uniform sampler2D _ReflectionTexture; + uniform float _ReflectionTextureSpeed; + uniform float _ReflectionTextureStrength; + uniform float _GradientPower; + uniform float4 _GradientRemap0; + uniform float4 _GradientRemap1; + + + struct Gradient + { + int type; + int colorsLength; + int alphasLength; + float4 colors[8]; + float2 alphas[8]; + }; + + + Gradient NewGradient(int type, int colorsLength, int alphasLength, + float4 colors0, float4 colors1, float4 colors2, float4 colors3, float4 colors4, + float4 colors5, float4 colors6, float4 colors7, + float2 alphas0, float2 alphas1, float2 alphas2, float2 alphas3, float2 alphas4, + float2 alphas5, float2 alphas6, float2 alphas7) + { + Gradient g; + g.type = type; + g.colorsLength = colorsLength; + g.alphasLength = alphasLength; + g.colors[0] = colors0; + g.colors[1] = colors1; + g.colors[2] = colors2; + g.colors[3] = colors3; + g.colors[4] = colors4; + g.colors[5] = colors5; + g.colors[6] = colors6; + g.colors[7] = colors7; + g.alphas[0] = alphas0; + g.alphas[1] = alphas1; + g.alphas[2] = alphas2; + g.alphas[3] = alphas3; + g.alphas[4] = alphas4; + g.alphas[5] = alphas5; + g.alphas[6] = alphas6; + g.alphas[7] = alphas7; + return g; + } + + + float4 SampleGradient(Gradient gradient, float time) + { + float3 color = gradient.colors[0].rgb; + UNITY_UNROLL + for (int c = 1; c < 8; c++) + { + float colorPos = saturate( + (time - gradient.colors[c - 1].w) / (0.00001 + (gradient.colors[c].w - gradient.colors[c - 1].w)) * + step(c, (float)gradient.colorsLength - 1)); + color = lerp(color, gradient.colors[c].rgb, lerp(colorPos, step(0.01, colorPos), gradient.type)); + } + #ifndef UNITY_COLORSPACE_GAMMA + color = half3(GammaToLinearSpaceExact(color.r), GammaToLinearSpaceExact(color.g), + GammaToLinearSpaceExact(color.b)); + #endif + float alpha = gradient.alphas[0].x; + UNITY_UNROLL + for (int a = 1; a < 8; a++) + { + float alphaPos = saturate( + (time - gradient.alphas[a - 1].y) / (0.00001 + (gradient.alphas[a].y - gradient.alphas[a - 1].y)) * + step(a, (float)gradient.alphasLength - 1)); + alpha = lerp(alpha, gradient.alphas[a].x, lerp(alphaPos, step(0.01, alphaPos), gradient.type)); + } + return float4(color, alpha); + } + + + inline half4 LightingUnlit(SurfaceOutput s, half3 lightDir, half atten) + { + return half4(0, 0, 0, s.Alpha); + } + + void surf(Input i, inout SurfaceOutput o) + { + float2 temp_cast_0 = ((_Time.y * _ReflectionTextureSpeed)).xx; + float2 uv_TexCoord17 = i.uv_texcoord + temp_cast_0; + float4 appendResult8 = (float4(tex2D(_ReflectionTexture, uv_TexCoord17))); + float4 appendResult10 = (float4( + (appendResult8 * (0.0 + (_ReflectionTextureStrength - 0.0) * (0.02 - 0.0) / (1.0 - 0.0))).x, 1, 0.0, + 0.0)); + float2 uv_TexCoord3 = i.uv_texcoord * float2(1, -1) + appendResult10.xy; + float4 break55 = tex2D(_RenderTexture, uv_TexCoord3); + float4 appendResult27 = (float4(break55.r, break55.g, break55.b, 0.0)); + o.Emission = appendResult27.xyz; + float4 temp_cast_5 = (1.0).xxxx; + Gradient gradient37 = NewGradient(0, 2, 2, float4(0, 0, 0, 0.2794079), float4(1, 1, 1, 1), 0, 0, 0, 0, 0, 0, + float2(1, 0), float2(1, 1), 0, 0, 0, 0, 0, 0); + #ifdef _USEGRADIENT_ON + float4 staticSwitch43 = (_GradientRemap0 + (SampleGradient(gradient37, (i.uv_texcoord.y * _GradientPower)) - + float4(0, 0, 0, 0)) * (_GradientRemap1 - _GradientRemap0) / (float4(1, 1, 1, 1) - float4(0, 0, 0, 0))); + #else + float4 staticSwitch43 = temp_cast_5; + #endif + o.Alpha = staticSwitch43.r; + } + ENDCG + CGPROGRAM + #pragma surface surf Unlit alpha:fade keepalpha fullforwardshadows + ENDCG + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + ZWrite On + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.0 + #pragma multi_compile_shadowcaster + #pragma multi_compile UNITY_PASS_SHADOWCASTER + #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 + #include "HLSLSupport.cginc" + #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN ) + #define CAN_SKIP_VPOS + #endif + #include "UnityCG.cginc" + #include "Lighting.cginc" + #include "UnityPBSLighting.cginc" + sampler3D _DitherMaskLOD; + + struct v2f + { + V2F_SHADOW_CASTER; + float2 customPack1 : TEXCOORD1; + float3 worldPos : TEXCOORD2; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert(appdata_full v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + Input customInputData; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + half3 worldNormal = UnityObjectToWorldNormal(v.normal); + o.customPack1.xy = customInputData.uv_texcoord; + o.customPack1.xy = v.texcoord; + o.worldPos = worldPos; + TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) + return o; + } + + half4 frag(v2f IN + #if !defined( CAN_SKIP_VPOS ) + , UNITY_VPOS_TYPE vpos : VPOS + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + Input surfIN; + UNITY_INITIALIZE_OUTPUT(Input, surfIN); + surfIN.uv_texcoord = IN.customPack1.xy; + float3 worldPos = IN.worldPos; + half3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); + SurfaceOutput o; + UNITY_INITIALIZE_OUTPUT(SurfaceOutput, o) + surf(surfIN, o); + #if defined( CAN_SKIP_VPOS ) + float2 vpos = IN.pos; + #endif + half alphaRef = tex3D(_DitherMaskLOD, float3(vpos.xy * 0.25, o.Alpha * 0.9375)).a; + clip(alphaRef - 0.01); + SHADOW_CASTER_FRAGMENT(IN) + } + ENDCG + } + } + Fallback "Diffuse" +} +/*ASEBEGIN +Version=18800 +2605;278;1828;996;2497.327;-162.5027;1.3;True;True +Node;AmplifyShaderEditor.CommentaryNode;46;-3019.484,-684.4105;Inherit;False;2192.577;800.8371;Comment;12;3;12;10;5;13;11;8;4;17;16;14;15;Distortion;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RangedFloatNode;15;-2969.483,-384.1354;Float;False;Property;_ReflectionTextureSpeed;ReflectionTextureSpeed;2;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleTimeNode;14;-2921.382,-536.2355;Inherit;False;1;0;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;16;-2675.682,-456.9357;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode;17;-2475.786,-483.7206;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;11;-2188.945,-278.7507;Float;False;Property;_ReflectionTextureStrength;ReflectionTextureStrength;1;0;Create;True;0;0;0;False;0;False;1;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;4;-2172.911,-573.264;Inherit;True;Property;_ReflectionTexture;ReflectionTexture;0;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.DynamicAppendNode;8;-1807.558,-461.7617;Inherit;False;FLOAT4;4;0;FLOAT4;0,0,0,0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.TFHCRemapNode;12;-1841.718,-318.4871;Inherit;False;5;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;3;FLOAT;0;False;4;FLOAT;0.02;False;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;45;-2086.164,392.4668;Inherit;False;1619.74;872.2771;Comment;10;44;43;40;41;42;36;39;37;38;35;Opacity Gradient;1,1,1,1;0;0 +Node;AmplifyShaderEditor.Vector2Node;5;-1661.26,-57.6115;Float;False;Constant;_Vector0;Vector 0;2;0;Create;True;0;0;0;False;0;False;0,1;0,0;0;3;FLOAT2;0;FLOAT;1;FLOAT;2 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;13;-1595.944,-355.8999;Inherit;False;2;2;0;FLOAT4;0,0,0,0;False;1;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.DynamicAppendNode;10;-1348.235,-230.2275;Inherit;False;FLOAT4;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.RangedFloatNode;38;-1929.386,790.6915;Inherit;False;Property;_GradientPower;GradientPower;4;0;Create;True;0;0;0;False;0;False;1.24;1.24;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode;35;-2036.163,595.9568;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.TextureCoordinatesNode;3;-1105.594,-165.9844;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,-1;False;1;FLOAT2;0,1;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.GradientNode;37;-1912.13,442.4668;Inherit;False;0;2;2;0,0,0,0.2794079;1,1,1,1;1,0;1,1;0;1;OBJECT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;39;-1676.469,662.6243;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;42;-1583.445,1047.124;Inherit;False;Property;_GradientRemap1;GradientRemap1;5;0;Create;True;0;0;0;False;0;False;1,1,1,0;1,1,1,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SamplerNode;56;-667.5653,-251.5219;Inherit;True;Property;_RenderTexture;RenderTexture;7;0;Create;True;0;0;0;False;0;False;-1;7b0c74896ea6ff344a2ffdf20d18c5c8;7b0c74896ea6ff344a2ffdf20d18c5c8;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.ColorNode;41;-1588.096,853.3234;Inherit;False;Property;_GradientRemap0;GradientRemap0;6;0;Create;True;0;0;0;False;0;False;0,0,0,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.GradientSampleNode;36;-1482.668,521.5372;Inherit;True;2;0;OBJECT;;False;1;FLOAT;0;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;44;-1126.531,469.1824;Inherit;False;Constant;_One;One;5;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.BreakToComponentsNode;55;-182.2803,-110.486;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 +Node;AmplifyShaderEditor.TFHCRemapNode;40;-1119.874,803.7108;Inherit;True;5;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;1,1,1,1;False;3;COLOR;0,0,0,0;False;4;COLOR;1,1,1,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.DynamicAppendNode;27;89.31296,-25.08363;Inherit;True;FLOAT4;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.StaticSwitch;43;-789.2987,709.1713;Inherit;False;Property;_UseGradient;UseGradient;3;0;Create;True;0;0;0;False;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.StandardSurfaceOutputNode;32;433.3258,-23.80483;Float;False;True;-1;2;;0;0;Unlit;MoreMountains/MM2DReflection;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;False;False;False;False;False;False;Back;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Transparent;0.5;True;True;0;False;Transparent;;Transparent;All;14;all;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;True;2;5;False;-1;10;False;-1;0;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;True;False;Cylindrical;False;Relative;0;;-1;-1;-1;-1;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;False;15;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0 +WireConnection;16;0;14;0 +WireConnection;16;1;15;0 +WireConnection;17;1;16;0 +WireConnection;4;1;17;0 +WireConnection;8;0;4;0 +WireConnection;12;0;11;0 +WireConnection;13;0;8;0 +WireConnection;13;1;12;0 +WireConnection;10;0;13;0 +WireConnection;10;1;5;2 +WireConnection;3;1;10;0 +WireConnection;39;0;35;2 +WireConnection;39;1;38;0 +WireConnection;56;1;3;0 +WireConnection;36;0;37;0 +WireConnection;36;1;39;0 +WireConnection;55;0;56;0 +WireConnection;40;0;36;0 +WireConnection;40;3;41;0 +WireConnection;40;4;42;0 +WireConnection;27;0;55;0 +WireConnection;27;1;55;1 +WireConnection;27;2;55;2 +WireConnection;43;1;44;0 +WireConnection;43;0;40;0 +WireConnection;32;2;27;0 +WireConnection;32;9;43;0 +ASEEND*/ +//CHKSM=E3715DFFF7D3453E83B992A34567E160F84DCC37 \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MM2DReflection.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MM2DReflection.shader.meta new file mode 100644 index 0000000..2ed1149 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MM2DReflection.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ad7325dd3fb876645bde2dd9d0691993 +ShaderImporter: + externalObjects: {} + defaultTextures: + - _RenderTexture: {fileID: 8400000, guid: 7b0c74896ea6ff344a2ffdf20d18c5c8, type: 2} + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMAdvancedToon.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMAdvancedToon.shader new file mode 100644 index 0000000..8dae1da --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMAdvancedToon.shader @@ -0,0 +1,945 @@ +// Made with Amplify Shader Editor +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "MoreMountains/MMAdvancedToon" +{ + Properties + { + _Cutoff( "Mask Clip Value", Float ) = 0.5 + [Header(Albedo)]_MainTex("MainTex", 2D) = "white" {} + _Tint("Tint", Color) = (1,1,1,1) + [Header(Normal Map)]_Normal("Normal", 2D) = "bump" {} + [Header(Ramp Texture)][Toggle(_USERAMPTEXTURE_ON)] _UseRampTexture("UseRampTexture", Float) = 0 + _RampTexture("RampTexture", 2D) = "white" {} + [Header(Generated Ramp)]_RampDark("RampDark", Color) = (0.3490566,0.3490566,0.3490566,0) + _RampLight("RampLight", Color) = (1,1,1,0) + _StepWidth("StepWidth", Range( 0.05 , 1)) = 0.25 + [IntRange]_StepAmount("StepAmount", Range( 0 , 16)) = 2 + _RampOffset("RampOffset", Range( 0 , 1)) = 0.5 + [Header(Vertex Colors)][Toggle(_USEVERTEXCOLORS_ON)] _UseVertexColors("UseVertexColors", Float) = 0 + [Header(Shadow)]_ShadowColor("ShadowColor", Color) = (1,0,0.115766,1) + _LightColor("LightColor", Color) = (1,1,1,1) + _ShadowBlur("ShadowBlur", Range( 0.01 , 1)) = 1 + _ShadowStrength("ShadowStrength", Range( 0 , 1)) = 1 + _ShadowSize("ShadowSize", Range( 0.01 , 1)) = 0.5 + [KeywordEnum(Multiply,Replace,Lighten,HardMix)] _ShadowMixMode("ShadowMixMode", Float) = 0 + [Header(Specular)][Toggle(_USESPECULAR_ON)] _UseSpecular("UseSpecular", Float) = 0 + _SpecularSize("SpecularSize", Range( 0 , 1)) = 0.4 + _SpecularFalloff("SpecularFalloff", Range( 0 , 2)) = 1 + [HDR]_SpecularColor("SpecularColor", Color) = (2,2,2,1) + _SpecularPower("SpecularPower", Float) = 1 + _SpecularForceUnderShadow("SpecularForceUnderShadow", Float) = 0 + [Header(Rim Light)][Toggle(_USERIMLIGHT_ON)] _UseRimLight("UseRimLight", Float) = 0 + _RimColor("RimColor", Color) = (0,0.7342432,1,1) + _RimPower("RimPower", Range( 0 , 1)) = 0.6547081 + _RimAmount("RimAmount", Range( 0 , 1)) = 0.7 + [Toggle(_HIDERIMUNDERSHADOW_ON)] _HideRimUnderShadow("HideRimUnderShadow", Float) = 0 + [Toggle(_SHARPRIMLIGHT_ON)] _SharpRimLight("SharpRimLight", Float) = 1 + [Header(Emission)]_EmissionTexture("EmissionTexture", 2D) = "white" {} + [HDR]_EmissionColor("EmissionColor", Color) = (2,2,2,1) + _EmissionForce("EmissionForce", Float) = 0 + [Header(Animation)]_Framerate("Framerate", Float) = 5 + [Header(VertexOffset)][Toggle(_USEVERTEXOFFSET_ON)] _UseVertexOffset("UseVertexOffset", Float) = 0 + _VertexOffsetNoiseTexture("VertexOffsetNoiseTexture", 2D) = "white" {} + _VertexOffsetFrequency("VertexOffsetFrequency", Float) = 2 + _VertexOffsetMagnitude("VertexOffsetMagnitude", Float) = 0.05 + _VertexOffsetX("VertexOffsetX", Float) = 0.5 + _VertexOffsetY("VertexOffsetY", Float) = 0.5 + _VertexOffsetZ("VertexOffsetZ", Float) = 0.5 + [Header(Outline)]_OutlineColor("OutlineColor", Color) = (0.5451996,1,0,1) + _OutlineWidth("OutlineWidth", Float) = 0.1 + _OutlineAlpha("OutlineAlpha", Range( 0 , 1)) = 0 + [Header(SecondaryTexture)]_SecondaryTexture("SecondaryTexture", 2D) = "white" {} + _SecondaryTextureStrength("SecondaryTextureStrength", Float) = 0 + _SecondaryTextureSize("SecondaryTextureSize", Float) = 1 + _SecondaryTextureSpeedFactor("SecondaryTextureSpeedFactor", Float) = 0 + [Header(ToneMapping)]_Desaturation("Desaturation", Range( 0 , 1)) = 0 + _Contrast("Contrast", Range( -1 , 0.99)) = 0 + [HideInInspector] _texcoord( "", 2D ) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags + { + "RenderType" = "TransparentCutout" "Queue" = "AlphaTest+0" + } + Cull Front + CGPROGRAM + #pragma target 3.0 + #pragma surface outlineSurf Outline nofog keepalpha noshadow noambient novertexlights nolightmap nodynlightmap nodirlightmap nometa noforwardadd vertex:outlineVertexDataFunc + void outlineVertexDataFunc(inout appdata_full v, out Input o) + { + UNITY_INITIALIZE_OUTPUT(Input, o); + float outlineVar = _OutlineWidth; + v.vertex.xyz += (v.normal * outlineVar); + } + + inline half4 LightingOutline(SurfaceOutput s, half3 lightDir, half atten) { return half4(0, 0, 0, s.Alpha); } + + void outlineSurf(Input i, inout SurfaceOutput o) + { + o.Emission = _OutlineColor.rgb; + clip(_OutlineAlpha - _Cutoff); + } + ENDCG + + + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry+0" "IsEmissive" = "true" + } + Cull Back + CGINCLUDE + #include "UnityPBSLighting.cginc" + #include "UnityShaderVariables.cginc" + #include "UnityCG.cginc" + #include "Lighting.cginc" + #pragma target 3.0 + #pragma shader_feature_local _USEVERTEXOFFSET_ON + #pragma shader_feature_local _SHADOWMIXMODE_MULTIPLY _SHADOWMIXMODE_REPLACE _SHADOWMIXMODE_LIGHTEN _SHADOWMIXMODE_HARDMIX + #pragma shader_feature_local _USESPECULAR_ON + #pragma shader_feature_local _USERAMPTEXTURE_ON + #pragma shader_feature_local _USEVERTEXCOLORS_ON + #pragma shader_feature_local _USERIMLIGHT_ON + #pragma shader_feature_local _SHARPRIMLIGHT_ON + #pragma shader_feature_local _HIDERIMUNDERSHADOW_ON + #ifdef UNITY_PASS_SHADOWCASTER + #undef INTERNAL_DATA + #undef WorldReflectionVector + #undef WorldNormalVector + #define INTERNAL_DATA half3 internalSurfaceTtoW0; half3 internalSurfaceTtoW1; half3 internalSurfaceTtoW2; + #define WorldReflectionVector(data,normal) reflect (data.worldRefl, half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal))) + #define WorldNormalVector(data,normal) half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal)) + #endif + struct Input + { + float2 uv_texcoord; + float3 vertexToFrag80; + float3 worldPos; + float4 vertexColor : COLOR; + float3 worldNormal; + INTERNAL_DATA + }; + + struct SurfaceOutputCustomLightingCustom + { + half3 Albedo; + half3 Normal; + half3 Emission; + half Metallic; + half Smoothness; + half Occlusion; + half Alpha; + Input SurfInput; + UnityGIInput GIData; + }; + + uniform float _VertexOffsetMagnitude; + uniform sampler2D _VertexOffsetNoiseTexture; + uniform float _Framerate; + uniform float _VertexOffsetFrequency; + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + uniform float _VertexOffsetZ; + uniform sampler2D _EmissionTexture; + uniform float4 _EmissionTexture_ST; + uniform float4 _EmissionColor; + uniform float _EmissionForce; + uniform float4 _RampDark; + uniform float4 _RampLight; + uniform sampler2D _Normal; + uniform float4 _Normal_ST; + uniform float _StepWidth; + uniform float _StepAmount; + uniform float _RampOffset; + uniform sampler2D _RampTexture; + uniform sampler2D _SecondaryTexture; + uniform float _SecondaryTextureSize; + uniform float _SecondaryTextureSpeedFactor; + uniform float _SecondaryTextureStrength; + uniform sampler2D _MainTex; + uniform float4 _MainTex_ST; + uniform float4 _Tint; + uniform float _SpecularPower; + uniform float _SpecularSize; + uniform float _SpecularFalloff; + uniform float4 _ShadowColor; + uniform float _ShadowStrength; + uniform float4 _LightColor; + uniform float _ShadowSize; + uniform float _ShadowBlur; + uniform float _SpecularForceUnderShadow; + uniform float4 _SpecularColor; + uniform float _RimAmount; + uniform float _RimPower; + uniform float4 _RimColor; + uniform float _Desaturation; + uniform float _Contrast; + uniform float _OutlineWidth; + uniform float4 _OutlineColor; + uniform float _OutlineAlpha; + uniform float _Cutoff = 0.5; + + void vertexDataFunc(inout appdata_full v, out Input o) + { + UNITY_INITIALIZE_OUTPUT(Input, o); + float4 temp_cast_0 = (0.0).xxxx; + half steppedTime293 = (round((_Time.y * _Framerate)) / _Framerate); + float3 ase_vertex3Pos = v.vertex.xyz; + float3 temp_output_281_0 = (ase_vertex3Pos * _VertexOffsetFrequency); + half2 vertexOffsetXUV302 = (steppedTime293 + (temp_output_281_0).xy); + half2 vertexOffsetYUV303 = ((steppedTime293 * 2.0) + (temp_output_281_0).yz); + half2 vertexOffsetZUV304 = ((steppedTime293 * 4.0) + (temp_output_281_0).xz); + float4 appendResult308 = (float4( + (tex2Dlod(_VertexOffsetNoiseTexture, float4(vertexOffsetXUV302, 0, 0.0)).r - _VertexOffsetX), + (tex2Dlod(_VertexOffsetNoiseTexture, float4(vertexOffsetYUV303, 0, 0.0)).r - _VertexOffsetY), + (tex2Dlod(_VertexOffsetNoiseTexture, float4(vertexOffsetZUV304, 0, 0.0)).r - _VertexOffsetZ), 0.0)); + #ifdef _USEVERTEXOFFSET_ON + float4 staticSwitch350 = (_VertexOffsetMagnitude * appendResult308); + #else + float4 staticSwitch350 = temp_cast_0; + #endif + float3 vertexOffset311 = (staticSwitch350).xyz; + float3 outline364 = 0; + v.vertex.xyz += (vertexOffset311 + outline364); + float2 uv_Normal = v.texcoord * _Normal_ST.xy + _Normal_ST.zw; + float3 normal83 = UnpackNormal(tex2Dlod(_Normal, float4(uv_Normal, 0, 0.0))); + float3 ase_worldNormal = UnityObjectToWorldNormal(v.normal); + float3 ase_worldTangent = UnityObjectToWorldDir(v.tangent.xyz); + float3x3 tangentToWorld = CreateTangentToWorldPerVertex(ase_worldNormal, ase_worldTangent, v.tangent.w); + float3 tangentNormal33 = normal83; + float3 modWorldNormal33 = normalize( + (tangentToWorld[0] * tangentNormal33.x + tangentToWorld[1] * tangentNormal33.y + tangentToWorld[2] * + tangentNormal33.z)); + o.vertexToFrag80 = modWorldNormal33; + } + + inline half4 LightingStandardCustomLighting(inout SurfaceOutputCustomLightingCustom s, half3 viewDir, + UnityGI gi) + { + UnityGIInput data = s.GIData; + Input i = s.SurfInput; + half4 c = 0; + #ifdef UNITY_PASS_FORWARDBASE + float ase_lightAtten = data.atten; + if( _LightColor0.a == 0) + ase_lightAtten = 0; + #else + float3 ase_lightAttenRGB = gi.light.color / ((_LightColor0.rgb) + 0.000001); + float ase_lightAtten = max(max(ase_lightAttenRGB.r, ase_lightAttenRGB.g), ase_lightAttenRGB.b); + #endif + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(data.lightmapUV.xy, data.worldPos); + float zDist = dot(_WorldSpaceCameraPos - data.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(data.worldPos, zDist); + ase_lightAtten = UnityMixRealtimeAndBakedShadows(data.atten, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + float3 normalizeResult81 = normalize(i.vertexToFrag80); + float3 ase_worldPos = i.worldPos; + #if defined(LIGHTMAP_ON) && UNITY_VERSION < 560 //aseld + float3 ase_worldlightDir = 0; + #else //aseld + float3 ase_worldlightDir = Unity_SafeNormalize(UnityWorldSpaceLightDir(ase_worldPos)); + #endif //aseld + float dotResult34 = dot(normalizeResult81, ase_worldlightDir); + float NdotL31 = dotResult34; + float4 lerpResult277 = lerp(_RampDark, _RampLight, + saturate(((floor((NdotL31 / _StepWidth)) / _StepAmount) * 0.5 + _RampOffset))); + float2 temp_cast_1 = (saturate((NdotL31 * 0.5 + 0.5))).xx; + #ifdef _USERAMPTEXTURE_ON + float4 staticSwitch3 = tex2D(_RampTexture, temp_cast_1); + #else + float4 staticSwitch3 = lerpResult277; + #endif + float4 ramp51 = staticSwitch3; + #if defined(LIGHTMAP_ON) && ( UNITY_VERSION < 560 || ( defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) && defined(SHADOWS_SCREEN) ) )//aselc + + + float4 ase_lightColor = 0; + #else //aselc + float4 ase_lightColor = _LightColor0; + #endif //aselc + half steppedTime293 = (round((_Time.y * _Framerate)) / _Framerate); + float2 uv_MainTex = i.uv_texcoord * _MainTex_ST.xy + _MainTex_ST.zw; + float4 temp_cast_3 = (1.0).xxxx; + #ifdef _USEVERTEXCOLORS_ON + float4 staticSwitch7 = i.vertexColor; + #else + float4 staticSwitch7 = temp_cast_3; + #endif + float4 blendOpSrc460 = (tex2D(_SecondaryTexture, + ((i.uv_texcoord * _SecondaryTextureSize) + (steppedTime293 * + _SecondaryTextureSpeedFactor))) * _SecondaryTextureStrength); + float4 blendOpDest460 = ((tex2D(_MainTex, uv_MainTex) * _Tint) * staticSwitch7); + float4 albedo11 = (saturate((blendOpDest460 - blendOpSrc460))); + float4 temp_output_73_0 = ((ramp51 * float4(ase_lightColor.rgb, 0.0)) * albedo11); + float temp_output_120_0 = (1.0 - _SpecularSize); + float3 ase_worldViewDir = normalize(UnityWorldSpaceViewDir(ase_worldPos)); + float3 ase_worldNormal = WorldNormalVector(i, float3( 0, 0, 1 )); + float dotResult106 = dot(ase_worldViewDir, ase_worldNormal); + float2 uv_Normal = i.uv_texcoord * _Normal_ST.xy + _Normal_ST.zw; + float3 normal83 = UnpackNormal(tex2D(_Normal, uv_Normal)); + float dotResult110 = dot(ase_worldViewDir, -reflect(ase_worldlightDir, (WorldNormalVector(i, normal83)))); + float specular113 = (pow(dotResult106, _SpecularFalloff) * dotResult110); + float specularDelta116 = fwidth(specular113); + float smoothstepResult121 = smoothstep(temp_output_120_0, (temp_output_120_0 + specularDelta116), + specular113); + float temp_output_2_0_g2 = _ShadowStrength; + float temp_output_3_0_g2 = (1.0 - temp_output_2_0_g2); + float3 appendResult7_g2 = (float3(temp_output_3_0_g2, temp_output_3_0_g2, temp_output_3_0_g2)); + float clampResult189 = clamp(ase_lightAtten, 0.0, 1.0); + float lerpResult409 = lerp(clampResult189, step(_ShadowSize, clampResult189), _ShadowBlur); + float temp_output_191_0 = pow(lerpResult409, _ShadowBlur); + float4 lerpResult194 = lerp(float4(((_ShadowColor.rgb * temp_output_2_0_g2) + appendResult7_g2), 0.0), + _LightColor, temp_output_191_0); + float4 shadow195 = lerpResult194; + float4 temp_cast_7 = (_SpecularForceUnderShadow).xxxx; + float4 temp_output_274_0 = round(pow(max(shadow195, float4(0.9528302, 0.9528302, 0.9528302, 0)), + temp_cast_7)); + float4 specularIntensity124 = ((_SpecularPower * smoothstepResult121) * temp_output_274_0); + float4 temp_output_131_0 = (specular113 * _SpecularColor * saturate(specularIntensity124)); + float4 computedSpecular133 = temp_output_131_0; + #ifdef _USESPECULAR_ON + float4 staticSwitch137 = ((temp_output_73_0 * (1.0 - specularIntensity124)) + computedSpecular133); + #else + float4 staticSwitch137 = temp_output_73_0; + #endif + float4 litColor422 = staticSwitch137; + float shadowArea411 = temp_output_191_0; + float4 blendOpSrc410 = litColor422; + float4 blendOpDest410 = shadow195; + float4 blendOpSrc430 = litColor422; + float4 blendOpDest430 = shadow195; + #if defined(_SHADOWMIXMODE_MULTIPLY) + float4 staticSwitch420 = (litColor422 * shadow195); + #elif defined(_SHADOWMIXMODE_REPLACE) + float4 staticSwitch420 = ( ( litColor422 * shadowArea411 ) + ( shadow195 * ( 1.0 - shadowArea411 ) ) ); + #elif defined(_SHADOWMIXMODE_LIGHTEN) + float4 staticSwitch420 = ( saturate( max( blendOpSrc410, blendOpDest410 ) )); + #elif defined(_SHADOWMIXMODE_HARDMIX) + float4 staticSwitch420 = ( saturate( round( 0.5 * ( blendOpSrc430 + blendOpDest430 ) ) )); + #else + float4 staticSwitch420 = ( litColor422 * shadow195 ); + #endif + float4 shadowMix435 = staticSwitch420; + float4 temp_cast_8 = (0.0).xxxx; + float rimAmount169 = _RimAmount; + float dotResult89 = dot((WorldNormalVector(i, normal83)), ase_worldViewDir); + float NdotV90 = dotResult89; + #ifdef _HIDERIMUNDERSHADOW_ON + float staticSwitch166 = NdotL31; + #else + float staticSwitch166 = 1.0; + #endif + float temp_output_148_0 = ((1.0 - NdotV90) * pow(staticSwitch166, _RimPower)); + float smoothstepResult150 = smoothstep((rimAmount169 - 0.01), (0.01 + rimAmount169), temp_output_148_0); + #ifdef _SHARPRIMLIGHT_ON + float staticSwitch168 = smoothstepResult150; + #else + float staticSwitch168 = ( rimAmount169 * temp_output_148_0 ); + #endif + #ifdef _USERIMLIGHT_ON + float4 staticSwitch164 = (staticSwitch168 * _RimColor); + #else + float4 staticSwitch164 = temp_cast_8; + #endif + float4 rimLight157 = staticSwitch164; + float4 preToneMapping438 = (shadowMix435 + rimLight157); + float grayscale442 = Luminance(preToneMapping438.rgb); + float4 temp_cast_10 = (grayscale442).xxxx; + float4 lerpResult444 = lerp(preToneMapping438, temp_cast_10, _Desaturation); + float4 temp_cast_11 = (_Contrast).xxxx; + float4 postToneMapping439 = (float4(0, 0, 0, 0) + (lerpResult444 - temp_cast_11) * (float4(1, 1, 1, 0) - + float4(0, 0, 0, 0)) / (float4(1, 1, 1, 0) - temp_cast_11)); + float4 lightCol68 = postToneMapping439; + c.rgb = lightCol68.rgb; + c.a = 1; + return c; + } + + inline void LightingStandardCustomLighting_GI(inout SurfaceOutputCustomLightingCustom s, UnityGIInput data, + inout UnityGI gi) + { + s.GIData = data; + } + + void surf(Input i, inout SurfaceOutputCustomLightingCustom o) + { + o.SurfInput = i; + o.Normal = float3(0, 0, 1); + float2 uv_EmissionTexture = i.uv_texcoord * _EmissionTexture_ST.xy + _EmissionTexture_ST.zw; + float4 computedEmission182 = ((tex2D(_EmissionTexture, uv_EmissionTexture) * _EmissionColor) * + _EmissionForce); + o.Emission = computedEmission182.rgb; + } + ENDCG + CGPROGRAM + #pragma surface surf StandardCustomLighting keepalpha fullforwardshadows exclude_path:deferred vertex:vertexDataFunc + ENDCG + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + ZWrite On + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.0 + #pragma multi_compile_shadowcaster + #pragma multi_compile UNITY_PASS_SHADOWCASTER + #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 + #include "HLSLSupport.cginc" + #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN ) + #define CAN_SKIP_VPOS + #endif + #include "UnityCG.cginc" + #include "Lighting.cginc" + #include "UnityPBSLighting.cginc" + + struct v2f + { + V2F_SHADOW_CASTER; + float2 customPack1 : TEXCOORD1; + float3 customPack2 : TEXCOORD2; + float4 tSpace0 : TEXCOORD3; + float4 tSpace1 : TEXCOORD4; + float4 tSpace2 : TEXCOORD5; + half4 color : COLOR0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + v2f vert(appdata_full v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + Input customInputData; + vertexDataFunc(v, customInputData); + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + half3 worldNormal = UnityObjectToWorldNormal(v.normal); + half3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); + half tangentSign = v.tangent.w * unity_WorldTransformParams.w; + half3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign; + o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x); + o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y); + o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z); + o.customPack1.xy = customInputData.uv_texcoord; + o.customPack1.xy = v.texcoord; + o.customPack2.xyz = customInputData.vertexToFrag80; + TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) + o.color = v.color; + return o; + } + + half4 frag(v2f IN + #if !defined( CAN_SKIP_VPOS ) + , UNITY_VPOS_TYPE vpos : VPOS + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + Input surfIN; + UNITY_INITIALIZE_OUTPUT(Input, surfIN); + surfIN.uv_texcoord = IN.customPack1.xy; + surfIN.vertexToFrag80 = IN.customPack2.xyz; + float3 worldPos = float3(IN.tSpace0.w, IN.tSpace1.w, IN.tSpace2.w); + half3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); + surfIN.worldPos = worldPos; + surfIN.worldNormal = float3(IN.tSpace0.z, IN.tSpace1.z, IN.tSpace2.z); + surfIN.internalSurfaceTtoW0 = IN.tSpace0.xyz; + surfIN.internalSurfaceTtoW1 = IN.tSpace1.xyz; + surfIN.internalSurfaceTtoW2 = IN.tSpace2.xyz; + surfIN.vertexColor = IN.color; + SurfaceOutputCustomLightingCustom o; + UNITY_INITIALIZE_OUTPUT(SurfaceOutputCustomLightingCustom, o) + surf(surfIN, o); + #if defined( CAN_SKIP_VPOS ) + float2 vpos = IN.pos; + #endif + SHADOW_CASTER_FRAGMENT(IN) + } + ENDCG + } + } + Fallback "Diffuse" + //CustomEditor "ASEMaterialInspector" +} +/*ASEBEGIN +Version=16800 +-1898;184;1873;1126;4029.691;4075.657;1;True;True +Node;AmplifyShaderEditor.CommentaryNode;84;-6398.291,-2500.077;Float;False;810.3552;580.1461;Normal Map;2;82;83;Normal Map;1,1,1,1;0;0 +Node;AmplifyShaderEditor.SamplerNode;82;-6342.859,-2240.926;Float;True;Property;_Normal;Normal;2;0;Create;True;0;0;True;1;Header(Normal Map);None;None;True;0;False;bump;Auto;True;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.CommentaryNode;135;-4270.331,273.337;Float;False;2352.279;2466.376;Specular;39;224;133;131;119;126;129;127;124;121;122;123;117;120;116;118;115;114;113;112;108;110;107;109;106;104;111;101;105;99;100;98;244;245;247;248;269;271;272;274;Specular;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;83;-5943.662,-2244.336;Float;False;normal;-1;True;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.GetLocalVarNode;98;-4220.331,1041.668;Float;False;83;normal;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.CommentaryNode;35;-6394.275,-1621.117;Float;False;1336.096;443.0846;NdotL;7;85;31;34;81;32;80;33;NdotL;1,1,1,1;0;0 +Node;AmplifyShaderEditor.WorldNormalVector;99;-3991.64,1032.872;Float;False;False;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.WorldSpaceLightDirHlpNode;100;-4018.027,864.2838;Float;False;False;1;0;FLOAT;0;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.CommentaryNode;210;-4316.516,-1149.049;Float;False;3210.925;1296.744;Shadow;14;191;190;189;188;195;194;204;192;198;193;407;408;409;411;Shadow;1,1,1,1;0;0 +Node;AmplifyShaderEditor.ReflectOpNode;101;-3720.432,980.0969;Float;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.ViewDirInputsCoordNode;105;-4040.847,367.337;Float;False;World;False;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.WorldNormalVector;111;-4045.882,527.1082;Float;False;False;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.GetLocalVarNode;85;-6355.366,-1550.021;Float;False;83;normal;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.NegateNode;104;-3497.604,980.0958;Float;False;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.LightAttenuation;188;-3532.483,-798.512;Float;True;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;107;-3805.461,615.0662;Float;False;Property;_SpecularFalloff;SpecularFalloff;19;0;Create;True;0;0;True;0;1;1;0;2;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DotProductOpNode;106;-3685.25,453.8093;Float;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ViewDirInputsCoordNode;109;-3541.583,745.5388;Float;False;World;False;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.WorldNormalVector;33;-6122.435,-1556.394;Float;False;True;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.VertexToFragmentNode;80;-5906.466,-1539.523;Float;False;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.ClampOpNode;189;-3206.193,-689.9624;Float;True;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DotProductOpNode;110;-3286.501,890.6708;Float;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;408;-3023.774,-802.4628;Float;False;Property;_ShadowSize;ShadowSize;15;0;Create;True;0;0;True;0;0.5;0.281;0.01;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.PowerNode;108;-3496.139,481.6629;Float;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.NormalizeNode;81;-5646.468,-1541.523;Float;False;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.CommentaryNode;378;-6382.085,-400.4365;Float;False;1421.198;341.5015;Comment;6;288;289;290;291;292;293;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.WorldSpaceLightDirHlpNode;32;-6102.436,-1366.394;Float;False;True;1;0;FLOAT;0;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.RangedFloatNode;190;-2990.67,-102.864;Float;False;Property;_ShadowBlur;ShadowBlur;13;0;Create;True;0;0;True;0;1;0.538;0.01;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;112;-3053.41,683.9678;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StepOpNode;407;-2811.39,-640.3524;Float;True;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;288;-6332.085,-173.935;Float;False;Property;_Framerate;Framerate;32;0;Create;True;0;0;False;1;Header(Animation);5;6;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.TimeNode;289;-6312.839,-350.4365;Float;False;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.DotProductOpNode;34;-5502.437,-1442.394;Float;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;193;-2490.299,-1029.671;Float;False;Property;_ShadowColor;ShadowColor;11;0;Create;True;0;0;False;1;Header(Shadow);1,0,0.115766,1;0.3867923,0.3867923,0.3867923,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.LerpOp;409;-2603.832,-376.1035;Float;True;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;113;-2813.017,615.7037;Float;True;specular;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;198;-2513.879,-815.6242;Float;False;Property;_ShadowStrength;ShadowStrength;14;0;Create;True;0;0;True;0;1;1;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.FunctionNode;204;-2095.522,-941.0401;Float;True;Lerp White To;-1;;2;047d7c189c36a62438973bad9d37b1c2;0;2;1;FLOAT3;0,0,0;False;2;FLOAT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;290;-6021.639,-288.0374;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;192;-2257.108,-683.5875;Float;False;Property;_LightColor;LightColor;12;0;Create;True;0;0;False;0;1,1,1,1;1,1,1,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.PowerNode;191;-2214.937,-386.631;Float;True;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;31;-5327.133,-1423.386;Float;False;NdotL;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;52;-4303.229,-2444.127;Float;False;2993.004;1198.177;Ramp;20;51;3;4;76;37;36;38;277;50;276;275;78;93;79;49;94;41;40;39;6;Ramp;1,1,1,1;0;0 +Node;AmplifyShaderEditor.GetLocalVarNode;114;-3063.968,898.2288;Float;False;113;specular;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;6;-4121.739,-2254.808;Float;False;Property;_StepWidth;StepWidth;7;0;Create;True;0;0;True;0;0.25;0.25;0.05;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.LerpOp;194;-1831.83,-694.3508;Float;True;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RoundOpNode;291;-5831.839,-272.4373;Float;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.FWidthOpNode;115;-2826.564,896.7169;Float;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;39;-4003.614,-2355.187;Float;False;31;NdotL;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;195;-1417.53,-680.6537;Float;False;shadow;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;40;-3758.223,-2310.115;Float;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;116;-2643.596,884.6198;Float;False;specularDelta;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;292;-5675.839,-264.6375;Float;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;118;-4092.129,1294.172;Float;False;Property;_SpecularSize;SpecularSize;18;0;Create;True;0;0;True;0;0.4;0.4;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;117;-3797.932,1519.586;Float;False;116;specularDelta;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.FloorOpNode;41;-3594.712,-2315.081;Float;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;94;-3705.001,-2058.321;Float;False;Property;_StepAmount;StepAmount;8;1;[IntRange];Create;True;0;0;False;0;2;4;0;16;0;1;FLOAT;0 +Node;AmplifyShaderEditor.OneMinusNode;120;-3772.225,1306.375;Float;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;224;-4149.815,1702.134;Float;True;195;shadow;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;15;-4365.522,-4292.567;Float;False;2898.835;1634.152;Albedo;19;11;14;7;10;12;2;13;1;379;380;382;383;384;381;387;388;389;457;460;Albedo;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;293;-5281.887,-262.0375;Half;False;steppedTime;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;122;-3565.063,1433.395;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;379;-4204.608,-3137.401;Float;False;Property;_SecondaryTextureSize;SecondaryTextureSize;45;0;Create;True;0;0;True;0;1;5;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMaxOpNode;269;-3759.183,1735.286;Float;True;2;0;COLOR;0,0,0,0;False;1;COLOR;0.9528302,0.9528302,0.9528302,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;36;-3301.19,-1534.746;Float;False;31;NdotL;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;272;-3669.064,2027.191;Float;False;Property;_SpecularForceUnderShadow;SpecularForceUnderShadow;22;0;Create;True;0;0;True;0;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;387;-4200.861,-2858.142;Float;False;Property;_SecondaryTextureSpeedFactor;SecondaryTextureSpeedFactor;46;0;Create;True;0;0;True;0;0;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode;382;-4218.378,-3285.435;Float;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;38;-3361.386,-1414.372;Float;False;Constant;_RampScaleAndOffset;RampScaleAndOffset;8;0;Create;True;0;0;False;0;0.5;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;384;-4235.591,-2985.924;Float;False;293;steppedTime;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;79;-3545.247,-1836.601;Float;False;Property;_RampOffset;RampOffset;9;0;Create;True;0;0;True;0;0.5;0.5;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;93;-3567.75,-1934.395;Float;False;Constant;_RampScale;RampScale;7;0;Create;True;0;0;True;0;0.5;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;123;-3654.278,1211.111;Float;False;113;specular;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;49;-3337.018,-2218.369;Float;True;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;383;-3877.554,-3233.795;Float;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;388;-3890.861,-2978.142;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ScaleAndOffsetNode;78;-3229.247,-1969.252;Float;False;3;0;FLOAT;0;False;1;FLOAT;1;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.PowerNode;271;-3353.143,1784.866;Float;True;2;0;COLOR;0,0,0,0;False;1;FLOAT;21.47;False;1;COLOR;0 +Node;AmplifyShaderEditor.SmoothstepOpNode;121;-3355.371,1338.375;Float;True;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ScaleAndOffsetNode;37;-3021.036,-1476.643;Float;False;3;0;FLOAT;0;False;1;FLOAT;1;False;2;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;244;-3270.683,1178.104;Float;False;Property;_SpecularPower;SpecularPower;21;0;Create;True;0;0;True;0;1;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SaturateNode;76;-2732.488,-1511.635;Float;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;245;-3013.739,1316.68;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;275;-2920.151,-2366.576;Float;False;Property;_RampDark;RampDark;5;0;Create;True;0;0;True;1;Header(Generated Ramp);0.3490566,0.3490566,0.3490566,0;0.3490564,0.3490564,0.3490564,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SaturateNode;50;-2872.888,-1959.341;Float;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;2;-4195.963,-4028.957;Float;False;Property;_Tint;Tint;1;0;Create;True;0;0;False;0;1,1,1,1;1,1,1,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.VertexColorNode;13;-4315.522,-3674.198;Float;False;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;12;-4328.115,-3815.262;Float;False;Constant;_NoVertexColor;NoVertexColor;8;0;Create;True;0;0;False;0;1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;1;-4217.489,-4242.567;Float;True;Property;_MainTex;MainTex;0;0;Create;True;0;0;True;1;Header(Albedo);None;079f5a8d00f74c84181be0a872b4c39d;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RoundOpNode;274;-3033.939,1801.531;Float;False;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.ColorNode;276;-2889.599,-2180.924;Float;False;Property;_RampLight;RampLight;6;0;Create;True;0;0;True;0;1,1,1,0;1,1,1,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleAddOpNode;389;-3684.861,-3054.142;Float;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SamplerNode;4;-2482.249,-1603.606;Float;True;Property;_RampTexture;RampTexture;4;0;Create;True;0;0;True;0;52e66a9243cdfed44b5e906f5910d35b;52e66a9243cdfed44b5e906f5910d35b;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;10;-3858.242,-4062.196;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.LerpOp;277;-2329.182,-2006.194;Float;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SamplerNode;381;-3506.364,-3460.195;Float;True;Property;_SecondaryTexture;SecondaryTexture;43;0;Create;True;0;0;False;1;Header(SecondaryTexture);None;6c6bb279e7b03f7448a324ac8aa5ac91;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;380;-3502.459,-3222.047;Float;False;Property;_SecondaryTextureStrength;SecondaryTextureStrength;44;0;Create;True;0;0;True;0;0;0.2;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;7;-4068.787,-3745.562;Float;False;Property;_UseVertexColors;UseVertexColors;10;0;Create;True;0;0;True;1;Header(Vertex Colors);0;0;0;True;;Toggle;2;Key0;Key1;Create;True;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;247;-2795.206,1632.378;Float;True;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;124;-2255.071,1262.254;Float;True;specularIntensity;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.StaticSwitch;3;-1964.97,-1941.765;Float;True;Property;_UseRampTexture;UseRampTexture;3;0;Create;True;0;0;True;1;Header(Ramp Texture);0;0;0;True;;Toggle;2;Key0;Key1;Create;True;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;14;-3658.77,-3889.004;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;457;-3169.096,-3442.503;Float;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.BlendOpsNode;460;-3006.056,-3726.161;Float;True;Subtract;True;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;1;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;175;-630.5005,-3179.538;Float;False;4182.399;1269.731;Custom Lighting;18;70;72;139;65;69;134;141;140;73;159;438;158;437;137;138;422;68;440;Custom Lighting;1,1,1,1;0;0 +Node;AmplifyShaderEditor.GetLocalVarNode;127;-4124.793,2452.915;Float;False;124;specularIntensity;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;91;-6389.196,-936.1287;Float;False;1133.981;413.4298;NdotV;5;86;87;88;89;90;NdotV;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;51;-1587.945,-1918.789;Float;False;ramp;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;86;-6339.196,-878.3267;Float;False;83;normal;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.ColorNode;119;-3987.218,2244.336;Float;False;Property;_SpecularColor;SpecularColor;20;1;[HDR];Create;True;0;0;True;0;2,2,2,1;2,2,2,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.GetLocalVarNode;65;-533.4999,-3082.537;Float;False;51;ramp;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;11;-2653.021,-3745.462;Float;False;albedo;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SaturateNode;129;-3829.799,2458.054;Float;False;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;126;-4000.241,1986.725;Float;True;113;specular;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.LightColorNode;69;-364.67,-2884.373;Float;False;0;3;COLOR;0;FLOAT3;1;FLOAT;2 +Node;AmplifyShaderEditor.GetLocalVarNode;72;-189.4763,-2663.172;Float;False;11;albedo;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;139;-185.6951,-2438.733;Float;True;124;specularIntensity;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.WorldNormalVector;87;-6061.468,-886.1287;Float;False;False;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.ViewDirInputsCoordNode;88;-6061.468,-706.6989;Float;False;World;False;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;70;-153.0082,-2981.326;Float;True;2;2;0;COLOR;0,0,0,0;False;1;FLOAT3;0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;131;-3619.327,2223.57;Float;True;3;3;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.DotProductOpNode;89;-5771.26,-811.2357;Float;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;133;-2474.236,2214.922;Float;True;computedSpecular;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.OneMinusNode;140;92.18002,-2438.526;Float;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;73;98.37092,-2805.102;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;173;-4246.42,4273.515;Float;False;3617.067;1146.109;Rim Light;23;157;164;165;156;168;142;172;150;155;171;148;152;147;170;151;146;163;166;144;169;149;167;143;Rim Light;1,1,1,1;0;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;141;342.0722,-2535.595;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RangedFloatNode;143;-4002.27,4458.294;Float;False;Property;_RimAmount;RimAmount;26;0;Create;True;0;0;True;0;0.7;0.7;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;167;-4093.783,4677.084;Float;True;Constant;_DontHideRimUnderShadow;DontHideRimUnderShadow;20;0;Create;True;0;0;False;0;1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;90;-5498.219,-809.6757;Float;False;NdotV;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;134;320.2142,-2215.196;Float;True;133;computedSpecular;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;149;-4076.015,4938.533;Float;True;31;NdotL;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;144;-3817.804,5113.262;Float;False;Property;_RimPower;RimPower;25;0;Create;True;0;0;True;0;0.6547081;0.6547081;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;138;651.1277,-2478.866;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;169;-3654.976,4457.298;Float;False;rimAmount;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;166;-3768.122,4805.354;Float;True;Property;_HideRimUnderShadow;HideRimUnderShadow;27;0;Create;True;0;0;True;0;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;163;-3382.022,4583.278;Float;False;90;NdotV;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;170;-3190.997,5000.548;Float;False;169;rimAmount;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;151;-2933.597,5005.695;Float;False;Constant;_RimAmountAdjuster;RimAmountAdjuster;17;0;Create;True;0;0;False;0;0.01;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;137;899.6168,-2648.938;Float;True;Property;_UseSpecular;UseSpecular;17;0;Create;True;0;0;True;1;Header(Specular);0;0;0;True;;Toggle;2;Key0;Key1;Create;True;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;411;-1839.482,-323.2064;Float;False;shadowArea;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.OneMinusNode;146;-3097.397,4572.993;Float;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;436;-637.6216,-1760.471;Float;False;1728.671;1740.177;Shadow Mix;16;412;419;426;417;427;249;418;421;414;415;410;430;420;250;425;435;Shadow Mix;1,1,1,1;0;0 +Node;AmplifyShaderEditor.PowerNode;147;-3410.963,4913;Float;True;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;148;-2787.997,4639.093;Float;True;2;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;152;-2664.497,5065.494;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;171;-2586.136,4469.81;Float;False;169;rimAmount;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;422;1228.756,-2683.629;Float;False;litColor;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;155;-2657.997,4913.394;Float;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;412;-587.6216,-1075.267;Float;True;411;shadowArea;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SmoothstepOpNode;150;-2405.541,4849.111;Float;True;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;332;-4249.92,5639.075;Float;False;3131.241;1853.44;Vertex Offset;37;311;362;350;359;310;308;309;315;331;329;314;327;326;323;328;330;313;322;325;324;304;302;303;299;297;295;294;301;286;285;287;300;298;296;281;280;279;Vertex Offset;1,1,1,1;0;0 +Node;AmplifyShaderEditor.GetLocalVarNode;426;-523.2374,-1408.464;Float;False;422;litColor;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;172;-2379.181,4559.983;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.OneMinusNode;417;-282.1374,-907.5627;Float;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;419;-307.2184,-1147.121;Float;True;195;shadow;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;427;-163.255,-525.0162;Float;False;422;litColor;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.PosVertexDataNode;279;-3584.773,6111.28;Float;False;0;0;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;418;-17.89666,-1020.36;Float;True;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;421;-195.0661,-410.7025;Float;True;195;shadow;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;414;-318.0788,-1385.818;Float;True;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;249;42.56085,-1574.666;Float;True;195;shadow;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.StaticSwitch;168;-2116.708,4754.35;Float;False;Property;_SharpRimLight;SharpRimLight;28;0;Create;True;0;0;True;0;0;1;1;True;;Toggle;2;Key0;Key1;Create;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;142;-1992.58,5045.396;Float;False;Property;_RimColor;RimColor;24;0;Create;True;0;0;True;0;0,0.7342432,1,1;0,0.7342432,1,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;280;-3656.927,6318.275;Float;False;Property;_VertexOffsetFrequency;VertexOffsetFrequency;35;0;Create;True;0;0;True;0;2;2;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;425;51.66533,-1710.471;Float;False;422;litColor;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;415;221.7419,-1117.513;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;296;-2970.528,6241.574;Float;False;293;steppedTime;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;281;-3277.327,6185.674;Float;False;2;2;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;156;-1699.836,4854.964;Float;True;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RangedFloatNode;165;-1640.464,4699.232;Float;False;Constant;_DefaultRimLight;DefaultRimLight;19;0;Create;True;0;0;False;0;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;298;-2967.928,6470.375;Float;False;293;steppedTime;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.BlendOpsNode;430;221.9494,-278.2941;Float;True;HardMix;True;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;1;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;250;367.6071,-1629.438;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;1,1,1,1;False;1;COLOR;0 +Node;AmplifyShaderEditor.BlendOpsNode;410;226.3874,-590.3668;Float;True;Lighten;True;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;1;False;1;COLOR;0 +Node;AmplifyShaderEditor.StaticSwitch;164;-1408.503,4788.544;Float;False;Property;_UseRimLight;UseRimLight;23;0;Create;True;0;0;True;1;Header(Rim Light);0;0;0;True;;Toggle;2;Key0;Key1;Create;True;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;300;-2666.328,6214.274;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;2;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;301;-2658.528,6424.874;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;4;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;420;677.1989,-1358.637;Float;False;Property;_ShadowMixMode;ShadowMixMode;16;0;Create;True;0;0;False;0;0;0;0;True;;KeywordEnum;4;Multiply;Replace;Lighten;HardMix;Create;True;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.ComponentMaskNode;286;-2941.927,6344.274;Float;False;False;True;True;True;1;0;FLOAT3;0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.ComponentMaskNode;287;-2934.128,6575.674;Float;False;True;False;True;True;1;0;FLOAT3;0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;294;-3022.528,6016.673;Float;False;293;steppedTime;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ComponentMaskNode;285;-2939.327,6110.274;Float;False;True;True;False;True;1;0;FLOAT3;0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;435;848.0494,-1509.184;Float;False;shadowMix;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;299;-2502.528,6509.375;Float;False;2;2;0;FLOAT;0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;157;-1113.162,4847.988;Float;False;rimLight;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;297;-2520.728,6298.774;Float;False;2;2;0;FLOAT;0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;295;-2648.128,6066.074;Float;False;2;2;0;FLOAT;0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;303;-2352.263,6301.432;Half;False;vertexOffsetYUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;437;1278.146,-2407.613;Float;False;435;shadowMix;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;302;-2421.174,6069.311;Half;False;vertexOffsetXUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;304;-2326.875,6497.284;Half;False;vertexOffsetZUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;158;1274.657,-2266.357;Float;False;157;rimLight;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.TexturePropertyNode;322;-4199.92,6551.378;Float;True;Property;_VertexOffsetNoiseTexture;VertexOffsetNoiseTexture;34;0;Create;True;0;0;False;0;f49792b520b64f64c90e3945b118fe8f;f49792b520b64f64c90e3945b118fe8f;False;white;Auto;Texture2D;0;1;SAMPLER2D;0 +Node;AmplifyShaderEditor.GetLocalVarNode;324;-4183.92,7066.577;Float;False;303;vertexOffsetYUV;1;0;OBJECT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;313;-4194.428,6829.375;Float;False;302;vertexOffsetXUV;1;0;OBJECT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;325;-4183.92,7306.577;Float;False;304;vertexOffsetZUV;1;0;OBJECT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;159;1624.691,-2350.295;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SamplerNode;327;-3844.72,7229.777;Float;True;Property;_TextureSample2;Texture Sample 2;34;0;Create;True;0;0;False;0;None;None;True;0;False;white;Auto;False;Instance;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RegisterLocalVarNode;438;1920.378,-2351.102;Float;False;preToneMapping;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SamplerNode;323;-3831.92,6660.178;Float;True;Property;_TextureSample0;Texture Sample 0;34;0;Create;True;0;0;False;0;None;None;True;0;False;white;Auto;False;Instance;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;314;-3463.585,6942.798;Float;False;Property;_VertexOffsetX;VertexOffsetX;37;0;Create;True;0;0;True;0;0.5;0.5;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;330;-3456.605,7329.949;Float;False;Property;_VertexOffsetZ;VertexOffsetZ;39;0;Create;True;0;0;True;0;0.5;0.5;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;456;-624.9999,117.4403;Float;False;1569.145;562.9836;Tone Mapping;7;441;444;442;443;452;448;439;Tone Mapping;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RangedFloatNode;328;-3459.805,7144.349;Float;False;Property;_VertexOffsetY;VertexOffsetY;38;0;Create;True;0;0;True;0;0.5;0.5;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;326;-3847.92,6989.777;Float;True;Property;_TextureSample1;Texture Sample 1;34;0;Create;True;0;0;False;0;None;None;True;0;False;white;Auto;False;Instance;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;331;-3228.035,7276.808;Float;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;315;-3225.48,6894.424;Float;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;441;-574.9998,167.4404;Float;False;438;preToneMapping;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;329;-3231.234,7091.208;Float;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;309;-2899.191,6772.206;Float;False;Property;_VertexOffsetMagnitude;VertexOffsetMagnitude;36;0;Create;True;0;0;False;0;0.05;0.05;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.DynamicAppendNode;308;-2810.996,6918.278;Float;False;FLOAT4;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.TFHCGrayscale;442;-312.9865,295.9985;Float;False;0;1;0;FLOAT3;0,0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;443;-406.1073,400.7591;Float;False;Property;_Desaturation;Desaturation;47;0;Create;True;0;0;False;1;Header(ToneMapping);0;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;376;-4256.833,7640.004;Float;False;1278.943;484.4639;Outline;5;355;364;356;354;377;Outline;1,1,1,1;0;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;310;-2543.653,6865.912;Float;False;2;2;0;FLOAT;0;False;1;FLOAT4;0,0,0,0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.RangedFloatNode;448;-77.80162,544.4241;Float;False;Property;_Contrast;Contrast;48;0;Create;True;0;0;True;0;0;0;-1;0.99;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;359;-2546.756,6765.939;Float;False;Constant;_NoVertexOffset;NoVertexOffset;41;0;Create;True;0;0;False;0;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.LerpOp;444;-49.92125,251.7669;Float;True;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;187;-4270.963,3064.128;Float;False;2278.231;843.0205;Emission;6;182;180;178;179;176;177;Emission;1,1,1,1;0;0 +Node;AmplifyShaderEditor.ColorNode;177;-4093.892,3523.297;Float;False;Property;_EmissionColor;EmissionColor;30;1;[HDR];Create;True;0;0;True;0;2,2,2,1;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;377;-4188.056,7912.742;Float;False;Property;_OutlineAlpha;OutlineAlpha;42;0;Create;True;0;0;False;0;0;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;350;-2275.896,6843.649;Float;False;Property;_UseVertexOffset;UseVertexOffset;33;0;Create;True;0;0;True;1;Header(VertexOffset);0;0;1;True;;Toggle;2;Key0;Key1;Create;True;9;1;FLOAT4;0,0,0,0;False;0;FLOAT4;0,0,0,0;False;2;FLOAT4;0,0,0,0;False;3;FLOAT4;0,0,0,0;False;4;FLOAT4;0,0,0,0;False;5;FLOAT4;0,0,0,0;False;6;FLOAT4;0,0,0,0;False;7;FLOAT4;0,0,0,0;False;8;FLOAT4;0,0,0,0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.ColorNode;354;-4187.602,7731.861;Float;False;Property;_OutlineColor;OutlineColor;40;0;Create;True;0;0;True;1;Header(Outline);0.5451996,1,0,1;0.5451995,1,0,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;355;-4159.714,7997.744;Float;False;Property;_OutlineWidth;OutlineWidth;41;0;Create;True;0;0;True;0;0.1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.TFHCRemapNode;452;312.1986,427.4243;Float;True;5;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;1,1,1,0;False;3;COLOR;0,0,0,0;False;4;COLOR;1,1,1,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SamplerNode;176;-4114.888,3231.99;Float;True;Property;_EmissionTexture;EmissionTexture;29;0;Create;True;0;0;True;1;Header(Emission);None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;179;-3756.952,3615.031;Float;False;Property;_EmissionForce;EmissionForce;31;0;Create;True;0;0;False;0;0;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.ComponentMaskNode;362;-1924.862,6853.405;Float;False;True;True;True;False;1;0;FLOAT4;0,0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.OutlineNode;356;-3833.203,7847.26;Float;False;0;True;Masked;0;0;Front;3;0;FLOAT3;0,0,0;False;2;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;178;-3650.371,3452.438;Float;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;439;676.1446,423.965;Float;False;postToneMapping;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;174;2280.463,-1682.002;Float;False;1258.342;857.4734;Final;6;0;71;184;312;365;366;Final;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;311;-1647.014,6860.691;Float;False;vertexOffset;-1;True;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;180;-3390.29,3522.278;Float;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;364;-3253.303,7802.121;Float;False;outline;-1;True;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.GetLocalVarNode;440;2314.613,-2368.219;Float;False;439;postToneMapping;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;182;-2829.427,3517.93;Float;False;computedEmission;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;365;2569.255,-963.0233;Float;False;364;outline;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.GetLocalVarNode;312;2558.938,-1079.056;Float;False;311;vertexOffset;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;68;2654.833,-2380.81;Float;False;lightCol;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;71;2751.913,-1200.242;Float;False;68;lightCol;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;248;-2792.295,1910.664;Float;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;366;2805.255,-1027.023;Float;False;2;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.GetLocalVarNode;184;2705.276,-1381.75;Float;False;182;computedEmission;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.StandardSurfaceOutputNode;0;3132.494,-1422.768;Float;False;True;2;Float;ASEMaterialInspector;0;0;CustomLighting;MoreMountains/MMAdvancedToon;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;Back;0;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;0;Opaque;0.5;True;True;0;False;Opaque;;Geometry;ForwardOnly;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;True;0;0;False;-1;0;False;-1;0;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;False;False;Cylindrical;False;Relative;0;;-1;-1;-1;-1;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;15;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT3;0,0,0;False;4;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0 +WireConnection;83;0;82;0 +WireConnection;99;0;98;0 +WireConnection;101;0;100;0 +WireConnection;101;1;99;0 +WireConnection;104;0;101;0 +WireConnection;106;0;105;0 +WireConnection;106;1;111;0 +WireConnection;33;0;85;0 +WireConnection;80;0;33;0 +WireConnection;189;0;188;0 +WireConnection;110;0;109;0 +WireConnection;110;1;104;0 +WireConnection;108;0;106;0 +WireConnection;108;1;107;0 +WireConnection;81;0;80;0 +WireConnection;112;0;108;0 +WireConnection;112;1;110;0 +WireConnection;407;0;408;0 +WireConnection;407;1;189;0 +WireConnection;34;0;81;0 +WireConnection;34;1;32;0 +WireConnection;409;0;189;0 +WireConnection;409;1;407;0 +WireConnection;409;2;190;0 +WireConnection;113;0;112;0 +WireConnection;204;1;193;0 +WireConnection;204;2;198;0 +WireConnection;290;0;289;2 +WireConnection;290;1;288;0 +WireConnection;191;0;409;0 +WireConnection;191;1;190;0 +WireConnection;31;0;34;0 +WireConnection;194;0;204;0 +WireConnection;194;1;192;0 +WireConnection;194;2;191;0 +WireConnection;291;0;290;0 +WireConnection;115;0;114;0 +WireConnection;195;0;194;0 +WireConnection;40;0;39;0 +WireConnection;40;1;6;0 +WireConnection;116;0;115;0 +WireConnection;292;0;291;0 +WireConnection;292;1;288;0 +WireConnection;41;0;40;0 +WireConnection;120;0;118;0 +WireConnection;293;0;292;0 +WireConnection;122;0;120;0 +WireConnection;122;1;117;0 +WireConnection;269;0;224;0 +WireConnection;49;0;41;0 +WireConnection;49;1;94;0 +WireConnection;383;0;382;0 +WireConnection;383;1;379;0 +WireConnection;388;0;384;0 +WireConnection;388;1;387;0 +WireConnection;78;0;49;0 +WireConnection;78;1;93;0 +WireConnection;78;2;79;0 +WireConnection;271;0;269;0 +WireConnection;271;1;272;0 +WireConnection;121;0;123;0 +WireConnection;121;1;120;0 +WireConnection;121;2;122;0 +WireConnection;37;0;36;0 +WireConnection;37;1;38;0 +WireConnection;37;2;38;0 +WireConnection;76;0;37;0 +WireConnection;245;0;244;0 +WireConnection;245;1;121;0 +WireConnection;50;0;78;0 +WireConnection;274;0;271;0 +WireConnection;389;0;383;0 +WireConnection;389;1;388;0 +WireConnection;4;1;76;0 +WireConnection;10;0;1;0 +WireConnection;10;1;2;0 +WireConnection;277;0;275;0 +WireConnection;277;1;276;0 +WireConnection;277;2;50;0 +WireConnection;381;1;389;0 +WireConnection;7;1;12;0 +WireConnection;7;0;13;0 +WireConnection;247;0;245;0 +WireConnection;247;1;274;0 +WireConnection;124;0;247;0 +WireConnection;3;1;277;0 +WireConnection;3;0;4;0 +WireConnection;14;0;10;0 +WireConnection;14;1;7;0 +WireConnection;457;0;381;0 +WireConnection;457;1;380;0 +WireConnection;460;0;457;0 +WireConnection;460;1;14;0 +WireConnection;51;0;3;0 +WireConnection;11;0;460;0 +WireConnection;129;0;127;0 +WireConnection;87;0;86;0 +WireConnection;70;0;65;0 +WireConnection;70;1;69;1 +WireConnection;131;0;126;0 +WireConnection;131;1;119;0 +WireConnection;131;2;129;0 +WireConnection;89;0;87;0 +WireConnection;89;1;88;0 +WireConnection;133;0;131;0 +WireConnection;140;0;139;0 +WireConnection;73;0;70;0 +WireConnection;73;1;72;0 +WireConnection;141;0;73;0 +WireConnection;141;1;140;0 +WireConnection;90;0;89;0 +WireConnection;138;0;141;0 +WireConnection;138;1;134;0 +WireConnection;169;0;143;0 +WireConnection;166;1;167;0 +WireConnection;166;0;149;0 +WireConnection;137;1;73;0 +WireConnection;137;0;138;0 +WireConnection;411;0;191;0 +WireConnection;146;0;163;0 +WireConnection;147;0;166;0 +WireConnection;147;1;144;0 +WireConnection;148;0;146;0 +WireConnection;148;1;147;0 +WireConnection;152;0;151;0 +WireConnection;152;1;170;0 +WireConnection;422;0;137;0 +WireConnection;155;0;170;0 +WireConnection;155;1;151;0 +WireConnection;150;0;148;0 +WireConnection;150;1;155;0 +WireConnection;150;2;152;0 +WireConnection;172;0;171;0 +WireConnection;172;1;148;0 +WireConnection;417;0;412;0 +WireConnection;418;0;419;0 +WireConnection;418;1;417;0 +WireConnection;414;0;426;0 +WireConnection;414;1;412;0 +WireConnection;168;1;172;0 +WireConnection;168;0;150;0 +WireConnection;415;0;414;0 +WireConnection;415;1;418;0 +WireConnection;281;0;279;0 +WireConnection;281;1;280;0 +WireConnection;156;0;168;0 +WireConnection;156;1;142;0 +WireConnection;430;0;427;0 +WireConnection;430;1;421;0 +WireConnection;250;0;425;0 +WireConnection;250;1;249;0 +WireConnection;410;0;427;0 +WireConnection;410;1;421;0 +WireConnection;164;1;165;0 +WireConnection;164;0;156;0 +WireConnection;300;0;296;0 +WireConnection;301;0;298;0 +WireConnection;420;1;250;0 +WireConnection;420;0;415;0 +WireConnection;420;2;410;0 +WireConnection;420;3;430;0 +WireConnection;286;0;281;0 +WireConnection;287;0;281;0 +WireConnection;285;0;281;0 +WireConnection;435;0;420;0 +WireConnection;299;0;301;0 +WireConnection;299;1;287;0 +WireConnection;157;0;164;0 +WireConnection;297;0;300;0 +WireConnection;297;1;286;0 +WireConnection;295;0;294;0 +WireConnection;295;1;285;0 +WireConnection;303;0;297;0 +WireConnection;302;0;295;0 +WireConnection;304;0;299;0 +WireConnection;159;0;437;0 +WireConnection;159;1;158;0 +WireConnection;327;0;322;0 +WireConnection;327;1;325;0 +WireConnection;438;0;159;0 +WireConnection;323;0;322;0 +WireConnection;323;1;313;0 +WireConnection;326;0;322;0 +WireConnection;326;1;324;0 +WireConnection;331;0;327;1 +WireConnection;331;1;330;0 +WireConnection;315;0;323;1 +WireConnection;315;1;314;0 +WireConnection;329;0;326;1 +WireConnection;329;1;328;0 +WireConnection;308;0;315;0 +WireConnection;308;1;329;0 +WireConnection;308;2;331;0 +WireConnection;442;0;441;0 +WireConnection;310;0;309;0 +WireConnection;310;1;308;0 +WireConnection;444;0;441;0 +WireConnection;444;1;442;0 +WireConnection;444;2;443;0 +WireConnection;350;1;359;0 +WireConnection;350;0;310;0 +WireConnection;452;0;444;0 +WireConnection;452;1;448;0 +WireConnection;362;0;350;0 +WireConnection;356;0;354;0 +WireConnection;356;2;377;0 +WireConnection;356;1;355;0 +WireConnection;178;0;176;0 +WireConnection;178;1;177;0 +WireConnection;439;0;452;0 +WireConnection;311;0;362;0 +WireConnection;180;0;178;0 +WireConnection;180;1;179;0 +WireConnection;364;0;356;0 +WireConnection;182;0;180;0 +WireConnection;68;0;440;0 +WireConnection;248;0;274;0 +WireConnection;248;1;131;0 +WireConnection;366;0;312;0 +WireConnection;366;1;365;0 +WireConnection;0;2;184;0 +WireConnection;0;13;71;0 +WireConnection;0;11;366;0 +ASEEND*/ +//CHKSM=7C426F26649D3ADDAABEEB2A5DBD5EE12CEAFE05 \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMAdvancedToon.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMAdvancedToon.shader.meta new file mode 100644 index 0000000..efe0c41 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMAdvancedToon.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 82c42a0b06f4f684db1ee2c535fb985c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMBoilingLine.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMBoilingLine.shader new file mode 100644 index 0000000..94342df --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMBoilingLine.shader @@ -0,0 +1,129 @@ +Shader "MoreMountains/MMBoilingLine" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 + + [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0 + _Noise("Noise", 2D) = "white" {} + _Amount("Amount", Range( 0 , 1)) = 0 + _PanSpeed("PanSpeed", Vector) = (0.5,0.5,0,0) + _TimeQuantize("TimeQuantize", Float) = 5 + } + + SubShader + { + Tags + { + "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Blend SrcAlpha OneMinusSrcAlpha + ColorMask [_ColorMask] + + + Pass + { + Name "Default" + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.0 + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + + #pragma multi_compile __ UNITY_UI_ALPHACLIP + + #include "UnityShaderVariables.cginc" + + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + half2 texcoord : TEXCOORD0; + float4 worldPosition : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + uniform fixed4 _Color; + uniform fixed4 _TextureSampleAdd; + uniform float4 _ClipRect; + uniform sampler2D _MainTex; + uniform float4 _MainTex_ST; + uniform sampler2D _Noise; + uniform half _TimeQuantize; + uniform half2 _PanSpeed; + uniform sampler2D sampler042; + uniform float4 _Noise_ST; + uniform float _Amount; + + v2f vert(appdata_t IN) + { + v2f OUT; + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT); + OUT.worldPosition = IN.vertex; + + + OUT.worldPosition.xyz += float3(0, 0, 0); + OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); + + OUT.texcoord = IN.texcoord; + + OUT.color = IN.color * _Color; + return OUT; + } + + fixed4 frag(v2f IN) : SV_Target + { + float2 uv_MainTex = IN.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; + float2 panner23 = ((floor((_Time.y * _TimeQuantize)) / _TimeQuantize) * _PanSpeed + (uv_MainTex * + _Noise_ST.xy + _Noise_ST.zw)); + float2 temp_output_20_0 = (tex2D(_Noise, panner23)).rg; + + half4 color = ((tex2D(_MainTex, (uv_MainTex + (temp_output_20_0 * _Amount))) * _Color) * IN.color); + + //color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); + + #ifdef UNITY_UI_ALPHACLIP + clip (color.a - 0.001); + #endif + + return color; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMBoilingLine.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMBoilingLine.shader.meta new file mode 100644 index 0000000..9a24bca --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMBoilingLine.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f54b8ae4d72e16445b407e4ad5ad4264 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMControlledEmission.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMControlledEmission.shader new file mode 100644 index 0000000..79e2991 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMControlledEmission.shader @@ -0,0 +1,170 @@ +Shader "MoreMountains/MMControlledEmission" +{ + Properties + { + _TextureSample0("Texture Sample 0", 2D) = "white" {} + _DiffuseColor("DiffuseColor", Color) = (1,1,1,1) + _Opacity("Opacity", Range( 0 , 1)) = 1 + [HDR]_EmissionColor("EmissionColor", Color) = (1,1,1,1) + _EmissionForce("EmissionForce", Float) = 0 + [Toggle(_USEEMISSIONFRESNEL_ON)] _UseEmissionFresnel("UseEmissionFresnel", Float) = 0 + _EmissionFresnelBias("EmissionFresnelBias", Float) = 1 + _EmissionFresnelScale("EmissionFresnelScale", Float) = 1 + _EmissionFresnelPower("EmissionFresnelPower", Float) = 1 + [Toggle(_USEOPACITYFRESNEL_ON)] _UseOpacityFresnel("UseOpacityFresnel", Float) = 0 + [Toggle(_INVERTOPACITYFRESNEL_ON)] _InvertOpacityFresnel("InvertOpacityFresnel", Float) = 0 + _OpacityFresnelBias("OpacityFresnelBias", Float) = 1 + _OpacityFresnelScale("OpacityFresnelScale", Float) = 1 + _OpacityFresnelPower("OpacityFresnelPower", Float) = 1 + [HideInInspector] _texcoord( "", 2D ) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags + { + "RenderType" = "Transparent" "Queue" = "Transparent+0" "IgnoreProjector" = "True" "IsEmissive" = "true" + } + Cull Back + CGINCLUDE + #include "UnityPBSLighting.cginc" + #include "Lighting.cginc" + #pragma target 3.0 + #pragma shader_feature_local _USEEMISSIONFRESNEL_ON + #pragma shader_feature_local _USEOPACITYFRESNEL_ON + #pragma shader_feature_local _INVERTOPACITYFRESNEL_ON + struct Input + { + float2 uv_texcoord; + float3 worldPos; + float3 worldNormal; + }; + + uniform sampler2D _TextureSample0; + uniform float4 _TextureSample0_ST; + uniform float4 _DiffuseColor; + uniform float _EmissionForce; + uniform float4 _EmissionColor; + uniform float _EmissionFresnelBias; + uniform float _EmissionFresnelScale; + uniform float _EmissionFresnelPower; + uniform float _OpacityFresnelBias; + uniform float _OpacityFresnelScale; + uniform float _OpacityFresnelPower; + uniform float _Opacity; + + void surf(Input i, inout SurfaceOutputStandard o) + { + float2 uv_TextureSample0 = i.uv_texcoord * _TextureSample0_ST.xy + _TextureSample0_ST.zw; + o.Albedo = (tex2D(_TextureSample0, uv_TextureSample0) * _DiffuseColor).rgb; + float3 ase_worldPos = i.worldPos; + float3 ase_worldViewDir = normalize(UnityWorldSpaceViewDir(ase_worldPos)); + float3 ase_worldNormal = i.worldNormal; + float fresnelNdotV8 = dot(ase_worldNormal, ase_worldViewDir); + float fresnelNode8 = (_EmissionFresnelBias + _EmissionFresnelScale * pow( + 1.0 - fresnelNdotV8, _EmissionFresnelPower)); + #ifdef _USEEMISSIONFRESNEL_ON + float staticSwitch22 = fresnelNode8; + #else + float staticSwitch22 = 1.0; + #endif + o.Emission = (_EmissionForce * _EmissionColor * staticSwitch22).rgb; + float fresnelNdotV26 = dot(ase_worldNormal, ase_worldViewDir); + float fresnelNode26 = (_OpacityFresnelBias + _OpacityFresnelScale * pow( + 1.0 - fresnelNdotV26, _OpacityFresnelPower)); + #ifdef _INVERTOPACITYFRESNEL_ON + float staticSwitch31 = (1.0 - fresnelNode26); + #else + float staticSwitch31 = fresnelNode26; + #endif + #ifdef _USEOPACITYFRESNEL_ON + float staticSwitch27 = staticSwitch31; + #else + float staticSwitch27 = 1.0; + #endif + o.Alpha = (staticSwitch27 * _Opacity * _DiffuseColor.a); + } + ENDCG + CGPROGRAM + #pragma surface surf Standard alpha:fade keepalpha fullforwardshadows + ENDCG + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + ZWrite On + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.0 + #pragma multi_compile_shadowcaster + #pragma multi_compile UNITY_PASS_SHADOWCASTER + #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 + #include "HLSLSupport.cginc" + #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN ) + #define CAN_SKIP_VPOS + #endif + #include "UnityCG.cginc" + #include "Lighting.cginc" + #include "UnityPBSLighting.cginc" + sampler3D _DitherMaskLOD; + + struct v2f + { + V2F_SHADOW_CASTER; + float2 customPack1 : TEXCOORD1; + float3 worldPos : TEXCOORD2; + float3 worldNormal : TEXCOORD3; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + v2f vert(appdata_full v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + Input customInputData; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + half3 worldNormal = UnityObjectToWorldNormal(v.normal); + o.worldNormal = worldNormal; + o.customPack1.xy = customInputData.uv_texcoord; + o.customPack1.xy = v.texcoord; + o.worldPos = worldPos; + TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) + return o; + } + + half4 frag(v2f IN + #if !defined( CAN_SKIP_VPOS ) + , UNITY_VPOS_TYPE vpos : VPOS + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + Input surfIN; + UNITY_INITIALIZE_OUTPUT(Input, surfIN); + surfIN.uv_texcoord = IN.customPack1.xy; + float3 worldPos = IN.worldPos; + half3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); + surfIN.worldPos = worldPos; + surfIN.worldNormal = IN.worldNormal; + SurfaceOutputStandard o; + UNITY_INITIALIZE_OUTPUT(SurfaceOutputStandard, o) + surf(surfIN, o); + #if defined( CAN_SKIP_VPOS ) + float2 vpos = IN.pos; + #endif + half alphaRef = tex3D(_DitherMaskLOD, float3(vpos.xy * 0.25, o.Alpha * 0.9375)).a; + clip(alphaRef - 0.01); + SHADOW_CASTER_FRAGMENT(IN) + } + ENDCG + } + } + Fallback "Diffuse" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMControlledEmission.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMControlledEmission.shader.meta new file mode 100644 index 0000000..19ec32f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMControlledEmission.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c15834894887d4c4b935cfe9df6f1c89 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMMatcap.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMMatcap.shader new file mode 100644 index 0000000..32fc57a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMMatcap.shader @@ -0,0 +1,111 @@ +Shader "MoreMountains/MMMatcap" +{ + Properties + { + _MatcapTexture("MatcapTexture", 2D) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry+0" "IsEmissive" = "true" + } + Cull Back + ZTest LEqual + CGINCLUDE + #include "UnityShaderVariables.cginc" + #include "UnityPBSLighting.cginc" + #include "Lighting.cginc" + #pragma target 3.0 + struct Input + { + half3 worldNormal; + }; + + uniform sampler2D _MatcapTexture; + + void surf(Input i, inout SurfaceOutputStandard o) + { + half3 ase_worldNormal = i.worldNormal; + o.Emission = tex2D(_MatcapTexture, + ((mul(half4(ase_worldNormal, 0.0), UNITY_MATRIX_V).xyz * 0.5) + 0.5).xy).rgb; + o.Alpha = 1; + } + ENDCG + CGPROGRAM + #pragma surface surf Standard keepalpha fullforwardshadows + ENDCG + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + ZWrite On + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.0 + #pragma multi_compile_shadowcaster + #pragma multi_compile UNITY_PASS_SHADOWCASTER + #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 + #include "HLSLSupport.cginc" + #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN ) + #define CAN_SKIP_VPOS + #endif + #include "UnityCG.cginc" + #include "Lighting.cginc" + #include "UnityPBSLighting.cginc" + + struct v2f + { + V2F_SHADOW_CASTER; + float3 worldPos : TEXCOORD1; + float3 worldNormal : TEXCOORD2; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert(appdata_full v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + half3 worldNormal = UnityObjectToWorldNormal(v.normal); + o.worldNormal = worldNormal; + o.worldPos = worldPos; + TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) + return o; + } + + half4 frag(v2f IN + #if !defined( CAN_SKIP_VPOS ) + , UNITY_VPOS_TYPE vpos : VPOS + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + Input surfIN; + UNITY_INITIALIZE_OUTPUT(Input, surfIN); + float3 worldPos = IN.worldPos; + half3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); + surfIN.worldNormal = IN.worldNormal; + SurfaceOutputStandard o; + UNITY_INITIALIZE_OUTPUT(SurfaceOutputStandard, o) + surf(surfIN, o); + #if defined( CAN_SKIP_VPOS ) + float2 vpos = IN.pos; + #endif + SHADOW_CASTER_FRAGMENT(IN) + } + ENDCG + } + } + Fallback "Diffuse" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMMatcap.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMMatcap.shader.meta new file mode 100644 index 0000000..31e5a9b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMMatcap.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e883a990b855be4eb85a58f732c8ea7 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMRipple.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMRipple.shader new file mode 100644 index 0000000..4817d18 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMRipple.shader @@ -0,0 +1,91 @@ +Shader "MoreMountains/MMRipple" +{ + Properties + { + _RippleAlpha("Ripple Alpha", Float) = 1 + _RippleIntensity("Ripple Intensity", Float) = 1 + _Hue("Hue", Color) = (1, 1, 1, 1) + _NormalMap("Normal Map", 2D) = "white" {} + _Density("Soft Particles Factor", Range(0, 3)) = 1 + } + + SubShader + { + Tags + { + "Queue" = "Transparent+1" "RenderType" = "Transparent" + } + Zwrite Off + Blend SrcAlpha OneMinusSrcAlpha + GrabPass + { + "_BackgroundTexture" + } + Pass + { + CGPROGRAM + #include "UnityCG.cginc" + + #pragma multi_compile_particles + #pragma fragment frag + #pragma vertex vert + + float _RippleAlpha; + float _RippleIntensity; + fixed4 _Hue; + sampler2D _BackgroundTexture; + sampler2D _NormalMap; + sampler2D_float _CameraDepthTexture; + float _Density; + + struct v2f + { + float4 grabScreenPosition : TEXCOORD0; + float4 position : SV_POSITION; + fixed4 color : COLOR; + float2 normalMap : TEXCOORD1; + + #ifdef SOFTPARTICLES_ON + float4 computedScreenPosition : TEXCOORD2; + #endif + }; + + v2f vert(appdata_full v) + { + v2f o; + o.position = UnityObjectToClipPos(v.vertex); + + #ifdef SOFTPARTICLES_ON + o.computedScreenPosition = ComputeScreenPos(o.position); + COMPUTE_EYEDEPTH(o.computedScreenPosition.z); + #endif + + o.grabScreenPosition = ComputeGrabScreenPos(o.position); + + o.color = v.color; + o.normalMap = v.texcoord; + + return o; + } + + half4 frag(v2f i) : SV_Target + { + #ifdef SOFTPARTICLES_ON + float sceneZ = LinearEyeDepth(SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.computedScreenPosition))); + float partZ = i.computedScreenPosition.z; + float fade = saturate(_Density * (sceneZ - partZ)); + i.color.a *= fade; + #endif + + half3 ripple = UnpackNormal(tex2D(_NormalMap, i.normalMap.xy)); + i.grabScreenPosition.xy += ripple.xy / ripple.z * _RippleIntensity * i.color.a; + half4 backgroundColor = tex2Dproj(_BackgroundTexture, i.grabScreenPosition); + _Hue.a = _RippleAlpha; + return backgroundColor * _Hue; + } + ENDCG + } + + } + FallBack "Particle/AlphaBlended" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMRipple.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMRipple.shader.meta new file mode 100644 index 0000000..91d51b8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMRipple.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 44f8736e1f857f24681cbc354a147c3e +timeCreated: 1467203582 +licenseType: Store +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMSkybox.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMSkybox.shader new file mode 100644 index 0000000..a6ba9db --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMSkybox.shader @@ -0,0 +1,129 @@ +Shader "MoreMountains/MMSkybox" +{ + Properties + { + _TopColor("Top Color", Color) = (1,1,1,0) + _BottomColor("Bottom Color", Color) = (1,0.6,0,0) + _Saturation("Saturation", Float) = 1 + _Intensity("Intensity", Float) = 1 + [Toggle(_SCREENSPACE)] _ScreenSpace("Screen Space", Float) = 0 + } + + SubShader + { + Tags + { + "RenderType"="Opaque" + } + LOD 100 + + CGINCLUDE + #pragma target 3.0 + ENDCG + Blend Off + Cull Back + ColorMask RGBA + ZWrite On + ZTest LEqual + Offset 0 , 0 + + + + Pass + { + Name "Unlit" + Tags + { + "LightMode"="ForwardBase" + } + CGPROGRAM + #ifndef UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX + #define UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input) + #endif + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_instancing + #include "UnityCG.cginc" + #pragma shader_feature_local _SCREENSPACE + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 vertex : SV_POSITION; + #ifdef ASE_NEEDS_FRAG_WORLD_POSITION + float3 worldPos : TEXCOORD0; + #endif + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + float4 ase_texcoord1 : TEXCOORD1; + float4 ase_texcoord2 : TEXCOORD2; + }; + + uniform float4 _TopColor; + uniform float4 _BottomColor; + uniform float _Saturation; + uniform float _Intensity; + + + v2f vert(appdata v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + + float4 ase_clipPos = UnityObjectToClipPos(v.vertex); + float4 screenPos = ComputeScreenPos(ase_clipPos); + o.ase_texcoord2 = screenPos; + o.ase_texcoord1 = v.vertex; + float3 vertexValue = float3(0, 0, 0); + #if ASE_ABSOLUTE_VERTEX_POS + vertexValue = v.vertex.xyz; + #endif + vertexValue = vertexValue; + #if ASE_ABSOLUTE_VERTEX_POS + v.vertex.xyz = vertexValue; + #else + v.vertex.xyz += vertexValue; + #endif + o.vertex = UnityObjectToClipPos(v.vertex); + + #ifdef ASE_NEEDS_FRAG_WORLD_POSITION + o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + #endif + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(i); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + fixed4 finalColor; + #ifdef ASE_NEEDS_FRAG_WORLD_POSITION + float3 WorldPosition = i.worldPos; + #endif + float4 screenPos = i.ase_texcoord2; + float4 ase_screenPosNorm = screenPos / screenPos.w; + ase_screenPosNorm.z = (UNITY_NEAR_CLIP_VALUE >= 0) + ? ase_screenPosNorm.z + : ase_screenPosNorm.z * 0.5 + 0.5; + #ifdef _SCREENSPACE + float staticSwitch13 = ase_screenPosNorm.y; + #else + float staticSwitch13 = i.ase_texcoord1.xyz.y; + #endif + float4 lerpResult3 = lerp(_BottomColor, _TopColor, + pow(saturate((staticSwitch13 * _Saturation)), _Intensity)); + finalColor = lerpResult3; + return finalColor; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMSkybox.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMSkybox.shader.meta new file mode 100644 index 0000000..4699ad9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMSkybox.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 21b28f3ee4b3c13408ed85c229008f40 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMStandardEmission.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMStandardEmission.shader new file mode 100644 index 0000000..bac0713 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMStandardEmission.shader @@ -0,0 +1,115 @@ +Shader "MoreMountains/MMStandardEmission" +{ + Properties + { + _Color("Color", Color) = (1,1,1,1) + _MainTex("MainTex", 2D) = "white" {} + _MetallicGlossMap("MetallicGlossMap", 2D) = "gray" {} + _Metallic("Metallic", Range( 0 , 1)) = 1 + _Glossiness("Glossiness", Range( 0 , 1)) = 0.5 + _BumpMap("BumpMap", 2D) = "bump" {} + _BumpScale("BumpScale", Float) = 1 + _OcclusionMap("OcclusionMap", 2D) = "white" {} + _OcclussionStrength("OcclussionStrength", Range( 0 , 1)) = 1 + [Enum(Off,0,On,1)][Header(Depth Blend)]_ZWrite("ZWrite", Range( 0 , 1)) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)]_ZTest("ZTest", Range( 0 , 255)) = 167.5171 + [Enum(UnityEngine.Rendering.BlendMode)][Header(Blend Modes)]_BlendSrc("BlendSrc", Range( 0 , 255)) = 1 + [Enum(UnityEngine.Rendering.BlendMode)]_BlendDst("BlendDst", Range( 0 , 255)) = 10 + [Enum(UnityEngine.Rendering.CullMode)][Header(Cull)]_CullMode("CullMode", Range( 0 , 255)) = 0 + [Enum(UnityEngine.Rendering.ColorWriteMask)]_ColorMask("ColorMask", Range( 0 , 255)) = 255 + [IntRange][Header(Stencil)]_Stencil("Stencil", Range( 0 , 255)) = 0 + [IntRange]_StencilReadMask("StencilReadMask", Range( 0 , 255)) = 15 + [IntRange]_StencilWriteMask("StencilWriteMask", Range( 0 , 255)) = 15 + [Enum(UnityEngine.Rendering.CompareFunction)]_StencilComp("StencilComp", Range( 0 , 255)) = 0 + [Enum(UnityEngine.Rendering.StencilOp)]_StencilOpPassFront("StencilOpPassFront", Range( 0 , 255)) = 0 + [Enum(UnityEngine.Rendering.StencilOp)]_StencilOpFailFront("StencilOpFailFront", Range( 0 , 255)) = 0 + [Enum(UnityEngine.Rendering.StencilOp)]_StencilOpZFailFront("StencilOpZFailFront", Range( 0 , 255)) = 0 + _EmissionMap("EmissionMap", 2D) = "white" {} + _EmissionColor("EmissionColor", Color) = (0,0,0,0) + _EmissionIntensity("EmissionIntensity", Float) = 1 + [HideInInspector] _texcoord( "", 2D ) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry+0" "IsEmissive" = "true" + } + Cull [_CullMode] + ZWrite [_ZWrite] + ZTest [_ZTest] + Stencil + { + Ref [_Stencil] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + Comp [_StencilComp] + Pass [_StencilOpPassFront] + Fail [_StencilOpFailFront] + ZFail [_StencilOpZFailFront] + } + CGPROGRAM + #include "UnityStandardUtils.cginc" + #pragma target 3.0 + #pragma exclude_renderers vulkan xbox360 xboxone ps4 psp2 n3ds wiiu + #pragma surface surf Standard keepalpha addshadow fullforwardshadows + struct Input + { + float2 uv_texcoord; + }; + + uniform half _ZTest; + uniform half _StencilOpPassFront; + uniform half _StencilComp; + uniform float _StencilWriteMask; + uniform float _StencilReadMask; + uniform float _Stencil; + uniform half _BlendSrc; + uniform half _ZWrite; + uniform half _CullMode; + uniform half _BlendDst; + uniform half _StencilOpFailFront; + uniform half _ColorMask; + uniform half _StencilOpZFailFront; + uniform sampler2D _BumpMap; + uniform float4 _BumpMap_ST; + uniform float _BumpScale; + uniform sampler2D _MainTex; + uniform float4 _MainTex_ST; + uniform half4 _Color; + uniform sampler2D _EmissionMap; + uniform float4 _EmissionMap_ST; + uniform float4 _EmissionColor; + uniform float _EmissionIntensity; + uniform sampler2D _MetallicGlossMap; + uniform float4 _MetallicGlossMap_ST; + uniform half _Metallic; + uniform half _Glossiness; + uniform sampler2D _OcclusionMap; + uniform float4 _OcclusionMap_ST; + uniform half _OcclussionStrength; + + void surf(Input i, inout SurfaceOutputStandard o) + { + float2 uv_BumpMap = i.uv_texcoord * _BumpMap_ST.xy + _BumpMap_ST.zw; + o.Normal = UnpackScaleNormal(tex2D(_BumpMap, uv_BumpMap), _BumpScale); + float2 uv_MainTex = i.uv_texcoord * _MainTex_ST.xy + _MainTex_ST.zw; + o.Albedo = (tex2D(_MainTex, uv_MainTex) * _Color).rgb; + float2 uv_EmissionMap = i.uv_texcoord * _EmissionMap_ST.xy + _EmissionMap_ST.zw; + half3 Emission49 = ((tex2D(_EmissionMap, uv_EmissionMap)).rgb * (_EmissionColor).rgb * _EmissionIntensity); + o.Emission = Emission49; + float2 uv_MetallicGlossMap = i.uv_texcoord * _MetallicGlossMap_ST.xy + _MetallicGlossMap_ST.zw; + float4 tex2DNode20 = tex2D(_MetallicGlossMap, uv_MetallicGlossMap); + o.Metallic = (tex2DNode20.r * _Metallic); + o.Smoothness = (tex2DNode20.a * _Glossiness); + float2 uv_OcclusionMap = i.uv_texcoord * _OcclusionMap_ST.xy + _OcclusionMap_ST.zw; + float lerpResult13 = lerp(tex2D(_OcclusionMap, uv_OcclusionMap).g, 1.0, _OcclussionStrength); + o.Occlusion = lerpResult13; + o.Alpha = 1; + } + ENDCG + } + Fallback "Diffuse" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMStandardEmission.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMStandardEmission.shader.meta new file mode 100644 index 0000000..3530402 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMStandardEmission.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 43ed279757cf2ba4c9c277fff3220421 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMStochastic.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMStochastic.shader new file mode 100644 index 0000000..a1ddaa8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMStochastic.shader @@ -0,0 +1,100 @@ +Shader "MoreMountains/MMStochastic" +{ + Properties + { + _MainTex("Albedo (RGB)", 2D) = "white" {} + _Color("Color", Color) = (1,1,1,1) + _BumpMap("BumpMap", 2D) = "bump" {} + _BumpScale("BumpScale", Float) = 1 + _Smoothness("Smoothness", 2D) = "white" {} + [Toggle]_Stochastic("Stochastic", Float) = 0 + } + SubShader + { + Tags + { + "RenderType" = "Opaque" + } + LOD 200 + + CGPROGRAM + #pragma exclude_renderers gles + #pragma surface surf Standard fullforwardshadows + #pragma target 3.0 + + fixed4 _Color; + + sampler2D _MainTex; + sampler2D _BumpMap; + sampler2D _Smoothness; + + uniform float _BumpScale; + + uniform float _Stochastic; + + struct Input + { + float2 uv_MainTex; + }; + + UNITY_INSTANCING_BUFFER_START(Props) + UNITY_INSTANCING_BUFFER_END(Props) + + float2 hash2D2D(float2 s) + { + return frac( + sin(fmod(float2(dot(s, float2(127.1, 311.7)), dot(s, float2(269.5, 183.3))), 3.14159)) * 43758.5453); + } + + float4 tex2DStochastic(sampler2D tex, float2 UV) + { + float4x3 BW_vx; + float2 skewUV = mul(float2x2(1.0, 0.0, -0.57735027, 1.15470054), UV * 3.464); + float2 vxID = float2(floor(skewUV)); + float3 barycentric = float3(frac(skewUV), 0); + barycentric.z = 1.0 - barycentric.x - barycentric.y; + + BW_vx = ((barycentric.z > 0) + ? float4x3(float3(vxID, 0), float3(vxID + float2(0, 1), 0), float3(vxID + float2(1, 0), 0), + barycentric.zyx) + : float4x3(float3(vxID + float2(1, 1), 0), float3(vxID + float2(1, 0), 0), + float3(vxID + float2(0, 1), 0), + float3(-barycentric.z, 1.0 - barycentric.y, 1.0 - barycentric.x))); + + float2 dx = ddx(UV); + float2 dy = ddy(UV); + + return mul(tex2D(tex, UV + hash2D2D(BW_vx[0].xy), dx, dy), BW_vx[3].x) + + mul(tex2D(tex, UV + hash2D2D(BW_vx[1].xy), dx, dy), BW_vx[3].y) + + mul(tex2D(tex, UV + hash2D2D(BW_vx[2].xy), dx, dy), BW_vx[3].z); + } + + void surf(Input IN, inout SurfaceOutputStandard o) + { + float4 bumpSample; + float4 albedoSample = 1; + float4 smoothnessSample; + + if (_Stochastic) + { + albedoSample = tex2DStochastic(_MainTex, IN.uv_MainTex); + bumpSample = tex2DStochastic(_BumpMap, IN.uv_MainTex); + smoothnessSample = tex2DStochastic(_Smoothness, IN.uv_MainTex); + } + else + { + albedoSample = tex2D(_MainTex, IN.uv_MainTex); + bumpSample = tex2D(_BumpMap, IN.uv_MainTex); + smoothnessSample = tex2D(_Smoothness, IN.uv_MainTex); + } + + o.Alpha = albedoSample.a; + + o.Albedo = albedoSample.rgb; + o.Normal = UnpackScaleNormal(bumpSample, _BumpScale); + o.Smoothness = smoothnessSample.r; + } + ENDCG + } + FallBack "Diffuse" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMStochastic.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMStochastic.shader.meta new file mode 100644 index 0000000..433cf28 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMStochastic.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 94ce8b5eaff70434a81eaa413e7b6bbb +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMToon.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMToon.shader new file mode 100644 index 0000000..1bc0cf8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMToon.shader @@ -0,0 +1,230 @@ +Shader "MoreMountains/MMToon" +{ + Properties + { + _ToonRamp("Toon Ramp", 2D) = "white" {} + [HDR]_RimColor("Rim Color", Color) = (0,1,0.8758622,0) + _RimPower("Rim Power", Range( 0 , 10)) = 0.5 + _RimOffset("Rim Offset", Float) = 0.24 + _Diffuse("Diffuse", 2D) = "white" {} + _DiffuseColor("DiffuseColor", Color) = (1,1,1,1) + [Toggle(_EMISSION_ON)] _Emission("Emission", Float) = 0 + _EmissionTexture("EmissionTexture", 2D) = "white" {} + [HDR]_EmissionColor("EmissionColor", Color) = (1,1,1,1) + _EmissionForce("EmissionForce", Float) = 0 + [HideInInspector] _texcoord( "", 2D ) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry+0" "IsEmissive" = "true" + } + Cull Back + CGINCLUDE + #include "UnityPBSLighting.cginc" + #include "UnityCG.cginc" + #include "UnityShaderVariables.cginc" + #include "Lighting.cginc" + #pragma target 3.0 + #pragma shader_feature _EMISSION_ON + #ifdef UNITY_PASS_SHADOWCASTER + #undef INTERNAL_DATA + #undef WorldReflectionVector + #undef WorldNormalVector + #define INTERNAL_DATA half3 internalSurfaceTtoW0; half3 internalSurfaceTtoW1; half3 internalSurfaceTtoW2; + #define WorldReflectionVector(data,normal) reflect (data.worldRefl, half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal))) + #define WorldNormalVector(data,normal) half3(dot(data.internalSurfaceTtoW0,normal), dot(data.internalSurfaceTtoW1,normal), dot(data.internalSurfaceTtoW2,normal)) + #endif + struct Input + { + float2 uv_texcoord; + float3 worldNormal; + INTERNAL_DATA + float3 worldPos; + }; + + struct SurfaceOutputCustomLightingCustom + { + half3 Albedo; + half3 Normal; + half3 Emission; + half Metallic; + half Smoothness; + half Occlusion; + half Alpha; + Input SurfInput; + UnityGIInput GIData; + }; + + uniform sampler2D _EmissionTexture; + uniform float4 _EmissionTexture_ST; + uniform float4 _EmissionColor; + uniform float _EmissionForce; + uniform float4 _DiffuseColor; + uniform sampler2D _Diffuse; + uniform float4 _Diffuse_ST; + uniform sampler2D _ToonRamp; + uniform float _RimOffset; + uniform float _RimPower; + uniform float4 _RimColor; + + inline half4 LightingStandardCustomLighting(inout SurfaceOutputCustomLightingCustom s, half3 viewDir, + UnityGI gi) + { + UnityGIInput data = s.GIData; + Input i = s.SurfInput; + half4 c = 0; + #ifdef UNITY_PASS_FORWARDBASE + float ase_lightAtten = data.atten; + if( _LightColor0.a == 0) + ase_lightAtten = 0; + #else + float3 ase_lightAttenRGB = gi.light.color / ((_LightColor0.rgb) + 0.000001); + float ase_lightAtten = max(max(ase_lightAttenRGB.r, ase_lightAttenRGB.g), ase_lightAttenRGB.b); + #endif + #if defined(HANDLE_SHADOWS_BLENDING_IN_GI) + half bakedAtten = UnitySampleBakedOcclusion(data.lightmapUV.xy, data.worldPos); + float zDist = dot(_WorldSpaceCameraPos - data.worldPos, UNITY_MATRIX_V[2].xyz); + float fadeDist = UnityComputeShadowFadeDistance(data.worldPos, zDist); + ase_lightAtten = UnityMixRealtimeAndBakedShadows(data.atten, bakedAtten, UnityComputeShadowFade(fadeDist)); + #endif + float2 uv_Diffuse = i.uv_texcoord * _Diffuse_ST.xy + _Diffuse_ST.zw; + float3 ase_worldNormal = WorldNormalVector(i, float3( 0, 0, 1 )); + float3 ase_worldPos = i.worldPos; + #if defined(LIGHTMAP_ON) && UNITY_VERSION < 560 //aseld + float3 ase_worldlightDir = 0; + #else //aseld + float3 ase_worldlightDir = normalize(UnityWorldSpaceLightDir(ase_worldPos)); + #endif //aseld + float dotResult3 = dot(ase_worldNormal, ase_worldlightDir); + float2 temp_cast_1 = (saturate((dotResult3 * 0.5 + 0.5))).xx; + #if defined(LIGHTMAP_ON) && ( UNITY_VERSION < 560 || ( defined(LIGHTMAP_SHADOW_MIXING) && !defined(SHADOWS_SHADOWMASK) && defined(SHADOWS_SCREEN) ) )//aselc + + + float4 ase_lightColor = 0; + #else //aselc + float4 ase_lightColor = _LightColor0; + #endif //aselc + UnityGI gi11 = gi; + float3 diffNorm11 = ase_worldNormal; + gi11 = UnityGI_Base(data, 1, diffNorm11); + float3 indirectDiffuse11 = gi11.indirect.diffuse + diffNorm11 * 0.0001; + float3 ase_worldViewDir = normalize(UnityWorldSpaceViewDir(ase_worldPos)); + float dotResult38 = dot(ase_worldNormal, ase_worldViewDir); + c.rgb = ((((_DiffuseColor * tex2D(_Diffuse, uv_Diffuse)) * tex2D(_ToonRamp, temp_cast_1)) * (ase_lightColor + * float4((indirectDiffuse11 + ase_lightAtten), 0.0))) + (saturate( + ((ase_lightAtten * dotResult3) * pow((1.0 - saturate((dotResult38 + _RimOffset))), _RimPower))) * ( + _RimColor * ase_lightColor))).rgb; + c.a = 1; + return c; + } + + inline void LightingStandardCustomLighting_GI(inout SurfaceOutputCustomLightingCustom s, UnityGIInput data, + inout UnityGI gi) + { + s.GIData = data; + } + + void surf(Input i, inout SurfaceOutputCustomLightingCustom o) + { + o.SurfInput = i; + o.Normal = float3(0, 0, 1); + float2 uv_EmissionTexture = i.uv_texcoord * _EmissionTexture_ST.xy + _EmissionTexture_ST.zw; + #ifdef _EMISSION_ON + float4 staticSwitch58 = ((tex2D(_EmissionTexture, uv_EmissionTexture) * _EmissionColor) * _EmissionForce); + #else + float4 staticSwitch58 = float4( 0,0,0,0 ); + #endif + o.Emission = staticSwitch58.rgb; + } + ENDCG + CGPROGRAM + #pragma surface surf StandardCustomLighting keepalpha fullforwardshadows exclude_path:deferred + ENDCG + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + ZWrite On + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.0 + #pragma multi_compile_shadowcaster + #pragma multi_compile UNITY_PASS_SHADOWCASTER + #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 + #include "HLSLSupport.cginc" + #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN ) + #define CAN_SKIP_VPOS + #endif + #include "UnityCG.cginc" + #include "Lighting.cginc" + #include "UnityPBSLighting.cginc" + + struct v2f + { + V2F_SHADOW_CASTER; + float2 customPack1 : TEXCOORD1; + float4 tSpace0 : TEXCOORD2; + float4 tSpace1 : TEXCOORD3; + float4 tSpace2 : TEXCOORD4; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + v2f vert(appdata_full v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + Input customInputData; + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + half3 worldNormal = UnityObjectToWorldNormal(v.normal); + half3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); + half tangentSign = v.tangent.w * unity_WorldTransformParams.w; + half3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign; + o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x); + o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y); + o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z); + o.customPack1.xy = customInputData.uv_texcoord; + o.customPack1.xy = v.texcoord; + TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) + return o; + } + + half4 frag(v2f IN + #if !defined( CAN_SKIP_VPOS ) + , UNITY_VPOS_TYPE vpos : VPOS + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + Input surfIN; + UNITY_INITIALIZE_OUTPUT(Input, surfIN); + surfIN.uv_texcoord = IN.customPack1.xy; + float3 worldPos = float3(IN.tSpace0.w, IN.tSpace1.w, IN.tSpace2.w); + half3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); + surfIN.worldPos = worldPos; + surfIN.worldNormal = float3(IN.tSpace0.z, IN.tSpace1.z, IN.tSpace2.z); + surfIN.internalSurfaceTtoW0 = IN.tSpace0.xyz; + surfIN.internalSurfaceTtoW1 = IN.tSpace1.xyz; + surfIN.internalSurfaceTtoW2 = IN.tSpace2.xyz; + SurfaceOutputCustomLightingCustom o; + UNITY_INITIALIZE_OUTPUT(SurfaceOutputCustomLightingCustom, o) + surf(surfIN, o); + #if defined( CAN_SKIP_VPOS ) + float2 vpos = IN.pos; + #endif + SHADOW_CASTER_FRAGMENT(IN) + } + ENDCG + } + } + Fallback "Diffuse" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMToon.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMToon.shader.meta new file mode 100644 index 0000000..b8b3410 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMToon.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 83e4eb1c16a47f44e898b0393a5322e8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMUINoAlpha.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMUINoAlpha.shader new file mode 100644 index 0000000..8c2828b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMUINoAlpha.shader @@ -0,0 +1,91 @@ +Shader "MoreMountains/UINoAlpha" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + + _StencilComp ("Stencil Comparison", Float) = 8 + _Stencil ("Stencil ID", Float) = 0 + _StencilOp ("Stencil Operation", Float) = 0 + _StencilWriteMask ("Stencil Write Mask", Float) = 255 + _StencilReadMask ("Stencil Read Mask", Float) = 255 + + _ColorMask ("Color Mask", Float) = 15 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Stencil + { + Ref [_Stencil] + Comp [_StencilComp] + Pass [_StencilOp] + ReadMask [_StencilReadMask] + WriteMask [_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + ZTest [unity_GUIZTestMode] + Fog { Mode Off } + Blend One Zero + ColorMask [_ColorMask] + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + half2 texcoord : TEXCOORD0; + }; + + fixed4 _Color; + + v2f vert(appdata_t IN) + { + v2f OUT; + OUT.vertex = UnityObjectToClipPos(IN.vertex); + OUT.texcoord = IN.texcoord; +#ifdef UNITY_HALF_TEXEL_OFFSET + OUT.vertex.xy -= (_ScreenParams.zw-1.0); +#endif + OUT.color = IN.color * _Color; + return OUT; + } + + sampler2D _MainTex; + + fixed4 frag(v2f IN) : SV_Target + { + half4 color = tex2D(_MainTex, IN.texcoord) * IN.color; + clip (color.a - 0.01); + return color; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMUINoAlpha.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMUINoAlpha.shader.meta new file mode 100644 index 0000000..544c1fe --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMUINoAlpha.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: f67990759854d1e4aa64a3821734dcd8 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMVFX.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMVFX.shader new file mode 100644 index 0000000..d368d44 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMVFX.shader @@ -0,0 +1,539 @@ +// Made with Amplify Shader Editor +// Available at the Unity Asset Store - http://u3d.as/y3X +Shader "MoreMountains/MMVFX" +{ + Properties + { + _Cutoff( "Mask Clip Value", Float ) = 0.5 + [Header(Albedo)]_MainTex("MainTex", 2D) = "white" {} + _MainTexPanningSpeed("MainTexPanningSpeed", Vector) = (0,0,0,0) + _Tint("Tint", Color) = (1,1,1,1) + [Header(Opacity)]_Opacity("Opacity", Range( 0 , 1)) = 1 + _OpacityMask("OpacityMask", Range( 0 , 1)) = 0.7814395 + [Header(Normal Map)]_Normal("Normal", 2D) = "bump" {} + [Header(Vertex Colors)][Toggle(_USEVERTEXCOLORS_ON)] _UseVertexColors("UseVertexColors", Float) = 0 + [Header(Rim Light)][Toggle(_USERIMLIGHT_ON)] _UseRimLight("UseRimLight", Float) = 0 + _RimColor("RimColor", Color) = (0,0.7342432,1,1) + _RimPower("RimPower", Range( 0 , 1)) = 0.6547081 + _RimAmount("RimAmount", Range( 0 , 1)) = 0.7 + [Toggle(_HIDERIMUNDERSHADOW_ON)] _HideRimUnderShadow("HideRimUnderShadow", Float) = 0 + [Toggle(_SHARPRIMLIGHT_ON)] _SharpRimLight("SharpRimLight", Float) = 1 + [Header(Emission)]_EmissionTexture("EmissionTexture", 2D) = "white" {} + [HDR]_EmissionColor("EmissionColor", Color) = (2,2,2,1) + _EmissionForce("EmissionForce", Float) = 0 + [Header(Animation)]_Framerate("Framerate", Float) = 5 + [Header(VertexOffset)][Toggle(_USEVERTEXOFFSET_ON)] _UseVertexOffset("UseVertexOffset", Float) = 0 + _VertexOffsetNoiseTexture("VertexOffsetNoiseTexture", 2D) = "white" {} + _VertexOffsetFrequency("VertexOffsetFrequency", Float) = 2 + _VertexOffsetMagnitude("VertexOffsetMagnitude", Float) = 0.05 + _VertexOffsetX("VertexOffsetX", Float) = 0.5 + _VertexOffsetY("VertexOffsetY", Float) = 0.5 + _VertexOffsetZ("VertexOffsetZ", Float) = 0.5 + [Header(Outline)]_OutlineColor("OutlineColor", Color) = (0.5451996,1,0,1) + _OutlineWidth("OutlineWidth", Float) = 0.1 + _OutlineAlpha("OutlineAlpha", Range( 0 , 1)) = 0 + [Header(SecondaryTexture)]_SecondaryTexture("SecondaryTexture", 2D) = "white" {} + _SecondaryTextureStrength("SecondaryTextureStrength", Float) = 0 + _SecondaryTextureSize("SecondaryTextureSize", Float) = 1 + _SecondaryTextureSpeedFactor("SecondaryTextureSpeedFactor", Float) = 0 + [HideInInspector] _texcoord( "", 2D ) = "white" {} + [HideInInspector] __dirty( "", Int ) = 1 + } + + SubShader + { + Tags + { + "RenderType" = "TransparentCutout" "Queue" = "AlphaTest+0" + } + Cull Front + CGPROGRAM + #pragma target 3.0 + #pragma surface outlineSurf Outline nofog keepalpha noshadow noambient novertexlights nolightmap nodynlightmap nodirlightmap nometa noforwardadd vertex:outlineVertexDataFunc + + void outlineVertexDataFunc(inout appdata_full v, out Input o) + { + UNITY_INITIALIZE_OUTPUT(Input, o); + float outlineVar = _OutlineWidth; + v.vertex.xyz += (v.normal * outlineVar); + } + + inline half4 LightingOutline(SurfaceOutput s, half3 lightDir, half atten) { return half4(0, 0, 0, s.Alpha); } + + void outlineSurf(Input i, inout SurfaceOutput o) + { + o.Emission = _OutlineColor.rgb; + clip(_OutlineAlpha - _Cutoff); + } + ENDCG + + + Tags + { + "RenderType" = "Transparent" "Queue" = "Transparent+0" "IgnoreProjector" = "True" "IsEmissive" = "true" + } + Cull Back + ZWrite Off + Blend SrcAlpha OneMinusSrcAlpha + BlendOp Add + CGINCLUDE + #include "UnityShaderVariables.cginc" + #include "UnityPBSLighting.cginc" + #include "Lighting.cginc" + #pragma target 3.0 + #pragma shader_feature_local _HIDERIMUNDERSHADOW_ON + #pragma shader_feature_local _SHARPRIMLIGHT_ON + #pragma shader_feature_local _USERIMLIGHT_ON + #pragma shader_feature_local _USEVERTEXOFFSET_ON + #pragma shader_feature_local _USEVERTEXCOLORS_ON + struct Input + { + float2 uv_texcoord; + float4 vertexColor : COLOR; + }; + + uniform sampler2D _Normal; + uniform float _RimAmount; + uniform float _RimPower; + uniform float4 _RimColor; + uniform float _VertexOffsetMagnitude; + uniform sampler2D _VertexOffsetNoiseTexture; + uniform float _Framerate; + uniform float _VertexOffsetFrequency; + uniform float _VertexOffsetX; + uniform float _VertexOffsetY; + uniform float _VertexOffsetZ; + uniform sampler2D _SecondaryTexture; + uniform float _SecondaryTextureSize; + uniform float _SecondaryTextureSpeedFactor; + uniform float _SecondaryTextureStrength; + uniform sampler2D _MainTex; + uniform float2 _MainTexPanningSpeed; + uniform float4 _Tint; + uniform sampler2D _EmissionTexture; + uniform float4 _EmissionTexture_ST; + uniform float4 _EmissionColor; + uniform float _EmissionForce; + uniform float _Opacity; + uniform float _OpacityMask; + uniform float _Cutoff = 0.5; + uniform float4 _OutlineColor; + uniform float _OutlineAlpha; + uniform float _OutlineWidth; + + void vertexDataFunc(inout appdata_full v, out Input o) + { + UNITY_INITIALIZE_OUTPUT(Input, o); + float4 temp_cast_0 = (0.0).xxxx; + half steppedTime293 = (round((_Time.y * _Framerate)) / _Framerate); + float3 ase_vertex3Pos = v.vertex.xyz; + float3 temp_output_281_0 = (ase_vertex3Pos * _VertexOffsetFrequency); + half2 vertexOffsetXUV302 = (steppedTime293 + (temp_output_281_0).xy); + half2 vertexOffsetYUV303 = ((steppedTime293 * 2.0) + (temp_output_281_0).yz); + half2 vertexOffsetZUV304 = ((steppedTime293 * 4.0) + (temp_output_281_0).xz); + float4 appendResult308 = (float4( + (tex2Dlod(_VertexOffsetNoiseTexture, float4(vertexOffsetXUV302, 0, 0.0)).r - _VertexOffsetX), + (tex2Dlod(_VertexOffsetNoiseTexture, float4(vertexOffsetYUV303, 0, 0.0)).r - _VertexOffsetY), + (tex2Dlod(_VertexOffsetNoiseTexture, float4(vertexOffsetZUV304, 0, 0.0)).r - _VertexOffsetZ), 0.0)); + #ifdef _USEVERTEXOFFSET_ON + float4 staticSwitch350 = (_VertexOffsetMagnitude * appendResult308); + #else + float4 staticSwitch350 = temp_cast_0; + #endif + float3 vertexOffset311 = (staticSwitch350).xyz; + float3 outline364 = 0; + v.vertex.xyz += (vertexOffset311 + outline364); + v.vertex.w = 1; + } + + inline half4 LightingUnlit(SurfaceOutput s, half3 lightDir, half atten) + { + return half4(0, 0, 0, s.Alpha); + } + + void surf(Input i, inout SurfaceOutput o) + { + half steppedTime293 = (round((_Time.y * _Framerate)) / _Framerate); + float2 panner462 = (1.0 * _Time.y * _MainTexPanningSpeed + i.uv_texcoord); + float4 temp_cast_0 = (1.0).xxxx; + #ifdef _USEVERTEXCOLORS_ON + float4 staticSwitch7 = i.vertexColor; + #else + float4 staticSwitch7 = temp_cast_0; + #endif + float4 blendOpSrc460 = (tex2D(_SecondaryTexture, + ((i.uv_texcoord * _SecondaryTextureSize) + (steppedTime293 * + _SecondaryTextureSpeedFactor))) * _SecondaryTextureStrength); + float4 blendOpDest460 = ((tex2D(_MainTex, panner462) * _Tint) * staticSwitch7); + float4 albedo11 = (saturate((blendOpDest460 - blendOpSrc460))); + float2 uv_EmissionTexture = i.uv_texcoord * _EmissionTexture_ST.xy + _EmissionTexture_ST.zw; + float4 computedEmission182 = ((tex2D(_EmissionTexture, uv_EmissionTexture) * _EmissionColor) * + _EmissionForce); + o.Emission = (albedo11 * computedEmission182).rgb; + float Opacity473 = _Opacity; + o.Alpha = Opacity473; + float4 temp_cast_2 = (_OpacityMask).xxxx; + float4 OpacityMask468 = step(albedo11, temp_cast_2); + clip(OpacityMask468.r - _Cutoff); + } + ENDCG + CGPROGRAM + #pragma surface surf Unlit keepalpha fullforwardshadows exclude_path:deferred vertex:vertexDataFunc + ENDCG + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + ZWrite On + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 3.0 + #pragma multi_compile_shadowcaster + #pragma multi_compile UNITY_PASS_SHADOWCASTER + #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 + #include "HLSLSupport.cginc" + #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN ) + #define CAN_SKIP_VPOS + #endif + #include "UnityCG.cginc" + #include "Lighting.cginc" + #include "UnityPBSLighting.cginc" + sampler3D _DitherMaskLOD; + + struct v2f + { + V2F_SHADOW_CASTER; + float2 customPack1 : TEXCOORD1; + float3 worldPos : TEXCOORD2; + half4 color : COLOR0; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert(appdata_full v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_OUTPUT(v2f, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + Input customInputData; + vertexDataFunc(v, customInputData); + float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; + half3 worldNormal = UnityObjectToWorldNormal(v.normal); + o.customPack1.xy = customInputData.uv_texcoord; + o.customPack1.xy = v.texcoord; + o.worldPos = worldPos; + TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) + o.color = v.color; + return o; + } + + half4 frag(v2f IN + #if !defined( CAN_SKIP_VPOS ) + , UNITY_VPOS_TYPE vpos : VPOS + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + Input surfIN; + UNITY_INITIALIZE_OUTPUT(Input, surfIN); + surfIN.uv_texcoord = IN.customPack1.xy; + float3 worldPos = IN.worldPos; + half3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); + surfIN.vertexColor = IN.color; + SurfaceOutput o; + UNITY_INITIALIZE_OUTPUT(SurfaceOutput, o) + surf(surfIN, o); + #if defined( CAN_SKIP_VPOS ) + float2 vpos = IN.pos; + #endif + half alphaRef = tex3D(_DitherMaskLOD, float3(vpos.xy * 0.25, o.Alpha * 0.9375)).a; + clip(alphaRef - 0.01); + SHADOW_CASTER_FRAGMENT(IN) + } + ENDCG + } + } + Fallback "Diffuse" + //CustomEditor "ASEMaterialInspector" +} +/*ASEBEGIN +Version=18800 +2637;262;1828;996;1581.965;5374.667;1;True;True +Node;AmplifyShaderEditor.CommentaryNode;378;-6382.085,-400.4365;Inherit;False;1421.198;341.5015;Comment;6;288;289;290;291;292;293;;1,1,1,1;0;0 +Node;AmplifyShaderEditor.TimeNode;289;-6312.839,-350.4365;Inherit;False;0;5;FLOAT4;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;288;-6332.085,-173.935;Float;False;Property;_Framerate;Framerate;17;0;Create;True;0;0;0;False;1;Header(Animation);False;5;6;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;290;-6021.639,-288.0374;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RoundOpNode;291;-5831.839,-272.4373;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;332;-4249.92,5639.075;Inherit;False;3131.241;1853.44;Vertex Offset;37;311;362;350;359;310;308;309;315;331;329;314;327;326;323;328;330;313;322;325;324;304;302;303;299;297;295;294;301;286;285;287;300;298;296;281;280;279;Vertex Offset;1,1,1,1;0;0 +Node;AmplifyShaderEditor.SimpleDivideOpNode;292;-5675.839,-264.6375;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.PosVertexDataNode;279;-3584.773,6111.28;Inherit;False;0;0;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RegisterLocalVarNode;293;-5281.887,-262.0375;Half;False;steppedTime;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;280;-3656.927,6318.275;Float;False;Property;_VertexOffsetFrequency;VertexOffsetFrequency;20;0;Create;True;0;0;0;True;0;False;2;2;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;298;-2967.928,6470.375;Inherit;False;293;steppedTime;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;281;-3277.327,6185.674;Inherit;False;2;2;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.GetLocalVarNode;296;-2970.528,6241.574;Inherit;False;293;steppedTime;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ComponentMaskNode;285;-2939.327,6110.274;Inherit;False;True;True;False;True;1;0;FLOAT3;0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;301;-2658.528,6424.874;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;4;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;300;-2666.328,6214.274;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;2;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ComponentMaskNode;287;-2934.128,6575.674;Inherit;False;True;False;True;True;1;0;FLOAT3;0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.ComponentMaskNode;286;-2941.927,6344.274;Inherit;False;False;True;True;True;1;0;FLOAT3;0,0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;294;-3022.528,6016.673;Inherit;False;293;steppedTime;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;15;-5059.295,-4359.276;Inherit;False;2898.835;1634.152;Albedo;22;11;14;7;10;12;2;13;1;379;380;382;383;384;381;387;388;389;457;460;462;463;464;Albedo;1,1,1,1;0;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;295;-2648.128,6066.074;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;299;-2502.528,6509.375;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;297;-2520.728,6298.774;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.TextureCoordinatesNode;382;-4615.27,-3342.866;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.TextureCoordinatesNode;464;-4839.599,-4217.588;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;379;-4601.5,-3194.832;Float;False;Property;_SecondaryTextureSize;SecondaryTextureSize;30;0;Create;True;0;0;0;True;0;False;1;5;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;387;-4597.753,-2915.573;Float;False;Property;_SecondaryTextureSpeedFactor;SecondaryTextureSpeedFactor;31;0;Create;True;0;0;0;True;0;False;0;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;304;-2326.875,6497.284;Half;False;vertexOffsetZUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;384;-4632.483,-3043.355;Inherit;False;293;steppedTime;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;303;-2352.263,6301.432;Half;False;vertexOffsetYUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;302;-2421.174,6069.311;Half;False;vertexOffsetXUV;-1;True;1;0;FLOAT2;0,0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.Vector2Node;463;-4832.088,-4012.864;Inherit;False;Property;_MainTexPanningSpeed;MainTexPanningSpeed;2;0;Create;True;0;0;0;False;0;False;0,0;0.5,0.5;0;3;FLOAT2;0;FLOAT;1;FLOAT;2 +Node;AmplifyShaderEditor.PannerNode;462;-4551.144,-4127.432;Inherit;False;3;0;FLOAT2;0,0;False;2;FLOAT2;0,0;False;1;FLOAT;1;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;383;-4274.446,-3291.226;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;388;-4287.753,-3035.573;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;313;-4194.428,6829.375;Inherit;False;302;vertexOffsetXUV;1;0;OBJECT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.GetLocalVarNode;325;-4183.92,7306.577;Inherit;False;304;vertexOffsetZUV;1;0;OBJECT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.TexturePropertyNode;322;-4199.92,6551.378;Float;True;Property;_VertexOffsetNoiseTexture;VertexOffsetNoiseTexture;19;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1 +Node;AmplifyShaderEditor.GetLocalVarNode;324;-4183.92,7066.577;Inherit;False;303;vertexOffsetYUV;1;0;OBJECT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.ColorNode;2;-4255.289,-3945.874;Float;False;Property;_Tint;Tint;3;0;Create;True;0;0;0;False;0;False;1,1,1,1;1,1,1,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SamplerNode;1;-4370.208,-4183.944;Inherit;True;Property;_MainTex;MainTex;1;0;Create;True;0;0;0;True;1;Header(Albedo);False;-1;5551f2320b5bfde4dbdbb0604036a53a;5551f2320b5bfde4dbdbb0604036a53a;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleAddOpNode;389;-4081.753,-3111.573;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 +Node;AmplifyShaderEditor.VertexColorNode;13;-4325.929,-3640.034;Inherit;False;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;12;-4322.957,-3749.968;Float;False;Constant;_NoVertexColor;NoVertexColor;8;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;314;-3463.585,6942.798;Float;False;Property;_VertexOffsetX;VertexOffsetX;22;0;Create;True;0;0;0;True;0;False;0.5;0.5;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;328;-3459.805,7144.349;Float;False;Property;_VertexOffsetY;VertexOffsetY;23;0;Create;True;0;0;0;True;0;False;0.5;0.5;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;327;-3844.72,7229.777;Inherit;True;Property;_TextureSample2;Texture Sample 2;34;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SamplerNode;326;-3847.92,6989.777;Inherit;True;Property;_TextureSample1;Texture Sample 1;34;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SamplerNode;323;-3831.92,6660.178;Inherit;True;Property;_TextureSample0;Texture Sample 0;34;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;330;-3456.605,7329.949;Float;False;Property;_VertexOffsetZ;VertexOffsetZ;24;0;Create;True;0;0;0;True;0;False;0.5;0.5;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;315;-3225.48,6894.424;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;329;-3231.234,7091.208;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SamplerNode;381;-3903.255,-3517.626;Inherit;True;Property;_SecondaryTexture;SecondaryTexture;28;0;Create;True;0;0;0;False;1;Header(SecondaryTexture);False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.RangedFloatNode;380;-3899.35,-3279.479;Float;False;Property;_SecondaryTextureStrength;SecondaryTextureStrength;29;0;Create;True;0;0;0;True;0;False;0;0.2;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;7;-4096.983,-3704.728;Float;False;Property;_UseVertexColors;UseVertexColors;7;0;Create;True;0;0;0;True;1;Header(Vertex Colors);False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;10;-3999.843,-4005.796;Inherit;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;331;-3228.035,7276.808;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;14;-3731.438,-3814.815;Inherit;True;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;457;-3565.987,-3499.934;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.DynamicAppendNode;308;-2810.996,6918.278;Inherit;False;FLOAT4;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.RangedFloatNode;309;-2899.191,6772.206;Float;False;Property;_VertexOffsetMagnitude;VertexOffsetMagnitude;21;0;Create;True;0;0;0;False;0;False;0.05;0.05;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;187;-1910.011,-4518.599;Inherit;False;2278.231;843.0205;Emission;6;182;180;178;179;176;177;Emission;1,1,1,1;0;0 +Node;AmplifyShaderEditor.SamplerNode;176;-1753.937,-4350.736;Inherit;True;Property;_EmissionTexture;EmissionTexture;14;0;Create;True;0;0;0;True;1;Header(Emission);False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;310;-2543.653,6865.912;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT4;0,0,0,0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.ColorNode;177;-1732.941,-4059.429;Float;False;Property;_EmissionColor;EmissionColor;15;1;[HDR];Create;True;0;0;0;True;0;False;2,2,2,1;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.BlendOpsNode;460;-3402.947,-3783.592;Inherit;True;Subtract;True;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;FLOAT;1;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;376;-4256.833,7640.004;Inherit;False;1278.943;484.4639;Outline;5;355;364;356;354;377;Outline;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RangedFloatNode;359;-2546.756,6765.939;Float;False;Constant;_NoVertexOffset;NoVertexOffset;41;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;178;-1289.42,-4130.288;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RangedFloatNode;179;-1396.001,-3967.695;Float;False;Property;_EmissionForce;EmissionForce;16;0;Create;True;0;0;0;False;0;False;0;1;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;11;-2736.712,-3809.693;Float;True;albedo;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;475;-3035.437,-2407.879;Inherit;False;1193.9;692.5161;Opacity;6;467;465;472;468;473;479;Opacity;0.5599858,0.8641157,0.9811321,1;0;0 +Node;AmplifyShaderEditor.StaticSwitch;350;-2275.896,6843.649;Float;False;Property;_UseVertexOffset;UseVertexOffset;18;0;Create;True;0;0;0;True;1;Header(VertexOffset);False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT4;0,0,0,0;False;0;FLOAT4;0,0,0,0;False;2;FLOAT4;0,0,0,0;False;3;FLOAT4;0,0,0,0;False;4;FLOAT4;0,0,0,0;False;5;FLOAT4;0,0,0,0;False;6;FLOAT4;0,0,0,0;False;7;FLOAT4;0,0,0,0;False;8;FLOAT4;0,0,0,0;False;1;FLOAT4;0 +Node;AmplifyShaderEditor.RangedFloatNode;377;-4188.056,7912.742;Float;False;Property;_OutlineAlpha;OutlineAlpha;27;0;Create;True;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;355;-4159.714,7997.744;Float;False;Property;_OutlineWidth;OutlineWidth;26;0;Create;True;0;0;0;True;0;False;0.1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.ColorNode;354;-4187.602,7731.861;Float;False;Property;_OutlineColor;OutlineColor;25;0;Create;True;0;0;0;True;1;Header(Outline);False;0.5451996,1,0,1;0.5451995,1,0,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;180;-1029.339,-4060.448;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.OutlineNode;356;-3833.203,7847.26;Inherit;False;0;True;Masked;0;0;Front;3;0;FLOAT3;0,0,0;False;2;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.ComponentMaskNode;362;-1924.862,6853.405;Inherit;False;True;True;True;False;1;0;FLOAT4;0,0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.RangedFloatNode;467;-2985.437,-1841.816;Inherit;False;Property;_OpacityMask;OpacityMask;5;0;Create;True;0;0;0;False;0;False;0.7814395;0.51;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;465;-2751.765,-2151.973;Inherit;True;11;albedo;1;0;OBJECT;;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;174;-248.6374,-2625.146;Inherit;False;1258.342;857.4734;Final;9;0;184;312;365;366;469;474;476;477;Final;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;311;-1647.014,6860.691;Float;False;vertexOffset;-1;True;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.RangedFloatNode;472;-2886.966,-2338.879;Inherit;False;Property;_Opacity;Opacity;4;0;Create;True;0;0;0;False;1;Header(Opacity);False;1;100;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.StepOpNode;479;-2424.015,-2037.747;Inherit;True;2;0;COLOR;0,0,0,0;False;1;FLOAT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;364;-3253.303,7802.121;Float;False;outline;-1;True;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;182;-851.4753,-4008.796;Float;False;computedEmission;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;84;-6398.291,-2500.077;Inherit;False;810.3552;580.1461;Normal Map;2;82;83;Normal Map;1,1,1,1;0;0 +Node;AmplifyShaderEditor.GetLocalVarNode;312;29.83773,-2022.2;Inherit;False;311;vertexOffset;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.CommentaryNode;35;-6394.275,-1621.117;Inherit;False;1336.096;443.0846;NdotL;7;85;31;34;81;32;80;33;NdotL;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;473;-2543.967,-2345.879;Inherit;False;Opacity;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.CommentaryNode;91;-6389.196,-936.1287;Inherit;False;1133.981;413.4298;NdotV;5;86;87;88;89;90;NdotV;1,1,1,1;0;0 +Node;AmplifyShaderEditor.GetLocalVarNode;184;-166.8244,-2331.894;Inherit;False;182;computedEmission;1;0;OBJECT;0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;365;40.15461,-1906.167;Inherit;False;364;outline;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.GetLocalVarNode;476;-60.46403,-2533.214;Inherit;True;11;albedo;1;0;OBJECT;;False;1;COLOR;0 +Node;AmplifyShaderEditor.CommentaryNode;173;-4246.42,4273.515;Inherit;False;3617.067;1146.109;Rim Light;23;157;164;165;156;168;142;172;150;155;171;148;152;147;170;151;146;163;166;144;169;149;167;143;Rim Light;1,1,1,1;0;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;468;-2040.537,-2047.315;Inherit;False;OpacityMask;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.DotProductOpNode;34;-5502.437,-1442.394;Inherit;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleSubtractOpNode;155;-2657.997,4913.394;Inherit;False;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;477;262.4405,-2491.379;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.GetLocalVarNode;149;-4076.015,4938.533;Inherit;True;31;NdotL;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;165;-1640.464,4699.232;Float;False;Constant;_DefaultRimLight;DefaultRimLight;19;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;469;206.7545,-2177.134;Inherit;False;468;OpacityMask;1;0;OBJECT;;False;1;COLOR;0 +Node;AmplifyShaderEditor.VertexToFragmentNode;80;-5906.466,-1539.523;Inherit;False;False;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;83;-5943.662,-2244.336;Float;False;normal;-1;True;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;366;276.1544,-1970.167;Inherit;False;2;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.FresnelNode;485;-869.1298,-5093.487;Inherit;True;Standard;WorldNormal;ViewDir;True;True;5;0;FLOAT3;0,0,1;False;4;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;1;False;3;FLOAT;5;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;170;-3190.997,5000.548;Inherit;False;169;rimAmount;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;151;-2933.597,5005.695;Float;False;Constant;_RimAmountAdjuster;RimAmountAdjuster;17;0;Create;True;0;0;0;False;0;False;0.01;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;167;-4093.783,4677.084;Float;True;Constant;_DontHideRimUnderShadow;DontHideRimUnderShadow;20;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;172;-2379.181,4559.983;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;86;-6339.196,-878.3267;Inherit;False;83;normal;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.WorldNormalVector;489;-1204.588,-5110.409;Inherit;False;False;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.RangedFloatNode;488;-1232.588,-4964.407;Inherit;False;Constant;_Float0;Float 0;32;0;Create;True;0;0;0;False;0;False;1;0;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.TFHCRemapNode;505;-489.8678,-5194.231;Inherit;True;5;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;3;FLOAT;1;False;4;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.NegateNode;507;-331.4651,-4959.637;Inherit;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SmoothstepOpNode;150;-2405.541,4849.111;Inherit;True;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;164;-1408.503,4788.544;Float;False;Property;_UseRimLight;UseRimLight;8;0;Create;True;0;0;0;True;1;Header(Rim Light);False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;COLOR;0,0,0,0;False;0;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;6;COLOR;0,0,0,0;False;7;COLOR;0,0,0,0;False;8;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.SamplerNode;82;-6342.859,-2240.926;Inherit;True;Property;_Normal;Normal;6;0;Create;True;0;0;0;True;1;Header(Normal Map);False;-1;None;None;True;0;False;bump;Auto;True;Object;-1;Auto;Texture2D;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.GetLocalVarNode;163;-3382.022,4583.278;Inherit;False;90;NdotV;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;157;-1113.162,4847.988;Float;False;rimLight;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.ColorNode;142;-1992.58,5045.396;Float;False;Property;_RimColor;RimColor;9;0;Create;True;0;0;0;True;0;False;0,0.7342432,1,1;0,0.7342432,1,1;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 +Node;AmplifyShaderEditor.NormalizeNode;81;-5646.468,-1541.523;Inherit;False;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;148;-2787.997,4639.093;Inherit;True;2;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;143;-4002.27,4458.294;Float;False;Property;_RimAmount;RimAmount;11;0;Create;True;0;0;0;True;0;False;0.7;0.7;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.RangedFloatNode;144;-3817.804,5113.262;Float;False;Property;_RimPower;RimPower;10;0;Create;True;0;0;0;True;0;False;0.6547081;0.6547081;0;1;0;1;FLOAT;0 +Node;AmplifyShaderEditor.WorldNormalVector;33;-6122.435,-1556.394;Inherit;False;True;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.GetLocalVarNode;474;208.0318,-2254.197;Inherit;False;473;Opacity;1;0;OBJECT;;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;90;-5498.219,-809.6757;Float;False;NdotV;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.WorldNormalVector;87;-6061.468,-886.1287;Inherit;False;False;1;0;FLOAT3;0,0,1;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.GetLocalVarNode;171;-2586.136,4469.81;Inherit;False;169;rimAmount;1;0;OBJECT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.DotProductOpNode;89;-5771.26,-811.2357;Inherit;False;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.RegisterLocalVarNode;31;-5327.133,-1423.386;Float;False;NdotL;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleMultiplyOpNode;156;-1699.836,4854.964;Inherit;True;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 +Node;AmplifyShaderEditor.StaticSwitch;166;-3768.122,4805.354;Float;True;Property;_HideRimUnderShadow;HideRimUnderShadow;12;0;Create;True;0;0;0;True;0;False;0;0;0;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.WorldSpaceLightDirHlpNode;32;-6102.436,-1366.394;Inherit;False;True;1;0;FLOAT;0;False;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.RegisterLocalVarNode;169;-3654.976,4457.298;Float;False;rimAmount;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.OneMinusNode;146;-3097.397,4572.993;Inherit;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.ViewDirInputsCoordNode;88;-6061.468,-706.6989;Float;False;World;False;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 +Node;AmplifyShaderEditor.PowerNode;147;-3410.963,4913;Inherit;True;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StaticSwitch;168;-2116.708,4754.35;Float;False;Property;_SharpRimLight;SharpRimLight;13;0;Create;True;0;0;0;True;0;False;0;1;1;True;;Toggle;2;Key0;Key1;Create;True;True;9;1;FLOAT;0;False;0;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;FLOAT;0;False;6;FLOAT;0;False;7;FLOAT;0;False;8;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.SimpleAddOpNode;152;-2664.497,5065.494;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.GetLocalVarNode;85;-6355.366,-1550.021;Inherit;False;83;normal;1;0;OBJECT;0;False;1;FLOAT3;0 +Node;AmplifyShaderEditor.OneMinusNode;508;-519.9648,-4857.667;Inherit;True;1;0;FLOAT;0;False;1;FLOAT;0 +Node;AmplifyShaderEditor.StandardSurfaceOutputNode;0;603.3936,-2365.912;Float;False;True;-1;2;ASEMaterialInspector;0;0;Unlit;MoreMountains/MMVFX;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;False;False;False;False;False;False;Back;2;False;-1;0;False;-1;False;0;False;-1;0;False;-1;False;3;Custom;0.5;True;True;0;True;Transparent;;Transparent;ForwardOnly;14;all;True;True;True;True;0;False;-1;False;0;False;-1;255;False;-1;255;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;0;False;-1;False;2;15;10;25;False;0.5;True;2;5;False;-1;10;False;-1;0;5;False;-1;10;False;-1;1;False;-1;0;False;-1;0;False;0;0,0,0,0;VertexOffset;False;False;Cylindrical;False;Relative;0;;0;-1;-1;-1;0;False;0;0;False;-1;-1;0;False;-1;0;0;0;False;0.1;False;-1;0;False;-1;False;15;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT;0;False;4;FLOAT;0;False;6;FLOAT3;0,0,0;False;7;FLOAT3;0,0,0;False;8;FLOAT;0;False;9;FLOAT;0;False;10;FLOAT;0;False;13;FLOAT3;0,0,0;False;11;FLOAT3;0,0,0;False;12;FLOAT3;0,0,0;False;14;FLOAT4;0,0,0,0;False;15;FLOAT3;0,0,0;False;0 +WireConnection;290;0;289;2 +WireConnection;290;1;288;0 +WireConnection;291;0;290;0 +WireConnection;292;0;291;0 +WireConnection;292;1;288;0 +WireConnection;293;0;292;0 +WireConnection;281;0;279;0 +WireConnection;281;1;280;0 +WireConnection;285;0;281;0 +WireConnection;301;0;298;0 +WireConnection;300;0;296;0 +WireConnection;287;0;281;0 +WireConnection;286;0;281;0 +WireConnection;295;0;294;0 +WireConnection;295;1;285;0 +WireConnection;299;0;301;0 +WireConnection;299;1;287;0 +WireConnection;297;0;300;0 +WireConnection;297;1;286;0 +WireConnection;304;0;299;0 +WireConnection;303;0;297;0 +WireConnection;302;0;295;0 +WireConnection;462;0;464;0 +WireConnection;462;2;463;0 +WireConnection;383;0;382;0 +WireConnection;383;1;379;0 +WireConnection;388;0;384;0 +WireConnection;388;1;387;0 +WireConnection;1;1;462;0 +WireConnection;389;0;383;0 +WireConnection;389;1;388;0 +WireConnection;327;0;322;0 +WireConnection;327;1;325;0 +WireConnection;326;0;322;0 +WireConnection;326;1;324;0 +WireConnection;323;0;322;0 +WireConnection;323;1;313;0 +WireConnection;315;0;323;1 +WireConnection;315;1;314;0 +WireConnection;329;0;326;1 +WireConnection;329;1;328;0 +WireConnection;381;1;389;0 +WireConnection;7;1;12;0 +WireConnection;7;0;13;0 +WireConnection;10;0;1;0 +WireConnection;10;1;2;0 +WireConnection;331;0;327;1 +WireConnection;331;1;330;0 +WireConnection;14;0;10;0 +WireConnection;14;1;7;0 +WireConnection;457;0;381;0 +WireConnection;457;1;380;0 +WireConnection;308;0;315;0 +WireConnection;308;1;329;0 +WireConnection;308;2;331;0 +WireConnection;310;0;309;0 +WireConnection;310;1;308;0 +WireConnection;460;0;457;0 +WireConnection;460;1;14;0 +WireConnection;178;0;176;0 +WireConnection;178;1;177;0 +WireConnection;11;0;460;0 +WireConnection;350;1;359;0 +WireConnection;350;0;310;0 +WireConnection;180;0;178;0 +WireConnection;180;1;179;0 +WireConnection;356;0;354;0 +WireConnection;356;2;377;0 +WireConnection;356;1;355;0 +WireConnection;362;0;350;0 +WireConnection;311;0;362;0 +WireConnection;479;0;465;0 +WireConnection;479;1;467;0 +WireConnection;364;0;356;0 +WireConnection;182;0;180;0 +WireConnection;473;0;472;0 +WireConnection;468;0;479;0 +WireConnection;34;0;81;0 +WireConnection;34;1;32;0 +WireConnection;155;0;170;0 +WireConnection;155;1;151;0 +WireConnection;477;0;476;0 +WireConnection;477;1;184;0 +WireConnection;80;0;33;0 +WireConnection;83;0;82;0 +WireConnection;366;0;312;0 +WireConnection;366;1;365;0 +WireConnection;485;0;489;0 +WireConnection;485;2;488;0 +WireConnection;172;0;171;0 +WireConnection;172;1;148;0 +WireConnection;505;0;485;0 +WireConnection;507;0;485;0 +WireConnection;150;0;148;0 +WireConnection;150;1;155;0 +WireConnection;150;2;152;0 +WireConnection;164;1;165;0 +WireConnection;164;0;156;0 +WireConnection;157;0;164;0 +WireConnection;81;0;80;0 +WireConnection;148;0;146;0 +WireConnection;148;1;147;0 +WireConnection;33;0;85;0 +WireConnection;90;0;89;0 +WireConnection;87;0;86;0 +WireConnection;89;0;87;0 +WireConnection;89;1;88;0 +WireConnection;31;0;34;0 +WireConnection;156;0;168;0 +WireConnection;156;1;142;0 +WireConnection;166;1;167;0 +WireConnection;166;0;149;0 +WireConnection;169;0;143;0 +WireConnection;146;0;163;0 +WireConnection;147;0;166;0 +WireConnection;147;1;144;0 +WireConnection;168;1;172;0 +WireConnection;168;0;150;0 +WireConnection;152;0;151;0 +WireConnection;152;1;170;0 +WireConnection;508;0;485;0 +WireConnection;0;2;477;0 +WireConnection;0;9;474;0 +WireConnection;0;10;469;0 +WireConnection;0;11;366;0 +ASEEND*/ +//CHKSM=A8A8600C8A2CBE75B3D76A19CCBA8959A6D98058 \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMVFX.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMVFX.shader.meta new file mode 100644 index 0000000..2fdd279 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMVFX.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 75131f2c79eb5ea41ad169e65629e780 +ShaderImporter: + externalObjects: {} + defaultTextures: + - _MainTex: {fileID: 2800000, guid: 5551f2320b5bfde4dbdbb0604036a53a, type: 3} + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMWorldspace.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMWorldspace.shader new file mode 100644 index 0000000..68e535c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMWorldspace.shader @@ -0,0 +1,58 @@ +Shader "MoreMountains/MMWorldspace" +{ + Properties + { + _Color ("Main Color", Color) = (1,1,1,1) + _MainTex ("Base (RGB)", 2D) = "white" {} + _Scale ("Texture Scale", Float) = 1.0 + } + + SubShader + { + Tags + { + "RenderType"="Opaque" + } + LOD 200 + + CGPROGRAM + #pragma surface surf Lambert + + sampler2D _MainTex; + fixed4 _Color; + float _Scale; + + struct Input + { + float3 worldNormal; + float3 worldPos; + }; + + void surf(Input IN, inout SurfaceOutput o) + { + float2 UV; + fixed4 c; + + if (abs(IN.worldNormal.x) > 0.5) + { + UV = IN.worldPos.yz; // side + c = tex2D(_MainTex, UV * _Scale); // use WALLSIDE texture + } + else if (abs(IN.worldNormal.z) > 0.5) + { + UV = IN.worldPos.xy; // front + c = tex2D(_MainTex, UV * _Scale); // use WALL texture + } + else + { + UV = IN.worldPos.xz; // top + c = tex2D(_MainTex, UV * _Scale); // use FLR texture + } + + o.Albedo = c.rgb * _Color; + } + ENDCG + } + + Fallback "VertexLit" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMWorldspace.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMWorldspace.shader.meta new file mode 100644 index 0000000..5ff9c87 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMWorldspace.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 93b39336c7407ba4cb17a6d77dfa9605 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlways.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlways.shader new file mode 100644 index 0000000..0d6a646 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlways.shader @@ -0,0 +1,88 @@ +Shader "MoreMountains/MMZTestAlways" +{ + Properties + { + [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Cull Off + Lighting Off + ZWrite Off + Blend One OneMinusSrcAlpha + ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile _ PIXELSNAP_ON + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + fixed4 _Color; + + v2f vert(appdata_t IN) + { + v2f OUT; + OUT.vertex = UnityObjectToClipPos(IN.vertex); + OUT.texcoord = IN.texcoord; + OUT.color = IN.color * _Color; + #ifdef PIXELSNAP_ON + OUT.vertex = UnityPixelSnap (OUT.vertex); + #endif + + return OUT; + } + + sampler2D _MainTex; + sampler2D _AlphaTex; + float _AlphaSplitEnabled; + + fixed4 SampleSpriteTexture(float2 uv) + { + fixed4 color = tex2D(_MainTex, uv); + + #if UNITY_TEXTURE_ALPHASPLIT_ALLOWED + if (_AlphaSplitEnabled) + color.a = tex2D (_AlphaTex, uv).r; + #endif + return color; + } + + fixed4 frag(v2f IN) : SV_Target + { + fixed4 c = SampleSpriteTexture(IN.texcoord) * IN.color; + c.rgb *= c.a; + return c; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlways.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlways.shader.meta new file mode 100644 index 0000000..93d24a5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlways.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 31b8f52d70379eb439f5a4ca78a1413b +timeCreated: 1522594522 +licenseType: Store +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlwaysAdditive.shader b/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlwaysAdditive.shader new file mode 100644 index 0000000..37d8671 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlwaysAdditive.shader @@ -0,0 +1,86 @@ +Shader "MoreMountains/MMZTestAlwaysAdditive" +{ + Properties + { + _TintColor("Tint Color", Color) = (0.5,0.5,0.5,0.5) + _MainTex("Particle Texture", 2D) = "white" {} + _InvFade("Soft Particles Factor", Range(0.01,3.0)) = 1.0 + } + + Category + { + Tags + { + "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent" "PreviewType" = "Plane" + } + Blend SrcAlpha One + ColorMask RGB + Cull Off Lighting Off ZWrite Off + + SubShader + { + + Cull Off + Lighting Off + ZWrite Off + ZTest Always + Pass + { + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma target 2.0 + #pragma multi_compile_particles + #pragma multi_compile_fog + + #include "UnityCG.cginc" + + sampler2D _MainTex; + fixed4 _TintColor; + + struct appdata_t + { + float4 vertex : POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + UNITY_FOG_COORDS(1) + UNITY_VERTEX_OUTPUT_STEREO + }; + + float4 _MainTex_ST; + + v2f vert(appdata_t v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.vertex = UnityObjectToClipPos(v.vertex); + o.color = v.color; + o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); + UNITY_TRANSFER_FOG(o, o.vertex); + return o; + } + + UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); + float _InvFade; + + fixed4 frag(v2f i) : SV_Target + { + fixed4 col = 2.0f * i.color * _TintColor * tex2D(_MainTex, i.texcoord); + UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(0,0,0,0)); + return col; + } + ENDCG + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlwaysAdditive.shader.meta b/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlwaysAdditive.shader.meta new file mode 100644 index 0000000..1407b58 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMShaders/MMZTestAlwaysAdditive.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e5691787f973b2c4c9e7333c45119dd2 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMSprites.meta b/Assets/Feel/MMTools/Accessories/MMSprites.meta new file mode 100644 index 0000000..2bb4493 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 98772f702cd59204b802fadc927b12cc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer.meta b/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer.meta new file mode 100644 index 0000000..cc137aa --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0f2eb13ffc08c314fb3483bf37a1bedc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer/MMBezierLineRenderer.cs b/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer/MMBezierLineRenderer.cs new file mode 100644 index 0000000..6508156 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer/MMBezierLineRenderer.cs @@ -0,0 +1,111 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a line renderer and it'll add control points that let you turn your line into a bezier curve + /// + [ExecuteAlways] + [RequireComponent(typeof(LineRenderer))] + [AddComponentMenu("More Mountains/Tools/Sprites/MMBezierLineRenderer")] + public class MMBezierLineRenderer : MonoBehaviour + { + /// a list of handles to control your line. Usually 4, but you can have more. + public Transform[] AdjustmentHandles; + /// the amount of segments of the line renderer (more segments, less visible straight lines) + public int NumberOfSegments = 50; + /// the sorting layer for this line renderer + public string SortingLayerName = "Default"; + /// the amount of curves we're working with + [MMReadOnly] + public int NumberOfCurves = 0; + + protected int _sortingLayerID; + protected LineRenderer _lineRenderer; + protected Vector3 _point; + protected Vector3 _p; + protected bool _initialized = false; + + /// + /// On Awake we initialize our line renderer + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// Grabs the sorting layer, computes the amount of curves + /// + protected virtual void Initialization() + { + if (_initialized) + { + return; + } + + _sortingLayerID = SortingLayer.NameToID(SortingLayerName); + + NumberOfCurves = (int)AdjustmentHandles.Length / 3; + + _lineRenderer = GetComponent(); + if (_lineRenderer != null) + { + _lineRenderer.sortingLayerID = _sortingLayerID; + } + _initialized = true; + } + + /// + /// On Update we draw our curve + /// + protected virtual void LateUpdate() + { + DrawCurve(); + } + + /// + /// For each point, determines the bezier position and feeds it to the line renderer + /// + protected virtual void DrawCurve() + { + for (int i = 0; i < NumberOfCurves; i++) + { + for (int j = 1; j <= NumberOfSegments; j++) + { + float t = (j - 1) / (float)(NumberOfSegments - 1); + int pointIndex = i * 3; + _point = BezierPoint(t, AdjustmentHandles[pointIndex].position, AdjustmentHandles[pointIndex + 1].position, AdjustmentHandles[pointIndex + 2].position, AdjustmentHandles[pointIndex + 3].position); + _lineRenderer.positionCount = (i * NumberOfSegments) + j; + _lineRenderer.SetPosition((i * NumberOfSegments) + (j - 1), _point); + } + } + } + + /// + /// Computes the coordinates of a point on the bezier curve controlled by p0, p1, p2 and p3 + /// + /// + /// + /// + /// + /// + /// + protected virtual Vector3 BezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) + { + float u = 1 - t; + float tt = t * t; + float uu = u * u; + float uuu = uu * u; + float ttt = tt * t; + + _p = uuu * p0; + _p += 3 * uu * t * p1; + _p += 3 * u * tt * p2; + _p += ttt * p3; + + return _p; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer/MMBezierLineRenderer.cs.meta b/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer/MMBezierLineRenderer.cs.meta new file mode 100644 index 0000000..b3386cd --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/BezierLineRenderer/MMBezierLineRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 177926c7a52cdb247b4ea692ea51aa68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/MMAutoOrderInLayer.cs b/Assets/Feel/MMTools/Accessories/MMSprites/MMAutoOrderInLayer.cs new file mode 100644 index 0000000..91d31b9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/MMAutoOrderInLayer.cs @@ -0,0 +1,117 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + [RequireComponent(typeof(SpriteRenderer))] + /// + /// Add this component to an object to have it pick a new order in layer on start, useful to have unique sorting layer numbers + /// + [AddComponentMenu("More Mountains/Tools/Sprites/MMAutoOrderInLayer")] + public class MMAutoOrderInLayer : MonoBehaviour + { + static int CurrentMaxCharacterOrderInLayer = 0; + + [Header("Global Counter")] + [MMInformation("Add this component to an object with a sprite renderer, and it'll give it a new order in layer based on the settings defined here. First is the global counter increment, or how much you'd like to increment the layer order between two objects on that same layer.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// the number by which to increment each new object's order in layer + public int GlobalCounterIncrement = 5; + + [Header("Parent")] + [MMInformation("You can also decide to determine the new layer order based on the parent sprite's order (it'll have to be on the same layer).",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// if this is true, the new order in layer value will be based on the highest order value found on a parent with a similar sorting layer + public bool BasedOnParentOrder = false; + /// if BasedOnParentOrder is true, the new value will be the parent's order value + this value + public int ParentIncrement = 1; + + [Header("Children")] + [MMInformation("And here you can decide to apply your new layer order to all children.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// if this is true, the new order value will be passed to all children with a similar sorting layer + public bool ApplyNewOrderToChildren = false; + /// the value by which the new order value should be incremented to pass it to children + public int ChildrenIncrement = 0; + + protected SpriteRenderer _spriteRenderer; + + /// + /// On Start, we get our sprite renderer and determine the new order in layer + /// + protected virtual void Start() + { + Initialization(); + AutomateLayerOrder(); + } + + /// + /// Gets the sprite renderer component and stores it + /// + protected virtual void Initialization() + { + _spriteRenderer = GetComponent(); + } + + /// + /// Picks a new order in layer based on the inspector's settings + /// + protected virtual void AutomateLayerOrder() + { + int newOrder = 0; + + // if there's no sprite renderer on this object, we do nothing and exit + if (_spriteRenderer == null) + { + return; + } + + // if we're supposed to base our new order in layer value on the parent's value + if (BasedOnParentOrder) + { + int maxLayerOrder = 0; + Component[] spriteRenderers = GetComponentsInParent( typeof(SpriteRenderer) ); + + // we look for all sprite renderers in parent objects + if( spriteRenderers != null ) + { + foreach( SpriteRenderer spriteRenderer in spriteRenderers ) + { + // if we find a parent with a sprite renderer, on the same sorting layer and with a higher sorting value than previously found + if ( (spriteRenderer.sortingLayerID == _spriteRenderer.sortingLayerID) + && (spriteRenderer.sortingOrder > maxLayerOrder)) + { + // we store the new value + maxLayerOrder = spriteRenderer.sortingOrder; + } + } + // we set our new value to the highest value found, plus our increment + newOrder = maxLayerOrder + ParentIncrement; + } + } + else + { + // if we're not based on parent, we base our pick on the current max order in layer + newOrder = CurrentMaxCharacterOrderInLayer + GlobalCounterIncrement; + // we increment the global order index + CurrentMaxCharacterOrderInLayer += GlobalCounterIncrement; + } + + // we apply our new order value + _spriteRenderer.sortingOrder = newOrder; + + // if we need to apply that new value to all children, we do it + if (ApplyNewOrderToChildren) + { + Component[] childrenSpriteRenderers = GetComponentsInChildren( typeof(SpriteRenderer) ); + if( childrenSpriteRenderers != null ) + { + foreach( SpriteRenderer childSpriteRenderer in childrenSpriteRenderers ) + { + if (childSpriteRenderer.sortingLayerID == _spriteRenderer.sortingLayerID) + { + childSpriteRenderer.sortingOrder = newOrder + ChildrenIncrement; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/MMAutoOrderInLayer.cs.meta b/Assets/Feel/MMTools/Accessories/MMSprites/MMAutoOrderInLayer.cs.meta new file mode 100644 index 0000000..ac03c6b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/MMAutoOrderInLayer.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: aeb67f1f5c67282488b877818e410f30 +timeCreated: 1523894079 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererCircle.cs b/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererCircle.cs new file mode 100644 index 0000000..f272c95 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererCircle.cs @@ -0,0 +1,175 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [RequireComponent(typeof(LineRenderer))] + public class MMLineRendererCircle : MonoBehaviour + { + /// the possible axis + public enum DrawAxis { X, Y, Z }; + + [Header("Draw Axis")] + /// the axis on which to draw the circle + [Tooltip("the axis on which to draw the circle")] + public DrawAxis Axis = DrawAxis.Z; + /// the distance by which to push the circle on the draw axis + [Tooltip("the distance by which to push the circle on the draw axis")] + public float NormalOffset = 0; + + [Header("Geometry")] + /// the amount of segments on the line renderer. More segments, more smoothness, more performance cost + [Tooltip("the amount of segments on the line renderer. More segments, more smoothness, more performance cost")] + [Range(0, 2000)] + public int PositionsCount = 60; + + [Header("Shape")] + /// the length of the circle's horizontal radius + [Tooltip("the length of the circle's horizontal radius")] + public float HorizontalRadius = 10; + /// the length of the circle's vertical radius + [Tooltip("the length of the circle's vertical radius")] + public float VerticalRadius = 10; + + [Header("Debug")] + /// if this is true, the circle will be redrawn every time you change a value in the inspector, otherwise you'll have to call the DrawCircle method (or press the debug button below) + [Tooltip("if this is true, the circle will be redrawn every time you change a value in the inspector, otherwise you'll have to call the DrawCircle method (or press the debug button below)")] + public bool AutoRedrawOnValuesChange = false; + /// a test button used to call the DrawCircle method + [MMInspectorButton("DrawCircle")] + public bool DrawCircleButton; + + protected LineRenderer _line; + protected Vector3 _newPosition; + protected float _angle, _x, _y, _z; + + /// + /// On Awake we initialize our line renderer and draw our circle + /// + protected virtual void Awake() + { + Initialization(); + DrawCircle(); + } + + /// + /// Grabs the line renderer and sets it up + /// + protected virtual void Initialization() + { + _line = gameObject.GetComponent(); + _line.positionCount = PositionsCount + 1; + _line.useWorldSpace = false; + } + + /// + /// Sets all point positions for our line renderer + /// + public virtual void DrawCircle() + { + _angle = 0f; + _z = NormalOffset; + + switch(Axis) + { + case DrawAxis.X: + DrawCircleX(); + break; + case DrawAxis.Y: + DrawCircleY(); + break; + case DrawAxis.Z: + DrawCircleZ(); + break; + } + } + + /// + /// Computes the x position of the new point + /// + /// + protected virtual float ComputeX() + { + return Mathf.Cos (Mathf.Deg2Rad * _angle) * HorizontalRadius; + } + + /// + /// Computes the y position of the new point + /// + /// + protected virtual float ComputeY() + { + return Mathf.Sin (Mathf.Deg2Rad * _angle) * VerticalRadius; + } + + /// + /// Draws a circle on the x axis + /// + protected virtual void DrawCircleX() + { + for (int i = 0; i < (PositionsCount + 1); i++) + { + _x = ComputeX(); + _y = ComputeY(); + + _newPosition.x = _z; + _newPosition.y = _y; + _newPosition.z = _x; + _line.SetPosition(i, _newPosition); + + _angle += (360f / PositionsCount); + } + } + + /// + /// Draws a circle on the y axis + /// + protected virtual void DrawCircleY() + { + for (int i = 0; i < (PositionsCount + 1); i++) + { + _x = ComputeX(); + _y = ComputeY(); + + _newPosition.x = _y; + _newPosition.y = _z; + _newPosition.z = _x; + _line.SetPosition(i, _newPosition); + + _angle += (360f / PositionsCount); + } + } + + /// + /// Draws a circle on the z axis + /// + protected virtual void DrawCircleZ() + { + for (int i = 0; i < (PositionsCount + 1); i++) + { + _x = ComputeX(); + _y = ComputeY(); + + _newPosition.x = _x; + _newPosition.y = _y; + _newPosition.z = _z; + _line.SetPosition(i, _newPosition); + + _angle += (360f / PositionsCount); + } + } + + /// + /// On Validate we redraw our circle if needed + /// + protected virtual void OnValidate() + { + if (AutoRedrawOnValuesChange) + { + DrawCircle(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererCircle.cs.meta b/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererCircle.cs.meta new file mode 100644 index 0000000..c0630bf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererCircle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afc6104c5fc7fe244bf333c8d59aaa10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererDriver.cs b/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererDriver.cs new file mode 100644 index 0000000..f6773d7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererDriver.cs @@ -0,0 +1,95 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This component, added to a line renderer, will let you fill a list of transforms, and bind their positions to the linerenderer's positions. + /// + [RequireComponent(typeof(LineRenderer))] + public class MMLineRendererDriver : MonoBehaviour + { + [Header("Position Drivers")] + + /// the list of targets - their quantity has to match the LineRenderer's positions count + public List Targets; + /// whether or not to keep both in sync at update + public bool BindPositionsToTargetsAtUpdate = true; + + [Header("Binding")] + + /// a test button + [MMInspectorButton("Bind")] + public bool BindButton; + + protected LineRenderer _lineRenderer; + protected bool _countsMatch = false; + + /// + /// On Awake we initialize our driver + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// Grabs the line renderer, tests counts + /// + protected virtual void Initialization() + { + _lineRenderer = this.gameObject.GetComponent(); + _countsMatch = CheckPositionCounts(); + if (!_countsMatch) + { + Debug.LogWarning(this.name + ", MMLineRendererDriver's Targets list doesn't have the same amount of entries as the LineRender's Positions array. It won't work."); + } + } + + /// + /// On Update we bind our positions to targets if needed + /// + protected virtual void Update() + { + if (BindPositionsToTargetsAtUpdate) + { + BindPositionsToTargets(); + } + } + + /// + /// A method meant to be called by the inspector button + /// + protected virtual void Bind() + { + Initialization(); + BindPositionsToTargets(); + } + + /// + /// Goes through all the targets and assigns their positions to the LineRenderer's positions + /// + public virtual void BindPositionsToTargets() + { + if (!_countsMatch) + { + return; + } + + for (int i = 0; i < Targets.Count; i++) + { + _lineRenderer.SetPosition(i, Targets[i].position); + } + } + + /// + /// Makes sure the counts match + /// + /// + protected virtual bool CheckPositionCounts() + { + return Targets.Count == _lineRenderer.positionCount; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererDriver.cs.meta b/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererDriver.cs.meta new file mode 100644 index 0000000..2d6cfc1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMSprites/MMLineRendererDriver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca735d93c2b69c247951881f5d6f1be2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps.meta b/Assets/Feel/MMTools/Accessories/MMTilemaps.meta new file mode 100644 index 0000000..5a924d8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d128a7262bf7c534ab13acac6ebdd077 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemap.cs b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemap.cs new file mode 100644 index 0000000..06027c0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemap.cs @@ -0,0 +1,92 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Tilemaps; +using Random = System.Random; + +namespace MoreMountains.Tools +{ + /// + /// A collection of helper methods for interacting with Tilemaps + /// + public class MMTilemap : MonoBehaviour + { + /// + /// Returns a random world position on the specified tilemap/grid combo, filled or not based on the shouldBeFilled flag + /// + /// + /// + /// + /// + /// + /// + /// + public static Vector2 GetRandomPosition(Tilemap targetTilemap, Grid grid, int width, int height, bool shouldBeFilled = true, int maxIterations = 1000) + { + int iterationsCount = 0; + Vector3Int randomCoordinate = Vector3Int.zero; + + while (iterationsCount < maxIterations) + { + randomCoordinate.x = UnityEngine.Random.Range(0, width); + randomCoordinate.y = UnityEngine.Random.Range(0, height); + randomCoordinate += MMTilemapGridRenderer.ComputeOffset(width-1, height-1); + + bool hasTile = targetTilemap.HasTile(randomCoordinate); + if (hasTile == shouldBeFilled) + { + return targetTilemap.CellToWorld(randomCoordinate) + (grid.cellSize / 2); + } + + iterationsCount++; + } + + return Vector2.zero; + } + + /// + /// Returns a random position on the ground floor of the grid + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static Vector2 GetRandomPositionOnGround(Tilemap targetTilemap, Grid grid, int width, int height, int startingHeight, int xMin, int xMax, bool shouldBeFilled = true, int maxIterations = 1000) + { + int iterationsCount = 0; + Vector3Int randomCoordinate = Vector3Int.zero; + + while (iterationsCount < maxIterations) + { + randomCoordinate.x = UnityEngine.Random.Range(xMin, xMax); + randomCoordinate.y = startingHeight; + randomCoordinate += MMTilemapGridRenderer.ComputeOffset(width-1, height-1); + + int counter = height; + + while (counter > 0) + { + bool hasTile = targetTilemap.HasTile(randomCoordinate); + if (hasTile == shouldBeFilled) + { + randomCoordinate.y++; + return targetTilemap.CellToWorld(randomCoordinate) + (grid.cellSize / 2); + } + + randomCoordinate.y--; + counter--; + } + + iterationsCount++; + } + + return Vector2.zero; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemap.cs.meta b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemap.cs.meta new file mode 100644 index 0000000..9856170 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71bd7b8dc6ab21844b34803a4084a56e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapBoolean.cs b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapBoolean.cs new file mode 100644 index 0000000..9712d0b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapBoolean.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using UnityEngine.Tilemaps; + +namespace MoreMountains.Tools +{ + [AddComponentMenu("More Mountains/Tools/Tilemaps/MMTilemapBoolean")] + public class MMTilemapBoolean : MonoBehaviour + { + public Tilemap TilemapToClean; + + [MMInspectorButton("BooleanClean")] + public bool BooleanCleanButton; + + protected Tilemap _tilemap; + + /// + /// This method will copy the reference tilemap into the one on this gameobject + /// + public virtual void BooleanClean() + { + if (TilemapToClean == null) + { + return; + } + + _tilemap = this.gameObject.GetComponent(); + + // we grab all filled positions from the ref tilemap + foreach (Vector3Int pos in _tilemap.cellBounds.allPositionsWithin) + { + Vector3Int localPlace = new Vector3Int(pos.x, pos.y, pos.z); + if (_tilemap.HasTile(localPlace)) + { + if (TilemapToClean.HasTile(localPlace)) + { + TilemapToClean.SetTile(localPlace, null); + } + } + } + // we clear our tilemap and resize it + _tilemap.RefreshAllTiles(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapBoolean.cs.meta b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapBoolean.cs.meta new file mode 100644 index 0000000..ae63f0d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapBoolean.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed5d5aca24f393844931ca9f8c7e05c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapCleaner.cs b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapCleaner.cs new file mode 100644 index 0000000..249ba3e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapCleaner.cs @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Tilemaps; + +namespace MoreMountains.Tools +{ + /// + /// A super simple component you can add to a tilemap to get a button to clean it from all tiles + /// + public class MMTilemapCleaner : MonoBehaviour + { + /// Debug buttons + [MMInspectorButton("Clean")] + public bool CleanButton; + [MMInspectorButton("CleanAllChildren")] + public bool CleanAllButton; + + protected Tilemap _tilemap; + protected Tilemap[] _tilemaps; + + /// + /// Cleans all tiles on the corresponding tilemap + /// + public virtual void Clean() + { + _tilemap = this.gameObject.GetComponent(); + if (_tilemap != null) + { + _tilemap.ClearAllTiles(); + } + } + + /// + /// Cleans all tiles on all tilemaps that are set as children of this object + /// + public virtual void CleanAllChildren() + { + _tilemaps = GetComponentsInChildren(); + + foreach (Tilemap tilemap in _tilemaps) + { + tilemap.ClearAllTiles(); + } + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapCleaner.cs.meta b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapCleaner.cs.meta new file mode 100644 index 0000000..54ead3c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapCleaner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 158241bba510d154b9d2e7d7ab8d4fd7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapGridRenderer.cs b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapGridRenderer.cs new file mode 100644 index 0000000..25ad660 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapGridRenderer.cs @@ -0,0 +1,188 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Tilemaps; + +namespace MoreMountains.Tools +{ + public class MMTilemapGridRenderer + { + /// + /// Renders the specified grid on the specified tilemap, with optional slow mode (only works at runtime) + /// + /// + /// + /// + /// + /// + /// + /// + public static void RenderGrid(int[,] grid, MMTilemapGeneratorLayer layer, bool slowRender = false, float slowRenderDuration = 1f, + MMTweenType slowRenderTweenType = null, MonoBehaviour slowRenderSupport = null) + { + if (layer.FusionMode == MMTilemapGeneratorLayer.FusionModes.Normal) + { + ClearTilemap(layer.TargetTilemap); + } + TileBase tile = layer.Tile; + if (layer.FusionMode == MMTilemapGeneratorLayer.FusionModes.Combine) + { + grid = MMGridGenerator.InvertGrid(grid); + tile = null; + } + if (layer.FusionMode == MMTilemapGeneratorLayer.FusionModes.Subtract) + { + grid = MMGridGenerator.InvertGrid(grid); + } + + if (!slowRender || !Application.isPlaying) + { + DrawGrid(grid, layer.TargetTilemap, tile, 0, TotalFilledBlocks(grid)); + } + else + { + slowRenderSupport.StartCoroutine(SlowRenderGrid(grid, layer.TargetTilemap, tile, slowRenderDuration, slowRenderTweenType, 60)); + } + + if (!Application.isPlaying && slowRender) + { + Debug.LogWarning("Rendering maps in SlowRender mode is only supported at runtime."); + } + } + + /// + /// Renders a grid chunk by chunk - runtime only + /// + /// + /// + /// + /// + /// + /// + /// + public static IEnumerator SlowRenderGrid(int[,] grid, Tilemap tilemap, TileBase tile, float slowRenderDuration, MMTweenType slowRenderTweenType, int frameRate) + { + int totalBlocks = TotalFilledBlocks(grid); + totalBlocks = (totalBlocks == 0) ? 1 : totalBlocks; + frameRate = (frameRate == 0) ? 1 : frameRate; + float refreshFrequency = 1f / frameRate; + float startedAt = Time.unscaledTime; + float lastWaitAt = startedAt; + int drawnBlocks = 0; + int lastIndex = 0; + + while (Time.unscaledTime - startedAt < slowRenderDuration) + { + while (Time.unscaledTime - lastWaitAt < refreshFrequency) + { + yield return null; + } + + int remainingBlocks = totalBlocks - drawnBlocks; + float elapsedTime = Time.unscaledTime - startedAt; + float remainingTime = slowRenderDuration - elapsedTime; + float normalizedProgress = MMMaths.Remap(elapsedTime, 0f, slowRenderDuration, 0f, 1f); + float curveProgress = MMTween.Tween(normalizedProgress, 0f, 1f, 0f, 1f, slowRenderTweenType); + float ratio = 1 - (normalizedProgress - curveProgress); + + int blocksToDraw = Mathf.RoundToInt((remainingBlocks / remainingTime) * refreshFrequency * ratio); + + lastIndex = DrawGrid(grid, tilemap, tile, lastIndex, blocksToDraw); + drawnBlocks += blocksToDraw; + lastWaitAt = Time.unscaledTime; + } + DrawGrid(grid, tilemap, tile, lastIndex, totalBlocks - lastIndex); + } + + /// + /// Returns the total amount of filled blocks in a grid + /// + /// + /// + public static int TotalFilledBlocks(int[,] grid) + { + int width = grid.GetUpperBound(0); + int height = grid.GetUpperBound(1); + + int totalBlocks = 0; + for (int i = 0; i <= width ; i++) + { + for (int j = 0; j <= height; j++) + { + if (grid[i, j] == 1) + { + totalBlocks++; + } + } + } + return totalBlocks; + } + + /// + /// Draws the specified section of a grid on a target tilemap + /// + /// + /// + /// + /// + /// + /// + private static int DrawGrid(int[,] grid, Tilemap tilemap, TileBase tile, int startIndex, int numberOfTilesToDraw) + { + int width = grid.GetUpperBound(0); + int height = grid.GetUpperBound(1); + + tilemap.RefreshAllTiles(); + + int counter = 0; + int drawCount = 0; + + for (int i = 0; i <= width ; i++) + { + for (int j = 0; j <= height; j++) + { + if (grid[i, j] == 1) + { + if (counter >= startIndex) + { + Vector3Int tilePosition = new Vector3Int(i, j, 0); + tilePosition += ComputeOffset(width, height); + tilemap.SetTile(tilePosition, tile); + drawCount++; + } + + if (drawCount > numberOfTilesToDraw) + { + return counter; + } + counter++; + } + } + } + return counter; + } + + /// + /// Determines the offset to apply to a grid to have it centered + /// + /// + /// + /// + public static Vector3Int ComputeOffset(int width, int height) + { + Vector3Int offset = new Vector3Int(width + 2, height + 2, 0); + offset = offset - offset/2; + return -offset; + } + + /// + /// Clears and refreshes an entire tilemap + /// + /// + public static void ClearTilemap(Tilemap tilemap) + { + tilemap.ClearAllTiles(); + tilemap.RefreshAllTiles(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapGridRenderer.cs.meta b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapGridRenderer.cs.meta new file mode 100644 index 0000000..63f5761 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapGridRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c8fc9be87fcf9f4c99405f32483ccd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapShadow.cs b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapShadow.cs new file mode 100644 index 0000000..e00fbcc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapShadow.cs @@ -0,0 +1,85 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.Tilemaps; + +namespace MoreMountains.Tools +{ + /// + /// A class to put on a tilemap so it acts as a shadow/copy of another reference tilemap. + /// Useful for wall shadows for example. + /// Offsetting the tilemap and changing its sorting order etc is done via the regular components + /// + [ExecuteAlways] + [AddComponentMenu("More Mountains/Tools/Tilemaps/MMTilemapShadow")] + [RequireComponent(typeof(Tilemap))] + public class MMTilemapShadow : MonoBehaviour + { + /// the tilemap to copy + public Tilemap ReferenceTilemap; + + [MMInspectorButton("UpdateShadows")] + public bool UpdateShadowButton; + + protected Tilemap _tilemap; + + /// + /// This method will copy the reference tilemap into the one on this gameobject + /// + public virtual void UpdateShadows() + { + if (ReferenceTilemap == null) + { + return; + } + + _tilemap = this.gameObject.GetComponent(); + + Copy(ReferenceTilemap, _tilemap); + } + + /// + /// Copies the source tilemap on the destination tilemap + /// + /// + /// + public static void Copy(Tilemap source, Tilemap destination) + { + source.RefreshAllTiles(); + destination.RefreshAllTiles(); + + List referenceTilemapPositions = new List(); + + // we grab all filled positions from the ref tilemap + foreach (Vector3Int pos in source.cellBounds.allPositionsWithin) + { + Vector3Int localPlace = new Vector3Int(pos.x, pos.y, pos.z); + if (source.HasTile(localPlace)) + { + referenceTilemapPositions.Add(localPlace); + } + } + + // we turn our list into an array + Vector3Int[] positions = new Vector3Int[referenceTilemapPositions.Count]; + TileBase[] allTiles = new TileBase[referenceTilemapPositions.Count]; + int i = 0; + foreach(Vector3Int tilePosition in referenceTilemapPositions) + { + positions[i] = tilePosition; + allTiles[i] = source.GetTile(tilePosition); + i++; + } + + // we clear our tilemap and resize it + destination.ClearAllTiles(); + destination.RefreshAllTiles(); + destination.size = source.size; + destination.origin = source.origin; + destination.ResizeBounds(); + + // we feed it our positions + destination.SetTiles(positions, allTiles); + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapShadow.cs.meta b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapShadow.cs.meta new file mode 100644 index 0000000..7ae401f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMTilemaps/MMTilemapShadow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96fdc4f00baddf6498aa5cfe735a2321 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities.meta b/Assets/Feel/MMTools/Accessories/MMUtilities.meta new file mode 100644 index 0000000..b34a59f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0baa5ccfbc1c6644b1332c2656590c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMApplicationQuit.cs b/Assets/Feel/MMTools/Accessories/MMUtilities/MMApplicationQuit.cs new file mode 100644 index 0000000..5fd8dbb --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMApplicationQuit.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A super simple mono you can add to an object to call its Quit method, which will force the application to quit. + /// + public class MMApplicationQuit : MonoBehaviour + { + [Header("Debug")] + [MMInspectorButton("Quit")] + public bool QuitButton; + + /// + /// Forces the application to quit + /// + public virtual void Quit() + { + #if UNITY_EDITOR + UnityEditor.EditorApplication.isPlaying = false; + #else + Application.Quit(); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMApplicationQuit.cs.meta b/Assets/Feel/MMTools/Accessories/MMUtilities/MMApplicationQuit.cs.meta new file mode 100644 index 0000000..7583847 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMApplicationQuit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d8e35f0e39f9744095dbb47ae3363a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMDebugController.cs b/Assets/Feel/MMTools/Accessories/MMUtilities/MMDebugController.cs new file mode 100644 index 0000000..e6a1842 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMDebugController.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to an empty object in your scene and it'll act as a point of control to enable or disable logs and debug draws + /// + [AddComponentMenu("More Mountains/Tools/Utilities/MMDebugController")] + public class MMDebugController : MonoBehaviour + { + /// whether or not debug logs (MMDebug.DebugLogTime, MMDebug.DebugOnScreen) should be displayed + public bool DebugLogsEnabled = true; + /// whether or not debug draws should be executed + public bool DebugDrawEnabled = true; + + /// + /// On Awake we turn our static debug checks on or off + /// + protected virtual void Awake() + { + MMDebug.SetDebugLogsEnabled(DebugLogsEnabled); + MMDebug.SetDebugDrawEnabled(DebugDrawEnabled); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMDebugController.cs.meta b/Assets/Feel/MMTools/Accessories/MMUtilities/MMDebugController.cs.meta new file mode 100644 index 0000000..3a107ff --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMDebugController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fcb0ff7991255940900581218e0053b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMLayer.cs b/Assets/Feel/MMTools/Accessories/MMUtilities/MMLayer.cs new file mode 100644 index 0000000..f652481 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMLayer.cs @@ -0,0 +1,29 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + [System.Serializable] + public class MMLayer + { + [SerializeField] + protected int _layerIndex = 0; + + public virtual int LayerIndex + { + get { return _layerIndex; } + } + + public virtual void Set(int _layerIndex) + { + if (_layerIndex > 0 && _layerIndex < 32) + { + this._layerIndex = _layerIndex; + } + } + + public virtual int Mask + { + get { return 1 << _layerIndex; } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMLayer.cs.meta b/Assets/Feel/MMTools/Accessories/MMUtilities/MMLayer.cs.meta new file mode 100644 index 0000000..71c5f46 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMLayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adde5948123bd8743a0048c044871b09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMOpenURL.cs b/Assets/Feel/MMTools/Accessories/MMUtilities/MMOpenURL.cs new file mode 100644 index 0000000..14b059b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMOpenURL.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class used to open a URL specified in its inspector + /// + [AddComponentMenu("More Mountains/Tools/Utilities/MMOpenURL")] + public class MMOpenURL : MonoBehaviour + { + /// the URL to open when calling OpenURL() + public string DestinationURL; + + /// + /// Opens the URL specified in the DestinationURL field + /// + public virtual void OpenURL() + { + Application.OpenURL(DestinationURL); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMOpenURL.cs.meta b/Assets/Feel/MMTools/Accessories/MMUtilities/MMOpenURL.cs.meta new file mode 100644 index 0000000..6a0459f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMOpenURL.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: dee3b2b4131e71b4896b58b4361de7ac +timeCreated: 1523905996 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneRestarter.cs b/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneRestarter.cs new file mode 100644 index 0000000..03676fe --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneRestarter.cs @@ -0,0 +1,84 @@ +using UnityEngine; +using UnityEngine.SceneManagement; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace MoreMountains.Tools +{ + /// + /// This component lets you restart a scene by pressing a key + /// + [AddComponentMenu("More Mountains/Tools/Utilities/MMSceneRestarter")] + public class MMSceneRestarter : MonoBehaviour + { + /// the possible restart modes + public enum RestartModes { ActiveScene, SpecificScene } + + [Header("Settings")] + /// the selected restart mode, either the currently active scene, or one by name + public RestartModes RestartMode = RestartModes.ActiveScene; + /// the name of the scene to load if we're in specific scene mode + [MMEnumCondition("RestartMode", (int)RestartModes.SpecificScene)] + public string SceneName; + /// the load mode + public LoadSceneMode LoadMode = LoadSceneMode.Single; + + [Header("Input")] + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + /// the key to press to restart manually + public Key RestarterKey = Key.Backspace; + #else + /// the key to press to restart manually + public KeyCode RestarterKeyCode = KeyCode.Backspace; + #endif + + protected string _newSceneName; + + /// + /// On Update, looks for input + /// + protected virtual void Update() + { + HandleInput(); + } + + /// + /// Looks for a key press of the specified key + /// + protected virtual void HandleInput() + { + bool keyPressed = false; + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + keyPressed = Keyboard.current[RestarterKey].wasPressedThisFrame; + #else + keyPressed = Input.GetKeyDown(RestarterKeyCode); + #endif + if (keyPressed) + { + RestartScene(); + } + } + + /// + /// Restarts the scene based on the specified settings + /// + public virtual void RestartScene() + { + MMDebug.DebugLogInfo("Scene restarted by MMSceneRestarter"); + switch (RestartMode) + { + case RestartModes.ActiveScene: + Scene scene = SceneManager.GetActiveScene(); + _newSceneName = scene.name; + break; + + case RestartModes.SpecificScene: + _newSceneName = SceneName; + break; + } + SceneManager.LoadScene(_newSceneName, LoadMode); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneRestarter.cs.meta b/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneRestarter.cs.meta new file mode 100644 index 0000000..6971771 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneRestarter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0988d9b4b34ac9c49a36cf9a04cf5776 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneViewIcon.cs b/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneViewIcon.cs new file mode 100644 index 0000000..7ee23ab --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneViewIcon.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to a gameobject and it'll display its name on the scene view, selected or not. + /// + [AddComponentMenu("More Mountains/Tools/Icons/MMSceneViewIcon")] + + public class MMSceneViewIcon : MonoBehaviour + { + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneViewIcon.cs.meta b/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneViewIcon.cs.meta new file mode 100644 index 0000000..82b1c53 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMSceneViewIcon.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d0cf5074ca154b84c9792d6d8c1e8ab0 +timeCreated: 1523894192 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMScreenshot.cs b/Assets/Feel/MMTools/Accessories/MMUtilities/MMScreenshot.cs new file mode 100644 index 0000000..84711b7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMScreenshot.cs @@ -0,0 +1,139 @@ +using UnityEngine; +using System.IO; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Add this class to an empty game object in your scene and it'll let you take screenshots (meant to be used in Editor) + /// + [AddComponentMenu("More Mountains/Tools/Utilities/MMScreenshot")] + public class MMScreenshot : MonoBehaviour + { + /// the name of the folder (relative to the project's root) to save screenshots to + public string FolderName = "Screenshots"; + /// the method to use to take the screenshot. Screencapture uses the API of the same name, and will let you keep + /// whatever ratio the game view has, RenderTexture renders to a texture of the specified resolution + public enum Methods { ScreenCapture, RenderTexture } + + [Header("Screenshot")] + /// the selected method to take a screenshot with. + public Methods Method = Methods.ScreenCapture; + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + /// the key to press to restart manually + public Key ScreenshotKey = Key.K; + #else + /// the shortcut to watch for to take screenshots + public KeyCode ScreenshotShortcut = KeyCode.K; + #endif + + /// the size by which to multiply the game view when taking the screenshot + [MMEnumCondition("Method", (int)Methods.ScreenCapture)] + public int GameViewSizeMultiplier = 3; + + /// the camera to use to take the screenshot with + [MMEnumCondition("Method", (int)Methods.RenderTexture)] + public Camera TargetCamera; + /// the width of the desired screenshot + [MMEnumCondition("Method", (int)Methods.RenderTexture)] + public int ResolutionWidth; + /// the height of the desired screenshot + [MMEnumCondition("Method", (int)Methods.RenderTexture)] + public int ResolutionHeight; + + [Header("Controls")] + /// a test button to take screenshots with + [MMInspectorButton("TakeScreenshot")] + public bool TakeScreenshotButton; + + /// + /// At late update, we look for input + /// + protected virtual void LateUpdate() + { + DetectInput(); + } + + /// + /// If the user presses the screenshot button, we take one + /// + protected virtual void DetectInput() + { + bool keyPressed = false; + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + keyPressed = Keyboard.current[ScreenshotKey].wasPressedThisFrame; + #else + keyPressed = Input.GetKeyDown(ScreenshotShortcut); + #endif + + if (keyPressed) + { + TakeScreenshot(); + } + } + + /// + /// Takes a screenshot using the specified method and outputs a console log + /// + protected virtual void TakeScreenshot() + { + if (!Directory.Exists(FolderName)) + { + Directory.CreateDirectory(FolderName); + } + + string savePath = ""; + switch (Method) + { + case Methods.ScreenCapture: + savePath = TakeScreenCaptureScreenshot(); + break; + + case Methods.RenderTexture: + savePath = TakeRenderTextureScreenshot(); + break; + } + MMDebug.DebugLogInfo("[MMScreenshot] Screenshot taken and saved at " + savePath); + } + + /// + /// Takes a screenshot using the ScreenCapture API and saves it to file + /// + /// + protected virtual string TakeScreenCaptureScreenshot() + { + float width = Screen.width * GameViewSizeMultiplier; + float height = Screen.height * GameViewSizeMultiplier; + string savePath = FolderName+"/screenshot_" + width + "x" + height + "_" + System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".png"; + + ScreenCapture.CaptureScreenshot(savePath, GameViewSizeMultiplier); + return savePath; + } + + /// + /// Takes a screenshot using a render texture and saves it to file + /// + /// + protected virtual string TakeRenderTextureScreenshot() + { + string savePath = FolderName + "/screenshot_" + ResolutionWidth + "x" + ResolutionHeight + "_" + System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss") + ".png"; + + RenderTexture renderTexture = new RenderTexture(ResolutionWidth, ResolutionHeight, 24); + TargetCamera.targetTexture = renderTexture; + Texture2D screenShot = new Texture2D(ResolutionWidth, ResolutionHeight, TextureFormat.RGB24, false); + TargetCamera.Render(); + RenderTexture.active = renderTexture; + screenShot.ReadPixels(new Rect(0, 0, ResolutionWidth, ResolutionHeight), 0, 0); + TargetCamera.targetTexture = null; + RenderTexture.active = null; + Destroy(renderTexture); + byte[] bytes = screenShot.EncodeToPNG(); + System.IO.File.WriteAllBytes(savePath, bytes); + + return savePath; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMScreenshot.cs.meta b/Assets/Feel/MMTools/Accessories/MMUtilities/MMScreenshot.cs.meta new file mode 100644 index 0000000..e5ce7a3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMScreenshot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 168f80e4ec8a4314c8ca506740626021 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMTransformRandomizer.cs b/Assets/Feel/MMTools/Accessories/MMUtilities/MMTransformRandomizer.cs new file mode 100644 index 0000000..c6e3303 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMTransformRandomizer.cs @@ -0,0 +1,175 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object to randomize its position/rotation/scale on demand or automatically + /// + #if UNITY_EDITOR + [ExecuteAlways] + #endif + public class MMTransformRandomizer : MonoBehaviour + { + /// the possible ways to automatically randomize + public enum AutoExecutionModes { Never, OnAwake, OnStart, OnEnable } + + [Header("Position")] + /// whether or not to randomize position + public bool RandomizePosition = true; + /// the minimum position to apply when randomizing + [MMCondition("RandomizePosition", true)] + public Vector3 MinRandomPosition; + /// the maximum position to apply when randomizing + [MMCondition("RandomizePosition", true)] + public Vector3 MaxRandomPosition; + + [Header("Rotation")] + /// whether or not to randomize rotation + public bool RandomizeRotation = true; + /// the minimum rotation to apply when randomizing (in degrees) + [MMCondition("RandomizeRotation", true)] + public Vector3 MinRandomRotation; + /// the maximum rotation to apply when randomizing (in degrees) + [MMCondition("RandomizeRotation", true)] + public Vector3 MaxRandomRotation; + + [Header("Scale")] + /// whether or not to randomize scale + public bool RandomizeScale = true; + /// the minimum scale to apply when randomizing + [MMCondition("RandomizeScale", true)] + public Vector3 MinRandomScale; + /// the maximum scale to apply when randomizing + [MMCondition("RandomizeScale", true)] + public Vector3 MaxRandomScale; + + [Header("Settings")] + /// whether or not to remove this component after randomizing its attributes + public bool AutoRemoveAfterRandomize = false; + /// whether or not to remove all colliders attached to this object + public bool RemoveAllColliders = false; + /// the selected auto execution mode + public AutoExecutionModes AutoExecutionMode = AutoExecutionModes.Never; + + /// + /// On Awake we randomize if needed + /// + protected virtual void Awake() + { + if (Application.isPlaying && (AutoExecutionMode == AutoExecutionModes.OnAwake)) + { + Randomize(); + } + } + + /// + /// On Start we randomize if needed + /// + protected virtual void Start() + { + if (Application.isPlaying && (AutoExecutionMode == AutoExecutionModes.OnStart)) + { + Randomize(); + } + } + + /// + /// On Enable we randomize if needed + /// + protected virtual void OnEnable() + { + if (Application.isPlaying && (AutoExecutionMode == AutoExecutionModes.OnEnable)) + { + Randomize(); + } + } + + /// + /// Randomizes position, rotation, scale, and cleanups if necessary + /// + public virtual void Randomize() + { + ProcessRandomizePosition(); + ProcessRandomizeRotation(); + ProcessRandomizeScale(); + RemoveColliders(); + Cleanup(); + } + + /// + /// Randomizes the position + /// + protected virtual void ProcessRandomizePosition() + { + if (!RandomizePosition) + { + return; + } + Vector3 randomPosition = MMMaths.RandomVector3(MinRandomPosition, MaxRandomPosition); + this.transform.localPosition += randomPosition; + } + + /// + /// Randomizes the rotation + /// + protected virtual void ProcessRandomizeRotation() + { + if (!RandomizeRotation) + { + return; + } + Vector3 randomRotation = MMMaths.RandomVector3(MinRandomRotation, MaxRandomRotation); + this.transform.localRotation = Quaternion.Euler(randomRotation); + } + + /// + /// Randomizes the scale + /// + protected virtual void ProcessRandomizeScale() + { + if (!RandomizeScale) + { + return; + } + Vector3 randomScale = MMMaths.RandomVector3(MinRandomScale, MaxRandomScale); + this.transform.localScale = randomScale; + } + + /// + /// Removes all colliders attached to this object or its children + /// + protected virtual void RemoveColliders() + { + if (RemoveAllColliders) + { + #if UNITY_EDITOR + Collider[] colliders = this.gameObject.GetComponentsInChildren(); + foreach (Collider collider in colliders) + { + DestroyImmediate(collider); + } + Collider2D[] colliders2D = this.gameObject.GetComponentsInChildren(); + foreach (Collider2D collider2D in colliders2D) + { + DestroyImmediate(collider2D); + } + #endif + } + } + + /// + /// Destroys this component + /// + protected virtual void Cleanup() + { + if (AutoRemoveAfterRandomize) + { + #if UNITY_EDITOR + DestroyImmediate(this); + #endif + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMUtilities/MMTransformRandomizer.cs.meta b/Assets/Feel/MMTools/Accessories/MMUtilities/MMTransformRandomizer.cs.meta new file mode 100644 index 0000000..e8944f8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMUtilities/MMTransformRandomizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07b798a3f371c8f4f9919515319eb447 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX.meta b/Assets/Feel/MMTools/Accessories/MMVFX.meta new file mode 100644 index 0000000..1678c9f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e95e4efe0eb8ea42bf506cf976916f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt.meta new file mode 100644 index 0000000..0f3dcd0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f376cf69791da1948858cc54d2e53ee9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt1.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt1.png new file mode 100644 index 0000000..d90b8c0 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt1.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt1.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt1.png.meta new file mode 100644 index 0000000..62e659a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt1.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: cde03156615a31044a8dc5e05ebc3dc9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt2.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt2.png new file mode 100644 index 0000000..eb9efb6 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt2.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt2.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt2.png.meta new file mode 100644 index 0000000..6a636ce --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt2.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 517afba2f824eb244b94a340fe47a650 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt3.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt3.png new file mode 100644 index 0000000..f30098f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt3.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt3.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt3.png.meta new file mode 100644 index 0000000..794ad20 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt3.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 0448ffbb2d259c74496e9252af0411b6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt4.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt4.png new file mode 100644 index 0000000..7ccd8af Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt4.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt4.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt4.png.meta new file mode 100644 index 0000000..1cf8edf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBloomDirt/MMBloomDirt4.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: c24966fa1ab8c204386b20706d166d8d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 4096 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes.meta new file mode 100644 index 0000000..ecefe6c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c46b4c63e40205444a1f0ae35ada2f26 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush0.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush0.png new file mode 100644 index 0000000..4b89faf Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush0.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush0.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush0.png.meta new file mode 100644 index 0000000..c75cc6d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush0.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 04d21181005a65b47acaea5c6f605184 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush1.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush1.png new file mode 100644 index 0000000..cccaa25 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush1.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush1.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush1.png.meta new file mode 100644 index 0000000..803ec07 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush1.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: bee69e9222e12344bb5a210ca5e5b2c2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush2.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush2.png new file mode 100644 index 0000000..e4a19a3 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush2.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush2.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush2.png.meta new file mode 100644 index 0000000..0afe26c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush2.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 50fa4744924e36d4d86ab98952c0207b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush3.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush3.png new file mode 100644 index 0000000..ab2ee52 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush3.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush3.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush3.png.meta new file mode 100644 index 0000000..8ca5c44 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush3.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 503457306a89e2340857fde6c3f196e8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush4.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush4.png new file mode 100644 index 0000000..7e00aa6 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush4.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush4.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush4.png.meta new file mode 100644 index 0000000..3cb4cd2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush4.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 58d4ed86ac16c7e4eb26fd09e09f3d27 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush5.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush5.png new file mode 100644 index 0000000..cb51f5c Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush5.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush5.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush5.png.meta new file mode 100644 index 0000000..16d3e9c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMBrushes/MMBrush5.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 654c5cd449154d94b93dbf2fa93a6737 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise.meta new file mode 100644 index 0000000..1f2a936 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c2a5ba6991fc4346bdf10200f891de3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBayerNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBayerNoise.png new file mode 100644 index 0000000..24612b9 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBayerNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBayerNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBayerNoise.png.meta new file mode 100644 index 0000000..29016db --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBayerNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 0f0e0708166913e448eb6195f7e96bdd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBlueNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBlueNoise.png new file mode 100644 index 0000000..d7ed00f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBlueNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBlueNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBlueNoise.png.meta new file mode 100644 index 0000000..098e739 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBlueNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: c1275323e6f00d240970de428ca9fe70 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBrushNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBrushNoise.png new file mode 100644 index 0000000..b5b1ffa Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBrushNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBrushNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBrushNoise.png.meta new file mode 100644 index 0000000..575fa27 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMBrushNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: f1d51ed493a42ad4789ff2be401e8b43 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCellNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCellNoise.png new file mode 100644 index 0000000..6dffec4 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCellNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCellNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCellNoise.png.meta new file mode 100644 index 0000000..b36b730 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCellNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 6415e4b059f8ca249ad6c1c205f2330e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCloudsNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCloudsNoise.png new file mode 100644 index 0000000..c574c8f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCloudsNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCloudsNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCloudsNoise.png.meta new file mode 100644 index 0000000..3a1db01 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMCloudsNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 75b254a55f7e3f347ac8f2b5db9b11d9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalAltNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalAltNoise.png new file mode 100644 index 0000000..fecba6f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalAltNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalAltNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalAltNoise.png.meta new file mode 100644 index 0000000..d7074b6 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalAltNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 5551f2320b5bfde4dbdbb0604036a53a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalNoise.png new file mode 100644 index 0000000..d9da34b Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalNoise.png.meta new file mode 100644 index 0000000..e89df51 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireDirectionalNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: c61e12b00f19ecd448a748ee4f011b63 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireNoise.png new file mode 100644 index 0000000..a8b8f4a Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireNoise.png.meta new file mode 100644 index 0000000..d53dc71 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFireNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 10f0f05cdfbe64f44b9e3b2655c32308 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFlowNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFlowNoise.png new file mode 100644 index 0000000..339ab82 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFlowNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFlowNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFlowNoise.png.meta new file mode 100644 index 0000000..a281309 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMFlowNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 5c2ab7cb954a3974c8a19f8c9c6f6fdc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMPerlinNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMPerlinNoise.png new file mode 100644 index 0000000..2ff2ca2 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMPerlinNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMPerlinNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMPerlinNoise.png.meta new file mode 100644 index 0000000..d6cab7e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMPerlinNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: ce8f07304188aca4aa8f7b1c422c92b1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMSimplexNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMSimplexNoise.png new file mode 100644 index 0000000..96a1c08 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMSimplexNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMSimplexNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMSimplexNoise.png.meta new file mode 100644 index 0000000..a4466bf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMSimplexNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 4fbec3043b4bcc941b84734f579dc2c8 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMVoronoiNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMVoronoiNoise.png new file mode 100644 index 0000000..5127e5f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMVoronoiNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMVoronoiNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMVoronoiNoise.png.meta new file mode 100644 index 0000000..d72fe1b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMVoronoiNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 8fda172b188d7f342ba64c2c53acc2e4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMWhiteNoise.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMWhiteNoise.png new file mode 100644 index 0000000..a6634cb Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMWhiteNoise.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMWhiteNoise.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMWhiteNoise.png.meta new file mode 100644 index 0000000..458f096 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMNoise/MMWhiteNoise.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: f3b13b1ebf6e39d4ca1ce4ac83706896 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette.meta new file mode 100644 index 0000000..862f529 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ac6941c5ba7fec4890dd717de4d8b18 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette/MMLowPolyPalette.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette/MMLowPolyPalette.png new file mode 100644 index 0000000..5800b82 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette/MMLowPolyPalette.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette/MMLowPolyPalette.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette/MMLowPolyPalette.png.meta new file mode 100644 index 0000000..3966503 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMPalette/MMLowPolyPalette.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 0f7538ff15051d14c9a387d4773180bc +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles.meta new file mode 100644 index 0000000..e90480b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01845cf1ca2e6564f9dfe757984609aa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBlackSun.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBlackSun.png new file mode 100644 index 0000000..415b5d6 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBlackSun.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBlackSun.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBlackSun.png.meta new file mode 100644 index 0000000..759d686 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBlackSun.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 7eef1b66a64daee46b87f6f979353425 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBolt.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBolt.png new file mode 100644 index 0000000..2845697 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBolt.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBolt.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBolt.png.meta new file mode 100644 index 0000000..780deb8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesBolt.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 4b2f59655d77fdd40bca0d6809adad81 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesDust.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesDust.png new file mode 100644 index 0000000..ae3b33e Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesDust.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesDust.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesDust.png.meta new file mode 100644 index 0000000..113fc69 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesDust.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 1806add7d16bbe4419725ed4681c2c18 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesEclipse.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesEclipse.png new file mode 100644 index 0000000..c992b9f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesEclipse.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesEclipse.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesEclipse.png.meta new file mode 100644 index 0000000..c5cefa3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesEclipse.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: dbc8c25cc61ce624e96392478c57c2ae +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesExplosion.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesExplosion.png new file mode 100644 index 0000000..a731e59 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesExplosion.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesExplosion.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesExplosion.png.meta new file mode 100644 index 0000000..51d0041 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesExplosion.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 2457d6fbb1971a54ab6b08c4d4769b1e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlare.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlare.png new file mode 100644 index 0000000..a20f2e1 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlare.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlare.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlare.png.meta new file mode 100644 index 0000000..1f83f05 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlare.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 9eae953b5ed4b564e8df2a362aa9ebc1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlash.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlash.png new file mode 100644 index 0000000..4837083 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlash.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlash.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlash.png.meta new file mode 100644 index 0000000..9100ce0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesFlash.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 9f9e4aca8bab2b74aaed6715f75873ef +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesGamma.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesGamma.png new file mode 100644 index 0000000..0ff2b40 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesGamma.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesGamma.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesGamma.png.meta new file mode 100644 index 0000000..59b194b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesGamma.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 6f35f0fe92adb174e8a5fbf7b40eeea9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesHit.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesHit.png new file mode 100644 index 0000000..a44d81e Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesHit.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesHit.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesHit.png.meta new file mode 100644 index 0000000..e310f35 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesHit.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: fd0523ff6a921744c8eb12d6d609a2ba +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesJab.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesJab.png new file mode 100644 index 0000000..ddbbb4b Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesJab.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesJab.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesJab.png.meta new file mode 100644 index 0000000..ed3963f --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesJab.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 6756ce1110b2ba24e9f356c415a5a73d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesLight.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesLight.png new file mode 100644 index 0000000..4aae880 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesLight.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesLight.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesLight.png.meta new file mode 100644 index 0000000..202c701 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesLight.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: d231e18e55f422349931d83925fdece0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSlash.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSlash.png new file mode 100644 index 0000000..fbc57b7 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSlash.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSlash.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSlash.png.meta new file mode 100644 index 0000000..e527d98 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSlash.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 911c22680cab39842bdcfa0232128182 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSmoke.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSmoke.png new file mode 100644 index 0000000..7307033 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSmoke.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSmoke.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSmoke.png.meta new file mode 100644 index 0000000..f1bdaf9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesSmoke.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: c3e892db83f1adb49a1c18b15f231589 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStar.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStar.png new file mode 100644 index 0000000..3b5d528 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStar.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStar.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStar.png.meta new file mode 100644 index 0000000..841097e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStar.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 00f22d9f2016ae748a57e4777184eba6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStorm.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStorm.png new file mode 100644 index 0000000..b8d9046 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStorm.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStorm.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStorm.png.meta new file mode 100644 index 0000000..5b3e23e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesStorm.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 0c56439a20097e54b9fc9cbdca6968e9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesWhirlwind.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesWhirlwind.png new file mode 100644 index 0000000..a15415e Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesWhirlwind.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesWhirlwind.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesWhirlwind.png.meta new file mode 100644 index 0000000..b4a0ec7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMParticles/MMParticlesWhirlwind.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: 77fbd9fa5542ff04f80886780072ea6c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps.meta new file mode 100644 index 0000000..5563237 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ecd8beacd2bc40349ae14ae19a5780e5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp0.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp0.png new file mode 100644 index 0000000..e9d551b Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp0.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp0.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp0.png.meta new file mode 100644 index 0000000..5b5a65b --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp0.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 2178326803c98c949a3bad7b06f340c2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp1.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp1.png new file mode 100644 index 0000000..752a92f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp1.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp1.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp1.png.meta new file mode 100644 index 0000000..bb288e7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp1.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: b3780deb9c64f4e45b529787d0f5d20f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp2.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp2.png new file mode 100644 index 0000000..91ba37f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp2.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp2.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp2.png.meta new file mode 100644 index 0000000..58298b7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp2.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 34b4cd3e51e31a0408ff86e5c9f7568a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp3.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp3.png new file mode 100644 index 0000000..86b9a3d Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp3.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp3.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp3.png.meta new file mode 100644 index 0000000..9838b3d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp3.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 05cb76770cb65124ebc19520574e2a60 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp4.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp4.png new file mode 100644 index 0000000..8b3a2e7 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp4.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp4.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp4.png.meta new file mode 100644 index 0000000..0c4bfd5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp4.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: fd68bdcc37e59784a83e37ec1c26d400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp5.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp5.png new file mode 100644 index 0000000..f8f12a9 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp5.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp5.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp5.png.meta new file mode 100644 index 0000000..dba1b2d --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp5.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 41bf52f013b5cfe4294a3ca9ade7a8a5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp6.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp6.png new file mode 100644 index 0000000..8e402a8 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp6.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp6.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp6.png.meta new file mode 100644 index 0000000..2cae9d3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp6.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 63dabf038bafcdd4c9fd22dcdf057dd9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp7.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp7.png new file mode 100644 index 0000000..baf11e4 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp7.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp7.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp7.png.meta new file mode 100644 index 0000000..790fe2a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRamps/MMRamp7.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 5f57c110c89ccd542abda3719c5818ae +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple.meta new file mode 100644 index 0000000..8c5fec0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf597cbe42c73994d91a344b9ff2c023 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRipple.prefab b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRipple.prefab new file mode 100644 index 0000000..1fc35a9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRipple.prefab @@ -0,0 +1,4633 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 0} + m_RootGameObject: {fileID: 1945275655715846} + m_IsPrefabAsset: 1 +--- !u!1 &1945275655715846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 6 + m_Component: + - component: {fileID: 4992756742601084} + - component: {fileID: 198790043755714756} + - component: {fileID: 199646174408793916} + m_Layer: 0 + m_Name: MMRipple + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4992756742601084 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1945275655715846} + m_LocalRotation: {x: -0.7071068, y: -0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 45.16, y: -22.32, z: -1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!198 &198790043755714756 +ParticleSystem: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1945275655715846} + serializedVersion: 5 + lengthInSec: 0.2 + simulationSpeed: 1 + stopAction: 0 + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.4 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 5 + enabled: 1 + type: 0 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.01 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 1 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 3.1415925 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 0} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 1, g: 1, b: 1, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 29684 + atime2: 65535 + atime3: 65535 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + enabled: 0 + mode: 0 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + flipU: 0 + flipV: 0 + randomRow: 1 + sprites: + - sprite: {fileID: 0} + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + enabled: 0 + multiplier: 1 + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 1 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 1 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 2 + emitter: {fileID: 0} + type: 0 + properties: 0 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!199 &199646174408793916 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1945275655715846} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 0 + m_RenderingLayerMask: 4294967295 + m_Materials: + - {fileID: 2100000, guid: 30999785952518745bcc38ddb320af2f, type: 2} + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 0 + m_ApplyActiveColorSpace: 0 + m_VertexStreams: 0001030405 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRipple.prefab.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRipple.prefab.meta new file mode 100644 index 0000000..4d424a1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRipple.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f1903e6193958b64fa94ec29152e3122 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1.mat new file mode 100644 index 0000000..3f896a5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleBubble1 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: 06c3a06ad80bcb147b2c74ed37ff2333, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1.mat.meta new file mode 100644 index 0000000..a04fabf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0e80ff7156603346bbdc8c121863234 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1NM.png new file mode 100644 index 0000000..fb5255a Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1NM.png.meta new file mode 100644 index 0000000..ff55d12 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleBubble1NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 06c3a06ad80bcb147b2c74ed37ff2333 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1.mat new file mode 100644 index 0000000..4137944 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleCircle1 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: 9b9515ca837f18848a8b11d0d9d1a0c7, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1.mat.meta new file mode 100644 index 0000000..fe0794a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a1a494236fc81314c8aa9585a019ccdc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1NM.png new file mode 100644 index 0000000..03ab825 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1NM.png.meta new file mode 100644 index 0000000..d226955 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle1NM.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: 9b9515ca837f18848a8b11d0d9d1a0c7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2.mat new file mode 100644 index 0000000..2c32ab1 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleCircle2 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: 25b0ed6a11cf3824a8b13811a1420451, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2.mat.meta new file mode 100644 index 0000000..dd94828 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dfe0b0e9e34f50b459b6c0d5c1341125 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2NM.png new file mode 100644 index 0000000..64a6959 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2NM.png.meta new file mode 100644 index 0000000..4464f19 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle2NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 25b0ed6a11cf3824a8b13811a1420451 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3.mat new file mode 100644 index 0000000..b17b3e7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleCircle3 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: 9f32f9f1779317340b6f9788fb5f5c25, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3.mat.meta new file mode 100644 index 0000000..8bb40ef --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43c36085512d5834f9b4387303c2ae7f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3NM.png new file mode 100644 index 0000000..f164d6f Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3NM.png.meta new file mode 100644 index 0000000..f818d80 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleCircle3NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 9f32f9f1779317340b6f9788fb5f5c25 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1.mat new file mode 100644 index 0000000..55c7fd9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleRosace1 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: 3389a4d784f51b246b280b493aebe105, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1.mat.meta new file mode 100644 index 0000000..73fe8de --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c7cb988a600a2f42959f41a828e5ee1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1NM.png new file mode 100644 index 0000000..b726e49 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1NM.png.meta new file mode 100644 index 0000000..5fd0657 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleRosace1NM.png.meta @@ -0,0 +1,132 @@ +fileFormatVersion: 2 +guid: 3389a4d784f51b246b280b493aebe105 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1.mat new file mode 100644 index 0000000..9445022 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleSaw1 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: c42d019b36d0e95449e2114a78af0458, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1.mat.meta new file mode 100644 index 0000000..5671ae9 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b5cfff2a54f297f469c90648588cb9dc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1NM.png new file mode 100644 index 0000000..d28ce8d Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1NM.png.meta new file mode 100644 index 0000000..11836d3 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw1NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: c42d019b36d0e95449e2114a78af0458 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2.mat new file mode 100644 index 0000000..102327c --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleSaw2 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: c42d019b36d0e95449e2114a78af0458, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2.mat.meta new file mode 100644 index 0000000..e3a10f8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0d8a387a51a2b414b8160677b26c9d1a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2NM.png new file mode 100644 index 0000000..6bcde21 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2NM.png.meta new file mode 100644 index 0000000..50857f2 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSaw2NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 5e0ea90a83cb72d4ea51fbdcfcd46de0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1.mat new file mode 100644 index 0000000..92a0565 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleSpiral1 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: 72c72b2c72465e04ab1e30491d0bf708, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1.mat.meta new file mode 100644 index 0000000..e51e1f7 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a617e0f28404308478e66c689628ebf8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1NM.png new file mode 100644 index 0000000..844fa48 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1NM.png.meta new file mode 100644 index 0000000..f9f6844 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral1NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 72c72b2c72465e04ab1e30491d0bf708 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2.mat new file mode 100644 index 0000000..987c846 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleSpiral2 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: edcc1b3de33bacd4c81ff1a864d65f8c, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2.mat.meta new file mode 100644 index 0000000..b6d5cbf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 432948ea802b17943bde6d7614555a06 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2NM.png new file mode 100644 index 0000000..e048cdc Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2NM.png.meta new file mode 100644 index 0000000..17f57c0 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSpiral2NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: edcc1b3de33bacd4c81ff1a864d65f8c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1.mat new file mode 100644 index 0000000..009ea0a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleSquare1 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: ae5458ffd8cecaa4da3b1e90ef61cb88, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1.mat.meta new file mode 100644 index 0000000..b870c81 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30999785952518745bcc38ddb320af2f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1NM.png new file mode 100644 index 0000000..4c0e69a Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1NM.png.meta new file mode 100644 index 0000000..c668b55 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleSquare1NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: ae5458ffd8cecaa4da3b1e90ef61cb88 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1.mat b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1.mat new file mode 100644 index 0000000..9fc28bf --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMRippleWaves1 + m_Shader: {fileID: 4800000, guid: 44f8736e1f857f24681cbc354a147c3e, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 4000 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: d821f2e3723c0e14f8ab72b4b064fe65, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _Density: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _RippleAlpha: 1 + - _RippleIntensity: 1 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Hue: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1.mat.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1.mat.meta new file mode 100644 index 0000000..37c13bc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 442ea5f325058dd4ea4de3499fd02cf0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1NM.png b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1NM.png new file mode 100644 index 0000000..58dc342 Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1NM.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1NM.png.meta b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1NM.png.meta new file mode 100644 index 0000000..9928cdb --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/MMRipple/MMRippleWaves1NM.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: d821f2e3723c0e14f8ab72b4b064fe65 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/Scripts.meta b/Assets/Feel/MMTools/Accessories/MMVFX/Scripts.meta new file mode 100644 index 0000000..02b2ef8 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37a3276494f839e4d8354e8cc1ab4293 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/Scripts/MMPanningTexture.cs b/Assets/Feel/MMTools/Accessories/MMVFX/Scripts/MMPanningTexture.cs new file mode 100644 index 0000000..6cf8a1a --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/Scripts/MMPanningTexture.cs @@ -0,0 +1,108 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Use this class on a sprite or mesh to have its texture pan according to the specified speed + /// You can also force a sorting layer name + /// + [AddComponentMenu("More Mountains/Tools/VFX/PanningTexture")] + public class MMPanningTexture : MonoBehaviour + { + [MMInformation("This script will let you pan a texture on an attached Renderer.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + + /// whether or not this texture should pan + public bool TextureShouldPan = true; + /// the speed at which the texture pans + public Vector2 Speed = new Vector2(10,10); + /// the name of the sorting layer to render the texture at + public string SortingLayerName = "Above"; + /// the property name, for example "_MainTex" + [Tooltip("the property name, for example _MainTex")] + public string MaterialPropertyName = "_MainTex_ST"; + /// the index of the material + [Tooltip("the index of the material")] + public int MaterialIndex = 0; + + #if MM_UI + protected RawImage _rawImage; + #endif + protected Renderer _renderer; + protected Vector4 _position = Vector4.one; + protected Vector4 _speed; + protected MaterialPropertyBlock _propertyBlock; + + /// + /// On start, grabs the renderer and/or raw image + /// + protected virtual void Start() + { + _renderer = GetComponent(); + if ((_renderer != null) && (!string.IsNullOrEmpty(SortingLayerName))) + { + _renderer.sortingLayerName = SortingLayerName; + _propertyBlock = new MaterialPropertyBlock(); + _renderer.GetPropertyBlock(_propertyBlock); + } + _position.x = _renderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).x; + _position.y = _renderer.sharedMaterials[MaterialIndex].GetVector(MaterialPropertyName).y; + #if MM_UI + _rawImage = GetComponent(); + #endif + + _speed = new Vector4(0f, 0f, Speed.x, Speed.y); + } + + /// + /// On update, moves the texture around according to the specified speed + /// + protected virtual void Update() + { + if (!TextureShouldPan) + { + return; + } + + bool rawImageIsNull = false; + #if MM_UI + rawImageIsNull = (_rawImage == null); + #endif + + if (rawImageIsNull && (_renderer == null)) + { + return; + } + + _speed.z = Speed.x; + _speed.w = Speed.y; + _position += (_speed / 300) * Time.deltaTime; + + // position reset + if (_position.z > 1.0f) + { + _position.z -= 1.0f; + } + if (_position.w > 1.0f) + { + _position.w -= 1.0f; + } + + if (_renderer != null) + { + _renderer.GetPropertyBlock(_propertyBlock); + _propertyBlock.SetVector(MaterialPropertyName, _position); + _renderer.SetPropertyBlock(_propertyBlock, MaterialIndex); + } + if (!rawImageIsNull) + { + #if MM_UI + _rawImage.material.mainTextureOffset = _position; + #endif + } + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMVFX/Scripts/MMPanningTexture.cs.meta b/Assets/Feel/MMTools/Accessories/MMVFX/Scripts/MMPanningTexture.cs.meta new file mode 100644 index 0000000..dfc6004 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVFX/Scripts/MMPanningTexture.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00aa79f91c8cbbf498e626608d2dad16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVision.meta b/Assets/Feel/MMTools/Accessories/MMVision.meta new file mode 100644 index 0000000..3d30159 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVision.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 50de63c346bae1f4490cca9c03005daa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVision/ConeOfVisionAlpha.png b/Assets/Feel/MMTools/Accessories/MMVision/ConeOfVisionAlpha.png new file mode 100644 index 0000000..b7b43ea Binary files /dev/null and b/Assets/Feel/MMTools/Accessories/MMVision/ConeOfVisionAlpha.png differ diff --git a/Assets/Feel/MMTools/Accessories/MMVision/ConeOfVisionAlpha.png.meta b/Assets/Feel/MMTools/Accessories/MMVision/ConeOfVisionAlpha.png.meta new file mode 100644 index 0000000..6d384d5 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVision/ConeOfVisionAlpha.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: 671b69569d53c4c47ba2a89fb544082f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfLight.shader b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfLight.shader new file mode 100644 index 0000000..2fdcd67 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfLight.shader @@ -0,0 +1,70 @@ +Shader "MoreMountains/ConeOfLight" +{ + Properties + { + _MainTex("Diffuse Texture", 2D) = "white" {} + _Contrast("Contrast", Float) = 0.5 + _Color("Color", Color) = (1,1,1,1) + } + + SubShader + { + Tags + { + "ForceNoShadowCasting" = "True" + "Queue" = "Transparent" + "RenderType" = "Transparent" + "IgnoreProjector" = "True" + } + + Pass + { + ZTest Always + AlphaTest Greater 0.0 + Blend DstColor One + Cull Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #include "UnityCG.cginc" + + uniform sampler2D _MainTex; + uniform float _Contrast; + uniform float4 _Color; + + struct VertexInput + { + float4 vertex : POSITION; + float4 uv : TEXCOORD0; + float4 color : COLOR; + }; + + struct VertexOutput + { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 color : COLOR; + }; + + VertexOutput vert(VertexInput input) + { + VertexOutput output; + output.uv = input.uv; + output.color = input.color; + output.pos = UnityObjectToClipPos(input.vertex); + return output; + } + + float4 frag(VertexOutput input) : COLOR + { + float4 diffuse = tex2D(_MainTex, input.uv); + diffuse.rgb = diffuse.rgb * _Color.rgb * input.color.rgb; + diffuse.rgb *= diffuse.a * _Color.a * input.color.a; + diffuse *= _Contrast; + return float4(diffuse); + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfLight.shader.meta b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfLight.shader.meta new file mode 100644 index 0000000..168767e --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfLight.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 07e5069cdf9ee934f8d7b768c461452c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision.cs b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision.cs new file mode 100644 index 0000000..e7839ec --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision.cs @@ -0,0 +1,265 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using System.Collections.Generic; +using System; + +namespace MoreMountains.Tools +{ + /// + /// This class will create a cone of vision defined by an angle and a distance around a point. It will look for targets within that field, and draw a mesh to show the cone of vision + /// initially inspired by this great tutorial by Sebastian Lague : https://www.youtube.com/watch?v=rQG9aUWarwE - check out his tutorials, they're amazing! + /// + [Serializable] + [AddComponentMenu("More Mountains/Tools/Vision/MMConeOfVision")] + public class MMConeOfVision : MonoBehaviour + { + /// + /// A struct to store raycast data + /// + public struct RaycastData + { + public bool Hit; + public Vector3 Point; + public float Distance; + public float Angle; + + public RaycastData(bool hit, Vector3 point, float distance, float angle) + { + Hit = hit; + Point = point; + Distance = distance; + Angle = angle; + } + } + + public struct MeshEdgePosition + { + public Vector3 PointA; + public Vector3 PointB; + + public MeshEdgePosition(Vector3 pointA, Vector3 pointB) + { + PointA = pointA; + PointB = pointB; + } + } + + [Header("Vision")] + public LayerMask ObstacleMask; + public float VisionRadius = 5f; + [Range(0f, 360f)] + public float VisionAngle = 20f; + [MMReadOnly] + public Vector3 Direction; + [MMReadOnly] + public Vector3 EulerAngles; + public Vector3 Offset; + + [Header("Target scanning")] + public bool ShouldScanForTargets = true; + public LayerMask TargetMask; + public float ScanFrequencyInSeconds = 1f; + [MMReadOnly] + public List VisibleTargets = new List(); + + [Header("Mesh")] + public bool ShouldDrawMesh = true; + public float MeshDensity = 0.2f; + public int EdgePrecision = 3; + public float EdgeThreshold = 0.5f; + + public MeshFilter VisionMeshFilter; + + protected Mesh _visionMesh; + protected Collider[] _targetsWithinDistance; + protected Transform _target; + protected Vector3 _directionToTarget; + protected float _distanceToTarget; + protected float _lastScanTimestamp; + + protected List _viewPoints = new List(); + protected RaycastData _oldViewCast = new RaycastData(); + protected RaycastData _viewCast = new RaycastData(); + protected Vector3[] _vertices; + protected int[] _triangles; + protected Vector3 _minPoint, _maxPoint, _direction; + protected RaycastData _returnRaycastData; + protected RaycastHit _raycastAtAngleHit; + protected int _numberOfVerticesLastTime = 0; + + public virtual Vector3 Center { get { return this.transform.position + Offset; } } + + protected virtual void Awake() + { + _visionMesh = new Mesh(); + if (ShouldDrawMesh) + { + VisionMeshFilter.mesh = _visionMesh; + } + } + + protected virtual void LateUpdate() + { + if ((Time.time - _lastScanTimestamp > ScanFrequencyInSeconds) && ShouldScanForTargets) + { + ScanForTargets(); + } + DrawMesh(); + } + + public virtual void SetDirectionAndAngles(Vector3 direction, Vector3 eulerAngles) + { + Direction = direction; + EulerAngles = eulerAngles; + } + + protected virtual void ScanForTargets() + { + _lastScanTimestamp = Time.time; + VisibleTargets.Clear(); + _targetsWithinDistance = Physics.OverlapSphere(Center, VisionRadius, TargetMask); + foreach (Collider collider in _targetsWithinDistance) + { + _target = collider.transform; + _directionToTarget = (_target.position - Center).normalized; + if (Vector3.Angle(Direction, _directionToTarget) < VisionAngle / 2f) + { + _distanceToTarget = Vector3.Distance(Center, _target.position); + + bool duplicate = false; + foreach(Transform visibleTarget in VisibleTargets) + { + if (visibleTarget == _target) + { + duplicate = true; + } + } + + if ((!Physics.Raycast(Center, _directionToTarget, _distanceToTarget, ObstacleMask)) && !duplicate) + { + VisibleTargets.Add(_target); + } + } + } + } + + protected virtual void DrawMesh() + { + if (!ShouldDrawMesh) + { + return; + } + + int steps = Mathf.RoundToInt(MeshDensity * VisionAngle); + float stepsAngle = VisionAngle / steps; + + _viewPoints.Clear(); + + for (int i = 0; i <= steps; i++) + { + float angle = stepsAngle * i + EulerAngles.y - VisionAngle / 2f; + _viewCast = RaycastAtAngle(angle); + + if (i > 0) + { + bool thresholdExceeded = Mathf.Abs(_oldViewCast.Distance - _viewCast.Distance) > EdgeThreshold; + + if ((_oldViewCast.Hit != _viewCast.Hit) || (_oldViewCast.Hit && _viewCast.Hit && thresholdExceeded)) + { + MeshEdgePosition edge = FindMeshEdgePosition(_oldViewCast, _viewCast); + if (edge.PointA != Vector3.zero) + { + _viewPoints.Add(edge.PointA); + } + if (edge.PointB != Vector3.zero) + { + _viewPoints.Add(edge.PointB); + } + } + } + + _viewPoints.Add(_viewCast.Point); + _oldViewCast = _viewCast; + } + + int numberOfVertices = _viewPoints.Count + 1; + if (numberOfVertices != _numberOfVerticesLastTime) + { + Array.Resize(ref _vertices, numberOfVertices); + Array.Resize(ref _triangles, (numberOfVertices - 2) * 3); + } + + _vertices[0] = Offset; + for (int i = 0; i < numberOfVertices - 1; i++) + { + _vertices[i + 1] = this.transform.InverseTransformPoint(_viewPoints[i]); + + if (i < numberOfVertices - 2) + { + _triangles[i * 3] = 0; + _triangles[i * 3 + 1] = i + 1; + _triangles[i * 3 + 2] = i + 2; + } + } + + _visionMesh.Clear(); + _visionMesh.vertices = _vertices; + _visionMesh.triangles = _triangles; + _visionMesh.RecalculateNormals(); + + _numberOfVerticesLastTime = numberOfVertices; + } + + MeshEdgePosition FindMeshEdgePosition(RaycastData minimumViewCast, RaycastData maximumViewCast) + { + float minAngle = minimumViewCast.Angle; + float maxAngle = maximumViewCast.Angle; + _minPoint = minimumViewCast.Point; + _maxPoint = maximumViewCast.Point; + + for (int i = 0; i < EdgePrecision; i++) + { + float angle = (minAngle + maxAngle) / 2; + RaycastData newViewCast = RaycastAtAngle(angle); + + bool thresholdExceeded = Mathf.Abs(minimumViewCast.Distance - newViewCast.Distance) > EdgeThreshold; + if (newViewCast.Hit == minimumViewCast.Hit && !thresholdExceeded) + { + minAngle = angle; + _minPoint = newViewCast.Point; + } + else + { + maxAngle = angle; + _maxPoint = newViewCast.Point; + } + } + + return new MeshEdgePosition(_minPoint, _maxPoint); + } + + RaycastData RaycastAtAngle(float angle) + { + _direction = MMMaths.DirectionFromAngle(angle, 0f); + + + if (Physics.Raycast(Center, _direction, out _raycastAtAngleHit, VisionRadius, ObstacleMask)) + { + _returnRaycastData.Hit = true; + _returnRaycastData.Point = _raycastAtAngleHit.point; + _returnRaycastData.Distance = _raycastAtAngleHit.distance; + _returnRaycastData.Angle = angle; + } + else + { + _returnRaycastData.Hit = false; + _returnRaycastData.Point = Center + _direction * VisionRadius; + _returnRaycastData.Distance = VisionRadius; + _returnRaycastData.Angle = angle; + } + + return _returnRaycastData; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision.cs.meta b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision.cs.meta new file mode 100644 index 0000000..94e7159 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4fb9c8af0fcd0514e89d35554b6cae77 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision2D.cs b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision2D.cs new file mode 100644 index 0000000..af2adff --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision2D.cs @@ -0,0 +1,257 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using System.Collections.Generic; +using System; + +namespace MoreMountains.Tools +{ + [Serializable] + [AddComponentMenu("More Mountains/Tools/Vision/MMConeOfVision2D")] + public class MMConeOfVision2D : MonoBehaviour + { + public struct RaycastData + { + public bool Hit; + public Vector3 Point; + public float Distance; + public float Angle; + + public RaycastData(bool hit, Vector3 point, float distance, float angle) + { + Hit = hit; + Point = point; + Distance = distance; + Angle = angle; + } + } + + public struct MeshEdgePosition + { + public Vector3 PointA; + public Vector3 PointB; + + public MeshEdgePosition(Vector3 pointA, Vector3 pointB) + { + PointA = pointA; + PointB = pointB; + } + } + + [Header("Vision")] + public LayerMask ObstacleMask; + public float VisionRadius = 5f; + [Range(0f, 360f)] + public float VisionAngle = 20f; + [Range(0f, 360f)] + public float AngleOffset = 0f; + [MMReadOnly] + public Vector3 Direction; + [MMReadOnly] + public Vector3 EulerAngles; + + [Header("Target scanning")] + public bool ShouldScanForTargets = true; + public LayerMask TargetMask; + public float ScanFrequencyInSeconds = 1f; + [MMReadOnly] + public List VisibleTargets = new List(); + + [Header("Mesh")] + public bool ShouldDrawMesh = true; + public float MeshDensity = 0.2f; + public int EdgePrecision = 3; + public float EdgeThreshold = 0.5f; + + public MeshFilter VisionMeshFilter; + + protected Mesh _visionMesh; + protected Collider2D[] _targetsWithinDistance; + protected Transform _target; + protected Vector3 _directionToTarget; + protected float _distanceToTarget; + protected float _lastScanTimestamp; + + protected RaycastHit2D _scanForTargetsHit2D; + protected List _viewPoints = new List(); + protected RaycastData _oldViewCast = new RaycastData(); + protected RaycastData _viewCast = new RaycastData(); + + protected Vector3[] _vertices; + protected int[] _triangles; + protected Vector3 _minPoint, _maxPoint, _direction; + protected RaycastData _returnRaycastData; + protected RaycastHit2D _raycastAtAngleHit2D; + protected int _numberOfVerticesLastTime = 0; + + protected virtual void Awake() + { + _visionMesh = new Mesh(); + Direction = Vector3.right; + if (ShouldDrawMesh) + { + VisionMeshFilter.mesh = _visionMesh; + } + } + + protected virtual void LateUpdate() + { + if ((Time.time - _lastScanTimestamp > ScanFrequencyInSeconds) && ShouldScanForTargets) + { + ScanForTargets(); + } + DrawMesh(); + } + + public virtual void SetDirectionAndAngles(Vector3 direction, Vector3 eulerAngles) + { + Direction = direction; + EulerAngles = eulerAngles; + EulerAngles.y += AngleOffset; + } + + protected virtual void ScanForTargets() + { + _lastScanTimestamp = Time.time; + VisibleTargets.Clear(); + _targetsWithinDistance = Physics2D.OverlapCircleAll(this.transform.position, VisionRadius, TargetMask); + foreach (Collider2D collider in _targetsWithinDistance) + { + _target = collider.transform; + _directionToTarget = (_target.position - this.transform.position).normalized; + if (Vector3.Angle(Direction, _directionToTarget) < VisionAngle / 2f) + { + _distanceToTarget = Vector3.Distance(this.transform.position, _target.position); + + _scanForTargetsHit2D = Physics2D.Raycast(this.transform.position, _directionToTarget, _distanceToTarget, ObstacleMask); + if (!_scanForTargetsHit2D) + { + VisibleTargets.Add(_target); + } + } + } + } + + protected virtual void DrawMesh() + { + if (!ShouldDrawMesh) + { + return; + } + + int steps = Mathf.RoundToInt(MeshDensity * VisionAngle); + float stepsAngle = VisionAngle / steps; + + _viewPoints.Clear(); + + for (int i = 0; i <= steps; i++) + { + float angle = stepsAngle * i + EulerAngles.y - VisionAngle / 2f; + _viewCast = RaycastAtAngle(angle); + + if (i > 0) + { + bool thresholdExceeded = Mathf.Abs(_oldViewCast.Distance - _viewCast.Distance) > EdgeThreshold; + + if ((_oldViewCast.Hit != _viewCast.Hit) || (_oldViewCast.Hit && _viewCast.Hit && thresholdExceeded)) + { + MeshEdgePosition edge = FindMeshEdgePosition(_oldViewCast, _viewCast); + if (edge.PointA != Vector3.zero) + { + _viewPoints.Add(edge.PointA); + } + if (edge.PointB != Vector3.zero) + { + _viewPoints.Add(edge.PointB); + } + } + } + + _viewPoints.Add(_viewCast.Point); + _oldViewCast = _viewCast; + } + + int numberOfVertices = _viewPoints.Count + 1; + if (numberOfVertices != _numberOfVerticesLastTime) + { + Array.Resize(ref _vertices, numberOfVertices); + Array.Resize(ref _triangles, (numberOfVertices - 2) * 3); + } + + _vertices[0].x = 0; + _vertices[0].y = 0; + _vertices[0].z = 0; + + for (int i = 0; i < numberOfVertices - 1; i++) + { + _vertices[i + 1] = this.transform.InverseTransformPoint(_viewPoints[i]); + + if (i < numberOfVertices - 2) + { + _triangles[i * 3] = 0; + _triangles[i * 3 + 1] = i + 1; + _triangles[i * 3 + 2] = i + 2; + } + } + + _visionMesh.Clear(); + _visionMesh.vertices = _vertices; + _visionMesh.triangles = _triangles; + _visionMesh.RecalculateNormals(); + + _numberOfVerticesLastTime = numberOfVertices; + } + + MeshEdgePosition FindMeshEdgePosition(RaycastData minimumViewCast, RaycastData maximumViewCast) + { + float minAngle = minimumViewCast.Angle; + float maxAngle = maximumViewCast.Angle; + _minPoint = minimumViewCast.Point; + _maxPoint = maximumViewCast.Point; + + for (int i = 0; i < EdgePrecision; i++) + { + float angle = (minAngle + maxAngle) / 2; + RaycastData newViewCast = RaycastAtAngle(angle); + + bool thresholdExceeded = Mathf.Abs(minimumViewCast.Distance - newViewCast.Distance) > EdgeThreshold; + if (newViewCast.Hit == minimumViewCast.Hit && !thresholdExceeded) + { + minAngle = angle; + _minPoint = newViewCast.Point; + } + else + { + maxAngle = angle; + _maxPoint = newViewCast.Point; + } + } + + return new MeshEdgePosition(_minPoint, _maxPoint); + } + + RaycastData RaycastAtAngle(float angle) + { + _direction = MMMaths.DirectionFromAngle2D(angle, 0f); + + _raycastAtAngleHit2D = Physics2D.Raycast(this.transform.position, _direction, VisionRadius, ObstacleMask); + + if (_raycastAtAngleHit2D) + { + _returnRaycastData.Hit = true; + _returnRaycastData.Point = _raycastAtAngleHit2D.point; + _returnRaycastData.Distance = _raycastAtAngleHit2D.distance; + _returnRaycastData.Angle = angle; + } + else + { + _returnRaycastData.Hit = false; + _returnRaycastData.Point = this.transform.position + _direction * VisionRadius; + _returnRaycastData.Distance = VisionRadius; + _returnRaycastData.Angle = angle; + } + + return _returnRaycastData; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision2D.cs.meta b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision2D.cs.meta new file mode 100644 index 0000000..5d28901 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MMVision/MMConeOfVision2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ceea5d59c11750f4e8deb2c47ff8bcb4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Accessories/MoreMountains.Tools.Accessories.asmref b/Assets/Feel/MMTools/Accessories/MoreMountains.Tools.Accessories.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MoreMountains.Tools.Accessories.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Accessories/MoreMountains.Tools.Accessories.asmref.meta b/Assets/Feel/MMTools/Accessories/MoreMountains.Tools.Accessories.asmref.meta new file mode 100644 index 0000000..f74accc --- /dev/null +++ b/Assets/Feel/MMTools/Accessories/MoreMountains.Tools.Accessories.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2fe5de52b83841b49bb695e0d21a84e0 +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core.meta b/Assets/Feel/MMTools/Core.meta new file mode 100644 index 0000000..d200b73 --- /dev/null +++ b/Assets/Feel/MMTools/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0653d9a40d48fae42b27f139277afeaa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor.meta b/Assets/Feel/MMTools/Core/Editor.meta new file mode 100644 index 0000000..5e5eea1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91a094309828a434896d44b4e956b248 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes.meta new file mode 100644 index 0000000..69cc5c9 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 275abffec231dff4daae967d769cf48b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMBackgroundColorAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMBackgroundColorAttributeDrawer.cs new file mode 100644 index 0000000..64bcaa1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMBackgroundColorAttributeDrawer.cs @@ -0,0 +1,68 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMBackgroundColorAttribute))] + public class MMBackgroundColorAttributeDrawer : PropertyDrawer + { + #if UNITY_EDITOR + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var backgroundColorAttribute = attribute as MMBackgroundColorAttribute; + + bool doHighlight = true; + + if (doHighlight) + { + var color = GetColor(backgroundColorAttribute.Color); + var padding = EditorGUIUtility.standardVerticalSpacing; + var highlightRect = new Rect(position.x - padding, position.y - padding, + position.width + (padding * 2), position.height + (padding * 2)); + EditorGUI.DrawRect(highlightRect, color); + var cc = GUI.contentColor; + GUI.contentColor = Color.black; + EditorGUI.PropertyField(position, property, label); + + GUI.contentColor = cc; + } + else + { + EditorGUI.PropertyField(position, property, label); + } + } + + #endif + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label, true); + } + + private Color GetColor(MMBackgroundAttributeColor color) + { + switch (color) + { + case MMBackgroundAttributeColor.Red: + return new Color32(255, 0, 63, 255); + case MMBackgroundAttributeColor.Pink: + return new Color32(255, 66, 160, 255); + case MMBackgroundAttributeColor.Orange: + return new Color32(255, 128, 0, 255); + case MMBackgroundAttributeColor.Yellow: + return new Color32(255, 211, 0, 255); + case MMBackgroundAttributeColor.Green: + return new Color32(102, 255, 0, 255); + case MMBackgroundAttributeColor.Blue: + return new Color32(0, 135, 189, 255); + case MMBackgroundAttributeColor.Violet: + return new Color32(127, 0, 255, 255); + default: + return Color.white; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMBackgroundColorAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMBackgroundColorAttributeDrawer.cs.meta new file mode 100644 index 0000000..c50098a --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMBackgroundColorAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eab424a6e91496d4c9cc45c31adc7cc6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMColorAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMColorAttributeDrawer.cs new file mode 100644 index 0000000..25ce0e1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMColorAttributeDrawer.cs @@ -0,0 +1,23 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMColorAttribute))] + public class MMColorAttributeDrawer : PropertyDrawer + { + + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + Color color = (attribute as MMColorAttribute).color; + Color prev = GUI.color; + GUI.color = color; + EditorGUI.PropertyField(position, property, label, true); + GUI.color = prev; + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMColorAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMColorAttributeDrawer.cs.meta new file mode 100644 index 0000000..9f21333 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMColorAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6cf9893ce00472244950a7d0b0c4430e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMConditionAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMConditionAttributeDrawer.cs new file mode 100644 index 0000000..6b09aab --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMConditionAttributeDrawer.cs @@ -0,0 +1,72 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + // original implementation by http://www.brechtos.com/hiding-or-disabling-inspector-properties-using-propertydrawers-within-unity-5/ + [CustomPropertyDrawer(typeof(MMConditionAttribute))] + public class MMConditionAttributeDrawer : PropertyDrawer + { + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + MMConditionAttribute conditionAttribute = (MMConditionAttribute)attribute; + bool enabled = GetConditionAttributeResult(conditionAttribute, property); + bool previouslyEnabled = GUI.enabled; + bool shouldDisplay = ShouldDisplay(conditionAttribute, enabled); + if (shouldDisplay) + { + GUI.enabled = enabled; + EditorGUI.PropertyField(position, property, label, true); + GUI.enabled = previouslyEnabled; + } + } + #endif + + private bool GetConditionAttributeResult(MMConditionAttribute conditionAttribute, SerializedProperty property) + { + bool enabled = true; + string propertyPath = property.propertyPath; + string conditionPath = propertyPath.Replace(property.name, conditionAttribute.ConditionBoolean); + SerializedProperty sourcePropertyValue = property.serializedObject.FindProperty(conditionPath); + + if (sourcePropertyValue != null) + { + enabled = sourcePropertyValue.boolValue; + } + else + { + Debug.LogWarning("No matching boolean found for ConditionAttribute in object: " + conditionAttribute.ConditionBoolean); + } + if (conditionAttribute.Negative) + { + enabled = !enabled; + } + return enabled; + } + + private bool ShouldDisplay(MMConditionAttribute conditionAttribute, bool result) + { + bool shouldDisplay = !conditionAttribute.Hidden || result; + return shouldDisplay; + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + MMConditionAttribute conditionAttribute = (MMConditionAttribute)attribute; + bool enabled = GetConditionAttributeResult(conditionAttribute, property); + + bool shouldDisplay = ShouldDisplay(conditionAttribute, enabled); + if (shouldDisplay) + { + return EditorGUI.GetPropertyHeight(property, label); + } + else + { + return -EditorGUIUtility.standardVerticalSpacing; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMConditionAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMConditionAttributeDrawer.cs.meta new file mode 100644 index 0000000..0a386a5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMConditionAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7418ffb631904a47b36fa84af828aa9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMDropdownAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMDropdownAttributeDrawer.cs new file mode 100644 index 0000000..703fa78 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMDropdownAttributeDrawer.cs @@ -0,0 +1,91 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMDropdownAttribute))] + public class MMDropdownAttributeDrawer : PropertyDrawer + { + protected MMDropdownAttribute _dropdownAttribute; + protected string[] _dropdownValues; + protected int _selectedDropdownValueIndex = -1; + protected Type _propertyType; + + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + if (_dropdownAttribute == null) + { + _dropdownAttribute = (MMDropdownAttribute)attribute; + if (_dropdownAttribute.DropdownValues == null || _dropdownAttribute.DropdownValues.Length == 0) + { + return; + } + + _propertyType = _dropdownAttribute.DropdownValues[0].GetType(); + + _dropdownValues = new string[_dropdownAttribute.DropdownValues.Length]; + for (int i = 0; i < _dropdownAttribute.DropdownValues.Length; i++) + { + _dropdownValues[i] = _dropdownAttribute.DropdownValues[i].ToString(); + } + + bool found = false; + for (var i = 0; i < _dropdownValues.Length; i++) + { + if ((_propertyType == typeof(string)) && property.stringValue == _dropdownValues[i]) + { + _selectedDropdownValueIndex = i; + found = true; + break; + } + if ((_propertyType == typeof(int)) && property.intValue == Convert.ToInt32(_dropdownValues[i])) + { + _selectedDropdownValueIndex = i; + found = true; + break; + } + if ((_propertyType == typeof(float)) && Mathf.Approximately(property.floatValue, Convert.ToSingle(_dropdownValues[i]))) + { + _selectedDropdownValueIndex = i; + found = true; + break; + } + } + if (!found) + { + _selectedDropdownValueIndex = 0; + } + } + + if ((_dropdownValues == null) || (_dropdownValues.Length == 0) || (_selectedDropdownValueIndex < 0)) + { + EditorGUI.PropertyField(position, property, label); + return; + } + + EditorGUI.BeginChangeCheck(); + _selectedDropdownValueIndex = EditorGUI.Popup(position, label.text, _selectedDropdownValueIndex, _dropdownValues); + if (EditorGUI.EndChangeCheck()) + { + if (_propertyType == typeof(string)) + { + property.stringValue = _dropdownValues[_selectedDropdownValueIndex]; + } + else if (_propertyType == typeof(int)) + { + property.intValue = Convert.ToInt32(_dropdownValues[_selectedDropdownValueIndex]); + } + else if (_propertyType == typeof(float)) + { + property.floatValue = Convert.ToSingle(_dropdownValues[_selectedDropdownValueIndex]); + } + property.serializedObject.ApplyModifiedProperties(); + } + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMDropdownAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMDropdownAttributeDrawer.cs.meta new file mode 100644 index 0000000..411e132 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMDropdownAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f211a3800cfd6094db6caf6e9d4571fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMEnumConditionAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMEnumConditionAttributeDrawer.cs new file mode 100644 index 0000000..b521f81 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMEnumConditionAttributeDrawer.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Collections.Generic; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + // original implementation by http://www.brechtos.com/hiding-or-disabling-inspector-properties-using-propertydrawers-within-unity-5/ + [CustomPropertyDrawer(typeof(MMEnumConditionAttribute))] + public class MMEnumConditionAttributeDrawer : PropertyDrawer + { + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + MMEnumConditionAttribute enumConditionAttribute = (MMEnumConditionAttribute)attribute; + bool enabled = GetConditionAttributeResult(enumConditionAttribute, property); + bool previouslyEnabled = GUI.enabled; + GUI.enabled = enabled; + if (!enumConditionAttribute.Hidden || enabled) + { + EditorGUI.PropertyField(position, property, label, true); + } + GUI.enabled = previouslyEnabled; + } + #endif + + private static Dictionary cachedPaths = new Dictionary(); + + private bool GetConditionAttributeResult(MMEnumConditionAttribute enumConditionAttribute, SerializedProperty property) + { + bool enabled = true; + + SerializedProperty enumProp; + string enumPropPath = string.Empty; + string propertyPath = property.propertyPath; + + if (!cachedPaths.TryGetValue(propertyPath, out enumPropPath)) + { + enumPropPath = propertyPath.Replace(property.name, enumConditionAttribute.ConditionEnum); + cachedPaths.Add(propertyPath, enumPropPath); + } + + enumProp = property.serializedObject.FindProperty(enumPropPath); + + if (enumProp != null) + { + int currentEnum = enumProp.enumValueIndex; + enabled = enumConditionAttribute.ContainsBitFlag(currentEnum); + } + else + { + Debug.LogWarning("No matching boolean found for ConditionAttribute in object: " + enumConditionAttribute.ConditionEnum); + } + + return enabled; + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + MMEnumConditionAttribute enumConditionAttribute = (MMEnumConditionAttribute)attribute; + bool enabled = GetConditionAttributeResult(enumConditionAttribute, property); + + if (!enumConditionAttribute.Hidden || enabled) + { + return EditorGUI.GetPropertyHeight(property, label); + } + else + { + return -EditorGUIUtility.standardVerticalSpacing; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMEnumConditionAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMEnumConditionAttributeDrawer.cs.meta new file mode 100644 index 0000000..4e6e6ef --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMEnumConditionAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e88eb20b861cbc49b096ad2baac77cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMHiddenAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMHiddenAttributeDrawer.cs new file mode 100644 index 0000000..a125720 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMHiddenAttributeDrawer.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + + [CustomPropertyDrawer(typeof(MMHiddenAttribute))] + + public class MMHiddenAttributeDrawer : PropertyDrawer + { + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 0f; + } + + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMHiddenAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMHiddenAttributeDrawer.cs.meta new file mode 100644 index 0000000..e81b18d --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMHiddenAttributeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ac53bf83e8327014bbc73944dfec5ff8 +timeCreated: 1456270265 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMInformationDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMInformationDrawer.cs new file mode 100644 index 0000000..73e48c7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMInformationDrawer.cs @@ -0,0 +1,118 @@ +#if UNITY_EDITOR + +using System; +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Reflection; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer (typeof(MMInformationAttribute))] + /// + /// This class allows the display of a message box (warning, info, error...) next to a property (before or after) + /// + public class MMInformationAttributeDrawer : PropertyDrawer + { + // determines the space after the help box, the space before the text box, and the width of the help box icon + const int spaceBeforeTheTextBox = 5; + const int spaceAfterTheTextBox = 10; + const int iconWidth = 55; + + MMInformationAttribute informationAttribute { get { return ((MMInformationAttribute)attribute); } } + + + #if UNITY_EDITOR + /// + /// OnGUI, displays the property and the textbox in the specified order + /// + /// Rect. + /// Property. + /// Label. + public override void OnGUI (Rect rect, SerializedProperty prop, GUIContent label) + { + if (HelpEnabled()) + { + EditorStyles.helpBox.richText=true ; + + if (!informationAttribute.MessageAfterProperty) + { + // we position the message before the property + rect.height = DetermineTextboxHeight(informationAttribute.Message); + EditorGUI.HelpBox (rect, informationAttribute.Message, informationAttribute.Type); + + rect.y += rect.height + spaceBeforeTheTextBox; + EditorGUI.PropertyField(rect, prop, label, true); + } + else + { + // we position the property first, then the message + rect.height = GetPropertyHeight(prop,label); + EditorGUI.PropertyField(rect, prop, label, true); + + rect.height = DetermineTextboxHeight(informationAttribute.Message); + // we add the complete property height (property + helpbox, as overridden in this very script), and substract both to get just the property + rect.y += GetPropertyHeight(prop,label) - DetermineTextboxHeight(informationAttribute.Message) - spaceAfterTheTextBox; + EditorGUI.HelpBox (rect, informationAttribute.Message, informationAttribute.Type); + } + + } + else + { + EditorGUI.PropertyField(rect, prop, label, true); + } + } + #endif + + /// + /// Returns the complete height of the whole block (property + help text) + /// + /// The block height. + /// Property. + /// Label. + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + if (HelpEnabled()) + { + return EditorGUI.GetPropertyHeight(property) + DetermineTextboxHeight(informationAttribute.Message) + spaceAfterTheTextBox + spaceBeforeTheTextBox; + } + else + { + return EditorGUI.GetPropertyHeight(property); + } + } + + /// + /// Checks the editor prefs to see if help is enabled or not + /// + /// true, if enabled was helped, false otherwise. + protected virtual bool HelpEnabled() + { + bool helpEnabled = false; + if (EditorPrefs.HasKey("MMShowHelpInInspectors")) + { + if (EditorPrefs.GetBool("MMShowHelpInInspectors")) + { + helpEnabled = true; + } + } + return helpEnabled; + } + + /// + /// Determines the height of the textbox. + /// + /// The textbox height. + /// Message. + protected virtual float DetermineTextboxHeight(string message) + { + GUIStyle style = new GUIStyle(EditorStyles.helpBox); + style.richText=true; + + float newHeight = style.CalcHeight(new GUIContent(message),EditorGUIUtility.currentViewWidth - iconWidth); + return newHeight; + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMInformationDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMInformationDrawer.cs.meta new file mode 100644 index 0000000..739312a --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMInformationDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 45b7f6ca773ad4e81ad2ed6d93158953 +timeCreated: 1459517598 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMenuHelp.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMenuHelp.cs new file mode 100644 index 0000000..4fcd9b7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMenuHelp.cs @@ -0,0 +1,77 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using UnityEditor; + +namespace MoreMountains.Tools +{ + /// + /// This class adds a MoreMountains entry in Unity's top menu, allowing to enable/disable the help texts from the engine's inspectors + /// + public static class MMMenuHelp + { + [MenuItem("Tools/More Mountains/Enable Help in Inspectors", false,0)] + /// + /// Adds a menu item to enable help + /// + private static void EnableHelpInInspectors() + { + SetHelpEnabled(true); + } + + [MenuItem("Tools/More Mountains/Enable Help in Inspectors", true)] + /// + /// Conditional method to determine if the "enable help" entry should be greyed or not + /// + private static bool EnableHelpInInspectorsValidation() + { + return !HelpEnabled(); + } + + [MenuItem("Tools/More Mountains/Disable Help in Inspectors", false,1)] + /// + /// Adds a menu item to disable help + /// + private static void DisableHelpInInspectors() + { + SetHelpEnabled(false); + } + + [MenuItem("Tools/More Mountains/Disable Help in Inspectors", true)] + /// + /// Conditional method to determine if the "disable help" entry should be greyed or not + /// + private static bool DisableHelpInInspectorsValidation() + { + return HelpEnabled(); + } + + /// + /// Checks editor prefs to see if help is enabled or not + /// + /// true, if enabled was helped, false otherwise. + private static bool HelpEnabled() + { + if (EditorPrefs.HasKey("MMShowHelpInInspectors")) + { + return EditorPrefs.GetBool("MMShowHelpInInspectors"); + } + else + { + EditorPrefs.SetBool("MMShowHelpInInspectors",true); + return true; + } + } + + /// + /// Sets the help enabled editor pref. + /// + /// If set to true status. + private static void SetHelpEnabled(bool status) + { + EditorPrefs.SetBool("MMShowHelpInInspectors",status); + SceneView.RepaintAll(); + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMenuHelp.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMenuHelp.cs.meta new file mode 100644 index 0000000..7b367af --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMenuHelp.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 28fbd4d56656345f4ba40f7e4d786fb1 +timeCreated: 1477393124 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourFieldInfo.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourFieldInfo.cs new file mode 100644 index 0000000..6a1a54a --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourFieldInfo.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace MoreMountains.Tools +{ + static class MMMonoBehaviourFieldInfo + { + public static Dictionary> FieldInfoList = new Dictionary>(); + + public static int GetFieldInfo(Object target, out List fieldInfoList) + { + Type targetType = target.GetType(); + int targetTypeHashCode = targetType.GetHashCode(); + + if (!FieldInfoList.TryGetValue(targetTypeHashCode, out fieldInfoList)) + { + IList typeTree = targetType.GetBaseTypes(); + fieldInfoList = target.GetType().GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic) + .OrderByDescending(x => typeTree.IndexOf(x.DeclaringType)) + .ToList(); + FieldInfoList.Add(targetTypeHashCode, fieldInfoList); + } + + return fieldInfoList.Count; + } + + public static IList GetBaseTypes(this Type t) + { + var types = new List(); + while (t.BaseType != null) + { + types.Add(t); + t = t.BaseType; + } + + return types; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourFieldInfo.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourFieldInfo.cs.meta new file mode 100644 index 0000000..370417d --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourFieldInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e65295240cbc68641b5b47a57a4296a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditor.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditor.cs new file mode 100644 index 0000000..9275c69 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditor.cs @@ -0,0 +1,236 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +#if UNITY_EDITOR +using UnityEditor; +using UnityEditor.UIElements; +#endif +using UnityEngine; +using System.Linq; +using UnityEngine.UIElements; + +namespace MoreMountains.Tools +{ + public class MMInspectorGroupData + { + public bool GroupIsOpen; + public MMInspectorGroupAttribute GroupAttribute; + public List PropertiesList = new List(); + public HashSet GroupHashSet = new HashSet(); + public Color GroupColor; + + public void ClearGroup() + { + GroupAttribute = null; + GroupHashSet.Clear(); + PropertiesList.Clear(); + } + } + + [CanEditMultipleObjects] + [CustomEditor(typeof(MMMonoBehaviour), true)] + public class MMMonoBehaviourUITKEditor : Editor + { + public StyleSheet EditorStyleSheet; + + public bool DrawerInitialized; + public Dictionary GroupData ; + public List PropertiesList; + private bool _requiresConstantRepaint; + private bool _requiresConstantRepaintOnlyWhenPlaying; + private MMMonoBehaviour _targetMonoBehaviourGameObject; + private bool _targetMonoBehaviourIsNotNull; + protected bool _shouldDrawBase = true; + protected string _targetTypeName; + + public override bool RequiresConstantRepaint() + { + if (_requiresConstantRepaintOnlyWhenPlaying) + { + return Application.isPlaying && _targetMonoBehaviourIsNotNull && _targetMonoBehaviourGameObject.enabled; + } + else + { + return _requiresConstantRepaint; + } + } + + private string[] _mmHiddenPropertiesToHide; + private bool _hasMMHiddenProperties = false; + + protected virtual void Initialization() + { + if (DrawerInitialized && PropertiesList != null) + { + return; + } + + _shouldDrawBase = true; + GroupData = new Dictionary(); + PropertiesList = new List(); + _targetTypeName = target.GetType().Name; + + _targetMonoBehaviourGameObject = (MMMonoBehaviour)target; + if (_targetMonoBehaviourGameObject != null) + { + _targetMonoBehaviourIsNotNull = true; + } + + _requiresConstantRepaint = serializedObject.targetObject.GetType().GetCustomAttribute() != null; + _requiresConstantRepaintOnlyWhenPlaying = serializedObject.targetObject.GetType().GetCustomAttribute() != null; + + List fieldInfoList; + MMInspectorGroupAttribute previousGroupAttribute = default; + int fieldInfoLength = MMMonoBehaviourFieldInfo.GetFieldInfo(target, out fieldInfoList); + + for (int i = 0; i < fieldInfoLength; i++) + { + MMInspectorGroupAttribute group = Attribute.GetCustomAttribute(fieldInfoList[i], typeof(MMInspectorGroupAttribute)) as MMInspectorGroupAttribute; + MMInspectorGroupData groupData; + if (group == null) + { + if (previousGroupAttribute != null && previousGroupAttribute.GroupAllFieldsUntilNextGroupAttribute) + { + _shouldDrawBase = false; + if (!GroupData.TryGetValue(previousGroupAttribute.GroupName, out groupData)) + { + GroupData.Add(previousGroupAttribute.GroupName, new MMInspectorGroupData + { + GroupAttribute = previousGroupAttribute, + GroupHashSet = new HashSet { fieldInfoList[i].Name }, + GroupColor = MMColors.GetColorAt(previousGroupAttribute.GroupColorIndex) + }); + } + else + { + groupData.GroupColor = MMColors.GetColorAt(previousGroupAttribute.GroupColorIndex); + groupData.GroupHashSet.Add(fieldInfoList[i].Name); + } + } + + continue; + } + + previousGroupAttribute = group; + + if (!GroupData.TryGetValue(group.GroupName, out groupData)) + { + bool fallbackOpenState = true; + if (group.ClosedByDefault) { fallbackOpenState = false; } + bool groupIsOpen = EditorPrefs.GetBool(string.Format($"{group.GroupName}{fieldInfoList[i].Name}{target.GetInstanceID()}"), fallbackOpenState); + GroupData.Add(group.GroupName, new MMInspectorGroupData + { + GroupAttribute = group, + GroupColor = MMColors.GetColorAt(previousGroupAttribute.GroupColorIndex), + GroupHashSet = new HashSet { fieldInfoList[i].Name }, GroupIsOpen = groupIsOpen }); + } + else + { + groupData.GroupHashSet.Add(fieldInfoList[i].Name); + groupData.GroupColor = MMColors.GetColorAt(previousGroupAttribute.GroupColorIndex); + } + } + + SerializedProperty iterator = serializedObject.GetIterator(); + + if (iterator.NextVisible(true)) + { + do + { + FillPropertiesList(iterator); + } while (iterator.NextVisible(false)); + } + DrawerInitialized = true; + } + + public void FillPropertiesList(SerializedProperty serializedProperty) + { + bool shouldClose = false; + + foreach (KeyValuePair pair in GroupData) + { + if (pair.Value.GroupHashSet.Contains(serializedProperty.name)) + { + SerializedProperty property = serializedProperty.Copy(); + shouldClose = true; + pair.Value.PropertiesList.Add(property); + break; + } + } + + if (!shouldClose) + { + SerializedProperty property = serializedProperty.Copy(); + PropertiesList.Add(property); + } + } + + public override VisualElement CreateInspectorGUI() + { + Initialization(); + + VisualElement root = new VisualElement(); + root.styleSheets.Add(EditorStyleSheet); + + // Draw the script field + SerializedProperty scriptProperty = serializedObject.FindProperty("m_Script"); + + if (PropertiesList.Count == 0) + { + return root; + } + + if (_shouldDrawBase) + { + VisualElement defaultInspector = new VisualElement(); + InspectorElement.FillDefaultInspector(defaultInspector, serializedObject, this); + root.Add(defaultInspector); + return root; + } + + PropertyField scriptField = new PropertyField(scriptProperty); + scriptField.SetEnabled(false); + root.Add(scriptField); + + foreach (KeyValuePair pair in GroupData) + { + DrawGroup(pair.Value, root); + } + + serializedObject.ApplyModifiedProperties(); + + return root; + } + + protected virtual void DrawGroup(MMInspectorGroupData groupData, VisualElement root) + { + Foldout foldout = new Foldout(); + foldout.text = groupData.GroupAttribute.GroupName; + foldout.value = groupData.GroupIsOpen; + foldout.AddToClassList("mm-foldout"); + foldout.style.borderLeftColor = groupData.GroupColor; + foldout.viewDataKey = target.name + "-" + _targetTypeName + groupData.GroupAttribute.GroupName; + root.Add(foldout); + + var toggleElement = foldout.Q(); + toggleElement.AddToClassList("mm-foldout-toggle"); + + for (int i = 0; i < groupData.PropertiesList.Count; i++) + { + DrawChild(i, foldout, root); + } + + void DrawChild(int i, Foldout foldout, VisualElement root) + { + if ((_hasMMHiddenProperties) && (_mmHiddenPropertiesToHide.Contains(groupData.PropertiesList[i].name))) + { + return; + } + PropertyField field = new PropertyField(groupData.PropertiesList[i]); + field.label = ObjectNames.NicifyVariableName(groupData.PropertiesList[i].name); + field.tooltip = groupData.PropertiesList[i].tooltip; + foldout.Add(field); + } + } + } +} diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditor.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditor.cs.meta new file mode 100644 index 0000000..8c5770f --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditor.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 117d5758fb780a14d91b570328c048da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - EditorStyleSheet: {fileID: 7433441132597879392, guid: 9da245a6982a71d45b143036ec3684bd, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditorStylesheet.uss b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditorStylesheet.uss new file mode 100644 index 0000000..57c4d83 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditorStylesheet.uss @@ -0,0 +1,113 @@ +/* Foldout */ +.mm-foldout { + background-color: rgba(0, 0, 0, 0.12); + margin-top: 5px; + margin-bottom: 5px; + border-left-color: black; + border-left-width: 3px; + padding-right: 10px; + padding-left: 0; + padding-bottom: 0; + padding-top: 0; +} + +/* Foldout header bar */ +.mm-foldout Toggle.mm-foldout-toggle { + background-color: rgba(0, 0, 0, 0.12); + padding-top: 5px; + padding-left: 10px; + margin-left: 0; + padding-bottom: 5px; + margin-bottom: 0; + -unity-font-style: bold; +} + +/* Foldout contents */ +.mm-foldout #unity-content { + padding-top: 5px; + margin-top: 0; + margin-left: 10px; + padding-left: 10px; + padding-bottom: 10px; +} + +/* [Header] attributes */ +.mm-foldout .unity-header-drawer__label { + margin-top: 10px; + padding-bottom: 5px; + padding-top: 5px; + margin-left: -20px; + padding-left: 20px; + -unity-font-style: bold; + background-color: rgba(255, 255, 255, 0.04); +} + +/* Button toolbars */ +.mm-toolbar { + margin-top: 5px; + border-width: 0px; + +} + +.mm-toolbar ToolbarButton { + border-width: 1px; + -unity-text-align: middle-center; +} + +.mm-toolbar ToolbarButton.main-call-to-action { + background-color: rgba(30, 94, 88, 1); + color: white; + -unity-text-align: middle-center; +} + +.mm-fixed-width-floatfield FloatInput TextElement +{ + width: 50px; +} + +.mm-fixed-width-floatfield Label +{ + min-width: 50px; +} + + /* Spring */ + +.mm-spring-debug-track-background +{ + margin-top: 5px; + background-color: rgba(0, 0, 0, 0.5); + height: 20px; + width: 100%; + flex-direction: row; + justify-content: flex-start; +} + +.mm-spring-debug-track-foreground +{ + background-color: rgba(255, 196, 0, 1); + height: 20px; + width: 10px; + margin-top: -20px; +} + +.mm-spring-debug-track-foreground-container-left +{ + background-color: green; + height: 20px; + width: 50%; + left: 0px; + margin-top: -20px; + display: flex; + justify-content: flex-end; +} + +.mm-spring-debug-track-foreground-container-right +{ + background-color: blue; + height: 20px; + width: 50%; + left: 50%; + margin-top: -20px; + display: flex; + justify-content: flex-end; +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditorStylesheet.uss.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditorStylesheet.uss.meta new file mode 100644 index 0000000..c6e606a --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMMonoBehaviourUITKEditorStylesheet.uss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9da245a6982a71d45b143036ec3684bd +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMNavMeshAreaMaskAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMNavMeshAreaMaskAttributeDrawer.cs new file mode 100644 index 0000000..364bc8d --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMNavMeshAreaMaskAttributeDrawer.cs @@ -0,0 +1,32 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMNavMeshAreaMaskAttribute))] + public class MMNavMeshAreaMaskAttributeDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty serializedProperty, GUIContent label) + { + string[] navMeshAreaNames = GameObjectUtility.GetNavMeshAreaNames(); + float positionWidth = position.width; + int maskValue = serializedProperty.intValue; + + position.width = EditorGUIUtility.labelWidth; + EditorGUI.PrefixLabel(position, label); + + position.x += EditorGUIUtility.labelWidth; + position.width = positionWidth - EditorGUIUtility.labelWidth; + + EditorGUI.BeginChangeCheck(); + maskValue = EditorGUI.MaskField(position, maskValue, navMeshAreaNames); + + if (EditorGUI.EndChangeCheck()) + { + serializedProperty.intValue = maskValue; + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMNavMeshAreaMaskAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMNavMeshAreaMaskAttributeDrawer.cs.meta new file mode 100644 index 0000000..e1f8cab --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMNavMeshAreaMaskAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d11abeecdd903045a64fffcd165e178 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMReadOnlyAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMReadOnlyAttributeDrawer.cs new file mode 100644 index 0000000..8b1af3c --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMReadOnlyAttributeDrawer.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + + [CustomPropertyDrawer(typeof(MMReadOnlyAttribute))] + + public class MMReadOnlyAttributeDrawer : PropertyDrawer + { + // Necessary since some properties tend to collapse smaller than their content + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label, true); + } + + #if UNITY_EDITOR + // Draw a disabled property field + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + GUI.enabled = false; // Disable fields + EditorGUI.PropertyField(position, property, label, true); + GUI.enabled = true; // Enable fields + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMReadOnlyAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMReadOnlyAttributeDrawer.cs.meta new file mode 100644 index 0000000..eeb3f3a --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMReadOnlyAttributeDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8bc90960c2aea754a8ff74069babfa0b +timeCreated: 1456269803 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMVectorAttributeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMVectorAttributeDrawer.cs new file mode 100644 index 0000000..46dc9b4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMVectorAttributeDrawer.cs @@ -0,0 +1,102 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMVectorAttribute))] + public class MMVectorLabelsAttributeDrawer : PropertyDrawer + { + protected static readonly GUIContent[] originalLabels = new GUIContent[] { new GUIContent("X"), new GUIContent("Y"), new GUIContent("Z"), new GUIContent("W") }; + protected const int padding = 375; + + public override float GetPropertyHeight(SerializedProperty property, GUIContent guiContent) + { + int ratio = (padding > Screen.width) ? 2 : 1; + return ratio * base.GetPropertyHeight(property, guiContent); + } + + #if UNITY_EDITOR + public override void OnGUI(Rect rect, SerializedProperty property, GUIContent guiContent) + { + MMVectorAttribute vector = (MMVectorAttribute)attribute; + + if (property.propertyType == SerializedPropertyType.Vector2) + { + float[] fieldArray = new float[] { property.vector2Value.x, property.vector2Value.y }; + fieldArray = DrawFields(rect, fieldArray, ObjectNames.NicifyVariableName(property.name), EditorGUI.FloatField, vector, guiContent); + property.vector2Value = new Vector2(fieldArray[0], fieldArray[1]); + } + else if (property.propertyType == SerializedPropertyType.Vector3) + { + float[] fieldArray = new float[] { property.vector3Value.x, property.vector3Value.y, property.vector3Value.z }; + fieldArray = DrawFields(rect, fieldArray, ObjectNames.NicifyVariableName(property.name), EditorGUI.FloatField, vector, guiContent); + property.vector3Value = new Vector3(fieldArray[0], fieldArray[1], fieldArray[2]); + } + else if (property.propertyType == SerializedPropertyType.Vector4) + { + float[] fieldArray = new float[] { property.vector4Value.x, property.vector4Value.y, property.vector4Value.z, property.vector4Value.w }; + fieldArray = DrawFields(rect, fieldArray, ObjectNames.NicifyVariableName(property.name), EditorGUI.FloatField, vector, guiContent); + property.vector4Value = new Vector4(fieldArray[0], fieldArray[1], fieldArray[2]); + } + else if (property.propertyType == SerializedPropertyType.Vector2Int) + { + int[] fieldArray = new int[] { property.vector2IntValue.x, property.vector2IntValue.y }; + fieldArray = DrawFields(rect, fieldArray, ObjectNames.NicifyVariableName(property.name), EditorGUI.IntField, vector, guiContent); + property.vector2IntValue = new Vector2Int(fieldArray[0], fieldArray[1]); + } + else if (property.propertyType == SerializedPropertyType.Vector3Int) + { + int[] array = new int[] { property.vector3IntValue.x, property.vector3IntValue.y, property.vector3IntValue.z }; + array = DrawFields(rect, array, ObjectNames.NicifyVariableName(property.name), EditorGUI.IntField, vector, guiContent); + property.vector3IntValue = new Vector3Int(array[0], array[1], array[2]); + } + } + #endif + + protected T[] DrawFields(Rect rect, T[] vector, string mainLabel, System.Func fieldDrawer, MMVectorAttribute vectors, GUIContent originalGuiContent) + { + T[] result = vector; + + bool shortSpace = (Screen.width < padding); + + Rect mainLabelRect = rect; + mainLabelRect.width = EditorGUIUtility.labelWidth; + if (shortSpace) + { + mainLabelRect.height *= 0.5f; + } + + Rect fieldRect = rect; + if (shortSpace) + { + fieldRect.height *= 0.5f; + fieldRect.y += fieldRect.height; + fieldRect.width = rect.width / vector.Length; + } + else + { + fieldRect.x += mainLabelRect.width; + fieldRect.width = (rect.width - mainLabelRect.width) / vector.Length; + } + + GUIContent mainLabelContent = new GUIContent(); + mainLabelContent.text = mainLabel; + mainLabelContent.tooltip = originalGuiContent.tooltip; + EditorGUI.LabelField(mainLabelRect, mainLabelContent); + + for (int i = 0; i < vector.Length; i++) + { + GUIContent label = vectors.Labels.Length > i ? new GUIContent(vectors.Labels[i]) : originalLabels[i]; + Vector2 labelSize = EditorStyles.label.CalcSize(label); + EditorGUIUtility.labelWidth = Mathf.Max(labelSize.x + 5, 0.3f * fieldRect.width); + result[i] = fieldDrawer(fieldRect, label, vector[i]); + fieldRect.x += fieldRect.width; + } + + EditorGUIUtility.labelWidth = 0; + return result; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMVectorAttributeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMVectorAttributeDrawer.cs.meta new file mode 100644 index 0000000..71ba5ce --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAttributes/MMVectorAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2ed4e1d780d3c341b45a60fd3358cf5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAudio.meta b/Assets/Feel/MMTools/Core/Editor/MMAudio.meta new file mode 100644 index 0000000..8c3aa05 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAudio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 691b9da9cdfd29744bccf9b73c08711e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer.meta b/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer.meta new file mode 100644 index 0000000..612b387 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16c45ec4926adef408a0bca043df116f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer/MMAudioAnalyzerEditor.cs b/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer/MMAudioAnalyzerEditor.cs new file mode 100644 index 0000000..0debbaf --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer/MMAudioAnalyzerEditor.cs @@ -0,0 +1,677 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + #if UNITY_EDITOR + [CustomEditor(typeof(MMAudioAnalyzer), true)] + [CanEditMultipleObjects] + public class MMAudioAnalyzerEditor : Editor + { + public bool Active; + public SerializedProperty BandLevels; + public SerializedProperty BufferedBandLevels; + + public SerializedProperty NormalizedBandLevels; + public SerializedProperty NormalizedBufferedBandLevels; + + public SerializedProperty BandPeaks; + public SerializedProperty LastPeaksAt; + public SerializedProperty RawSpectrum; + + public SerializedProperty Amplitude; + public SerializedProperty NormalizedAmplitude; + public SerializedProperty BufferedAmplitude; + public SerializedProperty NormalizedBufferedAmplitude; + + public SerializedProperty PeaksPasted; + + public SerializedProperty Beats; + + // inspector + protected float _inspectorWidth; + protected int _numberOfBands; + protected Color _barColor; + protected Color _inactiveColor = new Color(0f, 0f, 0f, 0.4f); + protected Color _bufferedBarColor = new Color(0f, 0f, 0f, 0.3f); + protected Color _normalBarColor = MMColors.Orange; + protected Color _normalNormalizedBarColor = MMColors.Aqua; + protected Color _peakColor = MMColors.Yellow; + protected Color _activePeakColor = Color.white; + protected Color _amplitudeColor = MMColors.DarkOrange; + protected Color _normalizedAmplitudeColor = MMColors.Aquamarine; + protected Color _spectrumColor = MMColors.HotPink; + + protected Color _beatColor; + + protected bool _bandValuesFoldout = false; + protected float _peakShowDuration = 0.5f; + + // box + protected Vector2 _boxPosition; + protected Vector2 _boxSize; + protected const float _externalMargin = 12f; + protected float _internalMargin = 12f; + protected const float _lineHeight = 15f; + protected const int _numberOfAxis = 5; + protected const int _numberOfAxisSpectrum = 4; + protected const int _bandsValuesBoxHeight = 150; + protected const int _rawSpectrumBoxHeight = 75; + + + // coordinates + protected float _topY; + protected float _boxBottomY; + protected float _positionX; + protected float _positionY; + + // column + protected float _columnWidth; + protected float _columnHeight; + protected float _maxColumnHeight; + + // spectrum + protected float _spectrumBoxBottomY; + protected Vector2 _spectrumBoxPosition; + protected Vector2 _spectrumBoxSize; + protected float _spectrumMaxColumnHeight; + + // axis + protected Vector3 _axisOrigin = Vector3.zero; + protected Vector3 _axisDestination = Vector3.zero; + + // styles + protected GUIStyle _redLabel = new GUIStyle(); + protected Color _normalLabelColor; + + protected Rect _rect; + + protected virtual void OnEnable() + { + Active = serializedObject.FindProperty("Active").boolValue; + BandLevels = serializedObject.FindProperty("BandLevels"); + BufferedBandLevels = serializedObject.FindProperty("BufferedBandLevels"); + NormalizedBandLevels = serializedObject.FindProperty("NormalizedBandLevels"); + NormalizedBufferedBandLevels = serializedObject.FindProperty("NormalizedBufferedBandLevels"); + BandPeaks = serializedObject.FindProperty("BandPeaks"); + LastPeaksAt = serializedObject.FindProperty("LastPeaksAt"); + RawSpectrum = serializedObject.FindProperty("RawSpectrum"); + _numberOfBands = serializedObject.FindProperty("NumberOfBands").intValue; + Amplitude = serializedObject.FindProperty("Amplitude"); + NormalizedAmplitude = serializedObject.FindProperty("NormalizedAmplitude"); + BufferedAmplitude = serializedObject.FindProperty("BufferedAmplitude"); + NormalizedBufferedAmplitude = serializedObject.FindProperty("NormalizedBufferedAmplitude"); + PeaksPasted = serializedObject.FindProperty("PeaksPasted"); + Beats = serializedObject.FindProperty("Beats"); + _redLabel.normal.textColor = Color.red; + _rect = new Rect(); + } + + /// + /// Forces constant repaint of the inspector, making for much faster display of the bands bars. + /// + /// + public override bool RequiresConstantRepaint() + { + return true; + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + UpdateNumberOfBandsIfNeeded(); + DrawDefaultInspector(); + _inspectorWidth = EditorGUIUtility.currentViewWidth - 24; + DrawBandTable(); + DrawBeats(); + DrawBandVisualization(); + DrawBandVisualizationNormalized(); + DrawRawSpectrum(); + PreProcessingButtons(); + serializedObject.ApplyModifiedProperties(); + } + + protected virtual void UpdateNumberOfBandsIfNeeded() + { + if (!Application.isPlaying) + { + _numberOfBands = serializedObject.FindProperty("NumberOfBands").intValue; + } + } + + protected virtual void DrawBandTable() + { + + GUILayout.Space(10); + GUILayout.Label("Band values", EditorStyles.boldLabel); + + _bandValuesFoldout = EditorGUILayout.Foldout(_bandValuesFoldout, "Levels"); + + if (!Active) + { + if (_bandValuesFoldout) + { + GUILayout.Label("Values are only displayed when the game is running."); + } + return; + } + + if (BandPeaks.arraySize == 0) + { + return; + } + + if (_bandValuesFoldout) + { + float win = Screen.width; + float w1 = win * 0.15f; + float w2 = win * 0.2f; + float w3 = win * 0.2f; + float w4 = win * 0.2f; + float w5 = win * 0.2f; + + float wA = win * 0.5f; + float wB = win * 0.5f; + + GUILayout.BeginHorizontal(); + GUILayout.Label("Amplitude :", GUILayout.Width(wA)); + GUILayout.Label(Amplitude.floatValue.ToString(), GUILayout.Width(wB)); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Normalized Amplitude :", GUILayout.Width(wA)); + GUILayout.Label(NormalizedAmplitude.floatValue.ToString(), GUILayout.Width(wB)); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Buffered Amplitude :", GUILayout.Width(wA)); + GUILayout.Label(BufferedAmplitude.floatValue.ToString(), GUILayout.Width(wB)); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Normalized Buffered Amplitude :", GUILayout.Width(wA)); + GUILayout.Label(NormalizedBufferedAmplitude.floatValue.ToString(), GUILayout.Width(wB)); + GUILayout.EndHorizontal(); + + + + GUILayout.BeginHorizontal(); + GUILayout.Label("Band", EditorStyles.boldLabel, GUILayout.Width(w1)); + GUILayout.Label("Value", EditorStyles.boldLabel, GUILayout.Width(w2)); + GUILayout.Label("Peak", EditorStyles.boldLabel, GUILayout.Width(w3)); + GUILayout.Label("Normalized", EditorStyles.boldLabel, GUILayout.Width(w4)); + GUILayout.Label("Norm. Buffered", EditorStyles.boldLabel, GUILayout.Width(w5)); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + for (int i = 0; i < _numberOfBands; i++) + { + GUILayout.BeginHorizontal(); + GUILayout.Label(i.ToString(), EditorStyles.boldLabel, GUILayout.Width(w1)); + GUILayout.Label(BandLevels.GetArrayElementAtIndex(i).floatValue.ToString(), GUILayout.Width(w2)); + if (Time.time - LastPeaksAt.GetArrayElementAtIndex(i).floatValue < _peakShowDuration) + { + _normalLabelColor = GUI.skin.label.normal.textColor; + GUI.skin.label.normal.textColor = _peakColor; + GUILayout.Label(BandPeaks.GetArrayElementAtIndex(i).floatValue.ToString(), GUILayout.Width(w3)); + GUI.skin.label.normal.textColor = _normalLabelColor; + } + else + { + GUILayout.Label(BandPeaks.GetArrayElementAtIndex(i).floatValue.ToString(), GUILayout.Width(w3)); + } + GUILayout.Label(NormalizedBandLevels.GetArrayElementAtIndex(i).floatValue.ToString(), GUILayout.Width(w4)); + GUILayout.Label(NormalizedBufferedBandLevels.GetArrayElementAtIndex(i).floatValue.ToString(), GUILayout.Width(w5)); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + } + } + } + + protected const int _beatsBoxHeight = 40; + + protected virtual void DrawBeats() + { + if ((Beats == null) || (target as MMAudioAnalyzer).Beats == null) + { + return; + } + + float length = (target as MMAudioAnalyzer).Beats.Length; + if (length <= 0) + { + return; + } + + float margin = _beatsBoxHeight / 10; + float beatsBoxSquareSize = _beatsBoxHeight - (2 * margin); + + int boxesPerLine = (int)Mathf.Round((_inspectorWidth - margin - 3*_externalMargin) / (beatsBoxSquareSize + margin)) ; + int numberOfLines = (int)(length / boxesPerLine) + 1; + float boxHeight = (_beatsBoxHeight) * numberOfLines - margin * (numberOfLines - 1); + + GUILayout.Space(10); + GUILayout.Label("Beats Visualization", EditorStyles.boldLabel); + + GUILayout.Box("", GUILayout.Width(_inspectorWidth - _externalMargin), GUILayout.Height(boxHeight)); + + _boxPosition = GUILayoutUtility.GetLastRect().position; + _boxSize = GUILayoutUtility.GetLastRect().size; + _boxBottomY = _boxPosition.y + _beatsBoxHeight - _externalMargin - _lineHeight; + + int counter = 0; + int lineCounter = 0; + for (int i = 0; i < length; i++) + { + if (counter > boxesPerLine - 1) + { + counter = 0; + lineCounter++; + } + + float boxX = _boxPosition.x + margin + counter * (beatsBoxSquareSize + margin); + float boxY = _boxPosition.y + margin + lineCounter * (beatsBoxSquareSize + margin); + + // draw bg bar + _rect.x = boxX; + _rect.y = boxY; + _rect.width = beatsBoxSquareSize; + _rect.height = beatsBoxSquareSize; + EditorGUI.DrawRect(_rect, _inactiveColor); + + if (Active) + { + // draw front bar + _beatColor = (target as MMAudioAnalyzer).Beats[i].BeatColor; + _beatColor.a = (target as MMAudioAnalyzer).Beats[i].CurrentValue; + _rect.x = boxX; + _rect.y = boxY; + _rect.width = beatsBoxSquareSize; + _rect.height = beatsBoxSquareSize; + EditorGUI.DrawRect(_rect, _beatColor); + } + + // draw number + float labelX = (i > 9) ? boxX + beatsBoxSquareSize / 4 - 2 : boxX + beatsBoxSquareSize / 4 + 2; + + _rect.x = labelX; + _rect.y = boxY + beatsBoxSquareSize / 4; + _rect.width = beatsBoxSquareSize; + _rect.height = beatsBoxSquareSize; + EditorGUI.LabelField(_rect, i.ToString(), EditorStyles.boldLabel); + + counter++; + } + } + + protected virtual void DrawBandVisualization() + { + GUILayout.Space(10); + GUILayout.Label("Raw Visualization", EditorStyles.boldLabel); + + _internalMargin = (_numberOfBands > 8) ? 6f : _externalMargin; + + // box + GUILayout.Box("", GUILayout.Width(_inspectorWidth - _externalMargin), GUILayout.Height(_bandsValuesBoxHeight)); + _boxPosition = GUILayoutUtility.GetLastRect().position; + _boxSize = GUILayoutUtility.GetLastRect().size; + _boxBottomY = _boxPosition.y + _boxSize.y - _externalMargin - _lineHeight; + _columnWidth = (_boxSize.x - (_numberOfBands + 1) * _internalMargin) / _numberOfBands; + _maxColumnHeight = _boxSize.y - 2 * _externalMargin - _lineHeight - 5; + + // lines + Handles.BeginGUI(); + + // horizontal axis + Handles.color = Color.grey; + for (int i = 0; i < _numberOfAxis; i++) + { + _axisOrigin.x = _boxPosition.x; + _axisOrigin.y = _boxBottomY + _lineHeight / _numberOfAxis - i * (_boxSize.y / _numberOfAxis); + _axisDestination.x = _boxPosition.x + _boxSize.x; + _axisDestination.y = _axisOrigin.y; + Handles.DrawLine(_axisOrigin, _axisDestination); + } + + // peaks + if ((BandPeaks != null) && (BandPeaks.arraySize == _numberOfBands)) + { + for (int i = 0; i < _numberOfBands; i++) + { + float peak = BandPeaks.GetArrayElementAtIndex(i).floatValue; + if (Active) + { + if (Time.time - LastPeaksAt.GetArrayElementAtIndex(i).floatValue < _peakShowDuration) + { + Handles.color = _activePeakColor; + } + else + { + Handles.color = _peakColor; + } + } + else + { + Handles.color = _peakColor; + } + _axisOrigin.x = _boxPosition.x + _internalMargin * (i + 1) + _columnWidth * i; + _axisOrigin.y = _boxBottomY - MMMaths.Remap(peak, 0f, 1f, 0f, _maxColumnHeight); + _axisDestination.x = _axisOrigin.x + _columnWidth; + _axisDestination.y = _axisOrigin.y; + Handles.DrawLine(_axisOrigin, _axisDestination); + } + } + + Handles.EndGUI(); + + // amplitude cursors + _columnHeight = MMMaths.Remap(Amplitude.floatValue, 0f, 1f, 0f, _maxColumnHeight); + _positionX = _boxPosition.x - _externalMargin/4 ; + _positionY = _boxBottomY - _columnHeight; + + _rect.x = _positionX; + _rect.y = _positionY; + _rect.width = _externalMargin / 2; + _rect.height = _externalMargin / 2; + EditorGUI.DrawRect(_rect, _amplitudeColor); + + _columnHeight = MMMaths.Remap(BufferedAmplitude.floatValue, 0f, 1f, 0f, _maxColumnHeight); + _positionX = _boxPosition.x + _boxSize.x - _externalMargin / 4; + _positionY = _boxBottomY - _columnHeight; + + _rect.x = _positionX; + _rect.y = _positionY; + _rect.width = _externalMargin / 2; + _rect.height = _externalMargin / 2; + EditorGUI.DrawRect(_rect, _amplitudeColor); + + // buffered bars + for (int i = 0; i < _numberOfBands; i++) + { + if (Active) + { + float bandLevel = BufferedBandLevels.GetArrayElementAtIndex(i).floatValue; + _columnHeight = MMMaths.Remap(bandLevel, 0f, 1f, 0f, _maxColumnHeight); + _barColor = (Time.time - LastPeaksAt.GetArrayElementAtIndex(i).floatValue < _peakShowDuration/3f) ? _activePeakColor : _bufferedBarColor; + + _positionX = _boxPosition.x + _internalMargin * (i + 1) + _columnWidth * i; + _positionY = _boxBottomY; + + // bar rectangle + _rect.x = _positionX; + _rect.y = _positionY; + _rect.width = _columnWidth; + _rect.height = -_columnHeight; + EditorGUI.DrawRect(_rect, _barColor); + } + } + + // bars + for (int i = 0; i < _numberOfBands; i++) + { + if (Active) + { + float bandLevel = BandLevels.GetArrayElementAtIndex(i).floatValue; + _columnHeight = MMMaths.Remap(bandLevel, 0f, 1f, 0f, _maxColumnHeight); + _barColor = (Time.time - LastPeaksAt.GetArrayElementAtIndex(i).floatValue < _peakShowDuration) ? _peakColor : _normalBarColor; + } + else + { + _barColor = _inactiveColor; + _columnHeight = (i + 1) * (_maxColumnHeight / (_numberOfBands + 1)); + } + + _positionX = _boxPosition.x + _internalMargin * (i + 1) + _columnWidth * i; + _positionY = _boxBottomY; + + // bar rectangle + _rect.x = _positionX; + _rect.y = _positionY; + _rect.width = _columnWidth; + _rect.height = -_columnHeight; + EditorGUI.DrawRect(_rect, _barColor); + + // bar number label + float labelCorrection = (i > 9) ? -5f : 0f; + _rect.x = _positionX + _columnWidth / 2 - 5 + labelCorrection; + _rect.y = _boxBottomY + _lineHeight / 4; + _rect.width = _columnWidth; + _rect.height = _lineHeight; + EditorGUI.LabelField(_rect, i.ToString(), EditorStyles.boldLabel); + } + } + + protected virtual void DrawBandVisualizationNormalized() + { + GUILayout.Space(10); + GUILayout.Label("Normalized Visualization", EditorStyles.boldLabel); + + // box + GUILayout.Box("", GUILayout.Width(_inspectorWidth - _externalMargin), GUILayout.Height(_bandsValuesBoxHeight)); + _boxPosition = GUILayoutUtility.GetLastRect().position; + _boxSize = GUILayoutUtility.GetLastRect().size; + _boxBottomY = _boxPosition.y + _boxSize.y - _externalMargin - _lineHeight; + _columnWidth = (_boxSize.x - (_numberOfBands + 1) * _internalMargin) / _numberOfBands; + _maxColumnHeight = _boxSize.y - 2 * _externalMargin - _lineHeight; + + // lines + Handles.BeginGUI(); + + // horizontal axis + Handles.color = Color.grey; + for (int i = 0; i < _numberOfAxis; i++) + { + _axisOrigin.x = _boxPosition.x; + _axisOrigin.y = _boxBottomY + _lineHeight / _numberOfAxis - i * (_boxSize.y / _numberOfAxis); + _axisDestination.x = _boxPosition.x + _boxSize.x; + _axisDestination.y = _axisOrigin.y; + Handles.DrawLine(_axisOrigin, _axisDestination); + } + + Handles.EndGUI(); + + + // amplitude cursors + _columnHeight = MMMaths.Remap(NormalizedAmplitude.floatValue, 0f, 1f, 0f, _maxColumnHeight); + _positionX = _boxPosition.x - _externalMargin / 4; + _positionY = _boxBottomY - _columnHeight; + + _rect.x = _positionX; + _rect.y = _positionY; + _rect.width = _externalMargin / 2; + _rect.height = _externalMargin / 2; + EditorGUI.DrawRect(_rect, _normalizedAmplitudeColor); + + _columnHeight = MMMaths.Remap(NormalizedBufferedAmplitude.floatValue, 0f, 1f, 0f, _maxColumnHeight); + _positionX = _boxPosition.x + _boxSize.x - _externalMargin / 4; + _positionY = _boxBottomY - _columnHeight; + + _rect.x = _positionX; + _rect.y = _positionY; + _rect.width = _externalMargin / 2; + _rect.height = _externalMargin / 2; + EditorGUI.DrawRect(_rect, _normalizedAmplitudeColor); + + // buffered bars + for (int i = 0; i < _numberOfBands; i++) + { + if (Active) + { + float bandLevel = NormalizedBufferedBandLevels.GetArrayElementAtIndex(i).floatValue; + _columnHeight = MMMaths.Remap(bandLevel, 0f, 1f, 0f, _maxColumnHeight); + _barColor = (Time.time - LastPeaksAt.GetArrayElementAtIndex(i).floatValue < _peakShowDuration / 3f) ? _activePeakColor : _bufferedBarColor; + + _positionX = _boxPosition.x + _internalMargin * (i + 1) + _columnWidth * i; + _positionY = _boxBottomY; + + // bar rectangle + _rect.x = _positionX; + _rect.y = _positionY; + _rect.width = _columnWidth; + _rect.height = -_columnHeight; + EditorGUI.DrawRect(_rect, _barColor); + } + } + + // bars + for (int i = 0; i < _numberOfBands; i++) + { + if (Active) + { + float bandLevel = NormalizedBandLevels.GetArrayElementAtIndex(i).floatValue; + _columnHeight = MMMaths.Remap(bandLevel, 0f, 1f, 0f, _maxColumnHeight); + _barColor = (Time.time - LastPeaksAt.GetArrayElementAtIndex(i).floatValue < _peakShowDuration) ? _peakColor : _normalNormalizedBarColor; + } + else + { + _barColor = _inactiveColor; + _columnHeight = (i + 1) * (_maxColumnHeight / (_numberOfBands + 1)); + } + + _positionX = _boxPosition.x + _internalMargin * (i + 1) + _columnWidth * i; + _positionY = _boxBottomY; + + // bar rectangle + _rect.x = _positionX; + _rect.y = _positionY; + _rect.width = _columnWidth; + _rect.height = -_columnHeight; + EditorGUI.DrawRect(_rect, _barColor); + // bar number label + float labelCorrection = (i > 9) ? -5f : 0f; + + _rect.x = _positionX + _columnWidth / 2 - 5 + labelCorrection; + _rect.y = _boxBottomY + _lineHeight / 4; + _rect.width = _columnWidth; + _rect.height = _lineHeight; + EditorGUI.LabelField(_rect, i.ToString(), EditorStyles.boldLabel); + } + } + + protected virtual void DrawRawSpectrum() + { + GUILayout.Space(10); + GUILayout.Label("Raw Spectrum", EditorStyles.boldLabel); + + // box + GUILayout.Box("", GUILayout.Width(_inspectorWidth - _externalMargin), GUILayout.Height(_rawSpectrumBoxHeight)); + _spectrumBoxPosition = GUILayoutUtility.GetLastRect().position; + _spectrumBoxSize = GUILayoutUtility.GetLastRect().size; + _spectrumBoxBottomY = _spectrumBoxPosition.y + _spectrumBoxSize.y; + _spectrumMaxColumnHeight = _spectrumBoxSize.y - 2 * _externalMargin; + Handles.BeginGUI(); + + // horizontal axis + Handles.color = Color.grey; + for (int i = 0; i < _numberOfAxisSpectrum; i++) + { + _axisOrigin.x = _spectrumBoxPosition.x; + _axisOrigin.y = _spectrumBoxBottomY - i * (_spectrumBoxSize.y / _numberOfAxisSpectrum); + _axisDestination.x = _spectrumBoxPosition.x + _spectrumBoxSize.x; + _axisDestination.y = _axisOrigin.y; + Handles.DrawLine(_axisOrigin, _axisDestination); + } + + if (Active) + { + // spectrum + for (int i = 1; i < RawSpectrum.arraySize - 1; i++) + { + + float xPosition = _spectrumBoxPosition.x + _externalMargin + MMMaths.Remap(i, 0, RawSpectrum.arraySize, 0f, _spectrumBoxSize.x - _externalMargin * 2); + float yPosition = _spectrumBoxPosition.y + _spectrumBoxSize.y / 2 ; + float deltaX = (_spectrumBoxSize.x - _externalMargin * 2) / RawSpectrum.arraySize; + + float spectrumValue = RawSpectrum.GetArrayElementAtIndex(i).floatValue; + float spectrumValuePrevious = RawSpectrum.GetArrayElementAtIndex(i - 1).floatValue; + + float factor = _spectrumBoxSize.y/2; + + spectrumValue = - (1 / Mathf.Log(spectrumValue)) * factor; ; + spectrumValuePrevious = - (1 / Mathf.Log(spectrumValuePrevious)) * factor; + + spectrumValue = Mathf.Clamp(spectrumValue, 0f, _spectrumBoxSize.y / 2f); + spectrumValuePrevious = Mathf.Clamp(spectrumValuePrevious, 0f, _spectrumBoxSize.y / 2f); + + Handles.color = _spectrumColor; + _axisOrigin.x = xPosition - deltaX; + _axisOrigin.y = yPosition + spectrumValuePrevious; + _axisDestination.x = xPosition; + _axisDestination.y = (i % 2 == 0) ? yPosition + spectrumValue : yPosition - spectrumValue; + Handles.DrawLine(_axisOrigin, _axisDestination); + } + } + else + { + int points = 100; + for (int i = 1; i < points - 1; i++) + { + float xPosition = _spectrumBoxPosition.x + _externalMargin + MMMaths.Remap(i, 0, points, 0f, _spectrumBoxSize.x - _externalMargin * 2); + float yPosition = _spectrumBoxPosition.y + _spectrumBoxSize.y / 2; + float deltaBetweenXandXPrevious = (_spectrumBoxSize.x - _externalMargin * 2) / points; + + float spectrumValue = Foobar(i); + float spectrumValuePrevious = Foobar(i-1); + + float factor = _spectrumBoxSize.y / 2; + + Handles.color = _inactiveColor; + _axisOrigin.x = xPosition - deltaBetweenXandXPrevious; + _axisOrigin.y = yPosition + spectrumValuePrevious; + _axisDestination.x = xPosition; + _axisDestination.y = yPosition + spectrumValue ; + + var p1 = _axisOrigin; + var p2 = _axisDestination; + var thickness = 3; + Handles.DrawBezier(p1, p2, p1, p2, _spectrumColor, null, thickness); + } + } + Handles.EndGUI(); + } + + protected virtual float Foobar(float x) + { + return 25f * Mathf.Sin(x * 0.5f); + } + + protected virtual void PreProcessingButtons() + { + if ((target as MMAudioAnalyzer).Mode != MMAudioAnalyzer.Modes.AudioSource) + { + return; + } + + GUILayout.Space(10); + GUILayout.Label("Peaks preprocessing", EditorStyles.boldLabel); + + if (!PeaksPasted.boolValue) + { + if ((PeaksSaver.Peaks == null) || (PeaksSaver.Peaks.Length == 0)) + { + EditorGUILayout.HelpBox("You haven't preprocessed peaks for this track yet. It's recommended to do so, by pressing play, " + + "then the Find Peaks button below. Then, exit play, and press the 'Paste Peaks' button.", MessageType.Warning); + if (GUILayout.Button("Find Peaks")) + { + (target as MMAudioAnalyzer).FindPeaks(); + } + } + else + { + EditorGUILayout.HelpBox("Exit Play Mode first, then paste your saved peaks using the 'Paste Peaks' button below.", MessageType.Warning); + if (!Application.isPlaying) + { + if (GUILayout.Button("Paste Peaks")) + { + (target as MMAudioAnalyzer).PastePeaks(); + } + } + } + } + if (GUILayout.Button("Clear Peaks")) + { + (target as MMAudioAnalyzer).ClearPeaks(); + } + } + } + #endif +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer/MMAudioAnalyzerEditor.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer/MMAudioAnalyzerEditor.cs.meta new file mode 100644 index 0000000..928b164 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAudio/AudioAnalyzer/MMAudioAnalyzerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e70ed4c65521d064daf6f4fb01c8a707 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager.meta b/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager.meta new file mode 100644 index 0000000..dc65a6e --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1329772f40e2ebb419ba950b49ca5557 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager/MMSoundManagerEditor.cs b/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager/MMSoundManagerEditor.cs new file mode 100644 index 0000000..9d238de --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager/MMSoundManagerEditor.cs @@ -0,0 +1,260 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Custom editor for the MMSoundManager, used to display custom track controls + /// + #if UNITY_EDITOR + [CustomEditor(typeof(MMSoundManager), true)] + [CanEditMultipleObjects] + public class MMSoundManagerEditor : Editor + { + public override bool RequiresConstantRepaint() + { + return true; + } + protected MMSoundManagerSettingsSO _settingsSO; + protected MMSoundManager _mmSoundManager; + + private static float _masterVolume, _musicVolume, _sfxVolume, _uiVolume; + + protected Color _originalBackgroundColor; + + protected Color _saveButtonColor = new Color32(80, 80, 80, 255); + protected Color _loadButtonColor = new Color32(107, 107, 107, 255); + protected Color _resetButtonColor = new Color32(120, 120, 120, 255); + + protected Color _baseColor = new Color32(150, 150, 150, 255); + + protected Color _masterColorBase = MMColors.ReunoYellow; + protected Color _masterColorMute; + protected Color _masterColorUnmute; + protected Color _masterColorPause; + protected Color _masterColorStop; + protected Color _masterColorPlay; + protected Color _masterColorFree; + + protected Color _musicColorBase = MMColors.Aquamarine; + protected Color _musicColorMute; + protected Color _musicColorUnmute; + protected Color _musicColorPause; + protected Color _musicColorStop; + protected Color _musicColorPlay; + protected Color _musicColorFree; + + protected Color _sfxColorBase = MMColors.Coral; + protected Color _sfxColorMute; + protected Color _sfxColorUnmute; + protected Color _sfxColorPause; + protected Color _sfxColorStop; + protected Color _sfxColorPlay; + protected Color _sfxColorFree; + + protected Color _uiColorBase = MMColors.SteelBlue; + protected Color _uiColorMute; + protected Color _uiColorUnmute; + protected Color _uiColorPause; + protected Color _uiColorStop; + protected Color _uiColorPlay; + protected Color _uiColorFree; + + protected MMColors.ColoringMode _coloringMode = MMColors.ColoringMode.Add; + + /// + /// On Enable, we initialize our button colors. Why? Because we can. + /// + protected virtual void OnEnable() + { + _masterColorMute = MMColors.MMColorize(_baseColor, _masterColorBase, _coloringMode, 1f); + _masterColorUnmute = MMColors.MMColorize(_baseColor, _masterColorBase, _coloringMode, 0.9f); + _masterColorPause = MMColors.MMColorize(_baseColor, _masterColorBase, _coloringMode, 0.8f); + _masterColorStop = MMColors.MMColorize(_baseColor, _masterColorBase, _coloringMode, 0.7f); + _masterColorPlay = MMColors.MMColorize(_baseColor, _masterColorBase, _coloringMode, 0.5f); + _masterColorFree = MMColors.MMColorize(_baseColor, _masterColorBase, _coloringMode, 0.4f); + + _musicColorMute = MMColors.MMColorize(_baseColor, _musicColorBase, _coloringMode, 1f); + _musicColorUnmute = MMColors.MMColorize(_baseColor, _musicColorBase, _coloringMode, 0.9f); + _musicColorPause = MMColors.MMColorize(_baseColor, _musicColorBase, _coloringMode, 0.8f); + _musicColorStop = MMColors.MMColorize(_baseColor, _musicColorBase, _coloringMode, 0.7f); + _musicColorPlay = MMColors.MMColorize(_baseColor, _musicColorBase, _coloringMode, 0.5f); + _musicColorFree = MMColors.MMColorize(_baseColor, _musicColorBase, _coloringMode, 0.4f); + + _sfxColorMute = MMColors.MMColorize(_baseColor, _sfxColorBase, _coloringMode, 1f); + _sfxColorUnmute = MMColors.MMColorize(_baseColor, _sfxColorBase, _coloringMode, 0.9f); + _sfxColorPause = MMColors.MMColorize(_baseColor, _sfxColorBase, _coloringMode, 0.8f); + _sfxColorStop = MMColors.MMColorize(_baseColor, _sfxColorBase, _coloringMode, 0.7f); + _sfxColorPlay = MMColors.MMColorize(_baseColor, _sfxColorBase, _coloringMode, 0.5f); + _sfxColorFree = MMColors.MMColorize(_baseColor, _sfxColorBase, _coloringMode, 0.4f); + + _uiColorMute = MMColors.MMColorize(_baseColor, _uiColorBase, _coloringMode, 1f); + _uiColorUnmute = MMColors.MMColorize(_baseColor, _uiColorBase, _coloringMode, 0.9f); + _uiColorPause = MMColors.MMColorize(_baseColor, _uiColorBase, _coloringMode, 0.8f); + _uiColorStop = MMColors.MMColorize(_baseColor, _uiColorBase, _coloringMode, 0.7f); + _uiColorPlay = MMColors.MMColorize(_baseColor, _uiColorBase, _coloringMode, 0.5f); + _uiColorFree = MMColors.MMColorize(_baseColor, _uiColorBase, _coloringMode, 0.4f); + } + + /// + /// On GUI, draws the base inspector and track controls + /// + public override void OnInspectorGUI() + { + _settingsSO = (target as MMSoundManager).settingsSo; + _mmSoundManager = target as MMSoundManager; + + if (_settingsSO != null) + { + _masterVolume = _settingsSO.GetTrackVolume(MMSoundManager.MMSoundManagerTracks.Master); + _musicVolume = _settingsSO.GetTrackVolume(MMSoundManager.MMSoundManagerTracks.Music); + _sfxVolume = _settingsSO.GetTrackVolume(MMSoundManager.MMSoundManagerTracks.Sfx); + _uiVolume = _settingsSO.GetTrackVolume(MMSoundManager.MMSoundManagerTracks.UI); + } + + serializedObject.Update(); + DrawDefaultInspector(); + serializedObject.ApplyModifiedProperties(); + + if ( ((_settingsSO != null) && _mmSoundManager.gameObject.activeInHierarchy)) + { + DrawTrack("Master Track", _mmSoundManager.settingsSo.Settings.MasterOn, MMSoundManager.MMSoundManagerTracks.Master, _masterColorMute, _masterColorUnmute, _masterColorPause, _masterColorStop, _masterColorPlay, _masterColorFree); + DrawTrack("Music Track", _mmSoundManager.settingsSo.Settings.MusicOn, MMSoundManager.MMSoundManagerTracks.Music, _musicColorMute, _musicColorUnmute, _musicColorPause, _musicColorStop, _musicColorPlay, _musicColorFree); + DrawTrack("SFX Track", _mmSoundManager.settingsSo.Settings.SfxOn, MMSoundManager.MMSoundManagerTracks.Sfx, _sfxColorMute, _sfxColorUnmute, _sfxColorPause, _sfxColorStop, _sfxColorPlay, _sfxColorFree); + DrawTrack("UI Track", _mmSoundManager.settingsSo.Settings.UIOn, MMSoundManager.MMSoundManagerTracks.UI, _uiColorMute, _uiColorUnmute, _uiColorPause, _uiColorStop, _uiColorPlay, _uiColorFree); + DrawSaveLoadButtons(); + } + } + + /// + /// Draws track controls for the specified track + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + protected virtual void DrawTrack(string title, bool mute, MMSoundManager.MMSoundManagerTracks track, Color muteColor, Color unmuteColor, Color pauseColor, Color stopColor, Color playColor, Color freeColor) + { + GUILayout.Space(10); + GUILayout.Label(title, EditorStyles.boldLabel); + + EditorGUI.BeginDisabledGroup(!Application.isPlaying); + + // we draw the volume slider + EditorGUILayout.BeginHorizontal(); + + GUILayout.Label("Volume"); + + float newVolume = 0; + switch (track) + { + case MMSoundManager.MMSoundManagerTracks.Master: + newVolume = EditorGUILayout.Slider(_masterVolume, MMSoundManagerSettings._minimalVolume, MMSoundManagerSettings._maxVolume); + if (newVolume != _masterVolume) { _mmSoundManager.settingsSo.SetTrackVolume(MMSoundManager.MMSoundManagerTracks.Master, newVolume); } + break; + case MMSoundManager.MMSoundManagerTracks.Music: + newVolume = EditorGUILayout.Slider(_musicVolume, MMSoundManagerSettings._minimalVolume, MMSoundManagerSettings._maxVolume); + if (newVolume != _musicVolume) { _mmSoundManager.settingsSo.SetTrackVolume(MMSoundManager.MMSoundManagerTracks.Music, newVolume); } + break; + case MMSoundManager.MMSoundManagerTracks.Sfx: + newVolume = EditorGUILayout.Slider(_sfxVolume, MMSoundManagerSettings._minimalVolume, MMSoundManagerSettings._maxVolume); + if (newVolume != _sfxVolume) { _mmSoundManager.settingsSo.SetTrackVolume(MMSoundManager.MMSoundManagerTracks.Sfx, newVolume); } + break; + case MMSoundManager.MMSoundManagerTracks.UI: + newVolume = EditorGUILayout.Slider(_uiVolume, MMSoundManagerSettings._minimalVolume, MMSoundManagerSettings._maxVolume); + if (newVolume != _uiVolume) { _mmSoundManager.settingsSo.SetTrackVolume(MMSoundManager.MMSoundManagerTracks.UI, newVolume); } + break; + } + EditorGUILayout.EndHorizontal(); + + // we draw the buttons + EditorGUILayout.BeginHorizontal(); + { + if (mute) + { + DrawColoredButton("Mute", muteColor, track, _mmSoundManager.MuteTrack, EditorStyles.miniButtonLeft); + } + else + { + DrawColoredButton("Unmute", unmuteColor, track, _mmSoundManager.UnmuteTrack, EditorStyles.miniButtonMid); + } + DrawColoredButton("Pause", pauseColor, track, _mmSoundManager.PauseTrack, EditorStyles.miniButtonMid); + DrawColoredButton("Stop", stopColor, track, _mmSoundManager.StopTrack, EditorStyles.miniButtonMid); + DrawColoredButton("Play", playColor, track, _mmSoundManager.PlayTrack, EditorStyles.miniButtonMid); + DrawColoredButton("Free", freeColor, track, _mmSoundManager.FreeTrack, EditorStyles.miniButtonRight); + + } + EditorGUILayout.EndHorizontal(); + + EditorGUI.EndDisabledGroup(); + } + + /// + /// Draws save related buttons + /// + protected virtual void DrawSaveLoadButtons() + { + EditorGUI.BeginDisabledGroup(!Application.isPlaying); + + GUILayout.Space(10); + GUILayout.Label("Settings", EditorStyles.boldLabel); + + EditorGUILayout.BeginHorizontal(); + + DrawColoredButton("Save", _saveButtonColor, _settingsSO.SaveSoundSettings, EditorStyles.miniButtonLeft); + DrawColoredButton("Load", _loadButtonColor, _settingsSO.LoadSoundSettings, EditorStyles.miniButtonMid); + DrawColoredButton("Reset", _resetButtonColor, _settingsSO.ResetSoundSettings, EditorStyles.miniButtonRight); + + EditorGUILayout.EndHorizontal(); + + EditorGUI.EndDisabledGroup(); + } + + /// + /// Draws a button + /// + /// + /// + /// + /// + /// + public virtual void DrawColoredButton(string buttonLabel, Color buttonColor, MMSoundManager.MMSoundManagerTracks track, System.Action action, GUIStyle styles) + { + _originalBackgroundColor = GUI.backgroundColor; + GUI.backgroundColor = buttonColor; + if (GUILayout.Button(buttonLabel, styles)) + { + action.Invoke(track); + } + GUI.backgroundColor = _originalBackgroundColor; + } + + /// + /// Draws a button + /// + /// + /// + /// + /// + protected virtual void DrawColoredButton(string buttonLabel, Color buttonColor, Action action, GUIStyle styles) + { + _originalBackgroundColor = GUI.backgroundColor; + GUI.backgroundColor = buttonColor; + if (GUILayout.Button(buttonLabel, styles)) + { + action.Invoke(); + } + GUI.backgroundColor = _originalBackgroundColor; + } + + } + #endif +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager/MMSoundManagerEditor.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager/MMSoundManagerEditor.cs.meta new file mode 100644 index 0000000..d51669b --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMAudio/MMSoundManager/MMSoundManagerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61a572ed6d10d874b96ae733ad19bed9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMObjectPool.meta b/Assets/Feel/MMTools/Core/Editor/MMObjectPool.meta new file mode 100644 index 0000000..de7a4dc --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMObjectPool.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba48426db14159040b651a2a7735761f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMObjectPool/ObjectBoundsEditor.cs b/Assets/Feel/MMTools/Core/Editor/MMObjectPool/ObjectBoundsEditor.cs new file mode 100644 index 0000000..466d66f --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMObjectPool/ObjectBoundsEditor.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using System.Collections; +using UnityEditor; +using MoreMountains.Tools; + +namespace MoreMountains.Tools +{ + [CustomEditor(typeof(MMObjectBounds),true)] + public class ObjectBoundsEditor : Editor + { + protected MMObjectBounds _objectBounds; + + public override void OnInspectorGUI() + { + _objectBounds = (MMObjectBounds)target; + + DrawDefaultInspector(); + + if (_objectBounds.GetComponent()==null && _objectBounds.BoundsBasedOn==MMObjectBounds.WaysToDetermineBounds.Renderer) + { + EditorGUILayout.HelpBox("You've defined this object as having Renderer defined bounds, but no renderer is attached to the object. Add a Renderer, or switch to collider based bounds. The bounds are the dimensions that will be used when spawning your object and to determine when it should be recycled.",MessageType.Warning); + } + + if (_objectBounds.GetComponent()==null && _objectBounds.BoundsBasedOn==MMObjectBounds.WaysToDetermineBounds.Collider) + { + EditorGUILayout.HelpBox("You've defined this object as having Collider defined bounds, but no Collider is attached to the object. Add a Collider, or switch to renderer based bounds. The bounds are the dimensions that will be used when spawning your object and to determine when it should be recycled.",MessageType.Warning); + } + + if (_objectBounds.GetComponent()==null && _objectBounds.BoundsBasedOn==MMObjectBounds.WaysToDetermineBounds.Collider2D) + { + EditorGUILayout.HelpBox("You've defined this object as having Collider2D defined bounds, but no Collider2D is attached to the object. Add a Collider2D, or switch to renderer based bounds. The bounds are the dimensions that will be used when spawning your object and to determine when it should be recycled.",MessageType.Warning); + } + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMObjectPool/ObjectBoundsEditor.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMObjectPool/ObjectBoundsEditor.cs.meta new file mode 100644 index 0000000..d96ffec --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMObjectPool/ObjectBoundsEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bada8c222727b4fe49b6a90f1dddad8e +timeCreated: 1456407699 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers.meta b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers.meta new file mode 100644 index 0000000..394afc2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 392fd774dc5df3648b20341bd79a31af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/FloatControllerEditor.cs b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/FloatControllerEditor.cs new file mode 100644 index 0000000..07d3df8 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/FloatControllerEditor.cs @@ -0,0 +1,323 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + /// + /// Custom editor for the FloatController, conditional hiding and dropdown fill + /// + [CustomEditor(typeof(FloatController), true)] + [CanEditMultipleObjects] + public class FloatControllerEditor : Editor + { + protected SerializedProperty _TargetObject; + + protected SerializedProperty _Curve; + protected SerializedProperty _MinValue; + protected SerializedProperty _MaxValue; + protected SerializedProperty _Duration; + protected SerializedProperty _PingPongPauseDuration; + + protected SerializedProperty _Amplitude; + protected SerializedProperty _Frequency; + protected SerializedProperty _Shift; + protected SerializedProperty _RemapNoiseValues; + protected SerializedProperty _RemapNoiseZero; + protected SerializedProperty _RemapNoiseOne; + + protected SerializedProperty _OneTimeDuration; + protected SerializedProperty _OneTimeAmplitude; + protected SerializedProperty _OneTimeRemapMin; + protected SerializedProperty _OneTimeRemapMax; + protected SerializedProperty _OneTimeCurve; + protected SerializedProperty _DisableAfterOneTime; + protected SerializedProperty _DisableGameObjectAfterOneTime; + protected SerializedProperty _OneTimeButton; + + protected SerializedProperty _DrivenLevel; + + protected SerializedProperty _ToDestinationValue; + protected SerializedProperty _ToDestinationDuration; + protected SerializedProperty _ToDestinationCurve; + protected SerializedProperty _DisableAfterToDestination; + protected SerializedProperty _ToDestinationButton; + + protected SerializedProperty _InitialValue; + protected SerializedProperty _CurrentValue; + protected SerializedProperty _CurrentValueNormalized; + + protected SerializedProperty _ChoiceIndex; + protected SerializedProperty _PropertyName; + + protected SerializedProperty _AudioAnalyzer; + protected SerializedProperty _BeatID; + protected SerializedProperty _AudioAnalyzerMode; + protected SerializedProperty _NormalizedLevelID; + protected SerializedProperty _AudioAnalyzerMultiplier; + + public override bool RequiresConstantRepaint() + { + return true; + } + + /// + /// On enable, grabs our serialized properties + /// + protected virtual void OnEnable() + { + FloatController myTarget = (FloatController)target; + + _TargetObject = serializedObject.FindProperty("TargetObject"); + + _Curve = serializedObject.FindProperty("Curve"); + _MinValue = serializedObject.FindProperty("MinValue"); + _MaxValue = serializedObject.FindProperty("MaxValue"); + _Duration = serializedObject.FindProperty("Duration"); + _PingPongPauseDuration = serializedObject.FindProperty("PingPongPauseDuration"); + + _Amplitude = serializedObject.FindProperty("Amplitude"); + _Frequency = serializedObject.FindProperty("Frequency"); + _Shift = serializedObject.FindProperty("Shift"); + _RemapNoiseValues = serializedObject.FindProperty("RemapNoiseValues"); + _RemapNoiseZero = serializedObject.FindProperty("RemapNoiseZero"); + _RemapNoiseOne = serializedObject.FindProperty("RemapNoiseOne"); + + _OneTimeDuration = serializedObject.FindProperty("OneTimeDuration"); + _OneTimeAmplitude = serializedObject.FindProperty("OneTimeAmplitude"); + _OneTimeRemapMin = serializedObject.FindProperty("OneTimeRemapMin"); + _OneTimeRemapMax = serializedObject.FindProperty("OneTimeRemapMax"); + _OneTimeCurve = serializedObject.FindProperty("OneTimeCurve"); + _DisableAfterOneTime = serializedObject.FindProperty("DisableAfterOneTime"); + _DisableGameObjectAfterOneTime = serializedObject.FindProperty("DisableGameObjectAfterOneTime"); + _OneTimeButton = serializedObject.FindProperty("OneTimeButton"); + + _DrivenLevel = serializedObject.FindProperty("DrivenLevel"); + + _ToDestinationValue = serializedObject.FindProperty("ToDestinationValue"); + _ToDestinationDuration = serializedObject.FindProperty("ToDestinationDuration"); + _ToDestinationCurve = serializedObject.FindProperty("ToDestinationCurve"); + _DisableAfterToDestination = serializedObject.FindProperty("DisableAfterToDestination"); + _ToDestinationButton = serializedObject.FindProperty("ToDestinationButton"); + + _InitialValue = serializedObject.FindProperty("InitialValue"); + _CurrentValue = serializedObject.FindProperty("CurrentValue"); + _CurrentValueNormalized = serializedObject.FindProperty("CurrentValueNormalized"); + + _ChoiceIndex = serializedObject.FindProperty("ChoiceIndex"); + _PropertyName = serializedObject.FindProperty("PropertyName"); + + _AudioAnalyzer = serializedObject.FindProperty("AudioAnalyzer"); + _AudioAnalyzerMode = serializedObject.FindProperty("AudioAnalyzerMode"); + _NormalizedLevelID = serializedObject.FindProperty("NormalizedLevelID"); + _BeatID = serializedObject.FindProperty("BeatID"); + _AudioAnalyzerMultiplier = serializedObject.FindProperty("AudioAnalyzerMultiplier"); + + VerifyChosenIndex(); + AssemblyReloadEvents.afterAssemblyReload += OnAfterAssemblyReload; + + } + + protected virtual void OnDisable() + { + //BindPropertyName(); + AssemblyReloadEvents.afterAssemblyReload -= OnAfterAssemblyReload; + } + + protected virtual void BindPropertyName() + { + FloatController myTarget = (FloatController)target; + + if (myTarget.ChoiceIndex > myTarget.AttributeNames.Length - 1) + { + _ChoiceIndex.intValue = 0; + _PropertyName.stringValue = FloatController._undefinedString; + } + else + { + _PropertyName.stringValue = myTarget.AttributeNames[myTarget.ChoiceIndex]; + serializedObject.ApplyModifiedProperties(); + } + } + + protected virtual void VerifyChosenIndex() + { + FloatController myTarget = (FloatController)target; + + // determine choice index + int index = 0; + bool found = false; + foreach (string attName in myTarget.AttributeNames) + { + if (attName == myTarget.PropertyName) + { + _ChoiceIndex.intValue = index; + found = true; + } + index++; + } + if (!found) + { + _ChoiceIndex.intValue = 0; + _PropertyName.stringValue = FloatController._undefinedString; + } + serializedObject.ApplyModifiedProperties(); + } + + protected virtual void OnAfterAssemblyReload() + { + FloatController myTarget = (FloatController)target; + myTarget.FillDropDownList(); + VerifyChosenIndex(); + serializedObject.ApplyModifiedProperties(); + } + + /// + /// Draws a custom conditional inspector + /// + public override void OnInspectorGUI() + { + serializedObject.Update(); + Undo.RecordObject(target, "Modified FloatController"); + + FloatController myTarget = (FloatController)target; + + EditorGUILayout.PropertyField(_TargetObject); + if (myTarget.AttributeNames != null) + { + if (myTarget.AttributeNames.Length > 0) + { + // draws a dropdown with all our properties + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Property"); + + _ChoiceIndex.intValue = EditorGUILayout.Popup(myTarget.ChoiceIndex, myTarget.AttributeNames); + BindPropertyName(); + EditorGUILayout.EndHorizontal(); + + Editor.DrawPropertiesExcluding(serializedObject, new string[] { "m_Script", "TargetObject", "Curve", "MinValue", "MaxValue", "Duration", "Amplitude", + "RemapNoiseValues","RemapNoiseZero","RemapNoiseOne", + "Frequency", "Shift", "InitialValue", "CurrentValue", "CurrentValueNormalized", "PingPongPauseDuration", + "OneTimeDuration", "OneTimeAmplitude", "OneTimeRemapMin", "OneTimeRemapMax", + "OneTimeCurve", "OneTimeButton", "DisableAfterOneTime", "DisableGameObjectAfterOneTime", + "AudioAnalyzer","AudioAnalyzerMode", "BeatID", "NormalizedLevelID", "AudioAnalyzerMultiplier", + "DisableAfterToDestination", "DrivenLevel", + "ToDestinationDuration", "ToDestinationValue", "ToDestinationCurve", "ToDestinationButton"}); + + if (myTarget.ControlMode == FloatController.ControlModes.PingPong) + { + EditorGUILayout.PropertyField(_Curve); + EditorGUILayout.PropertyField(_MinValue); + EditorGUILayout.PropertyField(_MaxValue); + EditorGUILayout.PropertyField(_Duration); + EditorGUILayout.PropertyField(_PingPongPauseDuration); + } + else if (myTarget.ControlMode == FloatController.ControlModes.Random) + { + EditorGUILayout.PropertyField(_Amplitude); + EditorGUILayout.PropertyField(_Frequency); + EditorGUILayout.PropertyField(_Shift); + EditorGUILayout.PropertyField(_RemapNoiseValues); + EditorGUILayout.PropertyField(_RemapNoiseZero); + EditorGUILayout.PropertyField(_RemapNoiseOne); + } + else if (myTarget.ControlMode == FloatController.ControlModes.Driven) + { + EditorGUILayout.PropertyField(_DrivenLevel); + } + else if (myTarget.ControlMode == FloatController.ControlModes.OneTime) + { + EditorGUILayout.PropertyField(_OneTimeDuration); + EditorGUILayout.PropertyField(_OneTimeAmplitude); + EditorGUILayout.PropertyField(_OneTimeRemapMin); + EditorGUILayout.PropertyField(_OneTimeRemapMax); + EditorGUILayout.PropertyField(_OneTimeCurve); + EditorGUILayout.PropertyField(_DisableAfterOneTime); + EditorGUILayout.PropertyField(_DisableGameObjectAfterOneTime); + EditorGUILayout.PropertyField(_OneTimeButton); + } + else if (myTarget.ControlMode == FloatController.ControlModes.AudioAnalyzer) + { + EditorGUILayout.PropertyField(_AudioAnalyzer); + EditorGUILayout.PropertyField(_AudioAnalyzerMode); + if (myTarget.AudioAnalyzerMode == FloatController.AudioAnalyzerModes.Beat) + { + EditorGUILayout.PropertyField(_BeatID); + } + else + { + EditorGUILayout.PropertyField(_NormalizedLevelID); + } + EditorGUILayout.PropertyField(_AudioAnalyzerMultiplier); + } + else if (myTarget.ControlMode == FloatController.ControlModes.ToDestination) + { + EditorGUILayout.PropertyField(_ToDestinationDuration); + EditorGUILayout.PropertyField(_ToDestinationValue); + EditorGUILayout.PropertyField(_ToDestinationCurve); + EditorGUILayout.PropertyField(_DisableAfterToDestination); + EditorGUILayout.PropertyField(_ToDestinationButton); + } + + EditorGUILayout.PropertyField(_InitialValue); + EditorGUILayout.PropertyField(_CurrentValue); + EditorGUILayout.PropertyField(_CurrentValueNormalized); + } + } + + + serializedObject.ApplyModifiedProperties(); + + if (Application.isPlaying) + { + _barRect = EditorGUILayout.GetControlRect(); + DrawLevelProgressBar(_barRect, myTarget.CurrentValueNormalized, _mmYellow, _mmRed); + } + } + + protected Rect _barRect; + protected Color _mmYellow = new Color(1f, 0.7686275f, 0f); + protected Color _mmRed = MMColors.Orangered; + protected const int _lineHeight = 20; + protected const int _lineMargin = 2; + protected const int _numberOfLines = 1; + protected Color _progressBarBackground = new Color(0, 0, 0, 0.5f); + + protected virtual void DrawLevelProgressBar(Rect position, float level, Color frontColor, Color negativeColor) + { + Rect levelLabelRect = new Rect(position.x, position.y + (_lineHeight + _lineMargin) * (_numberOfLines - 1), position.width, _lineHeight); + Rect levelValueRect = new Rect(position.x - 15 + EditorGUIUtility.labelWidth + 4, position.y + (_lineHeight + _lineMargin) * (_numberOfLines - 1), position.width, _lineHeight); + + float progressX = position.x - 5 + EditorGUIUtility.labelWidth + 60; + float progressY = position.y + (_lineHeight + _lineMargin) * (_numberOfLines - 1) + 6; + float progressHeight = 10f; + float fullProgressWidth = position.width - EditorGUIUtility.labelWidth - 60 + 5; + + bool negative = false; + float displayLevel = level; + if (level < 0f) + { + negative = true; + level = -level; + } + + float progressLevel = Mathf.Clamp01(level); + Rect levelProgressBg = new Rect(progressX, progressY, fullProgressWidth, progressHeight); + float progressWidth = MMMaths.Remap(progressLevel, 0f, 1f, 0f, fullProgressWidth); + Rect levelProgressFront = new Rect(progressX, progressY, progressWidth, progressHeight); + + EditorGUI.LabelField(levelLabelRect, new GUIContent("Level")); + EditorGUI.LabelField(levelValueRect, new GUIContent(displayLevel.ToString("F4"))); + EditorGUI.DrawRect(levelProgressBg, _progressBarBackground); + if (negative) + { + EditorGUI.DrawRect(levelProgressFront, negativeColor); + } + else + { + EditorGUI.DrawRect(levelProgressFront, frontColor); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/FloatControllerEditor.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/FloatControllerEditor.cs.meta new file mode 100644 index 0000000..3e7a30a --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/FloatControllerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aaf2109110b476340aeceda8863b1631 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/ShaderControllerEditor.cs b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/ShaderControllerEditor.cs new file mode 100644 index 0000000..130db66 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/ShaderControllerEditor.cs @@ -0,0 +1,280 @@ +using UnityEngine; +using UnityEditor; + +#if MM_UI +namespace MoreMountains.Tools +{ + /// + /// Custom editor for the ShaderController, conditional hiding + /// + [CustomEditor(typeof(ShaderController), true)] + [CanEditMultipleObjects] + public class ShaderControllerEditor : Editor + { + protected SerializedProperty _TargetRenderer; + protected SerializedProperty _Curve; + protected SerializedProperty _MinValue; + protected SerializedProperty _MaxValue; + protected SerializedProperty _Duration; + protected SerializedProperty _PingPongPauseDuration; + protected SerializedProperty _Amplitude; + protected SerializedProperty _Frequency; + protected SerializedProperty _Shift; + protected SerializedProperty _RemapNoiseValues; + protected SerializedProperty _RemapNoiseZero; + protected SerializedProperty _RemapNoiseOne; + protected SerializedProperty _OneTimeDuration; + protected SerializedProperty _OneTimeAmplitude; + protected SerializedProperty _OneTimeRemapMin; + protected SerializedProperty _OneTimeRemapMax; + protected SerializedProperty _OneTimeCurve; + protected SerializedProperty _OneTimeButton; + protected SerializedProperty _DisableAfterOneTime; + protected SerializedProperty _DisableGameObjectAfterOneTime; + protected SerializedProperty _DrivenLevel; + protected SerializedProperty _AudioAnalyzer; + protected SerializedProperty _BeatID; + protected SerializedProperty _AudioAnalyzerMultiplier; + protected SerializedProperty _AudioAnalyzerOffset; + protected SerializedProperty _AudioAnalyzerLerp; + protected SerializedProperty _ToDestinationValue; + protected SerializedProperty _ToDestinationDuration; + protected SerializedProperty _ToDestinationCurve; + protected SerializedProperty _ToDestinationButton; + protected SerializedProperty _DisableAfterToDestination; + protected SerializedProperty _InitialValue; + protected SerializedProperty _CurrentValue; + protected SerializedProperty _CurrentValueNormalized; + protected SerializedProperty _InitialColor; + protected SerializedProperty _ColorMode; + protected SerializedProperty _ColorRamp; + protected SerializedProperty _PropertyID; + protected SerializedProperty _PropertyFound; + protected SerializedProperty _TargetMaterial; + protected SerializedProperty _FromColor; + protected SerializedProperty _ToColor; + protected SerializedProperty _LoopCurve; + protected SerializedProperty _LoopStartValue; + protected SerializedProperty _LoopEndValue; + protected SerializedProperty _LoopDuration; + protected SerializedProperty _LoopPauseDuration; + protected SerializedProperty _SpriteRendererTextureProperty; + + + public override bool RequiresConstantRepaint() + { + return true; + } + + /// + /// On enable we grab our properties + /// + protected virtual void OnEnable() + { + ShaderController myTarget = (ShaderController)target; + _TargetRenderer = serializedObject.FindProperty("TargetRenderer"); + _Curve = serializedObject.FindProperty("Curve"); + _MinValue = serializedObject.FindProperty("MinValue"); + _MaxValue = serializedObject.FindProperty("MaxValue"); + _Duration = serializedObject.FindProperty("Duration"); + _PingPongPauseDuration = serializedObject.FindProperty("PingPongPauseDuration"); + _Amplitude = serializedObject.FindProperty("Amplitude"); + _Frequency = serializedObject.FindProperty("Frequency"); + _Shift = serializedObject.FindProperty("Shift"); + _RemapNoiseValues = serializedObject.FindProperty("RemapNoiseValues"); + _RemapNoiseZero = serializedObject.FindProperty("RemapNoiseZero"); + _RemapNoiseOne = serializedObject.FindProperty("RemapNoiseOne"); + _OneTimeDuration = serializedObject.FindProperty("OneTimeDuration"); + _OneTimeAmplitude = serializedObject.FindProperty("OneTimeAmplitude"); + _OneTimeRemapMin = serializedObject.FindProperty("OneTimeRemapMin"); + _OneTimeRemapMax = serializedObject.FindProperty("OneTimeRemapMax"); + _OneTimeCurve = serializedObject.FindProperty("OneTimeCurve"); + _DisableAfterOneTime = serializedObject.FindProperty("DisableAfterOneTime"); + _DisableGameObjectAfterOneTime = serializedObject.FindProperty("DisableGameObjectAfterOneTime"); + _OneTimeButton = serializedObject.FindProperty("OneTimeButton"); + _AudioAnalyzer = serializedObject.FindProperty("AudioAnalyzer"); + _BeatID = serializedObject.FindProperty("BeatID"); + _AudioAnalyzerMultiplier = serializedObject.FindProperty("AudioAnalyzerMultiplier"); + _AudioAnalyzerOffset = serializedObject.FindProperty("AudioAnalyzerOffset"); + _AudioAnalyzerLerp = serializedObject.FindProperty("AudioAnalyzerLerp"); + _ToDestinationValue = serializedObject.FindProperty("ToDestinationValue"); + _ToDestinationDuration = serializedObject.FindProperty("ToDestinationDuration"); + _ToDestinationCurve = serializedObject.FindProperty("ToDestinationCurve"); + _DisableAfterToDestination = serializedObject.FindProperty("DisableAfterToDestination"); + _ToDestinationButton = serializedObject.FindProperty("ToDestinationButton"); + _InitialValue = serializedObject.FindProperty("InitialValue"); + _CurrentValue = serializedObject.FindProperty("CurrentValue"); + _CurrentValueNormalized = serializedObject.FindProperty("CurrentValueNormalized"); + _InitialColor = serializedObject.FindProperty("InitialColor"); + _ColorMode = serializedObject.FindProperty("ColorMode"); + _ColorRamp = serializedObject.FindProperty("ColorRamp"); + _PropertyID = serializedObject.FindProperty("PropertyID"); + _PropertyFound = serializedObject.FindProperty("PropertyFound"); + _TargetMaterial = serializedObject.FindProperty("TargetMaterial"); + _DrivenLevel = serializedObject.FindProperty("DrivenLevel"); + _FromColor = serializedObject.FindProperty("FromColor"); + _ToColor = serializedObject.FindProperty("ToColor"); + _LoopCurve = serializedObject.FindProperty("LoopCurve"); + _LoopStartValue = serializedObject.FindProperty("LoopStartValue"); + _LoopEndValue = serializedObject.FindProperty("LoopEndValue"); + _LoopDuration = serializedObject.FindProperty("LoopDuration"); + _LoopPauseDuration = serializedObject.FindProperty("LoopPauseDuration"); + _SpriteRendererTextureProperty = serializedObject.FindProperty("SpriteRendererTextureProperty"); + } + + /// + /// Draws a conditional inspector + /// + public override void OnInspectorGUI() + { + serializedObject.Update(); + Undo.RecordObject(target, "Modified ShaderController"); + + ShaderController myTarget = (ShaderController)target; + + Editor.DrawPropertiesExcluding(serializedObject, new string[] { "m_Script", "Curve", "MinValue", "MaxValue", "Duration", "PingPongPauseDuration", + "Amplitude", "Frequency", "Shift", "OneTimeDuration", "OneTimeAmplitude", "OneTimeRemapMin", + "OneTimeRemapMax", "OneTimeCurve", "DisableAfterOneTime", "DisableGameObjectAfterOneTime", "OneTimeButton", "AudioAnalyzer", + "BeatID", "AudioAnalyzerMultiplier", "AudioAnalyzerOffset", + "AudioAnalyzerLerp", "ToDestinationValue", "RemapNoiseValues","RemapNoiseZero","RemapNoiseOne", "ColorMode", "ColorRamp", + "ToDestinationDuration", "ToDestinationCurve", "DisableAfterToDestination", "ToDestinationButton", "DrivenLevel", "FromColor", "ToColor", + "LoopCurve", "LoopStartValue", "LoopEndValue", "LoopDuration", "LoopPauseDuration", + "InitialValue","CurrentValue", "CurrentValueNormalized","InitialColor","PropertyID","PropertyFound","TargetMaterial"}); + + if (myTarget.PropertyType == ShaderController.PropertyTypes.Color) + { + EditorGUILayout.PropertyField(_ColorMode); + if (myTarget.ColorMode == ShaderController.ColorModes.TwoColors) + { + if (myTarget.ControlMode != ShaderController.ControlModes.ToDestination) + { + EditorGUILayout.PropertyField(_FromColor); + } + EditorGUILayout.PropertyField(_ToColor); + } + else + { + EditorGUILayout.PropertyField(_ColorRamp); + } + } + + if (myTarget.ControlMode == ShaderController.ControlModes.PingPong) + { + EditorGUILayout.PropertyField(_Curve); + EditorGUILayout.PropertyField(_MinValue); + EditorGUILayout.PropertyField(_MaxValue); + EditorGUILayout.PropertyField(_Duration); + EditorGUILayout.PropertyField(_PingPongPauseDuration); + } + if (myTarget.ControlMode == ShaderController.ControlModes.Loop) + { + EditorGUILayout.PropertyField(_LoopCurve); + EditorGUILayout.PropertyField(_LoopStartValue); + EditorGUILayout.PropertyField(_LoopEndValue); + EditorGUILayout.PropertyField(_LoopDuration); + EditorGUILayout.PropertyField(_LoopPauseDuration); + } + else if (myTarget.ControlMode == ShaderController.ControlModes.Random) + { + EditorGUILayout.PropertyField(_Amplitude); + EditorGUILayout.PropertyField(_Frequency); + EditorGUILayout.PropertyField(_Shift); + EditorGUILayout.PropertyField(_RemapNoiseValues); + EditorGUILayout.PropertyField(_RemapNoiseZero); + EditorGUILayout.PropertyField(_RemapNoiseOne); + } + else if (myTarget.ControlMode == ShaderController.ControlModes.OneTime) + { + EditorGUILayout.PropertyField(_OneTimeDuration); + EditorGUILayout.PropertyField(_OneTimeAmplitude); + EditorGUILayout.PropertyField(_OneTimeRemapMin); + EditorGUILayout.PropertyField(_OneTimeRemapMax); + EditorGUILayout.PropertyField(_OneTimeCurve); + EditorGUILayout.PropertyField(_DisableAfterOneTime); + EditorGUILayout.PropertyField(_DisableGameObjectAfterOneTime); + EditorGUILayout.PropertyField(_OneTimeButton); + } + else if (myTarget.ControlMode == ShaderController.ControlModes.AudioAnalyzer) + { + EditorGUILayout.PropertyField(_AudioAnalyzer); + EditorGUILayout.PropertyField(_BeatID); + EditorGUILayout.PropertyField(_AudioAnalyzerMultiplier); + EditorGUILayout.PropertyField(_AudioAnalyzerOffset); + EditorGUILayout.PropertyField(_AudioAnalyzerLerp); + } + else if (myTarget.ControlMode == ShaderController.ControlModes.Driven) + { + EditorGUILayout.PropertyField(_DrivenLevel); + } + else if (myTarget.ControlMode == ShaderController.ControlModes.ToDestination) + { + EditorGUILayout.PropertyField(_ToDestinationValue); + EditorGUILayout.PropertyField(_ToDestinationDuration); + EditorGUILayout.PropertyField(_ToDestinationCurve); + EditorGUILayout.PropertyField(_DisableAfterToDestination); + EditorGUILayout.PropertyField(_ToDestinationButton); + } + + EditorGUILayout.PropertyField(_InitialValue); + EditorGUILayout.PropertyField(_CurrentValue); + EditorGUILayout.PropertyField(_CurrentValueNormalized); + EditorGUILayout.PropertyField(_InitialColor); + EditorGUILayout.PropertyField(_PropertyID); + EditorGUILayout.PropertyField(_PropertyFound); + EditorGUILayout.PropertyField(_TargetMaterial); + + serializedObject.ApplyModifiedProperties(); + + if (Application.isPlaying) + { + _barRect = EditorGUILayout.GetControlRect(); + DrawLevelProgressBar(_barRect, myTarget.CurrentValueNormalized, _mmYellow, _mmRed); + } + } + + protected Rect _barRect; + protected Color _mmYellow = new Color(1f, 0.7686275f, 0f); + protected Color _mmRed = MMColors.Orangered; + protected const int _lineHeight = 20; + protected const int _lineMargin = 2; + protected const int _numberOfLines = 1; + protected Color _progressBarBackground = new Color(0, 0, 0, 0.5f); + + protected virtual void DrawLevelProgressBar(Rect position, float level, Color frontColor, Color negativeColor) + { + Rect levelLabelRect = new Rect(position.x, position.y + (_lineHeight + _lineMargin) * (_numberOfLines - 1), position.width, _lineHeight); + Rect levelValueRect = new Rect(position.x - 15 + EditorGUIUtility.labelWidth + 4, position.y + (_lineHeight + _lineMargin) * (_numberOfLines - 1), position.width, _lineHeight); + + float progressX = position.x - 5 + EditorGUIUtility.labelWidth + 60; + float progressY = position.y + (_lineHeight + _lineMargin) * (_numberOfLines - 1) + 6; + float progressHeight = 10f; + float fullProgressWidth = position.width - EditorGUIUtility.labelWidth - 60 + 5; + + bool negative = false; + float displayLevel = level; + if (level < 0f) + { + negative = true; + level = -level; + } + + float progressLevel = Mathf.Clamp01(level); + Rect levelProgressBg = new Rect(progressX, progressY, fullProgressWidth, progressHeight); + float progressWidth = MMMaths.Remap(progressLevel, 0f, 1f, 0f, fullProgressWidth); + Rect levelProgressFront = new Rect(progressX, progressY, progressWidth, progressHeight); + + EditorGUI.LabelField(levelLabelRect, new GUIContent("Level")); + EditorGUI.LabelField(levelValueRect, new GUIContent(displayLevel.ToString("F4"))); + EditorGUI.DrawRect(levelProgressBg, _progressBarBackground); + if (negative) + { + EditorGUI.DrawRect(levelProgressFront, negativeColor); + } + else + { + EditorGUI.DrawRect(levelProgressFront, frontColor); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/ShaderControllerEditor.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/ShaderControllerEditor.cs.meta new file mode 100644 index 0000000..94173ff --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMPropertyControllers/ShaderControllerEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09fb9010cab0ccd48b5c336634829ab7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio.meta b/Assets/Feel/MMTools/Core/Editor/MMRadio.meta new file mode 100644 index 0000000..2674ccb --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f3f8a0f0ac6c3e48adfc0e94029a3af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyEmitterDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyEmitterDrawer.cs new file mode 100644 index 0000000..416a550 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyEmitterDrawer.cs @@ -0,0 +1,180 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.Reflection; +using System; +using System.Linq; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMPropertyEmitter), true)] + [CanEditMultipleObjects] + public class MMPropertyEmitterDrawer : MMPropertyPickerDrawer + { + protected Color _mmBlue = new Color(0.2235294f, 0.6745098f, 1f); + protected Color _mmRed = MMColors.Orangered; + + protected override void FillAuthorizedTypes(PropertyPickerViewData viewData) + { + viewData._authorizedTypes = new Type[] + { + typeof(float), + typeof(Vector2), + typeof(Vector3), + typeof(Vector4), + typeof(Quaternion), + typeof(int), + typeof(bool) + }; + } + + /// + /// Defines the height of the drawer + /// + /// + /// + /// + public override float AdditionalHeight(PropertyPickerViewData viewData) + { + int additionalLines = 0; + if (viewData._TargetObject != null) + { + if ((viewData._selectedPropertyIndex != 0) && (viewData._propertyType != null)) + { + additionalLines = 1; + if (viewData._propertyType == typeof(bool)) + { + additionalLines = 2; + } + if (viewData._propertyType == typeof(float)) + { + additionalLines = 4; + } + if (viewData._propertyType == typeof(int)) + { + additionalLines = 4; + } + if (viewData._propertyType == typeof(Vector2)) + { + additionalLines = 5; + } + if (viewData._propertyType == typeof(Vector3)) + { + additionalLines = 5; + } + if (viewData._propertyType == typeof(Vector4)) + { + additionalLines = 5; + } + if (viewData._propertyType == typeof(Quaternion)) + { + additionalLines = 5; + } + } + + if (Application.isPlaying) + { + additionalLines += 1; + } + } + viewData._numberOfLines = viewData._numberOfLines + additionalLines; + + return PropertyPickerViewData._lineHeight * additionalLines + PropertyPickerViewData._lineMargin * additionalLines - 1; + } + + /// + /// Draws the inspector + /// + /// + /// + /// + protected override void DisplayAdditionalProperties(Rect position, SerializedProperty property, GUIContent label, PropertyPickerViewData viewData) + { + float lineHeight = PropertyPickerViewData._lineHeight; + float lineMargin = PropertyPickerViewData._lineMargin; + + Rect additional1Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 4, position.width, lineHeight); + Rect additional2Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 5, position.width, lineHeight); + Rect additional3Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 6, position.width, lineHeight); + Rect additional4Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 7, position.width, lineHeight); + Rect additional5Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 8, position.width, lineHeight); + Rect additional6Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 9, position.width, lineHeight); + Rect additional7Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 10, position.width, lineHeight); + Rect additional8Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 11, position.width, lineHeight); + Rect additional9Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 12, position.width, lineHeight); + Rect additional10Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 13, position.width, lineHeight); + + // displays the related properties + if ((viewData._selectedPropertyIndex != 0) && (viewData._propertyType != null)) + { + if (viewData._propertyType == typeof(bool)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("BoolRemapFalse"), new GUIContent("Remap False"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("BoolRemapTrue"), new GUIContent("Remap True"), true); + } + + if (viewData._propertyType == typeof(float)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("FloatRemapMinToZero"), new GUIContent("RemapToZero"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("FloatRemapMaxToOne"), new GUIContent("RemapToOne"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("ClampMin"), new GUIContent("ClampMin"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ClampMax"), new GUIContent("ClampMax"), true); + } + + if (viewData._propertyType == typeof(Vector2)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("Vector2Option"), new GUIContent("Target axis"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("FloatRemapMinToZero"), new GUIContent("RemapToZero"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("FloatRemapMaxToOne"), new GUIContent("RemapToOne"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ClampMin"), new GUIContent("ClampMin"), true); + EditorGUI.PropertyField(additional5Rect, property.FindPropertyRelative("ClampMax"), new GUIContent("ClampMax"), true); + } + + if (viewData._propertyType == typeof(Vector3)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("Vector3Option"), new GUIContent("Target axis"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("FloatRemapMinToZero"), new GUIContent("RemapToZero"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("FloatRemapMaxToOne"), new GUIContent("RemapToOne"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ClampMin"), new GUIContent("ClampMin"), true); + EditorGUI.PropertyField(additional5Rect, property.FindPropertyRelative("ClampMax"), new GUIContent("ClampMax"), true); + } + + if (viewData._propertyType == typeof(Vector4)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("Vector4Option"), new GUIContent("Target axis"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("FloatRemapMinToZero"), new GUIContent("RemapToZero"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("FloatRemapMaxToOne"), new GUIContent("RemapToOne"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ClampMin"), new GUIContent("ClampMin"), true); + EditorGUI.PropertyField(additional5Rect, property.FindPropertyRelative("ClampMax"), new GUIContent("ClampMax"), true); + } + + if (viewData._propertyType == typeof(Quaternion)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("Vector3Option"), new GUIContent("Target axis"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("QuaternionRemapMinToZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("QuaternionRemapMaxToOne"), new GUIContent("Remap One"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ClampMin"), new GUIContent("ClampMin"), true); + EditorGUI.PropertyField(additional5Rect, property.FindPropertyRelative("ClampMax"), new GUIContent("ClampMax"), true); + } + + if (viewData._propertyType == typeof(int)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("IntRemapMinToZero"), new GUIContent("RemapToZero"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("IntRemapMaxToOne"), new GUIContent("RemapToOne"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("ClampMin"), new GUIContent("ClampMin"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ClampMax"), new GUIContent("ClampMax"), true); + } + } + + if ((viewData._TargetObject != null) && (viewData._selectedPropertyIndex != 0) && (viewData._propertyType != null) && (Application.isPlaying)) + { + // if the application is playing, we display a progress bar + + float level = property.FindPropertyRelative("Level").floatValue; + DrawLevelProgressBar(position, level, _mmBlue, _mmRed, viewData); + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyEmitterDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyEmitterDrawer.cs.meta new file mode 100644 index 0000000..fa74f66 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyEmitterDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbf5e7decc40e8d4e9a6ad8c5046c26d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyPickerDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyPickerDrawer.cs new file mode 100644 index 0000000..0aa269d --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyPickerDrawer.cs @@ -0,0 +1,557 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.Reflection; +using System; +using System.Linq; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMPropertyPicker), true)] + public class MMPropertyPickerDrawer : PropertyDrawer + { + public class PropertyPickerViewData + { + public UnityEngine.Object _TargetObject; + public GameObject _TargetGameObject; + + public const int _lineHeight = 20; + public const int _lineMargin = 2; + + public int _selectedComponentIndex = 0; + public int _selectedPropertyIndex = 0; + + public const string _undefinedComponentString = ""; + public const string _undefinedPropertyString = ""; + + public bool _initialized = false; + + public string[] _componentNames; + public List _componentList; + + public string[] _propertiesNames; + public List _propertiesList; + public Type _propertyType = null; + + public int _numberOfLines = 0; + public Color _progressBarBackground = new Color(0, 0, 0, 0.5f); + + public Type[] _authorizedTypes; + public bool _targetIsScriptableObject; + } + + private Dictionary _propertyPickerViewData = new Dictionary(); + + + + /// + /// Defines the height of the drawer + /// + /// + /// + /// + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + if (!_propertyPickerViewData.TryGetValue(property.propertyPath, out var viewData)) + { + viewData = new PropertyPickerViewData(); + _propertyPickerViewData[property.propertyPath] = viewData; + } + + Initialization(property, viewData); + + viewData._numberOfLines = 2; + + if (viewData._TargetObject != null) + { + viewData._numberOfLines = 3; + if (viewData._selectedComponentIndex != 0) + { + viewData._numberOfLines = 4; + } + } + + if (viewData._targetIsScriptableObject) + { + viewData._numberOfLines = 4; + } + + return PropertyPickerViewData._lineHeight * viewData._numberOfLines + PropertyPickerViewData._lineMargin * viewData._numberOfLines - 1 + AdditionalHeight(viewData); + } + + public virtual float AdditionalHeight(PropertyPickerViewData viewData) + { + return 0f; + } + + /// + /// Initializes the dropdowns + /// + /// + protected virtual void Initialization(SerializedProperty property, PropertyPickerViewData viewData) + { + + if (viewData._initialized) + { + return; + } + + FillAuthorizedTypes(viewData); + + FillComponentsList(property, viewData); + FillPropertyList(property, viewData); + + GetComponentIndex(property, viewData); + GetPropertyIndex(property, viewData); + + viewData._propertyType = GetPropertyType(property, viewData); + + viewData._initialized = true; + } + + protected static bool AuthorizedType(Type[] typeArray, Type checkedType) + { + foreach (Type t in typeArray) + { + if (t == checkedType) + { + return true; + } + } + return false; + } + + protected virtual void FillAuthorizedTypes(PropertyPickerViewData viewData) + { + viewData._authorizedTypes = new Type[] + { + typeof(String), + typeof(float), + typeof(Vector2), + typeof(Vector3), + typeof(Vector4), + typeof(Quaternion), + typeof(int), + typeof(bool), + typeof(Color) + }; + } + + #if UNITY_EDITOR + /// + /// Draws the inspector + /// + /// + /// + /// + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + if (!_propertyPickerViewData.TryGetValue(property.propertyPath, out var viewData)) + { + viewData = new PropertyPickerViewData(); + _propertyPickerViewData[property.propertyPath] = viewData; + } + + Initialization(property, viewData); + + // rectangles + Rect targetLabelRect = new Rect(position.x, position.y, position.width, PropertyPickerViewData._lineHeight); + Rect targetObjectRect = new Rect(position.x, position.y + (PropertyPickerViewData._lineHeight + PropertyPickerViewData._lineMargin), position.width, PropertyPickerViewData._lineHeight); + Rect targetComponentRect = new Rect(position.x, position.y + (PropertyPickerViewData._lineHeight + PropertyPickerViewData._lineMargin) * 2, position.width, PropertyPickerViewData._lineHeight); + Rect targetPropertyRect = new Rect(position.x, position.y + (PropertyPickerViewData._lineHeight + PropertyPickerViewData._lineMargin) * 3, position.width, PropertyPickerViewData._lineHeight); + + EditorGUI.BeginProperty(position, label, property); + + EditorGUI.LabelField(targetLabelRect, new GUIContent(property.name)); + + EditorGUI.indentLevel++; + + // displays the target object selector + + // property.serializedObject.Update(); // removed to prevent blocking upper parts of the inspector + + EditorGUI.BeginChangeCheck(); + + EditorGUI.PropertyField(targetObjectRect, property.FindPropertyRelative("TargetObject"), new GUIContent("Target Object"), true); + if (EditorGUI.EndChangeCheck()) + { + property.serializedObject.ApplyModifiedProperties(); + viewData._TargetObject = property.FindPropertyRelative("TargetObject").objectReferenceValue as UnityEngine.Object; + FillComponentsList(property, viewData); + viewData._selectedComponentIndex = 0; + viewData._selectedPropertyIndex = 0; + SetTargetComponent(property, viewData); + if (viewData._targetIsScriptableObject) + { + FillPropertyList(property, viewData); + } + } + + // displays a label for scriptable objects + if (viewData._targetIsScriptableObject) + { + EditorGUI.LabelField(targetComponentRect, "Type", "Scriptable Object"); + } + + // displays the component dropdown for gameobjects + if ((viewData._componentNames != null) && (viewData._componentNames.Length > 0)) + { + EditorGUI.BeginChangeCheck(); + viewData._selectedComponentIndex = EditorGUI.Popup(targetComponentRect, "Component", viewData._selectedComponentIndex, viewData._componentNames); + if (EditorGUI.EndChangeCheck()) + { + SetTargetComponent(property, viewData); + viewData._selectedPropertyIndex = 0; + FillPropertyList(property, viewData); + } + } + + // displays the properties dropdown + if (((viewData._selectedComponentIndex != 0) || viewData._targetIsScriptableObject) && (viewData._propertiesNames != null) && (viewData._propertiesNames.Length > 0)) + { + EditorGUI.BeginChangeCheck(); + viewData._selectedPropertyIndex = EditorGUI.Popup(targetPropertyRect, "Property", viewData._selectedPropertyIndex, viewData._propertiesNames); + if (EditorGUI.EndChangeCheck()) + { + SetTargetProperty(property, viewData); + } + } + + DisplayAdditionalProperties(position, property, label, viewData); + + EditorGUI.indentLevel--; + + EditorGUI.EndProperty(); + } + #endif + + protected virtual void DisplayAdditionalProperties(Rect position, SerializedProperty property, GUIContent label, PropertyPickerViewData viewData) + { + + } + + protected virtual void DrawLevelProgressBar(Rect position, float level, Color frontColor, Color negativeColor, PropertyPickerViewData viewData) + { + Rect levelLabelRect = new Rect(position.x, position.y + (PropertyPickerViewData._lineHeight + PropertyPickerViewData._lineMargin) * (viewData._numberOfLines - 1), position.width, PropertyPickerViewData._lineHeight); + Rect levelValueRect = new Rect(position.x - 15 + EditorGUIUtility.labelWidth + 4, position.y + (PropertyPickerViewData._lineHeight + PropertyPickerViewData._lineMargin) * (viewData._numberOfLines - 1), position.width, PropertyPickerViewData._lineHeight); + + float progressX = position.x - 5 + EditorGUIUtility.labelWidth + 60; + float progressY = position.y + (PropertyPickerViewData._lineHeight + PropertyPickerViewData._lineMargin) * (viewData._numberOfLines - 1) + 6; + float progressHeight = 10f; + float fullProgressWidth = position.width - EditorGUIUtility.labelWidth - 60 + 5; + + bool negative = false; + float displayLevel = level; + if (level < 0f) + { + negative = true; + level = -level; + } + + float progressLevel = Mathf.Clamp01(level); + Rect levelProgressBg = new Rect(progressX, progressY, fullProgressWidth, progressHeight); + float progressWidth = MMMaths.Remap(progressLevel, 0f, 1f, 0f, fullProgressWidth); + Rect levelProgressFront = new Rect(progressX, progressY, progressWidth, progressHeight); + + EditorGUI.LabelField(levelLabelRect, new GUIContent("Level")); + EditorGUI.LabelField(levelValueRect, new GUIContent(displayLevel.ToString("F4"))); + EditorGUI.DrawRect(levelProgressBg, viewData._progressBarBackground); + if (negative) + { + EditorGUI.DrawRect(levelProgressFront, negativeColor); + } + else + { + EditorGUI.DrawRect(levelProgressFront, frontColor); + } + } + + /// + /// Fills a list of all the components on the target object + /// + /// + protected virtual void FillComponentsList(SerializedProperty property, PropertyPickerViewData viewData) + { + viewData._TargetObject = property.FindPropertyRelative("TargetObject").objectReferenceValue as UnityEngine.Object; + viewData._TargetGameObject = property.FindPropertyRelative("TargetObject").objectReferenceValue as GameObject; + + viewData._targetIsScriptableObject = false; + if (property.FindPropertyRelative("TargetObject").objectReferenceValue is ScriptableObject) + { + viewData._targetIsScriptableObject = true; + } + + if (viewData._TargetGameObject == null) + { + viewData._componentNames = null; + return; + } + + // we create a list of components and an array of names + viewData._componentList = new List(); + viewData._componentNames = new string[0]; + + // we create a temp list to fill our array with + List tempComponentsNameList = new List(); + tempComponentsNameList.Add(PropertyPickerViewData._undefinedComponentString); + viewData._componentList.Add(null); + + // we add all components to the list + Component[] components = viewData._TargetGameObject.GetComponents(typeof(Component)); + for(int i = 0; i < components.Length; i++) + { + viewData._componentList.Add(components[i]); + tempComponentsNameList.Add(i + ". " + components[i].GetType().Name); + } + viewData._componentNames = tempComponentsNameList.ToArray(); + } + + /// + /// Fills a list of all properties and fields on the target component + /// + /// + protected virtual void FillPropertyList(SerializedProperty property, PropertyPickerViewData viewData) + { + if (viewData._TargetObject == null) + { + return; + } + + if ((property.FindPropertyRelative("TargetComponent").objectReferenceValue == null) + && !viewData._targetIsScriptableObject) + { + return; + } + + // we create a list of components and an array of names + viewData._propertiesNames = Array.Empty(); + viewData._propertiesList = new List(); + + // we create a temp list to fill our array with + List tempPropertiesList = new List(); + tempPropertiesList.Add(PropertyPickerViewData._undefinedPropertyString); + viewData._propertiesList.Add(""); + + if (!viewData._targetIsScriptableObject) + { + // Find all fields + var fieldsList = property.FindPropertyRelative("TargetComponent").objectReferenceValue.GetType() + .GetFields(BindingFlags.Public | BindingFlags.Instance) + .Where(field => + (AuthorizedType(viewData._authorizedTypes, field.FieldType)) + ) + .OrderBy(prop => prop.FieldType.Name).ToList(); + + foreach (FieldInfo thisFieldInfo in fieldsList) + { + string newEntry = thisFieldInfo.Name + " [Field - " + thisFieldInfo.FieldType.Name + "]"; + tempPropertiesList.Add(newEntry); + viewData._propertiesList.Add(thisFieldInfo.Name); + } + + // finds all properties + var propertiesList = property.FindPropertyRelative("TargetComponent").objectReferenceValue.GetType() + .GetProperties(BindingFlags.Public | BindingFlags.Instance) + .Where(prop => + (AuthorizedType(viewData._authorizedTypes, prop.PropertyType)) + ) + .OrderBy(prop => prop.PropertyType.Name).ToList(); + + foreach (PropertyInfo foundProperty in propertiesList) + { + string newEntry = foundProperty.Name + " [Property - " + foundProperty.PropertyType.Name + "]"; + tempPropertiesList.Add(newEntry); + viewData._propertiesList.Add(foundProperty.Name); + } + } + else + { + // if this is a scriptable object + // finds all fields + var fieldsList = property.FindPropertyRelative("TargetObject").objectReferenceValue.GetType() + .GetFields(BindingFlags.Public | BindingFlags.Instance) + .Where(field => + (AuthorizedType(viewData._authorizedTypes, field.FieldType)) + ) + .OrderBy(prop => prop.FieldType.Name).ToList(); + + foreach (FieldInfo thisFieldInfo in fieldsList) + { + string newEntry = thisFieldInfo.Name + " [Field - " + thisFieldInfo.FieldType.Name + "]"; + tempPropertiesList.Add(newEntry); + viewData._propertiesList.Add(thisFieldInfo.Name); + } + + // finds all properties + var propertiesList = property.FindPropertyRelative("TargetObject").objectReferenceValue.GetType() + .GetProperties(BindingFlags.Public | BindingFlags.Instance) + .Where(prop => + (AuthorizedType(viewData._authorizedTypes, prop.PropertyType)) + ) + .OrderBy(prop => prop.PropertyType.Name).ToList(); + + foreach (PropertyInfo foundProperty in propertiesList) + { + string newEntry = foundProperty.Name + " [Property - " + foundProperty.PropertyType.Name + "]"; + tempPropertiesList.Add(newEntry); + viewData._propertiesList.Add(foundProperty.Name); + } + } + + viewData._propertiesNames = tempPropertiesList.ToArray(); + } + + /// + /// Sets the target property + /// + /// + protected virtual void SetTargetProperty(SerializedProperty property, PropertyPickerViewData viewData) + { + if (viewData._selectedPropertyIndex > 0) + { + property.serializedObject.Update(); + property.FindPropertyRelative("TargetPropertyName").stringValue = viewData._propertiesList[viewData._selectedPropertyIndex]; + property.serializedObject.ApplyModifiedProperties(); + viewData._propertyType = GetPropertyType(property, viewData); + } + else + { + property.serializedObject.Update(); + property.FindPropertyRelative("TargetPropertyName").stringValue = ""; + property.serializedObject.ApplyModifiedProperties(); + viewData._selectedPropertyIndex = 0; + viewData._propertyType = null; + } + } + + /// + /// Sets the target component + /// + /// + protected virtual void SetTargetComponent(SerializedProperty property, PropertyPickerViewData viewData) + { + if (viewData._targetIsScriptableObject) + { + property.serializedObject.Update(); + property.FindPropertyRelative("TargetScriptableObject").objectReferenceValue = property.FindPropertyRelative("TargetObject").objectReferenceValue as ScriptableObject; + property.FindPropertyRelative("TargetComponent").objectReferenceValue = null; + property.serializedObject.ApplyModifiedProperties(); + return; + } + + if (viewData._selectedComponentIndex > 0) + { + property.serializedObject.Update(); + property.FindPropertyRelative("TargetComponent").objectReferenceValue = viewData._componentList[viewData._selectedComponentIndex]; + property.FindPropertyRelative("TargetScriptableObject").objectReferenceValue = null; + property.serializedObject.ApplyModifiedProperties(); + } + else + { + property.serializedObject.Update(); + property.FindPropertyRelative("TargetComponent").objectReferenceValue = null; + property.FindPropertyRelative("TargetPropertyName").stringValue = ""; + property.FindPropertyRelative("TargetScriptableObject").objectReferenceValue = null; + viewData._selectedComponentIndex = 0; + viewData._selectedPropertyIndex = 0; + property.serializedObject.ApplyModifiedProperties(); + } + } + + /// + /// Gets the component index + /// + /// + protected virtual void GetComponentIndex(SerializedProperty property, PropertyPickerViewData viewData) + { + int index = 0; + bool found = false; + + Component targetComponent = property.FindPropertyRelative("TargetComponent").objectReferenceValue as Component; + + if ((viewData._componentList == null) || (viewData._componentList.Count == 0)) + { + viewData._selectedComponentIndex = 0; + return; + } + + foreach (Component component in viewData._componentList) + { + if (component == targetComponent) + { + viewData._selectedComponentIndex = index; + found = true; + } + index++; + } + if (!found) + { + viewData._selectedComponentIndex = 0; + } + } + + /// + /// Gets the property index + /// + /// + protected virtual void GetPropertyIndex(SerializedProperty property, PropertyPickerViewData viewData) + { + int index = 0; + bool found = false; + + Component targetComponent = property.FindPropertyRelative("TargetComponent").objectReferenceValue as Component; + ScriptableObject targetScriptable = property.FindPropertyRelative("TargetScriptableObject").objectReferenceValue as ScriptableObject; + + if ((targetComponent == null) && (targetScriptable == null)) + { + return; + } + + string targetProperty = property.FindPropertyRelative("TargetPropertyName").stringValue; + + if ((viewData._propertiesList == null) || (viewData._propertiesList.Count == 0)) + { + viewData._selectedPropertyIndex = 0; + return; + } + + foreach (string prop in viewData._propertiesList) + { + if (prop == targetProperty) + { + viewData._selectedPropertyIndex = index; + found = true; + } + index++; + } + if (!found) + { + viewData._selectedPropertyIndex = 0; + } + + } + + protected virtual Type GetPropertyType(SerializedProperty property, PropertyPickerViewData viewData) + { + if (viewData._selectedPropertyIndex == 0) + { + return null; + } + + MMProperty tempProperty; + + tempProperty = MMProperty.FindProperty(viewData._propertiesList[viewData._selectedPropertyIndex], property.FindPropertyRelative("TargetComponent").objectReferenceValue as Component, null, property.FindPropertyRelative("TargetObject").objectReferenceValue as ScriptableObject); + + if (tempProperty != null) + { + return tempProperty.PropertyType; + } + else + { + return null; + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyPickerDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyPickerDrawer.cs.meta new file mode 100644 index 0000000..b6e2cd5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyPickerDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4e9029e392667449a8e7021ac4d66b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyReceiverDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyReceiverDrawer.cs new file mode 100644 index 0000000..891e6bf --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyReceiverDrawer.cs @@ -0,0 +1,209 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using System.Reflection; +using System; +using System.Linq; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMPropertyReceiver), true)] + [CanEditMultipleObjects] + public class MMPropertyReceiverDrawer : MMPropertyPickerDrawer + { + protected Color _mmYellow = new Color(1f, 0.7686275f, 0f); + protected Color _mmRed = MMColors.Orangered; + + protected override void FillAuthorizedTypes(PropertyPickerViewData viewData) + { + viewData._authorizedTypes = new Type[] + { + typeof(String), + typeof(float), + typeof(Vector2), + typeof(Vector3), + typeof(Vector4), + typeof(Quaternion), + typeof(int), + typeof(bool), + typeof(Color) + }; + } + + /// + /// Defines the height of the drawer + /// + /// + /// + /// + public override float AdditionalHeight(PropertyPickerViewData viewData) + { + int additionalLines = 0; + if (viewData._TargetObject != null) + { + if ((viewData._selectedPropertyIndex != 0) && (viewData._propertyType != null)) + { + additionalLines = 1; + if (viewData._propertyType == typeof(bool)) + { + additionalLines = 3; + } + if (viewData._propertyType == typeof(Color)) + { + additionalLines = 3; + } + if (viewData._propertyType == typeof(string)) + { + additionalLines = 3; + } + if (viewData._propertyType == typeof(float)) + { + additionalLines = 3; + } + if (viewData._propertyType == typeof(int)) + { + additionalLines = 3; + } + if (viewData._propertyType == typeof(Vector2)) + { + additionalLines = 5; + } + if (viewData._propertyType == typeof(Vector3)) + { + additionalLines = 6; + } + if (viewData._propertyType == typeof(Vector4)) + { + additionalLines = 15; + } + if (viewData._propertyType == typeof(Quaternion)) + { + additionalLines = 6; + } + } + + if (Application.isPlaying) + { + additionalLines += 1; + } + } + + viewData._numberOfLines = viewData._numberOfLines + additionalLines; + + return PropertyPickerViewData._lineHeight * additionalLines + PropertyPickerViewData._lineMargin * additionalLines - 1; + } + + /// + /// Draws the inspector + /// + /// + /// + /// + protected override void DisplayAdditionalProperties(Rect position, SerializedProperty property, GUIContent label, PropertyPickerViewData viewData) + { + float lineHeight = PropertyPickerViewData._lineHeight; + float lineMargin = PropertyPickerViewData._lineMargin; + + Rect additional1Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 4, position.width, lineHeight); + Rect additional2Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 5, position.width, lineHeight); + Rect additional3Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 6, position.width, lineHeight); + Rect additional4Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 7, position.width, lineHeight); + Rect additional5Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 8, position.width, lineHeight); + Rect additional6Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 9, position.width, lineHeight); + Rect additional7Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 10, position.width, lineHeight); + Rect additional8Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 11, position.width, lineHeight); + Rect additional9Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 12, position.width, lineHeight); + Rect additional10Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 13, position.width, lineHeight); + + // displays the related properties + if ((viewData._selectedPropertyIndex != 0) && (viewData._propertyType != null)) + { + if ( (viewData._propertyType != typeof(bool)) && (viewData._propertyType != typeof(string)) ) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("RelativeValue"), new GUIContent("Relative Value"), true); + } + + if (viewData._propertyType == typeof(string)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("StringRemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("StringRemapOne"), new GUIContent("Remap One"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("Threshold"), new GUIContent("Zero/One Threshold"), true); + } + + if (viewData._propertyType == typeof(bool)) + { + EditorGUI.PropertyField(additional1Rect, property.FindPropertyRelative("BoolRemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("BoolRemapOne"), new GUIContent("Remap One"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("Threshold"), new GUIContent("True/False Threshold"), true); + } + + if (viewData._propertyType == typeof(float)) + { + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("FloatRemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("FloatRemapOne"), new GUIContent("Remap One"), true); + } + + if (viewData._propertyType == typeof(Vector2)) + { + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("ModifyX"), new GUIContent("Modify x"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("ModifyY"), new GUIContent("Modify y"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("Vector2RemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional5Rect, property.FindPropertyRelative("Vector2RemapOne"), new GUIContent("Remap One"), true); + } + + if (viewData._propertyType == typeof(Vector3)) + { + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("ModifyX"), new GUIContent("Modify x"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("ModifyY"), new GUIContent("Modify y"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ModifyZ"), new GUIContent("Modify z"), true); + EditorGUI.PropertyField(additional5Rect, property.FindPropertyRelative("Vector3RemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional6Rect, property.FindPropertyRelative("Vector3RemapOne"), new GUIContent("Remap One"), true); + } + + if (viewData._propertyType == typeof(Vector4)) + { + Rect additionalVector47Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 9, position.width, lineHeight * 5); + Rect additionalVector48Rect = new Rect(position.x, position.y + (lineHeight + lineMargin) * 10 + lineHeight * 4, position.width, lineHeight * 5); + + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("ModifyX"), new GUIContent("Modify x"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("ModifyY"), new GUIContent("Modify y"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ModifyZ"), new GUIContent("Modify z"), true); + EditorGUI.PropertyField(additional5Rect, property.FindPropertyRelative("ModifyW"), new GUIContent("Modify z"), true); + EditorGUI.PropertyField(additionalVector47Rect, property.FindPropertyRelative("Vector4RemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additionalVector48Rect, property.FindPropertyRelative("Vector4RemapOne"), new GUIContent("Remap One"), true); + } + + if (viewData._propertyType == typeof(Quaternion)) + { + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("ModifyX"), new GUIContent("Modify x"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("ModifyY"), new GUIContent("Modify y"), true); + EditorGUI.PropertyField(additional4Rect, property.FindPropertyRelative("ModifyZ"), new GUIContent("Modify z"), true); + EditorGUI.PropertyField(additional5Rect, property.FindPropertyRelative("QuaternionRemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional6Rect, property.FindPropertyRelative("QuaternionRemapOne"), new GUIContent("Remap One"), true); + } + + if (viewData._propertyType == typeof(int)) + { + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("IntRemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("IntRemapOne"), new GUIContent("Remap One"), true); + } + + if (viewData._propertyType == typeof(Color)) + { + EditorGUI.PropertyField(additional2Rect, property.FindPropertyRelative("ColorRemapZero"), new GUIContent("Remap Zero"), true); + EditorGUI.PropertyField(additional3Rect, property.FindPropertyRelative("ColorRemapOne"), new GUIContent("Remap One"), true); + } + } + + if ((viewData._TargetObject != null) && (viewData._selectedPropertyIndex != 0) && (viewData._propertyType != null) && (Application.isPlaying)) + { + // if the application is playing, we display a progress bar + + float level = property.FindPropertyRelative("Level").floatValue; + DrawLevelProgressBar(position, level, _mmYellow, _mmRed, viewData); + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyReceiverDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyReceiverDrawer.cs.meta new file mode 100644 index 0000000..77a2889 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMPropertyReceiverDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50fd27fe4d3854042af8178658492f5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalEditor.cs b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalEditor.cs new file mode 100644 index 0000000..2cb74e3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalEditor.cs @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [CustomEditor(typeof(MMRadioSignal), true)] + [CanEditMultipleObjects] + public class MMRadioSignalEditor : Editor + { + protected MMRadioSignal _radioSignal; + + protected float _inspectorWidth; + + protected SerializedProperty _duration; + protected SerializedProperty _currentLevel; + + public override bool RequiresConstantRepaint() + { + return true; + } + + protected virtual void OnEnable() + { + _radioSignal = target as MMRadioSignal; + _duration = serializedObject.FindProperty("Duration"); + _currentLevel = serializedObject.FindProperty("CurrentLevel"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + _inspectorWidth = EditorGUIUtility.currentViewWidth - 24; + + DrawProperties(); + + serializedObject.ApplyModifiedProperties(); + } + + protected virtual void DrawProperties() + { + DrawPropertiesExcluding(serializedObject, "AnimatedPreview", "CurrentLevel"); + } + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalEditor.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalEditor.cs.meta new file mode 100644 index 0000000..0d1ef19 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61270f15bcfabeb4ba61296fad914dbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalGeneratorEditor.cs b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalGeneratorEditor.cs new file mode 100644 index 0000000..33a690a --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalGeneratorEditor.cs @@ -0,0 +1,249 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [CustomEditor(typeof(MMRadioSignalGenerator), true)] + [CanEditMultipleObjects] + public class MMRadioSignalGeneratorEditor : MMRadioSignalEditor + { + protected MMReorderableList _list; + protected SerializedProperty _globalMultiplier; + protected SerializedProperty _clamp; + protected SerializedProperty _clamps; + protected SerializedProperty _bias; + + protected float _spectrumBoxBottomY; + protected Vector2 _spectrumBoxPosition; + protected Vector2 _spectrumBoxSize; + protected float _spectrumMaxColumnHeight; + protected const float _externalMargin = 12f; + protected float _internalMargin = 12f; + protected const int _rawSpectrumBoxHeight = 125; + protected const int _numberOfAxisSpectrum = 4; + protected Vector3 _axisOrigin = Vector3.zero; + protected Vector3 _axisDestination = Vector3.zero; + protected float _spectrumPointsCount = 200; + protected Color _spectrumColor = MMColors.Aqua; + protected Color _spectrumBoxColor = MMColors.AliceBlue; + protected Rect _rect; + + protected double _deltaTime = 0f; + protected double _signalTime = 0f; + protected double _lastTime; + protected float _normalizedTime = 0f; + protected Vector2 _pointA; + protected Vector2 _pointB; + + + protected SerializedProperty _driverTime; + protected SerializedProperty _animatedPreview; + + protected override void OnEnable() + { + base.OnEnable(); + _globalMultiplier = serializedObject.FindProperty("GlobalMultiplier"); + _clamp = serializedObject.FindProperty("Clamp"); + _clamps = serializedObject.FindProperty("Clamps"); + _bias = serializedObject.FindProperty("Bias"); + + _list = new MMReorderableList(serializedObject.FindProperty("SignalList")); + _driverTime = serializedObject.FindProperty("DriverTime"); + _animatedPreview = serializedObject.FindProperty("AnimatedPreview"); + _list.elementNameProperty = "SignalList"; + _list.elementDisplayType = MMReorderableList.ElementDisplayType.Expandable; + _list.onAddCallback += OnListAdd; + } + + private void OnListAdd(MMReorderableList list) + { + SerializedProperty property = list.AddItem(); + + property.FindPropertyRelative("Active").boolValue = true; + property.FindPropertyRelative("Frequency").floatValue = 1f; + property.FindPropertyRelative("Amplitude").floatValue = 1f; + property.FindPropertyRelative("Offset").floatValue = 0f; + property.FindPropertyRelative("Phase").floatValue = 0f; + } + + protected override void DrawProperties() + { + DrawPropertiesExcluding(serializedObject, "AnimatedPreview", "SignalList", "GlobalMultiplier", "CurrentLevel", "Clamp", "Clamps"); + EditorGUILayout.Space(10); + _list.DoLayoutList(); + EditorGUILayout.PropertyField(_globalMultiplier); + EditorGUILayout.PropertyField(_clamps); + DrawRawSpectrum(); + } + + protected virtual void DrawRawSpectrum() + { + _deltaTime = (EditorApplication.timeSinceStartup - _lastTime); + _signalTime += _deltaTime; + if (_signalTime > _duration.floatValue) + { + _signalTime = 0f; + } + _lastTime = EditorApplication.timeSinceStartup; + _normalizedTime = MMMaths.Remap((float)_signalTime, 0f, _duration.floatValue, 0f, 1f); + + GUILayout.Space(10); + GUILayout.Label("Preview", EditorStyles.boldLabel); + + EditorGUILayout.PropertyField(_animatedPreview); + + EditorGUILayout.Space(20); + // box + GUILayout.Box("", GUILayout.Width(_inspectorWidth - _externalMargin), GUILayout.Height(_rawSpectrumBoxHeight)); + _spectrumBoxPosition = GUILayoutUtility.GetLastRect().position; + _spectrumBoxSize = GUILayoutUtility.GetLastRect().size; + _spectrumBoxBottomY = _spectrumBoxPosition.y + _spectrumBoxSize.y; + _spectrumMaxColumnHeight = _spectrumBoxSize.y - 2 * _externalMargin; + Handles.BeginGUI(); + + // horizontal axis + Handles.color = Color.grey; + for (int i = 0; i <= _numberOfAxisSpectrum; i++) + { + _axisOrigin.x = _spectrumBoxPosition.x; + _axisOrigin.y = _spectrumBoxBottomY - i * (_spectrumBoxSize.y / _numberOfAxisSpectrum); + _axisDestination.x = _spectrumBoxPosition.x + _spectrumBoxSize.x; + _axisDestination.y = _axisOrigin.y; + Handles.DrawLine(_axisOrigin, _axisDestination); + } + + // y one label + _rect.x = _axisOrigin.x - 12; + _rect.y = _spectrumBoxBottomY - _spectrumBoxSize.y - 20; + _rect.width = 40; + _rect.height = 40; + EditorGUI.LabelField(_rect, "1", EditorStyles.boldLabel); + + float minX = _axisOrigin.x - 12; + float maxX = _axisOrigin.x + _spectrumBoxSize.x - 2; + + + float zeroX = minX; + float oneX = maxX; + + if (_animatedPreview.boolValue) + { + float currentTime = (float)EditorApplication.timeSinceStartup; + float normalizedTime = currentTime - Mathf.Floor(currentTime); + zeroX = maxX - MMMaths.Remap(_normalizedTime, 0f, 1f, _spectrumBoxPosition.x + _externalMargin, _spectrumBoxPosition.x + _spectrumBoxSize.x); + oneX = zeroX - 10; + } + + // zero label + _rect.x = zeroX; + _rect.y = _spectrumBoxBottomY - 20; + _rect.width = 40; + _rect.height = 40; + EditorGUI.LabelField(_rect, "0", EditorStyles.boldLabel); + + // one label + _rect.x = oneX; + _rect.y = _spectrumBoxBottomY - 20; + _rect.width = 40; + _rect.height = 40; + EditorGUI.LabelField(_rect, "1", EditorStyles.boldLabel); + + // level + if (Application.isPlaying) + { + _rect.x = _axisOrigin.x + _spectrumBoxSize.x - 40; + _rect.y = _spectrumBoxBottomY - _spectrumBoxSize.y - 40; + _rect.width = 40; + _rect.height = 40; + EditorGUI.LabelField(_rect, _currentLevel.floatValue.ToString("F3"), EditorStyles.boldLabel); + } + + // cube + _rect.x = _spectrumBoxPosition.x + _externalMargin / 4; + if (_duration.floatValue > 0f) + { + float boxSpectrumValue; + if (Application.isPlaying) + { + boxSpectrumValue = MMMaths.Remap(_radioSignal.GraphValue(_driverTime.floatValue), 0f, 1f, 0f, _spectrumBoxSize.y); + } + else + { + boxSpectrumValue = MMMaths.Remap(_radioSignal.GraphValue(_normalizedTime), 0f, 1f, 0f, _spectrumBoxSize.y); + } + _rect.y = _spectrumBoxBottomY - boxSpectrumValue - _externalMargin / 4; + } + else + { + _rect.y = _spectrumBoxBottomY; + } + _rect.width = _externalMargin / 2; + _rect.height = _externalMargin / 2; + EditorGUI.DrawRect(_rect, _spectrumBoxColor); + + // progress line + if (Application.isPlaying && !_animatedPreview.boolValue) + { + _rect.x = _spectrumBoxPosition.x + + MMMaths.Remap(_driverTime.floatValue, 0f, 1f, 0f, _spectrumBoxSize.x); + _rect.y = _spectrumBoxBottomY - _spectrumBoxSize.y; + _rect.width = 1; + _rect.height = _spectrumBoxSize.y; + EditorGUI.DrawRect(_rect, _spectrumBoxColor); + } + + for (int i = 1; i < _spectrumPointsCount; i++) + { + float xPosition = _spectrumBoxPosition.x + _externalMargin + MMMaths.Remap(i, 0, _spectrumPointsCount, 0f, _spectrumBoxSize.x - _externalMargin * 2); + float deltaBetweenXandXPrevious = (_spectrumBoxSize.x - _externalMargin * 2) / _spectrumPointsCount; + + float time = i * (1 / _spectrumPointsCount); + float timePrevious = (i - 1) * (1 / _spectrumPointsCount); + + if (_animatedPreview.boolValue) + { + if (Application.isPlaying) + { + time += _driverTime.floatValue; + timePrevious += _driverTime.floatValue; + } + else + { + time += (float)_normalizedTime; + timePrevious += (float)_normalizedTime; + } + if (time > _duration.floatValue) + { + time = 0f; + } + if (timePrevious > _duration.floatValue) + { + timePrevious = 0f; + } + } + + float t2 = Mathf.Pow(time, _bias.floatValue); + + float spectrumValue = MMMaths.Remap(_radioSignal.GraphValue(time), 0f, 1f, 0f, _spectrumBoxSize.y); + float spectrumValuePrevious = MMMaths.Remap(_radioSignal.GraphValue(timePrevious), 0f, 1f, 0f, _spectrumBoxSize.y); + + Handles.color = _spectrumColor; + _axisOrigin.x = xPosition - deltaBetweenXandXPrevious; + _axisOrigin.y = _spectrumBoxBottomY - spectrumValuePrevious; + _axisDestination.x = xPosition; + _axisDestination.y = _spectrumBoxBottomY - spectrumValue; + + var p1 = _axisOrigin; + var p2 = _axisDestination; + var thickness = 3; + Handles.DrawBezier(p1, p2, p1, p2, _spectrumColor, null, thickness); + } + + EditorGUILayout.Space(50); + + Handles.EndGUI(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalGeneratorEditor.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalGeneratorEditor.cs.meta new file mode 100644 index 0000000..e699e40 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMRadio/MMRadioSignalGeneratorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2cfef06e5c2aee4dad9fb668eddb176 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMReorderableList.meta b/Assets/Feel/MMTools/Core/Editor/MMReorderableList.meta new file mode 100644 index 0000000..668fdcd --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMReorderableList.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6f909c63670744543afced64613357cb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMReorderableList/MMReorderableList.cs b/Assets/Feel/MMTools/Core/Editor/MMReorderableList/MMReorderableList.cs new file mode 100644 index 0000000..60bcdd3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMReorderableList/MMReorderableList.cs @@ -0,0 +1,1932 @@ +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public class MMReorderableList { + + private const float ELEMENT_EDGE_TOP = 1; + private const float ELEMENT_EDGE_BOT = 3; + private const float ELEMENT_HEIGHT_OFFSET = ELEMENT_EDGE_TOP + ELEMENT_EDGE_BOT; + + private static int selectionHash = "ReorderableListSelection".GetHashCode(); + private static int dragAndDropHash = "ReorderableListDragAndDrop".GetHashCode(); + + public enum ElementDisplayType { + Auto, + Expandable, + SingleLine + } + + public delegate void DrawHeaderDelegate(Rect rect, GUIContent label); + public delegate void DrawFooterDelegate(Rect rect); + public delegate void DrawElementDelegate(Rect rect, SerializedProperty element, GUIContent label, bool selected, bool focused); + public delegate void ActionDelegate(MMReorderableList list); + public delegate bool ActionBoolDelegate(MMReorderableList list); + public delegate void AddDropdownDelegate(Rect buttonRect, MMReorderableList list); + public delegate Object DragDropReferenceDelegate(Object[] references, MMReorderableList list); + public delegate void DragDropAppendDelegate(Object reference, MMReorderableList list); + public delegate float GetElementHeightDelegate(SerializedProperty element); + public delegate float GetElementsHeightDelegate(MMReorderableList list); + public delegate string GetElementNameDelegate(SerializedProperty element); + + public event DrawHeaderDelegate drawHeaderCallback; + public event DrawFooterDelegate drawFooterCallback; + public event DrawElementDelegate drawElementCallback; + public event DrawElementDelegate drawElementBackgroundCallback; + public event GetElementHeightDelegate getElementHeightCallback; + public event GetElementsHeightDelegate getElementsHeightCallback; + public event GetElementNameDelegate getElementNameCallback; + public event DragDropReferenceDelegate onValidateDragAndDropCallback; + public event DragDropAppendDelegate onAppendDragDropCallback; + public event ActionDelegate onReorderCallback; + public event ActionDelegate onSelectCallback; + public event ActionDelegate onAddCallback; + public event AddDropdownDelegate onAddDropdownCallback; + public event ActionDelegate onRemoveCallback; + public event ActionDelegate onMouseUpCallback; + public event ActionBoolDelegate onCanRemoveCallback; + public event ActionDelegate onChangedCallback; + + public bool canAdd; + public bool canRemove; + public bool draggable; + public bool expandable; + public bool multipleSelection; + public GUIContent label; + public float headerHeight; + public float footerHeight; + public float slideEasing; + public float verticalSpacing; + public bool showDefaultBackground; + public ElementDisplayType elementDisplayType; + public string elementNameProperty; + public string elementNameOverride; + public Texture elementIcon; + + internal readonly int id; + + private SerializedProperty list; + private int controlID = -1; + private Rect[] elementRects; + private GUIContent elementLabel; + private ListSelection selection; + private SlideGroup slideGroup; + private int pressIndex; + + private float elementSpacing { + + get { return Mathf.Max(0, verticalSpacing - 2); } + } + + private bool dragging; + private float pressPosition; + private float dragPosition; + private int dragDirection; + private DragElement[] dragList; + private ListSelection beforeDragSelection; + + private int dragDropControlID = -1; + + public MMReorderableList(SerializedProperty list) + : this(list, true, true, true) { + } + + public MMReorderableList(SerializedProperty list, bool canAdd, bool canRemove, bool draggable) + : this(list, canAdd, canRemove, draggable, ElementDisplayType.Auto, null, null, null) { + } + + public MMReorderableList(SerializedProperty list, bool canAdd, bool canRemove, bool draggable, ElementDisplayType elementDisplayType, string elementNameProperty, Texture elementIcon) + : this(list, canAdd, canRemove, draggable, elementDisplayType, elementNameProperty, null, elementIcon) { + } + + public MMReorderableList(SerializedProperty list, bool canAdd, bool canRemove, bool draggable, ElementDisplayType elementDisplayType, string elementNameProperty, string elementNameOverride, Texture elementIcon) { + + if (list == null) { + + throw new MissingListExeption(); + } + else if (!list.isArray) { + + //check if user passed in a ReorderableArray, if so, that becomes the list object + + SerializedProperty array = list.FindPropertyRelative("array"); + + if (array == null || !array.isArray) { + + throw new InvalidListException(); + } + + this.list = array; + } + else { + + this.list = list; + } + + this.canAdd = canAdd; + this.canRemove = canRemove; + this.draggable = draggable; + this.elementDisplayType = elementDisplayType; + this.elementNameProperty = elementNameProperty; + this.elementNameOverride = elementNameOverride; + this.elementIcon = elementIcon; + + id = GetHashCode(); + list.isExpanded = true; + label = new GUIContent(list.displayName); + + #if UNITY_5_6_OR_NEWER + verticalSpacing = EditorGUIUtility.standardVerticalSpacing; + #else + verticalSpacing = 2f; + #endif + headerHeight = 18f; + footerHeight = 13f; + slideEasing = 0.15f; + expandable = true; + showDefaultBackground = true; + multipleSelection = true; + elementLabel = new GUIContent(); + + selection = new ListSelection(); + slideGroup = new SlideGroup(); + elementRects = new Rect[0]; + } + + // + // -- PROPERTIES -- + // + + public SerializedProperty List { + + get { return list; } + internal set { list = value; } + } + + public bool HasList { + + get { return list != null && list.isArray; } + } + + public int Length { + + get { return HasList ? list.arraySize : 0; } + } + + public int[] Selected { + + get { return selection.ToArray(); } + set { selection = new ListSelection(value); } + } + + public int Index { + + get { return selection.First; } + set { selection.Select(value); } + } + + public bool IsDragging { + + get { return dragging; } + } + + // + // -- PUBLIC -- + // + + public float GetHeight() { + + if (HasList) { + + return list.isExpanded ? headerHeight + GetElementsHeight() + footerHeight : headerHeight; + } + else { + + return EditorGUIUtility.singleLineHeight; + } + } + + public void DoLayoutList() { + + Rect position = EditorGUILayout.GetControlRect(false, GetHeight(), EditorStyles.largeLabel); + + DoList(EditorGUI.IndentedRect(position), label); + } + + public void DoList(Rect rect, GUIContent label) { + + int indent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + Rect headerRect = rect; + headerRect.height = headerHeight; + + if (!HasList) { + + DrawEmpty(headerRect, label.text + " is not an Array!", GUIStyle.none, EditorStyles.helpBox); + } + else { + + controlID = GUIUtility.GetControlID(selectionHash, FocusType.Keyboard, rect); + dragDropControlID = GUIUtility.GetControlID(dragAndDropHash, FocusType.Passive, rect); + + DrawHeader(headerRect, label); + + if (list.isExpanded) { + + Rect elementBackgroundRect = rect; + elementBackgroundRect.yMin = headerRect.yMax; + elementBackgroundRect.yMax = rect.yMax - footerHeight; + + Event evt = Event.current; + + if (selection.Length > 1) { + + if (evt.type == EventType.ContextClick && CanSelect(evt.mousePosition)) { + + HandleMultipleContextClick(evt); + } + } + + if (list.arraySize > 0) { + + //update element rects if not dragging. Dragging caches draw rects so no need to update + + if (!dragging) { + + UpdateElementRects(elementBackgroundRect, evt); + } + + if (elementRects.Length > 0) { + + Rect selectableRect = elementBackgroundRect; + selectableRect.yMin = elementRects[0].yMin; + selectableRect.yMax = elementRects[elementRects.Length - 1].yMax; + + HandlePreSelection(selectableRect, evt); + DrawElements(elementBackgroundRect, evt); + HandlePostSelection(selectableRect, evt); + } + } + else { + + DrawEmpty(elementBackgroundRect, "List is Empty", Style.boxBackground, Style.verticalLabel); + } + + Rect footerRect = rect; + footerRect.yMin = elementBackgroundRect.yMax; + footerRect.xMin = rect.xMax - 58; + + DrawFooter(footerRect); + } + } + + EditorGUI.indentLevel = indent; + } + + public SerializedProperty AddItem(T item) where T : Object { + + SerializedProperty property = AddItem(); + + if (property != null) { + + property.objectReferenceValue = item; + } + + return property; + } + + public SerializedProperty AddItem() { + + if (HasList) { + + list.arraySize++; + selection.Select(list.arraySize - 1); + + DispatchChange(); + + return list.GetArrayElementAtIndex(selection.Last); + } + else { + + throw new InvalidListException(); + } + } + + public void Remove(int[] selection) { + + System.Array.Sort(selection); + + int i = selection.Length; + + while (--i > -1) { + + RemoveItem(selection[i]); + } + } + + public void RemoveItem(int index) { + + if (HasList && index >= 0 && index < list.arraySize) { + + SerializedProperty property = list.GetArrayElementAtIndex(index); + + if (property.propertyType == SerializedPropertyType.ObjectReference && property.objectReferenceValue) { + + property.objectReferenceValue = null; + } + + list.DeleteArrayElementAtIndex(index); + selection.Remove(index); + + if (list.arraySize > 0) { + + selection.Select(Mathf.Max(0, index - 1)); + } + + DispatchChange(); + } + } + + public SerializedProperty GetItem(int index) { + + if (HasList && index >= 0 && index < list.arraySize) { + + return list.GetArrayElementAtIndex(index); + } + else { + + return null; + } + } + + public int IndexOf(SerializedProperty element) { + + if (element != null) { + + int i = list.arraySize; + + while (--i > -1) { + + if (SerializedProperty.EqualContents(element, list.GetArrayElementAtIndex(i))) { + + return i; + } + } + } + + return -1; + } + + public void GrabKeyboardFocus() { + + GUIUtility.keyboardControl = id; + } + + public bool HasKeyboardControl() { + + return GUIUtility.keyboardControl == id; + } + + public void ReleaseKeyboardFocus() { + + if (GUIUtility.keyboardControl == id) { + + GUIUtility.keyboardControl = 0; + } + } + + // + // -- PRIVATE -- + // + + private float GetElementsHeight() { + + if (getElementsHeightCallback != null) { + + return getElementsHeightCallback(this); + } + + int i, len = list.arraySize; + + if (len == 0) { + + return 28; + } + + float totalHeight = 0; + float spacing = elementSpacing; + + for (i = 0; i < len; i++) { + + totalHeight += GetElementHeight(list.GetArrayElementAtIndex(i)) + spacing; + } + + return totalHeight + 7 - spacing; + } + + private float GetElementHeight(SerializedProperty element) { + + if (getElementHeightCallback != null) { + + return getElementHeightCallback(element) + ELEMENT_HEIGHT_OFFSET; + } + else { + + return EditorGUI.GetPropertyHeight(element, GetElementLabel(element), IsElementExpandable(element)) + ELEMENT_HEIGHT_OFFSET; + } + } + + private Rect GetElementDrawRect(int index, Rect desiredRect) { + + if (slideEasing <= 0) { + + return desiredRect; + } + else { + + //lerp the drag easing toward slide easing, this creates a stronger easing at the start then slower at the end + //when dealing with large lists, we can + + return dragging ? slideGroup.GetRect(dragList[index].startIndex, desiredRect, slideEasing) : slideGroup.SetRect(index, desiredRect); + } + } + + /* + private Rect GetElementHeaderRect(SerializedProperty element, Rect elementRect) { + + Rect rect = elementRect; + rect.height = EditorGUIUtility.singleLineHeight + verticalSpacing; + + return rect; + } + */ + + private Rect GetElementRenderRect(SerializedProperty element, Rect elementRect) { + + float offset = draggable ? 20 : 5; + + Rect rect = elementRect; + rect.xMin += IsElementExpandable(element) ? offset + 10 : offset; + rect.xMax -= 5; + rect.yMin += ELEMENT_EDGE_TOP; + rect.yMax -= ELEMENT_EDGE_BOT; + + return rect; + } + + private void DrawHeader(Rect rect, GUIContent label) { + + if (showDefaultBackground && Event.current.type == EventType.Repaint) { + + Style.headerBackground.Draw(rect, false, false, false, false); + } + + HandleDragAndDrop(rect, Event.current); + + Rect titleRect = rect; + titleRect.xMin += 6f; + titleRect.xMax -= 55f; + titleRect.height -= 2f; + titleRect.y++; + + label = EditorGUI.BeginProperty(titleRect, label, list); + + if (drawHeaderCallback != null) { + + drawHeaderCallback(titleRect, label); + } + else if (expandable) { + + titleRect.xMin += 10; + + EditorGUI.BeginChangeCheck(); + + bool isExpanded = EditorGUI.Foldout(titleRect, list.isExpanded, label, true); + + if (EditorGUI.EndChangeCheck()) { + + list.isExpanded = isExpanded; + } + } + else { + + GUI.Label(titleRect, label, EditorStyles.label); + } + + EditorGUI.EndProperty(); + + if (elementDisplayType != ElementDisplayType.SingleLine) { + + Rect bRect1 = rect; + bRect1.xMin = rect.xMax - 25; + bRect1.xMax = rect.xMax - 5; + + if (GUI.Button(bRect1, Style.expandButton, Style.preButton)) { + + ExpandElements(true); + } + + Rect bRect2 = rect; + bRect2.xMin = bRect1.xMin - 20; + bRect2.xMax = bRect1.xMin; + + if (GUI.Button(bRect2, Style.collapseButton, Style.preButton)) { + + ExpandElements(false); + } + } + } + + private void ExpandElements(bool expand) { + + if (!list.isExpanded && expand) { + + list.isExpanded = true; + } + + for (int i = 0; i < list.arraySize; i++) { + + list.GetArrayElementAtIndex(i).isExpanded = expand; + } + } + + private void DrawEmpty(Rect rect, string label, GUIStyle backgroundStyle, GUIStyle labelStyle) { + + if (showDefaultBackground && Event.current.type == EventType.Repaint) { + + backgroundStyle.Draw(rect, false, false, false, false); + } + + EditorGUI.LabelField(rect, label, labelStyle); + } + + private void UpdateElementRects(Rect rect, Event evt) { + + //resize array if elements changed + + int i, len = list.arraySize; + + if (len != elementRects.Length) { + + System.Array.Resize(ref elementRects, len); + } + + if (evt.type == EventType.Repaint) { + + //start rect + + Rect elementRect = rect; + elementRect.yMin = elementRect.yMax = rect.yMin + 2; + + float spacing = elementSpacing; + + for (i = 0; i < len; i++) { + + SerializedProperty element = list.GetArrayElementAtIndex(i); + + //update the elementRects value for this object. Grab the last elementRect for startPosition + + elementRect.y = elementRect.yMax; + elementRect.height = GetElementHeight(element); + elementRects[i] = elementRect; + + elementRect.yMax += spacing; + } + } + } + + private void DrawElements(Rect rect, Event evt) { + + //draw list background + + if (showDefaultBackground && evt.type == EventType.Repaint) { + + Style.boxBackground.Draw(rect, false, false, false, false); + } + + //if not dragging, draw elements as usual + + if (!dragging) { + + int i, len = list.arraySize; + + for (i = 0; i < len; i++) { + + bool selected = selection.Contains(i); + + DrawElement(list.GetArrayElementAtIndex(i), GetElementDrawRect(i, elementRects[i]), selected, selected && GUIUtility.keyboardControl == controlID); + } + } + else if (evt.type == EventType.Repaint) { + + //draw dragging elements only when repainting + + int i, s, len = dragList.Length; + int sLen = selection.Length; + + //first, find the rects of the selected elements, we need to use them for overlap queries + + for (i = 0; i < sLen; i++) { + + DragElement element = dragList[i]; + + //update the element desiredRect if selected. Selected elements appear first in the dragList, so other elements later in iteration will have rects to compare + + element.desiredRect.y = dragPosition - element.dragOffset; + dragList[i] = element; + } + + //draw elements, start from the bottom of the list as first elements are the ones selected, so should be drawn last + + i = len; + + while (--i > -1) { + + DragElement element = dragList[i]; + + //draw dragging elements last as the loop is backwards + + if (element.selected) { + + DrawElement(element.property, element.desiredRect, true, true); + continue; + } + + //loop over selection and see what overlaps + //if dragging down we start from the bottom of the selection + //otherwise we start from the top. This helps to cover multiple selected objects + + Rect elementRect = element.rect; + int elementIndex = element.startIndex; + + int start = dragDirection > 0 ? sLen - 1 : 0; + int end = dragDirection > 0 ? -1 : sLen; + + for (s = start; s != end; s -= dragDirection) { + + DragElement selected = dragList[s]; + + if (selected.Overlaps(elementRect, elementIndex, dragDirection)) { + + elementRect.y -= selected.rect.height * dragDirection; + elementIndex += dragDirection; + } + } + + //draw the element with the new rect + + DrawElement(element.property, GetElementDrawRect(i, elementRect), false, false); + + //reassign the element back into the dragList + + element.desiredRect = elementRect; + dragList[i] = element; + } + } + } + + private void DrawElement(SerializedProperty element, Rect rect, bool selected, bool focused) { + + Event evt = Event.current; + + if (drawElementBackgroundCallback != null) { + + drawElementBackgroundCallback(rect, element, null, selected, focused); + } + else if (evt.type == EventType.Repaint) { + + Style.elementBackground.Draw(rect, false, selected, selected, focused); + } + + if (evt.type == EventType.Repaint && draggable) { + + Style.draggingHandle.Draw(new Rect(rect.x + 5, rect.y + 6, 10, rect.height - (rect.height - 6)), false, false, false, false); + } + + GUIContent label = GetElementLabel(element); + + Rect renderRect = GetElementRenderRect(element, rect); + + if (drawElementCallback != null) { + + drawElementCallback(renderRect, element, label, selected, focused); + } + else { + + EditorGUI.PropertyField(renderRect, element, label, true); + } + + //handle context click + + int controlId = GUIUtility.GetControlID(label, FocusType.Passive, rect); + + switch (evt.GetTypeForControl(controlId)) { + + case EventType.ContextClick: + + if (rect.Contains(evt.mousePosition)) { + + HandleContextClick(evt, element); + } + + break; + } + } + + private GUIContent GetElementLabel(SerializedProperty element) { + + string name; + + if (getElementNameCallback != null) { + + name = getElementNameCallback(element); + } + else { + + name = GetElementName(element, elementNameProperty, elementNameOverride); + } + + elementLabel.text = !string.IsNullOrEmpty(name) ? name : element.displayName; + elementLabel.tooltip = element.tooltip; + elementLabel.image = elementIcon; + + return elementLabel; + } + + private static string GetElementName(SerializedProperty element, string nameProperty, string nameOverride) { + + if (!string.IsNullOrEmpty(nameOverride)) { + + string path = element.propertyPath; + + if (path.EndsWith("]")) { + + int startIndex = path.LastIndexOf('[') + 1; + + return string.Concat(nameOverride, " ", path.Substring(startIndex, path.Length - startIndex - 1)); + } + + return nameOverride; + } + else if (string.IsNullOrEmpty(nameProperty)) { + + return null; + } + else if (element.propertyType == SerializedPropertyType.ObjectReference && nameProperty == "name") { + + return element.objectReferenceValue ? element.objectReferenceValue.name : null; + } + + SerializedProperty prop = element.FindPropertyRelative(nameProperty); + + if (prop != null) { + + switch (prop.propertyType) { + + case SerializedPropertyType.ObjectReference: + + return prop.objectReferenceValue ? prop.objectReferenceValue.name : null; + + case SerializedPropertyType.Enum: + + return prop.enumDisplayNames[prop.enumValueIndex]; + + case SerializedPropertyType.Integer: + case SerializedPropertyType.Character: + + return prop.intValue.ToString(); + + case SerializedPropertyType.LayerMask: + + return GetLayerMaskName(prop.intValue); + + case SerializedPropertyType.String: + + return prop.stringValue; + + case SerializedPropertyType.Float: + + return prop.floatValue.ToString(); + } + + return prop.displayName; + } + + return null; + } + + private static string GetLayerMaskName(int mask) { + + if (mask == 0) { + + return "Nothing"; + } + else if (mask < 0) { + + return "Everything"; + } + + string name = string.Empty; + int n = 0; + + for (int i = 0; i < 32; i++) { + + if (((1 << i) & mask) != 0) { + + if (n == 4) { + + return "Mixed ..."; + } + + name += (n > 0 ? ", " : string.Empty) + LayerMask.LayerToName(i); + n++; + } + } + + return name; + } + + private void DrawFooter(Rect rect) { + + if (drawFooterCallback != null) { + + drawFooterCallback(rect); + return; + } + + if (Event.current.type == EventType.Repaint) { + + Style.footerBackground.Draw(rect, false, false, false, false); + } + + Rect addRect = new Rect(rect.xMin + 4f, rect.y - 3f, 25f, 13f); + Rect subRect = new Rect(rect.xMax - 29f, rect.y - 3f, 25f, 13f); + + EditorGUI.BeginDisabledGroup(!canAdd); + + if (GUI.Button(addRect, onAddDropdownCallback != null ? Style.iconToolbarPlusMore : Style.iconToolbarPlus, Style.preButton)) { + + if (onAddDropdownCallback != null) { + + onAddDropdownCallback(addRect, this); + } + else if (onAddCallback != null) { + + onAddCallback(this); + } + else { + + AddItem(); + } + } + + EditorGUI.EndDisabledGroup(); + + EditorGUI.BeginDisabledGroup(!CanSelect(selection) || !canRemove || (onCanRemoveCallback != null && !onCanRemoveCallback(this))); + + if (GUI.Button(subRect, Style.iconToolbarMinus, Style.preButton)) { + + if (onRemoveCallback != null) { + + onRemoveCallback(this); + } + else { + + Remove(selection.ToArray()); + } + } + + EditorGUI.EndDisabledGroup(); + } + + private void DispatchChange() { + + if (onChangedCallback != null) { + + onChangedCallback(this); + } + } + + private void HandleContextClick(Event evt, SerializedProperty element) { + + selection.Select(IndexOf(element)); + + GenericMenu menu = new GenericMenu(); + + if (element.isInstantiatedPrefab) { + + menu.AddItem(new GUIContent("Revert " + GetElementLabel(element).text + " to Prefab"), false, selection.RevertValues, list); + menu.AddSeparator(string.Empty); + } + + menu.AddItem(new GUIContent("Duplicate Array Element"), false, HandleDuplicate, list); + menu.AddItem(new GUIContent("Delete Array Element"), false, HandleDelete, list); + menu.ShowAsContext(); + + evt.Use(); + } + + private void HandleMultipleContextClick(Event evt) { + + GenericMenu menu = new GenericMenu(); + + if (selection.CanRevert(list)) { + + menu.AddItem(new GUIContent("Revert Values to Prefab"), false, selection.RevertValues, list); + menu.AddSeparator(string.Empty); + } + + menu.AddItem(new GUIContent("Duplicate Array Elements"), false, HandleDuplicate, list); + menu.AddItem(new GUIContent("Delete Array Elements"), false, HandleDelete, list); + menu.ShowAsContext(); + + evt.Use(); + } + + private void HandleDelete(object userData) { + + selection.Delete(userData as SerializedProperty); + + DispatchChange(); + } + + private void HandleDuplicate(object userData) { + + selection.Duplicate(userData as SerializedProperty); + + DispatchChange(); + } + + private void HandleDragAndDrop(Rect rect, Event evt) { + + switch (evt.GetTypeForControl(dragDropControlID)) { + + case EventType.DragUpdated: + case EventType.DragPerform: + + if (GUI.enabled && rect.Contains(evt.mousePosition)) { + + Object[] objectReferences = DragAndDrop.objectReferences; + Object[] references = new Object[1]; + + bool acceptDrag = false; + + foreach (Object object1 in objectReferences) { + + references[0] = object1; + Object object2 = ValidateObjectDragAndDrop(references); + + if (object2 != null) { + + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + + if (evt.type == EventType.DragPerform) { + + if (onAppendDragDropCallback != null) { + + onAppendDragDropCallback(object2, this); + } + else { + + AppendDragAndDropValue(object2); + } + + acceptDrag = true; + DragAndDrop.activeControlID = 0; + } + else { + + DragAndDrop.activeControlID = dragDropControlID; + } + } + } + + if (acceptDrag) { + + GUI.changed = true; + DragAndDrop.AcceptDrag(); + } + } + + break; + + case EventType.DragExited: + + if (GUI.enabled) { + + HandleUtility.Repaint(); + } + + break; + } + } + + private Object ValidateObjectDragAndDrop(Object[] references) { + + if (onValidateDragAndDropCallback != null) { + + return onValidateDragAndDropCallback(references, this); + } + + return Internals.ValidateObjectDragAndDrop(references, list); + } + + private void AppendDragAndDropValue(Object obj) { + + Internals.AppendDragAndDropValue(obj, list); + + DispatchChange(); + } + + private void HandlePreSelection(Rect rect, Event evt) { + + if (evt.type == EventType.MouseDrag && draggable && GUIUtility.hotControl == controlID) { + + if (selection.Length > 0 && UpdateDragPosition(evt.mousePosition, rect, dragList)) { + + GUIUtility.keyboardControl = controlID; + dragging = true; + } + + evt.Use(); + } + + /* This is buggy. The reason for this is to allow selection and dragging of an element using the header, or top row (if any) + * The main issue here is determining whether the element has an "expandable" drop down arrow, which if it does, will capture the mouse event *without* the code below + * Because of property drawers and certain property types, it's impossible to know this automatically (without dirty reflection) + * So if the below code is active and we determine that the property is expandable but isn't actually. Then we'll accidently capture the mouse focus and prevent anything else from receiving it :( + * So for now, in order to drag or select a row, the user must select empty space on the row. Not a huge deal, and doesn't break functionality. + * What needs to happen is the drag event needs to occur independent of the event type. But that's messy too, as some controls have horizontal drag sliders :( + if (evt.type == EventType.MouseDown) { + + //check if we contain the mouse press + //we also need to check what has current focus. If nothing we can assume control + //if there's something, check if the header has been pressed if the element is expandable + //if we did press the header, then override the control + + if (rect.Contains(evt.mousePosition) && IsSelectionButton(evt)) { + + int index = GetSelectionIndex(evt.mousePosition); + + if (CanSelect(index)) { + + SerializedProperty element = list.GetArrayElementAtIndex(index); + + if (IsElementExpandable(element)) { + + Rect elementHeaderRect = GetElementHeaderRect(element, elementRects[index]); + Rect elementRenderRect = GetElementRenderRect(element, elementRects[index]); + + Rect elementExpandRect = elementHeaderRect; + elementExpandRect.xMin = elementRenderRect.xMin - 10; + elementExpandRect.xMax = elementRenderRect.xMin; + + if (elementHeaderRect.Contains(evt.mousePosition) && !elementExpandRect.Contains(evt.mousePosition)) { + + DoSelection(index, true, evt); + HandleUtility.Repaint(); + } + } + } + } + } + */ + } + + private void HandlePostSelection(Rect rect, Event evt) { + + switch (evt.GetTypeForControl(controlID)) { + + case EventType.MouseDown: + + if (rect.Contains(evt.mousePosition) && IsSelectionButton(evt)) { + + int index = GetSelectionIndex(evt.mousePosition); + + if (CanSelect(index)) { + + DoSelection(index, GUIUtility.keyboardControl == 0 || GUIUtility.keyboardControl == controlID || evt.button == 2, evt); + } + else { + + selection.Clear(); + } + + HandleUtility.Repaint(); + } + + break; + + case EventType.MouseUp: + + if (!draggable) { + + //select the single object if no selection modifier is being performed + + selection.SelectWhenNoAction(pressIndex, evt); + + if (onMouseUpCallback != null && IsPositionWithinElement(evt.mousePosition, selection.Last)) { + + onMouseUpCallback(this); + } + } + else if (GUIUtility.hotControl == controlID) { + + evt.Use(); + + if (dragging) { + + dragging = false; + + //move elements in list + //sort the drag list + + ReorderDraggedElements(dragList); + + //apply changes + + list.serializedObject.ApplyModifiedProperties(); + list.serializedObject.Update(); + + if (onReorderCallback != null) { + + onReorderCallback(this); + } + + DispatchChange(); + } + else { + + //if we didn't drag, then select the original pressed object + + selection.SelectWhenNoAction(pressIndex, evt); + + if (onMouseUpCallback != null) { + + onMouseUpCallback(this); + } + } + + GUIUtility.hotControl = 0; + } + + HandleUtility.Repaint(); + + break; + + case EventType.KeyDown: + + if (GUIUtility.keyboardControl == controlID) { + + if (evt.keyCode == KeyCode.DownArrow && !dragging) { + + selection.Select(Mathf.Min(selection.Last + 1, list.arraySize - 1)); + evt.Use(); + } + else if (evt.keyCode == KeyCode.UpArrow && !dragging) { + + selection.Select(Mathf.Max(selection.Last - 1, 0)); + evt.Use(); + } + else if (evt.keyCode == KeyCode.Escape && GUIUtility.hotControl == controlID) { + + GUIUtility.hotControl = 0; + + if (dragging) { + + dragging = false; + selection = beforeDragSelection; + } + + evt.Use(); + } + } + + break; + } + } + + private bool IsSelectionButton(Event evt) { + + return evt.button == 0 || evt.button == 2; + } + + private void DoSelection(int index, bool setKeyboardControl, Event evt) { + + //append selections based on action, this may be a additive (ctrl) or range (shift) selection + + if (multipleSelection) { + + selection.AppendWithAction(pressIndex = index, evt); + } + else { + + selection.Select(pressIndex = index); + } + + if (onSelectCallback != null) { + + onSelectCallback(this); + } + + if (draggable) { + + dragging = false; + dragPosition = pressPosition = evt.mousePosition.y; + dragList = GetDragList(dragPosition); + + beforeDragSelection = selection.Clone(); + + GUIUtility.hotControl = controlID; + } + + if (setKeyboardControl) { + + GUIUtility.keyboardControl = controlID; + } + + evt.Use(); + } + + private DragElement[] GetDragList(float dragPosition) { + + int i, len = list.arraySize; + + if (dragList == null) { + + dragList = new DragElement[len]; + } + else if (dragList.Length != len) { + + System.Array.Resize(ref dragList, len); + } + + for (i = 0; i < len; i++) { + + SerializedProperty property = list.GetArrayElementAtIndex(i); + Rect elementRect = elementRects[i]; + + DragElement dragElement = new DragElement() { + property = property, + dragOffset = dragPosition - elementRect.y, + rect = elementRect, + desiredRect = elementRect, + selected = selection.Contains(i), + startIndex = i + }; + + dragList[i] = dragElement; + } + + //finally, sort the dragList by selection, selected objects appear first in the list + //selection order is preserved as well + + System.Array.Sort(dragList, (a, b) => { + + if (b.selected) { + + return a.selected ? a.startIndex.CompareTo(b.startIndex) : 1; + } + else if (a.selected) { + + return b.selected ? b.startIndex.CompareTo(a.startIndex) : -1; + } + + return a.startIndex.CompareTo(b.startIndex); + }); + + return dragList; + } + + private bool UpdateDragPosition(Vector2 position, Rect bounds, DragElement[] dragList) { + + //find new drag position + + int startIndex = 0; + int endIndex = selection.Length - 1; + + float minOffset = dragList[startIndex].dragOffset; + float maxOffset = dragList[endIndex].rect.height - dragList[endIndex].dragOffset; + + dragPosition = Mathf.Clamp(position.y, bounds.yMin + minOffset, bounds.yMax - maxOffset); + + if (Mathf.Abs(dragPosition - pressPosition) > 1) { + + dragDirection = (int)Mathf.Sign(dragPosition - pressPosition); + return true; + } + + return false; + } + + private void ReorderDraggedElements(DragElement[] dragList) { + + //save the current expanded states on all elements. I don't see any other way to do this + //MoveArrayElement does not move the foldout states, so... fun. + + for (int i = 0; i < dragList.Length; i++) { + + dragList[i].RecordState(); + } + + //sort list based on positions + + System.Array.Sort(dragList, (a, b) => a.desiredRect.center.y.CompareTo(b.desiredRect.center.y)); + + selection.Sort((a, b) => { + + int d1 = GetDragIndexFromSelection(a); + int d2 = GetDragIndexFromSelection(b); + + return dragDirection > 0 ? d1.CompareTo(d2) : d2.CompareTo(d1); + }); + + //swap the selected elements in the List + + int s = selection.Length; + + while (--s > -1) { + + int newIndex = GetDragIndexFromSelection(selection[s]); + + selection[s] = newIndex; + + list.MoveArrayElement(dragList[newIndex].startIndex, newIndex); + } + + //restore expanded states on items + + for (int i = 0; i < dragList.Length; i++) { + + dragList[i].RestoreState(list.GetArrayElementAtIndex(i)); + } + } + + private int GetDragIndexFromSelection(int index) { + + return System.Array.FindIndex(dragList, t => t.startIndex == index); + } + + private int GetSelectionIndex(Vector2 position) { + + int i, len = elementRects.Length; + + for (i = 0; i < len; i++) { + + Rect rect = elementRects[i]; + + if (rect.Contains(position) || (i == 0 && position.y <= rect.yMin) || (i == len - 1 && position.y >= rect.yMax)) { + + return i; + } + } + + return -1; + } + + private bool CanSelect(ListSelection selection) { + + return selection.Length > 0 ? selection.All(s => CanSelect(s)) : false; + } + + private bool CanSelect(int index) { + + return index >= 0 && index < list.arraySize; + } + + private bool CanSelect(Vector2 position) { + + return selection.Length > 0 ? selection.Any(s => IsPositionWithinElement(position, s)) : false; + } + + private bool IsPositionWithinElement(Vector2 position, int index) { + + return CanSelect(index) ? elementRects[index].Contains(position) : false; + } + + private bool IsElementExpandable(SerializedProperty element) { + + switch (elementDisplayType) { + + case ElementDisplayType.Auto: + + return element.hasVisibleChildren && IsTypeExpandable(element.propertyType); + + case ElementDisplayType.Expandable: return true; + case ElementDisplayType.SingleLine: return false; + } + + return false; + } + + private bool IsTypeExpandable(SerializedPropertyType type) { + + switch (type) { + + case SerializedPropertyType.Generic: + case SerializedPropertyType.Vector4: + case SerializedPropertyType.Quaternion: + case SerializedPropertyType.ArraySize: + + return true; + + default: + + return false; + } + } + + // + // -- LIST STYLE -- + // + + static class Style { + + public static GUIContent iconToolbarPlus; + public static GUIContent iconToolbarPlusMore; + public static GUIContent iconToolbarMinus; + public static GUIStyle draggingHandle; + public static GUIStyle headerBackground; + public static GUIStyle footerBackground; + public static GUIStyle boxBackground; + public static GUIStyle preButton; + public static GUIStyle elementBackground; + public static GUIStyle verticalLabel; + public static GUIContent expandButton; + public static GUIContent collapseButton; + + static Style() { + + iconToolbarPlus = EditorGUIUtility.IconContent("Toolbar Plus", "Add to list"); + iconToolbarPlusMore = EditorGUIUtility.IconContent("Toolbar Plus More", "Choose to add to list"); + iconToolbarMinus = EditorGUIUtility.IconContent("Toolbar Minus", "Remove selection from list"); + draggingHandle = new GUIStyle("RL DragHandle"); + headerBackground = new GUIStyle("RL Header"); + footerBackground = new GUIStyle("RL Footer"); + elementBackground = new GUIStyle("RL Element"); + elementBackground.border = new RectOffset(2, 3, 2, 3); + verticalLabel = new GUIStyle(EditorStyles.label); + verticalLabel.alignment = TextAnchor.MiddleLeft; + verticalLabel.contentOffset = new Vector2(10, -3); + boxBackground = new GUIStyle("RL Background"); + boxBackground.border = new RectOffset(6, 3, 3, 6); + preButton = new GUIStyle("RL FooterButton"); + expandButton = EditorGUIUtility.IconContent("winbtn_win_max"); + collapseButton = EditorGUIUtility.IconContent("winbtn_win_min"); + } + } + + // + // -- DRAG ELEMENT -- + // + + struct DragElement { + + internal SerializedProperty property; + internal int startIndex; + internal float dragOffset; + internal bool selected; + internal Rect rect; + internal Rect desiredRect; + + private bool isExpanded; + private Dictionary states; + + internal bool Overlaps(Rect value, int index, int direction) { + + if (direction < 0 && index < startIndex) { + + return desiredRect.yMin < value.center.y; + } + else if (direction > 0 && index > startIndex) { + + return desiredRect.yMax > value.center.y; + } + + return false; + } + + internal void RecordState() { + + states = new Dictionary(); + isExpanded = property.isExpanded; + + Iterate(this, property, (DragElement e, SerializedProperty p, int index) => { e.states[index] = p.isExpanded; }); + } + + internal void RestoreState(SerializedProperty property) { + + property.isExpanded = isExpanded; + + Iterate(this, property, (DragElement e, SerializedProperty p, int index) => { p.isExpanded = e.states[index]; }); + } + + private static void Iterate(DragElement element, SerializedProperty property, System.Action action) { + + SerializedProperty copy = property.Copy(); + SerializedProperty end = copy.GetEndProperty(); + + int index = 0; + + while (copy.NextVisible(true) && !SerializedProperty.EqualContents(copy, end)) { + + if (copy.hasVisibleChildren) { + + action(element, copy, index); + index++; + } + } + } + } + + // + // -- SLIDE GROUP -- + // + + class SlideGroup { + + private Dictionary animIDs; + + public SlideGroup() { + + animIDs = new Dictionary(); + } + + public Rect GetRect(int id, Rect r, float easing) { + + if (Event.current.type != EventType.Repaint) { + + return r; + } + + if (!animIDs.ContainsKey(id)) { + + animIDs.Add(id, r); + return r; + } + else { + + Rect rect = animIDs[id]; + + if (rect.y != r.y) { + + float delta = r.y - rect.y; + float absDelta = Mathf.Abs(delta); + + //if the distance between current rect and target is too large, then move the element towards the target rect so it reaches the destination faster + + if (absDelta > (rect.height * 2)) { + + r.y = delta > 0 ? r.y - rect.height : r.y + rect.height; + } + else if (absDelta > 0.5) { + + r.y = Mathf.Lerp(rect.y, r.y, easing); + } + + animIDs[id] = r; + HandleUtility.Repaint(); + } + + return r; + } + } + + public Rect SetRect(int id, Rect rect) { + + if (animIDs.ContainsKey(id)) { + + animIDs[id] = rect; + } + else { + + animIDs.Add(id, rect); + } + + return rect; + } + } + + // + // -- SELECTION -- + // + + class ListSelection : IEnumerable { + + private List indexes; + + internal int? firstSelected; + + public ListSelection() { + + indexes = new List(); + } + + public ListSelection(int[] indexes) { + + this.indexes = new List(indexes); + } + + public int First { + + get { return indexes.Count > 0 ? indexes[0] : -1; } + } + + public int Last { + + get { return indexes.Count > 0 ? indexes[indexes.Count - 1] : -1; } + } + + public int Length { + + get { return indexes.Count; } + } + + public int this[int index] { + + get { return indexes[index]; } + set { + + int oldIndex = indexes[index]; + + indexes[index] = value; + + if (oldIndex == firstSelected) { + + firstSelected = value; + } + } + } + + public bool Contains(int index) { + + return indexes.Contains(index); + } + + public void Clear() { + + indexes.Clear(); + firstSelected = null; + } + + public void SelectWhenNoAction(int index, Event evt) { + + if (!EditorGUI.actionKey && !evt.shift) { + + Select(index); + } + } + + public void Select(int index) { + + indexes.Clear(); + indexes.Add(index); + + firstSelected = index; + } + + public void Remove(int index) { + + if (indexes.Contains(index)) { + + indexes.Remove(index); + } + } + + public void AppendWithAction(int index, Event evt) { + + if (EditorGUI.actionKey) { + + if (Contains(index)) { + + Remove(index); + } + else { + + Append(index); + firstSelected = index; + } + } + else if (evt.shift && indexes.Count > 0 && firstSelected.HasValue) { + + indexes.Clear(); + + AppendRange(firstSelected.Value, index); + } + else if (!Contains(index)) { + + Select(index); + } + } + + public void Sort() { + + if (indexes.Count > 0) { + + indexes.Sort(); + } + } + + public void Sort(System.Comparison comparison) { + + if (indexes.Count > 0) { + + indexes.Sort(comparison); + } + } + + public int[] ToArray() { + + return indexes.ToArray(); + } + + public ListSelection Clone() { + + ListSelection clone = new ListSelection(ToArray()); + clone.firstSelected = firstSelected; + + return clone; + } + + internal bool CanRevert(SerializedProperty list) { + + if (list.serializedObject.targetObjects.Length == 1) { + + for (int i = 0; i < Length; i++) { + + if (list.GetArrayElementAtIndex(this[i]).isInstantiatedPrefab) { + + return true; + } + } + } + + return false; + } + + internal void RevertValues(object userData) { + + SerializedProperty list = userData as SerializedProperty; + + for (int i = 0; i < Length; i++) { + + SerializedProperty property = list.GetArrayElementAtIndex(this[i]); + + if (property.isInstantiatedPrefab) { + + property.prefabOverride = false; + } + } + + list.serializedObject.ApplyModifiedProperties(); + list.serializedObject.Update(); + + HandleUtility.Repaint(); + } + + internal void Duplicate(SerializedProperty list) { + + int offset = 0; + + for (int i = 0; i < Length; i++) { + + this[i] += offset; + + list.GetArrayElementAtIndex(this[i]).DuplicateCommand(); + list.serializedObject.ApplyModifiedProperties(); + list.serializedObject.Update(); + + offset++; + } + + HandleUtility.Repaint(); + } + + internal void Delete(SerializedProperty list) { + + Sort(); + + int i = Length; + + while (--i > -1) { + + list.GetArrayElementAtIndex(this[i]).DeleteCommand(); + } + + Clear(); + + list.serializedObject.ApplyModifiedProperties(); + list.serializedObject.Update(); + + HandleUtility.Repaint(); + } + + private void Append(int index) { + + if (index >= 0 && !indexes.Contains(index)) { + + indexes.Add(index); + } + } + + private void AppendRange(int from, int to) { + + int dir = (int)Mathf.Sign(to - from); + + if (dir != 0) { + + for (int i = from; i != to; i += dir) { + + Append(i); + } + } + + Append(to); + } + + public IEnumerator GetEnumerator() { + + return ((IEnumerable)indexes).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() { + + return ((IEnumerable)indexes).GetEnumerator(); + } + } + + // + // -- EXCEPTIONS -- + // + + class InvalidListException : System.InvalidOperationException { + + public InvalidListException() : base("ReorderableList serializedProperty must be an array") { + } + } + + class MissingListExeption : System.ArgumentNullException { + + public MissingListExeption() : base("ReorderableList serializedProperty is null") { + } + } + + // + // -- INTERNAL -- + // + + static class Internals { + + private static MethodInfo dragDropValidation; + private static object[] dragDropValidationParams; + private static MethodInfo appendDragDrop; + private static object[] appendDragDropParams; + + static Internals() { + + dragDropValidation = System.Type.GetType("UnityEditor.EditorGUI, UnityEditor").GetMethod("ValidateObjectFieldAssignment", BindingFlags.NonPublic | BindingFlags.Static); + appendDragDrop = typeof(SerializedProperty).GetMethod("AppendFoldoutPPtrValue", BindingFlags.NonPublic | BindingFlags.Instance); + } + + internal static Object ValidateObjectDragAndDrop(Object[] references, SerializedProperty property) { + + #if UNITY_2017_1_OR_NEWER + dragDropValidationParams = GetParams(ref dragDropValidationParams, 4); + dragDropValidationParams[0] = references; + dragDropValidationParams[1] = null; + dragDropValidationParams[2] = property; + dragDropValidationParams[3] = 0; + #else + dragDropValidationParams = GetParams(ref dragDropValidationParams, 3); + dragDropValidationParams[0] = references; + dragDropValidationParams[1] = null; + dragDropValidationParams[2] = property; + #endif + return dragDropValidation.Invoke(null, dragDropValidationParams) as Object; + } + + internal static void AppendDragAndDropValue(Object obj, SerializedProperty list) { + + appendDragDropParams = GetParams(ref appendDragDropParams, 1); + appendDragDropParams[0] = obj; + appendDragDrop.Invoke(list, appendDragDropParams); + } + + private static object[] GetParams(ref object[] parameters, int count) { + + if (parameters == null) { + + parameters = new object[count]; + } + + return parameters; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMReorderableList/MMReorderableList.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMReorderableList/MMReorderableList.cs.meta new file mode 100644 index 0000000..4140791 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMReorderableList/MMReorderableList.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7524a33cc4881484f94d10e60833382b +timeCreated: 1434688391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMReorderableList/ReorderableDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMReorderableList/ReorderableDrawer.cs new file mode 100644 index 0000000..e42928c --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMReorderableList/ReorderableDrawer.cs @@ -0,0 +1,101 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMReorderableAttributeAttribute))] + public class ReorderableDrawer : PropertyDrawer { + + private static Dictionary lists = new Dictionary(); + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { + + MMReorderableList list = GetList(property, attribute as MMReorderableAttributeAttribute); + + return list != null ? list.GetHeight() : EditorGUIUtility.singleLineHeight; + } + + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { + + MMReorderableList list = GetList(property, attribute as MMReorderableAttributeAttribute); + + if (list != null) { + + list.DoList(EditorGUI.IndentedRect(position), label); + } + else { + + GUI.Label(position, "Array must extend from ReorderableArray", EditorStyles.label); + } + } + #endif + + public static int GetListId(SerializedProperty property) { + + if (property != null) { + + int h1 = property.serializedObject.targetObject.GetHashCode(); + int h2 = property.propertyPath.GetHashCode(); + + return (((h1 << 5) + h1) ^ h2); + } + + return 0; + } + + public static MMReorderableList GetList(SerializedProperty property) { + + return GetList(property, null, GetListId(property)); + } + + public static MMReorderableList GetList(SerializedProperty property, MMReorderableAttributeAttribute attrib) { + + return GetList(property, attrib, GetListId(property)); + } + + public static MMReorderableList GetList(SerializedProperty property, int id) { + + return GetList(property, null, id); + } + + public static MMReorderableList GetList(SerializedProperty property, MMReorderableAttributeAttribute attrib, int id) { + + if (property == null) { + + return null; + } + + MMReorderableList list = null; + SerializedProperty array = property.FindPropertyRelative("array"); + + if (array != null && array.isArray) { + + if (!lists.TryGetValue(id, out list)) { + + if (attrib != null) { + + Texture icon = !string.IsNullOrEmpty(attrib.elementIconPath) ? AssetDatabase.GetCachedIcon(attrib.elementIconPath) : null; + + MMReorderableList.ElementDisplayType displayType = attrib.singleLine ? MMReorderableList.ElementDisplayType.SingleLine : MMReorderableList.ElementDisplayType.Auto; + + list = new MMReorderableList(array, attrib.add, attrib.remove, attrib.draggable, displayType, attrib.elementNameProperty, attrib.elementNameOverride, icon); + } + else { + + list = new MMReorderableList(array, true, true, true); + } + + lists.Add(id, list); + } + else { + + list.List = array; + } + } + + return list; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMReorderableList/ReorderableDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMReorderableList/ReorderableDrawer.cs.meta new file mode 100644 index 0000000..7474b0c --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMReorderableList/ReorderableDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3b5cb2f0917b1f34f8aceb725a71bfe7 +timeCreated: 1491846866 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMSaveLoad.meta b/Assets/Feel/MMTools/Core/Editor/MMSaveLoad.meta new file mode 100644 index 0000000..e238523 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMSaveLoad.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e08c956b4cc7924ea038522f941bb9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMSaveLoad/MMSaveLoadMenu.cs b/Assets/Feel/MMTools/Core/Editor/MMSaveLoad/MMSaveLoadMenu.cs new file mode 100644 index 0000000..fabe3d2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMSaveLoad/MMSaveLoadMenu.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using UnityEditor; + +namespace MoreMountains.Tools +{ + /// + /// Adds a dedicated Tools menu into the top bar More Mountains entry to delete all saved data + /// + public static class MMSaveLoadMenu + { + [MenuItem("Tools/More Mountains/Delete all saved data",false,31)] + /// + /// Adds a menu item to reset all data saved by the MMSaveLoadManager. No turning back. + /// + private static void ResetAllSavedInventories() + { + MMSaveLoadManager.DeleteAllSaveFiles(); + Debug.LogFormat ("All Save Files Deleted"); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMSaveLoad/MMSaveLoadMenu.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMSaveLoad/MMSaveLoadMenu.cs.meta new file mode 100644 index 0000000..4ae73b5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMSaveLoad/MMSaveLoadMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c493dd563e694e040a426953b958e68e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMTween.meta b/Assets/Feel/MMTools/Core/Editor/MMTween.meta new file mode 100644 index 0000000..0401399 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMTween.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c261684060cd13546bb14fd96acb5bb7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MMTween/MMTweenTypeDrawer.cs b/Assets/Feel/MMTools/Core/Editor/MMTween/MMTweenTypeDrawer.cs new file mode 100644 index 0000000..52eb0d5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMTween/MMTweenTypeDrawer.cs @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Generic; +#if UNITY_EDITOR +using UnityEditor; +using UnityEditor.UIElements; +#endif +using UnityEngine; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(MMTweenType))] + public class MMTweenTypeDrawer : PropertyDrawer + { + protected const int _lineHeight = 20; + protected const int _lineMargin = 2; + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return _lineHeight * 2 + _lineMargin; + } + + #if UNITY_EDITOR + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var type = property.FindPropertyRelative("MMTweenDefinitionType"); + + EditorGUI.BeginProperty(position, label, property); + + position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); + + var definitionTypeRect = new Rect(position.x, position.y, position.width, _lineHeight); + var curveRect = new Rect(position.x, position.y + _lineHeight + _lineMargin, position.width, _lineHeight); + + EditorGUI.PropertyField(definitionTypeRect, property.FindPropertyRelative("MMTweenDefinitionType"), GUIContent.none); + if (type.enumValueIndex == 0) + { + EditorGUI.PropertyField(curveRect, property.FindPropertyRelative("MMTweenCurve"), GUIContent.none); + } + if (type.enumValueIndex == 1) + { + EditorGUI.PropertyField(curveRect, property.FindPropertyRelative("Curve"), GUIContent.none); + } + + EditorGUI.EndProperty(); + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MMTween/MMTweenTypeDrawer.cs.meta b/Assets/Feel/MMTools/Core/Editor/MMTween/MMTweenTypeDrawer.cs.meta new file mode 100644 index 0000000..8e519dd --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MMTween/MMTweenTypeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e445c5a23799c9d4b8fb61d6061570cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/Editor/MoreMountains.Tools.Editor.asmdef b/Assets/Feel/MMTools/Core/Editor/MoreMountains.Tools.Editor.asmdef new file mode 100644 index 0000000..a091439 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MoreMountains.Tools.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "MoreMountains.Tools.Editor", + "references": [ + "GUID:4a1cb1490dc4df8409b2580d6b44e75e" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [] +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/Editor/MoreMountains.Tools.Editor.asmdef.meta b/Assets/Feel/MMTools/Core/Editor/MoreMountains.Tools.Editor.asmdef.meta new file mode 100644 index 0000000..d1b15d7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/Editor/MoreMountains.Tools.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d9dbf313afb206f458581847ac758375 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes.meta b/Assets/Feel/MMTools/Core/MMAttributes.meta new file mode 100644 index 0000000..82b43a2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 35da110902fbc43f79f283baf2a738c6 +folderAsset: yes +timeCreated: 1459528287 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMBackgroundColorAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMBackgroundColorAttribute.cs new file mode 100644 index 0000000..0d03741 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMBackgroundColorAttribute.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + public enum MMBackgroundAttributeColor + { + Red, + Pink, + Orange, + Yellow, + Green, + Blue, + Violet, + White + } + + public class MMBackgroundColorAttribute : PropertyAttribute + { + public MMBackgroundAttributeColor Color; + + public MMBackgroundColorAttribute(MMBackgroundAttributeColor color = MMBackgroundAttributeColor.Yellow) + { + this.Color = color; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMBackgroundColorAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMBackgroundColorAttribute.cs.meta new file mode 100644 index 0000000..ed109c4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMBackgroundColorAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d940d484781c4040921ce29789b1943 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMColorAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMColorAttribute.cs new file mode 100644 index 0000000..09bfbbc --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMColorAttribute.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + public class MMColorAttribute : PropertyAttribute + { + public Color color; + + public MMColorAttribute(float red = 1, float green = 0, float blue = 0) + { + this.color = new Color(red, green, blue, 1); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMColorAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMColorAttribute.cs.meta new file mode 100644 index 0000000..e48021b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMColorAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44a39707cf7142b45a78bb9d0e5ebfa5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMConditionAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMConditionAttribute.cs new file mode 100644 index 0000000..d13fd7a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMConditionAttribute.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using System; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct, Inherited = true)] + public class MMConditionAttribute : PropertyAttribute + { + public string ConditionBoolean = ""; + public bool Hidden = false; + public bool Negative = false; + + public MMConditionAttribute(string conditionBoolean) + { + this.ConditionBoolean = conditionBoolean; + this.Hidden = false; + } + + public MMConditionAttribute(string conditionBoolean, bool hideInInspector) + { + this.ConditionBoolean = conditionBoolean; + this.Hidden = hideInInspector; + this.Negative = false; + } + + public MMConditionAttribute(string conditionBoolean, bool hideInInspector, bool negative) + { + this.ConditionBoolean = conditionBoolean; + this.Hidden = hideInInspector; + this.Negative = negative; + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMConditionAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMConditionAttribute.cs.meta new file mode 100644 index 0000000..a8c36b3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMConditionAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d99b1ef0840200a4ca8c98ee8b49e114 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandArgumentCountAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandArgumentCountAttribute.cs new file mode 100644 index 0000000..968eba7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandArgumentCountAttribute.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// An attribute to add to static methods to they can be called via the MMDebugMenu's command line + /// + [AttributeUsage(System.AttributeTargets.Method, AllowMultiple = false)] + public class MMDebugLogCommandArgumentCountAttribute : System.Attribute + { + public readonly int ArgumentCount; + + public MMDebugLogCommandArgumentCountAttribute(int argumentCount) + { + this.ArgumentCount = argumentCount; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandArgumentCountAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandArgumentCountAttribute.cs.meta new file mode 100644 index 0000000..5f1d7d6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandArgumentCountAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdec9bf9a59856c48a9bd8fe7caaedc7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandAttribute.cs new file mode 100644 index 0000000..854995d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandAttribute.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// An attribute to add to static methods to they can be called via the MMDebugMenu's command line + /// + [AttributeUsage(System.AttributeTargets.Method, AllowMultiple = false)] + public class MMDebugLogCommandAttribute : System.Attribute { } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandAttribute.cs.meta new file mode 100644 index 0000000..b153363 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMDebugLogCommandAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4de406fa905b7cd4586793dec9e9d93d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMDropdownAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMDropdownAttribute.cs new file mode 100644 index 0000000..2c1d3b1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMDropdownAttribute.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public class MMDropdownAttribute : PropertyAttribute + { + public readonly object[] DropdownValues; + + public MMDropdownAttribute(params object[] dropdownValues) + { + DropdownValues = dropdownValues; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMDropdownAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMDropdownAttribute.cs.meta new file mode 100644 index 0000000..98390d3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMDropdownAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42dea95f190fc574eb0ce3f815cb2200 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMEnumConditionAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMEnumConditionAttribute.cs new file mode 100644 index 0000000..c70965d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMEnumConditionAttribute.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using System.Collections; +using System; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + /// + /// An attribute to conditionnally hide fields based on the current selection in an enum. + /// Usage : [MMEnumCondition("rotationMode", (int)RotationMode.LookAtTarget, (int)RotationMode.RotateToAngles)] + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct, Inherited = true)] + public class MMEnumConditionAttribute : PropertyAttribute + { + public string ConditionEnum = ""; + public bool Hidden = false; + + BitArray bitArray = new BitArray(32); + public bool ContainsBitFlag(int enumValue) + { + return bitArray.Get(enumValue); + } + + public MMEnumConditionAttribute(string conditionBoolean, params int[] enumValues) + { + this.ConditionEnum = conditionBoolean; + this.Hidden = true; + + for (int i = 0; i < enumValues.Length; i++) + { + bitArray.Set(enumValues[i], true); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMEnumConditionAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMEnumConditionAttribute.cs.meta new file mode 100644 index 0000000..c89651c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMEnumConditionAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c44d260255c89244812b064b6bbb5ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMExecutionOrderAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMExecutionOrderAttribute.cs new file mode 100644 index 0000000..6a404dd --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMExecutionOrderAttribute.cs @@ -0,0 +1,157 @@ +using UnityEngine; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Add this attribute to a class and its Execution Order will be changed to the value specified in parameters + /// Usage : [ExecutionOrder(66)] + /// + public class MMExecutionOrderAttribute : Attribute + { + #if UNITY_EDITOR + /// the execution order you want for the class this attribute is applied to + public int ExecutionOrder = 0; + + protected static Dictionary _monoScripts; + protected static Type _executionOrderAttributeType; + protected static Assembly _typeAssembly; + protected static Type[] _assemblyTypes; + + /// + /// Attribute method + /// + /// + public MMExecutionOrderAttribute(int newExecutionOrder) + { + ExecutionOrder = newExecutionOrder; + } + + + /// + /// When Unity loads, modifies the execution orders of monos with an ExecutionOrder attribute, if needed + /// + [InitializeOnLoadMethod] + protected static void ModifyExecutionOrder() + { + Initialization(); + + FindExecutionOrderAttributes(); + + if (ExecutionOrderHasChanged()) + { + UpdateExecutionOrders(); + } + } + + /// + /// Initialization method + /// + protected static void Initialization() + { + _monoScripts = new Dictionary(); + _executionOrderAttributeType = typeof(MMExecutionOrderAttribute); + _typeAssembly = _executionOrderAttributeType.Assembly; + _assemblyTypes = _typeAssembly.GetTypes(); + } + + /// + /// Goes through all assembly types and stores execution order attributes when found + /// + protected static void FindExecutionOrderAttributes() + { + foreach (Type assemblyType in _assemblyTypes) + { + if (!HasExecutionOrderAttribute(assemblyType)) + { + continue; + } + + object[] attributes = assemblyType.GetCustomAttributes(_executionOrderAttributeType, false); + MMExecutionOrderAttribute attribute = attributes[0] as MMExecutionOrderAttribute; + + string asset = ""; + string[] guids = AssetDatabase.FindAssets(assemblyType.Name + " t:script"); + + if (guids.Length != 0) + { + foreach (string guid in guids) + { + string assetPath = AssetDatabase.GUIDToAssetPath(guid); + string filename = Path.GetFileNameWithoutExtension(assetPath); + if (filename == assemblyType.Name) + { + asset = guid; + break; + } + } + } + else + { + Debug.LogError("MMTools' ExecutionOrderAttribute : Can't change "+ assemblyType.Name + "'s execution order"); + return; + } + + MonoScript monoScript = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(asset)); + _monoScripts.Add(monoScript, attribute); + } + } + + /// + /// Returns true if the class in parameters has the ExecutionOrder attribute, false otherwise + /// + /// + /// + protected static bool HasExecutionOrderAttribute(Type assemblyType) + { + object[] attributes = assemblyType.GetCustomAttributes(_executionOrderAttributeType, false); + return (attributes.Length == 1); + } + + /// + /// Returns true if the execution order has changed since last time + /// + /// + protected static bool ExecutionOrderHasChanged() + { + bool executionOrderHasChanged = false; + foreach (KeyValuePair monoScript in _monoScripts) + { + if (monoScript.Key != null) + { + if (MonoImporter.GetExecutionOrder(monoScript.Key) != monoScript.Value.ExecutionOrder) + { + executionOrderHasChanged = true; + break; + } + } + } + return executionOrderHasChanged; + } + + /// + /// Updates the execution orders for all pairs found by FindExecutionOrderAttributes() + /// + protected static void UpdateExecutionOrders() + { + foreach (KeyValuePair monoScript in _monoScripts) + { + if (monoScript.Key != null) + { + if (MonoImporter.GetExecutionOrder(monoScript.Key) != monoScript.Value.ExecutionOrder) + { + MonoImporter.SetExecutionOrder(monoScript.Key, monoScript.Value.ExecutionOrder); + } + } + } + } + + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMExecutionOrderAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMExecutionOrderAttribute.cs.meta new file mode 100644 index 0000000..0a036d0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMExecutionOrderAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b9d2829e14d10b4ca64457e40710bf2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenAttribute.cs new file mode 100644 index 0000000..b8ee2d3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenAttribute.cs @@ -0,0 +1,9 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + public class MMHiddenAttribute : PropertyAttribute { } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenAttribute.cs.meta new file mode 100644 index 0000000..d102a86 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 171bddfe1b8d24a049ab93c4b4d2323d +timeCreated: 1456675987 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenPropertiesAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenPropertiesAttribute.cs new file mode 100644 index 0000000..031f1bf --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenPropertiesAttribute.cs @@ -0,0 +1,18 @@ +using System; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] + public class MMHiddenPropertiesAttribute : Attribute + { + public string[] PropertiesNames; + + public MMHiddenPropertiesAttribute(params string[] propertiesNames) + { + PropertiesNames = propertiesNames; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenPropertiesAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenPropertiesAttribute.cs.meta new file mode 100644 index 0000000..6988d34 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMHiddenPropertiesAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e10dd6620d1eaec43a30fad8fa6249bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMInformationAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMInformationAttribute.cs new file mode 100644 index 0000000..6d4febc --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMInformationAttribute.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + public class MMInformationAttribute : PropertyAttribute + { + public enum InformationType { Error, Info, None, Warning } + + #if UNITY_EDITOR + public string Message; + public MessageType Type; + public bool MessageAfterProperty; + + public MMInformationAttribute(string message, InformationType type, bool messageAfterProperty) + { + this.Message = message; + if (type==InformationType.Error) { this.Type = UnityEditor.MessageType.Error;} + if (type==InformationType.Info) { this.Type = UnityEditor.MessageType.Info;} + if (type==InformationType.Warning) { this.Type = UnityEditor.MessageType.Warning;} + if (type==InformationType.None) { this.Type = UnityEditor.MessageType.None;} + this.MessageAfterProperty = messageAfterProperty; + } + #else + public MMInformationAttribute(string message, InformationType type, bool messageAfterProperty) + { + + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMInformationAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMInformationAttribute.cs.meta new file mode 100644 index 0000000..a2e849f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMInformationAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a083e52b3b6964a0d88af5b74900af5e +timeCreated: 1459528299 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonAttribute.cs new file mode 100644 index 0000000..cd014c7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonAttribute.cs @@ -0,0 +1,56 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif +using System.Reflection; + +namespace MoreMountains.Tools +{ + [System.AttributeUsage(System.AttributeTargets.Field)] + public class MMInspectorButtonAttribute : PropertyAttribute + { + public readonly string MethodName; + + public MMInspectorButtonAttribute(string MethodName) + { + this.MethodName = MethodName; + } + } + + #if UNITY_EDITOR + [CustomPropertyDrawer(typeof(MMInspectorButtonAttribute))] + public class InspectorButtonPropertyDrawer : PropertyDrawer + { + private MethodInfo _eventMethodInfo = null; + + public override void OnGUI(Rect position, SerializedProperty prop, GUIContent label) + { + MMInspectorButtonAttribute inspectorButtonAttribute = (MMInspectorButtonAttribute)attribute; + + float buttonLength = position.width; + Rect buttonRect = new Rect(position.x, position.y, buttonLength, position.height); + GUI.skin.button.alignment = TextAnchor.MiddleLeft; + + if (GUI.Button(buttonRect, inspectorButtonAttribute.MethodName)) + { + System.Type eventOwnerType = prop.serializedObject.targetObject.GetType(); + string eventName = inspectorButtonAttribute.MethodName; + + if (_eventMethodInfo == null) + { + _eventMethodInfo = eventOwnerType.GetMethod(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + } + + if (_eventMethodInfo != null) + { + _eventMethodInfo.Invoke(prop.serializedObject.targetObject, null); + } + else + { + Debug.LogWarning(string.Format("InspectorButton: Unable to find method {0} in {1}", eventName, eventOwnerType)); + } + } + } + } + #endif +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonAttribute.cs.meta new file mode 100644 index 0000000..7ab47bc --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 325b5ef7494cead4fbd33a7e9c22c44d +timeCreated: 1490625668 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonBarAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonBarAttribute.cs new file mode 100644 index 0000000..dde2868 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonBarAttribute.cs @@ -0,0 +1,112 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor.UIElements; +using UnityEditor; +#endif +using System.Reflection; +using UnityEngine.UIElements; + +namespace MoreMountains.Tools +{ + [System.AttributeUsage(System.AttributeTargets.Field)] + public class MMInspectorButtonBarAttribute : PropertyAttribute + { + public string[] Labels { get; set; } + public string[] Methods{ get; set; } + public bool[] OnlyWhenPlaying{ get; set; } + public string[] UssClass{ get; set; } + + + public MMInspectorButtonBarAttribute(string[] labels, string[] methods, bool[] onlyWhenPlaying, string[] ussClass) + { + this.Labels = labels; + this.Methods = methods; + this.OnlyWhenPlaying = onlyWhenPlaying; + this.UssClass = ussClass; + } + } + + #if UNITY_EDITOR + [CustomPropertyDrawer(typeof(MMInspectorButtonBarAttribute))] + public class MMInspectorButtonBarPropertyDrawer : PropertyDrawer + { + private MethodInfo[] _eventMethodInfos = null; + + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + MMInspectorButtonBarAttribute inspectorButtonBarAttribute = (MMInspectorButtonBarAttribute)attribute; + System.Type eventOwnerType = property.serializedObject.targetObject.GetType(); + + // add our root + var root = new VisualElement(); + + // add toolbar + Toolbar moveToControls = new Toolbar(); + moveToControls.AddToClassList("mm-toolbar"); + + if (_eventMethodInfos == null) + { + _eventMethodInfos = new MethodInfo[inspectorButtonBarAttribute.Methods.Length]; + } + + // add each button + for (var i = 0; i < inspectorButtonBarAttribute.Labels.Length; i++) + { + var newButton = new ToolbarButton(); + newButton.text = inspectorButtonBarAttribute.Labels[i]; + newButton.style.flexGrow = 1; + + if (inspectorButtonBarAttribute.UssClass[i] != "") + { + newButton.AddToClassList(inspectorButtonBarAttribute.UssClass[i]); + } + + if (_eventMethodInfos[i] == null) + { + _eventMethodInfos[i] = eventOwnerType.GetMethod(inspectorButtonBarAttribute.Methods[i], BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + } + if (_eventMethodInfos[i] != null) + { + var i1 = i; + newButton.clicked += () => _eventMethodInfos[i1].Invoke(property.serializedObject.targetObject, null); + } + else + { + Debug.LogWarning(string.Format("InspectorButton: Unable to find method {0} in {1}", inspectorButtonBarAttribute.Methods[i], eventOwnerType)); + } + + if (inspectorButtonBarAttribute.OnlyWhenPlaying[i] && !Application.isPlaying) + { + newButton.SetEnabled(false); + } + + moveToControls.Add(newButton); + } + root.Add(moveToControls); + + return root; + /* + + if (GUI.Button(buttonRect, inspectorButtonBarAttribute.MethodName)) + { + System.Type eventOwnerType = prop.serializedObject.targetObject.GetType(); + string eventName = inspectorButtonBarAttribute.MethodName; + + if (_eventMethodInfo == null) + { + _eventMethodInfo = eventOwnerType.GetMethod(eventName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); + } + + if (_eventMethodInfo != null) + { + _eventMethodInfo.Invoke(prop.serializedObject.targetObject, null); + } + else + { + Debug.LogWarning(string.Format("InspectorButton: Unable to find method {0} in {1}", eventName, eventOwnerType)); + } + }*/ + } + } + #endif +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonBarAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonBarAttribute.cs.meta new file mode 100644 index 0000000..d4e54c8 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorButtonBarAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba5bf5d06e4a7ef4a8002f4444c4dab6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorGroupAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorGroupAttribute.cs new file mode 100644 index 0000000..89be754 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorGroupAttribute.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// An attribute used to group inspector fields under common dropdowns + /// Implementation inspired by Rodrigo Prinheiro's work, available at https://github.com/RodrigoPrinheiro/unityFoldoutAttribute + /// + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct, Inherited = true)] + public class MMInspectorGroupAttribute : PropertyAttribute + { + public string GroupName; + public bool GroupAllFieldsUntilNextGroupAttribute; + public int GroupColorIndex; + public bool ClosedByDefault; + + public MMInspectorGroupAttribute(string groupName, bool groupAllFieldsUntilNextGroupAttribute = false, int groupColorIndex = 24, bool closedByDefault = false) + { + if (groupColorIndex > 139) { groupColorIndex = 139; } + + this.GroupName = groupName; + this.GroupAllFieldsUntilNextGroupAttribute = groupAllFieldsUntilNextGroupAttribute; + this.GroupColorIndex = groupColorIndex; + this.ClosedByDefault = closedByDefault; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorGroupAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorGroupAttribute.cs.meta new file mode 100644 index 0000000..a15b323 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMInspectorGroupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59a1dca0105634a4db09372297afadbf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMMonoBehaviour.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMMonoBehaviour.cs new file mode 100644 index 0000000..153ed76 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMMonoBehaviour.cs @@ -0,0 +1,11 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public class MMMonoBehaviour : MonoBehaviour + { + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMMonoBehaviour.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMMonoBehaviour.cs.meta new file mode 100644 index 0000000..2c2edf5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMMonoBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 743d5178809b16b47a7cb50d29677882 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMNavMeshAreaMaskAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMNavMeshAreaMaskAttribute.cs new file mode 100644 index 0000000..2fe421e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMNavMeshAreaMaskAttribute.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + public class MMNavMeshAreaMaskAttribute : PropertyAttribute { } +} diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMNavMeshAreaMaskAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMNavMeshAreaMaskAttribute.cs.meta new file mode 100644 index 0000000..06e946d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMNavMeshAreaMaskAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: feb8bb2f278c6b047ab36f275dcaa126 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyAttribute.cs new file mode 100644 index 0000000..585c584 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyAttribute.cs @@ -0,0 +1,9 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + public class MMReadOnlyAttribute : PropertyAttribute { } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyAttribute.cs.meta new file mode 100644 index 0000000..7ec9134 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f54d7ad2fa8f4411e8cceb8d27f6e1ae +timeCreated: 1456675993 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyWhenPlayingAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyWhenPlayingAttribute.cs new file mode 100644 index 0000000..eba3895 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyWhenPlayingAttribute.cs @@ -0,0 +1,28 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + public class MMReadOnlyWhenPlayingAttribute : PropertyAttribute { } + + + #if UNITY_EDITOR + [CustomPropertyDrawer(typeof(MMReadOnlyWhenPlayingAttribute))] + public class ReadOnlyWhenPlayingAttributeDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + GUI.enabled = !Application.isPlaying; + EditorGUI.PropertyField(position, property, label, true); + GUI.enabled = true; + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label, true); + } + } + #endif +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyWhenPlayingAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyWhenPlayingAttribute.cs.meta new file mode 100644 index 0000000..665f1b1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMReadOnlyWhenPlayingAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e1e841ae422aba49bcc65672025dfa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintAttribute.cs new file mode 100644 index 0000000..b87493b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintAttribute.cs @@ -0,0 +1,10 @@ +using System; + +namespace MoreMountains.Tools +{ + [AttributeUsage(AttributeTargets.Class)] + public class MMRequiresConstantRepaintAttribute : Attribute + { + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintAttribute.cs.meta new file mode 100644 index 0000000..8dd6675 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca6eb3d6d3c09444ca79e5047b01e58c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintOnlyWhenPlayingAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintOnlyWhenPlayingAttribute.cs new file mode 100644 index 0000000..fcef7de --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintOnlyWhenPlayingAttribute.cs @@ -0,0 +1,10 @@ +using System; + +namespace MoreMountains.Tools +{ + [AttributeUsage(AttributeTargets.Class)] + public class MMRequiresConstantRepaintOnlyWhenPlayingAttribute : Attribute + { + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintOnlyWhenPlayingAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintOnlyWhenPlayingAttribute.cs.meta new file mode 100644 index 0000000..cbe2b04 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMRequiresConstantRepaintOnlyWhenPlayingAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c690b0b68e66a04d83df51f41d80650 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMVectorAttribute.cs b/Assets/Feel/MMTools/Core/MMAttributes/MMVectorAttribute.cs new file mode 100644 index 0000000..ba3cbf5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMVectorAttribute.cs @@ -0,0 +1,17 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + public class MMVectorAttribute : PropertyAttribute + { + public readonly string[] Labels; + + public MMVectorAttribute(params string[] labels) + { + Labels = labels; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAttributes/MMVectorAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMAttributes/MMVectorAttribute.cs.meta new file mode 100644 index 0000000..da16499 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAttributes/MMVectorAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e0c0838d8791ea4e8b901003c8639a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio.meta b/Assets/Feel/MMTools/Core/MMAudio.meta new file mode 100644 index 0000000..a66a771 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4549f2dce7c9c7b4c81cab5036b9f2d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer.meta b/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer.meta new file mode 100644 index 0000000..692acd7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f37c0bbfe26a0bf4082b2f19419b044e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer/MMAudioAnalyzer.cs b/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer/MMAudioAnalyzer.cs new file mode 100644 index 0000000..ec5e401 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer/MMAudioAnalyzer.cs @@ -0,0 +1,474 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Tools; +using System; +using UnityEngine.Events; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// A static class used to save / load peaks once they've been computed + /// + public static class PeaksSaver + { + public static float[] Peaks; + } + + /// + /// An event you can listen to that will get automatically triggered for every remapped beat + /// + public struct MMBeatEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(string name, float value); + static public void Trigger(string name, float value) + { + OnEvent?.Invoke(name, value); + } + } + + [Serializable] + public class Beat + { + public string Name = "Beat"; + public enum Modes { Raw, Normalized, BufferedRaw, BufferedNormalized, Amplitude, NormalizedAmplitude, AmplitudeBuffered, NormalizedAmplitudeBuffered } + // remapped will send beat events when a threshold is passed, live just updates the value with whatever value is reading right now + public enum BeatValueModes { Remapped, Live } + + public Modes Mode = Modes.BufferedNormalized; + public BeatValueModes BeatValueMode = BeatValueModes.Remapped; + + [MMEnumCondition("Mode", (int)Modes.Raw, (int)Modes.Normalized, (int)Modes.BufferedRaw, (int)Modes.BufferedNormalized)] + public Color BeatColor = Color.cyan; + public int BandID = 0; + public float Threshold = 0.5f; + public float MinimumTimeBetweenBeats = 0.25f; + + [MMEnumCondition("BeatValueMode", (int)BeatValueModes.Remapped)] + public float RemappedAttack = 0.05f; + [MMEnumCondition("BeatValueMode", (int)BeatValueModes.Remapped)] + public float RemappedDecay = 0.2f; + + [MMReadOnly] + public bool BeatThisFrame; + [MMReadOnly] + public float CurrentValue; + [HideInInspector] + public float _previousValue; + [HideInInspector] + public float _lastBeatAt; + [HideInInspector] + public float _lastBeatValue; + [HideInInspector] + public bool _initialized = false; + + public UnityEvent OnBeat; + + public void InitializeIfNeeded(int id, int bandID) + { + if (!_initialized) + { + Mode = Modes.Normalized; + BeatValueMode = BeatValueModes.Remapped; + Name = "Beat " + id; + BeatColor = MMColors.RandomColor(); + BandID = bandID; + Threshold = 0.3f + id * 0.02f; + if (Threshold > 0.6f) { Threshold -= 0.5f; } + Threshold = Threshold % 1f; + MinimumTimeBetweenBeats = 0.25f + id * 0.02f; + RemappedAttack = 0.05f + id * 0.01f; + RemappedDecay = 0.2f + id * 0.01f; + _initialized = true; + } + } + } + + /// + /// This component lets you pick an audio source (either global : the whole scene's audio, a unique source, or the + /// microphone), and will cut it into chunks that you can then use to emit beat events, that other objects can consume and act upon. + /// The sample interval is the frequency at which sound will be analyzed, the amount of spectrum samples will determine the + /// accuracy of the sampling, the window defines the method used to reduce leakage, and the number of bands + /// will determine in how many bands you want to cut the sound. The more bands, the more levers you'll have to play with afterwards. + /// In general, for all of these settings, higher values mean better quality and lower performance. The buffer speed determines how + /// fast buffered band levels readjust. + /// + [AddComponentMenu("More Mountains/Tools/Audio/MMAudioAnalyzer")] + public class MMAudioAnalyzer : MonoBehaviour + { + public enum Modes { Global, AudioSource, Microphone } + + [Header("Source")] + [MMInformation("This component lets you pick an audio source (either global : the whole scene's audio, a unique source, or the " + + "microphone), and will cut it into chunks that you can then use to emit beat events, that other objects can consume and act upon. " + + "The sample interval is the frequency at which sound will be analyzed, the amount of spectrum samples will determine the " + + "accuracy of the sampling, the window defines the method used to reduce leakage, and the number of bands " + + "will determine in how many bands you want to cut the sound. The more bands, the more levers you'll have to play with afterwards." + + "In general, for all of these settings, higher values mean better quality and lower performance. The buffer speed determines how " + + "fast buffered band levels readjust.", MoreMountains.Tools.MMInformationAttribute.InformationType.Info, false)] + [MMReadOnlyWhenPlaying] + public Modes Mode = Modes.Global; + [MMEnumCondition("Mode", (int)Modes.AudioSource)] + [MMReadOnlyWhenPlaying] + public AudioSource TargetAudioSource; + [MMEnumCondition("Mode", (int)Modes.Microphone)] + public int MicrophoneID = 0; + + [Header("Sampling")] + [MMReadOnlyWhenPlaying] + public float SampleInterval = 0.02f; + [MMDropdown(2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192)] + [MMReadOnlyWhenPlaying] + public int SpectrumSamples = 1024; + [MMReadOnlyWhenPlaying] + public FFTWindow Window = FFTWindow.Rectangular; + [Range(1, 64)] + [MMReadOnlyWhenPlaying] + public int NumberOfBands = 8; + public float BufferSpeed = 2f; + + [Header("Beat Events")] + public Beat[] Beats; + + [HideInInspector] + public float[] RawSpectrum; + + [HideInInspector] + public float[] BandLevels; + [HideInInspector] + public float[] BufferedBandLevels; + + [HideInInspector] + public float[] BandPeaks; + [HideInInspector] + public float[] LastPeaksAt; + + [HideInInspector] + public float[] NormalizedBandLevels; + [HideInInspector] + public float[] NormalizedBufferedBandLevels; + + [HideInInspector] + public float Amplitude; + [HideInInspector] + public float NormalizedAmplitude; + [HideInInspector] + public float BufferedAmplitude; + [HideInInspector] + public float NormalizedBufferedAmplitude; + [HideInInspector] + public bool Active = false; + [HideInInspector] + public bool PeaksPasted = false; + + protected const int _microphoneDuration = 5; + protected string _microphone; + protected float _microphoneStartedAt = 0f; + protected const float _microphoneDelay = 0.030f; + protected const float _microphoneFrequency = 24000f; + protected WaitForSeconds _sampleIntervalWaitForSeconds; + protected int _cachedNumberOfBands; + + public virtual void FindPeaks() + { + float time = 0f; + while (time < TargetAudioSource.clip.length) + { + TargetAudioSource.time = time; + TargetAudioSource.GetSpectrumData(RawSpectrum, 0, Window); + time += SampleInterval; + ComputeBandLevels(); + PeaksSaver.Peaks = BandPeaks; + } + } + + public virtual void PastePeaks() + { + BandPeaks = PeaksSaver.Peaks; + PeaksSaver.Peaks = null; + PeaksPasted = true; + } + + public virtual void ClearPeaks() + { + BandPeaks = null; + PeaksSaver.Peaks = null; + PeaksPasted = false; + } + + protected virtual void Awake() + { + Initialization(); + } + + public virtual void Initialization() + { + _cachedNumberOfBands = NumberOfBands; + RawSpectrum = new float[SpectrumSamples]; + BandLevels = new float[_cachedNumberOfBands]; + BufferedBandLevels = new float[_cachedNumberOfBands]; + + // we make sure our peaks match our bands + if ((BandPeaks == null) || (BandPeaks.Length == 0)) + { + BandPeaks = new float[_cachedNumberOfBands]; + PeaksPasted = false; + } + if (BandPeaks.Length != BandLevels.Length) + { + BandPeaks = new float[_cachedNumberOfBands]; + PeaksPasted = false; + } + LastPeaksAt = new float[_cachedNumberOfBands]; + NormalizedBandLevels = new float[_cachedNumberOfBands]; + NormalizedBufferedBandLevels = new float[_cachedNumberOfBands]; + + if ((Mode == Modes.AudioSource) && (TargetAudioSource == null)) + { + Debug.LogError(this.name + " : this MMAudioAnalyzer needs a target audio source to operate."); + return; + } + + if (Mode == Modes.Microphone) + { + #if !UNITY_WEBGL + GameObject audioSourceGo = new GameObject("Microphone"); + SceneManager.MoveGameObjectToScene(audioSourceGo, this.gameObject.scene); + audioSourceGo.transform.SetParent(this.gameObject.transform); + TargetAudioSource = audioSourceGo.AddComponent(); + //UNCOMMENT_MICROPHONE string _microphone = Microphone.devices[MicrophoneID].ToString(); + //UNCOMMENT_MICROPHONE TargetAudioSource.clip = Microphone.Start(_microphone, true, _microphoneDuration, (int)_microphoneFrequency); + //UNCOMMENT_MICROPHONE TargetAudioSource.Play(); + _microphoneStartedAt = Time.time; + #endif + } + + Active = true; + _sampleIntervalWaitForSeconds = new WaitForSeconds(SampleInterval); + StartCoroutine(Analyze()); + } + + protected virtual void Update() + { + HandleBuffer(); + ComputeAmplitudes(); + HandleBeats(); + } + + protected virtual IEnumerator Analyze() + { + while (true) + { + switch (Mode) + { + case Modes.AudioSource: + TargetAudioSource.GetSpectrumData(RawSpectrum, 0, Window); + break; + case Modes.Global: + AudioListener.GetSpectrumData(RawSpectrum, 0, Window); + break; + case Modes.Microphone: + #if !UNITY_WEBGL + int microphoneSamples = 0; + //UNCOMMENT_MICROPHONE microphoneSamples = Microphone.GetPosition(_microphone); + if (microphoneSamples / _microphoneFrequency > _microphoneDelay) + { + if (!TargetAudioSource.isPlaying) + { + TargetAudioSource.timeSamples = (int)(microphoneSamples - (_microphoneDelay * _microphoneFrequency)); + TargetAudioSource.Play(); + } + _microphoneStartedAt = Time.time; + } + AudioListener.GetSpectrumData(RawSpectrum, 0, Window); + #endif + break; + } + + ComputeBandLevels(); + yield return _sampleIntervalWaitForSeconds; + } + } + + protected virtual void HandleBuffer() + { + for (int i = 0; i < BandLevels.Length; i++) + { + BufferedBandLevels[i] = Mathf.Max(BufferedBandLevels[i] * Mathf.Exp(-BufferSpeed * Time.deltaTime), BandLevels[i]); + + NormalizedBandLevels[i] = BandLevels[i] / BandPeaks[i]; + NormalizedBufferedBandLevels[i] = BufferedBandLevels[i] / BandPeaks[i]; + } + } + + protected virtual void ComputeBandLevels() + { + float coefficient = Mathf.Log(RawSpectrum.Length); + int offset = 0; + for (int i = 0; i < BandLevels.Length; i++) + { + float savedSum = 0f; + float next = Mathf.Exp(coefficient / BandLevels.Length * (i + 1)); + float weight = 1f / (next - offset); + for (float sum = 0f; offset < next; offset++) + { + sum += RawSpectrum[offset]; + savedSum = sum; + } + BandLevels[i] = Mathf.Sqrt(weight * savedSum); + if (BandLevels[i] > BandPeaks[i]) + { + BandPeaks[i] = BandLevels[i]; + LastPeaksAt[i] = Time.time; + } + } + } + + protected virtual void ComputeAmplitudes() + { + Amplitude = 0f; + BufferedAmplitude = 0f; + NormalizedAmplitude = 0f; + NormalizedBufferedAmplitude = 0f; + for (int i = 0; i < _cachedNumberOfBands; i++) + { + Amplitude += BandLevels[i]; + BufferedAmplitude += BufferedBandLevels[i]; + NormalizedAmplitude += NormalizedBandLevels[i]; + NormalizedBufferedAmplitude += NormalizedBufferedBandLevels[i]; + } + Amplitude = Amplitude / _cachedNumberOfBands; + BufferedAmplitude = BufferedAmplitude / _cachedNumberOfBands; + NormalizedAmplitude = NormalizedAmplitude / _cachedNumberOfBands; + NormalizedBufferedAmplitude = NormalizedBufferedAmplitude / _cachedNumberOfBands; + } + + protected virtual void HandleBeats() + { + if (Beats.Length <= 0) + { + return; + } + + foreach (Beat beat in Beats) + { + float value = 0f; + beat.BeatThisFrame = false; + switch (beat.Mode) + { + case Beat.Modes.Amplitude: + value = Amplitude; + break; + case Beat.Modes.AmplitudeBuffered: + value = BufferedAmplitude; + break; + case Beat.Modes.BufferedNormalized: + value = NormalizedBufferedBandLevels[beat.BandID]; + break; + case Beat.Modes.BufferedRaw: + value = BufferedBandLevels[beat.BandID]; + break; + case Beat.Modes.Normalized: + value = NormalizedBandLevels[beat.BandID]; + break; + case Beat.Modes.NormalizedAmplitude: + value = NormalizedAmplitude; + break; + case Beat.Modes.NormalizedAmplitudeBuffered: + value = NormalizedBufferedAmplitude; + break; + case Beat.Modes.Raw: + value = BandLevels[beat.BandID]; + break; + } + + if (beat.BeatValueMode == Beat.BeatValueModes.Live) + { + beat.CurrentValue = value; + } + else + { + // if audio value went below the bias during this frame + if ((beat._previousValue > beat.Threshold) && (value <= beat.Threshold)) + { + // if minimum beat interval is reached + if (Time.time - beat._lastBeatAt > beat.MinimumTimeBetweenBeats) + { + OnBeat(beat, value); + } + } + + // if audio value went above the bias during this frame + if ((beat._previousValue <= beat.Threshold) && (value > beat.Threshold)) + { + // if minimum beat interval is reached + if (Time.time - beat._lastBeatAt > beat.MinimumTimeBetweenBeats) + { + OnBeat(beat, value); + } + } + + beat._previousValue = value; + } + } + } + + protected virtual void OnBeat(Beat beat, float rawValue) + { + beat._lastBeatAt = Time.time; + beat.BeatThisFrame = true; + if (beat.OnBeat != null) + { + beat.OnBeat.Invoke(); + } + MMBeatEvent.Trigger(beat.Name, beat.CurrentValue); + StartCoroutine(RemapBeat(beat)); + } + + protected virtual IEnumerator RemapBeat(Beat beat) + { + float remapStartedAt = Time.time; + + while (Time.time - remapStartedAt < beat.RemappedAttack + beat.RemappedDecay) + { + // attack + if (Time.time - remapStartedAt < beat.RemappedAttack) + { + beat.CurrentValue = Mathf.Lerp(0f, 1f, (Time.time - remapStartedAt) / beat.RemappedAttack); + } + if (Time.time - remapStartedAt > beat.RemappedAttack) + { + beat.CurrentValue = Mathf.Lerp(1f, 0f, (Time.time - remapStartedAt - beat.RemappedAttack) / beat.RemappedDecay); + } + yield return null; + } + beat.CurrentValue = 0f; + yield break; + } + + protected virtual void OnValidate() + { + if ((Beats == null) || (Beats.Length == 0)) + { + return; + } + + int bandCounter = 0; + for (int i = 0; i < Beats.Length; i++) + { + if (bandCounter >= _cachedNumberOfBands) + { + bandCounter = 0; + } + Beats[i].InitializeIfNeeded(i, bandCounter); + bandCounter++; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer/MMAudioAnalyzer.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer/MMAudioAnalyzer.cs.meta new file mode 100644 index 0000000..8a5c7a7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/AudioAnalyzer/MMAudioAnalyzer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5786831fccf809245bf95e1d459472ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents.meta b/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents.meta new file mode 100644 index 0000000..02c2fd4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 298ae8aa2e4ddf849b8cb560e5aa5efb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents/MMAudioEvents.cs b/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents/MMAudioEvents.cs new file mode 100644 index 0000000..142912e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents/MMAudioEvents.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; + +namespace MoreMountains.Tools +{ + public class MMAudioEvents + { + + } + + /// + /// A struct used to trigger sounds + /// + public struct MMSfxEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(AudioClip clipToPlay, AudioMixerGroup audioGroup = null, float volume = 1f, float pitch = 1f, int priority = 128); + static public void Trigger(AudioClip clipToPlay, AudioMixerGroup audioGroup = null, float volume = 1f, float pitch = 1f, int priority = 128) + { + OnEvent?.Invoke(clipToPlay, audioGroup, volume, pitch, priority); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents/MMAudioEvents.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents/MMAudioEvents.cs.meta new file mode 100644 index 0000000..43d425e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMAudioEvents/MMAudioEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72d51457cd4e8a5438095d1ce5ce5f6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener.meta b/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener.meta new file mode 100644 index 0000000..cdbfc12 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 034e3eb1df7d0af4bb6c2326534ca72f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener/MMAudioListener.cs b/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener/MMAudioListener.cs new file mode 100644 index 0000000..26d16d6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener/MMAudioListener.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A simple component that will ensure (if put on ALL audio listeners in your game) + /// that you never see a "There are two audio listeners in the scene" warning again. + /// + [RequireComponent(typeof(AudioListener))] + public class MMAudioListener : MonoBehaviour + { + protected AudioListener _audioListener; + protected AudioListener[] _otherListeners; + + /// + /// On enable, disables other listeners if found + /// + protected virtual void OnEnable() + { + _audioListener = this.gameObject.GetComponent(); + _otherListeners = FindObjectsOfType(typeof(AudioListener)) as AudioListener[]; + + foreach (AudioListener audioListener in _otherListeners) + { + if ((audioListener != null) && (audioListener != _audioListener) ) + { + audioListener.enabled = false; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener/MMAudioListener.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener/MMAudioListener.cs.meta new file mode 100644 index 0000000..fac3591 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMAudioListener/MMAudioListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e8aa3525151bb343b66b059b6095946 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist.meta b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist.meta new file mode 100644 index 0000000..42f012c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6a5a59d0755580a44ac9de2cae00eabf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylist.cs b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylist.cs new file mode 100644 index 0000000..7d79893 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylist.cs @@ -0,0 +1,891 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This class stores all the info related to items in a playlist + /// + + public struct MMPlaylistPlayEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel); + static public void Trigger(int channel) + { + OnEvent?.Invoke(channel); + } + } + + public struct MMPlaylistStopEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel); + static public void Trigger(int channel) + { + OnEvent?.Invoke(channel); + } + } + + public struct MMPlaylistPauseEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel); + static public void Trigger(int channel) + { + OnEvent?.Invoke(channel); + } + } + + public struct MMPlaylistPlayNextEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel); + static public void Trigger(int channel) + { + OnEvent?.Invoke(channel); + } + } + + public struct MMPlaylistPlayPreviousEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel); + static public void Trigger(int channel) + { + OnEvent?.Invoke(channel); + } + } + + public struct MMPlaylistPlayIndexEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel, int index); + static public void Trigger(int channel, int index) + { + OnEvent?.Invoke(channel, index); + } + } + + public struct MMPlaylistVolumeMultiplierEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel, float newVolumeMultiplier, bool applyVolumeMultiplierInstantly = false); + static public void Trigger(int channel, float newVolumeMultiplier, bool applyVolumeMultiplierInstantly = false) + { + OnEvent?.Invoke(channel, newVolumeMultiplier, applyVolumeMultiplierInstantly); + } + } + + public struct MMPlaylistPitchMultiplierEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel, float newPitchMultiplier, bool applyPitchMultiplierInstantly = false); + static public void Trigger(int channel, float newPitchMultiplier, bool applyPitchMultiplierInstantly = false) + { + OnEvent?.Invoke(channel, newPitchMultiplier, applyPitchMultiplierInstantly); + } + } + + public struct MMPlaylistChangeEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel, MMSMPlaylist newPlaylist, bool andPlay); + static public void Trigger(int channel, MMSMPlaylist newPlaylist, bool andPlay) + { + OnEvent?.Invoke(channel, newPlaylist, andPlay); + } + } + + public struct MMPlaylistNewSongStartedEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel); + static public void Trigger(int channel) + { + OnEvent?.Invoke(channel); + } + } + + [System.Serializable] + public class MMPlaylistSong + { + /// the audiosource that contains the audio clip we want to play + public AudioSource TargetAudioSource; + /// the min (when it's off) and max (when it's playing) volume for this source + [MMVector("Min", "Max")] + public Vector2 Volume = new Vector2(0f, 1f); + /// a random delay in seconds to apply, between its RMin and RMax + [MMVector("RMin", "RMax")] + public Vector2 InitialDelay = Vector2.zero; + /// a random crossfade duration (in seconds) to apply when transitioning to this song, between its RMin and RMax + [MMVector("RMin", "RMax")] + public Vector2 CrossFadeDuration = new Vector2(2f, 2f); + /// a random pitch to apply to this song, between its RMin and RMax + [MMVector("RMin", "RMax")] + public Vector2 Pitch = Vector2.one; + /// the stereo pan for this song + [Range(-1f, 1f)] + public float StereoPan = 0f; + /// the spatial blend for this song (0 is 2D, 1 is 3D) + [Range(0f, 1f)] + public float SpatialBlend = 0f; + /// whether this song should loop or not + public bool Loop = false; + /// whether this song is playing right now or not + [MMReadOnly] + public bool Playing = false; + /// whether this song is fading right now or not + [MMReadOnly] + public bool Fading = false; + + [MMHidden] + public bool _initialized; + + public virtual void Initialization() + { + if (_initialized) + { + return; + } + + this.Volume = new Vector2(0f, 1f); + this.InitialDelay = Vector2.zero; + this.CrossFadeDuration = new Vector2(2f, 2f); + this.Pitch = Vector2.one; + this.StereoPan = 0f; + this.SpatialBlend = 0f; + this.Loop = false; + this._initialized = true; + } + } + + /// + /// Use this class to play audiosources (usually background music but feel free to use that for anything) in sequence, with optional crossfade between songs + /// + [AddComponentMenu("More Mountains/Tools/Audio/MMPlaylist")] + [MMRequiresConstantRepaint] + public class MMPlaylist : MMMonoBehaviour + { + /// the possible states this playlist can be in + public enum PlaylistStates + { + Idle, + Playing, + Paused + } + + [MMInspectorGroup("Playlist Songs", true, 18)] + + /// the channel on which to broadcast orders for this playlist + [Tooltip("the channel on which to broadcast orders for this playlist")] + public int Channel = 0; + /// the songs that this playlist will play + [Tooltip("the songs that this playlist will play")] + public List Songs; + + [MMInspectorGroup("Settings", true, 13)] + + /// whether this should play in random order or not + [Tooltip("whether this should play in random order or not")] + public bool RandomOrder = false; + /// if this is true, random seed will be randomized by the system clock + [Tooltip("if this is true, random seed will be randomized by the system clock")] + [MMCondition("RandomOrder", true)] + public bool RandomizeOrderSeed = true; + /// whether this playlist should play and loop as a whole forever or not + [Tooltip("whether this playlist should play and loop as a whole forever or not")] + public bool Endless = true; + /// whether this playlist should auto play on start or not + [Tooltip("whether this playlist should auto play on start or not")] + public bool PlayOnStart = true; + /// a global volume multiplier to apply when playing a song + [Tooltip("a global volume multiplier to apply when playing a song")] + public float VolumeMultiplier = 1f; + /// if this is true, this playlist will automatically pause/resume OnApplicationPause, useful if you've prevented your game from running in the background + [Tooltip("if this is true, this playlist will automatically pause/resume OnApplicationPause, useful if you've prevented your game from running in the background")] + public bool AutoHandleApplicationPause = true; + + [MMInspectorGroup("Persistence", true, 32)] + /// if this is true, this playlist will persist from scene to scene + [Tooltip("if this is true, this playlist will persist from scene to scene")] + public bool Persistent = false; + /// if this is true, this singleton will auto detach if it finds itself parented on awake + [Tooltip("if this is true, this singleton will auto detach if it finds itself parented on awake")] + [MMCondition("Persistent", true)] + public bool AutomaticallyUnparentOnAwake = true; + + [MMInspectorGroup("Status", true, 14)] + + /// the current state of the playlist, debug display only + [Tooltip("the current state of the playlist, debug display only")] + [MMReadOnly] + public PlaylistStates DebugCurrentState = PlaylistStates.Idle; + /// the index we're currently playing + [Tooltip("the index we're currently playing")] + [MMReadOnly] + public int CurrentlyPlayingIndex = -1; + /// the name of the song that is currently playing + [Tooltip("the name of the song that is currently playing")] + [MMReadOnly] + public string CurrentSongName; + /// the current state of this playlist + [MMReadOnly] + public MMStateMachine PlaylistState; + + [MMInspectorGroup("Tests", true, 15)] + + /// a play test button + [MMInspectorButton("Play")] + public bool PlayButton; + /// a pause test button + [MMInspectorButton("Pause")] + public bool PauseButton; + /// a stop test button + [MMInspectorButton("Stop")] + public bool StopButton; + /// a next song test button + [MMInspectorButton("PlayNextSong")] + public bool NextButton; + /// the index of the song to play when pressing the PlayTargetSong button + [Tooltip("the index of the song to play when pressing the PlayTargetSong button")] + public int TargetSongIndex = 0; + /// a next song test button + [MMInspectorButton("PlayTargetSong")] + public bool TargetSongButton; + /// a next song test button + [MMInspectorButton("QueueTargetSong")] + public bool QueueTargetSongButton; + /// a next song test button + [MMInspectorButton("SetLoopTargetSong")] + public bool SetLoopTargetSongButton; + /// a next song test button + [MMInspectorButton("StopLoopTargetSong")] + public bool StopLoopTargetSongButton; + + protected int _songsPlayedSoFar = 0; + protected int _songsPlayedThisCycle = 0; + protected Coroutine _coroutine; + protected bool _shouldResumeOnApplicationPause = false; + public static bool HasInstance => _instance != null; + public static MMPlaylist Current => _instance; + protected static MMPlaylist _instance; + protected bool _enabled; + protected int _queuedSong = -1; + + /// + /// Singleton design pattern + /// + /// The instance. + public static MMPlaylist Instance + { + get + { + if (_instance == null) + { + _instance = FindObjectOfType (); + if (_instance == null) + { + GameObject obj = new GameObject (); + obj.name = typeof(MMPlaylist).Name + "_AutoCreated"; + _instance = obj.AddComponent (); + } + } + return _instance; + } + } + + /// + /// On awake, we check if there's already a copy of the object in the scene. If there's one, we destroy it. + /// + protected virtual void Awake () + { + InitializeSingleton(); + } + + /// + /// Initializes the singleton. + /// + protected virtual void InitializeSingleton() + { + if (!Application.isPlaying) + { + return; + } + + if (!Persistent) + { + return; + } + + if (AutomaticallyUnparentOnAwake) + { + this.transform.SetParent(null); + } + + if (_instance == null) + { + //If I am the first instance, make me the Singleton + _instance = this; + DontDestroyOnLoad (transform.gameObject); + _enabled = true; + } + else + { + //If a Singleton already exists and you find + //another reference in scene, destroy it! + if(this != _instance) + { + Destroy(this.gameObject); + } + } + } + + /// + /// On Start we initialize our playlist + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init we initialize our state machine and start playing if needed + /// + protected virtual void Initialization() + { + if (RandomOrder && RandomizeOrderSeed) + { + Random.InitState(System.Environment.TickCount); + } + _songsPlayedSoFar = 0; + PlaylistState = new MMStateMachine(this.gameObject, true); + ChangePlaylistState(PlaylistStates.Idle); + if (Songs.Count == 0) + { + return; + } + if (PlayOnStart) + { + PlayFirstSong(); + } + } + + protected virtual void ChangePlaylistState(PlaylistStates newState) + { + PlaylistState.ChangeState(newState); + DebugCurrentState = newState; + } + + /// + /// Picks and plays the first song + /// + protected virtual void PlayFirstSong() + { + _songsPlayedThisCycle = 0; + CurrentlyPlayingIndex = -1; + int newIndex = PickNextIndex(); + _coroutine = StartCoroutine(PlaySong(newIndex)); + } + + /// + /// Plays a new song in the playlist, and stops / fades the previous one + /// + /// + /// + protected virtual IEnumerator PlaySong(int index) + { + // if we don't have a song, we stop + if (Songs.Count == 0) + { + yield break; + } + + // if we've played all our songs, we stop + if (!Endless && (_songsPlayedThisCycle > Songs.Count)) + { + yield break; + } + + if (_coroutine != null) + { + StopCoroutine(_coroutine); + } + + // we stop our current song + if ((PlaylistState.CurrentState == PlaylistStates.Playing) + && (index >= 0 && index < Songs.Count) + && !Songs[index].TargetAudioSource.isPlaying) + { + StartCoroutine(Fade(CurrentlyPlayingIndex, + Random.Range(Songs[index].CrossFadeDuration.x, Songs[index].CrossFadeDuration.y), + Songs[CurrentlyPlayingIndex].Volume.y * VolumeMultiplier, + Songs[CurrentlyPlayingIndex].Volume.x * VolumeMultiplier, + true)); + } + + // we stop all other coroutines + if ((CurrentlyPlayingIndex >= 0) && (Songs.Count > CurrentlyPlayingIndex)) + { + foreach (MMPlaylistSong song in Songs) + { + if (song != Songs[CurrentlyPlayingIndex]) + { + song.Fading = false; + } + } + } + + if (index < 0 || index >= Songs.Count) + { + yield break; + } + + // initial delay + yield return MMCoroutine.WaitFor(Random.Range(Songs[index].InitialDelay.x, Songs[index].InitialDelay.y)); + + if (Songs[index].TargetAudioSource == null) + { + Debug.LogError(this.name + " : the playlist song you're trying to play is null"); + yield break; + } + + Songs[index].TargetAudioSource.pitch = Random.Range(Songs[index].Pitch.x, Songs[index].Pitch.y); + Songs[index].TargetAudioSource.panStereo = Songs[index].StereoPan; + Songs[index].TargetAudioSource.spatialBlend = Songs[index].SpatialBlend; + Songs[index].TargetAudioSource.loop = Songs[index].Loop; + + // fades the new song's volume + StartCoroutine(Fade(index, + Random.Range(Songs[index].CrossFadeDuration.x, Songs[index].CrossFadeDuration.y), + Songs[index].Volume.x * VolumeMultiplier, + Songs[index].Volume.y * VolumeMultiplier, + false)); + + // starts the new song + Songs[index].TargetAudioSource.Play(); + + // updates our state + CurrentSongName = Songs[index].TargetAudioSource.clip.name; + ChangePlaylistState(PlaylistStates.Playing); + Songs[index].Playing = true; + CurrentlyPlayingIndex = index; + _songsPlayedSoFar++; + _songsPlayedThisCycle++; + + while (Songs[index].TargetAudioSource.isPlaying || (PlaylistState.CurrentState == PlaylistStates.Paused) || _shouldResumeOnApplicationPause) + { + yield return null; + } + + if (PlaylistState.CurrentState != PlaylistStates.Playing) + { + yield break; + } + + if (_songsPlayedSoFar < Songs.Count) + { + _coroutine = StartCoroutine(PlaySong(PickNextIndex())); + } + else + { + if (Endless) + { + _coroutine = StartCoroutine(PlaySong(PickNextIndex())); + } + else + { + ChangePlaylistState(PlaylistStates.Idle); + } + } + } + + /// + /// Fades an audiosource in or out, optionnally stopping it at the end + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator Fade(int index, float duration, float initialVolume, float endVolume, bool stopAtTheEnd) + { + if (index < 0 || index >= Songs.Count) + { + yield break; + } + + float startTimestamp = Time.time; + float progress = 0f; + Songs[index].Fading = true; + + while ((Time.time - startTimestamp < duration) && (Songs[index].Fading)) + { + progress = MMMaths.Remap(Time.time - startTimestamp, 0f, duration, 0f, 1f); + Songs[index].TargetAudioSource.volume = Mathf.Lerp(initialVolume, endVolume, progress); + yield return null; + } + + Songs[index].TargetAudioSource.volume = endVolume; + + if (stopAtTheEnd) + { + Songs[index].TargetAudioSource.Stop(); + Songs[index].Playing = false; + Songs[index].Fading = false; + } + } + + /// + /// Picks the next song to play + /// + /// + protected virtual int PickNextIndex() + { + if (Songs.Count == 0) + { + return -1; + } + + if (_queuedSong != -1) + { + int newRequestedIndex = _queuedSong; + _queuedSong = -1; + return newRequestedIndex; + } + + int newIndex = CurrentlyPlayingIndex; + if (RandomOrder) + { + while (newIndex == CurrentlyPlayingIndex) + { + newIndex = Random.Range(0, Songs.Count); + } + } + else + { + newIndex = (CurrentlyPlayingIndex + 1) % Songs.Count; + } + + return newIndex; + } + /// + /// Picks the previous song to play + /// + /// + protected virtual int PickPreviousIndex() + { + if (Songs.Count == 0) + { + return -1; + } + + int newIndex = CurrentlyPlayingIndex; + if (RandomOrder) + { + while (newIndex == CurrentlyPlayingIndex) + { + newIndex = Random.Range(0, Songs.Count); + } + } + else + { + newIndex = (CurrentlyPlayingIndex - 1); + if (newIndex < 0) + { + newIndex = Songs.Count - 1; + } + } + + return newIndex; + } + + /// + /// Plays either the first song or resumes playing a paused one + /// + public virtual void Play() + { + switch (PlaylistState.CurrentState) + { + case PlaylistStates.Idle: + PlayFirstSong(); + break; + + case PlaylistStates.Paused: + Songs[CurrentlyPlayingIndex].TargetAudioSource.UnPause(); + ChangePlaylistState(PlaylistStates.Playing); + break; + + case PlaylistStates.Playing: + // do nothing + break; + } + } + + public virtual void PlayAtIndex(int songIndex) + { + _coroutine = StartCoroutine(PlaySong(songIndex)); + } + + public virtual void QueueSongAtIndex(int songIndex) + { + _queuedSong = songIndex; + } + + /// + /// Pauses the current song + /// + public virtual void Pause() + { + if (PlaylistState.CurrentState != PlaylistStates.Playing) + { + return; + } + + Songs[CurrentlyPlayingIndex].TargetAudioSource.Pause(); + ChangePlaylistState(PlaylistStates.Paused); + } + + /// + /// Stops the playlist + /// + public virtual void Stop() + { + if (PlaylistState.CurrentState != PlaylistStates.Playing) + { + return; + } + + Songs[CurrentlyPlayingIndex].TargetAudioSource.Stop(); + Songs[CurrentlyPlayingIndex].Playing = false; + Songs[CurrentlyPlayingIndex].Fading = false; + CurrentlyPlayingIndex = -1; + ChangePlaylistState(PlaylistStates.Idle); + } + + /// + /// Will change the current track loop status + /// + public virtual void SetLoop(bool loop) + { + Songs[CurrentlyPlayingIndex].TargetAudioSource.loop = loop; + } + + /// + /// Plays the next song in the playlist + /// + public virtual void PlayNextSong() + { + int newIndex = PickNextIndex(); + _coroutine = StartCoroutine(PlaySong(newIndex)); + } + + /// + /// Plays the previous song in the playlist + /// + public virtual void PlayPreviousSong() + { + int newIndex = PickPreviousIndex(); + _coroutine = StartCoroutine(PlaySong(newIndex)); + } + + protected virtual void PlayTargetSong() + { + int newIndex = Mathf.Clamp(TargetSongIndex, 0, Songs.Count - 1); + PlayAtIndex(newIndex); + } + + protected virtual void QueueTargetSong() + { + int newIndex = Mathf.Clamp(TargetSongIndex, 0, Songs.Count - 1); + QueueSongAtIndex(newIndex); + } + + protected virtual void SetLoopTargetSong() + { + SetLoop(true); + } + + protected virtual void StopLoopTargetSong() + { + SetLoop(false); + } + + protected virtual void OnPlayEvent(int channel) + { + if (channel != Channel) { return; } + Play(); + } + + protected virtual void OnPauseEvent(int channel) + { + if (channel != Channel) { return; } + Pause(); + } + + protected virtual void OnStopEvent(int channel) + { + if (channel != Channel) { return; } + Stop(); + } + + protected virtual void OnPlayNextEvent(int channel) + { + if (channel != Channel) { return; } + PlayNextSong(); + } + + protected virtual void OnPlayPreviousEvent(int channel) + { + if (channel != Channel) { return; } + PlayPreviousSong(); + } + + protected virtual void OnPlayIndexEvent(int channel, int index) + { + if (channel != Channel) { return; } + _coroutine = StartCoroutine(PlaySong(index)); + } + + protected virtual void OnMMPlaylistVolumeMultiplierEvent(int channel, float newVolumeMultiplier, bool applyVolumeMultiplierInstantly = false) + { + if (channel != Channel) { return; } + VolumeMultiplier = newVolumeMultiplier; + if (applyVolumeMultiplierInstantly) + { + Songs[CurrentlyPlayingIndex].TargetAudioSource.volume = Songs[CurrentlyPlayingIndex].Volume.y * VolumeMultiplier; + } + } + + /// + /// On enable, starts listening for playlist events + /// + protected virtual void OnEnable() + { + MMPlaylistPauseEvent.Register(OnPauseEvent); + MMPlaylistPlayEvent.Register(OnPlayEvent); + MMPlaylistPlayNextEvent.Register(OnPlayNextEvent); + MMPlaylistPlayPreviousEvent.Register(OnPlayPreviousEvent); + MMPlaylistStopEvent.Register(OnStopEvent); + MMPlaylistPlayIndexEvent.Register(OnPlayIndexEvent); + MMPlaylistVolumeMultiplierEvent.Register(OnMMPlaylistVolumeMultiplierEvent); + } + + /// + /// On disable, stops listening for playlist events + /// + protected virtual void OnDisable() + { + MMPlaylistPauseEvent.Unregister(OnPauseEvent); + MMPlaylistPlayEvent.Unregister(OnPlayEvent); + MMPlaylistPlayNextEvent.Unregister(OnPlayNextEvent); + MMPlaylistPlayPreviousEvent.Unregister(OnPlayPreviousEvent); + MMPlaylistStopEvent.Unregister(OnStopEvent); + MMPlaylistPlayIndexEvent.Unregister(OnPlayIndexEvent); + MMPlaylistVolumeMultiplierEvent.Unregister(OnMMPlaylistVolumeMultiplierEvent); + } + + protected bool _firstDeserialization = true; + protected int _listCount = 0; + + /// + /// On Validate, we check if our array has changed and if yes we initialize our new elements + /// + protected virtual void OnValidate() + { + if (_firstDeserialization) + { + if (Songs == null) + { + _listCount = 0; + _firstDeserialization = false; + } + else + { + _listCount = Songs.Count; + _firstDeserialization = false; + } + } + else + { + if (Songs.Count != _listCount) + { + if (Songs.Count > _listCount) + { + foreach(MMPlaylistSong song in Songs) + { + song.Initialization(); + } + } + _listCount = Songs.Count; + } + } + } + + /// + /// On ApplicationPause, we pause the playlist and resume it afterwards + /// + /// + protected virtual void OnApplicationPause(bool pauseStatus) + { + if (!AutoHandleApplicationPause) + { + return; + } + + if (pauseStatus && PlaylistState.CurrentState == PlaylistStates.Playing) + { + Pause(); + _shouldResumeOnApplicationPause = true; + } + + if (!pauseStatus && _shouldResumeOnApplicationPause) + { + _shouldResumeOnApplicationPause = false; + Play(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylist.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylist.cs.meta new file mode 100644 index 0000000..4ecc3bd --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylist.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b0a35f7d8f5b3443a41bb74a444220e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylistRemote.cs b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylistRemote.cs new file mode 100644 index 0000000..068b334 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylistRemote.cs @@ -0,0 +1,136 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class used to pilot a MMPlaylist + /// + [AddComponentMenu("More Mountains/Tools/Audio/MMPlaylistRemote")] + public class MMPlaylistRemote : MonoBehaviour + { + public int Channel = 0; + /// The track to play when calling PlaySelectedTrack + public int TrackNumber = 0; + + [Header("Triggers")] + /// if this is true, the selected track will be played on trigger enter (if you have a trigger collider on this) + public bool PlaySelectedTrackOnTriggerEnter = true; + /// if this is true, the selected track will be played on trigger exit (if you have a trigger collider on this) + public bool PlaySelectedTrackOnTriggerExit = false; + /// the tag to check for on trigger stuff + public string TriggerTag = "Player"; + + [Header("Test")] + /// a play test button + [MMInspectorButton("Play")] + public bool PlayButton; + /// a pause test button + [MMInspectorButton("Pause")] + public bool PauseButton; + /// a stop test button + [MMInspectorButton("Stop")] + public bool StopButton; + /// a next track test button + [MMInspectorButton("PlayNextTrack")] + public bool NextButton; + /// a selected track test button + [MMInspectorButton("PlaySelectedTrack")] + public bool SelectedTrackButton; + + /// + /// Plays the playlist + /// + public virtual void Play() + { + MMPlaylistPlayEvent.Trigger(Channel); + } + + /// + /// Pauses the current track + /// + public virtual void Pause() + { + MMPlaylistPauseEvent.Trigger(Channel); + } + + /// + /// Stops the playlist + /// + public virtual void Stop() + { + MMPlaylistStopEvent.Trigger(Channel); + } + + /// + /// Plays the next track in the playlist + /// + public virtual void PlayNextTrack() + { + MMPlaylistPlayNextEvent.Trigger(Channel); + } + + /// + /// Plays the track selected in the inspector + /// + public virtual void PlaySelectedTrack() + { + MMPlaylistPlayIndexEvent.Trigger(Channel, TrackNumber); + } + + /// + /// Plays the track set in parameters + /// + public virtual void PlayTrack(int trackIndex) + { + MMPlaylistPlayIndexEvent.Trigger(Channel, trackIndex); + } + + /// + /// On trigger enter, we play the selected track if needed + /// + /// + protected virtual void OnTriggerEnter(Collider collider) + { + if (PlaySelectedTrackOnTriggerEnter && (collider.CompareTag(TriggerTag))) + { + PlaySelectedTrack(); + } + } + + /// + /// On trigger exit, we play the selected track if needed + /// + protected virtual void OnTriggerExit(Collider collider) + { + if (PlaySelectedTrackOnTriggerExit && (collider.CompareTag(TriggerTag))) + { + PlaySelectedTrack(); + } + } + + /// + /// On trigger enter 2D, we play the selected track if needed + /// + /// + protected virtual void OnTriggerEnter2D(Collider2D collider) + { + if (PlaySelectedTrackOnTriggerEnter && (collider.CompareTag(TriggerTag))) + { + PlaySelectedTrack(); + } + } + + /// + /// On trigger exit 2D, we play the selected track if needed + /// + protected virtual void OnTriggerExit2D(Collider2D collider) + { + if (PlaySelectedTrackOnTriggerExit && (collider.CompareTag(TriggerTag))) + { + PlaySelectedTrack(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylistRemote.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylistRemote.cs.meta new file mode 100644 index 0000000..3d3c308 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMPlaylist/MMPlaylistRemote.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7511c4dccd4cbd54ab12529a4389e81c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist.meta new file mode 100644 index 0000000..559a236 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb288b5f3412c824798dab9dbb7c7a9a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylist.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylist.cs new file mode 100644 index 0000000..54d6177 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylist.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace MoreMountains.Tools +{ + /// + /// A definition of a song, a part of a MMSM Playlist + /// + [Serializable] + public class MMSMPlaylistSong + { + /// the name of the song, used only for organizational purposes in the inspector + [Tooltip("the name of the song, used only for organizational purposes in the inspector")] + public string Name; + /// the clip to play when this song plays + [Tooltip("the clip to play when this song plays")] + public AudioClip Clip; + /// the amount of time this song's been played + [Tooltip("the amount of time this song's been played")] + [MMReadOnly] + public int PlayCount; + /// the many options to control this song + [Tooltip("the many options to control this song")] + public MMSoundManagerPlayOptions Options; + + /// + /// On init, we reset our play count + /// + public virtual void Initialization() + { + PlayCount = 0; + } + } + + [CreateAssetMenu(menuName = "MoreMountains/Audio/MMSM Playlist")] + [Serializable] + public class MMSMPlaylist : ScriptableObject + { + public enum PlayModes { PlayForever, PlayOnce, PlayXTimes } + public enum PlayOrders { Normal, ReverseOrder, Random, RandomUnique } + + [Header("Play Modes")] + /// the sound manager track on which to play this playlist's songs + [Tooltip("the sound manager track on which to play this playlist's songs")] + public MMSoundManager.MMSoundManagerTracks Track = MMSoundManager.MMSoundManagerTracks.Music; + /// the order in which to play songs (top to bottom, bottom to top, random, or random while trying to maintain playcount across songs + [Tooltip("the order in which to play songs (top to bottom, bottom to top, random, or random while trying to maintain playcount across songs")] + public PlayOrders PlayOrder = PlayOrders.Normal; + /// if this is true, random seed will be randomized by the system clock + [Tooltip("if this is true, random seed will be randomized by the system clock")] + [MMEnumCondition("PlayOrder", (int)PlayOrders.Random, (int)PlayOrders.RandomUnique)] + public bool RandomizeOrderSeed = true; + /// whether to play this playlist forever, only once, or play songs until total playcount reaches MaxAmountOfPlays + [Tooltip("whether to play this playlist forever, only once, or play songs until total playcount reaches MaxAmountOfPlays")] + public PlayModes PlayMode = PlayModes.PlayForever; + /// when in PlayXTimes mode, the max amount of plays before this playlist ends + [Tooltip("when in PlayXTimes mode, the max amount of plays before this playlist ends")] + [MMEnumCondition("PlayMode", (int)PlayModes.PlayXTimes)] + public int MaxAmountOfPlays = 10; + /// a playlist to switch to when reaching the end of this playlist + [Tooltip("a playlist to switch to when reaching the end of this playlist")] + [MMEnumCondition("PlayMode",(int)PlayModes.PlayOnce, (int)PlayModes.PlayXTimes)] + public MMSMPlaylist NextPlaylist; + /// the list of songs to play on this playlist + [Tooltip("the list of songs to play on this playlist")] + public List Songs; + + [Header("Debug")] + /// the total number of times songs in this playlist have been played + [Tooltip("the total number of times songs in this playlist have been played ")] + [MMReadOnly] + public int PlayCount; + + protected List _randomUniqueCandidates; + + /// + /// On init, we initialize all our songs + /// + public virtual void Initialization() + { + PlayCount = 0; + _randomUniqueCandidates = new List(); + foreach (MMSMPlaylistSong song in Songs) + { + song.Initialization(); + } + } + + /// + /// Picks the index of the next song to play, returns the index of the song, or -2 if the end of the + /// playlist's been reached, and -1 if the player should go idle + /// + /// + /// + /// -2 : end of playlist + /// -1 : go to idle + /// 0+ : next index to play in the playlist + /// + public virtual int PickNextIndex(int direction, int currentSongIndex, ref int queuedSongIndex, bool bypassLoop) + { + int newIndex = currentSongIndex; + + if (Songs.Count == 0) + { + return -1; + } + + if (queuedSongIndex != -1) + { + int newRequestedIndex = queuedSongIndex; + queuedSongIndex = -1; + return newRequestedIndex; + } + + if ((PlayCount >= Songs.Count) && (PlayMode == PlayModes.PlayOnce)) + { + return -2; + } + + if ((PlayMode == PlayModes.PlayXTimes) && (PlayCount >= MaxAmountOfPlays)) + { + return -2; + } + + if ((currentSongIndex >= 0) && (currentSongIndex < Songs.Count) && Songs[currentSongIndex].Options.Loop && !bypassLoop) + { + return currentSongIndex; + } + + switch (PlayOrder) + { + case PlayOrders.Random: + while (newIndex == currentSongIndex) + { + newIndex = Random.Range(0, Songs.Count); + } + return newIndex; + + case PlayOrders.RandomUnique: + + bool allPlayed = true; + int lowestPlayCount = int.MaxValue; + _randomUniqueCandidates.Clear(); + + for (int i = 0; i < Songs.Count; i++) + { + if (Songs[i].PlayCount <= lowestPlayCount && i != currentSongIndex) + { + allPlayed = false; + lowestPlayCount = Songs[i].PlayCount; + _randomUniqueCandidates.Add(i); + } + } + + if (allPlayed) + { + while (newIndex == currentSongIndex) + { + newIndex = Random.Range(0, Songs.Count); + } + } + else + { + int random = Random.Range(0, _randomUniqueCandidates.Count); + + newIndex = _randomUniqueCandidates[random]; + } + + return newIndex; + + case PlayOrders.Normal: + break; + + case PlayOrders.ReverseOrder: + direction = -1; + break; + } + + if (direction > 0) + { + newIndex = (currentSongIndex + 1) % Songs.Count; + } + else + { + newIndex = (currentSongIndex - 1); + if (newIndex < 0) + { + newIndex = Songs.Count - 1; + } + } + + return newIndex; + } + + /// + /// Resets the playlist's play count and the playcount of all songs + /// + public virtual void ResetPlayCount() + { + PlayCount = 0; + foreach (MMSMPlaylistSong song in Songs) + { + song.PlayCount = 0; + } + } + + /// + /// On Validate we initialize our options + /// + protected virtual void OnValidate() + { + foreach (MMSMPlaylistSong song in Songs) + { + if (!song.Options.Initialized) + { + song.Options = MMSoundManagerPlayOptions.Default; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylist.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylist.cs.meta new file mode 100644 index 0000000..566e721 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylist.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc7924747b6dade48ac9a15d72b5176b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylistManager.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylistManager.cs new file mode 100644 index 0000000..3906534 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylistManager.cs @@ -0,0 +1,879 @@ +using System; +using UnityEngine; +using UnityEngine.Serialization; +using Random = UnityEngine.Random; + +namespace MoreMountains.Tools +{ + public class MMSMPlaylistManager : MMMonoBehaviour + { + /// the possible states this playlist can be in + public enum PlaylistManagerStates + { + Idle, + Playing, + Paused + } + + [MMInspectorGroup("Settings", true, 18)] + /// the channel used to target this playlist manager by playlist remote or playlist feedbacks + [Tooltip("the channel used to target this playlist manager by playlist remote or playlist feedbacks")] + public int Channel = 0; + /// the current playlist this manager will play + [Tooltip("the current playlist this manager will play")] + public MMSMPlaylist Playlist; + /// whether this playlist manager should auto play on start or not + [Tooltip("whether this playlist manager should auto play on start or not")] + public bool PlayOnStart = false; + /// a global volume multiplier to apply when playing a song + [Tooltip("a global volume multiplier to apply when playing a song")] + [Range(0f,1f)] + public float VolumeMultiplier = 1f; + /// a pitch multiplier to apply to all songs when playing them + [Tooltip("a pitch multiplier to apply to all songs when playing them")] + [Range(0f,20f)] + public float PitchMultiplier = 1f; + /// if this is true, this playlist manager will persist from scene to scene and will keep playing + [Tooltip("if this is true, this playlist manager will persist from scene to scene and will keep playing")] + public bool Persistent = false; + /// if this is true, this singleton will auto detach if it finds itself parented on awake + [Tooltip("if this is true, this singleton will auto detach if it finds itself parented on awake")] + [MMCondition("Persistent", true)] + public bool AutomaticallyUnparentOnAwake = true; + /// if this is true, this playlist will automatically pause/resume OnApplicationPause, useful if you've prevented your game from running in the background + [Tooltip("if this is true, this playlist will automatically pause/resume OnApplicationPause, useful if you've prevented your game from running in the background")] + public bool AutoHandleApplicationPause = true; + + [MMInspectorGroup("Fade", true, 12)] + /// whether or not sounds should fade in when they start playing + [Tooltip("whether or not sounds should fade in when they start playing")] + public bool FadeIn; + /// whether or not sounds should fade out when they stop playing + [Tooltip("whether or not sounds should fade out when they stop playing")] + public bool FadeOut; + /// the duration of the fade, in seconds + [Tooltip("the duration of the fade, in seconds")] + public float FadeDuration = 1f; + /// the tween to use when fading the sound + [Tooltip("the tween to use when fading the sound")] + public MMTweenType FadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + + [MMInspectorGroup("Time", true, 20)] + /// whether or not the playlist manager should have its pitch multiplier value driven by the current timescale. If set to true, songs would appear to slow down when time is slowed down, and to speed up when time scale is higher than normal + [Tooltip("whether or not the playlist manager should have its pitch multiplier value driven by the current timescale. If set to true, songs would appear to slow down when time is slowed down, and to speed up when time scale is higher than normal")] + public bool BindPitchToTimeScale = false; + /// the values to remap timescale from (min and max) - when timescale is equal to TimescaleRemapFrom.x, the pitch multiplier will be TimescaleRemapTo.x + [Tooltip("the values to remap timescale from (min and max) - when timescale is equal to TimescaleRemapFrom.x, the pitch multiplier will be TimescaleRemapTo.x")] + [MMCondition("BindPitchToTimeScale", true)] + public Vector2 TimescaleRemapFrom = new Vector2(0f,2f); + /// the values to remap timescale to (min and max) - when timescale is equal to TimescaleRemapFrom.x, the pitch multiplier will be TimescaleRemapTo.x + [Tooltip("the values to remap timescale to (min and max) - when timescale is equal to TimescaleRemapFrom.x, the pitch multiplier will be TimescaleRemapTo.x")] + [MMCondition("BindPitchToTimeScale", true)] + public Vector2 TimescaleRemapTo = new Vector2(0.8f,1.2f); + + [MMInspectorGroup("Status", true, 14)] + /// the current state of the playlist, debug display only + [Tooltip("the current state of the playlist, debug display only")] + [MMReadOnly] + public PlaylistManagerStates DebugCurrentManagerState = PlaylistManagerStates.Idle; + /// the index we're currently playing + [Tooltip("the index we're currently playing")] + [MMReadOnly] + public int CurrentSongIndex = -1; + /// the name of the song that is currently playing + [Tooltip("the name of the song that is currently playing")] + [MMReadOnly] + public string CurrentSongName; + /// the current state of this playlist + [MMReadOnly] + public MMStateMachine PlaylistManagerState; + + /// the time of the currently playing song + [Tooltip("the time of the currently playing song")] + [MMReadOnly] + public float CurrentTime; + /// the time (in seconds) left on the song currently playing + [Tooltip("the time (in seconds) left on the song currently playing")] + [MMReadOnly] + public float CurrentTimeLeft; + /// the total duration of the song currently playing + [Tooltip("the total duration of the song currently playing")] + [MMReadOnly] + public float CurrentClipDuration; + /// the current normalized progress of the song currently playing + [Tooltip("the current normalized progress of the song currently playing")] + [Range(0f, 1f)] + public float CurrentProgress = 0; + + [MMInspectorGroup("Test Controls", true, 15)] + /// a play test button + [MMInspectorButton("Play")] + public bool PlayButton; + /// a stop test button + [MMInspectorButton("Stop")] + public bool StopButton; + /// a pause test button + [MMInspectorButton("Pause")] + public bool PauseButton; + /// a next song test button + [MMInspectorButton("PlayPreviousSong")] + public bool PreviousButton; + /// a next song test button + [MMInspectorButton("PlayNextSong")] + public bool NextButton; + /// the index of the song to play when pressing the PlayTargetSong button + [Tooltip("the index of the song to play when pressing the PlayTargetSong button")] + public int TargetSongIndex = 0; + /// a next song test button + [MMInspectorButton("PlayTargetSong")] + public bool TargetSongButton; + /// a next song test button + [MMInspectorButton("QueueTargetSong")] + public bool QueueTargetSongButton; + /// a next song test button + [MMInspectorButton("SetCurrentSongToLoop")] + public bool SetLoopTargetSongButton; + /// a next song test button + [MMInspectorButton("StopCurrentSongFromLooping")] + public bool StopLoopTargetSongButton; + /// a playlist you can set to use with the SetTargetPlaylist and PlayTargetPlaylist buttons + [Tooltip("a playlist you can set to use with the SetTargetPlaylist and PlayTargetPlaylist buttons")] + public MMSMPlaylist TestPlaylist; + /// a test button used to set a new playlist + [MMInspectorButton("SetTargetPlaylist")] + public bool SetTargetPlaylistButton; + /// a test button used to play the target playlist + [MMInspectorButton("PlayTargetPlaylist")] + public bool PlayTargetPlaylistButton; + /// a test button used to reset the play count + [MMInspectorButton("ResetPlayCount")] + public bool ResetPlayCountButton; + + /// a slider used to test volume control + [Tooltip("a slider used to test volume control")] + [Range(0f,2f)] + public float TestVolumeControl = 1f; + /// a slider used to test speed control + [Tooltip("a slider used to test speed control")] + [Range(0f,20f)] + public float TestPlaybackSpeedControl = 1f; + + /// whether or not this playlist manager is currently playing + public virtual bool IsPlaying => (_currentlyPlayingAudioSource != null && _currentlyPlayingAudioSource.isPlaying); + + /// a delegate used to trigger events along the lifecycle of the playlist manager + public delegate void PlaylistEvent(); + /// an event that gets triggered when a song starts + public PlaylistEvent OnSongStart; + /// an event that gets triggered when a song ends + public PlaylistEvent OnSongEnd; + /// an event that gets triggered when the playlist gets paused + public PlaylistEvent OnPause; + /// an event that gets triggered when the playlist gets stopped + public PlaylistEvent OnStop; + /// an event that gets triggered when the playlist gets changed for another one + public PlaylistEvent OnPlaylistChange; + /// an event that gets triggered when a playlist ends + public PlaylistEvent OnPlaylistEnd; + + protected bool _shouldResumeOnApplicationPause = false; + public static bool HasInstance => _instance != null; + public static MMSMPlaylistManager Current => _instance; + protected static MMSMPlaylistManager _instance; + protected int _queuedSongIndex = -1; + protected AudioSource _currentlyPlayingAudioSource; + protected MMSoundManagerPlayOptions _options; + protected float _lastTestVolumeControl = 1f; + protected float _lastTestPlaybackSpeedControl = 1f; + internal bool _listeningToEvents = false; + + #region INITIALIZATION + + /// + /// Singleton design pattern + /// + /// The instance. + public static MMSMPlaylistManager Instance + { + get + { + if (_instance == null) + { + _instance = FindObjectOfType (); + if (_instance == null) + { + GameObject obj = new GameObject (); + obj.name = typeof(MMPlaylist).Name + "_AutoCreated"; + _instance = obj.AddComponent (); + } + } + return _instance; + } + } + + /// + /// On awake, we check if there's already a copy of the object in the scene. If there's one, we destroy it. + /// + protected virtual void Awake () + { + InitializeSingleton(); + } + + /// + /// Initializes the singleton. + /// + protected virtual void InitializeSingleton() + { + if (!Application.isPlaying) + { + return; + } + + if (!Persistent) + { + return; + } + + if (AutomaticallyUnparentOnAwake) + { + this.transform.SetParent(null); + } + + if (_instance == null) + { + //If I am the first instance, make me the Singleton + _instance = this; + DontDestroyOnLoad (transform.gameObject); + } + else + { + //If a Singleton already exists and you find + //another reference in scene, destroy it! + if(this != _instance) + { + Destroy(this.gameObject); + } + } + } + + /// + /// On Start we initialize our playlist + /// + protected virtual void Start() + { + Initialization(); + + if (PlayOnStart) + { + PlayFirstSong(); + } + + if (!_listeningToEvents) + { + StartListening(); + } + } + + /// + /// On init we initialize our state machine and start playing if needed + /// + protected virtual void Initialization() + { + InitializeRandomSeed(); + Playlist.Initialization(); + InitializePlaylistManagerState(); + } + + /// + /// Initializes the random seed if needed + /// + protected virtual void InitializeRandomSeed() + { + if ( + ((Playlist.PlayOrder == MMSMPlaylist.PlayOrders.Random) || (Playlist.PlayOrder == MMSMPlaylist.PlayOrders.RandomUnique)) + && Playlist.RandomizeOrderSeed + ) + { + Random.InitState(System.Environment.TickCount); + } + } + + /// + /// Inits the state machine + /// + protected virtual void InitializePlaylistManagerState() + { + PlaylistManagerState = new MMStateMachine(this.gameObject, true); + ChangePlaylistManagerState(PlaylistManagerStates.Idle); + } + + /// + /// a method used to update the state machine + /// + /// + protected virtual void ChangePlaylistManagerState(PlaylistManagerStates newManagerState) + { + PlaylistManagerState.ChangeState(newManagerState); + #if UNITY_EDITOR + DebugCurrentManagerState = newManagerState; + #endif + } + + #endregion + + #region LIFECYCLE + + /// + /// on update, self disables if needed, + /// + protected virtual void Update() + { + if (PlaylistManagerState.CurrentState == PlaylistManagerStates.Idle) + { + this.enabled = false; + return; + } + UpdateTimeAndProgress(); + HandleTimescale(); + HandleEndOfSong(); + } + + /// + /// On update, we update our pitch multiplier to match our timescale if necessary + /// + protected virtual void HandleTimescale() + { + if (BindPitchToTimeScale) + { + float remappedTimescale = MMMaths.Remap(Time.timeScale, TimescaleRemapFrom.x, TimescaleRemapFrom.y, + TimescaleRemapTo.x, TimescaleRemapTo.y); + SetPitchMultiplier(remappedTimescale); + } + } + + /// + /// Updates the various time counters + /// + protected virtual void UpdateTimeAndProgress() + { + CurrentTime = _currentlyPlayingAudioSource.time; + CurrentTimeLeft = _currentlyPlayingAudioSource.clip.length - _currentlyPlayingAudioSource.time; + CurrentProgress = CurrentTime / CurrentClipDuration; + } + + /// + /// Picks and plays the first song + /// + protected virtual void PlayFirstSong() + { + Playlist.Initialization(); + CurrentSongIndex = -1; + HandleNextSong(1, false); + } + + /// + /// Detects end of song and moves on to the next one + /// + protected virtual void HandleEndOfSong() + { + if (PlaylistManagerState.CurrentState != PlaylistManagerStates.Playing) + { + return; + } + + if (_currentlyPlayingAudioSource.isPlaying) + { + if (FadeIn && FadeOut && (CurrentTimeLeft < FadeDuration)) + { + HandleNextSong(1, false); + } + return; + } + + HandleNextSong(1, false); + } + + /// + /// Determines the next song to play and triggers the play + /// + /// + protected virtual void HandleNextSong(int direction, bool bypassLoop) + { + if (IsPlaying) + { + OnSongEnd?.Invoke(); + } + + int newIndex = Playlist.PickNextIndex(direction, CurrentSongIndex, ref _queuedSongIndex, bypassLoop); + + if (newIndex == -1) + { + ChangePlaylistManagerState(PlaylistManagerStates.Idle); + } + + if (newIndex == -2) + { + HandleEndOfPlaylist(); + return; + } + + if (newIndex >= 0 && newIndex < Playlist.Songs.Count) + { + PlaySongAt(newIndex); + } + } + + /// + /// Handles the end of playlist, triggers a new one if needed + /// + protected virtual void HandleEndOfPlaylist() + { + OnPlaylistEnd?.Invoke(); + + if (Playlist.NextPlaylist != null) + { + ChangePlaylistAndPlay(Playlist.NextPlaylist); + return; + } + ChangePlaylistManagerState(PlaylistManagerStates.Idle); + } + + #endregion + + + #region CONTROLS + + /// + /// Use this method to either play the first song of the playlist, or resume after a pause + /// + public virtual void Play() + { + switch (PlaylistManagerState.CurrentState) + { + case PlaylistManagerStates.Idle: + PlayFirstSong(); + break; + + case PlaylistManagerStates.Paused: + MMSoundManager.Instance.ResumeSound(_currentlyPlayingAudioSource); + ChangePlaylistManagerState(PlaylistManagerStates.Playing); + break; + + case PlaylistManagerStates.Playing: + // do nothing + break; + } + } + + /// + /// Plays the song at the specified index + /// + /// + /// + public virtual void PlaySongAt(int songIndex) + { + this.enabled = true; + + // if we don't have a song, we stop + if (Playlist.Songs.Count == 0) + { + return; + } + + Stop(); + + // starts the new song + _options = Playlist.Songs[songIndex].Options; + _options.MmSoundManagerTrack = Playlist.Track; + _options.Volume *= VolumeMultiplier; + _options.Pitch *= PitchMultiplier; + _options.Persistent = Persistent; + + _currentlyPlayingAudioSource = MMSoundManagerSoundPlayEvent.Trigger(Playlist.Songs[songIndex].Clip, _options); + + OnSongStart?.Invoke(); + + if (FadeIn) + { + MMSoundManager.Instance.FadeSound(_currentlyPlayingAudioSource, FadeDuration, + 0f, _currentlyPlayingAudioSource.volume, FadeTween, false); + } + + // updates our state + ChangePlaylistManagerState(PlaylistManagerStates.Playing); + + CurrentSongIndex = songIndex; + CurrentClipDuration = _currentlyPlayingAudioSource.clip.length; + CurrentSongName = Playlist.Songs[songIndex].Name; + Playlist.Songs[songIndex].PlayCount++; + Playlist.PlayCount++; + + // we trigger an event for other classes to listen to, letting them know a new song has started + MMPlaylistNewSongStartedEvent.Trigger(Channel); + } + + /// + /// Pauses the current song + /// + public virtual void Pause() + { + if (PlaylistManagerState.CurrentState != PlaylistManagerStates.Playing) + { + return; + } + + MMSoundManager.Instance.PauseSound(_currentlyPlayingAudioSource); + ChangePlaylistManagerState(PlaylistManagerStates.Paused); + + OnPause?.Invoke(); + } + + /// + /// Stops the song currently playing + /// + public virtual void Stop() + { + // we stop our current song + if ((_currentlyPlayingAudioSource == null) || !_currentlyPlayingAudioSource.isPlaying) + { + return; + } + + if (FadeOut) + { + if ( MMSoundManager.Instance.SoundIsFadingOut(_currentlyPlayingAudioSource) ) + { + return; + } + + MMSoundManager.Instance.FadeSound(_currentlyPlayingAudioSource, FadeDuration, + _currentlyPlayingAudioSource.volume, 0f, FadeTween, true); + } + else + { + MMSoundManager.Instance.FreeSound(_currentlyPlayingAudioSource); + } + ChangePlaylistManagerState(PlaylistManagerStates.Idle); + + OnStop?.Invoke(); + } + + /// + /// Stops the current song, lets you specify whether or not to fade it out + /// + public virtual void StopWithFade(bool withFade = true) + { + if (PlaylistManagerState.CurrentState == PlaylistManagerStates.Idle) + { + return; + } + + if (!withFade) + { + MMSoundManager.Instance.FreeSound(_currentlyPlayingAudioSource); + OnStop?.Invoke(); + } + else + { + Stop(); + } + + CurrentSongIndex = -1; + ChangePlaylistManagerState(PlaylistManagerStates.Idle); + } + + /// + /// Will change the current song's loop status + /// + public virtual void SetCurrentSongLoop(bool loop) + { + _currentlyPlayingAudioSource.loop = loop; + } + + /// + /// Plays the next song in the playlist + /// + public virtual void PlayNextSong() + { + Stop(); + HandleNextSong(1, true); + } + + /// + /// Plays the previous song in the playlist + /// + public virtual void PlayPreviousSong() + { + Stop(); + HandleNextSong(-1, true); + } + + /// + /// Queues the song at the specified index to play once the currently playing song finishes + /// + /// + public virtual void QueueSongAtIndex(int songIndex) + { + _queuedSongIndex = songIndex; + } + + /// + /// Changes the playlist for the specified one, doesn't play a song there, it'll play once the song currently playing ends + /// + /// + public virtual void ChangePlaylist(MMSMPlaylist newPlaylist) + { + Playlist = newPlaylist; + Playlist.Initialization(); + CurrentSongIndex = -1; + OnPlaylistChange?.Invoke(); + } + + /// + /// Changes the playlist for the specified one, and plays its first song + /// + /// + public virtual void ChangePlaylistAndPlay(MMSMPlaylist newPlaylist) + { + ChangePlaylist(newPlaylist); + PlayFirstSong(); + } + + /// + /// resets all play counts (playlist and songs) + /// + public virtual void ResetPlayCount() + { + Playlist.ResetPlayCount(); + } + + /// + /// Sets a new volume multiplier + /// + /// + public virtual void SetVolumeMultiplier(float newVolumeMultiplier) + { + float newVolume = Mathf.Clamp(newVolumeMultiplier, 0f, 2f); + MMPlaylistVolumeMultiplierEvent.Trigger(Channel, newVolume, true); + } + + /// + /// Sets a new pitch multiplier + /// + /// + public virtual void SetPitchMultiplier(float newPitchMultiplier) + { + float newPitch = Mathf.Clamp(newPitchMultiplier, 0f, 20f); + MMPlaylistPitchMultiplierEvent.Trigger(Channel, newPitch, true); + } + + #endregion + + #region DEBUG_METHODS + + /// + /// a debug method used by the inspector to set the target playlist + /// + protected virtual void SetTargetPlaylist() + { + ChangePlaylist(TestPlaylist); + } + + /// + /// a debug method used by the inspector to play the target playlist + /// + protected virtual void PlayTargetPlaylist() + { + ChangePlaylistAndPlay(TestPlaylist); + } + + /// + /// a debug method used by the inspector to queue the specified song + /// + protected virtual void QueueTargetSong() + { + int newIndex = Mathf.Clamp(TargetSongIndex, 0, Playlist.Songs.Count - 1); + QueueSongAtIndex(newIndex); + } + + /// + /// a debug method used by the inspector to play the specified song + /// + protected virtual void PlayTargetSong() + { + int newIndex = Mathf.Clamp(TargetSongIndex, 0, Playlist.Songs.Count - 1); + PlaySongAt(newIndex); + } + + /// + /// a test method used by the inspector debug button to force the current song from looping + /// + protected virtual void SetCurrentSongToLoop() + { + SetCurrentSongLoop(true); + } + + /// + /// a test method used by the inspector debug button to prevent the current song from looping + /// + protected virtual void StopCurrentSongFromLooping() + { + SetCurrentSongLoop(false); + } + + #endregion + + #region EVENTS + + protected virtual void OnPlayEvent(int channel) + { + if (channel != Channel) { return; } + Play(); + } + + protected virtual void OnPauseEvent(int channel) + { + if (channel != Channel) { return; } + Pause(); + } + + protected virtual void OnStopEvent(int channel) + { + if (channel != Channel) { return; } + Stop(); + } + + protected virtual void OnPlayNextEvent(int channel) + { + if (channel != Channel) { return; } + PlayNextSong(); + } + + protected virtual void OnPlayPreviousEvent(int channel) + { + if (channel != Channel) { return; } + PlayPreviousSong(); + } + + protected virtual void OnPlayIndexEvent(int channel, int index) + { + if (channel != Channel) { return; } + PlaySongAt(index); + } + + protected virtual void OnMMPlaylistVolumeMultiplierEvent(int channel, float newVolumeMultiplier, bool applyVolumeMultiplierInstantly = false) + { + if (channel != Channel) { return; } + VolumeMultiplier = newVolumeMultiplier; + if (applyVolumeMultiplierInstantly) + { + _currentlyPlayingAudioSource.volume = Playlist.Songs[CurrentSongIndex].Options.Volume * VolumeMultiplier; + } + } + + protected virtual void OnMMPlaylistPitchMultiplierEvent(int channel, float newPitchMultiplier, bool applyPitchMultiplierInstantly = false) + { + if (channel != Channel) { return; } + PitchMultiplier = newPitchMultiplier; + if (applyPitchMultiplierInstantly) + { + _currentlyPlayingAudioSource.pitch = Playlist.Songs[CurrentSongIndex].Options.Pitch * PitchMultiplier; + } + } + + protected virtual void OnMMPlaylistChangeEvent(int channel, MMSMPlaylist newPlaylist, bool andPlay) + { + if (channel != Channel) { return; } + if (andPlay) + { + ChangePlaylistAndPlay(newPlaylist); + } + else + { + ChangePlaylist(newPlaylist); + } + } + + /// + /// Starts listening for events + /// + public virtual void StartListening() + { + _listeningToEvents = true; + MMPlaylistPauseEvent.Register(OnPauseEvent); + MMPlaylistPlayEvent.Register(OnPlayEvent); + MMPlaylistPlayNextEvent.Register(OnPlayNextEvent); + MMPlaylistPlayPreviousEvent.Register(OnPlayPreviousEvent); + MMPlaylistStopEvent.Register(OnStopEvent); + MMPlaylistPlayIndexEvent.Register(OnPlayIndexEvent); + MMPlaylistVolumeMultiplierEvent.Register(OnMMPlaylistVolumeMultiplierEvent); + MMPlaylistPitchMultiplierEvent.Register(OnMMPlaylistPitchMultiplierEvent); + MMPlaylistChangeEvent.Register(OnMMPlaylistChangeEvent); + } + + /// + /// Stops listening for events + /// + public virtual void StopListening() + { + _listeningToEvents = false; + MMPlaylistPauseEvent.Unregister(OnPauseEvent); + MMPlaylistPlayEvent.Unregister(OnPlayEvent); + MMPlaylistPlayNextEvent.Unregister(OnPlayNextEvent); + MMPlaylistPlayPreviousEvent.Unregister(OnPlayPreviousEvent); + MMPlaylistStopEvent.Unregister(OnStopEvent); + MMPlaylistPlayIndexEvent.Unregister(OnPlayIndexEvent); + MMPlaylistVolumeMultiplierEvent.Unregister(OnMMPlaylistVolumeMultiplierEvent); + MMPlaylistPitchMultiplierEvent.Unregister(OnMMPlaylistPitchMultiplierEvent); + MMPlaylistChangeEvent.Unregister(OnMMPlaylistChangeEvent); + } + + /// + /// on destroy we stop listening for events + /// + protected virtual void OnDestroy() + { + StopListening(); + } + + /// + /// On ApplicationPause, we pause the playlist and resume it afterwards + /// + /// + protected virtual void OnApplicationPause(bool pauseStatus) + { + if (!AutoHandleApplicationPause) + { + return; + } + + if (pauseStatus && PlaylistManagerState.CurrentState == PlaylistManagerStates.Playing) + { + Pause(); + _shouldResumeOnApplicationPause = true; + } + + if (!pauseStatus && _shouldResumeOnApplicationPause) + { + _shouldResumeOnApplicationPause = false; + Play(); + } + } + + #if UNITY_EDITOR + protected virtual void OnValidate() + { + if (_lastTestVolumeControl != TestVolumeControl) + { + MMPlaylistVolumeMultiplierEvent.Trigger(Channel, TestVolumeControl, true); + } + if (_lastTestPlaybackSpeedControl != TestPlaybackSpeedControl) + { + MMPlaylistPitchMultiplierEvent.Trigger(Channel, TestPlaybackSpeedControl, true); + } + } + #endif + + #endregion + } +} diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylistManager.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylistManager.cs.meta new file mode 100644 index 0000000..76c456d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSMPlaylist/MMSMPlaylistManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f2b35cd0da71894d92b885cf5e55c51 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager.meta new file mode 100644 index 0000000..33699a1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a487ae3f9cad794ebd56ec92cc8e0c7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events.meta new file mode 100644 index 0000000..d7fcd89 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e27d0ce351322694c8fa535acdf6fdad +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerAllSoundsControlEvent.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerAllSoundsControlEvent.cs new file mode 100644 index 0000000..b195c37 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerAllSoundsControlEvent.cs @@ -0,0 +1,34 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public enum MMSoundManagerAllSoundsControlEventTypes + { + Pause, Play, Stop, Free, FreeAllButPersistent, FreeAllLooping + } + + /// + /// This event will let you pause/play/stop/free all sounds playing through the MMSoundManager at once + /// + /// Example : MMSoundManagerAllSoundsControlEvent.Trigger(MMSoundManagerAllSoundsControlEventTypes.Stop); + /// will stop all sounds playing at once + /// + public struct MMSoundManagerAllSoundsControlEvent + { + public MMSoundManagerAllSoundsControlEventTypes EventType; + + public MMSoundManagerAllSoundsControlEvent(MMSoundManagerAllSoundsControlEventTypes eventType) + { + EventType = eventType; + } + + static MMSoundManagerAllSoundsControlEvent e; + public static void Trigger(MMSoundManagerAllSoundsControlEventTypes eventType) + { + e.EventType = eventType; + MMEventManager.TriggerEvent(e); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerAllSoundsControlEvent.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerAllSoundsControlEvent.cs.meta new file mode 100644 index 0000000..78e9dd6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerAllSoundsControlEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 934c751bdc1eca14bb13d3c6b311c60c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerEvent.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerEvent.cs new file mode 100644 index 0000000..2b1b57d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerEvent.cs @@ -0,0 +1,37 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public enum MMSoundManagerEventTypes + { + SaveSettings, + LoadSettings, + ResetSettings, + SettingsLoaded + } + + /// + /// This event will let you trigger a save/load/reset on the MMSoundManager settings + /// + /// Example : MMSoundManagerEvent.Trigger(MMSoundManagerEventTypes.SaveSettings); + /// will save settings. + /// + public struct MMSoundManagerEvent + { + public MMSoundManagerEventTypes EventType; + + public MMSoundManagerEvent(MMSoundManagerEventTypes eventType) + { + EventType = eventType; + } + + static MMSoundManagerEvent e; + public static void Trigger(MMSoundManagerEventTypes eventType) + { + e.EventType = eventType; + MMEventManager.TriggerEvent(e); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerEvent.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerEvent.cs.meta new file mode 100644 index 0000000..f4c87a3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f7449660378a3c4aa7ab771c5a336ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundControlEvent.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundControlEvent.cs new file mode 100644 index 0000000..e91dcbb --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundControlEvent.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public enum MMSoundManagerSoundControlEventTypes + { + Pause, + Resume, + Stop, + Free + } + + /// + /// An event used to control a specific sound on the MMSoundManager. + /// You can either search for it by ID, or directly pass an audiosource if you have it. + /// + /// Example : MMSoundManagerSoundControlEvent.Trigger(MMSoundManagerSoundControlEventTypes.Stop, 33); + /// will cause the sound(s) with an ID of 33 to stop playing + /// + public struct MMSoundManagerSoundControlEvent + { + /// the ID of the sound to control (has to match the one used to play it) + public int SoundID; + /// the control mode + public MMSoundManagerSoundControlEventTypes MMSoundManagerSoundControlEventType; + /// the audiosource to control (if specified) + public AudioSource TargetSource; + + public MMSoundManagerSoundControlEvent(MMSoundManagerSoundControlEventTypes eventType, int soundID, AudioSource source = null) + { + SoundID = soundID; + TargetSource = source; + MMSoundManagerSoundControlEventType = eventType; + } + + static MMSoundManagerSoundControlEvent e; + public static void Trigger(MMSoundManagerSoundControlEventTypes eventType, int soundID, AudioSource source = null) + { + e.SoundID = soundID; + e.TargetSource = source; + e.MMSoundManagerSoundControlEventType = eventType; + MMEventManager.TriggerEvent(e); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundControlEvent.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundControlEvent.cs.meta new file mode 100644 index 0000000..25e3b98 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundControlEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c47cf85e660a3714e98c5ac0a9c153cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundFadeEvent.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundFadeEvent.cs new file mode 100644 index 0000000..0f7c124 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundFadeEvent.cs @@ -0,0 +1,50 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This event will let you pause + /// + /// Example : MMSoundManagerSoundFadeEvent.Trigger(33, 2f, 0.3f, new MMTweenType(MMTween.MMTweenCurve.EaseInElastic)); + /// will fade the sound with an ID of 33 towards a volume of 0.3, over 2 seconds, on an elastic curve + /// + public struct MMSoundManagerSoundFadeEvent + { + public enum Modes { PlayFade, StopFade } + + /// whether we are fading a sound, or stopping an existing fade + public Modes Mode; + /// the ID of the sound to fade + public int SoundID; + /// the duration of the fade (in seconds) + public float FadeDuration; + /// the volume towards which to fade this sound + public float FinalVolume; + /// the tween over which to fade this sound + public MMTweenType FadeTween; + + + + public MMSoundManagerSoundFadeEvent(Modes mode, int soundID, float fadeDuration, float finalVolume, MMTweenType fadeTween) + { + Mode = mode; + SoundID = soundID; + FadeDuration = fadeDuration; + FinalVolume = finalVolume; + FadeTween = fadeTween; + } + + static MMSoundManagerSoundFadeEvent e; + public static void Trigger(Modes mode, int soundID, float fadeDuration, float finalVolume, MMTweenType fadeTween) + { + e.Mode = mode; + e.SoundID = soundID; + e.FadeDuration = fadeDuration; + e.FinalVolume = finalVolume; + e.FadeTween = fadeTween; + MMEventManager.TriggerEvent(e); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundFadeEvent.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundFadeEvent.cs.meta new file mode 100644 index 0000000..a48bda8 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundFadeEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b96a37932e03d84586c714caa05bf79 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundPlayEvent.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundPlayEvent.cs new file mode 100644 index 0000000..0adab55 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundPlayEvent.cs @@ -0,0 +1,79 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; + +namespace MoreMountains.Tools +{ + /// + /// This event will let you play a sound on the MMSoundManager + /// + /// Example : MMSoundManagerSoundPlayEvent.Trigger(ExplosionSfx, MMSoundManager.MMSoundManagerTracks.Sfx, this.transform.position); + /// will play a clip (here ours is called ExplosionSfx) on the SFX track, at the position of the object calling it + /// + public struct MMSoundManagerSoundPlayEvent + { + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + + public delegate AudioSource Delegate(AudioClip clip, MMSoundManagerPlayOptions options); + static private event Delegate OnEvent; + + static public void Register(Delegate callback) + { + OnEvent += callback; + } + + static public void Unregister(Delegate callback) + { + OnEvent -= callback; + } + + static public AudioSource Trigger(AudioClip clip, MMSoundManagerPlayOptions options) + { + return OnEvent?.Invoke(clip, options); + } + + static public AudioSource Trigger(AudioClip audioClip, MMSoundManager.MMSoundManagerTracks mmSoundManagerTrack, Vector3 location, + bool loop = false, float volume = 1.0f, int ID = 0, + bool fade = false, float fadeInitialVolume = 0f, float fadeDuration = 1f, MMTweenType fadeTween = null, + bool persistent = false, + AudioSource recycleAudioSource = null, AudioMixerGroup audioGroup = null, + float pitch = 1f, float panStereo = 0f, float spatialBlend = 0.0f, + bool soloSingleTrack = false, bool soloAllTracks = false, bool autoUnSoloOnEnd = false, + bool bypassEffects = false, bool bypassListenerEffects = false, bool bypassReverbZones = false, int priority = 128, float reverbZoneMix = 1f, + float dopplerLevel = 1f, int spread = 0, AudioRolloffMode rolloffMode = AudioRolloffMode.Logarithmic, float minDistance = 1f, float maxDistance = 500f) + { + MMSoundManagerPlayOptions options = MMSoundManagerPlayOptions.Default; + options.MmSoundManagerTrack = mmSoundManagerTrack; + options.Location = location; + options.Loop = loop; + options.Volume = volume; + options.ID = ID; + options.Fade = fade; + options.FadeInitialVolume = fadeInitialVolume; + options.FadeDuration = fadeDuration; + options.FadeTween = fadeTween; + options.Persistent = persistent; + options.RecycleAudioSource = recycleAudioSource; + options.AudioGroup = audioGroup; + options.Pitch = pitch; + options.PanStereo = panStereo; + options.SpatialBlend = spatialBlend; + options.SoloSingleTrack = soloSingleTrack; + options.SoloAllTracks = soloAllTracks; + options.AutoUnSoloOnEnd = autoUnSoloOnEnd; + options.BypassEffects = bypassEffects; + options.BypassListenerEffects = bypassListenerEffects; + options.BypassReverbZones = bypassReverbZones; + options.Priority = priority; + options.ReverbZoneMix = reverbZoneMix; + options.DopplerLevel = dopplerLevel; + options.Spread = spread; + options.RolloffMode = rolloffMode; + options.MinDistance = minDistance; + options.MaxDistance = maxDistance; + + return OnEvent?.Invoke(audioClip, options); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundPlayEvent.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundPlayEvent.cs.meta new file mode 100644 index 0000000..9a22d16 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerSoundPlayEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa5bc168399356b4e8b48a498dfed282 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackEvent.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackEvent.cs new file mode 100644 index 0000000..a520dcb --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackEvent.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public enum MMSoundManagerTrackEventTypes + { + MuteTrack, + UnmuteTrack, + SetVolumeTrack, + PlayTrack, + PauseTrack, + StopTrack, + FreeTrack + } + + /// + /// This feedback will let you mute, unmute, play, pause, stop, free or set the volume of a selected track + /// + /// Example : MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.PauseTrack,MMSoundManager.MMSoundManagerTracks.UI); + /// will pause the entire UI track + /// + public struct MMSoundManagerTrackEvent + { + /// the order to pass to the track + public MMSoundManagerTrackEventTypes TrackEventType; + /// the track to pass the order to + public MMSoundManager.MMSoundManagerTracks Track; + /// if in SetVolume mode, the volume to which to set the track to + public float Volume; + + public MMSoundManagerTrackEvent(MMSoundManagerTrackEventTypes trackEventType, MMSoundManager.MMSoundManagerTracks track = MMSoundManager.MMSoundManagerTracks.Master, float volume = 1f) + { + TrackEventType = trackEventType; + Track = track; + Volume = volume; + } + + static MMSoundManagerTrackEvent e; + public static void Trigger(MMSoundManagerTrackEventTypes trackEventType, MMSoundManager.MMSoundManagerTracks track = MMSoundManager.MMSoundManagerTracks.Master, float volume = 1f) + { + e.TrackEventType = trackEventType; + e.Track = track; + e.Volume = volume; + MMEventManager.TriggerEvent(e); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackEvent.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackEvent.cs.meta new file mode 100644 index 0000000..48d7715 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bda4c1805f4bd2f49923dfac1e1e004b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackFadeEvent.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackFadeEvent.cs new file mode 100644 index 0000000..252ee5d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackFadeEvent.cs @@ -0,0 +1,48 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This event will let you order the MMSoundManager to fade an entire track's sounds' volume towards the specified FinalVolume + /// + /// Example : MMSoundManagerTrackFadeEvent.Trigger(MMSoundManager.MMSoundManagerTracks.Music, 2f, 0.5f, new MMTweenType(MMTween.MMTweenCurve.EaseInCubic)); + /// will fade the volume of the music track towards 0.5, over 2 seconds, using an ease in cubic tween + /// + public struct MMSoundManagerTrackFadeEvent + { + public enum Modes { PlayFade, StopFade } + + /// whether we are fading a sound, or stopping an existing fade + public Modes Mode; + /// the track to fade the volume of + public MMSoundManager.MMSoundManagerTracks Track; + /// the duration of the fade, in seconds + public float FadeDuration; + /// the final volume to fade towards + public float FinalVolume; + /// the tween to use when fading + public MMTweenType FadeTween; + + public MMSoundManagerTrackFadeEvent(Modes mode, MMSoundManager.MMSoundManagerTracks track, float fadeDuration, float finalVolume, MMTweenType fadeTween) + { + Mode = mode; + Track = track; + FadeDuration = fadeDuration; + FinalVolume = finalVolume; + FadeTween = fadeTween; + } + + static MMSoundManagerTrackFadeEvent e; + public static void Trigger(Modes mode, MMSoundManager.MMSoundManagerTracks track, float fadeDuration, float finalVolume, MMTweenType fadeTween) + { + e.Mode = mode; + e.Track = track; + e.FadeDuration = fadeDuration; + e.FinalVolume = finalVolume; + e.FadeTween = fadeTween; + MMEventManager.TriggerEvent(e); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackFadeEvent.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackFadeEvent.cs.meta new file mode 100644 index 0000000..13bef30 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Events/MMSoundManagerTrackFadeEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03dee039a0942664ba28a68a924bd105 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManager.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManager.cs new file mode 100644 index 0000000..54dd537 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManager.cs @@ -0,0 +1,1295 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// A simple yet powerful sound manager, that will let you play sounds with an event based approach and performance in mind. + /// + /// Features : + /// + /// - Play/stop/pause/resume/free sounds + /// - Full control : loop, volume, pitch, pan, spatial blend, bypasses, priority, reverb, doppler level, spread, rolloff mode, distance + /// - 2D & 3D spatial support + /// - Built-in pooling, automatically recycle a set of audio sources for maximum performance + /// - Built in audio mixer and groups, with ready-made tracks (Master, Music, SFX, UI), and options to play on more groups if needed + /// - Stop/pause/resume/free entire tracks + /// - Stop/pause/resume/free all sounds at once + /// - Mute / set volume entire tracks + /// - Save and load settings, with auto save / auto load mechanics built-in + /// - Fade in/out sounds + /// - Fade in/out tracks + /// - Solo mode : play a sound with one or all tracks muted, then unmute them automatically afterwards + /// - PlayOptions struct + /// - Option to have sounds persist across scene loads and from scene to scene + /// - Inspector controls for tracks (volume, mute, unmute, play, pause, stop, resume, free, number of sounds) + /// - MMSfxEvents + /// - MMSoundManagerEvents : mute track, control track, save, load, reset, stop persistent sounds + /// + [AddComponentMenu("More Mountains/Tools/Audio/MMSoundManager")] + public class MMSoundManager : MMPersistentSingleton, + MMEventListener, + MMEventListener, + MMEventListener, + MMEventListener, + MMEventListener, + MMEventListener + { + /// + /// Statics initialization to support enter play modes + /// + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + protected static void InitializeStatics() + { + _instance = null; + } + + /// the possible ways to manage a track + public enum MMSoundManagerTracks { Sfx, Music, UI, Master, Other} + + [Header("Settings")] + /// the current sound settings + [Tooltip("the current sound settings ")] + public MMSoundManagerSettingsSO settingsSo; + + [Header("Pool")] + /// the size of the AudioSource pool, a reserve of ready-to-use sources that will get recycled. Should be approximately equal to the maximum amount of sounds that you expect to be playing at once + [Tooltip("the size of the AudioSource pool, a reserve of ready-to-use sources that will get recycled. Should be approximately equal to the maximum amount of sounds that you expect to be playing at once")] + public int AudioSourcePoolSize = 10; + /// whether or not the pool can expand (create new audiosources on demand). In a perfect world you'd want to avoid this, and have a sufficiently big pool, to avoid costly runtime creations. + [Tooltip("whether or not the pool can expand (create new audiosources on demand). In a perfect world you'd want to avoid this, and have a sufficiently big pool, to avoid costly runtime creations.")] + public bool PoolCanExpand = true; + + protected MMSoundManagerAudioPool _pool; + protected GameObject _tempAudioSourceGameObject; + protected MMSoundManagerSound _sound; + protected List _sounds; + protected AudioSource _tempAudioSource; + protected Dictionary _fadeInSoundCoroutines; + protected Dictionary _fadeOutSoundCoroutines; + protected Dictionary _fadeTrackCoroutines; + + #region Initialization + + /// + /// On Awake we initialize our manager + /// + protected override void Awake() + { + base.Awake(); + InitializeSoundManager(); + } + + /// + /// On Start we load and apply our saved settings if needed. + /// This is done on Start and not Awake because of a bug in Unity's AudioMixer API + /// + protected virtual void Start() + { + if ((settingsSo != null) && (settingsSo.Settings.AutoLoad)) + { + settingsSo.LoadSoundSettings(); + } + } + + /// + /// Initializes the pool, fills it, registers to the scene loaded event + /// + protected virtual void InitializeSoundManager() + { + if (_pool == null) + { + _pool = new MMSoundManagerAudioPool(); + } + _sounds = new List(); + _pool.FillAudioSourcePool(AudioSourcePoolSize, this.transform); + _fadeInSoundCoroutines = new Dictionary(); + _fadeOutSoundCoroutines = new Dictionary(); + _fadeTrackCoroutines = new Dictionary(); + } + + #endregion + + #region PlaySound + + /// + /// Plays a sound, separate options object signature + /// + /// + /// + /// + public virtual AudioSource PlaySound(AudioClip audioClip, MMSoundManagerPlayOptions options) + { + return PlaySound(audioClip, options.MmSoundManagerTrack, options.Location, + options.Loop, options.Volume, options.ID, + options.Fade, options.FadeInitialVolume, options.FadeDuration, options.FadeTween, + options.Persistent, + options.RecycleAudioSource, options.AudioGroup, + options.Pitch, options.PanStereo, options.SpatialBlend, + options.SoloSingleTrack, options.SoloAllTracks, options.AutoUnSoloOnEnd, + options.BypassEffects, options.BypassListenerEffects, options.BypassReverbZones, options.Priority, + options.ReverbZoneMix, + options.DopplerLevel, options.Spread, options.RolloffMode, options.MinDistance, options.MaxDistance, + options.DoNotAutoRecycleIfNotDonePlaying, options.PlaybackTime, options.PlaybackDuration, options.AttachToTransform, + options.UseSpreadCurve, options.SpreadCurve, options.UseCustomRolloffCurve, options.CustomRolloffCurve, + options.UseSpatialBlendCurve, options.SpatialBlendCurve, options.UseReverbZoneMixCurve, options.ReverbZoneMixCurve + ); + } + + /// + /// Plays a sound, signature with all options + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public virtual AudioSource PlaySound(AudioClip audioClip, MMSoundManagerTracks mmSoundManagerTrack, Vector3 location, + bool loop = false, float volume = 1.0f, int ID = 0, + bool fade = false, float fadeInitialVolume = 0f, float fadeDuration = 1f, MMTweenType fadeTween = null, + bool persistent = false, + AudioSource recycleAudioSource = null, AudioMixerGroup audioGroup = null, + float pitch = 1f, float panStereo = 0f, float spatialBlend = 0.0f, + bool soloSingleTrack = false, bool soloAllTracks = false, bool autoUnSoloOnEnd = false, + bool bypassEffects = false, bool bypassListenerEffects = false, bool bypassReverbZones = false, int priority = 128, float reverbZoneMix = 1f, + float dopplerLevel = 1f, int spread = 0, AudioRolloffMode rolloffMode = AudioRolloffMode.Logarithmic, float minDistance = 1f, float maxDistance = 500f, + bool doNotAutoRecycleIfNotDonePlaying = false, float playbackTime = 0f, float playbackDuration = 0f, Transform attachToTransform = null, + bool useSpreadCurve = false, AnimationCurve spreadCurve = null, bool useCustomRolloffCurve = false, AnimationCurve customRolloffCurve = null, + bool useSpatialBlendCurve = false, AnimationCurve spatialBlendCurve = null, bool useReverbZoneMixCurve = false, AnimationCurve reverbZoneMixCurve = null + ) + { + if (this == null) { return null; } + if (!audioClip) { return null; } + + // audio source setup --------------------------------------------------------------------------------- + + // we reuse an audiosource if one is passed in parameters + AudioSource audioSource = recycleAudioSource; + + if (!audioSource) + { + // we pick an idle audio source from the pool if possible + audioSource = _pool.GetAvailableAudioSource(PoolCanExpand, this.transform); + audioSource.clip = audioClip; + if ((audioSource) && (!loop)) + { + recycleAudioSource = audioSource; + // we destroy the host after the clip has played (if it is not tagged for reusability. + StartCoroutine(_pool.AutoDisableAudioSource(audioClip.length / Mathf.Abs(pitch), audioSource, audioClip, doNotAutoRecycleIfNotDonePlaying, playbackTime, playbackDuration)); + } + } + + // we create an audio source if needed + if (!audioSource) + { + _tempAudioSourceGameObject = new GameObject("MMAudio_"+audioClip.name); + SceneManager.MoveGameObjectToScene(_tempAudioSourceGameObject, this.gameObject.scene); + audioSource = _tempAudioSourceGameObject.AddComponent(); + } + + // audio source settings --------------------------------------------------------------------------------- + + audioSource.transform.position = location; + audioSource.clip = audioClip; + audioSource.pitch = pitch; + audioSource.spatialBlend = spatialBlend; + audioSource.panStereo = panStereo; + audioSource.loop = loop; + audioSource.bypassEffects = bypassEffects; + audioSource.bypassListenerEffects = bypassListenerEffects; + audioSource.bypassReverbZones = bypassReverbZones; + audioSource.priority = priority; + audioSource.reverbZoneMix = reverbZoneMix; + audioSource.dopplerLevel = dopplerLevel; + audioSource.spread = spread; + audioSource.rolloffMode = rolloffMode; + audioSource.minDistance = minDistance; + audioSource.maxDistance = maxDistance; + audioSource.time = playbackTime; + + // curves + if (useSpreadCurve) { audioSource.SetCustomCurve(AudioSourceCurveType.Spread, spreadCurve); } + if (useCustomRolloffCurve) { audioSource.SetCustomCurve(AudioSourceCurveType.CustomRolloff, customRolloffCurve); } + if (useSpatialBlendCurve) { audioSource.SetCustomCurve(AudioSourceCurveType.SpatialBlend, spatialBlendCurve); } + if (useReverbZoneMixCurve) { audioSource.SetCustomCurve(AudioSourceCurveType.ReverbZoneMix, reverbZoneMixCurve); } + + // attaching to target + if (attachToTransform != null) + { + MMFollowTarget followTarget = audioSource.gameObject.MMGetComponentNoAlloc(); + if (followTarget == null) + { + followTarget = audioSource.gameObject.AddComponent(); + } + followTarget.Target = attachToTransform; + followTarget.InterpolatePosition = false; + followTarget.InterpolateRotation = false; + followTarget.InterpolateScale = false; + followTarget.FollowRotation = false; + followTarget.FollowScale = false; + followTarget.enabled = true; + } + + // track and volume --------------------------------------------------------------------------------- + + if (settingsSo != null) + { + audioSource.outputAudioMixerGroup = settingsSo.MasterAudioMixerGroup; + switch (mmSoundManagerTrack) + { + case MMSoundManagerTracks.Master: + audioSource.outputAudioMixerGroup = settingsSo.MasterAudioMixerGroup; + break; + case MMSoundManagerTracks.Music: + audioSource.outputAudioMixerGroup = settingsSo.MusicAudioMixerGroup; + break; + case MMSoundManagerTracks.Sfx: + audioSource.outputAudioMixerGroup = settingsSo.SfxAudioMixerGroup; + break; + case MMSoundManagerTracks.UI: + audioSource.outputAudioMixerGroup = settingsSo.UIAudioMixerGroup; + break; + } + } + if (audioGroup) { audioSource.outputAudioMixerGroup = audioGroup; } + audioSource.volume = volume; + + // we start playing the sound + audioSource.Play(); + + // we destroy the host after the clip has played if it was a one time AS. + if (!loop && !recycleAudioSource) + { + float destroyDelay = (playbackDuration > 0) ? playbackDuration : audioClip.length - playbackTime; + Destroy(_tempAudioSourceGameObject, destroyDelay); + } + + // we fade the sound in if needed + if (fade) + { + FadeSound(audioSource, fadeDuration, fadeInitialVolume, volume, fadeTween); + } + + // we handle soloing + if (soloSingleTrack) + { + MuteSoundsOnTrack(mmSoundManagerTrack, true, 0f); + audioSource.mute = false; + if (autoUnSoloOnEnd) + { + MuteSoundsOnTrack(mmSoundManagerTrack, false, audioClip.length); + } + } + else if (soloAllTracks) + { + MuteAllSounds(); + audioSource.mute = false; + if (autoUnSoloOnEnd) + { + StartCoroutine(MuteAllSoundsCoroutine(audioClip.length - playbackTime, false)); + } + } + + // we prepare for storage + _sound.ID = ID; + _sound.Track = mmSoundManagerTrack; + _sound.Source = audioSource; + _sound.Persistent = persistent; + _sound.PlaybackTime = playbackTime; + _sound.PlaybackDuration = playbackDuration; + + // we check if that audiosource is already being tracked in _sounds + bool alreadyIn = false; + for (int i = 0; i < _sounds.Count; i++) + { + if (_sounds[i].Source == audioSource) + { + _sounds[i] = _sound; + alreadyIn = true; + } + } + + if (!alreadyIn) + { + _sounds.Add(_sound); + } + + // we return the audiosource reference + return audioSource; + } + + #endregion + + #region SoundControls + + /// + /// Pauses the specified audiosource + /// + /// + public virtual void PauseSound(AudioSource source) + { + source.Pause(); + } + + /// + /// resumes play on the specified audio source + /// + /// + public virtual void ResumeSound(AudioSource source) + { + source.Play(); + } + + /// + /// Stops the specified audio source + /// + /// + public virtual void StopSound(AudioSource source) + { + source.Stop(); + } + + /// + /// Frees a specific sound, stopping it and returning it to the pool + /// + /// + public virtual void FreeSound(AudioSource source) + { + source.Stop(); + if (!_pool.FreeSound(source)) + { + Destroy(source.gameObject); + } + } + + #endregion + + #region TrackControls + + /// + /// Mutes an entire track + /// + /// + public virtual void MuteTrack(MMSoundManagerTracks track) + { + ControlTrack(track, ControlTrackModes.Mute, 0f); + } + + /// + /// Unmutes an entire track + /// + /// + public virtual void UnmuteTrack(MMSoundManagerTracks track) + { + ControlTrack(track, ControlTrackModes.Unmute, 0f); + } + + /// + /// Sets the volume of an entire track + /// + /// + /// + public virtual void SetTrackVolume(MMSoundManagerTracks track, float volume) + { + ControlTrack(track, ControlTrackModes.SetVolume, volume); + } + + /// + /// Returns the current volume of a track + /// + /// + /// + public virtual float GetTrackVolume(MMSoundManagerTracks track, bool mutedVolume) + { + switch (track) + { + case MMSoundManagerTracks.Master: + if (mutedVolume) + { + return settingsSo.Settings.MutedMasterVolume; + } + else + { + return settingsSo.Settings.MasterVolume; + } + case MMSoundManagerTracks.Music: + if (mutedVolume) + { + return settingsSo.Settings.MutedMusicVolume; + } + else + { + return settingsSo.Settings.MusicVolume; + } + case MMSoundManagerTracks.Sfx: + if (mutedVolume) + { + return settingsSo.Settings.MutedSfxVolume; + } + else + { + return settingsSo.Settings.SfxVolume; + } + case MMSoundManagerTracks.UI: + if (mutedVolume) + { + return settingsSo.Settings.MutedUIVolume; + } + else + { + return settingsSo.Settings.UIVolume; + } + } + + return 1f; + } + + /// + /// Pauses all sounds on a track + /// + /// + public virtual void PauseTrack(MMSoundManagerTracks track) + { + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.Track == track) + { + sound.Source.Pause(); + } + } + } + + /// + /// Plays or resumes all sounds on a track + /// + /// + public virtual void PlayTrack(MMSoundManagerTracks track) + { + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.Track == track) + { + sound.Source.Play(); + } + } + } + + /// + /// Stops all sounds on a track + /// + /// + public virtual void StopTrack(MMSoundManagerTracks track) + { + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.Track == track) + { + sound.Source.Stop(); + } + } + } + + /// + /// Returns true if sounds are currently playing on that track + /// + /// + public virtual bool HasSoundsPlaying(MMSoundManagerTracks track) + { + foreach (MMSoundManagerSound sound in _sounds) + { + if ((sound.Track == track) && (sound.Source.isPlaying)) + { + return true; + } + } + return false; + } + + /// + /// Returns a list of MMSoundManagerSounds for the specified track + /// + /// the track on which to grab the playing sounds + /// + public virtual List GetSoundsPlaying(MMSoundManagerTracks track) + { + List soundsPlaying = new List(); + foreach (MMSoundManagerSound sound in _sounds) + { + if ((sound.Track == track) && (sound.Source.isPlaying)) + { + soundsPlaying.Add(sound); + } + } + return soundsPlaying; + } + + /// + /// Stops all sounds on a track, and returns them to the pool + /// + /// + public virtual void FreeTrack(MMSoundManagerTracks track) + { + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.Track == track) + { + sound.Source.Stop(); + sound.Source.gameObject.SetActive(false); + } + } + } + + /// + /// Mutes the music track, QoL method ready to bind to a UnityEvent + /// + public virtual void MuteMusic() { MuteTrack(MMSoundManagerTracks.Music); } + + /// + /// Unmutes the music track, QoL method ready to bind to a UnityEvent + /// + public virtual void UnmuteMusic() { UnmuteTrack(MMSoundManagerTracks.Music); } + + /// + /// Mutes the sfx track, QoL method ready to bind to a UnityEvent + /// + public virtual void MuteSfx() { MuteTrack(MMSoundManagerTracks.Sfx); } + + + /// + /// Unmutes the sfx track, QoL method ready to bind to a UnityEvent + /// + public virtual void UnmuteSfx() { UnmuteTrack(MMSoundManagerTracks.Sfx); } + + /// + /// Mutes the UI track, QoL method ready to bind to a UnityEvent + /// + public virtual void MuteUI() { MuteTrack(MMSoundManagerTracks.UI); } + + /// + /// Unmutes the UI track, QoL method ready to bind to a UnityEvent + /// + public virtual void UnmuteUI() { UnmuteTrack(MMSoundManagerTracks.UI); } + + /// + /// Mutes the master track, QoL method ready to bind to a UnityEvent + /// + public virtual void MuteMaster() { MuteTrack(MMSoundManagerTracks.Master); } + + /// + /// Unmutes the master track, QoL method ready to bind to a UnityEvent + /// + public virtual void UnmuteMaster() { UnmuteTrack(MMSoundManagerTracks.Master); } + + + /// + /// Sets the volume of the Music track to the specified value, QoL method, ready to bind to a UnityEvent + /// + public virtual void SetVolumeMusic(float newVolume) { SetTrackVolume(MMSoundManagerTracks.Music, newVolume);} + /// + /// Sets the volume of the SFX track to the specified value, QoL method, ready to bind to a UnityEvent + /// + public virtual void SetVolumeSfx(float newVolume) { SetTrackVolume(MMSoundManagerTracks.Sfx, newVolume);} + /// + /// Sets the volume of the UI track to the specified value, QoL method, ready to bind to a UnityEvent + /// + public virtual void SetVolumeUI(float newVolume) { SetTrackVolume(MMSoundManagerTracks.UI, newVolume);} + /// + /// Sets the volume of the Master track to the specified value, QoL method, ready to bind to a UnityEvent + /// + public virtual void SetVolumeMaster(float newVolume) { SetTrackVolume(MMSoundManagerTracks.Master, newVolume);} + + /// + /// Returns true if the specified track is muted, false otherwise + /// + /// + /// + public virtual bool IsMuted(MMSoundManagerTracks track) + { + switch (track) + { + case MMSoundManagerTracks.Master: + return !settingsSo.Settings.MasterOn; + case MMSoundManagerTracks.Music: + return !settingsSo.Settings.MusicOn; + case MMSoundManagerTracks.Sfx: + return !settingsSo.Settings.SfxOn; + case MMSoundManagerTracks.UI: + return !settingsSo.Settings.UIOn; + } + return false; + } + + /// + /// A method that will let you mute/unmute a track, or set it to a specified volume + /// + public enum ControlTrackModes { Mute, Unmute, SetVolume } + protected virtual void ControlTrack(MMSoundManagerTracks track, ControlTrackModes trackMode, float volume = 0.5f) + { + string target = ""; + float savedVolume = 0f; + + switch (track) + { + case MMSoundManagerTracks.Master: + target = settingsSo.Settings.MasterVolumeParameter; + if (trackMode == ControlTrackModes.Mute) { settingsSo.TargetAudioMixer.GetFloat(target, out settingsSo.Settings.MutedMasterVolume); settingsSo.Settings.MasterOn = false; } + else if (trackMode == ControlTrackModes.Unmute) { savedVolume = settingsSo.Settings.MutedMasterVolume; settingsSo.Settings.MasterOn = true; } + break; + case MMSoundManagerTracks.Music: + target = settingsSo.Settings.MusicVolumeParameter; + if (trackMode == ControlTrackModes.Mute) { settingsSo.TargetAudioMixer.GetFloat(target, out settingsSo.Settings.MutedMusicVolume); settingsSo.Settings.MusicOn = false; } + else if (trackMode == ControlTrackModes.Unmute) { savedVolume = settingsSo.Settings.MutedMusicVolume; settingsSo.Settings.MusicOn = true; } + break; + case MMSoundManagerTracks.Sfx: + target = settingsSo.Settings.SfxVolumeParameter; + if (trackMode == ControlTrackModes.Mute) { settingsSo.TargetAudioMixer.GetFloat(target, out settingsSo.Settings.MutedSfxVolume); settingsSo.Settings.SfxOn = false; } + else if (trackMode == ControlTrackModes.Unmute) { savedVolume = settingsSo.Settings.MutedSfxVolume; settingsSo.Settings.SfxOn = true; } + break; + case MMSoundManagerTracks.UI: + target = settingsSo.Settings.UIVolumeParameter; + if (trackMode == ControlTrackModes.Mute) { settingsSo.TargetAudioMixer.GetFloat(target, out settingsSo.Settings.MutedUIVolume); settingsSo.Settings.UIOn = false; } + else if (trackMode == ControlTrackModes.Unmute) { savedVolume = settingsSo.Settings.MutedUIVolume; settingsSo.Settings.UIOn = true; } + break; + } + + switch (trackMode) + { + case ControlTrackModes.Mute: + settingsSo.SetTrackVolume(track, 0f); + break; + case ControlTrackModes.Unmute: + settingsSo.SetTrackVolume(track, settingsSo.MixerVolumeToNormalized(savedVolume)); + break; + case ControlTrackModes.SetVolume: + settingsSo.SetTrackVolume(track, volume); + break; + } + + settingsSo.GetTrackVolumes(); + + if (settingsSo.Settings.AutoSave) + { + settingsSo.SaveSoundSettings(); + } + } + + #endregion + + #region Fades + + /// + /// Fades an entire track over the specified duration towards the desired finalVolume + /// + /// + /// + /// + /// + /// + public virtual void FadeTrack(MMSoundManagerTracks track, float duration, float initialVolume = 0f, float finalVolume = 1f, MMTweenType tweenType = null) + { + Coroutine coroutine = StartCoroutine(FadeTrackCoroutine(track, duration, initialVolume, finalVolume, tweenType)); + _fadeTrackCoroutines[track] = coroutine; + } + + /// + /// Fades a target sound towards a final volume over time + /// + /// + /// + /// + /// + /// + public virtual void FadeSound(AudioSource source, float duration, float initialVolume, float finalVolume, MMTweenType tweenType, bool freeAfterFade = false) + { + Coroutine coroutine = StartCoroutine(FadeCoroutine(source, duration, initialVolume, finalVolume, tweenType, freeAfterFade)); + if (initialVolume < finalVolume) + { + _fadeInSoundCoroutines[source] = coroutine; + } + else + { + _fadeOutSoundCoroutines[source] = coroutine; + } + } + + /// + /// Returns true if the specified source is already fading, false otherwise + /// + /// + /// + public virtual bool SoundIsFadingIn(AudioSource source) + { + if (_fadeInSoundCoroutines.TryGetValue(source, out Coroutine co)) + { + return (_fadeInSoundCoroutines[source] != null); + } + + return false; + } + + /// + /// Returns true if the specified source is already fading, false otherwise + /// + /// + /// + public virtual bool SoundIsFadingOut(AudioSource source) + { + if (_fadeOutSoundCoroutines.TryGetValue(source, out Coroutine co)) + { + return (_fadeOutSoundCoroutines[source] != null); + } + + return false; + } + + /// + /// Stops any fade currently happening on the specified track + /// + /// + public virtual void StopFadeTrack(MMSoundManagerTracks track) + { + Coroutine outCoroutine; + if (_fadeTrackCoroutines.TryGetValue(track, out outCoroutine)) + { + StopCoroutine(outCoroutine); + _fadeTrackCoroutines.Remove(track); + } + } + + /// + /// Stops any fade currently happening on the specified sound + /// + /// + public virtual void StopFadeSound(AudioSource source) + { + Coroutine outCoroutine; + if ((source != null) && (_fadeInSoundCoroutines.TryGetValue(source, out outCoroutine))) + { + if (outCoroutine != null) + { + StopCoroutine(outCoroutine); + _fadeInSoundCoroutines.Remove(source); + } + } + if ((source != null) && (_fadeOutSoundCoroutines.TryGetValue(source, out outCoroutine))) + { + if (outCoroutine != null) + { + StopCoroutine(outCoroutine); + _fadeOutSoundCoroutines.Remove(source); + } + } + } + + /// + /// Fades an entire track over time + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator FadeTrackCoroutine(MMSoundManagerTracks track, float duration, float initialVolume, float finalVolume, MMTweenType tweenType) + { + float startedAt = Time.unscaledTime; + if (tweenType == null) + { + tweenType = new MMTweenType(MMTween.MMTweenCurve.EaseInOutQuartic); + } + while (Time.unscaledTime - startedAt <= duration) + { + float elapsedTime = Time.unscaledTime - startedAt; + float newVolume = MMTween.Tween(elapsedTime, 0f, duration, initialVolume, finalVolume, tweenType); + settingsSo.SetTrackVolume(track, newVolume); + yield return null; + } + settingsSo.SetTrackVolume(track, finalVolume); + } + + /// + /// Fades an audiosource's volume over time + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator FadeCoroutine(AudioSource source, float duration, float initialVolume, float finalVolume, MMTweenType tweenType, bool freeAfterFade = false) + { + float startedAt = Time.unscaledTime; + if (tweenType == null) + { + tweenType = new MMTweenType(MMTween.MMTweenCurve.EaseInOutQuartic); + } + while (Time.unscaledTime - startedAt <= duration) + { + float elapsedTime = Time.unscaledTime - startedAt; + float newVolume = MMTween.Tween(elapsedTime, 0f, duration, initialVolume, finalVolume, tweenType); + source.volume = newVolume; + yield return null; + } + source.volume = finalVolume; + + if (freeAfterFade) + { + FreeSound(source); + } + + if (initialVolume < finalVolume) + { + _fadeInSoundCoroutines[source] = null; + } + else + { + _fadeOutSoundCoroutines[source] = null; + } + } + + #endregion + + #region Solo + + /// + /// Mutes all sounds playing on a specific track + /// + /// + /// + /// + public virtual void MuteSoundsOnTrack(MMSoundManagerTracks track, bool mute, float delay = 0f) + { + StartCoroutine(MuteSoundsOnTrackCoroutine(track, mute, delay)); + } + + /// + /// Mutes all sounds playing on the MMSoundManager + /// + /// + public virtual void MuteAllSounds(bool mute = true) + { + StartCoroutine(MuteAllSoundsCoroutine(0f, mute)); + } + + /// + /// Mutes all sounds on the specified track after an optional delay + /// + /// + /// + /// + /// + protected virtual IEnumerator MuteSoundsOnTrackCoroutine(MMSoundManagerTracks track, bool mute, float delay) + { + if (delay > 0) + { + yield return MMCoroutine.WaitForUnscaled(delay); + } + + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.Track == track) + { + sound.Source.mute = mute; + } + } + } + + /// + /// Mutes all sounds after an optional delay + /// + /// + /// + /// + protected virtual IEnumerator MuteAllSoundsCoroutine(float delay, bool mute = true) + { + if (delay > 0) + { + yield return MMCoroutine.WaitForUnscaled(delay); + } + foreach (MMSoundManagerSound sound in _sounds) + { + sound.Source.mute = mute; + } + } + + #endregion + + #region Find + + /// + /// Returns an audio source played with the specified ID, if one is found + /// + /// + /// + public virtual AudioSource FindByID(int ID) + { + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.ID == ID) + { + return sound.Source; + } + } + + return null; + } + + /// + /// Returns an audio source played with the specified ID, if one is found + /// + /// + /// + public virtual AudioSource FindByClip(AudioClip clip) + { + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.Source.clip == clip) + { + return sound.Source; + } + } + + return null; + } + + #endregion + + #region AllSoundsControls + + /// + /// Pauses all sounds playing on the MMSoundManager + /// + public virtual void PauseAllSounds() + { + foreach (MMSoundManagerSound sound in _sounds) + { + sound.Source.Pause(); + } + } + + /// + /// Plays all sounds playing on the MMSoundManager + /// + public virtual void PlayAllSounds() + { + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.Source.isActiveAndEnabled) + { + sound.Source.Play(); + } + } + } + + /// + /// Stops all sounds playing on the MMSoundManager + /// + public virtual void StopAllSounds() + { + foreach (MMSoundManagerSound sound in _sounds) + { + sound.Source.Stop(); + } + } + + /// + /// Stops all sounds and returns them to the pool + /// + public virtual void FreeAllSounds() + { + foreach (MMSoundManagerSound sound in _sounds) + { + if (sound.Source != null) + { + FreeSound(sound.Source); + } + } + } + + /// + /// Stops all sounds except the persistent ones, and returns them to the pool + /// + public virtual void FreeAllSoundsButPersistent() + { + foreach (MMSoundManagerSound sound in _sounds) + { + if ((!sound.Persistent) && (sound.Source != null)) + { + FreeSound(sound.Source); + } + } + } + + /// + /// Stops all looping sounds and returns them to the pool + /// + public virtual void FreeAllLoopingSounds() + { + foreach (MMSoundManagerSound sound in _sounds) + { + if ((sound.Source.loop) && (sound.Source != null)) + { + FreeSound(sound.Source); + } + } + } + + #endregion + + #region Events + + /// + /// Registered on enable, triggers every time a new scene is loaded + /// At which point we free all sounds except the persistent ones + /// + protected virtual void OnSceneLoaded(Scene arg0, LoadSceneMode loadSceneMode) + { + FreeAllSoundsButPersistent(); + } + + public virtual void OnMMEvent(MMSoundManagerTrackEvent soundManagerTrackEvent) + { + switch (soundManagerTrackEvent.TrackEventType) + { + case MMSoundManagerTrackEventTypes.MuteTrack: + MuteTrack(soundManagerTrackEvent.Track); + break; + case MMSoundManagerTrackEventTypes.UnmuteTrack: + UnmuteTrack(soundManagerTrackEvent.Track); + break; + case MMSoundManagerTrackEventTypes.SetVolumeTrack: + SetTrackVolume(soundManagerTrackEvent.Track, soundManagerTrackEvent.Volume); + break; + case MMSoundManagerTrackEventTypes.PlayTrack: + PlayTrack(soundManagerTrackEvent.Track); + break; + case MMSoundManagerTrackEventTypes.PauseTrack: + PauseTrack(soundManagerTrackEvent.Track); + break; + case MMSoundManagerTrackEventTypes.StopTrack: + StopTrack(soundManagerTrackEvent.Track); + break; + case MMSoundManagerTrackEventTypes.FreeTrack: + FreeTrack(soundManagerTrackEvent.Track); + break; + } + } + + public virtual void OnMMEvent(MMSoundManagerEvent soundManagerEvent) + { + switch (soundManagerEvent.EventType) + { + case MMSoundManagerEventTypes.SaveSettings: + SaveSettings(); + break; + case MMSoundManagerEventTypes.LoadSettings: + settingsSo.LoadSoundSettings(); + break; + case MMSoundManagerEventTypes.ResetSettings: + settingsSo.ResetSoundSettings(); + break; + } + } + + /// + /// Save sound settings to file + /// + public virtual void SaveSettings() + { + settingsSo.SaveSoundSettings(); + } + + /// + /// Loads sound settings from file + /// + public virtual void LoadSettings() + { + settingsSo.LoadSoundSettings(); + } + + /// + /// Deletes any saved sound settings + /// + public virtual void ResetSettings() + { + settingsSo.ResetSoundSettings(); + } + + public virtual void OnMMEvent(MMSoundManagerSoundControlEvent soundControlEvent) + { + if (soundControlEvent.TargetSource == null) + { + _tempAudioSource = FindByID(soundControlEvent.SoundID); + } + else + { + _tempAudioSource = soundControlEvent.TargetSource; + } + + if (_tempAudioSource != null) + { + switch (soundControlEvent.MMSoundManagerSoundControlEventType) + { + case MMSoundManagerSoundControlEventTypes.Pause: + PauseSound(_tempAudioSource); + break; + case MMSoundManagerSoundControlEventTypes.Resume: + ResumeSound(_tempAudioSource); + break; + case MMSoundManagerSoundControlEventTypes.Stop: + StopSound(_tempAudioSource); + break; + case MMSoundManagerSoundControlEventTypes.Free: + FreeSound(_tempAudioSource); + break; + } + } + } + + public virtual void OnMMEvent(MMSoundManagerTrackFadeEvent trackFadeEvent) + { + switch (trackFadeEvent.Mode) + { + case MMSoundManagerTrackFadeEvent.Modes.PlayFade: + FadeTrack(trackFadeEvent.Track, trackFadeEvent.FadeDuration, settingsSo.GetTrackVolume(trackFadeEvent.Track), trackFadeEvent.FinalVolume, trackFadeEvent.FadeTween); + break; + case MMSoundManagerTrackFadeEvent.Modes.StopFade: + StopFadeTrack(trackFadeEvent.Track); + break; + } + } + + public virtual void OnMMEvent(MMSoundManagerSoundFadeEvent soundFadeEvent) + { + _tempAudioSource = FindByID(soundFadeEvent.SoundID); + switch (soundFadeEvent.Mode) + { + case MMSoundManagerSoundFadeEvent.Modes.PlayFade: + if (_tempAudioSource != null) + { + FadeSound(_tempAudioSource, soundFadeEvent.FadeDuration, _tempAudioSource.volume, soundFadeEvent.FinalVolume, + soundFadeEvent.FadeTween); + } + break; + case MMSoundManagerSoundFadeEvent.Modes.StopFade: + StopFadeSound(_tempAudioSource); + break; + } + } + + public virtual void OnMMEvent(MMSoundManagerAllSoundsControlEvent allSoundsControlEvent) + { + switch (allSoundsControlEvent.EventType) + { + case MMSoundManagerAllSoundsControlEventTypes.Pause: + PauseAllSounds(); + break; + case MMSoundManagerAllSoundsControlEventTypes.Play: + PlayAllSounds(); + break; + case MMSoundManagerAllSoundsControlEventTypes.Stop: + StopAllSounds(); + break; + case MMSoundManagerAllSoundsControlEventTypes.Free: + FreeAllSounds(); + break; + case MMSoundManagerAllSoundsControlEventTypes.FreeAllButPersistent: + FreeAllSoundsButPersistent(); + break; + case MMSoundManagerAllSoundsControlEventTypes.FreeAllLooping: + FreeAllLoopingSounds(); + break; + } + } + + public virtual void OnMMSfxEvent(AudioClip clipToPlay, AudioMixerGroup audioGroup = null, float volume = 1f, float pitch = 1f, int priority = 128) + { + MMSoundManagerPlayOptions options = MMSoundManagerPlayOptions.Default; + options.Location = this.transform.position; + options.AudioGroup = audioGroup; + options.Volume = volume; + options.Pitch = pitch; + if (priority >= 0) + { + options.Priority = Mathf.Min(priority, 256); + } + options.MmSoundManagerTrack = MMSoundManagerTracks.Sfx; + options.Loop = false; + + PlaySound(clipToPlay, options); + } + + public virtual AudioSource OnMMSoundManagerSoundPlayEvent(AudioClip clip, MMSoundManagerPlayOptions options) + { + return PlaySound(clip, options); + } + + /// + /// On enable we start listening for events + /// + protected virtual void OnEnable() + { + MMSfxEvent.Register(OnMMSfxEvent); + MMSoundManagerSoundPlayEvent.Register(OnMMSoundManagerSoundPlayEvent); + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + + SceneManager.sceneLoaded += OnSceneLoaded; + } + + /// + /// On disable we stop listening for events + /// + protected virtual void OnDisable() + { + if (_enabled) + { + MMSfxEvent.Unregister(OnMMSfxEvent); + MMSoundManagerSoundPlayEvent.Unregister(OnMMSoundManagerSoundPlayEvent); + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + + SceneManager.sceneLoaded -= OnSceneLoaded; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManager.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManager.cs.meta new file mode 100644 index 0000000..7c200c2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 614edb33c38bcf949846d5675f29f9fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - settingsSo: {fileID: 11400000, guid: 07ea3ff88e1ecb84d91f58aa804badc6, type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerAudioPool.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerAudioPool.cs new file mode 100644 index 0000000..73517ae --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerAudioPool.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// This class manages an object pool of audiosources + /// + [Serializable] + public class MMSoundManagerAudioPool + { + protected List _pool; + + /// + /// Fills the pool with ready-to-use audiosources + /// + /// + /// + public virtual void FillAudioSourcePool(int poolSize, Transform parent) + { + if (_pool == null) + { + _pool = new List(); + } + + if ((poolSize <= 0) || (_pool.Count >= poolSize)) + { + return; + } + + foreach (AudioSource source in _pool) + { + UnityEngine.Object.Destroy(source.gameObject); + } + + for (int i = 0; i < poolSize; i++) + { + GameObject temporaryAudioHost = new GameObject("MMAudioSourcePool_"+i); + SceneManager.MoveGameObjectToScene(temporaryAudioHost.gameObject, parent.gameObject.scene); + AudioSource tempSource = temporaryAudioHost.AddComponent(); + MMFollowTarget followTarget = temporaryAudioHost.AddComponent(); + followTarget.enabled = false; + followTarget.DisableSelfOnSetActiveFalse = true; + temporaryAudioHost.transform.SetParent(parent); + temporaryAudioHost.SetActive(false); + _pool.Add(tempSource); + } + } + + /// + /// Disables an audio source after it's done playing + /// + /// + /// + /// + public virtual IEnumerator AutoDisableAudioSource(float duration, AudioSource source, AudioClip clip, bool doNotAutoRecycleIfNotDonePlaying, float playbackTime, float playbackDuration) + { + while (source.time == 0 && source.isPlaying) + { + yield return null; + } + float initialWait = (playbackDuration > 0) ? playbackDuration : duration; + yield return MMCoroutine.WaitForUnscaled(initialWait); + if (source.clip != clip) + { + yield break; + } + if (doNotAutoRecycleIfNotDonePlaying) + { + float maxTime = (playbackDuration > 0) ? playbackTime + playbackDuration : source.clip.length; + while ((source.time != 0) && (source.time <= maxTime)) + { + yield return null; + } + } + source.gameObject.SetActive(false); + } + + /// + /// Pulls an available audio source from the pool + /// + /// + /// + /// + public virtual AudioSource GetAvailableAudioSource(bool poolCanExpand, Transform parent) + { + foreach (AudioSource source in _pool) + { + if (!source.gameObject.activeInHierarchy) + { + source.gameObject.SetActive(true); + return source; + } + } + + if (poolCanExpand) + { + GameObject temporaryAudioHost = new GameObject("MMAudioSourcePool_"+_pool.Count); + SceneManager.MoveGameObjectToScene(temporaryAudioHost.gameObject, parent.gameObject.scene); + AudioSource tempSource = temporaryAudioHost.AddComponent(); + temporaryAudioHost.transform.SetParent(parent); + temporaryAudioHost.SetActive(true); + _pool.Add(tempSource); + return tempSource; + } + + return null; + } + + /// + /// Stops an audiosource and returns it to the pool + /// + /// + /// + public virtual bool FreeSound(AudioSource sourceToStop) + { + foreach (AudioSource source in _pool) + { + if (source == sourceToStop) + { + source.Stop(); + source.gameObject.SetActive(false); + return true; + } + } + return false; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerAudioPool.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerAudioPool.cs.meta new file mode 100644 index 0000000..b243188 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerAudioPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ca15a4a57ce0a947835411d7c771538 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerPlayOptions.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerPlayOptions.cs new file mode 100644 index 0000000..c298317 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerPlayOptions.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Audio; + +namespace MoreMountains.Tools +{ + /// + /// A class used to store options for MMSoundManager play + /// + [Serializable] + public struct MMSoundManagerPlayOptions + { + [HideInInspector] + public bool Initialized; + + [Header("Track")] + /// the track on which to play the sound + public MMSoundManager.MMSoundManagerTracks MmSoundManagerTrack; + /// an audiogroup to use if you don't want to play on any of the preset tracks + public AudioMixerGroup AudioGroup; + + [Header("Sound")] + /// whether or not the sound should loop + public bool Loop; + /// the volume at which to play the sound + [Range(0f,2f)] + public float Volume; + /// The pitch of the audio source. + [Range(-3f,3f)] + public float Pitch; + + /// the ID of the sound, useful to find that sound again later + public int ID; + + [Header("Fade")] + /// whether or not to fade the sound when playing it + public bool Fade; + /// the initial volume of the sound, before the fade + [MMCondition("Fade", true)] + public float FadeInitialVolume; + /// the duration of the fade, in seconds + [MMCondition("Fade", true)] + public float FadeDuration; + /// the tween to use when fading the sound + [MMCondition("Fade", true)] + public MMTweenType FadeTween; + + + /// whether or not the sound should persist over scene transitions + public bool Persistent; + /// an AudioSource to use if you don't want to pick one from the pool + public AudioSource RecycleAudioSource; + + [Header("Time")] + /// The time (in seconds) at which to start playing the sound + public float PlaybackTime; + /// The time (in seconds after which to stop playing the sound + public float PlaybackDuration; + + [Header("Spatial Settings")] + /// Pans a playing sound in a stereo way (left or right). This only applies to sounds that are Mono or Stereo. + [Range(-1f,1f)] + public float PanStereo; + /// Sets how much this AudioSource is affected by 3D spatialisation calculations (attenuation, doppler etc). 0.0 makes the sound full 2D, 1.0 makes it full 3D. + [Range(0f,1f)] + public float SpatialBlend; + /// a Transform this sound can 'attach' to and follow it along as it plays + public Transform AttachToTransform; + + [Header("Solo")] + /// whether or not this sound should play in solo mode over its destination track. If yes, all other sounds on that track will be muted when this sound starts playing + public bool SoloSingleTrack; + /// whether or not this sound should play in solo mode over all other tracks. If yes, all other tracks will be muted when this sound starts playing + public bool SoloAllTracks; + /// if in any of the solo modes, AutoUnSoloOnEnd will unmute the track(s) automatically once that sound stops playing + public bool AutoUnSoloOnEnd; + /// Bypass effects (Applied from filter components or global listener filters). + public bool BypassEffects; + /// When set global effects on the AudioListener will not be applied to the audio signal generated by the AudioSource. Does not apply if the AudioSource is playing into a mixer group. + public bool BypassListenerEffects; + /// When set doesn't route the signal from an AudioSource into the global reverb associated with reverb zones. + public bool BypassReverbZones; + /// Sets the priority of the AudioSource. + [Range(0, 256)] + public int Priority; + /// The amount by which the signal from the AudioSource will be mixed into the global reverb associated with the Reverb Zones. + [Range(0f,1.1f)] + public float ReverbZoneMix; + + [Header("3D Sound Settings")] + /// Sets the Doppler scale for this AudioSource. + [Range(0f,5f)] + public float DopplerLevel; + /// the location at which to position the sound + public Vector3 Location; + /// Sets the spread angle (in degrees) of a 3d stereo or multichannel sound in speaker space. + [Range(0,360)] + public int Spread; + /// Sets/Gets how the AudioSource attenuates over distance. + public AudioRolloffMode RolloffMode; + /// Within the Min distance the AudioSource will cease to grow louder in volume. + public float MinDistance; + /// (Logarithmic rolloff) MaxDistance is the distance a sound stops attenuating at. + public float MaxDistance; + /// Whether or not the source should be auto recycled if not done playing + public bool DoNotAutoRecycleIfNotDonePlaying; + /// whether or not to use a custom curve for custom volume rolloff + public bool UseCustomRolloffCurve; + /// the curve to use for custom volume rolloff if UseCustomRolloffCurve is true + [MMCondition("UseCustomRolloffCurve", true)] + public AnimationCurve CustomRolloffCurve; + /// whether or not to use a custom curve for spatial blend + public bool UseSpatialBlendCurve; + /// the curve to use for custom spatial blend if UseSpatialBlendCurve is true + [MMCondition("UseSpatialBlendCurve", true)] + public AnimationCurve SpatialBlendCurve; + /// whether or not to use a custom curve for reverb zone mix + public bool UseReverbZoneMixCurve; + /// the curve to use for custom reverb zone mix if UseReverbZoneMixCurve is true + [MMCondition("UseReverbZoneMixCurve", true)] + public AnimationCurve ReverbZoneMixCurve; + /// whether or not to use a custom curve for spread + public bool UseSpreadCurve; + /// the curve to use for custom spread if UseSpreadCurve is true + [MMCondition("UseSpreadCurve", true)] + public AnimationCurve SpreadCurve; + + /// + /// A default set of options, meant to suit most common cases. + /// When using options, it's a good idea to start with that and override only what you need to. + /// + /// Example : + /// + /// MMSoundManagerPlayOptions options = MMSoundManagerPlayOptions.Default; + /// options.Loop = Loop; + /// options.Location = Vector3.zero; + /// options.MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Music; + /// + /// MMSoundManagerSoundPlayEvent.Trigger(SoundClip, options); + /// + /// Here we initialize a new local options set, override its loop, location and track settings, and call a play event using it + /// + /// + public static MMSoundManagerPlayOptions Default + { + get + { + MMSoundManagerPlayOptions defaultOptions = new MMSoundManagerPlayOptions(); + defaultOptions.Initialized = true; + defaultOptions.MmSoundManagerTrack = MMSoundManager.MMSoundManagerTracks.Sfx; + defaultOptions.Location = Vector3.zero; + defaultOptions.Loop = false; + defaultOptions.Volume = 1.0f; + defaultOptions.ID = 0; + defaultOptions.Fade = false; + defaultOptions.FadeInitialVolume = 0f; + defaultOptions.FadeDuration = 1f; + defaultOptions.FadeTween = MMTweenType.DefaultEaseInCubic; + defaultOptions.Persistent = false; + defaultOptions.RecycleAudioSource = null; + defaultOptions.AudioGroup = null; + defaultOptions.Pitch = 1f; + defaultOptions.PanStereo = 0f; + defaultOptions.SpatialBlend = 0.0f; + defaultOptions.SoloSingleTrack = false; + defaultOptions.SoloAllTracks = false; + defaultOptions.AutoUnSoloOnEnd = false; + defaultOptions.BypassEffects = false; + defaultOptions.BypassListenerEffects = false; + defaultOptions.BypassReverbZones = false; + defaultOptions.Priority = 128; + defaultOptions.ReverbZoneMix = 1f; + defaultOptions.DopplerLevel = 1f; + defaultOptions.Spread = 0; + defaultOptions.RolloffMode = AudioRolloffMode.Logarithmic; + defaultOptions.MinDistance = 1f; + defaultOptions.MaxDistance = 500f; + defaultOptions.DoNotAutoRecycleIfNotDonePlaying = true; + return defaultOptions; + } + } + } + +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerPlayOptions.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerPlayOptions.cs.meta new file mode 100644 index 0000000..1a7a358 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerPlayOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 123f46c3aae9cbd4bba38e5dcf9cecae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettings.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettings.cs new file mode 100644 index 0000000..314c84f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettings.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This class stores MMSoundManager settings and lets you tweak them from the MMSoundManagerSettingsSO's inspector + /// + [Serializable] + public class MMSoundManagerSettings + { + public const float _minimalVolume = 0.0001f; + public const float _maxVolume = 10f; + public const float _defaultVolume = 1f; + + [Header("Audio Mixer Control")] + /// whether or not the settings described below should override the ones defined in the AudioMixer + [Tooltip("whether or not the settings described below should override the ones defined in the AudioMixer")] + public bool OverrideMixerSettings = true; + + [Header("Audio Mixer Exposed Parameters")] + /// the name of the exposed MasterVolume parameter in the AudioMixer + [Tooltip("the name of the exposed MasterVolume parameter in the AudioMixer")] + public string MasterVolumeParameter = "MasterVolume"; + /// the name of the exposed MusicVolume parameter in the AudioMixer + [Tooltip("the name of the exposed MusicVolume parameter in the AudioMixer")] + public string MusicVolumeParameter = "MusicVolume"; + /// the name of the exposed SfxVolume parameter in the AudioMixer + [Tooltip("the name of the exposed SfxVolume parameter in the AudioMixer")] + public string SfxVolumeParameter = "SfxVolume"; + /// the name of the exposed UIVolume parameter in the AudioMixer + [Tooltip("the name of the exposed UIVolume parameter in the AudioMixer")] + public string UIVolumeParameter = "UIVolume"; + + [Header("Master")] + /// the master volume + [Range(_minimalVolume,_maxVolume)] + [Tooltip("the master volume")] + [MMReadOnly] + public float MasterVolume = _defaultVolume; + /// whether the master track is active at the moment or not + [Tooltip("whether the master track is active at the moment or not")] + [MMReadOnly] + public bool MasterOn = true; + /// the volume of the master track before it was muted + [Tooltip("the volume of the master track before it was muted")] + [MMReadOnly] + public float MutedMasterVolume; + + [Header("Music")] + /// the music volume + [Range(_minimalVolume,_maxVolume)] + [Tooltip("the music volume")] + [MMReadOnly] + public float MusicVolume = _defaultVolume; + /// whether the music track is active at the moment or not + [Tooltip("whether the music track is active at the moment or not")] + [MMReadOnly] + public bool MusicOn = true; + /// the volume of the music track before it was muted + [Tooltip("the volume of the music track before it was muted")] + [MMReadOnly] + public float MutedMusicVolume; + + [Header("Sound Effects")] + /// the sound fx volume + [Range(_minimalVolume,_maxVolume)] + [Tooltip("the sound fx volume")] + [MMReadOnly] + public float SfxVolume = _defaultVolume; + /// whether the SFX track is active at the moment or not + [Tooltip("whether the SFX track is active at the moment or not")] + [MMReadOnly] + public bool SfxOn = true; + /// the volume of the SFX track before it was muted + [Tooltip("the volume of the SFX track before it was muted")] + [MMReadOnly] + public float MutedSfxVolume; + + [Header("UI")] + /// the UI sounds volume + [Range(_minimalVolume,_maxVolume)] + [Tooltip("the UI sounds volume")] + [MMReadOnly] + public float UIVolume = _defaultVolume; + /// whether the UI track is active at the moment or not + [Tooltip("whether the UI track is active at the moment or not")] + [MMReadOnly] + public bool UIOn = true; + /// the volume of the UI track before it was muted + [Tooltip("the volume of the UI track before it was muted")] + [MMReadOnly] + public float MutedUIVolume; + + [Header("Save & Load")] + /// whether or not the MMSoundManager should automatically load settings when starting + [Tooltip("whether or not the MMSoundManager should automatically load settings when starting")] + public bool AutoLoad = true; + /// whether or not each change in the settings should be automaticall saved. If not, you'll have to call a save MMSoundManager event for settings to be saved. + [Tooltip("whether or not each change in the settings should be automaticall saved. If not, you'll have to call a save MMSoundManager event for settings to be saved.")] + public bool AutoSave = false; + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettings.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettings.cs.meta new file mode 100644 index 0000000..ebaf098 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 504ec383a394760468beec53f890add9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettingsSO.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettingsSO.cs new file mode 100644 index 0000000..c9a36ae --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettingsSO.cs @@ -0,0 +1,210 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Unity.Collections; +using UnityEngine; +using UnityEngine.Audio; + +namespace MoreMountains.Tools +{ + /// + /// A class to save sound settings (music on or off, sfx on or off) + /// + [Serializable] + [CreateAssetMenu(menuName = "MoreMountains/Audio/MMSoundManagerSettings")] + public class MMSoundManagerSettingsSO : ScriptableObject + { + [Header("Audio Mixer")] + /// the audio mixer to use when playing sounds + [Tooltip("the audio mixer to use when playing sounds")] + public AudioMixer TargetAudioMixer; + /// the master group + [Tooltip("the master group")] + public AudioMixerGroup MasterAudioMixerGroup; + /// the group on which to play all music sounds + [Tooltip("the group on which to play all music sounds")] + public AudioMixerGroup MusicAudioMixerGroup; + /// the group on which to play all sound effects + [Tooltip("the group on which to play all sound effects")] + public AudioMixerGroup SfxAudioMixerGroup; + /// the group on which to play all UI sounds + [Tooltip("the group on which to play all UI sounds")] + public AudioMixerGroup UIAudioMixerGroup; + /// the multiplier to apply when converting normalized volume values to audio mixer values + [Tooltip("the multiplier to apply when converting normalized volume values to audio mixer values")] + public float MixerValuesMultiplier = 20; + + [Header("Settings Unfold")] + /// the full settings for this MMSoundManager + [Tooltip("the full settings for this MMSoundManager")] + public MMSoundManagerSettings Settings; + + protected const string _saveFolderName = "MMSoundManager/"; + protected const string _saveFileName = "mmsound.settings"; + + #region SaveAndLoad + + /// + /// Saves the sound settings to file + /// + public virtual void SaveSoundSettings() + { + MMSaveLoadManager.Save(this.Settings, _saveFileName, _saveFolderName); + } + + /// + /// Loads the sound settings from file (if found) + /// + public virtual void LoadSoundSettings() + { + if (Settings.OverrideMixerSettings) + { + MMSoundManagerSettings settings = + (MMSoundManagerSettings) MMSaveLoadManager.Load(typeof(MMSoundManagerSettings), _saveFileName, + _saveFolderName); + + if (settings != null) + { + this.Settings = settings; + ApplyTrackVolumes(); + } + + MMSoundManagerEvent.Trigger(MMSoundManagerEventTypes.SettingsLoaded); + } + } + + /// + /// Resets the sound settings by destroying the save file + /// + public virtual void ResetSoundSettings() + { + MMSaveLoadManager.DeleteSave(_saveFileName, _saveFolderName); + } + + #endregion + + #region Volume + + /// + /// sets the volume of the selected track to the value passed in parameters + /// + /// + /// + public virtual void SetTrackVolume(MMSoundManager.MMSoundManagerTracks track, float volume) + { + if (volume <= 0f) + { + volume = MMSoundManagerSettings._minimalVolume; + } + + switch (track) + { + case MMSoundManager.MMSoundManagerTracks.Master: + TargetAudioMixer.SetFloat(Settings.MasterVolumeParameter, NormalizedToMixerVolume(volume)); + Settings.MasterVolume = volume; + break; + case MMSoundManager.MMSoundManagerTracks.Music: + TargetAudioMixer.SetFloat(Settings.MusicVolumeParameter, NormalizedToMixerVolume(volume)); + Settings.MusicVolume = volume; + break; + case MMSoundManager.MMSoundManagerTracks.Sfx: + TargetAudioMixer.SetFloat(Settings.SfxVolumeParameter, NormalizedToMixerVolume(volume)); + Settings.SfxVolume = volume; + break; + case MMSoundManager.MMSoundManagerTracks.UI: + TargetAudioMixer.SetFloat(Settings.UIVolumeParameter, NormalizedToMixerVolume(volume)); + Settings.UIVolume = volume; + break; + } + + if (Settings.AutoSave) + { + SaveSoundSettings(); + } + } + + /// + /// Returns the volume of the specified track + /// + /// + /// + public virtual float GetTrackVolume(MMSoundManager.MMSoundManagerTracks track) + { + float volume = 1f; + switch (track) + { + case MMSoundManager.MMSoundManagerTracks.Master: + TargetAudioMixer.GetFloat(Settings.MasterVolumeParameter, out volume); + break; + case MMSoundManager.MMSoundManagerTracks.Music: + TargetAudioMixer.GetFloat(Settings.MusicVolumeParameter, out volume); + break; + case MMSoundManager.MMSoundManagerTracks.Sfx: + TargetAudioMixer.GetFloat(Settings.SfxVolumeParameter, out volume); + break; + case MMSoundManager.MMSoundManagerTracks.UI: + TargetAudioMixer.GetFloat(Settings.UIVolumeParameter, out volume); + break; + } + + return MixerVolumeToNormalized(volume); + } + + /// + /// assigns the volume of each track to the settings values + /// + public virtual void GetTrackVolumes() + { + Settings.MasterVolume = GetTrackVolume(MMSoundManager.MMSoundManagerTracks.Master); + Settings.MusicVolume = GetTrackVolume(MMSoundManager.MMSoundManagerTracks.Music); + Settings.SfxVolume = GetTrackVolume(MMSoundManager.MMSoundManagerTracks.Sfx); + Settings.UIVolume = GetTrackVolume(MMSoundManager.MMSoundManagerTracks.UI); + } + + /// + /// applies volume to all tracks and saves if needed + /// + protected virtual void ApplyTrackVolumes() + { + if (Settings.OverrideMixerSettings) + { + TargetAudioMixer.SetFloat(Settings.MasterVolumeParameter, NormalizedToMixerVolume(Settings.MasterVolume)); + TargetAudioMixer.SetFloat(Settings.MusicVolumeParameter, NormalizedToMixerVolume(Settings.MusicVolume)); + TargetAudioMixer.SetFloat(Settings.SfxVolumeParameter, NormalizedToMixerVolume(Settings.SfxVolume)); + TargetAudioMixer.SetFloat(Settings.UIVolumeParameter, NormalizedToMixerVolume(Settings.UIVolume)); + + if (!Settings.MasterOn) { TargetAudioMixer.SetFloat(Settings.MasterVolumeParameter, -80f); } + if (!Settings.MusicOn) { TargetAudioMixer.SetFloat(Settings.MusicVolumeParameter, -80f); } + if (!Settings.SfxOn) { TargetAudioMixer.SetFloat(Settings.SfxVolumeParameter, -80f); } + if (!Settings.UIOn) { TargetAudioMixer.SetFloat(Settings.UIVolumeParameter, -80f); } + + if (Settings.AutoSave) + { + SaveSoundSettings(); + } + } + } + + /// + /// Converts a normalized volume to the mixer group db scale + /// + /// + /// + public virtual float NormalizedToMixerVolume(float normalizedVolume) + { + return Mathf.Log10(normalizedVolume) * MixerValuesMultiplier; + } + + /// + /// Converts mixer volume to a normalized value + /// + /// + /// + public virtual float MixerVolumeToNormalized(float mixerVolume) + { + return (float)Math.Pow(10, (mixerVolume / MixerValuesMultiplier)); + } + + #endregion Volume + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettingsSO.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettingsSO.cs.meta new file mode 100644 index 0000000..3b3fb25 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSettingsSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa48f53704ecf834c9f5e203a06874d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSound.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSound.cs new file mode 100644 index 0000000..0ca0227 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSound.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A simple struct used to store information about the sounds played by the MMSoundManager + /// + [Serializable] + public struct MMSoundManagerSound + { + /// the ID of the sound + public int ID; + /// the track the sound is being played on + public MMSoundManager.MMSoundManagerTracks Track; + /// the associated audiosource + public AudioSource Source; + /// whether or not this sound will play over multiple scenes + public bool Persistent; + + public float PlaybackTime; + public float PlaybackDuration; + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSound.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSound.cs.meta new file mode 100644 index 0000000..0e13321 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerSound.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f351cd555ef38d4d8b69d8be107ce7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerTrackVolumeSlider.cs b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerTrackVolumeSlider.cs new file mode 100644 index 0000000..29d10e6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerTrackVolumeSlider.cs @@ -0,0 +1,206 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// You can add this class to a slider in your UI and it'll let you control a target Track volume + /// via the MMSoundManager + /// + public class MMSoundManagerTrackVolumeSlider : MonoBehaviour, + MMEventListener, + MMEventListener, + MMEventListener + { + /// + /// The possible modes this slider can be in + /// - Read : the slider will move to reflect the volume of the track + /// - Write : the value of the slider will be applied to the volume of the track + /// This slider can also listen for events (mute, unmute, fade, volume change) and automatically switch to read mode + /// if one is caught. This means that most of the time, the slider is in write mode, and switches to read mode only + /// when needed, to be always accurate + /// + public enum Modes { Read, Write } + + [Header("Track Volume Settings")] + /// The track to change volume on + [Tooltip("The track to change volume on")] + public MMSoundManager.MMSoundManagerTracks Track; + /// The volume to apply to the track when the slider is at its minimum + [Tooltip("The volume to apply to the track when the slider is at its minimum")] + public float MinVolume = 0f; + /// The volume to apply to the track when the slider is at its maximum + [Tooltip("The volume to apply to the track when the slider is at its maximum")] + public float MaxVolume = 1f; + + [Header("Read/Write Mode")] + /// in read mode, the value of the slider will be applied to the volume of the track. in read mode, the slider will move to reflect the volume of the track + [Tooltip("in read mode, the value of the slider will be applied to the volume of the track. in read mode, the slider will move to reflect the volume of the track")] + public Modes Mode = Modes.Write; + /// if this is true, the slider will automatically switch to read mode for the required duration when a track fade event is caught + [Tooltip("if this is true, the slider will automatically switch to read mode for the required duration when a track fade event is caught")] + public bool ChangeModeOnTrackFade = true; + /// if this is true, the slider will automatically switch to read mode for the required duration when a track mute event is caught + [Tooltip("if this is true, the slider will automatically switch to read mode for the required duration when a track mute event is caught")] + public bool ChangeModeOnMute = true; + /// if this is true, the slider will automatically switch to read mode for the required duration when a track unmute event is caught + [Tooltip("if this is true, the slider will automatically switch to read mode for the required duration when a track unmute event is caught")] + public bool ChangeModeOnUnmute = true; + /// if this is true, the slider will automatically switch to read mode for the required duration when a track volume change event is caught + [Tooltip("if this is true, the slider will automatically switch to read mode for the required duration when a track volume change event is caught")] + public bool ChangeModeOnTrackVolumeChange = false; + /// when switching automatically (and temporarily) to Read Mode, the minimum duration the slider will remain in that mode + [Tooltip("when switching automatically (and temporarily) to Read Mode, the minimum duration the slider will remain in that mode")] + public float ModeSwitchBufferTime = 0.1f; + + protected Slider _slider; + protected Modes _resetToMode; + protected bool _resetNeeded = false; + protected float _resetTimestamp; + + /// + /// On awake we cache our slider + /// + protected virtual void Awake() + { + _slider = this.gameObject.GetComponent(); + } + + /// + /// On Start we update our slider's value to reflect the current track volume + /// + protected virtual void Start() + { + if (MMSoundManager.HasInstance) + { + UpdateSliderValueWithTrackVolume(); + } + } + + /// + /// On late update, we update our slider's value if in read mode, and reset our mode if needed + /// + protected virtual void LateUpdate() + { + if (Mode == Modes.Read) + { + float trackVolume = MMSoundManager.Instance.GetTrackVolume(Track, false); + _slider.value = trackVolume; + } + + if (_resetNeeded && (Time.unscaledTime >= _resetTimestamp)) + { + Mode = _resetToMode; + _resetNeeded = false; + } + } + + /// + /// A public method you can use to switch to read mode for a limited time, resetting to write after that + /// + /// + public virtual void ChangeModeToRead(float duration) + { + _resetToMode = Modes.Write; + Mode = Modes.Read; + _resetTimestamp = Time.unscaledTime + duration; + _resetNeeded = true; + } + + /// + /// Bind your slider to this method + /// + public virtual void UpdateVolume(float newValue) + { + if (Mode == Modes.Read) + { + return; + } + float newVolume = MMMaths.Remap(newValue, 0f, 1f, MinVolume, MaxVolume); + MMSoundManagerTrackEvent.Trigger(MMSoundManagerTrackEventTypes.SetVolumeTrack, Track, newVolume); + } + + /// + /// When we get an event letting us know the settings have been loaded, we update our slider to reflect the current track volume + /// + /// + public void OnMMEvent(MMSoundManagerEvent soundManagerEvent) + { + if (soundManagerEvent.EventType == MMSoundManagerEventTypes.SettingsLoaded) + { + UpdateSliderValueWithTrackVolume(); + } + } + + /// + /// Updates the slider value to reflect the current track volume + /// + public virtual void UpdateSliderValueWithTrackVolume() + { + _slider.value = MMMaths.Remap(MMSoundManager.Instance.GetTrackVolume(Track, false), 0f, 1f, MinVolume, MaxVolume); + } + + /// + /// if we grab a track event, we switch to read mode if needed + /// + /// + public void OnMMEvent(MMSoundManagerTrackEvent trackEvent) + { + switch (trackEvent.TrackEventType) + { + case MMSoundManagerTrackEventTypes.MuteTrack: + if (ChangeModeOnMute) + { + ChangeModeToRead(ModeSwitchBufferTime); + } + break; + case MMSoundManagerTrackEventTypes.UnmuteTrack: + if (ChangeModeOnUnmute) + { + ChangeModeToRead(ModeSwitchBufferTime); + } + break; + case MMSoundManagerTrackEventTypes.SetVolumeTrack: + if (ChangeModeOnTrackVolumeChange) + { + ChangeModeToRead(ModeSwitchBufferTime); + } + break; + } + } + + /// + /// if we grab a track fade event, we switch to read mode if needed + /// + /// + public void OnMMEvent(MMSoundManagerTrackFadeEvent fadeEvent) + { + if (ChangeModeOnTrackFade) + { + ChangeModeToRead(fadeEvent.FadeDuration + ModeSwitchBufferTime); + } + } + + /// + /// On enable we start listening for events + /// + protected virtual void OnEnable() + { + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + } + + /// + /// On disable we stop listening for events + /// + protected virtual void OnDisable() + { + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + } + } +} +#endif diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerTrackVolumeSlider.cs.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerTrackVolumeSlider.cs.meta new file mode 100644 index 0000000..0296200 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/MMSoundManagerTrackVolumeSlider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 487bb7f14f728c74ca3bfc0020509b6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings.meta new file mode 100644 index 0000000..1828966 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2fafbd11d20ac5e4c8a268445549fe64 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerAudioMixer.mixer b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerAudioMixer.mixer new file mode 100644 index 0000000..c452bb6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerAudioMixer.mixer @@ -0,0 +1,185 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!244 &-4576635800020724519 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 0035689472bad0c428c533b0be360a9c + m_EffectName: Attenuation + m_MixLevel: 0523e55fe65fca847af0ff87fc3e2f3e + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!243 &-3783893103257190392 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UI + m_AudioMixer: {fileID: 24100000} + m_GroupID: 39aa7f1a81fc93045baa62f351379f1b + m_Children: [] + m_Volume: 6b54e6bee2cbfc5408b1e9a970814b35 + m_Pitch: 78268b4570bb375429c64ce14ed21608 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 5731139238567193833} + m_UserColorIndex: 6 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!243 &-3165942800488051908 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Sfx + m_AudioMixer: {fileID: 24100000} + m_GroupID: 8d8d3def649fd3b49ba6ebeb6b0f1029 + m_Children: [] + m_Volume: 534e52a4a366075458077c0854e78569 + m_Pitch: 502a12b576dde844491815d64d1c4531 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: -4576635800020724519} + m_UserColorIndex: 3 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!243 &-2273146209696275378 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Music + m_AudioMixer: {fileID: 24100000} + m_GroupID: 5c8f408e844ac0647b599b8ec8c96f5c + m_Children: [] + m_Volume: c2e19a843805c3a4ca00e7acf8b2ba84 + m_Pitch: a80843d39fe3901479d44fa0b40f4d60 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 8563443583662627042} + m_UserColorIndex: 1 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!241 &24100000 +AudioMixerController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMSoundManagerAudioMixer + m_OutputGroup: {fileID: 0} + m_MasterGroup: {fileID: 24300002} + m_Snapshots: + - {fileID: 24500006} + m_StartSnapshot: {fileID: 24500006} + m_SuspendThreshold: -80 + m_EnableSuspend: 1 + m_UpdateMode: 0 + m_ExposedParameters: + - guid: 0f44e1c042b36e646938a885f8d57ea3 + name: MasterVolume + - guid: c2e19a843805c3a4ca00e7acf8b2ba84 + name: MusicVolume + - guid: 534e52a4a366075458077c0854e78569 + name: SfxVolume + - guid: 6b54e6bee2cbfc5408b1e9a970814b35 + name: UiVolume + m_AudioMixerGroupViews: + - guids: + - 2c09fe8489093d84eb269d15e44106a0 + - 5c8f408e844ac0647b599b8ec8c96f5c + - 8d8d3def649fd3b49ba6ebeb6b0f1029 + - 39aa7f1a81fc93045baa62f351379f1b + name: View + m_CurrentViewIndex: 0 + m_TargetSnapshot: {fileID: 24500006} +--- !u!243 &24300002 +AudioMixerGroupController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Master + m_AudioMixer: {fileID: 24100000} + m_GroupID: 2c09fe8489093d84eb269d15e44106a0 + m_Children: + - {fileID: -2273146209696275378} + - {fileID: -3165942800488051908} + - {fileID: -3783893103257190392} + m_Volume: 0f44e1c042b36e646938a885f8d57ea3 + m_Pitch: f75e977dcda787e4283bdfd2e0fbd835 + m_Send: 00000000000000000000000000000000 + m_Effects: + - {fileID: 24400004} + m_UserColorIndex: 8 + m_Mute: 0 + m_Solo: 0 + m_BypassEffects: 0 +--- !u!244 &24400004 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: 7dc96f4113679f544a75c528d0f85b47 + m_EffectName: Attenuation + m_MixLevel: f11780d0b2aaa304183d250aaf941743 + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!245 &24500006 +AudioMixerSnapshotController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Snapshot + m_AudioMixer: {fileID: 24100000} + m_SnapshotID: e34bbd4b8f6f0a34491e4d36d702e6f6 + m_FloatValues: + 0f44e1c042b36e646938a885f8d57ea3: 0 + c2e19a843805c3a4ca00e7acf8b2ba84: 0 + 534e52a4a366075458077c0854e78569: 0 + 6b54e6bee2cbfc5408b1e9a970814b35: 0 + m_TransitionOverrides: {} +--- !u!244 &5731139238567193833 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: f022f94adadb655468a67368350bbdbb + m_EffectName: Attenuation + m_MixLevel: 40e95a1bf00f08941905242957d20f00 + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 +--- !u!244 &8563443583662627042 +AudioMixerEffectController: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_EffectID: fe11159c9acdb3d43b19af8fbdc26ff9 + m_EffectName: Attenuation + m_MixLevel: cb4222fa13b8c2c439912f02c6159aaa + m_Parameters: [] + m_SendTarget: {fileID: 0} + m_EnableWetMix: 0 + m_Bypass: 0 diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerAudioMixer.mixer.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerAudioMixer.mixer.meta new file mode 100644 index 0000000..526ec72 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerAudioMixer.mixer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e984f512e89b60468e829489e8883e3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 24100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerSettings.asset b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerSettings.asset new file mode 100644 index 0000000..ebe6bcd --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerSettings.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aa48f53704ecf834c9f5e203a06874d3, type: 3} + m_Name: MMSoundManagerSettings + m_EditorClassIdentifier: + TargetAudioMixer: {fileID: 24100000, guid: 7e984f512e89b60468e829489e8883e3, type: 2} + MasterAudioMixerGroup: {fileID: 24300002, guid: 7e984f512e89b60468e829489e8883e3, + type: 2} + MusicAudioMixerGroup: {fileID: -2273146209696275378, guid: 7e984f512e89b60468e829489e8883e3, + type: 2} + SfxAudioMixerGroup: {fileID: -3165942800488051908, guid: 7e984f512e89b60468e829489e8883e3, + type: 2} + UIAudioMixerGroup: {fileID: -3783893103257190392, guid: 7e984f512e89b60468e829489e8883e3, + type: 2} + Settings: + OverrideMixerSettings: 1 + MasterVolumeParameter: MasterVolume + MusicVolumeParameter: MusicVolume + SfxVolumeParameter: SfxVolume + UIVolumeParameter: UiVolume + MasterVolume: 1 + MasterOn: 1 + MutedMasterVolume: 0 + MusicVolume: 0.2 + MusicOn: 1 + MutedMusicVolume: 0 + SfxVolume: 1 + SfxOn: 1 + MutedSfxVolume: 0 + UIVolume: 1 + UIOn: 1 + MutedUIVolume: 0 + AutoLoad: 1 + AutoSave: 0 diff --git a/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerSettings.asset.meta b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerSettings.asset.meta new file mode 100644 index 0000000..6ad408f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMAudio/MMSoundManager/Settings/MMSoundManagerSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07ea3ff88e1ecb84d91f58aa804badc6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMEvents.meta b/Assets/Feel/MMTools/Core/MMEvents.meta new file mode 100644 index 0000000..af8b095 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMEvents.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a5b52e5517a383e4788af5831d5ed367 +folderAsset: yes +timeCreated: 1463999401 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMEvents/MMEventManager.cs b/Assets/Feel/MMTools/Core/MMEvents/MMEventManager.cs new file mode 100644 index 0000000..f4d8c3f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMEvents/MMEventManager.cs @@ -0,0 +1,281 @@ +//#define EVENTROUTER_THROWEXCEPTIONS +#if EVENTROUTER_THROWEXCEPTIONS +//#define EVENTROUTER_REQUIRELISTENER // Uncomment this if you want listeners to be required for sending events. +#endif + +using System; +using UnityEngine; +using UnityEngine.Events; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.Audio; + +namespace MoreMountains.Tools +{ + /// + /// MMGameEvents are used throughout the game for general game events (game started, game ended, life lost, etc.) + /// + public struct MMGameEvent + { + static MMGameEvent e; + + public string EventName; + public int IntParameter; + public Vector2 Vector2Parameter; + public Vector3 Vector3Parameter; + public bool BoolParameter; + public string StringParameter; + + public static void Trigger(string eventName, int intParameter = 0, Vector2 vector2Parameter = default(Vector2), Vector3 vector3Parameter = default(Vector3), bool boolParameter = false, string stringParameter = "") + { + e.EventName = eventName; + e.IntParameter = intParameter; + e.Vector2Parameter = vector2Parameter; + e.Vector3Parameter = vector3Parameter; + e.BoolParameter = boolParameter; + e.StringParameter = stringParameter; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// This class handles event management, and can be used to broadcast events throughout the game, to tell one class (or many) that something's happened. + /// Events are structs, you can define any kind of events you want. This manager comes with MMGameEvents, which are + /// basically just made of a string, but you can work with more complex ones if you want. + /// + /// To trigger a new event, from anywhere, do YOUR_EVENT.Trigger(YOUR_PARAMETERS) + /// So MMGameEvent.Trigger("Save"); for example will trigger a Save MMGameEvent + /// + /// you can also call MMEventManager.TriggerEvent(YOUR_EVENT); + /// For example : MMEventManager.TriggerEvent(new MMGameEvent("GameStart")); will broadcast an MMGameEvent named GameStart to all listeners. + /// + /// To start listening to an event from any class, there are 3 things you must do : + /// + /// 1 - tell that your class implements the MMEventListener interface for that kind of event. + /// For example: public class GUIManager : Singleton, MMEventListener + /// You can have more than one of these (one per event type). + /// + /// 2 - On Enable and Disable, respectively start and stop listening to the event : + /// void OnEnable() + /// { + /// this.MMEventStartListening(); + /// } + /// void OnDisable() + /// { + /// this.MMEventStopListening(); + /// } + /// + /// 3 - Implement the MMEventListener interface for that event. For example : + /// public void OnMMEvent(MMGameEvent gameEvent) + /// { + /// if (gameEvent.EventName == "GameOver") + /// { + /// // DO SOMETHING + /// } + /// } + /// will catch all events of type MMGameEvent emitted from anywhere in the game, and do something if it's named GameOver + /// + [ExecuteAlways] + public static class MMEventManager + { + private static Dictionary> _subscribersList; + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + static void InitializeStatics() + { + _subscribersList = new Dictionary>(); + } + + static MMEventManager() + { + _subscribersList = new Dictionary>(); + } + + /// + /// Adds a new subscriber to a certain event. + /// + /// listener. + /// The event type. + public static void AddListener( MMEventListener listener ) where MMEvent : struct + { + Type eventType = typeof( MMEvent ); + + if (!_subscribersList.ContainsKey(eventType)) + { + _subscribersList[eventType] = new List(); + } + + if (!SubscriptionExists(eventType, listener)) + { + _subscribersList[eventType].Add( listener ); + } + } + + /// + /// Removes a subscriber from a certain event. + /// + /// listener. + /// The event type. + public static void RemoveListener( MMEventListener listener ) where MMEvent : struct + { + Type eventType = typeof( MMEvent ); + + if( !_subscribersList.ContainsKey( eventType ) ) + { + #if EVENTROUTER_THROWEXCEPTIONS + throw new ArgumentException( string.Format( "Removing listener \"{0}\", but the event type \"{1}\" isn't registered.", listener, eventType.ToString() ) ); + #else + return; + #endif + } + + List subscriberList = _subscribersList[eventType]; + + #if EVENTROUTER_THROWEXCEPTIONS + bool listenerFound = false; + #endif + + for (int i = subscriberList.Count-1; i >= 0; i--) + { + if( subscriberList[i] == listener ) + { + subscriberList.Remove( subscriberList[i] ); + #if EVENTROUTER_THROWEXCEPTIONS + listenerFound = true; + #endif + + if ( subscriberList.Count == 0 ) + { + _subscribersList.Remove(eventType); + } + + return; + } + } + + #if EVENTROUTER_THROWEXCEPTIONS + if( !listenerFound ) + { + throw new ArgumentException( string.Format( "Removing listener, but the supplied receiver isn't subscribed to event type \"{0}\".", eventType.ToString() ) ); + } + #endif + } + + /// + /// Triggers an event. All instances that are subscribed to it will receive it (and will potentially act on it). + /// + /// The event to trigger. + /// The 1st type parameter. + public static void TriggerEvent( MMEvent newEvent ) where MMEvent : struct + { + List list; + if( !_subscribersList.TryGetValue( typeof( MMEvent ), out list ) ) + #if EVENTROUTER_REQUIRELISTENER + throw new ArgumentException( string.Format( "Attempting to send event of type \"{0}\", but no listener for this type has been found. Make sure this.Subscribe<{0}>(EventRouter) has been called, or that all listeners to this event haven't been unsubscribed.", typeof( MMEvent ).ToString() ) ); + #else + return; + #endif + + for (int i=list.Count-1; i >= 0; i--) + { + ( list[i] as MMEventListener ).OnMMEvent( newEvent ); + } + } + + /// + /// Checks if there are subscribers for a certain type of events + /// + /// true, if exists was subscriptioned, false otherwise. + /// Type. + /// Receiver. + private static bool SubscriptionExists( Type type, MMEventListenerBase receiver ) + { + List receivers; + + if( !_subscribersList.TryGetValue( type, out receivers ) ) return false; + + bool exists = false; + + for (int i = receivers.Count-1; i >= 0; i--) + { + if( receivers[i] == receiver ) + { + exists = true; + break; + } + } + + return exists; + } + } + + /// + /// Static class that allows any class to start or stop listening to events + /// + public static class EventRegister + { + public delegate void Delegate( T eventType ); + + public static void MMEventStartListening( this MMEventListener caller ) where EventType : struct + { + MMEventManager.AddListener( caller ); + } + + public static void MMEventStopListening( this MMEventListener caller ) where EventType : struct + { + MMEventManager.RemoveListener( caller ); + } + } + + /// + /// Event listener basic interface + /// + public interface MMEventListenerBase { }; + + /// + /// A public interface you'll need to implement for each type of event you want to listen to. + /// + public interface MMEventListener : MMEventListenerBase + { + void OnMMEvent( T eventType ); + } + + public class MMEventListenerWrapper : MMEventListener, IDisposable + where TEvent : struct + { + private Action _callback; + + private TOwner _owner; + public MMEventListenerWrapper(TOwner owner, Action callback) + { + _owner = owner; + _callback = callback; + RegisterCallbacks(true); + } + + public void Dispose() + { + RegisterCallbacks(false); + _callback = null; + } + + protected virtual TTarget OnEvent(TEvent eventType) => default; + public void OnMMEvent(TEvent eventType) + { + var item = OnEvent(eventType); + _callback?.Invoke(item); + } + + private void RegisterCallbacks(bool b) + { + if (b) + { + this.MMEventStartListening(); + } + else + { + this.MMEventStopListening(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMEvents/MMEventManager.cs.meta b/Assets/Feel/MMTools/Core/MMEvents/MMEventManager.cs.meta new file mode 100644 index 0000000..c1a6e12 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMEvents/MMEventManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7e05480e454f546b4b1780169ecf2d6c +timeCreated: 1479905885 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMEvents/MMGameEventListener.cs b/Assets/Feel/MMTools/Core/MMEvents/MMGameEventListener.cs new file mode 100644 index 0000000..c7de1ce --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMEvents/MMGameEventListener.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object, and it'll let you easily trigger UnityEvents when the event of the specified name is triggered + /// + public class MMGameEventListener : MonoBehaviour, MMEventListener + { + [Header("MMGameEvent")] + /// the name of the event you want to listen for + [Tooltip("the name of the event you want to listen for")] + public string EventName = "Load"; + /// a UnityEvent hook you can use to call methods when the specified event gets triggered + [Tooltip("a UnityEvent hook you can use to call methods when the specified event gets triggered")] + public UnityEvent OnMMGameEvent; + + /// + /// When a MMGameEvent happens, we trigger our UnityEvent if necessary + /// + /// + public void OnMMEvent(MMGameEvent gameEvent) + { + if (gameEvent.EventName == EventName) + { + OnMMGameEvent?.Invoke(); + } + } + + /// + /// On enable, we start listening for MMGameEvents. You may want to extend that to listen to other types of events. + /// + protected virtual void OnEnable() + { + this.MMEventStartListening(); + } + + /// + /// On disable, we stop listening for MMGameEvents. You may want to extend that to stop listening to other types of events. + /// + protected virtual void OnDisable() + { + this.MMEventStopListening(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMEvents/MMGameEventListener.cs.meta b/Assets/Feel/MMTools/Core/MMEvents/MMGameEventListener.cs.meta new file mode 100644 index 0000000..cf85119 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMEvents/MMGameEventListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d32468fc4b09b2409873fc687f0e04d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions.meta b/Assets/Feel/MMTools/Core/MMExtensions.meta new file mode 100644 index 0000000..998d25e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: be3ca94e270583d4496a1b77a159a52f +folderAsset: yes +timeCreated: 1462451395 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMAnimatorExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMAnimatorExtensions.cs new file mode 100644 index 0000000..da4c872 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMAnimatorExtensions.cs @@ -0,0 +1,341 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// Animator extensions + /// + public static class MMAnimatorExtensions + { + /// + /// Determines if an animator contains a certain parameter, based on a type and a name + /// + /// true if has parameter of type the specified self name type; otherwise, false. + /// Self. + /// Name. + /// Type. + public static bool MMHasParameterOfType(this Animator self, string name, AnimatorControllerParameterType type) + { + if (string.IsNullOrEmpty(name)) { return false; } + AnimatorControllerParameter[] parameters = self.parameters; + foreach (AnimatorControllerParameter currParam in parameters) + { + if (currParam.type == type && currParam.name == name) + { + return true; + } + } + return false; + } + + /// + /// Adds an animator parameter name to a parameter list if that parameter exists. + /// + /// + /// + /// + /// + /// + public static void AddAnimatorParameterIfExists(Animator animator, string parameterName, out int parameter, AnimatorControllerParameterType type, HashSet parameterList) + { + if (string.IsNullOrEmpty(parameterName)) + { + parameter = -1; + return; + } + + parameter = Animator.StringToHash(parameterName); + + if (animator.MMHasParameterOfType(parameterName, type)) + { + parameterList.Add(parameter); + } + } + + /// + /// Adds an animator parameter name to a parameter list if that parameter exists. + /// + /// + /// + /// + /// + public static void AddAnimatorParameterIfExists(Animator animator, string parameterName, AnimatorControllerParameterType type, HashSet parameterList) + { + if (animator.MMHasParameterOfType(parameterName, type)) + { + parameterList.Add(parameterName); + } + } + + // SIMPLE METHODS ------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #region SimpleMethods + + // + /// Updates the animator bool. + /// + /// Animator. + /// Parameter name. + /// If set to true value. + public static void UpdateAnimatorBool(Animator animator, string parameterName, bool value) + { + animator.SetBool(parameterName, value); + } + + /// + /// Updates the animator integer. + /// + /// Animator. + /// Parameter name. + /// Value. + public static void UpdateAnimatorInteger(Animator animator, string parameterName, int value) + { + animator.SetInteger(parameterName, value); + } + + /// + /// Updates the animator's float + /// + /// + /// + /// + public static void UpdateAnimatorFloat(Animator animator, string parameterName, float value, bool performSanityCheck = true) + { + animator.SetFloat(parameterName, value); + } + + #endregion + + // INT PARAMETER METHODS ------------------------------------------------------------------------------------------------------------------------------------------------------------- + + // + /// Updates the animator bool. + /// + /// Animator. + /// Parameter name. + /// If set to true value. + public static bool UpdateAnimatorBool(Animator animator, int parameter, bool value, HashSet parameterList, bool performSanityCheck = true) + { + if (performSanityCheck && !parameterList.Contains(parameter)) + { + return false; + } + animator.SetBool(parameter, value); + return true; + } + + /// + /// Sets an animator's trigger of the int parameter specified + /// + /// + /// + /// + public static bool UpdateAnimatorTrigger(Animator animator, int parameter, HashSet parameterList, bool performSanityCheck = true) + { + if (performSanityCheck && !parameterList.Contains(parameter)) + { + return false; + } + animator.SetTrigger(parameter); + return true; + } + + /// + /// Triggers an animator trigger. + /// + /// Animator. + /// Parameter name. + /// If set to true value. + public static bool SetAnimatorTrigger(Animator animator, int parameter, HashSet parameterList, bool performSanityCheck = true) + { + if (performSanityCheck && !parameterList.Contains(parameter)) + { + return false; + } + animator.SetTrigger(parameter); + return true; + } + + /// + /// Updates the animator float. + /// + /// Animator. + /// Parameter name. + /// Value. + public static bool UpdateAnimatorFloat(Animator animator, int parameter, float value, HashSet parameterList, bool performSanityCheck = true) + { + if (performSanityCheck && !parameterList.Contains(parameter)) + { + return false; + } + animator.SetFloat(parameter, value); + return true; + } + + /// + /// Updates the animator integer. + /// + /// Animator. + /// Parameter name. + /// Value. + public static bool UpdateAnimatorInteger(Animator animator, int parameter, int value, HashSet parameterList, bool performSanityCheck = true) + { + if (performSanityCheck && !parameterList.Contains(parameter)) + { + return false; + } + animator.SetInteger(parameter, value); + return true; + } + + + + // STRING PARAMETER METHODS ------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #region StringParameterMethods + + // + /// Updates the animator bool. + /// + /// Animator. + /// Parameter name. + /// If set to true value. + public static void UpdateAnimatorBool(Animator animator, string parameterName, bool value, HashSet parameterList, bool performSanityCheck = true) + { + if (parameterList.Contains(parameterName)) + { + animator.SetBool(parameterName, value); + } + } + + /// + /// Sets an animator's trigger of the string parameter name specified + /// + /// + /// + /// + public static void UpdateAnimatorTrigger(Animator animator, string parameterName, HashSet parameterList, bool performSanityCheck = true) + { + if (parameterList.Contains(parameterName)) + { + animator.SetTrigger(parameterName); + } + } + + /// + /// Triggers an animator trigger. + /// + /// Animator. + /// Parameter name. + /// If set to true value. + public static void SetAnimatorTrigger(Animator animator, string parameterName, HashSet parameterList, bool performSanityCheck = true) + { + if (parameterList.Contains(parameterName)) + { + animator.SetTrigger(parameterName); + } + } + + /// + /// Updates the animator float. + /// + /// Animator. + /// Parameter name. + /// Value. + public static void UpdateAnimatorFloat(Animator animator, string parameterName, float value, HashSet parameterList, bool performSanityCheck = true) + { + if (parameterList.Contains(parameterName)) + { + animator.SetFloat(parameterName, value); + } + } + + /// + /// Updates the animator integer. + /// + /// Animator. + /// Parameter name. + /// Value. + public static void UpdateAnimatorInteger(Animator animator, string parameterName, int value, HashSet parameterList, bool performSanityCheck = true) + { + if (parameterList.Contains(parameterName)) + { + animator.SetInteger(parameterName, value); + } + } + + // + /// Updates the animator bool after checking the parameter's existence. + /// + /// Animator. + /// Parameter name. + /// If set to true value. + public static void UpdateAnimatorBoolIfExists(Animator animator, string parameterName, bool value, bool performSanityCheck = true) + { + if (animator.MMHasParameterOfType(parameterName, AnimatorControllerParameterType.Bool)) + { + animator.SetBool(parameterName, value); + } + } + + /// + /// Updates an animator trigger if it exists + /// + /// + /// + public static void UpdateAnimatorTriggerIfExists(Animator animator, string parameterName, bool performSanityCheck = true) + { + if (animator.MMHasParameterOfType(parameterName, AnimatorControllerParameterType.Trigger)) + { + animator.SetTrigger(parameterName); + } + } + + /// + /// Triggers an animator trigger after checking for the parameter's existence. + /// + /// Animator. + /// Parameter name. + /// If set to true value. + public static void SetAnimatorTriggerIfExists(Animator animator, string parameterName, bool performSanityCheck = true) + { + if (animator.MMHasParameterOfType(parameterName, AnimatorControllerParameterType.Trigger)) + { + animator.SetTrigger(parameterName); + } + } + + /// + /// Updates the animator float after checking for the parameter's existence. + /// + /// Animator. + /// Parameter name. + /// Value. + public static void UpdateAnimatorFloatIfExists(Animator animator, string parameterName, float value, bool performSanityCheck = true) + { + if (animator.MMHasParameterOfType(parameterName, AnimatorControllerParameterType.Float)) + { + animator.SetFloat(parameterName, value); + } + } + + /// + /// Updates the animator integer after checking for the parameter's existence. + /// + /// Animator. + /// Parameter name. + /// Value. + public static void UpdateAnimatorIntegerIfExists(Animator animator, string parameterName, int value, bool performSanityCheck = true) + { + if (animator.MMHasParameterOfType(parameterName, AnimatorControllerParameterType.Int)) + { + animator.SetInteger(parameterName, value); + } + } + + #endregion + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMAnimatorExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMAnimatorExtensions.cs.meta new file mode 100644 index 0000000..97500a4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMAnimatorExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbe34950474788247ae05de95fa199f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMArrayExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMArrayExtensions.cs new file mode 100644 index 0000000..6826fa4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMArrayExtensions.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Array extensions + /// + public static class MMArrayExtensions + { + /// + /// Returns a random value inside the array + /// + /// + /// + /// + public static T MMRandomValue(this T[] array) + { + int newIndex = Random.Range(0, array.Length); + return array[newIndex]; + } + + /// + /// Shuffles an array + /// + /// + /// + /// + public static T[] MMShuffle(this T[] array) + { + // Fisher Yates shuffle algorithm, see https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle + for (int t = 0; t < array.Length; t++) + { + T tmp = array[t]; + int randomIndex = Random.Range(t, array.Length); + array[t] = array[randomIndex]; + array[randomIndex] = tmp; + } + return array; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMArrayExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMArrayExtensions.cs.meta new file mode 100644 index 0000000..c5094b3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMArrayExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6e5aa704bd68fb42a198fccd658dbfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMBoundsExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMBoundsExtensions.cs new file mode 100644 index 0000000..d5f433e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMBoundsExtensions.cs @@ -0,0 +1,111 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Bounds helpers + /// + public class MMBoundsExtensions : MonoBehaviour + { + /// + /// Returns a random point within the bounds set as parameter + /// + /// + /// + public static Vector3 MMRandomPointInBounds(Bounds bounds) + { + return new Vector3( + Random.Range(bounds.min.x, bounds.max.x), + Random.Range(bounds.min.y, bounds.max.y), + Random.Range(bounds.min.z, bounds.max.z) + ); + } + + /// + /// Gets collider bounds for an object (from Collider2D) + /// + /// + /// + public static Bounds GetColliderBounds(GameObject theObject) + { + Bounds returnBounds; + + // if the object has a collider at root level, we base our calculations on that + if (theObject.GetComponent()!=null) + { + returnBounds = theObject.GetComponent().bounds; + return returnBounds; + } + + // if the object has a collider2D at root level, we base our calculations on that + if (theObject.GetComponent()!=null) + { + returnBounds = theObject.GetComponent().bounds; + return returnBounds; + } + + // if the object contains at least one Collider we'll add all its children's Colliders bounds + if (theObject.GetComponentInChildren()!=null) + { + Bounds totalBounds = theObject.GetComponentInChildren().bounds; + Collider[] colliders = theObject.GetComponentsInChildren(); + foreach (Collider col in colliders) + { + totalBounds.Encapsulate(col.bounds); + } + returnBounds = totalBounds; + return returnBounds; + } + + // if the object contains at least one Collider2D we'll add all its children's Collider2Ds bounds + if (theObject.GetComponentInChildren()!=null) + { + Bounds totalBounds = theObject.GetComponentInChildren().bounds; + Collider2D[] colliders = theObject.GetComponentsInChildren(); + foreach (Collider2D col in colliders) + { + totalBounds.Encapsulate(col.bounds); + } + returnBounds = totalBounds; + return returnBounds; + } + + returnBounds = new Bounds(Vector3.zero, Vector3.zero); + return returnBounds; + } + + /// + /// Gets bounds of a renderer + /// + /// + /// + public static Bounds GetRendererBounds(GameObject theObject) + { + Bounds returnBounds; + + // if the object has a renderer at root level, we base our calculations on that + if (theObject.GetComponent()!=null) + { + returnBounds = theObject.GetComponent().bounds; + return returnBounds; + } + + // if the object contains at least one renderer we'll add all its children's renderer bounds + if (theObject.GetComponentInChildren()!=null) + { + Bounds totalBounds = theObject.GetComponentInChildren().bounds; + Renderer[] renderers = theObject.GetComponentsInChildren(); + foreach (Renderer renderer in renderers) + { + totalBounds.Encapsulate(renderer.bounds); + } + returnBounds = totalBounds; + return returnBounds; + } + + returnBounds = new Bounds(Vector3.zero, Vector3.zero); + return returnBounds; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMBoundsExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMBoundsExtensions.cs.meta new file mode 100644 index 0000000..ebbfb7e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMBoundsExtensions.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b6df521b0f2978740a4c18dddde873a8 +timeCreated: 1455815409 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMCameraExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMCameraExtensions.cs new file mode 100644 index 0000000..0b24aee --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMCameraExtensions.cs @@ -0,0 +1,48 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Camera extensions + /// + public static class MMCameraExtensions + { + /// + /// Returns the width of the camera in world space units, at the specified depths for perspective cameras, everywhere for orthographic ones + /// + /// + /// + /// + public static float MMCameraWorldSpaceWidth(this Camera camera, float depth = 0f) + { + if (camera.orthographic) + { + return camera.aspect * camera.orthographicSize * 2f; + } + else + { + float fieldOfView = camera.fieldOfView * Mathf.Deg2Rad; + return camera.aspect * depth * Mathf.Tan(fieldOfView); + } + } + + /// + /// Returns the height of the camera in world space units, at the specified depths for perspective cameras, everywhere for orthographic ones + /// + /// + /// + /// + public static float MMCameraWorldSpaceHeight(this Camera camera, float depth = 0f) + { + if (camera.orthographic) + { + return camera.orthographicSize * 2f; + } + else + { + float fieldOfView = camera.fieldOfView * Mathf.Deg2Rad; + return depth * Mathf.Tan(fieldOfView); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMCameraExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMCameraExtensions.cs.meta new file mode 100644 index 0000000..e317683 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMCameraExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 285d55c3a8191984c848a8ecaee30c9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMColorExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMColorExtensions.cs new file mode 100644 index 0000000..a855a3e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMColorExtensions.cs @@ -0,0 +1,40 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Color extensions + /// + public static class MMColorExtensions + { + /// + /// Adds all parts of the color and returns a float + /// + /// + /// + public static float Sum(this Color color) + { + return color.r + color.g + color.b + color.a; + } + + /// + /// Returns a mean value between r, g and b + /// + /// + /// + public static float MeanRGB(this Color color) + { + return (color.r + color.g + color.b) / 3f; + } + + /// + /// Computes the color's luminance value + /// + /// + /// + public static float Luminance(this Color color) + { + return 0.2126f * color.r + 0.7152f * color.g + 0.0722f * color.b; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMColorExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMColorExtensions.cs.meta new file mode 100644 index 0000000..7c8cfb7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMColorExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ea7a938d4b9d584db335667287955f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMDictionaryExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMDictionaryExtensions.cs new file mode 100644 index 0000000..c10da2b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMDictionaryExtensions.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// Dictionary extensions + /// + public static class MMDictionaryExtensions + { + /// + /// Finds a key (if there's one) that matches the value set in parameters + /// + /// + /// + /// + /// + /// + public static T KeyByValue(this Dictionary dictionary, T value) + { + T key = default; + foreach (KeyValuePair pair in dictionary) + { + if (pair.Value.Equals(value)) + { + key = pair.Key; + break; + } + } + return key; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMDictionaryExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMDictionaryExtensions.cs.meta new file mode 100644 index 0000000..b1cc578 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMDictionaryExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 122b2359ffbe5164db4f3af49fcd7c1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMFloatExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMFloatExtensions.cs new file mode 100644 index 0000000..1816d3a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMFloatExtensions.cs @@ -0,0 +1,36 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Float extensions + /// + public static class MMFloatExtensions + { + /// + /// Normalizes an angle in degrees + /// + /// + /// + public static float MMNormalizeAngle(this float angleInDegrees) + { + angleInDegrees = angleInDegrees % 360f; + if (angleInDegrees < 0) + { + angleInDegrees += 360f; + } + return angleInDegrees; + } + + /// + /// Rounds a float down + /// + /// + /// + /// + public static float RoundDown(this float number, int decimalPlaces) + { + return Mathf.Floor(number * Mathf.Pow(10, decimalPlaces)) / Mathf.Pow(10, decimalPlaces); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMFloatExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMFloatExtensions.cs.meta new file mode 100644 index 0000000..7dd0d45 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMFloatExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 368b8371d6c95b34fae5ced0725180b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMGameObjectExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMGameObjectExtensions.cs new file mode 100644 index 0000000..e28b1e8 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMGameObjectExtensions.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// Game object extensions + /// + public static class GameObjectExtensions + { + static List m_ComponentCache = new List(); + + /// + /// Grabs a component without allocating memory uselessly + /// + /// + /// + /// + public static Component MMGetComponentNoAlloc(this GameObject @this, System.Type componentType) + { + @this.GetComponents(componentType, m_ComponentCache); + Component component = m_ComponentCache.Count > 0 ? m_ComponentCache[0] : null; + m_ComponentCache.Clear(); + return component; + } + + /// + /// Grabs a component without allocating memory uselessly + /// + /// + /// + /// + public static T MMGetComponentNoAlloc(this GameObject @this) where T : Component + { + @this.GetComponents(typeof(T), m_ComponentCache); + Component component = m_ComponentCache.Count > 0 ? m_ComponentCache[0] : null; + m_ComponentCache.Clear(); + return component as T; + } + + /// + /// Grabs a component on the object, or on its children objects, or on a parent, or adds it to the object if none were found + /// + /// + /// + /// + public static T MMGetComponentAroundOrAdd(this GameObject @this) where T : Component + { + T component = @this.GetComponentInChildren(true); + if (component == null) + { + component = @this.GetComponentInParent(); + } + if (component == null) + { + component = @this.AddComponent(); + } + return component; + } + + /// + /// Gets the specified component on the object, or adds it and returns it if there isn't already one + /// + /// + /// + /// + public static T MMGetOrAddComponent(this GameObject @this) where T : Component + { + T component = @this.GetComponent(); + if (component == null) + { + component = @this.AddComponent(); + } + return component; + } + + /// + /// Gets the specified component on the object, or adds it and returns it if there isn't already one + /// + /// + /// + /// + public static (T newComponent, bool createdNew) MMFindOrCreateObjectOfType(this GameObject @this, string newObjectName, Transform parent, bool forceNewCreation = false) where T : Component + { + T searchedObject = (T)Object.FindObjectOfType(typeof(T)); + if ((searchedObject == null) || forceNewCreation) + { + GameObject newGo = new GameObject(newObjectName); + newGo.transform.SetParent(parent); + return (newGo.AddComponent(), true); + } + else + { + return (searchedObject, false); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMGameObjectExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMGameObjectExtensions.cs.meta new file mode 100644 index 0000000..6a50307 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMGameObjectExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2625daa927689341bf30fbd51782d48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMLayermaskExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMLayermaskExtensions.cs new file mode 100644 index 0000000..b91fcf1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMLayermaskExtensions.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Layermask Extensions + /// + public static class LayermaskExtensions + { + /// + /// Returns bool if layer is within layermask + /// + /// + /// + /// + public static bool MMContains(this LayerMask mask, int layer) + { + return ((mask.value & (1 << layer)) > 0); + } + + /// + /// Returns true if gameObject is within layermask + /// + /// + /// + /// + public static bool MMContains(this LayerMask mask, GameObject gameobject) + { + return ((mask.value & (1 << gameobject.layer)) > 0); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMLayermaskExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMLayermaskExtensions.cs.meta new file mode 100644 index 0000000..6d34f7a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMLayermaskExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5786eaa162a9da408b32f063e56886d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMListExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMListExtensions.cs new file mode 100644 index 0000000..8bdebcc --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMListExtensions.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// List extensions + /// + public static class ListExtensions + { + /// + /// Swaps two items in a list + /// + /// + /// + /// + /// + public static void MMSwap(this IList list, int i, int j) + { + T temporary = list[i]; + list[i] = list[j]; + list[j] = temporary; + } + + /// + /// Shuffles a list randomly + /// + /// + /// + public static void MMShuffle(this IList list) + { + for (int i = 0; i < list.Count; i++) + { + list.MMSwap(i, Random.Range(i, list.Count)); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMListExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMListExtensions.cs.meta new file mode 100644 index 0000000..05ea36e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMListExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 273f85de13f3ea84a9fe0139daf01c37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMRectExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMRectExtensions.cs new file mode 100644 index 0000000..ed88506 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMRectExtensions.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Rect extensions + /// + public static class RectExtensions + { + /// + /// Returns true if this rectangle intersects the other specified rectangle + /// + /// + /// + /// + public static bool MMIntersects(this Rect thisRectangle, Rect otherRectangle) + { + return !((thisRectangle.x > otherRectangle.xMax) || (thisRectangle.xMax < otherRectangle.x) || (thisRectangle.y > otherRectangle.yMax) || (thisRectangle.yMax < otherRectangle.y)); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMRectExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMRectExtensions.cs.meta new file mode 100644 index 0000000..dc6c032 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMRectExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: caa7c923e7ca83849a4da9421e095559 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMRectTransformExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMRectTransformExtensions.cs new file mode 100644 index 0000000..c0d8925 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMRectTransformExtensions.cs @@ -0,0 +1,50 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// RectTransform extensions + /// + public static class MMRectTransformExtensions + { + /// + /// Sets the left offset of a rect transform to the specified value + /// + /// + /// + public static void MMSetLeft(this RectTransform rt, float left) + { + rt.offsetMin = new Vector2(left, rt.offsetMin.y); + } + + /// + /// Sets the right offset of a rect transform to the specified value + /// + /// + /// + public static void MMSetRight(this RectTransform rt, float right) + { + rt.offsetMax = new Vector2(-right, rt.offsetMax.y); + } + + /// + /// Sets the top offset of a rect transform to the specified value + /// + /// + /// + public static void MMSetTop(this RectTransform rt, float top) + { + rt.offsetMax = new Vector2(rt.offsetMax.x, -top); + } + + /// + /// Sets the bottom offset of a rect transform to the specified value + /// + /// + /// + public static void MMSetBottom(this RectTransform rt, float bottom) + { + rt.offsetMin = new Vector2(rt.offsetMin.x, bottom); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMRectTransformExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMRectTransformExtensions.cs.meta new file mode 100644 index 0000000..378b703 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMRectTransformExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 766d979625785dc48aecf8835de77661 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMRendererExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMRendererExtensions.cs new file mode 100644 index 0000000..89836e1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMRendererExtensions.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Renderer extensions + /// + public static class RendererExtensions + { + /// + /// Returns true if a renderer is visible from a camera + /// + /// + /// + /// + public static bool MMIsVisibleFrom(this Renderer renderer, Camera camera) + { + Plane[] frustumPlanes = GeometryUtility.CalculateFrustumPlanes(camera); + return GeometryUtility.TestPlanesAABB(frustumPlanes, renderer.bounds); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMRendererExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMRendererExtensions.cs.meta new file mode 100644 index 0000000..b23e6a3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMRendererExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e41d6cfe6c233c40a2bf4ddc63a71dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMScrollRectExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMScrollRectExtensions.cs new file mode 100644 index 0000000..0428a84 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMScrollRectExtensions.cs @@ -0,0 +1,30 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// Scrollrect extensions + /// + public static class ScrollRectExtensions + { + /// + /// Scrolls a scroll rect to the top + /// + /// + public static void MMScrollToTop(this ScrollRect scrollRect) + { + scrollRect.normalizedPosition = new Vector2(0, 1); + } + + /// + /// Scrolls a scroll rect to the bottom + /// + public static void MMScrollToBottom(this ScrollRect scrollRect) + { + scrollRect.normalizedPosition = new Vector2(0, 0); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMScrollRectExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMScrollRectExtensions.cs.meta new file mode 100644 index 0000000..ac28a8c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMScrollRectExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff41eb325c823854b878fbc622f8d9fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMSerializedPropertyExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMSerializedPropertyExtensions.cs new file mode 100644 index 0000000..a2d8e2f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMSerializedPropertyExtensions.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Serialized property extensions + /// + public static class MMSerializedPropertyExtensions + { + #if UNITY_EDITOR + /// + /// Returns the object value of a target serialized property + /// + /// + /// + public static object MMGetObjectValue(this SerializedProperty property) + { + if (property == null) + { + return null; + } + + string propertyPath = property.propertyPath.Replace(".Array.data[", "["); + object targetObject = property.serializedObject.targetObject; + var elements = propertyPath.Split('.'); + foreach (var element in elements) + { + if (!element.Contains("[")) + { + targetObject = GetPropertyValue(targetObject, element); + } + else + { + string elementName = element.Substring(0, element.IndexOf("[")); + int elementIndex = System.Convert.ToInt32(element.Substring(element.IndexOf("[")).Replace("[", "").Replace("]", "")); + targetObject = GetPropertyValue(targetObject, elementName, elementIndex); + } + } + return targetObject; + } + + private static object GetPropertyValue(object source, string propertyName) + { + if (source == null) + { + return null; + } + + Type propertyType = source.GetType(); + + while (propertyType != null) + { + FieldInfo fieldInfo = propertyType.GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + if (fieldInfo != null) + { + return fieldInfo.GetValue(source); + } + PropertyInfo propertyInfo = propertyType.GetProperty(propertyName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.IgnoreCase | BindingFlags.Instance); + if (propertyInfo != null) + { + return propertyInfo.GetValue(source, null); + } + propertyType = propertyType.BaseType; + } + return null; + } + + private static object GetPropertyValue(object source, string propertyName, int index) + { + var enumerable = GetPropertyValue(source, propertyName) as System.Collections.IEnumerable; + if (enumerable == null) + { + return null; + } + var enumerator = enumerable.GetEnumerator(); + for (int i = 0; i <= index; i++) + { + if (!enumerator.MoveNext()) + { + return null; + } + } + return enumerator.Current; + } + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMSerializedPropertyExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMSerializedPropertyExtensions.cs.meta new file mode 100644 index 0000000..9d71924 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMSerializedPropertyExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8c0f2ffbd055e44497199bd1a209d9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMTransformExtensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMTransformExtensions.cs new file mode 100644 index 0000000..7d41d33 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMTransformExtensions.cs @@ -0,0 +1,127 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// Transform extensions + /// + public static class TransformExtensions + { + /// + /// Destroys a transform's children + /// + /// + public static void MMDestroyAllChildren(this Transform transform) + { + for (int t = transform.childCount - 1; t >= 0; t--) + { + if (Application.isPlaying) + { + UnityEngine.Object.Destroy(transform.GetChild(t).gameObject); + } + else + { + UnityEngine.Object.DestroyImmediate(transform.GetChild(t).gameObject); + } + } + } + + /// + /// Finds children by name, breadth first + /// + /// + /// + /// + public static Transform MMFindDeepChildBreadthFirst(this Transform parent, string transformName) + { + Queue queue = new Queue(); + queue.Enqueue(parent); + while (queue.Count > 0) + { + Transform child = queue.Dequeue(); + if (child.name == transformName) + { + return child; + } + foreach (Transform t in child) + { + queue.Enqueue(t); + } + } + return null; + } + + /// + /// Finds children by name, depth first + /// + /// + /// + /// + public static Transform MMFindDeepChildDepthFirst(this Transform parent, string transformName) + { + foreach (Transform child in parent) + { + if (child.name == transformName) + { + return child; + } + + Transform result = child.MMFindDeepChildDepthFirst(transformName); + if (result != null) + { + return result; + } + } + return null; + } + + /// + /// Changes the layer of a transform and all its children to the new one + /// + /// + /// + public static void ChangeLayersRecursively(this Transform transform, string layerName) + { + transform.gameObject.layer = LayerMask.NameToLayer(layerName); + foreach (Transform child in transform) + { + child.ChangeLayersRecursively(layerName); + } + } + + /// + /// Changes the layer of a transform and all its children to the new one + /// + /// + /// + public static void ChangeLayersRecursively(this Transform transform, int layerIndex) + { + transform.gameObject.layer = layerIndex; + foreach (Transform child in transform) + { + child.ChangeLayersRecursively(layerIndex); + } + } + + + /// + /// Enumerates all parents of a transform + /// + /// + /// + /// + public static IEnumerable MMEnumerateAllParents(this Transform targetTransform, bool includeSelf = false) + { + if (!includeSelf) + { + targetTransform = targetTransform?.parent; + } + while (targetTransform) + { + yield return targetTransform; + targetTransform = targetTransform.parent; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMTransformExtensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMTransformExtensions.cs.meta new file mode 100644 index 0000000..4cdab39 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMTransformExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aaf470b8c3a10a941998800be2e324cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMVector2Extensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMVector2Extensions.cs new file mode 100644 index 0000000..4892b0c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMVector2Extensions.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Vector2 extensions + /// + public static class MMVector2Extensions + { + /// + /// Rotates a vector2 by angleInDegrees + /// + /// + /// + /// + public static Vector2 MMRotate(this Vector2 vector, float angleInDegrees) + { + float sin = Mathf.Sin(angleInDegrees * Mathf.Deg2Rad); + float cos = Mathf.Cos(angleInDegrees * Mathf.Deg2Rad); + float tx = vector.x; + float ty = vector.y; + vector.x = (cos * tx) - (sin * ty); + vector.y = (sin * tx) + (cos * ty); + return vector; + } + + /// + /// Sets the X part of a Vector2 + /// + /// + /// + /// + public static Vector2 MMSetX(this Vector2 vector, float newValue) + { + vector.x = newValue; + return vector; + } + + /// + /// Sets the Y part of a Vector2 + /// + /// + /// + /// + public static Vector2 MMSetY(this Vector2 vector, float newValue) + { + vector.y = newValue; + return vector; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMVector2Extensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMVector2Extensions.cs.meta new file mode 100644 index 0000000..931b5ee --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMVector2Extensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32341f6d89b7cd14bbe2102075e9e0cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMVector3Extensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMVector3Extensions.cs new file mode 100644 index 0000000..999587a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMVector3Extensions.cs @@ -0,0 +1,97 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Vector3 Extensions + /// + public static class MMVector3Extensions + { + /// + /// Sets the x value of a vector + /// + /// + /// + /// + public static Vector3 MMSetX(this Vector3 vector, float newValue) + { + vector.x = newValue; + return vector; + } + + /// + /// Sets the y value of a vector + /// + /// + /// + /// + public static Vector3 MMSetY(this Vector3 vector, float newValue) + { + vector.y = newValue; + return vector; + } + + /// + /// Sets the z value of a vector + /// + /// + /// + /// + public static Vector3 MMSetZ(this Vector3 vector, float newValue) + { + vector.z = newValue; + return vector; + } + + /// + /// Inverts a vector + /// + /// + /// + public static Vector3 MMInvert(this Vector3 newValue) + { + return new Vector3 + ( + 1.0f / newValue.x, + 1.0f / newValue.y, + 1.0f / newValue.z + ); + } + + /// + /// Projects a vector on another + /// + /// + /// + /// + public static Vector3 MMProject(this Vector3 vector, Vector3 projectedVector) + { + float _dot = Vector3.Dot(vector, projectedVector); + return _dot * projectedVector; + } + + /// + /// Rejects a vector on another + /// + /// + /// + /// + public static Vector3 MMReject(this Vector3 vector, Vector3 rejectedVector) + { + return vector - vector.MMProject(rejectedVector); + } + + /// + /// Rounds all components of a vector + /// + /// + /// + public static Vector3 MMRound(this Vector3 vector) + { + vector.x = Mathf.Round(vector.x); + vector.y = Mathf.Round(vector.y); + vector.z = Mathf.Round(vector.z); + return vector; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMVector3Extensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMVector3Extensions.cs.meta new file mode 100644 index 0000000..57063a3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMVector3Extensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40f518105f6f40f459c8d96790772f07 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMVector4Extensions.cs b/Assets/Feel/MMTools/Core/MMExtensions/MMVector4Extensions.cs new file mode 100644 index 0000000..7c56478 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMVector4Extensions.cs @@ -0,0 +1,121 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Vector4 Extensions + /// + public static class MMVector4Extensions + { + /// + /// Returns the sum of all components of a vector4 + /// + /// + /// + public static float SumComponents(this Vector4 vector) + { + return vector.x + vector.y + vector.z + vector.w; + } + + /// + /// Sets the x value of a vector + /// + /// + /// + /// + public static Vector4 MMSetX(this Vector4 vector, float newValue) + { + vector.x = newValue; + return vector; + } + + /// + /// Sets the y value of a vector + /// + /// + /// + /// + public static Vector4 MMSetY(this Vector4 vector, float newValue) + { + vector.y = newValue; + return vector; + } + + /// + /// Sets the z value of a vector + /// + /// + /// + /// + public static Vector4 MMSetZ(this Vector4 vector, float newValue) + { + vector.z = newValue; + return vector; + } + + /// + /// Sets the z value of a vector + /// + /// + /// + /// + public static Vector4 MMSetW(this Vector4 vector, float newValue) + { + vector.w = newValue; + return vector; + } + + /// + /// Inverts a vector + /// + /// + /// + public static Vector4 MMInvert(this Vector4 newValue) + { + return new Vector4 + ( + 1.0f / newValue.x, + 1.0f / newValue.y, + 1.0f / newValue.z, + 1.0f / newValue.w + ); + } + + /// + /// Projects a vector on another + /// + /// + /// + /// + public static Vector4 MMProject(this Vector4 vector, Vector4 projectedVector) + { + float _dot = Vector4.Dot(vector, projectedVector); + return _dot * projectedVector; + } + + /// + /// Rejects a vector on another + /// + /// + /// + /// + public static Vector4 MMReject(this Vector4 vector, Vector4 rejectedVector) + { + return vector - vector.MMProject(rejectedVector); + } + + /// + /// Rounds all components of a vector + /// + /// + /// + public static Vector4 MMRound(this Vector4 vector) + { + vector.x = Mathf.Round(vector.x); + vector.y = Mathf.Round(vector.y); + vector.z = Mathf.Round(vector.z); + vector.w = Mathf.Round(vector.w); + return vector; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMExtensions/MMVector4Extensions.cs.meta b/Assets/Feel/MMTools/Core/MMExtensions/MMVector4Extensions.cs.meta new file mode 100644 index 0000000..23ab3a3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMExtensions/MMVector4Extensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75c82ca66be53244b90a3a4794a07e63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers.meta b/Assets/Feel/MMTools/Core/MMHelpers.meta new file mode 100644 index 0000000..e29d59e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8f67af56fdac7d641b2d5b8463b7c417 +folderAsset: yes +timeCreated: 1462451168 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMArray.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMArray.cs new file mode 100644 index 0000000..7d4126e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMArray.cs @@ -0,0 +1,97 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Array helpers + /// + public class MMArray : MonoBehaviour + { + /// + /// Rounds an int to the closest int in an array (array has to be sorted) + /// + /// + /// + /// + public static int RoundIntToArray(int value, int[] array) + { + int min = 0; + if (array[min] >= value) return array[min]; + + int max = array.Length - 1; + if (array[max] <= value) return array[max]; + + while (max - min > 1) + { + int mid = (max + min) / 2; + + if (array[mid] == value) + { + return array[mid]; + } + else if (array[mid] < value) + { + min = mid; + } + else + { + max = mid; + } + } + + if (array[max] - value <= value - array[min]) + { + return array[max]; + } + else + { + return array[min]; + } + } + + /// + /// Rounds a float to the closest float in an array (array has to be sorted) + /// + /// + /// + /// + public static float RoundFloatToArray(float value, float[] array) + { + int min = 0; + if (array[min] >= value) return array[min]; + + int max = array.Length - 1; + if (array[max] <= value) return array[max]; + + while (max - min > 1) + { + int mid = (max + min) / 2; + + if (array[mid] == value) + { + return array[mid]; + } + else if (array[mid] < value) + { + min = mid; + } + else + { + max = mid; + } + } + + if (array[max] - value <= value - array[min]) + { + return array[max]; + } + else + { + return array[min]; + } + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMArray.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMArray.cs.meta new file mode 100644 index 0000000..eeb23da --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMArray.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3df6166b66f19e040977adbc56b973b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMCircularList.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMCircularList.cs new file mode 100644 index 0000000..3060546 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMCircularList.cs @@ -0,0 +1,71 @@ +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// A improved list that lets you parse it and automatically have it loop to the start or end when you reach the end or start + /// To use it : set the CurrentIndex to whatever you want, then use IncrementCurrentIndex / DecrementCurrentIndex to move it, get the current element via Current + /// + /// + public class MMCircularList : List + { + private int _currentIndex = 0; + + /// + /// Lets you set the current index, or compute it if you get it + /// + public int CurrentIndex + { + get + { + return GetCurrentIndex(); + } + set => _currentIndex = value; + } + + /// + /// Computes the current index + /// + /// + protected virtual int GetCurrentIndex() + { + if (_currentIndex > Count - 1) { _currentIndex = 0; } + if (_currentIndex < 0) { _currentIndex = Count - 1; } + return _currentIndex; + } + + /// + /// Returns the current element + /// + public virtual T Current => this[CurrentIndex]; + + /// + /// Increments the current index (towards the "right" of the list) + /// + public virtual void IncrementCurrentIndex() + { + _currentIndex++; + GetCurrentIndex(); + } + + /// + /// Decrements the current index (towards the "left" of the list) + /// + public virtual void DecrementCurrentIndex() + { + _currentIndex--; + GetCurrentIndex(); + } + + /// + /// Returns the previous index in the circular list + /// + public virtual int PreviousIndex => (_currentIndex == 0) ? Count - 1 : _currentIndex - 1; + + /// + /// Returns the next index in the circular list + /// + public virtual int NextIndex => (_currentIndex == Count - 1) ? 0 : _currentIndex + 1; + } +} + diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMCircularList.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMCircularList.cs.meta new file mode 100644 index 0000000..82c8b3c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMCircularList.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09b9adc13f8d756438e4b01f706efbc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMColors.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMColors.cs new file mode 100644 index 0000000..102176e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMColors.cs @@ -0,0 +1,439 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// Color helpers + /// + public static class MMColors + { + // via https://gist.github.com/LotteMakesStuff/f7ce43f11e545a151b95b5e87f76304c + // NOTE: The follwing color names come from the CSS3 specification, Section 4.3 Extended Color Keywords + // http://www.w3.org/TR/css3-color/#svg-color + + public static readonly Color ReunoYellow = new Color32(255, 196, 0, 255); + public static readonly Color BestRed = new Color32(255, 24, 0, 255); + public static readonly Color AliceBlue = new Color32(240, 248, 255, 255); + public static readonly Color AntiqueWhite = new Color32(250, 235, 215, 255); + public static readonly Color Aqua = new Color32(0, 255, 255, 255); + public static readonly Color Aquamarine = new Color32(127, 255, 212, 255); + public static readonly Color Azure = new Color32(240, 255, 255, 255); + public static readonly Color Beige = new Color32(245, 245, 220, 255); + public static readonly Color Bisque = new Color32(255, 228, 196, 255); + public static readonly Color Black = new Color32(0, 0, 0, 255); + public static readonly Color BlanchedAlmond = new Color32(255, 235, 205, 255); + public static readonly Color Blue = new Color32(0, 0, 255, 255); + public static readonly Color BlueViolet = new Color32(138, 43, 226, 255); + public static readonly Color Brown = new Color32(165, 42, 42, 255); + public static readonly Color Burlywood = new Color32(222, 184, 135, 255); + public static readonly Color CadetBlue = new Color32(95, 158, 160, 255); + public static readonly Color Chartreuse = new Color32(127, 255, 0, 255); + public static readonly Color Chocolate = new Color32(210, 105, 30, 255); + public static readonly Color Coral = new Color32(255, 127, 80, 255); + public static readonly Color CornflowerBlue = new Color32(100, 149, 237, 255); + public static readonly Color Cornsilk = new Color32(255, 248, 220, 255); + public static readonly Color Crimson = new Color32(220, 20, 60, 255); + public static readonly Color Cyan = new Color32(0, 255, 255, 255); + public static readonly Color DarkBlue = new Color32(0, 0, 139, 255); + public static readonly Color DarkCyan = new Color32(0, 139, 139, 255); + public static readonly Color DarkGoldenrod = new Color32(184, 134, 11, 255); + public static readonly Color DarkGray = new Color32(169, 169, 169, 255); + public static readonly Color DarkGreen = new Color32(0, 100, 0, 255); + public static readonly Color DarkKhaki = new Color32(189, 183, 107, 255); + public static readonly Color DarkMagenta = new Color32(139, 0, 139, 255); + public static readonly Color DarkOliveGreen = new Color32(85, 107, 47, 255); + public static readonly Color DarkOrange = new Color32(255, 140, 0, 255); + public static readonly Color DarkOrchid = new Color32(153, 50, 204, 255); + public static readonly Color DarkRed = new Color32(139, 0, 0, 255); + public static readonly Color DarkSalmon = new Color32(233, 150, 122, 255); + public static readonly Color DarkSeaGreen = new Color32(143, 188, 143, 255); + public static readonly Color DarkSlateBlue = new Color32(72, 61, 139, 255); + public static readonly Color DarkSlateGray = new Color32(47, 79, 79, 255); + public static readonly Color DarkTurquoise = new Color32(0, 206, 209, 255); + public static readonly Color DarkViolet = new Color32(148, 0, 211, 255); + public static readonly Color DeepPink = new Color32(255, 20, 147, 255); + public static readonly Color DeepSkyBlue = new Color32(0, 191, 255, 255); + public static readonly Color DimGray = new Color32(105, 105, 105, 255); + public static readonly Color DodgerBlue = new Color32(30, 144, 255, 255); + public static readonly Color FireBrick = new Color32(178, 34, 34, 255); + public static readonly Color FloralWhite = new Color32(255, 250, 240, 255); + public static readonly Color ForestGreen = new Color32(34, 139, 34, 255); + public static readonly Color Fuchsia = new Color32(255, 0, 255, 255); + public static readonly Color Gainsboro = new Color32(220, 220, 220, 255); + public static readonly Color GhostWhite = new Color32(248, 248, 255, 255); + public static readonly Color Gold = new Color32(255, 215, 0, 255); + public static readonly Color Goldenrod = new Color32(218, 165, 32, 255); + public static readonly Color Gray = new Color32(128, 128, 128, 255); + public static readonly Color Green = new Color32(0, 128, 0, 255); + public static readonly Color GreenYellow = new Color32(173, 255, 47, 255); + public static readonly Color Honeydew = new Color32(240, 255, 240, 255); + public static readonly Color HotPink = new Color32(255, 105, 180, 255); + public static readonly Color IndianRed = new Color32(205, 92, 92, 255); + public static readonly Color Indigo = new Color32(75, 0, 130, 255); + public static readonly Color Ivory = new Color32(255, 255, 240, 255); + public static readonly Color Khaki = new Color32(240, 230, 140, 255); + public static readonly Color Lavender = new Color32(230, 230, 250, 255); + public static readonly Color Lavenderblush = new Color32(255, 240, 245, 255); + public static readonly Color LawnGreen = new Color32(124, 252, 0, 255); + public static readonly Color LemonChiffon = new Color32(255, 250, 205, 255); + public static readonly Color LightBlue = new Color32(173, 216, 230, 255); + public static readonly Color LightCoral = new Color32(240, 128, 128, 255); + public static readonly Color LightCyan = new Color32(224, 255, 255, 255); + public static readonly Color LightGoldenodYellow = new Color32(250, 250, 210, 255); + public static readonly Color LightGray = new Color32(211, 211, 211, 255); + public static readonly Color LightGreen = new Color32(144, 238, 144, 255); + public static readonly Color LightPink = new Color32(255, 182, 193, 255); + public static readonly Color LightSalmon = new Color32(255, 160, 122, 255); + public static readonly Color LightSeaGreen = new Color32(32, 178, 170, 255); + public static readonly Color LightSkyBlue = new Color32(135, 206, 250, 255); + public static readonly Color LightSlateGray = new Color32(119, 136, 153, 255); + public static readonly Color LightSteelBlue = new Color32(176, 196, 222, 255); + public static readonly Color LightYellow = new Color32(255, 255, 224, 255); + public static readonly Color Lime = new Color32(0, 255, 0, 255); + public static readonly Color LimeGreen = new Color32(50, 205, 50, 255); + public static readonly Color Linen = new Color32(250, 240, 230, 255); + public static readonly Color Magenta = new Color32(255, 0, 255, 255); + public static readonly Color Maroon = new Color32(128, 0, 0, 255); + public static readonly Color MediumAquamarine = new Color32(102, 205, 170, 255); + public static readonly Color MediumBlue = new Color32(0, 0, 205, 255); + public static readonly Color MediumOrchid = new Color32(186, 85, 211, 255); + public static readonly Color MediumPurple = new Color32(147, 112, 219, 255); + public static readonly Color MediumSeaGreen = new Color32(60, 179, 113, 255); + public static readonly Color MediumSlateBlue = new Color32(123, 104, 238, 255); + public static readonly Color MediumSpringGreen = new Color32(0, 250, 154, 255); + public static readonly Color MediumTurquoise = new Color32(72, 209, 204, 255); + public static readonly Color MediumVioletRed = new Color32(199, 21, 133, 255); + public static readonly Color MidnightBlue = new Color32(25, 25, 112, 255); + public static readonly Color Mintcream = new Color32(245, 255, 250, 255); + public static readonly Color MistyRose = new Color32(255, 228, 225, 255); + public static readonly Color Moccasin = new Color32(255, 228, 181, 255); + public static readonly Color NavajoWhite = new Color32(255, 222, 173, 255); + public static readonly Color Navy = new Color32(0, 0, 128, 255); + public static readonly Color OldLace = new Color32(253, 245, 230, 255); + public static readonly Color Olive = new Color32(128, 128, 0, 255); + public static readonly Color Olivedrab = new Color32(107, 142, 35, 255); + public static readonly Color Orange = new Color32(255, 165, 0, 255); + public static readonly Color Orangered = new Color32(255, 69, 0, 255); + public static readonly Color Orchid = new Color32(218, 112, 214, 255); + public static readonly Color PaleGoldenrod = new Color32(238, 232, 170, 255); + public static readonly Color PaleGreen = new Color32(152, 251, 152, 255); + public static readonly Color PaleTurquoise = new Color32(175, 238, 238, 255); + public static readonly Color PaleVioletred = new Color32(219, 112, 147, 255); + public static readonly Color PapayaWhip = new Color32(255, 239, 213, 255); + public static readonly Color PeachPuff = new Color32(255, 218, 185, 255); + public static readonly Color Peru = new Color32(205, 133, 63, 255); + public static readonly Color Pink = new Color32(255, 192, 203, 255); + public static readonly Color Plum = new Color32(221, 160, 221, 255); + public static readonly Color PowderBlue = new Color32(176, 224, 230, 255); + public static readonly Color Purple = new Color32(128, 0, 128, 255); + public static readonly Color Red = new Color32(255, 0, 0, 255); + public static readonly Color RosyBrown = new Color32(188, 143, 143, 255); + public static readonly Color RoyalBlue = new Color32(65, 105, 225, 255); + public static readonly Color SaddleBrown = new Color32(139, 69, 19, 255); + public static readonly Color Salmon = new Color32(250, 128, 114, 255); + public static readonly Color SandyBrown = new Color32(244, 164, 96, 255); + public static readonly Color SeaGreen = new Color32(46, 139, 87, 255); + public static readonly Color Seashell = new Color32(255, 245, 238, 255); + public static readonly Color Sienna = new Color32(160, 82, 45, 255); + public static readonly Color Silver = new Color32(192, 192, 192, 255); + public static readonly Color SkyBlue = new Color32(135, 206, 235, 255); + public static readonly Color SlateBlue = new Color32(106, 90, 205, 255); + public static readonly Color SlateGray = new Color32(112, 128, 144, 255); + public static readonly Color Snow = new Color32(255, 250, 250, 255); + public static readonly Color SpringGreen = new Color32(0, 255, 127, 255); + public static readonly Color SteelBlue = new Color32(70, 130, 180, 255); + public static readonly Color Tan = new Color32(210, 180, 140, 255); + public static readonly Color Teal = new Color32(0, 128, 128, 255); + public static readonly Color Thistle = new Color32(216, 191, 216, 255); + public static readonly Color Tomato = new Color32(255, 99, 71, 255); + public static readonly Color Turquoise = new Color32(64, 224, 208, 255); + public static readonly Color Violet = new Color32(238, 130, 238, 255); + public static readonly Color Wheat = new Color32(245, 222, 179, 255); + public static readonly Color White = new Color32(255, 255, 255, 255); + public static readonly Color WhiteSmoke = new Color32(245, 245, 245, 255); + public static readonly Color Yellow = new Color32(255, 255, 0, 255); + public static readonly Color YellowGreen = new Color32(154, 205, 50, 255); + + public static Dictionary ColorDictionary; + + public static Color RandomColor() + { + int random = Random.Range(0, 140); + return GetColorAt(random); + } + + public static Color GetColorAt(int index) + { + if (ColorDictionary == null) + { + InitializeDictionary(); + } + + if (index < ColorDictionary.Count) + { + return ColorDictionary[index]; + } + else + { + return Color.white; + } + } + + public static void InitializeDictionary() + { + ColorDictionary = new Dictionary + { + { 0, AliceBlue }, + { 1, AntiqueWhite }, + { 2, Aqua }, + { 3, Aquamarine }, + { 4, Azure }, + { 5, Beige }, + { 6, Bisque }, + { 7, Black }, + { 8, BlanchedAlmond }, + { 9, Blue }, + { 10, BlueViolet }, + { 11, Brown }, + { 12, Burlywood }, + { 13, CadetBlue }, + { 14, Chartreuse }, + { 15, Chocolate }, + { 16, Coral }, + { 17, CornflowerBlue }, + { 18, Cornsilk }, + { 19, Crimson }, + { 20, Cyan }, + { 21, DarkBlue }, + { 22, DarkCyan }, + { 23, DarkGoldenrod }, + { 24, DarkGray }, + { 25, DarkGreen }, + { 26, DarkKhaki }, + { 27, DarkMagenta }, + { 28, DarkOliveGreen }, + { 29, DarkOrange }, + { 30, DarkOrchid }, + { 31, DarkRed }, + { 32, DarkSalmon }, + { 33, DarkSeaGreen }, + { 34, DarkSlateBlue }, + { 35, DarkSlateGray }, + { 36, DarkTurquoise }, + { 37, DarkViolet }, + { 38, DeepPink }, + { 39, DeepSkyBlue }, + { 40, DimGray }, + { 41, DodgerBlue }, + { 42, FireBrick }, + { 43, FloralWhite }, + { 44, ForestGreen }, + { 45, Fuchsia }, + { 46, Gainsboro }, + { 47, GhostWhite }, + { 48, Gold }, + { 49, Goldenrod }, + { 50, Gray }, + { 51, Green }, + { 52, GreenYellow }, + { 53, Honeydew }, + { 54, HotPink }, + { 55, IndianRed }, + { 56, Indigo }, + { 57, Ivory }, + { 58, Khaki }, + { 59, Lavender }, + { 60, Lavenderblush }, + { 61, LawnGreen }, + { 62, LemonChiffon }, + { 63, LightBlue }, + { 64, LightCoral }, + { 65, LightCyan }, + { 66, LightGoldenodYellow }, + { 67, LightGray }, + { 68, LightGreen }, + { 69, LightPink }, + { 70, LightSalmon }, + { 71, LightSeaGreen }, + { 72, LightSkyBlue }, + { 73, LightSlateGray }, + { 74, LightSteelBlue }, + { 75, LightYellow }, + { 76, Lime }, + { 77, LimeGreen }, + { 78, Linen }, + { 79, Magenta }, + { 80, Maroon }, + { 81, MediumAquamarine }, + { 82, MediumBlue }, + { 83, MediumOrchid }, + { 84, MediumPurple }, + { 85, MediumSeaGreen }, + { 86, MediumSlateBlue }, + { 87, MediumSpringGreen }, + { 88, MediumTurquoise }, + { 89, MediumVioletRed }, + { 90, MidnightBlue }, + { 91, Mintcream }, + { 92, MistyRose }, + { 93, Moccasin }, + { 94, NavajoWhite }, + { 95, Navy }, + { 96, OldLace }, + { 97, Olive }, + { 98, Olivedrab }, + { 99, Orange }, + { 100, Orangered }, + { 101, Orchid }, + { 102, PaleGoldenrod }, + { 103, PaleGreen }, + { 104, PaleTurquoise }, + { 105, PaleVioletred }, + { 106, PapayaWhip }, + { 107, PeachPuff }, + { 108, Peru }, + { 109, Pink }, + { 110, Plum }, + { 111, PowderBlue }, + { 112, Purple }, + { 113, Red }, + { 114, RosyBrown }, + { 115, RoyalBlue }, + { 116, SaddleBrown }, + { 117, Salmon }, + { 118, SandyBrown }, + { 119, SeaGreen }, + { 120, Seashell }, + { 121, Sienna }, + { 122, Silver }, + { 123, SkyBlue }, + { 124, SlateBlue }, + { 125, SlateGray }, + { 126, Snow }, + { 127, SpringGreen }, + { 128, SteelBlue }, + { 129, Tan }, + { 130, Teal }, + { 131, Thistle }, + { 132, Tomato }, + { 133, Turquoise }, + { 134, Violet }, + { 135, Wheat }, + { 136, White }, + { 137, WhiteSmoke }, + { 138, Yellow }, + { 139, YellowGreen }, + { 140, ReunoYellow }, + { 141, BestRed } + }; + } + + /// + /// Returns a random color between the two min/max specified + /// + /// + /// + /// + /// + public static Color MMRandomColor(this Color color, Color min, Color max) + { + Color c = new Color() + { + r = UnityEngine.Random.Range(min.r, max.r), + g = UnityEngine.Random.Range(min.g, max.g), + b = UnityEngine.Random.Range(min.b, max.b), + a = UnityEngine.Random.Range(min.a, max.a) + }; + + return c; + } + + /// + /// Returns a uniform "flat" gradient from the specified color and alpha + /// + /// the color to use for both ends of the gradient + /// the alpha to use for both ends of the gradient + /// + public static Gradient FlatGradient(Color32 color, float alpha = 1f) + { + return new Gradient() + { + colorKeys = new GradientColorKey[2] + { + new GradientColorKey(color, 0), new GradientColorKey(color, 1f) + }, alphaKeys = new GradientAlphaKey[2] + { + new GradientAlphaKey(alpha, 0), new GradientAlphaKey(alpha, 1) + } + }; + } + + /// + /// Returns a simple gradient made of the two specified colors and alphas + /// + /// the color to use for the left side of the gradient + /// the color to use for the right side of the gradient + /// the alpha to use for the left side of the gradient + /// the alpha to use for the right side of the gradient + /// + public static Gradient SimpleGradient(Color32 startColor, Color32 endColor, float startAlpha = 1f, + float endAlpha = 1f) + { + return new Gradient() + { + colorKeys = new GradientColorKey[2] + { + new GradientColorKey(startColor, 0), new GradientColorKey(endColor, 1f) + }, alphaKeys = new GradientAlphaKey[2] + { + new GradientAlphaKey(startAlpha, 0), new GradientAlphaKey(endAlpha, 1) + } + }; + } + + + /// + /// Tint : Uses HSV color conversions, keeps the original values, multiplies alpha + /// Multiply : The whole color, including alpha, is multiplied over the original + /// Replace : completely replaces the original with the target color + /// ReplaceKeepAlpha : color is replaced but the original alpha channel is ignored + /// Add : target color gets added (including its alpha) + /// + public enum ColoringMode { Tint, Multiply, Replace, ReplaceKeepAlpha, Add } + + public static Color MMColorize(this Color originalColor, Color targetColor, ColoringMode coloringMode, float lerpAmount = 1.0f) + { + Color resultColor = Color.white; + switch (coloringMode) + { + case ColoringMode.Tint: + { + float s_h, s_s, s_v, t_h, t_s, t_v; + Color.RGBToHSV(originalColor, out s_h, out s_s, out s_v); + Color.RGBToHSV(targetColor, out t_h, out t_s, out t_v); + resultColor = Color.HSVToRGB(t_h, t_s, s_v * t_v); + resultColor.a = originalColor.a * targetColor.a; + } + break; + case ColoringMode.Multiply: + resultColor = originalColor * targetColor; + break; + case ColoringMode.Replace: + resultColor = targetColor; + break; + case ColoringMode.ReplaceKeepAlpha: + resultColor = targetColor; + resultColor.a = originalColor.a; + break; + case ColoringMode.Add: + resultColor = originalColor + targetColor; + break; + default: + break; + } + return Color.Lerp(originalColor, resultColor, lerpAmount); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMColors.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMColors.cs.meta new file mode 100644 index 0000000..9b4b441 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMColors.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9fae8d45e562f342ad2e7ecc03196cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMConsole.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMConsole.cs new file mode 100644 index 0000000..0b8df8f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMConsole.cs @@ -0,0 +1,106 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// This class displays an on-screen console for easier debugging + /// DO NOT ADD THIS CLASS AS A COMPONENT. + /// Instead, use the MMDebug.DebugOnScreen methods that will take care of everything + /// + public class MMConsole : MonoBehaviour + { + protected string _messageStack; + + protected int _numberOfMessages=0; + protected bool _messageStackHasBeenDisplayed=false; + protected int _largestMessageLength=0; + + protected int _marginTop = 10; + protected int _marginLeft = 10; + protected int _padding = 10; + + protected int _fontSize = 10; + protected int _characterHeight = 16; + protected int _characterWidth = 6; + + /// + /// Draws a box containing the current stack of messages on top of the screen. + /// + protected virtual void OnGUI() + { + // we define the style to use and the font size + GUIStyle style = GUI.skin.GetStyle ("label"); + style.fontSize = _fontSize; + + // we determine our box dimension based on the number of lines and the length of the longest line + int boxHeight = _numberOfMessages*_characterHeight; + int boxWidth = _largestMessageLength * _characterWidth; + + // we draw a box and the message on top of it + GUI.Box (new Rect (_marginLeft,_marginTop,boxWidth+_padding*2,boxHeight+_padding*2), ""); + GUI.Label(new Rect(_marginLeft+_padding, _marginTop+_padding, boxWidth, boxHeight), _messageStack); + + // we set our flag to true, which will trigger the reset of the stack next time it's accessed + _messageStackHasBeenDisplayed=true; + } + + /// + /// Sets the size of the font, and automatically deduces the character's height and width. + /// + /// Font size. + public virtual void SetFontSize(int fontSize) + { + _fontSize = fontSize; + _characterHeight = (int)Mathf.Round(1.6f * fontSize + 0.49f); + _characterWidth = (int)Mathf.Round(0.6f * fontSize + 0.49f); + } + + /// + /// Sets the screen offset, from the top left corner + /// + /// + /// + public virtual void SetScreenOffset(int top = 10, int left = 10) + { + _marginTop = top; + _marginLeft = left; + } + + /// + /// Replaces the content of the current message stack with the specified string + /// + /// New message. + public virtual void SetMessage(string newMessage) + { + _messageStack=newMessage; + _numberOfMessages=1; + } + + /// + /// Adds the specified message to the message stack. + /// + /// New message. + public virtual void AddMessage(string newMessage) + { + // if the message stack has been displayed, we empty it and reset our counters + if (_messageStackHasBeenDisplayed) + { + _messageStack=""; + _messageStackHasBeenDisplayed=false; + _numberOfMessages=0; + _largestMessageLength=0; + } + + // we add the specified message to the stack + _messageStack += newMessage+"\n"; + // if this new message is longer than our previous longer message, we store it (this will expand the box's width + if (newMessage.Length > _largestMessageLength) + { + _largestMessageLength = newMessage.Length; + } + // we increment our counter + _numberOfMessages++; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMConsole.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMConsole.cs.meta new file mode 100644 index 0000000..9057758 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMConsole.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 878e38786f84b4cb2befd22693a97a33 +timeCreated: 1455961502 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMCoroutine.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMCoroutine.cs new file mode 100644 index 0000000..4d50e20 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMCoroutine.cs @@ -0,0 +1,52 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public static class MMCoroutine + { + /// + /// Waits for the specified amount of frames + /// use : yield return MMCoroutine.WaitFor(1); + /// + /// + /// + public static IEnumerator WaitForFrames(int frameCount) + { + while (frameCount > 0) + { + frameCount--; + yield return null; + } + } + + /// + /// Waits for the specified amount of seconds (using regular time) + /// use : yield return MMCoroutine.WaitFor(1f); + /// + /// + /// + public static IEnumerator WaitFor(float seconds) + { + for (float timer = 0f; timer < seconds; timer += Time.deltaTime) + { + yield return null; + } + } + + /// + /// Waits for the specified amount of seconds (using unscaled time) + /// use : yield return MMCoroutine.WaitForUnscaled(1f); + /// + /// + /// + public static IEnumerator WaitForUnscaled(float seconds) + { + for (float timer = 0f; timer < seconds; timer += Time.unscaledDeltaTime) + { + yield return null; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMCoroutine.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMCoroutine.cs.meta new file mode 100644 index 0000000..9cb0542 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMCoroutine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be7f36cb3d627414895b9bb53b323c15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMDebug.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMDebug.cs new file mode 100644 index 0000000..fd6c30d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMDebug.cs @@ -0,0 +1,1122 @@ +using UnityEngine; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Text; +using System.Reflection; +using System.Linq; +using Debug = UnityEngine.Debug; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Debug helpers + /// + public static class MMDebug + { + #region Commands + + // the cached list of debug log commands + private static MethodInfo[] _commands; + // the max length of the log + private static readonly int _logHistoryMaxLength = 256; + + #if UNITY_EDITOR + private static bool _debugDrawEnabledSet = false; + #endif + private static bool _debugDrawEnabled = false; + private static bool _debugLogEnabled = false; + private static bool _debugLogEnabledSet = false; + + /// + /// Returns a list of all the debug command lines found in the project's assemblies + /// + public static MethodInfo[] Commands + { + get + { + if (_commands == null) + { + _commands = AppDomain.CurrentDomain.GetAssemblies() + .SelectMany( + m => m.GetTypes().SelectMany( + n => n.GetMethods(BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public) + .Where(o => o.GetCustomAttribute() != null))).ToArray(); + } + + return _commands; + } + } + + /// + /// Tries to input a command + /// + /// + public static void DebugLogCommand(string command) + { + // if the command is empty we output an empty line + if (command == string.Empty || command == null) + { + LogCommand("", "#ff2a00"); + return; + } + + // we split around spaces + string[] splitCommand = command.Split(new char[] { ' ' }, System.StringSplitOptions.RemoveEmptyEntries); + if (splitCommand == null || splitCommand.Length == 0) + { + LogCommand("Empty command", "#ff2a00"); + return; + } + + // we check if the first command exists + string commandFirst = MMString.UppercaseFirst(splitCommand[0]); + MethodInfo[] methods = Commands.Where(m => m.Name == commandFirst).ToArray(); + if (methods.Length == 0) + { + LogCommand("Command " + commandFirst + " not found.", "#ff2a00"); + return; + } + + MethodInfo commandInfo; + object[] parameters = null; + + if (splitCommand.Length > 1) + { + // if there are arguments + commandInfo = methods.Where(m => m.GetParameters().Length > 0).FirstOrDefault(); + + if (commandInfo == null) + { + LogCommand("A version of command " + commandFirst + " with arguments could not be found. Maybe try without arguments.", "#ff2a00"); + return; + } + + MMDebugLogCommandArgumentCountAttribute argumentAttribute = commandInfo.GetCustomAttributes(true).FirstOrDefault(); + if (argumentAttribute != null && argumentAttribute.ArgumentCount > splitCommand.Length - 1) + { + LogCommand("A version of command " + commandFirst + " needs at least " + argumentAttribute.ArgumentCount + " arguments.", "#ff2a00"); + return; + } + + parameters = new object[] { splitCommand }; + } + else + { + // if there are no arguments + commandInfo = methods.Where(m => m.GetParameters().Length == 0).FirstOrDefault(); + + if (commandInfo == null) + { + LogCommand("A version of command " + commandFirst + " without arguments could not be found.", "#ff2a00"); + return; + } + } + + LogCommand(command, "#FFC400"); + methods[0].Invoke(null, parameters); + } + + /// + /// Logs the command, adding it to the log history and triggers an event + /// + /// + /// + private static void LogCommand(string command, string color) + { + DebugLogItem item = new DebugLogItem(command, color, Time.frameCount, Time.time, 3, true); + LogHistory.Add(item); + MMDebugLogEvent.Trigger(new DebugLogItem(null, "", Time.frameCount, Time.time, 0, false)); + } + + #endregion + + #region DebugLog + + /// + /// A struct used to store log items + /// + public struct DebugLogItem + { + public object Message; + public string Color; + public int Framecount; + public float Time; + public int TimePrecision; + public bool DisplayFrameCount; + + public DebugLogItem(object message, string color, int framecount, float time, int timePrecision, bool displayFrameCount) + { + Message = message; + Color = color; + Framecount = framecount; + Time = time; + TimePrecision = timePrecision; + DisplayFrameCount = displayFrameCount; + } + } + + /// + /// A list of all the debug logs (up to DebugLogMaxLength entries) + /// + public static List LogHistory = new List(_logHistoryMaxLength); + + /// + /// Returns a string with all log history condensed + /// + public static string LogHistoryText + { + get + { + string colorPrefix = ""; + string colorSuffix = ""; + + StringBuilder log = new StringBuilder(); + for (int i = 0; i < LogHistory.Count; i++) + { + // colors + if (!string.IsNullOrEmpty(LogHistory[i].Color)) + { + colorPrefix = ""; + colorSuffix = ""; + } + + // build output + if (LogHistory[i].DisplayFrameCount) + { + log.Append("[" + LogHistory[i].Framecount + "] "); + } + log.Append("[" + MMTime.FloatToTimeString(LogHistory[i].Time, false, true, true, true) + "] "); + log.Append(colorPrefix + LogHistory[i].Message + colorSuffix); + log.Append(System.Environment.NewLine); + } + return log.ToString(); + } + } + + /// + /// Clears the debug log + /// + public static void DebugLogClear() + { + LogHistory.Clear(); + MMDebugLogEvent.Trigger(new DebugLogItem(null, "", Time.frameCount, Time.time, 0, false)); + } + + /// + /// Outputs an info message to the console + /// + /// + /// + /// + /// + public static void DebugLogInfo(object message, string color = "", int timePrecision = 3, bool displayFrameCount = true) + { + DebugLogTime(message, color, timePrecision, displayFrameCount); + } + + /// + /// Outputs the message object to the console, prefixed with the current timestamp + /// + /// Message. + public static void DebugLogTime(object message, string color = "", int timePrecision = 3, bool displayFrameCount = true) + { + if (!DebugLogsEnabled) + { + return; + } + + string callerObjectName = new StackTrace().GetFrame(1).GetMethod().ReflectedType.Name; + color = (color == "") ? "#00FFFF" : color; + + // colors + string colorPrefix = ""; + string colorSuffix = ""; + if (!string.IsNullOrEmpty(color)) + { + colorPrefix = ""; + colorSuffix = ""; + } + + // build output + string output = ""; + if (displayFrameCount) + { + output += "[f" + Time.frameCount + "] "; + } + output += "[" + MMTime.FloatToTimeString(Time.time, false, true, true, true) + "] "; + output += callerObjectName + " : "; + output += colorPrefix + message + colorSuffix; + + // we output to the console + Debug.Log(output); + + // we log to the MM console + DebugLogItem item = LogDebugToConsole(message, color, timePrecision, displayFrameCount); + + } + + /// + /// Logs the specified message to the console + /// + /// + /// + /// + /// + /// + public static DebugLogItem LogDebugToConsole(object message, string color, int timePrecision, bool displayFrameCount) + { + DebugLogItem item = new DebugLogItem(message, color, Time.frameCount, Time.time, timePrecision, displayFrameCount); + + // we add to our DebugLog + if (LogHistory.Count > _logHistoryMaxLength) + { + LogHistory.RemoveAt(0); + } + + LogHistory.Add(item); + + // we trigger an event + MMDebugLogEvent.Trigger(item); + + return item; + } + + /// + /// An event used to broadcast debug logs + /// + public struct MMDebugLogEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(DebugLogItem item); + static public void Trigger(DebugLogItem item) + { + OnEvent?.Invoke(item); + } + } + + #endregion + + #region EnableDisableDebugs + + /// + /// whether or not debug logs (MMDebug.DebugLogTime, MMDebug.DebugOnScreen) should be displayed + /// + public static bool DebugLogsEnabled + { + get + { + if (_debugLogEnabledSet) + { + return _debugLogEnabled; + } + + if (PlayerPrefs.HasKey(_editorPrefsDebugLogs)) + { + _debugLogEnabled = (PlayerPrefs.GetInt(_editorPrefsDebugLogs) == 0) ? false : true; + } + else + { + _debugLogEnabled = true; + } + + _debugLogEnabledSet = true; + return _debugLogEnabled; + } + private set + { + _debugLogEnabledSet = true; + _debugLogEnabled = value; + } + } + + /// + /// whether or not debug draws should be executed + /// + public static bool DebugDrawEnabled + { + get + { + #if UNITY_EDITOR + if (_debugDrawEnabledSet) + { + return _debugDrawEnabled; + } + + if (PlayerPrefs.HasKey(_editorPrefsDebugDraws)) + { + _debugDrawEnabled = (PlayerPrefs.GetInt(_editorPrefsDebugDraws) == 0) ? false : true; + } + else + { + _debugDrawEnabled = true; + } + _debugDrawEnabledSet = true; + return _debugDrawEnabled; + #else + return false; + #endif + } + private set { } + } + + private const string _editorPrefsDebugLogs = "DebugLogsEnabled"; + private const string _editorPrefsDebugDraws = "DebugDrawsEnabled"; + + /// + /// Enables or disables debug logs + /// + /// + public static void SetDebugLogsEnabled(bool status) + { + DebugLogsEnabled = status; + _debugLogEnabled = status; + #if UNITY_EDITOR + int newStatus = status ? 1 : 0; + PlayerPrefs.SetInt(_editorPrefsDebugLogs, newStatus); + #endif + } + + /// + /// Enables or disables debug draws + /// + /// + public static void SetDebugDrawEnabled(bool status) + { + DebugDrawEnabled = status; + _debugDrawEnabled = status; + #if UNITY_EDITOR + int newStatus = status ? 1 : 0; + PlayerPrefs.SetInt(_editorPrefsDebugDraws, newStatus); + #endif + } + + #endregion + + #region Casts + + /// + /// Draws a debug ray in 2D and does the actual raycast + /// + /// The raycast hit. + /// Ray origin point. + /// Ray direction. + /// Ray distance. + /// Mask. + /// If set to true debug. + /// Color. + public static RaycastHit2D RayCast(Vector2 rayOriginPoint, Vector2 rayDirection, float rayDistance, LayerMask mask, Color color,bool drawGizmo=false) + { + if (drawGizmo && DebugDrawEnabled) + { + Debug.DrawRay (rayOriginPoint, rayDirection * rayDistance, color); + } + return Physics2D.Raycast(rayOriginPoint,rayDirection,rayDistance,mask); + } + + /// + /// Does a boxcast and draws a box gizmo + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static RaycastHit2D BoxCast(Vector2 origin, Vector2 size, float angle, Vector2 direction, float length, LayerMask mask, Color color, bool drawGizmo = false) + { + if (drawGizmo && DebugDrawEnabled) + { + Quaternion rotation = Quaternion.Euler(0f, 0f, angle); + + Vector3[] points = new Vector3[8]; + + float halfSizeX = size.x / 2f; + float halfSizeY = size.y / 2f; + + points[0] = rotation * (origin + (Vector2.left * halfSizeX) + (Vector2.up * halfSizeY)); // top left + points[1] = rotation * (origin + (Vector2.right * halfSizeX) + (Vector2.up * halfSizeY)); // top right + points[2] = rotation * (origin + (Vector2.right * halfSizeX) - (Vector2.up * halfSizeY)); // bottom right + points[3] = rotation * (origin + (Vector2.left * halfSizeX) - (Vector2.up * halfSizeY)); // bottom left + + points[4] = rotation * ((origin + Vector2.left * halfSizeX + Vector2.up * halfSizeY) + length * direction); // top left + points[5] = rotation * ((origin + Vector2.right * halfSizeX + Vector2.up * halfSizeY) + length * direction); // top right + points[6] = rotation * ((origin + Vector2.right * halfSizeX - Vector2.up * halfSizeY) + length * direction); // bottom right + points[7] = rotation * ((origin + Vector2.left * halfSizeX - Vector2.up * halfSizeY) + length * direction); // bottom left + + Debug.DrawLine(points[0], points[1], color); + Debug.DrawLine(points[1], points[2], color); + Debug.DrawLine(points[2], points[3], color); + Debug.DrawLine(points[3], points[0], color); + + Debug.DrawLine(points[4], points[5], color); + Debug.DrawLine(points[5], points[6], color); + Debug.DrawLine(points[6], points[7], color); + Debug.DrawLine(points[7], points[4], color); + + Debug.DrawLine(points[0], points[4], color); + Debug.DrawLine(points[1], points[5], color); + Debug.DrawLine(points[2], points[6], color); + Debug.DrawLine(points[3], points[7], color); + + } + return Physics2D.BoxCast(origin, size, angle, direction, length, mask); + } + + /// + /// Draws a debug ray without allocating memory + /// + /// The ray cast non alloc. + /// Array. + /// Ray origin point. + /// Ray direction. + /// Ray distance. + /// Mask. + /// Color. + /// If set to true draw gizmo. + public static RaycastHit2D MonoRayCastNonAlloc(RaycastHit2D[] array, Vector2 rayOriginPoint, Vector2 rayDirection, float rayDistance, LayerMask mask, Color color,bool drawGizmo=false) + { + if (drawGizmo && DebugDrawEnabled) + { + Debug.DrawRay (rayOriginPoint, rayDirection * rayDistance, color); + } + if (Physics2D.RaycastNonAlloc(rayOriginPoint, rayDirection, array, rayDistance, mask) > 0) + { + return array[0]; + } + return new RaycastHit2D(); + } + + /// + /// Draws a debug ray in 3D and does the actual raycast + /// + /// The raycast hit. + /// Ray origin point. + /// Ray direction. + /// Ray distance. + /// Mask. + /// If set to true debug. + /// Color. + /// If set to true draw gizmo. + public static RaycastHit Raycast3D(Vector3 rayOriginPoint, Vector3 rayDirection, float rayDistance, LayerMask mask, Color color,bool drawGizmo=false, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal) + { + if (drawGizmo && DebugDrawEnabled) + { + Debug.DrawRay (rayOriginPoint, rayDirection * rayDistance, color); + } + RaycastHit hit; + Physics.Raycast(rayOriginPoint, rayDirection, out hit, rayDistance, mask, queryTriggerInteraction); + return hit; + } + + #endregion + + #region DebugOnScreen + + #if MM_UI + //public static MMConsole _console; + public static MMDebugOnScreenConsole _console; + private const string _debugConsolePrefabPath = "MMDebugOnScreenConsole"; + + /// + /// Instantiates a MMConsole if there isn't one already, and adds the message in parameter to it. + /// + /// Message. + public static void DebugOnScreen(string message) + { + if (!DebugLogsEnabled) + { + return; + } + + InstantiateOnScreenConsole(); + _console.AddMessage(message, "", 30); + } + + /// + /// Instantiates a MMConsole if there isn't one already, and displays the label in bold and its value next to it. + /// + /// Label. + /// Value. + /// The optional font size. + public static void DebugOnScreen(string label, object value, int fontSize=25) + { + if (!DebugLogsEnabled) + { + return; + } + + InstantiateOnScreenConsole(fontSize); + _console.AddMessage(label, value, fontSize); + } + + /// + /// Instantiates the on screen console if there isn't one already + /// + public static void InstantiateOnScreenConsole(int fontSize=25) + { + if (!DebugLogsEnabled) + { + return; + } + + if (_console == null) + { + // we try to find one in the scene + _console = (MMDebugOnScreenConsole) GameObject.FindObjectOfType(typeof(MMDebugOnScreenConsole)); + } + + if (_console == null) + { + // we instantiate the console + GameObject loaded = UnityEngine.Object.Instantiate(Resources.Load(_debugConsolePrefabPath) as GameObject); + loaded.name = "MMDebugOnScreenConsole"; + _console = loaded.GetComponent(); + } + } + + /// + /// Use this method to specify what console to use + /// + /// + public static void SetOnScreenConsole(MMDebugOnScreenConsole newConsole) + { + _console = newConsole; + } + #endif + + #endregion + + #region DebugDraw + + /// + /// Draws a gizmo arrow going from the origin position and along the direction Vector3 + /// + /// Origin. + /// Direction. + /// Color. + public static void DrawGizmoArrow(Vector3 origin, Vector3 direction, Color color, float arrowHeadLength = 3f, float arrowHeadAngle = 25f) + { + if (!DebugDrawEnabled) + { + return; + } + + Gizmos.color = color; + Gizmos.DrawRay(origin, direction); + + DrawArrowEnd(true, origin, direction, color, arrowHeadLength, arrowHeadAngle); + } + + /// + /// Draws a debug arrow going from the origin position and along the direction Vector3 + /// + /// Origin. + /// Direction. + /// Color. + public static void DebugDrawArrow(Vector3 origin, Vector3 direction, Color color, float arrowHeadLength = 0.2f, float arrowHeadAngle = 35f) + { + if (!DebugDrawEnabled) + { + return; + } + + Debug.DrawRay(origin, direction, color); + + DrawArrowEnd(false,origin,direction,color,arrowHeadLength,arrowHeadAngle); + } + + /// + /// Draws a debug arrow going from the origin position and along the direction Vector3 + /// + /// Origin. + /// Direction. + /// Color. + /// Arrow length. + /// Arrow head length. + /// Arrow head angle. + public static void DebugDrawArrow(Vector3 origin, Vector3 direction, Color color, float arrowLength, float arrowHeadLength = 0.20f, float arrowHeadAngle = 35.0f) + { + if (!DebugDrawEnabled) + { + return; + } + + Debug.DrawRay(origin, direction * arrowLength, color); + + DrawArrowEnd(false,origin,direction * arrowLength,color,arrowHeadLength,arrowHeadAngle); + } + + /// + /// Draws a debug cross of the specified size and color at the specified point + /// + /// Spot. + /// Cross size. + /// Color. + public static void DebugDrawCross (Vector3 spot, float crossSize, Color color) + { + if (!DebugDrawEnabled) + { + return; + } + + Vector3 tempOrigin = Vector3.zero; + Vector3 tempDirection = Vector3.zero; + + tempOrigin.x = spot.x - crossSize / 2; + tempOrigin.y = spot.y - crossSize / 2; + tempOrigin.z = spot.z ; + tempDirection.x = 1; + tempDirection.y = 1; + tempDirection.z = 0; + Debug.DrawRay (tempOrigin, tempDirection * crossSize, color); + + tempOrigin.x = spot.x - crossSize / 2; + tempOrigin.y = spot.y + crossSize / 2; + tempOrigin.z = spot.z ; + tempDirection.x = 1; + tempDirection.y = -1; + tempDirection.z = 0; + Debug.DrawRay (tempOrigin, tempDirection * crossSize, color); + } + + /// + /// Draws the arrow end for DebugDrawArrow + /// + /// If set to true draw gizmos. + /// Arrow end position. + /// Direction. + /// Color. + /// Arrow head length. + /// Arrow head angle. + private static void DrawArrowEnd (bool drawGizmos, Vector3 arrowEndPosition, Vector3 direction, Color color, float arrowHeadLength = 0.25f, float arrowHeadAngle = 40.0f) + { + if (!DebugDrawEnabled) + { + return; + } + + if (direction == Vector3.zero) + { + return; + } + Vector3 right = Quaternion.LookRotation (direction) * Quaternion.Euler (arrowHeadAngle, 0, 0) * Vector3.back; + Vector3 left = Quaternion.LookRotation (direction) * Quaternion.Euler (-arrowHeadAngle, 0, 0) * Vector3.back; + Vector3 up = Quaternion.LookRotation (direction) * Quaternion.Euler (0, arrowHeadAngle, 0) * Vector3.back; + Vector3 down = Quaternion.LookRotation (direction) * Quaternion.Euler (0, -arrowHeadAngle, 0) * Vector3.back; + if (drawGizmos) + { + Gizmos.color = color; + Gizmos.DrawRay (arrowEndPosition + direction, right * arrowHeadLength); + Gizmos.DrawRay (arrowEndPosition + direction, left * arrowHeadLength); + Gizmos.DrawRay (arrowEndPosition + direction, up * arrowHeadLength); + Gizmos.DrawRay (arrowEndPosition + direction, down * arrowHeadLength); + } + else + { + Debug.DrawRay (arrowEndPosition + direction, right * arrowHeadLength, color); + Debug.DrawRay (arrowEndPosition + direction, left * arrowHeadLength, color); + Debug.DrawRay (arrowEndPosition + direction, up * arrowHeadLength, color); + Debug.DrawRay (arrowEndPosition + direction, down * arrowHeadLength, color); + } + } + + /// + /// Draws handles to materialize the bounds of an object on screen. + /// + /// Bounds. + /// Color. + public static void DrawHandlesBounds(Bounds bounds, Color color) + { + if (!DebugDrawEnabled) + { + return; + } + + #if UNITY_EDITOR + Vector3 boundsCenter = bounds.center; + Vector3 boundsExtents = bounds.extents; + + Vector3 v3FrontTopLeft = new Vector3(boundsCenter.x - boundsExtents.x, boundsCenter.y + boundsExtents.y, boundsCenter.z - boundsExtents.z); // Front top left corner + Vector3 v3FrontTopRight = new Vector3(boundsCenter.x + boundsExtents.x, boundsCenter.y + boundsExtents.y, boundsCenter.z - boundsExtents.z); // Front top right corner + Vector3 v3FrontBottomLeft = new Vector3(boundsCenter.x - boundsExtents.x, boundsCenter.y - boundsExtents.y, boundsCenter.z - boundsExtents.z); // Front bottom left corner + Vector3 v3FrontBottomRight = new Vector3(boundsCenter.x + boundsExtents.x, boundsCenter.y - boundsExtents.y, boundsCenter.z - boundsExtents.z); // Front bottom right corner + Vector3 v3BackTopLeft = new Vector3(boundsCenter.x - boundsExtents.x, boundsCenter.y + boundsExtents.y, boundsCenter.z + boundsExtents.z); // Back top left corner + Vector3 v3BackTopRight = new Vector3(boundsCenter.x + boundsExtents.x, boundsCenter.y + boundsExtents.y, boundsCenter.z + boundsExtents.z); // Back top right corner + Vector3 v3BackBottomLeft = new Vector3(boundsCenter.x - boundsExtents.x, boundsCenter.y - boundsExtents.y, boundsCenter.z + boundsExtents.z); // Back bottom left corner + Vector3 v3BackBottomRight = new Vector3(boundsCenter.x + boundsExtents.x, boundsCenter.y - boundsExtents.y, boundsCenter.z + boundsExtents.z); // Back bottom right corner + + + Handles.color = color; + + Handles.DrawLine (v3FrontTopLeft, v3FrontTopRight); + Handles.DrawLine (v3FrontTopRight, v3FrontBottomRight); + Handles.DrawLine (v3FrontBottomRight, v3FrontBottomLeft); + Handles.DrawLine (v3FrontBottomLeft, v3FrontTopLeft); + + Handles.DrawLine (v3BackTopLeft, v3BackTopRight); + Handles.DrawLine (v3BackTopRight, v3BackBottomRight); + Handles.DrawLine (v3BackBottomRight, v3BackBottomLeft); + Handles.DrawLine (v3BackBottomLeft, v3BackTopLeft); + + Handles.DrawLine (v3FrontTopLeft, v3BackTopLeft); + Handles.DrawLine (v3FrontTopRight, v3BackTopRight); + Handles.DrawLine (v3FrontBottomRight, v3BackBottomRight); + Handles.DrawLine (v3FrontBottomLeft, v3BackBottomLeft); + #endif + } + + /// + /// Draws a solid rectangle at the specified position and size, and of the specified colors + /// + /// + /// + /// + /// + public static void DrawSolidRectangle(Vector3 position, Vector3 size, Color borderColor, Color solidColor) + { + if (!DebugDrawEnabled) + { + return; + } + + #if UNITY_EDITOR + + Vector3 halfSize = size / 2f; + + Vector3[] verts = new Vector3[4]; + verts[0] = new Vector3(halfSize.x, halfSize.y, halfSize.z); + verts[1] = new Vector3(-halfSize.x, halfSize.y, halfSize.z); + verts[2] = new Vector3(-halfSize.x, -halfSize.y, halfSize.z); + verts[3] = new Vector3(halfSize.x, -halfSize.y, halfSize.z); + Handles.DrawSolidRectangleWithOutline(verts, solidColor, borderColor); + + #endif + } + + /// + /// Draws a gizmo sphere of the specified size and color at a position + /// + /// Position. + /// Size. + /// Color. + public static void DrawGizmoPoint(Vector3 position, float size, Color color) + { + if (!DebugDrawEnabled) + { + return; + } + Gizmos.color = color; + Gizmos.DrawWireSphere(position,size); + } + + /// + /// Draws a cube at the specified position, and of the specified color and size + /// + /// Position. + /// Color. + /// Size. + public static void DrawCube (Vector3 position, Color color, Vector3 size) + { + if (!DebugDrawEnabled) + { + return; + } + + Vector3 halfSize = size / 2f; + + Vector3[] points = new Vector3 [] + { + position + new Vector3(halfSize.x,halfSize.y,halfSize.z), + position + new Vector3(-halfSize.x,halfSize.y,halfSize.z), + position + new Vector3(-halfSize.x,-halfSize.y,halfSize.z), + position + new Vector3(halfSize.x,-halfSize.y,halfSize.z), + position + new Vector3(halfSize.x,halfSize.y,-halfSize.z), + position + new Vector3(-halfSize.x,halfSize.y,-halfSize.z), + position + new Vector3(-halfSize.x,-halfSize.y,-halfSize.z), + position + new Vector3(halfSize.x,-halfSize.y,-halfSize.z), + }; + + Debug.DrawLine (points[0], points[1], color ); + Debug.DrawLine (points[1], points[2], color ); + Debug.DrawLine (points[2], points[3], color ); + Debug.DrawLine (points[3], points[0], color ); + } + + /// + /// Draws a cube at the specified position, offset, and of the specified size + /// + /// + /// + /// + /// + public static void DrawGizmoCube(Transform transform, Vector3 offset, Vector3 cubeSize, bool wireOnly) + { + if (!DebugDrawEnabled) + { + return; + } + + Matrix4x4 rotationMatrix = transform.localToWorldMatrix; + Gizmos.matrix = rotationMatrix; + if (wireOnly) + { + Gizmos.DrawWireCube(offset, cubeSize); + } + else + { + Gizmos.DrawCube(offset, cubeSize); + } + } + + /// + /// Draws a gizmo rectangle + /// + /// Center. + /// Size. + /// Color. + public static void DrawGizmoRectangle(Vector2 center, Vector2 size, Color color) + { + if (!DebugDrawEnabled) + { + return; + } + + Gizmos.color = color; + + Vector3 v3TopLeft = new Vector3(center.x - size.x/2, center.y + size.y/2, 0); + Vector3 v3TopRight = new Vector3(center.x + size.x/2, center.y + size.y/2, 0);; + Vector3 v3BottomRight = new Vector3(center.x + size.x/2, center.y - size.y/2, 0);; + Vector3 v3BottomLeft = new Vector3(center.x - size.x/2, center.y - size.y/2, 0);; + + Gizmos.DrawLine(v3TopLeft,v3TopRight); + Gizmos.DrawLine(v3TopRight,v3BottomRight); + Gizmos.DrawLine(v3BottomRight,v3BottomLeft); + Gizmos.DrawLine(v3BottomLeft,v3TopLeft); + } + + /// + /// Draws a gizmo rectangle + /// + /// Center. + /// Size. + /// Color. + public static void DrawGizmoRectangle(Vector2 center, Vector2 size, Matrix4x4 rotationMatrix, Color color) + { + if (!DebugDrawEnabled) + { + return; + } + + GL.PushMatrix(); + + Gizmos.color = color; + + Vector3 v3TopLeft = rotationMatrix * new Vector3(center.x - size.x / 2, center.y + size.y / 2, 0); + Vector3 v3TopRight = rotationMatrix * new Vector3(center.x + size.x / 2, center.y + size.y / 2, 0); ; + Vector3 v3BottomRight = rotationMatrix * new Vector3(center.x + size.x / 2, center.y - size.y / 2, 0); ; + Vector3 v3BottomLeft = rotationMatrix * new Vector3(center.x - size.x / 2, center.y - size.y / 2, 0); ; + + + Gizmos.DrawLine(v3TopLeft, v3TopRight); + Gizmos.DrawLine(v3TopRight, v3BottomRight); + Gizmos.DrawLine(v3BottomRight, v3BottomLeft); + Gizmos.DrawLine(v3BottomLeft, v3TopLeft); + GL.PopMatrix(); + } + + /// + /// Draws a rectangle based on a Rect and color + /// + /// Rectangle. + /// Color. + public static void DrawRectangle (Rect rectangle, Color color) + { + if (!DebugDrawEnabled) + { + return; + } + + Vector3 pos = new Vector3( rectangle.x + rectangle.width/2, rectangle.y + rectangle.height/2, 0.0f ); + Vector3 scale = new Vector3 (rectangle.width, rectangle.height, 0.0f ); + + MMDebug.DrawRectangle (pos, color, scale); + } + + /// + /// Draws a rectangle of the specified color and size at the specified position + /// + /// Position. + /// Color. + /// Size. + public static void DrawRectangle (Vector3 position, Color color, Vector3 size) + { + if (!DebugDrawEnabled) + { + return; + } + + Vector3 halfSize = size / 2f; + + Vector3[] points = new Vector3 [] + { + position + new Vector3(halfSize.x,halfSize.y,halfSize.z), + position + new Vector3(-halfSize.x,halfSize.y,halfSize.z), + position + new Vector3(-halfSize.x,-halfSize.y,halfSize.z), + position + new Vector3(halfSize.x,-halfSize.y,halfSize.z), + }; + + Debug.DrawLine (points[0], points[1], color ); + Debug.DrawLine (points[1], points[2], color ); + Debug.DrawLine (points[2], points[3], color ); + Debug.DrawLine (points[3], points[0], color ); + } + + /// + /// Draws a point of the specified color and size at the specified position + /// + /// Position. + /// Col. + /// Scale. + public static void DrawPoint (Vector3 position, Color color, float size) + { + if (!DebugDrawEnabled) + { + return; + } + + Vector3[] points = new Vector3[] + { + position + (Vector3.up * size), + position - (Vector3.up * size), + position + (Vector3.right * size), + position - (Vector3.right * size), + position + (Vector3.forward * size), + position - (Vector3.forward * size) + }; + + Debug.DrawLine (points[0], points[1], color ); + Debug.DrawLine (points[2], points[3], color ); + Debug.DrawLine (points[4], points[5], color ); + Debug.DrawLine (points[0], points[2], color ); + Debug.DrawLine (points[0], points[3], color ); + Debug.DrawLine (points[0], points[4], color ); + Debug.DrawLine (points[0], points[5], color ); + Debug.DrawLine (points[1], points[2], color ); + Debug.DrawLine (points[1], points[3], color ); + Debug.DrawLine (points[1], points[4], color ); + Debug.DrawLine (points[1], points[5], color ); + Debug.DrawLine (points[4], points[2], color ); + Debug.DrawLine (points[4], points[3], color ); + Debug.DrawLine (points[5], points[2], color ); + Debug.DrawLine (points[5], points[3], color ); + } + + /// + /// Draws a line of the specified color and size using gizmos + /// + /// + /// + /// + public static void DrawGizmoPoint (Vector3 position, Color color, float size) + { + if (!DebugDrawEnabled) + { + return; + } + + Vector3[] points = new Vector3[] + { + position + (Vector3.up * size), + position - (Vector3.up * size), + position + (Vector3.right * size), + position - (Vector3.right * size), + position + (Vector3.forward * size), + position - (Vector3.forward * size) + }; + + Gizmos.color = color; + Gizmos.DrawLine (points[0], points[1]); + Gizmos.DrawLine (points[2], points[3]); + Gizmos.DrawLine (points[4], points[5]); + Gizmos.DrawLine (points[0], points[2]); + Gizmos.DrawLine (points[0], points[3]); + Gizmos.DrawLine (points[0], points[4]); + Gizmos.DrawLine (points[0], points[5]); + Gizmos.DrawLine (points[1], points[2]); + Gizmos.DrawLine (points[1], points[3]); + Gizmos.DrawLine (points[1], points[4]); + Gizmos.DrawLine (points[1], points[5]); + Gizmos.DrawLine (points[4], points[2]); + Gizmos.DrawLine (points[4], points[3]); + Gizmos.DrawLine (points[5], points[2]); + Gizmos.DrawLine (points[5], points[3]); + } + + #endregion + + #region Info + + public static string GetSystemInfo() + { + string result = "SYSTEM INFO"; + + #if UNITY_IOS + result += "\n[iPhone generation]iPhone.generation.ToString()"; + #endif + + #if UNITY_ANDROID + result += "\n[system info]" + SystemInfo.deviceModel; + #endif + + result += "\nDevice Type : " + SystemInfo.deviceType; + result += "\nOS Version : " + SystemInfo.operatingSystem; + result += "\nSystem Memory Size : " + SystemInfo.systemMemorySize; + result += "\nGraphic Device Name : " + SystemInfo.graphicsDeviceName + " (version " + SystemInfo.graphicsDeviceVersion + ")"; + result += "\nGraphic Memory Size : " + SystemInfo.graphicsMemorySize; + result += "\nGraphic Max Texture Size : " + SystemInfo.maxTextureSize; + result += "\nGraphic Shader Level : " + SystemInfo.graphicsShaderLevel; + result += "\nCompute Shader Support : " + SystemInfo.supportsComputeShaders; + + result += "\nProcessor Count : " + SystemInfo.processorCount; + result += "\nProcessor Type : " + SystemInfo.processorType; + result += "\n3D Texture Support : " + SystemInfo.supports3DTextures; + result += "\nShadow Support : " + SystemInfo.supportsShadows; + + result += "\nPlatform : " + Application.platform; + result += "\nScreen Size : " + Screen.width + " x " + Screen.height; + result += "\nDPI : " + Screen.dpi; + + return result; + } + + #endregion + + #region Console + + public static void ClearConsole() + { + Type logEntries = System.Type.GetType("UnityEditor.LogEntries, UnityEditor.dll"); + if (logEntries != null) + { + MethodInfo clearMethod = logEntries.GetMethod("Clear", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); + if (clearMethod != null) + { + clearMethod.Invoke(null, null); + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMDebug.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMDebug.cs.meta new file mode 100644 index 0000000..c4b49ab --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMDebug.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d584bb96f63ba3848ab128ed5686f2f7 +timeCreated: 1455815182 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMDebugOnScreenConsole.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMDebugOnScreenConsole.cs new file mode 100644 index 0000000..5415e41 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMDebugOnScreenConsole.cs @@ -0,0 +1,169 @@ +using System.Collections; +using System.Collections.Generic; +using System.Text; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + public class MMDebugOnScreenConsole : MonoBehaviour + { + [Header("Bindings")] + public RectTransform Container; + public Image BackgroundImage; + public Text ConsoleText; + + [Header("Label")] + public Color LabelColor = Color.white; + + [Header("Value")] + public string ValueColor = "#FFC400"; + public float ValueSizeRatio = 1.35f; + + protected RectTransform _rectTransform; + + protected int _numberOfMessages = 0; + protected bool _messageStackHasBeenDisplayed = false; + protected bool _newMessageThisFrame = false; + protected int _largestMessageLength = 0; + protected StringBuilder _stringBuilder; + + protected string _valueTagStart; + protected string _valueTagEnd; + protected const string space = " "; + + protected Vector2 _closedSize = new Vector2(60, 80); + protected Vector2 _openBackgroundWidth; + protected int _last_append_at_frame = -1; + + public virtual void Toggle() + { + if (ConsoleText.enabled) + { + _openBackgroundWidth = BackgroundImage.rectTransform.sizeDelta; + BackgroundImage.rectTransform.sizeDelta = _closedSize; + } + else + { + BackgroundImage.rectTransform.sizeDelta = _openBackgroundWidth; + } + ConsoleText.enabled = !ConsoleText.isActiveAndEnabled; + } + + protected virtual void Awake() + { + Initialization(); + } + + protected virtual void Initialization() + { + ConsoleText.color = LabelColor; + _stringBuilder = new StringBuilder(); + _rectTransform = this.gameObject.GetComponent(); + + _valueTagEnd = ""; + } + + /// + /// Sets the size of the font, and automatically deduces the character's height and width. + /// + /// Font size. + protected virtual void SetFontSize(int fontSize) + { + if (fontSize == ConsoleText.fontSize) + { + return; + } + ConsoleText.fontSize = fontSize; + _valueTagStart = ""; + } + + /// + /// Draws a box containing the current stack of messages on top of the screen. + /// + protected virtual void LateUpdate() + { + // we set our flag to true, which will trigger the reset of the stack next time it's accessed + _messageStackHasBeenDisplayed = true; + if (!_newMessageThisFrame && ConsoleText.isActiveAndEnabled) + { + this.gameObject.SetActive(false); + } + _newMessageThisFrame = false; + } + + /// + /// Sets the screen offset, from the top left corner + /// + /// + /// + public virtual void SetScreenOffset(int top = 10, int left = 10) + { + Container.MMSetTop(top); + Container.MMSetLeft(left); + } + + /// + /// Replaces the content of the current message stack with the specified string + /// + /// New message. + public virtual void SetMessage(string newMessage) + { + AddMessage(newMessage, "", 30); + } + + /// + /// Adds the specified message to the message stack. + /// + /// New message. + public virtual void AddMessage(string label, object value, int fontSize) + { + if (!this.gameObject.activeInHierarchy) + { + this.gameObject.SetActive(true); + } + + int frame = Time.frameCount; + + if (!ConsoleText.isActiveAndEnabled) + { + return; + } + _newMessageThisFrame = true; + SetFontSize(fontSize); + + // if the message stack has been displayed, we empty it and reset our counters + if (_last_append_at_frame != frame) + { + _stringBuilder.Clear(); + _messageStackHasBeenDisplayed = false; + _numberOfMessages = 0; + _largestMessageLength = 0; + } + + _last_append_at_frame = Time.frameCount; + + // we add the specified message to the stack + if (_stringBuilder.Length != 0) + { + _stringBuilder.Append(System.Environment.NewLine); + } + _stringBuilder.Append(label.ToUpper()); + _stringBuilder.Append(space); + _stringBuilder.Append(_valueTagStart); + _stringBuilder.Append(value); + _stringBuilder.Append(_valueTagEnd); + // if this new message is longer than our previous longer message, we store it (this will expand the box's width + if (label.Length > _largestMessageLength) + { + _largestMessageLength = label.Length; + } + // we increment our counter + _numberOfMessages++; + + ConsoleText.text = _stringBuilder.ToString(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMDebugOnScreenConsole.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMDebugOnScreenConsole.cs.meta new file mode 100644 index 0000000..281bd87 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMDebugOnScreenConsole.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f0223e337b99754ca91160443728c46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMFade.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMFade.cs new file mode 100644 index 0000000..c11d979 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMFade.cs @@ -0,0 +1,130 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +using System.Collections; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Fade helpers + /// + + public static class MMFade + { + + /// + /// Fades the specified image to the target opacity and duration. + /// + /// Target. + /// Opacity. + /// Duration. + public static IEnumerator FadeImage(Image target, float duration, Color color) + { + if (target==null) + yield break; + + float alpha = target.color.a; + + for (float t = 0.0f; t < 1.0f; t += Time.deltaTime / duration) + { + if (target==null) + yield break; + Color newColor = new Color(color.r, color.g, color.b, Mathf.SmoothStep(alpha,color.a,t)); + target.color=newColor; + yield return null; + } + target.color=color; + + } + /// + /// Fades the specified image to the target opacity and duration. + /// + /// Target. + /// Opacity. + /// Duration. + public static IEnumerator FadeText(Text target, float duration, Color color) + { + if (target==null) + yield break; + + float alpha = target.color.a; + + for (float t = 0.0f; t < 1.0f; t += Time.deltaTime / duration) + { + if (target==null) + yield break; + Color newColor = new Color(color.r, color.g, color.b, Mathf.SmoothStep(alpha,color.a,t)); + target.color=newColor; + yield return null; + } + target.color=color; + } + /// + /// Fades the specified image to the target opacity and duration. + /// + /// Target. + /// Opacity. + /// Duration. + public static IEnumerator FadeSprite(SpriteRenderer target, float duration, Color color) + { + if (target==null) + yield break; + + float alpha = target.material.color.a; + + float t=0f; + while (t<1.0f) + { + if (target==null) + yield break; + + Color newColor = new Color(color.r, color.g, color.b, Mathf.SmoothStep(alpha,color.a,t)); + target.material.color=newColor; + + t += Time.deltaTime / duration; + + yield return null; + + } + Color finalColor = new Color(color.r, color.g, color.b, Mathf.SmoothStep(alpha,color.a,t)); + if (target != null) + { + target.material.color=finalColor; + } + } + + public static IEnumerator FadeCanvasGroup(CanvasGroup target, float duration, float targetAlpha, bool unscaled = true) + { + if (target==null) + yield break; + + float currentAlpha = target.alpha; + + float t=0f; + while (t<1.0f) + { + if (target==null) + yield break; + + float newAlpha = Mathf.SmoothStep(currentAlpha,targetAlpha,t); + target.alpha=newAlpha; + + if (unscaled) + { + t += Time.unscaledDeltaTime / duration; + } + else + { + t += Time.deltaTime / duration; + } + + yield return null; + } + + target.alpha=targetAlpha; + } + + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMFade.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMFade.cs.meta new file mode 100644 index 0000000..92af09c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMFade.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c55f5c5831b7b344bb8ae4b4471d7253 +timeCreated: 1455815269 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMGUI.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMGUI.cs new file mode 100644 index 0000000..910cb45 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMGUI.cs @@ -0,0 +1,73 @@ +using UnityEngine; +using System.Collections; +using System; +#if MM_UI +using UnityEngine.EventSystems; +using UnityEngine.UI; +#endif + +namespace MoreMountains.Tools +{ + public static class MMGUI + { + /// + /// Sets the size of a rect transform to the specified one + /// + /// + /// + public static void SetSize(RectTransform rectTransform, Vector2 newSize) + { + Vector2 currSize = rectTransform.rect.size; + Vector2 sizeDiff = newSize - currSize; + rectTransform.offsetMin = rectTransform.offsetMin - new Vector2(sizeDiff.x * rectTransform.pivot.x, sizeDiff.y * rectTransform.pivot.y); + rectTransform.offsetMax = rectTransform.offsetMax + new Vector2(sizeDiff.x * (1.0f - rectTransform.pivot.x), sizeDiff.y * (1.0f - rectTransform.pivot.y)); + } + + /// + /// Returns true if the pointer or first touch is blocked by UI + /// + /// + public static bool PointOrTouchBlockedByUI() + { + #if MM_UI + if (EventSystem.current.IsPointerOverGameObject()) + { + return true; + } + + if (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began ) + { + if (EventSystem.current.IsPointerOverGameObject(Input.touches[0].fingerId)) + { + return true; + } + } + #endif + + return false; + } + + /// + /// Creates a texture of the specified size and color + /// + /// + /// + /// + /// + public static Texture2D MakeTex(int width, int height, Color color) + { + Color[] pixelColors = new Color[width * height]; + + for (int i = 0; i < pixelColors.Length; i++) + { + pixelColors[i] = color; + } + + Texture2D newTexture = new Texture2D(width, height); + newTexture.SetPixels(pixelColors); + newTexture.Apply(); + + return newTexture; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMGUI.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMGUI.cs.meta new file mode 100644 index 0000000..f3d03c8 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 45ff1ad6fa9e7af4ead4e1db1ed52877 +timeCreated: 1460813345 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMGeometry.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMGeometry.cs new file mode 100644 index 0000000..89f314f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMGeometry.cs @@ -0,0 +1,89 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A helper class to handle geometry related operations + /// + public static class MMGeometry + { + // Based on https://answers.unity.com/questions/1019436/get-outeredge-vertices-c.html + public struct MMEdge + { + public int Vertice1; + public int Vertice2; + public int TriangleIndex; + public MMEdge(int aV1, int aV2, int aIndex) + { + Vertice1 = aV1; + Vertice2 = aV2; + TriangleIndex = aIndex; + } + } + + public static List GetEdges(int[] indices) + { + List edgeList = new List(); + for (int i = 0; i < indices.Length; i += 3) + { + int vertice1 = indices[i]; + int vertice2 = indices[i + 1]; + int vertice3 = indices[i + 2]; + edgeList.Add(new MMEdge(vertice1, vertice2, i)); + edgeList.Add(new MMEdge(vertice2, vertice3, i)); + edgeList.Add(new MMEdge(vertice3, vertice1, i)); + } + return edgeList; + } + + public static List FindBoundary(this List edges) + { + List edgeList = new List(edges); + for (int i = edgeList.Count - 1; i > 0; i--) + { + for (int n = i - 1; n >= 0; n--) + { + // if we find a shared edge we remove both + if (edgeList[i].Vertice1 == edgeList[n].Vertice2 && edgeList[i].Vertice2 == edgeList[n].Vertice1) + { + edgeList.RemoveAt(i); + edgeList.RemoveAt(n); + i--; + break; + } + } + } + return edgeList; + } + public static List SortEdges(this List edges) + { + List edgeList = new List(edges); + for (int i = 0; i < edgeList.Count - 2; i++) + { + MMEdge E = edgeList[i]; + for (int n = i + 1; n < edgeList.Count; n++) + { + MMEdge a = edgeList[n]; + if (E.Vertice2 == a.Vertice1) + { + if (n == i + 1) + { + // if they're already in order, we move on + break; + } + else + { + // otherwise we swap + edgeList[n] = edgeList[i + 1]; + edgeList[i + 1] = a; + break; + } + } + } + } + return edgeList; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMGeometry.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMGeometry.cs.meta new file mode 100644 index 0000000..46e09a1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMGeometry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab96bc57137345a439736693abc78817 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMHelpers.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMHelpers.cs new file mode 100644 index 0000000..aaf80f3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMHelpers.cs @@ -0,0 +1,36 @@ +using UnityEngine; +using System.Reflection; + +namespace MoreMountains.Tools +{ + /// + /// Various helpers + /// + + public static class MMHelpers + { + public static T CopyComponent(T original, GameObject destination) where T : Component + { + System.Type type = original.GetType(); + T dst = destination.GetComponent(type) as T; + if (!dst) dst = destination.AddComponent(type) as T; + FieldInfo[] fields = type.GetFields(); + foreach (FieldInfo field in fields) + { + if (field.IsStatic) continue; + field.SetValue(dst, field.GetValue(original)); + } + PropertyInfo[] props = type.GetProperties(); + foreach (PropertyInfo prop in props) + { + if (!prop.CanWrite || !prop.CanWrite || prop.Name == "name") + { + continue; + } + prop.SetValue(dst, prop.GetValue(original, null), null); + } + return dst as T; + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMHelpers.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMHelpers.cs.meta new file mode 100644 index 0000000..48bf1ee --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMHelpers.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 61848ed5026b644829e2fcb4a2207848 +timeCreated: 1456159535 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMImage.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMImage.cs new file mode 100644 index 0000000..fae72d5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMImage.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Image helpers + /// + + public class MMImage : MonoBehaviour + { + /// + /// Coroutine used to make the character's sprite flicker (when hurt for example). + /// + public static IEnumerator Flicker(Renderer renderer, Color initialColor, Color flickerColor, float flickerSpeed, float flickerDuration) + { + if (renderer==null) + { + yield break; + } + + if (!renderer.material.HasProperty("_Color")) + { + yield break; + } + + if (initialColor == flickerColor) + { + yield break; + } + + float flickerStop = Time.time + flickerDuration; + + while (Time.time + /// Input helpers + /// + + public class MMInput : MonoBehaviour + { + /// + /// All possible states for a button. Can be used in a state machine. + /// + public enum ButtonStates { Off, ButtonDown, ButtonPressed, ButtonUp } + + public enum AxisTypes { Positive, Negative } + + /// + /// Takes an axis and returns a ButtonState depending on whether the axis is pressed or not (useful for xbox triggers for example), and when you need to use an axis/trigger as a binary thing + /// + /// The axis as button. + /// Axis name. + /// Threshold value below which the button is off or released. + /// Current state of the axis. + public static ButtonStates ProcessAxisAsButton (string axisName, float threshold, ButtonStates currentState, AxisTypes AxisType = AxisTypes.Positive) + { + float axisValue = Input.GetAxis (axisName); + ButtonStates returnState; + + bool comparison = (AxisType == AxisTypes.Positive) ? (axisValue < threshold) : (axisValue > threshold); + + if (comparison) + { + if (currentState == ButtonStates.ButtonPressed) + { + returnState = ButtonStates.ButtonUp; + } + else + { + returnState = ButtonStates.Off; + } + } + else + { + if (currentState == ButtonStates.Off) + { + returnState = ButtonStates.ButtonDown; + } + else + { + returnState = ButtonStates.ButtonPressed; + } + } + return returnState; + } + + /// + /// IM button, short for InputManager button, a class used to handle button states, whether mobile or actual keys + /// + public class IMButton + { + /// a state machine used to store button states + public MMStateMachine State {get;protected set;} + /// the unique ID of this button + public string ButtonID; + + public delegate void ButtonDownMethodDelegate(); + public delegate void ButtonPressedMethodDelegate(); + public delegate void ButtonUpMethodDelegate(); + + public ButtonDownMethodDelegate ButtonDownMethod; + public ButtonPressedMethodDelegate ButtonPressedMethod; + public ButtonUpMethodDelegate ButtonUpMethod; + + /// returns the time (in unscaled seconds) since the last time the button was pressed down + public virtual float TimeSinceLastButtonDown { get { return Time.unscaledTime - _lastButtonDownAt; } } + /// returns the time (in unscaled seconds) since the last time the button was released + public virtual float TimeSinceLastButtonUp { get { return Time.unscaledTime - _lastButtonUpAt; } } + /// returns true if this button was pressed down within the time (in unscaled seconds) passed in parameters + public virtual bool ButtonDownRecently(float time) { return (TimeSinceLastButtonDown <= time); } + /// returns true if this button was released within the time (in unscaled seconds) passed in parameters + public virtual bool ButtonUpRecently(float time) { return (TimeSinceLastButtonUp <= time); } + + protected float _lastButtonDownAt; + protected float _lastButtonUpAt; + + /// + /// Constructor + /// + /// + /// + /// + /// + /// + public IMButton(string playerID, string buttonID, ButtonDownMethodDelegate btnDown = null, ButtonPressedMethodDelegate btnPressed = null, ButtonUpMethodDelegate btnUp = null) + { + ButtonID = playerID + "_" + buttonID; + ButtonDownMethod = btnDown; + ButtonUpMethod = btnUp; + ButtonPressedMethod = btnPressed; + State = new MMStateMachine (null, false); + State.ChangeState (MMInput.ButtonStates.Off); + } + + /// + /// Returns true if the button is currently pressed + /// + public virtual bool IsPressed => State.CurrentState == MMInput.ButtonStates.ButtonPressed; + + /// + /// Returns true if the button is down this frame + /// + public virtual bool IsDown => State.CurrentState == MMInput.ButtonStates.ButtonDown; + + /// + /// Returns true if the button is up this frame + /// + public virtual bool IsUp => State.CurrentState == MMInput.ButtonStates.ButtonUp; + + /// + /// Returns true if the button is neither pressed, down or up this frame + /// + public virtual bool IsOff => State.CurrentState == MMInput.ButtonStates.Off; + + /// + /// Presses the button for the first time, putting it in ButtonDown state + /// + public virtual void TriggerButtonDown() + { + _lastButtonDownAt = Time.unscaledTime; + if (ButtonDownMethod == null) + { + State.ChangeState(MMInput.ButtonStates.ButtonDown); + } + else + { + ButtonDownMethod(); + } + } + + /// + /// Puts the button in the Pressed state, potentially bypassing the Down state + /// + public virtual void TriggerButtonPressed() + { + if (ButtonPressedMethod == null) + { + State.ChangeState(MMInput.ButtonStates.ButtonPressed); + } + else + { + ButtonPressedMethod(); + } + } + + /// + /// Puts the button in the Up state + /// + public virtual void TriggerButtonUp() + { + _lastButtonUpAt = Time.unscaledTime; + if (ButtonUpMethod == null) + { + State.ChangeState(MMInput.ButtonStates.ButtonUp); + } + else + { + ButtonUpMethod(); + } + } + } + } + + +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMInput.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMInput.cs.meta new file mode 100644 index 0000000..f027696 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMInput.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a0874b2291d387847be139a6824cc576 +timeCreated: 1477174630 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMInterval.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMInterval.cs new file mode 100644 index 0000000..b15c23b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMInterval.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [Serializable] + public struct MMInterval where T : struct, IComparable + { + public enum MMIntervalType { Inclusive, Exclusive } + + /// the lower bound of this interval + [Tooltip("the lower bound of this interval")] + public T LowerBound; + /// the upper bound of this interval + [Tooltip("the upper bound of this interval")] + public T UpperBound; + /// whether to include or exclude the lower bound in the interval + [Tooltip("whether to include or exclude the lower bound in the interval")] + public MMIntervalType LowerBoundIntervalType; + /// whether to include or exclude the upper bound in the interval + [Tooltip("whether to include or exclude the upper bound in the interval")] + public MMIntervalType UpperBoundIntervalType; + + /// + /// Creates an interval with the specified bounds + /// + /// + /// + /// + /// + public MMInterval(T lowerBound, T upperBound, MMIntervalType lowerboundIntervalType = MMIntervalType.Inclusive, MMIntervalType upperboundIntervalType = MMIntervalType.Inclusive) : this() + { + T a = lowerBound; + T b = upperBound; + int comparison = a.CompareTo(b); + + if (comparison > 0) + { + a = upperBound; + b = lowerBound; + } + + LowerBound = a; + UpperBound = b; + LowerBoundIntervalType = lowerboundIntervalType; + UpperBoundIntervalType = upperboundIntervalType; + } + + /// + /// Returns true if the interval contains the specified value + /// + /// + /// + public bool Contains(T value) + { + bool lowerBoundCheck = LowerBoundIntervalType == MMIntervalType.Exclusive ? LowerBound.CompareTo(value) < 0 : LowerBound.CompareTo(value) <= 0; + bool upperBoundCheck = UpperBoundIntervalType == MMIntervalType.Exclusive ? UpperBound.CompareTo(value) > 0 : UpperBound.CompareTo(value) >= 0; + + return lowerBoundCheck && upperBoundCheck; + } + } +} + diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMInterval.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMInterval.cs.meta new file mode 100644 index 0000000..1ec9007 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMInterval.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5aca560c844841f4797889b903dced26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMLayers.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMLayers.cs new file mode 100644 index 0000000..3ce8bdb --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMLayers.cs @@ -0,0 +1,21 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + public class MMLayers + { + public static bool LayerInLayerMask(int layer, LayerMask layerMask) + { + if(((1 << layer) & layerMask) != 0) + { + return true; + } + else + { + return false; + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMLayers.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMLayers.cs.meta new file mode 100644 index 0000000..c45b704 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMLayers.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 01d38a71c34274ee0b94de34ac7931c8 +timeCreated: 1470777155 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMMaths.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMMaths.cs new file mode 100644 index 0000000..acebe2a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMMaths.cs @@ -0,0 +1,686 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Math helpers + /// + + public static class MMMaths + { + /// + /// Internal method used to compute the spring velocity + /// + /// + /// + /// + /// + /// + /// + /// + /// + private static float SpringVelocity(float currentValue, float targetValue, float velocity, float damping, float frequency, float deltaTime) + { + frequency = frequency * 2f * Mathf.PI; + float f2 = frequency * frequency; + float d2 = 2.0f * damping * frequency; + float x = currentValue - targetValue; + float acceleration = -f2 * x - d2 * velocity; + velocity += deltaTime * acceleration; + return velocity; + } + + + /// + /// Springs a float towards a target value + /// + /// the current value to spring, passed as a ref + /// the target value we're aiming for + /// a velocity value, passed as ref, used to compute the current speed of the springed value + /// the damping, between 0.01f and 1f, the higher the daming, the less springy it'll be + /// the frequency, in Hz, so the amount of periods the spring should go over in 1 second + /// the speed (between 0 and 1) at which the spring should operate + /// the delta time (usually Time.deltaTime or Time.unscaledDeltaTime) + public static void Spring(ref float currentValue, float targetValue, ref float velocity, float damping, float frequency, float deltaTime) + { + float fixedDeltaTime = 1.0f / 60.0f; + float accumulator = deltaTime; + while (accumulator > 0f) + { + float step = Mathf.Min(accumulator, fixedDeltaTime); + velocity = SpringVelocity(currentValue, targetValue, velocity, damping, frequency, step); + currentValue += step * velocity; + accumulator -= step; + } + } + + /// + /// Springs a Vector2 towards a target value + /// + /// the current value to spring, passed as a ref + /// the target value we're aiming for + /// a velocity value, passed as ref, used to compute the current speed of the springed value + /// the damping, between 0.01f and 1f, the higher the daming, the less springy it'll be + /// the frequency, in Hz, so the amount of periods the spring should go over in 1 second + /// the speed (between 0 and 1) at which the spring should operate + /// the delta time (usually Time.deltaTime or Time.unscaledDeltaTime) + public static void Spring(ref Vector2 currentValue, Vector2 targetValue, ref Vector2 velocity, float damping, float frequency, float deltaTime) + { + float fixedDeltaTime = 1.0f / 60.0f; + float accumulator = deltaTime; + while (accumulator > 0f) + { + float step = Mathf.Min(accumulator, fixedDeltaTime); + velocity.x = SpringVelocity(currentValue.x, targetValue.x, velocity.x, damping, frequency, step); + velocity.y = SpringVelocity(currentValue.y, targetValue.y, velocity.y, damping, frequency, step); + currentValue += step * velocity; + accumulator -= step; + } + } + + /// + /// Springs a Vector3 towards a target value + /// + /// the current value to spring, passed as a ref + /// the target value we're aiming for + /// a velocity value, passed as ref, used to compute the current speed of the springed value + /// the damping, between 0.01f and 1f, the higher the daming, the less springy it'll be + /// the frequency, in Hz, so the amount of periods the spring should go over in 1 second + /// the speed (between 0 and 1) at which the spring should operate + /// the delta time (usually Time.deltaTime or Time.unscaledDeltaTime) + public static void Spring(ref Vector3 currentValue, Vector3 targetValue, ref Vector3 velocity, float damping, float frequency, float deltaTime) + { + float fixedDeltaTime = 1.0f / 60.0f; + float accumulator = deltaTime; + while (accumulator > 0f) + { + float step = Mathf.Min(accumulator, fixedDeltaTime); + velocity.x = SpringVelocity(currentValue.x, targetValue.x, velocity.x, damping, frequency, step); + velocity.y = SpringVelocity(currentValue.y, targetValue.y, velocity.y, damping, frequency, step); + velocity.z = SpringVelocity(currentValue.z, targetValue.z, velocity.z, damping, frequency, step); + currentValue += step * velocity; + accumulator -= step; + } + } + + /// + /// Springs a Vector4 towards a target value + /// + /// the current value to spring, passed as a ref + /// the target value we're aiming for + /// a velocity value, passed as ref, used to compute the current speed of the springed value + /// the damping, between 0.01f and 1f, the higher the daming, the less springy it'll be + /// the frequency, in Hz, so the amount of periods the spring should go over in 1 second + /// the speed (between 0 and 1) at which the spring should operate + /// the delta time (usually Time.deltaTime or Time.unscaledDeltaTime) + public static void Spring(ref Vector4 currentValue, Vector4 targetValue, ref Vector4 velocity, float damping, float frequency, float deltaTime) + { + float fixedDeltaTime = 1.0f / 60.0f; + float accumulator = deltaTime; + while (accumulator > 0f) + { + float step = Mathf.Min(accumulator, fixedDeltaTime); + velocity.x = SpringVelocity(currentValue.x, targetValue.x, velocity.x, damping, frequency, step); + velocity.y = SpringVelocity(currentValue.y, targetValue.y, velocity.y, damping, frequency, step); + velocity.z = SpringVelocity(currentValue.z, targetValue.z, velocity.z, damping, frequency, step); + velocity.w = SpringVelocity(currentValue.w, targetValue.w, velocity.w, damping, frequency, step); + currentValue += step * velocity; + accumulator -= step; + } + } + + /// + /// internal method used to determine the lerp rate + /// + /// + /// + private static float LerpRate(float rate, float deltaTime) + { + rate = Mathf.Clamp01(rate); + float invRate = - Mathf.Log(1.0f - rate, 2.0f) * 60f; + return Mathf.Pow(2.0f, -invRate * deltaTime); + } + + /// + /// Lerps a float towards a target at the specified rate + /// + /// + /// + /// + /// + public static float Lerp(float value, float target, float rate, float deltaTime) + { + if (deltaTime == 0f) { return value; } + return Mathf.Lerp(target, value, LerpRate(rate, deltaTime)); + } + + /// + /// Lerps a Vector2 towards a target at the specified rate + /// + /// + /// + /// + /// + public static Vector2 Lerp(Vector2 value, Vector2 target, float rate, float deltaTime) + { + if (deltaTime == 0f) { return value; } + return Vector2.Lerp(target, value, LerpRate(rate, deltaTime)); + } + + /// + /// Lerps a Vector3 towards a target at the specified rate + /// + /// + /// + /// + /// + public static Vector3 Lerp(Vector3 value, Vector3 target, float rate, float deltaTime) + { + if (deltaTime == 0f) { return value; } + return Vector3.Lerp(target, value, LerpRate(rate, deltaTime)); + } + + /// + /// Lerps a Vector4 towards a target at the specified rate + /// + /// + /// + /// + /// + public static Vector4 Lerp(Vector4 value, Vector4 target, float rate, float deltaTime) + { + if (deltaTime == 0f) { return value; } + return Vector4.Lerp(target, value, LerpRate(rate, deltaTime)); + } + + /// + /// Lerps a Quaternion towards a target at the specified rate + /// + /// + /// + /// + /// + public static Quaternion Lerp(Quaternion value, Quaternion target, float rate, float deltaTime) + { + if (deltaTime == 0f) { return value; } + return Quaternion.Lerp(target, value, LerpRate(rate, deltaTime)); + } + + /// + /// Lerps a Color towards a target at the specified rate + /// + /// + /// + /// + /// + public static Color Lerp(Color value, Color target, float rate, float deltaTime) + { + if (deltaTime == 0f) { return value; } + return Color.Lerp(target, value, LerpRate(rate, deltaTime)); + } + + /// + /// Lerps a Color32 towards a target at the specified rate + /// + /// + /// + /// + /// + public static Color32 Lerp(Color32 value, Color32 target, float rate, float deltaTime) + { + if (deltaTime == 0f) { return value; } + return Color32.Lerp(target, value, LerpRate(rate, deltaTime)); + } + + /// + /// Clamps a float between min and max, both bounds being optional and driven by clampMin and clampMax respectively + /// + /// + /// + /// + /// + /// + /// + public static float Clamp(float value, float min, float max, bool clampMin, bool clampMax) + { + float returnValue = value; + if (clampMin && (returnValue < min)) + { + returnValue = min; + } + if (clampMax && (returnValue > max)) + { + returnValue = max; + } + return returnValue; + } + + /// + /// Rounds a float to the nearest half value : 1, 1.5, 2, 2.5 etc + /// + /// + /// + public static float RoundToNearestHalf(float a) + { + return a = a - (a % 0.5f); + } + + /// + /// + /// + /// + /// + public static Quaternion LookAt2D(Vector2 direction) + { + var angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; + return Quaternion.AngleAxis(angle, Vector3.forward); + } + + /// + /// Takes a Vector3 and turns it into a Vector2 + /// + /// The vector2. + /// The Vector3 to turn into a Vector2. + public static Vector2 Vector3ToVector2 (Vector3 target) + { + return new Vector2(target.x, target.y); + } + + /// + /// Takes a Vector2 and turns it into a Vector3 with a null z value + /// + /// The vector3. + /// The Vector2 to turn into a Vector3. + public static Vector3 Vector2ToVector3 (Vector2 target) + { + return new Vector3(target.x, target.y, 0); + } + + /// + /// Takes a Vector2 and turns it into a Vector3 with the specified z value + /// + /// The vector3. + /// The Vector2 to turn into a Vector3. + /// New Z value. + public static Vector3 Vector2ToVector3 (Vector2 target, float newZValue) + { + return new Vector3(target.x, target.y, newZValue); + } + + /// + /// Rounds all components of a Vector3. + /// + /// The vector3. + /// Vector. + public static Vector3 RoundVector3 (Vector3 vector) + { + return new Vector3 (Mathf.Round (vector.x), Mathf.Round (vector.y), Mathf.Round (vector.z)); + } + + /// + /// Returns a random Vector2 from 2 defined Vector2. + /// + /// The random Vector2. + /// Minimum. + /// Maximum. + public static Vector2 RandomVector2(Vector2 minimum, Vector2 maximum) + { + return new Vector2(UnityEngine.Random.Range(minimum.x, maximum.x), + UnityEngine.Random.Range(minimum.y, maximum.y)); + } + + /// + /// Returns a random Vector3 from 2 defined Vector3. + /// + /// The random Vector3. + /// Minimum. + /// Maximum. + public static Vector3 RandomVector3(Vector3 minimum, Vector3 maximum) + { + return new Vector3(UnityEngine.Random.Range(minimum.x, maximum.x), + UnityEngine.Random.Range(minimum.y, maximum.y), + UnityEngine.Random.Range(minimum.z, maximum.z)); + } + + /// + /// Returns a random point on the circle of the specified radius + /// + /// + /// + public static Vector2 RandomPointOnCircle(float circleRadius) + { + return UnityEngine.Random.insideUnitCircle.normalized * circleRadius; + } + + /// + /// Returns a random point on the sphere of the specified radius + /// + /// + /// + public static Vector3 RandomPointOnSphere(float sphereRadius) + { + return UnityEngine.Random.onUnitSphere * sphereRadius; + } + + /// + /// Rotates a point around the given pivot. + /// + /// The new point position. + /// The point to rotate. + /// The pivot's position. + /// The angle we want to rotate our point. + public static Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, float angle) + { + angle = angle*(Mathf.PI/180f); + float rotatedX = Mathf.Cos(angle) * (point.x - pivot.x) - Mathf.Sin(angle) * (point.y-pivot.y) + pivot.x; + float rotatedY = Mathf.Sin(angle) * (point.x - pivot.x) + Mathf.Cos(angle) * (point.y - pivot.y) + pivot.y; + return new Vector3(rotatedX,rotatedY,0); + } + + /// + /// Rotates a point around the given pivot. + /// + /// The new point position. + /// The point to rotate. + /// The pivot's position. + /// The angle as a Vector3. + public static Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angle) + { + // we get point direction from the point to the pivot + Vector3 direction = point - pivot; + // we rotate the direction + direction = Quaternion.Euler(angle) * direction; + // we determine the rotated point's position + point = direction + pivot; + return point; + } + + /// + /// Rotates a point around the given pivot. + /// + /// The new point position. + /// The point to rotate. + /// The pivot's position. + /// The angle as a Vector3. + public static Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Quaternion quaternion) + { + // we get point direction from the point to the pivot + Vector3 direction = point - pivot; + // we rotate the direction + direction = quaternion * direction; + // we determine the rotated point's position + point = direction + pivot; + return point; + } + + /// + /// Rotates a vector2 by the angle (in degrees) specified and returns it + /// + /// The rotated Vector2. + /// The vector to rotate. + /// Degrees. + public static Vector2 RotateVector2(Vector2 vector, float angle) { + if (angle == 0) + { + return vector; + } + float sinus = Mathf.Sin(angle * Mathf.Deg2Rad); + float cosinus = Mathf.Cos(angle * Mathf.Deg2Rad); + + float oldX = vector.x; + float oldY = vector.y; + vector.x = (cosinus * oldX) - (sinus * oldY); + vector.y = (sinus * oldX) + (cosinus * oldY); + return vector; + } + + /// + /// Computes and returns the angle between two vectors, on a 360° scale + /// + /// The . + /// Vector a. + /// Vector b. + public static float AngleBetween(Vector2 vectorA, Vector2 vectorB) + { + float angle = Vector2.Angle(vectorA, vectorB); + Vector3 cross = Vector3.Cross(vectorA, vectorB); + + if (cross.z > 0) + { + angle = 360 - angle; + } + + return angle; + } + + /// + /// Computes and returns the direction between two vector3, used to check if a vector is pointing left or right of another one + /// + /// The . + /// Vector a. + /// Vector b. + public static float AngleDirection(Vector3 vectorA, Vector3 vectorB, Vector3 up) + { + Vector3 cross = Vector3.Cross(vectorA, vectorB); + float direction = Vector3.Dot(cross, up); + + return direction; + } + + /// + /// Returns the distance between a point and a line. + /// + /// The between point and line. + /// Point. + /// Line start. + /// Line end. + public static float DistanceBetweenPointAndLine(Vector3 point, Vector3 lineStart, Vector3 lineEnd) + { + return Vector3.Magnitude(ProjectPointOnLine(point, lineStart, lineEnd) - point); + } + + /// + /// Projects a point on a line (perpendicularly) and returns the projected point. + /// + /// The point on line. + /// Point. + /// Line start. + /// Line end. + public static Vector3 ProjectPointOnLine(Vector3 point, Vector3 lineStart, Vector3 lineEnd) + { + Vector3 rhs = point - lineStart; + Vector3 vector2 = lineEnd - lineStart; + float magnitude = vector2.magnitude; + Vector3 lhs = vector2; + if (magnitude > 1E-06f) + { + lhs = (Vector3)(lhs / magnitude); + } + float num2 = Mathf.Clamp(Vector3.Dot(lhs, rhs), 0f, magnitude); + return (lineStart + ((Vector3)(lhs * num2))); + } + + /// + /// Returns the sum of all the int passed in parameters + /// + /// Things to add. + public static int Sum(params int[] thingsToAdd) + { + int result=0; + for (int i = 0; i < thingsToAdd.Length; i++) + { + result += thingsToAdd[i]; + } + return result; + } + + /// + /// Returns the result of rolling a dice of the specified number of sides + /// + /// The result of the dice roll. + /// Number of sides of the dice. + public static int RollADice(int numberOfSides) + { + return (UnityEngine.Random.Range(1,numberOfSides+1)); + } + + /// + /// Returns a random success based on X% of chance. + /// Example : I have 20% of chance to do X, Chance(20) > true, yay! + /// + /// Percent of chance. + public static bool Chance(int percent) + { + return (UnityEngine.Random.Range(0,100) <= percent); + } + + /// + /// Moves from "from" to "to" by the specified amount and returns the corresponding value + /// + /// From. + /// To. + /// Amount. + public static float Approach(float from, float to, float amount) + { + if (Mathf.Approximately(from, to)) + { + return from; + } + + if (from < to) + { + from += amount; + if (from > to) + { + return to; + } + } + + if (from > to) + { + from -= amount; + if (from < to) + { + return to; + } + } + + return from; + } + + + /// + /// Remaps a value x in interval [A,B], to the proportional value in interval [C,D] + /// + /// The value to remap. + /// the minimum bound of interval [A,B] that contains the x value + /// the maximum bound of interval [A,B] that contains the x value + /// the minimum bound of target interval [C,D] + /// the maximum bound of target interval [C,D] + public static float Remap(float x, float A, float B, float C, float D) + { + float remappedValue = C + (x-A)/(B-A) * (D - C); + return remappedValue; + } + + /// + /// Clamps the angle in parameters between a minimum and maximum angle (all angles expressed in degrees) + /// + /// + /// + /// + /// + public static float ClampAngle(float angle, float minimumAngle, float maximumAngle) + { + if (angle < -360) + { + angle += 360; + } + if (angle > 360) + { + angle -= 360; + } + return Mathf.Clamp(angle, minimumAngle, maximumAngle); + } + + public static float RoundToDecimal(float value, int numberOfDecimals) + { + if (numberOfDecimals <= 0) + { + return Mathf.Round(value); + } + else + { + return Mathf.Round(value * 10f * numberOfDecimals) / (10f * numberOfDecimals); + } + } + + /// + /// Rounds the value passed in parameters to the closest value in the parameter array + /// + /// + /// + /// + public static float RoundToClosest(float value, float[] possibleValues, bool pickSmallestDistance = false) + { + if (possibleValues.Length == 0) + { + return 0f; + } + + float closestValue = possibleValues[0]; + + foreach (float possibleValue in possibleValues) + { + float closestDistance = Mathf.Abs(closestValue - value); + float possibleDistance = Mathf.Abs(possibleValue - value); + + if (closestDistance > possibleDistance) + { + closestValue = possibleValue; + } + else if (closestDistance == possibleDistance) + { + if ((pickSmallestDistance && closestValue > possibleValue) || (!pickSmallestDistance && closestValue < possibleValue)) + { + closestValue = (value < 0) ? closestValue : possibleValue; + } + } + } + return closestValue; + + } + + /// + /// Returns a vector3 based on the angle in parameters + /// + /// + /// + public static Vector3 DirectionFromAngle(float angle, float additionalAngle) + { + angle += additionalAngle; + + Vector3 direction = Vector3.zero; + direction.x = Mathf.Sin(angle * Mathf.Deg2Rad); + direction.y = 0f; + direction.z = Mathf.Cos(angle * Mathf.Deg2Rad); + return direction; + } + + /// + /// Returns a vector3 based on the angle in parameters + /// + /// + /// + public static Vector3 DirectionFromAngle2D(float angle, float additionalAngle) + { + angle += additionalAngle; + + Vector3 direction = Vector3.zero; + direction.x = Mathf.Cos(angle * Mathf.Deg2Rad); + direction.y = Mathf.Sin(angle * Mathf.Deg2Rad); + direction.z = 0f; + return direction; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMMaths.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMMaths.cs.meta new file mode 100644 index 0000000..6067f52 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMMaths.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fc798aa25d3634ebbb996c8d60ace648 +timeCreated: 1456158841 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMMovement.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMMovement.cs new file mode 100644 index 0000000..2b9d07f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMMovement.cs @@ -0,0 +1,114 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Movement helpers + /// + + public static class MMMovement + { + + /// + /// Moves an object from point A to point B in a given time + /// + /// Moving object. + /// Point a. + /// Point b. + /// Time. + public static IEnumerator MoveFromTo(GameObject movingObject,Vector3 pointA, Vector3 pointB, float duration, AnimationCurve curve = null) + { + float journey = 0f; + Vector3 newPosition; + + while (journey < duration) + { + float percent = Mathf.Clamp01(journey / duration); + + newPosition = Vector3.Lerp(pointA, pointB, curve.Evaluate(percent)); + + movingObject.transform.position = newPosition; + + journey += Time.deltaTime; + yield return null; + } + yield break; + } + + public static IEnumerator AnimateScale(Transform targetTransform, Vector3 vector, float duration, AnimationCurve curveX, AnimationCurve curveY, AnimationCurve curveZ, float multiplier = 1f) + { + if (targetTransform == null) + { + yield break; + } + + if ((curveX == null) || (curveY == null) || (curveZ == null)) + { + yield break; + } + + if (duration == 0f) + { + yield break; + } + + float journey = 0f; + + while (journey < duration) + { + float percent = Mathf.Clamp01(journey / duration); + + vector.x = curveX.Evaluate(percent); + vector.y = curveY.Evaluate(percent); + vector.z = curveZ.Evaluate(percent); + targetTransform.localScale = multiplier * vector; + + journey += Time.deltaTime; + yield return null; + } + yield return null; + } + + public static IEnumerator AnimateRotation(Transform targetTransform, + Vector3 vector, + float duration, + AnimationCurve curveX, + AnimationCurve curveY, + AnimationCurve curveZ, + float multiplier) + { + if (targetTransform == null) + { + yield break; + } + + if ((curveX == null) || (curveY == null) || (curveZ == null)) + { + yield break; + } + + if (duration == 0f) + { + yield break; + } + + float journey = 0f; + + while (journey < duration) + { + float percent = Mathf.Clamp01(journey / duration); + + vector.x = curveX.Evaluate(percent) * multiplier; + vector.y = curveY.Evaluate(percent) * multiplier; + vector.z = curveZ.Evaluate(percent) * multiplier; + targetTransform.localEulerAngles = vector; + + journey += Time.deltaTime; + yield return null; + } + yield return null; + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMMovement.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMMovement.cs.meta new file mode 100644 index 0000000..f253fb4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMMovement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 195cd029f2c828848a5f260fc5457f3e +timeCreated: 1456589453 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMScene.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMScene.cs new file mode 100644 index 0000000..5f6a7d6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMScene.cs @@ -0,0 +1,69 @@ +using System; +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// Scene management helpers + /// + public class MMScene + { + /// + /// Returns an array filled with all the currently loaded scenes + /// + /// + public static Scene[] GetLoadedScenes() + { + int sceneCount = SceneManager.sceneCount; + + List loadedScenes = new List(sceneCount); + // Scene[] loadedScenes = new Scene[sceneCount]; + + for (int i = 0; i < sceneCount; i++) + { + var scene = SceneManager.GetSceneAt(i); + if (scene.isLoaded) + { + loadedScenes.Add(scene); + } + else + { + Debug.LogWarning($"{scene.name} NOT LOADED"); + } + } + + return loadedScenes.ToArray(); + } + + /// + /// Returns a list of all the scenes present in the build + /// + /// + public static List GetScenesInBuild() + { + List scenesInBuild = new List(); + + for (int i = 0; i < SceneManager.sceneCountInBuildSettings; i++) + { + string scenePath = SceneUtility.GetScenePathByBuildIndex(i); + int lastSlash = scenePath.LastIndexOf("/", StringComparison.Ordinal); + scenesInBuild.Add(scenePath.Substring(lastSlash + 1, scenePath.LastIndexOf(".", StringComparison.Ordinal) - lastSlash - 1)); + } + + return scenesInBuild; + } + + /// + /// Returns true if a scene by the specified name is present in the build + /// + /// + /// + public static bool SceneInBuild(string sceneName) + { + return GetScenesInBuild().Contains(sceneName); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMScene.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMScene.cs.meta new file mode 100644 index 0000000..9f58f6c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMScene.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9de5862b14b53c74e8f45bf953fabf7e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMSerializableDictionary.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMSerializableDictionary.cs new file mode 100644 index 0000000..9ffd550 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMSerializableDictionary.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Runtime.Serialization; +using UnityEngine; +using UnityEngine.Serialization; + +namespace MoreMountains.Tools +{ + /// + /// A serializable dictionary implementation, as Unity still can't serialize Dictionaries natively + /// + /// How to use : + /// + /// For each type of dictionary you want to serialize, create a serializable class that inherits from MMSerializableDictionary, + /// and override the constructor and the SerializationInfo constructor, like so (here with a string/int Dictionary) : + /// + /// [Serializable] + /// public class DictionaryStringInt : MMSerializableDictionary + /// { + /// public DictionaryStringInt() : base() { } + /// protected DictionaryStringInt(SerializationInfo info, StreamingContext context) : base(info, context) { } + /// } + /// + /// + /// + /// + [Serializable] + public class MMSerializableDictionary : Dictionary, ISerializationCallbackReceiver + { + [SerializeField] + protected List _keys = new List(); + [SerializeField] + protected List _values = new List(); + + public MMSerializableDictionary() : base() { } + public MMSerializableDictionary(SerializationInfo info, StreamingContext context) : base(info, context) { } + + /// + /// We save the dictionary to our two lists + /// + public void OnBeforeSerialize() + { + _keys.Clear(); + _values.Clear(); + + foreach (KeyValuePair pair in this) + { + _keys.Add(pair.Key); + _values.Add(pair.Value); + } + } + + /// + /// Loads our two lists to our dictionary + /// + /// + public void OnAfterDeserialize() + { + this.Clear(); + + if (_keys.Count != _values.Count) + { + Debug.LogError("MMSerializableDictionary : there are " + _keys.Count + " keys and " + _values.Count + " values after deserialization. Counts need to match, make sure both key and value types are serializable."); + } + + for (int i = 0; i < _keys.Count; i++) + { + this.Add(_keys[i], _values[i]); + } + } + } +} + + + diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMSerializableDictionary.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMSerializableDictionary.cs.meta new file mode 100644 index 0000000..b92c45c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMSerializableDictionary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d43a5cd3ef614ec46ae59135733b7d9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMShufflebag.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMShufflebag.cs new file mode 100644 index 0000000..7bd7d6a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMShufflebag.cs @@ -0,0 +1,76 @@ +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// A class to use to get more controlled randomness, taking values out of the bag randomly, and never getting them again. + /// + /// Usage : + /// + /// var shuffleBag = new ShuffleBag(40); + /// for (int i = 0; i<40; i++) + /// { + /// newValue = something; + /// shuffleBag.Add(newValue, amount); + /// } + /// + /// then : + /// float something = shuffleBag.Pick(); + /// + /// + public class MMShufflebag + { + public virtual int Capacity { get { return _contents.Capacity; } } + public virtual int Size { get { return _contents.Count; } } + + protected List _contents; + protected T _currentItem; + protected int _currentIndex = -1; + + /// + /// Initializes the shufflebag + /// + /// + public MMShufflebag(int initialCapacity) + { + _contents = new List(initialCapacity); + } + + /// + /// Adds the specified quantity of the item to the bag + /// + /// + /// + public virtual void Add(T item, int quantity) + { + for (int i = 0; i < quantity; i++) + { + _contents.Add(item); + } + _currentIndex = Size - 1; + } + + /// + /// Returns a random item from the bag + /// + /// + public T Pick() + { + if (_currentIndex < 1) + { + _currentIndex = Size - 1; + _currentItem = _contents[0]; + return _currentItem; + } + + int position = UnityEngine.Random.Range(0, _currentIndex); + + _currentItem = _contents[position]; + _contents[position] = _contents[_currentIndex]; + _contents[_currentIndex] = _currentItem; + _currentIndex--; + + return _currentItem; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMShufflebag.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMShufflebag.cs.meta new file mode 100644 index 0000000..475d501 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMShufflebag.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 695c7cc8319cf894f914eacf53e3d143 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMString.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMString.cs new file mode 100644 index 0000000..c6bc009 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMString.cs @@ -0,0 +1,80 @@ +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// String helpers + /// + public static class MMString + { + /// + /// Uppercases the first letter of the parameter string + /// + /// + /// + public static string UppercaseFirst(string s) + { + if (string.IsNullOrEmpty(s)) + { + return string.Empty; + } + return char.ToUpper(s[0]) + s.Substring(1); + } + + /// + /// Returns the length of a rich text, excluding its tags + /// + /// + /// + public static int RichTextLength(string richText) + { + int richTextLength = 0; + bool insideTag = false; + + richText = richText.Replace("
", "-"); + + foreach (char character in richText) + { + if (character == '<') + { + insideTag = true; + continue; + } + else if (character == '>') + { + insideTag = false; + } + else if (!insideTag) + { + richTextLength++; + } + } + + return richTextLength; + } + + /// + /// Elegantly uppercases the first letter of every word in a string + /// + /// + /// + public static string ToTitleCase(this string title) + { + return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(title.ToLower()); + } + + /// + /// Removes extra spaces in a string + /// + /// + /// + public static string RemoveExtraSpaces(this string s) + { + return Regex.Replace(s, @"\s+", " "); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMString.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMString.cs.meta new file mode 100644 index 0000000..d31fffe --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d1a9ce427a59e54ba03f183675bc50d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMTime.cs b/Assets/Feel/MMTools/Core/MMHelpers/MMTime.cs new file mode 100644 index 0000000..1ba9cd3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMTime.cs @@ -0,0 +1,94 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Time helpers + /// + + public class MMTime : MonoBehaviour + { + /// + /// Turns a float (expressed in seconds) into a string displaying hours, minutes, seconds and hundredths optionnally + /// + /// + /// + /// + /// + /// + /// + public static string FloatToTimeString(float t, bool displayHours = false, bool displayMinutes = true, bool displaySeconds = true, bool displayMilliseconds = false) + { + int intTime = (int)t; + int hours = intTime / 3600; + int minutes = intTime / 60; + int seconds = intTime % 60; + int milliseconds = Mathf.FloorToInt((t * 1000)%1000); + + if (displayHours && displayMinutes && displaySeconds && displayMilliseconds) + { + return string.Format("{0:00}:{1:00}:{2:00}.{3:D3}", hours, minutes, seconds, milliseconds); + } + if (!displayHours && displayMinutes && displaySeconds && displayMilliseconds) + { + return string.Format("{0:00}:{1:00}.{2:D3}", minutes, seconds, milliseconds); + } + if (!displayHours && !displayMinutes && displaySeconds && displayMilliseconds) + { + return string.Format("{0:D2}.{1:D3}", seconds, milliseconds); + } + if (!displayHours && !displayMinutes && displaySeconds && !displayMilliseconds) + { + return string.Format("{0:00}", seconds); + } + if (displayHours && displayMinutes && displaySeconds && !displayMilliseconds) + { + return string.Format("{0:00}:{1:00}:{2:00}", hours, minutes, seconds); + } + if (!displayHours && displayMinutes && displaySeconds && !displayMilliseconds) + { + return string.Format("{0:00}:{1:00}", minutes, seconds); + } + return null; + + } + + /// + /// Takes a hh:mm:ss:SSS string and turns it into a float value expressed in seconds + /// + /// a number of seconds. + /// Time in string notation to decode. + public static float TimeStringToFloat(string timeInStringNotation) + { + if (timeInStringNotation.Length!=12) + { + throw new Exception("The time in the TimeStringToFloat method must be specified using a hh:mm:ss:SSS syntax"); + } + + string[] timeStringArray = timeInStringNotation.Split(new string[] {":","."},StringSplitOptions.None); + + float startTime=0f; + float result; + if (float.TryParse(timeStringArray[0], out result)) + { + startTime += result*3600f; + } + if (float.TryParse(timeStringArray[1], out result)) + { + startTime += result*60f; + } + if (float.TryParse(timeStringArray[2], out result)) + { + startTime += result; + } + if (float.TryParse(timeStringArray[3], out result)) + { + startTime += result/1000f; + } + + return startTime; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMHelpers/MMTime.cs.meta b/Assets/Feel/MMTools/Core/MMHelpers/MMTime.cs.meta new file mode 100644 index 0000000..f85e494 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMHelpers/MMTime.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 49af33803f6148b4dad64c35bf986275 +timeCreated: 1455815764 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObjectPool.meta b/Assets/Feel/MMTools/Core/MMObjectPool.meta new file mode 100644 index 0000000..5a754a1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 269bfcb0e3d5a4350a24346983d94b29 +folderAsset: yes +timeCreated: 1434369355 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMMultipleObjectPooler.cs b/Assets/Feel/MMTools/Core/MMObjectPool/MMMultipleObjectPooler.cs new file mode 100644 index 0000000..71bad84 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMMultipleObjectPooler.cs @@ -0,0 +1,642 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using System; +using System.Collections.Generic; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + [Serializable] + /// + /// Multiple object pooler object. + /// + public class MMMultipleObjectPoolerObject + { + public GameObject GameObjectToPool; + public int PoolSize; + public bool PoolCanExpand = true; + public bool Enabled = true; + } + + /// + /// The various methods you can pull objects from the pool with + /// + public enum MMPoolingMethods { OriginalOrder, OriginalOrderSequential, RandomBetweenObjects, RandomPoolSizeBased } + + /// + /// This class allows you to have a pool of various objects to pool from. + /// + [AddComponentMenu("More Mountains/Tools/Object Pool/MMMultipleObjectPooler")] + public class MMMultipleObjectPooler : MMObjectPooler + { + /// the list of objects to pool + [Tooltip("the list of objects to pool")] + public List Pool; + [MMInformation("A MultipleObjectPooler is a reserve of objects, to be used by a Spawner. When asked, it will return an object from the pool (ideally an inactive one) chosen based on the pooling method you've chosen.\n- OriginalOrder will spawn objects in the order you've set them in the inspector (from top to bottom)\n- OriginalOrderSequential will do the same, but will empty each pool before moving to the next object\n- RandomBetweenObjects will pick one object from the pool, at random, but ignoring its pool size, each object has equal chances to get picked\n- PoolSizeBased randomly choses one object from the pool, based on its pool size probability (the larger the pool size, the higher the chances it'll get picked)'...",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// the chosen pooling method + [Tooltip("the chosen pooling method")] + public MMPoolingMethods PoolingMethod = MMPoolingMethods.RandomPoolSizeBased; + [MMInformation("If you set CanPoolSameObjectTwice to false, the Pooler will try to prevent the same object from being pooled twice to avoid repetition. This will only affect random pooling methods, not ordered pooling.",MoreMountains.Tools.MMInformationAttribute.InformationType.Info,false)] + /// whether or not the same object can be pooled twice in a row. If you set CanPoolSameObjectTwice to false, the Pooler will try to prevent the same object from being pooled twice to avoid repetition. This will only affect random pooling methods, not ordered pooling. + [Tooltip("whether or not the same object can be pooled twice in a row. If you set CanPoolSameObjectTwice to false, the Pooler will try to prevent the same object from being pooled twice to avoid repetition. This will only affect random pooling methods, not ordered pooling.")] + public bool CanPoolSameObjectTwice = true; + /// a unique name that should match on all MMMultipleObjectPoolers you want to use together + [Tooltip("a unique name that should match on all MMMultipleObjectPoolers you want to use together")] + [MMCondition("MutualizeWaitingPools", true)] + public string MutualizedPoolName = ""; + + /// if CanPoolSameObjectTwice is set to false, this determines up to how many times we'll iterate to try and find a different object + [Tooltip("if CanPoolSameObjectTwice is set to false, this determines up to how many times we'll iterate to try and find a different object")] + [MMCondition("CanPoolSameObjectTwice", true, true)] + public float OverflowAmount = 10f; + + public virtual List Owner { get; set; } + private void OnDestroy() { Owner?.Remove(this); } + + /// the actual object pool + protected GameObject _lastPooledObject; + protected int _currentIndex = 0; + protected int _currentIndexCounter = 0; + + /// + /// Determines the name of the object pool. + /// + /// The object pool name. + protected override string DetermineObjectPoolName() + { + if ((MutualizedPoolName == null) || (MutualizedPoolName == "")) + { + return ("[MultipleObjectPooler] " + this.name); + } + else + { + return ("[MultipleObjectPooler] " + MutualizedPoolName); + } + } + + /// + /// Fills the object pool with the amount of objects you specified in the inspector. + /// + public override void FillObjectPool() + { + if ((Pool == null) || (Pool.Count == 0)) + { + return; + } + + // we create a waiting pool, if one already exists, no need to fill anything + if (!CreateWaitingPool()) + { + return; + } + + // if there's only one item in the Pool, we force CanPoolSameObjectTwice to true + if (Pool.Count <= 1) + { + CanPoolSameObjectTwice = true; + } + + bool stillObjectsToPool; + int[] poolSizes; + + // if we're gonna pool in the original inspector order + switch (PoolingMethod) + { + case MMPoolingMethods.OriginalOrder: + stillObjectsToPool = true; + // we store our poolsizes in a temp array so it doesn't impact the inspector + poolSizes = new int[Pool.Count]; + for (int i = 0; i < Pool.Count; i++) + { + poolSizes[i] = Pool[i].PoolSize; + } + + // we go through our objects in the order they were in the inspector, and fill the pool while we find objects to add + while (stillObjectsToPool) + { + stillObjectsToPool = false; + for (int i = 0; i < Pool.Count; i++) + { + if (poolSizes[i] > 0) + { + AddOneObjectToThePool(Pool[i].GameObjectToPool); + poolSizes[i]--; + stillObjectsToPool = true; + } + } + } + break; + case MMPoolingMethods.OriginalOrderSequential: + // we store our poolsizes in a temp array so it doesn't impact the inspector + foreach (MMMultipleObjectPoolerObject pooledGameObject in Pool) + { + for (int i = 0; i < pooledGameObject.PoolSize ; i++ ) + { + AddOneObjectToThePool(pooledGameObject.GameObjectToPool); + } + } + break; + default: + int k = 0; + // for each type of object specified in the inspector + foreach (MMMultipleObjectPoolerObject pooledGameObject in Pool) + { + // if there's no specified number of objects to pool for that type of object, we do nothing and exit + if (k > Pool.Count) { return; } + + // we add, one by one, the number of objects of that type, as specified in the inspector + for (int j = 0; j < Pool[k].PoolSize; j++) + { + AddOneObjectToThePool(pooledGameObject.GameObjectToPool); + } + k++; + } + break; + } + } + + /// + /// Adds one object of the specified type to the object pool. + /// + /// The object that just got added. + /// The type of object to add to the pool. + protected virtual GameObject AddOneObjectToThePool(GameObject typeOfObject) + { + if (typeOfObject == null) + { + return null; + } + + bool initialStatus = typeOfObject.activeSelf; + typeOfObject.SetActive(false); + GameObject newGameObject = (GameObject)Instantiate(typeOfObject); + typeOfObject.SetActive(initialStatus); + SceneManager.MoveGameObjectToScene(newGameObject, this.gameObject.scene); + if (NestWaitingPool) + { + newGameObject.transform.SetParent(_waitingPool.transform); + } + newGameObject.name = typeOfObject.name; + _objectPool.PooledGameObjects.Add(newGameObject); + return newGameObject; + } + + /// + /// Gets a random object from the pool. + /// + /// The pooled game object. + public override GameObject GetPooledGameObject() + { + GameObject pooledGameObject; + switch (PoolingMethod) + { + case MMPoolingMethods.OriginalOrder: + pooledGameObject = GetPooledGameObjectOriginalOrder(); + break; + case MMPoolingMethods.RandomPoolSizeBased: + pooledGameObject = GetPooledGameObjectPoolSizeBased(); + break; + case MMPoolingMethods.RandomBetweenObjects: + pooledGameObject = GetPooledGameObjectRandomBetweenObjects(); + break; + case MMPoolingMethods.OriginalOrderSequential: + pooledGameObject = GetPooledGameObjectOriginalOrderSequential(); + break; + default: + pooledGameObject = null; + break; + } + if (pooledGameObject!=null) + { + _lastPooledObject = pooledGameObject; + } + else + { + _lastPooledObject = null; + } + return pooledGameObject; + } + + /// + /// Tries to find a gameobject in the pool according to the order the list has been setup in (one of each, no matter how big their respective pool sizes) + /// + /// The pooled game object original order. + protected virtual GameObject GetPooledGameObjectOriginalOrder() + { + int newIndex; + // if we've reached the end of our list, we start again from the beginning + if (_currentIndex >= Pool.Count) + { + ResetCurrentIndex (); + } + + MMMultipleObjectPoolerObject searchedObject = GetPoolObject(Pool[_currentIndex].GameObjectToPool); + + if (_currentIndex >= _objectPool.PooledGameObjects.Count) { return null; } + if (!searchedObject.Enabled) { _currentIndex++; return null; } + + // if the object is already active, we need to find another one + if (_objectPool.PooledGameObjects[_currentIndex].gameObject.activeInHierarchy) + { + GameObject findObject = FindInactiveObject(_objectPool.PooledGameObjects[_currentIndex].gameObject.name,_objectPool.PooledGameObjects); + if (findObject != null) + { + _currentIndex++; + return findObject; + } + + // if its pool can expand, we create a new one + if (searchedObject.PoolCanExpand) + { + _currentIndex++; + return AddOneObjectToThePool(searchedObject.GameObjectToPool); + } + else + { + // if it can't expand we return nothing + return null; + } + } + else + { + // if the object is inactive, we return it + newIndex = _currentIndex; + _currentIndex++; + return _objectPool.PooledGameObjects[newIndex]; + } + } + + protected int _currentCount = 0; + + /// + /// Tries to find a gameobject in the pool according to the order the list has been setup in (one of each, no matter how big their respective pool sizes) + /// + /// The pooled game object original order. + protected virtual GameObject GetPooledGameObjectOriginalOrderSequential() + { + // if we've reached the end of our list, we start again from the beginning + if (_currentIndex >= Pool.Count) + { + _currentCount = 0; + ResetCurrentIndex (); + } + + MMMultipleObjectPoolerObject searchedObject = GetPoolObject(Pool[_currentIndex].GameObjectToPool); + + if (_currentIndex >= _objectPool.PooledGameObjects.Count) { return null; } + if (!searchedObject.Enabled) { _currentIndex++; _currentCount = 0; return null; } + + + // if the object is already active, we need to find another one + if (_objectPool.PooledGameObjects[_currentIndex].gameObject.activeInHierarchy) + { + GameObject findObject = FindInactiveObject(Pool[_currentIndex].GameObjectToPool.name, _objectPool.PooledGameObjects); + if (findObject != null) + { + _currentCount++; + OrderSequentialResetCounter(searchedObject); + return findObject; + } + + // if its pool can expand, we create a new one + if (searchedObject.PoolCanExpand) + { + _currentCount++; + OrderSequentialResetCounter(searchedObject); + return AddOneObjectToThePool(searchedObject.GameObjectToPool); + } + else + { + // if it can't expand we return nothing + _currentIndex++; + _currentCount = 0; + return null; + } + } + else + { + // if the object is inactive, we return it + _currentCount++; + OrderSequentialResetCounter(searchedObject); + return _objectPool.PooledGameObjects[_currentIndex]; + } + } + + protected virtual void OrderSequentialResetCounter(MMMultipleObjectPoolerObject searchedObject) + { + if (_currentCount >= searchedObject.PoolSize) + { + _currentIndex++; + _currentCount = 0; + } + } + + /// + /// Randomly choses one object from the pool, based on its pool size probability (the larger the pool size, the higher the chances it'll get picked) + /// + /// The pooled game object pool size based. + protected virtual GameObject GetPooledGameObjectPoolSizeBased() + { + // we get a random index + int randomIndex = UnityEngine.Random.Range(0, _objectPool.PooledGameObjects.Count); + + int overflowCounter=0; + + // we check to see if that object is enabled, if it's not we loop + while (!PoolObjectEnabled(_objectPool.PooledGameObjects[randomIndex]) && overflowCounter < _objectPool.PooledGameObjects.Count) + { + randomIndex = UnityEngine.Random.Range(0, _objectPool.PooledGameObjects.Count); + overflowCounter++; + } + + if (!PoolObjectEnabled(_objectPool.PooledGameObjects[randomIndex])) + { + return null; + } + + // if we can't pool the same object twice, we'll loop for a while to try and get another one + overflowCounter = 0; + if (_lastPooledObject != null) + { + while (!CanPoolSameObjectTwice + && (_objectPool.PooledGameObjects[randomIndex].name == _lastPooledObject.name || !PoolObjectEnabled(_objectPool.PooledGameObjects[randomIndex])) + && overflowCounter < _objectPool.PooledGameObjects.Count * OverflowAmount) + { + randomIndex = UnityEngine.Random.Range(0, _objectPool.PooledGameObjects.Count); + overflowCounter++; + } + } + + // if the item we've picked is active + if (_objectPool.PooledGameObjects[randomIndex].gameObject.activeInHierarchy) + { + // we try to find another inactive object of the same type + GameObject pulledObject = FindInactiveObject(_objectPool.PooledGameObjects[randomIndex].gameObject.name,_objectPool.PooledGameObjects); + if (pulledObject!=null) + { + return pulledObject; + } + else + { + // if we couldn't find an inactive object of this type, we see if it can expand + MMMultipleObjectPoolerObject searchedObject = GetPoolObject(_objectPool.PooledGameObjects[randomIndex].gameObject); + if (searchedObject==null) + { + return null; + } + // if the pool for this object is allowed to grow (this is set in the inspector if you're wondering) + if (searchedObject.PoolCanExpand) + { + return AddOneObjectToThePool(searchedObject.GameObjectToPool); + } + else + { + // if it's not allowed to grow, we return nothing. + return null; + } + } + } + else + { + // if the pool wasn't empty, we return the random object we've found. + return _objectPool.PooledGameObjects[randomIndex]; + } + } + + /// + /// Gets one object from the pool, at random, but ignoring its pool size, each object has equal chances to get picked + /// + /// The pooled game object random between objects. + protected virtual GameObject GetPooledGameObjectRandomBetweenObjects() + { + // we pick one of the objects in the original pool at random + int randomIndex = UnityEngine.Random.Range(0, Pool.Count); + + int overflowCounter=0; + + // if we can't pool the same object twice, we'll loop for a while to try and get another one + if (_lastPooledObject != null) + { + while (!CanPoolSameObjectTwice + && (Pool[randomIndex].GameObjectToPool.name == _lastPooledObject.name || !PoolObjectEnabled(Pool[randomIndex].GameObjectToPool)) + && overflowCounter < _objectPool.PooledGameObjects.Count * OverflowAmount) + { + randomIndex = UnityEngine.Random.Range(0, Pool.Count); + overflowCounter++; + } + } + + int originalRandomIndex = randomIndex+1; + + bool objectFound = false; + + // while we haven't found an object to return, and while we haven't gone through all the different object types, we keep going + overflowCounter=0; + while (!objectFound + && randomIndex != originalRandomIndex + && overflowCounter < _objectPool.PooledGameObjects.Count) + { + // if our index is at the end, we reset it + if (randomIndex >= Pool.Count) + { + randomIndex=0; + } + + if (!Pool[randomIndex].Enabled) + { + randomIndex++; + overflowCounter++; + continue; + } + + // we try to find an inactive object of that type in the pool + GameObject newGameObject = FindInactiveObject(Pool[randomIndex].GameObjectToPool.name, _objectPool.PooledGameObjects); + if (newGameObject!=null) + { + objectFound=true; + return newGameObject; + } + else + { + // if there's none and if we can expand, we expand + if (Pool[randomIndex].PoolCanExpand) + { + return AddOneObjectToThePool(Pool[randomIndex].GameObjectToPool); + } + } + randomIndex++; + overflowCounter++; + } + return null; + } + + protected string _tempSearchedName; + + /// + /// Gets an object of the type at the specified index in the Pool. + /// Note that the whole point of this multiple object pooler is to abstract the various pools and handle + /// the picking based on the selected mode. If you plan on just picking from different pools yourself, + /// consider simply having multiple single object poolers. + /// + /// + public virtual GameObject GetPooledGamObjectAtIndex(int index) + { + if ((index < 0) || (index >= Pool.Count)) + { + return null; + } + + _tempSearchedName = Pool[index].GameObjectToPool.name; + return GetPooledGameObjectOfType(_tempSearchedName); + } + + /// + /// Gets an object of the specified name from the pool + /// Note that the whole point of this multiple object pooler is to abstract the various pools and handle + /// the picking based on the selected mode. If you plan on just picking from different pools yourself, + /// consider simply having multiple single object poolers. + /// + /// The pooled game object of type. + /// Type. + public virtual GameObject GetPooledGameObjectOfType(string searchedName) + { + GameObject newObject = FindInactiveObject(searchedName,_objectPool.PooledGameObjects); + + if (newObject!=null) + { + return newObject; + } + else + { + // if we've not returned the object, that means the pool is empty (at least it means it doesn't contain any object of that specific type) + // so if the pool is allowed to expand + GameObject searchedObject = FindObject(searchedName,_objectPool.PooledGameObjects); + if (searchedObject == null) + { + return null; + } + + if (GetPoolObject(FindObject(searchedName,_objectPool.PooledGameObjects)).PoolCanExpand) + { + return AddOneObjectToThePool(searchedObject); + } + } + + // if the pool was empty for that object and not allowed to expand, we return nothing. + return null; + } + + /// + /// Finds an inactive object in the pool based on its name. + /// Returns null if no inactive object by that name were found in the pool + /// + /// The inactive object. + /// Searched name. + protected virtual GameObject FindInactiveObject(string searchedName, List list) + { + for (int i = 0; i < list.Count; i++) + { + // if we find an object inside the pool that matches the asked type + if (list[i].name.Equals(searchedName)) + { + // and if that object is inactive right now + if (!list[i].gameObject.activeInHierarchy) + { + // we return it + return list[i]; + } + } + } + return null; + } + + protected virtual GameObject FindAnyInactiveObject(List list) + { + for (int i = 0; i < list.Count; i++) + { + // and if that object is inactive right now + if (!list[i].gameObject.activeInHierarchy) + { + // we return it + return list[i]; + } + } + return null; + } + + /// + /// Finds an object in the pool based on its name, active or inactive + /// Returns null if there's no object by that name in the pool + /// + /// The object. + /// Searched name. + protected virtual GameObject FindObject(string searchedName,List list) + { + for (int i = 0; i < list.Count; i++) + { + // if we find an object inside the pool that matches the asked type + if (list[i].name.Equals(searchedName)) + { + // and if that object is inactive right now + return list[i]; + } + } + return null; + } + + /// + /// Returns (if it exists) the MultipleObjectPoolerObject from the original Pool based on a GameObject. + /// Note that this is name based. + /// + /// The pool object. + /// Tested object. + protected virtual MMMultipleObjectPoolerObject GetPoolObject(GameObject testedObject) + { + if (testedObject==null) + { + return null; + } + int i=0; + foreach(MMMultipleObjectPoolerObject poolerObject in Pool) + { + if (testedObject.name.Equals(poolerObject.GameObjectToPool.name)) + { + return (poolerObject); + } + i++; + } + return null; + } + + protected virtual bool PoolObjectEnabled(GameObject testedObject) + { + MMMultipleObjectPoolerObject searchedObject = GetPoolObject(testedObject); + if (searchedObject != null) + { + return searchedObject.Enabled; + } + else + { + return false; + } + } + + public virtual void EnableObjects(string name,bool newStatus) + { + foreach(MMMultipleObjectPoolerObject poolerObject in Pool) + { + if (name.Equals(poolerObject.GameObjectToPool.name)) + { + poolerObject.Enabled = newStatus; + } + } + } + + public virtual void ResetCurrentIndex() + { + _currentIndex = 0; + _currentIndexCounter = 0; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMMultipleObjectPooler.cs.meta b/Assets/Feel/MMTools/Core/MMObjectPool/MMMultipleObjectPooler.cs.meta new file mode 100644 index 0000000..e57daef --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMMultipleObjectPooler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 73098ca8f002adc4f9debdbe47a78c9a +timeCreated: 1523900445 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectBounds.cs b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectBounds.cs new file mode 100644 index 0000000..1db46dd --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectBounds.cs @@ -0,0 +1,85 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + [AddComponentMenu("More Mountains/Tools/Object Bounds/MMObjectBounds")] + public class MMObjectBounds : MonoBehaviour + { + public enum WaysToDetermineBounds { Collider, Collider2D, Renderer, Undefined } + + [Header("Bounds")] + public WaysToDetermineBounds BoundsBasedOn; + + + public virtual Vector3 Size { get; set; } + + /// + /// When this component is added we define its bounds. + /// + protected virtual void Reset() + { + DefineBoundsChoice(); + } + + /// + /// Tries to determine automatically what the bounds should be based on. + /// In this order, it'll keep the last found of these : Collider2D, Collider or Renderer. + /// If none of these is found, it'll be set as Undefined. + /// + protected virtual void DefineBoundsChoice() + { + BoundsBasedOn = WaysToDetermineBounds.Undefined; + if (GetComponent()!=null) + { + BoundsBasedOn = WaysToDetermineBounds.Renderer; + } + if (GetComponent()!=null) + { + BoundsBasedOn = WaysToDetermineBounds.Collider; + } + if (GetComponent()!=null) + { + BoundsBasedOn = WaysToDetermineBounds.Collider2D; + } + } + + /// + /// Returns the bounds of the object, based on what has been defined + /// + public virtual Bounds GetBounds() + { + if (BoundsBasedOn==WaysToDetermineBounds.Renderer) + { + if (GetComponent()==null) + { + throw new Exception("The PoolableObject "+gameObject.name+" is set as having Renderer based bounds but no Renderer component can be found."); + } + return GetComponent().bounds; + } + + if (BoundsBasedOn==WaysToDetermineBounds.Collider) + { + if (GetComponent()==null) + { + throw new Exception("The PoolableObject "+gameObject.name+" is set as having Collider based bounds but no Collider component can be found."); + } + return GetComponent().bounds; + } + + if (BoundsBasedOn==WaysToDetermineBounds.Collider2D) + { + if (GetComponent()==null) + { + throw new Exception("The PoolableObject "+gameObject.name+" is set as having Collider2D based bounds but no Collider2D component can be found."); + } + return GetComponent().bounds; + } + + return new Bounds(Vector3.zero,Vector3.zero); + } + + + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectBounds.cs.meta b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectBounds.cs.meta new file mode 100644 index 0000000..441d489 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectBounds.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2cd26dd47877d80498c4f66f944bdb09 +timeCreated: 1523900445 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPool.cs b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPool.cs new file mode 100644 index 0000000..79c5851 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPool.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + public class MMObjectPool : MonoBehaviour + { + [MMReadOnly] + public List PooledGameObjects; + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPool.cs.meta b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPool.cs.meta new file mode 100644 index 0000000..e562def --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3148d0478f12644438359651f85a7a92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPooler.cs b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPooler.cs new file mode 100644 index 0000000..dc35fa9 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPooler.cs @@ -0,0 +1,235 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// A base class, meant to be extended depending on the use (simple, multiple object pooler), and used as an interface by the spawners. + /// Still handles common stuff like singleton and initialization on start(). + /// DO NOT add this class to a prefab, nothing would happen. Instead, add SimpleObjectPooler or MultipleObjectPooler. + /// + public abstract class MMObjectPooler : MonoBehaviour + { + /// singleton pattern + public static MMObjectPooler Instance; + /// if this is true, the pool will try not to create a new waiting pool if it finds one with the same name. + public bool MutualizeWaitingPools = false; + /// if this is true, all waiting and active objects will be regrouped under an empty game object. Otherwise they'll just be at top level in the hierarchy + public bool NestWaitingPool = true; + /// if this is true, the waiting pool will be nested under this object + [MMCondition("NestWaitingPool", true)] + public bool NestUnderThis = false; + + /// this object is just used to group the pooled objects + protected GameObject _waitingPool = null; + protected MMObjectPool _objectPool; + protected const int _initialPoolsListCapacity = 5; + protected bool _onSceneLoadedRegistered = false; + + public static List _pools = new List(_initialPoolsListCapacity); + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + protected static void InitializeStatics() + { + Instance = null; + } + + /// + /// Adds a pooler to the static list if needed + /// + /// + public static void AddPool(MMObjectPool pool) + { + if (_pools == null) + { + _pools = new List(_initialPoolsListCapacity); + } + if (!_pools.Contains(pool)) + { + _pools.Add(pool); + } + } + + /// + /// Removes a pooler from the static list + /// + /// + public static void RemovePool(MMObjectPool pool) + { + _pools?.Remove(pool); + } + + /// + /// On awake we fill our object pool + /// + protected virtual void Awake() + { + Instance = this; + FillObjectPool(); + + } + + /// + /// Creates the waiting pool or tries to reuse one if there's already one available + /// + protected virtual bool CreateWaitingPool() + { + if (!MutualizeWaitingPools) + { + // we create a container that will hold all the instances we create + _waitingPool = new GameObject(DetermineObjectPoolName()); + SceneManager.MoveGameObjectToScene(_waitingPool, this.gameObject.scene); + _objectPool = _waitingPool.AddComponent(); + _objectPool.PooledGameObjects = new List(); + ApplyNesting(); + return true; + } + else + { + MMObjectPool objectPool = ExistingPool(DetermineObjectPoolName()); + if (objectPool != null) + { + _objectPool = objectPool; + _waitingPool = objectPool.gameObject; + return false; + } + else + { + _waitingPool = new GameObject(DetermineObjectPoolName()); + SceneManager.MoveGameObjectToScene(_waitingPool, this.gameObject.scene); + _objectPool = _waitingPool.AddComponent(); + _objectPool.PooledGameObjects = new List(); + ApplyNesting(); + AddPool(_objectPool); + return true; + } + } + } + + /// + /// Looks for an existing pooler for the same object, returns it if found, returns null otherwise + /// + /// + /// + public virtual MMObjectPool ExistingPool(string poolName) + { + if (_pools == null) + { + _pools = new List(_initialPoolsListCapacity); + } + if (_pools.Count == 0) + { + var pools = FindObjectsOfType(); + if (pools.Length > 0) + { + _pools.AddRange(pools); + } + } + foreach (MMObjectPool pool in _pools) + { + if ((pool != null) && (pool.name == poolName)/* && (pool.gameObject.scene == this.gameObject.scene)*/) + { + return pool; + } + } + return null; + } + + /// + /// If needed, nests the waiting pool under this object + /// + protected virtual void ApplyNesting() + { + if (NestWaitingPool && NestUnderThis && (_waitingPool != null)) + { + _waitingPool.transform.SetParent(this.transform); + } + } + + /// + /// Determines the name of the object pool. + /// + /// The object pool name. + protected virtual string DetermineObjectPoolName() + { + return ("[ObjectPooler] " + this.name); + } + + /// + /// Implement this method to fill the pool with objects + /// + public virtual void FillObjectPool() + { + return ; + } + + /// + /// Implement this method to return a gameobject + /// + /// The pooled game object. + public virtual GameObject GetPooledGameObject() + { + return null; + } + + /// + /// Destroys the object pool + /// + public virtual void DestroyObjectPool() + { + if (_waitingPool != null) + { + Destroy(_waitingPool.gameObject); + } + } + + /// + /// On enable we register to the scene loaded hook + /// + protected virtual void OnEnable() + { + if (!_onSceneLoadedRegistered) + { + SceneManager.sceneLoaded += OnSceneLoaded; + } + } + + /// + /// OnSceneLoaded we recreate + /// + /// + /// + private void OnSceneLoaded(Scene scene, LoadSceneMode loadSceneMode) + { + if (this == null) + { + return; + } + if ((_objectPool == null) || (_waitingPool == null)) + { + if (this != null) + { + FillObjectPool(); + } + } + } + + /// + /// On Destroy we remove ourselves from the list of poolers + /// + private void OnDestroy() + { + if ((_objectPool != null) && NestUnderThis) + { + RemovePool(_objectPool); + } + + if (_onSceneLoadedRegistered) + { + SceneManager.sceneLoaded -= OnSceneLoaded; + _onSceneLoadedRegistered = false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPooler.cs.meta b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPooler.cs.meta new file mode 100644 index 0000000..e1cec4c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMObjectPooler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 744b7d0770e56334f9ed2e0561c50cc3 +timeCreated: 1523900445 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMPoolableObject.cs b/Assets/Feel/MMTools/Core/MMObjectPool/MMPoolableObject.cs new file mode 100644 index 0000000..624e230 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMPoolableObject.cs @@ -0,0 +1,70 @@ +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to an object that you expect to pool from an objectPooler. + /// Note that these objects can't be destroyed by calling Destroy(), they'll just be set inactive (that's the whole point). + /// + [AddComponentMenu("More Mountains/Tools/Object Pool/MMPoolableObject")] + public class MMPoolableObject : MMObjectBounds + { + [Header("Events")] + public UnityEvent ExecuteOnEnable; + public UnityEvent ExecuteOnDisable; + + public delegate void Events(); + public event Events OnSpawnComplete; + + [Header("Poolable Object")] + /// The life time, in seconds, of the object. If set to 0 it'll live forever, if set to any positive value it'll be set inactive after that time. + public float LifeTime = 0f; + + /// + /// Turns the instance inactive, in order to eventually reuse it. + /// + public virtual void Destroy() + { + gameObject.SetActive(false); + } + + /// + /// Called every frame + /// + protected virtual void Update() + { + + } + + /// + /// When the objects get enabled (usually after having been pooled from an ObjectPooler, we initiate its death countdown. + /// + protected virtual void OnEnable() + { + Size = GetBounds().extents * 2; + if (LifeTime > 0f) + { + Invoke("Destroy", LifeTime); + } + ExecuteOnEnable?.Invoke(); + } + + /// + /// When the object gets disabled (maybe it got out of bounds), we cancel its programmed death + /// + protected virtual void OnDisable() + { + ExecuteOnDisable?.Invoke(); + CancelInvoke(); + } + + /// + /// Triggers the on spawn complete event + /// + public virtual void TriggerOnSpawnComplete() + { + OnSpawnComplete?.Invoke(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMPoolableObject.cs.meta b/Assets/Feel/MMTools/Core/MMObjectPool/MMPoolableObject.cs.meta new file mode 100644 index 0000000..2dc13cf --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMPoolableObject.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 72de0b0360096ea41a18d17864ecb963 +timeCreated: 1523900445 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMSimpleObjectPooler.cs b/Assets/Feel/MMTools/Core/MMObjectPool/MMSimpleObjectPooler.cs new file mode 100644 index 0000000..5b3cb71 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMSimpleObjectPooler.cs @@ -0,0 +1,117 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// A simple object pool outputting a single type of objects + /// + [AddComponentMenu("More Mountains/Tools/Object Pool/MMSimpleObjectPooler")] + public class MMSimpleObjectPooler : MMObjectPooler + { + /// the game object we'll instantiate + public GameObject GameObjectToPool; + /// the number of objects we'll add to the pool + public int PoolSize = 20; + /// if true, the pool will automatically add objects to the itself if needed + public bool PoolCanExpand = true; + + public virtual List Owner { get; set; } + private void OnDestroy() { Owner?.Remove(this); } + + /// + /// Fills the object pool with the gameobject type you've specified in the inspector + /// + public override void FillObjectPool() + { + if (GameObjectToPool == null) + { + return; + } + + // if we've already created a pool, we exit + if ((_objectPool != null) && (_objectPool.PooledGameObjects.Count > PoolSize)) + { + return; + } + + CreateWaitingPool (); + + int objectsToSpawn = PoolSize; + + if (_objectPool != null) + { + objectsToSpawn -= _objectPool.PooledGameObjects.Count; + } + + // we add to the pool the specified number of objects + for (int i = 0; i < objectsToSpawn; i++) + { + AddOneObjectToThePool (); + } + } + + /// + /// Determines the name of the object pool. + /// + /// The object pool name. + protected override string DetermineObjectPoolName() + { + return ("[SimpleObjectPooler] " + GameObjectToPool.name); + } + + /// + /// This method returns one inactive object from the pool + /// + /// The pooled game object. + public override GameObject GetPooledGameObject() + { + // we go through the pool looking for an inactive object + for (int i=0; i< _objectPool.PooledGameObjects.Count; i++) + { + if (!_objectPool.PooledGameObjects[i].gameObject.activeInHierarchy) + { + // if we find one, we return it + return _objectPool.PooledGameObjects[i]; + } + } + // if we haven't found an inactive object (the pool is empty), and if we can extend it, we add one new object to the pool, and return it + if (PoolCanExpand) + { + return AddOneObjectToThePool(); + } + // if the pool is empty and can't grow, we return nothing. + return null; + } + + /// + /// Adds one object of the specified type (in the inspector) to the pool. + /// + /// The one object to the pool. + protected virtual GameObject AddOneObjectToThePool() + { + if (GameObjectToPool == null) + { + Debug.LogWarning("The "+gameObject.name+" ObjectPooler doesn't have any GameObjectToPool defined.", gameObject); + return null; + } + + bool initialStatus = GameObjectToPool.activeSelf; + GameObjectToPool.SetActive(false); + GameObject newGameObject = (GameObject)Instantiate(GameObjectToPool); + GameObjectToPool.SetActive(initialStatus); + SceneManager.MoveGameObjectToScene(newGameObject, this.gameObject.scene); + if (NestWaitingPool) + { + newGameObject.transform.SetParent(_waitingPool.transform); + } + newGameObject.name = GameObjectToPool.name + "-" + _objectPool.PooledGameObjects.Count; + + _objectPool.PooledGameObjects.Add(newGameObject); + + return newGameObject; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMObjectPool/MMSimpleObjectPooler.cs.meta b/Assets/Feel/MMTools/Core/MMObjectPool/MMSimpleObjectPooler.cs.meta new file mode 100644 index 0000000..bc0b1c9 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObjectPool/MMSimpleObjectPooler.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0b7277539b95c0d45895792ecc99ce66 +timeCreated: 1523900445 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObservable.meta b/Assets/Feel/MMTools/Core/MMObservable.meta new file mode 100644 index 0000000..91b8722 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObservable.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b61c373c3ad28b14bb3a025b41b8fb82 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMObservable/MMObservable.cs b/Assets/Feel/MMTools/Core/MMObservable/MMObservable.cs new file mode 100644 index 0000000..6f2a3a0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObservable/MMObservable.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This struct lets you declare observable properties. + /// For example, let's say you have a class called Character, and you declare its speed like so : + /// + /// public MMObservable Speed; + /// + /// then, in any other class, you can register to OnValueChanged events on that property (usually in OnEnable) : + /// + /// protected virtual void OnEnable() + /// { + /// _myCharacter.Speed.OnValueChanged += OnSpeedChange; + /// } + /// + /// and unsubscribe like so : + /// + /// protected virtual void OnDisable() + /// { + /// _myCharacter.Speed.OnValueChanged -= OnSpeedChange; + /// } + /// + /// and then all you need is a method to handle that speed change : + /// + /// protected virtual void OnSpeedChange() + /// { + /// MMDebug.DebugLogInfo(_myCharacter.Speed.Value); + /// } + /// + /// You can look at the MMObservableTest demo scene for an example of how it's used. + /// + /// + /// + public struct MMObservable + { + public Action OnValueChanged; + public Action OnValueChangedTo; + public Action OnValueChangedFromTo; + + private T _value; + + public T Value + { + get { return _value; } + set + { + if (!EqualityComparer.Default.Equals(value, _value)) + { + var prev = _value; + _value = value; + OnValueChanged?.Invoke(); + OnValueChangedTo?.Invoke(_value); + OnValueChangedFromTo?.Invoke(prev,_value); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMObservable/MMObservable.cs.meta b/Assets/Feel/MMTools/Core/MMObservable/MMObservable.cs.meta new file mode 100644 index 0000000..e54c229 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMObservable/MMObservable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9fae850c6f63b97429e2eecf9e605965 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers.meta b/Assets/Feel/MMTools/Core/MMPropertyControllers.meta new file mode 100644 index 0000000..68a9dbd --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ba503d4031b6bd04b9bafe0144350267 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers/FloatController.cs b/Assets/Feel/MMTools/Core/MMPropertyControllers/FloatController.cs new file mode 100644 index 0000000..92cb0c7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers/FloatController.cs @@ -0,0 +1,621 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Reflection; + +namespace MoreMountains.Tools +{ + public class MonoAttribute + { + public enum MemberTypes { Property, Field } + public MonoBehaviour TargetObject; + public MemberTypes MemberType; + public PropertyInfo MemberPropertyInfo; + public FieldInfo MemberFieldInfo; + public string MemberName; + + public MonoAttribute(MonoBehaviour targetObject, MemberTypes type, PropertyInfo propertyInfo, FieldInfo fieldInfo, string memberName) + { + TargetObject = targetObject; + MemberType = type; + MemberPropertyInfo = propertyInfo; + MemberFieldInfo = fieldInfo; + MemberName = memberName; + } + + public virtual float GetValue() + { + if (MemberType == MonoAttribute.MemberTypes.Property) + { + return (float)MemberPropertyInfo.GetValue(TargetObject); + } + else if (MemberType == MonoAttribute.MemberTypes.Field) + { + return (float)MemberFieldInfo.GetValue(TargetObject); + } + return 0f; + } + + public virtual void SetValue(float newValue) + { + if (MemberType == MonoAttribute.MemberTypes.Property) + { + MemberPropertyInfo.SetValue(TargetObject, newValue); + } + else if (MemberType == MonoAttribute.MemberTypes.Field) + { + MemberFieldInfo.SetValue(TargetObject, newValue); + } + } + } + + /// + /// A class used to control a float in any other class, over time + /// To use it, simply drag a monobehaviour in its target field, pick a control mode (ping pong or random), and tweak the settings + /// + [AddComponentMenu("More Mountains/Tools/Property Controllers/FloatController")] + [MMRequiresConstantRepaint] + public class FloatController : MMMonoBehaviour + { + /// the possible control modes + public enum ControlModes { PingPong, Random, OneTime, AudioAnalyzer, ToDestination, Driven } + + [Header("Target")] + /// the mono on which the float you want to control is + public MonoBehaviour TargetObject; + + [Header("Global Settings")] + /// the control mode (ping pong or random) + public ControlModes ControlMode; + /// whether or not the updated value should be added to the initial one + public bool AddToInitialValue = false; + /// whether or not to use unscaled time + public bool UseUnscaledTime = true; + /// whether or not you want to revert to the InitialValue after the control ends + public bool RevertToInitialValueAfterEnd = true; + + [Header("Driven")] + /// the value that will be applied to the controlled float in driven mode + public float DrivenLevel = 0f; + + [Header("Ping Pong")] + /// the curve to apply to the tween + public MMTweenType Curve = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + /// the minimum value for the ping pong + public float MinValue = 0f; + /// the maximum value for the ping pong + public float MaxValue = 5f; + /// the duration of one ping (or pong) + public float Duration = 1f; + /// the duration (in seconds) between a ping and a pong + public float PingPongPauseDuration = 0f; + + [Header("Random")] + [MMVector("Min", "Max")] + /// the noise amplitude + public Vector2 Amplitude = new Vector2(0f,5f); + [MMVector("Min", "Max")] + /// the noise frequency + public Vector2 Frequency = new Vector2(1f, 1f); + [MMVector("Min", "Max")] + /// the noise shift + public Vector2 Shift = new Vector2(0f, 1f); + /// if this is true, will let you remap the noise value (without amplitude) to the bounds you've specified + public bool RemapNoiseValues = false; + /// the value to which to remap the random's zero bound + [MMCondition("RemapNoiseValues", true)] + public float RemapNoiseZero = 0f; + /// the value to which to remap the random's one bound + [MMCondition("RemapNoiseValues", true)] + public float RemapNoiseOne = 1f; + + [Header("OneTime")] + /// the duration of the One Time shake + public float OneTimeDuration = 1f; + /// the amplitude of the One Time shake (this will be multiplied by the curve's height) + public float OneTimeAmplitude = 1f; + /// the low value to remap the normalized curve value to + public float OneTimeRemapMin = 0f; + /// the high value to remap the normalized curve value to + public float OneTimeRemapMax = 1f; + /// the curve to apply to the one time shake + public AnimationCurve OneTimeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + /// whether or not this controller should go to sleep after a one time shake + public bool DisableAfterOneTime; + /// whether or not this controller should go back to sleep after a OneTime + public bool DisableGameObjectAfterOneTime = false; + [MMInspectorButton("OneTime")] + /// a test button for the one time shake + public bool OneTimeButton; + + [Header("ToDestination")] + /// the duration of the tween to the destination value + public float ToDestinationDuration = 1f; + /// the value to tween to + public float ToDestinationValue = 1f; + /// the curve to use when tweening a value to destination + public AnimationCurve ToDestinationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 0.6f), new Keyframe(1f, 1f)); + /// whether or not this controller should go to sleep after a to destination shake + public bool DisableAfterToDestination; + [MMInspectorButton("ToDestination")] + /// a test button for the one time shake + public bool ToDestinationButton; + + public enum AudioAnalyzerModes { Beat, NormalizedBufferedBandLevels } + + [Header("AudioAnalyzer")] + /// the audio analyzer to read the value on + public MMAudioAnalyzer AudioAnalyzer; + /// whether to look at a Beat or at the normalized buffered band levels + public AudioAnalyzerModes AudioAnalyzerMode = AudioAnalyzerModes.Beat; + /// the ID of the beat to listen to + public int BeatID; + /// when in NormalizedBufferedBandLevels + public int NormalizedLevelID = 0; + /// a multiplier to apply to the output beat value + public float AudioAnalyzerMultiplier = 1f; + + [Header("Debug")] + [MMReadOnly] + /// the initial value of the controlled float + public float InitialValue; + [MMReadOnly] + /// the current value of the controlled float + public float CurrentValue; + [MMReadOnly] + /// the current value of the controlled float, normalized + public float CurrentValueNormalized; + + /// internal use only + [HideInInspector] + public float PingPong; + /// internal use only + [HideInInspector] + public MonoAttribute TargetAttribute; + /// internal use only + [HideInInspector] + public string[] AttributeNames; + /// internal use only + [HideInInspector] + public string PropertyName; + /// internal use only + [HideInInspector] + public int ChoiceIndex; + + public const string _undefinedString = ""; + + protected List _attributesNamesTempList; + protected PropertyInfo[] _propertyReferences; + protected FieldInfo[] _fieldReferences; + protected bool _attributeFound; + + protected float _randomAmplitude; + protected float _randomFrequency; + protected float _randomShift; + protected float _elapsedTime = 0f; + + protected bool _shaking = false; + protected float _shakeStartTimestamp = 0f; + protected float _remappedTimeSinceStart = 0f; + + protected float _pingPongDirection = 1f; + protected float _lastPingPongPauseAt = 0f; + protected float _initialValue = 0f; + + protected MonoBehaviour _targetObjectLastFrame; + protected MonoAttribute _targetAttributeLastFrame; + + /// + /// Finds an attribute (property or field) on the target object + /// + /// + /// + public virtual bool FindAttribute(string propertyName) + { + FieldInfo fieldInfo = null; + PropertyInfo propInfo = null; + TargetAttribute = null; + + propInfo = TargetObject.GetType().GetProperty(propertyName); + if (propInfo == null) + { + fieldInfo = TargetObject.GetType().GetField(propertyName); + } + if (propInfo != null) + { + TargetAttribute = new MonoAttribute(TargetObject, MonoAttribute.MemberTypes.Property, propInfo, null, propertyName); + } + if (fieldInfo != null) + { + TargetAttribute = new MonoAttribute(TargetObject, MonoAttribute.MemberTypes.Field, null, fieldInfo, propertyName); + } + if (PropertyName == _undefinedString) + { + Debug.LogError("FloatController " + this.name + " : you need to pick a property from the Property list"); + return false; + } + if ((propInfo == null) && (fieldInfo == null)) + { + Debug.LogError("FloatController " + this.name + " couldn't find any property or field named " + propertyName + " on " + TargetObject.name); + return false; + } + + if (TargetAttribute.MemberType == MonoAttribute.MemberTypes.Property) + { + TargetAttribute.MemberPropertyInfo = TargetObject.GetType().GetProperty(TargetAttribute.MemberName); + } + else if (TargetAttribute.MemberType == MonoAttribute.MemberTypes.Field) + { + TargetAttribute.MemberFieldInfo = TargetObject.GetType().GetField(TargetAttribute.MemberName); + } + + return true; + } + + /// + /// On start we initialize our controller + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// On enable, grabs the initial value + /// + protected virtual void OnEnable() + { + InitialValue = GetInitialValue(); + } + + /// + /// Grabs the target property and initializes stuff + /// + public virtual void Initialization() + { + _attributeFound = FindAttribute(PropertyName); + if (!_attributeFound) + { + return; + } + + if ((TargetObject == null) || (string.IsNullOrEmpty(TargetAttribute.MemberName))) + { + return; + } + + _elapsedTime = 0f; + _randomAmplitude = Random.Range(Amplitude.x, Amplitude.y); + _randomFrequency = Random.Range(Frequency.x, Frequency.y); + _randomShift = Random.Range(Shift.x, Shift.y); + + InitialValue = GetInitialValue(); + + _shaking = false; + } + + /// + /// Grabs the initial float value + /// + /// + protected virtual float GetInitialValue() + { + if (TargetAttribute.MemberType == MonoAttribute.MemberTypes.Property) + { + return (float)TargetAttribute.MemberPropertyInfo.GetValue(TargetObject); + } + else if (TargetAttribute.MemberType == MonoAttribute.MemberTypes.Field) + { + return (float)TargetAttribute.MemberFieldInfo.GetValue(TargetObject); + } + return 0f; + } + + /// + /// Sets the level to the value passed in parameters + /// + /// + public virtual void SetDrivenLevelAbsolute(float level) + { + DrivenLevel = level; + } + + /// + /// Sets the level to the remapped value passed in parameters + /// + /// + /// + /// + public virtual void SetDrivenLevelNormalized(float normalizedLevel, float remapZero, float remapOne) + { + DrivenLevel = MMMaths.Remap(normalizedLevel, 0f, 1f, remapZero, remapOne); + } + + /// + /// Triggers a one time shake of the float controller + /// + public virtual void OneTime() + { + if ((TargetObject == null) || (TargetAttribute == null)) + { + return; + } + else + { + this.gameObject.SetActive(true); + this.enabled = true; + _shakeStartTimestamp = GetTime(); + _shaking = true; + } + } + + /// + /// Triggers a one time shake of the controller to a specified destination value + /// + public virtual void ToDestination() + { + if ((TargetObject == null) || (TargetAttribute == null)) + { + return; + } + else + { + this.enabled = true; + ControlMode = ControlModes.ToDestination; + _shakeStartTimestamp = GetTime(); + _shaking = true; + _initialValue = GetInitialValue(); + } + } + + /// + /// Returns the relevant delta time + /// + /// + protected float GetDeltaTime() + { + return UseUnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime; + } + + /// + /// Returns the relevant time + /// + /// + protected float GetTime() + { + return UseUnscaledTime ? Time.unscaledTime : Time.time; + } + + /// + /// On Update, we move our value based on the defined settings + /// + protected virtual void Update() + { + _targetObjectLastFrame = TargetObject; + _targetAttributeLastFrame = TargetAttribute; + + if ((TargetObject == null) || (TargetAttribute == null) || (!_attributeFound)) + { + return; + } + + switch (ControlMode) + { + case ControlModes.PingPong: + + if (GetTime() - _lastPingPongPauseAt < PingPongPauseDuration) + { + return; + } + PingPong += GetDeltaTime() * _pingPongDirection; + + if (PingPong < 0f) + { + PingPong = 0f; + _pingPongDirection = -_pingPongDirection; + _lastPingPongPauseAt = GetTime(); + } + + if (PingPong > Duration) + { + PingPong = Duration; + _pingPongDirection = -_pingPongDirection; + _lastPingPongPauseAt = GetTime(); + } + CurrentValue = MMTween.Tween(PingPong, 0f, Duration, MinValue, MaxValue, Curve); + CurrentValueNormalized = MMMaths.Remap(CurrentValue, MinValue, MaxValue, 0f, 1f); + break; + case ControlModes.Random: + _elapsedTime += GetDeltaTime(); + CurrentValueNormalized = Mathf.PerlinNoise(_randomFrequency * _elapsedTime, _randomShift); + if (RemapNoiseValues) + { + CurrentValue = CurrentValueNormalized; + CurrentValue = MMMaths.Remap(CurrentValue, 0f, 1f, RemapNoiseZero, RemapNoiseOne); + } + else + { + CurrentValue = (CurrentValueNormalized * 2.0f - 1.0f) * _randomAmplitude; + } + break; + case ControlModes.OneTime: + if (!_shaking) + { + return; + } + _remappedTimeSinceStart = MMMaths.Remap(GetTime() - _shakeStartTimestamp, 0f, OneTimeDuration, 0f, 1f); + CurrentValueNormalized = OneTimeCurve.Evaluate(_remappedTimeSinceStart); + CurrentValue = MMMaths.Remap(CurrentValueNormalized, 0f, 1f, OneTimeRemapMin, OneTimeRemapMax); + CurrentValue *= OneTimeAmplitude; + break; + case ControlModes.AudioAnalyzer: + if (AudioAnalyzerMode == AudioAnalyzerModes.Beat) + { + CurrentValue = AudioAnalyzer.Beats[BeatID].CurrentValue * AudioAnalyzerMultiplier; + } + else + { + CurrentValue = AudioAnalyzer.NormalizedBufferedBandLevels[NormalizedLevelID] * AudioAnalyzerMultiplier; + } + CurrentValueNormalized = Mathf.Clamp(CurrentValue, 0f, 1f); + break; + case ControlModes.Driven: + CurrentValue = DrivenLevel; + CurrentValueNormalized = Mathf.Clamp(CurrentValue, 0f, 1f); + break; + case ControlModes.ToDestination: + if (!_shaking) + { + return; + } + _remappedTimeSinceStart = MMMaths.Remap(GetTime() - _shakeStartTimestamp, 0f, ToDestinationDuration, 0f, 1f); + float time = ToDestinationCurve.Evaluate(_remappedTimeSinceStart); + CurrentValue = Mathf.LerpUnclamped(_initialValue, ToDestinationValue, time); + CurrentValueNormalized = MMMaths.Remap(CurrentValue, _initialValue, ToDestinationValue, 0f, 1f); + break; + } + + + if (AddToInitialValue) + { + CurrentValue += InitialValue; + } + + if (ControlMode == ControlModes.OneTime) + { + if (_shaking && (GetTime() - _shakeStartTimestamp > OneTimeDuration)) + { + _shaking = false; + if (RevertToInitialValueAfterEnd) + { + CurrentValue = InitialValue; + TargetAttribute.SetValue(CurrentValue); + } + else + { + CurrentValue = OneTimeCurve.Evaluate(1f); + CurrentValue = MMMaths.Remap(CurrentValue, 0f, 1f, OneTimeRemapMin, OneTimeRemapMax); + CurrentValue *= OneTimeAmplitude; + TargetAttribute.SetValue(CurrentValue); + } + if (DisableAfterOneTime) + { + this.enabled = false; + } + if (DisableGameObjectAfterOneTime) + { + this.gameObject.SetActive(false); + } + return; + } + } + + if (ControlMode == ControlModes.ToDestination) + { + if (_shaking && (GetTime() - _shakeStartTimestamp > ToDestinationDuration)) + { + _shaking = false; + if (RevertToInitialValueAfterEnd) + { + CurrentValue = InitialValue; + } + else + { + CurrentValue = ToDestinationValue; + } + TargetAttribute.SetValue(CurrentValue); + + if (DisableAfterOneTime) + { + this.enabled = false; + } + if (DisableGameObjectAfterOneTime) + { + this.gameObject.SetActive(false); + } + return; + } + } + + TargetAttribute.SetValue(CurrentValue); + } + + /// + /// When the contents of the inspector change, and if the target changed, we grab all its properties and store them + /// + protected virtual void OnValidate() + { + FillDropDownList(); + if ( Application.isPlaying + && ((_targetAttributeLastFrame != TargetAttribute) || (_targetObjectLastFrame != TargetObject)) ) + { + Initialization(); + } + } + + /// + /// On disable we revert to the previous value if needed + /// + protected virtual void OnDisable() + { + if (RevertToInitialValueAfterEnd) + { + CurrentValue = InitialValue; + TargetAttribute.SetValue(CurrentValue); + } + } + + /// + /// Interrupts any tween in progress, and disables itself + /// + public virtual void Stop() + { + _shaking = false; + this.enabled = false; + } + + /// + /// Fills the inspector dropdown with all the possible choices + /// + public virtual void FillDropDownList() + { + AttributeNames = new string[0]; + + if (TargetObject == null) + { + return; + } + + _propertyReferences = TargetObject.GetType().GetProperties(); + _attributesNamesTempList = new List(); + _attributesNamesTempList.Add(_undefinedString); + + foreach (PropertyInfo propertyInfo in _propertyReferences) + { + if (propertyInfo.PropertyType.Name == "Single") + { + _attributesNamesTempList.Add(propertyInfo.Name); + } + } + + _fieldReferences = TargetObject.GetType().GetFields(); + foreach (FieldInfo fieldInfo in _fieldReferences) + { + if (fieldInfo.FieldType.Name == "Single") + { + _attributesNamesTempList.Add(fieldInfo.Name); + } + } + + // we fill our dropdown list of names : + AttributeNames = _attributesNamesTempList.ToArray(); + } + + /// + /// On restore, we restore our initial state + /// + public virtual void RestoreInitialValues() + { + TargetAttribute.SetValue(InitialValue); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers/FloatController.cs.meta b/Assets/Feel/MMTools/Core/MMPropertyControllers/FloatController.cs.meta new file mode 100644 index 0000000..e644995 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers/FloatController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f4520ff861e339d42bae57b95686b14b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers/LightController.cs b/Assets/Feel/MMTools/Core/MMPropertyControllers/LightController.cs new file mode 100644 index 0000000..1431d1b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers/LightController.cs @@ -0,0 +1,104 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Reflection; + +namespace MoreMountains.Tools +{ + /// + /// A class used to control the intensity of a light + /// + [AddComponentMenu("More Mountains/Tools/Property Controllers/LightController")] + public class LightController : MonoBehaviour + { + [Header("Binding")] + [MMInformation("Use this component to control the properties of one or more lights at runtime. Plays well with a FloatController. " + + "This component will try to auto set the TargetLight if there's a Light component on this object.", MoreMountains.Tools.MMInformationAttribute.InformationType.Info, false)] + /// the light to control + public Light TargetLight; + /// the lights to control + public List TargetLights; + + [Header("Light Settings")] + /// the new intensity + public float Intensity = 1f; + /// the multiplier to apply + public float Multiplier = 1f; + /// the new range + public float Range = 1f; + + [Header("Color")] + /// the new color + public Color LightColor; + + /// + /// On Start, we initialize our light + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// Grabs the light, sets initial range and color + /// + protected virtual void Initialization() + { + if (TargetLight == null) + { + TargetLight = this.gameObject.GetComponent(); + } + + if (TargetLight != null) + { + TargetLight.range = Range; + TargetLight.color = LightColor; + } + + if (TargetLights.Count > 0) + { + foreach (Light light in TargetLights) + { + if (light != null) + { + light.range = Range; + light.color = LightColor; + } + } + } + } + + /// + /// On Update we apply our light settings + /// + protected virtual void Update() + { + ApplyLightSettings(); + } + + /// + /// Applys the new intensity, range and color to the light + /// + protected virtual void ApplyLightSettings() + { + if (TargetLight != null) + { + TargetLight.intensity = Intensity * Multiplier; + TargetLight.range = Range; + TargetLight.color = LightColor; + } + + if (TargetLights.Count > 0) + { + foreach (Light light in TargetLights) + { + if (light != null) + { + light.intensity = Intensity * Multiplier; + light.range = Range; + light.color = LightColor; + } + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers/LightController.cs.meta b/Assets/Feel/MMTools/Core/MMPropertyControllers/LightController.cs.meta new file mode 100644 index 0000000..5e2702f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers/LightController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7e54a3a8f5944d43ae992cd916cedda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers/ShaderController.cs b/Assets/Feel/MMTools/Core/MMPropertyControllers/ShaderController.cs new file mode 100644 index 0000000..b2c9c3a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers/ShaderController.cs @@ -0,0 +1,995 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + + /// + /// A class used to control a float in any other class, over time + /// To use it, simply drag a monobehaviour in its target field, pick a control mode (ping pong or random), and tweak the settings + /// + [MMRequiresConstantRepaint] + [AddComponentMenu("More Mountains/Tools/Property Controllers/ShaderController")] + public class ShaderController : MMMonoBehaviour + { + /// the possible types of targets + public enum TargetTypes { Renderer, Image, RawImage, Text } + /// the possible types of properties + public enum PropertyTypes { Bool, Float, Int, Vector, Keyword, Color } + /// the possible control modes + public enum ControlModes { PingPong, Random, OneTime, AudioAnalyzer, ToDestination, Driven, Loop } + /// the possible color modes on which to interpolate colors + public enum ColorModes { TwoColors, ColorRamp } + + [Header("Target")] + /// the type of renderer to pilot + [Tooltip("the type of renderer to pilot")] + public TargetTypes TargetType = TargetTypes.Renderer; + /// the renderer with the shader you want to control + [Tooltip("the renderer with the shader you want to control")] + [MMEnumCondition("TargetType",(int)TargetTypes.Renderer)] + public Renderer TargetRenderer; + /// the ID of the material in the Materials array on the target renderer (usually 0) + [Tooltip("the ID of the material in the Materials array on the target renderer (usually 0)")] + [MMEnumCondition("TargetType", (int)TargetTypes.Renderer)] + public int TargetMaterialID = 0; + /// the Image with the shader you want to control + [Tooltip("the Image with the shader you want to control")] + [MMEnumCondition("TargetType", (int)TargetTypes.Image)] + public Image TargetImage; + /// if this is true, the 'materialForRendering' for this Image will be used, instead of the regular material + [Tooltip("if this is true, the 'materialForRendering' for this Image will be used, instead of the regular material")] + [MMEnumCondition("TargetType", (int)TargetTypes.Image)] + public bool UseMaterialForRendering = false; + /// the RawImage with the shader you want to control + [Tooltip("the RawImage with the shader you want to control")] + [MMEnumCondition("TargetType", (int)TargetTypes.RawImage)] + public RawImage TargetRawImage; + /// the Text with the shader you want to control + [Tooltip("the Text with the shader you want to control")] + [MMEnumCondition("TargetType", (int)TargetTypes.Text)] + public Text TargetText; + /// if this is true, material will be cached on Start + [Tooltip("if this is true, material will be cached on Start")] + public bool CacheMaterial = true; + /// if this is true, an instance of the material will be created on start so that this controller only affects its target + [Tooltip("if this is true, an instance of the material will be created on start so that this controller only affects its target")] + public bool CreateMaterialInstance = false; + /// the EXACT name of the property to affect + [Tooltip("the EXACT name of the property to affect")] + public string TargetPropertyName; + /// the type of the property to affect + [Tooltip("the type of the property to affect")] + public PropertyTypes PropertyType = PropertyTypes.Float; + /// whether or not to affect its x component + [Tooltip("whether or not to affect its x component")] + [MMEnumCondition("PropertyType", (int)PropertyTypes.Vector)] + public bool X; + /// whether or not to affect its y component + [Tooltip("whether or not to affect its y component")] + [MMEnumCondition("PropertyType", (int)PropertyTypes.Vector)] + public bool Y; + /// whether or not to affect its z component + [Tooltip("whether or not to affect its z component")] + [MMEnumCondition("PropertyType", (int)PropertyTypes.Vector)] + public bool Z; + /// whether or not to affect its w component + [Tooltip("whether or not to affect its w component")] + [MMEnumCondition("PropertyType", (int)PropertyTypes.Vector)] + public bool W; + + [Header("Color")] + /// whether to move from a color to another, or to evalute colors on a ramp + [Tooltip("whether to move from a color to another, or to evalute colors on a ramp")] + public ColorModes ColorMode = ColorModes.TwoColors; + /// the ramp along which to lerp when in ramp color mode + [Tooltip("the ramp along which to lerp when in ramp color mode")] + [GradientUsage(true)] + public Gradient ColorRamp; + /// the color to lerp from + [Tooltip("the color to lerp from")] + [ColorUsage(true, true)] + public Color FromColor = Color.black; + /// the color to lerp to + [Tooltip("the color to lerp to")] + [ColorUsage(true, true)] + public Color ToColor = Color.white; + + [Header("Global Settings")] + /// the control mode (ping pong or random) + [Tooltip("the control mode (ping pong or random)")] + public ControlModes ControlMode; + /// whether or not the updated value should be added to the initial one + [Tooltip("whether or not the updated value should be added to the initial one")] + public bool AddToInitialValue = false; + /// whether or not to use unscaled time + [Tooltip("whether or not to use unscaled time")] + public bool UseUnscaledTime = true; + /// whether or not you want to revert to the InitialValue after the control ends + [Tooltip("whether or not you want to revert to the InitialValue after the control ends")] + public bool RevertToInitialValueAfterEnd = true; + /// if this is true, this component will use material property blocks instead of working on an instance of the material. + [Tooltip("if this is true, this component will use material property blocks instead of working on an instance of the material.")] + [MMEnumCondition("TargetType", (int)TargetTypes.Renderer)] + public bool UseMaterialPropertyBlocks = false; + /// if using material property blocks on a sprite renderer, you'll want to make sure the sprite texture gets passed to the block when updating it. For that, you need to specify your sprite's material's shader's texture property name. If you're not working with a sprite renderer, you can safely ignore this. + [Tooltip("if using material property blocks on a sprite renderer, you'll want to make sure the sprite texture gets passed to the block when updating it. For that, you need to specify your sprite's material's shader's texture property name. If you're not working with a sprite renderer, you can safely ignore this.")] + [MMCondition("UseMaterialPropertyBlocks", true)] + public string SpriteRendererTextureProperty = "_MainTex"; + /// whether or not to perform extra safety checks (safer, more costly) + [Tooltip("whether or not to perform extra safety checks (safer, more costly)")] + public bool SafeMode = false; + + [Header("Ping Pong")] + /// the curve to apply to the tween + [Tooltip("the curve to apply to the tween")] + public MMTweenType Curve; + /// the minimum value for the ping pong + [Tooltip("the minimum value for the ping pong")] + public float MinValue = 0f; + /// the maximum value for the ping pong + [Tooltip("the maximum value for the ping pong")] + public float MaxValue = 5f; + /// the duration of one ping (or pong) + [Tooltip("the duration of one ping (or pong)")] + public float Duration = 1f; + /// the duration of the pause between two ping (or pongs) (in seconds) + [Tooltip("the duration of the pause between two ping (or pongs) (in seconds)")] + public float PingPongPauseDuration = 1f; + + [Header("Loop")] + /// the curve to apply to the tween + [Tooltip("the curve to apply to the tween")] + public MMTweenType LoopCurve; + /// the start value for the loop tween + [Tooltip("the start value for the loop tween")] + public float LoopStartValue = 0f; + /// the end value for the loop tween + [Tooltip("the end value for the loop tween")] + public float LoopEndValue = 5f; + /// the duration of one loop + [Tooltip("the duration of one loop")] + public float LoopDuration = 1f; + /// the duration of the pause between two loops (in seconds) + [Tooltip("the duration of the pause between two loops (in seconds)")] + public float LoopPauseDuration = 1f; + + [Header("Driven")] + /// the value that will be applied to the controlled float in driven mode + [Tooltip("the value that will be applied to the controlled float in driven mode")] + public float DrivenLevel = 0f; + + [Header("Random")] + /// the noise amplitude + [Tooltip("the noise amplitude")] + [MMVector("Min", "Max")] + public Vector2 Amplitude = new Vector2(0f,5f); + /// the noise frequency + [Tooltip("the noise frequency")] + [MMVector("Min", "Max")] + public Vector2 Frequency = new Vector2(1f, 1f); + /// the noise shift + [Tooltip("the noise shift")] + [MMVector("Min", "Max")] + public Vector2 Shift = new Vector2(0f, 1f); + + /// if this is true, will let you remap the noise value (without amplitude) to the bounds you've specified + [Tooltip("if this is true, will let you remap the noise value (without amplitude) to the bounds you've specified")] + public bool RemapNoiseValues = false; + /// the value to which to remap the random's zero bound + [Tooltip("the value to which to remap the random's zero bound")] + [MMCondition("RemapNoiseValues", true)] + public float RemapNoiseZero = 0f; + /// the value to which to remap the random's one bound + [Tooltip("the value to which to remap the random's one bound")] + [MMCondition("RemapNoiseValues", true)] + public float RemapNoiseOne = 1f; + + [Header("OneTime")] + /// the duration of the One Time shake + [Tooltip("the duration of the One Time shake")] + public float OneTimeDuration = 1f; + /// the amplitude of the One Time shake (this will be multiplied by the curve's height) + [Tooltip("the amplitude of the One Time shake (this will be multiplied by the curve's height)")] + public float OneTimeAmplitude = 1f; + /// the low value to remap the normalized curve value to + [Tooltip("the low value to remap the normalized curve value to")] + public float OneTimeRemapMin = 0f; + /// the high value to remap the normalized curve value to + [Tooltip("the high value to remap the normalized curve value to")] + public float OneTimeRemapMax = 1f; + /// the curve to apply to the one time shake + [Tooltip("the curve to apply to the one time shake")] + public AnimationCurve OneTimeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 1), new Keyframe(1, 0)); + [MMInspectorButton("OneTime")] + /// a test button for the one time shake + [Tooltip("a test button for the one time shake")] + public bool OneTimeButton; + /// whether or not this controller should go back to sleep after a OneTime + [Tooltip("whether or not this controller should go back to sleep after a OneTime")] + public bool DisableAfterOneTime = false; + /// whether or not this controller should go back to sleep after a OneTime + [Tooltip("whether or not this controller should go back to sleep after a OneTime")] + public bool DisableGameObjectAfterOneTime = false; + /// whether or not to initialize the initial value to the current value on a OneTime play + [Tooltip("whether or not to initialize the initial value to the current value on a OneTime play")] + public bool GetInitialValueOnOneTime = false; + + [Header("AudioAnalyzer")] + /// the bound audio analyzer used to drive this controller + [Tooltip("the bound audio analyzer used to drive this controller")] + public MMAudioAnalyzer AudioAnalyzer; + /// the ID of the selected beat on the analyzer + [Tooltip("the ID of the selected beat on the analyzer")] + public int BeatID; + /// the multiplier to apply to the value out of the analyzer + [Tooltip("the multiplier to apply to the value out of the analyzer")] + public float AudioAnalyzerMultiplier = 1f; + /// the offset to apply to the value out of the analyzer + [Tooltip("the offset to apply to the value out of the analyzer")] + public float AudioAnalyzerOffset = 0f; + /// the speed at which to lerp the value + [Tooltip("the speed at which to lerp the value")] + public float AudioAnalyzerLerp = 60f; + + [Header("ToDestination")] + /// the value to go to when in ToDestination mode + [Tooltip("the value to go to when in ToDestination mode")] + public float ToDestinationValue = 1f; + /// the duration of the ToDestination tween + [Tooltip("the duration of the ToDestination tween")] + public float ToDestinationDuration = 1f; + /// the curve to use to tween to the ToDestination value + [Tooltip("the curve to use to tween to the ToDestination value")] + public AnimationCurve ToDestinationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.5f, 0.6f), new Keyframe(1f, 1f)); + /// a test button for the one time shake + [Tooltip("a test button for the one time shake")] + [MMInspectorButton("ToDestination")] + public bool ToDestinationButton; + /// whether or not this controller should go back to sleep after a OneTime + [Tooltip("whether or not this controller should go back to sleep after a OneTime")] + public bool DisableAfterToDestination = false; + + [Header("Debug")] + /// the initial value of the controlled float + [Tooltip("the initial value of the controlled float")] + [MMReadOnly] + public float InitialValue; + /// the current value of the controlled float + [Tooltip("the current value of the controlled float")] + [MMReadOnly] + public float CurrentValue; + /// the current value of the controlled float, normalized + [Tooltip("the current value of the controlled float, normalized")] + [MMReadOnly] + public float CurrentValueNormalized = 0f; + /// the current value of the controlled float + [Tooltip("the current value of the controlled float")] + [MMReadOnly] + public Color InitialColor; + + /// the ID of the property + [Tooltip("the ID of the property")] + [MMReadOnly] + public int PropertyID; + /// whether or not the property got found + [Tooltip("whether or not the property got found")] + [MMReadOnly] + public bool PropertyFound = false; + /// the target material + [Tooltip("the target material")] + [MMReadOnly] + public Material TargetMaterial; + + /// internal use only + [HideInInspector] + public float PingPong; + /// internal use only + [HideInInspector] + public float LoopTime; + + protected float _randomAmplitude; + protected float _randomFrequency; + protected float _randomShift; + protected float _elapsedTime = 0f; + protected bool _shaking = false; + protected float _startedTimestamp = 0f; + protected float _remappedTimeSinceStart = 0f; + protected Color _currentColor; + protected Vector4 _vectorValue; + protected float _pingPongDirection = 1f; + protected float _lastPingPongPauseAt = 0f; + protected float _lastLoopPauseAt = 0f; + protected float _initialValue = 0f; + protected Color _fromColorStorage; + protected bool _activeLastFrame = false; + protected MaterialPropertyBlock _propertyBlock; + protected SpriteRenderer _spriteRenderer; + protected Texture2D _spriteRendererTexture; + protected bool SpriteRendererIsNull; + + /// + /// Finds an attribute (property or field) on the target object + /// + /// + /// + public virtual bool FindShaderProperty(string propertyName) + { + if (TargetType == TargetTypes.Renderer) + { + if (CreateMaterialInstance) + { + TargetRenderer.materials[TargetMaterialID] = new Material(TargetRenderer.materials[TargetMaterialID]); + } + TargetMaterial = UseMaterialPropertyBlocks ? TargetRenderer.sharedMaterials[TargetMaterialID] : TargetRenderer.materials[TargetMaterialID]; + } + else if (TargetType == TargetTypes.Image) + { + if (CreateMaterialInstance) + { + TargetImage.material = new Material(TargetImage.material); + } + TargetMaterial = TargetImage.material; + } + else if (TargetType == TargetTypes.RawImage) + { + if (CreateMaterialInstance) + { + TargetRawImage.material = new Material(TargetRawImage.material); + } + TargetMaterial = TargetRawImage.material; + } + else if (TargetType == TargetTypes.Text) + { + if (CreateMaterialInstance) + { + TargetText.material = new Material(TargetText.material); + } + TargetMaterial = TargetText.material; + } + + if (PropertyType == PropertyTypes.Keyword) + { + PropertyFound = true; + return true; + } + if (TargetMaterial.HasProperty(propertyName)) + { + PropertyID = Shader.PropertyToID(propertyName); + PropertyFound = true; + return true; + } + return false; + } + + /// + /// On start we initialize our controller + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// On enable, grabs the initial value + /// + protected virtual void OnEnable() + { + InitialValue = GetInitialValue(); + if (PropertyType == PropertyTypes.Color) + { + InitialColor = TargetMaterial.GetColor(PropertyID); + } + } + + /// + /// Returns true if the renderer is null, false otherwise + /// + /// + protected virtual bool RendererIsNull() + { + if ((TargetType == TargetTypes.Renderer) && (TargetRenderer == null)) + { + return true; + } + if ((TargetType == TargetTypes.Image) && (TargetImage == null)) + { + return true; + } + if ((TargetType == TargetTypes.RawImage) && (TargetRawImage == null)) + { + return true; + } + if ((TargetType == TargetTypes.Text) && (TargetText == null)) + { + return true; + } + return false; + } + + /// + /// Grabs the target property and initializes stuff + /// + public virtual void Initialization() + { + if (RendererIsNull() || (string.IsNullOrEmpty(TargetPropertyName))) + { + return; + } + if (TargetType != TargetTypes.Renderer) + { + UseMaterialPropertyBlocks = false; + } + + StoreSpriteRenderer(); + + PropertyFound = FindShaderProperty(TargetPropertyName); + if (!PropertyFound) + { + return; + } + + _elapsedTime = 0f; + _randomAmplitude = Random.Range(Amplitude.x, Amplitude.y); + _randomFrequency = Random.Range(Frequency.x, Frequency.y); + _randomShift = Random.Range(Shift.x, Shift.y); + + if ((TargetType == TargetTypes.Renderer) && UseMaterialPropertyBlocks) + { + _propertyBlock = new MaterialPropertyBlock(); + TargetRenderer.GetPropertyBlock(_propertyBlock, TargetMaterialID); + } + + InitialValue = GetInitialValue(); + if (PropertyType == PropertyTypes.Color) + { + InitialColor = TargetMaterial.GetColor(PropertyID); + } + + _shaking = false; + if (ControlMode == ControlModes.OneTime) + { + this.enabled = false; + } + StoreSpriteRendererTexture(); + } + + /// + /// Stores the sprite renderer and a test for it + /// + public virtual void StoreSpriteRenderer() + { + _spriteRenderer = (TargetRenderer != null) ? TargetRenderer.GetComponent() : null; + SpriteRendererIsNull = _spriteRenderer == null; + } + + /// + /// Stores the SpriteRenderer's texture if found + /// + public virtual void StoreSpriteRendererTexture() + { + if (SpriteRendererIsNull) + { + return; + } + _spriteRendererTexture = _spriteRenderer.sprite.texture; + } + + /// + /// Sets the texture associated with the sprite renderer to the specified block + /// + /// + protected virtual void SetStoredSpriteRendererTexture(MaterialPropertyBlock block) + { + if (SpriteRendererIsNull) + { + return; + } + block.SetTexture(SpriteRendererTextureProperty, _spriteRendererTexture); + } + + /// + /// Sets the level to the value passed in parameters + /// + /// + public virtual void SetDrivenLevelAbsolute(float level) + { + DrivenLevel = level; + } + + /// + /// Sets the level to the remapped value passed in parameters + /// + /// + /// + /// + public virtual void SetDrivenLevelNormalized(float normalizedLevel, float remapZero, float remapOne) + { + DrivenLevel = MMMaths.Remap(normalizedLevel, 0f, 1f, remapZero, remapOne); + } + + /// + /// Triggers a one time shake of the shader controller + /// + public virtual void OneTime() + { + if (!CacheMaterial) + { + Initialization(); + } + + if (GetInitialValueOnOneTime) + { + InitialValue = GetInitialValue(); + } + + if (RendererIsNull() || (!PropertyFound)) + { + return; + } + else + { + this.gameObject.SetActive(true); + this.enabled = true; + ControlMode = ControlModes.OneTime; + _startedTimestamp = GetTime(); + _shaking = true; + } + } + + /// + /// Triggers a one time shake of the controller to a specified destination value + /// + public virtual void ToDestination() + { + if (!CacheMaterial) + { + Initialization(); + } + if (RendererIsNull() || (!PropertyFound)) + { + return; + } + else + { + this.enabled = true; + if (PropertyType == PropertyTypes.Color) + { + _fromColorStorage = FromColor; + FromColor = TargetMaterial.GetColor(PropertyID); + } + ControlMode = ControlModes.ToDestination; + _startedTimestamp = GetTime(); + _shaking = true; + _initialValue = GetInitialValue(); + } + } + + /// + /// Use this method to change the FromColor value + /// + /// + public void SetFromColor(Color newColor) { FromColor = newColor; } + + /// + /// Use this method to change the ToColor value + /// + /// + public void SetToColor(Color newColor) { ToColor = newColor; } + + /// + /// Use this method to change the OneTimeRemapMin value + /// + /// + public virtual void SetRemapOneTimeMin(float newValue) { OneTimeRemapMin = newValue; } + + /// + /// Use this method to change the OneTimeRemapMax value + /// + /// + public virtual void SetRemapOneTimeMax(float newValue) { OneTimeRemapMax = newValue; } + + /// + /// Use this method to change the ToDestinationValue + /// + /// + public virtual void SetToDestinationValue(float newValue) { ToDestinationValue = newValue; } + + /// + /// Returns the relevant delta time + /// + /// + protected float GetDeltaTime() + { + return UseUnscaledTime ? Time.unscaledDeltaTime : Time.deltaTime; + } + + /// + /// Returns the relevant time + /// + /// + protected float GetTime() + { + return UseUnscaledTime ? Time.unscaledTime : Time.time; + } + + /// + /// On Update, we move our value based on the defined settings + /// + protected virtual void Update() + { + UpdateValue(); + } + + protected virtual void OnDisable() + { + if (RevertToInitialValueAfterEnd) + { + CurrentValue = InitialValue; + _currentColor = InitialColor; + SetValue(CurrentValue); + } + } + + /// + /// Updates the value over time based on the selected options + /// + protected virtual void UpdateValue() + { + if (SafeMode) + { + if (RendererIsNull() || (!PropertyFound)) + { + return; + } + } + + switch (ControlMode) + { + case ControlModes.PingPong: + if (GetTime() - _lastPingPongPauseAt < PingPongPauseDuration) + { + return; + } + PingPong += GetDeltaTime() * _pingPongDirection; + if (PingPong < 0f) + { + PingPong = 0f; + _pingPongDirection = -_pingPongDirection; + _lastPingPongPauseAt = GetTime(); + } + + if (PingPong > Duration) + { + PingPong = Duration; + _pingPongDirection = -_pingPongDirection; + _lastPingPongPauseAt = GetTime(); + } + CurrentValue = MMTween.Tween(PingPong, 0f, Duration, MinValue, MaxValue, Curve); + CurrentValueNormalized = MMMaths.Remap(CurrentValue, MinValue, MaxValue, 0f, 1f); + break; + case ControlModes.Loop: + if (GetTime() - _lastLoopPauseAt < LoopPauseDuration) + { + return; + } + LoopTime += GetDeltaTime(); + if (LoopTime > LoopDuration) + { + LoopTime = 0f; + _lastLoopPauseAt = GetTime(); + } + CurrentValue = MMTween.Tween(LoopTime, 0f, LoopDuration, LoopStartValue, LoopEndValue, LoopCurve); + CurrentValueNormalized = MMMaths.Remap(CurrentValue, LoopStartValue, LoopEndValue, 0f, 1f); + break; + case ControlModes.Random: + _elapsedTime += GetDeltaTime(); + CurrentValueNormalized = Mathf.PerlinNoise(_randomFrequency * _elapsedTime, _randomShift); + if (RemapNoiseValues) + { + CurrentValue = CurrentValueNormalized; + CurrentValue = MMMaths.Remap(CurrentValue, 0f, 1f, RemapNoiseZero, RemapNoiseOne); + } + else + { + CurrentValue = (CurrentValueNormalized * 2.0f - 1.0f) * _randomAmplitude; + } + break; + case ControlModes.OneTime: + if (!_shaking) + { + return; + } + _remappedTimeSinceStart = MMMaths.Remap(GetTime() - _startedTimestamp, 0f, OneTimeDuration, 0f, 1f); + CurrentValueNormalized = OneTimeCurve.Evaluate(_remappedTimeSinceStart); + CurrentValue = MMMaths.Remap(CurrentValueNormalized, 0f, 1f, OneTimeRemapMin, OneTimeRemapMax); + CurrentValue *= OneTimeAmplitude; + break; + case ControlModes.AudioAnalyzer: + CurrentValue = Mathf.Lerp(CurrentValue, AudioAnalyzer.Beats[BeatID].CurrentValue * AudioAnalyzerMultiplier + AudioAnalyzerOffset, AudioAnalyzerLerp * GetDeltaTime()); + CurrentValueNormalized = Mathf.Clamp(AudioAnalyzer.Beats[BeatID].CurrentValue, 0f, 1f); + break; + case ControlModes.Driven: + CurrentValue = DrivenLevel; + CurrentValueNormalized = Mathf.Clamp(CurrentValue, 0f, 1f); + break; + case ControlModes.ToDestination: + if (!_shaking) + { + return; + } + _remappedTimeSinceStart = MMMaths.Remap(GetTime() - _startedTimestamp, 0f, ToDestinationDuration, 0f, 1f); + float time = ToDestinationCurve.Evaluate(_remappedTimeSinceStart); + CurrentValue = Mathf.LerpUnclamped(_initialValue, ToDestinationValue, time); + CurrentValueNormalized = MMMaths.Remap(CurrentValue, _initialValue, ToDestinationValue, 0f, 1f); + break; + } + + if (PropertyType == PropertyTypes.Color) + { + if (ColorMode == ColorModes.TwoColors) + { + _currentColor = Color.Lerp(FromColor, ToColor, CurrentValue); + } + else + { + _currentColor = ColorRamp.Evaluate(CurrentValue); + } + } + + if (AddToInitialValue) + { + CurrentValue += InitialValue; + } + + if ((ControlMode == ControlModes.OneTime) && _shaking && (GetTime() - _startedTimestamp > OneTimeDuration)) + { + _shaking = false; + if (RevertToInitialValueAfterEnd) + { + CurrentValue = InitialValue; + if (PropertyType == PropertyTypes.Color) + { + _currentColor = InitialColor; + } + } + else + { + CurrentValue = OneTimeCurve.Evaluate(1f); + CurrentValue = MMMaths.Remap(CurrentValue, 0f, 1f, OneTimeRemapMin, OneTimeRemapMax); + CurrentValue *= OneTimeAmplitude; + if (AddToInitialValue) + { + CurrentValue += InitialValue; + } + } + SetValue(CurrentValue); + if (DisableAfterOneTime) + { + this.enabled = false; + } + if (DisableGameObjectAfterOneTime) + { + this.gameObject.SetActive(false); + } + return; + } + + if ((ControlMode == ControlModes.ToDestination) && _shaking && (GetTime() - _startedTimestamp > ToDestinationDuration)) + { + _shaking = false; + FromColor = _fromColorStorage; + if (RevertToInitialValueAfterEnd) + { + CurrentValue = InitialValue; + if (PropertyType == PropertyTypes.Color) + { + _currentColor = InitialColor; + } + } + else + { + CurrentValue = ToDestinationValue; + } + SetValue(CurrentValue); + if (DisableAfterToDestination) + { + this.enabled = false; + } + return; + } + + SetValue(CurrentValue); + } + + /// + /// Grabs and stores the initial value + /// + protected virtual float GetInitialValue() + { + if (TargetMaterial == null) + { + Debug.LogWarning("Material is null", this); + return 0f; + } + + switch (PropertyType) + { + case PropertyTypes.Bool: + return TargetMaterial.GetInt(PropertyID); + + case PropertyTypes.Int: + return TargetMaterial.GetInt(PropertyID); + + case PropertyTypes.Float: + return TargetMaterial.GetFloat(PropertyID); + + case PropertyTypes.Vector: + return TargetMaterial.GetVector(PropertyID).x; + + case PropertyTypes.Keyword: + return TargetMaterial.IsKeywordEnabled(TargetPropertyName) ? 1f : 0f; + + case PropertyTypes.Color: + if (ControlMode != ControlModes.ToDestination) + { + InitialColor = TargetMaterial.GetColor(PropertyID); + } + return 0f; + + default: + return 0f; + } + } + + /// + /// Sets the value in the shader + /// + /// + protected virtual void SetValue(float newValue) + { + if (TargetType == TargetTypes.Image && UseMaterialForRendering) + { + if (SafeMode) + { + if (TargetImage == null) + { + return; + } + } + TargetMaterial = TargetImage.materialForRendering; + } + + switch (PropertyType) + { + case PropertyTypes.Bool: + newValue = (newValue > 0f) ? 1f : 0f; + int newBool = Mathf.RoundToInt(newValue); + if (UseMaterialPropertyBlocks) + { + if (TargetRenderer == null) { return; } + TargetRenderer.GetPropertyBlock(_propertyBlock, TargetMaterialID); + StoreSpriteRendererTexture(); + _propertyBlock.SetInt(PropertyID, newBool); + SetStoredSpriteRendererTexture(_propertyBlock); + TargetRenderer.SetPropertyBlock(_propertyBlock, TargetMaterialID); + } + else + { + TargetMaterial.SetInt(PropertyID, newBool); + } + break; + + case PropertyTypes.Keyword: + newValue = (newValue > 0f) ? 1f : 0f; + if (newValue == 0f) + { + TargetMaterial.DisableKeyword(TargetPropertyName); + } + else + { + TargetMaterial.EnableKeyword(TargetPropertyName); + } + break; + + case PropertyTypes.Int: + int newInt = Mathf.RoundToInt(newValue); + if (UseMaterialPropertyBlocks) + { + if (TargetRenderer == null) { return; } + TargetRenderer.GetPropertyBlock(_propertyBlock, TargetMaterialID); + StoreSpriteRendererTexture(); + _propertyBlock.SetInt(PropertyID, newInt); + SetStoredSpriteRendererTexture(_propertyBlock); + TargetRenderer.SetPropertyBlock(_propertyBlock, TargetMaterialID); + } + else + { + TargetMaterial.SetInt(PropertyID, newInt); + } + break; + + case PropertyTypes.Float: + if (UseMaterialPropertyBlocks) + { + if (TargetRenderer == null) { return; } + TargetRenderer.GetPropertyBlock(_propertyBlock, TargetMaterialID); + StoreSpriteRendererTexture(); + _propertyBlock.SetFloat(PropertyID, newValue); + SetStoredSpriteRendererTexture(_propertyBlock); + TargetRenderer.SetPropertyBlock(_propertyBlock, TargetMaterialID); + } + else + { + TargetMaterial.SetFloat(PropertyID, newValue); + } + break; + + case PropertyTypes.Vector: + _vectorValue = TargetMaterial.GetVector(PropertyID); + if (X) + { + _vectorValue.x = newValue; + } + if (Y) + { + _vectorValue.y = newValue; + } + if (Z) + { + _vectorValue.z = newValue; + } + if (W) + { + _vectorValue.w = newValue; + } + if (UseMaterialPropertyBlocks) + { + if (TargetRenderer == null) { return; } + TargetRenderer.GetPropertyBlock(_propertyBlock, TargetMaterialID); + _propertyBlock.SetVector(PropertyID, _vectorValue); + SetStoredSpriteRendererTexture(_propertyBlock); + TargetRenderer.SetPropertyBlock(_propertyBlock, TargetMaterialID); + } + else + { + TargetMaterial.SetVector(PropertyID, _vectorValue); + } + break; + + case PropertyTypes.Color: + if (UseMaterialPropertyBlocks) + { + if (TargetRenderer == null) { return; } + TargetRenderer.GetPropertyBlock(_propertyBlock, TargetMaterialID); + StoreSpriteRendererTexture(); + _propertyBlock.SetColor(PropertyID, _currentColor); + SetStoredSpriteRendererTexture(_propertyBlock); + TargetRenderer.SetPropertyBlock(_propertyBlock, TargetMaterialID); + } + else + { + TargetMaterial.SetColor(PropertyID, _currentColor); + } + break; + } + } + + /// + /// Interrupts any tween in progress, and disables itself + /// + public virtual void Stop() + { + _shaking = false; + this.enabled = false; + } + + public virtual void RestoreInitialValues() + { + _currentColor = InitialColor; + SetValue(InitialValue); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers/ShaderController.cs.meta b/Assets/Feel/MMTools/Core/MMPropertyControllers/ShaderController.cs.meta new file mode 100644 index 0000000..5604bb8 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers/ShaderController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ad986206bb726846a202cfdedd282dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers/TransformController.cs b/Assets/Feel/MMTools/Core/MMPropertyControllers/TransformController.cs new file mode 100644 index 0000000..2db1119 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers/TransformController.cs @@ -0,0 +1,106 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Reflection; + +namespace MoreMountains.Tools +{ + /// + /// A simple class used to control properties on a transform + /// + [AddComponentMenu("More Mountains/Tools/Property Controllers/TransformController")] + public class TransformController : MonoBehaviour + { + [Header("Position")] + public bool ControlPositionX; + [MMCondition("ControlPositionX", true)] + public float PositionX; + public bool ControlPositionY; + [MMCondition("ControlPositionY", true)] + public float PositionY; + public bool ControlPositionZ; + [MMCondition("ControlPositionZ", true)] + public float PositionZ; + + [Header("Local Position")] + public bool ControlLocalPositionX; + [MMCondition("ControlLocalPositionX", true)] + public float LocalPositionX; + public bool ControlLocalPositionY; + [MMCondition("ControlLocalPositionY", true)] + public float LocalPositionY; + public bool ControlLocalPositionZ; + [MMCondition("ControlLocalPositionZ", true)] + public float LocalPositionZ; + + [Header("Rotation")] + public bool ControlRotationX; + [MMCondition("ControlRotationX", true)] + public float RotationX; + public bool ControlRotationY; + [MMCondition("ControlRotationY", true)] + public float RotationY; + public bool ControlRotationZ; + [MMCondition("ControlRotationZ", true)] + public float RotationZ; + + [Header("Local Rotation")] + public bool ControlLocalRotationX; + [MMCondition("ControlLocalRotationX", true)] + public float LocalRotationX; + public bool ControlLocalRotationY; + [MMCondition("ControlLocalRotationY", true)] + public float LocalRotationY; + public bool ControlLocalRotationZ; + [MMCondition("ControlLocalRotationZ", true)] + public float LocalRotationZ; + + [Header("Scale")] + public bool ControlScaleX; + [MMCondition("ControlScaleX", true)] + public float ScaleX; + public bool ControlScaleY; + [MMCondition("ControlScaleY", true)] + public float ScaleY; + public bool ControlScaleZ; + [MMCondition("ControlScaleZ", true)] + public float ScaleZ; + + protected Vector3 _position; + protected Vector3 _localPosition; + protected Vector3 _rotation; + protected Vector3 _localRotation; + protected Vector3 _scale; + + /// + /// At update, modifies the requested properties + /// + protected virtual void Update() + { + _position = this.transform.position; + _localPosition = this.transform.localPosition; + _rotation = this.transform.eulerAngles; + _localRotation = this.transform.localEulerAngles; + _scale = this.transform.localScale; + + if (ControlPositionX) { _position.x = PositionX; this.transform.position = _position; } + if (ControlPositionY) { _position.y = PositionY; this.transform.position = _position; } + if (ControlPositionZ) { _position.z = PositionZ; this.transform.position = _position; } + + if (ControlLocalPositionX) { _localPosition.x = LocalPositionX; this.transform.localPosition = _localPosition; } + if (ControlLocalPositionY) { _localPosition.y = LocalPositionY; this.transform.localPosition = _localPosition; } + if (ControlLocalPositionZ) { _localPosition.z = LocalPositionZ; this.transform.localPosition = _localPosition; } + + if (ControlRotationX) { _rotation.x = RotationX; this.transform.eulerAngles = _rotation; } + if (ControlRotationY) { _rotation.y = RotationY; this.transform.eulerAngles = _rotation; } + if (ControlRotationZ) { _rotation.z = RotationZ; this.transform.eulerAngles = _rotation; } + + if (ControlLocalRotationX) { _localRotation.x = LocalRotationX; this.transform.localEulerAngles = _localRotation; } + if (ControlLocalRotationY) { _localRotation.y = LocalRotationY; this.transform.localEulerAngles = _localRotation; } + if (ControlLocalRotationZ) { _localRotation.z = LocalRotationZ; this.transform.localEulerAngles = _localRotation; } + + if (ControlScaleX) { _scale.x = ScaleX; this.transform.localScale = _scale; } + if (ControlScaleY) { _scale.y = ScaleY; this.transform.localScale = _scale; } + if (ControlScaleZ) { _scale.z = ScaleZ; this.transform.localScale = _scale; } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMPropertyControllers/TransformController.cs.meta b/Assets/Feel/MMTools/Core/MMPropertyControllers/TransformController.cs.meta new file mode 100644 index 0000000..5dd7ca8 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMPropertyControllers/TransformController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50e0d22617aa66044ba0c746fe1d8054 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio.meta b/Assets/Feel/MMTools/Core/MMRadio.meta new file mode 100644 index 0000000..b245301 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fe69d68c6571c34b92d4dbc60cc0dfd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver.meta b/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver.meta new file mode 100644 index 0000000..ba2f725 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5820c9edef53d494881bfde92df4adb7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver/MMEmmiterReceiver.cs b/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver/MMEmmiterReceiver.cs new file mode 100644 index 0000000..4e1a575 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver/MMEmmiterReceiver.cs @@ -0,0 +1,78 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This component lets you very easily have one property drive the value of another property. + /// To do so, drag the object with the property you want to "read" from into the Emitter Property slot, then select the component the property is on, and finally the property itself. + /// Then drag the object with the property you want to "write" to into the ReceiverProperty slot, and pick the property you want to drive with the emitter's value. + /// + public class MMEmmiterReceiver : MonoBehaviour + { + [MMInformation( + "This component lets you very easily have one property drive the value of another property. " + + "To do so, drag the object with the property you want to 'read' from into the Emitter Property slot, then select the component the property is on, and finally the property itself." + + "Then drag the object with the property you want to 'write' to into the ReceiverProperty slot, and pick the property you want to drive with the emitter's value.", + MoreMountains.Tools.MMInformationAttribute.InformationType.Info, false)] + public bool Emitting = true; + + [Header("Emitter")] + /// the property whose value you want to read and to have drive the ReceiverProperty's value + [Tooltip("the property whose value you want to read and to have drive the ReceiverProperty's value")] + public MMPropertyEmitter EmitterProperty; + + [Header("Receiver")] + /// the property whose value you want to be driven by the EmitterProperty's value + [Tooltip("the property whose value you want to be driven by the EmitterProperty's value")] + public MMPropertyReceiver ReceiverProperty; + + /// a delegate to handle value changes + public delegate void OnValueChangeDelegate(); + /// what to do on value change + public OnValueChangeDelegate OnValueChange; + + protected float _levelLastFrame; + + /// + /// On Awake we initialize both properties + /// + protected virtual void Awake() + { + EmitterProperty.Initialization(EmitterProperty.TargetComponent.gameObject); + ReceiverProperty.Initialization(ReceiverProperty.TargetComponent.gameObject); + } + + /// + /// On Update we emit our value to our receiver + /// + protected virtual void Update() + { + EmitValue(); + } + + /// + /// If needed, reads the current level of the emitter and sets it to the receiver + /// + protected virtual void EmitValue() + { + if (!Emitting) + { + return; + } + + float level = EmitterProperty.GetLevel(); + + if (level != _levelLastFrame) + { + // we trigger a value change event + OnValueChange?.Invoke(); + + ReceiverProperty?.SetLevel(level); + } + + _levelLastFrame = level; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver/MMEmmiterReceiver.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver/MMEmmiterReceiver.cs.meta new file mode 100644 index 0000000..cc3f161 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMEmitterReceiver/MMEmmiterReceiver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8fe23ce5bc9554f46aebd960ab58b9eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty.meta new file mode 100644 index 0000000..5af70d7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 556746a88058ca94bbcbd62da24a1f6f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMProperty.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMProperty.cs new file mode 100644 index 0000000..7bfd249 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMProperty.cs @@ -0,0 +1,94 @@ +using System; +using System.Reflection; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public class MMProperty + { + public enum MemberTypes { Property, Field } + public Component TargetComponent; + public ScriptableObject TargetScriptableObject; + public MemberTypes MemberType; + public PropertyInfo MemberPropertyInfo; + public FieldInfo MemberFieldInfo; + public Type PropertyType; + public string MemberName; + + public MMProperty(Component targetComponent, MemberTypes type, PropertyInfo propertyInfo, FieldInfo fieldInfo, string memberName, ScriptableObject targetScriptable) + { + TargetComponent = targetComponent; + TargetScriptableObject = targetScriptable; + MemberType = type; + MemberPropertyInfo = propertyInfo; + MemberFieldInfo = fieldInfo; + MemberName = memberName; + } + + public static MMProperty FindProperty(string propertyName, Component targetComponent, GameObject source, ScriptableObject scriptable) + { + FieldInfo fieldInfo = null; + PropertyInfo propInfo = null; + MMProperty TargetProperty = null; + + if (scriptable == null) + { + propInfo = targetComponent.GetType().GetProperty(propertyName); + if (propInfo == null) + { + fieldInfo = targetComponent.GetType().GetField(propertyName); + } + } + else + { + fieldInfo = scriptable.GetType().GetField(propertyName); + } + + if (propInfo != null) + { + TargetProperty = new MMProperty(targetComponent, MemberTypes.Property, propInfo, null, propertyName, scriptable); + } + if (fieldInfo != null) + { + TargetProperty = new MMProperty(targetComponent, MemberTypes.Field, null, fieldInfo, propertyName, scriptable); + } + if (propertyName == "") + { + if (source != null) + { + Debug.LogError("The MMProperty on " + source.name + " : you need to pick a property from the Property list"); + } + return null; + } + if ((propInfo == null) && (fieldInfo == null)) + { + if (source != null) + { + Debug.LogError("The MMProperty on " + source.name + " couldn't find any property or field named " + propertyName + " on " + targetComponent.name); + } + return null; + } + + if (scriptable == null) + { + if (TargetProperty.MemberType == MemberTypes.Property) + { + TargetProperty.MemberPropertyInfo = targetComponent.GetType().GetProperty(TargetProperty.MemberName); + TargetProperty.PropertyType = TargetProperty.MemberPropertyInfo.PropertyType; + } + else if (TargetProperty.MemberType == MemberTypes.Field) + { + TargetProperty.MemberFieldInfo = targetComponent.GetType().GetField(TargetProperty.MemberName); + TargetProperty.PropertyType = TargetProperty.MemberFieldInfo.FieldType; + } + } + else + { + TargetProperty.MemberFieldInfo = scriptable.GetType().GetField(TargetProperty.MemberName); + TargetProperty.PropertyType = TargetProperty.MemberFieldInfo.FieldType; + } + + return TargetProperty; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMProperty.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMProperty.cs.meta new file mode 100644 index 0000000..f0b2e26 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMProperty.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e5da26383e93e941be7bdbcd7b5d940 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink.meta new file mode 100644 index 0000000..19861ac --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3a1806a84d8016419f53c93976ff64c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLink.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLink.cs new file mode 100644 index 0000000..619eb3a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLink.cs @@ -0,0 +1,112 @@ +using System; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class, meant to be extended, used to control a MMProperty and get/set its value + /// + public abstract class MMPropertyLink + { + protected bool _getterSetterInitialized = false; + + /// + /// Initialization method + /// + /// + public virtual void Initialization(MMProperty property) + { + CreateGettersAndSetters(property); + } + + /// + /// A method used to cache getter and setter for properties, not fields (sadly) + /// + /// + public virtual void CreateGettersAndSetters(MMProperty property) + { + + } + + /// + /// Gets the "level" of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public virtual float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + return 0f; + } + + /// + /// Sets the property's level, float normalized, caching the operation if possible + /// + /// + /// + /// + public virtual void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + receiver.Level = level; + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public virtual object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return 0f; + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public virtual void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + + } + + /// + /// Returns the value of the selected property + /// + /// + public virtual object GetPropertyValue(MMProperty property) + { + object target = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberType == MMProperty.MemberTypes.Property) + { + return property.MemberPropertyInfo.GetValue(target); + } + else if (property.MemberType == MMProperty.MemberTypes.Field) + { + return property.MemberFieldInfo.GetValue(target); + } + return 0f; + } + + /// + /// Sets the value of the selected property + /// + /// + protected virtual void SetPropertyValue(MMProperty property, object newValue) + { + object target = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberType == MMProperty.MemberTypes.Property) + { + property.MemberPropertyInfo.SetValue(target, newValue); + } + else if (property.MemberType == MMProperty.MemberTypes.Field) + { + property.MemberFieldInfo.SetValue(target, newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLink.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLink.cs.meta new file mode 100644 index 0000000..d4e2c4d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1ca607d01430f9419336e2d59ee639b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkBool.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkBool.cs new file mode 100644 index 0000000..bba354e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkBool.cs @@ -0,0 +1,131 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Bool property setter + /// + public class MMPropertyLinkBool : MMPropertyLink + { + public Func GetBoolDelegate; + public Action SetBoolDelegate; + + protected bool _initialValue; + protected bool _newValue; + + /// + /// On init we grab our initial value + /// + /// + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (bool)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetBoolDelegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetBoolDelegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (bool)newValue); + } + + /// + /// Returns this property link's level between 0 and 1 + /// + /// + /// + /// + /// + public override float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + bool boolValue = GetValueOptimized(property); + float returnValue = (boolValue == true) ? emitter.BoolRemapTrue : emitter.BoolRemapFalse; + emitter.Level = returnValue; + return returnValue; + } + + /// + /// Set the level (more than the link's Threshold > true, less > false) + /// + /// + /// + /// + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + _newValue = (level > receiver.Threshold) ? receiver.BoolRemapOne : receiver.BoolRemapZero; + SetValueOptimized(property, _newValue); + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual bool GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetBoolDelegate() : (bool)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, bool newValue) + { + if (_getterSetterInitialized) + { + SetBoolDelegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkBool.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkBool.cs.meta new file mode 100644 index 0000000..f57ec90 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkBool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d260fd7dcadc0284a8d734805d374223 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkColor.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkColor.cs new file mode 100644 index 0000000..fdf377c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkColor.cs @@ -0,0 +1,138 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Color property setter + /// + public class MMPropertyLinkColor : MMPropertyLink + { + public Func GetColorDelegate; + public Action SetColorDelegate; + + protected Color _initialValue; + protected Color _newValue; + protected Color _color; + + /// + /// On init we grab our initial color + /// + /// + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (Color)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetColorDelegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetColorDelegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (Color)newValue); + } + + /// + /// Returns this property link's level between 0 and 1 + /// + /// + /// + /// + /// + public override float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + _color = _getterSetterInitialized ? GetColorDelegate() : (Color)GetPropertyValue(property); + + return _color.MeanRGB(); + } + + /// + /// Sets the level, lerping between ColorRemapZero and One + /// + /// + /// + /// + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + + _newValue = Color.LerpUnclamped(receiver.ColorRemapZero, receiver.ColorRemapOne, level); + + if (receiver.RelativeValue) + { + _newValue = _initialValue + _newValue; + } + + SetValueOptimized(property, _newValue); + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual Color GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetColorDelegate() : (Color)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, Color newValue) + { + if (_getterSetterInitialized) + { + SetColorDelegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkColor.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkColor.cs.meta new file mode 100644 index 0000000..ab9de45 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 991ae4d843392bc4e9ec4e7d8649d94e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkFloat.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkFloat.cs new file mode 100644 index 0000000..4986184 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkFloat.cs @@ -0,0 +1,141 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Float property setter + /// + public class MMPropertyLinkFloat : MMPropertyLink + { + public Func GetFloatDelegate; + public Action SetFloatDelegate; + + protected float _initialValue; + protected float _newValue; + + /// + /// On init, grabs the initial float value + /// + /// + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (float)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetFloatDelegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetFloatDelegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (float)newValue); + } + + /// + /// Returns this property link's level between 0 and 1 + /// + /// + /// + /// + /// + public override float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + float returnValue = GetValueOptimized(property); + + returnValue = MMMaths.Clamp(returnValue, emitter.FloatRemapMinToZero, emitter.FloatRemapMaxToOne, emitter.ClampMin, emitter.ClampMax); + returnValue = MMMaths.Remap(returnValue, emitter.FloatRemapMinToZero, emitter.FloatRemapMaxToOne, 0f, 1f); + + emitter.Level = returnValue; + return returnValue; + } + + /// + /// Sets the level + /// + /// + /// + /// + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + + _newValue = MMMaths.Remap(level, 0f, 1f, receiver.FloatRemapZero, receiver.FloatRemapOne); + + if (receiver.RelativeValue) + { + _newValue = _initialValue + _newValue; + } + + SetValueOptimized(property, _newValue); + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual float GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetFloatDelegate() : (float)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, float newValue) + { + if (_getterSetterInitialized) + { + SetFloatDelegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkFloat.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkFloat.cs.meta new file mode 100644 index 0000000..0984325 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkFloat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2efa1b899c8751046b9617c7268d54f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkInt.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkInt.cs new file mode 100644 index 0000000..184fdd7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkInt.cs @@ -0,0 +1,142 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Int property setter + /// + public class MMPropertyLinkInt : MMPropertyLink + { + public Func GetIntDelegate; + public Action SetIntDelegate; + + protected int _initialValue; + protected int _newValue; + + /// + /// On init we grab our initial value + /// + /// + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (int)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetIntDelegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetIntDelegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (int)newValue); + } + + /// + /// Returns this property link's level between 0 and 1 + /// + /// + /// + /// + /// + public override float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + float returnValue = GetValueOptimized(property); + + returnValue = MMMaths.Clamp(returnValue, emitter.IntRemapMinToZero, emitter.IntRemapMaxToOne, emitter.ClampMin, emitter.ClampMax); + returnValue = MMMaths.Remap(returnValue, emitter.IntRemapMinToZero, emitter.IntRemapMaxToOne, 0f, 1f); + + emitter.Level = returnValue; + return returnValue; + } + + /// + /// Sets the specified level + /// + /// + /// + /// + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + + _newValue = (int)MMMaths.Remap(level, 0f, 1f, receiver.IntRemapZero, receiver.IntRemapOne); + + if (receiver.RelativeValue) + { + _newValue = _initialValue + _newValue; + } + + SetValueOptimized(property, _newValue); + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual int GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetIntDelegate() : (int)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, int newValue) + { + if (_getterSetterInitialized) + { + SetIntDelegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkInt.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkInt.cs.meta new file mode 100644 index 0000000..d04d706 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkInt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6dcec9f2c4bea14baa2582a1bae072a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkQuaternion.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkQuaternion.cs new file mode 100644 index 0000000..316a6f4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkQuaternion.cs @@ -0,0 +1,169 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Quaternion property setter + /// + public class MMPropertyLinkQuaternion : MMPropertyLink + { + public Func GetQuaternionDelegate; + public Action SetQuaternionDelegate; + + protected Quaternion _initialValue = Quaternion.identity; + protected Quaternion _newValue; + + /// + /// On init we grab our initial initialization + /// + /// + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (Quaternion)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetQuaternionDelegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetQuaternionDelegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (Quaternion)newValue); + } + + /// + /// Returns this property link's level between 0 and 1 + /// + /// + /// + /// + /// + public override float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + float axisValue = 0f; + Quaternion propertyQuaternion = GetValueOptimized(property); + + switch (emitter.Vector3Option) + { + case MMPropertyEmitter.Vector3Options.X: + axisValue = propertyQuaternion.eulerAngles.x; + break; + case MMPropertyEmitter.Vector3Options.Y: + axisValue = propertyQuaternion.eulerAngles.y; + break; + case MMPropertyEmitter.Vector3Options.Z: + axisValue = propertyQuaternion.eulerAngles.z; + break; + } + axisValue = MMMaths.Clamp(axisValue, emitter.QuaternionRemapMinToZero, emitter.QuaternionRemapMaxToOne, emitter.ClampMin, emitter.ClampMax); + + float returnValue = MMMaths.Remap(axisValue, emitter.QuaternionRemapMinToZero, emitter.QuaternionRemapMaxToOne, 0f, 1f); + + emitter.Level = returnValue; + return returnValue; + } + + /// + /// Sets the level, based on remap zero and remap one, angles in degree + /// + /// + /// + /// + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + + _newValue = (receiver.RelativeValue) ? _initialValue : Quaternion.identity; + + if (receiver.ModifyX) + { + float newX = MMMaths.Remap(level, 0f, 1f, receiver.QuaternionRemapZero.x, receiver.QuaternionRemapOne.x); + _newValue = _newValue * Quaternion.AngleAxis(newX, Vector3.right); + } + + if (receiver.ModifyY) + { + float newY = MMMaths.Remap(level, 0f, 1f, receiver.QuaternionRemapZero.y, receiver.QuaternionRemapOne.y); + _newValue = _newValue * Quaternion.AngleAxis(newY, Vector3.up); + } + + if (receiver.ModifyZ) + { + float newZ = MMMaths.Remap(level, 0f, 1f, receiver.QuaternionRemapZero.z, receiver.QuaternionRemapOne.z); + _newValue = _newValue * Quaternion.AngleAxis(newZ, Vector3.forward); + } + + SetValueOptimized(property, _newValue); + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual Quaternion GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetQuaternionDelegate() : (Quaternion)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, Quaternion newValue) + { + if (_getterSetterInitialized) + { + SetQuaternionDelegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkQuaternion.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkQuaternion.cs.meta new file mode 100644 index 0000000..8b8a01c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkQuaternion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1dc025857430aa041b4588942e1f27d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkString.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkString.cs new file mode 100644 index 0000000..313041c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkString.cs @@ -0,0 +1,117 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// String property setter + /// + public class MMPropertyLinkString : MMPropertyLink + { + public Func GetStringDelegate; + public Action SetStringDelegate; + + protected string _initialValue; + protected string _newValue; + + /// + /// On initialization we grab our initial value + /// + /// + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (string)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetStringDelegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetStringDelegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (string)newValue); + } + + /// + /// Sets the level (above threshold : remap one, under threshold : remap zero) + /// + /// + /// + /// + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + _newValue = (level > receiver.Threshold) ? receiver.StringRemapOne : receiver.StringRemapZero; + + SetValueOptimized(property, _newValue); + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual string GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetStringDelegate() : (string)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, string newValue) + { + if (_getterSetterInitialized) + { + SetStringDelegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkString.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkString.cs.meta new file mode 100644 index 0000000..a9f3ff9 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkString.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac8f4e19669836447b70ca22e908a10c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector2.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector2.cs new file mode 100644 index 0000000..33fe8ff --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector2.cs @@ -0,0 +1,163 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Vector2 property setter + /// + public class MMPropertyLinkVector2 : MMPropertyLink + { + public Func GetVector2Delegate; + public Action SetVector2Delegate; + + protected Vector2 _initialValue; + protected Vector2 _newValue; + protected Vector2 _vector2; + + /// + /// On init we grab our vector2 + /// + /// + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (Vector2)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetVector2Delegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetVector2Delegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (Vector2)newValue); + } + + /// + /// Returns this property link's level between 0 and 1 + /// + /// + /// + /// + /// + public override float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + _vector2 = _getterSetterInitialized ? GetVector2Delegate() : (Vector2)GetPropertyValue(property); + + float newValue = 0f; + + switch (emitter.Vector2Option) + { + case MMPropertyEmitter.Vector2Options.X: + newValue = _vector2.x; + break; + case MMPropertyEmitter.Vector2Options.Y: + newValue = _vector2.y; + break; + } + + float returnValue = newValue; + returnValue = MMMaths.Clamp(returnValue, emitter.FloatRemapMinToZero, emitter.FloatRemapMaxToOne, emitter.ClampMin, emitter.ClampMax); + returnValue = MMMaths.Remap(returnValue, emitter.FloatRemapMinToZero, emitter.FloatRemapMaxToOne, 0f, 1f); + + emitter.Level = returnValue; + return returnValue; + } + + /// + /// Sets the specified level + /// + /// + /// + /// + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + + _newValue.x = receiver.ModifyX ? MMMaths.Remap(level, 0f, 1f, receiver.Vector2RemapZero.x, receiver.Vector2RemapOne.x) : 0f; + _newValue.y = receiver.ModifyY ? MMMaths.Remap(level, 0f, 1f, receiver.Vector2RemapZero.y, receiver.Vector2RemapOne.y) : 0f; + + if (receiver.RelativeValue) + { + _newValue = _initialValue + _newValue; + } + + if (_getterSetterInitialized) + { + SetVector2Delegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual Vector2 GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetVector2Delegate() : (Vector2)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, Vector2 newValue) + { + if (_getterSetterInitialized) + { + SetVector2Delegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector2.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector2.cs.meta new file mode 100644 index 0000000..c7ad2f2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c074591fd378046418957bf77882defc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector3.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector3.cs new file mode 100644 index 0000000..966bee5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector3.cs @@ -0,0 +1,159 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Vector3 property setter + /// + public class MMPropertyLinkVector3 : MMPropertyLink + { + public Func GetVector3Delegate; + public Action SetVector3Delegate; + + protected Vector3 _initialValue; + protected Vector3 _newValue; + protected Vector3 _vector3; + + /// + /// On init we grab our initial value + /// + /// + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (Vector3)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetVector3Delegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetVector3Delegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (Vector3)newValue); + } + + /// + /// Returns this property link's level between 0 and 1 + /// + /// + /// + /// + /// + public override float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + _vector3 = GetValueOptimized(property); + + float newValue = 0f; + + switch (emitter.Vector3Option) + { + case MMPropertyEmitter.Vector3Options.X: + newValue = _vector3.x; + break; + case MMPropertyEmitter.Vector3Options.Y: + newValue = _vector3.y; + break; + case MMPropertyEmitter.Vector3Options.Z: + newValue = _vector3.z; + break; + } + + float returnValue = newValue; + returnValue = MMMaths.Clamp(returnValue, emitter.FloatRemapMinToZero, emitter.FloatRemapMaxToOne, emitter.ClampMin, emitter.ClampMax); + returnValue = MMMaths.Remap(returnValue, emitter.FloatRemapMinToZero, emitter.FloatRemapMaxToOne, 0f, 1f); + + emitter.Level = returnValue; + return returnValue; + } + + /// + /// Sets the level + /// + /// + /// + /// + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + + _newValue.x = receiver.ModifyX ? MMMaths.Remap(level, 0f, 1f, receiver.Vector3RemapZero.x, receiver.Vector3RemapOne.x) : 0f; + _newValue.y = receiver.ModifyY ? MMMaths.Remap(level, 0f, 1f, receiver.Vector3RemapZero.y, receiver.Vector3RemapOne.y) : 0f; + _newValue.z = receiver.ModifyZ ? MMMaths.Remap(level, 0f, 1f, receiver.Vector3RemapZero.z, receiver.Vector3RemapOne.z) : 0f; + + if (receiver.RelativeValue) + { + _newValue = _initialValue + _newValue; + } + + SetValueOptimized(property, _newValue); + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual Vector3 GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetVector3Delegate() : (Vector3)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, Vector3 newValue) + { + if (_getterSetterInitialized) + { + SetVector3Delegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector3.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector3.cs.meta new file mode 100644 index 0000000..75da3c4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f28b7b1842189d04f8eb2c7093835fc8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector4.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector4.cs new file mode 100644 index 0000000..213341f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector4.cs @@ -0,0 +1,150 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + public class MMPropertyLinkVector4 : MMPropertyLink + { + public Func GetVector4Delegate; + public Action SetVector4Delegate; + + protected Vector4 _initialValue; + protected Vector4 _newValue; + protected Vector4 _vector4; + + public override void Initialization(MMProperty property) + { + base.Initialization(property); + _initialValue = (Vector4)GetPropertyValue(property); + } + + /// + /// Creates cached getter and setters for properties + /// + /// + public override void CreateGettersAndSetters(MMProperty property) + { + base.CreateGettersAndSetters(property); + if (property.MemberType == MMProperty.MemberTypes.Property) + { + object firstArgument = (property.TargetScriptableObject == null) ? (object)property.TargetComponent : (object)property.TargetScriptableObject; + if (property.MemberPropertyInfo.GetGetMethod() != null) + { + GetVector4Delegate = (Func)Delegate.CreateDelegate(typeof(Func), + firstArgument, + property.MemberPropertyInfo.GetGetMethod()); + } + if (property.MemberPropertyInfo.GetSetMethod() != null) + { + SetVector4Delegate = (Action)Delegate.CreateDelegate(typeof(Action), + firstArgument, + property.MemberPropertyInfo.GetSetMethod()); + } + _getterSetterInitialized = true; + } + } + + /// + /// Gets the raw value of the property, a normalized float value, caching the operation if possible + /// + /// + /// + /// + public override object GetValue(MMPropertyEmitter emitter, MMProperty property) + { + return GetValueOptimized(property); + } + + /// + /// Sets the raw property value, float normalized, caching the operation if possible + /// + /// + /// + /// + public override void SetValue(MMPropertyReceiver receiver, MMProperty property, object newValue) + { + SetValueOptimized(property, (Vector4)newValue); + } + + /// + /// Returns this property link's level between 0 and 1 + /// + /// + /// + /// + /// + public override float GetLevel(MMPropertyEmitter emitter, MMProperty property) + { + _vector4 = GetValueOptimized(property); + + float newValue = 0f; + + switch (emitter.Vector4Option) + { + case MMPropertyEmitter.Vector4Options.X: + newValue = _vector4.x; + break; + case MMPropertyEmitter.Vector4Options.Y: + newValue = _vector4.y; + break; + case MMPropertyEmitter.Vector4Options.Z: + newValue = _vector4.z; + break; + case MMPropertyEmitter.Vector4Options.W: + newValue = _vector4.w; + break; + } + + float returnValue = newValue; + returnValue = MMMaths.Clamp(returnValue, emitter.FloatRemapMinToZero, emitter.FloatRemapMaxToOne, emitter.ClampMin, emitter.ClampMax); + returnValue = MMMaths.Remap(returnValue, emitter.FloatRemapMinToZero, emitter.FloatRemapMaxToOne, 0f, 1f); + + emitter.Level = returnValue; + return returnValue; + } + + public override void SetLevel(MMPropertyReceiver receiver, MMProperty property, float level) + { + base.SetLevel(receiver, property, level); + + _newValue.x = receiver.ModifyX ? MMMaths.Remap(level, 0f, 1f, receiver.Vector4RemapZero.x, receiver.Vector4RemapOne.x) : 0f; + _newValue.y = receiver.ModifyY ? MMMaths.Remap(level, 0f, 1f, receiver.Vector4RemapZero.y, receiver.Vector4RemapOne.y) : 0f; + _newValue.z = receiver.ModifyZ ? MMMaths.Remap(level, 0f, 1f, receiver.Vector4RemapZero.z, receiver.Vector4RemapOne.z) : 0f; + _newValue.w = receiver.ModifyW ? MMMaths.Remap(level, 0f, 1f, receiver.Vector4RemapZero.w, receiver.Vector4RemapOne.w) : 0f; + + if (receiver.RelativeValue) + { + _newValue = _initialValue + _newValue; + } + + SetValueOptimized(property, _newValue); + } + + /// + /// Gets either the cached value or the raw value + /// + /// + /// + protected virtual Vector4 GetValueOptimized(MMProperty property) + { + return _getterSetterInitialized ? GetVector4Delegate() : (Vector4)GetPropertyValue(property); + } + + /// + /// Sets either the cached value or the raw value + /// + /// + /// + protected virtual void SetValueOptimized(MMProperty property, Vector4 newValue) + { + if (_getterSetterInitialized) + { + SetVector4Delegate(_newValue); + } + else + { + SetPropertyValue(property, _newValue); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector4.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector4.cs.meta new file mode 100644 index 0000000..1175ce5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyLink/MMPropertyLinkVector4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96afd1836702fcc4297951d56333a9e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker.meta new file mode 100644 index 0000000..703465c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 467c2b48eb6f08b478d8ed7a178f5b55 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyEmitter.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyEmitter.cs new file mode 100644 index 0000000..fb8d52a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyEmitter.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Reflection; +using System; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// A class used to pick a property, and remap its value for emission/broadcast + /// + [Serializable] + public class MMPropertyEmitter : MMPropertyPicker + { + /// the min value to clamp this property value to + public bool ClampMin = true; + /// the max value to clamp this property value to + public bool ClampMax = true; + + // vectors ---------------------------------------------------------------------------------------------------------------------- + /// the possible axis to look for on a Vector2 + public enum Vector2Options { X, Y } + /// the possible axis to look for on a Vector3 + public enum Vector3Options { X, Y, Z } + /// the possible axis to look for on a Vector4 + public enum Vector4Options { X, Y, Z, W } + /// the selected axis on Vector2 + public Vector2Options Vector2Option; + /// the selected axis on Vector3 + public Vector3Options Vector3Option; + /// the selected axis on Vector4 + public Vector4Options Vector4Option; + + // bool ---------------------------------------------------------------------------------------------------------------------- + /// what to remap a false value to + public float BoolRemapFalse = 0f; + /// what to remap a true value to + public float BoolRemapTrue = 1f; + + // int ---------------------------------------------------------------------------------------------------------------------- + /// what to remap the int min to + public int IntRemapMinToZero = 0; + /// what to remap the int max to + public int IntRemapMaxToOne = 1; + + // float ---------------------------------------------------------------------------------------------------------------------- + /// what to remap the float min to + public float FloatRemapMinToZero = 0f; + /// what to remap the float max to + public float FloatRemapMaxToOne = 1f; + + // quaternion ---------------------------------------------------------------------------------------------------------------------- + /// what to remap the quaternion min to + public float QuaternionRemapMinToZero = 0f; + /// what to remap the quaternion max to + public float QuaternionRemapMaxToOne = 360f; + /// this property's current level + public float Level = 0f; + + /// + /// Gets this property's level + /// + /// + public virtual float GetLevel() + { + return _propertySetter.GetLevel(this, _targetMMProperty); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyEmitter.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyEmitter.cs.meta new file mode 100644 index 0000000..b0739d2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyEmitter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7dc665c3421b61d40bd0c4c6eaab763f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyPicker.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyPicker.cs new file mode 100644 index 0000000..85e4e91 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyPicker.cs @@ -0,0 +1,130 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Reflection; +using System; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// A class used to pick a property on a target object / component / scriptable object + /// + [Serializable] + public class MMPropertyPicker + { + /// the target object to look for a property on + public UnityEngine.Object TargetObject; + /// the component to look for a property on | storage only, not displayed in the inspector + public Component TargetComponent; + /// the component to look for a property on | storage only, not displayed in the inspector + public ScriptableObject TargetScriptableObject; + /// the name of the property to link to + public string TargetPropertyName; + /// whether or not this property has been found + public virtual bool PropertyFound { get; protected set; } + + protected MMProperty _targetMMProperty; + protected bool _initialized = false; + protected MMPropertyLink _propertySetter; + + /// + /// When the property picker gets initialized, it grabs the stored property or field + /// and initializes a MMProperty and MMPropertyLink + /// + /// + public virtual void Initialization(GameObject source) + { + if ((TargetComponent == null) && (TargetScriptableObject == null)) + { + PropertyFound = false; + return; + } + + _targetMMProperty = MMProperty.FindProperty(TargetPropertyName, TargetComponent, source, TargetScriptableObject); + + if (_targetMMProperty == null) + { + PropertyFound = false; + return; + } + + if ((_targetMMProperty.TargetComponent == null) && (_targetMMProperty.TargetScriptableObject == null)) + { + PropertyFound = false; + return; + } + if ((_targetMMProperty.MemberPropertyInfo == null) && (_targetMMProperty.MemberFieldInfo == null)) + { + PropertyFound = false; + return; + } + PropertyFound = true; + _initialized = true; + + // if succession because pattern matching isn't supported before C# 7 + if (_targetMMProperty.PropertyType == typeof(string)) + { + _propertySetter = new MMPropertyLinkString(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + if (_targetMMProperty.PropertyType == typeof(float)) + { + _propertySetter = new MMPropertyLinkFloat(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + if (_targetMMProperty.PropertyType == typeof(Vector2)) + { + _propertySetter = new MMPropertyLinkVector2(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + if (_targetMMProperty.PropertyType == typeof(Vector3)) + { + _propertySetter = new MMPropertyLinkVector3(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + if (_targetMMProperty.PropertyType == typeof(Vector4)) + { + _propertySetter = new MMPropertyLinkVector4(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + if (_targetMMProperty.PropertyType == typeof(Quaternion)) + { + _propertySetter = new MMPropertyLinkQuaternion(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + if (_targetMMProperty.PropertyType == typeof(int)) + { + _propertySetter = new MMPropertyLinkInt(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + if (_targetMMProperty.PropertyType == typeof(bool)) + { + _propertySetter = new MMPropertyLinkBool(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + if (_targetMMProperty.PropertyType == typeof(Color)) + { + _propertySetter = new MMPropertyLinkColor(); + _propertySetter.Initialization(_targetMMProperty); + return; + } + } + + /// + /// Returns the raw value of the target property + /// + /// + public virtual object GetRawValue() + { + return _propertySetter.GetPropertyValue(_targetMMProperty); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyPicker.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyPicker.cs.meta new file mode 100644 index 0000000..3f6016f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyPicker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c6f9c86f5c6aa14490ae9a264c1e884 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyReceiver.cs b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyReceiver.cs new file mode 100644 index 0000000..435241a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyReceiver.cs @@ -0,0 +1,113 @@ +using System.Collections.Generic; +using UnityEngine; +using System.Reflection; +using System; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// A class used to pick a property and modify its value + /// + [Serializable] + public class MMPropertyReceiver : MMPropertyPicker + { + /// values will only be modified if this is true + public bool ShouldModifyValue = true; + + /// whether or not to add to this property's initial value + public bool RelativeValue = true; + + // vectors ---------------------------------------------------------------------------------------------------------------------- + /// whether or not to modify the X value of this vector + public bool ModifyX = true; + /// whether or not to modify the Y value of this vector + public bool ModifyY = true; + /// whether or not to modify the Z value of this vector + public bool ModifyZ = true; + /// whether or not to modify the W value of this vector + public bool ModifyW = true; + + // bool & string ---------------------------------------------------------------------------------------------------------------------- + /// the threshold after which the float level should make this bool false or true + public float Threshold = 0.5f; + + // bool ---------------------------------------------------------------------------------------------------------------------- + /// the state to remap a float's zero to + public bool BoolRemapZero = false; + /// the state to remap a float's one to + public bool BoolRemapOne = true; + + // string ---------------------------------------------------------------------------------------------------------------------- + /// the string to remap a float's zero to + public string StringRemapZero = "Zero"; + /// the string to remap a float's zero to + public string StringRemapOne = "One"; + + // int ---------------------------------------------------------------------------------------------------------------------- + /// the int value to remap the level's zero to + public int IntRemapZero = 0; + /// the int value to remap the level's 1 to + public int IntRemapOne = 1; + + // float ---------------------------------------------------------------------------------------------------------------------- + /// the float value to remap the level's 0 to + public float FloatRemapZero = 0f; + /// the float value to remap the level's 1 to + public float FloatRemapOne = 1f; + + // vector2 ---------------------------------------------------------------------------------------------------------------------- + /// the vector2 value to remap the level's 0 to + public Vector2 Vector2RemapZero = Vector2.zero; + /// the vector2 value to remap the level's 1 to + public Vector2 Vector2RemapOne = Vector2.one; + + // vector3 ---------------------------------------------------------------------------------------------------------------------- + /// the vector3 value to remap the level's 0 to + public Vector3 Vector3RemapZero = Vector3.zero; + /// the vector3 value to remap the level's 1 to + public Vector3 Vector3RemapOne = Vector3.one; + + // vector4 ---------------------------------------------------------------------------------------------------------------------- + /// the vector4 value to remap the level's 0 to + public Vector4 Vector4RemapZero = Vector4.zero; + /// the vector4 value to remap the level's 1 to + public Vector4 Vector4RemapOne = Vector4.one; + + // quaternion ---------------------------------------------------------------------------------------------------------------------- + /// the quaternion value to remap the level's 0 to + public Vector3 QuaternionRemapZero = Vector3.zero; + /// the quaternion value to remap the level's 1 to + public Vector3 QuaternionRemapOne = new Vector3(180f, 180f, 180f); + + // color ---------------------------------------------------------------------------------------------------------------------- + /// the color value to remap the level's 0 to + [ColorUsage(true, true)] + public Color ColorRemapZero = Color.white; + /// the color value to remap the level's 1 to + [ColorUsage(true, true)] + public Color ColorRemapOne = Color.black; + + /// the current level + public float Level = 0f; + + /// + /// Sets the level + /// + /// + public virtual void SetLevel(float newLevel) + { + if (!PropertyFound) + { + return; + } + + if (!ShouldModifyValue) + { + return; + } + + _propertySetter.SetLevel(this, _targetMMProperty, newLevel); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyReceiver.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyReceiver.cs.meta new file mode 100644 index 0000000..854d483 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMProperty/MMPropertyPicker/MMPropertyReceiver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 003f6640c70f0c74085aeba7df48fe55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioBroadcaster.cs b/Assets/Feel/MMTools/Core/MMRadio/MMRadioBroadcaster.cs new file mode 100644 index 0000000..95c0033 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioBroadcaster.cs @@ -0,0 +1,105 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class used to broadcast a level to MMRadioReceiver(s), either directly or via events + /// It can read from pretty much any value on any class + /// + [MMRequiresConstantRepaint] + public class MMRadioBroadcaster : MMMonoBehaviour + { + [Header("Source")] + /// the emitter to read the level on + public MMPropertyEmitter Emitter; + + [Header("Destinations")] + /// a list of receivers hardwired to this broadcaster, that will receive the level at runtime + public MMRadioReceiver[] Receivers; + + [Header("Channel Broadcasting")] + /// whether or not this broadcaster should use events to broadcast its level on the specified channel + public bool BroadcastOnChannel = true; + /// the channel to broadcast on, has to match the Channel on the target receivers + [MMCondition("BroadcastOnChannel", true)] + public int Channel = 0; + /// whether to broadcast all the time, or only when the value changes (lighter on performance, but won't "lock" the value) + [MMCondition("BroadcastOnChannel", true)] + public bool OnlyBroadcastOnValueChange = true; + + /// a delegate to handle value changes + public delegate void OnValueChangeDelegate(); + /// what to do on value change + public OnValueChangeDelegate OnValueChange; + + protected float _levelLastFrame = 0f; + + /// + /// On Awake we initialize our emitter + /// + protected virtual void Awake() + { + Emitter.Initialization(this.gameObject); + } + + /// + /// On Update we process our broadcast + /// + protected virtual void Update() + { + ProcessBroadcast(); + } + + /// + /// Broadcasts the value if needed + /// + protected virtual void ProcessBroadcast() + { + if (Emitter == null) + { + return; + } + + float level = Emitter.GetLevel(); + + if (level != _levelLastFrame) + { + // we trigger a value change event + OnValueChange?.Invoke(); + + // for each of our receivers, we set the level manually + foreach (MMRadioReceiver receiver in Receivers) + { + receiver?.SetLevel(level); + } + + // we broadcast an event + if (BroadcastOnChannel) + { + MMRadioLevelEvent.Trigger(Channel, level); + } + } + + _levelLastFrame = level; + } + } + + /// + /// A struct event used to broadcast the level to channels + /// + public struct MMRadioLevelEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(int channel, float level); + static public void Trigger(int channel, float level) + { + OnEvent?.Invoke(channel, level); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioBroadcaster.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMRadioBroadcaster.cs.meta new file mode 100644 index 0000000..f2790ac --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioBroadcaster.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f655bab42c018140aaf68474d594e6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioReceiver.cs b/Assets/Feel/MMTools/Core/MMRadio/MMRadioReceiver.cs new file mode 100644 index 0000000..aeaa0b5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioReceiver.cs @@ -0,0 +1,115 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class used to receive level values from a MMRadioBroadcaster, and apply it to (almost) any value on any object + /// + [MMRequiresConstantRepaint] + public class MMRadioReceiver : MMMonoBehaviour + { + [Header("Target")] + /// the receiver to write the level to + public MMPropertyReceiver Receiver; + + [Header("Channel")] + /// whether or not this receiver should listen to the channel + public bool CanListen = true; + /// the Channel to listen to (has to match the one on the MMRadioBroadcaster you're listening to) + [MMCondition("CanListen", true)] + public int Channel = 0; + + [Header("Modifiers")] + /// whether or not to randomize the received level, this will generate at awake a random level multiplier, to apply to the level + public bool RandomizeLevel = false; + /// if random, the min bound of the random multiplier + [MMCondition("RandomizeLevel", true)] + public float MinRandomLevelMultiplier = 0f; + /// if random, the max bound of the random multiplier + [MMCondition("RandomizeLevel", true)] + public float MaxRandomLevelMultiplier = 1f; + + protected bool _listeningToEvents = false; + protected float _randomLevelMultiplier = 1f; + protected float _lastLevel; + + /// + /// On Awake, starts listening and generates a random level multiplier if needed + /// + protected virtual void Awake() + { + Receiver.Initialization(this.gameObject); + + if (!_listeningToEvents && CanListen) + { + StartListening(); + } + + GenerateRandomLevelMultiplier(); + } + + public virtual void GenerateRandomLevelMultiplier() + { + if (RandomizeLevel) + { + _randomLevelMultiplier = Random.Range(MinRandomLevelMultiplier, MaxRandomLevelMultiplier); + } + } + + /// + /// Sets the level on the receiver + /// + /// + public virtual void SetLevel(float newLevel) + { + Receiver.SetLevel(newLevel); + } + + /// + /// When getting a radio level event, we make sure it's the right channel, and apply it if needed + /// + /// + /// + protected virtual void OnRadioLevelEvent(int channel, float level) + { + if (channel != Channel) + { + return; + } + if (RandomizeLevel) + { + level *= _randomLevelMultiplier; + } + SetLevel(level); + } + + /// + /// Stops listening to events on destroy + /// + protected virtual void OnDestroy() + { + _listeningToEvents = false; + StopListening(); + } + + /// + /// Starts listening for events + /// + public virtual void StartListening() + { + _listeningToEvents = true; + MMRadioLevelEvent.Register(OnRadioLevelEvent); + } + + /// + /// Stops listening for events + /// + public virtual void StopListening() + { + _listeningToEvents = false; + MMRadioLevelEvent.Unregister(OnRadioLevelEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioReceiver.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMRadioReceiver.cs.meta new file mode 100644 index 0000000..500357c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioReceiver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83dcb4ea8c2204a43adf98a01a3bc0d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal.meta b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal.meta new file mode 100644 index 0000000..6ae4063 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2d66563365af5a409fb9fbd56a215d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignal.cs b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignal.cs new file mode 100644 index 0000000..750c92f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignal.cs @@ -0,0 +1,276 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + [System.Serializable] + public class MMRadioSignalOnValueChange : UnityEvent { } + + /// + /// A class used to define a signal, meant to be broadcasted by a MMRadioBroadcaster + /// It'll output a Level value to broadcast, using one time, persistent or driven modes + /// Meant to be extended + /// + public abstract class MMRadioSignal : MonoBehaviour + { + /// the possible modes a radio signal can operate on + /// - one time : plays its signal once, goes back to sleep + /// - outputs a signal constantly while not sleeping + /// - driven : lets you drive the level value from another script + public enum SignalModes { OneTime, Persistent, Driven } + /// whether this signal operates on scaled or unscaled time + public enum TimeScales { Unscaled, Scaled } + /// the level, to read from a MMRadioBroadcaster + public virtual float Level { get { return CurrentLevel; } } + /// the time, unscaled or scaled + public virtual float TimescaleTime { get { return (TimeScale == TimeScales.Scaled) ? Time.time : Time.unscaledTime; } } + /// the delta time, unscaled or not + public virtual float TimescaleDeltaTime { get { return (TimeScale == TimeScales.Scaled) ? Time.deltaTime : Time.unscaledDeltaTime; } } + + [Header("Signal")] + /// the selected signal mode + public SignalModes SignalMode = SignalModes.Persistent; + /// the selected time scale + public TimeScales TimeScale = TimeScales.Unscaled; + /// the duration of the shake, in seconds + public float Duration = 2f; + /// a global multiplier to apply to the end result of the combination + public float GlobalMultiplier = 1f; + /// the current level, not to be read from a broadcaster (it's best to use the property than the field, fields generate garbage) + [MMReadOnly] + public float CurrentLevel = 0f; + + [Header("Play Settings")] + /// whether or not this shaker is shaking right now + [MMReadOnly] + public bool Playing = false; + /// the driver time, that can be controlled from another class if you're in Driven mode + [Range(0f, 1f)] + public float DriverTime; + /// if this is true this shaker will play on awake + public bool PlayOnStart = true; + /// an event to trigger on value change + public MMRadioSignalOnValueChange OnValueChange; + + /// a test button to start shaking + [Header(("Debug"))] + [MMInspectorButton("StartShaking")] + public bool StartShakingButton; + + protected float _signalTime = 0f; + protected float _shakeStartedTimestamp; + protected float _levelLastFrame; + + /// + /// On Awake we grab our volume and profile + /// + protected virtual void Awake() + { + Initialization(); + if (PlayOnStart) + { + StartShaking(); + } + this.enabled = PlayOnStart; + } + + /// + /// Override this method to initialize your shaker + /// + protected virtual void Initialization() + { + CurrentLevel = 0f; + } + + /// + /// Starts shaking the values + /// + public virtual void StartShaking() + { + if (Playing) + { + return; + } + else + { + this.enabled = true; + _shakeStartedTimestamp = TimescaleTime; + Playing = true; + ShakeStarts(); + } + } + + /// + /// Describes what happens when a shake starts + /// + protected virtual void ShakeStarts() + { + + } + + /// + /// On Update, we shake our values if needed, or reset if our shake has ended + /// + protected virtual void Update() + { + ProcessUpdate(); + + if (SignalMode == SignalModes.Driven) + { + ProcessDrivenMode(); + } + else if (SignalMode == SignalModes.Persistent) + { + _signalTime += TimescaleDeltaTime; + if (_signalTime > Duration) + { + _signalTime = 0f; + } + + DriverTime = MMMaths.Remap(_signalTime, 0f, Duration, 0f, 1f); + } + else if (SignalMode == SignalModes.OneTime) + { + + } + + if (Playing || (SignalMode == SignalModes.Driven)) + { + Shake(); + } + + if ((SignalMode == SignalModes.OneTime) && Playing && (TimescaleTime - _shakeStartedTimestamp > Duration)) + { + ShakeComplete(); + } + + if (_levelLastFrame != Level) + { + ApplyLevel(Level); + } + + _levelLastFrame = Level; + } + + public virtual void ApplyLevel(float level) + { + if (OnValueChange != null) + { + OnValueChange.Invoke(level); + } + } + + /// + /// A method to override to describe the behaviour in Driven mode + /// + protected virtual void ProcessDrivenMode() + { + + } + + /// + /// A method to override to describe what should happen at update + /// + protected virtual void ProcessUpdate() + { + + } + + /// + /// Override this method to implement shake over time + /// + protected virtual void Shake() + { + + } + + public virtual float GraphValue(float time) + { + return 0f; + } + + /// + /// Describes what happens when the shake is complete + /// + protected virtual void ShakeComplete() + { + Playing = false; + this.enabled = false; + } + + /// + /// On enable we start shaking if needed + /// + protected virtual void OnEnable() + { + StartShaking(); + } + + /// + /// On destroy we stop listening for events + /// + protected virtual void OnDestroy() + { + + } + + /// + /// On disable we complete our shake if it was in progress + /// + protected virtual void OnDisable() + { + if (Playing) + { + ShakeComplete(); + } + } + + /// + /// Starts this shaker + /// + public virtual void Play() + { + this.enabled = true; + } + + /// + /// Starts this shaker + /// + public virtual void Stop() + { + ShakeComplete(); + } + + /// + /// Applies a bias to a time value + /// + /// + /// + /// + public virtual float ApplyBias(float t, float bias) + { + if (bias == 0.5f) + { + return t; + } + + bias = MMMaths.Remap(bias, 0f, 1f, 1f, 0f); + + float a = bias * 2.0f - 1.0f; + + if (a < 0) + { + t = 1 - Mathf.Pow(1.0f - t, Mathf.Max(1 + a, .01f)); + } + else + { + t = Mathf.Pow(t, Mathf.Max(1 - a, .01f)); + } + + return t; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignal.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignal.cs.meta new file mode 100644 index 0000000..850a310 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a81b3d6b0f5d3d14a8395a2a9611e7a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalAudioAnalyzer.cs b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalAudioAnalyzer.cs new file mode 100644 index 0000000..d0d705f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalAudioAnalyzer.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class used to expose a beat level from a target MMAudioAnalyzer, to be broadcasted by a MMAudioBroadcaster + /// + public class MMRadioSignalAudioAnalyzer : MMRadioSignal + { + [Header("Audio Analyzer")] + /// the MMAudioAnalyzer to read the value on + public MMAudioAnalyzer TargetAnalyzer; + /// the ID of the beat to listen to + public int BeatID; + + /// + /// On Shake, we output our beat value + /// + protected override void Shake() + { + base.Shake(); + CurrentLevel = TargetAnalyzer.Beats[BeatID].CurrentValue * GlobalMultiplier; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalAudioAnalyzer.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalAudioAnalyzer.cs.meta new file mode 100644 index 0000000..7c8af68 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalAudioAnalyzer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d566c4f1cefdec64fbce3a07b23976cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalGenerator.cs b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalGenerator.cs new file mode 100644 index 0000000..768797f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalGenerator.cs @@ -0,0 +1,165 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + /// + /// A class used to generate signals, normalized values between 0 and 1 + /// You can then use these values from a MMRadioBroadcaster, or simply evaluate its value to use wherever you want, + /// like a supercharged animation curve. In that case, simply disable the component, and read from it using its Evaluate method + /// + public class MMRadioSignalGenerator : MMRadioSignal + { + /// whether or not to display an animated preview + public bool AnimatedPreview = false; + /// whether this signal should play in back & forth (mirroring the curve around a tipping point) + public bool BackAndForth = false; + /// the tipping point at which to mirror the curve (between 0 and 1) + [MMCondition("BackAndForth", true)] + public float BackAndForthMirrorPoint = 0.5f; + /// the list of signals to assemble to create the final signal + public MMRadioSignalGeneratorItemList SignalList; + /// how to clamp the result value + [MMVector("Min", "Max")] + public Vector2 Clamps = new Vector2(0f, 1f); + /// the amplitude of the signal + [Range(0f, 1f)] + public float Bias = 0.5f; + + /// + /// On reset, we initialize our list + /// + void Reset() + { + SignalList = new MMRadioSignalGeneratorItemList(){ + new MMRadioSignalGeneratorItem() + }; + } + + /// + /// Returns the y value of the generated signal curve, at the x time value specified in parameters + /// + /// + /// + public virtual float Evaluate(float time) + { + float level = 1f; + if (SignalList.Count <= 0) + { + return level; + } + + time = ApplyBias(time, Bias); + + for (int i = 0; i < SignalList.Count; i++) + { + if (SignalList[i].Active) + { + float newLevel = MMSignal.GetValueNormalized(time, + SignalList[i].SignalType, SignalList[i].Phase, + SignalList[i].Amplitude, SignalList[i].Frequency, SignalList[i].Offset, + SignalList[i].Invert, SignalList[i].Curve, SignalList[i].TweenCurve, + true, Clamps.x, Clamps.y, BackAndForth, BackAndForthMirrorPoint); + + level = (SignalList[i].Mode == MMRadioSignalGeneratorItem.GeneratorItemModes.Multiply) ? level * newLevel : level + newLevel; + + + } + } + CurrentLevel *= GlobalMultiplier; + + CurrentLevel = Mathf.Clamp(CurrentLevel, Clamps.x, Clamps.y); + return level; + } + + /// + /// On Shake, we shake our level if needed + /// + protected override void Shake() + { + base.Shake(); + + if (!Playing) + { + return; + } + + if (SignalMode == SignalModes.OneTime) + { + float elapsedTime = TimescaleTime - _shakeStartedTimestamp; + CurrentLevel = Evaluate(MMMaths.Remap(elapsedTime, 0f, Duration, 0f, 1f)); + } + else + { + CurrentLevel = Evaluate(DriverTime); + } + } + + /// + /// Once the shake is complete, we apply our final level + /// + protected override void ShakeComplete() + { + base.ShakeComplete(); + CurrentLevel = Evaluate(1f); + } + + /// + /// returns a custom value to display in the graph in inspector + /// + /// + /// + public override float GraphValue(float time) + { + time = ApplyBias(time, Bias); + return Evaluate(time); + } + } + + /// + /// A class used to store generator items and their properties + /// + [System.Serializable] + public class MMRadioSignalGeneratorItem + { + /// whether this individual signal should be multiplied or added to the rest + public enum GeneratorItemModes { Multiply, Additive } + + /// whether to take this signal into account in the generator or not + public bool Active = true; + /// the type of this signal + public MMSignal.SignalType SignalType = MMSignal.SignalType.Sine; + /// if the type is animation curve, the curve to consider + [MMEnumCondition("SignalType", (int)MMSignal.SignalType.AnimationCurve)] + public AnimationCurve Curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1)); + /// if the type is MMTween, the tween to consider + [MMEnumCondition("SignalType", (int)MMSignal.SignalType.MMTween)] + public MMTween.MMTweenCurve TweenCurve = MMTween.MMTweenCurve.EaseInOutQuartic; + /// the selected mode (multiply or additive) + public GeneratorItemModes Mode = GeneratorItemModes.Multiply; + /// the phase of the signal + [Range(-1f, 1f)] + public float Phase = 0f; + /// the frequency of the signal + [Range(0f, 10f)] + public float Frequency = 5f; + /// the amplitude of the signal + [Range(0f, 1f)] + public float Amplitude = 1f; + /// the offset of the signal + [Range(-1f, 1f)] + public float Offset = 0f; + /// whether or not to vertically invert the signal + public bool Invert = false; + } + + /// + /// A reorderable list type used to store generator items + /// + [System.Serializable] + public class MMRadioSignalGeneratorItemList : MMReorderableArray + { + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalGenerator.cs.meta b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalGenerator.cs.meta new file mode 100644 index 0000000..70348b6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMRadio/MMRadioSignal/MMRadioSignalGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65443987bd9048f408777b8d8f4c1994 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMReorderableList.meta b/Assets/Feel/MMTools/Core/MMReorderableList.meta new file mode 100644 index 0000000..272e6ca --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMReorderableList.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ddb9b9f4166c8194a89b7a37624992b5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMReorderableList/Attributes.meta b/Assets/Feel/MMTools/Core/MMReorderableList/Attributes.meta new file mode 100644 index 0000000..628f1fb --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMReorderableList/Attributes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b01a1a9e8f5c586419eba255ce2c3ec6 +folderAsset: yes +timeCreated: 1436466573 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMReorderableList/Attributes/ReorderableAttribute.cs b/Assets/Feel/MMTools/Core/MMReorderableList/Attributes/ReorderableAttribute.cs new file mode 100644 index 0000000..bb892d6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMReorderableList/Attributes/ReorderableAttribute.cs @@ -0,0 +1,45 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + public class MMReorderableAttributeAttribute : PropertyAttribute { + + public bool add; + public bool remove; + public bool draggable; + public bool singleLine; + public string elementNameProperty; + public string elementNameOverride; + public string elementIconPath; + + public MMReorderableAttributeAttribute() + : this(null) { + } + + public MMReorderableAttributeAttribute(string elementNameProperty) + : this(true, true, true, elementNameProperty, null, null) { + } + + public MMReorderableAttributeAttribute(string elementNameProperty, string elementIconPath) + : this(true, true, true, elementNameProperty, null, elementIconPath) { + } + + public MMReorderableAttributeAttribute(string elementNameProperty, string elementNameOverride, string elementIconPath) + : this(true, true, true, elementNameProperty, elementNameOverride, elementIconPath) { + } + + public MMReorderableAttributeAttribute(bool add, bool remove, bool draggable, string elementNameProperty = null, string elementIconPath = null) + : this(add, remove, draggable, elementNameProperty, null, elementIconPath) { + } + + public MMReorderableAttributeAttribute(bool add, bool remove, bool draggable, string elementNameProperty = null, string elementNameOverride = null, string elementIconPath = null) { + + this.add = add; + this.remove = remove; + this.draggable = draggable; + this.elementNameProperty = elementNameProperty; + this.elementNameOverride = elementNameOverride; + this.elementIconPath = elementIconPath; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMReorderableList/Attributes/ReorderableAttribute.cs.meta b/Assets/Feel/MMTools/Core/MMReorderableList/Attributes/ReorderableAttribute.cs.meta new file mode 100644 index 0000000..8bfe3f0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMReorderableList/Attributes/ReorderableAttribute.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: af18777bcf6ae2c47a02c3ff8adabb0e +timeCreated: 1434664597 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMReorderableList/ReorderableArray.cs b/Assets/Feel/MMTools/Core/MMReorderableList/ReorderableArray.cs new file mode 100644 index 0000000..6af0e6a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMReorderableList/ReorderableArray.cs @@ -0,0 +1,110 @@ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + [Serializable] + public abstract class MMReorderableArray : ICloneable, IList, ICollection, IEnumerable { + + [SerializeField] + private List array = new List(); + + public MMReorderableArray() + : this(0) { + } + + public MMReorderableArray(int length) { + + array = new List(length); + } + + public T this[int index] { + + get { return array[index]; } + set { array[index] = value; } + } + + public int Length { + + get { return array.Count; } + } + + public bool IsReadOnly { + + get { return false; } + } + + public int Count { + + get { return array.Count; } + } + + public object Clone() { + + return new List(array); + } + + public void CopyFrom(IEnumerable value) { + + array.Clear(); + array.AddRange(value); + } + + public bool Contains(T value) { + + return array.Contains(value); + } + + public int IndexOf(T value) { + + return array.IndexOf(value); + } + + public void Insert(int index, T item) { + + array.Insert(index, item); + } + + public void RemoveAt(int index) { + + array.RemoveAt(index); + } + + public void Add(T item) { + + array.Add(item); + } + + public void Clear() { + + array.Clear(); + } + + public void CopyTo(T[] array, int arrayIndex) { + + this.array.CopyTo(array, arrayIndex); + } + + public bool Remove(T item) { + + return array.Remove(item); + } + + public T[] ToArray() { + + return array.ToArray(); + } + + public IEnumerator GetEnumerator() { + + return array.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() { + + return array.GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMReorderableList/ReorderableArray.cs.meta b/Assets/Feel/MMTools/Core/MMReorderableList/ReorderableArray.cs.meta new file mode 100644 index 0000000..6b16b8d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMReorderableList/ReorderableArray.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5132fa5788b8a7347b370fa5d071c913 +timeCreated: 1436466574 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMReorderableList/reorderable-list-licence.txt b/Assets/Feel/MMTools/Core/MMReorderableList/reorderable-list-licence.txt new file mode 100644 index 0000000..3422860 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMReorderableList/reorderable-list-licence.txt @@ -0,0 +1,23 @@ +via https://github.com/cfoulston/Unity-Reorderable-List + +MIT License + +Copyright (c) 2017 Chris Foulston + +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. \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMReorderableList/reorderable-list-licence.txt.meta b/Assets/Feel/MMTools/Core/MMReorderableList/reorderable-list-licence.txt.meta new file mode 100644 index 0000000..7b2ef2a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMReorderableList/reorderable-list-licence.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5202bb69e6dc1a44cacdac58197df245 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad.meta b/Assets/Feel/MMTools/Core/MMSaveLoad.meta new file mode 100644 index 0000000..ed6a74d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 79ffe05f70177854bb2bc948327922a7 +folderAsset: yes +timeCreated: 1482071371 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/IMMPersistent.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/IMMPersistent.cs new file mode 100644 index 0000000..cb5f24b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/IMMPersistent.cs @@ -0,0 +1,32 @@ +namespace MoreMountains.Tools +{ + /// + /// An interface classes that want to be saved by the MMPersistencyManager need to implement + /// + public interface IMMPersistent + { + /// + /// Needs to return a unique Guid used to identify this object + /// + /// + string GetGuid(); + + /// + /// Returns a savable string containing the object's data + /// + /// + string OnSave(); + + /// + /// Loads the object's data from the passed string and applies it to its properties + /// + /// + void OnLoad(string data); + + /// + /// Whether or not this object should be saved + /// + /// + bool ShouldBeSaved(); + } +} diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/IMMPersistent.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/IMMPersistent.cs.meta new file mode 100644 index 0000000..d191a72 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/IMMPersistent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35d5d4d43a5ca4147b2488524fbe815e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceDataStructures.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceDataStructures.cs new file mode 100644 index 0000000..b21e098 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceDataStructures.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.Serialization; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A serializable class used to store scene data, the key is a string (the scene name), the value is a MMPersistencySceneData + /// + [Serializable] + public class DictionaryStringSceneData : MMSerializableDictionary + { + public DictionaryStringSceneData() : base() { } + protected DictionaryStringSceneData(SerializationInfo info, StreamingContext context) : base(info, context) { } + } + + /// + /// A serializable class used to store object data, the key is a string (the object name), the value is a string (the object data) + /// + [Serializable] + public class DictionaryStringString : MMSerializableDictionary + { + public DictionaryStringString() : base() { } + protected DictionaryStringString(SerializationInfo info, StreamingContext context) : base(info, context) { } + } + + /// + /// A serializable class used to store all the data for a persistence manager, a collection of scene datas + /// + [Serializable] + public class MMPersistenceManagerData + { + public string PersistenceID; + public string SaveDate; + public DictionaryStringSceneData SceneDatas; + } + + /// + /// A serializable class used to store all the data for a scene, a collection of object datas + /// + [Serializable] + public class MMPersistenceSceneData + { + public DictionaryStringString ObjectDatas; + } + + /// + /// The various types of persistence events that can be triggered by the MMPersistencyManager + /// + public enum MMPersistenceEventType { DataSavedToMemory, DataLoadedFromMemory, DataSavedFromMemoryToFile, DataLoadedFromFileToMemory } + + /// + /// A data structure used to store persistence event data. + /// To use : + /// MMPersistencyEvent.Trigger(MMPersistencyEventType.DataLoadedFromFileToMemory, "yourPersistencyID"); + /// + public struct MMPersistenceEvent + { + public MMPersistenceEventType PersistenceEventType; + public string PersistenceID; + + public MMPersistenceEvent(MMPersistenceEventType eventType, string persistenceID) + { + PersistenceEventType = eventType; + PersistenceID = persistenceID; + } + + static MMPersistenceEvent e; + public static void Trigger(MMPersistenceEventType eventType, string persistencyID) + { + e.PersistenceEventType = eventType; + e.PersistenceID = persistencyID; + MMEventManager.TriggerEvent(e); + } + } +} diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceDataStructures.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceDataStructures.cs.meta new file mode 100644 index 0000000..ce9194a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceDataStructures.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c89376b60a9ff4b4d922b8d35778d386 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceManager.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceManager.cs new file mode 100644 index 0000000..3fc7b90 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceManager.cs @@ -0,0 +1,331 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Serialization; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to a scene and it'll let you save and load the state of objects that implement the IMMPersistent interface + /// You can create your own classes that implement this interface, or use the MMPersistent class that comes with this package + /// It will save their transform data (position, rotation, scale) and their active state + /// Triggering save and load is done via events, and the manager also emits events every time data is loaded or saved + /// + public class MMPersistenceManager : MMPersistentSingleton, MMEventListener + { + [Header("Persistence")] + /// A persistence ID used to identify the data associated to this manager. + /// Usually you'll want to leave this to its default value. + [Tooltip("A persistence ID used to identify the data associated to this manager. Usually you'll want to leave this to its default value.")] + public string PersistenceID = "MMPersistency"; + + [Header("Events")] + /// whether or not this manager should listen for save events. If you set this to false, you'll have to call SaveToMemory or SaveFromMemoryToFile manually + [Tooltip("whether or not this manager should listen for save events. If you set this to false, you'll have to call SaveToMemory or SaveFromMemoryToFile manually")] + public bool ListenForSaveEvents = true; + /// whether or not this manager should listen for load events. If you set this to false, you'll have to call LoadFromMemory or LoadFromFileToMemory manually + [Tooltip("whether or not this manager should listen for load events. If you set this to false, you'll have to call LoadFromMemory or LoadFromFileToMemory manually")] + public bool ListenForLoadEvents = true; + /// whether or not this manager should listen for save to memory events. If you set this to false, you'll have to call SaveToMemory manually + [Tooltip("whether or not this manager should listen for save to memory events. If you set this to false, you'll have to call SaveToMemory manually")] + public bool ListenForSaveToMemoryEvents = true; + /// whether or not this manager should listen for load from memory events. If you set this to false, you'll have to call LoadFromMemory manually + [Tooltip("whether or not this manager should listen for load from memory events. If you set this to false, you'll have to call LoadFromMemory manually")] + public bool ListenForLoadFromMemoryEvents = true; + /// whether or not this manager should listen for save to file events. If you set this to false, you'll have to call SaveFromMemoryToFile manually + [Tooltip("whether or not this manager should listen for save to file events. If you set this to false, you'll have to call SaveFromMemoryToFile manually")] + public bool ListenForSaveToFileEvents = true; + /// whether or not this manager should listen for load from file events. If you set this to false, you'll have to call LoadFromFileToMemory manually + [Tooltip("whether or not this manager should listen for load from file events. If you set this to false, you'll have to call LoadFromFileToMemory manually")] + public bool ListenForLoadFromFileEvents = true; + /// whether or not this manager should save data to file on save events + [Tooltip("whether or not this manager should save data to file on save events")] + public bool SaveToFileOnSaveEvents = true; + /// whether or not this manager should load data from file on load events + [Tooltip("whether or not this manager should load data from file on load events")] + public bool LoadFromFileOnLoadEvents = true; + + /// the debug buttons below are only meant to be used at runtime + [Header("Debug Buttons (Only at Runtime)")] + [MMInspectorButton("SaveToMemory")] + public bool SaveToMemoryButton; + [MMInspectorButton("LoadFromMemory")] + public bool LoadFromMemoryButton; + [MMInspectorButton("SaveFromMemoryToFile")] + public bool SaveToFileButton; + [MMInspectorButton("LoadFromFileToMemory")] + public bool LoadFromFileButton; + [MMInspectorButton("DeletePersistenceFile")] + public bool DeletePersistenceFileButton; + + public DictionaryStringSceneData SceneDatas; + + public static string _resourceItemPath = "Persistence/"; + public static string _saveFolderName = "MMTools/"; + public static string _saveFileExtension = ".persistence"; + + protected string _currentSceneName; + + #region INITIALIZATION + /// + /// Statics initialization to support enter play modes + /// + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + protected static void InitializeStatics() + { + _instance = null; + } + + /// + /// On Awake we initialize our dictionary + /// + protected override void Awake() + { + base.Awake(); + SceneDatas = new DictionaryStringSceneData(); + } + + #endregion + + #region SAVE_AND_LOAD + + /// + /// Saves data from objects that need saving to memory + /// + public virtual void SaveToMemory() + { + ComputeCurrentSceneName(); + + SceneDatas.Remove(_currentSceneName); + + MMPersistenceSceneData sceneData = new MMPersistenceSceneData(); + sceneData.ObjectDatas = new DictionaryStringString(); + + IMMPersistent[] persistents = FindAllPersistentObjects(); + + foreach (IMMPersistent persistent in persistents) + { + if (persistent.ShouldBeSaved()) + { + sceneData.ObjectDatas.Add(persistent.GetGuid(), persistent.OnSave()); + } + } + + SceneDatas.Add(_currentSceneName, sceneData); + + MMPersistenceEvent.Trigger(MMPersistenceEventType.DataSavedToMemory, PersistenceID); + } + + /// + /// Loads data from memory and applies it to all objects that need it + /// + public virtual void LoadFromMemory() + { + ComputeCurrentSceneName(); + + if (!SceneDatas.TryGetValue(_currentSceneName, out MMPersistenceSceneData sceneData)) + { + return; + } + + if (sceneData.ObjectDatas == null) + { + return; + } + + IMMPersistent[] persistents = FindAllPersistentObjects(); + foreach (IMMPersistent persistent in persistents) + { + if (sceneData.ObjectDatas.TryGetValue(persistent.GetGuid(), out string data)) + { + persistent.OnLoad(sceneData.ObjectDatas[persistent.GetGuid()]); + } + } + + MMPersistenceEvent.Trigger(MMPersistenceEventType.DataLoadedFromMemory, PersistenceID); + } + + /// + /// Saves data from memory to a file + /// + public virtual void SaveFromMemoryToFile() + { + MMPersistenceManagerData saveData = new MMPersistenceManagerData(); + saveData.PersistenceID = PersistenceID; + saveData.SaveDate = DateTime.Now.ToString(); + saveData.SceneDatas = SceneDatas; + MMSaveLoadManager.Save(saveData, DetermineSaveName(), _saveFolderName); + + MMPersistenceEvent.Trigger(MMPersistenceEventType.DataSavedFromMemoryToFile, PersistenceID); + } + + /// + /// Loads data from file and stores it in memory + /// + public virtual void LoadFromFileToMemory() + { + MMPersistenceManagerData saveData = (MMPersistenceManagerData)MMSaveLoadManager.Load(typeof(MMPersistenceManagerData), DetermineSaveName(), _saveFolderName); + if ((saveData != null) && (saveData.SceneDatas != null)) + { + SceneDatas = new DictionaryStringSceneData(); + SceneDatas = saveData.SceneDatas; + } + MMPersistenceEvent.Trigger(MMPersistenceEventType.DataLoadedFromFileToMemory, PersistenceID); + } + + /// + /// On Save, we save to memory and to file if needed + /// + public virtual void Save() + { + SaveToMemory(); + if (SaveToFileOnSaveEvents) + { + SaveFromMemoryToFile(); + } + } + + /// + /// On Load, we load from memory and from file if needed + /// + public virtual void Load() + { + if (LoadFromFileOnLoadEvents) + { + LoadFromFileToMemory(); + } + LoadFromMemory(); + } + + #endregion + + #region RESET + + /// + /// Deletes all persistence data for the specified scene + /// + /// + public virtual void DeletePersistencyMemoryForScene(string sceneName) + { + if (!SceneDatas.TryGetValue(_currentSceneName, out MMPersistenceSceneData sceneData)) + { + return; + } + SceneDatas.Remove(sceneName); + } + + /// + /// Deletes persistence data from memory and on file for this persistence manager + /// + public virtual void ResetPersistence() + { + DeletePersistenceMemory(); + DeletePersistenceFile(); + } + + /// + /// Deletes all persistence data stored in this persistence manager's memory + /// + public virtual void DeletePersistenceMemory() + { + SceneDatas = new DictionaryStringSceneData(); + } + + /// + /// Deletes the save file for this persistence manager + /// + public virtual void DeletePersistenceFile() + { + MMSaveLoadManager.DeleteSave(DetermineSaveName(), _saveFolderName); + Debug.LogFormat("Persistence save file deleted"); + } + + #endregion + + #region HELPERS + + /// + /// Finds all objects in the scene that implement IMMPersistent and may need saving + /// + /// + protected virtual IMMPersistent[] FindAllPersistentObjects() + { + return FindObjectsOfType(true).OfType().ToArray(); + } + + /// + /// Grabs the current scene's name and stores it + /// + protected virtual void ComputeCurrentSceneName() + { + _currentSceneName = SceneManager.GetActiveScene().name; + } + + /// + /// Determines the name of the file to write to store persistence data + /// + /// + protected virtual string DetermineSaveName() + { + return gameObject.name + "_" + PersistenceID + _saveFileExtension; + } + + #endregion + + #region EVENTS + + /// + /// When we get a MMEvent, we filter on its name and invoke the appropriate methods if needed + /// + /// + public virtual void OnMMEvent(MMGameEvent gameEvent) + { + if ((gameEvent.EventName == "Save") && ListenForSaveEvents) + { + Save(); + } + if ((gameEvent.EventName == "Load") && ListenForLoadEvents) + { + Load(); + } + if ((gameEvent.EventName == "SaveToMemory") && ListenForSaveToMemoryEvents) + { + SaveToMemory(); + } + if ((gameEvent.EventName == "LoadFromMemory") && ListenForLoadFromMemoryEvents) + { + LoadFromMemory(); + } + if ((gameEvent.EventName == "SaveToFile") && ListenForSaveToFileEvents) + { + SaveFromMemoryToFile(); + } + if ((gameEvent.EventName == "LoadFromFile") && ListenForLoadFromFileEvents) + { + LoadFromFileToMemory(); + } + } + + /// + /// On enable, we start listening for MMGameEvents + /// + protected virtual void OnEnable() + { + this.MMEventStartListening(); + } + + /// + /// On enable, we stop listening for MMGameEvents + /// + protected virtual void OnDisable() + { + this.MMEventStopListening(); + } + + #endregion + } +} + diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceManager.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceManager.cs.meta new file mode 100644 index 0000000..1795bb4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistenceManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f66839a3914de3d4db7c5682fc89f2fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistent.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistent.cs new file mode 100644 index 0000000..af61f56 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistent.cs @@ -0,0 +1,155 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.Serialization; + +namespace MoreMountains.Tools +{ + /// + /// A persistent class that can save the essential parts of an object : + /// its transform data (position, rotation, scale) and its active state + /// This inherits from MMPersistentBase and implements the IMMPersistent interface + /// It's a good example of how to implement the interface's OnSave and OnLoad methods + /// + public class MMPersistent : MMPersistentBase + { + + [Header("Properties")] + /// whether or not to save this object's position + [Tooltip("whether or not to save this object's position")] + public bool SavePosition = true; + /// whether or not to save this object's rotation + [Tooltip("whether or not to save this object's rotation")] + public bool SaveLocalRotation = true; + /// whether or not to save this object's scale + [Tooltip("whether or not to save this object's scale")] + public bool SaveLocalScale = true; + /// whether or not to save this object's active state + [Tooltip("whether or not to save this object's active state")] + public bool SaveActiveState = true; + /// whether or not to save this object's components' enabled states + [Tooltip("whether or not to save this object's components' enabled states")] + public bool SaveEnabledStates = false; + + /// + /// A struct used to store and serialize the data we want to save + /// + [Serializable] + public struct Data + { + public Vector3 Position; + public Quaternion LocalRotation; + public Vector3 LocalScale; + public bool ActiveState; + public List ComponentEnabledStates; + } + + [Serializable] + public struct ComponentData + { + public string Name; + public bool EnabledState; + } + + /// + /// On Save, we turn the object's transform data and active state to a Json string and return it to the MMPersistencyManager + /// + /// + public override string OnSave() + { + List saveEnabledStates = null; + if (SaveEnabledStates) + { + saveEnabledStates = GetCurrentComponents(); + } + return JsonUtility.ToJson(new Data { Position = this.transform.position, + LocalRotation = this.transform.localRotation, + LocalScale = this.transform.localScale, + ActiveState = this.gameObject.activeSelf, + ComponentEnabledStates = saveEnabledStates + }); + } + + /// + /// On load, we read the saved json data and apply it to our object's properties + /// + /// + public override void OnLoad(string data) + { + if (SavePosition) + { + this.transform.position = JsonUtility.FromJson(data).Position; + } + + if (SaveLocalRotation) + { + this.transform.localRotation = JsonUtility.FromJson(data).LocalRotation; + } + + if (SaveLocalScale) + { + this.transform.localScale = JsonUtility.FromJson(data).LocalScale; + } + + if (SaveActiveState) + { + this.gameObject.SetActive(JsonUtility.FromJson(data).ActiveState); + } + + if (SaveEnabledStates) + { + List loadedList = JsonUtility.FromJson(data).ComponentEnabledStates; + + Behaviour[] components = gameObject.GetComponents(); + Renderer[] renderers = gameObject.GetComponents(); + + if (loadedList.Count != components.Length + renderers.Length) + { + return; + } + + int total = 0; + for (int i = 0; i < components.Length; i++) + { + if (loadedList[i].Name == components[i].name) + { + components[i].enabled = loadedList[i].EnabledState; + } + + total++; + } + + for (int j = 0; j < renderers.Length; j++) + { + if (loadedList[total+j].Name == renderers[j].name) + { + renderers[j].enabled = loadedList[total+j].EnabledState; + } + } + } + } + + /// + /// Grabs all components on this object + /// + protected virtual List GetCurrentComponents() + { + List currentComponents = new List(); + Behaviour[] components = gameObject.GetComponents(); + Renderer[] renderers = gameObject.GetComponents(); + foreach (Behaviour component in components) + { + currentComponents.Add(new ComponentData { Name = component.name, EnabledState = component.enabled }); + } + foreach (Renderer renderer in renderers) + { + currentComponents.Add(new ComponentData { Name = renderer.name, EnabledState = renderer.enabled }); + } + + return currentComponents; + } + } +} + diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistent.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistent.cs.meta new file mode 100644 index 0000000..de2c638 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0397bb261ecd924ba0668927c40ba3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistentBase.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistentBase.cs new file mode 100644 index 0000000..11b25d1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistentBase.cs @@ -0,0 +1,141 @@ +using System; +using System.Linq; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A base class implementing the IMMPersistent interface, designed to be extended + /// This mostly takes care of the GUID generation and validation + /// + [AddComponentMenu("")] + public class MMPersistentBase : MonoBehaviour, IMMPersistent + { + [Header("Save")] + /// whether or not this object should be saved + [Tooltip("whether or not this object should be saved")] + public bool SaveActive = true; + + [Header("ID")] + /// an optional suffix to add to the GUID, to make it more readable + [Tooltip("an optional suffix to add to the GUID, to make it more readable")] + public string UniqueIDSuffix; + /// the object's unique ID + [Tooltip("the object's unique ID")] + [SerializeField] + [MMReadOnly] + protected string _guid; + + /// a debug button used to force a new GUI generation + [MMInspectorButton("GenerateGuid")] + public bool GenerateGuidButton; + + /// + /// On validate, we make sure the object gets a valid GUID + /// + protected virtual void OnValidate() + { + ValidateGuid(); + } + + /// + /// Returns the object's GUID + /// + /// + public virtual string GetGuid() => _guid; + + /// + /// Lets you set the object's GUID + /// + /// + public virtual void SetGuid(string newGUID) => _guid = newGUID; + + /// + /// On save, does nothing, meant to be extended + /// + /// + public virtual string OnSave() + { + return string.Empty; + } + + /// + /// On load, does nothing, meant to be extended + /// + /// + public virtual void OnLoad(string data) + { + } + + /// + /// Lets the persistence manager know whether or not the object should be saved + /// + /// + public virtual bool ShouldBeSaved() + { + return SaveActive; + } + + /// + /// Generates a unique ID for the object, using the scene name, the object name, and a GUID + /// + /// + public virtual string GenerateGuid() + { + string newGuid = Guid.NewGuid().ToString(); + + string guid = + this.gameObject.scene.name + + "-" + + this.gameObject.name + + "-" + + newGuid; + + if (!string.IsNullOrEmpty(UniqueIDSuffix)) + { + guid += "-" + UniqueIDSuffix; + } + + this.SetGuid(guid); + + return guid; + } + + /// + /// Checks if the object's ID is unique or not + /// + /// + /// + public virtual bool GuidIsUnique(string guid) + { + return Resources.FindObjectsOfTypeAll().Count(x => x.GetGuid() == guid) == 1; + } + + /// + /// Validates the object's GUID, and generates a new one if needed, until a unique one is found + /// + public virtual void ValidateGuid() + { + if (!this.gameObject.scene.IsValid()) + { + _guid = string.Empty; + return; + } + + int maxCount = 1000; + int i = 0; + + while ( (string.IsNullOrEmpty(_guid) || !GuidIsUnique(_guid) ) && (i < maxCount) ) + { + GenerateGuid(); + i++; + } + + if (i == maxCount) + { + Debug.LogWarning(this.gameObject.name + " couldn't generate a unique GUID after " + maxCount + " tries, you should probably change its UniqueIDSuffix"); + } + } + } +} + diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistentBase.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistentBase.cs.meta new file mode 100644 index 0000000..616d1b0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMPersistentBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 161799775c19ed44495de8edf8935aa2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManager.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManager.cs new file mode 100644 index 0000000..e6260c8 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManager.cs @@ -0,0 +1,199 @@ +using UnityEngine; +using System.Collections; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Allows the save and load of objects in a specific folder and file. + /// + /// How to use (at a minimum) : + /// + /// Save : MMSaveLoadManager.Save(TestObject, FileName+SaveFileExtension, FolderName); + /// + /// Load : TestObject = (YourObjectClass)MMSaveLoadManager.Load(typeof(YourObjectClass), FileName + SaveFileExtension, FolderName); + /// + /// Delete save : MMSaveLoadManager.DeleteSave(FileName+SaveFileExtension, FolderName); + /// + /// Delete save folder : MMSaveLoadManager.DeleteSaveFolder(FolderName); + /// + /// You can also specify what IMMSaveLoadManagerMethod the system should use. By default it's binary but you can also pick binary encrypted, json, or json encrypted + /// You'll find examples of how to set each of these in the MMSaveLoadTester class + /// + /// + public static class MMSaveLoadManager + { + /// the method to use when saving and loading files (has to be the same at both times of course) + public static IMMSaveLoadManagerMethod SaveLoadMethod = new MMSaveLoadManagerMethodBinary(); + /// the default top level folder the system will use to save the file + private const string _baseFolderName = "/MMData/"; + /// the name of the save folder if none is provided + private const string _defaultFolderName = "MMSaveLoadManager"; + + /// + /// Determines the save path to use when loading and saving a file based on a folder name. + /// + /// The save path. + /// Folder name. + static string DetermineSavePath(string folderName = _defaultFolderName) + { + string savePath; + // depending on the device we're on, we assemble the path + if (Application.platform == RuntimePlatform.IPhonePlayer) + { + savePath = Application.persistentDataPath + _baseFolderName; + } + else + { + savePath = Application.persistentDataPath + _baseFolderName; + } + #if UNITY_EDITOR + savePath = Application.dataPath + _baseFolderName; + #endif + + savePath = savePath + folderName + "/"; + return savePath; + } + + /// + /// Determines the name of the file to save + /// + /// The save file name. + /// File name. + static string DetermineSaveFileName(string fileName) + { + return fileName; + } + + /// + /// Save the specified saveObject, fileName and foldername into a file on disk. + /// + /// Save object. + /// File name. + /// Foldername. + public static void Save(object saveObject, string fileName, string foldername = _defaultFolderName) + { + string savePath = DetermineSavePath(foldername); + string saveFileName = DetermineSaveFileName(fileName); + // if the directory doesn't already exist, we create it + if (!Directory.Exists(savePath)) + { + Directory.CreateDirectory(savePath); + } + // we serialize and write our object into a file on disk + + FileStream saveFile = File.Create(savePath + saveFileName); + + SaveLoadMethod.Save(saveObject, saveFile); + saveFile.Close(); + } + + /// + /// Load the specified file based on a file name into a specified folder + /// + /// File name. + /// Foldername. + public static object Load(System.Type objectType, string fileName, string foldername = _defaultFolderName) + { + string savePath = DetermineSavePath(foldername); + string saveFileName = savePath + DetermineSaveFileName(fileName); + + object returnObject; + + // if the MMSaves directory or the save file doesn't exist, there's nothing to load, we do nothing and exit + if (!Directory.Exists(savePath) || !File.Exists(saveFileName)) + { + return null; + } + + FileStream saveFile = File.Open(saveFileName, FileMode.Open, FileAccess.Read, FileShare.Read); + returnObject = SaveLoadMethod.Load(objectType, saveFile); + saveFile.Close(); + + return returnObject; + } + + /// + /// Removes a save from disk + /// + /// File name. + /// Folder name. + public static void DeleteSave(string fileName, string folderName = _defaultFolderName) + { + string savePath = DetermineSavePath(folderName); + string saveFileName = DetermineSaveFileName(fileName); + if (File.Exists(savePath + saveFileName)) + { + File.Delete(savePath + saveFileName); + } + if (File.Exists(savePath + saveFileName + ".meta")) + { + File.Delete(savePath + saveFileName + ".meta"); + } + } + + /// + /// Deletes the whole save folder + /// + /// + public static void DeleteSaveFolder(string folderName = _defaultFolderName) + { + string savePath = DetermineSavePath(folderName); + if (Directory.Exists(savePath)) + { + DeleteDirectory(savePath); + } + } + + /// + /// Deletes all save files saved by this MMSaveLoadManager + /// + public static void DeleteAllSaveFiles() + { + string savePath = DetermineSavePath(""); + + savePath = savePath.Substring(0, savePath.Length - 1); + if (savePath.EndsWith("/")) + { + savePath = savePath.Substring(0, savePath.Length - 1); + } + + if (Directory.Exists(savePath)) + { + DeleteDirectory(savePath); + } + } + + /// + /// Deletes the specified directory + /// + /// + public static void DeleteDirectory(string target_dir) + { + string[] files = Directory.GetFiles(target_dir); + string[] dirs = Directory.GetDirectories(target_dir); + + foreach (string file in files) + { + File.SetAttributes(file, FileAttributes.Normal); + File.Delete(file); + } + + foreach (string dir in dirs) + { + DeleteDirectory(dir); + } + + Directory.Delete(target_dir, false); + + if (File.Exists(target_dir + ".meta")) + { + File.Delete(target_dir + ".meta"); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManager.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManager.cs.meta new file mode 100644 index 0000000..5c1bc70 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aa3d0794b4f8e4b40b6a3dde5b794c0b +timeCreated: 1478535356 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethod.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethod.cs new file mode 100644 index 0000000..4e9684b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethod.cs @@ -0,0 +1,61 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This component, on Awake or on demand, will force a SaveLoadMethod on the MMSaveLoadManager, changing the way it saves data to file. + /// This will impact all classes that use the MMSaveLoadManager (unless they change that method before saving or loading). + /// If you change the method, your previously existing data files won't be compatible, you'll need to delete them and start with new ones. + /// + public class MMSaveLoadManagerMethod : MonoBehaviour + { + [Header("Save and load method")] + [MMInformation("This component, on Awake or on demand, will force a SaveLoadMethod on the MMSaveLoadManager, changing the way it saves data to file. " + + "This will impact all classes that use the MMSaveLoadManager (unless they change that method before saving or loading)." + + "If you change the method, your previously existing data files won't be compatible, you'll need to delete them and start with new ones.", + MMInformationAttribute.InformationType.Info,false)] + + /// the method to use to save to file + [Tooltip("the method to use to save to file")] + public MMSaveLoadManagerMethods SaveLoadMethod = MMSaveLoadManagerMethods.Binary; + /// the key to use to encrypt the file (if using an encryption method) + [Tooltip("the key to use to encrypt the file (if using an encryption method)")] + public string EncryptionKey = "ThisIsTheKey"; + + protected IMMSaveLoadManagerMethod _saveLoadManagerMethod; + + /// + /// On Awake, we set the MMSaveLoadManager's method to the chosen one + /// + protected virtual void Awake() + { + SetSaveLoadMethod(); + } + + /// + /// Creates a new MMSaveLoadManagerMethod and passes it to the MMSaveLoadManager + /// + public virtual void SetSaveLoadMethod() + { + switch(SaveLoadMethod) + { + case MMSaveLoadManagerMethods.Binary: + _saveLoadManagerMethod = new MMSaveLoadManagerMethodBinary(); + break; + case MMSaveLoadManagerMethods.BinaryEncrypted: + _saveLoadManagerMethod = new MMSaveLoadManagerMethodBinaryEncrypted(); + ((MMSaveLoadManagerEncrypter)_saveLoadManagerMethod).Key = EncryptionKey; + break; + case MMSaveLoadManagerMethods.Json: + _saveLoadManagerMethod = new MMSaveLoadManagerMethodJson(); + break; + case MMSaveLoadManagerMethods.JsonEncrypted: + _saveLoadManagerMethod = new MMSaveLoadManagerMethodJsonEncrypted(); + ((MMSaveLoadManagerEncrypter)_saveLoadManagerMethod).Key = EncryptionKey; + break; + } + MMSaveLoadManager.SaveLoadMethod = _saveLoadManagerMethod; + } + } +} + diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethod.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethod.cs.meta new file mode 100644 index 0000000..4ab75c5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethod.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b4d071b416837d40b9bab019b738769 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinary.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinary.cs new file mode 100644 index 0000000..7677156 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinary.cs @@ -0,0 +1,43 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.IO; +using System.Text; +using System.Security.Cryptography; +using System.Runtime.Serialization.Formatters.Binary; + +namespace MoreMountains.Tools +{ + /// + /// This save load method saves and loads files as binary files + /// + public class MMSaveLoadManagerMethodBinary : IMMSaveLoadManagerMethod + { + /// + /// Saves the specified object to disk at the specified location after serializing it + /// + /// + /// + public void Save(object objectToSave, FileStream saveFile) + { + BinaryFormatter formatter = new BinaryFormatter(); + formatter.Serialize(saveFile, objectToSave); + saveFile.Close(); + } + + /// + /// Loads the specified file from disk and deserializes it + /// + /// + /// + /// + public object Load(System.Type objectType, FileStream saveFile) + { + object savedObject; + BinaryFormatter formatter = new BinaryFormatter(); + savedObject = formatter.Deserialize(saveFile); + saveFile.Close(); + return savedObject; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinary.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinary.cs.meta new file mode 100644 index 0000000..9043a11 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 339f02b3d924b984db779a1af1a59be2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinaryEncrypted.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinaryEncrypted.cs new file mode 100644 index 0000000..05387fd --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinaryEncrypted.cs @@ -0,0 +1,60 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.IO; +using System.Text; +using System.Security.Cryptography; +using System.Runtime.Serialization.Formatters.Binary; + +namespace MoreMountains.Tools +{ + /// + /// This save load method saves and loads files as encrypted binary files + /// + public class MMSaveLoadManagerMethodBinaryEncrypted : MMSaveLoadManagerEncrypter, IMMSaveLoadManagerMethod + { + /// + /// Saves the specified object to disk at the specified location after encrypting it + /// + /// + /// + public void Save(object objectToSave, FileStream saveFile) + { + BinaryFormatter formatter = new BinaryFormatter(); + MemoryStream memoryStream = new MemoryStream(); + formatter.Serialize(memoryStream, objectToSave); + memoryStream.Position = 0; + Encrypt(memoryStream, saveFile, Key); + saveFile.Flush(); + memoryStream.Close(); + saveFile.Close(); + } + + /// + /// Loads the specified file from disk, decrypts it, and deserializes it + /// + /// + /// + /// + public object Load(System.Type objectType, FileStream saveFile) + { + object savedObject; + BinaryFormatter formatter = new BinaryFormatter(); + MemoryStream memoryStream = new MemoryStream(); + try + { + Decrypt(saveFile, memoryStream, Key); + } + catch (CryptographicException ce) + { + Debug.LogError("[MMSaveLoadManager] Encryption key error: " + ce.Message); + return null; + } + memoryStream.Position = 0; + savedObject = formatter.Deserialize(memoryStream); + memoryStream.Close(); + saveFile.Close(); + return savedObject; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinaryEncrypted.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinaryEncrypted.cs.meta new file mode 100644 index 0000000..ad6d37a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodBinaryEncrypted.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12d7216a3e967954ca8945932aa92fd4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJson.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJson.cs new file mode 100644 index 0000000..52826ac --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJson.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.IO; +using System.Text; +using System.Security.Cryptography; + +namespace MoreMountains.Tools +{ + public class MMSaveLoadManagerMethodJson : IMMSaveLoadManagerMethod + { + /// + /// Saves the specified object at the specified location after converting it to json + /// + /// + /// + public void Save(object objectToSave, FileStream saveFile) + { + string json = JsonUtility.ToJson(objectToSave); + // if you prefer using NewtonSoft's JSON lib uncomment the line below and commment the line above + //string json = Newtonsoft.Json.JsonConvert.SerializeObject(objectToSave); + StreamWriter streamWriter = new StreamWriter(saveFile); + streamWriter.Write(json); + streamWriter.Close(); + saveFile.Close(); + } + + /// + /// Loads the specified file and decodes it + /// + /// + /// + /// + public object Load(System.Type objectType, FileStream saveFile) + { + object savedObject; // = System.Activator.CreateInstance(objectType); + StreamReader streamReader = new StreamReader(saveFile, Encoding.UTF8); + string json = streamReader.ReadToEnd(); + savedObject = JsonUtility.FromJson(json, objectType); + // if you prefer using NewtonSoft's JSON lib uncomment the line below and commment the line above + //savedObject = Newtonsoft.Json.JsonConvert.DeserializeObject(json,objectType); + streamReader.Close(); + saveFile.Close(); + return savedObject; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJson.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJson.cs.meta new file mode 100644 index 0000000..50864db --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJson.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 148ba46d50e5e7346a7ac051cf1b6617 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJsonEncrypted.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJsonEncrypted.cs new file mode 100644 index 0000000..9d3a841 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJsonEncrypted.cs @@ -0,0 +1,64 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.IO; +using System.Text; +using System.Security.Cryptography; + +namespace MoreMountains.Tools +{ + public class MMSaveLoadManagerMethodJsonEncrypted : MMSaveLoadManagerEncrypter, IMMSaveLoadManagerMethod + { + /// + /// Saves the specified object at the specified location to disk, converts it to json and encrypts it + /// + /// + /// + public void Save(object objectToSave, FileStream saveFile) + { + string json = JsonUtility.ToJson(objectToSave); + // if you prefer using NewtonSoft's JSON lib uncomment the line below and commment the line above + //string json = Newtonsoft.Json.JsonConvert.SerializeObject(objectToSave); + using (MemoryStream memoryStream = new MemoryStream()) + using (StreamWriter streamWriter = new StreamWriter(memoryStream)) + { + streamWriter.Write(json); + streamWriter.Flush(); + memoryStream.Position = 0; + Encrypt(memoryStream, saveFile, Key); + } + saveFile.Close(); + } + + /// + /// Loads the specified file, decrypts it and decodes it + /// + /// + /// + /// + public object Load(System.Type objectType, FileStream saveFile) + { + object savedObject = null; + using (MemoryStream memoryStream = new MemoryStream()) + using (StreamReader streamReader = new StreamReader(memoryStream)) + { + try + { + Decrypt(saveFile, memoryStream, Key); + } + catch (CryptographicException ce) + { + Debug.LogError("[MMSaveLoadManager] Encryption key error: " + ce.Message); + return null; + } + memoryStream.Position = 0; + savedObject = JsonUtility.FromJson(streamReader.ReadToEnd(), objectType); + // if you prefer using NewtonSoft's JSON lib uncomment the line below and commment the line above + //savedObject = Newtonsoft.Json.JsonConvert.DeserializeObject(sr.ReadToEnd(), objectType); + } + saveFile.Close(); + return savedObject; + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJsonEncrypted.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJsonEncrypted.cs.meta new file mode 100644 index 0000000..a447fc3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethodJsonEncrypted.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b50f078655cbd34fb69ee48182dbf37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethods.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethods.cs new file mode 100644 index 0000000..ec68d9d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethods.cs @@ -0,0 +1,72 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.IO; +using System.Text; +using System.Security.Cryptography; + +namespace MoreMountains.Tools +{ + /// + /// An interface to implement save and load using different methods (binary, json, etc) + /// + public interface IMMSaveLoadManagerMethod + { + void Save(object objectToSave, FileStream saveFile); + object Load(System.Type objectType, FileStream saveFile); + } + + /// + /// The possible methods to save and load files to and from disk available in the MMSaveLoadManager + /// + public enum MMSaveLoadManagerMethods { Json, JsonEncrypted, Binary, BinaryEncrypted }; + + /// + /// This class implements methods to encrypt and decrypt streams + /// + public abstract class MMSaveLoadManagerEncrypter + { + /// + /// The Key to use to save and load the file + /// + public virtual string Key { get; set; } = "yourDefaultKey"; + + protected string _saltText = "SaltTextGoesHere"; + + /// + /// Encrypts the specified input stream into the specified output stream using the key passed in parameters + /// + /// + /// + /// + protected virtual void Encrypt(Stream inputStream, Stream outputStream, string sKey) + { + RijndaelManaged algorithm = new RijndaelManaged(); + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sKey, Encoding.ASCII.GetBytes(_saltText)); + + algorithm.Key = key.GetBytes(algorithm.KeySize / 8); + algorithm.IV = key.GetBytes(algorithm.BlockSize / 8); + + CryptoStream cryptostream = new CryptoStream(inputStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read); + cryptostream.CopyTo(outputStream); + } + + /// + /// Decrypts the input stream into the output stream using the key passed in parameters + /// + /// + /// + /// + protected virtual void Decrypt(Stream inputStream, Stream outputStream, string sKey) + { + RijndaelManaged algorithm = new RijndaelManaged(); + Rfc2898DeriveBytes key = new Rfc2898DeriveBytes(sKey, Encoding.ASCII.GetBytes(_saltText)); + + algorithm.Key = key.GetBytes(algorithm.KeySize / 8); + algorithm.IV = key.GetBytes(algorithm.BlockSize / 8); + + CryptoStream cryptostream = new CryptoStream(inputStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read); + cryptostream.CopyTo(outputStream); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethods.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethods.cs.meta new file mode 100644 index 0000000..4c9d99c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadManagerMethods.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b681190ef64d3e2438805b489a9ac9a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTestScene.unity b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTestScene.unity new file mode 100644 index 0000000..4414b7f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTestScene.unity @@ -0,0 +1,1348 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &582431576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 582431577} + - component: {fileID: 582431579} + - component: {fileID: 582431578} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &582431577 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582431576} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1875827585} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &582431578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582431576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &582431579 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582431576} + m_CullTransparentMesh: 0 +--- !u!1 &675246360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 675246361} + - component: {fileID: 675246364} + - component: {fileID: 675246363} + - component: {fileID: 675246362} + m_Layer: 5 + m_Name: LoadButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &675246361 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675246360} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1335599839} + m_Father: {fileID: 1875827585} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 1, y: -106.1} + m_SizeDelta: {x: 160, y: 50.78357} + m_Pivot: {x: 1, y: 0.5} +--- !u!114 &675246362 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675246360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 675246363} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1055532170} + m_MethodName: Load + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &675246363 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675246360} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.61922556, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &675246364 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675246360} + m_CullTransparentMesh: 0 +--- !u!1 &846111447 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 846111450} + - component: {fileID: 846111449} + - component: {fileID: 846111448} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &846111448 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 846111447} + m_Enabled: 1 +--- !u!20 &846111449 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 846111447} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.3773585, g: 0.3773585, b: 0.3773585, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &846111450 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 846111447} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &854257766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 854257767} + - component: {fileID: 854257769} + - component: {fileID: 854257768} + m_Layer: 5 + m_Name: Instructions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &854257767 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 854257766} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1496128156} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 102} + m_SizeDelta: {x: 1430, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &854257768 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 854257766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Type some text in the white field, then press the SAVE + button to save it. + + Exit the app, then come back and press the LOAD + button to load the text you''ve saved.' +--- !u!222 &854257769 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 854257766} + m_CullTransparentMesh: 0 +--- !u!1 &966061311 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 966061313} + - component: {fileID: 966061312} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &966061312 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 966061311} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &966061313 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 966061311} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1051720746 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1051720747} + - component: {fileID: 1051720749} + - component: {fileID: 1051720748} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1051720747 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1051720746} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1309991790} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1051720748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1051720746} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 010b82bc895978049b69aaf4b855d7ab, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SAVE +--- !u!222 &1051720749 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1051720746} + m_CullTransparentMesh: 0 +--- !u!1 &1055532169 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1055532171} + - component: {fileID: 1055532170} + m_Layer: 0 + m_Name: MMSaveLoadTester + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1055532170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1055532169} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 58f9c048a89d0d5448bf5972cdc13fad, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetInputField: {fileID: 1875827586} + SaveLoadMethod: 2 + FileName: TestObject + FolderName: MMTest/ + SaveFileExtension: .testObject + EncryptionKey: ThisIsTheKey + TestSaveButton: 0 + TestLoadButton: 0 + TestResetButton: 0 +--- !u!4 &1055532171 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1055532169} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.9702115, y: 2.0283132, z: -0.86458683} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1309991789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1309991790} + - component: {fileID: 1309991793} + - component: {fileID: 1309991792} + - component: {fileID: 1309991791} + m_Layer: 5 + m_Name: SaveButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1309991790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1309991789} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1051720747} + m_Father: {fileID: 1875827585} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -170, y: -106.09999} + m_SizeDelta: {x: 160, y: 50.78357} + m_Pivot: {x: 1, y: 0.5} +--- !u!114 &1309991791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1309991789} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1309991792} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1055532170} + m_MethodName: Save + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1309991792 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1309991789} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4009434, g: 0.89005464, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1309991793 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1309991789} + m_CullTransparentMesh: 0 +--- !u!1 &1335599838 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1335599839} + - component: {fileID: 1335599841} + - component: {fileID: 1335599840} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1335599839 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335599838} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 675246361} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1335599840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335599838} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 010b82bc895978049b69aaf4b855d7ab, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: LOAD +--- !u!222 &1335599841 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335599838} + m_CullTransparentMesh: 0 +--- !u!1 &1367921065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1367921066} + - component: {fileID: 1367921068} + - component: {fileID: 1367921067} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1367921066 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1367921065} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1875827585} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1367921067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1367921065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Type some text... +--- !u!222 &1367921068 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1367921065} + m_CullTransparentMesh: 0 +--- !u!1 &1496128152 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1496128156} + - component: {fileID: 1496128155} + - component: {fileID: 1496128154} + - component: {fileID: 1496128153} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1496128153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1496128152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1496128154 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1496128152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1496128155 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1496128152} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1496128156 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1496128152} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 854257767} + - {fileID: 2055886075} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1875827584 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1875827585} + - component: {fileID: 1875827588} + - component: {fileID: 1875827587} + - component: {fileID: 1875827586} + m_Layer: 5 + m_Name: InputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1875827585 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875827584} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1367921066} + - {fileID: 582431577} + - {fileID: 1309991790} + - {fileID: 675246361} + m_Father: {fileID: 2055886075} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -0.9633789, y: 163.1} + m_SizeDelta: {x: 663.5586, y: 132} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1875827586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875827584} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1875827587} + m_TextComponent: {fileID: 582431578} + m_Placeholder: {fileID: 1367921067} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!114 &1875827587 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875827584} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1875827588 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875827584} + m_CullTransparentMesh: 0 +--- !u!1 &2055886074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2055886075} + m_Layer: 5 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2055886075 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2055886074} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1875827585} + m_Father: {fileID: 1496128156} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2104670392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2104670395} + - component: {fileID: 2104670394} + - component: {fileID: 2104670393} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2104670393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2104670392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &2104670394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2104670392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &2104670395 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2104670392} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTestScene.unity.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTestScene.unity.meta new file mode 100644 index 0000000..c4fcb5e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTestScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a74b1b5d357902346825fdfd125ea399 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTester.cs b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTester.cs new file mode 100644 index 0000000..45a089c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTester.cs @@ -0,0 +1,118 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +#endif + +namespace MoreMountains.Tools +{ + /// + /// A test object to store data to test the MMSaveLoadManager class + /// + [System.Serializable] + public class MMSaveLoadTestObject + { + public string SavedText; + } + + /// + /// A simple class used in the MMSaveLoadTestScene to test the MMSaveLoadManager class + /// + public class MMSaveLoadTester : MonoBehaviour + { + [Header("Bindings")] + #if MM_UI + /// the text to save + [Tooltip("the text to save")] + public InputField TargetInputField; + #endif + + [Header("Save settings")] + /// the chosen save method (json, encrypted json, binary, encrypted binary) + [Tooltip("the chosen save method (json, encrypted json, binary, encrypted binary)")] + public MMSaveLoadManagerMethods SaveLoadMethod = MMSaveLoadManagerMethods.Binary; + /// the name of the file to save + [Tooltip("the name of the file to save")] + public string FileName = "TestObject"; + /// the name of the destination folder + [Tooltip("the name of the destination folder")] + public string FolderName = "MMTest/"; + /// the extension to use + [Tooltip("the extension to use")] + public string SaveFileExtension = ".testObject"; + /// the key to use to encrypt the file (if needed) + [Tooltip("the key to use to encrypt the file (if needed)")] + public string EncryptionKey = "ThisIsTheKey"; + + /// Test button + [MMInspectorButton("Save")] + public bool TestSaveButton; + /// Test button + [MMInspectorButton("Load")] + public bool TestLoadButton; + /// Test button + [MMInspectorButton("Reset")] + public bool TestResetButton; + + protected IMMSaveLoadManagerMethod _saveLoadManagerMethod; + + /// + /// Saves the contents of the TestObject into a file + /// + public virtual void Save() + { + InitializeSaveLoadMethod(); + MMSaveLoadTestObject testObject = new MMSaveLoadTestObject(); + #if MM_UI + testObject.SavedText = TargetInputField.text; + #endif + MMSaveLoadManager.Save(testObject, FileName+SaveFileExtension, FolderName); + } + + /// + /// Loads the saved data + /// + public virtual void Load() + { + InitializeSaveLoadMethod(); + MMSaveLoadTestObject testObject = (MMSaveLoadTestObject)MMSaveLoadManager.Load(typeof(MMSaveLoadTestObject), FileName + SaveFileExtension, FolderName); + #if MM_UI + TargetInputField.text = testObject.SavedText; + #endif + } + + /// + /// Resets all saves by deleting the whole folder + /// + protected virtual void Reset() + { + MMSaveLoadManager.DeleteSaveFolder(FolderName); + } + + /// + /// Creates a new MMSaveLoadManagerMethod and passes it to the MMSaveLoadManager + /// + protected virtual void InitializeSaveLoadMethod() + { + switch(SaveLoadMethod) + { + case MMSaveLoadManagerMethods.Binary: + _saveLoadManagerMethod = new MMSaveLoadManagerMethodBinary(); + break; + case MMSaveLoadManagerMethods.BinaryEncrypted: + _saveLoadManagerMethod = new MMSaveLoadManagerMethodBinaryEncrypted(); + (_saveLoadManagerMethod as MMSaveLoadManagerEncrypter).Key = EncryptionKey; + break; + case MMSaveLoadManagerMethods.Json: + _saveLoadManagerMethod = new MMSaveLoadManagerMethodJson(); + break; + case MMSaveLoadManagerMethods.JsonEncrypted: + _saveLoadManagerMethod = new MMSaveLoadManagerMethodJsonEncrypted(); + (_saveLoadManagerMethod as MMSaveLoadManagerEncrypter).Key = EncryptionKey; + break; + } + MMSaveLoadManager.SaveLoadMethod = _saveLoadManagerMethod; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTester.cs.meta b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTester.cs.meta new file mode 100644 index 0000000..e97d8c9 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSaveLoad/MMSaveLoadTester.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58f9c048a89d0d5448bf5972cdc13fad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading.meta b/Assets/Feel/MMTools/Core/MMSceneLoading.meta new file mode 100644 index 0000000..997372a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0d7d14cdf3c340e4c9abbcaa5d8632de +folderAsset: yes +timeCreated: 1523910505 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens.meta new file mode 100644 index 0000000..0899271 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 586bdf69c9628d045ac7c9ef28bc1871 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/LoadingScreen.unity b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/LoadingScreen.unity new file mode 100644 index 0000000..18bbec5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/LoadingScreen.unity @@ -0,0 +1,1205 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &10280100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 186740, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 10280101} + - component: {fileID: 10280104} + - component: {fileID: 10280103} + - component: {fileID: 10280102} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &10280101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 444286, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10280100} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 28.1, y: -1.52, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1295474482} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &10280102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11448810, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10280100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2d49b7c1bcd2e07499844da127be038d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ForceModuleActive: 0 +--- !u!114 &10280103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11474690, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10280100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &10280104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11499252, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 10280100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!1 &396397862 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 193962, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 396397865} + - component: {fileID: 396397864} + - component: {fileID: 396397863} + - component: {fileID: 396397867} + - component: {fileID: 396397866} + m_Layer: 5 + m_Name: Fader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &396397863 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11425450, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 396397862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &396397864 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22256846, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 396397862} + m_CullTransparentMesh: 0 +--- !u!224 &396397865 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22464688, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 396397862} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 597236653} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -0.00024414062, y: 0.00018310547} + m_SizeDelta: {x: -0.00012207031, y: 0.000061035156} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &396397866 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 396397862} + m_Enabled: 1 + m_Alpha: 0 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!114 &396397867 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 396397862} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: efe052b91c95c534b8bf0f64fb0b9151, type: 3} + m_Name: + m_EditorClassIdentifier: + ID: 0 + InactiveAlpha: 0 + ActiveAlpha: 1 + DefaultDuration: 0.2 + DefaultTween: + MMTweenDefinitionType: 0 + MMTweenCurve: 0 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + IgnoreTimescale: 1 + ShouldBlockRaycasts: 0 + FadeIn1SecondButton: 0 + FadeOut1SecondButton: 0 + DefaultFadeButton: 0 + ResetFaderButton: 0 +--- !u!1 &485648903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485648904} + - component: {fileID: 485648906} + - component: {fileID: 485648905} + - component: {fileID: 485648907} + m_Layer: 5 + m_Name: LoadingProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &485648904 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1, y: 47} + m_SizeDelta: {x: 246.58, y: 61.3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &485648905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 553f615332baa0d4a842d5600f824551, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 0 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &485648906 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_CullTransparentMesh: 0 +--- !u!225 &485648907 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &529552823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529552824} + - component: {fileID: 529552825} + m_Layer: 0 + m_Name: VisualItems + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &529552824 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 620337398} + - {fileID: 1383385371} + - {fileID: 1858372242} + - {fileID: 1088690356} + - {fileID: 485648904} + m_Father: {fileID: 597236653} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &529552825 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!1 &576844008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 122404, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597236653} + - component: {fileID: 576844011} + - component: {fileID: 576844010} + - component: {fileID: 576844009} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &576844009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11497174, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 0 +--- !u!114 &576844010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11425668, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &576844011 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22320466, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 1278862511} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &597236653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22453656, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 529552824} + - {fileID: 396397865} + m_Father: {fileID: 1295474482} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &620337397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 620337398} + - component: {fileID: 620337400} + - component: {fileID: 620337399} + m_Layer: 5 + m_Name: LoadingText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &620337398 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.08001708, y: 2.7605639} + m_SizeDelta: {x: 338, y: 65} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &620337399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 50 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: LOADING +--- !u!222 &620337400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_CullTransparentMesh: 0 +--- !u!1 &1088690355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1088690356} + - component: {fileID: 1088690358} + - component: {fileID: 1088690357} + m_Layer: 5 + m_Name: MoreMountainsLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1088690356 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: -0.00000011920929, y: 57} + m_SizeDelta: {x: 70, y: 70} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1088690357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a5240da7fff0bf34da21c7edff42b1d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1088690358 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_CullTransparentMesh: 0 +--- !u!1 &1278862507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1278862512} + - component: {fileID: 1278862511} + - component: {fileID: 1278862509} + - component: {fileID: 1278862508} + - component: {fileID: 1278862510} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1278862508 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278862507} + m_Enabled: 1 +--- !u!124 &1278862509 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278862507} + m_Enabled: 1 +--- !u!114 &1278862510 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278862507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e8aa3525151bb343b66b059b6095946, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!20 &1278862511 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278862507} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 4.5830092 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1278862512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278862507} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.76, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1295474477 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 170940, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1295474482} + - component: {fileID: 1295474481} + - component: {fileID: 1295474480} + m_Layer: 0 + m_Name: UICamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &1295474480 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 12432142, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295474477} + m_Enabled: 1 +--- !u!20 &1295474481 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2037892, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295474477} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 10 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1295474482 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 479578, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1295474477} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -49.96894, y: 1.0859566, z: -100} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 10280101} + - {fileID: 597236653} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1383385370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1383385371} + - component: {fileID: 1383385374} + - component: {fileID: 1383385373} + - component: {fileID: 1383385372} + - component: {fileID: 1383385375} + m_Layer: 5 + m_Name: LoadingAnimation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1383385371 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.00000011920929, y: -61.7} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!95 &1383385372 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: b10fa324c4770c94487f925443368d5c, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1383385373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300026, guid: 9bd9265533309304db171aa9f916554a, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1383385374 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_CullTransparentMesh: 0 +--- !u!225 &1383385375 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1858372241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1858372242} + - component: {fileID: 1858372245} + - component: {fileID: 1858372244} + - component: {fileID: 1858372243} + - component: {fileID: 1858372246} + m_Layer: 5 + m_Name: LoadingCompleteAnimation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1858372242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 83, y: 71} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!95 &1858372243 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: f76dd8a4fa6819c46a443effc1b4abc3, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1858372244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300014, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1858372245 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_CullTransparentMesh: 0 +--- !u!225 &1858372246 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1904868558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904868560} + - component: {fileID: 1904868559} + m_Layer: 0 + m_Name: LoadingSceneManager + m_TagString: Untagged + m_Icon: {fileID: 5721338939258241955, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1904868559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5fc9302e06a3ad240a410b9264fd8e56, type: 3} + m_Name: + m_EditorClassIdentifier: + LoadingText: {fileID: 620337399} + LoadingProgressBar: {fileID: 485648907} + LoadingAnimation: {fileID: 1383385375} + LoadingCompleteAnimation: {fileID: 1858372246} + StartFadeDuration: 0.5 + ProgressBarSpeed: 2 + ExitFadeDuration: 0.5 + LoadCompleteDelay: 0.5 +--- !u!4 &1904868560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -27.42, y: -0.32, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/LoadingScreen.unity.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/LoadingScreen.unity.meta new file mode 100644 index 0000000..365840b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/LoadingScreen.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 888394d52616e5e42b3b54c3f2bbd3eb +timeCreated: 1523970408 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreen.unity b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreen.unity new file mode 100644 index 0000000..9a90e33 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreen.unity @@ -0,0 +1,1295 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &464979532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 464979533} + - component: {fileID: 464979537} + - component: {fileID: 464979536} + - component: {fileID: 464979535} + - component: {fileID: 464979534} + m_Layer: 5 + m_Name: Fader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &464979533 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 529552824} + m_Father: {fileID: 597236653} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &464979534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 315af83f344d8a24e9f6d1399e439fdd, type: 3} + m_Name: + m_EditorClassIdentifier: + ID: 500 + FadeInDirection: 0 + FadeOutDirection: 2 + DefaultDuration: 0.2 + DefaultTween: + MMTweenDefinitionType: 0 + MMTweenCurve: 17 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + IgnoreTimescale: 1 + DisableOnInit: 1 + InitialDelay: 0 + ShouldBlockRaycasts: 0 + FadeIn1SecondButton: 0 + FadeOut1SecondButton: 0 + DefaultFadeButton: 0 + ResetFaderButton: 0 +--- !u!225 &464979535 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!114 &464979536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.21960784, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &464979537 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_CullTransparentMesh: 0 +--- !u!1 &485648903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485648904} + - component: {fileID: 485648906} + - component: {fileID: 485648905} + - component: {fileID: 485648907} + - component: {fileID: 485648908} + m_Layer: 5 + m_Name: LoadingProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &485648904 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 60} + m_SizeDelta: {x: -120, y: 60} + m_Pivot: {x: 0.5, y: 0} +--- !u!114 &485648905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: aff4855d499cb7646b344323f4129b58, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 0 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &485648906 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_CullTransparentMesh: 0 +--- !u!225 &485648907 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &485648908 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 32002db2f9b16ed45ac2cfd0f37f96e4, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &512427040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 512427041} + - component: {fileID: 512427043} + - component: {fileID: 512427042} + m_Layer: 5 + m_Name: FaderExtension + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &512427041 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512427040} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.25, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &512427042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512427040} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.21960784, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &512427043 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512427040} + m_CullTransparentMesh: 0 +--- !u!1 &529552823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529552824} + - component: {fileID: 529552825} + m_Layer: 0 + m_Name: VisualItems + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &529552824 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 512427041} + - {fileID: 620337398} + - {fileID: 1383385371} + - {fileID: 1858372242} + - {fileID: 1088690356} + - {fileID: 485648904} + - {fileID: 746062002} + m_Father: {fileID: 464979533} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &529552825 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!1 &576844008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 122404, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597236653} + - component: {fileID: 576844011} + - component: {fileID: 576844010} + - component: {fileID: 576844009} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &576844009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11497174, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 0 +--- !u!114 &576844010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11425668, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &576844011 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22320466, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 32767 + m_TargetDisplay: 0 +--- !u!1 &593359338 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 593359340} + - component: {fileID: 593359339} + - component: {fileID: 593359341} + m_Layer: 0 + m_Name: AudioListener + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &593359339 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593359338} + m_Enabled: 1 +--- !u!4 &593359340 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593359338} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 45.434574, y: 17.19048, z: 4.5442276} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &593359341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593359338} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e8aa3525151bb343b66b059b6095946, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &597236653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22453656, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 464979533} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &620337397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 620337398} + - component: {fileID: 620337400} + - component: {fileID: 620337399} + m_Layer: 5 + m_Name: LoadingText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &620337398 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 58, y: -50} + m_SizeDelta: {x: 338, y: 74.19525} + m_Pivot: {x: 0, y: 1} +--- !u!114 &620337399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 50 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: LOADING +--- !u!222 &620337400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_CullTransparentMesh: 0 +--- !u!1 &746062001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 746062002} + - component: {fileID: 746062004} + - component: {fileID: 746062003} + - component: {fileID: 746062005} + m_Layer: 5 + m_Name: LoadingProgressText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &746062002 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 170} + m_SizeDelta: {x: -120, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &746062003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 60 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 6 + m_AlignByGeometry: 1 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 35 +--- !u!222 &746062004 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_CullTransparentMesh: 0 +--- !u!114 &746062005 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a6b4439955a5ebf4eaa4285bc875fcc6, type: 3} + m_Name: + m_EditorClassIdentifier: + RemapMin: 0 + RemapMax: 100 + NumberOfDecimals: 0 +--- !u!1 &1088690355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1088690356} + - component: {fileID: 1088690358} + - component: {fileID: 1088690357} + m_Layer: 5 + m_Name: MoreMountainsLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1088690356 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.75, y: 0.75, z: 0.75} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -85, y: 160} + m_SizeDelta: {x: 70, y: 70} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1088690357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a5240da7fff0bf34da21c7edff42b1d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1088690358 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_CullTransparentMesh: 0 +--- !u!1 &1115617214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1115617216} + - component: {fileID: 1115617215} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1115617215 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115617214} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 0 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1115617216 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115617214} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 459.96838, y: 398.58688, z: -59.181396} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1383385370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1383385371} + - component: {fileID: 1383385374} + - component: {fileID: 1383385373} + - component: {fileID: 1383385372} + - component: {fileID: 1383385375} + m_Layer: 5 + m_Name: LoadingAnimation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1383385371 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -80, y: 160} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!95 &1383385372 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: b10fa324c4770c94487f925443368d5c, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1383385373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300026, guid: 9bd9265533309304db171aa9f916554a, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1383385374 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_CullTransparentMesh: 0 +--- !u!225 &1383385375 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1858372241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1858372242} + - component: {fileID: 1858372245} + - component: {fileID: 1858372244} + - component: {fileID: 1858372243} + - component: {fileID: 1858372246} + m_Layer: 5 + m_Name: LoadingCompleteAnimation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1858372242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 100, y: -30} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!95 &1858372243 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: f76dd8a4fa6819c46a443effc1b4abc3, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1858372244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300014, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1858372245 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_CullTransparentMesh: 0 +--- !u!225 &1858372246 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1904868558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904868560} + - component: {fileID: 1904868559} + m_Layer: 0 + m_Name: LoadingSceneManager + m_TagString: Untagged + m_Icon: {fileID: 5721338939258241955, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1904868559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85f9f16a22943814196e731ffb6b0f62, type: 3} + m_Name: + m_EditorClassIdentifier: + LoadingAudioListener: {fileID: 593359339} + FaderID: 500 + DebugMode: 0 + SetRealtimeProgressValue: + m_PersistentCalls: + m_Calls: [] + SetInterpolatedProgressValue: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 746062005} + m_MethodName: SetProgress + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 485648908} + m_MethodName: SetProgress + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + OnLoadStarted: + m_PersistentCalls: + m_Calls: [] + OnBeforeEntryFade: + m_PersistentCalls: + m_Calls: [] + OnEntryFade: + m_PersistentCalls: + m_Calls: [] + OnAfterEntryFade: + m_PersistentCalls: + m_Calls: [] + OnUnloadOriginScene: + m_PersistentCalls: + m_Calls: [] + OnLoadDestinationScene: + m_PersistentCalls: + m_Calls: [] + OnLoadProgressComplete: + m_PersistentCalls: + m_Calls: [] + OnInterpolatedLoadProgressComplete: + m_PersistentCalls: + m_Calls: [] + OnBeforeExitFade: + m_PersistentCalls: + m_Calls: [] + OnExitFade: + m_PersistentCalls: + m_Calls: [] + OnDestinationSceneActivation: + m_PersistentCalls: + m_Calls: [] + OnUnloadSceneLoader: + m_PersistentCalls: + m_Calls: [] + OnLoadTransitionComplete: + m_PersistentCalls: + m_Calls: [] +--- !u!4 &1904868560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -27.42, y: -0.32, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreen.unity.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreen.unity.meta new file mode 100644 index 0000000..5ad8264 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreen.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d89b77a7a68c1844280c6ff2e49f95b8 +timeCreated: 1523970408 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenBigText.unity b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenBigText.unity new file mode 100644 index 0000000..eed4890 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenBigText.unity @@ -0,0 +1,1220 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &464979532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 464979533} + - component: {fileID: 464979537} + - component: {fileID: 464979536} + - component: {fileID: 464979535} + - component: {fileID: 464979534} + m_Layer: 5 + m_Name: Fader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &464979533 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 529552824} + m_Father: {fileID: 597236653} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &464979534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 315af83f344d8a24e9f6d1399e439fdd, type: 3} + m_Name: + m_EditorClassIdentifier: + ID: 500 + FadeInDirection: 0 + FadeOutDirection: 2 + DefaultDuration: 0.2 + DefaultTween: + MMTweenDefinitionType: 0 + MMTweenCurve: 17 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + IgnoreTimescale: 1 + DisableOnInit: 1 + InitialDelay: 0 + ShouldBlockRaycasts: 0 + FadeIn1SecondButton: 0 + FadeOut1SecondButton: 0 + DefaultFadeButton: 0 + ResetFaderButton: 0 +--- !u!225 &464979535 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!114 &464979536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.01827167, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &464979537 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_CullTransparentMesh: 0 +--- !u!1 &485648903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485648904} + - component: {fileID: 485648906} + - component: {fileID: 485648905} + - component: {fileID: 485648907} + - component: {fileID: 485648908} + m_Layer: 5 + m_Name: LoadingProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &485648904 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -80} + m_SizeDelta: {x: -120, y: 61.299988} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &485648905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 553f615332baa0d4a842d5600f824551, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 0 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &485648906 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_CullTransparentMesh: 0 +--- !u!225 &485648907 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &485648908 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 32002db2f9b16ed45ac2cfd0f37f96e4, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &529552823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529552824} + - component: {fileID: 529552825} + m_Layer: 0 + m_Name: VisualItems + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &529552824 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 620337398} + - {fileID: 1383385371} + - {fileID: 1858372242} + - {fileID: 1088690356} + - {fileID: 485648904} + - {fileID: 746062002} + m_Father: {fileID: 464979533} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &529552825 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!1 &576844008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 122404, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597236653} + - component: {fileID: 576844011} + - component: {fileID: 576844010} + - component: {fileID: 576844009} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &576844009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11497174, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 0 +--- !u!114 &576844010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11425668, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &576844011 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22320466, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 32767 + m_TargetDisplay: 0 +--- !u!224 &597236653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22453656, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 464979533} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &620337397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 620337398} + - component: {fileID: 620337400} + - component: {fileID: 620337399} + m_Layer: 5 + m_Name: LoadingText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &620337398 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 58, y: -50} + m_SizeDelta: {x: 338, y: 74.19525} + m_Pivot: {x: 0, y: 1} +--- !u!114 &620337399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 50 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: LOADING +--- !u!222 &620337400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_CullTransparentMesh: 0 +--- !u!1 &746062001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 746062002} + - component: {fileID: 746062004} + - component: {fileID: 746062003} + - component: {fileID: 746062005} + m_Layer: 5 + m_Name: LoadingProgressText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &746062002 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30, y: -20} + m_SizeDelta: {x: -60, y: -120} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &746062003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 300 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 2 + m_MaxSize: 300 + m_Alignment: 6 + m_AlignByGeometry: 1 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 35 +--- !u!222 &746062004 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_CullTransparentMesh: 0 +--- !u!114 &746062005 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a6b4439955a5ebf4eaa4285bc875fcc6, type: 3} + m_Name: + m_EditorClassIdentifier: + RemapMin: 0 + RemapMax: 100 + NumberOfDecimals: 0 +--- !u!1 &1088690355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1088690356} + - component: {fileID: 1088690358} + - component: {fileID: 1088690357} + m_Layer: 5 + m_Name: MoreMountainsLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1088690356 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.75, y: 0.75, z: 0.75} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -85, y: -50} + m_SizeDelta: {x: 70, y: 70} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1088690357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a5240da7fff0bf34da21c7edff42b1d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1088690358 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_CullTransparentMesh: 0 +--- !u!1 &1115617214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1115617216} + - component: {fileID: 1115617215} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1115617215 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115617214} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 0 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1115617216 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115617214} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 459.96838, y: 398.58688, z: -59.181396} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1383385370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1383385371} + - component: {fileID: 1383385374} + - component: {fileID: 1383385373} + - component: {fileID: 1383385372} + - component: {fileID: 1383385375} + m_Layer: 5 + m_Name: LoadingAnimation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1383385371 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -80, y: 80} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!95 &1383385372 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: b10fa324c4770c94487f925443368d5c, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1383385373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300026, guid: 9bd9265533309304db171aa9f916554a, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1383385374 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_CullTransparentMesh: 0 +--- !u!225 &1383385375 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1858372241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1858372242} + - component: {fileID: 1858372245} + - component: {fileID: 1858372244} + - component: {fileID: 1858372243} + - component: {fileID: 1858372246} + m_Layer: 5 + m_Name: LoadingCompleteAnimation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1858372242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 100, y: -30} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!95 &1858372243 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: f76dd8a4fa6819c46a443effc1b4abc3, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1858372244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300014, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1858372245 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_CullTransparentMesh: 0 +--- !u!225 &1858372246 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1904868558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904868560} + - component: {fileID: 1904868559} + m_Layer: 0 + m_Name: LoadingSceneManager + m_TagString: Untagged + m_Icon: {fileID: 5721338939258241955, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1904868559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85f9f16a22943814196e731ffb6b0f62, type: 3} + m_Name: + m_EditorClassIdentifier: + LoadingAudioListener: {fileID: 2140064658} + FaderID: 500 + DebugMode: 0 + SetRealtimeProgressValue: + m_PersistentCalls: + m_Calls: [] + SetInterpolatedProgressValue: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 746062005} + m_MethodName: SetProgress + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 485648908} + m_MethodName: SetProgress + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + OnLoadStarted: + m_PersistentCalls: + m_Calls: [] + OnBeforeEntryFade: + m_PersistentCalls: + m_Calls: [] + OnEntryFade: + m_PersistentCalls: + m_Calls: [] + OnAfterEntryFade: + m_PersistentCalls: + m_Calls: [] + OnUnloadOriginScene: + m_PersistentCalls: + m_Calls: [] + OnLoadDestinationScene: + m_PersistentCalls: + m_Calls: [] + OnLoadProgressComplete: + m_PersistentCalls: + m_Calls: [] + OnInterpolatedLoadProgressComplete: + m_PersistentCalls: + m_Calls: [] + OnBeforeExitFade: + m_PersistentCalls: + m_Calls: [] + OnExitFade: + m_PersistentCalls: + m_Calls: [] + OnDestinationSceneActivation: + m_PersistentCalls: + m_Calls: [] + OnUnloadSceneLoader: + m_PersistentCalls: + m_Calls: [] + OnLoadTransitionComplete: + m_PersistentCalls: + m_Calls: [] +--- !u!4 &1904868560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -27.42, y: -0.32, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2140064657 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2140064659} + - component: {fileID: 2140064658} + - component: {fileID: 2140064660} + m_Layer: 0 + m_Name: AudioListener + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2140064658 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140064657} + m_Enabled: 1 +--- !u!4 &2140064659 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140064657} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 45.434574, y: 17.19048, z: 4.5442276} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2140064660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2140064657} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e8aa3525151bb343b66b059b6095946, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenBigText.unity.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenBigText.unity.meta new file mode 100644 index 0000000..706f8c0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenBigText.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dedb2bed56a01c241be42c5c5b5748ca +timeCreated: 1523970408 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenFastFade.unity b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenFastFade.unity new file mode 100644 index 0000000..9890cf1 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenFastFade.unity @@ -0,0 +1,705 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &464979532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 464979533} + - component: {fileID: 464979537} + - component: {fileID: 464979536} + - component: {fileID: 464979535} + - component: {fileID: 464979534} + m_Layer: 5 + m_Name: Fader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &464979533 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 529552824} + m_Father: {fileID: 597236653} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &464979534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: efe052b91c95c534b8bf0f64fb0b9151, type: 3} + m_Name: + m_EditorClassIdentifier: + ID: 500 + InactiveAlpha: 0 + ActiveAlpha: 1 + DefaultDuration: 0.1 + DefaultTween: + MMTweenDefinitionType: 0 + MMTweenCurve: 6 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + IgnoreTimescale: 1 + ShouldBlockRaycasts: 0 + FadeIn1SecondButton: 0 + FadeOut1SecondButton: 0 + DefaultFadeButton: 0 + ResetFaderButton: 0 +--- !u!225 &464979535 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!114 &464979536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &464979537 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_CullTransparentMesh: 0 +--- !u!1 &512427040 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 512427041} + - component: {fileID: 512427043} + - component: {fileID: 512427042} + m_Layer: 5 + m_Name: FaderExtension + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &512427041 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512427040} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1.25, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &512427042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512427040} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &512427043 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 512427040} + m_CullTransparentMesh: 0 +--- !u!1 &529552823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529552824} + - component: {fileID: 529552825} + m_Layer: 0 + m_Name: VisualItems + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &529552824 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 512427041} + m_Father: {fileID: 464979533} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &529552825 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!1 &576844008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 122404, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597236653} + - component: {fileID: 576844011} + - component: {fileID: 576844010} + - component: {fileID: 576844009} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &576844009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11497174, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 0 +--- !u!114 &576844010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11425668, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &576844011 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22320466, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 32767 + m_TargetDisplay: 0 +--- !u!1 &593359338 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 593359340} + - component: {fileID: 593359339} + - component: {fileID: 593359341} + m_Layer: 0 + m_Name: AudioListener + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &593359339 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593359338} + m_Enabled: 1 +--- !u!4 &593359340 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593359338} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 45.434574, y: 17.19048, z: 4.5442276} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &593359341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 593359338} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e8aa3525151bb343b66b059b6095946, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &597236653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22453656, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 464979533} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1115617214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1115617216} + - component: {fileID: 1115617215} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1115617215 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115617214} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 0 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1115617216 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115617214} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 459.96838, y: 398.58688, z: -59.181396} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1904868558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904868560} + - component: {fileID: 1904868559} + m_Layer: 0 + m_Name: LoadingSceneManager + m_TagString: Untagged + m_Icon: {fileID: 5721338939258241955, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1904868559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85f9f16a22943814196e731ffb6b0f62, type: 3} + m_Name: + m_EditorClassIdentifier: + LoadingAudioListener: {fileID: 593359339} + FaderID: 500 + DebugMode: 0 + SetRealtimeProgressValue: + m_PersistentCalls: + m_Calls: [] + SetInterpolatedProgressValue: + m_PersistentCalls: + m_Calls: [] + OnLoadStarted: + m_PersistentCalls: + m_Calls: [] + OnBeforeEntryFade: + m_PersistentCalls: + m_Calls: [] + OnEntryFade: + m_PersistentCalls: + m_Calls: [] + OnAfterEntryFade: + m_PersistentCalls: + m_Calls: [] + OnUnloadOriginScene: + m_PersistentCalls: + m_Calls: [] + OnLoadDestinationScene: + m_PersistentCalls: + m_Calls: [] + OnLoadProgressComplete: + m_PersistentCalls: + m_Calls: [] + OnInterpolatedLoadProgressComplete: + m_PersistentCalls: + m_Calls: [] + OnBeforeExitFade: + m_PersistentCalls: + m_Calls: [] + OnExitFade: + m_PersistentCalls: + m_Calls: [] + OnDestinationSceneActivation: + m_PersistentCalls: + m_Calls: [] + OnUnloadSceneLoader: + m_PersistentCalls: + m_Calls: [] + OnLoadTransitionComplete: + m_PersistentCalls: + m_Calls: [] +--- !u!4 &1904868560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -27.42, y: -0.32, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenFastFade.unity.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenFastFade.unity.meta new file mode 100644 index 0000000..f038557 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenFastFade.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8101c376367d6e44f84e602722e5ac10 +timeCreated: 1523970408 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenSimple.unity b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenSimple.unity new file mode 100644 index 0000000..5598e5d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenSimple.unity @@ -0,0 +1,1220 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &464979532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 464979533} + - component: {fileID: 464979537} + - component: {fileID: 464979536} + - component: {fileID: 464979535} + - component: {fileID: 464979534} + m_Layer: 5 + m_Name: Fader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &464979533 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 529552824} + m_Father: {fileID: 597236653} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &464979534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 315af83f344d8a24e9f6d1399e439fdd, type: 3} + m_Name: + m_EditorClassIdentifier: + ID: 500 + FadeInDirection: 0 + FadeOutDirection: 0 + DefaultDuration: 0.2 + DefaultTween: + MMTweenDefinitionType: 0 + MMTweenCurve: 9 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + IgnoreTimescale: 1 + DisableOnInit: 1 + InitialDelay: 0 + ShouldBlockRaycasts: 0 + FadeIn1SecondButton: 0 + FadeOut1SecondButton: 0 + DefaultFadeButton: 0 + ResetFaderButton: 0 +--- !u!225 &464979535 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!114 &464979536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.21960784, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &464979537 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 464979532} + m_CullTransparentMesh: 0 +--- !u!1 &485648903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485648904} + - component: {fileID: 485648906} + - component: {fileID: 485648905} + - component: {fileID: 485648907} + - component: {fileID: 485648908} + m_Layer: 5 + m_Name: LoadingProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &485648904 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0} +--- !u!114 &485648905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.37588555, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: aff4855d499cb7646b344323f4129b58, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 0 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &485648906 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_CullTransparentMesh: 0 +--- !u!225 &485648907 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &485648908 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485648903} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 32002db2f9b16ed45ac2cfd0f37f96e4, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &529552823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529552824} + - component: {fileID: 529552825} + m_Layer: 0 + m_Name: VisualItems + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &529552824 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 620337398} + - {fileID: 1383385371} + - {fileID: 1858372242} + - {fileID: 485648904} + - {fileID: 1088690356} + - {fileID: 746062002} + m_Father: {fileID: 464979533} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &529552825 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529552823} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 0 + m_BlocksRaycasts: 0 + m_IgnoreParentGroups: 0 +--- !u!1 &576844008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 122404, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 597236653} + - component: {fileID: 576844011} + - component: {fileID: 576844010} + - component: {fileID: 576844009} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &576844009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11497174, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 0 +--- !u!114 &576844010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11425668, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &576844011 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22320466, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 32767 + m_TargetDisplay: 0 +--- !u!224 &597236653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22453656, guid: 8b1d1328ec81f07408bd9ef50552cd0e, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576844008} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 464979533} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &620337397 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 620337398} + - component: {fileID: 620337400} + - component: {fileID: 620337399} + m_Layer: 5 + m_Name: LoadingText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &620337398 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 58, y: -50} + m_SizeDelta: {x: 338, y: 74.19525} + m_Pivot: {x: 0, y: 1} +--- !u!114 &620337399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 50 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: LOADING +--- !u!222 &620337400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 620337397} + m_CullTransparentMesh: 0 +--- !u!1 &746062001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 746062002} + - component: {fileID: 746062004} + - component: {fileID: 746062003} + - component: {fileID: 746062005} + m_Layer: 5 + m_Name: LoadingProgressText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &746062002 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 80} + m_SizeDelta: {x: -120, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &746062003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.39215687} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 300 + m_Alignment: 6 + m_AlignByGeometry: 1 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 35 +--- !u!222 &746062004 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_CullTransparentMesh: 0 +--- !u!114 &746062005 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746062001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a6b4439955a5ebf4eaa4285bc875fcc6, type: 3} + m_Name: + m_EditorClassIdentifier: + RemapMin: 0 + RemapMax: 100 + NumberOfDecimals: 0 +--- !u!1 &1088690355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1088690356} + - component: {fileID: 1088690358} + - component: {fileID: 1088690357} + m_Layer: 5 + m_Name: MoreMountainsLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1088690356 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.75, y: 0.75, z: 0.75} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -85, y: 70} + m_SizeDelta: {x: 70, y: 70} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1088690357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.39215687} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a5240da7fff0bf34da21c7edff42b1d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1088690358 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1088690355} + m_CullTransparentMesh: 0 +--- !u!1 &1115617214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1115617216} + - component: {fileID: 1115617215} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &1115617215 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115617214} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 0 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1115617216 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1115617214} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 459.96838, y: 398.58688, z: -59.181396} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1383385370 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1383385371} + - component: {fileID: 1383385374} + - component: {fileID: 1383385373} + - component: {fileID: 1383385372} + - component: {fileID: 1383385375} + m_Layer: 5 + m_Name: LoadingAnimation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1383385371 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -80, y: 160} + m_SizeDelta: {x: 50, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!95 &1383385372 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: b10fa324c4770c94487f925443368d5c, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1383385373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300026, guid: 9bd9265533309304db171aa9f916554a, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1383385374 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_CullTransparentMesh: 0 +--- !u!225 &1383385375 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383385370} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1449674695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1449674697} + - component: {fileID: 1449674696} + - component: {fileID: 1449674698} + m_Layer: 0 + m_Name: AudioListener + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1449674696 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1449674695} + m_Enabled: 1 +--- !u!4 &1449674697 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1449674695} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 45.434574, y: 17.19048, z: 4.5442276} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1449674698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1449674695} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e8aa3525151bb343b66b059b6095946, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1858372241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1858372242} + - component: {fileID: 1858372245} + - component: {fileID: 1858372244} + - component: {fileID: 1858372243} + - component: {fileID: 1858372246} + m_Layer: 5 + m_Name: LoadingCompleteAnimation + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1858372242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 529552824} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 100, y: -30} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!95 &1858372243 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: f76dd8a4fa6819c46a443effc1b4abc3, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!114 &1858372244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300014, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1858372245 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_CullTransparentMesh: 0 +--- !u!225 &1858372246 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1858372241} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &1904868558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904868560} + - component: {fileID: 1904868559} + m_Layer: 0 + m_Name: LoadingSceneManager + m_TagString: Untagged + m_Icon: {fileID: 5721338939258241955, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1904868559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 85f9f16a22943814196e731ffb6b0f62, type: 3} + m_Name: + m_EditorClassIdentifier: + LoadingAudioListener: {fileID: 1449674696} + FaderID: 500 + DebugMode: 0 + SetRealtimeProgressValue: + m_PersistentCalls: + m_Calls: [] + SetInterpolatedProgressValue: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 746062005} + m_MethodName: SetProgress + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 485648908} + m_MethodName: SetProgress + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + OnLoadStarted: + m_PersistentCalls: + m_Calls: [] + OnBeforeEntryFade: + m_PersistentCalls: + m_Calls: [] + OnEntryFade: + m_PersistentCalls: + m_Calls: [] + OnAfterEntryFade: + m_PersistentCalls: + m_Calls: [] + OnUnloadOriginScene: + m_PersistentCalls: + m_Calls: [] + OnLoadDestinationScene: + m_PersistentCalls: + m_Calls: [] + OnLoadProgressComplete: + m_PersistentCalls: + m_Calls: [] + OnInterpolatedLoadProgressComplete: + m_PersistentCalls: + m_Calls: [] + OnBeforeExitFade: + m_PersistentCalls: + m_Calls: [] + OnExitFade: + m_PersistentCalls: + m_Calls: [] + OnDestinationSceneActivation: + m_PersistentCalls: + m_Calls: [] + OnUnloadSceneLoader: + m_PersistentCalls: + m_Calls: [] + OnLoadTransitionComplete: + m_PersistentCalls: + m_Calls: [] +--- !u!4 &1904868560 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904868558} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -27.42, y: -0.32, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenSimple.unity.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenSimple.unity.meta new file mode 100644 index 0000000..c3ddd8b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/LoadingScreens/MMAdditiveLoadingScreenSimple.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 945e5b97212e8e74ebcd35bddde3970c +timeCreated: 1523970408 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts.meta new file mode 100644 index 0000000..30a54ac --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4db509e6700c544ea6a2a00c951d5df +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers.meta new file mode 100644 index 0000000..402c876 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2057e93508d0e0b45b4e394f23a82191 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMLoadScene.cs b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMLoadScene.cs new file mode 100644 index 0000000..ff8439e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMLoadScene.cs @@ -0,0 +1,40 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// Add this component on an object, specify a scene name in its inspector, and call LoadScene() to load the desired scene. + /// + public class MMLoadScene : MonoBehaviour + { + /// the possible modes to load scenes. Either Unity's native API, or MoreMountains' LoadingSceneManager + public enum LoadingSceneModes { UnityNative, MMSceneLoadingManager, MMAdditiveSceneLoadingManager } + + /// the name of the scene that needs to be loaded when LoadScene gets called + [Tooltip("the name of the scene that needs to be loaded when LoadScene gets called")] + public string SceneName; + /// defines whether the scene will be loaded using Unity's native API or MoreMountains' way + [Tooltip("defines whether the scene will be loaded using Unity's native API or MoreMountains' way")] + public LoadingSceneModes LoadingSceneMode = LoadingSceneModes.UnityNative; + + /// + /// Loads the scene specified in the inspector + /// + public virtual void LoadScene() + { + switch (LoadingSceneMode) + { + case LoadingSceneModes.UnityNative: + SceneManager.LoadScene (SceneName); + break; + case LoadingSceneModes.MMSceneLoadingManager: + MMSceneLoadingManager.LoadScene (SceneName); + break; + case LoadingSceneModes.MMAdditiveSceneLoadingManager: + MMAdditiveSceneLoadingManager.LoadScene(SceneName); + break; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMLoadScene.cs.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMLoadScene.cs.meta new file mode 100644 index 0000000..1a1f969 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMLoadScene.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d9251a9f35d2c384a9e26195e0c63ee9 +timeCreated: 1523971212 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingImageProgress.cs b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingImageProgress.cs new file mode 100644 index 0000000..0b44569 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingImageProgress.cs @@ -0,0 +1,33 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A very simple class, meant to be used within a MMSceneLoading screen, to update the fill amount of an Image + /// based on loading progress + /// + public class MMSceneLoadingImageProgress : MonoBehaviour + { + protected Image _image; + + /// + /// On Awake we store our Image + /// + protected virtual void Awake() + { + _image = this.gameObject.GetComponent(); + } + + /// + /// Meant to be called by the MMSceneLoadingManager, turns the progress of a load into fill amount + /// + /// + public virtual void SetProgress(float newValue) + { + _image.fillAmount = newValue; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingImageProgress.cs.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingImageProgress.cs.meta new file mode 100644 index 0000000..0bf98e2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingImageProgress.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32002db2f9b16ed45ac2cfd0f37f96e4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingTextProgress.cs b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingTextProgress.cs new file mode 100644 index 0000000..62dcd68 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingTextProgress.cs @@ -0,0 +1,46 @@ +#if MM_UI +using System.Globalization; +using UnityEngine; +using UnityEngine.UI; + +namespace MoreMountains.Tools +{ + /// + /// A very simple class, meant to be used within a MMSceneLoading screen, to update a Text + /// based on loading progress + /// + public class MMSceneLoadingTextProgress : MonoBehaviour + { + /// the value to which the progress' zero value should be remapped to + [Tooltip("the value to which the progress' zero value should be remapped to")] + public float RemapMin = 0f; + /// the value to which the progress' one value should be remapped to + [Tooltip("the value to which the progress' one value should be remapped to")] + public float RemapMax = 100f; + /// the amount of decimals to display + [Tooltip("the amount of decimals to display")] + public int NumberOfDecimals = 0; + + protected Text _text; + + /// + /// On Awake we grab our Text and store it + /// + protected virtual void Awake() + { + _text = this.gameObject.GetComponent(); + } + + /// + /// Updates the Text with the progress value + /// + /// + public virtual void SetProgress(float newValue) + { + float remappedValue = MMMaths.Remap(newValue, 0f, 1f, RemapMin, RemapMax); + float displayValue = MMMaths.RoundToDecimal(remappedValue, NumberOfDecimals); + _text.text = displayValue.ToString(CultureInfo.InvariantCulture); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingTextProgress.cs.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingTextProgress.cs.meta new file mode 100644 index 0000000..4319349 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Helpers/MMSceneLoadingTextProgress.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6b4439955a5ebf4eaa4285bc875fcc6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers.meta new file mode 100644 index 0000000..6a893e5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6878951bb6bf5594caabe18357ee3a9e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMAdditiveSceneLoadingManager.cs b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMAdditiveSceneLoadingManager.cs new file mode 100644 index 0000000..d247f3c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMAdditiveSceneLoadingManager.cs @@ -0,0 +1,681 @@ +using System; +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.SceneManagement; +using UnityEngine.Events; + +namespace MoreMountains.Tools +{ + [System.Serializable] + public class ProgressEvent : UnityEvent{} + + /// + /// A simple class used to store additive loading settings + /// + [Serializable] + public class MMAdditiveSceneLoadingManagerSettings + { + /// the possible ways to unload scenes + public enum UnloadMethods { None, ActiveScene, AllScenes }; + /// the name of the MMSceneLoadingManager scene you want to use when in additive mode + [Tooltip("the name of the MMSceneLoadingManager scene you want to use when in additive mode")] + public string LoadingSceneName = "MMAdditiveLoadingScreen"; + /// when in additive loading mode, the thread priority to apply to the loading + [Tooltip("when in additive loading mode, the thread priority to apply to the loading")] + public ThreadPriority ThreadPriority = ThreadPriority.High; + /// whether or not to make additional sanity checks (better leave this to true) + [Tooltip("whether or not to make additional sanity checks (better leave this to true)")] + public bool SecureLoad = true; + /// when in additive loading mode, whether or not to interpolate the progress bar's progress + [Tooltip("when in additive loading mode, whether or not to interpolate the progress bar's progress")] + public bool InterpolateProgress = true; + /// when in additive loading mode, when in additive loading mode, the duration (in seconds) of the delay before the entry fade + [Tooltip("when in additive loading mode, when in additive loading mode, the duration (in seconds) of the delay before the entry fade")] + public float BeforeEntryFadeDelay = 0f; + /// when in additive loading mode, the duration (in seconds) of the entry fade + [Tooltip("when in additive loading mode, the duration (in seconds) of the entry fade")] + public float EntryFadeDuration = 0.25f; + /// when in additive loading mode, the duration (in seconds) of the delay before the entry fade + [Tooltip("when in additive loading mode, the duration (in seconds) of the delay before the entry fade")] + public float AfterEntryFadeDelay = 0.1f; + /// when in additive loading mode, the duration (in seconds) of the delay before the exit fade + [Tooltip("when in additive loading mode, the duration (in seconds) of the delay before the exit fade")] + public float BeforeExitFadeDelay = 0.25f; + /// when in additive loading mode, the duration (in seconds) of the exit fade + [Tooltip("when in additive loading mode, the duration (in seconds) of the exit fade")] + public float ExitFadeDuration = 0.2f; + /// when in additive loading mode, when in additive loading mode, the tween to use to fade on entry + [Tooltip("when in additive loading mode, when in additive loading mode, the tween to use to fade on entry")] + public MMTweenType EntryFadeTween = null; + /// when in additive loading mode, the tween to use to fade on exit + [Tooltip("when in additive loading mode, the tween to use to fade on exit")] + public MMTweenType ExitFadeTween = null; + /// when in additive loading mode, the speed at which the loader's progress bar should move + [Tooltip("when in additive loading mode, the speed at which the loader's progress bar should move")] + public float ProgressBarSpeed = 5f; + /// a list of progress intervals (values should be between 0 and 1) and their associated speeds, letting you have the bar progress less linearly + [Tooltip("a list of progress intervals (values should be between 0 and 1) and their associated speeds, letting you have the bar progress less linearly")] + public List SpeedIntervals; + /// when in additive loading mode, the selective additive fade mode + [Tooltip("when in additive loading mode, the selective additive fade mode")] + public MMAdditiveSceneLoadingManager.FadeModes FadeMode = MMAdditiveSceneLoadingManager.FadeModes.FadeInThenOut; + /// the chosen way to unload scenes (none, only the active scene, all loaded scenes) + [Tooltip("the chosen way to unload scenes (none, only the active scene, all loaded scenes)")] + public UnloadMethods UnloadMethod = UnloadMethods.AllScenes; + /// the name of the anti spill scene to use when loading additively. + /// If left empty, that scene will be automatically created, but you can specify any scene to use for that. Usually you'll want your own anti spill scene to be just an empty scene, but you can customize its lighting settings for example. + [Tooltip("the name of the anti spill scene to use when loading additively." + + "If left empty, that scene will be automatically created, but you can specify any scene to use for that. Usually you'll want your own anti spill scene to be just an empty scene, but you can customize its lighting settings for example.")] + public string AntiSpillSceneName = ""; + } + + /// + /// A class used to define different interpolation speeds for specific progress intervals + /// + [Serializable] + public class MMSceneLoadingSpeedInterval + { + /// The progress interval (between 0 and 1) + public MMInterval Interval; + /// the speed at which the bar should move on that interval + public float Speed = 1f; + } + + /// + /// A class to load scenes using a loading screen instead of just the default API + /// This is a new version of the classic LoadingSceneManager (now renamed to MMSceneLoadingManager for consistency) + /// + public class MMAdditiveSceneLoadingManager : MMMonoBehaviour + { + /// The possible orders in which to play fades (depends on the fade you've set in your loading screen + public enum FadeModes { FadeInThenOut, FadeOutThenIn } + + [MMInspectorGroup("Audio Listener", true, 3)] + public AudioListener LoadingAudioListener; + + [MMInspectorGroup("Settings", true, 10)] + /// the ID on which to trigger a fade, has to match the ID on the fader in your scene + [Tooltip("the ID on which to trigger a fade, has to match the ID on the fader in your scene")] + public int FaderID = 500; + /// whether or not to output debug messages to the console + [Tooltip("whether or not to output debug messages to the console")] + public bool DebugMode = false; + + [MMInspectorGroup("Progress Events", true, 11)] + /// an event used to update progress + [Tooltip("an event used to update progress")] + public ProgressEvent SetRealtimeProgressValue; + /// an event used to update progress with interpolation + [Tooltip("an event used to update progress with interpolation")] + public ProgressEvent SetInterpolatedProgressValue; + + [MMInspectorGroup("State Events", true, 12)] + /// an event that will be invoked when the load starts + [Tooltip("an event that will be invoked when the load starts")] + public UnityEvent OnLoadStarted; + /// an event that will be invoked when the delay before the entry fade starts + [Tooltip("an event that will be invoked when the delay before the entry fade starts")] + public UnityEvent OnBeforeEntryFade; + /// an event that will be invoked when the entry fade starts + [Tooltip("an event that will be invoked when the entry fade starts")] + public UnityEvent OnEntryFade; + /// an event that will be invoked when the delay after the entry fade starts + [Tooltip("an event that will be invoked when the delay after the entry fade starts")] + public UnityEvent OnAfterEntryFade; + /// an event that will be invoked when the origin scene gets unloaded + [Tooltip("an event that will be invoked when the origin scene gets unloaded")] + public UnityEvent OnUnloadOriginScene; + /// an event that will be invoked when the destination scene starts loading + [Tooltip("an event that will be invoked when the destination scene starts loading")] + public UnityEvent OnLoadDestinationScene; + /// an event that will be invoked when the load of the destination scene is complete + [Tooltip("an event that will be invoked when the load of the destination scene is complete")] + public UnityEvent OnLoadProgressComplete; + /// an event that will be invoked when the interpolated load of the destination scene is complete + [Tooltip("an event that will be invoked when the interpolated load of the destination scene is complete")] + public UnityEvent OnInterpolatedLoadProgressComplete; + /// an event that will be invoked when the delay before the exit fade starts + [Tooltip("an event that will be invoked when the delay before the exit fade starts")] + public UnityEvent OnBeforeExitFade; + /// an event that will be invoked when the exit fade starts + [Tooltip("an event that will be invoked when the exit fade starts")] + public UnityEvent OnExitFade; + /// an event that will be invoked when the destination scene gets activated + [Tooltip("an event that will be invoked when the destination scene gets activated")] + public UnityEvent OnDestinationSceneActivation; + /// an event that will be invoked when the scene loader gets unloaded + [Tooltip("an event that will be invoked when the scene loader gets unloaded")] + public UnityEvent OnUnloadSceneLoader; + + protected static bool _interpolateProgress; + protected static float _progressInterpolationSpeed; + protected static List _speedIntervals; + protected static float _beforeEntryFadeDelay; + protected static MMTweenType _entryFadeTween; + protected static float _entryFadeDuration; + protected static float _afterEntryFadeDelay; + protected static float _beforeExitFadeDelay; + protected static MMTweenType _exitFadeTween; + protected static float _exitFadeDuration; + protected static FadeModes _fadeMode; + protected static string _sceneToLoadName = ""; + protected static string _loadingScreenSceneName; + protected static List _scenesInBuild; + protected static Scene[] _initialScenes; + protected float _loadProgress = 0f; + protected float _interpolatedLoadProgress; + protected static bool _loadingInProgress = false; + protected AsyncOperation _unloadOriginAsyncOperation; + protected AsyncOperation _loadDestinationAsyncOperation; + protected AsyncOperation _unloadLoadingAsyncOperation; + protected bool _setRealtimeProgressValueIsNull; + protected bool _setInterpolatedProgressValueIsNull; + protected const float _asyncProgressLimit = 0.9f; + protected MMSceneLoadingAntiSpill _antiSpill = new MMSceneLoadingAntiSpill(); + protected static string _antiSpillSceneName = ""; + + /// + /// Statics initialization to support enter play modes + /// + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + protected static void InitializeStatics() + { + _loadingInProgress = false; + _interpolateProgress = false; + _progressInterpolationSpeed = 0f; + _speedIntervals = new List(); + _beforeEntryFadeDelay = 0f; + _entryFadeTween = null; + _entryFadeDuration = 0f; + _afterEntryFadeDelay = 0f; + _beforeExitFadeDelay = 0f; + _exitFadeTween = null; + _exitFadeDuration = 0f; + _sceneToLoadName = ""; + _loadingScreenSceneName = ""; + _scenesInBuild = new List(); + _initialScenes = null; + _antiSpillSceneName = ""; + } + + /// + /// Call this static method to load a scene from anywhere (packed settings signature) + /// + /// + /// + public static void LoadScene(string sceneToLoadName, MMAdditiveSceneLoadingManagerSettings settings) + { + LoadScene(sceneToLoadName, settings.LoadingSceneName, settings.ThreadPriority, settings.SecureLoad, settings.InterpolateProgress, + settings.BeforeEntryFadeDelay, settings.EntryFadeDuration, settings.AfterEntryFadeDelay, settings.BeforeExitFadeDelay, + settings.ExitFadeDuration, settings.EntryFadeTween, settings.ExitFadeTween, settings.ProgressBarSpeed, settings.FadeMode, settings.UnloadMethod, settings.AntiSpillSceneName, + settings.SpeedIntervals); + } + + /// + /// Call this static method to load a scene from anywhere + /// + /// Level name. + public static void LoadScene(string sceneToLoadName, string loadingSceneName = "MMAdditiveLoadingScreen", + ThreadPriority threadPriority = ThreadPriority.High, bool secureLoad = true, + bool interpolateProgress = true, + float beforeEntryFadeDelay = 0f, + float entryFadeDuration = 0.25f, + float afterEntryFadeDelay = 0.1f, + float beforeExitFadeDelay = 0.25f, + float exitFadeDuration = 0.2f, + MMTweenType entryFadeTween = null, MMTweenType exitFadeTween = null, + float progressBarSpeed = 5f, + FadeModes fadeMode = FadeModes.FadeInThenOut, + MMAdditiveSceneLoadingManagerSettings.UnloadMethods unloadMethod = MMAdditiveSceneLoadingManagerSettings.UnloadMethods.AllScenes, + string antiSpillSceneName = "", + List speedIntervals = null) + { + if (_loadingInProgress) + { + Debug.LogError("MMLoadingSceneManagerAdditive : a request to load a new scene was emitted while a scene load was already in progress"); + return; + } + + if (entryFadeTween == null) + { + entryFadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInOutCubic); + } + + if (exitFadeTween == null) + { + exitFadeTween = new MMTweenType(MMTween.MMTweenCurve.EaseInOutCubic); + } + + if (secureLoad) + { + _scenesInBuild = MMScene.GetScenesInBuild(); + + if (!_scenesInBuild.Contains(sceneToLoadName)) + { + Debug.LogError("MMLoadingSceneManagerAdditive : impossible to load the '"+sceneToLoadName+"' scene, " + + "there is no such scene in the project's build settings."); + return; + } + if (!_scenesInBuild.Contains(loadingSceneName)) + { + Debug.LogError("MMLoadingSceneManagerAdditive : impossible to load the '"+loadingSceneName+"' scene, " + + "there is no such scene in the project's build settings."); + return; + } + } + + _loadingInProgress = true; + _initialScenes = GetScenesToUnload(unloadMethod); + + Application.backgroundLoadingPriority = threadPriority; + _sceneToLoadName = sceneToLoadName; + _loadingScreenSceneName = loadingSceneName; + _beforeEntryFadeDelay = beforeEntryFadeDelay; + _entryFadeDuration = entryFadeDuration; + _entryFadeTween = entryFadeTween; + _afterEntryFadeDelay = afterEntryFadeDelay; + _progressInterpolationSpeed = progressBarSpeed; + _beforeExitFadeDelay = beforeExitFadeDelay; + _exitFadeDuration = exitFadeDuration; + _exitFadeTween = exitFadeTween; + _fadeMode = fadeMode; + _interpolateProgress = interpolateProgress; + _antiSpillSceneName = antiSpillSceneName; + _speedIntervals = speedIntervals; + + SceneManager.LoadScene(_loadingScreenSceneName, LoadSceneMode.Additive); + } + + private static Scene[] GetScenesToUnload(MMAdditiveSceneLoadingManagerSettings.UnloadMethods unloaded) + { + + switch (unloaded) { + case MMAdditiveSceneLoadingManagerSettings.UnloadMethods.None: + _initialScenes = new Scene[0]; + break; + case MMAdditiveSceneLoadingManagerSettings.UnloadMethods.ActiveScene: + _initialScenes = new Scene[1] {SceneManager.GetActiveScene()}; + break; + default: + case MMAdditiveSceneLoadingManagerSettings.UnloadMethods.AllScenes: + _initialScenes = MMScene.GetLoadedScenes(); + break; + } + return _initialScenes; + } + + + /// + /// Starts loading the new level asynchronously + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// Initializes timescale, computes null checks, and starts the load sequence + /// + protected virtual void Initialization() + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : Initialization"); + + if (DebugMode) + { + foreach (Scene scene in _initialScenes) + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : Initial scene : " + scene.name); + } + } + + _setRealtimeProgressValueIsNull = SetRealtimeProgressValue == null; + _setInterpolatedProgressValueIsNull = SetInterpolatedProgressValue == null; + Time.timeScale = 1f; + + if ((_sceneToLoadName == "") || (_loadingScreenSceneName == "")) + { + return; + } + + StartCoroutine(LoadSequence()); + } + + /// + /// Every frame, we fill the bar smoothly according to loading progress + /// + protected virtual void Update() + { + UpdateProgress(); + } + + /// + /// Sends progress value via UnityEvents + /// + protected virtual void UpdateProgress() + { + if (!_setRealtimeProgressValueIsNull) + { + SetRealtimeProgressValue.Invoke(_loadProgress); + } + + if (_interpolateProgress) + { + _interpolatedLoadProgress = MMMaths.Approach(_interpolatedLoadProgress, _loadProgress, Time.unscaledDeltaTime * ComputeInterpolationSpeed(_interpolatedLoadProgress)); + if (!_setInterpolatedProgressValueIsNull) + { + SetInterpolatedProgressValue.Invoke(_interpolatedLoadProgress); + } + } + else + { + SetInterpolatedProgressValue.Invoke(_loadProgress); + } + } + + /// + /// Computes the interpolation speed to apply for a specific progress time + /// + /// + /// + public static float ComputeInterpolationSpeed(float t) + { + if ((_speedIntervals != null) && (_speedIntervals.Count > 0)) + { + foreach (MMSceneLoadingSpeedInterval interval in _speedIntervals) + { + if (interval.Interval.Contains(t)) + { + return interval.Speed; + } + } + } + + return _progressInterpolationSpeed; + } + + /// + /// Loads the scene to load asynchronously. + /// + protected virtual IEnumerator LoadSequence() + { + _antiSpill?.PrepareAntiFill(_sceneToLoadName, _antiSpillSceneName); + InitiateLoad(); + yield return ProcessDelayBeforeEntryFade(); + yield return EntryFade(); + yield return ProcessDelayAfterEntryFade(); + yield return UnloadOriginScenes(); + yield return LoadDestinationScene(); + yield return ProcessDelayBeforeExitFade(); + yield return DestinationSceneActivation(); + yield return ExitFade(); + yield return UnloadSceneLoader(); + } + + /// + /// Initializes counters and timescale + /// + protected virtual void InitiateLoad() + { + _loadProgress = 0f; + _interpolatedLoadProgress = 0f; + Time.timeScale = 1f; + SetAudioListener(false); + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : Initiate Load"); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.LoadStarted); + OnLoadStarted?.Invoke(); + } + + /// + /// Waits for the specified BeforeEntryFadeDelay duration + /// + /// + protected virtual IEnumerator ProcessDelayBeforeEntryFade() + { + if (_beforeEntryFadeDelay > 0f) + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : delay before entry fade, duration : " + _beforeEntryFadeDelay); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.BeforeEntryFade); + OnBeforeEntryFade?.Invoke(); + + yield return MMCoroutine.WaitForUnscaled(_beforeEntryFadeDelay); + } + } + + /// + /// Calls a fader on entry + /// + /// + protected virtual IEnumerator EntryFade() + { + if (_entryFadeDuration > 0f) + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : entry fade, duration : " + _entryFadeDuration); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.EntryFade); + OnEntryFade?.Invoke(); + + if (_fadeMode == FadeModes.FadeOutThenIn) + { + yield return null; + MMFadeOutEvent.Trigger(_entryFadeDuration, _entryFadeTween, FaderID, true); + } + else + { + yield return null; + MMFadeInEvent.Trigger(_entryFadeDuration, _entryFadeTween, FaderID, true); + } + + yield return MMCoroutine.WaitForUnscaled(_entryFadeDuration); + } + } + + /// + /// Waits for the specified AfterEntryFadeDelay + /// + /// + protected virtual IEnumerator ProcessDelayAfterEntryFade() + { + if (_afterEntryFadeDelay > 0f) + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : delay after entry fade, duration : " + _afterEntryFadeDelay); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.AfterEntryFade); + OnAfterEntryFade?.Invoke(); + + yield return MMCoroutine.WaitForUnscaled(_afterEntryFadeDelay); + } + } + + /// + /// Unloads the original scene(s) and waits for the unload to complete + /// + /// + protected virtual IEnumerator UnloadOriginScenes() + { + foreach (Scene scene in _initialScenes) + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : unload scene " + scene.name); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.UnloadOriginScene); + OnUnloadOriginScene?.Invoke(); + + if (!scene.IsValid() || !scene.isLoaded) + { + Debug.LogWarning("MMLoadingSceneManagerAdditive : invalid scene : " + scene.name); + continue; + } + + _unloadOriginAsyncOperation = SceneManager.UnloadSceneAsync(scene); + SetAudioListener(true); + while (_unloadOriginAsyncOperation.progress < _asyncProgressLimit) + { + yield return null; + } + } + } + + /// + /// Loads the destination scene + /// + /// + protected virtual IEnumerator LoadDestinationScene() + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : load destination scene"); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.LoadDestinationScene); + OnLoadDestinationScene?.Invoke(); + + _loadDestinationAsyncOperation = SceneManager.LoadSceneAsync(_sceneToLoadName, LoadSceneMode.Additive ); + _loadDestinationAsyncOperation.completed += OnLoadOperationComplete; + + _loadDestinationAsyncOperation.allowSceneActivation = false; + + while (_loadDestinationAsyncOperation.progress < _asyncProgressLimit) + { + _loadProgress = _loadDestinationAsyncOperation.progress; + yield return null; + } + + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : load progress complete"); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.LoadProgressComplete); + OnLoadProgressComplete?.Invoke(); + + // when the load is close to the end (it'll never reach it), we set it to 100% + _loadProgress = 1f; + + // we wait for the bar to be visually filled to continue + if (_interpolateProgress) + { + while (_interpolatedLoadProgress < 1f) + { + yield return null; + } + } + + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : interpolated load complete"); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.InterpolatedLoadProgressComplete); + OnInterpolatedLoadProgressComplete?.Invoke(); + } + + /// + /// Waits for BeforeExitFadeDelay seconds + /// + /// + protected virtual IEnumerator ProcessDelayBeforeExitFade() + { + if (_beforeExitFadeDelay > 0f) + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : delay before exit fade, duration : " + _beforeExitFadeDelay); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.BeforeExitFade); + OnBeforeExitFade?.Invoke(); + + yield return MMCoroutine.WaitForUnscaled(_beforeExitFadeDelay); + } + } + + /// + /// Requests a fade on exit + /// + /// + protected virtual IEnumerator ExitFade() + { + SetAudioListener(false); + if (_exitFadeDuration > 0f) + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : exit fade, duration : " + _exitFadeDuration); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.ExitFade); + OnExitFade?.Invoke(); + + if (_fadeMode == FadeModes.FadeOutThenIn) + { + MMFadeInEvent.Trigger(_exitFadeDuration, _exitFadeTween, FaderID, true); + } + else + { + MMFadeOutEvent.Trigger(_exitFadeDuration, _exitFadeTween, FaderID, true); + } + yield return MMCoroutine.WaitForUnscaled(_exitFadeDuration); + } + } + + /// + /// Activates the destination scene + /// + protected virtual IEnumerator DestinationSceneActivation() + { + yield return MMCoroutine.WaitForFrames(1); + _loadDestinationAsyncOperation.allowSceneActivation = true; + while (_loadDestinationAsyncOperation.progress < 1.0f) + { + yield return null; + } + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : activating destination scene"); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.DestinationSceneActivation); + OnDestinationSceneActivation?.Invoke(); + } + + /// + /// A method triggered when the async operation completes + /// + /// + protected virtual void OnLoadOperationComplete(AsyncOperation obj) + { + SceneManager.SetActiveScene(SceneManager.GetSceneByName(_sceneToLoadName)); + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : set active scene to " + _sceneToLoadName); + + } + + /// + /// Unloads the scene loader + /// + /// + protected virtual IEnumerator UnloadSceneLoader() + { + MMLoadingSceneDebug("MMLoadingSceneManagerAdditive : unloading scene loader"); + MMSceneLoadingManager.LoadingSceneEvent.Trigger(_sceneToLoadName, MMSceneLoadingManager.LoadingStatus.UnloadSceneLoader); + OnUnloadSceneLoader?.Invoke(); + + yield return null; // mandatory yield to avoid an unjustified warning + _unloadLoadingAsyncOperation = SceneManager.UnloadSceneAsync(_loadingScreenSceneName); + while (_unloadLoadingAsyncOperation.progress < _asyncProgressLimit) + { + yield return null; + } + } + + /// + /// Turns the loading audio listener on or off + /// + /// + protected virtual void SetAudioListener(bool state) + { + if (LoadingAudioListener != null) + { + //LoadingAudioListener.gameObject.SetActive(state); + } + } + + /// + /// On Destroy we reset our state + /// + protected virtual void OnDestroy() + { + _loadingInProgress = false; + } + + /// + /// A debug method used to output console messages, for this class only + /// + /// + protected virtual void MMLoadingSceneDebug(string message) + { + if (!DebugMode) + { + return; + } + + string output = ""; + output += "[" + Time.frameCount + "] "; + output += "[" + MMTime.FloatToTimeString(Time.time, false, true, true, true) + "] "; + output += message; + MMDebug.DebugLogInfo(output); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMAdditiveSceneLoadingManager.cs.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMAdditiveSceneLoadingManager.cs.meta new file mode 100644 index 0000000..87c95a0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMAdditiveSceneLoadingManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 85f9f16a22943814196e731ffb6b0f62 +timeCreated: 1523969843 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingAntiSpill.cs b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingAntiSpill.cs new file mode 100644 index 0000000..0531fe2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingAntiSpill.cs @@ -0,0 +1,124 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// This helper class, meant to be used by the MMAdditiveSceneLoadingManager, creates a temporary scene to store objects that might get instantiated, and empties it in the destination scene once loading is complete + /// + public class MMSceneLoadingAntiSpill + { + protected Scene _antiSpillScene; + protected Scene _destinationScene; + protected UnityAction _onActiveSceneChangedCallback; + protected string _sceneToLoadName; + protected string _antiSpillSceneName; + protected List _spillSceneRoots = new List(50); + protected static List _scenesInBuild; + + /// + /// Creates the temporary scene + /// + /// + public virtual void PrepareAntiFill(string sceneToLoadName, string antiSpillSceneName = "") + { + _destinationScene = default; + _sceneToLoadName = sceneToLoadName; + + if (antiSpillSceneName == "") + { + _antiSpillScene = SceneManager.CreateScene($"AntiSpill_{sceneToLoadName}"); + + PrepareAntiFillSetSceneActive(); + } + else + { + _scenesInBuild = MMScene.GetScenesInBuild(); + if (!_scenesInBuild.Contains(antiSpillSceneName)) + { + Debug.LogError("MMSceneLoadingAntiSpill : impossible to load the '"+antiSpillSceneName+"' scene, " + + "there is no such scene in the project's build settings."); + return; + } + + SceneManager.LoadScene(antiSpillSceneName, LoadSceneMode.Additive); + _antiSpillScene = SceneManager.GetSceneByName(antiSpillSceneName); + _antiSpillSceneName = _antiSpillScene.name; + SceneManager.sceneLoaded += PrepareAntiFillOnSceneLoaded; + } + } + + /// + /// When not creating an anti fill scene, acts once the scene has been actually created and is ready to be set active + /// This is bypassed when creating the scene + /// + /// + /// + protected virtual void PrepareAntiFillOnSceneLoaded(Scene newScene, LoadSceneMode mode) + { + if (newScene.name != _antiSpillSceneName) + { + return; + } + SceneManager.sceneLoaded -= PrepareAntiFillOnSceneLoaded; + PrepareAntiFillSetSceneActive(); + } + + /// + /// Sets the anti spill scene active + /// + protected virtual void PrepareAntiFillSetSceneActive() + { + if (_onActiveSceneChangedCallback != null) { SceneManager.activeSceneChanged -= _onActiveSceneChangedCallback; } + _onActiveSceneChangedCallback = OnActiveSceneChanged; + SceneManager.activeSceneChanged += _onActiveSceneChangedCallback; + SceneManager.SetActiveScene(_antiSpillScene); + } + + /// + /// Once the destination scene has been loaded, we catch that event and prepare to empty + /// + /// + /// + protected virtual void OnActiveSceneChanged(Scene from, Scene to) + { + if (from == _antiSpillScene) + { + SceneManager.activeSceneChanged -= _onActiveSceneChangedCallback; + _onActiveSceneChangedCallback = null; + + EmptyAntiSpillScene(); + } + } + + /// + /// Empties the contents of the anti spill scene into the destination scene + /// + protected virtual void EmptyAntiSpillScene() + { + if (_antiSpillScene.IsValid() && _antiSpillScene.isLoaded) + { + _spillSceneRoots.Clear(); + _antiSpillScene.GetRootGameObjects(_spillSceneRoots); + + _destinationScene = SceneManager.GetSceneByName(_sceneToLoadName); + + if (_spillSceneRoots.Count > 0) + { + if (_destinationScene.IsValid() && _destinationScene.isLoaded) + { + foreach (var root in _spillSceneRoots) + { + SceneManager.MoveGameObjectToScene(root, _destinationScene); + } + } + } + + SceneManager.UnloadSceneAsync(_antiSpillScene); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingAntiSpill.cs.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingAntiSpill.cs.meta new file mode 100644 index 0000000..2e91dc0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingAntiSpill.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11a82a4f9d8826e43b281ce3d781d6f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingManager.cs b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingManager.cs new file mode 100644 index 0000000..6e5f4e0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingManager.cs @@ -0,0 +1,202 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +#endif +using System.Collections; +using UnityEngine.SceneManagement; + +namespace MoreMountains.Tools +{ + /// + /// A class to load scenes using a loading screen instead of just the default API + /// This class used to be known as LoadingSceneManager, and has now been renamed to MMSceneLoadingManager for consistency + /// + public class MMSceneLoadingManager : MonoBehaviour + { + public enum LoadingStatus + { + LoadStarted, BeforeEntryFade, EntryFade, AfterEntryFade, UnloadOriginScene, LoadDestinationScene, + LoadProgressComplete, InterpolatedLoadProgressComplete, BeforeExitFade, ExitFade, DestinationSceneActivation, UnloadSceneLoader, LoadTransitionComplete + } + + public struct LoadingSceneEvent + { + public LoadingStatus Status; + public string SceneName; + public LoadingSceneEvent(string sceneName, LoadingStatus status) + { + Status = status; + SceneName = sceneName; + } + static LoadingSceneEvent e; + public static void Trigger(string sceneName, LoadingStatus status) + { + e.Status = status; + e.SceneName = sceneName; + MMEventManager.TriggerEvent(e); + } + } + + [Header("Binding")] + /// The name of the scene to load while the actual target scene is loading (usually a loading screen) + public static string LoadingScreenSceneName="LoadingScreen"; + + [Header("GameObjects")] + #if MM_UI + /// the text object where you want the loading message to be displayed + public Text LoadingText; + #endif + /// the canvas group containing the progress bar + public CanvasGroup LoadingProgressBar; + /// the canvas group containing the animation + public CanvasGroup LoadingAnimation; + /// the canvas group containing the animation to play when loading is complete + public CanvasGroup LoadingCompleteAnimation; + + [Header("Time")] + /// the duration (in seconds) of the initial fade in + public float StartFadeDuration=0.2f; + /// the speed of the progress bar + public float ProgressBarSpeed=2f; + /// the duration (in seconds) of the load complete fade out + public float ExitFadeDuration=0.2f; + /// the delay (in seconds) before leaving the scene when complete + public float LoadCompleteDelay=0.5f; + + protected AsyncOperation _asyncOperation; + protected static string _sceneToLoad = ""; + protected float _fadeDuration = 0.5f; + protected float _fillTarget=0f; + protected string _loadingTextValue; + #if MM_UI + protected Image _progressBarImage; + #endif + + protected static MMTweenType _tween; + + /// + /// Call this static method to load a scene from anywhere + /// + /// Level name. + public static void LoadScene(string sceneToLoad) + { + _sceneToLoad = sceneToLoad; + Application.backgroundLoadingPriority = ThreadPriority.High; + if (LoadingScreenSceneName!=null) + { + LoadingSceneEvent.Trigger(sceneToLoad, LoadingStatus.LoadStarted); + SceneManager.LoadScene(LoadingScreenSceneName); + } + } + + /// + /// Call this static method to load a scene from anywhere + /// + /// Level name. + public static void LoadScene(string sceneToLoad, string loadingSceneName) + { + _sceneToLoad = sceneToLoad; + Application.backgroundLoadingPriority = ThreadPriority.High; + SceneManager.LoadScene(loadingSceneName); + } + + /// + /// On Start(), we start loading the new level asynchronously + /// + protected virtual void Start() + { + _tween = new MMTweenType(MMTween.MMTweenCurve.EaseOutCubic); + #if MM_UI + _progressBarImage = LoadingProgressBar.GetComponent(); + _loadingTextValue = LoadingText.text; + #endif + if (!string.IsNullOrEmpty(_sceneToLoad)) + { + StartCoroutine(LoadAsynchronously()); + } + } + + /// + /// Every frame, we fill the bar smoothly according to loading progress + /// + protected virtual void Update() + { + Time.timeScale = 1f; + #if MM_UI + _progressBarImage.fillAmount = MMMaths.Approach(_progressBarImage.fillAmount,_fillTarget,Time.deltaTime*ProgressBarSpeed); + #endif + } + + /// + /// Loads the scene to load asynchronously. + /// + protected virtual IEnumerator LoadAsynchronously() + { + // we setup our various visual elements + LoadingSetup(); + + // we fade from black + MMFadeOutEvent.Trigger(StartFadeDuration, _tween); + yield return new WaitForSeconds(StartFadeDuration); + + // we start loading the scene + _asyncOperation = SceneManager.LoadSceneAsync(_sceneToLoad,LoadSceneMode.Single ); + _asyncOperation.allowSceneActivation = false; + + // while the scene loads, we assign its progress to a target that we'll use to fill the progress bar smoothly + while (_asyncOperation.progress < 0.9f) + { + _fillTarget = _asyncOperation.progress; + yield return null; + } + // when the load is close to the end (it'll never reach it), we set it to 100% + _fillTarget = 1f; + + // we wait for the bar to be visually filled to continue + #if MM_UI + while (_progressBarImage.fillAmount != _fillTarget) + { + yield return null; + } + #endif + + // the load is now complete, we replace the bar with the complete animation + LoadingComplete(); + yield return new WaitForSeconds(LoadCompleteDelay); + + // we fade to black + MMFadeInEvent.Trigger(ExitFadeDuration, _tween); + yield return new WaitForSeconds(ExitFadeDuration); + + // we switch to the new scene + _asyncOperation.allowSceneActivation = true; + LoadingSceneEvent.Trigger(_sceneToLoad, LoadingStatus.LoadTransitionComplete); + } + + /// + /// Sets up all visual elements, fades from black at the start + /// + protected virtual void LoadingSetup() + { + LoadingCompleteAnimation.alpha = 0; + #if MM_UI + _progressBarImage.fillAmount = 0f; + LoadingText.text = _loadingTextValue; + #endif + } + + /// + /// Triggered when the actual loading is done, replaces the progress bar with the complete animation + /// + protected virtual void LoadingComplete() + { + LoadingSceneEvent.Trigger(_sceneToLoad, LoadingStatus.InterpolatedLoadProgressComplete); + LoadingCompleteAnimation.gameObject.SetActive(true); + #if MM_UI + StartCoroutine(MMFade.FadeCanvasGroup(LoadingProgressBar,0.1f,0f)); + StartCoroutine(MMFade.FadeCanvasGroup(LoadingAnimation,0.1f,0f)); + StartCoroutine(MMFade.FadeCanvasGroup(LoadingCompleteAnimation,0.1f,1f)); + #endif + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingManager.cs.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingManager.cs.meta new file mode 100644 index 0000000..8fbf150 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Scripts/Managers/MMSceneLoadingManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5fc9302e06a3ad240a410b9264fd8e56 +timeCreated: 1523969843 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites.meta new file mode 100644 index 0000000..508fa19 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a9ccd4cbc2a90d84c97fcfa30ade6bc3 +folderAsset: yes +timeCreated: 1523910505 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.anim b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.anim new file mode 100644 index 0000000..a396892 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.anim @@ -0,0 +1,350 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LoadingAnimation + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 21300000, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.016666668 + value: {fileID: 21300002, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.033333335 + value: {fileID: 21300004, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.05 + value: {fileID: 21300006, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.06666667 + value: {fileID: 21300008, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.083333336 + value: {fileID: 21300010, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.1 + value: {fileID: 21300012, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.11666667 + value: {fileID: 21300014, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.13333334 + value: {fileID: 21300016, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.15 + value: {fileID: 21300018, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.16666667 + value: {fileID: 21300020, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.18333334 + value: {fileID: 21300022, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.2 + value: {fileID: 21300024, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.21666667 + value: {fileID: 21300026, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.23333333 + value: {fileID: 21300028, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.25 + value: {fileID: 21300030, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.26666668 + value: {fileID: 21300032, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.28333336 + value: {fileID: 21300034, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.30000004 + value: {fileID: 21300036, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.31666672 + value: {fileID: 21300038, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.3333334 + value: {fileID: 21300040, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.35000008 + value: {fileID: 21300042, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.36666676 + value: {fileID: 21300044, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.38333344 + value: {fileID: 21300046, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.40000013 + value: {fileID: 21300048, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.4166668 + value: {fileID: 21300050, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.4333335 + value: {fileID: 21300052, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.45000017 + value: {fileID: 21300054, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.46666685 + value: {fileID: 21300056, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.48333353 + value: {fileID: 21300058, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.5000002 + value: {fileID: 21300060, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.5166668 + value: {fileID: 21300062, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.5333335 + value: {fileID: 21300064, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.55000013 + value: {fileID: 21300066, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.5666668 + value: {fileID: 21300068, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.58333343 + value: {fileID: 21300070, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.6000001 + value: {fileID: 21300072, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.61666673 + value: {fileID: 21300074, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.6333334 + value: {fileID: 21300076, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.65000004 + value: {fileID: 21300078, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.6666667 + value: {fileID: 21300080, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.68333334 + value: {fileID: 21300082, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.7 + value: {fileID: 21300084, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.71666664 + value: {fileID: 21300086, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.7333333 + value: {fileID: 21300088, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.74999994 + value: {fileID: 21300090, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.7666666 + value: {fileID: 21300092, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.78333324 + value: {fileID: 21300094, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.7999999 + value: {fileID: 21300096, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.81666654 + value: {fileID: 21300098, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.8333332 + value: {fileID: 21300100, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.84999985 + value: {fileID: 21300102, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.8666665 + value: {fileID: 21300104, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.88333315 + value: {fileID: 21300106, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.8999998 + value: {fileID: 21300108, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.91666645 + value: {fileID: 21300110, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.9333331 + value: {fileID: 21300112, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.94999975 + value: {fileID: 21300114, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.9666664 + value: {fileID: 21300116, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.98333305 + value: {fileID: 21300118, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 0.9999997 + value: {fileID: 21300120, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.0166664 + value: {fileID: 21300122, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.0333331 + value: {fileID: 21300124, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.0499997 + value: {fileID: 21300126, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.0666664 + value: {fileID: 21300128, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.083333 + value: {fileID: 21300130, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.0999997 + value: {fileID: 21300132, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.1166663 + value: {fileID: 21300134, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.133333 + value: {fileID: 21300136, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.1499996 + value: {fileID: 21300138, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.1666663 + value: {fileID: 21300140, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.1833329 + value: {fileID: 21300142, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.1999996 + value: {fileID: 21300144, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.2166662 + value: {fileID: 21300146, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.2333329 + value: {fileID: 21300148, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.2499995 + value: {fileID: 21300150, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.2666662 + value: {fileID: 21300152, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.2833328 + value: {fileID: 21300154, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.2999995 + value: {fileID: 21300156, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.3166661 + value: {fileID: 21300158, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.3333328 + value: {fileID: 21300160, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.3499994 + value: {fileID: 21300162, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.3666661 + value: {fileID: 21300164, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.3833327 + value: {fileID: 21300166, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.3999994 + value: {fileID: 21300168, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.416666 + value: {fileID: 21300170, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.4333327 + value: {fileID: 21300172, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.4499993 + value: {fileID: 21300174, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.466666 + value: {fileID: 21300176, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.4833326 + value: {fileID: 21300178, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.4999993 + value: {fileID: 21300180, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.5166659 + value: {fileID: 21300182, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.5333326 + value: {fileID: 21300184, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.5499992 + value: {fileID: 21300186, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - time: 1.75 + value: {fileID: 21300090, guid: 9bd9265533309304db171aa9f916554a, type: 3} + attribute: m_Sprite + path: + classID: 114 + script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 2015549526 + script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: 21300000, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300002, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300004, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300006, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300008, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300010, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300012, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300014, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300016, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300018, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300020, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300022, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300024, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300026, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300028, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300030, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300032, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300034, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300036, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300038, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300040, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300042, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300044, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300046, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300048, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300050, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300052, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300054, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300056, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300058, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300060, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300062, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300064, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300066, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300068, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300070, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300072, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300074, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300076, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300078, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300080, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300082, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300084, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300086, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300088, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300090, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300092, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300094, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300096, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300098, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300100, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300102, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300104, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300106, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300108, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300110, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300112, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300114, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300116, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300118, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300120, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300122, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300124, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300126, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300128, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300130, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300132, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300134, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300136, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300138, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300140, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300142, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300144, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300146, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300148, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300150, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300152, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300154, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300156, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300158, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300160, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300162, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300164, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300166, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300168, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300170, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300172, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300174, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300176, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300178, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300180, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300182, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300184, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300186, guid: 9bd9265533309304db171aa9f916554a, type: 3} + - {fileID: 21300090, guid: 9bd9265533309304db171aa9f916554a, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1.7666667 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_GenerateMotionCurves: 0 + m_Events: [] diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.anim.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.anim.meta new file mode 100644 index 0000000..a311d8e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c964d0d3ffd13b4ab953b5a79d30c07 +timeCreated: 1457787477 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.controller b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.controller new file mode 100644 index 0000000..21fae81 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.controller @@ -0,0 +1,67 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LoadingAnimation + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 110722396} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &110211618 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LoadingAnimation + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 5c964d0d3ffd13b4ab953b5a79d30c07, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1107 &110722396 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 110211618} + m_Position: {x: 200, y: 0, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 110211618} diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.controller.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.controller.meta new file mode 100644 index 0000000..21b7364 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b10fa324c4770c94487f925443368d5c +timeCreated: 1457787477 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.png b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.png new file mode 100644 index 0000000..d64ec6b Binary files /dev/null and b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.png differ diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.png.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.png.meta new file mode 100644 index 0000000..1ffbbc9 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimation.png.meta @@ -0,0 +1,2490 @@ +fileFormatVersion: 2 +guid: 9bd9265533309304db171aa9f916554a +TextureImporter: + internalIDToNameTable: + - first: + 213: 21300000 + second: loading-animation_0 + - first: + 213: 21300002 + second: loading-animation_1 + - first: + 213: 21300004 + second: loading-animation_2 + - first: + 213: 21300006 + second: loading-animation_3 + - first: + 213: 21300008 + second: loading-animation_4 + - first: + 213: 21300010 + second: loading-animation_5 + - first: + 213: 21300012 + second: loading-animation_6 + - first: + 213: 21300014 + second: loading-animation_7 + - first: + 213: 21300016 + second: loading-animation_8 + - first: + 213: 21300018 + second: loading-animation_9 + - first: + 213: 21300020 + second: loading-animation_10 + - first: + 213: 21300022 + second: loading-animation_11 + - first: + 213: 21300024 + second: loading-animation_12 + - first: + 213: 21300026 + second: loading-animation_13 + - first: + 213: 21300028 + second: loading-animation_14 + - first: + 213: 21300030 + second: loading-animation_15 + - first: + 213: 21300032 + second: loading-animation_16 + - first: + 213: 21300034 + second: loading-animation_17 + - first: + 213: 21300036 + second: loading-animation_18 + - first: + 213: 21300038 + second: loading-animation_19 + - first: + 213: 21300040 + second: loading-animation_20 + - first: + 213: 21300042 + second: loading-animation_21 + - first: + 213: 21300044 + second: loading-animation_22 + - first: + 213: 21300046 + second: loading-animation_23 + - first: + 213: 21300048 + second: loading-animation_24 + - first: + 213: 21300050 + second: loading-animation_25 + - first: + 213: 21300052 + second: loading-animation_26 + - first: + 213: 21300054 + second: loading-animation_27 + - first: + 213: 21300056 + second: loading-animation_28 + - first: + 213: 21300058 + second: loading-animation_29 + - first: + 213: 21300060 + second: loading-animation_30 + - first: + 213: 21300062 + second: loading-animation_31 + - first: + 213: 21300064 + second: loading-animation_32 + - first: + 213: 21300066 + second: loading-animation_33 + - first: + 213: 21300068 + second: loading-animation_34 + - first: + 213: 21300070 + second: loading-animation_35 + - first: + 213: 21300072 + second: loading-animation_36 + - first: + 213: 21300074 + second: loading-animation_37 + - first: + 213: 21300076 + second: loading-animation_38 + - first: + 213: 21300078 + second: loading-animation_39 + - first: + 213: 21300080 + second: loading-animation_40 + - first: + 213: 21300082 + second: loading-animation_41 + - first: + 213: 21300084 + second: loading-animation_42 + - first: + 213: 21300086 + second: loading-animation_43 + - first: + 213: 21300088 + second: loading-animation_44 + - first: + 213: 21300090 + second: loading-animation_45 + - first: + 213: 21300092 + second: loading-animation_46 + - first: + 213: 21300094 + second: loading-animation_47 + - first: + 213: 21300096 + second: loading-animation_48 + - first: + 213: 21300098 + second: loading-animation_49 + - first: + 213: 21300100 + second: loading-animation_50 + - first: + 213: 21300102 + second: loading-animation_51 + - first: + 213: 21300104 + second: loading-animation_52 + - first: + 213: 21300106 + second: loading-animation_53 + - first: + 213: 21300108 + second: loading-animation_54 + - first: + 213: 21300110 + second: loading-animation_55 + - first: + 213: 21300112 + second: loading-animation_56 + - first: + 213: 21300114 + second: loading-animation_57 + - first: + 213: 21300116 + second: loading-animation_58 + - first: + 213: 21300118 + second: loading-animation_59 + - first: + 213: 21300120 + second: loading-animation_60 + - first: + 213: 21300122 + second: loading-animation_61 + - first: + 213: 21300124 + second: loading-animation_62 + - first: + 213: 21300126 + second: loading-animation_63 + - first: + 213: 21300128 + second: loading-animation_64 + - first: + 213: 21300130 + second: loading-animation_65 + - first: + 213: 21300132 + second: loading-animation_66 + - first: + 213: 21300134 + second: loading-animation_67 + - first: + 213: 21300136 + second: loading-animation_68 + - first: + 213: 21300138 + second: loading-animation_69 + - first: + 213: 21300140 + second: loading-animation_70 + - first: + 213: 21300142 + second: loading-animation_71 + - first: + 213: 21300144 + second: loading-animation_72 + - first: + 213: 21300146 + second: loading-animation_73 + - first: + 213: 21300148 + second: loading-animation_74 + - first: + 213: 21300150 + second: loading-animation_75 + - first: + 213: 21300152 + second: loading-animation_76 + - first: + 213: 21300154 + second: loading-animation_77 + - first: + 213: 21300156 + second: loading-animation_78 + - first: + 213: 21300158 + second: loading-animation_79 + - first: + 213: 21300160 + second: loading-animation_80 + - first: + 213: 21300162 + second: loading-animation_81 + - first: + 213: 21300164 + second: loading-animation_82 + - first: + 213: 21300166 + second: loading-animation_83 + - first: + 213: 21300168 + second: loading-animation_84 + - first: + 213: 21300170 + second: loading-animation_85 + - first: + 213: 21300172 + second: loading-animation_86 + - first: + 213: 21300174 + second: loading-animation_87 + - first: + 213: 21300176 + second: loading-animation_88 + - first: + 213: 21300178 + second: loading-animation_89 + - first: + 213: 21300180 + second: loading-animation_90 + - first: + 213: 21300182 + second: loading-animation_91 + - first: + 213: 21300184 + second: loading-animation_92 + - first: + 213: 21300186 + second: loading-animation_93 + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: loading-animation_0 + rect: + serializedVersion: 2 + x: 0 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 02305410000000000800000000000000 + internalID: 21300000 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_1 + rect: + serializedVersion: 2 + x: 64 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 22305410000000000800000000000000 + internalID: 21300002 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_2 + rect: + serializedVersion: 2 + x: 128 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 42305410000000000800000000000000 + internalID: 21300004 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_3 + rect: + serializedVersion: 2 + x: 192 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 62305410000000000800000000000000 + internalID: 21300006 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_4 + rect: + serializedVersion: 2 + x: 256 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 82305410000000000800000000000000 + internalID: 21300008 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_5 + rect: + serializedVersion: 2 + x: 320 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a2305410000000000800000000000000 + internalID: 21300010 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_6 + rect: + serializedVersion: 2 + x: 384 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c2305410000000000800000000000000 + internalID: 21300012 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_7 + rect: + serializedVersion: 2 + x: 448 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e2305410000000000800000000000000 + internalID: 21300014 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_8 + rect: + serializedVersion: 2 + x: 512 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 03305410000000000800000000000000 + internalID: 21300016 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_9 + rect: + serializedVersion: 2 + x: 576 + y: 960 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 23305410000000000800000000000000 + internalID: 21300018 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_10 + rect: + serializedVersion: 2 + x: 0 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 43305410000000000800000000000000 + internalID: 21300020 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_11 + rect: + serializedVersion: 2 + x: 64 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 63305410000000000800000000000000 + internalID: 21300022 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_12 + rect: + serializedVersion: 2 + x: 128 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 83305410000000000800000000000000 + internalID: 21300024 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_13 + rect: + serializedVersion: 2 + x: 192 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a3305410000000000800000000000000 + internalID: 21300026 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_14 + rect: + serializedVersion: 2 + x: 256 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c3305410000000000800000000000000 + internalID: 21300028 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_15 + rect: + serializedVersion: 2 + x: 320 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e3305410000000000800000000000000 + internalID: 21300030 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_16 + rect: + serializedVersion: 2 + x: 384 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 04305410000000000800000000000000 + internalID: 21300032 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_17 + rect: + serializedVersion: 2 + x: 448 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 24305410000000000800000000000000 + internalID: 21300034 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_18 + rect: + serializedVersion: 2 + x: 512 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 44305410000000000800000000000000 + internalID: 21300036 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_19 + rect: + serializedVersion: 2 + x: 576 + y: 896 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 64305410000000000800000000000000 + internalID: 21300038 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_20 + rect: + serializedVersion: 2 + x: 0 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 84305410000000000800000000000000 + internalID: 21300040 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_21 + rect: + serializedVersion: 2 + x: 64 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a4305410000000000800000000000000 + internalID: 21300042 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_22 + rect: + serializedVersion: 2 + x: 128 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c4305410000000000800000000000000 + internalID: 21300044 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_23 + rect: + serializedVersion: 2 + x: 192 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e4305410000000000800000000000000 + internalID: 21300046 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_24 + rect: + serializedVersion: 2 + x: 256 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 05305410000000000800000000000000 + internalID: 21300048 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_25 + rect: + serializedVersion: 2 + x: 320 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 25305410000000000800000000000000 + internalID: 21300050 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_26 + rect: + serializedVersion: 2 + x: 384 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 45305410000000000800000000000000 + internalID: 21300052 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_27 + rect: + serializedVersion: 2 + x: 448 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 65305410000000000800000000000000 + internalID: 21300054 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_28 + rect: + serializedVersion: 2 + x: 512 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 85305410000000000800000000000000 + internalID: 21300056 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_29 + rect: + serializedVersion: 2 + x: 576 + y: 832 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a5305410000000000800000000000000 + internalID: 21300058 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_30 + rect: + serializedVersion: 2 + x: 0 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c5305410000000000800000000000000 + internalID: 21300060 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_31 + rect: + serializedVersion: 2 + x: 64 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e5305410000000000800000000000000 + internalID: 21300062 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_32 + rect: + serializedVersion: 2 + x: 128 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 06305410000000000800000000000000 + internalID: 21300064 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_33 + rect: + serializedVersion: 2 + x: 192 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 26305410000000000800000000000000 + internalID: 21300066 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_34 + rect: + serializedVersion: 2 + x: 256 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 46305410000000000800000000000000 + internalID: 21300068 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_35 + rect: + serializedVersion: 2 + x: 320 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 66305410000000000800000000000000 + internalID: 21300070 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_36 + rect: + serializedVersion: 2 + x: 384 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 86305410000000000800000000000000 + internalID: 21300072 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_37 + rect: + serializedVersion: 2 + x: 448 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a6305410000000000800000000000000 + internalID: 21300074 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_38 + rect: + serializedVersion: 2 + x: 512 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c6305410000000000800000000000000 + internalID: 21300076 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_39 + rect: + serializedVersion: 2 + x: 576 + y: 768 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e6305410000000000800000000000000 + internalID: 21300078 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_40 + rect: + serializedVersion: 2 + x: 0 + y: 704 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 07305410000000000800000000000000 + internalID: 21300080 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_41 + rect: + serializedVersion: 2 + x: 64 + y: 704 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 27305410000000000800000000000000 + internalID: 21300082 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_42 + rect: + serializedVersion: 2 + x: 128 + y: 704 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 47305410000000000800000000000000 + internalID: 21300084 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_43 + rect: + serializedVersion: 2 + x: 192 + y: 704 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 67305410000000000800000000000000 + internalID: 21300086 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_44 + rect: + serializedVersion: 2 + x: 256 + y: 704 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 87305410000000000800000000000000 + internalID: 21300088 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_45 + rect: + serializedVersion: 2 + x: 320 + y: 704 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a7305410000000000800000000000000 + internalID: 21300090 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_46 + rect: + serializedVersion: 2 + x: 512 + y: 704 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c7305410000000000800000000000000 + internalID: 21300092 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_47 + rect: + serializedVersion: 2 + x: 576 + y: 704 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e7305410000000000800000000000000 + internalID: 21300094 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_48 + rect: + serializedVersion: 2 + x: 0 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 08305410000000000800000000000000 + internalID: 21300096 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_49 + rect: + serializedVersion: 2 + x: 64 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 28305410000000000800000000000000 + internalID: 21300098 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_50 + rect: + serializedVersion: 2 + x: 128 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 48305410000000000800000000000000 + internalID: 21300100 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_51 + rect: + serializedVersion: 2 + x: 192 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 68305410000000000800000000000000 + internalID: 21300102 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_52 + rect: + serializedVersion: 2 + x: 256 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 88305410000000000800000000000000 + internalID: 21300104 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_53 + rect: + serializedVersion: 2 + x: 320 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a8305410000000000800000000000000 + internalID: 21300106 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_54 + rect: + serializedVersion: 2 + x: 384 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c8305410000000000800000000000000 + internalID: 21300108 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_55 + rect: + serializedVersion: 2 + x: 448 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e8305410000000000800000000000000 + internalID: 21300110 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_56 + rect: + serializedVersion: 2 + x: 512 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 09305410000000000800000000000000 + internalID: 21300112 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_57 + rect: + serializedVersion: 2 + x: 576 + y: 640 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 29305410000000000800000000000000 + internalID: 21300114 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_58 + rect: + serializedVersion: 2 + x: 0 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 49305410000000000800000000000000 + internalID: 21300116 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_59 + rect: + serializedVersion: 2 + x: 64 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 69305410000000000800000000000000 + internalID: 21300118 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_60 + rect: + serializedVersion: 2 + x: 128 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 89305410000000000800000000000000 + internalID: 21300120 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_61 + rect: + serializedVersion: 2 + x: 192 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a9305410000000000800000000000000 + internalID: 21300122 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_62 + rect: + serializedVersion: 2 + x: 256 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c9305410000000000800000000000000 + internalID: 21300124 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_63 + rect: + serializedVersion: 2 + x: 320 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e9305410000000000800000000000000 + internalID: 21300126 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_64 + rect: + serializedVersion: 2 + x: 384 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 0a305410000000000800000000000000 + internalID: 21300128 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_65 + rect: + serializedVersion: 2 + x: 448 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2a305410000000000800000000000000 + internalID: 21300130 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_66 + rect: + serializedVersion: 2 + x: 512 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4a305410000000000800000000000000 + internalID: 21300132 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_67 + rect: + serializedVersion: 2 + x: 576 + y: 576 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6a305410000000000800000000000000 + internalID: 21300134 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_68 + rect: + serializedVersion: 2 + x: 0 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8a305410000000000800000000000000 + internalID: 21300136 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_69 + rect: + serializedVersion: 2 + x: 64 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: aa305410000000000800000000000000 + internalID: 21300138 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_70 + rect: + serializedVersion: 2 + x: 128 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ca305410000000000800000000000000 + internalID: 21300140 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_71 + rect: + serializedVersion: 2 + x: 192 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ea305410000000000800000000000000 + internalID: 21300142 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_72 + rect: + serializedVersion: 2 + x: 256 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 0b305410000000000800000000000000 + internalID: 21300144 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_73 + rect: + serializedVersion: 2 + x: 320 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2b305410000000000800000000000000 + internalID: 21300146 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_74 + rect: + serializedVersion: 2 + x: 384 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4b305410000000000800000000000000 + internalID: 21300148 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_75 + rect: + serializedVersion: 2 + x: 448 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6b305410000000000800000000000000 + internalID: 21300150 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_76 + rect: + serializedVersion: 2 + x: 512 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8b305410000000000800000000000000 + internalID: 21300152 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_77 + rect: + serializedVersion: 2 + x: 576 + y: 512 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ab305410000000000800000000000000 + internalID: 21300154 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_78 + rect: + serializedVersion: 2 + x: 0 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: cb305410000000000800000000000000 + internalID: 21300156 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_79 + rect: + serializedVersion: 2 + x: 64 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: eb305410000000000800000000000000 + internalID: 21300158 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_80 + rect: + serializedVersion: 2 + x: 128 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 0c305410000000000800000000000000 + internalID: 21300160 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_81 + rect: + serializedVersion: 2 + x: 192 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2c305410000000000800000000000000 + internalID: 21300162 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_82 + rect: + serializedVersion: 2 + x: 256 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4c305410000000000800000000000000 + internalID: 21300164 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_83 + rect: + serializedVersion: 2 + x: 320 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6c305410000000000800000000000000 + internalID: 21300166 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_84 + rect: + serializedVersion: 2 + x: 384 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8c305410000000000800000000000000 + internalID: 21300168 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_85 + rect: + serializedVersion: 2 + x: 448 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ac305410000000000800000000000000 + internalID: 21300170 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_86 + rect: + serializedVersion: 2 + x: 512 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: cc305410000000000800000000000000 + internalID: 21300172 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_87 + rect: + serializedVersion: 2 + x: 576 + y: 448 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ec305410000000000800000000000000 + internalID: 21300174 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_88 + rect: + serializedVersion: 2 + x: 0 + y: 384 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 0d305410000000000800000000000000 + internalID: 21300176 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_89 + rect: + serializedVersion: 2 + x: 64 + y: 384 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 2d305410000000000800000000000000 + internalID: 21300178 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_90 + rect: + serializedVersion: 2 + x: 128 + y: 384 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 4d305410000000000800000000000000 + internalID: 21300180 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_91 + rect: + serializedVersion: 2 + x: 192 + y: 384 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 6d305410000000000800000000000000 + internalID: 21300182 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_92 + rect: + serializedVersion: 2 + x: 256 + y: 384 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 8d305410000000000800000000000000 + internalID: 21300184 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: loading-animation_93 + rect: + serializedVersion: 2 + x: 320 + y: 384 + width: 64 + height: 64 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: ad305410000000000800000000000000 + internalID: 21300186 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + loading-animation_0: 21300000 + loading-animation_1: 21300002 + loading-animation_10: 21300020 + loading-animation_11: 21300022 + loading-animation_12: 21300024 + loading-animation_13: 21300026 + loading-animation_14: 21300028 + loading-animation_15: 21300030 + loading-animation_16: 21300032 + loading-animation_17: 21300034 + loading-animation_18: 21300036 + loading-animation_19: 21300038 + loading-animation_2: 21300004 + loading-animation_20: 21300040 + loading-animation_21: 21300042 + loading-animation_22: 21300044 + loading-animation_23: 21300046 + loading-animation_24: 21300048 + loading-animation_25: 21300050 + loading-animation_26: 21300052 + loading-animation_27: 21300054 + loading-animation_28: 21300056 + loading-animation_29: 21300058 + loading-animation_3: 21300006 + loading-animation_30: 21300060 + loading-animation_31: 21300062 + loading-animation_32: 21300064 + loading-animation_33: 21300066 + loading-animation_34: 21300068 + loading-animation_35: 21300070 + loading-animation_36: 21300072 + loading-animation_37: 21300074 + loading-animation_38: 21300076 + loading-animation_39: 21300078 + loading-animation_4: 21300008 + loading-animation_40: 21300080 + loading-animation_41: 21300082 + loading-animation_42: 21300084 + loading-animation_43: 21300086 + loading-animation_44: 21300088 + loading-animation_45: 21300090 + loading-animation_46: 21300092 + loading-animation_47: 21300094 + loading-animation_48: 21300096 + loading-animation_49: 21300098 + loading-animation_5: 21300010 + loading-animation_50: 21300100 + loading-animation_51: 21300102 + loading-animation_52: 21300104 + loading-animation_53: 21300106 + loading-animation_54: 21300108 + loading-animation_55: 21300110 + loading-animation_56: 21300112 + loading-animation_57: 21300114 + loading-animation_58: 21300116 + loading-animation_59: 21300118 + loading-animation_6: 21300012 + loading-animation_60: 21300120 + loading-animation_61: 21300122 + loading-animation_62: 21300124 + loading-animation_63: 21300126 + loading-animation_64: 21300128 + loading-animation_65: 21300130 + loading-animation_66: 21300132 + loading-animation_67: 21300134 + loading-animation_68: 21300136 + loading-animation_69: 21300138 + loading-animation_7: 21300014 + loading-animation_70: 21300140 + loading-animation_71: 21300142 + loading-animation_72: 21300144 + loading-animation_73: 21300146 + loading-animation_74: 21300148 + loading-animation_75: 21300150 + loading-animation_76: 21300152 + loading-animation_77: 21300154 + loading-animation_78: 21300156 + loading-animation_79: 21300158 + loading-animation_8: 21300016 + loading-animation_80: 21300160 + loading-animation_81: 21300162 + loading-animation_82: 21300164 + loading-animation_83: 21300166 + loading-animation_84: 21300168 + loading-animation_85: 21300170 + loading-animation_86: 21300172 + loading-animation_87: 21300174 + loading-animation_88: 21300176 + loading-animation_89: 21300178 + loading-animation_9: 21300018 + loading-animation_90: 21300180 + loading-animation_91: 21300182 + loading-animation_92: 21300184 + loading-animation_93: 21300186 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationComplete.anim b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationComplete.anim new file mode 100644 index 0000000..b549f30 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationComplete.anim @@ -0,0 +1,98 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LoadingAnimationComplete + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 21300000, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.016666668 + value: {fileID: 21300002, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.033333335 + value: {fileID: 21300004, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.05 + value: {fileID: 21300006, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.06666667 + value: {fileID: 21300008, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.083333336 + value: {fileID: 21300010, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.1 + value: {fileID: 21300012, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.11666667 + value: {fileID: 21300014, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.13333334 + value: {fileID: 21300016, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.15 + value: {fileID: 21300018, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - time: 0.16666667 + value: {fileID: 21300020, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + attribute: m_Sprite + path: + classID: 114 + script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 2015549526 + script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: 21300000, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300002, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300004, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300006, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300008, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300010, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300012, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300014, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300016, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300018, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + - {fileID: 21300020, guid: 109174f54ddf71a4fbe62bf30e9cf0e0, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.18333334 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_GenerateMotionCurves: 0 + m_Events: [] diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationComplete.anim.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationComplete.anim.meta new file mode 100644 index 0000000..224ebb6 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationComplete.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 72a2a5d57dd0b2448878bd2a00c7cb51 +timeCreated: 1457788899 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationCompleteAnimator.controller b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationCompleteAnimator.controller new file mode 100644 index 0000000..0a5815a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationCompleteAnimator.controller @@ -0,0 +1,67 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LoadingAnimationCompleteAnimator + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 110748334} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &110213500 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: LoadingAnimationComplete + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 72a2a5d57dd0b2448878bd2a00c7cb51, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: +--- !u!1107 &110748334 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 110213500} + m_Position: {x: 200, y: 0, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 110213500} diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationCompleteAnimator.controller.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationCompleteAnimator.controller.meta new file mode 100644 index 0000000..23abdb5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingAnimationCompleteAnimator.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f76dd8a4fa6819c46a443effc1b4abc3 +timeCreated: 1457788899 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingCompleteAnimation.png b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingCompleteAnimation.png new file mode 100644 index 0000000..7ee6150 Binary files /dev/null and b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingCompleteAnimation.png differ diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingCompleteAnimation.png.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingCompleteAnimation.png.meta new file mode 100644 index 0000000..24951ce --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingCompleteAnimation.png.meta @@ -0,0 +1,415 @@ +fileFormatVersion: 2 +guid: 109174f54ddf71a4fbe62bf30e9cf0e0 +TextureImporter: + internalIDToNameTable: + - first: + 213: 21300000 + second: LoadingCompleteAnimation_0 + - first: + 213: 21300002 + second: LoadingCompleteAnimation_1 + - first: + 213: 21300004 + second: LoadingCompleteAnimation_2 + - first: + 213: 21300006 + second: LoadingCompleteAnimation_3 + - first: + 213: 21300008 + second: LoadingCompleteAnimation_4 + - first: + 213: 21300010 + second: LoadingCompleteAnimation_5 + - first: + 213: 21300012 + second: LoadingCompleteAnimation_6 + - first: + 213: 21300014 + second: LoadingCompleteAnimation_7 + - first: + 213: 21300016 + second: LoadingCompleteAnimation_8 + - first: + 213: 21300018 + second: LoadingCompleteAnimation_9 + - first: + 213: 21300020 + second: LoadingCompleteAnimation_10 + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: LoadingCompleteAnimation_0 + rect: + serializedVersion: 2 + x: 0 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 02305410000000000800000000000000 + internalID: 21300000 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_1 + rect: + serializedVersion: 2 + x: 256 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 22305410000000000800000000000000 + internalID: 21300002 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_2 + rect: + serializedVersion: 2 + x: 512 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 42305410000000000800000000000000 + internalID: 21300004 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_3 + rect: + serializedVersion: 2 + x: 0 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 62305410000000000800000000000000 + internalID: 21300006 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_4 + rect: + serializedVersion: 2 + x: 256 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 82305410000000000800000000000000 + internalID: 21300008 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_5 + rect: + serializedVersion: 2 + x: 512 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a2305410000000000800000000000000 + internalID: 21300010 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_6 + rect: + serializedVersion: 2 + x: 0 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c2305410000000000800000000000000 + internalID: 21300012 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_7 + rect: + serializedVersion: 2 + x: 256 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e2305410000000000800000000000000 + internalID: 21300014 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_8 + rect: + serializedVersion: 2 + x: 512 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 03305410000000000800000000000000 + internalID: 21300016 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_9 + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 23305410000000000800000000000000 + internalID: 21300018 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: LoadingCompleteAnimation_10 + rect: + serializedVersion: 2 + x: 256 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 43305410000000000800000000000000 + internalID: 21300020 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + LoadingCompleteAnimation_0: 21300000 + LoadingCompleteAnimation_1: 21300002 + LoadingCompleteAnimation_10: 21300020 + LoadingCompleteAnimation_2: 21300004 + LoadingCompleteAnimation_3: 21300006 + LoadingCompleteAnimation_4: 21300008 + LoadingCompleteAnimation_5: 21300010 + LoadingCompleteAnimation_6: 21300012 + LoadingCompleteAnimation_7: 21300014 + LoadingCompleteAnimation_8: 21300016 + LoadingCompleteAnimation_9: 21300018 + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingProgressBar.png b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingProgressBar.png new file mode 100644 index 0000000..63fb914 Binary files /dev/null and b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingProgressBar.png differ diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingProgressBar.png.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingProgressBar.png.meta new file mode 100644 index 0000000..7c0051c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/LoadingProgressBar.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 553f615332baa0d4a842d5600f824551 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/MoreMountainsLogo.png b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/MoreMountainsLogo.png new file mode 100644 index 0000000..1bd7b22 Binary files /dev/null and b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/MoreMountainsLogo.png differ diff --git a/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/MoreMountainsLogo.png.meta b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/MoreMountainsLogo.png.meta new file mode 100644 index 0000000..742e7b2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSceneLoading/Sprites/MoreMountainsLogo.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: a5240da7fff0bf34da21c7edff42b1d4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSingletons.meta b/Assets/Feel/MMTools/Core/MMSingletons.meta new file mode 100644 index 0000000..4d16135 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a20ac18b7fa74b448a1d36eaf441d80c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentHumbleSingleton.cs b/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentHumbleSingleton.cs new file mode 100644 index 0000000..adfd30f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentHumbleSingleton.cs @@ -0,0 +1,85 @@ +using UnityEngine; +using System; + +namespace MoreMountains.Tools +{ + /// + /// Persistent humble singleton, basically a classic singleton but will destroy any other older components of the same type it finds on awake + /// + public class MMPersistentHumbleSingleton : MonoBehaviour where T : Component + { + /// whether or not this singleton already has an instance + public static bool HasInstance => _instance != null; + public static T Current => _instance; + + protected static T _instance; + + /// the timestamp at which this singleton got initialized + [MMReadOnly] + public float InitializationTime; + + /// + /// Singleton design pattern + /// + /// The instance. + public static T Instance + { + get + { + if (_instance == null) + { + _instance = FindObjectOfType (); + if (_instance == null) + { + GameObject obj = new GameObject (); + obj.hideFlags = HideFlags.HideAndDontSave; + obj.name = typeof(T).Name + "_AutoCreated"; + _instance = obj.AddComponent (); + } + } + return _instance; + } + } + + /// + /// On awake, we check if there's already a copy of the object in the scene. If there's one, we destroy it. + /// + protected virtual void Awake () + { + InitializeSingleton(); + } + + /// + /// Initializes the singleton. + /// + protected virtual void InitializeSingleton() + { + if (!Application.isPlaying) + { + return; + } + + InitializationTime = Time.time; + + DontDestroyOnLoad (this.gameObject); + // we check for existing objects of the same type + T[] check = FindObjectsOfType(); + foreach (T searched in check) + { + if (searched!=this) + { + // if we find another object of the same type (not this), and if it's older than our current object, we destroy it. + if (searched.GetComponent>().InitializationTime < InitializationTime) + { + Destroy (searched.gameObject); + } + } + } + + if (_instance == null) + { + _instance = this as T; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentHumbleSingleton.cs.meta b/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentHumbleSingleton.cs.meta new file mode 100644 index 0000000..c208444 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentHumbleSingleton.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1069bbd270ccb95489ac88d734abbf9e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentSingleton.cs b/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentSingleton.cs new file mode 100644 index 0000000..5d77c35 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentSingleton.cs @@ -0,0 +1,84 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Persistent singleton. + /// + public class MMPersistentSingleton : MonoBehaviour where T : Component + { + [Header("Persistent Singleton")] + /// if this is true, this singleton will auto detach if it finds itself parented on awake + [Tooltip("if this is true, this singleton will auto detach if it finds itself parented on awake")] + public bool AutomaticallyUnparentOnAwake = true; + + public static bool HasInstance => _instance != null; + public static T Current => _instance; + + protected static T _instance; + protected bool _enabled; + + /// + /// Singleton design pattern + /// + /// The instance. + public static T Instance + { + get + { + if (_instance == null) + { + _instance = FindObjectOfType (); + if (_instance == null) + { + GameObject obj = new GameObject (); + obj.name = typeof(T).Name + "_AutoCreated"; + _instance = obj.AddComponent (); + } + } + return _instance; + } + } + + /// + /// On awake, we check if there's already a copy of the object in the scene. If there's one, we destroy it. + /// + protected virtual void Awake () + { + InitializeSingleton(); + } + + /// + /// Initializes the singleton. + /// + protected virtual void InitializeSingleton() + { + if (!Application.isPlaying) + { + return; + } + + if (AutomaticallyUnparentOnAwake) + { + this.transform.SetParent(null); + } + + if (_instance == null) + { + //If I am the first instance, make me the Singleton + _instance = this as T; + DontDestroyOnLoad (transform.gameObject); + _enabled = true; + } + else + { + //If a Singleton already exists and you find + //another reference in scene, destroy it! + if(this != _instance) + { + Destroy(this.gameObject); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentSingleton.cs.meta b/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentSingleton.cs.meta new file mode 100644 index 0000000..cdfccb4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons/MMPersistentSingleton.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32ed9853196ac60439e759122c98a09f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Feel/MMTools/Core/MMSingletons/MMReferencedScriptableObject.cs b/Assets/Feel/MMTools/Core/MMSingletons/MMReferencedScriptableObject.cs new file mode 100644 index 0000000..80b0cb3 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons/MMReferencedScriptableObject.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Auto-referenced ScriptableObject instances of type T + /// An example usage for ReferenceHolder that can be used with any class type + /// + public class MMReferencedScriptableObject : ScriptableObject where T : ScriptableObject + { + private MMReferenceHolder _instances; + protected virtual T Typed => _typed = _typed ?? this as T; private T _typed; + + protected virtual void OnReferenced() {} + protected virtual void OnEnable() + { + _instances.Reference(Typed); + OnReferenced(); + // MMDebug.DebugLogInfo(ReferenceHolder.Any != null, this); + } + + protected virtual void OnDisposed() {} + protected virtual void OnDisable() + { + _instances.Dispose(); + OnDisposed(); + // MMDebug.DebugLogInfo(ReferenceHolder.Any != null); + } + } + + // using WeakReference to let GC collect those once Engine does not use them anymore + public struct MMReferenceHolder : IDisposable where T : class + { + private static List> _instances = new List>(2); + + private WeakReference _instance; + public void Reference(T instance, bool cleanUp = false) + { + _instances = _instances ?? new List>(1); + if(cleanUp) CleanUp(); + if (instance != null) + { + _instance = new WeakReference(instance); + _instances.Add(_instance); // always adding at the end, to keep it cheap, do a CleanUp if needed + } + } + public void Dispose() + { + if (_instance != null) _instances?.Remove(_instance); + } + + public static void CleanUp() => RepackNonNullReferences(); + static void RepackNonNullReferences() + { + if (_instances == null) return; + for(int n=_instances.Count-1; n >=0; --n) + { + if (!_instances[n].TryGetTarget(out T target)) + { + _instances.RemoveAt(n); + } + } + } + + public static T Any => _instances != null && _instances.Count > 0 && _instances[0].TryGetTarget(out T target) ? target : null; + public static IEnumerator All + { + get + { + if (_instances == null) yield break; + foreach (var inst in _instances) + { + if (inst.TryGetTarget(out T target)) + { + yield return target; + } + } + } + } + + public static T First(System.Func selector) + { + if (_instances == null) return null; + if (selector == null) return Any; + foreach (var inst in _instances) + { + if (inst.TryGetTarget(out T target) && selector(target)) + { + return target; + } + } + return null; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSingletons/MMReferencedScriptableObject.cs.meta b/Assets/Feel/MMTools/Core/MMSingletons/MMReferencedScriptableObject.cs.meta new file mode 100644 index 0000000..a1b9cc4 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons/MMReferencedScriptableObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cfb03c2bcbc7bd64fbf6cc6081b9c441 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMSingletons/MMSingleton.cs b/Assets/Feel/MMTools/Core/MMSingletons/MMSingleton.cs new file mode 100644 index 0000000..01785f7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons/MMSingleton.cs @@ -0,0 +1,58 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Singleton pattern. + /// + public class MMSingleton : MonoBehaviour where T : Component + { + protected static T _instance; + public static bool HasInstance => _instance != null; + public static T TryGetInstance() => HasInstance ? _instance : null; + public static T Current => _instance; + + /// + /// Singleton design pattern + /// + /// The instance. + public static T Instance + { + get + { + if (_instance == null) + { + _instance = FindObjectOfType (); + if (_instance == null) + { + GameObject obj = new GameObject (); + obj.name = typeof(T).Name + "_AutoCreated"; + _instance = obj.AddComponent (); + } + } + return _instance; + } + } + + /// + /// On awake, we initialize our instance. Make sure to call base.Awake() in override if you need awake. + /// + protected virtual void Awake () + { + InitializeSingleton(); + } + + /// + /// Initializes the singleton. + /// + protected virtual void InitializeSingleton() + { + if (!Application.isPlaying) + { + return; + } + + _instance = this as T; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMSingletons/MMSingleton.cs.meta b/Assets/Feel/MMTools/Core/MMSingletons/MMSingleton.cs.meta new file mode 100644 index 0000000..ee9167f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMSingletons/MMSingleton.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5dbb0d969791b2a4f991754c03cf2579 +timeCreated: 1462623191 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMStateMachine.meta b/Assets/Feel/MMTools/Core/MMStateMachine.meta new file mode 100644 index 0000000..f5cef19 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMStateMachine.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5312153b93037ad43a3e6b295af07c93 +folderAsset: yes +timeCreated: 1523893762 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMStateMachine/MMStateMachine.cs b/Assets/Feel/MMTools/Core/MMStateMachine/MMStateMachine.cs new file mode 100644 index 0000000..3b53916 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMStateMachine/MMStateMachine.cs @@ -0,0 +1,145 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + public struct MMStateChangeEvent where T: struct, IComparable, IConvertible, IFormattable + { + public GameObject Target; + public MMStateMachine TargetStateMachine; + public T NewState; + public T PreviousState; + + public MMStateChangeEvent(MMStateMachine stateMachine) + { + Target = stateMachine.Target; + TargetStateMachine = stateMachine; + NewState = stateMachine.CurrentState; + PreviousState = stateMachine.PreviousState; + } + } + + /// + /// Public interface for the state machine. + /// + public interface MMIStateMachine + { + bool TriggerEvents { get; set; } + } + + /// + /// StateMachine manager, designed with simplicity in mind (as simple as a state machine can be anyway). + /// To use it, you need an enum. For example : public enum CharacterConditions { Normal, ControlledMovement, Frozen, Paused, Dead } + /// Declare it like so : public StateMachine ConditionStateMachine; + /// Initialize it like that : ConditionStateMachine = new StateMachine(); + /// Then from anywhere, all you need to do is update its state when needed, like that for example : ConditionStateMachine.ChangeState(CharacterConditions.Dead); + /// The state machine will store for you its current and previous state, accessible at all times, and will also optionnally trigger events on enter/exit of these states. + /// + public class MMStateMachine : MMIStateMachine where T : struct, IComparable, IConvertible, IFormattable + { + /// If you set TriggerEvents to true, the state machine will trigger events when entering and exiting a state. + /// Additionnally, it has options to trigger events on state change that can be listened to from any listener, without a delegate's hard binding, like so : + /// let's assume in some class we have a public MMStateMachine MovementState, and we use that to track the state of a moving character (idle, walking, running etc) + /// in any other class, we could do : + /// public class TestListener : MonoBehaviour, MMEventListener> + /// { + /// // triggered every time a state change event occurs + /// public void OnMMEvent(MMStateChangeEvent stateChangeEvent) + /// { + /// if (stateChangeEvent.NewState == CharacterStates.MovementStates.Crawling) + /// { + /// //do something - in a real life scenario you'd probably make sure you have the right target, etc. + /// } + /// } + /// + /// private void OnEnable() // on enable we start listening for these events + /// { + /// MMEventManager.AddListener>(this); + /// } + /// + /// private void OnDisable() // on disable we stop listening for these events + /// { + /// MMEventManager.RemoveListener>(this); + /// } + /// } + /// Now every time this character's movement state changes, the OnMMEvent method will be called, and you can do whatever you want with it. + /// + /// whether or not this state machine broadcasts events + public virtual bool TriggerEvents { get; set; } + /// the name of the target gameobject + public GameObject Target; + /// the current character's movement state + public virtual T CurrentState { get; protected set; } + /// the character's movement state before entering the current one + public virtual T PreviousState { get; protected set; } + + public delegate void OnStateChangeDelegate(); + /// an event you can listen to to listen locally to changes on that state machine + /// to listen to them, from any class : + /// void OnEnable() + /// { + /// yourReferenceToTheStateMachine.OnStateChange += OnStateChange; + /// } + /// void OnDisable() + /// { + /// yourReferenceToTheStateMachine.OnStateChange -= OnStateChange; + /// } + /// void OnStateChange() + /// { + /// // Do something + /// } + public OnStateChangeDelegate OnStateChange; + + /// + /// Creates a new StateMachine, with a targetName (used for events, usually use GetInstanceID()), and whether you want to use events with it or not + /// + /// Target name. + /// If set to true trigger events. + public MMStateMachine(GameObject target, bool triggerEvents) + { + this.Target = target; + this.TriggerEvents = triggerEvents; + } + + /// + /// Changes the current movement state to the one specified in the parameters, and triggers exit and enter events if needed + /// + /// New state. + public virtual void ChangeState(T newState) + { + // if the "new state" is the current one, we do nothing and exit + if (EqualityComparer.Default.Equals(newState, CurrentState)) + { + return; + } + + // we store our previous character movement state + PreviousState = CurrentState; + CurrentState = newState; + + OnStateChange?.Invoke(); + + if (TriggerEvents) + { + MMEventManager.TriggerEvent (new MMStateChangeEvent (this)); + } + } + + /// + /// Returns the character to the state it was in before its current state + /// + public virtual void RestorePreviousState() + { + // we restore our previous state + CurrentState = PreviousState; + + OnStateChange?.Invoke(); + + if (TriggerEvents) + { + MMEventManager.TriggerEvent (new MMStateChangeEvent (this)); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMStateMachine/MMStateMachine.cs.meta b/Assets/Feel/MMTools/Core/MMStateMachine/MMStateMachine.cs.meta new file mode 100644 index 0000000..7d0677b --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMStateMachine/MMStateMachine.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ab8af48f1aee1a64cb6d29e1d9b03029 +timeCreated: 1482073090 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTimeManager.meta b/Assets/Feel/MMTools/Core/MMTimeManager.meta new file mode 100644 index 0000000..44135f0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTimeManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0c217fac25ec51439a00dc45e9fb369 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTimeManager/MMTimeManager.cs b/Assets/Feel/MMTools/Core/MMTimeManager/MMTimeManager.cs new file mode 100644 index 0000000..32156b7 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTimeManager/MMTimeManager.cs @@ -0,0 +1,403 @@ +using UnityEngine; +using System.Collections.Generic; +using MoreMountains.Tools; + +namespace MoreMountains.Feedbacks +{ + /// + /// A list of the methods available to change the current score + /// + public enum MMTimeScaleMethods + { + For, + Reset, + Unfreeze + } + + /// + /// The possible modes with which to interpolate time scale. Speed is a legacy mode, the recommended mode if you want to lerp timescale would be Duration, which offers the most options and accuracy + /// + public enum MMTimeScaleLerpModes { Speed, Duration, NoInterpolation } + + /// + /// The different settings you can play with on a time scale event + /// + public struct TimeScaleProperties + { + public float TimeScale; + public float Duration; + public bool TimeScaleLerp; + public float LerpSpeed; + public bool Infinite; + public MMTimeScaleLerpModes TimeScaleLerpMode; + public MMTweenType TimeScaleLerpCurve; + public float TimeScaleLerpDuration; + public bool TimeScaleLerpOnReset; + public MMTweenType TimeScaleLerpCurveOnReset; + public float TimeScaleLerpDurationOnReset; + public override string ToString() => $"REQUESTED ts={TimeScale} time={Duration} lerp={TimeScaleLerp} speed={LerpSpeed} keep={Infinite}"; + } + + public struct MMTimeScaleEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(MMTimeScaleMethods timeScaleMethod, float timeScale, float duration, bool lerp, float lerpSpeed, bool infinite, + MMTimeScaleLerpModes timeScaleLerpMode = MMTimeScaleLerpModes.Speed, MMTweenType timeScaleLerpCurve = null, float timeScaleLerpDuration = 0.2f, + bool timeScaleLerpOnReset = false, MMTweenType timeScaleLerpCurveOnReset = null, float timeScaleLerpDurationOnReset = 0.2f); + + static public void Trigger(MMTimeScaleMethods timeScaleMethod, float timeScale, float duration, bool lerp, float lerpSpeed, bool infinite, + MMTimeScaleLerpModes timeScaleLerpMode = MMTimeScaleLerpModes.Speed, MMTweenType timeScaleLerpCurve = null, float timeScaleLerpDuration = 0.2f, + bool timeScaleLerpOnReset = false, MMTweenType timeScaleLerpCurveOnReset = null, float timeScaleLerpDurationOnReset = 0.2f) + { + OnEvent?.Invoke(timeScaleMethod, timeScale, duration, lerp, lerpSpeed, infinite, timeScaleLerpMode, timeScaleLerpCurve, timeScaleLerpDuration, timeScaleLerpOnReset, timeScaleLerpCurveOnReset, timeScaleLerpDurationOnReset); + } + } + + public struct MMFreezeFrameEvent + { + static private event Delegate OnEvent; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] private static void RuntimeInitialization() { OnEvent = null; } + static public void Register(Delegate callback) { OnEvent += callback; } + static public void Unregister(Delegate callback) { OnEvent -= callback; } + + public delegate void Delegate(float duration); + + static public void Trigger(float duration) + { + OnEvent?.Invoke(duration); + } + } + + /// + /// Put this component in your scene and it'll catch MMFreezeFrameEvents and MMTimeScaleEvents, allowing you to control the flow of time. + /// + [AddComponentMenu("More Mountains/Feedbacks/Shakers/Various/MMTimeManager")] + public class MMTimeManager : MMSingleton + { + [Header("Default Values")] + /// The reference time scale, to which the system will go back to after all time is changed + [Tooltip("The reference time scale, to which the system will go back to after all time is changed")] + public float NormalTimeScale = 1f; + + [Header("Impacted Values")] + /// whether or not to update Time.timeScale when changing time scale + [Tooltip("whether or not to update Time.timeScale when changing time scale")] + public bool UpdateTimescale = true; + /// whether or not to update Time.fixedDeltaTime when changing time scale + [Tooltip("whether or not to update Time.fixedDeltaTime when changing time scale")] + public bool UpdateFixedDeltaTime = true; + /// whether or not to update Time.maximumDeltaTime when changing time scale + [Tooltip("whether or not to update Time.maximumDeltaTime when changing time scale")] + public bool UpdateMaximumDeltaTime = true; + + [Header("Debug")] + /// the current, real time, time scale + [Tooltip("the current, real time, time scale")] + [MMReadOnly] + public float CurrentTimeScale = 1f; + /// the time scale the system is lerping towards + [Tooltip("the time scale the system is lerping towards")] + [MMReadOnly] + public float TargetTimeScale = 1f; + + [MMInspectorButton("TestButtonToSlowDownTime")] + /// a test button for the inspector + public bool TestButton; + + protected Stack _timeScaleProperties; + protected TimeScaleProperties _currentProperty; + protected TimeScaleProperties _resetProperty; + protected float _initialFixedDeltaTime = 0f; + protected float _initialMaximumDeltaTime = 0f; + protected float _startedAt; + protected bool _lerpingBackToNormal = false; + protected float _timeScaleLastTime = float.NegativeInfinity; + + /// + /// Statics initialization to support enter play modes + /// + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] + protected static void InitializeStatics() + { + _instance = null; + } + + /// + /// A method used from the inspector to test the system + /// + protected virtual void TestButtonToSlowDownTime() + { + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.For, 0.5f, 3f, true, 1f, false); + } + + /// + /// On start we initialize our stack + /// + protected override void Awake() + { + base.Awake(); + PreInitialization(); + } + + /// + /// We initialize our stack + /// + public virtual void PreInitialization() + { + _timeScaleProperties = new Stack(); + } + + /// + /// On Start we apply our timescale + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init we store our initial timescales and apply the normal timescale + /// + public virtual void Initialization() + { + TargetTimeScale = NormalTimeScale; + _initialFixedDeltaTime = Time.fixedDeltaTime; + _initialMaximumDeltaTime = Time.maximumDeltaTime; + ApplyTimeScale(NormalTimeScale); + } + + /// + /// On Update, applies the time scale and resets it if needed + /// + protected virtual void Update() + { + // if we have things in our stack, we handle them, otherwise we reset to the normal time scale + while (_timeScaleProperties.Count > 0) + { + _currentProperty = _timeScaleProperties.Peek(); + TargetTimeScale = _currentProperty.TimeScale; + _currentProperty.Duration -= Time.unscaledDeltaTime; + + _timeScaleProperties.Pop(); + _timeScaleProperties.Push(_currentProperty); + + if(_currentProperty.Duration > 0f || _currentProperty.Infinite) + { + break; // keep current property values + } + else + { + Unfreeze(); // pop current property + } + } + + if (_timeScaleProperties.Count == 0) + { + TargetTimeScale = NormalTimeScale; + } + + // we apply our time scale + if (_currentProperty.TimeScaleLerp) + { + if (_currentProperty.TimeScaleLerpMode == MMTimeScaleLerpModes.Speed) + { + if (_currentProperty.LerpSpeed <= 0) { _currentProperty.LerpSpeed = 1; } + ApplyTimeScale(Mathf.Lerp(Time.timeScale, TargetTimeScale, Time.unscaledDeltaTime * _currentProperty.LerpSpeed)); + } + else if (_currentProperty.TimeScaleLerpMode == MMTimeScaleLerpModes.Duration) + { + float timeSinceStart = Time.unscaledTime - _startedAt; + float progress = MMMaths.Remap(timeSinceStart, 0f, _currentProperty.TimeScaleLerpDuration, 0f, 1f); + float delta = _currentProperty.TimeScaleLerpCurve.Evaluate(progress); + ApplyTimeScale(Mathf.Lerp(Time.timeScale, TargetTimeScale, delta)); + if (timeSinceStart > _currentProperty.TimeScaleLerpDuration) + { + ApplyTimeScale(TargetTimeScale); + if (_lerpingBackToNormal) + { + _lerpingBackToNormal = false; + _timeScaleProperties.Pop(); + } + } + } + } + else + { + ApplyTimeScale(TargetTimeScale); + } + } + + /// + /// Modifies the time scale and time attributes to match the new time scale + /// + /// + protected virtual void ApplyTimeScale(float newValue) + { + // if the new timescale is the same as last time, we don't bother updating it + if (newValue == _timeScaleLastTime) + { + return; + } + + if (UpdateTimescale) + { + Time.timeScale = newValue; + } + + if (UpdateFixedDeltaTime && (newValue != 0)) + { + Time.fixedDeltaTime = _initialFixedDeltaTime * newValue; + } + + if (UpdateMaximumDeltaTime) + { + Time.maximumDeltaTime = _initialMaximumDeltaTime * newValue; + } + + CurrentTimeScale = Time.timeScale; + _timeScaleLastTime = CurrentTimeScale; + } + + /// + /// Resets all stacked time scale changes and simply sets the time scale, until further changes + /// + /// New time scale. + protected virtual void SetTimeScale(float newTimeScale) + { + _timeScaleProperties.Clear(); + ApplyTimeScale(newTimeScale); + } + + /// + /// Sets the time scale for the specified properties (duration, time scale, lerp or not, and lerp speed) + /// + /// Time scale properties. + protected virtual void SetTimeScale(TimeScaleProperties timeScaleProperties) + { + if (timeScaleProperties.TimeScaleLerp && + timeScaleProperties.TimeScaleLerpMode == MMTimeScaleLerpModes.Duration) + { + timeScaleProperties.Duration = Mathf.Max(timeScaleProperties.Duration, timeScaleProperties.TimeScaleLerpDuration); + timeScaleProperties.Duration = Mathf.Max(timeScaleProperties.Duration, timeScaleProperties.TimeScaleLerpDurationOnReset); + } + _startedAt = Time.unscaledTime; + _timeScaleProperties.Push(timeScaleProperties); + } + + /// + /// Resets the time scale to the stored normal time scale + /// + protected virtual void ResetTimeScale() + { + SetTimeScale(NormalTimeScale); + } + + /// + /// Resets the time scale to the last saved time scale. + /// + protected virtual void Unfreeze() + { + if (_timeScaleProperties.Count > 0) + { + _resetProperty = _timeScaleProperties.Peek(); + _timeScaleProperties.Pop(); + } + + if (_timeScaleProperties.Count == 0) + { + if (_resetProperty.TimeScaleLerp && _resetProperty.TimeScaleLerpMode == MMTimeScaleLerpModes.Duration && _resetProperty.TimeScaleLerpOnReset) + { + _lerpingBackToNormal = true; + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.For, NormalTimeScale, _resetProperty.TimeScaleLerpDuration, _resetProperty.TimeScaleLerp, + _resetProperty.LerpSpeed, true, MMTimeScaleLerpModes.Duration, _resetProperty.TimeScaleLerpCurveOnReset, _resetProperty.TimeScaleLerpDurationOnReset); + } + else + { + ResetTimeScale(); + } + } + } + + /// + /// Sets the time scale to the specified value, instantly + /// + /// New normal time scale. + public virtual void SetTimeScaleTo(float newNormalTimeScale) + { + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.For, newNormalTimeScale, 0f, false, 0f, true); + } + + /// + /// Catches TimeScaleEvents and acts on them + /// + /// MMTimeScaleEvent event. + public virtual void OnTimeScaleEvent(MMTimeScaleMethods timeScaleMethod, float timeScale, float duration, bool lerp, float lerpSpeed, bool infinite, + MMTimeScaleLerpModes timeScaleLerpMode = MMTimeScaleLerpModes.Speed, MMTweenType timeScaleLerpCurve = null, float timeScaleLerpDuration = 0.2f, + bool timeScaleLerpOnReset = false, MMTweenType timeScaleLerpCurveOnReset = null, float timeScaleLerpDurationOnReset = 0.2f) + { + TimeScaleProperties timeScaleProperty = new TimeScaleProperties(); + timeScaleProperty.TimeScale = timeScale; + timeScaleProperty.Duration = duration; + timeScaleProperty.TimeScaleLerp = lerp; + timeScaleProperty.LerpSpeed = lerpSpeed; + timeScaleProperty.Infinite = infinite; + timeScaleProperty.TimeScaleLerpOnReset = timeScaleLerpOnReset; + timeScaleProperty.TimeScaleLerpCurveOnReset = timeScaleLerpCurveOnReset; + timeScaleProperty.TimeScaleLerpDurationOnReset = timeScaleLerpDurationOnReset; + timeScaleProperty.TimeScaleLerpMode = timeScaleLerpMode; + timeScaleProperty.TimeScaleLerpCurve = timeScaleLerpCurve; + timeScaleProperty.TimeScaleLerpDuration = timeScaleLerpDuration; + + switch (timeScaleMethod) + { + case MMTimeScaleMethods.Reset: + ResetTimeScale (); + break; + + case MMTimeScaleMethods.For: + SetTimeScale (timeScaleProperty); + break; + + case MMTimeScaleMethods.Unfreeze: + Unfreeze(); + break; + } + } + + /// + /// When getting a freeze frame event we stop the time + /// + /// Freeze frame event. + public virtual void OnMMFreezeFrameEvent(float duration) + { + TimeScaleProperties properties = new TimeScaleProperties(); + properties.Duration = duration; + properties.TimeScaleLerp = false; + properties.LerpSpeed = 0f; + properties.TimeScale = 0f; + SetTimeScale(properties); + } + + /// + /// On enable, starts listening for FreezeFrame events + /// + void OnEnable() + { + MMFreezeFrameEvent.Register(OnMMFreezeFrameEvent); + MMTimeScaleEvent.Register(OnTimeScaleEvent); + } + + /// + /// On disable, stops listening for FreezeFrame events + /// + void OnDisable() + { + MMFreezeFrameEvent.Unregister(OnMMFreezeFrameEvent); + MMTimeScaleEvent.Unregister(OnTimeScaleEvent); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMTimeManager/MMTimeManager.cs.meta b/Assets/Feel/MMTools/Core/MMTimeManager/MMTimeManager.cs.meta new file mode 100644 index 0000000..78cf3b0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTimeManager/MMTimeManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f7de9ef06f04864391a928af29f4b46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTween.meta b/Assets/Feel/MMTools/Core/MMTween.meta new file mode 100644 index 0000000..e02f937 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95286aeea87533d43b44eab63c81e120 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTween/MMAnimationCurveGenerator.cs b/Assets/Feel/MMTools/Core/MMTween/MMAnimationCurveGenerator.cs new file mode 100644 index 0000000..1a14e78 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMAnimationCurveGenerator.cs @@ -0,0 +1,99 @@ +using UnityEngine; +using System; +using System.Reflection; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + /// + /// This class will let you create and save a .curves asset in the specified path + /// This asset will include curves (anti or not) from the MMTween library, to use anywhere animation curves are required + /// + public class MMAnimationCurveGenerator : MonoBehaviour + { + [Header("Save settings")] + /// the path to save the asset at + public string AnimationCurveFilePath = "Assets/MMTools/MMTween/Editor/"; + /// the name of the asset + public string AnimationCurveFileName = "MMCurves.curves"; + + [Header("Animation Curves")] + /// the dots resolution (higher is better) + public int Resolution = 50; + /// whether to generate anti curves (y goes from 1 to 0) or regular ones (y goes from 0 to 1) + public bool GenerateAntiCurves = false; + + [MMInspectorButton("GenerateAnimationCurvesAsset")] + public bool GenerateAnimationCurvesButton; + + protected Type _scriptableObjectType; + protected Keyframe _keyframe = new Keyframe(); + protected MethodInfo _addMethodInfo; + protected object[] _parameters; + + /// + /// Generates the asset and saves it at the requested path + /// + public virtual void GenerateAnimationCurvesAsset() + { + // we get the method to add to our object + _scriptableObjectType = Type.GetType("UnityEditor.CurvePresetLibrary, UnityEditor"); + _addMethodInfo = _scriptableObjectType.GetMethod("Add"); + + // we create a new instance of our curve asset + ScriptableObject curveAsset = ScriptableObject.CreateInstance(_scriptableObjectType); + + // for each type of curve, we create an animation curve + foreach (MMTween.MMTweenCurve curve in Enum.GetValues(typeof(MMTween.MMTweenCurve))) + { + CreateAnimationCurve(curveAsset, curve, Resolution, GenerateAntiCurves); + } + + // we save it to file + #if UNITY_EDITOR + AssetDatabase.CreateAsset(curveAsset, AnimationCurveFilePath + AnimationCurveFileName); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + #endif + } + + /// + /// Creates an animation curve of the specified type and resolution, and adds it to the specified asset + /// + /// + /// + /// + /// + protected virtual void CreateAnimationCurve(ScriptableObject asset, MMTween.MMTweenCurve curveType, int curveResolution, bool anti) + { + // generates an animation curve + AnimationCurve animationCurve = new AnimationCurve(); + + for (int i = 0; i < curveResolution; i++) + { + _keyframe.time = i / (curveResolution - 1f); + if (anti) + { + _keyframe.value = MMTween.Tween(_keyframe.time, 0f, 1f, 1f, 0f, curveType); + } + else + { + _keyframe.value = MMTween.Tween(_keyframe.time, 0f, 1f, 0f, 1f, curveType); + } + animationCurve.AddKey(_keyframe); + } + // smoothes the curve's tangents + for (int j = 0; j < curveResolution; j++) + { + animationCurve.SmoothTangents(j, 0f); + } + + // we add the curve to the scriptable object + _parameters = new object[] { animationCurve, curveType.ToString() }; + _addMethodInfo.Invoke(asset, _parameters); + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMTween/MMAnimationCurveGenerator.cs.meta b/Assets/Feel/MMTools/Core/MMTween/MMAnimationCurveGenerator.cs.meta new file mode 100644 index 0000000..c29d936 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMAnimationCurveGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce2656e6b00dc8d4788dc4d382e1588a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTween/MMFollowTarget.cs b/Assets/Feel/MMTools/Core/MMTween/MMFollowTarget.cs new file mode 100644 index 0000000..e33da4d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMFollowTarget.cs @@ -0,0 +1,476 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to an object and it'll get moved towards the target at update, with or without interpolation based on your settings + /// + [AddComponentMenu("More Mountains/Tools/Movement/MMFollowTarget")] + public class MMFollowTarget : MonoBehaviour + { + /// the possible update modes + public enum UpdateModes { Update, FixedUpdate, LateUpdate } + /// the possible follow modes + public enum FollowModes { RegularLerp, MMLerp, MMSpring } + /// whether to operate in world or local space + public enum PositionSpaces { World, Local } + + [Header("Follow Position")] + /// whether or not the object is currently following its target's position + public bool FollowPosition = true; + /// whether this object should follow its target on the X axis + [MMCondition("FollowPosition", true)] + public bool FollowPositionX = true; + /// whether this object should follow its target on the Y axis + [MMCondition("FollowPosition", true)] + public bool FollowPositionY = true; + /// whether this object should follow its target on the Z axis + [MMCondition("FollowPosition", true)] + public bool FollowPositionZ = true; + /// whether to operate in world or local space + [MMCondition("FollowPosition", true)] + public PositionSpaces PositionSpace = PositionSpaces.World; + + [Header("Follow Rotation")] + /// whether or not the object is currently following its target's rotation + public bool FollowRotation = true; + + [Header("Follow Scale")] + /// whether or not the object is currently following its target's rotation + public bool FollowScale = true; + /// the factor to apply to the scale when following + [MMCondition("FollowScale", true)] + public float FollowScaleFactor = 1f; + + [Header("Target")] + /// the target to follow + public Transform Target; + /// the offset to apply to the followed target + [MMCondition("FollowPosition", true)] + public Vector3 Offset; + ///whether or not to add the initial x distance to the offset + [MMCondition("FollowPosition", true)] + public bool AddInitialDistanceXToXOffset = false; + ///whether or not to add the initial y distance to the offset + [MMCondition("FollowPosition", true)] + public bool AddInitialDistanceYToYOffset = false; + ///whether or not to add the initial z distance to the offset + [MMCondition("FollowPosition", true)] + public bool AddInitialDistanceZToZOffset = false; + + [Header("Position Interpolation")] + /// whether or not we need to interpolate the movement + public bool InterpolatePosition = true; + /// the follow mode to use when following position + [MMCondition("InterpolatePosition", true)] + public FollowModes FollowPositionMode = FollowModes.MMLerp; + /// the speed at which to interpolate the follower's movement + [MMCondition("InterpolatePosition", true)] + public float FollowPositionSpeed = 10f; + /// higher values mean more damping, less spring, low values mean less damping, more spring + [MMEnumCondition("FollowPositionMode", (int)FollowModes.MMSpring)] + [Range(0.01f, 1.0f)] + public float PositionSpringDamping = 0.3f; + /// the frequency at which the spring should "vibrate", in Hz (1 : the spring will do one full period in one second) + [MMEnumCondition("FollowPositionMode", (int)FollowModes.MMSpring)] + public float PositionSpringFrequency = 3f; + + [Header("Rotation Interpolation")] + /// whether or not we need to interpolate the movement + public bool InterpolateRotation = true; + /// the follow mode to use when interpolating the rotation + [MMCondition("InterpolateRotation", true)] + public FollowModes FollowRotationMode = FollowModes.MMLerp; + /// the speed at which to interpolate the follower's rotation + [MMCondition("InterpolateRotation", true)] + public float FollowRotationSpeed = 10f; + /// higher values mean more damping, less spring, low values mean less damping, more spring + [MMEnumCondition("FollowRotationMode", (int)FollowModes.MMSpring)] + [Range(0.01f, 1.0f)] + public float RotationSpringDamping = 0.3f; + /// the frequency at which the spring should "vibrate", in Hz (1 : the spring will do one full period in one second) + [MMEnumCondition("FollowRotationMode", (int)FollowModes.MMSpring)] + public float RotationSpringFrequency = 3f; + + [Header("Scale Interpolation")] + /// whether or not we need to interpolate the scale + public bool InterpolateScale = true; + /// the follow mode to use when interpolating the scale + [MMCondition("InterpolateScale", true)] + public FollowModes FollowScaleMode = FollowModes.MMLerp; + /// the speed at which to interpolate the follower's scale + [MMCondition("InterpolateScale", true)] + public float FollowScaleSpeed = 10f; + /// higher values mean more damping, less spring, low values mean less damping, more spring + [MMEnumCondition("FollowScaleMode", (int)FollowModes.MMSpring)] + [Range(0.01f, 1.0f)] + public float ScaleSpringDamping = 0.3f; + /// the frequency at which the spring should "vibrate", in Hz (1 : the spring will do one full period in one second) + [MMEnumCondition("FollowScaleMode", (int)FollowModes.MMSpring)] + public float ScaleSpringFrequency = 3f; + + [Header("Mode")] + /// the update at which the movement happens + public UpdateModes UpdateMode = UpdateModes.Update; + /// if this is true, this component will self disable when its host game object gets disabled + public bool DisableSelfOnSetActiveFalse = false; + + [Header("Distances")] + /// whether or not to force a minimum distance between the object and its target before it starts following + public bool UseMinimumDistanceBeforeFollow = false; + /// the minimum distance to keep between the object and its target + public float MinimumDistanceBeforeFollow = 1f; + /// whether or not we want to make sure the object is never too far away from its target + public bool UseMaximumDistance = false; + /// the maximum distance at which the object can be away from its target + public float MaximumDistance = 1f; + + [Header("Anchor")] + /// if this is true, the movement will be constrained around the initial position + public bool AnchorToInitialPosition; + /// the maximum distance around the initial position at which the transform can move + [MMCondition("AnchorToInitialPosition", true)] + public float MaxDistanceToAnchor = 1f; + + protected bool _localSpace { get { return PositionSpace == PositionSpaces.Local; } } + + protected Vector3 _positionVelocity = Vector3.zero; + protected Vector3 _scaleVelocity = Vector3.zero; + protected Vector3 _rotationVelocity = Vector3.zero; + + protected Vector3 _initialPosition; + protected Vector3 _direction; + + protected Vector3 _newPosition; + protected Vector3 _newRotation; + protected Vector3 _newScale; + + protected Vector3 _newTargetPosition; + protected Quaternion _newTargetRotation; + protected Vector3 _newTargetRotationEulerAngles; + protected Vector3 _newTargetRotationEulerAnglesLastFrame; + protected Vector3 _newTargetScale; + + protected float _rotationFloatVelocity; + protected float _rotationFloatCurrent; + protected float _rotationFloatTarget; + + protected Vector3 _currentRotationEulerAngles; + protected Quaternion _rotationBeforeSpring; + + protected Quaternion _initialRotation; + protected Vector3 _lastTargetPosition; + + /// + /// On start we store our initial position + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// Initializes the follow + /// + public virtual void Initialization() + { + SetInitialPosition(); + SetOffset(); + } + + /// + /// Prevents the object from following the target anymore + /// + public virtual void StopFollowing() + { + FollowPosition = false; + } + + /// + /// Makes the object follow the target + /// + public virtual void StartFollowing() + { + FollowPosition = true; + SetInitialPosition(); + } + + /// + /// Stores the initial position + /// + protected virtual void SetInitialPosition() + { + _initialPosition = _localSpace ? this.transform.localPosition : this.transform.position; + _initialRotation = this.transform.rotation; + _lastTargetPosition = _localSpace ? this.transform.localPosition : this.transform.position; + } + + /// + /// Adds initial offset to the offset if needed + /// + protected virtual void SetOffset() + { + if (Target == null) + { + return; + } + Vector3 difference = this.transform.position - Target.transform.position; + Offset.x = AddInitialDistanceXToXOffset ? difference.x : Offset.x; + Offset.y = AddInitialDistanceYToYOffset ? difference.y : Offset.y; + Offset.z = AddInitialDistanceZToZOffset ? difference.z : Offset.z; + } + + /// + /// At update we follow our target + /// + protected virtual void Update() + { + if (Target == null) + { + return; + } + if (UpdateMode == UpdateModes.Update) + { + FollowTargetRotation(); + FollowTargetScale(); + FollowTargetPosition(); + } + } + + /// + /// At fixed update we follow our target + /// + protected virtual void FixedUpdate() + { + if (UpdateMode == UpdateModes.FixedUpdate) + { + FollowTargetRotation(); + FollowTargetScale(); + FollowTargetPosition(); + } + } + + /// + /// At late update we follow our target + /// + protected virtual void LateUpdate() + { + if (UpdateMode == UpdateModes.LateUpdate) + { + FollowTargetRotation(); + FollowTargetScale(); + FollowTargetPosition(); + } + } + + /// + /// Follows the target, lerping the position or not based on what's been defined in the inspector + /// + protected virtual void FollowTargetPosition() + { + if (Target == null) + { + return; + } + + if (!FollowPosition) + { + return; + } + + _newTargetPosition = Target.position + Offset; + if (!FollowPositionX) { _newTargetPosition.x = _initialPosition.x; } + if (!FollowPositionY) { _newTargetPosition.y = _initialPosition.y; } + if (!FollowPositionZ) { _newTargetPosition.z = _initialPosition.z; } + + float trueDistance = 0f; + _direction = (_newTargetPosition - this.transform.position).normalized; + trueDistance = Vector3.Distance(this.transform.position, _newTargetPosition); + + float interpolatedDistance = trueDistance; + if (InterpolatePosition) + { + switch (FollowPositionMode) + { + case FollowModes.MMLerp: + interpolatedDistance = MMMaths.Lerp(0f, trueDistance, FollowPositionSpeed, Time.deltaTime); + interpolatedDistance = ApplyMinMaxDistancing(trueDistance, interpolatedDistance); + this.transform.Translate(_direction * interpolatedDistance, Space.World); + break; + case FollowModes.RegularLerp: + interpolatedDistance = Mathf.Lerp(0f, trueDistance, Time.deltaTime * FollowPositionSpeed); + interpolatedDistance = ApplyMinMaxDistancing(trueDistance, interpolatedDistance); + this.transform.Translate(_direction * interpolatedDistance, Space.World); + break; + case FollowModes.MMSpring: + _newPosition = this.transform.position; + MMMaths.Spring(ref _newPosition, _newTargetPosition, ref _positionVelocity, PositionSpringDamping, PositionSpringFrequency, Time.deltaTime); + if (_localSpace) + { + this.transform.localPosition = _newPosition; + } + else + { + this.transform.position = _newPosition; + } + break; + } + } + else + { + interpolatedDistance = ApplyMinMaxDistancing(trueDistance, interpolatedDistance); + this.transform.Translate(_direction * interpolatedDistance, Space.World); + } + + if (AnchorToInitialPosition) + { + if (Vector3.Distance(this.transform.position, _initialPosition) > MaxDistanceToAnchor) + { + if (_localSpace) + { + this.transform.localPosition = _initialPosition + Vector3.ClampMagnitude(this.transform.localPosition - _initialPosition, MaxDistanceToAnchor); + } + else + { + this.transform.position = _initialPosition + Vector3.ClampMagnitude(this.transform.position - _initialPosition, MaxDistanceToAnchor); + } + } + } + } + + /// + /// Applies minimal and maximal distance rules to the interpolated distance + /// + /// + /// + /// + protected virtual float ApplyMinMaxDistancing(float trueDistance, float interpolatedDistance) + { + if (UseMinimumDistanceBeforeFollow && (trueDistance - interpolatedDistance < MinimumDistanceBeforeFollow)) + { + interpolatedDistance = 0f; + } + + if (UseMaximumDistance && (trueDistance - interpolatedDistance >= MaximumDistance)) + { + interpolatedDistance = trueDistance - MaximumDistance; + } + + return interpolatedDistance; + } + + /// + /// Makes the object follow its target's rotation + /// + protected virtual void FollowTargetRotation() + { + if (Target == null) + { + return; + } + + if (!FollowRotation) + { + return; + } + + _newTargetRotation = Target.rotation; + + _newTargetRotationEulerAngles = Target.rotation.eulerAngles; + _currentRotationEulerAngles = this.transform.rotation.eulerAngles; + + if (FollowRotationMode == FollowModes.MMSpring && (_newTargetRotationEulerAnglesLastFrame != _newTargetRotationEulerAngles)) + { + _rotationBeforeSpring = this.transform.rotation; + _rotationFloatCurrent = 0f; + _rotationFloatTarget = (Mathf.Abs(_newTargetRotation.eulerAngles.x) + + Mathf.Abs(_newTargetRotation.eulerAngles.y) + + Mathf.Abs(_newTargetRotation.z)) + - + (Mathf.Abs(_currentRotationEulerAngles.x) + + Mathf.Abs(_currentRotationEulerAngles.y) + + Mathf.Abs(_currentRotationEulerAngles.z)); + + _rotationFloatTarget = Mathf.Abs(_rotationFloatTarget); + } + + if (InterpolateRotation) + { + switch (FollowRotationMode) + { + case FollowModes.MMLerp: + this.transform.rotation = MMMaths.Lerp(this.transform.rotation, _newTargetRotation, FollowRotationSpeed, Time.deltaTime); + break; + case FollowModes.RegularLerp: + this.transform.rotation = Quaternion.Lerp(this.transform.rotation, _newTargetRotation, Time.deltaTime * FollowRotationSpeed); + break; + case FollowModes.MMSpring: + if (_rotationFloatCurrent == _rotationFloatTarget) + { + break; + } + MMMaths.Spring(ref _rotationFloatCurrent, _rotationFloatTarget, ref _rotationFloatVelocity, RotationSpringDamping, RotationSpringFrequency, Time.deltaTime); + float lerpValue = MMMaths.Remap(_rotationFloatCurrent, 0f, _rotationFloatTarget, 0f, 1f); + this.transform.rotation = Quaternion.LerpUnclamped(_rotationBeforeSpring, _newTargetRotation, lerpValue ); + break; + } + } + else + { + this.transform.rotation = _newTargetRotation; + } + + _newTargetRotationEulerAnglesLastFrame = _newTargetRotationEulerAngles; + } + + /// + /// Makes the object follow its target's scale + /// + protected virtual void FollowTargetScale() + { + if (Target == null) + { + return; + } + + if (!FollowScale) + { + return; + } + + _newTargetScale = Target.localScale * FollowScaleFactor; + + if (InterpolateScale) + { + switch (FollowScaleMode) + { + case FollowModes.MMLerp: + this.transform.localScale = MMMaths.Lerp(this.transform.localScale, _newTargetScale, FollowScaleSpeed, Time.deltaTime); + break; + case FollowModes.RegularLerp: + this.transform.localScale = Vector3.Lerp(this.transform.localScale, _newTargetScale, Time.deltaTime * FollowScaleSpeed); + break; + case FollowModes.MMSpring: + _newScale = this.transform.localScale; + MMMaths.Spring(ref _newScale, _newTargetScale, ref _scaleVelocity, ScaleSpringDamping, ScaleSpringFrequency, Time.deltaTime); + this.transform.localScale = _newScale; + break; + } + } + else + { + this.transform.localScale = _newTargetScale; + } + } + + public virtual void ChangeFollowTarget(Transform newTarget) => Target = newTarget; + + protected virtual void OnDisable() + { + if (DisableSelfOnSetActiveFalse) + { + this.enabled = false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMTween/MMFollowTarget.cs.meta b/Assets/Feel/MMTools/Core/MMTween/MMFollowTarget.cs.meta new file mode 100644 index 0000000..73016a5 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMFollowTarget.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd8ab284de1a65c49870e4b81e46134a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTween/MMSignal.cs b/Assets/Feel/MMTools/Core/MMTween/MMSignal.cs new file mode 100644 index 0000000..f2c753e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMSignal.cs @@ -0,0 +1,203 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This class lets you output the value corresponding to one of the basic signal types it contains. Useful to draw basic signal curves. + /// + public class MMSignal + { + public enum SignalType + { + Sine, + Pulse, + Sawtooth, + Square, + Triangle, + DigitalNoise, + WhiteNoise, + PerlinNoise, + ValueNoise, + AnimationCurve, + MMTween + } + + /// + /// Returns the corresponding value based on the selected SignalType for a given time value + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static float GetValue(float time, SignalType signalType, float phase, float amplitude, float frequency, float offset, bool Invert = false, AnimationCurve curve = null, MMTween.MMTweenCurve tweenCurve = MMTween.MMTweenCurve.LinearTween) + { + float value = 0f; + float invert = Invert ? -1 : 1; + float t = frequency * time + phase; + + switch (signalType) + { + case SignalType.Sine: + value = (float)Mathf.Sin(2f * Mathf.PI * t); + break; + case SignalType.Square: + value = Mathf.Sign(Mathf.Sin(2f * Mathf.PI * t)); + break; + case SignalType.Triangle: + value = 1f - 4f * (float)Mathf.Abs(Mathf.Round(t - 0.25f) - (t - 0.25f)); + break; + case SignalType.Sawtooth: + value = 2f * (t - (float)Mathf.Floor(t + 0.5f)); + break; + case SignalType.Pulse: + value = (Mathf.Abs(Mathf.Sin(2 * Mathf.PI * t)) < 1.0 - 10E-3) ? (0) : (1); + break; + case SignalType.WhiteNoise: + value = 2f * Random.Range(0,int.MaxValue) / int.MaxValue - 1f; + break; + case SignalType.DigitalNoise: + value = Random.Range(0,2); + break; + case SignalType.PerlinNoise: + value = Mathf.PerlinNoise(time * frequency, time * amplitude); + break; + case SignalType.ValueNoise: + value = ValueNoise(time, frequency) * amplitude; + break; + case SignalType.AnimationCurve: + if (curve == null) { return 0f; } + t = (t != 1f) ? t - Mathf.Floor(t) : 1f; + value = curve.Evaluate(t); + break; + case SignalType.MMTween: + t = (t != 1f) ? t - Mathf.Floor(t) : 1f; + value = MMTween.Tween(t, 0f, 1f, 0f, 1f, tweenCurve); + break; + } + + return (invert * amplitude * value + offset); + } + + public static float GetValueNormalized(float time, SignalType signalType, + float phase, float amplitude, float frequency, float offset, bool Invert = false, + AnimationCurve curve = null, MMTween.MMTweenCurve tweenCurve = MMTween.MMTweenCurve.LinearTween, + bool clamp = true, float clampMin = 0f, float clampMax = 1f, bool backAndForth = false, float backAndForthTippingPoint = 0.5f) + { + float value = 0f; + float invert = Invert ? -1 : 1; + + if (backAndForth) + { + if (time < backAndForthTippingPoint) + { + time = MMMaths.Remap(time, 0f, backAndForthTippingPoint, 0f, 1f); + } + else if (time == backAndForthTippingPoint) + { + time = 1f; + } + else if (time > backAndForthTippingPoint) + { + time = MMMaths.Remap(time, backAndForthTippingPoint, 1f, 1f, 0f); + } + } + + float t = frequency * time + phase; + + switch (signalType) + { + case SignalType.Sine: + value = (float)Mathf.Sin(2f * Mathf.PI * t); + value = MMMaths.Remap(value, -1f, 1f, 0f, 1f); + break; + case SignalType.Square: + value = Mathf.Sign(Mathf.Sin(2f * Mathf.PI * t)); + value = MMMaths.Remap(value, -1f, 1f, 0f, 1f); + break; + case SignalType.Triangle: + value = 1f - 4f * (float)Mathf.Abs(Mathf.Round(t - 0.25f) - (t - 0.25f)); + value = MMMaths.Remap(value, -1f, 1f, 0f, 1f); + break; + case SignalType.Sawtooth: + value = 2f * (t - (float)Mathf.Floor(t + 0.5f)); + value = MMMaths.Remap(value, -1f, 1f, 0f, 1f); + break; + case SignalType.Pulse: + value = (Mathf.Abs(Mathf.Sin(2 * Mathf.PI * t)) < 1.0 - 10E-3) ? (0) : (1); + break; + case SignalType.WhiteNoise: + value = 2f * Random.Range(0, int.MaxValue) / int.MaxValue - 1f; + value = MMMaths.Remap(value, -1f, 1f, 0f, 1f); + break; + case SignalType.DigitalNoise: + value = Random.Range(0, 2); + break; + case SignalType.PerlinNoise: + value = Mathf.PerlinNoise(t, t * amplitude); + break; + case SignalType.ValueNoise: + value = ValueNoise(time, frequency) * amplitude; + break; + case SignalType.AnimationCurve: + if (curve == null) { return 0f; } + t = (t != 1f) ? t - Mathf.Floor(t) : 1f; + value = curve.Evaluate(t); + break; + case SignalType.MMTween: + t = (t != 1f) ? t - Mathf.Floor(t) : 1f; + value = MMTween.Tween(t, 0f, 1f, 0f, 1f, tweenCurve); + break; + } + + if (Invert) + { + value = MMMaths.Remap(value, 0f, 1f, 1f, 0f); + } + + float returnValue = amplitude * value + offset; + + // we clamp the value + if (clamp) + { + returnValue = Mathf.Clamp(returnValue, clampMin, clampMax); + } + + return returnValue; + } + + private static int[] hash = { + 151,160,137, 91, 90, 15,131, 13,201, 95, 96, 53,194,233, 7,225, + 140, 36,103, 30, 69,142, 8, 99, 37,240, 21, 10, 23,190, 6,148, + 247,120,234, 75, 0, 26,197, 62, 94,252,219,203,117, 35, 11, 32, + 57,177, 33, 88,237,149, 56, 87,174, 20,125,136,171,168, 68,175, + 74,165, 71,134,139, 48, 27,166, 77,146,158,231, 83,111,229,122, + 60,211,133,230,220,105, 92, 41, 55, 46,245, 40,244,102,143, 54, + 65, 25, 63,161, 1,216, 80, 73,209, 76,132,187,208, 89, 18,169, + 200,196,135,130,116,188,159, 86,164,100,109,198,173,186, 3, 64, + 52,217,226,250,124,123, 5,202, 38,147,118,126,255, 82, 85,212, + 207,206, 59,227, 47, 16, 58, 17,182,189, 28, 42,223,183,170,213, + 119,248,152, 2, 44,154,163, 70,221,153,101,155,167, 43,172, 9, + 129, 22, 39,253, 19, 98,108,110, 79,113,224,232,178,185,112,104, + 218,246, 97,228,251, 34,242,193,238,210,144, 12,191,179,162,241, + 81, 51,145,235,249, 14,239,107, 49,192,214, 31,181,199,106,157, + 184, 84,204,176,115,121, 50, 45,127, 4,150,254,138,236,205, 93, + 222,114, 67, 29, 24, 72,243,141,128,195, 78, 66,215, 61,156,180 + }; + private const int hashMask = 255; + + protected static float ValueNoise(float time, float frequency) + { + + time *= frequency; + int i = Mathf.FloorToInt(time); + i &= hashMask; + return hash[i] * (1f / hashMask); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMTween/MMSignal.cs.meta b/Assets/Feel/MMTools/Core/MMTween/MMSignal.cs.meta new file mode 100644 index 0000000..2ccb2ce --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMSignal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b0d2c9595529ed47a73e3b75de4eae6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTween/MMTween.cs b/Assets/Feel/MMTools/Core/MMTween/MMTween.cs new file mode 100644 index 0000000..4c87d43 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMTween.cs @@ -0,0 +1,445 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// The formulas described here are (loosely) based on Robert Penner's easing equations http://robertpenner.com/easing/ + /// + + public class MMTween : MonoBehaviour + { + /// + /// A list of all the possible curves you can tween a value along + /// + public enum MMTweenCurve + { + LinearTween, + EaseInQuadratic, EaseOutQuadratic, EaseInOutQuadratic, + EaseInCubic, EaseOutCubic, EaseInOutCubic, + EaseInQuartic, EaseOutQuartic, EaseInOutQuartic, + EaseInQuintic, EaseOutQuintic, EaseInOutQuintic, + EaseInSinusoidal, EaseOutSinusoidal, EaseInOutSinusoidal, + EaseInBounce, EaseOutBounce, EaseInOutBounce, + EaseInOverhead, EaseOutOverhead, EaseInOutOverhead, + EaseInExponential, EaseOutExponential, EaseInOutExponential, + EaseInElastic, EaseOutElastic, EaseInOutElastic, + EaseInCircular, EaseOutCircular, EaseInOutCircular, + AntiLinearTween, AlmostIdentity + } + + public static TweenDelegate[] TweenDelegateArray = new TweenDelegate[] + { + LinearTween, + EaseInQuadratic, EaseOutQuadratic, EaseInOutQuadratic, + EaseInCubic, EaseOutCubic, EaseInOutCubic, + EaseInQuartic, EaseOutQuartic, EaseInOutQuartic, + EaseInQuintic, EaseOutQuintic, EaseInOutQuintic, + EaseInSinusoidal, EaseOutSinusoidal, EaseInOutSinusoidal, + EaseInBounce, EaseOutBounce, EaseInOutBounce, + EaseInOverhead, EaseOutOverhead, EaseInOutOverhead, + EaseInExponential, EaseOutExponential, EaseInOutExponential, + EaseInElastic, EaseOutElastic, EaseInOutElastic, + EaseInCircular, EaseOutCircular, EaseInOutCircular, + AntiLinearTween, AlmostIdentity + }; + + // Core methods --------------------------------------------------------------------------------------------------------------- + + /// + /// Moves a value between a startValue and an endValue based on a currentTime, along the specified tween curve + /// + /// + /// + /// + /// + /// + /// + /// + public static float Tween(float currentTime, float initialTime, float endTime, float startValue, float endValue, MMTweenCurve curve) + { + currentTime = MMMaths.Remap(currentTime, initialTime, endTime, 0f, 1f); + currentTime = TweenDelegateArray[(int)curve](currentTime); + return startValue + currentTime * (endValue - startValue); + } + + public static long Tween(float currentTime, float initialTime, float endTime, long startValue, long endValue, MMTweenCurve curve) + { + currentTime = MMMaths.Remap(currentTime, initialTime, endTime, 0f, 1f); + currentTime = TweenDelegateArray[(int)curve](currentTime); + return startValue + (long)(currentTime * (endValue - startValue)); + } + + public static float Evaluate(float t, MMTweenCurve curve) + { + return TweenDelegateArray[(int)curve](t); + } + + public static float Evaluate(float t, MMTweenType tweenType) + { + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.MMTween) + { + return Evaluate(t, tweenType.MMTweenCurve); + } + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.AnimationCurve) + { + return tweenType.Curve.Evaluate(t); + } + return 0f; + } + + public delegate float TweenDelegate(float currentTime); + + public static float LinearTween(float currentTime) { return MMTweenDefinitions.Linear_Tween(currentTime); } + public static float AntiLinearTween(float currentTime) { return MMTweenDefinitions.LinearAnti_Tween(currentTime); } + public static float EaseInQuadratic(float currentTime) { return MMTweenDefinitions.EaseIn_Quadratic(currentTime); } + public static float EaseOutQuadratic(float currentTime) { return MMTweenDefinitions.EaseOut_Quadratic(currentTime); } + public static float EaseInOutQuadratic(float currentTime) { return MMTweenDefinitions.EaseInOut_Quadratic(currentTime); } + public static float EaseInCubic(float currentTime) { return MMTweenDefinitions.EaseIn_Cubic(currentTime); } + public static float EaseOutCubic(float currentTime) { return MMTweenDefinitions.EaseOut_Cubic(currentTime); } + public static float EaseInOutCubic(float currentTime) { return MMTweenDefinitions.EaseInOut_Cubic(currentTime); } + public static float EaseInQuartic(float currentTime) { return MMTweenDefinitions.EaseIn_Quartic(currentTime); } + public static float EaseOutQuartic(float currentTime) { return MMTweenDefinitions.EaseOut_Quartic(currentTime); } + public static float EaseInOutQuartic(float currentTime) { return MMTweenDefinitions.EaseInOut_Quartic(currentTime); } + public static float EaseInQuintic(float currentTime) { return MMTweenDefinitions.EaseIn_Quintic(currentTime); } + public static float EaseOutQuintic(float currentTime) { return MMTweenDefinitions.EaseOut_Quintic(currentTime); } + public static float EaseInOutQuintic(float currentTime) { return MMTweenDefinitions.EaseInOut_Quintic(currentTime); } + public static float EaseInSinusoidal(float currentTime) { return MMTweenDefinitions.EaseIn_Sinusoidal(currentTime); } + public static float EaseOutSinusoidal(float currentTime) { return MMTweenDefinitions.EaseOut_Sinusoidal(currentTime); } + public static float EaseInOutSinusoidal(float currentTime) { return MMTweenDefinitions.EaseInOut_Sinusoidal(currentTime); } + public static float EaseInBounce(float currentTime) { return MMTweenDefinitions.EaseIn_Bounce(currentTime); } + public static float EaseOutBounce(float currentTime) { return MMTweenDefinitions.EaseOut_Bounce(currentTime); } + public static float EaseInOutBounce(float currentTime) { return MMTweenDefinitions.EaseInOut_Bounce(currentTime); } + public static float EaseInOverhead(float currentTime) { return MMTweenDefinitions.EaseIn_Overhead(currentTime); } + public static float EaseOutOverhead(float currentTime) { return MMTweenDefinitions.EaseOut_Overhead(currentTime); } + public static float EaseInOutOverhead(float currentTime) { return MMTweenDefinitions.EaseInOut_Overhead(currentTime); } + public static float EaseInExponential(float currentTime) { return MMTweenDefinitions.EaseIn_Exponential(currentTime); } + public static float EaseOutExponential(float currentTime) { return MMTweenDefinitions.EaseOut_Exponential(currentTime); } + public static float EaseInOutExponential(float currentTime) { return MMTweenDefinitions.EaseInOut_Exponential(currentTime); } + public static float EaseInElastic(float currentTime) { return MMTweenDefinitions.EaseIn_Elastic(currentTime); } + public static float EaseOutElastic(float currentTime) { return MMTweenDefinitions.EaseOut_Elastic(currentTime); } + public static float EaseInOutElastic(float currentTime) { return MMTweenDefinitions.EaseInOut_Elastic(currentTime); } + public static float EaseInCircular(float currentTime) { return MMTweenDefinitions.EaseIn_Circular(currentTime); } + public static float EaseOutCircular(float currentTime) { return MMTweenDefinitions.EaseOut_Circular(currentTime); } + public static float EaseInOutCircular(float currentTime) { return MMTweenDefinitions.EaseInOut_Circular(currentTime); } + public static float AlmostIdentity(float currentTime) { return MMTweenDefinitions.AlmostIdentity(currentTime); } + + /// + /// To use : + /// public MMTween.MMTweenCurve Tween = MMTween.MMTweenCurve.EaseInOutCubic; + /// private MMTween.TweenDelegate _tween; + /// + /// _tween = MMTween.GetTweenMethod(Tween); + /// float t = _tween(someFloat); + /// + /// + /// + public static TweenDelegate GetTweenMethod(MMTweenCurve tween) + { + switch (tween) + { + case MMTweenCurve.LinearTween: return LinearTween; + case MMTweenCurve.AntiLinearTween: return AntiLinearTween; + case MMTweenCurve.EaseInQuadratic: return EaseInQuadratic; + case MMTweenCurve.EaseOutQuadratic: return EaseOutQuadratic; + case MMTweenCurve.EaseInOutQuadratic: return EaseInOutQuadratic; + case MMTweenCurve.EaseInCubic: return EaseInCubic; + case MMTweenCurve.EaseOutCubic: return EaseOutCubic; + case MMTweenCurve.EaseInOutCubic: return EaseInOutCubic; + case MMTweenCurve.EaseInQuartic: return EaseInQuartic; + case MMTweenCurve.EaseOutQuartic: return EaseOutQuartic; + case MMTweenCurve.EaseInOutQuartic: return EaseInOutQuartic; + case MMTweenCurve.EaseInQuintic: return EaseInQuintic; + case MMTweenCurve.EaseOutQuintic: return EaseOutQuintic; + case MMTweenCurve.EaseInOutQuintic: return EaseInOutQuintic; + case MMTweenCurve.EaseInSinusoidal: return EaseInSinusoidal; + case MMTweenCurve.EaseOutSinusoidal: return EaseOutSinusoidal; + case MMTweenCurve.EaseInOutSinusoidal: return EaseInOutSinusoidal; + case MMTweenCurve.EaseInBounce: return EaseInBounce; + case MMTweenCurve.EaseOutBounce: return EaseOutBounce; + case MMTweenCurve.EaseInOutBounce: return EaseInOutBounce; + case MMTweenCurve.EaseInOverhead: return EaseInOverhead; + case MMTweenCurve.EaseOutOverhead: return EaseOutOverhead; + case MMTweenCurve.EaseInOutOverhead: return EaseInOutOverhead; + case MMTweenCurve.EaseInExponential: return EaseInExponential; + case MMTweenCurve.EaseOutExponential: return EaseOutExponential; + case MMTweenCurve.EaseInOutExponential: return EaseInOutExponential; + case MMTweenCurve.EaseInElastic: return EaseInElastic; + case MMTweenCurve.EaseOutElastic: return EaseOutElastic; + case MMTweenCurve.EaseInOutElastic: return EaseInOutElastic; + case MMTweenCurve.EaseInCircular: return EaseInCircular; + case MMTweenCurve.EaseOutCircular: return EaseOutCircular; + case MMTweenCurve.EaseInOutCircular: return EaseInOutCircular; + case MMTweenCurve.AlmostIdentity: return AlmostIdentity; + } + return LinearTween; + } + + public static Vector2 Tween(float currentTime, float initialTime, float endTime, Vector2 startValue, Vector2 endValue, MMTweenCurve curve) + { + startValue.x = Tween(currentTime, initialTime, endTime, startValue.x, endValue.x, curve); + startValue.y = Tween(currentTime, initialTime, endTime, startValue.y, endValue.y, curve); + return startValue; + } + + public static Vector3 Tween(float currentTime, float initialTime, float endTime, Vector3 startValue, Vector3 endValue, MMTweenCurve curve) + { + startValue.x = Tween(currentTime, initialTime, endTime, startValue.x, endValue.x, curve); + startValue.y = Tween(currentTime, initialTime, endTime, startValue.y, endValue.y, curve); + startValue.z = Tween(currentTime, initialTime, endTime, startValue.z, endValue.z, curve); + return startValue; + } + + public static Vector4 Tween(float currentTime, float initialTime, float endTime, Vector4 startValue, Vector4 endValue, MMTweenCurve curve) + { + startValue.x = Tween(currentTime, initialTime, endTime, startValue.x, endValue.x, curve); + startValue.y = Tween(currentTime, initialTime, endTime, startValue.y, endValue.y, curve); + startValue.z = Tween(currentTime, initialTime, endTime, startValue.z, endValue.z, curve); + startValue.w = Tween(currentTime, initialTime, endTime, startValue.w, endValue.w, curve); + return startValue; + } + + public static Quaternion Tween(float currentTime, float initialTime, float endTime, Quaternion startValue, Quaternion endValue, MMTweenCurve curve) + { + float turningRate = Tween(currentTime, initialTime, endTime, 0f, 1f, curve); + startValue = Quaternion.Slerp(startValue, endValue, turningRate); + return startValue; + } + + // Animation curve methods -------------------------------------------------------------------------------------------------------------- + + public static float Tween(float currentTime, float initialTime, float endTime, float startValue, float endValue, AnimationCurve curve) + { + currentTime = MMMaths.Remap(currentTime, initialTime, endTime, 0f, 1f); + currentTime = curve.Evaluate(currentTime); + return startValue + currentTime * (endValue - startValue); + } + + public static long Tween(float currentTime, float initialTime, float endTime, long startValue, long endValue, AnimationCurve curve) + { + currentTime = MMMaths.Remap(currentTime, initialTime, endTime, 0f, 1f); + currentTime = curve.Evaluate(currentTime); + return startValue + (long)currentTime * (endValue - startValue); + } + + public static Vector2 Tween(float currentTime, float initialTime, float endTime, Vector2 startValue, Vector2 endValue, AnimationCurve curve) + { + startValue.x = Tween(currentTime, initialTime, endTime, startValue.x, endValue.x, curve); + startValue.y = Tween(currentTime, initialTime, endTime, startValue.y, endValue.y, curve); + return startValue; + } + + public static Vector3 Tween(float currentTime, float initialTime, float endTime, Vector3 startValue, Vector3 endValue, AnimationCurve curve) + { + startValue.x = Tween(currentTime, initialTime, endTime, startValue.x, endValue.x, curve); + startValue.y = Tween(currentTime, initialTime, endTime, startValue.y, endValue.y, curve); + startValue.z = Tween(currentTime, initialTime, endTime, startValue.z, endValue.z, curve); + return startValue; + } + + public static Vector4 Tween(float currentTime, float initialTime, float endTime, Vector4 startValue, Vector4 endValue, AnimationCurve curve) + { + startValue.x = Tween(currentTime, initialTime, endTime, startValue.x, endValue.x, curve); + startValue.y = Tween(currentTime, initialTime, endTime, startValue.y, endValue.y, curve); + startValue.z = Tween(currentTime, initialTime, endTime, startValue.z, endValue.z, curve); + startValue.w = Tween(currentTime, initialTime, endTime, startValue.w, endValue.w, curve); + return startValue; + } + + public static Quaternion Tween(float currentTime, float initialTime, float endTime, Quaternion startValue, Quaternion endValue, AnimationCurve curve) + { + float turningRate = Tween(currentTime, initialTime, endTime, 0f, 1f, curve); + startValue = Quaternion.Slerp(startValue, endValue, turningRate); + return startValue; + } + + // Tween type methods ------------------------------------------------------------------------------------------------------------------------ + + public static float Tween(float currentTime, float initialTime, float endTime, float startValue, float endValue, MMTweenType tweenType) + { + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.MMTween) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.MMTweenCurve); + } + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.AnimationCurve) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.Curve); + } + return 0f; + } + public static long Tween(float currentTime, float initialTime, float endTime, long startValue, long endValue, MMTweenType tweenType) + { + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.MMTween) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.MMTweenCurve); + } + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.AnimationCurve) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.Curve); + } + return 0; + } + public static Vector2 Tween(float currentTime, float initialTime, float endTime, Vector2 startValue, Vector2 endValue, MMTweenType tweenType) + { + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.MMTween) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.MMTweenCurve); + } + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.AnimationCurve) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.Curve); + } + return Vector2.zero; + } + public static Vector3 Tween(float currentTime, float initialTime, float endTime, Vector3 startValue, Vector3 endValue, MMTweenType tweenType) + { + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.MMTween) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.MMTweenCurve); + } + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.AnimationCurve) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.Curve); + } + return Vector3.zero; + } + public static Vector4 Tween(float currentTime, float initialTime, float endTime, Vector4 startValue, Vector4 endValue, MMTweenType tweenType) + { + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.MMTween) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.MMTweenCurve); + } + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.AnimationCurve) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.Curve); + } + return Vector3.zero; + } + public static Quaternion Tween(float currentTime, float initialTime, float endTime, Quaternion startValue, Quaternion endValue, MMTweenType tweenType) + { + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.MMTween) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.MMTweenCurve); + } + if (tweenType.MMTweenDefinitionType == MMTweenDefinitionTypes.AnimationCurve) + { + return Tween(currentTime, initialTime, endTime, startValue, endValue, tweenType.Curve); + } + return Quaternion.identity; + } + + // MOVE METHODS --------------------------------------------------------------------------------------------------------- + public static Coroutine MoveTransform(MonoBehaviour mono, Transform targetTransform, Vector3 origin, Vector3 destination, + WaitForSeconds delay, float delayDuration, float duration, MMTween.MMTweenCurve curve, bool ignoreTimescale = false) + { + return mono.StartCoroutine(MoveTransformCo(targetTransform, origin, destination, delay, delayDuration, duration, curve, ignoreTimescale)); + } + + public static Coroutine MoveRectTransform(MonoBehaviour mono, RectTransform targetTransform, Vector3 origin, Vector3 destination, + WaitForSeconds delay, float delayDuration, float duration, MMTween.MMTweenCurve curve, bool ignoreTimescale = false) + { + return mono.StartCoroutine(MoveRectTransformCo(targetTransform, origin, destination, delay, delayDuration, duration, curve, ignoreTimescale)); + } + + public static Coroutine MoveTransform(MonoBehaviour mono, Transform targetTransform, Transform origin, Transform destination, WaitForSeconds delay, float delayDuration, float duration, + MMTween.MMTweenCurve curve, bool updatePosition = true, bool updateRotation = true, bool ignoreTimescale = false) + { + return mono.StartCoroutine(MoveTransformCo(targetTransform, origin, destination, delay, delayDuration, duration, curve, updatePosition, updateRotation, ignoreTimescale)); + } + + public static Coroutine RotateTransformAround(MonoBehaviour mono, Transform targetTransform, Transform center, Transform destination, float angle, WaitForSeconds delay, float delayDuration, + float duration, MMTween.MMTweenCurve curve, bool ignoreTimescale = false) + { + return mono.StartCoroutine(RotateTransformAroundCo(targetTransform, center, destination, angle, delay, delayDuration, duration, curve, ignoreTimescale)); + } + + protected static IEnumerator MoveRectTransformCo(RectTransform targetTransform, Vector3 origin, Vector3 destination, WaitForSeconds delay, + float delayDuration, float duration, MMTween.MMTweenCurve curve, bool ignoreTimescale = false) + { + if (delayDuration > 0f) + { + yield return delay; + } + float timeLeft = duration; + while (timeLeft > 0f) + { + targetTransform.localPosition = MMTween.Tween(duration - timeLeft, 0f, duration, origin, destination, curve); + timeLeft -= ignoreTimescale ? Time.unscaledDeltaTime : Time.deltaTime; + yield return null; + } + targetTransform.localPosition = destination; + } + + protected static IEnumerator MoveTransformCo(Transform targetTransform, Vector3 origin, Vector3 destination, WaitForSeconds delay, + float delayDuration, float duration, MMTween.MMTweenCurve curve, bool ignoreTimescale = false) + { + if (delayDuration > 0f) + { + yield return delay; + } + float timeLeft = duration; + while (timeLeft > 0f) + { + targetTransform.transform.position = MMTween.Tween(duration - timeLeft, 0f, duration, origin, destination, curve); + timeLeft -= ignoreTimescale ? Time.unscaledDeltaTime : Time.deltaTime; + yield return null; + } + targetTransform.transform.position = destination; + } + + protected static IEnumerator MoveTransformCo(Transform targetTransform, Transform origin, Transform destination, WaitForSeconds delay, float delayDuration, float duration, + MMTween.MMTweenCurve curve, bool updatePosition = true, bool updateRotation = true, bool ignoreTimescale = false) + { + if (delayDuration > 0f) + { + yield return delay; + } + float timeLeft = duration; + while (timeLeft > 0f) + { + if (updatePosition) + { + targetTransform.transform.position = MMTween.Tween(duration - timeLeft, 0f, duration, origin.position, destination.position, curve); + } + if (updateRotation) + { + targetTransform.transform.rotation = MMTween.Tween(duration - timeLeft, 0f, duration, origin.rotation, destination.rotation, curve); + } + timeLeft -= ignoreTimescale ? Time.unscaledDeltaTime : Time.deltaTime; + yield return null; + } + if (updatePosition) { targetTransform.transform.position = destination.position; } + if (updateRotation) { targetTransform.transform.localEulerAngles = destination.localEulerAngles; } + } + + protected static IEnumerator RotateTransformAroundCo(Transform targetTransform, Transform center, Transform destination, float angle, WaitForSeconds delay, float delayDuration, float duration, + MMTween.MMTweenCurve curve, bool ignoreTimescale = false) + { + if (delayDuration > 0f) + { + yield return delay; + } + + Vector3 initialRotationPosition = targetTransform.transform.position; + Quaternion initialRotationRotation = targetTransform.transform.rotation; + + float rate = 1f / duration; + + float timeSpent = 0f; + while (timeSpent < duration) + { + + float newAngle = MMTween.Tween(timeSpent, 0f, duration, 0f, angle, curve); + + targetTransform.transform.position = initialRotationPosition; + initialRotationRotation = targetTransform.transform.rotation; + targetTransform.RotateAround(center.transform.position, center.transform.up, newAngle); + targetTransform.transform.rotation = initialRotationRotation; + + timeSpent += ignoreTimescale ? Time.unscaledDeltaTime : Time.deltaTime; + yield return null; + } + targetTransform.transform.position = destination.position; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMTween/MMTween.cs.meta b/Assets/Feel/MMTools/Core/MMTween/MMTween.cs.meta new file mode 100644 index 0000000..4d41583 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMTween.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd6b5fb73f238654ba224ef88b91ac2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTween/MMTweenDefinitions.cs b/Assets/Feel/MMTools/Core/MMTween/MMTweenDefinitions.cs new file mode 100644 index 0000000..50512b0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMTweenDefinitions.cs @@ -0,0 +1,273 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public class MMTweenDefinitions + { + // Linear --------------------------------------------------------------------------------------------------------------------------- + + public static float Linear_Tween(float t) + { + return t; + } + + public static float LinearAnti_Tween(float t) + { + return 1 - t; + } + + // Almost Identity + + public static float AlmostIdentity(float t) + { + return t * t * (2.0f - t); + } + + // Quadratic --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Quadratic(float t) + { + return t * t; + } + + public static float EaseOut_Quadratic(float t) + { + return 1 - EaseIn_Quadratic(1 - t); + } + + public static float EaseInOut_Quadratic(float t) + { + if (t < 0.5f) + { + return EaseIn_Quadratic(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Quadratic((1f - t) * 2f) / 2; + } + } + + // Cubic --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Cubic(float t) + { + return t * t * t; + } + + public static float EaseOut_Cubic(float t) + { + return 1 - EaseIn_Cubic(1 - t); + } + + public static float EaseInOut_Cubic(float t) + { + if (t < 0.5f) + { + return EaseIn_Cubic(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Cubic((1f - t) * 2f) / 2; + } + } + + // Quartic --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Quartic(float t) + { + return Mathf.Pow(t, 4f); + } + + public static float EaseOut_Quartic(float t) + { + return 1 - EaseIn_Quartic(1 - t); + } + + public static float EaseInOut_Quartic(float t) + { + if (t < 0.5f) + { + return EaseIn_Quartic(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Quartic((1f - t) * 2f) / 2; + } + } + + // Quintic --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Quintic(float t) + { + return Mathf.Pow(t, 5f); + } + + public static float EaseOut_Quintic(float t) + { + return 1 - EaseIn_Quintic(1 - t); + } + + public static float EaseInOut_Quintic(float t) + { + if (t < 0.5f) + { + return EaseIn_Quintic(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Quintic((1f - t) * 2f) / 2; + } + } + + // Bounce --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Bounce(float t) + { + float p = 0.3f; + return Mathf.Pow(2, -10 * t) * Mathf.Sin((t - p / 4) * (2 * Mathf.PI) / p) + 1; + } + + public static float EaseOut_Bounce(float t) + { + return 1 - EaseIn_Bounce(1 - t); + } + + public static float EaseInOut_Bounce(float t) + { + if (t < 0.5f) + { + return EaseIn_Bounce(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Bounce((1f - t) * 2f) / 2; + } + } + + // Sinusoidal --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Sinusoidal(float t) + { + return 1 + Mathf.Sin(Mathf.PI / 2f * t - Mathf.PI / 2f); + } + + public static float EaseOut_Sinusoidal(float t) + { + return 1 - EaseIn_Sinusoidal(1 - t); + } + + public static float EaseInOut_Sinusoidal(float t) + { + if (t < 0.5f) + { + return EaseIn_Sinusoidal(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Sinusoidal((1f - t) * 2f) / 2; + } + } + + // Overhead --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Overhead(float t) + { + float back = 1.6f; + return t * t * ((back + 1f) * t - back); + } + + public static float EaseOut_Overhead(float t) + { + return 1 - EaseIn_Overhead(1 - t); + } + + public static float EaseInOut_Overhead(float t) + { + if (t < 0.5f) + { + return EaseIn_Overhead(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Overhead((1f - t) * 2f) / 2; + } + } + + // Exponential --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Exponential(float t) + { + return t == 0f ? 0f : Mathf.Pow(1024f, t - 1f); + } + + public static float EaseOut_Exponential(float t) + { + return 1 - EaseIn_Exponential(1 - t); + } + + public static float EaseInOut_Exponential(float t) + { + if (t < 0.5f) + { + return EaseIn_Exponential(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Exponential((1f - t) * 2f) / 2; + } + } + + // Elastic --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Elastic(float t) + { + if (t == 0f) { return 0f; } + if (t == 1f) { return 1f; } + return -Mathf.Pow(2f, 10f * (t -= 1f)) * Mathf.Sin((t - 0.1f) * (2f * Mathf.PI) / 0.4f); + } + + public static float EaseOut_Elastic(float t) + { + return 1 - EaseIn_Elastic(1 - t); + } + + public static float EaseInOut_Elastic(float t) + { + if (t < 0.5f) + { + return EaseIn_Elastic(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Elastic((1f - t) * 2f) / 2; + } + } + + // Circular --------------------------------------------------------------------------------------------------------------------------- + + public static float EaseIn_Circular(float t) + { + return 1f - Mathf.Sqrt(1f - t * t); + } + + public static float EaseOut_Circular(float t) + { + return 1 - EaseIn_Circular(1 - t); + } + + public static float EaseInOut_Circular(float t) + { + if (t < 0.5f) + { + return EaseIn_Circular(t * 2f) / 2f; + } + else + { + return 1 - EaseIn_Circular((1f - t) * 2f) / 2; + } + } + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMTween/MMTweenDefinitions.cs.meta b/Assets/Feel/MMTools/Core/MMTween/MMTweenDefinitions.cs.meta new file mode 100644 index 0000000..b9a8a74 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMTweenDefinitions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 540be5b94edd9f347bf404fe0d020285 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMTween/MMTweenType.cs b/Assets/Feel/MMTools/Core/MMTween/MMTweenType.cs new file mode 100644 index 0000000..a53791c --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMTweenType.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + public enum MMTweenDefinitionTypes { MMTween, AnimationCurve } + + [Serializable] + public class MMTweenType + { + public static MMTweenType DefaultEaseInCubic { get; } = new MMTweenType(MMTween.MMTweenCurve.EaseInCubic); + public MMTweenDefinitionTypes MMTweenDefinitionType = MMTweenDefinitionTypes.MMTween; + public MMTween.MMTweenCurve MMTweenCurve = MMTween.MMTweenCurve.EaseInCubic; + public AnimationCurve Curve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1f)); + public bool Initialized = false; + + public MMTweenType(MMTween.MMTweenCurve newCurve) + { + MMTweenCurve = newCurve; + MMTweenDefinitionType = MMTweenDefinitionTypes.MMTween; + } + public MMTweenType(AnimationCurve newCurve) + { + Curve = newCurve; + MMTweenDefinitionType = MMTweenDefinitionTypes.AnimationCurve; + } + + public float Evaluate(float t) + { + return MMTween.Evaluate(t, this); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMTween/MMTweenType.cs.meta b/Assets/Feel/MMTools/Core/MMTween/MMTweenType.cs.meta new file mode 100644 index 0000000..1ff4145 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMTween/MMTweenType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 503fff45948a0ea4cb047c033294e914 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMUI.meta b/Assets/Feel/MMTools/Core/MMUI.meta new file mode 100644 index 0000000..ff5e84a --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 86e14195b5bed3042a828cd583dea2ae +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMUI/MMFader.cs b/Assets/Feel/MMTools/Core/MMUI/MMFader.cs new file mode 100644 index 0000000..65221ae --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI/MMFader.cs @@ -0,0 +1,523 @@ +using UnityEngine; +using System.Collections; +using System; +#if MM_UI +using UnityEngine.UI; +#endif +using MoreMountains.Tools; + +namespace MoreMountains.Tools +{ + /// + /// An event used to stop fades + /// + public struct MMFadeStopEvent + { + /// an ID that has to match the one on the fader + public int ID; + public bool Restore; + + public MMFadeStopEvent(int id = 0, bool restore = false) + { + Restore = restore; + ID = id; + } + static MMFadeStopEvent e; + public static void Trigger(int id = 0, bool restore = false) + { + e.ID = id; + e.Restore = restore; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// Events used to trigger faders on or off + /// + public struct MMFadeEvent + { + /// an ID that has to match the one on the fader + public int ID; + /// the duration of the fade, in seconds + public float Duration; + /// the alpha to aim for + public float TargetAlpha; + /// the curve to apply to the fade + public MMTweenType Curve; + /// whether or not this fade should ignore timescale + public bool IgnoreTimeScale; + /// a world position for a target object. Useless for regular fades, but can be useful for alt implementations (circle fade for example) + public Vector3 WorldPosition; + + + /// + /// Initializes a new instance of the struct. + /// + /// Duration, in seconds. + /// Target alpha, from 0 to 1. + public MMFadeEvent(float duration, float targetAlpha, MMTweenType tween, int id=0, + bool ignoreTimeScale = true, Vector3 worldPosition = new Vector3()) + { + ID = id; + Duration = duration; + TargetAlpha = targetAlpha; + Curve = tween; + IgnoreTimeScale = ignoreTimeScale; + WorldPosition = worldPosition; + } + static MMFadeEvent e; + public static void Trigger(float duration, float targetAlpha) + { + Trigger(duration, targetAlpha, new MMTweenType(MMTween.MMTweenCurve.EaseInCubic)); + } + public static void Trigger(float duration, float targetAlpha, MMTweenType tween, int id = 0, + bool ignoreTimeScale = true, Vector3 worldPosition = new Vector3()) + { + e.ID = id; + e.Duration = duration; + e.TargetAlpha = targetAlpha; + e.Curve = tween; + e.IgnoreTimeScale = ignoreTimeScale; + e.WorldPosition = worldPosition; + MMEventManager.TriggerEvent(e); + } + } + + public struct MMFadeInEvent + { + /// an ID that has to match the one on the fader + public int ID; + /// the duration of the fade, in seconds + public float Duration; + /// the curve to apply to the fade + public MMTweenType Curve; + /// whether or not this fade should ignore timescale + public bool IgnoreTimeScale; + /// a world position for a target object. Useless for regular fades, but can be useful for alt implementations (circle fade for example) + public Vector3 WorldPosition; + + /// + /// Initializes a new instance of the struct. + /// + /// Duration. + public MMFadeInEvent(float duration, MMTweenType tween, int id = 0, + bool ignoreTimeScale = true, Vector3 worldPosition = new Vector3()) + { + ID = id; + Duration = duration; + Curve = tween; + IgnoreTimeScale = ignoreTimeScale; + WorldPosition = worldPosition; + } + static MMFadeInEvent e; + public static void Trigger(float duration, MMTweenType tween, int id = 0, + bool ignoreTimeScale = true, Vector3 worldPosition = new Vector3()) + { + e.ID = id; + e.Duration = duration; + e.Curve = tween; + e.IgnoreTimeScale = ignoreTimeScale; + e.WorldPosition = worldPosition; + MMEventManager.TriggerEvent(e); + } + } + + public struct MMFadeOutEvent + { + /// an ID that has to match the one on the fader + public int ID; + /// the duration of the fade, in seconds + public float Duration; + /// the curve to apply to the fade + public MMTweenType Curve; + /// whether or not this fade should ignore timescale + public bool IgnoreTimeScale; + /// a world position for a target object. Useless for regular fades, but can be useful for alt implementations (circle fade for example) + public Vector3 WorldPosition; + + /// + /// Initializes a new instance of the struct. + /// + /// Duration. + public MMFadeOutEvent(float duration, MMTweenType tween, int id = 0, + bool ignoreTimeScale = true, Vector3 worldPosition = new Vector3()) + { + ID = id; + Duration = duration; + Curve = tween; + IgnoreTimeScale = ignoreTimeScale; + WorldPosition = worldPosition; + } + + static MMFadeOutEvent e; + public static void Trigger(float duration, MMTweenType tween, int id = 0, + bool ignoreTimeScale = true, Vector3 worldPosition = new Vector3()) + { + e.ID = id; + e.Duration = duration; + e.Curve = tween; + e.IgnoreTimeScale = ignoreTimeScale; + e.WorldPosition = worldPosition; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// The Fader class can be put on an Image, and it'll intercept MMFadeEvents and turn itself on or off accordingly. + /// + [RequireComponent(typeof(CanvasGroup))] + #if MM_UI + [RequireComponent(typeof(Image))] + #endif + [AddComponentMenu("More Mountains/Tools/GUI/MMFader")] + public class MMFader : MMMonoBehaviour, MMEventListener, MMEventListener, MMEventListener, MMEventListener + { + public enum ForcedInitStates { None, Active, Inactive } + + [MMInspectorGroup("Identification", true, 122)] + /// the ID for this fader (0 is default), set more IDs if you need more than one fader + [Tooltip("the ID for this fader (0 is default), set more IDs if you need more than one fader")] + public int ID; + + [MMInspectorGroup("Opacity", true, 123)] + /// the opacity the fader should be at when inactive + [Tooltip("the opacity the fader should be at when inactive")] + public float InactiveAlpha = 0f; + /// the opacity the fader should be at when active + [Tooltip("the opacity the fader should be at when active")] + public float ActiveAlpha = 1f; + /// determines whether a state should be forced on init + [Tooltip("determines whether a state should be forced on init")] + public ForcedInitStates ForcedInitState = ForcedInitStates.Inactive; + + [MMInspectorGroup("Timing", true, 124)] + /// the default duration of the fade in/out + [Tooltip("the default duration of the fade in/out")] + public float DefaultDuration = 0.2f; + /// the default curve to use for this fader + [Tooltip("the default curve to use for this fader")] + public MMTweenType DefaultTween = new MMTweenType(MMTween.MMTweenCurve.LinearTween); + /// whether or not the fade should happen in unscaled time + [Tooltip("whether or not the fade should happen in unscaled time")] + public bool IgnoreTimescale = true; + /// whether or not this fader can cause a fade if the requested final alpha is the same as the current one + [Tooltip("whether or not this fader can cause a fade if the requested final alpha is the same as the current one")] + public bool CanFadeToCurrentAlpha = true; + + [MMInspectorGroup("Interaction", true, 125)] + /// whether or not the fader should block raycasts when visible + [Tooltip("whether or not the fader should block raycasts when visible")] + public bool ShouldBlockRaycasts = false; + + [MMInspectorGroup("Debug", true, 126)] + [MMInspectorButtonBar(new string[] { "FadeIn1Second", "FadeOut1Second", "DefaultFade", "ResetFader" }, + new string[] { "FadeIn1Second", "FadeOut1Second", "DefaultFade", "ResetFader" }, + new bool[] { true, true, true, true }, + new string[] { "main-call-to-action", "", "", "" })] + public bool DebugToolbar; + + protected CanvasGroup _canvasGroup; + #if MM_UI + protected Image _image; + #endif + + protected float _initialAlpha; + protected float _currentTargetAlpha; + protected float _currentDuration; + protected MMTweenType _currentCurve; + + protected bool _fading = false; + protected float _fadeStartedAt; + protected bool _frameCountOne; + + /// + /// Test method triggered by an inspector button + /// + protected virtual void ResetFader() + { + _canvasGroup.alpha = InactiveAlpha; + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void DefaultFade() + { + MMFadeEvent.Trigger(DefaultDuration, ActiveAlpha, DefaultTween, ID); + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void FadeIn1Second() + { + MMFadeInEvent.Trigger(1f, new MMTweenType(MMTween.MMTweenCurve.LinearTween)); + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void FadeOut1Second() + { + MMFadeOutEvent.Trigger(1f, new MMTweenType(MMTween.MMTweenCurve.LinearTween)); + } + + /// + /// On Start, we initialize our fader + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// On init, we grab our components, and disable/hide everything + /// + protected virtual void Initialization() + { + _canvasGroup = GetComponent(); + + #if MM_UI + _image = GetComponent(); + + if (ForcedInitState == ForcedInitStates.Inactive) + { + _canvasGroup.alpha = InactiveAlpha; + _image.enabled = false; + } + else if (ForcedInitState == ForcedInitStates.Active) + { + _canvasGroup.alpha = ActiveAlpha; + _image.enabled = true; + } + #endif + } + + /// + /// On Update, we update our alpha + /// + protected virtual void Update() + { + if (_canvasGroup == null) { return; } + + if (_fading) + { + Fade(); + } + } + + /// + /// Fades the canvasgroup towards its target alpha + /// + protected virtual void Fade() + { + float currentTime = IgnoreTimescale ? Time.unscaledTime : Time.time; + + if (_frameCountOne) + { + if (Time.frameCount <= 2) + { + _canvasGroup.alpha = _initialAlpha; + return; + } + _fadeStartedAt = IgnoreTimescale ? Time.unscaledTime : Time.time; + currentTime = _fadeStartedAt; + _frameCountOne = false; + } + + float endTime = _fadeStartedAt + _currentDuration; + if (currentTime - _fadeStartedAt < _currentDuration) + { + float result = MMTween.Tween(currentTime, _fadeStartedAt, endTime, _initialAlpha, _currentTargetAlpha, _currentCurve); + _canvasGroup.alpha = result; + } + else + { + StopFading(); + } + } + + /// + /// Stops the fading. + /// + protected virtual void StopFading() + { + _canvasGroup.alpha = _currentTargetAlpha; + _fading = false; + if (_canvasGroup.alpha == InactiveAlpha) + { + DisableFader(); + } + } + + /// + /// Disables the fader. + /// + protected virtual void DisableFader() + { + #if MM_UI + _image.enabled = false; + #endif + if (ShouldBlockRaycasts) + { + _canvasGroup.blocksRaycasts = false; + } + } + + /// + /// Enables the fader. + /// + protected virtual void EnableFader() + { + #if MM_UI + _image.enabled = true; + #endif + if (ShouldBlockRaycasts) + { + _canvasGroup.blocksRaycasts = true; + } + } + + /// + /// Starts fading this fader from the specified initial alpha to the target + /// + /// + /// + /// + /// + /// + /// + protected virtual void StartFading(float initialAlpha, float endAlpha, float duration, MMTweenType curve, bool ignoreTimeScale) + { + if ((!CanFadeToCurrentAlpha) && (_canvasGroup.alpha == endAlpha)) + { + return; + } + + IgnoreTimescale = ignoreTimeScale; + EnableFader(); + _fading = true; + _initialAlpha = initialAlpha; + _currentTargetAlpha = endAlpha; + _fadeStartedAt = IgnoreTimescale ? Time.unscaledTime : Time.time; + _currentCurve = curve; + _currentDuration = duration; + if (Time.frameCount == 1) + { + _frameCountOne = true; + } + } + + /// + /// When catching a fade event, we fade our image in or out + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeEvent fadeEvent) + { + if (fadeEvent.ID != ID) + { + return; + } + Fade(fadeEvent.TargetAlpha, fadeEvent.Duration, fadeEvent.Curve, fadeEvent.IgnoreTimeScale); + } + + /// + /// When catching an MMFadeInEvent, we fade our image in + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeInEvent fadeEvent) + { + if (fadeEvent.ID != ID) + { + return; + } + FadeIn(fadeEvent.Duration, fadeEvent.Curve, fadeEvent.IgnoreTimeScale); + } + + /// + /// When catching an MMFadeOutEvent, we fade our image out + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeOutEvent fadeEvent) + { + if (fadeEvent.ID != ID) + { + return; + } + FadeOut(fadeEvent.Duration, fadeEvent.Curve, fadeEvent.IgnoreTimeScale); + } + + /// + /// Use this method to fade towards the specified target alpha + /// + /// + /// + /// + /// + public virtual void Fade(float targetAlpha, float duration, MMTweenType curve, bool ignoreTimeScale) + { + _currentTargetAlpha = (targetAlpha == -1) ? ActiveAlpha : targetAlpha; + StartFading(_canvasGroup.alpha, _currentTargetAlpha, duration, curve, ignoreTimeScale); + } + + /// + /// Use this method to cause a fade in over the specified duration and curve + /// + /// + /// + /// + public virtual void FadeIn(float duration, MMTweenType curve, bool ignoreTimeScale = true) + { + StartFading(InactiveAlpha, ActiveAlpha, duration, curve, ignoreTimeScale); + } + + /// + /// Use this method to cause a fade out over the specified duration and curve + /// + /// + /// + /// + public virtual void FadeOut(float duration, MMTweenType curve, bool ignoreTimeScale = true) + { + StartFading(ActiveAlpha, InactiveAlpha, duration, curve, ignoreTimeScale); + } + + /// + /// When catching an MMFadeStopEvent, we stop our fade + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeStopEvent fadeStopEvent) + { + if (fadeStopEvent.ID == ID) + { + _fading = false; + if (fadeStopEvent.Restore) + { + _canvasGroup.alpha = _initialAlpha; + } + } + } + + /// + /// On enable, we start listening to events + /// + protected virtual void OnEnable() + { + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + } + + /// + /// On disable, we stop listening to events + /// + protected virtual void OnDisable() + { + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMUI/MMFader.cs.meta b/Assets/Feel/MMTools/Core/MMUI/MMFader.cs.meta new file mode 100644 index 0000000..4c433c0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI/MMFader.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: efe052b91c95c534b8bf0f64fb0b9151 +timeCreated: 1523969902 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMUI/MMFaderDirectional.cs b/Assets/Feel/MMTools/Core/MMUI/MMFaderDirectional.cs new file mode 100644 index 0000000..4e5cbd0 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI/MMFaderDirectional.cs @@ -0,0 +1,367 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// The Fader class can be put on an Image, and it'll intercept MMFadeEvents and turn itself on or off accordingly. + /// This specific fader will move from left to right, right to left, top to bottom or bottom to top + /// + [RequireComponent(typeof(CanvasGroup))] + [AddComponentMenu("More Mountains/Tools/GUI/MMFaderDirectional")] + public class MMFaderDirectional : MMMonoBehaviour, MMEventListener, MMEventListener, MMEventListener, MMEventListener + { + /// the possible directions this fader can move in + public enum Directions { TopToBottom, LeftToRight, RightToLeft, BottomToTop } + + [MMInspectorGroup("Identification", true, 122)] + /// the ID for this fader (0 is default), set more IDs if you need more than one fader + [Tooltip("the ID for this fader (0 is default), set more IDs if you need more than one fader")] + public int ID; + + [MMInspectorGroup("Directional Fader", true, 123)] + /// the direction this fader should move in when fading in + [Tooltip("the direction this fader should move in when fading in")] + public Directions FadeInDirection = Directions.LeftToRight; + /// the direction this fader should move in when fading out + [Tooltip("the direction this fader should move in when fading out")] + public Directions FadeOutDirection = Directions.LeftToRight; + + [MMInspectorGroup("Timing", true, 124)] + /// the default duration of the fade in/out + [Tooltip("the default duration of the fade in/out")] + public float DefaultDuration = 0.2f; + /// the default curve to use for this fader + [Tooltip("the default curve to use for this fader")] + public MMTweenType DefaultTween = new MMTweenType(MMTween.MMTweenCurve.LinearTween); + /// whether or not the fade should happen in unscaled time + [Tooltip("whether or not the fade should happen in unscaled time")] + public bool IgnoreTimescale = true; + /// whether or not to automatically disable this fader on init + [Tooltip("whether or not to automatically disable this fader on init")] + public bool DisableOnInit = true; + + [MMInspectorGroup("Delay", true, 127)] + /// a delay (in seconds) to apply before playing this fade + [Tooltip("a delay (in seconds) to apply before playing this fade")] + public float InitialDelay = 0f; + + [MMInspectorGroup("Interaction", true, 125)] + /// whether or not the fader should block raycasts when visible + [Tooltip("whether or not the fader should block raycasts when visible")] + public bool ShouldBlockRaycasts = false; + + /// the width of the fader + public virtual float Width { get { return _rectTransform.rect.width; } } + /// the height of the fader + public virtual float Height { get { return _rectTransform.rect.height; } } + + [MMInspectorGroup("Debug", true, 126)] + [MMInspectorButtonBar(new string[] { "FadeIn1Second", "FadeOut1Second", "DefaultFade", "ResetFader" }, + new string[] { "FadeIn1Second", "FadeOut1Second", "DefaultFade", "ResetFader" }, + new bool[] { true, true, true, true }, + new string[] { "main-call-to-action", "", "", "" })] + public bool DebugToolbar; + + protected RectTransform _rectTransform; + protected CanvasGroup _canvasGroup; + protected float _currentDuration; + protected MMTweenType _currentCurve; + protected bool _fading = false; + protected float _fadeStartedAt; + protected Vector2 _initialPosition; + + protected Vector2 _fromPosition; + protected Vector2 _toPosition; + protected Vector2 _newPosition; + protected bool _active; + protected bool _initialized = false; + + /// + /// Test method triggered by an inspector button + /// + protected virtual void ResetFader() + { + _rectTransform.anchoredPosition = _initialPosition; + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void DefaultFade() + { + MMFadeEvent.Trigger(DefaultDuration, 1f, DefaultTween, ID, IgnoreTimescale, this.transform.position); + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void FadeIn1Second() + { + MMFadeInEvent.Trigger(1f, DefaultTween, ID, IgnoreTimescale, this.transform.position); + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void FadeOut1Second() + { + MMFadeOutEvent.Trigger(1f, DefaultTween, ID, IgnoreTimescale, this.transform.position); + } + + /// + /// On Start, we initialize our fader + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init, we grab our components, and disable/hide everything + /// + //protected virtual IEnumerator Initialization() + protected virtual void Initialization() + { + _canvasGroup = this.gameObject.GetComponent(); + _rectTransform = this.gameObject.GetComponent(); + _initialPosition = _rectTransform.anchoredPosition; + if (DisableOnInit) + { + DisableFader(); + } + _initialized = true; + } + + /// + /// On Update, we update our alpha + /// + protected virtual void Update() + { + if (_canvasGroup == null) { return; } + + if (_fading) + { + Fade(); + } + } + + /// + /// Fades the canvasgroup towards its target alpha + /// + protected virtual void Fade() + { + float currentTime = IgnoreTimescale ? Time.unscaledTime : Time.time; + float endTime = _fadeStartedAt + _currentDuration; + + if (currentTime - _fadeStartedAt < _currentDuration) + { + _newPosition = MMTween.Tween(currentTime, _fadeStartedAt, endTime, _fromPosition, _toPosition, _currentCurve); + _rectTransform.anchoredPosition = _newPosition; + } + else + { + StopFading(); + } + } + + /// + /// Stops the fading. + /// + protected virtual void StopFading() + { + _rectTransform.anchoredPosition = _toPosition; + _fading = false; + + if (_initialPosition != _toPosition) + { + DisableFader(); + } + } + + /// + /// Starts a fade + /// + /// + /// + /// + /// + /// + /// + protected virtual IEnumerator StartFading(bool fadingIn, float duration, MMTweenType curve, int id, + bool ignoreTimeScale, Vector3 worldPosition) + { + if (id != ID) + { + yield break; + } + + if (InitialDelay > 0f) + { + yield return MMCoroutine.WaitFor(InitialDelay); + } + + if (!_initialized) + { + Initialization(); + } + + if (curve == null) + { + curve = DefaultTween; + } + + IgnoreTimescale = ignoreTimeScale; + EnableFader(); + _fading = true; + + _fadeStartedAt = IgnoreTimescale ? Time.unscaledTime : Time.time; + _currentCurve = curve; + _currentDuration = duration; + + _fromPosition = _rectTransform.anchoredPosition; + _toPosition = fadingIn ? _initialPosition : ExitPosition(); + + _newPosition = MMTween.Tween(0f, 0f, duration, _fromPosition, _toPosition, _currentCurve); + _rectTransform.anchoredPosition = _newPosition; + } + + /// + /// Determines the position of the fader before entry + /// + /// + protected virtual Vector2 BeforeEntryPosition() + { + switch (FadeInDirection) + { + case Directions.BottomToTop: + return _initialPosition + Vector2.down * Height; + case Directions.LeftToRight: + return _initialPosition + Vector2.left * Width; + case Directions.RightToLeft: + return _initialPosition + Vector2.right * Width; + case Directions.TopToBottom: + return _initialPosition + Vector2.up * Height; + } + return Vector2.zero; + } + + /// + /// Determines the exit position of the fader + /// + /// + protected virtual Vector2 ExitPosition() + { + switch (FadeOutDirection) + { + case Directions.BottomToTop: + return _initialPosition + Vector2.up * Height; + case Directions.LeftToRight: + return _initialPosition + Vector2.right * Width; + case Directions.RightToLeft: + return _initialPosition + Vector2.left * Width; + case Directions.TopToBottom: + return _initialPosition + Vector2.down * Height; + } + return Vector2.zero; + } + + /// + /// Disables the fader. + /// + protected virtual void DisableFader() + { + if (ShouldBlockRaycasts) + { + _canvasGroup.blocksRaycasts = false; + } + _active = false; + _canvasGroup.alpha = 0; + _rectTransform.anchoredPosition = BeforeEntryPosition(); + this.enabled = false; + } + + /// + /// Enables the fader. + /// + protected virtual void EnableFader() + { + this.enabled = true; + if (ShouldBlockRaycasts) + { + _canvasGroup.blocksRaycasts = true; + } + _active = true; + _canvasGroup.alpha = 1; + } + + /// + /// When catching a fade event, we fade our image in or out + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeEvent fadeEvent) + { + bool status = _active ? false : true; + StartCoroutine(StartFading(status, fadeEvent.Duration, fadeEvent.Curve, fadeEvent.ID, + fadeEvent.IgnoreTimeScale, fadeEvent.WorldPosition)); + } + + /// + /// When catching an MMFadeInEvent, we fade our image in + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeInEvent fadeEvent) + { + StartCoroutine(StartFading(true, fadeEvent.Duration, fadeEvent.Curve, fadeEvent.ID, + fadeEvent.IgnoreTimeScale, fadeEvent.WorldPosition)); + } + + /// + /// When catching an MMFadeOutEvent, we fade our image out + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeOutEvent fadeEvent) + { + StartCoroutine(StartFading(false, fadeEvent.Duration, fadeEvent.Curve, fadeEvent.ID, + fadeEvent.IgnoreTimeScale, fadeEvent.WorldPosition)); + } + + /// + /// When catching an MMFadeStopEvent, we stop our fade + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeStopEvent fadeStopEvent) + { + if (fadeStopEvent.ID == ID) + { + _fading = false; + if (fadeStopEvent.Restore) + { + _rectTransform.anchoredPosition = _initialPosition; + } + } + } + + /// + /// On enable, we start listening to events + /// + protected virtual void OnEnable() + { + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + } + + /// + /// On disable, we stop listening to events + /// + protected virtual void OnDestroy() + { + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMUI/MMFaderDirectional.cs.meta b/Assets/Feel/MMTools/Core/MMUI/MMFaderDirectional.cs.meta new file mode 100644 index 0000000..a703807 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI/MMFaderDirectional.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 315af83f344d8a24e9f6d1399e439fdd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMUI/MMFaderRound.cs b/Assets/Feel/MMTools/Core/MMUI/MMFaderRound.cs new file mode 100644 index 0000000..6ebf63e --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI/MMFaderRound.cs @@ -0,0 +1,304 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// The Fader class can be put on an Image, and it'll intercept MMFadeEvents and turn itself on or off accordingly. + /// + [RequireComponent(typeof(CanvasGroup))] + [AddComponentMenu("More Mountains/Tools/GUI/MMFaderRound")] + public class MMFaderRound : MMMonoBehaviour, MMEventListener, MMEventListener, MMEventListener, MMEventListener + { + public enum CameraModes { Main, Override } + + [MMInspectorGroup("Bindings", true, 121)] + public CameraModes CameraMode = CameraModes.Main; + [MMEnumCondition("CameraMode",(int)CameraModes.Override)] + /// the camera to pick the position from (usually the "regular" game camera) + public Camera TargetCamera; + /// the background to fade + public RectTransform FaderBackground; + /// the mask used to draw a hole in the background that will get faded / scaled + public RectTransform FaderMask; + + [MMInspectorGroup("Identification", true, 122)] + /// the ID for this fader (0 is default), set more IDs if you need more than one fader + public int ID; + + [MMInspectorGroup("Mask", true, 127)] + [MMVector("min", "max")] + /// the mask's scale at minimum and maximum opening + public Vector2 MaskScale; + + [MMInspectorGroup("Timing", true, 124)] + /// the default duration of the fade in/out + public float DefaultDuration = 0.2f; + /// the default curve to use for this fader + public MMTweenType DefaultTween = new MMTweenType(MMTween.MMTweenCurve.LinearTween); + /// whether or not the fade should happen in unscaled time + public bool IgnoreTimescale = true; + + [MMInspectorGroup("Interaction", true, 125)] + /// whether or not the fader should block raycasts when visible + public bool ShouldBlockRaycasts = false; + + [MMInspectorGroup("Debug", true, 126)] + public Transform DebugWorldPositionTarget; + [MMInspectorButtonBar(new string[] { "FadeIn1Second", "FadeOut1Second", "DefaultFade", "ResetFader" }, + new string[] { "FadeIn1Second", "FadeOut1Second", "DefaultFade", "ResetFader" }, + new bool[] { true, true, true, true }, + new string[] { "main-call-to-action", "", "", "" })] + public bool DebugToolbar; + protected CanvasGroup _canvasGroup; + + protected float _initialScale; + protected float _currentTargetScale; + + protected float _currentDuration; + protected MMTweenType _currentCurve; + + protected bool _fading = false; + protected float _fadeStartedAt; + + /// + /// Test method triggered by an inspector button + /// + protected virtual void ResetFader() + { + FaderMask.transform.localScale = MaskScale.x * Vector3.one; + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void DefaultFade() + { + MMFadeEvent.Trigger(DefaultDuration, MaskScale.y, DefaultTween, ID, IgnoreTimescale, DebugWorldPositionTarget.transform.position); + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void FadeIn1Second() + { + MMFadeInEvent.Trigger(1f, DefaultTween, ID, IgnoreTimescale, DebugWorldPositionTarget.transform.position); + } + + /// + /// Test method triggered by an inspector button + /// + protected virtual void FadeOut1Second() + { + MMFadeOutEvent.Trigger(1f, DefaultTween, ID, IgnoreTimescale, DebugWorldPositionTarget.transform.position); + } + + /// + /// On Start, we initialize our fader + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// On init, we grab our components, and disable/hide everything + /// + protected virtual void Initialization() + { + if (CameraMode == CameraModes.Main) + { + TargetCamera = Camera.main; + } + _canvasGroup = GetComponent(); + FaderMask.transform.localScale = MaskScale.x * Vector3.one; + } + + /// + /// On Update, we update our alpha + /// + protected virtual void Update() + { + if (_canvasGroup == null) { return; } + + if (_fading) + { + Fade(); + } + } + + /// + /// Fades the canvasgroup towards its target alpha + /// + protected virtual void Fade() + { + float currentTime = IgnoreTimescale ? Time.unscaledTime : Time.time; + float endTime = _fadeStartedAt + _currentDuration; + if (currentTime - _fadeStartedAt < _currentDuration) + { + float newScale = MMTween.Tween(currentTime, _fadeStartedAt, endTime, _initialScale, _currentTargetScale, _currentCurve); + FaderMask.transform.localScale = newScale * Vector3.one; + } + else + { + StopFading(); + } + } + + /// + /// Stops the fading. + /// + protected virtual void StopFading() + { + FaderMask.transform.localScale = _currentTargetScale * Vector3.one; + _fading = false; + if (FaderMask.transform.localScale == MaskScale.y * Vector3.one) + { + DisableFader(); + } + } + + /// + /// Disables the fader. + /// + protected virtual void DisableFader() + { + if (ShouldBlockRaycasts) + { + _canvasGroup.blocksRaycasts = false; + } + _canvasGroup.alpha = 0; + } + + /// + /// Enables the fader. + /// + protected virtual void EnableFader() + { + if (ShouldBlockRaycasts) + { + _canvasGroup.blocksRaycasts = true; + } + _canvasGroup.alpha = 1; + } + + protected virtual void StartFading(float initialAlpha, float endAlpha, float duration, MMTweenType curve, int id, + bool ignoreTimeScale, Vector3 worldPosition) + { + if (id != ID) + { + return; + } + + if (TargetCamera == null) + { + Debug.LogWarning(this.name + " : You're using a fader round but its TargetCamera hasn't been setup in its inspector. It can't fade."); + return; + } + + FaderMask.anchoredPosition = Vector3.zero; + + Vector3 viewportPosition = TargetCamera.WorldToViewportPoint(worldPosition); + viewportPosition.x = Mathf.Clamp01(viewportPosition.x); + viewportPosition.y = Mathf.Clamp01(viewportPosition.y); + viewportPosition.z = Mathf.Clamp01(viewportPosition.z); + + FaderMask.anchorMin = viewportPosition; + FaderMask.anchorMax = viewportPosition; + + IgnoreTimescale = ignoreTimeScale; + EnableFader(); + _fading = true; + _initialScale = initialAlpha; + _currentTargetScale = endAlpha; + _fadeStartedAt = IgnoreTimescale ? Time.unscaledTime : Time.time; + _currentCurve = curve; + _currentDuration = duration; + + float newScale = MMTween.Tween(0f, 0f, duration, _initialScale, _currentTargetScale, _currentCurve); + FaderMask.transform.localScale = newScale * Vector3.one; + } + + /// + /// When catching a fade event, we fade our image in or out + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeEvent fadeEvent) + { + _currentTargetScale = (fadeEvent.TargetAlpha == -1) ? MaskScale.y : fadeEvent.TargetAlpha; + StartFading(FaderMask.transform.localScale.x, _currentTargetScale, fadeEvent.Duration, fadeEvent.Curve, fadeEvent.ID, + fadeEvent.IgnoreTimeScale, fadeEvent.WorldPosition); + } + + /// + /// When catching an MMFadeInEvent, we fade our image in + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeInEvent fadeEvent) + { + if (fadeEvent.Duration > 0) + { + StartFading(MaskScale.y, MaskScale.x, fadeEvent.Duration, fadeEvent.Curve, fadeEvent.ID, + fadeEvent.IgnoreTimeScale, fadeEvent.WorldPosition); + } + else + { + FaderMask.transform.localScale = MaskScale.x * Vector3.one; + } + } + + /// + /// When catching an MMFadeOutEvent, we fade our image out + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeOutEvent fadeEvent) + { + if (fadeEvent.Duration > 0) + { + StartFading(MaskScale.x, MaskScale.y, fadeEvent.Duration, fadeEvent.Curve, fadeEvent.ID, + fadeEvent.IgnoreTimeScale, fadeEvent.WorldPosition); + } + else + { + FaderMask.transform.localScale = MaskScale.y * Vector3.one; + } + } + + /// + /// When catching an MMFadeStopEvent, we stop our fade + /// + /// Fade event. + public virtual void OnMMEvent(MMFadeStopEvent fadeStopEvent) + { + if (fadeStopEvent.ID == ID) + { + _fading = false; + if (fadeStopEvent.Restore) + { + FaderMask.transform.localScale = _initialScale * Vector3.one; + } + } + } + + /// + /// On enable, we start listening to events + /// + protected virtual void OnEnable() + { + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + this.MMEventStartListening(); + } + + /// + /// On disable, we stop listening to events + /// + protected virtual void OnDisable() + { + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + this.MMEventStopListening(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMUI/MMFaderRound.cs.meta b/Assets/Feel/MMTools/Core/MMUI/MMFaderRound.cs.meta new file mode 100644 index 0000000..7d94b96 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI/MMFaderRound.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b2691418b0bcfc540b38b297cf91acf2 +timeCreated: 1523969902 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MMUI/MMProgressBar.cs b/Assets/Feel/MMTools/Core/MMUI/MMProgressBar.cs new file mode 100644 index 0000000..d9eef6f --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI/MMProgressBar.cs @@ -0,0 +1,1002 @@ +using UnityEngine; +#if MM_UI +using UnityEngine.UI; +#endif +using System.Collections; +#if (MM_TEXTMESHPRO || MM_UGUI2) +using TMPro; +#endif +using UnityEngine.Events; +using UnityEngine.Serialization; + +namespace MoreMountains.Tools +{ + /// + /// Add this bar to an object and link it to a bar (possibly the same object the script is on), and you'll be able to resize the bar object based on a current value, located between a min and max value. + /// See the HealthBar.cs script for a use case + /// + [MMRequiresConstantRepaint] + [AddComponentMenu("More Mountains/Tools/GUI/MMProgressBar")] + public class MMProgressBar : MMMonoBehaviour + { + #if MM_UI + public enum MMProgressBarStates {Idle, Decreasing, Increasing, InDecreasingDelay, InIncreasingDelay } + /// the possible fill modes + public enum FillModes { LocalScale, FillAmount, Width, Height, Anchor } + /// the possible directions for the fill (for local scale and fill amount only) + public enum BarDirections { LeftToRight, RightToLeft, UpToDown, DownToUp } + /// the possible timescales the bar can work on + public enum TimeScales { UnscaledTime, Time } + /// the possible ways to animate the bar fill + public enum BarFillModes { SpeedBased, FixedDuration } + + [MMInspectorGroup("Bindings", true, 10)] + /// optional - the ID of the player associated to this bar + [Tooltip("optional - the ID of the player associated to this bar")] + public string PlayerID; + /// the main, foreground bar + [Tooltip("the main, foreground bar")] + public Transform ForegroundBar; + /// the delayed bar that will show when moving from a value to a new, lower value + [Tooltip("the delayed bar that will show when moving from a value to a new, lower value")] + [FormerlySerializedAs("DelayedBar")] + public Transform DelayedBarDecreasing; + /// the delayed bar that will show when moving from a value to a new, higher value + [Tooltip("the delayed bar that will show when moving from a value to a new, higher value")] + public Transform DelayedBarIncreasing; + + [MMInspectorGroup("Fill Settings", true, 11)] + /// the local scale or fillamount value to reach when the value associated to the bar is at 0% + [FormerlySerializedAs("StartValue")] + [Range(0f,1f)] + [Tooltip("the local scale or fillamount value to reach when the value associated to the bar is at 0%")] + public float MinimumBarFillValue = 0f; + /// the local scale or fillamount value to reach when the bar is full + [FormerlySerializedAs("EndValue")] + [Range(0f,1f)] + [Tooltip("the local scale or fillamount value to reach when the bar is full")] + public float MaximumBarFillValue = 1f; + /// whether or not to initialize the value of the bar on start + [Tooltip("whether or not to initialize the value of the bar on start")] + public bool SetInitialFillValueOnStart = false; + /// the initial value of the bar + [MMCondition("SetInitialFillValueOnStart", true)] + [Range(0f,1f)] + [Tooltip("the initial value of the bar")] + public float InitialFillValue = 0f; + /// the direction this bar moves to + [Tooltip("the direction this bar moves to")] + public BarDirections BarDirection = BarDirections.LeftToRight; + /// the foreground bar's fill mode + [Tooltip("the foreground bar's fill mode")] + public FillModes FillMode = FillModes.LocalScale; + /// defines whether the bar will work on scaled or unscaled time (whether or not it'll keep moving if time is slowed down for example) + [Tooltip("defines whether the bar will work on scaled or unscaled time (whether or not it'll keep moving if time is slowed down for example)")] + public TimeScales TimeScale = TimeScales.UnscaledTime; + /// the selected fill animation mode + [Tooltip("the selected fill animation mode")] + public BarFillModes BarFillMode = BarFillModes.SpeedBased; + + [MMInspectorGroup("Foreground Bar Settings", true, 12)] + /// whether or not the foreground bar should lerp + [Tooltip("whether or not the foreground bar should lerp")] + public bool LerpForegroundBar = true; + /// the speed at which to lerp the foreground bar + [Tooltip("the speed at which to lerp the foreground bar")] + [MMCondition("LerpForegroundBar", true)] + public float LerpForegroundBarSpeedDecreasing = 15f; + /// the speed at which to lerp the foreground bar if value is increasing + [Tooltip("the speed at which to lerp the foreground bar if value is increasing")] + [FormerlySerializedAs("LerpForegroundBarSpeed")] + [MMCondition("LerpForegroundBar", true)] + public float LerpForegroundBarSpeedIncreasing = 15f; + /// the speed at which to lerp the foreground bar if speed is decreasing + [Tooltip("the speed at which to lerp the foreground bar if speed is decreasing")] + [MMCondition("LerpForegroundBar", true)] + public float LerpForegroundBarDurationDecreasing = 0.2f; + /// the duration each update of the foreground bar should take (only if in fixed duration bar fill mode) + [Tooltip("the duration each update of the foreground bar should take (only if in fixed duration bar fill mode)")] + [MMCondition("LerpForegroundBar", true)] + public float LerpForegroundBarDurationIncreasing = 0.2f; + /// the curve to use when animating the foreground bar fill decreasing + [Tooltip("the curve to use when animating the foreground bar fill decreasing")] + [MMCondition("LerpForegroundBar", true)] + public AnimationCurve LerpForegroundBarCurveDecreasing = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + /// the curve to use when animating the foreground bar fill increasing + [Tooltip("the curve to use when animating the foreground bar fill increasing")] + [MMCondition("LerpForegroundBar", true)] + public AnimationCurve LerpForegroundBarCurveIncreasing = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + + [MMInspectorGroup("Delayed Bar Decreasing", true, 13)] + + /// the delay before the delayed bar moves (in seconds) + [Tooltip("the delay before the delayed bar moves (in seconds)")] + [FormerlySerializedAs("Delay")] + public float DecreasingDelay = 1f; + /// whether or not the delayed bar's animation should lerp + [Tooltip("whether or not the delayed bar's animation should lerp")] + [FormerlySerializedAs("LerpDelayedBar")] + public bool LerpDecreasingDelayedBar = true; + /// the speed at which to lerp the delayed bar + [Tooltip("the speed at which to lerp the delayed bar")] + [FormerlySerializedAs("LerpDelayedBarSpeed")] + [MMCondition("LerpDecreasingDelayedBar", true)] + public float LerpDecreasingDelayedBarSpeed = 15f; + /// the duration each update of the foreground bar should take (only if in fixed duration bar fill mode) + [Tooltip("the duration each update of the foreground bar should take (only if in fixed duration bar fill mode)")] + [FormerlySerializedAs("LerpDelayedBarDuration")] + [MMCondition("LerpDecreasingDelayedBar", true)] + public float LerpDecreasingDelayedBarDuration = 0.2f; + /// the curve to use when animating the delayed bar fill + [Tooltip("the curve to use when animating the delayed bar fill")] + [FormerlySerializedAs("LerpDelayedBarCurve")] + [MMCondition("LerpDecreasingDelayedBar", true)] + public AnimationCurve LerpDecreasingDelayedBarCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + + [MMInspectorGroup("Delayed Bar Increasing", true, 18)] + + /// the delay before the delayed bar moves (in seconds) + [Tooltip("the delay before the delayed bar moves (in seconds)")] + public float IncreasingDelay = 1f; + /// whether or not the delayed bar's animation should lerp + [Tooltip("whether or not the delayed bar's animation should lerp")] + public bool LerpIncreasingDelayedBar = true; + /// the speed at which to lerp the delayed bar + [Tooltip("the speed at which to lerp the delayed bar")] + [MMCondition("LerpIncreasingDelayedBar", true)] + public float LerpIncreasingDelayedBarSpeed = 15f; + /// the duration each update of the foreground bar should take (only if in fixed duration bar fill mode) + [Tooltip("the duration each update of the foreground bar should take (only if in fixed duration bar fill mode)")] + [MMCondition("LerpIncreasingDelayedBar", true)] + public float LerpIncreasingDelayedBarDuration = 0.2f; + /// the curve to use when animating the delayed bar fill + [Tooltip("the curve to use when animating the delayed bar fill")] + [MMCondition("LerpIncreasingDelayedBar", true)] + public AnimationCurve LerpIncreasingDelayedBarCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + + [MMInspectorGroup("Bump", true, 14)] + /// whether or not the bar should "bump" when changing value + [Tooltip("whether or not the bar should 'bump' when changing value")] + public bool BumpScaleOnChange = true; + /// whether or not the bar should bump when its value increases + [Tooltip("whether or not the bar should bump when its value increases")] + public bool BumpOnIncrease = false; + /// whether or not the bar should bump when its value decreases + [Tooltip("whether or not the bar should bump when its value decreases")] + public bool BumpOnDecrease = false; + /// the duration of the bump animation + [Tooltip("the duration of the bump animation")] + public float BumpDuration = 0.2f; + /// whether or not the bar should flash when bumping + [Tooltip("whether or not the bar should flash when bumping")] + public bool ChangeColorWhenBumping = true; + /// whether or not to store the initial bar color before a bump + [Tooltip("whether or not to store the initial bar color before a bump")] + public bool StoreBarColorOnPlay = true; + /// the color to apply to the bar when bumping + [Tooltip("the color to apply to the bar when bumping")] + [MMCondition("ChangeColorWhenBumping", true)] + public Color BumpColor = Color.white; + /// the curve to map the bump animation on + [Tooltip("the curve to map the bump animation on")] + [FormerlySerializedAs("BumpAnimationCurve")] + public AnimationCurve BumpScaleAnimationCurve = new AnimationCurve(new Keyframe(1, 1), new Keyframe(0.3f, 1.05f), new Keyframe(1, 1)); + /// the curve to map the bump animation color animation on + [Tooltip("the curve to map the bump animation color animation on")] + public AnimationCurve BumpColorAnimationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// if this is true, the BumpIntensityMultiplier curve will be evaluated to apply a multiplier to the bump intensity + [Tooltip("if this is true, the BumpIntensityMultiplier curve will be evaluated to apply a multiplier to the bump intensity")] + public bool ApplyBumpIntensityMultiplier = false; + /// the curve to map the bump's intensity on. x is the delta of the bump, y is the associated multiplier + [Tooltip("the curve to map the bump's intensity on. x is the normalized delta of the bump (from -1:-100% to 1:100%), y is the associated multiplier")] + [MMCondition("ApplyBumpIntensityMultiplier", true)] + public AnimationCurve BumpIntensityMultiplier = new AnimationCurve(new Keyframe(-1, 1), new Keyframe(1, 1)); + /// whether or not the bar is bumping right now + public virtual bool Bumping { get; protected set; } + + [MMInspectorGroup("Events", true, 16)] + + /// an event to trigger every time the bar bumps + [Tooltip("an event to trigger every time the bar bumps")] + public UnityEvent OnBump; + /// an event to trigger every time the bar bumps, with its bump intensity (based on BumpDeltaMultiplier) in parameter + [Tooltip("an event to trigger every time the bar bumps, with its bump intensity (based on BumpDeltaMultiplier) in parameter")] + public UnityEvent OnBumpIntensity; + /// an event to trigger every time the bar starts decreasing + [Tooltip("an event to trigger every time the bar starts decreasing")] + public UnityEvent OnBarMovementDecreasingStart; + /// an event to trigger every time the bar stops decreasing + [Tooltip("an event to trigger every time the bar stops decreasing")] + public UnityEvent OnBarMovementDecreasingStop; + /// an event to trigger every time the bar starts increasing + [Tooltip("an event to trigger every time the bar starts increasing")] + public UnityEvent OnBarMovementIncreasingStart; + /// an event to trigger every time the bar stops increasing + [Tooltip("an event to trigger every time the bar stops increasing")] + public UnityEvent OnBarMovementIncreasingStop; + + [MMInspectorGroup("Text", true, 20)] + /// a Text object to update with the bar's value + [Tooltip("a Text object to update with the bar's value")] + public Text PercentageText; + #if (MM_TEXTMESHPRO || MM_UGUI2) + /// a TMPro text object to update with the bar's value + [Tooltip("a TMPro text object to update with the bar's value")] + public TMP_Text PercentageTextMeshPro; + #endif + + /// a prefix to always add to the bar's value display + [Tooltip("a prefix to always add to the bar's value display")] + public string TextPrefix; + /// a suffix to always add to the bar's value display + [Tooltip("a suffix to always add to the bar's value display")] + public string TextSuffix; + /// a value multiplier to always apply to the bar's value when displaying it + [Tooltip("a value multiplier to always apply to the bar's value when displaying it")] + public float TextValueMultiplier = 1f; + /// the format in which the text should display + [Tooltip("the format in which the text should display")] + public string TextFormat = "{000}"; + /// whether or not to display the total after the current value + [Tooltip("whether or not to display the total after the current value")] + public bool DisplayTotal = false; + /// if DisplayTotal is true, the separator to put between the current value and the total + [Tooltip("if DisplayTotal is true, the separator to put between the current value and the total")] + [MMCondition("DisplayTotal", true)] + public string TotalSeparator = " / "; + + [MMInspectorGroup("Debug", true, 15)] + /// the value the bar will move to if you press the DebugSet button + [Tooltip("the value the bar will move to if you press the DebugSet button")] + [Range(0f, 1f)] + public float DebugNewTargetValue; + + [MMInspectorButton("DebugUpdateBar")] + public bool DebugUpdateBarButton; + [MMInspectorButton("DebugSetBar")] + public bool DebugSetBarButton; + [MMInspectorButton("Bump")] + public bool TestBumpButton; + [MMInspectorButton("Plus10Percent")] + public bool Plus10PercentButton; + [MMInspectorButton("Minus10Percent")] + public bool Minus10PercentButton; + + [MMInspectorGroup("Debug Read Only", true, 19)] + /// the current progress of the bar, ideally read only + [Tooltip("the current progress of the bar, ideally read only")] + [Range(0f,1f)] + public float BarProgress; + /// the value towards which the bar is currently interpolating, ideally read only + [Tooltip("the value towards which the bar is currently interpolating, ideally read only")] + [Range(0f,1f)] + public float BarTarget; + /// the current progress of the delayed bar increasing + [Tooltip("the current progress of the delayed bar increasing")] + [Range(0f,1f)] + public float DelayedBarIncreasingProgress; + /// the current progress of the delayed bar decreasing + [Tooltip("the current progress of the delayed bar decreasing")] + [Range(0f,1f)] + public float DelayedBarDecreasingProgress; + + protected bool _initialized; + protected Vector2 _initialBarSize; + protected Color _initialColor; + protected Vector3 _initialScale; + protected Image _foregroundImage; + protected Image _delayedDecreasingImage; + protected Image _delayedIncreasingImage; + protected Vector3 _targetLocalScale = Vector3.one; + protected float _newPercent; + protected float _percentLastTimeBarWasUpdated; + protected float _lastUpdateTimestamp; + protected float _time; + protected float _deltaTime; + protected int _direction; + protected Coroutine _coroutine; + protected bool _coroutineShouldRun = false; + protected bool _isDelayedBarIncreasingNotNull; + protected bool _isDelayedBarDecreasingNotNull; + protected bool _actualUpdate; + protected Vector2 _anchorVector; + protected float _delayedBarDecreasingProgress; + protected float _delayedBarIncreasingProgress; + protected MMProgressBarStates CurrentState = MMProgressBarStates.Idle; + protected string _updatedText; + protected string _totalText; + protected bool _isForegroundBarNotNull; + protected bool _isForegroundImageNotNull; + protected bool _isPercentageTextNotNull; + protected bool _isPercentageTextMeshProNotNull; + + #region PUBLIC_API + + /// + /// Updates the bar's values, using a normalized value + /// + /// + public virtual void UpdateBar01(float normalizedValue) + { + UpdateBar(Mathf.Clamp01(normalizedValue), 0f, 1f); + } + + /// + /// Updates the bar's values based on the specified parameters + /// + /// Current value. + /// Minimum value. + /// Max value. + public virtual void UpdateBar(float currentValue,float minValue,float maxValue) + { + if (!_initialized) + { + Initialization(); + } + + if (StoreBarColorOnPlay) + { + StoreInitialColor(); + } + + if (!this.gameObject.activeInHierarchy) + { + this.gameObject.SetActive(true); + } + + _newPercent = MMMaths.Remap(currentValue, minValue, maxValue, MinimumBarFillValue, MaximumBarFillValue); + + _actualUpdate = (BarTarget != _newPercent); + + if (!_actualUpdate) + { + return; + } + + if (CurrentState != MMProgressBarStates.Idle) + { + if ((CurrentState == MMProgressBarStates.Decreasing) || + (CurrentState == MMProgressBarStates.InDecreasingDelay)) + { + if (_newPercent >= BarTarget) + { + StopCoroutine(_coroutine); + SetBar01(BarTarget); + } + } + if ((CurrentState == MMProgressBarStates.Increasing) || + (CurrentState == MMProgressBarStates.InIncreasingDelay)) + { + if (_newPercent <= BarTarget) + { + StopCoroutine(_coroutine); + SetBar01(BarTarget); + } + } + } + + _percentLastTimeBarWasUpdated = BarProgress; + _delayedBarDecreasingProgress = DelayedBarDecreasingProgress; + _delayedBarIncreasingProgress = DelayedBarIncreasingProgress; + + BarTarget = _newPercent; + + if ((_newPercent != _percentLastTimeBarWasUpdated) && !Bumping) + { + Bump(); + } + + DetermineDeltaTime(); + _lastUpdateTimestamp = _time; + + DetermineDirection(); + if (_direction < 0) + { + OnBarMovementDecreasingStart?.Invoke(); + } + else + { + OnBarMovementIncreasingStart?.Invoke(); + } + + if (_coroutine != null) + { + StopCoroutine(_coroutine); + } + _coroutineShouldRun = true; + + + if (this.gameObject.activeInHierarchy) + { + _coroutine = StartCoroutine(UpdateBarsCo()); + } + else + { + SetBar(currentValue, minValue, maxValue); + } + + UpdateText(); + } + + /// + /// Sets the bar value to the one specified + /// + /// + /// + /// + public virtual void SetBar(float currentValue, float minValue, float maxValue) + { + float newPercent = MMMaths.Remap(currentValue, minValue, maxValue, 0f, 1f); + SetBar01(newPercent); + } + + /// + /// Sets the bar value to the normalized value set in parameter + /// + /// + public virtual void SetBar01(float newPercent) + { + if (!_initialized) + { + Initialization(); + } + + newPercent = MMMaths.Remap(newPercent, 0f, 1f, MinimumBarFillValue, MaximumBarFillValue); + BarProgress = newPercent; + DelayedBarDecreasingProgress = newPercent; + DelayedBarIncreasingProgress = newPercent; + //_newPercent = newPercent; + BarTarget = newPercent; + _percentLastTimeBarWasUpdated = newPercent; + _delayedBarDecreasingProgress = DelayedBarDecreasingProgress; + _delayedBarIncreasingProgress = DelayedBarIncreasingProgress; + SetBarInternal(newPercent, ForegroundBar, _foregroundImage, _initialBarSize); + SetBarInternal(newPercent, DelayedBarDecreasing, _delayedDecreasingImage, _initialBarSize); + SetBarInternal(newPercent, DelayedBarIncreasing, _delayedIncreasingImage, _initialBarSize); + UpdateText(); + _coroutineShouldRun = false; + CurrentState = MMProgressBarStates.Idle; + } + + #endregion PUBLIC_API + + #region START + + /// + /// On start we store our image component + /// + protected virtual void Start() + { + if (!_initialized) + { + Initialization(); + } + } + + protected virtual void OnEnable() + { + if (!_initialized) + { + return; + } + + StoreInitialColor(); + } + + public virtual void Initialization() + { + BarTarget = -1f; + _isForegroundBarNotNull = ForegroundBar != null; + _isDelayedBarDecreasingNotNull = DelayedBarDecreasing != null; + _isDelayedBarIncreasingNotNull = DelayedBarIncreasing != null; + _isPercentageTextNotNull = PercentageText != null; + #if (MM_TEXTMESHPRO || MM_UGUI2) + _isPercentageTextMeshProNotNull = PercentageTextMeshPro != null; + #endif + _initialScale = this.transform.localScale; + + if (_isForegroundBarNotNull) + { + _foregroundImage = ForegroundBar.GetComponent(); + _isForegroundImageNotNull = _foregroundImage != null; + _initialBarSize = _foregroundImage.rectTransform.sizeDelta; + } + if (_isDelayedBarDecreasingNotNull) + { + _delayedDecreasingImage = DelayedBarDecreasing.GetComponent(); + } + if (_isDelayedBarIncreasingNotNull) + { + _delayedIncreasingImage = DelayedBarIncreasing.GetComponent(); + } + _initialized = true; + + StoreInitialColor(); + + _percentLastTimeBarWasUpdated = BarProgress; + + if (SetInitialFillValueOnStart) + { + SetBar01(InitialFillValue); + } + } + + protected virtual void StoreInitialColor() + { + if (!Bumping && _isForegroundImageNotNull) + { + _initialColor = _foregroundImage.color; + } + } + + #endregion START + + #region TESTS + + /// + /// This test method, called via the inspector button of the same name, lets you test what happens when you update the bar to a certain value + /// + protected virtual void DebugUpdateBar() + { + this.UpdateBar01(DebugNewTargetValue); + } + + /// + /// Test method + /// + protected virtual void DebugSetBar() + { + this.SetBar01(DebugNewTargetValue); + } + + /// + /// Test method - increases the bar's current value by 10% + /// + public virtual void Plus10Percent() + { + float newProgress = BarTarget + 0.1f; + newProgress = Mathf.Clamp(newProgress, 0f, 1f); + UpdateBar01(newProgress); + } + + /// + /// Test method - decreases the bar's current value by 10% + /// + public virtual void Minus10Percent() + { + float newProgress = BarTarget - 0.1f; + newProgress = Mathf.Clamp(newProgress, 0f, 1f); + UpdateBar01(newProgress); + } + + /// + /// Test method - increases the bar's current value by 20% + /// + public virtual void Plus20Percent() + { + float newProgress = BarTarget + 0.2f; + newProgress = Mathf.Clamp(newProgress, 0f, 1f); + UpdateBar01(newProgress); + } + + /// + /// Test method - decreases the bar's current value by 20% + /// + public virtual void Minus20Percent() + { + float newProgress = BarTarget - 0.2f; + newProgress = Mathf.Clamp(newProgress, 0f, 1f); + UpdateBar01(newProgress); + } + + + #endregion TESTS + + /// + /// Updates the text component of the progress bar + /// + protected virtual void UpdateText() + { + if (_isPercentageTextMeshProNotNull || _isPercentageTextNotNull) + { + ComputeUpdatedText(); + } + + if (_isPercentageTextNotNull) + { + PercentageText.text = _updatedText; + } + #if (MM_TEXTMESHPRO || MM_UGUI2) + if (_isPercentageTextMeshProNotNull) + { + PercentageTextMeshPro.text = _updatedText; + } + #endif + } + + /// + /// Computes the updated text value to display on the progress bar + /// + protected virtual void ComputeUpdatedText() + { + _updatedText = TextPrefix + (BarTarget * TextValueMultiplier).ToString(TextFormat); + if (DisplayTotal) + { + _updatedText += TotalSeparator + (TextValueMultiplier).ToString(TextFormat); + } + _updatedText += TextSuffix; + } + + /// + /// On Update we update our bars + /// + protected virtual IEnumerator UpdateBarsCo() + { + while (_coroutineShouldRun) + { + DetermineDeltaTime(); + DetermineDirection(); + UpdateBars(); + yield return null; + } + + CurrentState = MMProgressBarStates.Idle; + yield break; + } + + protected virtual void DetermineDeltaTime() + { + _deltaTime = (TimeScale == TimeScales.Time) ? Time.deltaTime : Time.unscaledDeltaTime; + _time = (TimeScale == TimeScales.Time) ? Time.time : Time.unscaledTime; + } + + protected virtual void DetermineDirection() + { + _direction = (_newPercent > _percentLastTimeBarWasUpdated) ? 1 : -1; + } + + /// + /// Updates the foreground bar's scale + /// + protected virtual void UpdateBars() + { + float newFill; + float newFillDelayed; + float t1, t2 = 0f; + + // if the value is decreasing + if (_direction < 0) + { + newFill = ComputeNewFill(LerpForegroundBar, LerpForegroundBarSpeedDecreasing, LerpForegroundBarDurationDecreasing, LerpForegroundBarCurveDecreasing, 0f, _percentLastTimeBarWasUpdated, out t1); + SetBarInternal(newFill, ForegroundBar, _foregroundImage, _initialBarSize); + SetBarInternal(newFill, DelayedBarIncreasing, _delayedIncreasingImage, _initialBarSize); + + BarProgress = newFill; + DelayedBarIncreasingProgress = newFill; + + CurrentState = MMProgressBarStates.Decreasing; + + if (_time - _lastUpdateTimestamp > DecreasingDelay) + { + newFillDelayed = ComputeNewFill(LerpDecreasingDelayedBar, LerpDecreasingDelayedBarSpeed, LerpDecreasingDelayedBarDuration, LerpDecreasingDelayedBarCurve, DecreasingDelay,_delayedBarDecreasingProgress, out t2); + SetBarInternal(newFillDelayed, DelayedBarDecreasing, _delayedDecreasingImage, _initialBarSize); + + DelayedBarDecreasingProgress = newFillDelayed; + CurrentState = MMProgressBarStates.InDecreasingDelay; + } + } + else // if the value is increasing + { + newFill = ComputeNewFill(LerpForegroundBar, LerpForegroundBarSpeedIncreasing, LerpForegroundBarDurationIncreasing, LerpForegroundBarCurveIncreasing, 0f, _delayedBarIncreasingProgress, out t1); + SetBarInternal(newFill, DelayedBarIncreasing, _delayedIncreasingImage, _initialBarSize); + + DelayedBarIncreasingProgress = newFill; + CurrentState = MMProgressBarStates.Increasing; + + if (DelayedBarIncreasing == null) + { + newFill = ComputeNewFill(LerpForegroundBar, LerpForegroundBarSpeedIncreasing, LerpForegroundBarDurationIncreasing, LerpForegroundBarCurveIncreasing, 0f, _percentLastTimeBarWasUpdated, out t2); + SetBarInternal(newFill, DelayedBarDecreasing, _delayedDecreasingImage, _initialBarSize); + SetBarInternal(newFill, ForegroundBar, _foregroundImage, _initialBarSize); + + BarProgress = newFill; + DelayedBarDecreasingProgress = newFill; + CurrentState = MMProgressBarStates.InDecreasingDelay; + } + else + { + if (_time - _lastUpdateTimestamp > IncreasingDelay) + { + newFillDelayed = ComputeNewFill(LerpIncreasingDelayedBar, LerpForegroundBarSpeedIncreasing, LerpForegroundBarDurationIncreasing, LerpForegroundBarCurveIncreasing, IncreasingDelay, _delayedBarDecreasingProgress, out t2); + + SetBarInternal(newFillDelayed, DelayedBarDecreasing, _delayedDecreasingImage, _initialBarSize); + SetBarInternal(newFillDelayed, ForegroundBar, _foregroundImage, _initialBarSize); + + BarProgress = newFillDelayed; + DelayedBarDecreasingProgress = newFillDelayed; + CurrentState = MMProgressBarStates.InDecreasingDelay; + } + } + } + + if ((t1 >= 1f) && (t2 >= 1f)) + { + _coroutineShouldRun = false; + if (_direction > 0) + { + OnBarMovementIncreasingStop?.Invoke(); + } + else + { + OnBarMovementDecreasingStop?.Invoke(); + } + } + } + + protected virtual float ComputeNewFill(bool lerpBar, float barSpeed, float barDuration, AnimationCurve barCurve, float delay, float lastPercent, out float t) + { + float newFill = 0f; + t = 0f; + if (lerpBar) + { + float delta = 0f; + float timeSpent = _time - _lastUpdateTimestamp - delay; + float speed = barSpeed; + if (speed == 0f) { speed = 1f; } + + float duration = (BarFillMode == BarFillModes.FixedDuration) ? barDuration : (Mathf.Abs(_newPercent - lastPercent)) / speed; + + delta = MMMaths.Remap(timeSpent, 0f, duration, 0f, 1f); + delta = Mathf.Clamp(delta, 0f, 1f); + t = delta; + if (t < 1f) + { + delta = barCurve.Evaluate(delta); + newFill = Mathf.LerpUnclamped(lastPercent, _newPercent, delta); + } + else + { + newFill = _newPercent; + } + } + else + { + newFill = _newPercent; + } + + newFill = Mathf.Clamp( newFill, 0f, 1f); + + return newFill; + } + + protected virtual void SetBarInternal(float newAmount, Transform bar, Image image, Vector2 initialSize) + { + if (bar == null) + { + return; + } + + switch (FillMode) + { + case FillModes.LocalScale: + _targetLocalScale = Vector3.one; + switch (BarDirection) + { + case BarDirections.LeftToRight: + _targetLocalScale.x = newAmount; + break; + case BarDirections.RightToLeft: + _targetLocalScale.x = 1f - newAmount; + break; + case BarDirections.DownToUp: + _targetLocalScale.y = newAmount; + break; + case BarDirections.UpToDown: + _targetLocalScale.y = 1f - newAmount; + break; + } + + bar.localScale = _targetLocalScale; + break; + + case FillModes.Width: + if (image == null) + { + return; + } + float newSizeX = MMMaths.Remap(newAmount, 0f, 1f, 0, initialSize.x); + image.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, newSizeX); + break; + + case FillModes.Height: + if (image == null) + { + return; + } + float newSizeY = MMMaths.Remap(newAmount, 0f, 1f, 0, initialSize.y); + image.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, newSizeY); + break; + + case FillModes.FillAmount: + if (image == null) + { + return; + } + image.fillAmount = newAmount; + break; + case FillModes.Anchor: + if (image == null) + { + return; + } + switch (BarDirection) + { + case BarDirections.LeftToRight: + _anchorVector.x = 0f; + _anchorVector.y = 0f; + image.rectTransform.anchorMin = _anchorVector; + _anchorVector.x = newAmount; + _anchorVector.y = 1f; + image.rectTransform.anchorMax = _anchorVector; + break; + case BarDirections.RightToLeft: + _anchorVector.x = newAmount; + _anchorVector.y = 0f; + image.rectTransform.anchorMin = _anchorVector; + _anchorVector.x = 1f; + _anchorVector.y = 1f; + image.rectTransform.anchorMax = _anchorVector; + break; + case BarDirections.DownToUp: + _anchorVector.x = 0f; + _anchorVector.y = 0f; + image.rectTransform.anchorMin = _anchorVector; + _anchorVector.x = 1f; + _anchorVector.y = newAmount; + image.rectTransform.anchorMax = _anchorVector; + break; + case BarDirections.UpToDown: + _anchorVector.x = 0f; + _anchorVector.y = newAmount; + image.rectTransform.anchorMin = _anchorVector; + _anchorVector.x = 1f; + _anchorVector.y = 1f; + image.rectTransform.anchorMax = _anchorVector; + break; + } + break; + } + } + + #region Bump + + /// + /// Triggers a camera bump + /// + public virtual void Bump() + { + float delta = _newPercent - _percentLastTimeBarWasUpdated; + float intensityMultiplier = BumpIntensityMultiplier.Evaluate(delta); + + bool shouldBump = false; + + if (!_initialized) + { + return; + } + + DetermineDirection(); + + if (BumpOnIncrease && (_direction > 0)) + { + shouldBump = true; + } + + if (BumpOnDecrease && (_direction < 0)) + { + shouldBump = true; + } + + if (BumpScaleOnChange) + { + shouldBump = true; + } + + if (!shouldBump) + { + return; + } + + if (this.gameObject.activeInHierarchy) + { + StartCoroutine(BumpCoroutine(intensityMultiplier)); + } + + OnBump?.Invoke(); + OnBumpIntensity?.Invoke(ApplyBumpIntensityMultiplier ? intensityMultiplier : 1f); + } + + /// + /// A coroutine that (usually quickly) changes the scale of the bar + /// + /// The coroutine. + protected virtual IEnumerator BumpCoroutine(float intensityMultiplier) + { + float journey = 0f; + + Bumping = true; + + while (journey <= BumpDuration) + { + journey = journey + _deltaTime; + float percent = Mathf.Clamp01(journey / BumpDuration); + + float curvePercent = BumpScaleAnimationCurve.Evaluate(percent); + + if (ApplyBumpIntensityMultiplier) + { + float multiplier = Mathf.Abs(1f - curvePercent) * intensityMultiplier; + curvePercent = 1 + multiplier; + } + + float colorCurvePercent = BumpColorAnimationCurve.Evaluate(percent); + this.transform.localScale = curvePercent * _initialScale; + + if (ChangeColorWhenBumping && _isForegroundImageNotNull) + { + _foregroundImage.color = Color.Lerp(_initialColor, BumpColor, colorCurvePercent); + } + yield return null; + } + if (ChangeColorWhenBumping && _isForegroundImageNotNull) + { + _foregroundImage.color = _initialColor; + } + Bumping = false; + yield return null; + } + + #endregion Bump + + #region ShowHide + + /// + /// A simple method you can call to show the bar (set active true) + /// + public virtual void ShowBar() + { + this.gameObject.SetActive(true); + } + + /// + /// Hides (SetActive false) the progress bar object, after an optional delay + /// + /// + public virtual void HideBar(float delay) + { + if (delay <= 0) + { + this.gameObject.SetActive(false); + } + else if (this.gameObject.activeInHierarchy) + { + StartCoroutine(HideBarCo(delay)); + } + } + + /// + /// An internal coroutine used to handle the disabling of the progress bar after a delay + /// + /// + /// + protected virtual IEnumerator HideBarCo(float delay) + { + yield return MMCoroutine.WaitFor(delay); + this.gameObject.SetActive(false); + } + + #endregion ShowHide + + #endif + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MMUI/MMProgressBar.cs.meta b/Assets/Feel/MMTools/Core/MMUI/MMProgressBar.cs.meta new file mode 100644 index 0000000..c60d695 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MMUI/MMProgressBar.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 0a42a23ce4f9ed24abde69beacbef2f4 +timeCreated: 1523894192 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Core/MoreMountains.Tools.asmdef b/Assets/Feel/MMTools/Core/MoreMountains.Tools.asmdef new file mode 100644 index 0000000..8ead1b2 --- /dev/null +++ b/Assets/Feel/MMTools/Core/MoreMountains.Tools.asmdef @@ -0,0 +1,77 @@ +{ + "name": "MoreMountains.Tools", + "rootNamespace": "", + "references": [ + "GUID:75469ad4d38634e559750d17036d5f7c", + "GUID:4307f53044263cf4b835bd812fc161a4", + "GUID:6055be8ebefd69e48b49212b09b47b2f", + "GUID:457756d89b35d2941b3e7b37b4ece6f1", + "GUID:15fc0a57446b3144c949da3e2b9737a9", + "GUID:df380645f10b7bc4b97d4f5eb6303d95", + "GUID:d60799ab2a985554ea1a39cd38695018", + "GUID:57a0b9bc628ab4740af4b6f1f0b2e134", + "GUID:d04eb9c554ad44ceab303cecf0c0cf82", + "GUID:516a5277b8c3b4f4c8cc86b77b1591ff", + "GUID:2bafac87e7f4b9b418d9448d219b01ab" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.inputsystem", + "expression": "1.0.0", + "define": "MM_INPUTSYSTEM" + }, + { + "name": "com.unity.cinemachine", + "expression": "[1.0.0,3.0.0-pre]", + "define": "MM_CINEMACHINE" + }, + { + "name": "com.unity.cinemachine", + "expression": "3.0.0", + "define": "MM_CINEMACHINE3" + }, + { + "name": "com.unity.textmeshpro", + "expression": "1.0.0", + "define": "MM_TEXTMESHPRO" + }, + { + "name": "com.unity.render-pipelines.universal", + "expression": "1.0.0", + "define": "MM_URP" + }, + { + "name": "com.unity.render-pipelines.high-definition", + "expression": "1.0.0", + "define": "MM_HDRP" + }, + { + "name": "com.unity.postprocessing", + "expression": "1.0.0", + "define": "MM_POSTPROCESSING" + }, + { + "name": "com.unity.visualeffectgraph", + "expression": "1.0.0", + "define": "MM_VISUALEFFECTGRAPH" + }, + { + "name": "com.unity.ugui", + "expression": "2.0.0", + "define": "MM_UGUI2" + }, + { + "name": "com.unity.ugui", + "expression": "1.0.0", + "define": "MM_UI" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Core/MoreMountains.Tools.asmdef.meta b/Assets/Feel/MMTools/Core/MoreMountains.Tools.asmdef.meta new file mode 100644 index 0000000..a51459d --- /dev/null +++ b/Assets/Feel/MMTools/Core/MoreMountains.Tools.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4a1cb1490dc4df8409b2580d6b44e75e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos.meta b/Assets/Feel/MMTools/Demos.meta new file mode 100644 index 0000000..d306e15 --- /dev/null +++ b/Assets/Feel/MMTools/Demos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7b7e2fa08c8e2c94a8a21074911ce87e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer.meta b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer.meta new file mode 100644 index 0000000..f2d7116 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6034eb5ae1f63d046938e73a7a17d066 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRenderer.unity b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRenderer.unity new file mode 100644 index 0000000..98ba30f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRenderer.unity @@ -0,0 +1,5663 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: d4dd2ec6cf23b134d9bb46f69ca7daaf, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.99999946, g: 0.5420191, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &20807434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 20807435} + m_Layer: 0 + m_Name: Mid + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &20807435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20807434} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.46, y: 3.9199998, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 413556091} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &33538731 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 33538732} + m_Layer: 0 + m_Name: Control3 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &33538732 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 33538731} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.13, y: 4.98, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 413556091} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &56892210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 56892211} + m_Layer: 0 + m_Name: Mid + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &56892211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 56892210} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 14.25, y: 3.34, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2137754276} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &124904463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 124904466} + - component: {fileID: 124904465} + - component: {fileID: 124904464} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &124904464 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124904463} + m_Enabled: 1 +--- !u!20 &124904465 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124904463} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.31132078, g: 0.31132078, b: 0.31132078, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &124904466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 124904463} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &239464957 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 239464958} + - component: {fileID: 239464960} + m_Layer: 0 + m_Name: End + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &239464958 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239464957} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 17.08, y: 1.54, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1675030887} + m_Father: {fileID: 2137754276} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &239464960 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239464957} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &320325106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 320325108} + m_Layer: 0 + m_Name: Mid + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &320325108 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320325106} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.46, y: 3.9199998, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2062585004} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &367080838 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 367080839} + m_Layer: 0 + m_Name: Control4 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &367080839 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 367080838} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.39, y: 5.29, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 413556091} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &413556088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 413556091} + - component: {fileID: 413556090} + - component: {fileID: 413556089} + m_Layer: 0 + m_Name: MMBezierLineRenderer - RightArm - NoWiggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &413556089 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413556088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 177926c7a52cdb247b4ea692ea51aa68, type: 3} + m_Name: + m_EditorClassIdentifier: + AdjustmentHandles: + - {fileID: 843146713} + - {fileID: 1720615899} + - {fileID: 1888501706} + - {fileID: 20807435} + - {fileID: 33538732} + - {fileID: 367080839} + - {fileID: 1080195249} + NumberOfSegments: 50 + SortingLayerName: Default + NumberOfCurves: 2 +--- !u!120 &413556090 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413556088} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -0.8699999, y: -1.1199999, z: 0} + - {x: -1.0397282, y: -1.1862053, z: 0} + - {x: -1.2013031, y: -1.2465348, z: 0} + - {x: -1.354943, y: -1.3011107, z: 0} + - {x: -1.5008662, y: -1.3500546, z: 0} + - {x: -1.6392912, y: -1.3934888, z: 0} + - {x: -1.7704359, y: -1.4315348, z: 0} + - {x: -1.8945189, y: -1.4643148, z: 0} + - {x: -2.0117583, y: -1.4919504, z: 0} + - {x: -2.1223722, y: -1.5145633, z: 0} + - {x: -2.2265794, y: -1.5322762, z: 0} + - {x: -2.3245971, y: -1.5452102, z: 0} + - {x: -2.4166455, y: -1.5534878, z: 0} + - {x: -2.502941, y: -1.5572304, z: 0} + - {x: -2.5837026, y: -1.5565597, z: 0} + - {x: -2.6591487, y: -1.5515983, z: 0} + - {x: -2.7294974, y: -1.5424676, z: 0} + - {x: -2.7949667, y: -1.5292894, z: 0} + - {x: -2.8557756, y: -1.512186, z: 0} + - {x: -2.9121418, y: -1.491279, z: 0} + - {x: -2.9642837, y: -1.4666902, z: 0} + - {x: -3.0124195, y: -1.438542, z: 0} + - {x: -3.0567677, y: -1.406956, z: 0} + - {x: -3.0975468, y: -1.3720539, z: 0} + - {x: -3.1349747, y: -1.3339578, z: 0} + - {x: -3.1692693, y: -1.2927893, z: 0} + - {x: -3.2006493, y: -1.2486706, z: 0} + - {x: -3.2293336, y: -1.2017236, z: 0} + - {x: -3.2555392, y: -1.1520698, z: 0} + - {x: -3.2794852, y: -1.0998315, z: 0} + - {x: -3.3013902, y: -1.0451306, z: 0} + - {x: -3.3214712, y: -0.9880887, z: 0} + - {x: -3.3399477, y: -0.9288279, z: 0} + - {x: -3.357037, y: -0.86747, z: 0} + - {x: -3.3729587, y: -0.8041367, z: 0} + - {x: -3.38793, y: -0.73895025, z: 0} + - {x: -3.4021697, y: -0.67203254, z: 0} + - {x: -3.4158952, y: -0.60350513, z: 0} + - {x: -3.4293256, y: -0.5334901, z: 0} + - {x: -3.4426794, y: -0.4621094, z: 0} + - {x: -3.456174, y: -0.38948452, z: 0} + - {x: -3.4700284, y: -0.31573787, z: 0} + - {x: -3.4844606, y: -0.24099119, z: 0} + - {x: -3.4996886, y: -0.16536628, z: 0} + - {x: -3.5159314, y: -0.088985056, z: 0} + - {x: -3.5334067, y: -0.011969402, z: 0} + - {x: -3.5523329, y: 0.065559015, z: 0} + - {x: -3.5729282, y: 0.14347786, z: 0} + - {x: -3.5954115, y: 0.22166547, z: 0} + - {x: -3.62, y: 0.29999995, z: 0} + - {x: -3.62, y: 0.29999995, z: 0} + - {x: -3.640715, y: 0.3639565, z: 0} + - {x: -3.6624444, y: 0.42601278, z: 0} + - {x: -3.6851795, y: 0.48614284, z: 0} + - {x: -3.7089093, y: 0.5443206, z: 0} + - {x: -3.7336257, y: 0.6005202, z: 0} + - {x: -3.7593174, y: 0.6547154, z: 0} + - {x: -3.7859766, y: 0.70688045, z: 0} + - {x: -3.813592, y: 0.75698924, z: 0} + - {x: -3.842154, y: 0.80501556, z: 0} + - {x: -3.8716543, y: 0.85093373, z: 0} + - {x: -3.9020817, y: 0.89471745, z: 0} + - {x: -3.9334278, y: 0.93634105, z: 0} + - {x: -3.9656816, y: 0.97577816, z: 0} + - {x: -3.998834, y: 1.013003, z: 0} + - {x: -4.032875, y: 1.0479895, z: 0} + - {x: -4.0677958, y: 1.0807116, z: 0} + - {x: -4.1035857, y: 1.1111432, z: 0} + - {x: -4.140236, y: 1.1392586, z: 0} + - {x: -4.177736, y: 1.1650316, z: 0} + - {x: -4.2160764, y: 1.188436, z: 0} + - {x: -4.255247, y: 1.209446, z: 0} + - {x: -4.2952394, y: 1.2280358, z: 0} + - {x: -4.336044, y: 1.2441791, z: 0} + - {x: -4.37765, y: 1.25785, z: 0} + - {x: -4.4200473, y: 1.2690225, z: 0} + - {x: -4.463227, y: 1.2776703, z: 0} + - {x: -4.5071797, y: 1.2837678, z: 0} + - {x: -4.551895, y: 1.2872888, z: 0} + - {x: -4.597364, y: 1.2882072, z: 0} + - {x: -4.643576, y: 1.2864972, z: 0} + - {x: -4.690522, y: 1.2821327, z: 0} + - {x: -4.7381926, y: 1.2750876, z: 0} + - {x: -4.786577, y: 1.2653363, z: 0} + - {x: -4.835667, y: 1.2528522, z: 0} + - {x: -4.885452, y: 1.2376094, z: 0} + - {x: -4.9359226, y: 1.2195823, z: 0} + - {x: -4.987068, y: 1.1987445, z: 0} + - {x: -5.0388803, y: 1.1750703, z: 0} + - {x: -5.0913486, y: 1.1485335, z: 0} + - {x: -5.1444635, y: 1.1191078, z: 0} + - {x: -5.1982155, y: 1.0867678, z: 0} + - {x: -5.252595, y: 1.051487, z: 0} + - {x: -5.3075914, y: 1.0132396, z: 0} + - {x: -5.3631964, y: 0.9719998, z: 0} + - {x: -5.4193993, y: 0.9277412, z: 0} + - {x: -5.476191, y: 0.88043785, z: 0} + - {x: -5.5335617, y: 0.830064, z: 0} + - {x: -5.5915017, y: 0.7765935, z: 0} + - {x: -5.65, y: 0.72000027, z: 0} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 0.5 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0.8207547, g: 0.8207547, b: 0.8207547, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 1, g: 1, b: 1, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 6554 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 3 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!4 &413556091 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 413556088} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -10.08, y: -3.62, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 843146713} + - {fileID: 1720615899} + - {fileID: 1888501706} + - {fileID: 20807435} + - {fileID: 33538732} + - {fileID: 367080839} + - {fileID: 1080195249} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &454120794 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 454120795} + - component: {fileID: 454120797} + m_Layer: 0 + m_Name: Control3 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &454120795 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 454120794} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 16.32, y: 3.65, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2137754276} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &454120797 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 454120794} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &523521494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 523521495} + m_Layer: 0 + m_Name: Control3 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &523521495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523521494} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 16.32, y: 3.65, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 665220345} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &590311554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 590311556} + - component: {fileID: 590311557} + m_Layer: 0 + m_Name: Control4 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &590311556 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 590311554} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.39, y: 5.29, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2062585004} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &590311557 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 590311554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &622112409 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 622112410} + - component: {fileID: 622112411} + m_Layer: 0 + m_Name: MMBezierLineRendererDemoDudeHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &622112410 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622112409} + m_LocalRotation: {x: -0, y: -0, z: 0.97291106, w: 0.23117997} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1080195249} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 153.26701} +--- !u!212 &622112411 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622112409} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: 3eb4421e0ac10aa488e44538963f00e5, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1.28, y: 1.28} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &629939769 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 629939770} + m_Layer: 0 + m_Name: Control4 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &629939770 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 629939769} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15.37, y: 1.11, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 665220345} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &665220342 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 665220345} + - component: {fileID: 665220344} + - component: {fileID: 665220343} + m_Layer: 0 + m_Name: MMBezierLineRenderer - LeftArm - NoWiggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &665220343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665220342} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 177926c7a52cdb247b4ea692ea51aa68, type: 3} + m_Name: + m_EditorClassIdentifier: + AdjustmentHandles: + - {fileID: 1511050799} + - {fileID: 1521069615} + - {fileID: 1515801002} + - {fileID: 1383356089} + - {fileID: 523521495} + - {fileID: 629939770} + - {fileID: 705777285} + NumberOfSegments: 50 + SortingLayerName: Default + NumberOfCurves: 2 +--- !u!120 &665220344 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665220342} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 1.0100002, y: -1.0699999, z: 0} + - {x: 1.1036494, y: -1.16211, z: 0} + - {x: 1.194853, y: -1.245164, z: 0} + - {x: 1.2836899, y: -1.3194524, z: 0} + - {x: 1.3702382, y: -1.3852651, z: 0} + - {x: 1.454577, y: -1.4428927, z: 0} + - {x: 1.5367843, y: -1.4926248, z: 0} + - {x: 1.6169392, y: -1.5347521, z: 0} + - {x: 1.6951196, y: -1.5695646, z: 0} + - {x: 1.7714044, y: -1.5973521, z: 0} + - {x: 1.8458723, y: -1.6184057, z: 0} + - {x: 1.9186013, y: -1.6330147, z: 0} + - {x: 1.9896708, y: -1.64147, z: 0} + - {x: 2.0591583, y: -1.6440613, z: 0} + - {x: 2.1271434, y: -1.6410786, z: 0} + - {x: 2.1937037, y: -1.6328125, z: 0} + - {x: 2.258918, y: -1.6195534, z: 0} + - {x: 2.322865, y: -1.6015906, z: 0} + - {x: 2.3856235, y: -1.5792153, z: 0} + - {x: 2.4472718, y: -1.5527171, z: 0} + - {x: 2.5078878, y: -1.522386, z: 0} + - {x: 2.5675511, y: -1.4885128, z: 0} + - {x: 2.6263397, y: -1.4513874, z: 0} + - {x: 2.6843326, y: -1.4113001, z: 0} + - {x: 2.7416077, y: -1.3685408, z: 0} + - {x: 2.7982433, y: -1.3233998, z: 0} + - {x: 2.8543186, y: -1.2761673, z: 0} + - {x: 2.9099123, y: -1.2271338, z: 0} + - {x: 2.9651024, y: -1.1765887, z: 0} + - {x: 3.0199678, y: -1.124823, z: 0} + - {x: 3.0745866, y: -1.0721265, z: 0} + - {x: 3.1290376, y: -1.0187895, z: 0} + - {x: 3.1833994, y: -0.9651021, z: 0} + - {x: 3.2377505, y: -0.9113545, z: 0} + - {x: 3.2921696, y: -0.8578368, z: 0} + - {x: 3.346735, y: -0.8048395, z: 0} + - {x: 3.4015255, y: -0.75265247, z: 0} + - {x: 3.456619, y: -0.70156604, z: 0} + - {x: 3.5120945, y: -0.65187037, z: 0} + - {x: 3.5680308, y: -0.60385567, z: 0} + - {x: 3.6245062, y: -0.55781186, z: 0} + - {x: 3.6815991, y: -0.51402956, z: 0} + - {x: 3.739388, y: -0.4727987, z: 0} + - {x: 3.7979515, y: -0.43440953, z: 0} + - {x: 3.8573685, y: -0.39915222, z: 0} + - {x: 3.9177172, y: -0.36731696, z: 0} + - {x: 3.9790761, y: -0.33919385, z: 0} + - {x: 4.041524, y: -0.31507322, z: 0} + - {x: 4.1051393, y: -0.29524523, z: 0} + - {x: 4.17, y: -0.27999997, z: 0} + - {x: 4.17, y: -0.27999997, z: 0} + - {x: 4.29301, y: -0.26453194, z: 0} + - {x: 4.4087615, y: -0.2558891, z: 0} + - {x: 4.517547, y: -0.25377467, z: 0} + - {x: 4.6196537, y: -0.25789177, z: 0} + - {x: 4.7153726, y: -0.2679437, z: 0} + - {x: 4.8049927, y: -0.2836336, z: 0} + - {x: 4.8888044, y: -0.30466464, z: 0} + - {x: 4.9670973, y: -0.33073997, z: 0} + - {x: 5.04016, y: -0.36156285, z: 0} + - {x: 5.108283, y: -0.3968364, z: 0} + - {x: 5.171756, y: -0.4362638, z: 0} + - {x: 5.230869, y: -0.4795484, z: 0} + - {x: 5.285911, y: -0.5263931, z: 0} + - {x: 5.337172, y: -0.57650137, z: 0} + - {x: 5.3849416, y: -0.6295762, z: 0} + - {x: 5.4295096, y: -0.68532073, z: 0} + - {x: 5.4711647, y: -0.7434384, z: 0} + - {x: 5.510198, y: -0.8036322, z: 0} + - {x: 5.546899, y: -0.86560535, z: 0} + - {x: 5.5815554, y: -0.92906094, z: 0} + - {x: 5.61446, y: -0.99370235, z: 0} + - {x: 5.6459007, y: -1.0592327, z: 0} + - {x: 5.6761675, y: -1.1253552, z: 0} + - {x: 5.70555, y: -1.191773, z: 0} + - {x: 5.734338, y: -1.2581892, z: 0} + - {x: 5.7628193, y: -1.324307, z: 0} + - {x: 5.7912874, y: -1.3898296, z: 0} + - {x: 5.8200293, y: -1.4544606, z: 0} + - {x: 5.849335, y: -1.5179026, z: 0} + - {x: 5.879494, y: -1.5798588, z: 0} + - {x: 5.910797, y: -1.6400326, z: 0} + - {x: 5.943533, y: -1.698127, z: 0} + - {x: 5.977991, y: -1.7538457, z: 0} + - {x: 6.0144625, y: -1.8068917, z: 0} + - {x: 6.053236, y: -1.8569677, z: 0} + - {x: 6.0946016, y: -1.9037775, z: 0} + - {x: 6.138848, y: -1.9470236, z: 0} + - {x: 6.186265, y: -1.9864097, z: 0} + - {x: 6.2371435, y: -2.021639, z: 0} + - {x: 6.2917724, y: -2.0524144, z: 0} + - {x: 6.3504415, y: -2.0784392, z: 0} + - {x: 6.4134398, y: -2.0994167, z: 0} + - {x: 6.481058, y: -2.1150498, z: 0} + - {x: 6.553586, y: -2.1250424, z: 0} + - {x: 6.6313124, y: -2.1290967, z: 0} + - {x: 6.714527, y: -2.1269164, z: 0} + - {x: 6.80352, y: -2.1182048, z: 0} + - {x: 6.8985815, y: -2.1026652, z: 0} + - {x: 7, y: -2.08, z: 0} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 0.5 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0.8207547, g: 0.8207547, b: 0.8207547, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 1, g: 1, b: 1, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 6554 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 3 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!4 &665220345 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 665220342} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -10.08, y: -3.62, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1511050799} + - {fileID: 1521069615} + - {fileID: 1515801002} + - {fileID: 1383356089} + - {fileID: 523521495} + - {fileID: 629939770} + - {fileID: 705777285} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &705777284 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705777285} + m_Layer: 0 + m_Name: End + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &705777285 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705777284} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 17.08, y: 1.54, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 775867012} + m_Father: {fileID: 665220345} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &741245294 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 741245295} + - component: {fileID: 741245297} + m_Layer: 0 + m_Name: Control1 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &741245295 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741245294} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 12.64, y: 0.97, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2137754276} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &741245297 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741245294} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &741898272 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 741898273} + - component: {fileID: 741898274} + m_Layer: 0 + m_Name: MMBezierLineRendererDemoDudeHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &741898273 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741898272} + m_LocalRotation: {x: -0, y: -0, z: 0.97291106, w: 0.23117997} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: -1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1480235752} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 153.26701} +--- !u!212 &741898274 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741898272} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: 3eb4421e0ac10aa488e44538963f00e5, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1.28, y: 1.28} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &775867011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 775867012} + - component: {fileID: 775867013} + m_Layer: 0 + m_Name: MMBezierLineRendererDemoDudeHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &775867012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775867011} + m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 705777285} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} +--- !u!212 &775867013 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775867011} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: 3eb4421e0ac10aa488e44538963f00e5, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1.28, y: 1.28} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &776746534 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 776746535} + - component: {fileID: 776746537} + m_Layer: 0 + m_Name: Control2 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &776746535 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 776746534} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.88, y: 2.64, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2062585004} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &776746537 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 776746534} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &843146712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 843146713} + m_Layer: 0 + m_Name: Start + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &843146713 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 843146712} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9.21, y: 2.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 413556091} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &941127169 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 941127171} + - component: {fileID: 941127172} + m_Layer: 0 + m_Name: Control3 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &941127171 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941127169} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.13, y: 4.98, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2062585004} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &941127172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 941127169} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &1080195248 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1080195249} + m_Layer: 0 + m_Name: End + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1080195249 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080195248} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.43, y: 4.34, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 622112410} + m_Father: {fileID: 413556091} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1085712392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1085712394} + - component: {fileID: 1085712393} + m_Layer: 0 + m_Name: MMBezierLineRendererDemoDude + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &1085712393 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085712392} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: 0e4040556b24d6040826b165baa18a21, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 5.12, y: 5.12} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &1085712394 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085712392} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1383356088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1383356089} + m_Layer: 0 + m_Name: Mid + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1383356089 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1383356088} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 14.25, y: 3.34, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 665220345} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1435426885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1435426886} + - component: {fileID: 1435426888} + m_Layer: 0 + m_Name: Control4 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1435426886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435426885} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15.37, y: 1.11, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2137754276} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1435426888 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1435426885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &1480235751 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1480235752} + - component: {fileID: 1480235754} + m_Layer: 0 + m_Name: End + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1480235752 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480235751} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4.43, y: 4.34, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 741898273} + m_Father: {fileID: 2062585004} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1480235754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480235751} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &1511050798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1511050799} + m_Layer: 0 + m_Name: Start + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1511050799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1511050798} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 11.09, y: 2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 665220345} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1515801001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1515801002} + m_Layer: 0 + m_Name: Control2 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1515801002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1515801001} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 13.18, y: 3.13, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 665220345} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1521069614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1521069615} + m_Layer: 0 + m_Name: Control1 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1521069615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1521069614} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 12.64, y: 0.97, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 665220345} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1675030886 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1675030887} + - component: {fileID: 1675030888} + m_Layer: 0 + m_Name: MMBezierLineRendererDemoDudeHand + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1675030887 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675030886} + m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239464958} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} +--- !u!212 &1675030888 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675030886} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 21300000, guid: 3eb4421e0ac10aa488e44538963f00e5, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1.28, y: 1.28} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &1720615898 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1720615899} + m_Layer: 0 + m_Name: Control1 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1720615899 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1720615898} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.37, y: 1.3699999, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 413556091} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1734772539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1734772541} + m_Layer: 0 + m_Name: Start + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1734772541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1734772539} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9.21, y: 2.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2062585004} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1818202471 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1818202472} + m_Layer: 0 + m_Name: Start + m_TagString: Untagged + m_Icon: {fileID: 5132851093641282708, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1818202472 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1818202471} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 11.09, y: 2.55, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2137754276} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1859827273 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1859827274} + - component: {fileID: 1859827276} + m_Layer: 0 + m_Name: Control1 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1859827274 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859827273} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.37, y: 1.3699999, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2062585004} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1859827276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1859827273} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &1888501705 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1888501706} + m_Layer: 0 + m_Name: Control2 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1888501706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888501705} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.88, y: 2.64, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 413556091} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2062585001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2062585004} + - component: {fileID: 2062585003} + - component: {fileID: 2062585002} + m_Layer: 0 + m_Name: MMBezierLineRenderer - RightArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2062585002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062585001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 177926c7a52cdb247b4ea692ea51aa68, type: 3} + m_Name: + m_EditorClassIdentifier: + AdjustmentHandles: + - {fileID: 1734772541} + - {fileID: 1859827274} + - {fileID: 776746535} + - {fileID: 320325108} + - {fileID: 941127171} + - {fileID: 590311556} + - {fileID: 1480235752} + NumberOfSegments: 50 + SortingLayerName: Default + NumberOfCurves: 2 +--- !u!120 &2062585003 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062585001} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: -0.8699999, y: -1.1199999, z: 0} + - {x: -1.0397282, y: -1.1862053, z: 0} + - {x: -1.2013031, y: -1.2465348, z: 0} + - {x: -1.354943, y: -1.3011107, z: 0} + - {x: -1.5008662, y: -1.3500546, z: 0} + - {x: -1.6392912, y: -1.3934888, z: 0} + - {x: -1.7704359, y: -1.4315348, z: 0} + - {x: -1.8945189, y: -1.4643148, z: 0} + - {x: -2.0117583, y: -1.4919504, z: 0} + - {x: -2.1223722, y: -1.5145633, z: 0} + - {x: -2.2265794, y: -1.5322762, z: 0} + - {x: -2.3245971, y: -1.5452102, z: 0} + - {x: -2.4166455, y: -1.5534878, z: 0} + - {x: -2.502941, y: -1.5572304, z: 0} + - {x: -2.5837026, y: -1.5565597, z: 0} + - {x: -2.6591487, y: -1.5515983, z: 0} + - {x: -2.7294974, y: -1.5424676, z: 0} + - {x: -2.7949667, y: -1.5292894, z: 0} + - {x: -2.8557756, y: -1.512186, z: 0} + - {x: -2.9121418, y: -1.491279, z: 0} + - {x: -2.9642837, y: -1.4666902, z: 0} + - {x: -3.0124195, y: -1.438542, z: 0} + - {x: -3.0567677, y: -1.406956, z: 0} + - {x: -3.0975468, y: -1.3720539, z: 0} + - {x: -3.1349747, y: -1.3339578, z: 0} + - {x: -3.1692693, y: -1.2927893, z: 0} + - {x: -3.2006493, y: -1.2486706, z: 0} + - {x: -3.2293336, y: -1.2017236, z: 0} + - {x: -3.2555392, y: -1.1520698, z: 0} + - {x: -3.2794852, y: -1.0998315, z: 0} + - {x: -3.3013902, y: -1.0451306, z: 0} + - {x: -3.3214712, y: -0.9880887, z: 0} + - {x: -3.3399477, y: -0.9288279, z: 0} + - {x: -3.357037, y: -0.86747, z: 0} + - {x: -3.3729587, y: -0.8041367, z: 0} + - {x: -3.38793, y: -0.73895025, z: 0} + - {x: -3.4021697, y: -0.67203254, z: 0} + - {x: -3.4158952, y: -0.60350513, z: 0} + - {x: -3.4293256, y: -0.5334901, z: 0} + - {x: -3.4426794, y: -0.4621094, z: 0} + - {x: -3.456174, y: -0.38948452, z: 0} + - {x: -3.4700284, y: -0.31573787, z: 0} + - {x: -3.4844606, y: -0.24099119, z: 0} + - {x: -3.4996886, y: -0.16536628, z: 0} + - {x: -3.5159314, y: -0.088985056, z: 0} + - {x: -3.5334067, y: -0.011969402, z: 0} + - {x: -3.5523329, y: 0.065559015, z: 0} + - {x: -3.5729282, y: 0.14347786, z: 0} + - {x: -3.5954115, y: 0.22166547, z: 0} + - {x: -3.62, y: 0.29999995, z: 0} + - {x: -3.62, y: 0.29999995, z: 0} + - {x: -3.640715, y: 0.3639565, z: 0} + - {x: -3.6624444, y: 0.42601278, z: 0} + - {x: -3.6851795, y: 0.48614284, z: 0} + - {x: -3.7089093, y: 0.5443206, z: 0} + - {x: -3.7336257, y: 0.6005202, z: 0} + - {x: -3.7593174, y: 0.6547154, z: 0} + - {x: -3.7859766, y: 0.70688045, z: 0} + - {x: -3.813592, y: 0.75698924, z: 0} + - {x: -3.842154, y: 0.80501556, z: 0} + - {x: -3.8716543, y: 0.85093373, z: 0} + - {x: -3.9020817, y: 0.89471745, z: 0} + - {x: -3.9334278, y: 0.93634105, z: 0} + - {x: -3.9656816, y: 0.97577816, z: 0} + - {x: -3.998834, y: 1.013003, z: 0} + - {x: -4.032875, y: 1.0479895, z: 0} + - {x: -4.0677958, y: 1.0807116, z: 0} + - {x: -4.1035857, y: 1.1111432, z: 0} + - {x: -4.140236, y: 1.1392586, z: 0} + - {x: -4.177736, y: 1.1650316, z: 0} + - {x: -4.2160764, y: 1.188436, z: 0} + - {x: -4.255247, y: 1.209446, z: 0} + - {x: -4.2952394, y: 1.2280358, z: 0} + - {x: -4.336044, y: 1.2441791, z: 0} + - {x: -4.37765, y: 1.25785, z: 0} + - {x: -4.4200473, y: 1.2690225, z: 0} + - {x: -4.463227, y: 1.2776703, z: 0} + - {x: -4.5071797, y: 1.2837678, z: 0} + - {x: -4.551895, y: 1.2872888, z: 0} + - {x: -4.597364, y: 1.2882072, z: 0} + - {x: -4.643576, y: 1.2864972, z: 0} + - {x: -4.690522, y: 1.2821327, z: 0} + - {x: -4.7381926, y: 1.2750876, z: 0} + - {x: -4.786577, y: 1.2653363, z: 0} + - {x: -4.835667, y: 1.2528522, z: 0} + - {x: -4.885452, y: 1.2376094, z: 0} + - {x: -4.9359226, y: 1.2195823, z: 0} + - {x: -4.987068, y: 1.1987445, z: 0} + - {x: -5.0388803, y: 1.1750703, z: 0} + - {x: -5.0913486, y: 1.1485335, z: 0} + - {x: -5.1444635, y: 1.1191078, z: 0} + - {x: -5.1982155, y: 1.0867678, z: 0} + - {x: -5.252595, y: 1.051487, z: 0} + - {x: -5.3075914, y: 1.0132396, z: 0} + - {x: -5.3631964, y: 0.9719998, z: 0} + - {x: -5.4193993, y: 0.9277412, z: 0} + - {x: -5.476191, y: 0.88043785, z: 0} + - {x: -5.5335617, y: 0.830064, z: 0} + - {x: -5.5915017, y: 0.7765935, z: 0} + - {x: -5.65, y: 0.72000027, z: 0} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 0.5 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0.8207547, g: 0.8207547, b: 0.8207547, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 1, g: 1, b: 1, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 6554 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 3 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!4 &2062585004 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062585001} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -10.08, y: -3.62, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1734772541} + - {fileID: 1859827274} + - {fileID: 776746535} + - {fileID: 320325108} + - {fileID: 941127171} + - {fileID: 590311556} + - {fileID: 1480235752} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2085962822 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2085962823} + - component: {fileID: 2085962825} + m_Layer: 0 + m_Name: Control2 + m_TagString: Untagged + m_Icon: {fileID: 2974397684917235467, guid: 0000000000000000d000000000000000, type: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2085962823 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085962822} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 13.18, y: 3.13, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2137754276} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2085962825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2085962822} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 1 + FrequencyMax: 2 + AmplitudeMin: {x: -1, y: -1, z: -1} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &2137754273 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2137754276} + - component: {fileID: 2137754275} + - component: {fileID: 2137754274} + m_Layer: 0 + m_Name: MMBezierLineRenderer - LeftArm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2137754274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2137754273} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 177926c7a52cdb247b4ea692ea51aa68, type: 3} + m_Name: + m_EditorClassIdentifier: + AdjustmentHandles: + - {fileID: 1818202472} + - {fileID: 741245295} + - {fileID: 2085962823} + - {fileID: 56892211} + - {fileID: 454120795} + - {fileID: 1435426886} + - {fileID: 239464958} + NumberOfSegments: 50 + SortingLayerName: Default + NumberOfCurves: 2 +--- !u!120 &2137754275 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2137754273} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: + - {x: 1.0100002, y: -1.0699999, z: 0} + - {x: 1.1036494, y: -1.16211, z: 0} + - {x: 1.194853, y: -1.245164, z: 0} + - {x: 1.2836899, y: -1.3194524, z: 0} + - {x: 1.3702382, y: -1.3852651, z: 0} + - {x: 1.454577, y: -1.4428927, z: 0} + - {x: 1.5367843, y: -1.4926248, z: 0} + - {x: 1.6169392, y: -1.5347521, z: 0} + - {x: 1.6951196, y: -1.5695646, z: 0} + - {x: 1.7714044, y: -1.5973521, z: 0} + - {x: 1.8458723, y: -1.6184057, z: 0} + - {x: 1.9186013, y: -1.6330147, z: 0} + - {x: 1.9896708, y: -1.64147, z: 0} + - {x: 2.0591583, y: -1.6440613, z: 0} + - {x: 2.1271434, y: -1.6410786, z: 0} + - {x: 2.1937037, y: -1.6328125, z: 0} + - {x: 2.258918, y: -1.6195534, z: 0} + - {x: 2.322865, y: -1.6015906, z: 0} + - {x: 2.3856235, y: -1.5792153, z: 0} + - {x: 2.4472718, y: -1.5527171, z: 0} + - {x: 2.5078878, y: -1.522386, z: 0} + - {x: 2.5675511, y: -1.4885128, z: 0} + - {x: 2.6263397, y: -1.4513874, z: 0} + - {x: 2.6843326, y: -1.4113001, z: 0} + - {x: 2.7416077, y: -1.3685408, z: 0} + - {x: 2.7982433, y: -1.3233998, z: 0} + - {x: 2.8543186, y: -1.2761673, z: 0} + - {x: 2.9099123, y: -1.2271338, z: 0} + - {x: 2.9651024, y: -1.1765887, z: 0} + - {x: 3.0199678, y: -1.124823, z: 0} + - {x: 3.0745866, y: -1.0721265, z: 0} + - {x: 3.1290376, y: -1.0187895, z: 0} + - {x: 3.1833994, y: -0.9651021, z: 0} + - {x: 3.2377505, y: -0.9113545, z: 0} + - {x: 3.2921696, y: -0.8578368, z: 0} + - {x: 3.346735, y: -0.8048395, z: 0} + - {x: 3.4015255, y: -0.75265247, z: 0} + - {x: 3.456619, y: -0.70156604, z: 0} + - {x: 3.5120945, y: -0.65187037, z: 0} + - {x: 3.5680308, y: -0.60385567, z: 0} + - {x: 3.6245062, y: -0.55781186, z: 0} + - {x: 3.6815991, y: -0.51402956, z: 0} + - {x: 3.739388, y: -0.4727987, z: 0} + - {x: 3.7979515, y: -0.43440953, z: 0} + - {x: 3.8573685, y: -0.39915222, z: 0} + - {x: 3.9177172, y: -0.36731696, z: 0} + - {x: 3.9790761, y: -0.33919385, z: 0} + - {x: 4.041524, y: -0.31507322, z: 0} + - {x: 4.1051393, y: -0.29524523, z: 0} + - {x: 4.17, y: -0.27999997, z: 0} + - {x: 4.17, y: -0.27999997, z: 0} + - {x: 4.29301, y: -0.26453194, z: 0} + - {x: 4.4087615, y: -0.2558891, z: 0} + - {x: 4.517547, y: -0.25377467, z: 0} + - {x: 4.6196537, y: -0.25789177, z: 0} + - {x: 4.7153726, y: -0.2679437, z: 0} + - {x: 4.8049927, y: -0.2836336, z: 0} + - {x: 4.8888044, y: -0.30466464, z: 0} + - {x: 4.9670973, y: -0.33073997, z: 0} + - {x: 5.04016, y: -0.36156285, z: 0} + - {x: 5.108283, y: -0.3968364, z: 0} + - {x: 5.171756, y: -0.4362638, z: 0} + - {x: 5.230869, y: -0.4795484, z: 0} + - {x: 5.285911, y: -0.5263931, z: 0} + - {x: 5.337172, y: -0.57650137, z: 0} + - {x: 5.3849416, y: -0.6295762, z: 0} + - {x: 5.4295096, y: -0.68532073, z: 0} + - {x: 5.4711647, y: -0.7434384, z: 0} + - {x: 5.510198, y: -0.8036322, z: 0} + - {x: 5.546899, y: -0.86560535, z: 0} + - {x: 5.5815554, y: -0.92906094, z: 0} + - {x: 5.61446, y: -0.99370235, z: 0} + - {x: 5.6459007, y: -1.0592327, z: 0} + - {x: 5.6761675, y: -1.1253552, z: 0} + - {x: 5.70555, y: -1.191773, z: 0} + - {x: 5.734338, y: -1.2581892, z: 0} + - {x: 5.7628193, y: -1.324307, z: 0} + - {x: 5.7912874, y: -1.3898296, z: 0} + - {x: 5.8200293, y: -1.4544606, z: 0} + - {x: 5.849335, y: -1.5179026, z: 0} + - {x: 5.879494, y: -1.5798588, z: 0} + - {x: 5.910797, y: -1.6400326, z: 0} + - {x: 5.943533, y: -1.698127, z: 0} + - {x: 5.977991, y: -1.7538457, z: 0} + - {x: 6.0144625, y: -1.8068917, z: 0} + - {x: 6.053236, y: -1.8569677, z: 0} + - {x: 6.0946016, y: -1.9037775, z: 0} + - {x: 6.138848, y: -1.9470236, z: 0} + - {x: 6.186265, y: -1.9864097, z: 0} + - {x: 6.2371435, y: -2.021639, z: 0} + - {x: 6.2917724, y: -2.0524144, z: 0} + - {x: 6.3504415, y: -2.0784392, z: 0} + - {x: 6.4134398, y: -2.0994167, z: 0} + - {x: 6.481058, y: -2.1150498, z: 0} + - {x: 6.553586, y: -2.1250424, z: 0} + - {x: 6.6313124, y: -2.1290967, z: 0} + - {x: 6.714527, y: -2.1269164, z: 0} + - {x: 6.80352, y: -2.1182048, z: 0} + - {x: 6.8985815, y: -2.1026652, z: 0} + - {x: 7, y: -2.08, z: 0} + m_Parameters: + serializedVersion: 3 + widthMultiplier: 0.5 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 0.8207547, g: 0.8207547, b: 0.8207547, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 1, g: 1, b: 1, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 6554 + ctime2: 65535 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 3 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!4 &2137754276 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2137754273} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -10.08, y: -3.62, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1818202472} + - {fileID: 741245295} + - {fileID: 2085962823} + - {fileID: 56892211} + - {fileID: 454120795} + - {fileID: 1435426886} + - {fileID: 239464958} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRenderer.unity.meta b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRenderer.unity.meta new file mode 100644 index 0000000..78785db --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRenderer.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 29378ecd9dd8d3d49a37d6729efd1ca5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDude.png b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDude.png new file mode 100644 index 0000000..d885372 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDude.png differ diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDude.png.meta b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDude.png.meta new file mode 100644 index 0000000..39cdbaa --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDude.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: 0e4040556b24d6040826b165baa18a21 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDudeHand.png b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDudeHand.png new file mode 100644 index 0000000..16727f2 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDudeHand.png differ diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDudeHand.png.meta b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDudeHand.png.meta new file mode 100644 index 0000000..191b881 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererDemoDudeHand.png.meta @@ -0,0 +1,128 @@ +fileFormatVersion: 2 +guid: 3eb4421e0ac10aa488e44538963f00e5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererSkybox.mat b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererSkybox.mat new file mode 100644 index 0000000..898ff03 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererSkybox.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMBezierLineRendererSkybox + m_Shader: {fileID: 4800000, guid: 21b28f3ee4b3c13408ed85c229008f40, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Intensity: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Saturation: 1 + - _ScreenSpace: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _BottomColor: {r: 1, g: 0.6, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _TopColor: {r: 1, g: 0.33380696, b: 0, a: 0} diff --git a/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererSkybox.mat.meta b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererSkybox.mat.meta new file mode 100644 index 0000000..0e49427 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMBezierLineRenderer/MMBezierLineRendererSkybox.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4dd2ec6cf23b134d9bb46f69ca7daaf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMControls.meta b/Assets/Feel/MMTools/Demos/MMControls.meta new file mode 100644 index 0000000..c8ada56 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMControls.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ec460670d074b042acdefbeab9d9496 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMControls/MMControlsDemo.unity b/Assets/Feel/MMTools/Demos/MMControls/MMControlsDemo.unity new file mode 100644 index 0000000..fd2b60d --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMControls/MMControlsDemo.unity @@ -0,0 +1,3686 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.37311953, g: 0.38074014, b: 0.3587274, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 0 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 1024 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 0 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &25665773 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 25665774} + - component: {fileID: 25665778} + - component: {fileID: 25665777} + - component: {fileID: 25665776} + - component: {fileID: 25665775} + m_Layer: 0 + m_Name: ArrowLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &25665774 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25665773} + m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071067} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.24999996, y: 0.24999996, z: 0.25} + m_Children: [] + m_Father: {fileID: 518415681} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -178.5, y: 120.4} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &25665775 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25665773} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fc509a62d8e6cfc45a8431d8d586b9f6, type: 3} + m_Name: + m_EditorClassIdentifier: + AxisPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: LeftPressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + AxisReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: LeftReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + AxisPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: HorizontalAxisPressed + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: -1 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + PressedOpacity: 0.5 + AxisValue: -1 + MouseMode: 0 +--- !u!114 &25665776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25665773} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300014, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &25665777 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25665773} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &25665778 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25665773} + m_CullTransparentMesh: 0 +--- !u!1 &188941910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 188941911} + - component: {fileID: 188941914} + - component: {fileID: 188941913} + - component: {fileID: 188941912} + m_Layer: 0 + m_Name: JoystickRBackground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &188941911 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188941910} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 994295049} + m_Father: {fileID: 2119070081} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.000061035156, y: -0.00012207031} + m_SizeDelta: {x: 512, y: 512} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &188941912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188941910} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300010, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &188941913 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188941910} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &188941914 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 188941910} + m_CullTransparentMesh: 0 +--- !u!1 &216932621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 216932622} + - component: {fileID: 216932627} + - component: {fileID: 216932626} + - component: {fileID: 216932625} + - component: {fileID: 216932624} + m_Layer: 0 + m_Name: ButtonB + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &216932622 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216932621} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 986164730} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -405.00024, y: 506} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &216932624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216932621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 87a286771fa86194e979f187a1691a2a, type: 3} + m_Name: + m_EditorClassIdentifier: + Interactable: 1 + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: BPressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: BReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: BPressed + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + DisabledSprite: {fileID: 0} + DisabledChangeColor: 0 + DisabledColor: {r: 1, g: 1, b: 1, a: 1} + PressedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + HighlightedSprite: {fileID: 0} + HighlightedChangeColor: 0 + HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + PressedOpacity: 0.3 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 0 +--- !u!114 &216932625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216932621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300012, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &216932626 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216932621} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &216932627 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216932621} + m_CullTransparentMesh: 0 +--- !u!1 &242085933 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 242085934} + - component: {fileID: 242085936} + - component: {fileID: 242085935} + m_Layer: 5 + m_Name: SwipeZoneTest + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &242085934 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 242085933} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.00008, y: 1.00008, z: 1.00008} + m_Children: [] + m_Father: {fileID: 1540124523} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &242085935 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 242085933} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 100 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 200 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SWIPE ZONE +--- !u!222 &242085936 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 242085933} + m_CullTransparentMesh: 0 +--- !u!1 &245136920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 245136921} + - component: {fileID: 245136924} + - component: {fileID: 245136923} + - component: {fileID: 245136922} + m_Layer: 0 + m_Name: Joystick2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &245136921 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245136920} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1075232283} + - {fileID: 1556635896} + m_Father: {fileID: 779537215} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 826, y: -1303} + m_SizeDelta: {x: 512, y: 512} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &245136922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245136920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300010, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &245136923 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245136920} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &245136924 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245136920} + m_CullTransparentMesh: 0 +--- !u!1 &294347308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 294347309} + - component: {fileID: 294347313} + - component: {fileID: 294347312} + - component: {fileID: 294347311} + - component: {fileID: 294347310} + m_Layer: 0 + m_Name: JoystickRepositionable + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &294347309 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294347308} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1381578807} + - {fileID: 1697706954} + m_Father: {fileID: 779537215} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 1399, y: -513} + m_SizeDelta: {x: 1024, y: 1024} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &294347310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294347308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1a60ed48e41f7574f890b8669d6fbfe0, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetCamera: {fileID: 1353894569} + HorizontalAxisEnabled: 1 + VerticalAxisEnabled: 1 + MaxRangeMode: 0 + MaxRange: 1.5 + MaxRangeTransform: {fileID: 0} + JoystickValue: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: RepositionableJoystickMovement + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + JoystickNormalizedValue: + m_PersistentCalls: + m_Calls: [] + JoystickMagnitudeValue: + m_PersistentCalls: + m_Calls: [] + OnPointerDownEvent: + m_PersistentCalls: + m_Calls: [] + OnDragEvent: + m_PersistentCalls: + m_Calls: [] + OnPointerUpEvent: + m_PersistentCalls: + m_Calls: [] + RotatingIndicator: {fileID: 0} + RotatingIndicatorThreshold: 0.1 + PressedOpacity: 0.5 + InterpolateOpacity: 1 + InterpolateOpacitySpeed: 1 + RawValue: {x: 0, y: 0} + NormalizedValue: {x: 0, y: 0} + Magnitude: 0 + DrawGizmos: 1 + KnobCanvasGroup: {fileID: 1697706956} + BackgroundCanvasGroup: {fileID: 1381578809} + ConstrainToInitialRectangle: 1 + ResetPositionToInitialOnRelease: 0 +--- !u!114 &294347311 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294347308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.2} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &294347312 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294347308} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &294347313 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294347308} + m_CullTransparentMesh: 0 +--- !u!1 &431597985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 431597986} + - component: {fileID: 431597990} + - component: {fileID: 431597989} + - component: {fileID: 431597988} + - component: {fileID: 431597987} + m_Layer: 0 + m_Name: ButtonA + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &431597986 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431597985} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 986164730} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -644.0001, y: 219} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &431597987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431597985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 87a286771fa86194e979f187a1691a2a, type: 3} + m_Name: + m_EditorClassIdentifier: + Interactable: 1 + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: APressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: AReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: APressed + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + DisabledSprite: {fileID: 0} + DisabledChangeColor: 0 + DisabledColor: {r: 1, g: 1, b: 1, a: 1} + PressedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + HighlightedSprite: {fileID: 0} + HighlightedChangeColor: 0 + HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + PressedOpacity: 0.3 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 0 +--- !u!114 &431597988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431597985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300002, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &431597989 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431597985} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &431597990 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 431597985} + m_CullTransparentMesh: 0 +--- !u!1 &518415680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 518415681} + - component: {fileID: 518415683} + - component: {fileID: 518415682} + m_Layer: 5 + m_Name: Arrows + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &518415681 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518415680} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 4, y: 4, z: 4} + m_Children: + - {fileID: 584722751} + - {fileID: 1839492109} + - {fileID: 824043105} + - {fileID: 25665774} + m_Father: {fileID: 779537215} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 440, y: -512} + m_SizeDelta: {x: 211.79999, y: 254.49252} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &518415682 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518415680} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &518415683 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 518415680} + m_CullTransparentMesh: 0 +--- !u!1 &584722750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 584722751} + - component: {fileID: 584722755} + - component: {fileID: 584722754} + - component: {fileID: 584722753} + - component: {fileID: 584722752} + m_Layer: 0 + m_Name: ArrowDown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &584722751 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584722750} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.25, y: 0.25, z: 0.25} + m_Children: [] + m_Father: {fileID: 518415681} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -108.5, y: 50.4} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &584722752 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584722750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fc509a62d8e6cfc45a8431d8d586b9f6, type: 3} + m_Name: + m_EditorClassIdentifier: + AxisPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: DownPressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + AxisReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: DownReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + AxisPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: VerticalAxisPressed + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: -1 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + PressedOpacity: 0.5 + AxisValue: -1 + MouseMode: 0 +--- !u!114 &584722753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584722750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300014, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &584722754 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584722750} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &584722755 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 584722750} + m_CullTransparentMesh: 0 +--- !u!1 &595800276 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 595800277} + - component: {fileID: 595800281} + - component: {fileID: 595800280} + - component: {fileID: 595800279} + - component: {fileID: 595800278} + m_Layer: 0 + m_Name: ButtonX + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &595800277 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595800276} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 986164730} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -883, y: 506} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &595800278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595800276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 87a286771fa86194e979f187a1691a2a, type: 3} + m_Name: + m_EditorClassIdentifier: + Interactable: 1 + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: XPressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: XReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: XPressed + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + DisabledSprite: {fileID: 0} + DisabledChangeColor: 0 + DisabledColor: {r: 1, g: 1, b: 1, a: 1} + PressedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + HighlightedSprite: {fileID: 0} + HighlightedChangeColor: 0 + HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + PressedOpacity: 0.3 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 0 +--- !u!114 &595800279 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595800276} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300008, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &595800280 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595800276} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &595800281 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595800276} + m_CullTransparentMesh: 0 +--- !u!1 &775086466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 186740, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 775086467} + - component: {fileID: 775086470} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &775086467 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 444286, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775086466} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -24.6, y: -1.52, z: -100} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &775086470 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11499252, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 775086466} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!1 &779537214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 779537215} + - component: {fileID: 779537216} + m_Layer: 0 + m_Name: MMTouchControls + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &779537215 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779537214} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2119070081} + - {fileID: 1749976725} + - {fileID: 986164730} + - {fileID: 245136921} + - {fileID: 518415681} + - {fileID: 294347309} + - {fileID: 1540124523} + m_Father: {fileID: 1746135496} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &779537216 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779537214} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &824043104 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 824043105} + - component: {fileID: 824043109} + - component: {fileID: 824043108} + - component: {fileID: 824043107} + - component: {fileID: 824043106} + m_Layer: 0 + m_Name: ArrowRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &824043105 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824043104} + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071067} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.25, y: 0.25, z: 0.25} + m_Children: [] + m_Father: {fileID: 518415681} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -38.5, y: 120.4} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &824043106 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824043104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fc509a62d8e6cfc45a8431d8d586b9f6, type: 3} + m_Name: + m_EditorClassIdentifier: + AxisPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: RightPressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + AxisReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: RightReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + AxisPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: HorizontalAxisPressed + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 1 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + PressedOpacity: 0.5 + AxisValue: 1 + MouseMode: 0 +--- !u!114 &824043107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824043104} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300014, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &824043108 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824043104} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &824043109 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824043104} + m_CullTransparentMesh: 0 +--- !u!1 &986164729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 986164730} + - component: {fileID: 986164732} + - component: {fileID: 986164731} + m_Layer: 5 + m_Name: Buttons + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &986164730 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 986164729} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 431597986} + - {fileID: 1860798435} + - {fileID: 1060593625} + - {fileID: 595800277} + - {fileID: 216932622} + m_Father: {fileID: 779537215} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -672, y: 542.88} + m_SizeDelta: {x: 1309.5244, y: 1085.7623} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &986164731 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 986164729} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &986164732 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 986164729} + m_CullTransparentMesh: 0 +--- !u!1 &994295048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 994295049} + - component: {fileID: 994295051} + - component: {fileID: 994295050} + m_Layer: 0 + m_Name: JoystickDirectionMarkerContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &994295049 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994295048} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1593595809} + m_Father: {fileID: 188941911} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.000061035156, y: 0.00010299682} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &994295050 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994295048} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &994295051 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994295048} + m_CullTransparentMesh: 0 +--- !u!1 &1060593624 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1060593625} + - component: {fileID: 1060593629} + - component: {fileID: 1060593628} + - component: {fileID: 1060593627} + - component: {fileID: 1060593626} + m_Layer: 0 + m_Name: ButtonY + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1060593625 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060593624} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 986164730} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -620.0001, y: 769} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1060593626 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060593624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 87a286771fa86194e979f187a1691a2a, type: 3} + m_Name: + m_EditorClassIdentifier: + Interactable: 1 + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: YPressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: YReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: YPressed + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + DisabledSprite: {fileID: 0} + DisabledChangeColor: 0 + DisabledColor: {r: 1, g: 1, b: 1, a: 1} + PressedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + HighlightedSprite: {fileID: 0} + HighlightedChangeColor: 0 + HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + PressedOpacity: 0.3 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 0 +--- !u!114 &1060593627 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060593624} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300006, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1060593628 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060593624} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1060593629 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1060593624} + m_CullTransparentMesh: 0 +--- !u!1 &1075232282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1075232283} + - component: {fileID: 1075232287} + - component: {fileID: 1075232286} + - component: {fileID: 1075232285} + - component: {fileID: 1075232284} + m_Layer: 0 + m_Name: Joystick2Knob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1075232283 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075232282} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 245136921} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1075232284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075232282} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f6a0577d46b80a4f929e57370c60650, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetCamera: {fileID: 1353894569} + HorizontalAxisEnabled: 1 + VerticalAxisEnabled: 1 + MaxRangeMode: 1 + MaxRange: 1.5 + MaxRangeTransform: {fileID: 1556635896} + JoystickValue: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: RightJoystickMovement + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + JoystickNormalizedValue: + m_PersistentCalls: + m_Calls: [] + JoystickMagnitudeValue: + m_PersistentCalls: + m_Calls: [] + OnPointerDownEvent: + m_PersistentCalls: + m_Calls: [] + OnDragEvent: + m_PersistentCalls: + m_Calls: [] + OnPointerUpEvent: + m_PersistentCalls: + m_Calls: [] + RotatingIndicator: {fileID: 0} + RotatingIndicatorThreshold: 0.1 + PressedOpacity: 0.5 + InterpolateOpacity: 1 + InterpolateOpacitySpeed: 1 + RawValue: {x: 0, y: 0} + NormalizedValue: {x: 0, y: 0} + Magnitude: 0 + DrawGizmos: 1 +--- !u!114 &1075232285 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075232282} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.73140293, g: 1, b: 0.5424528, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1075232286 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075232282} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1075232287 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075232282} + m_CullTransparentMesh: 0 +--- !u!1 &1353894565 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 170940, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1353894570} + - component: {fileID: 1353894569} + - component: {fileID: 1353894568} + m_Layer: 0 + m_Name: UICamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!124 &1353894568 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 12432142, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353894565} + m_Enabled: 1 +--- !u!20 &1353894569 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 2037892, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353894565} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 4 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 10 + m_Depth: 1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 32 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1353894570 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 479578, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1353894565} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -52.7, y: 0, z: -100} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1746135496} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1381578806 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1381578807} + - component: {fileID: 1381578810} + - component: {fileID: 1381578809} + - component: {fileID: 1381578808} + m_Layer: 0 + m_Name: JoystickRBackground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1381578807 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381578806} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 294347309} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 511.99994, y: 511.99988} + m_SizeDelta: {x: 512, y: 512} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1381578808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381578806} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300010, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1381578809 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381578806} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1381578810 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381578806} + m_CullTransparentMesh: 0 +--- !u!1 &1497221652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1497221654} + - component: {fileID: 1497221653} + m_Layer: 0 + m_Name: TestInputManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1497221653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497221652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9640016db57d1c646a90fa18111eebf0, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1497221654 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1497221652} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -52.7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1540124522 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1540124523} + - component: {fileID: 1540124527} + - component: {fileID: 1540124526} + - component: {fileID: 1540124525} + - component: {fileID: 1540124524} + m_Layer: 0 + m_Name: MMSwipeZone + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1540124523 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540124522} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 242085934} + m_Father: {fileID: 779537215} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 1510.9999, y: -1425} + m_SizeDelta: {x: 800, y: 800} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1540124524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540124522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5a68e615c17d2bf49a1a082e34fd9b6e, type: 3} + m_Name: + m_EditorClassIdentifier: + MinimalSwipeLength: 50 + MaximumPressLength: 10 + ZoneSwiped: + m_PersistentCalls: + m_Calls: [] + ZonePressed: + m_PersistentCalls: + m_Calls: [] + MouseMode: 1 +--- !u!114 &1540124525 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540124522} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.15405147, g: 0, b: 0.16037738, a: 0.30588236} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1540124526 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540124522} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1540124527 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540124522} + m_CullTransparentMesh: 0 +--- !u!1 &1556635895 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1556635896} + m_Layer: 0 + m_Name: MaxDistanceMarker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1556635896 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1556635895} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 245136921} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 204, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1593595808 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1593595809} + - component: {fileID: 1593595812} + - component: {fileID: 1593595811} + - component: {fileID: 1593595810} + m_Layer: 0 + m_Name: JoystickDirectionMarker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1593595809 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593595808} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 994295049} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 207.6, y: 0} + m_SizeDelta: {x: 30, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1593595810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593595808} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8936883, b: 0.504717, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 0b9510d2790829140953392aae2b6679, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1593595811 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593595808} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1593595812 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1593595808} + m_CullTransparentMesh: 0 +--- !u!1 &1626840950 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1626840951} + - component: {fileID: 1626840954} + - component: {fileID: 1626840953} + - component: {fileID: 1626840952} + - component: {fileID: 1626840955} + m_Layer: 0 + m_Name: Joystick1Knob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1626840951 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626840950} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1749976725} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1626840952 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626840950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.5613208, g: 0.840603, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1626840953 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626840950} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1626840954 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626840950} + m_CullTransparentMesh: 0 +--- !u!114 &1626840955 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626840950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f6a0577d46b80a4f929e57370c60650, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetCamera: {fileID: 1353894569} + HorizontalAxisEnabled: 1 + VerticalAxisEnabled: 1 + MaxRangeMode: 0 + MaxRange: 2 + MaxRangeTransform: {fileID: 0} + JoystickValue: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: LeftJoystickMovement + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + JoystickNormalizedValue: + m_PersistentCalls: + m_Calls: [] + JoystickMagnitudeValue: + m_PersistentCalls: + m_Calls: [] + OnPointerDownEvent: + m_PersistentCalls: + m_Calls: [] + OnDragEvent: + m_PersistentCalls: + m_Calls: [] + OnPointerUpEvent: + m_PersistentCalls: + m_Calls: [] + RotatingIndicator: {fileID: 0} + RotatingIndicatorThreshold: 0.1 + PressedOpacity: 0.5 + InterpolateOpacity: 1 + InterpolateOpacitySpeed: 1 + RawValue: {x: 0, y: 0} + NormalizedValue: {x: 0, y: 0} + Magnitude: 0 + DrawGizmos: 1 +--- !u!1 &1697706953 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1697706954} + - component: {fileID: 1697706957} + - component: {fileID: 1697706956} + - component: {fileID: 1697706955} + m_Layer: 0 + m_Name: JoystickRKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1697706954 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697706953} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 294347309} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.000061035156, y: 0} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1697706955 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697706953} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8936883, b: 0.504717, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1697706956 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697706953} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1697706957 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1697706953} + m_CullTransparentMesh: 0 +--- !u!1 &1746135495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 122404, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1746135496} + - component: {fileID: 1746135499} + - component: {fileID: 1746135498} + - component: {fileID: 1746135497} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1746135496 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22453656, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746135495} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 779537215} + - {fileID: 2045273525} + m_Father: {fileID: 1353894570} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1746135497 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11497174, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746135495} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 0 +--- !u!114 &1746135498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 11425668, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746135495} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 3840, y: 2160} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1746135499 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 22320466, guid: ffe3c56180a798b468a52d62fa67827a, + type: 2} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1746135495} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 1353894569} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: -1624263147 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1749976724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1749976725} + - component: {fileID: 1749976729} + - component: {fileID: 1749976728} + - component: {fileID: 1749976727} + m_Layer: 0 + m_Name: Joystick1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1749976725 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749976724} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1626840951} + m_Father: {fileID: 779537215} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 278, y: -1306} + m_SizeDelta: {x: 512, y: 512} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1749976727 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749976724} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300010, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1749976728 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749976724} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1749976729 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1749976724} + m_CullTransparentMesh: 0 +--- !u!1 &1808251078 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1808251083} + - component: {fileID: 1808251082} + - component: {fileID: 1808251080} + - component: {fileID: 1808251079} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1808251079 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808251078} + m_Enabled: 1 +--- !u!124 &1808251080 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808251078} + m_Enabled: 1 +--- !u!20 &1808251082 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808251078} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.8396226, g: 0.48024744, b: 0, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1808251083 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808251078} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1839492108 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1839492109} + - component: {fileID: 1839492113} + - component: {fileID: 1839492112} + - component: {fileID: 1839492111} + - component: {fileID: 1839492110} + m_Layer: 0 + m_Name: ArrowUp + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1839492109 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839492108} + m_LocalRotation: {x: 0, y: 0, z: 1, w: -0.00000016292068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.25, y: 0.25, z: 0.25} + m_Children: [] + m_Father: {fileID: 518415681} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -108.5, y: 190.4} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1839492110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839492108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fc509a62d8e6cfc45a8431d8d586b9f6, type: 3} + m_Name: + m_EditorClassIdentifier: + AxisPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: UpPressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + AxisReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: UpReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + AxisPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: VerticalAxisPressed + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 1 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + PressedOpacity: 0.5 + AxisValue: 1 + MouseMode: 0 +--- !u!114 &1839492111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839492108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300014, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1839492112 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839492108} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1839492113 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839492108} + m_CullTransparentMesh: 0 +--- !u!1 &1860798434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1860798435} + - component: {fileID: 1860798439} + - component: {fileID: 1860798438} + - component: {fileID: 1860798437} + - component: {fileID: 1860798436} + m_Layer: 0 + m_Name: ButtonRT + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1860798435 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860798434} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 986164730} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -270.00012, y: 848} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1860798436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860798434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 87a286771fa86194e979f187a1691a2a, type: 3} + m_Name: + m_EditorClassIdentifier: + Interactable: 1 + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: RTPressedFirstTime + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: RTReleased + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: RTPressed + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + DisabledSprite: {fileID: 0} + DisabledChangeColor: 0 + DisabledColor: {r: 1, g: 1, b: 1, a: 1} + PressedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + HighlightedSprite: {fileID: 0} + HighlightedChangeColor: 0 + HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + PressedOpacity: 0.3 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 0 +--- !u!114 &1860798437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860798434} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300004, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1860798438 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860798434} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1860798439 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1860798434} + m_CullTransparentMesh: 0 +--- !u!1 &1895996095 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1895996097} + - component: {fileID: 1895996096} + m_Layer: 0 + m_Name: InputModule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1895996096 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895996095} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c82cf35166701394ab910f41269944f9, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1895996097 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895996095} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -54.440533, y: -1.9587855, z: -0.0344429} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1896397403 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1896397404} + - component: {fileID: 1896397407} + - component: {fileID: 1896397406} + - component: {fileID: 1896397405} + m_Layer: 0 + m_Name: JoystickRKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1896397404 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896397403} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2119070081} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.000061035156, y: 0} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1896397405 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896397403} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8936883, b: 0.504717, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 358b5d9f23bc9413e87c9948acc67ee1, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &1896397406 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896397403} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1896397407 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1896397403} + m_CullTransparentMesh: 0 +--- !u!1 &2045273524 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2045273525} + - component: {fileID: 2045273527} + - component: {fileID: 2045273526} + m_Layer: 5 + m_Name: Disclaimer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2045273525 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045273524} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1746135496} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 1906.8, y: 76.20001} + m_SizeDelta: {x: 3753.7, y: 84.5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2045273526 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045273524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 200 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: This demo is best viewed with a Game window set to a 1920x1080 ratio. +--- !u!222 &2045273527 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045273524} + m_CullTransparentMesh: 0 +--- !u!1 &2119070080 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2119070081} + - component: {fileID: 2119070085} + - component: {fileID: 2119070084} + - component: {fileID: 2119070083} + - component: {fileID: 2119070086} + m_Layer: 0 + m_Name: FollowerJoystick + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2119070081 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119070080} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 188941911} + - {fileID: 1896397404} + m_Father: {fileID: 779537215} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 2875.5, y: -632.72} + m_SizeDelta: {x: 1929, y: 1265.4314} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2119070083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119070080} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6792453, g: 0, b: 0, a: 0.21960784} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &2119070084 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119070080} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &2119070085 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119070080} + m_CullTransparentMesh: 0 +--- !u!114 &2119070086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119070080} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 12f6f90faaf30834980e50fda0c74a9c, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetCamera: {fileID: 1353894569} + HorizontalAxisEnabled: 1 + VerticalAxisEnabled: 1 + MaxRangeMode: 0 + MaxRange: 1.5 + MaxRangeTransform: {fileID: 0} + JoystickValue: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1497221653} + m_MethodName: FollowerJoystickMovement + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + JoystickNormalizedValue: + m_PersistentCalls: + m_Calls: [] + JoystickMagnitudeValue: + m_PersistentCalls: + m_Calls: [] + OnPointerDownEvent: + m_PersistentCalls: + m_Calls: [] + OnDragEvent: + m_PersistentCalls: + m_Calls: [] + OnPointerUpEvent: + m_PersistentCalls: + m_Calls: [] + RotatingIndicator: {fileID: 994295049} + RotatingIndicatorThreshold: 0.1 + PressedOpacity: 0.5 + InterpolateOpacity: 1 + InterpolateOpacitySpeed: 0.3 + RawValue: {x: 0, y: 0} + NormalizedValue: {x: 0, y: 0} + Magnitude: 0 + DrawGizmos: 1 + KnobCanvasGroup: {fileID: 1896397406} + BackgroundCanvasGroup: {fileID: 188941913} + ResetPositionToInitialOnRelease: 0 + InterpolateFollowMovement: 1 + InterpolateFollowMovementSpeed: 1 + SpringFollowInterpolation: 1 + SpringDamping: 0.6 + SpringFrequency: 4 + ShouldConstrainBackground: 1 + BackgroundConstraintRectTransform: {fileID: 0} + BackgroundConstraintPaddingLeft: 0 + BackgroundConstraintPaddingRight: 0 + BackgroundConstraintPaddingTop: 0 + BackgroundConstraintPaddingBottom: 0 diff --git a/Assets/Feel/MMTools/Demos/MMControls/MMControlsDemo.unity.meta b/Assets/Feel/MMTools/Demos/MMControls/MMControlsDemo.unity.meta new file mode 100644 index 0000000..9843f34 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMControls/MMControlsDemo.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc659b5219bfdc945881c41b2c491b52 +timeCreated: 1462398451 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMControls/Sprites.meta b/Assets/Feel/MMTools/Demos/MMControls/Sprites.meta new file mode 100644 index 0000000..52f6856 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMControls/Sprites.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b0fa082c85c0a432db31381c1a6aaa81 +folderAsset: yes +timeCreated: 1462375704 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMControls/Sprites/MMControlsDemoSpritesheet.png b/Assets/Feel/MMTools/Demos/MMControls/Sprites/MMControlsDemoSpritesheet.png new file mode 100644 index 0000000..2eaf0fa Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMControls/Sprites/MMControlsDemoSpritesheet.png differ diff --git a/Assets/Feel/MMTools/Demos/MMControls/Sprites/MMControlsDemoSpritesheet.png.meta b/Assets/Feel/MMTools/Demos/MMControls/Sprites/MMControlsDemoSpritesheet.png.meta new file mode 100644 index 0000000..ff39461 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMControls/Sprites/MMControlsDemoSpritesheet.png.meta @@ -0,0 +1,335 @@ +fileFormatVersion: 2 +guid: 358b5d9f23bc9413e87c9948acc67ee1 +TextureImporter: + internalIDToNameTable: + - first: + 213: 21300000 + second: joystick-knob + - first: + 213: 21300002 + second: button-A + - first: + 213: 21300004 + second: button-RT + - first: + 213: 21300006 + second: button-Y + - first: + 213: 21300008 + second: button-X + - first: + 213: 21300010 + second: joystick-back + - first: + 213: 21300012 + second: button-B + - first: + 213: 21300014 + second: arrow + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: joystick-knob + rect: + serializedVersion: 2 + x: 0 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 02305410000000000800000000000000 + internalID: 21300000 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: button-A + rect: + serializedVersion: 2 + x: 768 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 22305410000000000800000000000000 + internalID: 21300002 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: button-RT + rect: + serializedVersion: 2 + x: 256 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 42305410000000000800000000000000 + internalID: 21300004 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: button-Y + rect: + serializedVersion: 2 + x: 512 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 62305410000000000800000000000000 + internalID: 21300006 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: button-X + rect: + serializedVersion: 2 + x: 512 + y: 0 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: 82305410000000000800000000000000 + internalID: 21300008 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: joystick-back + rect: + serializedVersion: 2 + x: 0 + y: 512 + width: 512 + height: 512 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: a2305410000000000800000000000000 + internalID: 21300010 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: button-B + rect: + serializedVersion: 2 + x: 768 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: c2305410000000000800000000000000 + internalID: 21300012 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: arrow + rect: + serializedVersion: 2 + x: 768 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: -1 + bones: [] + spriteID: e2305410000000000800000000000000 + internalID: 21300014 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + arrow: 21300014 + button-A: 21300002 + button-B: 21300012 + button-RT: 21300004 + button-X: 21300008 + button-Y: 21300006 + joystick-back: 21300010 + joystick-knob: 21300000 + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu.meta b/Assets/Feel/MMTools/Demos/MMDebugMenu.meta new file mode 100644 index 0000000..3b2278a --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0baff3febb58e3741bd19e1551098049 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenu.unity b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenu.unity new file mode 100644 index 0000000..619dd59 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenu.unity @@ -0,0 +1,10501 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0, g: 0.74009764, b: 0.9339623, a: 1} + m_FogMode: 3 + m_FogDensity: 0.05 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 8547c1a0cd0ea294ea9f2068a4b0ff93, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &47384300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 47384301} + m_Layer: 0 + m_Name: Cameras --------------------------------------- + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &47384301 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 47384300} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 738129290} + - {fileID: 532913264} + - {fileID: 1386774268} + - {fileID: 931170842} + - {fileID: 349066822} + - {fileID: 1016470751} + - {fileID: 1705276673} + - {fileID: 140948802} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &89326335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 89326336} + - component: {fileID: 89326340} + - component: {fileID: 89326341} + m_Layer: 0 + m_Name: MiddleLifter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &89326336 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 89326335} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1515690113} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &89326340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 89326335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + InitializationMode: 2 + AutoInitialization: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + OnInitializationComplete: + m_PersistentCalls: + m_Calls: [] + OnEnable: + m_PersistentCalls: + m_Calls: [] + OnDisable: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - rid: 0 + - rid: 1 + - rid: 2 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + StopFeedbacksOnDisable: 0 + PlayCount: 0 + references: + version: 2 + RefIds: + - rid: 0 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: 2084567686 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 89326340} + DebugActive: 0 + AnimatePositionTarget: {fileID: 373981969} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - rid: 1 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: -1222532314 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 89326340} + DebugActive: 0 + AnimatePositionTarget: {fileID: 245078392} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0.3, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - rid: 2 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: 1290932267 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 89326340} + DebugActive: 0 + AnimatePositionTarget: {fileID: 1075166998} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &89326341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 89326335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2313508e7b935c54d9877ca20548a1b5, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonEventName: LiftMiddle + MMDEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 89326340} + m_TargetAssemblyTypeName: + m_MethodName: PlayFeedbacks + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + TestValue: 1 + TestSetValueButton: 0 +--- !u!1 &126932019 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 126932020} + - component: {fileID: 126932021} + m_Layer: 0 + m_Name: Point Light (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &126932020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126932019} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.38, y: 2.9, z: -3.02} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 974558482} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &126932021 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126932019} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 0.85882354, g: 0.36406818, b: 0.050980404, a: 1} + m_Intensity: 2 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &140948801 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140948802} + - component: {fileID: 140948803} + m_Layer: 0 + m_Name: InputModule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &140948802 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140948801} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &140948803 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140948801} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c82cf35166701394ab910f41269944f9, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &182327109 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 182327110} + - component: {fileID: 182327112} + - component: {fileID: 182327111} + m_Layer: 0 + m_Name: CylinderContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &182327110 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 182327109} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.127, y: 1.5, z: 3.04} + m_LocalScale: {x: 1, y: 0.5, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1670538600} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &182327111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 182327109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65443987bd9048f408777b8d8f4c1994, type: 3} + m_Name: + m_EditorClassIdentifier: + SignalMode: 1 + TimeScale: 0 + Duration: 10 + GlobalMultiplier: 1 + CurrentLevel: 0 + Playing: 0 + DriverTime: 0 + PlayOnStart: 1 + OnValueChange: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 182327112} + m_TargetAssemblyTypeName: + m_MethodName: SetLevel + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + StartShakingButton: 0 + AnimatedPreview: 0 + BackAndForth: 0 + BackAndForthMirrorPoint: 0.5 + SignalList: + array: + - Active: 1 + SignalType: 0 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + TweenCurve: 9 + Mode: 0 + Phase: 0 + Frequency: 2 + Amplitude: 1 + Offset: 0 + Invert: 0 + - Active: 1 + SignalType: 7 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + TweenCurve: 9 + Mode: 0 + Phase: 0 + Frequency: 7.43 + Amplitude: 1 + Offset: 0.19 + Invert: 0 + Clamps: {x: 0, y: 1} + Bias: 0.5 +--- !u!114 &182327112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 182327109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1458272992} + TargetComponent: {fileID: 1458272993} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: localPosition + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 0 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!1 &245078392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 245078393} + - component: {fileID: 245078395} + - component: {fileID: 245078394} + m_Layer: 0 + m_Name: Cube2Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &245078393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245078392} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 921597313} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &245078394 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245078392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 8a0f71e021d8c02408e3b9145082dc1b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &245078395 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245078392} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!1 &349066821 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 349066822} + - component: {fileID: 349066823} + m_Layer: 0 + m_Name: GlobalPostProcessingProfile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &349066822 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349066821} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.7941098, y: 2.0751998, z: 1.51717} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &349066823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349066821} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: 07c0d76c76e70e64c82dc522636cd034, type: 2} + isGlobal: 1 + blendDistance: 0 + weight: 1 + priority: 0 +--- !u!1 &373981969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 373981970} + - component: {fileID: 373981972} + - component: {fileID: 373981971} + m_Layer: 0 + m_Name: Cube1Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &373981970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 373981969} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5006512734875221718} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &373981971 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 373981969} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 859110124559f53448796d58be533933, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &373981972 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 373981969} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!1 &432579134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 432579135} + - component: {fileID: 432579139} + - component: {fileID: 432579140} + m_Layer: 0 + m_Name: RightLifter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &432579135 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 432579134} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1515690113} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &432579139 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 432579134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + InitializationMode: 2 + AutoInitialization: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + OnInitializationComplete: + m_PersistentCalls: + m_Calls: [] + OnEnable: + m_PersistentCalls: + m_Calls: [] + OnDisable: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - rid: 0 + - rid: 1 + - rid: 2 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + StopFeedbacksOnDisable: 0 + PlayCount: 0 + references: + version: 2 + RefIds: + - rid: 0 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: -541581163 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 432579139} + DebugActive: 0 + AnimatePositionTarget: {fileID: 373981969} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - rid: 1 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: 2133382303 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 432579139} + DebugActive: 0 + AnimatePositionTarget: {fileID: 245078392} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - rid: 2 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: -1164745492 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 432579139} + DebugActive: 0 + AnimatePositionTarget: {fileID: 1075166998} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0.3, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &432579140 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 432579134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2313508e7b935c54d9877ca20548a1b5, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonEventName: LiftRight + MMDEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 432579139} + m_TargetAssemblyTypeName: + m_MethodName: PlayFeedbacks + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + TestValue: 1 + TestSetValueButton: 0 +--- !u!1 &495809376 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 495809378} + - component: {fileID: 495809377} + m_Layer: 0 + m_Name: DebugConsoleTest1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &495809377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 495809376} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef713a82a60f6cf45a06e190e86b84d3, type: 3} + m_Name: + m_EditorClassIdentifier: + Label: Position +--- !u!4 &495809378 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 495809376} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 694.4801, y: 715.86993, z: -245.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &532913263 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 532913264} + - component: {fileID: 532913267} + - component: {fileID: 532913266} + - component: {fileID: 532913265} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &532913264 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532913263} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2032115193} + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &532913265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532913263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &532913266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532913263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &532913267 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532913263} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &722569211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 722569212} + m_Layer: 0 + m_Name: Scene ------------------------------------------ + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &722569212 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722569211} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1011637503} + - {fileID: 182327110} + - {fileID: 2046071221} + - {fileID: 5006512734875221718} + - {fileID: 921597313} + - {fileID: 1561756053} + - {fileID: 1515690113} + - {fileID: 726143100} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &726143099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 726143100} + m_Layer: 0 + m_Name: Tilters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &726143100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726143099} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.1490083, y: 2.344472, z: 0.33819103} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1213136939} + - {fileID: 973069735} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &738129289 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 738129290} + - component: {fileID: 738129291} + m_Layer: 0 + m_Name: FPSUnlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &738129290 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738129289} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &738129291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738129289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 32dd23bf97680be41a75b45b50f0d8ac, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetFPS: 300 + RenderFrameInterval: 0 + VSyncCount: 0 + EnableNumberShortcuts: 0 +--- !u!1 &859209804 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 859209805} + - component: {fileID: 859209807} + - component: {fileID: 859209806} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &859209805 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859209804} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1981585729} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &859209806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859209804} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 100 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: OPEN DEBUG MENU +--- !u!222 &859209807 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859209804} + m_CullTransparentMesh: 0 +--- !u!1 &921597312 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 921597313} + - component: {fileID: 921597315} + - component: {fileID: 921597316} + m_Layer: 0 + m_Name: Cube2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &921597313 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921597312} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: 0} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 245078393} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &921597315 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921597312} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + InitializationMode: 2 + AutoInitialization: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + OnInitializationComplete: + m_PersistentCalls: + m_Calls: [] + OnEnable: + m_PersistentCalls: + m_Calls: [] + OnDisable: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - rid: 0 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + StopFeedbacksOnDisable: 0 + PlayCount: 0 + references: + version: 2 + RefIds: + - rid: 0 + type: {class: MMF_Rotation, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: 1720840865 + Label: Rotation + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 921597315} + DebugActive: 0 + AnimateRotationTarget: {fileID: 245078393} + Mode: 0 + RotationSpace: 0 + AnimateRotationDuration: 4 + RemapCurveZero: 0 + RemapCurveOne: 180 + AnimateX: 0 + AnimateRotationTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 1 + AnimateRotationTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimateRotationTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + DetermineRotationOnPlay: 0 + ToDestinationSpace: 0 + DestinationAngles: {x: 0, y: 180, z: 0} + ToDestinationTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 10 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateRotationX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ToDestinationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &921597316 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921597312} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2313508e7b935c54d9877ca20548a1b5, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonEventName: RotateMiddleCube + MMDEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 921597315} + m_TargetAssemblyTypeName: + m_MethodName: PlayFeedbacks + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + TestValue: 1 + TestSetValueButton: 0 +--- !u!1 &931170841 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 931170842} + - component: {fileID: 931170847} + - component: {fileID: 931170845} + - component: {fileID: 931170846} + - component: {fileID: 931170844} + m_Layer: 0 + m_Name: CM vcam1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &931170842 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + serializedVersion: 2 + m_LocalRotation: {x: -0.000076204706, y: -0.4871739, z: -0.000042510856, w: 0.87330496} + m_LocalPosition: {x: 7.112, y: 1.907, z: -2.58} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: -0.01, y: -58.31, z: 0} +--- !u!114 &931170844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 00b2d199b96b516448144ab30fb26aed, type: 3} + m_Name: + m_EditorClassIdentifier: + ApplyAfter: 1 + ChannelMask: 1 + Gain: 1 + Use2DDistance: 0 + UseCameraSpace: 0 + ReactionSettings: + m_SecondaryNoise: {fileID: 0} + AmplitudeGain: 0 + FrequencyGain: 0 + Duration: 0 + m_NoiseOffsets: {x: 0, y: 0, z: 0} +--- !u!114 &931170845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3} + m_Name: + m_EditorClassIdentifier: + TrackerSettings: + BindingMode: 1 + PositionDamping: {x: 1, y: 1, z: 1} + AngularDampingMode: 0 + RotationDamping: {x: 0, y: 0, z: 0} + QuaternionDamping: 0 + FollowOffset: {x: -1.8469992, y: -0.625, z: -9.092002} +--- !u!114 &931170846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f38bda98361e1de48a4ca2bd86ea3c17, type: 3} + m_Name: + m_EditorClassIdentifier: + Composition: + ScreenPosition: {x: 0, y: 0} + DeadZone: + Enabled: 1 + Size: {x: 0, y: 0} + HardLimits: + Enabled: 1 + Size: {x: 0.8, y: 0.8} + Offset: {x: 0, y: 0} + CenterOnActivate: 1 + TargetOffset: {x: 0, y: 0, z: 0} + Damping: {x: 0.5, y: 0.5} + Lookahead: + Enabled: 0 + Time: 0 + Smoothing: 10 + IgnoreY: 0 +--- !u!114 &931170847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + m_Name: + m_EditorClassIdentifier: + Priority: + Enabled: 1 + m_Value: 10 + OutputChannel: 1 + StandbyUpdate: 2 + m_StreamingVersion: 20230301 + m_LegacyPriority: 0 + Target: + TrackingTarget: {fileID: 0} + LookAtTarget: {fileID: 0} + CustomLookAtTarget: 0 + Lens: + FieldOfView: 40 + OrthographicSize: 10 + NearClipPlane: 0.1 + FarClipPlane: 5000 + Dutch: 0 + ModeOverride: 0 + PhysicalProperties: + GateFit: 2 + SensorSize: {x: 1, y: 1} + LensShift: {x: 0, y: 0} + FocusDistance: 10 + Iso: 200 + ShutterSpeed: 0.005 + Aperture: 16 + BladeCount: 5 + Curvature: {x: 2, y: 11} + BarrelClipping: 0.25 + Anamorphism: 0 + BlendHint: 0 +--- !u!1 &973069734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 973069735} + - component: {fileID: 973069738} + - component: {fileID: 973069739} + m_Layer: 0 + m_Name: TilterRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &973069735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 973069734} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 726143100} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &973069738 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 973069734} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + - {fileID: 0} + InitializationMode: 2 + AutoInitialization: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + OnInitializationComplete: + m_PersistentCalls: + m_Calls: [] + OnEnable: + m_PersistentCalls: + m_Calls: [] + OnDisable: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - rid: 0 + - rid: 1 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + StopFeedbacksOnDisable: 0 + PlayCount: 0 + references: + version: 2 + RefIds: + - rid: 0 + type: {class: MMF_Rotation, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: -520313265 + Label: Rotation + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 973069738} + DebugActive: 0 + AnimateRotationTarget: {fileID: 373981970} + Mode: 0 + RotationSpace: 0 + AnimateRotationDuration: 0.2 + RemapCurveZero: 0 + RemapCurveOne: -20 + AnimateX: 0 + AnimateRotationTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 1 + AnimateRotationTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimateRotationTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + DetermineRotationOnPlay: 0 + ToDestinationSpace: 0 + DestinationAngles: {x: 0, y: 180, z: 0} + ToDestinationTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 10 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateRotationX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ToDestinationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - rid: 1 + type: {class: MMF_Rotation, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: -1551079164 + Label: Rotation + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 973069738} + DebugActive: 0 + AnimateRotationTarget: {fileID: 1075166999} + Mode: 0 + RotationSpace: 0 + AnimateRotationDuration: 0.2 + RemapCurveZero: 0 + RemapCurveOne: 0 + AnimateX: 0 + AnimateRotationTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 1 + AnimateRotationTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimateRotationTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + DetermineRotationOnPlay: 0 + ToDestinationSpace: 0 + DestinationAngles: {x: 0, y: 180, z: 0} + ToDestinationTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 10 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateRotationX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ToDestinationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &973069739 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 973069734} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2313508e7b935c54d9877ca20548a1b5, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonEventName: TiltRight + MMDEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 973069738} + m_TargetAssemblyTypeName: + m_MethodName: PlayFeedbacks + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + TestValue: 1 + TestSetValueButton: 0 +--- !u!1 &974518326 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 974518328} + - component: {fileID: 974518327} + m_Layer: 0 + m_Name: DebugConsoleTest2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &974518327 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974518326} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef713a82a60f6cf45a06e190e86b84d3, type: 3} + m_Name: + m_EditorClassIdentifier: + Label: Force +--- !u!4 &974518328 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974518326} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 694.4801, y: 715.86993, z: -245.75} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &974558481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 974558482} + m_Layer: 0 + m_Name: Lights + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &974558482 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974558481} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1185183347} + - {fileID: 1149105829} + - {fileID: 126932020} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &995655125 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 995655129} + - component: {fileID: 995655128} + - component: {fileID: 995655127} + - component: {fileID: 995655126} + m_Layer: 5 + m_Name: OpenMenuCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &995655126 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995655125} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &995655127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995655125} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &995655128 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995655125} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &995655129 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 995655125} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1981585729} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1011637502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1011637503} + - component: {fileID: 1011637506} + - component: {fileID: 1011637505} + - component: {fileID: 1011637504} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1011637503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011637502} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.5, y: -3, z: 0.5} + m_LocalScale: {x: 8, y: 8, z: 8} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1011637504 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011637502} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1011637505 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011637502} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 50ff9811d84ffeb42b11f0d57157a346, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1011637506 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011637502} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1016470750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1016470751} + - component: {fileID: 1016470752} + - component: {fileID: 1016470754} + - component: {fileID: 1016470753} + m_Layer: 0 + m_Name: MovingFilter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1016470751 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016470750} + serializedVersion: 2 + m_LocalRotation: {x: 0.11369447, y: -0.54892564, z: 0.07568154, w: 0.8246372} + m_LocalPosition: {x: 8.9, y: 2.57, z: -3.47} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 15.7, y: -67.3, z: 0} +--- !u!114 &1016470752 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016470750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: 2a591d6cae1533b45bfbbe06de11f40c, type: 2} + isGlobal: 0 + blendDistance: 0.5 + weight: 1 + priority: 0 +--- !u!114 &1016470753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016470750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6acbf0a8faacbb342ad72339d38c5a4d, type: 3} + m_Name: + m_EditorClassIdentifier: + Channel: 0 + TimeScale: 0 + Curve: + MMTweenDefinitionType: 0 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 0 + Active: 0 + FilterOffset: {x: 0, y: 3} + AddToInitialPosition: 1 + TestDuration: 0.5 + PostProcessingToggleButton: 0 + PostProcessingTriggerOffButton: 0 + PostProcessingTriggerOnButton: 0 +--- !u!65 &1016470754 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016470750} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1075166998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1075166999} + - component: {fileID: 1075167001} + - component: {fileID: 1075167000} + m_Layer: 0 + m_Name: Cube3Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1075166999 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075166998} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1561756053} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1075167000 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075166998} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: aa24205135c86be4792f70af431b8638, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1075167001 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075166998} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!114 &1127007581 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2121952920444363556, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + m_PrefabInstance: {fileID: 2121952919386105465} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65772fc08a0d9314f86205390e1e772d, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1149105827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1149105829} + - component: {fileID: 1149105828} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1149105828 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1149105827} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 0.262 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1149105829 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1149105827} + serializedVersion: 2 + m_LocalRotation: {x: 0.2562778, y: -0.72065616, z: 0.33604744, w: 0.5495895} + m_LocalPosition: {x: -20.3, y: -62.8, z: -0.9} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 974558482} + m_LocalEulerAnglesHint: {x: 50, y: -105.34, z: 0} +--- !u!1 &1185183345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1185183347} + - component: {fileID: 1185183346} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1185183346 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185183345} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 1, g: 0.17647058, b: 0.96848667, a: 1} + m_Intensity: 1.5 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1185183347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185183345} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.06, y: 2.9, z: 3.98} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 974558482} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1213136938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1213136939} + - component: {fileID: 1213136941} + - component: {fileID: 1213136943} + m_Layer: 0 + m_Name: TilterLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1213136939 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1213136938} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 726143100} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1213136941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1213136938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + - {fileID: 0} + InitializationMode: 2 + AutoInitialization: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 1 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + OnInitializationComplete: + m_PersistentCalls: + m_Calls: [] + OnEnable: + m_PersistentCalls: + m_Calls: [] + OnDisable: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - rid: 0 + - rid: 1 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + StopFeedbacksOnDisable: 0 + PlayCount: 0 + references: + version: 2 + RefIds: + - rid: 0 + type: {class: MMF_Rotation, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: -255139809 + Label: Rotation + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 1213136941} + DebugActive: 0 + AnimateRotationTarget: {fileID: 373981970} + Mode: 0 + RotationSpace: 0 + AnimateRotationDuration: 0.2 + RemapCurveZero: 0 + RemapCurveOne: 0 + AnimateX: 0 + AnimateRotationTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 1 + AnimateRotationTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimateRotationTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + DetermineRotationOnPlay: 0 + ToDestinationSpace: 0 + DestinationAngles: {x: 0, y: 180, z: 0} + ToDestinationTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 10 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateRotationX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ToDestinationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - rid: 1 + type: {class: MMF_Rotation, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: -1969235215 + Label: Rotation + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 1213136941} + DebugActive: 0 + AnimateRotationTarget: {fileID: 1075166999} + Mode: 0 + RotationSpace: 0 + AnimateRotationDuration: 0.2 + RemapCurveZero: 0 + RemapCurveOne: 20 + AnimateX: 0 + AnimateRotationTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 1 + AnimateRotationTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimateRotationTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + DetermineRotationOnPlay: 0 + ToDestinationSpace: 0 + DestinationAngles: {x: 0, y: 180, z: 0} + ToDestinationTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 10 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateRotationX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimateRotationZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ToDestinationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &1213136943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1213136938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2313508e7b935c54d9877ca20548a1b5, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonEventName: TiltLeft + MMDEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1213136941} + m_TargetAssemblyTypeName: + m_MethodName: PlayFeedbacks + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + TestValue: 1 + TestSetValueButton: 0 +--- !u!1 &1307314909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1307314910} + - component: {fileID: 1307314914} + - component: {fileID: 1307314915} + m_Layer: 0 + m_Name: LeftLifter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1307314910 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307314909} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1515690113} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1307314914 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307314909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + InitializationMode: 2 + AutoInitialization: 1 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 1 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + OnInitializationComplete: + m_PersistentCalls: + m_Calls: [] + OnEnable: + m_PersistentCalls: + m_Calls: [] + OnDisable: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - rid: 0 + - rid: 1 + - rid: 2 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + StopFeedbacksOnDisable: 0 + PlayCount: 0 + references: + version: 2 + RefIds: + - rid: 0 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: 966600376 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 1307314914} + DebugActive: 0 + AnimatePositionTarget: {fileID: 373981969} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0.3, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - rid: 1 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: 464660647 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 1307314914} + DebugActive: 0 + AnimatePositionTarget: {fileID: 245078392} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + - rid: 2 + type: {class: MMF_Position, ns: MoreMountains.Feedbacks, asm: MoreMountains.Tools} + data: + Active: 1 + UniqueID: 1535345055 + Label: Position + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + PlayCount: 0 + LimitPlayCount: 0 + MaxPlayCount: 3 + SetPlayCountToZeroOnReset: 0 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + AutomaticShakerSetupButton: + ButtonText: + Owner: {fileID: 1307314914} + DebugActive: 0 + AnimatePositionTarget: {fileID: 1075166998} + Mode: 0 + Space: 0 + RandomizeRemap: 0 + AnimatePositionDuration: 0.2 + AnimatePositionTween: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + RemapCurveZero: 0 + RemapCurveZeroAlt: 0 + RemapCurveOne: 1 + RemapCurveOneAlt: 1 + AnimateX: 0 + AnimatePositionTweenX: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateY: 0 + AnimatePositionTweenY: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AnimateZ: 0 + AnimatePositionTweenZ: + MMTweenDefinitionType: 1 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 1 + AllowAdditivePlays: 0 + RelativePosition: 1 + DeterminePositionsOnPlay: 0 + InitialPosition: {x: 0, y: 0, z: 0} + DestinationPosition: {x: 0, y: 0, z: 0} + InitialPositionTransform: {fileID: 0} + DestinationPositionTransform: {fileID: 0} + AnimatePositionCurveX: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveY: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurveZ: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.6 + value: -1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AnimatePositionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.1 + value: 0.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.9 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &1307314915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307314909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2313508e7b935c54d9877ca20548a1b5, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonEventName: LiftLeft + MMDEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1307314914} + m_TargetAssemblyTypeName: + m_MethodName: PlayFeedbacks + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + TestValue: 1 + TestSetValueButton: 0 +--- !u!1 &1381565044 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1381565045} + - component: {fileID: 1381565047} + - component: {fileID: 1381565046} + m_Layer: 0 + m_Name: PositionTweaker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1381565045 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381565044} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1799307533} + m_Father: {fileID: 2046071221} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1381565046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381565044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 186a986c8de07d3478b88dc10e508869, type: 3} + m_Name: + m_EditorClassIdentifier: + SliderEventName: SpherePosition + MMDValueChangedEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1381565047} + m_TargetAssemblyTypeName: + m_MethodName: SetLevel + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + TestValue: 1 + TestSetValueButton: 0 +--- !u!114 &1381565047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381565044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1381565044} + TargetComponent: {fileID: 1381565045} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: localPosition + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 0 + ModifyZ: 1 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 4} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 0 + Channel: 0 + RandomizeLevel: 0 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!1 &1386774265 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1386774268} + - component: {fileID: 1386774267} + - component: {fileID: 1386774266} + - component: {fileID: 1386774269} + - component: {fileID: 1386774270} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1386774266 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + m_Enabled: 1 +--- !u!20 &1386774267 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.8551266, g: 0.6637148, b: 0.8962264, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 5000 + field of view: 40 + orthographic: 0 + orthographic size: 10 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1386774268 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + serializedVersion: 2 + m_LocalRotation: {x: -0.000076204706, y: -0.4871739, z: -0.000042510856, w: 0.87330496} + m_LocalPosition: {x: 7.112, y: 1.907, z: -2.58} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 15.7, y: -67.3, z: 0} +--- !u!114 &1386774269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} + m_Name: + m_EditorClassIdentifier: + volumeTrigger: {fileID: 1386774268} + volumeLayer: + serializedVersion: 2 + m_Bits: 4294967295 + stopNaNPropagation: 1 + finalBlitToCameraTarget: 1 + antialiasingMode: 1 + temporalAntialiasing: + jitterSpread: 0.75 + sharpness: 0.25 + stationaryBlending: 0.95 + motionBlending: 0.85 + subpixelMorphologicalAntialiasing: + quality: 2 + fastApproximateAntialiasing: + fastMode: 0 + keepAlpha: 0 + fog: + enabled: 1 + excludeSkybox: 1 + debugLayer: + lightMeter: + width: 512 + height: 256 + showCurves: 1 + histogram: + width: 512 + height: 256 + channel: 3 + waveform: + exposure: 0.12 + height: 256 + vectorscope: + size: 256 + exposure: 0.12 + overlaySettings: + linearDepth: 0 + motionColorIntensity: 4 + motionGridSize: 64 + colorBlindnessType: 0 + colorBlindnessStrength: 1 + m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} + m_ShowToolkit: 0 + m_ShowCustomSorter: 0 + breakBeforeColorGrading: 0 + m_BeforeTransparentBundles: [] + m_BeforeStackBundles: [] + m_AfterStackBundles: [] +--- !u!114 &1386774270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72ece51f2901e7445ab60da3685d6b5f, type: 3} + m_Name: + m_EditorClassIdentifier: + ShowDebugText: 0 + ShowCameraFrustum: 1 + IgnoreTimeScale: 0 + WorldUpOverride: {fileID: 0} + ChannelMask: -1 + UpdateMethod: 2 + BlendUpdateMethod: 1 + LensModeOverride: + Enabled: 0 + DefaultMode: 2 + DefaultBlend: + Style: 1 + Time: 2 + CustomCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + CustomBlends: {fileID: 0} +--- !u!1 &1458272992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1458272993} + - component: {fileID: 1458272996} + - component: {fileID: 1458272995} + - component: {fileID: 1458272994} + m_Layer: 0 + m_Name: Cylinder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1458272993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458272992} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1670538600} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1458272994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458272992} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f009572b4d918346b24337ef83f88c1, type: 3} + m_Name: + m_EditorClassIdentifier: + Rotating: 1 + RotationSpace: 1 + UpdateMode: 0 + RotationSpeed: {x: 0, y: 100, z: 0} + Orbiting: 0 + AdditiveOrbitRotation: 0 + OrbitCenterTransform: {fileID: 0} + OrbitCenterOffset: {x: 0, y: 0, z: 0} + OrbitRotationAxis: {x: 0, y: 1, z: 0} + OrbitRotationSpeed: 10 + OrbitRadius: 3 + OrbitCorrectionSpeed: 10 + DrawGizmos: 1 + OrbitPlaneColor: {r: 54, g: 169, b: 225, a: 0.02} + OrbitLineColor: {r: 225, g: 225, b: 225, a: 0.1} + _orbitCenter: {x: 0, y: 0, z: 0} + _worldRotationAxis: {x: 0, y: 0, z: 0} + _snappedPosition: {x: 0, y: 0, z: 0} + _radius: {x: 0, y: 0, z: 0} +--- !u!23 &1458272995 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458272992} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1458272996 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1458272992} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1515690112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1515690113} + m_Layer: 0 + m_Name: Lifters + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1515690113 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1515690112} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1307314910} + - {fileID: 89326336} + - {fileID: 432579135} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1561756052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1561756053} + - component: {fileID: 1561756057} + - component: {fileID: 1561756056} + m_Layer: 0 + m_Name: Cube3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1561756053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1561756052} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: 2} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1075166999} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1561756056 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1561756052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3aad8b45814dc6f4cab32abed0a152b8, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetGameObject: {fileID: 1075166998} + ToggleActiveButton: 0 +--- !u!114 &1561756057 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1561756052} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2313508e7b935c54d9877ca20548a1b5, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonEventName: ToggleRightCube + MMDEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1561756056} + m_TargetAssemblyTypeName: + m_MethodName: ToggleActive + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + TestValue: 1 + TestSetValueButton: 0 +--- !u!1 &1670538599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1670538600} + - component: {fileID: 1670538601} + m_Layer: 0 + m_Name: CylinderEmitter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1670538600 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670538599} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1458272993} + m_Father: {fileID: 182327110} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1670538601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1670538599} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1f655bab42c018140aaf68474d594e6c, type: 3} + m_Name: + m_EditorClassIdentifier: + Emitter: + TargetObject: {fileID: 1458272992} + TargetComponent: {fileID: 1458272993} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: localPosition + ClampMin: 1 + ClampMax: 1 + Vector2Option: 0 + Vector3Option: 1 + Vector4Option: 0 + BoolRemapFalse: 0 + BoolRemapTrue: 1 + IntRemapMinToZero: 0 + IntRemapMaxToOne: 1 + FloatRemapMinToZero: 0 + FloatRemapMaxToOne: 1 + QuaternionRemapMinToZero: 0 + QuaternionRemapMaxToOne: 360 + Level: 0 + Receivers: [] + BroadcastOnChannel: 1 + Channel: 1000 + OnlyBroadcastOnValueChange: 1 +--- !u!1 &1705276670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1705276673} + - component: {fileID: 1705276672} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1705276672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1705276670} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1705276673 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1705276670} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1799307532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1799307533} + - component: {fileID: 1799307537} + - component: {fileID: 1799307536} + - component: {fileID: 1799307535} + - component: {fileID: 1799307534} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1799307533 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799307532} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1381565045} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1799307534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799307532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f009572b4d918346b24337ef83f88c1, type: 3} + m_Name: + m_EditorClassIdentifier: + Rotating: 1 + RotationSpace: 1 + UpdateMode: 0 + RotationSpeed: {x: 0, y: -100, z: 0} + Orbiting: 0 + AdditiveOrbitRotation: 0 + OrbitCenterTransform: {fileID: 0} + OrbitCenterOffset: {x: 0, y: 0, z: 0} + OrbitRotationAxis: {x: 0, y: 1, z: 0} + OrbitRotationSpeed: 10 + OrbitRadius: 3 + OrbitCorrectionSpeed: 10 + DrawGizmos: 1 + OrbitPlaneColor: {r: 54, g: 169, b: 225, a: 0.02} + OrbitLineColor: {r: 225, g: 225, b: 225, a: 0.1} + _orbitCenter: {x: 0, y: 0, z: 0} + _worldRotationAxis: {x: 0, y: 0, z: 0} + _snappedPosition: {x: 0, y: 0, z: 0} + _radius: {x: 0, y: 0, z: 0} +--- !u!135 &1799307535 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799307532} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1799307536 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799307532} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: fafd9ca80d42ea147955a570b7ff417a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1799307537 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799307532} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1981585728 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1981585729} + - component: {fileID: 1981585732} + - component: {fileID: 1981585731} + - component: {fileID: 1981585730} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1981585729 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1981585728} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 859209805} + m_Father: {fileID: 995655129} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -124, y: -882} + m_SizeDelta: {x: 591, y: 140.9} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1981585730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1981585728} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0, g: 0, b: 0, a: 1} + m_HighlightedColor: {r: 0, g: 0, b: 0, a: 1} + m_PressedColor: {r: 1, g: 0.76862746, b: 0, a: 1} + m_SelectedColor: {r: 0, g: 0, b: 0, a: 1} + m_DisabledColor: {r: 0, g: 0, b: 0, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1981585731} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1127007581} + m_TargetAssemblyTypeName: + m_MethodName: OpenMenu + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1981585731 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1981585728} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1981585732 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1981585728} + m_CullTransparentMesh: 0 +--- !u!1 &2032115192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2032115193} + - component: {fileID: 2032115196} + - component: {fileID: 2032115195} + - component: {fileID: 2032115194} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2032115193 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032115192} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 532913264} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 10, y: 10} + m_SizeDelta: {x: 89.16, y: 30} + m_Pivot: {x: 0, y: 0} +--- !u!114 &2032115194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032115192} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 06e8923c17983d643980d7d7773b7382, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateInterval: 0.3 + Mode: 0 +--- !u!114 &2032115195 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032115192} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.5529412} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: FPS +--- !u!222 &2032115196 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032115192} + m_CullTransparentMesh: 0 +--- !u!1 &2046071220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2046071221} + - component: {fileID: 2046071222} + m_Layer: 0 + m_Name: SphereContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2046071221 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2046071220} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.009, y: 3.089, z: -1.921} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1381565045} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2046071222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2046071220} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9091b3d5ef7624b47a328c984fa25e09, type: 3} + m_Name: + m_EditorClassIdentifier: + CheckboxEventName: SphereShouldRotate + MMDPressedEvent: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1799307534} + m_TargetAssemblyTypeName: + m_MethodName: Rotate + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + MMDTrueEvent: + m_PersistentCalls: + m_Calls: [] + MMDFalseEvent: + m_PersistentCalls: + m_Calls: [] + TestValue: 1 + TestSetValueButton: 0 +--- !u!1001 &2121952919386105465 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 64760600047507304, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 64760600047507304, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 64760600047507304, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 64760600047507304, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 64760600047507304, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 106005492609148298, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 106005492609148298, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 106005492609148298, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 106005492609148298, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 106005492609148298, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 336257142907304173, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 977511443558201062, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 977511443558201062, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 977511443558201062, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 977511443558201062, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 977511443558201062, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1931941735256248024, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1931941735256248024, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1931941735256248024, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1931941735256248024, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1931941735256248024, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2017255852090714547, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2017255852090714547, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2017255852090714547, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2017255852090714547, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2017255852090714547, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2543878626455134471, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2543878626455134471, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2543878626455134471, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 25 + objectReference: {fileID: 0} + - target: {fileID: 2543878626455134471, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -12.5 + objectReference: {fileID: 0} + - target: {fileID: 2663892798093617353, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2663892798093617353, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2663892798093617353, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2663892798093617353, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2663892798093617353, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3927057475563786985, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3931194930717000003, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3931194930717000003, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3931194930717000003, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3931194930717000003, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3931194930717000003, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4198217600938622951, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4198217600938622951, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4198217600938622951, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459819064499378439, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459819064499378439, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459819064499378439, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459819064499378439, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4459819064499378439, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4536211021992516640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4536211021992516640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4536211021992516640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4536211021992516640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4536211021992516640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4960773992825833709, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4960773992825833709, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4960773992825833709, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4960773992825833709, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4960773992825833709, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4962648203995935463, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4962648203995935463, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4962648203995935463, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4962648203995935463, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4962648203995935463, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5364449193733140371, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5364449193733140371, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5364449193733140371, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5364449193733140371, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5364449193733140371, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5973208857072169640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5973208857072169640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5973208857072169640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5973208857072169640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5973208857072169640, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6486255346656610468, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6486255346656610468, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6486255346656610468, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6486255346656610468, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6486255346656610468, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6589985845505059368, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6589985845505059368, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6589985845505059368, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6589985845505059368, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6589985845505059368, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7049733052368999918, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7049733052368999918, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7049733052368999918, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 240 + objectReference: {fileID: 0} + - target: {fileID: 7049733052368999918, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 784.15 + objectReference: {fileID: 0} + - target: {fileID: 7049733052368999918, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -195 + objectReference: {fileID: 0} + - target: {fileID: 7049733052712173794, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7156533517424964485, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7156533517424964485, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7156533517424964485, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7156533517424964485, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7157406671083216853, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7157406671083216853, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7157406671083216853, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7157406671083216853, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7157406671083216853, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7233704066566973451, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7233704066566973451, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7233704066566973451, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7233704066566973451, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7233704066566973451, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7797186302717806309, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7797186302717806309, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7797186302717806309, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7797186302717806309, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7889651629494988817, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7889651629494988817, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7889651629494988817, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7889651629494988817, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7889651629494988817, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8068917923000165393, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8068917923000165393, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8068917923000165393, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8068917923000165393, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8068917923000165393, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199354, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8190412795749199355, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_Name + value: MMDebugMenu + objectReference: {fileID: 0} + - target: {fileID: 8397026956931354447, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8397026956931354447, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8397026956931354447, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8397026956931354447, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8473306103551186234, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8473306103551186234, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8525153245723124225, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8525153245723124225, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8525153245723124225, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8525153245723124225, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8525153245723124225, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8676912108173844932, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8676912108173844932, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8676912108173844932, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8676912108173844932, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8676912108173844932, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8767275219685079092, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9037224751472491366, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9037224751472491366, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9037224751472491366, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9037224751472491366, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9037224751472491366, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9045445820529044788, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9045445820529044788, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9045445820529044788, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9045445820529044788, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 9045445820529044788, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: da6a4f914ed52e6488c1fb9d94e8cbb0, type: 3} +--- !u!4 &5006512734875221718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8296172669118844101} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: -2} + m_LocalScale: {x: 100, y: 100.00003, z: 100.00003} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 373981970} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8296172669118844101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5006512734875221718} + m_Layer: 0 + m_Name: Cube1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 47384301} + - {fileID: 974558482} + - {fileID: 722569212} + - {fileID: 2121952919386105465} + - {fileID: 995655129} + - {fileID: 495809378} + - {fileID: 974518328} diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenu.unity.meta b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenu.unity.meta new file mode 100644 index 0000000..27a3e93 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenu.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4edfcb4bd71ee754eb5f904db75d5758 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuDemoData.asset b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuDemoData.asset new file mode 100644 index 0000000..b7deea9 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuDemoData.asset @@ -0,0 +1,819 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b950a5ce764708a4ca0425a952fce75f, type: 3} + m_Name: MMDebugMenuDemoData + m_EditorClassIdentifier: + TitlePrefab: {fileID: 2112759074905327847, guid: 80be1ec3d14da9c489fbefa63b82915f, + type: 3} + ButtonPrefab: {fileID: 7110842687765492728, guid: dbb3e138861cf2040b20217e62a5edf2, + type: 3} + ButtonBorderPrefab: {fileID: 1985568128000399461, guid: f2be8011322fbf943a44edc64dedbf2c, + type: 3} + CheckboxPrefab: {fileID: 2731002163667230428, guid: e48b9501c5356cf4e9c390d40d81438c, + type: 3} + SliderPrefab: {fileID: 8595552693496322647, guid: addcaa6f7df18984691dc300b3be4f7b, + type: 3} + SpacerSmallPrefab: {fileID: 3952073977153845988, guid: 1a4b9ae95443d5a489bd918c848e2390, + type: 3} + SpacerBigPrefab: {fileID: 8096383012134595547, guid: f72e7b8c96262ed4d976576afafd53b0, + type: 3} + TextTinyPrefab: {fileID: 7812354180902260709, guid: 57336066c3d7ff5418ae88b7880aafed, + type: 3} + TextSmallPrefab: {fileID: 6550416838355534067, guid: 6689802a48b01104ebd8e101f5cce555, + type: 3} + TextLongPrefab: {fileID: 7073910567540320170, guid: 4332ad3ebf8592c41bc275ff77d24b29, + type: 3} + ValuePrefab: {fileID: 3610448643810830552, guid: 855a2d614e531f44caecc17a8c3bd51c, + type: 3} + TwoChoicesPrefab: {fileID: 5258430688713385724, guid: 90a0e72c11dfcbe4f88bccc465c6a0cd, + type: 3} + ThreeChoicesPrefab: {fileID: 207464785538935126, guid: 804c003da46ec914e80badaf93e6d2da, + type: 3} + TabPrefab: {fileID: 3232960445196542265, guid: a8296d633c27f554a99bbbf94958722e, + type: 3} + TabContentsPrefab: {fileID: 2838565908494160927, guid: f2f0b25301bf93e43ac5ecc33208a420, + type: 3} + TabSpacerPrefab: {fileID: 2188017814106785258, guid: 57633cde530d56a48995d0733efa9450, + type: 3} + DebugTabPrefab: {fileID: 521718878734460126, guid: 94cfa935aa4cff74a9451b22cb7627a6, + type: 3} + DebugTabName: Logs + Tabs: + - Name: Settings + Active: 1 + MenuItems: + array: + - Name: Title + Active: 1 + Type: 0 + TitleText: Debug Menu Demo + TextType: 0 + TextContents: + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Intro + Active: 1 + Type: 5 + TitleText: + TextType: 1 + TextContents: This demo showcases how you can easily setup a debug menu, + exposing quick access controls to pilot your game. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Sphere Checkbox + Active: 1 + Type: 3 + TitleText: + TextType: 1 + TextContents: This demo showcases how you can easily setup a debug menu, + exposing quick access controls to pilot your game. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: Sphere should rotate + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Cylinder Y Position + Active: 1 + Type: 6 + TitleText: + TextType: 1 + TextContents: This demo showcases how you can easily setup a debug menu, + exposing quick access controls to pilot your game. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Toggle Right Cube Button + Active: 1 + Type: 2 + TitleText: + TextType: 1 + TextContents: This demo showcases how you can easily setup a debug menu, + exposing quick access controls to pilot your game. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: Toggle Right Cube + ButtonType: 0 + ButtonEventName: ToggleRightCube + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Sphere Slider + Active: 1 + Type: 4 + TitleText: + TextType: 1 + TextContents: This demo showcases how you can easily setup a debug menu, + exposing quick access controls to pilot your game. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: Toggle Right Cube + ButtonType: 0 + ButtonEventName: ToggleRightCube + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: Sphere Position + SliderRemapZero: 0 + SliderRemapOne: 1 + SliderInitialValue: 0 + SliderEventName: SpherePosition + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Lift Instructions Text + Active: 1 + Type: 5 + TitleText: + TextType: 0 + TextContents: Lift cube + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: Toggle Right Cube + ButtonType: 0 + ButtonEventName: ToggleRightCube + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: Sphere Position + SliderRemapZero: 0 + SliderRemapOne: 1 + SliderInitialValue: 0 + SliderEventName: SpherePosition + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Lift Three Choices + Active: 1 + Type: 7 + TitleText: + TextType: 0 + TextContents: Lift cube + ChoicesType: 1 + ChoiceOneText: Left + ChoiceOneEventName: LiftLeft + ChoiceTwoText: Middle + ChoiceTwoEventName: LiftMiddle + ChoiceThreeText: Right + ChoiceThreeEventName: LiftRight + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: Toggle Right Cube + ButtonType: 0 + ButtonEventName: ToggleRightCube + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: Sphere Position + SliderRemapZero: 0 + SliderRemapOne: 1 + SliderInitialValue: 0 + SliderEventName: SpherePosition + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Long text example + Active: 1 + Type: 5 + TitleText: + TextType: 2 + TextContents: You can also display longer texts in your debug menu. It can + be useful when you have a lot of info to provide, or when you really really + like long sentences that never end because of how extremely long they are. + ChoicesType: 1 + ChoiceOneText: Left + ChoiceOneEventName: LiftLeft + ChoiceTwoText: Middle + ChoiceTwoEventName: LiftMiddle + ChoiceThreeText: Right + ChoiceThreeEventName: LiftRight + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: Toggle Right Cube + ButtonType: 0 + ButtonEventName: ToggleRightCube + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: Sphere Position + SliderRemapZero: 0 + SliderRemapOne: 1 + SliderInitialValue: 0 + SliderEventName: SpherePosition + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Rotate Middle Cube Button + Active: 1 + Type: 2 + TitleText: + TextType: 2 + TextContents: You can also display longer texts in your debug menu. It can + be useful when you have a lot of info to provide, or when you really really + like long sentences that never end because of how extremely long they are. + ChoicesType: 1 + ChoiceOneText: Left + ChoiceOneEventName: LiftLeft + ChoiceTwoText: Middle + ChoiceTwoEventName: LiftMiddle + ChoiceThreeText: Right + ChoiceThreeEventName: LiftRight + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: Rotate Middle Cube + ButtonType: 1 + ButtonEventName: RotateMiddleCube + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: Sphere Position + SliderRemapZero: 0 + SliderRemapOne: 1 + SliderInitialValue: 0 + SliderEventName: SpherePosition + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Tilt cube instructions + Active: 1 + Type: 5 + TitleText: + TextType: 0 + TextContents: Tilt cube + ChoicesType: 1 + ChoiceOneText: Left + ChoiceOneEventName: LiftLeft + ChoiceTwoText: Middle + ChoiceTwoEventName: LiftMiddle + ChoiceThreeText: Right + ChoiceThreeEventName: LiftRight + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: Rotate Middle Cube + ButtonType: 1 + ButtonEventName: RotateMiddleCube + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: Sphere Position + SliderRemapZero: 0 + SliderRemapOne: 1 + SliderInitialValue: 0 + SliderEventName: SpherePosition + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Tilt Cube + Active: 1 + Type: 7 + TitleText: + TextType: 0 + TextContents: Tilt cube + ChoicesType: 0 + ChoiceOneText: Left + ChoiceOneEventName: TiltLeft + ChoiceTwoText: Right + ChoiceTwoEventName: TiltRight + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: Cylinder Y Position + ValueInitialValue: 0 + ValueMMRadioReceiverChannel: 1000 + ButtonText: Rotate Middle Cube + ButtonType: 1 + ButtonEventName: RotateMiddleCube + SpacerType: 0 + CheckboxText: Cylinder Y Position + CheckboxInitialState: 1 + CheckboxEventName: SphereShouldRotate + SliderMode: 0 + SliderText: Sphere Position + SliderRemapZero: 0 + SliderRemapOne: 1 + SliderInitialValue: 0 + SliderEventName: SpherePosition + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: About + Active: 1 + MenuItems: + array: + - Name: About Title + Active: 1 + Type: 0 + TitleText: About + TextType: 0 + TextContents: + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Text + Active: 1 + Type: 5 + TitleText: + TextType: 2 + TextContents: This MMDebugMenu system can be used to create debug menus of + course, but you could repurpose it to create an in-game option menu as + well. It's up to you! + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Sliders + Active: 1 + MenuItems: + array: + - Name: Title + Active: 1 + Type: 0 + TitleText: Sliders + TextType: 2 + TextContents: Do you like sliders? I think they're amazing. So here are a + few sliders. They don't do anything, but you can play with them nonetheless. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: Intro + Active: 1 + Type: 5 + TitleText: + TextType: 2 + TextContents: Do you like sliders? I think they're amazing. So here are a + few sliders. They don't do anything, but you can play with them nonetheless. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 0 + SliderText: + SliderRemapZero: 0 + SliderRemapOne: 0 + SliderInitialValue: 0 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: SliderZeroToTen + Active: 1 + Type: 4 + TitleText: + TextType: 2 + TextContents: Do you like sliders? I think they're amazing. So here are a + few sliders. They don't do anything, but you can play with them nonetheless. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 0 + SliderText: Zero to Ten + SliderRemapZero: 0 + SliderRemapOne: 10 + SliderInitialValue: 3 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: SliderZeroToTenInt + Active: 1 + Type: 4 + TitleText: + TextType: 2 + TextContents: Do you like sliders? I think they're amazing. So here are a + few sliders. They don't do anything, but you can play with them nonetheless. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 1 + SliderText: Zero to Ten (int) + SliderRemapZero: 0 + SliderRemapOne: 10 + SliderInitialValue: 8 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: SliderMillion + Active: 1 + Type: 4 + TitleText: + TextType: 2 + TextContents: Do you like sliders? I think they're amazing. So here are a + few sliders. They don't do anything, but you can play with them nonetheless. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 1 + SliderText: The Million + SliderRemapZero: 0 + SliderRemapOne: 1000000 + SliderInitialValue: 500000 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: SliderCountToTen + Active: 1 + Type: 4 + TitleText: + TextType: 2 + TextContents: Do you like sliders? I think they're amazing. So here are a + few sliders. They don't do anything, but you can play with them nonetheless. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 1 + SliderText: Count to ten + SliderRemapZero: 0 + SliderRemapOne: 10 + SliderInitialValue: 3 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: SliderFifty + Active: 1 + Type: 4 + TitleText: + TextType: 2 + TextContents: Do you like sliders? I think they're amazing. So here are a + few sliders. They don't do anything, but you can play with them nonetheless. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 1 + SliderText: Fifty + SliderRemapZero: 0 + SliderRemapOne: 50 + SliderInitialValue: 25 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + - Name: SliderZeroToOne + Active: 1 + Type: 4 + TitleText: + TextType: 2 + TextContents: Do you like sliders? I think they're amazing. So here are a + few sliders. They don't do anything, but you can play with them nonetheless. + ChoicesType: 0 + ChoiceOneText: + ChoiceOneEventName: + ChoiceTwoText: + ChoiceTwoEventName: + ChoiceThreeText: + ChoiceThreeEventName: + SelectedChoice: 0 + ValueLabel: + ValueInitialValue: + ValueMMRadioReceiverChannel: 0 + ButtonText: + ButtonType: 0 + ButtonEventName: + SpacerType: 0 + CheckboxText: + CheckboxInitialState: 0 + CheckboxEventName: + SliderMode: 0 + SliderText: Zero to One + SliderRemapZero: 0 + SliderRemapOne: 1 + SliderInitialValue: 0.7 + SliderEventName: + TargetSlider: {fileID: 0} + TargetButton: {fileID: 0} + TargetCheckbox: {fileID: 0} + DisplayDebugTab: 1 + MaxTabs: 5 + InitialActiveTabIndex: 0 + ToggleDirection: 2 + ToggleDuration: 0.25 + ToggleCurve: 11 + ToggleKey: 4 + RegularFont: {fileID: 12800000, guid: 0f03458534bea45e4bba9ab3411321b2, type: 3} + BoldFont: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + BackgroundColor: {r: 0, g: 0, b: 0, a: 0.78431374} + AccentColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextColor: {r: 0, g: 0.6127534, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuDemoData.asset.meta b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuDemoData.asset.meta new file mode 100644 index 0000000..e79bc2b --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuDemoData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 244fc583bba6930489841e197a9677db +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuSettings.lighting b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuSettings.lighting new file mode 100644 index 0000000..1b8326c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuSettings.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMDebugMenuSettings + serializedVersion: 3 + m_GIWorkflowMode: 1 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_TextureCompression: 1 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentMIS: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuSettings.lighting.meta b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuSettings.lighting.meta new file mode 100644 index 0000000..8b4e8f6 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8547c1a0cd0ea294ea9f2068a4b0ff93 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuTestClass.cs b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuTestClass.cs new file mode 100644 index 0000000..46fcfea --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuTestClass.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +#if MM_UI +namespace MoreMountains.Tools +{ + /// + /// A simple test class used in the MMDebugMenu demo scene to shake a few values and output them in the debug on screen console + /// + [AddComponentMenu("")] + public class MMDebugMenuTestClass : MonoBehaviour + { + /// a label to display + public string Label; + + private float multiplier; + + /// + /// On starts, randomizes a multiplier + /// + private void Start() + { + multiplier = Random.Range(0f, 50000f); + } + /// + /// On update, outputs a text on screen + /// + void Update() + { + float test = (Mathf.Sin(Time.time) + 2) * multiplier; + MMDebug.DebugOnScreen(Label, test); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuTestClass.cs.meta b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuTestClass.cs.meta new file mode 100644 index 0000000..67d5f4f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMDebugMenu/MMDebugMenuTestClass.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef713a82a60f6cf45a06e190e86b84d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMFollowTarget.meta b/Assets/Feel/MMTools/Demos/MMFollowTarget.meta new file mode 100644 index 0000000..e685f9f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMFollowTarget.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a0419c472de94847b4fd0762bd56ad2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemo.unity b/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemo.unity new file mode 100644 index 0000000..0af56fc --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemo.unity @@ -0,0 +1,2784 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1947217 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1947218} + - component: {fileID: 1947219} + m_Layer: 0 + m_Name: Target + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1947218 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1947217} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 186673723} + - {fileID: 531798199} + m_Father: {fileID: 1626978143} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1947219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1947217} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 2 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0.3 + FrequencyMax: 2 + AmplitudeMin: {x: -15, y: 0, z: 0} + AmplitudeMax: {x: 15, y: 0, z: 0} + RelativeAmplitude: 1 + PauseMin: 0 + PauseMax: 1 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &105979231 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 105979232} + - component: {fileID: 105979235} + - component: {fileID: 105979234} + - component: {fileID: 105979233} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &105979232 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105979231} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.69} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1124319777} + - {fileID: 1540402362} + m_Father: {fileID: 720940930} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0.21, y: 0.1} + m_SizeDelta: {x: 50, y: 10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &105979233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105979231} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &105979234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105979231} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &105979235 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105979231} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &169354511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 169354512} + - component: {fileID: 169354515} + - component: {fileID: 169354514} + - component: {fileID: 169354513} + m_Layer: 0 + m_Name: Follower + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &169354512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169354511} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1626978143} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &169354513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169354511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bd8ab284de1a65c49870e4b81e46134a, type: 3} + m_Name: + m_EditorClassIdentifier: + FollowPosition: 1 + FollowPositionX: 1 + FollowPositionY: 1 + FollowPositionZ: 1 + FollowRotation: 1 + Target: {fileID: 1947218} + Offset: {x: 0, y: 0, z: 2} + AddInitialDistanceXToXOffset: 0 + AddInitialDistanceYToYOffset: 0 + AddInitialDistanceZToZOffset: 0 + InterpolatePosition: 1 + FollowPositionMode: 0 + FollowPositionSpeed: 5 + PositionSpringDamping: 0.3 + PositionSpringFrequency: 3 + InterpolateRotation: 1 + FollowRotationMode: 0 + FollowRotationSpeed: 5 + UpdateMode: 0 + UseMinimumDistanceBeforeFollow: 1 + MinimumDistanceBeforeFollow: 0.2 + UseMaximumDistance: 0 + MaximumDistance: 5 +--- !u!23 &169354514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169354511} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eb936a4576d8f9741b8d914d47f3ccce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &169354515 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169354511} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &186673722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 186673723} + - component: {fileID: 186673726} + - component: {fileID: 186673725} + - component: {fileID: 186673724} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &186673723 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186673722} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1947218} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &186673724 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186673722} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &186673725 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186673722} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 391d11fb65b61014eb313e127073582f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &186673726 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186673722} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &207051867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 207051868} + - component: {fileID: 207051871} + - component: {fileID: 207051870} + - component: {fileID: 207051869} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &207051868 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207051867} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.5529787, y: -0.75, z: -1.7089844} + m_LocalScale: {x: 60, y: 0.5, z: 60} + m_Children: [] + m_Father: {fileID: 300129103} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &207051869 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207051867} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &207051870 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207051867} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 618ddfc15e28454459ee2236b25eb5be, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &207051871 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207051867} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &282876210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 282876211} + m_Layer: 0 + m_Name: MMFollow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &282876211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282876210} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 612502419} + - {fileID: 579014524} + - {fileID: 832534183} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &300129102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 300129103} + m_Layer: 0 + m_Name: Scene ---------------------------------- + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &300129103 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 300129102} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 820354448} + - {fileID: 634240421} + - {fileID: 207051868} + - {fileID: 2067790118} + - {fileID: 1624092388} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &327325014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 327325015} + - component: {fileID: 327325018} + - component: {fileID: 327325017} + - component: {fileID: 327325016} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &327325015 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327325014} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 928564237} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &327325016 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327325014} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &327325017 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327325014} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 391d11fb65b61014eb313e127073582f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &327325018 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327325014} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &356333724 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 356333725} + - component: {fileID: 356333726} + m_Layer: 0 + m_Name: BluePointLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &356333725 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356333724} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.18, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 612502419} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &356333726 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356333724} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 0.23921567, g: 0.6784368, b: 1, a: 1} + m_Intensity: 20 + m_Range: 5 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &404740733 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 404740734} + - component: {fileID: 404740737} + - component: {fileID: 404740736} + - component: {fileID: 404740735} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &404740734 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404740733} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 612502419} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!135 &404740735 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404740733} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &404740736 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404740733} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 391d11fb65b61014eb313e127073582f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &404740737 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404740733} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &417097693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 417097694} + - component: {fileID: 417097696} + - component: {fileID: 417097695} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &417097694 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 417097693} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 832534183} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -17.2, y: 1.741} + m_SizeDelta: {x: 15.6, y: 2.321} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &417097695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 417097693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.24705882} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &417097696 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 417097693} + m_CullTransparentMesh: 0 +--- !u!1 &449528505 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 449528506} + - component: {fileID: 449528508} + - component: {fileID: 449528507} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &449528506 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449528505} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.1} + m_Children: [] + m_Father: {fileID: 832534183} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -17.038, y: 1.67} + m_SizeDelta: {x: 1400.159, y: 146.73} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &449528507 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449528505} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 100 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'MM Follow ' +--- !u!222 &449528508 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449528505} + m_CullTransparentMesh: 0 +--- !u!1 &531798198 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 531798199} + - component: {fileID: 531798200} + m_Layer: 0 + m_Name: BluePointLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &531798199 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531798198} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.18, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1947218} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &531798200 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531798198} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 0.23921567, g: 0.6784368, b: 1, a: 1} + m_Intensity: 20 + m_Range: 5 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &579014519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 579014524} + - component: {fileID: 579014523} + - component: {fileID: 579014522} + - component: {fileID: 579014520} + m_Layer: 0 + m_Name: Follower + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &579014520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579014519} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bd8ab284de1a65c49870e4b81e46134a, type: 3} + m_Name: + m_EditorClassIdentifier: + FollowPosition: 1 + FollowPositionX: 1 + FollowPositionY: 1 + FollowPositionZ: 1 + FollowRotation: 1 + Target: {fileID: 612502419} + Offset: {x: 0, y: 0, z: 2} + AddInitialDistanceXToXOffset: 0 + AddInitialDistanceYToYOffset: 0 + AddInitialDistanceZToZOffset: 0 + InterpolatePosition: 1 + FollowPositionMode: 1 + FollowPositionSpeed: 0.1 + PositionSpringDamping: 0.3 + PositionSpringFrequency: 3 + InterpolateRotation: 1 + FollowRotationMode: 1 + FollowRotationSpeed: 5 + UpdateMode: 0 + UseMinimumDistanceBeforeFollow: 1 + MinimumDistanceBeforeFollow: 0.2 + UseMaximumDistance: 0 + MaximumDistance: 5 +--- !u!23 &579014522 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579014519} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eb936a4576d8f9741b8d914d47f3ccce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &579014523 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579014519} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &579014524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579014519} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 282876211} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &612502415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 612502419} + - component: {fileID: 612502416} + m_Layer: 0 + m_Name: Target + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &612502416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 612502415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bd8ab284de1a65c49870e4b81e46134a, type: 3} + m_Name: + m_EditorClassIdentifier: + FollowPosition: 1 + FollowPositionX: 1 + FollowPositionY: 0 + FollowPositionZ: 0 + FollowRotation: 1 + Target: {fileID: 1947218} + Offset: {x: 0, y: 0, z: 0} + AddInitialDistanceXToXOffset: 0 + AddInitialDistanceYToYOffset: 0 + AddInitialDistanceZToZOffset: 0 + InterpolatePosition: 0 + FollowPositionMode: 1 + FollowPositionSpeed: 10 + PositionSpringDamping: 0.3 + PositionSpringFrequency: 3 + InterpolateRotation: 0 + FollowRotationMode: 1 + FollowRotationSpeed: 10 + UpdateMode: 0 + UseMinimumDistanceBeforeFollow: 0 + MinimumDistanceBeforeFollow: 1 + UseMaximumDistance: 0 + MaximumDistance: 1 +--- !u!4 &612502419 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 612502415} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 404740734} + - {fileID: 356333725} + m_Father: {fileID: 282876211} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &634240419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 634240421} + - component: {fileID: 634240420} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &634240420 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634240419} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &634240421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634240419} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 300129103} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &720940929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 720940930} + m_Layer: 0 + m_Name: MMSpring + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &720940930 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 720940929} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -5.35} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 928564237} + - {fileID: 817442927} + - {fileID: 105979232} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &796747882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 796747883} + - component: {fileID: 796747885} + - component: {fileID: 796747884} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &796747883 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796747882} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1468606118} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -17.2, y: 1.741} + m_SizeDelta: {x: 15.6, y: 2.321} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &796747884 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796747882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.24705882} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &796747885 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796747882} + m_CullTransparentMesh: 0 +--- !u!1 &805574271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 805574272} + - component: {fileID: 805574273} + m_Layer: 0 + m_Name: BluePointLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &805574272 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 805574271} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.18, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 928564237} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &805574273 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 805574271} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 0.23921567, g: 0.6784368, b: 1, a: 1} + m_Intensity: 20 + m_Range: 5 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &817442926 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 817442927} + - component: {fileID: 817442930} + - component: {fileID: 817442929} + - component: {fileID: 817442928} + - component: {fileID: 817442931} + m_Layer: 0 + m_Name: Follower + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &817442927 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817442926} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 720940930} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &817442928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817442926} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bd8ab284de1a65c49870e4b81e46134a, type: 3} + m_Name: + m_EditorClassIdentifier: + FollowPosition: 1 + FollowPositionX: 1 + FollowPositionY: 1 + FollowPositionZ: 1 + FollowRotation: 1 + Target: {fileID: 928564237} + Offset: {x: 0, y: 0, z: 2} + AddInitialDistanceXToXOffset: 0 + AddInitialDistanceYToYOffset: 0 + AddInitialDistanceZToZOffset: 0 + InterpolatePosition: 1 + FollowPositionMode: 2 + FollowPositionSpeed: 0.5 + PositionSpringDamping: 0.3 + PositionSpringFrequency: 3 + InterpolateRotation: 1 + FollowRotationMode: 2 + FollowRotationSpeed: 5 + UpdateMode: 0 + UseMinimumDistanceBeforeFollow: 1 + MinimumDistanceBeforeFollow: 0.2 + UseMaximumDistance: 0 + MaximumDistance: 5 +--- !u!23 &817442929 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817442926} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eb936a4576d8f9741b8d914d47f3ccce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &817442930 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817442926} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!114 &817442931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817442926} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 46840d8dc203908469ee327b591ae35f, type: 3} + m_Name: + m_EditorClassIdentifier: + ActivationMode: 1 + TriggerMode: 0 + TargetTriggerLayer: + serializedVersion: 2 + m_Bits: 0 + TargetTriggerTag: + DelayMode: 1 + TimeBeforeStateChange: 2 + FrameCount: 3 + TargetGameObjects: [] + TargetBehaviours: + - {fileID: 817442928} + TimeDestructionMode: 0 + TimedActions: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &820354445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 820354448} + - component: {fileID: 820354447} + - component: {fileID: 820354446} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &820354446 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820354445} + m_Enabled: 1 +--- !u!20 &820354447 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820354445} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &820354448 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 820354445} + m_LocalRotation: {x: 0.5735764, y: 0, z: 0, w: 0.8191521} + m_LocalPosition: {x: 0, y: 17.2, z: -5.91} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 300129103} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 70, y: 0, z: 0} +--- !u!1 &832534179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 832534183} + - component: {fileID: 832534182} + - component: {fileID: 832534181} + - component: {fileID: 832534180} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &832534180 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832534179} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &832534181 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832534179} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &832534182 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832534179} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &832534183 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 832534179} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.69} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 417097694} + - {fileID: 449528506} + m_Father: {fileID: 282876211} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0.21, y: 0.1} + m_SizeDelta: {x: 50, y: 10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &928564236 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 928564237} + - component: {fileID: 928564238} + m_Layer: 0 + m_Name: Target + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &928564237 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928564236} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 327325015} + - {fileID: 805574272} + m_Father: {fileID: 720940930} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &928564238 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928564236} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bd8ab284de1a65c49870e4b81e46134a, type: 3} + m_Name: + m_EditorClassIdentifier: + FollowPosition: 1 + FollowPositionX: 1 + FollowPositionY: 0 + FollowPositionZ: 0 + FollowRotation: 1 + Target: {fileID: 1947218} + Offset: {x: 0, y: 0, z: 0} + AddInitialDistanceXToXOffset: 0 + AddInitialDistanceYToYOffset: 0 + AddInitialDistanceZToZOffset: 0 + InterpolatePosition: 0 + FollowPositionMode: 1 + FollowPositionSpeed: 10 + PositionSpringDamping: 0.3 + PositionSpringFrequency: 3 + InterpolateRotation: 0 + FollowRotationMode: 1 + FollowRotationSpeed: 10 + UpdateMode: 0 + UseMinimumDistanceBeforeFollow: 0 + MinimumDistanceBeforeFollow: 1 + UseMaximumDistance: 0 + MaximumDistance: 1 +--- !u!1 &1124319776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1124319777} + - component: {fileID: 1124319779} + - component: {fileID: 1124319778} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1124319777 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124319776} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 105979232} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -17.2, y: 1.741} + m_SizeDelta: {x: 15.6, y: 2.321} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1124319778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124319776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.24705882} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1124319779 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124319776} + m_CullTransparentMesh: 0 +--- !u!1 &1468606117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1468606118} + - component: {fileID: 1468606121} + - component: {fileID: 1468606120} + - component: {fileID: 1468606119} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1468606118 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468606117} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.69} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 796747883} + - {fileID: 1975376111} + m_Father: {fileID: 1626978143} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0.21, y: 0.1} + m_SizeDelta: {x: 50, y: 10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1468606119 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468606117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1468606120 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468606117} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1468606121 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1468606117} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1540402361 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1540402362} + - component: {fileID: 1540402364} + - component: {fileID: 1540402363} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1540402362 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540402361} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.1} + m_Children: [] + m_Father: {fileID: 105979232} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -17.038, y: 1.67} + m_SizeDelta: {x: 1400.159, y: 146.73} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1540402363 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540402361} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 100 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: MM Spring +--- !u!222 &1540402364 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1540402361} + m_CullTransparentMesh: 0 +--- !u!1 &1624092387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1624092388} + - component: {fileID: 1624092389} + m_Layer: 0 + m_Name: BluePointLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1624092388 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624092387} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -8.37, y: 5.44, z: 6.49} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 300129103} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &1624092389 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1624092387} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 0.23921567, g: 0.6784368, b: 1, a: 1} + m_Intensity: 10 + m_Range: 20 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &1626978142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1626978143} + m_Layer: 0 + m_Name: RegularFollow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1626978143 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626978142} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 4.69} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1947218} + - {fileID: 169354512} + - {fileID: 1468606118} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1975376110 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1975376111} + - component: {fileID: 1975376113} + - component: {fileID: 1975376112} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1975376111 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975376110} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.1} + m_Children: [] + m_Father: {fileID: 1468606118} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -17.038, y: 1.67} + m_SizeDelta: {x: 1400.159, y: 146.73} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1975376112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975376110} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 5686e06ef14cf104b8e282ee7c41b9a6, type: 3} + m_FontSize: 100 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 300 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Mathf.Lerp +--- !u!222 &1975376113 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1975376110} + m_CullTransparentMesh: 0 +--- !u!1 &2067790117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2067790118} + - component: {fileID: 2067790119} + m_Layer: 0 + m_Name: OrangePointLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2067790118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2067790117} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6.52, y: 7.5, z: -3.18} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 300129103} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &2067790119 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2067790117} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 1, g: 0.64113826, b: 0.24056602, a: 1} + m_Intensity: 10 + m_Range: 20 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 diff --git a/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemo.unity.meta b/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemo.unity.meta new file mode 100644 index 0000000..8d54fb4 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a30b9d15855238143959d0e48191c151 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemoGroundMaterial.mat b/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemoGroundMaterial.mat new file mode 100644 index 0000000..0348fba --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemoGroundMaterial.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMFollowTargetDemoGroundMaterial + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _METALLICGLOSSMAP _NORMALMAP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 6fbe7cfe9fb9f934da15400bab41eae9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 6, y: 6} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 296c95127ab0eee40b334cc33b1bc479, type: 3} + m_Scale: {x: 6, y: 6} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 2800000, guid: 6380989b56d512c498442aa08d0dfe03, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 0.049 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemoGroundMaterial.mat.meta b/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemoGroundMaterial.mat.meta new file mode 100644 index 0000000..e99a973 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMFollowTarget/MMFollowTargetDemoGroundMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 618ddfc15e28454459ee2236b25eb5be +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera.meta new file mode 100644 index 0000000..bb6185c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0845783f7e11d3b4484a65b814477fdd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/MMGhostCameraDemo.unity b/Assets/Feel/MMTools/Demos/MMGhostCamera/MMGhostCameraDemo.unity new file mode 100644 index 0000000..6bac80a --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/MMGhostCameraDemo.unity @@ -0,0 +1,20290 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 1 + m_FogColor: {r: 0.85098046, g: 0.50980395, b: 0, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 6e8efd13e78c7504f9e73f2d50b6c6f0, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.8879445, g: 0.6421222, b: 0.3447729, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &13937796 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2069950855} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalScale.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalScale.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalScale.z + value: 20 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -1821734603439505865, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: d3ca152672d96364d9f45f1b41ef9644, type: 2} + - target: {fileID: 919132149155446097, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_Name + value: MMGhostCameraCity + objectReference: {fileID: 0} + - target: {fileID: 2672162981226448120, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: c75a1321fa43aba438cede1bdc76489b, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 00cafe0a18485bf4986d87092f3b2c63, type: 3} +--- !u!1 &87668283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 87668286} + - component: {fileID: 87668285} + - component: {fileID: 87668284} + - component: {fileID: 87668287} + - component: {fileID: 87668288} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &87668284 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87668283} + m_Enabled: 1 +--- !u!20 &87668285 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87668283} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &87668286 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87668283} + m_LocalRotation: {x: 0.12028335, y: -0.25003096, z: 0.031320266, w: 0.96022683} + m_LocalPosition: {x: -171.2, y: 17.65, z: -344.9} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 14.28, y: -29.19, z: 0} +--- !u!114 &87668287 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87668283} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d179f1ca35fc44c4fb760f847e59aa88, type: 3} + m_Name: + m_EditorClassIdentifier: + MovementSpeed: 10 + RunFactor: 4 + Acceleration: 5 + Deceleration: 5 + RotationSpeed: 40 + HorizontalAction: + m_Name: + m_Type: 0 + m_ExpectedControlType: + m_Id: + m_Processors: + m_Interactions: + m_SingletonActionBindings: [] + VerticalAction: + m_Name: + m_Type: 0 + m_ExpectedControlType: + m_Id: + m_Processors: + m_Interactions: + m_SingletonActionBindings: [] + MousePositionAction: + m_Name: + m_Type: 0 + m_ExpectedControlType: + m_Id: + m_Processors: + m_Interactions: + m_SingletonActionBindings: [] + ActivateKey: 51 + UpKey: 1 + DownKey: 17 + ControlsModeSwitchKey: 27 + TimescaleModificationKey: 20 + RunKey: 52 + MouseSensitivity: 0.02 + MobileStickSensitivity: 2 + TimescaleModifier: 0.2 + AutoActivation: 1 + MovementEnabled: 1 + RotationEnabled: 1 + Active: 0 + TimeAltered: 0 + UseMobileControls: 0 + LeftStickContainer: {fileID: 0} + RightStickContainer: {fileID: 0} + LeftStick: {fileID: 0} + RightStick: {fileID: 0} +--- !u!114 &87668288 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87668283} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} + m_Name: + m_EditorClassIdentifier: + volumeTrigger: {fileID: 87668286} + volumeLayer: + serializedVersion: 2 + m_Bits: 4294967295 + stopNaNPropagation: 1 + finalBlitToCameraTarget: 0 + antialiasingMode: 0 + temporalAntialiasing: + jitterSpread: 0.75 + sharpness: 0.25 + stationaryBlending: 0.95 + motionBlending: 0.85 + subpixelMorphologicalAntialiasing: + quality: 2 + fastApproximateAntialiasing: + fastMode: 0 + keepAlpha: 0 + fog: + enabled: 1 + excludeSkybox: 1 + debugLayer: + lightMeter: + width: 512 + height: 256 + showCurves: 1 + histogram: + width: 512 + height: 256 + channel: 3 + waveform: + exposure: 0.12 + height: 256 + vectorscope: + size: 256 + exposure: 0.12 + overlaySettings: + linearDepth: 0 + motionColorIntensity: 4 + motionGridSize: 64 + colorBlindnessType: 0 + colorBlindnessStrength: 1 + m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} + m_ShowToolkit: 0 + m_ShowCustomSorter: 0 + breakBeforeColorGrading: 0 + m_BeforeTransparentBundles: [] + m_BeforeStackBundles: [] + m_AfterStackBundles: [] +--- !u!4 &116361466 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 00cafe0a18485bf4986d87092f3b2c63, + type: 3} + m_PrefabInstance: {fileID: 13937796} + m_PrefabAsset: {fileID: 0} +--- !u!1 &170552472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 170552473} + m_Layer: 0 + m_Name: Managers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &170552473 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170552472} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 683.5, y: 448.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1309261664} + - {fileID: 391566678} + - {fileID: 371521907} + - {fileID: 453126470} + - {fileID: 1423153778} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &177561585 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 177561587} + - component: {fileID: 177561586} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &177561586 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 177561585} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &177561587 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 177561585} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: -683.5, y: -445.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 786779819} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &328709053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 328709056} + - component: {fileID: 328709055} + - component: {fileID: 328709054} + - component: {fileID: 328709057} + m_Layer: 0 + m_Name: Snow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!199 &328709054 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 328709053} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10308, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_VertexStreams: 00010304 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!198 &328709055 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 328709053} + serializedVersion: 6 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + looping: 1 + prewarm: 1 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 1 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.2 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 5 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 90, y: 0, z: 0} + m_Scale: {x: 50, y: 50, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 1 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 100 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!4 &328709056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 328709053} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -171.2, y: 26.76, z: -327.93} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &328709057 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 328709053} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bd8ab284de1a65c49870e4b81e46134a, type: 3} + m_Name: + m_EditorClassIdentifier: + FollowPosition: 1 + FollowPositionX: 1 + FollowPositionY: 1 + FollowPositionZ: 1 + PositionSpace: 0 + FollowRotation: 1 + FollowScale: 1 + FollowScaleFactor: 1 + Target: {fileID: 87668286} + Offset: {x: 0, y: 0, z: 0} + AddInitialDistanceXToXOffset: 1 + AddInitialDistanceYToYOffset: 1 + AddInitialDistanceZToZOffset: 1 + InterpolatePosition: 1 + FollowPositionMode: 1 + FollowPositionSpeed: 10 + PositionSpringDamping: 0.3 + PositionSpringFrequency: 3 + InterpolateRotation: 1 + FollowRotationMode: 1 + FollowRotationSpeed: 10 + InterpolateScale: 1 + FollowScaleMode: 1 + FollowScaleSpeed: 10 + UpdateMode: 0 + UseMinimumDistanceBeforeFollow: 0 + MinimumDistanceBeforeFollow: 1 + UseMaximumDistance: 0 + MaximumDistance: 1 + AnchorToInitialPosition: 0 + MaxDistanceToAnchor: 1 +--- !u!1 &371521905 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 371521907} + - component: {fileID: 371521906} + m_Layer: 0 + m_Name: MMTimeManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &371521906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371521905} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8f7de9ef06f04864391a928af29f4b46, type: 3} + m_Name: + m_EditorClassIdentifier: + NormalTimescale: 1 + DefaultLerpSpeed: 1 + DefaultLerpTimescale: 0 + CurrentTimeScale: 1 + TargetTimeScale: 1 + LerpTimescale: 1 + LerpSpeed: 0 + TestButton: 0 +--- !u!4 &371521907 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 371521905} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -603.5, y: -433.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 170552473} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &391566677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 391566678} + - component: {fileID: 391566679} + m_Layer: 0 + m_Name: InputModule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &391566678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391566677} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 170552473} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &391566679 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 391566677} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c82cf35166701394ab910f41269944f9, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &453126468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 453126470} + - component: {fileID: 453126469} + m_Layer: 0 + m_Name: PostProcessing + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &453126469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453126468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: ee91928957b9b5b48b0b338bc5fbf32a, type: 2} + isGlobal: 1 + blendDistance: 0 + weight: 1 + priority: 0 +--- !u!4 &453126470 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453126468} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -968.16516, y: -436.75854, z: -238.41869} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 170552473} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &462539419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 462539421} + - component: {fileID: 462539420} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &462539420 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462539419} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 0.1462264, g: 0.9910896, b: 1, a: 1} + m_Intensity: 50 + m_Range: 80 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &462539421 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 462539419} + m_LocalRotation: {x: -0, y: 0.52212644, z: -0, w: 0.85286814} + m_LocalPosition: {x: 0, y: 0.315, z: 0} + m_LocalScale: {x: 0.033333335, y: 0.033333335, z: 0.033333335} + m_Children: [] + m_Father: {fileID: 1712246908} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 62.95, z: 0} +--- !u!1 &786779818 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 786779819} + m_Layer: 0 + m_Name: Scene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &786779819 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 786779818} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 683.5, y: 448.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 177561587} + - {fileID: 2069950855} + - {fileID: 1712246908} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1144694114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1144694115} + - component: {fileID: 1144694117} + - component: {fileID: 1144694116} + m_Layer: 0 + m_Name: LightTrails + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1144694115 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144694114} + m_LocalRotation: {x: -0.7071068, y: -0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.0050177714, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1712246908} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!199 &1144694116 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144694114} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f16d5230fcc97a542a77ce5f30353b47, type: 2} + - {fileID: 2100000, guid: f16d5230fcc97a542a77ce5f30353b47, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 4 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_VertexStreams: 00010304 + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!198 &1144694117 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144694114} + serializedVersion: 6 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 50 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 10 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 0.3 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 30 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 100 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.33833092 + value: 1 + inSlope: 1.3431785 + outSlope: 1.3431785 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8139539 + value: 0.7757795 + inSlope: -2.5816395 + outSlope: -2.5816395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ForceModule: + enabled: 1 + x: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 3 + scalar: 100 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 1 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -2 + outSlope: -2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!1 &1309261661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1309261664} + - component: {fileID: 1309261663} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1309261663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1309261661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1309261664 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1309261661} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -683.5, y: -448.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 170552473} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1399246689 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1399246690} + - component: {fileID: 1399246692} + - component: {fileID: 1399246691} + m_Layer: 0 + m_Name: Cubes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1399246690 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399246689} + m_LocalRotation: {x: -0.7071068, y: -0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -0.166, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1712246908} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!199 &1399246691 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399246689} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: c75a1321fa43aba438cede1bdc76489b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 4 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_VertexStreams: 00010304 + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!198 &1399246692 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399246689} + serializedVersion: 6 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 2 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 10 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 3 + scalar: 5 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 3 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 6.283185 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 6.283185 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 6.283185 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 1 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 10 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 0.3 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 32 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 100 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.33833092 + value: 1 + inSlope: 1.3431785 + outSlope: 1.3431785 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8139539 + value: 0.7757795 + inSlope: -2.5816395 + outSlope: -2.5816395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 1 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 3.4906585 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ForceModule: + enabled: 1 + x: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 3 + scalar: 20 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 20 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -2 + outSlope: -2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!1 &1423153774 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1423153778} + - component: {fileID: 1423153777} + - component: {fileID: 1423153776} + - component: {fileID: 1423153775} + m_Layer: 5 + m_Name: InstructionsCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1423153775 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1423153774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1423153776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1423153774} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1423153777 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1423153774} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1423153778 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1423153774} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1621326038} + m_Father: {fileID: 170552473} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1621326037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1621326038} + - component: {fileID: 1621326040} + - component: {fileID: 1621326039} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1621326038 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1621326037} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1423153778} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 20, y: 20} + m_SizeDelta: {x: 254.16315, y: 76.59927} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1621326039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1621326037} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Arrows to move + + Right shift to accelerate + + Press F to change the + timescale' +--- !u!222 &1621326040 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1621326037} + m_CullTransparentMesh: 0 +--- !u!1 &1712246904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1712246908} + - component: {fileID: 1712246907} + - component: {fileID: 1712246906} + - component: {fileID: 1712246905} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &1712246905 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712246904} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1712246906 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712246904} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f16d5230fcc97a542a77ce5f30353b47, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1712246907 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712246904} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1712246908 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712246904} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -924.9, y: -436.1, z: -119.2} + m_LocalScale: {x: 70, y: 70, z: 70} + m_Children: + - {fileID: 462539421} + - {fileID: 1144694115} + - {fileID: 1399246690} + - {fileID: 1940844599} + m_Father: {fileID: 786779819} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1940844598 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1940844599} + - component: {fileID: 1940844601} + - component: {fileID: 1940844600} + m_Layer: 0 + m_Name: Vortex + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1940844599 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1940844598} + m_LocalRotation: {x: -0.7071068, y: -0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.0050177714, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1712246908} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!199 &1940844600 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1940844598} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f16d5230fcc97a542a77ce5f30353b47, type: 2} + - {fileID: 2100000, guid: f16d5230fcc97a542a77ce5f30353b47, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 4 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_VertexStreams: 00010304 + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!198 &1940844601 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1940844598} + serializedVersion: 6 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 70 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 10 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 0.3 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 30 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 50 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.33833092 + value: 1 + inSlope: 1.3431785 + outSlope: 1.3431785 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8139539 + value: 0.7757795 + inSlope: -2.5816395 + outSlope: -2.5816395 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 1 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 5 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ForceModule: + enabled: 1 + x: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 3 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 3 + scalar: 100 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 1 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -2 + outSlope: -2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!1 &2069950854 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2069950855} + m_Layer: 0 + m_Name: CityModel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2069950855 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2069950854} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -683.5, y: -448.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 116361466} + m_Father: {fileID: 786779819} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/MMGhostCameraDemo.unity.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/MMGhostCameraDemo.unity.meta new file mode 100644 index 0000000..892d215 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/MMGhostCameraDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9b2edc97599f83a44b9c2d9da82e02e0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials.meta new file mode 100644 index 0000000..cc7efbd --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad2a3ecc8ab56d24e8c01a50dafc87ab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraBuildings.mat b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraBuildings.mat new file mode 100644 index 0000000..9326c7e --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraBuildings.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMGhostCameraBuildings + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.682 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.8490566, g: 0.77698094, b: 0.5566928, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraBuildings.mat.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraBuildings.mat.meta new file mode 100644 index 0000000..62c6190 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraBuildings.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c75a1321fa43aba438cede1bdc76489b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraDark.mat b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraDark.mat new file mode 100644 index 0000000..2a51347 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraDark.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMGhostCameraDark + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.047169805, g: 0.047169805, b: 0.047169805, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraDark.mat.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraDark.mat.meta new file mode 100644 index 0000000..b9b500a --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraDark.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfcdc5dc0e6c9c24d8a191370c6569de +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraGround.mat b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraGround.mat new file mode 100644 index 0000000..99fb82f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraGround.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMGhostCameraGround + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.6886792, g: 0.65592366, b: 0.51001245, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraGround.mat.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraGround.mat.meta new file mode 100644 index 0000000..d7bdae1 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraGround.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3ca152672d96364d9f45f1b41ef9644 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSkybox.mat b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSkybox.mat new file mode 100644 index 0000000..0c66277 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSkybox.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMGhostCameraSkybox + m_Shader: {fileID: 4800000, guid: 21b28f3ee4b3c13408ed85c229008f40, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Intensity: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Saturation: 1 + - _ScreenSpace: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _BottomColor: {r: 0.8490566, g: 0.509434, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _TopColor: {r: 1, g: 0.9583847, b: 0.8160377, a: 0} diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSkybox.mat.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSkybox.mat.meta new file mode 100644 index 0000000..c753ea6 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSkybox.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e8efd13e78c7504f9e73f2d50b6c6f0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSpheres.mat b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSpheres.mat new file mode 100644 index 0000000..3578d49 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSpheres.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMGhostCameraSpheres + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 2 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.682 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.8490566, g: 0.77698094, b: 0.5566928, a: 1} + - _EmissionColor: {r: 2.9960785, g: 2.9960785, b: 2.9960785, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSpheres.mat.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSpheres.mat.meta new file mode 100644 index 0000000..6fd32ac --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Materials/MMGhostCameraSpheres.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f16d5230fcc97a542a77ce5f30353b47 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Models.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/Models.meta new file mode 100644 index 0000000..0ed6366 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Models.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8711ad84679e2a49a13c4e560eddcfc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Models/MMGhostCameraCity.fbx b/Assets/Feel/MMTools/Demos/MMGhostCamera/Models/MMGhostCameraCity.fbx new file mode 100644 index 0000000..6ce4d80 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMGhostCamera/Models/MMGhostCameraCity.fbx differ diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/Models/MMGhostCameraCity.fbx.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/Models/MMGhostCameraCity.fbx.meta new file mode 100644 index 0000000..fe980fd --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/Models/MMGhostCameraCity.fbx.meta @@ -0,0 +1,97 @@ +fileFormatVersion: 2 +guid: 00cafe0a18485bf4986d87092f3b2c63 +ModelImporter: + serializedVersion: 19301 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing.meta new file mode 100644 index 0000000..9b4d20b --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4318a6428fa474944ae184de8995eeef +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing/MMGhostCameraPostProcessingProfile.asset b/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing/MMGhostCameraPostProcessingProfile.asset new file mode 100644 index 0000000..6d1ef38 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing/MMGhostCameraPostProcessingProfile.asset @@ -0,0 +1,214 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4859714953267798319 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 556797029e73b2347956b6579e77e05b, type: 3} + m_Name: DepthOfField + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + focusDistance: + overrideState: 1 + value: 28.31 + aperture: + overrideState: 1 + value: 1.15 + focalLength: + overrideState: 1 + value: 52.7 + kernelSize: + overrideState: 1 + value: 1 +--- !u!114 &-890341883512534674 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 40b924e2dad56384a8df2a1e111bb675, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + mode: + overrideState: 1 + value: 0 + color: + overrideState: 1 + value: {r: 0.2924528, g: 0, b: 0, a: 1} + center: + overrideState: 1 + value: {x: 0.5, y: 0.5} + intensity: + overrideState: 1 + value: 0.418 + smoothness: + overrideState: 1 + value: 0.2 + roundness: + overrideState: 1 + value: 1 + rounded: + overrideState: 1 + value: 0 + mask: + overrideState: 1 + value: {fileID: 0} + defaultState: 1 + opacity: + overrideState: 1 + value: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3} + m_Name: MMGhostCameraPostProcessingProfile + m_EditorClassIdentifier: + settings: + - {fileID: 8717783800899883469} + - {fileID: 4126947576713245814} + - {fileID: -4859714953267798319} + - {fileID: 4552645081581158628} + - {fileID: -890341883512534674} +--- !u!114 &4126947576713245814 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 48a79b01ea5641d4aa6daa2e23605641, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + intensity: + overrideState: 1 + value: 1 + threshold: + overrideState: 1 + value: 1 + softKnee: + overrideState: 1 + value: 0.5 + clamp: + overrideState: 1 + value: 65472 + diffusion: + overrideState: 1 + value: 7 + anamorphicRatio: + overrideState: 1 + value: 0 + color: + overrideState: 1 + value: {r: 1, g: 1, b: 1, a: 1} + fastMode: + overrideState: 1 + value: 0 + dirtTexture: + overrideState: 1 + value: {fileID: 0} + defaultState: 1 + dirtIntensity: + overrideState: 1 + value: 0 +--- !u!114 &4552645081581158628 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6050e2d5de785ce4d931e4dbdbf2d755, type: 3} + m_Name: ChromaticAberration + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + spectralLut: + overrideState: 1 + value: {fileID: 0} + defaultState: 1 + intensity: + overrideState: 1 + value: 0.331 + fastMode: + overrideState: 1 + value: 0 +--- !u!114 &8717783800899883469 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c1cb7e9e120078f43bce4f0b1be547a7, type: 3} + m_Name: AmbientOcclusion + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + mode: + overrideState: 1 + value: 1 + intensity: + overrideState: 1 + value: 0.51 + color: + overrideState: 1 + value: {r: 0.41509432, g: 0, b: 0, a: 1} + ambientOnly: + overrideState: 1 + value: 1 + noiseFilterTolerance: + overrideState: 1 + value: 0 + blurTolerance: + overrideState: 1 + value: -4.6 + upsampleTolerance: + overrideState: 1 + value: -12 + thicknessModifier: + overrideState: 1 + value: 1 + directLightingStrength: + overrideState: 1 + value: 0 + radius: + overrideState: 1 + value: 0.25 + quality: + overrideState: 1 + value: 2 diff --git a/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing/MMGhostCameraPostProcessingProfile.asset.meta b/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing/MMGhostCameraPostProcessingProfile.asset.meta new file mode 100644 index 0000000..5ea9c04 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGhostCamera/PostProcessing/MMGhostCameraPostProcessingProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee91928957b9b5b48b0b338bc5fbf32a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGizmos.meta b/Assets/Feel/MMTools/Demos/MMGizmos.meta new file mode 100644 index 0000000..fdba518 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ad59ffca7f359f45a1e5d48d9d26fe8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemo.unity b/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemo.unity new file mode 100644 index 0000000..9d01d33 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemo.unity @@ -0,0 +1,2868 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 5232fa07f925b52418fdfb492eac5485, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.10123622, g: 0.4964872, b: 0.72947276, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &47096448 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 47096450} + - component: {fileID: 47096449} + m_Layer: 0 + m_Name: LineForward + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &47096449 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 47096448} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 13 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.5 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &47096450 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 47096448} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 8, z: -0.021} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 25 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &145927696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 145927698} + - component: {fileID: 145927697} + m_Layer: 0 + m_Name: LineUp + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &145927697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145927696} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 12 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.5 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &145927698 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145927696} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 8, z: -0.021} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 24 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &216846111 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 216846113} + - component: {fileID: 216846112} + m_Layer: 0 + m_Name: PositionWireCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &216846112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216846111} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 2 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &216846113 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 216846111} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 26 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &558744042 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 558744044} + - component: {fileID: 558744043} + m_Layer: 0 + m_Name: PositionPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &558744043 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 558744042} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 2 + TextToDisplay: fghfghfg hfgh + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.29803923} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &558744044 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 558744042} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &589520517 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 589520519} + - component: {fileID: 589520518} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &589520518 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589520517} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &589520519 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589520517} + m_LocalRotation: {x: 0.41084635, y: 0.21241921, z: -0.09905268, w: 0.88106304} + m_LocalPosition: {x: 0, y: 100, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: 27.11, z: 0} +--- !u!1 &682261405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 682261408} + - component: {fileID: 682261407} + - component: {fileID: 682261406} + m_Layer: 0 + m_Name: SphereWire + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &682261406 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682261405} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &682261407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682261405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 1 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.75, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &682261408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682261405} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &741973222 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 741973227} + - component: {fileID: 741973226} + - component: {fileID: 741973225} + - component: {fileID: 741973224} + - component: {fileID: 741973223} + - component: {fileID: 741973228} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &741973223 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741973222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f009572b4d918346b24337ef83f88c1, type: 3} + m_Name: + m_EditorClassIdentifier: + Rotating: 1 + RotationSpace: 1 + UpdateMode: 0 + RotationSpeed: {x: 100, y: 50, z: 10} + Orbiting: 0 + AdditiveOrbitRotation: 0 + OrbitCenterTransform: {fileID: 0} + OrbitCenterOffset: {x: 0, y: 0, z: 0} + OrbitRotationAxis: {x: 0, y: 1, z: 0} + OrbitRotationSpeed: 10 + OrbitRadius: 3 + OrbitCorrectionSpeed: 10 + DrawGizmos: 1 + OrbitPlaneColor: {r: 54, g: 169, b: 225, a: 0.02} + OrbitLineColor: {r: 225, g: 225, b: 225, a: 0.1} + _orbitCenter: {x: 0, y: 0, z: 0} + _worldRotationAxis: {x: 0, y: 0, z: 0} + _snappedPosition: {x: 0, y: 0, z: 0} + _radius: {x: 0, y: 0, z: 0} +--- !u!65 &741973224 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741973222} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &741973225 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741973222} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &741973226 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741973222} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &741973227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741973222} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 9, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &741973228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 741973222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 347013242dca7c44fb5001793033ea59, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateMode: 0 + PositionActive: 1 + RotationActive: 0 + ScaleActive: 0 + PositionWiggleProperties: + WigglePermitted: 1 + WiggleType: 3 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: -2, y: -2, z: -2} + AmplitudeMax: {x: 2, y: 2, z: 2} + RelativeAmplitude: 1 + UniformValues: 0 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + RotationWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + UniformValues: 0 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + ScaleWiggleProperties: + WigglePermitted: 1 + WiggleType: 1 + UseUnscaledTime: 0 + StartWigglingAutomatically: 1 + SmoothPingPong: 1 + UseSpeedCurve: 0 + SpeedCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + FrequencyMin: 0 + FrequencyMax: 1 + AmplitudeMin: {x: 0, y: 0, z: 0} + AmplitudeMax: {x: 1, y: 1, z: 1} + RelativeAmplitude: 1 + UniformValues: 0 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapCurveZeroMin: {x: 0, y: 0, z: 0} + RemapCurveZeroMax: {x: 0, y: 0, z: 0} + RemapCurveOneMin: {x: 1, y: 1, z: 1} + RemapCurveOneMax: {x: 1, y: 1, z: 1} + RelativeCurveAmplitude: 1 + CurvePingPong: 0 + PauseMin: 0 + PauseMax: 0 + LimitedTime: 0 + LimitedTimeTotal: 0 + LimitedTimeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LimitedTimeResetValue: 1 + LimitedTimeLeft: 0 + NoiseFrequencyMin: {x: 0, y: 0, z: 0} + NoiseFrequencyMax: {x: 1, y: 1, z: 1} + NoiseShiftMin: {x: 0, y: 0, z: 0} + NoiseShiftMax: {x: 0, y: 0, z: 0} + DebugWiggleDuration: 2 +--- !u!1 &777917621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 777917623} + - component: {fileID: 777917622} + m_Layer: 0 + m_Name: LineArrows + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &777917622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777917621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 10 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.5 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &777917623 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 777917621} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 8, z: -0.021} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &904791022 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 904791025} + - component: {fileID: 904791024} + - component: {fileID: 904791023} + m_Layer: 0 + m_Name: BoxCollider2DFull + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!61 &904791023 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 904791022} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!114 &904791024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 904791022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 0.69803923} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.75, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &904791025 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 904791022} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &979508401 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 979508404} + - component: {fileID: 979508403} + - component: {fileID: 979508402} + m_Layer: 0 + m_Name: CircleCollider2DWire + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!58 &979508402 +CircleCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979508401} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Radius: 0.5 +--- !u!114 &979508403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979508401} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 1 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.75, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &979508404 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 979508401} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &985391527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 985391529} + - component: {fileID: 985391528} + m_Layer: 0 + m_Name: PositionSphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &985391528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985391527} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 3 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &985391529 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985391527} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1008775278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1008775280} + - component: {fileID: 1008775279} + m_Layer: 0 + m_Name: PositionArrowForward + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1008775279 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1008775278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 9 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.5 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1008775280 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1008775278} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 6, z: -0.021} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1064219801 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1064219804} + - component: {fileID: 1064219803} + - component: {fileID: 1064219802} + m_Layer: 0 + m_Name: BoxColliderWire + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1064219802 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064219801} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.85, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1064219803 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064219801} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 1 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.75, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1064219804 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064219801} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 0, z: 0} + m_LocalScale: {x: 1.96, y: 0.9, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1084074544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1084074547} + - component: {fileID: 1084074546} + - component: {fileID: 1084074545} + m_Layer: 0 + m_Name: MeshColliderFull + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &1084074545 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1084074544} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -5654033164078409323, guid: 5c0669bd66f517143b7f3a11cbd9c17e, type: 3} +--- !u!114 &1084074546 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1084074544} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 0.69803923} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: 0, y: 1.25, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1084074547 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1084074544} + m_LocalRotation: {x: 0.8534144, y: 0.521233, z: -0, w: 0} + m_LocalPosition: {x: 6, y: 1.5, z: 0} + m_LocalScale: {x: 50, y: 50, z: 50} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 180, y: 0, z: -62.83} +--- !u!1 &1180641674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1180641676} + - component: {fileID: 1180641675} + m_Layer: 0 + m_Name: PositionTexture + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1180641675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180641674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 5 + PositionTexture: {fileID: 2800000, guid: ddf3b2cb509cb234bb7b7f83fc04364d, type: 3} + TextureSize: {x: 50, y: 50} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1180641676 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180641674} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1212881641 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1212881644} + - component: {fileID: 1212881643} + - component: {fileID: 1212881642} + m_Layer: 0 + m_Name: BoxCollider2DWire + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!61 &1212881642 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1212881641} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1, y: 1} + m_EdgeRadius: 0 +--- !u!114 &1212881643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1212881641} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 1 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.75, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1212881644 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1212881641} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1355728018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1355728020} + - component: {fileID: 1355728019} + m_Layer: 0 + m_Name: PositionCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1355728019 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355728018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 1 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1355728020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1355728018} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1424603338 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1424603340} + - component: {fileID: 1424603339} + m_Layer: 0 + m_Name: PositionArrowUp + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1424603339 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424603338} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 8 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.5 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1424603340 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1424603338} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 6, z: -0.021} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1504946546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1504946548} + - component: {fileID: 1504946547} + m_Layer: 0 + m_Name: JustText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1504946547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504946546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 0 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 4 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 1 + TextToDisplay: Just Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1504946548 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1504946546} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 28 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1589810572 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1589810575} + - component: {fileID: 1589810574} + - component: {fileID: 1589810573} + m_Layer: 0 + m_Name: BoxColliderFull + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1589810573 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589810572} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 0.85, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1589810574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589810572} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 0.69803923} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.75, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1589810575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589810572} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4, y: 2, z: 0} + m_LocalScale: {x: 1.96, y: 0.9, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1596901027 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1596901030} + - component: {fileID: 1596901029} + - component: {fileID: 1596901028} + m_Layer: 0 + m_Name: MeshColliderWire + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &1596901028 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1596901027} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: -5654033164078409323, guid: 5c0669bd66f517143b7f3a11cbd9c17e, type: 3} +--- !u!114 &1596901029 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1596901027} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 1 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: 0, y: 1.25, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1596901030 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1596901027} + m_LocalRotation: {x: 0.8534144, y: 0.521233, z: -0, w: 0} + m_LocalPosition: {x: 6, y: -0.5, z: 0} + m_LocalScale: {x: 50, y: 50, z: 50} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 180, y: 0, z: -62.83} +--- !u!1 &1630882199 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1630882202} + - component: {fileID: 1630882201} + - component: {fileID: 1630882200} + m_Layer: 0 + m_Name: CircleCollider2DFull + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!58 &1630882200 +CircleCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630882199} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Radius: 0.5 +--- !u!114 &1630882201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630882199} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 0.69803923} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.75, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1630882202 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630882199} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1734817153 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1734817155} + - component: {fileID: 1734817154} + m_Layer: 0 + m_Name: PositionWireSphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1734817154 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1734817153} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 4 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1734817155 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1734817153} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 10, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 27 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1799972279 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1799972281} + - component: {fileID: 1799972280} + m_Layer: 0 + m_Name: PositionArrows + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1799972280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799972279} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 6 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.5 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1799972281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799972279} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 6, z: -0.021} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1805161126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1805161129} + - component: {fileID: 1805161128} + - component: {fileID: 1805161127} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1805161127 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805161126} + m_Enabled: 1 +--- !u!20 &1805161128 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805161126} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1805161129 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1805161126} + m_LocalRotation: {x: 0, y: 0.12983403, z: 0, w: 0.9915358} + m_LocalPosition: {x: 0.27, y: 3.657, z: -10.32} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 14.92, z: 0} +--- !u!1 &1899115485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1899115487} + - component: {fileID: 1899115486} + m_Layer: 0 + m_Name: PropertyGizmo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1899115486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899115485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 0.5149194, g: 1, b: 0, a: 1} + PositionMode: 1 + PositionTexture: {fileID: 2800000, guid: ddf3b2cb509cb234bb7b7f83fc04364d, type: 3} + TextureSize: {x: 50, y: 50} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 1 + LockedZ: 0 + DisplayText: 1 + TextMode: 5 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 741973222} + TargetComponent: {fileID: 741973227} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position +--- !u!4 &1899115487 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1899115485} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6, y: 4, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1900779672 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1900779674} + - component: {fileID: 1900779673} + m_Layer: 0 + m_Name: LineRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1900779673 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1900779672} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 11 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.5 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &1900779674 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1900779672} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 8, z: -0.338} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2004486147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2004486150} + - component: {fileID: 2004486149} + - component: {fileID: 2004486148} + m_Layer: 0 + m_Name: SphereFull + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &2004486148 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2004486147} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &2004486149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2004486147} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 1 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 0.69803923} + PositionMode: 0 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.2 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.75, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &2004486150 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2004486147} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 2, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2063234037 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2063234039} + - component: {fileID: 2063234038} + m_Layer: 0 + m_Name: PositionArrowRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2063234038 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063234037} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 99ca21bfff9408f44bf12916ef8f4363, type: 3} + m_Name: + m_EditorClassIdentifier: + DisplayGizmo: 1 + GizmoType: 2 + DisplayMode: 0 + GizmoColor: {r: 1, g: 0.76862746, b: 0, a: 1} + PositionMode: 7 + PositionTexture: {fileID: 0} + TextureSize: {x: 1, y: 1} + PositionSize: 0.5 + ColliderRenderType: 0 + ViewDistance: 20 + GizmoOffset: {x: 0, y: 0, z: 0} + LockX: 0 + LockedX: 0 + LockY: 0 + LockedY: 0 + LockZ: 0 + LockedZ: 0 + DisplayText: 1 + TextMode: 0 + TextToDisplay: Some Text + TextOffset: {x: -0.5, y: 0.5, z: 0} + TextFontStyle: 0 + TextSize: 12 + TextColor: {r: 1, g: 0.76862746, b: 0, a: 1} + TextBackgroundColor: {r: 0, g: 0, b: 0, a: 0.3} + TextPadding: {x: 5, y: 0, z: 5, w: 0} + TextMaxDistance: 14 + TargetProperty: + TargetObject: {fileID: 0} + TargetComponent: {fileID: 0} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: +--- !u!4 &2063234039 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063234037} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 6, z: -0.021} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemo.unity.meta b/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemo.unity.meta new file mode 100644 index 0000000..dcb8375 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c6de2585731c3ae40a81524a39e8a32a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemoSkybox.mat b/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemoSkybox.mat new file mode 100644 index 0000000..96c2f5a --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemoSkybox.mat @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMGizmoDemoSkybox + m_Shader: {fileID: 4800000, guid: 21b28f3ee4b3c13408ed85c229008f40, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Intensity: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Saturation: 1 + - _ScreenSpace: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _BottomColor: {r: 0, g: 0.40330186, b: 0.6226415, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _TopColor: {r: 0.2688679, g: 0.72406054, b: 1, a: 0} diff --git a/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemoSkybox.mat.meta b/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemoSkybox.mat.meta new file mode 100644 index 0000000..c3232e4 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMGizmos/MMGizmoDemoSkybox.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5232fa07f925b52418fdfb492eac5485 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMObservable.meta b/Assets/Feel/MMTools/Demos/MMObservable.meta new file mode 100644 index 0000000..5d98142 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 715d668b8cdd7f64783ce63df1a9c0ed +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemo.unity b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemo.unity new file mode 100644 index 0000000..3ff80df --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemo.unity @@ -0,0 +1,1073 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 071011635f1949c46a85b7caac317267, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.46655226, g: 0.67163867, b: 0.85742027, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &129738950 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 129738952} + - component: {fileID: 129738951} + m_Layer: 0 + m_Name: Observer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &129738951 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 129738950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7626ba85783411047a182b9352e58a60, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetSubject: {fileID: 1352947842} +--- !u!4 &129738952 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 129738950} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.58, y: -0.38, z: -6.48} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1150315014} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &199700537 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 199700541} + - component: {fileID: 199700540} + - component: {fileID: 199700539} + - component: {fileID: 199700538} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &199700538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199700537} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &199700539 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199700537} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &199700540 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199700537} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &199700541 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199700537} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1687380789} + - {fileID: 1164861100} + m_Father: {fileID: 2099886149} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &346980075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 346980077} + - component: {fileID: 346980076} + m_Layer: 0 + m_Name: ObserverAutoSleep + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &346980076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346980075} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a97d79031ec706140a9e04a5b21e82f7, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetSubject: {fileID: 1352947842} +--- !u!4 &346980077 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346980075} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -4.3, y: -0.37999988, z: -6.56} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 689808119} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &689808118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 689808119} + - component: {fileID: 689808121} + - component: {fileID: 689808120} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &689808119 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 689808118} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 346980077} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &689808120 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 689808118} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 859110124559f53448796d58be533933, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &689808121 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 689808118} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &952862476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 952862478} + - component: {fileID: 952862477} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &952862477 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952862476} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &952862478 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952862476} + m_LocalRotation: {x: -0.03564654, y: -0.3342477, z: 0.9411361, w: 0.035646543} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2099886149} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 38.8, y: -6.7, z: 173.3} +--- !u!1 &1150315013 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1150315014} + - component: {fileID: 1150315016} + - component: {fileID: 1150315015} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1150315014 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1150315013} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 129738952} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1150315015 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1150315013} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 0d11a8d904e77af4bbbac066d6455c5a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1150315016 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1150315013} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1164861099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1164861100} + - component: {fileID: 1164861103} + - component: {fileID: 1164861102} + - component: {fileID: 1164861101} + m_Layer: 5 + m_Name: FPSCounter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1164861100 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164861099} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 199700541} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 22.33, y: 17.42} + m_SizeDelta: {x: 34.67, y: 24.84} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1164861101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164861099} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 06e8923c17983d643980d7d7773b7382, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateInterval: 0.3 + Mode: 0 +--- !u!114 &1164861102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164861099} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 8 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 120 +--- !u!222 &1164861103 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1164861099} + m_CullTransparentMesh: 0 +--- !u!1 &1352947841 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1352947843} + - component: {fileID: 1352947842} + m_Layer: 0 + m_Name: Subject - MOVE ME ON THE X AND Z AXIS IN PLAY MODE + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1352947842 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1352947841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e6fd774b01b4cbd4e8230b76b6eeda5c, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &1352947843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1352947841} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.11528146, y: 0.55, z: -7.65} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1687793658} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1442654786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1442654788} + - component: {fileID: 1442654787} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1442654787 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442654786} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 0.3066038, g: 0.7902162, b: 1, a: 1} + m_Intensity: 5 + m_Range: 20 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1442654788 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442654786} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -7.57, y: -4.77, z: -7.19} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1687380788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1687380789} + - component: {fileID: 1687380791} + - component: {fileID: 1687380790} + m_Layer: 5 + m_Name: InfoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1687380789 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687380788} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 199700541} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -7.300049, y: 82.82} + m_SizeDelta: {x: -105.7, y: 105.96} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1687380790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687380788} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 53aebb2602873ed4a9807e8a254a7d2f, type: 3} + m_FontSize: 13 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'To test this MMObservable setup, play the scene, select the Subject + object in Scene view, and move it along the X axis. + + + The two spheres + have observer components, and will be notified when the cube''s x position changes. + When that happens, they''ll modify their own y position proportionnally. This + is done without an Update loop, and only when the cube''s x position changes. + If it stays in place, it costs nothing.' +--- !u!222 &1687380791 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687380788} + m_CullTransparentMesh: 0 +--- !u!1 &1687793657 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1687793658} + - component: {fileID: 1687793660} + - component: {fileID: 1687793659} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1687793658 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687793657} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1352947843} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1687793659 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687793657} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 28f4ba3ff8cbc124d82cbe3d696ed209, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1687793660 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687793657} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1810324757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1810324760} + - component: {fileID: 1810324759} + - component: {fileID: 1810324758} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1810324758 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810324757} + m_Enabled: 1 +--- !u!20 &1810324759 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810324757} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1810324760 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810324757} + m_LocalRotation: {x: -0.1734315, y: -0.1275409, z: 0.022657083, w: -0.9762897} + m_LocalPosition: {x: -2.7592368, y: 1.6627758, z: -11.845983} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2099886149} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: -39.03, y: 0, z: 0} +--- !u!1 &2099886148 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2099886149} + m_Layer: 0 + m_Name: TestScene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2099886149 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099886148} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1810324760} + - {fileID: 952862478} + - {fileID: 199700541} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemo.unity.meta b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemo.unity.meta new file mode 100644 index 0000000..8f83d66 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4b0c11e0a4798e04c82c84e3f89de5e2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserver.cs b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserver.cs new file mode 100644 index 0000000..e6d52c1 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserver.cs @@ -0,0 +1,40 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A test class used to demonstrate the MMObservable in the MMObservableTest demo scene + /// + [AddComponentMenu("")] + public class MMObservableDemoObserver : MonoBehaviour + { + /// the subject to look at + public MMObservableDemoSubject TargetSubject; + + /// + /// When the position changes, we move our object accordingly on the y axis + /// + protected virtual void OnPositionChange() + { + this.transform.position = this.transform.position.MMSetY(TargetSubject.PositionX.Value); + } + + /// + /// On enable we start listening for changes + /// + protected virtual void OnEnable() + { + TargetSubject.PositionX.OnValueChanged += OnPositionChange; + } + + /// + /// On enable we stop listening for changes + /// + protected virtual void OnDisable() + { + TargetSubject.PositionX.OnValueChanged -= OnPositionChange; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserver.cs.meta b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserver.cs.meta new file mode 100644 index 0000000..4ee3f0b --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7626ba85783411047a182b9352e58a60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserverAutoSleep.cs b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserverAutoSleep.cs new file mode 100644 index 0000000..243e834 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserverAutoSleep.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A test class used to demonstrate the MMObservable pattern in the MMObservableDemo scene + /// This one disables itself on Awake, and passively listens for changes, even when disabled + /// + [AddComponentMenu("")] + public class MMObservableDemoObserverAutoSleep : MonoBehaviour + { + public MMObservableDemoSubject TargetSubject; + + protected virtual void OnSpeedChange() + { + this.transform.position = this.transform.position.MMSetY(TargetSubject.PositionX.Value); + } + + /// + /// On awake we start listening for changes + /// + protected virtual void Awake() + { + TargetSubject.PositionX.OnValueChanged += OnSpeedChange; + this.enabled = false; + } + + /// + /// On destroy we stop listening for changes + /// + protected virtual void OnDestroy() + { + TargetSubject.PositionX.OnValueChanged -= OnSpeedChange; + } + + /// + /// On enable we do nothing + /// + protected virtual void OnEnable() + { + + } + + /// + /// On disable we do nothing + /// + protected virtual void OnDisable() + { + + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserverAutoSleep.cs.meta b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserverAutoSleep.cs.meta new file mode 100644 index 0000000..6e454ab --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoObserverAutoSleep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a97d79031ec706140a9e04a5b21e82f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoSubject.cs b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoSubject.cs new file mode 100644 index 0000000..de505d0 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoSubject.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A test class used to demonstrate how MMObservable works in the MMObservableTest demo scene + /// + [AddComponentMenu("")] + public class MMObservableDemoSubject : MonoBehaviour + { + /// a public float we expose, outputting the x position of our object + public MMObservable PositionX = new MMObservable(); + + /// + /// On Update we update our x position + /// + protected virtual void Update() + { + PositionX.Value = this.transform.position.x; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoSubject.cs.meta b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoSubject.cs.meta new file mode 100644 index 0000000..db85c0b --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMObservable/MMObservableDemoSubject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6fd774b01b4cbd4e8230b76b6eeda5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures.meta b/Assets/Feel/MMTools/Demos/MMPrototypeTextures.meta new file mode 100644 index 0000000..ffe3f42 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3910464add5d075419afad9dc9ebca63 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.meta b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.meta new file mode 100644 index 0000000..b677298 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24270e77eee5725478ade78a09a46ea4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.unity b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.unity new file mode 100644 index 0000000..118a803 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.unity @@ -0,0 +1,13258 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 1 + m_FogColor: {r: 0.7137255, g: 1, b: 1, a: 1} + m_FogMode: 3 + m_FogDensity: 0.005 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: 071011635f1949c46a85b7caac317267, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 1716661681} + m_IndirectSpecularColor: {r: 0.4661327, g: 0.67239493, b: 0.87189215, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000000, guid: 1549ce6eae3b775469134fe3df2b4efa, + type: 2} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &5366877 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5366878} + m_Layer: 0 + m_Name: GreenLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5366878 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5366877} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5, y: 1, z: -11} + m_LocalScale: {x: 1, y: 5, z: 5} + m_Children: + - {fileID: 1802159686} + - {fileID: 255328012} + - {fileID: 1760898307} + - {fileID: 24647532} + - {fileID: 93779905} + - {fileID: 438786022} + - {fileID: 647187618} + - {fileID: 1266064075} + - {fileID: 2094037616} + - {fileID: 1602844936} + - {fileID: 2111398044} + - {fileID: 1349838712} + - {fileID: 18287012} + - {fileID: 747184780} + - {fileID: 1255633335} + - {fileID: 122221894} + m_Father: {fileID: 1414672540} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &15163511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 15163512} + - component: {fileID: 15163515} + - component: {fileID: 15163514} + - component: {fileID: 15163513} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &15163512 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15163511} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15.409049, y: 5, z: -15.377993} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &15163513 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15163511} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &15163514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15163511} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &15163515 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15163511} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &18287011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 18287012} + - component: {fileID: 18287015} + - component: {fileID: 18287014} + - component: {fileID: 18287013} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &18287012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18287011} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &18287013 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18287011} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &18287014 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18287011} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 467db2a28dc1c6a45b450dc6d124de59, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &18287015 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18287011} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &21585612 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 21585613} + - component: {fileID: 21585616} + - component: {fileID: 21585615} + - component: {fileID: 21585614} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &21585613 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21585612} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &21585614 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21585612} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &21585615 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21585612} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 594480777cec0fa489126aeb2273ecbc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &21585616 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 21585612} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &24647531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 24647532} + - component: {fileID: 24647535} + - component: {fileID: 24647534} + - component: {fileID: 24647533} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &24647532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24647531} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &24647533 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24647531} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &24647534 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24647531} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eb936a4576d8f9741b8d914d47f3ccce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &24647535 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 24647531} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &25278629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 25278630} + - component: {fileID: 25278633} + - component: {fileID: 25278632} + - component: {fileID: 25278631} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &25278630 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25278629} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &25278631 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25278629} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &25278632 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25278629} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: db11353047c997f46a4760754f00c788, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &25278633 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 25278629} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &30031374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 30031375} + - component: {fileID: 30031378} + - component: {fileID: 30031377} + - component: {fileID: 30031376} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &30031375 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30031374} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &30031376 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30031374} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &30031377 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30031374} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 50ff9811d84ffeb42b11f0d57157a346, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &30031378 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 30031374} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &43788215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 43788216} + - component: {fileID: 43788219} + - component: {fileID: 43788218} + - component: {fileID: 43788217} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &43788216 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 43788215} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &43788217 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 43788215} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &43788218 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 43788215} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 50ff9811d84ffeb42b11f0d57157a346, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &43788219 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 43788215} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &76373825 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 76373826} + - component: {fileID: 76373829} + - component: {fileID: 76373828} + - component: {fileID: 76373827} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &76373826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76373825} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 13.81, y: 1, z: -28.09} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &76373827 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76373825} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &76373828 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76373825} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e0e8a571ef6fce34890952889b35afda, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &76373829 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76373825} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &93779904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 93779905} + - component: {fileID: 93779908} + - component: {fileID: 93779907} + - component: {fileID: 93779906} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &93779905 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 93779904} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &93779906 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 93779904} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &93779907 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 93779904} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 40ebbdf2c7a17d342843431f58d3e892, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &93779908 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 93779904} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &113328020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 113328021} + - component: {fileID: 113328024} + - component: {fileID: 113328023} + - component: {fileID: 113328022} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &113328021 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113328020} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &113328022 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113328020} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &113328023 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113328020} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d642a4ab722ef8a46af4d261e5227b0c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &113328024 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113328020} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &122221893 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 122221894} + - component: {fileID: 122221897} + - component: {fileID: 122221896} + - component: {fileID: 122221895} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &122221894 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122221893} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &122221895 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122221893} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &122221896 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122221893} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 467db2a28dc1c6a45b450dc6d124de59, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &122221897 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 122221893} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &127460106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 127460107} + - component: {fileID: 127460110} + - component: {fileID: 127460109} + - component: {fileID: 127460108} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &127460107 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127460106} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 35.4091, y: 5, z: -15.378004} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &127460108 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127460106} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &127460109 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127460106} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &127460110 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127460106} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &132108984 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 132108985} + - component: {fileID: 132108988} + - component: {fileID: 132108987} + - component: {fileID: 132108986} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &132108985 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132108984} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.409149, y: 5, z: 4.6213093} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &132108986 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132108984} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &132108987 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132108984} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &132108988 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132108984} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &140784979 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 140784980} + - component: {fileID: 140784983} + - component: {fileID: 140784982} + - component: {fileID: 140784981} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &140784980 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140784979} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &140784981 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140784979} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &140784982 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140784979} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 06b0ed03b4a01634c8b5eb55bc95df8d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &140784983 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 140784979} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &167604351 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 167604352} + - component: {fileID: 167604355} + - component: {fileID: 167604354} + - component: {fileID: 167604353} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &167604352 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167604351} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &167604353 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167604351} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &167604354 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167604351} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1a9e66cbf3543a44cb2cf068585f07d4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &167604355 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 167604351} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &169346755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 169346756} + - component: {fileID: 169346759} + - component: {fileID: 169346758} + - component: {fileID: 169346757} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &169346756 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169346755} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &169346757 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169346755} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &169346758 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169346755} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 13516cfdf366d2542bc2fa983b6f803a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &169346759 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 169346755} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &170923061 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 170923062} + m_Layer: 0 + m_Name: RedLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &170923062 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170923061} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5, y: 1, z: -22} + m_LocalScale: {x: 1, y: 5, z: 5} + m_Children: + - {fileID: 742818968} + - {fileID: 769013056} + - {fileID: 167604352} + - {fileID: 1840613401} + - {fileID: 1059405917} + - {fileID: 327681193} + - {fileID: 493319999} + - {fileID: 814563545} + - {fileID: 2078863053} + - {fileID: 1696378788} + - {fileID: 438367600} + - {fileID: 1919042799} + - {fileID: 985885345} + - {fileID: 1767139611} + - {fileID: 967954366} + - {fileID: 1457823752} + m_Father: {fileID: 1414672540} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &192097511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 192097513} + - component: {fileID: 192097512} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &192097512 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 192097511} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 1, g: 0.96810853, b: 0.75, a: 1} + m_Intensity: 0.5 + m_Range: 50 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &192097513 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 192097511} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 12.88, y: 13.34, z: -7.38} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1891373113} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &203680799 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 203680800} + - component: {fileID: 203680803} + - component: {fileID: 203680802} + - component: {fileID: 203680801} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &203680800 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203680799} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &203680801 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203680799} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &203680802 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203680799} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2a42e638cd366184aad3203b2732b2e2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &203680803 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 203680799} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &255328011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 255328012} + - component: {fileID: 255328015} + - component: {fileID: 255328014} + - component: {fileID: 255328013} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &255328012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255328011} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &255328013 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255328011} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &255328014 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255328011} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eb936a4576d8f9741b8d914d47f3ccce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &255328015 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 255328011} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &270011389 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 270011390} + - component: {fileID: 270011393} + - component: {fileID: 270011392} + - component: {fileID: 270011391} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &270011390 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 270011389} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 25.409203, y: 5, z: -25.378319} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &270011391 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 270011389} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &270011392 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 270011389} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &270011393 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 270011389} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &272993262 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 272993263} + - component: {fileID: 272993266} + - component: {fileID: 272993265} + - component: {fileID: 272993264} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &272993263 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272993262} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.5911446, y: 5, z: -5.378292} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 16 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &272993264 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272993262} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &272993265 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272993262} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &272993266 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272993262} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &302678001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 302678002} + - component: {fileID: 302678005} + - component: {fileID: 302678004} + - component: {fileID: 302678003} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &302678002 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302678001} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &302678003 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302678001} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &302678004 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302678001} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3aa8708b27bfe524b8280cdc746690d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &302678005 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 302678001} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &313405793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 313405794} + - component: {fileID: 313405797} + - component: {fileID: 313405796} + - component: {fileID: 313405795} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &313405794 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 313405793} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &313405795 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 313405793} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &313405796 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 313405793} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e2370f782aa1d374a8b4b05c11d259ea, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &313405797 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 313405793} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &318859473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 318859474} + - component: {fileID: 318859477} + - component: {fileID: 318859476} + - component: {fileID: 318859475} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &318859474 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318859473} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &318859475 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318859473} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &318859476 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318859473} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 391d11fb65b61014eb313e127073582f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &318859477 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 318859473} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &321967303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 321967304} + - component: {fileID: 321967307} + - component: {fileID: 321967306} + - component: {fileID: 321967305} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &321967304 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321967303} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.9, y: 1, z: 4.99} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &321967305 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321967303} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &321967306 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321967303} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1a9e66cbf3543a44cb2cf068585f07d4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &321967307 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321967303} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &327681192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 327681193} + - component: {fileID: 327681196} + - component: {fileID: 327681195} + - component: {fileID: 327681194} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &327681193 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327681192} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &327681194 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327681192} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &327681195 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327681192} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 959bef68856013d4da4cbe9176c989c0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &327681196 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 327681192} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &329062659 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 329062660} + - component: {fileID: 329062663} + - component: {fileID: 329062662} + - component: {fileID: 329062661} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &329062660 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329062659} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 11, y: 1, z: -21.1} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &329062661 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329062659} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &329062662 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329062659} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 959bef68856013d4da4cbe9176c989c0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &329062663 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 329062659} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &438367599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 438367600} + - component: {fileID: 438367603} + - component: {fileID: 438367602} + - component: {fileID: 438367601} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &438367600 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438367599} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &438367601 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438367599} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &438367602 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438367599} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 40702ed620cf055428c35adf00a2c9b1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &438367603 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438367599} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &438786021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 438786022} + - component: {fileID: 438786025} + - component: {fileID: 438786024} + - component: {fileID: 438786023} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &438786022 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438786021} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &438786023 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438786021} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &438786024 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438786021} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 40ebbdf2c7a17d342843431f58d3e892, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &438786025 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438786021} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &443702881 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 443702882} + - component: {fileID: 443702885} + - component: {fileID: 443702884} + - component: {fileID: 443702883} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &443702882 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443702881} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15.408997, y: 5, z: 4.621317} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &443702883 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443702881} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &443702884 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443702881} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &443702885 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443702881} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &447687833 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 447687834} + - component: {fileID: 447687837} + - component: {fileID: 447687836} + - component: {fileID: 447687835} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &447687834 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687833} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &447687835 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687833} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &447687836 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687833} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e0e8a571ef6fce34890952889b35afda, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &447687837 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 447687833} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &453620208 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 453620209} + - component: {fileID: 453620212} + - component: {fileID: 453620211} + - component: {fileID: 453620210} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &453620209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453620208} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &453620210 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453620208} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &453620211 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453620208} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3aa8708b27bfe524b8280cdc746690d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &453620212 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453620208} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &458135380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 458135381} + m_Layer: 0 + m_Name: BlueLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &458135381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458135380} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5, y: 1, z: -27.5} + m_LocalScale: {x: 1, y: 5, z: 5} + m_Children: + - {fileID: 589402172} + - {fileID: 21585613} + - {fileID: 2062266999} + - {fileID: 1082562862} + - {fileID: 447687834} + - {fileID: 807646877} + - {fileID: 1431449404} + - {fileID: 1785045551} + - {fileID: 1915907913} + - {fileID: 318859474} + - {fileID: 1075946076} + - {fileID: 1263982321} + - {fileID: 717832010} + - {fileID: 453620209} + - {fileID: 515373178} + - {fileID: 302678002} + m_Father: {fileID: 1414672540} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &493319998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 493319999} + - component: {fileID: 493320002} + - component: {fileID: 493320001} + - component: {fileID: 493320000} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &493319999 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 493319998} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &493320000 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 493319998} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &493320001 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 493319998} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 959bef68856013d4da4cbe9176c989c0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &493320002 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 493319998} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &501916645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 501916646} + - component: {fileID: 501916649} + - component: {fileID: 501916648} + - component: {fileID: 501916647} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &501916646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 501916645} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.68, y: 1, z: -26.6} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &501916647 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 501916645} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &501916648 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 501916645} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 467db2a28dc1c6a45b450dc6d124de59, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &501916649 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 501916645} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &515373177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 515373178} + - component: {fileID: 515373181} + - component: {fileID: 515373180} + - component: {fileID: 515373179} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &515373178 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515373177} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &515373179 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515373177} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &515373180 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515373177} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3aa8708b27bfe524b8280cdc746690d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &515373181 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 515373177} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &525983386 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 525983387} + - component: {fileID: 525983390} + - component: {fileID: 525983389} + - component: {fileID: 525983388} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &525983387 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 525983386} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &525983388 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 525983386} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &525983389 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 525983386} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 13516cfdf366d2542bc2fa983b6f803a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &525983390 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 525983386} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &538622161 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 538622162} + - component: {fileID: 538622165} + - component: {fileID: 538622164} + - component: {fileID: 538622163} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &538622162 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538622161} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &538622163 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538622161} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &538622164 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538622161} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 01d51756b98901e41956185e673e6f18, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &538622165 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538622161} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &573249625 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 573249626} + m_Layer: 0 + m_Name: GroundContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &573249626 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 573249625} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -9, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 889809274} + - {fileID: 1664670030} + - {fileID: 1217244723} + - {fileID: 15163512} + - {fileID: 657724129} + - {fileID: 1707078778} + - {fileID: 1506410880} + - {fileID: 978999654} + - {fileID: 2081968939} + - {fileID: 1022928699} + - {fileID: 132108985} + - {fileID: 443702882} + - {fileID: 602218394} + - {fileID: 127460107} + - {fileID: 270011390} + - {fileID: 1792803181} + - {fileID: 272993263} + - {fileID: 1322134316} + - {fileID: 675899271} + - {fileID: 776288907} + - {fileID: 1911431236} + - {fileID: 1844965817} + - {fileID: 701931070} + - {fileID: 651161170} + m_Father: {fileID: 1414672540} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &589402171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 589402172} + - component: {fileID: 589402175} + - component: {fileID: 589402174} + - component: {fileID: 589402173} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &589402172 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589402171} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &589402173 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589402171} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &589402174 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589402171} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 594480777cec0fa489126aeb2273ecbc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &589402175 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589402171} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &602218393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 602218394} + - component: {fileID: 602218397} + - component: {fileID: 602218396} + - component: {fileID: 602218395} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &602218394 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 602218393} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 25.409252, y: 5, z: -15.378012} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &602218395 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 602218393} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &602218396 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 602218393} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &602218397 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 602218393} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &646196527 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 646196528} + - component: {fileID: 646196531} + - component: {fileID: 646196530} + - component: {fileID: 646196529} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &646196528 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646196527} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &646196529 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646196527} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &646196530 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646196527} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e2370f782aa1d374a8b4b05c11d259ea, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &646196531 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646196527} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &647187617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 647187618} + - component: {fileID: 647187621} + - component: {fileID: 647187620} + - component: {fileID: 647187619} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &647187618 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 647187617} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &647187619 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 647187617} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &647187620 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 647187617} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 40ebbdf2c7a17d342843431f58d3e892, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &647187621 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 647187617} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &651161169 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 651161170} + - component: {fileID: 651161173} + - component: {fileID: 651161172} + - component: {fileID: 651161171} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &651161170 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651161169} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.591152, y: 5, z: 4.6213255} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 23 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &651161171 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651161169} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &651161172 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651161169} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &651161173 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651161169} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &657724128 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 657724129} + - component: {fileID: 657724132} + - component: {fileID: 657724131} + - component: {fileID: 657724130} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &657724129 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 657724128} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4091516, y: 5, z: -25.378307} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &657724130 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 657724128} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &657724131 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 657724128} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &657724132 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 657724128} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &675899270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 675899271} + - component: {fileID: 675899274} + - component: {fileID: 675899273} + - component: {fileID: 675899272} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &675899271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675899270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -14.590996, y: 5, z: -25.378298} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 18 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &675899272 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675899270} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &675899273 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675899270} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &675899274 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675899270} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &678088072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 678088073} + - component: {fileID: 678088076} + - component: {fileID: 678088075} + - component: {fileID: 678088074} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &678088073 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678088072} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 13, y: 1, z: -0.46} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &678088074 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678088072} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &678088075 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678088072} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e2370f782aa1d374a8b4b05c11d259ea, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &678088076 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678088072} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &701931069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 701931070} + - component: {fileID: 701931073} + - component: {fileID: 701931072} + - component: {fileID: 701931071} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &701931070 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701931069} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -14.591, y: 5, z: 4.621318} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 22 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &701931071 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701931069} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &701931072 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701931069} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &701931073 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701931069} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &717832009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 717832010} + - component: {fileID: 717832013} + - component: {fileID: 717832012} + - component: {fileID: 717832011} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &717832010 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 717832009} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &717832011 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 717832009} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &717832012 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 717832009} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3aa8708b27bfe524b8280cdc746690d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &717832013 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 717832009} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &742818967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 742818968} + - component: {fileID: 742818971} + - component: {fileID: 742818970} + - component: {fileID: 742818969} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &742818968 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742818967} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &742818969 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742818967} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &742818970 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742818967} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1a9e66cbf3543a44cb2cf068585f07d4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &742818971 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742818967} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &747184779 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 747184780} + - component: {fileID: 747184783} + - component: {fileID: 747184782} + - component: {fileID: 747184781} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &747184780 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747184779} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &747184781 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747184779} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &747184782 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747184779} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 467db2a28dc1c6a45b450dc6d124de59, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &747184783 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 747184779} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &769013055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 769013056} + - component: {fileID: 769013059} + - component: {fileID: 769013058} + - component: {fileID: 769013057} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &769013056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769013055} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &769013057 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769013055} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &769013058 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769013055} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1a9e66cbf3543a44cb2cf068585f07d4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &769013059 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 769013055} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &776288906 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 776288907} + - component: {fileID: 776288910} + - component: {fileID: 776288909} + - component: {fileID: 776288908} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &776288907 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 776288906} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.5911446, y: 5, z: -25.37829} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 19 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &776288908 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 776288906} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &776288909 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 776288906} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &776288910 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 776288906} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &795210989 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 795210990} + - component: {fileID: 795210993} + - component: {fileID: 795210992} + - component: {fileID: 795210991} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &795210990 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795210989} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &795210991 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795210989} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &795210992 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795210989} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e2370f782aa1d374a8b4b05c11d259ea, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &795210993 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795210989} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &799713072 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 799713073} + m_Layer: 0 + m_Name: DarkGreyLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &799713073 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 799713072} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5, y: 1, z: 0} + m_LocalScale: {x: 1, y: 5, z: 5} + m_Children: + - {fileID: 915549760} + - {fileID: 313405794} + - {fileID: 646196528} + - {fileID: 795210990} + - {fileID: 1144602170} + - {fileID: 525983387} + - {fileID: 1442581954} + - {fileID: 169346756} + - {fileID: 1733112107} + - {fileID: 25278630} + - {fileID: 2129623074} + - {fileID: 1870010877} + - {fileID: 1932948552} + - {fileID: 1625833056} + - {fileID: 203680800} + - {fileID: 912026639} + m_Father: {fileID: 1414672540} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &807646876 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 807646877} + - component: {fileID: 807646880} + - component: {fileID: 807646879} + - component: {fileID: 807646878} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &807646877 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807646876} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &807646878 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807646876} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &807646879 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807646876} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e0e8a571ef6fce34890952889b35afda, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &807646880 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 807646876} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &809703656 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 809703657} + - component: {fileID: 809703660} + - component: {fileID: 809703659} + - component: {fileID: 809703658} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &809703657 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809703656} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &809703658 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809703656} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &809703659 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809703656} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b6acb67784ba02a46b350cd11c745e4c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &809703660 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 809703656} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &814563544 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 814563545} + - component: {fileID: 814563548} + - component: {fileID: 814563547} + - component: {fileID: 814563546} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &814563545 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 814563544} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &814563546 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 814563544} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &814563547 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 814563544} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 959bef68856013d4da4cbe9176c989c0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &814563548 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 814563544} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &819154798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 819154799} + - component: {fileID: 819154802} + - component: {fileID: 819154801} + - component: {fileID: 819154800} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &819154799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819154798} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &819154800 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819154798} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &819154801 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819154798} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 54ac4fc9dfd37074aab2e6bff0c2e6ca, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &819154802 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819154798} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &849121188 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 849121189} + - component: {fileID: 849121192} + - component: {fileID: 849121191} + - component: {fileID: 849121190} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &849121189 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849121188} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &849121190 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849121188} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &849121191 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849121188} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 01d51756b98901e41956185e673e6f18, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &849121192 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849121188} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &886079739 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 886079740} + - component: {fileID: 886079743} + - component: {fileID: 886079742} + - component: {fileID: 886079741} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &886079740 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886079739} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7.05, y: 1, z: -16.48} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &886079741 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886079739} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &886079742 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886079739} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d642a4ab722ef8a46af4d261e5227b0c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &886079743 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886079739} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &889809270 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 889809274} + - component: {fileID: 889809273} + - component: {fileID: 889809272} + - component: {fileID: 889809271} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!65 &889809271 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 889809270} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &889809272 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 889809270} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &889809273 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 889809270} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &889809274 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 889809270} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4091516, y: 5, z: -5.3783083} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &906980151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 906980152} + - component: {fileID: 906980155} + - component: {fileID: 906980154} + - component: {fileID: 906980153} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &906980152 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906980151} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &906980153 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906980151} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &906980154 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906980151} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b6acb67784ba02a46b350cd11c745e4c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &906980155 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906980151} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &912026638 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 912026639} + - component: {fileID: 912026642} + - component: {fileID: 912026641} + - component: {fileID: 912026640} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &912026639 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 912026638} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &912026640 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 912026638} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &912026641 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 912026638} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2a42e638cd366184aad3203b2732b2e2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &912026642 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 912026638} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &915549759 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 915549760} + - component: {fileID: 915549763} + - component: {fileID: 915549762} + - component: {fileID: 915549761} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &915549760 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 915549759} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &915549761 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 915549759} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &915549762 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 915549759} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e2370f782aa1d374a8b4b05c11d259ea, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &915549763 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 915549759} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &937026786 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 937026787} + - component: {fileID: 937026790} + - component: {fileID: 937026789} + - component: {fileID: 937026788} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &937026787 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937026786} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &937026788 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937026786} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &937026789 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937026786} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 01d51756b98901e41956185e673e6f18, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &937026790 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 937026786} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &954191392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 954191393} + - component: {fileID: 954191396} + - component: {fileID: 954191395} + - component: {fileID: 954191394} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &954191393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954191392} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9.5, y: 1, z: -10.5} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &954191394 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954191392} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &954191395 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954191392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 3aa8708b27bfe524b8280cdc746690d3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &954191396 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 954191392} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &967954365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 967954366} + - component: {fileID: 967954369} + - component: {fileID: 967954368} + - component: {fileID: 967954367} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &967954366 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 967954365} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &967954367 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 967954365} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &967954368 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 967954365} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 816fe783c3103644790f46de0cbeb161, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &967954369 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 967954365} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &978999653 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 978999654} + - component: {fileID: 978999657} + - component: {fileID: 978999656} + - component: {fileID: 978999655} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &978999654 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978999653} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15.409049, y: 5, z: -35.37799} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &978999655 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978999653} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &978999656 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978999653} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &978999657 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978999653} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &980567614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 980567615} + - component: {fileID: 980567618} + - component: {fileID: 980567617} + - component: {fileID: 980567616} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &980567615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980567614} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &980567616 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980567614} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &980567617 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980567614} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9d99964e7e8afe34b8ee7943eabcd19e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &980567618 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 980567614} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &985885344 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 985885345} + - component: {fileID: 985885348} + - component: {fileID: 985885347} + - component: {fileID: 985885346} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &985885345 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985885344} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &985885346 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985885344} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &985885347 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985885344} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 816fe783c3103644790f46de0cbeb161, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &985885348 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 985885344} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1007434127 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1007434128} + - component: {fileID: 1007434131} + - component: {fileID: 1007434130} + - component: {fileID: 1007434129} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1007434128 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007434127} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1007434129 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007434127} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1007434130 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007434127} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b6acb67784ba02a46b350cd11c745e4c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1007434131 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1007434127} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1022928698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1022928699} + - component: {fileID: 1022928702} + - component: {fileID: 1022928701} + - component: {fileID: 1022928700} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1022928699 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022928698} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15.408949, y: 5, z: 14.621012} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1022928700 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022928698} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1022928701 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022928698} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1022928702 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1022928698} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1048244725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1048244726} + - component: {fileID: 1048244729} + - component: {fileID: 1048244728} + - component: {fileID: 1048244727} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1048244726 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1048244725} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 8.26, y: 1, z: -32.47} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1048244727 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1048244725} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1048244728 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1048244725} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2a42e638cd366184aad3203b2732b2e2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1048244729 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1048244725} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1049158640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1049158641} + - component: {fileID: 1049158644} + - component: {fileID: 1049158643} + - component: {fileID: 1049158642} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1049158641 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1049158640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1049158642 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1049158640} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1049158643 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1049158640} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9d99964e7e8afe34b8ee7943eabcd19e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1049158644 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1049158640} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1052223607 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1052223608} + - component: {fileID: 1052223611} + - component: {fileID: 1052223610} + - component: {fileID: 1052223609} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1052223608 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1052223607} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1052223609 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1052223607} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1052223610 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1052223607} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: b6acb67784ba02a46b350cd11c745e4c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1052223611 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1052223607} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1059405916 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1059405917} + - component: {fileID: 1059405920} + - component: {fileID: 1059405919} + - component: {fileID: 1059405918} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1059405917 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1059405916} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1059405918 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1059405916} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1059405919 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1059405916} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 959bef68856013d4da4cbe9176c989c0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1059405920 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1059405916} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1075946075 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1075946076} + - component: {fileID: 1075946079} + - component: {fileID: 1075946078} + - component: {fileID: 1075946077} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1075946076 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075946075} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1075946077 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075946075} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1075946078 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075946075} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 391d11fb65b61014eb313e127073582f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1075946079 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1075946075} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1082562861 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1082562862} + - component: {fileID: 1082562865} + - component: {fileID: 1082562864} + - component: {fileID: 1082562863} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1082562862 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1082562861} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1082562863 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1082562861} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1082562864 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1082562861} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 594480777cec0fa489126aeb2273ecbc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1082562865 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1082562861} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1090919966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1090919967} + - component: {fileID: 1090919970} + - component: {fileID: 1090919969} + - component: {fileID: 1090919968} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1090919967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090919966} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1090919968 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090919966} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1090919969 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090919966} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 54ac4fc9dfd37074aab2e6bff0c2e6ca, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1090919970 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1090919966} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1144602169 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1144602170} + - component: {fileID: 1144602173} + - component: {fileID: 1144602172} + - component: {fileID: 1144602171} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1144602170 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144602169} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1144602171 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144602169} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1144602172 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144602169} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 13516cfdf366d2542bc2fa983b6f803a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1144602173 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1144602169} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1217244722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1217244723} + - component: {fileID: 1217244726} + - component: {fileID: 1217244725} + - component: {fileID: 1217244724} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1217244723 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1217244722} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4092, y: 5, z: -15.378} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1217244724 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1217244722} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1217244725 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1217244722} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1217244726 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1217244722} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1217456541 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1217456542} + m_Layer: 0 + m_Name: YellowLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1217456542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1217456541} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5, y: 1, z: -16.5} + m_LocalScale: {x: 1, y: 5, z: 5} + m_Children: + - {fileID: 1007434128} + - {fileID: 906980152} + - {fileID: 809703657} + - {fileID: 1052223608} + - {fileID: 1238934673} + - {fileID: 2009765291} + - {fileID: 1049158641} + - {fileID: 980567615} + - {fileID: 819154799} + - {fileID: 1090919967} + - {fileID: 1539529054} + - {fileID: 1926790597} + - {fileID: 1475132636} + - {fileID: 113328021} + - {fileID: 1288823280} + - {fileID: 1299218574} + m_Father: {fileID: 1414672540} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1238934672 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1238934673} + - component: {fileID: 1238934676} + - component: {fileID: 1238934675} + - component: {fileID: 1238934674} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1238934673 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238934672} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1238934674 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238934672} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1238934675 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238934672} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9d99964e7e8afe34b8ee7943eabcd19e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1238934676 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1238934672} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1255633334 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1255633335} + - component: {fileID: 1255633338} + - component: {fileID: 1255633337} + - component: {fileID: 1255633336} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1255633335 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255633334} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1255633336 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255633334} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1255633337 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255633334} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 467db2a28dc1c6a45b450dc6d124de59, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1255633338 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255633334} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1263982320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1263982321} + - component: {fileID: 1263982324} + - component: {fileID: 1263982323} + - component: {fileID: 1263982322} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1263982321 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263982320} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1263982322 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263982320} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1263982323 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263982320} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 391d11fb65b61014eb313e127073582f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1263982324 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1263982320} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1266064074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1266064075} + - component: {fileID: 1266064078} + - component: {fileID: 1266064077} + - component: {fileID: 1266064076} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1266064075 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266064074} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1266064076 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266064074} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1266064077 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266064074} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 40ebbdf2c7a17d342843431f58d3e892, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1266064078 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1266064074} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1288823279 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1288823280} + - component: {fileID: 1288823283} + - component: {fileID: 1288823282} + - component: {fileID: 1288823281} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1288823280 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288823279} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 14 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1288823281 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288823279} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1288823282 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288823279} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d642a4ab722ef8a46af4d261e5227b0c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1288823283 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1288823279} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1299218573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1299218574} + - component: {fileID: 1299218577} + - component: {fileID: 1299218576} + - component: {fileID: 1299218575} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1299218574 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299218573} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1299218575 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299218573} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1299218576 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299218573} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d642a4ab722ef8a46af4d261e5227b0c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1299218577 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1299218573} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1322134315 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1322134316} + - component: {fileID: 1322134319} + - component: {fileID: 1322134318} + - component: {fileID: 1322134317} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1322134316 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322134315} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.591099, y: 5, z: -15.377985} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 17 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1322134317 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322134315} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1322134318 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322134315} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1322134319 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322134315} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1349838711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1349838712} + - component: {fileID: 1349838715} + - component: {fileID: 1349838714} + - component: {fileID: 1349838713} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1349838712 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349838711} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1349838713 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349838711} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1349838714 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349838711} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d19e7892e1d87fb4fb8433ec887fb8cc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1349838715 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1349838711} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1372003626 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1372003627} + - component: {fileID: 1372003630} + - component: {fileID: 1372003629} + - component: {fileID: 1372003628} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1372003627 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372003626} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1372003628 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372003626} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1372003629 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372003626} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 50ff9811d84ffeb42b11f0d57157a346, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1372003630 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1372003626} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1414672539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1414672540} + m_Layer: 0 + m_Name: Scene ---------------------------------------------- + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1414672540 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1414672539} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1581980889} + - {fileID: 1924988971} + - {fileID: 573249626} + - {fileID: 799713073} + - {fileID: 1924287292} + - {fileID: 5366878} + - {fileID: 1217456542} + - {fileID: 170923062} + - {fileID: 458135381} + - {fileID: 1714459027} + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1431449403 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1431449404} + - component: {fileID: 1431449407} + - component: {fileID: 1431449406} + - component: {fileID: 1431449405} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1431449404 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431449403} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1431449405 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431449403} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1431449406 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431449403} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e0e8a571ef6fce34890952889b35afda, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1431449407 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431449403} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1441940962 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1441940966} + - component: {fileID: 1441940965} + - component: {fileID: 1441940964} + - component: {fileID: 1441940963} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1441940963 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441940962} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1441940964 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441940962} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1441940965 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441940962} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1441940966 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1441940962} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 8, y: 1, z: -4.08} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1442581953 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1442581954} + - component: {fileID: 1442581957} + - component: {fileID: 1442581956} + - component: {fileID: 1442581955} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1442581954 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442581953} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1442581955 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442581953} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1442581956 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442581953} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 13516cfdf366d2542bc2fa983b6f803a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1442581957 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1442581953} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1457823751 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1457823752} + - component: {fileID: 1457823755} + - component: {fileID: 1457823754} + - component: {fileID: 1457823753} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1457823752 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457823751} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 4.15, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1457823753 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457823751} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1457823754 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457823751} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 816fe783c3103644790f46de0cbeb161, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1457823755 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457823751} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1463524055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1463524056} + - component: {fileID: 1463524057} + m_Layer: 0 + m_Name: PostProcessVolume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1463524056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463524055} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.1510425, y: 10.916916, z: 5.314891} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1978446799} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1463524057 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463524055} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: 377b03b64b8e4ea45bd7f79c650610b0, type: 2} + isGlobal: 1 + blendDistance: 0 + weight: 1 + priority: 0 +--- !u!1 &1475132635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1475132636} + - component: {fileID: 1475132639} + - component: {fileID: 1475132638} + - component: {fileID: 1475132637} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1475132636 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1475132635} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1475132637 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1475132635} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1475132638 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1475132635} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d642a4ab722ef8a46af4d261e5227b0c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1475132639 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1475132635} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1506410879 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1506410880} + - component: {fileID: 1506410883} + - component: {fileID: 1506410882} + - component: {fileID: 1506410881} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1506410880 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506410879} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4092, y: 5, z: -35.378} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1506410881 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506410879} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1506410882 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506410879} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1506410883 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1506410879} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1517896107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1517896108} + - component: {fileID: 1517896111} + - component: {fileID: 1517896110} + - component: {fileID: 1517896109} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1517896108 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517896107} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1517896109 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517896107} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1517896110 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517896107} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 06b0ed03b4a01634c8b5eb55bc95df8d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1517896111 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1517896107} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1539529053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1539529054} + - component: {fileID: 1539529057} + - component: {fileID: 1539529056} + - component: {fileID: 1539529055} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1539529054 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539529053} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1539529055 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539529053} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1539529056 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539529053} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 54ac4fc9dfd37074aab2e6bff0c2e6ca, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1539529057 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539529053} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1581980885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1581980889} + - component: {fileID: 1581980888} + - component: {fileID: 1581980887} + - component: {fileID: 1581980886} + m_Layer: 0 + m_Name: Beam + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1581980886 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1581980885} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1581980887 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1581980885} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: fc636806db6f2654d970ed32802db8be, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1581980888 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1581980885} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1581980889 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1581980885} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5, y: 13.5, z: 4} + m_LocalScale: {x: 1.5, y: 25, z: 0.2} + m_Children: [] + m_Father: {fileID: 1414672540} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1583999767 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1583999768} + - component: {fileID: 1583999771} + - component: {fileID: 1583999770} + - component: {fileID: 1583999769} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1583999768 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583999767} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1583999769 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583999767} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1583999770 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583999767} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: adc4603b7be471c479ef63c42f19aa72, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1583999771 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583999767} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1602844935 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1602844936} + - component: {fileID: 1602844939} + - component: {fileID: 1602844938} + - component: {fileID: 1602844937} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1602844936 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602844935} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1602844937 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602844935} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1602844938 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602844935} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d19e7892e1d87fb4fb8433ec887fb8cc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1602844939 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1602844935} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1625833055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1625833056} + - component: {fileID: 1625833059} + - component: {fileID: 1625833058} + - component: {fileID: 1625833057} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1625833056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625833055} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1625833057 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625833055} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1625833058 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625833055} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2a42e638cd366184aad3203b2732b2e2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1625833059 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625833055} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1664670029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1664670030} + - component: {fileID: 1664670033} + - component: {fileID: 1664670032} + - component: {fileID: 1664670031} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1664670030 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1664670029} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15.409, y: 5, z: -5.3783} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1664670031 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1664670029} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1664670032 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1664670029} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1664670033 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1664670029} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1696378787 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1696378788} + - component: {fileID: 1696378791} + - component: {fileID: 1696378790} + - component: {fileID: 1696378789} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1696378788 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696378787} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1696378789 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696378787} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1696378790 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696378787} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 40702ed620cf055428c35adf00a2c9b1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1696378791 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696378787} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1707078777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1707078778} + - component: {fileID: 1707078781} + - component: {fileID: 1707078780} + - component: {fileID: 1707078779} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1707078778 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707078777} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 15.409, y: 5, z: -25.378298} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1707078779 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707078777} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1707078780 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707078777} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1707078781 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1707078777} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1714459026 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1714459027} + m_Layer: 0 + m_Name: GroundCubes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1714459027 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1714459026} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 954191393} + - {fileID: 886079740} + - {fileID: 329062660} + - {fileID: 501916646} + - {fileID: 1048244726} + - {fileID: 76373826} + - {fileID: 1441940966} + - {fileID: 321967304} + - {fileID: 2051705509} + - {fileID: 678088073} + m_Father: {fileID: 1414672540} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1716661680 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1716661682} + - component: {fileID: 1716661681} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1716661681 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1716661680} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 0.8 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: 2 + m_CustomResolution: -1 + m_Strength: 0.852 + m_Bias: 0.029 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1716661682 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1716661680} + m_LocalRotation: {x: 0.3931032, y: -0.33275163, z: 0.15516461, w: 0.84301263} + m_LocalPosition: {x: 6.02, y: -13.36, z: -21.98} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1891373113} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 50, y: -43.08, z: 0} +--- !u!1 &1733112106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1733112107} + - component: {fileID: 1733112110} + - component: {fileID: 1733112109} + - component: {fileID: 1733112108} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1733112107 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733112106} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1733112108 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733112106} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1733112109 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733112106} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: db11353047c997f46a4760754f00c788, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1733112110 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1733112106} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1760898306 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1760898307} + - component: {fileID: 1760898310} + - component: {fileID: 1760898309} + - component: {fileID: 1760898308} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1760898307 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760898306} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1760898308 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760898306} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1760898309 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760898306} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eb936a4576d8f9741b8d914d47f3ccce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1760898310 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760898306} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1767139610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1767139611} + - component: {fileID: 1767139614} + - component: {fileID: 1767139613} + - component: {fileID: 1767139612} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1767139611 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1767139610} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 13 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1767139612 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1767139610} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1767139613 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1767139610} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 816fe783c3103644790f46de0cbeb161, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1767139614 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1767139610} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1785045550 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1785045551} + - component: {fileID: 1785045554} + - component: {fileID: 1785045553} + - component: {fileID: 1785045552} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1785045551 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785045550} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1785045552 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785045550} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1785045553 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785045550} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e0e8a571ef6fce34890952889b35afda, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1785045554 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785045550} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1792803180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1792803181} + - component: {fileID: 1792803184} + - component: {fileID: 1792803183} + - component: {fileID: 1792803182} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1792803181 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1792803180} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 25.409199, y: 5, z: 4.621298} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 15 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1792803182 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1792803180} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1792803183 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1792803180} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1792803184 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1792803180} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1802159685 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1802159686} + - component: {fileID: 1802159689} + - component: {fileID: 1802159688} + - component: {fileID: 1802159687} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1802159686 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802159685} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1802159687 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802159685} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1802159688 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802159685} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: eb936a4576d8f9741b8d914d47f3ccce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1802159689 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802159685} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1840613400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1840613401} + - component: {fileID: 1840613404} + - component: {fileID: 1840613403} + - component: {fileID: 1840613402} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1840613401 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1840613400} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.85, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1840613402 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1840613400} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1840613403 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1840613400} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 1a9e66cbf3543a44cb2cf068585f07d4, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1840613404 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1840613400} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1841075915 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1841075916} + - component: {fileID: 1841075919} + - component: {fileID: 1841075918} + - component: {fileID: 1841075917} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1841075916 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841075915} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1841075917 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841075915} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1841075918 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841075915} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: adc4603b7be471c479ef63c42f19aa72, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1841075919 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1841075915} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1844965816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1844965817} + - component: {fileID: 1844965820} + - component: {fileID: 1844965819} + - component: {fileID: 1844965818} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1844965817 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844965816} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.591198, y: 5, z: 14.62102} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 21 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1844965818 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844965816} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1844965819 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844965816} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1844965820 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844965816} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1870010876 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1870010877} + - component: {fileID: 1870010880} + - component: {fileID: 1870010879} + - component: {fileID: 1870010878} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1870010877 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870010876} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1870010878 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870010876} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1870010879 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870010876} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: db11353047c997f46a4760754f00c788, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1870010880 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1870010876} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1891373112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1891373113} + m_Layer: 0 + m_Name: Lights ---------------------------------------------- + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1891373113 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1891373112} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1716661682} + - {fileID: 192097513} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1911431235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1911431236} + - component: {fileID: 1911431239} + - component: {fileID: 1911431238} + - component: {fileID: 1911431237} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &1911431236 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1911431235} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.591099, y: 5, z: -35.377983} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 20 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1911431237 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1911431235} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1911431238 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1911431235} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1911431239 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1911431235} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1915907912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1915907913} + - component: {fileID: 1915907916} + - component: {fileID: 1915907915} + - component: {fileID: 1915907914} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1915907913 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915907912} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1915907914 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915907912} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1915907915 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915907912} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 391d11fb65b61014eb313e127073582f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1915907916 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915907912} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1919042798 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1919042799} + - component: {fileID: 1919042802} + - component: {fileID: 1919042801} + - component: {fileID: 1919042800} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1919042799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919042798} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1919042800 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919042798} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1919042801 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919042798} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 40702ed620cf055428c35adf00a2c9b1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1919042802 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919042798} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1924287291 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1924287292} + m_Layer: 0 + m_Name: LightGreyLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1924287292 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924287291} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5, y: 1, z: -5.5} + m_LocalScale: {x: 1, y: 5, z: 5} + m_Children: + - {fileID: 2122860589} + - {fileID: 849121189} + - {fileID: 538622162} + - {fileID: 937026787} + - {fileID: 2122310884} + - {fileID: 1583999768} + - {fileID: 1841075916} + - {fileID: 2131396029} + - {fileID: 1976292922} + - {fileID: 1517896108} + - {fileID: 140784980} + - {fileID: 2050999619} + - {fileID: 2037734699} + - {fileID: 1372003627} + - {fileID: 43788216} + - {fileID: 30031375} + m_Father: {fileID: 1414672540} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1924988967 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1924988971} + - component: {fileID: 1924988970} + - component: {fileID: 1924988969} + - component: {fileID: 1924988968} + m_Layer: 0 + m_Name: Beam + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &1924988968 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924988967} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1924988969 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924988967} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: fc636806db6f2654d970ed32802db8be, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1924988970 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924988967} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1924988971 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1924988967} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2.5, y: 13.5, z: -31.5} + m_LocalScale: {x: 1.5, y: 25, z: 0.2} + m_Children: [] + m_Father: {fileID: 1414672540} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1926790596 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1926790597} + - component: {fileID: 1926790600} + - component: {fileID: 1926790599} + - component: {fileID: 1926790598} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1926790597 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926790596} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1926790598 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926790596} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1926790599 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926790596} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 54ac4fc9dfd37074aab2e6bff0c2e6ca, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1926790600 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926790596} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1932948551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1932948552} + - component: {fileID: 1932948555} + - component: {fileID: 1932948554} + - component: {fileID: 1932948553} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1932948552 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1932948551} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1932948553 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1932948551} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1932948554 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1932948551} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 2a42e638cd366184aad3203b2732b2e2, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1932948555 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1932948551} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1976292921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1976292922} + - component: {fileID: 1976292925} + - component: {fileID: 1976292924} + - component: {fileID: 1976292923} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1976292922 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1976292921} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1976292923 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1976292921} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1976292924 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1976292921} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 06b0ed03b4a01634c8b5eb55bc95df8d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1976292925 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1976292921} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1978446795 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1978446799} + - component: {fileID: 1978446798} + - component: {fileID: 1978446797} + - component: {fileID: 1978446796} + - component: {fileID: 1978446800} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1978446796 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978446795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} + m_Name: + m_EditorClassIdentifier: + volumeTrigger: {fileID: 1978446799} + volumeLayer: + serializedVersion: 2 + m_Bits: 4294967295 + stopNaNPropagation: 1 + finalBlitToCameraTarget: 1 + antialiasingMode: 1 + temporalAntialiasing: + jitterSpread: 0.75 + sharpness: 0.25 + stationaryBlending: 0.95 + motionBlending: 0.85 + subpixelMorphologicalAntialiasing: + quality: 2 + fastApproximateAntialiasing: + fastMode: 0 + keepAlpha: 0 + fog: + enabled: 1 + excludeSkybox: 1 + debugLayer: + lightMeter: + width: 512 + height: 256 + showCurves: 1 + histogram: + width: 512 + height: 256 + channel: 3 + waveform: + exposure: 0.12 + height: 256 + vectorscope: + size: 256 + exposure: 0.12 + overlaySettings: + linearDepth: 0 + motionColorIntensity: 4 + motionGridSize: 64 + colorBlindnessType: 0 + colorBlindnessStrength: 1 + m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} + m_ShowToolkit: 0 + m_ShowCustomSorter: 0 + breakBeforeColorGrading: 0 + m_BeforeTransparentBundles: [] + m_BeforeStackBundles: [] + m_AfterStackBundles: [] +--- !u!81 &1978446797 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978446795} + m_Enabled: 1 +--- !u!20 &1978446798 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978446795} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 85 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1978446799 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978446795} + m_LocalRotation: {x: 0.05599913, y: -0.3819798, z: 0.023195596, w: 0.92218083} + m_LocalPosition: {x: 20.58, y: 15.47, z: -33.16} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1463524056} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 6.95, y: -45, z: 0} +--- !u!114 &1978446800 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1978446795} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d179f1ca35fc44c4fb760f847e59aa88, type: 3} + m_Name: + m_EditorClassIdentifier: + MovementSpeed: 10 + RunFactor: 4 + Acceleration: 5 + Deceleration: 5 + RotationSpeed: 40 + ActivateButton: 303 + HorizontalAxisName: Horizontal + VerticalAxisName: Vertical + UpButton: 32 + DownButton: 99 + ControlsModeSwitch: 109 + TimescaleModificationButton: 102 + RunButton: 304 + MouseSensitivity: 0.02 + MobileStickSensitivity: 2 + TimescaleModifier: 0.5 + AutoActivation: 1 + MovementEnabled: 1 + RotationEnabled: 1 + Active: 0 + TimeAltered: 0 + UseMobileControls: 0 + LeftStickContainer: {fileID: 0} + RightStickContainer: {fileID: 0} + LeftStick: {fileID: 0} + RightStick: {fileID: 0} +--- !u!1 &2009765290 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2009765291} + - component: {fileID: 2009765294} + - component: {fileID: 2009765293} + - component: {fileID: 2009765292} + m_Layer: 0 + m_Name: YellowCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2009765291 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009765290} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1217456542} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2009765292 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009765290} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2009765293 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009765290} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 9d99964e7e8afe34b8ee7943eabcd19e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2009765294 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2009765290} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2037734698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2037734699} + - component: {fileID: 2037734702} + - component: {fileID: 2037734701} + - component: {fileID: 2037734700} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2037734699 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037734698} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.65, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 12 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2037734700 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037734698} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2037734701 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037734698} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 50ff9811d84ffeb42b11f0d57157a346, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2037734702 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2037734698} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2050999618 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2050999619} + - component: {fileID: 2050999622} + - component: {fileID: 2050999621} + - component: {fileID: 2050999620} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2050999619 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2050999618} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 11 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2050999620 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2050999618} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2050999621 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2050999618} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 06b0ed03b4a01634c8b5eb55bc95df8d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2050999622 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2050999618} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2051705508 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2051705509} + - component: {fileID: 2051705512} + - component: {fileID: 2051705511} + - component: {fileID: 2051705510} + m_Layer: 0 + m_Name: GroundCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2051705509 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2051705508} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 11.5, y: 1, z: 12.18} + m_LocalScale: {x: 2, y: 2, z: 2} + m_Children: [] + m_Father: {fileID: 1714459027} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2051705510 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2051705508} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2051705511 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2051705508} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 54ac4fc9dfd37074aab2e6bff0c2e6ca, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2051705512 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2051705508} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2062266998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2062266999} + - component: {fileID: 2062267002} + - component: {fileID: 2062267001} + - component: {fileID: 2062267000} + m_Layer: 0 + m_Name: BlueCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2062266999 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062266998} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 458135381} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2062267000 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062266998} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2062267001 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062266998} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 594480777cec0fa489126aeb2273ecbc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2062267002 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062266998} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2078863052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2078863053} + - component: {fileID: 2078863056} + - component: {fileID: 2078863055} + - component: {fileID: 2078863054} + m_Layer: 0 + m_Name: RedCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2078863053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078863052} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 170923062} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2078863054 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078863052} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2078863055 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078863052} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 40702ed620cf055428c35adf00a2c9b1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2078863056 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078863052} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2081968938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2081968939} + - component: {fileID: 2081968942} + - component: {fileID: 2081968941} + - component: {fileID: 2081968940} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 4294967295 + m_IsActive: 1 +--- !u!4 &2081968939 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2081968938} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4091, y: 5, z: 14.621} + m_LocalScale: {x: 10, y: 8, z: 10} + m_Children: [] + m_Father: {fileID: 573249626} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2081968940 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2081968938} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2081968941 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2081968938} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 98f9943149e70e84f969f66047eb997f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2081968942 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2081968938} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2094037615 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2094037616} + - component: {fileID: 2094037619} + - component: {fileID: 2094037618} + - component: {fileID: 2094037617} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2094037616 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2094037615} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 2.55, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2094037617 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2094037615} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2094037618 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2094037615} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d19e7892e1d87fb4fb8433ec887fb8cc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2094037619 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2094037615} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2111398043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2111398044} + - component: {fileID: 2111398047} + - component: {fileID: 2111398046} + - component: {fileID: 2111398045} + m_Layer: 0 + m_Name: GreenCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2111398044 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111398043} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 5366878} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2111398045 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111398043} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2111398046 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111398043} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d19e7892e1d87fb4fb8433ec887fb8cc, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2111398047 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2111398043} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2122310883 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2122310884} + - component: {fileID: 2122310887} + - component: {fileID: 2122310886} + - component: {fileID: 2122310885} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2122310884 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2122310883} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.45, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2122310885 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2122310883} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2122310886 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2122310883} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: adc4603b7be471c479ef63c42f19aa72, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2122310887 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2122310883} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2122860588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2122860589} + - component: {fileID: 2122860592} + - component: {fileID: 2122860591} + - component: {fileID: 2122860590} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2122860589 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2122860588} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.35, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2122860590 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2122860588} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2122860591 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2122860588} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 01d51756b98901e41956185e673e6f18, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2122860592 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2122860588} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2129623073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2129623074} + - component: {fileID: 2129623077} + - component: {fileID: 2129623076} + - component: {fileID: 2129623075} + m_Layer: 0 + m_Name: DarkGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2129623074 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2129623073} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 3.05, z: 0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 799713073} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2129623075 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2129623073} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2129623076 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2129623073} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: db11353047c997f46a4760754f00c788, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2129623077 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2129623073} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2131396028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2131396029} + - component: {fileID: 2131396032} + - component: {fileID: 2131396031} + - component: {fileID: 2131396030} + m_Layer: 0 + m_Name: LightGreyCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2131396029 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2131396028} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.95, z: -0.25} + m_LocalScale: {x: 1, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 1924287292} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2131396030 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2131396028} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2131396031 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2131396028} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: adc4603b7be471c479ef63c42f19aa72, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &2131396032 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2131396028} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.unity.meta b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.unity.meta new file mode 100644 index 0000000..844b464 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 79c422b0924ecaa40b379d2fc48acf82 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/LightingData.asset b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/LightingData.asset new file mode 100644 index 0000000..dd597ff Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/LightingData.asset differ diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/LightingData.asset.meta b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/LightingData.asset.meta new file mode 100644 index 0000000..bb7ee89 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/LightingData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1549ce6eae3b775469134fe3df2b4efa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 112000000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/ReflectionProbe-0.exr b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/ReflectionProbe-0.exr new file mode 100644 index 0000000..091be5d Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/ReflectionProbe-0.exr differ diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/ReflectionProbe-0.exr.meta b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/ReflectionProbe-0.exr.meta new file mode 100644 index 0000000..e2a7290 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/MMPrototypeTexturesDemo/ReflectionProbe-0.exr.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 78fdbfa384338494882ac6d5b0fe58d6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 1 + seamlessCubemap: 1 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 0 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 2 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing.meta b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing.meta new file mode 100644 index 0000000..2ceb157 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74e87d9c2733d89489cf450ebde8c979 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing/MMPrototypeTexturesPPProfile.asset b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing/MMPrototypeTexturesPPProfile.asset new file mode 100644 index 0000000..911ef54 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing/MMPrototypeTexturesPPProfile.asset @@ -0,0 +1,225 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3590022287616366149 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b3f6f3f7c722b4544b97e3c75840aa33, type: 3} + m_Name: AutoExposure + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + filtering: + overrideState: 1 + value: {x: 50, y: 95} + minLuminance: + overrideState: 1 + value: 0 + maxLuminance: + overrideState: 1 + value: 0 + keyValue: + overrideState: 1 + value: 1.8 + eyeAdaptation: + overrideState: 1 + value: 0 + speedUp: + overrideState: 1 + value: 2 + speedDown: + overrideState: 1 + value: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3} + m_Name: MMPrototypeTexturesPPProfile + m_EditorClassIdentifier: + settings: + - {fileID: 4348430033036103423} + - {fileID: -3590022287616366149} + - {fileID: 6236464497431688450} + - {fileID: 4631257217915591363} + - {fileID: 209631564048662218} +--- !u!114 &209631564048662218 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 40b924e2dad56384a8df2a1e111bb675, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + mode: + overrideState: 1 + value: 0 + color: + overrideState: 1 + value: {r: 0, g: 0, b: 0, a: 1} + center: + overrideState: 1 + value: {x: 0.5, y: 0.5} + intensity: + overrideState: 1 + value: 0.358 + smoothness: + overrideState: 1 + value: 0.2 + roundness: + overrideState: 1 + value: 1 + rounded: + overrideState: 1 + value: 0 + mask: + overrideState: 1 + value: {fileID: 0} + defaultState: 1 + opacity: + overrideState: 1 + value: 1 +--- !u!114 &4348430033036103423 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c1cb7e9e120078f43bce4f0b1be547a7, type: 3} + m_Name: AmbientOcclusion + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + mode: + overrideState: 1 + value: 1 + intensity: + overrideState: 1 + value: 0.53 + color: + overrideState: 1 + value: {r: 0, g: 0, b: 0, a: 1} + ambientOnly: + overrideState: 1 + value: 1 + noiseFilterTolerance: + overrideState: 1 + value: 0 + blurTolerance: + overrideState: 1 + value: -4.6 + upsampleTolerance: + overrideState: 1 + value: -12 + thicknessModifier: + overrideState: 1 + value: 1 + directLightingStrength: + overrideState: 1 + value: 0 + radius: + overrideState: 1 + value: 0.25 + quality: + overrideState: 1 + value: 2 +--- !u!114 &4631257217915591363 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 556797029e73b2347956b6579e77e05b, type: 3} + m_Name: DepthOfField + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + focusDistance: + overrideState: 1 + value: 3.5 + aperture: + overrideState: 1 + value: 3.8 + focalLength: + overrideState: 1 + value: 42.1 + kernelSize: + overrideState: 1 + value: 1 +--- !u!114 &6236464497431688450 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 48a79b01ea5641d4aa6daa2e23605641, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + intensity: + overrideState: 1 + value: 1 + threshold: + overrideState: 1 + value: 1 + softKnee: + overrideState: 1 + value: 0.5 + clamp: + overrideState: 1 + value: 65472 + diffusion: + overrideState: 1 + value: 7 + anamorphicRatio: + overrideState: 1 + value: 0 + color: + overrideState: 1 + value: {r: 1, g: 1, b: 1, a: 1} + fastMode: + overrideState: 1 + value: 0 + dirtTexture: + overrideState: 1 + value: {fileID: 0} + defaultState: 1 + dirtIntensity: + overrideState: 1 + value: 0 diff --git a/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing/MMPrototypeTexturesPPProfile.asset.meta b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing/MMPrototypeTexturesPPProfile.asset.meta new file mode 100644 index 0000000..2e84fb8 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMPrototypeTextures/PostProcessing/MMPrototypeTexturesPPProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 377b03b64b8e4ea45bd7f79c650610b0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMRadio.meta b/Assets/Feel/MMTools/Demos/MMRadio.meta new file mode 100644 index 0000000..8f3c630 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMRadio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 33ddcd19696a7134eacda6bed9799dca +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMRadio/MMRadioDemo.unity b/Assets/Feel/MMTools/Demos/MMRadio/MMRadioDemo.unity new file mode 100644 index 0000000..f234600 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMRadio/MMRadioDemo.unity @@ -0,0 +1,22389 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0, g: 0.74009764, b: 0.9339623, a: 1} + m_FogMode: 3 + m_FogDensity: 0.05 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 970bbf7e102b4664880e3389ebd04068, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &4094374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4094378} + - component: {fileID: 4094377} + - component: {fileID: 4094376} + - component: {fileID: 4094375} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &4094375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4094374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 4094374} + TargetComponent: {fileID: 4094378} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &4094376 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4094374} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &4094377 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4094374} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &4094378 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4094374} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &8714779 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8714783} + - component: {fileID: 8714782} + - component: {fileID: 8714781} + - component: {fileID: 8714780} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &8714780 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8714779} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 8714779} + TargetComponent: {fileID: 8714783} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &8714781 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8714779} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &8714782 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8714779} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &8714783 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8714779} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9824361 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9824365} + - component: {fileID: 9824364} + - component: {fileID: 9824363} + - component: {fileID: 9824362} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &9824362 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9824361} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 9824361} + TargetComponent: {fileID: 9824365} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &9824363 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9824361} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &9824364 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9824361} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &9824365 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9824361} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &15272129 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 15272133} + - component: {fileID: 15272132} + - component: {fileID: 15272131} + - component: {fileID: 15272130} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &15272130 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15272129} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 15272129} + TargetComponent: {fileID: 15272133} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &15272131 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15272129} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &15272132 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15272129} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &15272133 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 15272129} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &47384300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 47384301} + m_Layer: 0 + m_Name: Cameras --------------------------------------- + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &47384301 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 47384300} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 738129290} + - {fileID: 532913264} + - {fileID: 1386774268} + - {fileID: 931170842} + - {fileID: 349066822} + - {fileID: 1016470751} + - {fileID: 1705276673} + - {fileID: 1452790741} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &63548286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 63548290} + - component: {fileID: 63548289} + - component: {fileID: 63548288} + - component: {fileID: 63548287} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &63548287 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63548286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 63548286} + TargetComponent: {fileID: 63548290} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &63548288 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63548286} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &63548289 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63548286} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &63548290 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 63548286} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &91004420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 91004424} + - component: {fileID: 91004423} + - component: {fileID: 91004422} + - component: {fileID: 91004421} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &91004421 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 91004420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 91004420} + TargetComponent: {fileID: 91004424} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &91004422 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 91004420} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &91004423 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 91004420} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &91004424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 91004420} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &126932019 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 126932020} + - component: {fileID: 126932021} + m_Layer: 0 + m_Name: Point Light (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &126932020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126932019} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -2.38, y: 2.9, z: -3.02} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 974558482} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!108 &126932021 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 126932019} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 0.85882354, g: 0.36406818, b: 0.050980404, a: 1} + m_Intensity: 2 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &135211649 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 135211653} + - component: {fileID: 135211652} + - component: {fileID: 135211651} + - component: {fileID: 135211650} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &135211650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 135211649} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 135211649} + TargetComponent: {fileID: 135211653} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &135211651 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 135211649} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &135211652 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 135211649} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &135211653 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 135211649} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &144158171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 144158175} + - component: {fileID: 144158174} + - component: {fileID: 144158173} + - component: {fileID: 144158172} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &144158172 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144158171} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 144158171} + TargetComponent: {fileID: 144158175} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &144158173 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144158171} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &144158174 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144158171} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &144158175 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 144158171} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &148773393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 148773397} + - component: {fileID: 148773396} + - component: {fileID: 148773395} + - component: {fileID: 148773394} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &148773394 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 148773393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 148773393} + TargetComponent: {fileID: 148773397} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &148773395 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 148773393} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &148773396 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 148773393} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &148773397 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 148773393} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &154942727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 154942731} + - component: {fileID: 154942730} + - component: {fileID: 154942729} + - component: {fileID: 154942728} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &154942728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154942727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 154942727} + TargetComponent: {fileID: 154942731} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &154942729 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154942727} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &154942730 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154942727} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &154942731 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 154942727} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &198510183 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 198510187} + - component: {fileID: 198510186} + - component: {fileID: 198510185} + - component: {fileID: 198510184} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &198510184 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 198510183} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 198510183} + TargetComponent: {fileID: 198510187} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &198510185 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 198510183} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &198510186 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 198510183} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &198510187 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 198510183} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &208041465 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 208041469} + - component: {fileID: 208041468} + - component: {fileID: 208041467} + - component: {fileID: 208041466} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &208041466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 208041465} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 208041465} + TargetComponent: {fileID: 208041469} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &208041467 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 208041465} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &208041468 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 208041465} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &208041469 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 208041465} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &220813003 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 220813007} + - component: {fileID: 220813006} + - component: {fileID: 220813005} + - component: {fileID: 220813004} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &220813004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 220813003} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 220813003} + TargetComponent: {fileID: 220813007} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &220813005 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 220813003} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &220813006 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 220813003} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &220813007 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 220813003} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &224192200 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224192204} + - component: {fileID: 224192203} + - component: {fileID: 224192202} + - component: {fileID: 224192201} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &224192201 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224192200} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 224192200} + TargetComponent: {fileID: 224192204} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &224192202 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224192200} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &224192203 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224192200} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &224192204 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224192200} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &235540374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 235540378} + - component: {fileID: 235540377} + - component: {fileID: 235540376} + - component: {fileID: 235540375} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &235540375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235540374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 235540374} + TargetComponent: {fileID: 235540378} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &235540376 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235540374} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &235540377 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235540374} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &235540378 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235540374} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &245078392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 245078393} + - component: {fileID: 245078395} + - component: {fileID: 245078394} + m_Layer: 0 + m_Name: Crate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &245078393 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245078392} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1723647473} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &245078394 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245078392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 8a0f71e021d8c02408e3b9145082dc1b, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &245078395 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 245078392} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!1 &270053989 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 270053993} + - component: {fileID: 270053992} + - component: {fileID: 270053991} + - component: {fileID: 270053990} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &270053990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 270053989} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 270053989} + TargetComponent: {fileID: 270053993} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &270053991 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 270053989} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &270053992 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 270053989} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &270053993 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 270053989} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &272057977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 272057981} + - component: {fileID: 272057980} + - component: {fileID: 272057979} + - component: {fileID: 272057978} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &272057978 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272057977} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 272057977} + TargetComponent: {fileID: 272057981} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &272057979 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272057977} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &272057980 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272057977} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &272057981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272057977} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &308808007 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 308808010} + - component: {fileID: 308808009} + - component: {fileID: 308808008} + - component: {fileID: 308808011} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &308808008 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 308808007} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &308808009 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 308808007} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &308808010 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 308808007} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1579.666, y: -437.12592, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &308808011 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 308808007} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 308808007} + TargetComponent: {fileID: 308808010} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 0 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!1 &325993001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 325993005} + - component: {fileID: 325993004} + - component: {fileID: 325993003} + - component: {fileID: 325993002} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &325993002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 325993001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 325993001} + TargetComponent: {fileID: 325993005} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &325993003 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 325993001} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &325993004 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 325993001} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &325993005 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 325993001} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &337817039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 337817043} + - component: {fileID: 337817042} + - component: {fileID: 337817041} + - component: {fileID: 337817040} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &337817040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337817039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 337817039} + TargetComponent: {fileID: 337817043} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &337817041 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337817039} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &337817042 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337817039} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &337817043 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337817039} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &339949604 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 339949608} + - component: {fileID: 339949607} + - component: {fileID: 339949606} + - component: {fileID: 339949605} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &339949605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 339949604} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 339949604} + TargetComponent: {fileID: 339949608} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &339949606 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 339949604} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &339949607 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 339949604} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &339949608 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 339949604} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &345998483 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 345998487} + - component: {fileID: 345998486} + - component: {fileID: 345998485} + - component: {fileID: 345998484} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &345998484 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345998483} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 345998483} + TargetComponent: {fileID: 345998487} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &345998485 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345998483} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &345998486 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345998483} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &345998487 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 345998483} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &346705340 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 346705344} + - component: {fileID: 346705343} + - component: {fileID: 346705342} + - component: {fileID: 346705341} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &346705341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346705340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 346705340} + TargetComponent: {fileID: 346705344} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &346705342 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346705340} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &346705343 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346705340} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &346705344 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346705340} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &349066821 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 349066822} + - component: {fileID: 349066823} + m_Layer: 0 + m_Name: GlobalPostProcessingProfile + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &349066822 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349066821} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.7941098, y: 2.0751998, z: 1.51717} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &349066823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349066821} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: 07c0d76c76e70e64c82dc522636cd034, type: 2} + isGlobal: 1 + blendDistance: 0 + weight: 1 + priority: 0 +--- !u!1 &349621901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 349621905} + - component: {fileID: 349621904} + - component: {fileID: 349621903} + - component: {fileID: 349621902} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &349621902 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349621901} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 349621901} + TargetComponent: {fileID: 349621905} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &349621903 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349621901} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &349621904 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349621901} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &349621905 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 349621901} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &357906851 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 357906855} + - component: {fileID: 357906854} + - component: {fileID: 357906853} + - component: {fileID: 357906852} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &357906852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 357906851} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 357906851} + TargetComponent: {fileID: 357906855} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &357906853 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 357906851} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &357906854 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 357906851} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &357906855 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 357906851} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &388236322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 388236326} + - component: {fileID: 388236325} + - component: {fileID: 388236324} + - component: {fileID: 388236323} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &388236323 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 388236322} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 388236322} + TargetComponent: {fileID: 388236326} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &388236324 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 388236322} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &388236325 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 388236322} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &388236326 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 388236322} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &397341647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 397341651} + - component: {fileID: 397341650} + - component: {fileID: 397341649} + - component: {fileID: 397341648} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &397341648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397341647} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 397341647} + TargetComponent: {fileID: 397341651} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &397341649 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397341647} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &397341650 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397341647} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &397341651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 397341647} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &404497722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 404497726} + - component: {fileID: 404497725} + - component: {fileID: 404497724} + - component: {fileID: 404497723} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &404497723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404497722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 404497722} + TargetComponent: {fileID: 404497726} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &404497724 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404497722} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &404497725 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404497722} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &404497726 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 404497722} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &450938844 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 450938848} + - component: {fileID: 450938847} + - component: {fileID: 450938846} + - component: {fileID: 450938845} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &450938845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 450938844} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 450938844} + TargetComponent: {fileID: 450938848} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &450938846 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 450938844} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &450938847 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 450938844} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &450938848 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 450938844} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &455132016 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 455132020} + - component: {fileID: 455132019} + - component: {fileID: 455132018} + - component: {fileID: 455132017} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &455132017 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455132016} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 455132016} + TargetComponent: {fileID: 455132020} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &455132018 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455132016} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &455132019 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455132016} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &455132020 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455132016} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &465142261 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 465142265} + - component: {fileID: 465142264} + - component: {fileID: 465142263} + - component: {fileID: 465142262} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &465142262 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 465142261} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 465142261} + TargetComponent: {fileID: 465142265} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &465142263 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 465142261} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &465142264 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 465142261} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &465142265 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 465142261} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &471984456 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 471984460} + - component: {fileID: 471984459} + - component: {fileID: 471984458} + - component: {fileID: 471984457} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &471984457 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471984456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 471984456} + TargetComponent: {fileID: 471984460} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &471984458 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471984456} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &471984459 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471984456} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &471984460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471984456} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &480880890 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 480880894} + - component: {fileID: 480880893} + - component: {fileID: 480880892} + - component: {fileID: 480880891} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &480880891 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 480880890} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 480880890} + TargetComponent: {fileID: 480880894} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &480880892 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 480880890} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &480880893 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 480880890} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &480880894 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 480880890} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &483858477 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 483858481} + - component: {fileID: 483858480} + - component: {fileID: 483858479} + - component: {fileID: 483858478} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &483858478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483858477} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 483858477} + TargetComponent: {fileID: 483858481} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &483858479 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483858477} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &483858480 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483858477} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &483858481 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 483858477} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &485029132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485029136} + - component: {fileID: 485029135} + - component: {fileID: 485029134} + - component: {fileID: 485029133} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &485029133 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485029132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 485029132} + TargetComponent: {fileID: 485029136} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &485029134 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485029132} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &485029135 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485029132} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &485029136 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485029132} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &486967352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 486967356} + - component: {fileID: 486967355} + - component: {fileID: 486967354} + - component: {fileID: 486967353} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &486967353 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486967352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 486967352} + TargetComponent: {fileID: 486967356} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &486967354 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486967352} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &486967355 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486967352} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &486967356 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 486967352} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &504752738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 504752742} + - component: {fileID: 504752741} + - component: {fileID: 504752740} + - component: {fileID: 504752739} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &504752739 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 504752738} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 504752738} + TargetComponent: {fileID: 504752742} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &504752740 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 504752738} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &504752741 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 504752738} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &504752742 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 504752738} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &505092319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 505092323} + - component: {fileID: 505092322} + - component: {fileID: 505092321} + - component: {fileID: 505092320} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &505092320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505092319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 505092319} + TargetComponent: {fileID: 505092323} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &505092321 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505092319} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &505092322 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505092319} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &505092323 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505092319} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &521836737 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 521836739} + - component: {fileID: 521836738} + - component: {fileID: 521836740} + m_Layer: 0 + m_Name: TestBroadcaster + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &521836738 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 521836737} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1f655bab42c018140aaf68474d594e6c, type: 3} + m_Name: + m_EditorClassIdentifier: + Emitter: + TargetObject: {fileID: 521836737} + TargetComponent: {fileID: 521836740} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: Level + ClampMin: 0 + ClampMax: 0 + Vector2Option: 0 + Vector3Option: 0 + Vector4Option: 0 + BoolRemapFalse: 0 + BoolRemapTrue: 1 + IntRemapMinToZero: 0 + IntRemapMaxToOne: 1 + FloatRemapMinToZero: 0 + FloatRemapMaxToOne: 1 + QuaternionRemapMinToZero: 0 + QuaternionRemapMaxToOne: 360 + Level: 0 + Receivers: [] + BroadcastOnChannel: 1 + Channel: 0 + OnlyBroadcastOnValueChange: 1 +--- !u!4 &521836739 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 521836737} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.96300036, y: 7.327285, z: -8.166706} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &521836740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 521836737} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 65443987bd9048f408777b8d8f4c1994, type: 3} + m_Name: + m_EditorClassIdentifier: + SignalMode: 1 + TimeScale: 0 + Duration: 5 + GlobalMultiplier: 1 + CurrentLevel: 0.5 + Playing: 0 + DriverTime: 0 + PlayOnStart: 1 + OnValueChange: + m_PersistentCalls: + m_Calls: [] + StartShakingButton: 0 + AnimatedPreview: 0 + BackAndForth: 1 + BackAndForthMirrorPoint: 0.46 + SignalList: + array: + - Active: 1 + SignalType: 0 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + TweenCurve: 0 + Mode: 0 + Phase: 0 + Frequency: 2.75 + Amplitude: 1 + Offset: 0 + Invert: 0 + - Active: 1 + SignalType: 7 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 0 + TweenCurve: 0 + Mode: 0 + Phase: 0 + Frequency: 6.3 + Amplitude: 1 + Offset: 0 + Invert: 0 + Clamps: {x: -0.48, y: 1.79} + Bias: 0.5 +--- !u!1 &523989063 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 523989067} + - component: {fileID: 523989066} + - component: {fileID: 523989065} + - component: {fileID: 523989064} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &523989064 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523989063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 523989063} + TargetComponent: {fileID: 523989067} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &523989065 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523989063} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &523989066 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523989063} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &523989067 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523989063} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &524576665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 524576669} + - component: {fileID: 524576668} + - component: {fileID: 524576667} + - component: {fileID: 524576666} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &524576666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 524576665} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 524576665} + TargetComponent: {fileID: 524576669} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &524576667 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 524576665} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &524576668 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 524576665} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &524576669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 524576665} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &531435678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 531435682} + - component: {fileID: 531435681} + - component: {fileID: 531435680} + - component: {fileID: 531435679} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &531435679 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531435678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 531435678} + TargetComponent: {fileID: 531435682} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &531435680 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531435678} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &531435681 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531435678} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &531435682 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531435678} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &532913263 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 532913264} + - component: {fileID: 532913267} + - component: {fileID: 532913266} + - component: {fileID: 532913265} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &532913264 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532913263} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2032115193} + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &532913265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532913263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &532913266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532913263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &532913267 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 532913263} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &536294463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 536294467} + - component: {fileID: 536294466} + - component: {fileID: 536294465} + - component: {fileID: 536294464} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &536294464 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 536294463} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 536294463} + TargetComponent: {fileID: 536294467} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &536294465 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 536294463} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &536294466 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 536294463} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &536294467 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 536294463} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &537714119 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 537714123} + - component: {fileID: 537714122} + - component: {fileID: 537714121} + - component: {fileID: 537714120} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &537714120 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537714119} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 537714119} + TargetComponent: {fileID: 537714123} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &537714121 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537714119} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &537714122 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537714119} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &537714123 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 537714119} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &549905180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 549905184} + - component: {fileID: 549905183} + - component: {fileID: 549905182} + - component: {fileID: 549905181} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &549905181 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549905180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 549905180} + TargetComponent: {fileID: 549905184} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &549905182 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549905180} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &549905183 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549905180} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &549905184 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 549905180} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &555784631 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 555784635} + - component: {fileID: 555784634} + - component: {fileID: 555784633} + - component: {fileID: 555784632} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &555784632 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555784631} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 555784631} + TargetComponent: {fileID: 555784635} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &555784633 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555784631} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &555784634 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555784631} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &555784635 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555784631} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &577603252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 577603256} + - component: {fileID: 577603255} + - component: {fileID: 577603254} + - component: {fileID: 577603253} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &577603253 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577603252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 577603252} + TargetComponent: {fileID: 577603256} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &577603254 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577603252} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &577603255 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577603252} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &577603256 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577603252} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &614302722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 614302726} + - component: {fileID: 614302725} + - component: {fileID: 614302724} + - component: {fileID: 614302723} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &614302723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614302722} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 614302722} + TargetComponent: {fileID: 614302726} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &614302724 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614302722} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &614302725 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614302722} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &614302726 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614302722} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &615717294 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 615717298} + - component: {fileID: 615717297} + - component: {fileID: 615717296} + - component: {fileID: 615717295} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &615717295 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615717294} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 615717294} + TargetComponent: {fileID: 615717298} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &615717296 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615717294} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &615717297 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615717294} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &615717298 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 615717294} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &634555142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 634555146} + - component: {fileID: 634555145} + - component: {fileID: 634555144} + - component: {fileID: 634555143} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &634555143 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634555142} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 634555142} + TargetComponent: {fileID: 634555146} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &634555144 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634555142} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &634555145 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634555142} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &634555146 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 634555142} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &700567636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 700567640} + - component: {fileID: 700567639} + - component: {fileID: 700567638} + - component: {fileID: 700567637} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &700567637 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700567636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 700567636} + TargetComponent: {fileID: 700567640} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &700567638 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700567636} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &700567639 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700567636} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &700567640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700567636} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &722569211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 722569212} + m_Layer: 0 + m_Name: Scene ------------------------------------------ + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &722569212 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 722569211} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1011637503} + - {fileID: 773672494} + - {fileID: 1257324396} + - {fileID: 2020251361} + - {fileID: 1675991661} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &738129289 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 738129290} + - component: {fileID: 738129291} + m_Layer: 0 + m_Name: FPSUnlock + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &738129290 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738129289} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &738129291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738129289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 32dd23bf97680be41a75b45b50f0d8ac, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetFPS: 300 + RenderFrameInterval: 0 + VSyncCount: 0 + EnableNumberShortcuts: 0 +--- !u!1 &742051935 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 742051939} + - component: {fileID: 742051938} + - component: {fileID: 742051937} + - component: {fileID: 742051936} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &742051936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742051935} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 742051935} + TargetComponent: {fileID: 742051939} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &742051937 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742051935} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &742051938 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742051935} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &742051939 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742051935} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &746240118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 746240122} + - component: {fileID: 746240121} + - component: {fileID: 746240120} + - component: {fileID: 746240119} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &746240119 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746240118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 746240118} + TargetComponent: {fileID: 746240122} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &746240120 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746240118} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &746240121 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746240118} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &746240122 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 746240118} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &753322325 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 753322329} + - component: {fileID: 753322328} + - component: {fileID: 753322327} + - component: {fileID: 753322326} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &753322326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 753322325} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 753322325} + TargetComponent: {fileID: 753322329} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &753322327 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 753322325} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &753322328 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 753322325} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &753322329 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 753322325} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &762729262 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 762729266} + - component: {fileID: 762729265} + - component: {fileID: 762729264} + - component: {fileID: 762729263} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &762729263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 762729262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 762729262} + TargetComponent: {fileID: 762729266} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &762729264 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 762729262} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &762729265 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 762729262} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &762729266 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 762729262} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &764913980 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 764913984} + - component: {fileID: 764913983} + - component: {fileID: 764913982} + - component: {fileID: 764913981} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &764913981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764913980} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 764913980} + TargetComponent: {fileID: 764913984} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 0 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &764913982 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764913980} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &764913983 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764913980} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &764913984 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 764913980} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1579.666, y: -437.12592, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &773672490 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 773672494} + - component: {fileID: 773672491} + m_Layer: 0 + m_Name: Cube1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &773672491 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773672490} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!4 &773672494 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773672490} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: -2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1390428117} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &774176343 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 774176347} + - component: {fileID: 774176346} + - component: {fileID: 774176345} + - component: {fileID: 774176344} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &774176344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774176343} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 774176343} + TargetComponent: {fileID: 774176347} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &774176345 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774176343} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &774176346 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774176343} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &774176347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774176343} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &789353932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 789353936} + - component: {fileID: 789353935} + - component: {fileID: 789353934} + - component: {fileID: 789353933} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &789353933 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 789353932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 789353932} + TargetComponent: {fileID: 789353936} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &789353934 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 789353932} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &789353935 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 789353932} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &789353936 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 789353932} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &801396459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 801396463} + - component: {fileID: 801396462} + - component: {fileID: 801396461} + - component: {fileID: 801396460} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &801396460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801396459} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 801396459} + TargetComponent: {fileID: 801396463} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &801396461 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801396459} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &801396462 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801396459} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &801396463 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801396459} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &813879917 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 813879921} + - component: {fileID: 813879920} + - component: {fileID: 813879919} + - component: {fileID: 813879918} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &813879918 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 813879917} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 813879917} + TargetComponent: {fileID: 813879921} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &813879919 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 813879917} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &813879920 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 813879917} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &813879921 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 813879917} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &817405628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 817405632} + - component: {fileID: 817405631} + - component: {fileID: 817405630} + - component: {fileID: 817405629} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &817405629 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817405628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 817405628} + TargetComponent: {fileID: 817405632} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &817405630 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817405628} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &817405631 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817405628} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &817405632 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 817405628} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &834546476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 834546480} + - component: {fileID: 834546479} + - component: {fileID: 834546478} + - component: {fileID: 834546477} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &834546477 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 834546476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 834546476} + TargetComponent: {fileID: 834546480} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &834546478 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 834546476} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &834546479 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 834546476} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &834546480 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 834546476} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &850134920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 850134924} + - component: {fileID: 850134923} + - component: {fileID: 850134922} + - component: {fileID: 850134921} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &850134921 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 850134920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 850134920} + TargetComponent: {fileID: 850134924} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &850134922 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 850134920} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &850134923 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 850134920} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &850134924 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 850134920} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &857165696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 857165700} + - component: {fileID: 857165699} + - component: {fileID: 857165698} + - component: {fileID: 857165697} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &857165697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 857165696} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 857165696} + TargetComponent: {fileID: 857165700} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &857165698 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 857165696} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &857165699 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 857165696} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &857165700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 857165696} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &858864554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 858864558} + - component: {fileID: 858864557} + - component: {fileID: 858864556} + - component: {fileID: 858864555} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &858864555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 858864554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 858864554} + TargetComponent: {fileID: 858864558} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &858864556 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 858864554} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &858864557 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 858864554} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &858864558 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 858864554} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &860603194 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 860603198} + - component: {fileID: 860603197} + - component: {fileID: 860603196} + - component: {fileID: 860603195} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &860603195 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 860603194} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 860603194} + TargetComponent: {fileID: 860603198} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &860603196 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 860603194} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &860603197 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 860603194} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &860603198 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 860603194} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &883267419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 883267423} + - component: {fileID: 883267422} + - component: {fileID: 883267421} + - component: {fileID: 883267420} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &883267420 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 883267419} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 883267419} + TargetComponent: {fileID: 883267423} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &883267421 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 883267419} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &883267422 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 883267419} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &883267423 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 883267419} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &883438109 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 883438113} + - component: {fileID: 883438112} + - component: {fileID: 883438111} + - component: {fileID: 883438110} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &883438110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 883438109} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 883438109} + TargetComponent: {fileID: 883438113} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &883438111 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 883438109} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &883438112 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 883438109} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &883438113 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 883438109} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &909557719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 909557723} + - component: {fileID: 909557722} + - component: {fileID: 909557721} + - component: {fileID: 909557720} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &909557720 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 909557719} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 909557719} + TargetComponent: {fileID: 909557723} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &909557721 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 909557719} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &909557722 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 909557719} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &909557723 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 909557719} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &913105743 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 913105747} + - component: {fileID: 913105746} + - component: {fileID: 913105745} + - component: {fileID: 913105744} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &913105744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913105743} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 913105743} + TargetComponent: {fileID: 913105747} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &913105745 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913105743} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &913105746 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913105743} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &913105747 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 913105743} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &917378413 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 917378417} + - component: {fileID: 917378416} + - component: {fileID: 917378415} + - component: {fileID: 917378414} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &917378414 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 917378413} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 917378413} + TargetComponent: {fileID: 917378417} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &917378415 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 917378413} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &917378416 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 917378413} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &917378417 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 917378413} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &918709442 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 918709446} + - component: {fileID: 918709445} + - component: {fileID: 918709444} + - component: {fileID: 918709443} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &918709443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918709442} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 918709442} + TargetComponent: {fileID: 918709446} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &918709444 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918709442} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &918709445 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918709442} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &918709446 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 918709442} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &931170841 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 931170842} + - component: {fileID: 931170847} + - component: {fileID: 931170845} + - component: {fileID: 931170846} + - component: {fileID: 931170844} + m_Layer: 0 + m_Name: CM vcam1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &931170842 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + serializedVersion: 2 + m_LocalRotation: {x: -0.000076204706, y: -0.4871739, z: -0.000042510856, w: 0.87330496} + m_LocalPosition: {x: 7.112, y: 1.907, z: -2.58} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: -0.01, y: -58.31, z: 0} +--- !u!114 &931170844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 00b2d199b96b516448144ab30fb26aed, type: 3} + m_Name: + m_EditorClassIdentifier: + ApplyAfter: 1 + ChannelMask: 1 + Gain: 1 + Use2DDistance: 0 + UseCameraSpace: 0 + ReactionSettings: + m_SecondaryNoise: {fileID: 0} + AmplitudeGain: 0 + FrequencyGain: 0 + Duration: 0 + m_NoiseOffsets: {x: 0, y: 0, z: 0} +--- !u!114 &931170845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3} + m_Name: + m_EditorClassIdentifier: + TrackerSettings: + BindingMode: 1 + PositionDamping: {x: 1, y: 1, z: 1} + AngularDampingMode: 0 + RotationDamping: {x: 0, y: 0, z: 0} + QuaternionDamping: 0 + FollowOffset: {x: -1.8469992, y: -0.625, z: -9.092002} +--- !u!114 &931170846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f38bda98361e1de48a4ca2bd86ea3c17, type: 3} + m_Name: + m_EditorClassIdentifier: + Composition: + ScreenPosition: {x: 0, y: 0} + DeadZone: + Enabled: 1 + Size: {x: 0, y: 0} + HardLimits: + Enabled: 1 + Size: {x: 0.8, y: 0.8} + Offset: {x: 0, y: 0} + CenterOnActivate: 1 + TargetOffset: {x: 0, y: 0, z: 0} + Damping: {x: 0.5, y: 0.5} + Lookahead: + Enabled: 0 + Time: 0 + Smoothing: 10 + IgnoreY: 0 +--- !u!114 &931170847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931170841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + m_Name: + m_EditorClassIdentifier: + Priority: + Enabled: 1 + m_Value: 10 + OutputChannel: 1 + StandbyUpdate: 2 + m_StreamingVersion: 20230301 + m_LegacyPriority: 0 + Target: + TrackingTarget: {fileID: 0} + LookAtTarget: {fileID: 0} + CustomLookAtTarget: 0 + Lens: + FieldOfView: 40 + OrthographicSize: 10 + NearClipPlane: 0.1 + FarClipPlane: 5000 + Dutch: 0 + ModeOverride: 0 + PhysicalProperties: + GateFit: 2 + SensorSize: {x: 1, y: 1} + LensShift: {x: 0, y: 0} + FocusDistance: 10 + Iso: 200 + ShutterSpeed: 0.005 + Aperture: 16 + BladeCount: 5 + Curvature: {x: 2, y: 11} + BarrelClipping: 0.25 + Anamorphism: 0 + BlendHint: 0 +--- !u!1 &950503961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 950503965} + - component: {fileID: 950503964} + - component: {fileID: 950503963} + - component: {fileID: 950503962} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &950503962 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950503961} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 950503961} + TargetComponent: {fileID: 950503965} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &950503963 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950503961} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &950503964 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950503961} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &950503965 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950503961} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &959909000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 959909004} + - component: {fileID: 959909003} + - component: {fileID: 959909002} + - component: {fileID: 959909001} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &959909001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959909000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 959909000} + TargetComponent: {fileID: 959909004} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &959909002 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959909000} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &959909003 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959909000} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &959909004 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959909000} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &974558481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 974558482} + m_Layer: 0 + m_Name: Lights + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &974558482 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 974558481} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1185183347} + - {fileID: 1149105829} + - {fileID: 126932020} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &975550768 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 975550772} + - component: {fileID: 975550771} + - component: {fileID: 975550770} + - component: {fileID: 975550769} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &975550769 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975550768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 975550768} + TargetComponent: {fileID: 975550772} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &975550770 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975550768} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &975550771 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975550768} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &975550772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975550768} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &978768478 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 978768482} + - component: {fileID: 978768481} + - component: {fileID: 978768480} + - component: {fileID: 978768479} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &978768479 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978768478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 978768478} + TargetComponent: {fileID: 978768482} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &978768480 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978768478} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &978768481 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978768478} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &978768482 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978768478} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &994357156 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 994357160} + - component: {fileID: 994357159} + - component: {fileID: 994357158} + - component: {fileID: 994357157} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &994357157 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994357156} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 994357156} + TargetComponent: {fileID: 994357160} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &994357158 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994357156} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &994357159 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994357156} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &994357160 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 994357156} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1011637502 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1011637503} + - component: {fileID: 1011637506} + - component: {fileID: 1011637505} + - component: {fileID: 1011637504} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1011637503 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011637502} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.5, y: -3, z: 0.5} + m_LocalScale: {x: 8, y: 8, z: 8} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1011637504 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011637502} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1011637505 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011637502} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 50ff9811d84ffeb42b11f0d57157a346, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1011637506 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011637502} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1016470750 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1016470751} + - component: {fileID: 1016470752} + - component: {fileID: 1016470754} + - component: {fileID: 1016470753} + m_Layer: 0 + m_Name: MovingFilter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1016470751 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016470750} + serializedVersion: 2 + m_LocalRotation: {x: 0.11369447, y: -0.54892564, z: 0.07568154, w: 0.8246372} + m_LocalPosition: {x: 8.9, y: 2.57, z: -3.47} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 15.7, y: -67.3, z: 0} +--- !u!114 &1016470752 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016470750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: 2a591d6cae1533b45bfbbe06de11f40c, type: 2} + isGlobal: 0 + blendDistance: 0.5 + weight: 1 + priority: 0 +--- !u!114 &1016470753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016470750} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6acbf0a8faacbb342ad72339d38c5a4d, type: 3} + m_Name: + m_EditorClassIdentifier: + Channel: 0 + TimeScale: 0 + Curve: + MMTweenDefinitionType: 0 + MMTweenCurve: 4 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 0 + Active: 0 + FilterOffset: {x: 0, y: 3} + AddToInitialPosition: 1 + TestDuration: 0.5 + PostProcessingToggleButton: 0 + PostProcessingTriggerOffButton: 0 + PostProcessingTriggerOnButton: 0 +--- !u!65 &1016470754 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1016470750} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1101748180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101748184} + - component: {fileID: 1101748183} + - component: {fileID: 1101748182} + - component: {fileID: 1101748181} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1101748181 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101748180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1101748180} + TargetComponent: {fileID: 1101748184} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1101748182 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101748180} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1101748183 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101748180} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1101748184 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101748180} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1113118017 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1113118021} + - component: {fileID: 1113118020} + - component: {fileID: 1113118019} + - component: {fileID: 1113118018} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1113118018 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113118017} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1113118017} + TargetComponent: {fileID: 1113118021} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1113118019 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113118017} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1113118020 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113118017} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1113118021 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113118017} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1113673286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1113673290} + - component: {fileID: 1113673289} + - component: {fileID: 1113673288} + - component: {fileID: 1113673287} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1113673287 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113673286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1113673286} + TargetComponent: {fileID: 1113673290} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1113673288 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113673286} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1113673289 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113673286} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1113673290 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113673286} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1116491456 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1116491460} + - component: {fileID: 1116491459} + - component: {fileID: 1116491458} + - component: {fileID: 1116491457} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1116491457 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116491456} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1116491456} + TargetComponent: {fileID: 1116491460} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1116491458 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116491456} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1116491459 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116491456} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1116491460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116491456} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1128746573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1128746577} + - component: {fileID: 1128746576} + - component: {fileID: 1128746575} + - component: {fileID: 1128746574} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1128746574 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1128746573} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1128746573} + TargetComponent: {fileID: 1128746577} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1128746575 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1128746573} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1128746576 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1128746573} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1128746577 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1128746573} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1131383966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1131383970} + - component: {fileID: 1131383969} + - component: {fileID: 1131383968} + - component: {fileID: 1131383967} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1131383967 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131383966} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1131383966} + TargetComponent: {fileID: 1131383970} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1131383968 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131383966} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1131383969 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131383966} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1131383970 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131383966} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1143213154 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1143213158} + - component: {fileID: 1143213157} + - component: {fileID: 1143213156} + - component: {fileID: 1143213155} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1143213155 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143213154} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1143213154} + TargetComponent: {fileID: 1143213158} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1143213156 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143213154} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1143213157 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143213154} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1143213158 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143213154} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1146884925 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1146884929} + - component: {fileID: 1146884928} + - component: {fileID: 1146884927} + - component: {fileID: 1146884926} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1146884926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1146884925} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1146884925} + TargetComponent: {fileID: 1146884929} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1146884927 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1146884925} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1146884928 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1146884925} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1146884929 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1146884925} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1149105827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1149105829} + - component: {fileID: 1149105828} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1149105828 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1149105827} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 0.262 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1149105829 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1149105827} + serializedVersion: 2 + m_LocalRotation: {x: 0.2562778, y: -0.72065616, z: 0.33604744, w: 0.5495895} + m_LocalPosition: {x: -20.3, y: -62.8, z: -0.9} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 974558482} + m_LocalEulerAnglesHint: {x: 50, y: -105.34, z: 0} +--- !u!1 &1152829797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1152829801} + - component: {fileID: 1152829800} + - component: {fileID: 1152829799} + - component: {fileID: 1152829798} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1152829798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152829797} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1152829797} + TargetComponent: {fileID: 1152829801} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1152829799 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152829797} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1152829800 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152829797} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1152829801 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1152829797} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1163791375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1163791379} + - component: {fileID: 1163791378} + - component: {fileID: 1163791377} + - component: {fileID: 1163791376} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1163791376 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163791375} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1163791375} + TargetComponent: {fileID: 1163791379} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1163791377 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163791375} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1163791378 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163791375} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1163791379 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1163791375} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1173679271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1173679275} + - component: {fileID: 1173679274} + - component: {fileID: 1173679273} + - component: {fileID: 1173679272} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1173679272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1173679271} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1173679271} + TargetComponent: {fileID: 1173679275} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1173679273 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1173679271} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1173679274 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1173679271} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1173679275 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1173679271} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1183737713 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1183737717} + - component: {fileID: 1183737716} + - component: {fileID: 1183737715} + - component: {fileID: 1183737714} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1183737714 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1183737713} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1183737713} + TargetComponent: {fileID: 1183737717} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1183737715 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1183737713} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1183737716 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1183737713} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1183737717 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1183737713} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1185183345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1185183347} + - component: {fileID: 1185183346} + m_Layer: 0 + m_Name: Point Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1185183346 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185183345} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 2 + m_Shape: 0 + m_Color: {r: 1, g: 0.17647058, b: 0.96848667, a: 1} + m_Intensity: 1.5 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1185183347 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185183345} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3.06, y: 2.9, z: 3.98} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 974558482} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1190418789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1190418793} + - component: {fileID: 1190418792} + - component: {fileID: 1190418791} + - component: {fileID: 1190418790} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1190418790 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190418789} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1190418789} + TargetComponent: {fileID: 1190418793} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1190418791 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190418789} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1190418792 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190418789} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1190418793 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1190418789} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1191163460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1191163464} + - component: {fileID: 1191163463} + - component: {fileID: 1191163462} + - component: {fileID: 1191163461} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1191163461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191163460} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1191163460} + TargetComponent: {fileID: 1191163464} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1191163462 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191163460} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1191163463 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191163460} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1191163464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1191163460} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1204660144 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1204660148} + - component: {fileID: 1204660147} + - component: {fileID: 1204660146} + - component: {fileID: 1204660145} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1204660145 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204660144} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1204660144} + TargetComponent: {fileID: 1204660148} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1204660146 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204660144} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1204660147 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204660144} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1204660148 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204660144} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1232017668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1232017672} + - component: {fileID: 1232017671} + - component: {fileID: 1232017670} + - component: {fileID: 1232017669} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1232017669 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1232017668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1232017668} + TargetComponent: {fileID: 1232017672} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1232017670 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1232017668} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1232017671 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1232017668} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1232017672 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1232017668} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1257324395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257324396} + - component: {fileID: 1257324397} + m_Layer: 0 + m_Name: Cube2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1257324396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257324395} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1723647473} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1257324397 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257324395} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &1274462301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1274462305} + - component: {fileID: 1274462304} + - component: {fileID: 1274462303} + - component: {fileID: 1274462302} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1274462302 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274462301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1274462301} + TargetComponent: {fileID: 1274462305} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1274462303 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274462301} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1274462304 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274462301} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1274462305 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274462301} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1285191437 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1285191441} + - component: {fileID: 1285191440} + - component: {fileID: 1285191439} + - component: {fileID: 1285191438} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1285191438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285191437} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1285191437} + TargetComponent: {fileID: 1285191441} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1285191439 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285191437} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1285191440 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285191437} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1285191441 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1285191437} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1287658906 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1287658910} + - component: {fileID: 1287658909} + - component: {fileID: 1287658908} + - component: {fileID: 1287658907} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1287658907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287658906} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1287658906} + TargetComponent: {fileID: 1287658910} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1287658908 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287658906} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1287658909 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287658906} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1287658910 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287658906} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1302759063 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1302759067} + - component: {fileID: 1302759066} + - component: {fileID: 1302759065} + - component: {fileID: 1302759064} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1302759064 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1302759063} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1302759063} + TargetComponent: {fileID: 1302759067} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1302759065 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1302759063} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1302759066 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1302759063} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1302759067 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1302759063} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1306722479 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1306722483} + - component: {fileID: 1306722482} + - component: {fileID: 1306722481} + - component: {fileID: 1306722480} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1306722480 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306722479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1306722479} + TargetComponent: {fileID: 1306722483} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1306722481 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306722479} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1306722482 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306722479} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1306722483 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1306722479} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1308679961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1308679965} + - component: {fileID: 1308679964} + - component: {fileID: 1308679963} + - component: {fileID: 1308679962} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1308679962 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308679961} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1308679961} + TargetComponent: {fileID: 1308679965} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1308679963 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308679961} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1308679964 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308679961} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1308679965 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308679961} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1319208449 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1319208453} + - component: {fileID: 1319208452} + - component: {fileID: 1319208451} + - component: {fileID: 1319208450} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1319208450 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319208449} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1319208449} + TargetComponent: {fileID: 1319208453} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1319208451 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319208449} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1319208452 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319208449} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1319208453 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319208449} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1334423714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1334423718} + - component: {fileID: 1334423717} + - component: {fileID: 1334423716} + - component: {fileID: 1334423715} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1334423715 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1334423714} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1334423714} + TargetComponent: {fileID: 1334423718} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1334423716 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1334423714} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1334423717 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1334423714} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1334423718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1334423714} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1344245559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1344245563} + - component: {fileID: 1344245562} + - component: {fileID: 1344245561} + - component: {fileID: 1344245560} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1344245560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344245559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1344245559} + TargetComponent: {fileID: 1344245563} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1344245561 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344245559} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1344245562 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344245559} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1344245563 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1344245559} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1386774265 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1386774268} + - component: {fileID: 1386774267} + - component: {fileID: 1386774266} + - component: {fileID: 1386774269} + - component: {fileID: 1386774270} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1386774266 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + m_Enabled: 1 +--- !u!20 &1386774267 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.8551266, g: 0.6637148, b: 0.8962264, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.1 + far clip plane: 5000 + field of view: 40 + orthographic: 0 + orthographic size: 10 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1386774268 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + serializedVersion: 2 + m_LocalRotation: {x: -0.000076204706, y: -0.4871739, z: -0.000042510856, w: 0.87330496} + m_LocalPosition: {x: 7.112, y: 1.907, z: -2.58} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 15.7, y: -67.3, z: 0} +--- !u!114 &1386774269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} + m_Name: + m_EditorClassIdentifier: + volumeTrigger: {fileID: 1386774268} + volumeLayer: + serializedVersion: 2 + m_Bits: 4294967295 + stopNaNPropagation: 1 + finalBlitToCameraTarget: 1 + antialiasingMode: 1 + temporalAntialiasing: + jitterSpread: 0.75 + sharpness: 0.25 + stationaryBlending: 0.95 + motionBlending: 0.85 + subpixelMorphologicalAntialiasing: + quality: 2 + fastApproximateAntialiasing: + fastMode: 0 + keepAlpha: 0 + fog: + enabled: 1 + excludeSkybox: 1 + debugLayer: + lightMeter: + width: 512 + height: 256 + showCurves: 1 + histogram: + width: 512 + height: 256 + channel: 3 + waveform: + exposure: 0.12 + height: 256 + vectorscope: + size: 256 + exposure: 0.12 + overlaySettings: + linearDepth: 0 + motionColorIntensity: 4 + motionGridSize: 64 + colorBlindnessType: 0 + colorBlindnessStrength: 1 + m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} + m_ShowToolkit: 0 + m_ShowCustomSorter: 0 + breakBeforeColorGrading: 0 + m_BeforeTransparentBundles: [] + m_BeforeStackBundles: [] + m_AfterStackBundles: [] +--- !u!114 &1386774270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386774265} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72ece51f2901e7445ab60da3685d6b5f, type: 3} + m_Name: + m_EditorClassIdentifier: + ShowDebugText: 0 + ShowCameraFrustum: 1 + IgnoreTimeScale: 0 + WorldUpOverride: {fileID: 0} + ChannelMask: -1 + UpdateMethod: 2 + BlendUpdateMethod: 1 + LensModeOverride: + Enabled: 0 + DefaultMode: 2 + DefaultBlend: + Style: 1 + Time: 2 + CustomCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + CustomBlends: {fileID: 0} +--- !u!1 &1386781618 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1386781622} + - component: {fileID: 1386781621} + - component: {fileID: 1386781620} + - component: {fileID: 1386781619} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1386781619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386781618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1386781618} + TargetComponent: {fileID: 1386781622} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1386781620 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386781618} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1386781621 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386781618} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1386781622 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1386781618} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1390428116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1390428117} + m_Layer: 0 + m_Name: SquashAndStretch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1390428117 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390428116} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5006512734875221718} + m_Father: {fileID: 773672494} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1433489402 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1433489406} + - component: {fileID: 1433489405} + - component: {fileID: 1433489404} + - component: {fileID: 1433489403} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1433489403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433489402} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1433489402} + TargetComponent: {fileID: 1433489406} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1433489404 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433489402} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1433489405 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433489402} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1433489406 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1433489402} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1450081377 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1450081381} + - component: {fileID: 1450081380} + - component: {fileID: 1450081379} + - component: {fileID: 1450081378} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1450081378 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1450081377} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1450081377} + TargetComponent: {fileID: 1450081381} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1450081379 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1450081377} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1450081380 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1450081377} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1450081381 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1450081377} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1450391661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1450391665} + - component: {fileID: 1450391664} + - component: {fileID: 1450391663} + - component: {fileID: 1450391662} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1450391662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1450391661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1450391661} + TargetComponent: {fileID: 1450391665} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1450391663 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1450391661} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1450391664 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1450391661} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1450391665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1450391661} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1452790740 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1452790741} + - component: {fileID: 1452790742} + m_Layer: 0 + m_Name: InputModule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1452790741 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452790740} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1452790742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1452790740} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c82cf35166701394ab910f41269944f9, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1460400374 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1460400378} + - component: {fileID: 1460400377} + - component: {fileID: 1460400376} + - component: {fileID: 1460400375} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1460400375 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1460400374} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1460400374} + TargetComponent: {fileID: 1460400378} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1460400376 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1460400374} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1460400377 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1460400374} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1460400378 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1460400374} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1484494392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1484494396} + - component: {fileID: 1484494395} + - component: {fileID: 1484494394} + - component: {fileID: 1484494393} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1484494393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1484494392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1484494392} + TargetComponent: {fileID: 1484494396} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1484494394 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1484494392} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1484494395 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1484494392} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1484494396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1484494392} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1489924102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1489924106} + - component: {fileID: 1489924105} + - component: {fileID: 1489924104} + - component: {fileID: 1489924103} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1489924103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489924102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1489924102} + TargetComponent: {fileID: 1489924106} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1489924104 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489924102} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1489924105 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489924102} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1489924106 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1489924102} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1561756052 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1561756053} + - component: {fileID: 1561756055} + - component: {fileID: 1561756054} + m_Layer: 0 + m_Name: Crate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1561756053 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1561756052} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1985849808} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1561756054 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1561756052} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: aa24205135c86be4792f70af431b8638, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1561756055 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1561756052} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!1 &1578536215 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1578536219} + - component: {fileID: 1578536218} + - component: {fileID: 1578536217} + - component: {fileID: 1578536216} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1578536216 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578536215} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1578536215} + TargetComponent: {fileID: 1578536219} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1578536217 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578536215} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1578536218 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578536215} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1578536219 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1578536215} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1583512096 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1583512100} + - component: {fileID: 1583512099} + - component: {fileID: 1583512098} + - component: {fileID: 1583512097} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1583512097 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583512096} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1583512096} + TargetComponent: {fileID: 1583512100} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1583512098 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583512096} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1583512099 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583512096} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1583512100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1583512096} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1589462053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1589462057} + - component: {fileID: 1589462056} + - component: {fileID: 1589462055} + - component: {fileID: 1589462054} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1589462054 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589462053} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1589462053} + TargetComponent: {fileID: 1589462057} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1589462055 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589462053} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1589462056 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589462053} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1589462057 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589462053} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1590494520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1590494524} + - component: {fileID: 1590494523} + - component: {fileID: 1590494522} + - component: {fileID: 1590494521} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1590494521 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590494520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1590494520} + TargetComponent: {fileID: 1590494524} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1590494522 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590494520} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1590494523 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590494520} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1590494524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1590494520} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1597424106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1597424110} + - component: {fileID: 1597424109} + - component: {fileID: 1597424108} + - component: {fileID: 1597424107} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1597424107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597424106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1597424106} + TargetComponent: {fileID: 1597424110} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1597424108 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597424106} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1597424109 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597424106} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1597424110 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597424106} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1611905752 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1611905756} + - component: {fileID: 1611905755} + - component: {fileID: 1611905754} + - component: {fileID: 1611905753} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1611905753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1611905752} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1611905752} + TargetComponent: {fileID: 1611905756} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1611905754 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1611905752} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1611905755 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1611905752} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1611905756 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1611905752} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1639130050 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1639130054} + - component: {fileID: 1639130053} + - component: {fileID: 1639130052} + - component: {fileID: 1639130051} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1639130051 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1639130050} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1639130050} + TargetComponent: {fileID: 1639130054} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1639130052 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1639130050} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1639130053 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1639130050} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1639130054 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1639130050} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1643012656 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1643012660} + - component: {fileID: 1643012659} + - component: {fileID: 1643012658} + - component: {fileID: 1643012657} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1643012657 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643012656} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1643012656} + TargetComponent: {fileID: 1643012660} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1643012658 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643012656} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1643012659 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643012656} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1643012660 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1643012656} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1653488811 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1653488815} + - component: {fileID: 1653488814} + - component: {fileID: 1653488813} + - component: {fileID: 1653488812} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1653488812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653488811} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1653488811} + TargetComponent: {fileID: 1653488815} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1653488813 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653488811} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1653488814 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653488811} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1653488815 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1653488811} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1657306308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1657306312} + - component: {fileID: 1657306311} + - component: {fileID: 1657306310} + - component: {fileID: 1657306309} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1657306309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1657306308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1657306308} + TargetComponent: {fileID: 1657306312} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1657306310 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1657306308} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1657306311 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1657306308} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1657306312 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1657306308} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1658777937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1658777941} + - component: {fileID: 1658777940} + - component: {fileID: 1658777939} + - component: {fileID: 1658777938} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1658777938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1658777937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1658777937} + TargetComponent: {fileID: 1658777941} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1658777939 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1658777937} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1658777940 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1658777937} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1658777941 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1658777937} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1675991660 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1675991661} + m_Layer: 0 + m_Name: Cubes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1675991661 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1675991660} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1581.666, y: 438.62592, z: -399} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 308808010} + - {fileID: 764913984} + - {fileID: 746240122} + - {fileID: 235540378} + - {fileID: 1152829801} + - {fileID: 531435682} + - {fileID: 135211653} + - {fileID: 1848211504} + - {fileID: 465142265} + - {fileID: 860603198} + - {fileID: 537714123} + - {fileID: 774176347} + - {fileID: 2062046279} + - {fileID: 1113673290} + - {fileID: 154942731} + - {fileID: 1639130054} + - {fileID: 1611905756} + - {fileID: 978768482} + - {fileID: 634555146} + - {fileID: 789353936} + - {fileID: 1657306312} + - {fileID: 505092323} + - {fileID: 1677072838} + - {fileID: 346705344} + - {fileID: 1204660148} + - {fileID: 834546480} + - {fileID: 1334423718} + - {fileID: 1433489406} + - {fileID: 1285191441} + - {fileID: 801396463} + - {fileID: 883438113} + - {fileID: 950503965} + - {fileID: 555784635} + - {fileID: 813879921} + - {fileID: 504752742} + - {fileID: 1128746577} + - {fileID: 959909004} + - {fileID: 455132020} + - {fileID: 909557723} + - {fileID: 1643012660} + - {fileID: 349621905} + - {fileID: 480880894} + - {fileID: 2123300238} + - {fileID: 15272133} + - {fileID: 91004424} + - {fileID: 1450081381} + - {fileID: 1143213158} + - {fileID: 1232017672} + - {fileID: 1653488815} + - {fileID: 2064890243} + - {fileID: 198510187} + - {fileID: 523989067} + - {fileID: 762729266} + - {fileID: 1484494396} + - {fileID: 2133426639} + - {fileID: 2036416322} + - {fileID: 345998487} + - {fileID: 388236326} + - {fileID: 700567640} + - {fileID: 337817043} + - {fileID: 220813007} + - {fileID: 1190418793} + - {fileID: 817405632} + - {fileID: 357906855} + - {fileID: 1287658910} + - {fileID: 1879684528} + - {fileID: 270053993} + - {fileID: 486967356} + - {fileID: 8714783} + - {fileID: 1932516857} + - {fileID: 1191163464} + - {fileID: 1799295409} + - {fileID: 1589462057} + - {fileID: 1113118021} + - {fileID: 1146884929} + - {fileID: 1875814463} + - {fileID: 1658777941} + - {fileID: 4094378} + - {fileID: 1489924106} + - {fileID: 1690166752} + - {fileID: 742051939} + - {fileID: 1748340827} + - {fileID: 1701191131} + - {fileID: 1578536219} + - {fileID: 850134924} + - {fileID: 1386781622} + - {fileID: 1583512100} + - {fileID: 1101748184} + - {fileID: 1695519530} + - {fileID: 2001941049} + - {fileID: 404497726} + - {fileID: 1302759067} + - {fileID: 325993005} + - {fileID: 1163791379} + - {fileID: 471984460} + - {fileID: 272057981} + - {fileID: 1904717062} + - {fileID: 549905184} + - {fileID: 208041469} + - {fileID: 614302726} + - {fileID: 144158175} + - {fileID: 1717738876} + - {fileID: 63548290} + - {fileID: 615717298} + - {fileID: 913105747} + - {fileID: 397341651} + - {fileID: 1590494524} + - {fileID: 1849354464} + - {fileID: 1985315863} + - {fileID: 975550772} + - {fileID: 1450391665} + - {fileID: 857165700} + - {fileID: 148773397} + - {fileID: 224192204} + - {fileID: 1810724928} + - {fileID: 2022896877} + - {fileID: 485029136} + - {fileID: 2119196666} + - {fileID: 1820236013} + - {fileID: 9824365} + - {fileID: 2102896247} + - {fileID: 1989324273} + - {fileID: 1597424110} + - {fileID: 1812519201} + - {fileID: 450938848} + - {fileID: 918709446} + - {fileID: 1274462305} + - {fileID: 1704827752} + - {fileID: 753322329} + - {fileID: 577603256} + - {fileID: 1460400378} + - {fileID: 1306722483} + - {fileID: 858864558} + - {fileID: 1116491460} + - {fileID: 524576669} + - {fileID: 1344245563} + - {fileID: 339949608} + - {fileID: 917378417} + - {fileID: 1308679965} + - {fileID: 1822576509} + - {fileID: 536294467} + - {fileID: 1173679275} + - {fileID: 883267423} + - {fileID: 2030990207} + - {fileID: 1319208453} + - {fileID: 2035796678} + - {fileID: 1706655086} + - {fileID: 1183737717} + - {fileID: 483858481} + - {fileID: 1131383970} + - {fileID: 994357160} + - {fileID: 1953671842} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1677072834 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1677072838} + - component: {fileID: 1677072837} + - component: {fileID: 1677072836} + - component: {fileID: 1677072835} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1677072835 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677072834} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1677072834} + TargetComponent: {fileID: 1677072838} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1677072836 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677072834} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1677072837 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677072834} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1677072838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677072834} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -434.97592, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1690166748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1690166752} + - component: {fileID: 1690166751} + - component: {fileID: 1690166750} + - component: {fileID: 1690166749} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1690166749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1690166748} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1690166748} + TargetComponent: {fileID: 1690166752} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1690166750 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1690166748} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1690166751 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1690166748} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1690166752 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1690166748} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 400} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1695519526 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1695519530} + - component: {fileID: 1695519529} + - component: {fileID: 1695519528} + - component: {fileID: 1695519527} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1695519527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695519526} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1695519526} + TargetComponent: {fileID: 1695519530} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1695519528 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695519526} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1695519529 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695519526} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1695519530 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695519526} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 418.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1701191127 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1701191131} + - component: {fileID: 1701191130} + - component: {fileID: 1701191129} + - component: {fileID: 1701191128} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1701191128 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701191127} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1701191127} + TargetComponent: {fileID: 1701191131} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1701191129 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701191127} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1701191130 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701191127} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1701191131 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701191127} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1704827748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1704827752} + - component: {fileID: 1704827751} + - component: {fileID: 1704827750} + - component: {fileID: 1704827749} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1704827749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704827748} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1704827748} + TargetComponent: {fileID: 1704827752} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1704827750 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704827748} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1704827751 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704827748} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1704827752 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1704827748} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1705276670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1705276673} + - component: {fileID: 1705276672} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1705276672 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1705276670} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &1705276673 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1705276670} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 47384301} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1706655082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1706655086} + - component: {fileID: 1706655085} + - component: {fileID: 1706655084} + - component: {fileID: 1706655083} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1706655083 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706655082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1706655082} + TargetComponent: {fileID: 1706655086} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1706655084 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706655082} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1706655085 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706655082} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1706655086 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1706655082} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1717738872 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1717738876} + - component: {fileID: 1717738875} + - component: {fileID: 1717738874} + - component: {fileID: 1717738873} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1717738873 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1717738872} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1717738872} + TargetComponent: {fileID: 1717738876} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1717738874 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1717738872} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1717738875 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1717738872} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1717738876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1717738872} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 414.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1723647472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1723647473} + m_Layer: 0 + m_Name: SquashAndStretch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1723647473 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1723647472} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 245078393} + m_Father: {fileID: 1257324396} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1748340823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1748340827} + - component: {fileID: 1748340826} + - component: {fileID: 1748340825} + - component: {fileID: 1748340824} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1748340824 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748340823} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1748340823} + TargetComponent: {fileID: 1748340827} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1748340825 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748340823} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1748340826 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748340823} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1748340827 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1748340823} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1799295405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1799295409} + - component: {fileID: 1799295408} + - component: {fileID: 1799295407} + - component: {fileID: 1799295406} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1799295406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799295405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1799295405} + TargetComponent: {fileID: 1799295409} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1799295407 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799295405} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1799295408 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799295405} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1799295409 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799295405} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1810724924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1810724928} + - component: {fileID: 1810724927} + - component: {fileID: 1810724926} + - component: {fileID: 1810724925} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1810724925 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810724924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1810724924} + TargetComponent: {fileID: 1810724928} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1810724926 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810724924} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1810724927 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810724924} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1810724928 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1810724924} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1812519197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1812519201} + - component: {fileID: 1812519200} + - component: {fileID: 1812519199} + - component: {fileID: 1812519198} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1812519198 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812519197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1812519197} + TargetComponent: {fileID: 1812519201} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1812519199 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812519197} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1812519200 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812519197} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1812519201 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812519197} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -430.72592, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1820236009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1820236013} + - component: {fileID: 1820236012} + - component: {fileID: 1820236011} + - component: {fileID: 1820236010} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1820236010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1820236009} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1820236009} + TargetComponent: {fileID: 1820236013} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1820236011 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1820236009} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1820236012 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1820236009} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1820236013 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1820236009} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1822576505 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1822576509} + - component: {fileID: 1822576508} + - component: {fileID: 1822576507} + - component: {fileID: 1822576506} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1822576506 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822576505} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1822576505} + TargetComponent: {fileID: 1822576509} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1822576507 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822576505} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1822576508 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822576505} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1822576509 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1822576505} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1848211500 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1848211504} + - component: {fileID: 1848211503} + - component: {fileID: 1848211502} + - component: {fileID: 1848211501} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1848211501 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1848211500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1848211500} + TargetComponent: {fileID: 1848211504} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1848211502 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1848211500} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1848211503 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1848211500} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1848211504 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1848211500} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 406.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1849354460 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1849354464} + - component: {fileID: 1849354463} + - component: {fileID: 1849354462} + - component: {fileID: 1849354461} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1849354461 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849354460} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1849354460} + TargetComponent: {fileID: 1849354464} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1849354462 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849354460} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1849354463 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849354460} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1849354464 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1849354460} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1875814459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1875814463} + - component: {fileID: 1875814462} + - component: {fileID: 1875814461} + - component: {fileID: 1875814460} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1875814460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875814459} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1875814459} + TargetComponent: {fileID: 1875814463} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1875814461 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875814459} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1875814462 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875814459} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1875814463 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875814459} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1879684524 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1879684528} + - component: {fileID: 1879684527} + - component: {fileID: 1879684526} + - component: {fileID: 1879684525} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1879684525 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1879684524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1879684524} + TargetComponent: {fileID: 1879684528} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1879684526 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1879684524} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1879684527 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1879684524} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1879684528 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1879684524} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 402} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1904717058 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1904717062} + - component: {fileID: 1904717061} + - component: {fileID: 1904717060} + - component: {fileID: 1904717059} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1904717059 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904717058} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1904717058} + TargetComponent: {fileID: 1904717062} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1904717060 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904717058} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1904717061 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904717058} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1904717062 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1904717058} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1582.776, y: -430.48892, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1932516853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1932516857} + - component: {fileID: 1932516856} + - component: {fileID: 1932516855} + - component: {fileID: 1932516854} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1932516854 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1932516853} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1932516853} + TargetComponent: {fileID: 1932516857} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1932516855 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1932516853} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1932516856 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1932516853} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1932516857 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1932516853} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -435.13593, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1953671838 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1953671842} + - component: {fileID: 1953671841} + - component: {fileID: 1953671840} + - component: {fileID: 1953671839} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1953671839 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953671838} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1953671838} + TargetComponent: {fileID: 1953671842} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1953671840 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953671838} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1953671841 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953671838} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1953671842 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953671838} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1985315859 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1985315863} + - component: {fileID: 1985315862} + - component: {fileID: 1985315861} + - component: {fileID: 1985315860} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1985315860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985315859} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1985315859} + TargetComponent: {fileID: 1985315863} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1985315861 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985315859} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1985315862 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985315859} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1985315863 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985315859} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 422.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1985849807 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1985849808} + m_Layer: 0 + m_Name: SquashAndStretch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1985849808 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985849807} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1561756053} + m_Father: {fileID: 2020251361} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1989324269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1989324273} + - component: {fileID: 1989324272} + - component: {fileID: 1989324271} + - component: {fileID: 1989324270} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1989324270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989324269} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 1989324269} + TargetComponent: {fileID: 1989324273} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &1989324271 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989324269} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1989324272 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989324269} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &1989324273 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1989324269} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 396} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2001941045 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2001941049} + - component: {fileID: 2001941048} + - component: {fileID: 2001941047} + - component: {fileID: 2001941046} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2001941046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2001941045} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2001941045} + TargetComponent: {fileID: 2001941049} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2001941047 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2001941045} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2001941048 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2001941045} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2001941049 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2001941045} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -430.72592, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2020251360 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2020251361} + - component: {fileID: 2020251362} + m_Layer: 0 + m_Name: Cube3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2020251361 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2020251360} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 1.5, z: 2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1985849808} + m_Father: {fileID: 722569212} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2020251362 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2020251360} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &2022896873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2022896877} + - component: {fileID: 2022896876} + - component: {fileID: 2022896875} + - component: {fileID: 2022896874} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2022896874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2022896873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2022896873} + TargetComponent: {fileID: 2022896877} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2022896875 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2022896873} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2022896876 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2022896873} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2022896877 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2022896873} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2030990203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2030990207} + - component: {fileID: 2030990206} + - component: {fileID: 2030990205} + - component: {fileID: 2030990204} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2030990204 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030990203} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2030990203} + TargetComponent: {fileID: 2030990207} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2030990205 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030990203} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2030990206 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030990203} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2030990207 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2030990203} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 408.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2032115192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2032115193} + - component: {fileID: 2032115196} + - component: {fileID: 2032115195} + - component: {fileID: 2032115194} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2032115193 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032115192} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 532913264} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 10, y: 10} + m_SizeDelta: {x: 89.16, y: 30} + m_Pivot: {x: 0, y: 0} +--- !u!114 &2032115194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032115192} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 06e8923c17983d643980d7d7773b7382, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateInterval: 0.3 + Mode: 0 +--- !u!114 &2032115195 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032115192} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.5529412} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: FPS +--- !u!222 &2032115196 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2032115192} + m_CullTransparentMesh: 0 +--- !u!1 &2035796674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2035796678} + - component: {fileID: 2035796677} + - component: {fileID: 2035796676} + - component: {fileID: 2035796675} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2035796675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035796674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2035796674} + TargetComponent: {fileID: 2035796678} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2035796676 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035796674} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2035796677 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035796674} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2035796678 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035796674} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1598.2261, y: -430.64893, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2036416318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2036416322} + - component: {fileID: 2036416321} + - component: {fileID: 2036416320} + - component: {fileID: 2036416319} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2036416319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036416318} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2036416318} + TargetComponent: {fileID: 2036416322} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2036416320 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036416318} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2036416321 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036416318} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2036416322 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2036416318} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 412.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2062046275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2062046279} + - component: {fileID: 2062046278} + - component: {fileID: 2062046277} + - component: {fileID: 2062046276} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2062046276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062046275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2062046275} + TargetComponent: {fileID: 2062046279} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2062046277 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062046275} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2062046278 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062046275} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2062046279 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2062046275} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1584.666, y: -435.21292, z: 424.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2064890239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2064890243} + - component: {fileID: 2064890242} + - component: {fileID: 2064890241} + - component: {fileID: 2064890240} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2064890240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2064890239} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2064890239} + TargetComponent: {fileID: 2064890243} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2064890241 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2064890239} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2064890242 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2064890239} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2064890243 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2064890239} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 420.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2102896243 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2102896247} + - component: {fileID: 2102896246} + - component: {fileID: 2102896245} + - component: {fileID: 2102896244} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2102896244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102896243} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2102896243} + TargetComponent: {fileID: 2102896247} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2102896245 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102896243} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2102896246 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102896243} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2102896247 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102896243} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 398} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2119196662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2119196666} + - component: {fileID: 2119196665} + - component: {fileID: 2119196664} + - component: {fileID: 2119196663} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2119196663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119196662} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2119196662} + TargetComponent: {fileID: 2119196666} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2119196664 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119196662} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2119196665 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119196662} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2119196666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119196662} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -430.72592, z: 404} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2123300234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2123300238} + - component: {fileID: 2123300237} + - component: {fileID: 2123300236} + - component: {fileID: 2123300235} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2123300235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2123300234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2123300234} + TargetComponent: {fileID: 2123300238} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2123300236 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2123300234} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2123300237 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2123300234} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2123300238 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2123300234} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1587.996, y: -435.21292, z: 416.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2133426635 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2133426639} + - component: {fileID: 2133426638} + - component: {fileID: 2133426637} + - component: {fileID: 2133426636} + m_Layer: 0 + m_Name: FlyingCube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2133426636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2133426635} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 83dcb4ea8c2204a43adf98a01a3bc0d1, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: + TargetObject: {fileID: 2133426635} + TargetComponent: {fileID: 2133426639} + TargetScriptableObject: {fileID: 0} + TargetPropertyName: position + ShouldModifyValue: 1 + RelativeValue: 1 + ModifyX: 0 + ModifyY: 1 + ModifyZ: 0 + ModifyW: 1 + Threshold: 0.5 + BoolRemapZero: 0 + BoolRemapOne: 1 + StringRemapZero: Zero + StringRemapOne: One + IntRemapZero: 0 + IntRemapOne: 1 + FloatRemapZero: 0 + FloatRemapOne: 1 + Vector2RemapZero: {x: 0, y: 0} + Vector2RemapOne: {x: 1, y: 1} + Vector3RemapZero: {x: 0, y: 0, z: 0} + Vector3RemapOne: {x: 1, y: 1, z: 1} + Vector4RemapZero: {x: 0, y: 0, z: 0, w: 0} + Vector4RemapOne: {x: 1, y: 1, z: 1, w: 1} + QuaternionRemapZero: {x: 0, y: 0, z: 0} + QuaternionRemapOne: {x: 180, y: 180, z: 180} + ColorRemapZero: {r: 1, g: 1, b: 1, a: 1} + ColorRemapOne: {r: 0, g: 0, b: 0, a: 1} + Level: 0 + CanListen: 1 + Channel: 0 + RandomizeLevel: 1 + MinRandomLevelMultiplier: 0 + MaxRandomLevelMultiplier: 1 +--- !u!23 &2133426637 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2133426635} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 60b87f7fd5cd21f4797f2d0dac2b7782, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2133426638 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2133426635} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &2133426639 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2133426635} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1591.296, y: -435.21292, z: 410.26} + m_LocalScale: {x: 100, y: 100.00004, z: 100.00004} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1675991661} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4044710141230826720 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8296172669118844101} + m_Mesh: {fileID: -5495902117074765545, guid: d15c44bfaa8a88c4790fa0fa2782404a, type: 3} +--- !u!4 &5006512734875221718 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8296172669118844101} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 100.00003, z: 100.00003} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1390428117} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &7718390322990954521 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8296172669118844101} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 859110124559f53448796d58be533933, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8296172669118844101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5006512734875221718} + - component: {fileID: 4044710141230826720} + - component: {fileID: 7718390322990954521} + m_Layer: 0 + m_Name: Crate + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 47384301} + - {fileID: 974558482} + - {fileID: 722569212} + - {fileID: 521836739} diff --git a/Assets/Feel/MMTools/Demos/MMRadio/MMRadioDemo.unity.meta b/Assets/Feel/MMTools/Demos/MMRadio/MMRadioDemo.unity.meta new file mode 100644 index 0000000..e1dbb00 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMRadio/MMRadioDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1696ee9a918086e4f8e67712feab322a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading.meta b/Assets/Feel/MMTools/Demos/MMSceneLoading.meta new file mode 100644 index 0000000..ef79f1c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 849a138428a12d343a81627eb16c022d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading/LoadingTester.prefab b/Assets/Feel/MMTools/Demos/MMSceneLoading/LoadingTester.prefab new file mode 100644 index 0000000..c565a46 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading/LoadingTester.prefab @@ -0,0 +1,409 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7606604563607403345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7606604563607403373} + - component: {fileID: 7606604563607403344} + m_Layer: 0 + m_Name: MMFeedbacks + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7606604563607403373 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7606604563607403345} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7606604564514983439} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7606604563607403344 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7606604563607403345} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + - {fileID: 0} + InitializationMode: 2 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 0 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - id: 0 + - id: 1 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + ForceStopFeedbacksOnDisable: 1 + PlayCount: 0 + references: + version: 1 + 00000000: + type: {class: MMF_DebugLog, ns: MoreMountains.Feedbacks, asm: MoreMountains.Feedbacks.MMTools} + data: + Active: 1 + UniqueID: -1629194672 + Label: Log + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + Owner: {fileID: 7606604563607403344} + DebugActive: 0 + DebugLogMode: 0 + DebugMessage: Loading new scene + DebugColor: {r: 0, g: 1, b: 1, a: 1} + DisplayFrameCount: 1 + 00000001: + type: {class: MMF_LoadScene, ns: MoreMountains.Feedbacks, asm: MoreMountains.Feedbacks.MMTools} + data: + Active: 1 + UniqueID: 771854882 + Label: Load Scene + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + Owner: {fileID: 7606604563607403344} + DebugActive: 0 + LoadingSceneName: MMAdditiveLoadingScreenSimple + DestinationSceneName: SceneB + LoadingMode: 2 + Priority: 4 + InterpolateProgress: 1 + SecureLoad: 1 + UnloadMethod: 2 + AntiSpillSceneName: + BeforeEntryFadeDelay: 0 + EntryFadeDuration: 0.2 + AfterEntryFadeDelay: 0 + BeforeExitFadeDelay: 0.2 + ExitFadeDuration: 0.3 + ProgressInterpolationSpeed: 4 + FadeMode: 0 + EntryFadeTween: + MMTweenDefinitionType: 0 + MMTweenCurve: 9 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 0 + ExitFadeTween: + MMTweenDefinitionType: 0 + MMTweenCurve: 9 + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + Initialized: 0 +--- !u!1 &7606604564514983538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7606604564514983439} + - component: {fileID: 7606604564514983537} + m_Layer: 0 + m_Name: LoadingTester + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7606604564514983439 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7606604564514983538} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 35.406754, y: 256.7045, z: -117.25} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7606604563607403373} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7606604564514983537 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7606604564514983538} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: af3876ae77702e24e8e1b06f675c0860, type: 3} + m_Name: + m_EditorClassIdentifier: + Bindings: + - TargetKey: 32 + OnKeyDown: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 7606604563607403344} + m_TargetAssemblyTypeName: + m_MethodName: PlayFeedbacks + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + OnKey: + m_PersistentCalls: + m_Calls: [] + OnKeyUp: + m_PersistentCalls: + m_Calls: [] diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading/LoadingTester.prefab.meta b/Assets/Feel/MMTools/Demos/MMSceneLoading/LoadingTester.prefab.meta new file mode 100644 index 0000000..ec2707c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading/LoadingTester.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneA.unity b/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneA.unity new file mode 100644 index 0000000..2238645 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneA.unity @@ -0,0 +1,1165 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &239606753 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 239606757} + - component: {fileID: 239606756} + - component: {fileID: 239606755} + - component: {fileID: 239606754} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &239606754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239606753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &239606755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239606753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &239606756 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239606753} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &239606757 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239606753} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 742337577} + - {fileID: 484380748} + - {fileID: 887200827} + - {fileID: 1513866901} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &247886249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 247886251} + - component: {fileID: 247886250} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &247886250 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247886249} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &247886251 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247886249} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &484380747 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 484380748} + - component: {fileID: 484380750} + - component: {fileID: 484380749} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &484380748 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 484380747} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239606757} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &484380749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 484380747} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: SCENE A + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3944eaaf70beffa4097d8c293604125e, type: 2} + m_sharedMaterial: {fileID: 7159369417392969216, guid: 3944eaaf70beffa4097d8c293604125e, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 130.53 + m_fontSizeBase: 130.53 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &484380750 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 484380747} + m_CullTransparentMesh: 0 +--- !u!1 &730946254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 730946255} + - component: {fileID: 730946256} + m_Layer: 0 + m_Name: InputModule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &730946255 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730946254} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 942245309} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &730946256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 730946254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c82cf35166701394ab910f41269944f9, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &742337576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 742337577} + - component: {fileID: 742337579} + - component: {fileID: 742337578} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &742337577 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742337576} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239606757} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &742337578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742337576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.8773585, g: 0.45109472, b: 0.45109472, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 0997c47bcd1429d42abe9c77bb947b44, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &742337579 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742337576} + m_CullTransparentMesh: 0 +--- !u!1 &887200826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 887200827} + - component: {fileID: 887200829} + - component: {fileID: 887200828} + m_Layer: 5 + m_Name: Instructions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &887200827 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 887200826} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239606757} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &887200828 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 887200826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: PRESS SPACE TO LOAD THE NEXT SCENE + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3944eaaf70beffa4097d8c293604125e, type: 2} + m_sharedMaterial: {fileID: 7159369417392969216, guid: 3944eaaf70beffa4097d8c293604125e, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 27 + m_fontSizeBase: 27 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 154.18054, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &887200829 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 887200826} + m_CullTransparentMesh: 0 +--- !u!1 &942245306 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 942245309} + - component: {fileID: 942245308} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &942245308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942245306} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &942245309 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942245306} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 730946255} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1513866900 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1513866901} + - component: {fileID: 1513866903} + - component: {fileID: 1513866902} + m_Layer: 5 + m_Name: Instructions2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1513866901 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1513866900} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239606757} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 397.5} + m_SizeDelta: {x: 0, y: 795} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1513866902 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1513866900} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "MAKE SURE YOU'VE ADDED \nYOUR DESTINATION SCENE TO THE BUILD SETTINGS" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3944eaaf70beffa4097d8c293604125e, type: 2} + m_sharedMaterial: {fileID: 7159369417392969216, guid: 3944eaaf70beffa4097d8c293604125e, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 27 + m_fontSizeBase: 27 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 680.2562, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1513866903 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1513866900} + m_CullTransparentMesh: 0 +--- !u!1 &1586017956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1586017959} + - component: {fileID: 1586017958} + - component: {fileID: 1586017957} + - component: {fileID: 1586017960} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1586017957 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586017956} + m_Enabled: 1 +--- !u!20 &1586017958 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586017956} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1586017959 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586017956} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1586017960 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586017956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e8aa3525151bb343b66b059b6095946, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &1239897488912718230 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalPosition.x + value: 565.82043 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalPosition.y + value: 300.00357 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalPosition.z + value: -117.25 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254381, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_Name + value: SceneStartsTester + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e991e8338c2853d44b4bc3ad13aee865, type: 3} +--- !u!1001 &7606604564696994639 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7606604563607403344, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: FeedbacksList.Array.data[1].DestinationSceneName + value: MMSceneLoadingDemoSceneB + objectReference: {fileID: 0} + - target: {fileID: 7606604563607403375, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: SecureLoad + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7606604563607403375, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: LoadingMode + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7606604563607403375, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: ExitFadeDuration + value: 0.3 + objectReference: {fileID: 0} + - target: {fileID: 7606604563607403375, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: LoadingSceneName + value: MMAdditiveLoadingScreenBigText + objectReference: {fileID: 0} + - target: {fileID: 7606604563607403375, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: EntryFadeDuration + value: 0.3 + objectReference: {fileID: 0} + - target: {fileID: 7606604563607403375, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: InterpolateProgress + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7606604563607403375, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: DestinationSceneName + value: MMSceneLoadingDemoSceneB + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalPosition.x + value: 35.406754 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalPosition.y + value: 256.7045 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalPosition.z + value: -117.25 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983538, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_Name + value: LoadingTester + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, type: 3} diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneA.unity.meta b/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneA.unity.meta new file mode 100644 index 0000000..5029383 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneA.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 49d909d12efd2714f9b79de2eea67561 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneB.unity b/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneB.unity new file mode 100644 index 0000000..e6ec28d --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneB.unity @@ -0,0 +1,1145 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1001 &40698511 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7606604563607403344, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: FeedbacksList.Array.data[1].DestinationSceneName + value: MMSceneLoadingDemoSceneA + objectReference: {fileID: 0} + - target: {fileID: 7606604563607403375, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: DestinationSceneName + value: MMSceneLoadingDemoSceneA + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalPosition.x + value: 35.406754 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalPosition.y + value: 256.7045 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalPosition.z + value: -117.25 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983439, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7606604564514983538, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, + type: 3} + propertyPath: m_Name + value: LoadingTester + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 2cdbdb3e4380b5d4b849d9dddd7a7d00, type: 3} +--- !u!1 &239606753 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 239606757} + - component: {fileID: 239606756} + - component: {fileID: 239606755} + - component: {fileID: 239606754} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &239606754 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239606753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &239606755 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239606753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &239606756 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239606753} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &239606757 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 239606753} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 742337577} + - {fileID: 484380748} + - {fileID: 314024497} + - {fileID: 1789575321} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &247886249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 247886251} + - component: {fileID: 247886250} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &247886250 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247886249} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &247886251 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247886249} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &314024496 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 314024497} + - component: {fileID: 314024499} + - component: {fileID: 314024498} + m_Layer: 5 + m_Name: Instructions + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &314024497 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314024496} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239606757} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &314024498 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314024496} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: PRESS SPACE TO LOAD THE NEXT SCENE + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3944eaaf70beffa4097d8c293604125e, type: 2} + m_sharedMaterial: {fileID: 7159369417392969216, guid: 3944eaaf70beffa4097d8c293604125e, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 27 + m_fontSizeBase: 27 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 154.18054, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &314024499 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314024496} + m_CullTransparentMesh: 0 +--- !u!1 &484380747 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 484380748} + - component: {fileID: 484380750} + - component: {fileID: 484380749} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &484380748 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 484380747} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239606757} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &484380749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 484380747} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: SCENE B + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3944eaaf70beffa4097d8c293604125e, type: 2} + m_sharedMaterial: {fileID: 7159369417392969216, guid: 3944eaaf70beffa4097d8c293604125e, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 130.53 + m_fontSizeBase: 130.53 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &484380750 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 484380747} + m_CullTransparentMesh: 0 +--- !u!1 &742337576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 742337577} + - component: {fileID: 742337579} + - component: {fileID: 742337578} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &742337577 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742337576} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239606757} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &742337578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742337576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4509804, g: 0.6836616, b: 0.8784314, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 0997c47bcd1429d42abe9c77bb947b44, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &742337579 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 742337576} + m_CullTransparentMesh: 0 +--- !u!1001 &778889783 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_RootOrder + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalPosition.x + value: 565.82043 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalPosition.y + value: 300.00357 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalPosition.z + value: -117.25 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254376, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254378, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: FeedbacksList.Array.data[0].DebugMessage + value: Scene B loaded + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254379, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: DebugMessage + value: Scene B loaded + objectReference: {fileID: 0} + - target: {fileID: 1239897487718254381, guid: e991e8338c2853d44b4bc3ad13aee865, + type: 3} + propertyPath: m_Name + value: SceneStartsTester + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: e991e8338c2853d44b4bc3ad13aee865, type: 3} +--- !u!1 &942245306 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 942245309} + - component: {fileID: 942245308} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &942245308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942245306} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &942245309 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942245306} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1828591711} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1586017956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1586017959} + - component: {fileID: 1586017958} + - component: {fileID: 1586017957} + - component: {fileID: 1586017960} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1586017957 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586017956} + m_Enabled: 1 +--- !u!20 &1586017958 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586017956} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1586017959 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586017956} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1586017960 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586017956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e8aa3525151bb343b66b059b6095946, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1789575320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1789575321} + - component: {fileID: 1789575323} + - component: {fileID: 1789575322} + m_Layer: 5 + m_Name: Instructions2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1789575321 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789575320} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 239606757} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 397.5} + m_SizeDelta: {x: 0, y: 795} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1789575322 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789575320} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "MAKE SURE YOU'VE ADDED \nYOUR DESTINATION SCENE TO THE BUILD SETTINGS" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 3944eaaf70beffa4097d8c293604125e, type: 2} + m_sharedMaterial: {fileID: 7159369417392969216, guid: 3944eaaf70beffa4097d8c293604125e, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 27 + m_fontSizeBase: 27 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 1 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 680.2562, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1789575323 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1789575320} + m_CullTransparentMesh: 0 +--- !u!1 &1828591710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1828591711} + - component: {fileID: 1828591712} + m_Layer: 0 + m_Name: InputModule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1828591711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828591710} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 942245309} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1828591712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1828591710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c82cf35166701394ab910f41269944f9, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneB.unity.meta b/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneB.unity.meta new file mode 100644 index 0000000..47ec5d8 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading/MMSceneLoadingDemoSceneB.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 352d34cac2435634fb99618d19a3929c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading/SceneStartsTester.prefab b/Assets/Feel/MMTools/Demos/MMSceneLoading/SceneStartsTester.prefab new file mode 100644 index 0000000..403db34 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading/SceneStartsTester.prefab @@ -0,0 +1,201 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1239897487718254381 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1239897487718254376} + - component: {fileID: 1239897487718254378} + m_Layer: 0 + m_Name: SceneStartsTester + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1239897487718254376 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1239897487718254381} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 565.82043, y: 300.00357, z: -117.25} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1239897487718254378 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1239897487718254381} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6da43522623d4704e979466dc7650b65, type: 3} + m_Name: + m_EditorClassIdentifier: + Feedbacks: + - {fileID: 0} + InitializationMode: 2 + SafeMode: 3 + Direction: 0 + AutoChangeDirectionOnEnd: 0 + AutoPlayOnStart: 1 + AutoPlayOnEnable: 0 + ForceTimescaleMode: 0 + ForcedTimescaleMode: 1 + DurationMultiplier: 1 + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 1.5} + DisplayFullDurationDetails: 0 + PlayerTimescaleMode: 1 + OnlyPlayIfWithinRange: 0 + RangeCenter: {fileID: 0} + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + IgnoreRangeEvents: 0 + CooldownDuration: 0 + InitialDelay: 0 + CanPlay: 1 + CanPlayWhileAlreadyPlaying: 1 + ChanceToPlay: 100 + FeedbacksIntensity: 1 + Events: + TriggerMMFeedbacksEvents: 0 + TriggerUnityEvents: 1 + OnPlay: + m_PersistentCalls: + m_Calls: [] + OnPause: + m_PersistentCalls: + m_Calls: [] + OnResume: + m_PersistentCalls: + m_Calls: [] + OnRevert: + m_PersistentCalls: + m_Calls: [] + OnComplete: + m_PersistentCalls: + m_Calls: [] + OnRestoreInitialValues: + m_PersistentCalls: + m_Calls: [] + OnSkipToTheEnd: + m_PersistentCalls: + m_Calls: [] + DebugActive: 0 + FeedbacksList: + - id: 0 + KeepPlayModeChanges: 0 + PerformanceMode: 0 + ForceStopFeedbacksOnDisable: 1 + PlayCount: 0 + references: + version: 1 + 00000000: + type: {class: MMF_DebugLog, ns: MoreMountains.Feedbacks, asm: MoreMountains.Feedbacks.MMTools} + data: + Active: 1 + UniqueID: -102290195 + Label: Log + ChannelMode: 0 + Channel: 0 + MMChannelDefinition: {fileID: 0} + Chance: 100 + DisplayColor: {r: 0, g: 0, b: 0, a: 1} + Timing: + TimescaleMode: 0 + ExcludeFromHoldingPauses: 0 + ContributeToTotalDuration: 1 + InitialDelay: 0 + CooldownDuration: 0 + InterruptsOnStop: 1 + NumberOfRepeats: 0 + RepeatForever: 0 + DelayBetweenRepeats: 1 + MMFeedbacksDirectionCondition: 0 + PlayDirection: 0 + ConstantIntensity: 0 + UseIntensityInterval: 0 + IntensityIntervalMin: 0 + IntensityIntervalMax: 0 + Sequence: {fileID: 0} + TrackID: 0 + Quantized: 0 + TargetBPM: 120 + AutomatedTargetAcquisition: + Mode: 0 + ChildIndex: 0 + RandomizeOutput: 0 + RandomMultiplier: {x: 0.8, y: 1} + RandomizeDuration: 0 + RandomDurationMultiplier: {x: 0.5, y: 2} + UseRange: 0 + RangeDistance: 5 + UseRangeFalloff: 0 + RangeFalloff: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + RemapRangeFalloff: {x: 0, y: 1} + Owner: {fileID: 1239897487718254378} + DebugActive: 0 + DebugLogMode: 0 + DebugMessage: Scene A loaded + DebugColor: {r: 0, g: 1, b: 1, a: 1} + DisplayFrameCount: 1 diff --git a/Assets/Feel/MMTools/Demos/MMSceneLoading/SceneStartsTester.prefab.meta b/Assets/Feel/MMTools/Demos/MMSceneLoading/SceneStartsTester.prefab.meta new file mode 100644 index 0000000..0644b04 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMSceneLoading/SceneStartsTester.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e991e8338c2853d44b4bc3ad13aee865 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween.meta b/Assets/Feel/MMTools/Demos/MMTween.meta new file mode 100644 index 0000000..11672b3 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e31c50c65e926134bbbf37c3d53724eb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Camera.meta b/Assets/Feel/MMTools/Demos/MMTween/Camera.meta new file mode 100644 index 0000000..b5dd355 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Camera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6730a711cd3171d4d9352d1a6724d5bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Camera/MMPlotterPostProcessingProfile.asset b/Assets/Feel/MMTools/Demos/MMTween/Camera/MMPlotterPostProcessingProfile.asset new file mode 100644 index 0000000..b95795e --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Camera/MMPlotterPostProcessingProfile.asset @@ -0,0 +1,86 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8e6292b2c06870d4495f009f912b9600, type: 3} + m_Name: MMPlotterPostProcessingProfile + m_EditorClassIdentifier: + settings: + - {fileID: 114177529302086446} + - {fileID: 114266453254661978} +--- !u!114 &114177529302086446 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 48a79b01ea5641d4aa6daa2e23605641, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + intensity: + overrideState: 1 + value: 1 + threshold: + overrideState: 1 + value: 1 + softKnee: + overrideState: 1 + value: 0.5 + clamp: + overrideState: 1 + value: 65472 + diffusion: + overrideState: 1 + value: 7 + anamorphicRatio: + overrideState: 1 + value: 0 + color: + overrideState: 1 + value: {r: 1, g: 1, b: 1, a: 1} + fastMode: + overrideState: 1 + value: 0 + dirtTexture: + overrideState: 1 + value: {fileID: 0} + defaultState: 1 + dirtIntensity: + overrideState: 1 + value: 0 +--- !u!114 &114266453254661978 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b94fcd11afffcb142908bfcb1e261fba, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 1 + enabled: + overrideState: 1 + value: 1 + shutterAngle: + overrideState: 1 + value: 130 + sampleCount: + overrideState: 1 + value: 10 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Camera/MMPlotterPostProcessingProfile.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Camera/MMPlotterPostProcessingProfile.asset.meta new file mode 100644 index 0000000..0632c23 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Camera/MMPlotterPostProcessingProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a362ed6a986e00d43b99c55140c54676 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts.meta new file mode 100644 index 0000000..9dcfd4c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d148706d3212b6f4a892600fb307b66d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato.meta new file mode 100644 index 0000000..9464274 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6adc57cae425d9e4eb42c4d22ec59306 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/OFL.txt b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/OFL.txt new file mode 100644 index 0000000..3c5455f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/OFL.txt @@ -0,0 +1,94 @@ +Copyright (c) 2010-2015, Łukasz Dziedzic (dziedzic@typoland.com), +with Reserved Font Name Lato. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/OFL.txt.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/OFL.txt.meta new file mode 100644 index 0000000..254e9bb --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/OFL.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6822e89519d32f4898fafd42f78e8fe +timeCreated: 1506413398 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF.meta new file mode 100644 index 0000000..9978f61 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b243ce47a89f9544aa86e966caf34c4a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato SDF.asset new file mode 100644 index 0000000..8a09a9f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato SDF.asset @@ -0,0 +1,2698 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-4344941099567136234 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f202020202020110f090000000000000000000000000000000000000000000913191c20202020201a17110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0d0f12131415141413110f0d0b0500000000000000000000000000000000000000000000000000050b0d0f0f0d0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d101314151616161513110e0b08010000000000000000000000000000000000040d1315202020202020202020202020202020202020201f1e1d1a17130e0b07000000000000000000000000000000000000000000000000040d131520202020202012100a0100000000000000000000000000000000000000070c0e1b1f2020202020190b070000000000000000060b0d2020202020202020202020202020202020202020202020202020202020202020202020202020200801000000000000000000000000080d0f202020201f1a0e0c060000000000000000000000000000000000000000000000000000000000040d13152020202020202020202020202020202020202020202020202020202012100a0100000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212435353535353526241d12040000000000000000000000000000000000000d1b262e3135353535352f2c24190b0000000000000000000000000000000000000000000000000000000000000000000000000000000001080b10131c2022252728292a2a2928262422201817110c0a04000000000000000000000000000000000000000d192022242422201c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1519202225282a2b2b2c2b2a282623201c14100b0700000000000000000000000000071521282b353535353535353535353535353535353535353433322f2c2823201c1308080000000000000000000000000000000000000000071521282b35353535353527251e130500000000000000000000000000000000010f1a2124303435353535352e201c130800000000000e1920233535353535353535353535353535353535353535353535353535353535353535353535353535351d150900000000000000000002101b222535353535342f2321190e000000000000000000000000000000000000000000000000000000071521282b3535353535353535353535353535353535353535353535353535353528251e13050000000000000000000000000000000000000000000000000000000000000000000000000000000f202d36394a4a4a4a4a4a3c382f22120000000000000000000000000000000000001b2b3842464a4a4a4a4a444036291900000000000000000000000000000000000000000000000000000000000000000000000000000809151d2025253035373a3c3e3f3f3f3e3d3c3a37342b2c27211f170c0a040000000000000000000000000000000d1d2b34373939383530251810020000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f1a21232a2b34383a3d3f404141403f3d3b3835302625201c130805000000000000000000041525333c404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494745423e39353025231c11080100000000000000000000000000000000041525333c404a4a4a4a4a4a3c39302313010000000000000000000000000000000f1f2d3639454a4a4a4a4a4a4435302518080000000e1e2b354a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a31271909000000000000000010202e373a4a4a4a4a494438352c1e0e00000000000000000000000000000000000000000000000000041525333c404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3d393023130100000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4a4e606060606060514c402f1d09000000000000000000000000000000000e1e3849565b6060606060595447361b0b000000000000000000000000000000000000000000000000000000000000000000000108111c232731353b36434a4c4f52535454545453514f4d483b413c373329211f170b0600000000000000000000000005192b3b484d4e4e4d4a43362e2010000000000000000000000000000000000000000000000000000000000000000000000000000000040b171e212c35383f3c484d505254555656555553504d4b43363a35302520190d06000000000000000d2133435055606060606060606060606060606060606060605f5e5c5a57534e4a4336372e201d15090000000000000000000000000000000d2133435055606060606060524d41301e0a00000000000000000000000000000e1e2d3d4a4e5a5f6060606060594a43362513000006192b3c485e60606060606060606060606060606060606060606060606060606060606060606060606060605e4437271501000000000000081b2e3f4b4f606060605e594d493c2c1d0d0000000000000000000000000000000000000000000000000d213343505560606060606060606060606060606060606060606060606060606060524d41301e0a000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c70757575757575665e4c38240a00000000000000000000000000000006192b3c56677175757575756f655439281603000000000000000000000000000000000000000000000000000000000000000008141c202e3737444b5055546062646768696a696968666462595b56514c473a363329211a0f06000000000000000000000b203448596264646260544b3e2e1d0d000000000000000000000000000000000000000000000000000000000000000000000000000b171f2933363d494e54595a626568696a6b6b6b6a6866636054554f4a4336342b20190e03000000000013283c50616a757575757575757575757575757575757575757473726f6c68636054504b3f3531271911030000000000000000000000000013283c50616a757575757575675f4d392510000000000000000000000000000b1b2b3c4a5b63707475757575756e605443301c07000b2035485a707575757575757575757575757575757575757575757575757575757575757575757575757575705544311d080000000000000d22374b5d6475757575746f635b493b2a1805000000000000000000000000000000000000000000000013283c50616a75757575757575757575757575757575757575757575757575757575675f4d392510000000000000000000000000000000000000000000000000000000000000000000000000000f24394e647a8a8a8a8a8a8a7c66513828150200000000000000000000000000000b2035485a71858a8a8a8a8a836f5746321e090000000000000000000000000000000000000000000000000000000000000411182630353f4b505560656b6f74777a7c7d7e7f7f7e7d7b797774706c666158534c463a352c20190e0200000000000000000d22374d627879797873645c4b3b2b18050000000000000000000000000000000000000000000000000000000000000000000005141b293339464b545b636a6f73777a7d7f808081807f7d7b7874706a6560544d483c352c1e170b00000000152b40556a808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888784817d79746c655d524b44372f1e160b000000000000000000000000152b40556a808a8a8a8a8a8a7d67523c27120000000000000000000000000919293a485a637985898a8a8a8a8a8372604a35200b000d23384d62788a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a74604b35200b0000000000000f253a4f647a8a8a8a8a898479635948341f0e0000000000000000000000000000000000000000000000152b40556a808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523d281200000000000000000000000000000000000000000000000000000000000000000000000006192b3c556a80959f9f9f9f98826d5645321d0900000000000000000000000000000d23384d62788da39f9f9f9f8a76614b36210c00000000000000000000000000000000000000000000000000000000000b171f2f36434b525d656d747b8085898c8f91939494949392918f8c8985817c766f6861584e493d352c1e160a0000000000000012273d52677c8e8e8d867a64594834200a0000000000000000000000000000000000000000000000000000000000000000000d181f313a464c57616971787f84888d8f9294959696959492908d8985807a736b625a4d493c33291b11030000152b40556a80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9f9e9c9a97938e88817a716760554c3f32281b0e0000000000000000000000152b40556a80959f9f9f9f917c67523c271200000000000000000000000215273746586278889a9fa89fa69b8575615443301c07000d23384d62788d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8a75604b35200b0000000000000d22374b5d6f849a9fa89e998877624c3c2c190600000000000000000000000000000000000000000000152b40556a80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000b2035485a71869bb1b5b5b49e8975604b36200b0000000000000000000000000005192b3c54697f94a9c1b5baa9917c675137271501000000000000000000000000000000000000000000000000000002101b2933404c546067717a828990959a9ea8a4a7a8a9a9a9a9a8a6a4a79e9b96918b847d766c635b4d493c32281a0a0000000000000b20364b6075889ea49c8a77624d3928160300000000000000000000000000000000000000000000000000000000000002101d2a34424e58616b767e868d94999ea7a5a7a9aaababaaaaa8a5a89e9a958f8780786d635a4b46392f21110000152b40556a8095aab5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bcb5b4b3b1afaca8a69d978f867d74655d4b46392c1e1002000000000000000000152b40556a8095aab5b5a7917c67523c27120000000000000000000005131d3144556176869ca6b4baa99d887862574636251300000d22384d62778da8bab5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a08a75604b35200b000000000000081b2e3f4f647a8fa1b3b3a697826d5a4935200e00000000000000000000000000000000000000000000152b40556a8095aab5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da3b5c9ccb9a8917c6651382816020000000000000000000000000b2035485a70859bb0c5d7c7ad98826d5544311d08000000000000000000000000000000000000000000000000000412202d3a464c5e66737d868f979ea7aaaba7aa9f9d9b9a999a9a9b9d9fa9a5a9abaa9f9a938a82796d635a4b45382816020000000000091d3145566b8096aba896816c5745321e0900000000000000000000000000000000000000000000000000000000000311202d3b474c6068768089939ca4a9aeb3b8c5bab7b6b5b5b7b8bac6b9b4b0aaa59d958b82786c61574c3f2f1c0900152b40556a8095aabfd1c0b4afacacacacacacacacacacacacadaeb0b3b9c4b8b3aca49c92867b6d6157493c2d2010010000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000003132333434b6073849aa4b6bcab9f8b7a6459483928180800000b20354b6074899fb4c2d3cacfbeb2adacacacacacacacacacacacacacacacacacacacacacacacacacaca08a75604b35200b000000000000001022364a5c6f8499aebfb49f8c78634d3c2c1906000000000000000000000000000000000000000000152b40556a8095aabfd3c3b6b2b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000004172a3a54697e93a9c2d2d6c6ad98826d5645321e090000000000000000000000000d22384d62788da3b5c9dec8b39e8974604b35200b000000000000000000000000000000000000000000000000051322303e4a58616d7b86929ca4adaba49c96928d8a88868584848586888a8d9094999ea8ada89e978c82786a605645321e090000000000021527384e63788c9fb39e8975604b36210f000000000000000000000000000000000000000000000000000000000211212f3e4a59626f7e88959ea8b1b5c2b6b1aca8a4a2a1a0a0a1a3a5a9adb2b7c3b7b2aa9f988b8175655d4c38230e00152b40556a8095aabfc8b4a29a96969696969696969696969797989b9ea7a8b0b4c0b5b1a49c908275635b4a3e2d1f0f0000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000011121314150616d8297a2b4beb59f8d7d675c4a3b2b1b0b000000081d3144556b8096a4b6c7d8c6b2a0989797979797979797979797979797979797979797979797979797978a75604b35200b00000000000000071b2e3e4f647a8ea1b3bbaa97826d5a4935200e000000000000000000000000000000000000000000152b40556a8095aabfcab6a59c9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000a1f33475870859aafc5dadec9b49e8975604b36210b000000000000000000000005192b3c54697f94a9c1d2dfccb8a7907b65503b2510000000000000000000000000000000000000000000000005132331404d5c647682909ca4b1a69d958d87817c78757270706f6f70717275777b7f848990979ea8ab9f988b8074604b36210b0000000000000a2135495b6f849aafa8927d68533d2d1a0700000000000000000000000000000000000000000000000000000010202f3f4c5c647783939ea6b3b9b8b3aba49c97928f8d8b8a8b8c8d8f94989da6acb4b9bbb4aa9f96877c65503b261000152b40556a8095aabfc4af9a84818181818181818181818181828386898e939ba2adb2beb6b1a0978679645c4a3d2d1d0d00000000000000152b40556a8095aabfbca7917c67523c271200000000000000000f1f2e3f4d5f6a7f95a0b1c0b2a0957f6a5f4d3e2d1d0d00000000011426374b6075869ca9bacec2ad98828282828282828282828282828282828282828282828282828282828173604b35200b00000000000000001022364a5c6e8399abbcb49f8b78634d3c2b19060000000000000000000000000000000000000000152b40556a8095aabfc7b29c878586868686868686868686868686868686868686857b66503b261100000000000000000000000000000000000000000000000000000000000000000000000c21374c61778b9fb4caccc9ccb9a8917c665138281602000000000000000000000b2035485a70859bb0c5cec9cec5ac96816c573e2d1b0700000000000000000000000000000000000000000002122331414e5f677a8798a0b1a69d93888078726c676360555b5a5a5a5a5b546062656a6f757b8289939ca5a99f8a77624d37220d000000000000061a2c3d52677c91a6b09b85705c4a36210b00000000000000000000000000000000000000000000000000000e1e2e3e4c5d657a8899a1b3b8b9b4a79e958e87827d7a7776757677787a7e83888f979ea8b3b8bbb4a59b86715c46311c00152b40556a8095aabfbda8927d6c6c6c6c6c6c6c6c6c6c6c6c6d6e7174787e858e98a0b2b6beb1a49c887a645b4a3b2b1808000000000000152b40556a8095aabfbca7917c67523c2712000000000000000d1d2c3d4b5d677d929eafbeb4a398826d615041302010000000000000091e324557647a8b9fb4c0c1ac96816d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d605443301c080000000000000000071b2d3e4e63798c9fb5bbaa97826d5a4935200e0000000000000000000000000000000000000000152b40556a8095aabfbca7917d707070707070707070707070707070707070707070665e4c38230f000000000000000000000000000000000000000000000000000000000000000000000316283852687d92aabbc6b9b3b9c6ad98836d5645321e09000000000000000000000d22384d62788da3b5c7bab4bac7b29d87725c4a36220d000000000000000000000000000000000000000000102030414e5f687d8b9da5ab9f96887e746b635b56524d4b44374544454536434a4d50545660666d767e87929d99846f594834200b000000000000000e20364b6075889eb3a38e79644e392816030000000000000000000000000000000000000000000000000a1a2c3c4b5c657b8a9da6b3bfb4a89e94888079726c686562616060626365696d747a8289959ea7b8c3b19b86715c46311c00152b40556a8095aabfbda8927d6857575757575757575757575859546063697079838f9ca5b3bfb6a69e8979635948362614010000000000152b40556a8095aabfbca7917c67523c27120000000000000a1b2a3b495b657b8c9fb4bcb7a59b8574604b4333231202000000000000031628394a5c697f94a2b4c5b09f907c6659575757575757575757575757575757575757575757575757574b43362614010000000000000000001021364a5b6e8398abbcb49f8b78624d3c2b190600000000000000000000000000000000000000152b40556a8095aabfbca7917c675b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b504c402f1c0900000000000000000000000000000000000000000000000000000000000000000000091e3245566e8399aec8b9a89ea8b9b49e8975604b36210b00000000000000000005192b3c54697e94a9c1baa99fa9bab7a58e79644f39240f00000000000000000000000000000000000000000c1c2d3e4d5f687e8d9fa9a69d8c80756860554e493d3d38353126302f2f30253035383b38454b50576168737d888b7b65503b2b180500000000000000091d3145566b8096abac97816c5746321e09000000000000000000000000000000000000000000000002152738495a647b8a9ea8b7bdb1a29a8a7f756b635b57534f4d4c4b4b4c4e50545460656c767f899eb3c6b19b86715c46311c00152b40556a8095aabfbda8927d6853414141414141414141424236434a4e535c646e7b8799a1b2beb8a79d8877625443301c0d0000000000152b40556a8095aabfbca7917c67523c271200000000000818283947596379899eaabbb9a89d87776256453225150500000000000000000a1b2d3e4a6072849aa7b8bdb39d8877614c424242424242424242424242424242424242424242424242353026180800000000000000000000071a2d3d4e63798c9fb4bbaa97826d5a4835200e00000000000000000000000000000000000000152b40556a8095aabfbca7917c6752464646464646464646464646464646464646463b382f221100000000000000000000000000000000000000000000000000000000000000000000000b21364b6075899fb4c9b39e899eb3b9a8917c66513828160200000000000000000b2035485a70859bb0c5b49f8a9fb4c3aa95806a553c2c19060000000000000000000000000000000000000417293a4a5c677d8c9faba39b887a6b60564b4437352c2723201d141b1a1a1b131c20222627313639464b5560687577655d4b371d0d0000000000000000021527384d63788c9fb39e8975614b36210f0000000000000000000000000000000000000000000000091d3145566378899ea8b9bdb09f9784786a60574e493d3d3a3836353637383a36434a5058616a7d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d2c2c2c2c2c2c2c2c2c2d253035393d4a4e5d65768398a0b2c0b7a69a8473604b3b2b180500000000152b40556a8095aabfbca7917c67523c2712000000000114263645576277879da7b9bcab9e8a796359473828160700000000000000000000101c3043546277899eb3bdb8a699836f604e3d2c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201c14080000000000000000000000000f2136495b6d8298aabbb49f8b78624d3c2b1905000000000000000000000000000000000000152b40556a8095aabfbca7917c67523c31313131313131313131313131313131313126231c1103000000000000000000000000000000000000000000000000000000000000000000000114263751667c91a8bac7ac968196a8b9ad98836d5645321e0900000000000000000d22384d62788c9fb5b8a7988398aec3b19c86715a4935200c000000000000000000000000000000000000091f334758647a8b9faaa39b8577645c4b45383127211a120e0b08020005050000070b0d10151d20293237444b556062594b3f2e1c000000000000000000000a2035495a6f849aafa8927d68533d2d1a07000000000000000000000000000000000000000000061a2c3d4b6074859ba7b8bfb09f968173625a4b4539352c2825222120212223252530353a4753687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d28171717171717171718131c20232d363f4b5861738298a2b4c4b4a2947f6a594834200e00000000152b40556a8095aabfbca7917c67523c271200000004121c3043546075859ba5b7bdb49f8d7c665b4a3b2a1a0a0000000000000000000000001325364859667c919fb1c3b3a1937e685b49382815181818181818181818181818181818181818180b080100000000000000000000000000061a2c3d4e63798c9fb4bbaa97816c5a4835200d000000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b110f09000000000000000000000000000000000000000000000000000000000000000000000000081d3144556d8297adc6baa98f7a899eb4b49e8975604b36210b0000000000000005192b3c54697e94abbcb39e897c91a7c3b5a48d78624d38230d000000000000000000000000000000000009192f3f4c6176879da9a49b857562594b3e32281f2125262624201d1509090000040b161e212527282623263137444b4c473b2e21110000000000000000000006192c3c51677c91a6b09b85705c4a36210b0000000000000000000000000000000000000000000c2135495b6b8095a3b5c4b3a196816d6055483c3228211a13100d0c0b0b0d0e10131c20293d53687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d2813020202020202020000070b0f1a212e3a46556074849ba7b9c0b49f8a77624d3c2b1906000000152b40556a8095aabfbca7917c67523c2712000002122232434b60728399a3b5c0b19f947f695e4c3d2d1d0d0000000000000000000000000008182b3b4d5e6d8297a4b6bfb49f8a79635645321d1100020202020202020202020202020202020200000000000000000000000000000000000f2135495b6d8298aabbb49f8b78624d3c2b19050000000000000000000000000000000000152b40556a8095aabfbca7917c67523c2712060606060606060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074889eb3c8b49f89748499aeb9a8917c6651382816030000000000000b2034485a70859bb0c7ad9883788da5b7c2a9947e69543a2a1804000000000000000000000000000000011426374b5d6d8298a5a99c86766157483b2e232a33373a3c3b39363127231c110c171f2832363a3d3d3b38352c27313637342a1d110300000000000000000000000e20364b6074889db3a38e79644e3928160300000000000000000000000000000000000000071a2d3d4e63798b9fb4c1b7a6998372604b44372b1e160a06000000000000000000000713283d53687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d281300000000000000000000000007111b293745566277899eb3c2baa898826d5a48352009000000152b40556a8095aabfbca7917c67523c27120000102030404f616c8196a1b3c1b4a297816d614f402f1f0f0000000000000000000000000000000d1d30404b6175869caabbbaa99b8574604b3f2f1c0c00000000000000000000000000000000000000000000000000000000000000000000061a2c3d4d63788b9fb4bbaa97816c5a4834200d0000000000000000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa7b8c5af9a85707e93abbcad98836e5645321e090000000000000d22384d62788c9fb5baa9927d72889db2c5b09a85705947341f0a000000000000000000000000000000081d314455657b90a0b49f8a79635847392b2f383a474c4f51504e4b4437382f201c2a3339464b505252514d493c38352b221f180d00000000000000000000000000081d3144556b8095abac97816c5746321e09000000000000000000000000000000000000000c21364a5b6e8399aabbc0b29d88766154433127190e030000000000000000000000000013283d53687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000b1927384859687e93a4b6c6b49f8b78624d372715010000152b40556a8095aabfbca7917c67523c2712000e1e2e3e4d5e697f949fb0bfb6a59a8473604b433222120100000000000000000000000000000000121e324657647a8b9fb4c0b5a396806b5d4c3a2a1704000000000000000000000000000000000000000000000000000000000000000000000e2035495a6d8297a9bab49f8b78624d3b2b190500000000000000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d566c8196abc5c4aa947f6a778c9fb5b49e8975604b36210b000000000005192b3c54697e94abbcb49f8a766d8297acc7b49f8b77614c37220c0000000000000000000000000000000b20354b6073869cb1a3937e685b4a3a2a30404c505861646666636055504c40352b3a474c576165676766625a564d483c32281a0e00000000000000000000000000021527374d62788c9fb39e8975614b36210f000000000000000000000000000000000000031628384e63798ea1b3c8b4a2917c6658463626150900000000000000000000000005060613283d53687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000a1a2b3b4b6073869cb1c5bbaa96816b5544311d080000152b40556a8095aabfbca7917c67523c27120c1c2b3c4a5c667c8d9fb4bdb9a79c8776615544312514040000000000000000000000000000000000031628394a5c6a7f94a2b4c2b59f8d7b655847331f140100000000000000000000000000000000000000000000000000000000000000000006192c3c4d62788b9fb4baa997816c594834200d00000000000000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c72879db2c7b7a68e796470859ab0b9a8917c665138281603000000000b2034485a70859bb0c7ae99846f667c91a9babcab927d68533928160300000000000000000000000000081c2e3f52677c91a4b09b8573604b3d2d36434b5e6670777a7b7b79756e655e4d483c4858616c767a7c7d7b78726b625a4b45382c1e0f01000000000000000000000000092035495a6f849aafa8927d68533e2d1a070000000000000000000000000000000000091e3245566d8297acbfc3b09a85705e4c3a29180800000000000000000000080e101b1c1c1c283d53687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000d1d314455687d92a7b9c8b39e8874604b35200b0000152b40556a8095aabfbca7917c67523c27121a293a495a647a8b9fabbcbbaa9e897963584737271507000000000000000000000000000000000000000b1b2d3e4b6073849aa7b9bcab9d8876614c42311f0f000000000000000000000000000000000000000000000000000000000000000000000e2035485a6c8197a9bab49f8a78624d3b2b1805000000000000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea5b6c8b29d88735c697e93abbcad98836e5645321e09000000000d22384d62788c9fb5baa9927d6761768a9fb4c9ae99836e5745321e09000000000000000000000000000e23374b5d71869bb1a28f7a64544330304354606d7b858b8f91908e89837b6f625a4b596276818a8f9292908d8780786b6056493c2c1f0f00000000000000000000000006192c3c51677c91a6b09b85705c4a36210b00000000000000000000000000000000000b21364b6075899eb4c9b6a5907b6550402f1c0c00000000000000000003111c232530313131313d53687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000011426374b6075899eb3c9b8a7907b65503b26100000152b40556a8095aabfbca7917c67523c2715273847586278889ea9babdb49f8c7c655b493a2a1909000000000000000000000000000000000000000000101c3043546278899eb3beb7a699836e604e3d2c190900000000000000000000000000000000000000000000000000000000000000000005192b3c4d62788a9fb4baa996816c594834200d000000000000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c556a7f95aac3c7ac97816c5762778b9fb4b49e8975604b36210b00000005192b3b54697e94abbcb49f8a7661576f8499afc4b49f8a76604b36210b000000000000000000000000021527374f657a8fa3af9a846f5c4b362f3f4b607281909a9faba6a5a89f99908478645c627887979fa8a7a7a6a59d968b8075625a493d2c1c0c0000000000000000000000000e20354b6074889db3a38e79644e392816030000000000000000000000000000000012273c51677c91a8b9c7b29c8773604a3520120000000000000000000011212f383b45464646464653687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000091e3245566d8298adc2c5ac96816c573929160300152b40556a8095aabfbca7917c67523c271d3145566176869ca6b8bfb19f937e695e4c3d2c1c0c0000000000000000000000000000000000000000000001142636485a677d91a0b2c3b3a1937e685b49372715020000000000000000000000000000000000000000000000000000000000000000000e203448596c8196a9bab49f8a77624d3b2b18050000000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a71869bb1c6baa9907b66515970859aafb9a8917c66513828160300000b2034485970859bb0c7ae99836e5753697e93a8c2baa9917c6651372715010000000000000000000000081d3144556c8197aca6907b65503e2e384b5d6c81979fb0b4ab9f9d9d9faba29a887a646f849aa5ab9f9b98999ca4aa9f968678635b493a2a18040000000000000000000000081d3144556b8095abac97816c5746321e0900000000000000000000000000000005182a3b586d8298adc6c7aa95806b5443301c07000000000000000000081c2f3f4b505a5b5b5b5b5b5b687d92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000316283852677c91a7c4c6b19b86715746321e0a00152b40556a8095aabfbca7917c67523c2733444b6074849aa4b6c2b3a196816c604e402f1f0f00000000000000000000000000000000000000000000000008182b3c4d5f6d8298a5b6bfb49f8a79635544311d1100000000000000000000000000000000000000000000000000000000000000000005192b3b4c62778a9fb4baa996816c594834200d0000000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788da3b5c9b49f8a75604b53687e93aabbad98836e5645321e0900000d22374d62778c9fb5baa9927c67524d62788da4b5c7ad98826d5544311d0800000000000000000000000b20364b6075889eb29d8874604b352b3b50657b909fb1ab9f958b88888b929ca49e897a7a8fa2a89e8d868383878f9ba2a49c8879635947341f120000000000000000000000011527374d62788b9fb39e8975614b36210f0000000000000000000000000000000b1f34485972879db2c7baa98f7a644f362513000000000000000000000e23384b5d6570717171717171717e92a8bdb19b86715c46311c00152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000000d22374c62778ca6b7cab49f8a76614b36210c00152b40556a8095aabfbca7917c67523c314250626d8298a2b4c2b6a49a8373604b4231211101000000000000000000000000000000000000000000000000000d1d30414b6175879daabbbaa89b8574604b3f2e1c0c0000000000000000000000000000000000000000000000000000000000000000000d203448596b8196a8b9b49f8a77624c3b2a180500000000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a54697e93a9c1c4ae99846f56454c61778b9fb4b49e8975604b36210b0005182b3b54697e93abbcb49f8a76614b485a71869cb1c6b39e8974604b35200b00000000000000000000000f253a4f647a8fa7ab96816b5443303448596f849aafb49f8d80777373767d8698a09d878197ac9e8a7b716d6e727a85979fa69d8777614c403019090000000000000000000000092035485a6f8499afa8927d68533e2d1a0700000000000000000000000000000d22374c62778ca5b6c9b49f8975604b35200b0000000000000000000010253b50657b8586868686868686879db2c6b19b86715c46311c00152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000000b2034485973889db3c8bbaa8f79644f3a240f00152b40556a8095aabfbca7917c675237444b606b8095a0b2c0b8a79c867661554431241403000000000000000000000000000000000000000000000000000000131e334657647a8c9fb4c0b5a396806b5d4b3a291704000000000000000000000000000000000000000000000000000000000000000005182b3b4c61778a9eb4baa996816c5948341f0d00000000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586f859aafc4c1a8937e68533847596f849aafb9a8917c6751392816030b2034485970859bb0c6ae99836e57463c566b8095abc5b8a7907a65503b25100000000000000000000000142a3f54697f94a9ab907b65503626374d62778b9fb5a4937e6a6158586168758298a19d979fa9947e695d58595d65748197a0a598836e5e4d372715020000000000000000000006192b3c51667c91a6b09b85705c4a36210b000000000000000000000000000010263b50657b90a5c3c5b09b85705544311d08000000000000000000061b30455b70859a9b9b9b9b9b9b9b9da5b7c6b19b86715c46311c00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000005182b3b5a70859aafc5c8a6917c67513c271200152b40556a8095aabfbca7917c675a5a5560697e929eafbebbaa9e89786358463726140600000000000000000000000000000000000000000000000000000000031729394b5c6a7f95a2b4c1b49f8c7b655847331f130000000000000000000000000000000000000000000000000000000000000000000d1f3447596b8096a8b9b49f8a77624c3b2a1805000000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768b9fb4cab5a38c77624d373a53687d93aabbad98836e5745321e090d22374d62778c9fb5baa8917c6752393a4f647a8fa6b8c5ab96816c563e2d1b0700000000000000000001142637596e8499ae9f8b76614c36273c52677c91abb29c8773604c47474c5660728399a6acb1ab8d78624d3f3f4b5560728298a5a0917c665544311d0800000000000000000000000e20354b6074889db2a38e79644e392816030000000000000000000000000013283e53687e93a8bdc2ad97826d5837261401000000000000000000061c31465b71869bb0b0b0b0b0b0b0b2b7c3beb19b86715c46311c00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000182d43586d8298adc2bea9947f69543f2a1400152b40556a8095aabfbca7917d6f6f6f70757f8d9fb4bcbcb49f8c7b655a493a2919090000000000000000000000000000000000000000000000000000000000000b1b2e3e4b6073849aa8b9bcab9d8776614c41311e0e000000000000000000000000000000000000000000000000000000000000000004182a3b4c6176899eb4baa996816b5947341f0c000000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000216283852677d92aabbc6b19b8671594834374c61778b9fb4b49e8975604b36210b182b3b54697e93abbcb49f8a76614b36354b6074889eb3c7b29d87725c4a36220d000000000000000000081d31445572879cb19c86715746332b40556b8095aaab95806b544333333845546177889eb3b49f8a75604b352e3744546175879db29d8874604b36200f0000000000000000000000081d3144556b8095abac97816c5746321e0900000000000000000000000000162b40556b8095aac0bfaa95806a55402b1500000000000000000000061c31465b71869ba9a9a9a9a9a9a9a9a9a9a9a99b86715c46311c00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000001162c41566b8196abc0c0aa95806b55402b1600152b40556a8095aabfc6b19b858484848689949fabbcbcb09e927e685d4b3c2c1b0b0000000000000000000000000000000000000000000000000000000000000000101d3144556278899eb3beb7a698836e604e3c2c190900000000000000000000000000000000000000000000000000000000000000000c1f3347586b8095a7b9b49f8a77624c3b2a18040000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566e8399aec8c4aa95806b553b2b3347586f8499afb9a8917c67513928162034485970859ab0c6ae98836e5746323043546d8298adc8b7a58e79644e39240f0000000000000000000b20354b60758a9fae99836e5939292c42576c8197aca7927d675236261f28364758697e93a7b49f8a755947341f27364657687d92a5a6917c67523d2c1a0600000000000000000000011527374d62788b9fb39e8975614b36211000000000000000000000000000172c41576c8196acc1bea8937e69533e291400000000000000000000061c31465b7185949494949494949494949494949485715c46311c00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000162b40556b8095aac0c0ab96816b56412c1600152b40556a8095aabfc9b5a39b99999a9b9ea8b4bcb8b39e96806b604e3f2e1e0e00000000000000000000000000000000000000000000000000000000000000000001142637485a677d92a0b2c3b2a0927d685a49372715010000000000000000000000000000000000000000000000000000000000000004172a3a4c6176899eb3baa996806b5947341f0c0000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075899eb4c9b8a68f7a644f3a242a3a52687d92a9baad98836e5745321e22374d62778c9fb5b9a8917c67513928263651677c91aabbc3aa95806a553c2b190600000000000000000d23384d62788daaab96816b56412c2d42586d8297ada6917c66513c2711182a3a4b6075899eb3aa8c77614c37221829394b6073879cb09a85705b4935210c0000000000000000000000092035485a6f8499afa8927d68533e2d1b07000000000000000000000000182d42586d8297adc2bda8927d68533d2813000000000000000000000012283d52677d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7d67523d281200152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000152a40556a7f95aabfc1ac96816c57412c1700152b40556a8095aabfd2c2b5b1afafafb0b4b9c6b8a79e908072604a42312111000000000000000000000000000000000000000000000000000000000000000000000009192b3c4d5f6d8298a5b7beb49e8a78635544311d1100000000000000000000000000000000000000000000000000000000000000000c1f3347586a8095a7b8b49f8a77614c3a2a180400000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263651667b91a8b9c8b39d8874604a352021364c61768a9fb4b49f8a75604b36212b3b54697e93abbcb49e8975604b362121364c61768a9fb4c6b19b86715a4835200b00000000000000000f24394f64798ea4a9947e69543f292c42576c8197aca8927d68533d28130c1e3245576d8298ada58f7a65503a25101c3043546b8095aaa28e79634e39230e000000000000000000000005192b3c51667c91a6b09b85705c4a36220b000000000000000000000000182e43586d8398adc2bca7927d67523d281200000000000000000000001025394d5f676969696969696969696969696969675f4d3a251000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000001162b40566b8095abc0c0ab96816b56412c1600152b40556a8095aabfd0bfb3afacacacafb4bbc8b39e887b6b605443302313030000000000000000000000000000000000000000000000000000000000000000000000000e1e30414c6176879daabbb9a89b8573604b3f2e1b0b000000000000000000000000000000000000000000000000000000000000000417293a4c6176899eb3baa896806b5947341f0c00000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546d8297acc6c7ad97826d5443301c1f3346586f8499aebaa8917c6751392834485970859ab0c6ad98836e5645321e1e3346576f849aafc4b5a38d78624d38230d000000000000000010253a50657a8fa5a8937e68533e292a3f556a7f94aaaa947f6a553827150316283951667c91aaa9947f6a543727151426364e63798ea7a9947f69543f2a140000000000000000000000000e20354b6074889db2a38e79644e392816030000000000000000000000182d42576d8297acc2bda8937d68533e281300000000000000000000000a1e30414d525454545454545454545454545454524d41311e0a00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000001172c41566c8196abc1bfaa95806a55402b1500152b40556a8095aabfc7b3a19a9696979a9faab6b8a79a84776259473928190900000000000000000000000000000000000000000000000000000000000000000000000000131f334658657b8c9fb4c1b5a395806b5d4b3a291704000000000000000000000000000000000000000000000000000000000000000c1e3346576a7f94a7b8b49e8a77614c3a2a1804000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074889eb3c8baa9917c665136251317293a52677d92a9baae98836e574532374d62778c9fb5b9a8917c665138281617293954697e93a9c2c2a9937e69543a2a17040000000000000011263b50667b90a5a7927d67523d28263c51667c91a6ae99836e5645311d090c21364c61768b9faf99846f5544311d0821364a5b73899eae99846e59382715020000000000000000000000081d3144556a8095aaac97816c5746321e090000000000000000000000172c41576c8196acc1bea9937e69543e2914000000000000000000000001132330393d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3d3a3123130100152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000003192e43586e8398adc3bea9947e69543f291400152b40556a8095aabfc4af9a83818182858b9ca5b6b4a29a8777625746372715010000000000000000000000000000000000000000000000000000000000000000000000000417293a4b5d6b8095a3b4c1b49f8c7b655846331f1300000000000000000000000000000000000000000000000000000000000000031729394b6175889eb3b9a895806b5847331f0c000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa6b8c9b49f8a76614b36210c0c21364c61768a9fb4b49f8a75604b363b53697e93abbcb49e8975604b36210b0e23384d63788da4b6c5af9a85705847331f0a0000000000000011263b51667b90a6a7927c67523d2722374c61778ca3b49e8975604b3620120a1f33465870869bb09e8975604b36200b1a2d3d5a6f859aaf9d88725645311d090000000000000000000000011426374d62788b9fb39e8975614b3621100000000000000000000000152b40556a8095aabfc0ab96806b56412b1600000000000000000000000005131e25282a2a2a2a2a2a2a2a2a2a2a2a2a2a28251e13050000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000006192b3c5b70859ab0c5c7a6917c66513c271100152b40556a8095aabfbca7917c6c6c6d7079879ca6b7b4a59b8575615544311d15060000000000000000000000000000000000000000000000000000000000000000000000000b1b2e3f4b6073859ba8b9bcab9d8776614c41301e0e000000000000000000000000000000000000000000000000000000000000000b1e324657697f94a6b8b49e8a77614c3a2a17040000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d566b8196abc5c4af9a846f5746321e0a0a1e3346576e8399aebaa8917c675139485970859ab0c5ad98826d5645321e090c2035495a72879cb1c7b49f8b77614c37210c000000000000000f253a4f647a8fa4a8937d68533e281f34475970859bb0a8917c6651402f1d0d17293a566b8095aba88f7a654f3a2510172c41576c8196ac9f8a75604b36200b000000000000000000000000092034485a6f8499aea8927d68533e2d1b070000000000000000000013283d53687d92a8bdc3ad98836e5839281603000000000000000000000000010a1012141414141414141414141414141412100a01000000152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000000b2035495a73899eb3c8baa98e79644e39240f00152b40556a8095aabfbca7917c6757575b6378889da8b9b5a3998373604b4333241304000000000000000000000000000000000000000000000000000000000000000000000000101d31445563788a9eb4beb7a598826e5f4d3c2b1909000000000000000000000000000000000000000000000000000000000000031629394b6075889db3b9a895806b5847331f0c0000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b72879cb2c7c2a9937e6954392916030317293952677c92a9baae98836e57464c62778b9fb4b9a7917c66513828160206192c3c566b8096abc5bbaa927d6852382816030000000000000e23394e63788ea3a9947e69543f29182a3a54697e93a8b09b85705e4c3b2a1a10263b50657b90a9aa957f6a55382816152b40556a8095aaab8d77624d38220d00000000000000000000000005192b3c51667c91a5b09b85705c4a36220b0000000000000000000010253b50657a90a5c3c6b19c86715746321e0900000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000000d23384d62788da7b8c9b49f8a75604b36200b00152b40556a8095aabfbca7917c67523d495a647a8a9eaabbb3a197816d61504231221202000000000000000000000000000000000000000000000000000000000000000000000001152737495a687d92a0b2c3b2a0927d675a49372614010000000000000000000000000000000000000000000000000000000000000b1e324557697e94a6b7b49e8a76614c3a2a170400000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea5b6c9b6a48d78624d38230d00000c21364b61768a9fb4b49f8a76614b53697e93abbcb39e8975604b36200b000010253a50657a8fa7b8c8ae99836e5645321e090000000000000d22374c62778ca8ab96816c56412c1721364c6176899eb4a3917c66594838291b21364b60768a9faf9a85705645321e14293f54697e94a9a38e78634e39230e000000000000000000000000000d20354b6074879db2a38e79644e392816030000000000000000000c22374c61778ca5b6cab49f8a76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000004172a3a53687d92a8c5c5b09b85705645321d0900152b40556a8095aabfbca7917c67523c3c4a5c657c8c9fb4bbb19f957f6a604e402f201000000000000000000000000000000000000000000000000000000000000000000000000009192c3c4e606e8298a5b7beb39e8978625544311d10000000000000000000000000000000000000000000000000000000000000031628394b6075889db2b9a895806b5847331f0c00000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b556a7f95aac3c6b19c86715a4935200c00000a1e3246576e8398aebaa8917c67525970859aafc5ad98826d5645321d0900000b20354b6074899eb3c8b49f8a75604b36210b0000000000000b20354b6074899eae99846f593c2b191f3346586b8095a5b39e88776256463a2f2232455770859ab09f8a75604b362113283e53687d93a8a38e79644e39240f00000000000000000000000000081d3144556a7f95aaac97816c5746321e090000000000000000000b1f34475972879db2c7bbaa907b665139281603000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000a1f3347586e8399aec3c3ab95806b563828150200152b40556a8095aabfbca7917c67523c2d3e4c5d687d929dafbdaf9e927e685e4c3e2d1e0e0000000000000000000000000000000000000000000000000000000000000000000000000e1e31414c6176879dabbcb9a89b8573604b3f2e1b0b0000000000000000000000000000000000000000000000000000000000000a1e324556697e93a5b7b49e8976614c3a291704000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485971869bb0c6c5ab96806b563c2c190600000316293951677c91a8b9ae98836e5762778b9fb4b9a7907b6651382815020000081d3144556d8398adc8baa9917c6651372614010000000000081c30435470859ab09d88725a48352017293a4b6175879daba69a847461584b3f362d39556a8095aaa9907b65503b2614293e54697e93a9a28d78624d38230d00000000000000000000000000011426374d62778b9fb49e8975614b36211000000000000000000004182a3b586d8298adc6c8ac97826c5746321e0a000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000031628394c61778a9fb4c9b7a58f7a644f3a240f0000152b40556a8095aabfbca7917c67523c272f3f4e5f6a7f959fb1bcb49f8c7c665c4a3c2b1c0c000000000000000000000000000000000000000000000000000000000000000000000000131f334658657b8c9fb4c1b4a2957f6a5d4b392917030000000000000000000000000000000000000000000000000000000000021628384b6074879db2b9a895806b5847331f0c000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca3b5c9b8a78f7a654f3a2510000000000b21364b6075899eb4b49f8a7661697e93abbcb39e8975604b36200b0000000114263752677c92aabbc7ad97826d5544311d08000000000001142636566c8196aba58d78624d38220d1e324657657b8d9fb4a29a8476655d4f4a3e4150657a8fa8ab95806b563a29172a3f556a7f94aaab8b76614c36210c000000000000000000000000000009203448596e8399aea8927d68533e2d1b0700000000000000000012273c51677c91a8bac9b39e8975614b382816020000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000c1e324557697f94a9bac6b29d87725c4a36220d0000152b40556a8095aabfbca7917c67523c2721314150616c8197a1b3bbaa9e8a7a645a493a2a1a0a00000000000000000000000000000000000000000000000000000000000000000000000417293a4b5d6b8095a3b5c0b49f8c7a645746331e130000000000000000000000000000000000000000000000000000000000000a1d324556687e93a5b7b39e8976614c3a2917040000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a53697e93a8c1c8b39e8974604b35200b00000000091e3245576e8398adbaa9917c6770859aafc5ad97826d5645311d09000000000c21364c61768a9fb4c8b39e8874604b35200b00000000000012273d52677d92a9a7927d68523b2a181629394b5d697f949eb4a29a867b6e645c5956556075899fb09b86705846331f2c42576c8197ac9f8a75604b35200b000000000000000000000000000005182b3b51667b90a5b09b85715c4a36220b0000000000000000000b21364b60758a9fb4c9b9a7937e685645321e0f0000000000000000000000000000000000000000000001080b08010000000000000000152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000c1c2d3d4b6075889db3c7baa8947f6a543e2e1b070000152b40556a8095aabfbca7917c67523c27132333434b60738399a3b5b9a89d88786258473828180800000000000000000000000000000000000000000000000000000000000000000000000c1c2e3f4b6074859ba8b9bbaa9d8776614c41301e0e0000000000000000000000000000000000000000000000000000000000021528384b6074879db2b9a895806a5846331f0b0000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586f849aafc4c8ad98836d5544311d08000000000316283951667c91a8b9ae98836e778b9fb4b8a7907b665038271502000000000a1f33465870859aafc5b8a78f7a65503a25100000000000000c21374c61768a9faf99846f5947341f0b1b2e3f4f616a7f939faaa49c90837a726e6b6b6b6f849aaf9f8b76614c36212c3c5a6f8499af9d87725443301c080000000000000000000000000000000d20354b6073879db2a38e79644e392816030000000000000000091e3245576d8297adbfc5b29d8775604b3e2d1d0c000000000000000000000000000000000000000409141d201d140906000000000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000e1c2a3a4a5c6a8095a6b8c4b49f8a76614c372110000000152b40556a8095aabfbca7917c67523c2712151d3144556175859ba5b6b8a69c8676615645362614010000000000000000000000000000000000000000000000000000000000000000000000111d31445563798a9eb4bfb6a598826d5f4d3c2b180800000000000000000000000000000000000000000000000000000000000a1d314455687d92a5b6b39e8976614c3a29170400000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b9fb4cabbaa927c67523726140100000000000b21364b6075899eb4b49f8a757e93abbcb39e8974604b35200b00000000000417293a54697f94a9c3c5ab96816c563d2d1a0700000000000a1f3347586f8499ae9f8b77614c3928161121324350616a7e8b9ca4b2a0988f888381808183889db3aa917c66513c2635495a73889dad98836e5836261401000000000000000000000000000000081c3043546a7f95aaac97816c5746321e090000000000000000031628394e64798ea1b3c9b7a6957f6a5c4a3b2a1c0f01000000000000000000000000000000010c181f263135312620190e0000000000152b40556a8095aabfbda8927d68533d281300000000000000000000000108131c2c3a4758647a8b9fb4c4b8a696806b5847331f0a000000152b40556a8095aabfbca7917c67523c27120114263746576177879da7b8b6a49b8474605443301c15050000000000000000000000000000000000000000000000000000000000000000000002152737495b687e93a1b2c3b2a0917d675a483626140100000000000000000000000000000000000000000000000000000000021527374b6074879cb2b9a7957f6a5846331f0b00000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215283852677d92aabbcab49f8a76614c37210c000000000000091e3245566d8298adbaa9917c8499afc5ac97826d5544311d080000000000000e23384e63788da4b6c7b29d87725c4a36210d00000000000417293a52677d92a7aa95806a5746321e0e142433435060687a86939da6ada59d98969596989da6b7ab96816c56412c384d63788da6a9947e69543f291400000000000000000000000000000000011426364d62778b9fb49e8975614b3621100000000000000000000a21364a5c6f849aabbcc4b49f8b7a6459473a2c1d14090100000000000000000000000208141c2a3437444b4437352c1e0e00000000152b40556a8095aabfbda8927d68533d28130404040404040400040a0c141c25303c49586176879daabbbeb39e8876614c3a2a1704000000152b40556a8095aabfbca7917c67523c2712000919283947596379899ea9bab4a3998372604b43322313030000000000000000000000000000000000010505050505050505050505050505050009192c3d4e606e8399a6b7beb39e8978625443301c100000000000000000000001030a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a00091d314455677d92a4b6b39e8976614c39291703000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3245566e8398aec8c5af9a85705847331f0a0000000000000216283851667b91a7b9ac97828a9fb4b8a7907b6550372715010000000000000c2135495b72879cb2c7b6a58e79644e39240f0000000000000c21364b6075889eb39e8975614b3c2c1909152533424e5c64747e8891999ea8a7a9aaabaaa9a6a79e9886715c472d3e54697e93a9a58f7a644f3a240f000000000000000000000000000000000008203448596e8399aea8927d68533e2d1b070000000000000000071a2d3e4e63798c9fb4c3bbaa9d87776159493d31261d140b09020001010200040a0c151d26303b474c5560554d493c2c1808000000152b40556a8095aabfbda8927d68533d281a1a1a1a1a1a1a1a1b171f21263036434a5a6376859ba5b6c1b2a0927d675746331c0c00000000152b40556a8095aabfbca7917c67523c271200000b1b2a3b495b647a8b9fabbcb3a196816c614f413021110100000000000000000000000000050e14171a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1f31424c6176889dabbcb9a79a8473604b3e2e1b0b00000000000000061016181f20202020202020202020202020202020201527374b6073869cb1b9a7957f6a5746331e0b000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075899eb4c9c3a9947f69543a291704000000000000000b20364b6075899eb3b49f899fa8bab39e8874604b35200b00000000000000061a2c3d566c8196abc5c3aa957f6a553c2b19050000000000091e3245576a7f94a7a795806b5a49372614011524313e4a556069757c84898e919495959594918e88827c65503b364a5c70859bb09c87725c4a36220d000000000000000000000000000000000005182b3b50667b90a5b09b85715c4a36220b0000000000000000000f21364a5b6c8197a4b6c7b7a59b8577635b4b44373126211e161717161718171f21273136434b59616c7572635a49362614010000152b40556a8095aabfbda8927d68533d2f2f2f2f2f2f2f2f2f302a333736434b54606878869ba3b5c3b5a398826d5f4d3929170000000000152b40556a8095aabfbca7917c67523c27120000000c1d2c3c4b5c667c8d9fb4bcb19f947f6a5f4d3f2f1f0f000000000000000000000000081622292c3030303030303030303030303030303030303030334758657b8d9fb5c1b4a2947f6a5c4a3929160300000000000917232a2d3535353535353535353535353535353535353535314455677d92a3b5b39e8976614c392917030000152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263651667b90a8b9cab6a58d78634e38230e0000000000000000091d3145566d8297adbaa99fa9bac4ac97826c5544311d08000000000000000010253b50657b90a7b9c6b19b86715a4835200b0000000000031628394c6176899eb39f8b78625544311d130614202d37444b5660676f75797c7f80807f7e7c79746d655d4c38404f647a8fa3aa957f6a553e2e1b070000000000000000000000000000000000000d20354b6073879db2a38e79644f392916030000000000000000071a2d3d4b6175869ca9bac3b5a39b86796960554b44373632282d2c2c2c2d2a333737444b54606877828a8678635443301c0d0000152b40556a8095aabfbda8927d685344444444444444444444453a474c51546067727d899ca4b5c1b6a59b8575614b41301b0b0000000000152b40556a8095aabfbca7917c67523c2712000000000e1e2e3e4c5e697e939eb0bdb59f8d7d675d4b3d2d1d0d00000000000000000000051626343e414545454545454545454545454545454545454545453a4b5d6b8096a3b5c0b49f8c7a645746321e1200000000001727353f424a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a6072859baab8a7947f6a5746331e080000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546d8297acc6c7b29c87725b4935210c00000000000000000215273850667b90a7b8bab4bac7b8a6907b65503727150100000000000000000b20364b6075899eb3c9b5a38d78624d38220d0000000000000a1e334657697f94a3a99a8473604b41312213021019273138454b5255606467696a6b6a6967636054504c3f3a4c5e6e8399ae9f8b78624d38231000000000000000000000000000000000000000081c3043546a7f94aaac97816c5746321e0a0000000000000000000f1e324657647a8a9fabbbc2b5a49c8a7e73676055504b453842414142433a474c51556067737e89979f9b8573604b3b2b180500152b40556a8095aabfbda8927d6859595959595959595959595a5b5861666c747c85929ea7b5c0b4a49c8777625746322313000000000000152b40556a8095aabfbca7917c67523c27120000000000102030404e606b8096a0b2bcab9f8b7b655b4a3c2b1c0c0000000000000000000e22344451565a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a6074859ba9babbaa9c8775614b41301a0a0000000e1e354552585f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f54647a8c9fb4b39e8976614b3626140100152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074889db3c8c6ab96816c563d2c1a060000000000000000000b20364b6075899eb3c8c9cdc8b39e8874604b35200b000000000000000000081d3144556e8398aec9c1a9937e69543a2a17040000000000031729394b6073859baaa295806b5f4e40311d150a09151d28323637444b4e525455565554514e4a433638364658657b90a1a897816c5a4935200b00000000000000000000000000000000000000011426364c62778b9fb49e8976614b362110000000000000000000031628394a5c667c8d9faabac2b6a89e93867c746b6560565957565657585a5861666c747d86939ea7b4a3937e68594834200b00152b40556a8095aabfbda8927d6f6f6f6f6f6f6f6f6f6f6f6f707173767b8188919ba3b3b9bbb4a29a867862594839291605000000000000152b40556a8095aabfbca7917c67523c2712000000000002122231424a60728298a2b4baa99e8a79635a483a291a0a000000000000000014293e51626c6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f78899fb4c8b6a597826d5f4d382816020006192c3c52636d74757575757575757575757575757575757575757575757575757f94a9b8a7947f6a5443301c0800152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa6b8cbb9a8907b65503b261000000000000000000000081d3144556d8297acc5d5d4c4ac97816c5544311d080000000000000000000215273752677d92abbcc4af9a856f5847331f0a0000000000000b1d31445563798b9fb49e927d685e4e4231271a10060a151d20273135393c3f4040403f3c393530283643546176879db29f8a77624c3c2b19060000000000000000000000000000000000000000081f3448596e8399aea8937d68533e2d1b070000000000000000000b1b2d3e4c5e687d8c9fa8b5c2b9b4a49c9187817a75716e6c6c6b6c6d6f73777c8188929ca4b3b8bcb39e8977624c37220d00152b40556a8095aabfc6b19c868484848484848484848484848586898c91969da6b0b5bfb3aa9f948476625a483b2a1b0b00000000000000152b40556a8095aabfbca7917c67523c271200000000000004141c3043546074849aa4b5b9a89d88786258463828180800000000000001172c41566c80848585858585858585858585858585858585858585858585858584889eb3c8c3b19f917c675645321e09000c2035495a6d828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8c9fb4c5b29d8774604b35200b00152b40556a8095aabfbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d566b8096abc4c9b49e8975604b36200b000000000000000000000215273750657b90a6b8cbcbb7a68f7a655037261401000000000000000000000c22374c61778b9fb4cab49f8b76614c37210c000000000000011426374a5b697f949fb49f8c7d68604b45382e20190e08090b151d2024272a2b2b2a292723202d39465460728399a5a1947f6a5948341e0e00000000000000000000000000000000000000000005182a3b50657b90a5b09b85715c4a36220b00000000000000000000102030404e5f687c8a9ca4b4bac2b5b1a59d968f8a8684828181818285888c91979ea7b1b5c2b6ab9f958376614c36210c00152b40556a8095aabfc9b5a49c9999999999999999999999999a9b9ea7a6abb3b7bcb5aea1998b7f726158483c2b1d0d0000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000013253645566176869ca6b7b7a69c8676615645362513000000000000061b30455b70859a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9ea6b8cbcebeb39d8875604b36210b000e23384d63788d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faabbcbb7a58f79644f3a240f00152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b72879cb2c7c6ae98836e5544311d0800000000000000000000000b20354b6074889eb3c9c9b39d8874604b35200b00000000000000000000000a1f33475870859bb0c8bbaa927d67523828160300000000000009192d3d4f616c8197a1aa9f8c7e6c60564b3e352c201c14100d0b0b0f12141516151d202b343e4a5761728197a1a69a8472604a3b2b1800000000000000000000000000000000000000000000000d20354a6073879db2a38e79644f3929160300000000000000000002122231414e5e667986959fa9b4bac3b7b2aba99f9c9997969697989a9da6a6acb3b8c5b8b3a59c8c8073615846331f0a00152b40556a8095aabfc7c2b5b1aeaeaeaeaeaeaeaeaeaeaeaeafb0b3b8c5bbb4b0ab9f998f84796a6054473a2b1d0d000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000818273846586278889da7b9b5a49a8474605443301c120000000000061b30455b70859aafafafafafafafafafafafafafafafafafafafafafafafafafafb3b8c4c7c7c7b7a6917b66513c2611000e24394e63798ea3b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4bbc8c7c3a7917c67523c271200152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798ea4b2b2b2a8927d6852372715020000000000000000000000081d3144556c8197abb2b2ab96816c5443301c08000000000000000000000004182a3a546a7f94aab2b2ae99836e5645321e09000000000000000f1f32434b60738399a1aa9f928174645c4d493c3530262522201d161e2123262731363c484d5c64758297a0a69d8877615443301d0d0000000000000000000000000000000000000000000000071c3043546a7f94aaac97816c5746321e0a0000000000000000000004132331404c5b6374808a979fa9b2b6c3c7bab4b1aeacababacadafb2b7c4c1c1b5b0a79e94877b6b6055463a29170400152b40556a8095aab2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b0afaca9aa9f9b948c837a6f635b4b43362a1c0d00000000000000000000152b40556a8095aab2b2a7917c67523c27120000000000000000000a1a293a48596379899ea9b1b2a2988272604a41301d0a00000000061b30455b70859ab0b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a8937e69533e2914000e24394e63798ea3b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a7927d68523d281300152b40556a8095aab2b2a7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f949d9d9d9d9a8a76614c37210c000000000000000000000000011426374f647a8d9b9d9d9b8d79644e362614010000000000000000000000000d23384d62788c9b9d9d9d9d8975604b36210b0000000000000001141d31445561758398a0b49f97867a6d635a504b43363a373531283236383b37444b505a626c7a8698a0a69e8879635947362513000000000000000000000000000000000000000000000000001325364c62778b9fb49e8976614b36211000000000000000000000000513222f3d4956606b78828b959ca5a9aeb3b8c5bbbcbdbebdbcbbc3b6b2ada8a39b93887e74655d4b4437291b0b0000152b40556a80959d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c9b999794908b857f786e655d4e493d3026180c0000000000000000000000152b40556a80959d9d9d9d917c67523c2712000000000000000000000b1b2b3b4a5b657b8b989c9d9d9d96806b5f4d39241000000000061b30455b70859a9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d937e69543e2914000e24394e63798e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d927d68523d281300152b40556a80959d9d9d9d917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e828788888887857b655847331f0a000000000000000000000000000922364a5c667c858887867d675c4a361808000000000000000000000000000b2035495a667c8587888888877b65503a25100000000000000000011527374657617382959faaa39b8c82786e66605453504d4b4439464b4e50545560656e78818c9ca4a39b8879635b493b2a180800000000000000000000000000000000000000000000000000081f3447596e8398aea8937d68533e2d1b07000000000000000000000004121f2c38454b5a626d7780878e94999ea7a4a6a7a8a8a8a7a6a3a59d98938d867d756960564b3f3126190b00000014293e54697e87888888888888888888888888888888888887878684817f7b767069625a4f4b3f352c1c140800000000000000000000000014293e54697e8788888888877c66513c261100000000000000000000000d1d2d3d4b5d657a838788888887877c67513c27120000000004192e43596e828788888888888888888888888888888888888888888888888888888888888888888888877e68533d2813000e23384e6379878888888888888888888888888888888888888888888888888888888888888888877d67513c27120014293e54697e8788888888877c66513c26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172b4053646e727272727270655d4b3a2a170400000000000000000000000000071b2d3e4d5e6670727271675f4d3d2d1a000000000000000000000000000006192b3c4c5e66707272727272655d4b37230e00000000000000000009192839465560727f8c9ca4ab9f978b837b746e68656260555f576163666a6e757b838b979faa9f978578635b4a3d2c1d0c000000000000000000000000000000000000000000000000000005182a3b50657b90a5b09b86715c4a36220b000000000000000000000000010f1a28323c484d59626a72797f84888c8e919293939292908e8b87837e78716860564b45382e1d14090000000012273b4f61697272727272727272727272727272727272727271706f6c69656157544d483c372e211a0f010000000000000000000000000012273b4f6169727272727272665e4c38240f0000000000000000000000000f1f2e3f4b5c646e717272727272675f4d3924100000000002172b4053646e72727272727272727272727272727272727272727272727272727272727272727272727268604e3a2511000c2135495b6372727272727272727272727272727272727272727272727272727272727272727272675f4d3924100012273b4f6169727272727272665e4c38240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001124364653595d5d5d5d5d5b504b3f2f1c0c000000000000000000000000000000102030404d515b5d5d5b514d41301f0f0000000000000000000000000000000e1e2f404c515b5d5d5d5d5d504b3f2e1c08000000000000000000000b1b28374454606a7a86959fa8aa9f989088837e7a777574747576787b7f838990989fa9a49c908274635a4a3d2d1f0f000000000000000000000000000000000000000000000000000000000d20354a6073879cb2a38e79644f39291603000000000000000000000000000a161e2b353b484c555c646a6e7376797b7c7d7e7d7c7b7876726e69625a534b453831271a110100000000000c1f32424f545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5b5a5754504b463938352b231c11060000000000000000000000000000000c1f32424f545d5d5d5d5d5d514c402f1d090000000000000000000000000111212e3e4a4e585c5d5d5d5d5d514d41301d0a00000000001024364653595d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d534e42311e0b00061a2c3d494e5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d514d41301d0a000c1f32424f545d5d5d5d5d5d514c402f1d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000718283640434848484848453b372f21110000000000000000000000000000000002122230393c464848463c39302312010000000000000000000000000000000012222f383b4648484848483a372e21110000000000000000000000000b192736434a5c6475808a969fa9ada69e98938f8c8a8a898a8b8d9094999ea8ada49c93867b6d6056493c2d1f0f0100000000000000000000000000000000000000000000000000000000071c3043546a7f94a7ac97826c5746321e0a0000000000000000000000000000020e19202b34373e4a4e54595861646667686968676663615758534d483c3632281d150a00000000000000021424323b3e48484848484848484848484848484848484848474644423f3b3632292220190e080000000000000000000000000000000000021424323b3e4848484848483c382f221200000000000000000000000000000311202d3639434748484848483c393023120000000000000718283640434848484848484848484848484848484848484848484848484848484848484848484848483d3a3123130100000e1f2c3538484848484848484848484848484848484848484848484848484848484848484848483c393023120000021424323b3e4848484848483c382f2212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18242b2e33333333323025231c1103000000000000000000000000000000000004121d24273133323127241d1204000000000000000000000000000000000004121c242630323333333325231c110300000000000000000000000000091825303e4a57606b77818a939ba2a8ada8a5a2a99f9e9faaa3a5a9aba89e9890867e73655d4b45382c1e0f010000000000000000000000000000000000000000000000000000000000001325364c6176899da69e8976614b36210c00000000000000000000000000000000050d1820222d36393f3a474c4f515253535352514e4b46393e38352b211e160a0200000000000000000006141f27293333333333333333333333333333333333333232312f2c2a26211e160d0b05000000000000000000000000000000000000000006141f272933333333333326241d120400000000000000000000000000000002101b22242e32333333333227241d1204000000000000000a18242b2e33333333333333333333333333333333333333333333333333333333333333333333333328251e1305000000000e1a21233333333333333333333333333333333333333333333333333333333333333333333327241d120400000006141f272933333333333326241d12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071117191d1d1d1d1d1b100e080000000000000000000000000000000000000000000a0f111b1d1d1c12100a000000000000000000000000000000000000000000090f111b1d1d1d1d1d100e080000000000000000000000000000000008131c2e39454b59616c777e858d93989c9faaa3a4a4a3a2a59d99959089837b736860554b3f32281a0e0000000000000000000000000000000000000000000000000000000000000000081f334658657b888f90907d68533e2813000000000000000000000000000000000000050b0f1a21242a293337393c3d3e3e3d3d3b39363228292220190e0903000000000000000000000000020c12141d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1b1a1714100c0a03000000000000000000000000000000000000000000000000020c12141d1d1d1d1d1d110f0900000000000000000000000000000000000000070d0f191c1d1d1d1d1d12100a00000000000000000000071017191d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d13110b01000000000000060c0e1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d12100a000000000000020c12141d1d1d1d1d1d110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101b28323b474c58616870787e83878a8c8e8f8f8e8d8b8884807b756e6560544b44372f1e160a0000000000000000000000000000000000000000000000000000000000000000000417293a4b5d65757a7b7b7a644f39240f000000000000000000000000000000000000000000070d0f15171f21242627282928272623211e16140d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1315202020202016140e0400000000000000000000000000000000000000000000000000000000000000000000060f1518202020202014120c0200000000000913191b202020202016140e040000000000000000000000000000000000000a161e2a343a474c535a62686d717577797a7a797776726f6b656056504a4336312619110200000000000000000000000000000000000000000000000000000000000000000000000b1b2e3f4b5660646666645c4a36220d00000000000000000000000000000000000000000000000000040a0c0f111213141312110e0c0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d131520202020202013110b02000000000000000000000000000000000000000000070c0e2020202020201a181108000000000000000000000000000000000000000000020c121420202020202014120c02000000000000000000000000000000000000000000040d13152020202020202020202020202020202020201f1e1d1a17120d0b050000000000000000000000000000000000040d131520202020202013110b020000000000000000000000000000000000000000000000000000000000040d131520202020202013110b02000000000000000000071521282b35353535352b2921160800000000000000000000000000000000000000000000000000000000000000000917232a2d353535353529261f14060000000c1a262e3135353535352b29211608000000000000000000000000000000000000030c181f2a33373c494d5358556062646464636261575a56504b45383530251d1409000000000000000000000000000000000000000000000000000000000000000000000000000011212e38454b4f51514f4a3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071521282b35353535353528261e1306000000000000000000000000000000000000010f1a21243535353535352f2c25190b0000000000000000000000000000000000000006141f262935353535353529261f140600000000000000000000000000000000000000071521282b3535353535353535353535353535353535353534322f2c282220180d0a0300000000000000000000000000071521282b35353535353528261e1306000000000000000000000000000000000000000000000000000000071521282b35353535353528261e130600000000000000041525333c404a4a4a4a4a403d33261604000000000000000000000000000000000000000000000000000000000000061727353f424a4a4a4a4a3e3b3224140200091a2b3842464a4a4a4a4a403d3326160400000000000000000000000000000000000000040c171f212b35383e37444b4d4e4f4f4e4d4b4639403b363127201c13080100000000000000000000000000000000000000000000000000000000000000000000000000000003111a2832363a3b3b39362d201000000000000000000000000000000000000000030a0c10131516161614110d0b05000000000000000000000000000000000000000000040a0c1e20202020201e110f09000000000000000000000000000000000000000000000002090b1a2020202020201e0c0a0400000000041525333c404a4a4a4a4a4a3d3a3124130200000000000000000000000000000000000f1f2d36394a4a4a4a4a4a4441372919080000000000000000000000000000000000021424323b3e4a4a4a4a4a4a3e3b322414020000000000000000000000000000000000041525333c404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494745413d37342b211e160b0200000000000000000000041525333c404a4a4a4a4a4a3d3a3124130200000000000000000000000000000000000000000000000000041525333c404a4a4a4a4a4a3d3a312413020000000000000d2133435055606060606056514433210e0000000000000000000000000000000000000000000000000000000000000f23354552576060606060534f42321f0c0013263849555b606060606056514433210e000000000000000000000000000000000000000000040a0e1920232926313537393a3a39383632282b25201d150b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2025262624221b100200000000000000000000000000000000060b0d171e2125282a2b2c2b2926222019100e0800000000000000000000000000000000000c171f213335353535353326241d120400000000000000000000000000000000000000000a161e212f35353535353533211f170c0000000d2133435055606060606060534e42311e0b00000000000000000000000000000000071a2d3d4a4e6060606060605a544737251100000000000000000000000000000000000c1f32424f53606060606060534f42321f0c00000000000000000000000000000000000d21334350556060606060606060606060606060606060605f5e5c5a56524d483b3632291d150a0000000000000000000d2133435055606060606060534e42311e0b000000000000000000000000000000000000000000000000000d2133435055606060606060534e42311e0b00000000000013283c50616a75757575756b62513d2914000000000000000000000000000000000000000000000000000000000001152a3f52636d757575757569604f3b261200192e4255677075757575756b62513d2914000000000000000000000000000000000000000000000000060b0d13141d20222425252422211e1616100b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f11110f0d0700000000000000000000000000000000070e1920232933363a3d3f4041403e3c38352b25231c110700000000000000000000000000000c1c293336484a4a4a4a4a493b382f2212000000000000000000000000000000000000000a1a283236444a4a4a4a4a4a483733291c0c000013283c50616a75757575757568604e3a2611000000000000000000000000000000000c21364a5b707575757575756f6554412c18000000000000000000000000000000000012263b4f606975757575757569604f3b2612000000000000000000000000000000000013283c50616a7575757575757575757575757575757575757473726f6c676259534b463931271a0f010000000000000013283c50616a75757575757568604e3a26110000000000000000000000000000000000000000000000000013283c50616a75757575757568604e3a2611000000000000152b40556a808a8a8a8a8a806b56402b16010000000000000000000000000000000000000000000000000000000002182d42576d818a8a8a8a8a7e69533e2914001b31465b70858a8a8a8a8a806b56402b160000000000000000000000000000000000000000000000000000000001080b0d0f0f0f0e0d0c0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a212b353839464b4f535556565554514d483c3b372e201c130800000000000000000000000417293a464c5d60606060605e514c402f1e0e000000000000000000000000000000000002162838454b595f60606060605e4c473a29170400152b40556a808a8a8a8a8a8a7e68533d2813000000000000000000000000000000000e24394e63798a8a8a8a8a8a836f5a442f1a000000000000000000000000000000000014293e53697e8a8a8a8a8a8a7e69533e29140000000000000000000000000000000000152b40556a808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898784817d77706961574b45382d1f1103000000000000152b40556a808a8a8a8a8a8a7e68533d281300000000000000000000000000000000000000000000000000152b40556a808a8a8a8a8a8a7e68533d2813000000000000152b40556a80959f9f9f95806b56402b16010000000000000000000000000004040000000000000000000000000002182d42576d82979f9f9f937e69533e2914001b31465b70869b9f9f9f95806b56402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f1315161614110d0b0500000000000000030a0b0b0402000000000000000000000e19212d363c484d55576165686a6b6b6b6966625a57504b3f353025180e000000000000000000000a1f3346586173757575757573665e4c3c2c1808000000000000000000000000000000000a1e324556606f75757575757573615847331f0a00152b40556a80959f9f9f9f927d68533d2813000000000000000000000000000000000e24394e63798e9f9f9f9f99846f5a442f1a000000000000000000000000000000000014293e53697e939f9f9f9f937e69533e29140000000000000000000000000000000000152b40556a80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9f9e9c9a96928c857e766a60564a3d2f2111020000000000152b40556a80959f9f9f9f927d68533d281300000000000000000000000000000000000000000000000000152b40556a80959f9f9f9f927d68533d2813000000000000152b40556a8095aab5ab95806b56402b160100000000000000000001080b141919160c0a0400000000000000000002182d42576d8297acb5a8937e69533e2914001b31465b70869bb0b5ab95806b56402b160000000000010a10120c0a03000000000000000000000000000000000000000000000000000001080b0f121415151412100c0a03000000000000000000000000000000000000000000000000050a151d2025292b2c2b29262220190d0b050001080b191f20201917110700000000000006141e2c353d4a4e5a626a70767a7d7f8081807e7b78736c655d524a43362c1e120400000000000000000c21364c6176888a8a8a8a8a887c665b493626140100000000000000000000000000000a1a2e3f4b6074838a8a8a8a8a8a8876614c37210c00152b40556a8095aab5b5a8927d68533d2813000000000000000000000000000000000e24394e63798ea3b5b5af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8b5b5a8937e69533e29140000000000000000000000000000000000152b40556a8095aab5b5b5b5b5b5b5b5b5b5b5b5b5b5bcb5b4b3b1afaba7a39b93897f74635b4b3f2f20100000000000152b40556a8095aab5b5a8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aab5b5a8927d68533d2813000000000000152b40556a8095aabfab95806b56402b1601000000000000000009141d20292e2e2b211f170c000000000000000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000000005131e2527211e170b0000000000000000000000000000000000000000000003090c151d202427292a2a292825211e170d0b0500000000000000000000000000000000000000000d19202731363a3e4041403f3c37342b221f180d141d202e3435352e2b24180a00000000091724323c494d5b636e787f858a8f929495969593918d88827b71676054493c30221406000000000000000a1f334658667c90a09f9fa79e8a79635443301c0e00000000000000000000000000021527384b5d6c81979faa9f9fa0917c665847331f0a00152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfcfbeb2ada9a9a9a9a9a9a9a9a9a9aaabacafb3b9c1b5b0a79e948679655d4b3e2e1c0c00000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b16010000000000000009192631353e4344403733291c0c0000000000000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000007142330393d3633291b0c00000000000000000000000000000000000000020b161e21273135393c3e3f3f3f3d3a3633292220190d050000000000000000000000000000000005131d2b3438454b4f5355565554514d483b37342a1e263135434a4a4a434036281807000006172735424f5b636e79838c949b9faaa8aaababaaa9a6a69d9790867c72635b4d40312414050000000000000417293a4c5e6d8297a6b7b8a89a8473604b3c2c1808000000000000000000000000081d314556657a8d9fb4bbb8a698826d5e4c3a29170400152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfc6b2a098949494949494949494949496979a9ea7acb4b9b8b3a49c8a7b655c4a3a291704000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b160100000000000001142637444b535959554c473a29190900000000000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000003142532414d524c46392a1c0c00000000000000000000000000000000000a161e28323637444b4e5154555554524f4b463937342b20180d0000000000000000000000000000061423313c484d566064686a6b6b69666259554c473b3237444b585f606059534636241100001023354652606979838c999fabb0b4bbbbb4b3b2b3b9c4b7b2aca49c918579675f4e42312313010000000000000c1c2f404c6176879db2bdb4a2937e695b49362614010000000000000000000008182c3d4b6074869cabbcbfb39e8876614c402f1c0c0000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfc2ad98827f7f7f7f7f7f7f7f7f7f7f808284898e979ea8b3c0b6a89e8b7a645846331f0e000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b1601000000000000081d31445560696e6e6b61584737271502000000000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000c2032434f5f676157473a2a1a0a000000000000000000000000000002101a283239464b5255606467696a6a6967656157544d483b342b1d1301000000000000000000000001142431414d5a626c757a7e8081807e7b77716a62594b454455606e7475756e6453402b170001162b3f52646d7e8a989fabb5bbb4afa8aa9f9e9d9ea8a4aab1b6b5b1a29b8a7d68604e41301f0f00000000000000121f334658667b909fb1c0b49f8a79635443301c0e00000000000000000001142636495b6a8095a4b6c5b2a0917c675847332212000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c6a6a6a6a6a6a6a6a6a6a6a6b6c6f7479818a9aa2b2beb9a99d8876614c3c2b19050000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b16010000000000071b2d3e4b60737e83838076615544311d0b000000000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000012273b4f61697c76615847382816020000000000000000000000000513202e38454b5761686f75797c7e7f7f7e7d7a76716a62594d483b311c1408000000000000000000000f2031424e5f677881898f9395969594918c867f776b60574b6073828a8a8a826e59432e190003182d43586d82939fa9b5bab4aa9f99928d8a8888898b8f959ca4b2b7b4a89f8d7e685f4d3d2c18080000000000000417293a4c5e6d8297a5b7baa99a8573604b3c2c18080000000000000000081c30435463798b9fb4c2b8a798836e5f4d3a2a1704000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c675454545454545454545556575460646c778498a0b2c2b7a697816c5a4835200b0000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b160100000000000922364a5c6c81939899958574604b3a2917040000000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000014293f54697f928576615645321e130000000000000000000000061323313e4b56606a757d84898e9193949494928f8a867f786d62594e42302618080000000000000000071a2d3e4e60687d8a969ea8a8aaabaaa9a6a49c948a8075645c667c919fa998836e59432e190001162b40566b8095a3b4b2a99f968b847d787573727475797f86929da6b4baab9f8d7d675b49362513000000000000000b1b2f404c6176879db2bdb4a2937e695b493626140100000000000005192b3b4b6073859ba9babfb39e8977624c41301c0c00000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523f3f3f3f3f3f3f3f3f4136434a4e5962728298a4b5c4b49f8b78624d38220d0000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b160100000000091930404f647a8d9faeaea3937e695846331f0d0000000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600061c31465b71869b9b8474604b41301c0c00000000000000000003132431414e5c64747f8992999ea8a6a9aaaaa9a7aa9f9b948b827768604b4336261401000000000000000d21364a5c687e929ea8b3b6b1a7a79e9d9ea7a5a89f95877a686b8096abae98836e59432e1900000b20354b6073859ba6a0988b81786f686360545d5660646a737d879ba2b4bcab9e8a79635443301c0800000000000000111e334657657b909fb1c0b49f8a79635443301c0e0000000000000c20344859697e93a2b4c5b3a1927d6759473423120000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c2a2a2a2a2a2a2a2a2b2530353b48546074869cb1c4bbaa95806a553a29170400152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b1601000000011527374c5e70849aabbcc1b39e8976614c3c2b190500000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000010253a50657b8b9f98826d5f4d3a2917040000000000000000112131424e5f687a87949ea7afb4b4afacaaa9abadb3b4b0aa9f978a7d6c605443301c1502000000000006192b3c4e647a8c9fb4b9b3a49c928c8988898b90969ea59c8b7d70859aafae98836e59432e190000081d314455627888918e83786c625a534e4a4338454b4f54606777849ba3b5b9a89b8572604a36261401000000000000031729394c5d6c8197a5b7baa99a8573604b3c2c1808000000000c1c30414d62788a9eb4c0b9a799836e5f4d3b2a18040000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271515151515151516131c202b364556667b90a6b8c8b19c86715846331f0a00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b1601000000081d314455667c91a2b4c9c9b8a795806b5a4834200f00000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000e23374b5d687d92a0927d675846331f0c000000000000000b1b2e3f4e60687d8b9ca5b3b6b2a99f9997959496989ea6afb4b4a89e928172604b4333201000000000000b2035485a70849aabbcb3a199867d76737374767a8189959f9f92808a9eb4ae98836e59432e19000001152737485a62777c796e625a4d483c38353028323636434b596174859ba7b8b4a3927d675443301c08000000000000000b1b2f3f4b6175879dabbcb4a2937e695b493626140100000417293a4d5f6e8399a8b9bfb39e8977624d41301d0d000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000070d1828384a6073889eb3c8b59f8b76614c36210c00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b160100000417293a4b6074869cb1c0bab4bab49f8a78624d3d2d1a07000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000081c2e3f4e606d82979e8876614c3a2a17040000000000031729394b5d687e8d9faab6b1a59d918a84817f7f8183888f9aa2b4b9b49f97826d61503e2d1b07000000000d23384d62788da2b4b9a79983746761585d5861656c75808c9c9e959ea8b9ae98836e59432e1900000009192b3c48596267635b4d493c352b23201c151d2026303b47566278899eb3c1b19c8673604b35200b0000000000000000111e334657657b8d9fb5c0b49f8a79635443301c0e00000a1f334658677c91a1b3c6b3a1927d68594834231300000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000a1c3043546d8398adc2bcab8f79644f3a240f00152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b160100000a1f334658697e93a4b6b5a99fa9baa997826d5c4a362111000002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000000112131414c6176899e96816b5847331f0a00000000000a1e334657657b8c9fabbbb19f97877c756f6c6a6a6b6e747a84929faabbb1a0947f6a5c4a3622120000000014293e53697e93a8c0b39e897761564c473a464c5057616b7a869aa2b4b9c6ae98836e59432e19000000000e1e2b3b474c524e4a3d352b20190e0b0702090b141c2a38485a697e94a6b8b6a4907b65503b25100000000000000000031729394b5d6c8197a5b6baa99a8573604b3c2c18080a1a2e3f4c6176889db3bfb9a899846f604e3b2b180500000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000132536556b8095aac0c9a6907b66513b261100152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b16010006192b3c4c6176889eb3b5a39b8a9fb4b49f8c79644e402f18080002182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000003131f334658697f949e8a76614c37210c0000000005182b3b4c6176879daabbb19f97817567605757555456546065707e8c9fabbcb49f8c7a644f40301d09000000172c41566c8196abc1ad97826d584738332a333639464b5c6476849aa2b4c3ae98836e59432e1900000000000e1d2a34373c39362d20190e06000000000000010c1a2b3c4b6075889eb3c2ac97826d573b2a180500000000000000000b1b2f3f4b6175879dabbcb4a2937e695b493626141628384b5d6d8297a6b7c0b49e8a78624d41311d0d0000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000014293f54697e94a9bebca6917c67513c271200152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b1601000b2035485a6b8096a7b8b19b858196acbcab9a846f5e4c3626140102182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000011212f3f4b5061768a9f947e6954392816030000000b203448596b8196a5b7b5a497816c60564b4539403f36434b4f60687d8d9fb5bbaa9b85715e4c39240e000000182e43586d8398adbea9937e69543a2a1f171f2128323e4a586175849aafc3ae98836e59432e190000000000000d181f222724211a0f06000000000000000000000e1e3245576c8297acc1b29d87725948341f0b000000000000000000111e324657657b8d9fb5c0b49f8a79635443301c1e324556657b8d9fb5c4b4a2937e685a48342313000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000000000000132536556a8095aabfc6a5907a65503b251000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b1601071b2e3e4d62788b9fb4b8a6937e7a8ea1b3b3a1907b655443301c0a00182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000091c2f3f4c5d657074849a9b85705746321e090000000d22374d62778a9fb4c1b19c8673604b453832282a2a263035424e5f6c8197a7b8b5a3917c66513c2b19060000192e43586e8398adbea8937e69533a2a1a100a0c161e2d3a46576a8095aabfae98836e59432e1900000000000000050b0d120e0c070000000000000000000000000316283952677c91a7bcb7a58c77624c37220d000000000000000000031629394b5d6c8196a5b6baa99a8573604b3c2c2d3d4b6074869cabbcb9a89a8472604a3c2b1905000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000c1c3043546d8297adc2b9a88e79634e39240e00152b40556a8095aabfbda8927d68533d28130d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b090300000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b16000a22374b5c6e8398a9bab39e88756f849aafbfb19b8673604b38281602182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000e23384c5d657b858a9aa19f8b76614b36210c0000071a2d3d556a8095a9bab4a38f7b65554432281e161515141c2031414c6177899eb3c1af9a846f5a4835200b0000162b40556b8095aac1ac97816c5847382e221f1814111c2939556a8095aabfae98836e59432e190000000000000000000000000000000000000000000000000000000d23384d62788da2c7c3a48f7a654f3a2510000000000000000000000b1b2e3f4b6175879cabbcb4a2937e695b4936364a5b6b8095a4b6c0b49e8a78625443301d0d00000000000000000000152b40556a8095aabfbda8927d68533d2813080808080808080808080808080808080e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c2712070707070700030a0c121c293a4a6073889db3c8b49e8974604b35200b00152b40556a8095aabfbda8927d68533d2823232323232323232323232323232323211e160a000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b160a1a30414f647a8fa0b2b7a5947f69657a8fa1b3b5a3927d685645321e0c182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160005192b3c50657b8c9a9fa9b3ab8f7a644f3a250f00000c21364a5b72879db2c7b09b85705d4b3726160a0300000108131f3347586b8096abc3b4a28d78624d38230d000010253a4f657b8fa3b5b39e897661564b3e37332a2926232b40556a8095aabfae98836e59432e190000000000000000000000000000000000000000000000000000000c21364b61768ba9babca7917c67523c27120000000000000000000000111e324657657b8d9fb5c0b49f8a79635443435463798c9fb4c3b4a2937e695a493625130000000000000000000000152b40556a8095aabfbda8927d68533d281d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271c1c1c1c1c1c1c171e2125303a4658667c91a6b7c0ae99846f5544311d0800152b40556a8095aabfbda8927d68533d38383838383838383838383838383838383632281a0a0000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b161527384d5f70859ab0beb29d8775605d6e8399aabbb29d8775604b3a2a17182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000b2035485a72869caab4bac7a6917c67513c271200000e24394e63798ea5b7c5a8937e69533f2e190900000000000004182a3a4e64798ea5b7c0a8937e69533e291400000b20354a6075869baab9a8998374645c534c473a3e3b393640556a8095aabfae98836e59432e190000000000000000000000000000000000000000000000000000000a1e32465774899fb4bda8927d68533d28130000000000000000000000031628394b5d6c8196a4b6baa99a8573604b4b6073859baabbbaa99a8472604a3c2b18080000000000000000000000152b40556a8095aabfbda8927d68533d3232323232323232323232323232323232323232394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c31313131313131312933363a404c586176879db2c4b4a2907b66503727150100152b40556a8095aabfbda8927d68534d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b453828160300000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b161d314556677c91a2b4b4a3917d67564e63798b9fb4b7a5947f6a5847331f182d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000d22384d62778da4b6c8cdc7a7927d67523d2812000014293e54697e93a9c3b8a68c77624d37221100000000000000000c22364a5c72879db2c3ae99836e593928160300071c304354647a8c9fb4b3a199867a706861585754504e4c46556a8095aabfae98836e59432e190000000000000000000000000000000000000000000000000000000b20354a60758a9fb4bda8937d68533e28130000000000000000000000000b1b2e3f4b6075869cabbcb4a2937e695b5a697e93a3b5c1b49f8a79635443301e0e000000000000000000000000152b40556a8095aabfbda8927d6853474747474747474747474747474747474747474747474e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c675246464646464646464739464c50555e6676859ba5b7b7a69a84705e4c3819090000152b40556a8095aabfbda8927d6862626262626262626262626262626262626262605645321e0900000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b172a3a4b6074879cb2beb09b85705f4d495b6c8197a8b9b39e8976614c3c2c192d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000e24394e63798eaabbcecdbaa9907b66503b26110003182d43586d8298adc2b39e8873594834200b0000000000000000071b2d3e596e8399aec3b29d88735745321e0900001325364b5d687e919ea8b3a49c8f857d77716d69666361575e6a8095aabfae98836e59432e190000000000000000000000000000000000000000000000000000000c21364c61768baabbbca7927d67523d281200000000000000000000000000111e324557657b8c9fb4c0b49f8a796362788a9eb4c1b4a3947f695b4936251300000000000000000000000000152b40556a8095aabfbda8927d685d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c675c5c5c5c5c5c5c5c5c5c5d5761656a727c879ba3b5b4a69d8878624d402f1c000000152b40556a8095aabfbfa9947f787878787878787878787878787878787878787874604b36210b00000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b1f334758697e94a5b6b2a08f7a644f413d4c6177899eb4b9a796816c5a4935202d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000c21364b61768a9fb4bcbcb49f8a76614c36210c00061b31465b70869bb0c4af9a846f5a3b2b1805000000000000000000152b40556a8095aabfb7a68b76604b36210b000008182e3f4e60687d8a99a1adb1a29a928b86827e7b78767473728095aabfae98836e59432e190000000000000000000000000000000000000000000000000000000f243a4f64798fa4c8c4a5907a65503b251000000000000000000000000000031628394b5d6b8196a4b6baa99a85726f8399a8b9baa99b8573604b3c2c180800000000000000000000000000152b40556a8095aabfbda8927e7272727272727272727272727272727272727272727272727272798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917d71717171717171717171717273767a7f87919da6b5b1a29a887a645948342211000000152b40556a8095aabfc2ae9d948d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7c66513b261100000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b2c3c4c6176899eb3baa998836e5c4b373447596a7f94a6b7b49f8b78634d3e2e2d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000a1e3346576c81969fabab9f95806b5846331f0a00081e33485d73889db2c2ad97826d58422d180000000000000000000013283d53687d92a8bdc4a38d78634e38230e000000102031424e5f6778838e989fa9adab9f9c9793908e8b8a8887889eb3c3ae98836e59432e19000000000000000000000002080b0802000000000000000000000c1c2f4054697f94a9beb7a68d77624d38220d00000000000000000000000000000a1b2e3f4b6074869cabbcb4a2927e7d92a1b3c1b49f8b79635443301e0e0000000000000000000000000000152b40556a8095aabfc8b39e888787878787878787878787878787878787878787878787878787879db2c7c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfc7b29d87868686868686868686868688898b8f949ca4b1aba49c918478645c4a3b2b1903000000152b40556a8095aabfccbbaea9a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2907b66513b261100000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402b35495a6c8196a7b8b49f8b78624d3e2e2a3b4b6075889db2bbaa98836e5c4b372d42576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600031729394b6074828c91918c8173604b3a29170400071c30435474899fb4c1ab96816c56412c170100000000000000000012273c51677c91a6bcb9a48f7a644f3a250f00000002142431414d5a626e7a828a92989ea6a7aba9a5a3a99f9d9c9ea6b8c3ae98836e59432e190000000000000000060c0e151d201d15120e0b08010000070c121d2a3a4c5e71859bb0c6b39d88735a4834200b000000000000000000000000000000101e324556647a8c9fb4c0b19c86889eb3bfb5a3947f6a5b49362614000000000000000000000000000000152b40556a8095aabfcbb8a69e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9da5b7cbc4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfcab7a59d9b9b9b9b9b9b9b9b9b9b9c9d9e9fabaaab9f9b968e867c70625a4a3e2d1d0d00000000152b40556a8095aabfd5ccc2bfb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a6907b66513b261100000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56402e3f4d63788b9fb4b8a696806b5a4835201e324556687d92a4b5b2a08f7a644f403042576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000b1d324556606d787c7c786c605544311b0b00000b20354a60758a9fb5bfaa95806a55402b150000000000000000000010263b50657b90a5babaa5907a65503b251000000000061423303c484d5c646d767d83888d9195989b9d9faaa2a3acb1bdc3ae98836e59432e19000000000000010f1a212327313631272723201c141b1b1a21232f3b4759667b90a3b5c0ac97826d573c2b1905000000000000000000000000000000021628384b5c6b8096a4b6b6a49c9ea6b8bbaa9b8573604b3d2c1808000000000000000000000000000000152b40556a8095aabfd5c5b8b3b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b7c3d4c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfd4c3b7b2b1b1b1b1b1b1b1b1b1b1b1b2b3b5bcb49f8d85817971675f4d483c2d20100000000000152b40556a8095aabfcfbfb3aeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6907b66513b261100000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b5640364b5d6e8399aabbb39e8876614c3c2b191628384b6073869cb1beb09a85705e4c3742576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000002152838454b5a626767625a4b44372614000000071c304354758a9fb5c0aa95806b55402b160000000000000000000011263b50667b90a5bbbaa5907a65503b2510000000000005121e2b353e4a4f5861676e73787c808386888a8c8d8d979fb1c3ae98836e59432e19000000000003111f2c353837444b44373c3835302630312d3639404c596177879db2c1b4a28f7a65503a251000000000000000000000000000000000000a1a2e3e4b6074869caabbb6b1b3b8c5b49f8b79635544311f0f00000000000000000000000000000000152b40556a8095aabfccbcafaaa3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a6acb9c9c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfcabaada8a1a1a1a1a1a1a1a1a1a2a4a6aaafb4af9a857c746760544d41352b1e10020000000000152b40556a8095aabfc6b3a19994949494949494949494949494949494949494907b66513b261100000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56404354657a8fa1b2b6a4937e685846331e0e0a1c304354657b90a1b3b4a2917c66554442576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000000a1a28323c494d51514d483c312619090000000013254a5f74899fb4c1ab96816c56412c170100000000000000000012273c52677c91a7bcb9a48f7a644f3a250f000000000000000e19202d363a464c52585b63676b6e7173757677798197acc1ae98836e59432e19000000000011212e3d494e5455605556524d4b433645463d4a4e535e6677859ba5b7bdaf9a85705d4b37230e000000000000000000000000000000000000101e324556647a8b9fb4cac7c8cbbbaa95806a5b4a3727150100000000000000000000000000000000152b40556a8095aabfc3af9e958e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e919bacbfc4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfc1ad9c938c8c8c8c8c8c8c8c8c8d8e91959a9faba29a91877d726159493d2c1e0e000000000000152b40556a8095aabfc3ae99837f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f78634d38230e00000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56384a6072859bb0bfb19c8674604b3a291700011426364c5e6f849aabbcb19c8674604b39576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000000000a151d2b35383c3c38352b1d140900000000001e33485d73889db2c2ad97826d58422d180000000000000000000013283d53687d92a8bdc3a38d78634e38230e000000000000000005101b222933363d3d494e5256595b546061626a8095aabfae98836e59432e1900000000081c2e3f4b5b63696f75726b676360545b5a5b5d5b6369717c889ba3b4c0b09f907b65503f2e1c080000000000000000000000000000000000000e1e31424d6277899eb3c9cac7c9b49f8a76614c402f1c0c0000000000000000000000000000000000152b40556a8095aabfbfaa958079797979797979797979797979797979797979797979797979797d91a6bcc4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbda8937e77777777777777777778797b80858b959fa9a59d928477635b493c2b18080000000000152b40556a8095aabfbda8927d6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a635a4935200c00000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b564556677d92a3b5b3a2907c665544311b0b000008182f404e63798c9fb4b6a4937e685746576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000000000020e19202327272220190e010000000000061b30465b70859bb0c4af9a856f5a3c2b1905000000000000000000162b40556b8095aac0b7a58b76604b36210b0000000000000000070d0f10171f21272c35383c404336434a4c556a8095aabfae98836e59432e19000000000e23374b5d65797e848a87817c7875727170707274797e86919da6b4c0b4a296816c5d4b37211100000000000000000000000000000000000008182b3c4e606f8499a8b9c3b7b2b7bbaa97816c5e4c3a2a170400000000000000000000000000000000152b40556a8095aabfbda8927d6864646464646464646464646464646464646464646464646464798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c6761616161616161616364666b6f78808b9ca4b2a29a8879635a483625130000000000152b40556a8095aabfbda8927d68555555555555555555555555555555555555554d493c2c190600000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b564b6075879db2bcab9a846f5e4c372715000000001121364a5b6d8297a9bab39d8875614b576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000000000000060b0d12120d0b050000000000000003182d42586d8297adc2b39e88735a4834200b0000000000000000071b2d3e596e8499aec3b29d88725745321e09000000000000010f1a212425201d14121a2123272b2e25303540566b8095abc0ad98826d58432d180000000010253a50657a8d949a9f9c96918d8a8786858687898e939ca4b3b7bdb1a29a8473604b3f2f1c03000000000000000000000000000000000000132536485a687e93a1b3beb2a59da5b7b19f907c665847331f1300000000000000000000000000000000152b40556a8095aabfbda8927d68534e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67524c4c4c4c4c4c4c4d4f51555a626b79869ca5b4a69d8778625443301c0700000000152b40556a8095aabfbda8927d68533f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f38352c1e0e0000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b56596a7f94a5b7b49f8c79634e402f190900000000071a2d3d4d62778a9fb4b8a695806a59576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000000000000000000000000000000000000000000000014293e53697e93a8c3b8a78d77624d38221100000000000000000d22364a5c72889db2c9ae99836e5939281603000000000006141f2d36393a35312619100c0e121619131c2636576c8197acc1ab96816c56412c17000000000d22374c62778ca6afb4b1aba7aa9f9d9b9a9b9c9ea7a8b1b5c0b4b09f978476615544312111000000000000000000000000000000000000091c30435462788a9eb4bfb2a098879db2bdb39d8876614c41301d0d000000000000000000000000000000152b40556a8095aabfbda8927d68533d3939393939393939393939393939393939393939394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c37373737373738393c3c484d5b6377879db2b7a69a8472604a35200e00000000152b40556a8095aabfbda8927d68533d2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2320190e000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b566177899eb3b9a897826d5b4a3622120000000000000f203448596b8095a6b8b49e8a7762576d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000000000000000000000000000000000000000000000e23394e63798ea5b6c5a8937e69533f2e190900000000000005182a3b4f64798ea5b7bcab937e68533e29130000000000011425323d4a4e4f4b44372e1f170c050000081c3043546f8499afbfaa957f6a55402a15000000000b1f34475973889eb3c6bab4b0b3b4b2b0afb0b2b3b9c3b6b2aba29a8f817461584737271503000000000000000000000000000000000009192c3c4a6072849aa8b9b8a698827b90a2b4b7a698836e5f4d3b2b18080000000000000000000000000000152b40556a8095aabfbda8927d68533d2824242424242424242424242424242424242424394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c2722222222222324262b353d4959667c90a3b5b4a2927d67523c2c1906000000152b40556a8095aabfbda8927d68533d28151515151515151515151515151515150e0c0600000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b5b6c8197a8b9b49e8a77624c3d2d1a0400000000000005182b3b4b6176889eb3b9a897816c5b6d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000000000000000000000000000000000000000000000c2136495b72879cb2c7b09b85705d4b3727180b0300000108131f3447596c8196abc3b59f8c78624d38220d00000000000f1f32434f5c646560554b3f3329201917161925364b6074889eb3c2a6917c66513c27110000000005182a3b5a70859aafbaa89f9b9ea8a5a7a8a9aaa9a8a5a59d968e857a6c6056473a2a1909000000000000000000000000000000000001142637495b697e93a2b4bfb39e88766f849aa8b9b2a0927d6759483625130000000000000000000000000000152b40556a8095aabfbda8927d68533d28130f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c27120c0c0c0c0e0f1119202c3b4c5e71869bb0c0b09b86715b4935210c000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b63798b9fb4b7a6947f6a5948341f0f00000000000000000d1e334657687e93a4b6b49f8c79636d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000000000000000000000000000000000000000000000061a2c3d556a7f95a9bab4a38f7b65554436291e171515141d2530424c6277899eb3c1af9a846f5a4835200b00000000061a2c3d4f6169797a73655d4c473a352b2c2b2b354354667b90a7b8b5a48c77614c37220c0000000000172c41576c8196acb49f8a85898c90929394959492908c87817a70645c4b45382a1c0c000000000000000000000000000000000000091d31445563798a9fb4c0b3a1917d6762788a9eb4beb39e8978625443301c0f00000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000050f1d2f40556a8095aabfb5a38d78634d38230e000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b6f8399aabbb29d8775604b3b2a18010000000000000000031729394b6074869cb1bbaa99836e6d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000000000000000000000000000000000000000000000000f22374c62778a9fb4c1b19c86736054463933292b2a263136434a606d8297a8b9b5a3917c66513c2b1905000000000c2135495b697f8e8f867a6c61584d483c41413c484d6072849ab0c5b19c86715947341f0b000000000013283e53687d93a8b49f8a7374777b7c7e7f7f7f7d7b77726c645c4f4b3e32281a0c00000000000000000000000000000000000009192d3d4b6073859ba8bab9a799836e5f5a687e93a1b3b9a79a8472604a3d2c1909000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000012273c51667c91a6bbc1a8927d68533d2813000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab95806b7b90a1b3b5a3927d675645321d0d000000000000000000000b1d314455667c91a2b4b3a18f7b6d8297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000000000000000000000000000000000000000000000000b1f3448596b8096a5b7b5a498827261574c4639403f37444b5460687e939fb1bbaa9b85705e4c381e0e00000000000e23384e63798c9fa49c8c81766b625a585756575a626e8095a2b4b9a8937e69533b2a1804000000000010253a4f657a8fa4baa98e7863626567686a6a6968656259564f4a3e372e1e160a000000000000000000000000000000000000021527374a5b6a7f94a3b4c0b39e8977624d4e606f849aa7b9b3a2937e695b49372715010000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000010253a4f657a8fa4bac0aa95806b55402b16000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfab958073859bb1bfb09b8572604a3828160000000000000000000000011527374c5e70859aabbcb09b85738297acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000000000000000000000000000000000000000000000005182a3b4b6175879daabbb2a098827568615757555456556065727e8d9fb4bdb49f8c7a644f402f1d000000000004192f44596e8499a8b6ab9f96898078726d6c6b6d707882959eafbeb39e8976614b36210c0000000000000c21364c61768ba6b7a7917c675250525354555453504c473b39362d221b1002000000000000000000000000000000000000000a1d31445563798b9fb4c1b4a2927d685948424d6278899eb3bfb49f8a79635544311d100000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000010253b50657a90a5bac1ac97816c57422c17020000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfaa957f7d92a3b5b2a18f7a655443301a0a000000000000000000000000091930404f647a8d9fb5b5a3917d8196acbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000000000000060c0e1415120c0a030000000000000000000d1e334657657b8c9fabbab2a098887d766f6c6a6a6c6e747a84939fabbcb19f947f6a5c4a36221200000000000011263b50667c8a9ca4b4b4a79e958d8783818082868c98a0afbcb2a0927d685746331e0a0000000000000a1f33465873889db2aa95806b55403d3e3f403f3d3b37342a24221b100800000000000000000000000000000000000000000a1a2d3e4b6074859ba9babaa89a846f604e3b344859687d92a1b3baa99b8573604b3e2d1a0a00000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000000000000000000000000000014293e53697e93a8bebea8937e69533e29140000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000112273c52677c91a7bcc1ab96816c56412c17010000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfa9947f889db2baa999836e5d4b36251300000000000000000000000000001222364a5c6e8398a9bab29d878096abbea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000000000000e192023292b28211e160b0000000000000000031729394b5d687d8d9fa9b6b2a69d928a8481807f8183888f9aa2b4b9b49f97816d614f3e2d1b040000000000000f23384c5e667a86979fabb5b3aaa49c989696979b9fabb2b9b4a098826e604e392917030000000000000417293a5a6f8499afae99836e593929292a2a2a2826221f180f0d07000000000000000000000000000000000000000000021528384a5c6a8095a3b5c1b49f8a78624d42312b3b4e606f8399a7b8b5a3957f6a5c4a38281603000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000000000106080909090909090909090914293e53697e93a8bebea8937e69533e29140909090909090909090907050000000000152b40556a8095aabfbca7917c67523c2712010101010200040a121f3041566b8196abc0bfaa957f6a55402a15000000152b40556a8095aabfbda8927d68533d281305050505050505050505050505050505050503010000000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfb19c869ca6b7b49f8b78634d3f2e18080000000000000000000000000000071b2e3e4d62788b9fb4b6a59d879db2bea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000000007151e2c35383e403d3632291b1103000000000000000b1b2e3f4e5f687d8b9ca5b3b7b2a99f9a97959496989ea6b0b4b4a89e928172604a4332201000000000000000091c2f404c5c6475818c999fabb1b6b2adacabacb0b4b7b2a89e948274604b42311b0b0000000000000000162c41566b8196abb29d87725746321e15151413100d0b050000000000000000000000000000000000000000000000000a1d324556647a8c9fb4c1b4a3937e695a4935241d31414c6277899eb3bfb49f8c7a645645321e11000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a0000000b141b1d1e1e1e1e1e1e1e1e1e1e1e293e53697e93a8bebea8937e69533e291e1e1e1e1e1e1e1e1e1e1e1c1a130a000000152b40556a8095aabfbca7917c67523c2717171717171719171f212f3d4d5f72869cb1c7c1a7917c67523c2712000000152b40556a8095aabfbda8927d68533d281a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a18160f06000000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfb5a49ca4b5b8a796816b5a4935211100000000000000000000000000000000102035495a6b8196a7b8b6a59da5b7bea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000000041525323c494d5455524b46392e21110000000000000000112131414e5f677a87959ea7afb4b4afacaaa9abaeb3b5b1aa9f978a7d6c60544330251502000000000000000011222f3d4a57616c7a838c959ca4a5a8aaababa9a8a69d968a7f7260564531231300000000000000000013283d52687d92a7b59f8b76614b36210c0000000000000000000000000000000000000000000000000000000000000a1b2e3f4b6074869caabbbaa99b8573604b3c2c191320344859677d92a1b2bbaa9c8675604b3f2f1c0c0000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a00000f1d282f323434343434343434343434343e53697e93a8bebea8937e69533e343434343434343434343434312f271b0d0000152b40556a8095aabfbca7917c67523c2c2c2c2c2c2c2d2e293337404c5b677d92a4b6c9b5a38d78624d38220d000000152b40556a8095aabfbda8927d68533d30303030303030303030303030303030303030302d2a2317090000152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfc2b5b1b5c2b39e8976614c3c2c19030000000000000000000000000000000006192b3c4c6176899eb3c3b7b2b7c3bea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000000122232434f5a63696a6761574b3f2e1e0e0000000000000003132331414d5c64747f89929a9fa9a7a9aaaaa9a8ab9f9c948b827768604a433625130700000000000000000004111f2d39464b5c646f7980878c909395969694928e8881776a605445382715050000000000000000000f24394f64798eabbcab8f7a644f3a240f0a0a0a0a0a0a0a0a0a0a0a0a0700000000000000000000000000000000031628394b5d6b8096a4b5c2b49f8b79635443301e0e05182b3b4d5f6e8399a7b8b6a496816c5d4c3a29170400000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a000b1d2d3a44484949494949494949494949494953697e93a8bebea8937e6953494949494949494949494949494743392b1b0a00152b40556a8095aabfbca7917c67524141414141414142433a474c525e6679889db3c2c2b19b86715a4835200b000000152b40556a8095aabfbda8927d6853454545454545454545454545454545454545454545423f3527170600152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfd2c9c6c9b6a4937e695847331e0e0000000000000000000000000000000000000e1f334758697f94a5b7cac7cad4bea8937e69533e2914001b31465b70869bb0c0ab95806b56402b160000091d30404f6169787e807d75655d4b3c2b190600000000000000051323303e4b56606a767d848a8f929495959492908b867f786d62594e42302518080000000000000000000000010f1b29323e4a4f5b636b72777b7e8081817f7d79736c62594a4336271a0a000000000000000000000b21364b60768a9fb4a8927d68533d282020202020202020202020201f1d150b07000000000000000000000000000b1e324557647a8c9fb4c2b5a4947f6a5b4936261400000d1d30414c6177889eb3beb59f8d7b655846331f1200000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a0014283a4b575d5e5e5e5e5e5e5e5e5e5e5e5e5e5e697e93a8bebea8937e695e5e5e5e5e5e5e5e5e5e5e5e5e5e5c564939271300152b40556a8095aabfbca7917c67565656565656565657585a5861686f7c889da6b8c7b6a4937e68533c2b1905000000152b40556a8095aabfbda8927d685a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a58524535230f00152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfd5ded1c0b19c8674604b3a29170000000000000000000000000000000000000004172a3a4b6074879db2c1d2dfd3bea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600000f24394c5e697f8b939592877b655a4835200b00000000000000000513202e38454b5761686f75797c7f80807f7d7a76716a625a4d483b311c130800000000000000000000000000000b161e2d363d494e55596166696b6c6c6a68645c564c473b3025180a0000000000000000000000091e32455772879cb2ab96816c56413535353535353535353535353534322a201c1308000000000000000000000b1b2f3f4b6075879cabbcbbaa9c8674604b3d2c1808000000131f344759677c91a0b2bcab9d8776614c41301d0d000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a001b2f445769727373737373737373737373737373737e93a8bebea8937e737373737373737373737373737373716856432f1a00152b40556a8095aabfbca7917c6c6c6c6c6c6c6c6c6c6c6e6f73767d84909da6b7c4baa99c8674604b36200e00000000152b40556a8095aabfbda8927d6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6d63523f2a1600152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfd5dac9b4a2917c665544311c0c00000000000000000000000000000000000000000c1d324556677d92a3b5c9ddd3bea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000215283851667c919fa9aaa59d8a78624d38230d00000000000000000002101a283239464b5356606467696a6b6a68656158554d483c342b1d13000000000000000000000000000000000003101b222c35393b474c505355565654534e4a3e37342a1c130800000000000000000000000003162839596e8499aeaf9a856f5a3b4a4a4a4a4a4a4a4a4a4a4a4a4a4a473f35302518080000000000000000031729394b5d6c8196a5b6c2b49f8c7a645544311f0f0000000004182a3b4d5f6e8298a6b8b7a698826d5f4d3b2b18050000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a001d32485d72878989898989898989898989898989888a9eb4c9c9b49e8a88898989898989898989898989898986715c47311c00152b40556a8095aabfc4af9983818181818181818181828384888c929aa2b3b7c3b6a99f8b7a645645311d0900000000152b40556a8095aabfc6b19c868485858585858585858585858585858585858585858585826d58422d1800152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfd5cfbcab9a84705e4c372715000000000000000000000000000000000000000000021528384a6072859bb0bfd0d3bea8937e69533e2914001b31465b70869bb0c0ab95806b56402b1600091d32455671869cb1bac3b7a896816c56412c1700000000000000000000000a161e29323638454b4f525455555453504c473a38352b20180d0000000000000000000000000000000000000000070f1a21232a34373b3e4041413f3d39362d221f180d000000000000000000000000000000162b40556b8095aab39e8873595f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5c554a4336251300000000000000000c1e334657657b8d9fb5c3b6a495806b5c4a3727150100000000000c1d30414c6176889db3beb2a0917c6759483420140000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a001f34495e74899e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea8b9cdcdb9a89e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9d88735d48331e00152b40556a8095aabfc7b3a19996969696969696969697989a9da6a7afb4c0b9b3a59d8b7c665c4a3827150200000000152b40556a8095aabfcab6a49c9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a86725c47321d00152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aabfc7c6b59f8d7a644f40301909000000000000000000000000000000000000000000000a1c304354657b8fa1b3c8c7bea8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000b20364b60758ba4b6c9d4c6b09b85705b46301b000000000000000000000000020b161e212731363a3d3f40403f3d3b3733292220190e050000000000000000000000000000000000000000000000060c0e181f2226292b2c2c2a2824211a0f0b050000000000000000000000000000000012273c52677c91a7b8a78c7775757575757575757575757575757574726a605443301c070000000000000c1c2f404b6175879dabbcbcab9c8674604b3e2d190900000000000000121f334758667c91a0b2beb39e8977624c42311e0e00000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000e24394e63798ea3b8c4af99846f5a442f1a001f34495e74899eb3b3b3b3b3b3b3b3b3b3b3b3b3b3b4b9c6c7c7c6b9b4b3b3b3b3b3b3b3b3b3b3b3b3b3b29d88735d48331e00152b40556a8095aabfc7bfb3afabababababababababacadafb2b7c4bbb4afa89e95877a665e4c3e2e1a0a0000000000152b40556a8095aabfc7c2b6b1afafafafafafafafafafafafafafafafafafafafafaf9c87725c47321d00152b40556a8095aabfbda8927d68533d2813000000000000152b40556a8095aab2b2b2a897826d5c4a3622120000000000000000000000000000000000000000000000001325364b5d6e8399aab2b2b2a8937e69533e2914001b31465b70869bb0c0ab95806b56402b16000b20354b60738a9fb4c8d1c3af9a85705a45301b0000000000000000000000000000030a0c151d2024272a2b2b2a2825211f170d0b0500000000000000000000000000000000000000000000000000000000040b0c111416171715130f0d07000000000000000000000000000000000000000e24394e63798eaabbb49f8c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89877f72604a35200b00000000000417293a4c5e6d8297a5b7c3b59f8d7b655645322010000000000000000004172a3a4c5e6d8298a6b7b8a799836f604e3c2c1909000000152b40556a8095aab2b2a8927d68533d2813000000000000000000000000000000000e24394e63798ea3b2b2af99846f5a442f1a001f34495e74899eb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b29d88735d48331e00152b40556a8095aab2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b0aeaca9aa9f9a93898075645c4c402f2010000000000000152b40556a8095aab2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b19c87725c47321d00152b40556a8095aab2b2a8927d68533d2813000000000000152b40556a80959d9d9d9d9b8a77624d3e2d1b0400000000000000000000000000000000000000000000000008182e3f4e63798b9b9d9d9d9d937e69533e2914001b31465b70869bb0bbab95806b56402b1600081d31445570859aaab8c1b4a5947f6a553f2a15000000000000000000000000000000000002090b0f121415161513100c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4bbaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c937e68533e291300000000000a1f334758667c909fb1c3b7a596816c5d4b382816020000000000000000000c1c30404c6176889db2bdb3a1937e685a49372614010000152b40556a80959d9d9d9d927d68533d2813000000000000000000000000000000000e24394e63798e9d9d9d9d99846f5a442f1a001f34495e74899d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d88735d48331e00152b40556a80959d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c9c9b9996938f8a847d766a61574b3e2f221202000000000000152b40556a80959d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c87725c47321d00152b40556a80959d9d9d9d927d68533d281300000000000014293e54697f8788888887857c6659483420100000000000000000000000000000000000000000000000000000112135495b677d8687888888877d67523d2812001b31465b70859ba6a6a695806b56402b1600011527374e647a8c9ea6a7a39b8776614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445571879cb1c8bbb4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4af9a85705a45301b05000000081c2e3f4c6176889db2b2b2b19d8775614b3f2e1a0a0000000000000000000000121f334758667c909fb2b2b29e8a78635544311d08000014293e54697e8788888888877d67523c2712000000000000000000000000000000000e23384e6379878888888887826d58432d18001c31475c7186888888888888888888888888888888888888888888888888888888888888888888888888888885705b46301b0014293e54697e8788888888888888888888888888888787868584817e7a756f6861574b46392e2012040000000000000014293e54697e878888888888888888888888888888888888888888888888888888888887846f5a45301a0014293e54697f8788888888877c67523c271200000000000012273b4f6169727272727270665e4c3b2b18020000000000000000000000000000000000000000000000000000061a2c3d4d5f67717272727272675f4d3a2510001b31465b70859090909090806b56402b1600000922364a5c677d8890918e8578625846331f0a00000000000000000000000000000000000001080b0e111415151412100c0a04000000000000000000000000000000000000000000000000000000000000070b0e1214151514120f0b09020000000000000000000000000000000000000002152737586e8398adb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b29c87725d47321d080000000e23374b5d6d82989d9d9d9d9c907c6657463221110000000000000000000000000417293a4c5e6d82979d9d9d9d9b8573604b35200b000012273b4f6169727272727272675f4d392510000000000000000000000000000000000c2135495b637272727272726d64523f2b16001a2f435668717272727272727272727272727272727272727272727272727272727272727272727272727272706755422e190012273b4f6169727272727272727272727272727272727271706e6c69656056534b463932291b1002000000000000000012273b4f61697272727272727272727272727272727272727272727272727272727272726f6655412d180012273b4f6169727272727272675f4d3925100000000000000c1f32424f545d5d5d5d5d5b514c402f1d0d000000000000000000000000000000000000000000000000000000000f1f30414d525b5d5d5d5d5d524d41311e0a0010253a4f657a7b7b7b7b7b79634e38230e0000071b2d3e4d5f67757b7c7970625a493a29170400000000000000000000000000000002080b141c202327292a2a292825211f17100b080100000000000000000000000000000000000000000000000808131c202327292a2a292724201d150c0a040000000000000000000000000000000000152a40556a7f959d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c87725d47321d0800000010253a50657a878788888888877e695e4c39291603000000000000000000000000000c1c2f404b6074838788888888877d68523d281300000c1f32424f545d5d5d5d5d5d524d41301d0a00000000000000000000000000000000061a2c3d494e5d5d5d5d5d5d5852463523100013273949565c5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5b5548382613000c1f32424f545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5b595754504b45383632291e160b000000000000000000000c1f32424f545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5a5548372512000c1f32424f545d5d5d5d5d5d524d41301d0a000000000000021424323b3e4848484848463b382f22120000000000000000000000000000000000000000000000000000000000011323303a3d4648484848483d3a31231301000e22374b5d656666666666635b4935210c000000102030404d56606567645c4d493c2c1c0c00000000000000000000000000000109151d20263035393c3e3f3f3f3d3a37332a26201d1409030000000000000000000000000000000000000007101b22253035393c3e3f3f3e3c39363127221f180c0500000000000000000000000000000011263b50667c878888888888888888888888888888888888888888888884705a45301b050000000e23374b5d657272727272727269604f402f1b0b000000000000000000000000000000121e324556606e727272727272685f4e3a25110000021424323b3e4848484848483c393023130100000000000000000000000000000000000e1f2c3538484848484848433f35271706000a1b2b39434748484848484848484848484848484848484848484848484848484848484848484848484848484642382a1a0900021424323b3e4848484848484848484848484848484847474644413e3a363228211e160b030000000000000000000000021424323b3e4848484848484848484848484848484848484848484848484848484848484541372a1a0800021424323b3e4848484848483c39302313010000000000000006141f272933333333323126241c120400000000000000000000000000000000000000000000000000000000000005131e252831323333333328251e13050000081b2e3f4b4f51515151514e493d2c1a060000000212223038454b50524e4a3e352c1e0e000000000000000000000000000008141c27313636434b4e5154555554524f4c473a3b3531261e160a00000000000000000000000000000000010f1a212e3736434a4e5154555453514f4b453837342a1f180d00000000000000000000000000000f23384c5e667272727272727272727272727272727272727272727272706655412d1804000000081c2e3f4b505d5d5d5d5d5d5c544f423222110000000000000000000000000000000002162838454b595d5d5d5d5d5d524e41311e0b00000006141f272933333333333327251d1305000000000000000000000000000000000000000e1a21233333333333332d2b2317090000000d1b272f313333333333333333333333333333333333333333333333333333333333333333333333333333302e261a0c00000006141f2729333333333333333333333333333333323231302f2c2925211e160c0a03000000000000000000000000000006141f2729333333333333333333333333333333333333333333333333333333333333302d251a0c00000006141f272933333333333327251d1305000000000000000000020c12141d1d1d1d1d1b110f09000000000000000000000000000000000000000000000000000000000000000000010a10121c1d1d1d1d1d12100a010000000010212e373a3b3b3b3b3b38352c1f0f000000000004121a2832363b3c39362d20190e00000000000000000000000000000e18263037444b5154606366696a6a696765615857504b443732281a12010000000000000000000000000001151f2d363f4b4f54606367696a6a6967646056534c473a342a1d1301000000000000000000000000091c2f404c505d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5a5548372512000000000011212e373a484848484848473e3b3224140400000000000000000000000000000000000a1a283236434848484848483d3a3123130100000000020c12141d1d1d1d1d1d12100a01000000000000000000000000000000000000000000060c0e1d1d1d1d1d1d1816100600000000000a131a1c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1b1913090000000000020c12141d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1b191714100b0903000000000000000000000000000000000000020c12141d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1a1812080000000000020c12141d1d1d1d1d1d12100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b2225262626262623211a0f01000000000000000a161e21262724221b10060000000000000000000000000003111e2c36434b5560676e74797c7e7f7f7e7d7a76726c6560554b4538301d1409000000000000000000000008141c323d4a4e5d646d74787c7e7f7f7e7c7975706961594c473b311d140900000000000000000000000012222f383b48484848484848484848484848484848484848484848484541372a1a08000000000003111c23253233333333333229271f1406000000000000000000000000000000000000000a161e212e32333333333328251e130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1012202020202017150f05000000000000000000000000040a0c1d20202020200d0b05000000000000000000000000000000000000080e1011111111110e0c060000000000000000000002090b10120f0d0700000000000000000000000000000311212f3c49546068747c83898e9193949494928f8c87817b746960564d403126190900000000000000000008182630434f5b63707a82888e9193949493918e8a857e776c62594e4231261909000000000000000000000004121c23263333333333333333333333333333333333333333333333302d251a0c0000000000000000080e101d1d1d1d1d1d1d14120c0200000000000000000000000000000000000000000002090b191d1d1d1d1d1d13110b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a20202020202014120c0300000000000000000000000000040d131520202020202012100a0100000000000000000000000000000000050b0d191f20202020201a0b0700000000000000040d13152020202020202020202020202020202020202020202020202020202020201d1a140a000000000000000000000000000000060c0e0e0e0e0e0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000005131e252735353535352c29221708000000000000000000000c171f213235353535352220190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f3f4b5a63737e8791999ea7a6a9aaaaa9a7a4a49c9790877f75665e4b44372618080000000000000001142636434b616979848f979ea7a6a9aaa9a8a6a99f9a938a817768604b4437261401000000000000000000000000090f111d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1b181208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f3535353535352a272014070000000000000000000000071521282b35353535353527251e130500000000000000000000000000000d181f222e3435353535352f201c130800000000071521282b353535353535353535353535353535353535353535353535353535353535322f271c0e000000000000000000000000010f1a212324242423211f170b0000000000000000000000000000000000000000000000000000000000000000000000000001132330393d4a4a4a4a4a413e3427170000000000000000000c1c293337474a4a4a4a4a4a342b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b120d0b050000000000000000000e1f2f3f4c5d657885939da5aeb3b6b2adabaaaaacafb4b2aca59d94877c6c605544362614010000000000000e1c304354606d7f8b9aa2adb3b8b4aeaba9a9aaadb2afa99f97897e6d605544311d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f1120202020202017150f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a334a4a4a4a4a4a3f3b32251403000000000000000000041525333c404a4a4a4a4a4a3c39302313010000000000000000000000000d1d2a343743494a4a4a4a4a4435302518080000041525333c404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a47433a2c1c0a00000000000000000000000f1f2c3539393939393633291b130500000000000000000000000000000000000000000000000000000000000000000000000a1e30414d52606060605f575145341d0d000000000000000417293a474c5c60606060605e483c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20272220190e0000000000000009192c3d4c5d657b8a9ba3b2b7b4aca59d98969595979a9ea8aeb4b2a59d918173605443301c0800000000000e1e31424b607282949faab4b8b3a99f9996949395989da6b0b4a79e938173604b3726140100000000000000000000000000070c0e1212100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24263535353535352d2a2217090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a475e6060606060544f4332200c0000000000000000000d2133435055606060606060524d41301e0a000000000000000000000009192a3b474c595f60606060605a4a4336251300000d21334350556060606060606060606060606060606060606060606060606060606060605c574a3a271400000000000000000000061a2c3d494e4e4e4e4e4c463a31231300000000000000000000000000000000000000000000000000000000000000000000001025394d5f6775757575756c63513b2b18050000000000000a1f33475861727575757575705a4834200b00000000000000000000000000000000000000000000000000000000000000000000000000000812182530353c38352b1e0e000000000001142637495b657b8b9ea8b5b5aa9f968d8783817f8081858990989faab5b29f968273604b35200b0000000005192b3c4e606c8197a0b4bbb3a69e928a84817e7e808388909aa2b4b39f97826d5544311d080000000000000000000000010f1a2123282825221b100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f383b4a4a4a4a4a4a423e352717050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475870757575757569614f3b271200000000000000000013283c50616a757575757575675f4d39251000000000000000000000021527374759626e7475757575756f605443301c070013283c50616a757575757575757575757575757575757575757575757575757575757575726857432f1a000000000000000000000c2135495b636363636361584e41311b0b0000000000000000000000000000000000000000000000000000000000000000000316283952677d8a8a8a8a8a816c594834200b0000000000000c21374c6176868a8a8a8a8a78624d38220d00000000000000000000000000000000000000000000000000000000000000000000000007111c232f36434a514d483c2b190500000000081d3144556379899ea9b9b4a49c8b8178726d6c6a6b6c70757b838b989faba79b8675604b36200b000000000b2035485a687e939fb1beb3a199887d766e6b69696a6d747b85929ea8a69a8574604b35200b00000000000000000000000f1f2d36393d3d3a372e21100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d2f404c5160606060606057524535220f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778a8a8a8a8a7f69543f2a14000000000000000000152b40556a808a8a8a8a8a8a7d67523c2712000000000000000000000c1d314455627783898a8a8a8a8a8472604a35200b00152b40556a808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86725c47321d000000000000000000000e23394e63797979797876685f4e3a2917040000000000000000000000000000000000000000000000000000000000000000091e3245576e83989f9faa9f8c77624d37220d000000000004182a3b53697e93a49f9f9f937e69543b2a180500000000000000000000000000000000000000000000000000000000000000000007101b222e37404c546067625a4835200b000000031628384b6073859ba7b9b4a29a86796c635b58565555575560666e78828d9a9d8978625645321d09000000061a2c3d4d62788a9eb4bdb3a199837668615756545455546065707d8a9a9c8877625544311d0800000000000000000000071a2d3d4a4e52524f4b3f2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24384c5e667575757575756c63523e2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778c9f9f9f947f69543f2a14000000000000000000152b40556a80959f9f9f9f917c67523c27120000000000000000000c1d2f404b607485989ea89fab9d8877615443301c0700152b40556a80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c87725c47321d00000000000000000004192e44596e838e8e8e8e8a7e685846331f0800000000000000000000000000000000000000000000000000000000000000000b21364b60758a9fb4b5bbab937e69533b2b1805000000000b1f34475970859aafc2b5b09a85705948341f0b00000000000000000000000000000000000000000000000000000000000000060f1a212e363f4b505e66727c78624d38220d000000091e324556697e93a3b5b7a69a8476635b4e493d41404037444b515a626d7a85877b655a48382815020000000c2135495b6d8298a8b9b7a699837461584b46393f3e36434a5060687985877b64594837261401000000000000000005000c21364a5b636767655d4b37220e00070b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667c8a8a8a8a8a8a816c57422d170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca1b5a9947f69543f2a14000000000000000000152b40556a8095aab5b5a7917c67523c2712000000000000000008182a3b4c5e6b8096a3b4b9b49f8d7b6559473625130000152b40556a8095aab5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b29c87725d47321d000000000000000000000f243a4f647a8fa2a3a99e8976614c362614010000000000000000000000000000000000000000000000000000000000000215273851667c91a8bac9c9b09a8570594834200b000000000c22374c61778b9fb4c9cab49f8b77624c37220d0000000000000000000000000000000000000000000000000000000000050e1a212d363e4a4f5d65707b868e79644e39240f0000000b21364b6075889db3c1b39d88766158493c352c2c2a2b2731353c494d5d657072655d4b3c2b1a0a000000001325364e63798c9fb4c2b29d87756156473a32292929253035424e5b637072645c4b3b2b19090000000000010a10121a0e0e23394e63797d7d7b654f3a2510131c201c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b909f9f9f9f97826c57422d170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000001325364759657b8d9fb5c1b4a295806b5d4b3b2a18080000152b40556a8095aabfd1c0b4b0acacacacacacacacacacacacacacacacacacacacacac9c87725d47321d000000000000000000000d22374b5c70859ab0b9a8947e695443301c08000000000000000000000000000000000000000000000000000000000000091d3145566d8398adbbb4bbb49f8b77624d37220d00000004172a3a53687e93abbab4babcab937e68533a2a17040000000000000000000000000000000000000000000000000000050e19202c353d4a4e5c646f7b85909b8e79644e39240f000005182a3b53687d92a6b7b5a3907c6658473a2c211a171516151d202c353f4b4f5a5d504b3f2f1e0e00000000071c3043546c8196abbcb6a4917c665746382a1e161414131c20313d494e5b5d4f4b3e2e1d0d000000000005131e25272f23212a3f546a7f9292836e58432e202530353025180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6b5b5ac97826c57422d170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000b1c3043546177889dabbcb8a79a8473604b3f2f1d0c000000152b40556a8095aabfc8b4a29a979797979797979797979797979797979797979797979787725d48321d00000000000000000000071b2e3e51667b90a4b5b29d8773604b35200f0000000000000000000000000000000000000000000000000000000000000b20364b6075899eb3aa9faab6ab937e69533b2b180500000a1f3347586f849aafa99fa9b8af9a846f5847331f0a000000000000000000000000000000000000000000000000040d181f2b353d494e5b636e7a848f9ba2a38e79644e39240f00000b1f34485970859bb0c4b09b85705e4c3a2a1b0e0600000001080e19202e373a45483b372f211100000000000b20354a6073889eb3c9b19c86715e4d39291a0c0300000007131f2c363945473a372e2010000000000000132330393c4539362c3f546a7f9498836e58432b3436434a4336251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000b1b2d3e4a60728399a6b8bdb39e897862554431211100000000152b40556a8095aabfc5b09a848282828282828282828282828282828282828282828282806b56402b1600000000000000000000001020354a6073869cb1b6a5917c66513d2d1a07000000000000000000000000000000000000000000000000000000000115273751667b90a8b49f8b9ca4b09a8570594834200b00000c21374c61768b9fb49f8a9da6b49f8b76614c37210c00000000000000000000000000000000000000000000030c171f2a343c484d5b636e79838f9aa2b0b4a98e79644e39240f00000d22374c62778b9fb5bbaa927d6752402f1c0c000000000000000006101b2225303225231c110300000000000f243a4f647a8fa6b8c5a9947f695440301b0b000000000000010f1a2123303225221b100200000000000b1b30414d525a4e493d3f546a7f9498836e58433b484c54605443301c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c27120000000000031629394a5c697f94a1b3c2b19f917c665a483727150300000000152b40556a8095aabfbda8927d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6b62513d29140000000000000000000000071c304354687d92a6b7af9a846f5b4a36210c00000000000000000000000000000000000000000000000000000000081d3144556d8297acb09b85869cb19f8b77624c37220d000417293a53687d92aaaf9a84889db3aa927d68523929170300000000000000000000000000000000000000030b171e2a333b484c5a626d79838c99a1afb3b2a69d8a76614c37210c000012283d52677d92abbcb49f8a75604b3621120b0b0b0b0b0b0b0b0b0b0b0b0b101b1d100b0801000000000000142a3f54697f94a9c4b8a68d78624d382312000000000000000000060c0e1b1d0f0d08000000000000031628394d5f676f635b4c47546a7f9498836e58454b59626d73604a3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d170200000000000000000000000000000000000000000000000000000002020202020202020202020202020202020c22374c61778ca1b6a9947f69543f2a14020000000000000000152b40556a8095aabfbca7917c67523c271200000000000e1e324657647a8b9fb4bfb5a397816c5e4d3c2b19090000000000152b40556a8095aabfbda8927d685757575757575757575757575757575757575757575756514433210e0000000000000000000000001325364b6074889db2b4a28e79634e3a2a17040000000000000000000000000000000000000000000000000000000b20354b6074889eb3ac97818096abab937e69533b2b18050a1f3346586f8499aea9947f849aafae99846f5746331e0a0000000000000000000000000000000000020a161e29333a474c59626c78828b989fabb3b3a69d93877c665847331f0a0001172c41566c8196abc9b09b857056453221212121212121212121212121212121212121201c14080000000003182e43586d8398adc2b39e88735a4835200b0000000000000000000000000608000000000000000000091e324657677d84796c6158546a7f9498836e5856606a7782816c5b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d17020000000000000000000000000000000000000000000000020b111317181818181818181818181818181818181822374c61778ca1b6a9947f69543f2a181713110b0100000000152b40556a8095aabfbca7917c67523c2712000000000e1e30414b6175869ca9bab9a89b8574604b40301e0e000000000000152b40556a8095aabfbda8927d6853424242424242424242424242424242424242424242403d33261604000000000000000000000000081d314455697f94a7b9ac97826c5847331f0900000000000000000000000000000000000000000000000000000114263650657b90a7b8a8937e7b90a8af9a8570594834200b0c21364c61768a9fb4a68e7a8095aab49f8a76614c36210c0000000000000000000000000000000109151d283239464b58616b77818b979faab5b3a69d93887e74665e4c3a2a170400051b30455a70859aafc0ab96806b563836363636363636363636363636363636363636363530261813050000061b31465b70869bb0c4ae99846f593c2b190600000000000000000000000000000000000000000000000c21364b6175879a8b817669606a7f9498836e5e66747f8a988c79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d17020000000000000000000000000000000000000000000006131e26282d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d374c61778ca1b6a9947f69543f2d2d2d28251e1305000000152b40556a8095aabfbca7917c67523c271200000009192c3c4d5f6d8298a4b6beb49e8a7963564532221200000000000000152b40556a8095aabfbda8927d68533d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2921160800000000000000000000000000021527374c6176899eb3b49f8a76614c3726140100000000000000000000000000000000000000000000000000081c3043546c8197acb9a88e7974899eb49f8b77624c37220d16293952677d92a9b39d88727b90aabaa9927c6752392816030000000000000000000000000009141d273138454b57616a76808a969fa9b4b3a69d93887e756960564c402f1c0c0000081d32485d72879db2bda8937e68534b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b43363023130100091e33485e73889db3c1ac97816c57422c1700000000000000000000000000000000000000000000000012273d52677d909c9f96897e736a7f9498836d6f7c87949e9d92816c56412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d1702000000000000000000000000000000000000000000061424313a3d42424242424242424242424242424242424242424c61778ca1b6a9947f6954424242423d3a312313000000152b40556a8095aabfbca7917c67523c2712000002152737495a677d92a0b2c3b2a0927d685b493828160400000000000000152b40556a8095aabfbda8927d68533d281818181818181818181818181818181818181816140e04000000000000000000000000000000091e3346576b8096a9baa8947f695544311d08000000000000000000000000000000000000000000000000000b20354b6074889db3b49e89756e8398aeab937e69533b2a181e3246576e8399aead97826d768a9fb4ae98836e5745321e09000000000000000000000008131c263137444b566069767f89959fa8b4b3a69d94887e756960564b45382f2212000000071c30435474899fb4bba6917c666060606060606060606060606060606060606060606060544d41301e0a00071c30435474899fb4c0ab95806b56402b160100000000000000000000000000000000000000000000001025394d5f677b86939e9e93867a7e9396817884919d9f95887d6c63513e29150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d1702000000000000000000000000000000000000000002142431424e5357575757575757575757575757575757575757575761778ca1b6a9947f695757575757524e41311d0d0000152b40556a8095aabfbca7917c67523c271200000c1d31445562788a9eb4beb6a598826d604e3d2c1a0a0000000000000000152b40556a8095aabfbda8927d68533d281302020202020202020202020202020202020201000000000000000000000000000000000000031729394d62778b9fb4b29d8774604b35200f0000000000000000000000000000000000000000000000000010253a4f657a8fa6b7ae99836e677c92a9af9a85705948341f21364b61768a9fb4a8917c666f849aafb49f8a75604b36210b000000000000000000000e18253037444b556068757f88959ea7b4b3a69e94887e756960564b453832281a12040000000b20354a60738aa9babaa5907b757676767676767676767676767676767676767676767674675f4d392510000b20354a60758a9fb5bfa9947f6a543f2a150000000000000000000000000000000000000000000000000a1e30414d5d65747e89979f9c8c819797828a9aa1998b8075675f514434220e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d170200000000000000000000000000000000000000000b1f31424e60686c6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d778ca1b6a9947f6d6d6d6d6d6c68604e3b2b180500152b40556a8095aabfbca7917c67523c2712000c1c2f3f4b6074859ba8b9baa99c8775614b41311f0f000000000000000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000b203448596d8297abb7a5917c66513d2d1a070000000000000000000000000000000000000000000000071b2d3e566c8196abbcab927d6861768a9fb49f8b77624c3722283852677c91a9b49e897560697e93a8baa8917c66513827150200000000000000000e1e2b36434a556068747e88949ea7b3b3a79e94887f756960564b453832281d150a00000000000b21364b60758ba0c7beaa99908b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8a7d67523d271200071c304354758a9fb5bfa9947f6a543f2a15000000000000000000000000000000000000000000000000011323303f4b55606977818c989e8b9f9f8a9e999083786b61574d41342616050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d1702000000000000000000000000000000000000000011263a4e60687d828282828282828282828282828282828282828282828298adc2b09b858282828282827d68594834200b00152b40556a8095aabfbca7917c67523c271208182a3a4c5d6b8096a3b5bfb49f8b7a64574633231301000000000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4e63798c9fb5af9a85705c4a36210c00000000000000000000000000000000000000000000000d22364a5c72879db2b59f8b7762576e8499aeab937e68533b2a3245566e8398aeae98836e5662788da4b5ad98826d5645311d090000000000000005192b3c48546067737d87939da6b3b3a79e94887f756960574b453832281d150a020000000000000b20354b60758aa9bacdb7aaa5a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a999836e59442e19000013254a5f74899fb4c0aa95806b55402b16000000000000000000000000000000000000000000000000000513212f37444b58616c7982889eabaa9e8a837b6f635a4b463930231608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d1702000000000000000000000000000000000000000013283e53687e929797979797979797979797979797979797979797979798a0b2c6b5a39b9797979797978c77624d37220d00152b40556a8095aabfbca7917c67523c27121325364759657b8d9fb5c1b3a1937e695c4a3929170500000000000000000000152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000d2135495b6e8499aeb4a28e79644e3a2a1804000000000000000000000000000000000000000000000f24394f64798ea5b7b09b86705952677d92aaaf9a8570594734364b6075899eb4a9927c67525a71869cb1b39e8975604b36200b000000000000000b2035485a62727c86929da5b2aea79e94897f756961574b453932281e160a020000000000000000081d314455748a9fb4c9b9a89e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9fabbcaf9a856f5a45301a00001e33485d73889db2c1ac96816c57412c170000000000000000000000000000000000000000000000000005131f2d36404d56606a7780868b9fab9d8882796c61584b44372f211507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d17020000000000000000000000000000000000000004182a3a596e8399acacacacacacacacacacacacacacacacacacacacacacadb2becfc1b5b0acacacacaca38d78634e38230e00152b40556a8095aabfbca7917c67523c27121c3043546177889dabbcb7a699836f614f3e2d1b0b0000000000000000000000152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586c8297acc0ac97826d5847331f09000000000000000000000000000000000000000000071a2d3d566b8095abc3aa957f6a554c61768a9fb49f8b77624c373851667c91a8b49f8a76614c556b8095aab9a8907b6651372715010000000000000d22384d627885919ca4b2aa9f9992887f766a61574b463932281e160a0200000000000000000000011527375d72879db2c7b39e89888888888888888888888888888888888888888d9fb5ae99846f59442f1a00061b30465b70859bb0c4ae99846f593b2b18050000000000000000000000000000000000000000000000011323313d4a4e5f67757f8a969c8c8d9f989d988c81776960554c3f332515030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d1702000000000000000000000000000000000000000a1f34475973889db2c2c5b8b3a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a8adbacabeb2ada7a7a7a7a7a38d78634e38230e00152b40556a8095aabfbca7917c67523c271b2d3e4a60728399a6b7bbaa9d8876614c42322010000000000000000000000000152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000021527374c61778a9fb4c9b49f8a77614c3727150100000000000000000000000000000000000000000c21364a5b72879cb2b7a68e79644f46586f8499afab937e68533b45566d8398adaf99846f57464f647a8fa6b7ac97826d5544311d0800000000000010253a50657a8fa3b1b6b49f8a837d746a61574b463932281e160a03000000000000000000000000001a2f455a6f849aafc0ab9580737373737373737373737373737373737373748a9fb4ad98836d58432e180003182d42586d8297adc2b39d8873594834200b00000000000000000000000000000000000000000000000a1e31414d5b636f7c87959f9d91819798838b9c9f97897e74655d504333200d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d1702000000000000000000000000000000000000000c22374c61778ca3b5c6b8a79e9292929292929292929292929292929292939cadc1b2a0989292929292928d78634e38230e00152b40556a8095aabfbca7917c67523c302b394a5c697e94a1b3c0b49f8c7b65584733241402000000000000000000000000152b40556a8095aabfbda8927d68533d28130b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0700000000000000000000000000000000000000000000081d3144556a7f94a9bacdbaa9947f6a5544311d0800000000000000000000000000000000000000000e24394e63798ea4b6b29d88735c4a3a53687d92aaaf9a856f59474b6075899eb3ab927d6853394a6074889db3b39e8874604b35200b00000000000010253a50657a8f9faab4bbaa9d88827a70655d4f4b3e362d221b100700000000000000000000000001162b40566b8095abc6af9a846f565e5e5e5e5e5e5e5e5e5e5e5e5e5e5e60768ba9baab95806b56402b16000014293e53697e93a8c3b7a68c77624d37221200000000000000000000070b0f0c09030000000000000010253a4d5f677984919d9f95887c7d9297817986939e9e93867b6a61503c28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d1702000000000000000000000000000000000000000b20364b6074869ba8b9b39e897d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e93a8bdad98827d7d7d7d7d7d7d75614c36210c00152b40556a8095aabfbca7917c675245453b4857647a8b9fb4bfb4a295806a5d4b3a2a170600000000000000000000000000152b40556a8095aabfbda8927d68533d28212121212121212121212121212121201c130800000000000000000000000000000000000000000b20364b6074889db2c7cac7b29d8774604b3520100000000000000000000000000000000000000006192c3c556a8095aac3ac97826c573e374c61778b9fb49f8b77624c51667b90a8b49f8b77614c3743546c8297acb8a7907b65503626140100000000000c21374c6176818b979faab5a69d978f847a6f645c4f4a3e362d211a0f06000000000000000000000011263b50667b90a8b9b49e8975604b484848484848484848484848484f64798ea4c3a7927d68523d281300000e23394e63798ea5b6c4a9947e695440301b0a0000000000000008131c2024211e160b00000000000012283d52677d8c9aa1998b8075697f9498836d737e89969f9c907f6a55402a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d170200000000000000000000000000000000000000091d3245566378899eb3b8a795806a676767676767676767676767676767778ca1b6a9947f69676767676767615746331e0a00152b40556a8095aabfbca7917c675b5b5b5b596275869ca9bab7a69a8473604b3f2e1c0c0000000000000000000000000000152b40556a8095aabfbda8927d68533d363636363636363636363636363636363530251808000000000000000000000000000000000000081b2e3f52677d92a6b7bcb5bcb7a6917c67523e2d1b070000000000000000000000000000000000000c2135495b71869cb1baa9917b66513c3347586f849aafab937e6853556d8297adaf9a85705947343651667b90a8baac97816c5443301c0800000000000a1f334758616c78828c989fabb3ada29a8f847a6f645c4e4a3e362d211a0f060000000000000000000b20364b6075899eb3b9a8917c675241303333333333333333332f3f54697e94a9b6a58d78634e38230e00000c21364a5b72879db2c7b19b86715e4c39281a0c04000000070f18253035393632281b0c00000000000d22374d62778a9c9083786b616a7f9498836e606976818b998c79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc1ac97826c57422d17000000000000000000000000000000000000000002152838495a677c919fb0b49f8d7b655852525252525252525252525261778ca1b6a9947f695452525252524c463929170300152b40556a8095aabfbca7917d70707070707277849aa4b6b7a69d8877625544311d14090000000000000000000000000000152b40556a8095aabfbda8927d68534b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a433625130000000000000000000000000000000000000d22374b5d70859bb0bcab9fabbab09a85705c4a36220c0000000000000000000000000000000000000e23384d63788da4b5b49f8a76604b362a3a53687e93abaf9a846f596074899eb3a9937e69543b2a364b6075899fb4b39d8874604b35200b00000000000417293a474c5a626d79838d99a1afb4afa29a8f847a6f645c4e4a3d362c211a0e0600000000000000091d3145566b8196aabbb09b85705f4d3c2c1e161e1e1e1e1c293a4c5d71869bb0b29c87725b4935210c0000071a2d3d556a7f95a9bab5a3917c665745382a1f171514151a212d36434a4e4b46392a1c0c000000000b203448596a7f867b6e625a546a7f9498836e5858616c7984816c5b4a36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b51667b90a6bbc1ac97826c5741301b0b00000000000000000000000000000000000000000a1a2c3c4d5f6c8196a3b5ab9d88766154433d3d3d3d3d3d3d3d3d4c61778ca1b6a9947f69543f3d3d3d3d3633291b0b0000152b40556a8095aabfc7b19c868585858585878c9aa2b4c2b29d887a64594b46393126190e00000000000000000000000000152b40556a8095aabfbda8927d68606060606060606060606060606060606060605443301c070000000000000000000000000000000005192b3c4f647a8fa3b5b59f8a9fa9b4a28e79644f3b2a18040000000000000000000000000000000005192b3c546a7f94a9c2ae99846f57453222374c62778b9fb49f8b7761657b90a7b5a38d78624d38223245566e8499aeb7a68f7a654f3a25100000000000000c1c29333c494d5b636e79848f9aa2b0b3afa1998f83796e635b4e493d352c20190e000000000000021527384d62788b9fb4b4a3917c675b493d3228252324262f3a4658657b90a3b5a8957f6a553d2c1a060000000f22374c62778a9fb4c2b29d87756056473a33292a292a2d363d4a5460646157473a2a180800000005182b3b4b607475655d4d49546a7f9498836e58474c5b636f74604b3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a20344859697f94a9bec5af9a85705f4d3929170300000000000000000000000000000000000000000e1e30414b6074859ba7b7a6998372604a3e2d282828282828374c61778ca1b6a9947f69543f2a282828211e170b000000152b40556a8095aabfcab6a49c9a9a9a9a9b9c9fabb4c0c1ab96817a726961574b44372c1f10020000000000000000000000152b40556a8095aabfbda8937e7576767676767676767676767676767676767572604a35200b000000000000000000000000000000000b2035485a6e8398aec1ad97828b9fb4ad98826d5947341f09000000000000000000000000000000000b2035485a71869bb0c2a8937e685339281f34485970859ab0aa937e686c8297acb09b86715a483520283853687d92abbcab96816b563e2d1b070000000000000c171f2b353d494e5c646f7a84909ba3b1b3afa1998c83796e635b4e493d352c1e150700000000000a203448596d8297a6b7b39e8979635b4b45383a38393b404c586176879db2b39e8976614c37210e000000000b203448596c8196a6b7b7a599837461594c473a3f3e3f3d4a4e5b63737975615847362513000000000d1d3144556060554b3f3f546a7f9498836e58433d494e55605544311f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2f3f4d62778a9eb4c9c8b4a2917d675746331e0f000000000000000000000000000000000000000000121d3145566278899eb3b3a1947f695c4a39291712121222374c61778ca1b6a9947f69543f2a1412120c0a0300000000152b40556a8095aabfd3c2b6b1b0b0b0b0b0b1b4bcc9bec3b09f968e877f766a6055493d2d20100100000000000000000000152b40556a8095aabfc1ad9c938b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b79644e39240f000000000000000000000000000000031628394d62788b9fb4b8a78f7b8399aeb49f8a77614c372715020000000000000000000000000000000d22384d62788da3b5b5a38d78624d3822182a3b54697e93abaf9a846f74889eb3aa947f6a553c2b1922374c61778b9fb4b29d87725c4a36220d00000000000000040e19202c353e4a4e5c646f7b85909ba3b1b3ab9f998c83796d635b4d493c332515000000000005192b3b4c6176889dabb9a79d8779696056524f4e4e50555e6576849aa5b6a495806b5847331f0a0000000005182b3b4c6176889dabbcb3a199837769615857555355575b636d79858e8776615443301c0700000002152737444b4b44372f3f546a7f9498836e58432c3537444b44372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384c5d6e8398a8b9c9c2c0b39d8876614c3d2d1808000000000000000000000000000000000000000002152738495a667c919eb0b49f8b7a645746331e13010c22374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfccbcafaaa4a4a4a4a4a4a4a6a7a9adb2b0aba59d94897f73635b4a3e2d1f0f00000000000000000000152b40556a8095aabfcabaada8a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a08e79644e39240f000000000000000000000000000000091e3246576b8096aabbb39e88737d92a8b9a9957f6a5544311d08000000000000000000000000000005182a3b54697e94a9c1b19b86715a4834200d22384d62788c9fb49f8b777b8fa6b6a48e79634e39230e1f34475970859bb0b7a58e79644f39240f000000000000000000060f1a212d363e4b4f5d65707c86919ca4b2b5ab9f988c82796d635a5043331d0d00000000000d1f334758657b8d9fb4b6a59d8a7e756d67656363656a707b869aa2b4a89c8675614b3a29170400000000000d1f334658657b8d9fb4bcb3a199897e766f6c6a696a6d7279828c9ba3998372604a35200b0000000009192731363531262a3f546a7f9494836e58432e2127313531271909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556657b90a0b2b9b4adb1b7a696816c5c4a3625130000000000000000000000000000000000000000000a1a2b3c4c5e6c8196a3b4aa9c8775614b42311f0f0c22374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfc3af9e958f8f8f8f8f8f8f909294989da5adb4b2a79e948579645c4a3d2d1b0a000000000000000000152b40556a8095aabfd5cac1bdb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a38e79644e39240f0000000000000000000000000000001325364b6175899eb3bcab96816c76899eb4b39d8874604b36201000000000000000000000000000000b1f34485970859ab0c4aa95806b553c2b190b2034485a70859bb0aa917d8096abb19c87725b4935210c182a3b556a7f94aac3ab95806b563d2d1a0700000000000000000000060f1a212e373f4b505e66727c86929da5b2b5ab9f988c82786a61503c2b19050000000004182a3a4b5d697f949fabb6a89e9388827c7a78797b7f85909ca4b4a89e8a79635746331c0c0000000000000417293a4c5d697e939fabb7b3a79e938b84817f7e7f82878e979faab2a1937e69533e2914000000000009151d20201d14253a4f647a7f7f7c66513c2611151d201d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4b6074869cb1b9a89e97a0b1b49f8c79645443301c0c0000000000000000000000000000000000000000000e1e30404b6074859ba7b6a598826d604e3d2c1a0c22374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbfaa957f7a7a7a7a7a7a7a7b7c7e83878f989faab6b3a39b897a645c4a392816030000000000000000152b40556a8095aabfcebdb1aca7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a38e79644e39240f0000000000000000000000000000071c304354697e93a7b9b59f8c78636c8197acb7a6927d67523e2e1b07000000000000000000000000000d22374c62778b9fb4b8a68f7a644f3a250f05192b3c54697f94a9ac9781859bb0ab95806b563d2c1a060e24394e63798ea5b6b19c87725b4a36210c00000000000000000000000007101b222f37404c546067737d87939da6b3b4aa9f988b7f6a5a4834200b00000000000c1c2e3f4f61697f8d9da6b4b4a69d97928f8d8e90949ba3b1b4a59c8a7c655b4939291700000000000000000b1b2f3f4f60697f8d9da6b4b8b3aa9f9a96949394979ca4adb4b1a0988678624d38230d00000000000002080b0b080d22374b5c646a6a665e4c38240f01080b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2035495a6a7f94a4b6b49e8a8297adbbaa9b8572604a3a2a1704000000000000000000000000000000000000000000121d3144556278899eabb2a0927d685b4938281622374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c676565656565656667696e727a828c9ca4b5b4a79e897a645745321e0d0000000000000000152b40556a8095aabfc5b19f979292929292929292929292929292929292928e79644e39240f00000000000000000000000000000b20354a6073879cb1c3af99846f5b63798ea2b4b09b85705c4b37220d00000000000000000000000004172a3a53687e93abbcb39e8874604b35200b000d23384d62788da3b19c878c9fb4a58f79644f3a240f000c21364a5b72879db2b6a48e79634e39240e000000000000000000000000000008111c232f36434a556068747e88949ea7b3b4aa9f8d78624d38220d000000000000112132434f61697c88969fa9b0b3aca7a4a3a3a5aab0b1a89e958779655e4c3d2c1b0b000000000000000000112132424f61697c88969fa9b0b4b4afacaaa8aaacb1b4aea49c918376625a4835200b0000000000000000000000081b2e3e4b4f5454514c402f1d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b30404d62788a9fb4bbaa9681798ea2b3b4a3927d685847331f1000000000000000000000000000000000000000000002152737485a667c8d9fb5b49f8a79635645321e22374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67524f4f4f4f4f515254585c646d7a869ba3b5b8a79c8675604b3b2b180500000000000000152b40556a8095aabfc2ac97817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d76614c37210c00000000000000000000000000071a2d3d51667b90a4b6b6a5907b66515b70859ab0b4a38f7a644f3b2b180500000000000000000000000a1f3347586f849aafc7ad97826d5443301c08000c2035495a71869bb1a49c9faab29d87725c4a36220d00071a2d3d566c8196abc2aa957f6a553c2c1906000000000000000000000000000000081218253037444b556068757e88949ea7b4a38e79644e39240f00000000000003152532434f5e6676818a949b9faba8a9aaaaa9a6a49c958a8076635b4c402f1f0f0000000000000000000003142432424f5e6676818a949b9faba8a9aaaaa9a7a89e9991867c6e6158483c2b190600000000000000000000000010202e373a3f3f3c382f22120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394c5e6f8399a9bab49f8b786f849aafc0b39e8976614c3e2e190900000000000000000000000000000000000000000009192b3c4c5e6b8096a3b4a89c8674604b403022374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c3a3a3a3a3b3d3f3e4b4f5c6475859ba6b7b6a496816c594834200b00000000000000152b40556a8095aabfbda8927d68676767676767676767676767676767676767615847331f0a000000000000000000000000000c21364a5b6f849aafc2b29c8773604b52677c91a6b8ad98826d594834200a00000000000000000000000c21374c61778b9fb4baa9917c6751362614010006192c3c556a7f94aab6b1b4bbac96816c573e2d1b07000010253b50657b90a7b9b19c86715b4935210c000000000000000000000000000000000008131c263137444b566069757f89959ea88e79644e39240f0000000000000007152532404c58616b777f868b909394959593918c8780776b6158493d2f211101000000000000000000000006142432404c58616b777f868b8f9294959594928e89837c73665e4c463a2b1e0e0000000000000000000000000002101b22252a2a26241d12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324557667c91a1b3baa997826d657b90a2b4b8a797826d5c4b372614010000000000000000000000000000000000000000000e1e2f404b6073859ba7b5a497816c5e4d3c2b374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c272525252627292e373e4b576177889db3c2b49f8b77624d37220e00000000000000152b40556a8095aabfbda8927d685352525252525252525252525252525252524c473a29170400000000000000000000000004182a3a4e63798ea2b3b9a8947e6954434b6074889db3b49f8b77624c382815020000000000000000000317293953687d92aabbb49f8a76614b36210c0000000e23384e63788da4b5c7c9b8a78f7a65503a25100000000b20354b6074899eb3b5a48d78634d38230e0000000000000000000000000000000000000009141d273138454b57616a76808a968e79644e39240f00000000000000000714222f3a464c59616971767a7d7f807f7e7b77726a61584c463a2c1f1103000000000000000000000000000614222f3a464c59616971767a7d7f80807f7c79756e6660544c4033291b0e00000000000000000000000000000000080d0f1515110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4b6075879db2bfb49f8b78635d70859aabbcb59f8d7a645544311d0d00000000000000000000000000000000000000000000121d3144556278899eabb19f917c665a4837374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c271210101112141b222e394759687d92a6b7baa996806b563c2b1905000000000000152b40556a8095aabfbda8927d68533d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3733291c0c000000000000000000000000000a1f3347586d8297acc0b49e8a76614c3644556b8095aabbaa95806a5645321d090000000000000000000a1e3346576f8499aec8af9a846f5746331e0a0000000c2135495b71869cb1c6c8b39e8874604b35200b000000081d3144556e8398adc2a9947f6a543c2b1905000000000000000000000000000000000000000109151d283239464b58616b77818b79644e39240f00000000000000000004121c29333b474c54586165686a6b6a69666259554c473a33291b0f0100000000000000000000000000000004111c29333b474c54586165686a6b6a6967646055514a43362f1f170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2135495b6b8095a5b7b7a696806b5a4f647a8c9fb4bcab9b8573604b3b2b180500000000000000000000000000000000000000000001152737485a667c8d9fb5b39e8978625544374c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c2712000000000008101b2a3b4b6074889db2c7b29c87725a4835200b000000000000152b40556a8095aabfbda8927d68533d28282828282828282828282828282828211f170c00000000000000000000000000021527374c61778a9fb4c0ac97816c584633374d62788b9fb4b39d8875604b3620100000000000000000000c21364c61768a9fb4b4ab937e695439291703000000061a2c3d556a8095aabbbcac97826d5544311d080000000115273752677c92a9b4b09b86715a4835200b000000000000000000000000000000000000000000020a161e29323a474c59616c7776614c37210c00000000000000000000000c171f2a34373a464c505354555554514d483b37332a1f170b000000000000000000000000000000000000000c171f2a34373a464c505354555554524f4b4437353025181204000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f1120202020201f1c12100a0100000000000000000000000000000000000000000000000000000000000000000b1b30414e63798b9fb4c0b29d8875614b4a5c6d8297a7b9b5a3937e6959483420110000000000000000000000000000000000000000000009192b3c4c5e6b8095a2b4a79b8573604b3f4c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000c1c3043546c8197acc1b6a58d78624d38220d000000000000152b40556a8095aabfbda8927d68533d281312121212121212121212121212120c0a040000000000000000000000000000081d3144556a7f94a9bab4a28e79634e3a2935485a6e8399aeb8a6927d67523f2e1b08000000000000000012273d52677c929f9f9f9e8c78624d38230d00000000000f24394e63798e9faaab9f907b665137261401000000000c21364c61768b9d9f9f9f8d78624d38220d0000000000000000000000000000000000000000000000020b161e29333b474c5962615847331f0a000000000000000000000000040c181f222933363b3e3f40403e3c37342b221f180c04000000000000000000000000000000000000000000040c181f222933363a3d3f40403f3d39353127201c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c23263535353535343127251e1305000000000000000000000000000000000000000000000000000000000000031729394d5f6f849aa9bab4a2927d6757463e4c6177899eb3c1b39e8977624c3f2f1a0a000000000000000000000000000000000000000000000d1d2f404b6073849aa6b4a395806b5d4c4c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000114263652677d92a7bcc3a6917c67513c2712000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000000000000000000000000000000000b20364b6074889db2c3af9a84705b4a361c2b3c50667b90a5b6b09b86715d4b37220d0000000000000000182e43586d828a8a8a8a887f695a4835200b00000000000c21364a5b6c818b8b8b8b8272604b35200b00000000000a1f334658687e888a8a8a8b7e69533e291400000000000000000000000000000000000000000000000000030c171f2a343b484d4c473a2a17040000000000000000000000000000040b0c171f2125282a2b2a29262220180d0a0400000000000000000000000000000000000000000000000000040b0c171f2125282a2b2b2a2724201d150b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b4a4a4a4a4a4a463c39302314060000000000000000000000000000000000000000000000000000000000081e334657677d92a2b4bcab9a85705f4d39344759697e93a4b6b9a898826e5d4b3827150200000000000000000000000000000000000000000000121d3144556277889eabb49f8d7b65594c61778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000010263b50657b90a5babda8937e68533e2913000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000000000000000000000000000000081b2e3f52677d92a6b7b7a5917c66513d2d1a20354a6073879cb2b5a38f7a644f3b2b180500000000000000162b3f53646d747474747369614f3c2b19060000000000071a2d3d51636c757676756e605443301c0800000000000417293a4e6068737474747469604f3b2612000000000000000000000000000000000000000000000000000000040c181f2b343737332a1c0c000000000000000000000000000000000000040a0c101315161514110d0b0500000000000000000000000000000000000000000000000000000000000000040a0c101315161514120f0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c5060606060605f5b524d413124140100000000000000000000000000000000000000000000000000000008182d3e4c6176889db3c0b49f8c7a644e41302a3a4b6074869cb1bfb2a0907b655645311d0e00000000000000000000000000000000000000000000011527374859667c8d9fb5ab9d8877615461778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000010253a4f657a8fa4babfaa957f6a55402a15000000000000152b40556a8095aabfbda8927d68533d28130000000000000000000000000000000000000000000000000000000000000e22374b5d70859bb0c4b29d8774604b35200f1c304354697f94a9baad98836e594834200a000000000000001023364653585f5f5f5f5e544f42321e0e000000000000000f1f3444515560606060554b43362614010000000000000b1b31424e535e5f5f5f5f534f42321f0c0000000000000000000000000000000000000000000000000000000000040d192022211f170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e6675757575757471675f4e42311f0f0000000000000000000000000000000000000000000000000000001325364a5c6c8196a6b7b8a797816c5c4a36231d314455657b90a1b2beb19c8674604b3c2b19060000000000000000000000000000000000000000000009192b3b4c5e6b8095a2b4a69983726061778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000011273c51667c91a6bbbfaa947f6a553f2a15000000000000152b40556a8095aabfbda8927d68533d2813000000000000000000000000000000000000000000000000000000000005192b3c4f657a8fa3b5baa9947f6a5544311d081325364c61778a9fb4b49f8b77624d38281602000000000000061828363f434a4a4a4a493e3b32241400000000000000000116263437444b4b4b4b44373026180800000000000000001324313a3d484a4a4a4a3e3b3224140200000000000000000000000000000000000000000000000000000000000000050b0d0c0a04000000000000000000000000000000000000000000000000000000040a0c111315161614120f0c0a0300000000000000000000000000000000070a0b0b0b0b0b00000000000000000000000000000000000000000000060b0d11141516161614110d0c06000000000000000000000000000000000000000000000011263b50667b8d8a8a8a8a89867d68604e3d2c190900000000000000000000000000000000000000000000000000071c304354647a8c9fb4c2b39e8976614c3e2d1b1527374b5d6e8399a9bab6a4947f6a5a4835201200000000000000000000000000000000000000000000000d1d2f404b6073849aa6b3a1947f6961778ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c27120000000000000006192b3c54697e93a9bebea8937e69533e2914000000000000152b40556a8095aabfbda8927d68533d281300000000000000000000000000000000000000000000000000000000000b2035485a6e8398aec1b49f8a77614c37261401081f3347586d8298adbbaa95806b5645321e09000000000000000a18232b2e353535353329271f140600000000000000000008161926313536363531271c140800000000000000000006131e2628333535353529261f14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c171f2126292a2c2b2a2824211e170f0d07000000000000000000010a10121c1f202020202014120c03000000000000000000000000000000070d0f19202326292b2b2c2b29272320190f0d0800000000000000000000000000000000000000000f23384c5e6b8095a29fa99f9b917e685b4937271501000000000000000000000000000000000000000000000004172a3a4a6072859baabbb5a3937e68584733201009192f3f4d62788a9fb4c2b49f8a78624d402f1b0a0000000000000000000000000000000000000000000000111d3144556277889eabb49f8b7a64768ca1b6a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c27120101020003090e192035485a6f8499afc4c1a5907b66503b2611000000000000152b40556a8095aabfbda8927d68533d281305050505050505050505050505050505050503010000000000000000031628394d62788b9fb4c1ad97826d58473319090004172a3a4f647a8fa3b5b39e8875604b3621110000000000000000061016181f1f1f1f1e14120c0200000000000000000000000009141d202121201d1509010000000000000000000000020b11131e1f1f1f1f14120c02000000000000000000000000070a0b0b0b0b090000000000030a0c1013151514120e0b0700000000000000000000000000000000000000000000000000040c171f212933363b3e4041403f3d3a36332924221b100802000000000005131e2527323535353535352a27201507000000000000000000000000080f1a21242b35383c3e404141403f3c38352c25221b100a000000000000000000000000000000000000091c2f404b6072849aa6b7b4b09f8a79635544311d100000000000000000000000000000000000000000000000091f334758687e93a3b4beb19b8673604b3a2a170200112035485a6a8095a5b7baa999836e5e4c3928160300000000000000000000000000000000000000000000011426374859657b8d9fb4aa9d8776768babbca9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c271717171718161e212b35444d62788b9fb4c9b5a38c77614c37220c000000000000152b40556a8095aabfbda8927d68533d281a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a18160f06000000000000091e3246576b8096aabbb4a38e79644f3a2a180000000c22374b5c71869bb1b8a7927d68533f2e1c0800000000000000000001030a0a0a0a09000000000000000000000000000000000001080b0b0b0b08010000000000000000000000000000000000090a0a0a0a000000000000000000000000000006121b20202020201e110f09080b161e2125282a2a292723201c1308070000000000000000000000000000000000000000000b171f2933373a464c515355565554524f4c463939362d201d150900000007152330393d474a4a4a4a4a4a3f3b3225150300000000000000000001101b222d36393c484d51535556565554514d493c3a372e241d12050000000000000000000000000000000000111c3043546177889daabbbaa99b8573604b3e2e1b0a00000000000000000000000000000000000000000009192e3e4c6176899eb3c1b2a08f7b655544311c0c000006192b3c4b6075879db2c0b3a1917c665745321e0f000000000000000000000000000000000000000000000009192b3b4b5d6a8095a2b4a59882728a9fb4a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67523c2c2c2c2c2d2e2832363c484d626e8399a9bac5b19b86715947341f0a000000000000152b40556a8095aabfbda8927d68533d30303030303030303030303030303030303030302d2a23170900000000001325364b6175899eb3c4b09b85705c4a361c0c000000081b2e3e53687d93a7b9b19b86715d4b37230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000616242f35353535353426231c1c232932363a3e3f3f3f3c39353025211a0f05000000000000000000000000000000000003111b29333a474c54586166686a6b6b6967646157564f4a3e36312719130607152532414d525c5f6060606060544f4332200c000000000000000009151d2e373d4a4e575a6266696a6b6b6b6966625a574f4b3f39301f180d00000000000000000000000000000000011426364759657b8c9fb4bfb5a395806a5c4b3928160300000000000000000000000000000000000000011426374b5c6d8297a7b8b9a898826d5d4b372614000000000e1e324556677c91a2b4bfb29d8775604b3d2c1a0600000000000000000000000000000000000000000000000d1d2f3f4b6072849aa6b2a0937d889db3a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c67524141414141424339464b505a626e8096a1b3c7b8a7937e69543a2a1804000000000000152b40556a8095aabfbda8927d6853454545454545454545454545454545454545454545423f35271706000000071c304354697e93a7b9b7a6927d67523e2d1b00000000001021364b6075899eb3b5a38f7a65503c2b19050000000000000000000000000000000000000000030a0c1414130b0903000000000000000000000000000000000000000000000000070d0f1010101010101010101010100c0a0400000000122434424a4a4a4a4a493b382f2f3839464b5053545554524e4a4336362d20180d0000000000000000000000000000000614212e3a464c58616a71767b7e7f81807f7d7a76716b645c534b4437302019152532434f5f677174757575757569614f3b2712000000000000000a1927313e4b4f5c646c73787b7e808081807e7c78736d645d514d41342a1d110300000000000000000000000000000008182a3b4b5d697f94a1b3c1b49f8c7a645745321e1100000000000000000000000000000000000000081d314455647a8d9fb5c3b49e8a77624d3f2e190900000000031628384d5f70849aaabbb7a595806b5b49352113000000000000000000000000000000000000000000000000111c3043546277889daab49f8a899eb3a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c675656565656565758595761666d7883969eb0bfbdb39e8875614b36210c00000000000000152b40556a8095aabfbda8927d685a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a58524535230f0000000b20354a6073879cb1c5b39d8874604b3620100000000000091e3245576c8196acc0ae98836e5a4835200a000000000000000000000000000000000000000b171e212a2a28211e160a00000000000000000000000000000000000000000002101b2224262626262626262626262626211f170c0000001b2f42525e606060605e504c403f4b50576165686a6a69676360544e4a3d342b1d1204000000000000000000000000051424313f4b58616c767f868b909395969594928f8b868079716860554d41352c2532434f616a7d868a8a8a8a8a8a7f69543f2a140000000000000a1a2837444b5c646f7982888d91939596969594918d88827a70675f4c473b2e2111020000000000000000000000000000000c1d2e3f4f616e8399a5b6bbaa9c8675604b402f1c0c000000000000000000000000000000000005182b3b4b6073869babbcb6a5947f6a59483421110000000000000a1a30414e63798c9fb4c3b49f8b79634e41301b0b0000000000000000000000000000000000000000000000011426364759657b8c9fb4a99f9ea7b8a9947f69543f2a14000000000000000000152b40556a8095aabfbca7917c6c6c6c6c6c6c6c6c6d6f72767b828a99a1b0bcbeb19f927d675746321e0a00000000000000152b40556a8095aabfbda8927d6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6d63523f2a160000071a2d3d51667b90a4b6bbaa95806a5544311d080000000000031628394e63798da2b4b49f8b78624d3828160300000000000000000000000000000000000b1b2933363f3f3d3632281b0a000000000000000000000000000000000000000010202e363a3b3b3b3b3b3b3b3b3b3b3b3b37332a1c0c000020354a5e707575757573665e4c4c5d656f767a7d7f7f7e7c79746c635b4d483b2f2213050000000000000000000002132331424e5d6576818a949b9faba8aaabaaa9a7ab9f9b968e867d74675f4d493c32434f616a7f929c9faa9f9d947f6a614f3b27120000000000091928384555606a7a848e979da6a6a8aaababaaa9a6a69d978f857c6f62594b3f2e201001000000000000000000000000000000112132434c6176879da9bab6a497816c5e4c3a2a1704000000000000000000000000000000000a20344859697e93a3b5bfb29c8774604b3b2b1803000000000000001221364a5b6c8196a7b8baa99a846f5f4d39291703000000000000000000000000000000000000000000000008182a3b4b5d6a7f95a1b3b4b3b8c5a9947f69543f2a14000000000000000000152b40556a8095aabfc4af998381818181818181828384878b90989fa9b3bfbab4a097816d5f4d3929160300000000000000152b40556a8095aabfc6b19c868485858585858585858585858585858585858585858585826d58422d1800000c21364a5b6f849aafc2b49f8b77624c372715020000000000000a2135495b6f849aafbbaa96806b5645321e090000000000000000000000000000000003172939464c5454534b4539281603000000000000000000000000000000000000071b2e3e4a4f5050505050505050505050504c473a2a17040020354a60758a8a8a8a897c6658616e7b848a8f93949494918e8881796e62594c4031231304000000000000000000102131414e60687b87969ea8b0b4bbb4b0adacadaeb1b4b0aba49c92877d6f625a4d434f61697f949db1b4af9e957f6a61504332200c000000000115273745566073808c9aa2acb2b7c4bab4b2b2b3b9c4b7b3aca39b918377655d4b3f2e1f0f00000000000000000000000000000003151f334658647a8b9fb4beb19f907b665847331f130000000000000000000000000000000a1a2f3f4c6277899eb3c2b3a1907c665645321d0d0000000000000000071a2d3d4c6176889eb3c1b4a2927d675746331e100000000000000000000000000000000000000000000000000d1d2e3f4b6072849aa6b7c8ccbea9947f69543f2a14000000000000000000152b40556a8095aabfc7b3a199969696969696969798999c9fabadb4babbb4a99f948273604b41311b0b0000000000000000152b40556a8095aabfcab6a49c9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a86725c47321d0004172a3a4e63798ea2b4b4ad98836e594834190900000000000000061a2c3d51677c91a6b4b39e8975604b36210b000000000000000000000000000000000a1e33465761696968605745321e080000000000000000000000000000000000000d22364a5c64656565656565656565656565615847331f0a0020354a60758a9f9fa799846f63768390999fa9a8a9aaa9a7a69e978e8377665e4e4131221200000000000000000a1a2e3f4e5f687e8d9da5b4b9b5b1aa9f9b989797999c9fa9acb4b1a59d928478675f5061697f949daebbaf9e95806a6150433325150300000000081d314455607484959faab3c0b3afa8a99f9d9c9ea7a5acb4b9b4b0a199897b655d4b3d2d18080000000000000000000000000000000417293a4a5c687e93a0b2bdb29d8876614c41301d0d00000000000000000000000000021527384b5d6e8298a8b9baa999836f5e4c382815000000000000000000000f1f334758687e93a3b5c0b39d8876614c3e2d1808000000000000000000000000000000000000000000000000111c3043546177889daabbc7bea9947f69543f2a14000000000000000000152b40556a8095aabfc7bfb3afabababababababacadaeb2b4bcbcb5b0aa9f988b7e72605544312313000000000000000000152b40556a8095aabfc7c2b6b1afafafafafafafafafafafafafafafafafafafafafaf9c87725c47321d000a1f3347586d82979f9f9f9e8f7a644f3b2b180000000000000000000f20354b6074879c9f9f9f937d68533e2813000000000000000000000000000000000c21364c61767f7f7d75604b3626140100000000000000000000000000000000000f243a4f647a7b7b7b7b7b7b7b7b7b7b7b7b76614c37210c0020354a60758a9fc5b19c8771798799a1aeadaba9aaacafb4b8b3aca098897c685f4e402f1e0e000000000000021527384b5d687d8d9fabb7bab4a39b928a8583818284878a90979ea8b4b2a29a897d6b62697f949daebbb09e95806b6250433325150700000000071b2d3e4b60738399a2b4bbb6b2a29a928c8a8887898b90969ea8b1bdb3a79e8a7b645b4a362614010000000000000000000000000000000c1c2d3e4e606d8298a4b6b7a698826e5f4d3b2b1808000000000000000000000000091d314556657b90a0b2c4b49f8b78634d402f1a0a000000000000000000000417293a4b6073859bb1beb7a696816c5c4a362513000000000000000000000000000000000000000000000000011426364759657b8c9fb2b2b2a9947f69543f2a14000000000000000000152b40556a8095aab2b2b2b2b2b2b2b2b2b2b2b2b2b1b0aeaca9ab9f9b948b82786960544437271505000000000000000000152b40556a8095aab2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b19c87725c47321d000c21374c6176898a8a8a8a887f6a5c4b371d0d000000000000000000081d314455657b87898a8a8a85715b46311c060000000000000000000000000000000c22374c61778c9492836f5443301c0800000000000000000000000000000000001c31465b71859090909090909090909090907b65503b26100020354a60758a9fb5b39e8978889da5a69e98959394969a9faab4bab2a79e8c7e685e4c3c2b19050000000000091d314556657b8d9fabbcbaa99f93867d76706e6c6d6e71767b8289969fa9b3a89e9180707e939daebbb09e96806b6250443325150700000000000d22364a5c6b8096a1b3c0b4a59c90847d7774737274767b8189979fb4bab8a89e8979635443301c0a00000000000000000000000000000000102031424b6175869ca8b9b2a0927d675948362513000000000000000000000006192b3c4b6074869cb1beb7a695806b5b493522120000000000000000000000000c1c304354657a8fa0b2c4b49f8c7a645443301c0b00000000000000000000000000000000000000000000000008182a3a4b5d6a7f949d9d9d9d947f69543f2a14000000000000000000152b40556a80959d9d9d9d9d9d9d9d9d9d9d9d9d9c9c9b999794908b867f786d625a4a433627190900000000000000000000152b40556a80959d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c87725c47321d000a1f334758617474747474736a61503e2e1b00000000000000000000011527374b5d657274747474716756422e19040000000000000000000000000000000b20354b60758aa89f8a75604b35200b00000000000000000000000000000000001c31465b71869ba5a5a5a5a5a5a5a5a5a5907b65503b26100020354a60758a9fb5b9a79c879ca29a908883807e7f81858b949fa9b6b8aa9f8c7c665a4835201100000000021527384b6074869cabbcbaa99f8b7e72676157585758595660656c76808b99a1afb39e9585939daebbb09f96806b625144332515070000000000091c2f404f647a8c9fb4bfb4a29a877b6f6862595d5d5660666c7781929fa9bab9a79b8573604b3828160200000000000000000000000000000002141e32465763798a9eb4bdb39e8978625443301c0f000000000000000000000b2035485a6a7f94a4b2b2b19d8875614b3c2c1904000000000000000000000000011426364b5d6d8298a6b2b2aa9b8572604a392816030000000000000000000000000000000000000000000000000c1c2e3f4a60728388888888877e68533e281300000000000000000014293e54697e878888888888888888888888888787878684827f7b76716a62594d493c30251809000000000000000000000014293e54697e878888888888888888888888888888888888888888888888888888888887846f5a45301a0004172a3a474c5e5f5f5f5f5e555043332010000000000000000000000009192e3f4b505d5f5f5f5f5b564938261300000000000000000000000000000000081d31445574899eaa8c76614c37210c00000000000000000000000000000000001a30455a6f849a9e9e9e9e9e9ea7b8baa5907b65503b26100020354a60758a9fb5c5b6a49c9f93847b746d6b696a6c70777f8b9ca4b6bbaa9e8978624d402f1c09000000091d3145566a7f94a4b6bfb49f8b7b6960544b4639424238454b5057616b7883959eb4afa29aa2aebbb19f96816c625144342616070000000000000f23384c5e70859baabbb5a49a8476655d534c483b38454b5059616c7d8b9fb4beb5a3937e685645321e090000000000000000000000000000000003162839495b677d929fb1b9a79a8472604a3d2c19090000000000000000000d23384d62788a9d9d9d9d9c917d675746321e0e000000000000000000000000000008182e3f4c6277889a9d9d9d9d937d685746321e0900000000000000000000000000000000000000000000000000111c304354606e727272727268604e3a261100000000000000000012273b4f616972727272727272727272727272727271706f6c69666158554d483b352c1c130800000000000000000000000012273b4f61697272727272727272727272727272727272727272727272727272727272726f6655412d1800000c1c2a3337494a4a4a4a493f3c3325150200000000000000000000000011212e373b474a4a4a4a4642382b1b090000000000000000000000000000060b0d1526375d72889da28d78624d3823180f0d07000000000000000000000000000010253a4f657b868989898989899eb3baa5907b65503b26100020354a60758a9fb5cfbcab9f8c7e6f6560545654555759616a78869ca5b6b9a799846f5e4c38230f0000000b20364b6075889db3c2b3a1927d675d4a433632292c2d28323639464c5a637280929faab4b0b4beb19f97816c63514434261608000000000000061a2c3d50667b90a3b5baa99c867561584c3f37342a2832363b474c5f677d929fb1c1b39e8875604b36210b00000000000000000000000000000000000b1b2c3d4d5f6c8197a3b5b3a2937e695b49372715010000000000000000172c41576c818788888888867e685f4d39291600000000000000000000000000000000101f344859647a8487888888878576614b36210c0000000000000000000000000000000000000000000000000000132536434a595d5d5d5d5d534e42311e0b0000000000000000000c1f32424f545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5b595754504c463a37342b20190e00000000000000000000000000000c1f32424f545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5a55483725120000000c171f213435353535342a282015070000000000000000000000000003111c23253234353535312e261b0d00000000000000000000000000080e1920232731465c71869ba48e79644f39342b24221b10070000000000000000000000000e22374b5d65717373737373768ba1b6a5907b65503b26100020354a60758a9fb5cab59f8d7d6960504b43363e3f3a474c5a6377879cabbcb3a1907b66503d2c1a06000011263b50667b90a6b8c4af99846f5f4d3f30251e161718161e2129333c4954606b7d8b9fb4c5c6b2a0978172604a4434261608000000000000000c2135495b6f849aafc1b49f8b796357473a2f221f18161e212a34414d5f6d8297a9bab8a7927d67523d28120000000000000000000000000000000000000f1f30414b6074859ba7b8b49f8a79635544311d10000000000000000015293e51636c72727272727168604e41301b0b0000000000000000000000000000000005182a3b4a5c646f727272727271615746321e09000000000000000000000000000000000000000000000000000008182530354348484848483e3a31241302000000000000000000021424323b3e484848484848484848484848484847474644423f3b3633292220190d06000000000000000000000000000000021424323b3e4848484848484848484848484848484848484848484848484848484848484541372a1a0800000000040a0c1f1f1f1f1f1e15130d0300000000000000000000000000000000080e101d1f1f1f1f1c19130900000000000000000000000005111c232b353838454b5a70859aa5907b65514d483b3a372e221b100400000000000000000000081b2e3f4b4f5c5e5e5e5e61768ba1b6a5907b65503b26100020354a60758a9fb5c0ab95806b5f4e42353026292a2a343c4959647a8d9fb5bfaf9a84705b4935210c0000162c41566b8196abc4b8a68f7a655041301c130803000003090b171e31424e60687e8c9fb5cac2ad9882736054433026160800000000000000000e23384e63798da2b4b9a895806b5b49392a1c110b0503090c181f30414d62778a9fb4c5ae98836e593a29170400000000000000000000000000060c0e14141c203245566278899eabbaa99b8573604b3e2e1b0a000000000000000f22344551575d5d5d5d5d5c534e423123120000000000000000000000000000000000000d1d2d3e4a4e5a5d5d5d5d5d5b4b463928160300000000000000000000000000000000000000000000000000000008131c202e333333333328261e1306000000000000000000000006141f272933333333333333333333333333323232312f2d2a26211f170d0b0500000000000000000000000000000000000006141f2729333333333333333333333333333333333333333333333333333333333333302d251a0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202f373c494d545660646e8399a7917c69666259574f4b3e372e1f170c0000000000000000000010212e373a474949494c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67524131201c141415181f2c3b4a5c6d8297acc1b4a28e79634e39230e00001a2f445a6f8499afc4b39d8874604b35201300000000000005132331424e60687e8d9fabbcc6c4af99846f5f4d37271502000000000000000000162b40556b8095aab4b49e8976614c3d2c1b0c0000000000000413203448596e8398adc3b39d88735846331f0a0000000000000000000000070e192123292630353738485a667c8d9fb5b5a395806a5c4a39281603000000000000051727343e414848484848473e3a312414050000000000000000000000000000000000000010202d3639454848484848463632281b0b000000000000000000000000000000000000000000000000000000000000070b191d1d1d1d1d13110b0200000000000000000000000000020c12141d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1b1a1714110c0a0400000000000000000000000000000000000000000000020c12141d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1a1812080000000000061016192020202020202020202020202020202020202020202020202020202020202020202020100e0800000000000000000008131c2b353f4b505a62697075797d859bae99837e7b77726c645c4f4b3e332a1c0e00000000000000000002101b2225323434364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281408010000040e1d2d3e4d63788da3b5c0aa95806a553a291704001c31475c71869cb1c4af9a846f5443301c08000000000005132331414e60687e8d9fabbcb5b1b5b3a1917c675544311d080000000000000000001b30455b708491999fa296806b5847331f0e000000000000000005182b3b52677d92a7bcb7a68b76614c36210c000000000000000000010f1a212c35383e36434b4c4c4b4c5e6b8096a2b4b49f8c7a645745321e1100000000000000081722292c33333333333129261f1406000000000000000000000000000000000000000002101b222430323333333331211e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18232b2e353535353535353535353535353535353535353535353535353535353535353535353526231c11030000000000000a1825303c484d5d656f787f858a8e919ba3b3a19993908c87817a70645c4c473a2c1e1002000000000000000000080e101c1e21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812000000000000102135495b71869bb1c6b19b86715847331f0a001d32475d72879cb2c2ad98826d58362614010000000005132331414e60687e8d9fabbcb2a49ca4b5b29d8774604b3625130000000000000000000b20354b60747c848a8c8475614b3a2917000000000000000000000f24394f64798ea4b9c4a28d78634d38230e000000000000000008141c2d363c494d54595460616160555a6073849aa6b8aa9c8675604b3f2e1a0a00000000000000050f15171d1d1d1d1d1c13110b020000000000000000000000000000000000000000000000070d0f1a1d1d1d1d1d1c0c090300000000000000000000000000000000000000000000000000000000000000000000000000000001080b1f20201e14120c0300000000040a0c1b202020100e09000000000000000000000000000000000000000000000000060b0d2020202020202020202020202020202020202020202020202020200e0c0600000000000000000000060c0e1415120c0a0300000000000000000618283640434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b382f211100000000000c1a2836434a5a626e7b848c949a9fa9a7b0b5bfb3aea8a6a59d968f857a6d6158493c2d2010000000000000000000000000070c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281200000000000006192c3c556a7f94aabfb49f8b76614c37210c001c31465b71869bb0c2ac97826d57422d180000000005132331414e5f687e8d9fabbcb2a098869ca5b6a5937e685443301c070000000000000000081d31445560666f767770615746321c0c000000000000000000000d23384d62788da2b7b9a38e79644e39240f000000000000000b1826303d4a4e5b63696f7375777775736f6a6377889eabb6a496816c5d4b382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d20343535332a2720150700000c181f223035353526231c11030000000000000000000000000000000000000000000e1920233535353535353535353535353535353535353535353535353535352320190e00000000000000000e192023292b28211e160b000000000000001023364653586060606060606060606060606060606060606060606060606060606060606060606060504c3f2f1c080000000c1c2a384554606a788390999fabb0b4babab4bac7bab4b4bab6b2aca29a8d8276635b4a3e2d1c0c0000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d28120000000000000011263b51667b90a6c7bcab907a65503b2510001a2f44596f8499aec3ae99846e593d2c1a06000005132330414d5f687e8d9fabbcb2a0988275879cb2b19c8773604a35200b000000000000000001142637444b51576162594b4639291600000000000000000000000f24394e64798ea3b9c4a28d78634d38230e0000000000000b1b2936434b5c646e787e84888a8c8c8a88847f786f7b8d9fb5b59f8d7b655645311d0c00000000000000000000000000000000000000000000000000000000000000000000000000040d1315202020202016140e040000000000000000000000000000000000000000000000020b11141e2020201a181108000000000000000009192631354a4a4a483f3b322515040c1c2a3337454a4a4a3b382f211100000000000000000000000000000000000000000e1e2b354a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a38352c1e0e000000000007151e2c35383e403d3632291b11030000000000162b4053646e7575757575757575757575757575757575757575757575757575757575757575757575655d4c38230e000004182a3a475660727f8a99a1afb5bbb4aea7a99fa9baa99f9fa9a8afb4b4ab9f988679645c4a3a2a180800000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812000000000000000d22384d62778da9bac9a9937e69543e291400162b40566b8095abc4b29d87725b4935210d0005132330414d5f677d8d9fabbcb3a1988273687d92a7b6a4907b6550372715010000000000000000091926313539464c4d483b32291b0b000000000000000000000111263b50667b90a5bbb7a68b76614c36210c0000000000091929394654606b79838c93999e9fabab9f9e99948d847b8096a5b7ab9c8674604b3a2a17040000000000000000000000000000000000000000000000000000000000000000000000071521282b35353535352b2921160800000000000000000000000000000000000000000006141f2629333535352f2c25190b00000000000001142637444b5f60605d544f43322212182a3a474c5a5f6060504c3f2f1c0900000000000000000000000000000000000006192b3c485e6060606060606060606060606060606060606060606060606060605e493c2c1906000000041525323c494d5455524b46392e21110000000000192e43586e828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7b65503b261000000a1f334758617482949fa9b2bbb4aa9f99928d8b9fb49f8b8a8d939aa2b0b4b5a49c897a64584736251300000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812000000000000000b2035485a74899fb4c0ab96816b56412c160010253b50657b90a6b7b7a58d78634e3b2b1808132330414d5f677d8d9fabbcb3a1998373606075899eb3ad97826d5544311d0800000000000000000009141d2029333637342b1e160b0000000000000000000209111f2f40556a8095aabfb29d88735846331f0a000000000114263746576172808d999fabaeb3b4b4b2b0b0afa9a29a9083879db2b6a4947f695847331f0a00000000000000000000000000000000000000000000000000000000000000000000041525333c404a4a4a4a4a403d3326160400000000000000000000000000000000000000051424313b3e484a4a4a4441372919080000000000081d3144556c7475757369614f40301d1f3347586170757575655d4c38230e0000000000000000000000000000000000000b2035485a70757575757575757575757575757575757575757575757575757575705a4935200c000000122232434f5a63696a6761574b3f2e1e0e00000000192e43586e83989f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f907b65503b261000000c22374c61778598a0b4bab4aa9f968b837c787a8ea39b8573787e858f9ba3b1b6a79d8776615443301c08000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d28120000000000000005192b3c5e73889eb3c2ad98836d58432e18000b20364b6075889db3c3ab96806b59483625132330414d5f677d8d9fabbcb3a19983736055566c8197acb39e8974604b35200b0000000000000000000001080b171e212220180d0300000002090b10101213161e212f3d4c5e71869bb1c3ad98836e583a29170400000000081d314455617584959fabb5bab4aca99f9c9b9b9c9ea8aba0989da5b7c2b39e8976614c382816030000000000000000000000000000000000000000000000000000000000000000000d2133435055606060606056514433210e00000000000000000000000000000000000001132331424e535d6060605a544737251100000000000b20354b60748b8a8a887f695f4d392422374c6176848a8a8a7b65503b26100000000000000000000000000000000000000d23384d62788a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78634d38230e0000091d30404f6169787e807d75655d4b3c2b1906000000192e43586e8398adb0aba3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3b2b7a5907b65503b2610000010253a4f657a8b9fb5bbb4a29a8b81776e6763778da29d88726368707a85979fb1b7a59a8472604a362513000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281200000000000000001d32475d72879cb2c4ae99846f59442f1a00091d3145566a7f94a6b7b49e8a77625443301e30414d5f677d8c9fabbcb3a19983746055444f657a8fa7b9a88f7a654f3a251000000000000000000000000000030a0c0d0b05000000000a151d2025252729283236404c5b667c91a3b5b6a5917b66513c261100000000071b2d3e4b60738399a2b5bcb4a99f978f8a87858587898f969fa8b2b7c3ccb9a795806a5645321e0900000000000000000000000000000000000000000000000000000000000000000013283c50616a75757575756b62513d29140000000000000000000000000000000000000f1f31414e6069737575756f6554412c180000000000081d31445570859ba69d917c67513c272b40556a80959fab947f6a543f2a150000000000000000000000000000000000000d23384d62788d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8d78634d38230e00000f24394c5e697f8b939592877b655a4835200b000000192e43586e8398ad9e968d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9da5a5907b65503b261000000e23374b5d6c8197a5aa9f9484796c62595261768ba99e897455535c64748197a0b2b3a1917c665443301c070000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281200000000000000071c31465c71869bb1c4af9a856f5a45301a00021527384c6176889db3b9a8998372604a4332414d5f677d8c9faabbb4a29a8374605645374b6074899eb3aa957f6a55402a15000000000000000000000000000000000000000000000a1a2832363a3b3c3e38454b515e6679899eb3bcb29c8773604b35200b000000000d22364a5c6c8196a1b3beb2a29a8b817a7572707072757a818a98a0aebbcbc5b39e8875604b36210b000000000000000000000000000000000000000000000000000000000000000000152b40556a808a8a8a8a8a806b56402b1601000000000000000000000000000000000b1b2d3d4e5f697e888a8a8a836f5a442f1a000000000001142637576c8196acad98836d583a292c42576c8197acae98836e593a29170400000000000000000000000000000000000d23384d62788da2b1b1b1b1b1b1b1b1b2b6c3b5b5c2b6b1b1b1b1b1b1b1b1a28d78634d38230e000215283851667c919fa9aaa59d8a78624d38230d000000192e43586e8398ab9680797878787878787878787878787878787878787878787878787879879da5907b65503b26100000081c2e3f4b6175879a9a8c7f73635b4d484657748a9fa88a75604b4b55606d8298a6b7b19b8673604a35200b0000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281200000000000000071d32475c72879cb1c4af99846f5a442f1a00000a1e334657667c919fb0b3a1957f6a614b464d5f677d8c9faabbb4a29a8474605645383144556e8499aeae99836e5936251300000000000000000000000000000000000000000002152838454b4f505153565660666f7b889da7b8b09e907b655443301c08000000071b2e3e4e647a8d9fb5bfb2a09884786c6560565b5b5560656c7782949daebcccb8a7927c6752382715020000000000000000000000000000000000000000000000000000000000000000152b40556a80959f9f9f95806b56402b16010000000000000000000000000000000417293a4a5c687d929da69f99846f5a442f1a00000000000013283d52687d92a7b29c8772584633293e54697e93a9b29d87725847331f0a00000000000000000000000000000000000d23384d62788d9c9c9c9c9c9c9c9c9c9da5b6cacab6a49c9c9c9c9c9c9c9c9c8d78634d38230e00091d32455671869cb1bac3b7a896816c56412c17000000192e43586e8398a9947f696363636363636363636363636363636363636363636363636372879ca5907b65503b2610000000111e324657637984857a6a6054493d34395e73889da18c77614c37444b6075889db2b5a3907b66503b26110000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d28120000000000000004172a3a5d73889db2c3ad98836e58432e190000031729394c5e6c8196a0b2af9d947f6d61575f677d8c9faabbb4a29a847560564538282637546a7f94a9b29c87725443301c070000000000000000000000000000000000000000091d32455660656567686b6f757c84909da6b8b39e95806b5d4b362614010000000d22374b5c6f849aabbcb5a49882736259504b453837444b5059626d7f949eb0c1c5ae99846e5645311d090000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab5ab95806b56402b1601000000000000000000000000000003101f334658647a8a9fb2b7af99846f5a442f1a0000000000000e24394e63798ea8b59f8b76614c36253a4f657a8faab6a58c76614c37210c00000000000000000000000000000000000d22374d627786878787878787878787879db2c7c7b19c8687878787878787878678624d38220d000b20364b60758ba4b6c9d4c6b09b85705b46301b000000192e43586e8398a9947f69544e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e5d72879ca5907b65503b261000000003162939495b636f70645c4b43362c32475c72879ca28d78634d38324557697e93a9c1ad97826d583b2a180500000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812000000000000000a1f33475874899eb3c1ac97816c57422c170000000b1b2f404b60728298a0b4af9d94827566677d8c9faabbb4a29a847561574538281a273c51667c91a6b49f8a75604a35200b00000000000000000000000000000000000000000b20364b60747a7a7c7e818589919aa2b3b3a79e91806b62513f2f1808000000000f243a4f647a8fa2b3c1b19c86756055483b3632282731353b484c616b8096a3b5c9b49f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16010000000000000000000000000000102132434c6176879ca9bac4af99846f5a442f1a0000000000000b20354b6075899eb4ab907a65503b25364b60768a9fb4a5907b65503b251000000000000000000000000000000000000b2034485962717171717171717171717a8fa4b9b7a28d78717171717171717171625a4834200b000b20354b60738a9fb4c8d1c3af9a85705a45301b000000192e43586e8398a9947f69543f383838383838383838383838383838383838383838475d72879ca5907b65503b2610000000000b1b2c3d494e5a5a4f4b3e30261830465b70859ba48f79644f3a28394c62778ca4b6b29d88735947341f0b00000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812000000000000000c21374c61778ca7b9c0ab95806b56402b1600000000121c304354607482949faaafa098877c7c8c9faabbb4a39b847561574639281a0e23394e63788ea4a4a98c76614c37210c00000000000000000000000000000000000000000e23384d63788d909193969a9ea8afb0a89e95897d6b6251443321110000000002162838566c8196abc0b5a3907b655745372b201d15151d202b34434b6073859bb0c4baa98f7a65503a25100000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b1601000000000000000000000000000d1d2e3f4f616e8399a5b6c7c4af99846f5a442f1a000000000000081d31445570859ab0a9947f69543f2a32455771869cb1a9947f69543f2a14000000000000000000000000000000000005182b3b484d5c5c5c5c5c5c5c5c5c647a8fa4b9b7a28d78625c5c5c5c5c5c5c5c4d483c2b190500081d31445570859aaab8c1b4a5947f6a553f2a15000000192e43586e8398a9947f69543f2a2323232323232323232323232323232323232332475d72879ca5907b65503b261000000000000f1f2c353845453a372e1c141a2f44596f8499a5907b66503b2634485972879cb1b7a68c77624c37220d00000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d28120000000000000010253a50657a8fa5c5c6a7927d67523d281200000000011426364556606d7f8c9ca4b2a59d918c9faabbb5a39b857561574639281b0a0b20354b6073868e8e8e8d78624d38220d00000000000000000000000000000000000000000e23384d63788da2a6a8abafb4b5a39b91898077675f51443426160300000000091e32455671869cb1c6b09b86715d4c3928190d090201080d1820304354667b90a6b7c7a9937e69543e29140000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b160100000000000000000000000009192a3b4b5d697f94a1b2c3d3c4af99846f5a442f1a00000000000001142637566c8196abad98836e583a292839576d8297acad98836e583a29170400000000000000000000000000000000000d1d2b343747474747474747474f647a8fa4b9b7a28d78624d4747474747474738342b1d0d0000011527374e647a8c9ea6a7a39b8776614c36210c000000192e43586e8398a9947f69543f2a140e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1d32475d72879ca5907b65503b26100000000000010f1a21232f3025221b1001182d43586d8298a7927c67523d272a3b5a6f859aafc4a48f7a644f3a250f00000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d675236261408000000000006192c3c54697e94a9beb9a88d78634e38230e000000000008182738454b616a7a86939da6b2ab9fabbbb5a39b857661574639291b0b00081c30435460757979797a74604b36200b00000000000000000000000000000000000000000e23384d63788da2abaeb2b7c4b09b867c746b61584d413426160800000000000b21364b60758b9fb5bfaa95806a553f2f1b0a000000000000051426364c5e73889db2c1ac97816c57422c170000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16010000000000000000000000011426374759657b8c9fb4bfcfd9c4af99846f5a442f1a0000000000000012283d52677d92a7b29c8772584733293e53687e93a8b29c87725846331f0a0000000000000000000000000000000000000d182022323232323232323a4f647a8fa4b9b7a28d78624d383232323232322220190d000000000922364a5c677d8890918e8578625846331f0a000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000000000000060c0e1a1b0f0d080001172c41566c8196a8937e69533e292838596e8399aebba6917b66513c261100000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d6754433026180c04000006122035495a70859bb0c5b49e8972604a35200b0000000000000a1a273143505c64747e889da8b9b5bcb5a39b857661584639291b0b00000114263645576064646464605645321d0900000000000000000000000000000000000000000e23384d63788d9496999da6aab2a39b857d73645c4e423124130100000000000e23384e63798dabbcbaa5907b65503b2511000000000000000008182f40576d8297acc2ae98836e59432e190000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b160100000000000000000000000e1d3144556277889daabbcedfd9c4af99846f5a442f1a000000000000000e23394e63788ea8b6a58c76614c3724394f64798ea9b59f8b76614c36210c0a0a0a03010000000000000000000000000000050b0d1c1c1c1c1c1c253a4f647a8fa4b9b7a28d78624d38231c1c1c1c1c0d0b050000000000071b2d3e4d5f67757b7c7970625a493a291704000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100000000000000000000005050000000000152b40556a8095aa947f6a553f2a32455670859ab0bca6917c67513c271200000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5c4ae998373604b43362a1f1816171a2130414d62788c9fb5c5ae99846f5443301c07000000000000000a151d333e4a55606877899eb4c3b6a49b85766158473a291b0b0000000008182839454b4e4f4f4f4b453828150200000000000000000000000000000000000000000c21364b61757e7f8083888d959da5a39b92867a68604e42311f0f00000000000f253a4f647a8fa4c9b8a38d78634e38230e00000000000000000014293f54697e94a9beaf9a846f5a452f1a0000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b1601000000000000000000000e1e2f404b6073849aa6b7c8c7cad4c4af99846f5a442f1a00000000030d131520354b6074899eb4a5907b65503b25364b60758a9fb4ab907a65503b25202020201816100600000000000000000000000000000007070707070f253a4f647a8fa4b9b7a28d78624d38230d07070707000000000000000000102030404d56606567645c4d493c2c1c0c00000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000000000000000000000000000000000014293e54697e93a996816b56412a3a4b6075899eb3c7a5907b66503b261100000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5c7b3a196816c6054473b342a2b2c2c36414d5f6e8398abbcb8a7917c67513625130000000000000000000215202d384d5f6e8298a8b9b6a59c86766158473a291b0b0000000000000a1b283236393939393632281a0a0000000000000000000000000000000000000000000a1e33465761686a6b6e73787f87959faaa49c8b7e68604e3d2d1a070000000010253b50657a90a5bab6a18c76614c37210c00000000000000000012273d52677c92a7bcaf9a846f5a452f1a0000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16010000000000000000000a1a2b3c4c5e6b8095a2b4c3b7b2b7c3c4af99846f5a442f1a000000071520272a3430435470859ab0a9947f6a543f3531445570869bb0a9947f69543f35353535352d2b231709000000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d000000000000000000000000000212223038454b50524e4a3e352c1e0e0000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000000000000000000000000000000000012283d52677d92a797826d58423b4758677d92a7b9baa98e79644e39240f00000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5d0bfb09f96817261594c473b41413d494e5f677d91a0b2c3b39e8875604b36200b00000000000000000000091e324556677c91a0b2b9a79d87776258473a2a1c0c00000000000000000a161e2124242424201d150a0000000000000000000000000000000000000000000003172939464b535456595a626a75808c9faaaa9f937e685b4a36210f000000000f253a4f647a8fa4c7b7a18c77624c37220d00000000000000000013283e53687d93a8bdae99836e59442e190000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b1601000000000000000002152838485a667c8d9fb5c0b7a59da5b7c4af99846f5a442f1a0000031525333c3f494a4a566b8196abae98836e593a4a4a4a576c8197acad98836e583a4a4a4a4a4a433f352717060000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d000000000000000000000000000004121a2832363b3c39362d20190e000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000000000000000000000000000000000011263b51667b90a699846e59434a596276889db3c5b49f8a75604b36210b00000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5cebbaa9f9f9683776a6159585656585b636e7d8c9fb4bfb6a595806a5645311d09000000000000000000011426374b6075879db2beb39e89796359483a2a1c0c0000000000000000000003090b0f0f0f0f0b09020000000000000000000000000000040a0c0f1315120b08010b1b2933363e3f413c484d56606b7c8c9fb4b49f8b79634e3d2d1a070000000d23384d62788da9bab8a38e79634e39240e000000000000000001142636556a7f94aabfac97816c57422c170000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b160100000000000000010f1d3245566278899eabbcb8a69d879db2c4af99846f5a442f1a00000d20334350555e5f5f5f677d92a7b29d8772585f5f5f5f5f687d92a7b29c8772585f5f5f5f5f5f5852463523100000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d000000000000000000000000000000000a161e21262724221b100600000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000000000000000000000000000000000f253a4f647a8fa49a85705b54606777869ca6b7bfae99846f5645321e0900000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5c9b49f8a9da199897f77716d6b6c6e727983919faabbbcab9c8774604b38271502000000000000000000081d314455697f94a6b7b1a0917c665b493b2b1c0c000000000000000000000000000000000000000000000000000000000000000000000b171f2125282a28201d14090b171e21282a2b2b3538454b5e697f94a5b7a99a85705c4a36210d0000000b20354b60748a9fb4bca7927c67523a2a170400000000000000081c3043546e8398adc6a9947e69543f29140000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b1601000000000000000f1f30414b6074859ba7b8bbaa9d887c91a6bcaf99846f5a442f1a000013273c50616a7475757575798da3b6a58c7675757575757575798ea3b59f8d76757575757575756d64523f2b160100000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d000000000000000000000000000000000002090b10120f0d07000000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000000000000000000000000000000080b1723394e63788ea39c87716168737c889ca4b5c4b2a1907b66503828160200000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bea9947f879ca49e948b8682808183878e98a0b4bbbcb59f8d7b655645321a0a000000000000000000000b20354b6074889db2baa997826d5e4c3d2c1d0d00000000000000000000000000000000000000000000000000000000000000000003111b2933363a3e3f3d3531261909030a0c13151619202832404b6074879db2b4a28e79644e39240f000000081d31445570859ab0c8ad98826d5847331f12030000000000051426364b6074899eb3b9a88f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16010000000000000b1b2d3d4d5f6c8197a3b5bfb49f8c7b7b90a6bbaf99846f5a442f1a0000152a3f556a7f898a8a8a8a8c9fb4c3b49f8c8a8a8a8a8a8a8a8c9fb4bcab9f8c8a8a8a8a8a8a8b826d58432d180300000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100000000000000000000000000008111c232933374c62778ca19d8873767e86919ea6b5c2b7a699836e5e4c381a0a0000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d788699a1aa9f9b979696989ca4adb2beb7ab9f947f6a5d4c382816000000000000000000000010263b50657b90a6b7b49f8a77614c402f1f0f0000000000040a0c0f0b09030000000000000000000000000000000000000000000011212f3a464c4f5355524b44372614010000000000060a151d3145566b8096abc0ab95806b56402b1600000001142637546a7f94aabbb49e8977614c402f1e170b0902090d181f304354667c91a7b8b39e8975604b36200b0000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16010000000000031729394a5b677d929fb1c1b3a1947f6a7c91a6bbaf99846f5a442f1a00091e34495e73899e9f9f9f9f9faabbcebbaa9f9f9f9f9f9f9f9f9faabbc9bbaa9f9f9f9f9f9f9f9b86715b46311c0600000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000000000000000000000002111c232f383a464c5260758ba99f8b838a939ca4b3b8c1b4a59d8876614c402f1c000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d677683929ea6b0adababadb1b6c2b5b1a59d8d7f6a61503f2f1a0a0000000000000000000001162c41566b8196abc4ac97826c594734221201000000000c171f2124211e16100e08000000000000000000000000000000000000091c2f404c586164686a67605544311d0d000000000000000215273851667b90a6bbb09a85705b362614010000000d22384d62788b9fb4b9a896806b5e4c403329201d161e212a34424b6073869cb1bcab98826d5645321d090000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16010000000002101e33465763798a9fb4bdb6a5998372677c91a6bcaf99846f5a442f1a00091e33485e73889daeaeaeaeaeb0b4c1c6bab4aeaeaeaeaeaeaeaeb0b5c1c6b9b4aeaeaeaeaeae9d88735e48331e0900000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000000000000000000000a161e2e373f4b505861686f768b9fa99f989fa9b1b5c2b8b3a39b8779635847332212000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67616e7d88939ba3a6a9aaaaa9a6a39b93877b6a6150433321110000000000000000000000061b30455b70859ab0c7a5907b65503b2a1804000000000c1c2933373936322825221b1003000000000000000000000000000000000e23384c5e65767a7d7f7d73604b3b2b1805000000000000000f24394e64798ea3b9b39e89735443301c080000000b2034485a6c8197a8b9b49f8d7c665e4b463936312832363b474c606b8095a4b5b59f8c79634e382815020000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b160100000000102032424b6175869ca8babaa99d877661677c91a6bcaf99846f5a442f1a00061b31465b70859898989898989ba3b4baa89f98989898989898989ba3b5b9a89e9898989898989786715c47321c0700000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100000000000000000000a1a28323f4b505d656e767d848c9fa9bab4adb4bac3b6b2a79e938577635b493a2a1704000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67525f67757e868c9194959594918c867e74665e5043332515030000000000000000000000091e33485e73889db3baa98b76614c36210c000000000a1b293a474c4f4b45383a372e21100000000000000000000000000000000010263b50657b8b8f939492816c594834200b000000000000000d23384d62788da2b7b49f8a75604b35200b00000005192b3c4c62778a9eb4bcab9e8a7c6b6157504b4538454b5059626d7e939eb0baa999836e5b4a361a0a000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16010000000c1c2e3e4f606e8298a4b6beb49f8b7a6458677c91a6bcaf99846f5a442f1a000014293f54697f838383838383859bb0b49f8a8383838383838383859bb0b49e8a838383838383827a644f3a240f0000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000000000000000a1a2838454b5d65707b838a92999faabac7c9c4b8b3aca59c93897e726259493d2c1c0c00000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67524d57616971777b7e7f807e7c77716860564c40332515070000000000000000000000000a1f344a5f74899fb4b49f89745846331f0a00000003162839475861646056584f4b3f2e1b080000000000000000000000000000000c22374c61778ca5a8aa9f8b77624d372213000000000000000f243a4f64798fa4b9bcab8b76614b36210c000000000d1f344859697f94a0b2b9a89e8d80766b6560565d5660666c7782939caebcb49f8b79634e3d2d1a00000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b1601000008182a3a4b5c697e93a0b2c2b1a0937e685c51677c91a6bcaf99846f5a442f1a000012273b4f61696e6e6e6e6e6e7a8faab49f8a746e6e6e6e6e6e6e7a8faab49f8a746e6e6e6e6e6d645c4a36220d0000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000000000000081828384556606c7b8590999fa9afb4bbc8c0b3afa69e968f877e75686054483b2c1f0f0000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d675239464b54596266696a6a69666259534b45382f22150700000000000000000000000000091f34495e74899eb3b49f8a745947341f0a000000091e32455761767976716d655d4b37220e0000000000000000000000000000000a1f33475872879cb2bbaa937e685341301e0e01000000000417293a51677c91a6bcb7a68a75604b35200b0000000005182a3b4f616d8298a2b1b9ab9f9589807a75737274757b818a97a0aebaaf9f927d685b4a361f0f00000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b160100011426364758647a8b9fb4beb5a497826d604e51677c91a6bcaf99846f5a442f1a00000c2032434f54595959595960758a9fb4aa8e7964595959595960768a9fb4a98e796459595959574f4a3e2d1b070000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100000000000000114263645566074818d9ba3aeb4bac7bbb4bbb3a29a9088817a736961574a43362b1d0f010000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d32363b484d5154555554514d483b3632281a11030000000000000000000000000000071d32475c72879cb1bbaa8c77614c3722120500041325364b6075878e8a86827b654f3a251000000000000000000000000000000004182a3a576c8197acc1b09b86715f4d3c2c1d150d0b0b0d161f3346586d8297acc2b29d88735443301c0800000000000d1d32434b607484979fb4b9b4a79e968f8b8987898b90969fa8b1b9b49e95816c5f4e3d2d1a0100000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b1601000d1c3043546176879daabbb9a89c8675604b4251677c91a6bcaf99846f5a442f1a0000031425323b3f43434343455671869bb1a8937d6853434343455771869cb1a8927d6853434343423a362d2010000000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d0000000000000000000000000000000000060c0e1415120c0a030000000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000000000000081c304354607483969fabb5c1bcb4aeaa9faaaf9a837b746c6460544b46393025180d00000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d28212b34373c3f40403f3c37342b201d150a00000000000000000000000000000000051a2f455a6f849aafc8a7917c675241301f1816171f304354677d92a59f9c927d68523d2813000000000000000000000000000000000f24394e64798ea3b4b5a3917d675a493c3127222021222932414c6176899eb3c7ae99846f5936261401000000000000141d314556607481939ea8b4b8b3abab9f9e9d9ea7a5acb4bab4a89e918072604a41311f0f0000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16000d1d2f404b6072849aa5b7bcb39e89796356453c51677c91a6bcaf99846f5a442f1a00000007142027292e2e2e2838576d8297acac97826c5738272839586d8297adac97816c5737272e2d24221b1002000000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d000000000000000000000000000000000e192023292b28211e160b00000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000000000005182b3b4b60728399a2b5bcbfb2ab9f99908c9fa9947e6960554f4a433632291c13080000000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281219202226292a2b29272220190d090200000000000000000000000000000000000014293f54697e94a9bfaf9a846f5f4d3f342a2b2a33404a6072859bb0b4a48e79644e39240f000000000000000000000000000000000d22364a5c70859bb0beb39e8978635a4b44373735363739464b5f6b8196a7b8baa9937e69533e291400000000000000021527384556606d7e89969fa8b0b4bab5b3b2b3b9bbb4b0a99f968a7d6b605443302313010000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b1609192b3c4c5e6a8095a1b3c0b09e917c675b49383c51677c91a6bcaf99846f5a442f1a00000000030c1214191919293e53697e93a8b09b8671564531293e53697e93a8b09b86705544311d180f0d070000000000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d000000000000000000000000000007151e2c35383e403d3632291b11030000000000192e43586e8398a9947f69543f2a1410101010101010101010101010101010101d32475d72879ca5907b65503b261000000000000b20344859697e93a1b3c0bab4a1998c847b7f94aa95806b5544373530251e160b00000000000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812050b0d1114151514110d0b050000000000000000000000000000000000000000000e23384e63788da1b3b4a2917c675d4c473b403a474c5e687e93a3b5b29c87725c4a36220d00000000000000000000000000000000071b2d3e51667c90a0b2b8a79d8778686055504c4b4b4d5157616c7e929eb0c4b49f8a77614c37220c00000000000000000a1a2838454b606876808a939a9fa9a6a8a8a8a6aa9f9b948a8077675f4a4336251305000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b16152737485a667c8d9fb4bfb4a296806b5f4d3c2c3c51677c91a6bcaf99846f5a442f1a000000000000000004060f253a4f647a8faab49f8a75604b36253a4f647a8faab49f8a75604b36200b0500000000000000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000041525323c494d5455524b46392e21110000000000192e43586e8398a9947f69543f2a2525252525252525252525252525252525252532475d72879ca5907b65503b261000000000000d22374d62778a9eb4bfbaa99f9283786f687e93a897816c574226201c1308030000000000000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000c2135495b6e8399aabbb49e8a7b6b625957565758616b7c8c9fb4b6a5947f69543e2d1b0700000000000000000000000000000000001024384c5e6e8298a6b8b7a59d8a7e746b6562606062666c75818d9fb5bcb7a695806b5847331f0a0000000000000000000a1a2832424e58616b777e858a8e91929392918e8a857f776b61584d413025180800000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b161d3144556278899eabbcb8a69a8473604b4030273c51677c91a6bcaf99846f5a442f1a000000000000070d0f1b1b21364b60768a9fb4a98e79644f3924364b60768a9fb4a98e79644e39241b1a150c0903000000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000122232434f5a63696a6761574b3f2e1e0e00000000192e43586e8398a9947f69543f3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a475d72879ca5907b65503b2610000000000417293a556b8095a8b9bbaa9f8b7d6e635a677c91a798836d58432e18070000000000000000000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000061a2c3d4e63798c9fb4b9a89e8c8177706c6b6c6f77818d9faabbaa9c8775604b362110000000000000000000000000000000000000091d2f404c6177889da7b8b7a89e9388807b777576777c8189969fabbcb9a89d8875614b3a2a1804000000000000000000000a151d313a474c5961697075797c7d7e7d7c7976706a62594c473a301c13080000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b1f30414b6074859ba7b8bbaa9e88776255443122273c51677c91a6bcaf99846f5a442f1a00000000010f1a212430303032455671869cb1a8937d68533e3032455771869cb1a8927d68533d30302f2b211e160b0000000000000000000000000000000000000f253a4f647a8fa4b9b7a28d78624d38230d000000000000000000000000091d30404f6169787e807d75655d4b3c2b1906000000192e43586e8398a9947f69544f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f5d72879ca5907b65503b2610000000000a1f33465871879cb1c6b49f8c7c675f4d50657b90a599846f5a442f1a050000000000000000000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000e2136495b697f949fb4b9aa9f968b85828081848a969fabb9ab9f8c7b655645321e0900000000000000000000000000000000000000121f3447596379899ea6b2b9b4a69d95908c8a8b8c91969ea7b5bcb5a99e8a7a645746321c0c00000000000000000000000002141c2a333b474c545660646668696867646157544d483b332a1c1300000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402b2c3d4d5f6c8196a3b4bfb49f8c7b655948372715273c51677c91a6bcaf99846f5a442f1a000000000f202d36394545454538586d8297adac97826c5737454539586d8297adac97816c5737454544403632281b0b00000000000000000000000002000000000f253a4f647a8fa4b9b7a28d78624d38230d0000000000000000000000000f24394c5e697f8b939592877b655a4835200b000000192e43586e8398a9947f696565656565656565656565656565656565656565656565656572879ca5907b65503b2610000000000c21364c61768ba4b6bcab96816c5e4d414f64798ea49b86705b46311b000000000000000000000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000061a2c3d4f616c81949faab3b4aa9f9b9795969a9fa9b5b5a79e8d7d675d4b382816020000000000000000000000000000000000000004182a3a4a5b647a8899a1b0b5b7b2aaa5a1a0a0a2a6acb3b9b8b3a49c8b7c655c4b3928160000000000000000000000000000000c171f2a343738454b4e51535353514f4b463937342b1f180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b56402839495b677d919fb0c1b3a1947f6a5d4b3b2b1912273c51677c91a6bcaf99846f5a442f1a000000071a2d3e4a4e5b5b5b5b5b5b697e93a8b09b8671555b5b5b5b5b697e93a8b09b8670555b5b5b5a554b463928160300000000000000010b101317110f09000f253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000215283851667c919fa9aaa59d8a78624d38230d000000192e43586e8398ac96817a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7b889da5907b65503b2610000000000f24394f64798ea4c2b49f8b77624c40384d62788da29c87725d472513000000000000000000000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000f1f324352636c7f8b9aa2acb2b4b0acabacafb4b2ab9f99897c675f4d3f2e1a0a0000000000000000000000000000000000000000000c1c2d3d4a5c647783919ba3acb1b5bcb7b5b5b7c5b8b3aea69d95867a655e4c3e2e1b0b00000000000000000000000000000000040c181f22283236393c3d3e3d3c393632282220180d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b564032465763798a9eb4bdb7a5998372604a3f2f1d0d12273c51677c91a6bcaf99846f5a442f1a0000000d21364a5c64707070707070707a8fa4b49f8a73707070707070707a8fa4b49f8a73707070706f6a615746321e0900000000000005131e25282d26241d120f253a4f647a8fa4b9b7a28d78624d38230d0000000000000000000000091d32455671869cb1bac3b7a896816c56412c17000000192e43586e8398ad9f968f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f9da6a5907b65503b26100000000010263b50657b90a5bab09b8671594834364c61768baa9e89735443301c070000010100000000000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000001142534455261697a848f979da5a5a7a8a7a5a69d978c8378665e4d4130211100000000000000000000000000000000000000000000000f1f2d3e4a59616e7c858f979c9faba6a7a8a7a5a79e9992887f74645c4c402f201000000000000000000000000000000000000000040b0c161e2124272829282724211e160d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b5640424b6175869ca8b9baa99d87766154433021110012273c51677c91a6bcaf99846f5a442f1a0000000f24394e647a84858585858585859bb0baa99b8585858585858585859bb0baa99b8585858585848075614b36210d0000000000061423313a3d423c382f1c13253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000b20364b60758ba4b6c9d4c6b09b85705b46301b000000192e43586e8398adb3aca4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4b2b3a5907b65503b26100000000011263b51667b90a6bbae99846e593b2a334658758a9f9f8a75604a35200b0b0d16170c0a0400000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000007172734434f5c646f7a82878d90919392908d8882796e625a4d40302313030000000000000000000000000000000000000000000000010f202d3b474c5f67707a81868b8f91929391908d88837d756a60564a3d2f2111020000000000000000000000000000000000000000000002090b0f11131413120f0c09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b563e4e606d8298a4b5beb49f8b7a645847362513030012273c51677c91a6bcaf99846f5a442f1a0000000c22374c61778c9a9a9a9a9a9a9ba3b5c7b5a39b9a9a9a9a9a9a9a9ba3b5c7b5a39b9a9a9a9a9995816c573b2a180500000002142532414e5257514c403025253a4f647a8fa4b9b7a28d78624d38230d00000000000000000000000b20354b60738a9fb4c8d1c3af9a85705a45301b000000192e43586e83989e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e907b65503b2610000000000f24394f64798ea4c4ae99836e593b2a293a5e73899eaa8b76614c36211920222c2c211f170b000000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fb5bba7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000091724323e4a4f5c646c72787a7c7e7d7b78736c635b4d483c3022130500000000000000000000000000000000000000000000000000010f1d2a34404d515c646c71767a7b7d7e7c7b78746e6860564b45382d1f11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab95806b564a5c687e93a0b2c2b2a0937e685c4a3a291808000012273c51677c91a6bcaf99846f5a442f1a0000000b1f34475973889db0b0b0b0b0b0b3b8c5c1b5b0b0b0b0b0b0b0b0b0b3b9c5c1b5b0b0b0b0b0af9e88735947341f0b000000102032434f5f686c665e4a4336283a4f647a8fa4b9b7a28d78624d38230d0000000000000000000000081d31445570859aaab8c1b4a5947f6a553f2a15000000172d42576c8188898989898989898989898989898989898989898989898989898989898989898989897a65503a2510000000000d22374d62778ca6b7b19b867159483432475d72879ca28d78624d38232b353841413633291b0b0000000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a9fa6a6a6927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000614202d363e4b4f575a626567686766635b574e4a3d352b1e1204000000000000000000000000000000000000000000000000000000000c181f30393e4b4f575861656668686765636054524b453832281a0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d11131416161513100c0a0400000000000000000000000000000000152b40556a8095aabfab95806b5658647a8b9fb4beb5a498826d604e3e2d1c0c00000012273c51677c91a6bcaf99846f5a442f1a00000004182a3b586d82979c9d9d9d9d9d9ea7b8bbaa9f9d9d9d9d9d9d9d9d9ea7b9bbaa9f9d9d9d9d9d9d8c77624c37220d00000a1a2d3e4f61697d827c6b605445383a4f647a8fa4b9b7a28d78624d38230d0000000000000000000000011527374e647a8c9ea6a7a39b8776614c36210c000000152a3e52636c7373737373737373737373737373737373737373737373737373737373737373737373655d4b37230e000000000b2034485973889db2b59f8c77624c3f2f465b70869ba48e79644f39323c484d56564c463a29170400000000000000000000000c21364c61768ba1b6a5907b65503b26100020354a60758a90909090907d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000002101b222e373a3c494d50525352504e493d39362d20190e0000000000000000000000000000000000000000000000000000000000000004121d242e373a3a474c4f51525352504e4a43363632281d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e19202226282a2b2b2b2926211f170c0a0400000000000000000000000000152b40556a8095aabfab95806b546176879da9bab9a89c8675604b423120100000000012273c51677c91a6bcaf99846f5a442f1a000000000c21374c617682878888888888899eb3b49f8c8888888888888888899eb3b49f8c888888888888887a644f3a250f00021628384a5c697f92979180726056473a4f647a8fa4b9b7a28d78624d38230d0000000000000000000000000922364a5c677d8890918e8578625846331f0a0000000f22354552575e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e504b3f2e1c080000000005182b3b576c8197acbcab96806b5d4b3f445a6f8499a5907b655038454b5a626b6c615846331f1300000000000000000000000c21364c61768ba1b6a5907b65503b26100011263b51667c7b7b7b7b7b77624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000007101b22252c35383b3c3e3d3b38352c24211a0f05000000000000000000000000000000000000000000000000000000000000000000000a101b22252a33373a3c3d3e3c3b38353025201d150a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f212b35383c3d3f4041403e3b373329211f170c020000000000000000000000152b40556a8095aabfab95806b60728399a5b7bdb49e8a79635745322414020000000012273c51677c91a6bcaf99846f5a442f1a000000000a1f334758616d7173737373737c90a5b39e8972737373737373737c90a5b39e8973737373737373645c4b37220d00091e324556647a8b9fac9e9582746159494f647a8fa4b9b7a28d78624d38230d000000000000000000000000071b2d3e4d5f67757b7c7970625a493a291704000000051727353e4249494949494949494949494949494949494949494949494949494949494949494949493a372e211100000000000010253b50657b90a2b4b49f8b7b655d4d48586d8398a6917c67514b56606a78818176614c41311a0a000000000000000000000c21364c61768ba1b6a5907b65503b2610000f24384c5e66666666666662594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f192023252729282623211a0f0c070000000000000000000000000000000000000000000000000000000000000000000000000000080d0f171f2125262829272623201c130b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2933373c484d51535456565553504c473a37332a1e160a00000000000000000000152b40556a8095aabfab95806b6a7f94a1b3c1b09f917d675b4939281606000000000012273c51677c91a6bcaf99846f5a442f1a0000000004172a3a474c575c5d5d5d5d61768ca5b6a88d78635d5d5d5d5d61778ca6b7a78d78635d5d5d5d5d4f4b3e2e1b08000b21364b6075879ca9bab0a0988577635b4f647a8fa4b9b7a28d78624d38230d00000000000000000000000000102030404d56606567645c4d493c2c1c0c00000000000917222a2d343434343434343434343434343434343434343434343434343434343434343434343425231c11030000000000000e23374b5d6f849aabbaa99e897b6c6259576c8196a8937d68566068747f8a9696836f5f4e382816030000000000000000000c21364c61768ba1b6a5907b65503b261000091d2f404c5151515151514d483b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0d10121312110e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1011131312100e0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a474c5a5a626668696b6b6a68656158544c473a32281a0f010000000000000000152b40556a8095aabfaa95806b7b8c9fb4bfb4a396816c5f4d3d2c1b0a00000000000012273c51677c91a6bcaf99846f5a442f1a00000000000c1c2a33374247484848475872879db2a7917c6752484848475973889db2a7927c6752484848483a372e20100000091e324556697f8d9fa9b8b2a39b8779655d647a8fa4b9b7a28d78624d38230d000000000000000000000000000212223038454b50524e4a3e352c1e0e00000000000000050f15171e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e100e080000000000000000081c2e3f4f647a8c9fb4b8a79e8c81786f696a8095a9947f6a6d757e87949ea8a1927d685645321e090000000000000000000c21364c61768ba1b6a5907b65503b2610000012222f383b3b3b3b3b3b37342b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758616f73777b7d7f8080807e7b76716961584b45382c1f100200000000000000152b40556a8095aabfaa957f77889eaabbb8a69b8574604b41301f0f0000000000000012273c51677c91a6bcaf99846f5a442f1a0000000000000c171f212d3233332a3a596e8398aeab96806b5641332a3b596e8399aeab96816b563626333325221b10020000021628384f61697d8b9ea6b6b4a59d897b6864798fa4b9b7a28d78624d38230d000000000000000000000000000004121a2832363b3c39362d20190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122364a5c697f949fb5b8aa9f978b857e7b8095aa98827d8289939da5b4b7a89e8876604b36210b0000000000000000000c21364c61768ba1b6a5907b65503b2610000004121d242626262626262220180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c101315161513100c0a04000000000000000000000000000000000000000006121b2020202020202012100a0100000000000000000000020b111320202020201f1d180f0300000c21374c617683888d91929495969593908b867f776a6056493d2e201001000000000000152b40556a8095aabea9947f849aa6b8bcab9e8878625544312312010000000000000012273c51677c91a6bcaf99846f5a442f1a00000000000000040a0c181c1e1e2a3f546a7f94a9af9a856f5a3c2c2a40556a7f95aab09a85705443301c1e0f0d0800000000000a1a32434f5f677a889ca4b4b6a79e8c7d6b798ea3b9b7a28d78624d38230d000000000000000000000000000000000a161e21262724221b1006000000000000000000000000000000000000000000000811181a202020202012100a0100000000000000000000000000000000000000000000000000071b2d3e4f616c81959fabb7b4aa9f9a9490959eafa09892989ea8b2b7b4a59d8a7c665645321e090000000000000000030c21364c61768ba1b6a5907b65503b261000000000090f1111111111110d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c171f2125292a2b2a2926221f180d0b05000000000000000000000000000000000616242f3535353535353528251e1305000000000000000006131e2628353535353535322c211303000c21364b61768b9ea6a6a8a9ababaaa8ab9f9b94898074635b4b3e2e1f0f000000000000152b40556a8095aabfb29d879aa2b4bfb49f8d7b65594837271505000000000000000012273c51677c91a6bcaf99846f5a442f1a0000000000000000000002070810263b50657b90a5b39e89745a4935263b51667b90a6b49e8974604b35200b000000000000000000142532414d5c6478869aa2b2b9aa9f9280798ea3b8b7a28d78624d38230d000000000000000000000000000000000002090b10120f0d0700000000000000000000000000000000000000000000000b19252c2f353535353528251e130500000000000000000000000000000000000000000000000000102032434a60727f8d9da5b3b8b4afa9a5aaafbcb2ada7adb3b9b4aa9f96877a665e4c382816030000000000060c0e181a21364c61768ba1b6a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c181f222933373b3e3f403f3e3b37342a2220180d050000000000000000000000000000122434424a4a4a4a4a4a4a3d3930231301000000000000021324313a3d4a4a4a4a4a4a473e31210f000a1e33465774899fb4c4bbb9b9bbbdc9bcb5b0a89e958679645c4b3d2c1a0a0000000000152b40556a8095aabfb7a59da5b4c0b3a1957f6a5d4c3b2b190900000000000000000012273c51677c91a6bcaf99846f5a442f1a000000000000000000000000000c21374c61768ca5b6a78d78624d3823374c62778ca6b7a88e79634e39230e000000000000000000071423303e4b5a62768498a0afbbb49e95859aafc4b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019293741444a4a4a4a4a3d393023130100000000000000000000000000000000000000000000000002141c304354606a7c87949ea7adb3b7c4bbbfc9c5c5b8b3aeab9f988c8075645c4c402f1a0a00000000000e1920232e3030364c61768ba1b6a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0d1013141516151412100d0b0500000000000000000000000000000000000000000000000000000000000000000000000c171f2a33373a474c505355555553504c473a37342b20180d000000000000000000000000001b2f42525e606060606060524d41301e0a0000000000000b1e31424e5360606060605f5b4f3e2c1800031729395d72889dafaaa6a4a4a5a7adb3b7c4b9b4a49c8a7a645b493827150200000000152b40556a8095aabfc3b7b2b7c3b7a5998372604a3f2f1d0d0000000000000000000012273c51677c91a6bcaf99846f5a442f1a000000000000000000000000000a1f33475872879db2a6917c67513c2734475973889db2a7927d68523d2813000000000000000000000412202e3c4958617482959eb4bbafa29aa2b4c8b7a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e3747545a6060606060524d41301e0a0000000000000000000000000000000000000000000000000000132536434a5e66757f8891989da6a4a6acb9bbb4a79e99938b83796b60574a3e2f221200000000000e1e2c3538434545454c61768ba1b6a5907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d131c20222528292a2b2a292825221f18130c0a04000000000000000000000000000000000000000000000000000000000003111c29333a474c54586165686a6b6a68656159554d483b342b1d1205000000000000000000000020354a5e70757575757575675f4d39251000000000000011263a4e60687575757575746d5b47321d00001b30455b70859a9a95918f8e9092979da6b3b8c2b6a89e8979635645311d0c00000000152b40556a8095aabfd4cac7cabaa99d8776615443302111000000000000000000000012273c51677c91a6bcaf99846f5a442f1a000000000000000000000000000417293a596e8398aeab95806b56402b2a3b596e8499aeac97816c57372715020000000000000000000002101e2c3a4756606d80929faab9b4afb4c0d1b7a28d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c54656f7575757575675f4d39250f000000000000000000000000000000000000000000000000000008182530404c566069757c83888c8f919bacaa9f8c89847e776e635b4b45392d2012040000000006192c3c494d585a5a5a5a61768ba1b6a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080d192022253035383b3d3f40403f3f3d3a37342a28211f170c0800000000000000000000000000000000000000000000000000000614212e3a464c58616970767a7e7f807f7e7b77716a62594c483b302316080000000000000000000020354a60758a8a8a8a8a8a7d67523d281200000000000013283d53687e8a8a8a8a8a8a745f4a351f000010253b50657b8584807b7a797b7d8288939ea7b7c4b9a79c8674604b3a291704000000152b40556a8095aabfd5dfcfbeb49f8b7a64584736251303000000000000000000000012273c51677c91a6bcaf99846f5a442f1a0000000000000000000000000000152a3f546a7f94a9af9a846f5a3c2b2a40556a7f95aab09b86705544311d080000000000000000000000000e1c2a38454b626a7d8c9ea7b7c3c8d1cdb7a28d78624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a6f838a8a8a8a8a7d67523d2d1a07000000000000000000000000000000000000000000000000000008131c2f38454b5660676e7377797c91aa9f8b77736f6962594e4a3d32281b100200000000000c2035495a636d6f6f6f6f6f768ba1b6a5907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202b343736434a4d50535455555554524f4c473b3d363329231c11080000000000000000000000000000000000000000000000061424313f4b58616b777f858b909394959493908b867f776c62594d413326160800000000000000000020354a60758a9f9f9f9f927d67523d281200000000000013283d53687d929f9f9f9f8b745f4a351f00000e23384b5d65706f6a66646466686d747e899da6b7c5b5a4947f6a5846331f0a000000152b40556a8095aabfd5d3c2b2a0937e695c4a3a2a180800000000000000000000000012273c51677c91a6bcaf99846f5a442f1a000000000000000000000000000010263b50657b90a5b39e89735a4835263b51667b90a6b49f8a75604b36200b000000000000000000000000000c1a273144505f687b899da5b5c1cfcdb7a28d78624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384d62788c9f9f9f9f9a85705b4a36210b00000000000000000000000000000000000000000000000000000000121a283238454b5258586164748a9faa8b766059544c483b362d1e160a000000000000000e23384d6378828585858585849aafbaa5907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000612182630353b484d545460626568696a6b6a696765625958534c463a372e221b1004000000000000000000000000000000000000000004142432424e5d6576808a949b9faba8aaaaaaa8ab9f9c958b8277675f504434261606000000000000000020354a60758a9fb5b5a7927d67523d281200000000000013283d53687d92a8b5b49f8a745f4a351f0000081c2f3f4b505b5a55514f4f505255606979889daabbc2b39e8976614c36210e000000152b40556a8095aabfd6c6b6a498826d604e3e2e1c0c0000000000000000000000000012273c51677c91a6bcaf99846f5a442f1a00000000000000000000000000000c21374c61768ca4b6a78d78624d3823374c62778ca6b7a98e79644f39240f00000000000000000000000000000a151d33414e5d6579879ba3b3bfcab7a28d78624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145566b8096abbcb5b4a28e79634e39281603000000000000000000000000000000000000000000000000000000000a161e2832363c3a474c5e73889ea28c77624d3e37342b211a0f030000000000000000192f44596e83989a9a9a9a9a9aa2b4baa5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19203036434b515962696e74787a7d7e7f807f7e7d7a77726e6861584f4b3f372e1f170c00000000000000000000000000000000000000122232424f60687b88969fa9b0b4bbb4b2b1b2b4bbb5b1aa9f97897d6b625144342414020000000000000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f00000011212f383b4645403c3a393b37444b5b63798b9fb4c7b9a8947f69543c2b19060000152b40556a8095aabfcdb9a89c8675614b42312010000000000000000000000000000012273c51677c91a6bcaf99846f5a442f1a00000000000000000000000000000a1f33475872879cb0a6917c67513c2734485973889db2a7927d68523d2813000000000000000000000000000000021523313f4b5b63778599a1b4b4b4a28d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075889eb3c9c8c0ac96816c5746321e090000000000000000000000000000000000000000000000000000000000020a161e21272a33475c72879ca38e79634e392420180d07000000000000000000001c31465b71869ba8a8a8a8a8a8a8a8a8a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121e2b35404d54606770777e84898d90929495959494928f8c88837d766e655d4f4b3e33291c1002000000000000000000000000000000000d1d30404f60697e8d9da6b4bab4adaa9f9c9b9c9faaacb4bab4a79e91806c6251423220100000000000000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f00000003111c2325302f2b2625242627313d4a5b6b8095a9bac6b19c86715a4935200b0000152b40556a8095aabfbdb49e8a7963574632241402000000000000000000000000000012273c51677c91a6bcaf99846f5a442f1a00000000000000000000000000000417293a54697f949b9d95806b55402b2a3b596e84999d9c917c66513c2611000000000000000000000000000000000513212f3d4959627583969f9f9f9f8d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d52677d92a6b8b8b3b8b39e8975614b3621100000000000000000000000000000000000000000000000000000000000000002090b121830465b70859ba48f7a654f3a2510050000000000000000000000001c31465b71859393939393939393939393907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071522303c484d5f67737c858c94999ea7a5a8a9aaaaaaa9a7a4a59d98928a837a70645c4c463a2d201204000000000000000000000000000005192b3b4c5e697e939fabb7b5aa9f98908a8786878a8f979fa9b4b9b39e95806c604f3e2d190900000000000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000080e101b1a15110f0f11151d2d3d4c61778a9fb4c9b5a48d78624d38230d0000152b40556a8095aab2b19f917d675b493928160600000000000000000000000000000012273c51677c91a6b2af99846f5a442f1a0000000000000000000000000000000c20354a60727f868887826d58422d293f54697f8788878072604a35200b000000000000000000000000000000000003111f2c3b48576072818a8a8a8a8c78624d38220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b70859ab0b8a79ea7b8a8937d68533e2e1b0700000000000000000000000000000000000000000000000000000000000000000000192e43596e8398a9917b66513c26110000000000000000000000000012273c52677d7e7e7e7e7e7e7e7e7e7e7e7e78624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008162532404c5a626f7c86919a9fabaeb3b8c5bdbebfbebfbebcc3b7b2ada99f998f857a6d61584a3e30221305000000000000000000000000000b20344859667c8d9fb4bcb3a39b8c837b75727172757a828a9aa2b2bcb09e937e695c4a37271501000000000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f000000000000000006050000000000020f1f3347586e8398aec3c2a8927d68533d28130000152b40556a80959d9d9c95816c5f4d3d2c1b0b0000000000000000000000000000000012273c51677c919d9d9d99846f5a442f1a000000000000000000000000000000071c30435460697172726d63523f2a273b4f61697272716b605443301c07000000000000000000000000000000000000010f1d2a394554606c7575757575625a4835200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394e63798ea2b4b39e899eb3b09b86715c4a36220c0000000000000000000000000000000000000000000000000000000000000000000010263b50657c8b8e8e7d68523d2813000000000000000000000000001025394d5f6769696969696969696969696962594834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000006162633434f5e667884919ca4afb5bcc7bab4b0adaaa9a9aaabaeb1b4bcc7bab4aea29a8d8276645c4d40302313030000000000000000000000091c2f404d6278899eabbcb3a19985796e6660565c5560656d788498a0b2bdb49f8c7a645544311d0a000000000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000004172a3a53687d93a8bdc1ac97816c57422c17020014293e54697e878888878073604b41301f0f000000000000000000000000000000000011263b50667c8788888887826d58432d1800000000000000000000000000000000132536434a545b5d5d58524535231f32434f545d5d5c564a433625130000000000000000000000000000000000000000000d1b2836434b565f5f5f5f5f4d483c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3246576c8196acb7a6957f95aab5a38f7a644f3a2917040000000000000000000000000000000000000000000000000000000000000000000e23384c5e6576797976614c37210c000000000000000000000000000a1d30414d525353535353535353535353534d483b2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000041424334450616a7c8999a1b1b6c2b9b4aca99f9b989594949496989c9fabaeb4bbc0b4ab9f97877a665e4d4130221101000000000000000000000e23384c5e6f8499a7b9b5a3998374635b504b4538444b505a62738298a1b3bbaa9c8673604b382816020000000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f00000000000000000000000000000000000f243a4f64798fa4c7c5af9a85705a45301b050012273b4f6169727272716b6055443123130100000000000000000000000000000000000f23384c5e6672727272726d64523f2b160000000000000000000000000000000008182530353f464848423f3527171425323b3f484847403530251808000000000000000000000000000000000000000000000a18263035414a4a4a4a4a38352b1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b6175899eb3b29d87788da4b6ad97826d5846331f0a000000000000000000000000000000000000000000000000000000000000000000091c2f404c58616464615847331f0a0000000000000000000000000001122330393c3e3e3e3e3e3e3e3e3e3e3e3e37342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000001222324250626b7f919ea7b3bfbab4a89e97908a8683807f7e7f8083868b91999faab4bcbcb5a59d8b7d675f4d402f1f0f000000000000000000081c2e3f50657b90a1b3baa99b857460564a3d36322831363c48556072839aa7b8b6a4937e685645321e090000000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f00000000000000000000000000000000000b21364b60768ba9bac7b29d87725d48321d00000c1f32424f545d5d5d5c564b4437261405000000000000000000000000000000000000091c2f404c505d5d5d5d5d585246352310000000000000000000000000000000000008131c202a3133332d2a23170906141f27293333322b201c130800000000000000000000000000000000000000000000000008141c202c35353535352220190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e53687d92a7b9ad978272879cb1b49f8a76614c3621110000000000000000000000000000000000000000000000000000000000000000000011212f3a474c4e4e4c473a2a1704000000000000000000000000000005121d25272929292929292929292929292220190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2f404f616b80949db3b9c0b4a99f9589827b75706d6b6a696a6b6e71767c838b979fabb6c2b6a99f8c7d675e4c3d2c190900000000000000000e23374b5d71859bb0bfb49f8b79635645382d211e161d202b3744546177899eb3c2b39d8875604b36210f0000000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000091e324556748a9fb4c9b49e89745f4927150200021424323b3e48484847403531261909000000000000000000000000000000000000000012222f383b4848484848433f3527170600000000000000000000000000000000000000070b141c1d1d18160f060000030c12141d1d1c160b0700000000000000000000000000000000000000000000000000000001080b1720202020200d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c71869bb0baa9917c6b8095abbaa9937e69543f2e1c0800000000000000000000000000000000000000000000000000000000000000000003111c2a3337393937332a1c0c00000000000000000000000000000000010a10121414141414141414141414140d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4c5e697f939eaebbbdb0a29a8a80766d656056585554545556595861676e78818c9ca4b3bfbaaa9f8c7c665b4937271502000000000000031628394f657a8fa3b5baa995806b5b4938281a0f0902080e1926364759687e93a6b7b8a6927d68523d2c1a0600000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000031628385e73889eb3c8b59f8a755645311d09000006141f2729333333322b201d140900000000000000000000000000000000000000000004121c232633333333332d2b23170900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4f647a8fa3b5b49f8a76647a8fa4b5b19c86715d4b37230c00000000000000000000000000000000000000000000000000000000000000000000000c171f212424211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f344759667c8d9fb4bcbcb09f9684786a6158504b4538403f3f3f413a464c515a626c7a8699a1b3bfbbaa9e8a79635544311d0d000000000000091e3245576e8398adc1b49f8a77614c3d2c1a0a000000000009182a3a4b6074889db2c4b09b86715b4935210c00000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000001d32485d72879db2c7bcab8b75604b36200b000000020c12141d1d1d1c160b0801000000000000000000000000000000000000000000000000090f111d1d1d1d1d181610060000000000000000000000000000000000000006121b2020202020202012100a0100000000000000000000020b111320202020201f1d180f03000000000000000000000000000000000000000a141a1c1c1c1c1c0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586d8297adc1ad98836d5c71869cb1b6a48f7a65503b2a18040000000000000000000000000000000000000000000000000000000000000000000000040a0c0f0f0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0f0f0d0b0600000000000000081c2e3f4c6177889eabbcbeb09e958173625a4c473a3632282b2a292a2b2933363c484d5c64758399a1b3c1b9a89b8574604b3b2b180500000000000b21364b60758a9fb4c5ad97826d5847331f0e000000000000000c1d3145566a7f95aac2b5a38d78634e38230e00000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000616242f3535353535353528251e1305000000000000000006131e2628353535353535322c21130300000000000000000000000000000000000e1c272f32323232322220190d00000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a9fb4b6a5907b6553697e93a9baad98836e5947341f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d19202224242320190e0000000000000e23374b5d6e8398a6b8c3b2a095806c6055483c3329211e161615141516171f212b353e4a5761748399a3b5c6b5a3957f6a594834200d000000000012273c51677c91a8bab9a7907b65503a2a180000000000000000021527384d62788da4b5c1aa947f6a5538281603000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f1314161614110d0b05000000000000000a0b0b0b02000000000000122434424a4a4a4a4a4a4a3d3930231301000000000000021324313a3d4a4a4a4a4a4a473e31210f000000000000000000000000000000000a1c2c3943474747474738342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f54697e93a8bab29c8773604c61768a9fb4b49f8a77614c36261401000000000000000000000000000000080d0f131313130e0c0600000000000000000000060c0e0c0a0300000000000000000000000000000000060c0e1010101010101010101010100e0c06000000000000000000000000000000000000000000000000000000010f1a212b3437393938352b1e0e00000000081c2e3f50657b8fa0b2c4b6a598826d624b44372b1f170c09020000000000040a0e19202d3946566075859ba9bac1b49f8a77624d3b2a180500000004182a3a576d8297acc6b39e8974604b35200c0000000000000000000a2035495a71869cb1c5b09a85705645321e09000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000408131c2024282a2b2b2926221f180d0902020b11131f20202017150f050000001b2f42525e606060606060524d41301e0a0000000000000b1e31424e5360606060605f5b4f3e2c18000000000000000000000000000000001427394a565c5c5c5c5c4d483c2b190500000000000000000000000000000000000000000000000000000000000000000000000e23374b5d71869cb1bbaa947f6a5446586d8298adbaa9947f6a5443301c080000000000000000000000000002101b2225282828282320190e00000000000000020e192023211e160b00000000000000000000000000000e1920232626262626262626262626262320190e00000000000000000000000000000000000000000000000000000f1f2d363b484d4e4e4d483c2b19060000000e23374b5d70859bb0bebfb29c8775604b443126190e04000000000000000000000006101b2938455763788a9fb4c4baa897826d5948341f0b0000000a1f34475972879cb2c3ae98836e5544311d0800000000000000000006192c3c566b8196abc0b49f8a76604b36210b000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000c181f253035393d3f41403f3b37342a201d15141f2628343535352c2a221709000020354a5e70757575757575675f4d39251000000000000011263a4e60687575757575746d5b47321d000000000000000000000000000000051a2f4356687171717171625a4834200b0000000000000000000000000000000000000000000000000000000000000000000004182a3b50657a8fa4b6b49f8b77624c3a4f657a8fa4b5b29d8773604b35200d0000000000000000000000000010202e373a3d3d3d3d38352c1e0e00000000000a161e2c35383632291b0b0000000000000000000000000e1e2c35383b3b3b3b3b3b3b3b3b3b3b3b38352c1e0e0000000000000000000000000000000000000000000000000c1c2d3d4a4e59626464625a4835200b00000417293a50657a8fa3b5c7b3a1907b655745321d14090000000000000000000000000000000b1a2839495a697f94a6b7c6b49f8b77624c3722100000000c22374c61778ca5b6bea9947e6954372614010000000000000000000012273c51677c91a6c7baa98f7a65503a2510000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000141d2a3436434a4f5254565554514c473b36312724313a3e494a4a4a413e342717050020354a60758a8a8a8a8a8a7d67523d281200000000000013283d53687e8a8a8a8a8a8a745f4a351f000000000000000000000000000000071c32475c71868787878678624d38220d000000000000000000000000000000000000000000000000000000000000000000000b1f3447596e8398adc2ae99836e5947374b5d71869cb1b7a5907b66503c2b19050000000000000000000000081b2e3e4b4f535353534d493c2c19060000010f1a28323c494d4b46392916030000000000000000000006192c3c494d5050505050505050505050504d493c2c1906000000000000000000000000000000000000000000000417293a4a5c647177797978624d38230d00000a1f3347586e8399aec1c2af9a846f5d4b3928160100000000000000000000000000000000000a1b2c3c4b6075889db2c7baa995806a553e2d1b07000010253a50657a8fa5c3c7a58f7a65503a251000000000000000000000000d22384d62788da9bac7a8937e68533e2913000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b000000000000000000000000000000000000000000000000000000000000000008131c323b474c54606468696b6b69666259524b453831424e535f60606057524534220f0020354a60758a9f9f9f9f927d67523d281200000000000013283d53687d929f9f9f9f8b745f4a351f0000000000000000000000000000000b20354a60758a9c9c9c8d78634d38230e000000000000000000000000000000000000000000000000000000000000000000011426364c61778a9fb4b7a5907b66503b2e3f54697e93a9baae99836e5a4834200900000000000000000000000d22374b5c6468686868635a4935200c00000f1f2c38454b5a63615746321e0f000000000000000000000c2035495a63656565656565656565656565635a4935200c000000000000000000000000000000000000000000000a1f334658647a868c8e8e7e69543e291400000c21374c61768a9fb4c9b6a48f7a65503f2f1b0a000000000000000000000000000000000000000e1e324556697f94a9bac7b29d87725c4a36220d000013293e53687e93a8bdbaa98c77624c37220d00000000000000000000000b20354a6074899fb4c1ac96816c57412c17020020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b0000000000000000000000000000000000000000000000000000000000000008182530424f59616c74797d7f80807e7b77706860564c404e6068747575756c63523e2a150020354a60758a9fb5b5a7927d67523d281200000000000013283d53687d92a8b5b49f8a745f4a351f0000000000000000000000000000000b20354a60758a9fb1a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000081c3043546a7f94a9bab29d8774604b3521374c61768a9fb4b49f8b78624d37271501000000000000000000000f253a4f647a7d7d7d7d78634d38230e00061a2c3d4956606a7875614b3d2d1a070000000000000000000e23384d63787b7b7b7b7b7b7b7b7b7b7b7b78634d38230e000000000000000000000000000000000000000000011426364c6176899ba39f8a76614c37210c000012283d52677d92aabbc7b19c86725d4b3721110000000000000000000000000000000000000000021628384c61778a9fb4c9b7a58e79644f39240f0000162b41566b8096abc0b49f8975604a35200b0000000000000000000000071c30435472879cb1c4af99846f5a442f1a050020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000000000000132536434a60697781888e9294969594908b857d74665e4b53687e898a8a8a816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000b20354b6073879db2bcab957f6a5443301f3347586d8298adbbaa95806a5544311d0800000000000000000000172c41576c81929292927d67523d2812000c2136495b63747f89806b5b4a362113000000000000000000162b40566b80909090909090909090909090806b56402b16000000000000000000000000000000000000000000081c3043546a7f94a7ad98826d5847331f0a0005192b3b596e8398aec8c6aa957f6a553f2e1c030000000000000000000000000000000000000000000a1f3347586f8499aec4c3aa95806a553626140100182d43586d8298adc2b29d87725443301c070000000000000000000000001325365a6f849aafc4b09b86715b46311c060020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b000000000000000000000000000000000000000000000000000000000000071c304354606c7e89969da6a7a9abaaa9ab9f9b92877c6d605773889da89f96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000005192b3c50667b90a5b6b49f8b78624d362617293a4f657a8fa4b6b29d8874604b35200e00000000000000000000172c41576c8196a8a7927d67523d2812000e23394e637987959f8c79634e413019090000000000000000162b40566b8095a5a5a5a5a5a5a5a5a5a595806b56402b160000000000000000000000000000000000000000000b20354b6073879db2a48f7a654f3a2a1704000b2034485973889db2c8b9a88e79644f3924110000000000000000000000000000000000000000000004172a3a53687e93a8c7c4af9a846f5443301c08001a2f455a6f849aafc4b09b86715b36251300000000000000000000000000192e43586e8398adc3b29d88735d48331e000020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f89745f4a341f0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b0000000000000000000000000000000000000000000000000000000000081b2e3e4a607281939ea8b2b7b8b3aeabaaabadb0a59d90817562768ba6b7ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000b2034485a6e8399aec3ae99846f594834180c23374b5d71869cb1b7a6917c66513c2c1906000000000000000000172c41576c8196aca7927d67523d281200192e43586e8398a5aa9a84705f4d3727150100000000000000162b40566b8095abbbaa9f9e9e9e9e9e9e947f6a543f2a15000000000000000000000000000000000000000005182b3b51667b90a5b19c86715d4b371c0c00000d22374d62778ca6b7c9b49e8974604b35200b00000000000000000000000000000000000000000000000e24394e63798ea9bac9b39e8974604b35200b001c31465b71869bb0c4af9a846f5a452f1a00000000000000000000000002172c42576c8197acc1b49f89745f4a2715010020354a60758a9fb5bca7927d67523d281200000000000014293e54697e93a9beb39e89735e49341e0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000000000d22374b5c6b80959fb3b9b8b3a79e99969495989da5ae9f978577798ea3c4ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000011527374d62788b9fb4b7a6917c66513b2b19081c2e3f54697e94a9baaf9a846f5a4935200a000000000000000000172c41576c8196aca7927d67523d281200152b40556a8095a8b4a2927d675544311d0a00000000000000162b40566b8095abb49f8c8889898989888477614c37220c00000000000000000000000000000000000000000b203448596e8399aea9937e69543f2e1b00000011263b50667b90a5c4c5b09b85705443301c0800000000000000000000000000000000000000000000000b20354b6075899fb4c9b9a88d78624d38220d001c31475c71869cb1c3ae99846e59442f1904000000000000000000000001172c41566c8196abc1b49f8a755544311d080020354a60758a9fb5bca7927d67523d2814080000000000152a40556a7f95aabfb29c87725d47321d0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000000071b2d3e4f647a8c9fb4bdb7a79e938983807f8083888f99a1a39b867e93a8bdac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000081d3144556b8095aabbb39d8874604b35200d001121374c61768a9fb4b59f8c78634d382815020000000000000000172c41576c8196aca7927d67523d2812000c22374c61778a9eb4b29d8774604b38271502000000000000162b40566b8095abb09b857373737373736f615847331f0a00000000000000000000000000000000000000011426364d62778b9fb49f8a76614c37211000000013293e53687e93a8bdc2ad97826d58362614010000000000000000000000000000000000000000000000081d31445571879cb1c6c6a58f7a65503a2510001d32475d72879cb2c3ae98836e59432e1904000000000000000000000001162b41566b8096abc0bcab8a75604b35200b0020354a60758a9fb5bca7927d6752423026180e06000008182e3f586d8398adc2b09b86705b46311b0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b000000000000000000000000000000000000000000000000000000000d22364a5c70859babbcb7a69d897e746e6b6a6b6e727a83909da49c8a9fb4c1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000b20354b6074889db3bcab95806b5544311d08000a1f3347586d8298adbcab96806b5645321d090000000000000000172c41576c8196aca7927d67523d2812000a1f3447596a8095a6b6a5927d685645311d08000000000000162b40566b8095abb09b86705e5e5e5e5e5a4c473a2a180400000000000000000000000000000000000000081c3043546a7f95aaad98826d5847331f0a000000162b40566b8095abc0bfaa95806a55402b15000000000000000000000000000000000000000000000000011426375a6f8499afc4bca7927d67523d2812001d32485d72879db2c3ad98836e58432e1903000000000000000000000000162b40556b8095aac0b5a08b76604b36210b0020354a60758a9fb5bfaa957f6a604b43362c201916161a25364b5d72879db2c2ad97826d58422d180000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b000000000000000000000000000000000000000000000000000000000f24394f647a8ea3b5c1b39d8879686055565556585c646e7c889aa29faabbc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0000000000000001010101010101010b20354a60758a9fb5a28d78634d38230e01010101010101010000000000000000000000000000000000000000000006192c3c51677c91a6b7b59f8c78624d372715010004172a3a50657a8fa4b6b39e8875604b36200f0000000000000000172c41576c8196aca7927d67523d28120004182a3a4b6175889eb3b29d8774604b362513000000000000162b40566b8095abb09b86705b494949494537332a1c0c00000000000000000000000000000000000000000b20354b6074879db2a48f7a644f3a291704000000172c42576c8197acc1bea8937e69533e291400000000000000000000000000000000000000000000000000182d43586d8298adc2bea8937e69533e2914001d32475c72879cb1c3ae99836e59442e1904000000000000000000000001162b41566b8096abc0bbaa8a75604b35200b0020354a60758a9fb5cab59f8d7e6a6054493c352c2c2c2c354354657a8fa5b6c0a8937d68533e28130000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000003162839576c8197acc1b5a3917c665b4b44373f403e4b4f5e66768499a1b3c2c1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f00000000080e1017171717171717171720354a60758a9fb5a28d78634d382317171717171717171712100a010000000000000000000000000000000000000c2135495b6f849aafc4af9a846f5a493519090000000c23374b5d72869cb1b8a7927d67523d2d1a0700000000000000172c41576c8196aca7927d67523d281200000c1e324657697f94a8b7a5937e685443301c070000000000162b40566b8095abb09b86705b463434332f221f180c000000000000000000000000000000000000000005182b3b51667b90a5b19c86715d4b371c0c00000000182d42586d8297adc2bda8927d68533d281300000000000000000000000000000000000000000000000002172d42576c8297acc1bea9947f69543f2a14001c31475c71869cb1c3ae99846e59442f1904000000000000000000000001172c41566c8196abc1b49f8a755544311d080020354a60758a9fb5cfbcab9f937f73635a4d493c41413d494e6072849ab0c3b4a28d78634e38230e0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b000000000000000000000000000000000000000000000000000000091e32465771869cb1c5b09b85705e4c3d31272a2b2e37404c5861748399a4b5c1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f000003101b22252c2c2c2c2c2c2c2c2c2c354a60758a9fb5a28d78634d382c2c2c2c2c2c2c2c2c2c27251e130500000000000000000000000000000000021628384d63788c9fb5b8a7917c67523c2c1900000000081c2e3f54697f94a9bab09a85705b4a36210b00000000000000172c41576c8196aca7927d67523d28120000031629394c6176899eb3b19c8773604a35200e0000000000162b40566b8095abb09b86705b46311e1e1a0c0a040000000000000000000000000000000000000000000b203448596e8399aea8937e69533f2e1b0000000000182e43586d8398adc2bca7927d67523d281200000000000000000000000000000000000000000000000002172c41576c8196acc1bfaa957f6a55402a15001b31465b70869bb0c4af9a856f5a45301a00000000000000000000000002172d42576c8297acc1b49e89745f492614010020354a60758a9fb5cfbeb2ad9d9584786b635a585656585b636e8096a2b4c0b09a85705b4935210c0000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b0000000000000000000000000000000000000000000000000000000c21364b61758a9fb4bea8937e6953402f1d1515161b222f3a47566074869cb1c1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f000010212e373a41414141414141414141414a60758a9fb5a28d78634d41414141414141414141413d3930231301000000000000000000000000000000091e3245566b8196abbcb39e8875604b36200e00000000001121374c61778a9fb4b4a28e79634e39291603000000000000172c41576c8196aca7927d67523d28120000000b1e3346576b8096aab6a4907b66503c2b190600000000162b40566b8095abb09b86705b46311b09050000000000000000000000000000000000000000000000011426364d62778b9fb49f8a76614c3621100000000000182d42586d8297adc2bda8937d68533e281300000000000000000000000000000000000000000000000002172d42576c8297acc1bea9947f69543f2a14001a2f445a6f8499afc4b19b86715c37261401000000000000000000000004192e43596e8398aec3b29d88725d48331d000020354a60758a9fb5c6b2a0989fa29a8a8178716d6b6b6d717983969eb0c0b4a2917c67523d2c1a060000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b0000000000000000000000000000000000000000000000000000000e24394e63798eaabbc9a48e79644f39241201000008121c2a3845566f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f00081b2e3f4b4f56565656565656565656565660758a9fb5a28d7863565656565656565656565656524d41301e0a0000000000000000000000000000000b21364b6075889eb3c0ab96816b5645311d0900000000000a1f3347586e8398adc0ac97816c5746321e0a000000000000172c41576c8196aca7927d67523d2812000000031729394d62788b9fb4ae99846f5a4835200b00000000162b40566b8095abb09b86705b46311b06000000000000000000000000000000000000000000000000081c3043546a7f95aaad97826d5846331f0a0000000000172c41576c8196acc1bea9937e69543e291400000000000000000000000000000000000000000000000003182e43586d8398adc2bda8937e68533e291300182d42586d8297adc2b29d88725544311d080000000000000000000000011426375a6f859aafc4b09b86705b46311b060020354a60758a9fb5c3ad98828b9ea79f968d8783818182868d99a1b0bcb8a89a8472604a35200f000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000010253a50657a8fa5c8bcab8b76614c36210c00000000000c1a28385a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f000e22374b5d656c6c6c6c6c6c6c6c6c6c6c6c6c758a9fb5a28d786c6c6c6c6c6c6c6c6c6c6c6c6c675f4d3925100000000000000000000000000000071a2d3d52677d92a7b8b4a28e79634e38271502000000000004172a3a50657b90a4b6b39e8976614b362110000000000000172c41576c8196aca7927d67523d2812000000000b203448596f8499aeb49f8b78624d38230e00000000162b40566b8095abb09b86705b46311b060000000000000000000000000000000000000000000000000b20354b6074879db2a48f7a644f3a2917040000000000152b40556a8095aabfc0ab95806b56402b16000000000000000000000000000000000000000000000000021528385a6f859aafc4bca7927c67523d271200162b40566b8095abc0b49f8a75604b35200b0000000000000000000000081d31445572879cb2c3ae99846e59442f19040020354a60758a9fb5bca7927d7a899ba3aba49c989696989ca4aeb3bfb4a79e8a78625443301c07000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000011273c51667c91a6bbb49f8a75604a35200b0000000000001a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0010253a4f657a818181818181818181818181818196abc1ad9782818181818181818181818181817d67523d271200000000000000000000000000000c21364a5b70859bb0c5b09a85705b49351a0a000000000000000c23374b5d72879cb1b9a8937d68533e2e1b070000000000172c41576c8196aca7927d67523d28120000000005192b3b51677c91a7b8ab947f6a543c2c1906000000162b40566b8095abb09b86705b46311b06000000000000000000000000000000000000000000000005192b3b51667b90a5b19c86715c4b371b0b00000000000013283d53687d92a8bdc2ad98826d58382715020000000000000000000000000000000000000000000000091d32455672879cb1c7c4a48f7a644f3a250f0013283d53687d92a8c9bbaa8d77624d38220d00000000000000000000000b20354b60758a9fb4c0ab96816b56412c16010020354a60758a9fb5bca7927d677985949fa9b1adababadb1b6bbb4afa29a897a645a4836251300000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745443301c070000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0014293e53697e93969696969696969696969696969fb0c4b1a09796969696969696969696969696826d58422d1800000000000000000000000000031628394e63798ea3b4b4a7927d67523d2c1a0000000000000000081c2e3f54697f94a9b4b19b86715c4a36220d0000000000172c41576c8196aca7927d67523d281200000000000d20364b6075889eb3b09b86715a4935200c000000162b40566b8095abb09b86705b46311b0600000000000000000000000000000000000000000000000b203448596e8399aea8937e68533e2e1b0000000000000010253b50657a90a5c3c6b09b86715645311d0900000000000000000000000000000000000000000000000b20364b60758a9fb4c9b8a68c77624c37220d000f253a4f647a8fabbcc8a5907b66503b261100000000000000000000000e23384e63788daabbc6a8927d68533d2813000020354a60758a9fb5bca7927d6763737f8a959da5a6a9aaaaa8aa9f9a918479645c4a3c2b180800000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a2513000000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0014293e53697e93a8ababababababababababababb0bdcdbeb1adabababababababababababab97826d58422d1800000000000000000000000000091e3246576c81979f9f9f9d8975604b36210f0000000000000000001122374c61778a9d9f9f9f8f7a644f3a240f0000000000172c41576c8196aca7927d67523d28120000000000091d3145566d8297acb5a38d78624d38230d000000162b40566b8095abb09b86705b46311b0600000000000000000000000000000000000000000000011426374d62788b9fb49e8a76614c362110000000000000000c22374c61778ca5b6c9b49f8a75604b36200b00000000000000000000000000000000000000000000000f24394f64798eaabbc8b39e88735948341f0b000c21364c61768b9fb5bfaa947f6a55382816020000000000000000000012283d52677d92a7c8b9a88f79644f3a240f000020354a60758a9fb5bca7927d675560697780878d9194959492908a847c70635b4a3e2d1e0e0000000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f000000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0014293e53697e93a4a4a4a4a4a4a4a4a4a4a4a4a4aab7c7b9aca7a4a4a4a4a4a4a4a4a4a4a4a497826d58422d18000000000000000000000000000c21364b6175888a8a8a89877c665645321e090000000000000000000a1f344759677d888a8a8a8b816c57422d170000000000172c41576c8196aca7927d67523d281200000000000215273851667b91a8baa9947f6954372715020000162b40566b8095abb09b86705b46311b0600000000000000000000000000000000000000000000081d3144556a7f95aaac97826d5746331e0a000000000000000a1f33475872879cb2c7baa98f7a65503726140100000000000000000000000000000000000000000005192b3c54697f94a9c8c3ae99846e593b2a1805000a1f33465871869cb1c4af99846f5645321e09000000000000000000071a2d3d576c8197acc1b49e8975604b35200b000020354a60758a9fb5bca7927d67524b59626b72787c7f807f7d7b766f675f4e493d2d2010000000000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f0014293e53697e8f8f8f8f8f8f8f8f8f8f8f8f8f8f99aabdac9b918f8f8f8f8f8f8f8f8f8f8f8f8f826d58422d1800000000000000000000000000091e32465761737474747472665e4c3828160300000000000000000004182a3a4d5f6773747474746c63523e2a150000000000172c41576c8196aca7927d67523d28120000000000000b21364b6075899fb4af9a846f5544311d080000162b40566b8095abb09b86705b46311b06000000000000000000000000000000000000000000000b20354b6074879db2a38f7a644f392917030000000000000004182a3a586d8297adc6c7ab96806b5544311d080000000000000000000000000000000000000000000b2035485a70859aafc5c2a9947f69543f2a1400000417293a576c8196acc5b49f8a75604b36210e0000000000000000000c21364a5b72879db2c9af9a846f5544311d08000020354a60758a9fb5bca7927d67523b484d565b6367696a6a68666158514d41352c1f1002000000000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f000d22374c62777a7a7a7a7a7a7a7a7a7a7a7a7a7b8fa4baa7917d7a7a7a7a7a7a7a7a7a7a7a7a7a78634d38230e0000000000000000000000000003162839464b5e5f5f5f5f5d514c402f1a0a00000000000000000000000c1c30414d525e5f5f5f5f57524535220f0000000000172c41576c8196aca7927d67523d2812000000000000091e3245566e8499aeb49e8975604b36200b0000162b40566b8095abb09b86705b46311b0600000000000000000000000000000000000000000005192b3b51667b90a5b19b86715c4a361b0b00000000000000000011273c51667c91a8b9c8b29d8874604b35201300000000000000000000000000000000000000000417293a4d62788b9fb4cab5a48d78634d38230e00000011263b50667b90a7b8baa9917c66513c2b190600000000000000031729394e63798ea5b6bcab937e695437271501000020354a60758a9fb5bca7927d67523d34373d494e5154555553514c463a3930211a0f0100000000000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f8a745f4a351f000b203448596265656565656565656565656565758a9fb5a28d7865656565656565656565656565635b4935210c00000000000000000000000000000b1b283236494a4a4a4a483c382f2212000000000000000000000000001323303a3d484a4a4a4a423e352717050000000000172c41576c8196aca7927d67523d28120000000000000316283854697f94a9b9a88f7a644f3a250f0000162b40566b8095abb09b86705b46311b060000000000000000000000000000000000000000000b203448596e8399aea8937e68533e2e1b000000000000000000000b21364b6075899eb4c9b7a6917c665141301c0c000000000000000000000000000000000000000c1f3346586b8095abbcc6b19c86715a4935200c0000000b20364b6075899eb3c7ae98836e5a48352010000000000000000a1e3346576b8096abc3b59f8c77624d37220d00000020354a60758a9fb5bca7927d67523d28222c35383c3f403f3d3b363329241d1206000000000000000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000013283d53687d92a8bdb49f89745f4a341f0005182b3b484c4f4f4f4f4f4f4f4f4f4f4f4f60758a9fb5a28d78634f4f4f4f4f4f4f4f4f4f4f4f4d493c2c19060000000000000000000000000000000b161e2133353535343226241d12040000000000000000000000000005131e252833353535352d2a221709000000000000172c41576c8196aca7927d67523d2812000000000000000f253a4f647a8fa9baa9947f6a543f2a150000162b40566b8095abb09b86705b46311b060000000000000000000000000000000000000000011426374d62788b9fb49e8976614b36211000000000000000000000091e3245566c8297acbfc4b09b85715f4d3a2a190900000000000000000000000000000000000c1c2d3e4c6176899eb3c9b9a8937e69533c2c1906000000081d3144556c8297acc0b49f8b78624d3e2e1c0c00000000000b1b2c3c4b6176899eb3c3af9a846f594834200b00000020354a60758a9fb5bca7927d67523d28121a2123272a2b2a2826211f170b0a0100000000000000000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d281200000000000014293e54697e93a9beb39e89735e49341e00000d1d2b34373a3a3a3a3a3a3a3a3a3a3a4a60758a9fb5a28d78634d3a3a3a3a3a3a3a3a3a3a3a38352c1e0e000000000000000000000000000000000003090c1e1f1f1f1f1d110f0900000000000000000000000000000000010a10121e1f1f1f1f17150f0500000000000000172c41576c8196aca7927d67523d2812000000000000000b20364b6075899fb4ad98836e583727150200162b40566b8095abb09b86705b46311b060000000000000000000000000000000000000000081d3144556a7f95aaac97826c5746331e0a00000000000000000000031628384e63798ea1b3c8b5a3917d6759473727190b0000000000000000000000000000000e1c2a3a4a5c6b8096a7b9c5b39e8976614b36210e00000000021527374e63798ea2b4bbaa97826d5c4b3a2a1c110b080b101b2939495a6a7f95a7b9b6a5917c66513b2b180500000020354a60758a9fb5bca7927d67523d2812060c0e1214151513110c0a0400000000000000000000000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d67523d2814080000000000152a40556a7f95aabfb29c87725d47321d0000000d18202225252525252525252525354a60758a9fb5a28d78634d38252525252525252525252321190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000000081d31445570859bb0b19c86715544311d0800162b40566b8095abb09b86705b46311b0600000000000000000000000000000000000000000b20354b6074879db2a38e7a644f3929170300000000000000000000000a21364a5b6f8399aabbc1b39e887761554437291b1006000000000000000000000008121e2b3a4759647a8c9fb4c5b8a695806b5746331e0a00000000000921364a5b6f849aabbcb49f8c7a6458473a2f23201c20232e39465763788a9fb4c0b29d8774604b35200d0000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000081d32475d72879cb2c7b5a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bca7927d6752423026180e06000008182e3f586d8398adc2b09b86705b46311b00000000050b0d10101010101010101020354a60758a9fb5a28d78634d38231010101010101010100e0c060000000000000002090b1c202020201f17150f050000000000000000000000000003090b1a2020202020200f0d08000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000002152737576d8297acb49f8a75604b36200b00162b40566b8095abb09b86705b46311b060000000000000000000000000000000000000005192b3b51667b90a5b09b86715c4a361b0b000000000000000000000000071a2d3d4e63798c9fb4c2b8a69a8473605546392e211a0f0b050002010000070b101b22303c48586177879daabbbfb39e8876614c392917030000000000071a2d3d4f647a8d9fb5bcab9d877661594c4038353035383f4b576175859ba9bab4a2917d675544311d080000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000081d32475d72879cb2b2b2a08b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bfaa957f6a604b43362c201916161a25364b5d72879db2c2ad97826d58422d180000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e00000000000000000000000000000000000a151d203135353535352c2a22170900000000000000000000000a161e212f35353535353525221b100200000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000000000000000014293f54697e94a9bbaa8e78634e39230e00162b40566b8095abb09b86705b46311b06000000000000000000000000000000000000000b203448596f8499aea8937d68533e2d1b00000000000000000000000000000f2136495b6c8196a4b6c5b4a298827361574b3e352c22201918171617131c20232e37414d5a6276859ba5b7c3b3a1927d685746331b0b000000000000000f22364a5c6d8298a6b7b7a59b8577665e534d4b434a4d525d6475849aa3b5b9a89a8572604a372614010000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000081d32475d72879c9d9d9d9d8b76604b36210b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5cab59f8d7e6a6054493c352c2c2c2c354354657a8fa5b6c0a8937d68533e28130000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e000000000000000000000000000000000a1a273136474a4a4a4a4a423e352717070000000000000000000a1a283236444a4a4a4a4a4a3a372e201000000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000000000000000010263b50657b90a5c8a6907b66513b261100162b40566b8095abb09b86705b46311b06000000000000000000000000000000000000011426374d62788b9fb49e8976614b3621100000000000000000000000000000061a2c3d4b6075869ca8bac0b2a0988375645c4e493d38352b2d2c2b2c253035393f4b4f5f6778859ba3b5c3b7a599836f604e3929170000000000000000071b2d3e4c6176879da9bab5a39b877b70686360546062686f7a869aa2b4bcab9e8a78635443301909000000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000051b30455a708488888888888774604b36200b00000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5c8bbab9f937f73635a4d493c41413d494e6072849ab0c3b4a28d78634e38230e0000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e00000000000000000000000000000002152738454b5c606060605f575245352515010000000000000003162838454b5a5f606060605f4f4b3e2e1b08000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000000000e23384e63788da3c6a8927d68533d281300162b40566b8095abb09b86705b46311b06000000000000000000000000000000000000081d3144556a8095aaac97816c5746321e0a0000000000000000000000000000000f1e324556647a8a9fabbbbeb2a199867a6d635b534d483c4241414236434a4e545d656f7c899ba3b5c1b9a89d8777624c42311b0b000000000000000000101f334658647b8b9faabab5a59d90857e78757475787d848f9ca4b4bcb49f8d7d675a4936251300000000000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000004182d41556670727272727272605645321d0900000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5bbaa9f9f9d9584786b635a585656585b636e8096a2b4c0b09a85705b4935210c0000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e000000000000000000000000000000091d314556607175757575746c635243321f0f000000000000000a1e324556606f757575757575645c4b37220d000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000000000c21364c61768ba8baaa947f6a553f2a1500162b40566b8095abb09b86705b46311b060000000000000000000000000000000000000b20354b6074879db2a38e79644e39291603000000000000000000000000000000031628384a5c667c8d9faababfb3a49c8d82796f68625a5a585756575854606369717a84919ea7b5c1b8a89e8a79635947342413000000000000000000000417293a4b5d677d8c9fa9b5b7b2a39b938d8a898a8d929aa2b1b6b7ab9f937f695f4d3c2c180800000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000012253748555a5d5d5d5d5d5d4b453828150200000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5b49f8c8a9fa29a8a8178716d6b6b6d717983969eb0c0b4a2917c67523d2c1a060000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e0000000000000000000000000000000b20364b6075868a8a8a8a8a816c614f3d2d1a0a00000000000a1a2e3f4b6074848a8a8a8a8a8d7a644f3a250f000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000000000a1e33465774899fb4ac96816c57412c1700162b40566b8095abb09b86705b46311b06000000000000000000000000000000000005192b3b51667c91a6b09b85715c4a361b0b00000000000000000000000000000000000a1a2d3e4c5e687e8c9fa9b6c2b6ab9f988c847d7873706d6c6b6c6d7074797e868f9aa2b3b8c1b4a79e8a7b655b4a3b2a180600000000000000000000000c1c2e3f4d5f677c8b9ca4b3b8b4b0a8aa9f9e9faaa7afb4b9b4a59d8d7e69614f41301e0e0000000000000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000081a2a3741454848484848483632281a0a0000000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5b29d877b8b9ea89f968d8783818182868d99a1b0bcb8a89a8472604a35200f000000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e000000000000000000000000000000091d31455664798b9f9faa9f947f695b4a38271502000000021628384b5d6c81979faa9fa496806b5c4b37220d000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000031729395d72879db2ad98836d58432e1800162b40566b8095abb09b86705b46311b0600000000000000000000000000000000000b203448596f8499aea8927d68533e2d1b00000000000000000000000000000000000000102030404e60687d8b9da5b4bcbcb5ab9f9a928d8885828180818385888e949ba3afb3c0bab4a39b897a655d4b3d2d1d0d00000000000000000000000000102030414d5e667986939ea7aeb4b9bbb4b3b4bbbab4afa89e95877b68604f43322313000000000000000020354a60758a9fb5bba7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a252d30333333333333201d150a000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb5af9a856f7b8a9ca4aba49c989696989ca4aeb3bfb4a79e8a78625443301c07000000000000000000000000000000000b20354a60758a9fb5a28d78634d38230e000000000000000000000000000000021527384a5c6a7f94a3b4b49f8b79635645311d10000000091e324556657b8d9fb4bbaa9c8674604b3e2e1b08000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000001c32475c71879cb1ae99836e59442e1900162b40566b8095abb09b86705b46311b0600000000000000000000000000000000011426374d62788b9fb39e8975614b3621100000000000000000000000000000000000000002122231414e5f677a87979fabb3bfbcb4afa8a69d9a97969697989b9ea7a9b0b5c1bbb4a99f948578645c4b3f2e1f0f000000000000000000000000000002122330404c5b63747e8892999ea8a6a7a8a8a6a99f9992898075655d4e4232251405000000000000000020354a60758a9fa6a6a6927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812181b1d1d1d1d1d1d0b090200000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9fb4ac97826d657a86959fa9b1adababadb1b6bbb4afa29a897a645a4836251300000000000000000000000000000000000b20354a60758a9fa8a28d78634d38230e000000000000000000000000000000000a1a2d3d4b6073859ba9baa99b8674604b3e2e1b0a0009192d3e4b6074879cabbcb49f8c7a64564532201000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000061c31465b71869bb0ae99846f59442f1a00162b40566b8095abb09b86705b46311b0600000000000000000000000000000000081d3144556a8095aaac97816c5746321e09000000000000000000000000000000000000000004132331414d5c6476818c9aa1adb4b9c6c4b7b2afadacabacadb0b3b8c5c4b7b3aa9f988a7f7462594a3e2e2111010000000000000000000000000000000512222f3d4a566069757d83898d91929392918e89847d766a61574b3f3124140700000000000000000020354a60758a90909090907d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c170020354a60758a9f9f9f947f6a5c6475808a959ca5a6a9aaaaa8aa9f9a918479645c4a3c2b180800000000000000000000000000000000000b20354a60758a9292928d78634d38230e00000000000000000000000000000000000f1d31445563798a9fb4b5a395806b5c4b392816031426374a5c6b8095a5b6b5a495806b5c4a3828150200000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000061b30455b70859ab0af9a856f5a45301a00162b40566b8095abb09b86705b46311b06000000000000000000000000000000000b20354b6074879db2a38e79644e39281603000000000000000000000000000000000000000000051323303e4a58616c7a848e989ea8acb1b4bcc9bcbdbebdbcc7bab4b0aba69d968b82786a6055483b2d201103000000000000000000000000000000000004121f2d38454b5660676e75787b7d7e7d7c79756f6861574b46392e2114060000000000000000000011263b51667c7b7b7b7b7b77624d37220d00000000000000000000000000000000000000000000000000000000000000060c0e1415120c0a03000000000000000000040b0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b09030000000012273c52677c91a7bcb49f8a745f4a351f0a0000000000051a30455a6f859aafc1ac96816c57412c17001f354a5f748b8a8a898577624c57606b7780878d9194959492908a847c70635b4a3e2d1e0e0000000000000000000000000000000000000013283d53687e7d7d7d7d75614c36210c000000000000000000000000000000000001142637495b697e93a2b4b49f8c7a645745321e111d314455647a8c9fb4bbaa9c8674604b3e2d1a0a0000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000051a30455a6f859aafaf9a85705a45301b00162b40566b8095abb09b86705b46311b0600000000000000000000000000000005192b3c51667c91a6b09b85705c4a361b0b00000000000000000000000000000000000000000000000512202d3a464c5c646f7a828991979c9faba5a7a8a8a8a7a5a99f9b96908881786d625a4b44372b1d100200000000000000000000000000000000000000010f1a273138454b525560636668696866636056534b463932291b110300000000000000000000000f24384c5e66666666666662594834200b0000000000000000000000000000000000000000000000000000000000000e192023292b28211e160b000000000000000c181f22232323232323232323232323232323232323232323232323232323211e160a00000012273c52677c91a7b4b49f8a745f4a351f0a0000000000051a30455a6f859aafb4ac96816c57412c17001d32475b6d7474747471625948454b59626a72787c7e807f7d7b766f675f4e493d2d2010000000000000000000000000000000000000000011263a4e606868686868615746331e0a00000000000000000000000000000000000009192c3d4a6072849aa8b9aa9c8675604b3f2f1b2c3c4b6073859baabbb49f8c7a645645312010000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000061b30465b70859bb0af9a846f5a452f1a00162b40566b8095abb09b86705b46311b060000000000000000000000000000000b2034485a6f8499aea7927d68533d2d1a0000000000000000000000000000000000000000000000000002101b29333e4a4f5c646d757c81868a8d909293939291908d8a85807b746b625a4d483c3127190d00000000000000000000000000000000000000000000000a151d28323637444b4e51525353514e4b45383632291e160b00000000000000000000000000091d2f404c5151515151514d483b2b18050000000000000000000000000000000000000000000000000000000007151e2c35383e403d3632291b1103000000000c1d2a34373838383838383838383838383838383838383838383838383838383632281a0a000012273c52677c919f9f9f9f8a745f4a351f0a0000000000051a30455a6f859a9f9f9f96816c57412c1700182c3e4f5b5f5f5f5f5b4c483b323b484c555a6367696a6a68666158514d41352c1f100200000000000000000000000000000000000000000b1e31424e53535353534c4639291703000000000000000000000000000000000000000e1c3043546278899eb3b6a496816c5d4b3a2935495a697f94a3b5b5a495806a5c4a38271502000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000071c31465c71869bb1ae99846e59442f1900162b40566b8095abb09b86705b46311b060000000000000000000000000000011426374d62788b9fb39e8975604b36210f0000000000000000000000000000000000000000000000000000000b171f2d363e4a4f5660676c7175787b7c7d7e7d7c7b7875706b6560554d483c352b1d150900000000000000000000000000000000000000000000000000020a151d20273135383c3d3e3d3c39363127211e160b0300000000000000000000000000000012222f383b3b3b3b3b3b37342b1d0d00000000000000000000000000000000000000000000000000000000041525323c494d5455524b46392e211100000004182a3b474c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b45382816030012273c51677d8b8a8a8a8a89745e49341f090000000000051a2f445a6f838a8a8a8a8a816c56412c17000f21313e474a4a4a4a4637342b1e2a34373c494d5154555553514c463a3930211a0f01000000000000000000000000000000000000000000021324313a3d3d3d3d3d3633291b0b000000000000000000000000000000000000000000132536485a687d92a1b3b59f8d7b65584633424d63788a9fb4bbaa9c8674604b3e2d1a0a00000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000011426365c71879cb1ae98836e59432e1900162b40566b8095abb09b86705b46311b060000000000000000000000000000081d3144556a8095aaac96816c5745321e090000000000000000000000000000000000000000000000000000000004101b222d3638454b51575660636667686968676562605556504b4437352b20190e020000000000000000000000000000000000000000000000000000000002090b151d2023262829282724201d150c0a03000000000000000000000000000000000004121d242626262626262220180d0000000000000000000000000000000000000000000000000000000000122232434f5a63696a6761574b3f2e1e0e00000b1f34475961626262626262626262626262626262626262626262626262626262605645321e09001024394d5f677474747474746b5a46311c08000000000003182c4154656f74747474746c62513e2914000313212c3235353534312220180d181f222c35383c3f403f3d3b363329241d120600000000000000000000000000000000000000000000000006131e262828282828211e170b0000000000000000000000000000000000000000000008182b3c4e606e8399a7b8ab9d8776614c404e606f849aa9bab49f8b7a6455443120100000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000081c30435473889db2ad97826d58422d1800162b40566b8095abb09b86705b46311b0600000000000000000000000000000b20354b6074879db2a38e79634e3928160300000000000000000000000000000000000000000000000000000000000007101b222832363c38454b4e505253535352504d4b44373b35312620190e0500000000000000000000000000000000000000000000000000000000000000000001080b0e11131413110e0b090200000000000000000000000000000000000000000000090f1111111111110d0b050000000000000000000000000000000000000000000000000000000000091d30404f6169787e807d75655d4b3c2b1906000c22374c617778787878787878787878787878787878787878787878787878787875604b36210b000a1d30414d515f5f5f5f5f5e5a4d3d2a170300000000000011253747545a5f5f5f5f5f56514434220e0000030f181d1f1f1f1f1c0d0b0500050b0e19202327292b2a2826211f170b0a010000000000000000000000000000000000000000000000000000020b1113131313130c0a030000000000000000000000000000000000000000000000000e1e31414c6277899eb3b7a597826d5e4c59687d92a2b4b5a3957f6a5c4a372715020000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000000000b20354b60758a9fb4ab96806b56412b1600162b40566b8095abb09b86705b46311b060000000000000000000000000005192b3c51667c91a6b09b85705b4a361b0a000000000000000000000000000000000000000000000000000000000000000000070a161e2127283236383b3d3e3e3d3c3b3835312626201d14090600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394c5e697f8b939592877b655a4835200b00192f44596e838d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7c66503b26110001122330393c4a4a4a4a4a49463d2f1f0d000000000000000719293741444a4a4a4a4a413e342616050000000004080a0a0a0a0600000000000000060c0e1214151513110c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f344759677c91a0b2b1a0917c66586277899eb3baa99b8573604b3e2d1909000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000000000d22374c62778caabba9947e69543f291400162b40566b8095abb09b86705b46311b06000000000000000000000000000b2034485a6f8499aea7927d68523d2d1a00000000000000000000000000000000000000000000000000000000000000000000000003090b12151d20232627282928272623201d14100b0801000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f181a1a1a13110b01000000000000000000060c0e1415120c0a03000000000000000000060c0e1415120c0a0300000000000000000000060c0e1415120c0a030000000000000215283851667c919fa9aaa59d8a78624d38230d00192f44596e8499a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2907b66503b2611000005121d2427353535353534312a1f110100000000000000000b19252c2f35353535352c2922160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c1014181b1c1d1e1e1d1b1a15110c0a04000000000000000000000000000000000000000000000005182a3b4d5f6d8298a6b7b39e8877616e8398a7b8b49f8b7963554431200f00000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000000000f24394e64798ea3c8a7927c67523d271200162b40566b8095abb09b86705b46311b06000000000000000000000000011426374d62788b9fb39e8975604b36210f0000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e111213141312100d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b22242e2f2f2f28251e1305000000000000000e192023292b28211e160b000000000000000e192023292b28211e160b00000000000000000e192023292b28211e160b0000000000091d32455671869cb1bac3b7a896816c56412c1700192f44596e8499a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2907b66503b2611000000010a10121f1f1f1f1f1f1c170d01000000000000000000000711181a1f1f1f1f1f17140e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b161e2125292d303233343332302f2b26211f170c08010000000000000000000000000000000000000000000d1d30414c6176889db2b8a698826e7c91a0b2b5a3947f6a5b4a3727150100000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000000000000000012273c51677c91a6c5a5907a65503b251000162b40566b8095abb09b86705b46311b06000000000000000000000000081d3144556a8095aaac96816c5645321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311202e373a434444443d3a312313010000000007151e2c35383e403d3632291b110300000007151e2c35383e403d3632291b11030000000007151e2c35383e403d3632291b11030000000b20364b60758ba4b6c9d4c6b09b85705b46301b00192f44596e838d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7b66503b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202832363b3f434647484949474644403b363329201d1509000000000000000000000000000000000000000000121f334758667c909fb1b2a08f7a889db2baa99b8573604b3d2d19090000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000000152b40556a8095aab9a78c77624d37220d00162b40566b8095abb09b86705b46311b060000000000000000000000000b20354b6074879db2a28e79634e3828160300000000000000000000000000000000000000000000060c0e100b09030000000000060c0e100b090300000000000000000000010a10120c0a03000000000000000000000000000000060c0e100b090300000000000000000000000000000211212f3e4b4f585a5a5a524e41311e0b000000041525323c494d5455524b46392e21110000041525323c494d5455524b46392e2111000000041525323c494d5455524b46392e21110000000b20354b60738a9fb4c8d1c3af9a85705a45301b000d22374c627778787878787878787878787878787878787878787878787878787875604b36210b00000000000000000000000000000000000000040d131520202020202012100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121826303539464b5054585b5c5d5e5e5c5b5955504c463a353127191306000000000000000000000000000000000000000417293a4c5e6c8197a5b6b39e889da6b7b49f8b79635544311f0f000000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000004172a3a596e8398aeb39e8974594834200b00162b40566b8095abb09b86705b46311b06000000000000000000000005192b3c51667c91a6b09a85705b4a361a0a000000000000000000000000000000000000000000000e19202325211e160a0000000e19202325211e160a000000000000000005131e2527211e170b000000000000000000000000000e19202325211e160a0000000000000000000000000010202f3f4c5c646d6f6f6f68604e3a2511000000122232434f5a63696a6761574b3f2e1e0e00122232434f5a63696a6761574b3f2e1e0e0000122232434f5a63696a6761574b3f2e1e0e0000081d31445570859aaab8c1b4a5947f6a553f2a15000b1f34485962636363636363636363636363636363636363636363636363636363605745321e09000000000000000000000000000000000000071521282b35353535353527251e130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2f36434b51576165696d707172737372706f6a666158514b44373120190e000000000000000000000000000000000000000c1c2f404b6175879dabb8a79ea7b7b4a3947f6a5b4937271501000000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000000000000000a1f33475871879cb1b09a85705b3b2b180500162b40566b8095abb09b86705b46311b0600000000000000000000000b2034485a6f8499aea7927d67523d2d1a00000000000000000000000000000000000000000004121e2c35383a3632281b0a04121e2c35383a3632281b0a00000000000007142330393d3633291b0c0000000000000000000004121e2c35383a3632281b0a00000000000000000000000e1e2d3e4c5d657a828484847d68523d28130000091d30404f6169787e807d75655d4b3c2b19091d30404f6169787e807d75655d4b3c2b1906091d30404f6169787e807d75655d4b3c2b190600011527374e647a8c9ea6a7a39b8776614c36210c0005182a3b484c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b45392816030000000000000000000000000000000000041525333c404a4a4a4a4a4a3c39302313010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192731404c5460666e767b7e828587888988878584807b766f6760554e41352b1e1002000000000000000000000000000000000000111e324657657b8c9fb4b8b3b8bcab9b8573604b3d2c190900000000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000000000000000c21374c61768b9fb5ac97826c57422d170000162b40566b8095abb09b86705b46311b0600000000000000000000011426374d62788b9fb39e8975604b36210f0000000000000000000000000000000000000000001222303c494d504b453928191222303c494d504b45392819090000000003142532414d524c46392a1c0c0000000000000000001222303c494d504b45392819090000000000000000000d1d2c3c4a5c657b8b9899998877614c37210c00000f24394c5e697f8b939592877b655a4835200f24394c5e697f8b939592877b655a4835200b0f24394c5e697f8b939592877b655a4835200b00000922364a5c677d8890918e8578625846331f0a00000d1d2a34373838383838383838383838383838383838383838383838383838383632281b0a0000000000000000000000000000000000000d2133435055606060606060524d41301e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182737444b5e66737c83899094989b9c9d9e9e9c9b9995908b847c74685f4d493c2e201001000000000000000000000000000000000004182a3a4c5e70859aafc5c8c9b59f8b78635544311f0f0000000000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000011263c51667b91abbca7927d68523d28130000162b40566b8095abb09b86705b46311b0600000000000000000000081d3144556a8095abab96816c5645321e090000000000000000000000000000000000000000091d30404d5a636560574537271d30404d5a6365605745372715020000000c2032434f5f676157473a2a1a0a00000000000000091d30404d5a636560574537271502000000000000000b1b2a3b495b647a8a9ea9a2927d685847331f0a000215283851667c919fa9aaa59d8a78624d382315283851667c919fa9aaa59d8a78624d38230d15283851667c919fa9aaa59d8a78624d38230d0000071b2d3e4d5f67757b7c7970625a493a2917040000000d181f22232323232323232323232323232323232323232323232323232323211e160a0000000000000000000000000000000000000013283c50616a757575757575675f4d3925100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364455606c7b8691989fa8a9adb0b0afaeaeafb0aeaaab9f9a91887d6f625a4b3e2e1f0f00000000000000000000000000000000000e1f344759667c91a2b4b8b3b4baab947e695b4a3828150200000000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000005182b3b566b8096abb7a68d78624d38230d0000162b40566b8095abb09b86705b46311b06000000000000000000000b20354b6074889db2a28e79634e3828160200000000000000000000000000000000000000000f24394d5e66787a756055443124394d5e66787a75605544311d0800000012273b4f61697c76615847382816020000000000000f24394d5e66787a75605544311d080000000000000a1a293948596379889ea8aa9a8472604a3a2a170400091d32455671869cb1bac3b7a896816c56412c1d32455671869cb1bac3b7a896816c56412c171d32455671869cb1bac3b7a896816c56412c17000000102030404d56606567645c4d493c2c1c0c0000000000050b0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b09030000000000000000000000000000000000000000152b40556a808a8a8a8a8a8a7d67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354607381909ca4aeb4afa7a79e9b9a99999a9b9ea7a7aeafa69d928478645c4b3d2d1b0b0000000000000000000000000000000e1e31414c6177889eb3b8a79e9fa8b49f8b79635645321d1100000000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000b2034485971869bb0b29d88735a4935200c0000162b40566b8095abb09b86705b46311b0600000000000000000005192b3c51667c91a6b09a85705b49361a0a00000000000000000000000000000000000000000011273c51667c8c8f8674604b36273c51667c8c8f8674604b36200b00000014293f54697f928576615645321e1300000000000011273c51667c8c8f8674604b36200b00000000000818283846576277879da6b49f8b79635443301c0c00000b20364b60758ba4b6c9d4c6b09b85705b463020364b60758ba4b6c9d4c6b09b85705b46301b20364b60758ba4b6c9d4c6b09b85705b46301b0000000212223038454b50524e4a3e352c1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a80959f9f9f9f917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4a607283969fb1b5b1a19a928c89868483838486898c92999fabb3a29a897a645b4a392816030000000000000000000000000008182b3c4e5f6e8399a6b8b39e888a9fb4a99c8674604b3f2f1c0c000000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000000000d22374d62778b9fb5ad98826d583c2c19060000162b40566b8095abb09b86705b46311b060000000000000000000b2035485a6f8499aea7927d67523d2c1a00000000000000000000000000000000000000000004172a3a5b70859ba4907b66513b2a3a5b70859ba4907b66513b26110000061c31465b71869b9b8474604b41301c0c0000000004172a3a5b70859ba4907b66513b2611000000000114263645566175859ba5b6a595806b5b4a3625130000000b20354b60738a9fb4c8d1c3af9a85705a453020354b60758a9fb4c8d1c3af9a85705a45301b20354b60758a9fb4c8d1c3af9a85705a45301b0000000004121a2832363b3c39362d20190e0000000000000000000000000000000000000000000000000000000000000000000610161920202020201a1711070000000000000000000000000000152b40556a8095aab5b5a7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3447596a7f94a1b0b5a49c8e847d7773706f6e6e6f7073777d848d9aa2b1a79e8979635746321e0b00000000000000000000000001142636485a687d92a1b3b3a1927d8297a8b5a496816b5d4c3a2a17040000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000000000005182b3b53687e93abbaa9917c67523c2712000000162b40566b8095abb09b86705b46311b060000000000000000011426374d62788b9fb39e8875604b36200f0000000000000000000000000000000000000000000a1f33475874899faa947f6a553f33475874899faa947f6a553f2a1500000010253a50657b8b9f98826d5f4d3a2917040000000a1f33475874899faa947f6a553f2a15000000000c1c3043546074849aa3b5b29d8775604b3d2d1808000000081d31445570859aaab8c1b4a5947f6a553f2a1d31445570859aaab8c1b4a5947f6a553f2a151d31445570859aaab8c1b4a5947f6a553f2a150000000000000a161e21262724221b10060000000000000000000000000000000000000000000000000000000000000000000a18232b2e35353535352f2c24190b00000000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778a9fb4b5a49c867a6f6862595b5a59595a5b5962686f798497a0b1a79c8775614b3929170300000000000000000000000a1c3043546278899eb3b9a799836e788a9fb4b59f8d7b655847331f130000000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000b203448596f8499afb49f8a76614b36210c000000162b40566b8095abb09b86705b46311b060000000000000000081d3144556a8095aba996816b5645321d090000000000000000000000000000000000000000000c21374c61768ca9ac97816c5742374c61768ca9ac97816c57422c170200000e23374b5d687d92a0927d675846331f0c0000000c21374c61768ca9ac97816c57422c170200000c1c33434b60728298a2b4b2a1907c665745321f0f00000000011527374e647a8c9ea6a7a39b8776614c36211527374e647a8c9ea6a7a39b8776614c36210c1527374e647a8c9ea6a7a39b8776614c36210c0000000000000002090b10120f0d07000000000000000000000000000000000000000000000000000000000000000000000618283640434a4a4a4a4a444037291907000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9bab19c8675645c524d483b454444453b484d525b63738297a3b5a595806b5746331e0a000000000000000000000a1a2d3d4b6073849aa8b9b39e897762697e93a2b4ab9d8876614c41311e0e00000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000000d22374c62778b9fb4ae99836e5746321e0a000000162b40566b8095abb09b86705b46311b0600000000000000000b20354b6074889da79e8b78624d382815020000000000000000000000000000000000000000000e24394e63798ea3ae99846e5944394e63798ea3ae99846e59442f19000000081c2e3f4e606d82979e8876614c3a2a170400000e24394e63798ea3ae99846e59442f1900000417293a50616c8197a0a9a9a599836e5e4c3928160100000000000922364a5c677d8890918e8578625846331f0922364a5c677d8890918e8578625846331f0a0922364a5c677d8890918e8578625846331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001023364653586060606060595447372411000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adb6a58e7a64574a3e37342b2f2e2e2f2b34373d4a556074859bb1b49e8976614c36210c000000000000000000021527384a5b697f94a2b4b3a2927d68596072849aa8b7a698836e5f4e3c2b1909000000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000000081c2e3f54697f94aab8a7917c675239291603000000162b40566b8095abb09b86705b46311b06000000000000000011263c51667b90908f897c665948341a0a0000000000000000000000000000000000000000000010263b50657b90a5b09b86715b363b50657b90a5b09b86715b36251300000000112131414c6176899e96816b5847331f0a000010263b50657b90a5b09b86715b36251300000a1f3346586a7f9393939393918777614c402f1b0a000000000000071b2d3e4d5f67757b7c7970625a493a2917071b2d3e4d5f67757b7c7970625a493a291704071b2d3e4d5f67757b7c7970625a493a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002162b4053646e75757575756f6554402c17030000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30465b70859bb0b29c87725c4a392d2220181a19191a1820222d374455677c92a7b9a8927d67523d28120000000000000000000b1d31455663798b9fb4b9a89a846f604e546278899eb3b2a0927d685a49372614010000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000000000e23374b5d71869cb1b39e8975604b36210b00000000162b40566b8095abb09b86705b46311b0600000000000000000e23394e63797b7b7a75665e4c3b2b19000000000000000000000000000000000000000000000013283d52687d92a7b39d887354433d52687d92a7b39d88735443301c0700000003131f334658697f949e8a76614c37210c000013283d52687d92a7b39d88735443301c07000c21364c61767e7e7e7e7e7e7c766159473422120000000000000000102030404d56606567645c4d493c2c1c0c00102030404d56606567645c4d493c2c1c0c0000102030404d56606567645c4d493c2c1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e828a8a8a8a8a836f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afb09a85705b3f2e1c10101213151617191b182027374d63788da2c6ac97816c57422c1702000000000000000b1b2e3f4b6074859ba9bab49e8a78624d42485a687d92a1b3b49e8a78625544311d100000000000000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000000061a2c3d50657a8fa4b6ab96806b5645321e0900000000162b40566b8095abb09b86705b46311b0601000000000000000c21364a5b6366666561574c402f1d0d0000000000000000000000000000000000000000000000152a3f546a7f94a9b49f8a75604a3f546a7f94a9b49f8a74604a35200b00000011212f3f4b5061768a9f947e69543928160300152a3f546a7f94a9b49f8a74604a35200b000a1f33465861696969696969676157473b2a180400000000000000000212223038454b50524e4a3e352c1e0e00000212223038454b50524e4a3e352c1e0e0000000212223038454b50524e4a3e352c1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e83989f9f9f99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abb29d87725d4b3a2b232527292a2b2c2e302b3437404d62788da2b7af99846f5a442f1a05000000000000031628394b5d6b8095a3b5b4a2937e695a48353c4e606f8399a7b8a89b8573604b3e2e1b0b00000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000000c2135495b6f8499aeb49f8c78624d3828160300000000162b40566b8095abb09b86705b46311b1a160b090200000000071a2d3d4a4e51514f4b46392f2212000000000000000000000000000000000000000000000000152a3f556a7f94aabcab8a75604b3f556a7f94aabcab8a75604b35200b0000091c2f3f4c5d657074849a9b85705746321e0900152a3f556a7f94aabcab8a75604b35200b000417293a464c545454545454524c46392a1d0c0000000000000000000004121a2832363b3c39362d20190e0000000004121a2832363b3c39362d20190e000000000004121a2832363b3c39362d20190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e8398adb5ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63798c9fb4a58f7a6558483c383a3c3e3f404243453b484c525e697e93a8beaf9a846f5a452f1a050000000000000c1e324657647a8c9fb4baa99a8472604a3c2b31424c6277899eb3b4a2957f6a5c4a39281603000000000000000000000000000000000000000000172c41576c8196aca7927d67523d28120000061a2c3d4e63798c9fb5ae99836e5a48351a0a0000000000162b40566b8095abb09b86705b4631302f2c211e160a000000000f1f2d36393b3b3a3632281b1204000000000000000000000000000000000000000000000000152a3f556a7f94aab5a08a75604b3f556a7f94aab5a08a75604b35200b00000e23384c5d657b858a9aa19f8b76614b36210c00152a3f556a7f94aab5a08a75604b35200b00000c1c2933363e3e3e3e3e3e3c3633291b0c000000000000000000000000000a161e21262724221b1006000000000000000a161e21262724221b100600000000000000000a161e21262724221b10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b6c8196a0b19c8676625a4c4d4f5153545657585a5c5962676f7c8a9eb3c6ad98826d58432d180300000000000c1c2f404b6175879caabbb49f8a78635443301e20344859677d91a0b2b49f8c7a645746321e12000000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200000c2135495b6d8297abb3a18f7a644f3c2b19000000000000162b40566b8095abb09b86705b46454545413632281a0a000000010f1a2123262625211e160b0000000000000000000000000000000000000000000000000000152a3f556a7f94aab5a08a75604b3f556a7f94aab5a08a75604b35200b0005192b3c50657b8c9a9fa9b3ab8f7a644f3a250f00152a3f556a7f94aab5a08a75604b35200b0000000c171f2129292929292927211e170b00000000000000000000000000000002090b10120f0d070000000000000000000002090b10120f0d07000000000000000000000002090b10120f0d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4b607382949fa49c86786961636567686a6b6c6e707174777c84909ea8b9b9a8937e69533e2914000000000004172a3a4c5e6c8197a5b6b4a3947f695a49362513182b3b4d5f6e8298a6b8aa9c8675614b402f1d0d0000000000000000000000000000000000000000172c41576c8196aca7927d67523d281200071b2e3e4e63798c9fb4af99846f5c4b371e0e000000000000162b40566b8095abb09b86705b5a5a5a5a564b453828160200000000070c0e1111100c0903000000000000000000000000000000000000000000000000000000152a3f556a7f94aab5a08a75604b3f556a7f94aab5a08a75604b35200b000b2035485a72869caab4bac7a6917c67513c271200152a3f556a7f94aab5a08a75604b35200b00000000040a0c141414141414120c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1d31445560727f8a979f9c897f76787a7c7e7f8081838587898c9299a1b3b9bbb49e8a77614c37220c00000000000a1f334758667c909fb1baa99b8573604b3c2c18080d1d30414c6176889db3b6a497816c5e4c3b2a180500000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000d22374b5c6e8399aab3a18e7a644f3e2e1b00000000000000162b40566b8095abb09b85706f6f6f6f6f6b605645321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aab5a08a75604b3f556a7f94aab5a08a75604b35200b000d22384d62778da4b6c8cdc7a7927d67523d281200152a3f556a7f94aab5a08a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1415120b08020000000000000000000000000000000000000000000000000000000000000000060c0e111416161615120f0b08020000000000000000000000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c27120a0a0a0909070401000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374454606a78818a9f9e948b8d8f9193949597989a9c9ea7a7aeb3bfb4aa9f927d685947341f0a000000000a1d30414c6176889db3b4b49f8b79635443301e0e0000131f334758667c919fb4b49f917c665948341f0b00000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000f243a4f647a8fa1b3aa99836e5c4a36201000000000000000162b40566b8095abb39e8a8485858585848076604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aab5a08a75604b3f556a7f94aab5a08a75604b35200b000e24394e63798eaabbcecdbaa9907b66503b261100152a3f556a7f94aab5a08a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21242a2b27201d150900000000000000000000000000000000000000000000000000000000080e1019212327292b2c2b2a2824201d150b09020000000000000000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c271f1f1f1f1f1e1c1a16120d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000009192736445560737e899eb3a9a1a2a4a6a8a9abacadafb1b3b9b8b3afaaa29a8c7f695f4e3a2a1804000000001025394d5f6e83989f9f9f9e947f6a5b4936261400000004172a3a4c5e6d82979f9f9f9e8877624c37220d00000000000000000000000000000000000000172c41576c8196aca7927d67523d281200182d42576d8297acb49f8b79634e3e2d1b0200000000000000162b40566b8095abb9a89e9a9a9a9a9a9a937e69533e291400000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aab5a08a75604b3f556a7f94aab5a08a75604b35200b000c21364b61768a9fb4bcbcb49f8a76614c36210c00152a3f556a7f94aab5a08a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2d36393f403c363127190f0100000000000000000000000000000000000000000000000008111c23252c35383c3f4041403f3d3a363127201d150a02000000000000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c35353535343433312f2c282220190d0a04000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607382939ea7b9bec6b9b4b1afadacabaaa9a8a5a3a69e9a958e857a69614f41311c0c000000000012273c52677c8b8a8a8a8a898273604b3d2c1808000000000c1c2f404b607484898a8a8a8b836e59442e1904000000000000000000000000000000000000172c41576c8196aca7927d67523d281200162b41566b80959fa696806b5b493520100000000000000000162b40566b8095a8a8a8a8a8a8a8a8a8a895806b56402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aab2a08a75604b3f556a7f94aab2a08a75604b35200b000a1e3346576c81969fabab9f95806b5846331f0a00152a3f556a7f94aab2a08a75604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091926313d4a4e5455514b44372c1f0f0000000000000000000000000000000000000000000003111c232e373a3c494d515455565655524f4b44373631271d15090000000000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67524a4a4a4a4a4a49484744413d37342b221f180c04000000000000000000000000000000000000000000000000000000000000000000000013283e53687e93a0b3b9b7b2a9a89e9c9a989796959492908d8b88847f7970645c4f433223130000000000001025394d5f677474747474746d605544311f0f000000000000121e324556606f74747474746e6453402c1702000000000000000000000000000000000000172c41576c8196aca7927d67523d2812000b20354b6073808b9a8775614b3d2c1a020000000000000000162b40566b80939393939393939393939393806b56402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f949d9d9d8a75604b3f556a7f949d9d9d8a75604b35200b00031729394b6074828c91918c8173604b3a29170400152a3f556a7f949d9d9d8a75604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b5c64696a676055493d2c1b0b00000000000000000000000000000000000000000b171e2f383f4b50575b6366696b6b6b6a67646055524b45383127191002000000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c675f5f5f5f5f5f5f5e5e5c5956524d483b37342a1f170c000000000000000000000000000000000000000000000000000000000000000000011426365c71869bb1beb6a69d948e8986848382817f7e7d7b7876736f6a645c4f4b3e322514050000000000000a1d30414d525f5f5f5f5f5f584b443726140100000000000003162838454b5a5f5f5f5f5f59534636241100000000000000000000000000000000000000172c41576c8196a8a7927d67523d281200081d314455606b79857d675746321f0f0000000000000000000f253a4f647a7e7e7e7e7e7e7e7e7e7e7e7e7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e878888888773604b3e53697e878888888773604b35200b00000b1d324556606d787c7c786c605544311b0b000014293e53697e878888888773604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606c797f807c74635b49392917030000000000000000000000000000000000000d1b29333f4c505d656d73787c7e8081807f7d79756f6760564b44372d2013050000000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917d74747474747474747473716f6b676259544c473a332a1c120400000000000000000000000000000000000000000000000000000000000000081c30435474899eb4b6a49c887f7874716f6e6c6b6a6968666360565a554e4a3d372e2014070000000000000001132330393c4a4a4a4a4a4943353126190900000000000000000a1a283236444a4a4a4a4a44403628180700000000000000000000000000000000000000172c41576c81939393927d67523d28120001152737444b5b6370675f4d392816010000000000000000000d22374b5c64696969696969696969696969645c4b37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000012263b4f606972727272726055443b4f60697272727272605544311d08000002152838454b5a626767625a4b4437261400000012263b4f60697272727272605544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384b6073818c9495918579635746331e0a00000000000000000000000000000000000d1d2b39464b5d65717a82888d919495969594928f8a847d746860554a3e3023150700000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfc9b49f8b8a8a8a8a8a8a8a8989888684817d77716961594c473a302215070000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4b19c867669635b5c5a585756555453504e4b45384039362d221b100200000000000000000005131d25273535353535342e201d1409000000000000000000000a161e212f34353535352e2c24180a000000000000000000000000000000000000000010253a50657b7e7e7e7e78634e38230e0000091927313d494e5a524d41301b0b00000000000000000000081b2e3e4b4f5353535353535353535353534f4b3e2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f535d5d5d5d5d4b443732424f535d5d5d5d5d4b44372614010000000a1a28323c494d51514d483c312619090000000c1f32424f535d5d5d5d5d4b443726140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556697f949fabaaa39b8775614b36210c000000000000000000000000000000000b1b2b3b4857616d7b858f979ea6a6a9aaababaaa7a99f9992877e74645c4d4133251506000000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfcebbaa9f9f9f9f9f9f9f9f9f9e9d9c9996928c867f776c61584d40332616080000000000000000000000000000000000000000000000000000000000081c30435471869bb1aa947f6a584e493d45434241403f3d3b383632282a24211a0f07000000000000000000000000010a10121f1f1f1f1f1f180b080100000000000000000000000003090b1a1f1f1f1f1f191711070000000000000000000000000000000000000000000e23374b5d6569696969635b4935210c00000009151d2c3539453c3930231200000000000000000000000010202e373a3e3e3e3e3e3e3e3e3e3e3e3e3a372e20100000000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e484848484835312624323b3e4848484848353126190900000000000a151d2b35383c3c38352b1d140900000000021424323b3e4848484848353126190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075899eb4bcc1b5a6937e69533e2914000000000000000000000000000000031729394859627582909ba3acb3b8b4b2b0aeb0b2b4bab4afa59d93877a675f5043332413010000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfd8c8bbb4b4b4b4b4b4b4b4b4b3b3b1aeaba7a49c948a8176665e504434261606000000000000000000000000000000000000000000000000000000000114263653687e93a2ac96816c5b4e525556575654524d493c38352c1f170f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b50535353534e493d2c1a0600000000010f1a21233027251d120500000000000000000000000002101b222529292929292929292929292925221b100200000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f26293333333333201d14141f26293333333333201d140900000000000000020e19202327272220190e0100000000000006141f26293333333333201d14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea8b9cdd2c4ad98826d58432d180300000000000000000000000000000b1e33465762778698a0b0b5b4b0ab9f9c9b999a9c9faaaeb5b7b2a59c8a7d6a615042311f0f0000000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfcfbfb2aeaaaaaaaaaaaaaaaaabadafb4bac2b5b1a99f96887c6b62514434241300000000000000000000000000000000000000000000000000000000000b20354b6073849aa49e8a796563676a6b6c6b6a67635a564d493c33291b10020000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0e0e0e0e0e0d0b06000000000000000000000000000000000000000000000000000011212e373a3e3e3e3e38352c1f0e00000000000000060c0e1b12100a01000000000000000000000000000000080d0f1414141414141414141414140f0d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c12141d1d1d1d1d0b0801020c12141d1d1d1d1d0b080100000000000000000000060b0d12120d0b05000000000000000000020c12141d1d1d1d1d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788da6b7cbd0c1ac97826d57422d1802000000000000000000000000000b1b32424b6175869ca4b2b8b3a29a928b87858485878a91999fabb4b6a99f927f6a604e3d2d180800000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfc6b2a098959595959595959596989a9fa9adb4bbbab4a69e91806b625142311e0e00000000000000000000000000000000000000000000000000000000081d31445561768699a19d887a787c7f8182807f7d78736c625a4c463a2d2010010000000000000000000000000000000000000000000000000000000000000000000000000d181f2224242424242320190e0000000000000000000000000000000000000000000000000003111c23252929292923211a0e00000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073879db2b9bfb3a3917c67523c271200000000000000000000000000031628394f606e8398a4b5b6a69e90857c7772706f7072767c838d9ba3b1bab49d927e685b4a36251300000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfc3ae98828080808080808080818285898f989faab3bfb8b39e95806b604e3c2b190600000000000000000000000000000000000000000000000000000001142637475861768299a49d8f8d929496979694928d8881786d61584a3e2d1f0f00000000000000000000000000000000000000000000000000000000000000000000000d1d2a3437393939393938352b1e0e0000000000000000000000000000000000000000000000000000080e10141414140e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b1115161616161612100a0000000000000000000000000000000000000000000000000000050b0d1013151616161514110f0c0903000000000000000000000000000000000000000000000000000000000000050b0d10131516161614120e0b08010000000000000000000000000000000000000000000000071c304354667c919ea8a7a1998573604b35200b00000000000000000000000000091e324657697e93a0b2b6a49c887c706761585b595b5761666e7985979fb1bbb49f8b79635443301c07000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c6a6a6a6a6a6a6a6a6c6d70757a828b99a1afbbbcaf9e927e685a4935200f000000000000000000000000000000000000000000000000000000000e1e2f404c5d6577869cb1a4a3a7aaabacaba9a7a69d968c8276645c4a3d2d1b0b00000000000000000000000000000000000000000000000000000000000000000005182a3b484c4e4e4e4e4e4d493c2b19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e10100e0d0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21262a2b2b2b2b2b27241d1204000000000000000000000000000000000000000003090b1218202225282a2b2c2b2a292724211e16100b07000000000000000000000000000000000000000000000000070b10181f2225282a2b2c2b2a2723201c140b08010000000000000000000000000000000000000000001325364d5e697e8990918d8376615544311d08000000000000000000000000021527374b6175889eb3b9a89c8678665e524c473a4439464c515c64748197a1b3baa99b8572604a35200f000000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c675555555555555556585660656d7884959dafbdbcb49f8a78624d3d2c1a06000000000000000000000000000000000000000000000000000006192c3c4c5e657b899ca4b5b3aa9f9b9897989a9fa9b2ab9f97877a645b4a3929160300000000000000000000000000000000000000000000000000000000000000000b1f344859626363636363625a4935200b00000000000000000000000000000000000000000000000000000000000000000000040a0c0d0b050000000000000000010f1a212426252422201c130b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111a2832363c3f40404040403c39302212000000000000000000000000000000000000060a161e21272b34373a3d3f4041403f3e3c3936322825201c1308030000000000000000000000000000000000000208131c20252a34373b3e3f4041403f3c39353026201d14090100000000000000000000000000000000000000081830404f6069767b7c786e61584737261401000000000000000000000000081d314455697f94a7b8b49e8a79635a4c4037332a2f2933363d4a5660728399a6b7b4a3917c67513d2d1a070000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67524040404040404138454b4f5962727f959fb0c2baa899836e5b4935210c00000000000000000000000000000000000000000000000000000c2035495a657c8b9ea7b4a69d938a85838283858a929da5b4a59d8979635746321e0d00000000000000000000000000000000000000000000000000000000000000000d22374c6277797979797978624d38230d0000000000000000000000000000000000000000000000000000000000000000000c171f212220190e020000000000000f1f2d36393b3a3937353025201c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000411212f38454b51545555555555514d40301d0a000000000000000000000000000000040e19202832363c3b484d5053545556565554514e4b46393a3530251e160b0100000000000000000000000000000009151d2530353a3b484c50535556565554514e4b43363531261c140800000000000000000000000000000000000000122232424f57616667635b4c473a2a1909000000000000000000000000000b20364b6074889db3b7a6937e695b493c2f211f171a171e212d3845546175889db2c1b09b86715b4a36210c0000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c2b2b2b2b2b2c2731363b4854606c8196a4b6c6b59f8c79634e39230e00000000000000000000000000000000000000000000000000081b2e3f4d62788a9ea9b4a39b887e76706e6c6d70757d879aa2b4a79d8775614b3b2b180500000000000000000000000000000000000000000000000000000000000001172c41566c818e8e8e8e8e84705a45301b00000000000000000000000000000000000000000000000000000000000000000c1c29333738352b1d150900000000071a2d3d4a4e50504e4c4a43363530261811040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000211222f3f4c5660666a6b6b6b6b6b675f4d39241000000000000000000000000000000c181f2c3538454b5258596265686a6b6b6b6a696664615756504a433632281c1408000000000000000000000000031219273136434a5057596265686a6b6b6b6967636054514b44373026180e0000000000000000000000000000000000000414243239464c51524e493d332a1c0c000000000000000000000000000010263b50657b90a6b7b39d8875604b3d2c1e120a0400030a0f1a27364657687e93a7b9b5a38e79634e39240e0000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c271515151517151d202b36434b6073869cb1c6bcab96806b563b2b18050000000000000000000000000000000000000000000000000d22374b5d6f849aa8b7a69b847769615758575856606876849aa4b6a696806b594834200b00000000000000000000000000000000000000000000000000000000000001172c41566c8196a3a3a39a85705a45301b000000000000000000000000000000000000000000000000000000000000000417293a474c4d483c3127190c0000000c21364a5b63656563626054514b43362f221507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110202f404c5d65757b7f80808080807c67513c271200000000000000000000000002131c2a343c494d5660676d72777a7d7f8081807f7e7c7976716b6560544b46393026180e000000000000000000000b161e2f37444b5460656c72777a7d7f8081807f7c79746e6660554b43362c1e1103000000000000000000000000000000000006141b2933363b3c38352c1f170c000000000000000000000000000001162c41566b8196abc4ab96806b5645321f0f000000000000000a1829394b6074899eb3c1aa957f6a55402a150000000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c27120000000002090d1825314455677c91a8b9c9b29c8772594834200b0000000000000000000000000000000000000000000000000f253a4f647a8fa2b3b29d887661594b46394238454b586176869cb2b49f8b77624d37220d00000000000000000000000000000000000000000000000000000000000001172c41566c8196abb8af9a85705a45301b00000000000000000000000000000000000000000000000000000000000000081f33475861625a4b44372a1c0c00000e24394e63797b7a7977746e6760544c40332515060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2e3e4c5e667b889194959595958777614c37220c00000000000000000000000a161e313a474c5a626c757c82878c8f92949596959493918e8a86817a736a61574b43362c1e1104000000000000000e1b2832404c556068737a81878c90939495969594918e89837c74686054493c2f2111030000000000000000000000000000000000000b171e21262723211a0f04000000000000000000000000000000031729395b70859bb0c8a5907b66503828160100000000000000000b1d3144556e8398aec3af9a846f5a3727150200000000000003192e43586e8398adc3ae99846f59442f1a040000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000081426374b6074899eb3c9b6a58c77624c37220d000000000000000000000000000000000000000000000001142637576c8197acbbaa937d6858473b32282d28323a4757677c91a9baaa947f69543f2a1400000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b00000000000000000000000000000000000000000000000000000000000008182d3e4c6176776a6055473a2a180400192e43586e82908f8e8c88837c73665e504333251402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3d4b5c667c8c9da6a9aaa79d8778625947341f0a000000000000000000000b1a2832414e59616d78818991989da5a5a8a9aaababaaa9a6aa9f9b968f877f75686054493c2f22130600000000010f1e2c39464b5e66747e878f979ca5a5a8aaababaaa9a6a79e9891877d73635a4b3f2f21110000000000000000000000000000000000010f1a21242525252321190e0000000000000000000000000000000a1e33465774899eb3bbaa8c77614c37220c0000000000000000000215273753697e93a8beb29d88735544311d0800000000000000192e43586e8398adc3ae99846f59442f1a12121212110f090000000000152b40556a8095aabfbca7917c67523c27120000000000000000091d3144556e8399aec3c3a5907b65503b26100000000000000000000000000000000000000000000000081d31445571879cb1b49f8a76614b3a2a1e1617161e29394b60758a9fb4af99846f5a442f1a05000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000000000000000000011426364a5c6c81897f74615847331f0a00192e43586e8398a5a3a69e9891867c6a6150433220100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3c495b647b8a9faab7b9a89e8979635a483a2a18040000000000000000000b1b2938454b5f6877828b979ea8adb2b7c3bdbfbebdbdbdbec8bbb4b0aba59d94887e73635a4c40312413050000000f1f2c3c4957616d7c87939ca5acb2b6c3bdbab9b8b9bbc5b9b3ada59d928578655d4c3f2f1e0e000000000000000000000000000000000f202d36393a3a3a38352c1e0e00000000000000000000000000000c21364c61768ba7b9b49f8a75604a35200b0000000000000000000012273c51677c91a6bcb7a68b75604b36200b000000000208131c2e43586e8398adc3ae99846f59442f272727272726231c1104000000152b40556a8095aabfbca7917c67523c2712000000000000000001152737556b8095aac0bda8927d68533d281300000000000000000000000000000000000000000000000b20354b60758a9fb4b09b86715746331c0c0300030c1d32455670859bb0b29d88725d48331d08000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000000000000000000081c304354647a8c9f948676614c37220c00182d43586d82989e9fabaeada49c8d7f6a614f3e2e1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2a3a485a6379899ea8babaa99e8a7a645b493c2b1c0c0000000000000000000b1b29394656606d7d89979faab4b9c6c4b8b3aeaba8a7a7a8a9abaeb2b7c3b6b2a69d938478665e4e423123130100061a2c3d495a637582909da5b2b6c3b8b3ada8a5a3a3a4a5aaafb4bbb7b2a39b8a7b655d4c3c2c18080000000000000000000000000000071a2d3e4a4e5050504d493c2c1906000000000000000000000000000d23384d62788da2c5b39e89735443301c070000000000000000000010253b50657a90a5bac4a18c76614c37210c00000009151d25303543586e8398adc3ae99846f59443c3c3c3c3c3c3b382f2211000000152b40556a8095aabfbca7917c67523c271200000000000000000014293e54697e93a9bebea9937e69543e291400000000000000000000000000000000000000000000000c21374c61768caabbaf99846f5a3929170000000002152838596e8399aeb49f89745f4a341f0a000000000000000000000000000000000000060c0e12141514130f0b0902172c41566c8196abc1af9a85705a45301b00000000000000000000000000000000000000000000000000000000031628384b6073859baba496816c57412c170010253a50657b86898b8f99a1aeab9f947f695c4b37220f00000000000000000000000000000000000000000000000000000000050b0d1013141516151412100d0b0a1a293947596278889da7b8bbaa9f8b7b655c4a3d2c1e0e000000000000000000081829394657617481929ea7b4bbc5b8b3aba69e9996939292939496999da6a9b2b7b8b3a29a897c68604e41311e0a000c2135495b63788698a0b2b6c2b5b1a79e9893908e8d8f90949a9faab5bcb4a89e8b7b655b4936261401000000000000000000000000000d21364a5c64656565635b4935210c000000000000000000000000000e23394e63788ea3b8b49f8a75604a35200b0000000000000000000011273c51667c91a6bbc5a18c76614c37210c00000919273136434a4d586e8398adc3ae99846f5951515151515151504c402f1c090000152b40556a8095aabfbca7917c67523c271200000000000000000013293e53687e93a8bdbea9947e69543f291400000000000000000000000000000000000000000000000c21364b61768ba8b9af9a856f5a3c2b190500000005182a3b5a6f8499afb49e89745f49341f05000000000000000000000000000000040a0e19202327292a2a2825211e16172c41566c8196abc1af9a85705a45301b00000000000000000000000000000000000000000000000000000000091e324556687e93a3b5a7947e69543f2914000e23374b5d657273757a83949daeb49f8c7a644f3d2c1a060000000000000000000000000000000000000000000000050b0d141920222528292a2b2a2a2825221f18273846576177869ca6b7bbb49f8c7d665d4b3e2d1f0f000000000000000000011426364657617584979fb3b8c5bab4a79e968e8883807e7d7d7d7f8184888d949da5b3b8b4a89e8c7e685f4d3a2510000e23394e6379889ca4b2beb9b3a49c9189837e7a7978797b7f848b979fabb8b9a99e8a79635443301c09000000000000000000000000000f24394e647a7a7a7a79634d38230e000000000000000000000000000e23384d63788da2c5bbaa8c77614c37220d0000000000000000000013283e53687d93a8bdb8a68b75604b36200b0002152737444b546062646e8398adc3ae99846f6767676767676767665e4c38230f0000152b40556a8095aabfbca7917c67523c2712000000000000000000152a40556a7f95aabfbda8937e68533e29130000000000000000000000000000000000000000000000091e32465774899eb4b29c87725a483520120c0b0c121f34485971879cb1b29d88725d48331f180d000000000000000000000000000c181f222c35383c3f3f3f3d3a363228232c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000000000000000031629394b6075889db3b39e8976614c36210c00081c2e3f4b505c5560656e7f94a0b2aa99846f5b4935210c000000000000000000000000000000000000000000070d182022292b35383b3d3f4040403f3d3a37342a3645566175859ba4b6bcae9d927e685e4d3f2f201001000000000000000000081c3043546175859aa2b1bdc1b4a89f94888079736e6b69686868696c6f73787f87939ea6b3b9aa9f8d7d67523d28120013283e53687d93a3b5c0b4a79e93867c756d6965646364666a6f78818d9ea7b8b9a89b8573604b372614010000000000000000000000071c31465c71858f8f8f836e59432e19000000000000000000000000000c21374c61768ca7b8c8a6917c66513b2b18050000000000000000081c2e3f576c8297acc1b39e88735645311d0900081d314455606d74777a7d859bb0c6b09b857c7c7c7c7c7c7c7c7c7c66503b26110000152b40556a8095aabfbca7917c67523c27120000000000000000071a2d3d576d8297acc2c6a6917c66513c26110000000000000000000000000000000000000000000000031628395c71869bb1b6a58d78624d3f302321202123303f4c62778c9fb5af99846f5a4437342a1d0e0000000000000000000002141c2a33373c494d51545554534f4b4538372f41566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000000000000000a1e324657697f94a6b7a5947e695846331f0a000011212e373a37444b4f616e8298adb3a18e79634e39230e0000000000000000000000000000000000000008131c202b34373e3c484d5053545555555452504c483b43546074849aa3b5bdb09e947f69604e403021110200000000000000000008182d3e4b60728399a3b4c0beb2a39b8a7f766b645c5956535252535456595b636a747e8899a1b0b2a096816b56412c16000b20354a6072859babb4a29b897e7367605553504e4e4f50555a626c7c899ea9bab5a3937d685544311d080000000000000000000000021527375d72889da59b86705b382715020000000000000000000000000a1f33475873889eb3c2ac97826d594834201304000000000000031323374b5d72879db2c5b09a85705b38271502000b20364b6074818a8c8f919ba3b5c9b5a39b91919191919191919187725d47321d0800152b40556a8095aabfbca7917c67523c271200000000000000021121364a5b72879db2c7b9a88e79634e39230e000000000000000000000000000000000000000000000000162b40556b8095aabeab96816b5d4d403936353639404c5d6b8096abbaa9947e6955524c473b2c1f0e000000000000000009151d313a474c555a6367696a6968646056504b3f41566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000000000000021527374b6175889eb3b29d8774604b3a291704000003111c2325273136434e63798ea5b7a9937e69543e291400000000000000000000000000000000000512182530353b484d54595a626568696a6b6a6967656259595360728298a2b4bfb19f96806b614f4231221203000000000000000000011426364a5c6a8095a1b3c1beb2a09885786a61574e4a3e413e3d3d3e3f413d494e5560687783969ea1988272604a35200b00071c304354647a8c9f9f9585786860554b44373b39383a3b3c484d5e657b8b9fb4c1b29d8774604b35200b0000000000000000000000081d31445574899eb39d88735645311d090000000000000000000000000417293a5a6f849aafc4b49f8a77624d41311f170c070000070b171e324350657b90a5b6c2ab95806b56402b16000011263b50667b909fa9a4a7b0b5c1d2c1b5b0a6a6a6a6a6a6a6a69c87725d47321d0800152b40556a8095aabfbca7917c67523c27120101010001080b151d30414e63798ea5b6c9b39e8973604b35200b0000000000000000000000000000000000000000000000000e24394e63798ea0b2b49f8b7b675f534e4c4a4c4e535e667b8b9fb4b49f8a776d6a676259493d2c1a0600000000000009192731424e58616a72787c7e7f7f7d7a756e655d4d48566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000000000000081d3144556a7f94a7b8a6937e685645321b0b0000000000080e10151d2036495b72879db2ae99836e59442e19040000000000000000000000000000000d19202f36434a515962696e73777a7d7e7f807f7f7d7a77736e686c8197a0b2c0b2a197816d6251433224130400000000000000000000081c304354647a8c9fb4bfc0b2a0988274625a4b4639362d2b292828282a2c2c3537444b5961728090938373605443301c0700001325364a5c6a7f8e8b8073625a4b4437312725242324262b35404c5d6a7f95a6b8b6a5907b66513b261100000000000000000000000b20364b60758ba8b59f8a75604b36200b00000000000000000000000000152a3f556a7f94aac2baa997826d5f4e413329221b1a1a1a212933414f6170859ab0c3b5a48f7a644f3a250f000012273c51677c91a5a5a5a5afb4c0cebdb1aca5a5a5a5a5a5a5a59c87725d47321d0800152b40556a8095aabfbca7917c67523c271717171718141d2027313f4d5f6e8399aec3c3ae99836e5443301c080000000000000000000000000000000000000000000000000c21364a5b6d8298a7b8aa9e8a7c7068636160616368707c899ea9bab49f8b84827f7c77635b4935210c000000000008182737444b60697780878d91949494928f89837b6f625a566c8196abc1af9a85705a45301b00000000000000000000000000000000000000000000000000000b20364b6074889db3b39e8875604b38281500000000000000000002081a2c3d5a6f8499afb09b86705b46311b060000000000000000000000000004121d2b34404c5460666f777e83888d90929495959594928f8c88837d80969fb1beb4a2998273604b443425150600000000000000000000011527374b6073869caabbc5b4a29882726056493c3229211a161413131314171a2126313b4754606b7b7e7460554436251300000008182d3e50616a79786a6055483c31261d15100f0e0f1119202f3f4b6175889eb3c3ad97826d583a2a1804000000000000000000000d22374c62778ca1bcab8d78634d382314080000000000000000000000000f24394e64798ea4b6c7b19f927d685f4c463a362d2f2f2d3639464b5f6a7f94a2b4c0b19c86715c4b37220d000012273c51677c8f8f8f8f8f9aa2b4c5b19f978f8f8f8f8f8f8f8f8f87725d47321d0800152b40556a8095aabfbca7917c67523c2c2c2c2c2c2d26313537444b5d677d91a1b3c7b7a5917c675136261401000000000000000000000000000000000000000000000000071a2d3d4c6277899ea8b7a89e91857d79767576787d85919ea7b9c7baa99f9a9794918a79634e38230e00000000001325364455606d7e89959da5a6a9aaa9a8a89f9990847868606c8196abc1af9a85705a45301b00000000000000000000000000000000000000000000000000071a2d3d52677c91a6b7a9957f6a5645321a0a0000000000000000000000192e43586e8398adb29d87725d48321d080000000000000000000000000614222f3b484d5e66737c848b93999ea7a5a8a9aaaaaaa9a7a5a69d9892969eb0bdb5a39a8474605544312616070000000000000000000000081d314455687d92a4b5c8b9a79a8473605445382b1e160b07000000000000000609141d2a36434b5e6569605645372718080000000010203343505b63625a4b44372b1d140902000000000006111e3246576d8297acc2b29d87725847331f0a000000000000000000000e23384e63788da3c5a6917c6651433026180c00000000000000000000000d21364a5c72869cb1c6bdb49f8b7d6c61584e4a3e44443d4a4e57616c7d8d9fb4c0b4a2917c66513e2e1b0800000c22374c61777a7a7a7a7b849aafc2ac97817a7a7a7a7a7a7a7a7a7a644f3a240f0000152b40556a8095aabfbca7917c67524141414141414237444b4e55606a7b8b9fb4bfbfb29d8774604b35200b00000000000000000000000000000000000000000000000000000f1f344859647a8a9da5b4b3a39b938e8b8a8b8e929aa2b3b4adababababababaaa8927c67523d271200000000071c304354607382939ea8b2b6c3b6b2afadadafaea29a897d6b6c8196abc1af9a85705a45301b000000000000000000000000000000000000000000000000000c21364a5b70859aafb49f8a77614c3828160000000000000000000000041a2f44596f8499aeb29d88725d48331d08000000000000000000000007152432404c59626f7c86919a9fabaeb3b8c5bdbebfbebfbebcc4b7b3aea8abb0bcbbaa9b8575615645372614080000000000000000000000000b20354b6074879db2c2c2b39e897762554436271a0e030000000000000000000000010c182630404c50534b45382719090000000000021525333d4a4e4d483c3126190e0100000000000000000316283952677c91a7bcb7a58c77614c37220c000000000000000000000d23384d62788da7b8ae99836f614b43362a1c1103000000000000000000071a2d3e54697e94a8b9ccbaa99f9281766a645c5b59595b5b636a7681929fabbcb8a79a84705e4c3820100000000a1f34475961656565656e8398adbfaa947f6a6565656565656565645c4b37220d0000152b40556a8095aabfbca7917c675656565656565658595560636b74808c9fa9bac2b3a1927d675544311d08000000000000000000000000000000000000000000000000000005182a3b4a5c647a87979faab2b0a8a3a19fa1a3a8b0b1a99f989696969696969696927d67523d2812000000061a2c3d4a60728298a0b3b9bbb4aca59c9998989a9ea7a89e92806c8196abc1af9a85705a45301b000000000000000000000000000000000000000000000000000e24394e63798ea2b4ad98836e5847331a0a0000000000000000000000061b30455b70859ab0b19c87725c47321d070000000000000000000006152533424f5e667883919ca4afb4bcc8bbb4b0adaba9a9aaabadb1b4bcc9bdc0c4c9b49f8a78635b4d4030221204000000000000000000000005182a3b51677c91a5b7c9b6a4937e6859483727180a00000000000000000000000000000008141c2f383b3e3631271a0a0000000000000007151f2d363938342b1d140900000000000000000000000f253a4f647a8fa4b9c3a48f79644f3a240f000000000000000000000b20364b6075889eb3b3a1947f6b6054473a2e2114060000000000000000000f21364b6176899eb3c4c7bab49f9689807973706f6f7073797f89969fb4bcb9a99e8979634e402f1d0200000004182a3a474c505050586e8398adbfaa947f6a55505050505050504f4b3e2e1b070000152b40556a8095aabfbca7917c6c6c6c6c6c6c6c6c6d6e7075798088959faabac1b5a499836e5f4d372715010000000000000000000000000000000000000000000000000000000d1d2e3e4b5c6476818b959ca4a6a8aaabaaa9a6a49c958b828181818181818181807a644f39240f0000000c2135495b6a7f94a0b2beb8aa9f968d8784828385899099a19e96818196abc1af9a85705a45301b000000000000000000000000000000000000000000000000071a2d3d566b8095abb7a6907b65503a2a180000000000000000000000000417293a5c71879cb1af9a85705a45301b0500000000000000000003132433435060697c8999a1b1b6c2bab4adaa9f9b989594949496989b9fabadb4bac7cebbaa9c8779665e4d4030221200000000000000000000000b1f3447596f849aafc3c5b19c8673604b3b2b1909000000000000000000000000000000000001111c232629201d150a000000000000000000010f1a21242220190d010000000000000000000000000e23384e63788da3b8bba5907b66503b261100000000000000000000091d3145566a7f95a2b4af9d94807261594b3f3224160800000000000000000a1e3346576a7f95a6b7cbcdbdb0a79e958e8886848486888e959ea7b0bdb5a79e8b7b655b4935221200000000000c1c2a34373a3a43586e8398adbfaa957f6a55403a3a3a3a3a3a3a372e2010000000152b40556a8095aabfc4af99838181818181818181828385898e959da6b4bbbcb4a39b8675614c41301909000000000000000000000000000000000000000000000000000000000010202e3e4b57616c7880878c919395969594918d8780786d6b6b6b6b6b6b6b6b6b645c4a36220d000006192c3c4e63798b9fb4beb8a79e8c8178726f6d6e70747b83909d9f96899eb3c5af9a85705a45301b0000000000000000000000000000000000000000000000000d21364a5c72879cb2b29d8874604b35200c0000000000000000000000000a1f33465873889eb3ad97826d58422d18030000000000000000001121314250616a7e8d9ea7b3bfbab4a89f97908a8683807f7e7f8083868b91989fa9b4bbc8b6a59c8a7c665e4d402f1e0e000000000000000000000d22374c62778b9fb4cab8a6927d675544311d0d0000000000000000000000000000000000000000090e10140b0902000000000000000000000000070c0e0d0b05000000000000000000000000000413253a4f647a8fa4b9bba6917c66513c271100000000000000000000021527384b6073849aa2b0af9e968477655d4f423426160700000000000000031729394b6175889db3bfcbb8a69ea6aaa69d9b99999b9ea6aab3b8b6b1a39b897c665d4b3d2c1a040000000000000c181f22252d42576c8297acc0ab96806b56412b252525252524221b1002000000152b40556a8095aabfc7b3a199969696969696969697999b9ea8aab3b7bfb3ab9f9685766157463323130000000000000000000000000000000000000000000000000000000000000210202e39464c59626b72777b7e7f80807e7b78726b62595656565656565656564f4a3e2d1b0700000c2035495a6e8399a9babaa99e897a6c635b5a58585460656e7b889ba39ea7b9c5af9a85705a45301b0000000000000000000000000000000000000000000000000f24394e64798ea4b6ab96816b5443301c080000000000000000000000000c21364c61768ba6b8a9947f69543f2a140000000000000000000c1c2e3f4e606a7f939fabb8c0b4a99f958a827b76716d6b6a696a6b6e71767c838b969faab5c2b6a99f8c7d665e4c3c2b1a0a00000000000000000013283e53687d93abbcc8b39e8875604b372614000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c181f324353687e93a8bdc8a5907b66503b261100000000000000000000000a1d314455617584969eb3b0a29a887b6961514434251504000000000000000b1e324657677d92a1b3c5b39e88929aa2aaafaeaeb0b3b8b4b1aca49c928578665e4c3f2e1f0e0000000000000000040a0c162b40566b8095abc0ac97826d573a2a17101010100f0d070000000000152b40556a8095aabfc7bfb3afababababababababadaeb0b4b9c3b6b2aba1998c8174615847392917050000000000000000000000000000000000000000000000000000000000000002101b29333b484d55596166686a6b6a6966625a554d483b414141414141414139362d20100000000e23384d63788c9fb5c5b49f8b7a645c4e493d4336434b505d6577859ba3b5c4c5af9a85705a45301b000000000000000000000000000000000000000000000003162839556a8095aab8a78f7a6550362614010000000000000000000000000f253a4f647a8fa4c4a5907b66503b261100000000000000000417293a4b5d687e929db5bcbdb1a29b8b80776d666056585654545556585761666e78818c9ca4b3bfbaaa9f8c7c665a49382815020000000000000005182b3b596e8399aec9c9ac97816c5645311909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0e19202a33414f6170859bb0c5bbaa8e79644e39240f0000000000000000000000011426374657617380919ea8b3a69d8c7e6b62514333221200000000000000031628394d5f6f8499a7b8b39e897d858e959a9fa9a2a3a99f9b9690867d73625a4c402f211100000000000000000000000014293e54697e93a9c6b09b86715847331f1210100f0c0a030000000000152b40556a8095aab2b2b2b2b2b2b2b2b2b2b2b2b2b1b1afadaaa6a59c958e847a6c6056473a2a1b0b000000000000000000000000000000000000000000000000000000000000000000000b171e2b34373b474c515355565554514d483c37342b2c2c2c2c2c2c2c2c24221b1002000006192c3c566b8095abbcb9a795806b5c4b3e352c2d2630353f4c596276859ba6b7c5af9a85705a45301b0000000000000000000000000000000000000000000000091e32455770859bb0b39e8974604b35200b0000000000000000000000000013283d52687d92a7b9a78c77624d37220d00000000000000000a1f334658657b8c9fb4bbbcb09f9784786b6158504b4538403f3f3f4139464b5159626c7a8699a1b2bebbaa9e8978625645321d0d000000000000000b2034485973889db2c8bcab907b655038271500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1820222b353a474c60697f94a3b5c9b49f8a76604b36210b000000000000000000000000091928394655606b7c8a9ca5b4aa9f93806b6250402f1b0b000000000000000b1b30414d6278899eb3b8a79b8574788085898b8d8d8c8a86817b73676055493c2f2212030000000000000000000000000f253a4f647a8fa8b9b49f8a76614c3d2f27262524211e170b00000000152b40556a80959d9d9d9d9d9d9d9d9d9d9d9d9d9d9c9b9a9895918d8780796f645c4b45382a1c0c000000000000000000000000000000000000000000000000000000000000000000000000030d1920222a34373c3e4041403f3c38352b22201916161616161616160f0d07000000000c2035495a72879cb2c9b39e8976614c3e2e211a18141c202f3b48586277889db3c5af9a85705a45301b00000000000000000000000000000000000000000000000b21364b60768a9fb4ad98836d5544311d0800000000000000000000000001162b41566b8096abb39e8974594834200b00000000000000071b2d3e4c6176879daabbbfb09e968174635a4c473a3632282b2a292a2b2933363b484d5c64758398a0b2c1b9a79b8574604b3b2b18050000000000000d22374d62778ca6b7cab49f8b76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0e1920232b34373c484d58616d7e8d9fb5c1c2b09a85705745321e09000000000000000000000000000b1b2837444b5e6679879aa2b4b49e95806a5e4c39291703000000000000001320344859677c919fb1b4a397816c6b70747678787775716c6560544b44372c1e1204000000000000000000000000000b20354b6074899eb4bbaa947f6a5b4c403c3b3a3a3633291b0b00000014293e54697e87888888888888888888888888888787868583807c78726b635b4f4a3e32281a0c000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d181f2226292a2b2b29262220190e0b050001010101010101000000000000000d23384d62788da5b6c9ad98826d574633201006000108111d2b3a48596c8196abc1af9a85705a45301b000000000000000000000000000000000000000000000010263b50657b90aabba8937d68533727150100000000000000000000000001152737596e8499aeb09a85705b3b2b1905000000000000000d22364a5c6d8297a5b7c3b2a196806c6055493c332a211e161615141516171e212b343e4a5761738298a3b4c5b5a3957f6a594834200d00000000000010253b50657a90a5c4c6b19c86715746321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b161e212c35383b484d535a626b7782929fabbcc8b5a4927d68523928160300000000000000000000000000000b192631404c5b6376849aa2b4af9e907c665746331e080000000000000005192b3b4d5f6c8197a4b5b19f927d685c6061626362605457504a43363126190e000000000000000000000000000000081d3144556d8298abbcb49f8a79665e555250504f4b4639291703000012273b4f616972727272727272727272727272727272716f6d6a67625a564e493d362d1d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c111315161514110d0b0500000000000000000000000000000000000012283d52677d92a7c3bcab917b66513929170200000000000d1c2b3b566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000000152b40556a8095aab8a78e79634e39230e00000000000000000000000000081d31445572879cb2ac97816c57422c1700000000000000071b2d3e4f647a8d9fb5c3b7a5998372604b44372c1f180c09030000000000030a0d19202d3946556074859ba8b9c1b49f8a77624d3b2a1805000000000013283d53687d92a8bdc3ae99836e5939281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a212932363c494d545962697078808a97a0b5bcc9bbaa9c8673604b35200b0000000000000000000000000000000009141d303d49586174849aa6b7b39d8875614b36251300000000000000000d1d30414b6074869ca8b9b49f8b7a64584c4d4e4c4b43363b3530251d140900000000000000000000000000000000011426374e63798c9fb5baa89e897c716a67656564615746331e0a00000c1f32424f545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5c5a5855514d483c39362c221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b41566b8096abc0b59f8b76614c36210c00000000000000172c41566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000003162939596f8499aeb39e8974604a35200b000000000000000000000000000b20354b60758a9fb4a8937e69533e2914000000000000000d22364a5c6f849aabbcc0b29d87756154433127190e040000000000000000000000050f1b2837455662788a9eb4c3baa897826d5948341f080000000000152b40556a8095aabfc1ab96816c56412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f2c3539464b535a636a70777e858c959ea8b1bec7baab9f8c7a645544311d08000000000000000000000000000000000001121f2c3a47566176889db3b8a6947f6a5443301c070000000000000000121e32455663798a9eb4baa99d8776615544383735302626201c1308010000000000000000000000000000000000000921364a5b6d8298a4b6b8a79e9086807c7b7a7975614b3828160200021424323b3e48484848484848484848484848484847464543403c38352b23211a0f070000000000000000000000000000070c0e0e0e0e0e0e0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e8399aec3b29d87725746331e0a00000000000001172c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000000a1e32465772879db2af9a846f5443301c07000000000000000000000000000d22374c62778caabba6907b66513b2611000000000000031628394f64798ea2b4c9b4a2907c665746362515090000000000000000000000000000000b192838485a697e93a5b7c6b49f8b77624c3625130000000000162c41566b8196abc0bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101c29333d494e57616870787f858b939a9fabb4b9c6c2b6a99f8d7d685d4b37261401000000000000000000000000000000000000010f1c2a384758677c91a5b7b39d8873604a35200b000000000000000002162838495b677d92a0b1b7a59a8473604b4130201c14100b07000000000000000000000000000000000000000000071a2d3d4b6175869ca4b2b8b3a39b9591908f8f87725645321e09000006141f27293333333333333333333333333333323231302e2b272220190e0c060000000000000000000000000000010f1a21242424242424211f170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465b71859bb0c5af9a85705a3929170300000000000001172c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000000c21364b61768b9fb5ab96816c5636251300000000000000000000000000000e23394e63788ea3c8a38e79644e39240f000000000000091e3245576d8298adc0c3af9a85705e4c3929180800000000000000000000000000000000000a1a2b3c4b6074879db2c6bbaa957f6a5443301c0700000000172c42576c8197acc1bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000210202d3a464c5b636d767d858d949b9fabafb5bcc9c4b7b2a49c8b7e685f4e3f2e19090000000000000000000000000000000000000000000c1a2a3a4a6073879db2b7a68e79644f39240f0000000000000000000a1a2c3d4d5f6d8297a4b6b4a296806b5f4d3d2d1b0b000000000000000000000000000000000000000000000000000f1e32465762788699a1aeb4b5b0aaa7a5a5a58b76604b36210b000000020c12141d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1a1815120d0b0500000000000000000000000000000000000f1f2d363939393939393633291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d33485d72879db2c3ad98836e58432e190000000000000001172c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000000f243a4f647a8fabbca8937d68533e2813000000000000000000000000000010253a4f657a8fa4b8a28d78634d38230e0000000000000b21364b60758a9fb4c9b6a5907b6550402f1b0b000000000000000000000000000000000000000e1d314455697e93a8bac8b29d8873604a35200b00000000182d42576d8297acc2bda8937e68533e291300000000000000000000000000000000000000000000000000000000000000000000000000000000000010202d3e4a58616c798289929aa2a9b0b5bcc9c9bcb4aea69d93867a68604e4131201000000000000000000000030a0c0b0902000000000000000c1c3043546b8096abc4a9947e69543f2914000000000000000000000f1f31414b6075869ca9bab09e917d675b4a3a29180800000000000000000000000000000000000000000000000003162939495a6276838f999fa9a9aaacaba9ab8c76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e4e4e4e4e4e4c463a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33495e73889eb3c2ac97826d57422d180200000000000001172c41566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000012273c52677c91a7c9a48f7a654f3a251000000000000000000000000000000f253a4f647a8fa4c2a38d78634e3823150a000000000012273c51677c91a8bac7b29d8773604a3520120000000000000000000000000000000000000000021527374c61768a9fb4c9b7a68e79644f39240f00000000172c42576c8197acc1bea9947e69543f291400000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2d3e4a5c6476818c979ea8b0b4c0c5c7c2b6b1ab9f9991887e73645c4e42312313020000000000000000000b171e21211e160a0000000000000013253653687d93a8bdab96806b56412b160000000000000000000001131e32455763798a9fb4bcb49e8a79635846362513000000000000000000000000000000000000000000000000000b1b2c3c4958616e7a838a909395979694918d78624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b636363636363615846331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e74899eb3c1ac97816c57422c170200000000000001172c41566c8196abc1af9a85705a45301b0000000000000000000000000000000000000000000014293e54697e93a9bcab8d77624d38220d00000000000000000000000000000d22374d62778ca4b6a5907b66503e32281a1b0d000004182a3a586d8297adc6c8ab95806b5443301c07000000000000000000000000000000000000000000091f3346586e8398aec3c4aa947f6a553f2a1500000000162b41566b8096abc0bfaa947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4a5c647a87979faab4b9c6c9c3b6b2aba49c958b847c746860554a3e31241305000000000000000004121b2933363632281a1105000000000011263c51667b91a6bbad97826d58422d180000000000000000000000031628394a5b687e92a0b2b9a89c8676615443301c12000000000000000000000000000000000000000000000000000e1e2c3a464c5c646e757a7e8081817f7c766f594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e7079797979797976614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e74899eb3c2ac97826d57422d180200000000000001172c41566c8196abc1af9a85705a45301b00000000000000000000000000000000000000000000162b40566b8095abb59f8a75604b36200b00000000000000000000000000000b2034485972879cb1ac97816c5c4b4538382b1b09000a1f33475872879cb2c7bbaa8f7a6550362513000000000000000000000000000000000000000000000417293a52687d92a7c5c5b09a85705b3b2b1905000000152a3f556a7f94aabfc1ac96816c57412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a647a8a9da5b4bbc8c6b9b3aca59d958e877f786f6660554b44372d20130600000000000000000012222f39464c4b45382f1f180d0902050a172a3a52687d92a7bdac97826c57422d170000000000000000000000000a1b2d3d4e606d8298a4b6b6a4998372604a402f1e0e000000000000000000000000000000000000000000000000000e1b29333e4a4f566065696b6c6b6a666158483b2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020354a60758a8e8e8e8e8e7d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485d73889db2c3ae98836e59432e190000000000000001172c41566c8196abc1af9a85705a45301b00000000000000000000000000000000000000000000182d43586d8298adb39e88735645311d09000000000000000000000000000005182b3b53697e93a2b49f8b7a6760565649382613000c22374c61778ca5b6c9b49f8a75604b36200b00000000000000000000000000000000000000000000000e23384d63788da7b9c9b39e8974594834200b00000012273d52677c92a7c9c3ae99846e593a2917040000000000000000000000000000000000000000000000000000000000000000000000000000091c2f3f4d6278889ea8b6c3c6b9b3a89e978f878079726a6259514b443731271910020000000000000000000c1c2f404c576160564c40342a211e16181f283347586c8197acc8aa957f6a55402a15000000000000000000000000000f1f31424b6175869ca9bab3a1957f6a5e4c3c2c1b0b000000000000000000000000000000000000000000000000000b171f2e3638454b505455575654514c473a2b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020354a60758a9fa3a3a3927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af99846f5a3828160300000000000001172c41566c8196abc1af9a85705a45301b00000000000000000000000000000000000000000000192f44596e8499aeb19c87715c382715020000000000000000000000000000000d20354b6073849aa2aa9e897d75716756422e190010253a50657a8fa5c3c6b19b86715645321d0900000000000000000000000000000000000000000000000b20354a6074899eb3c9b9a88c77624d37220d0000000f253a4f647a8fabbcc7b29c87725847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000e23384c5d6f8399a6b8c6c0b4a89e9589827a726b645c554d483b3531271d1509000000000000000000000417293a4c5e667675655e4c483b3632282a3438454c6176899eb3bbaa927d67523d28120000000000000000000000000001131e324657647a8b9fb4beb59f8d7c665a49392816030000000000000000000000000000000000000000000000000004101b222832363b3e4042413f3c37332a1c0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020354a60758a9fb5b8a7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8399aec4b19c87715645321e0900000000000001172c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000001a2f455a6f849aafb09b86705b46311b00000000000000000000000000000000081d314455617684939da59e928985715b46311c0013283d52687d92a7bdc3ae98836e59382815020000000000000000000000000000000000000000000000071c30435471869bb0c6c6a5907b66503b26110000000c21364c61768b9fb4cab6a58c76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000316283950657b90a1b3c5bfb3a29a897f766c645c564e4a3e37342b201d15090100000000000000000000000a1f334758667c8b887b6d6259504b45383b474c56606d8298a7b8b49f8a76614c37210c0000000000000000000000000000031629394a5c687e93a0b2bcab9e8978635746321e14030000000000000000000000000000000000000000000000000000070a151d2025292b2c2c2a26211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b41566b8096abc0b49f8a76604b36210b00000000000001172c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000001b30455b70859ab0b09a85705b45301b0600000000000000000000000000000001142637475861737e879db2a89e89745f49341f00152a40556a7f95aabfc0ab96816b56412c1600000000000000000000000000000000000000000000000000132536596e8399aec3bda7927d68523d28130000000a1e33465771869cb1c6c3a6917c665139281603000000000000000000000000000000000000000000000000000000000000000000000000091e3245576f8499afbfc2b3a19984786a61584f4b3e39362d2220190d0801000000000000000000000000011527374c6176889d9d8d82776d6560565b5b596268758197a0b2bbaa99846f5847331f0a0000000000000000000000000000000b1b2d3e4e606e8298a5b6b9a79c8675614b433221110000000000000000000000000000000000000000000000000000000002090b101416171615110c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677d91a7c1bbaa8f7a644f36251300000000000001172c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000001b31465b70869bb0af9a846f5a452f1a0500000000000000000000000000000000091d314455606c7b8499aeab9e89745f49341f00162c41566b8196abc0bfa9947f6a543f2a1500000000000000000000000000000000000000000000000000172d42576c8297acc1bea8937e69533e291400000003172939576c8197acc5c2ad97826d5746321e090000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9fb4c9b5a4998373625a4c463a372e24211a0f0b05000000000000000000000000000000081d3144556d8297a6ab9f978a827a7572707072777e87979fb1beb49f8c79634e3a291704000000000000000000000000000000000f2031424c6176879da9bab5a498826e614f3f2f1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca3b5c8ab95806b5443301c0b000000000000172c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000001c31465b71869bb0af99846f5a442f1a05000000000000000000000000000000091d2f404b6073818f99a19f968e8a745f49341f00172c42576c8197acc1bea9937e69543e291400000000000000000000000000000000000000000000000001172c41566c8196abc1bfaa947f6a553f2a150000000011263b50667b90a7b9c9b39e8976614b37271502000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8faabbc6b19c86746055483c3329221b100d070000000000000000000000000000000000000b20354b60748598a0b3b5a89f97908a878686878c939ca5b1bdb1a096806b5b4a361c0c000000000000000000000000000000000001141e334657647a8b9fb4bfb2a0947f695d4b3c2b1a0a000000000000000000000000000610161820202020201917110700000000000000050f151720202020201b0d0b0600000000000000000000000000000000000000000000000000000000050b0d1b20202020201916100600000020354a60758a9fb5bca7927d67523d28120c1013151514120e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34485970859bb0c5b29d8773604a3928190a0100000109142c41566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000001b30465b70859bb0af9a856f5a45301a050000000000000000000000000000000f24384c5e6d82979fae9f8c817975604b36210b00182d42576d8297acc2bda8937e68533e291300000000000000000000000000000000000000000000000001162b41566b8096abc0c0aa95806b55402b16000000000b20364b6075899eb3c9b9a8937d685544311d0e000000000000000000000000000000000000000000040901000000000000000000000013283d52687d92a7c8c6a7917c675645372b1f170b07000000000000000000000000000000000000000000081d314455607482929da6b4b4aca99f9c9b9b9da5a8b2b6b6b29f978273604b3d2d1a00000000000000000000000000000000000000031729394a5c697e93a1b3beb49f8c7b655a483828160200000000000000000000000a18232b2e35353535352e2b24180a00000000000917222a2c3535353535302320190e00000000000000000000000000000000000000000000000000000e1920223035353535352e2b23180a000020354a60758a9fb5bca7927d67523d281f2126292a2a292723211a0f0c0600000000000000000000000000000000000000000000000000000000000000000000000005182a3b53687d92a7b9b7a5917c67574637281c141313141d263143566c8196abc1af9a85705a45301b000000000000000000000000000000000000000000001b30455a70859aafb09b85705b46301b06000000000000000000000000000004172a3a51667c919fb1a1917d6c64605645321e0900172c42576c8197acc1bea9947e69543f291400000000000000000000000000000000000000000000000002172c41576c8196acc1bfaa947f6a553f2a1500000000081d3144556c8196abbcc6b29d8774604b3c2c1b0b0000000000000000000000000000000000050b0d191f16140e04000000000000000014293f54697e94a9bebaa88b76614c3828190d04000000000000000000030a0c0c0a030000000000000000011527374556606d7d88959ea8afb4b4b2b0b0b2b7b8b3aea59c918174605544311f0f00000000000000000000000000000000000000000b1b2d3e4f616e8399a4b0b2aa9e8978625645321e0900000000000000000000061828353f434a4a4a4a4a434036281807000000051727343e424a4a4a4a4a4538352b1e0e0000000000000000000000000000000000000000000000000e1e2b3538454a4a4a4a4a4340362818060020354a60758a9fb5bca7927d67523d2a33373b3e3f3f3e3c38352c23211a0e0400000000000000000000000000000000000000000000000000000000000000000000000d21364b6075899eb3c3b29d87756155453830262828263137444b616e8399aec3af9a85705a45301b000000000000000000000000000000000000000000001a2f445a6f8499afb09b86715b46311c0000000000000000000000000000000a1f33475870859bb0ae99836e5f4e4b453828160200162b41566b8096abc0bfaa947f6a553f2a1500000000000000000000000000000000000000000000000002182d42576d8297acc2bea9947e69543f291400000000021527374e63788c9fb5c8b6a5947e695a4939281a0c0000000000000000000000000000010e1920222e342b2921160800000000000000152a3f546a7f94a9bfb49f89745846331d0a000000000000000000020b171e21211e160b000000000000000009192838454b606875808a93999fa9a6a7a8a7a6a79e9991877c6c60564537261401000000000000000000000000000000000000000000102032424c617686949b9d9d9d9b8574604b36210b0000000000000000000010233546535860606060605953463624110000000f2234455257606060605f5b4d483c2b19060000000000000000000000000000000000000000000005192b3c484d5b5f606060605853463623100020354a60758a9fb5bca7927d67523d3a474c5053545554514e493d38352c1f180c00000000000000000000000000000000000000000000000000000000000000000000091e3245576b8096a5b7b7a698827360564b43363d3d37444b55606b7f94a1b3c5af9a85705a45301b00000000000000000000000000000000000000000000192e44596e8399aeb29c87725d3929170300000000000000000000000000000c21374c61768b9fb5a6917c6751413632281a0a0000152a3f546a7f94a9bfc1ac96816c57412c1700000000000000000000000000000000000000000000000001142637596f8499aec4bda7927d68523d28130000000000092135495b6e8399aabbc3b49f8a78635746382a1c1106000000000000000000000008141c2b35384449413d3426160500000000000014293e54697e93a9beb49f8a75604b35200b00000000000000000a151d2933363632291b1002000000000000000a1a2832414e57616a767e84898e91929392908e89837c73665e4b45382719090000000000000000000000000000000000000000000002141f33475861757f858788888887806a55402b1500000000000000000001162b3f53646d75757575756e6453402b17020000152a3e52636c757575757570625a4835200f000000000000000000000000000000000000000000000b2035485a627075757575756e6453402b160020354a60758a9fb5bca7927d67524a52586165686a6a6967635b564e493d332a1c11030000000000000000000000000000000000000000000000000000000000000000031628394b6175879db2bdb2a0988274666054545253555560667380949daebfc5af9a85705a45301b00000000000000000000000000000000000000000000172d42576c8297acb49e89745746331e0a00000000000000000000000000000f243a4f64798fabbca38e78634e39231e160a00000012273d52677c92a7c9c3ae99836e59392916030000000000000000000000000000000000000000000000081d31445571869bb1c6c5a5907a65503b25100000000000061a2c3d4e63798b9fb4c2baa89c86756156473a2e211a0f0b050001010100070c121826303c484d595e56514434231300000000000011273c51667c91a6c3bcab8d78624d37271508000000000108111a283239464c4b46392e201000000000000000000a161e3139464b5761686f75797c7d7e7d7b79746e6660544c4031271a0a0000000000000000000000000000000000000000000000000417293a4757606a7072727272726a61503c281300000000000000000003182e43586d828a8a8a8a8a826e59432e19040000172c42576c818a8a8a8a8a8578624d3d2d1a070000000000000000000000000000000000000000061a2c3d4d6278858a8a8a8a8a826e58432e190020354a60758a9fb5bca7927d6754606770767b7e7f7f7e7c78736c635b4c473a2e21120500000000000000000000000000000000000000000000000000000000000000000a1e324657667b909fb0beb2a098877b746d6a68686a6d747b85959e9fabbcc5af9a85705a45301b00000000000000000000000000000000000000000000152a40556a7f95aab9a88b76614b36210c000000000000000000000000000010253a50657a8fa5b8a28d78634d38230e02000000000f253a4f647a8fabbcc7b19c87725746321e0a00000000000000000000000000000000000000000000000b20354b6075899fb4c9b9a78d78624d38230d0000000000000e2135495b6c8196a4b6c6b5a49a837461584b3f352c22201818171617181a21232f36434b5a626e746b625141311e0e00000000000d22384d62788da4b6c9a8937e68554431261813121112141c202e38454b576161574b3e2e1808000000000000000002131b293239464c535660636668696766636054514b43362f1d150a00000000000000000000000000000000000000000000000000000c1c2939454b555b5d5d5d5d5d55504333210d00000000000000000003182e43586d83989f9f9f98836e59432e190400000e24394e63798ea39faa9f9a84705b4a36210a00000000000000000000000000000000000000000c2135495b6f849a9faa9fa4907b65503b25100020354a60758a9fb5bca7927d6763727d858b9093949493918d8881786d61584b3f3023120300000000000000000000000000000000000000000000000000000000000000031628394c5e6c8196a0b4bcb2a59c9088827f7d7d7f8288909ba39f8a9fb4c4af9a85705a45301b0000000000000000000000000000000000000000000013283e53687d93a8c6a38d78634e38230e00000000000000000000000000000e24394e63798ea3b8a38e79634e39240e00000000000c21364b61768b9fb4cab49f8b76614b36210c00000000000000000000000000000000000000000000000e24394e63798ea9bac9b39e8974604a35200b000000000000061a2c3d4b6075869ca8bac2b3a19a8476655d4e493d37342b2d2c2b2c2d2d3639404c546068788389806b604e3c2c1909000000000b2035485a72879cb2c5b19c8674604b43362e292726282630353f4b56606b7676645c4b362513000000000000000000000b161e29333638454b4e51525352514e4a4336353026181202000000000000000000000000000000000000000000000000000000000c1b2832363f464848484848403c3325150400000000000000000003182e43586d8398adb5ae98836e59432e190400000c21364a5b70859bb0bbb4a28e79634e38281502000000000000000000000000000000000000011527374e63788da2b4bbb29c8772604a35200b0020354a60758a9fb5bca7927d677985929b9faba8a9aaa9a6a69d968c8276655d4d4130211100000000000000000000000000000000000000000000000000000000000000000b1b2f404b607282959fabb5b6b2a69e9794929294979ea6a89e8a7c91a6b7af9a85705a45301b0000000000000000000000000000000000000000000011263c51667b91a6c7a6907b66513b261100000000000000000000000000000d22374d62778ca2c4a5907b65503b261000000000000a1e33465771869cb1c6bcab907b66503727150200000000000000000000000000000000000000000005182a3b53697e93a8c7c4af9a846f5443301c07000000000000000f1e324556647a8a9fabbcbfb3a29a877b6d635b524d483b42414141433d4a4e555e66737e89999e927d685a493727150200000005192b3c556a7f95a7b8b6a495806b60544b3f3e3c3c3d36434b505d6574808a897a645443301c0800000000000000000000030b171e21273136393c3d3e3d3b39353025201c1408000000000000000000000000000000000000000000000000000000000000000a161e212a3032333333332b282115070000000000000000000003182e43586d8398adc2ae98836e59432e19040000071a2d3d53687d92a8b9c0ab96816c5645321d09000000000000000000000000000000000000081d3144556b8096abc0baa9947f695443301c070020354a60758a9fb5bca7927d7c8b9aa2b0adaba9a9abafb4b7b2ab9f97887b675f4d402f1c0c0000000000000000000000000000000000000000000000000000000000000000111c3043546072808c9ca4afb4b8b3aca9a7a8aaadb0a1998a7b73889db2af9a85705a45301b000000000000000000000000000000000000000000000e23384e63788da9baa9947f69543f2a1400000000000000000000000000000b20364b60758ba6b7a8927d68533d2813000000000003172939576c8197acc5c9ac96816c5544311d080000000000000000000000000000000000000000000b1f3448596f8499afc4c2aa947f6a553625130000000000000000031628384a5c667c8d9fabbbc0b4a59d8f82796f6862595a57565656585a5b636a727c85939ea8b39e8a78635544311d08000000000e21364c6176899eb3c0af9e957f73655d5753525152545460666f7b86959f9b8572604a362614010000000000000000000000030a0c151d2023272829282624201c130b080100000000000000000000000000000000000000000000000000000000000000000003090b151b1d1d1d1d1d15130d04000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000f21364b6075899eb3c8b39e8875604b36200e0000000000000000000000000000000000000b20354b6074889db3c8b49f8a77614c362513000020354a60758a9fb5c4af99848c9fa9a69d98959394969a9faab4bab4a69d8b7d675e4c3a2a180400000000000000000000000000000000000000000000000000000000000000011426364354606b7b86919a9faaa9abacaba9a6a39b918478656f849a9f9f9a85705a45301b000000000000000000000000000000000000000000000b20354b60758a9fb4ad97826d583828160300000000000000000000000000091d32455673889db2ab96816b56412c1600000000000010263b50657b90a7b8c8b39e8874604b3625130000000000000000000000000000000000000000031629394c62778b9fb4cab6a48e79634e39240e0000000000000000000a1a2d3e4d5e687e8d9faab7c3b7b2a0988c847d77726f6d6c6b6c6d7073797f87919ba3b3b9b9a89b8675604b36200b000000000a1f334658697f94a2b4bcaf9d95847b726c68676667696d747b84909ca4b4a3917c665443301c08000000000000000000000000000002090b0e11131412110e0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000000091e3245576c8197acc1b8a7917c67523c2b19050000000000000000000000000000000005182b3b51667c91a6b7c3ad98836e5947341808000020354a60758a9fb5c7b3a1999fa19a8f8883807e7f81858b949fa9b6b7a99f8c7c655847331f11000000000000000000000000000000000000000000000000000000000000000008182636434a5d65737c858b909496969694918c857c6f625a657b878a8a8a836f5a452f1a00000000000000000000000000000000000000000000081d31445571869bb1b09b86715645321e0900000000000000000000000000021528385a6f849aafaf9a846f5a3a2a180400000000000b20354b6074899eb3c9b8a6917c675443301c0d000000000000000000000000000000000000000c1e3246576a7f94aabbc6b19c87725b4a36210c00000000000000000000102030404e60687d8c9da5b5bcbeb2ab9f9a928c8884828180818285888e959ca4b0b5c1b4a89f928073604b35200b000000000417293a4b6074849aa5b5bbafa29a9087827e7c7b7d7e8388909aa1b1b6bdb19c8674604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000000031628394e64798ea3b5c5af9a846f5a48352008000000000000000000000000000000000b203448596f8499aec4b6a4907b65503a2a1800000020354a60758a9fb5d0bfb3aa9f93847a746d6b696a6c6f777f8a9ca4b6baaa9e8976614c402f1c090000000000000000000000000000000000000000000000000000000000000000081825303f4b55606770767b7e8081817f7c7770675f4d4b5d65727474746f6554412d180000000000000000000000000000000000000000000001142637586d8398adb49f8a76604b36210b0000000000000000000000000000172c41566c8196abb39d88735947341f0a0000000000081d3144556b8196abbcc4b19c8673604a3b2b1a0a00000000000000000000000000000000000c1c2d3d4b6175889eb3c8baa8947f69543d2d1a070000000000000000000002122231424e5f677a87979fabb4c0bcb5afa7a59d9a97969696989a9ea7aab2b6c3b7b2a39b8a7d6b605443301c0800000000000b1d3144556176879ba3b1beb4afa49c979391919293989da6afb3bfb6b29f978475604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e12151617171615120f0b09020000000000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000000000a21364a5c70859bb0c6b59f8c78624d362614010000000000000000000000000000001325364d62778b9fb4c7b29c8773604a35200c00000020354a60758a9fb5cfbcab9f8c7e6f6560545654545658616a78869ca5b6b8a798826d5e4c38230e00000000000000000000000000000000000000000000000000000000000000000008131c2e37444b52586166696b6c6b6a676259514d413f4b505d5f5f5f5a5447372512000000000000000000000000000000000000000000000014293e53697e93a8bbaa8f7a65503a2510000000000000000000000000000013283e53687d93a8b8a68c77614c37220c0000000000011527374d62788c9fb4c7b5a4927d6859483827190c0000000000000000000000000000000d1b293a4a5c6b8095a7b8c5b49f8a76614c37210f00000000000000000000000004132431414d5c6476828d9aa2adb4bac7c3b7b2afacabababadafb3b8c5c1b5b1a69d92857968604b4336261401000000000002152737475862788597a0afb4c0b6b2aca8a7a6a7a9adb2b7c3b6b2a59d908174605745321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b141c2024272a2b2c2d2c2a2825201d150c0b040000000000000000000000000000000003182e43586d8398adc2ae98836e59432e190400000000071a2d3d53687d92a8b9bcab95806a5443301c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c1c3043546a7f94aabbbaa9947f695443301c0700000020354a60758a9fb5cab59f8d7d6860504b43363e3f3a474c5a6277879cabbcb2a0907b66503c2c19060000000000000000000000000000000000000000000000000000000000000000000011192631353a474c515456575654514c483b39302e373a484a4a4a45413729190800000000000000000000000000000000000000000000000e24394e63798ea7b8aa947f6a553a2917040000000000000000000000000010253a50657a8fa5c4a5907a65503b2510000000000000092035495a6e8398a9bac2b39e897762564537291c1107000000000000000000000007121d2b394758647a8b9fb4c5b9a796816b5847331f0a00000000000000000000000000061323303e4b58616d7a858f989fa9acb1b5bcc9bcbdbebdbcc6b9b4afaaa39b92877d72635b4e42302618080000000000000009192a3a485a6275828f9aa2acb2b7c3bcbcbbbcc9bcb5b1aca59c93877c6c60564539281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a161e21263035393c3f41424241403d3a363228221f180c06000000000000000000000000000003182e43586d8398adc2ae98836e59432e190400000000000f21364b6175899eb3c9b29d8774604b35222222222222222222222222222222222222354a6073879cb2c8b49f8a77614c3625130000000020354a60758a9fb5c0ab95806b5f4e42353026292a2a333c4959647a8c9fb4beaf9a846f5a4935200c000000000000000000000000000000000000000000000000000000000000000000000009141d202933373b3f4141413f3c37342a241d1c2325323535352f2d25190b0000000000000000000000000000000000000000000000000b20354a6074899eb3af9a85705847331f0a000000000000000000000000000d22374c62778ca7b9a9937e69543e291400000000000006192c3c4d62788b9fb4c2b8a79b84746055463a2e211a0f0c060002010200060c101b222f3b48576176879caabbc0b39e8976614c3a29170400000000000000000000000000000513202e3a474c5d65707a838a92979c9faba6a7a8a8a8a7a5a89e9a958e867d74676054493d311c14080000000000000000000c1c2b3c4856606d7a848f979da5a5a7a8a8a8a6ab9f9c968f877e74665e4b4538281b0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171f28323636434b4e51545657575655524f4b453837342a20190e0200000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000091e3246576c8197acc1b7a5907b66503a3737373737373737373737373737373737373a50657a8fa5b6c3ad98836e59473418080000000020354a60758a9fb5bca7927d67524131201c141415181f2c3b4a5c6c8197acc1b59f8c78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000001080c171f2126292b2c2c2a27221f180d0a080e101d1f1f1f1a18120800000000000000000000000000000000000000000000000000071c3043546e8399aeb49f8b76614c37210c000000000000000000000000000b1f34485974899eb3ac97826c57422d17020000000000000e2035495a6b8095a3b5c5b4a299827361584b3f362d23201918171617181a21232e37404c596275849aa5b6c4b3a2937e695847331c0c0000000000000000000000000000000002101c2a333f4b4f5d646e767c82878b8e9092939392918f8d89847f79716860554a43362c1f130100000000000000000000000e1e2b38454b5d656f7a81878c8f92939392918e8b86817a736960564c4031271a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003131b293338454b52546063676a6b6c6c6b6a67646056544c473b352c1e160a000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000031628394e64798ea3b5c3ae98836e584c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c586d8298adc3b6a4907b65503a2a18000000000020354a60758a9fb5bca7927d67523d281408010000040e1d2d3e4d62788da3b4bcab96806b563c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000040a0c111416171615120d0b050000000000080a0a0a05030000000000000000000000000000000000000000000000000000000013253653687d92aabbaa927d67523a29170400000000000000000000000005182a3b5c72879cb1af9a846f5a452f1a0500000000000006192b3c4b6074859ba8b9c0b2a1998376655d4e4a3d38352c2d2c2b2c2d2c35383e4b4f5e6677859aa2b4c3b7a69a8472604a3a2a17000000000000000000000000000000000000000c171f2e373f4b4f5761676d7276797b7c7d7e7d7c7a77746f6a635b524b44373025180f01000000000000000000000000000e1a28323f4b4f5d656c72777a7c7d7e7d7c7976716c6560544b45382f1d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e303a464c5660676e74797c7f808182817f7d7a75706961594d493c32281a0e0000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000b21364a5c70859bb0c6b49f8a7761616161616161616161616161616161616161616161768a9fb4c7b29c8773604a35200c000000000020354a60758a9fb5bca7927d67523d2812000000000000102035495a70859bb0c9b29c87725a4835200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61778b9fb4ae98836e5846331f0a000000000000000000000000001b31465b70869bb0b19c87715c47321c07000000000000000e1d31455663798a9eaabbbfb2a199877b6e635b534d493c42414141433d494e545c646f7c889ba3b4c0b9a89d8877625443301c0c000000000000000000000000000000000000000004101b222e3739464b525756606366676869686765626054554e493d3631271c1308000000000000000000000000000000000a161e2e373f4b4f57596265676869686764615857504b433631271a120200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1b2933414d58616a757c83898e91949697979695928f8a857e776d635a4b45382c1e1002000000000000000003182e43586d8398adc2ae98836e59432e1904000000000000071a2d3d53687d92a8b9baa9947f777777777777777777777777777777777777777777777f94a9babaa9947f695443301c07000000000020354a60758a9fb5bca7927d67523d281200000000000006192c3c54697f94a9beb6a48d78624d38220d0000000000010d171c1f20202020202020202020202020202020202020202020202020200e0c06000000000006121b2020202020202012100a0100000000000000000000000000000000000000000000000000000000000000000a1f3347586f849aafb49f8a76614c362110000000000000000000000000051a2f445a6f8499afb29d88725d48331d080000000000000002152738495b657c8c9faababfb3a59c8f83797068625a5a58575657585b5b6369707a84919da6b5c1b8a89e8a7a645948362513000000000000000000000000000000000000000000000008101b222932363d38454b4e515253535352504d4b433639352c201d15090000000000000000000000000000000000000003101b222e373a3b484c5052535353514f4c463a3a3530261d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d2a39464b5f67767f8891999ea7a6a9abacacabaaa7a99f9a938a82786b6056493c2e2010020000000000000003182e43586d8398adc2ae98836e59432e1904000000000000000f21364b6175899eb3c7af9d948c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c949daec7b49f8a77614c36251300000000000020354a60758a9fb5bca7927d67523d28120000000000000010253b50657b90a5c6c3a6917c66513c27110000000001111f2a313435353535353535353535353535353535353535353535353535352320190e0000000616242f3535353535353528251e13050000000000000000000000000000000000000000000000000000000000000004172a3a53687d93a8b9a9937e68533e2d1b07000000000000000000000003192e43586e8398adb29d88725d48331d0800000000000000000a1a2c3d4c5d677d8c9fa9b6c2b6b2a0988c857e7873706d6c6b6c6d7073787e858f99a1b3b7c1b5a79e8a7b655c4a3b2b180800000000000000000000000000000000000000000000000000080b161e2127283236393b3d3e3e3d3c3a3835302623211a0f08020000000000000000000000000000000000000000000008101b22252b34373a3d3e3e3d3c3936332925201c1408020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a3b4757616e7d88959ea7aeb3b9c5bfc0bfbfc0bfc7bab4afa99f978b8074635b4a3e2e20100000000000000003182e43586d8398adc2ae98836e59432e190400000000000000091e3246576c8197acc1bbafa9a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a9aebbc3ad98836e594734180800000000000020354a60758a9fb5bca7927d67523d2812000000000000000c22374c61778ca8b9bfaa947f6a553f2a15000000000d1f2f3d46494a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a38352c1e0e0000122434424a4a4a4a4a4a4a3d3930231301000000000000000000000000000000000000000000000000000000000000000c21364c61768a9eb4b09b85705c4a36220e000000000000000000000005192b3b596f8499aeb19b86715c46311c070000000000000000000f1f2f3f4d5f677c8a9ca4b4bbbeb2ab9f9a938d8885828180818285888d939ba3aeb3bfbab4a39b897b655d4c3e2d1d0d00000000000000000000000000000000000000000000000000000000030a0c12161e21232627282928272522201c140e0c06000000000000000000000000000000000000000000000000000000080e1018202225272829282724211f17100b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3a4759617582929ea6b3b8c5c4b7b2aeabaaaaabadb1b5bcc7bab4a99f958579645c4a3e2d1d0d00000000000003182e43586d8398adc2ae98836e59432e190400000000000000031628394e64798ea3b5c9c2c6b9b4b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b4b9c6c2cab6a5907b65503a2a180000000000000020354a60758a9fb5bca7927d67523d2812000000000000000a1f33475874899eb4c1ac97826c57422d1700000000172a3d4d5a5e60606060606060606060606060606060606060606060606060605e493c2c1906001b2f42525e606060606060524d41301e0a000000000000000000000000000000000000000000000000000000000000000a1f3346586c8297acb5a38e79644f3c2b1905000000000000060c0e19172034485971879cb1af99846f5a442f1a0500000000000000000001112130414d5e667986969faab3bfbcb5afa8a69d9a97969696989a9ea7a9b0b5c1bbb4a99f958578645d4c3f2f201000000000000000000000000000000000000000000000000000000000000000000003090b0e111213141312100d0b0801000000000000000000000000000000000000000000000000000000000000000000050b0d1012131413120f0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737475861778598a0b3b8c4bab4aba69d9996959495989c9fabb2b7c4bab4a39b897a645c4a3b2b1805000000000003182e43586d8398adc2ae98836e59432e190400000000000000000b21364a5c70859bb0c6ccb9a89e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea8b9ccc7b29c8773604a35200c0000000000000020354a60758a9fb5bca7927d67523d28120000000000000004182a3a5d73889db2c3ae99836e59442e19000000001c31465a6b747575757575757575757575757575757575757575757575757575705a4935200c0020354a5e70757575757575675f4d392510000000000000000000000000000000000000000000000000000000000000000417293a4e63798ea2b4ad98836d5a4835200e00000000000e1921232e2a33404d62778c9fb5aa957f6a55402a15000000000000000000000003132330404c5b6375818c99a1adb3b9c6c4b7b3afadacabacadb0b3b8c5c4b8b3aa9f988a8074625a4b3f2f2111020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556176869ba3b2bebeb2a99f968e8883817f7f8083868b939da6b4bac2b5a79e8a7a645948342013000000000003182e43586d8398adc2ae98836e59432e19040000000000000000071a2d3e53687d92a8b9c9b49e8a8888888888888888888888888888888888888a9eb4c9baa9947f695443301c070000000000000020354a60758a9fb5bca7927d67523d281200000000000000001d32475c72879cb1c4af99846f5a442f1a000000001f34495e74898a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78634d38230e0020354a60758a8a8a8a8a8a7d67523d281200000000000000000000000000000000000000000000000000000000000000000b21364a5b70859aafb49f8b78624d3c2b19060000000e1e2c3538433a474c5e6b8196abb5a38f7a644f3a250f0000000000000000000000000513222f3d4a57616c79848e979ea8acb1b4bcc9bcbdbebdbcc8bbb4b0aba69e968b83786a6056483c2e2011030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0f12141516151412100b0903000000000000000000000000000000000006121b2020202020202012100a010000000000000000000002080b181f2020202020110f0900000000000000071a2d3d4b6074849aa4b5c2bcb4a0988a8179736e6b6a6a6b6d71777e88959fa9b8c5b8a89d8877624d41311a0a0000000003182e43586d8398adc2ae98836e59432e19040000000000000000000f21364b6175899eb4c5af9a857373737373737373737373737373737373738499afc4b49f8a77614c362513000000000000000020354a60758a9fb5bca7927d67523d281200000000000000071c31465c71869bb1c4af9a856f5a45301a000000001f34495e74899e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8d78634d38230e0020354a60758a9f9f9f9f927d67523d28120000000000000000000000000000000000000000000000000000000000000000071a2d3d50667b90a2b4aa96816c5a4835200f000006192c3c494d585a58616a7c8d9fb4b19b86715d4b37220d0000000000000000000000000004121f2d39464b5c646f79828991969c9faba5a7a8a8a8a7a5aa9f9b96908881786e635a4b45382b1e10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d151d202427292a2b2b292825211e160e0c06000000000000000000000000000616242f3535353535353528251e1305000000000000000009151d202d34353535353526231c110400000000000c21364a5b6a8095a2b4c2bcab9f9382786b635b595655555658596269757f8b9ea7b8c5b7a69a846f5f4e3828160300000003182e43586d8398adc2ae98836e59432e1904000000000000000000091e3246576c8197acc1b59f8c78635d5d5d5d5d5d5d5d5d5d5d5d5d5d62788b9fb4c3ad98836e5947341808000000000000000020354a60758a9fb5bca7927d67523d281200000000000000081d32475d72879cb2c4af99846f5a442f1a000000001e34495e73899eb3b5b5b5bab4b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a28d78634d38230e0020354a60758a9fb5b5a7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000f23384c5e70859bb0b49f8b78624d3d2d1a07000c2135495b636e707176808c9fabb19f917c66513f2e1b080000000000000000000000000000010f1b29323e4a4e5c646d757c81868a8d909293939291908d8a86817b746c635a4d493c31271a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d1820222731363a3d3e4041403e3d3a36322823211a0f090000000000000000000000122434424a4a4a4a4a4a4a3d3930231301000000000000091927313642494a4a4a4a4a3b382f221100000000071b2d3e4e63798c9fb4c0bcab9f8d7e6d625a4e4a3d41403f403b474c57616a7b899ea7b8c4b3a1927d685645321e0900000003182e43586d8398adc2ae98836e59432e1904000000000000000000031628394e64798ea3b5bcab95806b55444848484848484848484843546a7f95abbcb6a5907b65503a2a1800000000000000000020354a60758a9fb5bca7927d67523d281200000000000000071c30435473889db3c3ae98836e59432e19000000001b30455b70859ab0becdbaa99f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8d78634d38230e0020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000091c2f4050657b90a2b4a998826d5b4a36210c000e23384d63798385868b959faab4a097816c5e4d39201000000000000000000000000000000000000b161e2d363d4a4e5660666c7175787b7c7d7e7d7c7b7875706b6660554d493c352c1d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222b343737444b4f52535556555452504b453939362c231c12040000000000000000001b2f42525e606060606060524d41301e0a000000000002152737444b575f606060605f504c402f1c090000000d22364a5c6f8499aabbc2b59f8d7d69604d483c362d2c2a2a2b2a3439464b5d6579899eb3bdbfb29d8875604b36210f00000003182e43586d8398adc2ae98836e59432e1904000000000000000000000b21364a5c71859bb0c6b29d8874604b353333333333333333354a6073879db2c7b29c8773604a35200c00000000000000000020354a60758a9fb5bca7927d67523d2812000000000000000b20354a6075899fb4c1ac97816c57422c170000000011263c51667c91a0b2c2b49f8b8989898989898989898989898989898989898978624d38230d0020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000001123374b5d6f849aabb49f8c79634e39240e00182d42576d82979a9c9faab1a89e948274604b40301d02000000000000000000000000000000000000030f1a212d3638454b51575660636667686968676562605556504b4437352c20190e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2d363b484d5555606467696a6b6a6967656057564e493d382f1f170c000000000000000020354a5e70757575757575675f4d3925100000000002101d314455606d747575757575665e4c38230f0000021528384f647a8ea1b3c8b5a496806b5f4e42352b211a16151516181f28323f4b5b667c919fb1c8b7a6937e68533d2d1a07000003182e43586d8398adc2ae98836e59432e190400000000000000000000071a2d3e53687d93a8b9b7a6907b66513b2a181e1e1e1e17293a50657b90a5b7baa9947f695443301c0700000000000000000020354a60758a9fb5bca7927d67523d2812000000000000000d23384d62788da9babfaa957f6a55402a15000000000f24384c5e6d8298a4b6b29c8775747474747474747474747474747474747474625a4935200b0020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000081c2f3f4f647a8c9fb4ab96816b56412c1600192e43586e8398a8a6ab9f9b95897f6e605645312212000000000000000000000000000000000000000000070f1a212832363c38454b4e505253535352504d4b44373b35312720190e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a28323e4a4f59626a7075797c7e7f80807e7d7a76716b635b504c40332a1c100200000000000020354a60758a8a8a8a8a8a7d67523d281200000000102031414b607382898a8a8a8a8d7c66503b26110000091d3245566d8297adbfc3b19c8674604b413120190e0700000000050b161e2e3d4d5e6d8297aabbc4b19c86715b4a36210c000003182e43586d8398adc2ae98836e59432e190400000000000000000000000f21364b6175899eb4c4ae99836e5947341f0b08080a1f3347586d8398adc3b49f8a77614c3625130000000000000000000020354a60758a9fb5bca7927d67523d28120000000000000011263b51667b90a6c7c5a6917c67513c271200000000091d30404b6175869ca9b6a498826e605e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e4d493c2b19060020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000001122364a5c6c8197a69f937e68533e291300192e43586e839393918f8b867f7669614b45382715040000000000000000000000000000000000000000000000070a161e2127273136383b3d3e3e3d3c3b3835312726201d1509060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c38454b5c646e777f858a8f929395969593928f8a8681796f665e4c473a2e201002000000000020354a60758a9f9f9f9f927d67523d28120000000d1d2e3e4e606c81969ea89fa1947f6a5e4c38230f00000b20364b6075899eb4c9b7a5917c67564531231405000000000000000003101f30404d62788b9fb4cab5a48e79634e39240e000003182e43586d8398adc2ae98836e59432e19040000000000000000000000091e3246576c8197acc1b49f8b77614c37221000000c21374c61768a9fb4c3ad98836e59473418080000000000000000000020354a60758a9fb5bca7927d6752362614080000000000071a2d3d556b8095aac0b8a78e78634e39230e0000000000121e32465763798a9fb4b2a0937e685c4a394949494949494949494949494938352b1e0e000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4c617688998b7f6a604e3b26110010263b50657c7e7d7c7a77716a61584f4331271a0a000000000000000000000000000000000000000000000000000002090b11151d20232627282928272623201d15110b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3c4956606b7a838b959a9fa9a7a8aaabaaa9a7aa9f9b968e847b6d61584a3e2e2010000000000020354a60758a9fb5b5a7927d67523d281200000a1a2a3b4a5c687d929fb4b6a4998372604a402f1c09000011263b51667b90a8b9c7b29d8774604b382715050000000000000000000001122035485a6e8398adc9c2aa957f6a55362513000003182e43586d8398adc2ae98836e59432e19040000000000000000000000031628394e64798ea3b5bbaa947f69543f2e1b08071b2d3e53697e93a9bab6a5907b65503a2a18000000000000000000000020354a60758a9fb5bca7927d6754433026180d050000061221364a5c71869cb1c6b39e8872604a35200b0000000000031629394a5b687e93a0b2b49f8b7a645746333434343434343434343434342320190e00000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000101f334758687e84786a614f42311f0b000e23384c5e65696867656158554c473a321d150a0000000000000000000000000000000000000000000000000000000000000002090b0e111213141312100d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3c495a6274808c989faab0b4b5b1adabaaabacb0b4b4b0aba29a908276645c4a3e2e1d0d0000000020354a60758a9fb5bca7927d67523d281200021527384859647a8b9fb4b9a89c8675615443302211000001162b40566b8095abc6c8aa95806b5544311a0a00000000000000000000000005192b3c51667b90abbcc4af9a856f5443301c070003182e43586d8398adc2ae98836e59432e19040000000000000000000000000b22364a5c71859bb0c6b19c86725d4b37220b0d22364a5c71869bb1c7b29c8773604a35200c000000000000000000000020354a60758a9fb5c4ae998373604b43362b20181616192030414e64798ea4b6c5ad98836e5443301c070000000000000b1b2d3d4e606d8298a4b6a99c8776614c4231201f1f1f1f1f1f1f1f1f1f0d0b060000000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000417293a4e60686f635a4f433224140200091c2f404c50535351504c473a3733291c1402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162838485a627886969fabb4b7b2ab9f9c97969495979b9faab1b5b4afa098887a645c4a3b2a180500000020354a60758a9fb5bca7927d67523d281202101d3145566277889da9bab49e8a79635746362513040000021527385a6f859aafc4bbaa907b655037261400000000000000000000000000000e21364c61768b9fb4c9b49e8974604a35200b0003182e43586d8398adc2ae98836e59432e1904000000000000000000000000071b2d3e53687d93a8b9b6a48f7a644f3929161628384f64798ea3b5baa9947f695443301c07000000000000000000000020354a60758a9fb5c7b3a196816c6054483b342b2c2c2c35404d5f6f8499afc2b8a7917c675136251300000000000000000f1f31424b6175869ca9b6a598826e604e3e2d1b0b00090909090909090000000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000c1c31424e535a4d493c3225150600000011212f383b3e3e3c3a37332a211f170c000000000000000000000000000000000000000000000000000000060c0e12141514130f0b090300000000000000090b0b0b050400000000000000000000000000000a0b0b0b0a01000000000000000000000000000000000000000000000000070b0f14161716130e0c060000000000000000000000000000091e3245566278889ca4b4bcb1a69d948b8682817f8082858a929ca4b4bbb2a69d8a7a645948341f1100000020354a60758a9fb5bca7927d67523d2812102031424b6074849aa6b7b09e917c665b4939291808000000091d31455673889db2c8b49f8a76614b36210c00000000000000000000000000000a1f33465871869bb1c6b9a88c77624d37220d0003182e43586d8398adc2ae98836e59432e1904000000000000000000000000001021364b6176899eb4c2ac97826d5746321e1e3245566c8196acc1b49f8a77614c36251300000000000000000000000020354a60758a9fb5c9bcb59f96817262594d483b41413c494d5e677d91a1b3c4b39e8875604b36200b000000000000000001131e32465763798a9fb4b2a0937e695c4a3a291704000000000000000000000000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000001324313a3d4438352c1e15070000000003111c232629282725221f180c0a0400000000000000000000000000000000000000000000000000040a0e19202327292a2a2825211e160a080000080e101e2020201b181208000000000000000000070d0f1f2020201f160b07000000000000000000000000000000000000000308131c2024292b2c2b2923211a0f08010000000000000000000006192c3c4b6075869ca6b6bbae9f97877f77716d6b6a6b6d70767d86949faabbb7a89d8877624c3f2f1c08000020354a60758a9fb5bca7927d67523d28121d2e3f4e606c8197a2b4b3a195806b5e4d3d2c1b0b000000000b20364b60758a9fb5c7b29d88725746321e0a00000000000000000000000000000417293a596e8398aec3c6a48f7a644f3a250f0003182e43586d8398adc2ae98836e59432e1904000000000000000000000000000a1e3246576c8297acc1b49e8976614b362121364b6075899eb3c3ad98836e594734180800000000000000000000000020354a60758a9fb5bcab9f9b9f9684776a6259585656585a636d7c8b9fb4bfb8a695806a5645321d09000000000000000000031629394a5b687e92a0b2b49f8b7a645846331f14020000000000000000000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000006131e26282f2320190e0000000000000000090e10141312100c0a040000000000000000000000000000000000000000000000000000000c181f222c35383c3f3f3f3d3a363228231c11111c232533353535302d251a0c000000000000010f1a212435353535342b201c1308000000000000000000000000000000000a161e253035393e4042403e39352c201c14080000000000000000000c2035495a6c8196a4b5beae9d9481756961585856555657576067727f8c9faabbb8a699836e5d4b37230c000020354a60758a9fb5bca7927d67523d281a2b3b4b5d687e939fb1b6a59a8372604b40301f0f00000000000c22374c61778cabbcc6b19b86715c39291603000000000000000000000000000000172d42576c8297acc1bba6907b66513b26110003182e43586d8398adc2ae98836e59432e190400000000000000000000000000031629394f64798ea3b5b9a8927d68533d2c2b3c52677d92a7b8b6a5907b65503a2a180000000000000000000000000020354a60758a9fb5b59f8d869ba19a897f77716d6b6b6d7178828d9fa9babcb39d8875614b38281502000000000000000000000b1b2d3d4e606d8298a4b6a99d8776614c423220100000000000000000000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000020b11131a0e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141c2a33373c494d51545554524f4b4538382f21212f383b484a4a4a4541372a1a0800000000000f202d36394a4a4a4a494035302518080000000000000000000000000002101a283236434a4f53555755534e493d353026180e00000000000000001325364d63788b9fb4c2b2a0947f6c60564c473a413f4039454b5460697c8c9fb4c3b3a1907b65503a2a18040020354a60758a9fb5bca7927d67523d2828384859647b8b9fb4baa99d87766154433022120100000000000d22384d62778da2b7c4af9a856f5a45301a00000000000000000000000000000000162b40556b8095aac0bca7917c67523c27120003182e43586d8398adc2ae98836e59432e190400000000000000000000000000000b22364a5c71869bb0c6b09b85705b493535495a6f849aafc5b29c8773604a35200c0000000000000000000000000020354a60758a9fb5b29d8877879ca49e958b8682818183868d979fabbabcb09e917c665746331a0a0000000000000000000000000f1f31424b6175869ca9b6a598836e604f3e2d1c0c00000000000000000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000060c0e151a1d1e1d1b17110b09020000000000000000000000000000000009151d313a474c555a6367696a6968646056504b3f352f3f4b505e6060605a554837251200000000071a2d3e4a4e5f6060605f564a433625130000000000000000000000000412202e38454b546064696b6c6b68635b534b43362c1e10020000000000071c3043546c8196aabbb9a898826d614b4538332a2c2a2b283236434a5e697f94a4b6bfaf99846f5947341f0a0020354a60758a9fb5bca7927d67523d283245566277889da9bab49f8a7a645847362614040000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120003182e43586d8398adb4ae98836e59432e19040000000000000000000000000000071b2d3e53687d93a8b9b4a38e79634e37364d62788c9fb5baa9947f695443301c070000000000000000000000000020354a60758a9fb5b09a8570778699a1ab9f9b989696989ca4adb5bcb8b39e95806b5e4c3929170000000000000000000000000001131e32465763798a9fb4b2a0937e695c4a3a291704000000000000000000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1921232b30323332302c26211e160a000000000000000000000000000009192731424e58616a72787c7e7f7f7d7a756e655d4e493d4b5d6573757575706655412d18000000000d21364a5c6474757575746b605443301c11000000000000000000000112222f3e4a56606a73797e8081807e7872686054493c2e201000000000000b20354a6072889eb3c8b49e8a77624c4332281f17161516161e2530404b6074879cb2c7b49f8b77614c37220c0020354a60758a9fb5bca7927d67523d31424b6074859ba6b7b09f927d675c4a3a2a1808000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120003182e43586d83989f9f9f98836e59432e19040000000000000000000000000000001021364b6176899eb4c1ab96806b554443546a8095abbcb49f8a77614c362513000000000000000000000000000020354a60758a9fb4ad97826d627683929ea7b1adababadb1b5c2b7b2a79e92806b625040301b0b0000000000000000000000000000031628394a5b687d92a0b2b49f8b7a645846331f14020000000000000000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0e0f10100b080100000000000e1e2c3538404547484745423c3632281c1308000000000000000000000008182737444b60697780878d91949494928f8a837b70635b4e50657b888a8a8a84705a45301b000000000f24394e64798b8a8a8a898072604a3f2e1c0c0000000000000000000f1f2f404c5c64757f888e93959795938e877d73625a4b3e2e1d0d000000000f24394e647a8ea7b8c1ac97816c5947341e160a040000000308131d314455697e93a8c5bcab917c67523c27120020354a60758a9fb5bca7927d67523d3f4e606d8197a3b4b4a296816c5f4d3e2d1c0c00000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120003182d42586d818a8a8a8a8a826d58432e18030000000000000000000000000000000a1e3246576c8297acc1b39e8874604b4b6074879db2c3ad98836e5947341808000000000000000000000000000020354a60758a9f9f9f947f6a58616e7d89949ca4a7aaabacaaa8a69d95897d6b625144332212000000000000000000000000000000000b1b2d3d4e606d8298a4b6a99d8776614c423220100000000000000000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e171e2123252526201c140800000006192c3c494d555a5c5e5c5b57514b45383025180a000000000000000000001325364455606d7e89959da5a6a9aaa9a7a99f9990847968605a6f849aa69f9a85705a45301b000000000d21364a5c687e93a0a89e947f6a5d4b3a2a18080000000000000008182c3d4c5e667a87949da6a8aaacaaa8a49c928678645c4b3b2b180500000013283d52687d92a7c5c9a6907b66513b2a180300000000000000011527374d62788da7b9c9ab95806b56402b160020354a60758a9fb5bca7927d67523b4b5d697e939fb1b7a69a8473604b4130200f0000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120001162a3f52636d74747474746d64533f2b1601000000000000000000000000000000031629394f64798ea3b5b8a6917c665150667b90a5b7b6a5907b65503a2a180000000000000000000000000000001f354a5f748b8a8a898577624c4c6068767f878d9295969695928e888076675f51443426160400000000000000000000000000000000000f1f31424b6175869ca8b6a599836e604f3e2e1c0c00000000000000000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000050f1a2123293336383a3b3b353026180800000c2135495b636a6f727372706c6660564a4336271a0a0000000000000000071c304354607382939ea8b2b6c3b6b2afadadafaea29a8b7e6c6072879db2af9a85705a45301b00000000071a2d3e4e606e8298a5b49f8c7b65594736251300000000000001142636495b667c8b9da5b2a59d9897989da5b1a39b897a645948342011000000152a40556a7f95aabfbcab8c77624d37220d000000000000000000092035485a74899eb3c3ad98836e58432e190020354a60758a9fb5bca7927d67524859657b8b9fb4baa99d8877625544312313010000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d281200000f23354552585f5f5f5f5f58534636231000000000000000000000000000000000000b22364a5c71869bb0c5ae99846f59586e8398aec3b29c8773604a35200c0000000000000000000000000000001d32475b6d7474747471625948414e57616a72787c7f8181807d79736a61584d413426160800000000000000000000000000000000000001131e32465763798a9fb4b2a1937e695c4a3a291704000000000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000d18202d363939464c4d4f50504b4336261401000e23384d6379808587888785817b756860544538271502000000000000061a2c3d4a60728298a0b3b9bbb4aca59c9998989a9ea7a99f938172748a9fb4af9a85705a45301b00000000000f2031424c6176879ca9aa9d8877615443301c100000000000081c30435463798a9ea9a69d918783828387909da5a79d8877624c402f1c090000162b41566b8096abc0b59f8a75604b36200b00000000000000000005192b3c5c72879cb1c4af99846f5a442f1a0020354a60758a9fb5bca7927d6752566278889eaabbb49f8b7a64594737271505000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120000061727353f424a4a4a4a4a433f362818060000000000000000000000000000000000071b2d3e53687d93a8b9b49f8b776261778a9fb4bbaa947f695443301c07000000000000000000000000000000182c3e4f5b5f5f5f5f5b4c483b3139464b545b63676a6b6c6b686360544c463a302316080000000000000000000000000000000000000000031628394a5b687d92a0b1b49f8b7a645847331f14020000000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000002101d2b343d4a4e56576163646565605443301c0800152a3f546a7f949a9c9d9c9a9791877d72605645311d120000000000000c2135495b6a7f94a0b2beb8aa9f968d8784828385899099a19f9782788daabbaf9a85705a45301b000000000001141e334657647a8b9fb4a69a8472604a3f2e1c0c000000000b20354b6073859ba8a79d887c726e6c6e727c879da6a69a846f5e4c38230d0000162b40566b8095abc0b59f8a75604b35200b000000000000000000031729395c72879cb1c3ae99846e59442f190020354a60758a9fb5bca7927d67566074859ba6b8b19f937e685c4b3b2a190900000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120000000917232a2a34373937332a2b23180a000000000000000000000000000000000000001021364b6176899eb4bbaa947f6a697e93a9bab49f8b77614c362513000000000000000000000000000000000f21313e474a4a4a4a4637342b1d2933363d494e5255565755534e4a433633291c1305000000000000000000000000000000000000000000000b1b2d3d4e606d8297a4b6aa9d8776614c433220100000000000000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000010202e3b484c5b636b7176787a7a7b72604b35200b0013283d53687d92a8b1b3b1b0aca69d928274604b402f1d090000000006192c3c4e63798b9fb4beb8a79e8c8178726f6d6e70747b83909da097859aafc8af9a85705a45301b000000000000031729394a5c697e93a1b2a1947f6a5d4b3a2a1808000004182a3b51677c91a3b39e8978665e5957595e6678889db3a2907b65503b2a180500142a3f54697f94a9bebcab8c77624c37220d0000000000000000000a1e33465773899eb3c2ad97826d58422d180020354a60758a9fb5bca7927d7171758298a3b5b5a397816d604e3e2e1d0d0000000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120000000e1e2c353b484c4e4c473a342b1d0d000000000000000000000000000000000000000a1e3246576c8297acc1b19c877271869bb1c3ad98836e5947341808000000000000000000000000000000000313212c3235353534312220180d171e212c35383d404141403d393530251f170c000000000000000000000000000000000000000000000000000f1f31414b6075869ca8b7a599836e614f3e2e1c0c00000000000020354a60758a9fb5bda7927d68523c2b19050000000000000000000000000000000000000000000000000000000000000000000e1e2e3e4b59626e7981868b8d8f908b75604b36210b0011273c51667c919d9d9fa9adb2b7b2a097826d5e4c38240e000000000c2035495a6e8399a9babaa99e897a6c635b5a58585460656e7b889ba29aa2b4c5af9a85705a45301b000000000000000b1b2d3e4f606e8399a5b49f8c7b65584736251300000b1f34475970859bb0a6927d675a4c4042404c5a667c91a4b09a85705947341f0b0012273c52677c91a7c3c9a48f7a644f3727150100000000000000000d21364c61768ba7b8c7aa95806b55402b160020354a60758a9fb5c7b29d8786878a98a0b2b7a69b8574604b42312010000000000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d281200000b1b2c3c494d59626461584d483c2b1b0b000000000000000000000000000000000000031629394f64798ea3b5b6a48e7a798da3b5b6a5907b65503b2a18000000000000000000000000000000000000030f181d1f1f1f1f1c0d0b0500030a0e1a2123272a2c2c2b2824201c130804000000000000000000000000000000000000000000000000000001131e32455763798a9fb4b3a1947e695c4b3a291808000000000020354a60758a9fb5c3ae99836e5a48352010000000000000000000000000000000000000000000000000000000000000000009192c3c4b5c6477838c969c9faba4ab8b76604b36210b000d23384d6278868888898e98a0b1bdb19f917c66513c2c19060000000e23384d63788c9fb5c5b49f8b7a645c4e493d4336434b505d6577859ba3b4c0c5af9a85705a45301b0000000000000000102032424c6176879daaaa9d8776615443301c10000c22374c61778ca3b39d8874604b3c2f2d2f3c4a6073879cb19f8b77624c37220d000d23384d62788da5b6c0aa95806b5544311d11060000000000050f1d2f3f52677c92a7c5baa9907b66513b26110020354a60758a9fb5cab7a59d9b9c9ea8b2b7a59d887862564532241402000000000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812000417293a495a626f7779776f625a48392917030000000000000000000000000000000000000b22364a5c71869bb0c2aa95807f94a9c1b29c8773604a35200c000000000000000000000000000000000000000004080a0a0a0a0600000000000000060c0e1215161716130e0b0700000000000000000000000000000000000000000000000000000000000003162839495b687d92a0b1b49f8b7a645847362513000000000020354a60758a9fb5cab49f8b78624d3e2e1c0d030000070b0700000000000000000000000000000000000000000000000001142637495b647a88989fabb1a7a89e9d8b75604b36200b000b2035495a62717273747982979fb1beb09b85705a4935200c000006192c3c566b8095abbcb9a795806b5c4b3e352c2d2630353f4c596276859ba6b7c5af9a85705a45301b000000000000000002141f334658647a8b9fb4a6998372604a3e2e1c0c12273c52677c91a7ac97826c5544311e171c3043546b8095abab927d67523d2812000b2035485a72879db2c4b29c8774604b3e2f211a12100f101118202c3c4c5d6f8499aec8b49f8a76614c36210c0020354a60758a9fb5cfbfb3aeaaacb2b7c3b29d8779635a483828150600000000000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812000a1f3346586278848c8e8b8478625746331e0a000000000000000000000000000000000000071b2d3e53687e93a8b9b09b85849aafbbaa947f695443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0b0b0b0b0b0b0b0b1b2c3d4e5f6d8297a4b5aa9d8776615443301c100000000020354a60758a9fb5cebbaa97816c5c4a3a2b1e1618131c201c130800000000000000000000000000000000000000000000081d3144556379899da6b5a59c928c8988806b5544311d080006192b3c494d5c5d5460646d8197aabbb4a28d78634d38230e00000c2035495a72879cb2c9b39e8976614c3e2e211a18141c202f3b48586277889db3c5af9a85705a45301b0000000000000000000417293a4a5c697f94a1b3a1947f695c4b3a2a17162b40566b8095aba8937d68533727150013253651667c91a6ac96816c57412c170006192b3c54697f94a6b8b6a5937e695c4b3f352c27252425272b343d495a657b90a1b3bbaa98826d5846331f0a0020354a60758a9fb5c7b3a19995979da5b4b39d887b655d4b3e2d1f0f00000000000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812000c21364c6176879aa2ab9f998776614c36210c000000000000000000000000000000000000001021364b6176899eb4b49f8c8b9fb4b49f8b77614c36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1114161614110c0a0400000000000000000000000009141d202020202020202020202031414b6075869ca8b7a5998372604a3e2e1c0c00000020354a60758a9fb5d6c8b49f8c7a6458483b32282d253035302518170900000000000000000000000000000000000000000b20354b6073869ca7b4a29a877d7674736b62513727150200000e1e2b35384748434a4e62778b9fb4c0a7927d67523d281200000d23384d62788da5b6c9ad98826d574633201006000108111d2b3a48596c8196abc1af9a85705a45301b000000000000000000000c1c2e3e4f616e8399a5b49f8c7a645847331f182d42576d8297aca5907b66503b2611000f24394f64798ea4ad98836e58432e1900000e21374c6176889eb3bcb49e8a7a655d4e493d3c3a393a3c3b484d5b6378879db2bfb49f8b79634e3a2917040020354a60758a9fb5c3ae99838082879ba2b4a69d8b7b655c4a3d2c1e0e000000000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d281200172c41576c8196a5b4bcb5a597816c57362614010000000000000000000000000000000000000a1e3346576c8297acbcab9f9fa9baae98836e59473418080000000000000000000000000000000000000000000000000000000000000000000000000000000000050b161e2126292b2b2927211f170c080100000000000000000919263135353535353535353535353535455763798a9eb4b3a1947f695c4b3a2a1704000020354a60758a9fb5c6b9aa9f9c867662594b45394236434a43363527170500000000000000000000000000000000000004182a3a52677d92a4b5a79a84756761585e565144341909000000000e19202332253035475971869bb1c0ab96806b56412b16010012283d52677d92a7c3bcab917b66513929170200000000000d1c2b3b566c8196abc1af9a85705a45301b0000000000000000000000102032434c6176879daaaa9d8776614c4332202e44596e8399aea48f7a644f3a250f000e23384d63788da2af9a856f5a45301a00000a1f334758677c919eb5b9a89e897b6d635b5652504e4f515559626b79879ca5b7b2a095806a5b4a361c0c000020354a60758a9fb5bca7927d6b6c75849ba4b5a99e897a645b493c2b1d0d0000000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812001e33485e73889db3c3cfc3b39e89745443301c08000000000000000000000000000000000000031729394f647a8ea3b5bcb4b4bab6a5907b65503b2a1800000000000000000000000000000000000000000000000000000000000000000000000000000000000d18202932363b3f40403e3c37332a201d140900000000000001142637444b4b4b4b4b4b4b4b4b4b4b4b4b4b4b5b677d929fb1b49f8c7a645847331f12000020354a60758a9fb5b9a89e8a9f9b8577696057585859546054524535220f0000000000000000000000000000000000000a1f33475871869bb0b39e897761574c473a413d342616000000000000060b0d1c131c2a3b596e8499aec2ac97826d57422d180200162b41566b8096abc0b59f8b76614c36210c00000000000000172c41566c8196abc1af9a85705a45301b000000000000000000000002141f334758647a8c9fb4a599836e614f3e2e2e44596e8399aea48f7a654f3a2510000e23384d63788da2af9a856f5a45301a00000417293a4d5f6b80959fabb7a79e908279706b67656465666a6f77808b9ca5b6b3a0988273604b3d2d1a00000020354a60758a9fb5bca7927d67576176869ca5b6a79e8879635a483b2a1c0c00000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812001f34495f74899eb4c9dacab49f8a72604b35200b000000000000000000000000000000000000000b22364a5c71869bb0c6c7c7c8b29c8773604a35200c00000000000000000000000000000000000000000000000000000000000000000000000000000002101d2b3439464b5054565554514c473a35312619110300000000081d31445560606060606060606060606060606060606d8297a4b6aa9d8776614c40301d0a0020354a60758a9fb5b39e898297a39b887e75706e6d6f72756c63523e2a090000000000000000000000000000000000000c22374c61778b9fb5ab95806b594739332a2b292116080000000000000000000000182e43586d8398adc2ae98836e59432e190400192f44596e8399aec3b29d87725746331e0a00000000000001172c41566c8196abc1af9a85705a45301b00000000000000000000000004172a3a4b5c697f94a1b3a1947e695c4b3a2942576d8297aca5907b66503b2611000f24394f64798ea4ae98836e59432e190000000c1c304150626b808d9da5b2b39f978d85807c7a797a7c80848b959fa9b3a79e938273605544311f0f00000020354a60758a9fb5bca7927d6752586277879ca6b7a69d87786259483a2a1b0b000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812001b31465b70859bb0bdc5bcb19c86715443301c0800000000000000000000000000000000000000071b2d3e53687e93a8b2b2b2b2aa947f695443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000010202e3b484d576166696b6b69666158524b44372e2114060000000b20354b6073757575757575757575757575757575757475869cb1b7a599836f5f4d3924100020354a60758a9fb5b29d87778a9fa69e938a85838284878a816c5737271501000000000000000000000000000000000011263c51667b91abbca48f7a654f3b2a1f1716140e04000000000000000000000003182e43586d8398adc2ae98836e59432e1904001c31465b71859bb0c5af9a85705a3929170300000000000001172c41566c8196abc1af9a85705a45301b000000000000000000000000000c1c2e3e4a60728399a6b49f8b7a6458463341566b8096aba8927d68533625130011263c51667b91a6ac97816c57422c17000000001223334450616a7b87939da5b4ada39b96918f8e8f91959a9faab4a79e95897e6d6055443726140100000020354a60758a9fb5bca7927d675247596278889da7b7a69c877762584739291a0a0000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120011273c51667c919faeb0ad9e917c66513626140100000000000000000000000000000000000000001021364b61768a9d9d9d9d9d9d8b77614c3625130000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2e3e4b59626c767b7e80807e7c76706760554b3f3124140200071d32475c72868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b9ca4b6c3b3a1917c67513c27120020354a60758a9fb5b09b86707f94a1b3a99f9a9897999c9d88735544311d08000000000000000000000000000000000014293e53697e93a8b6a18c76614c37210c0400000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904001d33485d72879db2c3ad98836e58432e190000000000000001172c41566c8196abc1af9a85705a45301b0000000000000000000000000000101c3043546176889daaaa9d8776614c423d52677d92a7ac97816c5443301c131b2e3f556a8095aaa8937d68533e2813000000000416263343505d65747e87929fa9b4b0aba7a5a3a4a6aaafb4ab9f9588807668604b44372719090000000020354a60758a9fb5bca7927d67523b485a6379899ea8b6a59c86766157463828190900000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812000f24394c5e6c8191989b9890806b5e4c3918080000000000000000000000000000000000000000000a1e3346576b80878888888887816c5947341808000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4b5c6477818a9094959593918b857d73655d4e42311f0b00071d32475c72879ca0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0b1b6c2c9bfae98836e59432e190020354a60758a9fb5ae99846f728399a3b3b4b0adadaeb29f8a74604b35200b0000000000000000000000000000000000152a40556a7f95aab5a08a75604b35200b0000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904001e33495e73889eb3c2ac97826d57422d180200000000000001172c41566c8196abc1af9a85705a45301b0000000000000000000000000000001325364758657b8c9fb4a599836e604f3e4d62778ca4b29d8773604a3a2c282c394b5d71869bb1a58d78634d38230e0000000000081625333f4c566069727d899fb4c2c8bbb4b3b4bac7c1b59f8a7f746b61584e4231271909000000000020354a60758a9fb5bca7927d67523d3c495b647a8a9ea9b5a49b857561564537271808000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d281200091d304052636c7c8385837b6b625140301d000000000000000000000000000000000000000000000317293951626b7272727272726c63523b2a180000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a647a88979fa9a9abaaa9ab9f9b92877b68604e3a261100071d32475c72879cb1b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b19b86715c46311c0020354a60758a9fb4ad98826d6176859aa1b2b6c3c0c1bcab8c77624d37220d0000000000000000000000000000000000162b40556b8095aab6a18b76614c36210c0000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904001f34495e74899eb3c1ac97816c57422c170200000000000001172c41566c8196abc1af9a85705a45301b00000000000000000000000000000008182a3a4b5d6a7f94a1b3a1937e695c4a485971869cb1a5907c6658493d3e3c4957657b8fa3b29c87725b4935210c00000000000013233343505f6778838d9fa9b4ada6aa9f9e9fa9a5abb3ab9f95847a6a60544336261401000000000020354a60758a9fb5bca7927d67523d2c3d4a5c657b8b9faab5a39a8474605544362614010000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812000012223445525e666e706d655d514434221200000000000000000000000000000000000000000000000b1b344451565d5d5d5d5d5d575245351d0c000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4d6278899da6b4babab4afadafb4b0a59c8c7e68533e291300071d32475c72879c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b86715c46311c0020354a60758a9f9f9f95806a58617684929ca5a9ababa9a78e7a644f39240f0000000000000000000000000000000000152a3f546a7f94a9b7a28d77624d38220d0000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904001f34495e74899eb3c2ac97826d57422d180200000000000001172c41566c8196abc1af9a85705a45301b000000000000000000000000000000000c1c2e3f4a6072849aa6b49f8b7a64584653687d92a5b29d8776635b5453545b6375869cb1a6937e68533c2c190600000000000d1d304150616a7d8a989fabaa9f97918c8a88898b90969ea8b5a29a8c8072605443301c10000000000020354a60758a9fb5bca7927d67523d282d3e4b5d667c8c9fabb4a2998373605443301c160700000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812000004172734404c51595b58504c3f342616040000000000000000000000000000000000000000000000001626343d41484848484848423e3527170000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a6e8399a7b8c1b5a99f9a97999ea8b4a0907b65503b251000071c31475c71868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a85705b46311b001f354a5f748b8a8a898678624d5861727d878f9395969491897a644e39240f000000000000000000000000000000000013283d52687d92a7b9a38e79644e39240f0000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904001e33485d73889db2c3ae98836e59432e190000000000000001172c41566c8196abc1af9a85705a45301b0000000000000000000000000000000000101c3043546177889daaa99d8776614c4b6074879daaa59b85796f6a686a6f78859ba4ab9d8875604b36210e000000000005182b3b4d5f6a7f929ea8b4a29a8b827c76747374767b818998a0b0aa9f958272604b3f2e1b080000000020354a60758a9fb5bca7927d67523d28202e3f4c5e677d8d9fb5b3a1988272604b4433251506000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120000000917222f383c4346433b382f21160800000000000000000000000000000000000000000000000000081621292c3333333333332d2a2217090000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788b9fb4c5b5a39b8b84828489959f98826d5d4b37230e00051a2e4356677174747474747474747474747474747474747474747474747474706755422e19001d32475b6d7474747471625a494654606873797e80817e7b75645c4a36210d000000000000000000000000000000000010253a50657a8fa5c5a5907b65503b26100000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904001c31465c71869bb1c4af99846f5a3828160300000000000001172c41566c8196abc1af9a85705a45301b00000000000000000000000000000002080b1325364759657b8c9fb4a598836e604e56657b8c9fb4a39b8b847f7d7f848b9ba3b49f8d7b655645321e0900000000000b20344859677d929db4b2a09884786d6661585e5761656c7782959eb0b4a095806b5d4b37220f0000000020354a60758a9fb5bca7927d67523d2812212f404d5f697e939dafb2a097816c625143322414050000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120000000004121d24262e302e26231c1103000000000000000000000000000000000000000000000000000000040e14161d1d1d1d1d1d17150f050000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93abbcbaa99b85786f6d6f76808a8977614c3f2f1c08000013273949565c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b554938261300182c3e4f5b5f5f5f5f5c4d493c36434a546064696b6c696661574a3e2d1a0700000000000000000000000000000000000d22374c62778ca7b8a8937e69533e29140000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904001a2f44596f8399aec4b19c87715645321e0900000000000001172c41566c8196abc1af9a85705a45301b00000000000000000000040a0c1319151d201d182a3b4b5d6a7f95a2b2a0937e685c4b5d697f929fa9aa9f99949394999faaa99f927f695d4b3828160300000000031629394d62778a9eb4b6a5988274635b514c473a464b5059616d8095a1b3b09e8f7a644f3d2d1a0700000020354a60758a9fb5bca7927d67523d2812122230414f606a7f959eb0b19f95806b614f423123120100000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812000000000000090f11191b18100e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d42586d8297adc9b49f8b78625a5858616a78786259473421110000000a1b2b3943474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4642382b1b09000f21313e474a4a4a4a4738352b253036434b4f54565654514b46392d200f0000000000000000000000000000000000000b1f34475973889eb3ac96816c57412c170000000000000000000000000000000003182e43586d8398adc2ae98836e59432e190400162b41566b8096abc0b49f8a76604b36210b00000000000001172c41566c8196abc1af9a85705a45301b0000000000000000010b171f21282e27313631272c2e3f4b6072849aa6b49f8b7a64574f61697d8b989fabada9a8a9adab9f988b7d69614f3f2f1a0a00000000000a1e3246576d8297a8b9b29c87756156493c37332a32363a474c6072849aafbcb09b85705c4a36210d00000020354a60758a9fb5bca7927d67523d2812041323324250616c80969fb3b49e947f6a604e41301d0a00000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1020202020202012100a0000000000000000000000000000000000000000000000000000000000051a2f445a6f8499afc4af99846f59483c464c5a63625a483b2a1803000000000d1b272e3135353535353535353535353535353535353535353535353535312e261b0d00000313212c323535353431232019131c2630353a3e40413f3c3632281b0f0100000000000000000000000000000000000005182a3b5a70859aafaf9a846f5a3a29170400000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040012273c52677d91a7c1bbaa8f7a644f36251300000000000001172c41566c8196abc1af9a85705a45301b0000000000000009151d2933363d4437444b4437413a3743546277889daba99c8775614b4f5f6778838c9297999b9997928c8378685f4f433221110000000000000c21364b6176899eb4b8a6917c675746382c211f171e212a34435463798ea2b4b4a38e79644e39240f00000020354a60758a9fb5bca7927d67523d28120005142433434a607281959d9f9f9f937e685f4d39251000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d2812000000000000000000000000000000000000050b0d1315130c0a0400000000000000000000000000000000000000000000000000000003111c232635353535353527241d1204000000000000000000000000000000000000000000000000000000061b31465b70869bb0c1ab96816c563b2b333c494d4d483c2b1d0c0000000000000a131a1c1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1b19130900000000030f181d1f1f1f1f1c0d0b060008141c2024292b2c2926211e160b000000000000000000000000000000000000000000172c41576c8196acb29d88735846331f0a00000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000d22374c62778ca3b5c8ab95806b5443301c0b000000000000172c41566c8196abc1af9a85705a45301b0000000000000b1927313a464c52595d5560555c564f4b3f4859657b8d9fb4a598826e604e4d5a636e777d82848684827d776e635a4e413225140300000000000012273c51677c91a8b9b39e8874604b39281a0e0a040a0c182536495b70859ab0c1aa95806a55402b1500000020354a60758a9fb5bca7927d67523d2812000006151c30435460727f88898a8a8a8b7c67523c271200000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d281200000000000000000000000000000000000d182022292b28221f180c000000000000000000000000000000000000000000000000000011212f383b4a4a4a4a4a4a3c39302312000000000000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b1f2c353838352b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004080a0a0a0a07000000000001080b0f14161714110c09030000000000000000000000000000000000000000000013293e53687e93a8b7a68b76614c36210c00000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000b1f34485970859bb0c5b29d8773604a3928190a0100000109142c41566c8196abc1af9a85705a45301b00000000000b1b2937444b5861686e72747574716b655d4e4a4c5d6b8095a2b2a0937e685b4a494d5962686d6f706f6d6862594d493c3123140700000000000001162b41566b8096abc6ae99836e5544311b0b000000000008182c3d556a8095aabfaf99846f5a442f1a05000020354a60758a9fb5bca7927d67523d2812000000001325364354606a737474747474675f4d39251000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aabfbca7927d67523d281200000000000000000000000000000005131d2b34373e403e37332a1c12040000000000000000000000000000000000000000000000081c2f3f4c50606060606060514d41301d0a0000000000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b161920232320190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c4a48f7a644f3a250f00000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040005182a3b53687d92a7b9b7a5917c67574637281c141313141d263143566c8196abc1af9a85705a45301b000000000a1a293946556069767d83878a8b8986817a6f645c4d4b6073849aa6b49f8b796357463b484c53585a5b5a58534c483b352c1e13050000000000000004192e44596e8399aebfaa957f6a553727150000000000000012273c51677c91a6bcb29d87725d48321d08000020354a60758a9fb5bca7927d67523d28120000000008182536434a555e5f5f5f5f5f524d41301d0a00000e23384d63788da2b2b2ae99846f59442f1a04000000000000000000000000000000152a3f556a7f94aab2b2a7927d67523d28120000000000000000000000000000021323303b484c5355534c473a2f221201000000000000000000000000000000000000000000000e23384c5d65757575757575675f4d39240e0000000000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b16060c0e0d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba7b9a7927d68523d281300000000000000000000000000000003182e43586d8398adc2ae98836e59432e190400000d21364b6075899eb3c3b29d87756155453830262828263137444b616f8499aec4af9a85705a45301b00000002162838465761737e8892999d9fa79e9c968f847a675f4e556277889eaba99c8675614b4234373d42444644423d37342a20190e000000000000000000051b30455a70859aafbea8937e69533e29140000000000000010253a50657a8fa5bab39e89735e49341e09000020354a60758a9fb5bca7927d67523d28120000000000081825303540484a4a4a4a4a3c393023120100000e23384d63788d9d9d9d9d99846f59442f1a04000000000000000000000000000000152a3f556a7f949d9d9d9d927d67523d28120000000000000000000000000000102030414d5962686a6861584c402f1f0f00000000000000000000000000000000000000000005182b3b50657b8a8a8a8a8a8a7d67513c2c190600000000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465874899eb3a9947f69543f2a1400000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000091e3245576b8096a5b7b7a698827360564b43363d3d37444b55606b7f95a1b3c5af9a85705a45301b000000091e324556617584939ea7aea8a4a3a5aaaba29a8b7d68604e59667c8d9fb5a498826d604e3d2d282d2f312f2d28221f180d0600000000000000000000061b30455b70859ab0bea9937e69543e29140000000000000010263b50657b90a5bab39e89745e49341f09000020354a60758a9fb5bca7927d67523d281200000000000008131c202a33343535353427251d12050000000d22384d6278878888888887816d57422d180200000000000000000000000000000014293e53697e8788888888877c66513c271100000000000000000000000000071b2e3e4d5f67777e807d77665e4c3d2c1a0600000000000000000000000000000000000000000b203448596e83999f9f9f9f9a846f5b4935210a00000000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5c71879cb1ab95806b56402b1601000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000031628394b6175879db2bdb2a0988274666054545252555560657380959dafbfc5af9a85705a45301b0000071b2e3e4b6074859aa2b3a39b938f8e8f959da6a99f927e685c4c5e6b8095a2b2a0927e685b4a3928161a1b1a18130d0b0500000000000000000000000004192f44596e8499aec0ab95806b563b2b180500000000000215283852677d92a7bcb29d88725d48331d08000020354a60758a9fb5bca7927d67523d28120000000000000000070b151e1f1f1f1f1f12100a01000000000b2035485a627272727272726d63523f2a160100000000000000000000000000000012263b4f6069727272727272665e4c39240f000000000000000000000000000d22364a5c677d89939593887c665b4935210c00000000000000000000000000000000000000011426374c62778b9fb4b5b5b59f8c78634d38281602000000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365b70869bb0ac97826c57422d1702000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000a1e324657667b909fb0beb2a098877b746d6a68686a6d747b85959eb1b5c1c5af9a85705a45301b00000d22364a5c6c8197a3ae9d94857e79787a7f8899a1b49f8b7a64544b6073849aa7b49f8a79635746321e130105030000000000000000000000000000000001162c41566b8196abc6af9a857059483420130700000006101d3245566c8297acc1af9a846f5a452f1a05000020354a60758a9fb5bca7927d67523d28120000000000000000000000090a0a0a0a0a000000000000000005192b3c484d5d5d5d5d5d5d57524535230f000000000000000000000000000000000c1f32424f535d5d5d5d5d5d514c40301d09000000000000000000000000000f243a4f647a8c9ea8aaa69e8a79634e38230e00000000000000000000000000000000000000081d3144556a7f95aabbcecfbcab96806b5645321e09000000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d101c30435471869bb0ac97826c57422d1702000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000000031628394c5e6c8196a0b4bcb2a59c9088827f7d7d7f8288909ba39f9ba3b5c5af9a85705a45301b0005182a3b4f647a8f9fb19f947f72686463656a758399a3a99c8672604a556278899eaba99c8675614b41311f0f0000000000000000000000000000000000000011273c51667c91a8b9b49f8b77624d4030221b16151619202e3d4b6075889db3c0aa957f6a55402a1500000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000e1e2b3538484848484848423f3527170600000000000000000000000000000000021424323b3e4848484848483c3930221200000000000000000000000000001a2f455a6f849aaab9c5b8a998826e59432e19000000000000000000000000000000000000000b20354b6074879db2c8cecac9b39e8975604b36210f000000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520282d384a6074889eb3aa947f6a553f2a1500000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000000000b1b2f404b607282959fabb5b6b2a69e9794929294979ea6a79e8a859bb1c5af9a85705a45301b000b1f3448596e8399aea897816c60544f4e50576073859bb1a4917c67514859667c8d9fb5a497826d5f4e3d2c1a0a0000000000000000000000000000000000000c21364b6176899eb4bbaa97816c5e4d41362d2b2a2b2c353f4b5b697e93a6b7b4a28e79634e39240e00000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000e1920223333333333332d2a23170900000000000000000000000000000000000006141f262933333333333327241d120400000000000000000000000000001e33495e73889eb3c8d5c7b29d87725d48331d00000000000000000000000000000000000006192b3c51667c91a5b7c8bbb4bbb8a7927d67523d2d1a070000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525333c3e4a56657a8fa7b5a38f7a644f3a250f00000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000111c3043546072808c9ca4afb4b8b3aca9a7a7aaacb0a199897a8196abc1af9a85705a45301b000d22374c62778c9fb49e8a76614c433639394555657a8fa4b09a857058464c5e6b8096a3b1a0927d685b493828160300000000000000000000000000000000000a1e3246576c8196a7b8b59f8d7c675f4f4a3e413f403c494d5d65798a9fb4bbaa9a846f5b4a36210c00000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000050b0d1d1d1d1d1d1d18160f060000000000000000000000000000000000000000020c12141d1d1d1d1d1d110f09000000000000000000000000000000001e33485d73889db2c6d3c4b29c87725d47321d0000000000000000000000000000000000000b2035485a6f8499afc3b7aa9faabbb09b85705b4a36210b0000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20334350555c6474859bb0a89b85705c4b37220d00000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000011426364354606b7b86919a9faaa9abacaba9a6a29a9184786c8196abc1af9a85705a45301b0012273d52677c92abad97826d584633252328374b5d71869cb19f8b76614c404b6073859ba7b49f8a79635645321e130100000000000000000000000000000000031629394c6176899eb3bcab9f8b7d6e645c58565456575a636d7b889da8bab49f8c79634e3d2d1a0700000020354a60758a9fb5bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8298a8b6c2b6a697816c57422c170000000000000000000000000000000000021527374d62788c9fb4b7a69d8a9fb4b4a28e79634e3929160300000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283c50616a737a859ba3a79e8a79634e3e2e1b0800000000000000000000000000000003182e43586d8398adc2ae98836e59432e190400000000000008182636434a5d65737c858b909496969694918c857c6f636c8196abc1af9a85705a45301b00172c42576c8197aca7927d68523a29170e192e3f576c8197acaa917c66513c44556278899eb3a89c8675604b41301f0f00000000000000000000000000000000000b1f334758687d929eb0baa99f92837a736d6b6a6b6d7278828c9da6b8b3a196816c5b4a361f0f0000000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101619202020202020202020202020202020202020202020202020202020202020202020110f09000000000d22384d6278899da5a7a49c8876614c37210c0000000000000000000000000000000000081d3144556b8095abbcb29d888499aec0ac97816c5746321e0a00000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f888e9ba39e97897b655b4a3620100000000000000000000000000000000003182e43586d8398adc2ae98836e59432e190400000000000000081825303f4b55606770767b7e8081817f7c7770665e566c8196abc1af9a85705a45301b001a2f445a6f8499afa48e79644f39240f0013283e53687d93a8a9947e69543f37485a667c919eb0a497816d5f4d3d2c1a0a0000000000000000000000000000000004172a3a4e606b80959fb3b9b4a1998f8883807f8082878d979faab8b4a1998373604b3d2d1a010000000020354a60758a9fb5bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18232b2e35353535353535353535353535353535353535353535353535353535353535353526231c110400000b2034485a657b878f928f867a645847331f0a00000000000000000000000000000000000b20364b6074889db3c7ad97827f94a9c4b49e8976614b36211000000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172d42576c8297a6b09e8a8178655d4b3d2d1a020000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000000000000000008131c2e37444b52586166696b6c6b6a666259514c566c8196abc1af9a85705a45301b001c31465b71869bb0a28d77624d38220d0012273c51677c91a6ab95806b56402b3c4c5e6c8196a3b19f927d675b4938281602000000000000000000000000000000000c1c314251626c81919ea7b4b3aea69d98969495979ca4acb4b4aa9f948374605544311f0f000000000020354a60758a9fb5bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000618283640434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b382f2211000005192b3c4b5d65747a7c7a73645c4a3a2a170400000000000000000000000000000000061a2c3d52677c91a6b8baa9927d7a8fa6b7b9a8937e68533e2e1b08000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172d42576c8297a8b29c877e74635a493b2a18050000000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000000000011192631353a474c515456575654514c473b41566c8196abc1af9a85705a45301b001d32475d72879cb2a18c76614c37210c0011263b50667b90a5ac97826c57422d2f404b6074859ba7b49e8a79635645321e1300000000000000000000000000000000001323334451636c7d89969fa8b0b4b2adaba9abacb1b4b1aa9f988b7f7260564537261401000000000020354a60758a9fb5bba7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102336465358606060606060606060606060606060606060606060606060606060606060606060504c402f1c0900000d1d2e3f4b556065676460544a3d2d1c0c00000000000000000000000000000000000c2135495b70859aafc4b49f8a7673889db2c6b19b86715c4b37220c000000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172d42576c818c939da59c938678635948341f0e0000000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000000000000000000000009141d202933373b3f4141413f3c37342a41566c8196abc1af9a85705a45301b001c31465c71869bb1a28c77624d37220d0011273c51667c91a6ab96816b56412c1d3144556278899eb3a89c8674604b41301e0e000000000000000000000000000000000516263445515f6777818a949b9faaa6a8a8a8a7ab9f9c958b8279696054453828190900000000000020354a60758a9fa6a6a6927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b4053646e757575757575757575757575757575757575757575757575757575757575757575665e4c38230f00000011212e37444b50524f4b43362d1f0f0000000000000000000000000000000000031628384e63798da2b4c5ae99836e6c8196acc2b5a38f7a644f3a2917040000000000000000000000000000000000000000061c31465b71869bb0c0ab95806b56402b160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073777d889da6a49c8777624c3d2c1a0600000000000000000000000000000003182e43586d8398adc2ae98836e59432e190400000000000000000000000001080c171f2126292b2c2c2a27221f2c41566c8196abc1af9a85705a45301b001a30455a6f859aafa38e79634e39240e0013283d52687d92a7aa947f6a553f2a152737495a667c919fb0a497816c5f4d3c2c1a0a0000000000000000000000000000000008162634414d59626c777f858a8e91939393918f8b8680786d635b4a4336281a0a0000000000000020354a60758a90909090907d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7c66503b26110000000311192731353a3d3a353026180f010000000000000000000000000000000000091e3245566c8196abc0b8a6917c67657a8fa4b6c1ad97826d5847331f0a00000000000000000000000000000000000000080e1c31465b71869bb0c0ab95806b56402b1612121212110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445560626877879db2a599836e5b4935210c00000000000000000000000000000003182e43586d8398adc2ae98836e59432e1904000000000000000000000000000000040a0c111416171615110d172c41566c8196abc1af9a85705a45301b00182d43586d8298ada6917c675137261406192c3c566b8196aba7927d68523d2813192b3c4d5e6c8196a3b19f917d675b493828150200000000000000000000000000000000081623303b484d58616a7076797c7d7e7d7c7a76716b625a4e4a3d3025180a000000000000000011263b51667c7b7b7b7b7b77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e83989f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f907b66503b2611000000000009151d20252725201c1408000000000000000000000000000000000000000b21364b6075899eb3c9b39e8875605d71869cb1c7b49f8a76614c372111000000000000000000000000000000000003111c232531465b71869bb0c0ab95806b56402b272727272726241d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b4d59677c91a8b59f8c78634e38230e00000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000000000000000000000000000000010201000001172c41566c8196abc1af9a85705a45301b0013293e53687e93a8ab96816b5544311f1a2135495b70859bb0a68d78634d38230e0e1e30404b6074859ba8b49e8a79635645321d12000000000000000000000000000000000005121d2b343a474c545660646768696867646157554d493c362d1c13080000000000000000000f24384c5e66666666666662594834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc0b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a5907b66503b261100000000000e19202325252524211a0f010000000000000000000000000000000000071a2d3e52687d92a7b8bcab96806b5654697e93a9babaa9947e69543f2e1c080000000000000000000000000000000512212e373a3c465b71869bb0c0ab95806b56403c3c3c3c3c3c3c382f22120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192631353b4b6075899eb4ab937e69543e291400000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b000e23394e63788ea3b29d8874604b3e332c35424d63788c9fb29d88735b4935210c00121d3245566378899eb3a89b8574604b41301e0e0000000000000000000000000000000000000d18202a333738454b4f51535353524f4c463938352b211a0f0000000000000000000000091d2f404c5151515151514d483b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a2b4c1d1d2c1b5b1a8acb0b2b4b9c6b5b5b5b5b5b5b5b5b5b5b5b5b5c5b8a5907b66503b2611000000000e1e2c35383a3a3a39362d1f0f00000000000000000000000000000000000d21364a5c70859bb0c5b59f8c78634d4c61768a9fb4c7b19c87725d4b37230d0000000000000000000000000000011223303f4b5051515b71869bb0c0ab95806b5651515151515151514c402f1d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2031445571869bb1ac97816c57422c1702000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b000c2135495b71869bb1a6937e685c4c473d494e606e8298aba996806b563c2c19060002152838495a677d919fb1a397816c5f4d3c2c1a0a000000000000000000000000000000000000050c181f22283236393c3e3e3e3c3a3633292320190e070000000000000000000000000012222f383b3b3b3b3b3b37342b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073849aa3b5c1c9b5a39b93979b9d9ea89f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa79e8d79634d38230e00000006192c3c494d5050504e4a3d2d1a07000000000000000000000000000000031729394e64798ea3b5c5af9a846f5b4947586d8298adc2b6a4907b65503b2a1805000000000000000000000000000a1d30414d5d6567676771869bb0c0ab95806b6767676767676767665e4c38240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001081527375b70869bb0ac97826d57422d1802000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b00061a2c3d52677c91a3b49e8a7a6a61585c5b636d7e93a0b49f8b77624d37220e0000000a1a2c3c4d5f6c8197a3b19f917d675a493827150200000000000000000000000000000000000000040a0c161e2124272829282725211e170d0b0600000000000000000000000000000004121d242626262626262220180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556176859ba3b5c1b19b867e828687898a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a887f695b4935210c0000000c2035495a63656565635b4a36210c0000000000000000000000000000000a1e3346576c8297acc1b8a6917c67523c3a50657a8fa4b6c2ad98836e5947341f08000000000000000000000000001024394d5f677a7c7c7c7c879db2c3ae99837c7c7c7c7c7c7c7c7c7c66513c2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395c71869cb1ab96806b56412b1601000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b00000f20354b6073859ba7a89e8a7f777271737982939cada295806b594834200b000000000e1e30414b6074859ba8b39e8978625645311d120000000000000000000000000000000000000000000003090b0f12131413120f0c0a030000000000000000000000000000000000000000090f1111111111110d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115273746586176859ba3b5b5a398827570727475757575757575757575757575757575757369614f3c2c19060000000e23384d63787a7a7a79634e39240e0000000000000000000000000000000c21364b6176899eb4c8b39e8875604b36374b5d72869cb1c7b49f8b77624c3626140100000000000000000000000012273c51677c8f919191919da5b6c6b3a19991919191919191919189735e49341e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455773889eb3a9947f6a543f2a1500000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b0000081d3144556278899ea6a89e948b8786888d97a0b4a29a8473604b3b2b18050000000000121e32455663798a9eb4a89b8574604b40301c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919293a46586176859ba3b5b2a0978172605460606060606060606060606060606060605e544f43321e0e00000003182d43586d828f8f8f85715b3726140100000000000000000000000000081b2e3f53687e93a8b9c0ab96806b5645312e3f54697e94a9babbaa947f6a5443301c08000000000000000000000000152a3f546a7f94a6a6a6a6b2b6c3cfbfb3aea6a6a6a6a6a6a6a69e89735e49341e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba6b8a8937d68533e281300000000000000000000000000000003182e43586d8398adc2ae98836e59432e19040000000000000000000000000000000000000000000000000001172c41566c8196abc1af9a85705a45301b000001142637485a647a889aa2aeab9f9c9b9da6adaa9f978476615544311d0d00000000000002162838495b677d929fb1a396816c5e4d3a2a180400000000000000000000000000000000000000000000000001080b0f121516161513110d0b05000000000000000000000000000006121b2020202020202012100a0100000000000000000a141a1d202020202016140d040000000000000000050f151720202020201b19130900000000000b1b293a46586176859ba3b5b19f978172604a444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a493f3b32251400000000051a30455a6f859aa59d88735544311d08000000000000000000000000000d22374b5d71869cb1c6b4a28d78634d382721374c61778a9fb4c8b29d8773604b35200e000000000000000000000000152a3f546a7f949c9ea8a4aeb2bfcfbeb2ada5a5a5a5a5a5a5a59e89735e49341e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c4a5907a65503b251000000000000000000000000000000003182e43586d8398adb4ae98836e59432e19040000000000000000000000000000000000000000000000000001172c41566c8196abbbaf9a85705a45301b00000009192b3c4b5c64788490999fa8a6a7a5a69d978c817461584737271500000000000000000a1a2c3d4d5f6c81959c9d9d917c665847331f0a00000000000000000000000000000000000000000000070b141d2024272a2b2c2a29272220180d0b05000000000000000000000616242f3535353535353528251e13050000000000000e1c272f3235353535352b282116080000000000000917222a2c3535353535312e261a0c00000000000b1b293a46586176859ba3b5b19f96816c6251443435353535353535353535353535342a2720140700000000021628385c72879cb19f8a75604b35200b00000000000000000000000004172a3a4f647a8fa4b5c5af9a846f5b49351a1f3347586d8398adc2b7a5907b66513c2b1905000000000000000000000011263b50667c8386898c8f99a1b2c6b2a0988f8f8f8f8f8f8f8f8f89735e49341e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7b8a78c77624c37220d00000000000000000000000000000003182e43586d83989f9f9f98836e59432e19040000000000000000000000000000000000000000000000000001172c41566c8196a6a6a69a85705a45301b000000000e1e2e3e4b5a63707b83898e9092908e8882796c6056473a2a19090000000000000000000e1f30414b607380878888878577614c37220c000000000000000000000000000000000000000008131c20263135393d3f40413f3e3c37342b2220190d040000000000000000122434424a4a4a4a4a4a4a3d3930231301000000000a1c2c3a43474a4a4a4a4a403d3326160400000000051727343e414a4a4a4a4a4642382b1a0900000000000c1c293a47586176859ba3b5b19f96806c625144332520202020202020202020201e14120c030000000000091e32455674899eb4ab8c77624d37220d0000000000000000000000000a1f3347586d8298adc2b8a7917c67523c2c19172a3a50657a8fa4b6c3ae99846f5a4835200900000000000000000000000f23384c5e666f7174777a8399aec2ad98827b7a7a7a7a7a7a7a7a7b654f3a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8196abb39e88735947341f0b00000000000000000000000000000003182d42586d818a8a8a8a8a826d58432e18030000000000000000000000000000000000000000000000000001172c41566c81909090909084705a45301b000000000010202e3c494d5e666e75797b7c7b78746c635b4b45382a1c0c0000000000000000000000131d314455606b7272727271615847331f0a00000000000000000000000000000000000008131c25303537444b4e525456565553514c483b37342b1f170b000000000000001b2f42525e606060606060524d41301e0a0000000014273a4a575c606060606055504433210d000000000f223445525760606060605b55493826130000000000000c1c293a47586176859ba3b5b09e96806b625043332515070b0b0b0b0b0b0b0b090000000000000000000b21364b60768ba8b9a38e79644e39240f0000000000000000000000001325364c61768a9fb4c8b39e8875604b36200e0c23374b5d72879cb1c7b49f8c78624d3727150200000000000000000000091c2f404c50595c5961697e93a8beab95806b6565656565656565655d4b37220e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5a6f849aafb09a85705b3b2a180500000000000000000000000000000001162a3f52636d74747474746d64533f2b160100000000000000000000000000000000000000000000000000000e23394e63797b7b7b7b7b7a644f3a250f000000000002101e2c35404c515660646667656360544e493d32281a0c00000000000000000000000001142637444b555c5d5d5d5c4c473a2a180400000000000000000000000000000000000d18253036434a51556064676a6b6b6a68666259564d483b33291b1002000000000020354a5e70757575757575675f4d392510000000061a2f4357687275757575756b62503d281400000000152a3e52636c7575757575706755422e19000000000000000c1c2a3a47586176859ba4b5b09e95806b6150433325150600000000000000000000000000000000000d22384d62778da2c6a5907b65503b26100000000000000000000000071c304354697f94a9bac0ab96806b5645311d09081c2e3f54697f94a9babcab95806b5544311d08000000000000000000000011222f383b443a4751667b90a6c9ab95806b56505050505050504f4b3f2e1b0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465873889db2ac97826d57422d1800000000000000000000000000000000000f23354552585f5f5f5f5f5853463623100000000000000000000000000000000000000000000000000000000c2136495b636666666666645c4b37220d000000000000000e19202f3838454b4f5152504e4a4336352c1e160a0000000000000000000000000000091926313540474848484637332a1c0c0000000000000000000000000000000003111d2b36434a5460666e74797c7f80817f7e7c77726b62594c463a2e2010010000000020354a60758a8a8a8a8a8a7d67523d2812000000071d32475c72868a8a8a8a8a806b55402b1600000002172c41576c818a8a8a8a8a85705b46311b00000000000000000c1c2a3a47586176869ca4b5af9e957f6a61504332241406000000000000000000000000000000000f24394e64798ea3b9a7927c67523d271200000000000000000000000b20354a6073879cb1c7b4a28d78634e38271502001122374c61778a9fb4c9b39d8874604b36200e000000000000000000000004111c23262f2a394e63788eabbcab95806b56403a3a3a3a3a3a3a372e21100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba6b7a9947e69543f29140000000000000000000000000000000000061727353f424a4a4a4a4a433f36281806000000000000000000000000000000000000000000000000000000061a2c3d494e51515151514f4b3e2e1b08000000000000000006121d24283236393b3d3b39353025211a0f020000000000000000000000000000000009141d202b3233333331221f180c000000000000000000000000000000000011212f3b48546067737b83898e929495969493918c8780786d61584b3e2e200f0000000020354a60758a9f9f9f9f927d67523d2812000000071d32475c72879c9f9f9f95806b55402b1600000002172c41576c81969f9f9f9b85705b46311b0000000000000000000c1c2a3a47586176869ca4b5af9e947f6a614f423224140600000000000000000000000000000010253b50657a90a5baa8937e68533e29130000000000000000000005182a3b50657b90a4b6c5af9a85705b49351a0a00000a1f3347586e8398adc2b7a6917c67513d2c1a06000000000000000000000000090f111a21364b60768a9fb5ab95806b56402b252525252525221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c4a6907b66513b26110000000000000000000000000000000000000917232a2a34373937332a2b23180a00000000000000000000000000000000000000000000000000000000000f1f2c36393b3b3b3b3b3a372e20100000000000000000000000090a161e212426272623201c1308060000000000000000000000000000000000000001080b161d1d1d1d1c0c0a040000000000000000000000000000000000081c2f3f4b5962727c8690989ea8a7a9ababaaa8a6a59c968b8276645c4b3e2d1c0c00000020354a60758a9fb5b5a7927d67523d2812000000071d32475c72879cb1b5aa95806b55402b1600000002172c41576c8196acb5b09b86705b46311b000000000000000000000c1c2a3a47586176869ca4b5af9d947f69614f4231241405000000000000000000000000000011273c51667c91a6bba9947f6a543f2a15000000000000000000000b1f3448596e8398aec2b8a7927c67523d2c1a00000004182a3a50657b90a4b6c4af9a846f5b4935210a000000000000000000000000000000091e32455673889db3ab95806b56402b1610101010100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7b9a48e79644f39240f0000000000000000000000000000000000000e1e2c353b484c4e4c473a342b1d0d0000000000000000000000000000000000000000000000000000000000010f1a2123262626262625221b10020000000000000000000000000003090b0f1112100e0b070000000000000000000000000000000000000000000000000000070808080700000000000000000000000000000000000000000e23374b5d657884919ba3aeb4aea7a2aa9faaa2a7aeb2aa9f97877a645c4a3a2a1804000020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b00000000000000000000000c1c2a3a47586177869ca4b5ae9d937f69604e42312313040000000000000000000000000013283d52687d92a7bdab95806b56402b16010000000000000000011426364c62778b9fb4c8b39e8875604b36200e000000000c23374b5d72879cb1c7b59f8c78634e382816020000000000000000000000000000031628385b70859bb0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9b8a28d78634d38230e00000000000000000000000000000000000b1b2c3c494d59626461584d483b2b1b0b000000000000000000000000000000000000000000000000000000000000060c0e11111111110f0d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657b899aa2b1b2aa9f99928d8b8a8b8d92999fabb4a59d8a7a645847331f0d000020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b0000000000000000000000000c1c2a3a47596177869ca4b6ae9d937e69604e413022120400000000000000000000000013283e53687d93a8bdab96816b56412c16010000000000000000081c3043546a7f94aabbc0ab96806b5645321d0900000000081c2e3f54697f94a9babcab96816b5645321e09000000000000000000000000000000182e43586d8398adab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab6a18c76614c37210c000000000000000000000000000000000417293a495a626f7779776e62594839281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c11111111110c0a0400000000000000000000000000000000080d0f111111110d0b05000000000f24394f64798b9fb4b2a0988b837d78767575787c848d9da6b7a89d8876614c3b2b18050020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b000000000000000000000000000c1c2a3a47596177869ca4b6b59f8d7e685f4d4030221203000000000000000000000014293e53697e93a8beac96816c57412c170200000000000000000b20354b6073879db2c8b4a28d78634e3828150200000000001122374c61778a9fb4c9b39e8975604b36210f000000000000000000000000000000162b40556b8095aaab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab5a08a75604b35200b000000000000000000000000000000000a1f3346586278848c8e8b8377625746321e09000000000000000000000000000000000000000000000000000000000000000000000001080b140b090200000000000000000000000000000000000000000000000000000000000000000c171f212626262626211f170c0000000000000000000000000002101b2225262626262220190e0000000d22364a5c6c8196a39c9082786e676361576062676f7b889da8b7a696816c594834200b0020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b00000000000000000000000000000c1c2a3a47596277869ca4b6ab9f8d7d675f4d402f2111010000000000000000000014293e54697e93a9beac97826c57422d17020000000000000005192b3c51667c91a5b7c5af9a85705b49351a0a0000000000000a1f3447596e8398adc3b8a7927d67523d2d1a07000000000000000000000000000013283d52687d92a7ab95806b56402b1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9b6a18b76614c36210c000000000000000000000000000000000c21364c6176879aa2ab9f998675614b36210c0000000000000000000000000000000000000000000000000000000000000000000008141c2029201d150a0100000000000000000000000000000000000000000000000000000000000c1c2933373b3b3b3b3b37332a1c0d00000000000000000000000816202e373a3b3b3b3b38352b1e0e0000071b2d3e4b6175858d877b6d625a524d4b464b4d525d65798a9eb4b49f8b77624d37220d0020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b0000000000000000000000000000000c1c2a3b47596277869ca4b6ab9f8c7d675e4c3f2e1f0f0000000000000000000014293e54697e93a9beac97826d57422d1802000000000000000b2035485a6f8499aec3b8a7927c67523d2c1a0000000000000004182a3a50657b90a5b6c5b09b85705c4a36210b000000000000000000000000000010253a50657a8fabab95806b56402b1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7c3a38e79644e3828181a12100a010000000000000000000002172c41576c8196a5b4bcb5a496816c56412c1700000000000000000000000000000000000000000000000000000000000000000008182630353e3631271d14090000000000000000000000000000000000000000000000000000000417293a474c51515151504c473a2b1d0d000000000000000000011626333e4b4f515151514d483c2b19050000101e32465761707774655d4d493c38363236383f4b5b6a7f95aabbaa937e68533e29130020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b000000000000000000000000000000000c1d2a3b47596277869ca5b7aa9f8b7c665d4b3d2d1d0d00000000000000000014293e54697e93a9beac97826d57422d1802000000000000021527374d62788c9fb4c8b39e8875604b36200e00000000000000000c20354a6073879cb2c8b4a38e79644e39291703000000000000000000000000000c22374c61778c989895806b56402b160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788da5b6a9947f695645362d2f28251e1305000000000000000000091e33485e73889db3c3cfc3b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000001142636434b534b453831261c1308000000000000000000000000000000000000000000000000000a1f3347586166666666666158483b2b190500000000000000000f1f3344515c6466666666625a4835200b000003162939464b5a6260554b3f352b23211e20222e3d4d63788daabbae99846e59442f190020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b00000000000000000000000000000000000d1d2a3b48596278879da6b7a99f8b7b655b4a3b2a1909000000000000000014293e54697e93a9beac97826d57422d1802000000000000081d3144556b8095abbcc0ab96806b5645321d090000000000000000071c3043546a7f94aabbc1ac97816c5746331e0a000000000000000000000000000b1f344759677d8283827d67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a72879db2b29d877560544a3d443d3a3123130000000000000000000a1f34495f74899eb4c9dac9b49f89745f4a341f0000000000000000000000000000000000000000000000000000000000000000081c304354606960564b4437302518120800000000000000000000000000000000000000000000000c21374c61767c7b7b7b7b7662594834200f00000000000000071a2d3d51626b7a7b7b7b7c78624d38220d0000000b1b29323c484d4b44372f20190e0c090b1120354b60758a9fb4b19c87715c47321c0020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b0000000000000000000000000000000000000d1d2a3b48596278889da8b9a99e8a79635947372614010000000000000014293e54697e93a9beac97826d57422d18020000000000000b20364b6074889db3c9b4a28d78634e382815020000000000000000001325364c61778b9fb4c9b49e8976614b3621100000000000000000000000000004182a3b4d5f676d6d6d675f4d39251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c54697f94a6b7a5988272645c5b5a524d413119090000000000000000061b31465b70859bb0bdc5bcb09b85705b46311b00000000000000000000000000000000000000000000000000000000000000000b20354b60737e746860554a43362f231c11080000000000000000000000000000000000000000000b20364b607587909090908878624d3d2c1a060000000000000c21364a5b6b808f9090908a77624d37220d000000000b161e2b3438353126191106080b131c202e3a4b61768baabbb39e88735e49331e0020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b000000000000000000000000000000000000000d1d2b3b495a647a8a9eaab9a89d8777625544311d100000000000000014293e54697e93a9beac97826d57422d18020000000000061a2c3d52677c91a6b8c5af9a85705b49351a0a00000000000000000000081f3447596e8398aec3b9a8937e68533e2e1b08000000000000000000000000000c1d30414d52585858524d41301d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21364b6175889daab2a098847973706f675f4d37261401000000000000000011273c51667c919faeb0ad9e907b66503b261100000000000000000000000000000000000000000000000000000000000000000b20354b60758a877d736760544c40372f221b100700000000000000000000000000000000000000091d314556677d92a4a6a698826d5b4936210f0000000000071b2d3e4e63798c9fa6a796806b594834200b0000000000030d192022201d140908141c202530353e4a58667b90a6c8b39e88735e49331e0020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b00000000000000000000000000000000000000000d1d2c3c4a5c657c8c9fb4b7a59a8473604b3e2d1b0700000000000014293e54697e93a9beac97826d57422d180200000000000c2135495b6f849aafc4b8a7927d67523d2c1a000000000000000000000004182a3b50657b90a5b6c6b19b86715c4b37220c0000000000000000000000000000122330393c4343433c3930231301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e324657657b8c9fa9b2a19a8e8885847d675544311d0800000000000000000f24394c5e6c8191989b9890806b5e4c38230f00000000000000000000000000000000000000000000000000000000000000000b20354b60758a9d92867c72665e504b3f372e211a0f060000000000000000000000000000000000021527384b6073869cb1b49f8c79634e3d2d1a07000000000d22364a5c6e8399abb39e8976614c3b2b180500000000000000050b0d0b0a101b2226303536434a4f5c6476869cb1c6b19c86715c47311c0020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b0000000000000000000000000000000000000000000e1e2d3e4c5e697f94a1b3b4a2957f6a5c4a36221201000000000014293e54697e93a9beac97826d57422d180200000000021628384e63788da2b4c8b39e8875604b36200f0000000000000000000000000c20354a6073879cb2c8b5a38f7a644f3a2a17040000000000000000000000000005121d25272d2e2e27251d13050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031629394b5d677d8b9ca4afafa69d9a998b74604b35200b0000000000000000091d304052636c7c8385827b6b6250402f1c0900000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0a49c91867c70655d4f4b3e362d211a0f06000000000000000000000000000000000a1c304354667c91a3b5ab98836e5b4a36210f000000081c2e3f4f647a8ea1b2a6947f6a5847331d0d000000000000000000000b171f212e3736434b4f5460656e7a869ca4b6beac97826c57422d170020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b000000000000000000000000000000000000000000000f202f404f616e8399a7b8b49f8c7a644f41301d0a000000000014293e54697e93a9beac97826d57422d180200000000091e3245566c8196abc0c0ab96816b5645321d09000000000000000000000000071c3043546a7f94aabbc2ad98826d5847331f080000000000000000000000000000010a101218181812100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2e3f4d5f677a8691999ea8a6a7aa8b76604b36210b00000000000000000012223445525e666e706d655d50443322110000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa5b5b1a39b91857b6f645c4e4a3d352c20190e050000000000000000000000000000011426364d5e70859bb0b49f8c79634e3d2d1a0700000e23374b5d6f8499afb39d8875604b3a2a1700000000000000000008131c2933363f4b4f5460656b737a838c9ca4b6c1b2a08f7a654f3a25100020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b0000000000000000000000000000000000000000000001112132434c6277889eb3bbaa9b85705f4d392510000000000014293e54697e93a9beac97826d57422d1802000000000b21364b6075899eb3c8b4a28d78634e38281502000000000000000000000000001325364c62778b9fb4c9b49f8a76614c362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112130414d5c64727c84898e9092938b75604b36210b00000000000000000004172734404c51595b58504b3f33261504000000000000000000000000000000000000000000000000000000000000000000081d31445572879ba3b1b5b1a39b90847a6f645c4e493d352b20180d04000000000000000000000000000818304050657b90a2b4ab98836e5b4a36210f00091c2f404f657a8fa1b3a5937e685745321c0c00000000000000000a1825303a464c545d646c747a81878f989fabb6bfb3a398836e5d4b37220e0020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b000000000000000000000000000000000000000000000003141f344759687e93a4b6b4a2917c67523e2d1b070000000014293e54697e93a9beac97826d57422d1802000000071a2d3d52687d92a7b8c5af9a85705b49351a0a0000000000000000000000000000081f3447596e8398aec3baa9947e695443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031323303e4a5460676f75797b7d7e7e73604b35200b000000000000000000000917222f383c4346433b372f21150700000000000000000000000000000000000000000000000000000000000000000000011426374e647a85919ca4b1b4b0a29a8f83796e635b4d483c342b1f170c030000000000000000000000001223384c5d6f849aafb59f8c79634e3d2d1a070823384c5e70859ab0b29c8774604b39281600000000000000000a1b2836434a58616a727a82888f969da5aeb4bcb6b2a1998576614c3f2e1b080020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b00000000000000000000000000000000000000000000000005182a3b4b6074869cb1c0b09b85705c4a36220d0000000014293e54697e93a9beac97826d57422d18020000000d21364a5c70859bb0c5b8a7927d67523d2c1a00000000000000000000000000000005182a3b50657b90a5b6c7b19c8773604a35200d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000513202d36434a5155606466686969605544311d08000000000000000000000004121d24262e302e25231c11030000000000000000000000000000000000000000000000000000000000000000000000000921364a5c64727c86919ca4b1b4afa1998d83796d625a4c483b332a1e170b0300000000000000000000081c2f3f4f647a8fa1b3ab98836e5c4a36210f18304050667b90a2b4a3917c675544311b0a000000000000000919283945546069767f878f979ea6abb2b7bbb4aea59c928376615847332110000020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b000000000000050b0d101415100e09000000000000000000000d1d314455687e93a8bab5a38f7a644f3a240f0000000014293e54697e93a9beac97826d57422d18020000031729394e64798ea3b4c8b39e8875604b36200f000000000000000000000000000000000d20354a6073879db2c8b6a4907b65503b2a180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101825303537444b4f515253534b443726140100000000000000000000000000090f11191b18100e080000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4a546067737c86919ca4b1b3ab9f988c82786c62594c473a33291e160a020000000000000000001122364a5c6e8399abb59f8c79644e3e2d1a26364d5e71859bb0b09b8572604a3727150000000000000001142637455760727e89949ca4acb3b8bcb4b0aa9f9991877d6f6158473a2a1703000020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b00000000000d18202226292a26231c11030000000000000000011527374c61768a9fb4c1ab96816b563929160300000014293e54697e93a9beac97826d57422d180200000a1e3346576c8197acc1c0ab96816b5645321d0900000000000000000000000000000000071c3043546a7f94aabbc2ae98836e5948341f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20273136393b3d3e3e353126190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f202d36434a546067737c86929ca4b2b5aa9f978b81776b61584c463932281d150a0000000000000000071b2e3e4e63798c9fb4ab99836e5c4a3621304354667c91a3b4a2907b65544330190900000000000000081d314455607583939ea7b1b6bcb5afab9f9a938b837c74675f4c473a2a1c0c00000020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b00000008161d2b34373b3e3f3b382f2113050000000000000000091e3346576f8499afc4b09b86715746321e0a00000014293e54697e93a9beac97826d57422d180200000c21364b6176899eb4c9b4a28d78634e3828150200000000000000000000000000000000001325364c62778b9fb4c9b49f8b77624c36261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b151d202426282929201d140900000000000000000000000000000000000000000000090f11141414141414141414141414141414141414141414141414141414141412100a010000000000010f18253036434a546067737d86929ca5b2b4a99f978a80766a61574b453831271a1002000000000000001021364a5b6d8298aab59f8c79644e3e2d374b6073869cb1af9a846f5e4c36251300000000000000021528384b60738499a1b3b8bbb4ab9f9a938b857e776e6660554d41332a1c0c0000000020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b86705b46311b0000041626333b484d505455504c3f312313010000000000000003172939556a7f94aabfb49f8a76614b36210c00000014293e54697e93a9beac97826d57422d180200081b2e3e53687e93a8b9c3af9a85705b49351a0a000000000000000000000000000000000000081f3448596e8399aec2bbaa947f6a5443301c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0f111314140b080100000000000000000000000000000000000000000004111c2326292929292929292929292929292929292929292929292929292929292928251e130500000000000008131c253036434b546067737d87929ca5b2b4a99f968980766960564b45382e201000000000000000071a2d3d4d62788b9fb4ab99836e5c4a364455677d92a4b2a18f7a644f402f180800000000000000091d324556697f94a2b3bfb6aa9f968c857e7770696159514b4437311f170c000000000020354a60758a9fb5bca7927d67523d2812000000071d32475c72879cb1c0aa95806b55402b1600000002172c41576c8196acc1b09b85705b46301b00000e21334450596265696a655d4e41311e0b000000000000000012273c52677c91a7bcbcab8d78634d38230e00000014293e54697e93a9beac97826d57422d1802000d22374b5c71869bb1b2b2a5927d67523d2c1a0000000000000000000000000000000000000005182a3b50667b90a4b2b2b29d8773604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d39302313010000000000000008131c263036434b556067737d87929da5b2b4a89e95897f756960564b3e2e1b08000000000000000f2035495a6c8197a8b3a18e7a644f3e4b6074879cb2aa99836e5c4a36211100000000000000000b20364b6075899eb3c0b6a49c8b817870686259544c473a35312719130400000000000020354a60758a9fb5bca7927d67523d28120000000417293a5d72889db2c1ab96816c56412c1700000002182d42576d8297acc2af9a856f5a45301a000014283d50626b777b7e7f7b685f4e3a250f000000000000000010253b50657a90a5bac9a48f7a644f3a250f00000014293e54697e93a9beac97826d57422d1802000f253a4f647a8f9d9d9d9d9a8774604b36200f00000000000000000000000000000000000000000d20354b607386999d9d9d9d907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f111111110d0b050000000000000000000000000000000000000000000000000000000000000000091c2f404c505353535353535353535353535353535353535353535353535353535353524d41301e0a00000000000000000008141c263037444b556068747d87929da5adb3a79e94887e74645c4b37220d0000000000000006192b3c4c62778a9fb4ae99836e5c4a56687e93a5b49f8c79634e3e2e1b03000000000000000011263c51667b91a7b9b9a79c86796c625a534c473b37342a201d1509000000000000000020354a60758a9fb5bca7927d67523d28120000000a1f33465873899eb3c2ad98836d583c2b1905000003162939596e8398aec3ae98836e59432e190001162b40566b808c909394907d68523d2d1a070000000000000010253b50657a90a5babaa5907a65503b251000000014293e54697e93a9b2ac97826d57422d180200162b40566b8087888888878479635645321d090000000000000000000000000000000000000000081c3043546278838788888887816c57422d170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b2224262626262220190d000000000000000000000000000000000000000000000000000000000000000f23384c5e666969696969696969696969696969696969696969696969696969696969675f4d392510000000000000000000000108141c263137444b556068747d8791989ea8b3a69d93877a644f3a250f00000000000000000e1f3448596b8095a7b3a18e7a644f6074879db2a997826d5b49352010000000000000000000152b40556a8095aac5b39e8977635b4d493c37342a221f180c131913110b02000000000020354a60758a9fb5bca7927d67523b2b1c1004000c21364c61768ba7b8c6b19c86715a483520100300091e32465771869cb1c2ac97826d57422d18000012273c51677c91a5a9aa9d87725c4a36210e0000000000000012273c52677c91a7bcc6a48f7a644f3a250f00000014293e54697e939d9d9d97826d57422d18020014283d51626b72727272726f635b4a38281502000000000000000000000000000000000000000001142636485a626e72727272726c63523e2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a3b3b3b3b38342b1d0d0000000000000000050b0d11141513110c0a04000000000000000000000011263b50667b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d67523d28120000000000000000000000000109141d263137444b556068727c82899eb4b7b3a5937e69533e2914000000000000000005182a3b4c6176899eb3ae99846f5c697e93a6b49f8a78624d3d2c1a02000000000000000002172d42576c8297acc0ab96806b594a3d352c221f180d141d20282f28261e13060000000020354a60758a9fb5bda7927d6859483a2d1f17161a2b3b50657a90a5c5cab5a48d78624d3e2d1e16161928384b61768a9fb4c7a9947f69543f2a1400000d22374d62778ca4b6b6a58e79644e3c2c1a0b000000000009192d3e556a7f95aabfb9a88d77624d38220d00000013283d53687e8788888887806b56402b1601000e21334451565d5d5d5d5d5a4e4a3d2d1a0a0000000000000000000000000000000000000000000008182b3c484d595d5d5d5d5d57524535220f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4b4f515151514d483c2b190500000000050b0d18202227292a2926211f170b07000000000000000000192e43596e83939393939393939393939393939393939393939393939393939393939387725d47321d000000000000000000000000050e19202c353c494d5b636e7880879da8b9b3afa1937e69533e29140000000000000000000d1f3347586a7f94a6b3a18e7a6475889eb3a796806b5948341f0f00000000000000000002182d42576d8297acbda7927d68523b2d20190f10161e2631353d443d3a3124130300000020354a60758a9fb5c7b29d877862584a3e332a2b2d3848596c8197acbcb5acab96816c5c4a3d32282b2d374556687d92aabbbaa98f7a654f3a251000000b2034485972879cb1c3ac97816c5b4938291b110c0b0c0e1826374a5c70859bb0c5b49e8974604b35200b00000011253a4e606872727272726b62513d29140000041626333d4048484848484539362d1f0f0000000000000000000000000000000000000000000000000e1e2b3538444848484848423e352717050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c6466666666625a4834200b0002090d1820222b34373c3e3f3e3c363329221b100200000000000000192e43596e8398a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89c87725d47321d00000000000000000000050d19202b353c494d5b636d79838c969da5b4afa1998e8378624d38230d0000000000000000000417293a4b6175889db3ad97826d7e93a6b39e8976614c3b2b190100000000000000000000162b40556b8095aac6a9947f6954423228252425283237444b5359534e4231211100000020354a60758a9fb5cbb7a59c8676645c4c473a413d4a566277899eb3ab9f979f9f8b7a645b4b4639413d4a556075879cb2c8b49f8a74604b36210b000005182b3b54697e93a8b9b49f8b79635646392f24212021232b364455647a8c9fb5c4af99846f5443301c080000000b1e31424e535d5d5d5d5d56514433210e000000081621282b33333333322f24211a0f01000000000000000000000000000000000000000000000000000e1920232e32333333332d2a221709000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a7b7b7b7b78624d38220d0b151d202b34373b484c51535553514c463a362d201608000000000000192e43596e8398a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79c87725d47321d0000000000000000040d18202b343c484d5a626d78828c989fabb2b0a29a8f847a6e625a4935200b000000000000000000000c1e324657697e93a5b49f8a76879cb2a6947f6a5847331d0d000000000000000000000011273c51667c91a8b9b09b8570604b45393a3a3b38454b5560686e68604e3f2e1909000020354a60758a9fb5c3b6b2a49c877a6b61585756575c6474839aa8b59f8d8297a79d87796a61575756585b63738298a5b6bead97826d5645321e090000000d21364c61768a9eb4baa99b857461574c4039373536383c48546073849aabbcb7a6927d685336261401000000011323313a3d4848484848403d3326160400000000040e14161d1d1d1d1d1a0e0c0700000000000000000000000000000000000000000000000000000000060b0d191d1d1d1d1d17150f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e83909090907e695438281c202731363b484d54596266696a686661584f4a3e332616080000000000192e43596e83929292929292929292929292929292929292929292929292929292929287725d47321d000000000000040c181f2b343b484d5a626d78828c989fabb5b1a39b90857a6f645c4d493c2b190600000000000000000000031628394b6074879db2a8978297a5b39d8875604b3a2a170000000000000000000000000b21364b6075899eb4b5a3937e6b605752504f5053566068737d847e685d4b372715020020354a60758a9fb5b6a59d969e9d8b8077706c6b6d7179849aa1b3af9a8476899ea69d8a7f766f6c6b6d71798498a0b2c3b2a08e7a644f382816020000000a1f3346586b8095a4b6b5a39a8475665e544f4c4b4b4d525a62728197a2b4c1b39d8875614b36210c000000000005131e252833333333332b2921160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297a6a697826d564534303538454b5259626971777c7e7f7e7b766f645c5044342616040000000010253a50657b7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c66513c271100000000000c171f2a343b484c59626c78828b979faab4b2a49c91857b70655d4f4a3e352b1e0e0000000000000000000000000b1d314556687d92a4b19f979fb1a5937e685745321c0c000000000000000000000000091e3245566b8096a6b7b59f8d80756c67656465686d757d8792998f7b655544311d080020354a60758a9fb5b29d8780969f9f958a85818082868e9aa2b3b3a1907b677d929fa89e948a84818082868e9aa2b2beb6a598826d5c4a361a0a000000000417293a4b6074869caabbb4a29a877b71696461606163676e7884979fb1c0b4a3927d685746321e09000000000000010b11131d1d1d1d1d16140e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9b39e8875604d48434a4f5660676f777f868c91939493918a847a6b625144342212000000000e23374b5d656868686868686868686868686868686868686868686868686868686868665e4d39240f00000005131c2a333b474c59626c78818b979faab4b2a49c92867c70655e4f4b3f362d20190e00000000000000000000000000021527384b6073869cb1b1acb1b29c8774604b39281600000000000000000000000000031628384b6175889da8b7ab9f9689817c7a797a7e8289929ca4ae9c8674604b36200b0020354a60758a9fb5af9a846f81959fa99f9a9696979ca4b0b4b6a599836f5f6c81979fb3a99f9a9796979ca4afb4bfb3a59d8776614c3e2d1b0000000000000b1e324556657b8c9faabab4a59d90867f79767576787d838b9aa2b1bdb6a59b8572604a392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a8fa5b7a796816d62595460646b757c848b949ca4a6a8aaa8aa9f998c806b6251402f1808000000081c2e3f4b505252525252525252525252525252525252525252525252525252525252514d40301d0a0000011323303a474c59616b77818b979fa9b4b3a59d92877d73665e504c40372e221b10060000000000000000000000000000000a1d314455677c91a3b5c1b5a3917c675544311b0a00000000000000000000000000000a1e334657647a8a9da6b4b5a79e97928f8f9093989ea7b2b2a29b8878634d38230e0020354a60758a9fb4ac97826d72808d9ea7afacabacb1b5b9b3a49c8777624c607281929ea7b1afacabadb1b5bab4afa1998779635846332010000000000000021628384b5d677d8c9fa9b5b7b2a39b948e8c8a8b8d92989faab3beb2a59c8777625443301b0b00000000000000080d0f1313131313131313131313131313131313110b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074879db2b09f968277727174798088919a9fabb1b5b4b1b0b3b9b4ab9f95806b5e4c3626140100000011212e373a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c393022120000000a1e30414d58616b77818a969fa9b4b3a69d93877d736760544c40382f221b10070000000000000000000000000000000000011426374d5f71859bb0b2b19b8572604a372715000000000000000000000000000000031729394a5c657b88989fabb2b3aca7a5a4a5a8adb3afa59d938577635b4935210c0020354a60758a9f9f9f947f6a606b7c89969ea6a8aaaaa8a79e95867862594754606c7d89949ca4a6a9aaa9a8a99f99908477635b493a291702000000000000000a1a2e3f4d5f677d8b9ba3b2b7b5b1a9a4a1a0a0a2a7aeb4bbb5b0a098877862594736251300000000000002101b22252828282828282828282828282828282828251e1305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455697f94a4b6b0a0978c8786898f969ea7afb4b4ada89f9c9b9ea7b3b8b49e907c665443301c08000001132330393c40404040404040404040404040404040404040404040404040404040403f3b3224140300001025394d5f6776808a969fa9b4b3a79e94887e746860554a433630231c110800000000000000000000000000000000000000000919304050657b909d9d9d907b665443301909000000000000000000000000000000000b1b2d3e4b5d6576828c969da5a6a8aaaaa9a7aa9f9a92877d736259493c2c1906001f354a5f748b8a8a898577624c5e667680888f939595938f898075625a493b434a5f67767f868d9194959492908a847b6f6259493c2c1b0b000000000000000000102130404d5f677985939da5adb2b7c3b6b5b6b8c2b6b1aca39b918376625a493b2a180800000000000010202e373a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a312313010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374b6074869ca7b7b1ada59d9c9ea7abb3b5b1a99f989089878689919ea7b8b29c8773604b35200b00000a1e30414d525555555555555555555555555555555555555555555555555555555555544f43321f0c000115273752677d89969ea8b4b4a89e95897f756960564b4437302518120900000000000000000000000000000000000000000000001223384c5d6e83888888836e5e4c36251300000000000000000000000000000000000010202e3f4b58616d7881878d9193949594928f8a847d74686055483b2c1e0e00001d32475b6d74747474716259484c58616b747a7e7f807e7a756b6157493c2c30414d57616a71787c7e807f7d7b766f655d4c473b2c1e0e0000000000000000000002122230414d5b63747e8791989da5a5a6a8a8a6a5a49c978f867c6e6158493c2c1d0d000000000000081b2e3e4b4f53535353535353535353535353535353524e41311e0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556647a899da5b2b7b7b2b1b3b7b2aba49c948a837b757171757d899ea9b6a5907b66513b261100001025394d5f676b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b69614f3b271200081d31445574899ea8b4b4a89f96897f766960574b453831261c130800000000000000000000000000000000000000000000000000091c2f3f53646e7272726e6453402f18080000000000000000000000000000000000000210212e3a474c5a636c72787c7e7f807f7d7a756f6860554b44372b1d0e000000182c3e4f5b5f5f5f5f5b4c483b3a474c556064686a6a696560564b46392c1e1c3039464c555a6266696a6a68656057504c3f342a1d0e000000000000000000000000041223303d4a556069747c82878d8f919393918f8c87817a71675f4c473a2c1e0e000000000000000d22374b5c6468686868686868686868686868686868685f4e3a2511000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384a5c647a87959da6a7a9a9a7a69d968e867f776e6660565560677a8b9fb4ac97826d57372614010012273c52677c80808080808080808080808080808080808080808080808080808080807e69543f2914000b20354b60758aa7b4a99f968a80766a61574b453931271d1409000000000000000000000000000000000000000000000000000000001121364653595d5d5d595346362211000000000000000000000000000000000000000003101c2a333c494d575a6267686a6b6a68656056524b44373127190d000000000f21313e474a4a4a4a4637342b2a3337444b4f53555553504b453832281b0e131b2933363c484d5154555453504b4539382f1f180d000000000000000000000000000005121f2d37444b5560666d72777a7c7d7d7c7a77726c655d514d4133291c0e00000000000000000f253a4f647a7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d68523d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2d3e4a5c647580888e929493928d88817971696158504b45444b5c6c8196abb29c87725544311d0800192e43596e83959595959595959595959595959595959595959595959595959595959587725d47321d000b20354b60758aaa9f978b81776b61584c463932281d150a010000000000000000000000000000000000000000000000000000000000031828364044484848444036281803000000000000000000000000000000000000000000000c171f2c35383c494d5153555554524f4b45383631271d150900000000000313212c323535353431222018171f2731353a3e40403e3a3632281e160b00000b171e212b35383c3f403f3d3b363228231c110500000000000000000000000000000000010f19273137444b51585a62656768686665625957504b3f39301f170c000000000000000000172c41566c81929292929292929292929292929292928b745f4a351f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f202d3d4a57606a73797c7e7e7c78736b645c544c473a3632313e4f647a8fa4a59f8a75604b35200b00192e43596e8398aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9c87725d47321d000b20354b60758a988b82786c62594c473a33291e160a0200000000000000000000000000000000000000000000000000000000000000000a18242c2e3333332e2c24180a000000000000000000000000000000000000000000000000040e1920232b35383c3e3f403f3d3a363228201d15090100000000000000030f181d1f1f1f1f1c0d0b050409151d2025292a2b2925211e160a0300000000030a0e19202327292b2a2826211e160a08000000000000000000000000000000000000000009151d2631353c3c484d5051535351504c483b3a372e241d120400000000000000000000172c41566c8196a8a8a8a8a8a8a8a8a8a8a8a8a8a89f8a745f4a351f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1f2d39454b54606467696967635b564e4a3e37332a201d21364b61768b9090908c77614c37220c00192e43596e8398a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59c87725d47321d000b20354b60748d82786d625a4c483b332a1e170b030000000000000000000000000000000000000000000000000000000000000000000000071117191d1d1d19171107000000000000000000000000000000000000000000000000000000060c0e19202327292a2b2a2825211e160b0802000000000000000000000004080a0a0a0a06000000000001080b0f13151514100b0902000000000000000000060b0d1114151513100b090300000000000000000000000000000000000000000000000209141d20272b35383a3c3e3e3c3a37342b25231c110a010000000000000000000000172c41566c8196abb4b4b4b4b4b4b4b4b4b4b4b4b49f8a745f4a351f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b283236434a4f525454524e493d39362d221f180c0a1e324657657b7b7b7b7b74604b36210b00192e43596e83909090909090909090909090909090909090909090909090909090909087725d47321d000b20354a6072796d635b4d483c342a1f170c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d121315161513100b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b11192022252728282725222018100e080000000000000000000000000000172c41566c81969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8a745f4a351f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e253035393d3f3e3d38352c24211a0f0a0400031629394b5d6565656565605645321e09000e24394e63797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a644f3a250f00071c30435460635b4d493c352b1f180d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1012131311100d0b050000000000000000000000000000000000162b41566b808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89745e49341f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308131c20242729292723211a0f0d0700000000000b1b2f3f4b50505050504b4538281602000c21364a5b636565656565656565656565656565656565656565656565656565656565645d4b37220d0000132536434a4e4a3d352c20190e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293d51626b74747474747474747474747474747474746b5a46311c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f121414120e0c0600000000000000000011212f383b3b3b3b3b3632281a0a0000071a2d3d4a4e50505050505050505050505050505050505050505050505050505050504f4b3f2e1b080000081825303539362d21190e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21344451565f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5e5a4d3d2a170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232526262626211e160a000000000f1f2d36393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a372e20100000000008131c2024211a0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041626343d414a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49463d2f1f0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e10101010100b09020000000000010f1a2124262626262626262626262626262626262626262626262626262626262625221b1002000000000000070b0e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081621292b3535353535353535353535353535353534312a1f11010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e10101010101010101010101010101010101010101010101010101010100f0d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e14161f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1c170d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato SDF + m_EditorClassIdentifier: + hashCode: -1609792505 + material: {fileID: 7159369417392969216} + materialHashCode: -1443409620 + m_Version: 1.1.0 + m_SourceFontFileGUID: 5686e06ef14cf104b8e282ee7c41b9a6 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Regular + m_PointSize: 71 + m_Scale: 1 + m_LineHeight: 85.2 + m_AscentLine: 70.077 + m_CapLine: 52 + m_MeanLine: 36 + m_Baseline: 0 + m_DescentLine: -15.123 + m_SuperscriptOffset: 70.077 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -15.123 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -18.105 + m_UnderlineThickness: 3.1595001 + m_StrikethroughOffset: 14.4 + m_StrikethroughThickness: 3.1595001 + m_TabWidth: 18 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 18.171875 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 47.640625 + m_Height: 50.875 + m_HorizontalBearingX: 0.21875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 48.0625 + m_GlyphRect: + m_X: 329 + m_Y: 374 + m_Width: 48 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 35.84375 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 45.90625 + m_GlyphRect: + m_X: 403 + m_Y: 68 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 42.5625 + m_Height: 52 + m_HorizontalBearingX: 3.375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 47.421875 + m_GlyphRect: + m_X: 123 + m_Y: 334 + m_Width: 43 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 44.09375 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 54 + m_GlyphRect: + m_X: 249 + m_Y: 6 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 31.375 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41 + m_GlyphRect: + m_X: 426 + m_Y: 130 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 31.34375 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 40.15625 + m_GlyphRect: + m_X: 451 + m_Y: 68 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 44.46875 + m_Height: 52 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 51.859375 + m_GlyphRect: + m_X: 193 + m_Y: 6 + m_Width: 45 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 41.21875 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 54.203125 + m_GlyphRect: + m_X: 299 + m_Y: 68 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 6.890625 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 19.875 + m_GlyphRect: + m_X: 494 + m_Y: 68 + m_Width: 8 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 23.171875 + m_Height: 51.4375 + m_HorizontalBearingX: 0.859375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 30 + m_GlyphRect: + m_X: 264 + m_Y: 231 + m_Width: 25 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 40.609375 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 47.03125 + m_GlyphRect: + m_X: 305 + m_Y: 6 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 28.859375 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 36.453125 + m_GlyphRect: + m_X: 456 + m_Y: 6 + m_Width: 30 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 52.921875 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 65.921875 + m_GlyphRect: + m_X: 6 + m_Y: 68 + m_Width: 54 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 41.21875 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 54.203125 + m_GlyphRect: + m_X: 300 + m_Y: 194 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 50.15625 + m_Height: 51.96875 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 56.828125 + m_GlyphRect: + m_X: 112 + m_Y: 240 + m_Width: 51 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 33.96875 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 42.640625 + m_GlyphRect: + m_X: 342 + m_Y: 304 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 52.5 + m_Height: 61.953125 + m_HorizontalBearingX: 3.375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 56.828125 + m_GlyphRect: + m_X: 59 + m_Y: 334 + m_Width: 53 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 37.59375 + m_Height: 50.875 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 44.484375 + m_GlyphRect: + m_X: 376 + m_Y: 130 + m_Width: 39 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 32.984375 + m_Height: 52 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 38.515625 + m_GlyphRect: + m_X: 177 + m_Y: 334 + m_Width: 34 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 39.828125 + m_Height: 50.875 + m_HorizontalBearingX: 1.0625 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.921875 + m_GlyphRect: + m_X: 352 + m_Y: 68 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 40.5 + m_Height: 51.484375 + m_HorizontalBearingX: 5.859375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 52.21875 + m_GlyphRect: + m_X: 255 + m_Y: 386 + m_Width: 42 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 47.640625 + m_Height: 50.875 + m_HorizontalBearingX: 0.21875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 48.0625 + m_GlyphRect: + m_X: 340 + m_Y: 436 + m_Width: 48 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 71.328125 + m_Height: 50.875 + m_HorizontalBearingX: 1.09375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 73.515625 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 72 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 44.59375 + m_Height: 50.875 + m_HorizontalBearingX: 0.703125 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 46.078125 + m_GlyphRect: + m_X: 242 + m_Y: 70 + m_Width: 46 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 44.15625 + m_Height: 50.875 + m_HorizontalBearingX: 0.078125 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 44.296875 + m_GlyphRect: + m_X: 269 + m_Y: 132 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 38.5625 + m_Height: 50.875 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 42.734375 + m_GlyphRect: + m_X: 358 + m_Y: 6 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 28.359375 + m_Height: 37.15625 + m_HorizontalBearingX: 2.3125 + m_HorizontalBearingY: 36.59375 + m_HorizontalAdvance: 35.28125 + m_GlyphRect: + m_X: 157 + m_Y: 74 + m_Width: 29 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 31.75 + m_Height: 52.796875 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 39.765625 + m_GlyphRect: + m_X: 77 + m_Y: 175 + m_Width: 32 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 29.140625 + m_Height: 37.03125 + m_HorizontalBearingX: 2.984375 + m_HorizontalBearingY: 36.53125 + m_HorizontalAdvance: 33.90625 + m_GlyphRect: + m_X: 155 + m_Y: 124 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 31.703125 + m_Height: 52.796875 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 39.765625 + m_GlyphRect: + m_X: 62 + m_Y: 408 + m_Width: 32 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 31.796875 + m_Height: 37.03125 + m_HorizontalBearingX: 2.953125 + m_HorizontalBearingY: 36.53125 + m_HorizontalAdvance: 37.484375 + m_GlyphRect: + m_X: 111 + m_Y: 124 + m_Width: 33 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 22.46875 + m_Height: 51.609375 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 51.609375 + m_HorizontalAdvance: 24.890625 + m_GlyphRect: + m_X: 307 + m_Y: 311 + m_Width: 24 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 33.15625 + m_Height: 49.515625 + m_HorizontalBearingX: 2.203125 + m_HorizontalBearingY: 36.5625 + m_HorizontalAdvance: 36.921875 + m_GlyphRect: + m_X: 409 + m_Y: 301 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 29.96875 + m_Height: 52.296875 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 39.625 + m_GlyphRect: + m_X: 223 + m_Y: 237 + m_Width: 30 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 9.015625 + m_Height: 51.796875 + m_HorizontalBearingX: 4.015625 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 17.046875 + m_GlyphRect: + m_X: 308 + m_Y: 374 + m_Width: 10 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 15.515625 + m_Height: 64.71875 + m_HorizontalBearingX: -2.515625 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 17.046875 + m_GlyphRect: + m_X: 35 + m_Y: 412 + m_Width: 16 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 30.671875 + m_Height: 52.296875 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 36.0625 + m_GlyphRect: + m_X: 213 + m_Y: 398 + m_Width: 31 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 48.78125 + m_Height: 36.53125 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 36.53125 + m_HorizontalAdvance: 58.390625 + m_GlyphRect: + m_X: 214 + m_Y: 462 + m_Width: 49 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 29.96875 + m_Height: 36.53125 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 36.53125 + m_HorizontalAdvance: 39.625 + m_GlyphRect: + m_X: 368 + m_Y: 254 + m_Width: 30 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 34.296875 + m_Height: 37.03125 + m_HorizontalBearingX: 2.984375 + m_HorizontalBearingY: 36.53125 + m_HorizontalAdvance: 40.25 + m_GlyphRect: + m_X: 110 + m_Y: 75 + m_Width: 36 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 31.75 + m_Height: 48.765625 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 36.59375 + m_HorizontalAdvance: 39.796875 + m_GlyphRect: + m_X: 388 + m_Y: 362 + m_Width: 32 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 31.703125 + m_Height: 48.765625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 36.59375 + m_HorizontalAdvance: 39.765625 + m_GlyphRect: + m_X: 454 + m_Y: 331 + m_Width: 32 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 20.3125 + m_Height: 36.59375 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 36.59375 + m_HorizontalAdvance: 25.84375 + m_GlyphRect: + m_X: 473 + m_Y: 392 + m_Width: 21 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 25.59375 + m_Height: 37.09375 + m_HorizontalBearingX: 2.375 + m_HorizontalBearingY: 36.53125 + m_HorizontalAdvance: 30.75 + m_GlyphRect: + m_X: 177 + m_Y: 462 + m_Width: 26 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 23.21875 + m_Height: 48.203125 + m_HorizontalBearingX: 1.53125 + m_HorizontalBearingY: 47.640625 + m_HorizontalAdvance: 25.453125 + m_GlyphRect: + m_X: 399 + m_Y: 423 + m_Width: 24 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 29.921875 + m_Height: 36.53125 + m_HorizontalBearingX: 4.65625 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 39.578125 + m_GlyphRect: + m_X: 326 + m_Y: 256 + m_Width: 31 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 35 + m_Height: 35.96875 + m_HorizontalBearingX: 0.8125 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 36.640625 + m_GlyphRect: + m_X: 467 + m_Y: 237 + m_Width: 36 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 53.421875 + m_Height: 36.03125 + m_HorizontalBearingX: 1.171875 + m_HorizontalBearingY: 36.03125 + m_HorizontalAdvance: 55.765625 + m_GlyphRect: + m_X: 6 + m_Y: 130 + m_Width: 54 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 33.734375 + m_Height: 35.96875 + m_HorizontalBearingX: 0.8125 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 35.359375 + m_GlyphRect: + m_X: 455 + m_Y: 284 + m_Width: 35 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 35.28125 + m_Height: 48.140625 + m_HorizontalBearingX: 0.75 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 36.59375 + m_GlyphRect: + m_X: 469 + m_Y: 130 + m_Width: 37 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 27.75 + m_Height: 35.96875 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 32.09375 + m_GlyphRect: + m_X: 434 + m_Y: 392 + m_Width: 28 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 14.09375 + m_Height: 10.15625 + m_HorizontalBearingX: 4.65625 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 28.40625 + m_GlyphRect: + m_X: 181 + m_Y: 301 + m_Width: 15 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 8.875 + m_Height: 51.40625 + m_HorizontalBearingX: 5.046875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 19.09375 + m_GlyphRect: + m_X: 320 + m_Y: 437 + m_Width: 9 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 309 + m_Metrics: + m_Width: 25.78125 + m_Height: 51.96875 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 31.765625 + m_GlyphRect: + m_X: 222 + m_Y: 322 + m_Width: 27 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 8.59375 + m_Height: 18 + m_HorizontalBearingX: 3.796875 + m_HorizontalBearingY: 8.375 + m_HorizontalAdvance: 16.109375 + m_GlyphRect: + m_X: 142 + m_Y: 304 + m_Width: 10 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 9.015625 + m_Height: 45 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 35.375 + m_HorizontalAdvance: 18.5625 + m_GlyphRect: + m_X: 89 + m_Y: 75 + m_Width: 10 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 8.875 + m_Height: 35.90625 + m_HorizontalBearingX: 4.9375 + m_HorizontalBearingY: 35.375 + m_HorizontalAdvance: 17.75 + m_GlyphRect: + m_X: 446 + m_Y: 192 + m_Width: 10 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 314 + m_Metrics: + m_Width: 8.875 + m_Height: 8.90625 + m_HorizontalBearingX: 3.9375 + m_HorizontalBearingY: 8.375 + m_HorizontalAdvance: 16.75 + m_GlyphRect: + m_X: 265 + m_Y: 294 + m_Width: 10 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 315 + m_Metrics: + m_Width: 45.875 + m_Height: 8.90625 + m_HorizontalBearingX: 3.9375 + m_HorizontalBearingY: 8.375 + m_HorizontalAdvance: 53.25 + m_GlyphRect: + m_X: 207 + m_Y: 301 + m_Width: 47 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 326 + m_Metrics: + m_Width: 27.34375 + m_Height: 55.484375 + m_HorizontalBearingX: 2.375 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 32.09375 + m_GlyphRect: + m_X: 154 + m_Y: 6 + m_Width: 28 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 4.9375 + m_Height: 66.8125 + m_HorizontalBearingX: 6.421875 + m_HorizontalBearingY: 54.421875 + m_HorizontalAdvance: 17.78125 + m_GlyphRect: + m_X: 6 + m_Y: 257 + m_Width: 6 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 329 + m_Metrics: + m_Width: 27.34375 + m_Height: 55.484375 + m_HorizontalBearingX: 2.375 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 32.09375 + m_GlyphRect: + m_X: 73 + m_Y: 255 + m_Width: 28 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 330 + m_Metrics: + m_Width: 17.53125 + m_Height: 5.359375 + m_HorizontalBearingX: 4.4375 + m_HorizontalBearingY: 23.96875 + m_HorizontalAdvance: 26.375 + m_GlyphRect: + m_X: 320 + m_Y: 500 + m_Width: 18 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 333 + m_Metrics: + m_Width: 27.96875 + m_Height: 4.265625 + m_HorizontalBearingX: 2.3125 + m_HorizontalBearingY: -5.859375 + m_HorizontalAdvance: 32.59375 + m_GlyphRect: + m_X: 286 + m_Y: 294 + m_Width: 29 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 13.671875 + m_Height: 65.46875 + m_HorizontalBearingX: 3.1875 + m_HorizontalBearingY: 55.0625 + m_HorizontalAdvance: 18.953125 + m_GlyphRect: + m_X: 6 + m_Y: 336 + m_Width: 14 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 13.53125 + m_Height: 65.46875 + m_HorizontalBearingX: 2.234375 + m_HorizontalBearingY: 55.0625 + m_HorizontalAdvance: 18.953125 + m_GlyphRect: + m_X: 23 + m_Y: 257 + m_Width: 14 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 13.0625 + m_Height: 64.6875 + m_HorizontalBearingX: 6.46875 + m_HorizontalBearingY: 54.421875 + m_HorizontalAdvance: 21.71875 + m_GlyphRect: + m_X: 48 + m_Y: 257 + m_Width: 14 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 13.0625 + m_Height: 64.6875 + m_HorizontalBearingX: 2.203125 + m_HorizontalBearingY: 54.421875 + m_HorizontalAdvance: 21.71875 + m_GlyphRect: + m_X: 52 + m_Y: 178 + m_Width: 14 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 16.625 + m_Height: 64.6875 + m_HorizontalBearingX: 2.40625 + m_HorizontalBearingY: 54.421875 + m_HorizontalAdvance: 21.375 + m_GlyphRect: + m_X: 6 + m_Y: 414 + m_Width: 18 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 341 + m_Metrics: + m_Width: 16.609375 + m_Height: 64.6875 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: 54.421875 + m_HorizontalAdvance: 21.375 + m_GlyphRect: + m_X: 31 + m_Y: 335 + m_Width: 17 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 342 + m_Metrics: + m_Width: 21.453125 + m_Height: 22.828125 + m_HorizontalBearingX: 4.359375 + m_HorizontalBearingY: 53.46875 + m_HorizontalAdvance: 30.171875 + m_GlyphRect: + m_X: 197 + m_Y: 133 + m_Width: 22 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 31.8125 + m_Height: 26.171875 + m_HorizontalBearingX: 4.6875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 133 + m_Y: 472 + m_Width: 33 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 32.875 + m_Height: 12.5625 + m_HorizontalBearingX: 4.265625 + m_HorizontalBearingY: 27.265625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 6 + m_Y: 491 + m_Width: 34 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 5.5 + m_Height: 18.171875 + m_HorizontalBearingX: 4.515625 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 14.484375 + m_GlyphRect: + m_X: 163 + m_Y: 304 + m_Width: 7 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 17.5 + m_Height: 18.171875 + m_HorizontalBearingX: 4.515625 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 26.3125 + m_GlyphRect: + m_X: 112 + m_Y: 304 + m_Width: 19 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 351 + m_Metrics: + m_Width: 46.828125 + m_Height: 52 + m_HorizontalBearingX: 3.125 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 50.546875 + m_GlyphRect: + m_X: 120 + m_Y: 173 + m_Width: 47 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 352 + m_Metrics: + m_Width: 52.515625 + m_Height: 56.734375 + m_HorizontalBearingX: 3.6875 + m_HorizontalBearingY: 48.25 + m_HorizontalAdvance: 59.390625 + m_GlyphRect: + m_X: 89 + m_Y: 6 + m_Width: 54 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 362 + m_Metrics: + m_Width: 33.859375 + m_Height: 66.640625 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 58.1875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 6 + m_Y: 178 + m_Width: 35 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 370 + m_Metrics: + m_Width: 37.453125 + m_Height: 50.875 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 353 + m_Y: 192 + m_Width: 39 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 36.921875 + m_Height: 51.96875 + m_HorizontalBearingX: 2.125 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 174 + m_Y: 237 + m_Width: 38 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 30.3125 + m_Height: 50.984375 + m_HorizontalBearingX: 5.828125 + m_HorizontalBearingY: 50.984375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 403 + m_Y: 192 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 33.9375 + m_Height: 51.4375 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 274 + m_Y: 449 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.15625 + m_Height: 52 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 178 + m_Y: 173 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 38.34375 + m_Height: 50.875 + m_HorizontalBearingX: 0.8125 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 325 + m_Y: 130 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 32.453125 + m_Height: 51.4375 + m_HorizontalBearingX: 3.96875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 197 + m_Y: 70 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 405 + m_Metrics: + m_Width: 34.546875 + m_Height: 50.875 + m_HorizontalBearingX: 3.828125 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 409 + m_Y: 6 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 406 + m_Metrics: + m_Width: 33.015625 + m_Height: 51.4375 + m_HorizontalBearingX: 3.734375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 224 + m_Y: 168 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 435 + m_Metrics: + m_Width: 34.046875 + m_Height: 35.21875 + m_HorizontalBearingX: 3.578125 + m_HorizontalBearingY: 41.390625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 409 + m_Y: 254 + m_Width: 35 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 439 + m_Metrics: + m_Width: 30.53125 + m_Height: 16.6875 + m_HorizontalBearingX: 5.328125 + m_HorizontalBearingY: 32.265625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 51 + m_Y: 488 + m_Width: 31 + m_Height: 18 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 442 + m_Metrics: + m_Width: 27.4375 + m_Height: 31.125 + m_HorizontalBearingX: 5.75 + m_HorizontalBearingY: 39.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 71 + m_Y: 132 + m_Width: 29 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 443 + m_Metrics: + m_Width: 27.4375 + m_Height: 31.125 + m_HorizontalBearingX: 7.984375 + m_HorizontalBearingY: 39.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 93 + m_Y: 473 + m_Width: 29 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 6.3125 + m_Height: 52.296875 + m_HorizontalBearingX: 5.21875 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 16.75 + m_GlyphRect: + m_X: 71 + m_Y: 68 + m_Width: 7 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 34.265625 + m_Height: 51.4375 + m_HorizontalBearingX: 3.828125 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 260 + m_Y: 322 + m_Width: 36 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.296875 + m_Height: 52 + m_HorizontalBearingX: 3.4375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 167 + m_Y: 398 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 50.65625 + m_Height: 51.984375 + m_HorizontalBearingX: 3.125 + m_HorizontalBearingY: 51.375 + m_HorizontalAdvance: 56.90625 + m_GlyphRect: + m_X: 105 + m_Y: 408 + m_Width: 51 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 35.921875 + m_Height: 35.921875 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 35.921875 + m_HorizontalAdvance: 42.59375 + m_GlyphRect: + m_X: 469 + m_Y: 190 + m_Width: 37 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -4344941099567136234} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 83 + m_Height: 62 + - m_X: 83 + m_Y: 0 + m_Width: 65 + m_Height: 69 + - m_X: 0 + m_Y: 62 + m_Width: 65 + m_Height: 62 + - m_X: 65 + m_Y: 62 + m_Width: 18 + m_Height: 64 + - m_X: 0 + m_Y: 124 + m_Width: 65 + m_Height: 48 + - m_X: 0 + m_Y: 172 + m_Width: 46 + m_Height: 79 + - m_X: 0 + m_Y: 251 + m_Width: 17 + m_Height: 79 + - m_X: 0 + m_Y: 330 + m_Width: 25 + m_Height: 78 + - m_X: 17 + m_Y: 251 + m_Width: 25 + m_Height: 78 + - m_X: 0 + m_Y: 408 + m_Width: 29 + m_Height: 77 + - m_X: 0 + m_Y: 485 + m_Width: 45 + m_Height: 25 + - m_X: 25 + m_Y: 329 + m_Width: 28 + m_Height: 77 + - m_X: 42 + m_Y: 251 + m_Width: 25 + m_Height: 77 + - m_X: 46 + m_Y: 172 + m_Width: 25 + m_Height: 77 + - m_X: 65 + m_Y: 126 + m_Width: 40 + m_Height: 43 + - m_X: 83 + m_Y: 69 + m_Width: 21 + m_Height: 57 + - m_X: 29 + m_Y: 406 + m_Width: 27 + m_Height: 76 + - m_X: 45 + m_Y: 482 + m_Width: 42 + m_Height: 29 + - m_X: 53 + m_Y: 328 + m_Width: 64 + m_Height: 74 + - m_X: 104 + m_Y: 69 + m_Width: 47 + m_Height: 49 + - m_X: 148 + m_Y: 0 + m_Width: 39 + m_Height: 68 + - m_X: 67 + m_Y: 249 + m_Width: 39 + m_Height: 68 + - m_X: 71 + m_Y: 169 + m_Width: 43 + m_Height: 65 + - m_X: 105 + m_Y: 118 + m_Width: 44 + m_Height: 49 + - m_X: 56 + m_Y: 402 + m_Width: 43 + m_Height: 65 + - m_X: 87 + m_Y: 467 + m_Width: 40 + m_Height: 43 + - m_X: 99 + m_Y: 402 + m_Width: 62 + m_Height: 64 + - m_X: 127 + m_Y: 466 + m_Width: 44 + m_Height: 38 + - m_X: 106 + m_Y: 234 + m_Width: 62 + m_Height: 64 + - m_X: 106 + m_Y: 298 + m_Width: 30 + m_Height: 30 + - m_X: 114 + m_Y: 167 + m_Width: 58 + m_Height: 64 + - m_X: 149 + m_Y: 118 + m_Width: 42 + m_Height: 49 + - m_X: 151 + m_Y: 68 + m_Width: 40 + m_Height: 49 + - m_X: 187 + m_Y: 0 + m_Width: 56 + m_Height: 64 + - m_X: 117 + m_Y: 328 + m_Width: 54 + m_Height: 64 + - m_X: 136 + m_Y: 298 + m_Width: 21 + m_Height: 30 + - m_X: 157 + m_Y: 298 + m_Width: 18 + m_Height: 30 + - m_X: 168 + m_Y: 231 + m_Width: 49 + m_Height: 64 + - m_X: 172 + m_Y: 167 + m_Width: 46 + m_Height: 64 + - m_X: 161 + m_Y: 392 + m_Width: 46 + m_Height: 64 + - m_X: 171 + m_Y: 328 + m_Width: 45 + m_Height: 64 + - m_X: 171 + m_Y: 456 + m_Width: 37 + m_Height: 49 + - m_X: 207 + m_Y: 392 + m_Width: 42 + m_Height: 64 + - m_X: 208 + m_Y: 456 + m_Width: 60 + m_Height: 48 + - m_X: 175 + m_Y: 295 + m_Width: 26 + m_Height: 22 + - m_X: 201 + m_Y: 295 + m_Width: 58 + m_Height: 21 + - m_X: 217 + m_Y: 231 + m_Width: 41 + m_Height: 64 + - m_X: 216 + m_Y: 316 + m_Width: 38 + m_Height: 64 + - m_X: 249 + m_Y: 380 + m_Width: 53 + m_Height: 63 + - m_X: 254 + m_Y: 316 + m_Width: 47 + m_Height: 63 + - m_X: 268 + m_Y: 443 + m_Width: 46 + m_Height: 63 + - m_X: 191 + m_Y: 64 + m_Width: 45 + m_Height: 63 + - m_X: 191 + m_Y: 127 + m_Width: 33 + m_Height: 35 + - m_X: 218 + m_Y: 162 + m_Width: 45 + m_Height: 63 + - m_X: 258 + m_Y: 225 + m_Width: 36 + m_Height: 63 + - m_X: 259 + m_Y: 288 + m_Width: 21 + m_Height: 21 + - m_X: 280 + m_Y: 288 + m_Width: 40 + m_Height: 17 + - m_X: 301 + m_Y: 305 + m_Width: 35 + m_Height: 63 + - m_X: 302 + m_Y: 368 + m_Width: 21 + m_Height: 63 + - m_X: 314 + m_Y: 431 + m_Width: 20 + m_Height: 63 + - m_X: 314 + m_Y: 494 + m_Width: 29 + m_Height: 17 + - m_X: 323 + m_Y: 368 + m_Width: 59 + m_Height: 62 + - m_X: 334 + m_Y: 430 + m_Width: 59 + m_Height: 62 + - m_X: 236 + m_Y: 64 + m_Width: 57 + m_Height: 62 + - m_X: 243 + m_Y: 0 + m_Width: 56 + m_Height: 62 + - m_X: 263 + m_Y: 126 + m_Width: 56 + m_Height: 62 + - m_X: 293 + m_Y: 62 + m_Width: 53 + m_Height: 62 + - m_X: 299 + m_Y: 0 + m_Width: 53 + m_Height: 62 + - m_X: 294 + m_Y: 188 + m_Width: 53 + m_Height: 62 + - m_X: 319 + m_Y: 124 + m_Width: 51 + m_Height: 62 + - m_X: 346 + m_Y: 62 + m_Width: 51 + m_Height: 62 + - m_X: 352 + m_Y: 0 + m_Width: 51 + m_Height: 62 + - m_X: 320 + m_Y: 250 + m_Width: 42 + m_Height: 48 + - m_X: 347 + m_Y: 186 + m_Width: 50 + m_Height: 62 + - m_X: 370 + m_Y: 124 + m_Width: 50 + m_Height: 62 + - m_X: 397 + m_Y: 62 + m_Width: 48 + m_Height: 62 + - m_X: 403 + m_Y: 0 + m_Width: 47 + m_Height: 62 + - m_X: 336 + m_Y: 298 + m_Width: 46 + m_Height: 62 + - m_X: 362 + m_Y: 248 + m_Width: 41 + m_Height: 48 + - m_X: 397 + m_Y: 186 + m_Width: 43 + m_Height: 62 + - m_X: 420 + m_Y: 124 + m_Width: 43 + m_Height: 62 + - m_X: 445 + m_Y: 62 + m_Width: 43 + m_Height: 62 + - m_X: 450 + m_Y: 0 + m_Width: 41 + m_Height: 62 + - m_X: 463 + m_Y: 124 + m_Width: 48 + m_Height: 60 + - m_X: 488 + m_Y: 62 + m_Width: 19 + m_Height: 62 + - m_X: 463 + m_Y: 184 + m_Width: 48 + m_Height: 47 + - m_X: 440 + m_Y: 186 + m_Width: 21 + m_Height: 48 + - m_X: 461 + m_Y: 231 + m_Width: 47 + m_Height: 47 + - m_X: 403 + m_Y: 248 + m_Width: 46 + m_Height: 47 + - m_X: 449 + m_Y: 278 + m_Width: 46 + m_Height: 47 + - m_X: 403 + m_Y: 295 + m_Width: 45 + m_Height: 61 + - m_X: 382 + m_Y: 356 + m_Width: 43 + m_Height: 61 + - m_X: 448 + m_Y: 325 + m_Width: 43 + m_Height: 61 + - m_X: 393 + m_Y: 417 + m_Width: 35 + m_Height: 60 + - m_X: 428 + m_Y: 386 + m_Width: 39 + m_Height: 47 + - m_X: 467 + m_Y: 386 + m_Width: 32 + m_Height: 48 + m_FreeGlyphRects: + - m_X: 17 + m_Y: 329 + m_Width: 8 + m_Height: 1 + - m_X: 25 + m_Y: 406 + m_Width: 4 + m_Height: 2 + - m_X: 0 + m_Y: 510 + m_Width: 45 + m_Height: 1 + - m_X: 29 + m_Y: 482 + m_Width: 16 + m_Height: 3 + - m_X: 42 + m_Y: 328 + m_Width: 11 + m_Height: 1 + - m_X: 46 + m_Y: 249 + m_Width: 21 + m_Height: 2 + - m_X: 65 + m_Y: 169 + m_Width: 6 + m_Height: 3 + - m_X: 104 + m_Y: 118 + m_Width: 1 + m_Height: 8 + - m_X: 53 + m_Y: 402 + m_Width: 3 + m_Height: 4 + - m_X: 56 + m_Y: 467 + m_Width: 31 + m_Height: 15 + - m_X: 99 + m_Y: 466 + m_Width: 28 + m_Height: 1 + - m_X: 71 + m_Y: 234 + m_Width: 35 + m_Height: 15 + - m_X: 67 + m_Y: 317 + m_Width: 39 + m_Height: 11 + - m_X: 105 + m_Y: 167 + m_Width: 9 + m_Height: 2 + - m_X: 148 + m_Y: 68 + m_Width: 3 + m_Height: 1 + - m_X: 114 + m_Y: 231 + m_Width: 54 + m_Height: 3 + - m_X: 117 + m_Y: 392 + m_Width: 44 + m_Height: 10 + - m_X: 127 + m_Y: 504 + m_Width: 44 + m_Height: 7 + - m_X: 161 + m_Y: 456 + m_Width: 10 + m_Height: 10 + - m_X: 168 + m_Y: 295 + m_Width: 7 + m_Height: 3 + - m_X: 175 + m_Y: 317 + m_Width: 41 + m_Height: 11 + - m_X: 201 + m_Y: 316 + m_Width: 15 + m_Height: 12 + - m_X: 216 + m_Y: 380 + m_Width: 33 + m_Height: 12 + - m_X: 127 + m_Y: 505 + m_Width: 141 + m_Height: 6 + - m_X: 208 + m_Y: 504 + m_Width: 60 + m_Height: 7 + - m_X: 249 + m_Y: 443 + m_Width: 19 + m_Height: 13 + - m_X: 151 + m_Y: 117 + m_Width: 40 + m_Height: 1 + - m_X: 187 + m_Y: 64 + m_Width: 4 + m_Height: 4 + - m_X: 191 + m_Y: 162 + m_Width: 27 + m_Height: 5 + - m_X: 218 + m_Y: 225 + m_Width: 40 + m_Height: 6 + - m_X: 258 + m_Y: 288 + m_Width: 1 + m_Height: 7 + - m_X: 259 + m_Y: 309 + m_Width: 42 + m_Height: 7 + - m_X: 280 + m_Y: 305 + m_Width: 21 + m_Height: 11 + - m_X: 254 + m_Y: 379 + m_Width: 48 + m_Height: 1 + - m_X: 301 + m_Y: 368 + m_Width: 1 + m_Height: 12 + - m_X: 302 + m_Y: 431 + m_Width: 12 + m_Height: 12 + - m_X: 87 + m_Y: 510 + m_Width: 227 + m_Height: 1 + - m_X: 127 + m_Y: 506 + m_Width: 187 + m_Height: 5 + - m_X: 323 + m_Y: 430 + m_Width: 11 + m_Height: 1 + - m_X: 343 + m_Y: 492 + m_Width: 168 + m_Height: 19 + - m_X: 334 + m_Y: 492 + m_Width: 177 + m_Height: 2 + - m_X: 224 + m_Y: 127 + m_Width: 39 + m_Height: 35 + - m_X: 236 + m_Y: 126 + m_Width: 27 + m_Height: 36 + - m_X: 243 + m_Y: 62 + m_Width: 50 + m_Height: 2 + - m_X: 263 + m_Y: 188 + m_Width: 31 + m_Height: 37 + - m_X: 293 + m_Y: 124 + m_Width: 26 + m_Height: 2 + - m_X: 294 + m_Y: 250 + m_Width: 26 + m_Height: 38 + - m_X: 319 + m_Y: 186 + m_Width: 28 + m_Height: 2 + - m_X: 320 + m_Y: 298 + m_Width: 16 + m_Height: 7 + - m_X: 347 + m_Y: 248 + m_Width: 15 + m_Height: 2 + - m_X: 491 + m_Y: 0 + m_Width: 20 + m_Height: 62 + - m_X: 507 + m_Y: 0 + m_Width: 4 + m_Height: 124 + - m_X: 508 + m_Y: 231 + m_Width: 3 + m_Height: 280 + - m_X: 461 + m_Y: 186 + m_Width: 2 + m_Height: 45 + - m_X: 440 + m_Y: 234 + m_Width: 21 + m_Height: 14 + - m_X: 449 + m_Y: 234 + m_Width: 12 + m_Height: 44 + - m_X: 362 + m_Y: 296 + m_Width: 41 + m_Height: 2 + - m_X: 336 + m_Y: 360 + m_Width: 46 + m_Height: 8 + - m_X: 382 + m_Y: 296 + m_Width: 21 + m_Height: 60 + - m_X: 448 + m_Y: 295 + m_Width: 1 + m_Height: 30 + - m_X: 382 + m_Y: 417 + m_Width: 11 + m_Height: 13 + - m_X: 393 + m_Y: 477 + m_Width: 118 + m_Height: 34 + - m_X: 425 + m_Y: 356 + m_Width: 23 + m_Height: 30 + - m_X: 425 + m_Y: 356 + m_Width: 3 + m_Height: 61 + - m_X: 495 + m_Y: 278 + m_Width: 16 + m_Height: 108 + - m_X: 499 + m_Y: 278 + m_Width: 12 + m_Height: 233 + - m_X: 491 + m_Y: 325 + m_Width: 20 + m_Height: 61 + - m_X: 428 + m_Y: 434 + m_Width: 83 + m_Height: 77 + - m_X: 428 + m_Y: 433 + m_Width: 39 + m_Height: 78 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 5686e06ef14cf104b8e282ee7c41b9a6 + pointSizeSamplingMode: 0 + pointSize: 71 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 11400000, guid: 3ca4d2f306ccea545b06ae7c31441886, type: 2} + italicTypeface: {fileID: 11400000, guid: 9e1695c82df14c74084770f457067f67, type: 2} + - regularTypeface: {fileID: 11400000, guid: 932db15dad1eb664ab1a91d94a8b6fbf, type: 2} + italicTypeface: {fileID: 11400000, guid: 5c362fec725a413469a94a06a01b6c75, type: 2} + - regularTypeface: {fileID: 11400000, guid: a7cf2bc8733f6c0468062c8e95e84690, type: 2} + italicTypeface: {fileID: 11400000, guid: 4c9581b0f074374498fe2166d24a660b, type: 2} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 11400000, guid: 0ba8b0b32b8721048bd7e610207b4ee6, type: 2} + - regularTypeface: {fileID: 11400000, guid: 2f490f72b6ed6ae4d8b31cee2cac3de7, type: 2} + italicTypeface: {fileID: 11400000, guid: 2ecc4eef08bef7d4083406f284c093d8, type: 2} + - regularTypeface: {fileID: 11400000, guid: 5e48c6b5155ab684092ac6890f8f3af4, type: 2} + italicTypeface: {fileID: 11400000, guid: 7c954dac1de116b478a8154de93b2b6c, type: 2} + - regularTypeface: {fileID: 11400000, guid: 693430919429cff4d9e10f1225ca56c8, type: 2} + italicTypeface: {fileID: 11400000, guid: cfef7c6d601b6c047999b7e4c6a76a31, type: 2} + - regularTypeface: {fileID: 11400000, guid: 51a1aa396f4dea44fbb24fc6076c78b8, type: 2} + italicTypeface: {fileID: 11400000, guid: 191c85d053c814242b6d9fab0a91b9f9, type: 2} + - regularTypeface: {fileID: 11400000, guid: 4eccd51250cfa3948a3ac1e21d15fe34, type: 2} + italicTypeface: {fileID: 11400000, guid: 0f830b4b35476a64095c922deaa35b72, type: 2} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!21 &7159369417392969216 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -4344941099567136234} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.8333333 + - _ScaleRatioB: 0.6770833 + - _ScaleRatioC: 0.6770833 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato SDF.asset.meta new file mode 100644 index 0000000..3cd33c5 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3944eaaf70beffa4097d8c293604125e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Black SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Black SDF.asset new file mode 100644 index 0000000..cbbf5b2 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Black SDF.asset @@ -0,0 +1,2754 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-2791197472762382045 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Black SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1e20202020202020202018150f060000000000000000000000000000080e1020202020202020202020110f0900000000000000000000000000000000000000000000090f112020202020202020201a17110700000000000000000000000000000000000000000000000000000000020b111320202020202020202017150f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0d0e0e0e0e0e0e0e0e0e0c0a0300000000000000000000000000000000000000030a0c10121415161514120f0b090300000000000000000000000000000000000000000000000c161c1e20202020202020202015130d030000000000000000000000000000090f112020202020202020202020200a030000000000000000000000000001080b141c1f2020202020202020201f0d0b0600000000000000090f1120202020202020202020202020202020202020201f1e1c1915110c090300000000000000000000000000000000000000070b0b0b0b0b0b0b0b0b0b0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1114151514120e0c06000000000000000000000000000000060c0e190c0a040000000000000000000000000000000000000000000000000000000000000009151d20343535353535353535352d2a231709000000000000000000000003111c23253535353535353535353526241d120400000000000000000000000000000000000004111c23263535353535353535352f2c24190b000000000000000000000000000000000000000000000000000006131e26283535353535353535352d2a221709000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e161e2122232323232323232323211e160b000000000000000000000000000000060c0e171e2125282a2b2b2a292724211e160d0b0500000000000000000000000000000000000000101e2930333535353535353535352a28201507000000000000000000000004111c23263535353535353535353535351e160b000000000000000000000009141d20293134353535353535353535342320190e0000000004111c232635353535353535353535353535353535353535353433312f2b26211e160b0801000000000000000000000000000008131c20202020202020202020201d1409000000000000000000000000000000000000000000000000000000000000000000000000000000090c171f2126292a2a2927232119100e0800000000000000000000010f1a21232e221f180c00000000000000000000000000000000000000000000000000000000000919273135494a4a4a4a4a4a4a4a4a423e352717000000000000000000000011212f383b4a4a4a4a4a4a4a4a4a4a3b382f221200000000000000000000000000000000000011222f383b4a4a4a4a4a4a4a4a4a444037291907000000000000000000000000000000000000000000000000021324313a3d4a4a4a4a4a4a4a4a4a423e35271705000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1a2123283236373838383838383838383632291b0b000000000000000000000000090f1a21232933363a3d3f4040403f3c3a3632282220190d08000000000000000000000000000000000c1e2e3b45484a4a4a4a4a4a4a4a4a3f3c332515030000000000000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a32291b0b00000000000000000009192631353f474a4a4a4a4a4a4a4a4a4a4938352b1e0e00000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494644403b363228201c14080000000000000000000000000818253035353535353535353535353126190900000000000000000000000000000000000000000000000000000000000000000000000003111c232933373c3e40403e3c38352c25231c11080000000000000002101f2c35394337342a1c0f01000000000000000000000000000000000000000000000000000001152737444b5e606060606060606060575245351808000000000000000000081c2f3f4b5060606060606060606060514c402f1d0900000000000000000000000000000000091c2f404c506060606060606060605954473724110000000000000000000000000000000000000000000000000b1e31424e5360606060606060606057524535220f000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2c353838454b4d4d4d4d4d4d4d4d4d4d4b463929160300000000000000000005121d242c353839464c4f525455565554524f4b453837342b221b1003000000000000000000000000000216293b4c595e60606060606060606055504333200d000000000000000000091c2f404c5060606060606060606060605e46392916030000000000000001142637444b545c5f6060606060606060605f4d483c2b190600091c2f404c50606060606060606060606060606060606060605f5f5e5c5955514b463935302618120400000000000000000000132536434a4b4b4b4b4b4b4b4b4b4b4437261401000000000000000000000000000000000000000000000000000000000000000000000b161e2f383a474c5153555553524d493c3a372e231c1103000000000010202e3d494e584c473a2d1f0f0100000000000000000000000000000000000000000000000000081d31445560737575757575757575756d63523625130000000000000000000e23384b5d6575757575757575757575665e4c382408000000000000000000000000000000000f23384c5e667575757575757575756f6554402c1703000000000000000001080a0a090400000000000000000011263a4e60687575757575757575756c63523e2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000081825303d494e57566062636363636363636363615746321e0a00000000000000000d181f2f383d494e5657616567696a6b6a6967646056554d483b372e1e160b000000000000000000000000071c3045596a737575757575757575756a61503c28130000000000000000000f23384c5e667575757575757575757575705746321e0a000000000000000d1d3144556069717475757575757575757574625a4835200b000f23384c5e6675757575757575757575757575757575757575757473716e6a666157514b4336301f180c0000000000000000071c30435460606060606060606060605544311d080000000000000000000000000000000000000000000000000000000000000000000b1b2832404c50586166696a6a6967635b58504b3f372e2113060000000a1a2e3f4b5b636e61594a3d2d1f0f000000000000000000000000000000000000000000000000000b20354b6073898a8a8a8a8a8a8a8a8a816d5443301c07000000000000000010253b50657b8a8a8a8a8a8a8a8a8a8a7c66513625130000000000000000000000000000000011263b50667b8a8a8a8a8a8a8a8a8a836f59442f1a040000000000040a0c161d1f1f1e190f0d0700000000000013283d53687e8a8a8a8a8a8a8a8a8a816c57422d1700000000000000000000000000000000000000000000000000000000000000000000000000000008182536434a5b636c72767778787878787878787875614b36210c00000000000004121d2a34404c515b636b71767a7d7f80807f7e7c7976706a62594f4b3f32291b100200000000000000000000091e33485e73888a8a8a8a8a8a8a8a8a7f6a553f2a1500000000000000000011263b50667b8a8a8a8a8a8a8a8a8a8a8a75614b36210c0000000000000d1d31424b60737f86898a8a8a8a8a8a8a8a8a8a78624d38230d0011263b50667b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888684807b766e6660544d41332a1c0f010000000000000b20354a607275757575757575757573604b35200b00000000000000000000000000000000000000000000000000000000000000000a1a2839464b5e6670767b7e7f7f7e7c78736d655d4f4b3f3124130200021528384b5d64798377635b4a3d2c1e0e00000000000000000000000000000000000000000000000010253b50657b90a79f9f9f9f9f9f9f9d8874604a35200b00000000000000071a2d3d566c81969f9f9f9f9f9f9f9f97826c5443301c0700000000000000000000000000000011263b50667b909f9f9f9f9f9f9f99846f59442f1a04000000000c171f212c323434332e24221b10020000000013283d53687d929f9f9f9f9f9f9f97826c57422d170000000000000000000000000000000000000000000000000000000000000000000000000000001325364354606a7981878b8c8d8d8d8d8d8d8d8d8576604b36210b00000000000412222f3b484c5e666f7980868b8f929495959594918f8a857f786e645d4b46392d201002000000000000000000091e33485e73889d9f9f9f9f9f9f9f947f6a553f2a1500000000000000000011263b50667b909f9f9f9f9f9f9f9f9f8b76614b36210c000000000005192b3b4e606e82949c9fa99f9f9f9f9f9fa2937e695a4835200b0011263b50667b909f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9f9e9b9995908a837c73675f4c473a2c1f0f000000000000152a3f556a7f8a8a8a8a8a8a8a8a8a88735e48331e09000000000000000000000000000000000000000000000000000000000000021528384657616e7b858b9193959593918d88827a71655d4e42311e0b00091d324556647b89988779635b493c2b1a0a00000000000000000000000000000000000000000000071a2d3e576c8196acc5b5b5b5b5b5b8a68f7a644f3a250f000000000000000c21364a5b72879db2b5b5b5b5b5b5b39d8874604a35200b00000000000000000000000000000011263b50667b90a5b5b5b5b5b5ae99846f59442f1a040000000c1c29333641474a4a484439362d20110300000013283d53687d92a8b5b5b5b5b5ac97826c57422d170000000000000000000000000000000000000000000000000000000000000000000000000005121c3043546072808c979ca5a2a2a2a2a2a2a59c8676615745321e090000000002122330404c59626e7c848c969c9faba7a9aaabaaa9a7aa9f9b958b837a6c61574a3e2e2010000000000000000000091e33485e73889db3b5b5b5b5b5aa947f6a553f2a1500000000000000000011263b50667b90a5b5b5b5b5b5b5b5a08b76614b36210c00000000000c20344859687e93a0b1b4bab5b5b5b5baa99b8573604b3c2b19060011263b50667b90a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bcb4b4b3b1aeaaa99f9991867c6f6158493d2c1e0e0000000000152a3f556a7f94a0a0a0a0a0a0a09d88735e48331e09000000000000000000000000000000000000000000000000000000000000091d324556617583909a9faba8aaaaa8a7a79e988f867b68604e3a2611000b20364b6075889ea59d8879635a48382715020000000000000000000000000000000000000000000d21364a5c72879db2c7cacacacad5c4ab95806b563c2c19060000000000000e24394e63798ea5b6cacacacacacbb7a68f7a644f3a250f00000000000000000000000000000011263b50667b90a5bbcacacac4ae99846f59442f1a0400000b1b293a464c565d5f5f5e594e4a3e2e211100000013283d53687d92a8bdcacacac1ac97826c57422d1700000000000000000000000000000000000000000000000000000000000000000000000003122332424a607282959fabb2b6c3b8b8c6b8a79d87776258473928160300000000102030414d5e667783909a9fabb1b5bcc9bebfc0bfbec8bbb4b0aa9f988d8175645c4b3e2e1e0e0000000000000000091e33485e73889db3c8cacacabfaa947f6a553f2a1500000000000000000011263b50667b90a5bbcacacacacab6a08b76614b36210c000000000c1c30414d6278899eb3bec9cdd7cad2c1b49f8b79635443301e0e000011263b50667b90a5bbcacacacacacacacacacacacacacad9cfcac9c8c6c3c7bab4aea49c918376635b493c2c1a0a00000000152a3f556a7f94aab5b5b5b5b5b39d88735e48331e09000000000000000000000000000000000000000000000000000000000006192c3c4b60748598a0afb4bcc9bfbfbec5b8b3ada49c8c7d68533d2813000c21364c61768a9fb4a69d8878625645311d100000000000000000000000000000000000000000000f24394e64798ea5b7cadfdfdfdfdcc6b19c86715b4935210c000000000004182a3b556a7f94aac3d4e6dfdfe7d5c4ab95806b563c2c1906000000000000000000000000000011263b50667b90a5bbd0dfd9c4ae99846f59442f1a0400031729394658616b727474736e645c4b3f2e1a0a000013283d53687d92a8bdd2dfd7c1ac97826c57422d1700000000000000000000000000000000000000000000000001080b0e1013141516151412112130414f606b8096a0b4bcc9cad3d8c7b9a89e89796359483a2a1b0a000000000a1a2e3e4d5f677c8999a1afb5bcc9cacfdad4d2d1d2d3d9cecac8bbb4ab9f97877a645c4b3c2b190500000000000000091e33485e73889db3c8dddfd4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0dfdfdfcbb6a08b76614b36210c00000004182a3a4d5f6f8399a8b9ccdee1e9d8c8b5a3947f6a5b4936261400000011263b50667b90a5bbd0dfdfdfdfdfe0d9d6d6d6d6d6d6d6d6d6d8dbdbd9d8cec9c2b6b1a1998779635a4938281602000000152a3f556a7f94aabfcacacac8b39d88735e48331e0900000000000000000000000000000000000000000000000000000000000c2035495a6c8197a3b2becacfd9d4d4d3d5ccc8c0b39e8977614c37220c000a1f334658697e939eafa69b8574604b3e2d1b070000000000000000000000000000000000000005192b3c556a7f95aac3d4e6faf4f3decab6a48d78634d38230e00000000000b1f34475970859bb0c5daf0fffff1dcc6b19c86715b4935210c000000000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a04000a1e33465761768187898988837a655d4b382816030013283d53687d92a8bdd2e7d7c1ac97826c57422d17000000000000000000000000000000000000000000060c0e141d202326282a2a2b2a2928252e3f4d5f697e939eb0becfd9dfd9c9baa99e8a7a645b493b2b1c0c00000000031628384a5c677d8c9ea7b3bfcacfdad2c9c6c0bdbbbdc0c7cad4d8cec9bcb5a59d8a7b645a4835201200000000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f4e0cbb6a08b76614b36210c0000000b1f344759677d92a1b3c6d6e8f7e2cebbaa9b8573604b3d2c180800000011263b50667b90a5bbd0e5f4fdebdbcdc4c1c0c0c0c0c0c0c0c1c2c6cacfd9e2dfd3cabfb3a59d8878625645321e0d000000152a3f556a7f94aabfd4dfddc8b39d88735e48331e0900000000000000000000000000000000000000000000000000000000000e23384d63788c9fb4c1cfdfe3ded1c8c5c1c4c6b3a2927d675947341f0a000417293a4f606b8095a0b2a396816c5c4a362211000000000000000000000000000000000000000b2034485a71869bb1c6dbf0fffff9e5d3c2a9947e69543a2a1804000000000c22374c61778b9fb4cadff4fffff3decab6a48d78634d38230e000000000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a0406192c3c4c617586969c9f9f9d998b7b655645321e0b0013283d53687d92a8bdd2e7d7c1ac97826c57422d1700000000000000000000000000000000000003090f1a2123263135383b3e3f40403f3e3d3a3d4b5d677d8d9fb5bccde3ebe3cfbcab9f8b7b655c4a3d2c1d0d0000000000091e324556647a8b9faab8c5cfdfd6ccc2b5b1aaa7a6a7abb2b6c3ced8dacfc3b7a89e8978624d40301d0a000000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000b1b30404c6177889eb3bfd0e4f4e7d3c2b49f8c7a645544311f0f0000000011263b50667b90a5bbd0e5faf3e0cdbdb0ababababababababacadb0b4bcc9ced8e6ded0c3b7a69c8674604b3c2b19050000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e1214151514100c0a0300000000000000000000000000000000000000000417293a566c8196aabbcedfecdccfc0b4b0abafb4a89a846f5f4d3a2a180400000c1c32424a60728298a6b49f8c7a644f3f2f1c080000000000000000000000000000000000000d22384d62788da3b5c9ddf2ffffffefdac5b09a85705847331f0a0000000216283853687d92abbccfe3f7fffff9e5d3c2a9947f69543a2a18040000000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a040c2035495a6c8197a4b2b4b4b3a99d8775604b3929160313283d53687d92a8bdd2e7d7c1ac97826c57422d1700000000000000000000000000000000020a161e212c363937444b4d50535455555553524f4c5b657b8b9fabbccfdaebdbccbcb49f8d7d675d4c3e2d1f0f0000000000021527374b6075879ca9bac8d5e3d6c6b9b3a39b95929192969da5b4bbc8d8e3d4c6b8a79a84705e4d39240f000000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000417293a4c5e6e8298a7b8ccddedebd9c9b6a495806b5c4a372715010000000011263b50667b90a5bbd0e5faedd9c4b09f969696969696969696989b9fabb4bbc8d7e5e2d4c4b5a496806b5a4834200b0000152a3f556a7f94aabfd4e9ddc8b39d88735e48332227292b2a2926211e170b070000000000000000000000000000000000000a1f33465871879cb1c8d9ebe2cfbeb2a29a96999f9f8a78624d41311c0c00000000141c3043546176879db2ab9b85705d4b38230c00000000000000000000000000000000000417293a53697e93a8c1d2e4f8fffffff4dfcab49f8b77614c37220c000000091e3245566e8399aec9d9ebfeffffffefdac5b09a85705947341f0a0000000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a071a2d3d4d63788b9fb4c2c9c9c7b7a5947f695746321e0c13283d53687d92a8bdd2e7d7c1ac97826c57422d170000000000000000000000000000000a151d2832363d494e555560636568696a6b6a696764616379899ea9bac9daecdccdbdaf9d937e685f4d3f2f2010010000000000081d3144556a7f94a5b6c7d7e6d8c7b9a89e9186807d7c7d8187939faabbcee2e4d5c5b4a2917c66513d2c1a060000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000b1f334658667c91a0b2c5d5e7f7e3cfbcab9c8674604b3e2d1909000000000011263b50667b90a5bbd0e5faebd6c1ab9681818181818181818183868b959faabac7d7eae2d2c2b49f8a78624d38220e0000152a3f556a7f94aabfd4e9ddc8b39d88735e4834383c3e40403e3b363329201c1308000000000000000000000000000000000c21364c61768ba4b6cae6f6dac6b2a0988581848b8e7e685a4935231300000000000b1b29364657677c91a6b4a3907b65503a2a1704000000000000000000000000000000000a1f3346586f849aafc4d9effffffffff7e3cfbcab927d68523828160200000b21364b6075899fb4c9def4fffffffff4dfcab49f8b77614c37220c0000000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a0c21364a5b6d8298aabbcededed4c3b39e8875614b3a291713283d53687d92a8bdd2e7d7c1ac97826c57422d170000000000000000000000000002111a273138454b535b636a6f75787b7d7f7f807f7e7d7a7678879da7b9c7d7e7decfbeb09f957f6a604e41302111020000000000000b20364b6074889eb3c3d3e5e2cebaa99e8a7c716b6866686b747e8c9fb4bfcfe2e3d1c0b09b85705b4935210c0000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0b1b2f3f4c6176889db2becfe3f3e6d4c3b49f8c7a64564532201000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b756b6b6b6b6b6b6b6c6d7177808b9fa9bacde2f0e2cdbaa995806b563d2c1a0600152a3f556a7f94aabfd4e9ddc8b39d88735e3c484d5254555553504c4639353025180f0100000000000000000000000000000e23384e63788da3c2d3e5edd8c3ad9882726c6f787968604e3c2b1905000000000417293a4654606675889db3ae99846f5847331f0a000000000000000000000000000000000c21364c61768a9fb4c9dff4fffaf4f2f4ebd9c9ae99836e5645321e09000013253651667b90a8bacde1f6f6f4f6fcf7e3cfbcab927d68523828160300000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a1b2d3e4e63798c9fb4c8d8eaf2e0ccb8a7947f6a5847331f13283d53687d92a8bdd2e7d7c1ac97826c57422d170000000000000000000000000a151d2f38454b56606871797f84898d90939495959493928f8b8a9da6b7c5d6e5dfd0bfb2a096816c615042312312030000000000000011263c51667c91a6b8cbe1f1dfc9b49f8b7a675f555251525560697d91a1b3c6dbeeddc9b5a38e79634e39230e0000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c1628394c5d6d8297a6b7cbdcecf2dfcab7a596816c5d4b3828150200000000000011263b50667b90a5bbd0e5f5e0cbb6a08b7661565656565656575859616b7b8b9fb4c8d8eaead7c7b29d87725b4935210c00152a3f556a7f94aabfd4e9ddc8b39d88735e535a6267696a6a69656157514a43362d1f1306000000000000000000000000000f253a4f647a8fa4b9cfe4e5cfbaa5907a65545a62645c4e42311e0e00000000000a1f33465861727c82899eb3b49f8a77614c37210c0000000000000000000000000000000215273752677c92aabbcee2f7f2e7dfdddfe7dec9b49f8975604b36210b00071c3043546c8297acc6d7e9e9e1dee1e9f5ebd9c9ae99836e5645321e0900000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a22364a5c6e8399abbccfe6f6f4e7d5c5b39e8976614c3a2a18283d53687d92a8bdd2e7d7c1ac97826c57422d1700000000000000000000000c1a2731404c56606a757e868e949a9ea8a5a8a9aaaaaaa8a7a4a99fa9b7c4d4e3e4d1c1b3a1988272604b43332414050000000000000000172c41576c8196acc4d5e7e6d4c4ab95806b5c4d413d3c37444b5f6e8399aec9d9ebe4d2c1a9937e69543e29140000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c1e324657657b909fb1c4d4e7f2e2cebeb29d8775614b3f2e1a0a0000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b4141414141413a474c5d6a7f94aabbcee2f5dfcbb7a58d78634e38230e00152a3f556a7f94aabfd4e9ddc8b39d8873606871777c7e807f7e7b766f6660544a3d3124150700000000000000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d494d4f4a3e3124140000000000091c2f3f4c61768491989ea7b8bbaa917c67523c2712000000000000000000000000000000081d3144556e8398adc8d8eaf2e2d4cbc8cbd4e1cdbaa8907b6651362614010b20354a6074889db2c8dde5d7cdc9cdd7e5f4dec9b49f8a75604b36210b00000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1b2e3e4e64798c9fb5c9d9ebe3dfe3e0ccb9a795806b5947341f283d53687d92a8bdd2e7d7c1ac97826c57422d17000000000000000000000c1c2938454b5e65747f88939ca4aaafb4b9c6bdbebfc0bfbebcc7bab4bac7d4e2f2ddc9b5a39a8373605443302515060000000000000000001b30465b70859bb0c5daf0dfcbb7a68d78624d3e30282727314150667b90abbccfe3edd7c2ad98826d58432d180000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36211a2e3e4b6175879db2bdcee2f2e7d4c4b19f907b655746322010000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362c2c2c2c2c2a343f4c61768a9fb4c9dff4e6d4c3a6917c67513c271200152a3f556a7f94aabfd4e9ddc8b39d8873737d868d9193959593908a847c72635b4e4232251505000000000000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d383839362d20140600000000000e23384c5d6f8399a2adb3b8c5c8ab96816b56412c160000000000000000000000000000000b20364b6075899eb3c9def3e7d4c4b7b2b7c4d4d7c6ac97826d5443301c080f24394f64798ea6b7cbdfd7c7bab4bac7d7e7e1cdbaa9917c665136261401000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f22374b5c6f8499abbccfe7d9cfcacfd9d6c5b49e8a77614c3b2b283d53687d92a8bdd2e7d7c1ac97826c57422d170000000000000000000c1d2a3a4656606b7b87949ea7b1b5c2c4c9cdd6d2d4d4d5d4d3d2d7cdc9cdd7e5f2f0dbc5b09b857561554436261407000000000000000000001e33485e73889db3c8ddf2ddc8b29d88735a48352013111521364b61768a9fb4cadfefdac5b09a84705b45301b0000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362128384b5c6c8196a5b6cadbecf3dfcbb7a697826d5d4c39281602000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362116161617181f33475871869bb1c6dbf0e9d3bea9947e69543f291400152a3f556a7f94aabfd4e9ddc8b39d887986929ca4a7a9aaaaa8aa9f9991857968604f43322313000000000000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d382324221b100200000000000010263b50657b90a1b3c0c8ccd5c3ae99836e59442e1900000000000000000000000000000010263b50657b90a7b9cce0f4dfcbb7a69da6b7cbddc8b39d8874604b35200b192b3c556a8095aac4d4e1cdbaa99fa9bac9d9e9d7c7ad97826d5443301c08000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f2e3f4f647a8fa1b3c9dad4c9bcb4bcc9d9cdb9a896816b594834283d53687d92a8bdd2e7d7c1ac97826c57422d1700000000000000000b1b2a3b47586174808d9ca5b3b8c5c9d2d9dee1e8e0dedddcdddfe2eae2dfe2eaf5ffe7d1bca7927c6960504433251404000000000000000000001f344a5f74899fb4c9def0dac5b09b85705b3c2b1902000a1e32465773899eb3c8def1dbc6b19c86715c47311c0000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3621324556647a8c9fb4c3d4e6f3e3cfbeb39d8876614c3f2f1b0b00000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0101000417293a596f8499aec4d9eeead4bfaa957f6a55402a1500152a3f556a7f94aabfd4e9dfc9b49f8b899ca4b1b5c2bebfbfc8bbb4afa39b8b7e6a614f41311e0e0000000000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230f0d070000000000000000172c42576c8197acbfd0dee0dac4af9a856f5a45301a0000000000000000000000000000071b2d3e576c8197acc5d6e8e6d3c3b29d889db2c8ddcbb8a68f7a644f3a250f2034485a71869bb1c6dbdec9b49f899fabbccfe3ddc8b39e8874604b35200b000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f374b5d6f849aafbfd0d4c3b6ab9fabbccfd6c6b49f8a77624d3c2b3d53687d92a8bdd2e7d7c1ac97826c57422d1700000000000000081829394759617684969fabb6c3ccd5dee5dfddd5d6ccc9c7c7c8c9ced8d8dfe2eaf5fff4dfcab49f8c7e6b625043322212000000000000000000001f34495f748a9eb4c9deefdac5af9a85705a362513000005192b3c5d73889db2c8ddf0dbc6b19b86715c46311c0000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362d3e4b6074869cabbccfe1f1e8d5c5b2a0917c6658463321110000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36211111111213182b3c5a6f8499afc4d9eee9d4bea9947f69543f2a1400152a3f556a7f94aabfd4e9e2cebaa99f9fa8b5c2c9d2cfd5d4d8cec9c1b4a99f937f6a604e3c2b190600000000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230e000000000000000000001a2f445a6f8499afc4d9edeed9c3ae99846e59442f1900000000000000000000000000000d22364a5c72879db2c7ddf2dfcab6a5957f95aac5d6d5c4ab95806b563c2c1922384d62788da3b5c9ded9c9ac97828c9fb4cadfe0cbb8a68f7a654f3a2510000000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f4050657b8fa2b4c8dfcab6a59d8b9fb4cadfcdbaa997816c5a48353d53687d92a8bdd2e7d7c1ac97826c57422d170000000000000013253646576177869aa2b5bcc9d3e0e7e0d4cbc7c0c5b9b3b2b2b2b4bac7c3c9ced8e3ecf7e2cebbaa9f93806b614f40301d0d0000000000000000001e33485d73879db2c8ddf0dbc6b19b86715443301c0802082035485a74899fb4c9deefdac5af9a84705a45301b0000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36374a5c6b8095a4b6c9d9ebf4e0ccb8a798836e5e4d3a2917030000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362626262627282b36485a71879cb1c6dcf1e7d4c4a7927d68523d281300152a3f556a7f94aabfd4e9ead8c7bab4b4bac6bcb8b7bac0c8ccd5dfd1c7bab49d927d685a4935201301000000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230e00000000000000000000192f44596e8399aec5d5deded0bfaa95806b55402b1600000000000000000000000000000f24394f64798ea5b7cbdff1dcc7b29c877a8ea7b9ccdcc6b19c86715b493521293953697e93a8c1d2e3cfbcab917c869cb1c7dce7d5c5ab96806b563d2c1a060000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f5944384c5e70859ab0c0d0d7c6b29d878197acc0d1d7c7b49f8b78624d3d3d53687d92a8bdd2e7d7c1ac97826c57422d17000000000000071c3043546175859ba4b4c0cfdae7e3d5ccc3b7b2aba5a79e9d9c9d9fa9a7aeb4bac7cfdae7ebd9c8bbb49e947f695e4d3c2b190500000000000000001b30455a70849aafc5daefdec9b49e8974604a35201c151d26374d62778da8bacde1ebd9c9ac97816d57422d180000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3b4455647a8c9fb4c2d3e7f4e4d0bfb39e8977614c40301c0c000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3b3b3b3b3b3c3d3b485462788c9fb5cadff3dfcbb7a68e79634e39240e00152a3f556a7f94aabfd4e9f5e5d8cec8bbb4ada7a3a2a4aab3b8c5d1dfd7cdbbb49e8a78624d41301d0a000000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230e00000000000000000000152a3f556a7f94a7b8c5c9c8c1b3a18f7a644f3a240f0000000000000000000000000006192b3c556a8095aac3d4e6edd8c2ad988373899eb3c9decab6a48d78634d38233246576f8499afc4d9dfcab49f8b778298adc2d8eddcc7b29c87725b4935210c0000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59444050667b90a2b4c8e1cdbaa8947f798ea2b4c8dccebaa997826d5b493d53687d92a8bdd2e7d7c1ac97826c57422d170000000000061a2c3d4a60728399a3b5c2d1e3ecddd0c5b8b3a59d96908c898887888a8d92989fa9b5bcc9d6e4e6d9cebcae9d917c665a483420120000000000000000162c41566b8096abc2d3e5e1cdb9a88f7a644f4235302731364455687d92a7c6d7e9e3cfbcab937e68533e28130000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614f50536073859baabbcee0f0e8d6c6b3a1927d67594734221200000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76615151515151515152555962728298abbccfe3e3d3c3b29d8873604a35200b00152a3f556a7f94aabfd4e9f4e4d3c2b6aa9f98918e8d8f959ea7b4c1d1e2e1cdb9a89a846f5f4d392510000000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230e000000000000000000000c22374c6177899ea6b1b4b3b0a399836f5c4a36220d000000000000000000000000000b2035485a71869bb1c6dbf0e8d5c5a8937e6e8398adc8d8d3c2a9947f69543a2a364b61768a9fb4c9dfdac5b09a85707e93a8c5d5e7decab6a48e79634e39230e0000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59364d5e71859bb0c0d1d7c7b49f8a7670859aafc1d1d8c7b49f8c79634e3d53687d92a8bdd2e7d7c1ac97826c57422d1700000000000c2135495b697f94a1b3c1d2e0ecdccfbfb3a79e9387807b767472727375787d838b989fabb9c5d4e2ebe2cbbbb39e8978624d403019090000000000000010253a4f657a8fa4b6cadee9d7c6ae98836e604f4b4338454b546073859bb1c6dbebd9c8b49f8b77624d37220d0000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b7665656668708196a3b5c8d8eaf2e1ccb9a899836f5f4d3b2a180400000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b766666666666666667686b6f778398a0b2c9dae2d4c5b6a4947f6a5443301c0700152a3f556a7f94aabfd4e9e8d6c6b6a49c8c837c79787a80899ba3b4c4d4e7d7c6b4a2917c67523e2d1b070000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230e000000000000000000000a1f334758647b88959c9e9e9b938576614c3e2d1b07000000000000000000000000000d23384d62788da3b5c9def2e0ccb8a78e79677c91aabbcedac5b09a85705847333751677c91a9bacde2d2c2a9947e69798ea6b8cbe0e6d3c3a9947f6a543b2a180500000000000000000011263b50667b90a5bbd0e5d9c4ae99846f594354667c91a3b5c9e2cdbaa996816c667b90a3b4c8ddcebbaa98826d5b4a53687d92a8bdd2e7d7c1ac97826c57422d1700000000091c2f404e63798b9fb4bfd0dfefdecfbeb2a199887e746b6561585d5d546062676e78828d9ea7b7c4d4e6e9e0ccb8a79a84705f4d372715020000000000000b20354a6073869cb1bdcee2dbc6b2a0937e6e6460545b566065728196a3b5c9dde1cebbaa99846f594834200b0000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5fae5d0baa5907c7a7a7b7e85969fb0c1d2e6f2e2d1c0b49e8a78624d41301d0c0000000000000000000000000011263b50667b90a5bbd0e5fae6d1bca6917d7b7b7b7b7b7b7b7c7d80848b99a1b2becfd7cdc3b7a79c8675614b3625130000152a3f556a7f94aabfd4e9e1ccb9a89c86796e676362656b77859ba6b7cbdfe4d0c0b09b85705c4a36220d0000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230e0000000000000000000004182a3a4b5d647780868989857e74615847332010000000000000000000000000000417293a54697e93a9c2d2e5f3dec8b39e897461768a9fb4c9dfcab49f8b77614c3744556d8298adc7d7dec9b5a48d786274889eb3c8ddf0dac5b09b85705948341f0b00000000000000000011263b50667b90a5bbd0e5d9c4ae99846f594a6073869cb1c1d2d7c7b49f8a77625e70859bb0c0d1d9c8b49f8c79634e53687d92a8bdd2e7d7c1ac97826c57422d17000000000f23384c5e6f849aa9baceddede4d1c0b2a0988376696055504c473a36434b4d525a626d7b899da6b7c8d8eae8d6c5b4a2917c675544311d08000000000000071c304354667c919fb1bfced8cfbfae9c93837a74717072757b84969fb0c1d2d7cdbdb49f8c79634e3b2b18050000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1500000000000000000011263b50667b90a5bbd0e5fae7d2beab9a908f8f90939aa2b0bdcddfeae2d4c4b4a2937e685a48342313000000000000000000000000000011263b50667b90a5bbd0e5fae8d4bfac9b91909090909090909192959a9faab2bfcfc9c7bab4a59d897a6457463218080000152a3f556a7f94aabfd4e9dec9b39e8976635b524e4d4f596176889db2c5d6e8ddc8b4a38e79644f39240f0000000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230e00000000000000000000000c1c2e3f4b59616b71747370696055473a2a1702000000000000000000000000000a1f3347586f849aafc4daefedd8c3ae98836e576f849aafc9dacfbcab927d6852384b6074889eb3c8dddbc6b19c86715a6e8398adc3d8eddfcab59f8b77624c37220d00000000000000000011263b50667b90a5bbd0e5d9c4ae99846f5955677c91a4b5c9e2cdbaa997816c5950667b90a2b4c8ddcfbcab99836e5c53687d92a8bdd2e7d7c1ac97826c57422d17000000071b2d3e50667b90a2b3c7d8eae9d6c6b4a298827361584b443737332a263035383c484d5d6579889daabbcee2f1e3d1c0b29c8774604b36200f000000000000001325364c5e6c8197a1b4bbc8cfcbbaaea0988f8987868789909aa2b0bdcdcec6bab49f947f695b4a361d0d000000000000091e33485e73889db3c8dde9d4bfaa947f6a553f2a1514140d0b050000000011263b50667b90a5bbd0e5faeddac8b8aba5a4a4a5a8b0b4c0cddbe5d8cec3b7a69a8472604a3c2b1905000000000000000000000000000011263b50667b90a5bbd0e5faefdbc9b9aca6a6a6a6a6a6a6a6a6a7aaafb4bbc8cfc2b5b1a99f968779645c4a392916000000152a3f556a7f94aabfd4e9ddc8b39d8873584a3d39383b4758687d92a7b9cce0e4d1c1ac97826c573c2c190600000000000010253a4f657a8fa4bacfe4e2cdb8a28d78634d38230e00000000000000000000000010202e3a474c555c5f5e5b534b44372a1c0c00000000000000000000000000000c21374c61768b9fb4cadff4e6d4c3a8937e6853687e93abbccfd9c9ae99836e56454f657a8fa7b8cce0d4c4aa95806a55687d93a8c3d4e6e3cfbcab937d685339291603000000000000000011263b50667b90a5bbd0e5d9c4ae99846f596073869cb1c2d2d7c7b49f8a78624d4c5e70859bb0c0d1d9c9b2a18e7a6453687d92a8bdd2e7d7c1ac97826c57422d170000000d22364a5c70859aafc0d0e5f5e1cdb9a89a84726055463a3127211f17141c20232b353f4b5b647a8c9fb4c3d4e6eedfcab6a5927d67523d2d1a0700000000000008182f404b607483959faab5bcc9cbbeb2aea79e9c9b9c9fa8afb4c0cdc8bbb4a89f93816c614f3d2d1a00000000000001081e33485e73889db3c8dde9d4bfaa947f6a553f2a2929292220190e00000011263b50667b90a5bbd0e5faf7e6d6c8bebabababbbdc5c8d1deead8c7bab4a59d8877625443301d0d00000000000000000000000000000011263b50667b90a5bbd0e5faf8e7d7c9bfbcbbbbbbbbbbbbbbbcbdc0c4cacecfbfb2a49c958a8175635b4a3e2d1b0b000000152a3f556a7f94aabfd4e9ddc8b39d88735e3a2d24232a3a4b6075899eb3c9deefddc8b29d88735a4935200c00000000000310253a4f657a8fa4bacfe4e2cdb8a28d78634d3823141414110f090000000000000002101c2a343740474949463e363127190c00000000000000000000000000000215273852677d92aabbcee2f4dfcbb7a58d78634d62778b9fb5cadec9b49f8975604b566b8096abc5d5dfcbb7a68e79644f62788da5b6cadfecdac9ae99846f5746321e0a000000000000000011263b50667b90a5bbd0e5d9c4ae99846f55687d92a4b6cae1cdbaa996816c59484050657b90a2b4c8dccfbfaf99846f5d687d92a8bdd2e7d7c1ac97826c57422d170000001325364f64798ea2b4c8deeee9d7c7b49e8a7862544437291d150c0a0401080b0e19202e3d4a5c6a8095a5b7cadff5e6d3c3b09a85705b4a36210c00000000000000121d3145566072808c999fabbbc8cfc6c5b9b3b1b0b1b4bac6c8d1c5b9aa9f988a7e6c635143321f0f000000000009141d2029485e73889db3c8dde9d4bfaa947f6a553f3e3e3e3e38352b1e0e000011263b50667b90a5bbd0e5fafff4e6dad2d0cfcfd0d3dadde4efe2cebaa99f9787796359483625130000000000000000000000000000000011263b50667b90a5bbd0e5fafff5e7dbd3d1d0d0d0d0d0d0d0d1d2d5d9dfdbc6b2a199867f776c61574a3d2d201000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0d1d3145566d8298adc2d7eddfcbb7a68d78634d38230e000000000b171e253a4f657a8fa4bacfe4e2cdb8a28d78634d382929292927241d1204000000000000000c181f222b3134343029201d1509000000000000000000000000000000091d3145566e8398aec8d8eaf2ddc7b29d88725b495971869bb0c6dbcdbaa8917b66515b72879cb1c7dcddc8b29d8874604a5a72879db2c7dcf2dfc9b49f8a76614b36210c000000000000000011263b50667b90a5bbd0e5d9c4ae99846f6074879db2c2d3d7c6b49f8a77624d3b384c5d70859aafc0d1dcc7b3a18f7a65687d92a8bdd2e7d7c1ac97826c57422d170000071c3043546c8196abc0d1e3f6e1cdbaa9947f6a5a493627190b020000000000000006111f2e3e4b6074879db2c7d7e9f1ddc8b4a28e79634e39230e00000000000000021527384554606b79848d9faabbcedbd6ccc9c6c5c7c9cdd7dcccb9a79e8c827869605144342515010000000009192631353a475e73889db3c8dde9d4bfaa947f6a5553535353534d483c2b19050011263b50667b90a5bbd0e5faffefe1d6cfcccbccd0d9dce3eef4dfc9b49f8b8176635b493b2b18080000000000000000000000000000000011263b50667b90a5bbd0e5faf8e7d7c9bfbbbbbbbbbbbbbbbcbec1c7cad3d8c3ae9983786d62594b46392d1f100200000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0215273853697e93a8bed3e8e7d4c4a7917c67523c27120000000b1b2933363d4f657a8fa4bacfe4e2cdb8a28d78634d3e3e3e3e3e3c393022120000000000000000040a0c161c1f1e1b140b0802000000000000000000000000000000000b20364b6075899eb4c9def3ecd7c2ad97826d583c556a7f94aac3d3d7c6ac97826d5463788da4b6caded6c6ac97816c5443576d8297acc9daece2cdbaa9917c6751372715010000000000000011263b50667b90a5bbd0e5d9c4ae99846f687e93a5b6cae1cdbaa896816c5948342f3f50657b8fa2b4c8dcd0bfaf9a8470687d92a8bdd2e7d7c1ac97826c57422d1700000b20354a6074889db2c8ddeef4dec9b49f8a77614c3c2c18090000000000000000000001101d314455697f94a9bacde1f6e4d1c0a9947f6a5438281602000000000000000a1a2736434b5b636f7c8a9fb4c9dfdddad2cfcdcfd3dcdedec9b39e897a6d625a4e42342616070000000001142637444b53586173889db3c8dde9d4bfaa947f6a696969696969625a4835200b0011263b50667b90a5bbd0e5faf3e1d1c4bab7b6b7bbc4c7d0deecdcc6b19c8679675f4d3f2f1d0d000000000000000000000000000000000011263b50667b90a5bbd0e5faeedbc9b8aba6a5a5a5a5a5a6a7a9acb2b6c3cbc6b2a1998c8277665e4e423122120000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0010253a50657a8fa5bacfe4e9d4bfaa947f6a553f2a15000003172939464b5253657a8fa4bacfe4e2cdb8a28d7863535353535353514d40301d090000000000000000000000070a0906000000000000000000000000000000000000000013253650667b90a8b9cce1f5e5d3c2a7927d67523d4e63798ea5b6caddc8b39d887460697e94a9c2d3e1ccb9a8907b66503652677c91abbccfe3ead7c7ad98826d5544311d080000000000000011263b50667b90a5bbd0e5d9c4ae99846f74879db2c3d4d7c6b49f8a77624c3b2b23374b5d6f849aafc0d0dcc8b4a2907b687d92a8bdd2e7d7c1ac97826c57422d1700000e24394e63798ea6b7cbdff4ecd7c2ad97826d5847331e0e000000000000000000000000011527374c61768a9fb4c9def4efdac5af9a85705645321e09000000000000000317293948596275818d9faabbced1c8c5bdb9b8babec6cad3ccb9a79e8b7f736057453726140100000000081d314455606971767c899eb3c9deeed9c4ae99837e7e7e7e7e7e7e78624d38220d0011263b50667b90a5bbd0e5fae9d6c4b3a6a1a0a1a5afb3c0cfdcdecab6a49c8b7d675d4c3c2b19090000000000000000000000000000000011263b50667b90a5bbd0e5fae8d3bfab9a919090909090919194979da5b3b7c4bfb2ab9f98897c69604e40301c0c00000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090e23384d63788da2b8cde2ecd6c1ac97816c57422c1700000a1e334657616769697a8fa4bacfe4e2cdb8a28d7869696969696969665e4d39240f000000000000000002090b101414100b090200000000000000000000000000000000071c3043546c8197acc6d6e8f3dec9b6a48c77624c374a5b72879cb2c7dccbb8a68f7a6470859aafc5dadec9b49e8975604b374c61778b9fb5cadff3dec8b39e8974604b35200b0000000000000011263b50667b90a5bbd0e5d9c3ae99846e7e93a6b7cbe1cdb9a896806b5947341d1c2e3f4f657a8fa2b3c7dcd1c0b09b85707d92a7bdd2e7d7c1ac97826c57422d17000014293e53697e93a8c4d4e7f9e6d4c3a6917c66513a2a180000000000000000000000000000091f3347586f849aafc4d9eff4dfc9b49f8a75604b36210b000000000000000a1e334657627786979fabbbc8ccc1b4b0a8a4a3a4a9b1b6c2cec5b9a99f958475605544311d0c000000000b20354b60747e868c909ea8b9cce1f0dbc7b3a199939393939393907b66503b26110011263b50667b90a5bbd0e5fae3cfbaa6958c8b8c909aa2b2becfe1d3c2b6a99f8c7b655a483726140100000000000000000000000000000011263b50667b90a5bbd0e5fae6d1bba6917c7b7b7b7b7b7b7c7e8287919da6b7c6c9bcb4a79e8d7e695e4d3a2a1804000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090d22374c62778ca1b7cce1edd8c2ad98836d58432e180005182a3b4b61757d7e7e8096abc0d6ebead5bfaa95807e7e7e7e7e7e7e7c66513c2711000000000000000a151d2026292926201d150a0000000000000000000000000000000b20354a6074889db2c8ddf2f1dcc6b19c86715948343d566b8196abc5d5d5c4ab95806b768b9fb4cadfd8c8ad98836e564534475971869cb1c6dbf1e0ccb8a78f7a65503a25100000000000000011263b50667b90a5bbd0e5d8c3ad988375889db3c4d4d6c6b49e8a77614c3b2a181122374b5d6f849aafbfd0ddc8b4a3907c7d92a7bcd2e7d7c1ac97826c57422d170003182d42586d8297adc2d7ecf4dfcab6a58c77624c37220d00000000000000000000000000000417293a556a7f95aabfd4eaf7e2cebbaa8e79644e39240f000000000000071a2d3e4b6175869ca4b4bcc9ccbcafa39b938f8e8f939ca4b2becec7bab4a29a8473604b3a2a1804000000152a40556a7f939ca4a5b3b9c6d6e8f6e2d0bfb3aea8a8a8a8a8a5907b66503b26110011263b50667b90a5bbd0e5f6e1ccb7a18c7776777b8498a0b2c3d4e0d3c7baaa9e8978625544311d1100000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b7666666666666667696c727c889da8b9cccfc5b9ab9f8d7c665847331f0a000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090c21364b61768ba0b6cbe0edd8c3ae98836e59432e19000b1f3448597185929393969eb0c4d8edecd7c3af9e959393939393939384705a45301b050000000005131a2832363b3e3e3b3631271a1305000000000000000000000000000f243a4f64798fa6b7cbdff4ebd9c8ac96816c573b2b3a4f657a8fa6b8cbdcc7b19c87727d92aabbcee2cebbaa927c6752382a3a566b8196abc8d8eae8d5c5ab96816c563d2d1a0700000000000011263b50667b90a5bbd0e5d7c2ad97827f94a6b8cbe1ccb9a895806b5947341d0d081b2e3f4f647a8fa1b3c7dbd1c1b19b857d91a6bbd1e6d7c1ac97826c57422d1700061b30465b70859bb0c5daf0f2dcc7b29d87725948341f0b00000000000000000000000000000010263b50657b90a5bad0e5fdead8c8a7927c67523d27120000000000000d21364a5c6d8297a4b5c2cfd0bfaf9e95857d7a787a7e8698a0b2c2d2cdc0b3a2947f6a5947341f0a0000001b30455b70859ab0b5c2c9ccd6e4f4ffedddd0c7c4bebebebebba5907b66503b26110011263b50667b90a5bbd0e5f5e0cbb6a08b76616266728298a5b7c9d9e5d7c8b8a79a8473604b3f2e1c0c000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b766150505050515254575e6678899eb3c9ded6c9bcab9e8877614c37220e000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090c21374c61768ca1b6cbe1edd7c2ad98826d58432d18000d22374c62778ca3a8a8abb0bccde0f3f2dfccbcafaaa8a8a8a8a8a89a85705a45301b050000000715233138454b505353504b453830231507000000000000000000000006192c3c556b8095aac4d4e7f7e2cebbaa917c66513c26354b6074889eb3c8ddcab6a48e798399aec8d8dfcab49f8b76614c36263b51667b90aabbcee2f2dcc7b29d87725b4a36210c00000000000011263b50667b90a5bbd0e5d7c1ac9781899eb3c4d5d6c5b49e8976614c3a2a1800001022374b5c6f8499aebfd0ddc9b5a3968196abc1d6ebd7c1ac97826c57422d1700021527385e73889db3c8ddf2efd9c4af9a846f5a3b2a18050000000000000000000000000000000d23384d62788da2c8d8eafeead4bfaa957f6a55402a150000000000001325364e64798c9fb5c2d2dbc7b3a19580726864636569748298a4b5c9ded0c0b49e8a77614c37220c0000001c31465b71869bb0c3c3c9cdd7e5f5ffeeddd0c7c4c3c3c3c3bba5907b66503b26110011263b50667b90a5bbd0e5f5e0cbb6a08b76614c546175879dabbccfe3e6d5c5b4a295806a5d4b3a2a18080000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3b3b3b3c3c3f404c5a6a7f94aabfd4e7dac9b8a795806b553c2c19060000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090d22374d62778ca2b7cce1ebd6c1ac96816c57412c17000d23384d62788da2c1bec0c4cddbebfffbeadaccc3bfbebebebebeaf9a85705a45301b05000001152532414d56606569696560564d4132251502000000000000000000000c2035495a71869cb1c6dbf1f4dfcab49f8b76614c36213043546d8297adc6d7d3c2aa947f8a9eb4c9dedac4af9a846f58463321364b61768a9fb4c9dff4dfcab6a58e79634e39240e00000000000011263b50667b90a5bbd0e5dec8b39e899ea7b8cce0ccb9a795806b5847331c0c0000071b2e3e4f647a8ea1b3c9dad2c1b49e899eb4c9deecd7c1ac97826c57422d1700091d314556758a9fb4cadff4edd8c3ad98836e58432e19000000000000000000000000000000000c21364c61768baabbcee2f7ebd6c0ab96816b56412c160100000000071c3043546d8297abbccfe0d7c6ae99836f60544f4e4f566073869cb1c6dbe1cdb9a8947f6a543727150100001c31465b71869baeaeaeb4bac7d7eaf6e3d0bfb3afaeaeaeaeaea5907b66503b26110011263b50667b90a5bbd0e5f5e0cbb6a08b76614b4657657b8c9fb4c2d2e6e3d1c0b49f8d7b6558473625130000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3626262627292f3c4e63788da3c7d8eae7d5c5b39d88735b4935210c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090e24394e63798ea3b8cee3ead5c0aa95806b55402b16000d23384d62788da2bac7c1c7cad4e1f1ffeeddd0c7c4c3c3c3c3c3af9a85705a45301b0500000f1f32434f5f67757b7e7e7b74675f4f43322010000000000000000000000d23384d62788da4b5c9def3f0dbc5b09b85705846331f263651667c91a8bacdddc8b39d889da8b9cce1d2c2a9937e69543a291e32465770859ab0c5daefe6d4c3aa947f6a553b2b1805000000000011263b50667b90a5bbd0e5e0ccb8a79ea7b8c5d5d6c5b39e8976614c3a2a17000000001022364a5c6e8399abbccfe1ccb9a89ea8b9cce1ecd7c1ac97826c57422d17000b20364b60758baabbcee2f7ecd6c1ac97816c57422c17020000000000000000000000000000000a1e334657758a9fb4cadff4ecd7c2ac97826d57422d1802000000000b20354a6074889eb3c9dae1cdbaa88f7a644f433639384555677d92a7c9d9e9d7c6b09b85705544311d0800001c31465b7185989898989fa9bacde2f0dcc7b3a199989898989898907c66503b26110011263b50667b90a5bbd0e5f5e0cbb6a08b76614b394b5d6b8096a4b5c8d8eae3cfbcab9d8876615443301c1000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36211111121420364b60758ba9bacee2f3dfcbb7a68d78634d38230e0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0512273c51677c91a6bcd1e6ecdac9a9937e69543e2914000d23384d62788d9fa9a7abb2b6c3d4e6f6e3d0bfb3afaeaeaeaeaeae9a85705a45301b0500071a2d3d4f616a7d8890939390887d6a614f3e2d1b07000000000000000004172a3a54697e94a9c2d2e5f8e9d7c7aa95806b553a291721364b6075899fb4c9decbb8a69da6b8c6d6dec9b5a38d78624d3822162939556a8095aac6d6e9f0dbc6b09b8671594834200b000000000011263b50667b90a5bbd0e5e8d6c5b8b3b8c5d5e0ccb8a795806a5847331c0c00000000071b2d3e4e64798c9fb5c9dad6c6b9b4b9c6d6e8ecd7c1ac97826c57422d17000c21364b61768ba0b6d8eafdebd6c0ab96816b56412c1601000000000000000000000000000000071c30435474899eb3c9def3edd8c2ad98836d58432e1803000000000e23384d63788da7b8cce7dec9b49f8974604b35252327374d62778cabbccfe3dfc9b49f8a75604b35200b0000162b41566b80838383838b9fb4c9dfeed9c4af99838383838383838379644e39240f0011263b50667b90a5bbd0e5f5e0cbb6a08b76614b363f4b6074869caabbcee2ebd9c9b7a6998372604a3e2d1b0b000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0400091e324557748a9fb4c9dff4e7d4c4a6907b66513b26110000152a3f556a7f94aabfd4e9ddc8b39d88735e3f2f1f18182d3d556a8095aabfd5eae3cfbcab907b65503b2510000c22374c6177858a8e92969da5b6cadff0dcc7b3a1999898989898989885705a45301b05000c21364a5b6a7f929da6a8a8a69d927f6a5c4a36220d00000000000000000a1f33475870859aafc5daeff6e1cdbaa9907a65503b25101e3245566e8399aec8d9d5c4b8b3b8c4d5e4dbc6b19b86715a48352010253a4f657a8fa8b9cde1f2ddc9b5a38c77624d37220d000000000011263b50667b90a5bbd0e5f3e3d6ccc8ccd6e3d5c5b39e8976614c3a29170000000000001021364a5c6e8399abbccfe3d6ccc9ccd6e4f4ecd7c1ac97826c57422d17000b20354b60758aa9bacee2f6ecd7c1ac97826c57422d17020000000000000000000000000000000b20354a60758a9fb4cadff4ecd7c2ac97826d57422d18020000000011263b50667b90a5c5d5e8dcc7b29c87725443301c0e20354b60758a9fb4cadfe2cebaa98d78634d38230e000014293d51626b6e6e6e73889db3c8dde2cdb8a28d786e6e6e6e6e6e6e645c4a36210d0011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36324556647a8b9fb4c0d1e4e7d4c4b3a1947e695c4a392917030000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362119191a1921364b60768ba9bacee2f6e7d1bca7927c67523d27120000152a3f556a7f94aabfd4e9ddc8b39d88735d4b3f342a28364a5b70859bb0c5dbf0dfcab59f8b76614c36210c000a1f344759617075797d81879db2c7dceed9c4af998383838383838383806a55402b1500000e24394e63798c9fb3b8c4c4b7b39f8c7a644e39240f00000000000000000c21374c61778b9fb4cadff4f4dec9b49f8a75604b36200b16283852687d92aabbcee2d5cbc8cbd5e2e6d4c3aa95806a553c2b190b20364b6075899eb4c9def3e4d2c1a8937e6853392917030000000011263b50667b90a5bbd0e5fff3e8e0dee0e8e0ccb8a7947f6a5846331c0c000000000000071a2d3d4e63798c9fb5c9d9e8e1dee1e8f4ffecd7c1ac97826c57422d1700081d314455748a9fb4c9dff4edd8c3ae98836e59432e19000000000000000000000000000000000c21374c61768cabbccfe3f7ebd6c1ab96816c56412c17010000000012273c52677c91a7bcd1e6dac5b09a85705b362614081d31445573889eb3c8ddead8c7a48e79644f39240f00000e213444515659595e73889db3c8dde2cdb8a38d78635959595959594e4a3e2d1a070011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3628384a5c6a7f94a2b4c6d7e9e2d0bfb49f8b7a645746331e130100000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362e2e2e2f2b353f4f647a8fa4c7d8eafde6d1bca6917c67513c27120000152a3f556a7f94aabfd4e9dfc9b49f8b7b655d4c483b39455463798c9fb5cadff1dcc7b19c87725846331f0a0004182a3a474c556063676c7e93a8c5d5e8cdb8a28d786e6e6e6e6e6e6e6a62503c28130000172d42576c8197abbccbd5d4cbbcab97826d57422d18000000000000000216283852677d92aabbcee2f7efd9c4af9a846f5645321d090c22374c61778b9fb4cadfe7e0dde0e7f2dfcbb7a58e79644f39240f081d3144556f8499afc4d9eeeed9c4af99846f5746331e0a0000000011263b50667b90a5bbd0e5fafffbf5f3f5e7d5c5b39e8976614b3a291700000000000000000f21364a5b6e8398abbccfe3f6f3f5fcffffecd7c1ac97826c57422d1700011527375d72889db2c7ddf2efdac4af9a856f5a3c2c19060000000000000000000000000000000e23384d63788da2c9d9ebfee9d4bfa9947f6a543f2a15000000000012273d52677c92a7bcd1e7dac5b09b85705b3e2e18101f33475873889eb3c8ddead7c7a48f79644f3a240f0000041626343d4143475c71879cb1c6dce4ceb9a48f79644f434343434339362d200f000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36212d3e4b6073859ba8b9cde1ede2cebaa99c8775614b41311f0f00000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b43434343443c494d5d6c8196abc1d6ebf9e6d3c3a58f7a65503a25100000152a3f556a7f94aabfd4e9e2cebbaa9e8a7b6b625958565760728399abbccfe3e6d3c3ac97826c573a29170400000c1c2a3437444b4e5263798ea7b8cce0cdb8a28d786359595959595955504333210d00001c31475c71869cb1c9d9e7e7d9c9b19c86715c47321c00000000000000091e3245566e8399aec8d9ebfbe8d6c5a9947f6a54382815020a1f33475870859aafc5daeff4f2f4faf2ddc7b29d87725c4a36220d0215273754697e94a9c5d5e7f4dfc9b49f8a76614c36210c0000000011263b50667b90a5bbd0e5fafffffffff5e0cbb8a6947f6a5746331b0b0000000000000000071a2d3d4e63798c9fb4c8d9ebfeffffffffecd7c1ac97826c57422d1700001b30455a70859aafc5daeff2ddc8b39d88735a4935200c00000000000000000000000000000011263c51667c91a6bbd0e6fce8d6c6a6917c67513c2712000000000011263b50667b90a5c3d4e6ddc8b39e88735c4a3628252a384c61768ca7b8cce0e2cdbaa98d78634d38230e000000081621292b30455a70859aafc5dae7d2bda7927d68523f342a302e24211a0f01000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36211d31445563788a9eb4bfd0e3ead8c7b6a598826d5f4e3d2c1a0a000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76615959595959595b5a626b7b8b9fb4c9dff4f3dfcab6a58c77624c37220d0000152a3f556a7f94aabfd4e9ead8c8b9a89e8d8077706d6c6e758197a1b3c9daecdfcab6a5907b65503b2510000000000c181f273135394a6074899eb3c8decdb8a28d78634d4343434343403c3325150400001d32475d72879cb2c7dcf0f0ddc7b29d87725d48331d000000000000000b21364b6075899eb4c9def3f5e0ccb9a78e79644f39240f0004182a3a54697e94a9c2d2e5f8fffffbe8d6c5ac96816c573e2d1b07000f24394e64798ea6b8cbe0f5e2cebaa9917c67523727150200000011263b50667b90a5bbd0e5fafffffffae7d5c4b39e8875614b392917000000000000000000000f2135495b6d8298aabbcee2f6ffffffffecd7c1ac97826c57422d170002172d42576c8297acc1d7ecf4e0cbb8a68d78634d38230e000000000000000000000000000006192b3c566b8096abc0d5ebf5e1ccb9a88e79644e39240f00000000000d23384d62788da5b7cadfe0cbb8a68f7a645445383a3a4756677d92a7c5d5e7dfc9b49f8a75604b35200b00000000040e14182e43586d8398adc2d8edd8c3ae99836e5d4c473b453d3a30231303000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3621142637495a687e93a1b3c5d5e8e5d3c3b2a0927d685b49382815020000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b756e6e6e6e6e6e6f707378808b9fa9bacee2f6ebd9c8b29d8772594834200b0000152a3f556a7f94aabfd4e9efdfd2c6b9ab9f968b8582818389979fb1bfd0e7e6d3c2b29c8773604a35200b00000000000409151d203043546e8499aec3d9cdb8a28d78634d382e2e2e2e2b282115070000001a30455a6f849aafc2d2deded2c2af9a84705a45301b0000000000000013253651667b90a8b9cde1f6f3dec9b39e8974604b35200b00000d23384d62788da4b5c9def3fffff5e0ccb9a7907b65503b261000000b20354a6074889eb3c8ddf3ead8c7ad98836d5544311d0800000011263b50667b90a5bbd0e5fafffffff4e0cbb8a6947f695746321b0b00000000000000000000061a2c3d4d63788c9fb4c8d8eafeffffffecd7c1ac97826c57422d17000013283d52687d92a7c2d3e5f9e7d5c4a7927d67523c2c1906000000000000000000000000000b2035485a70859bb0c5daf0f3dec9b49e8975604b35200b00000000000b2035485a72879db2c6d7e7d5c5af9a84726056515051586174869cb1c7dce7d4c4af9a846f5544311d080000000000000013283d53687d92a8bfd0e7dfcab49f8c7b6962595c5a524d41302111000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c192c3c4e606f8399a7b8cce0ece1cfbeb49e8a79635645321d120000000000000011263b50667b90a5bbd0e5faeed8c3ae99838383838383838485888d959fa9bac7d8eaefe2cebbaa96806b563b2b18050000152a3f556a7f94aabfd4e9e3d2c1b5b0b5b4aa9f9a9896989ea7b1beceddebd9c8b6a4937e685443301c0700000000000000010813253654697f94a9c6d7cdb8a28d78634d382319191915130d040000000013293e53687e93a4b5c2c9c9c2b5a4937e69533e2914000000000000071c3043546c8297acc6d7e9fceed8c3ae99836e5443301c0800000c2035495a71869cb1c6dbf1fffff3dec9b39e8975604b36200b0000071c3043546e8398adc3d8edf3dec9b39e8975604b36200b00000011263b50667b90a5bbd0e5fafffffae7d4c4b39d8875604b3928160000000000000000000000000f2135495b6d8297aabbcee2f5ffffffecd7c1ac97826c57422d1700000e23384d63788da4b6cadef7eed9c4ae99846f5a493520100000000000000000000000000417293a4d62788b9fb4cadff4ebd9c8af99846f5544311d08000000000006192b3c566b8096a8bacde1dcc7b3a29781756a6665666b768399a4b6cadedfcbb7a6937d685337261401000000000000000d22374d62778ca1b3c9dae3cfbcab9f8b7f77737270675f4d3f2e1c080011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0e1e31424c6277899eb3becfe2ece1cdb9a89b8574604b40301d0d00000000000011263b50667b90a5bbd0e5faf0dbc6b3a199989898989898999a9da6abb4bac7d7e5ecdfd2c1b49f8b78634d38230e000000152a3f556a7f94aabfd4e8d6c5b5a39ba3b0bbb4afadabadb3b9c5cedce7e0cebbaa9c8674604b362513000000000000000000000f243a4f647a8fa8b9cdcdb8a28d78634d38230e040400000000000000000b20364b6074869ca4b0b3b3b0a39b8674604b36200b0000000000000b20354a6074889db3c8ddf2fae7d4c4a8937e695336261401000006192c3c556b8095aac4d4e6fafdead8c8ad98836e5544311d0800000013253653687d92a8c3d4e6f5e0ccb9a7907b65503b261000000011263b50667b90a5bbd0e5fafffff4dfcbb7a6937e695745321b0b00000000000000000000000006192c3c4d62788b9fb4c7d8eafdffffecd7c1ac97826c57422d1700000c2035495a72879cb1c9d9ebf4dfcab59f8c78634d3f2e1b0c0000000000000000000001121f3346586b8096abbccfe3f7e2cebbaa937e6953372614010000000000000e22384d62788a9fb4c1d2e0d0c0b19f9787807b7a7c818999a1b3c2d3decfbfb29d8875604b36210b00000000000000000b203448596f8499abbccfe3d9c9baa99f948c8887857d675d4b37230e0011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c001420344859677d91a0b2c4d4e7e9d7c6b5a396816c5e4c3c2b1909000000000011263b50667b90a5bbd0e5faf6e2cfbfb3aeaeaeaeaeaeaeaeb0b3b7c4c9cdd7e5e3dccec1b5a396816c5a4935200c000000152a3f556a7f94aabfd4daccb8a79b86969fb4bac7c2c1c3c9ccd6e3dfd5cbbbb49f8c7b655544311808000000000000000000000b20354b6075899eb4c6c6b8a28d78634d38230e00000000000000000000091d314556627886939b9e9e9b938578625645311d090000000000000f253a4f647a8fa6b7cbe0f0f0dfcbb7a68d78634e38230e000000000f24394f64798ea6b7cbdff0f0e2cebbaa927c6752372715020000000d23384d62788da5b6cadff0e8d6c5ac96816c573e2d1b07000011263b50667b90a5bbd0e5f0f0f0e6d4c4b29d8875604b39281600000000000000000000000000000e2035495a6d8297a9bacee2f0f0f0ecd7c1ac97826c57422d17000006192c3c556a8095abbccfe3f7e3cfbcab97816c5d4b392a1c0f050000000000000009141d30414c6176899eb3c9d9ebf4dfcab49f8b77624c37220d000000000000000b2034485a6a7f94a3b5c2d2e2cebdb1a59d95918f91969ea7b3bfd0e1d0c0b2a0917c675745321e09000000000000000005182b3b4f647a8d9fb5c0cfe1d7c7bab4a9a69e9c9a8f7b65503a25100011263b50667b90a5bbd0e5f0e0cbb6a08b76614b36210c0005182b3b4d5f6d8298a6b7c9daece4d2c1b09f917c665a48372614010000000011263b50667b90a5bbd0e5f0f0edddcfc6c3c3c3c3c3c3c3c4c5c8cbd4dfe2dfdbd0c7bdb1a39b8575614b3c2c1906000000152a3f556a7f94aabfc4c4c9b39e897481939fa9b4c0c9cdd7d2d2d3cac4b8b39d947f695d4b3727150000000000000000000000081d3144556f849aafb1b1b1a28d78634d38230e0000000000000000000002152738485a62747e858989857e74625a4838271502000000000006192c3c566b8095abc4d5dbdbdbdbc8b29d88735b4935210c000000000d22364a5c73889db2c8dbdbdbdbc9b49f8a76614c36210c000000000b2035485a72879db2c7dbdbdbdbc7b29d87725c4a36220d000011263b50667b90a5bbd0dbdbdbdbdbcbb7a6937e695645321b0a000000000000000000000000000006192c3c4d62788b9fb4c7d7dbdbdbdbd7c1ac97826c57422d170000000e23384d62788c9fb4c9daececdac9b49f8c7b6557473a2d2019100d0b0b0c0e12192631404d5f6d8298a7b8cce7f7e7d1c1ae99846f5947341f0b0000000000000005192b3c4b6074859ba4b5c1ced8cec3b7b2aaa6a5a6abb3b8c5d0d6cdbfb3a298836e5f4d392816030000000000000000000d22364a5c6c8197a2b3bfccd6d7cdc9c5b8b3b1a9937e69543e29140011263b50667b90a5bbd0dbdbdbcbb6a08b76614b36210c00000d1d30414c6176879dabbccfdadbdbcdbdb39e8978625544311d110000000011263b50667b90a5bbd0dbdbdbdbdbdbdbd8d8d8d8d8d8d8d9dad9d8d6d9cfcac6c0b3af9f978577625746321e0e00000000152a3f556a7f94aaafafafafab98826d6c7e8a9aa2aeb4b9c6bdbdc3b6b2a69d917f6a614f3f2e190900000000000000000000000115273754697e939b9c9c9c9c8d78634d38230e00000000000000000000000a1a2b3c4856606970747470696056483c2b1a0a0000000000000c2135495b71869cb1c6c6c6c6c6c6c0ad98826d583d2c1a0600000000071b2d3e576c8197acbdc6c6c6c6bfaf9a846f5846331f0a0000000006192b3c576c8297acbec6c6c6c6c6b7a58e79644e39240f000011263b50667b90a5bbc6c6c6c6c6c6c2b29d8775604b382816000000000000000000000000000000000e2035485a6c8197a9bac6c6c6c6c6c6c1ac97826c57422d170000000c2035495a6e8398abbccfe3f3e3cfbcab9d877561594a3d342b252221202123262f37444b5f677d91a0b2c5d6e8ecdac9b4a38f7b65503b2a180500000000000000000d1d3144556176869ba3b4bbc8cdd4cac7bfbbbabbc0c8ccd5ccc6b9b4a1998474604b40301b0a00000000000000000000071b2d3e4b60738499a1b4b9c6cbd4d6d5cbc8bfaa947f6a553f2a150011263b50667b90a5bbc6c6c6c6c6b6a08b76614b36210c000000121f334658657b8d9fb5bdc4c6c6c6c6b8a79a8473604b3f2e1a0a00000011263b50667b90a5bbc6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5c5c4c2c0c9bcb4b0aaa29a8f81756259473928160000000000152a3f556a7f949a9a9a9a9a988d7b656069788490999ea8a6a7a7a6a59c94887c6a615043322111000000000000000000000000000b20364b60738086878787878678624d38220d0000000000000000000000000e1e2b38454b545b5e5e5b534b45382b1d0d000000000000000e23384d63788da4b1b1b1b1b1b1b0aea2917c67513c271200000000000010253a4f647a8f9faeb0b1b1b1aea1927d67523a291704000000000011263b51667b90a0aeb1b1b1b1b1b1aa95806a553a2a17040011263b50667b90a5b1b1b1b1b1b1b1b0a4937e685645321a0a0000000000000000000000000000000005192b3c4d62788b9fafb0b1b1b1b1b1b1ac97826c57422d1700000006192c3c4f647a8d9fb5c5d6e8ebd9c9b6a59b8577635b4d483b3a37363536383c404c5560697d8b9fb4becfe3f3e3cfbcab9b85705d4b371d0d000000000000000000021527374758627785959faab4bac7c9ccd6d0cfd0d5ccc8c5b9b3a89e938375605645322212000000000000000000000000101d314455617583949ea8b2b7c4c0c2c4c4c0aa95806b55402b160011263b50667b90a5b1b1b1b1b1b1b1a08b76614b36210c0000000417293a4c5d6b80969facafb1b1b1b1b1b1a295806a5d4b38281502000011263b50667b90a5b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b0b0afadaba8ab9f9b958d847a6d6157473b2a1b0b000000000012273d52677d848585858584837c665d4f5a63707b83898e919292918d877f76665e50433325140300000000000000000000000000081d314455606b717171717171625a4834200b000000000000000000000000000e1a2832363e464949463e3631271a0d0000000000000000142a3f54697f949b9b9b9b9b9b9b9b99938473604b35200b0000000000000d22374b5c6c8191999b9b9b9b99938372604a35200b0000000000000f24384c5e6e8292999b9b9b9b9b9b9b9b86715847331f0a0011263b50667b909b9b9b9b9b9b9b9b9b968674604b3828150000000000000000000000000000000000000e203448596b80939a9b9b9b9b9b9b9b9b97826c57422d17000000000e22364a5c6d8297a7b8cce0ebe7d4c3b5a39b87796d6259544f4d4b4b4b4e51565e66737e8d9fa9bacddcece4d3c3b59f8d7a644f3f2e1c000000000000000000000009192a3a475962737f8b979fa9afb4b9c6bbbcbbc5b8b3aea79e968a7e6e60574538281604000000000000000000000000011527374657616e7f89959da6a8abadaeafadab96816c56412c170011263b50667b909b9b9b9b9b9b9b9b9b8b76614b36210c000000000c1c2f3f4b60728190979a9b9b9b9b9b9b9b9b8c7b655645321d09000011263b50667b909b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a99989693908b8680786f645c4b46392a1d0d0000000000001025394d5f676f6f6f6f6f6f6e665e4c3f494d5e666e75797c7d7d7b78726a61584c4033251506000000000000000000000000000002152737444b565b5c5c5c5c5c4d483c2b190500000000000000000000000000000a151d20293034343029201d150a000000000000000000172d42576c81868686868686868686847e74605443301c08000000000000081b2e3e51636c7c8386868686847e74605443301c07000000000000091c2f404b60737d8486868686868686868576614c37210c000f253a4f647b868686868686868686858176615544311a0a00000000000000000000000000000000000005192b3b4b60737e848686868686868686867f6a553f2a1500000000071b2d3e4c6277899eb3bdcddcede1d2c1b5a59c8c82786f69656260606163666b727b86949fabbac7d7eae6d6c6b6a497826d5c4a3621110000000000000000000000000c1c2a3b4755606a79828a939a9ea8a5a6a6a6a4a79e999289807768604b4539281a0a000000000000000000000000000009192939464c6169767f888d9396989999989692816c57422d17000f253a4f647a868686868686868686868575604b36210b0000000000111c304354606d7b82858686868686868686868375604b36200b00000f253a4f647a86868686868686868686868686868686868686858483817e7a76716a635b4f4b3e32281b0d000000000000000a1e30414d525a5a5a5a5a5a58504c402f35404c5056606366686866625a544c463a302215070000000000000000000000000000000009192731364146474747474738342b1d0d0000000000000000000000000000000002090b141b1f1f1b140b090200000000000000000000152a3e52636c7171717171717171716f68605645362614010000000000000010203445515e666e717171716f686055443625130000000000000000121d31445560676e717171717171717171615847331f0a000d22374b5d64717171717171717171706c61584737271500000000000000000000000000000000000000000d1d31445560696f7171717171717171716a61503c28130000000000101f344859667c919fb0becfddebdfd2c3b6ab9f978b847e7a77767576787b8087909ca4b4bcc9d7e5e5d7c8b9a89c8675614b3e2e1b03000000000000000000000000000d1d2a37444b5b636c777e84898d8f9191918f8c88847d766b62594e4232281b0a000000000000000000000000000000000b1b2933434f58616a73787d8182848483817c78624d37220d000d22374b5d647171717171717171717171605645321e09000000000001142636434b5d656c6f7171717171717171716f605645321d0900000d22374b5d6471717171717171717171717171717171717170706f6d6b68656157554d493c372e1e160b000000000000000001132330393d454545454545433b382f22202f3838454b4e515252514d493c3633291b120400000000000000000000000000000000000009151d202b3132323232322220190d0000000000000000000000000000000000000000000000000000000000000000000000000000000f22354552575c5c5c5c5c5c5c5c5b59534b4538281808000000000000000002172734404d51595b5c5c5c59534b4437271808000000000000000001142637444b52595c5c5c5c5c5c5c5c5c4c473a2a170400081b2e3f4b4f5c5c5c5c5c5c5c5c5c5b574c473a2a1909000000000000000000000000000000000000000001142637444b545a5b5c5c5c5c5c5c5c5c55504333200d000000000005182a3b4d5e6c8196a0b2bfcee1e9e1d3c9bcb4aa9f99948f8c8b8a8b8d91969ca5b1b5c2cfd9e7e3d6c7baaa9e8a7a6457463220100000000000000000000000000000000d1927313d494e5961696f74787a7b7c7b7a77736e6861574d483b311e160a0000000000000000000000000000000000000b171e323a474c555b63686b6d6f6f6d6b6762594834200b00081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c4b4538281603000000000000081826303f4b50575a5c5c5c5c5c5c5c5c5c594b45382815020000081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5b5a585653504b463938352c221b10030000000000000000000005131e252730303030302f2e26231c11111c23273136393c3d3d3c38352c211f170b00000000000000000000000000000000000000000002080b161c1c1c1c1c1c0d0b050000000000000000000000000000000000000002090b101414100b09020000000000000000000000051727353e42464646464646464646443e3632281a0a0000000000000000000008172230393c4446464646443e36312719090000000000000000000009192631353d4446464646464646464637332a1c0c00000010202e373a464646464646464646464137332a1c0c0000000000000000000000000000000000000000000009192631353e454646464646464646463f3c332515030000000000000d1d30404b60728298a1b1bdcdd6e4e7d9cfc8bbb4afa9a4a2a0a0a0a3a6abb2b6c3c9d2e3e8e1d1c5b9a99f8c7c665c4a392916020000000000000000000000000000000009151d2c353b474c545460626566676665625959534b4639342b1d1303000000000000000000000000000000000000000003141c2933373d494e535658595a5856524d483b2b1905000010202e373a46464646464646464646463632281a0a000000000000000008141c2f383b4245464646464646464646443632281a0a0000000010202e373a46464646464646464646464646464646464646454443413e3b3633292321190e0800000000000000000000000000010a10121a1a1a1a1a1a19110f090000090a151d2024272828262320190e0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2026292926201d150a00000000000000000000000917222a2d3131313131313131312f29201d150a00000000000000000000000004121d24272e313131312f29201d150900000000000000000000000009141d20282f313131313131313131211f170c0000000002101b2225313131313131313131302c221f180c00000000000000000000000000000000000000000000000009141d2029303131313131313131312a282015070000000000000000121c304354607483979fb4b9c6d0dde4e3d9cecac4bebab7b5b5b6b8bbc0c7cad3dee5e1d6ccc1b4a79e8b7d665e4c3e2d1b0b000000000000000000000000000000000000010f1a212a343736434b4d505151514f4d483b3d36322920180d0000000000000000000000000000000000000000000000000c171f212c35383e4143444443413d37342b1d0d00000002101b22253131313131313131313131211e160a0000000000000000000001111c23252d303131313131313131312f201d150a000000000002101b222531313131313131313131313131313131313131302f2e2c2925211e170e0c0600000000000000000000000000000000000000050505050505030000000000000002090b0e111313110d0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131a2832363b3e3e3b3631271a130500000000000000000000050f15171c1c1c1c1c1c1c1c1c1a130b09020000000000000000000000000000000a0f11191c1c1c1c1a130b0802000000000000000000000000000001080b12191c1c1c1c1c1c1c1c1c0c0a0400000000000000080d0f1c1c1c1c1c1c1c1c1c1b170c0a04000000000000000000000000000000000000000000000000000001080b141a1c1c1c1c1c1c1c1c1c15130d03000000000000000000011426364556607381929ea8b3bfc8d1dee0e2dfd9d3cfcccbcacbcdd0d5dcdfe5ded7cdc6b9b4a39b897b665e4d402f200f000000000000000000000000000000000000000000060c181f22263035383a3c3c3c3a37342b28211e160b050000000000000000000000000000000000000000000000000000040a0e1a2123282c2d2f2f2e2c272220190d000000000000080d0f1c1c1c1c1c1c1c1c1c1c1c0b090300000000000000000000000000080e10171a1c1c1c1c1c1c1c1c1c1a0b09020000000000000000080d0f1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1b1a181613100c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000715233138454b505353504b4538302315070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081828384555606c7d8a99a1b0b4c0c9ccd6dadee1e8e1e0dfe0ece3dfddd9d3cac7bab4a89e948578655d4d40302211010000000000000000000000000000000000000000000000040b0c141c20232526272625222019130c0a0300000000000000000000000000000000000000000000000000000000000000060c0e1316181a1a1816120d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0b0b0b0b0b0b0b0801000000000000000000000000000000000000000000000000000000000000000001152532414d56606569696560564d413225150200000000000000000000000000000000000000070d0f20202020202020201e13110b020000000000000002090b1a20202020202020201f0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000020002090b0c0d0c0c0b08010001000000000000000000000000000000000000000000000000010b1113131313131313130b09020000000000000000000000000a1a2837444b5f677883909aa2adb3b9c5c5c9ccd6cfd0d1d0dacfcac8c3c2b6b1a99f96897f73625a4b3f3022120300000000000000000000000000000000000000000000000000000001080b0d10111211100d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811181a202020202020202012100a0000000000000000000000000000000000000000030a0c1115191b1d1e1f1f1e1d1b17130e0c07000000000000000000000000000000000000000000000000000009151d20202020202020201d140c0a0400000000000000000000000000000000000000000000000000000000000f1f32434f5f67757b7e7e7b74675f4f43322010000000000000000000000000000000000002101b222435353535353535353429261f140600000000000a151d202f353535353535353534211e160a00000000000000000000000000000000000000000000000000000000000000000000000001080b0e13171a151d2021222221201d151a16120e0c060000000000000000000000000000000000000005131e252828282828282828201d150a0000000000000000000000000a192631414d5a626e7b858f979ea7abb0b4b9c6babbbcbbc9bcb5b2aea9a49c948a8177696055483c2e2112040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f11202020202020202020202020202020202020201f1e1d1b1814100b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b19252c2f353535353535353527241d120400000000000000000000000000000002090b171e21262b2e30323334343332302d2924211a0f0b05000000000000000000000000000000000000000000000919273135353535353535353126211f170b000000000000000000000000000000000000000000000000000000071a2d3d4f616a7d8890939390887d6a614f3e2d1b070000000000000000000000000000000010202d36394a4a4a4a4a4a4a4a493e3b312414000000000a1a273136444a4a4a4a4a4a4a4a4a3632281a0a000000000000000000000000000000000000000000000000000000000000000002090b141d2024282d30283236373737363531272f2b27232019110b08020000000000000000000000000000011323313a3d3d3d3d3d3d3d3d3631271a0a00000000000000000000000009141d303c494d5d65707a828990969b9ea8a4a5a6a6a6a5ab9f9d99948e877f776c62594b44372b1e11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0f12131415161514110e0c06000000000000000000000000000000000004111c232635353535353535353535353535353535353535353432302d2a25211e160b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000819293741444a4a4a4a4a4a4a4a3c3930231200000000000000000000000000000a151d202933363b40434647494949494745423e39362d2220190e050000000000000000000000000000000000000008182737444b4b4b4b4b4b4b4b44373633291b0b00000000000000000000000000000000000000000000000000000c21364a5b6a7f929da6a8a8a69d927f6a5c4a36220d000000000000000000000000000000071b2d3e4a4f60606060606060605e534e42311d0d000002152738454b595f606060606060605f4b45382816030000000000000000000000000000000000000000000000000000000000050a151d20263135393e424538454b4c4c4c4b4b443744413d38352c26201d1509060000000000000000000000000b1e31414e52535353535353534b453827150200000000000000000000000001131e2b353f4c505d646d757b8085898c8e909191908f8e8b88837e79726a61594c483b3127190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b161e21242728292a2b2a2926232019100e08000000000000000000000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494845423f3a363228211e160a05000000000000000000000000000000000000000000000000000000000000000000000000000000000011253747545a6060606060606060514d41301d0a000000000000000000000008131c28323639464c5155585b5d5e5e5e5e5c5a57534e4a3d38352b20180d0000000000000000000000000000000000011426364455606060606060606055584c463a291704000000000000000000000000000000000000000000000000000e24394e63798c9fb3b8c4c4b7b39f8c7a644e39240f0000000000000000000000000000000d22364a5c7075757575757575757368604e3b2b190500091d314556606f757575757575757574605645321e09000000000000000000000000000000000000000000000000000000040d192028323637444b4e53575a5d56606162616160555c5956524d493c3b36312720190e060000000000000000000011253a4e5f6868686868686868605645311d0900000000000000000000000000000e19202f383f4b4f5660666b707477797a7b7c7b7a7876736e69645c554c473a342b1d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b22293236393c3d3f40403f3e3c38352c25231c11080000000000000000000000091c2f404c50606060606060606060606060606060606060605f5e5d5a58544f4b45383632281f180d03000000000000000000000000000000000000000000000000000000000000000000000000000003182c4154656f7575757575757575675f4d392410000000000000000000000b18253038454b525761666a6e70727374747372706c68635b554d483c342b1d1300000000000000000000000000000000081c304354607475757575757575746d615846331f0f00000000000000000000000000000000000000000000000000172d42576c8197abbccbd5d4cbbcab97826d57422d180000000000000000000000000000000f24394f647a8a8a8a8a8a8a8a8a887e68594834200b000b20364b6074838a8a8a8a8a8a8a8a8a75604b36210b00000000000000000000000000000000000000000000000000000c171f2b3438454b51556063686c6f727475767777767573716f6b67635a57504b4437352c211a0f04000000000000000013283d52687d7d7d7d7d7d7d7e74604b36200b00000000000000000000000000000006111c232e3738454b51565b586164656667666563605659544e4a3d37342a20180d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e3639464b4f51535455555553514d493c3b372f231c11020000000000000000000f23384c5e6675757575757575757575757575757575757575747372706d69656056524b4539342a1e160a00000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f838a8a8a8a8a8a8a8a7c67513c27120000000000000000000b1b2936434a5660676f767b80838587888989888785827e79726b625a4d483b311c130800000000000000000000000000000b20354b6074868a8a8a8a8a8a8a898276614c3d2d1a070000000000000000000000000000000000000000000000001c31475c71869cb1c9d9e7e7d9c9b19c86715c47321c000000000000000000000000000006192c3c556b80959f9f9f9f9f9fa79e8c78624d37220d0215273852687d929faa9f9f9f9f9fa9917c665137261401000000000000000000000000000000000000000000000004131c2a333b484d5660666d74797d8285878a8b8c8c8c8b8a898684807c78726d6660554d493c352c1f170c000000000000001f354a5f748b9292929292928b76614c36210c000000000000000000000000000000000009101b222832363b413a474c4f50515151504e4b45383f39362d221f180c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4a4f5761646768696a6b6a6966635a58504b3f372e1d150a000000000000000011263b50667b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898785827f7a756e6760574c483b32281a10020000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f84999f9f9f9f9f9f917c67513c271200000000000000000a1a293946546068757d848a9095989b9c9e9e9e9e9c9a97938e8780786d62594e413025180800000000000000000000000000081c304354687d92a5a0a0a0a0a79e98836e5b4a36210c0000000000000000000000000000000000000000000000001d32475d72879cb2c7dcf0f0ddc7b29d87725d48331d00000000000000000000000000000c2035495a71869cb1b5b5b5b5c5b8aa937e6953392816091d3145566e8399aebbb5b5b5b5b5ad97826d5544311d08000000000000000000000000000000000000000000000c181f313a474c59626b757c82898e93979a9d9fa9a1a1a1a0a79e9c9996928d88827b746b635a4e493d33291c0c0000000000001f354a5f748a9fa8a8a8a8a18b76614c36210c00000000000000000000000000000000000000080a151d20262b2a3337393b3c3c3b3a393632282924211a0f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c647276797c7d7e7f807f7e7b78736d655d504b3f32281a0b0000000000000011263b50667b909f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa99f9e9d9a97948f8a837d756b62594b45382d20140000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f8499afb5b5b5b5a6917c67513c27120000000000000002162838465761727e88929a9faaaaadb0b2b3b3b3b3b1afaca8a59d958b8277685f4a4336251300000000000000000000000000011426364b6074879db2c4b5c5b9b3a08e79634e3a29170400000000000000000000000000000000000000000000001a30455a6f849aafc2d2deded2c2af9a84705a45301b00000000000000000000000000000d23384d62788da4b5c9cacacad5c8af99846f5745321e0b20364b6075899eb4c9d9cacacac8b39e8874604b35200b0000000000000000000000000000000000000000010f1d2a34424e58616c78808891989ea7a8acafb2b4bac7b7b6c5b8b3b1aeaba7a59d97908880786e635b4c463a29170400000000001f354a5f748a9fb4bdbdb6a18b76614c36210c00000000000000000000000000000000000000000002090b1116181f2224252627262523211e16140f0d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a868b8e91929495959493918d88827b71655d4b4538291b0b00000000000011263b50667b90a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bab4b3b2afada9a99f99928980776a60564a3e321c1308000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f8499afc4cacabca6917c67513c271200000000000000091e324556617583939da6afb4bbc8c3c5c7c8c9c9c8c7c5c1c3b7b2aa9f978a7d6c605443301c1300000000000000000000000000081d314455697e93a6b8cbd6ccbeac97816c5846331f08000000000000000000000000000000000000000000000013293e53687e93a4b5c2c9c9c2b5a4937e69533e29140000000000000000000000000004182a3a54697e94a9c2d2e5dfdfdec9b49f8a76604b362110253b50657b90a8b9cde1dfdfe0ccb8a78f7a654f3a25100000000000000000000000000000000000000003111f2d3b474c606876818b959ea6adb3b8c5c1c4c2bfbdbcbcbcbdbec0c2c4c0c3b7b2aca79e968c83796c615846331f0a00000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000040a0c0f10111211100e0b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f9faba6a8a9aaaaaaa8a6a69e9790857b6c60564639291a0a000000000011263b50667b90a5bbcacacacacacacacacacacacacacad7cdc9c8c7c5c2c7bab4aea79e958a7f75645c4f42302518080000000000000000000000000000000000000000000000000000000000000000051a2f445a6f8499afc4d9d1bca6917c67513c271200000000000006192b3c4b60748599a1b3b7c4c9cec8c5bfbcbab9b8b9babdc1c7cac8bbb4a89e928172604a41311c0c000000000000000000000000011527374b6075889eb3c5d6dec9b49e8a76614c36251300000000000000000000000000000000000000000000000b20364b6074869ca4b0b3b3b0a39b8674604b36200b000000000000000000000000000a1f33475870859aafc5daeff6f4e1cdbaa9907b66513b26192b3c566b8196abc6d6e9f3f5e7d5c5ab96816b563d2d1a0700000000000000000000000000000000000211212e3d4a59616f7d89969fa9b3b8c5c7c7bab4b0adaaa8a7a6a7a7a9aaadb0b3b8c5c2c5b8b3ab9f988c8176614c36210c00000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da2bcc9bdbebfc0bfbec4b8b3ada39b908174615746382715020000000011263b50667b90a5bbd0dfdfdfdfdfe3dcdad9d9d9d9d9d9d9dadbdcdad7d7cdc9c5b8b3a89e94867a69604a433625130000000000000000000000000000000000000506060606060606060606060606061a2f445a6f8499afc4d9d1bca6917c67513c27120000000000000b2035485a6c8197a3b2bfcbd4ccc1b4b0aaa7a4a4a3a4a5a7acb2b6c3cdc6b9b49f96816c5f4e3a2a1804000000000000000000000000091e3245566a7f94a7b9cce0cdb9a8947e695443301c0700000000000000000000000000000000000000000000091d314556627886939b9e9e9b938578625645311d09000000000000000000000000000c22374c61778b9fb4cadfe9e1dee1d7c7ac97816c573d2d2035485a71869cb1c6dce1dee1e8dcc7b29c87725b4a36210c000000000000000000000000000000000010202e3f4b5b637783929ea7b4bac7c3b7b2aba99f9b979593929192929395979a9ea7a7adb3b8c4bcb4aa9f927d67523d281200000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000000000000060c0e12151615130f0b0801000000000000070a0b0b0b0b0b0a08040000000000000000000000000000000000000000070b0d111315161514120f0b090300000000000000000000000000000000000c21364b61768ba8b9cdd2d3d4d5d4d3d5cbc8c1b5b09f978475615645311d100000000011263b50667b90a5bbd0e5f4ffeeded0c7c4c4c4c4c4c4c4c4c4c6c9ccd6dbdeded5ccc6b9b4a49c8b7e6b605443301c150300000000000000000000000003090b151b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b2f445a6f8499afc4d9d1bca6917c67513c27120b02000000000d23384d62788c9fb4c1cfd6c5b8b3a39b95918f8e8e8f9092969da5b4bac7ccbdb09f927d685847331f0a000000000000000000000000031628384c6176899eb3c6d7d7c6b29c8773604a35200e0000000000000000000000000000000000000000000002152738485a62747e858989857e74625a48382715020000000000000000000000000316283852687d92aabbcee2d7cdc9cdd7c7b29d87725b4a3622384d62788da4b6c9d6ccc9ccd6dfcab6a58e79634e39240e000000000000000000000000000000000e1e2e3e4b5d65798799a1b3b9c5c1b4b0a59d968f8a8682807e7d7c7c7d7e808285888d92979ea6aeb5bcb39e8975604b36210b00000000001f354a5f748a9fb4c9cbb6a18b76614c36210c000000000000000000000001080e192023272a2b2a2824201d15090700070d0f1c2020202020201f1d180f030000000000000000000000000000050b0d131c202326292a2b2b2a2725211e160d0b050000000000000000000000000000091e32465774899eb4c9d7d5d5d7dcdee5e0ddd2c9bdb1a29a8474604b3f2e1b0800000011263b50667b90a5bbd0e5faf7e3d0c0b4afaeaeaeaeaeaeaeafb1b3b9c5c6c9d2dfe0d6cdc3b6aa9f938072604a4332211100000000000000000000000a161e212a3031313131313131313131313131313131445a6f8499afc4d9d1bca6917c67513c29261f1406000000152a40556a7f95abbccfe0ccb8a79e9085807c7a7979797a7d8187929fa9bacdcdbdb39e8977614c37220e000000000000000000000000000a1e3346576b8095a8bacddfcab6a5907b66513c2c1906000000000000000000000000000000000000000000000a1a2b3c4856606970747470696056483c2b1a0a00000000000000000000000000091e3245566e8399aec8d9d7c7bab4bac7cab7a58e79634e39273853687e93a8c2d3c6b9b4b9c6d6d3c3aa947f6a553b2b190500000000000000000000000000000a1a2c3c4b5c657b8a9da5b3bfc4b7b3a39b9087807a75716d6a6867676768696b6d7073787c828890999fabac97816c5745321e0900000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000008141c202c35383d3f403f3d3a353127221b101b22243135353535353535322c2113030000000000000000000001080d182022253035383b3e3f40403f3d3a3632282220190e06000000000000000000000000031628395d72879db2c5c2c0c0c2c6cad3dfe6e4ddcec0b4a296816c5d4b37221100000011263b50667b90a5bbd0e5faf1dcc7b4a29a999999999999999a9b9ea7a9b1b5c2cbd4e2e1d3c8bbb49e96816c614f3f2f1c0c0000000000000000000a1b283236404546464646464646464646464646464646465a6f8499afc4d9d1bca6917c6751453e3b312414020000182e43586d8398adc9d9dec8b39e897b706a676564636465686c737d8b9fb4c9deccb8a795806a553d2c1a06000000000000000000000000031729394c61778a9fb4c8d8d3c3af99846f5b4935210b00000000000000000000000000000000000000000000000e1e2b38454b545b5e5e5b534b45382b1d0d00000000000000000000000000000b21364b6075899fb4c9dac9baa99fa9bacdc3a9947f69543a3145566e8399aec3ccb9a89ea8b9c7d7c6b09b8671594834200b0000000000000000000000000003162838495b647a8a9ea8b7c3bfb3a69d91857b746b656055585553525152525455585b5a62676d747b848c989c8e7a644f3928160300000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000e182630353c494d52555555534f4b4437362d1e2d3639464a4a4a4a4a4a4a473e31210f00000000000000000109141d202b343736434a4d505354555554524f4b453938352b211a0f0200000000000000000000001b30465b70859bb0b0adababadb1b6c2cad3e1ebdfd1c0b59f8d7a644f3f2e1c08000011263b50667b90a5bbd0e5faefdac4af9a84848484848484848586898d939ca4b2b7c4d0dde6d8cebcb09f947f6a5d4b3a2917040000000000000003162839454b555a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b6f8499afc4d9d1bca6917c675b5a534e4231201000001a2f44596f8499aec4d9d3bea9937e695d55524f4f4e4f505254606a7f95aabfd4d6c5b29d87725b4935210c000000000000000000000000000b1f3447596c8196aabbcedfcab59f8c78634d3929160300000000000000000000000000000000000000000000000e1a2832363e464949463e3631271a0d00000000000000000000000000000114263651667c91a8bacdcfbcab9f899fb4c9c5af9a85705846364b6075899eb4c9c9b49e899ea9bacdc9b5a38c77624d37220d00000000000000000000000000091e3245566379899ea8b9c6bcb0a199887c70666054504b4437403e3d3c3d3d3e40423c484d525560666f7982877f6a5c4a361b0a0000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000002101e2c36434b525a63676a6b6a686460554e4a3e333e4a4f5c5f60606060605f5b4f3e2c180000000000000008141c2631353b484d5354606266686a6b6a6967646057554d483c352c1d150900000000000000000001162c41566b81969c9b979696979ca4b2b6c3d3e3eee3cfbcab9b85705d4b372309000011263b50667b90a5bbd0e5f7e1ccb7a28c786f6f6f6f6f6f6f6f7174787e86929da6b3bfcfdceae2cdbdb49f8d7b655847331f0f00000000000000091e324557606a70707070707070707070707070707070707070708499afc4d9d1bca6917c70707068604e3e2d1b0700172c42576c8197acc0d1d0bba5907b66503f3c3c3d3e3f413a474f657a8fa4bacfdfcbb7a58d78634e38230e0000000000000000000000000004182a3a4d62788b9fb4c9d9cfbcab96816c5746321e0a0000000000000000000000000000000000000000000000000a151d20293034343029201d150a000000000000000000000000000000081c3043546d8297adc6d7cab59f8d8197acc6cab49f8a76614c3b50657b90a8b9cdc8ac97818b9fb4c9d2c1a8937e68533a291704000000000000000000000009192e3f4b6075869ca7b8c6bdb09e968376675f514b43363631272b2928272728292b2d2b353837444b505c646d726a61503e2d1b000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000010202d3c4954606871787c7f807f7d7a756d645c4c464a5c6471757575757575746d5b47321d0000000000010f18263037444b515962696e74787b7e7f80807f7c7a76716a625a4e493d3127190c0000000000000000000c21364c617582878682808082878f9da5b6c5d5e8ecdac9b4a38f7a6550372614010011263b50667b90a5bbd0e5f7e1ccb7a28c77625959595959595a5c5b6369737d8899a1b2becfdfebe3cfbcab9d8876614c3d2d1a07000000000005192b3c4b60757f8586868686868686868686868686868686868685899eb3c9dedcc7b29c868586857e685c4a36220d0011263b50667b90a2b4c1cebea9947f695a4f505153545556585861697d92a7bdd2e6d4c3a6917b66513c261100000000000000000000000000000c2034485a6d8297abbccfdac9b39e8976614b3621110000000000000000000000000000000000000000000000000002090b141b1f1f1b140b0902000000000000000000000000000000000b20354b6074889eb3c8dcc7b29d877b90a8b9cdbbaa917c67523c566b8196abc6cebbaa917c859bb0c6d9c4af9a846f5846331f0a00000000000000000000011426374b5d6c8197a4b5c5bfb09e96807261584d4044464746433f38352b221b1d2d36394145474847433d4a4e585d555043332010000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000e1e2d3e4a5a63737d868d92949594928f8982796c615754647a868a8a8a8a8a8a8b745f4a351f000000000015202d36434b55606770777e84898d909394959594928f8a867f786e635b4b44372a1c0c00000000000000000a1e334657616d71706d6b6b6d717a879da7b8cce0f6e7d1c1ad97826d5544311d080011263b50667b90a5bbd0e5f7e1ccb7a28c77624d4444444444453d494e546067758398a0b2c1d2e5ebd9c9b7a697816c5b4a36210e00000000000b2035485a6e83959a9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ea7b9cce0decab6a49c9b9b9a8f7a644f3a240f000b20354a6072849aa3b4bbc8b39d88786564656768696a6c6e71767e899eb3c9dee7d1bca7927c67523d2712000000000000000000000000000005192b3c4e63798c9fb4cadfccb9a8937e68533f2f1c080000000000000000000000000000000000000000000000000000000006090906000000000000000000000000000000000000000010253a4f657a8fa6b8cbd8c3ae998374899eb4c9c8ad98826d54485a71869cb1c6cab49f8b758297acc2d7c9b49f8a76614c36210c00000000000000000000081d314455647a8d9fb5c2c3b2a196806c6054474c53595b5d5b59544d493c362d323d4a4e565a5d5d5c59544d493c473f3c33251502000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c000000000009192c3c4a5c647885929ca4a7aaaaaaa8a79e978c8176646073879b9faa9f9f9f9f8a745f4a351f00000008131c323e4a546067747c858c93999ea7a5a8a9aaaaa9a7aa9f9b948b83796b6055473a2a1c0c0000000000000003172939464c575c5b585656585d6578899eb3c8d8eaefdec9b39e8974604b35200b0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d372f2f2f2f302c3536434a5761738298a3b5c7d7e9e7d5c4b49f8c79634e3c2b1905000000000d22384d62788da1afb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b3b9c5d6e8e6d3c3b6b2b0b0a7927c67523d271200071c304354617685969faab8b8a69d877a797b7c7d7e7f8183868b939ea7b9cce0e6d3c3a5907b65503b26100000000000000000000000000000000d2135495b6e8398aec3d8d6c6b19c86715d4b38230e0000000000000000000000000000000000000000000000000002090b101414100b090200000000000000000000000000000000071a2d3d566b8196abc5d5d9c8aa947f6e8399aec9c8b39e8874604d62788da4b6c9c5b09a85707d93a8c4d5cebbaa927c6752382715020000000000000000001325364b6073869babbccab7a5998372604b4b5961686e7172706e69625a4e4a3e454b5c646b707272716e69625a4e4a3d31271a0b00000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000002152737495a647a899ba3b1b5c2bfc0bfc5b9b3ab9f97887a657a8fa5b4bbb5b5b49f8a745f4a351f000008182530434f5c64737d87919a9fabaeb3b8c5bdbfc0bfbec8bbb4b0aa9f988b80746158473a2a1909000000000000000b1b2933364247464241413f4b5a697e93aabbcee2f5e0ccb9a78f7a644f3a240f0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221a1a1a1a1a2125303946556073859ba9bacde1f2e3cfbcab98826d5a4835200b0000000012273c52677c91a7bfc5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c9ccd6e4f4f1e1d3cac7c5bca7927d67523d2812000013253647586174808b9ea7b8b6a59d8f8f909192939496989c9faab3b9c5d6e8decab6a48d78634e38230e0000000000000000000000000000000a1f3347586d8297acc2d7dec9b6a4907b65503c2b190500000000000000000000000000000000000000000000000a151d2026292926201d150a0000000000000000000000000000000c21364a5b72879cb2c7dccebbaa907a687d92abbccbb8a68f7a6453687e93a8c2d3c4aa947f6a788da6b8cbd8c8ad98836e5645311d090000000000000000071c304354677d92a3b5c9bfb29d87766154546069777e83868785837e786f645c4f56606d798185878886837e786f635b4b4538291b0c000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000081d3144556378899ea7b5c1c9d2d4d5d4d6ccc9bcb4a69d8a7b8096abc3ced8c9b49f8a745f4a351f0000132536434a61697a85929da5afb5bcc9c8ccd5d3d4d5d5d4d9cecac8bbb4aa9f95847661584737271501000000000000000b171e212d32312d2b2b2e3c4c61768b9fb4cadff4e8d6c5a9937e69543e29140011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0404000608131c2837445563798a9fb4c8d8eaebd9c9b49f8b78624d38220e00000001142637566b8196abc0d6dbdbdbd9cfcac9c9c9c9c9c9c9c9c9c9c9c9cacfd9e7f7f6e6d8cec9c9bca7927d67523d2812000008182a3a4756606b78889eb3c3b6b2a5a4a5a6a8a9aaabadb1b4bbc8ccd6e4dfd0c0b29c87725b4935210c0000000000000000000000000000021527374c61778a9fb4c9dee5d3c2ae99836e5a4835200a00000000000000000000000000000000000000000005131a2832363b3e3e3b3631271a1305000000000000000000000000000e23394e63798ea5b6cadfcab49f8a7661778b9fb4cac4aa95806a566e8499aec3cbb8a68e796473889db3c8ddc9b49e8975604b36200b00000000000000000b20354a6073869cb1c2c7b3a1907c66585560727f8993999b9c9b98948d847a69616074818e969a9c9d9c98938c84796a60564639291c0c0000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000417293a4b6074859ba7b8c5d2dee5d8cec9c3bfbfc1c4b7a89e8a889eb3c8dddfc9b49f8a745f4a351f00071c304354606c7f8b9ba3b2b6c3cacfdadee0ded9d6d4d4d5d9dfdfd9cec8bbb4a29b8676615544311d0e0000000000000000030a0c181c1b1816161f33475870859bb0c5daf0ecd7c2ac97826d57422d180011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000b192737495b6b8095aabbcee2f7e2cebbaa947f6a553c2b19050000081d31445570859ab0c5daefebd9c9bcb4b4b4b4b4b4b4b4b4b4b4b4b4b4bcc9d9ebead8c8bbb4b4b4a7927d67523d28120000000c1c2a3a4b6175859ba7b8cccac7bab9babcbdbebfc1c3c6caced9dedbd4cbc0b4a2947f69543d2c1a060000000000000000000000000000081d3144556a7f94a9bacde1f0dfcab49f8b78624d38281603000000000000000000000000000000000000000715233138454b505353504b453830231507000000000000000000000005182b3b556a7f94aac3d3dbc6b19b86715970859bb0c5c6b09b86716075899eb4c9c8b39e8874606e8398aec3d8ccb9a8907b6650362513000000000000000316283850657b90a4b5c9c1af9a846f5e4b607382949ea8aeb0b2b0aea9a29a8c7f6c7283979fabafb2b2b1aeab9f998b80746157463a29180800000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000a1f3346586a7f94a3b5c5d6e3e1d3c7bab4aeaaaaacb1b5b9a99f9ea7b8cce0dfc9b49f8a745f4a351f000b20354a607381949faab5c1cad4dfe3dcd6ccc9c4c0bfbec0c4c9ced8e2d8cec0b4a49a8473604b3c2c19060000000000000000000002070603010417293a576d8297acc2d7ecefdac4af9a856f5a45301a0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000009192c3d4d62778b9fb4cadff4ebd9c8b19c86715a4835200b00000b20354b6075899fb4c9deece3cfbcab9f9f9f9f9f9f9f9f9f9f9f9f9f9fabbccfe3e2cebbaa9f9f9f9f927d67523d28120000000a1f3347586d8297a3b5c5d5dfdccfced0d1d2d3d4d3d2d1d0d7cdc9c5c4b7b3a29a8473604b35200f0000000000000000000000000000000b20364b6074889db2c7d7e9f7e2cebbaa95806b5645321e0900000000000000000000000000000000000001152532414d56606569696560564d4132251502000000000000000000000b2034485970869bb0c5dbd6c1ac97816c576a7f95aac5cab59f8b77657b90a8b9cdc2ad98836d54697e93a9c6d6d6c6ac97816c5443301c07000000000000091e3245566d8298adc2c9b5a38f7a65505a6a7f95a0b4b9c6c6c7c5c1c0b4aa9f94817d92a1b1bdc5c7bebbc9bcb5aa9f95857561584636261401000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000c21364c6176899eb3c2d2e3e6d3c3b6a99f999594979ba3b0b4b4b3b8c5d5e7dfc9b49f8a745f4a351f00071c3043546e8399a8b9c8d2dfe5ded1c8c6b9b4aeaba9a9abafb4bbc8cedbe2d1c2b4a295806a5b4935210c00000000000000000000000000000000152a40556a7f95aabfd4eaf1dcc6b19c87715c47321c0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000f203448596e8398aec3d8edf6dec9b5a48d78624d38220d00000c21374c61778a9fb4becfe1dfcab49f8d8a8a8a8a8a8a8a8a8a8a8a8a8d9fb4cadfdfc9b49f8b8a8a8a8b7d67523d27120000000c21374c61778a9fb4c1d2e3e7dfd4cbc8c4c2c0bfbebdbcbac7bab4b0aca69d938476615544311d080000000000000000000000000000081b2e3f52677d92a6b7cbe5f5feebd9c8b39e8875604b3621100000000000000000000000000000000000000f1f32434f5f67757b7e7e7b74675f4f43322010000000000000000000000d22374d62778b9fb5cadfd5c5a7927d6752647a8fa7b8ccbcab927d6b8196abc6d3c2a7927d685264798ea8b9ccddc8b29d8874604a35200b0000000000000b21364b6075899eb4c9c6b09b86715d4d63788b9fb4becdcbc0b4afacaeb4b9b49f968a9fb4bfc4b7b2a8a6a9b2b7bbb4a39b8576615443301c0f000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000061a2c3d54697e94a7b9cce0ead8c8b6a59d8b837f7f81868e9aa2b1bdccd5e3f3dfc9b49f8a745f4a351f00001325364d6277899eb3c1d1e1d2c9c0b4afa89e99969494969a9faab1bdcddae0d1c0b49f8b78634d3a2a180400000000000000000000000000000014293f54697e94a9bed3e9f2ddc7b29d88725d48331d0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000000000005182b3b52677d92a7c4d5e7f8e5d2c2a7927d67523d271200000a1f334758687e93a0b2c3d3dec9b49e897874747474747474747474748499afc4d9d1bca6917d74747474675f4d39251000000010253b50657a90a9bacedfe2d4cbc4b7b3afacabaaa9a8a6a5a4a99f9b9690887e736158473726140100000000000000000000000000000e22374b5d70859bb0c4d4e7f7f4f6e0ccb8a7927d68533f2e1b0800000000000000000000000000000000071a2d3d4f616a7d8890939390887d6a614f3e2d1b0700000000000000000317293953687e93abbccfe0cbb8a68d78634d6074889eb3c8c9ad988271869cb1c6cab6a48d77624d6075899eb4c9decbb7a68f7a644f3a240f00000000000010263b50657b90a8b9ccc3a9947e6954566b8096aabbcecbbbaea29a96999ea8b3b1a99fa9bacbb7a69d9390949da5b4c0b4a39a8472604b3d2c1a060000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000c2135495b71869cb1c5d6e8e2cebbaa9d87796e6a6a6c717984969fb1becfe1f4dfc9b49f8a745f4a351f00000820344859697e93a3b4c8ccc2b5b1a29a918984817f7f80848b979fb0bccde3e2cebaa997826d5847331f0a00000000000000000000000000000013293e53687e93a8bdd3e8f3ddc8b39e88735e49331e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000e23384d63788da6b8cbe0f4ebd6c1ac96816c57412c17020004172a3a4e606d8298a4b6c7d7cdb9a89b8574605f5f5f5f5f5f5f5f6f8499afc4d9d1bca6917c675f5f5f524d41301e0a00000012273d52677c92a7c6d6e7d4c4b7b3a69d9a979695949291908e8c8986817b75696055473a2a1909000000000000000000000000000005192b3c4f657a8fa3b5c9e2eae2dfe2e8d5c5b19b86715d4b37220d000000000000000000000000000000000c21364a5b6a7f929da6a8a8a69d927f6a5c4a36220d00000000000000000a1e3346576f849aafc9daddc8b39e88735a49546e8398adc3c8b39d88778ca4b6c9c7b19c87725a48556f849aafc4d9d4c4ab95806b563c2c19060000000000162b40556b8095aac6cab7a58d78624d5972889db2c8d4c4ae9d94858184899aa2b3bab4bac7c4b29d877e7b7e879aa2b4c1b4a2947f695b4935210d0000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000e23384e63788da4b5c9e3f3dfc9b49f8b79635b5555575b63738196a0b2c6daf4dfc9b49f8a745f4a351f000005182b3b4b6073859baabbb9b4a49c90857c746f6b6a696b6f7781969eb0c5d5e8d8c7b49f8b77614c37220c00000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000c2035495a73889eb3c8ddf3eed9c4af99846f5a442f1a0500000c1c31424b6175869ca9bacdd6c6b5a395806b5d4b3a4a4a4a4a5a6f8499afc4d9d1bca6917c67514a4a3d393023130100000010263b50657b90a8b9ccdfcbb7a69d8f888482807f7e7d7c7b797774706c6660564b44372a1c0c0000000000000000000000000000000b2035485a6e8398aec1d2e6d8cecaced8ddc9b5a38f7a654f3b2b18050000000000000000000000000000000e24394e63798c9fb3b8c4c4b7b39f8c7a644e39240f00000000000000000c21364c61768a9fb4c9dfd9c3ae99846e593c52687d92a7c2cbb7a6947f94a9c2d3c8ac97816c573c556a7f95aac8d8dcc6b19c86715b4935210c00000000031729395a6f859aafc4c7b29d87725a4c62778ca5b7cbcbb7a6947f706c6e76839aa4b6c9cdcbb8a68e7a69666975849aa6b7c0b49f8a79634e3b2a180500001f354a5f748a9fb4c9cbb6a18b76614c36210c000013283d53687d92a8c2d2e5e9d6c6ac97826d5b4a3d3f3d4a5560728298adc2d8eddfc9b49f8a745f4a351f0000000d1c30435463798b9faaa89e94867b706660555654545659616c8096a7b8cce0e2cebbaa937e68533e281300000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000006192c3c5b70859bb0c5daf0f1dcc7b29c87725d47321d00000000131e334657647a8b9fb4bfcfd2c1b49f8c7b655847333535445a6f8499afc4d9d1bca6917c67513c3527251e1305000000000b21364b6075899eb3bfcfc8b39d887b736f6d6b6a696867656462605457504b45383127190c000000000000000000000000000000031628394d62788b9fb4cadfd8c8bbb4bbc8d7d2c1ad98836e594834200a000000000000000000000000000000172d42576c8197abbccbd5d4cbbcab97826d57422d18000000000000000215273752677c91a9bacee2d8c8a9947f6a543f4c62778ca4b5c9c4b29d889db2c8cebbaa917c66513c50657a8faabbcedecab6a48d78634d38230e000000000a1e33465773889eb3c8c2ad98836d5850657a8fa5c3d4c8b29d88736057586175869cb1c4d4c8b39e88735c51576176889db2c4baa998826d5948341f0b00001f354a5f748a9fb4c9cbb6a18b76614c36210c0002172d42576c8297acc1d7ece1cdb9a88f7a654f3d2d2a2d374454687e93a8bdd3e8dfc9b49f8a745f4a351f000000011426364a5b687e8c9493897f73655d514b44373f3f3a474c6075899eb3c8deead8c8ae98836e5938281603000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000000000000001a2f44596f8499aec4d9eef3dec8b39e89735e49251300000000031729394a5c697e93a0b2c3d4cfbcab9d8776614c41312f445a6f8499afc4d9d1bca6917c67513c2712100a010000000000091e3245576a7f95a1b2bec1ac97816c6163646361605557514f4c4a43363b3632281d150900000000000000000000000000000000091e3246576b8096aabbcee2cebbaa9faabac7d7c9b49f8b77624d3827150200000000000000000000000000001c31475c71869cb1c9d9e7e7d9c9b19c86715c47321c00000000000000081d3144556e8398adc7d8e2cebbaa8f7a65503a485971869cb1c6cbb7a69da6b7cbcab49f8b76614c364b60768a9fb4c9dfd3c2a9947f69543b2a18040000000c21364b61768ba6b8cbbfaa947f6a5551667c91a6bbd1c3ae99846e54434756667c90a6b7cbc7b29d87725d3e4657677d92a6b7c7b49f8b77624c37220d00001f354a5f748a9fb4c9cbb6a18b76614c36210c00021527385b71869bb0c6dbf0dec9b49e8975604b35201519263653687e93a8bdd3e8dfc9b49f8a745f4a351f0000000008182d3d4e5f687a7f7d766960554c3f3531272a2a2a3445576e8398adc3d8edddc8b29d88735645321e09000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000003182e43586d8398adc2d8edf4dfc9b49f8a745443301c07000000000b1b2d3e4f606e8398a5b6c8d8c9b7a598836e604e3c2c445a6f8499afc4d9d1bca6917c67513c27120000000000000000031628394b60738398a0b4b9b39d8879767879787775716c6760554c463930201d150a0100000000000000000000000000000000001325364b6175899eb3c8d9dfcab49f8a9fa9bacdcebbaa95806a5645311d0900000000000000000000000000001d32475d72879cb2c7dcf0f0ddc7b29d87725d48331d000000000000000b20364b6075899eb3c9dedfcab49f8a76604b363b566b8096abc6d4c4b7b2b7c4d4c5b09b8570584633455670859bb0c5dadac5b09a85705947341f0b0000000f24394e64798ea3c5d5bca7927d675252677c91a7bcd1c2ad98836d5836384a6073889db3c8c9b49e89745a48394b6074889db2c8baa995806a553b2b1905001f354a5f748a9fb4c9cbb6a18b76614c36210c00091d31455674899fb4c9def0dbc6b09b86715544311d0813293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000000000f1f31414e5c646a6861584b44372f201d151514182839566b8096abc0d5ebdfcab59f8a76604b36210b000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000002172d42576c8297acc1d7ecf6e1cdbaa98a75604a35200b00000000000f2032424c6176879daabbced4c3b2a0927d685a4937445a6f8499afc4d9d1bca6917c67513c27120000000000000000000a1d314455607482919ea8b8a69d8c8c8e8e8d8c8a86827c746b61574d40322514060000000000000000000000000000000000071c304354697e93a7b9cce6d5c4ac96818b9fb4c9d8c8b39d8875604b36201000000000000000000000000000001a30455a6f849aafc2d2deded2c2af9a84705a45301b0000000000000013253650657b90a7b9cce0dbc6b09b86715745323b50657b90a8b9cdd4cbc8cbd4d7c6aa95806b553a2938566b8096abc9dadfcab49f8b77614c37220c00000010253b50657a90a5bacfbaa5907a655050667b90a5c7d7c4af99846f5a3a3043546d8297acc2ccb9a88d78624d3844556b8096abc0c7b19c8671594834200b001f354a5f748a9fb4c9cbb6a18b76614c36210c000b20364b60758ba8bacde1edd8c3ad98836e583727150113293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000011323313e4a4e55534c473a31271911080a0d19202e3e566b8096abc0d5ebe3cfbcab8d77624d38220d000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000003192e43586e8398adc3d8edf4dec9b49f89745443301c07000000000001141f334658647a8b9fb4bfd0cfbeb49e8a78635544445a6f8499afc4d9d1bca6917c67513c2712000000000000000000011527374556606e7c899eb4b8ab9faba3a3a3aa9f9b9791888076665e4f4332241401000000000000000000000000000000000b20354a6073879cb1c5d6e0cbb8a68f7b8399aec5d5cbb7a6927d67523e2d1b070000000000000000000000000013293e53687e93a4b5c2c9c9c2b5a4937e69533e2914000000000000071c3043546c8197acc5d6e8d6c1ac96816c573928364b6075899eb4c9dedfdddfe1cdbaa88f7a65503a263c51667b91abbccfe3cfbcab927d685339281603000011263c51667b91a6bbceb9a48f79644f4e63788ea9bacdc6b19c86715947343652677c92a7c2d2c6a7917c67523c3750657b90a5c4c9b6a48c77624d37220d001f354a5f748a9fb4c9cbb6a18b76614c36210c000c22374c61778ca1c6d7e9ecd7c1ac97826c57422d170013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000000513202d36393f3e37332a1d15090e171f212b343e4b5c6f8499afc4d9eeecdac9a38d78634e38230e000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000000000000011426365a6f8499afc4d9eef3ddc8b39e88735e492513000000000000000417293a4a5c697f94a1b3c3d4cdb9a89b8573604b3f5a6f8499afc4d9d1bca6917c67513c27120000000000000000000c1c2e3f4c5d6579859ba8b9c9bcb5bcc9b9c8bbb4b1aca69e95887c69614f43321f0f000000000000000000000000000000071a2d3d51667b90a4b6cae3ddc8b39e88737c91a7b8ccd5c4b09b85705c4a36220c000000000000000000000000000b20364b6074869ca4b0b3b3b0a39b8674604b36200b0000000000000b20354a6074889db2c8dde7d4c4a7927c67523d273145566f8499aec4d9eef2f4dec9b49f8975604b3621374c61768b9fb5cadfd9c9ae99846f5746321e09000012273c52677c91a7bcceb8a38e79634e4b60758a9fb4c9cab59f8b77614c36374c62778ca4b5c9c1ac97816c573b364b61768ba6b7cbc2a6917c66513c2711001f354a5f748a9fb4c9cbb6a18b76614c36210c000e23384d63798da2b8cde2ebd6c1ab96816c56412c170113293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000000002101b22242a28211f170f1a21242a33373b484d5c647a8d9fb5cadff4e3cfbcab8c77624c37220d000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000000000000081c30435470869bb0c5dbf0f1dcc6b19c87715c47321c00000000000000000b1b2e3e4f616e8399a5b7c8d6c6b5a395806b5d4b5a6f8499afc4d9d1bca6917c67513c271200000000000000000417293a4b5d657c8a9ba3b5c6d7cdc9c1bbb9babdc5c6c4b8b3a69d917f69614f3d2d1a0700000000000000000000000000000c21364a5b6f849aafc2d3e5d2c2ac96816c75899eb3c8dec8b4a38e79644f3a2a1804000000000000000000000000091d314556627886939b9e9e9b938578625645311d090000000000000f24394f64798ea6b7cbdfdfcbb7a68d78624d3823273853697e93a8c3d3e6efeed9c4af99846f5645311f33475871869cb1c6dcdec9b49f8a76614b36210c000011273c51667c91a6bbceb8a38e79634e44556f849aafc7cfbcab927d68544334475971869cb1c6c7b19c8772594834465773889db2c8bfaa947f6a553f2a15001f354a5f748a9fb4c9cbb6a18b76614c36210c000e24394e63798ea3b8cee3ebd5c0ab96806b56412b160113293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000000000000000000070d0f15130e1920232d36393a474c5259626c7a889eabbccfe3f4dfcab59f8a75604b36200b000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000b20354b6074899eb4c9def3eed9c3ae99846e59442f19040000000000000000102032434c6176879daabbced2c1b49f8c7b65585a6f8499afc4d9d1bca6917c67513c271200000000000000000a1f334658657b8b9ea8b5c1d1c7bab4aca6a4a5a8b0b4c1cbc4b7b29d947f695b4a3621100000000000000000000000000004172a3a4e63798ea2b3c7e0dec9b5a48f7a646c8297acc4d4d1c1ad97826d5847331f0900000000000000000000000002152738485a62747e858989857e74625a4838271502000000000006192c3c556b8095aac4d4dadac8b39d88735a48352023384d63788da5b6cadadadad5c5a9947f69543827172a3a576c8297acc1d7dacdbaa9917c6651372715010010253b50657a90a5bacfb9a48f7a644f3754697e93a9bacdc9b19c8673604b3e3b576c8196acc8cab6a48c77624d37395b70859bb0c5c1ac97826c57422d17001f354a5f748a9fb4c9cbb6a18b76614c36210c000e23384d63798da2c7d8eaecd6c1ac97816c57422c170213293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000000000000000000000004101b222b35383d4a4e545861686f78818c9ea6b8c9daecf2ddc8b39d88735544311d08000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000f24394e64798ea8b9cce1f5ecdac9ab96806b56412b1601000000000000000002141f334758647b8c9fb4bfd0cfbcab9d8776615a6f8499afc4d9d1bca6917c67513c271200000000000000031628384c6176889da9b9c6d1c5b8a99f97918f8f939ba3b0bccdcbbbb49f8b79634e3e2d1b070000000000000000000000000a1f3347586d8297acc0d0e3d8c8b19c86715c657a90a6b7cbdfc9b49f8a77614c372614010000000000000000000000000a1a2b3c4856606970747470696056483c2b1a0a0000000000000c2035495a71869cb1c4c4c4c4c5ae99836e593c2b192135495b72879db2c7c5c5c5c5b8a68e79644e392412273d52677d92a7bfc4c4c4c7ad98826d5544311d08000f24394e64798ea3c4d5bba6917b66513c4c61778a9fb4c5cab6a4937e695c4b3f51667c91aabbcec2a7927d67523d455a6f849aafc4c3ad98836e58432e19001f354a5f748a9fb4c9cbb6a18b76614c36210c000c22374c61778ca9bacee2edd7c2ad98826d58432d180013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000000000000000000000c171f2d363c494d555b636a70777d848b969faab8c4d5e7f7e6d3c3ad98826d5837271502000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000071a2d3d53687e93a8c6d6e8f8e3cfbcab917c66513c27110000000000000000000004172a3a4b5d6a7f94a1b3c4d4c9b7a598826e5f6f8499afc4d9d1bca6917c67513c271200000000000000091e3245566b8096a6b7c7d6ccb8a79e8b827c7a7a7e85969eb0c3d3cebaa99a85705c4a36220d0000000000000000000000021527374c61778a9fb4c9dee2cebbaa947f69546074889db3c8ddcdbaa9947f6a5544311d08000000000000000000000000000e1e2b38454b545b5e5e5b534b45382b1d0d000000000000000e23384d63788da4afafafafafafa6947f69543f2a14192c3c576c8197a9b0b0b0b0b0ae9e8873604a35200d22384d62788da1aeafafafafaf9e8974604b35200b000d22374c62778ca6b7cbbea9947e69543f47586c8197a7b8ccc2b49f8b7a645d4c4c61768b9fb4cac2ad97826d583c44596e8399aec3c3ae99846e59442f19001f354a5f748a9fb4c9cbb6a18b76614c36210c000b20354a60738a9fb4c9dfefdac5b09a85705b3d2c1a0613293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000000000000e1c29333e4a4f5a626a72797f858b92999faab4bbc8d5e2f3eddfcab6a5917c67513c271200000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364a5b70859aafc5daeff4dfcab59f8b77614c37210c00000000000000000000000c1c2e3f4a60728399a6b7c8d4c3b2a0927d686e8499aec3d9d1bca6917c67513c2712000000000000000b21364b6075899eb3c4d4d8c8b39e89796c66646568708096a4b6cad8c7b4a28e79644f39240f0000000000000000000000081d3144556a7f94a9bacde1dfcab49f8b77624c546c8196abc3d4d7c7b29d8774604b35200f00000000000000000000000000000e1a2832363e464949463e3631271a0d000000000000000014293f54697e949a9a9a9a9a9a99968877624c37220d0e24394e63798b989a9a9a9a9a99927f6a5443301c0b2035485a6e8394999a9a9a9a9a9a907b65503b2510000b1f34485973889db3c8c2ad97826d583c3a4c6277899eb3bdcdbaa99e897b6b61595870869bb0c5c7b29d88725a49445a6f8499afc4c2ad98826d58432d18001f354a5f748a9fb4c9cbb6a18b76614c36210c00071c30435471869cb1c6dcf1dec8b39e89735b4935210a13293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000000000000000e1e2c3a464c5c646e7880878e949a9faaaeb4bbc8ced8e6f3ebddcebdb29c8774604b36200b00000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000000000c1c2f3f4e63798ea2b4c8dcf1e9d7c6b09a85705847331f0a000000000000000000000000101c3043546177889daabbcecfbeb49e8a786e8398aec3d8d1bca6917c67513c27120000000000000011263b50667b90a8b9cce2cebbaa927d675b514f50536073879cb2c7dcd1c0aa95806a55402b1500000000000000000000000b20364b6074889db2c7d7e7d5c4ae99836e59474f647a8fa5b6cadfcbb7a5917c66513d2d1a0700000000000000000000000000000a151d20293034343029201d150a000000000000000000162b40566b8084858585858585848178625948341f0b0c21364a5b647a828585858585837d6a614f36251305192b3c4b60747f84858585858585847e68533d28130005182a3b596e8499aec3c7b19c87725a49354759687d929fb1bfc7b9a79e8c80776f6c6b8095abc0cbb7a58d78634d385b70859ab0c5c1ab96816c56412c17001f354a5f748a9fb4c9cbb6a18b76614c36210c0000132536586d8298adc9d9ebe0ccb8a78d78634e39281613293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000000000000000d1d2c3c4958616c7a838c959ca5a9b0b4bbc8caced9e2eaf0e5decebfb19f917c675544311d0800000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000040f1c2a3a4b5d6d8297acc0d1e3f6e1cdb9a8937e68533a2a1704000000000000000000000000001325364759657b8c9fb4c0d0cdb9a89b85758297acc2d7d1bca6917c67513c271200000000000000152a3f546a7f94a9c6d6dfc9b49f8a75604b3d3a3a44556b8095aac0d5d9c3ae99846e59442f1900000000000000000000081b2e3f52677d92a6b7cbe5e0cbb8a6917c66513b4b5c72879db2c7dcd4c3af9a84705b4a36210c00000000000000000000000000000002090b141b1f1f1b140b09020000000000000000000014283d50626b6f6f6f6f6f6f6f6f6c625a483b2a1805071a2d3d4a5c646d70707070706e675f4f43321808000e1d32455660696e6f6f6f6f6f6f6f68604e3a25110000152a3f556a7f94aac2cab6a48d78624d363b4e606d8197a1b2bec5b9aa9f968b848180839aafc4d4c3a8937d6853455672879db2c7bfaa957f6a55402a15001f354a5f748a9fb4c9cbb6a18b76614c36210c000013283d53687d92abbccfe3e8d5c5aa947f6a5745322726293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000000a1a2b3c495a6276818d999fabb2b6c3c5caced9dfe2ebeee3dcd3cabdb1a197816c5f4d3727150200000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0002080b0e171f2c3a4758657b8d9fb5cadfeee9d7c6b49e8a76614c37210c000000000000000000000000000008182a3a4b5d6a7f95a2b4c4d5c6b5a395808095abc0d5d1bca6917c67513c271200000000000001172c41566c8196abc1d6ddc7b29d887256453225263753687d92a8bdd2dbc5b09b86705b4631180c0000000000000000000e22374b5d70859bb0c4d4e7ddc8b39d8874604b353e566b8095abc2d3dcc8b4a28e79634e3a2917040000000000000000000000000000000000000000000000000000000000000000000000000e21334450565a5a5a5a5a5a5a5a564d483c2b1d0d00000f1f2d3e4a4f585b5b5b5b5b59524d41322515000002152838454b54595a5a5a5a5a5a5a534e42311e0b00000f24394e64798ea4b6cac2a9947f6a544330424b60748398a0b4b9c6bbb4aa9f9996959aa2b3c7d8c3ad98836e544b60758a9fb4cac4a7917c67523c2712001f354a5f748a9fb4c9cbb6a18b76614c36210c00000d22374d62778b9fb4cadff0ddc8b29d8875604b44373b3a4653687e93a8bdd3e8dfc9b49f8a745f4a351f000000000002152738485a627886979fabb4bcc9cad3dadfe2ebf2e8e0ded1c8c2b6b19f978373604b413019090000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221e1e151d20232a333d49596176879dabbccfe3f4e1cdb9a896816c5847331f0a0000000000000000000000000000000c1c2e3f4b6072849aa6b8c9d1c1b49f8d8398aec3d8d1bca6917c67513c271200000000000002172c41576c8196acc1d6ddc8b39e8873594834282d3c53687e93a8bdd3dac5b09b85705b46332a1c140700000000000005192b3c4f657a8fa3b5c9e2e4d1c1ab96806b554431394e63798ea4b6c9ded1c0ac97816c5846331f08000000000000000000060c0e190c0a040000000000000000000000000000000000000000041626333d4045454545454545444138352b1e0e0000000110202d3639434545454545443d39302315070000000a1a2832363f44454545454545453d3a3123130100000d22364a5c72879cb1c7c7b29c8773604b37314556607382939ea8b4bbc8bbb4afacabafb3c0d0dac8b39e8874604f647a8faabbcbb8a68d78624d38230d001f354a5f748a9fb4c9cbb6a18b76614c36210c00000b203448596e8399aec2d3e7dfcbb7a696806b605551505258616d8197acc1d6ecdfc9b49f8a745f4a351f0000000000091d3145566278889ca4b5bcc9cfd9dfe6eff2e7e0ddd5ccc8c0b4afa49c908173605544312312000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37333333273136383a474c5b6377859ba5b7c9daece4d2c2b49e8a77624d3a2a170400000000000000000000000000000000111c3043546277889eabbccfcfbcab9f98a0b2c6dbd1bca6917c67513c271200000000000000152a40556a7f95aac7d7e0cbb8a68c77624d46393e4a5a6d8297acc2d7d9c3ae99846e594c473a3225140000000000000b2035485a6e8398aec1d2e4ddc9b5a38e79634e3727364a5b71869cb1c6dcdec9b49f8a76614c36261401000000000000010f1a21232e221f180c0000000000000000000000000000000000000000081621282b303030303030302f2c2220190e000000000002101b22242d30303030302f28251e130500000000000a151d202a2f3030303030303028251e1305000000071b2d3e556a8095a9bacab6a4917c66554431384555606d7e8a979faab1b5c2bfc1c0c4c4c3c1c9bcb5a68e7963556a7f94aac8c8b39d88735a4835200b001f354a5f748a9fb4c9cbb6a18b76614c36210c000005182b3b50667b90a4b6c9dae7d4c4b09e9580746a6665676c7681979fb1c4d9f4dfc9b49f8a745f4a351f00000000031628394b6074859ba6b6c2cfdae3ebf4e8e1ded5cbc8c5b8b3aca29a91867b6c60554437271505000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d4848484837444b4d5258616c79869ba3b5c3d4e7e6d6c6b5a4947f6a5948341c0c0000000000000000000000000000000000011426364859657b8d9fb4c0d1c9bcb4aeb2bfcfe2d1bca6917c67513c27120000000000000011263c51667c91a9bacde1d5c4ab96816c615759595c64788a9eb4c9ded5c0aa95806c6761584f4332190900000000031628394d62788b9fb4cadfe9d7c7b09b85705b4936192d3d556a7f95aac1d2e1cdbaa8947e695443301c08000000000002101f2c35394337342a1c0f0100000000000000000000000000000000000000040e14161a1a1a1a1a1a1a1a170d0b050000000000000000070d0f181b1b1b1b1b1912100a010000000000000002090b14191a1a1a1a1a1a1a13110b0100000000001022384d62788b9fb4c8c3b19c8673604b3c2c37444b606878828b949ca4a6aaacadafafaeaca9ab9f9b937e695c71869bb1c6c3ad98826d583c2b1906001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000d20354a6072869cabbccfe3e2cdbcaf9e95867f7b7b7d8289979fb1bdcee0f4dfc9b49f8a745f4a351f00000000091e324557697e94a3b5c4d3e3ecf4e8e0d6ccc9c4b7b3aca79e978e857c74655d4b443727190900000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c77625e5e5e5e5e5e556063676d77818b9ca4b5c1d2e2e7d9c8b9a89c8674604b3b2b180000000000000000000000000000000000000008182a3b4c5d6b8095a2b4c5d5cfcac3c6cfdde6d1bca6917c67513c2712000000000000000c21364b61768a9fb4c4d5dfcab59f8d8076706e6f727a869ca8b9cde1dcc7b29c87817c7769614f37261401000000091e3246576b8096aabbcee2e1cdbaa9937e68533d2c1a23384d63788da3b5c9ddd7c6b29c8773604b35200e000000000010202e3d494e584c473a2d1f0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6c8197aabbc9b5a4937e685a49392931424e5a626c787f868c909597989999999794918b867f7762647a8fa3b5c9b7a5907b65503b251000001f354a5f748a9fb4c9cbb6a18b76614c36210c000000071c304354657b8d9fb5c1d2e0dbccbcafa49c94919092979ea7b1bdcedbebf4dfc9b49f8a745f4a351f000000000b21364b6075889db3c1d1e2f0efe4d6ccc6b9b3aca69d9790888179706760554c3f312619090000000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f7e1ccb7a28c78737373737373737475787d838a969faab6c2d2dfe5d8c9bbaa9e8a79635645311d0d00000000000000000000000000000000000000000d1d2f3f4b6073849aa7b8c9dadfd8dbe2ede6d1bca6917c67513c2712000000000000000a1e3346576c8197a6b8c9d8cfbcab9f9589858384878e9ca4b6c6d7e9dfcab6a59c96928b7f695544311d080000001325364b6175899eb3c8d9ebdec9b49f8a76614c36210f2035495a71869bb0c9dadfcab6a5907b66513c2c19060000000a1a2e3f4b5b636e61594a3d2d1f0f0000000000000000000000000000000000000000000000000b0b0b0b0b0b0b0a0400000000000000000000000000000000000000000000040b0c1215171715110c0a03000000000000000000000000000000000005192b3c4d62788b9fb4c2c2b49e8a786357463828313c484d5a626a71777b7f8283848483827f7c777169625e6f8399aec1c3b29d8773604a35200b00001f354a5f748a9fb4c9cbb6a18b76614c36210c000000001325364b5d6c8196a3b5c2d0e0daccc2b6b1aaa6a5a7acb3b8c5cad4e1f1f4dfc9b49f8a745f4a351f0000000013283d53687d92a6b8cbdfefefdfd2c5b9b3a89e978f88817b746c635b514b44372f1d1409000000000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5faf3ddc8b39e8888888888888888898a8d92989fa8b4bbc8d3e0e2d4c7baab9f8c7c665b4938271500000000000000000000000000000000000000000000111d3144556278899eabbccfe3edeff5ffe6d1bca6917c67513c271200000000000000031729394c6177889dabbbc8d3c9bcb5a89e9a99999ca5b1b6c2d3dad8d8d3c3b6b2acaa9f8a74604b35200b0000071c304354687e93a7b8ccdadad4c3ad98826d5846331f0a192c3c54697f94abbccfdad3c3af99846f5b4935210b0000021528384b5d64798377635b4a3d2c1e0e00000000000000000000000000000000000000020b1113202020202020201f190e0c060000000000000000000000000000000000090c181f22272a2c2c2a27211e160b07000000000000000000000000000000000e2035485a6b8096a4b6c8b9a89b8575615645392c2b353c484d545962666a6c6e6f6f6e6c6a6661595459667c90a1b3c7b7a5947f695443301c0700001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000008182e3f4b6175859ba4b3bfcbd5dfd3cac7bfbbbabcc1c3b6b2b6c3d4e6f4dfc9b49f8a745f4a351f00000003162939596e8499aec4d5e7f3e3d2c1b5a79e9489817a746c6560554e4a3d35312719110100000000000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5faf5e0cbb8a69e9d9d9d9d9d9d9d9e9faba7adb4bac6ced8e6decfc4b7a99f8d7e685e4c3d2c1a0a00000000000000000000000000000000000000000000011426374859667c8d9fb5c1d1e3f3fffbe6d1bca6917c67513c271200000000000000000b1f334758667c8d9faab6c3cbcfc6b9b4b0aeaeb2b6c3cacfcac4c3c3c3c3c3c3c8baa98b76614b36210c00000b20354a6073869cb1c5c4c4c4c4b7a5907b65503a2917040e22374d62778c9fb5c8c4c4c4b59f8c78634d3929160300091d324556647b89988779635b493c2b1a0a000000000000000000000000000000000006131e262835353535353535342f2321190e000000000000000000000000000005121d242a34373d3f41413f3c363229211a0f02000000000000000000000000000005192b3c4b6074869caabbc6b5a39983746057493c31262b35383b484d515557585a5a595754514c48586277889db3bfbfb29d8774604b3625130000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000101e32465762778699a1b3b8c4caced9d2d1d3cac5b8b3a59da5b6cadff4dfc9b49f8a745f4a351f0000000a1e32465773889db3c8ddf2e7d5c5b5a39b897f756c656054504b4437362d201d1509000000000000000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5fafbe7d5c5b8b3b3b3b3b3b3b3b3b3b4bcc9c2c9cdd7e2ddd2c9bfb2a69d8b7d68604e40301f0e00000000000000000000000000000000000000000000000009192b3b4c5e6b8096a3b4c5d6e8f0f0e6d1bca6917c67513c2712000000000000000004182a3a4c5e677d8c9da5b3b8c4c7cac9c5c3c4c7cac9c9bcb4afaeaeaeaeaeaeaeaea08b76614b36210c0004182a3a51667b90a4afafafafafafad9d8773604a35200b000b2034485970859aaaafafafafafab96816c5746321e0a000b20364b6075889ea59d8879635a4838271502000000000000000000000000000000021324313a3d4a4a4a4a4a4a4a494438352c1e0f0100000000000000000000000d181f2f383b474c5254565654514b4639362d1e160a00000000000000000000000000000e1e324556647a8c9fb4bdc2b3a1998375635a4b44373126222b34373b404243444444423f404d596276859ba6b8c3b3a1927d6756453218080000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000031628394759627683929ea6b0b4bbc8bdbcc2b6b1a79e92879db2c7dcf2dfc9b49f8a745f4a351f0000000c21364b61768ba6b8cbe0f4e0ccb8a79b8577696157504b4336353127211a171912100a0100000000000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0e5f0f0f0e3d5cbc8c8c8c8c8c8c8c8c9cacfd9d8dedfdbd1c8c2b5b1a199887b675f4e4131221200000000000000000000000000000000000000000000000000000d1d2f404b6074859ba7b8ccdbdbdbdbd1bca6917c67513c27120000000000000000000c1c2f404d5f677b87959ea6adb2b6c3babbbbc7bab4b0ab9f9a9898989898989898988b76614b36210c000a1f3347586f849a9a9a9a9a9a9a9a98917d675443301c070005192b3b50657b8c979a9a9a9a9a9a9a8976614b36210c000c21364c61768a9fb4a69d8878625645311d100000000000000000000000000000000b1e31424e53606060606060605f594d493c2c1f0f000000000000000000010f1d2a34404c515961676a6c6c6a6661574e4a3e32281a0d00000000000000000000000000021628384b5c697f949fb1bfbfb3a19986786960554b44373631272d2c2c2d273135393f4b4f5e6677859ba3b5c4b7a599836e5f4d382815000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000b1b2a3b4758616f7d88939b9faaa7a8a7a5a49c95897d7e93a8bdd3e8dfc9b49f8a745f4a351f0000000e23384d63788da2c4d5e7f3ddc8b39e887762594b4639353026201d1b22242c2e27251d1305000000000000000000000000000000000000000013293e53687e93a8bdd3e8f3dec8b39e89735e49341e0011263b50667b90a5bbd0dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdadad8d6d9cecac6c0b4b0a49c908376655d4d4131231304000000000000000000000000000000000000000000000000000000121d3144556278899eb3bdc6c6c6c6c6bca6917c67513c271200000000000000000000122230414d5d65747f8891989ca5a3a5a6a6a5a99f9a948b858383838383838383838275604b36210b000c22374c6176848585858585858584837c675f4d3625130000000d23384b5d657a8284858585858585847b65503b2510000a1f334658697e939eafa69b8574604b3e2d1b07000000000000000000000000000011263a4e606875757575757575746e635b493d2c1b0b00000000000000000f1f2d3b484c5e6670777c7f81817f7c766e645c4b45382a1d0d000000000000000000000000000a1a2e3e4f616c8197a1b2bebfb3a49c8a7e73676055504b45384241414237444b4f555d656f7c889ba3b5c1b9a89d8776614c41311a0a000000001f354a5f748a9fb4c9cbb6a18b76614c36210c000000000000000d1d2a3a464c6068757e858a8f919291908d877f76687e93a8bdd3e8dfc9b49f8a745f4a351f0000000e24394e63798ea3b8cee3ebd6c1ab96816c58483b3228201c1419202d363942443c39302313060000000000000000000000000000000000000013293e53687e93a8bdd3e8f0dec8b39e89735e49341e0011263b50667b90a5bbc6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5c4c3c1c8bbb4b0aaa29a91867b6e61584b3f302313050000000000000000000000000000000000000000000000000000000002152737485a667c919fb1b1b1b1b1b1b1a6917c67513c271200000000000000000000041223303f4b56606a747c82878c8e909191908d8a857f786f6e6e6e6e6e6e6e6e6e6e605645321e09000a1f334758616f6f6f6f6f6f6f6f6f6e665e4d41311808000000081c2f3f4b5c646d6f6f6f6f6f6f6f6f655d4b38230e000417293a4f606b8095a0b2a396816c5c4a362211000000000000000000000000000013283d53687d8a8a8a8a8a8a8a898379635b49392816030000000000000c1c2d3d4a59626f7c858b9294969694918a83796d6056473b2a1a0a00000000000000000000000000102032434b60738398a0b0bcc2b5a89e94867c746b6560565957565657595560646a717a84919ea6b5c1b8a89e8a7a64584733231300000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000d1b2933424e57616870767a7c7d7c7b78726a61687e93a8bdd3e8dfc9b49f8a745f4a351f0000000e23384e63788da3c4d5e7e8d3bea9937e69543a2b1e16131c202c353e4a4f5759524d413124130000000000000000000000000000000000000013293e53687e93a8bdd3dbdbdbc8b39e89735e49341e0011263b50667b90a5b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b0afaeaba9aa9f9b948d857c73655d4c473a2e21130500000000000000000000000000000000000000000000000000000000000009192b3c4c5e6c81969b9b9b9b9b9b9b9b917c67513c271200000000000000000000000512212e38454b5560666d7277797a7c7b7a7875706a625a595959595959595959594b45382816020004182a3a474c5a5a5a5a5a5a5a5a5a58514d40312313000000000011212f3e4b4f585a5a5a5a5a5a5a5a504b3f2f1c0800000c1c32424a60728298a6b49f8c7a644f3f2f1c080000000000000000000000000011263a4e606d8297a39f9f9fa89e998979635746321e14020000000004182a3a4a5b637784909b9faba9ababa9a99f998d82746259473828160200000000000000000000000002141d314455607382969eb3b9c5b9b4a49c9188807a75716e6c6b6b6c6e7175797f868f9aa2b3b8c1b5a79e8a7b645c4a3a2a170500000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000b171f3139464b5357616467686765625a5553687e93a8bdd3e8dfc9b49f8a745f4a351f0000000c21374c61768ca6b8cbe0ead5c0ab95806b5443342a2c2530353c494d5c646c6e675f4e42311c0c00000000000000000000000000000000000013293e53687e93a8bdc6c6c6c6c6b39e89735e49341e0011263b50667b909b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a999693908a867f78706660544c3f332a1c110300000000000000000000000000000000000000000000000000000000000000000e1e30404b6074838686868686868686867b65503b261000000000000000000000000003111a283237444b515858616465666665636055554d493c4343434343434343433632281a0a0000000c1c2a3337454545454545454545433c393022130500000000000311202e373a4245454545454545453b382f211100000000141c3043546176879db2ab9b85705d4b38230c000000000000000000000000000b1e31424b6074859ba7b8c6b9b4a79c8675614b42322110000000000a1f3347586379879aa2b0b5bcc9c1c1c7bab4ab9f978577625645321e1000000000000000000000000000011426374455607280929ea7b4c0c2b6b1a69d968f8a86838281818283868a8e959ca4afb4c0bbb4a39b897b655d4b3e2d1c0c0000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000004131b28323639464c4f525352504d483c53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000a1f33475873889eb3c8ddf1dbc6b19c8673604c473b4136434a505a636e7a81837d68604e3a2a1704000000000000000000000000000000000013293e53687e93a8b1b1b1b1b1b1b19e89735e49341e000f253a4f647a86868686868686868686868686868686868686858583817e7b76716a635b514b43362f1f170c0000000000000000000000000000000000000000000000000000000000000000000000121d314556606f717171717171717171655d4c38230e00000000000000000000000000000a161e2731363c3a474c4e505151504d4b443738352b2e2e2e2e2e2e2e2e2e211e160a00000000000c181f222f303030303030302f2e27241d12040000000000000002101b22242d2f3030303030303025231c1103000000000b1b29364657677c91a6b4a3907b65503a2a170400000000000000000000000002131e3245566278899eabbcccc5b6a498826e604f3f2e1d0d0000081c2e3f4c6176879da5b4c0cac5b9b3b3b9c5c9bcb5a39b8574604b3e2d1b0700000000000000000000000000091927374454606b7d899aa2b1b6c2c4b7b3aba99f9c9897969697999b9fa9aab1b5c2bfb3aa9f968578655d4b3f2e2010000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000000000b161e212933363a3c3d3c3b38353e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000004172a3a596e8398aec4d4e7dec9b5a4947f6b61595857585460656d78838e9799917e685847331f0d000000000000000000000000000000000013293e53687e939b9b9b9b9b9b9b9b9b88735e49341e000d22374b5d6471717171717171717171717171717171717171706f6e6c69656157554e493d35302618110400000000000000000000000000000000000000000000000000000000000000000000000002152738454b595c5c5c5c5c5c5c5c5c504c3f2f1c080000000000000000000000000000000209151d20272a3337393b3c3c3b383531262320191919191919191919190b090200000000000000040a0c1a1a1a1a1a1a1a1a1a19110f0a0000000000000000000000070d0f181a1a1a1a1a1a1a1a100e0800000000000417293a4654606675889db3ae99846f5847331f0a0000000000000000000000000002162838485a667c8d9fb4bfd0c2b2a0937e695d4b3b2a1909000e23374b5d6f8399a5b7c3c2b6b1a79e9ea7b1b5c2c1b5a397826d5c4a36220c000000000000000000000000000009192736434a5f677884919ca4b1b5c1c7c7bab4b1aeacababacaeb0b4bac7c8bbb4ada19a8b8074625a4b3f2e201002000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c0000000000000000000000000003090c171e21252728272622293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000012273c52677c91a6b7cbdfe5d2c2b59f8d8177706d6c6d6f747a828c98a0acae9e8976614c3c2b19050000000000000000000000000000000012273c51677d8686868686868686868684705a45301b00081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5a595654504b463938352c201c14080000000000000000000000000000000000000000000000000000000000000000000000000000000a1a273136444646464646464646463b382f211100000000000000000000000000000000000002080b11171f21242527262523201d140d0b060004040404040404040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465861727c82899eb3b49f8a77614c37210c00000000000000000000000000000a1a2b3c4c5e6a8095a1b3c3cfbeb49f8b7b6559473726140417293a50657b90a1b3c3c8b6a49c8f89898e9ba3b5c6c1b59f8d7a644f3a2a1704000000000000000000000000000009182530414d5a62727c86929ba3abb2b6c3bfc2c3c1c0c0c1c3c1c7bab4afaa9f988f84796b6056483c2e21100200000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000030a0c0f1213121013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000000000b20364b6075889db3c1d2e3e3cfbcab9f968b8682818284898f989faab2beb9a796806b5a4834200f000000000000000000000000000000001024394d5f6771717171717171717171706655412d18000010202e373a46464646464646464646464646464646464646464544413e3b36322923211a0e080100000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d202f31313131313131313126231c110300000000000000000000000000000000000000000000040a0c0f101111100e0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1a1a1a1a15130d030000000000000000000000000000091c2f3f4c61768491989ea7b8bbaa917c67523c27120000000000000000000000000000000e1e2f404b60728399a5b7c7cebbaa9d8877625544311d121f3346586f849aafbfcebbaa9c867a747479859ba8b9cdbcab99846f5847331f0a00000000000000000000000000000008131c303c48546067737d868e959ca5a5aaadaeb0b1b1b0aeaca8a99f9a938b837a6f635b4b45382b1d10020000000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000000091d324556697e93a3b5c5d6e4dac9bcb5aa9f9b989697999ea7adb4bbc8cfc5b49f8a78624d3d2c1a060000000000000000000000000000000a1d30414d515c5c5c5c5c5c5c5c5c5c5a5548372512000002101b22253131313131313131313131313131313131313130302e2c2925211e160e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1a1c1c1c1c1c1c1c1c1c100e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1920232f2f2f2f2a28201507000000000000000000000000000e23384c5d6f8399a2adb3b8c5c8ab96816b56412c1600000000000000000000000000000000121c3043546176879da9bacdc8b7a69a8473604b40301f21364c61768b9fb4cacab49f8c79645c5c64778a9eb4c9c9b49f8b77614c37210c0000000000000000000000000000000000131d2b36434a556067717980878c909598999a9c9c9a9997938f8a847e786e645d4e493d31271a0d00000000000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000000021528384b6073859ba7b8c6d3e3dacfc8bbb4b0adacadafb3b8c5caced9e1cdbaa997826d5b4935210c00000000000000000000000000000000122330393c464646464646464646464541372a1a0800000000080d0f1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1a191714100c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0b0b0b0b0b0b0b0b0b0b080100000000000000000000000000000e1e2c3538444444443f3c3325150300000000000000000000000010263b50657b90a1b3c0c8ccd5c3ae99836e59442e1900000000000000000000000000000000011426364758647a8b9fb4bdcec4b4a296806b5e4d3d2c273c51677c91aabbcec5af9a85705b4a4a596d8298adc2cebbaa927d67523d28120000000000000000000000000000000000000d18253037444b525b636b72777b7f82848587868584827e7a766f6962594f4b3f352c1d150a0000000000000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000000000a1d3144556278899ea8b6c2cfdae3d8cec9c5c2c1c2c4c8ccd5dfe2dfd3c9bfb49f8a78634e39230e0000000000000000000000000000000004121d242731313131313131313131302d251a0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f1120202020202020202020200d0b05000000000000000000000000000000000000000000000000000000000008131c20202020202020202020201d140900000000000000000000000006192c3c494d5959595955504333200d000000000000000000000000172c42576c8197acbfd0dee0dac4af9a856f5a45301a000000000000000000000000000000000008182a3a4a5c687e929fb1c1d1c0b09e917c665b49392840556a7f95aac8d9c0ab96806b563d3b53687d93a8bdd9c8ab96816b56412c160000000000000000000000000000000000000008131c2631353d494e565861666a6d6f707171706f6c69656157544d483b372e211a0f02000000000000000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000000000001142637495a647a8a9ca4b5bcc9cfdadedfdbd7d6d7d9dedfdcdacfcac2b6b1a1998779634e39240e0000000000000000000000000000000000000a10121c1c1c1c1c1c1c1c1c1c1b18120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a2020202020201d170d0b05000000050b0d1a1f2020202016140e040000000000000000000000000000000004111c232635353535353535353535352220190d0000000000000000000000000000000000000000000000000000000818253035353535353535353535353126190900000000000000040a0c150c2035495a636f6f6f6f6a61503c28131113110b02000000000000001a2f445a6f8499afc4d9edeed9c3ae99846e59442f190000000000000000000000000000000000000c1c2d3e4e606d8197a3b5c5cdbcb39e89796357463241576c8196acc1d3bea9937e69543e3b50667b90a5bbd0c2ad98836d58432e1800000000000000000000000000000000000000000009141d202c36393a474c505558595b5c5c5b595753504b463937342b221b10060000000000000000000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e93a8bdd3e2dfc9b49f8a745f4a351f00000000000009192c3c4b5c647986979fabb5bcc9c9cdd7d0d1d0cfd3cac7c9bcb5afa49c918377635b4a36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e353535353535322c2220190e000d1820223035353535352b2821160800000000000000000000000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a342b1d0d0000000000000000000000000000000000000000000000000000132536434a4b4b4b4b4b4b4b4b4b4b443726140100000000000c171f212a2123384d6378838484847f6a553f2a242628261f1406000000000000192f44596e8399aec5d5deded0bfaa95806b55402b1600000000000000000000000000000000000000102031424b6074859ba7b8c9ccb9a89c8675614b4243586d8298adc2d2bda8937d68533e3a50657a8fa5bacfc4af99846f5a442f1a0000000000000000000000000000000000000000000001080f1a21232a33373b4043444547474544423e3a3633292220190d0800000000000000000000000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e93a8bdcdcdcdc9b49f8a745f4a351f000000000000000e1e2e3e4b5b6375828c989fabafb4bac6bbbcbbbac3b6b2adab9f9a91867c6e61594a3d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f20202020202020202020200d0b05000000000000000000000000000000000000000000000000000b1b29334a4a4a4a4a4a484238352b1e0e1d2b3437454a4a4a4a4a403d3326160400000000000000000000000000091c2f404c5060606060606060606060605e483b2b1905000000000000000000000000000000000000000000000000071c30435460606060606060606060605544311d08000000000c1c293336403632394f64798e999999836e59442f383b3e3a312414000000000000152a3f556a7f94a7b8c5c9c8c1b3a18f7a644f3a240f0000000000000000000000000000000000000002131e3245566278899eabbccfc6b5a498826d604f3e576c8196acc1d3bea9937e69543e3b50667b90a5bbd0c2ad98836d58432e1800000000000000000000000000000000000000000000000000060c0e181f22262a2d2f303231302f2d2925211e170d0b05000000000000000000000000000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e93a8b8b8b8b8b8b49f8a745f4a351f000000000000000010202e3d4957616d79838c949a9fa8a5a6a6a6a5a3a59d98938c847c73665e4c473b2d1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222535353535353535353535352220190d000000000000000000000000000000000000000000000003172939465e606060605f5d574d483c2c1e2b3b484d5a5f6060606056504433210e000000000000000000000000000f23384c5e66757575757575757575757570594834200b0000000000000000000000000000000000000000000000000b20354a6072757575757575757575746d5b35200b0000000417293a464c554b46394f64798ea4ae99846e5944404c51534e42311e0e00000000000c22374c6177899ea6b1b4b3b0a399836f5c4a36220d000000000000000000000000000000000000000002162838485a667c8d9fb4bfd0c2b2a0937e695c4b556a7f95aac8d9c0ab96806b563c3a53687d93a8bdd2c1ab96816c56412c1700000000000000000000000000000000000000000000000000000000040a0c1115181a1b1c1c1b1a1714100c0a03000000000000000000000000000000000000000000001f354a5f748a9fb4c9cbb6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e93a3a3a3a3a3a3a39f8a745f4a351f000000000000000002101f2c39464b5b636e787f85898d8f909191908e8b87837e776f6760544c40342a1d0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a4a4a4a4a4a4a4a4a4a4a4a4a342b1d0d000000000000000000000000000000000000000000000a1e334657707575757575726c625a493c2c364859626f74757575756b62503d28140000000000000000000000000011263b50667c8a8a8a8a8a8a8a8a8a8a8a78624d37220d00000000000000000000000000000000000000000000000013293e53687e8a8a8a8a8a8a8a8a8a8b745f4a351f000000081f334658616a61574d4f64798ea4ae99846e59494d5e6668604e3c2b1906000000000a1f334758647b88959c9e9e9b938576614c3e2d1b070000000000000000000000000000000000000000000a1a2b3c4c5e6a8095a1b3c3cfbeb49f8b7a645951677c91aabbcec4af9a846f5a4847586d8297adc2d2c2a8937d68533e281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f354a5f748a9fb4b8b8b6a18b76614c36210c00000000000000000000000000000000000000000000000013293e53687e8d8d8d8d8d8d8d8d8d8b745f4a351f000000000000000000010f1b29323d4a4e5a636a7075787a7b7c7b7a7876726e686259514b4336301f180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3e4b4f60606060606060606060605e483b2b19050000000000000000000000000000000000000000000c21364c61768a8a8a8a8a878178635b493543546277848a8a8a8a8a806b56402b160000000000000000000000000011263b50667b909f9f9f9f9f9f9f9f9f8c77624d37220d00000000000000000000000000000000000000000000000013293e53687e93a0a0a0a0a0a0a09f8a745f4a351f000008182d3e4c61767f75675f4f64798ea4ae99846e595a626f7b7e685a483520120000000004182a3a4b5d647780868989857e7461584733201000000000000000000000000000000000000000000000000e1e2f404a60728399a5b7c7cebbaa9d8877615561768b9fb4cacab49f8b786259586176899eb3c9c9b5a48d78624d38230d00000000000000000000000000000000000000000000000001080b0e11131415161514120f0c0a04000000000000000000000000000000000000000000000000000000001f354a5f748a9fa3a3a3a3a18b76614c36210c0000000000000000000000000000000000000000000000000c21364c617678787878787878787879634e38230e00000000000000000000000b161e2d363c494d55556062656667666563605758534d483b35302618120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c64757575757575757575757570594834200b0000000000000000000000000000000000000000000a1e33465772879d9faa9f9d978879634d3a4b6073869a9faa9f9f99846f593a29170400000000000000000000000011263b50667b90a5b5b5b5b5b5b5b5a28c77624d37220d00000000000000000000000000000000000000000000000013293e53687e93a8b5b5b5b5b5b49f8a745f4a351f00001325364a5c6c8195877d706464798ea4ae99846e606a7883908a78624d402f1d09000000000c1c2e3f4b59616b71747370696055473a2a1702000000000000000000000000000000000000000000000000111c3043546176879da9bacdc8b7a69a8473605870859aafc0cebbaa9a8477717177839aa7b9ccc2b19c86715a4935200b000000000000000000000000000000000000000000070c0e141d202326282a2b2b2a292725221f18130c0a040000000000000000000000000000000000000000000000001f354a5f748b8d8d8d8d8d8d8b76614c36210c0000000000000000000000000000000000000000000000000a1f33465861636363636363636363635b4935210c000000000000000000000000030f1a212c353837444b4d50515151504e4b45393e37342b201c1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8a8a8a8a8a8a8a8a8a8a8a78624d37220d00000000000000000000000000000000000000000003172939596f8499aebbb4b2a69a846f584650667b90a4b4bbb5b29d87725846331f0a00000000000000000000000011263b50667b90a5bbcacacacacab7a28c77624d37220d00000000000000000000000000000000000000000000000013293e53687e93a8bdcacacac9b49f8a745f4a351f00071c304354647a8c9f9d92847a6c798ea3ad98836e75808a99a199836f5e4c38240f000000000010202e3a474c555c5f5e5b534b44372a1c0c00000000000000000000000000000000000000000000000000001325364758647a8b9fb4bdcec4b4a295806b5e667b90a2b4c5c8b4a29a8b86868b9aa1b3c5c6b5a4927d67523c2b190600000000000000000000000000000000000003090f1a2124263135383b3e3f40403f3e3d3a37342a28211f170b08000000000000000000000000000000000000000000000e23384e63797878787878787973604b35200b0000000000000000000000000000000000000000000000000417293a464c4e4e4e4e4e4e4e4e4e4e493d2c1a060000000000000000000000000000070e192023273135383a3b3c3c3b39363228282220180d080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f9f9f9f9f9f9f9f9f9f8c77624d37220d00000000000000000000000000000000000000000000162b40566b8095abc0cac4b49f8b76614c53687d93a8c2cecab7a58b76614c36210c00000000000000000000000011263b50667b90a5bbd0dfdfdfccb7a28c77624d37220d00000000000000000000000000000000000000000000000013293e53687e93a8bdd3dfdfc9b49f8a745f4a351f000b20354a6074859baab2a29a8c81788da8ab96817b87959fa9b4a1917b66513c2611000000000002101c2a343740474949463e363127190c0000000000000000000000000000000000000000000000000000000818293a4a5c687d929fb1c1d1c0b59f8d7c665e70849aa7b8c5c0b4a99f9b9b9fa9b3bfc6b9a89c8673604b35200e0000000000000000000000000000000000020b161e212d363937444b4d50535455555554524f4c473a3d363329231c110800000000000000000000000000000000000000000c2135495b6363636363636363605443301c08000000000000000000000000000000000000000000000000000c1c29333638383838383838383838352c1f0e0000000000000000000000000000000000060c0e151d2023252627262523211e16130d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b5b5b5b5b5b5b5a28c77624d37220d0000000000000000000000000000000000000000000012273c52677c91a7c7d7cfbcab8f7a655050667b90a5c5d5d4c3a48f7a654f3a251000000000000000000000000011263b50667b90a5bbd0e5f4e1ccb7a28c77624d37220d0000000000000000000000000000060c0e12151615130f0b13293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000c21364c617683909ca4b4ab9f96868a9eb09a848c9da5b4aa9f96887c66513b2611000000000000000c181f222b3134343029201d150900000000000000000000000000000000000000000000000000000000010c1c2d3e4e606d8197a3b5c5cfbcab9e8979636278899ea7b6c2c7bab4b0b0b4bac7c3b6a89e8a79635544311d08000000000000000000000000000000000a161e2832363d4a4e555560636668696a6b6a696764615958524c463a372e231c1104000000000000000000000000000000000000061a2c3d494e4e4e4e4e4e4e4e4b433626140100000000000000000000000000000000000000000000000000000c171f2123232323232323232323211a0e00000000000000000000000000000000000000000001080b0d10111211100e0b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cacacacacab7a28c77624d37220d000000000000000000000000000000000000000000000e23394e63798ea9bacdd9c9a8937e68534d62778ca7b8ccd3bda8937e68533e291300000000000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000000000000000001080e192023272a2b2a2825201d293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000a1f334658616f7c87949ea8b3a39b9ea8b4a29a9fabb0a29a8b8075665e4c38240f0000000000000000040a0c161c1f1e1b140b080200000000000000000000000000000000000000000000000000080e1016141d202031424b6074859ba7b8c9c9b9a79c867560657b899ca4b2b7c4c2c4c4c2c4b7b3a59d8a7c655b4937261401000000000000000000000000000002121a283239464b545b636a6f75787b7d7f80807f7e7c7a77726d686158504b3f372e1f180c0000000000000000000000000000000000000e1f2c353838383838383838353026180800000000000000000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfdfdfdfccb7a28c77624d37220d000000000000000000000000000000000000000000000b20354b60758a9fb4c9d6c1ac97816c57485973889eb3c8d6c1ac97816c57422c1700000000000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000008141c202c35383d3f403f3d3a3531273e53687e93a8bdd3e8dfc9b49f8a745f4a351f000417293a464c5e66747f89969ea7b0b4b9c0b4b0ab9f9b9084796b61574c402f1d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b22252b26313535303245566278899eabbccfc5b5a498826d60657986939da6aaacaeaeacaaa69d938779655e4c3d2c190900000000000000000000000000000a151d2f38454b57616971797f85898d90939495959493928f8c88837d766e655d504b3f342a1d110300000000000000000000000000000000000e1a212323232323232323201c140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f121415161513110d0b0500000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f4e1ccb7a28c77624d37220d00000000000000000000000000000000000000000000081d31445571869bb1c6dac5af9a85705a3b5a70859aafc5dac5b09a85705b3c2b1905060000000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000e182630353c494d52555555534f4b44373e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000c1c2933404c5660697780899eaabbcdd1cab59f8d857c6f635b4b46392f22120000000000000000080e10181b180e0c060000000000000000000000000000000000000000000000000002101b222e373a4137444b4b433638485a667c8d9fb4bfd0c2b2a0937e685c63737e888f9497999997958f887e74635b4c402f1f0f00000000000000000000000000000c1a2832404c56606a757e868e959a9ea8a5a8a9aaaaaaa9a7a4a59d98928a837a70655d4c473b2f2114060000000000000000000000000000000000060c0e0e0e0e0e0e0e0e0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d11131415151412100c0a04000000000000000000000000000000000000000000000000000000040a0c151d202427292b2b2a2826222019110b0801000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d0000000000000000000000000000000000000000000008152737586d8298adc2d7c8b39e88735948576c8196acc1d6c9b39e89745a4835201b1b12100a0100000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000002101e2c36434b525a63676a6b6a686460554e4953687e93a8bdd3e8dfc9b49f8a745f4a351f00000012223038454b5a626e7a828a9fb4cad5c6b19c867e746860544b3f342b1d0d00000000000003111c23252e302d23211a0f01000000000000000000000000000000000000000000000715212e373f4b4f565b556060545a544d4c5e6a7f95a1b3c3cfbeb49f8b7a6459606873797f828484827f7a746960564a3d2f211101000000000000000000000000000d1c2a38454b5e66757f89939ca4aaafb4b9c6bdbebfc0bfbebcc3b7b2ada99f998f857b6e61594b3f3124150700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b10181f222628292b2b292825211f170f0d0700000000000000000000000000000000000000000000070c181f22283236393d3f40403f3e3b37342b26201c14080200000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d000000000000000000000000000000000000000003111c232a3f54697f94a9bed4ccb8a78c77624c53687d93a8c9daccb9a78d77624d3830303028251e1305000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000010202d3c4954606871787c7f807f7d7a756d635b53687e93a8bdd3e8dfc9b49f8a745f4a351f00000c1c30404c56606a78838f979faab4bac5b8b3a49c93887d72645d4d483b2b1805000000000311212e373a43454238352c1f0f000000000000000000000000000000000000000000091725333f4b4f5d656b71737575736f69625a4c60728399a5b6c7cebaa99d877761555460646a6d6f6f6d6a6460544b45382d1f1103000000000000000000000000000d1d2b3a4756606c7c87949ea7b1b5c2c4c9cdd7d2d4d5d5d4d3d1d4cac7c7bab4aea39b8f8277655d4e423325150600000000000000000000000000000000000000000000000000070b0e111415161514120e0b08010000000000000000000000000000000000000000000000000000000008131c20252a34373b3d3f40403e3d3b36332924221b100a010000000000000000000000000000000000040f1a212a343738454b4e525455555553504d483b3b3530261d1509000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d000000000000000000000000000000000000000111212e373a4350667b90a5c5d5d5c5a5907b65504f647a8fabbccfd6c5a6907b6651454545453d39302313010000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000e1e2d3e4a5a63737d868d92949594928f8982796b61687e93a8bdd3e8dfc9b49f8a745f4a351f0004172a3a4c5e66757f8a99a1ada99f9fa8b8a79ea7b1a69d92857a6d62594834200b0000000011212f3f4b50585a574e493d2c1c0c000000000000000000000000000000000000000617273443505d65707a8086888a8a88847e786c62596176879da9bacdc7b7a69a8473604b4a4f5557595957554f4b433632281a0f01000000000000000000000000000b1b2b3b4858617481909da5b3b8c5c9d2dadee1e8e0dedcdcdddfe2e6dfddd7cdc9c1b4b0a098887b6860504333241404000000000000000000000000000000000000000002090b131c202327292a2b2a292724201c140b090200000000000000000000000000000000000000000000000412182530353b3b484c50535455555452504c463a3a362e251e13060000000000000000000000000000000c181f2d363a474c5456606467696a6b6a6866625958504b4336312719110300000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d000000000000000000000000000000000000000f1f2e3f4b50585b62778ca7b8ccd3bea9937e695b5b61768b9fb5cad4bfa9947f6a5b5b5b5b5b524d41301e0a0000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000009192c3c4a5c647885929ca4a7aaaaaaa8a89e978b8176687e93a8bdd3e8dfc9b49f8a745f4a351f000a1f334758667c87959fa9b4a59d8a8a9fb39e89979fb1b3a39b8d8277624d37220d000000091c2f404c5d656d706d635b493a2917040000000000000000000000000000000000001324344552616a7a858f969b9e9f9f9d9a938b8177655d647a8b9fb4bdcec4b4a295806b5e4c3c3f42444442403a3530261d150a00000000000000000000000000000818293a4859627685969fb2b6c3ccd5dee5dfddd5d6ccc9c7c7c8c9ced8d8dfe2e2dfd1c8beb2a69d8d7e6a615042322212000000000000000000000000000000000000020a151d20253035393c3e4040403e3c39353026201d150a0200000000000000000000000000000000000000000c171f3036434a505859626668696a6a6967656158574f4a3e3a3020190e00000000000000000000000000121c2a333d4a4e5961696f75797c7e80807f7d7b77736d6660544b44372e211501000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d000000000000000000000000000000000000061a2c3d4b5d656d707073899eb3c8d7c2ac97827070707072879db2c7d8c2ad9882707070707070675f4d3925100000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000002152737495a647a899ba3b1b5c2bfc0bfc6b9b4aa9f9687797e93a8bdd3e8dfc9b49f8a745f4a351f000c21374c6176899da5b4aa9f96877b8b9fab958081909ca4b3ab9f947f6a543f2a150000000e23384c5e657b83858279635847331f0a00000000000000000000000000000000000d1d314252636c7f8d9aa2abb0b3b5b4b3afa99f97887b665e687d929fb1c1d0c0b59f8d7c665a4938282f2f2d2a25201c14080200000000000000000000000000000114263646586277869ba3b0bdcad4e0e7e0d4cac7c0c5b9b3b2b2b2b4bbc8c3c9ced8e6e4ddcfc4b7ab9f937f6a604f402f1d0d000000000000000000000000000000000a161e28323636434a4e515455555554514e4b43363632281e160a0000000000000000000000000000000000000d1c2a33404c5460656d73777b7d7e80807e7d7a76716c645c524d41352b1e120400000000000000000008131c2f3a474c5b636e777e848a8e929495959493908c88827b736960554b3f331c14080000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d0000000000000000000000000000000000000c2136495b657b828585858a9fb4c9dec8b39e8985858585858a9eb3c9dec9b39e8a8585858585857d67523d28120000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000081d3144556378899ea7b5c1c9d2d4d5d4d6ccc8bbb4a59d8a8399aec3d8eedfc9b49f8a745f4a351f000a1f334758697e93a4a29a8c8075798daaad98826d7b86939ea79c8674604b36200b000006192c3c50657c8d989a978976614c37210c0000000000000000000000000000000005182a3b4e606c81949fabb4c0c6c4bebfc5c7bab4a69d8c7c66606c8197a3b5c5cfbcab9e8978635645321e1a18150f0b080100000000000000000000000000000000081c3043546176869ca4b4c1cddfe6e2d5cbc3b7b2aba5a79e9d9c9d9faaa7aeb4bbc8cfe1e8e2d5c9bcb49d937e695e4c3b2b18050000000000000000000000000003111a283238454b5254606366696a6b6a6967636054524b453832281a10030000000000000000000000000000000d1d2b3a474c5e66737b82888c90929495959392908b86817a71675f4d493c2f2212040000000000000008182530404c58616d79838b939a9fa9a7a9aaaaaaa8a5a69d9790877e74655d50433026180800000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d0000000000000000000000000000000000000e23394e63798c989a9a9a9fa8bacde0ccb8a79e9a9a9a9a9a9ea8b9cce1ccb9a89e9a9a9a9a9a97826d58422d180000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000417293a4b6074859ba7b8c5d2dee5d8cec9c3bfbfc1c3b7a89e99a1b2c6dbf4dfc9b49f8a745f4a351f0004172a3a4b6073869c9284796b64798ea4ae99836e65737e8997907b655645311d0900000c2135495b71869cabafa7957f6a55372715010000000000000000000000000000000b1f344859687e939fb5bcc9bfb3aea9aaafb4c0c4b8aa9e8a79636074859ba7b8c9c9b9a79c8675604b423120100000000000000000000000000000000000000000071a2d3d4b6072849aa4b5c2d1dfebddd0c4b8b3a59d95908c898787888a8d92999faab2beccd6e4e7d9cfbbb49f8d7c6659483420120000000000000000000000000715212e38454b5660676e74787c7e7f807f7e7c79746e6760564b45382e211406000000000000000000000000000d1d2b3b4858616e7c8790989da6a5a8a9aaaaa9a7ab9f9c978f867d6f625a4c402f221202000000000000132536434a5e6677828c989faaafb4bac7bebfc0bfbdc4b7b2ada59d93877b6a614b4336261401000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d00000000000000000000000000000000000013283e53687d93aab0b0b0b4bac6d7e8d6c5b8b3b0b0b0b0b0b3b9c6d6e8d6c6b9b3b0b0b0b0b09b86705b3929170300000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000a1f3346586a7f94a3b5c5d6e3e1d3c7bab4aeaaaaacb1b5b9b4aeb2bfcfe2f4dfc9b49f8a745f4a351f00000c1d314455657b887d70635b64798ea4ae99846e5560697782826e5e4c3827150200000e23384d63788da4b5c5b09b85705544311d080000000000000000000000000000021527384c62778a9fb4bdcfbbaea19994949aa2afbcc8b9a89b8573606278899eabbccfc5b5a498826d604e3e2e1c0c000000000000000000000000000000000000000d21364a5c6a7f94a2b3c2d2e0ecdbcebfb3a69e9387807b767472727375787d838b98a0b4b9c6d5e2ebe3cfbcab9e8977624c402f180800000000000000000000081625323f4b56606a757c83898e919395959593918e89837d756a60564b3f32241507000000000000000000000009192a3b4859627683919ca5adb3b7c4bdbebfbfbec9bcb4b1aca39b928478665e4c402f21100000000000071c304354606b7c88979fabb4bbc8c9cdd7d3d5d5d4d2d4cbc8c3b6b2a49c8c806d605443301c14000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d00000000000000000000000000000000000013283d53687d92a8c8c5c5c9cdd7e4f1e3d6ccc8c5c5c5c5c5c9ccd6e4f0e4d6ccc9c5c5c5c5b49e89745746331e0a00000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000c21364c6176899eb3c2d2e3e6d3c3b6a99f999594979ba3b0b4c0c6cfddedf4dfc9b49f8a745f4a351f0000011527374b5d6576675f4e4f64798ea4ae99846e594b59616d73604b402f1a0a00000013283d53687d92a8c2c9b49f8a75604b35200b0000000000000000000000000000091d3145566c8196a8bacdc3ae9d94847f7f85959eafc3c6b5a3927d675a667c8d9fb4bfd0c2b2a0937e685c4a3a2a18080000000000000000000000000000000000091d30404e64798c9fb4c0d0e0eedecebdb1a199887e746b6561585d5d546063676e7883909ea8b8c4d5e7ebd9c9b8a799836f5e4c36251300000000000000000006162633434f5d65747f8892999ea7a6a9aaaaaaa9a6a89e9992887f74655d4f423325150500000000000000000001142637485962788699a1b2b6c3c8cbd4d2d3d5d5d3d9cfcac6c1b5b0a29a8a7c665e4c3f2e1a0a000000000b20354a607280919ea7b4bcc9ced8dfd9d7cdc9c8c9ccd6d9ddd4cac3b6ab9f958272604b42311e0e0000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d00000000000000000000000000000000000010253b50657a90a5c5bfbfbfc7cad4e1f1e1d4cac7bfbfbfbfbfc7cad3e0f0e2d5cbc8bfbfbfb9a88b76614b36210c00000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000061a2c3d54697e94a7b9cce0ead8c8b6a59d8b837f7f81868e9aa2b1bdcedcecf4dfc9b49f8a745f4a351f00000009192e3f4b5660564d414f64798ea4ae99846e593b474c5460544330211100000001172c41566c8196abc1cdbaa98e78634e39230e00000000000000000000000000000b20364b6075899eb4c6cab6a4947f6f696a708095a5b7cac1b19c86715a5e6a7f95a1b3c3cebeb49f8b7a64584736261401000000000000000000000000000000000f24394c5e70849aaabbcedeeee4d0c0b19f978375686055504c473a36434b4d525a636e7b8a9ea6b8c9d9ebe7d5c5b3a1907c665443301c070000000000000002142433445161697b87949ea6aeb3b9c5bebfc0bfbec6b9b3aea69e94877b69605043332313000000000000000000081d3144556277879ca4b3bfcad3dddedcd7cdc9c9ced8dbdfdbd2c9c0b4a89e8b7c665d4b38271502000000172c42576c81959eb3b8c5cfd9dacfcac4c6bab4b2b3b9c6c4c7d0dfd3c9bcb4a097816c604e3c2b190600000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d37220d0000000000000000000000000000000000000d22374c62778ca7aaaaaaaab2b7c3d4e6d4c3b7b2aaaaaaaaaab1b6c2d3e5d5c4b8b3aaaaaaa99f8a75604b36200b00000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000c2135495b71869cb1c5d6e8e2cebbaa9d87796e6a6a6c717984969fb1becfe1f4dfc9b49f8a745f4a351f0000000011212e38454b4538394f64798ea0a099846e59443436434b433626140300000005182a3b5a6f849aafc4d7c7a7917c67523c2712000000000000000000000000000010253b50657a90a8b9cdc7b29c87736054556074879db2c7c9b5a48d78624d60728399a5b6c7cebaa99d8776615443301c12000000000000000000000000000000081b2e3f51667c91a2b4c8d8eae8d6c5b4a297817361574b4437373329263035383c494d5e657a889eabbccfe3f2e3d0bfb19c8673604a35200e000000000000001020324251626b7f8d9da5b3b8c4c9ccd6d3cfcecfd3d6ccc9c4b8b3a59d8c7e6a615041311e0e0000000000000006192b3c4b6073849aa5b6c2d0dfe0d3cac7c7bab4b4bbc8c6c9d2dfddd0c6b9a99f8b7b655645311d0b00000011263b50667b8d9fb5c0d1e0d1c9bcb5afa7a89f9d9ea8a6afb3bfcdd7d9cfbeb19f937e685a4935201000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4f7e1ccb7a28c77624d3722110000000000000000000000000000000000000b20344859738995959595959da5b7cadfcab7a59d95959595959ca4b6cadecbb8a69e9595959490816d5645311d0900000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000e23384e63788da4b5c9e3f3dfc9b49f8b79635b5555575b63738196a0b2c6daf4dfc9b49f8a745f4a351f0000000003111a2832363228394f647a8b8b8b8b836e59442f26303530261808000000000b1f34475973889eb3c8d5c0aa95806b55402b160000000000000000000000000000152a40556a7f95aac6d6c0ab96816b544344556c8196abc1d2c2a8937d6853546176879da9bacdc7b7a59a8472604b402f1e0e00000000000000000000000000000d22374b5d70859bb0c0d1e6f6e0ccb9a79a8472605546393127211f17141c20232c35404c5c657b8d9fb4c4d4e7eddecab6a4917c66513c2b1905000000000008182d3e4f606b80949fabb7c3cbd5d1c8c5bebab9babec5c8d1d5cbc3b6aa9f937f6a5f4d3c2c19060000000000000b2035495a6b8095a2b4c3d3e0dbcec2b6b1a8a99f9faaa7b0b5c1ccd9e4d7c7baa99c8674604b3a29170400000f23384c5e6b8096a2b4c5cbc0b4ab9f99918c8988898b9199a1b4bac7d7e3cebdb49f8a78624d3e2d1b070000000000000000000000000000000000000b1b304150657b90a5bad0e5f8e3cdb8a38e79634e3f2e1909000000000000000000000000000000000005182b3b53687e8080808080879db2c7ddc7b29d878080808080869cb1c7dcc8b39e888080807f7b6d63523827150200000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000013283d53687d92a8c2d2e5e9d6c6ac97826d5b4a3d3f3d4a5560728298adc2d8eddfc9b49f8a745f4a351f0000000000000a161e211e20354b60727676767675604b3621141c201c140800000000000d22374c62778ca6b8cbd9c3ae99846e59442f190000000000000000000000000000172d42576c8297acc1d2bda8927d6853363753687d93a8bdd2c0aa95806b554758647a8b9fb4bdcec3b3a295806b5e4c3c2c1a0a000000000000000000000000011426374f647a8fa3b4c8deeee9d7c6b39e897862544437291d150c0a0401080b0e19202f3e4b5d6b8095a6b7cbdff5e5d3c2af9a85705a4835200b00000000001325364a5c697e939eb4bcc9d4d7cdc0b4b0a9a5a3a5a9b0b4c1ced8d4c8bbb49d927d675b493521110000000000071a2d3d4d62788b9fb4c0d1e1dccebdb1a49c928c8a8a8c929ba3afbbccdae5d8c7b6a4957f6a5846331f0a0000091c2f404b6073849aa7b8b8b3a29a8d847c77747374767c84919fa9bacde2e1cdbaa999836e5c4a36220a0000000000000000000000000000000000031628394d5f70859ab0c5daefffedd8c3ad98836e5d4b3726140100000000000000000000000000000000000d263a4e60686a6a6a6a6d8297adc2d7c8b29d88736a6a6a6c8196abc1d6c9b49e89736a6a6a665e5245351a0a0000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0002172d42576c8297acc1d7ece1cdb9a88f7a654f3d2d2a2d374454687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000000002090b091c3043546061616161605645321e09080b08010000000000000f243a4f647a8fa4c4d5dbc6b19c86715c47311c0000000000000000000000000000192e44596e8399aec3d1bca6917c67513c3c52677c91a7bcd1c2ac97826d573a4a5c687d929fb1c1d0c0b59f8d7c665a49382816030000000000000000000000081d3144556c8197acc1d1e4f6e1cdb9a8947e695a483626190b01000000000000000611202e3f4b6074889db2c7d8eaf0dfcab59f8c78624d38220d00000000071c304354647a8b9fb4bccfd9d7c7bab4a29a93908e90939ba3b4bbc8d8d9cebbb49e8a79634d3f2f1c08000000000c21364a5b6e8398a9bacedee0cfbeb19f97867d777475777d85949dafbccce1e5d3c2b49f8a76614c36210c000000121d3144556278899ea6a69e92847a6f6761595d5761666f7d8b9fb4bfcfe2d7c7b3a18e79644f3828150200000000000000000000000000000000091e324657677d92a2b4c8ddf1ffefdac6b2a08f7b655544311d0c00000000000000000000000000000000000b1f31424e5355555555697e94a9bed3cbb7a68b76615555687d92a8c9dacdb9a88d78625554514c40352717000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00021527385b71869bb0c6dbf0dec9b49e8975604b35201519263653687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000000000000001142636434b4b4b4b4b4b4538281602000000000000000000000f253a4f647a8fa4b9cfdcc6b19c87715c47321c0000000000000000000000000000192e44596e8399aec3d1bca6917c67513c3c52677c91a7bcd1c2ac97826d57423e4e5f6c8197a3b5c5cfbcab9e8978625645321e1402000000000000000000000b20354b6074889eb3c8ddeff3dec9b49e8a76614c3c2b18090000000000000000000002101d3145566a7f95a9bacee2f6e3cfbcab947f6954372715010000000b20354a6072859ba9bacee3e1cdbaa99f91857e7a797a7e85929faabbcee2e1cdb9a89a846f5d4b38230d000000031628394e63798c9fb5c7d8e5d3c2b2a0978174686259606267737f949eafc3d4e6e1cdbaa8937e68533e2913000000011527374859657b889090887d70645c524c473b464b515f677c91a1b3c6dbe5cfbfac97826d5645321d0900000000000000000000000000000006192c3c4b6175889db2c0d1e4f0eef0e2cfbeb19b8673604b3a2a170400000000000000000000000000000000021424313a3e40404050667b90a5c5d5d4c4a48f7a654f4f647a8fabbccfd6c6a6917b66513f3b382f221709000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00091d31455674899fb4c9def0dbc6b09b86715544311d0813293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000000000000000000000818263035363636363632281a0a00000000000000000000000f253a4f647a8fa4b9cfdcc6b19c87715c47321c0000000000000000000000000000172d42576c8297acc1d2bda8927d68533d3d53687d92a8bdd2c0ab95806b564031414b6074859ba7b8c9c9b9a79b8575604b42312010000000000000000000000f243a4f647a8fa6b8cbe0f5ecdac9ac97816c5846331d0d000000000000000000000000021527384c61778a9fb4c9dff4ecdac9af9a846f5544311d080000071b2d3e52677d92a3b5c7d8e3d0bfb49f8b7d706965646569707d8c9fb4c1d1e4d7c6b3a1907b65503b2b18050000091e3245576c8196abbccfd9dcc9b6a498826d60564c484a4c54606b8095a5b6cadfe9d7c6ae99846f593b2a180500000009192b3b4b5d65757b7b75685f4f4a3e37342a3236414d5f6e8399aec6d6e8dec9b39e8975604b36200b000000000000000000000000000000092035495a6b8095a6b7cbdee2dbd9dbe2dec9b5a3937e685847331f0f000000000000000000000000000000000006141f26282c2d374d62778ca7b8ccd3bda8937e68534b61768b9fb5cad4bfa9947f6a543f2b26201d1509000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000b20364b60758ba8bacde1edd8c3ad98836e583727150113293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00000000000000000000000008141c2021212121211e160a0000000000000000000000000f253a4f647a8fa4b9cfdcc6b19c87715c47321c0000000000000000000000000000152b40556a8095aac7d7c0ab95806b564041566b8096abc0d5c5a9937e69543e293245566278899eabbccfc5b5a397826d604e3e2d1c0c00000000000000000014293f54697e94a9c5d5e7f8e3cfbcab907b66513a291700000000000000000000000000000a1f34475970859ab0c5daeff3dec9b49e8975604b35200b00000d22364a5c71869bb1c1d2e5dbc7b3a1917c675f54504e505460687e93a3b5c9dde4d0bfaf99846f594834200b00000b21364b6075899eaeb4bcc9c7bcb19c8674604b4538343536434b6074879db2c7dcf2dec9b39e89745947341f0b000000000d1d2e3f4b5761666560564e41362d221f181e21304050657b90a8b9cce1e1ccb9a88f7a65503a2510000000000000000000000000000009192f404d62788b9fb4c4d4ddd0c7c4c7d0ddd2c2b39e8976614c3d2d1a07000000000000000000000000000000000919273136424242485973899eb3c8d6c1ac96816c57465772879db2c7d8c2ad98836d5837403c353127190b0000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000c22374c61778ca1c6d7e9ecd7c1ac97826c57422d170013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000000000000000000001080b0c0c0c0c0b0902000000000000000000000000000f253a4f647a8fa4b9cfdcc6b19c87715c47321c000000000000000000000000000010263b50657b90a9bacdc6b09b86715e4f505f71869cb1c6cbb8a68e79644f39242838485a657b8d9fb4bfd0c1b1a0937e685c4a3a2a18080000000000000003192e43586e8398adc3d8edf4dfcab59f8b76614c37210c000000000000000000000000000004182a3b566b8096abc0d5ebf6e1cdb9a88e79644e39240f00000f24394e64798ea3b5c9dfe8d6c6ae99846f5e4d413b393b414e6070859bb0c8d8eadfcab59f8c77624d37220d00000e24394e63798790999fabb0b2af9e8f7a64564532272020263144556a7f94a9bfd4e9e0ccb9a78c77624c37220d000000000010212e39464b51504b453831221b100b040a1220354b6074899eb3c9dee8d6c6a9947f6a543f2a1500000000000000000000000000021527374c5e6e8399a9bacde2d0bfb3aeb3bfd0e0ccb8a796816c5b4a36211200000000000000000000000000000002152737444b575757575a70859aafc5dac5af9a85705a57596e8499aec3d9c6b19c8671555755514b4437281b0b00000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000e23384d63798da2b8cde2ebd6c1ab96816c56412c170113293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfdbc6b19c87715c47321c00000000000000000000000000000b21364b60758a9fb4c8c9b5a3907c6a64656b7d92a4b5c9c6b39e8873604a35201a2b3c4c5e6a7f95a1b3c3cebeb49f8b7a64584736261401000000000000011426375b71869bb0c6dbf0f1dcc6b19c87715847331f0a00000000000000000000000000000011263c51667b91a6bbd0e6fce9d7c6a6917c67513c27120000132536556b8095aac1d2e4e1ccb9a8907b65504030252425314252677d92aabbcee2e3cfbcab937e69533e291400000c21364a5b63737b848b959a9c9a92806b5d4b3828160a0b1527374f657a8fa4bacfe4e8d6c5a38e79644e39240f000000000002101b2932363b3b3632281a130700000000081c30435470859aafc5daecd7c2ad97826d58422d1800000000000000000000000000081d314455667b90a1b3c7d7d6c5b3a199a1b3c4d4d5c5b49f8c79634e41301a0a0000000000000000000000000000081d314455606c6c6c6c6c6c8197acc1d6c8b39e88736c6c6c6c8095aac0d5c9b49f8b746c6c6b6660554639281603000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000e24394e63798ea3b8cee3ebd5c0ab96806b56412b160113293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000000030d13152020202020202020201e1c160c000000000000000000000000000000000f253a4f647a8fa4b9c6c6c6b19c87715c47321c0000000000000000000000000000091e3245566d8297aabbcec1b49e8a7f7a7a808b9fb4c2cdbaa896806b5443301c0e1e2f404a60728399a5b6c7cdbaa99d8776615443301c12000000000000081d31445574899eb3c9def3eed9c3ae99846e593a2917040000000000000000000000000000000e23394e63788ea3b8cde3ffe9d4bea9947f69543f2a1400071c30435470859ab0c5daefdec9b39e8975604b3620130f1321364c61768a9fb4cadfecdac9ae98836e593827150200071a2d3d4a5460666f787f8587857d72604a3f2e1a0a00000e23384e63788da3b8cde2e4cfbaa48f7a654f3a2510000000000000000b161e212626211e160a00000000000001142636586d8398adc2d8edd9c4af9a846f5a452f1a00000000000000000000000004182a3b4b6074869cb1bfd0e0ccb8a7998499a6b7cbdfcebbaa9a84705f4d38281603000000000000000000000000000b20364b6074818282828281859bb0c5daccb8a7978282828281849aafc5dacebbaa98828281807c73615746321e09000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000e23384d63798da2c7d8eaecd6c1ac97816c57422c170213293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0000071520282a3535353535353535353330291e100000000000000000000000000000000f253a4f647a8fa4b1b1b1b1b19c87715c47321c0000000000000000000000000000021628384d63788b9fb4bfcdb9a89e948f8f959fa9bacdbeb49f8a77614c36251300111c3043546176879da9bacdc7b7a5998372604b402f1e0e00000000000b20354b60758aa7b9cce0f5ecd7c2ad97826d58422d18000000000000000000000000000000000d22374c62778ca1b7d9ebfeebd5c0ab96806b56412b16000b20354a6074899fb4c9deefdac5af9a85705544311d08000a1f33465871879cb1c6dcf1ddc7b29d88725645311d0900000f1f2d36434b515a626a707270686054433020100000060e24394e63798ea3b8cee3e9d7c6a48e79644f39240f0000000000000000030a0c11100b09020000000000000000172d42576c8297acc1d7ecdbc5b09b86705b46311b000000000000000000000000081f344759697e94a4b6caddd7c7b39e8976889db3c7d8d9c8b4a2917c675645321e0e00000000000000000000000000081d314455728897979797979ba3b4c8ddd5c5b19f97979797979aa2b4c8dcd8c8b2a098979795918475614b36210c000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000c22374c61778ca9bacee2edd7c2ad98826d58432d180013293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00031525333c3f4a4a4a4a4a4a4a4a4a48453b2e1e0c00000000000000000000000000000f253a4f647a8f9b9b9b9b9b9b9b86715c47321c0000000000000000000000000000000a2035495a6a8095a1b2bec6b9b4a9a4a5abb4bac7bdb1a0947e69594734180800001325364658647a8a9fb4bdcec3b3a195806a5e4c3c2b1a0a000000000c21364c61768ba1c5d6e8fbebd6c1ab96816c56412c17010000000000000000000000000000000b21364b60768baabbcee2f7ecd6c1ac97816c57422c17000d22374d62778ca8bacde1ecd7c1ac97826c5737271502000417293a596e8399aec3d8eedfcab59f8a75604b36200b0000010f182630353c484d555b5d5a524a4336251318191a1a21273750657a90a5bacfe5e1cdbaa88d78634d38230e000000000000000000000000060c0e100b08010000000003172939586d8398adc2d8eddbc6b09b86715b46311c000000000000000000000008182d3e4c6177899eb3c2d3e1cdbaa996806b8095a9bacee2d1c0b29d8775604b3c2b190500000000000000000000000002152737596e8499acacacacb0b4c1d1e4e3cebdb1acacacacacafb4c0d1e3e6cfbeb2adacacaaa3957f6a55392816030011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000b20354a60738a9fb4c9dfefdac5b09a85705b3d2c1a0613293e53687e93a8bdd3e8dfc9b49f8a745f4a351f000d20334350556060606060606060605e594c3b291602000000000000000000000000000e24394e63798586868686868686836e59432e1900000000000000000000000000000006192c3c4b60728398a0b3b8c5c9bfb9bac0c9c4b7b29f97826e614f3b2a180000000818293a4a5c687d929fb1bfc6bfb59f8d7c665a49382816020000000c22374c61778ca1b6cce1ffead5c0aa95806b55402b1600000000000000000000000000000000091e324657758a9fb4cadff4ecd7c2ac97826d57422d18000f243a4f64798fa4c6d7e9ead5bfaa95806a55402b15000000172c42576c8197acc1d6ece3cfbcab8d78624d38230d0000000008141c202b3538404547453d35302521232e2e2f2c35384555697e93a9bed3e8dec9b49f8975604b35200b0000000000000000040a0c1219212325201d15100e0d0e121e33465770859bb0c5daefdac5af9a85705a45301b00000000000000000000001325364a5c6d8297a7b9cce0d7c7b49f8a7762778b9fb4c8d8dfcab7a595806a5a4835201100000000000000000000000000152b40556a8095aac5c1c1c5c8d1dfefecdbcec5c2c1c1c1c1c5c8d1deeeecdccfc6c2c1c1c1b19c86715745321e090011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00071c30435471869cb1c6dcf1dec8b39e89735b4935210a13293e53687e93a8bdd3e8dfc9b49f8a745f4a351f0013283c50616a757575757575757575736a5945301c07000000000000000000000000000c21364a5b6371717171717171716e6453402b17000000000000000000000000000000000e1c304354607482939ea7b0b4bbc8c7bab4afa69d928173604b43321d0c000000000c1c2d3e4e5f6c8197a1afb1b1b1ab9e8978625645321e090000000c21364b61768ba0c5d5e7fbebd6c1ac96816c57412c17020000000000000000000000000000000c21364b61768baabbcee2f7ebd6c1ac96816c57412c170010253b50657a90a5bacfe5e9d4bea9947f69543f2a14000001162b41566b8096abc0d5ebecdac9a38e79634e39240e000000000001080e1920222a30323028201c2c35384343443d494e566073859bb1c6dbe7d4c4af9a85705544311d08000000000000030c171f21272c35383b3531272623222325303e4b61768a9fb4c9dfedd7c2ad98826d58432d1800000000000000000000071c304354647a8d9fb5c5d6e1cdbaa996816c596c8197aabbcee2d4c3b49f8a78624d3f2f190900000000000000000000000011263b51667b90a7b9c9c2c2c5c9d2dfefecddcfc6c3c2c2c2c2c5c8d1deefecddd0c7c3c2c2b49f8b76604b36210b0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000132536586d8298adc9d9ebe0ccb8a78d78634e39281613293e53687e93a8bdd3e8dfc9b49f8a745f4a351f00152a3f556a7f8a8a8a8a8a8a8a8a8a88735e48331e0900000000000000000000000000071a2d3d4a4e5c5c5c5c5c5c5c5c5953463624110000000000000000000000000000000001142636455660727e88949a9faaa4a4a99f9a93887d6d6055443124140000000000000f2031414b607483939a9b9b9b9b9b9b8574604b36210b0000000b20354b60748aa6b8cbe0f5edd7c2ad98826d58432d18000000000000000000000000000000000d22374d62778ca2c8d9ebfeead5c0ab95806b56402b160011263b50667b90a5bbd0e5e8d3bea9937e69543e2914000000162b40556b8095aac0d5eae4ceb9a48f79644f3a240f0000000000000000050b0d151b1d1b131a2c3d494e58595a5c5b6369748197a3b5c9dedfcbb7a6927d68533726140100000000000b171e2933373c3c494d504b44373b3938393b404d5c6a7f94aabbcee2e7d5c5a9947f6a543f2a15000000000000000000031729394a6072859babbccfe4d7c7b49f8a77624d62788b9fb4c8d9e1cdbaa998836e5d4b3726140100000000000000000000000b20364b6075899eabacadadb0b5c1d2e4e2cfbfb2aeadadadadb0b4c0d1e4e2d0bfb3aeadadadab8f7a644f3a250f0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000013283d53687d92abbccfe3e8d5c5aa947f6a57453227262a3e53687e93a8bdd3e8dfc9b49f8a745f4a351f00152a3f556a7f949f9f9f9f9f9f9f9d88735e48331e0900000000000000000000000000000f1f2d3639464646464646464643403628180700000000000000000000000000000000000818283845546069767f858a8d8f8f8d8a847e7568604b443727150600000000000001131d31455660727e84868686868686857e69543e2914000000081c30435473889eb3c8ddf3eed9c4ae99846f593b2b18050000000000000000000000000000000e24394e63798ea3b8cee3ffe8d3bea9937e69543e29140010253b50657a90a5bacfe5e9d4bfa9947f6a543f2a15000001162c41566b8196abc0d6ebebd9c8a38e79634e39240e0000000000000000000000000608050c2135495b636d6e6f7174787e8797a0b1c1d2d9cfbcb29d8875614b36210c00000000000b1b29333a474c51575b6365605554504e4d4e50545e667a8a9eb4c8d8eae0cbb8a68f7a654f3a25100000000000000000000a1e334657687d92a3b4c9dae2cdbaa996816c59485a6d8297aabbcee2d7c7b2a0907b655544311d0c0000000000000000000000091d324556677d8c949798989ba3b5c9dddbc6b2a098989898989aa2b4c8dddbc7b3a19998989898937e68533e29130011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000d22374d62778b9fb4cadff0ddc8b29d8875604b44373b3a4753687e93a8bdd3e8dfc9b49f8a745f4a351f00152a3f556a7f94aab5b5b5b5b5b39d88735e48331e090000000000000000000000000000010f1a212431313131313131312e2b24180a000000000000000000000000000000000000000a1a2836434a5761697076787a7a78756f6860564e4131271909000000000000000002152738455460696f7171717171717169614f3b2712000000011426365b70859bb0c5daf0f2ddc7b29d8772594834200b00000000000000000000000000000012273d52677c92a7bcd1e7fbe8d5c5a6917b66513c2611000f24394f64798ea4c5d6e8ead5c0aa95806b55402b16000002172d42576c8297acc1d7ece2cebbaa8d78624d38220d0000000000000000000000000000000e23384e637982838486898d949ca5b1beced2c9bcb49e917c675746321e090000000003172939464c5861676c72787a746e69656362636569717c899ea8b9cde6e8d6c6b39e8874604b35200b0000000000000000061a2c3d4b6176889db3c1d1e7d8c8b49f8a77624d3c4d63788b9fb4c9dae5cfbfb19c8673604b3a2a180400000000000000000000021528384d5f67797f828283859bb0c5dbd8c3ae988383838383849ab0c9dad9c3ae998383838383827d67523d28120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000b203448596e8399aec2d3e7dfcbb7a696806b605551505258616d8197acc1d6ecdfc9b49f8a745f4a351f00152a3f556a7f94aabfcacacac8b39d88735e48331e0900000000000000000000000000000000070c0e1c1c1c1c1c1c1c1c191711070000000000000000000000000000000000000000000a18253039464c545761636564636056534b4538311d1509000000000000000000000a1a2736434b535a5c5c5c5c5c5c5c544f42321f0c00000000182d43586d8298adc2d7edf4dfcab7a58c77624d37220e0000000000000000000000000000061a2c3d576c8196acc1d6ebf5e0ccb8a78d78634e38230e000d22374c62778ca7b9cce0edd7c2ad98826d58392917030005192b3c5a6f8499afc4d9eedfcab49f8a75604b35200b00000000000000000000000000000010253a50657a8f98999b9ea7a9b2b6c3cec8c1b5ab9f94806b5f4d39281603000000000a1e3346576170767c82878d9088837e7b7877787a7f86919ea7b8c6d7e9e1ccb9a895806a5544311d0800000000000000000a2135495b6b8096a6b7cbdfe2cebbaa97816c594835495b6e8398abbccfe3dec9b5a4937e695847331f1000000000000000000000000a1a30414d5b636a6c6d6d7c91a6c5d6ceb9a48f7a6d6d6d6d7a8fabbccfd0bba5907b6d6d6d6d6d675f4d3925100011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000005182b3b50667b90a4b6c9dae7d4c4b09e9580746a6665676d7682979fb1c5d9f4dfc9b49f8a745f4a351f00152a3f556a7f94aabfd4dfddc8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c29333639464b4e4f4f4d4b45383632281a13020000000000000000000000000a182630353e45464646464646463e3b322414020000000013293e53687e93a8c3d4e6f9e6d4c3a7917c67523c2b1905000000000000000000000000000c2135495b71869bb1c6dbf0f3dec8b39e8874604a35200b000b1f34475974899eb3c9def0dbc5b09b86705746331e08000b2035485a72879db2c7dcf1dcc7b29c87725544311d0800000000000000000000000000000010253a50657a8fa5afb1b3b9c5c7cad1c0b4b0a39b8c7f6b625041301b0b00000000000c21364c6176858b91979da5a79e9893908e8d8e90949ba3b3b8c5d5e4e0d0bfb39e8976614c37261401000000000000000a1a2f404e63798b9fb4c4d5e7d9c8b49f8b78624d3b2c3c4e63798c9fb5cadfe5d2c2b39e8977614c3e2d1b0700000000000000000000001223303d494e54575862788da7b9ccd2bda8927d68585861768b9fb5cad4bea9947f6958585858524d41301e0a0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000d20354a6072869cabbccfe3e2cdbcaf9e95867f7b7b7d828997a0b1bdcee0f4dfc9b49f8a745f4a351f00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000000000000000000000000000000000080e10181b180e0c0600000000080e10181b180e0c060000000000000000000000000000000b171e21283236383a3a38363228211e160a00000000000000000000000000000008141c20292f3131313131313129271f140600000000000e24394e63798ea5b7cadff7eed8c3ae99836e5a4835201000000000000000000000000004172a3a4e63788c9fb5cadff4ead8c8ae99836e5443301c070005182a3b5a6f849aafc4d9eedfc9b49f8a76614c362617141728384d62788da5b6cadfead8c8ad98826d583727150100000000000000000000000000000010253a50657a8fa5bac6c9ccd6dcddc8b4a29a91867b6a6150443323120000000000000b20354a6075899eabacb2b7b8b3ada9a5a3a2a3a5a9b0b5c1ccd5e3e1d0c2b3a1947f6a584733190900000000000000021527384c5e6f8499a9bacee2e2cebbaa97826d5a483521364a5b6e8399aec0d0e3e0ccb8a797816c5c4a362213000000000000000000000005121f2c35383f42485a74899eb3c9d6c1ac96816c57465772879db2c7d7c2ad98826d583743433d39302313010011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000071c304354657b8d9fb5c1d2e0dbccbcafa49c94919092979ea7b1becbd4e2f2dfc9b49f8a745f4a351f00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000000000003111c23252e302d23211a0f0103111c23252e302d23211a0f010000000000000000000000000000030a0c161e2123252523211e160b0903000000000000000000000000000000000001080b141a1c1c1c1c1c1c1c14120c020000000000000c21364a5b72879db2c9daecf4dfcab49f8b78624d3e2e1b0c0000000000000000000001131f3347586c8196abbccfe3f7e2cebbaa927d6853362513000000152a3f546a7f94a9c0d0e3e2cebbaa927c67544333292929334556697e93a9c3d4e6e2cebbaa927d68523d28130000000000000000000000000000000010253a50657a8fa5bac5c9cdd7dbdac5b09a857c72655d4f4333261605000000000000071c30435470859bb0c9c7caccc8c3bebab8b7b8babec6c9d2e0e1d7cdbfb3a4998372604b3a29170000000000000000091d314556667c90a1b3c7d8eadac9b49f8c78634d3c2b1a2d3d4f647a8fa2b3c7dce8d6c5b49f8c7a644e41301b0b0000000000000000000000010f1a21232a2b3c5b70859ab0c5dac5af9a85705a3b596e8399aec3d9c6b19c86715544312e28251e1305000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000001325364b5d6c8196a3b5c2d0e0daccc2b6b1aaa6a5a7acb3b9b7b2b7c4d4e7dfc9b49f8a745f4a351f00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000000000311212e373a43454238352c1f0f11212e373a43454238352c1f0f000000000000000000000000000000000003090c0e100f0e0b0902000000000000000000000000000000000000000000000000050707070707070700000000000000000000071a2d3d566b8095abbccfe3f7e2cebbaa96816b5c4a392a1c0f050000000000000009151d31414c61768a9eb4c9daecf4dfc9b49f8a76614c37210c0000000e23384d63788da2b4c7dcead8c8b19c8673604c46393f3a474c6074879db2c7ddecdac9b49f8b76614c37210c0000000000000000000000000000000010253a50657a8fa5aeb0b4bac7c6cfc8b39e898077686051443424140000000000000000132536576d8297acc2d7dfe0ded8d3d0cdcccdcfd4dbdedbd7cdc6bab4a1998676615443301c0c0000000000000005182b3b4b6074879cb2bfd0e5e3cfbcab98826d5b49351e0f22364a5c6f849aafc0d1e4e3cfbcab9a85705f4d39281603000000000000000000000000060c0e172c42576c8197acc1d6c8b39e88735948556b8095aac0d5c9b49f8a75604b362012100a0100000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000008182e3f4b6175859ba4b3bfcbd5dfd3cac7bfbbbabcc2bdb0a69da6b7cbdadac9b49f8a745f4a351f00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000000000000000000000000000011212f3f4b50585a574e493d2c1c212f3f4b50585a574e493d2c1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f23384e63798c9fb5cadfecebd9c8b49f8c7a6457473a2d2018100d0b0b0c0e12192731414e5f6e8398a8b9cde7f7e7d1c0ae98836e5847331f0a0000000c2035495a6f849aafbfd0e3dec9b5a495806c615755545558616d8197a5b7cbdfe3cfbcab98826d5847331f0a0000000000000000000000000000000010253a50657a8f97989b9fa9aeb2bfccb8a79e96897e6c625142321d0d0000000000000014293f54697e94a9bed3e9e5d7cdc9c4c7c9cdd7d6ccc9c6c7bab4a89f95837661584636261400000000000000000820344859697f94a4b6caddeddfcab59f8c79634e3c2c19071b2d3e50657a8fa2b4c8ddebd9c9b4a2927d675746321e0e00000000000000000000000000000013293e53687e93a8bdd3ccb8a78c77624d51677c91a6c7d7cebaa98e79634e39240e00000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000101e32465762778699a1b3b8c4caced9d2d2d2c9c4b8b39e96889db2c0c4c4c4b49f8a745f4a351f00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000000091c2f404c5d656d706d635b493a292f404c5d656d706d635b493a2917040000000000030d13152020202020202020201e1c160c000000030c12142020202020202020201f1c170d010000040e14162020202020202020201c1a140a0000000000000c2135495b6f8499aebecfe4f4e2cebbaa9c867561584a3d342b252221202123262f37444b5f687d92a0b2c6d6e9ebd9c9b4a28f7a644f3a29170400000006192c3c50657b90a1b3c5d5e6d2c2af9e9581766e6b696b6e7682979fb1c3d4e5d4c4b59f8c79644e3a291704000000000000000000000000040b0c0e0e23384d6378818283868a9099a1b4bac5b8b3a79e93806c604f3b2b180500000000000010263b50657b90a5c5d6e8d7c7bab4aeb1b4bac7c5b9b3b1aca99f968a80726158463a2918080000000000000008182e3e4c6277899eb4c3d3e6e2d0bfae99836e5b4a361e0e001023374b5d70859ab0c1d2e4e7d1c0b29d8875614b3c2c1906000000000000000000000000000010253a4f657a8fa4c3d4d5c5a5907b66504e63788da9bacdd8c7a7927c67523d271200000000000011263b50667b90a5bbd0e5f0e1ccb7a28c77624d37220d0000000000031628394759627683929ea6b0b4bbc8bdbcc2b5b1a69d9281798ea2afafafafaf9f8a745f4a351f00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000000000000000000000000000e23384c5e657b8385827963584733384c5e657b83858279635847331f0a00000000071520282a3535353535353535353330291e1000071420272a35353535353535353534312a1f1101081621292c353535353535353535322f271c0e0000000000061a2c3d4f647a8fa0b2c6d6e8ead8c8b6a49b8576635b4c483b3a37363536383c404c55606a7d8c9fb4bfcfe4f4e3cfbcab9a846f5c4b371c0c00000000000e23384b5d6f8399a7b8c8d8e0ccbcaf9f978a83807e80838a97a0b1bdcee2d7c7b7a697826d5c4a361c0c0000000000000000070b0f1317181f2223232035495a636c6c6e70757b83919fa9baccc5b9b39e937e69594834200b0000000000000d22374d62778ca7b8cce0cdbaa99f999c9fa9a1a1a79e9b97928a81776a6054463a291c0c00000000000000001325364b5c6d8298a8b9cce1f1dbc7b3a18e79644e3d2d1a0000081c2e3f50667b90a3b5c9ddefdfcbb7a695806b5a4935201100000000000000000000000000000c21364c61768ba5b7cad4bea9947f69544b60758a9fb4c9d5c0ab96806b56412b1601000000000011263b50667b90a5bbd0dbdbdbccb7a28c77624d37220d0000000000000b1b2a3b4758616f7d88939b9faaa7a8a7a5a49c94887d6c6f8495999a9a9a9a9a8a745f4a351f00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000006192c3c50657c8d989a978976614c373c50657c8d989a978976614c37210c000000031525333c3f4a4a4a4a4a4a4a4a4a48453b2e1e0c1425323b3f4a4a4a4a4a4a4a4a4a49463d2f1f0d1626343d414a4a4a4a4a4a4a4a4a4743392c1c0a00000000000f22374b5d6e8398a8b9cce1ebe6d3c2b4a39b86796c6259544f4c4b4b4c4e51565e66747f8d9faabbceddede4d2c2b49f8c79644e3e2e1b000000000000081c2f3f4d6277899eaabbc8d5daccbdb1a89f99959495999fa9b1becedbd5c7baa99d8776614c3d2d1a0000000000000008131c2025282c2a34373838352c3c494d5657595660666e7c8b9fb4c9d6ccbdb49e8a77624c37220d0000000000000b2034485973899eb3c8dec9b49f8b84878a8b8c8c8b8986827c766c62594b4336291c0c0000000000000000071c304354647a8d9fb5c6d6e8e3d0c0ae99846f5c4a361f0f0000001123384c5e71859bb0c2d2e5e7d4c4b49f8b78624d402f1909000000000000000000000000000a1e33465772879db2c7d7c2ad98826d58445571869bb0c6d9c4af99846f5a442f1a05000000000011263b50667b90a5bbc6c6c6c6c6b7a28c77624d37220d000000000000000d1d2a3a464c6068757e858a8f919292908d867f76675f617680848585858585836f5a442f1a00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000000000000000000000000c2135495b71869cabafa7957f6a5537495b71869cabafa7957f6a553727150100000d20334350556060606060606060605e594c3b29162032434f546060606060606060605e5a4d3d2a1721344451566060606060606060605c564a3927140000000000081b2e3f4d6278899eb3bdceddede0d1c1b4a49c8c82776f69656260606163666b727c86949fabbbc8d8eae5d6c5b5a496816c5c4a362010000000000000001120344859657b8c9faab8c5cfdfcec6bab4aeaaa9aaaeb4bac7cedfcfc4b7a99f8b7b645847331f0f00000000000008182530353a3e413b474c4e4d493c373538414238454b515e697f94abbccfe0cdb9a895806a553a2a1704000000000005182b3b5b70859ab0c5dacab49f8b7472747576767674716c6761574c473b3026180c00000000000000000417293a4a6072859babbccfe4f0dcc7b3a28f7a644f3e2d1b01000000091c2f4051667c91a4b5c9def0e2cdbaa999836e5e4c3727150100000000000000000000000003172939596e8398aebdc5c6b19b86715544586d8297adc2c6c9b29d87725d48321d08000000000011263b50667b90a5b1b1b1b1b1b1b1a28c77624d37220d00000000000000000d1b2933424e57616870767a7c7d7d7b78716a61584d58616b6f6f6f6f6f6f6f6554412c1800152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000000000000000000000000e23384d63788da4b5c5b09b857055444d63788da4b5c5b09b85705544311d08000013283c50616a757575757575757575736a5945301c273b4f6169757575757575757575746b5a46311c293d51626b757575757575757575716856432f1a000000000000102034485a677d929fb1bfd0ddecdfd1c2b6aa9f978b847e7a77767576787c8187919ca4b5bcc9d8e6e5d7c7b9a79c8675604b3e2d1a020000000000000005182b3b4c5d677d8c9ea6b2becacfd7cdc9c3c0bec0c3c9cdd7cfcabeb2a69d8b7c665d4b3a2a1701000000000000132536434a4f53575a596163635a4f4b3e2e2c2d273136404c61768b9fb4cadfd6c6b29c87725847331f0a000000000000172c42576c8197acc1d6cfbcab8e79645660616160565c57524b4639342a1c14080000000000000000000a1f334658687d92a3b5c9dadbdbd0bfaf9a846f5c4b37201000000000001120354a6073869cb1c2d2dbdbd7c7b3a1907b655544311d0c0000000000000000000000000011263c51667c919fadb0b1b19f8a75604b54697e94a9b1b1b0ab9c86715c47321c07000000000011263b50667b909b9b9b9b9b9b9b9b9b8c77624d37220d0000000000000000000b171f3139464b5357616467686766625a554c463a474c565a5a5a5a5a5a5a544737251100152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000013283d53687d92a8c2c9b49f8a75604b53687d92a8c2c9b49f8a75604b35200b0000152a3f556a7f8a8a8a8a8a8a8a8a8a88735e48331e2a3f54697f8a8a8a8a8a8a8a8a8a89745e49341f2c41566b808a8a8a8a8a8a8a8a8a86715c47321c00000000000005192b3c4d5f6c8197a1b3bfcee1e9e0d3c8bbb4aa9f99938f8c8b8a8b8d91969da5b1b6c2cfdae7e3d5c7baa99e897963564532200f0000000000000000000d1d2f3f4d5f677b8898a0aeb4bcc9c8cbd5cfd0cfd5ccc8c9bcb4aea098887b665e4c3f2e1c0c000000000000071c3043546064686c707377787872645c4b3a2917151d2033465772879cb1c7dcdecab6a48c76614c37210c00000000000014293e53697e93a8bed3d9c9a7927d67524b4c4c4b4538423d3633291f180d02000000000000000000061a2c3d4c6176889eb3c1c6c6c6c6c4b3a18f7a65503e2e1b020000000000071c304354677d92a4b5c5c6c6c6c6bfb19c8674604b3b2a18040000000000000000000000000f24384c5e6c8190989b9b9b9b8e78634e50657b909b9b9b9b998d7c66513c27110000000000000f253a4f647b868686868686868686868577614c37220c0000000000000000000004131b28323639464c4f525352504d483c36332933374044454545454544413729190700152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000000000000000000000001172c41566c8196abc1cdbaa98e78634e566c8196abc1cdbaa98e78634e39230e0000152a3f556a7f949f9f9f9f9f9f9f9d88735e48331e2a3f54697f949f9f9f9f9f9f9f9e89745e49341f2c41566b81969f9f9f9f9f9f9f9c86715c47321c000000000000000d1d30414b60738399a1b1bdcdd7e4e6d9cec8bbb4afa9a4a1a0a0a1a3a6abb2b6c3cad3e3e8e0d1c5b8a99f8b7b655b4a3828160100000000000000000000112130414d5d6577838f999fabaeb3b8c4bababac5b8b3aeab9f998f8377655d4c402f2010000000000000000b20354a60727a7d8185898c8d8d877b645847331f0b091729395b70859ab0c5dae6d3c3a48f7a654f3a251000000000000010253a50657a8fa5c4d5d5c0ab95806b564037373632282d2726262624201d150a05000000000000000c2135495b6b8196a6b1b1b1b1b1b1afa69a846f5d4b372010000000000000001325364b6073869ca7b0b1b1b1b1b1b1a4947e695947341f0b000000000000000000000000091d2f4051636c7b8285868686857b65504c61778586868686837b665e4d39240f0000000000000d22374b5d647171717171717171717171615947341f0b0000000000000000000000000b161e212933363a3c3d3d3b38352b211f171f212b2f30303030302f2c25190b0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000000000000000000000005182a3b5a6f849aafc4d7c7a7917c67525a6f849aafc4d7c7a7917c67523c27120000152a3f556a7f94aab5b5b5b5b5b39d88735e48331e2a3f54697f94a9b5b5b5b5b5b39e89745e49341f2c41566b8196abb5b5b5b5b5b19c87715c47321c0000000000000000131d314455607483979fb4bac6d0dde4e2d8cecac4bebab7b5b5b6b8bbc0c7cad3dee5e1d6ccc0b4a79e8b7c665d4b3d2d1a0a0000000000000000000000031223303f4b59626e7a838b93999ea6a3a4a5a4a3a79e99938b837a6e61594b3f2f22120200000000000000071c304354738893969a9ea7a3a59d8876614c3929180e192c3c5b70859bb0c5dae6d0bba6917b66513c26110000000000000c22374c61778ca6b8cbd9c4ae99846f59393b3b3b3b3b3b3b3b3b3b3936312720180d0000000000000e23384e63798b9b9b9b9b9b9b9b9b9a968778624d3f2e1c0200000000000000081d314455637989969a9b9b9b9b9b9b9b9b8977614c37220c0000000000000000000000000012223445515d656d7071717171655d4c47596171717171716e655d4d40301d0a000000000000081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c4c473b2a18040000000000000000000000000003090c171e2125272828262220190e0a040a0c161a1a1a1a1a1a1a181107000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000b1f34475973889eb3c8d5c0aa95806b555973889eb3c8d5c0aa95806b55402b160000152a3f556a7f94aabfcacacac8b39d88735e48331e2a3f54697f94a9becacacac9b39e89745e49341f2c41566b8196abc0cacacac6b19c87715c47321c0000000000000000011426374556607381929fa8b3bfc8d1dee1e2dfd9d3cfcccbcacbcdd0d6dcdfe5ded7cdc5b9b3a29a897b665e4c3f2e1f0f000000000000000000000000000512212f3b474c5d646e777e84888b8e8f908f8e8c88847e776e645d4c473a2e211204000000000000000000132536596e8399acafb3b8c3b6a6947f6a57463627232435495a73889db2c8dde7d1bca7927c67523d27120000000000000a1f33475873889eb3c8dcc7b29d87725751515151515151515151504e4b4538342b1d0d0000000000162b41566b80868686868686868686858177625a483521110000000000000000011426374a5b637781858686868686868686867f69543f2a1400000000000000000000000000041727343f4c50585b5c5c5c5c504c3f3a474c5c5c5c5c5b594f4b3f302212000000000000000010202e373a464646464646464646464637342a1d0c0000000000000000000000000000000000030a0c0f121312110d0b0500000000000105050505050505030000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e000000000000000000000000000d22374c62778ca6b8cbd9c3ae99846e5962778ca6b8cbd9c3ae99846e59442f190000152a3f556a7f94aabfd4dfddc8b39d88735e48331e2a3f54697f94a9bed4dfdec9b39e89745e49341f2c41566b8196abc0d6dfdcc6b19c87715c47321c000000000000000000091928384555606d7d8a99a1b0b4c1c9ccd6dadee1e9e1e0dfe0ece3dfddd8d2c9c6bab4a79e938478655d4c402f211101000000000000000000000000000003111d2a343f4b4f5962696e7376797a7b7a7976736f6962594f4b3f342a1c100300000000000000000000142a3f54697f94a9c0c8ccd4c4b39e8976615445383839414d62788da6b7cbdfead8c8a6917c67513c271200000000000004182a3a5a6f859aafc4dacab59f8b766666666666666666666666656460564c483b2b1d0d0000000014293d51626b717171717171717171706b6259483c2b190300000000000000000009192d3d4a59626c7071717171717171717169614f3b271200000000000000000000000000000817212f383b4346464646463b382f2a34374646464646443a372e211204000000000000000002101b22253131313131313131313131221f180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e3c2c19060000010200000000000000000f243a4f647a8fa4c4d5dbc6b19c86715c64798fa4c4d5dbc6b19c86715c47311c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c000000000000000000000a1a2837444b60687984909ba3adb4b9c6c5c9cdd6cfd0d1d0dacfcac8c3c2b5b1a89f96897e7362594b3f2f22120300000000000000000000000000000000000d181f2e373b484d535958616465656564615859544d483b372e1f180c0000000000000000000000000e24394e63798ea2b4c8dce0ccb8a797827260564f4d4e525f6c8197acc4d4e6e2cebbaa8f7a644f3a250f00000000000000172c41576c8196acc1d6cfbcab937e7b7b7b7b7b7b7b7b7b7b7b7b79756d6259483b2b18050000000e21344451565c5c5c5c5c5c5c5c5c5a564c483b2b1e0e00000000000000000000000f1f2d3b484d565b5c5c5c5c5c5c5c5c5c544f4332200c00000000000000000000000000000003111c23262d303131313126231c181f2231313131312e25231c11030000000000000000000000080d0f1c1c1c1c1c1c1c1c1c1c1c0c0b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735a49352013131517170f0d0700000000000f253a4f647a8fa4b9cfdcc6b19c87715c647a8fa4b9cfdcc6b19c87715c47321c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c00000000000000000000000a192731424e5b636f7b858f989ea8abb0b4b9c6babbbcbbc9bcb5b2aea9a49c948a8177696055483b2e2112040000000000000000000000000000000000000005101b222b34373e3a464c4e4f504f4e4c473a3e37342b221b1004000000000000000000000000000c21364a5b70859aafc1d2e5d5c5b19f97817469646364676f7d8d9fb5cadff2dfc9b49f8a76614b36210c0000000000000013283e53687d93a8bdd2dac9ae9c939090909090909090909090908e8a827762594834200b000000041626343d41464646464646464646454137342b1d0e000000000000000000000000010f1d2b343741454646464646464646463f3b322514030000000000000000000000000000000000090e10181b1c1c1c1c100e09040a0c1c1c1c1c1c19100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9dfcab49f8b78634d413028282a2c2c24211a0f010000000f253a4f647a8fa4b9cfdcc6b19c87715c647a8fa4b9cfdcc6b19c87715c47321c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c00000000000000000000000009151d313c494d5e66707a828991969b9ea8a4a5a6a6a6a5ab9f9d99948e867f776c61594b44372b1d100200000000000000000000000000000000000000000000080d18202229293336393a3b3a3937332a292220190d08000000000000000000000000000000071a2d3d51667c91a3b5c7d7e3cebeb19f97877f7a78797d84929fabbccfe3e6d1c1af9a846f5746321e0a0000000000000010253a4f657a8fa4c4d4e7cbbbaea9a6a6a6a6a6a6a6a6a6a6a6a5a99f988877624d37220d00000000081621292b313131313131313131302c2220180d0000000000000000000000000000000d1820222c303131313131313131312a2720140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e2cebbaa98836e5f4d413d3d3f414139362d200f0000000f253a4f647a8fa4b9cfdcc6b19c87715c647a8fa4b9cfdcc6b19c87715c47321c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c0000000000000000000000000001131e2c35404c515d656d757b8085898c8f909191908f8e8b88837e79716a61584c473b3126190d0000000000000000000000000000000000000000000000000000050b0d14171f212425262524211f17140d0b050000000000000000000000000000000000000f20354b6073859ba9bacde1dccebdb1a59c948f8d8e9299a1b5bcc9daead8c8b5a3917c675239291603000000000000000c21364c61768ba6b7cbdfd9cbc1bebbbbbbbbbbbbbbbbbbbbbbc7bab4a697816c57422d170200000000040e14161c1c1c1c1c1c1c1c1c1b160d0b050000000000000000000000000000000000050b0d171b1c1c1c1c1c1c1c1c1c14120c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f1120202020202020202020202020202020202020202020202020202020200e0c060000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ead8c8b2a0927d675f5552535556574e4a3e2d1a0700000f253a4f647a8fa4b9cfdcc6b19c87715c647a8fa4b9cfdcc6b19c87715c47321c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c0000000000000000000000000000000e19212f383f4b4f5660666b707477797a7b7c7b7a7876736e69635b544c473a342a1d140900000000000000000000000000000000000000000000000000000000000000040a0c0f1010100f0c0a0400000000000000000000000000000000000000000000081c30435463798b9fb4bbcfd9dbcec3b6b2a9a4a2a3a7aeb3bfcfdae6d9cebbaa9b8572604a35200b00000000000000000a1f33465873889db2c8dde9ddd6d3d0d0d0d0d0d0d0d0d0d0d0d7cdc4b29d88735d48331e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c232635353535353535353535353535353535353535353535353535353535352320190e00000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9f6e6cfbeb49f8b7d706a67686a6c6c645c4a36210d00000f253a4f647a8fa4b9cfdbc6b19c87715c647a8fa4b9cfdbc6b19c87715c47321c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c0000000000000000000000000000000006121c242e3738454b51565b596164656667666563605659544e4a3d37332a1f180c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636495b697e939db4bcc9d3ded3cac7beb9b8b9bcc4c7d0e3dfd4c8bbb49f8c7a645443301c0700000000000000000417293a5a6f8499afc4d9dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbcab49f8a755f4a35200a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a202020202020202020202020202020202020202020202020202020202020202020202020202017150f05000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a38352c1e0e000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9feede2cebaa99f91857f7d7d7f81817a644e39240f00000f253a4f647a8fa4b9c6c6c6b19c87715c647a8fa4b9c6c6c6b19c87715c47321c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c00000000000000000000000000000000000009111c232832363c413b474c4f50515151504e4b45383f39362d211f170c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182c3d4f606a7f949fabb6c2cad3dbdcd4cfcdced2d9dbddd4cbc3b7aa9f927d685c4b36251300000000000000000000162c41566b8196abc0c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6bbaa8a75604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f35353535353535353535353535353535353535353535353535353535353535353535353535352d2a221709000000091c2f404c5060606060606060606060606060606060606060606060606060606060605e493c2c19060000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9f0e0d3cac7bab4a39b94929294969686715c39291603000f253a4f647a8fa4b1b1b1b1b19c87715c647a8fa4b1b1b1b1b19c87715c47321c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c0000000000000000000000000000000000000000080a161e21262b2a34373a3b3c3c3b3a393632282924211a0f0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f324250616a7f8c9ca4b1b6c2c5c9ced8d0d1d0d5cbc8c4b7b3a59d8c7e695f4e3e2e18080000000000000000000013283d52687d92a7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b19f8a75604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c29334a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a423e3527170500000f23384c5e667575757575757575757575757575757575757575757575757575757575705a4935200c0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e7d3c2b6b1b6c1b4b0aaa7a8aaab9f89745746321e0a000f253a4f647a8f9b9b9b9b9b9b9b86715c647a8f9b9b9b9b9b9b9b86715c47321c0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c0000000000000000000000000000000000000000000002090b1116181f2224252627262523211e16140e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142433435061697a86939ca4abb0b4bbc8bbbcbbc4b8b3aea69d94877b69604f4131201000000000000000000000000f243a4f64798f9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8a75604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a465e6060606060606060606060606060606060606060606060606060606060606060606060606057524535220f000011263b50667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78634d38230e0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4ebd9c9b6a49ca4b6c6c5bfbcbdbfbaa98b76614b36210c000e24394e63798586868686868686826e5963798586868686868686836e59432e190000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c000000000000000000000000000000000000000000000000000000040b0c0f10111211100e0b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006152533434f5c64747e8790969b9faaa4a6a6a6a4a69d9892887f76645d4f423223130200000000000000000000000c21364b617585868686868686868686868686868686868686868686868685715c46311c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465870757575757575757575757575757575757575757575757575757575757575757575757575756c63523e2a15000011263b50667b909f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8d78634d38230e0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e3cfbcab9c879ca8b9ccd4d2d2d7c7a28d78634d38230e000c21364a5b6371717171717171716e64535b6371717171717171716e6453402b170000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071525323e4b566069737b81868a8d8f9091908f8c88837d756a61574b3f32241405000000000000000000000000091e32465761717171717171717171717171717171717171717171717171716756432e1a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816c57422d17020011263b50667b90a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4dacab49f8c788a9eb3bbced8e3cfb9a48f7a644f3a250f00071a2d3d4a4e5c5c5c5c5c5c5c5c5953464a4e5c5c5c5c5c5c5c5c5953463624110000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c0000000002090b0d0d0d0d0d0d0d0d0b0801000000000000000000000000000000000000000000000000000000000000000000000002090b101414100b0902000000000000000002090b101414100b090200000000000000000002090b101414100b09020000000000000000000000000000000000000000000714202e38454b5460656c7075787a7b7c7b7977736e6760564c46392e2014060000000000000000000000000003162839464b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c564939271300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f97826c57422d17020011263b50667b90a5bbcacacacacacacacacacacacacacacacacacacacacacacab8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfc4c4c4b19c87727d919db4bbc8cfdabba6917c66513c271100000f1f2d36394646464646464646434036363946464646464646464340362818070000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c0000000a151d202222222222222222201d15090000000000000000000000000000000000000000000000000000000000000000000a151d2026292926201d150a0000000000000a151d2026292926201d150a000000000000000a151d2026292926201d150a00000000000000000000000000000000000000000002101a273136434a50565660636466676664625959524b453833291b10020000000000000000000000000000000b1b2832364646464646464646464646464646464646464646464646464643392b1b0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ac97826c57422d17020011263b50667b90a5bbd0dfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aaafafafafad98826d6a7f939faab5bcc9c3a8937d68533e28130000010f1a212431313131313131312e2b24212431313131313131312e2b24180a000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c00000a1a27313637373737373737373531271909000000030a0c1014151514120c0b0400000000000000000000000000000005131a2832363b3e3e3b3631271a1305000005131a2832363b3e3e3b3631271a130500000005131a2832363b3e3e3b3631271a13050000000000000000000000000000000000000000000a151d2530353b38454b4e4f5151514f4c483b3d3632281e170b0000000000000000000000000000000000000b161e21313131313131313131313131313131313131313131313131312e271b0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba1c4d4cacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac1ac97826c57422d17020011263b50667b90a5bbd0e5f4f4efe1d6cfcccbcbcbcbcbcbcbcbcbcbcbcbcbcbb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f949a9a9a9a9a98907c66616a7e8b999faba7a7a5957f6a55402a1500000000070c0e1c1c1c1c1c1c1c1c1917110c0e1c1c1c1c1c1c1c1c1917110700000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c0002152738454b4d4d4d4d4d4d4d4d4b44372715050b0d161e2125292a2b2927221f180c0a0100000000000000000000000715233138454b505353504b4538302315070715233138454b505353504b453830231507000715233138454b505353504b4538302315070000000000000000000000000000000000000000000208131c2025283236383a3b3c3b3a37342a27201d150a03000000000000000000000000000000000000000003090c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1a130a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba6b7cbdfdfdfdfdfdfdfdfe5dedcd9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d7c1ac97826c57422d17020011263b50667b90a5bbd0e5faf3e1d1c4bab7b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000012273d52677d848585858584837c675e4f606979848b9092928e877b65503b2510000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e49341f2c41566b8196abc0d6ebdcc6b19c87715c47321c00091d314556606262626262626262605544311d1820222932363b3e40403e3c37342a251d130500000000000000000001152532414d56606569696560564d41322515152532414d56606569696560564d4132251502152532414d56606569696560564d41322515020000000000000000000000000000000000000000000000070b10161e21232526272624221f18120b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32465773889db2c3d3e6f6fff4fff0e0d3c9c6c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c1ac97826c57422d17020011263b50667b90a5bbd0e5fae9d6c4b3a6a1a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a08d78634d38230e00000000000000000000000000000000000000000000000000000000000000001025394d5f676f6f6f6f6f6f6d675f4d424e5b636f777b7d7c7973655d4b37230e000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e2a3f54697f94a9bed4e9dec9b39e89745e3a2a182c41566b8196abc0d6ebdcc6b19c87715c47321c000b20364b6074787777777777777873604b35232b343739464b5053555553514c473b393020190d00000000000000000f1f32434f5f67757b7e7e7b74675f4f4332201f32434f5f67757b7e7e7b74675f4f433220101f32434f5f67757b7e7e7b74675f4f43322010000000000000000000000000000000000000000000000000000002090b0e0f1112110f0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1f2020202020202020201f170b0801000000000000000000000000000000020c12141d2020202020202020202020110f090000000003162839546a7f94a4b6c8d8eafefff9e5d3c2b6b1aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeac97826c57422d17020011263b50667b90a5bbd0e5fae3cfbaa6958c8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b78634d38230e00000000000000000000000000000000000000000000000000000000000000000a1e30414d525a5a5a5a5a5a58514d41313d4a4e59616668676460544b3f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e4833182a3f546a7f94a9bfd4e9dec9b49f89745847331f2536576c8196acc1d6ebdbc6b09b86715b46311c000e24394e63798c8c8c8c8c8c8c8c7a644f3a383b484d53576165696a6a69676159524d41342b1d0f010000000000071a2d3d4f616a7d8890939390887d6a614f3e2d2d3d4f616a7d8890939390887d6a614f3e2d1b2d3d4f616a7d8890939390887d6a614f3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212335353535353535353535342c201d15090000000000000000000000000006141f262933353535353535353535353526231c12040000000b21364b6075869caabbcee2effff3dec9b6a49c99999999999999999999999999999999999999999997826c57422d17020011263b50667b90a5bbd0e5f6e1ccb7a18c77767676767676767676767676767676767675604a35200b000000000000000000000000000000000000000000000000000000000000000001132330393d454545454545433c3930232d363a474c5152524f4b43362f211100000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e41342b2c3c566b8196abc0d6ebe1cdbaa98c77614c392b3043546e8398adc3d8edd9c4af9a846f5a452f1a000d22374d62778caba2a2a2a2a2927d68524b4d535962696f767a7e7f807e7c7770675f4d483b2c1f0f00000000000c21364a5b6a7f929da6a8a8a69d927f6a5c4a36364a5b6a7f929da6a8a8a69d927f6a5c4a3622364a5b6a7f929da6a8a8a69d927f6a5c4a36220d000000000000000000000000000000000000000001080b101314110b09030000000000000000000000000000000000000000000000080e102020202020202020201f1c160e0c0600000000000000000000000000000000000000000000000f1f2c35384a4a4a4a4a4a4a4a4a4a494235312719090000000000000000000000061424323b3e484a4a4a4a4a4a4a4a4a4a4a3b382f2212000000091e324556647a8c9fb4c1d1e4f4f1dcc6b19c86848484848484848484848484848484848484848484847e68533e2913000011263b50667b90a5bbd0e5f5e0cbb6a08b766161616161616161616161616161616161605443301c0700000000000000000000000000000000000000000000000000000000000000000005131e252730303030302f2e27241d121a212a34373b3d3d3935302618110300000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735f4d483b3c495a6f849aafc4daefe9d7c7a7927d6757483c3f4a6073879db2c7ddedd8c3ad98836e58432e19000b21364b60768b9fb5b7b7b7b09b85706360636870777e848a9093959593918b857c706259493d2c1a0a000000000e24394e63798c9fb3b8c4c4b7b39f8c7a644e39394e63798c9fb3b8c4c4b7b39f8c7a644e3924394e63798c9fb3b8c4c4b7b39f8c7a644e39240f0000000000000000000000000000000000000009151d2025292926211e160a000000000000000000000000000000000000000003111c232635353535353535353534312b2320190e000000000000000000000000000000000000000000061a2c3d494e5f6060606060606060605f574b443727150100000000000000000000132432424f535d6060606060606060606060504c402f1c090000031628384b5c6a8095a3b4c6d7e9f1dcc7b29c87766f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f68604e3b2611000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a433625130000000000000000000000000000000000000000000000000000000000000000000000010a10121a1a1a1a1a1a1812100a00070c181f2226282724201c1408000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9dfcab49f8c7d6d625957575a63788c9fb4cadfe3dcdac7b19c8675625a56575d667c91a5b7cadfead8c8aa95806b55402b1600091e32455671869cb1c6ccc9b5a398827976787e858b939a9fa9a8aaaaa8ab9f9b918578635b4938281603000000172d42576c8197abbccbd5d4cbbcab97826d574242576c8297abbccbd5d4cbbcab97826d57422d42576c8297abbccbd5d4cbbcab97826d57422d1800000000000000000000000000000000000412192731353a3e3e3b3632281a140600000000000000000000000000000000000011212f383b4a4a4a4a4a4a4a4a4a49474138352c1e1406000000000000000000000000000000000000000c2135495b6374757575757575757575746c605544311d120000000000000000000c1c31424f6069727575757575757575757575665e4c38230f0000000a1a2e3e4b6073859ba8b9cde1eddfcab6a597816c5e59595959595959595959595959595959595959534e42311f0b000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b363636363636363636363636363636353025180800000000000000000000000000000000000000000000000000000000000000000000000000000005050505050503000000000000040a0c1113120f0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e2cebbaa9f9282776f6c6c6f78869caabbcee2d0c7c4c7b6a49a84786f6c6c707b899eb3c3d4e6e2cebbaa907b66503b26110002162838576c8197acc2d2d2c1b2a0988e8b8d939a9fabafb4bac7bfbfc9bcb5b0a39b8779635645321e0c0000001c31475c71869cb1c9d9e7e7d9c9b19c86715c47475c71869cb1c9d9e7e7d9c9b19c86715c4732475c71869cb1c9d9e7e7d9c9b19c86715c47321c000000000000000000000000000000000513222f37444b505354514b45383124160800000000000000000000000000000000081c2f3f4c505f60606060606060605e5c564d493c322414050000000000000000000000000000000000000e23384e63788b8a8a8a8a8a8a8a8a8a898173604b402f19090000000000000004172a3a4e60697e878a8a8a8a8a8a8a8a8a8a8a7b66503b261100000000101d31445563788a9eb4bfd0e2e6d3c3b19f917c66594744444444444444444444444444444444443e3b31241402000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362121212121212121212121212121201c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ebd9c8bbb4a0988b848181848b9ca4b5c8d9d0c0b4afb4c0b4a29a8b848181858f9ea7b8cce1f0dfc9b49f8a76614c36210c000010253b50657b90a4b5c9decfbeb2ada3a0a2a8afb4bcc9c9ced8d4d5dacfcac1b4a69c8675604b3a29170400001d32475d72879cb2c7dcf0f0ddc7b29d88725d48475d72879cb2c7dcf0f0ddc7b29d88725d4833475d72879cb2c7dcf0f0ddc7b29d87725d48331d00000000000000000000000000000000132331404c55606568696660564e42342616030000000000000000000000000000000e23384c5d6575757575757575757574716b635a4f423223130000000000000000000000000000000000000c2135495b6a8095a49f9f9f9f9f9fa89e97816d5e4c372715020000000000000a1f334758687e929d9fab9f9f9f9f9f9fa899836e5e4c38230f0000000001152737495a687e93a1b3c4d5e7e1cebdb39e8877614c42312f2f2f2f2f2f2f2f2f2f2f2f2f2f2f29261f140600000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0c0c0c0c0c0c0c0c0c0c0c0c0b0700000000000000010a10121717171717171717120b070000000000000000000000060c0e1617171717171717100e08000000000000000000000000000000000000000000070b1d20202020202020201f0b090300000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e3d6ccc8beb2aa9f9a96969a9faab5c2d2d1c1b4a29aa2b4c0b4a99f9996979ba3b3b8c5d5e7e0cebdad98826d5746331e0a00000e23374b5d71869cb1bdcee0cfc6c2b8b5b8bdc5cacfd9cfcac6c3c6c9d2dfd1c4b6a496806b5846331f0a00001a30455a6f849aafc2d2deded2c2af9a85705a45455a6f849aafc2d2deded2c2af9a85705a4530455a6f849aafc2d2deded2c2af9a84705a45301b0000000000000000000000000000000d1d31424e5e66747a7e7e7b756960514434221100000000000000000000000000000010263b50657b8c8a8a8a8a8a8a8a8a8986807869604f42311e0e0000000000000000000000000000000000061a2c3d4b6074869cb1beb5b5b5c6b9b49f907b665544311d0c0000000000061a2c3d4c6176899eb2b5bcb5b5b5b5c2b49e8a78624d402f1c09000000000009192c3c4e606e8399a6b8cbe0ebe0cbb8a699836e604e3c2c191a1a1a1a1a1a1a1a1a1a1a1a1a13110b020000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000005121d25272d2d2d2d2d2d2d2c27201c130800000000000000010f1a21232b2d2d2d2d2d2d2d25231c1103000000000000000000000000000000000008131c2032353535353535353534211e160a000000000000000000000000000000000000000000152a3f556a7f94aabfd4e8d6c5b8b3abb0bbb4afacacafb4bbc8d2d8c8b4a39a859aa4b6c4bab4afabacb0b4c1ccd5e3e1d1c2b19f8e7a644f392917030000081c2f3f51667c909fb1bdcbd5ded8cdcbcdd3d9d1c8c9bcb4b1aeb0b5c1cdd7d3c2b49e8a76614c36210c000013293e53687e93a4b5c2c9c9c2b5a4937e69533e3e53687e93a4b5c2c9c9c2b5a4937e69533e293e53687e93a4b5c2c9c9c2b5a4937e69533e2914000000000000000000000000000005192b3c4e60687c878f939390897e6b6251402f1c0900000000000000000000000000000e23384c5d687e939f9f9f9f9f9fa89e9c968b7e69604e3c2c190900000000000000000000000000000000000f1d324556657b8fa0b1c5d5cad6ccbdb19c8674604b3a2a180400000000092136495b6c8196a7b8cacfdacadac9b5a4947f695948342212000000000000000e1e31424c6177889eb3bdcee1e7d5c4b3a1937e685b49372715010404040404040404040404000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000001122330393c42424242424242413d35302518080000000000010f1f2c363940424242424242423a372e2111000000000000000000000000000000000818253035474a4a4a4a4a4a4a4a493632281a0a0000000000000000000000000000000000000000152a3f556a7f94aabfd4daccb8a79e959eb4bbc8c1c1c4caced8d7cdbbaa9b8576869ca6b5c2c9c4c1c1c5c8d1e0dfd6ccc0b4a497816c5c4a361b0b000000001124384c5e6c81979fb3b8c5c9cdd7d5cbc8c3c1b4b0ab9f9b999ba3b4bac7d7cdb9a8937e695437261401000b20364b6074869ca4b0b3b3b0a39b8674604b36364b6074869ca4b0b3b3b0a39b8674604b3620364b6074869ca4b0b3b3b0a39b8674604b36200b00000000000000000000000000000b2034485a687e8d9da5a8a9a79e93806b5e4c38230f0000000000000000000000000000081c2f3f4e606c8197a2b3c2b5c6b9b3b1a99f927e685b493727150100000000000000000000000000000000021528384b5d6d8297a7b8cce0e8decab6a4937e695847331f0f00000009192f404e63798b9fb4c5d6e3ece3cfbcab9c8673604b3b2b19040000000000000000141f344759667c909fb1c3d3e6e2d0bfb49e8a79635544311d100000000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000a1d30414d525757575757575756524a4336251300000000000f1f2c3d494e5657575757575757504b3f2e1c08000000000000000000000000000000132536434a5d60606060606060605e4b453828160300000000000000000000000000000000000000152a3f556a7f94aabfc4c4c9b39e8980939faab5c1c9cdd7d6ccc7bab49f8c7a6478889ca4b4bac7c9cdd7cfd7cdc9c6b9b4a29a8675604b3e2d1b0000000000091c2f404b607381939ea6afb4bac7c5b8b3aea8a39b938b868486909fa9bacdd7c6af99846f5544311d0800091d314556627886939b9e9e9b93857862564531314556627886939b9e9e9b938578625645311d314556627886939b9e9e9b938578625645311d0900000000000000000000000000000d22384d62788a9fabb7c3c5b8b39e907b66503b2611000000000000000000000000000000112131424b6073849aa4b6c5d5ccc9c7bab49e8a79635544311d1000000000000000000000000000000000000a1a2e3f4c6176889eb3c0d1e5e5d3c2b39e8977614c3d2d1a0700021527374c5e6f849aaabbcee3f3e8d5c5b59f8d7a655544311d0d00000000000000000004182a3b4c5e6c8197a4b6c8d8eae1cdb9a89b8573604b3e2e1b0b00000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000001025394d5f676c6c6c6c6c6c6c6c67605443301c0e000000061a2c3d495b636b6c6c6c6c6c6c6c655d4b37230e0000000000000000000000000000071c3043546072757575757575757574605645321e0900000000000000000000000000000000000000152a3f556a7f94aaafafafafab98826d7e8c9ba3aeb4bac7c6b9b4a99f937e685c637986959fa9afb4bac6bac7bab4afa89e958476615645322010000000000000121d314455606d7e8893999fa9a3a2a69e99938c857e77716e717b8b9fb4c5c5c5b39e8975604b35200b0002152738485a62747e858989857e74625a4838272738485a62747e858989857e74625a483827152738485a62747e858989857e74625a48382715020000000000000000000000000000152b40556a8095a9bac9d4d5ccbcae99846f59442f1a04000000000000000000000000000003141d3144556176869ca7b8c8d8ded7cdb9a89b8573604b3e2e1b0b0000000000000000000000000000000000111f334758687d92a2b4c7d7eae0ccb9a797816c5c4a36211200081d314455667c90a1b3c8d8eaf6e0ccb8a797826d5d4b37271500000000000000000000000c1d2f404b6175869caabbcee2e9d7c6b4a3957f6a5c4a39281603000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000012273c52677d81828282828282817d72604a3c2c190600000c2135495b637980828282828282817b65503a251000000000000000000000000000000b20354a6072878a8a8a8a8a8a8a8a8975604b36210e00000000000000000000000000000000000000152a3f556a7f949a9a9a9a9a988d7b65697a8691999fa9a5a5a89e978b7e68604e5b6375808a939a9fa8a4a5a4a99f9a948980746158473828160200000000000001152737444b6068767e848a8c8d8d8c88847d7770696259595d6c8196abb0b0b0b0a88d77624d38220d00000a1a2b3c4856606970747470696056483c2b1a1a2b3c4856606970747470696056483c2b1a0a1a2b3c4856606970747470696056483c2b1a0a0000000000000000000000000000051a2f455a6f849aafc7d7e7e8dec8b39e88735e49341e090000000000000000000000000000000115273746586378899eaabbcee2e9d7c6b5a395806a5c4b392917030000000000000000000000000000000004172a3a4e5f6f849aa9bacde2e8d6c5b49f8c79644e40301a0a182a3a4b6074869cb1bfd0e6f6e6d1c1b39e8977614c3f2e1909000000000000000000000000121e324657647a8c9fb4c1d1e4e4d1c1b49f8c7a645746321e12000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000e23394e63798a9797979797979692816c5a4935200a00071b2e3e4e637989959797979797978976614c36210c000000000000000000000000000417293a50657b90a59f9f9f9f9f9fa7927d67523c2c190600000000000000000000000000000000000012273d52677d848585858584837c665d5c64737c838a8e8f8f8e89827968604e424957606a767e84898d8f908e8d8a847f776a6056473a2a1a0a000000000000000009192731424e5761696f7476787877736e686259534c473f50657a8f9a9a9a9a9a9a8e79644e39240f0000000e1e2b38454b545b5e5e5b534b45382b1d0d0e1e2b38454b545b5e5e5b534b45382b1d0d000e1e2b38454b545b5e5e5b534b45382b1d0d000000000000000000000000000000061b30455b70859ab0c5daeef1dfc9b49f8a745f4a351f0a000000000000000000000000000000000919293a495a657b8c9fb4bdcddde4d1c1b49f8c7a645746331e1200000000000000000000000000000000000c1c31414e63798b9fb4c2d3e5e3cfbcab9a84705f4d3828161f334758697e94a4b6cadeeeebd9c8b4a3937e68584733211000000000000000000000000000031628394a5c6a7f95a3b4c6d7e9e2cebbaa9c8675614b402f1d0c0000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000c2136495b6d8298aaacacacacab9f8c78634d382816030d22364a5c70849aa7acacacaca6947f6a5846331f0a000000000000000000000000000a1f3346586d8298adc3b5b5b5b5c5af9a85705a493520090000000000000000000000000000000000001025394d5f676f6f6f6f6f6f6e665e4c4a5560666e75797a7a78746d635b4e423139454b5861696f74787a7a7977756f6961584b45382a1c0c0000000000000000000009151d3139464b535460616363615859534d483b3734374d627784858585858585847a644e39240f000000000e1a2832363e464949463e3631271a0d00000e1a2832363e464949463e3631271a0d0000000e1a2832363e464949463e3631271a0d0000000000000000000000000000000003182e43586d8298adc0d1deded3c3b19c87725c47321d0700000000000000000000000000000000000c1c2c3c4b5d687e939eb0bfd0e0e2cebbaa9d8775614b40301d0d0000000000000000000000000000000000132135495b6a7f95a4b6cadeebd9c9b4a2917c675645321e2d3d4c6177899eb3c2d3e5f7e2cebbaa9b8572604a3a2a180300000000000000000000000000000b1b2e3e4b6073859ba8b9cde1ead8c8b6a497816c5e4c3b2a180400000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000000000000000000000000000000000000061a2c3d4d63788b9fb4c7c1c1bcab96816b5645321e09192c3c4f647a8fa2b4c5c1c3b39d8875604b3a291704000000000000000000000000000c21364c61768a9fb4c9cacacacacab59f8c78634d3726140100000000000000000000000000000000000a1e30414d525a5a5a5a5a5a58504c4037444b5156606365656360544e493d312428323a474c54546062646564626056544c473a32281a0c00000000000000000000000001141b29333636434a4c4e4d4c473a3e37342b2220344859627070707070707070645c4a36220d00000000000a151d20293034343029201d150a000000000a151d20293034343029201d150a00000000000a151d20293034343029201d150a00000000000000000000000000000000000011273c51667c91a2b4c1c8c9c3b6a595806b55402b16000000000000000000000000000000000000000e1e2e3f4e606c8196a1b3c2d2e3d9c8b6a597826d5f4d3b2b180800000000000000000000000000000000061a2c3d4b6074869cb1becee3e7d1c0b29d8775604b3b2b364a5b6c8197a7b9cce0f0e7d4c4b49f8c7a645443301c0c00000000000000000000000000000000101d31445563788a9eb4bfd0e2e6d3c3b19f907c665947341f1300000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000000000000000000000000000000000000000f2035495a6d8297a9bacedac9b39e8975604b3621102035495a6e8398aec0d1cab6a5937e685745321c0c00000000000000000000000000071b2d3e53697e93a9bacde1dfdfe3cfbcab95806b5544311d08000000000000000000000000000000000001132330393d454545454545433b382f26313538454b4e50504e4b4336352c1f13161e29333736434b4d4f504f4d4b453837332a1d150a0000000000000000000000000000000b171e2125303537383837332a282220180d182b3b484d5b5b5b5b5b5b5b5b4e4a3e2d1b0700000000000002090b141b1f1f1b140b090200000000000002090b141b1f1f1b140b09020000000000000002090b141b1f1f1b140b0902000000000000000000000000000000000000000b20354a6072849aa3afb3b4b0a59c8776614c36210c0000000000000000000000000000000000000000112131424b60728399a4b5c5d5e5d3c3b19f917c67594836251300000000000000000000000000000000000e1d314556657b8f9fb1c5d5e7dfcab7a5947f6a594834404e63798c9fb4c5d6e8f5dfcbb7a696816c5c4a362513000000000000000000000000000000000001142637495a687e93a1b3c4d5e7e1cebdb39e8877614c42311e0e000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000006192c3c4d62788b9fb4c7d7ccb8a7927d68533e2e1b2a3a4d63788c9fb4cad2c2b29d8774604b39281600000000000000000000000000000d22364a5c71869bb1c7d7e9f4f0ecdac9b39d8874604b35200d00000000000000000000000000000000000005131e252730303030302f2e26231c141d20273136393a3a39353026211a0e00030c171f21263035383a3b3938363228221f180c020000000000000000000000000000000000030a0c131c20212323221f18130d0b05000d1d2b3437454545454545454539362d2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354617685929a9e9e9b948779635846331f0a000000000000000000000000000000000000000003131c3043546175869ca7b8c7d8e1cebeb39e8977625443301c0f00000000000000000000000000000000021527384b5d6d8297a6b8cbe0e6d4c3b49e8a77624d3e4c5e6f849aaabbcee3f3e5d0c0b39d8876614c3e2d180800000000000000000000000000000000000009192c3c4e606e8399a6b8cbe0ebe0cbb8a699836e604e3c2c19090000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000e2035485a6c8197a9bacdd6c5b09b86715c4b37223347586c8197abbccfc9b5a4927d675544311b0a00000000000000000000000000021628384e64798ea3b5c9e5e3dfdadddfcbb7a6907b66513b2a1805000000000000000000000000000000000000010a10121a1a1a1a1a1a19110f0901080b151d2024252523201c14080600000000040a0c141c202325252422201d150c0a040000000000000000000000000000000000000000000000070b0c0e0e0c0a040000000000000d182022303030303030303024221b10020000000000000000000000000000000000000000000000000000000000000000000000000000050b0d111415161513100c0a0400000000000000000000000000000000000000000000000000132536475861737d858989867f75635b493a2917040000000000000000000000000000000000000000000114263646576278899ea9bacee2e0ccb8a79a8472604a3d2d1a0a000000000000000000000000000000000a1a2e3f4c6176889eb3c0d0e5e1cdb9a898826d5c4b55667c91a2b3c8d9ebead7c7b3a2917d67574633200f00000000000000000000000000000000000000000e1e31424c6177889eb3bdcee1e7d5c4b3a1937e685a493726140100000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000000000000000000000000000000000000000005192b3c4d62778a9fb4c6d6c9b5a38f7a644f3a2a384c61778a9fb4c9d1c1b19c8673604b3727150000000000000000000000000000091e3245566c8197acc1d2dacfcac5c8d1d4c4ae99836e5948341f0b000000000000000000000000000000000000000000000505050505050300000000000002090b0e10100e0b080100000000000000000001080b0d0f100f0d0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1b1b1b1b1b1b1b1b0f0d0700000000000000000000000000000000000000000000000000000000000000000000000000060c0e19202226292a2b2a2825211f170c0a040000000000000000000000000000000000000000000008182a3a4755606870737471696157493d2c1c0c000000000000000000000000000000000000000000000008182939495a657b8b9fb4bccdddd5c5b3a2937e695b4a3828150200000000000000000000000000000000111f334758677d92a2b4c7d7e9d7c6b59f8d7a64546074879cb2c0d0e6f6e2cdbaa99a846f5f4d39291701000000000000000000000000000000000000000000141f344759667c909fb1c3d3e6e2d0bfb49e8a78635544311d1000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000e203448596b8196a8b9cdd2c1ad98826d58473345566a8095a9bacdc8b4a3917c66544330190900000000000000000000000000000b21364b6075899eb3c9dac9bcb5b0b4c1d1cab49f8b77624c3722110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a21232b34383b3e40403f3e3a363329221f180c040000000000000000000000000000000000000000000c1c2a37444b535a5e5f5b544b46392c1f0f000000000000000000000000000000000000000000000000000b1b2b3c4b5d687d929eb0bfd0e0d0c0b49f8b79635645321d110000000000000000000000000000000004172a3a4d5f6f849aa9bacde1e3cfbcab9b857260697f94a4b6cadeeee6d3c3b49f8b78634d41301b0b0000000000000000000000000000000000000000000004182a3a4c5e6c8197a4b6c8d8eae1cdb9a89b8573604b3e2e1b0b000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000005182b3b4c61778a9eb4c5d6c9b49f8a77614c364b6075889eb3c7d0bfb09b85705e4c362614000000000000000000000000000006192c3c52677d92a7b9cccfbcab9f9ba3b4c8cebbaa947f69543f2e1c080000000000000000000000000000000000000000000000000000000002090b09020000000000000000000000000a141a1c1d1d1d1d1d1d1d1d1d1d1d1d1d1d0b0902000000000000030d13151d1d1d1d1d1d1d1d1d1d1d1d1d1d13110b020000000000000000000b0b0b0b0b0b0a0700000000030a0c1114151514110c0a0400000000000000000000000000000000000000000000000000000e19202c35393c484d515455555553504c463a37342a1f170c0000000000000000000000000000000000000000000c192731353d454949463f3632281b0f01000000000000000000000000000000000000000000000000030a0e1e2e3f4e5f6b8096a1b3c2d2e1cdbaa99c8674604b3f2f1b0b000000000000000000000000000000000c1c31414d63798b9fb4c2d3e7dac9b4a3927d6777899eb3c3d3e6f4dfcab6a595806a5b493523130000000000000000000000000000000000000000000000000c1c2f404b6075869caabbcee2e9d7c6b4a3957f6a5c4a392816030000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000000000000000000000000000000000000000000000d1f3447596b8095a7b9cccdbaa9947f6a544354687e93a7b8ccc9b3a18f7b6550402f180800000000000000000000000000000c2035495a6f849aafc5d6cab59f8d859bb0c5d8c8b19c87725d4b37230b0000000000000000000000000000000000000000000000000000000a151d201d150a000000000000000000000e1c272f323232323232323232323232323232201d150a00000000071520282a323232323232323232323232323228261e130600000000030d1315202020202020201c0e0c070b171e2126292b2b2926211f170c080100000000000000000000000000000000000000000001141e2c353d494e565a6266696a6b6a68656158544c473a33291c1103000000000000000000000000000000000000000d1d2b3437434343434343433632281a0a00000000000000000000000000000000000000000000040b171e21272d31414b60728399a4b5c4d5d7c7b5a496806b5d4b3929160300000000000000000000000000000000132135495b6a7f95a4b6c9dae7d1c1b29d88758197a7b9cce1f1e4cfbfb29c8774604b3c2c190500000000000000000000000000000000000000000000000000121e324557647a8c9fb4c1d1e4e4d1c1b49f8c7a645746321e120000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000004182a3a4c6176899eb3c5d5c7b29d8773604b6073879cb2c5cfbcab99846f5d4b3722120000000000000000000000000000011426374d63788c9fb5cadcc6b19c867f94a9c6d6cab6a48f7a654f3929170300000000000000000000000000000000000000000000000003111a28323632281c1308000000000000000a1c2c39434747474747474747474747474747473631271a0a0000031525333c3f47474747474747474747474747473d3a312413020000071520282a353535353535353124211a212933363c3f40403e3b37332a201d15090000000000000000000000000000000000000008141c313c494d5b636b72777b7e7f807f7d7a76706961594c463a2f211306000000000000000000000000000000000005182b3b484c585858585858584b453828150200000000000000000000000000000000000000000c181f2933363c42464843546175869ca6b8c7d7d2c2b59f8d7b655746321e100000000000000000000000000000000006192c3c4b6074869cabbccfe3dfcbb7a697828c9fb4c5d6e8e9d6c6b2a1907b665645321e0e0000000000000000000000000000000000000000000000000000031628394a5c6a7f95a3b4c6d7e9e2cebbaa9c8675614b402f1c0c00000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000000000c1f3347586a7f95a7b8cccab7a5907b6651677c91a5b6cac8b59f8d7a644f3f2e1c040000000000000000000000000000081d3144556b8095abbccfd9c9ac97817a8fa8b9cdd3c2ad97826d5746331e0a00000000000000000000000000000000000000000000000011212f38454b4538302518100300000000001427394a575c5d5d5d5d5d5d5d5d5d5d5d5d5d5d4b4538271502000d20334350555d5d5d5d5d5d5d5d5d5d5d5d5d5d534e42311e0b00031525333c3f4a4a4a4a4a4a4a4639362d3639464c5154555554504c473a3531271911030000000000000000000000000000000008182630424e5a636e7980878d9093959594938f8a857f776b61584b3f31241406000000000000000000000000000000000b20344859626d6d6d6d6d6d6d605645321d0900000000000000000000000000000000000004121d2a3439464c51575b5d5f5e576278889da9bacde2cfbcab9d8775614b3e2d1808000000000000000000000000000000000e1d314556657b8d9fb5c5d5e7d4c4b19f979faabbcee4f4e1cdb9a899836e5e4c382816000000000000000000000000000000000000000000000000000000000a1b2e3e4b6073859ba8b9cde1ead8c8b6a497816c5e4c3a2a1804000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000000000417293a4b6176899eb3c4d4c3af99846f5d70859bb0c3cebbaa98836e5c4a3621110000000000000000000000000000000b20354b6074889db2c9dacfbcab927d73899eb4c9dec9b49f8a76614c36210f00000000000000000000000000000000000000000000000a1a2f3f4c5660564a43362d1e170b000000001a2f435768717272727272727272727272727272605645311d090013283c50616a727272727272727272727272727268604e3a2611000d20334350556060606060605f5c4e4a3e4a4e576166696a6a69666158524b44372e211507000000000000000000000000000001142636434b606878838e969ca5a6a9aaaaaaa8aa9f9b948a8076655d4e42312414040000000000000000000000000000000d22374c62778283838383838274604b36200b0000000000000000000000000000000000081622303b474c5761676c70727473726e6a7a8b9fb4c3d4dac9b7a596816c5c4a36261401000000000000000000000000000000021527384b5d6d8297a6b8cbe0e2cebdb1acb4bbc8d9ebe7d2c2b49e8a78624d402f1a0a0000000000000000000000000000000000000000000000000000000000101d31445563788a9eb4bfd0e2e6d3c3b19f907c665947341f13000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000000000c1e3346576a7f94a6b8cbcab59f8c78657a8fa3b5c9c7b49f8c79634e3e2d1b03000000000000000000000000000005182a3b51667b90a6b7cbdfcab49f8b776e8398aec8d8cdbaa8937d68533d2d1a07000000000000000000000000000000000000000000021527384c5d65756760544a3e33291b0b0000001c32475c7186878787878787878787878787878774604b36200b00152a3f556a7f87878787878787878787878787877e68533d28130013283c50616a7575757575757571635b4b5c646d767b7e80807e7b77706760554b3f3225160800000000000000000000000002101c304354606c7e8a98a0abb2b6c3bebfc0bfc8bbb4b0a99f96887b68604e4231221100000000000000000000000000000010263b50657b9098989898988f7a644f3a240f0000000000000000000000000000000007162634404d59616b767c828688898887837f797d92a5b7cbdfd4c3b49f8c7a645443301c08000000000000000000000000000000000a1a2e3f4c6176889eb3c0d0e5dbcec5c1caced9e6ecdac9b5a4947f69594834221200000000000000000000000000000000000000000000000000000000000001142637495a687e93a1b3c4d5e7e1cebdb39e8877614c42311e0e0000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000000000000000000000000000000000000000000000000031729394b6075889db3c4cfbcab96806e8399aec1cdbaa997826d5b493520100000000000000000000000000000000b1f3447596e8399aec4d4dac5b09b8570677d92aabbced7c6b09b85705b4a36210a000000000000000000000000000000000000000000091d314556657c887d72645c4b463929180800001f354a5f748a9c9c9c9c9c9c9c9c9c9c9c9c9c8b74604b36210b00172c41566c81969c9c9c9c9c9c9c9c9c9c9c9c947f69543f2a1400152a3f556a7f8a8a8a8a8a8a8a867963606a79828a9194959593908b857d74655d4f43342616060000000000000000000000102032434b607281939fa9b2bfc7cad3d3d4d5d4d9cecac7bab4a69d8c7e68604e402f1d0c000000000000000000000000000013283e53687d93a8adadada8937e68533e29130000000000000000000000000000000415253444515e6677808991979b9d9e9e9c99948e85879db2c7dde3cfbcab9b8573604b3520100000000000000000000000000000000000111f334758677d92a2b3c7d7e9e0d9d7dfe2ebf6e3cfbcab9c8673604b3b2b19040000000000000000000000000000000000000000000000000000000000000009192c3c4e606e8399a6b8cbe0ebe0cbb8a699836e604e3c2c190900000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000000000000000000000000000000000000000000000000000b1e324557697e93a6b7cbc9b29d88778c9fb4cac6b49f8a78624d3d2c1a020000000000000000000000000000000d22374c62778b9fb4cadfd3c3a9947f6a61768a9fb4c9dfc9b5a38e79634e382815020000000000000000000000000000000000000005192b3b4b6074869c92857a6d61574636251300001f354a5f748a9fb2b2b2b2b2b2b2b2b2b2b2a08b74604b36210b00172c41566c8196abb2b2b2b2b2b2b2b2b2b2a9947f69543f2a1400152a3f556a7f949f9f9f9faa9f9a846f727f8b989fa9a9aaaaa9ab9f9a92867b6a6151443424140100000000000000000009192e3e4f616d81979fb4bac7cfdcdfd5cbc8c7c9cdd6dfd7cdc4b7aa9f937e685e4c3b2a180400000000000000000000000001162b41566b8096abc0c2c2ac97826d573c2b180a00000000000000000000000000001222334351626b7c89959ea8acb0b2b4b3b1aea9a39b9da5b7cbdfebd9c9b5a3917c66513f2e1b080000000000000000000000000000000004172a3a4d5f6f849aa9bacde1f6eeecf4f7fef4dfcab59f8d7a655544311d0d0000000000000000000000000000000000000000000009090909090909090909000e1e31424c6177889db3bdcee1e7d5c4b3a1927e685a4937261401000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000000000000031628394b6074879db2c3cbb7a69a849aaabbccb9a896816b5948341f0f000000000000000000000000000000081b2e3f54697f94aabbcedfcab6a58e7963586f8499afc8d9d2c1ab96816c5645321d09000000000000000000000000000000000000000b203448596a7f94a4a29b8c8275615443301c07001f354a5f748a9fb4c7c7c7c7c7c7c2c2c2b9a88b75604b36210b00172c41566c8196abc5c2c2c3c7c7c7c7c7bea9947f69543f2a1400152a3f556a7f94aab5b5b5bbb49f8b7582949faab4bac7bfbfc9bcb4b0a49c8c7f6b625142321f0f0000000000000000011426374b5c6a7f949fb1bdcdd7dacfcac5b8b3b1b4b9c6c8d1e1d4c8bbb49f8c7c665947341f1000000000000000000000000004192e43596e8398aec3d8c6b19b86715a4836271a0d0000000000000000000000000a1a304050616b80919ea7b3b9c6c5c7c9c8c7c3c1b5b0b2b7c3d4e6f7e7d2c1b09b85705d4b37220a00000000000000000000000000000000000c1c30414d63788a9fb4c9def4ffffffffffecd7c2ad97826d5d4b3727150000000000000000000000000000000000000000070c0e1e1e1e1e1e1e1e1e1e1e1e1e1e1f344759667c909fb1c3d3e6e2d0bfb49e8a78635544311d10000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000000000000000a1d324556687e93a5b6cac4b3a29aa2b3c8c5b49e8977614c3b2b19010000000000000000000000000000000e22374b5d72879cb1c8d8dcc7b29c87725b53687d93aabbcedec8b39e8875604b36200e00000000000000000000000000000000000005192b3c4d62788a9fb4b4ab9f978472604a35200b001f354a5f748a9fb4c9dcd4c3b7b2acacacac9e8972604a35200b00152a3f556a7f94a7acacacaeb2bfcfdcd4bea9947f69543f2a1400152a3f556a7f94aabfcad8cebbaa9a8597a0b4bbc8cdd7d5d5d9cfcac2b6aa9f94806b604f3d2c180800000000000000081d314455647a8c9fb4bdcee1dac9bcb5aca69e9c9ea8afb4c0cfdcd9cebbaa9e8877614c3e2d1b070000000000000000000000071c31465c71869bb1c6dbcab49f8c78625445382b1d1103000000000000000000021628384c5e6a7f949eb3b9c5ccd6dbd7cdc9c5c2c2c3c5c7cbd4e2effdefddc8b4a38f7a654f38281603000000000000000000000000000000000a1a2e3f4c6176889db3c8ddf2fffffffff7e2ccb7a28d77624d3f2e1a0a000000000000000000000000000000000000010f1a212333333333333333333333333333332a3a4c5e6c8197a4b6c8d8eae1cdb9a89b8573604b3e2e1b0a0000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000000000000021528384b6074879db2c2d0c0b3afb3c0ccb8a7957f6a5847331d0d000000000000000000000000000000031729394f657a8fa4b6cae6d5c5ab96816b564c61778b9fb4cadfccb8a7917c67523c2b190500000000000000000000000000000000000b2034485a6c8197a8bac9bcb4a28d78624d38230d001f354a5f748a9fb4c9dfcab7a59d9797979691806b5443301c07000d23384d6278899597979799a1b2c6dbd4bea9947f69543f2a1400152a3f556a7f94aabfd4ead8c8b4a29aa2b1bebcb8b8bac0c8ccd5dfd3c8bbb49e937e695b49362513000000000000011426374b6073869caabbcedbe3cfbcab9f978e888789909aa2b2becfe0d9c8b8a698826d5c4a36220e0000000000000000000000081d33485d72889db2c7ddcfbcab9983726056483b2f2215000000000000000000091e324556667c919dafbcccd6e1d7cdc7bab4b0adacaeb2b7c4c9d2dfeef7e4d1c1ae98836e5645321e09000000000000000000000000000000021528384b5d6c8197a6b8cbe0f4f4eeecf4f6ebd6c0ab96806b5c4b3828150200000000000000000000000000000000000f1f2d363948484848484848484848484848484848404b6075869caabbcee2e9d7c6b4a3957f6a5c4a3928160300000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000000000000000a1d314455687d92a4b6cad0c7c4c7d0c3b39e8876614b3a2a18000000000000000000000000000000000a1e3346576d8297adc2d3e0ccb8a78f7a6550475970859aafc9dad5c5af9a846f5a483520080000000000000000000000000000000005182b3b4d62788b9fb4c6d7cab49f8b77614c37210c001f354a5f748a9fb4c9dcc7b29d87828282817c6b625136251300000b2035485a6278808282828399aec3d8d4bea9947f69543f2a1400152a3f556a7f94aabfd4e9e6d1c0b4b0b4b4ada7a3a2a5aab3b8c5d1ded9cebcb49f8b79635443301c070000000000081d314455687e93a4b6c8d9e5cfbeb59f8d81797372747b8498a0b2c2d3e6d5c4b59f8d7a644f3c2c190600000000000000000000071c31475c71869cb1c4d4d9c9b3a198827462594c40331c1308000000000000021527374b6075879db2bbcce0e5d7c6bab4a99f9a9897999da6b1b5c1d0deeeefdec9b49f8975604b36210b000000000000000000000000000000081d324556657b8d9fb5c4d5e7ece1dad7dfe2eadfcab49f8c7a645645321d1000000000000000000000000000000000071a2d3d4a4e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e57647a8c9fb4cadff4e4d1c1b49f8c7a645745321e1100000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000000000000000000000000000000000000000000000000000000021527374b6073869cb1c2d2dcd9dccbb7a5947e695746331c0c000000000000000000000000000000000c21364b6176899eb4c9deddc8b39e8874604b3b54697e93abbccfdfcab59f8c78624d362614010000000000000000000000000000000b203448596c8197a9baced1c0ad98836e5847331f0a001f354a5f748a9fb4c9d8c3ae98836e6d6d6c675f5144341808000006192b3c485a626a6d6d6d798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9efded1c2b6aa9f98918e8d8f959ea7b4c0d1e2e2cdbaa99a8472604a35200f00000000000b20354b6074879db2c2d3e6d8c7b2a0937e6c635b546065728298a4b6cadee3cfbcab99846f5a4935200c0000000000000000000001162b40566b8095a6b7c5d3cfbfb2a0988578665e5043302518080000000000081d3144556a7f94a5b7cad9e9d7c7baa89f948a8583828488909ba3b3c0d0e2f3e1cdbaa8907b66513b2611000000000000000000000000000008182d3d4b6074869cabbccfe2ecdccec5c2c9cdd7e3cfbcab9c8674604b3e2d1a0a0000000000000000000000000000000c21364a5b637373737373737373737373737373737373737373737f95aabfd4eaefe2cebbaa9c8675604b3f2f1c08000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000000000000000000091d314455677d92a4b5c9dbdbd3c2b29d8774604b39291700000000000000000000000000000000071a2d3d53687d93a8b9cde1d7c7ad97826d5544374d62778c9fb5cadfcfbcab95806a5443301c080000000000000000000000000000011426364c62778b9fb4c7d8c8b4a28f7a644f3a2a1704001f354a5f748a9fb4c9d8c3ae98836e595757514d41342616000000000e1e2b3c484d55575764798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9e8d6c6b6a49c8c837c79787a80899aa2b4c3d4e6d7c7b4a2927d67523d2d1a070000000417293a51667c91a5b7cae0e2cebaa998826d604e49434b546074869cb1c3d3e6dac9b59f8c78634d38230f00000000000000000000000c21364c6176889da7b6c2cfcfbeb2a39b897c6a614a4336251300000000000b20364b6074889eb3c3d4e6e1cdbaa99f8a7e76706d6d6e737b859aa2b3c4d5e7e9d7c6aa95806b55402b1600000000000000000000000000011426364a5b6b8095a4b6c9daece2cebeb1adb4bac7d7d9c9b6a495806b5c4a3827150200000000000000000000000000000e23394e6379888888888888888888888888888888888888888888889eb3c8ddf3feead8c8b6a497816c5d4c38230f000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000000000000000000011426374a6073869cb1c1c6c6c6b6a4927d685645321b0b000000000000000000000000000000000c21364a5b70859bb0c6d7e1cdbaa9917c66513734485970859bb0c5dbdac9b29d8774604b35200c0000000000000000000000000000081c3043546a7f95a9baced5c5b09a85705c4a361c0c00001f354a5f748a9fb4c9d8c3ae98836e5943413c393023160800000000000e1e2b353840424e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9e1ccb9a89c86796d676363656b77849aa5b7cbdfe5d1c0b09b85705c4a36210d0000000a1f3346586f8499aec3d4e6dfc9b49f8b78624d423630364556667c90a4b6cadee3cfbcab95806b563d2d1a07000000000000000000000a1f334658647a899ca4b2bfcecfc1b4a79e8d7f6d605443301c110000000010263b50657b90a6b8cbe1e9d7c6b49f8a7a6961575857595d6575839aa6b8cbe0eed9c4af99846f5a442f1a00000000000000000000000000081c30435463798b9fb4c2d3e7e6d4c4b19f979fa9bacde2d3c2b49f8c7a645645311d0f00000000000000000000000000000f24394e64798e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea6b8cbe0f5fff6e6d3c3b19f907b65503d2d1a070011263b50667b90a5bbd0e5f0e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000000000000000000091c304354667c91a3b1b1b1b1b19c8673604b38281500000000000000000000000000000000021527384e63798ea3b5c9e4dec9b49f8a76604b362b3b54697f94a9c2d2dfcbb7a5907b66503a2a1804000000000000000000000000000b20354b6073879db2c7d8ccb8a7917c67513e2d1b0000001f354a5f748a9fb4c9d8c3ae98836e59432e27241d1205000000000000000e1920222b394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9dec9b39e8976635b524e4d50586176879db2c5d6e8ddc8b4a38e79644e39240f0000000c21364c61768a9fb4c9dfead8c8ad98836e594834211c28384c5e72879cb2c7dcecdac9b29c87725b4a36210c000000000000000000000417293a4a5c64798699a1b4bbc8d1c5b8ab9f958172604a3f2f1909000000162b40566b8095abc4d5e7e1cdbaa8947f695c4b4639423f4b566176889eb3c8ddf1dcc7b19c87725c37271502000000000000000000000005192b3c4b6073859baabbcee0f0dfcbb7a697828b9fb4c4d5e2cebbaa9c8674604b3d2d1909000000000000000000000000000f24394e64798ea3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b8c5d5e7fbfffff1e1cebdb09b85705b4a36210c0011263b50667b90a5bbd0dbdbdbcbb6a08b76614b36210c000000000000000000000000000000000000000000000000000000000000001325364d5e71859b9b9b9b9b9b917c675544311a0a00000000000000000000000000000000091d3145566c8196abc1d1e4d9c9ae99836e57453223384d63788da3b5c9ded4c3ae98836e5847331f0a0000000000000000000000000316283951667b90a5b7cadec8b39e8875604b3620100000001f354a5f748a9fb4c9d8c3ae98836e59432e19100a01000000000000000000050b0f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d8873584a3d39383a4758687d92a7b9cce0e4d1c1ac96816c573b2b1805000012273d52677c92a9bacee2e2cebbaa917c66513b2b190a1a2f40556a8095aac7d7e9dfcab6a58e79634e39240e00000000000000000000000b1b2d3e4a5b637583949faab9c5d5c9bcb49f95806b5d4b372614010000192f44596e8499aec3d9eedec9b49f8a76614c3e32282d2e3847586a7f94aac6d6e9dec9b49f89745544311d0800000000000000000000000c2034485a697e93a3b4c8d8eae6d1c0b29d87758096a6b8cbe0d9c8b5a495806a5c4a372715010000000000000000000000000f24394e64798ea3b9c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8cbd5e3f0f0f0f0f0ebddc9b5a38e79634e39230e0011263b50667b90a5bbc6c6c6c6c6b6a08b76614b36210c000000000000000000000000000000000000000000000000000000000000000818304050657c8686868686868372604a37261400000000000000000000000000000000000b20364b6075889eb3c8dee3cfbcab927d685339282035495a71869bb1c6dbdfc9b49f8a77614c372210000000000000000000000000091e3246576e8399aec3d4d4c4ac96816c5645311d090000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e3a2d24232a3a4b6074899eb3c9deefdcc7b29c8772594834200b0002152838576c8297acc7d8eadfcab49f8a76614b36210d0012243a4f647a8fa9bacde1e6d3c3a8937e69533e291400000000000000000000000010202d3d4957616e7f8c9ea7b9c7d7cfbdaf9e907b655544311d0800001c31465c71869bb1c6dbefdac5af9a85705746331e16181a2a3a4e63788da8b9cde1e1cdbaa98b74604b36200b000000000000000000000c1c30414d62788a9eb4c1d1e6ebd9c8b4a2917d6776889db3c1d2e6d2c2b49f8b79645544311d0f0000000000000000000000000f24394e64798ea3b9cedbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbd2c1a6917b66513c26110011263b50667b90a5b1b1b1b1b1b1b1a08b76614b36210c00000000000000000000000000000000000000000000000000000000000000001223384c5d657171717171716e6054433019090000000000000000000000000000000005192b3c52677c91a7b8cce0dfcab49f8b77614c3722192c3c556a7f95aac2d3e2cebaa9947e69543e2e1b0700000000000000000000000c21364b61768a9fb4c9decbb7a68f7a644f382715020000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0e1d3144556d8298adc2d8eddfcab6a58c77624d37220d00091d32455671879cb1c6dcf0dbc6b19b86715746331e0a000b20354b6075899fb4c9deedd8c3ae98836e5938281502000000000000000000000002101f2c39464b61697b899ea9bacde1ccbcb29c8773604b35200b00001d32485d72879db2c7dcecd6c1ac97816c5739291703000c2135495b74899eb4c9dee9d7c7a18b76614c36210c0000000000000000000417293a4d5f6f8399a8b9ccdfefe2cebbaa9a84705f687d92a3b5c9dae2cebbaa9b8573604b3d2d190900000000000000000000000f24394e64798ea3b9c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6bca6917c67513c27120011263b50667b909b9b9b9b9b9b9b9b9b8b76614b36210c0000000000000000000000000000000000000000000000000000000000000000091c2f3f4c505c5c5c5c5c5c594a4336251300000000000000000000000000000000000b2035485a6f849aafc5d5e8dac5b09a85705947341f0e23394e63798ea4b6caded8c7b19c86715c4b37220b000000000000000000000114263651677c91a9bacdddc8b29d88735c4a361a0a000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0215273753697e93a8bed3e8e6d3c3a6907b66513b2611000b20364b60758a9fb4cadfecd7c2ac97826d573929170300081d31445570859bb0c5dbf0dcc7b29c87725645321d09000000000000000000000000010f1b2933434f5d657a8b9fb4c2d3dfcab6a5917c675237271502001d32485d72879db2c7dcead5c0ab95806b56402b160000061a2c3d5d72879db2c7dce7d5c4a08b76614b36210c0000000000000000000a1f334758677c91a1b3c6d6e8e7d5c5b49f8c79634e6072859babbccfe3d8c8b5a3947f6a5b4a37261401000000000000000000000f24394e64798ea3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a6917c67513c2712000f253a4f647a868686868686868686868575604b36210b00000000000000000000000000000000000000000000000000000000000000000011212f383b46464646464644353025180800000000000000000000000000000000011426364d62788b9fb4cadfe5d3c2a9947f69543a2a180c21364a5b72879cb1c7dcdec9b5a48f7a644f39281603000000000000000000081c3043546d8398adc7d7d7c7ac97816c573e2d1b00000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0010253b50657a90a5bacfe5e9d3bea9947e69543f2914000e24394e63798eaabbcee2e9d4bea9947f69543f2a14000001152737586d8297adc2d7ecdfcab49f8a75604b36200b0000000000000000030a0c0b09030b171e323f4b5c687e93a4b6caded3c3af99846f5544311d08001c31475c71869cb1c6dbebd5c0ab96806b56412b160000081d31445573889db2c8dde0cbb7a68a73604b35200b00000000000000000a1a2e3f4c6176889db3bfd0e4f4e0cbb8a696816c5b4a54647a8d9fb5c6d7e6d2c1b49f8b79635544311d0f000000000000000000000f24394e64798e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b917c67513c2712000d22374b5d647171717171717171717171605645321e0900000000000000000000000000000000000000000000000000000000000000000003111c23263131313131312f201c13080000000000000000000000000000000000081c3043546a8095abbccfdadac9b6a48d78634d38230e071a2d3d566b8095abc3d4dad2c2ac97826d5746321e090000000000000000000b20354b6074899eb3c9decdbaa9907b65503b261000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090e23384d63788da2b8cde2ebd6c0ab96816b56412c160011273c51667c91a6c8d9ebe6d1bca7917c67523c2712000000152b40556a8095aabfd5eae3cfbcab8e79634e39230e000000000000000b171e21211e160a0415212e3e4a6073879cb1c7dcdec9b49e8975604b36200b001a2f445a6f8499afc4d9edd8c3ad98836e58402f1a0a080f20354b60758a9fb4c9dfddc8b39d88735544311d0800000000000000021628384b5d6d8297a6b8cbddede7d2c1b39e8876614c3d4b5c6d8298a8b9cde1e2cebaa99b8573604b3d2c18080000000000000000000e23384e63798586868686868686868686868686868686868686868686868686868686868686868686867b65503b261000081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c4b45382816030000000000000000000000000000000000000000000000000000000000000000000000090e101c1c1c1c1c1c190b07000000000000000000000000000000000000000b20354b6074879db2c9c4c4c4c5b19c86715b4935210c000f24394f64798ea5b7c4c4c4c4b49e8976614b36210c0000000000000000000f24394e64798ea7b9ccdfc9b49f8a75604b36210b00000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090d22374c62778ca1b7cce1ecd7c2ad97826d58422d180013293e53687e93a8bdd3e8e4cfbaa58f7a65503a251000000013283e53687d93a8bdd2e8ebd9c9a5907b65503b2510000000000008131c2933363632281f180c111c3043546a8095aabfd5e1cdb9a88e78634e39230e00162b41566b8096abc6d6e9ddc8b29d88735e4c38281f1d202d3e4f647a8fa9bacde2dac5b09a85705b3726140100000000000000081e324556657b909fb1c4d5e7ecdac9b5a3927d685846333e4d62778a9eb4c3d3e6d8c7b5a3947f695b493626140100000000000000000c2135495b63717171717171717171717171717171717171717171717171717171717171717171717171655d4c38230e000010202e373a46464646464646464646463632281a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215273850657b90a5afafafafafafa795806b563c2c1906000d22364a5c72879dadafafafafafa8927d68523a2a1804000000000000000014293e53697e93a8c5d6dac5af9a85705645321e0900000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090c21364b61768ba0b6cbe0edd8c3ad98836e58432e1900152b40556a8095aabfd5eae3ceb8a38e79634e39240e00000012273c51677c91a6bcd1e6e7d1bca7927c67523d2712000000000818253039464c4b4538342a201c15253652687d92a7bdd2e9d7c6a48f7a654f3a25100011263c51667b91a8b9cde1dfcbb7a6907b665645383331353e4a5c6c8197acc7d7e7d5c4ab96806b56412b160000000000000008182d3d4b6074879cb2bdcee2f2e3cfbcab9b8572604a3a293448596a7f94a5b6cadfe5d2c1b49f8b79635443301c0e0000000000000000061a2c3d494e5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c504c3f2f1c08000002101b22253131313131313131313131211e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145566e83989a9a9a9a9a9a99968978624d38220e0000071b2d3e53687e91989a9a9a9a9a9a9a85705847331f0a0000000000000003172939586e8398adc3d8d4bfaa957f6a553828160300000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090c21364c61768ba1b6cbe0edd8c3ae98836e59432e1900172c41576c8196acc1d6ebe2ccb7a28d77624d38220d00000010263b50657b90a5bad0e5e8d3bea9937e69543e291400000000132536434a576160564c473a353027313e53687d92a8bdd2e5d0bba6907b66513b2611000b21364b6075899eb4c9d9e6d4c4b19c867460564c46444b4f5c647a8b9fb4c9dfe0cbb8a6907b65503b2610000000000000011426364a5b6b8095a5b6cadcece8d6c5b59f8d7a645443301c2b3b4b6074879db2c0d0e6e1cdbaa99b8573604b3c2c180800000000000000000f1f2c35384646464646464646464646464646464646464646464646464646464646464646464646463b382f21110000000000080d0f1c1c1c1c1c1c1c1c1c1c1c0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60748385858585858585848178625a4834200b00000010263a4e60687c83858585858585858477614c37220c000000000000000a1e33465772889db2c7ddd4c3a5907b65503b26100000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090d22374c62778ca1b7cce1ecd7c2ac97826d57422d1800182d42576d8297acc2d7ece1ccb6a18c77614c37220c00000010253a4f657a8fa4bacfe4e9d4bea9947f69543f2a14000000071c304354606d76766c61594f4a4337444b5c6d8297adc2d7e7d5c5a48f79644f3a240f00091e3245576d8297abbccfe3dec9b5a49983756861585560646c7a879da9bacee2d5c4b39e8874604b35200b000000000000081c30435463798c9fb4c3d3e6f5e0ccb9a797826d5c4a3625131d324556667c91a2b3c8d8e9d7c7b4a3947e695a493625130000000000000000010f1a212331313131313131313131313131313131313131313131313131313131313131313131313126231c1103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556606f6f6f6f6f6f6f6f6f6c625a493c2b19050000000b1e31424e5e666e6f6f6f6f6f6f6f6f615847331f0a000000000000000c21364c61768ba5b7cbdfcab7a58c77614c37210c0000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090e23394e63788ea3b8cde3ebd5c0ab96806b56412b1600182d43586d8298adc2d7ede1cbb6a18c76614c37210c0000000f253a4f647a8fa4b9cfe4e9d4bfaa947f6a553f2a15000006192c3c4a6072828b8a81776c6460545a5560687a8b9fb4c9dfe0ccb8a78d78624d38220d00031628394e63798c9fb4c3d3e4d2c2b3a199877d7673737579818b9da6b7c7d8e0cbb8a6947f695544311d08000000000005192b3c4b6073859baabbcee1f1e5d2c2b39e8977614c3e2e18081528384c5e6f849aaabbcee2e5d1c1b49f8a78635443301c0e000000000000000000060c0e1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c100e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1113151514110d0b05000000000000080b0b0b0b0b0b040200000000000000000002152738454b595a5a5a5a5a5a5a5a564d493c2c1d0d0000000002132431404c51585a5a5a5a5a5a5a5a4c473a2a1804000000000000000f253a4f647a8fa4c3d4dcc7b29d87725847331f0a0000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0411263c51667b91a6bbd0e6e9d4bfaa947f6a553f2a1500182e43586d8398adc2d8ede0cbb6a18b76614c36210c0000000f243a4f64798fa4b9cee4ead5bfaa95806a55402b1500000c2035495a697e939f9f9789817974717071757d899ea9bacee2ddc8b39e8874604b35200b00000a2135495b6c8197a5b6c6d6e0d0bfb3a59d928b89888a8f979fa9b7c4d4decebdb39e8875604b3727150100000000000c2035485a697e94a3b5c8d8eaf0dec9b5a4937e695947342010000a1a30404e63798b9fb4c5d5e7e1cdbaa89a8472604a3c2b19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c171f2126282a2b2927221f180d09020b11131e2020202020201917110700000000000000000a1a2731364445454545454545444138352c1e0e00000000000006132230393c43454545454545454537332a1c0c000000000000000013283d52687d92a7bdd2d9c4ae99846f593a2a17040000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e3f2f1f17192d3d556a7f95aabfd4eae7d5c5a6917c67513c271200182d43586d8298adc2d7ede1cbb6a18c76614c37210c0000000f253a4f647a8fa4b9cfe4e9d4bfaa947f6a553f2a15000b1e31424d62788a9fb4b4a89e968e8986858689929ea7b8c7d8e3d0bfad97826d5544311d080000061a2c3d4c6176879da8b9c6d3e3d0c3b6b2ab9f9e9d9fa9acb4bac7d4e1cfc0b19f927d68574532190900000000000c1c30414d62788a9eb4c1d2dbdbdbcfbeb19c8673604b3a2a18020000122136495b6c8196a7b8ccdbdbd7c6b4a2937e695a48352013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f1120202020202020202020200d0b050000000000000000000000000000000000000000000000000000000000000005121d242933363b3e40403f3c37342a211e161f2629333535353535352e2b24180a00000000000000000a151d202f303030303030302f2c2320190e000000000000000004121d24272e303030303030302f221f180c000000000000000001162b40566b8095abc0d5d6c0ab96816b56412c16000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735d4c3f332a2a374a5b70859bb0c5daf0e0ccb8a78d78624d38230d00172d42576c8297acc1d7ece1ccb7a18c77624c37220d00000010253a4f657a8fa4bacfe4e9d4bea9947f69543f2a140011263a4e606f849aa8bac6b9b4aba89e9b9a9b9ea8b3b8c5d5e4d6c5b3a1907b6550372614010000000f1e334657647a8a9ea8b6c2cfd9d4cac9bcb5b3b2b4bac7c9cdd7d7cdbeb2a297816d604e392816000000000004172a3a4d5f6f8499a8b9c6c6c6c6c6c5b2a08f7b655544311c0c000000061a2c3d4c6176889eb3c1c6c6c6c6c0b49e8a78624d42311b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c232635353535353535353535352220190d00000000000000000000000000000000000000000000000000000000000d19202f383a464c5153555554514c473b363228313a3e484a4a4a4a4a4a434036281807000000000000000002090b1a1a1a1a1a1a1a1a1a170d0c060000000000000000000000090f11191a1a1a1a1a1a1a1a0c0a0400000000000000000003182d43586d8298adc2d7d3bda8937e68533e2913000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9dfc9b49f8b7b655d4c473a3b475563798c9fb5cadff3ddc8b39e88735a4835200b00172c41566c8196abc1d6ebe2cdb7a28d78624d38230d00000011263b50667b90a5bbd0e5e8d3bea8937e69533e29140013283e53687d93a2b4c6cfccc9c6b9b3b1afb0b4b9c6ccd5e1d3c6b8a799836f5d4b38190900000000031729394a5c657b8a9ca4b4bcc9cfdadacfcac8c8c9cdd7ded7cdc6bab4a0988474604b42311b0a00000000000a1f334758677d92a1b1b1b1b1b1b1b1b0a798836e5d4b37271500000000000f1f334658687e93a3b0b1b1b1b1b1b1a89a846f604e39291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a342b1d0d0000000000000000000000000000000000000000000000000000000e1d2b34404c51586166686a6a69666259534b4538424e535d6060606060605953463624110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f455a6f849aafc4d9d0bba5907b66503b2611000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9e2cebbaa9e8a7b6b61585757596173849aabbccfe3e6d4c4ad98836e583c2b190600152a40556a7f95aabfd4eae3ceb9a38e79644e39240f00000012273c52677c91a7bcd1e6e6d1bca7917c67523c271200182d42586d82939fa9b3bfcacfd6ccc9c6c5c6c9cdd7ded6ccc3b6a89e8979634d3f2f1c0000000000000b1b2d3e4b5d657986979fabb5bcc9c9ced8d0d1d0d5ccc8c6bab4a89f9482746056453124130000000000000c21374c6176889b9b9b9b9b9b9b9b9b9b998978624d3f2e190900000000000417293a4b607385979b9b9b9b9b9b9b9b9b937d685746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c5060606060606060606060605e483b2b1905000000000000000000000000000000000000000000000000000e1f2c3b484d5e666f767b7d7f807e7c77706960564d4e6068737575757575756e6453402b1700000000040a0c1e20202020202020201e14120c020000000000000000060b0d1a1f20202020202020202014120c02000000000000000000000000071c31475c71869cb1c6dbceb9a38e79644e39240f000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ead8c8b9a89e8d80766f6c6c6f778399a2b4c9daecdfcbb7a6907b66503b2611000013283e53687d93a8bdd2e8e5cfbaa5907a65503b251000000013293e53687e93a8bdd3e8ead8c7a58f7a65503a251000162b3f52646d7e8a99a1aeb5bcc9c9ccd6d0d1d0d5ccc8c6b9b3a49c8a7b645b493521110000000000000010202e3f4b5b6375828c989fabb0b4bac7bbbcbbc5b8b3aea89f968a7f6d60564538271506000000000000142a3f54697f8686868686868686868686837b645948342111000000000000000c1c304354617782868686868686868686868476614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e66757575757575757575757570594834200b0000000000000000000000000000000000000000000000000c1c2c3d4959626f7c848a9093959594918b857e75665e5c687e888a8a8a8a8a8a826e59432e190000000c171f213335353535353535353329271f14060000000000000e1920232f3435353535353535353529271f14060000000000000000000000091e33495e73889eb3c8ddccb7a28c77624d37220d000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9f6e6d7c6b9ab9f958a848281848a99a1b3c0d1e7e6d2c1b29d8773604b35200b000011263b51667b90a6c7d8eae7d1bca7927c67523d2712000000162b40556b8095aac0d5eae2cebaa98d78634d38230e001023354552606879838e999fabafb3b9c6bbbcbbc5b8b3aea89e96867a645c4b3c2c1903000000000000000211212e3d4957616d79838c959a9fa9a5a6a6a6a4a79e99938a807769614b4538281a0a0000000000000012273c4f616971717171717171717171716e645d4b3b2b190300000000000000011426364759616d7171717171717171717170615746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b8a8a8a8a8a8a8a8a8a8a8a78624d37220d000000000000000000000000000000000000000000000004172a3a495b637884919a9faaa8aaaaa9ab9f9a93877c6c64798e9da69f9f9f9f98836e59432e1900000c1c293337484a4a4a4a4a4a4a4a493e3b32241406000000000e1e2b3538454a4a4a4a4a4a4a4a4a4a3e3b32241402000000000000000000000a1f344a5f74899fb4c9decfbcab8b75604b36200b000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9f3e3d5cbc9bcb4a99f999796999fa9b3bfcfdee7d8c8b5a3937e695443301c0800000e23384e63788da9bacee2e9d4bfaa947f6a553f2a15000003162838586d8398adc2d8eddfc9b49f8a74604b35200b0006172735424e5b636e7a838c94999ea8a4a6a6a5a4a79e9993898075645c4b3e2e1e0e00000000000000000003111f2c39464b5b636e787f858a8d909191908f8c89847e776b61594f4332281a0a00000000000000000c2032434f545c5c5c5c5c5c5c5c5c5c5b594f4b3f2e1d0d00000000000000000008182a3a474c585b5c5c5c5c5c5c5c5c5c5a4b46392917030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b909f9f9f9f9f9f9f9f9f8c77624d37220d00000000000000000000000000000000000000000000000a1f33475863798799a1afb4bbc8bfbfc9bcb4b0a59d9181758096abb7c4b5b5ae98836e59432e19000417293a474c5e60606060606060605e544f423224140000000a1b2b3c484d5a5f606060606060606060544f42321f0c00000000000000000000081d314455758a9fb4cadfcab49f8a755645321d09000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9e7d5c5b8b3abb0bab4afacacafb4bac7cfdde5d7c9bbaa9b8573604b3626140100000b20354b60758a9fb4c9dfedd7c2ad98826d583b2a180400091e32455671869bb1c6dbf0dcc6b19c86715544311d080000091724313d494e5c646e787e84898c8f9091908f8d88847e766b61574a3e2e20100000000000000000000000010f1b29333d494e5a636a7075787a7b7c7b7a77746f6861594c473b321e160a000000000000000000031525323c3f4646464646464646464646443a372e201000000000000000000000000c1c2a34374246464646464646464646453633291b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5b5b5b5b5b5b5b5a28c77624d37220d00000000000000000000000000000000000000000000081c2e3f4c6176889da5b3bfc9ced8d4d5d9cfcac3b6b29f9785869cb1c7d4cac3ae98836e59432e19000a1f334758617375757575757575757369604f42311e0e0003162839485a626f7475757575757575757569604f3b2712000000000000000000000b20364b60758baabbcedec9b49f89745f4a281502000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9e0cbb8a69e959eb4bac6c1c1c4c9cdd7e1ded1c7baab9f8b7a645544311808000000081d31445571869bb0c6dbf0dcc7b19c87725947341f0b000b21364b60768a9fb4cadfedd7c2ad98826d583727150100000006141f2c353e4a4f5a62696f74777a7b7c7b7978746e6861574b46392d201002000000000000000000000000000b171e2c363c494d555560636566676664626054534c473a342a1d14030000000000000000000000071520272a31313131313131313131312f25221b10020000000000000000000000000c181f222d3131313131313131313130211e170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbcacacacacab7a28c77624d37220d000000000000000000000000000000000000000000000e23374b5d6e8398a6b7c3d0dfe2d6ccc9c1bcbcbec4bdb1a29a9ca4b6caded8c3ae98836e59432e19000c21374c6176888a8a8a8a8a8a8a8a887e69604e3c2b1906091e324557627884898a8a8a8a8a8a8a8a8a7e69543e2914000000000000000000000c21364b61768ba0b6d9dec8b39e89735e49341e00000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39e8880929fa8b2bec8cbd4d0d6ccc9c0b4a99f8d7d675c4a3726140000000001142637566b8196abc6d6e9dfcab59f8b77614c37220f0215273750657a90aabbcee2e4d2c1a8927d68533d28130000000000010f1a212d363c484d545a59626566676664626054534b463932281b1002000000000000000000000000000000030f1a212c353837444b4d505151514f4d4a433637342a1f180c0000000000000000000000000000030c12141c1c1c1c1c1c1c1c1c1c1c190f0d08000000000000000000000000000000040a0c181c1c1c1c1c1c1c1c1c1c1b0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbd0dfdfdfccb7a28c77624d37220d00000000000000000000000000000000000000000004172a3a50657b8fa0b2c4d4e1e1d3c6b9b3aba7a6a9aeb4bbb4afb1b6c2d3e5d8c3ae98836e59432e19000a1f334758667c91a19f9f9f9f9fa69e937e685a48352011192b3c4b6075869a9fa99f9f9f9f9faa9b8573604b35200b000000000000000000000c21364b61768ba0b6d9dec9b39e89745e49341f00000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88737d8a98a0acb2b7c4bac6b9b3aea29b8b7d675f4d3e2d1909000000000011263c51667b91a8b9cde1e3cfbcab927d68523d2d190c1d3144556b8196abc8d8eaddc9b5a38d78624d38230d0000000000000006101b222b34383f3b484d4f5151504f4d4a43363632291e160b00000000000000000000000000000000000000060e192023273136383b3c3c3b3a37353025221f180c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbd0e5f4e1ccb7a28c77624d37220d0000000000000000000000000000000000000000000a1f3347586e8398aebecfe2e6d3c3b6a89e96929193999faab2bec7cad3e0edd8c3ae98836e59432e19000417293a4d5e6e8399a7b8b5b5c4b8b39f8b78624d3f2f192035485a6a8095a4b4bab5b5b5c3b49f8c79645443301c08000000000000000000000b20364b60758baabbcedec9b49f89745f38281602000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88736778828e979da6a4a5a4a89e98908579675f4d413120100000000000000b21364b6075899eb4c9deecdac9af9a846f5c4a3726212a3b4b6074889db3c8ddead7c7b19b86715a4935200b000000000000000000070d192022292b34373a3b3c3b3a38353025211e160b0300000000000000000000000000000000000000000000060c0e151d2023252627262522201c130c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f112020202020202020202020200a0300000000000000000000070c0e191e2020202020202020202012100a0100000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000000000000000000000000000c21374c61768b9fb4cadfeddfcab6a59c89817c7c7e848b98a0b4bac7d7e9edd8c3ae98836e59432e1900000c1c30404c6277899eb3bfd0d5cbbaa999836e5d4c37272f3f4d62788a9fb4c3cdd7cacab6a596806b5c4a3626140100000000000000000000081d314455758a9fb4cadfcab49f8a755645321e09000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d887359626e7a82888c8f908f8d89837b70635b4d4131231302000000000000091e3245566d8398adc2d2e5dfcab59f8d7964554436363a4759687d92a6b7cbe0e2cdbaa9947f6a543c2b19060000000000000000000000050b0d14182022252627262423201c130c0a0300000000000000000000000000000000000000000000000000000002080b0e101112110f0d0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c23263535353535353535353535351e160b00000000000000010f1a21232e333535353535353535353527251e1305000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000000000000000000000000000011263c51667c91aabbcee2e5d3c2b29c87786c6767696f7883929fa9bacde1edd8c3ae98836e59432e19000000121f344859687d92a1b3c6d6d7c7b2a1907b65554431374b5d6e8399a9bacde1e3cfbeb29d8775604b3d2d180800000000000000000000000215274a5f74899fb4c9decfbcab8b76604b36210b000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e4d5c646c7377797b7a78746e655e4e4a3d30231305000000000000000216283850657a8fa3b5c9dee3cfbcab9a847360544d4b4e586177889eb3c4d5e7d8c8b49f8a77614c37220e00000000000000000000000000000000050b0d101112110f0d0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a32291b0b000000000002101f2d363943484a4a4a4a4a4a4a4a4a4a3d39302313010011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000000000000000000000000000000000000162b40566b8095abc8d8eadecab6a48f7a65595251545a626e7d8a9fb4c9deedd8c3ae98836e59432e1900000005182a3b4e5f6f849aa8b9cde1cfbfb19c8674604b3b4455657b90a1b2c7d7e8d5c5b2a0907b655645321f0f000000000000000000000000001e33485e73889db3c8ddd9b7a28d77624d38220d000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e3e4a4f575962646565626054504c40362d1f13050000000000000000000a23374b5d71869bb1c0d1e4dac9b4a2978173676260636a76859ba6b8cbe2e2cebbaa97826d5947341f0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1316202020202020202020200e0c060000000000000000000000000000000000000000000000091c2f404c5060606060606060606060605e46392916030000000010202e3d4a4e585e5f606060606060606060524d41301e0a0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d000000000000000000000000000000000000000000192e43586e8398adc3d8eddcc7b19c87725d4b3b3c3c484d5f6f8499afc4d9edd8c3ae98836e59432e19000000000d1d31414d62788a9eb4c0d1decab6a4947e6959484b6073869cb1bfcfe5e0ccb8a798826d5d4c38281601000000000000000000000000071c31475c71869cb1c6dbceb9a48e79644f39240f000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e4836393b484c4f504f4d4b4336382f211a0f0100000000000000000000081c2e3f51667c91a2b4c6d6e7d1c0b19f97857d7776787f889ba3b4c5d5e4d3c2b49f8b78634d3b2a1804000000000000000000000000000000080e10202020202020202020200e0c060000000000000410191e20202020202020202020202020202020202020202020202020202020202020202020110f09000000000000000000000000000000000000000000000000071521282b353535353535353535352320190e000000000000000000000000000000000000000000000f23384c5e667575757575757575757575705746321e0a0000000a1a2e3e4b5b636e7375757575757575757575675f4d3925100011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000000000000000000000000001a2f455a6f849aafc4d9edd8c2ad98836d583f2e272b35415a6f8499afc4d9edd8c3ae98836e59432e190000000000132035485a697e93a2b4c7d7d3c2b39e8977624c58697e93a4b5c9dde5d0c0b39e8977614c3f2f1a0a00000000000000000000000000051a2f455a6f849aafc4d9d0bba6907b66513b2611000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e4833242a34373a3b3a38353026231c1107000000000000000000000000001124384c5e70849aa8b9c9dadecebdb1a39b928c8b8d949da6b4c1d1e3d6c6b6a496816b5a49351d0c000000000000000000000000000003111c2325353535353535353535352320190e000000000414222d333535353535353535353535353535353535353535353535353535353535353535353527241d1204000000000000000000000000000000000000000000001526333d404a4a4a4a4a4a4a4a4a4a38352c1e0e00000000000000000000000000000000000000000011263b50667b8a8a8a8a8a8a8a8a8a8a8a75614b36210c0000021528384b5c647983888a8a8a8a8a8a8a8a8a8a7d67523d27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000000000000000000000000001c31465b71869bb0c6dbebd6c1ac96816c57412c17192f445a6f8499afc4d9edd8c3ae98836e59432e19000000000005192b3c4b6073859ba9bacde1ccb9a897826d5c6176899eb3c2d2e5d7c7b4a2927d685847332111000000000000000000000000000003182d43586d8298adc2d7d3bea8937e69533e2914000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e181f2224262523201c140809000000000000000000000000000000091d30404d63788a9eabbccfd9dbcec1b5b0a7a2a0a3a9b3b7c4d1dfd6c7b9a89c8675604b3c2c1900000000000000000000000000000011212e373a4a4a4a4a4a4a4a4a4a4a38352c1e0e0000001022323f484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c39302212000000000000000000000000000000000000000000091933445055606060606060606060604d493c2c1906000000000000000000000000000000000000000011263b50667b909f9f9f9f9f9f9f9f9f8b76614b36210c0000091d324556647a8a989d9fab9f9f9f9f9fa99a846f5f4d3925100011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0000000000000000000000000000000000000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e190000000000000e1c30435463798b9fb4c2d2d6c6b59f8d7a646c8197a7b8cce0e1cdbaa99a846f5f4e3a2a1803000000000000000000000000000001162b40566b8095abc0d5d6c1ab96816c56412c17000000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e050b0d0f10100d0b0801000000000000000000000000000000000000122035495a677d8d9fb4bcc9d4e0d2c9c6bcb7b5b8bfc8cbd4ded1c6b9a99e8a7a645745321e0e0000000000000000000000000000081c2e3f4b50606060606060606060605e493c2c19060000192d3f505c5f606060606060606060606060606060606060606060606060606060606060606060514c40301d09000000000000000000000000000000000000000115273750626b757575757575757575756f5a4935200a000000000000000000000000000000000000000011263b50667b90a5b5b5b5b5b5b5b5a08b76614b36210c0005182a3b4b6074879da9b3b4bcb5b5b5c3b49f8b79634e41301e0a0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d0b0b0b0b0b0b0b0b0b0b06050000000000000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000001142636495b6a7f94a3b5c8d8cfbcab9b8572798c9fb4c5d5e7d2c2b49f8a78634d41311c0c0000000000000000000000000000000013283d52687d92a7c9dad9c4ae99846f593a2a18040000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000000000000000000000000000000000000000000000000000006192c3c4d5f6a7f939fabb7c3ccd6dedbd2cccbcdd4dddcd3cac0b4a89e8b7c665c4a3928160000000000000000000000000000000e23374b5d6575757575757575757575705a4935200c00001e33485c6e75757575757575757575757575757575757575757575757575757575757575757575665e4c39240f00000000000000000000000000000000000000081d3144556b808a8a8a8a8a8a8a8a8a8d78634d382715020000000000000000000000000000000000000011263b50667b90a5bbcacacacacab6a08b76614b36210c000b1f3447596a7f94a5b6c7cacfd9cacab6a595806b5b49352313010011263b50667b90a5bbd0e5f7e1ccb7a28c77624d372220202020202020202020201c191309000000000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e190000000000000008182c3d4b6073869baabbcedac9b5a3917c849aaabbcee3d9c9b5a4947f6a5a4935231300000000000000000000000000000000000f243a4f64798fabbccfddc7b29d88725947341f0a0000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000e1e30414f616a7e8d9da5b3b9c5c8ccd5d0d1d0d3cac7c3b6b2a29b8a7b665e4c3e2d1b0a00000000000000000000000000000010253a50657b8a8a8a8a8a8a8a8a8a8a78634d38230e000020354a5f758c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7c66513c2711000000000000000000000000000000000000000b20354b6074889d9f9f9f9f9f9f9fab96806b5645311d090000000000000000000000000000000000000011263b50667b90a5bbd0dfdfdfcbb6a08b76614b36210c071b2d3e4c6277899eb4c3d3dfe3e4cfbfb29d8775604b3d2c1a05000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37353535353535353535353535312e261b0d0000000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000000000f1d314455647a8c9fb4c2d3d2c1b29d889aa2b4c8d9e3cfbcab9c8673604b3c2c190500000000000000000000000000000000000c21364b61768b9fb5cadfcbb7a58c77614c37220c0000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000132332434f60697b87949ea7aeb3b8c5bbbcbbc3b6b2aca49c928578655d4c402f200f0000000000000000000000000000000010253a50657a8f9f9f9f9f9f9f9f9f8d78634d38230e000020354a5f758a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f917c66513c271100000000000000000000000000000000000006192b3c51667c91a6b7b5b5b5b5b5b5b39e8875604b36200e0000000000000000000000000000000000000011263b50667b90a5bbd0e5f4e0cbb6a08b76614b36210c0a22364a5c6d8297a8b9cce1f1e9d7c6b2a1907b665645321f0e00000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d4a4a4a4a4a4a4a4a4a4a4a4a4a4642382b1b0900000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e190000000000000000011527374a5c6b8096a4b6c9dacbb7a69da6b4c0d1e6d4c4b49f8c7a645544311e0e0000000000000000000000000000000000000a1e32465772879db2c7dcd4c3a5907b66503b26110000000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000005152532424f5d65757f8992989ea7a4a6a6a5a4a59d9790877d73635a4b3f2f2211010000000000000000000000000000000010253a50657a8fa5b5b5b5b5b5b5a28d78634d38230e000020354a5f758a9fb4b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a6917c66513c27110000000000000000000000000000000000000b2035485a6f8499afc4d4cacacacacbb8a6917c67523c2c190600000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c1a30414e647a8c9fb4c6d6e8f7e1cdb9a899836e5e4c3828160000000011263b50667b90a5bbd0e5f7e1ccb7a28c776260606060606060606060606060605b564938261300000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000000000009192d3e4b6074869cabbccfd4c4b7b2b7c4d1dedfcbb7a696816c5c4b3727150000000000000000000000000000000000000003162939586d8398adc2d8d5bfaa95806a553928160300000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfd4e2ddc8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000000071524323f4b57616a757d83888c8f9091908f8b87827b73676054493c2f211104000000000000000000000000000000000010253a50657a8fa5bacacacacab8a28d78634d38230e00001f344a5f74899fb4c9cacacacacacacacacacacacacacacacacacacacacacacacacacacabba6917c66513c27110000000000000000000000000000000000011527374d62788c9fb4cadfdfdfdfe7d5c5af9a846f5b4935210a00000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36211528384d5f70849aabbccfe4f4e7d2c2b49e8a78624d402f1a0a0000000011263b50667b90a5bbd0e5f7e1ccb7a28c78757575757575757575757575757575716756422e1905000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000000000000101e324556657b8d9fb5c3d4d4cbc8cbd4e2e2cfbfb29d8775614b3e2e1909000000000000000000000000000000000000000013293e53687e93a8c5d5dac5b09a85705746321e0900000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aabfcdcdcdc8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000000000614212e39464b5660676e73777a7b7c7b7976726c6560544b43362c1e110300000000000000000000000000000000000010253a50657a8fa5bacfdfdfcdb8a28d78634d38230e00001c32475c71869cb1c4d4e3dfdfdfdfdfdfe8e0ded5d9dee0e8dfdfdfdfdfdfdfdfdfdfd1bba6917c66513c27110000000000000000000000000000000000081d3144556b8095abbccfe3f7f4fff3dfcab59f8c78634d38271502000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36211d324556677c91a2b4c9d9ebecdac9b5a4947f695948342212000000000011263b50667b90a5bbd0e5fae4cfbba7968c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a85715b46311c06000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000000000000021628384b5d6c8197a5b7cbdfdfdddfe7f2dbc6b2a1917c6657463320100000000000000000000000000000000000000000000e24394e63798ea7b8ccdfc9b49f8a76614b36210c00000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94aab8b8b8b8b8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000000000003111b293238454b525959626566676664615857504a43363026180e000000000000000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000162b40566b8095a6b7c5d6e3f3fffff3e3d6ccc8c0c4c8ccd5d1d2d2d2d2d2d2d2d2d2d5c4a6917c66513c271100000000000000000000000000000000000b20354b6074889db3c9d9ebfefffff8e3cfbcab96806b5645311d09000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36212a3b4b6074879db2c0d1e7f7e3cfbcab9c8673604b3b2b1904000000000011263b50667b90a5bbd0e5faead7c4b4a7a29f9f9f9f9f9f9f9f9f9f9f9f9f9f9b86715b46311c06000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000000000000000a1a2e3f4b6176879db2c7ddf2f2f4faeed8c3ae99836e5e4c392917020000000000000000000000000000000000000000000b20354a6074889eb3c8decebbaa907b665036251300000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f94a3a3a3a3a3a3a39d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000b161e2832363d3b484d4f5151504f4c463a3b3530251c140800000000000000000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000c22374c6176889da7b8c5d6e3f3fbe8d6c5b8b3aaafb3b8c5bcbcbdbdbdbdbdbdbdbdc4b7a68f7b644f3a250f0000000000000000000000000000000006192b3c51667c91a6b7cbe7f7f4f2f4f6ecdac9b39e8875604b36200e000000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36213448596a7f94a5b6cadeeee8d5c5b59f8d7a655544311d0d00000000000011263b50667b90a5bbd0e5faf3e2d2c4bbb7b5b5b5b5b5b5b5b5b5b5b5b5b5b09b86715b46311c06000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000000000000000c1d30414c6177889eb3c8ddf3f1eff3e5cfbaa5907a655544311d1000000000000000000000000000000000000000000000071c3043546d8297adc6d7d8c8ac97816c5443301c07000000001f354a5f748a9fb4c9d8c3ae98836e59432e1904000000000000000000000000000f24394e64798ea3b9ced4bea9947f69543f2a1400152a3f556a7f8d8d8d8d8d8d8d8d8d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000000030a161e21272b34373a3b3c3b3a36332925201c1308010000000000000000000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000a1f334758647a899ea7b8c5d6e4f4e0ccb8a79e95999ea7a4a6a7a7a7a7a7a7a7a7a7a7a69d8875614b36210c000000000000000000000000000000000b2035495a6f8499afc4d4e7e7dfdddee1e9e0ccb8a7917c67523d2c1a060000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362d3e4c6277899eb4c3d4e6f6e0ccb8a797826d5d4b3727150000000000000011263b50667b90a5bbd0e5fafff0e2d7cfcccacacacacacacacacacacacac6b09b86715b46311c06000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e190000000000000000000004182a3b4d5f6e8398a7b8cce0e3dcdadee0dbc6b19b8574604b3e2e1b0a0000000000000000000000000000000000000000000013253651667c91a8b9cdddc8b29d8874604a35200b000000001f354a5f748a9fb4c9d8c3ae98836e59432e190a040000000000000000000000070f24394e64798ea3b9ced4bea9947f69543f2a14000c21374c617678787878787878787878634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000002090b121820222526272624211f17100b070000000000000000000000000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000004182a3a4a5c647a899ea7b9c5d6e4dec8b39e898084898c8f91929292929292929292928f887b655746321e09000000000000000000000000000000011527374d62788c9fb5cadfe2d4cbc8c9cdd7e5d5c5af9a85705b4935210a0000000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36364a5c6d8297a8b9cce1f1e6d1c1b39e8977614c3f2e19090000000000000011263b50667b90a5bbd0e5fafffcefe4dddadadadadadadadadadadadadac6b09b86715b46311c06000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e19000000000000000000000c1f344759677d91a0b2c5d5ded1c8c4c9ccd6c9b5a395806b5c4b392816030000000000000000000000000000000000000000000b21364b6075899eb4c9decbb7a68f7a644f382815020000001f354a5f748a9fb4c9d8c3ae98836e59432e221f180c000000000000000008131c2024394e64798ea3b9ced4bea9947f69543f2a14000a1f33475861636363636363636363635a4935200c000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d101112110f0c0a040000000000000000000000000000000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000c1c2d3d4a5c647a899ea7b9c5d6e0ccb8a79b857673777a7c7d7d7d7d7d7d7d7d7d7d7a75655d4b39281603000000000000000000000000000000081d3144556b8095abbccfe3d4c4b7b2b4bac7d7dcc8b4a28d78634e3828150200000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36414f647a8c9fb4c6d6e8ebd9c8b4a3937e685847332110000000000000000011263b50667b90a5bbd0e5faffefded1c8c5c4c4c4c4c4c4c4c4c4c4c4c4c4b09b86715b46311c06000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e190000000000000000000c1d30414c6177889eb3bfcfe3d1c0b4afb3b9c5d2c1b49f8c7a645745321e11000000000000000000000000000000000000000000091e3245566e8398adc3d3d4c4ac97816c5645321d090000001f354a5f748a9fb4c9d8c3ae98836e59433b37342a1c120400000000000a18253035393c4e64798ea3b9ced4bea9947f69543f2a140004172a3a474c4e4e4e4e4e4e4e4e4e4d493c2c190600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000f1f2d3e4a5c647a899ea7b9c6d6d6c5b5a39b8475626567676868686868686868676561574b3f2f1b0b000000000000000000000000000000000b20354b6074889db3c9dadfcbb7a69d9fa9bacde1d1c0ab96806b5645321d0900000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3a4d5f70849aabbccfe4f2e2cebbaa9b8572604a3a2a1803000000000000000011263b50667b90a5bbd0e5faf7e4d1c0b4b0afafafafafafafafafafafafafaf9b86715b46311c06000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e19000000000000000004182a3b4d5f6e8398a7b8ccddd7c7b4a29a9ea7b9cccebbaa9c8675604b3f2f1b0b00000000000000000000000000000000000000000216283850657b90a5b6cadec8b39e8975604b3620100000001f354a5f748a9fb4c9d8c3ae98836e5951504c473a2f2212000000000a1a2836434a4f515164798ea3b9ced4bea9947f69543f2a1400000c1c2a333738383838383838383838352c1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000030d13152020202020202020201e1c160c00000000010b111320202020202020202020201b120600000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000110202d3e4a5c647a899ea8b9c6d6d1c1b4a29a8475605652525252525252525252504b46392f21110000000000000000000000000000000006192b3c51677c91a6b7cbe7ddc8b29d888a9fb4c9dedec8b39e8875604b36200f00000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b4a58677c91a2b4c9d9ebe2d3c2b49f8c79645443301c0c00000000000000000011263b50667b90a5bbd0e5faf1ddc8b4a29a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a86715b46311c06000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000000000c1f344759677d91a0b2c5d5e2cdbaa99a84899eb3c5d5c8b6a496816c5d4b3a29170400000000000000000000000000000000000000000b20354a6073879cb2c7d7ccb8a7917c67523e2e1b0800001f354a5f748a9fb4c9d8c3ae98836e66666661594c402f1d0900000216283845546064666666798ea3b9ced4bea9947f69543f2a140000000c171f212323232323232323232320190e00000000000000000000000000000000000000000000000000000000000000000000000000000000071520282a3535353535353535353330291e10000005131e252835353535353535353535352f241606000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000210202d3e4a5c647a8a9ea8b9c6d6d1c0b4a29a8474605645373d3d3d3d3d3d3d3a3632291b1103000000000000000000000000000000000b2035495a6f849aafc4d5e7d8c8ac9781849aafc4dae0ccb8a7927c67523d2c1a06000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b766154606476879db2c0d1e7dfd1c4b6a496816c5c4a3625130000000000000000000011263b50667b90a5bbd0e5faefdac5b09a84858585858585858585858585858584816c57422c1702000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e19000000000000000c1d30414c6177889eb3bfcfe3d4c3b49f8b788096a7b8ccd3c2b59f8d7b655846331f120000000000000000000000000000000000000000071c3043546a7f94a9bacdd6c5b09b85705c4b37220c00001f354a5f748a9fb4c9dac5b09b857c7c7c7b77665e4c38240a0000091e3245566072797b7c7c7f94a9bed3d4bea9947f69543f2a1400000000040a0c0e0e0e0e0e0e0e0e0e0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000031525333c3f4a4a4a4a4a4a4a4a4a48453b2e1e0c011323313a3d4a4a4a4a4a4a4a4a4a4a4a42342412000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000210202e3e4b5c647a8a9ea8b9c6d6d1c0b4a29983746055443727282828282825211e160b0000000000000000000000000000000000021527374d62788c9fb5cadfe2cebbaa917c7f95aac7d7e8d5c5af9a85705b4935210a000000000000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b757474747a859ba5b7cadee0d1c1b4a69c8675604b3d2d18080000000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c786f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6c63523e2a1500000000001c31465c71869bb1c6dbebd6c1ab96816c56412c171a2f445a6f8499afc4d9edd8c3ae98836e59432e1900000000000004182a3b4d5f6e8398a7b8ccdddfcab7a595806b76899eb3c2d2cfbcab9d8776614c40301d0c00000000000000000000000000000000000000001325364c61778a9fb4c7d7c8b4a28f7a644f3a2a1804001f354a5f748a9fb4c9dfc8b4a39b919191908a7c665138281502000b21364b6075848e919191949daec2d6d4bea9947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20334350556060606060606060605e594c3b29160b1e31414e52606060606060606060605e52422f1b000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000000000210202e3e4b5c647b8a9ea8b9c6d6d0c0b3a1998373605544372618131312100c0a03000000000000000000000000000000000000081d3144556b8095abbccfe3dfc9b49f8a767a8fa9bacde1dcc8b4a28d78634e382815020000000000000000000000000011263b50667b90a5bbd0e5faf3dec9b39e8989898a8e9ba3b5c3d4e5d3c2b4a39b8778625745321f0f000000000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77625a5a5a5a5a5a5a5a5a5a5a5a5a5a57524534220f00000000001c31465c71869bb1c6dadad6c1ab96816c56412c171a2f445a6f8499afc4d9dad8c3ae98836e59432e190000000000000c1f344759677d91a0b2c5d5e5d0bfb29d877560697e93a4b5c9dac9b7a598826d5e4d3b2a180400000000000000000000000000000000000000081f3447596c8196a9bacdd1c0ae98836e5947341f0a001f354a5f748a9fb4c9dfd1c1b4b0a6a6a6a89d87725645321d090013293e53687e93a2a6a6a6a9aebbcbddd4bea9947f69543f2a14000000000000000000000000000000000000000000000000000000030a0c0f12141516151413110e0b09030000000000000000000000000000000013283c50616a757575757575757575736a5945301c11253a4e5f6875757575757575757575705e4a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000000000210202e3e4b5c647b8a9ea8b9c6d6d0bfb3a19983736055443626140100000000000000000000000000000000000000000000000b20364b6074889db3c9daebd9c8af9a856f758a9fb4c9dee3d1c0ab96816b5645321d090000000000000000000000000011263b50667b90a5bbd0e5faf5e0ccb9a79e9e9e9faab0b5c1d2e1decab6a49b8478625a4939281607000000000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d45454545454545454545454545423e3427170500000000001c31465c71869bb1c4c4c4c4c1ab96816c56412c171a2f445a6f8499afc4c4c4c4c3ae98836e59432e1900000000000c1d30414c6177889eb3bfcfe3d7c7b3a1917c66566074869cb1bfd0d4c3b2a0917c665947341f130000000000000000000000000000000000000004182a3a4c62778a9fb4c6d6cab49f8b77614c37220c001f354a5f748a9fb4c9cdcdd1c8c5bbbbc6b7a58b75604b36200b00162c41566b8196abc0bbbbbec2cbcdcdcdbea9947f69543f2a14000000000000000000000000000000000000000000000000070b10171e212427292a2b2b2a292624211e16100b0700000000000000000000000000152a3f556a7f8a8a8a8a8a8a8a8a8a88735e48331e13283d52687d8a8a8a8a8a8a8a8a8a8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000210202e3e4b5d657b8a9ea8b9c6d7d0bfb2a1988273605443301c160700000000000000000000000000000000000000000006192c3c51677c91a6b8cbe7e2cebbaa937e686e8399aec6d7e9dec8b39e8875604b36200f0000000000000000000000000011263b50667b90a5bbd0e5fafbe8d6c5b9b3b3b3b4bbc8c9d2dfefdcc7b19c87786d61594d41332516080000000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d373030303030303030303030302c2a2217090000000000001c31465c71869bafafafafafafab96816c56412c171a2f445a6f8499afafafafafafae98836e59432e190000000004182a3b4d5f6e8398a7b8ccdde2cdbaa999836f5e4c55657b90a1b3c8d8cfbeb39e8877614c41311e0e000000000000000000000000000000000000000c1f3448596c8196a8b9c9bcb4a28d78624d38220d001f354a5f748a9fb4b8b8b8b8b8b8b8b8b8c3a08b76604b36210b00172c41566c8196abb8b8b8b8b8b8b8b8b8b8a9947f69543f2a140000000000000000000000000000000000000000000308131c2025293336393c3e3f40403f3e3c3936322825201c13080300000000000000000000152a3f556a7f949f9f9f9f9f9f9f9d88735e48331e13283d52687d929f9f9f9f9f9f9f9f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000000000000000210202e3f4b5d657b8a9ea8b9c6d7cfbfb2a0988272604b443425150600000000000000000000000000000000000000000c2035495a6f849aafc4d5e7dfcab49f8b7762677d92a8b9cde1e0ccb8a7927d67523d2c1a0600000000000000000000000011263b50667b90a5bbd0e5fafff4e4d6ccc9c9c9caced8dfe2eaf2decab6a49c8b8277675f50433326160500000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221a1a1a1a1a1a1a1a1a1a1a17150f05000000000000001c31465c71859a9a9a9a9a9a9a9a96816c56412c171a2f445a6f84999a9a9a9a9a9a9a98836e59432e19000000000c1f344759677d91a0b2c5d5e6d4c3b49f8b78634d404c5e6f8499aabbcee0cbb8a699836e5f4e3c2b180800000000000000000000000000000000000005182a3b4c6277899eb4b4ab9f978472604a35200b001f354a5f748a9fa3a3a3a3a3a3a3a3a3a3a3a08b76604b36210b00172c41566c8196a3a3a3a3a3a3a3a3a3a3a3a3947f69543f2a1400000000000000000000000000000000000000020b171e2530353a39464b4f51545555555453514e4b45383a3530251e160b000000000000000000152a3f556a7f94aab5b5b5b5b5b39d88735e48331e13283d52687d92a7b5b5b5b5b5b59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000000000000000210202e3f4b5d657b8a9ea8bac6d7cfbeb2a097816c62514333241404000000000000000000000000000000000000021527374d62788c9fb5cadfe8d6c6ae99846f596176899eb4c9dee8d5c5af9a85705b4935210a00000000000000000000000011263b50667b90a5bbd0e5fafff1e1d3cac7c7c7c7c7c8caced8dddfd3c2b6a99f97887d6a61514433231300000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d050505050505050505050200000000000000000000172d42576c818585858585858585847e68533e2913162b40566b808485858585858585847f6a55402a150000000c1d30414c6177889eb3bfcfdadacab6a595806a5a4935404e63798b9fb4c5d5d5c5b3a1927d685a48362513000000000000000000000000000000000000000d1f344759697e94a4a29a8c8175605443301c07001f354a5f748b8d8d8d8d8d8d8d8d8d8d8d8d8d8b74604b36210b00172c41566c818d8d8d8d8d8d8d8d8d8d8d8d8d8d7f69543f2a1400000000000000000000000000000000000009151d293336434a505657616467696a6b6a69686663605656504a433632281c130800000000000000152a3f556a7f94aabfcacacac8b39d88735e48331e13283d52687d92a7bdcacacacab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000000000210212e3f4b5d657b8a9fa8bac7d7cfbeb19f96806b615042322212010000000000000000000000000000000000081d3144556b8095abbccfe3e1ccb9a8917c6752576d8298adc4d5e7dcc8b4a28e79634e38281602000000000000000000000011263b50667b90a5bbd0e5faf9e6d3c3b6b2b2b2b2b2b3b4bbc8c7cad4d3c7bab4a79e917f6b625141301d0d000000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d090909090909090909090909090900000000000000152a3e52636c6f6f6f6f6f6f6f6f6f68604e3b261114283d51626b6f6f6f6f6f6f6f6f6f6a61503c2813000004182a3b4d5f6e8398a7b8c4c4c4c4bfb29d8775604b3c2c35495b6c8196a7b8c4c4c4bfb39e8978625443301c0b00000000000000000000000000000000000005182a3b4b6073869c9184796c60574536251300000e23384e6379787878787878787878787878787972604a35200b000c22374c6177787878787878787878787878787876614c37210c00000000000000000000000000000000021019273139464c5460656c7176797c7e7f80807f7e7b7976716b6560544b46393025180d000000000000152a3f556a7f94aabfd4dfddc8b39d88735e48331e13283d52687d92a7bdd2dfdfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000000000000000000000211212e3f4b5d657b8a9fa9bac7d8cebdb09e957f6a604f40301f0f00000000000000000000000000000000000b20364b6074889db3c9daecdec9b39e8975604b50667b90a6b8cbe0e3d1c0ab96816c5645321e09000000000000000000000011263b50667b90a5bbd0e5faf3dfcab6a59d9c9c9c9d9e9faaa9b2b7c3cfd8cec5b8b39e95806b5f4d3b2a18050000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0d0b06000000000f22354552575a5a5a5a5a5a5a5a5a534e42311f0b0e21334451565a5a5a5a5a5a5a5a5a55504333200d00000b1f344759677d91a0afafafafafafaea1917c665645321e2c3d4c6176899eaeafafafafafa89a8472604a392917030000000000000000000000000000000000000d1d314455657b877c70645c4b453928180800000c2135495b636363636363636363636363636363605443301c07000b1f344759616363636363636363636363636363615847331f0a0000000000000000000000000000000614202e37444b57616a737a81868b8e91939495959493918e8a86817a736a61574a43362b1d0f0100000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000000000000000000000311212e3f4b5d657b8b9fa9bac9dacdbcaf9d937e695e4c3d2d1a0a00000000000000000000000000000006192c3c51677c91a6b8cbe7e6d4c4ad97826d56454b6074889db3c8ddeedec8b39e8975604b36210f000000000000000000000011263b50667b90a5bbd0e5faf2dcc7b29d8787878787888a8e949da5b5bcc9dad5ccbcaf9e927d675948341f0d0000000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37333333333333333333333333333333332320190e000000051727353e424545454545454545453e3b31241402041626333d40454545454545454545403c3325150300000c22374c6177889a9a9a9a9a9a9a9a9995836e5e4c3828161f334758687d92999a9a9a9a9a9a9a937e695746331e0a000000000000000000000000000000000000011527374b5d6575675f4e4a3d32281b0a000000061a2c3d494e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4a43362513000004182a3b474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c473a2a17040000000000000000000000000000081624313e4a55606a767f878f969b9faba6a9aaaaaaa9a8a6aa9f9b968f877f75686054483b2d1f1002000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000000000000000311212e3f4b5d667c8b9fabbccfe3ccbbb59f8d7c665b4a3828160200000000000000000000000000000c2035495a6f849aafc4d5e7dfcbb7a6907b65503844556c8196abc2d3e5e0ccb8a7927d67523d2c1a060000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b75727272727375797f87959fabbccfe3e0ccbcb49e8a77624c3b2a180500000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d484848484848484848484848484848484838352b1e0e0000000917222a2d30303030303030303029261f14060000081621282b3030303030303030302a2820150700000014293e53697e848585858585858585848075614b402f1a0a17293a4e5f687d8485858585858585848376614c36210c0000000000000000000000000000000000000009192e3f4b5560554d41362d1e160a00000000000e1f2c3538383838383838383838383838383835302518080000000c1d2a3437383838383838383838383838383837332a1c0c000000000000000000000000000008162634424e5c64747f89949da5abb1b4bcc9bebfc0bfbebdc8bbb4b0aba59d94887e7262594a3d2e2010000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000000000000000000000000000311212e3f4c5e677d8d9fb5becfe3cfbcab9e8a79635645321e0f00000000000000000000000000021527374d63788c9fb5cadff2ddc8b29d8874604b35374f647a8fa4b6cadee8d5c5b09a85705b4936210a0000000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76615d5d5d5460646974808d9fb5c0d1e4e1ccb9a897826d5947341f0b00000000000011263b50667b90a5bbd0e5f7e1ccb7a28c77625e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e4d483c2b1906000000050f15171a1a1a1a1a1a1a1a1a13110b0200000000040e14161a1a1a1a1a1a1a1a1a15130d030000000012263b4f60696f6f6f6f6f6f6f6f6f6f6b615746322212000c1c31414e5f676e6f6f6f6f6f6f6f6f6e615746331e0a000000000000000000000000000000000000000011212e37444b443730211a0f03000000000000000e1a21232323232323232323232323232323201c130800000000000c181f222323232323232323232323232323211f170c000000000000000000000000000006162634445160687a86949ea7b2b7c3c6cacfd9d3d4d5d5d4d3d8cecac6c3b6b2a69d938477635b4a3e2e1e0e0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000000000000000000000000000311212f404d5f697f94a0b2c2d3dac9b9a89c8674604b3d2d1a07000000000000000000000000081d3144556b8095abbccfe3e5d2c1ab95806b544330364a5c72879cb1c7dcefddc8b4a28e79634e3828160200000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b4736434b4e55606b7f94a2b4c8dde8d6c6b49f8b77624c37220d00000000000011263b50667b90a5bbd0e5f7e1ccb7a28c7873737373737373737373737373737373737373625a4835200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f535a5a5a5a5a5a5a5a5a59564b46392916040000132331414d52595a5a5a5a5a5a5a5a594c46392917030000000000000000000000000000000000000000031119273135312719120700000000000000000000060c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b070000000000000000040b0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0a040000000000000000000000000000021424344451626b7e8b9ca4b3b9c5cad4dbdfe3e9e1dedcdbdbdcdee1dfdbd4cac4b8b3a29a8879645c4a3c2c190600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000000000000000000000000000003112230414f616d8298a4b6c9dad6c6b6a496816c5b4a3621100000000000000000000000000b20364b6074889eb3c9daecdec9b5a38e79634e36262d3e556a7f95aac0d1e4e4d1c0ab96816c5645321e0900000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3626303537444b6170859bb0c9d9ebe2cebbaa947f695436261401000000000011263b50667b90a5bbd0e5faf3ddc8b39e888888888888888888888888888888888888888878624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e45454545454545454544403632291b0b00000005132330393d444545454545454545443633291b0b000000000000000000000000000000000000000000000009151d201d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020314251626b80939fa9b6c2ccd6dfe6e5dedbd6cdc9c6c5c6c7c9cdd7dadddfd5cbc0b3a69d897a645a4935200c00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000000000000000000000004122332434b6175869cabbccfe3d3c2b49f8c79634e3e2d1b070000000000000000000006192c3c52677c91a6b8cbe7ebd9c9b19b86715b4a361823384d62788da2b4c8ddefdec8b39e8975604b36210f00000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36211c2027314351677c91abbccfe3ead8c8af9a846f5443301c08000000000011263b50667b90a5bbd0e5faf5e0cbb8a69e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d8d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f26293030303030303030302f2b211e160b000000000005131e25272f30303030303030302f211e170b0000000000000000000000000000000000000000000000000001080b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f11171b1d1e1f1e1b18130d0b05000000000000000000000000000000000a1a2e3e4e606b80969eb4bac7d3e0e8e7e0d2c9c6c6b9b4b1b0b0b2b4b9c6c5c8d1dee0d0c4b7a79e8878624d38230d00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000000000000000000000000000000000004141e324657657b8d9fb5c9dae3cfbcab9a846f5c4a362209000000000000000000000c2035495a6f849aafc4d5e7e3cfbcab947f69543d2d1a2035495a70859bb0c8d8eae0ccb8a7927d67523d2d1a07000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0b1521364c61768b9fb4cadff3dec9b49e8975604b35200b000000000011263b50667b90a5bbd0e5fafbe7d5c5b8b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c12141a1a1a1a1a1a1a1a1a1a160c0a0300000000000000010a1012191a1a1a1a1a1a1a1a190c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121c24262d3132343433312d292220180d0500000000000000000000000000021528384a5c687e939eb0bcced8e5efe3d5cbc2b5b1a9a89e9c9b9b9c9ea8a8b0b4c0c9d2dbcdbcaf9d927d68533d281300152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000001080b0d0e0c0b04000000031628394b5d6e8398abbccfe3d9c9b3a28e79644f372614010000000000000000021527384d63788c9fb5cadff3dfcab49f8b77624c37220f192b3c53687e93aabbcee2e8d6c5b09a85705b4a36210a000000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000a1f33465873889db3c8ddf2e1ccb9a88c77624d37220d000000000011263b50667b90a5bbd0e5f0f0f0e3d5cbc8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b09020000000000000000000000000000000000000000000000000000030a0c1015191a1c1d1d0d0c06000000000012222f383b42464849494846433e37342b20180d000000000000000000000000091d324556647a8b9fb4bccde2eaeedfd1c5b8b3a49c938d8987868687898e929ba2b1b5c2cdbdb09e947f6a604e3a251100152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000003090c1014141d202224221f180c0400000b1b2e3f4e63798c9fb5cadfe7d0c0ac97826c5544311d080000000000000000091d3145566b8096abbccfe3e9d7c6af9a846f594834200b0e21374c61768a9fb4c9dff3ddc8b4a28e79634e382816030000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0005182b3b5c72879cb1c7dcf1e8d6c6a38e79634e39240e000000000011263b50667b90a5bbd0dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbcdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000090f112020202020202020202020202020202020202020202020202020202020202020202016140d040000000000000000000000000000000000000000000000000000000000000000000000000000000000020a151d201d150a0000000000000000000000000000000000000000000000070b171e21262b2e303132322320190e000000091c2f404c51575b5d5e5e5d5b58534c483b342b1d120400000000000000000004182a3a4b6074869caabbcedaeaeeded0c1b4a69e92867e78747170717275787d858f9ba3b1bdb09f95806b615042311e0b00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bacfdadacdb8a28d78634d38230e000000000b161e212629263135373937342a1f180c00001121364a5b70859bb0c5dbeedec9b39e8974604b35200b00000000000000000b20364b6075889eb3c9daece1cdbaa8927d67523b2b18050a1f3347586e8499aec6d6e8e4d1c0ab96816c5645321e090000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c070e2034485973889eb3c8ddf3e4cfb9a48f7a644f3a250f000000000011263b50667b90a5bbc6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b8a28d78634d38230e0000000000000000000000000000000000000000000000000004121d2427353535353535353535353535353535353535353535353535353535353535353535352b282116080000000000000000000000000000000000000000000000000000000000000000000000000000000a151d28323632281a0e0000000000000000000000000000000000000000020f1a212933363b40434546474738352c1e0e00000f24384c5e666c7072737473706d6862594d483b3022130500000000000000000a1f3347586a7f95a4b6c8d8eaf1e1d0bfb3a39b887d7369635b5c5b5b54606368707a8597a0ab9f96816c6250433323130100152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5bac4c4c4c4b8a28d78634d38230e0000000b1b2832363b3f37444b4d4e4c473b342a1c0c00071a2d3d54697f94a9bed4e9e0ccb9a78e79644e39240f0000000000000006192c3c52677c91a6b8cbe7f4dec9b49f8a76614b36210d0004172a3a52677c91a8b9cce1efdec9b39e8975604b36210f0000000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3621131c202c3b4d62778ca7b8cce0f5e7d5c5a38e79634e39240e000000000011263b50667b90a5b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a28d78634d38230e00000000000000000000000000000000000000000000000000122230393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a403d3326160400000000000000000000000000000000000000000000000000000000000000000000000005121a273138454b45382b1e0e0000000000000000000000000000000000000a161e2d3639464b5055595a5b5d5d4d493c2c19060011263b51667c82868789898886827e776c62594d4031231301000000000000021527384c6177899eb4c2d3e6f6e6d4c3b3a19a85766860544e493d4636434b4e535d6474829096928172604a44332515050000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8fa5afafafafafafa28d78634d38230e000003162839464b5054585560626361594c473a2a18040010253a50657a8fa5bacfe4e8d6c5a8937e68533e2913000000000000000c2035495a6f849aafc5d5e7e7d5c4ad98826d5746321e0a00000c21364b6075899eb3c9def2e0ccb9a7927d68523d2d1a0700000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362e2530353c4959697e94a9c5d5e7f5e0cbb8a68c77614c37210c000000000011263b50667b909b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8d78634d38230e000000000000000000000000000000000000000000000000091d30404c516060606060606060606060606060606060606060606060606060606060606060606055504433210d00000000000000000000000000000000000000000000000000000000000000000000000d19202f38454b566056493c2b1906000000000000000000000000000000000c1a28323d4a4e5761656a6e6f717272625a4935200c00182d43586d82979b9d9e9e9d9b98938b8277665e4e41311f0f000000000000091d3145566b8095a8b9cce0f0ebd9c8b7a59a837561584b4336352c31263035393f4b56606d7b817d7260544330261607000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a3520000010253a50657a8f9a9a9a9a9a9a9a9a8d78634d38230e0000091e3246576165696d717577797770615947341f10000d22374d62778ca2b7cce1ead5c0aa95806b55402b16000000000000021527384d63788c9fb5cadff3e0cbb8a6907b6650392916030000091e3245566d8297adc4d4e6e8d6c5b09b85705b4a36210a00000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76614b434436434a4e5a6377899eb3c8def3f3ddc8b39e88735847331f0a00000000000f253a4f647b8686868686868686868686868686868686868686868686868686868686868578624d38220d0000000000000000000000000000000000000000000000000f24394c5e66757575757575757575757575757575757575757575757575757575757575757575756b62503d2814000000000000000000000000000000000000000000000000000000000000000000000d1d2b34404c56606975625a493520110000000000000000000000000000000c1c2a38454b5c646d767b80838586878778624d38230d00172c41576c8196acb2b3b3b2b0adaa9f978a7c68604e3d2c1a0600000000000b20364b6075889eb3c6d6e8f7e2cebbaa9d87766157473a3026211a1b141c20232e38454b5e666c686054433625130800000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a352000000f24394e647a8485858585858585858477624d37220d00000c21364b61757b7e8286898c8e8c8477614c3e2e1b080b21364b60768ba0b5cbe0ecd6c1ac97816c57422c17020000000000091d3145566b8096abbccfe3f2ddc8b39d8874604b35200b0000000216283850657b90a6b7cbdff3ddc8b4a38e79634e39281603000000000011263b50667b90a5bbd0e5f5e0cbb6a08b76615959595a5460636b78869ca7b8cce0f5e7d5c5ae99836e593a2a170400000000000d22374b5d6471717171717171717171717171717171717171717171717171717171717171625a4834200b00000000000000000000000000000000000000000000000011273c51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a806b55402b160000000000000000000000000000000000000000000000000000000000000000000c1c2b3c484d5e66747f8878624d402f19090000000000000000000000000009192a3a4756606c79828a9095989a9b9c8d78634e38230e00152b40556a8095aabfc8c9c8c5c8bbb4a89f8d7e685b4936210f000000000215273752677c91a6b8cbe4f4f4dfcab49f8c7a655746392a1c1408060001080b101a2832404c5056524a43362518080000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a352000000d21364a5c646f6f6f6f6f6f6f6f6f6f62594834200b00000e24394e63798e94979b9fa9a3a299836f5c4b3722130e21364c61768ba1b6cbe0ecd7c2ad97826d58422d180300000000000b20364b6075889eb3c9daece5d3c2ab96816c5544311d08000000000b20354b6074889db2c8ddf0e4d1c1ac96816c5745321e09000000000011263b50667b90a5bbd0e5f5e0cbb6a08b756e6e6e6e6f707479808a9ca4b6c5d5e8f1e0ccb8a7927d67523d2812000000000000081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4d483c2b190500000000000000000000000000000000000000000000000011273c51667c919f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f95806b55402b1600000000000000000000000000000000000000000000000000000000000000000417293a485a626f7c879499836e5e4c3727150200000000000000000000000215273747586174818e989fa9aaaeafb0a38d78634e38230e0014293f54697e94a9bec2c9ccd6d8cec6baab9f8b79634e3d2d1a07000000081d3144556e8398adc5d5e7f6e3d0bfad97826d5d4b39291b0c01000000000000000a151d2f383b413d3530251808000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200000071a2d3d4a4e5a5a5a5a5a5a5a5a5a5a4d483b2b180500000b20354a6074899eadb0b4bac0b3a18f7a644f4131242327384e63798ea3b8cee3ebd6c1ac96816c57412c17020000000006192c3c52677c91a6b8cbe7f7decab6a48e79644f3726140100000000081c3043546b8096abc2d2e5efdec9b39e8975604b36210f000000000011263b50667b90a5bbd0e5faeed8c3ae9983838383838486898e969fa8b6c2d3e3efe1d1c1b39e8875604b36210b0000000000000010202e373a4646464646464646464646464646464646464646464646464646464646464638342b1d0d0000000000000000000000000000000000000000000000000011273c51667c91a6b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000a1f334658627883909ca4a1907b665544311d090000000000000000000000081d314455617685979fadb4bac7c3c4c2a38d78634e38230e0013283d53687d92a8aaadb4b9c6d5e2d7c9baa99a85705b4a36210c0000000b20364b6075899eb3c9def3f1dcc7b3a18e79634e3f2e1b0b0000000000000000000002111c23262c28201c130800000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7e2cdbaa98a75604a35200000000f1f2d3b484c5e666d6f6f6b645c4b45382b1d0d000000071c3043546f8499afc6c9cdd0bfaf99846f5f4d413938374556697e93a8bed3e8ead8c7a9947f69543f2a1400000000000c2135495b6f849aafc5d5e7ecdac9b19c86715c4a3619090000000000011426364e63798ea4b5c9def7e0ccb9a7927d68523d2d1a070000000011263b50667b90a5bbd0e5faf0dbc6b3a199989898999a9b9ea8abb4bac6d3e0eae2d2c3b4a3947e695745321e090000000000000002101b2225313131313131313131313131313131313131313131313131313131313131312220190d000000000000000000000000000000000000000000000000000011273c51667c91a6bbcacfc6c2bebebebebebebebebebebebebebebebebebebebec0c4cdcac0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000c21364c61768899a1b2b6b29c8774604b37271502000000000000000000031629394b6074849aa3b1bdc9cec2b6b1ada48d78634d38230e000f253a4f647a8f9495989ea8b8c4d5e7d7c7b4a28e79634e39240e0000000f243a4f64798fa8b9cce1f5efd9c4af9a846f5b4a36211000000000000000000000000000090f1117130b07000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e482a1e16283e53687d93a8bdd2e8dfc9b49f8a745f4a351f00000417293a4859626f7b82858480796d6056453727150200000013253654697e93a8b9cde1dcc7b3a1927d675f524e4d4f556074869cb1c7dcf1e2cebaa9907b66503b261100000000021527384d63788da2b4c8e3f3e3cfbcab947f6a553e2d1b000000000000000821364a5b71869cb1c9d9ebe8d6c5b09b85705b4a36210a0000000011263b50667b90a5bbd0e5faf6e2cfbfb3aeaeaeaeaeafb0b3b9c6c9cdd7e4e2d8cec1b5a59b8573604b39281603000000000000000000080d0f1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0d0b0500000000000000000000000000000000000000000000000000000011273c51667c91a6bbcfbeb2ada9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9abb0bccdc0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6b3bfcab6a4927d685544311d080000000000000000000a1e3246576a7f94a2b4c2cec8bbb4a49c98958672604a35200b000d22374b5d667b7f80838a9ea6b8cbe0e5d1c0ab96806b56412b1600000014293e53697e93a8c6d6e8fbe7d5c5a8927d68533d2d1a020000000000000000000000000000000001000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d887354473a32282d3e556a8095aabfd5eaddc8b39d88735e48331e00000a1f33465862778490979a99968e8274605544311d080000000c21364c61768a9eb4c6d6e3d0bfb49f8c7d6f6864636469738298a4b6cadef3dfc9b49f8a76614b36210c00000000091d3145566b8096abc0d1e3f4dfcab59f8c78624d38221000000000000000071a2d3d546a7f94abbccfe3f4ddc8b4a38e79634e3928160300000011263b50667b90a5bbd0e5f0f0edddcfc6c3c3c3c3c3c4c5c9ccd6dee1ded8cec8bbb4a39b8777625544311b0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbc6b2a0989393939393939393939393939393939393939393969eb0c4c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4b5c9d3c3b29d8774604b3626140100000000000000000c21364b6176889eb3c0d1cebbaa9f9287837f77615443301c0700081b2e3f4c5e66696b6d78889eb3c8ddeedac5b09a85705b392816030000172d42576c8297acc1d7ecf5e0ccb8a78d78624d38220f000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9dec8b39e887361594b46393d4a5c6f849aafc4daefdbc6b19c86715c47311c00031629394c6176869aa2acafafaba0978474604b3625130000000a1f3346586c8197a8b9cde1e2cebbaa9f92847d79787a7e8698a0b2c2d3e5e3cfbeae99836e5746331e0a000000000b20364b6075889eb3c8ddeeead7c7af9a85705a4835200b00000000000000000f22374d62778b9fb4cadff4e4d1c1ac96816c5745321e0900000011263b50667b90a5bbd0dbdbdbdbdbdbdbd8d8d8d8d8d9dad9d7d5d7cdc9c7bab4aa9f96857762594737261400000000000000000000000000000000000000000000000000000000000000000000030d13152020202020202020201e1c160c00000000010b111320202020202020202020201b1206000011273c51667c91a6bbc2ad98827e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8096abc0c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000b20354a6073869cb1c5d5cab7a5927d685443301c08000000000000000013283d53687d92a7b8ccdfcab49f8c7d726d6a61594736251300000010202f404c5054555a6b8095aac0d5eadec9b49e89745746321e0900001a2f455a6f849aafc4d9eff3ddc8b39e88735a4835200b000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e0ccb8a79a847769615757575c647a8d9fb5cadfedd8c3ad98836e58432e19000a1e3246576c8197a4b4c0c4c4beb1a2947f695443301c0700000417293a4d62788a9eb4bfd0ded9c8bbb4a29a928e8d8f939ca4b2becee0e4d5c5b2a08f7a644f39291703000000061a2c3d52677c92a7b8cce0f5e2cdbaa9927d68533c2b190500000000000000000b2034485970859aafc7d7e9efdec9b39e8975604b36210f00000011263b50667b90a5bbc6c6c6c6c6c6c6c6c6c6c6c6c6c5c5c4c2c0c7bab4afa99f988b80746259483b2a1909000000000000000000000000000000000000000000000000000000000000000000071520282a3535353535353535353330291e10000005131e252835353535353535353535352f2416060011273c51667c91a6bbbda7927d6969696969696969696969696969696969696969798ea3b9c0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000071c304354687d93a7b8ccd4c3b29d8773604b35200e0000000000000003182e43586d8398adc5d5d7c2ad98826d5f58554c473b2a18080000000211222f383b3f3c51677c91a6bcd1e6e1cdb9a88b76614b36210c00001d32475c72879cb1c7dcf1f0dac5b09b85705b3c2b1905000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e8d5c5b3a29a897e766f6c6c6f79879dabbccfe3e3d1c0a8937e69533e2914000c21364b61768a9fb4c2d1dad9cec0b29d8873604a35200b0000000b2035485a687e93a1b3bfd0e0d9cec0b4afa7a3a2a4a9b1b6c2cedce3d5c6b8a698836e5c4a361b0b000000000c2135495b70859aafc5d5e7f0dfc9b49f8a76614c36210e00000000000000000005192b3b53687d92a9bacde1f0e0ccb9a7927d68533d2d1a07000011263b50667b90a5b1b1b1b1b1b1b1b1b1b1b1b1b1b1b0b0afadaba7a99f9a938a82796b6056483b2b1d0d000000000000000000000000000000000000000000000000000000000000000000031525333c3f4a4a4a4a4a4a4a4a4a48453b2e1e0c011323313a3d4a4a4a4a4a4a4a4a4a4a4a423424120011273c51667c91a6bbbda7927d6854545454545454545454545454545454545464798ea3b9c0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000001325364b6075889eb3c8ddcab6a5907b66513c2b19050000000000000417293a5d72889db2c7ddd7c6a48f7a644f414037342a1d0c000000000003111c23262a3b50657b90a5bad0e5e9d7c6a28c77624d37220d00001e33495e73889eb3c8ddf3edd8c3ae98836e59432e1900000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9f3e3d0c0b3a79e938a848181858c9da5b7c9daecdcc8b4a28d79634e38230e0010253a4f657a8fa9bacde0eeecdfcbb7a68d78624d38220d00000006192b3c4e606e8399a1b3bfccd6e0d1c8c4bdb9b8b9bec6cad3e0ddd1c5b8a89e8878624d3e2e1b00000000021528384e63788da2b4c8dbdbdbd4c3ae98836e5846331f0a000000000000000000000d21364c61768a9fb4c9dbdbdbd6c5b09b85705c4a36210b000011263b50667b909b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a999795928f89847e776d635b4b45382b1d0d000000000000000000000000000000000000000000000000000000000000000000000d20334350556060606060606060605e594c3b29160b1e31414e52606060606060606060605e52422f1b0011273c51667c91a6bbbda7927d68523e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e4e64798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000081e3245566b8095abc1d1d4c3ae99846f5a4835200b0000000000000a1f334658758a9fb4cadfcdbaa88b76614c362a221f180c0000000000000000090f11253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00001f34495f74899eb4c9def3ecd7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9f5e5d8cec5b8b3a89f9997969a9faab7c3d4e7e1cfbeaf9a84705b4935210c0011263b50667b90a5c2d3e5f9f6e2cebbaa8e78634e39230e000000000e1e31424b60748399a1b3b9c5ccd6dcdad2cecdcfd3dcdfdcd2c9c0b4a79e8a7a645a4835201000000000091d3245566b8096abc0c6c6c6c6c7b7a5917c66513a291704000000000000000000000a1f3346586e8398aebdc6c6c6c6c6b4a38e79644e39281603000f253a4f647a8686868686868686868686868686868686858482807d79756f6962594e493d32281a0d000000000000000000000000000000000000000000000000000000000000000000000013283c50616a757575757575757575736a5945301c11253a4e5f6875757575757575757575705e4a35200011273c51667c91a6bbbda7927d68523d2929292929292929292929292929394e64798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000021628384e63788da3b4c8dfcab49f8b78624d38220e0000000000000c21364c61768baabbcedec9b49f89745846331f0c0b04000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00001f354a5f748a9fb4c9dff4ecd7c2ac97826d57422d1802000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ead8c7bab4b4babab4aeacacafb4bbc8d4e1e2d2c3b2a0917c66513d2c1a06000e23394e63788ea4b6cadee6e6d8c8b49f8a76614c36210c0000000000141e324556607483929ea7b3b8c5c7cad3cfd0d1dacfcac7c1b5b0a29a897c655c4a3c2b1902000000000b20364b6074889eb1b1b1b1b1b1b0a99d8774604b36200b00000000000000000000000417293a50657b909faeb0b1b1b1b1b1ac97816c5746321e09000d22374b5d647171717171717171717171717171717170706f6d6b68646056534c473b352c1d150a000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f8a8a8a8a8a8a8a8a8a88735e48331e13283d52687d8a8a8a8a8a8a8a8a8a8a75604a35200011273c51667c91a6bbbda7927d68523d2814141414141414141414141424394e64798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000a2135495b70859bb0c9dacfbcab957f6a553c2c190600000000000d22374c62778ca1c8d8dfc9b49f8a745544311d080000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00001f34495e74899eb3c9def3edd8c3ad98836e58432e1900000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e2cebaa99f9fa8b6c2c4c1c1c4caced9ded8cec2b5a598826e5e4c381f0f00000c2135495b72879cb1bccad3d1c8bbaa9a846f5746331e0a0000000000031628384556606e7d89969ea7adb2b6c3babbbbc9bcb5b1aca39b918478655d4c3e2e1e0e000000000012273d52677c929b9b9b9b9b9b9b9b978b7b655544311d080000000000000000000000000b23384b5d6c8191999b9b9b9b9b9b9b9b8975614b36210c00081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5b5a5856524f4b453837342a211a0f0200000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f949f9f9f9f9f9f9f9d88735e48331e13283d52687d929f9f9f9f9f9f9f9f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000061a2c3d53687e93abbccfd9c9b19b86715a4935200c00000000000b21364b60768baabbcee2cebaa98a75604b35200b0000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00001e33485e73889db3c8ddf2efd9c4af9a846f5a36261401000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9dfc9b49f8b899ca4b3b9c6caced9cfd3cac8bbb4a49c8776614c402f1d010000061a2c3d51677c919eb2b6c3c0b4aa9f8c7a644f392917030000000000000a1a2838454b606877818992989ca4a3a5a6a6a5ab9f9c978f857c7362594c3f2f2010000000000000172c41576c818686868686868686858279655d4b37271502000000000000000000000000081c2f3f51636c7c838686868686868686857b66503b2611000010202e373a4646464646464646464646464646464646454442403d3a363127221f180d06000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aab5b5b5b5b5b39d88735e48331e13283d52687d92a7b5b5b5b5b5b59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000e22374c62778b9fb5cadfc9b5a38d78624d38230d0000000000091e324556748a9fb4c9dfd8c7a18b76614c36210c0000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00001c31475c71869cb1c6dbf1f0dbc6b09b86715443301c08000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d887986949ea8afb4bbc8bac2b6b1aa9f968677625847332212000000000f24394d5f6b80919ca5a6a5a29a8c7d675c4a361b0b00000000000000000a1a2832424e59626c757d82878c8e8f9191908e8b87817a71676054483b2f211102000000000000152a3e52636c7171717171717171706d635b4b3f2f1909000000000000000000000000000011213445515f676e717171717171717171665e4c38230f000002101b22253131313131313131313131313131313131302f2d2b2824201d150d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfcacacac8b39d88735e48331e13283d52687d92a7bdcacacacab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000b2034485970859bb0c5dad2c2a9947e69543727150200000000031628385e73889db3c8ddccb7a28d77624d38220d0000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000192f44596e8499aec3d9eef3dec9b39e8974604b35200b000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d8873757f89949a9faaa4a5a3a49c958b80766259483a2a1704000000000a1d304150626b7c878e91908d857a675f4d3e2d1b000000000000000000000a151d313b484d5660676d7276797a7b7c7b7976726c655d514b43362b1d1103000000000000000f22344552575c5c5c5c5c5c5c5c5b574e4a3d2f211100000000000000000000000000000003172734414d51595b5c5c5c5c5c5c5c5c504c402f1c0900000000080d0f1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1b1a1816130f0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4dfddc8b39d88735e48331e13283d52687d92a7bdd2dfdfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000005182b3b54697f94a9c5d5dac4af9a856f5544311d0800000000001b30455b70859ab0c5dacfb9a48f7a644f3a250f0000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000162c41566b8196abc0d6ebf5e0ccb9a78e79634e39240e000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d8873606a777e858a8d8f8f8e8c8780786b6157483b2a1c0c00000000000012233344505f6772797b7b7770645c4d41302010000000000000000000000002131d2b3438454b52585861636566666664615757504b3f353026180d000000000000000000051727343e414646464646464646464239362d1f11030000000000000000000000000000000008172330393c444646464646464646463b382f2212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea7b8ccdec9b49f8975604b36200b0000000003182d42586d8297adc2d7d1bba6917c66513c27110000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000012273d52677d92a7c3d3e6f9e8d6c5a8937d68533c2c19060000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e596169707678797a7876716b635b4c46392a1d0d0000000000000004162633414d515b636666625a4f4b3e30231302000000000000000000000000000d18202832363d3a474c4e505151504e4c46393a372e201c140800000000000000000000000917222a2c3131313131313131302d24211a0f0100000000000000000000000000000000000005121d24272f31313131313131313126231c120400000000000000000000000000000000000000000000000000000000000000000000000000090f11202020202020202020202020202020202020202020202020202020202020200e0c0600000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074899eb3c8decdbaa98f7a644f3a250f0000000000152a3f556a7f94aabfd4d3bea8937e69533e29140000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000d23384d62788da5b6cadff3eed9c4ae99846f5a4935200f000000000000000000000000050b0d14140d0b05000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e474c545660626465636158554d493c33291b0d00000000000000000008162330393d4a4e51504d483c372e201305000000000000000000000000000000050a161e2128293337393a3c3c3b3936332925231c11080100000000000000000000000000050f15171c1c1c1c1c1c1c1c1b180e0c07000000000000000000000000000000000000000000010a1012191c1c1c1c1c1c1c1c1c110f090000000000000000000000000000000000000000000000000000000000000000000000000004111c2326353535353535353535353535353535353535353535353535353535353535352320190e000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000081c3043546e8399aec3d8d7c7a9947f69543f2a14000000000012273d52677c92a7bcd1d5c0ab96806b56412b160100000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000b2035495a72879cb2c7dceef4dfcab49f8c78624d3d2d1a0a000000000000000000010d181f22292a2220190d0000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e483738454b4d4f504e4c473a38352c1e170b000000000000000000000004121d242d36393c3b38342b221b100200000000000000000000000000000000000003090b12171f21242526272624211e17100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a38352c1e0e0000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000001142636546a7f94a9c9dad8c3ae99836e5938281502000000000f243a4f64798fa4b9ced8c2ad98836d58432e180300000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000006192b3c566b8096abc0d1e3f7e3cfbcab96816b5c4a38281a0c0100000000000009141d2a34373e3f37342b1d0f01000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e4833283236383a3a393733292321190e0300000000000000000000000000000a0f1a212426262220190d08000000000000000000000000000000000000000000000000040a0c0e101111110f0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f112020202020202020201a171107000000000000000000000000000000000000060c0d181e20202020202012100a00000000091c2f404c50606060606060606060606060606060606060606060606060606060606060605e493c2c190600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000010253b50657b90abbccfdcc7b19c87725645321d09000000000c22374c61778ca1c6d7dac4af9a856f5a45301a0500000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000f24394e64798ea2b4c8dcefebd9c9b49f8b79645645382a1d150d0b0b0c0e111926313b474c54544d483b2c1f0f000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e4833161e2123242523211f170e0c06000000000000000000000000000000000000070c0e11110d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c23263535353535353535352f2c24190b000000000000000000000000000000000e1920232e3335353535353527241d120400000f23384c5e6675757575757575757575757575757575757575757575757575757575757575705a4935200c00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813000000000000000000000f24394e64798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b9fb5cadfcab49f8a75604b36200b000000000b20364b60758ba8bacddbc5b09b86705b46311b0600000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000d21364a5c70859aafc0d1e7f7e2cebbaa9c86746056473a31272321202123262f37444b596269696259493d2c1b0a0000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090b0d0f100e0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711171920202020202020201e190e0c06000000000000000000000000000000000000000000010a10121c1f2020202020202020110f0a000000000011222f383b4a4a4a4a4a4a4a4a4a4440372919070000000000000000000000000002101e2c353843494a4a4a4a4a4a3c39302312000011263b50667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78634d38230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2813040404040404040404040f24394e64798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465872889db2c7ddcebbaa8e79634e39240e00000000081d31445574899fb4c9dcc6b19c87715c47321c0700000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000071a2d3d51667c91a2b4c9d9ebead8c8b5a499837461594b443738363536383c404c556069777e7f78635b493928160300000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000000000000070b0e111415161514110e0b07000000000000000000000000000000000000000a18242c2e3535353535353535342e2320190e0000000000000000000000000000000000000005131e25283134353535353535353527241d12040000091c2f404c506060606060606060605954473724110000000000000000000000000010202d3c494d585e606060606060514d41301d0a0011263b50667b909f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8d78634d38230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2819191919191919191919191924394e64798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000000417293a5a6f859aafc4dad9c8a7917c67523c27120000000e192032455674899eb3c9dcc7b19c87725c47321d0700000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000f24384c5e70859aabbccfe3efe6d2c2b3a1998477696055514d4b4b4b4d51565e66737f8993948879635745321e1301000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000002080b131c202327292a2b2a292723201c130b080100000000000000000000000000000718283640444a4a4a4a4a4a4a4a494338352c1e0e000000000000000000000000000000000006142330393d464a4a4a4a4a4a4a4a4a3c3930221200000f23384c5e667575757575757575756f6554402c170300000000000000000000000d1d2d3e4a5a626d73757575757575675f4d3924100011263b50667b90a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a28d78634d38230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d68523d2f2f2f2f2f2f2f2f2f2f2f2f2f2f394e64798ea3b9c0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000000172d42576c8297acc1d7d3bea9947e69543f291400000e1e2b35364b60768ba7b9ccdac5af9a85705a45301b0500000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000091d2f404f647a8c9fb4c1d1e1f0e0d0bfb3a29a897e746c666260606163666b727b86949ea8a69c8675604b41301f0f000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000000000000000000000000000000000000000000000000000000000000000209151d20253035393c3e4040403e3c39353025201d14090000000000000000000000000011243646535960606060606060605e594d493c2c1e0e00000000000000000000000000000000142431414d525c5f6060606060606060514d40301d0a0011263b50667c8a8a8a8a8a8a8a8a8a836f59442f1a04000000000000000000000a1a2b3b4a5c647883888a8a8a8a8a8a7d67513c27120011263b50667b90a5bbcacacacacacacacacacacacacacacacacacacacacacacacacab8a28d78634d38230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d6852444444444444444444444444444444444e64798ea3b9c0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4d5c0ab96806b56412b160005192b3c484d54657b90a5c5d6cfbeab96806b56412b160100000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000001222364a5c6b8095a3b4c3d4e2edddd0c0b4a79e9388817b78767576787b8087909ba3b4b9b6a497826d5f4d3d2c19090000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000000009151d27313636434a4e515455555554514e4a43363531261c13080000000000000000000000172c4053646e7575757575757575736e635a493c2b190600000000000000000000000000000b1b31424e5f6771747575757575757575665e4d39240f0011263b50667b909f9f9f9f9f9f9f99846f59442f1a04000000000000000000021527384859647a89989e9fab9f9f9f917c67513c27120011263b50667b90a5bbd0dfdfdfdfdfe3dcdad9d9d9d9d9d9d9d9d9d9d9d9d9d9d9cdb8a28d78634d38230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d6859595959595959595959595959595959595964798ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2d7c2ad98826d58432d18000b2035485a6267728399afc4d0c2b2a08e79644e39240f0000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000071b2d3e4b6074859ba5b6c4d3e0edded1c5b9b3a69d96908d8b8a8b8d91969ca5b1b5c1ccc2b19f927d675b493726140100152a3f556a7f94aabfd4e2ddc8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000021019273137444b5254606366696a6b6a6966636054514b44373025180f01000000000000000000192e44596e838a8a8a8a8a8a8a8a888378635a4935200b000000000000000000000000000417293a4e60687d86898a8a8a8a8a8a8a8a7d66513c27110011263b50667b90a5b5b5b5b5b5ae99846f59442f1a04000000000000000002101d3145566277889da7b3b5bcb5b5a6917c67513c27120011263b50667b90a5bbd0e5f4ffeeded0c7c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b8a28d78634d38230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbbda7927d6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e7a8ea3b9c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbd0d9c4af9a846f5a452f1a000d22384d62787d8499a1b3c7bfb3a498836e5c4a36210d0000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000000101d3144556177879da6b6c2cfe0e8e3d6ccc4b7b3aba6a2a0a0a0a2a6abb2b6c3c9d2e1cebeb49e8a79635544311d0800152a3f556a7f94aabfcdcdcdc8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000513202d37444b5560676e74787c7e7f807f7e7c78746e6660554a43362c1f1204000000000000000011263b51667b90a69f9f9f9f9fa79e988878624d392816030000000000000000000000000a1f334658687e929b9fa99f9f9f9f9f9e8874604b36200b0011263b50667b90a5bbcacacac4ae99846f59442f1a040000000000000000102031414b6074859ba6b8c5cacfdabca6917c67513c27120011263b50667b90a5bbd0e5faf7e3d0c0b4afaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea28d78634d38230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbc6b19b858384848484848484848484848484848484848484849aafc5c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b9cedac5b09b85705b46301b00142a3f54697f929aa2b3bfb8b3a1998676614c3e2d1a070000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000215273747596379879ca4b2bfccd5e1e8e0d4cbc8c1bbb7b5b5b6b8bbc0c7cad3dee5ded0c5b8a89c8675604b35200b00152a3f556a7f94aab8b8b8b8b8b39d88735e48331e09000000000000000000000000000000000000000000000000000000061323303e4a556069747c83898e919395959593918e89837c73676054493d30221507000000000000000b20354b6074889db2b5b5b5c5b8b3a698826d5746321e090000000000000000000000000c21364c6176899eb1b4bab5b5b5c0ab96806b5544311d080011263b50667b90a5bbd0dfd9c4ae99846f59442f1a04000000000000000c1c2d3e4e606c8197a3b4c4d5dfe3d1bca6917c67513c27120011263b50667b90a5bbd0e5faf1dcc7b4a29a9999999999999999999999999999999999998d78634d38230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbc9b5a39b99999999999999999999999999999999999999999aa2b4c8c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3b8cddbc6b19b86715c46311c00142a3f54697f94a9b3c0b8a69d90837661584633200f000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000009192a3b495b63788698a0b3b8c5cdd7dee6dfddd6d0cdcbcacbcdd0d5dcdfe2dfd3cac0b3a79e8d7e685544311d0800152a3f556a7f94a3a3a3a3a3a3a39d88735e48331e09000000000000000000000000000000000000000000000000000004132431414d5c64747e8891989ea7a6a9aaaaaaa9a6a79e9891867c72635b4d4032251506000000000000081d3144556b8095abbccfcad5ccc5b49f8a76614b36210c000000000000000000000004172a3a52687d92a8b9c9cdd7cac8b4a28d79634e372715020011263b50667b90a5bbd0e5d9c4ae99846f59442f1a0400000000000009192a3a4a5c687d929fb1c1d1e2f2e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faefdac4af9a848484848484848484848484848484848484848377624c37220d00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbd2c1b5b1aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafb4c0d1c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788da2b8cddcc7b19c87725c47321d00142a3f54697f94a9bec8b39d887b6f6158473a291701000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000000000c1d2c3d495a627683929ea7b4bac6cad3d9dee0e8e2e0dfe0ebe2dfdcd8cecac2b6b1a29a897c68604e3726140100152a3f556a7f8d8d8d8d8d8d8d8d8d88735e48331e090000000000000000000000000000000000000000000000000000112231424e5f677a86939da6aeb3b9c5bebfc0bfbec5b8b3ada49c918579665e4f43322414020000000000011426374d63788c9fb5cadfe8e0cdbaa9917c675239291703000000000000000000000a1f3347586f8499afc6d6e1e9d6c6b09b85705b49351909000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a040000000000011426374759647a8b9fb4bdcedfefffe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c786f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f62594834200b00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7dfcab59f8a75604a35200011273c51667c91a6bbc4c4c4c4c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c4c4c4c4c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca2b7ccddc7b29d88725d48331d00142a3f54697f94a9b9c6b8a69d887d6c635243321d0d000000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000e1f2c3c4858616e7d89969fa8b2b6c3c4c8ccd5cfd0d1d0d9cecac7c8bbb4afa49c918478665e4e4231190900000c21374c617678787878787878787878634d38230e00000000000000000000000000000000000000000000000000000c1d2f404e60687d8b9ca4b2b7c4c9ccd6d3d4d5d4d3d6ccc8c2b6b1a39b8a7c6a614f42312010000000000000092035495a70859aafc5d6e8e9d7c7ae99836e5746331e0c0c0c0c0c0c0c0c0c0c0c0c21374c61768a9fb4c9dff4e1cdb9a8927d68533d2c1a00000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a0400000000010f1d3144556177879da9bacddbebfdfbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77625959595959595959595959595959595959594c483b2b180500152a3f556a7f94aabfd4e9ddc8b39d88735e48331e13283d52687d92a7bdd2e7e2cdbaa98a75604a35200011273c51667c91a6aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca2b7ccdcc7b29d87725d48321d00142a3f54697f949ea8b7c3b7a69d92816c614f3b2a18050000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000000000000000e1e2b3a464c606876818a959ca4a9afb3b8c5babbbcbbc8bbb4b2adaa9f9991867c6f625a4c403124140000000a1f33475861636363636363636363635a4935200c0000000000000000000000000000000000000000000000000004182a3b4c5e687e8d9fa9b6c2cbd4ded3cac7c4c3c5c9cdd7ded3cac1b5a89e8d7f6a604e3e2d1909000000000006192c3c52677d92a7b9cce0f4dfc9b49f8a76614c36212121212121212121212121212a3b53687d92aabbcee2f3dec9b49e8976614b36210f00000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a04000000000f1f30414b6073849aa5b7c7d7e9f9fffbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d444444444444444444444444444444444437342b1d0d0000152a3f556a7f94aabfd4e9ddc8b39d88735e482a1e16283e53687d93a8bdd2e8dfc9b49f8a745f4a351f0011273c51667c91999999999999999999999999999999999999999999999999999999999999999995806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788da2b8cddcc7b19c87725c47321d0010253b50657b828a9da5b7c4b7b39f947f695948341f0b0000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000000000000000e1b2933424e58616c777f878e94999ea7a3a5a6a6a6a5aa9f9c97928b847c73675f4d483c2f22140600000004172a3a474c4e4e4e4e4e4e4e4e4e4d493c2c1906000000000000000000000000000000000000000000000000000b1f344759667c8c9fabbac7d3d8cec9c3b6b2afaeb0b4bac7cad4ded2c6b9ab9f937e685c4a3727150100000000000e21364b6075899eb3c9def0e2cdbaa9927d67523a363636363636363636363636363647596f849aafc8d8eae5d3c2ac97826d5746321e0a00000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a040000000b1b2d3d4d5f6b8096a2b4c3d4e5f5fffffbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d372f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2220180d000000152a3f556a7f94aabfd4e9ddc8b39d887354473a32282d3e556a8095aabfd5eaddc8b39d88735e48331e000f253a4f647a838484848484848484848484848484848484848484848484848484848484848484847d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3b8cddbc6b19b86715c46311c000e23374b5d656e78879db2c7cbbdb49f8a77624c37220d0000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000000000b171f313a474c58616a72797f84888b8e909191908f8d8a87827d776f6660544d41342b1d120400000000000c1c2a333738383838383838383838352c1e0e00000000000000000000000000000000000000000000000000061a2c3d4c6177889eaabbc9d8d6c7bab4aba49c9a999b9fa9b2b7c3d0ddd6c9bcb49f8b7a645544311d090000000000091e3245566c8197acc2d2e5ead7c7ae99846f584b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4c61778b9fb4cadff4dec9b6a48f7a644f3929160300000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a0400000818293a4a5b677d919eb0c0d0e2f2fffffffbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0d0b0500000000152a3f556a7f94aabfd4e9dec8b39e887361594b46393d4a5c6f849aafc4daefdbc6b19c86715c47311c000d22374b5c646f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f675f4d39251000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b9cedac5b09b85705b46301b00081c2e3f4b505a687d92a8c6d7cdbaa9947e69543f29140000000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000000000004131c2a333a474c555c646a6f7376797a7b7c7b7a7875726d686159514b43363020190d00000000000000000c171f212323232323232323232320190e00000000000000000000000000000000000000000000000000000c2135495b6d8297a6b8c8d9d6c6b9a99f968d878584858a929da5b3bfd0dfdacebaa99c8673604b3726140100000000031628384f64798ea3b5c9def4dfc9b49f8a766161616161616161616161616161616161687e93aabbcee2ead8c8b19c86715c4b371b0b0000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a040000132536465863798a9eb4bccddeeefffffffffbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d040404040404040404040404040400000000000000152a3f556a7f94aabfd4e9e0ccb8a79a847769615757575c647a8d9fb5cadfedd8c3ad98836e58432e1900081b2e3e4b4f59595959595959595959595959595959595959595959595959595959595959595959524d41301e0a000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbd0d9c4af9a846f5a452f1a000011212e373c4c61768ca8bacdd7c7ae99846f59442f1a0400000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e0000000000000000000000000000000c171f2a33373e4a4f545a586164656667666563605558524c473a35302618120500000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0c060000000000000000000000000000000000000000000000000000011426374e63788c9fb4c4d5e1ccb9a89e8b8078726f6e70757d8799a1b3c0d1e6d8c7b5a4937e685544311d0800000000000a22364a5c71869bb1c7d7eae2cebaa9937e767676767676767676767676767676767675849ab0c8d9ebe2cebbaa947e69543e2e1b000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a04000e1c3043546176879ca8b9cddaebf7f4f7fdfffbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d372219191919191919191919110f09000000000000000000152a3f556a7f94aabfd4e9e8d5c5b3a29a897e766f6c6c6f79879dabbccfe3e3d1c0a8937e69533e2914000010202e373a444444444444444444444444444444444444444444444444444444444444444444443d3930231301000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdd2d7c2ad97826d58422d18000003111c2333475874899fb4c9dcc6b19c87715c47321c0700000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e00000000000000000000000000000000040c181f222d36393f3a464c4e50515151504e4b44373d37342a201c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556c8196abbccfe2d2c2b39e8a7b6b625a5a59566067758399a2b4c8d8e5d2c2b29d8774604b35200b0000000000071b2d3e53697e93a9bacde2ead8c7ad9c938b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b9aa2b4c8e6f4dfc9b49f8b77614c372210000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a000e1e2f404a60728399a5b6c6d7e9eae2dfe2eaf6ffe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d372e2e2e2e2e2e2e2e2e2e2e26241d120400000000000000152a3f556a7f94aabfd4e9f3e3d0c0b3a79e938a848181858c9da5b7c9daecdcc8b4a28d79634e38230e000002101b22252f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f28251e1305000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4d5c0ab95806b56402b1600000000081c30435474899eb3c9dcc7b29c87725d47321d0800000000000000000000000010253a50657a8fa5bacfe4e2cdb8a28d78634d38230e000000000000000000000000000000000000040a101b22242a293336393b3c3c3b3a3836312728221f180c08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074889eb3c9d9dec9b5a4927d675d4d483c38454b576173849baabbcee2dfcab7a5907b66503b26110000000000001021374c61768a9fb4c9dff1e5cabaada8a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0b0b4c0d1e3e6d4c4ae98836e5947341f0a000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a0b1b2c3c4c5e6a8095a1b3c3d3e4e6d8cec9ced8e6f6e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d4343434343434343434343433c382f221200000000000000152a3f556a7f94aabfd4e9e3d5ccc8c5b8b3a89f9997969a9faab7c3d4e7e1cfbeaf9a84705b4935210c00000000080d0f1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a12100a0100000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d8297acc2d7d3bea9937e69543e2914000000000b20354b60758a9fb5cadbc6b09b86715b46311c0600000000000000000000000010253a50657a8fa5bacfdadacdb8a28d78634d38230e000000000000000000000000000000000000000000070d0f15171f2124252627262523201d15130c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa7b8cce7dbc6b19c86715f4d3f342b283239465563788b9fb4cadfe6d4c3ad97826d583a2a170400000000000a1f3347586e8398adc3d4e6e8d8cac1bdb6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6c5c8d1deeedfcbb7a6907b66503a2a1804000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a162839495a667c8d9fb5bfd0e1e3d5c8bbb4bbc8d8eae6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c776259595959595959595959595959514c402f1d09000000000000152a3f556a7f94aabfd4e8d5c5b8b3a7b4babab4aeacacafb4bbc8d4e1e2d2c3b2a0917c66513d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5a70859aafc5dad8c8a6917c67513c2712000000000c21364c61768babbccfdac5af9a85705a45301b0500000000000000000000000010253a50657a8fa5bac4c4c4c4b8a28d78634d38230e00000000000000000000000000000000000000000000000000040a0c0f10111211100e0b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9c5d5e7d4bea9947f695441302019161e2837495a6d8298adc2d8edddc7b29d87725847331f0a00000000000417293a50657b90a5b6cadff7e8ddd5d2cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbdadce3eeecdac9b29d8774604b35200c00000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f1a1e3246576378899eabbccfdde7d5c5b8aa9faabbcee2e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c786e6e6e6e6e6e6e6e6e6e6e6e6e6e665e4c38240f000000000000152a3f556a7f94aabfd4daccb8a79e919fa8b7c3c4c1c1c4caced9ded8cec2b5a598826e5e4c381f0f0000000000000000000000000000000000030c12141616161616161612100a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889db2c8ddcebbaa8e78634e39230e000000000e23394e63788ea3c9dad8c3ae98836e59432e190400000000000000000000000010253a50657a8fa5afafafafafafa28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adc3d8e4cfbaa58f7a65503a251305030b192c3c51677c91a6bcd1e6dfcab7a58c76614c37210c0000000000000c20354a6073879db2c9d9ebfef0eeded0c7c4c3c3c3c3c3c3c3c3c3c3c3c3c7cad3e0f0f7f8e3cfbcab95806a5443301c0800000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f2132434b6175869ca7b9c9daebd9c9b8a79e8a9fb4c9dfe6d1bca6917c67513c27120011263b50667b90a5bbd0e5faeed9c4ae998383838383838383838383838383837c66513c2611000000000000152a3f556a7f94aabfc4c4c9b39e897c8a9da5b4bac7caced9cfd3cac8bbb4a49c8776614c402f1d010000000000000000000000000000000007142027292c2c2c2c2c2c2c27251d1305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca6b7cbdfc9b49f8a75604b36200b0000000011263c51667b91a6bbd0d6c1ab96816c56412c170100000000000000000000000010253a50657a8f9a9a9a9a9a9a9a9a8d78634d38230e000000000003090b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0700000000000000000000000000000000000000030d13152020202020202020201e1c160c000000000000050b0d181e20202020202020202014120c030000001b31465b70859bb0c5dbe2cdb7a28d78624d38230d0000000e23384e63788da3b8cde2e6d4c3a48f7a644f3a240f000000000000071c3043546a7f95abbccfe3f7f6e3d0c0b3afadadadadadadadadadadadadb1b6c2d3e5f9f4dfcab59f8c78624d3626140100000000000011263b50667b90a5bbd0e5d9c4ae99846f59442f2f3f4f616e8298a4b5c5d6e7e3cfbcab9e898096abc0d5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf0dbc7b3a19998989898989898989898989898947f69543f2a14000000000000152a3f556a7f94aaafafafafab98826d7a87969fa9afb4bbc8bac2b6b1aa9f96867762584733221200000000000000000000000000000000031425323b3f414141414141413c393023130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5c4d4dcc6b19c87715544311d080000000014293f54697e94a9bed3d4bea9947f69543f2a14000000000000000000000000000f24394e647a8485858585858585858477624d37220d000000000a161e212222222222222222222222222222222222222222222222222222201c130800000000000000000000000000000000071520282a3535353535353535353330291e10000000000d181f222e333535353535353535352a2720140700001d32485d72879db2c7dce1ccb6a18c77614c37220c0000000c22374c61778ca1b6cce1e5d0baa5907b65503b2610000000000000001325364d62788b9fb4cadff3f1dcc7b3a29a9898989898989898989898989ca4b6cadef3e8d6c5af9a846f5a493518080000000000000011263b50667b90a5bbd0e5d9c4ae99846f59442b3c4b5d697f94a0b2c2d2e4e0cfbfb49f8d7b7f95aabfd4e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf6e3d0bfb3aeaeaeaeaeaeaeaeaeaeaeaeaea9947f69543f2a14000000000000152a3f556a7f949a9a9a9a9a988d7b656476818a939a9faaa5a5a3a49c958b80766259483a2a1704000000000000000000000000000000000c2032434f5456565656565656524d41301d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637556a7f94aabfd4d8c3ad98836e583727150200000002172c42576c8197acc1d6d1bca7927c67523d2712000000000000000000000000000d21364a5c646f6f6f6f6f6f6f6f6f6f62594834200b0000000a1b283236373737373737373737373737373737373737373737373737373735302518080000000000000000000000000000031525333c3f4a4a4a4a4a4a4a4a4a48453b2e1e0c00000d1d2a343743494a4a4a4a4a4a4a4a4a3f3b32251403001e33485e73889db3c8dde2cdb7a28d78624d38230d0000000e23384d63788da2b8cde2e5d0bba6907b66513b26110000000000000008203448596f8499afc5d5e7efd9c4af9a84838383838383838383838383869cb1c7dcf1e0ccb8a7927c67523c2b19000000000000000011263b50667b90a5bbd0e5d9c4ae99846f594438485a657b8c9fb4becfe0e4d3c2b2a1947f6c8196acc1d6e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faffedddd0c7c4c3c3c3c3c3c3c3c3c3c3c3bea9947f69543f2a1400000000000012273d52677d848585858584837c665d57616c777e858a8e8f8f8e8c8780786b6157483b2a1c0c000000000000000000000000000000000012273b4f61696b6b6b6b6b6b6b675f4d3925100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556e8499aec3d9d6c6a9937e69543e291400000000051a2f455a6f849aafc4d9cfbaa58f7a65503a251000000000000000000000000000071a2d3d4a4e5a5a5a5a5a5a5a5a5a5a4d483b2b1805000003162839454b4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4a4336251300000000000000000000000000000d20334350556060606060606060605e594c3b2916000a1a2a3b484c585e606060606060606060544f4332200c001e33485e73889db3c8dde5cfbaa5907a655038281505000716283850657b90a5bad0e5ecdac9a5907b65503b25100000000000000005192b3b51677c91a7b8cce0e8d3bea9937e6e6e6e6e6e6e6e6e6e6e6e70859bb0c5daf0dec8b39e8975604b36210e000000000000000011263b50667b90a5bbd0e5d9c4ae99846f594445566278889eaabbcedce7d6c6b6a49983726d8297acc2d7e6d1bca6917c67513c27120011263b50667b90a5bbd0e5fafffbede3dbd9d8d8d8d8d8d8d8d8d8d8d4bea9947f69543f2a140000000000001025394d5f676f6f6f6f6f6f6e665e4c464c5962697075797a7a7876716b635b4c46392a1d0d00000000000000000000000000000000000014293f54697f818181818181817d67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074899eb3c9deccb9a88e79644f39240f00000000011527375d72879db2c7dccdb8a38d78634e38230e00000000000000000000000000000f1f2d3b484c5e666d6f6f6b645c4b45382b1d0d000000091e324557606262626262626262626262626262626262626262626262626262605443301c070000000000000000000000000013283c50616a757575757575757575736a5945301c021628384859626d7375757575757575757569614f3b2712001d32475c72879cb1c7dcead5c0aa95806b5645322019181b223245566b8095abc0d5eae3cfbcab8e79634e39240e00000000000000000d20364b6075889eb3c8ddefdac5b09b85705a585858585858585862788c9fb5cadfe4d2c1ac96816c5645321e09000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59424b6074859ba6b8c8d9ebdac9b9a89c8675616d8298adc2d7e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faffeeded0c7c4c4c4c4c4c4c4c4c4c4c4c4bea9947f69543f2a140000000000000a1e30414d525a5a5a5a5a5a58504c40333b484c535660636565636158554d493c33291b0d000000000000000000000000000000000000071c32475c718696969696969696826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa7b9ccdec9b49e8975604b35200b00000000081d31445574899fb4c9decbb6a18c76614c37210c000000000000000000000000000417293a4859626f7b82858480796d6056453727150200000b21364b6075777777777777777777777777777777777777777777777777777872604a35200b00000000000000000000000000152a3f556a7f8a8a8a8a8a8a8a8a8a88735e48331e091e324556627782888a8a8a8a8a8a8a8a8a7f69543f2a14001a2f455a6f849aafc4d9efddc8b39d8875604b41342b2d2d36424b6075889db3c8ddf2dfcab59f8b75604b36210b0000000000000000091d3145566b8196abc1d1e4dfcab59f8c78624d43434343433c54697e94abbccfe3ddc9b5a38e79644e38281602000000000000000011263b50667b90a5bbd0e5d9c4ae99846f594e606d8297a3b5c5d5e6e3cfbcab9e8a7963576d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf7e3d0c0b4afaeaeaeaeaeaeaeaeaeaeaeaea9947f69543f2a1400000000000001132330393d454545454545433b382f1e2a343738454b4e50504e4c473a38352c1e170b00000000000000000000000000000000000000071c32475c71879cababababab97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b546a7f94a9c5d6dac9af99846f5544311d08000000000b20354b60758aa9bacde1cebbaa8b75604b36200b000000000000000000000000000a1f33465862778490979a99968e8274605544311d08000012283d52677d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b75614b36210c00000000000000000000000000152a3f556a7f949f9f9f9f9f9f9f9d88735e48331e17293a4b607486989e9fab9f9f9f9f9f9c8674604b36200b00172c41576c8196acc9daecdfcbb7a695806a5f4d483c423e4a4f606b8095a6b7cbe0f1dbc6b19c86715745321e090000000000000000021527384e63798ea3b4c8dde3cfbcab947e69543c2b2e2e35485a70859bb0c9dae9d7c7b09b86715c4a361a0a00000000000000000011263b50667b90a5bbd0e5d9c4ae99846f595c687e939fb1c1d2e3e1d0bfb59f8d7c665b586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf1dcc7b4a29a99999999999999999999999999947f69543f2a140000000000000005131e252730303030302f2e26231c11181f22283236393a3a393733292321190e030000000000000000000000000000000000000000071c32475c71879cb1c0c0c0ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485970859bb0c5dbcfbcab937e695337261401000000000c21374c61768ca1c7d7dfcab49f8a755645321d09000000000000000000000000031629394c6176869aa2acafafaba0978474604b362513000012283d52677d92a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a08b76614b36210c00000000000000000000000000152a3f556a7f94aab5b5b5b5b5b39d88735e48331e1f334658697f94a4b3b5bcb5b5b5b3a1907b655544311d080012273d52677c92abbccfe3e7d4c4b49f8d7d6d625a5857595c646e7e939eb0c4d5e7e5cfbeab96806b56392816030000000000000000000a21364a5b70859bb0c6d7e9dac9b09b85705a48352022384d62788da3b5c9e7e1cdbaa9937e68533d2d1a0000000000000000000011263b50667b90a5bbd0e5d9c4ae99846f59647a8b9fb4bdcedfe4d3c3b3a195806b5e4c586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faefdac4af9a8484848484848484848484848484847c66513c27110000000000000000010a10121a1a1a1a1a1a19110f0900050b0d151d2024252523211f170e0c0600000000000000000000000000000000000000000000071c32475c71879cb1c6d6c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778b9fb5cadfcab59f8b77624d37220d00000000000c22374c61778cabbccfdec9b49e89745f3c2b190d0700000000000000000000000a1e3246576c8197a4b4c0c4c4beb1a2947f695443301c070012283d52677d92a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b6a08b76614b36210c00000000000000000000000000152a3f556a7f94aabfcacacac8b39d88735e4833182b3b4c6176899eb3c2cacfdacdbaa999836e5e4c37271502000d22374c62778b9fb5cadff2e3cfbcab9f928278716d6d6e727983939caebccde2e9d7c7b2a08e79634e39240e00000000000000000000071a2d3d53687d93a8b9cde1ddc9b5a38d78624d38232c3c54697f94a9c1d1e4dec9b49f8a76614c36210f0000000000000000000011263b50667b90a5bbd0e5d9c3ae99846e6277889da9bacedce9d7c6b6a5998372604b40586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c786f6f6f6f6f6f6f6f6f6f6f6f6f6f665e4d39240f000000000000000000000000050505050505030000000000000002090b0e10100e0c0a0400000000000000000000000000000000000000000000000000071c32475c71879cb1c6d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d53697e93abbccfd8c8b09b8670594834200b00000000000b20354b60758a9fb5cadfc9b49f8a745a483524221b10020000000000000000000c21364b61768a9fb4c2d1dad9cec0b29d8873604a35200b0012283d52677d92a7bcbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb6a08b76614b36210c00000000000000000000000000152a3f556a7f94aabfd4dfddc8b39d88735e4833203448596b8095a7b8ccdfe3d4c3b49f8a78624d402f190900000b2034485970859bb0c5d6e8ebd9c9bcb49f978c86838283878e99a1aebacbdaece1cdbaa998836e5b4a36210c00000000000000000000000f21364b6176899eb4c9dee4d2c1a9947f69543c2c35495a71869bb0c6dbe6d3c3ad98826d5846331f0a0000000000000000000011263b50667b90a5bbd0e5d8c3ae98836e73849aa6b7c7d8eae1cdbaa89d877661544343586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c776259595959595959595959595959514d40301d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b70859bb0c9dacebbaa947f6a543b2b18050000000000081d31445573889eb3c8decebbaa8d78624d3c39362d20180a000000000000000010253a4f657a8fa9bacde0eeecdfcbb7a68d78624d38220d0012283d52677d92a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a08b76614b36210c00000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48332c3c4c62778a9fb4c5d5e8dfcab7a595806a5a4935211100000005182b3b53687e93a7b9cce0f3e7d9cfbdb1ab9f9b9897999da5aeb3bfcbd9e7dacfbcb49f8a78624d3d2d1a0700000000000000000000000a1e3346576d8297adc2d3e5dbc6b09b86715a4935384d62788da3b5c9dddfcab6a58f7a65503a2917040000000000000000000011263b50667b90a5bbd0e5d8c2ad98836d8196a2b4c4d4e5decdbcb49f8a796358473643586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d4444444444444444444444443c393022120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394e63798ea3b5c9dfc9b49f8b77624c37220d000000000000011426375a6f849aafc8d8d8c8a9947e695b524f4a3e352818000000000000000011263b50667b90a5c2d3e5f9f6e2cebbaa8e78634e39230e0012283d52677d929292929292929292929292929292929292929292929292928b75614b36210c00000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e483335495b6c8197a8bacde3e6d0c0b29d8775604b3c2b1903000000000d21364b6175899eb3c5d6e8f7ebe3cec9bcb5b0adacaeb2b7c3c7cfdddfd5c9bcb59e937e695a48351f0f000000000000000000000000031729394f657a8fa4b6cadeddc9b5a38d78634d383c546a7f94a9c1d2e4d9c8b29c8773604a35200b000000000000000000000011263b50667b90a5bbd0e5d6c1ac96817d929fb0c0d1e2e2d1c0b09e927d675b4a3a2943586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d372f2f2f2f2f2f2f2f2f2f2f27241d1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f0f0f0f0f0f0f1c32475c71879cb1c6d7c2ad97826d58422d180f0f0f0f0f0f0f0d070000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576b8096abc1d1d3c2ae98836e5947341f0b00000000000000152a3f546a7f94aabbcedec8b39e89796b67645c5346351d0d000000000000000e23394e63788ea4b6cadee6e6d8c8b49f8a76614c36210c000d23384d62787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d74604b35200b00000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e482d3e4d63788b9fb4c6d7e9d8c8b4a2917c675745321e0e0000000000091e3246576b8095a7b8cce0effeece7dacfcac6c2c2c3c7cad4dbd9d4cac4b8ab9f96806b604f3c2b1901000000000000000000000000000b22374b5d72869cb1c8d8e4d2c1a9947f6a543d495b71869bb1c6dbe2cebbaa947f6a5443301c07000000000000000000000011263b50667b90a5bbd0e5d9c3ae99838a9fb4bdcddee5d4c3b4a296806b5f4d3d2d2e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221a1a1a1a1a1a1a1a1a1a110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21242424242424242432475c71879cb1c6d7c2ad97826d58422d2424242424242424221b10020000000000000000000000000000000000000000000000000000000000000000000000001325364b6075899eb3c8decab6a4907b65503b2a1805000000000000000d23384d62788b9fb4c4d5ccb8a79e8a817c796d64533b2b18050000000000000c2135495b72879cb1bccad3d1c8bbaa9a846f5746331e0a000c2035495a626868686868686868686868686868686868686868686868686868605544311d0800000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48364a5c6e8398aabbcee4e2cebbaa9a846f5f4d392816000000000000031628394c6176899eb3c1d2e5f5fff4e4d7cdc9bdc0c4c6c8c7c5c3c3b6b2a69d8d8072604a42321e0e0000000000000000000000000000081b2e3f54697f94aabbcee2dbc6b19b86715b494d63788da3b5c9dedfcab49f8b77624d36251300000000000000000000000011263b50667b90a5bbd0e5dbc7b3a1999fa9bacddbead7c7b7a59a8473604b41301f2e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d09090909090909090909090909090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a283236393939393939393939475c71879cb1c6d7c2ad97826d5842393939393939393939362d20100000000000000000000000000000000000000000000000000000000000000000000000071c304354687e93a7b8ccd3c2b19c8673604a35200d00000000000000000b2035495a6d8298a6b8c7d3c5b8a89e96928e826d594834200b000000000000061a2c3d51677c919eb2b6c3c0b4aa9f8c7a644f392917030006192c3c494d52525252525252525252525252525252525252525252525252524b443727150100000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e483f4f647a8d9fb5c8d8e7d5c4b49f8b79634e41301b0a000000000000000b1f334658697e93a3b5c7d7e9fce9d7c6b9b4a8abafb1b2b2b0aea9a59d93887b6b605443302414000000000000000000000000000000001022374c62778b9fb4cadfdec9b5a38d78634e556a7f94aac1d2e5d5c4ae99846f594834180800000000000000000000000011263b50667b90a5bbd0e5e2cfbfb3aeb4bac7d7e9e2cdbaa99d87776155443123182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002162838454b4f4f4f4f4f4f4f4f4f4f5c71879cb1c6d7c2ad97826d584f4f4f4f4f4f4f4f4f4f4a3e2d1909000000000000000000000000000000000000000000000000000000000000000000000b20354a6073869cb1c5d5cab6a4927d675443301c07000000000000000006192b3c4d6278889da9b6c3cbc6b9b4aba7a08c77624c37220d000000000000000f24394d5f6b80919ca5a6a5a29a8c7d675c4a361b0b0000000e1e2c35383d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d35312719090000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e484b5d6f849aabbccfe6e0cbb8a696816c5b4a36231200000000000000000417293a4b6073859ba9bacde1ede1cdb9a89e93959a9b9d9d9b99948f877e75665e4a4336251306000000000000000000000000000000000b1f3447596e8399aec4d4e5d2c2aa947f6a555b71869cb1c6dbe0cbb8a6917c66513b2b180000000000000000000000000011263b50667b90a5bbd0e5edddcfc7c3c9cdd7e5dfcebdb49f8b7a645947372715182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37333333333333333333333333333333332320190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455660646464646464646464646471879cb1c6d7c2ad97826d64646464646464646464645c4a3727150100000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa4b6cad2c2b19c8673604b362513000000000000000000000e20344859647b8b9ca4b3b7c4c6c9c0bea38d78634e38230e000000000000000a1d304150626b7c878e91908d857a675f4d3e2d1b00000000000e1920232828282828282828282828282828282828282828282828282828201d1509000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e4150657b90a2b3c9dae7d2c1b39e8876614c3d2d1a040000000000000000000c1c30435463798a9fb4bfcfe1dec9b49e897e808486888786847f79746961574c4030251808000000000000000000000000000000000005182a3b51667b90a6b7cbdfdcc7b19c87725c63798ea4b5c9deddc8b39d8874604b35200d0000000000000000000000000011263b50667b90a5bbd0e5fbede2dbd9dee1e9e2d1c1b19f927d685c4a3a2a1909182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77624d484848484848484848484848484848484838352b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60747a797979797979797979797a879cb2c7d9c4ae99837a797979797979797979797a705544311d0800000000000000000000000000000000000000000000000000000000000000000011263c51667b91a5b3bfc9b5a4927d6755443118080000000000000000000005192b3b4b5d647a86959da6abb0b4bac7a38d78634e38230e000000000000000012233344505f6772797b7b7770645c4d41302010000000000000060c0d13131313131313131313131313131313131313131313131313130b080100000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e4d5f70859bb0c0d0e7dac9b5a3927d685846331f0f0000000000000000000001142636495b697e93a1b3c3d4e1cdb9a89c87776f717372706e696460544b46392f1c1308000000000000000000000000000000000000000d20354b6074889db2c9dadecab6a48e79646b8096abc2d2e4d1c0ab96806b5544311d080000000000000000000000000011263b50667b90a5bbd0e5fafff6f0eef4f6e6d5c4b4a397816c604e3e2d1c0c00182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c77625e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e4d483c2b190600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63798d8e8e8e8e8e8e8e8e8e8e8e9ca5b6cadbc7b3a1998e8e8e8e8e8e8e8e8e8e8e8a74604b35200b0000000000000000000000000000000000000000000000000000000000000000000c21364c61768799a1b1b6b19c8673604b3726140000000000000000000000000d1d2e3f4b5c64757f8891969b9fa9a1a38d78634e38230e000000000000000004162633414d515b636666625a4f4b3e30231302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e58677c91a3b5c9dee3cfbcab9b8572604a3a291701000000000000000000000008182c3d4f606e8399a5b7c8d8d7c6b6a59a8473605d5d5b59544f4b433632281b11000000000000000000000000000000000000000000081d3144556b8095abbccfe3d3c2ab96806b74889db2c8ddddc8b4a28d78634e372715010000000000000000000000000011263b50667b90a5bbd0e5fafffffffffdead8c8b7a69b8574604b423120100003182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f7e1ccb7a28c7873737373737373737373737373737373737373625a4835200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3a4a4a4a4a4a4a4a4a4a4b2b6c3d3e2d0bfb3aea4a4a4a4a4a4a4a4a4a4a08a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000a1e334657627783909ca4a0907b6555443119090000000000000000000000000010202e3e4a57616a757c8186898b8c8d8d79634e38230e00000000000000000008162330393d4a4e51504d483c372e20130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88736d6e76879db2c1d2e4d6c5b59f8d7a645443301b0b000000000000000000000000000f1f32424c6176879daabbcee2d3c3b4a297816d614f40443f3a3530261e160b00000000000000000000000000000000000000000000011426374d63788c9fb5cadfdcc7b29d87727a8fa6b7cbdfd6c6b09a85705b49351909000000000000000000000000000011263b50667b90a5bbd0e5fafffffffdefe2cebbaa9d8877625645312313020003182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf3ddc8b39e888888888888888888888888888888888888888878624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3b8b9b9b9b9b9b9b9b9b9c7cad3e1edddd0c7c4b9b9b9b9b9b9b9b9b9b5a08a75604b35200b000000000000000000000000000000000000000000000000000000000000000000031729394859626e7b869398836e5d4b37261400000000000000000000000000000210202d39464b5660666c71747577787974604b36200b0000000000000000000004121d242d36393c3b38342b221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9dec9b49f8b828283889da5b7cadfe0ccb8a797826d5c4b362513000000000000000000000000000001141f334758647a8c9fb4bfd0e1d1c0b19f947f695e4c3d2d24201c140803000000000000000000000000000000000000000000000000092035495a70859aafc5d6dfcab6a58e798096abc4d4e1ccb9a8927d68523d2c1a00000000000000000000000000000011263b50667b90a5bbd0e5faffffffefdfcfbeb49f8b7b65594838271505000003182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf5e0cbb8a69e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3b8cdcecececececececedcdfe6f1fbede2dbd9cececececececececab5a08a75604b35200b000000000000000000000000000000000000000000000000000000000000000000000b1b2b3b484c5e65747e8878624d3f2e190900000000000000000000000000000002101b293238454b51565b5660626363605645311d090000000000000000000000000a0f1a212426262220190d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e1cdbaa99f9797989ea6b7c3d4dccdbcb39e8977624c3e2e18080000000000000000000000000000000417293a4b5d6a7f94a1b3c4d4decebdb49f8d7c665b4a3b2a1a0a01000000000000000000000000000000000000000000000000000006192c3c52677d92a7b9cce0d3c3a9947e869cb1c7dcdec9b49e8976614b36210f00000000000000000000000000000011263b50667b90a5bbd0e5fafffff3e3d2c1b2a0937e695d4b3b2b1a0a00000003182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5fafbe7d5c5b8b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3b8bababababababababac7cad4e1edddd0c7c4bababababababababab5a08a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000d1d2b34404c55606975625a483421110000000000000000000000000000000000000b161e2731363c4138454b4c4e4e4b45382715020000000000000000000000000000070c0e11110d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e9d7c7bab4adadaeb3b8c4d4e1cfbeb09e917c67594734201000000000000000000000000000000000000c1c2e3f4a60728399a6b7c9d9e3cfbcab9e8a79635947382815020000000000000000000000000000000000000000000000000000000e21364b6075899eb3c9dedcc6b19c879ca4b6caded2c2ac97826c5746321e0900000000000000000000000000000011263b50667b90a5bbd0e5fafff6e6d5c5b5a398826d604f3f2e1d0d0000000003182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f0f0f0e3d5cbc8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3a4a4a4a4a4a4a4a4a4a4b2b6c3d4e3d0bfb3afa4a4a4a4a4a4a4a4a4a4a08a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000d18202f37444b556055483c2b190300000000000000000000000000000000000000030a151d20272c2832363738383631271a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9f5e5d7cdc9c2c2c3c8cbd5e2dac6b2a095806b5f4d3b2a1802000000000000000000000000000000000000101c3043546177889dabbccfe3d9c9b9a89d8777615645321d15040000000000000000000000000000000000000000000000000000091e3245566c8197acc2d2decab6a49ca4b6c2d3dec9b5a48f7a644f3928160300000000000000000000000000000011263b50667b90a5bbd0e5fafeebd9c8b8a79b8575604b42322111000000000003182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbd0dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbcdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63798d8f8f8f8f8f8f8f8f8f8f8f9da5b6cadcc7b3a1998f8f8f8f8f8f8f8f8f8f8f8a74604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000051119273137444b44372b1d0d0000000000000000000000000000000000000000000002090b1117151d20222323201d150a00000000000000000000000000000000000000000000000000000000000000000000000000000002090b10121416151412100c0a04000000000000000000000001080a0b0b0b0b0b0b0b0b0b0700000000000000152a3f556a7f94aabfd4e9f3e2d5cbc8b6b6b9c5c8d1dfd8c3ad98836e605443301c1402000000000000000000000000000000000000001325364759657b8d9fb4c0d1e3d6c6b7a59b8474604b433322120200000000000000000000000000000000000000000000000000031628384f647a8ea3b5c9ded3c2b6b1b6c2d3e0d8c7b19c86715c4a361b0b0000000000000000000000000000000011263b50667b90a5bbd0e5fef0e2cebbaa9e897862564532241403000000000003182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5bbc6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60747a7a7a7a7a7a7a7a7a7a7a7b879db2c7d9c4af99837a7a7a7a7a7a7a7a7a7a7a7b655544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000009151d2731353127190d0000000000000000000000000000000000000000000000000000000002090b0d0e0e0b09020000000000000000000000000000000000000000000000000000000000000000000000000002090b151d202528292b2a2a2825211f17120b090300000000040a0c171d1f2020202020202020201c0c0a0400000000152a3f556a7f94aabfd4e9e7d5c4b8b3a0a1a4b0b4c0d1dfcab49f8d8072604a433220100000000000000000000000000000000000000008182a3b4b5d6a8095a2b4c5d5e4d4c3b4a298826d61504030201000000000000000000000000000000000000000000000000000000a22364a5c71869bb1c7d7e0d3cac6cad3e0e2cebaa9937e69543e2e1b000000000000000000000000000000000011263b50667b90a5bbd0e5f0e0cfbeb49f8c7b655a483828160600000000000003182e43586d8398adc2d8e6d1bca6917c67513c27120011263b50667b90a5b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455660656565656565656565656571879cb1c6d7c2ad97826d65656565656565656565655d4b37271501000000000000000000000000000000000000000000000000000000000000000000000000000000000109151d201d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a151d202731363a3d3f40403f3d3a37332a27211e160a07000c171f212c323535353535353535353531211f170b000000152a3f556a7f94aabfd4e9e0cbb8a69e8b8b8e9ba2b4c3d4cfbcab9f95816c614f3e2e1b0b000000000000000000000000000000000000000c1d2f3f4b6073849aa7b8c9dae1d1c0b2a0947f6a5e4d3e2d1d0d00000000000000000000000000000000000000000000000000071b2d3e53697e93a9bacde2e5dedcdee5f0dfc9b49f8a77614c372210000000000000000000000000000000000011263b50667b90a5bbd0dbdbd3c2b2a0947f6a5d4c3c2b1a0a0000000000000003182e43586d8398adc2d8dbd1bca6917c67513c27120011263b50667b909b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162838454b4f4f4f4f4f4f4f4f4f4f5c71879cb1c6d7c2ad97826d584f4f4f4f4f4f4f4f4f4f4b3f2e19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b080100000000000000000000000000000000000000000000000000000000000000000000000000090f111d1d1b1a18140f0b090200000000000000000000000000000000000000000000000a151d28323638454b4f525455555452504c473a3c363228211a0f1c2a333741474a4a4a4a4a4a4a4a4a4a463633291b0b0000152a3f556a7f94aabfd4e9ddc8b39e88757679849ba5b7c9d9c9bcb49f947f695c4a3929170300000000000000000000000000000000000000111d3144556277899eabbccfe3dfcfbeb59f8d7c665c4a3b2b1a0a000000000000000000000000000000000000000000000000001021374c61768a9fb4c9dff0f0f0f0f0e6d4c3ae98836e5847331f0a000000000000000000000000000000000011263b50667b90a5bbc6c6c6c4b6a498826e614f3f2f1e0e000000000000000003182e43586d8398adc2c6c6c6bca6917c67513c2712000f253a4f647b8686868686868686868686868686868686868686868686868686868686868578624d38220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832363a3a3a3a3a3a3a3a3a475c71879cb1c6d7c2ad97826d58423a3a3a3a3a3a3a3a3a372e211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24263232312f2e2a25201d150a0500000000000000000000000000000000000000010f1a283238454b5356606567696b6a696765615858514b4538362d212b3a474c565d5f6060606060606060605c4c463a29170400152a3f556a7f94aabfd4e9ddc8b39d8873616476879dabbccfd9cfbdb49f8b7a645746331e1300000000000000000000000000000000000000011426374859667c8d9fb5c1d1e4e3cfbcab9f8a7a645948382818080000000000000000000000000000000000000000000000000a1f3347586e8398adc3d4dbdbdbdbdbdbcab7a5907b66503a2a1804000000000000000000000000000000000011263b50667b90a5b1b1b1b1b0a69c8675614b4332211100000000000000000003182e43586d8398adb1b1b1b1b1a6917c67513c2712000d22374b5d6471717171717171717171717171717171717171717171717171717171717171625a4834200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21252525252525252532475c71879cb1c6d7c2ad97826d58422d2525252525252525221b1003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0c0c0c0a0300000000000000000000000000000000000000000000000000122230383c47474645433f3a36312720190d000000000000000000000000000000000005131f2d38454b5660686f757a7d7e807f7f7d7a76726d6760564e4a3d353c4858616c727475757575757575757571615846331f0a00152a3f556a7f94aabfd4e9ddc8b39d88735e58657b8d9fb5c3d4e2cebbaa9d8776614c41311e0e0000000000000000000000000000000000000009192b3b4c5e6b8096a3b5c5d6e6dac9baa89d877762564536251300000000000000000000000000000000000000000000000004172a3a50657b90a5b7c6c6c6c6c6c6c6c9b29d8774604b35200c00000000000000000000000000000000000011263b50667b909b9b9b9b9b9a9688786257463225150300000000000000000003182e43586d83989b9b9b9b9b9b9b917c67513c271200081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4d483c2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b101010101010101c32475c71879cb1c6d7c2ad97826d58422d18101010101010100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20212121211e170b0b01000000000000000000000000000000000000000000091d30404c515d5c5b5a58544f4b4538342b1d14010000000000000000000000000000041323303d4a56606a757d84898f9294959594928f8c87827c756d635b4e49485a627681878a8a8a8a8a8a8a8a8a8a8676614c36210c00152a3f556a7f94aabfd4e9ddc8b39d88735e4b5d6c8197a5b6c9dad8c8b6a598826d5f4e3c2c1a0a000000000000000000000000000000000000000d1d2f404b6074859ba7b9c8d4dad7c6b7a69b8574605443301c130000000000000000000000000000000000000000000000000c20354a6073879db1b1b1b1b1b1b1b1b1ab95806a5443301c080000000000000000000000000000000000000f253a4f647b868686868686858177625a49392916070000000000000000000000162b40556b808686868686868686867b65503b2610000010202e373a4646464646464646464646464646464646464646464646464646464646464638342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818253035363636363329251e130500000000000000000000000000000000000000000f24384c5e667272706f6d696460564d483c321d140900000000000000000000000002122230414d5b63747f8892999ea8a7a9aaaaa9a7a5a59d97918982796e635b59627887969c9fa99f9f9f9f9fa59c8676615846331f0a00152a3f556a7f94aabfd4e9ddc8b39d88735e3f4b6175879dabbccfe3d3c3b2a0927d685b493827150200000000000000000000000000000000000000121d3144556278899eaab6c3c4c6c6c4b5a3988272604a41301d0d0000000000000000000000000000000000000000000000071c3043546a7f959b9b9b9b9b9b9b9b9b9b8c78624d362614010000000000000000000000000000000000000d22374b5d64717171717171706c6259493c2b1b0b00000000000000000000000014283d50626b717171717171717171655d4c38230e000002101b2225313131313131313131313131313131313131313131313131313131313131312220190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a4c4c4c4c46393a312313010000000000000000000000000000000000000011263c51667c87878684837f7a756b625a4f43312619090000000000000000000000102030404d5f677986949da6afb4b9c6bec0bfbebcc3b7b2ada89e978e83796b6278879ca5b2b4bab5b5c5b7a69d87776258473a29170400152a3f556a7f94aabfd4e9ddc8b39d88735e484657657b8d9fb5c3d3e1cfbeb49e8a79635645311d120000000000000000000000000000000000000002152737495a667c8c9da5adafb1b1b1b1b1a095806a5f4d3c2b190500000000000000000000000000000000000000000000001325364d62788586868686868686868686826d5a4835180800000000000000000000000000000000000000081b2e3f4b4f5c5c5c5c5c5c5b564c483b2b1e0e000000000000000000000000000d21334450555c5c5c5c5c5c5c5c5c504c3f2f1c0800000000080d0f1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354606161616157524e4131200f0000000000000000000000000000000000000012283d52677d929c9b9a98948f89807869614b443726140100000000000000000009192e3e4c5e677d8b9ca4b3b7c4c9cdd7d3d5d4d4d2d4cac7c6b9b4aca1998c8178869ca5b6c3c9cdd6c5b8a69d88786259483a2a1b0b0000152a3f556a7f94aabfd4e9ddc8b39d88735e48394b5d6c8196a5b6c9dae1cdb9a89b8574604b402f1d0d0000000000000000000000000000000000000009192b3c4c5e667b8791979a9b9b9b9b9b9b9b917d675a4834200b0000000000000000000000000000000000000000000000082034485a6271717171717171717171716d63523c2b1900000000000000000000000000000000000000000010202e373a464646464646454137342b1d0e0000000000000000000000000000041626333d404646464646464646463b382f21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d5c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60727676767673685f4e3e2d1a0700000000000000000000000000000000000012283d52677d92a7b0afada9a79e968b7f6e605544311d110000000000000000021527374b5c667c8c9fa9b5c2cbd4ded7cdc9c4c0bfc0c2c6caceccc9bfb3aa9f968b9ca4b6c3d3dfd7c6b9a79e8879635a493b2b1c0c000000152a3f556a7f94aabfd4e9ddc8b39d88735e482e3f4b6175879dabbccfe3d6c6b5a396806b5e4c3b2a1808000000000000000000000000000000000000000e1e2f404c5d65747c828586868686868686868578624d38220d000000000000000000000000000000000000000000000005192b3c484d5c5c5c5c5c5c5c5c5c5c5c585245351e0e00000000000000000000000000000000000000000002101b2225313131313131302c2220180d00000000000000000000000000000000081621282b31313131313131313126231c110300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c111315161513120e0b08010000000000000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1bfbfbfad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60758b8b8b8b887d685c4a36210d00000000000000000000000000000000000012283d52677d92a7c6c4c2c5b9b3aa9f948273604b3f2f1c0900000000000000081d314455647a8b9faabac7d2dfdbcec7bab4afabaaabadb1b4bbc8c9cfc8bbb4ab9fabb6c2d3e1d7c7b9a89e897a645b493c2b1d0d00000000152a3f556a7f94aabfd4e9ddc8b39d88735e4833324657657b8d9fb5c3d3dad2c1b59f8d7c665948362513000000000000000000000000000000000000000012222f3f4c5660676d6f717171717171717170625a4834200b0000000000000000000000000000000000000000000000000d1d2b34384646464646464646464646423f352717000000000000000000000000000000000000000000000000080d0f1c1c1c1c1c1c1b170d0b05000000000000000000000000000000000000040d14161c1c1c1c1c1c1c1c1c100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e10181f2226292a2b2a292724201c140b09030000000000000000000000000000000000000000000000000000000000000000071c32475c71879caaaaaaaaaa97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455774899ea1a69e8c79644e39240f00000000000000000000000000000000000012273c52677c91a8aeb3b7c4ccc8bbb4a096816c5d4c38230f000000000000031628394b6074869ca9bac8d7e5d9cbbdb1a99f99969496979b9faab0b5c1cdcec9bcb4bcc9d3e0d8c8baa99e8a7b645c4a3d2c1e0e0000000000152a3f556a7f94aabfd4e9ddc8b39d88735e483328394b5d6c8196a4b6c5c4c4c4bcab9e8877625443301c0c000000000000000000000000000000000000000412212f38454b51585a5c5c5c5c5c5c5c5c5b4d483c2b1905000000000000000000000000000000000000000000000000000d19202231313131313131313131312d2a2317090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000309111c23252a33373b3e3f403f3e3c39353026211e160a02000000000000000000000000000000000000000000000000000000000000071c32475c718695959595959595826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071628395c72879cb1b8ab947f6a543f2a19110b080100000000000000000000000000000d22374d62788a96989da6b0bccdcebfb09e907b65503d2d1a070000000000091e3246576a7f94a4b5c7d8e6dccbbbae9f978a84807f8082868b939ba3b4bac7d7cfcacfd9e7d9c9bbaa9f8b7b655d4b3e2d1f0f000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331b2e3f4b6075869ca7aeafafafafafa69a8472604a3b2a18040000000000000000000000000000000000000003111a2832363c424546464646464646464638342b1d0d000000000000000000000000000000000000000000000000000000050b0d1c1c1c1c1c1c1c1c1c1c1c181610060000000000000000000000000000000000000000000000000000090f112020202020202020202020200a030000000000000000000000000000000000000000000000000000000000000000000000050f15172020202020202020202020202020202020202020202020202020200f0d0700000000000000000a161e212f373b3a474c505355555453524e4b43363632281d150900000000000000000000000000000000000000000000000000000000000013293e53687e808080808080807c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1a2130455a70859aafc9ac96816c5741342b26201d1509010000000000000000000000000b203448596379818388969eb0c2d3cdbdb09a85705c4a36210d00000000000c21364b6175899eb3c2d2e5e2cfbeae9d9381776f6b6a6b6d71767d85919fa9bacde1dfe3ebe3cfbcab9f8c7c665d4b3f2e201001000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e1e324557647a8995999a9a9a9a9a9a9a947f695947341f0b0000000000000000000000000000000000000000000a151d20272d303131313131313131302220190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c23263535353535353535353535351e160b0000000000000000000000000000000000000000000000000000000000000000000917222a2d35353535353535353535353535353535353535353535353535353524221b10020000000004121a2832363f4b5056586166686a6b6a6867636054534b45383127190f010000000000000000000000000000000000000000000000000000000011263b4e60686a6a6a6a6a6a6a665e4c39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c171f212d363943586d8398adc2ae98836e594d483b3c3531271d1409000000000000000000000005192b3b495b636b6e748096a4b6c9ddc8b4a28e79644e39240f000000000012283d52677d92a7b9cce0f0dac6b2a0937f6c615956555658586168717c8a9fb4c9def4f7f4dfcab49f8d7d675e4c3f2f20100200000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e1628394a5c6478808485858585858585848377614c37220c0000000000000000000000000000000000000000000002090b12181a1c1c1c1c1c1c1c1c1b0d0b05000000000000000000000000000000000000090f1120202020202020202020200d0b050000000000000000000000000000030a20202020202020202020202012100a000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a32291b0b00000000000000000000000000000000000000000000000000000000000000051727353e424a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a39362d20100000000816233038454b535d656b71777b7e7f807f7e7c79746f6860564b44372c1f0f010000000000000000000000000000000000000000000000000000000b1f31424e5355555555555555514c40301d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020d19202a33373d4a4e54596b8196abc0b09b857066625958514b44373126191103000000000000000000000d1d2c3d494e56556072869cb1c6dcd1c0a9947e69543f29140000000003182e43586d8398adc5d6e8e5d3c2ad98836e614c473a3f413a464c616b8095a9bacde1f6fde8d3bea8937e695f4d402f2111020000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0a1b2d3d4a5a626b6f6f6f6f6f6f6f6f6f6f615947341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c232635353535353535353535352220190d0000000000000000000000000b161e35353535353535353535353527241d12040000091c2f404c5060606060606060606060605e46392916030000000000000000000000000000000000000000000000000000000000000f22354552576060606060606060606060606060606060606060606060606060604f4a3e2d1b070005162634414d566068717b81868b909394959493918e89847d756a6055493d2c1f0f000000000000000000000000000000000000000000000000000000021424313b3e404040404040403c393022120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2b343a474c535b63696e738095aac0b39e897e7b77736d6660554b44372f211400000000000000000000000f1f2c3639374454687e93a8bdd3d8c3ae99836e59442e1904000000011426375c72879cb1c7dcf1dec9b6a48d78634e42342a2a31414f606a7f949eb0c7d7e9fdffebd6c1ac96816c5c4a36221203000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e000f1f2d3c484d56595a5a5a5a5a5a5a5a5a4c473b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1214130f0d0700000000000000000011222f383b4a4a4a4a4a4a4a4a4a4a4a4a342b1d0d000000000000000000000b1b29324a4a4a4a4a4a4a4a4a4a4a4a3c3930231200000f23384c5e667575757575757575757575705746321e0a000000000000000000000000000000000000000000000000000000000000152a3e52636c757575757575757575757575757575757575757575757575757575705c4a36220d000e213444515f67757e8690969b9faba8aaaaa9a8a7a89e9a92897f74635b493d2c1d0c00000000000000000000000000000000000000000000000000000006141f26292b2b2b2b2b2b2b27241d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a27313b484d58616971797f8388959eafc3b8a79e93908c88827c746860554b3f321c1308000000000000000000010f1a2123273650657a8fa5bacfdbc5b09b86705b46311b06000000081d31445574899fb4c9def1dcc6b19c86715b49351f2230404e5f697e939dafbccde5f5efebf4dfcab49f8c7a644f3f2e1b08000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09010f1d2b3438404445454545454545454437342a1d0c00000000000000000000000000000000000000000000000000000000000000000000000000020c181f2227292824211a0f07000000000000091c2f404c5060606060606060606060605e483b2b1905000000000000000003162939465e6060606060606060606060514d41301d0a0011263b50667b8a8a8a8a8a8a8a8a8a8a8a75614b36210c000000000000000000000000000000000000000000000000000000000002172d42576c818a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a644f39240f0014293d51626b7c88939ca4abb1b5bcc9bfc0bfbdc6b9b4afa79e958579635b493b2a1804000000000000000000000000000000000000000000000000000000020b111315151515151515110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111f2c38454b59626c767e868e94999ea7afbcccc5b8b3a8a5a69d9891887e73655d4f433025180800000000000000000000060c0e23384d63788da2b8cddcc7b29d87725d48321d080000000b20354b60758aa9bacde1edd8c2ad98836d583d2c212f404d5e687d8d9fb5bbccdae3dcdad6d8e3cfbcab99846f5d4b37220d000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000d1920222b2f30303030303030302f221f180c000000000000000000000000000000000000000000000000000000000000000000000000000a161e2a33373c3f3e39362d211a0f01000000000f23384c5e66757575757575757575757570594834200b00000000000000000a1e324657707575757575757575757575675f4d3924100011263b50667b909f9f9f9f9f9f9f9f9f8b76614b36210c000000000000000000000000000000000000000000000000000000000002172d42576c82979f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8e79644f39240f00162c41566b81919da6b1b6c2c6cac9c6c1bfbfc1c7cac9c5b8b3a39b8979635947341f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f3d4956606a78818a939ba3a9aeb3b8c5ccdad5ccc8bdc4b7b3ada69d93867b69614a433625130000000000000000000000000e23394e63788ea3b8cdddc8b39d88735e48331e09000000081d314455748a9fb4c9dfecd6c1ac97816c57422c2e3f4c5e667d8c9fabbccfd9ded0c8c4c1c4cdd9c9b3a18f7a654f3b2b18050000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000050b0d161a1a1a1a1a1a1a1a1a1a0c0b04000000000000000000000000000000000000000000000000000000000000000000000000000a1a28323a474c5254534e4a3e362d1f100200000011263b50667c8a8a8a8a8a8a8a8a8a8a8a78624d37220d00000000000000000c21364b61758a8a8a8a8a8a8a8a8a8a8a7d67513c27120011263b50667b90a5b5b5b5b5b5b5b5a08b76614b36210c000000000000000000000000000000000000000000000000000000000002172d42576c8297acb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a48e79644f39240f0014293f54697f94a3b5c4c9cecac1b5b0acaaaaacb2b6c3ccccc1b5a79d8877614c3d2c1a060000000000090f111313131313131313131313131313131313131313131313131313131313100e080000000000000001080b110f09000000000000000000000000000000000000000000000000000000000000000000000000091c2f3f4c5b63747f8a979fa9b0b5c1c3c8ccd5e3eae7e0ddd2d5cbc8c4b7b2a49c8d7f6c605443301c1200000000000000000000000f243a4f64798fa4b9cedcc7b19c87725c47321d07000000011426375d73889db2c8ddedd8c2ad98836d583a2d3e4b5d667c8b9faabbc9dadfd0c0b4afabb0bdcdd0bfae98836e594834200b0000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000000000010405050505050505050500000000000000000000000000000000000000000000000000000000000000000000000000000009192838454b5861676968645c4e4a3d2e201000000011263b50667b909f9f9f9f9f9f9f9f9f8c77624d37220d00000000000000000c21364b61768b9f9f9f9f9f9f9f9f9f917c67513c27120011263b50667b90a5bbcacacacacab6a08b76614b36210c000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1cacacacacacacacacacacacacacacacacacacacacab9a48e79644f39240f000b20354b6073859babbcc8bbb4ada39b979595979da5afbcccd2c5b7a697826d5b4936210c00000004121d2426282828282828282828282828282828282828282828282828282828282825231c11030000000009151d2027241d1209000000000000000000000000000000000000000000000000000000000000000000000e23384c5d657985959fa9b4bac7c9d2d9ddd5d8dbe2ede4dddacfd5ddd4cbc2b5ab9f948172604a40301b0b0000000000000000000010253b50657a90a5bacfdac5b09b85705b46301b06000000001a2f445a6f8499afc8d9ebdac5b09b857058473d4a5c657b8a9fa9bac8d9dfd1c1b4a29a969eb0c9dacab49f8b77624d37220d0000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374556606c777c7e7d7970635b4a3e2e1a0a000011263b50667b90a5b5b5b5b5b5b5b5a28c77624d37220d00000000000000000c21364b61768ba0b5b5b5b5b5b5b5a6917c67513c27120011263b50667b90a5bbd0dfdfdfcbb6a08b76614b36210c000000000000000000000000000000000000000000000000000000000002172d42576c8297acbfbfbfbfbfbfc2c5cedbdfdfdfdfdbcec4c1bfbfbfbfb9a48e79644f39240f00081d314455647a8c9fb3b4aa9f978d8681807f8287959eafc2d2d4c4b49f8c79634e39230e00000012222f383c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a372e211100000009192731353c3930231c1108000000000000000000000000000000000000000000000000000000000000000010263b50657b899ba3b4bac7cdd7ddd4cbc8c0c3c6cfddd1c8c5b9c0c8ccd5d2c9bcb49f96806b5e4c3928160300000000000000000012273c51677c91a6bcd1d9c3ae99846e59442f190400000000142a3f54697f94aabbcee2dfcab49f8b77614c495b647a8a9ea8bac7d8e0d2c1b4a39a848196abbccfcebbaa947e69543a2a170400000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556074818b9194938e8579645c4a382715020011263b50667b90a5bbcacacacacab7a28c77624d37220d00000000000000000c21364b61768ba0b6cacacacacabca6917c67513c27120011263b50667b90a5bbd0e5f4e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000000000000000002172d42576c8297aaaaaaaaaaaaaaacb1bdcee1f4f4e0cebdb1acaaaaaaaaaaa48e79644f39240f00011426374a5c6b80969e9f998c8279716c6a6a6c737f95a3b5c9decfbcab95806a55402b150000091d2f404c515252525252525252525252525252525252525252525252525252525252504b3f2e1c080001152737444b514d40382f221b100700000000000000000000000000000000000000000000000000000000000010263b50657b8c9fb5c1cdd7e1d4cbc4b7b2abaeb3bfcfc0b4b0a4aab3b8c5cfd9cfbdb09e917c665746321e0900000000000000000014293e54697e93a9bed3d6c1ab96816c56412c1701000000000d22384d62788b9fb4c7d7e2cebbaa937e69595a6379899ea8b9c6d7e1d3c2b5a39b8575788c9fb5cad9c8b09b85705847331f0a00000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364b607484969faaa9a8a39b8a7a645645311d090011263b50667b90a5bbd0dfdfdfccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbdfdfdfd1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000000000000000002172d42576c819595959595959595979fb1c5d9eeeed9c4b19f979595959595958e79644f39240f000009192d3e4b607381898983796d635b575555546071869bb1c6dbd9c9b19b86715c3a291704000f24384c5e666868686868686868686868686868686868686868686868686868686868655d4b37230e00081d31445560665e504c40372e221b1006000000000000000000000000000000000000000000000000000000000e23384c5d6c8197a4b6c8d6ccc4b7b2a69d9599a1b3c6b4a29a8f959ea7b3bfcfe3cdbcb39d8875614b372715010000000000000001162b40566b8095abc0d5d3bea8937e69533e291400000000000b2035485a6e8398a9bacde1d9c8b39e8877616278889da7b8c6d6e2d4c3b6a49b85766170859ab0c5dacab49f8b76614c37210c00000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546a7f94a2b4bbc8c1b4a89c8774604b36200b0011263b50667b90a5bbd0e5f4e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f4e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c00000000000000000000000000000000000000000000000000000000000011263b51667c80808080808080808197acc2d7ececd6c1ac97818080808080808077624d37220d000000101d314455606c74746e635b4e493d403946556d8297adc2d7dec9b49f89745846331f0a0011263c51667b7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7b65503a2510000b20354b60737c70655e4f4b3f362d211a0f060000000000000000000000000000000000000000000000000000091c2f3f4b6075869caabbc6b9b4a69d9287808399aec3b09a847a808899a1b3c1d1dfcbb7a6947f6a5544311d080000000000000003182d43586d8298adc2d7d8c8a5907b66503b2611000000000005192b3c4d63788a9fb4becfe0cbb8a69a847577879da6b7c5d5e3d4c4b6a59c867761586a7f94a9c7d7cfbcab917c67513c271200000000000000152a3f556a7f94aabfd4e2ddc8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6072889db2c0ced8d1c6b6a5917c66513c27110011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000000000000000000000000000000000000000000000000000000000000f24384c5e666a6a6a6a6a6a6a6a7a8fa4b9cfe4e3ceb8a38e796a6a6a6a6a6a6a62594834200b00000002152737444b575e5f594e4a3d393c494d576174869cb1c6dce1cdbaa98b76614c36210c001c31465c71869292929292929292929292929292929292929292929292929292929292826e59432e19000b21364b60758b857b70655d4e4a3e352c20190e0500000000000000000000000000000000000000000000000000111e324557647a8c9fb0b1a89e94877d746b7f94a9bfb19c87726b768399a3b4c8ddd4c4b39d8874604b35200b00000000000000051a30455a6f859aafc4dacebbaa8d78634d38230e0000000000000e2135495b6a7f94a0b2bfced5c5b4a29a84869ca5b6c4d4e3d5c5b7a69d877762594e64798ea9bacdd9c9ab95806b56402b1601000000000000152a3f556a7f94aabfcdcdcdc8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778da6b7cbe2eae4d3c3ab95806b56402b160011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000000000000000000000000000000000000000000000000000000000000091d2f404c5155555555555555647a8fa4b9cfe4e3ceb8a38e79635555555555554d483b2b180500000000091927313641494a44393d4a4e555a636b768298a4b6c9dee6d4c3a28d77624d38220d001c31465c71869ba7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a798836e59432e19000b21364b60768b9b90847a6f645c4e493d352b1f180d040000000000000000000000000000000000000000000000031628394b5c6a7f939b9c96897f756860687d92a7bdb39e8974586173859bb0c5d6dfcbb7a6907b65503b261000000000000000081d32475d72879cb2c7dccab49f8a75604b36200b00000000000006192c3c4a60728298a1b1becdd1c0b4a29a9ca4b6c3d4e2d6c5b8a69d88786259484b6075899fb4c9d9c4af99846f5a442f1a00000000000000152a3f556a7f94aab8b8b8b8b8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788daabbcee2f3ebd9c8ac96816c57412c170011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0403020000000000000000000000000000000000000000000000000000000012222f383b4040404040404f647a8fa4b9cfe4e3ceb8a38e79634e404040404037342b1d0d00000000000009151d202a333a464c545b636a7178808998a0b2c2d3e5dfcbb7a58b76604b36210b001c31465c71869bb1bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdae98836e59432e19000b21364b60768ba0a29a8f84796e635b4d483c342a1f170c03000000000000000000000000000000000000000000000a1b2e3e50616a7e868780776a605650657b90a5bab9a78b766055657b8fa7b9cce0d4c4ab96816c56412c1700000000000000021628385e74899eb3c9ddc7b29d88725544311d08000000000000000e1c30435460748397a0b4b9c6cfc0b4afb1b6c2d3e1d7c6b9a79e8879635a493b445570869bb0c5d8c7b29c87725d39291603000000000000152a3f556a7f94a3a3a3a3a3a3a39d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4c7d6deddcebbaa947e69543f29140011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3621191918171513100c0a030000000000000000000000000000000000000000000004121d24262b2b2b2b2b3a4f647a8fa4b9cfe4e3ceb8a38e79634e392b2b2b2b2220180d000000000000000412212f3a474c586169727980868d959ea7b2becfe0ead8c7b29d88725645321e09001c31465c71869bb1c6cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc3ae98836e59432e19000b21364b60768ba0b4afa1998d83796d625a4c483b332a1e170b020000000000000000000000000000000000000000001020334350606871716b61594b454e63798ea3c7c5a28d78634d6074899eb3c9dedbc5b09b85705b38271502000000000000091e324556758a9fb4cadbc6b19c86715c3727150200000000000000001325364556607382929ea8b2becfc8c5c6cad3e0d7c7b9a89e897a645b493c2b37596e8398aec3c3c3b49f89745746321e0a000000000000152a3f556a7f8d8d8d8d8d8d8d8d8d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3246576f8499a9b9c6c9c8beb49f8b78634d38230e0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362f2f2e2e2d2b2825211e170e0c06000000000000000000000000000000000000000000090f1115151515253a4f647a8fa4b9cfe4e3ceb8a38e79634e39241515150d0b0500000000000000011222303f4c58616c767e878e959ca4aab3b8c5cfdce7e0cebaa996816c5738281602001c31465c71869bb1b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6ae98836e59432e19000b21364b60768ba0b5bfb3ab9f988c82786c62594c473a33291e160a020000000000000000000000000000000000000002152533424e535b5c564c473a374c61768ca9babaa48f7a654f5471869bb1c6dbdec8b39e89735645311d090000000000000b21364b60768baabbcedac5b09a85705b45301b040000000000000000081828384555606d7d8a98a0b2c3d3dadcdee7d8c8baa99e8a7b645c4a3d2c2b41566b8096abaeaeaeaea88b76614b36210c0000000000000c21374c617678787878787878787878634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031629394e63798b9ea8b1b4b3ae9f96816b5a4935200c0011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b444444434342403e3a36332923211a0f09000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e0000000000000000000000000f1f30404c5d6576818a949ca4aab1b5c2c8ccd5e3dfd5cbbcb49f8b78634d38230e00001c31465c71869ba1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a198836e59432e19000b21364b60768ba0c3d0c9bcb5aa9f978b81776b61584b463932281d150901000000000000000000000000000000000000071524313a3e46474137342a334758748a9fb4bca6917c67515671869bb0c6dbe0ccb8a78b75604b36200b0000000000000b21364b60768ba8b9ccdac4af9a856f5a3b2a1f170c00000000000000000a1a2837444b5f68788298a4b6cadef1ebd9c9bbaa9f8b7b655c4b3e2d1f253b50657b909898989898988c77614c37220c0000000000000a1f33475861636363636363636363635a4935200c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364a5b667c8a969c9e9d99908273604b3c2c19060011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76615959595959585755534f4c463939362c241c120600000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e0000000000000000000000061a2c3d4c5e667b88969ea8b2b6c3c6c9d2dee0dfd4cbc5b8b39e947f695a4935200c00001c31465c71858b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b836e59432e19000b20364b60758ba4b6c5cecfc8bbb4a99f978a80766a61574b453831271c140800000000000000000000000000000000000006141f262831322b221f182a3a5d72889db2bea9937e69546075899eb4c9dee8d6c5a18b76614c36210c000000000000091e32455774899eb4c9dcc7b19c877259473733291c0c00000000000000000a192731414e5a6275879cb2c7dceee3cfbcab9f8c7c665d4b3e2e200f23374b5d677d8383838383838376614c37210c00000000000004172a3a474c4e4e4e4e4e4e4e4e4e4d493c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c5e667781878988837b6d605544311e0e000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b756e6e6e6e6e6e6d6c6a68656157554e493d382f20190e000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e00000000000000000000000c2135495b667c8c9ea6b4b9c6cad3dbdeded7cdc9c4b7b2a69e92806b614f3c2c190600000c21364b6176767676767676767676767676767676767676767676767676767676767675604b36210b00081d31445572879ca7b4bbc8cfcec7bab4a89f96897f766960564b443730261812090000000000000000000000000000000000020b11131c1c160c0a1b30465b70859bb0c0ab95806b60697f94a8b9cde1e1ccb9a88b75604b36200b000000000000031628395a6f849aafc2d3c9b49f8a7761514c473a291704000000000000000009151e324657697e93a4b6cadeddccbcb49f8d7d675e4c3f2f2010081c2f3f4d5f676d6e6e6e6e6e6e615847331f0a000000000000000c1c2a333738383838383838383838352c1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2f404c59626b7274736e655e4b4437261400000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faeed9c4ae99838484848484838382807d7a76716b635b514c40352c1e120400000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e00000000000000000000061a2c3d4e63798a9eaab8c5cdd7dee0d7cdc9c7bab4aea69d94887d6b625143321e0e0000000a1e334657616161616161616161616161616161616161616161616161616161616161605745321e09000215273750657b89969faab5bcc9d0cec6bab4a89e95887f756860554b433630231c110300000000000000000000000000000000000000060002090d182e44596e8399aec2ad97826d727f8c9fb4c6d6e9dec9b49e89745544311d080000000000000013283d53687d92a4b6c5cebbaa95806d67615847331f0a0000000000000000000c21364b6175899eb3c3d3e5d0bfaf9e927e685f4d402f21110200112130414d52585959595959594c473a2a170400000000000000000c171f212323232323232323232320190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112222f3b484d565c5f5e59504c403126190900000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221212121212121212121221364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf0dbc7b3a199999999999998989795938f8b86807970665e4d493c30221305000000000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e000000000000000000000c2135495b6e8399a8b9c8d5e1e2d5cbc7bab4aea99f9991877f76675f51443425150000000004182a3b474c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c473a2a170400000923374b5d6577818b989fabb4c0c9d2cdc6b9b3a79e94887e746760544d40382f1e170b000000000000000000000000000000000000010a151d202b3441576c8196acc1af9a837b85949faabbcee4ebd9c8af9a85705a37271502000000000000000b20354b6073869ca7b5c2c8b59f8d827c76614c37210c000000000000000004182a3b53687d93a7b8cce1d7c7b3a195806a604e4130221203000003132330393d4343434343434337332a1c0c00000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d2b343741474948443b382f1d14090000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37282828282828282828282828364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf6e2d0bfb3aeaeaeaeaeaeaeadacaaa8ab9f9b958e857b6f635a4d40312313040000000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e000000000000000000000e23384e63788da1b3c6d6e6dfd1c4b7b3a99f99928a837c746a61584d4134261607000000000b1f344759616262626262626262626262626262626262626262626262626262626262615847331f0a0000081c2e3f4b59616c78838d9aa2b1b5c2cad4ccc5b8b3a69d93877d73665e504c4033291b0b0000000000000000000000000000000008141c2832363b484d556a7f94aabfb59f8d909aa2b4bbc8d9ebe2cebbaa957f6a55402a150000000000000000081d3144556379899ca4b4babcab9f97907b65503b261000000000000000000b1f34475970859bb0c5d5e2cdbaa9998472604a423123130c0e100d0b05131e25272e2e2e2e2e2e2e211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525333c3f4343434343433a372e21110000000011263b50667b90a5bbd0e5f7e1ccb7a28c77624d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faffedddd0c7c4c3c3c3c3c3c3c2c1bfc9bcb5b0aaa29a908478665e4e413122110000000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e0000000000000000000014293f54697e94a9bfd0e4e4d1c0b4a69d938a837c766e6760554c463a3023160800000000000c22374c6177777777777777777777777777777777777777777777777777777777777776614c37210c00000011212e3a474c5a636e7a84909ca4b2b7c3c9d2ccc4b7b2a59d92867c71665e4b463929170300000000000000000000000000000e18263038454b53596269707e93a8bdbcab9fabb0b4c0ced9e6e2d3c2b49f8b78624d38220d000000000000000001152737495b637986939fa9babcb5a5907b65503b261000000000000000000c22374c61778ca3b5c9e3dfc9b49f8b786354433024131a21232622201815110d12181919191919190c0a040000000000000000000000030d13152020202020202020201e1c160c00000000000000000000000000000000000000000000070b0e11131515161514110e0b080100000000000000000000000000000000000000000000000d20334350555858585858584f4b3f2e1c0800000011263b50667b90a5bbd0e5f7e1ccb7a28c77625252525252525252525252525252525261768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5fafffbede2dbd9d9d9d9d9d9d8d8d7d5dacfcac6c0b4b0a29a8a7c68604e402f1d0c00000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e00000000000000000003182d43586d8298adc2d7edddc8b4a29b887e766e676157514b4437332921190e0000000000001c31465c71868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c836e59432e1900000003111c2a343c494d5c646f7b86929da5b1b5c2c7d0cbc3b6b2a49c91857b70615746331e0a000000000000000000000000010f1e2b36434b56606870777e848d9fb4cac9bcb5bcc9c8d1e2e7dfd0c3b6a497816c5a4834200b00000000000000000009192c3d495b63747e899fb4c9baa5907b65503b2610000000000000000011273c51667c91a6c1d1e4d7c1ac97816c5a493625131f2d36393b37342b2b262220180d000404040400000000000000000000000000071520282a3535353535353535353330291e100000000000000000000000000000000000050b0d131c202326292a2b2b2a292624201d150e0c06000000000000000000000000000000000000000013283c50616a6d6d6d6d6d6d655d4b37230e00000011263b50667b90a5bbd0e5f7e1ccb7a28c77676767676767676767676767676767676767768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5fafff1e1d3cac7c7c7c7c7c7c8c9cdd7d9dcdfdbd1c8c0b4a89e8d7e685e4c3b2a1804000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e000000000000000000051a2f445a6f8499afc4d9eedac5b09b8476696158524b463936434b4336352c1e0e00000000001c31465c71869ba2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a298836e59432e1900000000000c181f2c353e4a4f5e66737d87939ca4aeb3bfd0d3cac2b5b1a39b908475614b36210c0000000000000000000000000f1f2c3c49546069757d858c939a9fabbccfdacfcacfdadde4ded4cbc0b4a59c8676614c3c2b1905000000000000000000091e3245576074808a9ea9bac4b7a5907b65503b26100000000000000000152a40556a7f95aabfd4e5d0baa5907b65503c2c1823313d4a4e504d483b403c37342b1d1305000000000000000000000000000000031525333c3f4a4a4a4a4a4a4a4a4a48453b2e1e0c0000000000000000000000000000070d182022253035383b3e3f40403f3e3c393531272320190e09000000000000000000000000000000000003162939556a7f8383838383827b654f3a251000000011263b50667b90a5bbd0e5fae8d3bea8937e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e92a8bdd2e7fbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf9e6d3c3b6b2b2b2b2b2b2b2b4bac6c4c7d0e1e4ddd0c6b9ab9f8d7c665947341f0e000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e000000000000000000051b30455a70859aafc5dae3ceb9a48e7964584c463a3a474c545460544d493c2c1909000000001c31465c71869bb1b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7ae98836e59432e19000000000000040e19202d36404c546067747e868e99a1b3c7dbdfd2c9c1b5b0a28c77624d37220d00000000000000000000000e1e2c3d495a62737e88939b9fabafb4bcc9d9ebe3dfe3e0ded3cac4b7b2a29a8778635846331d0d000000000000000000081c2e3f4b607584959ea8b9c0b4a69d907b65503b26100000000000000002172c42576c8197acc1d6e1ccb6a18c77614c37221c31424e5b636562595955514d483b3123130100000000000000000000000000000d20334350556060606060606060605e594c3b291600000000000000000000000005101b222b343736434a4e51535455555553514e4b443738352c231c11070000000000000000000000000000000a1e3246577387989898989895806a55402b1500000011263b50667b90a5bbd0e5faead6c1ae9c93929292929292929292929292929292929292929cadc0d5eafbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf3dfcab6a59d9c9c9c9c9c9d9fa8a7afb3c0cdd7e4e4d6c9bcab9e8977614c3c2b19050000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e00000000000000000004192e43596e8398aec3d8e1ccb7a28c77624f4d4c4d52586169727571635b49372715010000001c31465c71869bb1c6ccccccccccccccccccccccccccccccccccccccccccccccc3ae98836e59432e19000000000000000006101b222f36434b56606871798499aec3d9eee5ded2c9c0a28c77624d37220d0000000000000000000006192b3c495b637884939da6b0b5bcc9cacfd9e7f1e6dfd5ccc8c2b6b1a69d918477635a493a2917000000000000000000000e23374b5d6d8298a2b4b9c6b4a29a888279634d38230e0000000000000003182d43586d8298adc2d7dfcab5a08a75604b35202a3a4e6068797b77736f6a6662594e41311e0b000000000000000000000000000013283c50616a757575757575757575736a5945301c00000000000000000000000e19202e373b484c5354606366686a6a6b6a6966636055544d493c382f211a0f00000000000000000000000000000c21364b61768ba6adadadad98836e5836261401000011263b50667b90a5bbd0e5faf1ddcbbaaea8a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a8adbacadcf0fbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf2dcc7b29d87878787878788898c919aa2b4b9c6d7e9e7d9c9b8a797826d5a4835200b0000000000000000000000000000000f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e00000000000000000001162b40566b8095abc3d4e6d4bfa9947f6d65626163676e767f878a8679635544311d0e0000001c31465c71869bb1bcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcae98836e59432e19000000000000010a161e29333b484d5b636e79828999a1b3c7dbe2d6cdc5b8b3a68c77624d37220d000000000000000000000b2035495a6379889aa2b3b7c4cacfdadfe3ebf1e1d3cac5b8b3ada49c93887c6f6259493c2c1b0b0000000000000000000010253a50657b8fa0b2c0cdc3af9a84756d635b4935210c0000000000000001172c41566c8196abc1d6e1cbb6a18c76614c3626334758687e8c908c8884807b7768604e3a25110000000000000000000000000000152a3f556a7f8a8a8a8a8a8a8a8a8a88735e48331e00000000000000000005131e2b353e4b4f5962696f74787b7e7f80807f7e7b7975706a635a504c40362d1c13080000000000000000000000000f24394f64798ea4c4c2c2b19c86715443301c08000011263b50667b90a5bbd0e5fafae9d9cbc1bebcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbdc0cad8e8f9fbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b7572727272727374777c84919ea8b9cde1ede7d5c5b49f8b78624d38220d00000000000000000003090b11130e0f253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e0000000000000000000010253a50657a8fa5b7cbdfdfcab49f8d827a7776787c838a949c9f9b8573604b3c2c190600001c31465c71869ba7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a798836e59432e19000000000009141d28323a474c59626d79838e979ea7b3bfd0d7cdc6b9b4a79e948876614c37210c0000000000000000000a1e30414d6278889da6b4c0cbd5dfe3e1dedbdde4d3c3b6b2a79e978f867e75675f4c483b2c1e0e0000000000000000000002152737586e8398adbecfcab6a58e7964574d493c2c19060000000000000000152a3f546a7f94a9c6d6e9d0bba6917c66544437424c6176899eaba69d9995918c7d68523d28130000000000000000000000000000152a3f556a7f949f9f9f9f9f9f9f9d88735e48331e0000000000000000081623303c484d5c646e777e84898d90939495959493918e89857f786f665e4e4a3d30251809000000000000000000000012283d52677d92a7bcd2c9b49f8975604b35200b000011263b50667b90a5bbd0e5fafff7e9ddd6d3d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d5dce8f6fffbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76615d5d5d5d5d5962676f7c8a9eb4bfcfe2f3e2cebbaa95806b553b2a1805000000000000000a161e2127282321253a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e000000000000000000000b20354b6074879db2bfd0e3cfbcab9f978f8c8b8d91989fa9b1b5a3947f6a5b4935210c00001c31465c71859292929292929292929292929292929292929292929292929292929292836e59432e19000000000e19263138454b58616b78828c99a1acb3b9c5d0cec7bab4a89e95897f75615847331f0a0000000000000000001025394d5f6f849aa6b7c4d1e0e7e5d7cdc9c5c9d2cab6a59c9089827a726961574d41342a1d0e0000000000000000000000081d31445573889db3c8dcc7b29d87725c4a39352c1e0e00000000000000000010263b50657b90a8b9cde1dac5b09a847260555153606c8196a7b9b8b3aeaaa78e79644f39240f0000000000000000000000000000152a3f556a7f94aab5b5b5b5b5b39d88735e48331e0000000000000008162633414d5a626e7a838b939a9ea7a6a8a9aaaaaaa8a6a99f9a948d847b6f635b4a433627190900000000000000000001162b40566b8095abc0d5cdbaa98d78624d38230d000011263b50667b90a5bbd0e5fafbe9d9ccc2bfbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbec1cbd9e9fafbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b4747473b484d525e667c91a1b3c6dbf5ebd9c8b19c87725947341f0b0000000000010f1a2832363c3d39352c3a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e00000000000000000000081d314455677d92a1b3c1ced9c9bcb4aca4a2a1a2a7aeb4bac7c1b49f8b79634d38230e000011263b51667c7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a654f3a25100000000e1e2b37444b56606a76808a979faab3bfc9cccfc8bbb4a99f968a80766a6057473a2a17040000000000000000071b2d3e52677d92a2b4c4d5e2e9dccfc7bab4b0b5c1c7b29c877b746d655d544b4639301f180d0000000000000000000000000b20364b60758ba6b7cbdac5b09a85705b3e2d21190e000000000000000000000b20364b6075899eb4c8d8ddc8b4a29680736967696f7e929fb1c5cbc8c8b39e8875604b36200b0000000000000000000000000000152a3f556a7f94aabfcacacac8b39d88735e48331e0000000000000716263444505f6778838f989faaafb3b9c5bdbfbfc0bfbec7bab4b0a9a29a9084796960544437271909000000000000000004192e44596e8399aec3d8d7c7a5907b66503b2611000011263b50667b90a5bbd0e5faf1deccbbaea9a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a9aebbcbddf1fbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b3632322b3437404d5e6e8399aec7d8eaf6decab6a48c77624c37220d00000000000f1f2d38454b51524e493d3a4f647a8fa4b9cfe4e3ceb8a38e79634e39240e00000000000000000000011426374a60728399a3b1bdc8d1cfcac2bab7b6b8bcc3c9cdc7bfb2a699846f5a442f1a05000f24384c5e666767676767676767676767676767676767676767676767676767676767655d4b37230e000006192b3c49556068757f89969fa9b4bbc8d0d0c9bcb5aa9f978b81776b61584b45392a1c0c0000000000000000000d22364a5c72869cb1c0d0e2e9d9cbbeb2a99f9ba3b5c6b19b86716055504b3f3632291b1305000000000000000000000000000c21364b61768babbccfdac5af9a85705a45301b060000000000000000000000091d3245566d8298aabbcee2d1c0b09e96867f7c7e84929cadbdcee0cebbaa96816c5544311d080000000000000000000000000000152a3f556a7f94aabfd4dfddc8b39d88735e48331e0000000000021525344551626b7d8998a0aeb4bbc8c9ccd6d3d4d5d5d4d3d7cdc9c5c0b4afa29a8b7f726055443726140100000000000000061b30465b70859bb0c5dad2bda8927d68533d2813000011263b50667b90a5bbd0e5faebd7c2ae9d94939393939393939393939393939393939393939daec1d6ebfbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36211d182022304050657b90a9bacee2f6e5d3c2a6907b66513b2611000000000b1b2d3d4a56606668635b4b434f647a8fa4b9cfe4e3ceb8a38e79634e39240e0000000000000000000000091c304354607584979fb0b4c0c5c9ced8cccbd6ccc9c4bfb3afa199887a644f3a240f0000091c2f404c5152525252525252525252525252525252525252525252525252525252524f4b3f2e1c0800000b2035495a62737d87949ea7b4bac7ced1c8bfb3ab9f988b82786c61594c463a32281b0c000000000000000000000f24394e64798ea4b6cadeecdbcbbbaea0988a859bb0c5b39e8873554437372e211e160b0000000000000000000000000000000b20354a60758a9fb5cadbc6b09b86715b46311c000000000000000000000000021528384d63788b9fb4c0d1decdbdb0a49c94919399a1adbacadbd2c1b49f8b78634d372715020000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e00000000001020324351636c80929ea7b2becaced9dee0e8eae2dfdfe2eae9e1dedad0c7c0b4a99f948273605544311d1300000000000000081d32485d72879db2c7dcd4bfaa947f6a553f2a15000011263b50667b90a5bbd0e5fae9d4bfa9947f7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e93a9bed3e8fbe6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c050b1221364b60758a9fb4c9dff4e8d3bea8937e69533e2914000000031729394a5b63757c7d796b60544f647a8fa4b9cfe4e3ceb8a38e79634e39240e0000000000000000000000001325364557617581909aa2abb0b4bac7babac5b9b3afa9a1998f8377645c4a36220d00000012222f383b3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a372e21110000011527374d627885929da6b3b9c5cdd2c9c0b4afa1998d83786d62594c473a33291e160a000000000000000000000014293f54697e94a9c2d3e5e1cebdae9d9382777c91a6bbb59f8a75604b35201c110a0300000000000000000000000000000000071c30435474899eb4c9dcc7b29c87725d3b2b18050000000000000000000000000a2035495a6c8196a2b4c1ceddcdc2b5b1a9a6a8aeb3bfcadecfc2b5a395806b5b49351909000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0000000009192e3e4f616c81959eb3b9c5cfdfe2e7e0ddd5d8cecac9cdd7d4dcdfe6e3dcd1c7bab4a0988373604b41301c0c0000000000000a1f34495f74899eb4c9ded6c1ab96816c56412c17010011263b50667b90a5bbd0e5f7e1ccb7a28c77686868686868686868686868686868686868768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000091e32455672879cb1c7dcf1ead5c0aa95806b55402b16000002101e33465763798891928c80726157647a8fa4b9cfe4e3ceb8a38e79634e39240e000000000000000000000000081828394657616c7b858e959a9fa9a3a5a5a4a79e99948d847b6e61594a3e2e1b0700000004121c2426282828282828282828282828282828282828282828282828282828282825231c11030000081d31445570859aa3b2b7c4ccd2c9c1b5b0a29a8f83796e635b4d483b342a1f170b03000000000000000000000002172d42576c8297acc1d7ecd9c5b19f937f6e64798fa4c9bcab8c77624d37220d00070100000000000000000000000000000000001325485d72889db2c7ddc9b49f8974594834200b00000000000000000000000006192c3c4b6073849aa3b1bdc8d1d2c9c6bebcbec4c7d0d3cabfb2a49b8575604b3c2c1900000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e000000021527374b5c697f949fb0bcccd6e4ebe3d5cbc8c0c8bbb4b4bac7bfc7cad3e2eae5d8cebeb2a197816c5f4d3a2a18040000000000081d314455758a9fb4cadfd7c2ac97826d57422d18020011263b50667b90a5bbd0e5f7e1ccb7a28c77625353535353535353535353535353535361768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0000021628385b70859bb0c5daf0ebd6c1ab96816c56412c170000102032424c6176879ca6ab9f9683756264798fa4b9cee4e3ceb8a38e79634e39240e000000000000000000000000000a1b2839464b5e66707980858a8c8e8f908e8c89847f786f655d4c473b2e2010000000000000090f111212121212121212121212121212121212121212121212121212121212100e08000000000b20354b60758a9fb4c1cbd3cac2b5b1a39b90847a6f635b4d493c342b1f180c040000000000000000000000000004192f44596e8499aec3d9ecd7c2ac97826d6162778dabbcc9a48f79644f3a24131a1c160b080200000000000000000000000000001b30465b70859bb0c5dacdbaa88c77624d37220d000000000000000000000000000e1d314455617685979fb0b4c0c7cad4d0d1d0d4cbc8c2b6b1a1998677615745321e0e00000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e000000081d314455647a8c9fb4bdcde0e8ece3cdc5b8b3aba5aa9f9fa9a4aab2b6c3ced8e5eae2cfbfb19f917d675847331f0d00000000000b20354b60758aaabbcee2d7c2ad98826d58432d18030011263b50667b90a5bbd0e5f7e1ccb7a28c77624d3e3e3e3e3e3e3e3e3e3e3e3e3e3e4b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c000006192c3c5b71869bb0c6dbf0ebd6c0ab96816b56412c1600071b2d3e4f606e8398a5b6bcb4a199867865798ea4b9cee3e3ceb8a38e79634e39240e00000000000000000000000000000b1b2832404c505c646b707577797a7a7977746f69625a504b3f342a1d10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768babbccfcbc3b6b2a49c91857b70645c4e4a3d352c20190d04000000000000000000000000000000051a30455a6f859aafc4dae3ceb9a48e79644f60758a9fb5bba6917b66513c26282f322b201d150900000000000000000000000004192e43596e8398aec3d8d7c6a48f7a654f3a251000000000000000000000000000021527374758617481909aa2acb2b7c3bbbcbbc4b7b2ada49c9283766159473928160000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0000021527384b6074869caabbcedbeae7dacfbdb0a69e968f8c8a8a8b8e959ca5b4bac7d6e4ecddcebdb39e8977614c3b2b1805000000000b21364b60768ba0b5d9ebd8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37292929292929292929292929364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b36210c0007102135495b73889db3c8ddf2ead4bfaa957f6a55402a15000d22364a5c697e93a0b2c3cfbfb3a49c897b798ea3b8cde3e3ceb8a38e79634e39240e0000000000000000000000000000000b161e2f383e4a4f565660626365656462595a544d483c372e1f180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba0b5c4b7b2a59d92867c70655d4f4b3e362d21190e050000000000000000000000000000000000051a2f445a6f8499afc4d9e0cbb6a18b76614c5573889eb3bda8937d68533e363e4447413631271909000000000000000000000001162c41566b8196abc0d6d2bda7927d68523d2813000000000000000000000000000009192a3a4756606c7b858f979da5a4a6a6a5a4a69d9891877d6e6158473a2a1b0a0000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0000091d314556697e94a4b6c8d9ebecdac9bcb59f9688807a77757476797f87949fa9b9c6d6e9ebe0ccb9a797816c594834200b000000000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37221313131313131313131321364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362119131c202e3e4d63788da6b7cbe0f4e9d6c6a7927d68523d2813000f24394f64798a9fb4becfe3d0c2b6a79e8b8095aabfd5eae3ceb8a38e79634e39240e0000000000000000000000000000000003111c232d363938454b4d4e50504f4c473b3f38352b231c11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba0b8b3a69d93877d73665e504c3f372e211a0f060000000000000000000000000000000000000003182d42586d8297adc2d7e1ccb7a28c77624d5c71869cb1bfaa95806a55464b535a5c564b44372715020000000000000000000000142a3f54697f94a9bed4d5c0aa95806b55402b160000000000000000000000000000000c1c2a38454b5d65707a82878c8f9091908e8d88827c73675f4c463a2a1c0c000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e00000b20364b6074889db3c2d3e6f6e3cfbcab9f9381766b6561605861646a747e8b9ea8b9cde1ede8d6c5b49f8b77624d372210000000000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b362e2e2530353e4a5c6b8096abc4d5e7f5e1cdb9a88e79644f39240f000f24394f647a889ba3b2bfcde2d3c5b8aa9f959eafc3d7ece3ceb8a38e79634e39240e00000000000000000000000000000000000009101b222427313637393a3b3937342a2a2320190e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba0a79e94887e746760544d40382f221b10070000000000000000000000000000000000000000000014293f54697e94a9c2d3e5d2bda8927d68595a6f8499afc1ac97826c575761686f716b605544311d12000000000000000000000012283d52677d92a7bcd2d8c3ad98836e58432e19030000000000000000000000000000000c1a28323f4c505d656d7277797b7c7b7977736d6760544d4133291c0c00000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e000317293952677d92a6b7cbe0f1e6d4c3b59f8d7e6c6158504c4a464c4f5560697b8a9eb4bfd0e2f3e2cebaa995806b553e2d1b070000000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b76614b43434336434a4e5c647a8a9fb4c9def2f3dec9b49e8974604b35200b000d22364a5c64778599a1b0bcced8d5c8bbb4aaafbcccdff2e3ceb8a38e79634e39240e0000000000000000000000000000000000000000070d0f151d202224252524221f18140d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b9e95897f756860554b433630231c11080000000000000000000000000000000000000000000000000f24394e64798ea4b6cadeddc8b29d8877665e6d8297adc2ae99846f636c767e84878073604b40301d0c0000000000000000000010263b50657b90a5bad0dac5b09a85705b45301b06000000000000000000000000000000000a151d2f383f4b505759616466676664625a58514b4336301f170c0000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e000a1e3346576f8499afc4d5e7f4dfcab6a596806b604c463a3735333637444b5d677d92a1b3c7dbf1ead8c7b29d87725c4a36220d0000000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b7661595959595a5460646c7a889da9bacde1f7e7d2c1ad98836e5544311d0800071b2d3e4a59627583959eb4bac7d5d8cec9bfc3ccdaeafbe3ceb8a38e79634e39240e000000000000000000000000000000000000000000000002090b0d0e10100f0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60758b8980766960564b4437302618120900000000000000000000000000000000000000000000000000000d21364a5c72869cb1c1d2dfcbb7a69d877b726b8095abc0b09b857179818993999c96816d5e4d3b2a18040000000000000000000f253a4f647a8fa4b9cfdbc6b19c86715c47311c07000000000000000000000000000000000002111c232e373a3a474c4f5151504f4d483c3c353026181304000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e000c21364c61768a9fb4c9dff2ebd9c9b29d8774604b42332921201f2127313f4d5f6f8399aec3d4e6f5dfcab7a58e79644f39240f0000000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f5e0cbb6a08b756e6e6e6e6e6f707479818b9da6b7c7d7e9ebd9c9b5a3907b655037271501000010202d3b4857617280929fa9b8c5d2e2dfd5d7dfeaf8f8e3ceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607480776a61574b453831271c140800000000000000000000000000000000000000000000000000000000071a2d3e52677d92a3b5c7d7d4c4b7a59d9087818298adc3b49e8a868e969ea8afb19f917c665947341f0e0000000000000000000f24394e64798ea3b9ceddc7b29d88725d48331d080000000000000000000000000000000000000009111c23252a34373a3b3c3b3938342b27201c14080000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e0010263b50657b90aabbcee2f7e3cfbcab947e695645321f170c0b0a0c151d304150657b90a5b7cadff4e6d4c3a9947e69543f29140000000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faeed8c3ae998383838383838485898e979fa9b7c4d4e5eae3cfbcab9b85715e4c38190900000002101d2b394654606b7d8b9ea6b5c2d0ddeaecf2fbfff8e3ceb8a38e79634e39240e00000000000000000000000000000000030c121420202020202020202020202020202020202020202020202020202020080100000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556606b61584c463932281d1509010000000000000000000000000000000000000000000000000000000000000f20354a6072859ba9bacddad4c3b7b2a49c9698a0b2c6b9a89e9ca4acb4b9c6bdb39e8877614c3c2c190600000000000001080e23384d63788da2b8cdddc8b29d88735d48331e08000000000000000000000000000000000000000000080e10181f222426272624222019120b0801000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e00152a40556a7f95aac8d8eaf4dfcab49f8b76614c3828150400000000021323374b5d72879db2c7ddf2edd8c3ae98836e59432e190000000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf0dbc6b3a1999898989898999b9ea7acb4bac7d4e2e6dfcdbdb49f8c7a644f402f1c0000000000000d1b2836434a5f677b889ca4b3bfcde2eaf6fffff8e3ceb8a38e79634e39240e000000000000000000000000000000071420272a353535353535353535353535353535353535353535353535353535351d150900000000000000000000000000000000000000000000000000000000000000000000000000000002152738454b564c473a33291e160a020000000000000000000000000000000000000000000000000000000000000000071c304354647a8b9fb4bcc9d6d4cbc3b6b2abadb2becfc6b9b4b1b5c2c9cdd6cbb8a699836e5a4935200c000000000009151d2025394e63788ea3b8cddbc6b19c86715c47311c07000000000000000000000000000000000000000000000000040a0c0f1112110f0d0b0500000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e00182d43586d8298adc2d7edf1dbc6b19c86715847331a0a000000000000081c2e3f586d8398adc2d8edf0dbc6b19b86715c3625130000000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5faf6e2cfbfb3aeaeaeaeaeaeafb0b3b8c5c9ced8e5e0d4cabcb09f947f6a5c4b372111000000000000000b182530414d5d65788699a1b0bdced8e6f3fff8e3ceb8a38e79634e39240e0000000000000000000000000000031425323b3f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a312719090000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2731364137332a1e170b0300000000000000000000000000000000000000000000000000000000000000000000001325364b5c677d929fabb9c5cfdfd3cac7c0c3c6cfdcd6ccc9c6c9d2ded3cabeb2a59d8978624d38230d000000000b192731353b4051667c91a6bbd1d9c4af9a846f5a452f1a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001b30455a70859aafc5daefecd7c2ad97826d583a2a17000000000000000014293f54697e94a9bed3e9f3dec9b39e89745443301c0700000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0e5f0f0edddcfc6c3c3c3c3c3c3c4c5c8ccd6dfe0ded5cbc3b7b29e958172604a3e2e1b03000000000000000008131c313f4b5a627583969fb4bbc8d6e3f1f1e3ceb8a38e79634e39240e00000000000000000000000000000c2032434f546060606060606060606060606060606060606060606060606060605e44372715010000000000000000000000000000000000000000000000000000000000000000000000000000000a151d202c221f180c030000000000000000000000000000000000000000000000000000000000000000000000000008182e3e4d5f697f8d9ea7b2bfcacfd9dcd6d8dae2ede8e1dedbd8d2c9c3b6b2a098877a645a4935200c0000000b1b2837444b50525e6d8298adc2d8d4c4aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000001080b0d1013141516151513110e0b0802000000000000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001c31475c71869cb1c6dbf1ead5c0ab95806b56402b16000000000000000012283d52677d92a7bcd2e7f4dfcab59f8a73604a35200b00000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f7e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f5e6d1bca6917c67513c27120011263b50667b90a5bbd0dbdbdbdbdbdbdbd8d8d8d8d8d8d9dad9d7d5d5ccc8c4b7b3a59d908072605443302010000000000000000000000013212e3c4957617381939faab9c5d3dcdcdcceb8a38e79634e39240e000000000000000000000000000012273b4f6169757575757575757575757575757575757575757575757575757575705544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000002090b160c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000102030414f61697c8999a1afb4bcc9c8cbd4d7dae1e4d6cdc9c3c1b5b0a59c908276645c4a3c2c190600000316283946556065686d7c8d9fb4cadfcbb7a6907b65503b26100000000000000000000000000000000000000000000000000000000000070b10141d20232528292a2b2b2a282623201d15110b09020000000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d32475d72879cb2c7dcf1e9d4bfa9947f6a543f2a15000000000000000011263b51667b90a6bbd0e5f8e3cfbcab8b76614b36210c00000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0e5f0e1ccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbe0f0e6d1bca6917c67513c27120011263b50667b90a5bbc6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c5c4c2c0c5b8b3ada69d94877c6b60544336251302000000000000000000000003101e2b394655606c7e8c9ea7b6c3c7c7c7c7b8a38e79634e39240e0000000000000000000000000000142a3f54697f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a73604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002132332434f5e6678838f999fabaeb3b7c4c2c5cfd6c6b9b4aea9a39b92877c6d61584a3e2d1e0e000000091e32465761737a7d828c9fabbccfd1c1b29d8775604b36200b00000000000000000000000000000000000000000000000000000608131c2025263135383b3d3f3f40403f3e3b3936312726201d150a07000000000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5ffecdab6a18b76614c36210c00000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbd0dbdbdbccb7a28c77624d37220d00000000000000000c21364b61768ba0b6cbdbdbdbd1bca6917c67513c27120011263b50667b90a5b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b0b0afadaaa7a79e9891887f75665e4a433625180800000000000000000000000000000e1b2937444b60687b899ca4b1b1b1b1b1b1a38e79634e39240e0000000000000000000000000000142a3f54697f949f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8a75604b35200b00000000000000000000000000000000000000000000000000000000000001080b110f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005142532404c5a636e7a848b93999da6a3adb2becdb9a89e98938d867d74665e4c473a2d200f000000000c21364b6175859092989faabbc9d1c4b5a3937e695645311d09000000000000000000000000000000000000000000000000060e19202530353a37444b4d5053545555555453514e4b44373b363228221b100800000000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5ffe0cbb6a18b76614c36210c00000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5bbc6c6c6c6c6b7a28c77624d37220d00000000000000000c21364b61768ba0b6c6c6c6c6c6bca6917c67513c27120011263b50667b909b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a999795928e89837c746960574c4030251808000000000000000000000000000000000b192631424e5d657986999c9c9c9c9c9c9c8e79634e39240e0000000000000000000000000000142a3f54697f94a9b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a08a75604b35200b000000000000000000000000000000000000000000000000000000000009151d2027241d12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714222f3c494d5c646f787e84888b8e98a0b2c9b49e8a837e78716860554c40332a1c0f010000000011263c51667b91a3a7adb4bbc8cac0b4a69b8574604b3827150200000000000000000000000000000000000000000000040f1a212b3536434a4f565560626568696a6b6a6a686663605556514b4538362d221b10040000000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000c21364b61768ba0b6cbe0d8c3ae98836e59432e19040011263b50667b90a5b1b1b1b1b1b1b1a28c77624d37220d00000000000000000c21364b61768ba0b1b1b1b1b1b1b1a6917c67513c2712000f253a4f647a868686868686868686868686868686868686858482807d79746e6660554b45392f1c130800000000000000000000000000000000000009141d313f4b5b637683878787878787878679634d38230e0000000000000000000000000000142a3f54697f94a9becacacacacacacacacacacacacacacacacacacacacab5a08a75604b35200b00000000000000000000000000000000000000000000000000000008131c2731353c393022120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121e2c353e4a4f5a62696e7376798298adc2b09b867169635a524b44372f1f170c00000000000012283d52677d92a7c1c2c9c5c2b6b1a29a8877625645321a0a000000000000000000000000000000000000000000000c171f2c363c494d5460656b7075787a7d7e7f80807f7d7b7975716c6660564f4a3e372e1f180c00000000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000c21364b61768ba0b6cbdbd8c3ae98836e59432e19040011263b50667b909b9b9b9b9b9b9b9b9b8c77624d37220d00000000000000000c21364b61768b9b9b9b9b9b9b9b9b9b917c67513c2712000d22374b5d64717171717171717171717171717171717171706f6d6b67636054514b443732281b120000000000000000000000000000000000000000000114212f3d4958616e7272727272727272635b4935210c000000000000000000000000000014293e53697e93a8c2d2e6dfdfdfe2d4cbc7c4c4c4c4c4c4c4c4c4c4c4c4b5a08a75604b35200b00000000000000000000000000000000000000000000000000081218253037444b514d40301d0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202d363c484d54595861697e94a9beb29d8873544d493c3531271912040000000000000012283d52677d92a7c6b9b3afaaa49c93847762594838281500000000000000000000000000000000000000000003111c29333d494e5a626b737a8085898d9092949495959493908e8a86817b756d645c4f4b3e342a1d11030000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000c21364b61768ba0b6c6c6c6c3ae98836e59432e1904000f253a4f647b868686868686868686868577614c37220c00000000000000000b21364b607585868686868686868686867b65503b261000081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5b5a5855524e4b43363631271e160a000000000000000000000000000000000000000000000003111f2c3a474c595c5c5c5c5c5c5c5c4d493c2c190600000000000000000000000000000f243a4f647a8fa3b5c8d9ebfae6d4c3b7b2aeaeaeaeaeaeaeaeaeaeaeaeaea08a75604b35200b000000000000000000000000000000000000000000000008111c232f36434a5560665e4d39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101b222b34383e3a4652677c91a7c8b49f8a75604a352c201d150900000000000000000012283d52677d92a2a1a89e9a9590867e736259483b2b1a0a00000000000000000000000000000000000000000115222f3a474c5b636e7880888f959a9ea8a5a8a9aaaaaaa9a8a6a99f9b969089827970645c4c473b2f21110000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000c21364b61768ba0b1b1b1b1b1ae98836e59432e1904000d22374b5d647171717171717171717171615947341f0b0000000000000000091e324556607171717171717171717171655d4c38230e000010202e373a464646464646464646464646464646464646454442403d39353026201d15090300000000000000000000000000000000000000000000000000010f1c2a333744474747474747474738352c1e0e0000000000000000000000000000000d22364a5c71869baabbcee2eddfcbb7a59d99999999999999999999999999998a74604b35200b00000000000000000000000000000000000000000007101b222f38404c546067747c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d19202229293a50657a8faabbbbaa8c77614c37220e08010000000000000000000012283d52677d8d8d8c8b8985807b73686054483b2b1d0d000000000000000000000000000000000000000009141d33404c58616c79838c969da6abafb4b9c6bdbebfc0bfbfbdc7bab4b1aba79e978e847a6e61594b3f2f1c0800152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000c21364b61768b9b9b9b9b9b9b9b98836e59432e190400081b2e3f4b4f5c5c5c5c5c5c5c5c5c5c5c4c473b2a1804000000000000000003162838454b5c5c5c5c5c5c5c5c5c5c5c504c3f2f1c08000002101b2225313131313131313131313131313131313131302f2d2b2824201c140b080200000000000000000000000000000000000000000000000000000000000c171f212f32323232323232322321190e00000000000000000000000000000000071b2e3e4f647a8c9fb4bfd0e2ddc7b29d8783848484848484848484848484848373604b35200b00000000000000000000000000000000000000060f1a212e373f4b505e66727d8788735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1421374c61768b9faba8a38e79634e39240e0000000000000000000000000c21364c61757878777574706b6560544b43362b1d0d00000000000000000000000000000000000000000919263143505e6676818c999fabb2b7c4c5c9cdd7d2d3d4d5d5d4d2d8cec9c6c5b9b3ada29a8f8277655d4b37230e00152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000b21364b6075858686868686868686806b56412b1601000010202e373a464646464646464646464637342a1d0c000000000000000000000a1a28323646464646464646464646463b382f21110000000000080d0f1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1a1816120e0b0801000000000000000000000000000000000000000000000000000000000000000000040a0c191d1d1d1d1d1d1d1d0e0c060000000000000000000000000000000000001022374b5d6a7f94a1b3c4d4dec9b49e89786f6f6f6f6f6f6f6f6f6f6f6f6f6f605443301c080000000000000000000000000000000000050e1a212d363e4b4f5d65707c86929c88735d48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758697f8c929393907b65503b26100000000000000000000000000a1e3346576163636160555a55504a43363026180d000000000000000000000000000000000000000008182637444b616a7c88979faab4bcc9cbd4dadedcd7d2d0cececfd1d4d9dfdfdbd6ccc9c0b4afa098897b65503b251000152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000091e324556607171717171717171716b62513d291400000002101b22253131313131313131313131221f180c0000000000000000000000000a161e21313131313131313131313126231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4a60728399a6b7c8d8cdb9a89c8675605959595959595959595959594b4336261401000000000000000000000000000000050e19202c353d4a4e5c646f7b85919ca49d88735d48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4f6169797d7e7e7e78634d38230e00000000000000000000000003172939464c4e4d4c4b4437403b3530251c14080000000000000000000000000000000000000000001325364455606d7f8d9da6b4bbc8cfd9dfdfd3cac7c1bdbab9b9babbbfc4caced8dfe0ded1c8beb2a795806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000003162838454b5c5c5c5c5c5c5c5c5c56514434210e0000000000080d0f1c1c1c1c1c1c1c1c1c1c1c0c0b04000000000000000000000000000003090b1c1c1c1c1c1c1c1c1c1c1c100e080000000000000000000000000000000000000000040a0c1f2020202020201f1d170d0b0600000000000000000000000000000000000000000000000000000000000000000001080b0f1314161514110c0a0400000000000000080a0b0b0b0b010000000000000000101c3043546176879daabbced6c6b5a497826d5f4e3d44444444444444444435302618080000000000000000000000000000040d181f2b353d494e5b636e7a84909ba3b1b29d88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c32434f5b6368686868635a4935200c000000000000000000000000000b1b2933363838373631272b25201c1308010000000000000000000000000000000000000000000d1c304354607382959fabb7c4ced9e3dacfcac2b6b1aca8a5a4a3a4a6aaafb4bbc8cbd4e2e3dccfc5ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000a1a283236464646464646464646413d342616040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f213435353535353534322d2320190e0000000000000000000000000000000000000000000000000000000000000609151d2024282a2b2a2926221f180c080100070b151d1f2020202017140e050000000000001325364758647b8c9fb4bfd0d2c2b19f927d685b4a39292f2f2f2f2f2f2f201c140800000000000000000000000000030c171f2a343c484d5b636e79838f9aa2b0b4c1b29d88735d48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001525323d4a4e525353534d493c2c190600000000000000000000000000000b171e21232322201d1516100b0700000000000000000000000000000000000000000000000d1d30404a60728197a0b5bcc9d4e2dfd1c9bcb5aea49c9793908e8e8f91949a9faab2b7c3d4e6ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000a161e213131313131313131312b2921160800000000000000000000000000000000000000000000000000000000000000000000080e102020202020202020202020200a040000000000000000000000000000000000000000000c1c2a3337494a4a4a4a4a4a4a474238352b1e11030000000000000000000000000000000000000000000000000000000f1a21273135393d3f40403e3b37342a201d15131c202a3235353535352c29221608000000000008182a3a4b5d697f94a1b3c3d4cebdb49f8a79635746321e1a1a1a1a1a1a0b0801000000000000000000000000020b161e29333b474c5a626d79838d99a1afb4c0c8c8b29d88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007151f2d36393d3e3e3e38352c1e0e00000000000000000000000000000000030a0c0e0e0c0b0802000000000000000000000000000000000000000000000000000005182a3b4c5e6b8096a0b1becfdae7dccfc1b4ab9f988e87827d7b79797a7c7f848b929da5b7cbdfead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000003090b1c1c1c1c1c1c1c1c1c16140e0400000000000000000000000000000000000000000000000000000000000000000003111c23263535353535353535353535351f170c0000000000000000000000000000000000000004172a3a474c5f6060606060605f5c574d493c2f21110000000000000000000000000000000000000000000000000008131c2c3537444b4f5354555553514c473a35312725303540484a4a4a4a4a413e3426160500000000000c1c2e3f4a60728399a5b7c8d8cdbaa89c8675614b4231200f0004040400000000000000000000000000010a151d29323a474c59626c78828b989fabb3bfc8d0cdc3b29d88725d48331d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124282929292320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344859667c919eb0becee3ecdbcdbeb2a39b8d8379726c6865646465666a6f767d879db2c7ddead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f383b4a4a4a4a4a4a4a4a4a4a4a4a33291c0c0000000000000000000000000000000000000a1f334758617475757575757574726c625a4c402f1f0e0000000000000000000000000000000000000000000000081825303d494e55606468696b6a69666159534b443736434a555d5f6060606056514434220e000000000000101c3043546176879daabbced7c6b6a498826d604e3e2d1b0b00000000000000000000000000000009151d283239464b58616b77818b979faab5bcc9d0cec6b9b4a599846f59442f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e131313130e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4c6277899eb3bccddcecdecdbdb0a098857a6e645c5753504f4e4f515558616f8499afc4d9ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2f3f4c5060606060606060606060605e463a29170400000000000000000000000000000000000c21374c61768a8a8a8a8a8a8a89878278655e4c3d2c1a0600000000000000000000000000000000000000000000132536434a5b636c75797d7f807f7e7b77706860554c4354606a7274757575756c62513e2914000000000000001325364758647a8b9fb4bfcfd3c2b2a0937e685c4a3929170300000000000000000000000008131c273138454b57616a76808a969fa9b4bbc8cfcfc8bbb4a89e958779634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22374b5d6e8298a7b9ccdaeae3d1c0b09f968274645c4e4a3e3e3b39393a3c3a475a6f8499afc4d9ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384c5d657575757575757575757575705846331f0a00000000000000000000000000000000000a1f3347586b8095a89f9f9fa99f9c978a7c655b493521100000000000000000000000000000000000000000000a1c304354606a7981898e9294959593908b857d74665e4b60727f878a8a8a8a8a816c56412c17000000000000000818293a4a5c697e93a1b2c3d3cfbeb49f8b7a645746331e1402000000000000000000000e18253037444b566069757f89959ea8b4bac7ced1c8beb2aa9f968a7f75635b4935210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c11111111100d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d10111111110d0b05000000000000071a2d3d4f657a8fa0b2c5d6e8e8d6c5b4a296816d60564a3e362d2826242425272a445a6f8499afc4d9ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b8a8a8a8a8a8a8a8a8a8a8a76614c36210c000000000000000000000000000000000004172a3a4c6176899eb4c6b5bab4b1a99f8a79634e3f2e1b08000000000000000000000000000000000000000a1a30414a60727f8b979ea8a8a9aaaaa8ab9f9b93867c6d61687d929d9faa9f9f96816c56412c1700000000000000000c1c2e3e4f616e8399a5b6c7d7cdbaa99c8776614c423220100000000000000000000e1e2b36434a556068747e88949ea7b4b9c6cdd2c9c0b4afa0988b81776a6157493d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f2127272727252220180d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d181f2225272727272220180d00000000000c21364a5b6f8499afbecfe3f3e0ccb8a79a8473604b45382d211a131a2123303434445a6f8499afc4d9ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b909f9f9f9f9f9f9f9f9f8b76614c36210c0000000000000000000000000000000000000c1f3347586b8095a8b9cccdc9c7baa99a846f5d4b37220f000000000000000000000000000000000000021528384d5f6c80949faab4b9c6bec0bfc9bcb5b0a49c90827572869cb1b4bbb5ab96816c56412c17000000000000000000102032424c6176879da9bacdd7c7b6a598836e604f3e2e1c0c0000000000000006192b3c48546067747d87939ea6b3b9c5cdd1c8c2b5b1a29a8f83786c61594b46392c1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a33373c3c3c3c3b37342b221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212a34373a3c3c3c3c37342b1d0d000000011426364e63798ea1b3c7dcece9d7c6b39e897862554432281a100f1f2c3539454949495a6f8499afc4d9ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5b5b5b5b5b5b5b5a18b76614c36210c00000000000000000000000000000000000004172a3a4c6176899eb4c6d6ded7c7b4a28f7a644f3d2d1a070000000000000000000000000000000000091d324556677d929eb4bbc8cdd6d2c9c6bfbcbdc2b6b1a098867d92a4b6c9cec1ab96816c56412c1700000000000000000002141f334658647a8b9fb4becfd3c3b2a0937e695c4a3a2918080000000000000b2035485a62727d87939da5b3b8c4cccfcac0b4b0a49c90847a6e635a4c473b32281b0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a474c51515151504d483b362d2012040000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111f2c363b474c50515151514d483b2b18050000081c3043546b8196abbfd0e3f6e1cdbaa895806a59483727150a061a2c3d494e5b5e5f5f5f6f8499afc4d9ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bacacacacacab6a18b76614c36210c000000000000000000000000000000000000000c1f3347586b8095a8b9cde1e5d0c0ae99836e5b4a36210e00000000000000000000000000000000000b20364b6074879db2bdced8e1cfc2b5b1aaa7a8aaafb4b2a49c929cadc2d3d6c1ab96816c56412c17000000000000000000000417293a4a5c697e93a0b2c3d3cfbeb49f8b7a6458473625130000000000000d23384d627886929ca5b2b7c3cbd5c9bcb4aca29a91867b70645c4d493c342a1e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475861666666666562594f4a3e2f22120000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e3d494e5962656666666662594834200b00000b20354b6074889db2c8ddeef4dec9b49f8a77614c3b2b1909000c2135495b637074747474748499afc4d9ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0dfdfdfcbb6a18b76614c36210c0000000000000000000000000000000000000004172a3a4c61768a9eb4c6d6e9dfcab59f8c79634e3c2b19060000000000000000000000000000000011263b51667c90a5b7cae2e1cfbeb2a49c949292949a9faab3b1a7adbacae0d6c1ab96816c56412c1700000000000000000a0a000b1b2d3e4e606e8298a4b6c7d7cebaa99d8776615443301c10000000000010253a50657a8fa4b2b6c3cbd4e0cfbcab9f978d857c73665e4f4a3e352c1f180c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61767c7c7c7c7a776f645c4c402f1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2e3f4b5b636f777a7c7c7c7c77624d37220d00000f24394e64798ea6b7cbdff4ead8c8ac97816c5847331d0d00000e23394e63798589898989898c9fb4cadfead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f4e0cbb6a18b76614c36210c00000000000000000000000000000000000000000c1f3347586b8095a8b9cde1e3cfbcab98826d5a4935200d00000000000000000000000000000000172c41576c8196acc3d4e6dac6b2a098867f7d7d7f848b99a1afbbc0cad8e8d6c1ab96816c56412c1700000000040d13151f1f1f1f1f2031424b6175869ca9bacdd8c7b7a5998372604a3f2e1c0c0000000010253a50657a8fa5c2cad3dfe6dfcab49f8a8278706760544c40362d20190e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607689919191908c847a665e4c3a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000031629394b5d6579838b8f9191918b77624c37220d000014293e54697e93a9c4d4e7f7e2cebbaa907b65503a2a170000041a2f44596f84999e9e9e9e9e9faabbcee2ead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf2e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000004172a3a4c61768a9eb4c6d6e9dac9b49f8b78624d3b2a18050000000000000000000000000000001a2f455a6f849aafc4d9edd7c2ad9882726a67686a6f7883949dafbecee1ebd6c1ab96816c56412c17000000071520282a35353535353535334657647a8b9fb4becfd4c3b3a1947f695d4b3a2a180800000010253a50657a8fa8b4bac7ced8e3cfbcab9f978880786d625a4c473a32281d1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576d8297a6a6a5a29a8a7c665947341f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000a1e324657657b89999faba6a699846e5948341f0b0003182e43586d8398adc2d8edf4dfcab49f8a75604b36210c0000071c31475c71869cb1b4b4b4b4b4bbc8d9ebead5c0ab95806b56402b1600152a3f556a7f94aabfd4e9ddc8b39d88735e48331e001d33485d72889db2c7ddf0e8d3bea9937e69543e2914000000000000000010263b50657b90a5bad0e5f0e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000c1f3347586b8095a8b9cde1e2cebbaa97816c5947341f0b0000000000000000000000000000001c31475c71869cb1c6dbe3ceb9a38e7964545253555a626f7f949fb1c5daebd6c1ab96816c56412c170000041525333c404a4a4a4a4a4a4a4a394a5c687e93a0b2c2d3d0bfb49f8c7b6558473625130000000e24394e63798a969fa9b4bbc8cfd9c9bcb4a69d968c82786b61584b4538312619120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394f647a8fa4b6c0b4a99e8977614c3828160300000000000000000000000000000000000000000000000000000000000000000000000000001325364b6175889da7b5bcb8a6917c66513b2a180500011426365b71869bb0c6dbf0f1dbc6b19c86715645321e090000071c32475c71879cb1c6c9c9c9caced9e6e5e5d5c0ab95806b56402b1600152a3f556a7f94aabfd4e2ddc8b39d88735e48331e001d33485d72889db2c7dbdbdbd3bea9937e69543e2914000000000000000010263b50657b90a5bad0dbdbdbcbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000004172a3a4c61778a9eb4c6d6e9d9c8b49f8a77624c3a29170400000000000000000000000000001c31465b71869bb0c6dbe1ccb6a18c77614c373d3c494d616d8297adc2d7ebd6c1ab96816c56412c1700000d20334350555f5f5f5f5f5f5f5f5f5f5f606d8298a4b6cadecebbaa9d8776615443301c0900000c21364a5b6376808a979faab4bcc9cfcfc4b7b3ab9f978a80766a60564b4437301f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22374b5d72869cb1c8c7b8a796816c5645321e0900000000000000000000000000000000000000000000000000000000000000000000000000071c3043546a7f95a6b7c5c8b39e8874604b36200d0000081c30435474899eb3c9def3eed8c3ae99836e59382816020000071c32475c71879cb1c6d0d0d0d0d0d0d0d0d0d0c0ab95806b56402b1600152a3f556a7f94aabfcdcdcdc8b39d88735e48331e001d33485d72889db2c6c6c6c6c6bea9937e69543e2914000000000000000010263b50657b90a5bac6c6c6c6c6b6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000c1f3347586b8095a8b9cde1e1cdbaa995806b5846331f0a0000000000000000000000000000192e44596e8399aec7d7eacfb9a48f7a64554a43363a43566c8196abc1d6ebd6c1ab96816c56412c17000013283c50616a7474747474747474747474747475879cb1c7dcd8c8b7a6998372604a3727150200071a2d3d4a58616b77818b989fabb2bfc7d0cbc9bcb4a99f96897f756860554c4033291c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f546a7f94aabbcec5b39e8975604b36210e000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073879db2c4d2c1ab96816b5544311d0800000b20354b60758aa7b9cce0f5ebd6c1ac96816c57412c17000000071c32475c71879cb1bbbbbbbbbbbbbbbbbbbbbbbbab95806b56402b1600152a3f556a7f94aab8b8b8b8b8b39d88735e48331e001d33485d72889db1b1b1b1b1b1b1a9937e69543e2914000000000000000010263b50657b90a5b1b1b1b1b1b1b1a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000004182a3a4c61778a9eb4c6d7e9d7c7b39e8976614c382816030000000000000000000000000014293e53697e93a9bacde2dac4af9a8473656054524f4c566c8196abc1d6ebd6c1ab96816c56412c170000152a40556a7f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8c9fb4cadfe6d4c4b3a1947f695544311d0800000f1f2d3a474c59626c78828c99a1afb3c0c8d1cfc7bab4a79e94877d73665e4c463a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001022374c62778b9fb4caccb9a7927d67523c2b190500000000000000000000000000000000000000000000000000000000000000000000000317293950657b90a5b7cac9b5a38e79634e3727150200000c21364c61768ba1c5d6e8fbead5c0ab95806b56402b16010000071c32475c71879ca6a6a6a6a6a6a6a6a6a6a6a6a6a695806b56402b1600152a3f556a7f94a3a3a3a3a3a3a39d88735e48331e001d33485d72879b9b9b9b9b9b9b9b9b937e69543e2914000000000000000010263b50657b909b9b9b9b9b9b9b9b9b8b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000c1f3347586b8096a8b9cde1e1ccb9a8947f6a5645321e09000000000000000000000000000c21374c61768a9fb4c0d0dcc7b4a29a857b736d686461606c8196abc1d6ebd6c1ab96816c56412c170000162b40556b80959f9f9f9f9f9f9f9f9f9f9f9f9f9faabbcee2f2e2d0bfb39e8874604b36200b0000010f1c2a333b484c5a626d79838e9aa2b0b4c0c9d2cdc5b9b3a69d92867c6f615846331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3448596f8499aec5d5c5af9a846f5a4835200800000000000000000000000000000000000000000000000000000000000000000000000a1e3346576d8298adc3d4c7b09b86715b4a3619090000000c22374c61778ca1b6cce1ffead5c0aa95806b55402b16000000071c32475c718690909090909090909090909090909090806b56402b1600152a3f556a7f8d8d8d8d8d8d8d8d8d88735e48331e001a2f445a6f83868686868686868686867d67523d271200000000000000000f243a4f647a868686868686868686868575614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000004182a3a4c61778a9eb4c6d7e8d6c6b39e8875604b372715010000000000000000000000000a1f3347586b8095a2b3bfcdd0c0b4a39b9087827d797775738196abc1d6ebd6c1ab96816c56412c170000162b40556b8095aab4b4b4b4b4b4b4b4b4b4b4b4b4bbc8d8eaefeee0ccb8a78f7a644f3a250f000000000c171f2b343c494d5b636e7a848f9ba2b1b5c2cad3ccc4b7b2a49c918476614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b51667c91a6b8cbcab49f8b78624d36251300000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a9fb4c9cdbaa9937e68533d2d1a000000000c21364b61768ba0c5d5e8fbebd6c1ac96816c57412c170200000010253a50657b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b79634e38230e000c21374c617678787878787878787878634d38230e00182c4154656f71717171717171717171675f4d39251000000000000000000d22374b5c647171717171717171717171615746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000c1f3347586b8096a8b9cde1e0cbb8a6937e695544311d0800000000000000000000000004172a3a4b60748499a1b4b9c6cdc1b5b0a59d97928f8c8a88899eb3c9deebd6c1ab96816c56412c170000162b40556b8095aac0c9c9c9c9c9c9c9c9c9c9c9caced8dadadadadad5c5a6917c67513c27120000000000040d18202b353d494e5c646f7b85909ba3b1b6c2cbd4cbc2b6b1a297826d57422d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20364b6074889eb3c8cfbcab957f6a5443301c07000000000000000000000000000000000000000000000000000000000000000000061a2c3d53687d93a9bacdc9b49f8a76614c36210f000000000b20354b60758aa7b8cce0f5edd8c2ad98836d58432e18000000000e23374b5d6566666666666666666666666666666666635b4935210c000a1f33475861636363636363636363635a4935200c0011253747545a5c5c5c5c5c5c5c5c5c5c524d41301e0a0000000000000000071b2e3e4b4f5c5c5c5c5c5c5c5c5c5c5c4b4639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000004182a3a4c61778a9eb4c6d7e7d5c4b29d8774604b362513000000000000000000000000000c1d314556617583949ea8b4b9c6c9c3b6b2aca7a4aa9f9e9ea8b9cce1ebd6c1ab96816c56412c170000162b40556b8095aac0c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4bca7917c67523c271200000000000000050e19202c363e4a4f5d65707c86919ca4b2b7c3cbd3c9c0b29d87725d48321d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556c8196abc1d2c9b29c8773604a35200b0000000000000000000000000000000000000000000000000000000000000000000c2135495b70859bb0c7d4c3ad98836d5846331f0a00000000081c30435473899eb3c8def3efd9c4af9a846f5a3d2c1a06000000081c2e3f4b50515151515151515151515151515151514e493d2c1a060004172a3a474c4e4e4e4e4e4e4e4e4e4d493c2c190600071929374144464646464646464646463d393023130100000000000000000010202e373a46464646464646464646463633291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000c1f3447596b8096a8b9cde1dfcab7a5927d675443301c0700000000000000000000000002152738465761727f8a969ea8aeb4bac6c2c2bdc8bbb4b3b3b9c6d6e8ebd6c1ab96816c56412c170000162b40556b8095aaafafafafafafafafafafafafafafafafafafafafafafa7917c67523c2712000000000000000000060f1a212d363f4b505e66727c86929da5b3b8c4ccc8b29d88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374e63798ea3b5c9cab6a58f7a65503929160300000000000000000000000000000000000000000000000000000000000000011426374e63788da3b4c8cab7a5907b65503a29170400000000011426365b71869bb0c6dbf0f3ddc8b39e88735b4935210c0000000011212e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b38352c1f0f0000000c1c2a333738383838383838383838352c1e0e0000000b19252c2f3131313131313131313127251e13050000000000000000000002101b22243131313131313131313131211e170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000004182a3a4c61778a9eb4c6d7e6d4c3b19c8673604a352011000000000000000000000000000a1a29394654606977818992999fa8a9adb0b3b4bcc9b9c3c6cfdcecebd6c1ab96816c56412c170000162b40556b80959a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a917c67523c2712000000000000000000000006101b222e37404c546067747d87939ea6b3b9c5b29d88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000921364a5b71869bb0c7d3c3ad97826d5746321e0a00000000000000000000000000000000000000000000000000000000000000081d3144556b8095abc1d1c9b29d8774604b35200c000000000000192e43586e8398adc3d8edf4e0cbb8a68d78634e3823100000000003111c23252626262626262626262626262626262623211a0f01000000000c171f212323232323232323232320190e00000000000711181a1c1c1c1c1c1c1c1c1c1c12100a0100000000000000000000000000070d0f1c1c1c1c1c1c1c1c1c1c1c0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000c1f3447596b8096a8bacde1dec9b6a4917c66513f2e1c08000000000000000000000000000b1b2936434b59626c757d83898f94979b9d9faba2a3adb2becfe2ebd6c1ab96816c56412c17000013283d52687d84858585858585858585858585858585858585858585858585847b65503a25100000000000000000000000000007111c232f36434a556068747e88949ea7b4b29d88735d48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d53687e93a9bacdc9b49e8976614b36210e000000000000000000000000000000000000000000000000000000000000000b20354b6074889db2c8cfbcab95806a5443301c0800000000000014293f54697e94a9c5d5e8fbe7d5c4a8937d68533e2e1b080000000000080e10111111111111111111111111111111110e0c0600000000000000040a0c0e0e0e0e0e0e0e0e0e0e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000004182a3a4c61778a9fb4c6d7e5d3c2b09b85705d4b37231000000000000000000000000000000b1826303b484d5761676e757a7f8286888a8c8d8e98a0b2c6daebd6c1ab96816c56412c17000011253a4e5f686f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f655d4b37230e000000000000000000000000000000081218253037444b566069757f89959fa89d88735d48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f21364c61768a9fb4c9cdb9a8927d68523c2c1906000000000000000000000000000000000000000000000000000000000004172a3a51667b90a6b7cbcab59f8c78624d362614010000000000000f243a4f647a8fa7b8cce0f5f0dac5b09b85705c4b372213010000000000000000000000000000070b121818100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e121415161413110f0b0902000000000000000000000000000000000000000000000000000000000001080b0f131516151312100c0a0400000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000c1f3447596b8096a8bacde1ddc8b4a38f7b65503e2d1b07000000000000000000000000000008141c2b3439464b52566064696d7073757778798298adc3d8ebd6c1ab96816c56412c1700000b1e31414e525a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a504b3f2e1c08000000000000000000000000000000000008131c273138454b57616a76808a969d88735d48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586e8398adc3d4c6b09a85705a4935200800000000000000000000000000000000000000000000000000000000000a1f3347586e8398aec4d4c6af9a846f5a49351808000000000000000b20354b6074889eb3c8deeff2ddc8b4a38f7a644f41311f1002000000000000000000000008131c20272e2d25221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b141c202427292b2b29282724211e160e0c06000000000000000000000000000000000000000000000000070b151d2024282a2b2a292725211f170f0d0700000000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000004182a3a4c61778a9fb4c6d7e4d1c1af9a846f5c4a36220f0000000000000000000000000000041219263135373638454b4f54585b556062636c8196abc1d6ebd6c0ab96816b56412c160000011323313a3d45454545454545454545454545454545454545454545454545453a372e2111000000000000000000000000000000000000000009151d283239464b58616b77818a88735d48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a50657b90a5b7cac8b4a28d78634d36261401000000000000000000000000000000000000000000000000000000000c21374c61768a9fb4c9ccb9a8927d67523c2b190000000000000000081d3144556d8297acc1d2e4f7e4d1c1ae99836f604e3d2d20120700000000000000010811182530353c43433a372e21120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a151d20263035393c3f40403f3d3c3936322823211a0f09000000000000000000000000000000000000000008131c202731353a3d3f403f3e3c3a36332924221b10080000000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000c1f3447596b8096a8bacde1dcc7b3a18e7a644f3d2c1a060000000000000000000000000312223037444b4d4c463a363a3f4237444b4c576d8297acc2d7ead4bfaa957f6a55402a1500000005131e2528303030303030303030303030303030303030303030303030303025231c1103000000000000000000000000000000000000000000010a151d28323a474c59626c78806b56402b16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c20354b6074879db2c9d1c0aa95806b5443301c08000000000000000000000000000000000000000000000000000000071a2d3d53697e93a9bacec9b39e8975604b36210e00000000000000000115273750657a8fa3b5c9ddefefdbc7b3a1927d685b4a3e30211a100d0b0b0b0d0f151d202f36434a5158584f4b3f3022120000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d28323636434b4e515455555453514f4b453839362c231c11050000000000000000000000000000000002111825303537444b4f5255555453524f4c463a39362d231c1104000000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000004182a3b4c61778a9fb4c7d7e3d0bfae98836e5b4935210d000000000000000000000000112130404d5560626158524b43363228313545566f8499afc4d9ecdac9a8937e68533e291300000000010b11131a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a100e0800000000000000000000000000000000000000000000000000020b161e29333b484c5a626b62513d281400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546a8095abbccfc7b29d8774604b35200c0000000000000000000000000000000000000000000000000000000c21364a5b71869bb1c7d3c2ac97826c5645321e090000000000000000000923374b5d71869bb1c1d1e7f7e2d0bfb49e8a79645c4d41362d252221202122242731353f4b5460676d6d655d4d40301d0d00000000000000000000000000000000000000000000000000000000000000000000000000000002101a283238454b5254606367696a6b696866646056554e493d382f20190d00000000000000000000000000000a151d2f36434a50556064686a6b6a6867656158564f4a3e372e1f170c0000000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000000000c1f3447596b8196a9bacde1dfcab49f8c79634e3b2b19050000000000000000000009192e3f4d5e66747776716760544b463941414b6075899eb3c8dee3cfbcab917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c171f2a343c484d56514433210e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364d62788c9fb5cacbb7a5907b65503a29170400000000000000000000000000000000000000000000000000021527374e63798ea3b5c9cab6a48f7a644f38281603000000000000000000081c2e3f52677c91a3b5c9d9ebede1cdb9a89e887a675f4e4a3e3b37363536373937444b515d65727c83827b665e4d3b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000613202e38454b5660676e74797c7e80807e7d7c7975706b635b504c3f342b1d120400000000000000000000000b1a28323f4b5460666e75797d7f807f7e7c7a76726b645c504b3f33291c1002000000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000004182a3b4c62778a9fb4c7d7e3cfbcab97826d594834200c000000000000000000011527374b5d667c888c8b867d736861575756575f687e93a7b8cce0dfcab59f8b77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d181f2b3538403d332616040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082035495a70859aafc6d4c3ad98836d5846331f0a00000000000000000000000000000000000000000000000000081d3144556c8196abc1d2c8b19c86715c4b371a0a00000000000000000000001120354a6072859babbccfe3eee9d6c6b8a69e8a7c6f645c55504d4b4b4b4c4f535560666f7b859198988c7d665948342013000000000000000000000000000000000000000000000000000000000000000000000000061424313e4b566069757d83898e919495959492918e8a86807970655d4d483b2f2212040000000000000000000b1b2938454b5d65737b83898f9294959493918f8b87817970655d4c473a2d2010020000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000000000c1f3447596b8196a9bacde1d9c9b49f8b78624d3a2a17040000000000000000081d314455657b8c9da6a39b92867e766f6c6b6d727d8b9fb4c5d6e8d6c5b19b86715947341f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e1920222b2821160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c52677d92a8b9ccc9b49f8a76614c36210f000000000000000000000000000000000000000000000000000b20364b6074889eb3c8cebbaa947f69543e2e1b000000000000000000000000071c304354647a8c9fb4c0d1e0f0e4d5c4b8a89e918479706a65626060606264686d747c84909ba3adaa9e8977624d41301d0d0000000000000000000000000000000000000000000000000000000000000000000004142432424e5c64747f8892999ea8a6a9aaaaa9a8a6aa9f9b958e857b6f62594c4030231200000000000000000a1a29394656606c7b8690989ea8a7aaaaa9a8a7a4a49c968e857b6e61584a3e2e20100000000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000000000005182a3b4c62778a9fb4c7d7e2cebaa996816b5847331f0b000000000000000417293a4b6073869caab7b5b1a49c93898482818286929fa9bacde3e0ccb8a7947f6a543a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d16140e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21364b6075899eb3c9cdbaa9937e68533d2d1a07000000000000000000000000000000000000000000000005182a3b51667c91a6b8cbcab49f8b77624c372210000000000000000000000000001325364a5c6a8095a2b4c2d2e0eee2d5c6b9b3a29a8e857f7a7776757677797e8288919aa2b0b5c1b9a799836f5f4d3b2a1805000000000000000000000000000000000000000000000000000000000000000000122332424f60687a87949ea6aeb4b9c6bebfc0bebdc8bbb4b0aaa29a908478665e4d41301b0b000000000000021628384657617481909ca4aeb4b9c6bfc0bfbdbcc2b6b1aba29b908376645c4a3e2e180800000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000d1f3447596b8196a9bacde1d8c7b49e8a77614c392916030000000000000a1f334758697e93a4b6c8c9c2b6b1a89e9a9796979ca4b4bac7d7e0d0bfb39e8976614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576d8297acc2d3c7b09b85705b4a36210900000000000000000000000000000000000000000000000b1f3447596e8499aec5d5c4ae99846e5947341f0b0000000000000000000000000008182e3e4b6073849aa4b5c2d0e2ebe4d6ccc0b4afa39b94908c8b8a8b8c8e93979da6afb3c0c9d2c5b3a1927d675947341f0b00000000000000000000000000000000000000000000000000000000000000000e1e30414f61697e8c9ca5b3b8c5c9ccd6d3d2d0cfd1d9cecac5c0b4b0a199897c675f4d3a29170400000000000a1e324556617584979fb1b5c2c9cdd7d4d3cfcdcdd3cac7c0b4b0a098877a645c4a36251300000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000000000005182a3b4c62778a9fb4c7d7e1cdb9a895806a5746321e0a0000000000000c21374c6176899eb3b7c4ced3cac6b9b4afacabacb1b6c2cdd7dfd0c2b3a1947f6a5746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394f647a8fa4b6cac9b5a38e79634e37271501000000000000000000000000000000000000000000000d22374c62778b9fb4cacbb8a6917c66513b2a18050000000000000000000000000000101d3144556176869ca4b4c0ced9e6e8e1d1c8c1b4b0aaa5a2a0a0a0a1a4a8adb3b7c4c7d0dde4d0bfb39e8977624c37220d0000000000000000000000000000000000000000000000000000000000000006192b3c4d5f697f929faab6c3cbd5d7cdc9c2bdbbbabbbfc4cacfd1c8bfb3a79e8c7d675846331f0a000000000a1a30414b6074849aa2b1bdc9d2ded3cac6beb9b7b8bbc1c9cdc8beb2a59d897a645443301c07000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000000000000000d1f3448596c8196a9bacde1d7c6b39e8976614b3827150200000000000b20354b607380919da6b4bac7ccd5cdc9c4c1c0c2c7cad3dfd4cbbfb3a4998372604b392917030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22374b5c72869cb1c8d1c1ab96806b5544311d08000000000000000000000000000000000000000000071b2e3e54697f94aabbcec8b39e8874604b36200d0000000000000000000000000000000114263746586277869aa2b4bbc8d1dee5e3dcd1c8c5bfbab7b5b5b5b7b9bdc2c8cbd4dce3e0d5cbbfb3a598826d58432d18000000000000000000000000000000000000000000000000000000000000000b2035485a677d8d9fb4bbc8d3e0cec6b9b4ada8a5a5a6a9afb4bcc9cdd0c5b8aa9e8976614c36210c000000031628384d5f6d8298a3b4c0cededacdc2b6b1a9a4a2a3a6acb4bac7cfc3b7a79c8775604a35200b000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000005182a3b4c62778a9fb4c7d7e0ccb8a7947e695645311d080000000000081c304354606b7c88969fa9b3b8c5c6caced8d1d2d2d8cec9c4b7b2a1998676615443301b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3e54697f94aabbcec8b39d8874604b35200c0000000000000000000000000000000000000000000d22364a5c71869cb1c8d2c1ab96816b5544311d08000000000000000000000000000000000919293a4859627684959faab4c1c9d2dee1e4dddad4cfcccbcacbccced3d7dddfe3dfd5ccc4b8b3a1998779634e38230e000000000000000000000000000000000000000000000000000000000000081c2e3f4d6278899eabbcced8d9cbbdb1a89e9893909091949a9fabb4bac7bfb09e927d675846331f0a000000091e324556677c91a0b2c1d1dedacdbcb0a49c948f8d8e90979fa9b3c0bdb49f8b7a645443301c07000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000d1f3448596c8196a9bacde1d5c5b29d8874604b362614010000000001142636434b5e6676818b969ea7acb1b4bbc8bcbdbdc8bbb4afa69d9383756158473626140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001022374c62778b9fb4cacbb8a6907b66513a2a180400000000000000000000000000000000000000021628384f647a8fa4b5c9c9b5a38e79634e3727150200000000000000000000000000000000000b1b2a3b485861737f8c9ba3b1b5c2c9ccd6dadee0e8e1e0dfe0e1e9e1dedbd9cfcac5b8b3a69e928376635b4935210c0000000000000000000000000000000000000000000000000000000000000e23374b5d6e8399a7b9c9dadccbbbae9f978a827d7b7a7c7f848c969fa9b3b4a196806b5f4d3a2917040000011426364b6075879db2becfdfe0cdbcb09e95867e7a78787b818a9aa2b3b49f927d685c4b36251300000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c00000000000000000000000000000000000000070d0f111111111111111111111111182a3b4c62778a9fb4c3d3dfcbb7a6927d685443301c08000000000008182630404c58616c78808990969b9faaa5a7a8a7a6aa9f9a93877e726157473a2a18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3448596f8499aec5d5c4ae99836e5847331f0a00000000000000000000000000000000000000091e3245566c8197acc2d2c7b09b85705b4a361909000000000000000000000000000000000000000d1d2a3a4655606a7a85929ca4adb4b9c6c5c8ccd6cfd0d1d0d0d7cdc9c6c9bcb4afa79e95887d6e6158493d2c1a06000000000000000000000000000000000000000000000000000000000005182b3b50657a8fa1b3c5d6e6cfbeae9d9481766d686665666a6f78818a969e9f998373604b41301b0b000000081c304354697e94a6b7cbdce5d3c2b09e95807469646263666c7884949e9f96816c5f4e3e2e180800000000000000000000000000000010263b50657b90a5bad0e5f6e0cbb6a18b76614c36210c000000000000000000000000000000000000101b222426262626262626262626262626263448596a8095a5b6c9dad4c4b29c8773604b35201100000000000008141c2f3a474c5a626b757b81868a8e90929292918e8a857e7568605446392a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b51667c91a6b8cbc9b49f8b77614c372210000000000000000000000000000000000000000b21364b6075899eb3c9cdbaa9937e68533d2d1a0000000000000000000000000000000000000000000d1b2937444b5c64727d8690989ea8abafb3b8c5babbbcbbbac7bab4b1acab9f9a9389807668604c473a2c1f0f0000000000000000000000000000000000000000000000000000000000000b203448596f8499aebfd0e4d8c8b2a0947f6c615853505051545a626c7781888a8376615544312313000000000b20354b6074879db2c4d4e6decab6a496806b60554f4d4e515a62727f89898173604b41312010000000000000070c0e0e0e0e0e0e0e0e10263b50657b90a5bad0e5f6e0cbb6a18b76614c36210e0e0e0e0e0e0e0e0e0c0600000000000008131c2d36393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b4b6074879dabbccfdecab6a4917c6751402f1c0900000000000001121c29333c484d5660666c7176787b7c7d7d7c7976706860564b4336291b0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20364b6074889eb3c8cebbaa937e69543e2d1b07000000000000000000000000000000000005192b3b52677c91a7b9ccc9b49f8a76614c36210f000000000000000000000000000000000000000000000b1926313e4a546067717b838990959a9ea7a3a5a6a6a6a5a4a99f9b97928b857e756b61574e42332a1c0f010000000000000000000000000000000000000000000000000000000000000d22374d62778c9fb5cadfe2cebbaa98826e614c473a3b3b3c3c484d59626c73756e615846372614050000000010253a4f657a8fa5b6cae2e9d7c7b19c8674604b443738393c4854606a74756c6055443123130200000000010f1a21242424242424242424263b50657b90a5bad0e5f6e0cbb6a18b76614c362424242424242424242320190e00000000081825303e4a4f515151515151515151515151515151515156667b8d9fb5c3d3d3c3b19b86715e4c38230f00000000000000000c171f2b3538454b50575660636667686867646056534b45383026180b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556b8196abc1d2c8b19b86715c4a36220a00000000000000000000000000000000000b203448596f849aafc5d4c3ad98826d5846331f0a000000000000000000000000000000000000000000000009141d2e36434a525d656e757b8085898b8e8f909191908f8c8986827d77706860574c4639311f180c000000000000000000000000000000000000000000000000000000000000000014293e54697e93abbccfe3dfcab49f8b78624d43332a2a2a2a2b353b484d565560554c463a29190f0100000001142636566b8196abc3d4e6e1cdbaa9927d675544312723232b36434b545460544b443726140500000000000f1f2d36393939393939393939393b50657b90a5bad0e5f6e0cbb6a18b76614c3939393939393939393938352c1e0e000000132536434a5c64666666666666666666666666666666666666666a7f95a5b6caddc9b5a3907b66503e2d1a070000000000000000040e19202832363b38454b4e50525352514f4b45383632281c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374e63798ea3b5c9c9b5a38e79644e38271502000000000000000000000000000000000d22374d62778b9fb4cacab7a5907b65503a2917040000000000000000000000000000000000000000000000000110182530353f4b505660666b707376797a7b7c7b7b7a7774716c676259534b453933291b1304000000000000000000000000000000000000000000000000000000000000000004172a3a596e8499aec9daecd9c4af9a846f5a493f3f3f3f3f3f3f3f3f3f3f37444b44373e39362d1f0f000000081c30435470859bb0c5dbf0dec9b49f8a76614b3727150d0e1826303536434b4336312619090000000000071a2d3d4a4e4e4e4e4e4e4e4e4e4e4e50657b90a5bad0e5f6e0cbb6a18b76614e4e4e4e4e4e4e4e4e4e4e4d493c2c190600071c304354606e797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c879cb2c7dcd2c1af9a84705c4a36210d00000000000000000000060a151d2026283236393b3d3d3d3c39363228201d150a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000921364a5b71869bb0c7d2c2ac96816c5645311d09000000000000000000000000000000081c2e3f556a7f94abbccfc9b29d8773604a35200c00000000000000000000000000000000000000000000000000000008131c202f3838454b51565a58616365666766656462605457524c483b3632281e170b000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889eb3c8dde8d3bea8937e69555555555555555555555555555555555555534e4a3d2d1c0c00000b20354b60758a9fb4c9dfefdac5b09a85705746331909000008141c2026303530261d14090000000000000c21364a5b636363636363636363636363657b90a5bad0e5f6e0cbb6a18b76636363636363636363636363635a4935200c000b20354a6074828e9090909090909090909090909090909090909090919ca5b6cadfdcc8b4a28e79644e39240f00000000000000000000000002090b11161e2123262728282724211e160b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d53687e93a9bacdc8b39e8875604b36200d0000000000000000000000000000000e23374b5d72879cb2c9cfbcab95806a5443301c07000000000000000000000000000000000000000000000000000000000007111c232832363b403a464c4e50515151504f4d4a43363d37342a211e160a0300000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca6b8cbe0e4cfbaa48f7a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69635b4a3a2a1804000d22384d62778da9bacde2ebd6c1ac96816c573929170000000001080b141c201c140801000000000000000e24394e70797979797979797979797979797e92a8bdd2e7f9e4cfb9a48f7b79797979797979797979797978634d38230e0010253a50657b8fa0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6b2b6c3d3e6e3d1c0ab96806b56412c160000000000000000000000000000000003090b0e11121313120f0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f21364c61768a9fb4c9ccb8a7917c67513b2b180500000000000000000000000000031628394f657a8fa5b6cacab59f8c78624d3625130000000000000000000000000000000000000000000000000000000000000000080a161e21262b293336393a3b3c3c3b3a3735302528221f180d0903000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c5d5e7ebd5c0ab96807f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e79635947341f0a000f253a4f647a8fa4c7d7eae9d4bea9947f69543f2a140000000000000001080b080100000000000000000020354a60758a8e8e8e8e8e8e8e8e8e8e8e8e929cadc1d5eafbe6d1bdaa998f8e8e8e8e8e8e8e8e8e8e8e8e85715b46311c0012283d52677d92a7bebbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc7cad3e1f1eedbc5b09b85705b46311b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586d8398adc3d4c5ae99846f594834200b00000000000000000000000000091e3246576d8297acc3d3c6af9a846f5a483518080000000000000000000000000000000000000000000000000000000000000000000002090b1116171f212425262726262522201c13120d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5edd8c3b09e9694949494949494949494949494949494949494938a77614c37220c0010253b50657a90a5bacfe5e8d2bda8937d68533e281300000000000000000000000000000000000000000020354a60758a9fa3a3a3a3a3a3a3a3a3a3a3a8adbacadcf0ffecd9c7b7aaa4a3a3a3a3a3a3a3a3a3a3a39b85715b46311c0012283d52677d92a7bcd0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0dcdfe6f0f0f0ddc8b29d88735d48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a50657b90a5b7cacab49f8b77624c372210000000000000000000000000000c21364b6176899eb4c9ccb9a8927d67523c2b1900000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0e10111211100f0d0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbd0e6f3dfcdbcb0abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8917c66513c27110011263b50667b90a5bbd0e5e7d2bca7927d67523d281200000000000000000000000000000000000000000020354a60758a9fb5b8b8b8b8b8b8b8b8b8b8bdc1cad8e8f9fff6e5d5c7bdb9b8b8b8b8b8b8b8b8b8b8b09b86715b46311c0012283d52677d92a7bcd2dbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbc9b49e89745f49341f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c20354a6073879db2c9cebbaa947f69543e2e1b08000000000000000000000006192c3c52687d92a8b9cdc9b39e8975604b36210e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbd1e6fceadacdc3c0bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfc6a8937e68533e29130010253b50657a90a5bacfe5e8d3bda8937e68533e291300000000000000000000000000000000000000000020354a60758a9fb5cacececececececececed2d5dce8f0f0f0f0f0e5d9d1cfcececececececececec6b09b86715b46311c0012283d52677d92a7bcc6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b49e89745f49341f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546a8095abbccfc8b19c86725c4b37220a00000000000000000000000c2035495a70859aafc6d3c2ac97826c5645321e0900000000000000000000000000000000000000000002090b101414100b090200000000000000000000000000000000000000060c0d181c1d1d1d1d1d19171107000000000000020b11141c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c15130c0300000010263b50657b90a5c8d9ebf5e1cfbeb2adababababababababababababb4b9c6d6d4d3bea8937e69533e2914000f24394f64798ea4c5d5e8e9d4bea9947f69543f2a1400000000000000000403000000000000000000000020354a60758a9fb5cadbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbc6b09b86715b46311c0012283d52677d92a7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b19e89745f49341f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364d62788c9fb5cacab6a48f7a644f38281603000000000000000000001325364d62788c9fb5cac9b6a48f7a644f3828160300000000000000000000000000000000000000000a151d2026292926201d150a00000000000000000000000000000000000e1920232d3232333333332f2c24190a0000000006141f262931313131313131313131313131313131312a2720150700000e23394e63798eaabbcee2efdac6b2a0989696969696969696969696969ea8b9cde1d2bda8927d68533d2813000c22374c61778ca7b8cce0ecd7c1ac97826c573a29170400000000070b1219180e0c06000000000000000020354a60758a9fb5c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b09b86715b46311c0012283d52677d929b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b89745f49341f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082035495a70859aafc6d3c2ac97826c5645321e09000000000000000000071c3043546a8095abbccfc8b19c86715c4b371a0a0000000000000000000000000000000000000005131a2832363b3e3e3b3631271a13050000000000000000000000000002101e2c3538424748484848484440362919070000021424313b3e46464646464646464646464646464646463f3c32251503000b21364b60758a9fb4cadfedd8c3ad98828181818181818181818181808a9eb4c9ded8c8a6917c66513c2711000b1f34475973899eb3c8deefdac5b09a85705846331f0a000008131c20272e2d2320190e0000000000000020354a60758a9fb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b09b86715b46311c0011263b51667c86868686868686868686868686868686868686868686868686868686868686868685705b46301b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c52677d92a8b9ccc9b39e8975604b36210e0000000000000000000b20354a6073879db2c9cebbaa947f69543e2e1b000000000000000000000000000000000000000715233138454b505353504b45383023150700000000000000000000000210212e3c494d585c5d5d5d5d5d59544736241100000b1f31424e535c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c544f4332200c00091e32455671869bb1c6dbe8d2bda8937d6b6b6b6b6b6b6b6b6b6b6b74899eb3c9decebbaa8e79644f39240f0004182a3b5a6f849aafc4d9efdfc9b49f8a76614c3828181313182530353d444338352c1e0e00000000000020354a60758a9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b85715b46311c000f24384c5e66717171717171717171717171717171717171717171717171717171717171717171706655422e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21364b6075899eb3c9ccb9a8927d67523c2b1905000000000000000417293a50657b90a5b7cacab49f8b77624c37221000000000000000000000000000000000000001152532414d56606569696560564d41322515020000000000000000000210202e3f4b5a626d7172727272726e6554402c17020011263b4e606971717171717171717171717171717171716a614f3c27130003162838566b8096abc1d2e4d9c4ae99846f5a565656565656565662778ca8b9ccdfc9b49f8a76604b36210b0000142a3f54697f94a9c0d1e4e2cebbaa927d685645362b28292e36434a5259584d493c2c1e0e00000000001c31465c718686868686868686868686868686868686868686868686868686868686868686868686868686826d58432e1800091c2f404c515c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5548382613000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566c8297acc2d3c6af9a846f5a48352008000000000000000a1f3346586d8298adc3d4c4ae99836e5947341f0b0000000000000000000000000000000000000f1f32434f5f67757b7e7e7b74675f4f4332201000000000000000000210202e3f4b5d657882878788888887836e59442f19040014293e53697e86868686868686868686868686868686867f6a543f2a1500000f243a4f647a8fa3b5c9dddfcab49f8b78624d43364141374556687e93a8c6d6d7c7b09b85705645321e0900000e23384e63788da2b4c8ddead8c8b29d87746054483b3d3e3f4b5460676e6d635a493c2b1909000000001a2e43566771717171717171717171717171717171717171717171717171717171717171717171717171716d64533f2b16000012222f383b4646464646464646464646464646464646464646464646464646464646464646464642382a1a09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384f647a8fa4b6cacab59f8c78624d362513000000000000000c21364c61768a9fb4c9cbb8a6917c66513b2a18050000000000000000000000000000000000071a2d3d4f616a7d8890939390887d6a614f3e2d1b070000000000000210202e3e4b5d657b89979c9d9d9d9d907b65503b25100000162b40556b80959b9b9b9b9b9b9b9b9b9b9b9b9b9b9b96816c57412c1700000d22364a5c71869bb0c0d1e2cebbaa99836e60544b46464b556074879cb2c7dccdbaa9947f6a543828160300000c2135495b70859ab0c0d1e5dfcab7a59882726259555353565d65727d838278635a483727150200000013273949565c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c585346352310000004121c2426313131313131313131313131313131313131313131313131313131313131313131302e261a0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22374b5c71869cb1c8cfbcab957f6a5443301c070000000000061a2c3d53687d93a9bacdc8b39e8874604b35200d0000000000000000000000000000000000000c21364a5b6a7f929da6a8a8a69d927f6a5c4a36220d00000000000210202e3e4b5c647b8a9ea7b1b2b2aa99846f5d4b38230e0000162b40556b8095aab1b1b1b1b1b1b1b1b1b1b1b1b1ac96816c57412c170000071b2d3e51677c91a2b4c6d7d8c8b3a1968072666157576167748298a5b6cad7c6b49f8a77624c37220d000000061a2c3d51667c91a2b4c7d7e6d4c3b2a09883776e6a68686b717a859299988878625544311d120000000a1b2b39434646464646464646464646464646464646464646464646464646464646464646464646464646433f3528180600000000090f111c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b191309000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3e54697f94aabbcec9b29d8773604a35200b00000000000c2135495b70859bb0c7d1c1ab96806b5544311d080000000000000000000000000000000000000e24394e63798c9fb3b8c4c4b7b39f8c7a644e39240f000000000110202d3e4a5c647a8a9ea8b9c5c6b49f8c79634e3f2f1c080000162b40556b8095aac0c6c6c6c6c6c6c6c6c6c6c6c1ac96816c57412c170000001024394d5f70849aa8b9c9d8d0bfb09e96857c767474767c8698a0b2c3d3cdb9a896816c594834200b000000000e24384c5e70859ba9bacde2e1cfbeb2a1998b847f7d7e80868f9ba3aea69b8574604b402f1d090000000d1b272e31313131313131313131313131313131313131313131313131313131313131313131313131312e2b23180a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001022374c62778b9fb4cacab6a58f7a655039291603000000011426374e63798da3b4c8c9b5a38e79634e37271501000000000000000000000000000000000000172d42576c8197abbccbd5d4cbbcab97826d57422d18000000010f202d3e4a5c647a8a9ea8b9c6cdb9a897816c5b49362111000000162b40556b8095aac0d5d6d6d6d6d6d6d6d6d6d6c1ac96816c57412c170000000a1d30414d63788a9eabbbc8d5cdbcb0a29b918b89898b919ca4b2bfcfcdbcb49e8a77624c3b2b180500000000091d30404e63798b9fb4bbced8dccfbfb3a99f99949293969ca4b0b4c1b4a396806b5e4c38240f000000000a131a1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1816100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3447596e8499aec1d1c3ad97826d5746321e0a000000081d3144556b8096abc1d1c2b09b85705b4a361909000000000000000000000000000000000000001c31475c71869cb1c9d9e7e7d9c9b19c86715c47321c0000010f1f2d3e4a5c647a899ea8b9c6d4c4b49e8a77624c3d2c1a03000000162b40556b8095aac0c1c1c1c1c1c1c1c1c1c1c1c1ac96816c57412c1700000000122035495a667c8d9faab8c5d0cdc0b4b0ab9f9e9ea7a7b1b6c2cfccbcb09e917d675948341d0d000000000000122135495b687d929db4bac7d2ded0c7bab4aeaaa8a8abb1b5c2c8d1c1b09e917c66513c261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b51667c91a3b4c3c9b49e8976614b36210e0000000b20354b6074889db3c8c5b6a4927d68533d2d1a00000000000000000000000000000000000000001d32475d72879cb2c7dcf0f0ddc7b29d87725d48331d00000f1f2d3d4a5c647a899ea7b9c6d6cbb7a6947f6a5947341f0f00000000162b40556b8095aaabababababababababababababab96816c57412c170000000006192c3c4d5e677d8c9ea7b3bfc9d1c8c9bcb5b3b3b9c5c6c9ccc6b9b49e95806b5f4d3b2a1800000000000000061a2c3d4e5f6a7f939fa9b5c2cad3d8cec9c3bfbdbdc0c6c9d2c9c0b4a89e8d7e68533e2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d24384c5e70859ba5b4b9b9a8927d68533c2c19060004172a3a51667b90a6b7bab4a79c8674604b36200f00000000000000000000000000000000000000001a30455a6f849aafc2d2deded2c2af9a84705a45301b00071a2d3d4a5b647a899ea7b8c5bcc8bbb29d8775604b3b2a180100000000162b40556b809596969696969696969696969696969696816c57412c1700000000000e1e30404d5f677b8999a1b0b5c1c6cacecac9c9ccccc8c6b9b4a89e918072604b41301d0d00000000000000000f1f31414f616a7e8b9ba3b2b6c3c6caced8cfcfd9cecac6c2b5b1a29a8a7d68604e3a261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d2f404d637987969ea8a3a39a85705a4935200c000a1f3347586e8398a3a3a99f97897a645544311d08000000000000000000000000000000000000000013293e53687e93a4b5c2c9c9c2b5a4937e69533e2914000c21364a5b6379899ea7a7a7a7a7a7aa9f917d675645321d0d000000000011263b51667c81818181818181818181818181818181817c67513c2712000000000000122231414d5d657883909ba3abb0b4bbc8babac5b8b3aea89e958a7c6b60544330231300000000000000000001132332434f60687a86929ca4abb0b4bbc8babac8bbb4b1aba49c918479675f4e42311f0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122135495b637781898c8d8d8d8d78634d38230e000c21374c61778b8d8d8d8c8a8278645c4a3727150200000000000000000000000000000000000000000b20364b6074869ca4b0b3b3b0a39b8674604b36200b000e24394e6379889191919191919191908b7f6a5f4d3828160000000000000f24384c5e666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675f4d392410000000000000041323313f4b5a636f7b858f969b9faaa4a5a5a4a79e9993898076675f4b43362614050000000000000000000005152532424e5c64737d878f969b9faaa4a5a5a4aa9f9b968f867c72635b4d4131241402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4959626c74777878787975614c36210c000b21364b60757978787877746d625a4a3e2d1909000000000000000000000000000000000000000000091d314556627886939b9e9e9b938578625645311d090010253b50657b7c7c7c7c7c7c7c7c7c7b776a615041301a0a000000000000091c2f404c515656565656565656565656565656565656514d40301d0a000000000000000513212e3c494d5d65717a81868a8d8f908f8e8c88847e766b61584d4030261808000000000000000000000000071524313e4a556068737a81868a8d8f90908f8d8a86817a71676054493d30231406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3b484c57596263636363615746331e0a00091e32455760636363636260544d493c2d20100000000000000000000000000000000000000000000002152738485a62747e858989857e74625a4838271502000e23374b5d656767676767676767676562595043332312000000000000000012222f383b41414141414141414141414141414141413c3930221200000000000000000003111e2c353f4b505c646b7175787a7a7a7977736f6861584c473a301c140800000000000000000000000000000614202d37444b5460656c717578797a7a7a7875716c655d524a43362c1f12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1d2b34373b484c4e4e4e4e4c46392917030003162839454b4e4e4e4e4d4a4336352c1e100200000000000000000000000000000000000000000000000a1a2b3c4856606970747470696056483c2b1a0a0000081c2f3f4b50525252525252525252504c473b33251505000000000000000004121c24262c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c27241d120400000000000000000000000e19202e373e4a4f5655606364656564615959534c473a332a1c120100000000000000000000000000000000021019263136434a4f5655606264656564636055564f4b3f353025180e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1820222a3437383838383633291b0b0000000a1b283236383838383735302520190e00000000000000000000000000000000000000000000000000000e1e2b38454b545b5e5e5b534b45382b1d0d0000000011212f373b3c3c3c3c3c3c3c3c3c3b37342a1d15070000000000000000000000090f11171717171717171717171717171717171712100a000000000000000000000000000006111c232d363a37444b4d4f50504f4c473b3e37332a1f170c000000000000000000000000000000000000000009141d2530353a37444b4d4f50504f4d4b44373a372e201c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d181f2223232323211e170b00000000000a161e212323232322201c130806000000000000000000000000000000000000000000000000000000000e1a2832363e464949463e3631271a0d000000000003111c232527272727272727272726221f180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b2224273135383a3b3a3937342a29211f170c04000000000000000000000000000000000000000000000108131c2025263135383a3b3b3a3835312725221b100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0e0e0e0e0c0a030000000000000003090b0e0e0e0e0d0b0700000000000000000000000000000000000000000000000000000000000000000a151d20293034343029201d150a0000000000000000080e10121212121212121212100d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f151d202325252524221f18130c0a04000000000000000000000000000000000000000000000000000000070b10141d20232425252523201d15100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b141b1f1f1b140b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e0f10100f0c0b040000000000000000000000000000000000000000000000000000000000000000000001080b0d0f10100f0e0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Black SDF + m_EditorClassIdentifier: + hashCode: 1310581165 + material: {fileID: 7304186015023537574} + materialHashCode: -1287821178 + m_Version: 1.1.0 + m_SourceFontFileGUID: 462a5605cd4f4de48821603c760ce4a6 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Black + m_PointSize: 67 + m_Scale: 1 + m_LineHeight: 80.4 + m_AscentLine: 66.129 + m_CapLine: 48 + m_MeanLine: 34 + m_Baseline: 0 + m_DescentLine: -14.271 + m_SuperscriptOffset: 66.129 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.271 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.085001 + m_UnderlineThickness: 3.283 + m_StrikethroughOffset: 13.6 + m_StrikethroughThickness: 3.283 + m_TabWidth: 15 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 15.484375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 49.390625 + m_Height: 48.8125 + m_HorizontalBearingX: -0.875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 47.640625 + m_GlyphRect: + m_X: 237 + m_Y: 325 + m_Width: 50 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 37.796875 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 44.859375 + m_GlyphRect: + m_X: 359 + m_Y: 6 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 41.671875 + m_Height: 49.875 + m_HorizontalBearingX: 2.015625 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 43.921875 + m_GlyphRect: + m_X: 93 + m_Y: 284 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 44.296875 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 50.984375 + m_GlyphRect: + m_X: 284 + m_Y: 67 + m_Width: 46 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 31.421875 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 38.390625 + m_GlyphRect: + m_X: 353 + m_Y: 320 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 31.421875 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 37.953125 + m_GlyphRect: + m_X: 373 + m_Y: 249 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 43.953125 + m_Height: 49.875 + m_HorizontalBearingX: 1.90625 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 48.40625 + m_GlyphRect: + m_X: 88 + m_Y: 432 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 42.609375 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 52.0625 + m_GlyphRect: + m_X: 244 + m_Y: 385 + m_Width: 44 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 11.390625 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 20.84375 + m_GlyphRect: + m_X: 380 + m_Y: 126 + m_Width: 13 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 24.25 + m_Height: 49.34375 + m_HorizontalBearingX: 0.671875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 29.171875 + m_GlyphRect: + m_X: 248 + m_Y: 68 + m_Width: 25 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 43.6875 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 47.328125 + m_GlyphRect: + m_X: 303 + m_Y: 6 + m_Width: 45 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 29.421875 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 35.171875 + m_GlyphRect: + m_X: 376 + m_Y: 187 + m_Width: 31 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 54.875 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 64.3125 + m_GlyphRect: + m_X: 89 + m_Y: 6 + m_Width: 56 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 42.609375 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 52.0625 + m_GlyphRect: + m_X: 298 + m_Y: 323 + m_Width: 44 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 50.71875 + m_Height: 49.875 + m_HorizontalBearingX: 1.90625 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 54.578125 + m_GlyphRect: + m_X: 69 + m_Y: 133 + m_Width: 52 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 36.859375 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 42.609375 + m_GlyphRect: + m_X: 299 + m_Y: 383 + m_Width: 38 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 53.46875 + m_Height: 58.484375 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 54.609375 + m_GlyphRect: + m_X: 156 + m_Y: 6 + m_Width: 55 + m_Height: 60 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 39.9375 + m_Height: 48.8125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 44.046875 + m_GlyphRect: + m_X: 321 + m_Y: 260 + m_Width: 41 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 34.234375 + m_Height: 49.875 + m_HorizontalBearingX: 0.9375 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 37.125 + m_GlyphRect: + m_X: 201 + m_Y: 77 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 38.796875 + m_Height: 48.8125 + m_HorizontalBearingX: 1 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 40.796875 + m_GlyphRect: + m_X: 259 + m_Y: 445 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 41.9375 + m_Height: 49.34375 + m_HorizontalBearingX: 4.125 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 50.1875 + m_GlyphRect: + m_X: 166 + m_Y: 408 + m_Width: 43 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 49.390625 + m_Height: 48.8125 + m_HorizontalBearingX: -0.875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 47.640625 + m_GlyphRect: + m_X: 260 + m_Y: 263 + m_Width: 50 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 71.078125 + m_Height: 48.8125 + m_HorizontalBearingX: 0.140625 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 71.359375 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 72 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 47.03125 + m_Height: 48.8125 + m_HorizontalBearingX: -0.4375 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 46.234375 + m_GlyphRect: + m_X: 266 + m_Y: 200 + m_Width: 48 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 46.703125 + m_Height: 48.8125 + m_HorizontalBearingX: -0.90625 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 44.890625 + m_GlyphRect: + m_X: 272 + m_Y: 129 + m_Width: 47 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 38.390625 + m_Height: 48.8125 + m_HorizontalBearingX: 0.9375 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 40.796875 + m_GlyphRect: + m_X: 325 + m_Y: 189 + m_Width: 40 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 30.421875 + m_Height: 35.9375 + m_HorizontalBearingX: 1.140625 + m_HorizontalBearingY: 35.40625 + m_HorizontalAdvance: 34.671875 + m_GlyphRect: + m_X: 355 + m_Y: 443 + m_Width: 31 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 33.171875 + m_Height: 50.6875 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 50.15625 + m_HorizontalAdvance: 38.484375 + m_GlyphRect: + m_X: 88 + m_Y: 221 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 30.359375 + m_Height: 35.8125 + m_HorizontalBearingX: 1.703125 + m_HorizontalBearingY: 35.28125 + m_HorizontalAdvance: 32.59375 + m_GlyphRect: + m_X: 216 + m_Y: 469 + m_Width: 32 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 33.15625 + m_Height: 50.6875 + m_HorizontalBearingX: 1.8125 + m_HorizontalBearingY: 50.15625 + m_HorizontalAdvance: 38.484375 + m_GlyphRect: + m_X: 156 + m_Y: 77 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 32.765625 + m_Height: 35.8125 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 35.28125 + m_HorizontalAdvance: 36.109375 + m_GlyphRect: + m_X: 171 + m_Y: 469 + m_Width: 34 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 23.421875 + m_Height: 49.75 + m_HorizontalBearingX: 1.203125 + m_HorizontalBearingY: 49.75 + m_HorizontalAdvance: 24.515625 + m_GlyphRect: + m_X: 268 + m_Y: 6 + m_Width: 24 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 33.78125 + m_Height: 47.296875 + m_HorizontalBearingX: 1.265625 + m_HorizontalBearingY: 35.34375 + m_HorizontalAdvance: 35.875 + m_GlyphRect: + m_X: 391 + m_Y: 66 + m_Width: 35 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 31.484375 + m_Height: 50.15625 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 50.15625 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 146 + m_Y: 280 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 12.515625 + m_Height: 50.34375 + m_HorizontalBearingX: 2.6875 + m_HorizontalBearingY: 50.34375 + m_HorizontalAdvance: 17.890625 + m_GlyphRect: + m_X: 189 + m_Y: 264 + m_Width: 14 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 17.890625 + m_Height: 62.296875 + m_HorizontalBearingX: -2.6875 + m_HorizontalBearingY: 50.34375 + m_HorizontalAdvance: 17.890625 + m_GlyphRect: + m_X: 63 + m_Y: 296 + m_Width: 19 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 34.234375 + m_Height: 50.15625 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 50.15625 + m_HorizontalAdvance: 37.421875 + m_GlyphRect: + m_X: 144 + m_Y: 346 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 50.3125 + m_Height: 35.28125 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 35.28125 + m_HorizontalAdvance: 57.015625 + m_GlyphRect: + m_X: 6 + m_Y: 174 + m_Width: 51 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 31.484375 + m_Height: 35.28125 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 35.28125 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 397 + m_Y: 309 + m_Width: 32 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 35.515625 + m_Height: 35.8125 + m_HorizontalBearingX: 1.703125 + m_HorizontalBearingY: 35.28125 + m_HorizontalAdvance: 38.921875 + m_GlyphRect: + m_X: 132 + m_Y: 142 + m_Width: 37 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 33.171875 + m_Height: 46.421875 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 35.40625 + m_HorizontalAdvance: 38.53125 + m_GlyphRect: + m_X: 409 + m_Y: 6 + m_Width: 34 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 33.15625 + m_Height: 46.421875 + m_HorizontalBearingX: 1.8125 + m_HorizontalBearingY: 35.40625 + m_HorizontalAdvance: 38.484375 + m_GlyphRect: + m_X: 404 + m_Y: 125 + m_Width: 34 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 22.046875 + m_Height: 35.40625 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 35.40625 + m_HorizontalAdvance: 25.5625 + m_GlyphRect: + m_X: 449 + m_Y: 159 + m_Width: 23 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 27.0625 + m_Height: 35.8125 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 35.28125 + m_HorizontalAdvance: 29.84375 + m_GlyphRect: + m_X: 392 + m_Y: 380 + m_Width: 28 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 24.78125 + m_Height: 45.359375 + m_HorizontalBearingX: 0.875 + m_HorizontalBearingY: 44.828125 + m_HorizontalAdvance: 25.734375 + m_GlyphRect: + m_X: 454 + m_Y: 6 + m_Width: 26 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 31.484375 + m_Height: 35.265625 + m_HorizontalBearingX: 3.1875 + m_HorizontalBearingY: 34.734375 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 417 + m_Y: 247 + m_Width: 32 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 36.390625 + m_Height: 34.734375 + m_HorizontalBearingX: -0.140625 + m_HorizontalBearingY: 34.734375 + m_HorizontalAdvance: 36.109375 + m_GlyphRect: + m_X: 464 + m_Y: 206 + m_Width: 38 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 54.46875 + m_Height: 34.765625 + m_HorizontalBearingX: 0.171875 + m_HorizontalBearingY: 34.765625 + m_HorizontalAdvance: 54.8125 + m_GlyphRect: + m_X: 6 + m_Y: 66 + m_Width: 55 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 37.046875 + m_Height: 34.734375 + m_HorizontalBearingX: -0.296875 + m_HorizontalBearingY: 34.734375 + m_HorizontalAdvance: 36.453125 + m_GlyphRect: + m_X: 460 + m_Y: 252 + m_Width: 38 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 36.78125 + m_Height: 45.75 + m_HorizontalBearingX: -0.265625 + m_HorizontalBearingY: 34.734375 + m_HorizontalAdvance: 36.046875 + m_GlyphRect: + m_X: 437 + m_Y: 65 + m_Width: 38 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 27.796875 + m_Height: 34.734375 + m_HorizontalBearingX: 1.546875 + m_HorizontalBearingY: 34.734375 + m_HorizontalAdvance: 31.21875 + m_GlyphRect: + m_X: 397 + m_Y: 428 + m_Width: 29 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 17.953125 + m_Height: 10.21875 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 26.796875 + m_GlyphRect: + m_X: 111 + m_Y: 494 + m_Width: 19 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 11.796875 + m_Height: 49.28125 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 19.5625 + m_GlyphRect: + m_X: 220 + m_Y: 387 + m_Width: 13 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 309 + m_Metrics: + m_Width: 27.265625 + m_Height: 49.8125 + m_HorizontalBearingX: 2.046875 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 31.59375 + m_GlyphRect: + m_X: 181 + m_Y: 202 + m_Width: 28 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 11.515625 + m_Height: 20.859375 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 10.984375 + m_HorizontalAdvance: 16.078125 + m_GlyphRect: + m_X: 486 + m_Y: 107 + m_Width: 12 + m_Height: 21 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 11.796875 + m_Height: 43.859375 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 33.984375 + m_HorizontalAdvance: 18.6875 + m_GlyphRect: + m_X: 491 + m_Y: 6 + m_Width: 12 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 11.796875 + m_Height: 34.453125 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 33.984375 + m_HorizontalAdvance: 17.75 + m_GlyphRect: + m_X: 491 + m_Y: 61 + m_Width: 12 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 314 + m_Metrics: + m_Width: 11.796875 + m_Height: 11.453125 + m_HorizontalBearingX: 2.109375 + m_HorizontalBearingY: 10.984375 + m_HorizontalAdvance: 16.015625 + m_GlyphRect: + m_X: 88 + m_Y: 494 + m_Width: 12 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 315 + m_Metrics: + m_Width: 48.796875 + m_Height: 11.453125 + m_HorizontalBearingX: 2.109375 + m_HorizontalBearingY: 10.984375 + m_HorizontalAdvance: 53 + m_GlyphRect: + m_X: 114 + m_Y: 195 + m_Width: 49 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 326 + m_Metrics: + m_Width: 28.6875 + m_Height: 53.46875 + m_HorizontalBearingX: 1.703125 + m_HorizontalBearingY: 50.15625 + m_HorizontalAdvance: 32.09375 + m_GlyphRect: + m_X: 6 + m_Y: 450 + m_Width: 30 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 8.03125 + m_Height: 63.546875 + m_HorizontalBearingX: 5.03125 + m_HorizontalBearingY: 52.15625 + m_HorizontalAdvance: 18.09375 + m_GlyphRect: + m_X: 136 + m_Y: 66 + m_Width: 9 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 329 + m_Metrics: + m_Width: 28.6875 + m_Height: 53.46875 + m_HorizontalBearingX: 1.703125 + m_HorizontalBearingY: 50.15625 + m_HorizontalAdvance: 32.09375 + m_GlyphRect: + m_X: 47 + m_Y: 450 + m_Width: 30 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 330 + m_Metrics: + m_Width: 18.09375 + m_Height: 8.375 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 24.5625 + m_HorizontalAdvance: 25.0625 + m_GlyphRect: + m_X: 141 + m_Y: 494 + m_Width: 19 + m_Height: 9 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 333 + m_Metrics: + m_Width: 26.40625 + m_Height: 6.484375 + m_HorizontalBearingX: 2.640625 + m_HorizontalBearingY: -3.625 + m_HorizontalAdvance: 31.6875 + m_GlyphRect: + m_X: 93 + m_Y: 346 + m_Width: 28 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 15.3125 + m_Height: 64.28125 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 53.125 + m_HorizontalAdvance: 18.828125 + m_GlyphRect: + m_X: 6 + m_Y: 221 + m_Width: 17 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 15.3125 + m_Height: 64.28125 + m_HorizontalBearingX: 1.578125 + m_HorizontalBearingY: 53.125 + m_HorizontalAdvance: 18.828125 + m_GlyphRect: + m_X: 6 + m_Y: 298 + m_Width: 16 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 15 + m_Height: 63.015625 + m_HorizontalBearingX: 5.03125 + m_HorizontalBearingY: 52.15625 + m_HorizontalAdvance: 21.46875 + m_GlyphRect: + m_X: 34 + m_Y: 221 + m_Width: 16 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 15.015625 + m_Height: 63.015625 + m_HorizontalBearingX: 1.4375 + m_HorizontalBearingY: 52.15625 + m_HorizontalAdvance: 21.46875 + m_GlyphRect: + m_X: 61 + m_Y: 221 + m_Width: 16 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 17.609375 + m_Height: 63.015625 + m_HorizontalBearingX: 1.546875 + m_HorizontalBearingY: 52.15625 + m_HorizontalAdvance: 20.796875 + m_GlyphRect: + m_X: 33 + m_Y: 298 + m_Width: 19 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 341 + m_Metrics: + m_Width: 17.625 + m_Height: 63.015625 + m_HorizontalBearingX: 1.640625 + m_HorizontalBearingY: 52.15625 + m_HorizontalAdvance: 20.796875 + m_GlyphRect: + m_X: 54 + m_Y: 373 + m_Width: 19 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 342 + m_Metrics: + m_Width: 22.984375 + m_Height: 23.75 + m_HorizontalBearingX: 2.75 + m_HorizontalBearingY: 51.046875 + m_HorizontalAdvance: 28.46875 + m_GlyphRect: + m_X: 449 + m_Y: 123 + m_Width: 24 + m_Height: 25 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 34.296875 + m_Height: 26.40625 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 418 + m_Y: 206 + m_Width: 35 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 33.5 + m_Height: 13.875 + m_HorizontalBearingX: 2.78125 + m_HorizontalBearingY: 26.765625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 68 + m_Y: 195 + m_Width: 35 + m_Height: 15 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 9.046875 + m_Height: 18.59375 + m_HorizontalBearingX: 2.78125 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 14.609375 + m_GlyphRect: + m_X: 484 + m_Y: 139 + m_Width: 10 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 22.046875 + m_Height: 18.59375 + m_HorizontalBearingX: 2.78125 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 28 + m_GlyphRect: + m_X: 483 + m_Y: 169 + m_Width: 23 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 351 + m_Metrics: + m_Width: 47.375 + m_Height: 49.875 + m_HorizontalBearingX: 1.96875 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 49.140625 + m_GlyphRect: + m_X: 84 + m_Y: 370 + m_Width: 49 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 352 + m_Metrics: + m_Width: 52.0625 + m_Height: 54.96875 + m_HorizontalBearingX: 2.640625 + m_HorizontalBearingY: 46.859375 + m_HorizontalAdvance: 56.921875 + m_GlyphRect: + m_X: 72 + m_Y: 66 + m_Width: 53 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 362 + m_Metrics: + m_Width: 35.765625 + m_Height: 62.46875 + m_HorizontalBearingX: 1.3125 + m_HorizontalBearingY: 55.40625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 6 + m_Y: 375 + m_Width: 37 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 370 + m_Metrics: + m_Width: 38.296875 + m_Height: 48.8125 + m_HorizontalBearingX: 0.328125 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 330 + m_Y: 127 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 36.171875 + m_Height: 49.875 + m_HorizontalBearingX: 1.34375 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 133 + m_Y: 218 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 31.8125 + m_Height: 48.84375 + m_HorizontalBearingX: 3.390625 + m_HorizontalBearingY: 48.84375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 348 + m_Y: 383 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 34.296875 + m_Height: 49.34375 + m_HorizontalBearingX: 2.015625 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 214 + m_Y: 264 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.640625 + m_Height: 49.875 + m_HorizontalBearingX: 1.609375 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 180 + m_Y: 140 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 37.53125 + m_Height: 48.8125 + m_HorizontalBearingX: -0.171875 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 341 + m_Y: 66 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 33.703125 + m_Height: 49.34375 + m_HorizontalBearingX: 2.109375 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 227 + m_Y: 139 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 405 + m_Metrics: + m_Width: 34.3125 + m_Height: 48.8125 + m_HorizontalBearingX: 2.640625 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 309 + m_Y: 443 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 406 + m_Metrics: + m_Width: 33.96875 + m_Height: 49.34375 + m_HorizontalBearingX: 2.109375 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 220 + m_Y: 202 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 435 + m_Metrics: + m_Width: 33.171875 + m_Height: 34.046875 + m_HorizontalBearingX: 2.84375 + m_HorizontalBearingY: 39.5 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 440 + m_Y: 344 + m_Width: 35 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 439 + m_Metrics: + m_Width: 30.484375 + m_Height: 19.734375 + m_HorizontalBearingX: 4.1875 + m_HorizontalBearingY: 32.359375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 431 + m_Y: 390 + m_Width: 31 + m_Height: 21 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 442 + m_Metrics: + m_Width: 27.140625 + m_Height: 32.421875 + m_HorizontalBearingX: 4.75 + m_HorizontalBearingY: 38.828125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 437 + m_Y: 434 + m_Width: 28 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 443 + m_Metrics: + m_Width: 27.140625 + m_Height: 32.421875 + m_HorizontalBearingX: 6.96875 + m_HorizontalBearingY: 38.828125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 473 + m_Y: 390 + m_Width: 29 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 10.390625 + m_Height: 50.15625 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 50.15625 + m_HorizontalAdvance: 17.421875 + m_GlyphRect: + m_X: 144 + m_Y: 408 + m_Width: 11 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 35.234375 + m_Height: 49.34375 + m_HorizontalBearingX: 2.078125 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 190 + m_Y: 326 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.828125 + m_Height: 49.875 + m_HorizontalBearingX: 2.015625 + m_HorizontalBearingY: 49.34375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 222 + m_Y: 6 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 51.453125 + m_Height: 49.890625 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 49.28125 + m_HorizontalAdvance: 56.015625 + m_GlyphRect: + m_X: 6 + m_Y: 112 + m_Width: 52 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 34.828125 + m_Height: 34.703125 + m_HorizontalBearingX: 2.6875 + m_HorizontalBearingY: 34.703125 + m_HorizontalAdvance: 40.203125 + m_GlyphRect: + m_X: 440 + m_Y: 298 + m_Width: 36 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -2791197472762382045} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 83 + m_Height: 60 + - m_X: 83 + m_Y: 0 + m_Width: 67 + m_Height: 60 + - m_X: 150 + m_Y: 0 + m_Width: 66 + m_Height: 71 + - m_X: 0 + m_Y: 60 + m_Width: 66 + m_Height: 46 + - m_X: 66 + m_Y: 60 + m_Width: 64 + m_Height: 67 + - m_X: 130 + m_Y: 60 + m_Width: 20 + m_Height: 76 + - m_X: 0 + m_Y: 106 + m_Width: 63 + m_Height: 62 + - m_X: 63 + m_Y: 127 + m_Width: 63 + m_Height: 62 + - m_X: 0 + m_Y: 168 + m_Width: 62 + m_Height: 47 + - m_X: 0 + m_Y: 215 + m_Width: 28 + m_Height: 77 + - m_X: 0 + m_Y: 292 + m_Width: 27 + m_Height: 77 + - m_X: 0 + m_Y: 369 + m_Width: 48 + m_Height: 75 + - m_X: 0 + m_Y: 444 + m_Width: 41 + m_Height: 66 + - m_X: 41 + m_Y: 444 + m_Width: 41 + m_Height: 66 + - m_X: 27 + m_Y: 292 + m_Width: 30 + m_Height: 75 + - m_X: 48 + m_Y: 367 + m_Width: 30 + m_Height: 75 + - m_X: 28 + m_Y: 215 + m_Width: 27 + m_Height: 75 + - m_X: 55 + m_Y: 215 + m_Width: 27 + m_Height: 75 + - m_X: 62 + m_Y: 189 + m_Width: 46 + m_Height: 26 + - m_X: 57 + m_Y: 290 + m_Width: 30 + m_Height: 74 + - m_X: 82 + m_Y: 215 + m_Width: 45 + m_Height: 63 + - m_X: 108 + m_Y: 189 + m_Width: 60 + m_Height: 23 + - m_X: 126 + m_Y: 136 + m_Width: 48 + m_Height: 48 + - m_X: 150 + m_Y: 71 + m_Width: 45 + m_Height: 63 + - m_X: 78 + m_Y: 364 + m_Width: 60 + m_Height: 62 + - m_X: 82 + m_Y: 426 + m_Width: 56 + m_Height: 62 + - m_X: 82 + m_Y: 488 + m_Width: 23 + m_Height: 23 + - m_X: 105 + m_Y: 488 + m_Width: 30 + m_Height: 22 + - m_X: 135 + m_Y: 488 + m_Width: 30 + m_Height: 20 + - m_X: 87 + m_Y: 278 + m_Width: 53 + m_Height: 62 + - m_X: 127 + m_Y: 212 + m_Width: 48 + m_Height: 62 + - m_X: 87 + m_Y: 340 + m_Width: 39 + m_Height: 19 + - m_X: 174 + m_Y: 134 + m_Width: 47 + m_Height: 62 + - m_X: 195 + m_Y: 71 + m_Width: 47 + m_Height: 62 + - m_X: 216 + m_Y: 0 + m_Width: 46 + m_Height: 62 + - m_X: 138 + m_Y: 340 + m_Width: 46 + m_Height: 62 + - m_X: 140 + m_Y: 274 + m_Width: 43 + m_Height: 62 + - m_X: 175 + m_Y: 196 + m_Width: 39 + m_Height: 62 + - m_X: 183 + m_Y: 258 + m_Width: 25 + m_Height: 62 + - m_X: 138 + m_Y: 402 + m_Width: 22 + m_Height: 62 + - m_X: 160 + m_Y: 402 + m_Width: 54 + m_Height: 61 + - m_X: 165 + m_Y: 463 + m_Width: 45 + m_Height: 48 + - m_X: 210 + m_Y: 463 + m_Width: 43 + m_Height: 48 + - m_X: 184 + m_Y: 320 + m_Width: 47 + m_Height: 61 + - m_X: 208 + m_Y: 258 + m_Width: 46 + m_Height: 61 + - m_X: 214 + m_Y: 196 + m_Width: 46 + m_Height: 61 + - m_X: 221 + m_Y: 133 + m_Width: 45 + m_Height: 61 + - m_X: 242 + m_Y: 62 + m_Width: 36 + m_Height: 61 + - m_X: 262 + m_Y: 0 + m_Width: 35 + m_Height: 61 + - m_X: 214 + m_Y: 381 + m_Width: 24 + m_Height: 61 + - m_X: 231 + m_Y: 319 + m_Width: 61 + m_Height: 60 + - m_X: 254 + m_Y: 257 + m_Width: 61 + m_Height: 60 + - m_X: 260 + m_Y: 194 + m_Width: 59 + m_Height: 60 + - m_X: 266 + m_Y: 123 + m_Width: 58 + m_Height: 60 + - m_X: 278 + m_Y: 61 + m_Width: 57 + m_Height: 60 + - m_X: 297 + m_Y: 0 + m_Width: 56 + m_Height: 60 + - m_X: 238 + m_Y: 379 + m_Width: 55 + m_Height: 60 + - m_X: 292 + m_Y: 317 + m_Width: 55 + m_Height: 60 + - m_X: 315 + m_Y: 254 + m_Width: 52 + m_Height: 60 + - m_X: 319 + m_Y: 183 + m_Width: 51 + m_Height: 60 + - m_X: 324 + m_Y: 121 + m_Width: 50 + m_Height: 60 + - m_X: 335 + m_Y: 60 + m_Width: 50 + m_Height: 60 + - m_X: 353 + m_Y: 0 + m_Width: 50 + m_Height: 60 + - m_X: 253 + m_Y: 439 + m_Width: 50 + m_Height: 60 + - m_X: 293 + m_Y: 377 + m_Width: 49 + m_Height: 60 + - m_X: 303 + m_Y: 437 + m_Width: 46 + m_Height: 60 + - m_X: 342 + m_Y: 377 + m_Width: 44 + m_Height: 60 + - m_X: 347 + m_Y: 314 + m_Width: 44 + m_Height: 60 + - m_X: 367 + m_Y: 243 + m_Width: 44 + m_Height: 60 + - m_X: 370 + m_Y: 181 + m_Width: 42 + m_Height: 60 + - m_X: 374 + m_Y: 120 + m_Width: 24 + m_Height: 60 + - m_X: 385 + m_Y: 60 + m_Width: 46 + m_Height: 59 + - m_X: 403 + m_Y: 0 + m_Width: 45 + m_Height: 59 + - m_X: 398 + m_Y: 119 + m_Width: 45 + m_Height: 59 + - m_X: 431 + m_Y: 59 + m_Width: 49 + m_Height: 58 + - m_X: 448 + m_Y: 0 + m_Width: 37 + m_Height: 57 + - m_X: 485 + m_Y: 0 + m_Width: 23 + m_Height: 55 + - m_X: 485 + m_Y: 55 + m_Width: 23 + m_Height: 46 + - m_X: 480 + m_Y: 101 + m_Width: 23 + m_Height: 32 + - m_X: 443 + m_Y: 117 + m_Width: 35 + m_Height: 36 + - m_X: 478 + m_Y: 133 + m_Width: 21 + m_Height: 30 + - m_X: 443 + m_Y: 153 + m_Width: 34 + m_Height: 47 + - m_X: 477 + m_Y: 163 + m_Width: 34 + m_Height: 30 + - m_X: 349 + m_Y: 437 + m_Width: 42 + m_Height: 48 + - m_X: 386 + m_Y: 374 + m_Width: 39 + m_Height: 48 + - m_X: 391 + m_Y: 303 + m_Width: 43 + m_Height: 47 + - m_X: 411 + m_Y: 241 + m_Width: 43 + m_Height: 47 + - m_X: 412 + m_Y: 200 + m_Width: 46 + m_Height: 38 + - m_X: 458 + m_Y: 200 + m_Width: 49 + m_Height: 46 + - m_X: 454 + m_Y: 246 + m_Width: 49 + m_Height: 46 + - m_X: 434 + m_Y: 292 + m_Width: 47 + m_Height: 46 + - m_X: 434 + m_Y: 338 + m_Width: 46 + m_Height: 46 + - m_X: 391 + m_Y: 422 + m_Width: 40 + m_Height: 46 + - m_X: 425 + m_Y: 384 + m_Width: 42 + m_Height: 32 + - m_X: 467 + m_Y: 384 + m_Width: 40 + m_Height: 44 + - m_X: 431 + m_Y: 428 + m_Width: 39 + m_Height: 44 + m_FreeGlyphRects: + - m_X: 63 + m_Y: 106 + m_Width: 3 + m_Height: 21 + - m_X: 27 + m_Y: 367 + m_Width: 21 + m_Height: 2 + - m_X: 62 + m_Y: 168 + m_Width: 1 + m_Height: 21 + - m_X: 28 + m_Y: 290 + m_Width: 29 + m_Height: 2 + - m_X: 126 + m_Y: 127 + m_Width: 4 + m_Height: 9 + - m_X: 57 + m_Y: 364 + m_Width: 21 + m_Height: 3 + - m_X: 48 + m_Y: 442 + m_Width: 34 + m_Height: 2 + - m_X: 78 + m_Y: 426 + m_Width: 4 + m_Height: 18 + - m_X: 0 + m_Y: 510 + m_Width: 82 + m_Height: 1 + - m_X: 82 + m_Y: 278 + m_Width: 5 + m_Height: 12 + - m_X: 108 + m_Y: 212 + m_Width: 19 + m_Height: 3 + - m_X: 126 + m_Y: 184 + m_Width: 48 + m_Height: 5 + - m_X: 150 + m_Y: 134 + m_Width: 24 + m_Height: 2 + - m_X: 168 + m_Y: 184 + m_Width: 6 + m_Height: 28 + - m_X: 87 + m_Y: 359 + m_Width: 51 + m_Height: 5 + - m_X: 126 + m_Y: 340 + m_Width: 12 + m_Height: 24 + - m_X: 127 + m_Y: 274 + m_Width: 13 + m_Height: 4 + - m_X: 168 + m_Y: 196 + m_Width: 7 + m_Height: 16 + - m_X: 175 + m_Y: 258 + m_Width: 8 + m_Height: 16 + - m_X: 105 + m_Y: 510 + m_Width: 60 + m_Height: 1 + - m_X: 135 + m_Y: 508 + m_Width: 30 + m_Height: 3 + - m_X: 138 + m_Y: 464 + m_Width: 27 + m_Height: 24 + - m_X: 160 + m_Y: 463 + m_Width: 5 + m_Height: 25 + - m_X: 140 + m_Y: 336 + m_Width: 44 + m_Height: 4 + - m_X: 183 + m_Y: 320 + m_Width: 1 + m_Height: 20 + - m_X: 195 + m_Y: 133 + m_Width: 26 + m_Height: 1 + - m_X: 216 + m_Y: 62 + m_Width: 26 + m_Height: 9 + - m_X: 184 + m_Y: 381 + m_Width: 30 + m_Height: 21 + - m_X: 208 + m_Y: 319 + m_Width: 23 + m_Height: 1 + - m_X: 214 + m_Y: 257 + m_Width: 40 + m_Height: 1 + - m_X: 221 + m_Y: 194 + m_Width: 39 + m_Height: 2 + - m_X: 242 + m_Y: 123 + m_Width: 24 + m_Height: 10 + - m_X: 262 + m_Y: 61 + m_Width: 16 + m_Height: 1 + - m_X: 231 + m_Y: 379 + m_Width: 7 + m_Height: 2 + - m_X: 254 + m_Y: 317 + m_Width: 38 + m_Height: 2 + - m_X: 260 + m_Y: 254 + m_Width: 55 + m_Height: 3 + - m_X: 266 + m_Y: 183 + m_Width: 53 + m_Height: 11 + - m_X: 278 + m_Y: 121 + m_Width: 46 + m_Height: 2 + - m_X: 297 + m_Y: 60 + m_Width: 38 + m_Height: 1 + - m_X: 214 + m_Y: 442 + m_Width: 39 + m_Height: 21 + - m_X: 253 + m_Y: 499 + m_Width: 258 + m_Height: 12 + - m_X: 238 + m_Y: 439 + m_Width: 15 + m_Height: 24 + - m_X: 292 + m_Y: 377 + m_Width: 1 + m_Height: 2 + - m_X: 293 + m_Y: 437 + m_Width: 10 + m_Height: 2 + - m_X: 303 + m_Y: 497 + m_Width: 208 + m_Height: 14 + - m_X: 315 + m_Y: 314 + m_Width: 32 + m_Height: 3 + - m_X: 319 + m_Y: 243 + m_Width: 48 + m_Height: 11 + - m_X: 324 + m_Y: 181 + m_Width: 46 + m_Height: 2 + - m_X: 335 + m_Y: 120 + m_Width: 39 + m_Height: 1 + - m_X: 385 + m_Y: 119 + m_Width: 13 + m_Height: 1 + - m_X: 403 + m_Y: 59 + m_Width: 28 + m_Height: 1 + - m_X: 448 + m_Y: 57 + m_Width: 37 + m_Height: 2 + - m_X: 480 + m_Y: 57 + m_Width: 5 + m_Height: 44 + - m_X: 431 + m_Y: 117 + m_Width: 12 + m_Height: 2 + - m_X: 478 + m_Y: 117 + m_Width: 2 + m_Height: 16 + - m_X: 374 + m_Y: 180 + m_Width: 69 + m_Height: 1 + - m_X: 398 + m_Y: 178 + m_Width: 45 + m_Height: 3 + - m_X: 508 + m_Y: 0 + m_Width: 3 + m_Height: 163 + - m_X: 503 + m_Y: 101 + m_Width: 8 + m_Height: 62 + - m_X: 499 + m_Y: 133 + m_Width: 12 + m_Height: 30 + - m_X: 477 + m_Y: 153 + m_Width: 1 + m_Height: 10 + - m_X: 349 + m_Y: 485 + m_Width: 162 + m_Height: 26 + - m_X: 347 + m_Y: 374 + m_Width: 39 + m_Height: 3 + - m_X: 367 + m_Y: 303 + m_Width: 24 + m_Height: 11 + - m_X: 370 + m_Y: 241 + m_Width: 41 + m_Height: 2 + - m_X: 412 + m_Y: 178 + m_Width: 31 + m_Height: 22 + - m_X: 477 + m_Y: 193 + m_Width: 34 + m_Height: 7 + - m_X: 507 + m_Y: 193 + m_Width: 4 + m_Height: 318 + - m_X: 412 + m_Y: 238 + m_Width: 46 + m_Height: 3 + - m_X: 454 + m_Y: 238 + m_Width: 4 + m_Height: 8 + - m_X: 411 + m_Y: 288 + m_Width: 43 + m_Height: 4 + - m_X: 411 + m_Y: 288 + m_Width: 23 + m_Height: 15 + - m_X: 391 + m_Y: 350 + m_Width: 43 + m_Height: 24 + - m_X: 386 + m_Y: 422 + m_Width: 5 + m_Height: 15 + - m_X: 425 + m_Y: 350 + m_Width: 9 + m_Height: 34 + - m_X: 503 + m_Y: 246 + m_Width: 8 + m_Height: 138 + - m_X: 481 + m_Y: 292 + m_Width: 30 + m_Height: 92 + - m_X: 480 + m_Y: 338 + m_Width: 31 + m_Height: 46 + - m_X: 425 + m_Y: 416 + m_Width: 42 + m_Height: 6 + - m_X: 391 + m_Y: 472 + m_Width: 120 + m_Height: 39 + - m_X: 391 + m_Y: 468 + m_Width: 40 + m_Height: 43 + - m_X: 470 + m_Y: 428 + m_Width: 41 + m_Height: 83 + - m_X: 431 + m_Y: 416 + m_Width: 36 + m_Height: 12 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 462a5605cd4f4de48821603c760ce4a6 + pointSizeSamplingMode: 0 + pointSize: 67 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!21 &7304186015023537574 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Black SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -2791197472762382045} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.8333333 + - _ScaleRatioB: 0.6770833 + - _ScaleRatioC: 0.6770833 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Black SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Black SDF.asset.meta new file mode 100644 index 0000000..240f7c6 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Black SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4eccd51250cfa3948a3ac1e21d15fe34 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BlackItalic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BlackItalic SDF.asset new file mode 100644 index 0000000..ea80671 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BlackItalic SDF.asset @@ -0,0 +1,2670 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-1390796265212201068 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-BlackItalic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b2020202020202020201e0b09020000000000000000000000010b1013202020202020202020191711070000000000000000000000000000000000000000000000000000040a2020202020202020202014120c0300000000000000000000000000000000000000000000000000090e102020202020202020200e0c07000000000000000000000000000000000a0b0b0b0b0b0b08000000000000000000000000000000000000000003090c11151716140f0b070000000000000000000000000000000000000000030a0c1d202020202020202020201d140b07000000000000000000000000000000060c0e1b2020202020202020201e0b0902000000000000000000000000000000070b0f1314110c0a04000000000000000000060c0e1314120d0b05000000000000000000050b0d1214130e0c07000000000000000000000000000000000000000000000000000003090b1015181b1d1e1f1f1e1e1c1916130e0b080100000000000000000000000000000000000000000000000000000000000000000000040d131520202020202020202018161006000000000000000000000000000000000000000000000000000000000000040a20202020202020202020201b19120800000000000000000000000b151b1d2020202020202020201f1d170e0200000000000000000000000000000000000000000000000000000a161e3335353535353535353533201d150a00000000000000000005131e25283535353535353535352f2c24190a0000000000000000000000000000000000000000000000000c171f3535353535353535353529271f14060000000000000000000000000000000000000000000003111c232635353535353535353523211a0f010000000000000000000000090f11202020202020201e160b08020000000000000000000000000000040b161e21262a2c2b2925201c130803000000000000000000000000000000000b161e2132353535353535353535353229201c13080000000000000000000000010f1a21233135353535353535353533201d150a00000000000000000000000008131c2024282927211f170c010000000000050e1921232829282220190d040000000000030d181f2227292824211a0f0600000000000000000000000000000000000000000001080b161e21252a2e30333435343433312f2c2824201c140c0903000000000000000000000000000000000000000000000000000000000000071520282a3535353535353535352d2b231809000000000000000000000000000000000000000000000000000000000c171f3535353535353535353535302d261a0c0000000000000000000f1d28303335353535353535353534322b2012020000000000000000000000000000000000000000000000000a1a2832484a4a4a4a4a4a4a4a4a493631271a0a00000000000000011323313a3d4a4a4a4a4a4a4a4a4a444036291900000000000000000000000000000000000000000000000c1c29334a4a4a4a4a4a4a4a4a4a3f3b3225140300000000000000000000000000000000000000000011212f383b4a4a4a4a4a4a4a4a4a39362d1f0f00000000000000000003111c232635353535353535332b201d15090000000000000000000000000c171f2832363c3f41403e3a3530251e170b00000000000000000000000000000b1b293236484a4a4a4a4a4a4a4a4a4a473f3530251808000000000000000000000f1f2c3539464a4a4a4a4a4a4a4a4a483632281a0a0000000000000000000210182530353a3e3e3c3633291d14090000000d18202c35383d3f3d37342b1f170b0000000a161e2a34373c3f3d39362d21190e0000000000000000000000000000000000000108141c202832363a3f434648494a4a49484644413d39353026211e160b07000000000000000000000000000000000000000000000000000000041525333c404a4a4a4a4a4a4a4a4a433f3528180000000000000000000000000000000000000000000000000000000c1c29334a4a4a4a4a4a4a4a4a4a4a4542382a1a08000000000000000b1d2d3a44484a4a4a4a4a4a4a4a4a49463d302000000000000000000000000000000000000000000000000002162838455c5f60606060606060605e4b45382715020000000000000b1e31414e52606060606060606060595447361d0d0000000000000000000000000000000000000000000417293a465e606060606060606060544f43321f0c0000000000000000000000000000000000000000091c2f3f4c506060606060606060605e4a3d2d1a07000000000000000011222f383b4a4a4a4a4a4a4a4840363127190a00000000000000000002101c2a3339464b51545656534f4a433633291b1300000000000000000000000003162939464b5d6060606060606060605f5d544a4336251300000000000000000009192c3d494e5b5f60606060606060605e4b4538281502000000000000000210202d36434a4f5354514c463a31261909000d1d2b343c494d5254524d483b33291b0b000a1a28323b474c5254534e4a3d352c1e0f0100000000000000000000000000000008141c26303538454b5054585b5d5e5f5f5e5d5b5956524e4b4336363228211a0f07000000000000000000000000000000000000000000000000000d2033435055606060606060606060585346351e0e000000000000000000000000000000000000000000000000000417293a465e606060606060606060605b55483826120000000000000115283a4b585d6060606060606060605f5a4e3d1c0c0000000000000000000000000000000000000000000000091e3245566e75757575757575757573605645311d0900000000000010253a4e5f687575757575757575756e65543b2b190500000000000000000000000000000000000000000a1f3346587075757575757575757569614f3b271200000000000000000207080704000000000000000e23384c5d65757575757575757575705b4a36210c00000000000000091c2f404c505f6060606060605d554b4437281b0a000000000000000110202d3a474c5761666a6c6b696460544c4639301c1308000000000000000000000a1e3246576172757575757575757575757269605443301c100000000000000001152737495b637075757575757575757573605645321d090000000000000010212e3e4a54606468696661584b443726180d1d2b3b484d5b6368696762594c463a291b0b192838454b5962676968635b4d493c2c1f0f00000000000000000000000000001018263036434b515660656a6d70727374747373716e6b68636054524b4639362d221b1005000000000000000000000000000000000000000000000013283c50616a7575757575757575756d64533c2c19060000000000000000000000000000000000000000000000000a1f3346587075757575757575757575706655422d09000000000000061b3044586972757575757575757575746c5a3a2a1704000000000000000000000000000000000000000000000b21364b60758c8a8a8a8a8a8a8a8a8974604b36200d00000000000013283d52687d8a8a8a8a8a8a8a8a8a836e594834200900000000000000000000000000000000000000000c21364c61768a8a8a8a8a8a8a8a8a7f69543f29140000000000060c0e181c1d1c1912100a0000000010263b50657b8a8a8a8a8a8a8a8a8a79634e39230e000000000000000f23384c5e6675757575757575736b605545392818080000000000000f1f2d3e4a58616c767c7f81807e7a736b61574d41302518080000000000000000000c21364b6176878a8a8a8a8a8a8a8a8a8a877e72604a3e2e1909000000000000081d3144556379858a8a8a8a8a8a8a8a8a8875604b36200b0000000000000a1a2e3f4b5c64737a7d7e7c766a6055443625182b3b4859626f787d7e7d776d61584639291727374556606c777c7e7d7970635b493d2c1a06000000000000000000000008131c2e36434b5460666e757a7f838588898a8989888684817d79746e6761574e4a3e362d1f180d00000000000000000000000000000000000000000002152738556a7f8a8a8a8a8a8a8a8a8a826d5a4935200e0000000000000000000000000000000000000000000000000c21364c61768a8a8a8a8a8a8a8a8a8a84705b372715020000000000081d33485d72878a8a8a8a8a8a8a8a8a8a745847331f0a000000000000000000000000000000000000000000000f24394e64798eaa9f9f9f9f9f9fa7917c67513c2b19050000000000162b40556b80959f9f9f9f9f9f9f9f8b78624d37271501000000000000000000000000000000000000000a1f33465874899e9f9f9f9f9f9f96816c56412c17010000000e1a21232d3132322f27241d120000000e23384e63788dab9f9f9f9f9f9f907b66513b26110000000000000011263b50667b8c8a8a8a8a8a8a888074605745362513000000000009192c3d4a5c6476818a91949695938f888076675f4a433625130000000000000000000a1e324657647a8c9f9f9f9f9f9f9faa9f9c94806b5c4b3727150200000000000b20354b6074869b9faa9f9f9f9f9fa9957f6a5645321d090000000000021527384b5d657a868f9393918a7f7360544330203448596277848d9294928b8276615746331e3144556074818b9194928e8479635b4935211000000000000000000000091825303e4b546068737c83898f94989b9d9e9f9f9e9d9b9996928e88837d766d645c4f4a3e342a1d0d0000000000000000000000000000000000000000091d3145566f859a9f9f9f9f9f9f9f9f8c78634d3c2b190600000000000000000000000000000000000000000000000a1f33465874899e9f9f9f9f9f9f9f9d88735544311d080000000000051b30455a70859a9f9f9f9f9f9f9fa88c76614c37210c0000000000000000000000000000000000000000000012273c52677c91a7b5b5b5b5b5c5af99846f5a483420080000000003192e43586e8398adb5b5b5b5b5bbaa95806a5544311d08000000000000000000000000000000000000000417293a5c71869cb1b5b5b5b5ae99836e59442e190000000e1f2c353842464747443c39301c1308000b21364b60768a9fb5b5b5b5b5a8937e68533e2913000000000000000f23384c5e697e939f9f9fab9f9d958475605443301c1303000001152737495b647a88969fa9a9ababa8a69d95887d6b605443301c130000000000000000031629394b5c6a8095a3b4c6b5b5b5bbb4b29f8c7a645544311d0e0000000006192b3c51667c91a4b4bbb5b5b5b5b49f8a77614c382815020000000000091d314556657b8b9ca4a8a9a89e958272604a352a3b4c62778799a1a7a9ab9f988675614c3828364b607484979faaa9a8a29a8979634e3e2d1b07000000000000000009192736434a5c64737d8791989fa8a9adb0b2b3b4b4b3b2b0aeaba7a79e98928a82796f645c4c473b2a1805000000000000000000000000000000000000000b20364b60758a9fb4b5b5b5b5b5bbaa97826d5a4935200d00000000000000000000000000000000000000000000000417293a5c71869cb1b5b5b5b5b5b49f8a75604b36200b000000000003182d43586d8298adb5b5b5b5b5c6a48e79644f39240f00000000000000000000000000000000000000000000152b40556a8095aabfcacacacacab49f8b78624d3625130000000005182b3b5c71869bb1c6cacacad9c8b29d8874604b35200e0000000000000000000000000000000000000000192f44596e8499aec3cacac6b09b86715b38281603000e1e2c3d494e575c5d5c59514d4130251808091e32455673889eb3c8cacac0ab96806b56412b1601000000000000091c2f404f606c8197a1b3bcb5b2a2998372604a413121100000081d31445563798a9da6b4bac7c1c0c4b7b2a69e928072604a42311d0d00000000000000000b1b2e3e4b6073859ba8b9cdcad9cecabcab9c8674604b3c2c19060000000b2035485a6f8499afc2ced8cad0bfac97826d5947341a0a0000000000000b20364b6074879da9b5c2c6b9b4a0927d6752363448596e8398a5b3bfc9bcb4a496816c5645323a54697f94a2b4bbc8c0b4a79b85705c4a36220d00000000000000091927374454606a7a85929ca5aeb4bac6c2c1bdbab9b8b8b9bbbdbfc5b8b3aea89f978e847a6d625947341f0b0000000000000000000000000000000000000010253a4f657a8fa9bacdcacacad9c8b49f8b78624d3c2b19050000000000000000000000000000000000000000000000192f44596e8499aec3cacacacfbcab8d78634d38230e000000000000152b40556a8095aabfcacacacabba6917c66513c271100000000000000000000000000000000000000000001152737596e8398aec3d8dfdfe3cfbcab957f6a5443301c070000000b2034485974899eb4c9dedfdfdfcbb7a6917c66513c2c190600000000000000000000000000000000000002172c41576c8196acc1d6ddc8b39e88735645321e0906192c3c495b636d7172716e675f4a43362513021628385b70869bb0c5dbd8c3ae98836e59432e190000000000000000112232424b6073839aa4b6c5c0b2a195806b5f4e3f2e1e0e000b20354b6073869ba8b7c4c3b6b2acaeb4bab8b39e96816c604e3c2b19050000000000000000101d31445563788a9eb4bfcfe2e2d9c9b5a4947f6a5a493520130000011527374d62788c9fb4cadfeadcc7b3a18e79634e3a2a180000000000000011263c51667c91a5b6c7d2d7cdbeb09a85705443374c62778b9fb5c3d0d9cfc2b49e8975604b36475872879db2c0ced8d1c5b4a38e7a644f39240f00000000000001142637445560727f8c9ba3b2b6c3c9bcb5b0aba8a5a4a3a3a4a5a7aaadb1b5bcbab4ada1998e8277624c37220d00000000000000000000000000000000000001152737556a7f94aac7d7e9dfdfe2cebbaa97816c5a4834200d0000000000000000000000000000000000000000000002172c41576c8196acc1d6dfebd9c9a5907a65503b251000000000000013283d52687d92a7bdd2dfdfd3bea9947e69543f2914000000000000000000000000000000000000000000081d31445571879cb1c6dcf1feebd9c9b29d8773604a35200c0000000d22374c62778ca8b9cde1f5fae7d4c4af9a846f5a4935200a0000000000000000000000000000000000000014293f54697e94a9bed3e0cbb8a68b76604b36210b0c2135495b637982868787847c6d605443301c0d192e43596e8398aec3d8dbc5b09b86705b382816030000000000000003141d3144556176869ca7b8c7bfb09e927d685d4b3c2c1b0b172a3a52677d92a3b5c6c1b5a59c97999fa9b8bcb09f927d685a4834200e000000000000000001152737495a687e93a1b3c4d5e7e7d2c2b49f8b78634d41311c0c00081d3144556b8095abbccfe3e5d3c2af9a846f5b4a361c0c00000000000000162b40556b8095aac3d4e5e9dfc9b49f8a75604a3b51667b90abbccfe2ebe1cdb9a88e79644f394c61768ca5b6cae2eae3d1c1a8937e68533e29130000000000000d1d314455607382949faab5c1c4b7b3ab9f9b9692908e8e8e8f909295989c9fabadb4bab3afa097816c57422c17020000000000000000000000000000000000081d3144556f849aafc4d9effffeead8c8b49f8b78624d3b2b18050000000000000000000000000000000000000000000014293f54697e94a9bed3e9e7d2bda8927d68533d281300000000000010253b50657a90a5c8d9ebebd6c1ab96816c56412c170100000000000000000000000000000000000000000b20354b60758a9fb4c9dff4fff7dfcab7a5907b65503a291704000010253a50657a8fa5c6d6e9fcfff2dfcab59f8c78634d3828150200000000000000000000000000000000000011273c51667c91a6bbd1e7d5c5a38d78634e38230e1628394d637989979b9c9c99918272604a3b2a18162c41566b8196abc0d6ddc8b39e88735645321e0900000000000000000114263746586278899ea9bacebcb49f8b7b655a493a29191f33475871869bb0c2c9b5a39b8782838b9ea7b8bdb49f8a78624d3c2c1906000000000000000009192c3c4e606e8399a6b7cbe0ebe1cdbaa99a846f5f4d3a2a18040b20354b6074889db3c9d9ebdecab6a4907b66503d2d1a0000000000000000162b41566b8096abc7d7e9efdfcab59f8a75604b3c51677c91a6c2d3e6f0e3cfbcab8f7a654f3a4d62778ca8b9cde1f0e7d5c5a9947e69543f291400000000000d1d30414b60738398a0b4bbc7bab4a69d948c86817d7a797879797b7d7f83878b91989fa9b4baaa917c66513c27110000000000000000000000000000000000000b20354b6075899eb4c9def3fdf7f4e2cebaa997816c594834200d0000000000000000000000000000000000000000000011273c51667c91a6bbd1e6ead5c0aa95806b55402b160000000000000d23384d62788daabbcee2eed9c3ae99846e59442f190000000000000000000000000000000000000000000e23384e63788da9bacee2f6fff9e6d4c3ad98836d5847331f0a000013283d53687d92a8bdd2e7fffff8e3cfbcab96806b5645321d090000000000000000000000000000000000000f24394f64798ea4c6d6e9d0baa5907b65503b26101e3245576d8298a7b1b2b1aea0937e695947341f14293e54697e93a9bed3e0cbb8a68b76604b36210b0000000000000000000919293a495a657b8b9fb4bccebaa99e8978625846372621374c61778b9fb5cac5b09b85756c6e79899eb3c6baa997826d5a4935200c0000000000000000000e1e31424c6176889db3bdcee0e9d7c7b3a2927d675847331f11192c3c51677c91a6b7cbe7e8d5c5b19c8673604a35200f000000000000000013283e53687e93a9bacdd9dbd2c3b29d87725544394e64798ea4b6c8d6dbd5c6b59f8b77624c374b6075899eb4c5d4dbd7cbb8a6917c66513c26110000000005182b3b4d5f6c8196a1b2bec3b7a99f95887f77716c68656463636466686a6e72767c838a959fa99f8b76614c36210c0000000000000000000000000000000000000f253a4f647a8fa8b9cde1f6eae2dfe2d8c7b49f8a77624d3b2a18050000000000000000000000000000000000000000000f24394f64798ea4c6d6e9edd7c2ad98826d58432d180000000000000b20354b60758a9fb4cadff0dbc6b19b86715c3a291704000000000000000000000000000000000000000011273c51667c91a6c7d8eafdfffff1dfc9b49f8a76614c3721100001162b41566b8096abc0d5ebffffffecdac9b39e8875604b36200f0000000000000000000000000000000000000c21374c61778ca8b9cde1d2bda8927d68533d281321364b6075899eb4c5c7c6beb49e8977624c3e2d18263c51667b91a6bbd0e7d5c4a38d78634e38230e000000000000000000000b1b2c3c4b5d687d929eb0bfc7b8a79c867661554431263b51667b90abbccfbca7927d67575b677d92a8b9c7b49f8b78624d38230d00000000000000000000131f334758667c909fb1c2d3e5e5d0c0b39e8877614c3f2f1a2035495a6f849aafc4d5e7e0ccb8a7937e685443301c0700000000000000000d22374c62778a9fb4bbc8c6c1b5a595806b5537364a5c72869caab9c6c6c4b8a89a846f59473444556d8297a6b7c3c6c7bab39e8874604b36210b000000000b20344859677d929fb0bfc2b6a59d8b7f756a62595653504f4e4e4f505255585861676e77808a9190806b5746331e0a000000000000000000000000000000000001142637546a7f94a9c6d7e9e6d8cec9ced8cdbaa996816c5947341f0c0000000000000000000000000000000000000000000c21374c61778ca8b9cde1efdac5b09a85705b372715020000000000081d31445572889db2c7ddf2dec9b39e89745846331f0a0000000000000000000000000000000000000000152a3f556a7f94aabfd4e9fffaf4f2e2cdbaa9937e69533e2d1b0700132536596e8399aec3d8eef5f3f5f7e0ccb8a7927d67523d2d1a0700000000000000000000000000000000000a1f33475874899eb4c9ded5bfaa95806a55402b16293952677c91a8b9cddcdcccb9a897826d5c4a362524394e64798ea3c6d6e8d0bba5907b66503b261100000000000000000000000e1e2e3f4e5f6b8095a1b2c1c5b6a4998373604b42313d53687d92a8c9dab8a38e79634e4b6075899eb3c9bbaa957f6a553626140100000000000000000004182a3a4c5e6c8196a4b6c7d8eae0ccb8a798826d5d4b382827374d62788c9fb5cadfead8c7b39e8875604b3625130000000000000000000b1f344859697f949faab0b0aea39b8776614c362d3d50657b8c9ea8afb0afa69d8a79634e3b2a374d6278889da5aeb0afa99f927d675645321e09000000071a2d3e4d6277899eb3bdc5b6a49c877a6a60564d483b3d3b3939393a3b3d403a474c5258616b767c7b6b6251392917030000000000000000000000000000000000081d3144556f8499afc4d9e6d8c8bbb4bbc8d7c7b49f8a77624c3a2a180400000000000000000000000000000000000000000a1f33475874899eb4c9def2ddc7b29d88725544311d080000000000011527375b70859ab0c5daefe0ccb9a78b76614c36210c0000000000000000000000000000000000000000132536586d8398adc2d8edf2e7e0dde0d7c7b19b86715c4a36220a071c30435471869cb1c6dce8e0dee0e8e7d5c5b09a85705b4a36210b000000000000000000000000000000000004172a3a5c71879cb1c6dcd7c2ad97826d58422d1e3246576e8398aec6d7e9e8d6c6b59f8d7a6454433021374c61768ca8b9cce1d2bda8937d68533e2813000000000000000000000000112131414a60728399a3b5c4c2b3a196816c604e403f54697e94a9becdb7a28d78624d44556f8499aec4c8b09b85705443301c08000000000000000000000c1c2f404b6075869ca9bacee2e7d5c5b2a0907b655645323144556b8095abbccfe3e2cebaa995806b564532180800000000000000000005182a3b4f616a7f8c969a9b989285786258463323374b5d667c89949a9b9993887b655b4a3620344859647a8793999b9a958a7e685f4d382816030000000d21364a5c6d8298a7b9ccb8a79c8678645c4b4538342b2e272423242426282a2a33373a474c586167665e5144341b0b0000000000000000000000000000000000000b20354b6074899eb3c9ded8c8bbaa9faabbcecdbaa996806b5947341f0c000000000000000000000000000000000000000004172a3a5c71879cb1c6dcf1dfcab49f8a75604b36200b000000000000182d43586d8298adc2d7ede8d6c5a38e79644e39240f00000000000000000000000000000000000000071c30435471869bb1c6dbf0e2d5cbc8cbd5c9b5a38e79644f3828160b20354a6074899fb4c9ded6ccc9ccd6e3ddc8b4a28e79634e3928160300000000000000000000000000000000001a2f44596f8499aec4d9dac4af9a856f5a453021364b61768a9fb4c9def4f4e3cfbcab9b8572604a392933475874899eb4c9ded5c0ab95806b56402b1601000000000000000000000003131c3043546075859ba6b7c6bfb19f937e695e4c3d53687d93a8bdcdb8a38d78634e37566b8196abc0c9b49f8a75604b35200b0000000000000000000000111e324556647a8b9fb4c0d1e3e3cebeb29c8774604b3d364b6074889db3c9daecdfc9b49f8b77624c38281600000000000000000000000d1d324350616a79818586837c73625a483a291c2f3f4d5e66777f8486847e75655d4b3d2d1a2b3b4a5c64747e848685807868604e41301a0a00000004182a3b4e64798c9fb5c5bfb39e897863594a3e46494947433c3633291d2832363f46494a493a474c51514c40342616000000000000000000000000000000000000000f24394f64798ea8b9cce1cebbaa9f8a9fb4c9d7c7b49f8a77614c3a2a170400000000000000000000000000000000000000001a2f44596f8499aec4d9eee3cfbcab8d78624d38230d000000000000152b40556a8095aabfd5eae6d0bba6917b66513c2611000000000000000000000000000000000000000b20354a6074899fb4c9dee7d5c4b7b3b7c4d2c1ac97816c5645321e0d22384d62778da9bacdd6c5b9b3b9c5d6e4d1c0ac96816c5746321e090000000000000000000000000000000002172c41576c8196acc1d6dcc7b29c87725d3b2a293952677c92a9bacde1ece3dfdac9b4a3927d675746322a3a5c71879cb1c6dcd8c2ad98836d58432e18000000000000000000000000000013253645576277889da8bac9bdb49f8c7c665b4951667c91a6c6d7b9a48e79644f3f54697f94a9becdbaa98c77624d37220d0000000000000000000000031628384a5c6a7f94a2b4c5d6e8dfcab6a595806b5b4a3c51677c91a6b8cbe7e3d1c0ad98826d5948341a0a00000000000000000000000015253343505b636b70716e676055483c2b1b112130404d59616a6f716f6961574b3f2e1f0f1d2d3e4a5660686e716f6a62594e42312313000000000b1f3447596d8298abbcc7b3a1917c675a494d565c5e5e5c58524b46393139464b545b5e5f5e5b564f4a3e382f1e160a0000000000000000000000000000000000000013253654697e94a9c6d6dfc9b49f8b8297acc2d3cdbaa895806b5847331f0c0000000000000000000000000000000000000002172c41576c8196acc1d6ebebd9c9a5907a65503b251000000000000013283d53687d92a8bdd2e7e8d3bea9937e69543e2914000000000000000000000000000000000000000d23384d62788da8bacde1e0cbb7a69da6b7c3c9b39e8975604b362110263b50657b90a5c7d7ccb9a79ea7b9cce0dec9b39e8975614b3621100000000000000000000000000000000000142a3f54697f94a9bed4dec9b49f89745947343346576e8399aec7d7e7dacfcacfd1c1b39d8875614b3c2c44596f8499aec4d9dac5b09b85705b3828150200000000000000000000000000081828394859647a8a9fabbccebbaa9e897963584f647a8fa8b9cdbba6917c66513e53697e93a8bed7c7a38e78634e39230e0000000000000000000000000a1a2d3e4b6073849aa7b9cce0e6d3c3b49f8b796354495a6f849aafc4d5e7dcc8b4a28e79644e3b2b1800000000000000000000000000071525333d494e565b5b59524b44372b1e0e031222303a474c555a5b5a544b46392e2111010f202d38454b53595b5a554d483b31241405000000000c22374c61778a9fb4c9c0ae99846f5f4d5a626b717373716e6761574b444757616970737473706b645c504b3f32281b0d0000000000000000000000000000000000071c3043546e8499aec3d9dcc6b19c867a8fa4b6cad7c6b49e8a76614c3a29170400000000000000000000000000000000000000142a3f54697f94a9bed4e9e7d2bda8927d68533d281300000000000010253b50657a90a5c8d9ebebd6c0ab96816b56412c160100000000000000000000000000000000000011263b51667b90a6c6d7e9ddc8b39d889da5b7cab9a7927d67523c2c19293e53687e93a8bdd3c9b39e899eb3c2d3e1ccb9a8927d68533e2d1b070000000000000000000000000000000012273c51677c91a6bcd1e1cdbaa98c77614c37364c61768a9fb4c9dfd4c9bcb5bcc9cbb7a695806b5a493542576c8197acc1d6ddc8b39d88735645321d0900000000000000000000000000000a1b2b3b4a5c667c8d9fb5bec8b9a79d877661566075899eb4c9bfaa957f6a553e54697e93a9bed6c5a38d78634e38230e00000000000000000000000000101c3043546278899eb3becfe1e2cebbaa9b8573604d63788c9fb5cadfe6d3c3af9a84705c4a361d0d000000000000000000000000000007151f2c3539414546433d353126190e000004121c2a34373f4546443e3632291b110300010f1a2832363e4446454037342b1d1406000000000215283853697e93a9bac8b4a28e79644e5f67788086898886837c766a60555861757f85888a8885807a70655d4b45392b1d0d000000000000000000000000000000000b20354a6074899eb3c8ded8c3ae998372869cb1c7d7cdb9a895806b5846331f0b0000000000000000000000000000000000000012273c51677c91a6bcd1e6ead5bfaa95806a55402b150101010101010d23384d62788daabbcee2eed8c3ae99836e59442e1900000000000000000000000000000000000000142a3f54697f94a9bed4e9d7c2ad9882879db2c7c5af9a85705a4935202c41566b8196abc0d6c1ab968196a4b6caded6c6b09b86715c4a36220c000000000000000000000000000000000f243a4f64798fa4c6d7e9d7c7a48e79644f393a52677d92a9bacdd4c3b7ab9fabbccfc4b49f8b78634d403f546a7f94a9bfd4dfcab59f8a75604b36200b0000000000000000000000000000000d1d2d3e4d5e6a7f94a0b2c0c5b6a59a847460566f8499afc3c5b09b85705c4a556b8095aac0ccb9a78c76614c37210c0000000000000000000000000001142636485a677d92a0b2c3d4e7d8c8b4a3937e69596b8096abbccfe3dfcab6a5917c66513e2d1b00000000000000000000000000000000010f1a21232c30312e27201d140900000000000c181f222a2f312f29211e160b00000000000a161e21282f31302b2220190d000000000000091d3245566f849aafc7c9b09a85705c5e677d8a959b9e9e9c9891897f7362617685949b9e9f9e9a968f857b6d6057483b2b1d0d0000000000000000000000000000000f24394e64798ea7b8cce0d5c0aa95806b7f94a9bacdd6c6b39e8976614c392917030000000000000000000000000000000000000f243a4f64798fa4c6d7e9edd7c2ad98826d58432d181616161616161620364b60758a9fb4cadff0dbc6b09b86715b39291703000000000000000000000000000000000002182d42576d8297acc2d7ebd6c0ab96808096abc1cab59f8c78634d37262637596f8499aec4d0bba6907c869cb1c7dcddc9b5a38f7a644f3a2917040000000000000000000000000000000c22374c61778ca8bacde1d1bba6917c66513c47586f8499aec7d7cab7a59d8b9fb5c9cebaa999836e5e4c3752677c92a7bcd1e3cfbcab8d78634d38230e000000000000000000000000000000001020304050616d8298a2b4c3c3b4a298826d61687d92a5b7c8b4a28f7a645c6070859ab0c5c9b39e8974604a35200b000000000000000000000000000008182b3c4d5f6d8298a5b7c9d9e6d1c1b39e89776275889eb3c9dae8d6c5b29c8773604b352010000000000000000000000000000000000000060c0e161b1c19120b080100000000000000040a0c151a1c1a140c0a030000000000000002090b13191c1a150d0b05000000000000000b20364b60758a9fb4c9bcab927d6856667c8d9ea8b1b3b3b1ada79e94857770849aa3b0b3b4b3b0aba39b9082756259483b2a1a0a000000000000000000000000000013253654697e93a9c5d6e6d4c3a6917c67778a9fb4c8d8ccb9a7957f6a5746331e0b0000000000000000000000000000000000000c22374c61778ca8bacde1efdac5af9a85705a37272c2c2c2c2c2c2c2c2c31445572889db2c7ddf2dec8b39e89735746331e0a000000000000000000000000000000000005182b3b5b70859bb0c5dae9d4bfaa947f798ea3b4c8bcab95806b55443131445572879cb1c7d5c4a38e7a8095abc3d4e4d2c1ac97826d5846331f0a0000000000000000000000000000000a1f34475974899fb4c9ded3bea9937e69543e4c61768a9fb4c9ddc7b29d878298abbccfc7b3a1907b6655444f647a8fa4c8d8eadac9a5907b65503b26100000000000000000000000000000000002122233434b6074849aa5b6c5c0b2a0947f6a6074879db2bfc0b29d877a72737e93a2b4c8c5ae99846e5443301c070000000000000000000000000000000e1e30414c6176879dabbccfe3e1ccb9a899836e7c91a6b8cbe7e0ccb9a7937e695443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8faabbcab59f8b77626074879dabb9c6c8c8c3c5b9b3a39b877d92a2b4c1c8bbb4b3b9b4b09f97857762594838281602000000000000000000000000071c3043546e8399aec3d8dfcab7a58d77626d8297aabbced6c5b39e8976614c3929160300000000000000000000000000000000000a1f34475974899fb4c9def2ddc7b29d887255444141414141414141414141375b70859ab0c5daefe0ccb8a78b76614b36210c00000000000000000000000000000000000b2034485974899eb3c9dee8d3bda8937e70859bb0c6c9b29d8874604b35354b60758a9fb4c9cbb7a68b76798ea5b6cadfdec9b49f8a76614c36211100000000000000000000000000000004182a3a5c71879cb1c6dcd6c0ab96816b563a53687d92aabbced7c7ad9782798c9fb5c6d0bfb19c8674604b4d62778caabbcee2d2bda8927d68533d2813000000000000000000000000000000000004151d3145566176879da7b9c8beb59f8d7c66687e93a1b3c3b6a59d8e8888939caec0cbb8a6927d68533625130000000000000000000000000000000000131f334658657b8c9fb4c1d2e5d6c6b2a1917c849aafc5d5e7d8c8b39e8975614b36261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0c0c0c0c0c0c0c0c0b07000000000000000013293e53687e93a8c8c7b29c877259677c91a5b7c9cfbfb3aea4a6adb2a59d929cadc0c1b4aa9f9ea7afb4b1a39b8677625645321e0f0000000000000000000000000b20354a6074889eb3c8ddddc7b29d87725a63788b9fb4cadfccb8a7947f6a5746321e0a000000000000000000000000000000000004182a3a5c71879cb1c6dcf1dfcab49f8a756056565656565656565656565656586d8298adc2d7ede8d5c5a38e79634e39240e00000000000000000000000000000000000d22374d62778ca7b9cce0e6d1bca6917c687d92a8b9cbb7a6907b66513b384d63788daabbcec8b39d887372879db2c7dce1cdbaa8937e69543f2e1c080000000000000000000000000000001a2f445a6f8499afc4d9d8c3ae98836e5947586f8499afc8d8cdbaa9917c6d8297a8b9cdcab6a4947e69594b60758a9fb4c9dfd5c0aa95806b55402b160000000000000000000000000000000000000215273847586379899eaabbcebcab9f8a7a64728399a5b5c1b6b2a59d9ea6aebacebdb39e8875604b36210b00000000000000000000000000000000000417293a4b5d6b8096a3b5c7d7e4cfbfb39e899aa2b4c8e3e2cebbaa96806b5746321808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f11131c20212121212121212121201c1308000000000000162c41566b8196abc0c3ad98836e586d8298adc3d4c6b3a1998f9198a0aeb2a7adbac8b4a39b8b898e9aa2b4b5a49b8574604b3e2d180800000000000000000000000e23394e63798ea6b8cbe0d8c3ad98836e585a6d8298adc1d2d6c5b39e8975614b3928160300000000000000000000000000000000001a2f445a6f8499afc4d9eee2cebbaa8d786b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b8095aac0d5eae5d0bba6907b66513b2611000000000000000000000000000000000010253b50657b90a5c5d6e8e9d7c7a48f7a6476899eb4c9c4ae99836e59473b50667b90a5c8d8c5b09a85706b8095aac1d2e4d7c6b19c86715d4b37230c000000000000000000000000000002172c42576c8197acc1d6dbc5b09b86705b4c61778b9fb4cadec9b49f8a7662778a9eb4c3d3c2b39e8977614c5472879db2c7dcd7c2ad98826d58432d180000000000000000000000000000000000040a0c1a2a3a495b667c8c9fb4bdc9baa89d88776276879ba3b4bbc3b7b2b3b8c5c8bbb49f927d675645321e090000000000000000000000000000000000000b1b2e3f4b6074859ba9bacde1e0ccb8a79ea7b4c0d1e3dfcab49f8b78624d392816000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003121d242625303536363636363636363635302518080000000000192e43596e8398aec3c0ab95806b5c71869bb1c6cdb9a899837a7b82949daebfc0cac5b09b85767479849aa3b4b5a395806b5c4a362513000000000000000000000013293e53687e93a8c5d5e7d4bea9947f69544f647a8fa3b5c9ddccb8a7947f695745321e0a0000000000000000000000000000000002172c42576c8197acc1d6ecebd9c8ad988281818181818181818181818181818181849aafc4daefe8d3bea8937e69533e2914000000000000000000000000000000000014293e53697e93a8bed3e8e1cdbaa98c77626d8297adc3cab49f8b77624c3e54697e93a9bed3c2ad97826d63788da3b5c9dddec9b6a48f7a65503a2a18040000000000000000000000000000152a3f546a7f94a9bfd4ddc8b39d88735653687d93aabbced7c7ae99836e596a7f94a5b6caccb9a797826d5c5a70859aafc5dadac5b09a85705b372715020000000000000000000000000000070c171f2126292c3d4c5e697e939fb1bfc6b7a69b8575627785969faab2b7c3bcc6b9b4aa9f95816c5f4d3828160200000000000000000000000000000000000000111d31455663798a9fb4bfd0e3d6c5b8b3b8c5d1dee4d1c0ad98836e5a48341b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2f383b36434a4b4b4b4b4b4b4b4b4b4a4336251300000000001b30455a70859aafc5bda8937e685d73889db2c8c9b49e897565666d7f94a1b3c9dabca7927d675b6374859ba8b9b49f8c7a645443301c07000000000000000000061a2c3d586e8398adc3d8e7d4c4a5907b65504b5c70859bb0c5d5d5c5b39e8875604b3828160200000000000000000000000000000000152a3f546a7f94a9bfd4e9f6dac6b2a098969696969696969696969696969696969aa2b4c7dcf1ebd5c0ab96806b56412b160100000000000000000000000000000002172c42576c8197acc1d6ecdec9b49f897459657a8fa4b6cabbaa947f69543f576c8196acc1d4bfa9947f6a5b70859bb0c8d8e5d3c2ad98836e5947341f08000000000000000000000000000012273c52677c91a7bcd1dfcab59f8a7560596f849aafc8d8cdbaa9927c67526074879cb2bfd0c5b49f8c7a64586d8298adc2d7ddc8b29d88735544311d0800000000000000000000000002101b222933373c3e3f3d404e606c8196a1b3c2c4b5a39983726275818b969da5a5a7a6a89e988c806c635241301a0a000000000000000000000000000000000000000002152738495b697e93a1b3c5d5e3d6ccc8ccd6e3eeddc8b4a28f7a644f3c2b19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832404c51595460616161616161616161605443301c07000000001b31465b70869bb0c5bca7927c675e73889eb3c8c5b09b86705751616e8399abbccfbca7917c67525662778a9eb4bbaa9b8572604a35200e0000000000000000000c2135495b73889db3c8dddfcbb7a68c77614c3e52677d92a6b8cbe0cbb8a6947e695645321e0a0000000000000000000000000000000012273c52677c91a7bcd1e6f5e1cfbeb2adababababababababababababababababafb4c0d0e3f7edd8c3ae98836e59432e190000000000000000000000000000000004172a3a5a70859aafc5daefdcc6b19c87715c5d72879cb2c8c8b19c86725d4b5a6f8499afc4d1bca6917c6753697e93aabbcee2dfc9b49f8a77614c36251300000000000000000000000000000f243a4f64798fa4c7d7e3cfbcab8d786361778b9fb4cadec9b49f8a76614b56667c91a1b3c8cfbcab9b85705f6a8095aabfd5dfcab49f8a75604b36200b00000000000000000000000715202d363a474c515354524f4b4b60738399a4b6c5c1b2a195806b616b7981878d9092918f8983796a615245342313000000000000000000000000000000000000000000000a1a2c3d4f606f8399a7b8cce0e8e0dee0e8f3e6d4c3b09b85705c4a361d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182838454b5e666e737576767676767676767572604a35200b000000001c31475c71869cb1c6bca6917c675d72879cb2c7c5af9a85705a434e63798c9fb5cabea9947f695448596a8095a9bab5a3907b65503c2b190500000000000000000e23384e63788da6b7cbe0ddc8b29d88735947364b6075889eb3c8d9d5c4b39d8875604b382815020000000000000000000000000000000f243a4f64798fa4c7d7e9fcecdccfc6c2c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c4c7d0deeefff0dbc5b09b86705b392816030000000000000000000000000000000a1f33475873889eb3c8ddeed9c4ae99846f59556a7f94aabbcab6a48f7a644f5672879db2c7d5c4a38e79644e61778b9fb4c9dfe2cebaa9947f6a5443301c07000000000000000000000000000d22374c62778ca9bacde1dac9a5907a65687e93aabbced7c7ae99836e57464c5e6f849aaabbcec9b4a2927d67687d92a8bdd2e3cfbcab8d78624d38230d00000000000000000000081625333e4a4e586166686967656055556176869ca7b8c7bfb09e927d685d636c72787a7c7c7a756e635b50433427170500000000000000000000000000000000000000000000000f1f32424c6277889eb3c8ddf3f5f3f5fbf4dfcab7a5917c67513e2e1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364556606e7c83888a8b8b8b8b8b8b8b8b8475604b35200b000000001b30465b70859bb0c5bca6917c675a70859aafc5c6b19c87715544495b70859aafc7c3ae99836e55444c61768a9fb4c1ae99836e5a4835200b000000000000000013283e53687d93a8c4d5e7d9c4ae99846f593a3245566b8095aabbcee0cbb7a6937e695645321d090000000000000000000000000000000d22374c62778ca9bacde1f6faece0d2c9c6c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c8cbd4e2f2f3ddc8b39e88735745321e090000000000000000000000000000000c21374c61778ca6b8cbe0ebd6c1ac96816c574d62778b9fb4cac2ad97826d5760758a9fb4cacbb7a68b76614b586e8399aec5d5e8d8c7b29d8773604a35200d000000000000000000000000000b1f34485974899fb4c9ded2bda7927d6870859aafc8d9cdbaa9927c675239404e63798b9fb4c5d1c0b29d8875657b90a5c9daebd9c9a5907a65503b25100000000000000000000316263343505c646f767b7e7f7d7a756d635b6278899ea9bacebcb49f8b7b655a565b636567676460564e493d3325170900000000000000000000000000000000000000000000000001141f344859687d92a7bdd2e7fcfffffff2ddc7b29d8774604b352012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c30435460748390989d9faaa0a0a0a0a09e8977625443301c08000000001a2f445a6f8499afc4bca7927d67566c8196abc8c9b49e8975604b3d53687d92a9bac9b39e8974604b47586e8398aec3b49f8b78624d38220d0000000000000006192c3c586d8298adc2d8ead5c0aa95806b554028384d62788b9fb4cadfd5c4b29d8875604b3727150200000000000000000000000000000b1f34485974899fb4c9def4f8e5d2c2b5b1b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b2b7c4d4e6f5e0cbb8a68b76604b36210b00000000000000000000000000000010253a4f657a8fa4c4d5e7e9d3bea9947e695448596f8499afc5c9b49e89766163788daabbcec8b39d8873574651667c91a7b8cce0dfcab6a5907b66503b2b190500000000000000000000000005182a3b5c72879cb1c7dcd4bfaa957f6a778b9fb4cadec9b49f8a76614b3635495b6c8196a6b8cbcbb7a695806b788dabbccfe3d2bda7927d68523d28130000000000000000001122334451616a7a848a919394928f8982796c61657b8b9fb4bccebaa99e89786258494e5052514f4b4538362c1f150700000000000000000000000000000000000000000000000000000a1f3347586c8196acc1d6ebfcf5f3f5f1dbc6b19c8675604b402f1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192c3d4a60728399a1aeb2b4bbb6b6c1b09e907c6659483626140100000000192e43586e8398adc3bda8937e6853677c91aabbcdb9a88f7a654f3a4c61768a9fb4c9b9a7907b65503a52677c91a7c3bbaa947f6a54372715020000000000000c2035495a73889db2c8dde8d6c6a6917c67513c2734485a6e8399aec2d2dfcbb7a6937e685544311d09000000000000000000000000000005182a3b5c72879cb1c7dcf1f2dec9b5a39b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9da6b7cbdff4e7d5c5a38e78634e39230e00000000000000000000000000000013283e53687d93a8bdd2e8e6d1bba6917c66513b52677c91a7b8ccb9a8927d68667b91a6c8d9c5b09a85705b394b6075899eb3c8dee6d4c3ae99836e5948342009000000000000000000000000001a2f455a6f849aafc4d9d7c2ac97826d7e93abbccfd7c7ae99836e5746332c3d4c6176889eb3c1d2c4b49f8b78758b9fb5cadfd5bfaa95806a55402b150000000000000000091c2f4051626b7f8c999faaa8a9a7a79e978b817562677d929eb0bfc7b8a79c86766155443b3d3c3a363228211a0f010000000000000000000000000000000000000000000000000000031628394c61778a9fb4c9def4e9e1dee1e9dec9b5a496816c5e4c3b2b1808000000000000000000000000000000000000000000000000000000000000000002090b0f121415161514152737495b697e93a1b3bfc8caced6c6b5a396816c5e4c3b2b18080000000000172c42576c8197acc1c0ab95806b5661768a9fb4c9c6ab96816b584646576e8398adc4c5ad97826d57454c62778ca5b6c8af9a85705544311d080000000000000d23384d62788da6b7cbdfe1ccb9a88d78634d38232b3c50657b90a4b5c9ded4c4b29d8774604b3727150100000000000000000000000000001a2f455a6f849aafc4d9eff0dbc6b19b8586868686868686868686868686868685879db2c8ddf2e5d0bba5907b66503b2611000000000000000000000000000001172c41566c8196abc1d6ebe8d5c5a38e79644e394b6075899eb3c8c6b09b8570697e94a9bed3c2ad97826d584245566c8197acc2d3e5dfcab49f8b78624d37271501000000000000000000000002172d42576c8297acc1d7d9c4af998470859ab0c9d9cdbaa9927c675239291f334658687e93a3b5c9cdbaa9998372889db2c7ddd7c2ad97826d58422d1800000000000000000f23384c5e6b80959fabb4bbc8bec5b8b3aa9f968577626b8095a0b2c1c5b6a49a8373604b42312725211e160a0600000000000000000000000000000000000000000000000000000000091e3246576a8095a8bacde1e4d6cdc9cdd6e4d2c2b09e907c6659483626140100000000000000000000000000000000000000000000000000000000040a0c151d202427292a2b2a292831445563798a9fb4bfd0dddfe1cdb9a89b8574604b402f1d0d00000000000014293e53697e93a8c9c2ad98836d58586f8499aec1c9b49e8976614c3e51667b90a6b8c9b49e8975604b485972879db2c7b49f8a75604b36200b00000000000013283d52687d92a7c4d4e6dec9b39e8974604a352023374b5d71869cb1c5d6dfcab7a5937d685544311d090000000000000000000000000002172d42576c8297acc1d7ece4cfb9a48f7a707070707070707070707070707070707e93a8bdd3e8e8d3bda8937e68533e29130000000000000000000000000000031629395a6f849aafc4d9efe0ccb8a78b76614c3645566c8196acc2c8b4a38e796c8297acc1d4bfa9947f6a543f384f647a8fa4b6cadee2cebbaa95806a5544311d08000000000000000000000000152a3f546a7f94a9bfd4dbc6b09b86788c9fb5cadec9b49f8a76614b362117293a4b6073859bb1becfc7b3a1907b8499afc4d9dac5af9a85705a37261401000000000000081c2f3f50667b8d9fb4bcc9c2b5b1afb3b9bbb4a39b877762728298a3b5c4c2b3a196816c604e402f1f0f09020000000000000000000000000000000000000000000000000000000000011527374b6175899eb3c6d7e9d6c6b9b4b9c6d1decdbdb39e8977625443301c100000000000000000000000000000000000000000000000000000060c171f21273136393c3e4040403f3d3e4b6073859ba9bacdddede1cfbeb49e8a796356453122120000000000000010253a4f657a8fabbcc6b19b86715650657b90a3b5c9b9a896806b5c4b4b6074889eb3c8b9a8927d67523b5a6f8499afc4baa98e79644e39240f000000000005192b3c586d8297adc2d7ecdac5b09a85705443301c1c2e3f53687e93a7b9cce0d4c3b29d8774604b3726140100000000000000000000000000152a3f546a7f94a9bfd4e9e7d1bca7927c675b5b5b5b5b5b5b5b5b5b5b5b5b5b667b90a6bbd0e5ead5c0ab95806b56402b1601000000000000000000000000000a1e32465772889db2c7ddf2dec8b39e8973574633384f64798ea4b5c9c1ab96816f859aafc4d1bca6917c67513c374b5c72879cb1c9daebd9c8b29d8874604b35200e00000000000000000000000012273d52677c92a7bcd1dcc7b29c877e94abbccfd7c7ae99836e5746331e0c1c304354657a8fa0b2c6cfbfb19c868096abc0d5ddc7b29d88725544311d080000000000000e23374b5d71869cabbccfbbaea49c9a9ea7b3bfb5a59b84746075859ba6b7c6bfb19f937e695e4c3d2c1c0c000000000000000000000000000000000000000000000000000000000000081d314455697e93a7b8cce4e1cdb9a89ea8b4c0d1e0ccb8a79a8472604b3f2e1c0c0000000000000000000000000000000000000000000000020e19202a333738454b4e515455555554524f5c6a8095a3b5c7d7e9e5d3c3b2a0927d675b4938271504000000000000000c21364b61768b9fb5c9b49f8a75604b5d70859babbcc6b49f8c7a645b4b556c8196abc2c6af9a846f5948576c8196acc1c7a6917c67513c271200000000000b2034485a72879db2c7dcebd6c1ab96816c563625131121364b6175899eb3c9dadfcab6a5927d685544311d080000000000000000000000000012273d52677c92a7bcd1e7e9d4bfa9947f6a544646464646464646464646464e63788ea3c5d5e7edd8c3ad98836e58432e1900000000000000000000000000000c21364b61768ba5b7cbdff0dbc6b09b86715b3929364a5c71869cb1c7c8b39e8875889db2c8d5c4a38e79644e392e3e556a7f95abbccfe3dfcbb7a6917c66513c2c190600000000000000000000000f253a4f647a8fa4c7d7ddc8b39e88859bb0c9dacdbaa9927c6752392917031426364b5d6e8398a8bacdcab6a49a859aafc5dadfcab49f8a75604b35200b00000000000010253b50657b90a4b5c9c3ae9c9386848999a1b3c3b4a295806a6277889da8bac9bdb49f8c7c665b493a2a1a0a00000000000000000000000000000000000000000000000000000000001325364b6074879db2c5d5e8d6c5b49e899aa2b4c8d8d5c5b4a2947f6a5d4b3a2917040000000000000000000000000000000000000000000a151d2b353a474c5356606467696a6b6a696764647a8c9fb4c1d2e5ead8c7b6a498826d5f4d3c2c1a0a00000000000000000a1e32465772879cb1c7bbaa8f7a65504f647a8c9fb4c0bbaa9e8879655d4f64798ea4b6cab49f8b77624d546a7f94a9bfbea9947e69543f291400000000000d22384d62778da5b6cadfead8c8a7927d68523d2813091e3246576c8196abbccfe3d4c3b29c8773604b362614010000000000000000000000000f253a4f647a8fa4c7d7eaecd7c1ac97826c574231313131313131313131364b61768ba7b8cce0f0dac5b09b85705b38281502000000000000000000000000000f243a4f64798fa4c3d4e6edd8c3ae98836e59432e2d3e54697e93a9baccb8a7927d92a6b7cbcbb7a68b76614b3622384d62788c9fb5cadfe7d4c4af9a846f5a4935200a00000000000000000000000d22374d62778ca9bacddfcab49f8c9ba3b4c8dec9b49f8a76614b36210c0008182e3f4d62788a9fb4c3d3c2b59f8a9fb5cadfe2cebbaa8d77624d38220d000000000001162b41566b8096abc2cab7a5937e716f758399a6b7c0b49e8a7762647a8a9fabbccebbaa9e897963584738271502000000000000000000000000000000000000000000000000000000071c304354677d92a5b7cae3e0ccb9a7937e849aaabbcee2d1c0b49f8c7a645846331f1401000000000000000000000000000000000000000e1a28323c484d5861696f75797c7e7f807f7e7d7a78869caabbcedfefe2cebaa99c8675614b41301e0e00000000000000000003162939566b8096abc4c8ab95806b564a5c6b8196a2b4c2b8a69d887b6c635c71869cb1c6bcab947f695453697e93a8bebfaa95806a55402b15000000000012283d52677d92a7c3d4e6e2cebbaa8e79644e39240f031628394d63788c9fb5cadfdecab6a4927d675443301c080000000000000000000000000d22374d62778ca9bacde2eed9c4af99846f5a442f1b1b1b1b1b1b1b1b1e32465773889eb3c8ddf2ddc8b39d88735645321d090000000000000000000000000013283d52687d92a7bdd2e7ebd5c0ab96806b56412b22374c61778a9fb4c9c5b19c879cb1c4d4c8b39d88735746322035485a70859aafc7d7e9dfcab59f8c78634d38281502000000000000000000000b20354a60758a9fb4c9dfcebbaa9faab4c1d1d7c7ae99836e5746331e0a0000102034485a6a7f95a5b7cacfbcab9fabbccfe3ebd9c8a58f7a65503a25100000000000061b30465b70859bb0c5c7b29d877260576175889db3c8b9a896816b5c667c8d9fb5bec8b9a79d8776615645311d150400000000000000000000000000000000000000000000000000000b20354a6073869cb1c3d4e6dac9b39e8975798b9fb4c3d4e2cebbaa9d8776614c42311f0f000000000000000000000000000000000003111e2c38454b5a626d777e84898e919395959594928f8c9ca4b6c8d8eae2d0bfb49f8b7a64574632231300000000000000000000000f243a4f647a8fa6b7c6b19c86715c4b4b6074849aa4b5c2b7a69d8c817873717f94a9bfc9b19c86715c52687d92a7bdc0ab96806b56412b160000000005182b3b576d8297acc2d7ecdfc9b49f8a75604b36200b000b2035495a6f8499afc3d3e6d3c3b19c8673604b3625130000000000000000000000000b20354a60758a9fb4c9dff1dcc7b19c87725c3b2a18050606060606031628395b71869bb0c6dbf0dfcab59f8a75604b36200b00000000000000000000000001162b41566b8096abc0d5ebe8d3bda8937e68533e291f3347586e8399aec4cab6a49ca4b6cadac5b09a85705b3929192b3c53687d92a9bacde1e3cfbcab96806b5645321d0900000000000000000000071c30435472879cb2c7dcd9c8bbb4bbc8d1e1cdbaa9927c675239291703000005192b3c4b6075879db2c0d1c9bcb5bcc9daece7d2bca7927d67523d28120000000000081d33485d72889db2c7c3ae99836e5946576b8095aac0c6b39e8875605e6a7f94a0b1c0c5b6a59a8474604b4332221202000000000000000000000000000000000000000000000000081b2e3e51667b90a4b5c9e1e3cfbcab96816c6b8095a5b6cadfd8c8b7a598836e604e3d2c1a0a0000000000000000000000000000000311212e3c4956606b78828a939a9fa8a6a9aaaaaaa9a7a4a2b2b6c3d3e6e7d4c4b3a1947e695c4a3929160500000000000000000000000b20354a6073889db2c8b6a48f7a644f44556277869ba3b1bdb7ab9f978d8886889db3c8c9b5a48e796453687d93a8bdc0ab95806b56402b16000000000b2034485972879cb2c7dcf0dbc6b19b86715645311d090006192c3c51667b90a5b6cadfdecab6a4917c675443301c080000000000000000000000071c30435472879cb2c7dcf1dec9b49f89745947341f0b000000000000192e43596e8398aec3d8ede3cfbcab8d78634e38230e00000000000000000000000002162838596e8499aec3d9eeebd9c9a5907b66503b26182a3a51667b90a6b7cbc2b6b1b6c2d3d7c2ad97826d58422d1821364c61768a9fb4c9deecdac9b39e8875604b36200f00000000000000000000001325365a6f849aafc4d9e6d9cecaced9e6dec9b49f8a76614b36210c000000000d1e324556677c91a2b4c8d9cfcacfdae7f7ead4bfaa957f6a55402a1500000000000a1f34495f74899eb4c9c2ad97826d583950657a8fa5c8ccb8a78f7a654f616d8297a2b4c3c3b4a298826d614f403020100000000000000000000000000000000000000000000000000d22374b5c70859ab0c2d2e5dfcab59f8c78636075879db2bfcfe4d4c3b2a0937e685b4938281602000000000000000000000000000011212e3f4b5b6374808b979fa9afb4bac6bebfc0bfbebcb9b7c7cad3e1f1dfcbb7a6998372604a3e2d1b0b000000000000000000000000071c3043546b8096aabbc2ac97826d59484759627785979fb1b6bcb4aca79e9c9da6b7cbd2c2ab96816b556a7f94a9bfbfaa957f6a55402a15000000000d22374c62778ca4b6cadeecd7c2ad97826d583827150200000e20354a6073879cb2c6d7e5d3c2b19c8673604a3625130000000000000000000000001325365a6f849aafc4d9efe1cdbaa98c77624c37220d000000000001162c41566b8196abc0d6ebecdac9a5907b65503b2610000000000000000000000000091e32455672879cb2c7dcf1e3cfbcab8d78634e38230e20354b6074889db3c8d3cac7cad3e0d4bfa9947f6a543f2a151e3346576e8398adc4d5e7e0ccb8a7927d67523d2d1a0700000000000000000000182d42576d8297acc2d7ecebe2dfe2ebe9d7c7ae99836e5746331e0a00000000021628384d5f6f849aaabbcee2dfe3ecf7ffecd7c2ac97826d57422d180000000000091e33485e73889db3c8c2ad98826d58434c61778caabbcec5a9947e69544b6074849aa5b6c5c0b2a0947f6a5f4d3e2d1d0d00000000000000000000000000000000000000000000061a2c3d4f647a8fa2b4c8e0e6d4c3af9a846f5b56667c90a1b2c6d6e1cfbeb49f8a79635645321e12000000000000000000000000000e1e2e3f4b5d657986959faab4bac7c9cdd7d3d4d5d4d3d2cfccdcdee6f1f2ddc8b29d887761544330241406000000000000000000000000001325364d62778b9fb4c9b49f8a77624d3d4759617582919ca4b0b4c1b8b3b1b3b7c4cdc9c6b39d8874606b8096abc0bda8937e68533e29130000000012273c52677c91a7c3d3e6ecdac9a9937e69543e2914000000071c304354697e94a8b9cde1dec9b5a4917c675443301c070000000000000000000000182d42576d8297acc2d7ece9d7c7a48f79644f3a240f00000000000014293e53697e93a8bed3e8e8d2bda8937d68533e28130000000000000000000000000b21364b60768a9fb4cadff4dfcab49f8a75604b36200b1d3144556b8096abc1d1dedcdee5e6d1bca6917c67513c271217293950667b90a6b7cbe0e7d5c5b09a85705b4a36210b00000000000000000000152a3f556a7f94aabfd4e9fef7f4f7f6e1cdbaa9927c67523929170300000000000a1a30414e63798c9fb4c5d5e8f8ffffffefdac4af9a856f5a3626140100000000071c32475c71879cb1c6c3ae99836e59364759758a9fb4cac1ac96816c5745566176879da7b9c8beb59f8d7d675c4a3b2b1b0a0000000000000000000000000000000000000000000c2135495b6e8399aec0d1e3dfcab7a5917c66514c5e6e8399a8b9cde1e1cdbaa99c8674604b40301d0d00000000000000000000000a1a2c3c4b5d657b899ca4b4bbc8ced8dedfddd6d0cdcbcccdd1d6dddfe6f2f2ddc7b29d8779675f4f423224140500000000000000000000000008203448596d8297abbcbaa996816c5b4a3a4757606d7c86929ba3a9adb2b4bac7c6b9b4b1ada6907b666e8399aec3c3a5907b66503b261100000004182a3a576c8197acc1d6ece3cfbcab8f7a65503a2510000000001325364c61768a9eb4c9dee5d2c2b19b8673604a3520120000000000000000000000152a3f556a7f94aabfd4e9e6d1bca7917c67523c271200000000000011263c51667b91a6bbd0e6ead5c0aa95806b55402b160000000000000000000000000f24394e64798eabbccfe3f2ddc8b29d88735645311d091426374e63798da3b4c8ddf1f3f9e7d5c4a38e79644e39240f0b20354b6074889db3c8ddf0ddc8b4a28e79634e3928160300000000000000000012283d52677d92a7bcd2e7fffffffff4dec9b49f8a76614b36210c000000000000001221364a5b6c8197a7b8cce0f0fffffff1dcc7b29c87725443301c0800000000051a30455a6f849aafc4c5b09b867054433b5f74899eb4c9c2ad98836d583847586379899eaabbcebcab9f8a7a645948392818080000000000000000000000000000000000000005192b3b4e63798c9fb5cadfead7c7b29d8774604b404d62788a9eb4c2d2e7d7c7b5a497816c5e4d3c2b190900000000000000000002152738495b657b8a9ea7b5c2ced8e2e1d4cac7c0bab8b6b6b8bcc1c8cbd4dfe6dfcab7a59d8a7d69604f4231231201000000000000000000000005182b3b4e63798c9fb5c5b49f8c7963544339454b5e66747d858d93989c9fa9a1a1a89e9b98928b7e6874889eb3c8b7a58d77624d38220d0000000a1f34475971879cb1c6dcf1dfcab59f8b76614c36210c00000000081f3346586c8197acc0d1e3dec9b5a3917c6651402f1c090000000000000000000012283d52677d92a7bcd2e7e9d4bea9947f69543f2a140000000000000e24394e63798ea3c5d6e8edd8c2ad98836d58432e1800000000000000000000000012273c52677c91a7c9d9ebefdac5b09a85705b38271502092135495b70859bb0c6d7e9fcf4e0cbb7a68b76614b36210c081d3144556b8196abc2d2e5e4d1c0ac96816c5746321e0900000000000000000010253a4f657a8fa4c8d8eafdfffffde9d7c7ae99836e5746331e0a00000000000000071a2d3d4c6176899eb3c2d2e5f8fffff4dfc9b49f8a75604b35200b0000000000152b40556a8095aac4c9b39e8974604b455674899eb3c9c2ad98836d58433a495b657c8c9fb4bdc9baa89d8877625745362513000000000000000000000000000000000000000b203448596d8297abbccfe3e2cdbaa9947f6a5544344859697f94a3b5c9dae5d2c2b19f917c665a48372614010000000000000000091d3145566379899ea8b9c5d2e2e4d6ccc3b7b2aba5a3a1a1a3a6acb2b7c4cad4e1d4c3b7a89f917e69604e41301f0f0000000000000000000000000d21364a5b6c8197a6b8bbaa9a8473604b4032404c55606870787e8387898b8c8c8b8986827d766863798ea7b8c7b29d88725a4835200b0000000c22374c61778ca4b6cadef2dcc7b29d87725846331f0a000000000417293a4e63798ea2b4c8dce5d2c2b09b85715e4c3824110000000000000000000010253a4f657a8fa4c8d8eaecd6c1ac97816c57422c170200000000000c21364c61768ba7b9cce0efdac5b09a85705b372715020000000000000000000000152b40556a8095aabfd5eaedd7c2ad98826d58432d1800061a2c3d53687d93a8bacde1f6f2ddc8b39d88735746321e0a011426374e64798ea4b5c9deefdec9b39e8975614b3621100000000000000000000d22384d62778daabbcee2f7fffff6e1cdbaa9927c67523929170300000000000000000f1f334758697e93a4b5c9deedfffff7e2cebbaa8c77624d37220d000000000010253a4f657a8fa6b7cbb9a78f7a644f4b60758a9fb4cac1ab96816c56412c3d4c5e687e939fb1bfc6b7a69b8575605443301c1303000000000000000000000000000000000417293a4d62788b9fb4c9daecdfc9b49f8a77614c372b3b4b6073869babbccfe3e0cebdb39e8978625544311d110000000000000005192b3c4b6074869ca7b8c6d6e4e1d4c6b9b3a59d96908e8c8c8e91969da6b2b6c3cedbd4c6bab49c937e685f4d3d2c1b0a0000000000000000000000071a2d3d4c6176889eb3beb4a2957f6a5e4c3f3037444b535b63696d72747577777674716d6761586b8096abc5c3ad97826d583c2b190500000012273c51677c91a6c2d3e5eed8c3ae99836e593a29170400000000000b21364a5b70859aafc3d4e6ddc9b5a3907b6651402f1c090000000000000000000d22384d62778daabbcee2eed9c4ae99846f59442f1a0000000000000a1e33465774899eb3c9def2ddc8b29d88735544311d080000000000000000000001152737596e8398aec3d8edead5bfaa95806a55402b1500000f21364c61768a9fb4c9def1efdac5b09a85705b39291603000921364a5c71869cb1c8d9ebe1ccb9a8937d68533e2e1b0700000000000000000b20354b60758a9fb4c9dff4fffff4dec9b49f8a76614b36210c00000000000000000004172a3a4b6073869cb1bfcfe5f5fffdead8c8a48f7a654f3a251000000000000b20364b6074889db3c5c5ad97826d5f57647a8fabbccfc4a9947f69543f2a2f404e606c8196a1b3c2c4b5a3998372604a41312111000000000000000000000000000000000a1f3347586b8196aabbcee7e4d2c1ad98826d5947341d314455647a8d9fb5c4d5e7e0ccb8a79a8473604b3f2e1c0c0000000000000b2035485a6b8095a4b5c5d6e4e2d4c3b7a89e9387817b787677787c8187919da5b1bdcbd9d7cdbbb59f8d7d675b493928160300000000000000000000000f1f334758687d92a0b2c0b49f8c7c665d4c403131353c494d54585d5660616261575c58524c6176899eb3c9b7a5907b65503b261000000004172a3a576c8196acc1d6ebe9d4bfaa947f6a553f2a15000000000000071a2d3d51677c91a5b7cbdfe4d2c1b09b85705e4c3823110000000000000000000b20354b60758a9fb4c9dff1dcc6b19c87715c3a2a17040000000000031729395c71869bb1c6dbf0dfcab49f8a75604b36200b00000000000000000000081d31445571879cb1c6dcf1e7d2bca7927d67523d281200000a1e3346576d8298adc3d4e6ecd7c2ad97826d58422d180000071a2d3e54697f94aabbcee2e8d6c6b09b86715c4a36220c0000000000000000081c30435472879db2c7dcf2f6fde9d7c7ae99836e5746331e0a000000000000000000000c1d314455657b90a1b2c7d7e9fcffe7d1bca7927c67523d27120000000000081d314455697f94a6b8c9b1a0927d716e75849aafc9cbb8a68f7a644f3a242131424b60738399a4b6c5c1b2a195806b5f4e3f2e1e0e0000000000000000000000000000021628384c6176899eb4c8d8eaddc9b5a38f7a644f3a2a1826374b5c6c8197a6b8cbe0e8d6c5b4a295806a5d4b3a2a17040000000004182a3a4d62788b9fb4c2d2e3e7d5c4b7a59d897e736b6563616163676c747c87979faebbcbdae1cfbcab9e8a79635745321e0e00000000000000000000000417293a4e5f6e8398a4b5bbaa9f8b7b665e4b44372e2c35383e4338454b4c4c4b46393e4c5d6b8095a7b9c3b29d8774604b35200b0000000a1f33475871869cb1c6dbf1e7d5c5a6907b66513b2611000000000000000f20354b6074879db2c7d7eaddc8b4a3907b65503f2e1c080000000000000000081c30435472879db2c7dcf2dec9b49e89745847331f0a000000000000192f44596e8499aec3d9eee3cfbcab8d78634d38230e000000000000000000000b20354b60758a9fb4c9dfe1e9d7c7a48f7a654f3a251000000317293950657b90a5b6cadfe8d4bfa9947f6a543f2a150000000f22374c62778b9fb4cadfe7ddc9b5a38f7a644f3a29170400000000000000011426365a6f859aafc4dae1e1e1e1cdbaa9927c67523929170300000000000000000000011426374b5d6e8399a9bacde1e9e1e1d4bfaa947f6a553f2a150000000000021527374b6175889eabbcbead9c928683879aa2b4c8c3b39d8874604b3520141d3144556175869ca6b8c7bfb09e927d685d4b3c2c1b0b00000000000000000000000000091e3245566a7f94a8b9cde6e8d6c5b19b86715c4b371c0c192e3e4c6176889eb3c0d1e5e3d1c0b49f8d7b655847331f14010000000a1f3347586d8297a9bacde0f0e0cbb8a69d8778696054504e4c4c4e515560677481949daebcccdedac9b9a89c8675604b3c2c190600000000000000000000000c1c31414b6175869ca7b9baa99f8b7c6b60554b3f382f28292e28323637373638414d5c657b8d9fb4c5b6a5937e695544311d080000000c21374c61768b9fb5cadfe1e0ccb8a78c77624d37220d00000000000000081d3144556a7f94a9bacde1e4d1c1b09a85705d4b3723110000000000000000011426365a6f859aafc4dae1e1cdb9a88c76614c37210c000000000001172c41566c8196abc1d6e1ebd9c9a5907a65503b2510000000000000000000000e23384e63788da9baceccccd7cdbaa98c77624d37220d0000000b20354a6073879db2c2ccd6cec1a6917c67513c27120000000b203448596f8499afc0cbd4ccd2c1ad97826d5846331f0a0000000000000000182d42586d8297adc2ccccccccd5c9b49f8a76614b36210c00000000000000000000000009192f3f4d62788a9fb4c2cdd7ccccccc1ac97826c57422d17000000000000091e324657667c8d9fb5bcbaada39b989da5b4c0c6b6a5947f6a5544311d0814263746576278889ea9bacdbcb49f8b7b655a493a2919090000000000000000000000011426374b6075889eb3c6d6ccccccb8a7927d68533e2e1b00101f334758677d92a2b4c7d5cccccfbcab9d8876614c42321f0f0000000c22374c61778a9fb4c7d7eae3d1c0b39d8878625a4b43363937373937444b56606c7f949eafc0d0e6d6c6b5a495806b5b4935210f000000000000000000000000131e3246576378899ea7b8baa99f8d8073655d504c3f3d3937363637393c3f4c505f677a899eabbcbdb29c8774604b3726140100000011263c51667c91abbccfccccd5c8b39e8873594834200b00000000000000011426374c61778a9fb4c3ccd6ccc8b4a2907b65503f2e1c080000000000000000182d42586d8297adc2ccccccd6c6a48e79644f39240f00000000000014293f54697e94a9beccccccccbda8927d68533d28130000000000000000000011273c51667c91a6c7b6b6b6c7bab49f8a74604b35200b000000071c3043546a7f94a4b3b9c5bbb4a38e79634e39240e00000005182b3b52677c91a2b2b7c4b6b6b6b49f8a76614c36210c0000000000000000152a40556a7f95aab6b6b6b6b6c5b8ab99836e5746331e0a00000000000000000000000000112035485a6b8095a3b4bac6b6b6b6b6af9a846f5a362513000000000000031629394c5e6b80959eb2b7c2b5b1aeb2b7c3c4b7a89d8776614c3727150109192939495a657b8b9fb4bbc9baa99e89786258463726140100000000000000000000081d314455687e93a6b8b6b6b6b6c2b39e8975604b362110000417293a4d5f6f849aa9b8c5b6b6b6b6b7a699836e604f3d2d1a070004172a3a54697e94a9bacde5f5dcc8b4a2917d675a493c302623212223263138454b616a7f95a2b4c8d8e4d2c2b49f8b78634d3d2d1a07000000000000000000000003162939495a647a899ea7b7baab9f95857a6f655d57524f4c4b4b4d4e51575d65707d8b9ea7b8c0b19f907c6656453219090000000417293a566b8196abb6b6b6b6c5b8af9a846f5a3b2b19050000000000000000091f3447596d8297a5b4b9c6b6b6c0af9a84705d4b37230e0000000000000000152a40556a7f95aab6b6b6b6b6b6a6917c66513c271100000000000011273c51667c91a6b6b6b6b6b6b6aa95806a55402b1500000000000000000000152a3f556a7f94a1a1a1a1a1a1a99f98826e5443301c08000000001325364b617586979ea7a1aa9f9985705b4a36210c000000000d20354b607384959da6a1a1a1a1a1a9937e6954362513000000000000000012283d52677d92a1a1a1a1a1a1a1a69e8d7b6650392917030000000000000000000000000006192b3c4b617585979fa8a1a1a1a1a1a19c87725443301c070000000000000b1b2f4051626b7f919da5b1b5c1bdbec5b8b3a69d8a7a64574633190900000b1b2b3c4b5d677d929db1b4bab8a79c8676615544311d08000000000000000000000b20354b6074879da1a1a1a1a1a1a1a496816b5645321e0900000c1c30414e63798b9ea7a1a1a1a1a1a1a1a1937e695c4a36210d000a1f33475870859ab0c7d7eae8d6c5af9a84705f4d3c2b1c140e0c0c0e141d2832434a6072849aaabbcee2e2cebaa999836e5b4a36210c0000000000000000000000000b1b2c3c4b5c647a899da6b4bcb4a39b8f847b736c68646260606264676c727b84929fa9b8c1b4a297816c5e4c382815000000000a1f33465871869ba1a1a1a1a1a1a79e927d67523d281200000000000000000004182a3a4c627787979ea8a1a1a1a1a1a28f7a654f3a2510000000000000000012283d52677d92a1a1a1a1a1a1a1a1947e69543f29140000000000000f24394f64798ea1a1a1a1a1a1a1a198826d58432d1800000000000000000000182e43586d828c8c8c8c8c8c8c8c8a8276614c3626140100000000081e324657617681898c8c8c8a8377624c3d2d1a0700000000081c304354607580888b8c8c8c8c8c8c8c86715443301c070000000000000010253a50657b8c8c8c8c8c8c8c8c8b887e685e4c381b0b0000000000000000000000000000000e1e324657617682898b8c8c8c8c8c8c8c8b73604a35200b000000000000001222334451616a7c87949ba3a6a8a9a7a79e95887a645c4a392917000000000e1e2e3f4d5f6a7f919b9fa9a0a0a49a8373604b35200b0000000000000000000012273c52677c8c8c8c8c8c8c8c8c8c8b8677614c38281603000000132135495b667c888c8c8c8c8c8c8c8c8c8c8b79644e39240f000c21374c61768b9fb4cadff4e0ccb9a7917c675241301e0e0100000000010a161e30435463798b9fb4c8d8ead8c7b3a18e79634e3a2a17040000000000000000000000000e1e2e3e4b5c647a889aa2b4bbb5b0a1999088827d7977767677797c8187909aa2b4babfb3a39a8474604b402f1a0a000000000c21364c61768d8c8c8c8c8c8c8c8b887f6a5f4d3a2510000000000000000000000c1f344759627782898c8c8c8c8c8c8c8c846f5a452f1a050000000000000010253a50657b8c8c8c8c8c8c8c8c8c8c816c56412c170100000000000c21374c61768c8c8c8c8c8c8c8c8c8c84705a45301b000000000000000000000c21364c61767777777777777776746d6158463318080000000000031628394758616c74767776756f625948341f0f0000000000011426364557606b7376777777777777777773604a35200b000000000000000b20354b60737777777777777777767368604e402f1c00000000000000000000000000000000031628394658616d74767777777777777777615443301c07000000000000000416263343505f67757f868d919394928f888076645c4a3e2d1b0b00000000001021304150616a7c868a8a8a8a8a8a8a816c57412c17020000000000000000000c21364b61757777777777777777777671615947341a0a00000000061a2c3d4d5e6674767777777777777777777775604b36210b0011263b51667b90abbccfe3f3dec9b39e8975604b362013000000000000000002132536495b6b8096aabbcee2e5d0bfac97826d5847331f0a0000000000000000000000000010202e3e4a5c647784959faab3bfb3aea69d97928e8c8b8b8c8e91979ca4afb4c0bbb4a199857661564532221200000000000b20354b6073777777777777777776736a614f41301e0a0000000000000000000005182a3b4859626d74767777777777777776614c37210c00000000000000000b20354b60737777777777777777777775614b36210c0000000000000a1f334758707777777777777777777776614c36210c000000000000000000000a1e33465761616161616161616160544c463a2917000000000000000b1b2a3a474c575861616160554c483b2b180100000000000008182839454b5657616161616161616161605443301c0700000000000000081d3144556061616161616161616157534e4231221100000000000000000000000000000000000b1b293a464c5460616161616161616161584736251300000000000000000008162533414d56606971787b7d7f7d7a746b61574a3e2d20100000000000000213233343505e66717475757575757573604b35200b00000000000000000000091e3246576161616161616161616161574c473a2a180000000000000f1f30404d54606161616161616161616161605745321e0900152a40556a7f95aac9d9ebeed9c4ae99846f5645321d0900000000000000000008182c3d4c61778b9fb4cadfeddec9b49f8a76614c37210c000000000000000000000000000210202d3e4a596272808c99a1b0b4c0b7b2aca7a4a1a0a0a2a3a6acb2b6c3bfb3aa9f948375615846382815040000000000081d3144556061616161616161616157544f433223130100000000000000000000000d1d2b3b484d58586161616161616161615847331f0a0000000000000000081d3144556061616161616161616161615746321e0a00000000000004172a3a475861616161616161616161615846331f0a0000000000000000000003172939464c4c4c4c4c4c4c4c4c4a433633291b0b00000000000000000c1c2a33373a474c4c4c4b4437342b1d0d00000000000000000a1b28323639464b4c4c4c4c4c4c4c4c4a43362513000000000000000001142637444b4c4c4c4c4c4c4c4c4b46393a312414040000000000000000000000000000000000000c1c293336434b4c4c4c4c4c4c4c4c4c473a2a1808000000000000000000000715233038454b545a62666869686460544c46392d2010020000000000000005152533404c515c55606060606060605544311d080000000000000000000003162839464b4c4c4c4c4c4c4c4c4c4b4639342a1c0c0000000000000112223036434b4c4c4c4c4c4c4c4c4c4c4c4b453928160300182d42586d8297adc2d7ecead5bfaa95806a5538281502000000000000000000000f1f3447596f8499aec8d8eae1cdbaa9927d685237271502000000000000000000000000000210202d3b4754606a7984909aa2abb3b8c4bdb9b7b5b5b7b9bcc1c6b9b4ada1998c7f726157463a291a0a00000000000001142637444b4c4c4c4c4c4c4c4c4c46393c32251505000000000000000000000000000d1d2b34373a474c4c4c4c4c4c4c4c4c473a2a1704000000000000000001142637444b4c4c4c4c4c4c4c4c4c4c4b4639291603000000000000000c1c2a3a474c4c4c4c4c4c4c4c4c4c4c463a29170400000000000000000000000b1b29333637373737373737373530251f170b000000000000000000000c171f21293337373735312620180d000000000000000000000a161e212933363737373737373737353025180800000000000000000009192631353737373737373737363329261f140600000000000000000000000000000000000000000c171f263035363737373737373737332a1c0c00000000000000000000000005121a2832363c494d515354524f4b433633291b10020000000000000000000715222f383c37444b4b4b4b4b4b4b443727150100000000000000000000000b1b2832363737373737373737373632291f180c000000000000000004121826303537373737373737373737373632281b0a00001a30455a6f859aafc4daefe6d1bca7917c67523c2712000000000000000000000004182a3b51677c91aabbcee2e9d7c7ae98836e5544311d08000000000000000000000000000002101d2a36434b5b636f7b858d969da6a9adb1b3b9c5bbb4b2afaba89e988e84796a60544639291b0b000000000000000009192631353737373737373737363329272015070000000000000000000000000000000d1820222a33373737373737373737332a1c0c000000000000000000000919263135373737373737373737373632291b0b0000000000000000000c1c2a33373737373737373737373633291c0c000000000000000000000000000b171e212222222222222221201c130804000000000000000000000000040a0c171f212221201d14090500000000000000000000000003090b171e212222222222222222201c1308000000000000000000000009141d202222222222222222211e170b0b02000000000000000000000000000000000000000000000408141c202122222222222222221f180c0000000000000000000000000000000a161e212b35383c3e3f3d3a3530261e170b00000000000000000000000004121d242627313535353535353531271909000000000000000000000000000b161e21222222222222222222211e160b04000000000000000000000008141c202122222222222222222222211e160a0000001c31465c71869bb1c6dbf0e5d0baa5907b65503b26100000000000000000000000000c21364b60758a9fb4c9dff3dec9b39e8974604b36200b000000000000000000000000000000000d1826303d494e5d65707880888f94989c9ea7a0aa9f9d9a969189827a6f635b4b4336291b0b0000000000000000000009141d202222222222222222211e170b0c030000000000000000000000000000000000050b0d171f2122222222222222211f170c00000000000000000000000009141d2022222222222222222222211e160b00000000000000000000000c181f22222222222222222222211f170c000000000000000000000000000000030a0c0c0c0c0c0c0c0c0c0b07000000000000000000000000000000000000040a0c0c0c0b08010000000000000000000000000000000000030a0c0c0c0c0c0c0c0c0c0b07000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0a0300000000000000000000000000000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0a04000000000000000000000000000000000003090e19202326282a2825201c140803000000000000000000000000000000090f11151d202020202020201d150900000000000000000000000000000003090c0c0c0c0c0c0c0c0c0c0c0a03000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0b0903000000001d32475c72879cb1c7dcf1e4ceb9a48f79644f3a240f000000000000000000000000091e32455671869bb1c6dbf0e1ccb9a88f7a644f3a240f000000000000000000000000000000000008141c2c353f4c505b636b74797f8386898a8b8b8a8885817b756d645c4e493d3026180b00000000000000000000000001080b0c0c0c0c0c0c0c0c0c0a030000000000000000000000000000000000000000000000040a0c0c0c0c0c0c0c0c0c0a04000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0a0300000000000000000000000000040a0c0c0c0c0c0c0c0c0c0c0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d111314130f0b0801000000000000000000000000000000000000000001080b0b0b0b0b0b0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31475c71869cb1c6dbf1e3ceb9a38e79644e39240f00000000000000000000000002162838576c8297acc1d7ece8d6c6a8927e68533d2813000000000000000000000000000000000000010f1a212f383d494e546064696e71747576767573706b6660564f4a3e352c1c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e2020202020202020201d1b140b000000070b1f2020202020202020200e0c0600000812181b20202020202020202012100a0100000000000000000000000000000913191b202020202020201e110f0900000000000003090b1b202020202020202012100a000000000000000000000000000000000000000000000000040b0c0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f12141516151312100b0903000000000000000000000000000000000000000000000000000000001b30455b70859ab0c5daefe4cfbaa58f7a65503a25100000000000000000000000000013283e53687d93a8bdd2e8ebd6c0ab96816b56412c16000000000000000000000000000000000000000006111c232c3536434b4f54585c54606160565d5a56514b4538362d211a0f010000000000000000000000000000040a2020202020202020202020181610060000000000000000000000080e101b1f2020202020202020201a181107000000000000000000000000000000000000000000030920202020202020202020201a1811080000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124353535353535353535322f281c0e08131c20343535353535353535352320190e0c1a252d3035353535353535353527251d13050000000000000000000000000d1b262e31353535353535353326241d12040000000a161e2131353535353535353527241d12040000000000000000000000000000000000000000040c181f22221f180d08000000000000000000000000070b1c202020202020201f1c12100a01000000000000000000000000000000000000080e101b1f202020202020201f0b08010000000000000000000000000000000000000000000000040a0c151d202427292a2b2a282725211e16110b08020000000000000000000000000000000000000000000000001a2f44596f8499aec4d9eee6d0bba6917b66513c26110000000000000000000000000011263b51667b90a6bbd0e5eed9c4af99846f5a442f1a00000000000000000000000000000000000000000000090f1a212630353a3f4336434b4b4b453845413c363228221b10060000000000000000000000000000000c171f35353535353535353535352d2b23180a000000000000000003111c232630343535353535353535352f2c24190b000000000000000000000000000000000000000a161e35353535353535353535352f2c25190b000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36394a4a4a4a4a4a4a4a4a47443a2c1c182530354a4a4a4a4a4a4a4a4a4a38352c1e1a2a3841454a4a4a4a4a4a4a4a4a3c393023130100000000000000000000091b2b3842464a4a4a4a4a4a4a483c382f221200000a1a283236464a4a4a4a4a4a4a4a3c39302312000000000000000000000000000000000000000c171f2a343737342a221b1003000000000000000008131c203135353535353535353127251e130500000000000000000000000000000003111c232531343535353535353534201d14090000000000000000000000000000000000000000060c171f21273136393c3e40403f3e3c3a36322826201d15090700000000000000000000000000000000000000000000182e43586d8298adc2d8ede7d2bda7927d68523d2813000000000000000000000000000f253a4f647a8fa4b9cfe4f0dbc5b09b86705b46311b0000000000000000000000000000000000000000000000000608141c20242a2e26303536363228302c26211e160a07000000000000000000000000000000000c1c29334a4a4a4a4a4a4a4a4a4a4a433f352818060000000000000211212f383b45494a4a4a4a4a4a4a4a4a44413729190700000000000000000000000000000000000a1a28324a4a4a4a4a4a4a4a4a4a4a4441372919080000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e6060606060606060605d574a3a182536435b5f6060606060606060605e493c2c253848555a606060606060606060524d41301d0a0000000000000000000013263849555b606060606060605d514c402f1c0c03162838454b5b6060606060606060514d41301d0a00000000000000000000000000000000000c1c29333b474c4c473b372e2110000000000000000818253035474a4a4a4a4a4a4a4a463c3930231507000000000000000000000000000011212e373a464a4a4a4a4a4a4a4a4935312619090000000000000000000000000000000000020e19202a333738454b4e515455555453524f4b45393c363127211a0f060000000000000000000000000000000000000000152a40556a7f95aabfd4eae9d4bfaa947f6a553f2a15000000000000000000000000000e23394e63788ea3b8cde3f1dcc7b19c87725c47321d000000000000000000000000000000000000000000000000000001080b0f1419141c2021211e161b16110b090300000000000000000000000000000000000417293a465e6060606060606060606058534635231000000000000010202f3f4c505a5f6060606060606060605954473724110000000000000000000000000000000003162838455e606060606060606060605a544737251100000000000000000000000000000000000000000000000000000000000000000000000c21364a5b7075757575757575757572685736253043546d74757575757575757575705a49352d41556670757575757575757575675f4d39251000000000000000000004192e425567707575757575757573665e4c3a2917091e32455660707575757575757575675f4d39240e000000000000000000000000000000000417293a464c596162594f4b3f2e1d0d000000000000132536434a5c606060606060605f5c524d41332515020000000000000000000000000d1d2e3f4b505b5f606060606060605f4b44372614010000000000000000000000000000000a151d2b353a474c5356606467696a6b6a686765605757514b4437362d211a0f0200000000000000000000000000000000000011263c51667c91a6c4d5e7edd8c3ae98836e593a2a17040000000000000000000000000d22374d62778ca2b7cce1f2ddc8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000001080b0c0b090200010000000000000000000000000000000000000000000a1f33465870757575757575757575756d64533f2b160100000000081b2e3e4c5d6570747575757575757575756f6554412c1803000000000000000000000000000000091e32455670757575757575757575756f6554412c0800000000000000000000000000000000000000000000000000000000000000000000000e24394e63798a8a8a8a8a8a8a8a8a8772544330354a60738b8a8a8a8a8a8a8a8a8a78634d3830455a70848a8a8a8a8a8a8a8a8a7d67523c271200000000000000000005192b3c5b70858a8a8a8a8a8a8a887c665846331f0b21364b6075858a8a8a8a8a8a8a8a7d67513c2c19060000000000000000000000000000000a1f3346586170777772655d4b3b2a180500000000071c3043546071757575757575757471675f5043332010000000000000000000000005192b3c4b5d6570747575757575757574605544311d0800000000000000000000000000000e1a28323c484d5861696f75797c7e7f807f7d7c7a76716d6660554e4a3d352c1e160a00000000000000000000000000000000000d22384d62788da6b8cbe0f2dcc7b29d87725847331f0a0000000000000000000000000d22384d62778da2b7cce2f3ddc8b39e88735e49331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a8a8a8a8a8a8a8a8a8a826d58432d1800000000000d22374b5c657b85898a8a8a8a8a8a8a8a8a836f59442f1a040000000000000000000000000000000b21364b60758a8a8a8a8a8a8a8a8a8a836f5a36251300000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba79f9f9f9f9f9f9f8a75604a3530435472879c9f9f9f9f9f9f9f907a65503b2d43586d82989f9f9f9f9f9f9f947f69543f2a140000000000000000000b2034485a74899e9f9f9f9f9fa69d8976614c362111273c51667c91a39f9f9f9f9f9f9a846f5b4935210a0000000000000000000000000000000c21364c6176848c8c877b655948341f0b000000000b20354a6074868a8a8a8a8a8a8a8a867d6a61503e2d1b07000000000000000000000b2034485a657b85898a8a8a8a8a8a8a8a74604b35200b00000000000000000000000003111e2c38454b5a626d777e84898e919395959493918f8a86827b756c635b4e493d32281a0f010000000000000000000000000000000b2035485a73889db3c8ddf2dfcab6a58c76614c37210d0000000000000000000000000f24394e64798ea3b9cee3f2ddc7b29d88725d48331d00000000040a2020202020202020202014120c03000000000000000000000000000000050b0d191e20202020201f1d170e020000000000000000000000000a1f33465874899e9f9f9f9f9f9f9f9a85705b37271501000000071a2d3e4f647a8c9a9ea89f9f9f9f9f9fa38f7b65503a251000000000000000000000000000000000091e32455673889e9f9f9f9f9f9f9f9c87725443301c07000000000000000000000000000000000000000000000000000000000000000000000a1e33465773899eb3b5b5b5b5baa98c77624c3725365a6f859aafb5b5b5b5b5a7927d68523d2b40556b8095aab5b5b5b5b5ac96816c57412c170200000000000000000d22384d62778da8b9b5b5b5c4b7a7937e69533e2d1b2a40556a7f95aac1b5b5b5b5b59f8c78634d382815020000000000000000000000000000152b40556a8095a2a59c8977624c37220f00000000071c304354677d92a59f9f9f9fa99f9b917f6a5c4a36220c000000000000000000000d22384d62788a9b9fa99f9f9f9f9f9a846f5544311d0800000000000000000000000311212e3c4956606b78828a939a9fa8a6a9aaaaa9a8a7aa9f9c97918881796e635b4b45382d201305000000000000000000000000000005192b3c576c8297acc5d6e8e6d4c3a7917c67523b2b1805000000000000000000000010253a50657a8fa5bacfe4f1dbc6b19c86715c47311c0000000c171f353535353535353535352927201407000000000000000000000000000e1920222e34353535353534322b20120200000000000000000000000417293a5c71869cb1b5b5b5b5b5b29d88725544311d080000000d21364a5c6f849aaab4b9c6b5b5b5c3b09b85715d4b37230e00000000000000000000000000000000031628385b70869bb0b5b5b5b5b5b49f8975604a35200b00000000000000000000000000000000000000000000000000000000000000000000031729395c71869bb1c6cacad7c7a48f79644f3a2d42586d8297adc2cacacabfaa957f6a55402a3e53687d93a8bdcacacac3ae99846e59442f1900000000000000000011263b50667b90a5c6d6cacad4c5b19b86715c4a36222e43586d8398adc2cacacacfbcab96806b5645321d0900000000000000000000000000011426375b70869bb0b6a795806b553d2d1a07000000001325364b6074879cb2c4b5b5bab4b19f8d7a644e3a291704000000000000000000152a3f556a7f94a8b4bab5b5b5b5aa957f6a5537261401000000000000000000000011212e3f4b5b6374808b979fa9afb4bac6bebfc0bfbdc8bbb4b1aca79e978c83796c60564a3e30231406000000000000000000000000000011263b50667b90a7b9cce0edd8c3ae98836e594834200e000000000000000000000114263654697e93a9bed3e8eed9c4ae99846f59442f1a00000c1c29334a4a4a4a4a4a4a4a4a4a3f3b3225140300000000000000000000000e1e2b353843494a4a4a4a4a49463d3020000000000000000000000000001a2f44596f8499aec4cacacacab49f8a75604b35200b000005182a3b4e64798ea2b4c8cdd7cacacab7a5917c67523f2e1c080000000000000000000000000000000000192e43586e8398adc3cacacacdbaa98c77624c37220d0000000000000000000000000000000000000000000000000000000000000000000000192f44596e8499aec3d9dfd1bca7917c67523c2b40556a8095aabfd5dfd7c2ac97826d57422d3b50667b90a5bbd0dfdbc6b19b86715c39291703000000000000000014293f54697e94a9bed3dfdfdec9b5a38e79644e38282a3a5b70869bb0c5dbdfecdac9b39e8875604b36200f00000000000000000000000000081d31445574899eb4c5b29d87725b4a36210c00000000081d314455687d92a6b7cbd7cdc9bcab97826d5847331f08000000000000000002152838596e8398aec6cdd7cacebbaa907b65503b251000000000000000000000000e1e2e3f4b5d657986959faab4bac7c9cdd7d3d4d5d4d2d9cecac6c5b8b3ab9f988c8174645c4d4131241407000000000000000000000000000b20364b6075899eb3c8d8eadfc9b49f8b77624c3c2b1808000000000000000000081c3043546d8298adc2d8edebd6c1ab96816c56412c17000417293a465e606060606060606060544f4332200c000000000000000000000c1d2b3c484d595e60606060605f5a4e3d1c0c000000000000000000000002172c41576c8196acc1d6dfe2cebbaa8d78624d38230d00000b1f3448596d8298adc0d1e1e9e8d6c5b29d8774604b352011000000000000000000000000000000000001162b41566b8096abc0d5dfe9d7c7a48f7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6e9d4bea9947f69543f2a3d52687d92a7bdd2e7d9c4af9a846f5a452f394e63788ea3c5d5e8dec8b39e89735746331e0a0000000000000002182d42576d8297acc2d7ecf6e5d2c1ac96816c56453234475973899eb3c8def3f4e0ccb8a7927d67523d2d1a070000000000000000000000000b20354b60758aa8b9cab7a58e79634e39240e00000000011426374b6074879db2c5d5e2dac9b49f8a76614c3625130000000000000000091d32455672879cb1c7dce9dfcab49f8a76614b36210c000000000000000000000a1a2c3c4b5d657b899ca4b4bbc8ced8dedfddd6d0cdcbcccdd1d6dbd5ccc9bcb4aa9f96867a675f4e4232251404000000000000000000000000091d3145566b8196aabbcee2e2cebbaa96806b5a483625130200000000000000000d20354b6074889db2c8ddf2e5d3c2a7927d67523d2812000a1f3346587075757575757575757569614f3b271200000000000000000004182a3b485a626e737575757575746c5a3a2a17040000000000000000000000142a3f54697f94a9bed4e9ebd9c8a58f7a65503a251000021628384c62778b9fb4c9dfeef5e0ccb8a7937e695544311d0800000000000000000000000000000000000013293e53687e93a8bdd3e8e6d1bca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9bed3e9d6c1ac96816c57412c3b50657a90a5c9daecdcc7b19c87725c3a2a364b61768ba7b8cce0e0ccb8a78b76614b36210c0000000000000005182b3b5b70859bb0c5dae9e1dedec8b39e8975604b36374c61778ca7b8cce0e2dfdfd5c5b09a85705b4a36210b0000000000000000000000000c21364c61768ba1c6d4c3a9947f69543a29170400000000091d314556697e93a6b8cbe0e1cdbaa9937e695443301c0b0b0b0b0b0b0b0b0b20364b60758a9fb4cadff0dbc6b09b86715746321e0a00000000000000000002152738495b657b8a9ea7b5c2ced8e2e1d4cac7c0bab8b6b6b8bcc1c8cbd4d9cfc8bbb4a49c8b7d68604f43322212010000000000000000000000021527384d62788b9fb4c6d7e9d8c8b49f8a78625443301d150a0000000000000d1d2f4050667b90a6b7cbdff3decab6a48d78634d38230e000c21364c61768a8a8a8a8a8a8a8a8a7f69543f29140000000000000000000b1f344759627883898a8a8a8a8a8a745847331f0a000000000000000000000012273c51677c91a6bcd1e6e7d2bda7927d68523d281300091e3245566b8095a9bacee2f6ead7c7b39e8975614b3726140100000000000000000000000000000000000011263b50667b90a5bbd0e5e9d4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcd1e6d9c3ae99846e59442f384d63788dabbccfe3dec9b49f897458473332465773899eb3c8dee8d6c5a38e78634e39230e000000000000000b2034485973899eb3c8ded7cdc9cdccb8a7917c67523c3a4f657a8fa4c5d6d8cecac9cec8b4a28e79634e3928160300000000000000000000000d22384d62778da2b7ccc5af9a85705846331f0a00000000021527384b6075889eb3c6d6e8d7c7b19c8773604a352020202020202020202024394e64798eaabbcee2ebd6c1ab96816c5639291603000000000000000000091d3145566379899ea8b9c5d2e2e4d6ccc3b7b2aba5a3a1a1a3a6acb2b7c4cad4d9cec2b5a99f8d7e69614f402f1f0f0000000000000000000000000a203448596d8298a8bacde1e1cdbaa99a8472604a4231271c130d0b0b0d131d2b3b4c5e6e8399aec4d4e6ecdac9b19c87725a4935200c000a1f33465874899e9f9f9f9f9f9f96816c56412c170100000000000000071b2d3e4c617787989ea79f9f9fa88c76614c37210c00000000000000000000000f243a4f64798fa4c7d7e9ead4bfaa957f6a55402a15001325364b6075889eb3c7d8eaf6e2cdbaa995806b5746321909000000000000000000000000000000000000000e23394e63788ea3c4d5e7ecd7c1ac97826c57422d1700000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6d7e9dbc6b19c86715c3a29364b60758a9fb5cadfe1cdbaa88c76614c3728395c71869bb1c6dbe5d0bba5907b66503b2611000000000000000d22374c62778ca7b8ccd7c6bab4bac6c5af9a846f5a483d52687d92a7bdd8c8bbb4b4bbc8c0ac97816c5746321e0900000000000000000000000e23394e63788ea3b8cdcab49f8a76614c36210c00000000000a1e3245576a7f94a8b9cce1decab6a4907b65503b35353535353535353535353d52677c92a7c8d8eae6d4c3a7917c67523c271200000000000000000005192b3c4b6074869ca7b8c6d6e4e1d4c6b9b3a59d96908e8c8c8e91969da6b2b6c3cee2d2c7baab9f937f695e4c3d2d1a0a000000000000000000000005192b3b4d62788a9fb4c1d2e3d7c7b3a195806a614b453830252220202224313b4859667c90a1b3c7e2f2e3cfbcab95806b563c2c1906000417293a5c71869cb1b5b5b5b5ae99836e59442e1900000000000000000a22364a5c6d8297a5b3b8c5b5c6a48e79644f39240f00000000000000000000000c22374c61778ca9bacde1ecd7c2ad97826d58422d18071c304354687e93a7b8cce5f5ecdac9b49f8a77624c39281600000000000000000000000000000000000000000b21364b60768ba6b8cbe0eed9c4af99846f5a36251300000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8bacde1dec9b39e897458463332455673889db3c8dde9d7c6a38e79644e392f44596e8499aec3d9e8d3bda8937e68533e29130000000000000010253b50657b90a5c5d6cdbaa89fa8bacab59f8c78624d36566b8095abc0cebbaa9f9faabbc9b39e8975614b36211000000000000000000000000f24394f64798ea4c7d7cebbaa917c66513c27110000000000031628394c6176899eb3c7d7e5d3c2ae99836e594b4b4b4b4b4b4b4b4b4b4b4b4b566b8095abc0d5eadfcab7a58c77624d37220d0000000000000000000b2035485a6b8095a4b5c5d6e4e2d4c3b7a89e9387817b787677787c8187919da5b1bdcbd9d8c9bcb49f8d7c665b4a3827150200000000000000000000000d2035485a697f94a3b5c5d6e5d0bfaf9e937f6c60564a43363735353739414e596277879db2bfd0e2f2dfcab59f8c78634d38230e000000192f44596e8499aec3cacac6b09b86715b382816030000000000000a1a30404f647a8d9fb5c3ccd5cabba6917c66513c271100000000000000000000000b1f34475974899fb4c9deefdac4af9a856f5a3626140b20354a6073869cb1c5d5e7f8e3cfbcab97826d5948341b0b0000000000000000000000000000000000000000091e32455673889eb3c8ddf1dcc7b19c87725443301c07000000000000000000000000000000000000000000000000000000000000000000000a1f34475974899fb4c9dee0ccb9a78b76614c3628385b70869bb0c5dbe6d0bba6917b66513c2c41576c8196acc1d6ead5c0ab95806b56402b160100000000000014293e53697e93a8bed3c9b49f899fb4c5bcab957f6a5443596e8398aec3cab49f8c8a9fb4c9b9a8937d68533e2d1b07000000000000000000000d22374d62778ca9bacdd8c8a9947f6a543f2a150000000000000a1f3346586b8095a9bacde1dfcab49f8b776260606060606060606060606060606f8499aec4d9eedcc7b29d8772594834200b000000000000000004182a3a4d62788b9fb4c2d2e3e7d5c4b7a59d897e736b6563616163676c747c87979faebbcbdad9cfbcab9e8a79635645311d0e000000000000000000000006192b3c4b6073859ba7b9c8d8deccbcae9d938174666054504c4b4b4c4f555f6877869ca6b7cbddede2cfbeaf99846f5a4935200c000002172c41576c8196acc1d6ddc8b39e88735645321e090000000000021527384d5f70849aabbccfe0e8d3bea9947e69543f2914000000000000000000000004182a3b5c72879cb1c7dcf1dcc7b29d87725443301c1a2d3d50667b90a4b6cae3f3f4dfcab59f8c79634e3b2a18000000000000000000000000000000000000000000031628385b70869bb0c5dbf0dec9b49f8975604a35200b0000000000000000000000000000000000000000000000000000000000000000000004182a3a5c71879cb1c6dce8d6c5a38e79634e392e43596e8398aec3d8e8d3bea8937e69533e293f54697e94a9bed3e9d8c2ad98836d58432e1800000000000002172c42576c8197acc1d6c1ac978197a7b9c9b29d8773604a5471869cb1c6c7b29d87849aafc4c6b09b86715c4a36220c000000000000000000000b20354a60758a9fb4c9d7c1ac97826c57422d170000000000000417293a4c61778a9fb4c8d8e2cebbaa958074757575757575757575757575757573879db2c7dcedd7c2ad98826d583b2b180500000000000000000a1f3347586d8297a9bacde0f0e0cbb8a69d8778696054504e4c4c4e515560677481949daebcccdedac9b9a89c8674604b3d2c1a0600000000000000000000000e1d3144556379899eaabbc9d9dacbbbae9f96867c736b6562606062646a717d899ca4b6c4d4e6e6d5c4b2a08e7a644f3c2c190600000014293f54697e94a9bed3e0ccb8a78b76604b36210b0000000000091d314556677c91a2b4c9daecebd6c1ab96816c56412c170100000000000000000000001a2f445a6f8499afc4d9eedfc9b49f8a75604b352021364a5b6f849aafc2d3e5f8e4d2c1ae99846f5b49351d0d00000000000000000000000000000000000000000000192e43596e8398aec3d8ede1cdbaa98c77624c37220d00000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afc4d9e5d0bba6907b66513b2c41566b8196abc0d6ebd5c0ab96806b56412b3c51677c91a6bcd1e6dac5b09a85705b37261401000000000004182a3a5a70859aafc5ceb9a48f7a899eb3c9b7a5907b65506074899fb4c9c5b09a857e93a9c1c9b5a38f7a644f3a291704000000000000000000071c30435472879cb2c7d9c4af9a846f5a362513000000000000000b1f3447596c8196aabbcee2d8c8af9e958a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a9da5b7cadfe8d6c5a8937e68533e29130000000000000000000c22374c61778a9fb4c7d7eae3d1c0b39d8878625a4b43363937373937444b56606c7f949eafc0d0e6d6c6b6a4957f6a5b4935210e000000000000000000000001142637495b657b8c9fabbbc8d7d9cbbdb0a49c9086807a77757577797f86929ea7b6c3d3e2e7d8c8b8a698826d5c4a361e0e0000000011273c51667c91a6bbd1e7d5c5a38d78634e38230e0000000004182a3a4b6074879cb2c0d1e7f7eed9c3ae99846e59442f19000000000000000000000002172d42576c8297acc1d7ece2cebbaa8d77624d38222a3a4e63798ea1b3c7e0f0f2ddc9b5a38f7a65503d2c1a0000000000000000000000000000000000000000000001162b41566b8096abc0d5ebe9d7c7a48f7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1d7e8d3bea8937e69533e293e54697e93a9bed3e8d8c3ae98836e59432e3a4f64798fa4c7d7eaddc7b29d88725544311d0800000000000a1f33475873889eb3c8cdb7a28d788197acc1c3ad98836d5862778da9bacdc3ad9883788da3b5c9c1ac97826d5846331f0a000000000000000000001325365a6f849aafc4d9c7b29c87725443301c0700000000000004182a3a4d62788b9fb4c9d9e6ccbcafaaa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0b2b7c3d4e6e0ccb9a78e79634e39240e000000000000000004172a3a54697e94a9bacde5f5dcc8b4a2917d675a493c302623212223263138454b616a7f95a2b4c8d8e4d3c2b49f8b79634e3c2c1906000000000000000000000009192c3d4c5d687e8d9faabac7d2e3cdc2b6b1a49c95908c8a8a8c8e959ca4b3b8c5d3e1e6d9c9bbaa9d8876614c3e2d1b00000000000f24394f64798ea4c6d6e9d0baa5907b65503b2610000000000a1f334758697f94a5b6cadeeefff0dbc6b19b86715c3a2917040000000000000000000000152a3f556a7f94aabfd4e9ead8c8a48f7a654f3a253447596d8297acbfd0e3f9e6d4c3b09b85705d4b371f0f000000000000000000000000000000000000000000000013293e53687e93a8bdd3e8e7d1bca7927c67523d27120000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9d5c0ab96806b56412b3c51667c91a6bbd1e6dbc5b09b86705b3827374c62778ca9bacde2dfcab49f8a75604b35200b00000000000c22374c61778ca7b8ccccb6a18c77798ea3b4c9b49f8a7661657a90a5c7d7c0ab958071869bb0c6c9b49f8a76614c36211100000000000000000000172d42576c8297acc1d7c9b49f8a75604a35200b000000000000000c2034485a6d8297abbccfe3daccc3bfb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5c7cad4e1f1dec9b39e8974604a35200b00000000000000000a1f33475870859ab0c7d7eae8d6c5af9a84705f4d3c2b1c140e0c0c0e141d2832434a6072849aaabbcee2e2cdbaa998836e5a4935200b0000000000000000000000000e1f2f3f4e60687e8c9fa9b5c2cfd9d3cac2b6b1aaa5a1ab9faba4aab1b5c2ccd5e3e3d5c8bbab9f8c7b65584733201000000000000c21374c61778ca8b9cde1d2bda8927d68533d2813000000061a2c3d4c6177899eb3c3d3e6fcfff3dec9b39e89745846331f0a000000000000000000000012273d52677c92a7bcd1e7e7d1bca7927c67523d28384c61778a9fb4c9deeef4dfcab6a5917c67523f2e1c01000000000000000000000000000000000000000000000011263b51667b90a6bbd0e5e9d4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1e7d8c3ad98836e58432e394f64798ea4c6d7e9ddc8b39d8873564531354a60758a9fb4c9dfe2cebbaa8d77624d38220d000000000010253a50657a8fa5c5d5cfbcab8b7670859bb0c5baa9937e69687e93a8bdd2bda8927d6a7f94a9c1cdbaa8937e69543f2e1c08000000000000000000152a3f556a7f94aabfcacdbaa98c77624d37220d0000000000000005192b3c4d63788c9fb4cadfeadfd7d5cacacacacacacacacacacacacacacacadcdfe6f1eed9c4af99846f5443301c0700000000000000000c21374c61768b9fb4cadff4e0ccb9a7917c675241301e0e0100000000010a161e30435463798b9fb4c8d8ead7c7b49f8c78634d39291603000000000000000000000000112131424e5f687c8b9ca4b4bcc9cfdad3cac7c0bab7bcb4bcc9bfc6c9d2e0e3dccfc5b8aa9f8d7e685d4b3a2a170200000000000a1f33475874899eb4c9ded5bfaa95806a55402b15000000092136495b6c8197a7b9cce1f1fffff5e0ccb9a78b76614c36210c000000000000000000000010253a4f657a8fa4c8d8eae9d4bfaa947f6a553f3245566a7f95a9bacde1f6e8d5c5b29d8774604b3520110000000000000000000000000000000000000000000000000e23394e63788ea3c5d5e7ecd7c1ac97826c57422d17000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8d8eadac5b09b85705b3928374c61778ca8b9cde1dfcab59f8a75604b3630435472879cb2c7dcebd9c8a48f7a654f3a2510000000000013293e53687e93a8bdd3cab49f8a75677d92a7b9c7b09b86716b8196abc0d8c8a58f7a65788da3b5c9c6b19c86715d4b37230c00000000000000000012273d52677c92a7b5b5b5b5a48f7a644f3a250f00000000000000000d2135495b6e8398adbfd0e2f2f2e2d4cbc8bbbbbbbbbbbbbbbbbbbbbbbfc3ccdaeafdead8c8aa947f6a5536251300000000000000000011263b51667b90abbccfe3f3dec9b39e8975604b362013000000000000000002132536495b6b8096aabbcee2e3cfbcab97816c5746321e0a00000000000000000000000003142431414e5e667986969fabb5bcc9ccd6dcd5cfd9cfcacfd9d4dcdededcd0c8beb2a79e8c7e68604e3f2e1c0c00000000000004172a3a5c71879cb1c6dcd7c2ad97826d58422d18000009192f404e63798c9fb4c5d6e8fffffffbe8d6c5a38e79644e39240f00000000000000000000000d22374d62778caabbcee2ecd7c1ac97826c5742364b6075889db3c7d7e9f5e0ccb8a7937e695544311d080000000000000000000000000000000000000000000000000b21364b60768ba6b8cbe0efd9c4af9a846f5a3a2a1804000000000000000000000000000000000000000000000000000000000000000000000d22374d62778caabbcee2ddc8b39d887357463233475874899eb4c9dee3cfbcab8d78624d3825365a6f859aafc4dae7d1bca7927c67523d27120000000002172c41576c8196acc1d6c9b39e89746075899eb3c9b5a38e796f8499aec4cebbaa8d776271869bb1c6c9b6a48f7a65503a2a180400000000000000000f253a4f647a8fa0a0a0a0a0a0927c67523d2712000000000000000006192c3c4e64798ea1b3c7dbeee7d4c4b7b2a6a6a6a6a6a6a6a6a6a6a6aaafbcccdff7e2cebbaa8f7a65503a2510000000000000000000152a40556a7f95aac9d9ebeed9c4ae99846f5645321d0900000000000000000008182c3d4c61778b9fb4cadfebd9c9b49f8a76614b36210c0000000000000000000000000006142331404c5b6374808c989fabb3b9c5c7cad3d2d4d5d6d6d5d3d3c9c6c0b4afa098897b68604e4131211100000000000000001a2f44596f8499aec4d9dac4af9a856f5a36251300011426374c5e6f8499aabbcee4f4f4f7fdffe6d0bba6917b66513c261100000000000000000000000b20354b60758a9fb4c9dfefd9c4af9a846f5a364252687d92a6b8cbe5f5ead7c7b39e8975614b37261401000000000000000000000000000000000000000000000000091e32455773889eb3c8ddf1dcc7b19c87725947341f12000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9dfdfcab59f8b76614b362a3a5c72879cb1c7dcecdac9a5907a6550362542586d8297adc2d7e9d4bfa9947f6a543f2a15000000000417293a5a6f859aafc4dac7b29d8872566c8297acc3c1ac968172879cb1c7c9b49f8a75606a7f95aac3d3c2ad98836d5947341f0800000000000000000d22374c62778a8a8a8a8a8a8a8a7f6a553f2a150000000000000000000e21364a5c6f8499aec0d1e3dfcbb7a69d9191919191919191919191959eafc3d7f4dfc9b49f8a76604b36210b000000000000000000182d42586d8297adc2d7ecead5bfaa95806a5538281502000000000000000000000f1f3447596f8499aec8d8eae1cdbaa9917c67523727150200000000000000000000000000051322303d4a56606b79838c979ea7adb2b6c3bdbfc0c1c1c0bec2b6b1aba29a8f8377655d4e42312313030000000000000002172c41576c8196acc1d6dcc7b29c87725443301c07081d314455667b90a1b3c8d9eae2dfe2eaf6e8d3bea9937e69543e29140000000000000000000000081c30435472879db2c7dcf1dcc7b19c87725453556071869cb1c4d5e7f6e2cdbaa995806b5746321909000000000000000000000000000000000000000000000000000b20354b6075889db3c8ddf2dfc9b49f8a77614c40301c0c000000000000000000000000000000000000000000000000000000000000000000081c30435472879db2c7dce3cfbcab917c67513b2b455a6f849aafc4d9ead5c0ab95806b54433040556a8095aabfd5ead6c1ac97816c57422c17020000000a1f33465873889db3c8dbc6b19b86715c657a8fa4b6c8b39e89768a9fb4c9c7b29c87725463798ea5b6cac9b49f8a77614c36251300000000000000000b2034485970747575757575757573604b35200b000000000000000000071a2d3d4f647a8fa2b4c8dcddc8b29d887c7c7c7c7c7c7c7c7c7c7c8095aabfd5eadbc5b09b85705645321e090000000000000000001a30455a6f859aafc4daefe6d1bca7917c67523c2712000000000000000000000004182a3b51677c91aabbcee2e9d7c7ad98836e5544311d08000000000000000000000000000004121f2d38454b5b636e79828991989da5a5a8a9abacabaaa8a5a49c968e847b6e62594b3f31231305000000000000000000142a3f54697f94a9bed4dfc9b49f8a75604a35200b17293a4b6073869cb1bfd0e6d8cec9ced8e6ebd6c0ab96816b56412c160100000000000000000000011426365a6f859aafc4daefdec9b49f8a7368686a6f7e93a4b5c9e2f2ecdac9b49f8a77624c3928160000000000000000000000000000000000000000000000000006192c3c51667c91a6b7cbe0f4e2cdbaa998836e5f4d3a2a18040000000000000000000000000000000000000000000000000000000000000000011426365a70859aafc5daecdac9ae98836e59483442576c8297acc1d7ecdcc7b29d8773604a353d53687d92a8bdd2e7d9c4ae99846f59442f1a040000000c21364c61768ba6b7cbdac5af9a85705a5d72879cb2c9b8a7947f94a9bacec4af9a846f5a5b72879db2c7cebaa9947f6a5443301c070000000000000005182b3b48556060606060606060605443301c08000000000000000000000f22374b5c70849aafc1d2dfcbb7a68e79666666666666666666697e93a8bed3e8d6c0ab96816b56382816030000000000000000001c31465c71869bb1c6dbf0e5d0baa5907b65503b26100000000000000000000000000c21364b60758a9fb4c9dff3dec9b49e8974604b36200b000000000000000000000000000000010f1a28323d494e5c646d757c83878c9093949597969593908c8680796f655d4c483b2f2113050000000000000000000012273c51677c91a6bcd1e2cdbaa98c77624c37220d1f334658687e93a4b6c9ddd8c8bbb4bbc8d8ead8c3ae99836e59442e19000000000000000000000000182d42586d8297adc2d7ece1cdbaa9947f7e7e7f84939cadc2d2e5f2e3cfbcab97826c5947341b0b000000000000000000000000000000000000000000000000000c2135495b6f849aafc4d5e7f7ead7c7b2a0917c675847331f12000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2d7ecdfc9b49f8b77624c3c3f556a7f94aabfd4e9dfcab6a5907b6550403b50657b90a5bad0e5dbc6b19c86715c47311c0000000010253a4f657a8fa4c4d5d8c3ae99836e59556a7f94abbcc5b29d889db2c7d8c1ac97826c57566b8196abc4d5c7b29d8773604a35200d00000000000000000d1d2b37444b4b4b4b4b4b4b4b4b433626140100000000000000000000081b2e3e50657b90a3b5c9ddd4c4ac97826c58515151515151576c8297acc1d7e6d3c3a6917c66513c2711000000000000000000001d32475c72879cb1c7dcf1e4ceb9a48f79644f3a240f000000000000000000000000091e32455671869bb1c6dbf0e1ccb9a88e7a644e39240f00000000000000000000000000000000000a151d2c363d4a4e5660676d72777b7d7f808181807e7b77716b635b504b3f342a1d110300000000000000000000000f243a4f64798fa4c6d7e9d7c7a48f79644f3a24192c3c4c6176889eb3c2d3e2cebbaa9faabbcee2dbc6b09b86715b392917030000000000000000000000152b40556a8095aabfd5eae9d7c7ae9d9493939499a1adbacae0eee2d5c5b59f8c79634e3b2a1800000000000000000000000000000000000000000000000000031628384d63788c9fb5cadfebe3dfe3cfbeb39e8877614c40301c0c0000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5eae2cebbaa96816b5b493853687d92a8bdd2e7e6d3c3af9a84705e4d3c4e63788ea3b8cde3ddc8b39d88735e3828150200000013283e53687d93a8bdd2d7c2ad97826d584d62788b9fb4cab7a69da6b7cbd4bfa9947f6a544f657a8fa6b8cbcab6a5907b66503b2b180500000000000000000d192731353535353535353535302618080000000000000000000000001023384c5d70859bb0c2d2dec9b49e8a76614c3c3c3c3c3b5b70859ab0c5dadfcab6a58c77614c37220c000000000000000000001c31475c71869cb1c6dbf1e3ceb9a38e79644e39240f00000000000000000000000002162838576c8297acc1d7ece8d6c6a7927d68523d2813000000000000000000000000000000000000020f1a212d3638454b5158586166686a6b6c6c6b69656259564e493d372e1f180d000000000000000000000000000c22374c61778ca8bacde1d1bca6917c67513c272035495a6b8096a6b8cbe0cfbeb49f8a9fb4c9dfdec8b39e89735746331e0a000000000000000000000013283d52687d92a7bdd2e7f5e5cbbbaea9a8a8aaafb3bfcad8e8ded1c4b8a798836e5b49351d0d00000000000000000000000000000000000000000000000000091e3245566b8196abbccfe3d9cfcacfd9cbb8a698826e5e4d3a2a17040000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2e7ead8c8b49f8b7963564752677c91a7bcd1e6f0dcc8b4a2917c665a494d62778da2b7cce2dfc9b49f8a745645321d09000001172c41566c8196abc1d6d6c0ab96816b56485a6f849aafc6c4b7b2b7c4d4d1bca7917c67524b6074889eb3c8d3c3ae99836e594834200900000000000000000009151d2020202020202020201c140800000000000000000000000000091c2f3f51667c91a4b5c9decdb9a8937e69543f2e2734485974899eb3c9dedcc7b29c87725947341f0b000000000000000000001b30455b70859ab0c5daefe4cfbaa58f7a65503a25100000000000000000000000000013283e53687d93a8bdd2e8ebd6c0ab96816b56412c160000000000000000000000000000000000000000060f1a212832363c3a474c5053545657565553504c473b39362c231c110500000000000000000000000000000a1f34475974899fb4c9ded3bea9947e69543f292e3f4d62788b9fb4c5d5d7c7b2a0957f95aabfd4e0ccb8a78b76614b36210c000000000000000000000010253b50657a90a5c9d9ebfee9d9cbc2bebdbdbfc4c7d0dde8e3d1c0b4a69d8978624d3d2c1a00000000000000000000000000000000000000000000000000000b21364b6075899eb3c9dad9c9bcb4bcc9d3c4b2a0917c665847331f120000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d9ebf6e1cdbaa99b8574615853687d92a8bdd2e7e0d3cac0b39e8878635b5363798ea3b8cee3e2cdbaa98b75604b36200b0000031729395a6f849aafc4d9d4bfaa957f6a553c52677d92a8b9cccbc8cbd4e2d7c6a48f79644f43546d8297acc6d6cab49f8b77624d3726140100000000000000000001080b0b0b0b0b0b0b0b0b08010000000000000000000000000000001120354a6073869cb1c3d3d7c6b19c86725d4b3722374d62778ca7b9cce0d7c2ad97826d583b2a1804000000000000000000001a2f44596f8499aec4d9eee6d0bba6917b66513c26110000000000000000000000000011263b51667b90a6bbd0e5eed9c4af99846f5a442f1a00000000000000000000000000000000000000000000070a161e21272a33373b3e3f404241403e3b37342a23211a0f080000000000000000000000000000000004182a3a5c71879cb1c6dcd6c1ab96816c564125364b5d6e8398a9bacee1cdbaa99882798ea3c6d7e8d5c5a38e79634e39240e00000000000000000000000d23384d62788dabbccfe3f7f7e9ded6d3d3d3d4d9dce3eef1dcc8b4a29a887a645a48351f0f00000000000000000000000000000000000000000000000000081b2e3e53687d92a7b8cce3cfbcab9fabb6c2cfbeb39d8876614c40301c0c0000000000000000000000000000000000000000000000000000000000000e23384d63788dabbccfe3f7e9d7c7b5a39a83766b686d8298adc2d7e5d3c2b6b1b6a69c86796d686b7e93a8bdd3e8dfc9b49f8a745645321d0900000a1e33465773889db2c8ddd3bea8937e69533e4b6075899eb4c9dedddfe7e1cdb9a88c77614c3651667b90a8b9cdcebbaa957f6a5544311d0800000000000000000000000000000000000000000000000000000000000000000000000000071c304354677d92a5b6cadecab6a4907b65503b2b3b50667b90a5c5d6e8d5c5a8927d68533d28130000000000000000000000182e43586d8298adc2d8ede7d2bda7927d68523d2813000000000000000000000000000f253a4f647a8fa4b9cfe4f0dac5b09b85705b46301b00000000000000000000000000000000000000000000000002090b12171f2126282a2b2c2c2b2926221f180e0c06000000000000000000000000000000000000001a2f445a6f8499afc4d9d8c3ae99836e5944304354657a8fa0b2c7d8d4c4b49f8a78778ca8b9cde1d0bba6907b66513b261100000000000000000000000b20364b60758a9fb4cadff4fbe9d9ccc2bfbdbfc5c8d1e2ebdac5b09a8577645c4b3c2b1902000000000000000000000000000000000000000000000000000d22374b5c71869bb0c5d6dfcab49f8b9ca4b6cacbb8a698826d5e4c3a2a170400000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cadfedddd0c7c1b3a29a88807d818d9fb4cadfdecab6a49ca4b5a49c8a827d80899eb3c9def2ddc7b29d88725d3828150200000c21364b61768ba6b7cbdfd2bca7927d67523d45576d8297adc3d4e6f4f3dec9b49e89745947364b6075899eb4c9d9c8b29d8874604b35200e000000000000061016181d1d1d1d1d1d1d0e0c060000000000000000000000000000000000001325364b6074879db2c4d4d3c2ae98836e5948343f54697e94a9bed3e0ccb8a78d78634e38230e0000000000000000000000152a40556a7f95aabfd4eae9d4bfaa947f6a553f2a15000000000000000000000000000e23394e63788ea3b8cde3f1dcc6b19c87715c47321c00000000000000000000000000000000000000000000000000000000040a0c1113151617171614100d0b0500000000000000000000000000000000000000000002172c42576c8197acc1d6dbc6b09b86715b38394a6072859bb0bfcfdfcbb7a695806b74899eb4c9ded3bea8937e69533e29140000000000000000000000081d31445573889db2c8ddf2f1deccbbafa9a8aab0b4c0ced9dcc8b4a2978174605645321e1403000000000000000000000000000000000000000000000004182a3a4f647a8fa3b5c9e3d7c2ad9882869cb1c1d1c4b2a0917c665847331f120000000000000000000000000000000000000000000000000000000000091d31455673889db2c8dde2d0bfb3aeb3b3a69e9692979fabbccfe3d6c5b19c879ba3b5a99f9792959ea7b9cce0efdac5af9a85705a45301b0000000f243a4f647a8fa4c4d4e6d0bba6907b66513b3950657a8fa5b6cadff7f1dbc6b19c86715c3a3245566e8398aec7d8cbb7a6917c66513c2c1906000000000a18232b2e323232323232322321190e0000000000000000000000000000000000081d314455687e93a6b7cbdfcab49f8b77624c3736586d8297adc2d7dec8b39e8874604a35200b000000000000000000000011263c51667c91a6c4d5e7edd8c3ae98836e593a2a17040000000000000000000000000d22374d62778ca2b7cce1f2ddc8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4ddc8b39e887356454557687d92a3b5c9ddd2c1b39d88756172879cb1c7dcd5c0ab96806b56412b160100000000000000000000021527375b70859ab0c5daefebd7c2af9d9493949aa2b4bbc8d9d1c0b1a0978474604b4332211000000000000000000000000000000000000000000000000a1f3347586d8298adc1d2e4d2c2a7927d7d91a3b4c9cfbeb39d8876614c402f1c0c00000000000000000000000000000000000000000000000000000000021527385b70859bb0c5dadbc7b3a1999ea7b8b3aba8acb4bcc9d9e0ccb8a78f7b859ba8b9b4aca8aab3b9c5d6e8e4d0bfaa947f6a553f2a1500000013283d52687d92a7bdd2e4cfbaa48f7a654f3a354a6073879db2c9daeceed9c3ae99846e5944283852677c92a9baced4c4af99846f5a4935200a000000061828353f434747474747474738352c1e0e00000000000000000000000000000000011426374b6075889db2c5d5cebbaa957f6a5544435470869bb0c5dbd9c3ae99846e5443301c0700000000000000000000000d22384d62788da6b8cbe0f2dcc7b29d87725847331f0a0000000000000000000000000d22384d62778da2b7cce2f3ddc8b39e88735e49331e00000000040a2020202020202020202020202020202020201f1e1d1b1814100c0a030000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcd1e0cbb8a68b76604b4b6075889db2c1d2ddc9b5a3927d68576f8499afc4d9d8c3ae98836e59432e19000000000000000000000000182e43586d8398adc2d8ede9d4bfa9947f7e7f85929faabbcee2cebeb1a298826e614f3f2e1d0d000000000000000000000000000000000000000000011426364c61778a9fb4c9dfdec9b5a48d7870859babbccfcbb7a698826d5e4c3a29170400000000000000000000000000000000000000000000000000000000192e43586e8398adc3d8d9c4ae9983899ea9bac6bdc1cacfd9e7d6c6b39e8974798a9eaabbc8bdc0c9ccd6e4e5d6c6b3a18e79644e39240f000001162b41566b8096abc0d5e3ceb8a38e79634e393043546a8095abbccfe3e4d6c1ab96816c56412c364c61768a9fb4c9dfcab59f8c78624d3827150200001023354653585d5d5d5d5d5d5d4d493c2c190600000000000000000000000000000000091d324556697f94a7b8ccd8c8b29d8874604b4a6074899eb4c9ded7c7a9947f69543625130000000000000000000000000b2035485a73889db3c8ddf2dfcab6a58c76614c37210d0000000000000000000000000f24394e64798ea3b9cee3f2ddc7b29d88725d48331d0000000c171f353535353535353535353535353535353535353332312e2a25211e170c0a04000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c7d7e7d5c5a38d78634e596a8095a6b7cbdfcfbfb19b857360576c8297acc1d7dbc5b09b86705b392816030000000000000000000000162b40556b8095aac0d5eae4ceb9a48f79686a707d8c9fb4c0d1dccec0b2a0947f695d4b3b2a19090000000000000000000000000000000000000000081c3043546a7f94a9bacde2dbc6b19c8671647a8d9fb5c6d5c4b2a0917c665847331f1200000000000000000000000000000000000000000000000000000001162b40566b8095abc0cfd7c1ab96817b8b9fa8b6c3ccd6d9d9d5c9b9a897816c667c8c9faab8c4cdd6d8d9d8d2c7b9a899836f5c4a36210d000003162839596f8499aec4cfcfd5c5a28c77624d3725364d62788c9fb5cad9cfcfbea9937e69543e293346576f8499afc7d6cfbcab95806b5645311d090000162b3f53646d72727272727272635b4935210c00000000000000000000000000000000021528384b6175889eb3c6d6cbb7a6917c66514d62788da8b9cde1cdbaa98f7a654f3a251000000000000000000000000005192b3c576c8297acc5d6e8e6d4c3a7917c67523b2b1805000000000000000000000010253a50657a8fa5bacfe4f1dbc6b19c86715c47311c00000c1c29334a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494746433f3b363329211f170b0500000000000000000000000000000000000000000000000000000d22374c62778ca9bacde1d0baa5907b655062778a9fb4c4d4d8c7b2a18f7b6554556a7f94aabfd4ddc8b39e88735745321e09000000000000000000000013283e53687d93a8bdd2e8e6d1bca7917c67555f6a7f94a2b4c5d6decfbeb49f8c7b65594737261401000000000000000000000000000000000000000b20354b6073879db2c7d7e6d4c3aa95806b5c6d8297a8b9cdcfbeb39d8876614c402f1c0c00000000000000000000000000000000000000000000000000000013293e53687e93a8b9b9c7baaa957f6a7c8a9da5b4b9c6c4c4c4b7ab9e8a77625e677d8c9ea6b4b9c6c3c4c2c1b5a99e8a79634e3d2d1a070000091e32455772879db2b9b9b9c6b8a78b76614b362135495a70859aafbbc8bababda6917b66513c26293953687e93a9b9c5b9c9b39e8875604b36200b0000182e43586d828787878787878779634d38230e00000000000000000000000000000000000a1e3246576a7f95a8b9ccd4c4af9a846f5b51667b91a6c6d7dfc9b49f8a75604b36200b0000000000000000000000000011263b50667b90a7b9cce0edd8c3ae98836e594834200e000000000000000000000114263654697e93a9bed3e8eed9c4ae99846f59442f1a000417293a465e60606060606060606060606060606060605f5e5d5b5854504c463936332920180d040000000000000000000000000000000000000000000000000b1f34485974899fb4c9ded2bda8927d685c6d8298a8bacde2cebaa999836e5d4b52677d92a7bcd2e0cbb8a68b76604b36210b000000000000000000000011263b50667b90a5bbd0e5e9d4bea9947f69544b6073849aa7b9cce0e2cebbaa9d8877625544311d1200000000000000000000000000000000000006192c3c51667b90a5b6cae5dfcab7a58e79644f62778a9eb4c3d4cbb7a698826d5e4c3a291704000000000000000000000000000000000000000000000000000011263b51667b90a4a4a4a4a99f907b65667a87959ea8acaeafada69d8d7c66594d5f677b88969ea8abaeafadaaa39b8b7c665b49361f0f0000000b21364b60768a9fa4a4a4a4a4a89e88735746321e2b3c52677d929faaa5a5a5a59f8d78634e382322374c61778a9ea7a4a4a4a4a6917c67523c271200001b30455a70859a9c9c9c9c9c8e79634e39240e0000000000000000000000000000000000031628394c6176899eb4c7d7cab59f8c7863546a7f94a9bfd4dac5b09a85705645321d09000000000000000000000000000b20364b6075899eb3c8d8eadfc9b49f8b77624c3c2b1808000000000000000000081c3043546d8298adc2d8edebd6c1ab96816c56412c17000a1f334658707575757575757575757575757575757575747372706d69656157524c463a342b1f170b000000000000000000000000000000000000000000000005182a3b5c72879cb1c7dcd5bfaa95806a647a8d9fb5c6d7d5c5b49f8b78634d3f50657a8fa5c8d9e7d5c5a38e78634e39230e00000000000000000000000e23384e63788da3c4d5e7ecd6c1ac97816c5743546278899eb3becee1d8c8b7a69a8473604b402f1e0e00000000000000000000000000000000000c2035495a6f8499afc3d4e6ddc7b29d87725c4a596a7f94a5b7cad4c4b2a0907c665846331f1200000000000000000000000000000000000000000000000000000e23394e63798e8f8f8f8f8e8a806a5d5c64758089919699999792887c665e4d414d5d657681899196999a98958f8579665e4c3d2c1a010000000f24394f64798e8f8f8f8f8f8f8e8a7d675239281620354a6072818b8f8f8f8f8f8d816d5b4935211f344759677d898e8f8f8f8f8f8f85705a45301b05001b30455a70859aafb2b2b2a38e79634e39240e0000000000000000000000000000000000000b1f3347586b8096a9bacdcfbcab96816c576e8398adc3d8dac9ab96806b563828150200000000000000000000000000091d3145566b8196aabbcee2e2cebbaa96806b5a483625130200000000000000000d20354b6074889db2c8ddf2e5d3c2a7927d67523d2812000c21364c61768a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a888786837f7a766f6861584d483b33291b1101000000000000000000000000000000000000000000001a2f455a6f849aafc4d9d7c2ad97826d70859aabbccfe0cbb8a696806b5a49384d62788daabbcee2d0bba5907b66503b261100000000000000000000000b21364b60768ba6b8cbe0eed9c4ae99846f5936485a677c91a0b1c3d3e6d4c4b4a295806b5e4c3c2c1a0a000000000000000000000000000000021628384d62788c9fb5cadfe7d5c4ab96816c563e4b6075879db2c1d1cebeb29d8876614c402f1b0b000000000000000000000000000000000000000000000000000b20364b60737a7a7a7a7a79766a62504a57616b757c818484827d75665e4d40303f4b58616b767c81838483807a71635b4c402f1f0f000000000c21364c61767a7a7a7a7a7a7a7976675f4d391b0b1c304354606c777a7a7a7a7a786d63523d2c1a182a3b4d5f6775797a7a7a7a7a7a7a644f3a240f00001b30455a70859aafc5c7b8a38e79634e39240e0000000000000000000000000000000000000417293a4c62778a9fb4c8d8c9b49e89766172879cb1c7dccfbcab917b66513c26110000000000000000000000000000021527384d62788b9fb4c6d7e9d8c8b49f8a78625443301d150a0000000000000d1d2f4050667b90a6b7cbdff3decab6a48d78634d38230e000a1f33465874899e9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9c9b9894908a847d766c62594c463a2f1d1409000000000000000000000000000000000000000002172d42576c8297acc1d7dac4af9a856f7c91a2b4c9dad2c2b39e8876614c3c354b60758a9fb4cadfd3bda8937e68533e29130000000000000000000000091e32455673889eb3c8ddf1dcc6b19c87715c3a3c4d5f6d8297a5b6c8d8e2d1c0b59f8d7c665a49382816020000000000000000000000000000091e3245566b8096abbccfe3e0cbb8a68f7a65503a4556677d92a3b5c9ddcbb7a697826d5e4c3a291704000000000000000000000000000000000000000000000000081d314455606464646464636157504439464b5761676c6f6f6d6860574c4030222f3a474c5761676b6e6f6d6b645c4e4a3d2f221101000000000a1f33465861646464646464646461584d41301e00132536434a59626565656565625a5245351f0f0c1d30414d576164646464646464645c4b37220d00001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000000000000000000000000c1f3447596c8197aabbceccb9a8937e69768a9fb4cadfcab59f8b77614c37210c0000000000000000000000000000000a203448596d8298a8bacde1e1cdbaa99a8472604a4231271c130d0b0b0d131d2b3b4c5e6e8399aec4d4e6ecdac9b19c87725a4935200c000417293a5c71869cb1b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b3b2b0ada9aa9f99928a81776c61584c3f3126190a0000000000000000000000000000000000000000152a3f546a7f94a9bfd4dcc7b19c8775879db2c0d1dec9b5a4937e6858463331445573889db2c8ddd5c0ab95806b56402b160100000000000000000000031628385b70869bb0c5dbf0dec9b49e8974584733414b6175879caabbcee2e3cfbcab9e8978625645321e1301000000000000000000000000000b21364b6075899eb3c9daecddc8b39e8874604b35384a6072859bb0becfd4c4b1a0907c665846331f1100000000000000000000000000000000000000000000000002152737444b4f4f4f4f4f4e4b463933283239464b5257595a58524b45392f22121c2a3339464b5156595a58554f4a3e362d1f110400000000000417293a464c4f4f4f4f4f4f4f4f4c463a30231301081825303b484c4f505050504d493c352717010013233039464b4f4f4f4f4f4f4f4f4b3e2e1b0700001b30455a70859aafc5ceb8a38e79634e39240e0000000000000000000000000000000000000005182a3b4d62788b9fb4c9d6c6b29d8773798fabbccfdcc6b19c87715847331f0a00000000000000000000000000000005192b3b4d62788a9fb4c1d2e3d7c7b3a195806a614b453830252220202224313b4859667c90a1b3c7e2f2e3cfbcab95806b563c2c19060000192f44596e8499aec3cacacacacacacacacacacad8cec9c8c7c5c2c8bbb4afa99f968a8176655d4b4437281a0b0000000000000000000000000000000000000012273d52677c92a7bcd1ddc8b39e887f94a5b6caded0bfb19c8673604b3a2927375b70859ab0c5dad8c3ad98836e58432e19000000000000000000000000192e43596e8398aec3d8ede1cdb9a88c77614c37324657647a8b9fb4c0d1e3dac9b9a79b8574604b4231200f000000000000000000000000071b2d3e52687d92a7b8cce7e8d6c6ac97826d544330304354657a8fa0b2c7d7cebeb29d8876614c402f1b0b00000000000000000000000000000000000000000000000009192731363a3a3a3a3a393632281b161e2832363c414444423d3632281b12040c171f2832363c41444543403a362d211a0f01000000000000000c1c2933363a3a3a3a3a3a3a393633291b1305000008131c2b34373a3a3a3a3a38352b1e1709000005131b283236393a3a3a3a3a3a3a372e20100000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000000000000000000000000000d2035485a6d8297abbccfcab6a5907c7d92a7c9d9d7c2ac97826d573a2a1704000000000000000000000000000000000d2035485a697f94a3b5c5d6e5d0bfaf9e937f6c60564a43363735353739414e596277879db2bfd0e2f2dfcab59f8c78634d38230e000002172c41576c8196acc1d6dfdfdfdfe6dfdcd0d0d0d0d0d0d0d1d4d8d8cec9c7bab4a99f96877b6c60554538291b0b0000000000000000000000000000000000000f253a4f647a8fa4c7d7dfcab49f8c899eb3c3d3d8c8b3a1907b655544311b2e43586d8398adc2d8dac5b09b85705b382815020000000000000000000001162b41566b8096abc0d5ebe9d7c6a48e79644f3929394a5c6a7f94a2b4c5d5e7d6c5b5a397816d604e3e2d1c0c00000000000000000000000d22364a5c70859bb0c5d5e8e1ccb9a8907b6650362625364b5d6e8398a9bacddfcbb7a697826d5e4c3929170300000000000000000000000000000000000000000000000009151d20252525252524211e160b030b161e21272c2f2f2d28211e160a000000040b161e21272c2e2f2e2b24221b1007000000000000000000000c171f212525252525252524211f170b0000000000000d18202225252525252320190e0000000000000b161e212425252525252524221b10020000001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000000000000000000000000005192b3c4e63798c9fb4cad3c3ae99838096abc0d5d5c4a7927d68523d2813000000000000000000000000000000000006192b3c4b6073859ba7b9c8d8deccbcae9d938174666054504c4b4b4c4f555f6877869ca6b7cbddede2cfbeaf99846f5a4935200c00000014293f54697e94a9bed3e9fff1e1d3cac7bbbbbbbbbbbbbbbcbec2c8cbd5d7cdc7bab4a69d9081736056463929190900000000000000000000000000000000000d22374d62778ca9bacde2cebbaa9f9ea8b9cce2cebbaa99836f5e4c3726142b40566b8095abc0d5ddc8b39d88735645321d09000000000000000000000014293e53697e93a8bed3e8e6d1bca6917c67513c272d3e4b6072849aa7b8cce0e3d2c1b19f927d685c4a3a29180800000000000000000004172a3a4f647a8ea3b5c9e3f3dec9b39e8975604b3620182e3f4d62788b9fb4c5d5d4c4b19f907b665746331e110000000000000000000000000000000000000000000000000002080b0f0f0f0f0f0e0c090300000003090c12171a1a18130b090300000000000003090c1216191a18160f0d0700000000000000000000000000040a0c0f0f0f0f0f0f0f0f0c0a040000000000000000050b0d10101010100d0b06000000000000000003090c0f0f0f0f0f0f0f0f0d0700000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000000000000000000000000000000000e2135495b6e8398aebfd0cab49f8c859bb0c5dbcbb8a68d78634d38230e0000000000000000000000000000000000000e1d3144556379899eaabbc9d9dacbbbae9f96867c736b6562606062646a717d899ca4b6c4d4e6e6d5c4b2a08e7a644f3c2c190600000011273c51667c91a6bbd1e6f9e6d3c3b6b2a5a5a5a5a5a5a6a7a9adb3b8c5c8d1d7cdc4b7b29f96837461574637261401000000000000000000000000000000000b20354a60758a9fb4c9dfd8c8bbb4b3b9c6d6d6c5b49f8b79634e402f1913293e53687e93a8bdd3dfcab59f8a75604b36200b000000000000000000000011263b51667b90a6bbd0e5e9d3bea9947e69543f291c3043546277899eb3bdcee0dfcebdb49f8b7a6458463625130000000000000000000a1f3347586d8297adc1d2e4e9d7c7ad98836e5645311d102035495a6b8096a7b8cce0cebdb29d8776614c402f1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000000000000000000000000000061a2c3d4e64798ea1b3c7cebbaa9f9ba3b5c9ddc8b39d88735a4935200c00000000000000000000000000000000000001142637495b657b8c9fabbbc8d7d9cbbdb0a49c9086807a77757577797f86929ea7b6c3d3e2e7d8c8b8a698826d5c4a361e0e000000000f24394f64798ea4c6d6e9f3dfcab6a59c909090909090909194989ea6b0b4c0ccd6d4cbbdb0a1998475615544311d1300000000000000000000000000000000071c30435472879cb2c7dce6d8cecac9ccd6e0ccb8a796816c5b4935211111263b51667b90a6bbd0e3cfbcab8d78634e38230e00000000000000000000000e24394e63798ea3c5d6e8ebd6c1ac96816c57412c1426364859667c919fb1c2d3e5e1cdbaa99c8776615443301c1100000000000000001325364c61768a9fb4c9deefe1cdbaa9917c675138271506192b3c4c6176889eb3c2d3dfcbb7a597816d5e4c392917030000000000000000000000000000000000000000000000000000000000000001080b0f121415161514120f0b08020000000000000000000000000000000000000000000000000000030d13152020202020202020202020202020202020202020202020202020202020202020201c1a140a0000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000000000000000000000000000000f22364a5c6f8499afc0d1c8bbb4b0b5c1d2d8c3ae99836e593c2c19060000000000000000000000000000000000000009192c3d4c5d687e8d9faabac7d2e3cdc2b6b1a49c95908c8a8a8c8e959ca4b3b8c5d3e1e6d9c9bbaa9d8876614c3e2d1b00000000000c21374c61778ca8b9cde1f1dcc7b29c877c7b7b7b7b7b7b7c7f8388909aa2b3b9c6d4dfcdbfb3a2998373604b41311d0d000000000000000000000000000000001325365a6f849aafc4d9efeae2dfdee1e5d3c2b39e8976614c3d2c1a030e24394e63798ea3c5d6e8dac9a5907b65503b261000000000000000000000000c21364c61768ba7b9cce0eed9c4ae99846f59442f1a182b3b4d5e6c8197a4b6c7d8e9d7c7b6a5998372604a3f2e1d0d000000000000071c304354697f94a9bacde1f4dec9b49f8a76614b36210c000e1f334658697e93a4b6c9ded4c3b19f907b655746331e110000000000000000000000000000000000000000000000000000000003090c151d202427292a2b2a292724201d150d0b0500000000000000000000000000000000000000000000071520282a353535353535353535353535353535353535353535353535353535353535353535322f271c0e00000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000000000000000000000000000000071b2d3e4f657a8fa2b4c8d9cecac5c9d2dfd7c7a9947e69543f29140000000000000000000000000000000000000000000e1f2f3f4e60687e8c9fa9b5c2cfd9d3cac2b6b1aaa5a1ab9faba4aab1b5c2ccd5e3e3d5c8bbab9f8c7b65584733201000000000000a1f33475874899eb4c9def3ddc8b39e887366666666666667696d747b85929ea8b7c3d4ddcfc0b3a197816c5f4e3b2a1805000000000000000000000000000000182d42576d8297acc2d7ecfef7f4f3f6decab6a4937e695847331f0f000c21364b61768ba7b9cce0d2bda8937d68533e281300000000000000000000000a1e33465774899eb3c9def1dbc6b19c86715c3a2a170d1d30404b6075869ca9bacee2e5d3c3b3a1947f6a5d4b3b2b190900000000000b20354a6073879db2c7d7e9ebd9c8ae99846e5746321e0a000417293a4b6074869cb1bfd0e2cebdb29d8775614b3f2f1b0b00000000000000000000000000000000000000000000000000030b161e21273135393c3f4040403f3c393631272220180d0700000000000000000000000000000000000000031525333c3f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4743392c1c0a000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000000000000000000000000000000001022374b5d70859ab0c1d2e2dfdbdde4e1cdbaa98f7a644f3a240f00000000000000000000000000000000000000000000112131424e5f687c8b9ca4b4bcc9cfdad3cac7c0bab7bcb4bcc9bfc6c9d2e0e3dccfc5b8aa9f8d7e685d4b3a2a1702000000000004172a3a5c71879cb1c6dcf1e0cbb8a68b766050505050515254546066707d8a9da5b7c4d5ded0bfb19f927d685947341f10000000000000000000000000000000152a3f556a7f94aabfd4e9fffffff6e6d0c0b19c8674604b3a2a1701000a1e33465774899eb3c9ded5c0aa95806b55402b160000000000000000000000031729395c71869bb1c6dbe1dec9b49e89745847331f0a121e324557647a8b9fb4c0d0dfe3d0bfb49f8c7b6559483727150100000006192b3c50667b90a5b6cae5e1e2cebbaa927d68523929160300000b1d314455667b90a1b3c8d8dfcab7a597816c5d4c3929170300000000000000000000000000000000000000000000000a161e28323637444b4e515455555554514e4b443737342b221b100500000000000000000000000000000000000d20334350556060606060606060606060606060606060606060606060606060606060606060605c564a392714000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000000000000000000000000000000000000081b2e3f50667b90a3b5c9dde1e1e1e1dec9b49f8975604b36200b0000000000000000000000000000000000000000000003142431414e5e667986969fabb5bcc9ccd6dcd5cfd9cfcacfd9d4dcdededcd0c8beb2a79e8c7e68604e3f2e1c0c000000000000001a2f44596f8499aec4d9eee7d5c4a38d78634e3b3b3b3b3c36434b515f6779879da6b7c8d9ddcebdb39e8977624c3f2e1b08000000000000000000000000000012283d52677d92a7bcd2e7fffffeebd9c8b3a2907c665544311c0c0000031729395c71869bb1c6dbd8c2ad98836d58432e18000000000000000000000000192f44596e8499aec3ccccccccb9a88c76614c37210c031628394a5c697f94a2b3c1cacfdacebbaa9d8877625544311d120000000b2035485a6f8499aec3d3ccccd4cab49f8b77614c37210c000000011527374c5e6f849aaabbc9d3d4c3b19f907b655746331e1100000000000000000000000000000000000000000002101a283239464b5255606467696a6b6a6967646055544d483b362d1f180d0000000000000000000000000000000013283c50616a757575757575757575757575757575757575757575757575757575757575757575716856432f0c000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000000000000000000000000000000000000001023384c5e71869bb0c2d3ccccccccccc5af9a85705544311d08000000000000000000000000000000000000000000000006142331404c5b6374808c989fabb3b9c5c7cad3d2d4d5d6d6d5d3d3c9c6c0b4afa098897b68604e413121110000000000000002172c41576c8196acc1d6ebe5d0baa5907b65503b26262627263035414d5b6378889daabbcee2e0ccb8a798826e5d4b37220f000000000000000000000000000010253a4f657a8fa4c8d8eafdfff7e2cebbaa9a846f5e4c37271500000000192f44596e8499aec3d9dac5b09a85705b372715020000000000000000000001172c41566c8196abb6b6b6b6b6c6a48e79644f39240f000a1b2d3e4a6072849aa3b1b5bcb6b6b6b8a69a8473604b40301d0a00021528384d62788c9fb4b6b6b6b6c4b7af9a846f5847331f0a0000000009192f404e63798b9fabb6c2b6b6bdb29d8775614b3f2f1c08000000000000000000000000000000000000000513202e38454b5761686f75797c7e7f807f7e7c7975706962594f4a3e342a1d12040000000000000000000000000000152a3f556a7f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86715c3a2a18040000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000000000000000000000000000000000091c2f4051677c91a4b6b6b6b6b6b6b6b6aa95806b5537271502000000000000000000000000000000000000000000000000051322303d4a56606b79838c979ea7adb2b6c3bdbfc0c1c1c0bec2b6b1aba29a8f8377655d4e42312313030000000000000000142a3f54697f94a9bed4e9e8d2bda8937d68533e28131112141c20303d495a647a8c9fb4c4d5e7d6c5b2a08f7a644f3d2c1a06000000000000000000000000000d22384d62778daabbcee2f7fce8d6c6b49f8c79634e402f190900000002172c41576c8196acc1d6ddc8b29d88735544311d08000000000000000000000014293f54697e94a1a1a1a1a1a1a1a1917c66513c27110000101c304354617685959c9faba1a1a1a1a1a296806b5e4d39240f00091d3245566b8095aba1a1a1a1a1a1a69d907c66503a2a170400000000001221364a5b687e8d9ca4a1a1a1a1a1a597816c5d4b37230e000000000000000000000000000000000000051323303e4b56606a757d84898e919495959594918e89857e776e645c4c483b302215070000000000000000000000000012283d52677d929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e89745947341f0a0000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000000000000000000000000000000000001120354b6073869ca1a1a1a1a1a1a1a1ab907b66503b2611000000000000000000000000000000000000000000000000000004121f2d38454b5b636e79828991989da5a5a8a9abacabaaa8a5a49c968e847b6e62594b3f3123130500000000000000000012273c51677c91a6bcd1e6ead5c0aa95806b55402b1600000108131f2c3c4b5c6b8095a6b8cbe0e3cfbeae99836e5b49362108000000000000000000000000000b20354b60758a9fb4c9dff4f5e1ccb9a897816c5b4a3622120000000000142a3f54697f94a9bed4dfcab49f8a75604b36200b000000000000000000000011273c51667c8c8c8c8c8c8c8c8c8c8c7e69543f2914000000132536475861757f878a8c8c8c8c8c8c8c8c8c7c66513c2711000b20364b6075898c8c8c8c8c8c8c8c8b887e685e4c381c0c000000000000071a2d3d4e60687c878b8c8c8c8c8c8c8c8d7a65503b2510000000000000000000000000000000000002132330414d5c64757f8992999ea8a6a9aaaaaaa9a6a99f9a938b837a6d62594d403325170900000000000000000000000010253a4f657a8faabbb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b9a88c77614c37220c0000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000000000000000000000000000000000000081c304354687d8c8c8c8c8c8c8c8c8c8c8d76614c36210c000000000000000000000000000000000000000000000000000000010f1a28323d494e5c646d757c83878c9093949597969593908c8680796f655d4c483b2f211305000000000000000000000f243a4f64798fa4c6d7e9edd7c2ad98826d58432d1800000000000e1e2e3e4b6176889eb3c8d8eadfcab59f8c79634e36261401000000000000000000000000081c30435472879db2c7dcf2e6d3c3b39e8977614c3d2d1a04000000000012273c52677c91a7bcd1e3cfbcab8d78634d38230e00000000000000000000000b20364b60747777777777777777777775604b36210b0000000818293a4757606a717576777777777777777775614c36210c000b20354b6073777777777777777777767368604e402f1c00000000000000000f1f31424e5e667276777777777777777775614b36210c0000000000000000000000000000000000102030414d5f677a86949ea7afb4b9c6bebfc0bfbec7bab4afaa9f988c8277665e50433427170800000000000000000000000c21374c61768a9fb4c6d6cacacacacacacacacacacacacacacacacacacacacacacacacad7c6a48f79644f3a240f0000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000000000000000000000000000000000000011426364b607277777777777777777777766f5846331f0a00000000000000000000000000000000000000000000000000000000000a151d2c363d4a4e5660676d72777b7d7f808181807e7b77716b635b504b3f342a1d110300000000000000000000000c22374c61778ca8bacde1efdac5b09a85705b372715010000000000101e3346576a7f94aabbcee2e3cfbcab97816c5443301c08000000000000000000000000011426365a6f859aafc4daecdfcab6a5947f695947341f0f0000000000000f253a4f647a8fa4c7d8ead9c9a5907a65503b25100000000000000000000000081d3144556061616161616161616161605745321e09000000000c1c2939454b555560616161616161616161615746331e0a00081d314455606161616161616161616157534e42312211000000000000000001142431404d5157606161616161616161615746321e0a000000000000000000000000000000000a1a2d3e4d5f677d8b9ca4b3b8c5c9cdd7d3d4d5d4d3d7cdc9c8bbb4ab9f98897c6a61524534261605000000000000000000000a1f3347586e8399a8b9cde1dfdfdfdfdfdfe5dedbd0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0bca7917c67523c27120000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000081c30435460616161616161616161616158463a291704000000000000000000000000000000000000000000000000000000000000020f1a212d3638454b5158586166686a6b6c6c6b69656259564e493d372e1f180d000000000000000000000000000a1f34475974899fb4c9def2ddc7b29d88725544311d080000000000031729394c61778b9fb4cadfecdac9b39d8874604b35200b00000000000000000000000000182d42586d8297adc2ccdacfc0b29d8774604b3b2a18010000000000000d22374c62778ca9baceccccbda8927d68533d2813000000000000000000000002152737444b4c4c4c4c4c4c4c4c4c4c4b453928160300000000000c1b28323637444b4c4c4c4c4c4c4c4c4c4c46392917030001142637444b4c4c4c4c4c4c4c4c4c4b46393a31241304000000000000000000061422303939454b4c4c4c4c4c4c4c4c4b4639291603000000000000000000000000000000021528384a5c677d8d9fa9b6c3ccd5dee1e2dfd9d6d4d5d8deded9cec9bcb5a79e91806c635244332313000000000000000000000417293a4d62788a9eb4becfe2f2fffff0e0d2c9c6bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba9947f6a543f2a150000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000000000000000000000000000000000000001142636434b4c4c4c4c4c4c4c4c4c4c4c473a291c0c000000000000000000000000000000000000000000000000000000000000000000060f1a212832363c3a474c5053545657565553504c473b39362c231c1105000000000000000000000000000004182a3a5c71879cb1c6dcf1dfcab49f8a75604b35200b0000000000000b1f3447596f849aafc4d9efe0cbb7a68f7a644f3a250f00000000000000000000000000152a40556a7f95aab6b6b6bcb5a2917c675645321d0c000000000000000b20354a60758a9fb4b6b6b6b6aa95806a55402b150000000000000000000000000919273136373737373737373737373632281b0a000000000000000a161e212631353737373737373737373633291b0b0000000919263135373737373737373737363329261e1306000000000000000000000004121d2428323637373737373737373632291b0b00000000000000000000000000000000091d324556647a8b9fabbac7d3e0e8e6d8cecac4c1bfc0c3c9ccd6e0dacfc5b8b39e95816c625041301e0e000000000000000000000c2035485a687d92a0b2c4d4e7f7f8e5d2c2b5b1a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a597826c57422d170200000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000000000000000000000000000000000000000008182630353737373737373737373737332a1c0c000000000000000000000000000000000000000000000000000000000000000000000000070a161e21272a33373b3e3f404241403e3b37342a23211a0f0800000000000000000000000000000000001a2f445a6f8499afc4d9eee2cebbaa8d78624d38230d00000000000004182a3b54697e94a9c8d9ebe7d5c4ab96806b56412b160000000000000000000000000012283d52677d92a1a1a1a1ab9f9a846f5f4d3828150000000000000000071c30435472879ca1a1a1a1a1a198826d58432d180000000000000000000000000009151d2022222222222222222222211e160a00000000000000000003090b141d20212222222222222222211e170b000000000009141d20222222222222222222211e170b0b020000000000000000000000000000090a161e212222222222222222211e160b00000000000000000000000000000000021527384b6074869caabbc9d8e5eadccfc8bbb4afabaaabaeb3b9c6cbd5e3d5ccbcaf9f95806b5f4d3c2b190500000000000000000005192b3c4e606e8398a6b7c9d9ebf3dec9b5a49c90909090909090909090909090909090909090846f5a452f1a0500000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000008141c2022222222222222222222211f170c00000000000000000000000000000000000000000000000000000000000000000000000000000002090b12171f2126282a2b2c2c2b2926221f180e0c0600000000000000000000000000000000000002172c42576c8197acc1d6ecebd9c8a58f7a65503a25100000000000000010253a4f657a8faabbcee2efdac5b09a85705b3c2b190600000000000000000000000010253a50657b8c8c8c8c8c8c8b8477614c40301a0a0000000000000000001325365a6f848c8c8c8c8c8c8c8c84705a45301b000000000000000000000000000002080b0c0c0c0c0c0c0c0c0c0c0b09030000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0a030000000000000001080b0c0c0c0c0c0c0c0c0c0c0a030000000000000000000000000000000000000003090b0c0c0c0c0c0c0c0c0c0a030000000000000000000000000000000000091d314556697f94a4b6c8d8e7eadaccbeb2aa9f9a969496989ea8b3b8c4d1dee0ccbdb09e927d675a48352012000000000000000000000e1e31414c6176879dabbccfe3efdbc6b19c867c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b644f3a250f0000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1113151617171614100d0b0500000000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9e7d2bca7927d67523d2812000000000000000c21364b61768a9fb4cadff3dec9b39e89745a4835200b0000000000000000000000000b20354b6073777777777776756f615947342212000000000000000000000c21364b6175777777777777777776614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6074889db3c3d3e6eeddccbcafa0988b84817f808389929da6b4c0d1dfdbcdbcb49e8a78624d402f1c0900000000000000000000131f334758657b8c9fb4c1d2e4dec9b5a4927d676666666666666666666666666666666666645d4b37220d0000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcd1e6ead4bfaa957f6a55402a1500000000000000091e32465771869cb1c6dcf1e0ccb9a78d78624d38230d000000000000000000000000081d3144556061616161616160564c473b2a1804000000000000000000000a1e334657616161616161616161615846331f0a00000000000000000000000000000001080b0b0b0b0b07000000000000000000000000000000000000000000000000000000000000000001080b1b20202020202020201e12100a01000000000000010a10121e202020202020202020110f090000000000000000000000000000070b0f1314110c0a0400000000000000000000000012273c52677c91a6b8cbe1f1e3d0bfaf9e9582776f6c6a6b6e757d889aa2b4c1d1e4e1cdb9a89a846f5e4c382311000000000000000000000417293a4b5d6b8096a3b5c6d7e5d2c2b39e897862555050505050505050505050505050504f4b3f2e1b080000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000000000000000000040a0c111314161514120f0b090200000000000000000004090a0b0b0b0b0b0b0b0b00000000000000000000000000000000000000000000000000030a0c0f13141516151413110e0b0902000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c7d7e9ecd7c2ac97826d57422d1800000000000000031628395a6f849aafc4d9efe8d6c5a5907b66503b261100000000000000000000000001142637444b4c4c4c4c4c4c4b4538342a1d0c000000000000000000000003172939464b4c4c4c4c4c4c4c4c4c463a291704000000000000000000000000000009141d20212121201c1308040000000000000000000000000000000000000000000000000000000009141d203035353535353535353328251e13050000000005131e25273335353535353535353526231c12040000000000000000000008131c2024282927211f170c0100000000000000000005192b3c586e8398adc4d5e7f0dcc7b3a1957f6d625956555656606876849aa3b4c5d6e8d6c6b3a1907b66503f2e1c08000000000000000000000c1c2e3f4b6074859ba8bacde1e1ccb9a89b8573604b3e3b3b3b3b3b3b3b3b3b3b3b3b3b3a372e2010000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000000000000050b0d171f212628292b2b2a2724211e160d0b05000000090f11191e1f202020202020202012100a00000000000000000000000000000000000000060b0d171e2125282a2b2b2a2a282624201d15120c0a040000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9bacde1efd9c4af9a846f5a3625130000000000000000192e43586e8398adc3d8ede6d1bca7917c67523c27120000000000000000000000000009192631353737373737373632281f180c000000000000000000000000000b1b29333637373737373737373633291c0c000000000000000000000000000009192631353636363530251f170b00000000000000000000000000000000000000000000000000000919263135454a4a4a4a4a4a4a4a483d3a31231305000001132330393c484a4a4a4a4a4a4a4a4a3b382f221200000000000000000210182530353a3e3e3c3633291d140900000000000000000b2035485a73889eb3c8def2e5d3c2af99846f614c473b3f38454b586175859ba7b9cce0e4d0bfb09b86715d4b37230a0000000000000000000000111d31445563798a9fb4bfd0e2d6c6b4a2957f6a5c4b3929262626262626262626262625221b1002000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000000000000030d181f222933363b3d3f40403f3d3a3632282220180d09111c23262e3335353535353535353527241d1204000000000000000000000000000000070e1920232933363a3d3f4040403f3d3b3936322828211f170c08010000000000000000000000000000000000000000000000000000000000000b1f34485974899fb4c9def1dcc7b29c87725443301c0700000000000002172d42576c8297acc1d7ece8d2bda8937d68533e2813000000000000000000000000000009141d20222222222221201d150a040000000000000000000000000000000b171e212222222222222222211f170c000000000000000000000000000001142637444b4b4b4b4a433633291b0b00000000000000000000000000000000000000000000000001142637444b5b60606060606060605d524d4131231300000f1f30414d525d606060606060606060504c402f1c090000000000000210202d36434a4f5354514c463a31261909000000000000000d22384d62788da7b8cce0f3decab6a48f7a644f43342a2a28323a47576278899eb3c5d5e8ddc9b5a38f7a654f382816020000000000000000000002152737495b687e93a1b3c4d4e4d1c0b49f8c7a645746331e131111111111111111110f0d080000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000b161e2a34373a464c505254555554524f4b453837342b231c1c2f383b43484a4a4a4a4a4a4a4a4a3c3930221200000000000000000000000000030f1a212b353839464c4f52545555555453514e4b45383d37332a201c1408000000000000000000000000000000000000000000000000000000000005182a3b5c72879cb1c7dcf1dfc9b49f8a75604a35200b00000000000001162b41566b8096abc0d5ebe9d4bea9947f69543f2a1400000000000000000000000000000001080b0c0c0c0c0c0c0b0902000000000000000000000000000000000000030a0c0c0c0c0c0c0c0c0c0c0a04000000000000000000000000000000081d3144556060606060544c463a2917040000000000000000000000000000000000000000000000081d3144556070757575757575757573675f4d41301e0e061a2c3d4d5f6773757575757575757575665e4c38230f00000000000010212e3e4a54606468696661584b443726180800000000000011263b50667b90a5c5d5e8f1dcc6b19c86715c4a361f1815151d2939485a697f94a7b8cce0e4d2c1ad98826d5645321e09000000000000000000000009192c3d4e606e8399a6b7c9dae2cebbaa9d8775614b41301e0e00000000000000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000000010f1b29323b484c5558616668696b6a6967646056554d483b382f30404c50595e5f6060606060606060514d40301d0a00000000000000000000000b171e2d363c484d5557616468696a6b6a69686663605657524c473a3530261c1308000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4d9efe2cdbaa98c77624c37220d00000000000001162c41566b8196abc0d6ebe9d4bfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073757676746d615846331f0c00000000000000000000000000000000000000000000000b20354b6075858a8a8a8a8a8a8a8a887d675f4d3c2b18082135495b677d888a8a8a8a8a8a8a8a8a7b66503b261100000000000a1a2e3f4b5c64737a7d7e7c766a60554436251300000000000013283d52687d92a7bdd2e7ecd6c1ac97816c573e2d1b0500020c1b2b3c4b6175889eb3c8deefdec9b49e8975604b36210b0000000000000000000000000f1f31424c6176889dabbccfe3d9c8b6a598826d5f4d3c2b1808000000000000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000f1f2d39464b59626b71767b7d7e80807f7c7975706a6259504c40434a5e666e73747575757575757575675f4d392410000000000000000000010f1b29333d4a4e5a626a70767a7d7f80807f7f7d7b7975726d676158514b433630251810020000000000000000000000000000000000000000000000000002172d42576c8297acc1d7ecead7c7a48f7a644f3a250f00000000000003182d42586d8297adc2d7ece9d3bea9947e69543f291400000000040a202020202020202020202020202020202020201f1f1d1a17130d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d8b8b8b898276614c3a2a180400000000000000000000000000000000000000000000081d3144556278899e9f9f9f9f9fa69d8d7d675a4936251629394e63798c9da69f9f9f9f9f9f9c86715e4c38230f00000000021527384b5d657a868f9393918a7f73605443301c07000000000014293e54697e93a9bed3e8e8d3bea9937e69543e2914000000000e1e3246576c8197acc8d8eae1cdb9a8907b66513b261100000000000000000000000001141f334758657b8d9fb5c2d2e5d3c3b2a0917d675a48362614010000000000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000e1e2d3d4a57616c7780868b909294959594928f8a857f776e655e4e54606c7b83888a8a8a8a8a8a8a8a8a7c67513c2712000000000000000003111f2d39464b5c646e787f868a8f92949595959492908e8a87827d766f6660544a43362d20140600000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9e6d1bca7917c67523c27120000000000000417293a596e8399aec3d8eee7d2bda8927d68533d28130000000c171f35353535353535353535353535353535353535353432302c282220190d0a03000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798ea8a89e98836e5947341f0a0000000000000000000000000000000000000000000001142637485a677d919fb1c2b5c4b7ab9e8a78625443301e3246576c8197aab7c4b5b5b5b7a6927d6852402f1c0900000000091d314556657b8b9ca4a8a9a89e958272604a35200b000000000014293e54697e93a9bed3e8e7d1bca7927c67523d2712000000000316283950657b90aabbcee2e9d6c6ab96806b56412b160000000000000000000000000004182a3a4c5e6c8196a4b5c7d7e1cebeb39e8978625443301c100000000000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000a1b2c3c4a5b6375818b959c9faba7a9aaaaa9a7aa9f9b948b837b6f6360728190989d9faa9f9f9f9fa396816c5f4d392410000000000000000311212f3d4a57616c79838c959b9faaa7a9aaaaaaa9a8a6aa9f9c97928a847c736760544a3e3224140200000000000000000000000000000000000000000000000012273d52677c92a7bcd1e7e9d4bea9947f69543f2a140000000000000a1f33475872879cb2c7dcf1e7d5c4a5907a65503b251000000c1c29334a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494845423d38342b211e170b0200000000000000000000000000000000000000000000000000000000000000000000000b20354a6074899eb3b49f8b77614c37221c130c0b040000000000000000000000000000000000000009192b3c4d5f6d8297a4b6c7d4c9b9a89a8472604a3c2b364b6176899eb4c8d4cad6c6b29d8874604b36201200000000000b20364b6074879da9b5c2c6b9b4a0927d6752362513000000000013293e53687e93a8bdd3e8e6d1bca6917c67513c271200000000000b20364b60758a9fb4cadfefdac5b09a85705b3b2b1805000000000000000000000000000c1c2f404b6074869ca9bacde1e0ccb9a79a8473604b3e2d1b0b00000000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000003162839495a637986979fa9b1b5bcc9bec0bfbec8bbb4b0aa9f999084796e80959faeb3b4bbb5b5b8a79b8574604b40301d0a0000000000000111212f404c5b6375818d999fabb0b4bbc8bebfc0bfbebdc8bbb4b1acaa9f9991877d72645c4f42321f0c0000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7eaecd6c1ac97816c57422c170200000000000c21374c61768ca5b6cadff3e0cbb8a68d78624d38220d000417293a465e6060606060606060606060606060606060605f5e5d5a57524d483c3633291d150a0000000000000000000000000000000000000000000000000000000000000000070b171e3043546f849aafbcab907b66513b353025221f180c070000000000000000000000000000000000000e1e30414b6175869ca9baced7c6b4a2937e685a48353e53687e93a8b9cce6e1ccb9a8947f695544311d08000000000011263c51667c91a5b6c7d2d7cdbeb09a85705443301c070000000012273c51677c91a6bcd1e6e7d2bda8927d68533d28130000000000091d32455671879cb1c6dcf1dec9b39e8974594834200b0000000000000000000000000000111d32455663798b9fb4bfd0e3d6c5b4a2947f6a5c4a39281603000000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000091e3245576278899ca4b4bac7cacfdad3d3ceccd8cecac8bbb4aea29a8c83959eb0bdc8c9cecfbcab9e8978625544312212000000000000000f1f2f3f4c5e657987979fabb5bcc9caced9d4d5d5d4d4d2d9cecac7c8bbb4afa59d92857a69614f3b27120000000000000000000000000000000000000000000000000d22374d62778ca9bacde2eed9c4ae99846f59442f1a000000000006192c3c51677c91a6c3d3e6f3ddc8b39e88735a4835200b000a1f334658707575757575757575757575757575757575757474726f6c68625a534c463932281a10020000000000000000000000000000000000000000000000000000000006101b2229333636556b8095aac9aa95806b554e4a433637342a211a0f040000000000000000000000000000000000121e324657647a8b9fb4c0d0d1c0b49e8a78624d424b5c71869bb1c6d6e8d8c8b39e8976614c372715020000000000162b40556b8095aac3d4e5e9dfc9b49f8a75604a35200b0000000010253a4f657a8fa4c8d8eae9d4bea9947f69543f2a14000000000002152838596e8398aec3d8ede0ccb9a78c77624d37220d0000000000000000000000000000021528384a5b697e93a1b3c5d5e3d1c0b49f8b7a645746321e12000000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000031629394b6075869ca7b6c2ced8dfd3cac7beb8b6b7b9bfc6c9cac0b4aa9f99a1b0bccddddfd1c0b59f8d7c665a48372715040000000000000a1a2c3d4c5d657c8a9da5b5bcc9cfdadfdcd9cecac8c5c5c6c9ccd6d9d8cec9c3b6b2a39b8c7e69543e29140000000000000000000000000000000000000000000000000b20354a60758a9fb4c9dff1dbc6b19c86715c3a29170400000006152035495a6f8499aec4d9eeead7c7ae99836e593c2b1905000c21364c61768a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898785817d77716961574b45382e20130500000000000000000000000000000000000000000000000000020e1a212d3639464b5258667b91a6bbaf9a846f66636054534c473b362d1f180c00000000000000000000000000000000031628394a5c697f94a2b3c5d5cdb9a89a846f604e4f647a8fa3b5c9e4e2cebbaa96806b5746331909000000000000162b41566b8096abc7d7e9efdfcab59f8a75604b35200b000000000d22384d62778daabbcee2ebd6c1ac96816c57412c17020000000000162b41566b8096abc0d5ebe8d6c5a48f7a654f3a25100000000000000000000000000000000a1a2d3d4f606f8399a6b8cbe0e2cebbaa9c8675614b40301d0d0000000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000a1e3246576a7f94a4b6c5d3e2ddcfc3b6b2a8a3a1a2a4aab1b5c1c9c8bbb4aeb2bfcddae7d5c4b4a295806b5e4c3c2b190900000000000002152838495b657b8b9fa8b6c3cfdae3dfd0c7c8bbb4b2b0b0b1b3b9c5c3c9ced8d3cac1b5aa9b86715c3a2917040000000000000000000000000000000000000000000000071c30435472879cb2c7dcf1dec9b49e89745847331f0f0f10121a2132434d63788c9fb4cadff4e2cdbaa9927d68523d281300000a1f33465874899e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9a97928d867e766a60564a3e3123130600000000000000000000000000000000000000000000000a161e2c353e4a4f5761686e737a8ea3b9b39e897e7b78746f6961594e4a3d342a1c11040000000000000000000000000000000b1b2d3e4a6072849aa6b8cbd6c6b3a2937e685a586d8298adc1d2e5dfc9b49f8b78624d3929170000000000000013283e53687d93a9bacdd9dbd2c3b29d87725544311d08000000000b20354b60758a9fb4cadfeed9c3ae99846e59442f1900000000000013293e53687e93a8bdd3e8e7d1bca7927c67523d2712000000000000000000000000000000000f1f32424c6277889eb3bdcee0d8c8b6a497816d5e4d3b2b180800000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000c21364b6176889eb3c2d3e3e2cfbfb2a49c938e8c8d8f949ba3b1b5c2cecac3c6cfddebd9c9b8a69a8473604b402f1e0e00000000000000091d3245566379899ea9bac6d3e3e2d4cbbfb3afaa9f9d9b9b9c9ea7a7aeb4bbc8d8dfd2c8b39e89745846331f0a0000000000000000000000000000000000000000000000001325365a6f849aafc4d9efe1ccb9a88c76614c3724242425272c36434f616f849aaabbcee2ebd9c9b49f8a76614c37210c00000417293a5c71869cb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b3b2afaca7a39b93897f74645c4e41312413030000000000000000000000000000000000000000000e1a28323d494e5c646d767d83888e98a9bcb9a89e93908d89847e776e635b4c473a2f221406000000000000000000000000000000101c3043546277889eb3bdcdd0c0b39e89786261768a9fb4c9dee3d0bfad98826d5948341b0b000000000000000d22374c62778a9fb4bbc8c6c1b5a595806b553727150100000000081d31445572889db2c7ddf1dbc6b19c86715c3a291704000000000011263b51667b90a6bbd0e5e9d4bfa9947f6a543f2a150000000000000000000000000000000001141f344759667c919fb1c2d3e5d3c2b19f917c66594836251300000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000012273c51677c91a7b8cce0e7d4c4b2a199867e7977777a7f86909ca4b5c3d4d8dbe2ede3cfbcab9d88776255443122120000000000000005192b3c4b6074869ca7b9c7d7e4e1d3c4b7b2a199928a88868586898c92999faabbcee2e0ccb9a78b76614c36210c000000000000000000000000000000000000000000000000182d42576d8297acc2d7ece8d6c6a38e79644e393939393a3c3d494e616a7f94a2b4c8d9ebe3cfbcab97826d5847331f0a000000192f44596e8499aec3cacacacacacacacacacacacad8cec9c9c7c4c1c1b5b0a79e94867a685f4e4231211100000000000000000000000000000000000000000e1e2b38454b5b636f7a828992989da6a9b6c6c6b9b3a8a6a89e99938b83796d61594c40322414060000000000000000000000000000001325364859667c909fb0c2d2ccb9a899846f697e94a9bacde1dcc7b3a18e79634e3b2b1900000000000000000b1f344859697f949faab0b0aea39b8776614c36210c0000000000011426375b70859ab0c5daefdec9b39e89745846331f0a00000000000e23394e63788ea3c5d5e8ecd7c1ac97826c57422d17020000000000000000000000000000000005182a3b4c5e6c8197a4b6c7d8e0cebdb39e8977625443301c0f000000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0002172d42576c8297acc5d5e8dfcbb7a699837469636162646a717b869ca5b7cadff0f5e8d6c6b49f8d7b65594837261404000000000000000b2035485a6b8095a4b5c5d6e5e3d3c3b6a69d91847c767370707174777d838b9fb4c9dfe8d6c5a38e79644e39240f000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e6d1bba6917c66514f4f4f4f5052555b636f7f949daec0d0e6e8d5c5b49f8c79634e3a2a1704000002172c41576c8196acc1d6dfdfdfdfe2dbd9cccccccccccccccdcfd5d6d2c9c5b8b3a49c8b7d68604e3f2f1c0c0000000000000000000000000000000000000d1d2b3c4856606b79848f979ea8adb3b8c4c6d4d6ccc9bdc6b9b4afaa9f988c8277665e4f4232251404000000000000000000000000000008182a3b4c5e6c8196a4b5c7d6c6b3a1927d72869cb1c7d7e4d2c1af99846f5b4a361d0d000000000000000005182a3b4f616a7f8c969a9b98928578625846331f0a000000000000182d43586d8298adc2d7ede1ccb9a88b76614c36210c00000000000c21364b61768ba7b8cce0eed9c4af99846f5a442f1a0000000000000000000000000000000000000d1d2f404b6075869ca9bacee2e0ccb8a79a8472604a3e2d1a0a0000000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00071c31465c71869bb1c6dbf0ddc8b39d887661564e4c4d4f555d6575879db2c7dcf2f5e1ccb9a8947f6a5d4b3b2b19090000000000000004172a3a4d62788b9fb4c2d2e4e8d6c5b6a59d887c6f6761575b5b5c5962676e7e93a8bed3e6d0bba6917b66513c261100000000000000000000000000000000000000000000000012283d52677d92a7bcd2e7e8d3bea9937e69646464646465676a717984949daebbccdeebe0ccb8a798826d5b4a361c0c0000000014293f54697e94a9bed3e9ffedddd0c7c4b6b6b6b6b6b6b6b8babfc8cbd4d6ccc2b6a99f8d7e685d4c3a2917040000000000000000000000000000000005182b3b485a6274808b99a1acb4b9c6c8cbd5dddfe7e1ded3d6cdc9c8bbb4ab9f97887c69604f433222120000000000000000000000000000000d1d2f404b6074869ca9bacdd0bfb39e897c91a4b6cae5ddc9b5a3907b65503d2d1a000000000000000000000d1d324350616a79818586837c73625a483a291704000000000000162b40556b8095aac0d5eae8d6c6a38e79644e39240f0000000000091e32465773899eb3c8def1dcc7b19c87725c3b2a1804000000000000000000000000000000000000121e324556647a8b9fb4c0d0e3d5c5b3a2947f695c4a3828160300000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00091e33485e73889db3c8ddead5c0ab95806b5746383738394b5c6a7f94a5b7cadff4f3dec9b49e8976604b3f2e1d0d00000000000000000a1f3347586d8297a9bacde0f0e0ccb8a79d8778665e524b4639463b484d52667b91a6bbd0e6d3bea9937e69543e291400000000000000000000000000000000000000000000000010253a4f657a8fa4c8d8eaedd7c2ad98827a79797979797a7c7f868e9aa2aebbcbd9ebe3ccbcb39e8977624c3d2d1a000000000011273c51667c91a6bbd1e6f6e2d0bfb3aea1a1a1a1a1a1a1a2a5aab2b7c4cee0d3c7baab9f8c7b655847331f0d000000000000000000000000000000000b20344859627885969fa9b3bfc9cdd6ddd4cbc8cbd4e2d4cbc8c4c9cccec9bcb5a79e8d7e69614f40301e0e000000000000000000000000000000121d32455663798a9fb4bfcfccb9a79e8a9fb4c2d3e5d4c3b19b86715d4b381f0f000000000000000000000015253343505b636b70716e676055483c2b1b0b0000000000000013283e53687d93a8bdd2e8e6d0bba6917b66513c26110000000000031628395b71869bb0c6dbf0dec9b49f89745947341f0b000000000000000000000000000000000000031628384a5c697f94a2b4c5d5e3d0c0b49f8b7a645645321e1200000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000a1f354a5f748a9fb4c9dfe5d0bba6907b6651392922334657647a8b9fb4c3d4e6f9f5e1ccb9a895806b5b4a36261401000000000000000c21374c61778a9fb4c7d7eae4d1c1b39e8978625a4c40363329302b34394e64798ea3c6d6e8d6c0ab96816b56412c160100000000000000000000000000000000000000000000000d22384d62778daabbcee2efdac6b2a0988e8e8e8e8e8e8f91949ba3afb4c0cbd9e7d9cfbdaf9e917c675948341f0f00000000000f24394f64798ea4c6d6e9f0dbc7b3a1998c8c8c8c8c8c8c8d8f959da6b1bdcedcd7c9bbaa9d8876614c3b2b19050000000000000000000000000000000d22374c6277879ba3b4bac7d0ded8cecac4b7b3b7c4d4c4b7b3afb3b9c6cacfc5b8ab9f937f695e4d3c2b1905000000000000000000000000000002152838495b687e93a1b2c4d4c5b9a99fa9bacde0dfcab7a5927c67523f2f1c010000000000000000000000071525333d494e565b5b59524b44372b1e0e000000000000000011263b50667b90a5bbd0e5e8d3bea9937e69543e2914000000000000192e44596e8399aec3d8eee1cdbaa98c77614c37220c000000000000000000000000000000000000000a1a2d3e4a6072849aa7b8cce0e2cebaa99c8675604b402f1d0d000000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000a1f344a5f74899fb4c9dee3ceb9a38e79644e392431424c6176879daabbcee1f1eeece8d6c6b49f8b79635443301c0800000000000004172a3a54697e94a9bacde5f5ddc9b5a3927d685a483c30211e171b1921374c61768ca8b9cce1d8c3ae99836e59442e190000000000000000000000000000000000000000000000000b20354b60758a9fb4c9dff4e1cfbeb2ada4a4a4a4a4a4a5a7aab0b5c1c8d1dee1d4c9bcb49f95806a5f4d3b2b180100000000000c21374c61778ca8b9cde1eed9c4ae998376777777777777787a8087979fb1becfe4d9c8b8a697816c594834200b0000000000000000000000000000000b20354b6074849aa5b6c6d6e0d1c8bbb4aca69da6b7cbb7a69d9a9ea8b2b6c3cfc9bcb59f8d7c665a483520100000000000000000000000000000000a1a2c3d4e606e8399a6b7c9d6c7bab4bac7d7e8d6c5b29d8774604b3520110000000000000000000000000007151f2c3539414546433d353126190e0000000000000000000e23384e63788da3c5d5e7ebd6c0ab96816b56412c16010000000001162c41566b8196abc0d6ebe9d7c7a48f79644f3a240f00000000000000000000000000000000000000000f1c3043546277899eb3becee1d8c7b6a497816c5e4c3b2a18050000000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00081e33485d73889db2c8dde3ceb9a38e79644e392c3d4e606e8298a5b6c8d8eae0d9d7d9e2cebbaa9b8573604b3520120000000000000a1f33475870859ab0c7d7e9e8d6c6b09b85705f4e3c2b1e120f1a21293337475874899eb4c9dedbc6b19b86715c392917030000000000000000000000000000000000000000000000081c30435472879db2c7dcf2ecdccfc6c2b9b9b9b9b9b9babcbfc6c9d2dcdfd7cdc4b7ab9f948172604a41301d0d0000000000000a1f33475874899eb4c9def0dbc6b09b867161616161616163656a758197a0b2c6d7e6d5c4b49f8b78624d37220d000000000000000000000000000000081d3144556176879ca8b9c9ccc0b4aa9f978e889db3c4b39d888489919ca4b2bfcfcfbcab9e8978624d3e2e1b070000000000000000000000000000000f1f31424c6176879dabbccfd7cdc9cdd7e5e0ccb8a7937e695544311d080000000000000000000000000000010f1a21232c30312e27201d1409000000000000000000000b21364b60768ba7b8cce0eed8c3ae99836e59442e1900000000000014293e54697e93a9bed3e8e6d1bca6917c67513c27120000000000000000000000000000000000000000001325364859667c919fb1c3d3e5d3c2b19f907c665947341f140100000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00061b30455b70859ab0c5dae5d0baa5907b65503b38495b687d92a0b2c3d4e6dbcec5c1c5ced8c8b5a3927d6752402f1d0900000000000c21374c61768b9fb4cadff4e1ccb9a8927d685241311d0e0f202d363a474c4c5c71879cb1c6dcdec8b39e89735746331e0a0000000000000000000000000000000000000000000000011426365a6f859aafc4dae1e1e1e1dad7cececececececfd1d4dbdbd8d3cac6bab4a69d8d7f6c6054433023120000000000000004172a3a5c71879cb1c6dcf1ddc8b39e8873574c4c4c4c4c4d5056606d8298a8bacde1e2cebaa9947f6a553a2a1804000000000000000000000000000001152737475863798a9eabbab8b3a29a8b8279778ca6b7b39d8873757c8699a1b2c1d2c9b9a799836e5c4b37220c00000000000000000000000000000001141f334758657b8d9fb4c4d5e2dfe2eaf3dec8b39e8976614b3727150100000000000000000000000000000000060c0e161b1c19120b08010000000000000000000000091e32455773889eb3c8ddf0dbc6b09b86715b39281603000000000011263c51667b91a6bbd0e6e9d4bea9947f69543f2a1400000000000000000000000000000000000000000008182b3b4d5e6d8297a5b6c8d8e0cebdb39e8877624c42321f0f00000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0001162b40566b8095abc2d3e5d2bda8937d685339455663798a9fb4becfe1dccebdb1acb1bdced1c1b19c86715e4c38240f000000000011263b50667b90abbccfe3f3dec9b49e8975604b362113071a2d3e4a4e586161616f8499afc4d9e0ccb8a78b76614c36210c000000000000000000000000000000000000000000000000182d42586d8297adc2ccccccccccccccccccccccccccccd7cdc9c6c3c3b6b2a89f96877b6a614a433625130400000000000000001a2f44596f8499aec4d9eee0ccb8a78b76604b373737373838454c61768a9fb4c9deead8c7b19c86715847331f0a00000000000000000000000000000009192a3a495b667c8d9fa9a79e9285796c6373889db2b8a68d786267748299a3b5c9d6c5b2a18f7a644f3a2a170400000000000000000000000000000004172a3a4b5d6b8095a6b7cbe0f4f6fdead5c0aa95806b5746321909000000000000000000000000000000000000000001060604000000000000000000000000000000031628395b71869bb0c6dbf0ddc8b39e88735746321e0900000000000f24394e64798ea3c6d6e8ebd6c1ac96816c57412c17020000000000000000000000000000000000000000000d1d30404b6175879caabbcee2e0cbb8a699836f604f3d2d1a0a000000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000010253a50657a8fa4b6caded8c3ae98836e57454b6074869ca8bacddce0cfbeb19f979fb1c0d1c9b5a4907b66513d2d1a0700000000152a40556a7f95aac9d9ebefdac4af9a856f5645321e090d21364a5c6473767777778298adc2d7e8d6c5a38e79634e39240e000000000000000000000000000000000000000000000000152a40556a7f95aab6b6b6b6b6b6b6b6b6b6b6b6b6b6b6c6b9b4b1aea9a59d958a8075655e504330251808000000000000000002172c41576c8196acc1d6ebe7d5c5a38e78634e3923222223283347586d8398adc2d8eddfcab59f8b77614c37220c000000000000000000000000000000000c1c2c3d4c5e677d8a9392887d72635b596e8398aec4a7927c67566074859bb1c6d6cfbfae98836e5847331f0a000000000000000000000000000000000c1c2e3f4b6075889db3c8ddf2fff8e3ceb8a38e79635443301c110000000000000000000000000000000000000000070b0f1314110c0a040000000000000000000000192e44596e8399aec3d8eee0ccb8a78b76614b36210c00000000000c21374c61768ca8b9cce1eed9c4ae99846f59442f1a0000000000000000000000000000000000000000000000121e324657647a8c9fb4c0d1e4d5c5b3a1937e695b4a382815020000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000b20354a6073869cb1c1d2dec9b39e8975604b5e6c8196a4b5c6d7e4d3c2b2a0978297a2b4c8d2c2b09a85705b4a36210c00000000182d42586d8297adc2d7ecead5c0ab95806b56382816030f24394e647a888c8c8c8c98a0b2c5dae6d0bba6917b66513c261100000000000000000000000000000000000000000000000012283d52677d92a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a89e9c99948e877f776b61574c40331c130800000000000000000000142a3f54697f94a9bed4e9e5d0bba5907b66503b26110c0e172a3a53687e93a8bdd3e8e3cfbcab8f7a65503a251000000000000000000000000000000000000f1f2f404d5f67787e7d766860544a54697e94a9c8ab96816c5656667b90a8b9cddfc9b49f8a76614c37210c00000000000000000000000000000000071b2e3e4f657a8fa6b7cbe0f4f2f0eed9c4af998472604a3f2e1d0d000000000000000000000000000000000008131c2024282927211f170c01000000000000000001172c41566c8196abc1d6ebe7d5c5a38e78634e39230e00000000000a1f33475874899eb3c9def1dbc6b19c86715c3a291704000000000000000000000000070d0f0f0f0f0f0f0f0f0f1629394a5c6a7f94a2b4c5d6e3d0bfb49f8b79635645321d110000000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000071c304354687e93a3b5c8d8ccb9a7947f6a5c667c919fb1c2d2e4d7c6b6a4988270849ab0c5d6c8b4a28e79634e39240f000000001a30455a6f859aafc4daefe7d1bca7927c67523d271200162b41566b8096a6a1a1a1adb2becee1e8d3bea8937e69533e291400000000000000000000000000000000000000000000000010253a50657b8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a8986837f79726a61584b46392f211500000000000000000000000012273c51677c91a6bcd1e6e8d2bda8937d68533e2813000010253b50657a90a5bacfe5ecdac9a7927d67523d2812000000000000000000000000000000000001122230414d5a63696861584a43364f657a8faabbb09b8670564b6075899eb4c9decebaa9917c67523c2712000000000000000000000000000000000d22374b5c6f849aafc4d5e7e4dddbdddcc7b3a1947f6a5d4b3b2a190900000000000000000000000000000210182530353a3e3e3c3633291d1409000000000000000014293e54697e93a9bed3e8e5d0bba5907b66503b261100000000000417293a5c71869cb1c6dbf1dec9b39e89745847331f0a00000000000000000000010f1a2124242424242424242424242e3e4b6073849aa7b9cce0e1cdbaa99c8674604b402f1c0c00000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000001325364b6073859baabbced6c5b49f8a7a6478899eb3bdcee0e1cdbaa89c8675677c91a7b9ccd1c0ab96806b563d2d1a070000001c31465c71869bb1c6dbf0e5d0bba5907b66503b261100152a3f556a7f94aac4b6b6c2c5cedcecebd6c0ab96816b56412c160100000000000000000000000000000000000000000000000b20354b60737777777777777777777777777777777777767574716e69645c554c473a32291b11030000000000000000000000000f243a4f64798fa4c6d7e9ead5c0ab95806b56402b16151515243a4f64798fa4b9cee4e8d3bda8937e68533e2913000000000000000000000000000000000000041323303c494d54524c463a30364b60758a9fb4b49f8a75604b5571869bb0c6dbd8c7ac97816c57422c17020000000000000000000000000000071b2d3e4f647a8fa2b3c7e2dfd2c9c5c8cbd0bfb49f8c7b655948372614010000000000000000000000000210202d36434a4f5354514c463a312619090000000000000011273c51667c91a6bbd1e6e8d3bda8937e68533e29130000000000001a2f44596f8499aec4d9eee1ccb9a88c76614c37210c000000000000000000000f202d363939393939393939393939393943546278899eb3becfe4d7c7b5a496816c5e4c3a2a1804000000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000081d314455647a8b9fb4bccbcdbaa99d8878849aa7b8ccdbe0cebdb49f8a79636075899eb3c9ddc7b29d87725b4a36210c0000001d32475c72879cb1c7dcf1e4cfb9a48f7a644f3a250f0012273d52677c92a7bcccccd7d9d9d9d9d9d8c3ae99836e59442e19000000000000000000000000000000000000000000000000081d3144556061616161616161616161616161616161616160555c59544f4a3e37332a1e160b00000000000000000000000000000c22374c61778ca8bacde1edd8c2ad98836d58432e2a2a2a2a2b3850657a8fa5bacfe4e7d2bda8927d68533d28130000000000000000000000000000000000000005131e2c35383e3d3633291e32455671869bb0baa98f7a644f5a70859aafc5dadac4af9a856f5a45301a0500000000000000000000000000000d22364a5c6f8499aec0d0e3d2c1b5b0b2b7c4cebbaa9d8877625544311d1100000000000000000000000010212e3e4a54606468696661584b44372618080000000000000f24394f64798ea4c6d7e9ead5c0ab95806b56402b16010000000002172c41576c8196acc1d6ebe8d6c6a38e79644e39240f000000000000000000071a2d3e4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f5a677d92a0b2c6d6e5d2c2b59f8d7b655847331f14010000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000011426374a5c687e939eaebbccc7b7a69d8a9aa2b4c5d5e4d2c2b19f927d685b566d8398adc2d8cab7a58e79634e39230e0000001c31475c71869cb1c6dbf1e3ceb8a38e79634e39240e000f253a4f647a8fa4c7c4c4c4c4c4c4c4c4c4c4b09b86715b39291703000000000000000000000000000000000000000000000001142637444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4437443f39362d221f180c030000000000000000000000000000000a1f34475974899fb4c9def0dac5b09b85705b373f3f3f3f403c4956697e93a8bed3e8e3d1c0a6907b66513b26110000000000000000000000000000000000000000000e1920232928211f17162838576c8196acc7a9947e69545f73889db2c8dddcc7b19c87725c47321d0700000000000000000000000000071a2d3d4f647a8ea1b3c7deddc9b5a39b9da6b7cbc8b7a69a8473604b402f1d0d000000000000000000000a1a2e3f4b5c64737a7d7e7c766a6055443625130000000000000c22374c61778ca8bacde1edd8c3ad98836e58432e19000000000000142a3f54697f94a9bed4e9e6d1bba6917c66513c27110000000000000000000d21364a5c64646464646464646464646464646464646d8298a8b9cce1e3cfbcab9d8876614c42311f0f0000000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000009192d3e4e606b80949db3b8c5c4b7aa9faab4c0d1e3d6c6b5a497826d5f4e52677c92a7c3d4d4c3a9947e69543f29140000001b30465b70859bb0c5daf0e4ceb9a48f79644f3a240f000d22374d62778ca9afafafafafafafafafafafaf9e89735746331e0a00000000000000000000000000000000000000000000000009192631353737373737373737373737373737373737363531262e2a24221b100a04000000000000000000000000000000000004182a3a5c71879cb1c6dcf1ddc8b29d887355545454545455575a6274869cb1c6dcecdcc8b4a28c77614c37220c00000000000000000000000000000000000000000000060c0e14130c0a0412273d52677d92a7c5ae98836e5f677d91a6b7cbdfddc8b29d88735d48331e08000000000000000000000000000c21364a5b6e8399aebfd0e3d4c4b09b85879db2bfd0c4b4a295806b5e4c3b2b19090000000000000000021527384b5d657a868f9393918a7f73605443301c0700000000000a1f33475874899fb4c9def0dac5b09b85705b38281502000000000012273c51677c91a6bcd1e6e8d3bea9937e69543e29140000000000000000000f24394e647a79797979797979797979797979797979797b899eb3c9deecdac9b7a699836e604e3d2c190900000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000001020314250626b7f919ea7b3bfc8bbb4bbc8d1dee1ccb9a89c8675604b414c62778ca5b7cacbc3ae98836e593a29170400001a2f445a6f8499afc4d9eee5cfbaa5907a65503b2510000b20354a60748a99999999999999999999999999998b76614b36210c0000000000000000000000000000000000000000000000000009141d20222222222222222222222222222222222221201d1419140f0d070000000000000000000000000000000000000000001a2f445a6f8499afc4d9eedfcab49f8b746a6a6a6a6a6a6a6c7078849aa4b6c9dedacfbcaf9a85705947341f0b0000000000000000000000000000000000000000000000000000000003091423384d63788da6b8b29d87726f7d8a9fb4c4d4e7dcc7b29d87725d48321d08000000000000000000000000061a2c3d4e63798c9fb5cadfdfcbb7a6917d7d91a1b3c5d1c0b59f8d7c6659483727150100000000000000091d314556657b8b9ca4a8a9a89e958272604a35200b000000000004182a3a5c72879cb1c7dcf1ddc8b39d88735645321d0900000000000f243a4f64798fa4c6d7e9ebd6c0ab96816b56412c160100000000000000081d32485d72878e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e909ea8b9cce1f7e7d4c4b3a1937e685b4937261401000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e000000000002132433445061697c8999a1b3b9c5c9ced8e6dfcebdb49e8a7963564534485972879db2c2b5b5b29d88735847331f0a0000182e43586d8398adc2d8ede7d1bca7927c67523d271200071c3043546d8284848484848484848484848484848378624d38220d000000000000000000000000000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b08010000000000000000000000000000000000000000000000000002172c42576c8197acc1d6ece3cfbcab95807f7f7f7f7f7f7f81858c9aa2b4c2d3d1c9bcb59e907b65503b2a18040000000000000000000000000000000000000000000000000000000b171e263135495a73889eb3b7a5917c84929fa8bacde2efdac5b09a85705b45301b060000000000000000000000000c2136495b6e8398abbccfe3d7c7b29d87746e8399a7b9cccfbcab9e8978625544311d12000000000000000b20364b6074879da9b5c2c6b9b4a0927d67523625130000000000001a2f445a6f8499afc4d9eedfcab59f8a75604b36200b00000000000c22374c61778ca8bacde1eed8c3ae99836e59442e190000000000000000051a30455a6f859aa4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a5b3b9c6d6e8fcf2e2cfbfb49f8a79635544311d08000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000006152633434f5e6677838f9ea7b9cce0eae3d2c1b19f917d675b49382b3b576d8297a4a0a0a0a0a68c76614c37210c0000152b40556a8095aabfd5eae9d4bfaa947f6a553f2a15000013253652646d6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f625a4834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9ebd9c9b09e9594949494949495969a9fabb4c0cfcac1b5ab9f96806b5d4b371d0c000000000000000000000000000000000000000000000000000000121b293337444b50556f8499aec3ab9a9199a1b4bac6d7e9e2cfbfab96816b56412c16010000000000000000000000061a2c3d4e63798c9fb5c9dae1cdbaa9947f6a6277899eb3c0d1c9b8a79a8473604b402f1e0e00000000000011263c51667c91a5b6c7d2d7cdbeb09a85705443301c070000000002172d42576c8297acc1d7ece3cfbcab8d78634d38230e00000000000b1f34475974899fb4c9def0dbc6b09b86715b392916030000000000000002182d42576d8297acb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9bac9ccd6e4f4ffffede1cdbaa89b8573604b35200b000000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e0000000000000007152532404c59626e7b899eb3c9dee8d6c5b5a397816c5f4d3d2c23384d6278868b8b8b8b8b8b8b7a644f3a250f000012273c51677c91a6c5d6e8edd8c3ad98836e583c2c1906000818354552585a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4d483c2b1905000000000000040a202020202020202020202018161006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcd1e6f7e7cdbcb0aba9a9a9a9a9a9aaacb0b4bcc9c9bcb5aca39b8d806b62513f2f1c000000000000000000000000000000000000000000000000000008131c3039464b5560656d738297acc2b8aba6aeb3bfcdd7e4e2d4c4b2a18e7a644f39240f0000000000000000000000000c2135495b6d8298abbccfe7dec9b49f8a776159687e93a2b4c7d5c5b4a296806b5e4c3c2b1a0a0000000000162b40556b8095aac3d4e5e9dfc9b49f8a75604a35200b0000000000152a3f556a7f94aabfd4e9ecdac9a5907b65503b2610000000000004182a3b5c72879cb1c7dcf1dec8b39e89735746321e0a0000000000000000152a3f556a7f94aabfcececececececececececececececfdee1e8e1e1e1e1e1e9d7c6b5a3937e6853372715010000000000000000000000000000000000001b30455a70859aafc5ceb8a38e79634e39240e00000000000000000714222f3b484d62788b9fb5cadfe0ccb9a79b8574604b41301f2035495a62717576767676767572604b35200b00000e23384d63788da7b9cce0f2dcc7b29d87725a4935200800001727353f4244444444444444444444444444444438342b1d0d0000000000000c171f35353535353535353535352d2b23180a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c7d7e9fceadacdc3c0bfbfbfbfbfbfbfc1c5cacfcfbcab9f978f857b6b6251443421110000000000000000000000000000000000000000000000000008182530414d576169747b8289979fb1c5c9bfbbc4c7d0e1e7e0d1c4b7a699836e5c4a36220d000000000000000000000006192c3c4e63798c9fb4c9dae3d1c0ac97826d584a6072849aa9bacdd1c0b09e917c665a483827150200000001162b41566b8096abc7d7e9efdfcab59f8a75604b35200b000000000012283d52677d92a7bcd2e1e1d2bda8927d68533d28130000000000001a2f445a6f8499afc4d9e1e0ccb8a78b76614b36210c000000000000000012273d52677c92a7bcccccccccccccccccccccccccccccccccccccccccccccccccccd2c1b09b86705544311d080000000000000000000000000000000000001b30455a70859aafbdbdb8a38e79634e39240e00000000000000000004121d2b3a556b8095abbccfe3d2c2b39e8978625645322313192b3c494d5660606060606060605443301c0800000b20354a6074899eb3c9def3dfcab7a58d78634d36261401000917232b2d2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2220190d0000000000000c1c29334a4a4a4a4a4a4a4a4a4a4a433f352818060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9bacde1f6f8eadccfc6c3c3c3c3c3c3c4c7cacfd9cab59f8b817b70655d51443426160300000000000000000000000000000000000000000000000000132536434a5f67767f8890979ea7b1bdcedbd3d1d9dbe3ddd5cbc1b4a69d8876614c3e2d1b0700000000000000000000000c2035495a6d8298abbccfcfcfc8b4a28e79644e435463798b9fb4c1d2cdbcb39e8978625645311d120000000013283e53687d93a9bacdd9dbd2c3b29d87725544311d08000000000010253a50657a8fa5c8d9ccccccc0aa95806b55402b16000000000002172d42576c8297acc1ccccccd5c5a38e78634e39230e00000000000000000f253a4f647a8fa4c7b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b49f8a75604b35200b0000000000000000000000000000000000001b30455a70859aa7a7a7a7a38e79634e39240e000000000000000000000a1f33475871869bb1c9dadec9b5a4937e685a49382815050e1e2b3538454b4b4b4b4b4b4b4b43362614010000071c3043546d8398adc7d7e9e6d4c3aa957f6a5443301c090000061016181a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0d0b050000000000000417293a465e606060606060606060605853463523100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34485974899fb4c9def4f5e2cfbeb2adadadadadaeafb2b4bcc9cbbcab9e8880776960544639291b0a0000000000000000000000000000000000000000000000000b1c304354606c7c88949da6acb3b8c5cedbecf0e5dedcd1c8c4b7b3a39b8879635847332010000000000000000000000005192b3c4d63788b9fb4c9b9b9b9c0af9a85705c4a36495b6a7f94a3b5c3b9b9b8a79b8574604b41301d0a0000000d22374c62778a9fb4bbc8c6c1b5a595806b553727150100000000000d22384d62778daabbb6b6b6b6b6ad98826d58432d18030000000000152a3f546a7f94a9b6b6b6b6b6b6a6907b66513b261100000000000000000d22374c62778ca9a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1aa8d78634d38230e0000000000000000000000000000000000001b30455a70849292929292928e79634e39240e000000000000000000000c21374c61778b9fb5cadfd9c8b19c8673604b3c2b1a0a00000e192027313636363636363635302618080000000013253651677c91a9bacde1f1ddc7b29d8774604b37261401000000010305050505050505050505070a0505050000000000000000000a1f33465870757575757575757575756d64533f2b1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b5c72879cb1c7dcf1efdac6b2a09898989898989a9c9fabb3b8c4b8a69e95897e7261574639281603000000000000000000000000000000000000000000000b1b30414a607281919ea6b2b7c4c8ccd5e3ecf0e0d3c9c6c1b4b0a69d938578635b4a3a2a180200000000000000000000000b2035485a6d8297aaa4a4a4a4a4a4a2917c66513d2d3c4b6073859ba5a4a4a4a4a4a396816c5f4d3924100000000b1f344859697f949faab0b0aea39b8776614c36210c0000000000000b20354b60758a9fa1a1a1a1a1a1a19a85705b45301b06000000000012273d52677c92a1a1a1a1a1a1a1a1937e68533e291300000000000000000b1f344859748b8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7b66513b261100000000000000000000000000000000000011263b50667c7d7d7d7d7d7d7d76614c36210c0000000000000000000010253a50657a8fabbccfe2cebbaa927d685443301e0e0a0c17191713151d20212121212121201c140800000000000c21364b61768a9fb4c9daecdfcab7a5907b665544311d0e000000000000000000000000070b131c1f190d0b0500000000000000000c21364c61768a8a8a8a8a8a8a8a8a8a826d58432d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4d9efedd8c3ad9882838383838384878b939da6b5c1b8b3a79e938375615745321e13000000000000000000000000000000000000000000031729394d5f6c81979fb3b8c5cbd4dee0e2dfe2e5d3c2b6b1aaa39b93887e73625a4a3d2d1c0c0000000000000000000000000d22384d62788b8f8f8f8f8f8f8f8f8e8473604b35203144556379878e8f8f8f8f8f8f8f8f7c67513c271200000005182a3b4f616a7f8c969a9b98928578625846331f0a000000000000081d31445572878c8c8c8c8c8c8c8c8c87725d48331d0800000000000f253a4f647a8c8c8c8c8c8c8c8c8c8c806b56412b16000000000000000005182a3b4c6176777777777777777777777777777777777777777777777777777777777777777774604b36200b0000000000000000000000000000000000000f23384c5e6668686868686868615846331f0a0000000000000000000013283d53687d92a8c9dadfcab49f8b76614b362614161e212c2f2c2824201d150c0b0b0b0b0b0801000000000000091e3246576d8297abbccfe3e6d4c3b09b8573604b3c2c1c0d00000000000000000008131c202831342e2220180d000000000000000a1f33465874899e9f9f9f9f9f9f9f9a85705b37271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1d7ece1ccb7a28c776e6e6e6e6e6f72767e889ba3b5c6c5b9b3a1998575604b4130190900000000000000000000000000000000000000000a1e334657677d919fb1bdcbd5dfe7e0d9cecaced9c9b6a49c948d857d75696054493c2d1f0f000000000000000000000000000c22374c61777a7a7a7a7a7a7a7a797872605443301c2737495b6374797a7a7a7a7a7a7a7a79634e39240e000000000d1d324350616a79818586837c73625a483a291704000000000000011527374c617677777777777777777776614c37210c0000000000000b20354b60737777777777777777777775614b36210c0000000000000000000d1f334758616161616161616161616161616161616161616161616161616161616161616161605645321d09000000000000000000000000000000000000091c2f404c50525252525252524c463a29170400000000000000000000142a3f54697f94a9bed4dbc6b19b8671574632181b2932364144413d39363127211e160b00000000000000000000031628394e63798c9fb5c8d8eaddc9b5a3937e695a493a2b1d12080000000000070f182530353d47494337342b1d0d0000000000000417293a5c71869cb1b5b5b5b5b5b29d88735544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9e4cfb9a48f7a64585858595a58616876859ba8b9cdccbfb3a399836e5f4d37261401000000000000000000000000000000000000000c21364c6176889eb3bdcee0e7e4d6ccc8bbb4bbc8c6b19c867f78706860564b43362c1e0f01000000000000000000000000000b1f3447596164646464646464646463605443362614192c3c495660646464646464646464635b4a36210c000000000015253343505b636b70716e676055483c2b1b0b0000000000000000091f33465861616161616161616161615847331f0a000000000000081d3144556061616161616161616161615746321e0a0000000000000000000417293a474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b45382815020000000000000000000000000000000000000011222f383b3d3d3d3d3d3d3d3633291c0c0000000000000000000000152a40556a7f95aabfd4d9c4ae99846f593929162939464b575957534e4b44373632281b0b000000000000000000000b2135495b6e8399aabbcee2e4d2c1b49e8a786258483b2f231c14121112141a212c36434a525c5f594d483b2b1c0c0000000000001a2f44596f8499aec4cacacacab49f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1e7e6d1bca7917c67524343433a474c5862778a9eb4c9ded0c1b2a1917d675544311d080000000000000000000000000000000000000013293e53687e93a6b8cbdbebe0d3c5b9b3aa9faabbbaa5907b6a625a534b45383026180e00000000000000000000000000000004182a3b474c4f4f4f4f4f4f4f4f4f4e4a43362618080e1e2c38454b4e4f4f4f4f4f4f4f4f4e4a3d2d1a070000000000071525333d494e565b5b59524b44372b1e0e0000000000000000000417293a464c4c4c4c4c4c4c4c4c4c4c473a2a170400000000000001142637444b4c4c4c4c4c4c4c4c4c4c4b4639291603000000000000000000000c1c29333737373737373737373737373737373737373737373737373737373737373737373632281a0a000000000000000000000000000000000000000004111c232628282828282828211f170c00000000000000000000000014293f54697e94a9bed3d9c4ae99846f5939291e324657616c6e6c68646055574b4639281603000000000000000000061a2c3d4e64798b9fb4c3d3e5e1cdb9a89c867662594c40372e29272627292d363d4954606871746e6259483a2a19090000000002172c41576c8196acc1d6dfe3cfbcab8d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7eae9d4bfa9947f6a543f2e2e29333a48596b8096abc0d6dfcfbfb29d8774604b35200b00000000000000000000000000000000000000132536596f8499aec5d5e7e4d3c2b6a79e948b9fb4bfaa957f6a55493c3632281c140800000000000000000000000000000000000c1d2a34373a3a3a3a3a3a3a3a3a39353025180800000e1a273136393a3a3a3a3a3a3a3a39362d1f0f0000000000000007151f2c3539414546433d353126190e00000000000000000000000c1c29333637373737373737373737332a1c0c00000000000000000919263135373737373737373737373632291b0b0000000000000000000000000c171f212222222222222222222222222222222222222222222222222222222222222222201d150a0000000000000000000000000000000000000000000000090f11131313131313130c0a040000000000000000000000000012273c52677c91a7c4d5dbc6b19b867157463329394b61758184817d7975716d615746321e09000000000000000000000f21364a5c6b8096a5b6c7d7e9d6c6b6a49c8677665e504b3f3e3d3c3c3e3e4a4e5b63727d868983776259473727150200000000142a3f54697f94a9bed4e9ebd9c9a5907a65503b25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bacde2ecd6c1ac97816c57422c19171f2b3b50657a8fa5c7d7eadfcab7a5907b66503b2611000000000000000000000000000000000000071c30435473889db3c8dde9d7c6b6a49c897e7d92a7c3af99846f544330211e160a01000000000000000000000000000000000000000c181f2225252525252525252423201c1308000000000a151d2024252525252525252524211a0f010000000000000000010f1a21232c30312e27201d1409000000000000000000000000000c171f21222222222222222222211f170c0000000000000000000009141d2022222222222222222222211e160b0000000000000000000000000000040a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea6b8cbdfc9b49f8a76614c3b3246576b80959996928e8a868175614b36210c00000000000000000000071a2d3d4b6075879da9bacde2e4d3c2b5a49c887c6f655d575452515254585c646d7984929c9e988777615544311d130200000012273c51677c91a6bcd1e6e7d2bda8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c9dfeed9c4af99846f5a442f1a040d21364b61768ba9bacde2e6d4c3ac97816c57422d170000000000000000000000000000000000000b20354a60758a9fb5cadfe1cdb9a89c867969778ca5b7b39e8974604a35200b0200000000000000000000000000000000000000000000040b0c0f0f0f0f0f0f0f0f0f0e0b070000000000000002090b0f0f0f0f0f0f0f0f0f0e0c07000000000000000000000000060c0e161b1c19120b0801000000000000000000000000000000040a0c0c0c0c0c0c0c0c0c0c0c0a0400000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e2020202020202020201d1b140b0000000000000000000000000000000000000000000000000000000b20354a6074889db3c8d8cebbaa937e68594a444b6175899eaeaca8a99f9b8b76604b36210b00000000000000000000000f1e324556647a8b9fb4bccce3e0d2c2b5a69e90847a736d69676667696d7279828b9aa2b1b4a59a8474604b423120100000000f243a4f64798fa4c7d7e9ead5bfaa95806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c7dcf1dcc6b19c87715c3a2a1804091e324657748a9fb4c9dff0dbc6b09b86715b3626140100000000000000000000000000000000000b21364b60768babbccfe3dec9b49e8a78635b72879db2b8a78d78634e38230e0b0e0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c10131515151513110e0b080100000000000000000000000000000000000000000000010f1a2124353535353535353535322f281c0e0000000000000000000000000000000000000000000000000000071c3043546c8197aabbced8c8b39e8877645c55606b8095a7b9c1c7bab49e89745645321e090000000000000000000000031628384b5c677d929eafbccfdae0d2c5b8b3a1998f88827e7c7b7c7e82878e989faab4c0c3b4a296816c604e3e2d1b0700000c22374c61778ca9bacde1edd7c2ad98826d58432d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafc4d9efdec9b49e89745847331f141c2033465774899eb4c9def3dec9b39e89745443301c0800000000000000000000000000000000000b20354a60758a9fb5cadfd7c2ad97826d5a586e8398adc5a7927d68523d281c202323211a0f0300000000000000000000040a20202020202020202020201816100600000000000000020b11131c1f202020202020202020100e080000000000000000000000060b0d1214130d0c0600000000000000000000000000000000020c1214202020201e1a110f0900000001080b181f2020202015130d030000000000000000000000000000000000000000000000000000000000000000000000060c0e171f2125282a2b2b2a292623201d150d0b05000000000000000000000000000000000000000f1f2d36394a4a4a4a4a4a4a4a4a47443a2c1c0000000000000000000000000000000000000000000000000000001325364d63788b9fb4c4d4cbb8a69c867a7170747f8d9fb5c5d6d6c6af99846f5a382816020000000000000000000000000a1a2e3e4d5f6b80959eb5bcc9d5e2d5cbbfb3afa69d979392919193979da5adb4bbc8d1d1c0b19f927e685c4a36220d00000b1f34475974899fb4c9deefdac5b09a85705b37271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2d7ece1cdb9a88c77614c37342630353a4b61768ba8b9cce1f4dfcab59f8a75604b35200b0000000000000000000000000000000000071c30435473889db2c8ddd4bfa9947f6a5454697e93a9c7ac97826c57392930353938352c1e160a00000000000000000c171f35353535353535353535352d2b23180a000000000006141f2629313535353535353535353525221b100200000000000000040e1920232829282320190e040000000000000000000000000006141f262935353535343026241d120409151d202d34353535352a272015070000000000000000000000000000000000000000000000000000000000000000070e1a21232a33373a3d3f40403f3e3b383531272220190d0800000000000000000000000000000000071a2d3d4a4e6060606060606060605d574a3a18080000000000000000000000000000000000000000000000000000082035495a6d8297a6b7c7d5c4b6a49c8e878588949fabbccfe1ccb9a8947e69543f291400000000000000000000000000001020304150626b7f939fabb7c4cfdde0d0c7c4b7b2aca9a7a6a7a9adb2b6c3caced8e6d9cebdb49f8a79644e39240f000004182a3b5c72879cb1c7dcf1ddc7b29d88725544311d08060504020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9e9d7c6a48e79644f494949434b4e58677c91a6c6d6e8f4dfc9b49f8a745443301c080000000000000000000000000000000000001325365a6f8499afc9dad5c0ab95806b564f64798fa9bab19c8671574636434a4e4e493d32281b0a0000000000000c1c29334a4a4a4a4a4a4a4a4a4a4a433f35281806000000071524313b3e474a4a4a4a4a4a4a4a4a4a3a372e21100000000000000c181f2b35383d3f3d38352c1f180c0000000000000000000000021424323b3e4a4a4a4a49453c3830221519273135424a4a4a4a4a3f3c332515030000000000000000000000000000000000000000000000000000000000030f1a212c35383a474c50535455555453514e4b443737342b231c110600000000000000000000000000000c21364a5b70757575757575757575726857362513000000000000000000000000000000000000000000000000000006192c3c4c6277889da9bac7d3c2b6b1a49c9a9ea7b5bcc9dad0c0b39e8976614c36210c0000000000000000000000000000021323334450616a7e8d9da6b3bfc9d2dfdcd4cbc8c2bebcbbbcbec2c7cad4dfe2ded2c8bbb4a0988475604b36210b0000001a2f445a6f8499afc4d9eedfcab49f8a75604b36201c1b1a191714100c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2e7e6d1bba6917c665e5e5e5e5460636976869cb1c7dcf1f2ddc7b29d88725d48261401000000000000000000000000000000000000152a3f546a7f94abbccfdac5b09a85705d4b60758a9fb4b49f8a76614b4b546063635b4b4539281808000000000417293a465e60606060606060606060585346352310000000152533424e535c5f6060606060606060604f4b3f2e1b08000000000c1c2a333c494d5254524d493c342a1c0c000000000000000000000c1f32424f53606060605e5a514c4033252737444b575f6060606055504333200d000000000000000000000000000000000000000000000000000000000a161e2d363d494e56586165686a6a6a6a6866636055544d483b372e211a0e000000000000000000000000000e24394e63798a8a8a8a8a8a8a8a8a87725443301c0700000000000000000000000000000000000000000000000000000e1f344859647a8b9fa9b7c4cdcac2b6b1b0b3b8c5cfd7cdc0b4a2957f6a5846331f0a00000000000000000000000000000005152633435060697c8899a1b0b5c1cacfd9deddd7d3d1d0d1d3d7dcdfdedbd2c9c2b5aa9f958274605645321e09000002172d42576c8297acc1d7ece2cebbaa8d78624d38313130302e2c2925211f170d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8d8eae9d3bea9947f74747474747475787e889ca4b6cadef3ebd9c9af9a85705a45301b000000000000000000000000000000000000000e23384d63788c9fb5c9dac8b4a2907b655d5570859bb0bbaa907a655761697378786f605745362513000000000a1f33465870757575757575757575756d64533f2b1601000b1b33435060687174757575757575757575655d4b37220e0000000c1c2a3a474c5a62676968625a4c473a2a1c0c00000000000000000012263b4f606975757575736f665e504333314455606d74757575756a61503c270c0000000000000000000000000000000000000000000000000000000d1a28323e4a4e5b636b71777a7d7f80807f7e7b78756f696259504b3f352c1f140200000000000000000000000c21364b61768ba79f9f9f9f9f9f9f8a75604a35200b000000000000000000000000000000000000000000000000000005182a3b4b5c677d8b9da6b4bac7cacac6c5c8ccd4cbc7bab4a29a8473604b3a2917040000000000000000000000000000000007152533424f5e667683909ba3afb4bcc9c9ccd6d3d4d6d6d5d4d2d2c9c6c2b5b1a49c8c7f7260564538281603000000152a3f556a7f94aabfd4e9ebd9c8a5907a6550464646464544413f3b363329221f180d06000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbcee2f4dfc9b49f8b8989898989898a8d939da6b6c2d3e5f1e3cfbcab947f69543f2a14000000000000000000000000000000000000000c2035495a6f849aabbccfd1c0b39e897b6d646b8196abc8aa947f6a6b767e878e8d8375605443301c120000000c21364c61768a8a8a8a8a8a8a8a8a8a826d58432d18000316283950616a7e868a8a8a8a8a8a8a8a8a8a7a654f3a251000000417293a4758616e787d7e7d786e6159473a2a1804000000000000000014293e53697e8a8a8a8a89847c6a61503e354b6073828a8a8a8a8a7f6a553b2a1804000000000000000000000000000000000000000000000000000e1d2b38454b5c646f7880868b8f929495959493908d89847f776f655d4e493d321d150a000000000000000000000a1e33465773899eb3b5b5b5b5baa98c77624c37220d0000000000000000000000000000000000000000000000000000000d1d2e3e4d5f677a88969fa9b2b7c3bebfc0bec4b7b3a99f968476615544311c0c00000000000000000000000000000000000007152432404c58616e7b85919a9fabafb3b9c6bebfc1c1c0bfbdc2b5b1aba39b92867a6a60544538281a0a0000000012273d52677c92a7bcd1e7e7d2bda7927d685b5b5b5b5b5a595754504c463a37342a20190e0200000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9dff4e2cdbaa99f9e9e9e9e9e9e9faba9b2b7c4d3e0ece3d3c3b49f8c78634d38230e0000000000000000000000000000000000000006192c3c4f647a8d9fb5c2d3ccb8a79e8c827a747c91a6bcae9983788089939da5a1998372604a40301e0e00000a1f33465874899e9f9f9f9f9f9f9f9a85705b37271501091e3246576a7f939c9fa99f9f9f9f9f9f9b86715d4b37220e00000a1f3347586176838d9294928d8377615847331f0c00000000000000000d22384d62788da49fa79e9a917f6a5c4a3f54697e949fa99f9f9b85705947341f0b0000000000000000000000000000000000000000000000000e1e2c3c4856606b79848d959c9faba8a9aaaaa9a8a6a89e9a948b847b6f635b4f4231271a0a000000000000000000031729395c71869bb1c6cacad7c7a48f79644f3a240f00000000000000000000000000000000000000000000000000000000102030414d5c6476818a969da5a6a9aaaaa9a7a69d978b807361584737261400000000000000000000000000000000000000000614222f3a474c5e66717c848b949a9ea8a7a9aaabacabaaa8a4a49c968f867d73645c4a4336281a0a000000000010253a4f657a8fa4c8d8eaead5bfaa95807171717171706f6e6c69656158544c483b352c1d150900000000000000000000000000000000000000000000000000000000000000000000081c30435472879db2c7dcf2ead7c7bab4b3b3b3b3b3b4b5bcc9c8cbd4e2e1dacfc2b6a597826d5a4935200c00000000000000000000000000000000000000000e22374b5c6d8297a4b6c4d3c5b8aa9f978f89859bb0c6b49f8c8d959ea7b2b7b3a195806a5e4c3c2b1905000417293a5c71869cb1b5b5b5b5b5b29d88725544311d080c21364b6175899eb1b4bab5b5b5b5b9a8937e68533f2e1b0800031628394c61768698a0a7a9a7a0988776614c3a291704000000000000000b2035485a71869cb1b8b3af9e8e7a644f37596f8499aebab5b49f8b77614c37220c00000000000000000000000000000000000000000000000d1d2c3c495a6275818c99a1abb1b5bcc9bfbfbfbfbdc6b9b4afab9f998f847969604b4538281a0a000000000000000000192f44596e8499aec3d9dfd1bca7917c67523c271200000000000000000000000000000000000000000000000000000000021223303e4a58616b7880878d9194959594928e8881786b6055473a29190900000000000000000000000000000000000000000004111c2a33404c505e666f777e85898d92939596979695938f8c86807a716760544b3e3025180a0000000000000d22374d62778caabbcee2f3ddc8b39e888686868686858583817e7b76706a62594d493c3127190d000000000000000000000000000000000000000000000000000000000000000000011426365a6f859aafc4dae1e1e5d7cdc9c9c9c9c9c9c9cacfdadddcd9d6ccc9bcb5a49c8776614c3c2c19060000000000000000000000000000000000000000081b2e3e4b6175869ca6b6c2cfc8bbb4ada79e9ba3b5c9bcab9fababb3b8c5cabfb59f8d7c665a4835200b00001a2f44596f8499aec4cacacacab49f8a75604b35200b182b3b52677d92a8b9c9cdd7cacac9b39e8976614b3621100000091e3246576c8197a4b2bebebfb2a598826d5846331f0a0000000000000005192b3c556b8095aac4c8bcad98836e5544586d8298adc8cfbcab927d68523828150200000000000000000000000000000000000000000009192a3b495a637885969fabb3bfc6cacfdad4d5d5d4d3d7cdc9c9bcb4afa29a8a7e6d605645382819090000000000000001172c41566c8196abc1d6e9d4bea9947f69543f2a1400000000000000000000000000000000000000000000000000000000000512202d3a474c5a626b72787c7e80807e7d79746c625a4b4437291c0c0000000000000000000000000000000000000000000000000c181f2f38404c515962696f74787c7e7f8181807f7d7a77716b645c524b43362e1c1308000000000000000b20354b60758a9fb4c9dff4e0cbb8a69e9b9b9b9b9b9b9a999694908b857f776d635a4b44372b1d0e000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2ccccccccccccccccccccccccccdacfcac9c6c3c6b9b4ab9f978678625847331e0e00000000000000000000000000000000000000000000101e3346576378889ca4b3bfcbcecac5b8b3b0b5c1d2c9bcb4bcc9c8ccd5d3c8bbab9e8978624d38220d0002172c41576c8196acc1d6dfe2cebbaa8d78624d38230d203448596f849aafc6d6e2eae3d1c0ac96816c5746321e0a00000c21364b61768a9fb4c2cfd3cfc3b49f8a76614c36210c00000000000000000f243a4f647a8fa6b7cbc9b49e8975604b52677d92aabbcec9ae99836e5645321d0900000000000000000000000000000000000000000114263747596378889ba3b4bcc9d0dbdfe3e1ded8d4d1d1d2d5d9d9cfcac0b3a99f938274605645372715020000000000000014293f54697e94a9bed3e9d6c1ac96816c57412c1702000000000000000000000000000000000000000000000000000000000002101c2a333c484d565a6267696a6b69676460544d483c3127190c000000000000000000000000000000000000000000000000000004111c2330393b484c5454606367696a6c6c6b6a68656158564f4b3e3530261810000000000000000000081c30435472879db2c7dcf2e7d5c5b8b3b0b0b0b0b0b0afaeaca9ab9f9b948b82786b6055483b2b1e0e0000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aab6b6b6b6b6b6b6b6b6b6b6b6b6b6b6bcb5b3b1aeaaa89e978c8276625a483a2917000000000000000000000000000000000000000000000003172939495a63798699a1b3b7c4ccd5ccc8c6c9d2dfd9cfcacfd9dcd4cbc3b6aa9f948172604a35200b0000142a3f54697f94a9bed4e9ebd9c8a58f7a65503a251022374d62778b9fb4cadff4f1dcc8b4a28e79634e3929160300000f243a4f64798fa9bacde0e9e2cebbaa907a65503b251000000000000000000b20354a6074889db3c8ccb9a8907b65504c61768b9fb4cac9b49e8975604b36200b0000000000000000000000000000000000000000081d3144556277879da6b5c1cfd9e7eae2d7cdc9c3bebcbcbdc0c4c9cdd7d0c7bab4a0988474605544311d080000000000000012273c51677c91a6bcd1e6d9c3ae99846e59442f1900000000000000000000000000000000000000000000000000000000000000000c171f2b34383c494d5154555554524e4a4336352b1d1509000000000000000000000000000000000000000000000000000000000009121d242b343736434a4e52545556575655534f4c473a3a372e201c140800000000000000000000011426365a6f859aafc4daeff3e3d5cbc8c6c6c6c6c6c5c4c3c1c9bcb4b0aa9f988b80746259483c2b1c0c0000000000000000000000000000000000000000000000000000000000000012283d52677d92a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1ab9f9e9c9995908982796d6158483c2b1c0c0000000000000000000000000000000000000000000000000b1b2c3c495b637583939da6b3b8c5c7cbd4d1d7d9e1e3dfd3cac7c4b7b2a59c8c7f6c605443301c07000012273c51677c91a6bcd1e6e7d2bda7927d68523d281b2d3e54697f94abbccfe3f7e7d5c4af9a85705b49361b0b00000010253a50657a8fa5c0d1e5f0e5d2c1a6907b66513b26110000000000000000071c3043546c8297acc6d6c6ab96816b56475870859ab0c5cdb9a8907b66503b26110000000000000000000000000000000000000005182b3b4b6073849aa5b7c4d2e3ebe6d8cec7bab4ada9a7a7a8aaafb4b9c6cbd4cdbeb2a2998374604b36200b000000000000000f24394f64798ea4c6d7e9dbc6b19c86715c392917030000000000000000000000000000000000000000000000000000000000000000040d1920222c35383c3f40403f3d3935302520190e010000000000000000000000000000000000000000000000000000000000000000090d182022253035383d3e40414241403e3a37332a24221b100801000000000000000000000000182d42586d8297adc2d7ecfff3e7e0ddd9d0d0d0d0d0d1d3d6d9cfcac8bbb4aa9f958577625a483a2a170400000000000000000000000000000000000000000000000000000000000010253a50657b8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a898784807b756d635b4c463a2b1e0e00000000000000000000000000000000000000000000000000000e1e2c3d495761727e88949ea7adb2b7c3bcc2c5cedbcfc3b6b2aca69d94877a6a614a433625130000000f243a4f64798fa4c7d7e9ead4bfaa957f6a55402a22364a5c71869cb1c9d9ebf4e0cbb8a6917c67523d2c1a000000000d22374d62778ca2b4c7d5dbd6c7b5a38d78634d38230e00000000000000000013253651667b90a8bacdc7b19c87725b49546a7f94a9c3d4c6ac96816c573d2d1a070908000000000000000000000000000000000b20344859697f94a2b4c3d4e2f0e3d5c8bbb4a99f989492919295999ea8b3b7c4d0c7b8a79c8676614b36210c000000000000000c22374c61778ca8bacde1dec9b39e89745746331e0a00000000000000000000000000000000000000000000000000000000000000000000050b0e19202327292b2b292824201c130805000000000000000000000000000000000000000000000000000000000000000000000000050b0d131c202327292a2c2c2b2a2825211f170f0d07000000000000000000000000000000152b40556a8095aabfd5eaffeeded0c7c4bbbbbbbbbbbcbec2c8cbd5d8cec8bbb4a39b8778625847331f120000000000000000000000000000000000000000000000000000000000000b20354b60737777777777777777777777777777777776767574716e6a6560564e4a3d33291b0e000000000000000000000000000000000000000000000000000000000f1f2c3946546068757f8891979da5a4a7acb1bdcebeb2a59c9790887f74645c4f43302518080000000c22374c61778ca9bacde1ecd7c2ad97826d58422d26374e64798ea4b5c9e7f7ebd9c8b39d8874604b36200f000000000b2034485970859aa9b8c5c6c5b8a99b85715b4935210c0000000000000000000b21364b6075899fb4c9cab6a48d78634d4e63798ea5b6cac7b29d87725b4a36211e1e1d0c0903000000000000000000000000031729394c62778a9eb4c0d1e1f1e4d5c5b8aa9f958a837f7c7c7d808489939da6b3bfbaa99e8978625746331e0a000000000000000a1f34475974899fb4c9dee0ccb9a78b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000060c0d1214151614120f0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e1214151717161513100c0a0400000000000000000000000000000000000013283d52687d92a7bdd2e7f6e3d0c0b3afa5a5a5a5a5a7a8adb3b8c4cdd7d8cec1b5a59c8676614c413019090000000000000000000000000000000000000000000000000000000000081d3144556061616161616161616161616161616161616160555c5955504b4538362d1f170b0000000000000000000000000000000000000000000000000000000000010f1b2936434a566069757c82888c8f91979fb1c5b2a09887827b746960564b3e321c1308000000000b1f34475974899fb4c9deefdac4af9a856f5a36263144556c8196abc2d2e5f7e2cebbaa95806b5544311d080000000005192b3b4f647a8b9ea7afb0afa79e8b7a644f3c2c19060000000000000002101b223245566e8399aec9d3c2a9937e69544a5b72879db2c7cab7a58e79634e3933333333211e160b00000000000000000000000a1e3346576b8196a8b9cddeeee9d7c6b8a79e8b80766e696767686b6f767e8899a1b4b49f8b7b655a49392917030000000000000004182a3a5c71879cb1c6dce8d6c5a38e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d9ebf1dcc7b3a29a90909090909193979ea6b4bac7d7e2d2c3b6a499836e5f4d372715010000000000000000000000000000000000000000000000000000000001142637444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b443744403b363127211a0f0400000000000000000000000000000000000000000000000000000000000000000b18253038454b5660666d72777a7c8197acc5ad9883726d6660554b45382e201500000000000004182a3b5c72879cb1c7dcf1dcc7b29d8772544330354b6074889db3c8ddf0f4dfcab49f8b78624d3727150200000000000d22364a5c657c8994999b9a94897c665c4b371e0e000000000000000010202e363a3853687d92abbccfc4af9a846f5746576c8196acc6d4c3aa947f6a553b484848483632281b0b000000000000000000000c21364c61768a9fb4c6d6e9f6e1cdb9a89e897a6a615754525253555761687683949f9e927e685d4b3c2b1b0b0000000000000000001a2f445a6f8499afc4d9e5d0bba6907b66513b26110000000000000000000000000000000000050b0d11111111111111100e08000000000000000000000000000000000000000000000000000000000000000000000000070b0f1314110c0a04000000000000000000000a131a1c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0c0a03000000000000000000000d23384d62788dabbccfe3efd9c4af9a847b7b7b7b7b7c7e8288949fa9bac6d7e1d3c2b2a1917c675544311d08000000000000000000000000000000000000000000000000000000000009192631353737373737373737373737373737373737363531262f2b26201d150a07000000000000000000000000000000000000000000000000000000000000000000000008131c283238454b515858616567798da7b8b29c877259514b443732281a1002000000000000001a2f445a6f8499afc4d9eedfc9b49f8a75604b353951667b90a6b8cbe0f4e6d3c3ae99836e5a48341909000000000000071b2d3e4c5e65767f8486847f76665e4c3e2e1b0000000000000000071b2e3e4a4f5a5d61778b9fb4cac9b49f8a76615e5e657b90a8b9cdc5b09b8570595e5e5e5e5d4b463928160300000000000000000316283853687d93a8bacde4f4e5d3c2b49e8a7a645c4b46393d3c3d39464b5861727f8a8c806a604e3f2e1e0e00000000000000000002172d42576c8297acc1d7e8d3bda8937e68533e2913000000000000000000000000000000000e1920222626262626262625231c1103000000000000000204050402000000000000000000000000000000000000000008131c2024282927211f170c01000000000000000d1b262e313333333333333333333333333333333333333333333333211e170b0000000000000000000b20364b60758a9fb4cadfefd9c4af9a846f6666666667696d757f8b9fa8bacde1e0cfbfb29d8774604b35200b00000000000000000000000000000000000000000000000000000000000009141d20222222222222222222222222222222222121201d141915100b09020000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2731363c3a474c4f6074899eb3b6a58c77614c3731271e160a000000000000000002172d42576c8297acc1d7ece2cebbaa8c77624d3746576e8398adc4d5e7f3dfcab6a5907b66503c2b19000000000000000010202f404c5861696f716f6961584c402f201000000000000000000d22364a5c6470737373859bb0c5cebbaa917d7373737374899eb4c9cab59f8d77737373737372615746321e090000000000000000091e3245566f849aafc6d7e9f3decab6a4947f695c4a3e322927272828323a4754606976776a6250413121110000000000000000000000152a3f546a7f94a9bfd4e9d5c0ab96806b563626140100000000000000000000000000000e1e2b35383b3b3b3b3b3b3b3a372e2111000000050b0d1317191a1917140e0c0600000000000000000000000000000210182530353a3e3e3c3633291d140900000000000a1b2b39434648484848484848484848484848484848484848484848483633291b0b0000000000000000081d31445573889db2c8ddf1dcc7b19c87725450505052535660697b8a9fb4c3d4e6dfcab6a5917c67513929160300000000000000000000000000000000000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a151d20272a333743546f8499afc1a6917b66513c2615090200000000000000000000152a3f556a7f94aabfd4e9ead8c8a48f7a654f3a4c61768a9fb4c9def2e9d7c7b29c8773604a35200d00000000000000000211212f3a474c545a5b5a544c473a2f22120200000000000000000f243a4f647a858888888b9fb4c9d8c8b49e8a88888888888c9fb4cacfbcab9e8988888888888775614b36210c00000000000000000b21364b60758a9fb4c9dff4e9d7c7b19c8674604b3e2d1e16121213161e2936434a58616159504433231303000000000000000000000012273d52677c92a7bcd1e7d9c3ae99836e5443301c080000000000000000000000000005192b3c484d51515151515151504b3f2e1c080c0e192022282c2f2f2e2d292320190e0800000000000000000000000210202d36434a4f5354514c463a312619090000000013263949565c5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e4b463929170300000000000000021527375b70859ab0c5daefdec9b49f8975604a3b3b3c38454b5d697e94a5b7cbdfe6d3c3af99846f5746321e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b11181f253654697e93a3aaaa95806b55402b1600000000000000000000000012273d52677c92a7bcd1e7e7d1bca7927c67523d53687d92a9bacde1f6e1cdbaa9947f695443301c0700000000000000000003111c2933373f4446453f3733291c14080000000000000000081d32475d72879a9d9d9d9fa9bacde1cdb9a89e9d9d9d9d9d9faabbcedac9b8a79e9d9d9d9d9d917c66513c2711000000000000000010253a50657a8fa9bacde2f6e1cdbaa9937e69554431201003000000030c1825303a464c4c473a3325150500000000000000000000000010253a4f657a8fa4c8d8eadec9b39e8974604b35200b000000000000000000000000000b2035485a6266666666666666655d4b37231a21232b34373d41444544423e38352c231c110100000000000000000010212e3e4a54606468696661584b44372618080000001a2e435667717373737373737373737373737373737373737373737373615746331e0a0000000000000000182e43586d8398adc2d8ede1cdbaa98c77624c37262727313f4b6074879db2c7ddf1dfc9b49f8a76614b36210c00000000000000000000000000060b0d11151718191a191715120d0c060000000000000000000000000000000000000000000000040d131517171717171717171717171716140e0400000000000000000000000000000000000000000000000000000000000000000000040b21364b60758592959595856f5a45301a05000000000000000000000010253a4f657a8fa4c8d8eae9d4bfaa947f6a554c5c70859aafc7d7e9e8d7c7b49f8a76614c3625130000000000000000000000001c2c3a43474a4a4a4a4a48353026180800000000000000091e33495e73889eb2b3b3b4bac7d7e9d6c6b9b4b3b3b3b3b3b4bbc8d8e7d6c5b8b3b3b3b3b3ad97826d583a2a17040000000000000014293e54697e93a9c7d7eaf4dec9b49f8a76614c3727150200000000000008131c29333637342a1c1507000000000000000000000000000d22374d62778caabbcee2e0ccb9a78f7a654f382816020000000000000000000000000d22384d62787b7b7b7b7b7b7b7b65503b2b2c35383b484d5357595a5957534d493c372e1c1408000000000000000a1a2e3f4b5c64737a7d7e7c766a6055443625130000001c31465c7185888888888888888888888888888888888888888888888875614b36210c0000000000000000162b40556b8095aac0d5eae9d7c7a48f79644f3a2412151d3144556b8096abc0d5ebe2cdbaa9907b65503b261000000000000000000000070c0e192023272a2c2e2f2f2e2d2a272320190e0c0600000000000000000000000000000000000000071521282b2c2c2c2c2c2c2c2c2c2c2c2c2b2921160800000000000000000000000000000000000000000000000000000000000000000000091e32455760737c8080807f6a543f2a150000000000000000000000000d22374d62778caabbcee2ecd7c1ac97826c616165798d9fb5cadfe4d6ccbaa997826d5847331808000000000000000000000014273a4a575c5f5f5f5f5f5e4b4336261401000000000000051b30455a70859aafc5c8c9cdd7dbe2e4d6cdc9c8c8c8c8c8caced8dfe6e3d6ccc8c8c8c8c8b29d88735847331f0a00000000000000172d42576c8297acc1d7ecefdac5af9a857058463319090000000000000000000c171f21221f180c0000000000000000000000000000000b20354b60758a9fb4c9dfe8d6c5ac96816c5645321e0b00000000000000000000000012283d52677d90909090909090897359483c3d494e555962686c6e6f6e6c69635a4f4b3f302618080000000000021527384b5d657a868f9393918a7f73605443301c0700001b30465b70859b9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d8e79634e39240e000000000000000013283e53687d93a8bdd2e8e6d1bca7917c67523c27120214263751667b91a6bbd0e6ead7c7aa947f6a553f2a150000000000000000060f1a21242b35383c40424344444342403c38352c2320190e0700000000000000000000000000000000041525333c40414141414141414141414141413d3426160000000000000000000000000000000000000000000000000000000000000000000003162839455560676a6b6b6a614f3c27130000000000000000000000000b20354b60758a9fb4c9dfefdac4af9a847576777b879cabbccfe3d6c5b9b39f8b78634d3a2a170000000000000000000000061a2f43576872747474747473605443301c0800000000000000152a3f556a7f94aac3b5b5b5c3c6cfdce9e1cbc1beb5b5b5b5b5c7cad3e1e8e0c6bdb9b5c3b7a68c76614c37210c000000000000001a2f44596f8499aec4d9eeebd5c0ab96806b563a29170000000000000000000000040a0c0c0a0400000000000000000000000000000000081c30435472879db2c7dcf2dec8b39e8975604b3929170b0d1212100a01000000000011263c51667b91a6a6a6a6a6a78c77625251555b636a71777d81848483827e7870655d4b433626140100000000091d314556657b8b9ca4a8a9a89e958272604a35200b0000182e43586d8398adb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a6917c66513c2611000000000000000011263b50667b90a5bbd0e5e9d4bea9947f69543f2a14000e23384d63788da2b8cde2ecd7c2ad97826d58422d18000000000000000e1a212d36393c494d515557585959595755514d493c38352c221b100200000000000000000000000000000d2133445055565656565656565656565656565144341b0b000000000000000000000000000000000000000000000000000000000000000000000a1b2837444b52555555544f4332200c000000000000000000000000081c30435472879db2c7dcf2dcc7b4a29a8b8b8c909ca5b6c9dae0ccb9a79e917e685a49351c0c0000000000000000000000071d32475c72868a8a8a8a8a8873604b35200b000000000000000e24394e63798ea59f9f9f9faeb2becfddcbbbaea99f9f9f9f9fa1b6c3d3d9c6b6a9a49f9fa59d8b76614c36210c000000000000001c31465b71869bb0c6dbf0e7d1bca7927c67523d2712000000000000000000000000000000000000000000000000000000000000000000011426365a70859aafc5daefe0ccb8a7937e685746332520222727251e1305000000000f24394f64798ea8babbbbc5ac97816e67666a71787f868c9296999a9997938d857b6c605443301c14000000000b20364b6074879da9b5c2c6b9b4a0927d67523625130000162b40556b8095aabababababababababababababababababababaa9937e69543e291400000000000000000e23384e63788da3c4d5e7ecd6c1ac97816c57422c17020c21364c61768ba1b6cbe0efd9c4af9a846f5a452f1a000000000005131f2c353d4a4e565a62666a6c6d6e6f6e6c6a67625a564d493c362d1e160a0000000000000000000000000013283c50626a6c6c6c6c6c6c6c6c6c6c6c6c6b625139291603000000000000000000000000000000000000000000000000000000000000000000000a192731353d4040403f3c32251503000000000000000000000000011426365a6f859aafc4daefe3d0c0b4afa0a0a1a5b2b6c3d3e7dec9b39e897c68604e3c3023150700000000000000000000091e33485e73889d9f9f9f9f8f7a644f3a240f000000000000000c21364a5b72878a8a8a8a8a98a0b2c6d6c1ae9c938a8a8a8a8a8fa5b6cad1bda9988e8a8a8a877e695846331f0a000000000000001c32475c71879cb1c6dcf1e5d0bba5907b66503b261100000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2d7ece8d5c5b39d8876614c433635373d3d39302313010000000b20354b6075899fb4c9d0c5b19f97837c7b7f868d959ba3a8acaeafaeaca8a39b8f8172604b42311c0c00000011263c51667c91a5b6c7d2d7cdbeb09a85705443301c070013283e53687d93a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a496816c56412c1700000000000000000b21364b60768ba6b8cbe0eed9c4ae99846f59442f1a000b20354b60758aa0b5cadff0dbc5b09b86705b46311b00000000061323303d494e5b636b72787c7f8183848483827f7c78726b635a4f4a3e32281a0d000000000000000000000000152b40556a80818181818181818181818181806b5746321e0a000000000000000000000000000000000000000000000000000000000000000000000009151d20272b2b2b2a272015070000000000000000000000000000182d42586d8297adc2d7eceeded0c7c4b6b6b6bac7cad3e1eed9c4af9984796e62594d4133251608000000000000000000091e34495e73899eb3b4b4aa947f6a5539291703000000000000071a2d3d58697275757575758298aec8d9bea9937e7575757575879db2c7ceb9a48e7a7575757269604f3a291704000000000000001d32475c72879cb1c7dcf1e4cfb9a48f7a644f3a250f00000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5eaf3e0cbb8a698826d60544c4b4c52524d41301e0a000000081d3144556f849aafc4d4cebdb1a0989191949ba3aab1b5c1c1c3c4c3c1c1b4b09f96826d604e3a2a17040000162b40556b8095aac3d4e5e9dfc9b49f8a73604a35200b0010263b50657b8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f836f59442f1a0000000000000000091e32455673889eb3c8ddf1dcc6b19c87715c3a2a17080c21364c61768ba1b6cbe0f0dbc6b19b86715c46311c00000002132431414d5b636e7980878d919597989999989795918d8780786f645c4b45382b1d0d00000000000000000000001c31465c71869696969696969696969696968b76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000001080b1215161615130c03000000000000000000000000000000152b40556a8095aabfd5eafceee3dcdacbcbccd0d2d3d5dadfdcc7b3a1998c8277675f50433326160500000000000000000a1f34495f74899eb4c9c5b09a85705746331e0a000000000000000f1f3a4b585d60606060677d92aabbcec4af9a846f5760606c8196acc6d6bfaa957f6a60605d534f42321b0b00000000000000001c31465b71869bb0c6dbf0e3ceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2e7fae7d5c4b2a09680726661606267675f4d3925080000000115273752677d92a6b7cbdfcebeb2aea7a6aab0b5c1c6c9d2d6d2d2d8d7d1c8bdb0a0937e685847331f0a0000162b41566b8096abc7d7e9efdfcab59f8a75604b35200b000c21364b61757a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79634e39240e0000000000000000031628385b70869bb0c5dbf0dec9b49e89745847331f1d202a3b4f647a8fa4b9cfe4efdac4af9a856f5a45301a000000102031424e5f6779838c969da5a6aaacadaeaeaeacaaa6a59d968c847a6b6056483b2b1d0d00000000000000000000192f44596e8499ababababababababababa38e78634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2e7fff0e0d3cac6bdbdbdbdbec0c5caced0bfb3ab9f98897d6a61504433231300000000000000000a1f354a5f748a9fb4c9cab49f8a76614b36210c00000000000000011d2d3a44484a4a4a4c61778b9fb4cac9b49f8a76614c50657b90a8b9ccc5b09b86705948483e3b3224140000000000000000001a30455a6f859aafc4daefe4ceb9a48f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d9ebefdfd1c8beb09e96857b7675777c7d6752362513000000000b20364b6074889db2bdccddcfc6c3bcbbbfc6c9d2d4cbc8c1bdbdc3c6cfddcdbeb49e8a76614c37210d000013283e53687d93a9bacdd9dbd2c3b29d87725544311d0800091e324657616565656565656565656565656565656565656565656565635b4a36210c000000000000000000192e43596e8398aec3d8ede1cdb9a88c77614c372631353a47596a8095aabfd5eaedd8c3ad98836e58432e190000071b2d3e4e60687d8a989fabb2b7c3bfc1c2c3c4c3c1bfc3b7b2ab9f998c80746259483b2a1909000000000000000000172c41566c8196abc1c1c1c1c1c1c1c1c7a6907b66513b2611000000000000000000000000000000000000040a0c12141615120d0b0500000000000000050a0b0b0b0b0b0100000000000000000000000000000000000010253b50657a90a5c9d9ebf9e5d3c2b6b1a7a7a7a7a9abb0b4bbc8cfc9bcb4a79e917f6b625041301e0e00000000000000071c304354758aa9bacecebbaa917c66513c261100000000000000000f1d283032353533475870859ab0c5cebbaa917c67514b6075899eb4c9cab59f8b77624c3729261f1408010000000000000000192e44596e8399aec3d8eee5cfbaa5907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000e23384d63788dabbccfe3e4d1c1b4b0b5b0a39b908b8a8c9284705443301c07000000081d314455667c919fafbcc8d1d8d8d1d0d4d4cbc8c4b7b2aca8a8adb2becce1cdb9a8947f6a543b2b1805000d22374c62778a9fb4bbc8c6c1b5a595806b55372715010003162839464b4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e4a3d2d1a07000000000000000001162b41566b8096abc0d5ebe9d6c6a48e79644f4949444b4e586277889eb3c8ddf3e9d7c7ab95806b56402b1600000d22364a5c687e919fa8b5bcc9caccc8bfbab7b6b7b9bec6c9c9bcb5aa9f96867862594737261401000000000000000014293f54697e94a9bed3d6cebdb1acacaca9927d67523d281200000000000000000000000000000000060c171f2127292b2a272220180d090000070d0f1b1f202020202016140e040000000000000000000000000000000d23384d62788dabbccfe3f3decab6a49c9292929294959a9faab5bcc9cfc5b8b39d95806b5f4d3c2c19060000000000000b20354a60758aa9bacdd8c8ab96816c563727150200000000000000000008131c20322a3a546a7f94a9c3d3c8ad98826d5545566e8399aec9cfbcab927d685338283029201c140800000000000000182d42576d8297acc2d7ece7d1bca7927c67523d2712000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cadfddc8b4a39b9fabb5b0ab9f9faa9e8974604a35200b000000021527374c5e6c81959eb0b4c0c2c4c6c5c3c4b7b3aca69d97939298a0afbcccd7c6b29c8772594834200b000b1f344859697f949faab0b0aea39b8776614c36210c0000000b1b2832363a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39362d1f0f0000000000000000000014293e53697e93a8bed3e8e6d1bba6917c665e5e5e5560636a76849ba7b8cce0f5e1cdbaa9907b65503b25100004172a3a4f647a8b9fb4bac6cfd5c5b8b3aaa4a2a1a1a4a8b0b5c1cdc8bbb4a49c8777625544311d0a000000000000000011273c51667c91a6bbd1d9c4b19f979696958b78624d38230d0000000000000000000000000000010f1a212a33373c3f403f3c37342b241d12101b2224303435353535352b2921160800000000000000000000000000000b20364b60758a9fb4cadff1dcc6b19c867d7d7d7d7e80858b979fabbbc8d5ccbbaf9e927d675a49352010000000000000071c30435474899fb4c9dac5b09b85705544311d08000000000000000008182530354749494e63798ea5b6cac8b39e8974604b52687d92abbccfc9ae99836e564548453e353026180800000000000014293e54697e93a9bed3e8e9d4bfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000091d31455673889db2c8dddbc5b09b858d9fb5c3bcb5b4b9a88d78634e38230e000000000919304051636c808f9ba2a9adafb0afadaaa69d979088817d7d83959eafc5d6cab6a58c77624d37220d0005182a3b4f616a7f8c969a9b98928578625846331f0a000000000b161e21252525252525252525252525252525252525252525252524211a0f010000000000000000000011263b51667b90a6bbd0e5e9d3bea9947f747474747475787f889ba3b4c5d5e7ead8c7b49f8a75604b36210b000a1f3347586e8399a9bacdd7d5c5b8a79e958f8c8b8c8e939ba3b4bac7cec2b5a59a8473604b38281502000000000000000f24394f64798ea4c6d6d6c1ac978181818079635a4935200c0000000000000000000000000005131f2c353a474c51545554514d483b393020202d3639454a4a4a4a4a4a413d3426160400000000000000000000000000081d31445573889db2c8ddf1dcc7b19c8772686868696b7077828d9faabbcee0ccbcb49f8a78624d3e2e1b070000000000001325495e73899eb3c8dec9b49f8a75604b36200b0000000000000000132536434a5c5e5e5e5b72879db2c7ccb8a78f7a655e5e61778b9fb5cac9b49e8975605e5d5a534b4336261401000000000010253b50657a90a5c2d3e5edd8c3ad98836e583c2c1906000000000000000000000000000000000000000000000000000000000000000000021527385b70859bb0c5dad6c1ab96818197a5b6c6cacac6a7917c67523c271200000000001222344451626b7a858d94989a9b9a98948f88827b746c68686e7f95a7b9bcbcc3a6917c67513c271200000d1d324350616a79818586837c73625a483a291704000000000003090c10101010101010101010101010101010101010101010100e0c070000000000000000000000000e24394e63798ea3c5d6e8f4dfc9b49f8b89898989898a8e949ea6b4c1d1e3ebe2cebaa997826d5645321e09000c21374c61768b9fb4c7d8e0ccb8a79e897f7a777677797e85929fa9bacdd2c3b4a2937e695645321d09000000000000000c21374c61768ca8b9cdccb7a28d786c6c6b635b4a3c2c1906000000000000000000000000041323303d494e586167696b6a676259514d40352d3e4a4f5a5f606060606056514434210e00000000000000000000000000021527375b70859ab0c5daefdec9b49f8974595252545659626d7d8c9fb4c3d3e1cdbaa999836e5c4a36220a0000000000001d32475d72879cb2c7dccdbaa98e79644e39240f00000000000000071c304354607273737373738196abc1d5c5ab96807373737373859bb0c5cdb9a8907c7373737069605443301c1000000000000c21374c61768ca4b6cadef2dcc7b29d87725a4935200c00000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adc3d8d6c1ab968176879ca8b9c6d4c0ab96806b56412b1600000000000416263444505d6570787e83848685837f79746c65605453536075899ea7a7a7a7a7947e69543f291400000015253343505b636b70716e676055483c2b1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba7b9cce0f5e2cdbaa99f9e9e9e9e9e9faba9b3b8c5d1dfe7e0cebeb49f8b78634d38281602000f253a4f647a8fabbccfe5dec8b39e89786a656261626469717d8b9fb4bfd0d1c0b39e8875604b36200b000000000000000a1f33475874899eb4c9cfbaa48f7a6557554e4a3d2d1e0e00000000000000000000000000122230414d5b636f767c7e807f7c7770665e4d493c4a5c64707475757575756b62513d29140000000000000000000000000000182e43586d8398adc2d8ede1cdbaa98c77614c3d3f3b484d5f6a7f94a5b6cadfd7c7b2a18f7a644f3828160200000000061b30455b70859ab0c5dad7c7a7917c67523c2712000000000000000b20354a60738688898989888a9eb4c9dec9b49f8b88898989888b9fb4c9d7c6b49e8a888888857e72604b3e2e1b08000000000a1f33475872879cb1c7dcf1dfcab6a58d78624d38231100000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc0cfd7c1ab96816c798a9ea8b7c3c4af9a846f5a3c2b19050000000000081626333f4b4f5b63696d6f71706e6a646054504b43364557708592929292929292806b55402b16000000071525333d494e565b5b59524b44372b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465774899eb3c9def3ead7c7bab4b3b3b3b3b3b5bcc9c8cbd5e3ded5cbbdb1a0947f6a5a49351a0a000011263b51667b90a6c7d8ead5c0ab95806b5a4f4d4c4c4f535f677c90a1b3c7dbcbb8a6927d67523d27120000000000000004172a3a5c71879cb1c6d2bca7927d67524039362d1f0f000000000000000000000000000c1c30404d5f6779848b91949594918b857c70635a4c56647a85898a8a8a8a8a806b56412b160100000000000000000000000000162b40556b8095aac0d5eae9d7c7a48f79644f3a292b34414b6073879cb2c7dce5cfbfac97826d5645321e090000000003192e43586e8398adc3d8d4bfaa957f6a55402a1500000000000000071c3043546d82979e9e9e9e9ea8b9cde1cebbaa9f9e9e9e9e9e9fa9bacde1cdb9a89e9e9e9d9a93826d5c4b37220a0000000004172a3a566b8096abc4d4e7e6d4c3a9947f6954402f180800000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8b9b9c7baaa957f6a657b8a9da5b4b9b39e88735a4835200b0000000000000715212e373d494e54585a5b5a58554f4a43363530283950657b7d7d7d7d7d7d7d7a644f39240f0000000007151f2c3539414546433d353126190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395c71869bb1c6dbe1e1e5d7cdc9c9c9c9c9c9cacfdadddbd8d3c9c4b7b39f978272604a3c2c190000000f243a4f64798fa9bacee2d3bea8937e695346393c3b3b414d5e6f8499aec4d9d5c5ad98836e5836251300000000000000001a2f44596f8499aec4d4bfaa947f6a553f2a211a0f0100000000000000000000000004172a3a4d5f677d8b999faaa9aaa9ab9f9a918578665e6074879a9fa99f9f9f98836e59432e19000000000000000000000000000013283e53687d93a8bdd2e8e6d1bca6917c67513c2718203144556a7f94aabfd4e9dec9b39e8975604b36210b0000000001162c41566b8196abc0d6d7c2ad98826d58432d18000000000000000013253651667c91a8b3b3b3b4b9c6d7e9d8c8bbb4b3b3b3b3b3b4bac7d7e9d7c6b9b4b3b3b2afa08f7a644f38271502000000000f253a4f647a8fa6b7cbdff1dcc6b19c86715e4c36251300000000000000000000000000000006030000000000000000000000000000000011263b51667b90a4a4a4a4a99f907b655d657a87969ea8a7a78d78624d38220d0000000000000002101b222c35383f43454645433f3a353025201c23374b5d6567676767676767645c4a36220d0000000000010f1a21232c30312e27201d1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e8499aec3cccccccccccccccccccccccccbd6ccc8c6c3c2b6b1a69d918173605443301e0e0000000c21364b61768a9fb4c7d8d9c3ae99836e615754525050515254687d92a8bdd2dcc7b29d87725443301c0700000000000002172c42576c8197acc1d6c2ac97826d57422d180700000000000000000000000000000a1f334758677d8d9faab4bbc8c0c9bcb5b0a29a8a7c6864798ea5b4bab5b5b09b86715b392816030000000000000000000000000011263b50667b90a5bbd0e5e9d4bea9947f69543f2a141426374f647a8fa4c7d7e9e1ccb9a88f7a654f3a2510000000000014293e54697e93a9bed3dac5af9a85705a37261401000000000000000b21364b60758a9fb4c3c7c8c8c9cdd7e4d8cec9c8c8c8c8c8c8c8caced9e4d7cdc9c8c8c8bead97826d5645311d09000000000b20354a6073889db3c7d7e9dec9b5a4907b665443301c0e0000000000000000000001080b141b180d0b05000000000000000000000000000e23394e63798e8f8f8f8f8e8a806a5d4c5c647681898f92918d7b65503b2510000000000000000000080f1a2123292e2f31302e2a24201c130b081c2e3f4b50525252525252524f4a3e2d1b0700000000000000060c0e161b1c19120b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abb6b6b6b6b6b6b6b6b6b6b6b6b6b6c5b8b3b1ada9a49c93887d6c60554436251300000000091e3246576e8399a9baced9c7b3a19681766e6967666566676a6c7b90a5bbd0dfcab49f8a75604a35200b00000000000000142a3f54697f94a9bed4c4af9a846f5a3625130000000000000000000000000000021628384c6176889eabbbc8ced9d5dacfcac0b4a89e8d7e687b90a5c3cdd7c8b39e88735746321e09000000000000000000000000000e23384e63788da3c4d5e7ebd6c1ac96816c57412c170b21364b60768ba9bacde1e8d6c6a9947f69543f2a14000000000011263c51667b91a6bbd0ddc7b29d88725544311d0800000000000000091e3245566c8297a5b0b2b3b3b4bac6d7e9d6c6b9b4b3b3b3b3b3b4bbc8d9e8d6c5b8b3b3b3b39e8975604b36200b00000000071c3043546a8095a9bacde1e5d2c2b09b8572604a3d2c1d0e000000000000000009151d202a302d2220180d0000000000000000000000000b20364b60737a7a7a7a7a79766a62503f4b58616b767a7d7c77655d4b37230e0000000000000000000000060c0e14181a1c1b19150f0b0700000011212e373a3d3d3d3d3d3d3d39362d2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0a79e9c98948e867e75675f4b443727180800000000031628394e63798b9fb4bcc9d0bfb09f9689837f7c7b7a7b7d7f82859bb1c6dbe1cdb9a88b75604b36200b0000000000000012273c52677c91a7bcd1c7b29c87725443301c0700000000000000000000000000091e3245566c8196a7b8c9d8e2e4d7cdc9bfbbc6b9ab9f8d7d7c90a5bbd0e0ccb8a78b76614b36210c000000000000000000000000000b21364b60768ba6b8cbe0eed9c4ae99846f59442f1a091e32455674899fb4c9deecd7c2ad97826d58422d1800000000000f24394e64798ea3c5d6dfcab49f8a75604b35200b00000000000000031628384d627887969b9d9d9d9fa8bacde1cdb9a89e9d9d9d9d9d9faabbcee0ccb8a79e9d9d9d9d907b66513b261100000000001325364c61778a9fb4c6d6e9ddc9b5a3927d685b493b2c1e130801000000020d192731353f454237342b1d0d0000000000000000000000081d3144556064646464646361575044333a464c576165676661594b3f2f1c0800000000000000000000000000000003050605030000000000000003111c23252828282828282824221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a8986837e79716960564d41312719090000000000000b21364a5b687e939fabb6c2c8bdb0a89e9894919090909294979ba3b5c9dedec9b49e89745645311d09000000000000000f243a4f64798fa4c7d7c9b49f8a75604a35200b000000000000000000000000000b21364b6075899eb3c5d5e7e7d7c6bab4aaa6a9b2b7ab9f8c8095abc0d5e7d5c5a38e78634e39230e00000000000000000000000000091e32455673889eb3c8ddf1dcc6b19c87715c3a2a170b1f33465874899eb4c9deeed9c3ae99846e59442f1900000000000c21364c61768ba7b9cce0cebbaa8d77624d38220d00000000000000000a20344859627781868888888a9fb4c9dec9b49e8a88888888888c9fb4cadec8b39e898888888888816b56412c160000000000081f3347586c8197a8b9cde1e4d1c1b49e8a796359493c30201c14121112161e2b37444b545b584c483b2b1d0d0000000000000000000002152737444b4f4f4f4f4f4e4b46393325293339464b5052514c473b2f2111000000000000000000000000000000000000000000000000000000000000080e10121212121212120f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607477777777777777777777777777777776767573716e69635b544b4538301d150900000000000000071a2d3d4e60697f8d9ca4b0b4c1c6b9b4aea9a7a5a5a6a7a9acb1b5c1d2e5dac9b09b85705b38271502000000000000000d22374c62778ca9bacdcdbaa98c77624d37220d0000000000000000000000000012273c51677c91a7b8cce3ecdac9baa89f9591949da5b2aa9f8a9fb5cadfe5d0bba6907b66513b261100000000000000000000000000031628385b70869bb0c5dbf0dec9b49e89745847331f2028374c61768ba8b9cde1efdac5af9a85705a45301b00000000000a1f33465874899eb3c9ded9c8a48f7a654f3a2510000000000000000005192b3b4859626c717273737e93a8c2d2c2ad988373737373738399aec9d9bea9947e73737373736b62513d2914000000000004182a3a4d62788a9eb4c1d2e4e1cdb9a89d8777635a4d4135302627262728323b48556069706d6259483b2b1b0b0000000000000000000009192731363a3a3a3a3a393632281b15171f2932363a3d3c37342a1d11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445560616161616161616161616161616161616160555c58544e4a3d3632281a12010000000000000000000f1f31424f61697b86929ba3a8adb1b4bac7bababac8bbb4b2b7c3d2dfe3cfbcab95806a55402b1500000000000000000b20354a6075899fb4c9d7c7a48f7a644f3a250f00000000000000000000000001162c41566b8196abc5d6e8e3cfbcab9f8a807b7e8798a0b2ab9fabbccfe3e8d3bda8937e68533e29130000000000000000000000000000192e43596e8398aec3d8ede1cdb9a88c76614c373135394655677c91a6c6d7e9eed9c4ae99846f59442f1a00000000000417293a5c71869cb1c6dbd2bca7927d67523d28120000000000000000000d1d2b3b484d565b5d5e62778ca3b5c9c9b39e8974605e5e687d92abbccfc4af9a846f575e5e5e56514434220e0000000000000c20344859697f94a3b5c6d6e7d6c6b6a59c8678675f514b43363d3c3c38454b5962737f858277625948392919090000000000000000000009151d20252525252524211e160b00040b161e21252827221f180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b4437433f39362d211e160a000000000000000000000001142432434f5d65747d858d93989c9fa9a3a5a5a4a3aa9f9da5b7cadfdfcab59f8c78624d38230d0000000000000000071c30435472879cb1c7d1bca7927c67523d2712000000000000000000000000051b30455a70859aafc5daefdfcab59f8d7b6a6669758298a0b2b5bcc9daecebd5c0ab96806b56412b160100000000000000000000000001162b41566b8096abc0d5ebe9d6c6a48e79644f49444b4e576174859bb0c6dbf0ecd7c2ad97826d58422d18000000000000192f44596e8499aec3d9d4bfaa947f6a553f2a15000000000000000000000d1d2b3437414648485971869bb1c6ccb9a7907b65504c61778b9fb4cac9b49f8a76614c4848413d3426160500000000000005192b3b4b6073859ba8b9c9d9e4d3c3b6a49c897d7066605454525152545660697785949a978777625746372614010000000000000000000002080b0f0f0f0f0f0e0c090300000000030a0c1012110c0b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091927313637373737373737373737373737373737363531272e2924211a0f090300000000000000000000000000061425323f4c55606870787e82878a8c8e8f8f8f8e8d8a879db2c7dcd4c4af9a846f5a4935200b0000000000000000001325365a6f849aafc4d4bfa9947f6a543f2a15000000000000000000000000021527385e73889db3c8ddeed8c3ae99836e5d515660728298a3b5c7d7e7f7edd8c3ae98836e59432e19000000000000000000000000000014293e53697e93a8bed3e8e6d1bba6917c665e5e55606369758298a3b5c9ddf2e6d4c3aa947f6a553f2a15000000000002172c41576c8196acc1d6d7c2ac97826d57422d1800000000000000000000000d1820222c312b3b556b8095aac5d5c5ab96816c56475870859ab0c5cebbaa917c675136262c2922160800000000000000000d1d31445563798a9eabbccfe3e1d3c3b6a79e92857c746d69676667696e757e899ba2b0a59b8575615544311d1402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202222222222222222222222222222222121201d1519140e0c0700000000000000000000000000000000000714212f37444b535a63686d717577797a7a7a797775768ca1b6d9cbb7a6917c67513c2b1906000000000000000000182d42576d8297acc2d7c1ac97826c57422d17000000000000000000000000091d314556748a9fb4c9dfe7d2bda7927d68523f45546074859ba9bacde2f3f0dbc5b09b86705b392816030000000000000000000000000011263b51667b90a6bbd0e5e9d3bea9947f7474747475797f8798a0b2c1d2e4f2dfcbb7a58e79644e39240f000000000000142a3f54697f94a9bed4d9c4af9a846f5a362513000000000000000000000000050b0d171c253a4f647a8fa6b8cbc7b29d87725b4a54697f94a9c2d3c8ad98826d5443301c140e0500000000000000000001142637495b667c8d9fb4bbcfd9e1d3c5b9b3a39b9188837f7c7b7c7f8389939ea7b4c0b5a3998373604b42311f0b0000000000000000000000040a0c12141514100b0903000000000000070a0b0b0b0b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b080100000000000000000000000000000000000000000000000311192731353c494d535854606264656565646262778caabbcec8b29d8774604b35200e00000000000000000000152a3f556a7f94aabfd4c4af99846f5a3625130000000000000000000000000b20364b60758ba9bacee2e4ceb9a48f79644f3a36455663798b9fb4c5d6e8f3ddc8b39e88735745321e09000000000000000000000000000e24394e63798ea3c5d6e8f4dfc9b49f8b898989898a8e949da5b2becfdfefe2d2c2b29d87725c4a36220d00000000000012273c51677c91a6bcd1dcc7b19c87725443301c070000000000000000000000000000010b20354b6074889eb3c8cab6a58e79634e4e63788da4b6cac8b39e8874604b35200b00000000000000000000000009192c3d4c5e697f949db4bcc9d4e2d6ccc1b4b0a79e989492919194989ea7b3b9c5d1c2b3a197816c604e3a2611000000000000000000060c181f22272a2b2925211e160a0500090f111c1f202020202013110b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202c353b484d54606366686766636060758a9fb4cac0ab96806b5544311d080000000000000000000012283d52677d92a7bcd2c7b19c87725443301c0700000000000000000000000c21364c61768ba1c7d8eae2cdb7a28d78624d382738495b6b8096a7b9cce0f7e0cbb8a68b76604b36210b000000000000000000000000000c21364c61768ba7b9cce0f5e2cdbaa99f9e9e9e9ea8a3a9b2b7c3cfdceae2d3c4b5a3937e69543e2d1b070000000000000f243a4f64798fa4c6d7dec9b49f8975604a35200b000000000000000000000000000000081c3043546d8298adc8d4c3aa947f6a55495b72879cb1c7ccb8a78f7a644f3a250f000000000000000000000000000f1f2f404f61697f929fabb7c4cfdde0d1c8c5b8b3ada9a7a6a7a9adb3b9c5ccd6e0d0bfb19f937d68533e281300000000000000010f1a212a34373c3f403e3b3632282019121d24263135353535353528261f140600000000000000000000000000000000000000020b1113171717171717170e0c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c13110b020000000000000000000000000000000002080b10141515120e0c070000000000000002080a0b0b0b0b050300000000000000000000000000000000000000000000000000000000000000000000000001152532414e59626b74797b7d7d7b79756e72879cb1c7bba6917b6651372614010000000000000000000010253a4f657a8fa4c8d8c9b49f8975604a35200b00000000000000000000000b20364b60758ba9bacee2e1ccb7a28c77624d37222c3d4c6176899eb3c9d9ebe7d5c4a38e78634e39230e000000000000000000000000000a1e33465774899eb3c9def3ead7c7bab4b3b3b3b4b9c6bec7cad4e1e0d8cec2b6a69b8574604b362010000000000000000c22374c61778ca8bacde1cdbaa98c77624c37220d0000000000000000000000000000000114263652677c91aabbcec5b09b85705948566b8096abc5d5c5ab95806b563c2b190500000000000000000000000001122232434f61697e8d9da6b2bfc9d2dfddd5ccc8c2bebcbbbcbec3c9ccd6e0dfd1c5b8a89e8978634d38230e00000000000006131f2c353a474c52545554504b4539342b222f383b464a4a4a4a4a4a3e3a31241402000000000000000000000000000000000006141f26292c2c2c2c2c2c2c24211a0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c171f2129261f1406000000000000000000000000000209151d2026292b2a2823211a0f0a0400040a0c171d20202020201a18110800000000000000000000000000000000000000000000000000000000000000000000122232434f5f687781888e919292918e8a837b8096abc0b9a48f7a644f3a250f00000000000000000000000d22384d62778daabbcecdbaa98c77624c37220d0000000000000000000000091d314556748a9fb4c9dfe2cdb8a38d78634e38231f3346586b8096abbccfe3e5d0bba5907b66503b261100000000000000000000000000031729395c71869bb1c6dbe1e1e5d7cdc9c9c9c9c9cdd6d4dddbd8d5cbc8bbb4a49c8878625544311d08000000000000000b1f34475974899fb4c9ded7c7a48f79644f3a240f000000000000000000000000000000000c21364c61768a9fb4c9cab59f8b77624c4f657a8fa7b8ccc6b19c86715a4835200b0000000000000000000000000004142532434f60687b8898a0b0b5c1cacfd9deddd8d4d1d0d1d4d8dee0ded3cac0b4a79e8a7b655a4935200c0000000000061424313d494e596167696a696560574d483b32404c515c5f6060606060534e42311f0b00000000000000000000000000000000021424313b3e4141414141414139362d1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2933373e3a3124140200000000000000000000000a161e2731363b3e403f3d39362d221f180c171f212c3335353535352f2c25190b000000000000000000000000000000000000000000000000000000000000000009192f404f616a7d8a969ea6a6a8a7a6a99f9890879cb2c7baa5907b65503b261000000000000000000000000b20354b60758a9fb4c9d7c7a48f79644f3a240f0000000000000000000000021527385d73889db2c8dde4ceb9a48f79644f3a2417293a4d62788b9fb4cadfe8d3bda8937e68533e29130000000000000000000000000000192f44596e8499aec3ccccccccccccccccccccccdacfcac8c6c3c4b8b3aa9f968678635a49372715020000000000000004182a3b5c72879cb1c7dcd1bca6917c67513c2712000000000000000000000000000000000a1f3346586f849aafbdc9bcab937d68534b6074889eb3c8c9b5a48d78624d38220d000000000000000000000000000007142532424e5d657683909ba3afb4bcc9c9cdd6d3d5d6d6d5d4d5ccc8c3b6b2a29a897b655d4b3c2c19060000000001142431424e5b636f777c7f807e7b756c62594f424c5e667174757575757568604e3a2611000000000000000000000000000000000b1f31424e53565656565656564e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000007121927313a474c534e42311f0b000000000000000000000d1a283237444b50535555524e4a3d37342a1c2a333742484a4a4a4a4a444137291908000000000000000000000000000000000000000000000000000000000000011527374c5e6a7f929fa9b3b8c4bdbcc7bab4aea59ca5b6cabda8937d68533b2b180500000000000000000000081c30435472879db2c7d1bca7917c67523c27120000000000000000000000001a30455a6f859aafc4dae6d1bca6917c67513c27122034485a6f859aafc4daead5c0ab95806b56402b160100000000000000000000000001172c41566c8196abb6b6b6b6b6b6b6b6b6b6b6b6b6bcb5b3b1aeaaa69d968b8175635a493c2b19090000000000000000001a2f445a6f8499afc4ccccbea9947f69543f2a14000000000000000000000000000000000417293a51667c919fb0b4b9ae99846f5745556d8298adb5bbb4ab917c66513c2711000000000000000000000000000000071424313f4b58616e7b85919a9fabafb4b9c6bebfc1c1c0bfc5b8b3ada59c928578655d4b3f2e1e0e00000000000f1f31424e606879848b919495939089817869604b59667c868a8a8a8a8a8a7e68533e28130000000000000000000000000000000011263b4e60686c6c6c6c6c6c6c635b4a36210c00000000000000000000000000000000000000000000000000000000000000000000000005101b223037444b586168604e3a260b0000000000000000000d1d2b38454b556065696a6a67635b554c473a303a474c575d5f606060605a5447372511000000000000000000000000000000000000000000000000000000000000081d314455667c8d9fb4bac7cbc9bcb4aeabadb4b6b2b6c3d3c3ae98836e594834200b00000000000000000000011426365a70859aafc5d4bea9947f69543f2a14000000000000000000000002172c42576c8197acc1d6ead5c0aa95806b55392816192b3c53687e93a8bdd3e8d8c3ad98836e58432e19000000000000000000000000000014293f54697e94a1a1a1a1a1a1a1a1a1a1a1a1a1a1ab9f9e9c98948f8881786c6157493c2c1e0e00000000000000000002172d42576c8297acb6b6b6b6ac96816c57412c1700000000000000000000000000000000000b24384c5e6d81929b9ea8a09f8a76604b51677c91a9a0aa9f9c8c79634e38230e000000000000000000000000000000000613212f3a474c5e65717c848b949a9ea8a7a9aaacacaba9a6a79e9890877d72625a4b3f2e21110000000000061a2c3d4e60687e8c999faba9aaa9a89e978a7e6d6062778a9b9fa99f9f9f95806b56402b160100000000000000000000000000000013293e53687e8181818181818179634e39240e00000000000000000000000000000000000000000000000000000000000000000000030e19202d36404d556069767e685339291703000000000000000c1c2b3c4856606b747b7e807f7d79726a61594b434758616c7275757575756f6554412c180300000000000000000000000000000000000000000000000000000000000b20354b6074879cabbccdd7c8bbab9f9996989ea8b4c0d1dfc9b49f8a77624c3a29170400000000000000000000182d42586d8297adc2d6c1ac97816c57422c1702000000000000000000000013283d53687d92a8c2d3e5d9c4af99846f5746321e10263b50657b90a5c9daecdbc5b09b86705b382816030000000000000000000000000011273c51667c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8b8a8986837f7a746b625a4b46392c1e0e0000000000000000000000152a3f546a7f94a1a1a1a1a1a199846e59442f190000000000000000000000000000000000091d2f4052636d7d85898a8a8a8a7c66514b61758b8a8a8a8a867c665b4935210c000000000000000000000000000000000003111c2a33404c505e666f777e85898e92939596979594918e88837b73676054483c2e21110300000000000c2136495b687e929faab4bcc9bfc6b9b4a99f938273677d92a9b4bab5b5ad98836e58432e1900000000000000000000000000000003182d43586d82969696969696937e68533e29130000000000000000000000000000000000000000000000000000000000000000010b171e2b353e4a4f5e66747e8989735746331e0a0000000000000417293a485a6274808990939594928e8780776960544c617681888a8a8a8a8a836f5a442f1a00000000000000000000000000000000000000000000000000000000000114263752677d92a5b6c9dacebbaa9f8c8481838a9aa2b4c3d4cdbaa996806b5846331f0900000000000000000000152b40556a8095aabfd5c4af99846f5a442f1a0000000000000000000000000d22384d62778da4b6cadedec9b49f8a76614b36211023384d63788dabbccfe3ddc8b39d88735645321e09000000000000000000000000000b20364b6074777777777777777777777777777776767573716e6a6560554d493c32281b0e00000000000000000000000012273d52677d8c8c8c8c8c8c8c8c86715c47311c00000000000000000000000000000000000012223545525f6770747575757472604a465761747575757571665e4c3d2c1a06000000000000000000000000000000000000000c171f2f38404c515962697074787c7e808181807f7c78746d6660544a43362b1e11030000000000071a2d3d4e63798b9fb4bbc8cfd9d5d6ccc7bab4a09883747e93a9c7ced8c5b09b85705b38281603000000000000000000000000000000152b40556a8095aaabababab95806b56402b160100000000000000000000000000000000000000000000000000000000000009141d29333c484d5c64707c87939e8b76614b36210c0000000000000a1f334758627886959ea7a8aaaaa7a59d95897e7261586f83979d9faa9f9f9c87715c3a2a180400000000000000000000000000000000000000000000000000000000081d3144556e8399aec3d3dfc9b49f8b7b6f6b6e77849aa5b7cad7c7b49e8976614c3727150200000000000000000013283d52687d92a7bdd2c6b19c87715c3a2a180400000000000000000000000b2034485a72879cb1c9dae1cdbaa9917c67513e2d1920364b60758a9fb5cadfe0cbb8a68b76604b36210b00000000000000000000000000081d314455606161616161616161616161616161616160555c59554f4b4437352b1e160b000000000000000000000000000b20364b6074777777777777777776614c37210c00000000000000000000000000000000000004172735414d525b5560606060605443394655606060606054514c40301f0f00000000000000000000000000000000000000000004111c2330393b484d5454606367696a6c6c6b6a67636054514b43363025180e000000000000000c21364a5b6f849aa9bacdd8e3e6d9cecac4c2beb2a197827f93a9bed3ddc8b39d88735645321e0900000000000000000000000000000013283d53687d92a8bdc1c1ad98836e58432e190000000000000000000000000000000000000000000000000000000000071219263139464b5a626d7a85919ca5a38e79634e39240e000000000006192b3c4c6176869ca4b3b8c5bfbfc3b7b2a89e94847662768ba1b2b4bbb5b49f89745847331f0a000000000000000000000000000000000000000000000000000000000b20354b6075899eb4c9ded7c2ad98826d5d56596176879db2c7d7ccb9a8947f695544311d0800000000000000000010253b50657a90a5c9d9c9b49e89745947341f0a000000000000000000000005192b3c556a8095abbccfe3d7c7af9a846f5c4a37261d32455673889db3c8dde7d5c4a38d78634e38230e0000000000000000000000000002152737444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4b4437433f3a35312620190e030000000000000000000000000000081d314455606161616161616161615847331f0a0000000000000000000000000000000000000009172330393d37444b4b4b4b4a43362937444b4b4b4b4b43363930221201000000000000000000000000000000000000000000000009121d242b343736434b4e52545557575654514e4b43363530261c130800000000000000000e24394e63798ea2b4c7d7e9e6d8c8bbb4aeacb1b6b19f97869bb1c6dbdfcab59f8a76604b36210b00000000000000000000000000000010253b50657a90a5c8d9c5b09b85705b382815020000000000000000000000000000000000000000000000000000050f1a212f37444b57616b78828d9aa2b2b6a6917b66513c261100000000000b2035485a6c8196a4b6c2ccd5d5d4d4cac6b9b4a29a8677798ea3bfcacecdbaa88c77614c37220c000000000000000000000000000000000000000000000000000000000d22374c62778ca8b9cde1d0bba5907b66503f4758687d92a9bacdd6c6b29d8774604b36200b0000000000000000000d23384d62788dabbccfcdb9a88c77614c37220c0000000000000000000000000d23384d62788c9fb5cadfdcc7b3a28e7a645544312028385b70869bb0c5dbe5d0bba5907b66503b261100000000000000000000000000000919273136373737373737373737373737373737363531262e2a25201d1409060000000000000000000000000000000002152737444b4c4c4c4c4c4c4c4c4c473a291704000000000000000000000000000000000000000005131e252827313535353535302519263135353535353026241d12040000000000000000000000000000000000000000000000000000090d182022263035393d3e404142403f3c39353026201c140800000000000000000003162939566c8196abc0d0e5ead8c8bbaa9f99979ca4afb1a39ba3b5c9dde3cfbcab8d78634e38230e0000000000000000000000000000000d23384d62788daabbcec8b39d88735645321d09000000000000000000000000000000000000000000000000030d18202d36404c55606876808a989fabb4c0bea9937e69543e291400000000000d23384d62788b9fb4c2d3e0e8dfd1c8c5c1c4c0b3a49c867b8fa5bacfe2d7c6a48e79644f39240f000000000000000000000000000000000000000000000000000000000e24394e63798ea3c6d6e9cdb8a38d78634e383a4b61768a9fb4c9decbb7a6917c67513c27120000000000000000000b20364b60758a9fb4cad7c6a48e79644f39240f0000000000000000000000000b2035485a6f8499afbfd0e4d0c0b09b8573604b43352b43586e8398adc3d8e8d2bda8937d68533e281300000000000000000000000000000009151d2022222222222222222222222222222121201d141915100b080100000000000000000000000000000000000000091927313637373737373737373733291c0c00000000000000000000000000000000000000000000010a1012151d20202020201c1309141d20202020201c140809000000000000000000000000000000000000000000000000000000000000050b0d141c202327292b2c2c2b2a2723201c140b0801000000000000000000000a1e32465771869bb1c6dbeee2cebbaa9f8c848287949daeb5b1b5c1d2e4ecdac9a5907b66503b26110000000000000000000000000000000b20354b60758a9fb4cacab59f8a75604b36200b00000000000000000000000000000000000000000000010a161e2b343d4a4e5e66737e88959fa9b5bcc9d1c1ab96816c56412c170100000000142a3f54697f94aabbcee0ebdbcec1b4b0acafb4bbb6a49c879db2c7dce6d1bba6917c66513c2711000000000000000000000000000000000000000000000000000000000f24394f64798ea4c9d9ebccb7a18c77624c373246576f859aafc4dad4c4ac97826c57422d17020000000000000000081d31445573889db2c8d1bca6917c67513c271200000000000000000000000006192b3c4f647a8fa1b3c6d7ddc8b4a3957f6a614d483c48566b8096abc0d5ead5c0ab95806b56402b160100000000000000000000000000000002080b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0801000000000000000000000000000000000000000000000000000009151d202222222222222222211f170c00000000000000000000000000000000000000000000000000000001080b0b0b0b0b07000001080b0b0b0b0b0801000000000000000000000000000000000000000000000000000000000000000000000001080b0e12141517171615120e0b0801000000000000000000000000000c21364b61768a9fb4cadff4dfcab49f8c7c6f6d747f949daebfc9d2dfefe8d3bda8937e68533e2913000000000000000000000000000000081d31445572889db2c7cfbcab8d78634e38230e00000000000000000000000000000000000000000008141c28323b484c5b636f7b86939ea6b4bac7cfd5cbc0ae98836e59432e1904000000031729395b70859ab0c8d8eae0cebdb1a39b97999faab2b6a59da5b6cadfe9d3bea9947e69543f2914000000000000000000000000000000000000000000000000000000000d22384d62778dabbccfe3cdb8a38e78634e392839566c8196abc1d6dac5b09b85705b46301b080000000000000000021527375b70859ab0c5d4bea9947f69543f2a14000000000000000000000000000e22374b5c6e8399a8b9cde1d1c1af9e947f6d625a5b5a626a7e94a9bed3e9d8c3ad98836e58432e19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0c0c0c0c0c0c0c0c0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788eaabbcee2ecd7c2ad97826d5e55606a7f94a1b3c7d7e9fcead5c0ab95806b56402b1601000000000000060b0d1212121212121527375b70859ab0c5dac9a5907b65503b2612121212121212120c0b04000000000000000000061118263039454b59626d7984909ca4b3b8c4cdd7cdc4b7b3a296816c56412c17010000000a1e33465774899eb4c9def3d9c4b19f978582848b99a1afb6b2b6c3d4e6ebd6c1ab96816c56412c17010000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cadfd1bca6917c67513a2940556a7f95aabfd4dcc7b29c87725d472c221b100200000000000000182e43586d8398adc2d6c1ac96816c57412c1702000000000000000000000000071b2e3e4d63788a9eb4bfcfdfccbcae9d948278727173787f8b9fb4c9def0dac5b09b85705b38281502000000000000080e102020202020202020201d1b140b00000000030c12141d2020202020202020200e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b150e0c060000000000000000000000000000090f1112121212121212121212121212121212121212121212121212121212120b0902000000000000000000000000040b0c0d0b05000000000000040b0c0d0b050000000000000000000000000000000f253a4f647a8fa4c8d9ebe9d7c7a5907b6550444b616e8399a9bacde1f5edd8c3ad98836e58432e190000000000000e192023282828282828282d43586d8298adc2d2bda8937d68533e282828282828282828221f180c000000000000010f1a212e36434b57606a77828c9aa2b1b6c2cbd5cfc7bab4a69d928476614c37210c000000000c21364c61768ba8b9cde1ecd6c1ac9781706c6f7783959eafbdcad4e1f1eed8c3ae99836e59442e1900000000000000000000000000000000000000000000000000000000081d31445570859bb0c8d8d7c1ac97826c5847363d576c8196acc1d6dcc7b19c87725c493d372e201000000000000001162b40566b8095abc0d5c4ae99846f59442f1a0000000000000000000000000000102035495a697e93a1b2c1d1dacbbbaea0978d8786888d959fa9bacde1f2ddc8b39d88735645321d090000000003111c2325353535353535353535322f281c0e0000071520272a3335353535353535353523211a0f0100000000000000000000000000020b1113150b090300000000000000000000000000000000000000000008131c202a23211a0f010000000000000000000004121c24262828282828282828282828282828282828282828282828282828282828201d150a000000000000000000040c181f22221f180d080000040c181f22221f180d080000000000000000000000000011263b51667b90a6bbd0e5e1cdbaa98c77614c37434d62788a9fb4c7d8eaf0dbc5b09b86705b38281603000000000e1e2b35383d3d3d3d3d3d3d3d40556a8095aabfd5c0aa95806b55403d3d3d3d3d3d3d3d3d37342a1d0c00000000000f1f2c353f4b546068757f8a979fabb3c0c9d3d2c9bfb2a99f95887d72615847331f0a000000000e23384d63788da2c6d6e9e4ceb9a48f7a645759626e80959fb0c1d2e7f7f0dbc6b19b86715c3929170300000000000000000000000000000000000000000000000000000002152737556a7f94aabbcedec9b39e89766154494b5b6f849aafc4dadac5b09a8570635b4f4b3e2e1d0d00000000000013283e53687d93a8bdd2c6b19c86715c3a2a17040000000000000000000000000006192c3c4a60728399a3b4c1cfe1cbbeb1ada59c9b9da6aab4bac7d7e9f4dfcab59f8a75604b36200b0000000011212e373a4a4a4a4a4a4a4a4a4a47443a2c1c00041525323c3f484a4a4a4a4a4a4a4a4a39362c1f0f00000000000000000000000006131e26282a211e160a0100000000000000000000000000000000000009182530353f38352c1f110300000000000000000012222f383b3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3632281a0a000000000000000c171f2a343737342a221b100c171f2a343737342a221b1003000000000000000000000011263b50667b90a5bbd0e5dec9b49f897458473334485a6b8095a9bacee2f2ddc8b39d88735645321e0900000006192b3c494d52525252525252525252687d92a7bdd2c2ad98836d58525252525252525252524c473b2a18040000000e1e2c3d494e5d65737d88959ea8b4bcc9d0d5ccc2b5b1a1998b8076686054473a2a1704000000000d22374d62778ca2c7d8eae2cdb7a28d78624d484d626c8196a3b5c9d9ebf3dec8b39e89735746331e0a000000000000000000000000000000000000000000000000000000000d23384d62788b9fb4c5d5ccb9a8988272635b5c64798d9fb5cadfddc8b39e887f7871645c4b3b2b1805000000000011263b50667b90a5bbd0c9b49e89745847331f0a00000000000000000000000000000e1c3043546074859ba3b2bfccd6cec5c3b6b2b0b2b7c4c6c3c6cfddede3cfbcab8d78634e38230e000000081c2e3f4b506060606060606060605d574a3a1808122232434f545d5f60606060606060605e493d2c1a0600000000000000000000001324313a3d3f3632281d14090000000000000000000000000000000009192736434a544e493d2f22120400000000000000091c2f404c5152525252525252525252525252525252525252525252525252525252524b453828150200000000000c1c29333b474c4c473b372e211c29333b474c4c473b372e2110000000000000000000000010253a4f657a8fa4c8d8eadec9b39e89745e3a2a2b3c4c62778b9fb4c9dff4e0cbb8a68b76604b36210b0000000b2035495a6267676767676767676767677a90a5bacfc5b09a85706767676767676767676767615947341f0b000006192c3c495b636e7b85929da6b4b9c6cfd2c9c5b8b3a49c9083786b61574a43362a1c0c00000000000c21364b61768ba9bacee2e2cdb8a38d78634e38434b6073859babbccfe3f5e0ccb8a78b76614b36210c000000000000000000000000000000000000000000000000000000000b2035495a6c8197a7b8c8d6c6b2a098837874747a869cabbccfe3e0cbb8a69e958d857a64594834200b00000000000e23384e63788da3c4d5ccb9a88c76614c37210c000000000000000000000000000000132536455661768599a1b3b9c6ccd6d3cac7c6c8c2b6b1aeb2bfcfe2ecdac9a5907b65503b26100000000e23374b5d657575757575757575757268573625131d2f404f616972757575757575757575705b4936210c00000000000000000000081831424e53554b4538312619110300000000000000000000000000011527374454606a635b4c402f2212030000000000000f24384c5e666767676767676767676767676767676767676767676767676767676767605645321d09000000000417293a464c596162594f4b3f2e293a464c596162594f4b3f2e1d0d000000000000000000000e23384d63788daabbcee2dfcab49f8a75574633203448596e8398adc5d6e8e7d5c4a38d78634e38230e0000000d23384d62787d7d7d7d7d7d7d7d7d7d7d7f94a9bed4c8b39e887d7d7d7d7d7d7d7d7d7d7d7d77614c37220c00000c2035495a637983909ba3b2b7c4cdd7cfc1b5b1a79e93867b6e625a4b46393025180c0000000000000a1e324657748a9fb4c9dfe4cfbaa58f7a65503a31445564798c9fb4cadff0e8d6c5a38e79634e39240e0000000000000000000000000000000000000000000000000000000006192b3c4c6277899eaabbc8cfbeb2a1998d89898f9ca4b6c9dae2dfd5c5b8b3aaa39b8a77624d37220d00000000000b21364b60768ba6b8cbd6c6a48e79644f39240f000000000000000000000000000000081828384758617583929ea8b3b9c5c2c4c3c6b9b4a49c99a1b2c6dbe8d2bda8937d68533e281300000010253a50657b8a8a8a8a8a8a8a8a8a87725443301c24384c5e697f878a8a8a8a8a8a8a8a8a79634e39230e000000000000000000011426364e60686a60564b44372f211406000000000000000000000000081d31445560727f79665e4c402f211100000000000011263b51667c7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d74604b36200b000000000a1f3346586170777772655d4b3b3346586170777772655d4b3b2a18050000000000000000000b20364b60758a9fb4cadfe2cebbaa8b76614c36212b3b51667b90a7b9cce0e5d0bba5907b66503b261100000011263b50667b9092929292929292929292949daec2d6cbb8a69e9292929292929292929292917c67513c271200000e23384d63788b99a1b1b5c1cbd4e1cfbeb2a39b93887e73655d4d493c33291c130800000000000000031629395d72879db2c7dce7d2bca7927d67523d26374a5c6e8398aec2d3e5e5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000e1f344859657b8c9faab7c4cebfb3aea89e9ea8b1b6c2d3d7cdc9c9c9c9c8c1b5a8937e69543e29140000000000091e32455673889eb3c8d1bba6917c66513c2711000000000000000000000000000000000a1a2a3a4757606e7d89959ea7abadafaeaca89e95868399aec3d8ead5c0aa95806b55402b160000000d23384d62788daa9f9f9f9f9f9f9f8a75604a35202c3c51667c919d9fab9f9f9f9f9f9a846f5b4936210c000000000000000000081c304354687e7f756860554c403224140000000000000000000000000b20354b60738294897c665e4c3f2e1d0d00000000001a2f445a6f84929292929292929292929292929292929292929292929292929292928e79634e39240e000000000c21364c6176848c8c877b655948364c6176848c8c877b655948341f0b000000000000000000081d31445571879cb1c6dcead8c8a38d78634e382320354b6074899eb3c9dee8d3bda8937e68533e29130000000e23384e63788daba7a7a7a7a7a7a7a7a7a9aebbcbded5c4b8b3a7a7a7a7a7a7a7a7a7a7a7947f69543f2a1400000c21374c61768ca8b3bfc9d2dfe7dac6b2a098857e756860554b3f352c1e170b000000000000000000001b30455a70859aafc5dae9d4bfaa947f6a553f2a2d3e4f647a8fa4b6cadee8d3bda8937e68533e2913000000000000000000000000000000000000000000000000000000000005182a3b4b5d677d8c9da6b4bbc8c6c6b9b3b4b9c6cacfcac7bab4b4b4b4b4b4b4ad97826d58422d180000000000031628385b70869bb0c5d3bea9947e69543f291400000000000000000000000000000000000c1c2a39454b60687680899095989a9896918980767e93a8bdd3e8d8c2ad98836d58432e180000000b20354b60758a9fb4b5b5b5b5baa98c77624c372235495a70859aafb4bcb5b5b5b7a6917c67513d2c1a060000000000000000000b20354b60738794887d73655e4f423219090000000000000000000001162b40566b8095a09e8b7c665d4b3b2b180800000000172c42576c8197a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a6917b66513c261100000000152b40556a8095a2a59c8977624c40556a8095a2a59c8977624c37220f00000000000000000002152737576c8297acc6d7e9d2bda7927d685237271d3144556e8398aec3d8ead5c0ab95806b56402b160100000b20364b60758a9fb4bcbcbcbcbcbcbcbcbec2cbd9e9e2d5cbc8bcbcbcbcbcbcbcbcbcbcac97816c57422c1700000a1f33475874899eb4c2c9d2dee5d8c3ad98837b746c625a4d483c342b1f180d04000000000000000003182d43586d8298adc2d7ecd7c1ac97826c57422d22364a5c72879cb1c7dcebd5c0ab96806b56412b160100000000000000000000000000000000000000000000000000000000000d1d2e3f4d5f677b88979faab3b9c5c1c3c4c4c3c9bcb4afa99f9f9f9f9f9f9f9f9a85705b45301b000000000000192e43596e8398aec3d6c1ab96816c56412c170100000000000000000000000000000000000c1b2832414e58616b757b80838483817c766a667b90a5bbd0e5dac5b09b85705b382815020000081d31445572889db2c7cacad7c7a48f7a644f3a27374d63788c9fb5cacfd9d8c8b29d8874604b35200f0000000000000000000417293a51667c91a59d92867b69604f3726140100000000000000000004192f44596e8399a8a99f8b7b65594836251300000000142a3f54697f94a9bcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbca9937e69543e2914000000011426375b70869bb0b6a795806b553d5b70869bb0b6a795806b553d2d1a0700000000000000000012273c52677c91a8b9cde1d7c2ac97826d5544311d273753697e93a8bed3e8d8c3ad98836e58432e19000000091d31455673889db2c4c4c4c4c4c4c4c4c4c5c8d1dfefe3d6ccc9c4c4c4c4c4c4c4c4c4af99846f5a362614010004172a3a5c71869ca4b1b5c2c9d2dac6b2a098908881786c625a4d483b342a1f180c0400000000000000162b40556b8095aac0d5ead9c4af99846f5a442f1b2d3e576c8196acc1d6ebd8c3ad98836e58432e1900000000000000000000000000000000000000000000000000000000000000112130414d5d6577828b979ea7a9acaeafafaeabab9f9a908a8a8a8a8a8a8a8a8a87725d48331d000000000001162b41566b8096abc0d5c3ae99846e59442f19000000000000000000000000000000000000000a161e313a474c5660656b6d6f6e6c66615763788ea3c4d5e7ddc8b29d88735645321d090000011527375b70859ab0c5dadfd1bca7917c67523c3144556b8095abbccfe3e2cebbaa957f6a5544311d080000000000000000000a1f3346586e8399aeb2a49c907e695544311d08000000000000000000000e23394e63798a9eaaa99d8877625443301c0b00000012273c51677c91a6bcc4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c1ab96816c56412c17010000081d31445574899eb4c5b29d87725b4a5574899eb4c5b29d87725b4a36210c0000000000000000000c21364b6176899eb4c9deddc8b39d8874604b3520263b51667b90a6bbd0e5dbc5b09b86705b382816030000021527385b70859aaeaeaeaeaeaeaeaeaeaeb0b4c1d1e4d6c5b9b3aeaeaeaeaeaeaeaeaeae9c87725443301c08000011263c51667c86919ca4b1b5c2c9cfbeb2ada79e968b81786c62594c483b342a1f170b00000000000013283d53687d92a8bdd2e7dcc6b19c87715c3a2a172a3f54697f94a9bed4e9dac5b09b85705b38281502000000000000000000000000000000000000000000000000000000000000031323303f4b59626d7882898f9497999a9a9896928b857b74747474747474747472695844301b00000000000014293e53697e93a8bed3c6b19b86715c3a2917040000000000000000000000000000000000000003131c2a3338454b5056585a5957514b4b60768ba6b8cbe0dfcab59f8a75604b36200b000000182d43586d8298adc2d7e9d4bfa9947f6a543f354b6074889db3c9daecdfc9b49f8b77624c372715010000000000000000000c21364c61768a9fb4c2b5b19e8974604b35200b000000000000000000000c21364a5b657c8c9fb4a69a8472604a3a29170400000f24394f64798ea4aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae99846e59442f190400000b20354b60758aa8b9cab7a58e79634e60758aa8b9cab7a58e79634e39240e000000000000000000091e3246576d8298adc0d0dfcbb7a6917c6751413123394e63788ea3c4d5e7ddc8b39d88735645321e09000000182d42586d8297999999999999999999999ba3b4c8ddccb9a79e99999999999999999999998a75604b35200b00000f24384c5e66737c86919ba3b0b5c1c9c6c5b8b3a99f978b81776c62594c473b33291b0e000000000010263b50657b90a5bad0e5dec9b49e89745847331f273c52677c91a7bcd1e6ddc8b39d88735645321d09000000000000000000000000000000000000000000000000000000000000000513212e3b484c5a636c757a7e8183848483807d7770665e5f5f5f5f5f5f5f5f5d584b3b281500000000000011263b51667b90a6bbd0c9b39e89745846331f0a0000000000000000000000000000000000000000000c171f2731363b40434543413c36455673889db3c8dde3cfbcab8d78634d38230e000000162b40556b8095aac0d5ead6c1ac97816c57423b51667c91a6b7cbe7e5d2c1ad98836d59473419090000000000000000000215273753687d92a9bacecab49f8a75604b36200b00000000000000000000071a2d3d4c5e697f94a0b2a2937e685846331f0900000c21364c61768b9999999999999999999999999999999999999999999999999999999986715c47311c0700000c21364c61768ba1c6d4c3a9947f695461768ba1c6d4c3a9947f69543a2917040000000000000000031628394f64798ea2b3c8d9d4c4b09a8570604e3c2b364b60768ba6b8cbe0e0cbb8a68b76604b36210b00000012283d52677d8484848484848484848484859bb0c5dac9b39e8983848484848484848484848376614c36210c0000091d30404c546067737c86919ba3b0b5c1c8ccc7bab4a99f978a81776b61594c463a2b1e0e000000000e23384e63788da3c5d5e7e1cdb9a88c76614c3721243a4f64798fa4c7d7e9dfcab59f8a75604b36200b000000000000000000000000000000000000000000000000000000000000000003101d2b343c494d566065696c6e6f6f6e6b676259504c404a4a4a4a4a4a4a48443b2d1d0b0000000000000e24394e63798ea3c5d6ccb9a78b76614c36210c00000000000000000000000000000000000000000000040a151d20252b2e2f2e2c2728385b70869bb0c5dbecdac9a5907b65503b261000000013283d53687d92a8bdd2e7d9c4ae99846f594448596f8499aec4d5e7dec9b5a38f7a654f3b2a1800000000000000000000081d3144556e8499aec7d8c5b09a85705645321d0900000000000000000000000f1f2f404f616e8398a8b39e8976614c37261401000a1f3346586e8284848484848484848484848484848484848484848484848484848484826e58432e190300000d22384d62778da2b7ccc5af9a85705862778da2b7ccc5af9a85705846331f0a0000000000000000000b22364a5c6f849aaabbceddc8b4a2927d685a483b32455773889db3c8dde7d5c4a38d78634e38230e0000001025394d5f676f6f6f6f6f6f6f6f6f6f6f798ea3c5d5c7b29c87726f6f6f6f6f6f6f6f6f6f6f615846331f0a00000012223036434b546067737c85909ba3b0b4c0c8cec7bab4a99f968a81776b6158483c2b19050000000b21364b60768ba7b8cce0e9d7c6a38e79644e392422374c62778ca9bacde1e3cfbcab8d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000d18202c3538454b4f5457595a5a5956524c483b382f353535353535353330281d0f000000000000000c21364b61768ba7b8ccd6c5a38e79644e39240f00000000000000000000000000000000000000000000000002090b1016181a1917192e43586e8398adc3d8e7d2bda8927d68533d281300000010263b50657b90a5c9daecdcc6b19c87715c3a4d62788b9fb4cadfe8d6c5b19b86715d4b371d0d000000000000000000000b20364b6075899eb4c9d7c6aa947f6a5538281502000000000000000000000005152533434c6277899eb4a7947f6a5544311d08000417293a53646e6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6e6453402b160200000e23394e63788ea3b8cdcab49f8a766163788ea3b8cdcab49f8a76614c36210c000000000000000000071b2d3e4e63798c9fb4c2d2d1c0b39e897862594a3d395b70859bb0c5dae5d0bba5907b66503b26110000000a1e30414d525959595959595959595960768ba6b8cbc9b49f8a7560595959595959595959594c463a291704000000041218263036434a546066717b85909ba2afb4c0c8cec7bab4a99f968a8076625a4835200b000000091e32455673889eb3c8dde6d0bba6917b66513c261f34475974899fb4c9deecdac9a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000050e19202731363a3f4244454543413d37342a231c1f1f1f1f1f1f1f1d1b150b00000000000000000a1e33465773899eb3c8d0bba6917b66513c2611000000000000000000000000000000000000000000000000000000000103050402162b40566b8095abc0d5ead5c0aa95806b55402b160000000e23384d63788dabbccfe3dec9b49e89745847546a7f95aabbcee2e0ccb9a7927d68533f2e1b000000000000000000000010253a50657a8fa8b9cccdbaa88e79644f39240f00000000000000000000000013233343505b636c8297acb39d8874604b35200b00000c1c36465359595959595959595959595959595959595959595959595959595959595853463621110000000f24394f64798ea4c7d7cebbaa917c6664798ea4c7d7cebbaa917c66513c2711000000000000000000001021364a5b6c8196a4b5c5d6ccb8a79c8677635b4b46586d8398adc2d8e8d3bda8937e68533e291300000001132330393d444444444444444444455773889eb3c8cebaa98c77624d4444444444444444443633291c0c00000000000008141c253036434a515e66707b85909aa2afb4c0c7cdc7bab4a89f968778624d38220d000000031628385b71869bb0c6dbe8d3bea8937e69533e29182a3b5c72879cb1c7dce7d2bda8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000060a151d2025292c2e2f2f2e2b27221f180d09000a0a0a0a0a0a080601000000000000000000031729395c71869bb1c6d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdd2e8d8c2ad98836d58432e180000000b20364b60758a9fb5cadfe1cdb9a88c76614c6074879db2c8d9ebdac9b39e8975604b3621100000000000000000000000132536556a7f95aac6d6c9b49f8975604b35200b00000000000000000000000919314150616a7981869cb1b8a6907b65503b2610000005192b3c484d5353535353535353535353535353535353535353535353535353535353504b3f2e1c0800000d22374d62778ca9bacdd8c8a9947f6a62778ca9bacdd8c8a9947f6a543f2a1500000000000000000000071a2d3d4b6074869ca7b9c7d5c5b6a49c86796a6157556b8095aac0d5ead5c0ab95806b56402b160100000005131e25282f2f2f2f2f2f2f2f28395b70869bb0c5d8c7a48f7a644f3a2f2f2f2f2f2f2f2f211f170c00000000000000000108131c253035404c515e66707b858f9aa2afb3c0c7cdc6bab4a598826d5837261401000000192e44596e8399aec3d8ebd6c0ab96816b56412c1a2f455a6f849aafc4d9ead5bfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000002090b101417191a1a1916120d0b0500000000000000000000000000000000000000000000192e44596e8399aec3d6c0ab96816b56412c160b080200000000000000000000000000000000000000000000000000000000000011263b50667b90a5c9daecdac5b09a85705b372715020000091d32455673889db3c8dde9d6c6a48e796450667b90a5b7cae6e3cfbcab96816b5745321e0900000000000000000000071c3043546f8499afc4d9c5af9a85705544311d0800000000000000000000021527374e5f6a7f8c969ca4b6c4ab96816c56412c1700000b2035485a626969696969696969696969696969696969696969696969696969696969655d4b37230e00000b20354a60758a9fb4c9d7c1ac97826c60758a9fb4c9d7c1ac97826c57422d1700000000000000000000000f1e3245566379899ea9b9c6d3c2b6a49c8b7f766d69687d92a8bdd2e7d8c3ad98836e58432e190000000000010a10121a1a1a1a1a1a1a1a2e43596e8398aec3d1bca7927c67523d271a1a1a1a1a1a1a0c0a0400000000000000000000000008131c202f38404c505d65707b848f9aa2afb3bfc7cdc3b29d87725544311d08000001172c41566c8196abc1d6ebd8c3ae98836e59432e192d42576d8297acc2d7ecd7c2ad98826d58432d1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6c3ae99836e5944302a201d150900000000000000000000000000000000000000000000000000000000000e23384e63788dabbccfe3ddc8b29d88735544311d080000021528385b70859bb0c5dae6d1bba6917c66596e8398aec3d4e6dfcab59f8c78634d39281603000000000000000000000b20354a6074899eb3c9d6c1ac96816c573727150100000000000000000000081d314455687d929fabb1b6c2c5b09b85705b46301b00000d22384d62787e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7b65503b25100000071c30435472879cb2c7d9c4af9a846f5472879cb2c7d9c4af9a846f5a362513000000000000000000000002162838495b657b8b9ea8b7c4d0c2b6a99f9489837e7c7f94aabfd4e9dbc5b09b86705b38281603000000000000000004040404040404162b41566b8096abc0d4bfa9947f6a543f2a15040404040404000000000000000000000000000000000007121d242f383f4b505d656f7a848f99a1aeb3bfcab49f8a75604b35200b00000014293f54697e94a9bed3e9dbc5b09b86705b3827152a3f556a7f94aabfd4e9dac5af9a85705a372614010000000000000000000000000002090b101414100b090200000000000000000000000000000000000000000b151b1d2020202020202020200f0d070000000000000000000000000000000014293f54697e94a9bed3c6b19b86715c39453f3631271909000000000000000000000000000000000000000000000000000000000b20364b60758a9fb5cadfdfcab49f8a75604b36200b000000192e43586e8398adc3d8e8d3bea9937e6961778b9fb4c9dfe6d4c3af99846f5a49351b0a00000000000000000000000e23384d63788da7b9ccd3bea8937e69533e291400000000000000000000000b20364b6074889db3bcc9cad3c8b39d88735e48331e00000f24394f64798e93939393939393939393939393939393939393939393939393939393836e59442f190000001325365a6f849aafc4d9c7b29c8772546f849aafc4d9c7b29c87725443301c0700000000000000000000000a1a2c3d4b5d657b8a9da6b3bfcbc7bab4a79e989391949dafc2d7f2ddc8b39d88735645321e0900000000000000000000000000000013293e53687e93a8bdd3c1ac97826c57422d170200000000000000000000000000000000000000000000000009111c232f383f4b505d656f7a848e99a1aeb5bbaa8d78624d38220d00000012273c51677c91a6bcd1e6ddc8b39d88735645311d283d52677d92a7bcd2e7dcc7b29d87725544311d080000000000000000000000000a151d2026292926201d150a0000000000000000000000000000000000000f1d28303335353535353535353524221b1002000000000000000000000000000011273c51667c91a6bbd1c8b39e8973575b5a544b4437271502000000000000000000000000000000000000000000000000000000091d32455673889db3c8d3d3cfbcab8d78634d38230e000001162b40566b8095abc0d5ead6c1ab968172748197a9bacee2dfcab7a5907b66513c2c1900000000000000000000000011273c51667c91a6c5d6d6c6a5907a65503b251000000000000000000000000f253a4f647b8fa6b7cbd9dedec9b49f89745f4a341f00000c21364c61768ba7a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89b86715c392917030000172d42576c8297acc1d7c9b49f8a75606c8297acc1d7c9b49f8a75604a35200b0000000000000000000000000f1f2e3f4c5d657a8799a1b3b7c4cbc5b9b3ada8a6aaafbbccdeeae0cbb8a68b76604b36210b00000000000000000000000000000011263b50667b90a5c9dac4af99846f5a442f1a00000000000000000000000000000000000000000000000000000009111c232e373f4b4f5c646f7a838e999faba58f7a65503a25100000000f243a4f64798fa4c7d7e9dfcab59f8a75604b3620253a4f657a8fa4c8d8eadfcab49f8a75604b35200b0000000000000000000005131a2832363b3e3e3b3631271a13050000000000000000000000000000000b1d2d3b44484a4a4a4a4a4a4a4a4a3a372e201000000000000000000000000000000f24394f64798ea4c6d6ccb8a78b7571716f69605544311d0a000000000000000000000000000000000000000000000000000000021528385b70859bb0bdbdbdbdc9a5907a65503b251000000013293e53687e93a8bdd3e8dec9b49e8a8789979fb1c7d8e4d3c3b29d8773604b35200e000000000000000000000000152a3f556a7f94aabfd4ccb9a88c77624c37220d000000000000000000000012273d52677c92a7c4d4e7f0ddc8b39d88735e48331e00000a1f33465874899eb3bebebebebebebebebebebebebebebebebebebebebebebebeb39e89735746331e0a0000152a3f556a7f94aabfcacdbaa98c77626a7f94aabfcacdbaa98c77624d37220d0000000000000000000000000111212f3f4c5c647683929da6b3b7c4c9c9c2bebbbfc2ccd8d7d5d3d2c4a38d78634e38230e0000000000000000000000000000000e23394e63788eabbccfc7b19c87725c3b2a18040000000000000000000000000000000000000000000000000000000008111c232e373e4b4f5c646e79838c989f927d68523d28130000000c22374c61778ca9bacde1e3cfbcab8d78634d382322384d62778daabbcee2e2cebbaa8d77624d38220d0000000000000000000614233038454b505353504b453830231406000000000000000000000000000015283b4b585d6060606060606060604f4b3e2e1b07000000000000000000000000000c21374c61768ca8b9cdd5c5b19c868686857f73604b38281603000000000000000000000000000000000000000000000000000000182e43586d8398a8a8a8a8a8a8a8927d68533d281300000011263b50667b90a5bbd0e5e1ccb9a89e9d9ea8b1becee5d7c6b6a5937e695443301c08000000000000000000000003182d43586d8298adc2d7c9b49e8974594834200b000000000000000000000011263c51667c91aabbcedadbd2c1af99846f5a442f1a00000417293a5c71869bb1c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3b8a78b76614b36210c000012273d52677c92a7b5b5b5b5a48f7a64677c92a7b5b5b5b5a48f7a644f3a250f000000000000000000000000000311212f3e4a58616f7d88949da6aeb3b9c5c0c2c3c4c4c3c2c0bdc2b5a5907b66503b26110000000000000000000000000000000b21364b60768a9fb5c7c7b49f89745947341f0b00000000000000000000000000000000000000000000000000000000000008101b222e373e4a4f5c646e79838c957f6a55402a150000000b1f34475974899fb4c9deecdac9a5907a65503b2520354b60758a9fb4cadfead8c8a48f7a654f3a2510000000000000000000142432414d56606569696560564d4132241400000000000000000000000000001b3044586972757575757575757575645c4b37220d000000000000000000000000000a1f33475874899eb4c9dec9b5a49c9b9b9a94816c5645321e09000000000000000000000000000000000000000000000000000001162b40566b80939393939393939393806b55402b160000000e23394e63788ea3c5d5e7e8d6c6b9b4b2b3b9c6cedce1cdbaa89c8774604b362614010000000000000000000000001325365b70859ab0c5dac7b19c87725c3b2b180500000000000000000000000c22374c61778b9fb4bdc5c6c2b5a3927d68523d2813000000192e44596e8399aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea38e78634e39230e00000f253a4f647a8fa0a0a0a0a0a0927c67647a8fa0a0a0a0a0a0927c67523d271200000000000000000000000000000311202d3a474c5f67757e8891999ea7a8abadaeafafaeadaaa8a4a49c937e68533e2913000000000000000000000000000000091e32455673889db1b1b1b1a98c77614c37220c000000000000000000000000000000000000000000000000000000000000000008101b222d363e4a4e5b636e7983816d57422d1800000004182a3b5c72879cb1c7cfcfcfbda7927d68523d281d31445572889db2c7cfcfcfbca7927c67523d271200000000000000000e1e32424f5f67757b7e7e7b74675f4f42321e0e000000000000000000000000001d33485d72878a8a8a8a8a8a8a8a8a7a644f3a240f0000000000000000000000000004172a3a5c71879cb1c6d1d2c2b5b1b0b0af9f8a75604b36210b0000000000000000000000000000000000000000000000000000000e24394e63797e7e7e7e7e7e7e7e7e7b65503a25100000000b21364b60768ba6b8cbe0f4e4d6ccc9c7c5c9cdd6e4dec9b49f8a7a645645311d0d000000000000000000000000071c30435472889db2c7dac4af9a856f5a45301a0000000000000000000000000a1f3347586b80969facb0b0aea49b8573604b36200b000001162c41566b8196999999999999999999999999999999999999999999999999999999907b66513b261100000d22374c62778a8a8a8a8a8a8a8a7f6a62778a8a8a8a8a8a8a8a7f6a553f2a1500000000000000000000000000000002101c2a33414d576069747c83898f929698999a99999795938f8b868079634e38230e000000000000000000000000000000031628385b70859b9c9c9c9c9c8f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000008101b222d363d4a4e5b636d76614c36210c000000001a2f455a6f849aafb9b9b9b9b9aa957f6a55402a1426375a70859aafb9b9b9b9b9aa947f6a553f2a150000000000000006192c3c4f60697d8890939390887d69604f3c2c19060000000000000000000000001b30455b70859a9f9f9f9f9f9f9f917c67513c271200000000000000000000000000001a2f44596f8499aebbbbbbbbbbbbbbbbbaa98d78634e38230e0000000000000000000000000000000000000000000000000000000c21364a5b63686868686868686868655d4b37230e000000091e32455773889eb3c8ddf3e6d3c3b6b2afb4b9c6d1d9c4ae998475625a483b2b1b0a00000000000000000000000b20354a60758a9fb4cad8c2ad98836d58432e1803000000000000000000000004182a3a4b6073818f979b9b99928677625544311d0800000011263b51667c83848484848484848484848484848484848484848484848484848484837b65503b261000000b2034485970747575757575757573605970747575757575757573604b35200b00000000000000000000000000000000000c181f3039454b5560666e74797d80838485848382807e7a76716b635b4935210c00000000000000000000000000000000172c41566c80878787878787867b65503b261000000000000000000000000000000000000000000000000000000000000000000000000007101b222d363d494e58615846331f0a00000002182d42576d8297a4a4a4a4a4a4a497826d57422d182d43586d8298a4a4a4a4a4a4a497826c57422d17000000000000000c2035495a697e929da6a8a8a69d917e695a4935200c000000000000000000000000182e43586d8398adb5b5b5b5b5a9947f69543f2a140000000000000000000000000002172c42576c8197a6a6a6a6a6a6a6a6a6a6a5907b66503b2611000000000000000000000000000000000000000000000000000000071a2d3d4a4e535353535353535353504b3f2e1c08000000031628395b71869bb0c6dbf0decab6a49c9a9ea8b4c1d1c7b3a199867862594839281603000000000000000000000c21374c61768caabbced5c0ab96806b56412b16010000000000000000000000000c1d314455606c7a818586837d73625948372715020000000f24384c5e666e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e655d4c38230e000005182b3b48556060606060606060605448556060606060606060605443301c0800000000000000000000000000000000000004131b283237444b51556064686b6d6e6f6f6e6d6b68656158564e493d2c1a060000000000000000000000000000000014293e51626c72727272727272655d4c38230e0000000000000000000000000000000000000000000000000000000000000000000000000000070f1a212c363a464c463a29170400000000152a40556a7f8f8f8f8f8f8f8f8f8f846f5a452f1a2b40556a808f8f8f8f8f8f8f8f8f846f5a452f1a000000000000000d23384d62788b9fb3b7c4c4b7b29f8b78634d38230e000000000000000000000000162b40556b8095aac0cacacac1ac96816c57412c170200000000000000000000000000142a3f54697f919191919191919191919191917d68533e2813000000000000000000000000000000000000000000000000000000000f1f2d36393e3e3e3e3e3e3e3e3e3a372e21110000000000192e43596e8398aec3d8eddcc7b29c86858a9ba3b4c4d0bfb3a49c8777625745321e14020000000000000000000e23384d63788da2c8d8d4bea9947f69543f2a140000000000000000000000000001142637444b5c646c70716e686055483b2b190900000000091d2f404c515959595959595959595959595959595959595959595959595959595959504c3f2f1c090000000d1d2b37444b4b4b4b4b4b4b4b4b4337444b4b4b4b4b4b4b4b4b433626140100000000000000000000000000000000000000000a161e27313637444b4f535658595a5a595855534f4c463a38352c1f0e00000000000000000000000000000000000e22344451565c5c5c5c5c5c5c504c3f2f1c0900000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a2129333633291b0b00000000000d22374c62777a7a7a7a7a7a7a7a7a79634e39240e22374c62777a7a7a7a7a7a7a7a7a79634e39240e00000000000001162b40566b8095aabbcbd5d4cbbbaa95806b56402b1601000000000000000000000013283e53687d93a8bdd2dfd9c3ae99846e59442f1900000000000000000000000000000d22384d62787c7c7c7c7c7c7c7c7c7c7c7c7c79634e38230e00000000000000000000000000000000000000000000000000000000010f1a212429292929292929292925231c11030000000001162c41566b8196abc0d6ebd6c1ab96817077859ba6b7c9d0c2b5a59c8675604b423221100000000000000000000f24394f64798ea4b9ced2bda8937d68533e28130000000000000000000000000000091926313e4b4f575b5b59524b44372b1d0d00000000000012222f383b44444444444444444444444444444444444444444444444444444444443b382f211100000000000d19273135353535353535353530273135353535353535353530261808000000000000000000000000000000000000000000000309151d202631353a3d41434445444442403e3a36332923211a0e000000000000000000000000000000000000051626343e41474747474747473b382f211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b171f211f170b0000000000000b1f34475962646464646464646464635b4a36210c1f34485962646464646464646464635b4a36210c000000000000051a2f455a6f849aafc8d8e7e7d8c8af9a856f5a45301a05000000000000000000000011263b50667b90a5bbd0e5dbc6b19b86715c39291703000000000000000000000000000b2035485a6266666666666666666666666666635b4935210c000000000000000000000000000000000000000000000000000000000000070c0e131313131313131313100e080000000000000014293e53697e93a8bed3e8d8c3ae99836e6177889dabbccfd2c3b5a498826d604f3f2e1d0d000000000000000010253a4f657a8fa4bacfd1bca7927c67523d271200000000000000000000000000000009141d2e373a424646443d353127190d0000000000000004121d24262f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f26231c110300000000000009151d2020202020202020201c151d2020202020202020201c14080000000000000000000000000000000000000000000000000002080b141d2024282b2e2f302f2e2d2b2925211f170e0c060000000000000000000000000000000000000000081622292c3232323232323226231c1103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0a040000000000000005182a3b474c4f4f4f4f4f4f4f4f4f4e4a3d2d1a07182a3b484c4f4f4f4f4f4f4f4f4f4e4a3d2d1a07000000000000061b30455b70859ab0c5daededdac5b09b85705b46301b0600000000000000000000000e23394e63788ea3c5d5e8dec8b39e89735746331e0a0000000000000000000000000005192b3c484d515151515151515151515151514e493d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbd0e6dbc6b19b867159657b8d9fb5c1d1d2c2b2a0937e695d4b3b2b19090000000000000010253b50657a90a5bacfd1bba6917c66513c27110000000000000000000000000000000001101b22252c30312e28201d150900000000000000000000090f111919191919191919191919191919191919191919191919191919191919100e0900000000000000000001080b0b0b0b0b0b0b0b0b0801080b0b0b0b0b0b0b0b0b0801000000000000000000000000000000000000000000000000000000000001080b0f131618191a1a19181613100c0a04000000000000000000000000000000000000000000000000050e14171d1d1d1d1d1d1d100e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2a34373a3a3a3a3a3a3a3a3a39362d1f0f000d1d2a34373a3a3a3a3a3a3a3a3a39362d1f0f0000000000000003182d42586d8297adbfcfdadacfbfad98826d58432d180300000000000000000000000c21364b61768ba7b8cce0e0ccb8a78b76614b36210c00000000000000000000000000000e1e2b35383c3c3c3c3c3c3c3c3c3c3c3c3c38352c1f0e000000000000000000000000040a202020202020202020202018150f060000000000000000000000000000000000000000000000000e24394e63798ea3c5d6e8dec8b39e8973575d6b8095a3b4c5d6cfbeb49f8b7b6559483727150200000000000010263b50657b90a5bad0d0bba6917b66513c2611000000000000000000000000000000000000080d0f171b1c19130b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d181f2225252525252525252524211a0f0100000d181f2225252525252525252524211a0f01000000000000000011263b50667b90a1b2bfc5c5beb2a1907b66503b2611000000000000000000000000091e32465773899eb3c8dee8d6c5a38e79634e39240e0000000000000000000000000000000e1920222727272727272727272727272723211a0e0000000000000000000000000c181f35353535353535353535352d2a23170900000000000000000000000000000000000000000000000c21364b61768ba7b8cce0e0ccb8a78b76614b6073859ba7b9cce0cebbaa9d8877625544311d1301000000000010253a50657a8fa5bacfd0bba6917b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000000000000020c12141d1d1d1d1d1d1d1d1d13110b0200000000000000000000000000000000000000000000000000000000000000020c12141d1d1d1d1d1d1d1b150b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a10121b1d1d1d1d1d1d1d0b09020000000000000000000000000000000000000000050b0d12141615130f0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0f0f0f0f0f0f0f0f0f0e0c070000000000050b0d0f0f0f0f0f0f0f0f0f0e0c07000000000000000000000f23384c5e6e8398a0acb0b0aca098836e5e4c38230f000000000000000000000000031628395c71869bb1c6dbe5d0bba6907b66513b261100000000000000000000000000000000050b0d111111111111111111111111110e0c060000000000000000000000000c1c2a334a4a4a4a4a4a4a4a4a4a4a423e35271706000000000000000000000000000000000000000000000a1e33465773899eb3c8dee8d6c5a38e79634e556278899eb3bdced8c8b7a69a8474604b41301f0f00000000000f243a4f64798fa4b9ced1bca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000006141f272932323232323232323228261e1306000000000000000000000000000000000000000000000000000000000006141f272932323232323232312a201d14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24273032323232323232211e160a0000000000000000000000000000000000080d182022272a2b2a2825201d150b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404b61758390979b9b978f8275604b402f1c0900000000000000000000000000192f44596e8499aec3d9e8d3bda8937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a475e6060606060606060606057524535230f00000000000000000000000000000000000000000000031729395c71869bb1c6dbe5d0bba6907b6651485a677c919fb1c2d2d4c4b4a296816c5f4d3d2d1c0c000000000e24394e63798ea3b8ced2bda7927d68523d2813000000000000000000000000000000000000070b150e0c06000000000000000000000000000000021424323b3e4747474747474747473d3a31241302000000000000000000000000000000000000000000000000000000021424323b3e47474747474747463f3531261909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004122330393c45474747474747473632281a0a000000000000000000000000000003111c232b34373c3f403f3d3a363127201d140900000000000000000000000000000000000000000001080b0f1214161513100c0a04000000000000000000000000000000000000000000000000000000000000000001080b0f121516151413100c0a04000000000000000000000000000000000000111e324657616e7b828585827b6e6057453222110000000000000000000000000001172c41566c8196abc1d6ead5c0ab95806b56402b160100000000000000020b11131f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0c0a040000000000000000000000000000000a1f33475870757575757575757575756d63523e2a150100000000000000000000000000000000000000000000192e44596e8399aec3d8e8d3bea8937e69533c4d5f6c8197a4b5c7d7d1c0b09f927d675b4a3a2918080000000e23384e63788da3c9d9d3bda8937e68533e29130000000000000000000000000000000008131c202a23211a0f01000000000000000000000000000c1f32424f545d5d5d5d5d5d5d5d5d534e42311e0b0000000000000000000000000000000000000000000000000000000c1f32424f545d5d5d5d5d5d5d5b544b443726140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000112230414d515b5d5d5d5d5d5d5d4b45382816020000000000000000000000000816212e373b484c51545554534f4b453835312619120400000000000000000000000000000000000708141c202427292b2a2925211f170c0a040000000000000000000000000000000000000000000000000000000609141d2024282a2b2b2a2825211f170e0c0600000000000000000000000000000003162839464b5d656d70706d655d4b4539281604000000000000000000000000000014293f54697e94a9bed3e9d8c2ad98836d58432e180000000000000006141f262935353535353535353535353535353535211f170c00000000000000000000000000000c22374c61778a8a8a8a8a8a8a8a8a8a816d57422d180000000000000000000000000000000000000000000001172c41566c8196abc1d6ebd5c0ab96806b5641414b6075869ca9baccd6cdbdb49f8a796358463625130000000d22374d62778cabbccfd4bea9947f69543f2a1400000000000000000000000000000009182530353f38352c1f110300000000000000000000000012273b4f616972727272727272727268604e3a261100000000000000000000000000000000000000000000000000000012273b4f616972727272727272706a605544311d11000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404d5f677072727272727272605645321e090000000000000000000000071626333f4b50596267696b6a68646056514b443730221507000000000000000000000000000006101b22263035393d3e403f3e3b363329211f170b030000000000000000000000000000000000000000000000050f1a21263135393d3f40403f3d3a37332a2320190e0700000000000000000000000000000b1b28323f4b50575b5b57504b3f32281b0a00000000000000000000000000000012273c51677c91a6bcd1e6dac5b09b85705b372715020000000000021424313b3e4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a37332a1c0c000000000000000000000000000a1f33475874899e9f9f9f9f9f9f9f9a846f5a362513000000000000000000000000000000000000000000000014293e54697e93a9bed3e8d8c3ae98836e594332455663798a9fb3b8c5b9b9baa89c8776615443301c0700000b20354b60758a9fb4cad6c0ab96816b56412c16010000000000000000000000000009192736434a544e493d2f221204000000000000000000000014293e54697e8787878787878787877e68533d281300000000000000000000000000000000000000000000000000000014293e54697e87878787878787867f73604b3f2f1c0900000000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e677c858787878787878775604b36210b000000000000000000000015253344505d656f777c7f807f7d7a756f6660554c40332515030000000000000000000000000e19202e3736434b4f5254555553504c463a3633291e170b0000000000000000000000000000000000000000000d181f2c3537444b4e525455555452504c473a38352c211a0f03000000000000000000000000000b161e2f373b424646423a372e241d12040000000000000000000000000000000f243a4f64798fa4c7d7e9ddc8b29d88735544311d0800000000000b1f31424e535f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f4c473a2a170400000000000000000000000004182a3a5c71879cb1b5b5b5b5b5b29c87725443301c070000000000000000000000000000000000000000000011273c51667c91a6bbd1e6dbc5b09b86705b3828384a5b687e929ea7a4a4a4a4a4a5998372604a35200b0000081d31445573889db3c8d8c3ae98836e59432e1900000000000000000000000000011527374454606a635b4c402f2212030000000000000000000013283e53687d939c9c9c9c9c9c9c96816c57412c170200000000000000000000000000000000000000000000000000000c21364c6176889c9c9c9c9c9c9b94826d5d4c382312000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667c8d9a9c9c9c9c9c9c8d78634e38230e000000000000000000000e1f324350626b7b848c91949594928f8a847c73665e504333200d0000000000000000000004111e2c353e4b4f54606467696b6a68656158534c463a33291b1100000000000000000000000000000000000002101d2a343d494e556064676a6b6a6968656158564d493c362d1e160a000000000000000000000000061727353e424a4a4a4a4a4a3c383022120000000000000000000000000000000d22374c62778ca9bacde1dfcab49f8a75604b36200b000000000011263b4e606874747474747474747474747474747474615847331f0a000000000000000000000000001a2f445a6f8499afc4cacacac9b49f8a75604a35200b000000000000000000000000000000000000000000000f24394e64798ea3c6d6e8ddc8b39d88735645322d3d4e60687d898e8f8f8f8f8f8f8f8f7f6a55402a150000011527375c71869bb1c6dac5b09b85705b39291603000000000000000000000000081d31445560727f79665e4c402f21110000000000000000000011263b50667b90a5b2b2b2b2b2ae99846e59442f190000000000000000000000000000000000000000000000000000000a1f334658697e93a4b2b2b2b2b0a0907b6550402f180800000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8398abb2b2b2b2b2a5907b66503b2611000000000000000000061a2c3d4f616b808d9aa2a6a9aaa9a8a99f9991877c6a61503c28130000000000000000000512222f3c494d5c646d74797c7e807f7e7a76706961584b46392f1c13080000000000000000000000000000000311202d3b474c5b636d74797d7f80807f7d7a77716b635a4e4a3d32281b0f01000000000000000000000f23354552575f5f5f5f5f5f514c40301d0900000000000000000000000000000b20354a6075899fb4c9dee3cfbcab8d78624d38230d000000000013293e53687e8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b76614c37210c00000000000000000000000002172d42576c8297acc1d7dfe2cdbaa98c77624d37220d000000000000000000000000000000000000000000000c21374c61768ca8b9cce1e0cbb8a68b76604b362131414e606875797a7a7a7a7a7a7a7a7a644f3a240f0000001a2f44596f8499aec4d9c7b29d88725746321e0a0000000000000000000000000b20354b60738294897c665e4c3f2e1d0d0000000000000000000e23384e63788da3c4c7c7c7c6b19c86715c3a29170400000000000000000000000000000000000000000000000000000417293a4b6074869cb1c0c7c7beb09b85705e4c362513000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8499aec9c7c7c7bda8937e68533e29130000000000000000000c2135495b6a7f949fabb4c0bec0bfc7bab4afa59d917f6a55402a15000000000000000001122330404c5a636f7a83888e9293959493908b857e766a61574c4030251808000000000000000000000000000011212e3e4a59626d7982898e9294959594928f8b8680786f635b4b45392c1f1204000000000000000001152a3e52636d747474747474665e4c3824090000000000000000000000000000071c30435472879cb2c7dcebd9c9a58f7a65503a2510000000000011263c51667b919f9f9f9f9f9f9f9f9f9f9f9f9f9f8e79644f39240f00000000000000000000000000152a3f546a7f94a9bfd4e9ead7c7a48f7a644f3a250f000000000000000000000000000000000000000000000a1f33475874899eb4c9dee7d5c4a38d78634e38232331414e5660636464646464646464645c4a36220d000002172c42576c8197acc1d6cab59f8b76614b36210c000000000000000000000001162b40566b8095a09e8b7c665d4b3b2b180800000000000000000b21364b60768ba6b8cbdcdcc9b39e89745846331f0a0000000000000000000000000000000000000000000000000000000c1d314455667c91a2b4c9d9c8b4a3907c665443301c08000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d8297acc2d7dcd5c0ab95806b56402b160100000000000000000e23384e63798b9fb4bcc9d1d4d5d4d7cdc9c3b4a28f7a644f3a250f00000000000000000f1f30414d5e6678838f989ea7a7a9aaaaa8aa9f9b93898075655e4a43362518080000000000000000000000000d1d2e3f4b5c6477828c979ea7a7a9aaaaa9a7ab9f9c958d83796c6057493d2f2213050000000000000002182d42576d818a8a8a8a8a8a7c66513726140100000000000000000000000000001325365a6f859aafc4dae7d2bca7927d67523d281200000000000f24394e64798ea3b4b4b4b4b4b4b4b4b4b4b4b4a7917c67523c27120000000000000000000000000012273d52677c92a7bcd1e7e7d1bca7927c67523d27120000000000000000000000000000000000000000000004172a3a5c71869cb1c6dbe5d0bba5907b66503b2613233138454b4e4f4f4f4f4f4f4f4f4f4a3e2e1b0700000013293e53687e93a8c9dacfbcab8f7a644f3a250f000000000000000000000004192f44596e8399a8a99f8b7b6559483625130000000000000000091e32455673889eb3c8dde0ccb9a78b76614c362110141515130f0b080100000000000000000000000000000000000000011527374c5e6f849aabbccfd1c1b19b8673604a36261401000000000000000000000000000000000000000000000000000000000000040a0c1214151410152a3f556a7f94aabfd4e9d8c3ad98836e58432e1900000000000000000417293a576c8297aabbcedae7e2d4cbc8bfc0c2b09a85705c4b37220d0000000000000009192d3d4d5f677c8999a1adb3b8c5bec0bfc8bbb4b0a89e95877b6a605443362513000000000000000000000005192b3b4b5d657a87979faab3b9c5bfc0bfbec9bcb5b1aba1998d8175635b4c403123130000000000000003182d42586d82979f9f9f9f97826d5544311d080000000000000000000000000000182d42576d8297acc2d7e9d4bfaa947f6a553f2a1500000000000c21364c61768ba7b9c9c9c9c9c9c9c9c9c9c9bfa9947f6a543f2a150000000000000000000000000010253a4f657a8fa4c8d8eae9d4bfa9947f6a543f2a1500000000000000000000000000000000000000000000001a2f44596f8499aec4d9e8d2bda8937d68533e2813131a283236393a3a3a3a3a3a3a3a3a362e2010000000000f253a4f647a8fabbccfdac9a8937d68533e28130000000000000000000000000e23394e63798a9eaaa99d8877625443301c0b00000000000000031628385b70869bb0c5dbe8d6c5a38e79644e392426292b2a2824201c14080500000000000000000000000000000000000009192f404e64798c9fb4c6d7c9b5a3917c675443301c0900000000000000000000000000000000000000000000000000000000060c171f21272a2b292621273d52677c92a7bcd1e7dbc5b09b86705b38281603000000000000000a1f33475873889db3c8d8eae7d4c4b7b3aaaab2a4907b66513e2e1b08000000000000011426374a5b677d8d9ea7b3bfc8ccd5d3ceccd9cecac6b9b4a59d8d8072605443301c14010000000000000000000b20344859657b8a9da6b4bbc8ccd6d4d4cfcddacfcac6bfb3ab9f968679665e4e41311c0c00000000000003182d42586d8297adb4b4b39e8874604b35200b0000000000000000000000000000152a40556a7f95aabfd4ead7c2ac97826d57422d1802000000000a1e33465774899eb3c9cbcbcbcbcbcbcbcbcbc1ac97826c57422d17000000000000000000000000000d22374d62778caabbcee2ecd7c1ac97826c57422d170200000000000000000000000000000000000000000002172c41576c8196acc1d6ead5c0aa95806b55402b16000a151d2024252525252525252524221b1002000000000c21364b61768b9fb5cad6c1ac97816c573a29170400000000000000000000000c21364a5b657c8c9fb4a69a8472604a3a29170400000000000000192e43596e8398aec3d8e6d0bba6917b66513c363b3e403f3d393530261f180d0100000000000000000000000000000000001221364a5c6d8297a8b9cdd2c1b19c8673604b3727150100000000000000000000000000000000000000000000000000000e1a212a33373c3f403f3b36323a4f647a8fa4c7d7e9ddc8b39d88735645321e09000000000000000c21374c61768ca6b8cbe6f6dfcbb7a69d95959d9c8673604a35201000000000000000081d31445563798a9eabb9c5d0d8cecac0b9b6b8bfc9cccdc3b7ab9f958172604a42321f0f0000000000000000091d2f404d6278889ea8b7c4ced9d4cbc7bfbab8b8babfc6c9c9bcb5a49c8a7c685f4e3a2a1704000000000003182d42586d8297adc2c9b8a78f7a6550392816030000000000000000000000000013283d52687d92a7bdd2e7d9c4af9a846f5a452f1a0000000000031729395c71869bb1b5b5b5b5b5b5b5b5b5b5b5af9a846f5a372614010000000000000000000000000b20354b60758a9fb4c9dfeed9c4af99846f5a442f1a0000000000000000000000000000000000000000000000142a3f54697f94a9bed4e9d8c2ad98836d58432e18000002090b0e0f0f0f0f0f0f0f0f0f0d070000000000000a1e33465772879db2c7dbc6b09b86715846331f0a0000000000000000000000071a2d3d4c5e697f94a0b2a2937e685846331f0900000000000001162c41566b8196abc0d6e8d3bea8937e6953454b50535555534f4b4336342a1d140900000000000000000000000000000000071a2d3e4d62778a9eb4c4d4c9b6a4927d675544311d0a00000000000000000000000000000000000000000000000005131f2c353a474c52545554504b45384c62778ca9bacde1e0cbb8a68b76604b36210b000000000000000e23394e63788ea3c4d5e7ecdac9b39d887f80878d7c665443301c07000000000000011426364b6073869ca8b9c9d6d8c8bbb4aba3a1a3aab3b9c5d4c9bcb59f97816c604f3d2d1808000000000000000f24384c5e70859aa6b8c6d4e2d0c3b7b2a9a4a2a3a5aab1b5c2cac2b6a89e8c7d685847331f0a000000000003182d42586d8297adc2d5c5ab96816c5745321e150200000000000000000000000010253b50657a90a5c9daecdcc7b19c87725c3b2a18040000000000192f44596e8499a0a0a0a0a0a0a0a0a0a0a0a0a09c87725544311d08000000000000000000000000081c30435472879db2c7dcf1dcc7b19c87725c3b2a18050000000000000000000000000000000000000000000012273c51677c91a6bcd1e6dac5b09a85705b372715020000000000000000000000000000000000000000000003172939586e8398adc3d8cab49f8b76614c36210c0000000000000000000000000f1f2f404f616e8398a8b39e8976614c3726140100000000000014293e53697e93a8bed3e8d6c0ab96816b56566065696a6a686460544c473b3126190d000000000000000000000000000000000f203448596a8095a6b7cbd3c2b29c8774604b3827150200000000000000000000000000000000000000000000051323303d494e586167696a696560564d485974899fb4c9dee7d5c4a38e78634e39230e000000000000000e23384e63788da3c7d7e9e3cfbcab8f7b6a6b7478665e4d36251300000000000000081c304354677d92a4b6c6d7e2cebbaa9f968e8c8e949ea7b7c3d4cfbdb19f937e695c4a362614010000000000071a2d3d51667c91a2b4c5d5e2d0bfb3a59d948f8d8d90949ca4b2b6c3c6b9aa9e8976614c37210c000000000002172d42576c8297acc1d7c8b39e8975604b41321d150a00000000000000000000000e23384d63788dabbccfe3dec9b49f89745947341f0b0000000001172c41566c818b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c74604b35200b000000000000000000000000011426365a6f859aafc4daefdec9b49f89745947341f0b000000000000000000000000000000000000000000000f243a4f64798fa4c6d7e9ddc8b29d88735544311d08000000000000000000000000000000000000000000000013283d53687d92a8c2d3cfbcab917b66513c261100000000000000000000000005152533434c6277899eb4a7947f6a5544311d0800000000000011263c51667b91a6bbd0e6d8c3ae98836e626c757b7e807f7d79746b62594b44372b1d0f01000000000000000000000000000005182b3b4b6075889db2c1d2cab6a5927d685645311d0a00000000000000000000000000000000000000000000132331414d5b636e777c7f807e7b756c625a5c72879cb1c7dce5d0bba5907b66503b2611000000000000000c21374c61768ca9bacde1dfcab59f8a75605560625a4d40301808000000000000000b20354b6073879cb2c2d3e4d3c2b49f8c807977797f899da5b7c6d6cebdb49f8b7a645443301c0900000000000c21364a5b71859bb0c0d1e3d4c3b3a199877f7a78787a7f86919ca5b4bab49f8c7c665847331f0a000000000000152a40556a7f95aac0d1ccb8a795806b5f4f4332281a0e000000000000000000000b20364b60758a9fb5cadfe1cdbaa98c77614c37220c00000000000b20354b6073757676767676767676767676767676756d5544311d0800000000000000000000000000182d42586d8297adc2d7ece1cdbaa98c77624c37220d000000000000000000000000000000000000000000000c22374c61778ca8bacde1dfcab49f8a75604b36200b00000000000000000000000000000000000000000000000d22384d62778da4b6cad9c9ab96816b563d2c1a06000000000000000000000013233343505b636c8297acb39d8874604b35200b0000000000000e24394e63798ea3c5d6e8dbc6b09b867178828a90939594928e8880776a6055483b2c1f0f0000000000000000000000000000000d1e324557687d92a3b5c9d3c3b29d8774604b3828160200000000000000000000000000000000000000000e1e31414e5f6779838b919495949089827869606f8499afc4d9e8d3bda8937e68533e2913000000000000000a1f33475874899fb4c9dee3cfbcab8b76614b4b4d493c302212000000000000000010253a4f657a8fa4b6cae0decab6a4927e6b6461636a78879da8b9cce1cebbaa9b8573604b37271501000000000e24394e63798ea3b5c9dedfcbb7a59983756a656363656a717c87969fa99f937e685e4c3a2a17040000000000000f253a4f647a8fa2b4c6d5c5b59f8d7d6a614b45382c1e11040000000000000000091d31455673889db3c8dde9d7c7a48e79644f39240f0000000000081d314455606060606060606060606060606060606056443726140100000000000000000000000000152b40556a8095aabfd5eae9d7c7a48f79644f3a240f000000000000000000000000000000000000000000000b1f34475974899fb4c9dee3cfbcab8d78624d38230d00000000000000000000000000000000000000000000000b2034485a72879cb1c7dcc7b19c87725b4935210c000000000000000000000919314150616a7981869cb1b8a6907b65503b26100000000000000c21364c61768ba7b9cce0ddc8b39e897d8a979fa9a8aaaaa8a69d968a7f736259493d2c1f0e0000000000000000000000000000031628394b6073859bb1c9d9cab7a5937e685645321e0b0000000000000000000000000000000000000006192c3c4e5f687d8b999faaa9aaa9a89e978a7f726c8197acc1d6ebd5c0ab96806b56412b160100000000000004172a3a5c72879cb1c7dcecdac9a38e79634e3938352b1e12040000000000000000162b40556b8095aac3d3e6dcc7b19c8773604e4c4e5a6278899eb3c3d4d8c8b5a3927d685544311d080000000014293f54697e94a9c1d2e4ddc7b29d877561574f4d4e50555e6675808a8f8b7f6a604e402f1c0c000000000000000d22374b5c70859aa8b9c7cfbcab9f8d7f6c6056493c2f22130500000000000000021527385b70869bb0c5dbe6d1bca6917c67513c2712000000000001152737444b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4538261909000000000000000000000000000013283d52687d92a7bdd2e7e6d1bca7917c67523c27120000000000000000000000000000000000000000000004182a3b5c72879cb1c7dcebd9c9a5907a65503b2510000000000000000000000000000000000000000000000005192b3c576c8196acc3d4cab6a48e79634e39230f000000000000000000021527374e5f6a7f8c969ca4b6c4ab96816c56412c170100000000000a1f33465874899eb3c9dee0ccb8a79e929ea8b4bac7bfbfc4b7b3a89f948577635b493d2c1c0c00000000000000000000000000000a1c304354657b90abbccfd4c3b29d8875604b392816030000000000000000000000000000000000000c2135495b687d8d9fa9b4bbc8bfc6b9b4a99f9482757f94a9bed4e9d8c3ae98836e59432e1900000000000000001a2f455a6f849aafc4d9e5d0bba6907b66513b2620190e000000000000000000051a2f455a6f849aafc4d9ebd6c0ab96816b5443373c495a687e93a5b7cadfd2c1b29d8774604b35200c000000041a2f44596f8499aec4d9e9d4bfa9947f6a57463938383b404c57606b767a786a614f423122110000000000000000081b2e3e4d63788a9ea9b7c4c9bcab9f948174625a4c403023130300000000000000192e43586e8398adc3d8e9d3bea9947e69543f291400000000000009192731353636363636363636363636363636363632281a0900000000000000000000000000000010253b50657a90a5c9d9ebe9d4bea9947f69543f2a1400000000000000000000000000000000000000000000001a2f445a6f8499afc4d3d3d2bda7927d68523d281300000000000000000000000000000000000000000000000010253a50657a8fa5b7cad3c2aa947f6a553d2c1a060000000000000000081d314455687d929fabb1b6c2c5b09b85705b46301b0600000000000417293a5c71869cb1c6dbe7d5c5b8b3a7b4b9c6cdd7ced4d4cbc6bab4a39b8879635b493a29170400000000000000000000000000011426364c61768a9fb4cadfcbb7a6947e695746321e0b0000000000000000000000000000000000061a2c3d4d63798a9fabbac7ced9d5d7cdc7bab4a098847d92a7bcd1e7dbc5b09b86705b3928160300000000000002172d42576c8297acc1d7e8d3bea8937e69533e29140600000000000000000000081d32485d72879db2c7dce7d2bda7927d685236252c3c4b6073879db2c7dcdfcab7a5917c67523a2a18040000011527375d72879cb2c7dce9d7c6a38e79644e39413d3a363239454b576165625a4f4332241404000000000000000000102035495a657b8b9da6b5c2c9bcb59f978578665e4d4130221100000000000001162b41566b8096abc0d5ebd6c1ab96816c56412c170100000000000009151d20212121212121212121212121212121211e160a000000000000000000000000000000000d23384d62788dabbccfe3ecd6c1ac97816c57422c170200000000000000000000000000000000000000000002172d42576c8297acbdbdbdbdbdaa95806a55402b150000000000000000000000000000000000000000000000000b20354a6073879db2c7dbc6b09b86715b4935210a00000000000000000b20364b6074889db3bcc9cad3c8b39d88735e48331e09000000000000192f44596e8499aec3d9eee3d5ccc8bdc8bfb9b6b5b9c2cacfd7cdc1b4a69d8879635847331f12000000000000000000000000000012273c51677c91abbccfe3d4c4b39e8875614b39291703000000000000000000000000000000000c2135495b6f8499a8bac9d8e2e7d9cfcac4c2bfb2a29a869cb1c6dbf1ddc8b39e88735745321e0900000000000000152a3f556a7f94aabfd4e9d5c0ab96806b56412b160100000000000000000000071c30435474899fb4c9dee5d0baa5907b65503b261c304354697f94a9c2d3e5d4c3af9a846f5947341f0a0000081d31445573899eb3c8dee1cdbaa88b75605c5956534f4b45383a39464c4f4d483c322515060000000000000000000006192c3c4b5d657a889ba3b2becfbdb1a39b897c675f4d402f1c0c00000000000014293e53697e93a8bed3e4d8c3ae99836e59442e19000000000000000001080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090200000000000000000000000000000000000b20364b60758a9fb4cadfeed9c4ae99846f59442f1a0000000000000000000000000000000000000000000000152a3f546a7f94a8a8a8a8a8a8a897826d58422d18030000000000000000000000000000000000000000000000071c3043546b8095aac0d1c9b5a38e79634e38271502000000000000000f253a4f647a8fa6b7cbd9dedec9b49f89745f4a341f0a000000000002172c41576c8196acc1d6ebf1e1d4c4b7b3aaa4a0a0a4acb5bcc9d7d1c4b7a69c8676614c402f1b0b000000000000000000000000061a2c3d576c8297acc9d9ebe0cbb8a6947f6a5746331e0c000000000000000000000000000000000e23384e63788c9fb5c6d7e7e7d9c9bcb4aeacb1b6b3a49ca4b5c9def3e0cbb8a68b76604b36210b0000000000000012273d52677c92a7bcd1e7d8c3ae98836e59432e1900000000000000000000000b20354a60758aa9bacde1e4cfbaa48f7a654f3a251426364d62788da4b6cadedfcab49f8b77614c37220c00000b20354b60758a9fb5cadfdec9b49f8a7674726f6b6864605656504b44373a38352b1e15070000000000000000000000000e1e2e3f4b5c64788598a0b4bcc9c1b5a79e8c7d675e4c3a2a1704000000000011263c51667b91a6bbcfcfcfc6b09b86715b39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889db2c8ddf1dcc6b19c87715c3a2a18040000000000000000000000000000000000000000000012273d52677d92939393939393939384705a45301b050000000000000000000000000000000000000000000000001325364d63788da2b4c8d2c1ab96816b5645311d090000000000000012273d52677c92a7c4d4e7f0ddc8b39d88735e48331e0900000000000014293f54697e94a9bed3e9e6d4c3b7a69d948e8b8b8e979fabbac7d7d4c4b6a498836e5e4c3928160300000000000000000000000c2135495b72879db2c7dcf2e7d5c4b39e8976614c3a2a1704000000000000000000000000000002152838566b8095abbccfe4ebd9c9bcab9f99979ca4b5b5b1b5c2d2e5f8e7d5c5a38e78634e39230e000000000000000f253a4f647a8fa4c7d7eadbc6b09b86715b3928160300000000000000000000071c304354758a9fb4cadfe4cfbaa58f7a65503a25102035485a72879cb1c7dce2cebbaa917c67523c271200000b20354b60758aa9bacde1e1cdbaa89f8c898784817d7975706b6560554e493d352c1e14060000000000000000000000000011212e3e4b5a627582949fabbcc9c5b9aa9f8c7c665847331f0c00000000000f24394e64798ea3c6b9b9b9b9b39e89735746321e09000000000000040a20202020202020202020201b19120800000000000000000000000000000000000000000000021527375b70859bb0c5daf0dec9b49e89745847331f0a000000000000000000000000000000000000000000000d22374d62777e7e7e7e7e7e7e7e7e7d67523c271200000000000000000000000000000000000000000000000000082035495a70859ab0c3d3c8b39e8875604b3620100000000000000011263c51667b91aabbcedadbd2c1af99846f5a442f1a0500000000000012273c51677c91a6bcd1e6dfcab7a59d887f79767579828d9fa9bac9d9d3c3b2a0907c665746321e0a00000000000000000000000e23384e63788da5b7cadff4f3e0ccb8a795806a5847331f0c0000000000000000000000000000091d32455670859bb0c9daece3cfbcab9f8c848286949fabbcc9d2e0f0ffe5d0bba6907b66513b2611000000000000000d22374d62778ca9bacde2ddc8b39e88735745321e0900000000000000000000001325495f74899eb4c9dee5d0bba6907b66513b2611192b3c576d8297acc2d7ebd9c8ac96816c57412c170200081d31445574899fb4c9dee9d7c6bab4a89f9c9996928f8a85807a746c635b4d493c322416080000000000000000000000000311202e3c4857616e7f8d9fabbccfc8bbaa9d8876614c3a2a1704000000000c21374c61768ca8a4a4a4a4a4a4a78b76614b36210c00000000000c171f3535353535353535353535302d261a0c00000000000000000000000000000000000000000000182e43586d8398adc2d8ede1cdb9a88c77614c37220c000000000000000000000000000000000000000000000b2034485962686868686868686868675f4d3925100000000000000000000000000000000000000000000000000006192c3c51677c91a5b6caccb8a7917c67513f2e1b080000000000000c22374c61778b9fb4bdc5c6c2b5a3927d68523d2813000000000000000f243a4f64798fa4c7d7e9ddc7b29d87766a646160646d7c8b9fabbccfe3cfbeb29d8775614b382816020000000000000000000115273753697e93a8c3d4e6f9f8e8d6c5b39e8976614c3b2a1804000000000000000000000000000b20364b60758a9fb4c9dff4dfcab49f8d7c6f6d737f8d9fb5becfe4f4ffe8d3bea8937e69533e2914000000000000000b20354a60758a9fb4c9dfe0cbb8a68b76604b36210b00000000000000000000001d33485d72889db2c7dde7d1bca7927c67523d2712142a3f54697f94a9bed4e9dac5af9a85705a45301b0000011527375d73889db2c8ddf2e4d7cdc6bab4b1aeaba8aa9f9b968f8881796e635b4f423426160600000000000000000000000002101d2b39464b616a7d8d9fb4c1d2c8b8a696816c5847331f0a000000000a1f334758748a8f8f8f8f8f8f8f8f8e79634e39230e000000000c1c29334a4a4a4a4a4a4a4a4a4a4a4542382a1a08000000000000000000000000000000000000000001162b40566b8095abc0d5eae9d7c6a48e79644f39240f0000000000000000000000000000000000000000000005182b3b484d535353535353535353524d41301d0a00000000000000000000000000000000000000000000000000000e20354b6073879cb2c4d5c5b09b85705d4b37220f0000000000000a1f3347586b80969facb0b0aea49b8574604b36200b000000000000000c22374c61778ca9bacde1ddc8b39e8873584f4b4b4f5e667c8d9fb4c3d4dfcab7a595806b5645321e09000000000000000000081d3144556e8499aec3d9eeece3dfe1ccb9a895806b5947341f0d000000000000000000000000000d23384d62788da9bacee2edd8c2ad98826d5e5460697e93a0b2c6d6e8fcebd5c0ab96806b56412b1601000000000000071c30435472879cb2c7dce7d5c5a38e78634e39230e00000000000000000000051b30455a70859aafc5dae9d4bfaa947f6a553f2a1511263c51667b91a6bbd0e6ddc8b29d88735d3827150200001b30455a70859aafc5daeff1e1d3cac7bcbfc4c0c8bbb4b0aba79e968c837969605144342414000000000000000000080d0f16120d1b2832434f5f6a7f94a3b5c9d5c4b49e8a76614c37210c000000000417293a4e647a7a7a7a7a7a7a7a7a7a75614b36210c0000000417293a465e606060606060606060605b554838261200000000000000000000000000000000000000000013283e53687d93a8bdd2e8e6d1bca6917c67513c271200000000000000000000000000000000000000000000000d1d2b34373e3e3e3e3e3e3e3e3e3c39302312010000000000000000000000000000000000000000000000000000081c304354687e93a6b8cbc8b4a38f7a654f3d2d1a07000000000004182a3a4b6073818f979b9b99928677625544311d08000000000000000b1f34475974899fb4c9dee0cbb8a68b76604b3636404c5e6b8096a5b7cbdfd4c3b39e8875604b36210f0000000000000000000b20354b6075899eb4c9dee7dacfcacfd6c6b49f8a77614c3b2b18050000000000000000000000000f24394f64798ea4c7d8eaecdac9a6917b6651434b606e8298a8b9cce1f5edd8c3ae98836e59432e1900000000000000001325365a6f849aafc4d9e5d0bba5907b66503b26110000000000000000000002172c42576c8197acc1d6ecd7c2ad98826d583c2b1910253a50657a8fa5bacfe4dfcab49f8a755645311d090002172c41576c8196acc9daece6d3c3b6b2a6aaaeb3b8c4c6c5c5b8b3ab9f998b7e6c625142311c0c00000000000002101b22252b27201c161e32414a6072859bb0c6dbcdb9a8927d68523d281300000000000c21364a5c64646464646464646464615746331e0a0000000a1f3346587075757575757575757575706655422d0900000000000000000000000000000000000000000011263b50667b90a5bbd0e5e9d3bea9947e69543f29140000000000000000000000000000000000000000000000000d18202229292929292929292927251d1205000000000000000000000000000000000000000000000000000000011426364b6075889db3c4d1c1ae99836e5b4a3621100000000000000c1d314455606c7a818586837d73625948372715020000000000000004182a3b5c72879cb1c7dce7d5c4a38d78634e38232f404b6074879db2c6d7e0ccb8a7927d68523d2d1a07000000000000000010253a4f657a8fa8b9cce1dac9bcb5bcc9cdbaa896816c594834200e00000000000000000000000010253b50657a90a5bacfe5e3cfbcab8c77624d37424c6277899eb4c7d7e9f0dbc6b09b86715b3929160300000000000000172d42576c8297acc1d7e8d3bda8937e68533e2913070704020000000000000012283d52677d92a7c1d1e4dcc7b19c87725a4835200f24394e64798ea3b9cee3e2cebbaa8b75604b36200b000013283d52687d92abbccfe3dfcab6a59c9195999ea6a9b1b5c2cac9bcb5a99f93816c604e3a291704000000000010202e373a403c353026181c304354687d92a7bdd2d7c6ad97826d58422d180000000000071a2d3e4a4e4f4f59626666625a4f4b46392917030000000c21364c61768a8a8a8a8a8a8a8a8a8a84705b3727150100000000000000000000000000000000000000000e23394e63788ea3c5d5e7ebd6c1ac96816c57412c1702000000000000000000000000000000000000000000000000050b0d13131313131313131312100a010000000000000000000000000000000000000000000000000000000000081e3245566a7f94a6b7cbcab59f8c79634e3e2d1b07000000000001142637444b5c646c70716e686055483b2b19090000000000000000001a2f455a6f849aafc4d9e5d0bba5907b66503b261d324556697e93a8b9cde1d5c5b09b85715b4a36210c000000000000000417293a556a8095aac6d6e3cfbcab9fabbccfc6b49f8a77624d3c2b1906000000000000000000000010253a50657a8fa5bacfe4dfcab59f8a75604a353448596a8095a9bacde1f3dec8b39e88735746321e0a00000000000004152a3f556a7f94aabfd4e9d5c0ab95806b56402b1d1d1d1917110700000000000d22384d62778da3b5c9dddecab6a48d78624d36251323394e63788ea3b8cde3e8d6c5a08b76614b36210c00000d22374c62778b9fb5cadfdcc7b29c877d8084888e949ba3b1b6c2cfc7bab49f937e695847331f0a000000000e1e2e3f4b4f56524b43362f2525364f64798ea4b9cedbc6b19b86715c46311c0000000000000f202d3d4a5a626f777b7b7870645c4c40301f0f0000000a1f33465874899e9f9f9f9f9f9f9f9d88725544311d0800000000000000000000000000000000000000000b21364b60768ba7b8cce0eed9c3ae99846e59442f1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384b6075889db3c2cfbcab98836e5c4a362211000000000000091926313e4b4f575b5b59524b44372b1d0d00000000000000000002172d42576c8297acc1d7e8d2bda8937d68533e281528384b6176899eb4c9deddc9b5a38e79634e39240e000000000000000a1f33475870859bb0c5dbd7c7b59f8a9fb5c8cdbaa997816c5a4835200e00000000000000000000000f24394f64798ea4c7d7e9dec9b49f89745544312a3b4c61778a9fb4c9def3e0ccb8a78b76614b36210c0000000000071521273d52677c92a7bcd1e7d8c3ad98836e5843323232322f2c24190a000000000b2034485a70859bb0c5d6e5d3c2a8937e695443301c24394f64798ea4b9cee3e0ccb8a78a75604b35200b00000b1f34475970859bb0c5d6dfcab59f8b776a6f73797f86909ca4b6c2d3cebdb49e8976614c37210c00000006192c3c4b5d646b6760544c403b39384f647a8fa4b9cfddc7b29d88725d48331d0000000000021628384a5b6378838b90908d847a665e4c3d2c1a0600000417293a5c71869cb1b5b5b5b5b5b49f8a75604b35200b0000000000000000000000000000000000000000091e32455773889eb3c8ddf1dbc6b19c86715c3a2917040000000000000000000000000000000000000000000000000000000002090b0f121415161513100c0a04000000000000000000000000000000000000000000000000000000000a1e324557687e93a4b5c9c9b59f8d7a644f3f2e1c0800000000000009141d2e373a424646443d353127190d0000000000000000000000152a3f556a7f94aabfd4e9d5c0ab95806b56402b161e3246576e8399aec3d8e4d2c1a9947f6a54362513000000000000000c21374c61768b9fb4cadfcdbaa9988298aabbcec7b49f8b78624d3d2c1a06000000000000000000000d22384d62778da9bacde1e1cdbaa98a75604b35203347586d8298adc5d5e8e8d5c5a38e79634e39240e00000000001525333c404f647a8fa4c7d7eadac5b09b85705b384747474744403629190700000005192b3c53697e93a7b9cce0dcc7b19c8673604a3a29263b51667b90a6bbd0e5dec8b39e89735544311d08000005182a3b53687e93a7b9cce0cfbcab947f6a575b636a717b869ca4b6cadeccb9a8927d68533d28130000000c2035495a647a807c73655e54504e4e56687d93a8bdd2dec9b39e89745e49341f0000000000091e324556637989999faba6a29a8b7c665b4936210a0000001a2f44596f8499aec4cacacacfbcab8d78624d38230d0000000000000000000000000000000000000000031628395b71869bb0c6dbf0dec9b39e89745847331f0a00000000000000000000000000000000000000000000000000040a0c151d2024272a2b2b2a2825211f170d0b0600000000000000000000000000000000000000000000000000031628394b6073869cb1becfbcab99846f5d4b37230e0000000000000001101b22252c30312e28201d150900000000000000000000000012273d52677c92a7bcd1e7d8c2ad98836d583b2a1816283952677d92a7c6d6e9dac5af9a85705443301c0700000000000012273c51677c91aabbcedec9b49f8a778b9fb4c9cebbaa97826d5b4935210f000000000000000000000b20354a6074899fb4c9dee9d7c7a18c77614c37222a3a50657b90a7b8cce0e5d0bba6907b66513b2611000000000c1c334350555c62778ca9bacde2ddc8b39d8873565c5c5c5c5c595447362411000000000d21364b6175899eb3c4d4decab6a4917c6758473a313e54697e94a9bed3e9dbc6b09b86715b372614010000000d21364b6175899eb3c4d4dac9b39d8875614b4e545d6575869cb1c7dcd6c6ae99846f59442f1a0000071b2d3e4d63788b9591867b716a6563636774869cb2c7dcddc8b39d88735e48331e00000000000b21364b6074879ca7b5bcc0b4a99f8b79634e382816020002172c41576c8196acc1d6dfebd9c9a58f7a65503a2510000000000000000000000000000000000000000000192e44596e8399aec3d8eee1ccb9a88c76614c37210c0000000000000000000000000000000000000000000000060c171f21283236393d3f40403f3d3a3633292320190e050000000000000000000000000000000000000000000000000a1d314455657b8fa0b2c5c9b3a18f7b65503a2510000000000000000000080d0f171b1c19130b08010000000000000000000000000010253a4f657a8fa4c8d8eadac5b09b85705947341f0e23384e63788da8b9cde1dec9b49e8974604a35200b000000000006192c3c576c8297acc8d9dbc6b09b86718298abbccfc8b49f8c79634e3d2d1a07000000000000000000071c30435471869bb1c6dbe3ceb9a38e79644e392420354b6074889eb3c8dee8d3bea8937e69533e291400000004172a3a50616a7172728a9fb4c9dfdfcab59f8c747272727272726e6554402c0b00000000091e3246576a7f95a6b7cbdfd3c2b39d887661584b444b5c6f8499afc4d9e8d6c5ac97826c57422d1700000000091e3246576b8095a6b7cbdfcbb7a696806b5f4a434c57687d93a8bdd2dcc7b19c87725c47321d00000d22364a5c6e8398a9a39b90867f7a78797c859ba4b6cadedbc6b19b86715c46311c000000000014293e53697e93a5b6c5cfd1c7baa999836e5645321e090000142a3f54697f94a9bed4e9e7d2bda7927d68523d2813000000000000000000000000000000000000000001162c41566b8196abc0d6ebe8d6c6a38e79644e39240f000000000000000000000000000000000000000000030e192029333738454b4e525455555453504c463a38352b20190d0100000000000000000000000000000000000000000000011426374b5d6d8298a7b8cbbfac96816c57412c170000000000000000000000000206060400000000000000000000000000000000000d22384d62778daabbcee2dfcab49f8b77624c36251320354a6074899eb4c9dee1ccb9a88d78634d38230e00000000000c2135495b72879db2c7dcd7c2ac97826d798c9fb5cacebbaa98826d5b4a36211000000000000000000000132536566c8196abc5d6e8d3bda8937e685338281c3043546d8398adc2d8ebd6c0ab96816b56412c160100000a1f3347586a808687868c9fb4cadfe3cfbcab9c87878787878787836e5939291703000000031628394b6075889db2bdcee0cbb7a69b857666605560667a8c9fb4cadfe0ccb8a7917c67513c271200000000031628394b6175889db2bdced5c4b59f8d7d6860545051667b90a6bbd0dec9b49e89745f49341f0006192b3c4e64798d9fb5b5b1a49c94908e8e929ba3b5c3d3e4d1c0ab96816c56412c1700000000051a2f455a6f849aafc3d3e3e5d7c7b49f8a75604b36210b000012273c51677c91a6bcd1e6ead4bfaa957f6a55402a1500000000000000000000000000000000000000000014293e54697e93a9bed3e8e6d1bba6917c66513c271100000000000000000000000000000000000000000b171e2c353a474c5356606467696a6b6a68656158554d493c342b1d15090000000000000000000000000000000000000000000009192e3f4c6177899eb3b7b2a195806b55402b1600000000000000000000000000070b0f1314110c0a0400000000000000000000000b20354b60758a9fb4cadfe2cebbaa937e695443301c1c30435471869bb1c6dbe8d6c6a5907b65503b261000000000000e23384d63788da5b6cadfd8c8a8937e686f849aafc3d3c8b49f8c79634e3e2d1b0700000000000000000011263c51667c91a7b9cce0d7c2ad98826d5645321d263653687e93a8bdd3e8d8c3ae99836e59442e190000000c21374c61778c9c9c9c9faabbcee2ecdac9b6a59c9c9c9c9c9c9c89735746331e0a000000000b1e324557667c919fb1c0d1d5c4b4a39b867b7572747b889dabbccfe3d6c5b39e8975604b36210b00000000000b1e324657677d919fb1c1d1cfbcab9f8c7e736965666d8197acc1d7ddc8b39d88735e48331e000b2035485a6f8499abbcc9c2b5b1a9a5a3a3a7b0b5c1d2e1d6c6b4a2907b65503b251000000000071c32475c71879cb1c6dcf1f5e2cebbaa8d78624d38230d00000f243a4f64798fa4c7d7e9ecd7c2ad97826d58422d1800000000000000000000000000000000000000000011263c51667b91a6bbd0e6e8d3bea9937e69543e291400000000000000000000000000000000000002101b29333c494d5861686f75797c7f80807f7d7a76716a625a4d483b3127190c00000000000000000000000000000000000000000000111f344759687d92a1a69d918375614b36210c000000000000000000000008131c2024282927211f170c01000000000000000000081c30435472879db2c7dcebd9c8b19c8773604a36261425365a70859aafc5dae7d2bda7927d68523d2813000000000115273753687e93a8c3d4e2cebbaa8f7964667b90a5b6cacfbcab99836e5c4a3622100000000000000000000b20364b6075899eb3c9daddc8b39e8875604b3625263b50667b90a5c9daecdbc6b09b86715b3929170300000c21364b61768ba8b1b1b4bbc8d9ebf7e7d3c3b6b2b1b1b1b1b1a78b76614b36210c00000000031628394c5e6c8197a2b4c1d0d1c1b4a49c90898789909da6b7c9d9e0ccb8a7957f6a5645321e090000000000031628394d5f6c8197a3b4c1d0c9bbaa9f93857e7b7b82979fb1c5d9d3c3af9a846f5a452f1a000d23384d62788b9ca5b4bbc8c9c6bfbab8b8bcc6c9d2dfd3c6b9a89a85705d4b37230e00000000061b30455b70859ab0c5d6e6e9ddc9b5a38b76614c36210c00000c22374c61778ca9bacde1efdac4af9a856f5a3626140100000000000000000000000000000000000000000f24394e64798ea3c6d6e8ebd6c1ab96816c56412c1701000000000000000000000000000000000513202e39464c5a636d767e84898e9294959594928f8b867f786d62594b4437291c0e00000000000000000000000000000000000000000004182a3b4e606f839996887d6f615746331e0a0000000000000000000210182530353a3e3e3c3633291d14090000000000000000011426365a70859aafc5daefdecab6a4917c665443301c2f44596e8499aec3d9e8d3bea9937e69543e291400000000081d3144556e8399aec3d9dfc9b49f8a75606073879cb2c6d6c9b59f8c79644e3e2e1b080000000000000000091d3245566d8297abbccfe0ccb8a7927d6754433023384e63788dabbccfe3dec8b39e89735746331e0a00000a1e33465774899eb3c6c9ced8e6e8f7f1e1d3cac7c7c7c7c7c5a38e79634e39240e00000000000a1b2f404b6073849aa3b3bfced1c2b6b1a89e9d9ea8b2b7c4d4dacfbcb39e8976614c382816030000000000000b1b30414b6074859ba3b3bfcec8bbb4a39b939091979fb1bdced8c8b6a5927d68533d2813000b2035485a647a87969faab4bbc8cacfd9ced1d4d9cfcac2b6a89e8a79634e3f2e1c080000000000152a40556a7f95a7b8c8d4d7cdbdb09b85705746331e0a00000b1f34475974899fb4c9def1dcc7b29c87725443301c0800000000000000000000000000000000000000000c21374c61768ca8b9cce1eed8c3ae99836e59442e1900000000000000000000000000000000041323303f4b57616c78828a93999fa9a7a9aaaaa9a8ab9f9b958b82786b6055473a2c1e0e0000000000000000000000000000000000000000000c1d31414c6277888175675f4b463929170300000000000000000210202d36434a4f5354514c463a312619090000000000000000182d42586d8297adc2d7ece5d3c2b19c8673604b3c2b2f44596f8499aec4d9e9d4bfa9947f6a543f2a15000000000b20354b6075899eb3c9dedbc6b19b86715654697e93a8b9cccfbcab99846f5c4b3722110000000000000000021528384e63798c9fb5c8d8d5c5b09b8572604a3c2c364b60768a9fb5cadfe0ccb8a78b76614c36210c0000031729395c71869cacb0b4bbc8cbd8e8ffe4d4c6bcb8b8b8b8b8a6907b66513b2611000000000000121d31445561758599a1b4bac7d0cac6b9b4b2b4b9c6cbd4d4c9bcb59e917c675746331a0a0000000000000000121e32455661768599a1b4bbc8cec1b5b0a9a5a6acb1bdced3c8bbaa9c8775604b36210b0006192b3c4b5c6475818b979faab0b4bcc9bfc0bfc9bcb4b0a49c8a7c665b4a3621110000000000000c22374c6177899eaab6c3c6b9b49f917c665139291703000004182a3b5c72879cb1c7dcf1dfc9b49f8a75604b35200b000000000000000000000000080e101414141414141f33475874899eb4c9def0dbc6b19b86715c39291714141414141414110f09000000000000122230414d5d6476818c979fa9afb4bac7bebfc0bfc9bcb4b1aa9f978a80736158493c2c1d0c000000000000000000000000000000000000000000132034485962766c61574d4133291b0b00000000000000000010212e3e4a54606468696661584b443726180800000000000000152b40556a8095aabfd5eaf1dec9b5a4937e685a48392d3d5b70859bb0c5dae9d3bea9947e69543f29140000000010253a4f657a8fa8b9cce1d7c2ac97826d574c6176899eb4c9dac9b3a18f7a644f3f2e1c0800000000000000000a21364a5b6e8399aabbceddc9b5a3937e685a493b32455673889db3c8dde8d5c5a38e79634e39240e0000001a2f44596f8393979b9faaaebacbe4f4d8c6b6a9a3a3a3a3a3a3937e69533e2914000000000000021527374657617583949fa9b3bfc9cdcdc9c7c9ccd6d3cac4b7ab9f95806b5f4d392917000000000000000000021628384658617683959faab3bfc8c9c6bebabbc2c5cecac3b6aa9f8c7b655645321e0900000e1e2e3e4b57616c78828b949b9faba8aaabaaa8ab9f9b928679665e4c3d2d1a030000000000000a1f334758667c8c9da5ababa89e94816c5e4d391b0b000000001a2f445a6f8499afc4d9eee2cebaa98c77624d37220d0000000000000000000003111c232529292929292929293a5c71869cb1c6dbf1dec9b39e8974574633292929292929292926241c1204000000091c2f404d5f677b88969faab4bac7c9cdd7d4d5d5d4d9cfcac8bbb4a99f958476635a493b2a1808000000000000000000000000000000000000000005182b3b485761574b4639301e170b0000000000000000000a1a2e3f4b5c64737a7d7e7c766a6055443625130000000000000013283d53687d92a8bdd2e7f8e5d2c2b49e8a786257473a4a5c73889eb3c8dde7d2bda8927d68533d28130000000417293a556a8095aac6d6e8d8c8a8937e685346576c8196abbccfd0bfaf9a846f5d4b3723110000000000000000071a2d3d4e63798b9fb4c1d2d2c1b39e897862594a3e385b70859bb0c5dae6d0bba6917b66513c26110000000e23384e63797d82868a939caec6d7e9d0bca9978e8d8d8d8d8d8d806b56412b160000000000000009192939465761727f8b99a1adb4b9c6c2c3c4c3c1c3b6b2a69d8d8072604a40301b0b000000000000000000000a1a293a465861727f8b99a1acb3b8c5c0c2c3c2c0c2b6b1a49c8c7d675d4b3828160200000010202e39464b5a626d787f868b8f9394959593918b857d73635b4c402f1f0f0000000000000004182a3a4c5e667b87919596928a7f72604a40301d0000000002172d42576c8297acc1d7ecead8c7a48f7a644f3a250f0000000000000000000011212e373a3e3e3e3e3e3e3e3e44596f8499aec4d9eee0ccb9a78b76614c3e3e3e3e3e3e3e3e3e3b382f22120000000f23384c5e677d8b9da6b4bbc8cdd7dededcd3cdcbcacbcfd7d9cec7bab4a29a86786359473625130000000000000000000000000000000000000000000d1d2b39464b463933291b1303000000000000000000021527384b5d657a868f9393918a7f73605443301c0700000000000010253b50657a90a5c9daecffede1ccb9a89b857561584c4e64798ea6b8cbe0ead7c7a6917c67513c27120000000a1f33465870859bb0c5dae2cebbaa8e79644f394d63788c9fb5cadfc7b3a28f7b6550402f1c0900000000000000000f2135495b6b8096a3b5c5d5ccb9a79d8777645c4b46586d8398adc2d8e8d3bea9937e69543e29140000000c2135495b63686c71757e93a8b9cde1ceb8a38e7978787878787877624c37220d00000000000000000b1b29394654606a79838f979ea8a9adaeafadaca8a59d93887c6a6054433022120000000000000000000000000b1b293a4654606a79838e969ea7a8abacaeacaba8a49c92877a675f4d3f2e1a0a0000000002101b29323c494d5a626a71767a7d7f807f7e7b76706760554a3d2f22120100000000000000000c1c2f404c5d65747c80817d776a6054433022120000000000152a3f556a7f94aabfd4e9e7d1bca7927c67523d2712000000000000000000081c2e3f4b50545454545454545454576c8196acc1d6ebe8d6c5a38e796354545454545454545454514c402f1c09000011263b50667b8b9fa9b7c4ced9e2e0d3c9c6beb8b6b5b6bac2caced7cdc0b3a49c8777615443301c0c0000000000000000000000000000000000000000000d1b29323632291e170b0000000000000000000000091d314556657b8b9ca4a8a9a89e958272604a35200b0000000000000e23384d63788dabbccfe3eddccfc6c6b5a39a84766761626e8398aec5d5e7e2cdbaa98e79644e39240f0000000c21364c61768b9fb4cadfdfc9b49f8a75604b36495b6f8499afc2d3d0c0b09a85705e4c3823120000000000000000061a2c3d4b6074859ba7b8c7d6c5b6a59c867a6a6157556b8095aac0d5ead6c0ab96816b56412c16010000061a2c3d494e5357566075899eb4c9decdb7a28d78636363636363625948341f0b0000000000000000000b1b2936434a5b636f7a8289909497999a9896938d877e75665e4a4336251304000000000000000000000000000c1c2936434a5b636f7981898e939697989796938d867d74645c4d41302111000000000000000b161e2b353c484d55586165686a6b6a68666158524b44372d1f12040000000000000000000012222f3f4b5660666b6b6861584a4336251304000000000012273d52677c92a7bcd1e7e9d4bfa9947f6a543f2a150000000000000000000e23374b5d6569696969696969696969697f94a9bed4e9e6d0bba6917c6969696969696969696969665e4c38240f00000d23384d6278899eb3bccde2e3d6ccc2b6b1a9a3a19fa1a5acb4bbc8d6d0c3b6a59a8472604a3a2917040000000000000000000000000000000000000000000b161e211e160b030000000000000000000000000b20364b6074879da9b5c2c6b9b4a0927d67523625130000000000000b20364b60758a9fb5cadfe2cfbeb2adb2b4a29a877c76778197a0b2c6e3f3dfc9b49f8a75604b36200b00000011273c51667c91aabbcee2dbc6b09b86715645323c50667b90a4b6caddc8b4a2907b6650402f180800000000000000000f1d3145566378899ea9b9c6d4c3b6a49c8b80766e69687d92a8bdd2e7d8c3ae99836e59442e19000000000e1f2c35383e3845576e8398adc5d6cfbaa5907a65504e4e4e4e4c483b2a1805000000000000000000000b1825303d494e5c646d757a7f82848483817e78726960564c40302518080000000000000000000000000000000c1825303d494e5b636c74797d80828382807d78726860564a3e302312030000000000000000030e19202b35383a464c505355565553514c463a353126190f0100000000000000000000000412212e38454b515656534c473a3025180800000000000010253a4f657a8fa4c8d8eaecd7c1ac97826c57422d1702000000000000000010253a50657b7e7e7e7e7e7e7e7e7e7e7e8298adc2d8ededd8c3ad98827e7e7e7e7e7e7e7e7e7e7e7c66513b261100000c2035495a667c919eb0c0d1d1c5b8b3a49c948e8b8a8c90979faab9c5d6d3c3b3a2937e685846331f0800000000000000000000000000000000000000000000030a0c0a03000000000000000000000000000011263c51667c91a5b6c7d2d7cdbeb09a85705443301c070000000000091d31455673889db2c8dddac6b2a0989da6b4a59d928c8c979fb1becfe2ead8c7b09b85705544311d08000006192c3c576c8197acc8d9ebd7c1ac97826c573828354a6073869cb1c5d6d1c0b09b85705e4c362513000000000000000002152738495a647b8b9ea8b7c3d0c3b6aa9f9589837e7c7f94aabfd4e9dbc6b19b86715c3a291704000000000e1a212328283951667c91a7b9ccd2bda8927d68533d38383837342a1d0d00000000000000000000000008131c2c363e4a4f566065696d6e6f6e6c69635b544b4538301c1308000000000000000000000000000000000008131c2c353d4a4e546063686b6d6e6d6b68625a534b45382d2012050000000000000000000000060e1920222933363a3e3f40403e3c363329201d1409000000000000000000000000000003111a2731363c40413d37332a1c1308000000000000000d22374d62778caabbcee2eed9c4af99846f5a442f1a000000000000000000152a3f556a7f939393939393939393939398a0b2c6daefefdac6b2a098939393939393939393939385705b382816020006192c3c4c5e6b8096a2b4c4c0b4a79e92867e797675767b828c9ea7b9cce0d0c0b39e8976614c3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac3d4e5e9dfc9b49f8a75604a35200b0000000000021527385b70859bb0c5dad8c3ad9882889da8b6b2a7a1a2acb1bdcedcede2cebaa9937e69543727150200000c2035495a72879db2c7dcead8c7a8937d68533e28304354697e93a7b9ccddc9b5a3917c665443301c0800000000000000000a1a2c3c4b5c657b8a9da5b3bfcbc8bbb4a89e989391949dafc2d7f3dec9b39e89745846331f0a0000000000060c0e1320364b6075899eb3c9d5bfaa95806a55402b2323221f180d0000000000000000000000000000000f1a212d3638454b505458595a5857534e493d3632281a120000000000000000000000000000000000000000000e1a212d3636434a4e535657595756534d493c3632281a10020000000000000000000000000000050b0d171f2125282a2b2a2926211f170c080100000000000000000000000000000000000a151d20272b2c28221f180c0000000000000000000b20354b60758a9fb4c9dff1dcc7b19c87725c3a2a1804000000000000000012273d52677c92a7a9a9a9a9a9a9a9a9a9adb2becfe1f5f5e2cfbeb2ada9a9a9a9a9a9a9a9a9a99d88735645321e0900000e1e30404b6073849aa6b4b3a29a897d736963616061656d7b899eb3c2d3e0ccb8a7947f6a5443301c070000000000000000000000000000050b0d12141516170c0a03000000000000000000000000000001162b41566b8096abc7d7e9efdfcab59f8a75604b35200b000000000000192e43586e8398adc3d8d6c1ab96817a8a9ea8b8c4b6b7c1c4cedbebe2d3c2b49f8b77614c37220c0000000e23384d63788da5b6cadfe2cebaa98e79644f392425364b6175899eb3c9d9d2c1b19b8673604a3626140100000000000000000e1e2e3e4b5d657a8799a1b2b7c4cbc6b9b4ada9a6aaafbbccdeeae0ccb9a78b76614c36210c0000000000000000091d3245566d8298adc5d5c2ad98826d58432d180e0d0b05000000000000000000000000000000000006101b222731363b3f42444543413e38352c211e160a0000000000000000000000000000000000000000000000060f1a21253035393e41424342413e38352c201d150a00000000000000000000000000000000000000040a0c101315161513110c0a0400000000000000000000000000000000000000000002090b111616130c0a0400000000000000000000081c30435472879db2c7dcf2dec9b49f89745947341f0a000000000000000010253a4f657a8fa4c8bebebebebebebebec2c6cfdcecfefeeddccfc6c3bebebebebebebebebeb59f8b76604b36210b000000121d3144556277889ba29e9484776860544e4c4a4c505d677d91a4b6caded5c5b29d8773604a35200b0000000000000000000000040a0d18202227292b2c2c211e170b000000000000000000000000000013283e53687d93a9bacdd9dbd2c3b29d87725544311d08000000000001162b40566b8095abc0cfd7c1ab96816c7b8a9ea6b3c0c9d2d8d9d9d9cec3b6a495806b5847331f0a00000114263753687e93a8c3d3cfcfc9b49f8a75604b36201e3246576b8196abbccfcfc9b5a3917c675443301c0900000000000000000010202e3f4b5c647683919da6b2b7c4c8c9c3bebbbfc2ccd8d7d5d3d3c5a38e79644e39240f00000000000000000215283850667b90a7b8ccc5b09a85705b3727150200000000000000000000000000000000000000000000070a151d20252a2d2f2f2e2c2923211a0e090200000000000000000000000000000000000000000000000000000708131c2024282b2d2e2d2b282320190e09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426365a6f859aafc4daefe1cdbaa98c77614c37220c00000000000000000d22374d62778caabbced3d3d3d3d3d3d3d8dae1e1e1e1e1e1e1e2dad8d3d3d3d3d3d3d3d3cfbcab8e78634e39230e0000000115273748596278858c897f7362594b43363635373f4a6073879cb1c7dcdfcab7a58f7a644f3a250f000000000000000000000b171f212b34373c3e4041413633291b0b000000000000000000000000000d22374c62778a9fb4bbc8c6c1b5a595806b553727150100000000000013293e53687e93a8b9b9c7baaa957f6a657a889aa2b1b5c2c2c4c3c8bbb4a49c8675604b3a2a18040000081d3144556e8399aeb9b9b9b9c3b09b86715645311d1628394d62788c9fb4bfb9b9c2b19c8673604b3727150100000000000000000211212e3e4a58616e7c88939da6aeb3b8c5c0c2c3c4c4c3c2c0bec2b6a6917c66513c27110000000000000000000b20354b6074889eb3c2b8b29d88725544311d0800000000000000000000000000000000000000000000000002090b101418191a1917140e0c060000000000000000000000000000000000000000000000000000000000000000070b0e131618191816130d0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e2020202020202020201e1c160d000000000000000000000000182d42586d8297adc2d7ece9d7c7a48e79644f39240f00000000000000000b20354b60758a9fb4c9ccccccccccccccccccccccccccccccccccccccccccccccccccccccdac9a6907b66513b26110000000009192b3b485a627076746a6055483b30262120213043546c8196acc1d6e6d4c3aa95806a55402b15000000000000000004121b2933363b484d51545556564c46392917030000000000000000000000000b1f344859697f949faab0b0aea39b8776614c36210c0000000000000011263b51667b90a4a4a4a4a99f907b655c647784919ca4a9adafaeacaa9f968677625645321c0c0000000b20354b6074899ea4a4a4a4a4a4a596816c563827150b2035495a6d8298a1a4a4a4a4a4a4927d675544311d080000000000000000000311202d3a474c5f67757e8890989ea7a8abadaeafafaeadaba8a5a49c937e69543e2914000000000000000000081d3144556c8197a4a3a3a39f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21243535353535353535353331291e100000000000000000000000152b40556a8095aabfd5eae6d1bca6917c67513c27120000000000000000081c30435472879db2b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a8937e69533e291400000000000d1d2b3c484d586160544b44372b1c140c0b13253654697e93a9bed3e8d9c4af9a846f5a362614010000000000000513222f3a464c54596267696a6b6c615746331e0a00000000000000000000000005182a3b4f616a7f8c969a9b98928578625846331f0a000000000000000e23394e63798e8f8f8f8f8e8a806a5d4c59626f7c868e9498999997928b8176625948382816000000000f253a4f647a8f8f8f8f8f8f8f8f8e8777624d37220d06192b3c4c6176838d8f8f8f8f8f8f8f8775604b35200b0000000000000000000002101c2a33414d566069747b83898e929598999a99999795938f8c868079634e39230e000000000000000000011527374c6277868d8d8d8d8d8d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36394a4a4a4a4a4a4a4a4a49453c2e1e000000000000000000000013283d52687d92a7bdd2e7e9d3bea9947e69543f29140000000000000000011426365a6f859aa1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a196816b56412c160000000000000e1e2b353a474c4b43363126190d040a111a283853687d92a8bdd2e7ddc7b29d88725443301c08000000000002132331404c58616972777c7e80818176614c36210c000000000000000000000000000d1d324350616a79818586837c73625a483a291704000000000000000b20364b60737a7a7a7a7a79766a62503f484d5f6771797f838484827d776c6158483b2b1a0a000000000c22374c61777a7a7a7a7a7a7a7a797462594834200b000e1f334658616e787a7a7a7a7a7a7a7a75604b36210b0000000000000000000000000c171f3038454b5560666e74797d80838485848382807e7a76716b635b4935210c000000000000000000000920344859627378787878787974604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e6060606060606060605e594c3c1b0a0000000000000000000010253b50657a90a5c9d9ebebd6c1ac96816c57412c17020000000000000000182d42586d828c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c836e59442f19000000000000000e19202933373530261d14090c181f222f3845566b8095aac0d5eadfcab49f8a75604b35200b0000000000102031414e5e66767f878c919395968e79644f39240f000000000000000000000000000015253343505b636b70716e676055483c2b1b0b0000000000000000081d31445560646464646463615750443334414d515c64696d6f6e6c6862594c473a2b1d0d00000000000a1f344759616464646464646464636056483b2b1805000417293a464c5a626464646464646464605745321e090000000000000000000000000004121a283237444b51546064686b6d6e6f6f6e6d6b69656158564e493d2c1a060000000000000000000005182b3b485460626363636363605645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b70757575757575757575736b59392816030000000000000000000d23384d62788dabbccfe3eed9c3ae99846e59442f190000000000000000000c21364b61757777777777777777777777777777777777777777777777777777777777777777777776614c36210c0000000000000000050c171f21201c140a161e212a34373f4c566074879db2c7ddf2e3cfbcab8b76614b36210c00000000071b2d3e4e5f687c88949da5a6a9aaa6917c66513c27110000000000000000000000000000071525333d494e565b5b59524b44372b1e0e00000000000000000002152737444b4f4f4f4f4f4e4b463933252030393e4a4f54585a5957534c473b332a1c0d00000000000004182a3a474c4f4f4f4f4f4f4f4f4e4b45382b1d0d0000000b1b29333c484d4f4f4f4f4f4f4f4f4b45392816030000000000000000000000000000000a161e27313536434b4f535658595a5a59585653504c473a39352c1f0f0000000000000000000000000d1d2b36434b4d4e4e4e4e4e4b4538281602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798a8a8a8a8a8a8a8a8a89735745321e090000000000000000000b20364b60758a9fb4cadff1dbc6b19c86715c3a2917040000000000000000091e3246576161616161616161616161616161616161616161616161616161616161616161616161615846331f0a00000000000000000000040a0c0b0d19202832363a474c535d65748299a5b7cadff4e1cdbaa98b76614b36210c000000000d22364a5c687e8d9ea6b2b6c3bebea9947e69543f291400000000000000000000000000000007151f2c3539414546433d353126190e000000000000000000000009192731363a3a3a3a3a393632281b15121d242d36393f434444423d37342a1f170c00000000000000000c1c2a34373a3a3a3a3a3a3a3a393631271a0d00000000000b171f2b35383a3a3a3a3a3a3a3a3632281b0a00000000000000000000000000000000000209151d20263035393d40434445444442403e3a37332923211a0f01000000000000000000000000000d182630353838383838383632281a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba79f9f9f9f9f9fa78b76604b36210b000000000000000000081d31445573889db2c8ddf2dec9b39e89745846331f0a000000000000000003162839464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c463a2917040000000000000000000000000b171e2b3439454b52596169717b8699a1b2c3d4e6f4dec9b49f89745746321e09000000061a2c3d4f647a8b9fabb8c5cac3b6b2ab96816b56412c1601000000000000000000000000000000010f1a21232c30312e27201d14090000000000000000000000000009151d20252525252524211e160b00000a101b22242a2e2f2f2d28221f180d04000000000000000000000c181f22252525252525252524201d150a00000000000000040e1920232525252525252525211e160a000000000000000000000000000000000000000001080b141c2024282b2e2f302f2e2d2b2925211f170e0c060000000000000000000000000000000008141c20232323232323211e160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465773899eb3b5b5b5b5c5a38e78634e39230e000000000000000000021527375b70859ab0c5daefe0ccb9a78b76614c36210c0000000000000000000b1b283236373737373737373737373737373737373737373737373737373737373737373737373633291b0b0000000000000000000000000e1b29333b484d5760676f777e86909ca4b2bfcfe1f1f1dcc7b29c87725d392816030000000c2135495b6f849aa9bac9cfbfb3a59c97927e68533e2913000000000000000000000000000000000000060c0e161b1c19120b080100000000000000000000000000000002080b0f0f0f0f0f0e0c09030000000000070d0f14181a1917130d0b0500000000000000000000000000040a0c0f0f0f0f0f0f0f0f0e0b090200000000000000000000060b0d0f0f0f0f0f0f0f0f0b090300000000000000000000000000000000000000000000000001080b0f131618191a1a19181614100c0a04000000000000000000000000000000000000000001080b0d0e0e0e0e0e0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395c71869bb1c6cacacabba5907b66503b261100000000000000000000182e43586d8398adc2d8ede8d6c5a38e79644e39240f000000000000000000000b161e2122222222222222222222222222222222222222222222222222222222222222222222211f170b0000000000000000000000000e1e2c39464c59626b757d848b939ba3b1b5c2cfddedf5e5d1c1ac97816c57422d17000000000e23384e63788da2b3c7d8c6b3a19987827d72604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e8499aec3d9dfd2bda8937d68533e281300000000000000000000162b40556b8095aac0d5eae6d0bba6917b66513c2611000000000000000000000003090c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a040000000000000000000000000d1d2c3c4957616c78808992999faab1b5c1c9d2e0edf4e7d7c7b5a3907b66503b26110000000014293e53697e93a8c0d0d6c5ae9983736d68605443301c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c101315161514110e0c060000000000000000000000000000000000000000000000000000000000000000000002090b0f1315161514120e0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6ead5c0ab95806b56402b160100000000000000000013283e53687d93a8bdd2e8e8d3bea8937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182b3c495b6376818b969ea7afb4bbc8c9d2dee5f0ede4d6c9baa99b85705e4c38230f00000000182d42576d8297acc2d7ccb9a78e796355524b4336261401000000000000000000000000070c0e202020202020202020202020202020202020202020202020202020202020200e0c0600000000000000000000040a202020202020202020202020202020202020202020202020202020202019161006000000000000000000000000040a20202020202020202020201b191208000000000000000000000000000000000000000000000000000000000000000000000000040a0c171f2125292a2b2a2926232019110b080200000000000000000000000000000000000000000000000000000000080a151d2025282a2b2b292724201c140b08010000000000000000000000000000000000000000000000000000000000000000000000010d171d1f202020202020201816100600000000000000000000000000060c0e1e20202020202020201e1b140c09030000000000000000000000000000000000000000000000000014293f54697e94a9bed3e9d8c2ad98836d58432e180000000000000000000011263b50667b90a5bbd0e5ebd6c0ab96816b56412c160100000000000000000000000000080e1020202020202020201b191208000000000000000000000000000000000000000000000000000000000000000001142636485a637987969faab3b8c5caced8dde4efebe3dfd0c6b9ab9f8b7a644f402f1c0900000000192f44596e8499aec3d9c9b39e89745b4a3735302618080000000000000000000000010f1a2124353535353535353535353535353535353535353535353535353535353535352320190e00000000000000000c171f35353535353535353535353535353535353535353535353535353535352e2b23180a000000000000000000000c171f3535353535353535353535302d261a0c000000000000000000000000000000000000000000000000000000000000000000030b171f212933363a3e3f403f3e3c38352c26201d15090200000000000000000000000000000000000000000000000007111c232832363a3d3f40403f3c39353026201d140901000000000000000000000000000000000000000000000000000000000000000001111f2a3134353535353535352d2b23180a00000000000000000000000e192023333535353535353535333029211e160b00000000000000000000000000000000000000000000000012273c51677c91a6bcd1e6dac5b09a85705b372715020000000000000000000e23384e63788da3c4d5e7edd8c3ae98836e59432e1900000000000000000000000003111c23253535353535353535302d251a0c00000000000000000000000000000000000000000000000000000000000000081c3043546278889da5b4bbc8ccd6dfe2eaf2e7e0d9cfcabfb3a89e8d7d675c4a36221100000000001a30455a6f859aafc4dac7b19c87725c3d2d201c14080000000000000000000000000f1f2d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a38352c1e0e0000000000000c1c29334a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a43403628180600000000000000000c1c29334a4a4a4a4a4a4a4a4a4a4a4542382a1a08000000000000000000000000000000000000000000000000000000000000000b171e2933363a464c505355555553514d493c3c3631271e160a000000000000000000000000000000000000000000010f1a212f3838454b4f5255555554514e4b43363531261c1408000000000000000000000000000000000000000000000000000000000000000d1f2f3d46494a4a4a4a4a4a4a433f352818060000000000000000000e1e2c3538494a4a4a4a4a4a4a4a49453e3632281b1103000000000000000000000000000000000000000000000f24394f64798ea4c6d7e9ddc8b29d88735544311d080000000000000000000b21364b60768ba6b8cbe0f0dbc6b09b86715b39281603000000000000000000000011212f383b4a4a4a4a4a4a4a4a4542382a1a030000000000000000000000000000000000000000000000000000000000000b20354b6073859ba6b6c3ced8e0e8f3ebe2dfd5cbc9bcb4aea1998a7c675f4d3e2d1b030000000000192f44596e8499aec3d9c7b29d88725d3b2a180801000000000000000000000000071a2d3d4a4e606060606060606060606060606060606060606060606060606060606060605e493c2c1906000000000417293a465e60606060606060606060606060606060606060606060606060606060585346362310000000000000000417293a465e606060606060606060605b5548382612000000000000000000000000000000000000000000000000000000000004111b29333a464c54586165686a6b6a6966635a58514b443732281a12020000000000000000000000000000000000000513202d363f4c50566064686a6b6a6967636054514b44373026180f010000000000000000000000000000000000000000000000000000000003172a3d4d5a5e60606060606060585346352310000000000000000006192c3c494d5e60606060606060605e5a544b46392e2111020000000000000000000000000000000000000000000c22374c61778ca8bacde1dfcab49f8a75604b36200b000000000000000000091e32455673889eb3c8ddf3ddc8b39e88735745321e0900000000000000000000081c2f3f4b5060606060606060605b5548382111000000000000000000000000000000000000000000000000000000000005182b3b52677d92a2b4c4d4e2eaf6ece3d9cecac4b7b3ab9f988e8378665e4d41302010000000000000182d42576d8297acc2d7c9b49e89745947341f0b000000000000000000000000000c21364a5b7075757575757575757575757575757575757575757575757575757575757575705a4935200c000000000a1f33465870757575757575757575757575757575757575757575757575757575756e6453402b16020000000000000a1f3346587075757575757575757575706655422d09000000000000000000000000000000000000000000000000000000000715222f39464c58616970767a7e7f807f7e7b78736d6660554b45382f1d150a00000000000000000000000000000000071523303e4a4e5d656e757a7d7f80807e7c79746e6660554b43362d201406000000000000000000000000000000000000000000000000000000081d31465a6b74757575757575756d64533f2b1601000000000000000c2035495a6373757575757575757573706961574b3f2e20100000000000000000000000000000000000000000000a1f34475974899fb4c9dee3cfbcab8d78624d38230d000000000000000000031628385b70869bb0c5dbf0e0cbb8a68b76604b36210b000000000000000000000e23384b5d6575757575757575757066553f2e1c08000000000000000000000000000000000000000000000000000000000b2034485971869bb1c0d1e2f1f3e7dacfc8bbb4aea69d968c83796f625a4d4030231302000000000000142a3f54697f94a9c8d8ccb9a88c77614c37220c000000000000000000000000000e24394e63798a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78634d38230e000000000c21364c61768a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a826e58432e19000000000000000c21364c61768a8a8a8a8a8a8a8a8a8a84705b37271502000000000000000000000000000000000000000000000000000008162533404c57616b767e858b8f9394959493918d88837b746960564c4031271a0b000000000000000000000000000004152532414d5c646f7b838a8f9294959594918e89837b746860544a3e312415070000000000000000000000000000000000000000000000000000091f34495e748a8a8a8a8a8a8a8a826d58432d1800000000000000000e23384d6378888a8a8a8a8a8a8a8a88857e75655d4b3e2e1c0c000000000000000000000000000000000000000004182a3a5c72879cb1c7dcebd9c9a5907a65503b251000000000000000000000192e43596e8398aec3d8ede7d5c5a38e78634e39230e0000000000000000000010253b50657b8a8a8a8a8a8a8a8a84705d4b372310000000000000000000000000000000000000000000000000000000000d22374d62778ca3b5c9dfeff3e3d6c9bcb5aa9f99918880786e645c4d483c302213050000000000000010263b50657b90aabbced6c6a5907b65503b2610000000000000000000000000000c21364b61768ba79f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f907b65503b2610000000000a1f33465874899e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b86705b382816030000000000000a1f33465874899e9f9f9f9f9f9f9f9d88735544311d08000000000000000000000000000000000000000000000000000416263443505e6676808a939a9faba8aaaaaaa8a6a69d9891877e75665e4b4538291b0b00000000000000000000000000122232434f5f677a8490999fa9a7aaaaaaa9a6a79e9890877d73645c4e423326150700000000000000000000000000000000000000000000000000071c31475c71869c9f9f9f9f9f9a85705b37271502000000000000000c2035495a647a8a9eaa9f9f9fab9f9e9a93887b655c4b3a29170400000000000000000000000000000000000000001a2f445a6f8499afc4d9e7d2bda7927d68523d281300000000000000000001162b41566b8096abc0d5ebe5d0bba5907b66503b261100000000000000000002152738556a80959f9f9f9f9f9fa28f7a65503e2e1b0700000000000000000000000000000000000000000000000000000012273d52677c92a7c2d2e5fbe8d6c5b9ab9f978b847c746b635b4f4a3e352b1e120400000000000000000c21364b61768a9fb4c9d5bfaa95806a55372715010000000000000000000000000a1e33465773899eb3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a8927d68533d2813000000000417293a5c71869cb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b39d88735645321e090000000000000417293a5c71869cb1b5b5b5b5b5b49f8a75604b36200b000000000000000000000000000000000000000000000000001222344551616a7c88969ea8b0b4bcc9bfc0bfbec4b8b3ada69d94877c6c6056463a291b0a00000000000000000000000d1d2f404f616a7d8b9aa2aeb4bac7bfc0bfbec5b8b3ada59d92857a6860504433251504000000000000000000000000000000000000000000000000041a2f44596f8499aeb5b5b5b29d88735544311d080000000000000006192c3c4a5c667c8c9fb4bbb5bcb5b3afa69d8b7a645847331f140200000000000000000000000000000000000002172d42576c8297acc1d7ead4bfaa957f6a55402a150000000000000000000014293e53697e93a8bed3e8e8d3bda8937e68533e2913000000000000000000091d31455670859aafb5b5b5b5c0af9a846f5c4b37220f000000000000000000000000000000000000000000000000000000142a3f54697f94a9bed4e9f5e0ccb9a79e8d82786f6660554d493c362d20190e00000000000000000000091e32465770859ab0c5dac4af9a846f5544311d08000000000000000000000000031729395b70859ab0c4d5cacacacacacacacacacacacacacacacacacacacacacacac0aa95806b55402b160000000000192f44596e8499aec3cacacacacacacacacacacacacacacacacacacacacacbb8a68b76604b36210b00000000000000192f44596e8499aec3cacacacfbcab8d78634d38230e000000000000000000000000000000000000000000000000091d304051636c7f8d9da6b4b9c6cacfd9d4d5d4d3d5cbc8c4b7b2a59d9181746158463928160300000000000000000005182a3b4c5e6a7f929fa9b3c0c9cdd7d4d2d1d2d5ccc8c3b6b2a39b8b7e6b62504333221200000000000000000000000000000000000000000000000002172c42576c8197acc1cacab49f8a75604b36200b00000000000000000e1e2d3e4c5e687d929dafbdcfcac8c4b7a99d8776614c4332201000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9d7c2ad97826d58422d180000000000000000000011263b51667b90a6bbd0e5ead5c0ab95806b56402b160100000000000000000b20364b60758a9fb4c9cacacac7b3a28f7a644f3e2d1a070000000000000000000000000000000000000000000000000001162b40566b8095abc0d5eae5d2c1b39e897b6d625a514b4437352c221b100b080200000000000000000003162839556a8095aac6d7c9b49e8975604b35200b00000000000000000000000000152a3f546a7f94a6b8c7d7e4dfdfdfe6d8cecac5c9cdd7d7dadcdcddddddddddd8c2ad98836d58432e180300000002172c41576c8196acc1d6dfdfdfdfe5dedcd0d0d0d0d0d0d0d0d0d0d0d0d0d5c4a38e78634e39230e00000000000002172c41576c8196acc1d6dfebd9c9a5907a65503b25100000000000000000000000000000000000000000000000000f24394d5e6c81959fabb7c4cdd7dfd3cac7c1bfbfc2c6cad3cbc3b7b29f978476615745321e140000000000000000000b1f344759667c8d9fb4bac7d0d8cec9c2bdbbbdc2c9ccd3cac1b5a99f93806b615040301d0d000000000000000000000000000000000000000000000000142a3f54697f94a9bed4cfbcab8d78634d38230e00000000000000000010202f404e5f6a7f949fb1bfcfddd4c7b7a599836e614f3e2e1c0c00000000000000000000000000000000000012273d52677c92a7bcd1e7dac4af9a856f5a362614010000000000000000000e24394e63798ea3c5d6e8edd8c2ad98836d58432e1800000000000000000010253a4f657a8fa9bacde1dfe3d0c0ae99836f5c4a36210f0000000000000000000000000000000000000000000000000001172c41566c8196abc1d6ebdec9b5a3907b655d4d493c3531272119151d20201d150900000000000000000010253a50657a8fa8b9cdcdb9a88e79644f39240f000000000000000000000000000c21364c6176889da9bac6d7e4f4ead8c8bbb4b0b4bac6c2c5c6c7c7c7c7c7c7c7c5b09a85705b45301b060000000014293f54697e94a9bed3e9fff0e0d3cac7bbbbbbbbbbbbbbbbbbbbbbbbbbbbbba5907b66503b26110000000000000014293f54697e94a9bed3e9e7d2bda8927d68533d281300000000000000000000000000000000000000000000000011273c51667c919fb5bcc9d5e1d1c9c2b6b1acaaaaacb1b6c2cad3cabdb1a29a8475604b42321d0d000000000000000417293a4c6277889eabbcced8d4c7bab4ada8a6a8acb3b9c6ced2c7bab49e947f6a5e4d3b2b1805000000000000000000000006070707070707070707070712273c52677c91a7bcd1d9c9a5907a65503b2510000000000000000000021122314150616c8197a1b3c0d1e0d4c3b3a1947f695c4b3a2a1704000000000000000000000000000000000010253a4f657a8fa4c8d8eadcc7b29c87725443301c080000000000000000000c21364c61768ba7b9cce0f0dac5b09b85705b382715020000000000000001142637556a7f94aac7d7e9e1dedbc7b3a18e79644e3d2c1a0600000000000000000000000000000000000000000000000000162b40556b8095aac0d5eadbc6b19b86715d4b3f352c201d15171f2731363631271c1308000000000000000b20364b6075899eb4c9d7c6a9937e69543e2914000000000000000000000000000a1f334658657b8b9fa8b9c6d6e4e2cebbaa9f9a9fa8a9adb0b1b2b2b2b2b2b2b2b2af9a85705a45301b050000000011273c51667c91a6bbd1e6f9e5d3c2b6b1a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5937e68533e29130000000000000011273c51667c91a6bbd1e6ead5bfaa95806a55402b150000000000000000000000000000000000000000000000000b20354b60738399a3b4c3d3cec1b5b0a49c979595979ca4b1b6c2d1cec0b4a299836e604f3b2b18050000000000000a1f3346586b8096a7b8c9dad4c3b7a99f98939193979ea8b1beccd7cdbcaf9d917c66594834201000000000000000020c12141b1c1c1c1c1c1c1c1c1c1c1c1c253a4f647a8fa4c7d8d2bda8927d68533d28130d03000000000000000004132333434b60728399a2b4c2d3e1d0bfb49f8b7a645847331f1402000000000000000000000000000000000d22374d62778caabbcee2dfc9b49f8a75604b35200b0000000000000000000a1e33465774899eb3c9def2ddc8b29d88735645311d0900000000000000081d3144556f849aafc4d9d6cdc9cdd0bfae98836e5b4936210e0000000000000000000000000000000000000000000000000013283e53687d93a8c6d7e9d8c3ae99836e593f2f20190e131c293337444b4b443730251808000000000000091d3145566f8499afc4d8c3ae99836e593a2917040000000000000000000000000417293a4b5d657b8a9ea8b9c6d6dfcab49f8b84898f94989b9c9d9d9d9d9d9d9d9d9a937f69543f291400000000000f24394f64798ea4c6d6e9f3decab6a49c9090909090909090909090909090909090806b56412b16010000000000000f24394f64798ea4c6d6e9edd7c2ad98826d58432d18000000000000000000000000000000000000000000000000081c3043546074859ba5b6c4bbb4a39b8f87817f7f82868f9ca4b4c0d1d1c0b2a1937e69594834200e0000000000000c21364c6176899eb4c5d5d9c8b7a59d8b827d7c7d828997a0afbccce2ccbbb39e8977624d3e2d1b07000000000006141f27293031313131313131313131313131374d62778ca9baced5bfaa95806a55402b27201507000000000000000005151c3043546074849aa4b6c4d4e2cebbaa9d8776614c43322010000000000000000000000000000000000b20354b60758a9fb4c9dfe2cebaa98c77624d37220d000000000000000000031729395c71869bb1c6dbe1dfcab59f8a75604b36200b000000000000000b20354b6074899eb4c9d6c6b9b4b9c6cab59f8c79634e3c2c19060000000000000000000000000000000000000000000000000f253a4f647a8fa8bacde1dac5af9a8570564532201d2022303a464c556060554a433625130000000000000215273854697f94a9bed4c8b39d88735846331f0a000000000000000000000000000c1c2e3f4b5d657b8a9ea8b9c6d6cebbaa9984757a7f8285878788888888888887857e72604b35200b00000000000c21374c61778ca8b9cde1f1dcc7b19c867c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b79634e39240e000000000000000c21374c61778ca8b9cde1efdac5b09a85705b3727150200000000000000000000000000000000000000000000000114263645566177879da6b1aa9f94857a726c6a6a6d717a869aa2b4c4d4cfbfb49e8a77624d3c2b1905000000000013283e53687e93a8b9cce2cebbaa9d87796d6866686d7682959eafbecfe0ccb8a798836e5c4a36220c00000000051424323b3e4546464646464646464646464646464a60758a9fb4c9d7c2ad98826d58463f3c3225150500000000000000000114263645566176869ca6b7c5d6d8c8b7a599836e614f3e2e1c0c000000000000000000000000000000081c30435472879db2c7dcead8c7a48f7a644f3a250f00000000000000000000192f44596e8499aec3cccccccfbcab8d78634d38230e000000000000000f243a4f64798fa8b9cccdb9a89ea8b9cdbcab98826d5a4935200e0000000000000000000000000000000000000000000000000b20364b6075899fb4c9dedec9b49e8975604b4035313437414d58616c75756b605443301c1100000000000010253a50657a8fa5bacfcbb7a68b76614c36210c000000000000000000000000000011212f3f4b5d657b8a9ea8b9c5d6c8b3a1998374696d707172727272727272727069605443301c0800000000000a1f33475874899eb4c9def2ddc7b29d887266666666666666666666666666666666635b4a36210c000000000000000a1f33475874899eb4c9def2ddc7b29d88725544311d08000000000000000000000000000000000000000000000000081828384759637988979c998b7f73655d575555575d6575849aa6b7cbdfcdb9a897826d5a4835200b000000000417293a586e8398adc6d6dfcab49f8c7a645b53515358616d7f95a0b2c6d7d6c5b2a08e7a644f3a2a1804000001132332424f545b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5472879cb2c7dac5b09a85705c5b544f433223120100000000000000000818283847586278889da7b9c7d8d4c3b3a1947f695c4b3a2a18080000000000000000000000000000011426365a70859aafc5dae6d1bca7917c67523c271200000000000000000001172c41566c8196abb6b6b6b6b6b6a5907a65503b25100000000000000013253654697e94a9c6d6c9b49e899eb4c1c9b49f8b78634d3c2b19050000000000000000000000000000000000000000000000091d3145566e8398aec2d2e1cdb9a8947f695e4f4b44484d535f6776818a8a8072604a3f2f1d0c00000000000c22374c61778ca1b6d9d4c4a38e79644e39240f00000000000000000000000000000311212f3f4b5d657b8a9ea7b8c5d0bfb3a199837460565c5d5d5d5d5d5d5d5d5b544b4336261401000000000004172a3a5c71879cb1c6dcf1dfcab49f8a75605050505050505050505050505050504e4a3d2d1a070000000000000004172a3a5c71879cb1c6dcf1dfcab49f8a75604b36200b000000000000000000000000000000000000000000000000000a1a2a3a495b63788286837a6a60544b3f40403f4b576176879db2c5d6d6c6b49f8b78624d38220f000000000a1f33475873889db2c8ddd8c3ae99836e5c4a3d3c3a474c616e8398a8b9cde1cfbeae98836e5847331f0a00000a1e30414f6069707171717171717171717171717171717171849aafc4dac7b29d877271706a614f41301d0a0000000000000000000a1a293a485a6379899ea9bac9dad0bfb49f8b7a645847362513000000000000000000000000000000182d42586d8297adc2d7e9d4bfa9947f6a543f2a150000000000000000000014293f54697e94a1a1a1a1a1a1a1a1927d68533d2813000000000000071c3043546e8499aec3d6c1ac968196a3b5c9bbaa97826d5a4835200d00000000000000000000000000000000000000000000000215273851667b90a4b5c9ded7c6b49f8b7c6d646055596268717d88979f9f95806b5d4c3b2a1808000000041220354b60758aabbccfcfbaa58f7a65503a25100000000000000000000000000000000311212e3f4b5c647a899ea7b8c5d0bfb3a19a847460574639484848484848453e3530261808000000000000001a2f44596f8499aec4d9eee3cfbcab8d78624d3b3b3b3b3b3b3b3b3b3b3b3b3b3b39362d1f0f0000000000000000001a2f44596f8499aec4d9eee3cfbcab8d78624d38230d00000000000000000000000000000000000000000000000000000c1c2c3d495a626d716e645c4b43362e2a2a2e394758687d93a7b9cce0cebbaa95806b553d2c1a060000000c21374c61768ca6b7cbdfd2bca7927d67523e2d272a33434c61778a9eb4c9dedfcab49f8b77614c37220c00001025394d5f697e858686868686868686868686868686868686899eb3c9decab49f8d8686857f6a5f4d392510000000000000000000000c1c2b3c4a5b657b8b9fabbccfe2cebbaa9d8776615443301c100000000000000000000000000000152b40556a8095aabfd5ead6c1ac97816c57422c170200000000000000000011273c51667c8c8c8c8c8c8c8c8c8c8c806a55402b150000000000000b20354a6074899eb3c8d1bca6917d859bb1c9c8b49f8b78624d3b2b180500000000000000000000000000000000000000000000000b20354a6073869cb1becee2cdbaa99f8d827a757374777d86929da6b4b49f8d7b65594736251300000012222f354b60758a9fb4cad4c3a48f7a644f3a250f000000000000000000000000000000000311212e3e4b5c647a899ea7b8c5d0bfb3a29a84756157463929333333323029201c14080000000000000002172c41576c8196acc1d6ebebd9c9a5907a65503b2626262626262626262626262624211a0f01000000000000000002172c41576c8196acc1d6ebebd9c9a5907a65503b25100000000000000000000000000000000000000000000000000000000e1f2c3c484d585c594f4a3e30261815151b2a3a4b6074899eb3c9ded8c8b29d87725b4935210c0000000e23384d63788da2c4d4e7ceb9a38e79644e392411171f3347586c8196abc6d7e2cebbaa937e68533e2813000012273d52677d929a9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ea7b9cce0cfbcab9f9b9b9b917c67523c271200000000000000000000000e1e2d3d4b5d677d8d9fb5bccdd8c8b7a5998372604a3e2e1c0c0000000000000000000000000013283d52687d92a7bdd2e7d9c4af99846f5a442f1a000000000000000000000b20364b60747777777777777777777775614b36210c0000000000000e24394e63798ea7b8ccd9c9a58f7b7f94abbccebbaa97816c594834200c0000000000000000000000000000000000000000000000071c304354657b90a0b2c2d2d7c7baab9f978f8a898a8c939ba3b3b7c4bcab9d8877615443301c0700091d2f404c5162788dabbccfcbb7a58c77624d37220d00000000000000000000000000000000000311202e3e4a5c647a899ea6b8c4d0c0b4a29a847561574639291b1d1d1b140b0801000000000000000000142a3f54697f94a9bed4e9e7d2bda8927d68533d281311111111111111111111110e0c070000000000000000000000142a3f54697f94a9bed4e9e7d2bda7927d68523d28130e0e0e0e0e0e0e0e0e0d0b06000000000000000000000000000000000e1e2b353842474439362d1c140800000c1d3144556e8398adc3d8dfcab7a58d78634e38230e0000000f253a4f647a8fa4b9cfe2cdb7a28d78624d38230d04182a3a4f657a8fa8bacde1d8c8ae98836e593928160300172d42576c8297acb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b3b9c5d6e8d9c9bcb4b1b1ac96816c57412c170200000000000000000000000f1f2e3f4d5f697f939eb0becfd4c3b3a1947f695c4b3a2a180800000000000000000000000010253b50657a90a5c9d9ebdcc6b19c87715c3a2a1704000000000000000000081d3144556061616161616161616161615746321e0900000000000014293e53697e93a8c5d5cfbcab8d78788b9fb4cac8b49f8a77624d3b2a180400000000000000000000000000000000000000000000001325364c5e6d8298a4b5c3d0d7c9bcb4acab9f9e9fa9a8b1b5c1cbd5c9b7a6998372604a35200b000f24384c5e666e8096abc9cfc1b29d8774604a35200b0000000000000000000000000000000000000210202e3e4a5c6479889da6b7c4d0c0b4a29a84756157463a291c0c000000000000000000000000000012273c51677c91a6bcd1e6ead5bfaa95806a55402b150606060606060606030000000000000000000000000000000012273c51677c91a6bcd1e6ead5bfaa95806a55402b232323232323232323232320190e000000000000000000000000000000000e1920222d312f24221b10010000000215273754697e94a9bed3e6d4c3a8937d68533e281300000010253a50657a8fa5bacfe3cdb8a38e78634e39230e000c20354b6075899fb4c9deddc8b29d88735745321e0900192f44596e8499aec3c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c9ccd6e4f2e7d9cfcac6c4ae99846f59442f1a00000000000000000000000003112130414f616b8096a0b2c0d0d0bfb49f8b7a6458473625130000000000000000000000000e23384d63788dabbccfe3dec9b49e89745847331f0a00000000000000000002152737444b4c4c4c4c4c4c4c4c4c4c4b46392816030000000000061a2c3d596e8398aec3d8cab49f8a756f8499afc4cdbaa996816c5947341f0c000000000000000000000000000000000000000000000008182f404b6175869ca4b3c0ced8cfcac9bcb4b3b4bac7c6c9d2e0ded0c4b3a1937e69543e29140011263b51667c82969eb0c4bfb2a3947f6a5443301c07000000000000000000000000000000000000000210202d3e4a5b6379889da6b7c4d1c0b4a29a84756158463a291c0c000000000000000000000000000f243a4f64798fa4c6d7e9edd7c2ad98826d58432d1c1c1c1c1c1c1c1c1c18161006000000000000000000000000000f243a4f64798fa4c6d7e9edd7c2ad98826d5843383838383838383838383838352b1e0e00000000000000000000000000000000050b0d181c190f0d0700000000000011263b50667b90a5bbd0e5d6c1ab96816c56412c170100000f24394f64798ea4c7d8eacfbaa48f7a654f3a251000081d31445572879db2c7dcdfcab59f8a76604b36210b001b30465b70859bb0c5dadbdbdbd0c7c4c1c1c1c1c1c1c1c1c1c1c8cbd4e2f2e4d6cdc9c1b19c87715c3a2a1804000000000000000000000a161e212630424a60728298a2b4c1d2cebbaa9d8776615443301c1000000000000000000000000b20364b60758a9fb4cadfe1cdb9a88c76614c37210c000000000000000000000919273136373737373737373737373632281b0b0000000000000c2135495b73889db3c8ddc8b29d8873667c91a6b7cbc7b49f8a77614c3a2917040000000000000000000000000000000000000000000000111e3246576277869aa2b4bbc8cfdad9cfcac8c9cdd7dbdeddd2c9bfb3a69d8a7a644e39240f00172c41576c8196a0b0bcc0b2a1998574604b3625130000000000000000000000000000000000000000000210202d3d4a5b6379889da6b7c3d1c0b4a29b85766158463a291c0c0000000000000000000000000c22374c61778ca8bacde1efdac5af9a85705a37273131313131313131312d2b23180a0000000000000000000000000c22374c61778ca8bacde1efdac5af9a85705a4e4e4e4e4e4e4e4e4e4e4e4e4d483c2b19060000000000000000000000000000000000000307040000000000000000000f24394f64798ea4b9cee3d9c4ae99846f59442f1a0400000d23384d62788da9bacee2d3bda8937e68533a291704021527385b71869bb0c6dbe3cfbcab8d78634d38230e001d32475d72879cb2c7dcefe3d0bfb3afacacacacacacacacacacb2b7c4d4e6d6c6b9b4acac9e89745947341f0a000000000000000001131b28323636434b4c546074849aa3b5c3d4c8b7a5998372604a3e2d1a0a00000000000000000000091d31455673889db2c8dde9d7c6a48e79644f39240f000000000000000000000009151d2022222222222222222222211e160b000000000000000e23384e63788da6b7cbdac5b09a85706074889db3c9cdbaa895806b5847331f0b0000000000000000000000000000000000000000000000031629394859627684969faab5bcc9cad3d3d4d5d5d3d4cbc7c1b5b1a199887a645c4a36220d0014293f54697e94a9bec8b4a299827661554431180800000000000000000000000000000000000000000000010f1f2d3d495b6379889da5b7c3d1c0b4a39b85766158463a291b0b00000000000000000000000a1f34475974899fb4c9def2ddc7b29d8872554446464646464646464646433f3528180600000000000000000000000a1f34475974899fb4c9def2ddc7b29d887263636363636363636363636363625a4835200a0000000000000000000000000000000000000000040a0c12120b090300000e23384e63788da3b8cde2dac5b09a85705b45301b0600000b20354b60758a9fb4c9dfd8c2ad98836d5847331f0f091d31455672879cb1c7dcecdac9a38e79644e39240f001f34495e74899eb3c1d2e3dcc7b3a199969696969696969696969da6b7cbdfcdb9a89e9696968c77614c37220c0000000000000009141d3139454b5454606163616175859ba5b7c6d4c3b3a1947f695c4a38281603000000000000000000021527385b70859bb0c5dae6d1bba6917c66513c271100000000000000000000000002080b0c0c0c0c0c0c0c0c0c0c0c0903000000000000000013283e53687d93a8c4d5d7c2ad97826d556b8095abbccfc6b49e8976614c3929170300000000000000000000000000000000000000000000000b1b2b3b48586173808b989fabb2b6c3bebfc0bfbec3b7b2aca39b918377645c4a3e2d1b070011263c51667b91a6bbc4af9a85786a6054433625130000000000000000000000000000000000000000000000010f1f2c3d495b6378879da5b6c3d1c1b4a39b857661584639291b0a0000000000000000000004182a3a5c71879cb1c6dcf1dfcab49f8a75605b5b5b5b5b5b5b5b5b5b5b585346352310000000000000000000000004182a3a5c71879cb1c6dcf1dfcab49f8c797878787878787878787878787878624d3828150200000000000000000000000000000001080b0f171f212727211e16121111243a4f64798fa4b9cee4dbc6b19b86715c46311c070000081d31445571869cb1c6dbdec9b49f8a76614c3d2d1f1920364b60758a9fb4c9dfecdac9a38e79634e39240e00182e43586d8298a3b5c5d5d9c4af998381818181818181818181879db2c8ddc9b49e8a8181818177624d37220d00000000000009192631414d5760696f75777877747077879da8b9ccd0bfb49f8b7a645645321e1000000000000000000000192e43586e8398adc3d8e8d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000005192b3c586d8298adc2d7d4bfaa947f6a5563788c9fb5caccb9a895806a5746331e0a0000000000000000000000000000000000000000000000000d1d2b3a4755606b78828c969ca5a5a8aaabaaa9a6a59d978f867c6f62594a3e2d201000000e24394e63798ea3b3b8b4a29a8b8072605443301c0c0000000000000000000000000000000000000000000000010f1f2c3c495a6378879ca5b6c3d1c1b5a39b857661574639281909000000000000000000001a2f445a6f8499afc4d9eee2cebbaa8d787171717171717171717171716d64533f2b0b0000000000000000000000001a2f445a6f8499afc4d9eee2cebbaa9f8e8d8d8d8d8d8d8d8d8d8d8d8d8d87725645321d09000000000000000000000000000008141c20242933363c3d3632282726262e3f52677d92a7bcd2e7dac5b09b85705b46301b06000001142637576c8196acc5d5e1cdbaa895806a5b4a3d342c354350657b90a9bacde2e3cfbcab8c77624c37220d000b21364b6075859ba7b8c8d8c6b19c86766c6c6c6c6c6c6c6c6e8398adc3d8c9b49f8a736c6c6c62594834200b000000000001142637444b5f67757e848a8c8d8c89857f7c899eb3c9decebbaa9c8775604b3e2d1b07000000000000000001162b40566b8095abc0d5ead6c1ab96816c56412c170100000000000000000000000000050b0d1314141414140f0d080000000000000000000b2035485a72879db2c7ddd1bca6917c67515a70859aafc5d5c6b39e8976614c392816030000000000000000000000000000000000000000000000000d1c2937444b5a626d7980878c909395959594918d88827a71665e4d483b2d20100200000b21364b60758b939ea7b8b4aa9f958272604a3a2a17040000000000000000000000000000000000000000000000010f1e2c3c495a6278879ca5b6c3d2c1b5a39b857561574537261401000000000000000002172c42576c8197acc1d6ecebd9c8b19c86868686868686868686868686826d58392916030000000000000000000002172c42576c8197acc1d6ecebd9c8bbb4a3a3a3a3a3a3a3a3a3a3a3a3a39f8a75604b36200b0000000000000000000000000008182630353a3a464c51524b45393d3b3c3f4b5d6e8399aec3d8eed9c3ae99846e59442f190400000011263c51667b91a7b8cce0d7c6b49f8b79635b4c483c494d616f849aafc7d7eadfcab59f8b75604b35200b00091e3245566278899eaabbcec9b5a498826d605757575757576b8095abc0d5cdbaa98c776257574d483b2b18050000000000091d314455606c7d88939a9fa9a2a89e9b958b899eb3c8ddd8c8b6a596816c5c4a36221200000000000000000013293e53687e93a8bdd3e8d8c3ae99836e59442e19000000000000000000000000000d18202228292a2a2a2a25221b1002000000000000000d22384d62788da5b7cadfd4c4a38e79644e52677d92a7b8ccccb9a7947f6a5745321e0a000000000000000000000000000000000000000000000000000c1926313c494d5b636b72777b7e7f80807e7b78726c655d514c40342b1d1002000000091e324557707a7e899eabbcbbb4a0937e695847331f0a000000000000000000000000000000000000000000000000000e1e2c3c485a6278879da5b7c4d2c1b4a39a8475605544311d14010000000000000000152a3f546a7f94a9bfd4e9f6decab6a49c9b9b9b9b9b9b9b9b9b9b9b9b88735746321e0a0000000000000000000000152a3f546a7f94a9bfd4e9f6e6d9cecab8b8b8b8b8b8b8b8b8b8b8b8bcab8d78634e38230e00000000000000000000000001142636434b4f5558616767605755525151535d657b8c9fb4cadfebd9c9ac96816c57412c17020000000b20364b6075899eb3c8d9e2cebaa99d88796a62595b5a636d7f94a2b3c7e5ecdac9b09b86715544311d080003162838485a657b8c9fb4becec2b2a0937e685c4a3a414153687e93a8bdd3d7c7a48f79644f4137342b1d0d0000000000091930414b607381929da6afb4bac6b9b4b0ab9f9ea7b8cce0e6d3c3b49f8c7a644f40301d09000000000000000011263b51667b90a6bbd0e5dbc6b09b86715b392916030000000000000000000003111d2b34373d3f3f3f3f3f3a372e20100000000000000012283d52677d92a7c3d4dfcbb7a68b76614b4b6075899eb3c8d6c5b39e8875604b382816020000000000000000000000000000000000000000000000000009141d2c353d494e56596266696a6b6a6966625a574f4b3f382f20180d0000000000031628394a5c64697b8d9fb5cabeb49e8a76614c37210c00000000000000000000000000000000000000000000000000000e1e2b3c48596278879da6b8c6d1c1b4a2998373604b42311f0f000000000000000012273c52677c91a7bcd1e6f9e5d3c2b6b1b0b0b0b0b0b0b0b0b0b0b0a78b76614b36210c000000000000000000000012273c52677c91a7bcd1e6fff6ebe2dfcdcdcdcdcdcdcdcdcdcdcdd9c9a6907b66513b2611000000000000000000000000081c30435460646a70767c7c756f6a676666696f7b889eabbccfe3e3cfbcab917c67523c271200000000091d3145566c8196aabbcee2d8c7b8a69d8b7f777270727882949daec0d0e3e3cfbcab95806a553726140100000a1a2b3c4b5d697e93a0b2c1cfbeb49f8b7a645847363b51667b90a6bbd0d1bca7917c67523c2720180d0000000000021527374d5f6b80969fb3b8c4c9ced7cdc9c9bcb4b3b8c5d5e7f1e3cfbcab9b85705e4d39241000000000000000000e23394e63788ea3c5d5e8dec8b39e89735746321e0a0000000000000000000011212f3b484d5354545454544f4b3e2e1b08000000000005182a3b576d8297acc2d7ddc8b29d8873574645566c8196acc1d1cbb8a6947e695645321e090000000000000000000000000000000000000000000000000000010e19202c36393b484d505355565554514d493c3a372e241d1205000000000000000a1b2d3e4a4e5d6f8499afc4cdb9a8947f6a543828150200000000000000000000000000000000000000000000000000000e1e2b3b485a6278889da8b9c9d1c0b3a197816c604e3d2d1909000000000000000f243a4f64798fa4c7d7e9fcf0e0d3cac6c6c6c6c6c6c6c6c6c6c6c5a38e79634e39240e00000000000000000000000f243a4f64798fa4c7d7e9fcfffee5dad2cfcdcdcdcdcdcdcdcdcdcdbea8937e69533e29140000000000000000000000000b20354b60737a7f858b919289847f7c7b7b7e848f9ea6b8c9d9ebdfcab49f8b77624c37220d00000000021527384d63788b9fb4c7d7e5d5c4b8a99f958b8786888d97a0aebbccdee7d7c6b59f8c79634e39240e000000000e1e2e3f4f606d8298a3b5c4cebaa99d8776615443394e63798ea3c5d6d4bea9947f69543f2a1405000000000000081d314455677c919eb0bdcbd5dfd5cbc8beb8b6b7bac2cacfd9e7ebd9c9b4a2917c66513f2e1b08000000000000000c21364b61768ba7b8cce0e0ccb8a78b76614b36210c0000000000000000000e1f2f3f4b5962686969696969645c4b37220d00000000000b1f34485972879cb2c7dcdac5af9a85705a39384e63798ea3b5c9d5c5b39d8875604b37271502000000000000000000000000000000000000000000000000000000060f1a21232b34373b3e4040403f3c38352c25221b1009000000000000000000000f202d363f54697e93a9bed7c6b09b86715645321d090000000000000000000000000000000000000000000000000000000e1d2b3c495a647a8a9eabbccfd0bfb19f937e685b4a372614010000000000000d22374c62778ca9bacde1f6fef0e5dedcd2cececececececececebba6917c66513c271100000000000000000000000d22374c62778ca9bacde1f6f7e5d5c7bdbab7b7b7b7b7b7b7b7b7b7b7ab96816c56412c17010000000000000000000003192e43586e828f959b9faaa89e99959290919399a1b3b8c5d5e7e0cebdae99836e5947341f0b00000000000a2035495a6d8298a9bacde2e2d5c7bab4aa9f9d9b9da5adb1beccd9e5d8c9baa898836e5b4a36210c0000000000112132424b6074859ba6b8c8c7b7a59a8472604b404b61768ba7b8ccd6c1ac97816c57422c17020000000000000b20364b6074879db2bccde0e2d4c4b8b3a9a3a0a2a5adb4bcc9d5e3e7d1c0b09b85705d4b372209000000000000000a1e32465773899eb3c8dee8d5c5a38e78634e39230e00000000000000000b1b2c3d4b5d65777d7e7f7f7f7f7a644f3a250f00000000000d22374c62778ca4b6caded7c1ac97826c5742364a5b70859bb0c6d6cbb7a6937e695544311d090000000000000000000000000000000000000000000000000000000000060c0e18202226292a2b2b2926232019100e08000000000000000000000000010f1a263b50657b90a5bad0cab49f8a75604b36200b000000000000000000000000000000000000000000000000000000000e1e2c3c4a5c667c8d9fb5c1d2cebdb49f8b79635544311d0b0000000000000b1f34485974899fb4c9def4f9e8d8cac1bdb9b9b9b9b9b9b9b9b9b9a9947e69543f291400000000000000000000000b1f34485974899fb4c9def4eddac7b7aaa4a2a2a2a2a2a2a2a2a2a2a2a299846f59442f1a04000000000000000000000014293e53697e93a8b0b4bbb9b4afaaa7a6a6a8afb3bfcbd5e3e1d1c2b19f8f7a644f3b2a1805000000000006192c3c4d62788b9fb4c2d3e6e5d7cdc8bbb4b2b0b2b7c3c5cee1ded3c7baab9f8a79634e3d2d1a07000000000003141e3245566278889eaabbcec3b3a195806a5e4c465773899eb3c8d9c4ae99846f59442f1a0000000000000215283853687d92a5b6cadae6d4c3b7a69d938d8b8c90989fabb8c5d5e5ddc9b5a38f7a654f37271501000000000000031629395b71869bb0c6dbe5d0bba6907b66513b26110000000000000003162939495b657b8a92949494948e79644f39240f000000000012273c52677c91a7c3d3e6d4bea9947f69543f2d3d53687d93a8b9cdd4c4b29d8774604b3726140100000000000000000000000000000000000000000000000000000000000000050b0d111415161514110d0c0600000000000000000000000000000000000e24394e63798ea3b8cecebbaa8d77624d38220d00000000000000000000000000000000000000000000000000000000000e1e2d3e4c5e6b8095a3b5c9decdbaa99b8673604b39281603000000000005182a3b5c72879cb1c7dcf1f0dccabaada8a3a3a3a3a3a3a3a3a3a3a396816c57412c17020000000000000000000005182a3b5c72879cb1c7dcf1e6d2bdaa998f8d8d8d8d8d8d8d8d8d8d8d8d8d86715c47321c0700000000000000000000000d23384d62788da4b6cacecdc9c4bfbcbbbbbec4c7d0e0ded7cdc0b4a397816c5c4b371d0d000000000000000e2035495a6b8095a4b6c8d8eae9e1d9cecac7c5c7cad4d1d7cdc9c2b6a99f8d7c665b49351f0f0000000000000002162838485a657b8b9fb4bdcebfb59f8d7c665a485c71869bb1c6dbc6b19c87715c3a2a18040000000000091d3245566f8499aec3d3e6dfcbb7a59d887e7876777b828c9ea7b8c7d8e4d2c1ac97826c5544311d0800000000000000192e44596e8399aec3d8e8d3bda8937e68533e291300000000000003111e3246576379899ea8a9a9a99b86715c4a36220d0000000004172a3a576c8196acc1d6ebd9c8a6917b66513c26364b6176899eb4c9decab7a5927d685544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca2b7ccd8c8a38e79644e39240f00000000000000000000000000000000000000000000000000010200000010202f404b6073859bb1bfd0d7c7b5a3937e685746321e090000000000001a2f455a6f849aafc4d9efead5c1ad9c928e8e8e8e8e8e8e8e8e8e8e8e836f59442f1a0400000000000000000000001a2f455a6f849aafc4d9efe4cfbaa48f7b7878787878787878787878787878624d38220d0000000000000000000000000c2035495a72879cb2c7dce1ded9d4d1cfd0d3d4d4d2d3cac7bab4a29a8575604b3e2e1b000000000000000006192b3c4b6074869caabbcee2edf6e6d3c3b6b2b3b9c5bcc7bab4afa49c8b7e685e4d3d2c1a0100000000000000000a1a2b3c4b5d697e939fb1c1cfbcab9e89786256596e8499aec3d9c9b49e89745847331f0a00000000000b20364b6075899fb4c9dee8d6c6b29d877869636162656d7a899ea9bacee2dec8b39e8974604b35200b00000000000001172c41566c8196abc1d6ead5c0ab95806b56402b16010000000000112232434b6175869ca7b9c6b9a8937e68533e2d1b07000000000a1f33475871869cb1c6dbe2cebbaa8e78634e39233246576d8297acc2d2d4c3b29c8774604b362614010000000000010a10122020202020202020202020202020202020202020202020202020202020202020201f1d170e02000000000000000000000000000c22374c61778ca1b6cccfbaa58f7a65503a25100000000000000000000000000000000000000000070b0d11151717120b0801121d314455647a8fa1b3c7dbd2c2b39e8875614b36210e000000000002172d42576c8297acc1d7ece7d2bda8927e79797979797979797979797979634d38230e000000000000000000000002172d42576c8297acc1d7ece4cfbaa58f7a65626262626262626262626262625a4834200b00000000000000000000000006192c3c566c8196abc7d7e9ddcfc6c3b9bcbebfbfbdc3b6b2a99f9584766156453220100000000000000000000e1e324556647a8c9fb4bfcfe1f1dfcab6a59c9ea7a5a6a6a99f9a91867a68604e40301f0e000000000000000000000d1d2e3f4f606d8197a3b4c4c9b8a79b857460566c8196abc1d6cdb9a88c77614c37220c00000000000e23394e63788ea8bacde1e1ccb9a8917c67594e4b4d505d647a8b9fb4c8d8e0ccb8a78f7a644f3a240f0000000000000014293e54697e93a9bed3e8d8c3ad98836e58432e1900000000000e1e2f404f616e8398a4b6c5c9b49e8a76614b36211000000000000c21374c61768b9fb5cadfdfcab49f8a75604b362029394f647a8fa4b5c9decab6a5927d675443301c080000000005131e252835353535353535353535353535353535353535353535353535353535353535353534322b2012020000000000000000000000000c21374c61768ca1b6cbd0bba6907b66513b261100000000000000000000000000000000000808131c2023262a2c2c27201d14091527374a5c6f8499aec4d5e0cbb8a6937d68533c2c19060000000000152a3f546a7f94a9bfd4e9e7d2bca7927d676464646464646464646464635b4935210c000000000000000000000000152a3f546a7f94a9bfd4e9e7d2bca7927d67524d4d4d4d4d4d4d4d4d4d4d4d483c2b19050000000000000000000000000011263b50667b90a9bacde1cfbfb2aea4a7a9aaaaa8a6a49c968a807461584738281602000000000000000000021628384a5c697f94a1b3c3d3e4dcc7b29c87898e9091908e8a847c73645c4e42312212000000000000000000000000112132424b6074859ba6b7c8c5b5a397816c5f697e94a9bed3d7c6a48e79644f39240f000000000010253a50657a8fa5c6d7e9dec9b39e8975604b3b36373f4b5c6b8095aabbcee2d6c5a9947f6a543f2a150000000000000011273c51667c91a6bbd1e6dac5b09b85705b382715020000000a1b2c3c4c5e6a7f94a0b2c2d2c2ac97826d5746331e0a000000000011263c51667c91abbccfe3dcc7b29d87725645311d22374b5c71869cb1c7d7d3c3b19c8673604b36251300000001132330393d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49463d30200e0000000000000000000000000c22374c61778ca1b6ccd1bca6917c67513c271200000000000000000000000000000002101b22253035383c3f41423c3531261909192e3e50657b90a6b8cbe0d5c5b19c86715a4935200c000000000012273d52677c92a7bcd1e7e9d4bfaa947f6a554e4e4e4e4e4e4e4e4e4e4d493c2c190600000000000000000000000012273d52677c92a7bcd1e7ead4bfaa957f6a55403838383838383838383838342b1d0d00000000000000000000000000000b21364b60758a9fb4c9dec6b2a1998f9293949493918d8780776b6056473a291a0a00000000000000000000000a1a2d3e4f616e8399a4b6c6d7ddc8b39d8878797a7c7b79766f6760544b3e3124130400000000000000000000000003141d3245566277889daabbcec1b19f927d67677c91a6bcd1d1bca6917c67513c2712000000000011273c51667c91a6bbd1e6dac5b09a857055443121222e3e4c62778b9fb4cadfd8c2ad98836d58432e18030000000000000f24394f64798ea4c6d6e9ddc8b29d88735645311d09000003162839495a667c8d9fb4bfcfc9b5a48f7a644f392917030000000003172939566b8196abc9dacfcfc4af99846f5a3827151b2e3e54697e93a9bacdcfcab6a4917c675443301c0700000a1e30414d526060606060606060606060606060606060606060606060606060606060606060605f5a4e3d2b170000000000000000000000000d22374c62778ca1b7ccd2bca7927d67523d281200000000000000000000000000000010212e3736434a4d51545657524b443727191020354b6074889eb3c8dddec9b5a48d78634d38230e00000000000f253a4f647a8fa4c7d7eaecd7c2ac97826d574239393939393939393938352c1e0e000000000000000000000000000f253a4f647a8fa4c7d7eaecd7c2ac97826d57422d2323232323232323232220190d000000000000000000000000000000091e3245566f8499afc4d8c3ae99837a7c7e7f7f7d7c78726b62594b4538291c0c00000000000000000000000000102032434c6176869ca8b9cde0cbb8a69c8777656766646056524b43362e2013060000000000000000000000000000021528384859657b8b9fb4bdcebdb49f8a7964798ea4c5d5d3bea9947e69543f2914000000000011263c51667b91a6bbd0e6d8c3ae99836e59372715101f34485970859aafc5dadbc6b09b86715b46311c000000000000000c21374c61768ca8b9cde1dfcab59f8a75604b36200b0000091e3245576278899eabbcc2c2c2b19c86715c4b371b0b00000000000a1e33465771869bb0b9b9b9b9c0ac96816c57412c171021374c61768a9fb4bfb9b9c2b19b8673604a35200b00001025394d5f67757575757575757575757575757575757575757575757575757575757575757575746c5a46321d0000000000000000000000000d22374d62778ca2b7ccd2bda8937d68533e28130000000000000000000000000000081b2e3f4b4f546062666a6c6c676055443727151d3144556e8398aec3d8e5d2c2a8927d68533d281300000000000d22374d62778ca9bacde2efd9c4af9a846f5a362524242424242424242321190e00000000000000000000000000000d22374d62778ca9bacde2efd9c4af9a846f5a3625130d0d0d0d0d0d0d0d0d0b05000000000000000000000000000000000316283854697e93a9c3d4c8b29d887367696a6a6866635a564c483b31271a0c000000000000000000000000000002151f33465863798a9eb4bccdd5c4b6a59b857560554f4b4538353026181002000000000000000000000000000000000a1a2b3b4b5d687e939fb1c0cdbaa99c8776768ba7b8ccd6c1ac96816c57412c17020000000010253a50657a8fa5c6d6e8d9c3ae99846e59442f1905182a3b566b8095abc0d5ddc8b39e88735e492614010000000000000a1f33475874899eb4c9dee3cfbcab8d78634d38230e00071a2d3d4b6075869ca7acacacacaca4937e68533e2e1b0000000000000c21364b61768b9fa4a4a4a4a4a4a2927d68533d28130a1f3347586d8297a1a4a4a4a4a4a3917c6651372715010012283d52677d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a745f49341f0000000000000000000000000d22384d62778da2b7ccd3bea9937e69543e291400000000000000000000000000000e22374b5d657074787b7f81817c73605544311d142637556a7f94aabfd4e9d7c2ad97826d58422d1800000000000b20354a60758a9fb4c9dff1dcc7b29c87725443301c0f0f0f0f0f0f0f0e0c060000000000000000000000000000000b20354a60758a9fb4c9dff1dcc7b29c87725443301c070000000000000000000000000000000000000000000000000000000e23384e63788da5b6cacbb7a68e796354555553514d493c37342b1d150a000000000000000000000000000000000417293a4a5b677d919eb0c0d1d3c3b5a3998373604b433228201c1408000000000000000000000000000000000000000d1d2e3f4e606c8197a2b4c4c7b6a5998373889eb3c8d9c3ae99846e59442f1900000000000d22384d62788da8b9cce1dac5b09a85705b3d2c1a0614293e53697e93a8bed3dfc9b49f8a745544311d0800000000000004172a3a5c71879cb1c6dcecdac9a5907a65503b2510000c21364a5b6d839797979797979796938674604b36201000000000000011263b50667b8f8f8f8f8f8f8f8f8d8475604b36210b04172a3a4c6176838d8f8f8f8f8f8f8f85705544311d080012283d52677d929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e89745f49341f0000000000000000000000000c22374c61778ca1c7d7d4bfaa947f6a553f2a15000000000000000000000000000010253a4f657a85898d91949697918373604b3b2a18283e53687d93a8bdd2e8d9c4af9a846f5a452f1a0000000000071c30435472879cb2c7dcf1dfc9b49f8a75604a35200f0f0f0f0f0f0f0f0f0f0f0f0f0c0a04000000000000000000071c30435472879cb2c7dcf1dfc9b49f8a75604a35200f0f0f0f0f0f0f0f0f0f0f0f0f0c0a040000000000000000000000000c2135495b72879db2c7d4c4a9947f6954393f3e3c38352c22201815110b09020000000000000000000000000000000b1b2d3d4d5f6b8096a2b4c3d4d1c1b3a197816d61504231221201000000000000000000000000000000000000000000102131424b6074849ba6b7c7c3b3a1947f849aafc4dac6b19c86715c3a291704000000000b20354b6074899eb3c9deddc8b39e88735b4935210c12283d52677d92a7bcd2e2cdbaa98a75604b35200b000000000000001a2f445a6f8499afc4d3d3d2bda8927d68533d2813000e24394e63798182828282828282817e76615645321d090000000000000d22374c62777a7a7a7a7a7a7a7a7870605745321e09000c1f334658616f78797a7a7a7a7a7a7a73604b35200b0012283d52677d92a7b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b49e89745f49341f0000000000000000000000000b20364b60758ba9bacdd6c0ab96816b56412c1601000000000000000000000000000c22374c61778a9ea8a6a9abaca1947f6a5947341f273c52677c91a7bcd1e6dbc6b09b86715b46311c0000000000001325365a6f849aafc4d9efe2cdbaa98c77624c372424242424242424242424242424221f180c0000000000000000001325365a6f849aafc4d9efe2cdbaa98c77624c372424242424242424242424242424221f180c0000000000000000000000061a2c3d576c8197acc7d8c4af9a846f5746322d2d2d2d2d2d2d2c2a26201d150a0000000000000000000000000000000f1f30414b6073849aa5b7c7d7d0bfb19f95806a604e402f201000000000000000000000000000000000000000000002141d3145566277889da9bacebfb49f8c859bb0c5dbc9b39e89745846331f0a00000000081c3043546f8499aec7d7e0ccb8a78d78634e3a2a1813283e53687d93a8bdd2dfc9b49f8a745544311d0800000000000002172c42576c8197acbdbdbdbdbdaa95806a55402b15000c21364a5b636d6d6d6d6d6d6d6d6c69615846382815020000000000000b1f344759626464646464646464635b4b4539281603000417293a464c5a626464646464646464605544311d080012283d52677d92a7bccaccc3bfbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcc5c8d1c9b49e89745f49341f000000000000000000000000091d31455674899fb4c9d7c2ad98826d58432d1800000000000000000000000000000b1f3447596f849aafc3bfc1bfb49e8a77624c4231283853687d92a8bdd2e7dcc7b29c87725d47321d000000000000182d42576d8297acc2d7ecead7c7a48f7a644f3a393939393939393939393939393937342a1c0c0000000000000000182d42576d8297acc2d7ecead7c7a48f7a644f3a393939393939393939393939393937342a1c0c000000000000000000000011263c51667b91a9bacec9b49f8a76614b4242424242424242413f3b3632281a13050000000000000000000000000001131d3144556177879da9bacde2cebdaf9e927e685e4c3e2e1e0e000000000000000000000000000000000000000000021527384859647a8b9fb4bdcebbaa9f9ba3b4c8ddccb9a78b76614c36210c000000000114263653687e93a9bacde2d5c5aa95806b58473629252f40566b8096abc0d5ddc8b29d88735d3726140100000000000000152a3f546a7f94a8a8a8a8a8a8a897826d58422d1800071a2d3d4a4e575757575757575757544c463a291a0a0000000000000005182a3b474c4f4f4f4f4f4f4f4f4e493d32281b0a0000000b1b29333c494d4f4f4f4f4f4f4f4f4b44372715010012283d52677d92a7bcccbcafaaa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7b0b4c0c9b49e89745f49341f000000000000000000000000021527385d72879db2c7d9c4af9a846f5a3a2917040000000000000000000000000004182a3b52687d92a5b7cad6cdb9a897816c604b443745566b8196abc0d6ebdbc5b09b86705b46311b000000000000152a3f556a7f94aabfd4e9e6d1bca7917c67524f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c473a2a180400000000000000152a3f556a7f94aabfd4e9e6d1bca7917c67524f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c473a2a1804000000000000000000000c21364b61768a9fb4c9cebaa9917b665757575757575757575655514b45383023130400000000000000000000000000011426374759647a8b9fb4bdcedbccbcb49f8c7c665c4a3c2c1d0c0000000000000000000000000000000000000000000a1a2b3b4b5c687e929fb1c0c8bbb4b0b4c1d1e4d6c5a38e79644e39240f00000000000c21374c61778a9fb4c7d7dec8b39e8976615446393a3e4c5e71869bb1c6dbdbc6b19b86715c46311c000000000000000012273c52677c91939393939393939384705a45301b00000f1f2d36394242424242424242413e3633291c0c0000000000000000000d1d2a34373a3a3a3a3a3a3a3a38352c1e160a00000000000b171f2b35383a3a3a3a3a3a3a3a3531271909000012283d52677d92a7bcc3af9e9591919191919191919191919191919191919191919aa2b4c9b49e89745f49341f00000000000000000000000000192e44596e8399aec3d8c7b19c87725846331f0e0c060000000000000000000000000c20364b6074879db2c1d2d7c6b19f927e69605555556075879db2c8ddeed9c4ae99846f59442f1a00000000000012283d52677d92a7bcd2e7e9d4bfa9947f6a64646464646464646464646464646464615947341f0a0000000000000012283d52677d92a7bcd2e7e9d4bfa9947f6a64646464646464646464646464646464615947341f0a00000000000000000000091e3246576f849aafc4d8c7ac97816c6c6c6c6c6c6c6c6c6c6c6a6660564d41302212000000000000000000000000000009192a3a4a5c687e929fb1c1d1e2cebbaa9f8a7a645a493b2a1b0b0000000000000000000000000000000000000000000d1d2e3e4e606c8197a2b4c4cecac5c8d1dfe6d0bba6917b66513c261100000000000a1f3347586c8297a9bacde0ccb8a799837261575150525c667c91a3b5c9ded7c7ac97826c57422d1702000000000000000d22374d62777e7e7e7e7e7e7e7e7e7d67523c27120000010f1a21242d2d2d2d2d2d2d2d2c29211f170c00000000000000000000000d181f22252525252525252523211a0e0300000000000000040e1920232425252525252525201d150900000012283d52677d92a7bcbfaa957f7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c849ab0c5b49e89745f49341f00000000000000000000000000152a3f556a7f94aac3d3cab49f8b76614c382a2321190e0000000000000000000000091d314556687d92a3b5c6d6cebdb49f8c7e746c6a6c748197a6b7cbdfe7d4c4aa95806b55402b1600000000000010253a4f657a8fa4c8d8eaedd8c3ad98827a7979797979797979797979797979797977614c37220c0000000000000010253a4f657a8fa4c8d8eaedd8c3ad98827a7979797979797979797979797979797977614c37220c000000000000000000000316283954697f94a9c3d4c8b39e8881828282828282828282817f7b75675f4d4030190900000000000000000000000000000c1c2d3e4e606c8197a3b4c4d5d9c8baa89e887863594739281909000000000000000000000000000000000000000000102031424b6074849aa6b7c7d7dbdde4efe8d3bea9937e69543e2914000000000004172a3a4d62788a9fb4c1d1d5c5b2a19882766b6665676d7a899eb3c2d2e1cdbaa9917c67523c271200000000000000000b2034485962686868686868686868675f4d39251000000000070c0e181818181818181817140c0a0400000000000000000000000000050b0d0f0f0f0f0f0f0f0f0e0c060000000000000000000000060b0d0f0f0f0f0f0f0f0f0b08010000000012283d52677d92a7bcbaa48f7a676767676767676767676767676767676767676d8298adc2b49e89745f49341f0000000000000000000000000010253a50657a8fa5b6cacebbaa927d6756473b38352c1e0e00000000000000000000021527384b6073859ba8b9ccdacebbaa9f9387817f8187979fb1c4d4e6dfcbb7a68f7a65503a25100000000000000d22384d62778daabbcee2efdac6b2a0988e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e7f6a55402a15000000000000000d22384d62778daabbcee2efdac6b2a0988e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e7f6a55402a1500000000000000000000000e23394e63798ea5b7cbcbb8a69e97979797979797979797969490887d675e4c372614010000000000000000000000000000102031424b6074859ba6b8c8d8d7c6b8a69d877761574637271501000000000000000000000000000000000000000002131d3144556277879da9bacde1ebf8ffebd6c0ab96816b56412c160100000000000c2035485a6a7f95a3b5c4d4cfbfb2a09888807c7a7c828c9ea7b8cce0d7c7b49f8a77614c37210c000000000000000005182b3b484d535353535353535353524d41301d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a655252525252525252525252525252525252586d8398adc2b49e89745f49341f000000000000000000000000000b20354a6073879db2c4d4c8b19c86746259584d493c2c1909000000000000000000000a1c30435463798a9eb4bcc9d9c8bbb4a59d9795969da5b1bdcee2e3d2c2b29d8874604b36200b0000000000000b20354b60758a9fb4c9dff4e2cfbeb2ada4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a497826d58422d18000000000000000b20354b60758a9fb4c9dff4e2cfbeb2ada4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a497826d58422d1800000000000000000000000c21364a5b72889db2c7d5c4b8b3acacacacacacacacacacabaaa79e8d7c665544311d08000000000000000000000000000002131d3145566278889eaabbcee2d5c5b6a59b8575615544311d15060000000000000000000000000000000000000000021527374759647a8b9fb4bdcddeeeffeed8c3ae99836e59442e1900000000000006192b3c4b6073859ba6b7c4d2cfbeb2a69d95918f92989faab8c5d5e2cdbaa997816c5847331f0a0000000000000000000d1d2b34373e3e3e3e3e3e3e3e3e3c393023120100000000000000000000000000000000060c0e20202020202020202020200a0400000000060c0e20202020202020202020200a0400000000000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c43586d8398adc2b49e89745f49341f00000000000000000000000000071c3043546a7f94a6b7cbc9b6a4998377716e635b493726140100000000000000000001142636495b677d919fabbbc8d3cec3b6b2acaaacb2b6c3cedbe1d4c5b5a4937e695544311d08000000000000081c30435472879db2c7dcf2eddccfc6c3b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9af9a85705a37271502000000000000081c30435472879db2c7dcf2eddccfc6c3b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9af9a85705a3727150200000000000000000000071a2d3d576c8297acc8d8d5cbc8c1c1c1c1c1c1c1c1c1c1c1c5b8ab9d8774604b35200b000000000000000000000000000000021527384859657b8c9fb4becfe0d3c3b5a3998373604b4433241404000000000000000000000000000000000000000009192a3b4a5c687d929fb0c0d1e1f1f0dbc6b09b86715b392916030000000000000e1d3144556278889da6b5c2cfcfc4b7b3aba6a5a7adb4bbc8d5dfcdbeb49f8b78624d3a2a1704000000000000000000000d18202229292929292929292927251d1205000000000000000000000000000000000e19212335353535353535353535351f170c00000e19212335353535353535353535351f170c000000000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a272727272727272727272727272e43586d8398adc2b49e89745f49341f00000000000000000000000000001325364c6176889db2bbcec2b3a1998b878379635544311d080000000000000000000008182c3d4d5f697f8d9faab6c2ccd4cac7c1bfc1c7cad3e0decfc3b7a79c8674604b37271502000000000000011426365a6f859aafc4dae1e1e1e2dad8cecececececececececececececec7b29d88725544311d08000000000000011426365a6f859aafc4dae1e1e1e2dad8cecececececececececececececec7b29d88725544311d08000000000000000000000011273c51667c91aabbcee2e0ddd7d7d7d7d7d7d7d7d7d7d6d5c9b7a58f79644f3a240f000000000000000000000000000000000a1a2b3b4b5d697f94a0b2c2d0ddd2c1b3a197816d6250423122120200000000000000000000000000000000000000000d1d2d3e4e5f6c8196a2b4c3d4e5e0dec8b39e88735746321e0a0000000000000115273748596379889ca4b5bcc9d1cbc8c0bbbabcc2caced9d3cabcb0a0937e685a49351c0c000000000000000000000000050b0d13131313131313131312100a01000000000000000000000000000000000e1e2c35384a4a4a4a4a4a4a4a4a4a4a332a1c0c0e1e2c35384a4a4a4a4a4a4a4a4a4a4a332a1c0c0000000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251212121212121212121212182e43586d8398adc2b49e89745f49341f0000000000000000000000000000081f334658667c909db4bbc8bfb3aa9f9c988773604b35200b00000000000000000000000f1f30414f61697e8c9ca4b3b8c5c9cdd7d4d5d6d4d6ccc9bfb2a59d89786256453119090000000000000000182d42586d8297adc2cccccccccccccccccccccccccccccccccccccccccccab49f8a75604b36200b00000000000000182d42586d8297adc2cccccccccccccccccccccccccccccccccccccccccccab49f8a75604b36200b00000000000000000000000c21364c61768a9fb4c9cbcbcbcbcbcbcbcbcbcbcbcbcbcbcbd4c3a7927d68523d281300000000000000000000000000000000000d1d2e3f4f616e8298a3b3c0c8cacfbfb19f95806b604e402f2010000000000000000000000000000000000000000000102031414b6073849aa5b7c7d7cbcbccb8a78b76614b36210c0000000000000009192b3b4a5b637886979fabb4c0c8cbd5d1cfd1d5d3d2c9c3b6b29e96826d604e3c2c19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c495e606060606060606060605e473a2a17192c3c495e606060606060606060605e473a2a170400000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f00000000000000000000000000000417293a4c5e6a7f929faab5bcc8bbb4b1a58e79634e39240e000000000000000000000001132332424f60687b86959ea7afb4bac7bec0c0bfc5b9b3ada199877a645a49382715000000000000000000152a40556a7f95aab6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6bcab8d78624d38230d00000000000000152a40556a7f95aab6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6bcab8d78624d38230d00000000000000000000000a1e33465770859aafb6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6aa95806a55402b15000000000000000000000000000000000000112132434b6075859aa2adb3b4bcb6beaf9e937e685e4c3e2e1b08000000000000000000000000000000000000000002131d3144556177879da9bab6b6b6b6c5a38e78634e39230e00000000000000000d1d2d3d4a5a6275818d9aa2acb3b7c4bfc0c1c0bec1b5b0a59d918072604b42311e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b7075757575757575757575705847331f2135495b7075757575757575757575705847331f0a00000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f0000000000000000000000000000000c1c2f4050616a7e8c989fabb1b4bbc3a6907b66513b261100000000000000000000000005142432414e5d65747f89929a9fa9a8a9ababa9a8a79e988e8376645c4a3c2b1a0a00000000000000000012283d52677d92a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1907a65503b25100000000000000012283d52677d92a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1907a65503b2510000000000000000000000003172939546a7f94a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a098826d58432d1800000000000000000000000000000000000003141e32455761768490989d9faba0a0a0a09f8c7c665c4b37220d000000000000000000000000000000000000000000011527374759647a8b9fa0a0a0a0a0a0a0907b66513b26110000000000000000000f1f2d3c4957606c7a848f979da6a6a9abababa9a6a39b93877d6b6054433024140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788a8a8a8a8a8a8a8a8a8a76614c372123384d63788a8a8a8a8a8a8a8a8a8a76614c37210c00000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f000000000000000000000000000000001122334350606879838c969b9faaa5a5937e69533e291400000000000000000000000000061423313f4b56606a757d85898f9294959694928f8983796e61584a3e2d1e0e0000000000000000000010253a50657b8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7d68533d28130000000000000010253a50657b8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7d68533d28130000000000000000000000000f24394e647a8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b84705b46301b00000000000000000000000000000000000000031628394758616f7b83888a8b8b8b8b8b8b8b8a7a644f3a250f0000000000000000000000000000000000000000000009192a3a4a5c677d8b8b8b8b8b8b8b8b8b7e68533e2913000000000000000000010f1e2c39454b5c646f7a81888d919495969594918c867e74675f4b43362614060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9f9f9f9f9f9f9f9f8e79634e392420364b60758a9f9f9f9f9f9f9f9f8e79644e39240f00000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f0000000000000000000000000000000004152533424e5b636e7980868a8d8f9091806b56412b1600000000000000000000000000000513212e38454b5660686f75797d7f80817f7d7a746e645c4c473a2d201000000000000000000000000b20354b60737777777777777777777777777777777777777777777777777777777775604b36210b000000000000000b20354b60737777777777777777777777777777777777777777777777777777777775604b36210b0000000000000000000000000d21364a5c707676767676767676767676767676767676767676767675604b36210b00000000000000000000000000000000000000000a1b2a3a474c5e666e7375767676767676767674604b36200b00000000000000000000000000000000000000000000000c1c2d3e4d5f6776767676767676767674604b36200b00000000000000000000000e1b28323e4b4f5c646c73787c7f8081807e7c77716860554d413026180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d32455673889db3b5b5b5b5b5a6907b66513b261d32455673889eb3b5b5b5b5b5a6917b66513c261100000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f0000000000000000000000000000000000071523313d4a4e5b636b7176787a7b7c7a644e39240f00000000000000000000000000000002101a283238454b5255606468696b6b6a686460554e4a3e332a1c10020000000000000000000000081d3144556061616161616161616161616161616161616161616161616161616161605645321e0900000000000000081d3144556061616161616161616161616161616161616161616161616161616161605645321e09000000000000000000000000071a2d3e4a5761616161616161616161616161616161616161616161605745321e090000000000000000000000000000000000000000000c1c2a33404c515855606161616161616161605645321d09000000000000000000000000000000000000000000000000102030414d57616161616161616161605544311d080000000000000000000000000a161e2e373e4a4f575b63676a6b6c6b69666259534b4437301c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528385b70869bb0c5cacacabda8937d68533e281528385b71869bb0c6cacacabea9937e69543e291400000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f00000000000000000000000000000000000005131f2d363d4a4e56566063656666645c4a36220d00000000000000000000000000000000000a151d28323637444b4f5354565654534f4b4437362d1f180c0000000000000000000000000001142637444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b45382816030000000000000001142637444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4538281603000000000000000000000000000f202d39464b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4539281603000000000000000000000000000000000000000000000c171f2f383b37444b4b4b4b4b4b4b4b4b4b45382815020000000000000000000000000000000000000000000000000213233039464b4b4b4b4b4b4b4b4b4b44372715020000000000000000000000000003101b222e363a3d494e515456565654514c473b36312719120100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aec3d8dfd5c0aa95806b55402b192e44596e8399aec3d8dfd6c0ab96816b56412c1601000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f00000000000000000000000000000000000000010f1a212d363938454b4e5050514e4a3e2d1b07000000000000000000000000000000000000020a161e212731363a3d3f40413f3d3a353126221b10040000000000000000000000000000000919263135373737373737373737373737373737373737373737373737373737373632281a0a0000000000000000000919263135373737373737373737373737373737373737373737373737373737373632281a0a0000000000000000000000000000010f1b2932363636363636363636363636363636363636363636363632281b0a00000000000000000000000000000000000000000000000004121d242627313536363636363636363632281a0a000000000000000000000000000000000000000000000000000005131b283236363636363636363636312719090000000000000000000000000000000008101b22242c35383c3f4041403f3c37342a201d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8196abc0d6ebd7c2ad97826d58422d182c41566c8196abc1d6ebd8c3ae98836e59432e1900000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f000000000000000000000000000000000000000000070f1a2124283236383a3b3c39362d201000000000000000000000000000000000000000000002090b151d2024282a2b2c2a2824201d14090700000000000000000000000000000000000009141d2022222222222222222222222222222222222222222222222222222222211e160a000000000000000000000009141d2022222222222222222222222222222222222222222222222222222222211e160a00000000000000000000000000000000000b161e21212121212121212121212121212121212121212121211e160a000000000000000000000000000000000000000000000000000000090f11151d202121212121212121201d150a00000000000000000000000000000000000000000000000000000000000b161e212121212121212121201d150900000000000000000000000000000000000000070d0f1a2123272a2b2c2b2926221f180d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8bed3e8dac4af9a856f5a45301a293e54697e93a9bed3e8dbc5b09b86705b38281502000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f0000000000000000000000000000000000000000000000070c0e161e212325262624221b100200000000000000000000000000000000000000000000000002080b0f1314161615130f0b080100000000000000000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b09030000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b090300000000000000000000000000000000000000030a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b09030000000000000000000000000000000000000000000000000000000000000001080b0c0c0c0c0c0c0c0c0b09020000000000000000000000000000000000000000000000000000000000000003090c0c0c0c0c0c0c0c0c0b08020000000000000000000000000000000000000000000000060c0e121516171614110d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbd0e6dcc7b19c87725c3a2a17273c51667c91a6bbd1e6ddc8b39d88735645321d09000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a251000000000000000000003182e43586d8398adc2b49e89745f49341f000000000000000000000000000000000000000000000000000002090b0e1011110f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c6d6e8dec9b49f89745847331f24394f64798ea4c7d7e9dfcab59f8a75604b36200b000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a25100d0d0d0d0d0d0d0d0d0d182e43586d8398adc2b49e89745f49341f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f190b090200000000000000000000000000000000000000070d0f17171717171717171717171717100e09000000000000000000000000000000050b0d17161614120e0b080100000000000000000000000000000000000000000002090b1216191b1b1918140e0c06000000000000000000000000000000000000000000050b0d0d0d0d0d0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0f121212120d0b050000000000000000000000000000000000040b0c111314161514120f0b0902000000000000000000000000000000000000000000000001080b0e121314161514120e0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8b9cce1e1cdbaa98c76614c372122374c61778ca9bacde1e3cfbcab8d78634d38230e000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a252222222222222222222222222e43586d8398adc2b49e89745f49341f00000000070d0f202020202020202020202020202020202020202020202020200f0d08000000000000000000000003101b22242e201d150a0000000000000000000000000000000002101b22242c2c2c2c2c2c2c2c2c2c2c2c2c26231c11030000000000000000000000000d1820222c2c2b2a2723201c1408070000000000000000000000000000000000000a161e21272c2f30302f2d2923211a0f080100000000000000000000000000000000000d19202223232322201d150a07000000000000000000000000000000000000000000000000000000000000000000000000010b161e2125272727272220180d00000000000000000000000000060c0e181f2226282a2b2a292724201d150c0a040000000000000000000000000000000000000409151d202427282a2b2b292724201c140b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb4c9dee9d7c7a38e79644e39241f34475974899fb4c9deecdac9a5907a65503b2510000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f3a373737373737373737373737373743586d8398adc2b49e89745f49341f000002101b22243535353535353535353535353535353535353535353535353525221b100200000000000000000b161e2d363a433632281a0a00000000000000000000000000000010202d3639414141414141414141414141413b382f211100000000000000000000000d1d2b34374141403f3c39353026211a0f050000000000000000000000000000000a1a2832363c4144454544423f39362c201c14080000000000000000000000000000000d1d2b343838383837363228221b100200000000000000000000000000000000000000000000000000000000000000000008141c2932363a3c3c3c3c37342b1d0d00000000000000000000060e1921232a34373b3d3f40403f3c39363127211f170c060000000000000000000000000000000c181f273135393c3e3f40403f3c39353026201c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5c71879cb1c6dce5d0bba6907b66513b26182a3b5d72879cb2c7dce7d2bda7927d68523d2813000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a654f4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d586d8398adc2b49e89745f49341f000010202d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3a372e201000000000000003111b29323e4a4f584b453828150200000000000000000000000000071b2d3e4a4f56565656565656565656565656504c402f1c0900000000000000000005182b3b484c56565654524e4b4336362d20190d0000000000000000000000000002162838454b5256595b5b5957544e493d353026180e0000000000000000000000000005192b3c484d4d4d4d4d4b4538362d201001000000000000000000000000000000000000000000000000000000000000000818263039464b4f515151514d483b2b180500000000000000000e19202c35383b474c515354555554524f4b453837332920190e010000000000000000000000000c1c2a3337444b4e525354555554524e4b4336353025181203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4d9e8d3bda8937e68533e291a2f455a6f849aafc4d9ead4bfaa957f6a55402a15000000000000000000000000000000000000000012283d52677d92a7bcbaa48f7a656262626262626262626262626262626262626d8398adc2b49e89745f49341f00071b2d3e4a4f606060606060606060606060606060606060606060606060604f4b3e2e1b08000000000311212f39464b5c646e605645321d10000000000000000000000000000d22364a5c646c6c6c6c6c6c6c6c6c6c6c6c6c655e4c38230e0000000000000000000b20344859626c6b6b69676360544e4a3d342b1d0f010000000000000000000000091e32455660676b6e70706e6d69635b524b43362c1e100200000000000000000000000b2034485a626262626260564e4a3e2d1f0f00000000000000000000000000000000000000000000000000000000000001142636434b5761646767676762594834200b00000000000005131e2b353c494d5659616668696b6a6967646056544c473a352c1c14080000000000000000000004182a3a474c5560636768696b6a6967636054514a43362f1e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acc1d6ead5c0aa95806b55402b182d42576d8297acc2d7ecd7c2ac97826d57422d18020000000000000000000000000000000000000012283d52677d92a7bcbba6917c77777777777777777777777777777777777777788399aec3b49e89745f49341f000d22364a5c7075757575757575757575757575757575757575757575757575645c4b37220d0000000011212f3f4c57616c7a8374604b3f2e1a0a0000000000000000000000000f24394f647a818181818181818181818181817c65503b26100000000000000000000d22374c62778181807f7c79746d635b4d483b2d1f1002000000000000000000000b21364b60747d8184858584827e7972686054493c2e211000000000000000000000000d22384d627878787877756f645c4a3d2d18080000000000000000000000000000000000000000000000000000000000081c304354606a767a7c7c7c7c77624d37220d0000000000061423303c494d5b636c72777b7d7f807f7e7c7975706961584d493c3026180d0000000000000000000a1f334758617175797c7d7f80807e7c79746e6660544c4032291b0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9d7c2ad98826d58432d182a40556a7f95aabfd4ead9c4af9a846f5a452f1a000000000000000000000000000000000000000012283d52677d92a7bcbfac9b918c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c99a1b2c9b49e89745f49341f000f24394f647a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a644f3a250f000000081c2e3f4c5d6575818c96806b5d4b38271502000000000000000000000010253b50657a90969696969696969696969696816c57422c170200000000000000000c21374c61768c969594918e8982796d62594a3d2d2010000000000000000000000c21364b61768c96999a9a9997948e877d73635a4b3f2e1e0e000000000000000000001d32475c72868d8d8d8c8a847a645b4a36261401000000000000000000000000000000000000000000000000000000071a2d3d4b60727f898f9191918e79634e39240e0000000004142431414d5a626e7881878c909294959594918e8a857e766c625a4b43362b1d0e00000000000000000c22374c6177858a8e919394959594918e89837c73665e4b46392a1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1e7dac4af9a856f5a3a2a17283d52687d92a7bdd2e7dcc7b29c87725d3b2a18040000000000000000000000000000000000000012283d52677d92a7bcc9b9aca6a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2aeb2bfc9b49e89745f49341f000c21374c61768ca79f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927c67523d27120000000e23374b5d657b87969f9f8c7a655645311d0e00000000000000000000000d22384d62778da9abababababababababab99846f59442f1a0000000000000000000a1f33475873889eaba9a7a79e978c8278645c4a3e2d1a0a0000000000000000000a1e33465772879daeb0b0aeaca9a49c928678655d4b3c2b18080000000000000000001a2f455a6f849aa2a2aa9f9a8a79635443301c080000000000000000000000000000000000000000000000000000000c21364a5b6c81959ea8a6a69e8974604b35200b00000000122231424e5f6778838c969ca4a6a8a9aaaaa9a7a99f9a938a81786a6054483b2c1e0e000000000000000b20354b60758a9fa9a7a8a9aaaaa9a7a89e9891867c6d6157483b2a1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8d8eadcc7b29c87725847331f253b50657a90a5c9daecdec9b49f89745947341f0b0000000000000000000000000000000000000012283d52677d92a7bccec9bfbbb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c3c6cfc9b49e89745f49341f000a1f33475874899eb3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5aa947f6a553f2a1500000010253a50657b8c9da5b4ab9c8674604b3c2c1906000000000000000000000b20354a60748a9fb4c8c1c1c1c1c1c1c1b19c87715c3a2a180400000000000000000417293a5b70859bb0c8c5b8b3ab9f98887a645c4a38281602000000000000000003172939596e8399aec3c5c3c2c3b6b2a39b897b655a49362614010000000000000000182d42576d8297acc8bbb4a89c8673604b35200b0000000000000000000000000000000000000000000000000000000e23394e63798e9fb3b9c6af9a846f5443301c080000000b1b2f404e60687d89999fabb1b6c2bdbec0bfbec7bab4afa89e968b7f736259493c2c1c0c000000000000081d31445572879db2c7bdbec0bfbec6b9b3aea49c9082756259483a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778caabbcee2dfcab49f8b77614c372123384d63788dabbccfe3e1cdbaa98c77614c37220c0000000000000000000000000000000000000012283d52677d92a7b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b49e89745f49341f0004172a3a5c71869bb1c6cacacacacacacacacacacacacacacacacacac2ac97826d57422d18000000152b40556a8095aab7c3b6a495806a5a4935201100000000000000000000071c30435470859baaacacacb4bac7d8c9b49e89745847331f0a000000000000000000182d42586d8297aaaeb4bac7bcb4a69d8a7a645645321e0b000000000000000000152a40556a7f95aac7c4c9ced3cac2b5a79e8978625443301c080000000000000000152a3f556a7f94aabfcec6b6a4917c6651392816030000000000000000000000000000000000000000000000000002152737566b8096abbdccc9aa95806a55362614010000031629394c5e687e929ea8b5bcc9cad3d8cec9c8cacecdc9c6b9b4aa9f948478625a493a2917040000000000011527375a70859aafc5d2d4d5d5d3d6ccc9c2b6b1a0988677625846331f1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4cadfe2cebbaa927d67523d2d20364b60758a9fb5cadfe9d7c7a48f79644f3a240f0000000000000000000000000000000000000012283d52677d92a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39e89745f49341f0000192e44596e8399aeb7b7b7b7b7b7c9ccd6e4dfdfe5d8cec9b7b7b7b7af9a856f5a37261401000011263b51667b90a2b4c8c2b49f8b78634d402f18080000000000000000000013253650667c8c959696969fa9bacecdb9a88c77614c37220c00000000000000000010253b50657b8c96999fa9b6c3c4b7a89c8674604b39291703000000000000000011273c51667c91a9acafb4bbc8d6d2c5b8a79b8573604b362513000000000000000012283d52677d92a7bcd2d3c2ae99846e5746321e0900000000000000000000000000000000000000000000000000081d31445570859ab0c5cfbcab907b66503b26110000000a1e324657667c8d9fb3b9c6cfdad1c8c7bab4b3b4bbc8cacecdc8bbb4a29a8778625846331f12000000000000182d42586d8297adc2cfcdcbcdd1dbddded3c9beb2a49c8676614c43321d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c30435472879db2c7dcebd9c8af9a846f5b4a362132455673889db3c8dde6d1bca6917c67513c27120000000000000000000000000000000000000012283d52677d8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8a745f49341f0001162b41566b8096a2a2a2a2a2a2a2b3b9c5d6e8ead8c7bab4a2a2a2a2a29d87725544311d0800000f24384c5e70859ab0c0cebaa999836f5e4c362614010000000000000000000823384c5e6679808181818b9fb4c9d7c6a48e79644f39240f0000000000000000000e23384b5d657a81848a9ca5b6cac6b6a496806b5746331e0a00000000000000000c22374c61778b9596999faab9c6d6d5c5b5a3927d675443301c070000000000000010253a50657a8fa5c8d9dec9b49f8a76614b36210c000000000000000000000000000000000000000000000000000b20364b6075899fb4c9cab59f8b76614c37210c0000011426364b6175889dabbcccd6e3d0c0b4b0a99f9e9faaabb4bbc8d6cec0b4a59c8676614c402f18080000000000152a40556a7f95aac5bab8b6b7bcc5c9d2dfdecfc2b5a499836e614f3b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426365a70859aafc5daefdcc7b3a28e79634e402f28385b70869bb0c5dbe9d3bea9947e69543f2914000000000000000000000000000000000000000c21374c617679797979797979797979797979797979797979797979797979797979797979797979634e39240e000013293e53687e8d8d8d8d8d8d8d8d9ea7b9cce0e2cebaa99f8d8d8d8d8d8d8c74604b35200b0000091d2f4050657b8fa2b3c7c7b3a1907b665443301c08000000000000000000091c2f404c5b636a6c6c72879cb2c7d1bca6917c67513c2712000000000000000000081c2f3f4b5c646b6f78879cb2c1d1c2b49e8976614b36210c00000000000000000a1f344759647a8081848b9ea8b9cde1d2c1b29c8773604a35200b000000000000000d22384d62778daabbcee1cdbaa9917c6651372614010000000000000000000000000000000000000000000000000f243a4f64798fa9bacdc6b19c87715847331f0a0000081c3043546b8095a6b7c9d9e7d0c0b3a29a8f8a888a8e969faab9c6d6d1c3b6a498836e5e4c362513000000000012273c52677c91a7a7a4a3a1a2a7b0b5c1cddbe0d2c2b2a1947f69594834200d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d8298adc2d7ede3d0c0ae99836e5e4c3b2a43596e8398aec3d8ebd6c1ab96816c56412c17000000000000000000000000000000000000000a1f33475861646464646464646464646464646464646464646464646464646464646464646464635b4a36210c00000b21364b60757878787878787878899eb3c9dedfc9b49f8b7878787878787872604b35200b0000001223374b5d6f849aafc0d0bfb19c8673604b3626140100000000000000000012222f3d4a4e55575a6f859aafc4d3bea9947e69543f29140000000000000000000011212f3e4a4f565a647a8fa3b4c8cdb9a8937e6853362614010000000000000004182a3a4b5c646a6c6f7a8a9eb4c9dedfcab6a58f7a644f3a250f000000000000000b20354b60758a9fb4cadfd7c7ad97826d5544311d0800000000000000000000000000000000000000000000000014293e53697e93a8c7d7c2ac97826d573a29170400000b20354b6074889eb3c4d4e7d9c9b3a29a847a75737579818c9ea8b9cde1d3c2b2a0917c665443301c07000000000c21374c61768992918f8d8c8d929ba3b0bccddde0cfbfb49f8a77624c3b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac0d5eaeedbc6b3a1907b6659473a41576c8196acc1d6ebd7c2ad98826d58432d18000000000000000000000000000000000000000417293a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4a3d2d1a070000091e324557606262626262626271869cb1c6dbe2cebaa98c77626262626262605443301c08000000081c2e3f4f647a8fa2b4c7c9b5a4927d675443301c0800000000000000000004121f2d36394042576d8297acc2d6c1ac96816c57412c17020000000000000000000311202d36393c4b5c70859bb0c5d6c6af9a85705443301c0800000000000000000c1c2e3e4b4f55575c6b8095abc0d5e6d3c3ab96816c5637261401000000000000081d31445572889db2c7dddec8b39e8874604b35200b000000000000000000000000000000000000000000000004182a3b586d8398adc2d6c5a8927d68533d281300000010253a4f657a8fa6b8cbe2e3cfbcab9a847365605460636c7b8a9eb4c0d0e0cfbeb19c8673604a35200b000000000a1f33475862787d7c7a7876787c85969eb0bfcfe5e1cdbaa996816c594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdd2e7f6e2cfbfb39d887762584a3e556b8095aac0d5ead9c3ae99846e59442f1900000000000000000000000000000000000000000c1c29333739393939393939393939393939393939393939393939393939393939393939393939362d1f0f00000003162839454b4d4d4d4d4d4d596e8499aec3d9ead8c7a48f79644f4d4d4d4d4b4336261401000000001122374b5c6f849aafc2d2c2b19c8673604b35201100000000000000000000010f1a21242b3f556a7f94aabfd4c3ae99846e59442f19000000000000000000000002101b22242e3e556a7f95aabfd4c9b49e8974604b35200b00000000000000000010202e373a403e4f647a8fa4c5d5e7dbc5b09b85705544311d08000000000000011527375b70859ab0c5dae0ccb8a78f7a654f3a251000000000000000000000000000000000000000000000000b1f34475972879db2c7ccb9a78e79634e39230e000000152a3f556a7f94aac4d5e7dfcab49f8c7862554b434b4e5d667c91a2b4c7dcdec9b5a4907b65503b25100000000004172a3a48596268676563616267738096a1b2c7d8e9d7c7b49f8a77624d37220e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0e5feede0cbb7a69b8576645c53556c8196abc1d6ebdac4af9a856f5a45301a0000000000000000000000000000000000000000000c171f2124242424242424242424242424242424242424242424242424242424242424242424211a0f01000000000a1b283236383838383841576c8196acc1d6e6d1bca6917c67513c38383835302618080000000000071b2e3e50667b90a4b5c9cab6a4917c66513f2e1c080000000000000000000000070c12283d52677d92a7bcd2c6b19c86715c3a291704000000000000000000000000070d11263c51667b91a6bbd0cdb9a88e78634e39230e00000000000000000002101b22252b364b61768ba7b8cce0dec9b49f8975604b35200b00000000000000182e43586d8398adc2d8e8d5c5a8937d68533e281300000000000000000000000000000000000000000000000c22374c61778ca5b6cac9b39e8974604b35200b000000172c42576c8197acc1d6ecdac5b09b85705a493730353f4c5e6f849aafc4dae5d2c2ad97826d583b2b1805000000000c1c2b3b484d52524f4e4c4d54606e8399a9bacee2e2cdbaa9947f6a553c2c190600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3c5d5e7f0dfd2c9c4b5a39b867a6e696973869cb1c6dcedd8c3ae98836e59432e1900000000000000000000000000000000000000000000040a0c0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0c07000000000000000a161e21232323232a3f54697f94a9bed4e9d4bea9947f69543f2a2323201c1408000000000000001023384c5e71869cb1c5d3c2b09b85705d4b37230d0000000000000000000000000010253a4f657a8fa4c8d8c9b39e89745847331f0a00000000000000000000000000000f243a4f64798fa4b9ced7c6a7917c67523c27120000000000000000000000080d0f1e33465773889eb3c8dde1cdbaa98d78624d38230d00000000000000162b40556b8095aac0d5ead5c0aa95806b55402b16000000000000000000000000000000000000000000000011263c51667c91a6c3d4c4af9a846f5443301c08000000192e43596e8398aec3d8ecd6c1ac97816c573c2c1c20304052677d92a7c5d5e8ddc8b29d8873594834200b00000000000d1d2b34373d3c3a383736434d62778b9fb4c9dfead7c7b19b86715a4935200c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba6b8cbe0e5d2c1b5b1b5b5a49c8c837e7e849aa4b6c9deebd6c1ab96816c56412c1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0d0d0d12273c51677c91a6bcd1e6d6c1ac96816c57412c170d0b08010000000000000000091c2f4052687d92a7b9ccc9b5a3907b65503b2b19050000000000000000000000000d22384d62778daabbceccb9a88c76614c37210c00000000000000000000000000000d22384d62778da2c7d7d3bda8937e68533e291300000000000000000000000000031729395b71869bb0c6dbe9d7c7a58f7a65503a25100000000000000013283e53687d93a8bdd2e8d7c2ad98826d58432d180000000000000000000000000000000000000000000001142637566b8095abc0dac9aa95806a5536261401000000192f44596e8499aec3d9ead5c0aa95806b55402b161222374c62778ca7b8cce0dfcbb7a68c77624c37220d0000000000000d1920222827252321263448596d8298adc9d9ebddc9b5a38d78624d38230d0000000000000000060b0d1919191919191918150c0a030000000000000000040a0c161919191919191913110b01000000000000000000000000020b11131f1f1f1f0f0d070000000000000000000000000000000000091e32455673889eb3c8dddec9b5a39b9fabb6ab9f9993939aa2b4c2d3e5e5d2c1a8937e68533e2913000000020e171d1f202020202020202020202020202020202020202020202020181610060000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c7d7e9d9c4ae99846f59442f1a000000000000000000000000001121364b6075899eb3c9d1c1af99846f594834200b0000000000000000000000000b20354b60758a9fb4c9d6c6a38e79644e39240f00000000000000000000000000000b20364b60758ba9bacdd4bfa9947f6a543f2a150000000000000000000000000000192e43596e8398aec3d8e7d2bda7927d68523d28130000000000000011263b50667b90a5bbd0e5dac5b09a85705b37271501000000000000000000000000000000000000000000081d31445570859aafc5cfbcab907b66503b261100000000182e43586d8398adc2d8ebd5c0ab96806b56412b160b1f34475973899eb3c8dee7d4c4a58f7a65503a251000000000000000050b0d1312100e0c182b3b51667c91abbccfe3e4d2c1a9937e69543e2914000000000000000e1920232e2e2e2e2e2e2e2e2a211e170b0000000000000c181f222b2e2e2e2e2e2e2e28251e13050000000000000000000006141f26293535353524221b1002000000000000000000000000000000031628385b71869bb0c6dbdbc6b19b868d9fb5bcb4aea8a9afb4c0d1e0eedec9b5a38d78624d38230d00000212202b32343535353535353535353535353535353535353535353535352d2b23180a00000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9bacde1dbc6b19c86715c3a291704000000000000000000000000091e3245566c8196acc1d2cab49f8b77624d372210000000000000000000000000081c30435472879db2c7d1bba6917c66513c27110000000000000000000000000000091d32455674899fb4c9d5c0ab95806b56402b160100000000000000000000000001162c41566b8196abc0d6ead4bfaa957f6a55402a15000000000000000e23384e63788da3c5d5e7ddc7b29d88725544311d080000000000000000000000000000000000000000000b20354b6075899eb4c9cab59f8b76614c36210c00000000162c41566b8196abc0d6ebd7c1ac97826c5737271505182a3b5c71879cb1c6dce6d1bba6917c66513c27110000000000000000000000000000000d21374c61768b9fb4cadfedd7c2ad98826d583727150200000000000e1e2b353843434343434343433f3633291b0b000000000c1c2a333740434343434343433d3a312313010000000000000000021424313b3e4a4a4a4a39362d201000000000000000000000000000000000192e44596e8399aec3d8d5c0ab95807f959eb4bcc9bebec4c8d1dee9e1cfbfb19b86715a4935200b00000e20303d46494a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a433f35281806000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475974899fb4c9dedec9b49e89745847331f0a000000000000000000000000031628384e64798ea3b5c9cfbcab947f6a543e2e1b070000000000000000000000011426365a70859aafc5d3bea9937e69543e29140000000000000000000000000000021528385e73899eb3c8d6c1ab96816c56412c17010000000000000000000000000014293e54697e93a9bed3e8d7c2ac97826d57422d18000000000000000b21364b60768ba6b8cbe0dfcab49f8a75604b35200b0000000000000000000000000000000000000000000f24394e64798ea8b9cdc6b19c87715846331f0a0000000013283d53687d92a8c3d4e6dac4af9a856f5544311d081527375b71869bb0c6dbe6d1bca7917c67523c27120000000000000000000000000000000a1f33475872879db2c7dcf0dbc6b19b86715544311d080000000006192b3c484d5858585858585858554b463929190900000a1b2a3a474c5558585858585858524e41311e0b00000000000000000b1f31424e535f5f5f5f4e4a3e2d1b07070000000000000000000000000001162c41566b8196abc0cfd7c0ab95806b80949fabb6c3cad4d7d9d9d7cdc0b3a1917c66513c2b19060003172b3d4e5a5f6060606060606060606060606060606060606060606060605853463523100000000000000000000000000000000000000000000000000000000000000000000000000005182a3b5c72879cb1c7dce1ccb9a88c76614c37210c000000000000000000000000000a21364a5c71869bb1c6d9c9b19c86725c4a36220d000000000000000000000000182d42586d8297adc2d6c1ab96816c56412c170100000000000000000000000000001e33485d73889db2c8d6c1ab96816c56412c17010000000000000000000000000011263c51667b91a6bbd0e6dac4af9a856f5a36251300000000000000091e32455673889eb3c8dde2cebbaa8d77624d38220d00000000000000000000000000000000000000000013293e53687e93a8c6d7c2ac97826d573a291704000000000f24394e64798ea5b6cadfdec9b39e8975604b36261f1e31445573889db2c8dde9d7c6a6907b66513b26110000000000000000000000000000000417293a596f8499aec4d9eedfc9b49f8a75604b36200b000000000b2035485a626e6e6e6e6e6e6e6d6a61574637271501031628394758616b6e6e6e6e6e6e6e68604e3a25110000000000080d0f1b263b4e606874747474645c4a3622101c0d0b05000000000000000000000014293e54697e93a9b9b9c7baa9947f696b7f8d9da5b2b6c3c2c4c3c7bab4a299836e5e4c381e0e0000081d32465a6c747575757575757575757575757575757575757575757575756d64533f2b1601000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4d9e8d6c6a38e79644e39240f00000000000000000000000000071a2d3d556a7f94aac2d3cab6a48f7a644f3a240f000000000000000000000000152b40556a8095aabfd5c3ae99836e59442e190000000000000000000000000000081d32475d72879cb2c7d6c1ab96816c56412c1701000000000000000000000000000f24394e64798ea3c6d6e8dcc7b29c87725443301c07000000000000031628385b71869bb0c6dbebd9c8a48f7a654f3a2510000000000000000000000000000000000000000004172a3a586d8298adc2d6c5a8927d68533d281300000000000d21364a5c72879db2c5d5e0ccb9a7907b665443363332394b60758a9fb4cadfe1cdbaa88e79634e39240e00000000000000000000000000000000172c41566c8196abc1d6ebe2cebbaa8e78634e39230e000000000d23384d627882838383838383837f75615544311d0a091e324557617680838383838383837d68523d281300000002101b222530293e53687e8b8a8a8b7a644e39242531221f180d0000000000000000000011273c51667c91a4a4a4a4a99f8f7a65616a7b87939da5a9adafaeaca99f958474604b402f1d0000000a1f34495f748a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a826d58432d180000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d8297acc2d7e6d1bba6917c66513c271100000000000000000000000000000f23394e63798ea4b6cad3c2ab96816c563c2b1905000000000000000000000013283d52687d92a7bdd2c6b19b86715c3a29170400000000000000000000000000071c31475c71869cb1c6d6c1ab96816c56412c1701000000000000000000000000000c21374c61768ca8b9cce1dfc9b49f8a75604a35200b00000000000000192e43596e8398aec3d8e7d2bca7927d67523d281200000000000000000000000000000000000000000a1f33475872879cb2c7ccb9a78e79634e39230e0000000000071a2d3d556a7f95a7b8cce0d6c5b09b857360544c47464b57657b90aabbcee2dec9b49f8975604b36200b0000000000000000000000000000000014293f54697e94a9bed3e9ead8c8a5907b66503b2611000000000b2035485a6f8498989898989898948373604b382715182a3a4b607585959898989898988a78634d38230e00000010202e373a45393b51667b909f9f917c66513c383b4637342a1d0d0000000000000000000f24394f647a8e8f8f8f8f8e8a7f6a5d505d65757e878f9498999997928a7f74605645322212000000071c32475c71879c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a85705b3727150200000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e8d3bea9937e69543e291400000000000000000000000000000c2136495b72879cb1c7dcc7b19c87725a4835200b000000000000000000000010253a50657a8fa5c8d9c9b39e89745846331f0a00000000000000000000000000061b31465b70869bb0c5d6c1ab96816c56412c1701000000000000000000000000000a1f33475874899eb3c9dee2cdbaa98c77624c37220d00000000000001162c41566b8196abc0d6e9d4bfaa947f6a553f2a1500000000000000000000000000000000000000000c21374c61778ca4b6cac9b39e8974604a35200b0000000000000f21364c6176899eb3bccfdac9b5a397817367615857616675869cb1c8d9dfcfbeae98836e5544311d080000000000000000000000000000000012273c51677c91a6bcd1e6e8d3bda8937e68533e29130000000006192b3c4e63798c9fadadadadada2937e685645311d1f3347586a8095a3adadadada796816b5a4935200c0000081b2e3e4b4f5a4e494e63798ea3a9947e69543f4b505c4c473b2a180800000000000000000b20364b60747a7a7a7a7a78756a61503f4c566069737a7f828484817d766a60554538281604000000041a2f44596f8499aeb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b29d88725544311d080000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2e7d6c0ab96816b56412c160100000000000000000000000000061a2c3d566b8096abc8d8cab6a48d78624d38220d00000000000000000000000d23384d62788daabbceccb9a78b76614c36210c00000000000000000000000000051a2f455a6f849aafc4d6c1ac97816c57422c1702000000000000000000000000000417293a5c71869cb1c6dbead7c7a48f7a644f3a250f0000000000000014293e54697e93a9bed3e8d7c1ac97826c57422d17020000000000000000000000000000000000000011263b51667b90a6c3d3c4af9a846f5443301c070000000000000a1e334657677d919eb5bcc9d2c1b19f97857c777474767c869ca4b5c9ddcfc1b2a08f7a654f37271502000000000000000000000000000000000f24394f64798ea4c6d7e9ead5c0ab95806b56402b1601000000000e21364a5b6d8297a8b9c3c3c0b29d8774604b38282b3b4c6177899eb4c1c3c3b39e8976614c3c2c190600000d22374b5c6470635b4b61768ba6ab96816c564b5d65716259473625130000000000000000091d31455660646464646463605750433338454b546064696d6f6e6c6861574b4437281a0a0000000002172c42576c8197acc7d8cacacacacacacacacacacacacacacacacacab49f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8d9ebd8c3ae99836e59442e1900000000000000000000000000000011263b50667b90aabbced3c2a8927d68533d281300000000000000000000000b20354b60758a9fb4cad6c5a38e79634e39240e0000000000000000000000000004192e43596e8398aec3d7c2ad97826d58422d180000000000000000000000000000001a2f44596f8499aec4d9e6d1bca7917c67523c27120000000000000011263c51667b91a6bbd0e6d9c4af9a846f5a452f1a0000000000000000000000000000000000000001142636556b8095aac0dac9aa95806a5536251300000000000000031729394d5f6b80949fabb6c2c8bdb1a39b918c89898b919ca4b5c2d1c8beb2a398826e5d4b37190900000000000000000000000000000000000c22374c61778ca8bacde1edd8c3ad98836e58432e190000000000071a2d3d4c62778a9eb4c4d4cab7a5937e685645323448596b8196a8b9cccab6a4937e695847331e0e0000071a2d3d4f647b85796b605773889eae99846e56606b7b8677625443301c0d0000000000000002152738454b4f4f4f4f4f4e4b45393325283236434a4f54585a5957524c46393127190a00000000000013293e53687e93a9bacee2dfdfdfdfddcfc6c3c1c1c1c1c1c1c1c1c1bcab8d78624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbcee2dbc6b09b86715b3929160300000000000000000000000000000c21364b61768a9fb4cad8c3ae98836e593b2a180500000000000000000000081d31445572889db2c7d0bba6917b66513c26110000000000000000000000000002172c42576c8197acc1d6c3ae99836e59382715070000000000000000000000000002172c41576c8196acc1d6e9d4bea9947f69543f2a14000000000000000f24394e64798ea3c6d6e8dcc7b19c87725c3b2a1804000000000000000000000000000000000000081c3043546f849aafc4cfbcab907b66503b261100000000000000000b1b304151626b7f8d9ca4b0b4c1c1b5b1a7a99f9e9fabb1b6c2d1c1b4b0a0988575614c3f2e1b0000000000000000000000000000000000000a1f34475974899fb4c9def0dac5b09b85705b3827150200000000000f1f3448596a7f95a6b7cbd4c3b29d8875604b383c4d62778a9fb4c6d1c0b29c8774604b3a29170000000c21364a5b6e83998b80756670869bb09b86716374808d9a8472604a3b2b1805000000000000000a1a2731363a3a3a3a3a393632281b15161e2530353a3f434444423d3633291d1509000000000000000d22374c62778b9fb4c2d2e4f4f5e2cfbfb2aeacacacacacacacacacaca5907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4cadfdec8b39e89735746321e0a00000000000000000000000000000a1e32465770859bb0c5dbc8b39d88735947341f0b00000000000000000000011527375b70859ab0c5d3bea9937e69543e29140000000000000000000000000000152a3f546a7f94a9c4d4c6b09b8671564531211a0f01000000000000000000000000142a3f54697f94a9bed4e9d6c1ac97816c57422c17020000000000000c21374c61768ca8b9cce1dec9b49f89745947341f0b0000000000000000000000000000000000000b20354b6074899eb3c9cab59f8b76614c36210c0000000000000000001323334451616a7b86929ba3b4c5c9c6c7bab4b3b5bcc9c9d3c8b4a39b90827561574633211000000000000000000000000000000000000004182a3a5c71879cb1c6dcf1ddc8b29d88735645311d09000000000005182a3b4b6075879db2c1d2cbb7a6937e695645495a6c8197a9bacdc9b4a2917c665544311c0c0000000e23394e63798c9f9f95877c6e8298ad9d88737985969fa1947f69594834200b00000000000000000a151d20252525252523211e160a000308131c20242a2d2f2f2c28211e170b0200000000000000000b1f3448596a8095a4b5c5d6e7f7dbc6b2a1999797979797979797979797927d68523d281300000000000000000000000000000000000000000000000000000000000000000000000001081d31445572889db2c7dde0ccb8a78b76614b36210c000000000000000000000000000003162939566b8096abc0d5cbb8a68c77624c37220d0000000000000000000000182d43586d8298adc2d6c0ab96816b56412c16010000000000000000000000000010253a50657a8fa6b7cbc9b49e8975604b3a362d200f00000000000000000000000012273c52677c91a7bcd1e6d9c4ae99846f59442f1a000000000000000a1f33475874899eb4c9dee1cdbaa98c77614c37220c0000000000000000000000000000000000000e24394e63798ea8b9ccc6b19c87715846331f0a00000000000000000005162633434f5d65747d859ba7b8ccdbd7cdc9c9cacfdadedac5b09b857c6e61574639291703000000000000000000000000000000000000001a2f445a6f8499afc4d9eedfcab59f8a75604b36200b0000000000000d1e324556677d92a3b5c9d4c4b39d8875604b4d63788b9fb4c7cfbcab9a84705e4c37271500000000172c41566c81959fa9a59d91847f94a99d877d8a9ba3b5a79e8a77624d37220d00000000000000000002090b0f0f0f0f0f0e0b09030000000000070b0f14181a1917130c0a030000000000000000000005182a3b4b6074869ca7b9c9daecd8c3ae99828182828282828282828282817c66503b2611000000000000000000000000000000000000000000000000000000000000000000060c0e16181527375b70859ab0c5dae8d5c5a38e78634e39230e00000000000000000000000000000012283d52677d92a7c7d8d5c4a5907b65503b26100000000000000000000000162b40556b8095aac0d5c3ae99836e59442e1900000000000000000000000000000b20354b6074889db2c0cdb9a8907b66584e4a3e2d1a0700000000000000000000000f243a4f64798fa4c7d7e9dbc6b19c86715c3a29170400000000000004172a3a5c71879cb1c6dce9d7c7a48f79644f3a240f00000000000000000000000000000000000013283e53687d93a8c6d6c2ac97826d573a29170400000000000000000000081625323f4b55606b7b889eb3c8ded3cac7c2c2c5caced9c4af9a847b6c6157473a2a1a0a00000000000000000000000000000000000002172d42576c8297acc1d7ece3cfbcab8d78634d38230e000000000000031628384a6072859bb0bfcfcbb7a6947e69575b6d8298aabbcec7b59f8d7a644f40301909000000000b21364b6074808b9aa2b2a199899eb39f8a8b9fa8b4a29a897c66594834200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d3145566379899eabbccfe3dac4af9a85756c6c6c6c6c6c6c6c6c6c6c665e4c38230f00000000000000000000000000000000000000000000000000000000000000010f1a21232c2d282d43586d8298adc2d7e5d0bba6907b66513b26110000000000000000000000000000000e24394e63798ea9baced4bea9947f69543f2a14000000000000000000000013283d53687d92a8bdd2c6b09b86715b3929160300000000000000000000000000081d314455697e93a2b4c1c6b19c86766a645c4a36210d00000000000000000000000d22374c62778ca9bacde1dec9b49e89745847331f0a000000000000001a2f44596f8499aec4d9e6d1bca6917c67513c271200000000000000000000000000000000000417293a576d8297acc2d6c5a8927d68533d2813000000000000000000000000081b2e3f50626b80919ea7b8ccccc3b6b2adadafb4bbc8c8b4a29a8f817561584738271502000000000000000000000000000000000000152a3f546a7f94a9bfd4e9ecdac9a5907a65503b2510000000000000000a1c304354657b8fa1b3c8d4c4b39d88756063798c9fb4c8cdbaa998826d5c4a3622120000000000091e324556606b7984929da5a89ea8b9a99f9faba99f958477665e4c3b2b180500000000000000000000000001080b0f1315161413110d0b0500000000000000000000000000000000000000000000000002152738495b667c8d9fb5c0d0dcc8b4a296806b5f575757575757575757504c402f1c09000000000000000000000000000000000000000000000000000000000000000f1f2c353841423d3540556b8095aac0d5e8d3bda8937e68533e29130000000000000000000000000000000b20364b60758a9fb4c9d8c2ad98836d58432e18000000000000000000000010263b50657b90a5c9d9c8b39e89735746321e0a00000000000000000000000000011426374b6073849aa3b4bab5a49c87807a644e39240f00000000000000000000000b1f34475974899fb4c9dee1ccb9a88c76614c37210c00000000000002172c42576c8197acc1d6e9d3bea9947e69543f291400000000000000000000000000000000000a1f33465871879cb1c6ccb9a78e78634e39230e0000000000000000000000000e22374b5d6b80959eb3b8c5ccbbafa59d98979a9faab3bfc0b4af9f978576615645311d0e00000000000000000000000000000000000012273d52677c92a7bcd1e7e7d2bda8927d68533d281300000000000000001325364b5d6e8399aabbcecbb8a6947e696e8399abbccfc4b49f8a78624d3e2d1b04000000000003162838454b5b636f7d87929da6b8c6bab4b5a1998b7f7362594c402f1d0d0000000000000000000001080b151d2025282a2b2a2826221f180e0c06000000000000000000000000000000000000000000000a1a2c3c4c5e6b8095a2b3c3d4d1c0b09e917c675b49394242424242423b382f2211000000000000000000000000000000000000000000000000000000000000000e1e2c3d494e5657524b4453687d93a8bdd2e8d5c0ab96806b56412b16010000000000000000000000000000081d31445571869cb1c6dac5b09b85705b36261401000000000000000000000e23384d63788dabbccfccb8a78b76614b36210c0000000000000000000000000000091d314455617685969fa9bab5a59d95816b56412c16010000000000000000000005182a3b5c72879cb1c7dce8d6c6a38e79644e39240f00000000000000152a3f546a7f94a9bfd4e9d6c1ab96816c56412c1701000000000000000000000000000000000c21364c61768b9fb5cac9b39e8974604a35200b000000000000000000000005182b3b4f657a8d9fb5bcccd0bfaf9d94878282858b99a1b3bfc8bdb1a39b8574604b3c2b1906000000000000000000000000000000000010253a4f657a8fa4c8d8eaead5bfaa95806a55402b15000000000000000008182e3f4d63788b9fb4c5d5c4b39d88747a8fa1b3c9cbb8a695806b5948342010000000000000000a1a28323d494e5f67747d889db3c8cdc3ae9984786a60554a3e33291c0d00000000000000000009151d202731353a3d3f403f3d3b37342a2321190e060000000000000000000000000000000000000000000e1e30404b6072849aa5b7c7d7cdbcb49e8a79635746322d2d2d2d2d26231c110400000000000000000000000000000000000000000000000000000000000006192c3c495b636b6d68605550657b90a5bad0e5d8c3ad98836e58432e1900000000000000000000000000000002152737596f8499aec4d9c7b29d88725443301c08000000000000000000000b20364b60758a9fb4cad5c5a38e79634e39240e00000000000000000000000000000114263747586175808b9fa9bab7ae98836e59432e190000000000000000000000001a2f455a6f849aafc4d9e6d0bba6917b66513c26110000000000000012273c52677c91a7bcd1e6d9c3ae99846e59442f19000604000000000000000000000000000011263b50667b90abbccfc4af99846f5443301c0700000000000000000000000b203448596f849aabbccfdcc7b3a1947f736d6d70788399a1b3c7cec1b5a396806b5a4835200800000000000000000000000000000000000d22374d62778caabbcee2ecd7c2ad97826d58422d18000000000000000000112135495b6c8196a7b8cccbb8a6927d8298adbfd0c2b39d8875614b3b2b19020000000000000000162633424e5b6374808a9da6b8c4cdc7b3a199877e73645c4c473a2b1d0d00000000000008131c27313537444b4f5355555452514c483b38352c21190e000000000000000000000000000000000000000000121c3043546176879da9bacde1ccb9a89c8675614b433221171717110f0900000000000000000000000000000000000000000000000000000000000000000c2035495a637981827d73615863788da3c4d5e7dbc5b09b86705b38281602000000000000000000000000000000172c42576c8197acc1d6cab49f8a75604b35200b00000000000000000000091d31455673889db2c8d0bba6907b66513b261100000000000000000000000000000009192a3a4757606e7d8a9fb4c6b09b86715b382816020000000000000000000002182d42576d8297acc2d7e8d3bea9937e69543e2914000000000000000f253a4f647a8fa4c7d8eadbc6b19b86715c3929171d1b191309000000000000000000000000132536556a7f95aac9dac9aa957f6a553625130000000000000000000000000d22374d62778ca2b4c9dad9c4af99846f6054585962738399a9bacdd2c1b49f8b78624d36261401000000000000000000000000000000000b20354b60758a9fb4c9dfefdac5af9a85705a37261401000000000000000006192c3c4c6176899eb3c3d3c4b19c868b9fb4c9c9b5a4937d685746321d0d00000000000000000e2133445160687986959fa8b3abb0bcb6b2aca59d93857a6c6158483c2b1905000000000c18253037444b52556064686a6b6968666259564d493c352c1e130500000000000000000000000000000000000000011426364758647a8b9fb4bdced6c6b6a498826e614f3f2e1d0d00000000000000000000000000000000000000000000000000000000000000000000000c1c30414d63788996979285766360768ba6b7cbe0ddc8b39d88735645321e09000000000000000000000000000000152a3f556a7f94aabfd4cebbaa8c77624c37220d00000000000000000000021527385b70859bb0c5d3bea8937e69533e291400000000000000000000000000000006192b3c4b607482929fa9babfb39e88735645321e090000000000000000000000152a3f556a7f94aabfd4e9d6c0ab96816b56412c16010000000000000d22374d62778ca9bacee2dec8b39e89735746333232312e261a0c00000000000000000000071c3043546f8499afc4cfbcab907b65503b261000000000000000000000000012273d52677d92a7c0d0e7d9c9a6917c6651433b485562788a9fb4c9decebbaa96816c5443301c0800000000000000000000000000000000081c30435472879db2c7dcf2dcc7b29d87725544311d080000000000000000000e1f334758697e94a5b6cacab6a49c9faabbcebfb19c8673604b39291600000000000000000014283d51626b7e8a9ca4b4a79e969eb0a59c979fb1a39b8c8176625a4834200b0000000c1c2a36434a5560676e757a7d7f807f7d7b77716c635b4d493c312316080000000000000000000000000000000000000008182a3a4a5c687e939fb1c1d2d3c2b2a0947f695d4b3b2b1a0a0000000000000000000000000000000000000000000000000000000000000000000417293a4d5f6f849aa7aca29b87786473889db3c8dddfcab59f8a76604b36210b00000000000000000000000000000012283d52677d92a7bcd2d8c8a48e79644f39240f0000000000000000000000182e43586d8398adc2d5c0ab96806b56412b160100000000000000000000000000000b2035485a6c8197a0b4bac3b2a1998b75604b36210b000000000000000000000012283d52677d92a7bcd2e7d8c3ae98836e59432e19000000000002101b29354a60758a9fb4c9dfe0ccb8a78b76614b4747474642382b1a000000000000000000000b20354a6074899eb3c8cab59f8b76614c36210c000000000000000000000000162b40556b8095aac0d5e3cfbcab8c77624d372b37485a6e8398aec3d8d8c8b39d8874604b35200b00000000000000000000000000000000011426365a70859aafc5daefdfcab49f8a75604b35200b00000000000000000004172a3a4b6074879cb2c0d1c2b6b1b4bbc8c8b3a1907b655544311b0b000000000000000001162b40566b80939fa8b4a29a898096ab9c87828f9ca4ab9f978878624d38220d000008182a3a47546067747c83898f9294959492908c8681786e635b4e4234261607000000000000000000000000000000000000000c1c2d3e4e606d8297a3b5c5d5cfbeb49f8c7b6559483827150200000000000000000000000000000000000000000000000000000000000000000a1f334758677d92a2b3c0b4a59c897b70859ab0c5dae3cfbcab8d78634e38230e00000000000000000000000000000011263c51667b91a6bbd0cfbaa5907a65503b25100000000000000000000001162b40566b8095abc0d5c3ae98836e59432e190000000000000000000000000000000d23384d62788c9fb4becab7a599837b73604b35200b000000000000000000000010253a4f657a8fa4c8d8eadbc6b09b86715b392816030000000010202e3a464c5472879cb2c7dce8d6c5a38e79635c5c5c5c5b5549381b0b0000000000000000000e23394e63788ea7b8ccc6b19c86715846331f0a000000000000000000000002172c41576c8196acc1d6dfcab49f8a75604b35202b3c53687d92a8bdd2dfcbb7a68e79634e39230e0000000000000000000000000000000000182d42586d8297adc2d7ece2cebbaa8d77624d38220d000000000000000000000c1d314556677c91a2b4c9d3cac6c9cecebbaa99846f5e4c372614000000000000000000000e23394e63798a9fab9f9584787d92a7a58d787a86949ea89c8673604a35200b0001142636475861727c8791989ea7a8aaaaa9a7a6a49c968c8379686051443425150300000000000000000000000000000000000000102031424b6074859ba7b8c9d9cebbaa9e8877625645311d1301000000000000000000000000000000000000000000000000000000000000000c21374c6176889eb3c0d0c3b6a79e8b7c8197acc1d7ecdac9a5907b65503b261000000000000000000000000000000010263b50657b90a5bad0d0bba6907b66513b2611000000000000000000000013283e53687d93a8bdd2c5b09b86705b392816030000000000000000000000000000152b40556a8095abbccfc7b29d877365605544311d0800000000000000000000000d22384d62778daabbcee2ddc8b39e88735745321e09000000071b2e3e4b5861686f849aafc4dae5d0bba6907c727272727270675539291703000000000000000013283d52687d92a7c5d6c2ac97826d573a291704000000000000000000000001172c41566c8196abc1d6dfcab59f8a75604b3520253a4f647a8fa4b9cfe7d4c4a7927c67523d27120000000000000000000000000000000000152b40556a8095aabfd5eaead8c8a48f7a654f3a251000000000000000000000021527384d5f70859aabbccfdedcdfd6c6b49f8c79634e402f1909000000000000000000000c21364a5b687e939d8d8073667b90a6a6917b66737f8a99927d675443301c0700081c304354617684919ca4adb3b9c5bfc0bebdc2b6b1ab9f988a7d6c6251433321110000000000000000000000000000000000000002141e3245566278899eabbccfd9c8b8a69b8574604b4131200f0000000000000000000000000000000000000000000000000000000000000013293e53687e939fabb9c5d3c5b8a99f8c859bb1c6dbe8d2bda8937d68533e281300000000000000000000000000000010253a4f657a8fa4bacfd1bba6917c66513c2711000000000000000000000011263b50667b90a5c9dac8b39e88735745321e090000000000000000000000000004192f44596e8499aec9d9c1ac97816c544b443726140100000000000000000000000b20354b60758a9fb4cadfe0cbb8a68b76604b36210b0000000d22374b5c64767d82899eb3c8def2ddc8b39d88878787878785705746331e0a0000000000000003172939576c8297acc1d6c5a8927d68533d281300000000000000000000000000152a40556a7f95aabfd4e3cfbcab8c77614c372223384d63788da2b8cde2d4bea9947f69543f2a14000000000000000000000000000000000013283d53687d92a8bdd2e7e7d1bca7927c67523d271200000000000000000000000a1a30404f647a8d9fb5c7d7e9e1ccb9a897816c5b4a3621110000000000000000000000071a2d3d4e606e83887b6b6063798ea3a9947e69606978838773604b36251300000b20354b6074869aa2b2b6c3c9ccc7c4bfbdbdc1c8c9bcb4a89e92806c61503f2e19090000000000000000000000000000000000000002162838485a667c8d9fb4bfd0d5c4b4a397816c5f4e3e2d1c0c00000000000000000000000000000000000000000000000000000000000011263a4e60697f8d9ea7b6c2d0c7baab9f9ba3b5c9deead5c0aa95806b55402b160000000000000000000000000000000f24394f64798ea4b9ced1bca7927c67523d271200000000000000000000000e23384e63788dabbccfcbb8a68b76604b36210b00000000000000000000000000071c31465c71869bb1c6d5bfaa95806a553631261909000000000000000000000000081d31445572889db2c7dde7d5c5a38d78634e38230e0000000f243a4f647a8992979ea7b8cce0f4dfcbb7a69d9c9c9c9c9c8b76614b36210c000000000000000a1e33465771869cb1c6ccb9a78e78634e39230e0000000000000000000000000012273d52677c92a7c2d2e5dac9a58f7a6550382823384d62788da2b7cde2d5c0aa95806b55402b16000000000000000000000000000000000010253b50657a90a5c9daece9d4bfaa947f6a553f2a150000000000000000000000001222364a5c6d8298a9bacdccd4c3b49e8977614c3d2d1a030000000000000000000000000f1f31424c617677655d4b61768ba7ac96816c575a626e786255443118080000081c3043546c8196a4b6c9d0c8c0b4afaaa8a8abb3b8c4c6b9b49e947f6a5d4b37261401000000000000000000000000000000000000000a1a2b3c4c5e6a7f95a1b3c3d3d1c1b19f927d685c4a3a29180800000000000000000000000000000000000000000000000000000000000b1f31424f61697c899ca4b3bfcdc9bcb5b1b5c1d2e5edd7c2ad98826d58432d180000000000000000000000000000000e24394e63798ea3b8ced2bda8927d68533d281300000000000000000000000b21364b60768a9fb5cad5c5a38e78634e39230e00000000000000000000000000061c31465b71869bb0c6d5c0ab96806b56412b140900000000000000000000000000011426375a70859aafc5dae5d0bba5907b66503b2611000000182d43586d8298a7adb3b8c5d5e8fae7d4c4b7b3b1b1b1b1a38e79634e39240e000000000000000c21364b61768b9fb4cac9b39e8974604a35200b000000000000000000000000000d22384d62788da4b5c9ded5c0aa95806b5645332a384f657a8fa4bacfe4d4bfaa957f6a55402a1500000000000000000000000000000000000e23384d63788dabbccfe3ecd7c1ac97826c57422d17020000000000000000000000071b2d3e4d62788a9fb4c4b6b6b7a5947f6a5947341f0f0000000000000000000000000001141f3347586161594b465773889eae99846f59484d59625948372715000000011426364b6075869cabbcc0b4afa29a959393969da6b4c0cdbdaf9d8f7b655544311d0800000000000000000000000000000000000000000e1e2f404a60728399a5b6c7d7cebdb49f8a7a645847362614010000000000000000000000000000000000000000000000000000000002142432434f5e66798699a1b0bccdcfcac6c9d2dff0efdac5b09a85705b3727150200000000000000000000000000000f24394f64798ea4b9ced2bda8927d68533d28130000000000000000000000091e32455673889db3c8d0bba5907b66503b261100000000000000000000000000051a30455a6f859aafc4d7c2ad98826d58392816030000000000000000000000000000182d43586d8298adc2d7e8d2bda8937d68533e2813000000182d42576d8297acc5c8ccd5e3effdf2e2d4cbc8c7c7c7bba6917c66513c27110000000000000010253b50657b90abbccfc4af99846f5443301c07000000000000000000000000000b2035485a71869cb1c3d3ddc8b39d8875604c473a4656697e93a8bed3e7d5c4a8927d68533d281300000000000000000000000000000000000b20364b60758a9fb5cadfefd9c4af9a846f5a452f1a00000000000000000000000000102035485a6b8095a6a1a1a1a19d8775604b3b2a1801000000000000000000000000000004172a3a474c4c473a395b71869ba49c86715c363b484d483b2b190900000000081e324556647a8c9fb1b0a29a8e847f7d7e81889aa2b4c9ccbbb19b8673604b35200b00000000000000000000000000000000010a101213131c3043546176879ca9bacde1cdbaa99d8776615443301c12000000000000000000000000000000000000000000000000000000000006152532404c5b637683959eb4bac6d4dbdee5f0fef2ddc7b29d88725544311d0800000000000000000000000000000f253a4f647a8fa4b9cfd2bca7927d67523d28120000000000000000000000021628385b70869bb0c5d3bda8937e68533e29130000000000000000000000000002172c42576c8197acc1d6c6b19b86715745321e090000000000000000000000000000152b40556a8095aabfd5ead5c0aa95806b55402b16000000152a3f556a7f94aab8b8c6c9d2dfeff3e3d5ccc8b8b8b8b8a9947e69543f291400000000000000152a3f556a7f94aac9d9c9aa957f6a55362513000000000000000000000000000005192b3c53697e93a4b6cadecbb7a697816d615858586174869cb1c7dce0cbb8a68f7a654f3a25100000000000000000000000000000000000091d31455673889db3c8ddf1dcc7b19c87725c3b2a180400000000000000000000000005192b3c4b6175888c8c8c8c8c8c7d675645321d0c000000000000000000000000000000000c1c2a333737342a43596e838f8f8f8a745443303437342b1d0d0000000000031628384b5d6b80949b9b92847a6f6a68686c76849aabbccfc9b5a3917c675237261401000000000000000000000000000005131d252728282825364658647a8a9fb4bdced7c7b6a5998372604b402f1e0e00000000000000000000000000000000000000000000000000000000000715222f3d4958617280919fa8b7c3d1deebfdfff4dfcab49f8a75604b36200b000000000000000000000000000010263b50657b90a5bad0d1bca7917c67523c2712000000000000000000000000192e43586e8398adc3d5c0ab95806b56402b16010000000000000000000000000013293e53687e93a8c5d5c9b49f8a76604b36210b000000000000000000000000000013283d53687d92a8bdd2e4d8c2ad98836d58432e1800000012273c52677c91a3a3a3b0b5c1d2e4e8d5c5b8b3a3a3a3a3a396816c57412c1702000000000006192c3c596f8499aec4cfbcab907b65503b26100000000000000000000000000000000e20364b6074879cb2bdced4c4b19f978277706e6f768399a4b6caded6c6b39e8874604b35200b0000000000000000000000000000000000021527385b70859bb0c5daf0dec9b49f89745947341f0b000000000000000000000000000e1e334657617677777777777772604a3828160000000000000000000000000000000000000c171f21221f23384d62787a7a7a7a72604a35202220190d000000000000000a1a2e3f4b60727f86867d6f645c5553535762788c9fb4cad2c2ae99846f5544311d080000000000000000000000000001132330393c3d3d3d3d3d3a4a5c677d929fb1c1d1d4c3b3a195806a5e4c3c2c1a0a000000000000000000000000000000000000000000000000000000000004121f2c3a4654606b7d8a9da5b4c0cee2eaf6f7e3cfbcab8d78624d38230d000000000000000000000000000012273c51677c91a6bcd1d0bba5907b66503b2611000000000000000000000001162b41566b8096abc0d5c3ad98836e58432e1900000000000000000000000000000e24394e63798ea7b8cccebbaa907b65503b2610000000000000000000000000000010263b50657b90a5c9dacfcfc5b09a85705b3727150200000f243a4f647a8d8d8d8d9ba3b5c9dde0ccb8a79e8d8d8d8d8d8d836f59442f1a0400000000000c2135495b73889eb3c8cab59f8b76614c36210c000000000000000000000000000000091d314556667b909fb1bfcfcebdb1a0978b8583848a99a1b3c2d3e1ccb9a896816c5443301c08000000000000000000000000000000000000192e43586e8398adc3d8ede1cdbaa98c77614c37220c0000000000000000000000000003172939465761616161616161605443301a0a00000000000000000000000000000000000000040a0c0c0b2035495a6264646464605443301c0d0b05000000000000000000101c3043546069717168604f4a3e3e39485a73889db2c8ddc9b49e8975604b35200b000000000000000000000000000a1d30414d5252525252525252525f6c8197a3b4c9dad0bfb59f8d7c665a49382816020000000000000000000000000000000000000000000000000000000000000e1b2936434b5f677a879aa2b1bdced8e6f3ebd9c9a58f7a65503a2510000000000000000000000000000013293e53687e93a8bdd3ceb9a48f79644f3a240f00000000000000000000000013293e53687e93a8bdd3c5b09b85705b38281602000000000000000000000000000b20354a6074889eb3c8d8c8ab95806b5639291603000000000000000000000000000e23384d63788dabbcb9b9b9b9b29d88735544311d0800000b20364b607379787879859bb0c6dbdec8b39e8979787878787878624d38220d0000000000000e23384d63788da7b8ccc6b19c86715846331f0a000000000000000000000000000000021527384c5e6c8197a1b2becdcebeb1aa9f9a98999ea8b3bfcfdfcdbdb49e8977624c36261401000000000000000000000000000000000001162b41566b8096abc0d5ebe9d7c7a48f79644f3a240f00000000000000000000000000000b1b2939464b4c4c4c4c4c4c4a4336251300000000000000000000000000000000000000000000000006192b3c494d4f4f4f4f4a4336251300000000000000000000000001142636434b545c5b534e4236373f4b5461768a9fb4c9dfcdb9a88d78634d38230e000000000000000000000000001025394d5f676868686868686868686875859babbccfe3cfbcab9e8978625645321e0c000000000000000000000000000000000000000000000000000000000000000b182630414d5c647784979fb4bbc8d5e3e1d2bda7927d68523d28130000000000000000000000000000162b40556b8095aac0d5d5c5a28d78634d38230e00000000000000000000000011263b51667b90a6bbd0c8b39d88735645321e0900000000000000000000000000071c3043546e8399aec3d9c5b09b86705746321e0a000000000000000000000000000b20364b60758a9fa4a4a4a4a4a49f8a75604b36200b0000081d314455606363636e8398adc3d8dfcab59f8a766363636363625a4835200b00000000000012283d52677d92a7c5d5c2ac97826d573a291704000000000000000000000000000000000a1a2f404b60738298a0b4bac7cec8bbb4b0adafb4b9c6cfd4cbbdb09f937e6959473418080000000000000000000000000000000000000013293e53687e93a8bdd3e1e1d1bca6917c67513c27120000000000000000000000000000000b1b2933363737373737373530251808000000000000000000000000000000000000000000000000000e1e2b35383a3a3a3a35302518080000000000000000000000000008182630353f46463d3a3b484c545d65728197a9bacee2d7c6a48f7a644f3a250f0000000000000000000000000012273c52677d7d7d7d7d7d7d7d7d7d7d7d7f8b9fb5cadfdac9b8a79b8574604b3a2a17040000000000000000000000000000000000000000000000000000000000000008141c303e4a59617381939faab8c5d2ccccbfaa957f6a55402a150000000000000000000000000002182d42576d8297acc2d7ccb8a78b76614b36210c0000000000000000000000000e23394e63788ea3c5d5cab59f8a76604b36210b000000000000000000000000000013253654697e94a9c6d7cab49f8a76614b36210c00000000000000000000000000091d32455673888f8f8f8f8f8f8f8f8d78624d38230d000002152737444b4e4e556a7f95aabfd4e3cfbcab8e79644e4e4e4e4d483c2b1905000000000003162839576c8197acc1d6c5a8927d68533d2813000000000000000000000000000000000000111d314455607482939fa9b4bbc8cac9c5c3c4c9cdcfcac3b7b29e96816c604f3b2a18000000000000000000000000000000000000000011263b51667b90a6bbccccccccbea9947f69543f2a14000000000000000000000000000000000b171e21222222222222201c13080000000000000000000000000000000000000000000000000000000e19202325252525201c130800000000000000000000000000000008141c202a2c353e4b4f596269717b84979fb1c7d8e7d4c4a48f79644f3a240f000000000000000000000000071c32475c71869292929292929292929292949fabbccfe3e7d6c5b5a395806b5847331f0a00000000000000000000000000000000000000000000000000000000000000000113202d3b4755606c7e8c9ea6b5c1b6b6b6ad97826d58422d1803000000000000000000000000001325365a6f8499afc4d9c8b39e88735746321e090000000000000000000000000c21364b61768ba7b8cccfbcab8d78634e38230e00000000000000000000000000000f243a4f64798fa8b9cdcebbaa907b66503b261100000000000000000000000000021528384e63797a7a7a7a7a7a7a7a7a75614b36210c0000000919273136383b51667b90a6c0d1e3dac9a8927d68533e383838352b1e0e000000000000091e32455771869bb1c6ccb9a78e78634e39230e000000000000000000000000000000000000011426374556606e7e8a979faab2b6c3bec0c1bfc9bcb4b0a59d918173604b42321d0d00000000000000000000000000000000000000000e24394e63798ea3c5b6b6b6b6b6ac96816c57412c170000000000000000000000000000000000030a0c0c0c0c0c0c0c0b07000000000000000000000000000000000000000000000000000000000000060b0d0f0f0f0f0b070000000000000000000000000000000000000111212e3c494d5c646e777f86909aa2b1bdcee5dfcbb7a68d78624d38220d000000000000000000000000041a2f44596f8499a7a7a7a7a7a7a7a7a7a7aab5bcc9daecf3e3d2c2b49f8a76614c37210c00000000000000000000000000000000000000000000000000000000000000000002101d2a37444b60687b889ba3a1a1a1a1a19a856f5a45301a05000000000000000000000000071c30435471869cb1c6dbc6b09b86715b39281603000000000000000000000000091e32465773889eb3c8dac9a5907b65503b261000000000000000000000000000000b20354b6075899eb4c9d8c8ab95806b56402b1600000000000000000000000000000a21364a5b63646464646464646464615746321e090000000009151d2023374c61778ca2b4c8dcd9c4ae99846f5c4a3d3937342b20190d00000000000b21364b60768a9fb4cac9b39e8974604a35200b0000000000000000000000000000000000000009192838454b606878828b959ca5a6a9ababaaa8ab9f9b92877c6c6055443124140000000000000000000000000000000000000000000c21364b61768ba7a1a1a1a1a1a1a199846e59442f19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2e3f4b5a636f7a838b949ca4b0b4c0cedbe4d5c4b29d88735a4835200b00000000000000000000000002172c42576c8197acbdbdbdbdbdbdbdbdbdbfcacfdae7e4e4e4e1cdbaa9927d67523d271200000000000000000000000000000000000000000000000000000000000000000000000c192731424e5d6578868c8c8c8c8c8c8c87725d48321d080000000000000000000000000b20354a6074899fb4c9d8c3ad98836e58432e1900000000000000000000000000031628395b71869bb0c6d2bda8937d68533e28130000000000000000000000000000081d3144556f859aafc4dac5b09a85705b3a2a170400000000000000000000000000071a2d3d4a4e4f546064666560564f4b4639281603000000000002080b1f33475870859aafc3d3dfcab59f8d7a645b514f4d483b342b1d0d0000000010253a50657a8faabbccbfaf99846f5443301c0700000000000000000000000000000000000000000a1a2832424e5a636d7880878c919495969593918b857d74665e4b44372614060000000000000000000000000000000000000000000a1e33465773898c8c8c8c8c8c8c8c8c86715c47311c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4b5d6578848f999faab1b6c2c8d1dee0d3c6b8a695806b563c2b190500000000000000000000000000142a3f54697f94a9becfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfd7c7ab95806b56402b1600000000000000000000000000000000000000000000000000000000000000000000000009151d313f4b5a62747777777777777776614c37210c000000000000000000000000000d23384d62788da8bacdd4bfaa957f6a55402a150000000000000000000000000000192e43596e8398aec3d5c0aa95806b55402b16000000000000000000000000000001152737576c8196acc1d6c8b39e89735847331f0a000000000000000000000000000012223344505f6773797c7a756b6056463a2917040000000000000004182a3a52677c91a5b6cadfcfbcab9d87796c666462594d483c2b1905000000152a3f546a7f94a9c5b8b3a1917c6751362513000000000000000000000000000000000000000000000a151d313c494d5a626b72777c7e8081807e7c76706860564d403126190900000000000000000000000000000000000000000000031729394c617677777777777777777776614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a657b899aa2aeb4bbc8c9d3dcddd5cbc3b6a89d8877614c37220e000000000000000000000000000012273c52677c91a7b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ad98836e58432e19000000000000000000000000000000000000000000000000000000000000000000000000000214212e3c48556061616161616161615847331f0a0000000000000000000000000011263b51667b90a6c6d7d5c4a6917c66513c27110000000000000000000000000001162c41566b8196abc0d6c2ad98836d58432e1800000000000000000000000000000014293e54697e93a9bed3ccb8a78c76614c37210c000000000000000000000000000a1d304050626b7d878f918f898074615846331f1100000000000000000c20364b6074879db2bdcedac9b7a59d8b827c797772625a4834200b000000132536596e8399a2a2a79e958373604b35200b000000000000000000000000000000000000000000000002141e2c353c484d56596266696b6c6a69666158534b4538301d14090000000000000000000000000000000000000000000000000b1f33475861616161616161616161615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4d6278899ea7b3c0caced9dedfd2c9c4b7b3a49c8a7b655847331f0a00000000000000000000000000000f243a4f64798fa4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49b86705b46311b000000000000000000000000000000000000000000000000000000000000000000000000000003111e2b37444b4c4c4c4c4c4c4c4c473a2a170400000000000000000000000000142a3f54697f94a9bed4cbb8a68d78624d38230d000000000000000000000000000914293e53697e93a8bed3c5b09b85705b38271502000000000000000000000000010a13283d52687d92a7bdd2d6c5a28d78634d38230e000000000000000000000000001024394d5f6b80929da6a6a89e958576614c3f2f1c0800000000000000081d314455657b909fb1bfcfd4c3b7a99f97918e8c8678624d38220d0000071c30435473888d8d8d8c898074605544311d08000000000000000000000000000000000000000000000000000e19202b34383b484d515456565553514c473a3631271a1201000000000000000000000000000000000000000000000000000417293a474c4c4c4c4c4c4c4c4c4c4c473a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586e8398a7b8c5d0dfe2d8cecac1b5b0a69d93867a655d4b3a2a180400000000000000000000000000000d22374c62778c8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000e192731363737373737373737332a1c0c000000000000000000000000000417293a586d8298adc2d7c8b39e88735a4935200c000000000000000000000003111c23263c51667b91a6bbd0c8b29d88735645311d09000000000000000000000005121d25253d52677d92a7bcd2d8c8a38e78634e39230e000000000000000000000000061a2c3d51677c919eb2b7c4b9b4a399836f5d4b38230e00000000000000021527374b5d6c8197a1b2beccd4c7bab4aca6a4a4947f6a553f2a1500000b20354a60727878787877736b605645372614010000000000000000000000000000000000000000000000000000060d1920222b34373c3f4041403e3c373329201d150a000000000000000000000000000000000000000000000000000000000c1c2933373737373737373737373733291c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b9fb4c5d6e4dfd2c8bbb4ada39b93887e74645c4b3f2e1c0c0000000000000000000000000000000b1f344759647a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a644f3a240f000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2022222222222222211f170c00000000000000000000000000000a1f33465871879cb1c6d9c3ae99836e593c2c1906000000000000000000000011222f383b444e63798ea3c5d6cab49f8a75604b36200b0000000000000000000000122330393643546a7f94a9bfd4cebbaa8c77624d37220d0000000000000000000000000c2135495b72879cb2bccbd4cdc1b3a1907b65503b2510000000000000000009192f3f4b60738298a0b4b9c6cccdc9c1bbc2ae98836e593828160200071c30435460636363636159554b45382819090000000000000000000000000000000000000000000000000000000000050b0d19202227292b2c2b2926211f170c09020000000000000000000000000000000000000000000000000000000000000c171f21222222222222222222211f170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90aabbcee3e2d2c1b5aa9f988e857d756960564a3e2e21110000000000000000000000000000000005182a3b4b5c646464646464646464646464646464646464646464646464645c4b37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0c0c0c0c0c0c0c0c0a040000000000000000000000000000000c21364c61768b9fb5cad4c4a9947f69543f2a1400000000000000000000000d1d2f404c505a5b61768ba7b9cccfbcab8d78634d38230e000000000000000000000a1a30414d52546070859bb0c5dbcab49f8a75604b36200b0000000000000000000000000e23384e63788da4b6cadfe6e1d0bfac97816c57422c17000000000000000000111d314455607482929ea8b3b8c5c5c7c9c7b19c87725645321e090000132536434a4d4d4d4d4c473a3632281a0a000000000000000000000000000000000000000000000000000000000000000000050b0d111416171514110c0a0400000000000000000000000000000000000000000000000000000000000000000000040a0c0c0c0c0c0c0c0c0c0c0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8c8d9e7d4c4b5a39b8b8279716860564b45382d20110200000000000000000000000000000000000d1d2e3e4b4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b3e2e1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91abbccfcbb7a68e79634e39240e0000000000000000000005182b3b4c5e666f717174899eb3c9d9c9a5907b65503b2610000000000000000000021527384d5f6770737f94a3b5c9d6c6b09b85705645311d0900000000000000000000000010253b50657a90a5c3d3e6faedd9c4ae99846f59442f1a000000000000000000011426374556606d7d89959ea7abb0b2b3b4b39f8a75604b36210b000008182530353838383837342a211e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d111415161513100c0b0400000000000000000000000000000000000000000000000000000014293e53697e93a8bed3dfcbb7a69b85796d645c534b4538353633291d150a000000000000000000000000000000000010202e373a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a372e20100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c8196acc9dac8b29d88735b4a36210c000000000000000000000b20344859667c848686858b9fb4c9d2bda8927d68533d2813000000000000000000091d314556677d8588949daec1d1ccb9a8947f6a55382715020000000000000000000000000f24394e64798ea6b8cbe0eae4d3c3ad98826d58432d180000000000000000000009192738454b5f6777808890959a9c9e9f9d9b8e79644f39240f00000008131c2023232323221f180c0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e2020202020202020202020090300000000070d0f20202020202020202020200903000000000000000000040a2020202020202020202020202020202020202020202020202020201d1b150b000000000000000000000000000002080d19202227292b2b2a2826221f180d0b0500000000000000000000000000000000000000000000000012273c52677c91a7c6d7ddc8b39d8876635b4f4a3e3637444b4c463a32281a0a0000000000000000000000000000000002101b2225252525252525252525252525252525252525252525252524221b100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071d32475c72879cb1c7d4c4ac97816c573d2d1a07000000000000000000000d22374d62778b999b9b9b9fa9bacdd5c0aa95806b55402b160000000000000000000b20364b60758b9a9ea6aebbcbcbbcb49e8976614c37210c000000000000000000000000000b20354b6074889eb3bfced8d2c6b6a5927d67523d281200000000000000000000000a1a2731414d58616a757b808587898a88868178634d38230e0000000000070b0e0e0e0e0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212435353535353535353535351e160b0002101b222435353535353535353535351e160b000000000000000c171f3535353535353535353535353535353535353535353535353535353230281d0f00000000000000000000000009151d202b34373c3f40403f3e3b37342a2220180d030000000000000000000000000000000000000000000010253a4f657a8fa8bacdd7c2ad97826d58493d393b484c556061584b45382815020000000000000000000000000000000000080d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e33495e73889eb3bbc8b7a6907a65503b2510000000000000000000000010253a50657a8fa9b0b0b0b4bac7d7d1c2ad98826d58432d180000000000000000000b20364b60758a9fb3b8c5c9c5b8b39e937e685847331f0a00000000000000000000000000081d314455697f94a1b4bbc8c2b5a89c8774604b36200b0000000000000000000000000a151d313a474c5660656b7072747473716c635a4935200c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36394a4a4a4a4a4a4a4a4a4a4a32281b0b10202d36394a4a4a4a4a4a4a4a4a4a4a32281b0b00000000000c1c29334a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a48443a2d1d000000000000000000000412192731363b484d515455555453504c473b37342b1e170b0000000000000000000000000000000000000000000b21364b6075899fb4c9d9c4af9a846f5c504e4e5159626b74766f605645321d120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c81969faab5b39d8874604b35200b00000000000000000000000e23384e63788daabbbbbbbbbbbbbbbbbbb09a85705b372715020000000000000000091d32455673889db3c6b9b3afa69e91806b604e3a2a170400000000000000000000000000011426374b607383969faaabaaa49c8a7a645645321d090000000000000000000000000002131c2a3338454b50565b5d5e5f5e5c574d493c2c1906000000000000000000000000000000000000000000000b0b0b0b0b0a080000000002090b11131515130f0b08010000000000000000000000000000000000071a2d3d4a4e606060606060606060605e463928161b2d3e4a4e606060606060606060605e46392816030000000417293a465e60606060606060606060606060606060606060606060606060605d584b3a190900000000000000000715222f37444b53596266696a6b6a68656159554d483b33291b100200000000000000000000000000000000000000091e3245566f8499aec0d1cab49f8c7a6a656364676e7780898b8374604b40301d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6074818b989fab96806b5443301c0800000000000000000000000b20364b60758a9fa6a6a6a6a6a6a6a6a6a69d88725544311d080000000000000000021528385b70869ba5a4a89e9992887d6b625142311c0c000000000000000000000000000000091d3144556073818b939695908679645c4a382815020000000000000000000000000000000c181f2832363b404547494a48464138352c1e0e0000000000000000000000000000000000000000070c0e20202020201f1d14120c0a161e2126282a2a2824201c1408050000000000000000000000000000000c21364a5b7075757575757575757575705746321e22364a5c7075757575757575757575705746321e090000000a1f3346587075757575757575757575757575757575757575757575757575757269583726140100000000000008162532404c55606971777c7e80807f7d7b77716a62594c46392e2013050000000000000000000000000000000000000216283850667b90a2b4c6cebbaa9e897f7a78797c838b969ea197816c5e4d3c2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d324556606b78838d9a8c78624d362614010000000000000000000000081d31445572879191919191919191919191918c75604b36200b000000000000000000192e43586e8391908f8d89847d75675f514434241400000000000000000000000000000000011426374455606b787e81807b72635b4a3e2d1a0a0000000000000000000000000000000000040a161e21262b3032343533312c2320190e00000000000000000000000000000000000000010f1a2124353535353535322a2720202832363b3e403f3d393530261f180d01000000000000000000000000000e24394e63798a8a8a8a8a8a8a8a8a8a75614b362124394e647a8a8a8a8a8a8a8a8a8a8a75614b36210c0000000c21364c61768a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a87725544311d08000000000003162633434f5e66747e868c919495959493908c867f776b61574b3e302314060000000000000000000000000000000000000a23384c5e70859ba8b9c9c8b9a79e958f8d8e91989faab3b19f917c665a4834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152838454b5b636e7a84836e5a49351808000000000000000000000000021527374f657b7c7c7c7c7c7c7c7c7c7c7c7c7c74604b36200b0000000000000000000e24394e63797c7b7978746f6860564d4134261606000000000000000000000000000000000009192737444b5a62696c6a6560544a3d2d2010000000000000000000000000000000000000000002090b10161b1d1f1f1e1c170e0c0600000000000000000000000000000000000000000f1f2d36394a4a4a4a4a4a483f3b323438454b50535555534f4b4336342a1d14090000000000000000000000000c21364b61768ba79f9f9f9f9f9f9f8e78634e392321374c61768ca89f9f9f9f9f9f9f8e78634e39230e0000000a1f33465874899e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8a75604b35200b00000000001121334450616a7c87939ca4a6a9aaaaa9a8a5a49c958b8176645c4d41312414050000000000000000000000000000000000091c2f404e63798a9eabb9c6c5b9b3aaa5a3a3a6adb4bbc8bdb39e8978624d38220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a28323c494d5c646f75614b3c2b1900000000000000000000000000000923374b5d6566666666666666666666666666605645321d090000000000000000000c21364a5b63666664636054534b45383023160800000000000000000000000000000000000000091927313c484d545655504a43362d1f1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e60606060605f5d544f43484c566066686a6a686460544c473b3126190d00000000000000000000000a1e33465773899eb3b5b5b5b5b5a6907b66513b261f33475874899eb4b5b5b5b5b5a5907b66503b26110000000417293a5c71869cb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbaa8d77624d38220d000000000b1b2f4050626b7f8d9ca5b1b5c2bebfc0bfbdc2b5b1a99f96877a675f4e423123130100000000000000000000000000000000001121364a5b667c8d9ea8b4c0cac9bfbab8b9bcc3c9cbc5b8b3a298836e58432e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2c353e4a4f57615746321e0e0000000000000000000000000000081c2e3f4b4f515151515151515151515151514b4538281502000000000000000000071a2d3d4a4e51504f4d4b43363632281a120500000000000000000000000000000000000000000009151d2b35383e41403b353025180f010000000000000000000000000000040a0c12121212100c0a040000000000000000000000000000000000000000000000000000000000000c21364a5b707575757575747269614f59626d757b7d7f7f7d79746b62594b44372b1d0f01000000000000000000031729395c71869bb1c6cacacabda8937e68533e29172a3a5c71879cb1c6cacacabda8937d68533e281300000000192f44596e8499aec3cacacacacacacacacacacacacacacacacacacad8c8a48f7a654f3a2510000000031629394c5e6b80949fabb6c3c9d2d3d5d4cecdd2c9c7bab4a59d8b7d68604e41311e0b0000000000000000000000000000000000071a2d3d4d5e667c899aa2afb4bcc9c3c4c4c3c1c4b7b3a79e948477614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e19212d3639464b463929160000000000000000000000000000000011212e373a3c3c3c3c3c3c3c3c3c3c3c3c3c3632281a0a00000000000000000000000f1f2d36393c3b3a38353026211e160a000000000000000000000000000000000000000000000000020e192022292c2b25201c13080000000000000000000000000000000c171f212727272725211f170c05000000000000000000000000000000000000000000000000000000000e24394e63798a8a8a8a8a8a877f695f6777828990939594928e8880776a6055483b2c1f0f00000000000000000000192f44596e8499aec3d9dfd5c0ab95806b56402b1a2f445a6f8499afc4d9dfd5c0aa95806b55402b1600000002172c41576c8196acc1d6dfdfdfdfe6dfddd6d6d6d6d6d6d6d6d6d6d6d2bca7927d67523d28120000000a1e324657657b8d9fb5bcc9d3ded6ccc9bfb9b8b9bec8cbc3b6a99f8d7e68604e3a25110000000000000000000000000000000000000f1f30404d5e667984909a9fababadafafaeaca9a69d95897f73615947341f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101b2229323632291b0b0000000000000000000000000000000003111c232527272727272727272727272727201d150a000000000000000000000000010f1a212427262423201c140b0902000000000000000000000000000000000000000000000000000000050b0d141715100b07000000000000000000000000000000000c1c2933373c3c3c3c3a37332a20190d0000000000000000000000000000000000000000000000000000000c21364b61768ba79f9faa9f9d927d697d89979ea8a8aaaaa8a69d968a7f736259493d2c1f0e000000000000000001172c41566c8196abc1d6ebd8c3ad98836e58432e192d42576c8297acc1d7ecd7c2ad98826d58432d180000000014293f54697e94a9bed3e9fff1e1d4cac7c1c1c1c1c1c1c1c1c1c1c1c1bfaa947f6a553f2a150000011426374b6175889dabbccfdae2d4c6b9b4aaa4a2a4a9b2b7c4c7baab9f8d7d68523d281300000000000000000000000000000000000001122230404c5b63707b848b919598999a9997948f888076696055473a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b161e211e160b00000000000000000000000000000000000000080e10111111111111111111111111110b0902000000000000000000000000000000070c0e11110f0e0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a474c51515151504c473a342b1d1002000000000000000000000000000000000000000000000000000a1e33465773899eb3b5bbb4b19c867e8d9ea7b3b9c6bfbfc4b7b3a89f948577635b493d2c1c0c000000000000000014293f54697e94a9bed3e9dac5b09b85705b3828152a3f556a7f94aabfd4e9dac5af9a85705a3626140100000011273c51667c91a6bbd1e6fae6d4c3b7b2acacacacacacacacacacacacacac97826c57422d170000081d314455697e93a6b7c9dae7d4c4b7a89e958f8d8f949da6b4bbbfb19f937e69543e2914000000000000000000000000000000000000000412222f3d494e5d656f777c8083848584827e7a746b61584b44372a1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475861676767676561584d483b2d201000000000000000000000000000000000000000000000000000031729395c71869bb1c6cec9b6a49c949fabb9c5ccd6ced4d4cbc6bab4a39b8879635b493a2917040000000000000012273c51677c91a6bcd1e6ddc8b39d88735645321d283d52677d92a7bcd2e7dcc7b29d87725443301c080000000f24394f64798ea4c6d6e9f4dfcab7a59d969696969696969696969696969696846f5a452f1a00000b20354b6074879db2c4d5e7dfcbb7a69d8a7f79787a7f88959faab3a197816c604f3b2712000000000000000000000000000000000000000004121f2c353f4b505962676b6e6f6f6e6c696460554c463a3127190c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f1315161513100c0a0400000000000000000000000000000000000000000000000000000000000000000000070b0e121415161513100c0b04000000000000000000000000000000000000000c21374c61767c7c7c7c7a776d62594a3e2d1c0c00000000000000000000000000000000000000000000000000192f44596e8499aec3d9d3c2b6b1a9b5bcc9b9b6b5b9c2cacfd7cdc1b4a69d8879635847331f12000000000000000f24394f64798ea4c6d7e9dfcab59f8a75604b3620253a50657a8fa5c9d9ebdfc9b49f8a75604b35200b0000000c21374c61778ca8b9cde1f2ddc7b29d878181818181818181818181818181817f6a543f2a1500000f253a4f647a8fa5b7cae2e4d1c1b29d88786a6463646975808c9b9e978373604b42321f0c000000000000000000000000000000000000000000010f1a212f373b484c5256585a5a5957544f4b443733291d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1c2020202020201f1c160c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000608141c2024282a2b2a2925211f170c0a04000000000000000000000000000000000000000000000000000000000708131c202327292a2b2a2826221f180f0d07000000000000000000000000000000000b20354b6075879191918f8b8278645c4a3a291704000000000000000000000000000000000000000000000001172c41566c8196abc1d6e0d3cac7c4b7b2aaa4a0a0a4acb5bcc9d7d1c4b7a69c8676614c402f1b0b0000000000000c22374c61778ca8bacde1e3cfbcab8d78634d382323384d62788dabbccfe3e2cebbaa8c77624d37220d0000000a1f33475874899eb4c9def0dbc6b09b86716c6c6c6c6c6c6c6c6c6c6c6c6c6c6a614f3c27130000152a3f546a7f94a9c3d4e6ddc9b5a3907b655a4f4d4f57616b7b8588817561554431241402000000000000000000000000000000000000000000000006111c232a34373c4043444544423f3a3531261f170c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c203135353535353534312b221f180c000000000000000000000000000000000000000000000000000000000000000000000000020e1920263035393d3f403f3e3a373329211f170c0400000000000000000000000000000000000000000000000005101b22253035383c3e3f403f3e3b37342a24221b10090000000000000000000000000000081d314455697e93a7a6aa9f98887a645847331f0d00000000000000000000000000000000000000000000000014293f54697e94a9bed3e9e5d3c3b6a69d948e8b8b8e979fabbac7d7d4c4b6a498836e5e4c3928160300000000000a1f34475974899fb4c9deecdac9a5907b65503b2620354b60758a9fb4cadfead8c8a48f7a644f3a250f00000004172a3a5c71879cb1c6dcf1dec8b39e89735757575757575757575757575757544f4332200d00051a2f445a6f8499afc4d9eedbc5b09b85705d4c3c3839464b5d6570736c615746372614060000000000000000000000000000000000000000000000000000080d181f22272b2e2f302f2d2925201d1409040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818263035474a4a4a4a4a4a49474037332a1c100200000000000000000000000000000000000000000000000000000000000000000009151d2c3536434b4f5255555553504c473a3733291f170b000000000000000000000000000000000000000000000d19202e3736434a4e525355555553504c473b3a372e241d1205000000000000000000000000011527374b6075889eb3bbb4a69d8776614c3b2b1805000000000000000000000000000000000000000000000012273c51677c91a6bcd1e6dfcab6a59c887f79767579828d9fa9bac9d9d3c3b2a0907c665746321e0a000000000004182a3a5c72879cb1c7dce7d2bda8927d68533d281d31445573889db2c8dde6d1bca7917c67523c2712000000001a2f44596f8499aec4d9eee0ccb8a78b76614b4141414141414141414141413f3c3225150300071c32475c71879cb1c6dcead4bfaa957f6a553f2f2328323f4b4f5b5e574b46392819090000000000000000000000000000000000000000000000000000000000050b0d1216191a1a1917140f0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636434b5c6060606060605f5c554c473a2d201000000000000000000000000000000000000000000000000000000000000000000b1927313c494d546064686a6b6a68656158544c473a33291b120400000000000000000000000000000000000003111d2b343e4b4f54606367696a6b6a68656159564f4b3e382f20190d000000000000000000000000091e3245576a7f95a8b9c4b7a697816c594834200b00000000000000000000000000000000000000000000000f24394f64798ea4c6d7e9dcc7b29c87766a646160646d7c8b9fabbccfe3cfbeb29d8775614b3828160200000000001a2f445a6f8499afc4d9ead5c0aa95806b55402b1527375b70859bb0c5dae9d4bfa9947f6a543f2a1500000002172c41576c8196acc1d6ebe8d5c5a38e79634e392c2c2c2c2c2c2c2c2c2c2c2a272015070000091e33495e73889eb3c8dde6d0bba6917b66513c2611161e2e373a4649423632281b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354607175757575757574716b61584a3e2d1e0e0000000000000000000000000000000000000000000000000000000000000b1b2937444b5a626c74797d7f807f7e7a76706961584c463a2f221507000000000000000000000000000000000211222f3b484d5c646d74787c7e7f807f7d7b77726c645c514c40342b1d110300000000000000000000031628394c6176899eb4c8c4b49f8b77624c3a291704000000000000000000000000000000000000000000000c22374c61778ca8bacde1dcc7b29d8772584f4b4b4f5e667c8d9fb4c3d4dfcab7a595806b5645321e090000000002172d42576c8297acc1d7ecd7c2ad98826d58432d192e43586e8398adc3d8ecd6c1ac97816c57422c1702000000142a3f54697f94a9bed4e9e5d0bba6907b66513b261717171717171717171715130d030000000a20354a5f758a9fb4cadfe4cfbaa58f7a65503a251003101b222530332d211e160b000000000000000000020c12140c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074868a8a8a8a8a8a89868077645c4a3c2b1906000000000000000000000000000000000000000000000000000000000a1a293a4655606b7881898e92949594938f8b857f766b61584c403325160800000000000000000000000000000010202f404c59626f7a83898d919394959493908c87817a71665e4d483c2f211103000000000000000000000a1f3347586c8196aabbcebaa996806b5846331f0a000000000000000000000000000000000000000000000a1f34475974899fb4c9dedfcab49f8a75604b3636404c5e6b8096a5b7cbdfd4c3b39e8875604b36210f0000000000152a3f546a7f94a9bfd4e9dac5b09a85705b3727152b40566b8095abc0d5ead9c4ae99846f59442f1a0000000012273c51677c91a6bcd1e6e8d3bea8937e69533e2914020202020202020202000000000000000a20354a5f758a9fb4cadfe4cfbaa58f7a65503a25100000080e101b1e170c090300000000000000000006141f2629211e160b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354657b90a19f9f9fa89e9c95887a645a483520120000000000000000000000000000000000000000000000000000000216283846586174808b969ea7a7aaaaaaa8ab9f9b948a8176665e504334261607000000000000000000000000000d1d2e3e4c5e6678848f989ea7a7a8aaaaaaa8a5a59c968f867c6f625a4b3f2f21110200000000000000000004172a3a4d62788b9fb4c9c7b39e8976614c3828150200000000000000000000000000000000000000000004182a3a5c72879cb1c7dce2cebbaa8d77624d38222f404b6074879db2c6d7e0ccb8a7927d68523d2d1a070000000012273d52677c92a7bcd1e7ddc7b29d88725544311d293e53687e93a8bdd3e8dbc6b19c86715c392917030000000f243a4f64798fa4c6d7e9ebd5c0ab96806b56412b16010000000000000000000000000000000a1f34495f74899eb4c9dee6d0bba6917b66513c261100000000000609020000000000000000000000021424323b3e3632291f170b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364b5d6e8399aabbc6b9b4b1a69d8978624d403019090000000000000000000000000000000000000000000000000000081e324556617684959fa9b3b8c5bfc0bfc9bcb4b0a89f96887c6a62514534251504000000000000000000000005182a3b4b5c667c899aa2adb3b8c5bebfc0bfbdc3b6b2aba39b918478655d4b3f2e2010000000000000000000000c203448596d8297abbcccb9a8947f6a5645321d08000000000000000000000000000000000000000000001a2f445a6f8499afc4d9ead8c8a48f7a654f3a251d324556697e93a8b9cde1d5c5b09b85715b4a36210c0000000010253a4f657a8fa4c8d8eadfcab49f8a75604b3520263b51667b90a6bbd0e5dec9b39e89745746331e0a0000000c22374c61778ca8bacde1edd8c3ae98836e59432e1900000000000000000000000000000000081d32485d72879db2c7dce7d2bca7927d67523d2812000000000000000000000000000000000000000c1f32424f534b463933291f170c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182f3f4e63798b9fb4c5ccc9c4b7a79a84705e4c3726140100000000000000000000000000000000000000000000000008182f3f4b6074859aa2b4bac7ccd5d4d5d3d9cfcac6bab4a69d8d806c63514433231200000000000000000000000b1f344859647a8b9ea7b4c0c8ccd6d3d4d5d4d2d3cac7c1b5b0a199897b655d4b3e2d1b0b00000000000000000005192b3b4e63798c9fb5cac6b39d8875604b36261401000000000000000000000000000000000000000002172d42576c8297acc1d7e7d1bca7927c67523d271528384b6176899eb4c9deddc9b5a38e79634e39240e000000000d22374d62778caabbcee2e2cebbaa8d78624d382324394e63798ea3c6d6e8e0ccb9a78b76614c36210c0000000a1f34475974899fb4c9def0dbc5b09b86705b39281603000000000000000000000000000000051a30455a6f859aafc4daead5c0aa95806b553726140100000000000000000000000000000000000012263b4f606961574c463a33291f180c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112135495b6c8196a7b8ccded5c5b4a2917c665544311d0a0000000000000000000000000000000000000000000000001325364c5d6d8297a3b4c0ced8d6ccc9c1bec0c6c9d2cdc4b8ab9f95816c625041301d0d000000000000000000071b2e3e4c6277899ea9b8c5d0dee0d3cac7c1c0c2c8ccd6d2c9bfb3a79e8b7b655c4a392916030000000000000000000d2135495b6e8399aec0cbb7a6937e685443301c08000000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9d4bfa9947f6a543f2a151e3246576e8399aec3d8e4d2c1a9947f6a54362513000000000b20354b60758a9fb4c9dfebd9c8a7917c67523c2c21364c61768ba8b9cce1e8d6c5a38e79634e39240e00000004182a3a5c71879cb1c6dcf1ddc8b39e88735745321e0900000000000000000000000000000002172c41576c8196acc9d9ebd9c4af99846f5544311d0800000000000000000000000000000000000014293e53697e766a61584c473a332a1f180d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4c6176899eb3c2d3e3d1c0b19c8673604b3928160300000000000000000000000000000000000000000000071c304354657b909fb1c1d1e2d5c5b9b3aba8aab1b5c2cdd5c9bcb59f95806a5f4d3b2a180500000000000000000d22364a5c6d8298a7b8c7d6e3daccc3b6b2ababadb3b8c5ced8d0c5b8a99e8a7a645746321e0f000000000000000000061a2c3d4f647a8fa2b4c8c4b29c8773604b35201100000000000000000000000000000000000000000012273d52677c92a7bcd1e7d6c1ac97816c573a2a1816283952677d92a7c6d6e9dac5af9a85705443301c07000000081c30435472879db2c7dceed9c4ae99846f5b49352133465774899eb3c9dee5d0bba6907b66513b2611000000001a2f445a6f8499afc4d9eee0cbb8a68b76604b36210b0000000000000000000000000000000012273d52677d92abbccfe3dec8b39e8874604b35200f0000000000020802000000000000000000001c32475c7186887f766a61584c473a342a20180d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f334758697e93a4b6cadedecab6a4937d685745321e0c000000000000000000000000000000000000000000000b20354a6073869bb1bdcedfd5c4b7a79e9693959ca4b4bac7d7cfbdb59f8d7c675948341f10000000000000000417293a4f647a8fa0b2c5d5e5daccbcafa49c9695989ea7b4bbc8d8d5c7b9a89d8775614b3d2d1a070000000000000000000f22374b5c70859aafc1cab6a5917c67513f2f1c08000000000000000000000000000000000000000010253a4f657a8fa4c8d8eadac5af9a85705847331f0e23384e63788da8b9cde1dec9b49e8974604a35200b000000011426365a70859aafc5daefdfcab49f8b78634d3f2e29395c71869cb1c6dbe8d3bda8937e68533e291300000002172c42576c8197acc1d6ece7d5c5a38e78634e39230e000000000000000000000000000000000d22374c62778b9fb4cadfe0ccb8a7907b66503d2d180800050b0d181d170c0a03000000000000001a2f44596f8499948980766b61584c473b342b20190d0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b6074869cb1c0d0e6d3c2b39d8875604b3a2a180400000000000000000000000000000000000000000417293a51667b90a3b5c9dbe0cbb7a69d89817e8086929fa9bac7d8cfbcab9e8977624c3f2e1b080000000000000a1f3347586d8298adbecfe3e0cdbcaf9e958781808389949faabbc8d8d6c6b7a696806b5b4a36210b000000000000000000071b2e3e50667b90a3b5c9c3b09b85715d4b37231000000000000000000000000000000000000000000d22374d62778caabbcee2dfcab49f8b77614c37221120354a6074899eb4c9dee1ccb9a88d78634d38230e00000000182d42586d8297adc2d7ece2cebbaa98826d5d4b3a2944596f8499aec4d9ead5c0ab95806b56402b1600000000152a3f546a7f94a9bfd4e9e5d0bba5907b66503b2611000000000000000000000000000000000b1f34475970859bb0c5d6e8d5c5ad98836e5b4a3626150e181f222d322d211e160b000000000000172c41576c8196a79e958980776b62594d483b342b20190e06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d314455667c91a2b3c8d9dfcbb7a6947f6a5847331f0e00000000000000000000000000000000000000000a1f3346586f8499aec2d2e5d4c3b39d88786c696b717d8b9fa9bacedac9b8a798836e5d4b3722100000000000000c21374c61768a9fb4c9dee5d2c2b09e9580746c6b6d757f8c9faabbcee2d4c4b49f8b79634e392917030000000000000000001023384c5e71869bb1c3c9b5a3907b65503e2d1b07000000000000000000000000000000000000000b20354b60758a9fb4c9dfe2cebbaa937e6853402f181c30435471869bb1c6dbe8d6c6a5907b65503b261000000000152b40556a8095aabfd5eaebd9c8b59f8d7b6558473942576d8297acc2d7ecd7c1ac97826c57422d170000000012273c52677c91a7bcd1e6e8d3bda8937e68533e29130000000000000000000000000000000005182a3b53687d93a7b9cce0dfcab49f8c796354433228232a34374247423632291b0b000000000014293e54697e93a9b3a89e958a80776c62594d483c352b20190e060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374c5e6f849aaabbcee2d4c4b39e8977614c3c2c1906000000000000000000000000000000000000000c21364c61768a9fb4c9dfdfcab6a5917c675a53555f677b8b9fb4c1d2d6c5b2a08f7a654f3e2e1b07000000000013253653687d92a9bacde1dec9b5a496806b60555656606a7c8c9fb4c4d4e2cebbaa98826d5746331e0a000000000000000000091c2f4052677d92a5b6cac1af9a846f5c4a36220e00000000000000000000000000000000000000081c30435472879db2c7dcebd9c8b19c86715e4c36251325365a70859aafc5dae7d2bda7927d68523d28130000000013283d52687d92a7bdd2e7f6e3cfbcab9c87766157493c566c8196abc1d6ebd8c3ad98836e58432e19000000000f243a4f64798fa4c7d7e9ead5c0ab95806b56402b1601000000000000000000000000000000000d21364b6175899eb3c4d4e3cfbcab9a8473604b4538393b484c575d574b4639291a0a0000000011263c51667b91a6c6b9b4a89e968a81776c625a4d483c352c211a0f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192f404e63798c9fb4c6d6e1ccb9a896816c5a493520100000000000000000000000000000000000000012273c52677c91aabbcee2dcc7b29d8773604a3c414d5d687e93a3b5c9ddcfbfaf9a84705c4a36220b00000000071c3043546e8398adc4c9ced2c1b19c8674604b4438454b5e6a7f94a6b7cbdfd8c8b49f8a76614c36210c000000000000000000001220354b6074879db2c4c7b3a18e79644f3c2c1906000000000000000000000000000000000000011426365a70859aafc5daefdec9b5a4907b665443301c2f44596e8499aec3d9e8d3bea9937e69543e29140000000010253b50657a90a5c9d9ebfeecdac9b6a59a8475625a51566d8298adc2d7edd9c4ae99846f59442f1a000000000d22374c62778ca9bacde1edd8c3ad98836e58432e190000000000000000000000000000000000091e3246576a7f95a6b7cbdfd9c9b4a296806d6056504e5059626d726c615746382818080000000e24394e63798eaabbccc6b9b4a99f968a81786c625a4d493c352c211a0f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001221364a5b6c8197a8b9cce1d6c6b49f8b78624d3e2d1b07000000000000000000000000000000000002172c41576c8196acc8d8ead5c0ab96806b544330303f4a6072859bb0c3d3dcc8b4a28f7a644f392917030000000b20354a6075889da6aeb4bbc7b5a3907b665544312832404b6074889db2c8dde1cdbaa9917c66513c261100000000000000000000081d314455687e93a6b8cbbfad98836e5a4935200c00000000000000000000000000000000000000182d42586d8297adc2d7ece5d2c2b09b8572604a3b2b2f44596f8499aec4d9e9d4bfa9947f6a543f2a15000000000e23384d63788dabbccfe3f7f7e7d3c3b4a29a85786c676874879db2c7ddedd8c2ad98836d58432e18000000000b1f34485974899fb4c9def0dbc5b09b86705b3828160200000000000000000000000000000000031628394b6175889db2bdceded1c0b09e9681746a6563656c77828782756156453625130000000b21364b60768a9fb4bcc9cdc7bab4a99f978b82786d635a4e493d362d211a0f0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c6277899eb4c3d4e2cebaa998826d5c4a362211000000000000000000000000000000000004172a3a5b70859bb0c5dae9d7c7a6907b665136251c304354667b90a5b6cadfd1c0ad97826d5746331e0a0000000b20364b6074808890999faaaaa99b86715e4c3727151d3144556b8095aac0d5e9d7c7ab96806b56412b1601000000000000000000011426374b6075889db3c6cab49f8b78634d3b2a1804000000000000000000000000000000000000152b40556a8095aabfd5eaf0ddc9b5a3927d685948392d3d5b70859bb0c5dae9d3bea9947e69543f2914000000000b20364b60758a9fb4cadff4f5e5d7cdc0b4a39b8a817c7d839aa5b7cbdfecdac9ab96806b56412b160000000005182a3b5c72879cb1c7dcf1ddc8b39d88735645321e0900000000000000000000000000000000000b1e324657667c919fb1c0d1decdbcb09f97877f7a787b818a979c978574605443301c130200091e3245576e82979fabb5bcc9cdc7bab4a99f978b82786d635b4e4a3d362d221b10080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f3447596a7f94a5b7cadfd8c7b59f8d7a644f402f1808000000000000000000000000000000000a1f33475874899eb3c9dee1cdbaa98c77624c37221325364a6073879cb2c7dcdec9b49f8a76614b36210c000000091d324556606b747b838a9195948b7b6550402f190915273750657a8fa5c8d8ead9c4ae99846f59442f1a0400000000000000000000091e3245566a7f94a8b9ccbbaa97816c5947341f0b00000000000000000000000000000000000013283d52687d92a7bdd2e7f8e4d2c1b39e89786257463a4a5c73889eb3c8dde7d2bda8927d68533d281300000000091d31455673889db2c8ddf2ead7c7bab4bab4a89f9791929aa1b3c3d4e6e3cfbcab927d68533d281300000000001a2f455a6f849aafc4d9efdfcab59f8a76604b36210b0000000000000000000000000000000000031629394c5e6c8197a2b4c1d0e2cdbdb1a59d948f8e90969fa8b2a3988272604a42311e0b00031628394b6175828d999fabb3bfc7cdc7bab4aa9f978c82796e635b4e4a3e362d221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4b6074879db2c0d1e3cfbcab9a846f5e4c362614010000000000000000000000000000000c21374c61768ca7b9cce0dec9b49f897459483420081c3043546b8095aac6d6e1cdbaa9917c675236261401000002152838454b5560666e767b7f7e77655d4b382211000c21364c61768baabbcee2dbc6b19b86715c46311c0700000000000000000000021628384c6176899eb4c7c8b49f8a77614c39291603000000000000000000000000000000000010253b50657a90a5c9d9ebfeefe0ccb9a79b857561584c4e64798ea6b8cbe0ead7c7a6917c67513c271200000000021527385b70859bb0c5daf0e2cdbaa99fa9b1bab4aca6a7afb3bfd0e2eedfcab59f8b77624c37220d0000000002172d42576c8297acc1d7ece3cfbcab8d78634e38230e0000000000000000000000000000000000000b1b30404b6074849aa3b3bfced8cec3b7b2a9a5a3a5acb4bac1b2a096806b604e3a261100000a1e324657616d79838c99a1afb3bfc8cec8bbb4aa9f988c83796e645c4f4a3e372e201507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d324556677c91a2b4c9dadac9b4a2907b665443301c0a0000000000000000000000000000000e23384e63788da3c5d6e8ddc7b29d88725d3b2b18051325364f647a8fa8b9cce1d7c7ad98836e5443301c080000000a1a283237444b515861666a6962594b3f2f1c01080b1f334658748a9fb4c9dfdcc7b29c87725d47321d0800000000000000000000000a1f3346586b8096a9bacdbaa995806b5746321e0a00000000000000000000000000000000000e23384d63788dabbccfe3f7f7e7d6c5b5a39a84766761626e8398aec5d5e7e2cdbaa98e79644e39240f0000000000192e43586e8398adc3d8eddfc9b49f8b97a0b0bcc1bcbdc4c7d0dee9e1cfbeb09b8570594834200b0000000000152a3f546a7f94a9bfd4e9ecdac9a5907b65503b261000000000000000000000000000000000000000121d31455661768599a1b4bbc8d0d4cbc7bfbab8bac1c9cdcfbfb09e927d68533d2813000003162839464b5b636e7a838f9aa1afb4c0c8cec8bbb4ab9f988c83796e645c4f4b3e32251503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384d5f70859babbccfe3d0c0b19b8673604b38281502000000000000000000000000000010253a4f657a8fa4bacfe4dcc6b19c87715c47321c000b20354b6074899eb3c9dedec9b39e8974604b35200b000000000a151d2631353a474c5155544d483b2f2111151d202334485974899fb4c9dedcc7b29d87725d48321d0800000000000000000000000417293a4c62778a9fb4c9c7b39e8976614b38271502000000000000000000000000000000000b20364b60758a9fb4cadff4ebd9c9bcb4b4a29a877c76778197a0b2c6e3f3dfc9b49f8a75604b36200b0000000001162b40566b8095abc0d5ead9c4af9a8382969eb3b8c4cbd5d8d9d9d7cdbfb2a0907b65503b2b1805000000000012273d52677c92a7bcd1e7e8d2bda8937d68533e281300000000000000000000000000000000000000021527384658617583959faab4c0c9ccd6d4cfcdd0d6d2c9c1b5a79e8979634e39240e0000000b1b28323d4a4e5c646f7a848f9aa2b0b4c0c8cbc9bcb4ab9f998e837a6f645c4f4332200c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a30414f647a8d9fb5c7d7dec9b5a3927d675645321d0c000000000000000000000000000010263b50657b90a5bad0e5dbc6b19b86715c46311c07081c3043546f859aafc4dae0ccb9a78e79634e39240e00000000000209141d202933373c403f37342b1d202327313538404c62778ca9bacde1dbc6b09b86715b46311c060000000000000000000000000b203448596d8297abbcccb9a7947f695645311d0800000000000000000000000000000000091d31455673889db2c8ddf2e3cfbcab9fabb4a59d918c8c979fb1becfe2ead8c7b09b85705544311d08000000000013293e53687e93a8bdd3e8dcc6b19c877280919ea6b3b7c4c2c4c3c6b9b4a198826d5d4b371d0d0000000000000f253a4f647a8fa4c7d7eaead5c0ab95806b56402b1601000000000000000000000000000000000000000a1a293a465761737f8c9aa2adb4b9c6c1c2c3c2c0c2b5b1a39b897b645b4a36210c000000000b161e2d363e4a4f5c646f7a84909aa2acb3b7c4cfc9bcb5aea1998f847a69614f3c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001322364a5c6d8298a9bacde1d2c2b29d8774604b3a2917040000000000000000000000000011263b51667b90a6bbd0e5dbc6b09b86715b46311c0601142636566b8096abc0d5e8d6c5a8937e69533e29140000000000000001080c171f21262a2922201e2c353837444b4d525e697e94a9c7d7e9d7c6ad98826d58432e180300000000000000000000000005182b3b4e63788c9fb4cac5b29d8874604b36251300000000000000000000000000000000021527385b70859bb0c5daf0dfcab49f8a9ea8b6b2a7a1a2acb1bdcedcede2cebaa9937e695437271502000000000011263b51667b90a6bbd0e5dec9b49e89746b7c88959da6aaadafaeaca89e948374604b3f2f1c000000000000000d22374d62778ca9bacde2edd8c2ad98836d58432e180000000000000000000000000000000000000000000b1b29394655606a79848f989ea8a8acadaeadaba8a49c928579645d4b3d2d1a070000000000030f1a212d363e4b4f5d65707b858e979da6b5c1d2cfcabfb3aea1998f7f69543f2a140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4d62788a9fb4c4d4dfcab7a5947e695846331f0d0000000000000000000000000011263b50667b90a5bbd0e5dbc6b19c86715c47311c070013283d52687d92a7bdd2e7d7c2ad97826d58422d1800000000000000000000040a0c1115140d192c3c494d5d556063686f7c8a9fb4c9dee1cdb9a8937d68533e281300000000000000000000000000000d2135495b6e8398aec0cbb7a6927d685443301c0700000000000000000000000000000000192e43586e8398adc3d8ebd5c0ab96808a9ea8b7c4b6b7c1c4cedbebe2d3c2b49f8b77614c37220c0000000000000e23394e63788ea3c5d5e8e1cdb9a88c766166767f888f95989a9997928a7f73605645312111000000000000000b20354a60758a9fb4c9dff0dac5b09b85705b382815020000000000000000000000000000000000000000000b1b2937444b5b636f7a82898f939698989896938d867d73635b4b3f2e1f0f000000000000000007101b222e373f4b4f5d65707a81889ba3b5c9dddfd0c7bfb3ad98836d58432e1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010203448596a8095a6b7cbdfd4c3b39e8976614c3b2b190500000000000000000000000010253b50657a90a5bacfe5dcc6b19c87715c47321c070010253a4f657a8fa4c8d8eadac5b09b85705b3a2917040000000000000000000000000000000c2035495a63727375787d84909fa8bacde0d0c0b49e8a76614c37210c0000000000000000000000000000061a2c3d4f647a8ea2b4c7c4b19c8673604a35201100000000000000000000000000000001162b40566b8095abc0d5e9d4bea9947f7b8a9da6b3bfc9d2d7d9d9d9cec3b6a495806b5847331f0a0000000000000c21364b61768ba7b8cce0e9d7c6a48e796457616a747a7f838484817c75696055453827150300000000000000071c30435472879cb2c7dcf1ddc8b29d88735645321d09000000000000000000000000000000000000000000000b1926313d4a4e5d646d757a7e81828382817d7871686055493d2e2010010000000000000000000007101b222f37444b58616b757c869bb0c6dbede7dacfc7b09b85705b46301b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b4b6175889db3c1d2e0ccb8a795806b594834200f0000000000000000000000000f253a4f647a8fa4b9cfe4dcc7b29c87725d47321d00000d22374d62778caabbcee2dec8b39e89735846331f0a0000000000000000000000000000000e23384d637887888a8d9299a1b4bac6d5ccbfb3a2957f6a5847331f0a0000000000000000000000000000000e22364a5c6f849aafc1cab6a4917c66513f2e1c0800000000000000000000000000000013293e53687e93a8bdd3e8d6c1ac96816c7a8899a1b0b5c1c2c4c3c8bbb4a49c8675604b3a2a18040000000000000a1e32465773899eb3c8dee6d1bba6917c66514c5560656a6d6f6e6c6761574b4437271a0a0000000000000000001325365a6f849aafc4d9efdfcab59f8a75604b36200b000000000000000000000000000000000000000000000009141d2d363f4b4f556065696c6d6e6d6b68635b534b44372c1f1002000000000000000000000c171f2c35404c556069778089919ba3b5c9ddded1c9bcb5a99d88735d48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1e324657687d92a3b5c9ddd5c5b49f8a78624d3d2d1a0700000000000000000000000f24394e64798ea3b9cee3ddc8b39d88735e37271502000b20354a60758a9fb4cadfe0ccb8a78b76614c36210c0000000000000000000000000000000c21364b61768b9e9faaa7afb3bfcdd5c5b8b3a1998473604b3a291704000000000000000000000000000000071b2d3e50657b90a3b5c9c2b09b85705d4b37230f00000000000000000000000000000011263b51667b90a6bbd0e5d9c4ae99846f647783919ba3a9adafaeacaa9f968677625645321c0c00000000000000031629395b71869bb0c6dbe8d3bea9937e695437444b5055585a5957524b46393126190a00000000000000000000182d42576d8297acc2d7ece3cfbcab8d78634d38230e000000000000000000000000000000000000000000000000010f1a212e3737444b50535758595856534e493d353126190e0000000000000000000006141c29333d494e5e66747e89969ea7b0b5c1d2d3cac0b4ab9f988a806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394b6073859bb0bfcfe1cdbaa997826d5b4a36211100000000000000000000000d22374d62778ca2c5d6e8dec9b49e89745544311d0800071c30435473889db3c8dde8d6c5a38d78634e38230e0000000000000000000000000000000a1e33465773899eb3bbc8c4c7d0d6c6b8a79e938375615544311c0c00000000000000000000000000000000001023384c5d71859bb0c3c8b4a38f7a654f3d2d1a0700000000000000000000000000000e23394e63788ea3c5d5e8dbc6b19c867159626f7c868e9498999997928b8176625948382816000000000000000000192e44596e8399aec3d8ebd6c1ab96816c564131353a40434544423d3632281d14090000000000000000000000152a3f556a7f94aabfd4e9ecdac9a5907b65503b2610000000000000000000000000000000000000000000000000000007101b222731363a3e41434343413e38352c201d140900000000000000000000081624313a474c5b636f7b86939ea7b3b9c5c9d2ccc3b6b2a29a8d82786a62503c281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1c304354657b8fa1b2c7d8d7c7b49f8c79634e3f2e1c08000000000000000000000b20364b60758ba7b9cce0e1cdb9a88b75604b36200b00001325365c71879cb1c6dce4cfbaa48f7a654f3a2510000000000000000000000000000000031729395c71869bb1c6d8d6dee0ccb9a89e897e72615746372715000000000000000000000000000000000000091c2f3f51677c91a4b6cac1ae99846f5b4a36210e00000000000000000000000000000c21364b61768ba7b8cce0dec9b49e8974584c5e6671797f828484827d776c6158483b2b1a0a000000000000000001172c41566c8196abc1d6ebd8c3ae99836e59442e20252a2e2f2f2c27211e160b0100000000000000000000000012283d52677d92a7bcd2e7e7d2bda8927d68533d2813000000000000000000000000000000000000000000000000000000000809151d2025292c2d2e2d2c2823211a0f08010000000000000000000004162633424e58616c7984909ca4b3b9c5ccd6cec5b8b3a49c91847a6d625a504433210d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364b5d6e8399a9bacee2cfbcab99836f5d4b37231200000000000000000000091d31455674899eb3c9dee9d7c6a28c77624d37220d00001b30465b70859bb0c5dae6d1bba6917c66513c271100000000000000000000000000000000192e44596e8399aeb8bcc1c8ccc9b49e897c73686055473b2a1c0c0000000000000000000000000000000000001120354b6073879cb2c4c7b3a18e79634e3c2b1905000000000000000000000000000a1e32465773899eb3c8dee1ccb9a88c76614c4c515b63696d6f6e6c6862594c473a2b1d0d0000000000000000000014293e54697e93a9bed3e8dbc6b09b86715b3928161015181a1917120c0903000000000000000000000000000010253a4f657a8fa4c8d8eaead5c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000002080b10141718191816130e0c06000000000000000000000000000e21334451606876818b99a1b1b6c2ccd6cfc7bab4a79e93877c70645c4d483c3325150400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182e3f4d63788b9fb4c5d5d9c9b3a18f7b655041301909000000000000000000021527385b71869bb0c6dbe3ceb9a48e79644f39240f00051a30455a6f859aafc4dae7d1bca7927c67523d271200000000000000000000000000000001172c41566c8196a1a3a7acb3b8c5b9a89e92887e736259473a2a17040000000000000000000000000000000000081c304354687e93a6b7cbbfad98826d5a4835200c00000000000000000000000000031629395b71869bb0c6dbe8d6c6a48e79644f393d4a4e54585a5957534c473b332a1c0d000000000000000000000011273c51667c91a6bbd1e6dec8b39e89735746321e0900030504020000000000000000000000000000000000000d22384d62778daabbcee2edd7c2ad98826d58432d1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293d51626b7e89969faab3bfcad3d2c9bfb2a99f96897e74665e4f4a3e342b1d15070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112035495a6b8096a7b8cce0d0bfb09b85705f4d37271502000000000000000000182e43586d8398adc2d8e6d1bca6917c67513c271200041a2f44596f8499aec4d9e7d2bda8927d68533d28130000000000000000000000000000000014293e54697e8b8c8e91969ea7b5bcb9b4a69d938477625847331f120000000000000000000000000000000000011426364b6075889db3c5cab49f8b78624d3a2a170400000000000000000000000000192e44596e8399aec3d8e6d1bba6917c66513c2d36393f434444423d37342a1f170c0000000000000000000000000f24394f64798ea4c6d6e9e0ccb8a78b76614b36210c00000000000000000000000000000000000000000000000b20354b60758a9fb4c9dfefdac5b09a85705b372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b80939ea7b4bbc8d0d4cac1b5b0a0988b81766960554d40362d20190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4c6176889eb3c2d3ddc9b5a3917c675544311d0b000000000000000000152a40556a7f95aac9daecd4bfaa947f6a553f2a150004192f44596e8499aec3d9e8d3bda8937e68533e29130000000000000000000000040b0c101416273b4f60697576787c8189969fabbcc4b7b2a29a8776614c40301d090000000000000000000000000000000000081d324556697f94a7b9ccbbaa96816c5847331f0a00000000000000000000000001172c41566c8196abc1d6e9d3bea9947e69543f2921242a2d2f2f2d28221f180d04000000000000000000000000000c21374c61768ca8b9cde1e8d5c5a38e78634e39230e0000000000000000000000000000000000000000000000081c30435472879db2c7dcf2ddc8b29d88735544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081e33485d73889db2b8c5ced6ccc3b7b2a39b8f83786b61584b443730221b10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f334658697e93a4b6c9ded1c1b29c8774604b39291603000000000000000011263c51667b91abbccfe3d8c2ad98836d583a2a180404192e44596e8399aec3d8e8d3bea8937e69533e29140000000000000000040a0c181f2225292c2d32424f56606163676c75808d9fb5c2cbc0b4a59a846f5e4c39240d0000000000000000000000000000000000021528384c6176899eb3c7c8b49f8a77614c3928160300000000000000000000000014293e54697e93a9bed3e8d6c1ab96816c56412c170e14181a1917130d0b050000000000000000000000000000000a1f33475874899eb4c9dee5d0bba5907b66503b26110000000000000000000000000000000000000000000000011426365a6f859aafc4dae1dfcab49f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889db2c7d5cec6b9b4a59d92857a6e635a4c473a312719120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b6074869cb1bfd0decab6a4937e685746321e0d00000000000000000c21374c61778b9fb5cadfdcc7b19c87725847331f0a04192e44596e8399aec3d8e8d2bda8937d68533e2813000000000000000c171f212a34373b3e41423e3638454b4c4e5256606b7f94a4b6cad1c3b3a2917c66513b2b180500000000000000000000000000000000000a1e3346576b8095a9bacdbaa895806a5745321e0900000000000000000000000011273c51667c91a6bbd1e6d9c3ae99846e59442f190000030504020000000000000000000000000000000000000004172a3a5c71879cb1c6dce8d2bda8937d68533e2813000000000000000000000000000000000000000000000000182d42586d8297adc2cccccccfbcab8d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051b30455a70859aafc5c8bbb4a89e94877d72655d4d493c33291d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1d314455667b90a1b3c8d9d3c3b39e8875614b3b2a1805000000000000000a1f33475871879cb1c6dcdfcab59f8b77614c37220c001a2f445a6f8499afc4d9e7d2bca7927d67523d28120000000000000c1c2a33373b474c50545657534c463936373938454b6073869cb1c7dcd0c0b09a8570594834200b0000000000000000000000000000000000031729394c62778a9fb4c8c6b39e8875604b3727150100000000000000000000000f24394f64798ea4c6d6e9dbc6b19c86715c3a291704000000000000000000000000000000000000000000000000001a2f445a6f8499afc4d3d3d3c0ab95806b56402b16010000000000000000000000000000000000000000000000152a40556a7f95aab6b6b6b6b6b6a5907a65503b25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d43586d8298adbfb3aa9f97897f756760544b3f352c1f170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374c5e6f8499aabbcee0cbb8a695806a5947341f0e0000000000000004172a3a566b8196abc4d5e3cfbcab917c6751382815021426375b70859ab0c5dae5d0bba6907b66513b2611000000000004172a3a474c5a596165696b6c686157473b2a23283243546a7f94a9bfd4dfcab59f8b77624d37220d0000000000000000000000000000000000000b1f3447596c8197aabbccb8a7937e695544311d0800000000000000000000000c21374c61768ca8b9cde1dec9b39e89745846331f0a00000000000000000000000000000000000000000000000002172c42576c8197acbdbdbdbdbdad98836d58432e1803000000000000000000000000000000000000000000000012283d52677d92a1a1a1a1a1a1a1a1927d68523d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab1a1998c81776a60564a43362e20190e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020009192f404e63798c9fb4c3d4d5c4b49e8a77624c3d2c1a060000000000000010253a4f657a8fa6b7cbe0dac9ad97826d5645321d091d31445572879cb2c7dce7d5c4a48e79644f39240f00000000000a1f334758616f73777b7e81827e76625947341f16253650657a8fa5bacfe3cfbcab917c67513c271200000000000000000000000000000000000005182a3b4d62788b9fb4cac5b29d8774604b35201200000000000000000000000a1f33475874899eb4c9dee0ccb9a78b76614c36210c00000000000000000000000000000000000000000000000000152a3f546a7f94a8a8a8a8a8a8a89a85705b45301b06000000000000000000000000000000000000000000000010253a50657b8c8c8c8c8c8c8c8c8c8c806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a49c9084796c61594b45383025181006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b131717171717171717171721364a5b6c8197a5b7c8d9cdb9a897816c5b49352110000000000000000b20354b6074889db3c9d9dec8b39e8975604b37261420354b60758a9fb4c9dfe0cbb8a68c76614c37210c00000000000c21374c617684888c90939697938677624c3f2f1923384d62788da2b7cdecdac9aa95806b55402b16000000000000000000000000000000000000000d2035495a6e8398adbfcab7a5927d6752402f1c090000000000000000000004172a3a5c71879cb1c6dce8d6c5a38e79644e39240f0000000000000000000000000000000000000000000000000012273c52677c91939393939393939387735d48331e0800000000000000000000000000000000000000000000000b20354b60737777777777777777777775614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a9092867b6f635b4c473b32281c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20282c2d2d2d2d2d2d2d2d2d2d2d3d4c6176879daabbced7c6b49f8b79634e3e2e1b08000000000000081c3043546b8095abbccfe0ccb8a7927d675544311d24394e64798ea9bacee2ddc8b39d88735847331f0a00000000000a1f33475872879ca6a5a9abaca499836f5d4c372622374c61778ca1b6cce1d7c2ad98826d58432d180000000000000000000000000000000000000006192c3c4e64798ea1b3c7c3b19c86715e4c38241000000000000000000000001a2f445a6f8499afc4d3d3d0bba6917b66513c2611000000000000000000000000000000000000000000000000000d22374d62777e7e7e7e7e7e7e7e7e7e68533e2813000000000000000000000000000000000000000000000000081d3144556061616161616161616161615746321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d6278887d73655d4e493d342a1e160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530353d424242424242424242424242424658657b8c9fb4bccccebbaa98836e5c4b372212000000000000011426364d62788c9fb4c9d9d6c5b19c8673604b3e302e3f54697e93a9c7d8ead9c3ae99846e593a291704000000000004172a3a556a8095aabfbec0c3b3a1907b6555443329384d62778da2b7cce2d8c3ae99836e59442e1900000000000000000000000000000000000000000e21364a5c6f8499afc1c9b5a4907b66513e2e1b0800000000000000000002172c42576c8197acbdbdbdbdbda9937e69543e2914000000000000000000000000000000000000000000000000000b203448596268686868686868686868604e3a261100000000000000000000000000000000000000000000000001142637444b4c4c4c4c4c4c4c4c4c4c4b463928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073766860544c3f362c1f180c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a525757575757575757575757575757575d697e939eafc6d6c8b2a08f7a644f40301808000000000000082035485a6e8398abbccfdec9b6a4937e695c4d413c4b5d70859bb0c5dbe5d2c2a9947f69543f2a14000000000000000e23384e63798da0b2c8d9d0bfb19b8573604b46394150667b90a5bbd0e5d9c4af99846f5a442f1a0000000000000000000000000000000000000000071a2d3e50657b90a3b4c8c2b09a85705c4b37220f00000000000000000000152a3f546a7f94a8a8a8a8a8a8a896816c56412c170100000000000000000000000000000000000000000000000005182b3b484d535353535353535353534e42311e0b000000000000000000000000000000000000000000000000000919263135373737373737373737373632281b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556061574b43362f211a0f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435460686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c8095a8b9cccfbfb09a85705e4c36261401000000000006192b3c4e63798c9fb4c4d4d3c2b49f8a7a675f54525a657b8fa3b5c9dddec9b5a48d78634e38230e000000000000000c2135495b6e8398aabbceddc9b5a397816d615755565f6e8298adc3d8edd7c2ad98826d58432d180000000000000000000000000000000000000000000f23374b5d70859bb0c2c8b4a28f7a644f3d2c1a0600000000000000000012273c52677c919393939393939393836e59442e1904000000000000000000000000000000000000000000000000000d1d2b34373e3e3e3e3e3e3e3e3e3e3a31241302000000000000000000000000000000000000000000000000000009141d2022222222222222222222211e160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b4b4639302618110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60727d81828282828282828282828282828282828281899eb3c9dec8b4a2917c665443301c080000000000000e2135495b6c8197a6b7c9d9cdbaa99e8a7d716a686b78879db2c1d1e4d4c4b19c86715b4935210c00000000000000061a2c3d4e63798c9fb4c2d3d2c1b19f9782766d6a6b707d92a0b2c6dae9d7c7ab96806b56412b16000000000000000000000000000000000000000000081c2e3f51667c91a4b6cac0ae99836e5b4935210d0000000000000000000d22374d62777e7e7e7e7e7e7e7e7e7c66513c27110000000000000000000000000000000000000000000000000000000d18202229292929292929292928261e13060000000000000000000000000000000000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192631353632291c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697f92979797979797979797979797979797979797979ea8b9cce1d1c0b19c8673604b35200b000000000000061a2c3d4c6176889dabbccfd7c7b9a89e91857f7d80899da5b6cadfdfcbb7a6937e68533d2c1a0600000000000000000f2135495b6c8197a4b6c6d6cebdb19f9789827f8085929cadbecfe1e1cdbaa9907b66513b2611000000000000000000000000000000000000000000001120354a6073869cb1c3cab59f8c79634e3b2b180500000000000000000b2034485962686868686868686868665e4c39240f00000000000000000000000000000000000000000000000000000000050b0d13131313131313131313110b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d20211e160b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e44596e8399acacacacacacacacacacacacacacacacacacacb3b9c6d6e8dec9b5a4907b65503b2610000000000000000f1f334658657b8d9fb4bccfd6c6b9b3a39b9492959ea7b6c3d3e0d0bfb29d8875604b36210f000000000000000000061a2c3d4b6175869ca8b9c6d5cebeb1a79e9895969ba3adbacadce6d6c5b49f8a75604b36210b00000000000000000000000000000000000000000000071c304354687d92a5b7c9bcab97826d594834200c000000000000000005182b3b484d535353535353535353514c40301d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acc1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c9ccd6e4f4e5d2c2ac97816c57422d17000000000000000417293a4c5d697f949eb5bcc9d5ccc1b5b0a9a7abb3b8c5d3e3d2c2b3a1927d685745321e09000000000000000000000f1e32465763798a9ea8b8c5d0cec5b8b3adaaabb0b4c1cad8e4d7c8b8a796806b5745321e0900000000000000000000000000000000000000000000001325364b6074879dabbbc8b49f8b77624d3a29170400000000000000000d1d2b34373e3e3e3e3e3e3e3e3e3c39302212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9bed4d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7dee1e8e0e0e0dbc6b09b86715b3b2a1804000000000000000b1b2f3f4f616b80959fabb8c5cdd2c9c6bfbdc0c8ccd5dacfc2b5a499836f5f4e392816030000000000000000000003162839495b657b8a9ea7b3bfcad3ccc8c2bfc0c5c8d1e2dfd2c6baaa9e8977614c392816030000000000000000000000000000000000000000000000081d314455667c8d9faab4bbaa96806b5847331f0a0000000000000000000d18202229292929292929292927241d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bccbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc9b49f89745947341f0b00000000000000001121324351626b808d9ea7b4bac7c9d2d3d2d5d5d7cdc9bcb5a49c8676614c41311b0a0000000000000000000000000b1b2c3d4b5d657a8999a1b2b6c3c8ccd5d3d5d6d4d8cec9c1b5a89f8c7b655847331b0a000000000000000000000000000000000000000000000000021527374c5e697e8c999faaa29e8976614c37210c00000000000000000000050b0d131313131313131313110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6baa88c77614c37220c0000000000000000031525344451616a7c88969fa9b1b5c1bec0c1c0c6bab4ab9f97867762584633231300000000000000000000000000000f1f2f3f4b5c647884929ca5aeb3b8c5bec0c0bfc7bab4afa39b8a7d675d4b3a2a18000000000000000000000000000000000000000000000000000009192f404f60697a848a8d8d8d8d7f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61778ca8a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a08f79644f3a240f0000000000000000000716263443505e6676818a949ba3a5a9aaababa8a89f988c81756259483a29170500000000000000000000000000000111212f3e4a5a626f7d8790989ea7a7a9aaabaaa8a99f9a918679675f4d3f2f1c0c000000000000000000000000000000000000000000000000000000112232424f5d656f757778787877624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758748a8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7c67523c27120000000000000000000008162533404c58616c777f868c909495969593908982796c6157483b2b1c0c000000000000000000000000000000000311202e3c484d5f67737b83888d929395969593908a847c72635b4d4130211100000000000000000000000000000000000000000000000000000000031424323f4b4f55606263636362594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4b607576767676767676767676767676767676767676767676767676767676767673604b35200b00000000000000000000000715222f3a464c59616a71777b7e8081807e7a756d645c4b46392b1d0d00000000000000000000000000000000000002101e2b35414d5460666e74787c7e80817f7e7b766f6660544a3d3023120300000000000000000000000000000000000000000000000000000000000614212e3737444b4d4d4d4d4d483b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1e32455760616161616161616161616161616161616161616161616161616161616161605544311d0800000000000000000000000004121c29333b474c55596266696b6c6b696560564e4a3e32281b0d0000000000000000000000000000000000000000000e19203036434a5054606367696b6b6a68666157514a43362d1f12050000000000000000000000000000000000000000000000000000000000000002101b222631353838383837342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839454b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b443727150100000000000000000000000000000c171f2a34373b484c505455565653504b4538362d1e160b000000000000000000000000000000000000000000000005131825303536434a4e525455565553504b4639353025180f01000000000000000000000000000000000000000000000000000000000000000000000809141d20222323232220180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b283236363636363636363636363636363636363636363636363636363636363636353127190900000000000000000000000000000000040c181f222b34373b3f4041403e3b363228211a0f03000000000000000000000000000000000000000000000000000008131c20253035383d3e4041403e3b363228201c1308000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d0e0e0e0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21212121212121212121212121212121212121212121212121212121212121201d150900000000000000000000000000000000000000040b0d18202226292b2c2b2925201d150a07000000000000000000000000000000000000000000000000000000000000070b131c202327292b2c2a2926211e160b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b08010000000000000000000000000000000000000000000000050b0d111416171614100b09020000000000000000000000000000000000000000000000000000000000000000000000070b0e121416161513110c09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-BlackItalic SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: 5618644325099872008} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: d05787702efa92742a8128bf4f72413c + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Black Italic + m_PointSize: 66 + m_Scale: 1 + m_LineHeight: 79.2 + m_AscentLine: 65.142 + m_CapLine: 49 + m_MeanLine: 35 + m_Baseline: 0 + m_DescentLine: -14.058001 + m_SuperscriptOffset: 65.142 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.058001 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -16.83 + m_UnderlineThickness: 3.234 + m_StrikethroughOffset: 14 + m_StrikethroughThickness: 3.234 + m_TabWidth: 14 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 13.53125 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 45.140625 + m_Height: 48.078125 + m_HorizontalBearingX: -3.0625 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 44.015625 + m_GlyphRect: + m_X: 152 + m_Y: 67 + m_Width: 47 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 38.15625 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 41.25 + m_GlyphRect: + m_X: 328 + m_Y: 132 + m_Width: 40 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 40.53125 + m_Height: 49.140625 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 40.71875 + m_GlyphRect: + m_X: 60 + m_Y: 172 + m_Width: 41 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.625 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 46.796875 + m_GlyphRect: + m_X: 272 + m_Y: 99 + m_Width: 45 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 34.59375 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 35.34375 + m_GlyphRect: + m_X: 53 + m_Y: 322 + m_Width: 36 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 34.59375 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 35.109375 + m_GlyphRect: + m_X: 100 + m_Y: 322 + m_Width: 36 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 42.3125 + m_Height: 49.140625 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 44.546875 + m_GlyphRect: + m_X: 204 + m_Y: 127 + m_Width: 43 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 44.953125 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 47.78125 + m_GlyphRect: + m_X: 452 + m_Y: 6 + m_Width: 46 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 16.703125 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 19.5625 + m_GlyphRect: + m_X: 357 + m_Y: 286 + m_Width: 18 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 28.046875 + m_Height: 48.609375 + m_HorizontalBearingX: -1.15625 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 27.484375 + m_GlyphRect: + m_X: 251 + m_Y: 382 + m_Width: 29 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 44.890625 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 43.765625 + m_GlyphRect: + m_X: 394 + m_Y: 66 + m_Width: 46 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 27.984375 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 32.3125 + m_GlyphRect: + m_X: 280 + m_Y: 443 + m_Width: 29 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 56.171875 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 59 + m_GlyphRect: + m_X: 83 + m_Y: 6 + m_Width: 58 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 44.953125 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 47.78125 + m_GlyphRect: + m_X: 333 + m_Y: 72 + m_Width: 46 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 46.796875 + m_Height: 49.140625 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 50.15625 + m_GlyphRect: + m_X: 214 + m_Y: 66 + m_Width: 47 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 37.953125 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 39.5 + m_GlyphRect: + m_X: 258 + m_Y: 159 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 46.796875 + m_Height: 57.65625 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 50.15625 + m_GlyphRect: + m_X: 275 + m_Y: 29 + m_Width: 47 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 36.90625 + m_Height: 48.078125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 40.53125 + m_GlyphRect: + m_X: 441 + m_Y: 172 + m_Width: 38 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 35.3125 + m_Height: 49.078125 + m_HorizontalBearingX: -0.59375 + m_HorizontalBearingY: 48.546875 + m_HorizontalAdvance: 34.515625 + m_GlyphRect: + m_X: 438 + m_Y: 293 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 36.359375 + m_Height: 48.078125 + m_HorizontalBearingX: 3.40625 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 37.421875 + m_GlyphRect: + m_X: 390 + m_Y: 262 + m_Width: 37 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 42.40625 + m_Height: 48.609375 + m_HorizontalBearingX: 3.203125 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 46.0625 + m_GlyphRect: + m_X: 6 + m_Y: 112 + m_Width: 43 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 45.203125 + m_Height: 48.078125 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 44.015625 + m_GlyphRect: + m_X: 394 + m_Y: 6 + m_Width: 47 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 64.8125 + m_Height: 48.078125 + m_HorizontalBearingX: 3.265625 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 64.75 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 66 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 48.84375 + m_Height: 48.078125 + m_HorizontalBearingX: -3.265625 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 42.90625 + m_GlyphRect: + m_X: 214 + m_Y: 6 + m_Width: 50 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 42.828125 + m_Height: 48.078125 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 41.609375 + m_GlyphRect: + m_X: 451 + m_Y: 66 + m_Width: 44 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 40.921875 + m_Height: 48.078125 + m_HorizontalBearingX: -1.546875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 37.359375 + m_GlyphRect: + m_X: 60 + m_Y: 112 + m_Width: 42 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 32.8125 + m_Height: 35.28125 + m_HorizontalBearingX: 0.6875 + m_HorizontalBearingY: 34.75 + m_HorizontalAdvance: 35.015625 + m_GlyphRect: + m_X: 112 + m_Y: 217 + m_Width: 34 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 33.71875 + m_Height: 49.9375 + m_HorizontalBearingX: 0.765625 + m_HorizontalBearingY: 49.40625 + m_HorizontalAdvance: 36.203125 + m_GlyphRect: + m_X: 189 + m_Y: 446 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.71875 + m_Height: 35.21875 + m_HorizontalBearingX: 0.984375 + m_HorizontalBearingY: 34.6875 + m_HorizontalAdvance: 29.859375 + m_GlyphRect: + m_X: 320 + m_Y: 442 + m_Width: 30 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 35.703125 + m_Height: 49.9375 + m_HorizontalBearingX: 0.921875 + m_HorizontalBearingY: 49.40625 + m_HorizontalAdvance: 36.265625 + m_GlyphRect: + m_X: 390 + m_Y: 200 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 30.03125 + m_Height: 35.21875 + m_HorizontalBearingX: 0.953125 + m_HorizontalBearingY: 34.6875 + m_HorizontalAdvance: 32.640625 + m_GlyphRect: + m_X: 251 + m_Y: 266 + m_Width: 31 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 24.28125 + m_Height: 57.125 + m_HorizontalBearingX: 2.078125 + m_HorizontalBearingY: 49 + m_HorizontalAdvance: 22.46875 + m_GlyphRect: + m_X: 138 + m_Y: 382 + m_Width: 25 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 37.296875 + m_Height: 46.46875 + m_HorizontalBearingX: -2.3125 + m_HorizontalBearingY: 34.75 + m_HorizontalAdvance: 34.25 + m_GlyphRect: + m_X: 308 + m_Y: 192 + m_Width: 38 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 33.1875 + m_Height: 49.40625 + m_HorizontalBearingX: 0.765625 + m_HorizontalBearingY: 49.40625 + m_HorizontalAdvance: 36.40625 + m_GlyphRect: + m_X: 235 + m_Y: 443 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 16.09375 + m_Height: 49.59375 + m_HorizontalBearingX: 1.0625 + m_HorizontalBearingY: 49.59375 + m_HorizontalAdvance: 17.09375 + m_GlyphRect: + m_X: 329 + m_Y: 250 + m_Width: 17 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 22.90625 + m_Height: 61.375 + m_HorizontalBearingX: -6.171875 + m_HorizontalBearingY: 49.59375 + m_HorizontalAdvance: 17.03125 + m_GlyphRect: + m_X: 103 + m_Y: 382 + m_Width: 24 + m_Height: 62 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 35.375 + m_Height: 49.40625 + m_HorizontalBearingX: 0.6875 + m_HorizontalBearingY: 49.40625 + m_HorizontalAdvance: 34.609375 + m_GlyphRect: + m_X: 438 + m_Y: 232 + m_Width: 37 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49.5 + m_Height: 34.75 + m_HorizontalBearingX: 0.765625 + m_HorizontalBearingY: 34.75 + m_HorizontalAdvance: 52.703125 + m_GlyphRect: + m_X: 6 + m_Y: 66 + m_Width: 51 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 33.1875 + m_Height: 34.75 + m_HorizontalBearingX: 0.796875 + m_HorizontalBearingY: 34.75 + m_HorizontalAdvance: 36.40625 + m_GlyphRect: + m_X: 369 + m_Y: 368 + m_Width: 34 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 32.078125 + m_Height: 35.28125 + m_HorizontalBearingX: 0.984375 + m_HorizontalBearingY: 34.75 + m_HorizontalAdvance: 34.8125 + m_GlyphRect: + m_X: 206 + m_Y: 266 + m_Width: 34 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 35.046875 + m_Height: 45.609375 + m_HorizontalBearingX: -0.5625 + m_HorizontalBearingY: 34.75 + m_HorizontalAdvance: 36.203125 + m_GlyphRect: + m_X: 33 + m_Y: 264 + m_Width: 36 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 32.8125 + m_Height: 45.609375 + m_HorizontalBearingX: 0.71875 + m_HorizontalBearingY: 34.75 + m_HorizontalAdvance: 35.046875 + m_GlyphRect: + m_X: 126 + m_Y: 264 + m_Width: 34 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 24.609375 + m_Height: 34.515625 + m_HorizontalBearingX: 0.765625 + m_HorizontalBearingY: 34.515625 + m_HorizontalAdvance: 23.984375 + m_GlyphRect: + m_X: 113 + m_Y: 171 + m_Width: 26 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 27.984375 + m_Height: 35.28125 + m_HorizontalBearingX: -1.09375 + m_HorizontalBearingY: 34.75 + m_HorizontalAdvance: 27.09375 + m_GlyphRect: + m_X: 369 + m_Y: 414 + m_Width: 29 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 22.875 + m_Height: 44.6875 + m_HorizontalBearingX: 1.75 + m_HorizontalBearingY: 44.15625 + m_HorizontalAdvance: 24.8125 + m_GlyphRect: + m_X: 171 + m_Y: 264 + m_Width: 24 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 33.203125 + m_Height: 34.75 + m_HorizontalBearingX: 1.609375 + m_HorizontalBearingY: 34.21875 + m_HorizontalAdvance: 36.359375 + m_GlyphRect: + m_X: 244 + m_Y: 219 + m_Width: 34 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 33.59375 + m_Height: 34.21875 + m_HorizontalBearingX: 1.546875 + m_HorizontalBearingY: 34.21875 + m_HorizontalAdvance: 33.234375 + m_GlyphRect: + m_X: 386 + m_Y: 322 + m_Width: 35 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 49.359375 + m_Height: 34.25 + m_HorizontalBearingX: 1.6875 + m_HorizontalBearingY: 34.25 + m_HorizontalAdvance: 49.59375 + m_GlyphRect: + m_X: 68 + m_Y: 66 + m_Width: 51 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 38.015625 + m_Height: 34.21875 + m_HorizontalBearingX: -3.140625 + m_HorizontalBearingY: 34.21875 + m_HorizontalAdvance: 33.5625 + m_GlyphRect: + m_X: 441 + m_Y: 126 + m_Width: 39 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 33.671875 + m_Height: 45.078125 + m_HorizontalBearingX: 1.578125 + m_HorizontalBearingY: 34.21875 + m_HorizontalAdvance: 33.203125 + m_GlyphRect: + m_X: 80 + m_Y: 264 + m_Width: 35 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 30.015625 + m_Height: 34.21875 + m_HorizontalBearingX: -1.015625 + m_HorizontalBearingY: 34.21875 + m_HorizontalAdvance: 29.109375 + m_GlyphRect: + m_X: 414 + m_Y: 400 + m_Width: 31 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 15.109375 + m_Height: 10.0625 + m_HorizontalBearingX: 6.46875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 24.28125 + m_GlyphRect: + m_X: 357 + m_Y: 346 + m_Width: 16 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 307 + m_Metrics: + m_Width: 15.171875 + m_Height: 48.546875 + m_HorizontalBearingX: 1.71875 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 18.25 + m_GlyphRect: + m_X: 490 + m_Y: 172 + m_Width: 16 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 24.28125 + m_Height: 49.015625 + m_HorizontalBearingX: 4.6875 + m_HorizontalBearingY: 48.546875 + m_HorizontalAdvance: 29.140625 + m_GlyphRect: + m_X: 293 + m_Y: 250 + m_Width: 25 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 310 + m_Metrics: + m_Width: 11.359375 + m_Height: 20.5625 + m_HorizontalBearingX: 0.625 + m_HorizontalBearingY: 10.828125 + m_HorizontalAdvance: 16.140625 + m_GlyphRect: + m_X: 6 + m_Y: 233 + m_Width: 12 + m_Height: 21 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 14.421875 + m_Height: 43.5625 + m_HorizontalBearingX: 1.625 + m_HorizontalBearingY: 33.828125 + m_HorizontalAdvance: 18.515625 + m_GlyphRect: + m_X: 6 + m_Y: 266 + m_Width: 16 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 11.625 + m_Height: 11.296875 + m_HorizontalBearingX: 0.421875 + m_HorizontalBearingY: 10.828125 + m_HorizontalAdvance: 15.9375 + m_GlyphRect: + m_X: 195 + m_Y: 188 + m_Width: 13 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 48.0625 + m_Height: 11.296875 + m_HorizontalBearingX: 0.421875 + m_HorizontalBearingY: 10.828125 + m_HorizontalAdvance: 52.375 + m_GlyphRect: + m_X: 275 + m_Y: 6 + m_Width: 49 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 324 + m_Metrics: + m_Width: 32.0625 + m_Height: 51.46875 + m_HorizontalBearingX: -1.28125 + m_HorizontalBearingY: 48.140625 + m_HorizontalAdvance: 29.046875 + m_GlyphRect: + m_X: 145 + m_Y: 451 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 325 + m_Metrics: + m_Width: 7.921875 + m_Height: 62.234375 + m_HorizontalBearingX: 5.25 + m_HorizontalBearingY: 51.375 + m_HorizontalAdvance: 18.453125 + m_GlyphRect: + m_X: 130 + m_Y: 97 + m_Width: 9 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 19.40625 + m_Height: 51.46875 + m_HorizontalBearingX: 4.953125 + m_HorizontalBearingY: 48.140625 + m_HorizontalAdvance: 28.84375 + m_GlyphRect: + m_X: 174 + m_Y: 382 + m_Width: 21 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 328 + m_Metrics: + m_Width: 17.546875 + m_Height: 8 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 24.03125 + m_HorizontalAdvance: 22.671875 + m_GlyphRect: + m_X: 357 + m_Y: 266 + m_Width: 19 + m_Height: 9 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 331 + m_Metrics: + m_Width: 24.75 + m_Height: 6.140625 + m_HorizontalBearingX: -0.953125 + m_HorizontalBearingY: -3.765625 + m_HorizontalAdvance: 29.375 + m_GlyphRect: + m_X: 219 + m_Y: 188 + m_Width: 25 + m_Height: 7 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 334 + m_Metrics: + m_Width: 18.015625 + m_Height: 63.09375 + m_HorizontalBearingX: 1.71875 + m_HorizontalBearingY: 52.203125 + m_HorizontalAdvance: 18.078125 + m_GlyphRect: + m_X: 486 + m_Y: 233 + m_Width: 19 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 335 + m_Metrics: + m_Width: 18.015625 + m_Height: 63.09375 + m_HorizontalBearingX: -1.609375 + m_HorizontalBearingY: 52.203125 + m_HorizontalAdvance: 18.046875 + m_GlyphRect: + m_X: 6 + m_Y: 382 + m_Width: 19 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 21.4375 + m_Height: 61.875 + m_HorizontalBearingX: 1.0625 + m_HorizontalBearingY: 51.3125 + m_HorizontalAdvance: 20.203125 + m_GlyphRect: + m_X: 357 + m_Y: 192 + m_Width: 22 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 21.515625 + m_Height: 61.875 + m_HorizontalBearingX: -2.40625 + m_HorizontalBearingY: 51.3125 + m_HorizontalAdvance: 20.203125 + m_GlyphRect: + m_X: 36 + m_Y: 382 + m_Width: 23 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 20.390625 + m_Height: 61.875 + m_HorizontalBearingX: 1.25 + m_HorizontalBearingY: 51.3125 + m_HorizontalAdvance: 19.5 + m_GlyphRect: + m_X: 485 + m_Y: 308 + m_Width: 21 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 20.40625 + m_Height: 61.875 + m_HorizontalBearingX: -2.21875 + m_HorizontalBearingY: 51.3125 + m_HorizontalAdvance: 19.46875 + m_GlyphRect: + m_X: 70 + m_Y: 382 + m_Width: 22 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 22.046875 + m_Height: 23.1875 + m_HorizontalBearingX: 4.25 + m_HorizontalBearingY: 50.21875 + m_HorizontalAdvance: 26.203125 + m_GlyphRect: + m_X: 335 + m_Y: 400 + m_Width: 23 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 345 + m_Metrics: + m_Width: 32.140625 + m_Height: 22.734375 + m_HorizontalBearingX: 4.625 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 291 + m_Y: 400 + m_Width: 33 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 346 + m_Metrics: + m_Width: 33 + m_Height: 13.65625 + m_HorizontalBearingX: 2.578125 + m_HorizontalBearingY: 26.359375 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 150 + m_Y: 188 + m_Width: 34 + m_Height: 15 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 9.765625 + m_Height: 18.1875 + m_HorizontalBearingX: 4.78125 + m_HorizontalBearingY: 48.015625 + m_HorizontalAdvance: 13.828125 + m_GlyphRect: + m_X: 130 + m_Y: 66 + m_Width: 11 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 21.765625 + m_Height: 18.1875 + m_HorizontalBearingX: 4.78125 + m_HorizontalBearingY: 48.015625 + m_HorizontalAdvance: 25.96875 + m_GlyphRect: + m_X: 73 + m_Y: 233 + m_Width: 23 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 41.71875 + m_Height: 49.078125 + m_HorizontalBearingX: 0.984375 + m_HorizontalBearingY: 48.546875 + m_HorizontalAdvance: 44.78125 + m_GlyphRect: + m_X: 150 + m_Y: 127 + m_Width: 43 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 47.390625 + m_Height: 54.046875 + m_HorizontalBearingX: 2.171875 + m_HorizontalBearingY: 46.0625 + m_HorizontalAdvance: 51.15625 + m_GlyphRect: + m_X: 335 + m_Y: 6 + m_Width: 48 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 360 + m_Metrics: + m_Width: 38.671875 + m_Height: 61.546875 + m_HorizontalBearingX: -0.328125 + m_HorizontalBearingY: 54.515625 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 390 + m_Y: 126 + m_Width: 40 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 368 + m_Metrics: + m_Width: 40 + m_Height: 48.015625 + m_HorizontalBearingX: -0.234375 + m_HorizontalBearingY: 48.015625 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 6 + m_Y: 173 + m_Width: 41 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 397 + m_Metrics: + m_Width: 33.734375 + m_Height: 49.109375 + m_HorizontalBearingX: 2.703125 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 53 + m_Y: 456 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 398 + m_Metrics: + m_Width: 26.34375 + m_Height: 48.078125 + m_HorizontalBearingX: 5.734375 + m_HorizontalBearingY: 48.078125 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 478 + m_Y: 382 + m_Width: 28 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 35.109375 + m_Height: 48.578125 + m_HorizontalBearingX: 0.765625 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 6 + m_Y: 322 + m_Width: 36 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 33.859375 + m_Height: 49.109375 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 99 + m_Y: 456 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 34.203125 + m_Height: 48.046875 + m_HorizontalBearingX: 1.015625 + m_HorizontalBearingY: 48.046875 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 238 + m_Y: 322 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.390625 + m_Height: 48.578125 + m_HorizontalBearingX: 1.453125 + m_HorizontalBearingY: 48.046875 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 147 + m_Y: 321 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 34.515625 + m_Height: 48.046875 + m_HorizontalBearingX: 3.890625 + m_HorizontalBearingY: 48.046875 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 6 + m_Y: 457 + m_Width: 36 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 32.53125 + m_Height: 48.578125 + m_HorizontalBearingX: 3.5 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 284 + m_Y: 322 + m_Width: 34 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 433 + m_Metrics: + m_Width: 33.53125 + m_Height: 33.40625 + m_HorizontalBearingX: 2.609375 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 157 + m_Y: 219 + m_Width: 35 + m_Height: 34 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 437 + m_Metrics: + m_Width: 32.265625 + m_Height: 19.046875 + m_HorizontalBearingX: 3.171875 + m_HorizontalBearingY: 31.6875 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 29 + m_Y: 233 + m_Width: 33 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 440 + m_Metrics: + m_Width: 28.9375 + m_Height: 31.953125 + m_HorizontalBearingX: 4.78125 + m_HorizontalBearingY: 38.25 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 203 + m_Y: 219 + m_Width: 30 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 441 + m_Metrics: + m_Width: 28.96875 + m_Height: 31.953125 + m_HorizontalBearingX: 5.015625 + m_HorizontalBearingY: 38.25 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 361 + m_Y: 461 + m_Width: 29 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 16.09375 + m_Height: 49.40625 + m_HorizontalBearingX: 0.765625 + m_HorizontalBearingY: 49.40625 + m_HorizontalAdvance: 16.5625 + m_GlyphRect: + m_X: 329 + m_Y: 311 + m_Width: 17 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 32.9375 + m_Height: 48.578125 + m_HorizontalBearingX: 2.734375 + m_HorizontalBearingY: 48.046875 + m_HorizontalAdvance: 35.21875 + m_GlyphRect: + m_X: 193 + m_Y: 321 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 33.265625 + m_Height: 49.109375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 206 + m_Y: 382 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 49.703125 + m_Height: 49.078125 + m_HorizontalBearingX: 1.3125 + m_HorizontalBearingY: 48.484375 + m_HorizontalAdvance: 51.3125 + m_GlyphRect: + m_X: 152 + m_Y: 6 + m_Width: 51 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 34.3125 + m_Height: 34.1875 + m_HorizontalBearingX: 2.640625 + m_HorizontalBearingY: 34.1875 + m_HorizontalAdvance: 39.59375 + m_GlyphRect: + m_X: 432 + m_Y: 354 + m_Width: 35 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 13.625 + m_Height: 34.296875 + m_HorizontalBearingX: 1.421875 + m_HorizontalBearingY: 33.828125 + m_HorizontalAdvance: 17.6875 + m_GlyphRect: + m_X: 491 + m_Y: 126 + m_Width: 15 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -1390796265212201068} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 77 + m_Height: 60 + - m_X: 77 + m_Y: 0 + m_Width: 69 + m_Height: 60 + - m_X: 146 + m_Y: 0 + m_Width: 62 + m_Height: 61 + - m_X: 0 + m_Y: 60 + m_Width: 62 + m_Height: 46 + - m_X: 62 + m_Y: 60 + m_Width: 62 + m_Height: 46 + - m_X: 124 + m_Y: 60 + m_Width: 22 + m_Height: 31 + - m_X: 208 + m_Y: 0 + m_Width: 61 + m_Height: 60 + - m_X: 269 + m_Y: 0 + m_Width: 60 + m_Height: 23 + - m_X: 329 + m_Y: 0 + m_Width: 59 + m_Height: 66 + - m_X: 269 + m_Y: 23 + m_Width: 58 + m_Height: 70 + - m_X: 208 + m_Y: 60 + m_Width: 58 + m_Height: 61 + - m_X: 146 + m_Y: 61 + m_Width: 58 + m_Height: 60 + - m_X: 124 + m_Y: 91 + m_Width: 20 + m_Height: 74 + - m_X: 388 + m_Y: 0 + m_Width: 58 + m_Height: 60 + - m_X: 446 + m_Y: 0 + m_Width: 57 + m_Height: 60 + - m_X: 388 + m_Y: 60 + m_Width: 57 + m_Height: 60 + - m_X: 327 + m_Y: 66 + m_Width: 57 + m_Height: 60 + - m_X: 266 + m_Y: 93 + m_Width: 56 + m_Height: 60 + - m_X: 445 + m_Y: 60 + m_Width: 55 + m_Height: 60 + - m_X: 144 + m_Y: 121 + m_Width: 54 + m_Height: 61 + - m_X: 198 + m_Y: 121 + m_Width: 54 + m_Height: 61 + - m_X: 0 + m_Y: 106 + m_Width: 54 + m_Height: 61 + - m_X: 54 + m_Y: 106 + m_Width: 53 + m_Height: 60 + - m_X: 107 + m_Y: 165 + m_Width: 37 + m_Height: 46 + - m_X: 54 + m_Y: 166 + m_Width: 52 + m_Height: 61 + - m_X: 0 + m_Y: 167 + m_Width: 52 + m_Height: 60 + - m_X: 384 + m_Y: 120 + m_Width: 51 + m_Height: 74 + - m_X: 322 + m_Y: 126 + m_Width: 51 + m_Height: 60 + - m_X: 252 + m_Y: 153 + m_Width: 50 + m_Height: 60 + - m_X: 435 + m_Y: 120 + m_Width: 50 + m_Height: 46 + - m_X: 485 + m_Y: 120 + m_Width: 26 + m_Height: 46 + - m_X: 435 + m_Y: 166 + m_Width: 49 + m_Height: 60 + - m_X: 484 + m_Y: 166 + m_Width: 27 + m_Height: 61 + - m_X: 302 + m_Y: 186 + m_Width: 49 + m_Height: 58 + - m_X: 351 + m_Y: 186 + m_Width: 33 + m_Height: 74 + - m_X: 384 + m_Y: 194 + m_Width: 48 + m_Height: 62 + - m_X: 432 + m_Y: 226 + m_Width: 48 + m_Height: 61 + - m_X: 384 + m_Y: 256 + m_Width: 48 + m_Height: 60 + - m_X: 480 + m_Y: 227 + m_Width: 30 + m_Height: 75 + - m_X: 432 + m_Y: 287 + m_Width: 47 + m_Height: 61 + - m_X: 479 + m_Y: 302 + m_Width: 32 + m_Height: 74 + - m_X: 0 + m_Y: 376 + m_Width: 30 + m_Height: 75 + - m_X: 0 + m_Y: 316 + m_Width: 47 + m_Height: 60 + - m_X: 0 + m_Y: 451 + m_Width: 47 + m_Height: 60 + - m_X: 0 + m_Y: 260 + m_Width: 27 + m_Height: 55 + - m_X: 0 + m_Y: 227 + m_Width: 23 + m_Height: 32 + - m_X: 30 + m_Y: 376 + m_Width: 34 + m_Height: 74 + - m_X: 47 + m_Y: 316 + m_Width: 47 + m_Height: 60 + - m_X: 47 + m_Y: 450 + m_Width: 46 + m_Height: 61 + - m_X: 64 + m_Y: 376 + m_Width: 33 + m_Height: 74 + - m_X: 94 + m_Y: 316 + m_Width: 47 + m_Height: 60 + - m_X: 93 + m_Y: 450 + m_Width: 46 + m_Height: 61 + - m_X: 97 + m_Y: 376 + m_Width: 35 + m_Height: 73 + - m_X: 23 + m_Y: 227 + m_Width: 44 + m_Height: 31 + - m_X: 27 + m_Y: 258 + m_Width: 47 + m_Height: 57 + - m_X: 67 + m_Y: 227 + m_Width: 34 + m_Height: 31 + - m_X: 74 + m_Y: 258 + m_Width: 46 + m_Height: 57 + - m_X: 106 + m_Y: 211 + m_Width: 45 + m_Height: 47 + - m_X: 120 + m_Y: 258 + m_Width: 45 + m_Height: 57 + - m_X: 151 + m_Y: 213 + m_Width: 46 + m_Height: 45 + - m_X: 144 + m_Y: 182 + m_Width: 45 + m_Height: 26 + - m_X: 132 + m_Y: 376 + m_Width: 36 + m_Height: 69 + - m_X: 141 + m_Y: 315 + m_Width: 46 + m_Height: 61 + - m_X: 165 + m_Y: 258 + m_Width: 35 + m_Height: 57 + - m_X: 197 + m_Y: 213 + m_Width: 41 + m_Height: 44 + - m_X: 139 + m_Y: 445 + m_Width: 44 + m_Height: 64 + - m_X: 168 + m_Y: 376 + m_Width: 32 + m_Height: 64 + - m_X: 187 + m_Y: 315 + m_Width: 45 + m_Height: 61 + - m_X: 189 + m_Y: 182 + m_Width: 24 + m_Height: 23 + - m_X: 213 + m_Y: 182 + m_Width: 36 + m_Height: 18 + - m_X: 200 + m_Y: 260 + m_Width: 45 + m_Height: 47 + - m_X: 238 + m_Y: 213 + m_Width: 45 + m_Height: 47 + - m_X: 183 + m_Y: 440 + m_Width: 46 + m_Height: 62 + - m_X: 200 + m_Y: 376 + m_Width: 45 + m_Height: 61 + - m_X: 232 + m_Y: 316 + m_Width: 46 + m_Height: 60 + - m_X: 245 + m_Y: 260 + m_Width: 42 + m_Height: 47 + - m_X: 229 + m_Y: 437 + m_Width: 45 + m_Height: 61 + - m_X: 245 + m_Y: 376 + m_Width: 40 + m_Height: 61 + - m_X: 278 + m_Y: 316 + m_Width: 45 + m_Height: 60 + - m_X: 323 + m_Y: 244 + m_Width: 28 + m_Height: 61 + - m_X: 287 + m_Y: 244 + m_Width: 36 + m_Height: 61 + - m_X: 351 + m_Y: 260 + m_Width: 30 + m_Height: 20 + - m_X: 351 + m_Y: 280 + m_Width: 29 + m_Height: 60 + - m_X: 323 + m_Y: 305 + m_Width: 28 + m_Height: 61 + - m_X: 380 + m_Y: 316 + m_Width: 46 + m_Height: 46 + - m_X: 351 + m_Y: 340 + m_Width: 27 + m_Height: 22 + - m_X: 426 + m_Y: 348 + m_Width: 46 + m_Height: 46 + - m_X: 472 + m_Y: 376 + m_Width: 39 + m_Height: 60 + - m_X: 274 + m_Y: 437 + m_Width: 40 + m_Height: 60 + - m_X: 285 + m_Y: 394 + m_Width: 44 + m_Height: 35 + - m_X: 314 + m_Y: 436 + m_Width: 41 + m_Height: 47 + - m_X: 329 + m_Y: 394 + m_Width: 34 + m_Height: 35 + - m_X: 363 + m_Y: 362 + m_Width: 45 + m_Height: 46 + - m_X: 408 + m_Y: 394 + m_Width: 42 + m_Height: 46 + - m_X: 363 + m_Y: 408 + m_Width: 40 + m_Height: 47 + - m_X: 355 + m_Y: 455 + m_Width: 40 + m_Height: 44 + m_FreeGlyphRects: + - m_X: 327 + m_Y: 23 + m_Width: 2 + m_Height: 43 + - m_X: 266 + m_Y: 60 + m_Width: 3 + m_Height: 33 + - m_X: 144 + m_Y: 91 + m_Width: 2 + m_Height: 30 + - m_X: 204 + m_Y: 61 + m_Width: 4 + m_Height: 60 + - m_X: 107 + m_Y: 106 + m_Width: 17 + m_Height: 59 + - m_X: 384 + m_Y: 66 + m_Width: 4 + m_Height: 54 + - m_X: 322 + m_Y: 93 + m_Width: 5 + m_Height: 33 + - m_X: 252 + m_Y: 121 + m_Width: 14 + m_Height: 32 + - m_X: 503 + m_Y: 0 + m_Width: 8 + m_Height: 120 + - m_X: 500 + m_Y: 60 + m_Width: 11 + m_Height: 60 + - m_X: 302 + m_Y: 153 + m_Width: 20 + m_Height: 33 + - m_X: 373 + m_Y: 126 + m_Width: 11 + m_Height: 60 + - m_X: 432 + m_Y: 194 + m_Width: 3 + m_Height: 32 + - m_X: 480 + m_Y: 226 + m_Width: 4 + m_Height: 1 + - m_X: 510 + m_Y: 227 + m_Width: 1 + m_Height: 75 + - m_X: 479 + m_Y: 287 + m_Width: 1 + m_Height: 15 + - m_X: 30 + m_Y: 450 + m_Width: 17 + m_Height: 1 + - m_X: 52 + m_Y: 167 + m_Width: 2 + m_Height: 60 + - m_X: 0 + m_Y: 259 + m_Width: 27 + m_Height: 1 + - m_X: 23 + m_Y: 258 + m_Width: 4 + m_Height: 2 + - m_X: 106 + m_Y: 166 + m_Width: 1 + m_Height: 45 + - m_X: 101 + m_Y: 227 + m_Width: 5 + m_Height: 31 + - m_X: 144 + m_Y: 208 + m_Width: 108 + m_Height: 3 + - m_X: 151 + m_Y: 208 + m_Width: 101 + m_Height: 5 + - m_X: 0 + m_Y: 315 + m_Width: 141 + m_Height: 1 + - m_X: 97 + m_Y: 449 + m_Width: 42 + m_Height: 1 + - m_X: 139 + m_Y: 509 + m_Width: 372 + m_Height: 2 + - m_X: 132 + m_Y: 445 + m_Width: 7 + m_Height: 5 + - m_X: 189 + m_Y: 205 + m_Width: 63 + m_Height: 8 + - m_X: 213 + m_Y: 200 + m_Width: 39 + m_Height: 13 + - m_X: 197 + m_Y: 257 + m_Width: 41 + m_Height: 1 + - m_X: 249 + m_Y: 182 + m_Width: 3 + m_Height: 31 + - m_X: 200 + m_Y: 257 + m_Width: 38 + m_Height: 3 + - m_X: 168 + m_Y: 440 + m_Width: 15 + m_Height: 5 + - m_X: 183 + m_Y: 502 + m_Width: 328 + m_Height: 9 + - m_X: 200 + m_Y: 437 + m_Width: 29 + m_Height: 3 + - m_X: 283 + m_Y: 213 + m_Width: 19 + m_Height: 31 + - m_X: 283 + m_Y: 213 + m_Width: 4 + m_Height: 47 + - m_X: 200 + m_Y: 307 + m_Width: 123 + m_Height: 8 + - m_X: 232 + m_Y: 307 + m_Width: 91 + m_Height: 9 + - m_X: 287 + m_Y: 305 + m_Width: 36 + m_Height: 11 + - m_X: 381 + m_Y: 260 + m_Width: 3 + m_Height: 56 + - m_X: 380 + m_Y: 280 + m_Width: 4 + m_Height: 36 + - m_X: 426 + m_Y: 316 + m_Width: 6 + m_Height: 32 + - m_X: 472 + m_Y: 348 + m_Width: 7 + m_Height: 28 + - m_X: 285 + m_Y: 429 + m_Width: 29 + m_Height: 8 + - m_X: 378 + m_Y: 340 + m_Width: 2 + m_Height: 22 + - m_X: 323 + m_Y: 366 + m_Width: 40 + m_Height: 28 + - m_X: 285 + m_Y: 376 + m_Width: 78 + m_Height: 18 + - m_X: 351 + m_Y: 362 + m_Width: 12 + m_Height: 32 + - m_X: 450 + m_Y: 436 + m_Width: 61 + m_Height: 75 + - m_X: 408 + m_Y: 362 + m_Width: 18 + m_Height: 32 + - m_X: 450 + m_Y: 394 + m_Width: 22 + m_Height: 117 + - m_X: 403 + m_Y: 440 + m_Width: 108 + m_Height: 71 + - m_X: 285 + m_Y: 429 + m_Width: 78 + m_Height: 7 + - m_X: 403 + m_Y: 408 + m_Width: 5 + m_Height: 103 + - m_X: 229 + m_Y: 499 + m_Width: 282 + m_Height: 12 + - m_X: 229 + m_Y: 498 + m_Width: 126 + m_Height: 13 + - m_X: 274 + m_Y: 497 + m_Width: 81 + m_Height: 14 + - m_X: 314 + m_Y: 483 + m_Width: 41 + m_Height: 28 + - m_X: 395 + m_Y: 455 + m_Width: 116 + m_Height: 56 + - m_X: 355 + m_Y: 429 + m_Width: 8 + m_Height: 26 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: d05787702efa92742a8128bf4f72413c + pointSizeSamplingMode: 0 + pointSize: 66 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!21 &5618644325099872008 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-BlackItalic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -1390796265212201068} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BlackItalic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BlackItalic SDF.asset.meta new file mode 100644 index 0000000..bd1683b --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BlackItalic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0f830b4b35476a64095c922deaa35b72 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Bold SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Bold SDF.asset new file mode 100644 index 0000000..ae832cf --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Bold SDF.asset @@ -0,0 +1,2773 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-7946609771462161899 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Bold SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_MipsStripped: 0 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IsPreProcessed: 0 + m_IgnoreMipmapLimit: 0 + m_MipmapLimitGroupName: + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + m_PlatformBlob: + image data: 262144 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a10122020202020202020100e0900000000000000000000000000000000000913191c202020202020201b1913090000000000000000000000000000000000000000040e14162020202020202016140e0400000000000000000000000000000000000000000000000000000000000000080e10202020202020201b19130900000000000000000000000000000000040d13152020202020201e12100a01000000000000000000040a0c1c2020202020201f0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e14171818181818181813110b0200000000000b141b1d2020202020202016140e040000000000040e1416202020202020201d1b150b000000000000080e1020202020202020200e0c0600000000000000070c0e202020202020201d14120c03000000000000000000000000000000000000000000000000090f111c2020202020202013110b020000000000000000000000000000000000000000000000040e1416202020202020202017150f050000000000000000000000000000000000000000000000040e1416202020202020202020202020202020202020201f1e1c1916120d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000005131e2527353535353535353526231c110300000000000000000000000000000d1b262e3135353535353535302e261a0c000000000000000000000000000000000000081621292b353535353535352b292116080000000000000000000000000000000000000000000000000000000003111c232635353535353535312e261a0c0000000000000000000000000000071521282b3535353535353427251e1305000000000000000b171f213135353535353535211e170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a2124292c2d2d2d2d2d2d2d29261f14060000000e1c282f32353535353535352c29211608000000081621292c353535353535353330281d0f00000003111c232535353535353535352320190e00000000010f1a21243535353535353533292720140700000000000000000000000000000000000000000004121c2426313535353535353528261e1306000000000000000000000000000000000000000000081621292b35353535353535352d2a221709000000000000000000000000000000000000000000081621292b353535353535353535353535353535353535353433312f2c272220190e0c0600000000000000000000000000000000000000000000000000000000000000000000000001132330393c4a4a4a4a4a4a4a4a3b382f211100000000000000000000000000001b2b3942464a4a4a4a4a4a4a4642382a1a0000000000000000000000000000000000041626333d404a4a4a4a4a4a4a403d3326160400000000000000000000000000000000000000000000000000000011212f383b4a4a4a4a4a4a4a4642382b1a09000000000000000000000000041525333c404a4a4a4a4a4a493c393023130000000000000b1b293336464a4a4a4a4a4a4a3633291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f2d36393e41424242424242423e3a31241402000b1c2c3a44474a4a4a4a4a4a4a413d3426160400041626343d414a4a4a4a4a4a4a48443a2d1d0b000011212e373a4a4a4a4a4a4a4a4a38352c1e0e0000000f1f2d36394a4a4a4a4a4a4a483f3b32251406000000000000000000000000000000000000000212222f383b474a4a4a4a4a4a4a3e3a3124130200000000000000000000000000000000000000041626333d404a4a4a4a4a4a4a4a423e3527170500000000000000000000000000000000000000041626333d404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49484744413c38352b23211a0f08000000000000000000000000000000000000000000000000000000000000000000000a1e30414d526060606060606060504c3f2f1c090000000000000000000000000e1e3949565b606060606060605b5548381d0d000000000000000000000000000000000e21334451566060606060606056514433210e0000000000000000000000000000000000000000000000000000081c2f3f4c50606060606060605b55493826130000000000000000000000000d21334350556060606060605e524d41301808000000000417293a464c5b6060606060605f4c4639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1c2a333d4a4e545658585858585858534e42311f0b0014283a4b575d6060606060606056514434210e000e2134445156606060606060605d584b3a281501081c2e3f4b5060606060606060605e493c2c190600071a2d3d4a4e606060606060605d544f433224140000000000000000000000000000000000000010202f404c515c5f606060606060534e42311e0b000000000000000000000000000000000000000e2133445156606060606060606057524535220f000000000000000000000000000000000000000e21334451566060606060606060606060606060606060605f5f5e5c5956524d483c38352c231c110600000000000000000000000000000000000000000000000000000000000000001025394d5f677575757575757575655d4c382308000000000000000000000005192b3c566771757575757575757067553b2a180500000000000000000000000000000014293d51626b757575757575756b62513d291400000000000000000000000000000000000000000000000000000e23384c5d6575757575757575706755422e1900000000000000000000000013283c50626a75757575757573675f4d362614010000000a1f334658617175757575757574615746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3a474c5b63696c6d6d6d6d6d6d6d68604e3a2611001b2f44576972757575757575756b62513d29140014293d51626b7575757575757572695844301b060e23374b5d657575757575757575705a4935200c000c21364a5b70757575757575757269614f423219090000000000000000000000000000000000071b2d3e4c5e66717575757575757568604e3a26110000000000000000000000000000000000000014293d51626b75757575757575756c63523e2a150000000000000000000000000000000000000014293d51626b757575757575757575757575757575757575757473716e6b67625a554e493d372e211a0e0000000000000000000000000000000000000000000000000000000000000215273752677d8a8a8a8a8a8a8a8a7b655036261401000000000000000000000b2035485a71858a8a8a8a8a8a8a85705948341f0b000000000000000000000000000000162b40566b808a8a8a8a8a8a8a806b56402b160100000000000000000002090b0c09030000000000000000000010263b50657b8a8a8a8a8a8a8a85705b46311b000000000000000000000006192c3c556a808a8a8a8a8a8a897d675443301c080000000c21364c6176858a8a8a8a8a8a8b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3b4858616e797e81828282828282827e68533e2913001d32475d72878a8a8a8a8a8a8a806b56412c1601162c41566b808a8a8a8a8a8a8a87725d48331d0810253a50657b8a8a8a8a8a8a8a8a78634d38230e000e24394e63798a8a8a8a8a8a8a887f69604f37261401000000000000000000000000000000000d22364a5c667c868a8a8a8a8a8a8a7e68533e281300000000000000000000000000000000000001162b40566b808a8a8a8a8a8a8a8a816c57422d1702000000000000000000000000000000000000162b40566b808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888684817c78726a635b504b3f352c1f140300000000000000000000000000000000000000000000000000000000081d3144556e83989f9f9f9f9f9f97816c5443301c08000000000000000000000d22384d62788da39f9f9f9f9f9f8b77624c37220d000000000000000000000000000000162b40566b80959f9f9f9f9f95806b56402b1601000000000000020b0a151d20211e160c0a040000000000000010263b50657b909f9f9f9f9f9b85705b46311b00000000000000000000000c2035495a71869c9f9f9f9fa79d8873604b35200b000004182a3a54697e94a39f9f9f9fa9927c6752382816020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a293a48596276838e93969797979797978676614c37210c001d32475d72879c9f9f9f9f9f96816b56412c1601162c41566b81969f9f9f9f9f9d88725d48331d0810253a50657a8f9f9f9f9f9f9f8d78634d38230e000c21364a5b70859b9f9f9fab9f9d937e695544311d0800000000000000000000000000000004172a3a4f647a8c9c9faa9f9f9f9e8976614b36210c00000000000000000000000000000000000001162b40566b80959f9f9f9f9f9f97826c57422d1702000000000000000000000000000000000000162b40566b80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9c9996918d8780786f655d4e493d321e160a0000000000000000000000000000000000000000000000000000000b20364b6075899eb3b5b5b5b5b39d8874604b35200b00000000000000000005182a3b54697e94a9c1b5b5b5bcab937d6853392916030000000000000000000000000000162b40566b8095abb5b5b5ab95806b56402b1601000000000006131e26283236363228211f170c00000000000010263b50657b90a5b5b5b5b09b86705b46311b00000000000000000000000e23384d63788da4b5b5b5c5b7a68f7a654f3a251000000a1f34475970859ab0c1b5b5b5ae98836e5645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192838465862778699a1a9abadadada79d8777625847331f0a001d32475d72879cb2b5b5b5ab96816b56412c1601162c41566b8196abb5b5b5b29d88725d48331d0810253a50657a8fa5b5b5b5b5a28d78634d38230e00071a2d3d53687d92a8b9b5bcb5b29d8874604b35200b0000000000000000000000000000000a1f3347586e8399aab4bbb5c2ac97826d5746321e0a00000000000000000000000000000000000001162b40566b8095abb5b5b5b5ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b4b3b1aeaba7a49c958c847b6f635b4f4232281b0c000000000000000000000000000000000000000000000000000010263b50657b90a7b9cccacacbb8a68f7a654f3a25100000000000000000000b1f34475970859ab0c5cacadac9ae99846f5746321e0a0000000000000000000000000000162b40566b8095abc0cac0ab95806b56402b160100000000051324313a38454b4b46393633291c0c000000000010263b50657b90a5bacac5b09b86705b46311b0000000000000000000005182a3b54697f94a9c2d2cad4c4ab96816b563d2d1a07000c22374c61778b9fb4cacacac9b49e8975604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000114263745566176869ca4b3bfc1c7b9a89e89796359483a2a1704001d32475d72879cb2c7cac0ab96816b56412c1601162c41566b8196abc0cac7b29d88725d48331d0810253a50657a8fa5bacacab8a28d78634d38230e00000f21364b6176899eb4c9cfcab7a6907b66503929170300000000000000000000000000000c21374c61778b9fb4c8cec9b5a48f7a644f3929160300000000000000000000000000000000000001162b40566b8095abc0cacac1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0cacacacacacacacacacacacacad9cecac9c8c6c3c0c2b6b1ab9f998f837969604b45392a1c0c000000000000000000000000000000000000000000000000071b2d3e576c8197acc5d6e8e7d5c4ab96816c563e2d1b0700000000000000000d22374c62778b9fb4cadfdfdfc9b49f8a76614b36210c0000000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b160100000000132331424e5356606157584c463a2918080000000010263b50657b90a5bad0c5b09b86705b46311b000000000000000000000b1f34485970859bb0c5dadfdcc7b29d87725c4a36210d0316283953687d92abbccfdfe1cdb9a8917b6651372614010000000000000000000000000000000000000000000000000000000000000000050b0d1013141516151412100c141d3144556074849aa4b5c3d0c9baa99e8a7a645b493b2b1c0c00001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e00000a1e3246576d8297acc2d2d5c4ad98836d5746331e0a00000000000000000000000000061a2c3d53697e93aabbced7c7b19c86715c4b371b0b0000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5dfded1c8c5bbbbbbbbbbbbbbbbbbbbbcbec1c5cacecac9bcb5afa1998b7e6e6057473a2a1b0b00000000000000000000000000000000000000000000000d22364a5c73889db2c8ddf2f2ddc7b29d87725c4a36220d000000000000000417293a53687d93abbccfe3f6e2cdbaa9917c67513727150100000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b16010000000b1b30414e6068727576746d6158463626140100000010263b50657b90a5bad0c5b09b86705b46311b000000000000000000000d22374c62778b9fb4cacecacecab6a58e79644e39240f091e3246576f8499aec9cecaced6c6ad97826d5544311d0800000000000000000000000000000000000000000000000000000000040a0c1319202225282a2b2b2a292826211f33444b60738399a2b4c2d2cfbcab9f8b7b655c4a3d2c1d0d0000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e0000031629394f647a8fa4b5c9dec9b49f8a76614c36210e000000000000000000000000000c2135495b70859bb0c8d8cdbaa9937e69543e2e1b000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5e3d1c0b4afa5a5a5a5a5a5a5a5a5a6a6a8abb0b4bbc8cacfcabfb3a99f93837561584739291808000000000000000000000000000000000000000000000f24394f64798ea6b7cbdff4f4dfcab7a58e79644f39240f000000000000000a1f3346586f8499afc9d9ebfdead7c7ad98826d5544311d0800000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b16010000031729394d5f687e878b8b898276615443301c0a00000010263b50657b90a5bad0c5b09b86705b46311b0000000000000000000417293a53687e93abbcc8bbb4bbc8c3aa95806a553c2c190c21364b61768a9fb4c8bbb4bbc8c8b39e8874604b35200b0000000000000000000000000000000000000000000000000000080c181f22292b34383b3d3f4041403e3d3b37334250626d8197a1b3c0d1ccbcb49f8d7d675d4c3e2d1f0f000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e0000000b22364a5c71869cb1c7d7cdbaa9927d68533c2b19050808080808080808080808001325364e63788da3b5c9dec9b49f8a76614c372110000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5dcc8b4a29a909090909090909090909193969b9faab1b6c2ccd0c7bab4a199857661574636261401000000000000000000000000000000000000000006192c3c556b8095aac4d4e6f6f4e6d4c3ab95806b563d2d1a070000000000000c21364c61768a9fb4c9dff4f4f3dec9b39e8974604b35200b00000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b160100000a1e334657677d929da5a89f988473604b38271502000010263b50657b90a5bad0c5b09b86705b46311b0000000000000000000a1f3346586f8499afc9bbaa9faab8c5b19c86715a49352014263751667c91a9babbaa9faabbc8b8a7907a65503b251000000000000000000000000000000000000000000000000008111c232a34373e3c484d5053545556555352504c474f606b80959fb1bfcfcdbdaf9d937e685f4d3f2f201001000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e000000071b2e3e53697e93a9bacdd7c7af9a85705a4835201e1e1e1e1e1e1e1e1e1e1e1e1e1c3043546b8095aac1d1d3c3ad98826d5847331f0a000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5dac5af9a847b7b7b7b7b7b7b7b7b7b7c7e81858b939ca4b3b8c5d2cdbfb3a39b8575615443301c1000000000000000000000000000000000000000000c2035495a71869cb1c6dbeae2dfe2dcc7b19c87725b4a36210c00000000000316283852677d92aabbcee2e3dfe3e0ccb9a7907b65503b251000000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b16010004182a3b4b6176889eb2b7bab4a2927d675645311d0b000010263b50657b90a5bad0c5b09b86705b46311b0000000000000000000c21364c61768a9fb4c9b49f8a9ea7b8b5a48d78634d38231d3144556d8298adc7b49f8a9faabbc5ac96816c573e2d1b0700000000000000000000000000000000000000000004111c232f383a474c53595a626568696a6b6a69676561585f697e939eafbdcecfbeb09f957f6a604e413021110200000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e000000001021364c61768a9fb4c9decab59f8c78624d38333333333333333333333333333333354a6073879db2c7ddcab6a58f7a65503a2a1704000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e66666666666666666667696c70767e86929ea7b5c1d1cfc1b4a3998372604b3e2d1808000000000000000000000000000000000000000d23384d62788da4b5c9ded7cdc9cdd7cab6a48e79634e39240e0000000000091e3245566e8399aec8d8dacfcacfdad6c5ac96816c573e2d1b07000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b1601000b1f3447596a8095a6b8cacdc0b29d8774604b392916030010263b50657b90a5bad0c5b09b86705b46311b00000000000000000216283852677c92aabbc5af9a84899eb3c2a9947e69543b2a20354b6074889eb3c3ae99838b9fb4c8b29d88735c4a36220d00000000000000000000000000000000000000000c181f2e373f4b505961686e73777a7d7f80807f7e7d7b76726e7d8d9fb5bcccd0bfb2a096816c615042312312030000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e000000000a1f3346586d8298adc2d3cfbcab947f6a553e4848484848484848484848484848483850657a8fa5b7cad8c8b29c8773604a35200c00000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e585050505050505051515356586168737d899ba3b4c0d1d1c1b3a1947f6a5c4a36251300000000000000000000000000000000000004172a3a54697e94a9c2d2d7c7bab4bac7d3c2aa957f6a553c2c1906000000000b21364b60758a9fb4c9dac9bcb5bcc9dac7b29d87725c4a36220d000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b160106192c3c4c61778a9eb4c5d5dfcab7a5937e695746321e0c0010263b50657b90a5bad0c5b09b86705b46311b0000000000000000091e3245566e8398aec8c1ac96818298adc9b09a8570594834253b50657a90a7b8c3a8937e869cb1c6b7a68f79644f3a240f00000000000000000000000000000000000003111c2a333f4b505d656f777e83888d9092949596959392908c87838b9fabbccfd1c1b3a1988272604a4333241405000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e000000000417293a50657a8fa4b6cadac9b19c87725c5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d566d8297adc3d4cebbaa947f6a5443301c0700000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58433b3b3b3b3b3b3b3c3e3a474c54606878859aa2b4c4d4d0bfb49f8c7a645443301c0700000000000000000000000000000000000a1f33475870859aafc5dacdbaa99fa9bacdc6b19c86715b4935210c0000000215273751667c91a8bacdcfbcab9fabbccfcab7a58e79644f39240f000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b16010c2035495a6c8196a8b9cde2dfd4c3b39e8875614b3a2a180410263b50657b90a5bad0c5b09b86705b46311b00000000000000000b21364b6075899eb4c9c6a8937e7d92abbcb49f8b77624c372d3d566c8196abc5b6a58d788298adc2c4ab95806b563d2c1a06000000000000000000000000000000000513212e3a474c5d65717b848b93999ea6a5a8a9aaabaaa8a7a5a59d999fa9bac9d3c2b4a39983736054433025150600000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e00000000000c23374b5d72879cb1c8d8cab6a48f7a7373737373737373737373737373737373737375899eb3c9decab49f8b77624c3625130000000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e26262626262627292a3336434b5a6275849aa6b7c9d9cebbaa9b8572604a35201100000000000000000000000000000000000c21374c61778b9fb4cadfc9b49f8a9fb4c4c9b5a48d78634d38230e000000081d3144556d8298adc6d6c5b59f8a9fb5cad4c3aa95806a553c2b19060000000000000000000000162b40566b8095abc0d5c0ab95806b56402b16071b2d3e4d62788b9fb4c6d6cec9cecbb8a6957f6a5847331f0e10263b50657b90a5bad0c5b09b86705b46311b000000000000000114263751667b91a8b9cdbaa88e79778b9fb5bcab937d68533a364a5c72879db2c7b29d87727e93a8c5c7b19c87725b4935210c000000000000000000000000000000061423303f4b58616d7b8590999faaaeb3b8c4bdbebfc0bfbebcc3b6b2aeb4bac7d8cab6a49b8575615544362513070000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e0000000000081c2e3f54697f94aabbced3c2b39e8988888888888888888888888888888888888888889ea8b9ccd4c3ae99836e59473418080000000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1911111111111214171f26303c48576176889dabbccfd8c8b4a3917c67523f2e1c080000000000000000000000000000000216283852687d92aabbced7c2ad988298a6b7cbc2a9947f6a543c2b190500000b20364b6075899eb3c9ccb9a7998499afc4d9c6b19b86715a4835200b0000000000000000000000162b40566b8095abc0d5c0ab95806b56402b160d22364a5c6d8298aabbcec8bbb4bbc8c5b49e8977614c3c2b1910263b50657b90a5bad0c5b09b86705b46311b00000000000000081d3144556d8297adc6c9b49f897570859bb0c9af99846f5846394e64798ea5b7c7ac97816c798ea6b8cab6a48d78634e38230e000000000000000000000000000005142431414d5d6576828f9ba3aeb4bbc8c8cbd5d2d2d1d0d1d2d2d4cac7c3c9ced8dcc6b19c867661574637271808000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e0000000000001122374c61778b9fb4c9dfccb9a79e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea6b8c6d6cbb7a5907b66503b2a18000000000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000408141c2b394758657b8c9fb4c9d9d1c1b19b86715d4b37230a000000000000000000000000000000091e3245566e8399aec8d9d5c4a6917c879db2c8c5b09b85705a4834200b000114263650667b90a7b9ccc9b39e897d92a7c5d6c9b5a38d78624d38230d0000000000000000000000162b40566b8095abc0d5c0ab95806b56402b161c2f3f4e647a8d9fb5c8c4b7aa9faabbccb9a896816c5a48352010263b50657b90a5bad0c5b09b86705b46311b000000000000000b20354b6074889eb3c8c5af9a85706a7f94aac3b49f8a76614c3c556a7f95aac3baa9917c6673889eb3c8c2aa947f6a553c2b190500000000000000000000000002122331424e5f677b8898a0b0b5c1caced6ccc9c4c0bdbbbbbbbdc0c4c9ccd6dfe2eaddc8b29d887a675f4e41312312010000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e0000000000000a1f3447596e8398aec3d4d6c5b9b3b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b3b8c4d5d9c9b29d8774604b35200d000000000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000010d1b2a3a4b5d6c8197abbccfddc9b5a3907b65503827150200000000000000000000000000000b21364b6075899fb4c9decbb8a68d788298adc8c9b5a38d78624d38220d00081c3043546c8197acc5d6c9ae9983798ea7b8ccd2c2a9937e69543a2a170400000000000000000000162b40566b8095abc0d5c0ab95806b56402b1623374b5d6f849aabbccbb7a69d8a9fb4c9c6b49f8b78624d3d2d1a263b50657b90a5bad0c5b09b86705b46311b0000000000000010253a50657a8fa7b8ccc6aa957f6a63798ea5b6baa9927c6752485a71869bb1c6b49f8a76616e8398adc3c6b09b86715a4834200b000000000000000000000000102030414e60697d8c9da6b2bec9d2d0c7c6b9b3afaaa8a6a6a6a8aaafb3b9c5c7d0dedfcbb7a69d8b7d68604e41301f0f0000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e00000000000004182a3a50667b90a5b7cadfd6ccc9c8c8c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c6c8c8cbd5e3cfbcab95806a5443301c08000000000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1702000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000c1c2e3f4d62788c9fb4cadfd2c1ad97826d5645311d09000000000000000000000000000114263651667b91a8bacdddc8b39e88737d92aabbcec1a9937e69543b2a18050b20354b6074889db3c8cfbcab937d72899eb3c8dac5af9a85705847331f0a00000000000000000000162b40566b8095abc0d5c0ab95806b56402b19304150657b90a1b3c9c7b29d878095abbccdbaa997826d5b4a3621263b50657b90a5bad0c5b09b86705b46311b000000000000071b2d3e566c8196abc5ccb9a88f7a655b72879cb2c7ae98836e564d62788da3b5c4af99846f57687d92a7c2c9b5a38d78624d38220d00000000000000000000000b1b2d3e4d5f697e8d9faab7c4cfd2c9bfb3afa89e9995929190919295999ea7afb3bfc9d2d4c4b7a99f8d7e685f4d3d2d1b0a00000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e000000000000000c20354b6074879db2c8d9e8d6c6b9b4abababababababababababababababb1b6c2d3e5dfcab49f8b78624d36261401000000000000000000000000000000000000000000000001162b40566b8095abc0d5d7c1ac97826c57422d1700000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000112035495a6e8399aec7d7dec8b39e8975604b36200b00000000000000000000000000081c3043546d8297acc6d7d9c3ae99846e768b9fb4cac5af9a85705947341f0b10253a4f657a8fa6b7cbcab59f8b776f8499afc4d9cab49f8b77614c37210c00000000000000000000162b40566b8095abc0d5c0ab95806b56402b27374d5f70859bb0bfcdbaa9957f788c9fb4cac7b49f8c79634e3e2e263b50657b90a5bad0c5b09b86705b46311b0000000000000d22364a5c72879db2c7c9b39e897560566b8196abc5b49e89756054697e93a9c1c2a8937e695362778ca4b5c9c1a9937e69543a2a1804000000000000000000031628394a5c677d8d9fabbbc8d4cec2b5b1a199918984807d7c7b7c7d8084899099a1b1b5c2ced4c7baab9f8d7d675b4a39281603000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e00000000000000081c3043546a7f95aabbcee1cdb9a89e9696969696969696969696969696969ca4b6caded5c4af99846f5a4835180800000000000000000000000000000000000000000000000001142636566b8095abc0d5d7c1ac97826c5737271502000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000006192c3c50667b90a9bacde0ccb8a78f7a654f3a2510000000000000000000000000000b20354b6074889eb3c8ddd3c3a8937e696f849aafc9cab49f8b77624c37220d1b2d3e566b8196abc4d5c5b09b8570697e94a9c3d4cebbaa927d675238281602000000000000000000162b40566b8095abc0d5c0ab95806b56402b314455677c91a3b5c9c7b49f8a776e8399aebfcfbcab99836e5c4b37263b50657b90a5bad0c5b09b86705b46311b0000000000000f24394f64798ea5b7cac3ae99846e5550657a8fa7b8b9a8907b66586f849aafc4b5a48d78624d5971869cb1c6c5af9a85705847331f0a000000000000000000091e324657647a8b9fabbcc9d8ccbdb1a39b8f847b756f6b68666666686b6f757b848f9ba3b1bdccd7c9bcab9f8a79635745321e0e000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e00000000000000011426364d62778b9fb4cadec9b49e8a818181818181818181818181818181869cb1c6dccbb8a6917c67513c2b1900000000000000000000000000000000000000000000000000081c3043546b8095abc0d5d7c1ac97826c5544311d0d000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000e21364b60758a9fb4c9ded6c5a9947f6a543f2a150000000000000000000000000010253a4f657a8fa6b8cbdecab6a48d7863687e93abbccfbcab937e68533a291722364a5c72879db2c7d2c1a9947e6963788da5b7cad9c8ae99836e5645321e09000000000000000000162b40566b8095abc0d5c0ab95806b564028394b6074869cb1c1cebaa997816c647a8ea1b3c9c9b3a18f7a644f402f3b50657b90a5bad0c5b09b86705b46311b0000000000061a2c3d556b8095aac3d4c4a8937e69534b6074889eb3c6ac97826d61768b9fb4c6b19c86715a48566b8196abc7cab49f8b77614c37220c0000000000000000061a2c3d4b6175869ca9bac9daccbcaf9f97867a6f666055555351515153555560666f7a86979fafbcccd9c9baa99c8675604b3c2c19060000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0810253a50657a8fa5bacfcdb8a28d78634d38230e000000000000000008203448596f8499aec4d4cdb9a88d786c6c6c6c6c6c6c6c6c6c6c6c6c73889db2c7ddc8b39e8874604b36200e0000000000000000000000000000000000000000000000000417293a4b6073859bb0c6dbdcc7b19c8674604b3b2b18050000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000000091e32455670859ab0c5dad8c3ae99836e59442e19000000000000000000000000061a2c3d566b8096abc4d5dcc7b29c87725a61778b9fb4cac9af9a846f5847331f24394e64798ea5b7cac9b5a38d78625b72879db2c7dcc9b49e8975604b36210b000000000000000000162b40566b8095abc0d5c0ab95806b5640324557687e93a4b6cac6b49f8b78625c6f8499abbccfbfaf9a84705e4c363b50657b90a5bad0c5b09b86705b46311b00000000000c2135495b71869cb1c6cbb7a68d78634e44556d8297adc7b39e8874677d92aabbc4aa95806b553c50667b90a9bacdbbaa927d685239291603000000000000000c2136495b6c8196a4b6c7d7cfbfaf9e958174645c514b44373d3c3b3c3d37444b515c647481959eafbfcfd7c7b6a496806b5a4935200e0000000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d48331d0010253a50657a8fa5bacfcdb8a28d78634d38230e000000000000000005182b3b51667c91a6b7cbd6c6aa95806b5456565656565656565656657b90a5b7cad1c0ab96806b5544311d08000000000000000000000000000000000000000000000000081f334758687e93a3b5c9dddecab6a4947f6959483420110000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000002162838566c8196abc1d6dbc6b19c86715c3828160200000000000000000000000c2135495b72879cb2c7dcd7c7ab96816c565970859aafc9cab49f8b76614c37212c3d556b8095aac3d4c6b09b86715a576c8197acc7d8cdb9a8917b6651362614010000000000000000162b40566b8095abc0d5c0ab95806b56403a4b6075889db3c2ccb9a896816c5a4e64798d9fb5c8c8b4a2907b6654433b50657b90a5bad0c5b09b86705b46311b00000000000e23384e63788da4b6cac8b29d88735b493751667c91a9bab8a78f7a6e8398aec8b8a68f7a644f3a4b60758a9fb4c9c8ae99846f5746321e0a000000000000061a2c3d4e63798b9fb4c3d3d4c3b2a095806c60564b3e36312728272627282731363e4b56606c8095a1b3c4d4d3c2b49f8b78624d3c2b190500000000001d32475d72879cb2c7d6c0ab96816b56412c1601162c41566b8196abc0d6c7b29d88725d4825130010253a50657a8fa5bacfcdb8a28d78634d38230e0000000000000000000d20354b6074889db3c9dac7b29d8773604a4141414141414145576d8297adc3d4c8b4a28d78634d37271502000000000000000000000000000000000000000000000008182d3e4c6176889eb3c1d2dedcd3c2b49e8a77624d3f2e190900000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000014293e54697e93a9bed3dec9b49e89745645321e0900000000000000000000000e23394e63798ea4b6cadecdbaa9907b665053697e93abbccebbaa927d6752392935495b71869cb1c6d2c2a9947f6a5451667b91a9baced7c6ac97826d5443301c080000000000000000162b40566b8095abc0d5c0ab95806b564047586a7f94a6b7cbc4b39e8977614c4a5c6e8398aabbcec0b19b8672604a3750657b90a5bad0c5b09b86705b46311b0000000005182b3b546a7f94a9c2d3c9ad97826d583d364b60768a9fb4c5ab958073899eb3c8b39e8874604b3545566f849aafc4c9b49f8a76614b36210c0000000000000c2135495b6e8399aabbcedfcbb7a598836e624b45382e201d151311111113151d202e38454b626e8399a6b7cbdfcebaa998836e5a4835200800000000001d32475d72879cb2c7d6c0ab96816b56412c1600172c41566c8196abc1d6c8b29d88735443301c0710263b50657b90a5bad0d8c8a28d78624d38220d000000000000000000081d3144556b8095abbccfcab7a58f7a655038282c2c2c2c364b6075899eb4c9d6c5af9a85705b493519090000000000000000000000000000000000000000000000001325364a5c6c8197a7b8cccdc9c7cacdb9a898826d5d4b37261401000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000012273c52677c91a7bcd1e1cdb9a88b76604b36210b0000000000000000000005182a3b546a7f94a9c3d3dec9b49f8a75604b4c62778b9fb4cac8ae99836e574632384e63788da4b6c9c9b5a38d78634d4b61768a9fb4c9ddc8b39e8874604b35200b0000000000000000162b40566b8095abc0d5c0ab95806b563c4c6176899eb3c4cbb7a6947f6a58473e4d63788b9fb4c6c9b5a3927d67554450657b90a5bad0c5b09b86705b46311b000000000b2034485970859bb0c5cfbcab927c67523d3245576f8499aec9b09b857b8fa7b9c7ad97826d5443303854697f94a9c4cdbaa9917c67513827150200000000011527374e63798c9fb5c8d8d2c2b29d8776614c4431271a10080200000000000208101a2731444c6176889db2c2d3d8c7b49f8b78624d36251300000000001d32475d72879cb2c7d6c0ab96816b56412c180e172939586d8297adc2d7c9b49f8a74604a35200f12273c51677c91a6bcd1cebbaa8b76614b36210c000000000000000000011527374d62788c9fb5cad4c3ac97826d5645321e17182b3b52677d92a8b9ccccb8a7927d67523c2c19000000000000000000000000000000000000000000000000071c304354647a8c9fb4c5c7bab4b2b6c3c6b2a08f7b655544311d0c000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000011263b51667b90a6bbd0e9d6c6a18c76614c37210c000000000000000000000b1f34485970859bb0c5dbd9c4af99846f5645485970859ab0c9c9b49f8a76614b363b546a7f94a9c2d3c6b19b86715a4946576f849aafc4dacbb8a68f7a654f3a25100000000000000000162b40566b8095abc0d5c0ab95806b56485a6b8196a7b9ccc2b39d8875614b3a35495a6c8197a8b9cdc1b29c8774604b50657b90a5bad0c5b09b86705b46311b000000000d22374d62778b9fb5cacab59f8b77614c37283953687d92abbcb49f8c8095aac5baa9917c66513626394e63798ea6b7cbc7ad98836e5645311d0900000000081d3144556c8197abbccfdec9b5a4907b665847331d150a00000000000000000000000a151f334758667c91a4b6cadecebbaa95806b5443301c07000000001d32475d72879cb2c7d6c0ab96816b5644342a232333465770859ab0c5dacdbaa98e79644e3d2d23232e3f556a7f95aabfd4cab49f8a755746331e0a00000000000000000000092035495a6f849aafc5d5c9b39e8975604b36210d203448596f8499afc6d6c8b39e8975604b36210e0000000000000000000000000000000000000000000000031729394a6072859babbccdbaa99f9da5b6cabeb19c8673604b3b2a18040000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000010253b50657a90a5bacfe1ccb7a28c77624d37220d000000000000000000000d22374c62778b9fb5cadfd3c3a8937e6953383b54697e93abbccdbaa9917c675238485970869bb0c5d3c2aa957f6a553c3954697f94a9c3d4d5c4ab96806b563d2c1a0600000000000000162b40566b8095abc0d5c0ab95806b564d62788b9fb4c5cab6a4937e685746322c3c4c62778a9eb4c5cab6a5937e685750657b90a5bad0c5b09b86705b46311b0000000417293a53697e93abbccfc6b19b867159473422374c61778b9fb4bbaa9d889db2c8b49f8a76614b3621364a5b73889db2c8c9b39e8975604b36200b000000000b20354b6074889eb3c9dad6c6b19c86715e4c3a2917020000000000000000000000000004172a3a4a6073869cb1c6d7d9c8b39d8873604a35200b000000001d32475d72879cb2c7d8c3ad98836e624c473a38383f4b61768a9fb4c9cfcac7ab96816b5b4a3d38383d4b5d70859bb0c5dac7b29d87725d392917030000000000000000000006192c3c52677c91a7b8ccccb9a8927c67523b2a1822374c62778b9fb4cad1c1ac96816c5645321e0900000000000000000000000000000000000000000000000a1e334657687d92a2b4c9c9b49f8a879db2c7c9b5a4937e695947341f100000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000011263b50667b90a5bbd0e9d7c7a18c77614c37220c0000000000000000000316293953687e93abbccfdfcab6a58d78634d38374d62778c9fb5cac7ad98836e56454d62778c9fb5cac9b6a48e79634e39394e63798ea5b7cadcc7b29c87725b4936210c00000000000000162b40566b8095abc0d5c0ab95806b565b6d8297a9bacdc1b19c8674604b39281f3448596b8095a7b8ccc3b39d88756050657b90a5bad0c5b09b86705b46311b0000000a1f3347586f849aafc9d7c7ab96806b563b2a1f34475970859bb0c8b7a69da6b7c4af99846f5746321e2d3d586d8297adc9ccb9a8907b66503626140100000010263b50657b90a7b8cce1ccb9a8927d6852402f1c0c0000000000000000000000000000000c1c304354687e93a8bacde0cbb7a68e79644f39240f000000001d32475d72879cb2c7dcc6b2a095806e6159504d4d505d697f94a8bac9bcb5bcb49f8a79645c504d4d505b657b8fa2b4c8d7c7ad98826d58432e180000000000000000000000000e20364b6075889eb3c8d6c6af99846f5948341f2d3d54697f94aabbcec9b5a38e79634e3828160200000000000000000000000000000000000000000000071a2d3d4c6176889db3c0d1c0ad97817f94a9bacdc2b39e8977614c3e2e180800000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000012273c51677c91a6bcd1e1cdbaa98b76604b36210b0000000000000000000a1e3246576f8499afc9dadcc7b29c87725b493534485970859bb0c5c9b49e8975604b54697e93abbccfc6b19c86715b4935364a5b72879db2c7ddcab6a48e79634e39230e00000000000000162b40566b8095abc0d5c0ab95806b5663798c9fb4c7c9b5a3917c675544311b182a3b4c6176899eb3c3cbb7a6947f6a58657b90a5bad0c5b09b86705b46311b0000000c21374c61768b9fb4cacdbaa9907b66503b26182a3b54697f94a9c2c4b7b2b7c4c2a8937e6953392916273d52677c92abbccfc6ac97826c5443301c08000001142637566b8196abc5d5dec9b39e8975604b36201200000000000000000000000000000000001325364b60758a9fb4c9ded5c4aa947f6a553f2a15000000001d32475d72879cb2c7dccfbeb09e9583776c656363666d7b8a9fb4c6bcab9fabb3a99d877a6d666362656b79879db2c0d1cdbaa9937e68533e2913000000000000000000000000091d3145566b8196abc0d1cab49f8b77624c3722364a5c71869cb1c8d6c6b09b85705b4a361a0a00000000000000000000000000000000000000000000000b21364a5b6c8196a6b8cbc8b4a28f7a768a9fb4c8ccb9a797826d5c4b36261401000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000014293e53697e93a8bed3dec9b49f8974604a35200b0000000000000000000c21364b61768a9fb4c9dfd7c7ac96816c573c2c2b3b54697f94a9c1cdb9a8917c66515870859aafc9d3c3aa95806a553d2c2d3d576c8297acc8d8d3c3a9947f6a543b2b1805000000000000162b40566b8095abc0d5c0ab95806b5d6e8399abbccfbfb09b85705f4d3727150d1e334657697f94a5b7cbc4b39e897661657b90a5bad0c5b09b86705b46311b00000316283952677d92aabbcec9b49f8a75604b36210e23384e63788da4b6cacbc8cbc9b5a48d78624d38220d22374c61778b9fb5cac8b39e8874604b35200b0000081d31445570859bb0c5dad8c3ae99836e5645311d090000000000000000000000000000000000081e3245576f8499aec4d9dac4af9a846f5a3a2a17040000001d32475d72879cb2c7d9c8bbb4b4a19989817b78787b828c9fa8bacab59f8c99a1b3a59d8c827b78787a818a9da6b7cbd6c5b49f8a77614c37220c000000000000000000000000021527384e63798ea2b4c8cebbaa947e69543d2d374e64798ea4b5c9cdb9a8937d68533d2d1a00000000000000000000000000000000000000000000000b1b30414e63798c9fb4c4d1c0af9a84706d8297aabbcec5b59f8d7a645443301c0c000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000001152737566b8096abc0d5dcc7b19c87725443301c0700000000000000000115273751677c91a9bacde1cdbaa9907b66513b2623384d62788da3b5c9c6ad98826d5561778b9fb4cacab6a48e79634e3924273c51667c91aabbcedbc5b09b8570594834200b000000000000162b40566b8095abc0d5c0ab95806b657a8fa1b3c9c9b3a18f7b655041301909031729394b6074879db2c2ccb9a796806b657b90a5bad0c5b09b86705b46311b0000091e3245576e8399aec8d8c4af9a856f5645321e0c2135495b72879cb1c7dcdddbc6b19c86715a4835200b1f34475971869bb0c6cbb8a68f7a654f3a251000000b20354b60758a9fb4c9dfd3bea9937e695438271502000000000000000000000000000000000003162839546a7f94a9bfd4ddc8b39d88735847331f0a0000001d32475d72879cb2c7cebbaa9f9faaa89e97908d8d90979faabac6beae99838399a8b7aa9f97908d8d90969fa9b7c4d4ccb9a797826d5847331f0a000000000000000000000000000a2135495b70859ab0c5d6c8b19b86715b4a3644556b8196abc2d2c9b49e8976614b36210f00000000000000000000000000000000000000000000031629394d5f70849aaabbcec8b4a28f7b6563788b9fb4c8cfbcab9b8573604b3a2a17040000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000000081d3144556f849aafc4d9d9c4ae99846f59362513000000000000000000081d3144556d8298adc7d7dec9b49f8a75604b36212035485a71869bb0c6c8b39e897560687d92aabbcec7b29c87725b4a362121364b61768a9fb4c9dfcab59f8b77624d37220d000000000000162b40566b8095abc0d5c0ab95806b70859ab0bfcfbcab99846f5d4b37231200000b1d324556687d92a4b6c9c5b49f8a78657b90a5bad0c5b09b86705b46311b00000b21364b60768a9fb4c9d5c5a9947f6a54382816061a2c3d566b8096abc4d5ded5c4aa95806b553c2b1905182a3a566b8095abc6d5c4ab96816b563e2d1b07000d23384d62788da9bacde2cfbaa58f7a65503a25100000000000000000000000000000000000000010263b50657b90a5bad0e0cbb8a68c77614c37210c0000001d32475d72879cb2c7cab49f8c8a9fa9b4aca5a2a2a5acb4bbc8c2b2a08f7b798a9fabbab4aca5a2a2a5abb4bac7d3c8bbb39e8978624d3a2a180400000000000000000000000000061a2c3d52687d92a7b9ccc9b5a38e79634e364b6074889db3c8d2c2ac97826d5746321e0a000000000000000000000000000000000000000000000a1e324657677d91a2b4c8cfbfaf9a85705d5a6d8298aabbcec9b5a3937e685847331f100000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000b20354b6075899eb3c9ded7c6aa95806a55402b150000000000000000000b20354b6074899eb3c8ded9c4af99846f5645321e192b3c546a7f94a9c1ccb8a7907b656f8499aec8d4c3ab95806b563d2d1a1e33465770859aafc5dacfbcab937e6853392917030000000000162b40566b8095abc0d5c0ab95806b7c91a2b4c8c7b49f8c79634e3f2e1c040000021528384b6073869cb1c1cdbaa997826d7a90a5bacfc5b09b86705b46311b000115273751667c91a9bac8c8b8a78e79644f39240f000f253a4f647a8fa6b8c9c9c9b8a68f7a644f3a250f0010253a50657a8fa8b9c8c7b29d87725c4a36220d0010253b50657a90a5c7d7ead7c7a28d77624d38220d000000000000000000000000000000000000000e23384d63788da2c9d9e7d5c4a48f79644f3a240f0000001d32475d72879cb2c7c6b19b857b8b9ea7b3c0b8b8bbc2cacbc1b5a498826e677d8d9fa9b4c0bbb8b7bac0c9cdc9c3b6aa9f917d675a48351c0c0000000000000000000000000000000f21364b6075899eb3c9d2c1ab96806b544350667b90a6b7cbc9b5a48f7a644f39291603000000000000000000000000000000000000000000061a2c3d4b6175889db2c0d1c8b2a08f7a644f4d62788b9fb4c6d2c1b39e8976614c3e2d180800000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000005182a3b4f657a8fa7b9cce0cdbaa8907b65503b261000000000000000000010253b50657b90a7b8cce0d3c3a9937e69543828160e23384d63788da3b5c9c5ac97826c768a9fb4c9cab6a58e79644f39240f17293954697f94a9c4d4dac9af99846f5746331e0a0000000000162b40566b8095abc0d5bfaa958073869cb1c0cdbaa998826d5b4a362111000000000a1d314455667c91a3b4c8c7b49f8c797a8fa5bacfc5b09b86705b46311b00081d3144556d8298adb2b2b2b29e8974604b35200b000b20354b6074889db3b4b4b4b39e8874604b35200b000b20364b6075899eb2b2b2b2a58e79644e39240f0012273c52677c91a7bcd1e2cdbaa98b75604b36200b000000000000000000000000000000000000000b21364b60768babbccfe3d0bba5907b66503b26110000001d32475d72879cb2b2b2ac97826c7c899aa2afb4bbc8bdc4b7b2a39b8675615f677d8b9aa2aeb3b9c6bdbdc7bab4afa49c8c7e685f4d3c2b1900000000000000000000000000000000091e3245576c8197acc1d2c8b29d8874604b576d8398adc4d5c7b19c86715c4b371b0b000000000000000000000000000000000000000000000a2135495b6b8096a6b7cbcebbaa98836e5c4b495a6c8196a8b9ccccb8a797816c5c4a36251300000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000a1f3447596d8297adc5d6dec9b49f8976614b36210c0000000000000000071b2d3e576c8196acc5d6dfcab6a58d78634e38230e0c2035495a71869bb1c6c8b39e88727c91a9bacdc7b29d87725c4a36220d0e24394e63798ea6b7cbdfc9b49f8a76614b36210c0000000000162b40566b8095abc0d4bea9947f7e92a4b5c9c5b49f8b78624d3d2d1a0300000000011426374d5e70859bb0bfcebbaa98837a8fa4b9cfc5b09b86705b46311b000b20354b6075899d9d9d9d9d9c97826d5443301c0800081c3043546c81969e9e9e9e9e97816c5443301c0800081d3144556d82989d9d9d9d9d95806a55402b150013283d52687d92a7bdd2dfc9b49f8a745544311d0800000000000000000000000000000000000000091e324557758a9fb4cadfd1bca6917c67513c27120000001d32475d72879c9d9d9d9c917c67667884919a9faaa7a8a7a69d94857762574d5f67798590989ea8a6a8a8a6a99f9a92877b68604e41301e0e00000000000000000000000000000000031628394e64798ea3b5c9cbb7a6907b655061768a9fb4c9cdbaa9937e69543e2e1b000000000000000000000000000000000000000000000a1a30404e63798b9fb4c4d4c6b49f8b78634d3e3c4c6177899eb3c4d4c5b49f8c7a645443301c0b000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000a1a2d3d4c62778a9fb4c9dfd3c3ae98836e5746321e0900000000000000000d22364a5c72879db2c7dddcc7b29d87725b4935210c06192c3c556a7f94aac2cbb8a68f7b8398aec7d4c3ab96806b563e2d1b070c21364a5b73889db2c8ddcebaa9917c67523727150200000000162b40566b8095abc0d3bea9937e879db2c2ccb9a796816b5a48351f0f0000000000000919304050657b8fa1b3c9c8b2a0927d92a7bcd2c5b09b86705b46311b000f253a4f647b888888888888878275614b3626140100011426364c61758388898989888275614c3626140100021527374c617682878888888888836f5a442f1a0013293e53687e93a8bdd3dec9b39e89745e4927150200000000000000000000000000000000000000031628395f74899fb4c9ded2bda7927d68523d28130000001b30455b708488888888878072605a626f7c848b909293918e887f74625947414d5b63707b83898e919292918f8a847d74655e4e423123130000000000000000000000000000000000000a22364a5c71869bb0c6d4c4ad98826d57687d92a8bacdc9b49f8a76614c372110000000000000000000000000000000000000000000031628384d5e6f849aa9baceccb9a896816c5b49353347586a7f94a6b7cbcfbcab9b8572604a3a2917040000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000b1828384a5b6a8095a9bacddfcab6a5917c66513928160300000000000000000f24394e64798ea5b7cadfd7c7ac96816c573d2c1a06000e23384e63788da4b5c9c4ab9580899eb3c9cbb7a58f7a644f3a241000071a2d3d576d8297acc8d8d8c7ad98836d5544311d0800000000162b40566b8095abc0d5c5b09b859ba5b7cbc4b39e8976614c3c2b1901000000000000001223374b5d6f8499abbccfbfb19c869cb1c6dbc5b09b86705b46311b000d22374b5c64737373737373726d615746331808000000081e334657616e73747474736d615746331808000000091f334658616d7273737373736f6554412c180013283d53687d92a8bdd2dec9b49f89745544311d0800000000000000000000000000000000000000091d324556758a9fb4cadfd1bca7917c67523c2712000000192d4255667073737373726b6054484d5e666f767a7d7d7c7973696055473b303d494e5d656e75787c7d7d7b7a766f6860554c4031241405000000000000000000000000000000000000071b2d3e53687e93a8b9cdc9b49e89766170859aafc6d3c3ad98826d5847331f0a000000000000000000000000000000000000000000091e324556667c91a1b3c7d4c4b49e8977614c3c2c2a3a4b6075889db2c2d3c9b4a3927d685846331f0f0000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000007101b2836455663798b9fb4c7d7d3c2b29c8773604b35200b000000000000000005192b3c556a8095aac3d4e2cdbaa9907b66513b261100000c2135495b71869cb1c6c8b39e889ea7b9ccc7b29d8773604a35200b000012273c51677c91aabbcedec9b39e8975604b36200b00000000162b40566b8095abc0d5c8b4a39ba3b4c3cbb7a6947f6a5847331e0e0000000000000000081c2e3f4e64798d9fb5c8c9b5a49ca4b5c9dbc5b09b86705b46311b00081b2e3e4b4f5d5d5d5d5d5d5d574b463929170000000003172939464c595e5f5f5f5e584c46392917000000000417293a464c585d5d5d5d5d5d5a54473725110012273c52677c91a7bcd1e1cdbaa98a75604b35200b000000000000000000000000000000000000000b20364b60758baabbcee2d0bba5907b66503b261100000012263848555b5d5d5d5d5d564a4336404c515861656768676360544b44372a1f2c363f4c5055606366686866646057534b44372f21140600000000000000000000000000000000000000001021364c61768a9eb4c9cdb9a8927c67788c9fb5cacab6a58f7a65503a291704000000000000000000000000000000000000000006192c3c4b6075879db2bfd0cbb7a6947f6a5947341e1e324557687d93a4b6c9d1c1b39e8876614c3d2d1a0700000000000000162b40566b8095abc0d5d8c3ad98836e58432e190d0d0d0d0d0e10131c202e3946546074869ca9bacddecab6a4937e685443301c0800000000000000000b2035485a71869bb1c6dbdfc9b49f8a76604b36210b0000061a2c3d556a7f95aac2cbb8a69ea6b8c5d4c4ab96816c5443301c0700000c21364c61768a9fb4cadfccb9a7907b65503b261000000000162b40566b8095abc0d5d1c1b4b0b4c1d1c2b29d8875604b3a2a17000000000000000000001121364a5c6d8298aabbcec2b5b1b5c2d2dbc5b09b86705b46311b000010202e373a48484848484847423633291b0b00000000000b1b293336434949494949433633291b0b00000000000b1b293336434848484848484441372919080010263b50657b90a5c8d9e9d7c7a28c77624d37220d000000000000000000000000000000000000000d23384d62788da2c8d9e8d6c5a48f7a644f3a250f000000081a2a38424548484848474035302530393a464c505253524e4a43363127190f1a212f3837444b4e515353514f4b45393531271911030000000000000000000000000000000000000000000a1e3346576d8297adc2d2c6ae98836e7e94abbccfc8b29c8773604a35200c0000000000000000000000000000000000000000000a2035495a6a8095a5b7cad2c2b29d8875604b3a2a181628394b6073869cb1c0d1cbb8a696816c5b4a36211300000000000000162b40566b8095abc0d5d8c3ad98836e58432e22222222222223252530353f4b5761728298a4b5c7d7cebdb19c8674604b3626140100000000000000000d22384d62788da3b5c9ded9c4af9a846f5745321e090000000e23394e63798ea4b6cac5b8b3b8c5d5cbb7a68f7a654f3625130000000a1e33465770859ab0c5dad6c5ac96816c573e2d1b07000000162b40566b8095abc0d5dfd1c8c5c8d1cab6a4937e685745321c0c00000000000000000000071a2d3e4d62788b9fb4c6d2c9c6c9d2e0dbc5b09b86705b46311b000002101b2225333333333333322d211e170b000000000000000b171e212e34343434332e211e170b000000000000000b171f212d3233333333332f2c25190b00000e23384d63788daabbcee2cfb9a48f7a644f3a250f0000000000000000000000000000000000000010253a50657a8fa5bacfe0ccb9a78d77624d38220d000000000c1a262d3033333333322b201c131d242933363b3d3e3c393530251d15090006111c23273135393c3d3d3c3a363228201d15090000000000000000000000000000000000000000000000031729394f647a8fa4b5c9c9b39e8974859aafc9cebbaa947f6a5443301c0700000000000000000000000000000000000000000a1a2f404d62788a9fb4c3d4c9b5a4927d685745321c0c0a1d314455667c91a2b4c8d5c4b49f8c79634e41301b0b000000000000162b40566b8095abc0d5d8c3ad98836e584337373737373738393b36434a4f5d65758298a0b2c2d2d2c1b19f907b66554431180800000000000000000417293a54697e93a9c1d2e5d4c3a9947e6954392816030000000c21364a5b71869cb1c6d5cbc8cbd5ddc8b39d8873604a35200b00000003172939546a7f94a9c4d4ddc8b29d88735c4a36220d000000162b40566b8095abc0d5eae4dddaddd1c1b19c8673604b3928160000000000000000000000000f2035495a6c8197a8b9cddedbdee5f0dbc5b09b86705b46311b00000000080d0f1e1e1e1e1e1e1d180c0a03000000000000000000030a0c191e1f1f1f1e180c0a03000000000000000000040a0c181d1e1e1e1e1e1a1811080000000b20364b60758a9fb4cadfd3bda8937e68533626140100000000000000000000000000000000000115273754697e94a9bed3dec9b39e89745a4835200b00000000000812191b1e1e1e1e1d160b0700090c171f212528282724201c130802000000000809151d20232728282625211e160b0801000000000000000000000000000000000000000000000000000b22374b5d71869cb1c7ccb9a7917b8b9fb4cacab49f8b77624c3625130000000000000000000000000000000000000000021528384c5e6e8399a9bacdd1c0b19c8673604b39281600011426374c5e70859ab0bfcfcebbaa9a84705f4d392916030000000000162b40566b8095abc0d5d8c3ad98836e584d4d4d4d4d4d4d4d4e50535460656e7a8698a0b2becfd4c3b5a397816c5e4c3727150000000000000000000a1f3347586f849aafc4dadfcab7a58d78634e38230e00000000071a2d3d556b8095aac3d3e0dde0e7d5c4ac96816c5443301c07000000000f24394e64798ea6b7cbdfcbb7a68e79644f39240f000000162b40566b8095abc0d5eaf7f2f0ddc8b4a3917c665544311b0a00000000000000000000000006192c3c4c62778a9eb4c5d5e8f3f8f0dbc5b09b86705b46311b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445571869bb1c6dbd7c2ad98826d5443301c080000000000000000000000000000000000081d3144556e8398aec3d8dac5b09a85705b3c2b19050000000000000004060808080808010000000000040a0c101213120e0b0700000000000000000001080b0e111313110f0b090300000000000000000000000000000000000000000000000000000000081b2e3f54697e93a9bacdc5b19c879caabbcec3ae99836e59473418080000000000000000000000000000000000000000091d324556667c90a1b3c7d7c9b4a2907c665544311b0a000009192f404f647a8fa0b2c8d8c8b4a2927d675746321e0f0000000000162b40566b8095abc0d5d8c3ad98836e6262626262626262626365686d747a838d9ca4b2becfd2c3b6a59b8574604b402f19090000000000000000000c21374c61768b9fb4cadfdcc7b29d87725b4935210c00000000000f24394e64798ea4b6cadef3f4e0cbb8a68f7a655036251300000000000d21364a5c73889db3c8ddd4c4aa95806b553c2c19060000162b40566b8095abc0d5eafff7e7d0bfb09b85705e4d37261400000000000000000000000000000e1f3447596b8095a7b8cce0f1fff0dbc5b09b86705b46311b000000000000000000000000000000000000000000000000000000000003090b0d0e0e0e0d0d0b08010000000000000000000000000000000000000000000000000002152737576c8197acc6d7ddc8b39e8874604b35201000000000000000000000000000000000000b20354b6074899eb3c9ded6c5ab96816c56412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001021374c61768a9fb4c9cab6a49ca4b6c8cbb7a5907b66503b2a18000000000000000000000000000000000000000005192b3c4b6074879cb2bfd0cfbcab9a84705e4c372614000000001222374b5c6e8398aabbced1c0b29d8875614b3d2c1a0600000000162b40566b8095abc0d5d9c3ae998378777777777777777777787a7d82878f999fabb6c2cfcdc1b5a59d87776256453222110000000000000000000215283852677d92aabbcee2d8c7ac97816c573d2c1a0600000000000d21364a5c72879cb2c7dcf1f3ddc8b39e8874604b35200b0000000000071a2d3e586d8297adc8d9dbc6b19c86715a4935200c0000162b40566b8095abc0d5eafeebd9c9b3a18f7b655040301909000000000000000000000000000005182a3b4c6176899eb3c3d4e6faf0dbc5b09b86705b46311b000000000000000000000000000000000000000000000001080b0f1418161e21222324232322201d151814100b0902000000000000000000000000000000000000000011273c51667c91a8b9cde0cbb8a6917c66513e2d1a0a0000000000000000000000000000000a1a2e3f52677c91a7b9cce0ccb9a7907b65503b261000000000000000000000000000000000000000000000000000000811181a202020202020201e0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586e8398adc3d3c2b6b1b6c2d3c9b29d8774604b35200d0000000000000000000000000000000000000000092035485a6a7f94a5b6cad8c7b59f8d7a644f402f190900000000071b2e3e4d63788b9fb4c6d6cbb7a696806b5b4935211200000000162b40566b8095abc0d5dbc7b3a1998c8c8c8c8c8c8c8c8c8d8e9093979da5aeb5bcc9d2c9bdb0a39b877863594838281603000000000000000000091d3245566e8398aec8d8e2cebaa9917b66513c2611000000000000071a2d3d566b8095abc3d3e6e8d5c5ac97816c5443301c0800000000000012273c52677c91aabbcedec9b5a48d78624d38230d0000162b40566b8095abc0d5eaf7e3cfbcab99836f5d4b372212000000000000000000000000000000000d1e334657697e94a5b7cadff0f0dbc5b09b86705b46311b000000000000000000000000000000000000000001080b151d2024292e2832363738393938373531272d2a25201d150c0a0400000000000000000000000000000000000b21364b6075899eb4c9ded5c5b09a85705c4a3827150200000000000000000000000000021628384b5d70859bb0c5d6dec9b39e8974604b35200b000000000000000000000000000000000000000000000000000b19252c2f3535353535353534201d150a00000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a50657b90a5b6cad3cac7cad3cfbcab95806a5443301c080000000000000000000000000000000000000009192f3f4d62788a9fb4c3d3cebaa998826e5c4a362212000000000000102135495b6c8197a8b9cdd4c4b49f8b79634e40301b0a000000162b40566b8095abc0d5e2d0bfb3aea2a2a2a2a2a2a2a2a2a2a3a5a8acb2b7c3cacfcac2b5b19f968577635a493b2a1a0a000000000000000000000b20364b6075899eb4c9dedfc9b49f8a76614b36210c000000000000000f24394f64798ea5b6cadfe0ccb8a7907b6550362614010000000000000c21364c61768b9fb4cadfd2c2a9947e69543a2a180400162b40566b8095abc0d5e2e9d7c7b49f8c79634e3f2e1c0400000000000000000000000000000000031729394b6074879db2c2d3e5e2dbc5b09b86705b46311b0000000000000000000000000000000000000409151d202731353a3e4339454b4d4d4e4e4d4c4b4437433f3a363127211f170b08000000000000000000000000000000091e3245566d8298adc0d1dcc8b4a28f7a645645311d1404000000000000000000000004141e324556657a8fa3b5c9e4d0c0ad98826d5544311d080000000000000000000000000000000000000000000000000019293741444a4a4a4a4a4a4a493632281a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000c20354a6073879cb2c8d8dedcdedfcab49f8b78624d36261401000000000000000000000000000000000000021527374c5d6e8398a8bacdd6c5b49f8b78624d3e2d1b0400000000000006192c3c4c61778a9eb4c4d5cebbaa9a846f5f4d392816030000162b40566b8095abc0d5e2ddd0c7c3b7b7b7b7b7b7b7b7b7b7b8babdc2c7caccc9c2b6b1a49c9081746259493c2c1d0d000000000000000000000013253651667b90a8b9cdcdd4c8af9a846f5746321e09000000000000000d22364a5c72879db2c7d4d5c9b39e8874604b35200b000000000000000a1f33465870859ab0c8d4cdc5af9a85705847331f0a00162b40566b8095abc0cdcdcdcdbaa997826d5b4a3621110000000000000000000000000000000000000b1d324556687d92a4b6c9dacdcdc5b09b86705b46311b00000000000000000000000000000000030c181f27313537444b4f54585b576062636363626260555b5854504b4538363329221b100800000000000000000000000000031628384f647a8fa2b4c8ddd1c0b19b8574604b41311f180c0500000000000000050c181f31414b6074869cb1c1d1dcc7b3a28e79644f372715010000000000000000000000000000000000000000000000000e1e3747545a606060606060605e4b45382815020000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546a7f94aabbcecdcdcdd5c4af99846f5a4835180800000000000000000000000000000000000000081d314455657b90a0b2c6d7ccb9a796816c5a4935201000000000000000000e1f3447596a7f95a6b7cbd7c8b3a2917c675745321e0e0000162b40566b8095abc0cdcdcdcdcdcdccccccccccccccccccccd7cdc9c6c4c6b9b4ada49c92867b6c6056473b2c1e0e0000000000000000000000071c3043546c8297acc6b8b8c4b7aa947e69543928160300000000000000071b2d3e566b8096a9b7c4c5b8ab97826d5544311d08000000000000000417293a556a7f94aab7c4b8b8b49f8b77614c37220c00162b40566b8095abb8b8b8b8c0b49f8a78624d3d2d1a03000000000000000000000000000000000000021528384b6073869cb1bcc9b8b8b8b09b86705b46311b0000000000000000000000000000000a161e2a3437444b51556064696d7173767778797878777573716d69656056524c463a372e231c11060000000000000000000000000a22374b5c70859bb0becfdec9b5a396806b5f4e42342a2018110f0d0d0d0f1118202a34424e5f6c8196a4b5c9dfcebeaf9a846f5c4a36190900000000000000000000000000000000000000000000000006192b3c54656f7575757575757573605645321d090000000000000000000000000000000000000000000000000000000000000000000000000000001325364c62778b9fb4b8b8b8b8b8b8a6917c66513c2b190000000000000000000000000000000000000005182b3b4b6074869cb1bfb8c7bab39e8976614c3c2b1902000000000000000004182a3b4b6175889db3bac6b8c0b29d8775604b3c2c190600162b40566b8095abb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c7bab4b1aeaaa89e9890867d73655d4b45382a1d0e0000000000000000000000000b20354a6073889da3a3a3a3a3a69d8b78624d37220d0000000000000000001023384d63788b9da6a3a3a79e8c7a644f3727150100000000000000000e23384d63788c9da6a3a3a3a3aa927d68523d281300162b40566b8095a3a3a3a3a3a3a296806b5a48341f0f00000000000000000000000000000000000000000a1d314455667c919faba3a3a3a3a39b86705b46311b0000000000000000000000000002111b28323a474c5560666d757a7e8386898b8c8d8e8e8d8c8a8886827f7a756f6861584f4b3e372e20190e0000000000000000000000081b2e3e4f657a8fa0b2c5d5d2c1b59f8d7d68604c473a342b272422222224272b343a474c60687d929fb0c2d2d5c4b1a08f7b65503e2d1b000000000000000000000000000000000000000000000000000b2035495a6f838a8a8a8a8a8a8a8974604b36200f000000000000000000000000000000000000000000000000000000000000000000000000000000081f3448596e8399a3a3a3a3a3a3a39e8874604b36200e000000000000000000000000000000000000000b20344859697f94a4a3a3a3a3a99f937e695847331e0e000000000000000000000c1e324657677d929fa8a3a3a3a3a595806b5a4935200c00162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a2a1a99f9c99949089837b736860554b3f32281a0d000000000000000000000000000f253a4f647a8d8d8d8d8d8d8d8d887d66594834200b0000000000000000000c2035495a667c888d8d8d8d897d675c4a3619090000000000000000000c2035495a667c888d8d8d8d8d8d8d836e59442e1900162b40566b808d8d8d8d8d8d8d8c8474604b3c2b19010000000000000000000000000000000000000000011426374c5e6b808b8d8d8d8d8d8d8d85705b46311b0000000000000000000000000a151d2f39454b59616a747c82898f93989b9ea7a2a2a3a3a2ab9f9e9b98948f89847d766d645c504b3f352b1e0e00000000000000000000001023374b5d6e8398a6b8c9dacfbcab9f8c7e6d61594d483b3c39383738393c3b484d59616d7e8c9fb4bdcdd9c8b8a697826d5d4b372010000000000000000000000000000000000000000000000000021527374d62788c9f9f9f9f9f9fa7927d67523d2c1a06000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b51667c8d8d8d8d8d8d8d8d8d806b5544311d08000000000000000000000000000000000000000d22374c6277898d8d8d8d8d8d8d8a806b604f3a2a170000000000000000000000031628394d5f697f8a8d8d8d8d8d8d8d8b78634d38230e00162b40566b808d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c8b8987847f7a756d6660544b44372f1d150a00000000000000000000000000000c21364c6176797878787878787774665e4d3b2b190500000000000000000006192c3c4c5e66737778787874675f4d3e2d1b0000000000000000000006192c3c4d5e66747778787878787878624d38230d000c22374c6177787878787878787770605645321d0d0000000000000000000000000000000000000000000009192f4051626b767878787878787877624d38220d00000000000000000000000c1a2731404c57606a777f8891989ea7a9adb0b3b8c5b8b8b8b7bcb5b3b0ada9a89f99928a827a70655d4d483c2b190600000000000000000000081c2e3f4c6277889eabbccfdac9bbaa9f9382776b625955514e4d4c4d4e515559626b7782939faabbcee2cebbaa9e8876614c3f2e1c02000000000000000000000000000000000000000000000000081d3144556b8095abbcb5b5b5c5af9a85705b4936210a0000000000000000000000000000000000000000000000000000000000000000000000000000000d20354b607279787878787878787875614b37271502000000000000000000000000000000000000000c21364c61767978787878787878756b625042321c0c0000000000000000000000000b1b30414f616975787878787878787976614c37210c000c22374c617778787878787878787878787878787878787878777675716f6a656056514a433631261911020000000000000000000000000000000a1f33465861636363636363636260544d40301d0d00000000000000000000000e1e2f404c54606263636260554d4130201000000000000000000000000e1e30404d546062636363636363625a4935200c000a1f344759616363636363636362594b453828160000000000000000000000000000000000000000000000001222344451576163636363636363625a4835200b000000000000000000000d1c2a38454b5e65757f89959da6adb3b8b8b3afaba9a6a6a5a5a6a7a9abaeb1b4bab4afa99f988f847b6e625a4835200b0000000000000000000000111f344859667c8d9fb5bdccd9c8bbb4a098898077706b666462626264666b7077808998a0b4bbc8d9ccbcb49f8c7c665847332111000000000000000000000000000000000000000000000000000b20364b6074889db3c9dacacac8b4a28e79634e382816030000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546063636363636363636361574632190900000000000000000000000000000000000000000a1f334658616363636363636363605650443324140000000000000000000000000000132332434f56606363636363636363615847331f0a000a1f3447596163636363636363636363636363636363636363626160545955504b45383530251d140900000000000000000000000000000000000417293a464c4e4e4e4e4e4e4e4d4b43363022120000000000000000000000000012222f36434b4d4e4e4d4b44373023130200000000000000000000000012223036434b4d4e4e4e4e4e4e4d493c2c19060004182a3a474c4e4e4e4e4e4e4e4c473b32281a0a0000000000000000000000000000000000000000000000000416263439464c4d4e4e4e4e4e4e4d483c2b19050000000000000000000d1d2b3a4756606c7b87959ea8b2b7b5b1a9a79e9a96939190909090919395989c9faaabb1b5b4ada29a8f8378624d38230d000000000000000000000005182a3b4c5e6a7f949fafbccdd7cebeb2a79e958b85807c79777777797c80858b959ea7b2beced7cdbbaf9e937e695e4c3a2a170300000000000000000000000000000000000000000000000006192c3c52677c91a6b8cbe7dfe3d1c0ab96816c5645321e09000000000000000000000000000000000000000000000000000000000000000000000000000001142636434b4e4e4e4e4e4e4e4e4e4b463929160000000000000000000000000000000000000000000417293a464c4e4e4e4e4e4e4e4d4b45383326160600000000000000000000000000000514253238454b4d4e4e4e4e4e4e4e4c473a2a17040004182a3a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d4c4c4a43363f3b363228201c130801000000000000000000000000000000000000000b1b29333638383838383838383530261812040000000000000000000000000004121826303538383838353127191305000000000000000000000000000412182630353838383838383838352c1e0e0000000c1c2a34373838383838383837342a1e160a000000000000000000000000000000000000000000000000000008161b2933363838383838383838352b1e0e0000000000000000000c1c2b3b4858617481909da6b4b9b5ada39b948e8884817e7c7b7a7b7b7c7e8083878a90959ca4abb3b4afa196816b56412c160100000000000000000000000d1d2f404f616c81959eb4bac7d2cfc5b9b3ab9f9a95918e8d8c8d8e91959a9fabb3b9c5cfd1c7bab49d94806b604f402f1c0c000000000000000000000000000000000000000000000000000c2135495b6f849aafc4d5e7f1eedec8b39e8975604b36210f00000000000000000000000000000000000000000000000000000000000000000000000000000008182630353838383838383838383632291b0b000000000000000000000000000000000000000000000b1b29333638383838383838383632281a16080000000000000000000000000000000006141a283236383838383838383837332a1c0c0000000c1c2a34373838383838383838383838383838383838383837363530252a25211e160b0700000000000000000000000000000000000000000000000b171f212323232323232322201c1408000000000000000000000000000000000008141c2022232323201d1509000000000000000000000000000000000008141c20222323232323232320190e00000000000c181f2223232323232323221f180d0300000000000000000000000000000000000000000000000000000000000b171e21232323232323232220190e00000000000000000009192a3a4859627684979fb2b7b4ab9f988f867f79736f6b69676665656667696b6e71767a80868e969ea8b3a38e79634e39240e000000000000000000000000001222324351626c80929fa9b5c1cbd5ccc9bcb4b0aaa6a3a2a1a2a3a6aab0b4bcc9ccd4cbc0b4a99f927f6b62514232221200000000000000000000000000000000000000000000000000021528384d63788c9fb5cadfdedcdee0ccb8a7927d68523d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000000000008141c20232323232323232323211e160b0000000000000000000000000000000000000000000000000b171f212323232323232323211e160a00000000000000000000000000000000000000000a151d202323232323232323211f170c00000000000c181f22232323232323232323232323232323232323232221201c1315100b09020000000000000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0d0b08010000000000000000000000000000000000000001080b0d0e0e0d0b08010000000000000000000000000000000000000001080b0d0e0e0e0e0e0e0d0c0600000000000000040a0c0e0e0e0e0e0e0e0d0b050000000000000000000000000000000000000000000000000000000000000000030a0c0e0e0e0e0e0e0e0d0b050000000000000000000215273747586277869aa2b1bbb4a39b8d837a716a635b5a56545151505051525456595761656b71798189959e9b85715b4a36210c00000000000000000000000000041525344451626b7e8a9ba3b3b8c5cad3cfcac5c0bbb9b7b7b7b9bbc0c5cacfd3cac4b7b2a29b8a7d6a6151443424140400000000000000000000000000000000000000000000000000091d3245566b8096abbccfd3cac7cad3d6c5b09b85705b4a36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e0e0e0e0e0e0e0e0e0c0a030000000000000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0b09030000000000000000000000000000000000000000000002090b0e0e0e0e0e0e0e0e0c0a0400000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0c0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d3144556176869ca4b4b9aa9f94857a6e645c544e4a3d413e3c3b3b3b3b3c3e4039464b50565b636b7680898b7c66513d2d1a07000000000000000000000000000007162634445060687985939ea6b2b6c3c6cacfdad1ceccccccced1d9cecac6c2b6b1a69d938579685f4f433426160600000000000000000000000000000000000000000000000000000b20364b6075889eb3c9d3c2b6b1b6c2d3c8b4a38e79634e392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0b0b0b0b0a070000000000000000000000000000000000000000000000060c0e13151716140f0b07000000000000000000000000000000000000000000000000000000000000000000000000050b0d1013141516151413100d0b05000000000000000000000000000000000000000000000000000000000000050b0d1214120c0a0400000000000000000000000a1a2f404b6074859ba4b5b9a89e8c7f73645c4f4a3e39362d2c29272625262627292b2932363b3d4a4e57616a7576665e4c381f0f0000000000000000000000000000000008162633424e5b63737e88939ca5abb1b5bcc9c0c2c3c3c2c1c0c8bbb4b1aaa49c93887e73635b4e41322516080000000000000000000000000000000000000000000000000000061a2c3d52677d92a7b8cccab6a49ca4b6c6d1c1ac97816c5746321e09000000000000000000000000000000000000040e1416202020202020202018161006000000000000000000000000000000010a10121c1f202020202020201b0b0902000000000000040e141620202020202020201816100600000000000000000000000001080b141d202020202020202016140d040000000000000000000000000000000000000000060c0e2020202020202020201e19100400000000000000000000000000000000000000040e1416202020202020202019161006000000000000000000020b11132020202020201c0f0d07000000000000000000000000000000000001080e192023282b2c2b2925201c1308030000000000000000000000000000000000000000000000000000000000050b0d1419202225282a2b2b2b2a2825222019130c0a04000000000000000000000000000000000000000000000000020d181f22282927221f180c010000000000000000021628384c5e6c8196a3b4b9a89e8a7c6a60554a3e362e2e2e2c28221f18101011121b22252b2f302d3639464c566061584c402f1d010000000000000000000000000000000000071523313d4a546068757e878f969c9faba8abacadaeadacaaa8aa9f9c958e877e74696054493c312315070000000000000000000000000000000000000000000000000000000c2136495b70859ab0c5d5c7b19c879ca8b9ccc9b39e8975614b3621100000000000000000000000000000000000081621292b35353535353535352d2b2317090000000000000000000000000005131e252831343535353535353531201d150a00000000081621292b35353535353535352d2b2317090000000000000000000008141c20293235353535353535352b282116080000000000000000000000000000000000010f1a2123353535353535353535332d2214040000000000000000000000000000000000081621292b35353535353535352e2b23180a0000000000000006141f26293535353535353124221b1002000000000000000000000000000008141c202c35383d4042413e3a3530251e160b0000000000000000000000000000000000000000000000000000090d181f22292b35383b3e3f4041403f3d3b38352b29221f180c0900000000000000000000000000000000000000000009151d2a34373d3f3d37332a1c140800000000000000091e324556667b909eb0bbaa9e8a7a665e4b4437383f424443413d37342a211a19202e373a40444544413d3738454b4c463a2f22120000000000000000000000000000000000000005131f2d36434b566069727a81868b909396979899989695938f8a868079726860564b43362c1e1305000000000000000000000000000000000000000000000000000000031628384e63798ea2b4c8d2c2a8937d8a9eb4c9ccb9a8927d68533e2d1b07000000000000000000000000000000041626333d404a4a4a4a4a4a4a4a423f352717060000000000000000000000061423313a3d46494a4a4a4a4a4a4a463631271a0a0000041626333d404a4a4a4a4a4a4a4a423f35271706000000000000000008182630353f474a4a4a4a4a4a4a4a403d33261604000000000000000000000000000000000f1f2c35384a4a4a4a4a4a4a4a4a483f32221000000000000000000000000000000000041626333d404a4a4a4a4a4a4a4a4340362818060000000000021424313b3e4a4a4a4a4a4a463a362e2010020000000000000000000000000e182630353c494d53555756544f4a433632291b11030000000000000000000000000000000000000000000009121c232a34373e3c484d5053545556555453504d483c3e37342a231c1108000000000000000000000000000000000000091927313b484c5254524c473a302618080000000000031729394b6075879cb2bdb49f8c7b655c4c403c494d5457595956524c473b352c2b343e4b4f55595a5957524c473b363633291c12040000000000000000000000000000000000000000010f18263038454b535c646c71767b7e808283848381807e7a76716b645c534b45383026180e0000000000000000000000000000000000000000000000000000000000091e3245566c8196abc0d1c9b5a48c77849aafc4d6c6b09b85715c4a36220b0000000000000000000000000000000e213344515660606060606060605852453523100000000000000000000002142431414d525c5f606060606060605b4b4538271502000e213344515660606060606060605852453523100000000000000001142636434b545d5f6060606060606055504433210d000000000000000000000000000000061a2c3d495e60606060606060605f5c503f2d19050000000000000000000000000000000e2133445156606060606060606058534636231000000000000b1f31424e5360606060605f5c4f4a3e2e20100000000000000000000002101e2c36434b525a63686a6c6b696460544b46392f2214060000000000000000000000000000000000000005111c232f383b474c53595a626568696a6b6a696865625a59534c473a382f231c110400000000000000000000000000000002152737444b596267696761584b4336261401000000000a1e3346576a7f94a5b6b4a3947f6a5d4b3e484d5a62696c6e6e6c6762594e493d3c484d5c646b6e6f6e6c6861594e4a3d3127190c000000000000000000000000000000000000000000000008141c2832363e4b4f56586165686b6d6e6e6d6c6b68646057554e4a3d3631271c14080000000000000000000000000000000000000000000000000000000000000b21364b6075899eb3c9dbc6b19c86717f94aac4d4c9b5a38e79644f39291703000000000000000000000000000014293d51626b75757575757575756d64523f2b1601000000000000000000102031424e5f6771747575757575757570605645311d090014293d51626b75757575757575756d64523f2b16010000000000000a1c30435460697275757575757575756b62503d28140000000000000000000000000000000c2135495b707575757575757575756e5c48331e0900000000000000000000000000000014293d51626b75757575757575756e6453402b16000000000011263b4e606875757575757571645c4b3e2e1c0c00000000000000000010202e3c4954606871787d8081807e7a736a61574c403224140400000000000000000000000000000000000d181f2f38404c505962696e73787a7d7f8080807f7d7a77736e686159504c3f372e1f180c0000000000000000000000000000081d314455606b777d7e7c776a605443301c0f000000001325364b6176899eb3bcab9b8572604a3f4959626e787e828383817d776e635b4f485a626f7a80848584817d776e635b4b4437291c0c0000000000000000000000000000000000000000000000010a161e212e373a3a474c505356575859585755534f4b453939362d201d150a01000000000000000000000000000000000000000000000000000000000000071a2d3d52687d92a7b9ccd3c2ab95806b798fa6b7cbd2c1ac97826c5746331e0a0000000000000000000000000000162b40566b808a8a8a8a8a8a8a8a826d58422d180300000000000000000c1c2d3e4e60687d86898a8a8a8a8a8a8a8574604b36200b00162b40566b808a8a8a8a8a8a8a8a826d58422d180300000000000a1a2e3f4b60727f878a8a8a8a8a8a8a8a806b55402b160000000000000000000000000000000e23384e63798a8a8a8a8a8a8a8a8c755f4a35200a000000000000000000000000000000162b40566b808a8a8a8a8a8a8a8a826e58432e19000000000013293e53687e8a8a8a8a8a8a867a645c4b3a2a1808000000000000000d1d2e3e4b5a62737d868d92959796938f887f75665e4f4232221200000000000000000000000000000003111d2a343f4c505e666f777e83888d9093949596959492908d88837e776f655d504b3f332a1c11030000000000000000000000081b2e3f4b6073808b9294928a8072604b3d2d1a070000071c304354697f94a7b9b49f8c7a645443495b6377838d9497999896928b83796961596278848f95999a9996928b83796a6055463a291c0c0000000000000000000000000000000000000000000000000309101b22242a33373b3e414243444341403e3a36322824211a0f090200000000000000000000000000000000000000000000000000000000000000000d21364a5c70859bb0c5d6cab6a48e796473889db2c8ddc9b49e8976614b3621100000000000000000000000000000162b40566b80959f9f9f9f9f9f97826d58422d18030000000000000008182a3a4a5c687e929b9ea89f9f9f9f9e8978625645311d0900162b40566b80959f9f9f9f9f9f97826d58422d180300000000031628384b5d6b80949c9faa9f9f9faa9c8674604b36200b0000000000000000000000000000000e23384e63788d9f9f9f9f9f9f9f8a755f4a35200a000000000000000000000000000000162b40566b80959f9f9f9f9f9f98836e58432e19000000000011263b4e606d8298a49faa9f9b8b7a64584736251300000000000005182b3b4b5c647885929ca4a8aaacaba9a69d95887c69604f40301e0e000000000000000000000000000613212f3b474c5d65717b848b93999ea7a5a8a9aaabaaa9a8a5a69e99938b847b71655d4c473a2e211305000000000000000000000d22374b5d6d82969faaa9a99f95816c5b4a36210c00000b20354a6073879db2c1ad98836e5c4a465763798898a0a9acaeaeabaa9f988b7f6c6177879aa2aaaeafaeacab9f998b7f746158463a2918080000000000000000000000000000000000000000000000000000070d0f171f2126292b2d2e2f2e2c2b2925211e160f0d0700000000000000000000000000000000000000000000000000000000000000000000031628394e64798ea3b4c8d9c8b19c87725c6b8196abc1d2cdb9a8937e68533e2e1b0700000000000000000000000000162b40566b8095abb5b5b5b5ad97826d58422d1803000000000000001325364758647a8b9fb1b4b9c6c2b19f917d675a493827150200162b40566b8095abb5b5b5b5ad97826d58422d1803000000000a1e324556657b8d9fb2b4bbb5c1b49f8b79645645311d090000000000000000000000000000000e23384e63788da3b5b5b5b5b49f8a755f4a35200a000000000000000000000000000000162b40566b8095abb5b5b5b5ad98836e58432e1900000000000b1f31424b6175869ca8bab4a99d8776615443301c1100000000000b20344859647a899ba3b1b6bab4b2b3b7b7b3a69d8c7e695e4d3c2b19060000000000000000000000061424313f4b59626e7b86909a9faaaeb3b8c5bdbebfc0bfbebdc4b8b3aeaa9f9990857b6e61584b3f302314060000000000000000000f253a4f647b8fa0b4bbc7bab49f8c79634e39240e000010253a4f657a8fa5b7b4a38e79644e3e4b6175879da6b2bfbcb5b1afb1b4aa9f94816d8297a5b4b9b3aca9abb1b4a99f9585766158463626140100000000000000000000000000000000000000000000000000000000040a0c101316181919181716130f0b090300000000000000000000000000000000000000000000000000000000000000000000000000091e3246576c8197acc1d1cebbaa947f6a5463798ea3b5c9d6c6b19b86715c4b37220c00000000000000000000000000162b40566b8095abc0cacac2ad97826d58422d18030000000000000d1c3043546176879da9bac9cdc6b5a497816c5f4d3c2c1a0a0000162b40566b8095abc0cacac2ad97826d58422d18030000000a1a2e3e4b6075869cabbccacec7b5a3947f6a5c4a382715020000000000000000000000000000000e23384e63788da3b8cacacab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0cacac3ad98836e58432e19000000000002141e32465763798a9fb4bdb7a5998372604a3f2e1d0d000000081c2f3f4d6277889da7b5b8b3a89f9c9da6aeb2b8aa9f8d7c665a4835200e0000000000000000000005142532424e5d657783909ba3afb4bbc8c8ccd5d2d2d1d0d1d2d2d5cbc8c8bbb4afa39b908276655d4d41312414040000000000000000162c41566b8196abbeced7cdbcab95806b55402b160005182a3b576c8197acc3b09b85705c4a46576b8196a5b7c4b7ab9f9b999c9fabb49f96818b9fb4b9a89e9794969ca4b4b4a39b8576615443301c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b6175899eb3c9decab49f8b77624c5b71869bb0c7d7c9b5a38f7a644f3a291704000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d180300000000000d1d2f3f4a60728399a5b7c7d8cdb9a89c8674604b41301e0e000000162b40566b8095abc0d5d7c2ad97826d58422d18030000021527384a5c6b8096a4b6c9dacdbaa99b8573604b3d2d1a0a000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000031629394a5b677d929fb1c1b3a1947f6a5d4b3b2b190900000e23384c5d6f849aa6b8b8a79e928987888d99a1b2bbab9e8a78624d3c2c1906000000000000000002132332434f60687b8898a0b1b5c1caced6ccc9c4c0bdbbbbbbbdc0c4c9ccd6cecac1b5b0a098887b675f4e423123120200000000000000192e43586e8398adc3d8e9dac9ad98826d58432d18000b1f34485972879cb2c4a9937e69543e4b6176899eb4c3b7a69d8d8684868c98a0b09f969fa9baa89e89817e8086939faab5a39a8472604b3d2c1a0600000000000000000000070b0f1314100b0801000000000000000000070b0f1314100b0801000000000000000000070b0f1314100b080100000000000000000000000000000000000000000000000000071b2d3e53687d93a8b9ccd5c4ae99846e594853687e93a9bacdd2c2ad97826d5846331f0a000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000009192b3b4b5d6a7f94a1b3c3d4cebeb49e8a7963564532231200000000162b40566b8095abc0d5d7c2ad97826d58422d18030000091d314556647a8c9fb4c3d3d1c0b49f8b79635544311f0f00000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000b1b2d3d4d5f6c8197a3b5bfb49f8c7b655948372614010316293950657b90a2b4bbaa9e897d757273788399a1b2b9a898826d5b4935210c0000000000000000102030414f61697e8d9da6b2bfc9d2d0c7c5b9b3aeaaa8a6a6a6a8abafb4b9c6c7d0d2c9beb2a69d8c7d69604e4130201000000000000000172c42576c8197acc1d1dad0c0ab96816b56412c16000d22374c62778ca5b6b7a68d78624d3c51677c91a8b9c5b39d887a716f717883979fb0acb4bab49f8a796c696b737e8c9fb4b4a2947f695b4935210c000000000000000008131c2025292925201d140900000000000008131c2025292925201d140900000000000008131c2025292925201d14090000000000000000000000000000000000000000000000000d22364a5c71869bb0c6d6cbb8a6917c66513b4c61768a9fb4c9dec9b49f8a76614c362110000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1803000000011527374859657b8c9fb4bfd0d3c2b1a0927d675b493828160500000000162b40566b8095abc0d5d7c2ad97826d58422d18030009192d3e4b6074869caabbced7c6b4a2947f695b493726140100000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000000000000000f1f30414b6074859ba7b9bbaa9d8877625544311d120a1e3246576f849aafc0b49f8b7a6760565b63728399abbcb49f8c78634d38230e000000000000000b1b2e3f4d5f697f929fabb7c4cfd2c9bfb3aea79e9995929190919295999ea8afb3c0c9d2cfc4b7aa9f8d7e695f4d3e2d1a0a00000000000011273c51667c91a3b4c1c4c0b4a2907c65503b26100012273c51677c91a6c3b39d88735a4841566b8096abc6b9a7927d675c5a5a626e8197a3b5c9c2ad98836d5b545460697d919fb1b49f8a79634e3b2a18040000000000010f182530353a3e3e3a3531261910020000010f182530353a3e3e3a3531261910020000010f182530353a3e3e3a353126191002000000000000000000000000000000000000000000031729394f647a8ea3b5c9ddc8b39d8874604b3546586d8298adc3d3cdbaa9937e69533f2e1b080000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000e1d3144556277889daabbced7c7b6a497826d5f4d3d2c1a0a0000000000162b40566b8095abc0d5d7c2ad97826d58422d1803011527374a5c6b8095a4b6c8d9cdb9a89a8473604b3d2c19090000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000001131e3245566378899eb3bcb8a69a8473604b402f1e0e21364b61768a9fb4c1ac97826c5c4b45495462788c9fb4bcab947f69543f2a14000000000000031729394b5d677d929db4bcc9d5cdc1b5b0a199908984807d7c7b7c7d808489919aa2b1b5c2ced4c8bbab9f8d7d675c4a3828160300000000000b20354b6073859ba3adafada29a846f5d4c38230e00152a3f556a7f94aabfae99836e593c44596e8399aec3b39e8974604b3e484d6074859bb1c3bfaa947f6a553d434b5f6d8297a9baa998826d5947341f0b00000000000f1f2c36434a4f5353504b44372d201001000f1f2c36434a4f5353504b44372d201001000f1f2c36434a4f5353504b44372d20100100000000000000000000000000000000000000000a1e3346576d8297acc1d2d1c0ab96806b5544313a50657b90a5b6cad7c7b19c86715d4b37220c0000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d180300000e1e30404b6073849aa6b8c8d9cdbaa99c8675614b41311f0f000000000000162b40566b8095abc0d5d7c2ad97826d58422d1800091d314455647a8c9fb4c2d3d0c0b49e8a78635443301f0f000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000000000000000002162838495a667c919eb0c0b4a295806b5e4c3c2b1a263b51667b90aabbc7a5907b65503e3136485a70859aafc9af9a85705a3727150200000000000a1e334657647b8b9fb4bbcfd9ccbdb0a39b8f847b756f6b68666666686b6f757c848f9ca4b1bdcdd8c9bcab9f8b7a645645321e0e0000000000081c30435462778591989a98918476614c3f2f1c0900182d42586d8297adc0ab95806b5640455a70859aafc5b19b8671554431354455667b90a5b7bfa9947f6a543f30414c61778a9fb4b49f8a77614c37220d000000000d1d2c3d4954606468696560554a3e2d1f0f0d1d2c3d4954606468696560554a3e2d1f0f0d1d2c3d4954606468696560554a3e2d1f0f00000000000000000000000000000000000000000c21364c61768a9eb4c9dec8b4a28d78634e3727354a6073879db2c9d9c9b5a48f7a654f3a2a170400000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1803000a1a2c3c4c5e6b8096a2b4c4d5cfbeb49f8b7963574632231301000000000000162b40566b8095abc0d5d7c2ad97826d58422d1809192d3d4b6073859baabbced6c6b3a2937e685a4936261401000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000000000a1a2c3c4d5e6b8196a2b4c0b59f8d7c665a483827293f54697e94a9c8baa98c76614c37212b3c566b8196abc0b39e89735544311d0800000000071a2d3e4c6176879daabbcee3ccbbaf9f96857a6f666055555351515153565660666f7a86979fb0bccddac9baa99c8675604b3c2c19060000000001142636485962737c8385827c7261584733211100001b30455a70859aafbda8937d68533e455a70859aafc4af9a856f5a372627374c5e72879db2c1ab96816c5637263447596c8196acbaa9947f6a553b2b1805000005192b3b495b63727a7e7e7a73645c4a3d2d1a192b3b495b63727a7e7e7a73645c4a3d2d1a192b3b495b63727a7e7e7a73645c4a3d2d1a07000000000000000000000000000000000000081b2e3e53687e93a8b9cdd6c6b09a85705b49351c3043546a7f95abbccfd2c2ad98826d5847331f0a00000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d180302162838495a667c919eb0c0d1d3c3b2a0937e685b4a3928160500000000000000162b40566b8095abc0d5d7c2ad97826d58422d181426374a5b6a7f95a3b5c8d8ccb9a89a8472604a3c2c180800000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000000000000000000000e1e30404b6073849ba7b8bcab9e8978625645312b40566b8095abc0b49f8a745847331f293f54697e94a9beb59f8a75604b36200b000000000d21364a5c6c8197a5b7c8d8cfbeaf9d948173645c514b44373d3c3b3c3d38454b515d657481969eb0bfd0d7c7b6a496806b5a4935200e000000000008182a3b485460676d6f6d666054473a29170300001c31465c71869bb1bba6917b66513c44596e8499aec3b19c87715443301c2f40566c8196abc8af9a85705544312a3a4f657a8fa6b8b19c8671594834200b00000b203448596379858f93938f867a645b4a3621203448596379858f93938f867a645b4a3621203448596379858f93938f867a645b4a36210c0000000000000000000000000000000000000d22374b5c71869cb1c6d7ccb9a8927d68523d2c1a25364d62788b9fb4cadec9b49f8a76614c37211100000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d18010f1e3245566278899eb3bccdd8c7b6a598826e604e3d2d1b0b0000000000000000162b40566b8095abc0d5d7c2ad97826d58422d181d31445563798b9fb4c1d2d0bfb39e8978625443301e0e0000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000000000000121d3144556278899eabbcb8a79b8574604b413042576c8197acc1b39e89745e3a2a17283e53687d93a8bdbcab8c77614c37220c000000071a2d3d4e64798c9fb4c3d4d3c3b2a0947f6c60554a3e35312728272627282731363f4b56606d8096a1b3c5d5d3c2b49f8b78634d3c2b190500000000000d1d2a36434b52585a58514a4336291c0c0000001d32475d72879cb2baa5907b65503b41576c8196acc1b39e8974604b3520263b51667b90aabbb49e8975604b3520354b6074889eb3b5a48c77624c37220d00000d22374d6278899ba3a8a8a49c8a79634e3a2a22374d6278899ba3a8a8a49c8a79634e3a2a22374d6278899ba3a8a8a49c8a79634e3a2a1804000000000000000000000000000000000417293a4f647a8fa4b5c9dec9b49e8976614b36210f203448596f8499afc5d5cdbaa9947e69543f2e1c08000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d180f1f31414b6074859ba7b9cce2cebaa99c8776614c42311f0f000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d182c3d4b6073859ba9baced5c5b3a1927d685a48362513000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000000000000011527374859657b8d9fb4c0b5a396816c5f4d3d41566b8096abc0b49f89745746321e293f54697e94a9beb9a88b76604b36210b0000000c21364a5b6f849aabbccfdfcab6a598826d614b44372d201d151311111113151d202e38454b60728399a6b8cbe0cebaa998836e5a483520080000000000000d182630353c4345433c353025180c000000001e33485d73889db2baa48f7a654f3a3d53687d92a8c2b9a88f7a644f392921364b61768a9fb4b9a88f7a644f3a243043546f8499aec2a6917c66513c26110003172939586d8297a7b5c1c2b6a89a846f5847332939586d8297a7b5c1c2b6a89a846f5847332939586d8297a7b5c1c2b6a89a846f5847331f0a000000000000000000000000000000000a1f3347586d8297adc2d2d2c2ac97826c5746321e09192b3b51677c91a7b8ccd7c7b19c87725d4b37230c000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d181b2d3d4d5f6d8197a3b5c5d6d0bfb49f8b7a64574633241401000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d2636495b697f94a3b5c7d8ccb8a799836f604e3c2b1808000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190000000000000000000000000009192b3b4c5e6a8095a2b3c1b19f917d675b493954697f94a9bebaa98b76614b36212939556b8095aac0b49e89745645321e090000021528384e63798ea1b3c9d9d2c1b29d8776614c4331271910080100000000000209101a283243546277889eb3c3d4d8c7b49f8b78624d36251300000000000002101b22242e2e302e2e27241d1204000000001d32485d72879db2baa58f7a65503a384d63788da4b5c6ab95806b5746331e32465770859bb0c6a9947f6a5438272636566b8095abbfaa947f6a553f2a15000a1e33465774899eb3c5d2d3c6b59f8b77614c3733465774899eb3c5d2d3c6b59f8b77614c3733465774899eb3c5d2d3c6b59f8b77614c37220c000000000000000000000000000000000c21374c61768a9fb4c9dec9b5a48f7a644f392816030d20364b6075889eb3c8decab6a48f7a65503a2a18040000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1729394a5b677d929fb1c1d2d4c3b3a1937e695c4a3929170600000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d30435463798b9fb4c1d2cfbeb39e8977624c41311d0d00000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000000000000000000000000000d1d2f404b6072849aa6b7bdb49e8a7963574552677c91a7c2c7a48f7a644f3a2a3246576f8499aec4b19c86715c382816020000091d3245566d8297adbfd0ddc9b5a3907b655746331d150900000000000000000000000a1525364759677d92a5b7cadfcebbaa96806b5443301c07000000000010202d363943434343433c39302212000000001c31465b71869bb0bba6907b66513b35495a71869cb1c5b39e8976614b3e2e2939556b8095aac7af9a846f564531283e53687d93a8bdac97816c57422c17000c21364b61768ba7b9cce2e3cfbcab8e79644e39364b61768ba7b9cce2e3cfbcab8e79644e39364b61768ba7b9cce2e3cfbcab8e79644e39240f000000000000000000000000000000081c2e3f54697e93a9bacdd8c7b19c86715c4b371b0b00091d3145566c8196abc1d2d3c2ad98836e5947341f080000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1e33465763798a9fb4bdced8c8b7a599836e604f3e2d1b0b0000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d3c4b6073859aa9bacdd5c4b2a0917d6759483423130000000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000000000000000000111c3043546177889daabbb9a89c8675604b4c61778ca4b5bfaa95806a58473a414b6176899eb4c3ab96816c56412c170000000b20364b6075899eb3c9ded5c5b09b85715d4b392917010000000000000000000000000008182a3b4b6074879db2c7d8d9c8b29d8773604a35200b00000000071b2d3e4a4f5858585858514c40301d090000001a2f455a6f849aafbda7927d68523d2c3c54697e93a7b8b9a795806b5c4b3d2f3b50657a90a9bab49f8975604b36273c52677c91a7bcad98836e58432e19000b20354b60748a9fb4c8d7d8c9b6a48d77624d38354b60758a9fb4c8d7d8c9b6a48d77624d38354b60758a9fb4c8d7d8c9b6a48d77624d38220d0000000000000000000000000000000e23374b5d71869cb1c7d7cebaa9947e69543e2e1b0000021527384e63798ea3b5c9dfc9b49f8a77614c3625130000000000000000162b40566b8095abc0d5d7c2ad97826d58422d32424b6175869ca8bacde2cebbaa9d8776614c42322010000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58463d4a5b697e93a2b4c7d7cbb8a698836e5f4d3b2a18050000000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000000000000000000011426364759657b8c9fb4bfb5a498826d604e5971869cb1c4b39e8876615855565f6a7f94a8b9b6a4907b66503b261100000011263c51667b91a8b9cce0ccb8a7917c67523f2e1b0b0000000000000000000000000000000d1d314455697e94a9bacedfcbb7a58f7a644f3a240f000000000d22364a5c646e6e6e6e6e665e4c39240f000000182e43586d8298adbfaa95806a55402b364b6175899eb3c0b49f8c7a645b4c3f364b60758a9fb4baa88f7a65503a263b51667b90a6bbae99836e59442f1900081c3043546f8499aabac6c7baab9c86715a48353043546f8499aabac6c7baab9c86715a48353043546f8499aabac6c7baab9c86715a4835200b000000000000000000000000000004182a3a50657a8fa4b6cadfc9b49f8a77614c3722100000000a21364a5b71869bb0c7d7cebaa9947f695443301c0700000000000000162b40566b8095abc0d5d7c2ad97826d58422e3e4f616e8298a4b6c6d7d0bfb49f8c7a64584733241402000000000000000000000000162b40566b8095abc0d5d7c2ad97826d5b5b5c5b63798a9eb4c0d1ccbbb39e8876614c41301d0d000000000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190000000000000000000000000000000008182a3a4b5d697f94a1b3c2b2a0927e685c53687e93a6b7b8a69a84766d6a6b717d8c9fb4bfb29c8774604b35200b000002152838576c8197acc6d6ddc8b39e8874604b35201100000000000000000000000000000000011426374c61768a9fb4c9dfd4c3aa947f6a553f2a15000000000f24394f647a83838383837c66513c2711000000142a3f54697f94a9c9ae98836e593d2c324657687e93a2b4bbaa9d8879655d4f4a45566f849aafc6aa95806a5539283c51667c91a6bbad98836e58432e1900011426364f647a8c9fa8aeafa99f8d7c66513c2b26364f647a8c9fa8aeafa99f8d7c66513c2b26364f647a8c9fa8aeafa99f8d7c66513c2b190500000000000000000000000000000a1f3347586d8398adc2d3d4c4ae98836e5947341f0a000000071a2d3d53687e93a9bacdd8c7b29c8773604a35200d00000000000000162b40566b8095abc0d5d7c2ad97826d58423d4b5c697e93a0b2c2d3d4c4b3a1947f6a5d4b3a2a170600000000000000000000000000162b40566b8095abc0d5d7c2ad9782717171717279869ca8b9cdc5b9b39d907c66584733231300000000000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000000000000000000000000000000000c1c2e3f4f616e8399a5b6beb49f8b7a64576074879dabbcb4a29a89827f8186929faabbb3a1927d685544311d080000091d32455671869bb1c6dbd8c2ad98836d5544311d080000000000000000000000000000000000091e3346576f859aafc4dad9c4af99846f5a3a29170400000014293e53697e9398989897816c57422c1700000010253a50657b8fabbcb39d88735b493528394b6073849aa6b7b7a69d897b6d645c59566a7f94aabfb09a85705746323d52677d92a7bcac97826d57422d1800000822364a5c677d8a959999958b7e685e4c381e22364a5c677d8a959999958b7e685e4c381e22364a5c677d8a959999958b7e685e4c381e0e0000000000000000000000000000001325364c61778a9fb4c9dfcbb7a6907b66503a2a1804000000000f21364c61768a9fb4c9decab6a5907b65503b2b1805000000000000162b40566b8095abc0d5d7c2ad97826d5853545b647a8b9fb4becfd9c9b7a69a8472604a3f2e1c0c0000000000000000000000000000162b40566b8095abc0d5dec8b39e8986868686888e9ca4b6c6ccb9a79e917f695e4c3a2a180900000000000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000000000000000000000300102132434c6176879da9babaa99c87766156657b8d9fb4bbb4a79e9895969ba3b4bbb4a5998372604a3726140100000b20364b60758a9fb4cadfd3bda8937e685337271501000000000000000000000000000000000003172939556a8095aabfd5dec8b39e88735846331f0a000001172c41566c8196abadad9a846f5a3625130000000c21364c61768b9fb5b7a68d78634e36253043546277889da7b7b7a79e908279726e6c6c7a8fa4b9b49f8a76614b363f54697f94a9beab95806b56402b160000071b2e3e4d5f67777f8484807868604e402f1d1b2e3e4d5f67777f8484807868604e402f1d1b2e3e4d5f67777f8484807868604e402f1d000000000000000000000000000000071c304354697f94a9bacddac9b29d8774604b35200c00000000000a1f3346586d8298adc3d3d3c3ae99836e5948342008000000000000162b40566b8095abc0d5d7c2ad97826d6868696d79889daabbcee3cfbcab9d8877615443302010000000000000000000000000000000162b40566b8095abc0d5e0ccb8a79e9b9b9b9b9da5b1b6c2d3c9b39e897c69614f4b3e3127190c000000000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000000000000000000040a0c12181b1c1c1f334658647a8b9fb4beb6a599836e615d6a7f939faab3b9b3adaaabb1b5b8b3a29a87766154433019090000000e23384e63788daabbcee2d8c8a48f7a644f3a250f0000000000000000000000000000000000000011263c51667b91a6bbd0e0ccb8a78b76614c36210c000004192f44596e8499aec3b29c87725443301c0700000a1e33465770859ab0c4aa957f6a54433026364859647a899da6b3b8b3a0988e878381828399aec4bbaa907b66503b39576c8197acc7a8927d68533d2813000000102030414d59626a6f6f6b625a4e42312212102030414d59626a6f6f6b625a4e42312212102030414d59626a6f6f6b625a4e423122120000000000000000000000000000000b20354a6073879cb2c7d7cfbcab95806b5443301c0800000000000417293a50657b90a5b6cadfcab49f8b77624c362614010000000000162b40566b8095abc0d5dac5b09a847d7d7d7e828a9da6b7c8d8d0c0b49f8d7b65594736251302000000000000000000000000000000162b40566b8095abc0d5e8d5c5b8b3b0b0b0b1b2b7c3cad3dec9b49f8a827b70645c4b44372a1c0c0000000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000000000000000000040c171f21272d3032312f293a4a5c687e93a0b2c2b2a1947e695d616a7e8c99a1aaafb2b3b2b0ada69e9384766158473625130000000011263b50667b90a5c8d9e2cebbaa8c77624c37220d000000000000000000000000000000000000000e24394e63798ea3b8cee8d5c5a38e79644e39240f0000031628395c71869cb1c6b49f8a75604a35200b00000317293953697e93aabbb19c8773604a35202b3b4a5c64798899a1b1b5b2ada49c98969799a1b3c7c8ab96806b563a465770869bb0baa98f7a654f3a2510000000021323303b484d55595a564d493c31241404021323303b484d55595a564d493c31241404021323303b484d55595a564d493c31241404000000000000000000000000000005182a3b50657b90a4b6cadfcab59f8c78624d362614010000000000000b20354a6073879db2c9d9cebbaa947f6a5443301c080000000000162b40566b8095abc0d5ddc8b4a29a92929294979fa9b7c4d5cdc1b4a295806a5d4b3b2a180800000000000000000000000000000000162b40566b8095abc0d5eae2d5cbc8c5c5c5c5c5c5c7c8cbd5cdbaa89f988f857a6c6055473a2a1b0a00000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190000000000000000000c171f2a33373d4245474745413b3e4e606d8298a4b6bfb49f8b7b6458606879848e959a9c9e9d9b9791887e746158473a2a18080000000012283d52677d92a7bcd2dfcab49f8a75604a35200b000000000000000000000000000000000000000c21374c61768ca1b6daecd0baa5907b65503b26100000091e32465773899eb3c8baa98c77614c37220c0000000d22374c62778b9fb4b6a4907b665141301d2d3e4a5b637783919ca4adb4b6b1aeabacaeb3bfbfc1b09b867158474b61768a9fb4b49f8a75604b36210b0000000005131d2b34374044444038352c1e1406000005131d2b34374044444038352c1e1406000005131d2b34374044444038352c1e14060000000000000000000000000000000b1f3447596e8398aec3d3d6c5af9a846f5a4935180800000000000000071c3043546a7f95abbccfd8c8b29d8773604b35200d0000000000162b40566b8095abc0d5e4d1c0b4b0a7a7a8a9adb4bac7d5c6b9b4a39a8473604b3f2e1d0c0000000000000000000000000000000000162b40566b8095abc0d5e7d5c4b8b3b0b0b0b0b0b0b1b3b8c4c3c6bab4ada39b8d817461584739281603000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190000000000000002101c29333a474c52585a5c5c5a56504b444b6175869ca8b9bbaa9d877661545c646f797f8587898886827c75696055473a2a1c0c000000000013293e53687e93a8bdd3dec9b39e89745443301c07000000000000000000000000000000000000000b20364b60758babbccfe3d0bba6917b66513c261100000c21364b61768ba7b8ccc7a48e79644f39240f0000000b1f3447596e8399aebfb09a85705f4d3a29202d3d4a59616f7c8690989ea8a8abadaeafaeadaaa7a39b8b76614c52677c91aabbaf9a846f5645321e090000000000000d1820222a2f2f2b2320190e0000000000000d1820222a2f2f2b2320190e0000000000000d1820222a2f2f2b2320190e00000000000000000000000000000000011426364c62778b9fb4c9dfccb9a7927d67523c2b190000000000000000001325364d62788b9fb4cadfcab7a5907b66513b2b190500000000162b40566b8095abc0d5eaded1c8c5bdbdbdbec2c9cdd7cdb9a89e958576615544312111000000000000000000000000000000000000162b40566b8095abc0d5e0cbb8a69e9a9a9a9a9a9b9c9ea6a6aeb5bcc9c1b4ab9f968476615745321e12000000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190000000000000311202d3a474c5861676d7071716f6b6560554b5763798a9eb4bdb7a6998372604b4e5b636a70727473716d6660574b44372a1c0c00000000000014293f54697e94a9bed3ddc8b39e88735e4925130000000000000000000000000000000000000000091d314556758a9fb5cadfd1bca7917c67523c271200000d23384d62788da2c5d6bba5907b66503b261100000005182a3b4f647a8ea1b3b4a2917c675847331f1f2d3b474c5f67737b83898f9396989999989795918c867f75614b5b6f8499afb9a8937e68533828160200000000000000050b0d151a1a160d0c060000000000000000050b0d151a1a160d0c060000000000000000050b0d151a1a160d0c060000000000000000000000000000000000081c3043546a7f94aabbcedec9b39e8975604b36210e00000000000000000008203448596f8499afc5d5d4c3ae99836e594834200900000000162b40566b8095abc0d5eae0d3cac6c1c1c2c6c9d2e1dec9b49e8a807461584737261403000000000000000000000000000000000000162b40566b8095abc0d5ddc8b39e8885858585858587888c91999fabb5c1c9bcb5a29a8575604b403019090000000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000000000011212e3e4a58616b767c8285878684817b746760545b677d929fb1c1b3a1957f6a5d4c4a4e555a5d5e5d5b58514b45393127190c0000000000000013293e53687e93a8bdd3dec9b39e89745e3a2a1704000000000000000000000000000000000000000b20354b60758aabbccfe3d0bba6917b66513c261100000f24394f64798ea4b9cebca7927d67523d2812000000000d22364a5c6f8499aabbb29d8776614c4333241d2a34414d5460666d75797e8182848483827f7c77716961574e63798c9fb5b49e8a76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073879db2c8d8d2c1ac96816c5645321e0900000000000000000005192b3b52677c91a7b8ccdfcab49f8b78624d37261401000000162b40566b8095abc0d5e5d3c2b6b1ababadb1b5c1cdd7c7b19c877a665e4d3f2e1d0d00000000000000000000000000000000000000162b40566b8095abc0d5d7c2ad97827070707070707273777c838d9ba3b3bfcfc0b4a398826e5e4d3726140100000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000000000d1d2e3f4b5c6476808a92979a9c9c9a9690877d7361585f6c8197a3b5bfb49f8d7b65594837404547494846423c3632281d1509000000000000000013283d52687d92a7bdd2dfc9b49f8a745847331f0a000000000000000000000000000000000000000c21364c61768ba1b6daeccfbaa58f7a65503a2510000010263b50657b90a5bad0bea9937e69543e291400000000071b2d3e4e64798c9fb4b7a698826e615042321e181f3036434b51566064686c6d6e6f6e6d6a676259544b4d5f6f8399abbaa997816c5746331e0a0000000000000000000000000000000001080b0f121416161513100d0b050000000000000000000000000002080a0b0b0b0b0b0b0b000000000000000000000000000000000005182b3b50667b90a5b7caddc9b5a38e79644e38281602000000000000000000000d20364b6075889eb3c8decebbaa95806a5544311d08000000162b40566b8095abc0d5decab6a49c9696979ba3b4b9c6cab6a49c8b7d665d4b3c2b1a0a000000000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d5b5b5b5b5b5c5962676e79859aa1b3c3d1c1b2a0917c665544311d0800000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190000000005182b3b4b5d657a88969fa9adafb1b1afaba59d92847661596074859ba7b9bcab9e88776255443130323433312d27211e160a0200000000000000000011263c51667b91a6c9dae2cebaa98c76614c37210c000000000000000000000000000000000000000e23394e63788ea3b8cde7d5c4a38e79644e39240f000011263c51667b91a6bbd0bfa9947f6a543f2a1500000000001021364a5c6b8095a4b6b2a0947f6a604f4332291b1826303538454b4f535658595a595855524c483c495b677c91a1b3b49f8a77624d392917030000000000000000000000000000070b141c202428292b2b2a2825222018110b0903000000000000040a0c171e202020202020202016140d04000000000000000000000000000b203448596e8399aec3d4d7c7b19b86715c4a361a0a0000000000000000000000091d3145566c8196abc1d2d9c8b29d8874604b35200e000000162b40566b8095abc0d5dcc6b19c8681818286909ea8b9c9c2b6a99f8b7b655a48382816030000000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58454545463b484c515b6374839aa5b7cacfbeb29d8773604b35200b00000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000000b20344859657b8a9da6b4bab5b0acacb1b5b7b2a29a867761566278899eabbcb8a69a8473604b402f1e1f1e1c18110b090300000000000000000000000e24394e63798eabbccfe3d8c7a48e79644f39240f0000000000000000000000000000000000000011263b50667b90a5bbd0e0cbb8a68c77614c37220c000012273c51677c91a6bcd1bfaa957f6a55402a150000000000071a2d3e4b6074869ca8b9b59f8d7e6a614b46392f231c1c202832363a3e414344444342403c373e4a5a6379899eb3b6a495806b5948341b0b0000000000000000000000000008131c20263035393d3f40403f3d3b37342b27211e160a060000000c171f212c3335353535353535352b282116080000000000000000000000011426374d62778b9fb4cadfcdbaa9937e69533e2d1b000000000000000000000000021527384e63798ea3b5c9ddcbb7a6917c66513c2b19060000162b40566b8095abc0d5d7c2ad97826d6c6d717c8a9eabbccfc7baa99e8878625645321e150400000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58423030302a34373d4a566176879db2c6d7cab7a5917c665137261401000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000000071a2d3d4d6277889ea8b7b7ab9f9b97979ba3b3b8b3a49a8474605a667c8d9fb5c0b4a296806b5e4c3c2c1a0a00030000000000000000000000000000000c21364b61768b9fb5cadfd2bda7927d685236251300000000000000000000000000000000000002152838546a7f94a9bfd4ddc8b39d88735947341f0b000012273d52677c92a7bcd1c0ab95806b56402b160100000000000f1d324556647a8a9eabbcab9f937f6e61574c40372f24201c1d2024292c2d2f2f2e273137444b5c6478879da7b9a99c8674604b3b2b1800000000000000000000000004131825303536434b4f525456555453504c483b3c36322820190e050c1c29333642484a4a4a4a4a4a4a4a403d3326160400000000000000000000081d3144556a7f95aabbcedec9b49f8a76614c362110000000000000000000000000000a21364a5b71869bb0c7d7d4c4af99846f5a483520090000162b40566b8095abc0d5d7c2ad97826d58585e667c8d9fb5bfd0c7b8a69b8575604b4332221100000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1b1b181f222d384657687d92a8bacdd4c3ae99846f5544311d08000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190000000d21364a5c6e8399a6b8b7a69d8d85828286909ea7b8b4a2947f6a585e6b8096a2b4c0b09e917c665a493828150200000000000000000000000000000000091e32465772879cb1c7dcd7c2ac97826d5443301c070000000000000000000000000000000000091d3245566e8499aec3d9d9c4af9a846f5a3b2a1804000012283d52677d92a7bcd2c0ab95806b56402b16010000000000021528384a5c667c8d9fb4bcb59d948275665e504b3f393530252b2a292a2b27313637444b55606a7a879da5b7b49f8b7a645645321d0d00000000000000000000000c171f3036434a5154606467696b6b6a6865625958514b4538352c20181d2a3a464c575d5f6060606060606055504433210d000000000000000000000b20354b6074879db2c8d9d1c1ad98826d5846331f0a00000000000000000000000000071a2d3d53687e93a9bacddacab49f8c78624d3727150200162b40566b8095abc0d5d7c2ad97826d58404c5e6a8095a1b3c3d3c4b5a398826d614f402f1e0e000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1800050b0f1a29394b60758a9fb4c9dec9b39e8975604b35200b000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190000000f24394e64798c9fb5bcab9d887a706c6d717b899eb3c0b39e8976614c6073849aa6b8bcb39e8978625645321d130100000000000000000000000000000003162839576d8297acc7d7ddc8b29d8873604a35200f00000000000000000000000000000000000b20364b6075899eb4c9ded5c4ab95806b56402b1600000012283d52677d92a7bcd2c0ab95806b56402b16010000000000000a1a2d3e4c5e697e939fabbaaea098877c70655d544e4a4336403f3e3f4138454b50556067737f8b9da6b7b59d927d675c4a38281600000000000000000000000e1c2a33414d5460666e74797d7e80807f7d7a77726d6660564d493c342b2a3b4758616c7375757575757575756b62503d281400000000000000000005192b3c51667c91a6b7b8b8c1b4a3907b65503a29170400000000000000000000000000000f21364c61768a9fb4bcc9b8bcab95806b5544311d0800162b40566b8095abc0d5d7c2ad97826d5842404a60728399a5b6c6d2c1b2a0947f695e4c3c2c1b0b0000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000b1d3245566f8499afc4d9ccb9a88e79634e39240e000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000005192b3c576c8297abbcb59f8d7a645c57575d657b90a2b4b9a7947f6a54556277889eabbcb9a79b8574604b41301f0f0000000000000000000000000000000012273d52677c92a9bacddfcbb7a6907b66503d2d19090000000000000000000000000000000b1b2f3f52687d92a8b9cde0cbb8a68f7a654f3a251000000012283d52677d92a7bcd2c0ab95806b56402b1601000000000000000f202f404f60697e8d9fa9b6b2a59d91857b726a636054575554545556585660656b747c86949fa9b7ab9f947f6a5f4d3e2e1a0a000000000000000000000e1e2c3a474c5f67737b83898e929495959492908c88827c756c635a4d483b3a4759617681888a8a8a8a8a8a8a8a806b55402b160000000000000000000b2035485a6f8499a3a3a3a3a3a39b8572604a35200c0000000000000000000000000000000a1f3346586c81969faba3a3a3a39d8874604b36200b00162b40566b8095abc0d5d7c2ad97826d58423043546176879ca8b9cdcfbeb49f8d7c665b493929180800000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d180300000002152838576d8297acc2d7d6c6a6907b66513b2611000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000b2035485a72879db2c9af9a846f5d4b3e3f4c5d70859aafc5b09a8570574859657b8d9fb4bfb5a397816c5f4d3d2c1b0b0000000000000000000000000000000c21364b61768a9fb4c9ded4c4af9a846f5b4a3727150100000000000000000000000000031628394c5d71869cb1c6d7dac9b39e8874604b35200b00000012283d52677d92a7bcd2c0ab95806b56402b16010000000000000001122232424f60697d8b9da5b1b7b2a29a90867f79746f6c6a69696a6b6e71757a8188919ca4b4b4a89e8d7f6a614f41312010000000000000000000000d1d2c3c4958616e7d8690999ea7a7a9abaaa9a8a5a59d98918981786d62594a4758617786979d9faa9f9f9f9f96806b62503d28140000000000000000000d22384d62788c8d8d8d8d8d8d8c8578625443301c070000000000000000000000000000000417293a4b6074828b8d8d8d8d8d8d8d7c67513c271200162b40566b8095abc0d5d7c2ad97826d58422536465863798a9eb4bccdcfbcab9e897963574636251300000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d180300000000162c41566b8196abc0d6d2bca7927d67523d2812000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1900000d22384d62788da5b7bea9937e69543f2e2f3f54697e93a9beb49f8a76614c4b5d6a7f95a1b3c1b19f927d675b493928160300000000000000000000000000000a1e3346576e8399aec1d2dcc7b3a28e79635544311d1304000000000000000000000005141e324657657b90a4b5c9e3cfbcab97826c5443301c0800000012283d52677d92a7bcd2c0ab95806b56402b1601000000000000000004142432424f5f677b87979fb0b4b4afa49c948e888581807f7e7f8083868a90969da6b1b6b3a29b8a7c69614f43322313020000000000000000000a1a2b3c495a637683919ca4aeb3b8c5bec0c0bfbdc3b7b2ada79e968b82776960586176869ca4b2b4bbbeb19f96816c62514433210d0000000000000000000c21364b6175797878787878787770625a4836251300000000000000000000000000000000000b1d324556606d767878787878787877614c37220c00162b40566b8095abc0d5d7c2ad97826d58422d293a4a5b677d919eb0c0d0c9b9a79c8675615443301c12010000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d180300000006192b3c586d8298adc2d7d2bda8927d68533d2813000000000000000000000000000000000000000e23384e63788da3b8cddfcab49f8a755f4a35200a000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19000010253a4f657a8fa4c3baa58f7a65503a25253a50657a8fa5babbaa8e78634e3f4a60728399a5b7bdb49e8a79635746321e1402000000000000000000000000000317293950657b8fa3b5c9ddd0c0b09b8573604b40311f170c0500000000000000050d181f32424b6175869cb1c2d2dac9b59f8c79634e3626140100000012283d52677d92a7bcd2c0ab95806b56402b160100000000000000000006142432414d5d647581909ba3b0b5b6b1a9a69e9a979594939496989b9faaabb3b7b2a69e938579665e4f433225150500000000000000000002152738485a63788798a0b1b6c2c8ccc8c1bcb9b9babcc0c5c5b9b3aa9f97897e726276859ba4b5c2cabeb2a0978172604a44342616040000000000000000000a1e334657616363636363636361594d483c2b1808000000000000000000000000000000000002152838454b576163636363636363615947341f0b00162b40566b8095abc0d5d7c2ad97826d58422d1c2d3d4d5f6b8096a2b4c3d4c5b6a4998372604a41301f0f0000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1802080b0e172035485a71869bb1c6dbd8c7a6917c67513c271200000000000000010a101212121212121212121223384e63788da3b8cddfcab49f8a755f4a3520121212121212121212110f0900000000162b40566b8095abc0d5d8c3ad98836e58432e19000011273c51667c91a6bbb8a38e79634e392423394e63788ea3b8c8a5907a65503b43546176879daabbb9a89c8675614b4231201000000000000000000000000000000b23374b5d71859bb0bfd0ddc9b5a395806b5e4e41332a2018110f0d0d0d0f1119202a34424f606d8197a4b6cae3cfbcab99836e5b493618080000000012283d52677d92a7bcd2c0ab95806b56402b160100000000000000000000061423303f4b57616d7b85909ba3aab2b7b8b3afacaaa9a9aaabadb1b4b9b3ada59d94887e73635b4d403225150700000000000000000000091d3145566278879da5b2bec9cfc5b8b3aca6a4a3a5a7aab0b4bbc8bbb4a89e938478859ba3b5c2d0bfb2a0988272605443302616080000000000000000000003172939464b4e4e4e4e4e4e4e4c473a352b1e0e000000000000000000000000000000000000000a1a283239464b4e4e4e4e4e4e4e4c473b2a180400162b40566b8095abc0d5d7c2ad97826d58422d181f30414b6073849aa5b7c7d3c2b3a195806b5f4d3d2d1c0c00000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1e151d20232933424d62788da3b5c9ddcebaa98e79644f39240f00000000000005121d252727272727272727272727384e63788da3b8cddfcab49f8a755f4a352727272727272727272726231c11030000162b40566b8095abc0d5d8c3ad98836e58432e19000012273d52677c92a7bcb8a38d78634e382323384d63788da2b8bba6917b66513c364758647a8b9fb4bfb6a498826d604e3e2d1c0c00000000000000000000000000081c2e3f50657b90a1b3c5d6d1c1b49f8d7d68604c473a342b272422222224272b343b474c60697e929fb1c2d3d4c4b59f8d7a644f3d2c1a000000000012283d52677d92a7bcd2c0ab95806b56402b160100000000000000000000000512202e39464b5d65707c858e959da5a7abafb1b2b3b4b3b2afada9a79e9891877f75696054493d302214070000000000000000000006192c3c4b6074869ca5b7c3cfc9bcb4a79e97918f8e9091959b9faab3b8c5b9b3a1998a9ba3b4c1d0bfb3a1988273605443362513080000000000000000000000000b1b2933363838383838383837342a20190e0000000000000000000000000000000000000000000a151d2932363838383838383837342a1d0c0000162b40566b8095abc0d5d7c2ad97826d58422d18131d3144556176879da9bacdd0bfaf9e917d675b4a3a2a1909000000000000000000162b40566b8095abc0d5d7c2ad97826d58423333273136383a474c616d8298adc1d2dfc9b49f8a76604b36210b000000000001122330393c3c3c3c3c3c3c3c3c3c3c3c4e63788da3b8cddfcab49f8a755f4a3c3c3c3c3c3c3c3c3c3c3c3b382f22110000162b40566b8095abc0d5d8c3ad98836e58432e19000011263b50667b90a5c8b9a48e79644f392424394e64798ea3b9c6a48f7a644f3a2a3a4b5c697e93a0b2c2b2a0937e685c4a3a291704000000000000000000000000001123384c5d6f8399a7b8cce0cfbcab9f8c7d6d61584c483b3c39383738393c3c484d59626e7e8d9fb5bdced8c8b7a697816c5c4b371f0f000000000012283d52677d92a7bcd2c0ab95806b56402b160100000000000000000000000002101b29323f4b505e66707980878d91969a9b9d9e9f9e9d9a97938f89827c746a61574b43362c1f120400000000000000000000000c2035495a6a7f95a4b5c3d4c8bbab9f9589817c79797a7c80858b959ea7b5bcbfb3ab9fabb4c1d1c0b3a19983736055443626180800000000000000000000000000000b171e2123232323232323221f180c050000000000000000000000000000000000000000000000020b161e2123232323232323221f180c000000162b40566b8095abc0d5d7c2ad97826d58422d18011426374758647a8b9fb4bdceccbcb49e8a79635847372715010000000000000000162b40566b8095abc0d5d7c2ad97826d5848484837444b4e5258616d7f93a0b2c6dfd5c4af9a856f5645321e0900000000000a1d30414d5252525252525252525252525263788da3b8cddfcab49f8a755f525252525252525252525252504c402f1c0900162b40566b8095abc0d5d8c3ad98836e58432e1900000f24394f64798eaabbbba6917c66513625263751667b91a6bbb9a88d78634e38232e3e4f616e8398a5b6beb49f8b7a645846331f1403000000000000000000000000091c2f3f4d6278899eb3bcccd9c9bbaa9f9282766a625955514e4d4c4d4e51555a626b7782939fabbccfe2cebbaa9d8876614c3e2e1b01000000000012283d52677d92a7bcd2c0ab95806b56402b160100000000000000000000000000000b161e2f37404c515b636b72787c818486888989898785827e79756d6660554b46393026180e000000000000000000000000011426364d63788b9fb4c2d2cebbaa9f8d80766c67646465676b70777f89969fabbbc8bcb4bcc9d1c0b4a29983746055443726180800000000000000000000000000000000030a0c0e0e0e0e0e0e0e0c0a04000000000000000000000000000000000000000000000000000000030a0c0e0e0e0e0e0e0e0c0b0400000000162b40566b8095abc0d5d7c2ad97826d58422d180009192a3a4a5c687d929fb1c1d1cdb9a89d8776615544311d130200000000000000162b40566b8095abc0d5d7c2ad97826d5e5e5e5e5e556063676d7682939daebecfe0cbb7a6927d68533828160300000000001025394d5f6767676767676767676767676767788da3b8cddfcab49f8a7567676767676767676767676767665e4c38230f00162b40566b8095abc0d5d8c3ad98836e58432e1900000c21364b61768a9fb4c0aa95806b5443323244556b8095aac0b49e8975604b36202032424c6176879ca9babaa99d8776614c43322110000000000000000000000000001120344859677d919eafbdcdd8c8bbb4a097898077706a666462626264666b7078808998a0b5bcc9dacfbcb49f8c7b65584633201000000000000012283d52677d92a7bcd2c0ab95806b56402b160100000000000000000000000000000003111c232f383d494e555a62676b6f717274747372706d69646055514b443732291c140800000000000000000000000000081c3043546c8196a9bacdd3c3b49f8c7c6b6157514f4e50525558616a75808d9faabbcecacfd4c3b4a29a8474605645372719090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1803000c1c2d3e4e606c8197a3b4c4d5c6b6a59a8473604b4131201000000000000000162b40566b8095abc0d5d7c2ad97827373737373737475787c828a979faebbcbe3cfbeb39d8875604b36210b00000000000012273c52677c7c7c7c7c7c7c7c7c7c7c7c7c7c7f94a9bed3dfcab49f8c7d7c7c7c7c7c7c7c7c7c7c7c7c7c7b66503b261100162b40566b8095abc0d5d8c3ad98836e58432e1900000a1e33465770859bb0c6b29c8773604b45464b6074879db2c5af99846f5544311d141e334657647a8b9fb4beb6a599836e614f3f2e1c0c00000000000000000000000005192b3b4d5f6a80959fb0bccdd7cebeb1a79e958b85807c79777777797c80858c959ea8b2becfd7c9bcb59e927e685d4b3a29170200000000000012283d52677d92a7bcd2c0ab95806b56402b1601000000000000000000000000000000000008121d242c35393c494d52565a5c5d5e5f5e5d5a58544f4b44373531261e160b0100000000000000000000000000000b20354b6074889eb3c7d7cab6a5947f695e4b46393a393b3c3a474c57616b7b8b9fb4cadfdfcab7a59b8475615645382819090000000000000000000000000000000000000000000000000000050b0d10131516161514120f0b090200000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000102031414b6074859ba6b7c8d4c3b4a296816c604e3e2e1d0d000000000000162b40566b8095abc0d5dec9b49f8b888888888888898b8d91989fa8b1bdcbd9cfbfb2a0927d675645321e0900000000000020354a5f758a91919191919191919191919191949daec2d6e3cfbcab9f919191919191919191919191919186715c46311c00162b40566b8095abc0d5d8c3ad98836e58432e19000003172939556a7f94a8b9b6a4937e69605657616a7f94a5b7b8a7937e6853372715031729394a5c687e92a0b1c2b3a1947f695d4b3a2a18080000000000000000000000000d1d304150616c81969eb4bac7d2cec5b8b3ab9f9a95918e8d8c8d8e91959b9fabb3b9c6cfd1c6b9ab9f94806b604e3f2f1b0b0000000000000012283d52677d92a7bcd2c0ab95806b56402b160100000000000000000000000000000000000000090f1a21232b35383c41454648494a494845423e3a363127201d140903000000000000000000000000000000000f24394e64798ea7b8ccdcc7b29c8774604b403229242425272a33435460728298aabbcee2ddc7b29d877661574638281a0a000000000000000000000000000000000000000000000002090b1119202226282a2b2b2a292724201d150d0b0500000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1803000002131d3145566277889daabbced1c0b09f927d685c4b3b2b1a0a0000000000162b40566b8095abc0d5e1cdbaa99f9d9d9d9d9d9e9fa9a3a7adb4bac6ced1c9bcb4a198826d5f4d3828160200000000000020354a5f758a9fa7a7a7a7a7a7a7a7a7a7a7a7a9aebbcbdeebd9c9bcb4a7a7a7a7a7a7a7a7a7a7a7a7a79b85715c46311c00162b40566b8095abc0d5d8c3ad98836e58432e190000000c21374c61768a9eb4c1b49f8c7e75717176808d9fb5c0b39e8875604b36210b000b1b2d3d4e606d8297a4b5bfb49f8c7b655947362614010000000000000000000000001223334352636c80939fa9b5c2ccd5ccc9bcb4afaaa6a3a2a1a2a3a6aab0b5bcc9ccd4cac0b4a89e8d7f6b625042312111000000000000000012283d52677d92a7bcd2c0ab95806b56402b1601000000000000000000000000000000000000000000060c0e192023272c2f313334343432302d2924201d150b080100000000000000000000000000000000000012283d52677d92a7c5d5d4bfaa947f6a5544311e160f0f162634444a60728197a0b2c8d8dedfcab49f8c7a645443301c0a00000000000000000000000000000000000000000000030a151d20262b34373b3e3f4041403f3c393631272220190e080000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1803000000021527384859657b8b9fb4bececdbdb49f8b7a6459483828150200000000162b40566b8095abc0d5e9d7c7bab4b3b3b3b3b3b3b4bac7bcc2c9cdccc9c0b4ab9f958374604b41301a0a0000000000000020354a5f758a9fb4bcbcbcbcbcbcbcbcbcbcbcbec2cbd9e2e2e7d9cfcabcbcbcbcbcbcbcbcbcbcbcbcb19b86715c46311c00162b40566b8095abc0d5d8c3ad98836e58432e190000000a1f3347586b8095a3b5bbaa9f948986868a959fabbcb3a2947f695745321e0900000f1f31424b6075869ca8b9bbaa9d8877615443301c11000000000000000000000000041525354552626b7e8b9ca4b3b8c5cad4cfcac5bfbbb9b7b7b7b9bbc0c5cacfd3cac3b7b2a29a8a7d6961504433241303000000000000000012283d52677d92a7bcd2c0ab95806b56402b1601000000000000000000000000000000000000000000000000060b0d12161a1c1d1f1f1e1d1b18140f0b0802000000000000000000000000000000000000000000152a3f546a7f94a9bfd4cfb9a48f7a644f37271503071525334451626c81979fb1becfccc8cccfbcab9b8672604a3625130000000000000000000000000000000000000000000b171e2731363b3b484d50535555565554514f4b453838352b221b1005000000000000000000000000000000000000000000000000000000162b40566b8095abc0cdcdc2ad97826d58422d1803000000000a1a2b3b4b5d697e93a0b2c0cccdbaa99d8877625645321d1402000000162b40566b8095abc0cdcdcdd7cdc9c8c8c8c8c8c8c9cdcdc9c6c3c6b9b3ada29b8c8073605645312313000000000000000020354a5f758a9fb4cacdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdc6b19b86715c46311c00162b40566b8095abc0cdcdc3ad98836e58432e1900000004172a3a4b6074859ba4b3bbb4a89f9b9c9fa9b5bcb2a39a8472604b39281603000001131e32455663798a9eb4bdb7a69a8472604b402f1d0d00000000000000000000000007172735445160687a86939ea7b2b7c3c6cad3d3d1ceccccccced1d9cecac6c2b6b1a59d938478675f4f433326150600000000000000000012283d52677d92a7bccdc0ab95806b56402b160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5ccb7a28c77624d37220d061525334350626b80969fb1bdcec5b8b3b8c5c9b5a3927d675443301c0700000000000000000000000000000000000004131b293338454b5158596265686a6b6b6a6967646056544d483c372e20180d0000000000000000000000000000000000000000000000000000162b40566b8095abb8b8b8b8ad97826d58422d180300000000000d1d2e3f4f606d8298a2b3b9c6c7b7a69b8574604b42321f0c000000162b40566b8095abb8b8b8b8b8b8b8b8b8b8b8b8b8b7c6b9b4b1aeaaa89e988f857a6b60554538271505000000000000000020354a5f758a9fb4b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b19b86715c46311c00162b40566b8095abb8b8b8b8ad98836e58432e19000000000c1d3145566278869aa2b0b5bab4b1b1b4bab5afa0988576615443301b0a0000000003162838495b677d919fb4bbb3a295806a5e4c3b2b190500000000000000000000000009172634424e5c64737e89939da5acb1b6c2bdc0c2c3c3c2c1c0c8bbb4b1aaa49c92877e72625a4d41322515070000000000000000000012283d52677d92a7b8b8b8ab95806b56402b1601000000050e151720202020202020201b0d0b0500000000000000000000000000000000000000080e101d20202020202020201f0e0c060000000000000000000014293e54697e93a9bed3cbb6a18b76614c36210c1424324350616b80959eb0bdcec5b8a79ea7b3c0c1b19c8673604a35200c00000000000000000000000000000000000c171f3139464c5660666d73777b7d7f80807f7e7c79757069625a4f4b3e342b1d1204000000000000000000000000000000000000000000000000162b40566b8095a3a3a3a3a3a397826d58422d1803000000000000102132424b607484969ea8a3a3a3a3a397826d604f3b2712000000162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a2a1a89e9c99959089827a70645c4b4437271a0a00000000000000000020354a5f758c9fa3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39b86715c46311c00162b40566b8095a3a3a3a3a3a398836e58432e190000000002152738485a627684919ba3a8abadadabab9f9a8f82756158473626140000000000000a1a2c3d4d5f6c81969faaa3a39f8d7c66594834200b00000000000000000000000000081624313e4a556069757e878f969ca4a5a8abacadaeadacaaa8aa9f9b958e867d74686054493c30231406000000000000000000000012283d52677d92a3a3a3a3a395806b56402b16010000081622292c3535353535353535312220190e0000000000000000000000000000000003101b2225323535353535353535342320190e00000000000000000012273c52677c91a7c3d4cdb8a28d78634d3823142432424f616a7f959eb0bccdc5b8a79e889aa2b3c7b6a4907b66503a2917040000000000000000000000000000000d1c2933414d57616a757b82888c90939495969594918e8a857f786e645c4d483b2f2214060000000000000000000000000000000000000000000000162b40566b808d8d8d8d8d8d8d8d826d58422d180300000000000003141e324556617581898c8d8d8d8d8d8d8d7e69543e2914000000162b40566b808d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c8b8987837f7a756d655d4f4b3e3126190a0000000000000000000020354a5f758c8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d86715c46311c00162b40566b808d8d8d8d8d8d8d8d836e58432e1900000000000a1a2b3c4858616f7c868d9396989795928b857b6e6057473a2a1808000000000000000e1f30414b6072808a8d8d8d8d8d8877624d37220d00000000000000000000000000000614202d37444b576169737a81878c909396979899989695938f8a868079716860554a43362c1e130500000000000000000000000012283d52677d8d8d8d8d8d8d8d806b56402b160100051626343e414a4a4a4a4a4a4a4a4638352b1e0e00000000000000000000000000000010212e373a474a4a4a4a4a4a4a4a4a38352c1e0e00000000000000000e23384d63788da5b6cad1bca6917c67513b2a2331424f606a7f949eafbccdc6b9a79e8978849aafc3c2ae99836e5847331f0a00000000000000000000000000000d1d2b3a464c5f67767f8890989da6a5a8aaaaabaaa9a6a99f9a948c837a6e62594c4032241406000000000000000000000000000000000000000000000c22374c6177787878787878787877624c37220d0000000000000000021628384657616c75777878787878787878634d38230e0000000c22374c617778787878787878787878787878787878777674716e6a6560564f4b3f372e1d140900000000000000000000000e23384e63797878787878787878787878787878787878787878787878787878787878787878787878787878624d38230d000c22374c6177787878787878787877624d37220d0000000000000d1d2b3a474c5e6671787e808282807d7770655d4b45392a1c0c000000000000000000121c304354606b7678787878787976614c37210c000000000000000000000000000000010f19263139464b5460656c71777b7e808283848281807d7976716a635b534b44373025180e00000000000000000000000000000c21364c61757878787878787877614c37220c00000e2234445156606060606060605f5b4d483c2b1b0a000000000000000000000000000d1d2e3f4b4f5c60606060606060605f4d493c2c1906000000000000000c2035495a72879db2c7d7c2ad97826d59473431414e60697e939daebcccc7b9a89e897a657b90a5b7c9b49f8a76614c37210c000000000000000000000000000d1d2b3b4858616e7d88949da6adb2b7c4bdbfc0c0bfbec7bab4b0ab9f998f8377665e4f42322414040000000000000000000000000000000000000000000a1f34475961636363636363636362594834200b0000000000000000000a1a2939464b55606263636363636363635a4935200c0000000a1f34475961636363636363636363636363636363626260565c5955504b4538372e221b10010000000000000000000000000c2135495b6363636363636363636363636363636363636363636363636363636363636363636363636363625a4835200b000a1f34475961636363636363636362594834200b000000000000000d1c2933404c515a62686b6d6d6b686259504b3f32281b0c0000000000000000000001142636434b5761636363636363615847331f0a000000000000000000000000000000000009141d283236434a4f57586165686b6d6e6e6d6c6b68646056554e4a3d3631271c13080000000000000000000000000000000a1e3346576163636363636363615947341f0a000015293e51636c757575757575757570625a4839281603000000000000000000000005192b3b4b5d6572757575757575757574635a4935200c0000000000000006192c3c556a7f95a9bacdc9b49f8a77614c41414e60687e939daebbccc7baa99e8a7a646073879db2c7baa9927d67523d28120000000000000000000000000a1a2a3b4859627683929da6b3b7c4c8cbd4d2d4d3d2d4d3d7cdc9c9bcb5aea098897c69604f4332221200000000000000000000000000000000000000000004182a3a474c4e4e4e4e4e4e4e4e4c483b2b1805000000000000000000000b1b293237444b4d4e4e4e4e4e4e4e4d493c2c190600000004182a3a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d4c4b453844403b363228221b10070000000000000000000000000000061a2c3d494e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d483c2b19060004182a3a474c4e4e4e4e4e4e4e4e4d483b2b180500000000000000000c171f2f383c484d5356585856524c483b372e1e160a0000000000000000000000000818263039464b4d4e4e4e4e4e4c473a2a1704000000000000000000000000000000000000010b161e2530353a3a474c505356575859585755534f4b453839362d201d1509000000000000000000000000000000000003172939464c4e4e4e4e4e4e4e4c473a2a18040000172c41566c818a8a8a8a8a8a8a8a8578625745321e0f00000000000000000000000a20344859657b878a8a8a8a8a8a8a8a8a78634d38230e00000000000000000e22374c61778a9fb4c2cdbaa997826d5f4e4d5f687e8d9fb5bbcbc8baa99f8b7b655c546b8196abc7c7ad98826d583a2a17040000000000000000000002152838475962778699a1b3b7c4cbd5d6ccc9c3c0bebdbfc1c6c9d2dacfcabeb2a79e8d7e69614f40301d0d0000000000000000000000000000000000000000000c1c2a3437383838383838383837342b1d0d0000000000000000000000000b161e273135373838383838383838352c1e0e00000000000c1c2a343738383838383838383838383838383838373632282e2a25201d150a0800000000000000000000000000000000000f1f2c35383838383838383838383838383838383838383838383838383838383838383838383838383838352b1e0e0000000c1c2a3437383838383838383837342b1d0d0000000000000000000004121d242b35383e414342403d37342a231c1103000000000000000000000000000008141c29333638383838383837332a1c0c0000000000000000000000000000000000000000000308131c20252a33373b3e414243444341403e3a36322824211a0f0802000000000000000000000000000000000000000b1b2933363838383838383837342a1c0c0000000c21364b6175879d9f9f9f9fab9f9b8675604b3d2d18080000000000000000000a1a2f404d6278899c9fab9f9f9f9fa4947f6a5a4935200c00000000000000000a1f3347586a7f94a3b5c4c7b19f927d685f5f677d8d9fabbccfc8bbaa9f8b7c655d4b50657a8fa9bac7b29d87725847331f0a00000000000000000000091d3245566277879ca4b2bfcbd5d2c9c5b9b3aeaba9a8aaacb1b5c1c9cdd7cfc5b8ab9f937f695e4d3c2b19050000000000000000000000000000000000000000000c181f2223232323232323232220180d00000000000000000000000000000309151d2022232323232323232320190e000000000000000c181f222323232323232323232323232323232322211e161915100b090200000000000000000000000000000000000000010f1a2123232323232323232323232323232323232323232323232323232323232323232323232323232320190e00000000000c181f2223232323232323232220180d00000000000000000000000000090e192023292b2d2d2b28221f180d080000000000000000000000000000000000010b171e21232323232323211f170c00000000000000000000000000000000000000000000000000070b10181f2226292b2d2e2f2d2c2b2824211e160e0c0700000000000000000000000000000000000000000000000b171e2123232323232323221f180c00000000091e324657667b90a0b2c4b5bcb4a496806b5b4a3626140100000000000000021528384c5e6e8399a7b5bcb5b5bcab9c8673604b3c2c1906000000000000000004182a3a4b6074859ba6b8c5beb49f8c7d6c677d8c9fabbcc9c9bbaa9f8c7c665e4c3f4b60758a9fb4c9b7a58c77614c37210c000000000000000000071b2e3e4b6074859ba5b6c2cfd9cec1b5b1a79e9895939394969ba3abb4bac7d1d5c9bcb59f8d7c665a4834201100000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0d0b05000000000000000000000000000000000001080b0d0e0e0e0e0e0e0e0e0c06000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0d0b0903000000000000000000000000000000000000000000000000000000060c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0b0600000000000000040a0c0e0e0e0e0e0e0e0e0d0b0500000000000000000000000000000000060b0d1316181816130d0b05000000000000000000000000000000000000000000030a0c0e0e0e0e0e0e0c0a040000000000000000000000000000000000000000000000000000000000040a0c101316181919181716130f0b0903000000000000000000000000000000000000000000000000000000030a0c0e0e0e0e0e0e0e0c0a040000000000031628394c5e6d8298a6b8cbcfc2b49f8c79635443301c0d00000000000000091d324556667b90a1b2c5cfd4c4b49f8c7a645544311e0e000000000000000000000c1d3144556278889da7b6c3bbaa9f8d817c8c9faabbc9cfbcab9f8c7d675e4c4032455670859bb0c5c3a58f7a65503a25100000000000000000000d22374b5c6c8196a3b5c3d3d7c8bbb4a39b908983807e7d7f81868c959fa9b5c1d0dacfbcab9e8978624d3f2f1c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2f404c6176889eb3bfd0cebbaa9b8573604b3b2b1805000000000005192b3c4b6074879cb2bfcfdfcbb7a696816c5c4a372715000000000000000000000002152737485a647a899ca5b1bdbbab9f96919faabbc8cbbbb59f8d7d675f4d402f2838586d8298adc2bda7927d68523d28130000000000000000081c2e3f4f647a8d9fb5c1d2d7c7baaa9f93857b746e6b69686a6c7177808b9ba3b3bfd0dac9b9a799836f5d4b37230f000000000000000000000000000000070d0f1214161514100c0a03000000000000090b0b0b0b0b0000000000000000000b141b1d2020202020202016140e040000000000000000000000000000000000000000000000070b0f1314100b08010000000000000000000000000000000000000000000000000000000000000000000000040a0c160c0a04000000000000010a10121d1d1d1d1d1d1a0f0d07000000000000000000000000090f111b1d1d1d1d1d1a0b0700000000000000000000000000000000000000000000000000000000000000000000000000050b0d101214151616151412100c0a0400000000000000000000000000000000000000000000000000000000000000000000000000070b0d1013151616151413100d0b07000000000000000000000000000000000000000000000000000000000001080b1014140f0b0700000000000000000000000000000000000000111f334758677d91a1b3c6d6c8b4a3937e69594834201200000000000a2035485a6a7f94a4b6caddcfbfb29d8775614b3e2e190900000000000000000000000009192b3c4a5c647987979fb0b5bcb5aba6b4bbc8ccbbae9d937e685f4d4130222a40556a7f95aab0b0aa947f6a553f2a1500000000000000000e23374b5d70859babbccfe2cdbaa99f8c7e72666055565453555759626b788599a1b3c3d4d6c5b3a1907b65503d2c1a060000000000000000000000040a0f1a212428292b2b2925211e160b08010b10131e20202020200f0d0700000000000e1c282f32353535353535352c29211608000000000000000000000000000000000000000008131c2025292925201d14090000000000000000000000000000000000000000000000000000000000000000030c181f222c221f180c0000000005131e25273232323232322f24221b1002000000000000000003111c23263032323232322f201c130800000000000000000000000000000000000000000000000000000000000000060c0e141920222528292a2b2b2a292725221f18140d0b050000000000000000000000000000000000000000000000000000000000040a0c131c202326282a2b2b2b2a282522201c130c0b0400000000000000000000000000000000000000000000000008141c2025292925201c1308000000000000000000000000000000000004172a3a4d5f6e8399a8b9ccd1c1b39e8977624d402f1b0b0000000a1a2f404d62788a9fb4c3d3d6c5b2a0917c66574633201000000000000000000000000000000e1e2d3e4a5b637682909ba3b4c0c1bcc9ceccbcaf9d937e69604e41302312263b50667b909a9a9a9a96806b56412b16010000000000000317293950657b8fa2b4c9dad1c0b49f8b7c6960544b44373e3e3f3b484d5a62758399a5b7cadfd0bfaf9a846f5b4936210c000000000000000000000c171f212d36393d3f40403e3b363229231c131e252833353535353524221b100200000b1c2c3a44474a4a4a4a4a4a4a413d342616040000000000000000000000000000000000010f182530353a3e3e3a35312619100200000000000000000000000000000000000000000000000000000000030b171e2a33374137332a1c0c000001132330393d4747474747474539362d2010000000000000000011222f383b464747474747443530251808000000000000000000000000000000000000000000000000000000030a0e1920232a2b34373a3d3f404040403f3d3a37332a292220190e0902000000000000000000000000000000000000000000000000070c171f21253035383b3e3f4041403f3d3b38353025221f180c0700000000000000000000000000000000000000000210182630353a3e3e3a353025180f01000000000000000000000000000000000c1c30414d6278899eb3c0d1ccb9a898836e5e4c3928160300021628384c5e6e8399a9bacde0ccb9a798836e5e4c3929170200000000000000000000000000000010202d3c4957616d7b859aa2b4c8d1dfcdbcaf9e947f6a604f423123130f23384c5e6a8085858585857f69543e2914000000000000000a1e3346576e8399aec0d1dcc8b4a2937e695e4a4336312729282a2b343c48576176879db2c1d1dcc7b4a28e79634e39230e000000000000000005131c2933373d4a4e5254565553504b4639372f20313a3d494a4a4a4a4a39362d2010000014283a4b575d6060606060606056514434210e00000000000000000000000000000000000f1f2c36434a4f5353504b44372d20100100000000000000000000000000000000000000000000000000020a161e29333a474c564c473a2a1804000a1e30414d525c5c5c5c5c5c5a4f4a3e2d1b0b0000000000000e1e2f404c505b5c5c5c5c5c5a4a4336251300000000000000000000000000000000000000000000000000030b161e212c35383f3b484d4f5254555656555452504c473a3e38352b201d150a01000000000000000000000000000000000000000006101b222a333736434a4d5053545556555453504d4a433637342a221b100500000000000000000000000000000000000110202d36434b5053534f4a43362c1f0f00000000000000000000000000000000001320344859687e93a2b4c7d6c6b2a0907c665746321e1000091e324556667c90a1b3c7d7d1c0b39e8977624c402f1b0b0000000000000000000000000000000002101e2c39464c5d6573859ab0c5dacebdb09e95806a614f4232241405091c2f4050616a707070707069614f3b2712000000000000000c21364b61768a9fb4c9dfd3c2af9a8472604a4030251d1514131518202b394658657b90a3b4c8ddd0c0aa95806a553a291704000000000000071523313a474c565c6467696b6a69656157504b3f34414e525e60606060604f4a3e2d1b07001b2f44576972757575757575756b62513d2914000000000000000000000000000000000d1d2c3d4954606468696560554a3e2d1f0f00000000000000000000000000000000000000000000000109151d283239464c58616b615847331f0a001025394d5f677272727272726f645c4a392917030000000006192c3c4c5e667072727272726f605443301c0700000000000000000000000000000000000000000000000b171e2932363c494d545959626567696a6b6b6a696765615859534d483c3631271d15090000000000000000000000000000000000000e19202d363a474c5354606265686a6b6b6a696865626054534c473b362e20190e000000000000000000000000000000000f1f2d3e4a5460656969646054493d2c1e0e0000000000000000000000000000000005192b3b4a6072849aa9bacdcfbfb29d8775614b3e2d1808192c3c4b6075879cb2bfcfd8c7b4a2937e685948342212000000000000000000000000000000000000000e1b29334556667c91a2b4c8cfbfb19f96806b6250433224140600001122334350555a5b5b5b5b544f42321f0c0000000000000012273c52677c91a9bacddecab6a4907b655443301c130801000000050d1b293a4b5d70859bb0c9dadbc6b19b86715846331f0a000000000006152533414d58616b72797d7e80807e7b766f655d4d484e5f68737575757575705c4a36220d001d32475d72878a8a8a8a8a8a8a806b56412c1601000000000000000000000000000005192b3b495b63727a7e7e7a73645c4a3d2d1a0700000000000000000000000000000000000000000009141d273138454b57616a778176614c37220c0012273d52677d868787878787847a645746331e0a000000000c2135495b667c8587878787878372604a35200b00000000000000000000000000000000000000000005131b293339464b545a63696e73777a7d7e7f80807f7e7c7a77736e69625a524b45383127191103000000000000000000000000000008131c2c353e4a4f5861686e74787b7d7f8080807f7d7a78746e6961594f4a3e352b1e130100000000000000000000000000061a2c3d4a5c64737a7e7e7a72635b493c2b1906000000000000000000000000000000000d1c30435463798b9fb4c1d2cab7a596806b5c4a3626142035495a6a7f95a5b6cae2cebaa99a8572604a3b2b180400000000000000000000000000000000000000000b20364b6074879db2c0d1c2b2a197816c62514433251506000000031525333c4045454545453e3b3224140200000000000002172c41576c8196acc7d7dcc7b19c87725e4c36251300000000000000000b1b2e3f52677c91abbccfdfcab49f8b76614c36210c000000000014243343505f677680878e9294959593908a847b6e625956687d888a8a8a8a8a7a644f39240f001d32475d72879c9f9f9f9f9f96816b56412c160100000000000000000000000000000b203448596379858f93938f867a645b4a36210c0000000000000000000000000000000000000008131c263137444b5660697680898c77624c37220d000b21364b6075889c9c9c9c9c9a8876614c382815020000061a2c3d4d63798a9b9c9c9c9c927d675443301c0700000000000000000000000000000000000000000d181f3139464c57616971787f84888c8f92949595959594928f8c88837e78706860564b44372f2117090000000000000000000000000c1825303c494d5c646e767e83888d9093949596959492908d89837e776e645c4d483c311d14090000000000000000000000000c2135495b647a868f93938f8579635a4835200a0000000000000000000000000000000000132536495b6a7f94a3b5c8d4c3b49f8c7a645443301c2f404d62788a9fb4c3d3d3c2b49f8b79635443301d0d0000000000000000000000000000000000000000071b2e3e53697e93a5b6cac9b6a4998372604b44342515070000000000071521282b303030303029271f140600000000000000031628395b70859bb0c5dad6c1ab96816c56402f18080000000000000000001121374c61778b9fb5cadfcfbcab907a65503b2510000000000e1e314250616a7d89969da5a7a9abaaa8a99f999083776760758a9ea69f9f9f8e79644f39240f001d32475d72879cb2b5b5b5ab96816b56412c160100000000000000000000000000000d22374d6278899ba3a8a8a49c8a79634e3a2a180400000000000000000000000000000000081118253037444b556069757f89959e8c77624c37220d00091e324557697e93a5b1b1b1a6947f695645321d0800000c2135495b6d8298a8b1b1b19c8673604b36251300000000000000000000000000000000000000010f1d2a34424e57616b767e868d94999ea6a4a7a9aaababaaa9a7a5a69d99938c857d746960554b3f34271705000000000000000000000d1c2936434a5a636f7a838a93999ea7a5a8a9aaabaaa9a8a5a79e99938b837a6e625a4e423126190900000000000000000000031628394e63798a9ca4a8a8a39b8978624d382815020000000000000000000000000000000008182c3d4b6073859baabbcecebbaa9b8573604b3b2b384c5e6f8399a9bacddac9b6a495806a5b493625130000000000000000000000000000000000000000000d22364a5c72879cb2c3cfbcab9c86756154433026160700000000000000040d13151b1b1b1b1b14120c020000000000000000091e32455773889eb3c8ddd1bca6917c67513c2712000000000000000000000a1f33475871879cb1c6dcd9c9a8937d68533e281300000006192b3c4e606a7f929ea7b2b7c3bec0bfc7bab4aea199897d697a8fa8b8c5b5a48e79644f39240f001d32475d72879cb2c7cac0ab96816b56412c16010000000000000000000000000003172939586d8297a7b5c1c2b6a89a846f5847331f0a000000000000000000000000000007111c232f36434a556068747e88949ea7a18c77624c37220d00031628394b6074879db2c2c5b39d8875604b3626140106192c3c4e63798c9fb4c6b4a2917c66544330180800000000000000000000000000000000000003111f2d3b474c6068768089939ba3a9aeb3b8c5bcbebfc0c0bfbebcc4b7b3aeab9f9b92887e74655d524534220f0000000000000000000d1d2a3a4754606a78838e989fa9aeb3b8c5bdbfc0c0bfbebdc5b8b3aeaa9f998f837868604b4437261909000000000000000000091e3245576e8399a8b6c2c1b5a798836e5645321d0900000000000000000000000000000000000e1d314455647a8c9fb4c3d3c8b5a3937e695948344556667c91a1b3c7d7cfbcab9c8674604b3d2c18080000000000000000000000000000000000000000000f243a4f647a8fa5b6cacab59f8d7a6457463626140800070d0f120f0b080100000005060606060000000000000000000000000b21364b60768ba7b8cce0ceb8a38e79634e39240e0000000000000000000004172a3a596e8398aec3d8d5c0aa95806b55402b160000000b2035485a687e939db3b8c5caccc9bfb9b6b6b8bfb2a89e8d7f7f94a9c6d5b9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000a1e33465774899eb3c5d2d3c6b59f8b77614c37220c00000000000000000000000006101b222e37404c546067737d87939da6b3b8a18c77624c37220d00000a1d314556687d92a4b6cab7a6937e685443301c080c2035495a6d8298aabbbfb09b85705e4c3626140000000000000000000000000000000000000211212f3d4a59626f7d88959ea7b1b5c2c3c8cbcdc9c7c5c5c5c6c8ccd5cbc8c9bcb5b0a69d93867b6c63523e2a1500000000000000000c1c2a3b475861727f8b99a1aeb4bac7c8ccd5d2d2d0cfcfcfd1d5ccc8c8bbb4aea1998a7d6c6055443726140100000000000000000b21364b60768a9fb4c6d3d2c5b49f8a75604b36200b0000000000000000000000000000000000011527374a5c6b8096a5b6c9d2c1b49e8a78624d404b6075879db2bfd0d5c4b59f8d7b655645321f0f00000000000000000000000000000000000000000000152a3f546a7f94a9c3d3c9ad98826d5c4a3928180802101b22242824201d15120b0700000000000000000000000000000000000d22374c62778ca1c5d5e7ccb7a28c77624d37220d0000000000000000000000182d42576d8297acc2d7d6c1ac96816c57412c17000004182a3b4d62788a9eb4bbccd3c5b9b3aaa3a1a1a3a7afb4ab9f94899eb3c8ceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000c21364b61768ba7b9cce2e3cfbcab8e79644e39240f00000000000000000000060f1a212d363f4b4f5e66727c86929da5b3b7c4bcab8c77624c37220d0000021527384b6073869cb1c2c4b29c8773604b352011192b3c4d63788c9fb4c8b3a18f7b6550402f180800000000000000000000000000000000000010202f3f4b5c647783929ea6b3b9c5c9cec9c4c7bab4b2b0afb0b1b3b8c5c2c8cccfcac4b7b2a49c8d816c57412c17000000000000000a1a2a3a4759627683949fa9b3bfc9ced8d3cac7c1bdbab9b9babcbec3c8cbcec9bfb3a89e928173605544311d0a00000000000000000d23384d62788daabbcee4e2cdbaa98d77624d38220d00000000000000000000000000000000000009192d3e4b6075879cabbccfccb9a899836e5e4c5a6b8095a5b7cae0cbb8a697826d5d4b38281501000000000000000000000000000000000000000000051a2f445a6f8499afc4cfbcab8f7a65503e2e1b0b0210202d36393d3935312727201c13080000000000000000000000000000000d23384d62788da2b7cde0cbb5a08b76604b36210b0000000000000000000001162b41566b8096abc0d5d7c2ac97826d57422d1800000b1f3447596d8298a8b9cdd3c3b6a79e958e8b8b8e929a9fabb5a79ea7b8ccceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000b20354b60748a9fb4c8d7d8c9b6a48d77624d38220d0000000000000000050e19202c353e4a4f5d65707b85919ca4b2b6c3c3b7b29f8b76614b36210c0000000a1d314455677d92a4b5c9b6a5917c6752402f1c2035495a6d8297aabbbcab99846f5d4b3722120000000000000000000000000000000000000e1e2e3e4b5d657a8899a1b3b8c5cccdc7bab4aea8a99f9c9b9a9b9c9ea7a6acb3b8c5c9d2cbc2b6ab9f8a75604a352000000000000002152838475962778699a1b4bac7d0d9cecac3b6b2aca8a5a4a4a5a6a9aeb3b8c5c7cfc6b9b49f968273604b38281502000000000000000c21364c61768ba3b5c9d8d7c8b49f8b76614b36210c00000000000000000000000000000000000000101e324556657b8d9fb5c4d4c6b3a1917c665763788b9fb4c3d4d0bfb39d8876614c3f2e1a0a00000000000000000000000000000000000000000000071d32475c72879cb1c7cab49f8a75604b3620100010202e3e4a4e524f4b44373d353025180800000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d1800000c22374c61778a9fb4c6d6c9b6a49c897f797676797d848c9ba3afb3b8c5d6ceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000081c3043546f8499aabac6c7baab9c86715a4835200b000000000000040d18202b353d494e5c646f7a85909ba3b1b6c2c4b7b3a59d92816d5746321e09000000011426374a6073869cb1c1c3b19b86715e4c38232b3c4d62788b9fb4c8b59f8d79644e3f2e1c04000000000000000000000000000000000009192b3c4b5c657b8a9da6b3bfcbd0c6bab4a99f99928e8a8786858587888c91979ea7b0b5c1d2d3c9bc9f8a75604a3520000000000000091d3245566177869ca4b3bfcdd7d2c8bbb4ada49c9793908f8f8f9194999ea6afb3bfcaccbdb1a197826d5645321d09000000000000000a1f33465870859babbac7c6baaa9a85705746321e0a00000000000000000000000000000000000000031628384b5d6d8297a6b7cbcfbfb29d8775616f8499a9bacdd7c6b3a1917d6758473321110000000000000000000000000000000000000000000000091e34495e73899eb3c8c8b39d88735544311d08081b2e3e4b5c646764605556524a4336251300000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000014293f54697e94a9bacecfbcab9c86786a64616163676f7985959eaebbcbe3ceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000011426364f647a8c9fa8aeafa99f8d7c66513c2b190500000000030c171f2b343c484d5b636e7a848f9aa2b0b5c1c5b8b3a69d93877d72604a3928160300000000091c304354667c91a3b5c9b5a3907b65503e2e35485a6d8297aabbbbaa98836e5c4a362111000000000000000000000000000000000002152737485a647a8a9ea8b7c4d0ccbfb3a89f958a847d7875727070707173777c8288919ba3b5c9dddab59f8a75604a3520000000000009192f3f4b6074849aa4b5c2d0e1cec1b5aa9f988e87817d7b7a7a7a7c7f83888f9aa1b1b6c2c3b5a49a8575604b36200b000000000000000417293a50667b8d9fa9afafa89f8c7b654f3929160300000000000000000000000000000000000000000a1a2e3f4c6176889db3bfcfcbb7a696816c7c91a1b3c7d7cdb9a899836f5f4d3a29170300000000000000000000000000000000000000000000000a1f34495f74899eb4c9c7b29c87725544311d080e22374b5c647a7d7975706c67605443301c07000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d180003162838596e8399aec7d8cab49f8c7a645a4e4c4c4e525c647380939daec1d6ceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000822364a5c677d8a959999958b7e685e4c381e0e000000000b171e2a333b484c5a626d79838d99a1b0b4c0c5b9b3a79e94887e7468605443301b0b0000000000001325364c5e70859bb0c0c1af9a846f5c4a363c4d62788b9fb4c7b49f8b78634d3e2d1a030000000000000000000000000000000000081d3144556278899ea8b9c6d4ccbcafa1998a80776f686360545b5a5b5c5962666d747d859bb0c5dbcab59f8a75604a352000000000021527374c5d6c8197a2b4c2d2dbcdbdb1a39b8c827a726c686564646567696e737a848f9ca4b3b6a59c8676615645321d0900000000000000000c23384c5e687e8b959999958a7d675d4b371b0b00000000000000000000000000000000000000000000111f334658667c91a0b2c5d4c4b49f8c78879db2bfd0d2c1b49e8a78624d41301c0c000000000000000000000000000000000000000000000000081d32485d72879db2c7c9b49e8975604b3520191c2e3f4f647a8c928e8985817d72604a35200b000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d1800091e32455673889db3c8d9c4af99846f5c4a3c3636393d4a54606b7e93a9bed3ceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c16010000000000000000000000000000071b2e3e4d5f67777f8484807868604e402f1d000000000b1b29333a474c59626c78828c989fabb3bfc6b9b4a79e95897f756960564a43362513000000000000000818304050657b90a2b4c8b4a28f7a644f3d485a6c8197aabbbaa997816c5a4935200f000000000000000000000000000000000006192b3c4b6074859ba7b8c6d6ccbbae9e9584786b6259534e4b433645463b484d515560677b90a5bad0cab59f8a75604a352000000000081d314455657b909fb1c0d1ddcdbdb09f9785796d645c5753504f4f505154595d656f7a8699a1a69d8777625846382815020000000000000000091c2f404e6068788084848077675f4d3f2e1b00000000000000000000000000000000000000000000000417293a4d5e6e8398a7b8cccebbaa9d889da5b7cad9c8b5a3947f695a4835231300000000000000000000000000000000000000000000000000051b30455a70859aafc5cdb9a88f7a655043352c303c4b5d6f849aaaa99f9b9688735443301c07000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000b21364b60768ba6b7cbd3bea9937e69543e2d2121242d36434e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000102030414d59626a6f6f6b625a4e4231221200000003172939464b58616b77818b979faab5bcc7bab4a89e95897f766960574b45383025180800000000000000001223384c5d70849aafbfc0ae99836e5b494d62788b9fb4c5b49f8a77624d3c2c190100000000000000000000000000000000000b2035495a6a7f95a3b4c5d5cebdae9d948072625a4c483b3935302630302b3437374450657b90a5bad0cab59f8a75604a3520000000011527374b6074879cb2bdceded0bfb09f968174645c4f4a3e3e3b3a3a3a3c3f3f4b505c647583929588786259483a291a0a00000000000000000000112231424e5a626b6f6f6a62594d413021100000000000000000000000000000000000000000000000000b1b30404c6277899eb3c0d0c8b7a69da6b7c3d4cebbaa9b8573604b3c2b19050000000000000000000000000000000000000000000000000000152b40556a8095aac1d2c6af99846f614d493c434a5a657b90a2b4bab4af9a846f5a36251300000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000d22374d62778ca2c4d5d0baa5907b65503b26100c0f1826394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000021323303b484d55595a564d493c312414040000000a1e334657616a76808a979fa9b4bbc6b9b4a99f968a80766a61574b453932281c1308000000000000000000091c2f3f4f657a8fa1b3c9b59f8c79634e596c8197a9bab9a795806b5948341e0e000000000000000000000000000000000006192c3c4d62788a9fb4c1d1d3c2b19f947f6b6054483c342a23201c141b1b192022273b50657b90a5bad0cab59f8a75604a3520000000081d314455697e93a5b6cadbd5c4b3a196816d60564a3d362d2826252525272a2e373e4b5761727d8078625a493b2a1c0c0000000000000000000000031424313c494d565a5a554d483b3023130300000000000000000000000000000000000000000000000000121f344859687d92a2b4c6d4c4b7b3b7c4d4d4c3b49f8c7a645544311e0e0000000000000000000000000000000000000000000000000000000f243a4f647a8fa3b5c9c7b3a1947f6d625a5a54606678889eb3c0cdbaa9937e69533e291400000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000e23394e63788ea3b8cdceb9a48f79644f3a240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c16010000000000000000000000000000000005131d2b34374044444038352c1e1406000000000c21364b61757f89969fa9b4babbb4afa89e968a81776b61584b463932281d150a0000000000000000000000001122374b5d6f8499abbcbcab97826d5962778a9fb4c4b39e8976614c3b2b180000000000000000000000000000000000000c2035495a6e8398a9bacddecab6a497816c614a43362b1f180e0b080103090b0f10263b50657b90a5bad0cab59f8a75604a35200000000b20354b6074889db2c3d3e0cbb8a6998372604b45382d221b13100f0f1012141c232e39465460676b625a493c2c1d0d0000000000000000000000000006141e2b35384044444037342b1d1305000000000000000000000000000000000000000000000000000005182a3b4e606f849aa8bacdd4cbc8cbd4dfcab6a596806b5c4a372614000000000000000000000000000000000000000000000000000000000d22364a5c71859bb0becebfae9d948278726f6f747c879da6b8cbc2b49f8a76614c37210c00000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c16010000000000000000000000000000000000000d1820222a2f2f2b2320190e0000000000001c31465c7186959ea8b4bac7bbaa9f99938a81776b61594c473a33291e160a0200000000000000000000000000081b2e3f4f647a8d9fb5c9b49f8b77626c8196a9bab7a6947f6a5847331d0d0000000000000000000000000000000000011527374d62788b9fb4c7d7d1c0b19c8675604b433025180d050000000a161e212425263b50657b90a5bad0cab59f8a75604a352000000417293a51677c91a6b7cbe1d3c2b39e887661544331271a0f070000000000000008101b2936434a52564d483c2c1e0e00000000000000000000000000000006141f26292e2f2f2e2e2320190e000000000000000000000000000000000000000000000000000000000d1d31424d62788a9fb4c9dedfdddfe7dcc7b29d8775604b3e2d190900000000000000000000000000000000000000000000000000000000071b2e3e50657b909fb1c0ccbbaea0988d87848588919da6b7c4c4b6a495806a5847331f0a00000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000000000000050b0d151a1a160d0c06000000000000001d32475d72879cb2b9c6cdcab49f8b847e766c62594c473a33291e170b03000000000000000000000000000000001022364a5c6e8399abbcbbaa95806b778a9fb4c3b39d8875604b3a2917000000000000000000000000000000000000081d3144556c8196aabbceddc8b4a2907b665645321c1308000000000c1a283236393a3a3b50657b90a5bad0cab59f8a75604a352000000a1f3346586f849aafc4d4decab6a4927d6858473625150a00000000000000000000000b182530353d4038352b1e0e000000000000000000000000000000021424323b3e434343434338352b1e0e00000000000000000000000000000000000000000000000000000005182a3b4e5f70859ab0c5daeff2ece7d1bca7927c6757453220100000000000000000000000000000000000000000000000000000000000001023384b5d6d8297a2b2becbbeb2ada49c9a9a9ea7b2b7c4c2b6a69c8674604b3a29170400000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c16010000000000000000000000000000000000000000000000040501000000000000000000001d32475d72879cb1b5c2cacebbaa9d87817a70655d4f4b3e362d211a0f0600000000000000000000000000000000071b2d3e4e63798c9fb4c8b39e88747f95a8bab6a5937e685745321c0c0000000000000000000000000000000000000b20354b6074889eb3c8d9d6c6b09a85705e4c38281600000000000c1c2938454b4f4f4f4f50657b90a5bad0cab59f8a75604a352000000c21364c61768b9fb4cadfd8c8b19c8774604b3a2a18080000000000000000000000000008131c20282b2220190e000000000000000000000000000000000c1f32424f5358585858584d483c2b190600000000000000000000000000000000000000000000000000000c1f344859687d92a2b4c8dddfddd7dad9c4af9a846f604e3c2b18080000000000000000000000000000000000000000000000000000000000081c2f3f4b60748498a0b3b8c5c6c2b6b1afafb3b8c5c9bcb4a49c8878625645321c0c0000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f83919ca4b2b6c3c8b7a59d968e857a6f645c4f4a3e362d211a0f06000000000000000000000000000000102136495b6d8298aabbb8a6907b879db2c2b29c8774604b3928160000000000000000000000000000000000000010263b50657b90a6b8cbe1ccb9a8917c6751402f1a0a000000000417293a4656606464646464657b90a5bad0cab59f8a75604a3520000012273d52677c92aabbcee2cebbaa937e695544311c0c00000000000000000000000000000000070b12160d0b05000000000000000000000000000000000012263b4f60696e6e6e6e6e625a4835200b000000000000000000000000000000000000000000000000000c1c30414c6277899eb3c0d1d4cbc8c2c5cec7b3a1937e685a48362513000000000000000000000000000000000000000000000000000000000000111d314556617582939ea6b1b6c2c0c1c3c2c1c6b9b4ab9f978679635a48382815000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000182c4154656f7c86929ca5b2b7c3b7b2aca29a8f847a6f645c4e4a3d352c20190e0400000000000000000000000000061a2c3d4d63788b9fb4c4b19c879ca5b7b5a3927d675544311b0a00000000000000000000000000000000000002152737566b8196abc5d5dec9b39e8975604b36201100000000000a1f3346586175797a7a7a7a7a7e93a8bed3cab59f8a75604a35200001142636576c8197acc8d8dfcab49f8b76614c372614000000000000000000000000000000000000000001000000000000000000000000000000000000000014293e53697e838383838278624d38230d00000000000000000000000000000000000000000000000004182a3a4d5f6e8399a7b8ccd4c4b7b2adb1becebfb49e8a78625443301c0e0000000000000000000000000000000000000000000000000000000000021527384657616e7e88949ca4a7aaacaeadabaaa89e988c8275635b493c2b1a0a000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b56412c16000000000000000000000000000000000000000000070b0f1314100b08010000000000000011253747545e66737d87939da6b3b8c5c0b4afa29a8f847a6e635b4e493d352c1f170b000000000000000000000000000f2035495a6c8197a9bab6a49ca4b6c0b19b8672604a37271500000000000000000000000000000000000000081d31445570869bb0c5dbd8c3ad98836e5645311d0900000000000c21364c6176878e8f8f8f8f8f939caec1d6cab59f8a75604a352000081c30435471869bb0c6dbdac4af9a846f584733190900000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f455a6f8498989898917c66513c27110000000000000000000000000000000000000000000000000c1f334758677d91a1b3c5d6cbb7a69d97a0b1c7cdb9a89a8472604a3c2c180800000000000000000000000000000000000000000000000000000000000a1a2939464b6068757f868c929597989896948f8982796d6157493d2c1e0e00000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d6c0ab96816b563a29170400000000000000000000000000000000000008131c2025292925201d140900000000000007192937404d546067747e87949ea6b3b9c5c0b3afa1998c83796e635b4d493c33291b0b00000000000000000000000006192c3c4d62788a9fb4c2b6b1b6c2b4a2907b665443301909000000000000000000000000000000000000000b20364b60748a9fb4cadfd3bea8937e695338271502000000000011263b51667b90a5a4a4a4a4a4a8aebacbddcab59f8a75604a3520000b20354b60758a9fb4c9dfd4bfaa957f6a553a29170000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395c71879cadadaa947f6a553f2a1500000000000000000000000000000000000000000000000c1c30404c6177889eb3bfcfd0bfb29d888297a9bacdc6b4a2937e695a493626140100000000000000000000000000000000000000000000000000000000000b1b2932424e57616971777d80818383817f7a756d635b4b46392c1f0f0000000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d7c2ac97826d5846331f0f01000508070000000000000000000000010f182530353a3e3e3a35312619100200000000000b19223036434b556068757e88949ea7b4bac6bfb3ab9f998c83796d625a4c463a2917040000000000000000000000000e203448596c8196a8b9cac7cabfb09a85705e4c36251300000000000000000000000000000000000000000e23384d63788daabbcee2d9c8a48f7a654f3a251000000000000011273c51667c91a6c3b9b9b9b9bec1cbd8d8cab59f8a75604a3520000d22374d62778ca9bacee2d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32465774899eb3c2ad98826d58382816030000000000000000000000000000000000000000000417293a4c5e6e8298a6b8cbd7c6b3a1917d788b9fb4c2d1c0b49e8a78635443301c0e0000000000000000000000000000000000000000000000000000000000000b161e3139464b545962686b6c6e6d6c6a6560554e493d32291b0f010000000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7dcc9b49e8976614c3d2d1d15191b1d1d0f0d0800000000000000000f1f2c36434a4f5353504b44372d2010010000000000041218263037444b566069757f89959fa8b4bac7bcb5ab9f988c82786c615846331f0c00000000000000000000000005192b3b4c61778a9eb4c5d6c9b3a18f7a654f402f1808000000000000000000000000000000000000000011263b50667b90a5c8d8e2cebbaa8c77624c37220d00000000000011273c51667c91a6bbc3c3c3c3c3c3c3c3c3c3b59f8a75604a3520000f253a4f647a8fa4c7d8eacdb8a38e78634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba8b9c6b09b86715645321e130300000000000000000000000000000000000000000b1f334758667c91a0b2c5d5cdbaa899836f6a7f95a4b5c9cdb9a89a8473604b3d2c190900000000000000000000000000000000000000000000000000000000000003141b2832363b484d52555759585655504b4437352c1e160b00000000000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7dcccb9a895806b5c4a3c31272e30333225221b100200000000000d1d2c3d4954606468696560554a3e2d1f0f0000000000000008141c273138454b57616a76808a969fa9b4bbc8bcb5aa9f988b8176614c3a2917040000000000000000000000000d1f3447596b8095a7b9b8bcab99846f5d4b37221200000000000000000000000000000000000000000012283d52677d92a7bcd2dfcab49f8a75604a35200b00000000000011273c51667c91a6adadadadadadadadadadadad9f8a75604a35200011263b51667b90a6bbd0e0cbb6a08b76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788da2c6c9b49f8975604b3f311e160a0000000000000000000000000000000000000b1b2f404c6176889db3becfd2c2b49f8a78626074869cabbccfc6b4a2947e695b4937261401000000000000000000000000000000000000000000000000000000000000000b161e212b34373d40424343413f3a363127211a0f030000000000000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7dcd6c6b49f8b7a645a4b4437434548473a372e20100000000005192b3b495b63727a7e7e7a73645c4a3d2d1a07000000000000000109151d283239464b58616b77818b979faab5bcc8bbb4aa9f97846f5846331f0a00000000000000000000000004182a3b4c6176899ea3a3a39f8c79634e3f2e1b0400000000000000000000000000000000000000000013293e53687e93a8bdd3dec9b39e89745443301c0700000000000011273c51667c9198989898989898989898989898988a75604a35200012273c52677c91a7bcd1e2cebbaa8a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c1cdbaa8937e685d4e4232281a0e00000000000000000000000000000000031729394c5e6d8297a6b7cbdac9b5a4947f695a56647a8c9fb4c4d1c0b49f8a79635544311d0f000000000000000000000000000000000000000000000000000000000000000003090d192022282b2c2e2e2c2a25201d15090600000000000000000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7dce2cebaa99d877868605558585a5d5c4f4b3e2e1b080000000b203448596379858f93938f867a645b4a36210c000000000000000000010a161e29323a474c59626c78828c989fabb3bfc8bbb4a28b76614c36210c000000000000000000000000000c1f3346586a7f8d8d8d8d8d826d5b4a3621100000000000000000000000000000000000000000000014293f54697e94a9bed3ddc8b39e88735e492513000000000000000f24394f647a838383838383838383838383838383836e58432e190012283d52677d92a7bcd2dfc9b49f8a745443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778da3b4c8c6b49f8b7c68604b45382c1f110300000000000000000000000000000a1e334657667b90a0b1c4d4cfbcab9c8673604b4b5c6c8197a6b7cbcdbaa99b8573604b3d2c190900000000000000000000000000000000000000000000000000000000000000000000050b0d13161719181715100b0802000000000000000000000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7dcd7c9bcb4a59d897d746f6d6e707272645c4b37220d0000000d22374d6278899ba3a8a8a49c8a79634e3a2a180400000000000000000000020b161e29333b474c5a626d79838d99a1afb4c0c0a18c77624c37220d000000000000000000000000000417293a4b6074787878787875614b3d2d1a020000000000000000000000000000000000000000000014293e53697e93a8bed3dec9b39e89745e3b2a18040000000000000d22364a5c646e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6453402b160012273c52677c91a7bcd1dfcab59f8a755645321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a70859baabbc9baa99f8b7e6d6056493d2e2111030000000000000000000000000a1b2e3f4b6175879db2beced5c4b59f8d7a6455443e4c6176889db2bfcfc7b4a3947f695b49372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7d7c7baab9faba79e92898482838588867b644f3a250f000003172939586d8297a7b5c1c2b6a89a846f5847331f0a000000000000000000000000030c171f2a343c484d5b636e79838f9aa2b0b4a18c77624c37220d00000000000000000000000000000c1d324556606363636363615746331f0f000000000000000000000000000000000000000000000013283d52687d92a7bdd2dfc9b49f8a745947341f0b000000000000071b2d3e4a4f5858585858585858585858585858585853463623100011263c51667b91a6bbd0e3cfbcab8b76604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4f647a8b9fabb8c5baa99f938275635b4b3f2e21110000000000000000000000031628394b5d6c8197a5b7cbe0cbb8a697816c5d4b37334657667c91a0b2c5d1c1b49f8b79635544311d0f00000000000000000000040e14162020202020202020191610060000000000000000000000000000000000080e1020202020202020201e1c160d01000000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7cdbaa99f8a9fb4b3a79e9997989a9d97826c57422d1702000a1e33465774899eb3c5d2d3c6b59f8b77614c37220c0000000000000000000000000000040d181f2b353d494e5c646e7a84909ba3a18c77624c37220d000000000000000000000000000002152838454b4e4e4e4e4e4b4639291701000000000000000000000000000000000000000000000011273c51667c91a6bbd1e2cebbaa8c77614c37220c0000000000000010202d36394343434343434343434343434343434340362818060010253a4f657a8fa4c7d8eadab7a28d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c677d8d9ea7b5c1bab49f978679655d4b3f2e1e0e000000000000000000000a1e324557657b8d9fb5c3d4d0c0b39e8876614c3f2e29394c5e6e8398a7b9cccdbaa99b8573604b3d2d19090000000000000000081621292b35353535353535352e2b23180a000000000000000000000000000003111c2326353535353535353534312a1e11010000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7c9b49f8b8196a5b7b8b3aeadadafae99846e59442f1904000c21364b61768ba7b9cce2e3cfbcab8e79644e39240f00000000000000000000000000000000050e19202c353d4a4e5c646f7b85919c8c77624c37220d0000000000000000000000000000000a1a28323638383838383633291b0b0000000000000000000000000000000000000000000000000f24394e64798ea3c3d4e6d8c8a48f7a644f3a250f0000000000000002101b22242e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2b23180a00000d22384d62778da9bacee2cfbaa58f7a65503a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4d5f677b899ba3b2bebeb1a49c897b655d4b3c2c180800000000000000000a1a2e3f4b6075879dabbccfd7c7b3a2927d67584733201b30404c6277899eb3c0d1c7b5a3947f6a5b4a37271502000000000000041626333d404a4a4a4a4a4a4a4a4340362818060000000000000000000000000011212f383b4a4a4a4a4a4a4a4a49453c2f1e0d0000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7c7b19c8776879daabbc9c4c2c3c5b09b85705b46301b00000b20354b60748a9fb4c8d7d8c9b6a48d77624d38220d000000000000000000000000000000000000050e1a212d363e4b4f5d65707c868c77624c37220d000000000000000000000000000000000a151d202323232323211e170b000000000000000000000000000000000000000000000000000c21364c61768ba5b6cadfd3bda8937e6853372715020000000000000000070d0f191919191919191919191919191919191610060000000b20354b60758a9fb4c9dfd3bea9937e695436261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000102030414d5d65788598a0b4bbc2b5a79e8b7b655a4936261401000000000000021628384b5d6c8196a5b6c9dacdbaa99a846f5f4d3a29171220344859687e93a2b4c7d2c1b49f8b79635544311d100000000000000e21334451566060606060606060585346362310000000000000000000000000081c2f3f4c5060606060606060605e594d3c2a160000000000000000000000000e23384d63788da2b8cddfcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0d5d7c2ad97826d58422d18000f24394e64798ea3b9ceceb9a48e79644f39240f00000f24394e64798ea3b9ceceb9a48e79644f39240f001d32475d72879cb2c7c4af9a846f7b8c9fabbac7cfd9c7b29d87725d3928160300081c3043546f8499aabac6c7baab9c86715a4835200b0000000000000000000000000000000000000000060f1a212e373f4b505e66727c76614c36210c000000000000000000000000000000000002090b0e0e0e0e0e0c0a0300000000000000000000000000000000000000000000000000000a1e33465772879db2c7dcd8c3ad98836e5544311d08000000000000000000000003030303030303030303030303030303020000000000081c30435471869bb0c6dbd8c2ad98836d5443301c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000021323303f4c5a627482939faabbc5b9a99e8978635443301c080000000000000a1e324556657a8c9fb4c3d3d3c2b49f8b79634d41301c0c05182b3b4a6072849aa9bacdcebaa99b8574604b3e2d1a0a000000000014293d51626b75757575757575756e6453402b160200000000000000000000000e23384c5d657575757575757575736b5945311c0000000000000000000000000e23384d63788da2b8cdcdcab5a08a75604b35200b0000000000000000000000162b40556b8095aac0cdcdc2ad97826d58422d18000f24394e64798ea3b9c8c8b9a48e79644f39240f00000f24394e64798ea3b9c8c8b9a48e79644f39240f001d32475d72879cb2b2b2ac97826c687d8d9fa9b4bcc9bfb49e89745745321e0900011426364f647a8c9fa8aeafa99f8d7c66513c2b19050000000000000000000000000000000000000000000007101b222f37404c546067615846331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939586d8398adc8d9dec9b39e8975604b36251300000000000000000000000000000000000000000000000000000000000000000001142636576c8196acc7d7ddc8b39e8874604b352010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000513212f3c4856606d7e8c9fabbcc7b9a89a8473604b35200d00000000000a1a2d3e4b6074869cabbccfdecab6a4957f6a5b4935231300000d1c30435463798b9fb4c2d2c7b5a395806a5c4a3827150200000000162b40566b808a8a8a8a8a8a8a8a826e58432e1903000000000000000000000010263b50657b8a8a8a8a8a8a8a8a89735e49341e0000000000000000000000000e23384d63788da2b8b8b8b8b5a08a75604b35200b0000000000000000000000162b40556b8095aab8b8b8b8ad97826d58422d18000f24394e64798ea3b2b2b2b2a48e79644f39240f00000f24394e64798ea3b2b2b2b2a48e79644f39240f001d32475d72879c9d9d9d9c927d675f687d8a999faba9aaa9a48b75604b36210b00000822364a5c677d8a959999958b7e685e4c381e0e0000000000000000000000000000000000000000000000000008111c232f36434a524c463a29170400000000050b0d10101010101010101010101010101010101010101010101010101010100f0d070000000000000000000000000000000013283e53687d93aabbcee0ccb9a7927d685443301c0c00000000000000000000000000000000000002080b0c0a0400000000000000000012273c51677c91a9bacde0ccb8a7917c66513e2d19090000000000000000000000000000000000030905000000000000000000000000000000000000000000000003111e2b38454b60697d8d9fb5c4c6b4a2917c67513b2b1805000000021527384a5c6b8096a4b6c9d9cebeb19c8674604b3c2c1905000000132536495b6a7f95a4b5c9d2c1b49f8b7a645645311d1000000000162b40566b80959f9f9f9f9f9f98836e58432e1903000000000000000000000010263b50657b909f9f9f9f9f9f9e88735e49341e0000000000000000000000000e23384d63788da2a3a3a3a3a3a08a75604b35200b0000000000000000000000162b40556b8095a3a3a3a3a3a397826d58422d18000f24394e64798e9d9d9d9d9d9d8e79644f39240f00000f24394e64798e9d9d9d9d9d9d8e79644f39240f001b30455b708488888888878173604b5f6779838b919495938f8675614b36210c0000071b2e3e4d5f67777f8484807868604e402f1d000000000000000000000000000000000000000000000000000000000812182530353c3633291b0b000000000d181f22262626262626262626262626262626262626262626262626262626262624221b100200000000000000000000000000000c22374c61778b9fb4cadfd6c5b19c8673604a3a2a18080000000000000000000000000000000309151d20211f170b02000000000000000c21364b61768a9fb4c9ded5c5af9a84705c4a3727150100000000000000000000000000050b0d181e1b0c0a04000000000000000000000000000000000000000000000e1a2832424f5f6b8096a6b7cbc0b09b8571594834200b000000091d314556647a8c9fb4c2d3d5c5b2a0907b655645311e0e0000000008182c3d4b6074869cabbccfcebbaa9c8674604b3e2d1a0a000000162b40566b8095abb5b5b5b5ad98836e58432e1903000000000000000000000010263b50657b90a5b5b5b5b5b39e89735e49341e0000000000000000000000000e23384d63788d8d8d8d8d8d8d8d8a74604b35200b0000000000000000000000162b40556b808d8d8d8d8d8d8d8d826d58422d18000e23394e6379888888888888888879634e39240e00000e23394e6379888888888888888879634e39240e00192d4255667073737373726c6055444d5b636e777c7f807e7a72615746331e0a000000102030414d59626a6f6f6b625a4e4231221200000000000000000000000000000000000000000000000000000000000008131c2027211f170b000000000d1d2a34373b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a362d201000000000000000000000000000000b1f3447596f849aafc3d3dec9b5a4917c6658473625150a000000000000000000000000010b161e2731363633291d150a0000000000000a1e3246576e8399aec2d3dcc8b4a28e7a645544311d120300000000000000000000010d1820222d3330221f180c000000000000000000000000000000020600000000000a161e32414b6074879db2c8c9b5a38c77624d37220d000009192d3d4b6074869caabbcecdccb8a798826d5d4b3827150000000000000f1d314556647a8c9fb4c4d4c8b5a495806b5c4a382816020000162b40566b8095abc0cacac3ad98836e58432e1903000000000000000000000010263b50657b90a5bacacac8b39e89735e49341e0000000000000000000000000b20364b6073797878787878787879705544311d0800000000000000000000000c22374c6176787878787878787877624c37220d000c2136495b637373737373737373635b4a36210c00000c2136495b637373737373737373635b4a36210c0012263848555b5d5d5d5d5c574b44373c494d5962676a6a696460544639291703000000021323303b484d55595a564d493c312414040000000000000000000000000000000000000000000000000000000000000000070b120c0a040000000005182a3b474c50505050505050505050505050505050505050505050505050505050504f4a3e2d1b070000000000000000000000000004182a3b51667c91a5b6cadfd2c2b29d887661544331271a100800000000000000000409141d293237444b4c463a32281a0a00000000000316293950667b90a4b6c9ded1c0b09b8573604b40301e160a030000000000000208141c2b343743494537332a1c0c000000000000000000000003090b171b130b0801000002141d3245566a8095aabfd2c1a7927d68523d281300011527374a5c6a8095a4b5c8b8b8beb39e8977614c3f2e1a0a000000000000021527384b5c6c8197a6b7c6b8c2b49f8c7a645645321e090000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000000000000000000000081d314455606363636363636363635b443727150100000000000000000000000a1f33475861636363636363636362594834200b00061a2c3d494e5d5d5d5d5d5d5d5d4e4a3d2d1a070000061a2c3d494e5d5d5d5d5d5d5d5d4e4a3d2d1a0700081a2a3842454848484847423531272c353b484d525455544f4a4336291b0b000000000005131d2b34374044444038352c1e1406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344759626565656565656565656565656565656565656565656565656565656565645c4a36220d00000000000000000000000000000c20354b6073879cb2c1d1dfcbb7a6998372604b45382d221b13100e0d0d0e1012171f263139464b556061584b453828150200000000000b23384c5e71869cb1c1d1ddc8b4a395806a5e4d4032281e16100e0d0d0e10151d26303b484d585e5a4c473a2a18080000000000000000000a161e212d3028201c140800000215283850667b90a5bbd0bfaa957f6a55402a1500081d31445564798b9fa3a3a3a3a3a3a0927d68594734211100000000000000000a1a2e3e4c6176889da8a3a3a3a3aa9c8674604b36210b0000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e00000000000000000000000002152737444b4e4e4e4e4e4e4e4e4e493d27190900000000000000000000000004182a3a474c4e4e4e4e4e4e4e4e4c483b2b180500000f1f2c3639484848484848484839362d1f0f000000000f1f2c3639484848484848484839362d1f0f0000000c1a262d3033333333322d201d1519212b34373c3f403e3a353025180b00000000000000000d1820222a2f2f2b2320190e00000000000000000000000000000000000000000000000000000000000000000000070b0700000000000000000d22374c62777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a644f3a240f0000000000000000000000000000081c304354677d92a3b4c7d7d4c4b3a196806c60564a3e372e28252322222325282a3337444b57616a75766e605645321d100000000000091c2f4052677c91a3b4c7d7d1c1b49f8c7c675f4b45393229252322222326273136434b59626d737061584736261401000000000000000a1a28323642453e35302618110d0c0f24394e64798ea3b9cec1ac96816c57412c17000b20354b6075868d8d8d8d8d8d8d8d8c8272604a3a2a1803000000000000000000101e334657657b898d8d8d8d8d8d8d8d806b56412b160100162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000000000000000000000000919273136383838383838383838352c1f0900000000000000000000000000000c1c2a3337383838383838383837342b1d0d000000010f1a2123333333333333333324211a0f0100000000010f1a2123333333333333333324211a0f01000000000812191b1e1e1e1e1d170b0801060d182022272a2b2925201c130800000000000000000000050b0d151a1a160d0c0600000000000000000000000000000000000000000000000000000000000000020b08131c201c130804000000000012273c52677c909090909090909090909090909090909090909090909090909090909085705b46311b0000000000000000000000000000011426364a6072859ba9bacde1d0bfb09e968174645c4f4b3e3d3a383737383a3d3a474c5560687580898b8374604b3e2e190900000000001125394d5f70859ba9bacde2cebbaa9f8b7d6b60574b46393b383737383b37444b5460697782888476615443301c1000000000000003162838454b575b534b43362e252322222c3b50657a8fa5bacfc1ac97816c57422c17000b20364b6074797878787878787878776d605443301c0c00000000000000000000031729394b5d6575787878787878787879634d38230e0000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000000000000000000000000009151d20232323232323232323211a0f010000000000000000000000000000000c181f2223232323232323232220180d000000000000060c0e1e1e1e1e1e1e1e1e0e0c070000000000000000060c0e1e1e1e1e1e1e1e1e0e0c07000000000000000004060808080807020000000000050b0d121515140f0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f2625303530251f180c0000000012273c52677c91a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59b86705b46311b000000000000000000000000000000081c30435463798b9fb4bdceddcdbcb09f97857a6e645c57524f4d4c4d4d4f5256586169747d88959ea196816c5c4b37271502000000000a1d30414e63798b9fb4becfd9c8baa99f8d817568615753504d4c4d4e5054556067737e8a989e9a8472604b3e2e1b0b0000000000091e324556606c706860544b3f3a3837383c49596b8095aac0d4bfaa957f6a55402a1500091d3245566063636363636363636362594a433625130000000000000000000000000b1b2e3f4b57616363636363636363635b4935210c0000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e00000000000000000000000000000002080b0e0e0e0e0e0e0e0e0e0c06000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021424313a36434a4336342a1c0c00000012273c52677c91a7bababababababababababababababababababababababababab09b86705b46311b000000000000000000000000000000001325364a5b697e939fb1bfcee2cdbdb1a39b8c837a726c68656362626365676b70777e86929da6b3b49f8c7a645544311d0800000000011221364a5b697f94a0b2c0d0d7c7baab9f96877e766e69656362626365696e757c86939ea8b3a2947f6a5c4b3a29170400000009192d3e4b607481857e73655d55504d4c4d505a6377899eb3c9d2c1a8927d68533d28130002152838454b4e4e4e4e4e4e4e4e4e4c483b302518080000000000000000000000000011212e39464b4e4e4e4e4e4e4e4e4d493c2c19060000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b141b1d2020202020202016140e04000000000000000b141b1d2020202020202016140e04000000000000080e1020202020202020202020202020202020202020202020202020201a17110700000000000000000000000000102031424e535460544c473a2a1804000012273c52677c91a7b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b09b86705b46311b0000000000000000000000000000000008182d3d4f606d8197a1b1beced8cec1b5ab9f988f87827d7a787777787a7d81858b939ca4b3b7c4bcab9c8674604b36200b0000000000071a2d3d4a60728298a2b3bfced7c9bcb5a59d938a837e7a787777787b7e8389919ca4b4b9c0b49f8c7a645846331f0a0000011527374a5c6c81969a93857b716a65626162666c78869ca7b9ccc9b5a38d78624d38220d00000a1a28323638383838383838383837342a1c1308000000000000000000000000000003111b283236383838383838383838352c1e0e000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e0000000000000000000000000000000000040a0c1f2020202020201e0b090200000000000000000000000000000000000000030c1215202020202020201c0e0c060000000000000000000000090f111d202020202020201e0c0a0400000000000e1c282f32353535353535352c2921160800000000000e1c282f32353535353535352c2921160800000003101b222535353535353535353535353535353535353535353535353535352f2c24190b0000000000000000000000071b2d3e4e606873756f615947341f08000012273c52677d919f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b86705b46311b00000000000000000000000000000000000f1f32424b60738397a0b4bbc8d3d2c9bcb4aea59c97928f8d8c8c8d8f92969b9fabb1b6c2cbd4c9b5a4947f6a543f2a150000000000000f1c30435460748499a1b1bdccd5cfc3b7b2a89f9893908d8c8c8d9093989ea7b1b5c2cccebbaa9d8776614c36210c0000081d314455647a8c9fb0a39b90867f7a7877777b818a9ca4b5c5d1c0b09b86715a4834200b0000000a151d20232323232323232323221f180d0000000000000000000000000000000000000b161e2123232323232323232321190e00000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000000000000000000000000000000c181f223535353535353534211e160a0000000000000000000000000000000000071520272a353535353535353123211a0f010000000000000004121c2426323535353535353533211f170c0000000b1c2c3a44474a4a4a4a4a4a4a413d342616040000000b1c2c3a44474a4a4a4a4a4a4a413d34261604000010212e373a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a444037291907000000000000000000000d22364a5c687e88898377614c362614010012273c52677d8c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a84705b45301b000000000000000000000000000000000001141d314455607382949faab6c2ccd5cfcac3b6b2aca7a4a2a1a2a2a4a7abb0b4bcc9cad3cdc3b7ab9f95826d58432d18000000000000001325364556607483979fb3b8c5ced4cbc6bab4aea8a5a2a1a2a3a5a9adb3b9c5c9d2cbc0b3a69e8a7a65503a251000000b20354b6073869babbcb5b0a39b948f8d8c8d90979fa8b5c2d2c3b4a2917c67513c2b19050000000002090b0e0e0e0e0e0e0e0e0e0d0b05000000000000000000000000000000000000000003090c0e0e0e0e0e0e0e0e0e0c060000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e0000000000000000000000000000000c1c2a34374a4a4a4a4a4a4a493632281a0a000000000000000000000000000000031525323c3f4a4a4a4a4a4a4a4638352c1f0f0000000000000112222f383b484a4a4a4a4a4a4a483733291c0c000014283a4b575d6060606060606056514434210e00000014283a4b575d6060606060606056514434210e00081b2e3f4b4f6060606060606060606060606060606060606060606060606060595447372411000000000000000000000f24394e647a8d9d9f97816c5443301c08001025394d5f677575757575757575757575757575757575757575757575757575757575706655422d19000000000000000000000000000000000000011426374455606d7f8c9ca4b3b8c5cad3d3cac7c1bdbab8b7b7b8babcc0c5cacfd5cbc7bab4a59d8d8072604a35200b00000000000000081828384556607381919ea7b4bbc8cdd7cdc9c3bebab8b7b7b8babec3c9ccd4cac4b7b2a29a887b655d4b37230e000013283d52687d929eb3b7c4c2b5b1aaa5a2a1a2a5acb4bac6cfc3b6a59a846f5f4d391d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000000000000000000000000004182a3a474c5f6060606060605e4b453828160200000000000000000000000000000c2032434f54606060606060605c4e493d2c1b0b00000000000f1f2f404c515d606060606060605e4c473a291704001b2f44576972757575757575756b62513d29140000061b2f44576972757575757575756b62513d2914000e22374b5d6575757575757575757575757575757575757575757575757575756f6554402c1703000000000000000001172c41566c8196abb39e8974604b35200b000a1d30414d525f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5b55483826120000000000000000000000000000000000000009192737444b616a7a86939ea7b1b6c2c5c9ced8d2cfcdcccccdcfd2d9cfcac6c4b7b3a99f95877b6b605443301c0700000000000000000a1a28384555606c7d89979faab4bac6c9ccd6d3cfcdcccccdd0d3d4cbc8c3b7b2a69d928477655d4b3f2e1c0800000b20354b607380919da6b3b9c5c6bfbab7b6b7bbc1c9ccc9bcb5a59c8777624c40301d0000000000040e14162020202020202016140e040000000000000000000000000000000000000000050b0d181e202020201e1c160d01000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e00000000000000000000000000000a1f344759617475757575757573605645321e09000000000000000000000000000012273c4f616a7575757575757571635b493a29170400000008182d3d4c5e66727575757575757573615847331f0a001d32475d72878a8a8a8a8a8a8a806b56412c160100081d32475d72878a8a8a8a8a8a8a806b56412c160010253a4f657b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a836f59442f1a0400000000000000000417293a5b70859bb0b8a78d78634e38230e0001122330393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4542382a1a0900000000000000000000000000000000000000000919273143505c64747e89939ca4aab0b4bbc8bfc1c2c3c3c2c1c0c9bcb4b1aba69d958a8075655d4a43362513000000000000000000000a1a2837444b5f6776818c979fa8aeb3b9c5bfc1c2c3c3c2c1bec4b7b2ada59d93887d6f62594b3f2e2111000000081d314455606b7c88949ea7b1b5bcc9c1c3c3c2c0c6b9b4ab9f97877862594834221200000000081621292b353535353535352b292116080000000000000000000000000000000000000d181f222e343535353534312a1e11010000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e00000000000000000000000000000c22374c61778b8a8a8a8a8a8a8974604b36210f0000000000000000000000000000152a3f546a7f8a8a8a8a8a8a8a8679635846331f110000001325364a5b667c878a8a8a8a8a8a8a8876614c37210c001d32475d72879c9f9f9f9f9f96816b56412c160100081d32475d72879c9f9f9f9f9f96806b56412c160010253a4f657a8f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f99846f59442f1a0400000000000000000a1f33465873889eb3c5a6907b66513b26110005182a3b474c50505050505050505050505050505050505050505050505050505050504f4a3e2d1b0700000000000000000000000000000000000000000009151d333e4b556069757e878e959b9faaa7aaacadaeaeadacaaa7ab9f9c968f8880776b61574b3f3025180800000000000000000000000a192731414d58616c78818a92999ea7a7aaacadaeaeadaca9a6a69d9790877e75675f4c483b2e21110300000001152737444b5e66757f89949b9fabaaacadaeadaba9a89e978c8175625a493b2a1804000000041626333d404a4a4a4a4a4a4a403d33261604000000000000000000000000000000000d1d2a343743494a4a4a4a49453c2f1e0d0000000000162b40566b8095abc0d5d8c3ad98836e58432e1916161616161616161616161616263b50657b90a5bad0dec8b39e89735e49341e00000000000000000000000000081c2e3f54697f94a99f9f9f9fa7927d67523d2c1a06000000000000000000000000000b20354b6073859ba99f9fab9f9b8776614c3f2e1a0a00071c30435463798a9da59f9f9f9fa0917c665847331f0a001d32475d72879cb2b5b5b5ab96816b56412c160100081d32475d72879cb2b5b5b5ab96816b56412c160010253a4f657a8fa4b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ae99846f59442f1a0400000000000000000c21364c61768ba7b8bea9937e69543e2914000b1f344759626565656565656565656565656565656565656565656565656565656565645c4a36220d000000000000000000000000000000000000000000000115202e37444b576068727980868a8f929597989999989795928f8b86817a746a62594b46392e1c13080000000000000000000000000009151d303a474c5a626c767d84898e919497989998989694918d88827b736960564d41342a1d1003000000000009192731404c57606a767e868b91949798999796938e8981796c6157493c2c1d0d000000000e21334451566060606060606056514433210e0000000000000000000000000000000c1c2a3b484c585e606060605e594d3c2a160000000000162b40566b8095abc0d5d8c3ad98836e58432e2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b3b50657b90a5bad0dec8b39e89735e49341e000000000000000000000000000e23374b5d72879cb1b5b5b5c5af9a85705b4935210a00000000000000000000000000081d31445563798b9fb4c1bcb5a597816d5d4b38281604182a3a4a6072859ba8b7c3b5b8a798836e5e4d3a291704001d32475d72879cb2c7cac0ab96816b56412c160100081d32475d72879cb2c7cac0ab96816b56412c16000f253a4f647a8fabbccfcacacad3cac7bebebebebebebebebebebebebebeae99846f59442f1a0400000000000000000f243a4f647a8fa4c5c1ac96816c57412c17000d22374c62777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a644f3a240f0000000000000000000000000000000000000000000000021019273139454b535c646b70767a7d7f818283838382807d7a76716c6560554c483b32281b110000000000000000000000000000000002121c2a333c494d5761676e74797c7f8182838382817f7c78736d6560544b4538301f180d000000000000000009151d3039454b58616971777c7f82838382817e79746c635b4b46392c1e0e000000000014293d51626b757575757575756b62513d2914000000000000000000000000000008182a3a4859626d7375757575736b5945311c0000000000162b40566b8095abc0d5d8c3ad98836e5843404040404040404040404040404040404050657b90a5bad0dec8b39e89735e49341e00000000000000000000000004172a3a50657a8fa4b6cacacac8b4a28d78634e3827150200000000000000000000000001142637495b6a7f94a3b5c7c3b19f907b655645321e101f334758687e93a3b4c6d0bfb39e8977624c40301c0c00001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c16000c21374c61778b9fb4c5d6e7d3c3b6b2a9a9a9a9a9a9a9a9a9a9a9a9a9a9a999846f59442f1a04000000000000000012273d52677d92a7bcc4af99846f5a442f1a0012273c52677c909090909090909090909090909090909090909090909090909090909085705b46311b0000000000000000000000000000000000000000000000000009151d2832363e4a4e55566064676a6c6d6e6e6d6c6b6865615756504b4437342a1e160b000000000000000000000000000000000000000c171f2c3539464b52546063676a6c6d6e6e6d6c6966625a58504b433632281a13050000000000000000000001121b28323a474c545961666a6c6e6e6d6b696460554e493d32281b0e000000000000162b40566b808a8a8a8a8a8a8a806b56402b1601000000000000000000000000011426364758627782898a8a8a8a89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e5855555555555555555555555555555555555555657b90a5bad0dec8b39e89735e49341e0000000000000000000000000a1f3347586d8298adc2d3dfded1c0ab96806b5645311d090000000000000000000000000009192c3d4b6073859ba9bacdbdb29c8775604b3e2d192e3e4c6177899eb3c1d1c6b3a1927d6759473422120000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c16000a1f3347586e8399a7b8c9dacab6a59c94949494949494949494949494949494846f59442f1a040000000000000000142a3f54697f94a9bec6b19c86715c47321c0012273c52677c91a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59b86705b46311b0000000000000000000000000000000000000000000000000000020a161e212d363938454b4f525557585959585755524f4b46393a3531261f180d03000000000000000000000000000000000000000000040e192029323636434b4e525557585959585754514d493c3b3530261e160a00000000000000000000000000000a161e2a33373b474c51555758595856544f4b4437352c1e160b00000000000000162b40566b80959f9f9f9f9f95806b56402b16010000000000000000000000000e1c304354617686989ea79f9f9e88735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b7b90a5bad0dec8b39e89735e49341e0000000000000000000000000c21374c61768a9fb4c9cec9c8ccc8b39e8875604b36200e00000000000000000000000000000f1d31445563798b9fb4c1cab6a596806b5c4a3727374b5c6d8297a7b8ccccb9a899846f5f4d3b2a18040000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160004172a3a4d6278899eabbccfc7b29c877f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7c66513c2711000000000000000000152a3f546a7f94a9bfc7b19c87725c47321d0012273c52677c91a7bababababababababababababababababababababababababab09b86705b46311b0000000000000000000000000000000000000000000000000000000003090f1a21242832363a3d40424344444342403d3a36332925201d14090500000000000000000000000000000000000000000000000000060b161e21263035393c3f4243444343413f3c38352b25201c14080300000000000000000000000000000000030c171f212a34373c3f42434442413e39353126211a0f030000000000000000162b40566b8095abb5b5b5ab95806b56402b160100000000000000000000000e1e2f404b6072839aa4b3b8c5b39e89735e49341e0000000000162b40566b8095abc0d5dcc6b19c86808080808080808080808080808080808080808080808298adc2d8dec8b39e89735e49341e0000000000000000000000081b2e3f54697e93a9bac8bbb4b3b8c5b8a7917c67523c2c19060000000000000000000000000001142637495b6a7f94a3b5c7c3b49f8c7a645544314455647a8d9fb5c5d1c0b49e8a78624d41311d0d000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c1600000c2035485a667c8d9fb5c0cab6a5917c696969696969696969696969696969665e4d39240f000000000000000000152a3f546a7f94a9bfc7b19c87725c47321d0012273c52677c91a7b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b09b86705b46311b00000000000000000000000000000000000000000000000000000000000000070d0f161e2125282a2c2d2e2e2e2d2b2825211e17100b08010000000000000000000000000000000000000000000000000000000000030a0c141c2024272a2c2d2e2e2d2c2a27232019100b08010000000000000000000000000000000000000000040a0c181f22272a2d2e2e2d2c2924201d14090600000000000000000000162b40566b8095abc0cac0ab95806b56402b1601000000000000000000000b1b2c3c4c5e6b8095a1b3c2ccc8b39e89735e49341e0000000000162b40566b8095abc0d5dec9b6a49c9595959595959595959595959595959595959595959598a0b2c6dadec8b39e89735e49341e00000000000000000000000e22374b5d71869cb1c7bbaa9f9ea7b8c5af9a846f5a49352009000000000000000000000000000009192c3d4b6073859ba9bacdbbaa9c8674604b3d4b6073869babbccfc7b4a2937e695a4835231300000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c16000005192b3c4c5e6b8096a2b4c5c3b39e89786356545454545454545454545454514d40301d09000000000000000000152a3f546a7f94a9bfc7b19c87725c47321d0012273c52677d919e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9b86705b46311b0000000000000000000000000000000000000000000000000000000000000000000003090b0f12151718191918171613100c0a0300000000000000000000000000000000000000000000000000000000000000000000000001080b0e121517181919181714110d0b06000000000000000000000000000000000000000000000000000000040b0c11151719191816140f0b0801000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b160100000000000000000003162839495b667c8d9fb5bfd0dec8b39e89735e49341e0000000000162b40566b8095abc0d5e5d3c2b6b1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadb2becfe1dec8b39e89735e49341e000000000000000000000417293a4f657a8fa4b6c9b49f8b899eb3c8b59f8c78634d3727150200000000000000000000000000000f1d31445563798b9fb4c1c8b5a4947f6a5b4959697e93a3b5c9cdbaa99a8472604a3c2b190500000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160000000e1e2f404b6073849aa6b8c9b9a89b8574604b413f3f3f3f3f3f3f3f3f3f3c3930221200000000000000000000152a3f546a7f94a9bfc7b19c87725c47321d0012273c51677c8a89898989898989898989898989898989898989898989898989898989846f5a45301a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b1601000000000000000003101e3246576379899eabbccfdedec8b39e89735e49341e0000000000162b40566b8095abc0d5eae0d3c9c6c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c2c6cfdcecdec8b39e89735e49341e000000000000000000000a1f3346586d8297adc2c5b09b858399aec3bcab95806b5544311d080000000000000000000000000000011426374a5b6a7f94a3b5c7c2b49f8b7963546277899eb3c2d2c1b49f8b79635443301e0e0000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c1600000000121d3144556277889eabbcc6b5a397816c5f4d3d2c2a2a2a2a2a2a2a2a27241d120400000000000000000000152a3f546a7f94a9bfc7b19c87725c47321d001024394d5f6774747474747474747474747474747474747474747474747474747474746f6655412d180000000000000000000000000000061016182020202020202020202020202020202020202020202020202020202020202020202020201b19120900000000000000000000060c0e202020201d150b080100000002090b181f20202018161006000000000000000000000000000000000000000000000000000000000000000000040a0c101315161514110d0b05000000000000000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b16010000000000000000102132424b6175869ca7b9c9daecdec8b39e89735e49341e0000000000162b40566b8095abc0d5eadccfc6c3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5babec8d6e6dec8b39e89735e49341e000000000000000000000c21364c61768a9fb4c9c8ab96817f94a9c4c9b39d8874604b36200e00000000000000000000000000000009192d3d4b6073859ba9bacdbaa99b8573606d8298a8b9ccc8b5a3947f6a5b49362513000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c1600000000011527374859657b8d9fb4c0c1b19f927d675b49392816141414141414110f09000000000000000000000000152a3f546a7f94a9bfc7b19c87725c47321d000a1d30404d515f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a5548372512000000000000000000000000000a18232b2e353535353535353535353535353535353535353535353535353535353535353535353535302d261a0c00000000000000000e19202335353535322a201d1509000a161e212d353535352d2a2317090000000000000000000000000000000000000000000000000000000000040a0c171f2125292a2b2b29262220190e0c06000000000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b1601000000000000000d1d2e3f4f606d8298a4b5c5d6e7f3dec8b39e89735e49341e0000000000162b40566b8095abc0d5e2cfbeb2ada0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a5abb8c8dadec8b39e89735e49341e000000000000000000071b2e3e53697e93a8bacdbbaa917c7a8ea6b7cbb8a6917c66513c2b19050000000000000000000000000000000f1d31445563798b9fb4c1c7b4a3937e697b90a0b2c6cebbaa9b8573604b3d2c1808000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c16000000000009192b3b4c5e6b8095a2b4c4bdb49e8a79635745321e130100000000000000000000000000000000000000152a3f546a7f94a9b8b8b19c87725c47321d0000122230393c49494949494949494949494949494949494949494949494949494949494541372a1a08000000000000000000000000061828353f434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4542382a1a090000000000000e1e2c35384a4a4a4a473f353127190a1a283236434a4a4a4a423f352717060000000000000000000000000000000000000000000000000000020b171f212933363b3e4040403f3c38352b23211a0f0600000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b160100000000000009192b3b4b5d697e93a0b2c2d2e4f4f3dec8b39e89735e49341e0000000000162b40566b8095abc0d5dac6b2a0988a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a909aabbed2dec8b39e89735e49341e0000000000000000000d22364a5c71869bb1c6c9b49f8a7673889db2c8c4af99846f5a48352009000000000000000000000000000000011426374a5b6a7f94a3b5c7c1b39e8876869cb1becfc2b49f8c79645544311f0e00000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160000000000000d1d2f404b6072849aa6b7c8b9a89c8675604b42311f0f00000000000000000000000000000000000000152a3f546a7f94a3a3a3a39c87725c47321d000004121d24273434343434343434343434343434343434343434343434343434343434302d251a0c000000000000000000000000001023354653586060606060606060606060606060606060606060606060606060606060606060606060605b5548382612000000000006192c3c495e6060605f5d554b443727162838454b585f606060585245352310000000000000000000000000000000000000000000000000000a161e2933363a464c505355565554514d483c38352c20190e000000000000000000000000162b40566b8095abc0d5c0ab95806b56402b16010000000000021527374859657b8c9fb4becfe0f0f7f3dec8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad9882737575757575757575757575757575757575757575757c90a5bad0dec8b39e89735e49341e0000000000000000031729394f647a8fa3b5c9c9af9a856f6c8197acc4cab49f8b78624d3726140100000000000000000000000000000009192d3d4b6073859ba9bacbb8a69a859aa4b6cac9b6a495806b5c4a3726140000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c1600000000000000111c3043546277889daabbc6b5a498826d604e3d2d1b0b000000000000000000000000000000000000152a3f546a7f8d8d8d8d8d8d86725c47321d000000000a10121f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1a1812080000000000000000000000000000162b3f53646d757575757575757575757575757575757575757575757575757575757575757575757575706655422d1904000000000c2035495a7075757575726a605544311e324556606d747575756d63523f2a090000000000000000000000000000000000000000000000010f1a28323a464c53586165686a6b6a6966625a564e493d352c1e140100000000000000000000162b40566b8095abc0d5c0ab95806b56402b160100000000010f1d3144556277889daabbcedce2dfe2ebdec8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e6060606060606060606060606060606060606060657b90a5bad0dec8b39e89735e49341e00000000000000000a1e3346576d8297acc2cfbcab947e69657b90a6b7cbbcab95806a5544311d08000000000000000000000000000000000f1d31445563798b9fb4c1c5b4a29aa2b4c2cfbcab9c8674604b3d2d19090000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c1600000000000000011426364759657b8c9fb4bfc2b2a0927e685b4a3929170300000000000000000000000000000000000c21374c617678787878787878624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a84705b45301b06000000000e23384d63788a8a8a8a877f73604b3b2b364b6074828a8a8a8a826d583727150200000000000000000000000000000000000000000003111f2d38454b58616870767a7e7f80807e7b78726b635b4d493c311c1408000000000000000000162b40566b8095abc0d5c0ab95806b56402b1601000000000f1f30414b6074849aa6b7c8d8d9cecaced9dec8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e584b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b50657b90a5bad0dec8b39e89735e49341e00000000000000000c21364b6176899eb4c9cab49f8b77626074889db3c8c9b29d8874604b35200d00000000000000000000000000000000011527374a5b6a7f94a3b5c7c0b4b0b4c0d1c3b49f8c7a645645321f0f000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c16000000000000000008182a3b4b5d6a7f94a1b3c3beb49f8a79635746331e1402000000000000000000000000000000000a1f33475861636363636363625a4935200b0000000000000000070b0f1314100b080100000000000000000000000002090b140b0802000000000000000000000000000000000000182e43586d83989f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a85705b45301b06000000000b20354a6074899eaa9f9c94826d59483440556a80959fa99f9b86715544311d0800000000000000000000000000000000000000000311212f3d4a56606a767e858b909395959594918d8780796e635a4e42302618080000000000000000162b40566b8095abc0d5c0ab95806b56402b16010000000b1b2d3d4d5f6c8196a2b4c4d5cdc8bbb4bbc8d9c8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e5843353535353535353535353535353535353b50657b90a5bad0dec8b39e89735e49341e00000000000000071b2d3e53687d93a8b9cdc6af9a846f59556b8196abc2cbb7a6917c66513b2b19050000000000000000000000000000000009192d3d4b6073859ba9bacec8c5c8d1cab6a596816c5d4b38281501000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160000000000000000000d1d2e3f4a60728399a5b7c8baa99c8675614b423120100000000000000000000000000000000004172a3a474c4e4e4e4e4e4e4d493c2b190600000000000008131c2025292925201d1409000000000000000000000a151d2029201d15090000000000000000000000000000000000182e43586d8398adb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b09a85705b45301b0600000000071c30435470859bb0b4b29f8b77624c37465c71869bb1bab49f8a75604b36200b000000000000000000000000000000000000000011212f3f4c5b63747f89939b9faaa8aaabaaa9a6a59d968c837868604b433626140100000000000000162b40566b8095abc0d5c0ab95806b56402b160100000818293a4a5b677d929fb0c0d1cdbcb0aa9faabbcec8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e2020202020202020202020202020263b50657b90a5bad0dec8b39e89735e49341e000000000000000d22364a5c71869bb0c6cdbaa8927d68524e63798ea3b5c9c4ae99846f594834200800000000000000000000000000000000000f1d31445563798a9fb4c9dfdadcdcc7b29d8775614b3f2e1a0a00000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c1600000000000000000000111c3043546176879daabbc7b6a498826e604e3e2d1c0c000000000000000000000000000000000c1c2a333738383838383838352b1e0e0000000000010f182530353a3e3e3a353126191002000000000000000a1a2832363e363127190b00000000000000000000000000000000182d42586d8297adc8d8cacacacacacacacacacacacacacacacacacacacacacacacacacacacacac5b09a85705b45301b060000000000132536576c8197acc1bcab927d67523d455a6f859aafc4baa98e79644e39240f000000000000000000000000000000000000000e1f2f3f4c5d657986949ea7b0b4bbc8bfc0bfbec3b6b2ab9f988a7e6c605443301c1502000000000000162b40566b8095abc0d5c0ab95806b56402b16010000132536465863798a9fb4bdcdd1c0b09e968c9fb4cac8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e190b0b0b0b0b0b0b0b0b0b0b0b10263b50657b90a5bad0dec8b39e89735e49341e000000000000031628394e64798ea3b5c9c9b49f8a76614b4a5b71869bb1c8cab49f8b78624d36261401000000000000000000000000000000000a1d32455664798b9fb4cadfded9d5c0ab96806b5b4a3827150200000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c1600000000000000000000001325364758647a8b9fb4bfc3b2a0937e695c4a3a291704000000000000000000000000000000000c171f212323232323232320190e0000000000000f1f2c36434a4f5353504b44372d20100100000000000a1b2838454b544b4437291b0b000000000000000000000000000000152a3f556a7f94aabbcee2dfdfdfdccec5c2bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb09a85705b45301b06000000000013283e53687d93a8c9c9ab96806b564141566b8196abc0c7a7927d68523d281300000000000000000000000000000000000009192c3d4b5d657b8a9ca4b3b9c5cacac5c0bec0c3c9cac9bcb5a89f938172604b43322010000000000000162b40566b8095abc0d5c0ab95806b56402b1601000e1c3043546176879ca8bacdd4c4b4a296808a9fb4c9c8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000000000091e3245576c8197acc1d2c4ad98836d57463d54697e94aabbcebbaa957f6a5443301c080000000000000000000000000000000a1b2e3f4b6074869caabbceccc8c4c7c9b49f8b79635645311d1100000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c16000000000000000000000008182a3a4b5c697f94a1b3c3beb49f8b7a645846331f140200000000000000000000000000000000040a0c0e0e0e0e0e0e0d0b060000000000000d1d2c3d4954606468696560554a3e2d1f0f00000000031628394556606960554639291a0a00000000000000000000000000000d22384d62788b9fb4c1d1e4f4e1cebeb2ada6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69a85705b45301b0600000000000f243a4f647a8fabbcc4af9a846f5a3b3d52677d92a7c7c1ab96816c56412c17000000000000000000000000000000000001152737495b657b8b9ea8b5c2ccc9bcb5b0aba9aaaeb4bac6cdc6bab49f96816c614f3e2d19090000000000162b40566b8095abc0d5c0ab95806b56402b16000e1e2f404a60728399a5b6c6d7c7b7a69a84758ba8bacdc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e0000000000000b21364b6075899eb3c9cbb8a6907b665039374c62778b9fb4cac8b29d8774604b35200d0000000000000000000000000000031628394b5d6b8096a4b5c8c5b8b3afb3bfbaa99b8574604b3f2e1b0b000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160000000000000000000000000c1c2e3e4f616e8399a5b6c7baa99d8776614c4332201000000000000000000000000000000000000000000000000000000000000000000005192b3b495b63727a7e7e7a73645c4a3d2d1a07000000091e32455760747e7461574638281808000000000000000000000000000b2035485a6a8095a3b5c6d7e9dac5b2a09891919191919191919191919191919191919191919191919185705b45301b0600000000000b21364b60768a9fb4c8b39e88735948394e63798ea9bac4af9a856f5a3c2b190500000000000000000000000000000000081d3144556379899ea9b9c6ccbeb2ab9f9a969495989fa8b4bac6cdbdb09f947f695c4a3726140100000000162b40566b8095abc0d5c0ab95806b56402b160a1a2b3c4c5e6a7f94a1b3c3d3cebaa99d8777778ca1c6d7c8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e0000000000071a2d3d53687d92a8b9ccc8b39e8874604b353447596f8499aec5cab7a5907b66503b2a1805000000000000000000000000000b1e324557647a8c9fb4c2ccb8a79e99a1b3c7b5a395806b5d4b392917030000000000000000001d32475d72879cb2c7d6c0ab96816b56412c16020005192b3c5d72889db2c7d5c0ab95806b56402b1600000000000000000101010100102032434c6176879da9bac7b6a599836e614f3f2e1c0c00000000000000000000000000000000000000000000000000000000000000000b203448596379858f93938f867a645b4a36210c0000000b21364b6075849384756156453625130000000000000000000000000005192b3c4b6073859ba8b9cde1d7c2ad98827c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7b654f3a2510000000000000091e32455672879cb1c7b8a68c77624c374b60758a9fb4c8b39e89735a4835200b0000000000000000000000000000000417293a4b6073859ba7b9c7ccbcafa0988c85817e80838a949fa8b9c5cdbdb49f8c7a645544311d0900000000162b40566b8095abc0d5c0ab95806b56402b16162838485a657b8d9fb4bfd0cebeb49f8b7a64778da2b7ccc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e00000000000c21364a5b70859bb0c6d3c2ab96816c5544312a3b52677c91a7b9ccc3ae99836e5948341f080000000000000000000000000b1b2f3f4b6075879cabbccfc0b39e898499afbfc2b49f8c7b655746331e120000000000000000001d32475d72879cb2c7d6c0ab96816b563a2c1d150f0d2035485a74899eb4c9d4bea9947f69543f2a140000000000060c0e161616161616161f334658647a8b9fb4bec3b3a1947f695d4b3a2a1808000000000000000000000000000000000000000000000000000000000000000d22374d6278899ba3a8a8a49c8a79634e3a2a18040000152a3f556a7f94a29a8474605443301c0f000000000000000000000000000e1d31445563788a9eb4bfcfdec9b39e89786666666666666666666666666666666666666666666666655d4b37230e00000000000003162838586e8398adc3c5a5907b66503b445571869bb0c6b8a78d77624d38220d0d0d0c0a04000000000000000000000a1f334758697f94a3b5c5cfbeaf9e958278706b696b6e767e8a9ea7b9c9cebbaa9c8673604b37261401000000162b40566b8095abc0d5c0ab95806b56402b161e3245566278899eabbccfd2c1b1a0937e6863788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e00000000021628384e63798ea3b4c8cab6a48e79644f372720364b6075899eb3c9cab49f8b77624c3625130000000000000000000000031729394b5d6c8196a5b6c9c7b4a2927e7a8fa1b2c6bcab9d8775614b402f1d0c00000000000000001d32475d72879cb2c7d6c0ab96816b58493d3228242228394d62788da8b9ccd8c8a8927e68533d2813000000000e1920232c2c2c2c2c2c2c2c293a4a5c697e93a0b2c2bfb49f8c7b64584736251300000000000000000000000000000000000000000000000000000000000003172939586d8297a7b5c1c2b6a89a846f5847331f0a000013283d52687d92a0a2998372604a3d2d1a0700000000000000000000000001152737495a687e92a1b2c4d4ccb9a79a8473605151515151515151515151515151515151515151514f4b3f2e1c08000000000008131c2a3f546a7f94a9bfbfa9947f6a543f37576d8297acc2c5a6917b66513c26232323211f170c0000000000000000021527374c6176899eb3c1d2c5b2a095806e625a5654555761697a899eabbccfc8b5a4937d685544311d08000000162b40566b8095abc0d5c0ab95806b56402b2031424b6074859ba7b8c9d6c5b5a397826d6063788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e00000000091e3245566c8196acc1d1c9b19c86725c4a36191d3245566c8297acc3cebbaa947f6a5443301c07000000000000000000000c1e334657657b8d9fb5c3cdbaa99a84706e8399a8b9c9b6a597826d5e4c3b2a1804000000000000001d32475d72879cb2c7dbc6b19b8576635b4b45383938384557687e93a8c6d6cebbaa8f7b65503a25100000000e1e2c3538414141414141414141413e4e606e8298a4b6c7bbaa9d8776615443301c1100000000000000000000000000000000000000000000000000000000000a1e33465774899eb3c5d2d3c6b59f8b77614c37220c000010253a4e5f6d8298a2a1947f695b4a3621120000000000000000000000000009192c3c4e606e8399a6b7c9d6c5b4a2947f6a5c4a393c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3a372e2111000000000311182530353b50667b90a5c4c3ad98836e58383e53697e93a8c9bfaa957f6a5540383838383633291c0c00000000000000081d3144556a7f95a7b9ccccb8a798826d624d493c3f39464b5c667c8d9fb5c8d2c2b29d8774604b35200c000000162b40566b8095abc0d5c0ab95806b56402b2d3e4e606d8297a3b5c5d5c9b8a79b8575604d63788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000000b21364b6075899eb3c8cfbcab947f6a553e2d1b1528384f657a8fa5b6cac8b29d8773604a35200c0000000000000000000c1c2f404c6176879dabbccfc2b49f8b79636277899eb3c0c3b19f917c665947341f13000000000000001d32475d72879cb2c7dcc9b5a39b87796a6056514e4d4f566075879db2c7dcc9b49f8a75604b36210b000006192c3c494d565656565656565656565656566175869ca9bac8b7a6998372604a3f2e1c08000000000000000000000000000000000000000000000000000000000c21364b61768ba7b9cce2e3cfbcab8e79644e39240f00000b1e31414b6073849aa69f8c79634e402f1c09000000000000000000000000000e1e31424c6176889dabbccfd1c0b49f8b7a64574632272727272727272727272727272727272725231c11030000000011212e36434a4d4d62778ca6b8c7b19c8772564d4d4f657a8fabbcc3ae99836e594d4d4d4d4d4c463a2917040000000000000b20364b6074889db3c5d6c8b39e8976614c43352c2928323e4c5e6d8297aabbcecbb7a5917c67513a2a17040000162b40566b8095abc0d5c0ab95806b56402a3a4a5c687e939fb1c1d2cfbcab9e897862564d63788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e000000061a2c3d52677d92a7b8cccab59f8c78624d3822100a22374b5d72879cb2c9cab6a5907b65503a2a18040000000000000004172a3a4c5e6d8297a5b7c9c9b6a4957f6a5b59687e93a2b4c7bdb39e8877614c42311e0e0000000000001d32475d72879cb2c7dcd2c1b5a59c8b7f756c6664626469748399a5b6cad5c5b09b85705645321e0900000c2035495a636b6b6b6b6b6b6b6b6b6b6b6b6b6b6b798a9fb4c9c4b3a1947f6a5d4b37230d000000000000000000000000000000000000000000000000000000000b20354b60748a9fb4c8d7d8c9b6a48d77624d38220d000001131d3144556177889daa9a85705e4c38240e0000000000000000000000000000131f334758657b8d9fb5c2d2cebbaa9c8675614b40301d111111111111111111111111111111100e080000000000081c2e3f4b546062626273889eb3c8b49f8b756262626262768a9fb5c7b29d8772626262626262615846331f0a00000000000114263751667c91a6b7cbcebbaa957f6a584733201914161e2f404d62788b9fb4cad4c3af9a846f5847331f0a0000162b40566b8095abc0d5c0ab95806b5640374758647a8b9fb4bdced0bfb49f8d7c665a494d63788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e0000000c2135495b70859ab0c5d6c7af9a85705a4835200b081b2e3f556a7f95abbccfc3ad98836e5947341f0a000000000000000d1f334758667c909fb1c3cfbcab9c8674604b4a6072849aa9bacbb8a699836e604e3c2b180800000000001d32475d72879cb2c7d8c8bbb4b3a99f9589817b7977797e8799a1b3c3d3ccb8a7927d68523828160300000e23384d637880818181818181818181818181818180869bb1c6d0bfb49f8c7b65503b2a1805000000000000000000000000000000000000000000000000000000081c3043546f8499aabac6c7baab9c86715a4835200b000000011527374759677d92a4a2907b66513c2b19060000000000000000000000000004172a3a4c5e6c8196a4b5c7d7c8b6a497816c5e4c3b2b18080000000000000000000000000000000000000000000e23374b5d657377787878859bb0c5bcab907c787878787878879db2c7b59f8d7978787878787876614c36210c0000000000081d3144556d8298adc4d4cab49f8b77624c3a2917060003112035485a6e8399aec8d8cab49f8b77614c37210c0000162b40566b8095abc0d5c0ab95806b564044556176879da9bacdd3c3b3a1957f6a5e4c3c4d63788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e0000021528384e63798da2b4c8cdbaa9937d68533c2b1905001023384d62788c9fb5cac9b49f8a77614c3722110000000000000d1d30414c6176889db3bdcec4b59f8d7b655645435463798b9fb4c2c4b3a1927d685a4936261401000000001d32475d72879cb2c7cebbaa9f9da6b4a79e96918e8d8f949da5b3bfcfcfbfb39e8975604b36210b00000010253a50657a8f9696969696969696969696969696969ba3b5c9decebbaa9b86715948341f0b000000000000000000000000000000000000000000000000000000011426364f647a8c9fa8aeafa99f8d7c66513c2b190500000005172735414d5f71869caf9a85705a4835200b00000000000000000000000000000c1c2f404b6074869ca9bacdd3c2b19f917c66594836251300000000000000000000000000000000000000000010253a50657b898c8d8d8d9ba2b4c8c9ab9a908d8d8d8d8d8d9da5b7cabcab9f8e8d8d8d8d8d8d816c57422d1700000000000b20354b6074899eb3c9dac4af9a846f5948341c0c00000005192b3c51677c91aabbcecebbaa927d68523d28130000162b40566b8095abc0d5c0ab95806b56404b6073849aa5b7c7d7c7b6a5998372604a40384d63788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000010263b50657b90a5bad0dec8b39e89735e49341e0000091d3245566b8196abc0d1c9b49f8a76614c36210e00000b2035485a70859aafc6cebaa9947f69543f2e1c080000000005182a3b4d5f6e8298a6b7cbcbb8a697826d5d4b3836495b6a7f95a4b5c9bfb49e8a78625443301c0f000000001d32475d72879cb2c7cab49f8c889ca4b3b3aca6a3a2a4a9b2b7c3cfcdbfb2a0927d675645321e0900000010253a50657a8fa5ababababababababababababababb1b5c2d2ddd9c8b5a38c77624c37220d000000000000000000000000000000000000000000000000000000000822364a5c677d8a959999958b7e685e4c381e0e0000000113233545525f676f7f94a9a28d78624d38230d000000000000000000000000000000111d32455663798b9fb4c0d0cebdb39e8977625443301c0f00000000000000000000000000000000000000001a2f44596f8499a7a2a2a2b0b4c0d1c9b8aba6a2a2a2a2a2a2b2b7c3d4c9bcb5a3a2a2a2a2a29a85705b36251300000000000f24394f64798ea7b9ccd8c8a9947e69543b2a1800000000000e21364b61768a9fb4cad8c8ad97826d583a29170400162b40566b8095abc0d5c0ab95806b564d5e6b8095a2b4c3d4cdbaa99c877661544330384d63788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abc0cdcdc3ad98836e58432e1903000000000000000000000010263b50657b90a5bacdcdc8b39e89735e49341e00000b20364b6075889eb3c8d5c5ae98836e5846331f0a000006192b3c53687d92a8bacdc7b19c87725d4b37230c000000000c1f344759677c91a0b2c4d0bfb39d8876614c3f2e2c3d4b6074869cabbcccb9a89a8473604b3d2d1a0a0000001d32475d72879cb2c7c6b19b85788699a1b3b8c4b9b7b9bec7cacac7bab4a198826e5f4d3828160300000010253a50657a8fa5bac0c0c0c0c0c0c0c0c0c0c0c0c0c6c8c8c8c8c8c8c1a38e79644e39240f00000000000000000000000000000000000000000000000000000000071b2e3e4d5f67777f8484807868604e402f1d000000000b1e314152636d7c84889db2a9947e69543f2914000000000000000000000000000000021528384a5b697f94a2b3c5d5ccb8a7998472604a3d2d1a0a000000000000000000000000000000000000001a30455a6f859aafc5b7b7c5caced8d6c9bfbbb7b7b7b7b7b7c7cacfdadacfcab8b7b7b7b7b39e88735443301c070000000014293f54697e94a9c5d6cebbaa8e79644f39240f00000000000a1e33465770859bb0c5dbc7b29d87725846331f0a00162b40566b8095abc0d5c0ab95806b565b667c919eb0c0d0cebdb49f8a7a6458463625384d63788da2b8cdc8b39e89735e49341e0000000000162b40566b8095abb8b8b8b8ad98836e58432e1903000000000000000000000010263b50657b90a5b8b8b8b8b39e89735e49341e0006192c3c52677c91a7b8c8c8b8a7917c66513a2917040000000e21364b61768a9fb4c8c8b6a48f7a65503a2a170400000c1c31414c6277899eb3bec8c6b3a1927d67584733211d314455647a8c9fb4c3c6b4a2947f695b4a3828150200001d32475d72879cb2b2b2ac97826c7683939ea6b0b4bbc8bdbcc3b6b2a99f958374604b41311a0a0000000010253a50657a8fa5b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a48e79644f39240f0000000000000000000000000000000000000000000000000000000000102030414d59626a6f6f6b625a4e423122120000000011253a4e606d8191999da6b7ae99836e59442e19000000000000000000000000000000000a1a2d3d4a6072849aa7b8ccd5c5b3a1937e695b4a38281502000000000000000000000000000000000000182d42586d8297adb3b3b3b3b4bbc8d8d6c5b8b3b3b3b3b3b3b3b5bcc9dad5c5b8b3b3b3b3b3a68a75604a35200b00000003182d43586d8298adc2d7c9b49f8a75604b36200b000000000003172939576c8197acc1d6cab6a58b76614c36210c00162b40566b8095abc0d5c0ab95806b5763798a9eb3bccdd1c1b19f927d675c4a3a2923384d63788da2b8cdc8b39e89735e49341e0000000000162b40566b8095a3a3a3a3a3a398836e58432e1903000000000000000000000010263b50657b90a3a3a3a3a3a39e89735e49341e000c2035495a6f849aafb2b2b2b29e8874604b36200c000000000a1e3346576d8298adb2b2b2ad98826d5847331f0a0004172a3a4e5f6e8399a7b2b2b2b2a899846f5f4d3a29171527374b5c6c8196a5b2b2b2b29f8b79635645321d0900001d32475d72879c9d9d9d9c917c6761727e88939b9faaa7a8a7a5a59d968a8073605645322313000000000010253a50657a8f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d8e79644f39240f0000000000000000000000000000000000000000000000000000000000021323303b484d55595a564d493c312414040000000215273852687d92a0afb2b7c4b29c87725d47321d00000000000000000000000000000000000f1c3043546277899eb3beced0bfb49f8b79635645321d11000000000000000000000000000000000000152a3f546a7f949e9e9e9e9e9faabbceccb8a79e9e9e9e9e9e9e9fabbccfccb8a79e9e9e9e9e9b88735443301c07000000031628395b70869bb0c5dbc6b19c86715544311d0800000000000013283e53687d93a8bdd2d3c3a48f7a644f3a240f00162b40566b8095abc0d5c0ab95806b6175869ca8b9ccd5c4b4a396816c5f4d3d2d1c23384d63788da2b8cdc8b39e89735e49341e0000000000162b40566b808d8d8d8d8d8d8d8d826e58432e1903000000000000000000000010263b50657b8d8d8d8d8d8d8d8d88735e49341e000e23384d63788b9d9d9d9d9d9c96806b5544311d0800000000031729394f657b8f9c9d9d9d9d9d8a76614c37210c000a1f334758687d929d9d9d9d9d9d9b8a78624d41301c0c09192e3e4b6175879a9d9d9d9d9d9c8674604b36200b00001b30455b70848888888887807260546068757e858a8f929392908d8781786a6055453828150500000000000f253a4f647a888888888888888888888888888888888888888888888888888879634e39240e00000000000000000000000000000000000000000000000000000000000005131d2b34374044444038352c1e140600000000091d31455671869bb1bec8cbc9b39e89745e49341f0000000000000000000000000000000000001325364859667c919fb1c3d3cdbaa99c8674604b3f2f1c0c000000000000000000000000000000000011263b50667c8989898989888c9fb4cac8b39e898989898989888d9fb5cac8b39e8989898988867b655036251300000000091e32455774899eb3c9d9c4ae99846f593727150200000000000011263b50667b90a5bbd0d2bda7927d68523d281300162b40566b8095abc0d5c0aa95806b6e8298a4b6c6d6c8b8a69b8574604b41301f0f23384d63788da2b8cdc8b39e89735e49341e00000000000c22374c6177787878787878787877624d37220d0000000000000000000000000b21364b6075797878787878787878634d38230e00142a3f54697f888888888888878174604b3727150200000000000b22374b5d687d868888888888887d67523d2812000c21374c61768688888888888888867c665a493523130000101e324657637985888888888888887e69543f29140000192d4255667073737373726b6054434a57616870767a7c7d7c7a78726b625a4b4437281a0a0000000000000d22374b5c647373737373737373737373737373737373737373737373737373635b4a36210c00000000000000000000000000000000000000000000000000000000000000000d1820222a2f2f2b2320190e0000000000000b20364b60758a9fb5cadddec9b49e89745f49341f00000000000000000000000000000000000008182b3b4d5e6d8297a5b6c8d7c7b5a496816b5d4c3a2a1704000000000000000000000000000000000f23384c5e667373737373738298adc3b9a48f7b737373737373859bb0c6b7a28c777373737371655d4c381808000000000b21364b60758ba7b9ccd6c1ac97816c57422c17000000000000000e23394e63788ea3b8cdd4bfa9947f6a543f2a1500162b40566b8095abc0d4bfaa957f6a7f94a0b2c2d3cebbaa9d88776255443123130e23384d63788da2b8cdc8b39e89735e49341e00000000000a1f34475961636363636363636362594834200b000000000000000000000000091e324557606363636363636363635a4935200c0012273b4f6169737373737373726c605645321909000000000000081b2e3f4e606871737373737373675f4d3a2510000a1f33475861717373737373737371665e4c3c2b19050000031628394a5b63707373737373737369614f3b2712000012263848555b5d5d5d5d5d564a433639464b5357616567686765635b564d483c3126190a00000000000000081b2e3e4b4f5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d4e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000000000050b0d151a1a160d0c06000000000000000c21364b61758ba5b6cad9d6c5b19c86715c47311c000000000000000000000000000000000000000d1d30404b6175879caabbced2c2b59f8d7b655847331f1300000000000000000000000000000000091c2f404c505e5e5e5e5e6a7f94aabfbda8937e685e5e5e5e6d8297adc2bba6907b665e5e5e5b504c3f2f1c00000000000d23384d62788da2c5d6d5c0aa95806b55402b16000000000000000c22374c61778ca1c8d8d6c1ab96816c56412c1700162b40566b8095abc0d4bea9947f7b8c9fb4becfcfbeb49f8c7b655948372715050e23384d63788da2b8cdc8b39e89735e49341e000000000004182a3a474c4e4e4e4e4e4e4e4e4d483b2b180500000000000000000000000003162839454b4e4e4e4e4e4e4e4e4d493c2c1906000c2032434f545d5d5d5d5d5d5d574b453828160000000000000000102131414e525c5d5d5d5d5d5d524d41311e0a0004172a3a474c5c5d5d5d5d5d5d5d5b514c402f1e0e000000000b1b2d3d4a4e5b5d5d5d5d5d5d5d544f43321f0c0000081a2a38424548484848474035302528323639464c4f525352504d493c38342b1d140900000000000000000010202e373a484848484848484848484848484848484848484848484848484839362d1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32465772879cb2bdc4c6b9a795806b56402b160000000000000000000000000000000000000000121e324657647a8c9fb4c1d1cfbcab9d8876614c42311e0e0000000000000000000000000000000012222f383b4949494951667b90a6c5c1ac97826c57494954697e93a9bebfa9947f6a544949463b382f211100000000000f243a4f64798fa4b9ced4bea9947f69543f2a14000000000000000b20364b60758baabbced8c2ad98836d58432e1800162b40566b8095abc0d4bfaa957f889daabbced3c2b2a0947f695d4b3b2b1909000e23384d63788da2b8cdc8b39e89735e49341e0000000000000c1c2a3437383838383838383837342b1d0d00000000000000000000000000000a1b283236383838383838383838352c1e0e0000031425323b3f48484848484847413632281a0a0000000000000000031323313a3d474848484848483d3a3123130100000c1c2a33374748484848484848463c382f22120000000000000f1f2d363945484848484848483f3b322514030000000c1a262d3033333333322b201c13161e212933363a3d3e3d3b38352c2220190d010000000000000000000002101b2225333333333333333333333333333333333333333333333333333324211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283953687e939facafaea89e8977624d37220d0000000000000000000000000000000000000000031629394b5c6a7f95a3b4c6d6c9b7a699836e604e3c2c190900000000000000000000000000000004121c2326343434374d62778ca7b8c5b09b857054433a50657a8fa5c3c3ad98836e5839283126231c1103000000000010253a50657a8fa5bacfd3bda8937e68533e291300000000000000081d314455758a9fb4cad8c3ae98836e59432e1900162b40566b8095abc0d5c9b49f899da6b8c8d6c6b6a498826e614f3f2e1d0d00000e23384d63788da2b8cdc8b39e89735e49341e000000000000000c181f2223232323232323232220180d000000000000000000000000000000000a161e2123232323232323232320190e00000000071420272a333333333333322c211e160a0000000000000000000005131e25283133333333333328251e1305000000000c171f2132333333333333333126241d1204000000000000010f1a2124303333333333333329271f140600000000000812191b1e1e1e1e1d160b070003090c171e2125272827252321190e0b050000000000000000000000000000080d0f1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b263a4e606c818f979a99958a7c65594834200b0000000000000000000000000000000000000000000b1b2e3e4b6073859ba8b9ccd4c4b3a1927e685b493727150100000000000000000000000000000000090f111e1e2034485973889eb3c8b49f8975604b364c61768ba5b7c7b19c87725745321e160e0c0700000000000010263b50657b90a5bad0d2bda8927d68533d2813000000000000000215274a5f74899fb4c9d9c4ae99846f59442f1a00162b40566b8095abc0d5cdbaa89fa8b8c4d5ccb9a89c8675614b433221110000000e23384d63788da2b8cdc8b39e89735e49341e0000000000000000040a0c0e0e0e0e0e0e0e0e0d0b0500000000000000000000000000000000000003090b0e0e0e0e0e0e0e0e0e0c06000000000000030c12141e1e1e1e1e1e1d170b0903000000000000000000000000010b11131c1e1e1e1e1e1e12100a01000000000000040a0c1c1e1e1e1e1e1e1e1c110f0900000000000000000000070c0e1b1e1e1e1e1e1e1e14120c0300000000000000000406080808080801000000000000030a0c10121312100e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f314251626c7a8184848077655d4c3b2b180500000000000000000000000000000000000000000000101d31445562788a9eb4becfcfbfb49e8a79635544311d10000000000000000000000000000000010f1a21242f2f2b3b5a6f849aafc4baa88d78634e38465872879db2c7b49f8a76604b362e2b24211a0f010000000011263b51667b90a6bbd0d2bda7927d68523d281300000000000000001f34495e74899eb3c9d9c4af9a846f5a452f1a00162b40566b8095abc0d5d7c6bab4bac6d5cdbcb39e8a79635746322514030000000e23384d63788da2b8cdc8b39e89735e49341e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e141620202020202020202020202020202020202020202020202020202020100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214243444515d646c6f6f6a62594c3f2f1d0d000000000000000000000000000000000000000000000001142637495a687d92a0b2c4d4cdb9a89b8573604b3f2e1b0b00000000000000000000000000000f1f2d363944444444566b8196abc0c6a7917c6752443a596e8499aec3bcab8f79644f44434039362d1f100300000010263b50657b90a5bad0d2bda8927d68533d2813000000000000000a1f344a5f74899fb4c9d9c4ae99846f59442f1a00162b40566b8095abc0d5e4d7cdc9cdd7d0c0b09e917c665b4939291606000000000e23384d63788da2b8cdc8b39e89735e49341e00000000050b0d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f15130c030000000000000000000000000000000001080b0e121415161514110e0b0700000000000000000000000000000000000000000b141b1d2020202020202016140e040000000000000000090f111c1f2020202020201e0c0b040000000000000000000000020b11132020202020202020201b120600000000000000000000000000000000000000030d1315202020202020201f1b130b070000000000000000000000000000000000000000000000081621292b3535353535353535353535353535353535353535353535353535353526231c110300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061626343f4b4f575a59554d483b2f21110000000000000000000000000000000000000000000000000009192c3c4e5f6e8398a6b7c9d7c6b5a395806b5d4b39291703000000000000000000000000071a2d3d4a4e5959595959677d92a7bcc0aa95806b595959596a8095aabfc9a8937d68595958564e4a3d2e211000000010253a50657a8fa5bacfd3bda8937e68533e291300000000000000081d314455748a9fb4c9d8c3ae99836e59442e1900162b40566b8095abc0d5eae9e1dee1d4c3b4a295806b5e4d3d2c1b0b00000000000e23384d63788da2b8cdc8b39e89735e49341e0000000e19202235353535353535353535353535353535352a2720150700000000000000000000000002090b141d202327292b2b2b292723201c130b09020000000000000000000000000000000e1c282f32353535353535352c29211608000000000003111c2326313535353535353533221f180c00000000000000000006141f26293535353535353535352f2416060000000000000000000000000000000000071520282a35353535353535343028201c13080000000000000000000000000000000000000000041626333d404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b382f211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816202e373a4245444037342b1d110300000000000000000000000000000000000000000000000000000e1e31414c6176889dabbccfd2c1b49f8c7b655746331e130000000000000000000000000c21364a5b636e6e6e6e6e6e798ea3b9c4ae99846f6e6e6e6e6e7c91a6bcc1ac97816e6e6e6d6b635b4b3f2e1b0800000f243a4f647a8fa4b9ced3bea9947e69543f2914000000000000000b20354b60758aaabbced8c2ad98836d58432e1800162b40566b8095abc0d5eafcf6ead7c7b7a59a8473604b40301f0f0000000000000e23384d63788da2b8cdc8b39e89735e49341e00000e1e2b35384a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3f3c32251503000000000000000000040a151d20263135393c3f4041403e3c39353025201d150a030000000000000000000000000b1c2c3a44474a4a4a4a4a4a4a413d342616040000000111222f383b464a4a4a4a4a4a4a4937342a1d0c00000000000000021424313a3e4a4a4a4a4a4a4a4a4a4234241200000000000000000000000000000000031525333c404a4a4a4a4a4a4a49453d353025180a000000000000000000000000000000000000000e213344515660606060606060606060606060606060606060606060606060606060504c3f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b22252c2f2f2b2220180d0000000000000000000000000000000000000000000000000000000000131f334758657b8d9fb5c2d2cfbcab9d8776614c41301e0e00000000000000000000000e24394e63798384848484848399aec4c9b49e8a838484848484849aafc5c8b39d88838484838079655d4b37220800000e23384d63788da2c7d7d5bfaa95806a55402b15000000000000000c21374c61768ca1c8d8d6c1ac96816c57412c1700162b40566b8095abc0d5eafdefe2cdbaa99d8777615544312212010000000000000e23384d63788da2b8cdc8b39e89735e49341e0005192b3c484d5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f544f4332200c00000000000000010c171f28323637444b4e515455565554514e4a43363631271e160a000000000000000000000014283a4b575d6060606060606056514434210e0000000f1f2f404c505c5f6060606060605e4c473b2a18040000000000000b1f31424e5360606060606060605e52422f1b070000000000000000000000000000000d2033435055606060606060605e5a524a4336281a0a00000000000000000000000000000000000014293d51626b75757575757575757575757575757575757575757575757575757575655d4c38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f171a1a150d0b0500000000000000000000000000000000000000000000000000000000000004172a3a4b5d6b8096a4b5c7d7c9b7a598826d5f4d3c2b1808000000000000000000000d22374c62778c999999999999a1b3c7ccb9a89e9999999999999aa2b4c8cbb8a69d99999998958c7b654f36251300000c21364c61768ba9bacdd6c1ac96816c57412c17000000000000000e23384d63788da2b8cdd4bfaa947f6a553f2a1500162b40566b8095abc0d5eaefdfcebeb49f8b7a64594737261404000000000000000e23384d63788da2b8cdc8b39e89735e49341e000b2035485a6274747474747474747474747474747474746a614f3c271300000000000009141d293338454b5155606367696a6b6a6966636054524b453832281a12010000000000000000001b2f44576972757575757575756b62513d2914000009192c3d4c5e66717475757575757573615947341f0b00000000000011263a4e60687575757575757575705e4a35200a00000000000000000000000000000013283c50616a75757575757575747068605445382815020000000000000000000000000000000000162b40566b808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2f3f4b6074869ca9bacdd4c3b2a0927d675a48362614010000000000000000000b1f34485973889eaeaeaeaeaeb3bfd0d6c6b9b4aeaeaeaeaeaeafb4c0d1d5c4b8b3aeaeaeadaa99846f5443301c07000a1e33465774899fb4c9d8c3ae99836e593626140100000000000010253b50657a90a5bacfd2bda8927d68533d281300162b40566b8095abc0d5eae3d2c1b19f937e685c4a3a2a190900000000000000000e23384d63788da2b8cdc8b39e89735e49341e000d22384d62788b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7f6a543f2a1500000000000e1926313a474c5660676e74787c7e8080807e7c78746e6760564b45382f1c140800000000000000001d32475d72878a8a8a8a8a8a8a806b56412c160101142637495b667c868a8a8a8a8a8a8a8877614c37220c00000000000013293e53687e8a8a8a8a8a8a8a8a75604a35200b000000000000000000000000000000152a40556a7f8a8a8a8a8a8a8a89857d72605645321d110000000000000000000000000000000000162b40566b80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d32455663798b9fb4bfd0cfbeb39e8978625443301c1000000000000000000005182a3b5a6f849aafbfbcbcbcbec1cbd8d6ccc9c3bcbcbcbcbcbcc0c3ccdad5cbc8c3bcbcc8b49e8974604a35200b00031729395c71869cb1c6dbc6b09b86715443301c0800000000000013283d52687d92a7bdd2d5c4a58f7a65503a251000162b40566b8095abc0d5e7d5c5b5a397826d604e3e2d1c0c0000000000000000000e23384d63788da2b8cdc8b39e89735e49341e000d23384d62788d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f947f6a553f2a1500000003111e2b37444b58616a757c83898e919495969593918e89837c746a60564c4030261809000000000000001d32475d72879c9f9f9f9f9f96816b56412c1600091d31445563798a9b9fa99f9f9fa0917c665947341f0b00000000000013293e53687e939f9f9f9f9f9f8a75604a35200b0000000000000000000000000000000b20354a60728399a49f9f9fa79e9a928374604b402f1c0c00000000000000000000000000000000162b40566b8095abb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a5907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384a5b697e93a1b3c5d5ccb9a79a8473604b3e2d1b0b00000000000000000014293e53697e93a1a6a7a7a7a8adbacbd3c3b6b2a7a7a7a7a7a7aaafbcccd2c1b5b0a7a7a7a7a88d78624d38230d0000192e43586e8398adc3d8c9b49f8975604b35200b000000000002152838566b8196abc0d6cbb8a68c77614c37220c00162b40566b8095abc0d5d9c9b8a79b8574604b42312010000000000000000000000e23384d63788da2b8cdc8b39e89735e49341e000d23384d62788da2b4b4b4b4b4b4b4b4b4b4b4b4b4aa947f6a553f2a1500000011212f3c4855606976808891989ea7a6a9aaabaaa9a6a79e9891887f75665e4b43362619090000000000001d32475d72879cb2b5b5b5ab96816b56412c1609192d3d4b6073859ba8b4bab5b7a597826d5e4c3b2a180400000000000013293e53687e93a8b5b5b5b59f8a75604a35200b000000000000000000000000000000071c3043546175869ca7b9c5b9b3afa196816c5e4c3a2a1704000000000000000000000000000000162b40566b8095abc0cacacacacacacacacacacacacacacacacacacacacacabaa5907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2d3d4a60728399a7b8ccd6c5b4a2947f6a5c4a3928160300000000000000000b20364b6074838e91929292939cadc5cab6a59c929292929292959eafc3c9b5a39b9292929292917b66513c26110000152a3f556a7f94aac7d7cdbaa98e78634e39230e0000000000091d3245566f859aafc4dac8b39d88735947341f0b00162b40566b8095abc0d9cebcab9e897862564532241402000000000000000000000e23384d63788da2b8cdc8b39e89735e49341e000d23384d62788da2b7c9c9c9c9c9c9c9c9c9c9c9bfaa947f6a553f2a150000081c2f3f4b5a62737e89959ea7aeb3b8c5bebfc0bfbec5b9b3aea69d94877c6b6054443726140100000000001d32475d72879cb2c7cac0ab96816b56412c161527374a5b6a7f94a3b5c6cebcab9d8776614c40301d0c0000000000000013293e53687e93a8bdcacab59f8a75604a35200b0000000000000000000000000000000013253646576379899eabbcccc9bfb59f8d7b655847331f13000000000000000000000000000000162b40566b8095abc0d5dfe0d2c9c6c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0baa5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c3043546277899eb3bdced1c0b49f8b7a645746321e120000000000000000091d314556606f797b7c7d7d7e93a7b9c7b29c877d7d7d7d7d7d8095aac4c6b09b857d7d7d7d7d7d79634e38230e000010253a50657a8fa9bacdd7c7a8937e685339291703000000000b20364b60758a9fb4c9dac9ae98836e593b2a180400162b40566b8095abb8c8bbb49f8d7c665a483828160600000000000000000000000e23384d63788da2b8b8b8b39e89735e49341e000d23384d62788da2b5b5b5b5b5b5b5b5b5b5b5b5b5aa947f6a553f2a1500000e23374b5d657885939ea7b3b8c5c8ccc9c4c1c0c0c2c6c9c9c4b8b3a69d908072605544311d1400000000001d32475d72879cb2c7d6c0ab96816b56412c161d31445563798b9fb4c1d1c2b59f8d7b655746332212000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b0000000000000000000000000000000008182939495b667c8d9fb5bfcfcfbcab9d8876614c41311e0e0000000000000000000000000000162b40566b8095abc0d5e5d2c2b5b1abababababababababababababababababa5907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0d0d0d0d0d0d0d0d0d0d0d0d0d0d1325364859667c919fb1c3d3cebbaa9c8675614b40301d0d0000000000000002152738454b5b636667676774899eb3c8b39e89736767676767778ca6b8c7b19c87726767676767635b4935210c00000b21364b60758a9fb4c9d9c3ae99836e5746331e0a00000004172a3a50667b90a9bacdcfbcab937e69533e29140000162b40566b8095a3a3a3aa9f947f6a5e4c3c2b1a0a0000000000000000000000000e23384d63788da2a3a3a3a39e89735e49341e000d23384d62788da0a0a0a0a0a0a0a0a0a0a0a0a0a0a0947f6a553f2a15000010253b50657b899ba3b3b9c5ccc7c5b9b3afacababadb1b5c2c9cbc4b7b29e968273604b42311e0e000000001d32475d72879cb2c7d6c0ab96816b56412c1a2d3e4b6073859ba9bacec8b6a496816c5d4b39291704000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b00000000000000000000000000000000000b1b2c3d4c5e6a7f95a1b3c2d3c9b7a698836e5f4e3c2b190900000000000000000000000000162b40566b8095abc0d5dec9b5a49c969696969696969696969696969696969696907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20222222222222222222222222222222222a3b4c5e6c8197a4b6c8d8c8b6a497816c5e4c3b2b1808000000000000000a1a27313d494e5152525a70859aafc5b8a78d78625252525973889db3c8b49f8b7660525252524e493d2c1a060000091e3245566f8499aec6d6c9b49f8a76614c3828160200000d1f3347586d8297adc7d7cab59f8c78624d38220d0000162b40566b808d8d8d8d8d8b806b6150402f1e0e000000000000000000000000000e23384d63788d8d8d8d8d8d8d88735e49341e000d23384d62788b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7f6a553f2a1500061c31465b71869ba7b4c1ccc8bfb3aea79e99979596989ca4abb4bac7cbbcb0a097816d604e3c2b19050000001d32475d72879cb2c7d6c0ab96816b56412c27384a5c6a7f95a3b5c7cebbaa9c8675604b3f2f1b0b00000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b0000000000000000000000000000000000000e1f2f404a60728399a4b6c5d4c4b2a0927d685a4937261401000000000000000000000000162b40566b8095abc0d5dcc6b19c868081818181818181818181818181818181818078634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818253035373737373737373737373737373737373737404b6175869caabbced3c2b19f917c66594836251300000000000000000a151d2c36393c3d41566c8196abc1c5a6917c66513d3b5a6f8499afc4bcab8f7a644f3d3d3d38352c1f0e0000000216283852687d92a8b9cccdbaa9937e695645321e1611121d2d3e4c61768a9fb4c9d6c5b09b85705a4834200b00000c22374c61777878787878766b62514333221100000000000000000000000000000b20364b60737978787878787878634d38230e000b20354a6072757676767676767676767676767676767574604b35200b00000e23394e63798a9fb4bfc0b4b0a19990898481808182868d969fa9b7c3cdbeb19f937e685a4835200e0000001d32475d72879cb2c7d6c0ab96816b56412c314556647a8b9fb4c1d2c1b49f8c7a6456453221110000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b00000000000000000000000000000000000000121c3043546175869ca7b9c9cfbfb49e8a78625544311d10000000000000000000000000162b40566b8095abc0d5d7c2ad97826d6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b635b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d57647a8c9fb4c2d2cebdb39e8977625443301c0f0000000000000000020f1a212326283d52687d92a7c7bfaa95806a554040566b8095abc0c9a8937e68533e292823211a0e00000000000c21364b6176899eb3c7d7c7b29d8775604b41322826282f3b4a5c6b8096a9bacdccb8a7937d68533c2b190500000a1f34475961636363636361575144332515030000000000000000000000000000081d3144556063636363636363635a4935200c00071c304354606060606060606060606060606060606060605544311d0800000c2136495b687e93a0b3b1a29a8e837b746f6c6b6b6d7178818b9da5b7c5cebdb49e8a78624d3d2c1a0600001d32475d72879cb2c7d6c0ab96816b56412d3e4b6074869caabbcec7b5a395806a5c4a382816030000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b000000000000000000000000000000000000000013253646576379899eabbccfccb9a89a8473604b3e2d1b0a0000000000000000000000162b40566b8095abc0d5d7c2ad97826d5856565656565656565656565656565656564d493c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435460626262626262626262626262626262626262626262626a7f94a4b5c9deccb8a7998472604a3d2d1a07000000000000000000060c0e1124394e64798ea9bac3ae99836e593a3c52677c91a7c6c1ac97826c573726140e0c060000000000000a1e3246576c8196a9bacdcbb7a596806b5f4b45383b3d404c59647a8b9fb4c7d4c4b39e8975604b36210d00000004182a3a474c4e4e4e4e4d4b46393326160700000000000000000000000000000002152737444b4e4e4e4e4e4e4e4d493c2c19060000132536434a4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b44372614010000061a2c3d4e606e82989e9b92857a6e656054575656585a626b79879da6b8cbcdb9a898836e5b4935210c00001d32475d72879cb2c7d6c0ab96816b5641384a5c6b8095a4b5c8cdbaa99b8574604b3e2e1a0a000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b000000000000000000000000000000000000000008182939495b667c8d9fb5bfcfc6b4a2947f6a5c4a3928160300000000000000000000162b40566b8095abc0d5d7c2ad97826d58424141414141414141414141414141414138352c1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6072787777777777777777777777777777777777777777777778869cb1c6dbd5c5b3a1937e695b4a36210e0000000000000000000000000b20364b60758a9fb4c7b29d88725847384e63788da8b9c5b09b86705544311d080000000000000000031629394d62788b9fb4c3d4c3b59f8d7d6a6056535152555e6677879da9bacecbb7a6957f6a5745321e09000000000c1c2a343738383838383633291b1608000000000000000000000000000000000009192731363838383838383838352c1e0e000000081825303536363636363636363636363636363636363531261909000000000f1f31424b61758289867d70645c504b433640413c484d5b6378889eb3c1d2c6b49f8c78634e38230e00001d32475d72879cb2c7d6c0ab96816b56414556647a8c9fb4c2d1c0b49f8b7963554431201000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b0000000000000000000000000000000000000000000b1b2c3d4c5e6a7f95a1b2c2d1c0b49f8b7a645745321e1200000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2321190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768b8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8d9ca4b5c9dee3d0bfb49f8b79634e3c2c19060000000000000000000000081d31445571869bb0c6b7a58c76614c374b6074899eb4c9b49f8975604b35200b0000000000000000000b2035485a6b8196a5b7c8cfbcab9f8d80756d6866676b727b889da5b7c7cebdb39d8875604b3928160300000000000c181f222323232323211e170b000000000000000000000000000000000000000009151d20232323232323232320190e000000000008131c202121212121212121212121212121212121201d1409000000000001141e324657616d7371675f4f4a3e3530262b2c2b343d4959667c91a3b5c9cfbcab96806b563d2c1a06001d32475d72879cb2c7d6c0ab96816b563e4b6074869caabbcec6b4a2947f695b493727150200000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b000000000000000000000000000000000000000000000e1f2f404a60728399a4b6c5cebbaa9c8675604b402f1c0c000000000000000000162b40566b8095abc0d5d7c2ad97826d58422d1816161616161616161616161616160e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2b1b5c2d2e5eee1cdbaa99a846f5a4935200c000000000000000000000002152737576d8297acc2c3a5907a65503b435470859bb0c5baa98e78634e39230e00000000000000000005192b3c4b6175879daabbcec9bcab9f9589827d7b7d8087909da6b7c3d0c0b19f917c665745321b0a00000000000000040a0c0e0e0e0e0e0c0a030000000000000000000000000000000000000000000002080b0e0e0e0e0e0e0e0e0c060000000000000000070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b08010000000000000003162939464b585e5c524d41362d201c14161619202c3b4c5e71859bb0c6d9c9b29d88735b4935210c001d32475d72879cb2c7d6c0ab96816b564b5c6b8096a4b6c8ccb9a89a8473604b3d2c19090000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b0000000000000000000000000000000000000000000000121c3043546175869ca7b9c9c8b6a497816c5e4c3a2a18040000000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030101010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba0b6b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c6c9d2e0e2e2e9d7c7b3a28d78624d38230d00000000000000000000000014293e53697e93a8c6bea9947e69543f36576c8197acc1c7a7927c67523d2712000000000000000000000e1e334657657b8c9fb4bcc9c9bcb4a79e97939092959ca4b2b7c4cfbfb3a297816c5e4c39281600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2932364349463d3930221b1008010000050f1d304053687d92a8c5d5cbb7a68d78634e38230e001d32475d72879cb2c7d6c0ab96816b5657647a8c9fb4c2d0bfb49e8a78625443301f0f000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b00000000000000000000000000000000000000000000000013253646576379899eabbccfc2b19f907c665947341f130000000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba0b6cbcccccccccccccccccccccccccccccccccccccccccdcdcdcdcdcdcdcdd0c0a6907b66513b261100000000000000000000000010253a4f657a8fa8bac2ad98826d58383e53687d93a8c8c0ab96816b56412c1601000000000000000000031729394b5d687e929fabb8c5cfc5b9b3aca8a6a7aab1b6c2cbc9bcb5a1998373604b40301b0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f13151514120e0c0600000000000000070b0b0b0b0b0000000000000000000000000b161e212e343127251e1307000000000000001223384d62788da7b8ccd4c4a7927d67523d2812001d32475d72879cb2c7d6c0ab96816b606375869cabbccfc5b3a1927e685a4836261401000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b00000000000000000000000000000000000000000000000008182939495b667c8d9fb5bfcebdb39d8877614c42311e0e00000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba0b6b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8a7917c67523c27120000000000000000000000000b21364b60758a9fb4bab19c867156453a4f64798faabbc0ae98836e59432e1904000000000000000000000b1b2e3f4e60687e8d9ea7b4bcc9cbc9c2bdbbbcc0c7cac9c1b5ab9f968375615544312212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408131c2024282a2a292723211a0f0b0500070d0f1d202020202014120c02000000000000000000030a0c181e1c12100a0100000000000000000c2035495a73899eb3c8d5bfaa95806a55402b15001d32475d72879cb2c7d6c0ab96807475788399a4b6c9ccb8a799836f604e3c2b180800000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b000000000000000000000000000000000000000000050b0d171f212c3d4c5e6a7f95a1b2c2cbb8a699836e604e3c2c1808000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba0a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3917c67523c2712000000000000000000000000091e3245576c81969fa9a39f8a75604b364b60758a9fa3a3a296806b56412b16010000000000000000000000112131424e60687c89989fabb3b8c5c1c2c3c3c1c7bab4aea39b8d8173615746372715040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f253035393d3f403f3c39362c222018101b222432353535353529271f1406000000000000000000000003090700000000000000000000000006192c3c5c72879cb1c7d7c1ac97826c57422d17001d32475d72879cb2c7dcc4b09e968a8b8d99a1b3c2ccbcb39e8977624c42311e0e0000000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b00000000000000000000000000000000000000040d181f222933363a3b404a60728399a4b6c5c4b3a1937e685a49362513000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768b8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7d67523c2712000000000000000000000000031628394b6073818a8d8d8d8d79644f39455671868d8d8d8c8476614c37210c00000000000000000000000003132331424e5e6677828c969ea6a8abadaeadaca9a99f9991867b6c60554639281909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131c2a3436434a4f52555554524e493d37342b1c2d363a474a4a4a4a4a3e3b3224140200000000000000000000000000000000000000000000000000001325365b70869bb0c5d8c2ad98836d58432e18001d32475d72879cb2c7dccdbcb0aba0a0a2aeb3bfcfbeaf9e917c665948342413000000000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b0000000000000000000000000000000000000b171f2a34373a464c4f515251546175869ca7b9c9bfb49e8a78635443301c0d0000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607279787878787878787878787878787878787878787878787878787878787878787878787875614b36210c000000000000000000000000000a1d314455606c757878787975614b36384d6278787878776f615847331f0a0000000000000000000000000005142431404c59626d7981888e93969899989794908a847c72655d4b4437281b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c313a474c546064686a6a6967635b564d483b303e4a4f5c6060606060544f42321f0c00000000000000000000000000000000000000000000000000071c30435472879cb1c7d8c2ad98836d58432e18001d32475d72879cb2c7dcdacdc4c0b5b5b8c3c7d0c6b2a0957f6a5e4c3b2a1806000000000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b0000000000000000000000000000000002101b29333b474c5558616466676665616379899eabbccdb9a89a8472604a3b2b180500000000162b40566b8095abc0d5d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435460636363636363636363636363636363636363636363636363636363636363636363636363615746331e0a0000000000000000000000000002152737444b556063636363615746323448596263636361584c473a29170400000000000000000000000000000614222f3b484c5b636c74797e81838483827f7b766e6660544b3f3127190b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530414e59616b73797d7f7f7e7c78736b62594b434a5c6472757575757569614f3b2712000000000000000000000000050b0d0b0903000000000000000b20354a6074899eb3c9d6c1ac97816c57422c17001d32475d72879cb2c7dcd2c2b5b1acadb2b6c3d0c3ae98836e62514333231302000000000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b0000000000000000000000000000000311202d3a464c59626a7076797b7c7b7a76726b7c8d9fb5c5c6b4a2937e68594834201000000000162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b463929170300000000000000000000000000000919273137444b4d4e4e4e4b4639292b3b484d4e4e4e4c473a33291c0c0000000000000000000000000000000004121d2b343d494e546064686c6d6e6e6c69666057514a43362f1d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a5f687780888e92949594918e8880776960544f647a868a8a8a8a8a7e69543e2914000000000000000001080b10182022211e16100d0b05080b0f1b2b3b4e64798ea7b9ccd9c8a9947f6a543f2a15001d32475d72879cb2c7dcc9b5a39b97979ca5b3bfc6b2a096806b615041302010000000000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b00000000000000000000000000000011212e3e4a58616c7780868a8f9092918f8c8781798095a6b8cbc0b39e8977624c3e2d1b07000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530353838383838383838383838383838383838383838383838383838383838383838383838383633291b0b0000000000000000000000000000000009151d273136383838383632291b1d2b343738383837332a1f170c000000000000000000000000000000000000000d18202c3536434a4f53565859585754504b45393530251811020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1c304354606c7d89959da6a7aaaaa9a7a69d968a7e73625a70859a9fab9f9f937e69543e29140000000000000009151d20252b343736322825221f181d20232d3948596b8096abc5d6cebbaa907b66513b2611001d32475d72879cb2c7dbc6b19b858182879aa1b3c2beb09e95806a5f4d3f2e1e0e0000000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b00000000000000000000000000000e1f2e3f4b5c6476818a959b9faaa6a7a6a4a59c968e83889eb3c8ccb9a798836e5c4a36220e000000162b40566b8095abc0d5d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20232323232323232323232323232323232323232323232323232323232323232323232323211e170b0000000000000000000000000000000000000209151d2023232323211e160b0d192022232323211f170c04000000000000000000000000000000000000000000050f1a21253035393e41434443423f3b363228201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b30404a607280929ea7b3b8c4bfbfbec4b7b2a99f94847863758a9fb4bcb5a9937e69543e291400000000000311192731353a3b484c4b45383a37342a3135383d4a5762778a9eb4c9decab49f8b76614c37210c001d32475d72879cb2c7d6c0ab96806c6d74839aa4b6c6bcaf9e927d675d4b3c2b1b0b00000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a35200b0000000000000000000000000009192c3d4b5d657a87969fa9b0b4bbc8bcbbc3b6b2aba1999ea6b8cbd6c5b2a08e7a644f3c2c19060000162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0a0300000000000000000000000000000000000000000002080b0e0e0e0e0c0a030000050b0d0e0e0e0c0a04000000000000000000000000000000000000000000000000000608131c2024292c2e2f2e2d2a26211e160b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729394d5e6b80959eb3b9c5cbcecac2bcb9b8c7bab4a29a87797a8fa9bacebea9937e69543e2914000000000011212e37444b505659626056544f4c473b444b4d525b6375859ba8b9cdd2c1af9a846f5847331f0a001d32475d72879cb2c7d6c0ab96816b566176869ca8b9c9bcb49f8b7b645a4839291808000000000000000000000000000013293e53687e93a8bdd3cab59f8a75604a3520131313110f0a0000000000000001142637495b657b8b9da5b4bac7cac7c4bcc8bbb4bbbfb3aeb3b8c5d5e4cfbeae99836e5a4935200c0000162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f13171819191714110b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e334657667c919eb0bdccd4c8bbb4ada7a4a3a5a9afb4a69d888197acc7d8bea9937e69543e291400000000081c2e3f4b5560656b7177766e696562595e556062676e79869ba3b5c6d7c9b5a3917c66513a2a1704001d32475d72879cb2c7d6c0ab96816b565863798a9eabbccdbaa99e8878625746362614010000000000000000000000020813293e53687e93a8bdd3cab59f8a75604a352929292927241d12040000000000081d3144556379899ea9b6c3cdcbbfb3aea7a2aa9faaa3a9b1b6c2ced8e6dfcab49f8c78624d38230e0000162b40566b8095abc0d5d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191c20202020202016140d040000000000000000000000040e1416202020202020202020202020202020202020201f1e1c1915100b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384b6175889db3bccdd4c3b7aa9f98918f8e8f939aa2b2a69d979fb1c5d3bea9937e69543e2914000000000e23374b5d65747a80868c89847e7a7774747475787d838c9ca4b5c1d2cfbcab9b86715e4c381c0c00001d32475d72879cb2c7d6c0ab96816b56495b667c8d9fb5bec7b8a69c8675615443301c13030000000000000000000a161e25303e53687e93a8bdd3cab59f8a75604a3e3e3e3e3e3c3930221200000000021628384b6073869ca7b8c7d3c4b7b2a199928d8b8a8b8e949ca4b4bbc8d8e3cfbcab95806b553d2c1a0600162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b262e313535353535352b28211608000000000000000000081621292b353535353535353535353535353535353535353433312e2a25201d150907000000000000000000000000000000000000000000000000000000040a0c0e101010100f0c0a040000000000000000000000000000000000000000010a1012131313131313130f0d070000000000000000000000000000000000000000000000000000000000091d3245566a7f95a6b8cbd6c6b7a59d8c827c79797a7e848f9da5b3acb1bdced3bea9937e69543e29140000000010253b50657b898f959ca49f99948f8c8a89898a8d92999fabb5c2d2cfbeb49f8c7b6550402f1d0000001d32475d72879cb2c7d6c0ab96816b563d4c5e6a7f94a0b2c2c4b5a4998372604b4231211100000000000000000a1a283236434a53687e93a8bdd3cab59f8a7560535353535353514d40301d0a000000091e324556687e93a4b5c5d5c5b7a69d8f847d78757576797f86939faabbc8d8d9c9b29c87725b4935210c00162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091b2b3842464a4a4a4a4a4a403d3326160400000000000000041626333d404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494846433f3a353127221b1007000000000000000000000000000000000000000000070b0f16171f21232526262524221f18150f0d0700000000000000000000000000000005121d24272828282828282824221b10020000000000000000000000000000000000000000000000000000000b20364b6075889eb3c4d5ccb9a89d877a6d67646365696f7a8799a1b3bfcedbd3bea9937e69543e2914000000000f24394e64798ea7abb1b5b4aea9a4aa9f9e9e9faba7aeb4bcc9d2c9bcb5a0947f6a5d4c3822120000001d32475d72879cb2c7d6c0ab96816b56414050616e8298a4b5c5c2b3a196806b604e3f2e1e0e00000000000002162838454b546062687e93a8bdd3cab59f8a7568686868686868665e4d39240f0000000b21364b6075889db3c2d2ccb8a79d887a6f67626058616469747e8c9faabbcedecab6a48d78634e38230e00162b40566b8095abc0d5d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013263849565b60606060606055504433210d000000000000000e21334451566060606060606060606060606060606060605f5f5d5b58544f4b4437362d211a0f00000000000000000000000000000000000408131c20252b2a3337393a3b3b3a3937332a2b24221b100902000000000000000000000001122330393c3d3d3d3d3d3d3d3a362e201000000000000000000000000000000000000000000000000000000012273c51677c91a6b8cbd7c7b49e8a79645c524f4e50545d64768399a1b3c7d7d3bea9937e69543e2914000000000b20364b60758a9fb4c6c9c9c3bec8bbb4b3b3b5bcc9c3cacfcac2b6ab9f958272604a3f2f1c040000001d32475d72879cb2c7d6c0ab96816b564133434b6175869ca7b8c8bfb09e927e685d4b3c2c1b0b0000000000091e324556606c74777b8298adc2d7d3bda8937e7e7e7e7e7e7e7e7c66513c271100000012273c52677c91a6b8cbd4c3b39e8978655d524d4b464c4e5560697b8c9fb4c4d4d3c3a8927d68533d281300162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192e425667717575757575756b62503d28140000000000000014293d51626b757575757575757575757575757575757575757473716e6a6560554f4a3e362d1c130800000000000000000000000000000c171f2530353a413a474c4e4f5050504e4c473a4039362d211e160a000000000000000000000a1d30414d51535353535353534f4a3e2e1b070000000000000000000000000000000000000000000000000004172a3a586d8298adc5d5cdbaa9957f6a5b4a3e3a393a3f4b586174839aa9bacdd3bea9937e69543e291400000000091d32455672879cb1c7dcd5cbc8bec1c4c6c7c8c8c7c5c2c2b6b1a49c8d7f72605443302111000000001d32475d72879cb2c7d6c0ab96816b56412c3246576278899eaabbcebcb49f8c7b655a493a291909000000000b21364b607481898d9098a0b2c6dad5c1ad9c939393939393939385715b46311c060002162838586d8398adc4d5cab6a5927d675a4b3f3836333637444b5d697f94a6b7cbd6c1ac97816c57422c1700162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71858a8a8a8a8a8a806b55402b1600000000000000162b40566b808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898886837f7a746d645c4e4a3d3025180a000000000000000000000003141c293336434a4f565b586163656565656461585a554e4a3e3632281a110200000000000000001024394d5f6768686868686868645c4a36220d000000000000000000000000000000000000000000000000000a1f33475872879db2c7ddc9b49f8a76614c3d2d2424252e3a465660758a9fb4c9d3bea9937e69543e29140000000002152838596e8398aec3d5c4b7b3a8acafb1b2b3b3b2b0ada9a49c92867c6a60544336251303000000001d32475d72879cb2c7d6c0ab96816b56412c2839495a657b8c9fb4becebbaa9e897862584637261401000000142a3f54697f949ea7a5adb2becfe1ddcabaada8a8a8a8a8a8a89b86715b46311c0600091e32455672879db2c7dcc7b29d8774604b3c2e23201f2126313f4b6074889db2c8d9c4af9a846f5a452f1a00162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71869b9f9f9f9f95806b55402b1600000000000000162b40566b80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9b98948f89827a6f635b4a4336271a0a0000000000000000000a161e323a464c5460646b707476787a7b7b7a797774706a645c524b45382f1e160a0000000000000012273c51677d7d7d7d7d7d7d7d7a644f3a240f000000000000000000000000000000000000000000000000000c21374c61768ca5b7cad9c4ae99846f5746331f0f0e101b2938455774899eb4c9d3bea9937e69543e29140000000000152b40556a8095aabfcbb7a69d93969a9c9d9e9e9d9b98938e867d73665e4a433625180800000000001d32475d72879cb2c7d6c0ab96816b56412c1b2b3c4b5d697e93a0b1c0c8b8a79c8676615544311d12000000182d42576d8297acb8c5c2c6cfdcece1d4cac7bdbdbdbdbdbdb09b86715b46311c06000b21364b60748a9fb5cad6c1ac96816c5544311e100b0a0c141d3145566b8096abc0d5c7b19c87725c47321d00162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71869bb0b5b5aa95806b55402b1600000000000000162b40566b8095abb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b4b2b0ada9a79e978e84796a60544538271808000000000000000a1a2832424f58616a737a8085898c8e8f90908f8e8c89858079706860564c3f32281a0b0000000000001d32475d728792929292929292806b56412c160100000000000000000000000000000000000000000000000010263b50657b90a5c3d4d3bea9947e69543929170100000b1a28395f74899eb4c9d3bea9937e69543e2914000000000012273c51677c91a6c7c8b39d887e8184868889898885837e79716760554c40302518080000000000001d32475d72879cb2c7d6c0ab96816b56412c161e2f3f4f606d8297a2b1b2b2b2a4998373604b40301d0a0000182d42576d8297acacacafb4c0d1e3d4c3b7b2acacacacacacac9b86715b46311c06000d22384d62788dabbccfd2bca7927d6752372614000000000215273850667b90a5bbd0c8b29d88735d48331e00162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0cacacacacacacacacacacacacad9cecac9c8c6c3c5b9b3aca19a8c7f7260564536251300000000000003162838454b60697680888f969a9ea7a3a4a5a5a5a3a79e9a958e857d75655d4b4538291b0b00000000001d32475d72879ca8a8a8a8a896816b56412c160100000000000000000000000000000000000000000000000014293e53697e93a8bed3d0bba6907b66513b2611000000001f34495f74899eb4c9d3bea9937e69543e291400000000000e23394e63788ea9bac9b49f8a746c6f7172737372706d69635b524b44372f1c1308000000000000001d32475d72879cb2c7d6c0ab96816b56412c16112132424b607484969c9d9d9d9d9d96816c5e4d39240f0000182d42576d82969696969aa2b4c8dccab7a59d969696969696969686715b46311c06000e23384e63788da3c9dad0bba5907b66503b261100000000000e23394e63788ea3b8cdc8b39e89735e49341e00162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5dfddcfc6c3b8b8b8b8b8b8b8b8b8b8babcc1c8cbccc9bfb3aa9f948274605443301c0e0000000000091e324556606e7e89959da6abb0b3b9c5babababac5b9b3afaaa39b92877b6d60564639291808000000001d32475d72879cb2bdbdbdab96816b56412c1601000000000000000000000000000000000000000000000000152a40556a7f95aabfd4cdb8a38d78634e38230e0000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000b20354b60758a9fb4c9bbaa8e78635a5c5d5e5e5d5b58544e4a3d35312619120000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1603141d32455661758187888888888888877c66513c2711000012273d52677d81818181849aafc5dac7b29d8781818181818181817f69543f2a1400000e23384d63788da2c5d6cfbaa48f7a654f3a251000000000000d22384d62778da2b7ccc8b29d88735d48331e00162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5e2cfbfb2aea2a2a2a2a2a2a2a2a2a3a5a7acb2b7c4ccd0c8bbb4a0988272604a3c2c19060000000a1e30414b607482939ea7b2b7c4c9bcb5b2b0afafafb0b3b8c5c1b5b0a59d908274615746362614010000001d32475d72879cb2c7d2c0ab96816b56412c1601000000000000000000000000000000000000000000000000162c41566b8196abc0d6ccb7a18c77624c37220d0000000a1f34495f74899eb4c9d3bea9937e69543e29140000000000081d31445571869cb1c6c8a6917c6751474849494846433e39362d201d1409000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601021528384657616b7173737373737373665e4d39240f00001025394d5f676c6c6c6c7e93a8bdd3c4af99846f6c6c6c6c6c6c6c69614f3b271200000c21374c61768ca7b9ccd0bba6917b66513c261100000000000f24394e64798ea3b9cec6b19c86715c47311c00162b40566b8095abc0d5d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b1c31465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5dbc6b2a1998d8d8d8d8d8d8d8d8d8e8f92979da6b3b8c5d4cebfb2a0947f6a5a4935200c00000010253a4d5f6d8298a0b3b8c5bbb4aeab9f9d9b9a999a9b9ea7a7aeb5bcb6b29f978475615443301c0c0000001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000000000000000000000182d42576d8297acc2d7cbb6a08b76614b36210c0000000a1f34495f74899eb4c9d3bea9937e69543e2914000000000001152737586d8398adc2bfaa95806a554033343433302e2924211a0f080100000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000a1a2939464b565c5d5d5d5d5d5d5d514d40301d0a00000a1e30414d52575757687e93a8bdd3c4af99846f5a575757575757544f4332200c00000a1f33475874899eb3c9d3bea9947e69543d2c18080000000417293a51667c91a6bbd1c4ae99846f59442f1a00162b40566b8095abc0d5d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1b202020202020202020202020202020202031465b71869bb0c6c0aa95806b55402b1e100e0800000000162b40566b8095abc0d5d8c3ae9983787878787878787878797a7d8187929ea7b7c4d4cfbfb49f8b78634d3a2a17040006192c3c52677d92a0b2bec5b9aa9f98908b888585848586888c92999fabb7beb1a29a8372604b3b2a180400001d32475d72879cb2c7d6c0ab96816b56412c161013141514120e0c0600000000000000000000000000000000182e43586d8398adc2d8cab5a08b75604b36200b0000000a1f34495f74899eb4c9d3bea9937e69543e2914000000000000152a3f556a7f94aabfc3ae98836e593828151e1d1b18141414141414120d0b0500000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100000b1b2932364147484848484848483c3930221200000001132330393d414152687d92a7bdd2c5af9a85705a3841414141413f3b32251503000004172a3a5a6f849aafc9dac4af99846f5b49362518100e10171f3346586c8197acc1d6c6aa95806b55402b1600162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d19202230353535353535353535353535353535353535465b71869bb0c6c0aa95806b5540353325231c11030000162b40566b8095abc0d5d7c2ad97826d63636363636363636365676c747d899da6b7cbdfcebaa998826d5847331f0a000c2035495a71869cb1beccb9a79e8c837b7673706f6f707173777c848d9da6b7c0b3a1947f6a5947341f0b00001d32475d72879cb2c7d6c0ab96816b56412c2025282a2b292723211a0f0b0500000000000000000000000000182d42586d8297adc2d7cbb6a18c76614c37210c0000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000011263c51667b91a6c6c7b19c87725645322a2a2a2a2a2a2a2a2a2a29272220180d000000000000001d32475d72879cb2c7d6c0ab96816b56412c16010000000b161e212c323333333333333327241d12040000000005131e25272c3c51667b91a6c8d9c6b19c86715645322c2c2c2c2a2720150700000000152a3f546a7f94abbccfcab49f8c79635443362b2524252a33424c6176899eb3c9ccb9a8907b66503b261100162b40566b8095abc0d5d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3437454a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a5b71869bb0c6c0aa95806b554a4a483a372e21110000162b40566b8095abc0d5d7c2ad97826d584d4d4d4d4d4d4d4e505255606878879db2bfd0d8c7b49f8a76614c37210c000d23384d62788da4b5c9c9b39e897b6e6661575b5a5a5a5b5961676f7b889dabbcbfb49f8a77614c37220c00001d32475d72879cb2c7d6c0ab96816b564132363b3d3f403f3c39352c2220190e030000000000000000000000172c41566c8196abc1d6ccb7a28d77624d38220d0000000a1f34495f74899eb4c9d3bea9937e69543e29140000000000000e23384d63788da8b9cab49f8a75604b3f3f3f3f3f3f3f3f3f3f3f3e3c37342b1c130800000000001d32475d72879cb2c7d6c0ab96816b56412c160100000000030a0c161c1e1e1e1e1e1e1e110f0a00000000000000010a1012253a4f647a8faabbcec9b49f8a75604b3829272624201c130800000000000d22384d62788c9fb5c8cfbcab9983726054483c3a393a3a474c606c8196a7b9ccc7b39e8975604b36200b00162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b484d5a5f6060606060606060606060606060606060606071869bb0c6c0aa95806b6060605e4f4b3f2e1c0800162b40566b8095abc0d5d7c2ad97826d5842383838383838393a37444b5a647a8fa1b3c7dccebaa9927d68523d28130010263b50657b90a5c2d2bca7927d675d514b46394544453b474c525d657a8d9fb5cabaa8957f6a5538281602001d32475d72879cb2c7d6c0ab96816b5638454b5052545554524e493d38352b1e160a00000000000000000000142a3f54697f94a9bed4cfb9a48f7a644f3a250f0000000a1f34495f74899eb4c9d3bea9937e69543e29140000000000000b20354a6074899eb4c9bbaa8e796354545454545454545454545453514d483b30251808000000001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000010708080808080808000000000000000000000000000c21364c61768a9fb4cacebaa9917c6656463a3c3b393530251808000000000b2035485a6e8398aabbcec9b3a1968072625a53504e4f5258616c7e939eb0c5cdbaa996816c5645321d0900162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596270757575757575757575757575757575757575757575859bb0c6c0aa95807575757573655d4b37230e00162b40566b8095abc0d5d7c2ad97826d58422d2323232323242527313c4b5d6f849aafc4d9d8c7ad97826d58422d180011263b50667b90a5c1d2b5a08b76604b3f363329302f302a34373f4b5c70859ab0c5c6b19b86715645321e09001d32475d72879cb2c7d6c0ab96816b564f56606568696a6967635b564d483c32281a0e00000000000000000011273c51667c91a6c4d4d2bda8937d68533626140100000a1f34495f74899eb4c9d3bea9937e69543e2914000000000000071c30435471869bb0c6c8a7927d69696969696969696969696969696762594a43362513000000001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000a1f33465870869bb0c6d6c7b09b857461585452514e4a433625130000000005192b3c4d63788b9fb4c0d0bfb09e9683786e68656365676d7781939cadbdcdc2b49f8a77624d3828150200162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374d6278848a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8fa3b5c9c3af9e958a8a8a8a887b654f3a251000162b40566b8095abc0d5d7c2ad97826d58422d180e0e0e0e0e10151d2e3f53687e93a8bdd3dbc5b09b85705b46311b000e23384d63788da3b5c9b6a08b76614b3a2c2731363738393b3d3b48566d8398adc2cab49f8a76604b36210b001d32475d72879cb2c7d6c0ab96816b5c646e757a7d7f807e7c78736b625a4b45382c1e0f01000000000000000d23384d62788da6b7cbd7c1ac97816c5443301c080000001f34495f74899eb4c9d3bea9937e69543e291400000000000000132536586d8297adc2c4af99837f7f7f7f7f7f7f7f7f7f7f7f7f7e7c776c605443301c070000001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000417293a556a7f95a8b9cdc9b5a39983766d69676663605443301c07000000000e2035495a6c8196a2b4c3cdbcb0a1998b837d7a797a7d8289979fadbacac5b5a496816c5948341a0a0000162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556f83999faa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fb0b5c1d2ccbcafaa9f9f9fa698836e59432e1900162b40566b8095abc0d5d7c2ad97826d58422d180300000000000210253a4f647a8fa4b9cfddc7b29d87725d48331d000c2035495a71869babbbc8a6907b6658493c37444b4c4d4f505255596274879cb2c7cebbaa8d77624d38220d001d32475d72879cb2c7d6c0ab96816b6d7a83899092949594918e8880786b6056493c2d1f0f000000000000000c2035495a73889db2c8ddc8b39d8874604b3626140906091534495f74899eb4c9d3bea9937e69543e291400000000000000142a3f54697f94a9bec7b3a1999494949494949494949494949493918b8172604a35200b0000001d32475d72879cb2c7d6c0ab96816b56412c16010000000000000000000000000000000000000000000000000000000000000c22374c61778a9eb4c0d1c1b3a19989827e7c7b7972604a35200b0000000006192c3c4b6074849aa5b5c1cdbfb3a99f98928f8e8f92979ea8b1bdcac4b8a79c8675614b3b2b18000000162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60738a9fb4bbb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5c6c9d2dfdaccc3c0b5b5c4ae99846f59442f1a00162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000e23384d63788da2b8cdddc8b39d88735e48331e0006192c3c50657b8d9faab6b19c8676635a5c5d556061626466676a6f778399a5b6cacdbaa98c76614c37210c001d32475d72879cb2c7d6c0ab968076828d999ea8a7a9aaa9a7a69d968b8075635a4a3d2d1d0d00000000000006192c3c576d8297acc1d2cbb7a6907b65544331261f19202731435f74899eb4c9d3bea9937e69543e29140000000000000011263b50667b90a5c5d0bfb3afa9a9a9a9a9a9a9a9a9a9a9a9a9a8aa9f937e69543e29140000001d32475d72879cb2c7d6c0ab96816b56412c16010000000000000000000000000000000000000000000000000000000000000a1f3347586b8095a2b4c2cfbfb3a89e989391908e826d58422d1800000000000e1d3145566177879ba3b2bec8c7bab4aea8a5a3a4a7adb4b9c6cbc1b5a69d8978635746321d0d000000162b40566b8095abc0cdcdc2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e647a8ea9bacdd8cad0c7c4c0c0c0c0c0c0c0c0c0c0c0c0c0c0c8cbd5e2dfd1c8c5c0c0c0ae99846f59442f1a00162b40566b8095abc0d5d7c2ad97826d58422d18030000000000060f24394f64798ea4b9cedcc7b19c87725c47321d00000e23374b5d687e8c9ca4b4a49b85786f717374757677797b7d80848b99a1b3c3d3c9b49f89745847331f0a001d32475d72879cb2c7d8c3ae998386989fabb4b9c6bebfbec4b7b2a99f968678635b4a3b2b18050000000000000f243a4f647a8fa3b5c9d4c4b09b8573604b4437332c3537444b6174899eb4c9d3bea9937e69543e2914000000000000000d22374d62778ca7b9ccd0c7c4bebebebebebebebebebebebebec8bbb19c86715c47311c0700001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000004182a3a4b6074849aa4b3bfc9c6b9b4ada9a7a69e89745f382816020000000002152738475962788598a0b0b4c1c9c9c3bdbab8babcc2c9c9c4b8b3a39b887b645a4939291600000000162b40566b8095abb8b8b8b8ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8c7d7e3d0c0b3afababababababababababababababb3b7c4d5d1c0b4b0abababab99846f59442f1a00162b40566b8095abc0d5d7c2ad97826d58422d1814141414151619202d3e52677c92a7bcd1dac4af9a846f5a45301a0000081c2f3f4e60687b86929faaa39b8a8486888a8b8c8d8e9092959a9fa9b3bfcfd0bfaf9a856f5a3a2a1704001d32475d72879cb2c7dcc6b2a1999ca4b5bcb9b4b3b4bbc8c9cbc7bab4a49c88796359483420130000000000000d22374b5c71869bb0c0d1c9b5a3957f6a60554c473c494d55606b7f94a8b9cdd3bea9937e69543e2914000000000000000b2034485974899eb3c9cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdd9c9b49e89745f49341f0a00001d32475d72879cb2c7d5c0ab96816b56412c1601000000000000000000000000000000000000000000000000000000000000000c1d31455662778699a1b0b5c1c4c7c2bebcb49f8a755645321e0900000000000a1a2a3a485a627482909ba3aeb4bac7c1c2c3c3c2bfc2b5b1a69d938578645d4b3c2c1b0b00000000162b40566b8095a3a3a3a3a3a397826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acbfcfdcc7b3a29a95959595959595959595959595959da6b7cbc8b4a29b9595959595846f59442f1a00162b40566b8095abc0d5d7c2ad97826d58422d29292929292a2b2b353d4a5c6e8398aec3d8d1c0aa95806b55402b16000000112131424e5d65737d8a9fb4a89f9a9b9d9fa9a1a2a4a5a7aaafb4bac7cfcbc0b3a1917c67523c271200001d32475d72879cb2c7dccfbfb2aeb1b5aea6a89e9d9faaaab4b9c6cec2b5a69d8877624d41301a0a0000000000071b2e3e52687d92a2b4c7d2c1af9e957f736861585d5a63697480949daec6d7d3bea9937e69543e29140000000000000005192b3b5b70859bb0b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b49f8a745f4a351f0a00001d32475d72879cb2c0c0c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000000021527384859627683919ba3a9afb1b3b4b4b2ab8b76604b36210b0000000000000c1c2b3c4856606d7b8590999fa9a9acadaeaeacaaa6a39b94887e7462594b3f2e1e0e0000000000162b40566b808d8d8d8d8d8d8d8d826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a1b2c3d4c4af9a848080808080808080808080808080889db3c8c5b09b8480808080807d68523d281300162b40566b8095abc0d5d7c2ad97826d58423e3e3e3e3e3e3f403c484d5b647a8c9fb4cad7c7b4a28f7a644f3a240f00000003131e3245576278869caabbbab4afb1b2b4bac7b7b9bbbcbfc4c9c9c6c4b7b3a2998372604a35200b00001d32475d72879cb2c7dcddcfc4b8ab9f99918b89888a8e959ea8b5c1d2c4b7a699836f5f4d3828160300000000001020354a6072849aa9bacdccbcaf9d95857d76747374787e87969eaebbcbe4d3bea9937e69543e29140000000000000000172d42576c8297a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39f8a745f4a351f0a00001d32475d72879cababababab96816b56412c160100000000000000000000000000000000000000000000000000000000000000000a1a2a3b485861727c858e94999c9e9f9e9d9a8c76614c37210c000000000000000e1e2b38454b5d65707b838a9094969899989795918c867e75696056483b2e20100000000000000c22374c6177787878787878787877624c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012263b4f606e8399a5b6c7c7b29d87766b6b6b6b6b6b6b6b6b6b6b6b71869bb0c6c0aa95806b6b6b6b6b685f4e3a251000162b40566b8095abc0d5d7c2ad97826d58545454545454545556585a626b79889dabbccfc9baa99a85705c4b37220d000000000b21364b6075869ca4b5c8cdc9c4c6c8c5c3c2c1c0bfbebdc7bab4b1aca69d938476615443301c0700001d32475d72879cb2c7dcd5c4b7a69d8d837c7674737579808a9ba3b5c2d3c4b3a1927d675645321e090000000000071c30435463798b9fb4bcceccbcafa39b928c89888a8d949ca5b0bccdd7e4d3bea9937e69543e2914000000000000000014293e53697e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8b745f4a351f0a00001d32475d728795959595959595816b56412c16010000000000000000000000000000000000000000000000000000000000000000000d1d2a3a4654606671797f8487898a8988848075604b36210b00000000000000000e1a28323f4b505e666e767a7e81838483827f7c77716960574b45382b1d10020000000000000a1f34475961636363636363636362594834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424c6176879da9bacab7a598836e605656565656565656565b71869bb0c6c0aa95806b56565656524e41311e0b00162b40566b8095abc0d5d7c2ad97826d69696969696969696a6b6d7178808b9da6b7c9c6b9ab9f8b7a644e3e2e1b070000000013293e53687e93a4b5c2d2cfcac5b8b3b0aeadacabaaa8a7a5a99f9c9791887e726158463625130000001d32475d72879cb2c7dccbb7a69d887b6e6761585460636b78859ba4b6cad0bfb39e8875604b36210f000000000000132536495b687e939eb4bac7ccc1b5b0a7a89e9d9fa9a9b2b0abb4bac6d7d3bea9937e69543e291400000000000000000c21364b6175787878787878787878787878787878787878787878787879634e38230e000000142a3f54697f808080808080807c66513b261100000000000000000000000000000000000000000000000000000000000000000000000d1b2936434a515c646a6f72737574726f6a605745321e090000000000000000000a161e2f38404c50576065696c6d6e6e6d6a676259544b453932281a0d000000000000000004182a3a474c4e4e4e4e4e4e4e4e4c483b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141f334658647a8b9fb4bfc3b2a0937e685b49384040404040465b71869bb0c6c0aa95806b554040403d3a3123130100162b40566b8095abc0d5dbc5b09b857e7e7e7e7e7e7e7e7e7f8083868c959fa9b7c4bfb2a89e8d7d685c4a3620100000000004192e44596e8399aec2d2c9bcb4aba79e9b99989695949392908d8986827c75696054463a2918080000001d32475d72879cb2c7dcc8b39d8878655d514c46434b4e5a6276869cb1bfd0cbb8a6927d68523d2d1a07000000000008182c3d4e606a80939fa9b5c1c9c9c6c6b9b3b2b4bab8b39e969fa8bacdd3bea9937e69543e291400000000000000000a1e334657616363636363636363636363636363636363636363636363635b4935210c00000012273b4f61696b6b6b6b6b6b6b665e4c38240f0000000000000000000000000000000000000000000000000000000000000000000000000b182530353e4a4f545a5c5e5f5f5d5a554b45392816030000000000000000000002111c232f3839454b5054575859595755514d483b3632281d150a000000000000000000000c1c2a3437383838383838383837342b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4a5c697e93a1b2c3beb49f8a79635645322b2b2b31465b71869bb0c6c0aa95806b55402b2b28251e13050000162b40566b8095abc0d5ddc9b5a39b9393939393939393939495989c9fabb4bab7b3aca1998a7c685f4e3e2d1a0200000000061b31465b70869bb0c5cfbcab9f958d8986848281807f7e7d7a7774716d6760564b4336291b0b000000001d32475d72879cb2c7d6c0ab96816b5a4b3f363330353c4858657a8fa1b3c7d5c5b09b85705b4a36210c0000000000000e1f314250626a7e8b9ba3afb4bac7bfbfbec3b6b2a69e92818a9fb4c9d3bea9937e69543e2914000000000000000003172939464b4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e493d2c1a060000000c2032434f5456565656565656514c402f1c090000000000000000000000000000000000000000000000000000000000000000000000000008131c202d36393f4447494a494845403632281b0a0000000000000000000000000008121c232832363b3f4143444342403c37342b211e160a020000000000000000000000000c181f2223232323232323232220180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3e4f616e8399a5b7c8baa89b8574604b402f1d1c31465b71869bb0c6c0aa95806b55402b1613100b01000000162b40566b8095abc0d5e4d2c1b5b0a9a9a9a9a9a9a9a9a9aaabadb1b5bcbbb4a69d968e8378665e4e4131200f0000000000051a2f445a6f8499afc4cab49f8d807873706e6d6c6b6a69686562605457514b45383026180b00000000001d32475d72879cb2c7d6c0ab96816b563c2e211f1c202b3a4b5d6e8399aec7d8c9b5a38e79634e39240e00000000000000142433435060697a8591999fa9a8aaaaa9a7a59c95887d74899eb4c9d3bea9937e69543e29140000000000000000000b1b293336383838383838383838383838383838383838383838383838352c1f0e00000000031425323b3f404040404040403b382f22120000000000000000000000000000000000000000000000000000000000000000000000000000000007101b22242a2f32343534332f2b211e160a00000000000000000000000000000000090a161e2125292c2e2f2e2d2a272220190d0903000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102032424c6176879daabbc6b5a396816c5e4c3b2a1831465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5eadfd2c9c5bebebebebebebebebebfc0c2c6cabbaa9f958881796e625a4d403123130100000000000014293e53697e93a6b7c8ac97816c635a5b59585756555352504d4a43363c3632281c14080000000000001d32475d72879cb2c7d6c0ab96816b56412c160a080e1c2e3f51677c91a9baced1c1a9947f6a543f2a150000000000000006152533424e5c64727c848a9093949593918e8780766774899eb4c9d3bea9937e69543e2914000000000000000000000b171e21232323232323232323232323232323232323232323232323211a0e000000000000071420272a2b2b2b2b2b2b2b26241c1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f151a1d1e201f1d1a150b09030000000000000000000000000000000000000003090b1014171819191815120d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141f334658647a8b9fb4bfc2b09f907c665948362531465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5e9d7c6b9b4b2b2b2b2b2b2b2b3b4b9c6bec6cab49f8a80756c635b4d483c30221305000000000000000b21364b6075889daab9aa95806b5b55606160565d59544e4a3d35302527201d150a01000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100001021364b60758a9fb4c9d9c4af99846f5a3928160300000000000000071524313e4a5460666f767a7e7f807e7c78726a615774899eb4c9d3bea9937e69543e29140000000000000000000000030a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c060000000000000000030c121416161616161616110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000507090a0a080500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4a5c697e94a1b3c3bdb39e88776254433031465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5e1cdb9a89e9d9d9d9d9d9d9d9d9ea8a4a9b0b5bbaa9f95877d73635a4b3f2e20100000000000000000091e324556657c8c9ea8b39e8979707375767674726e69645c524a43362c1e10020000000000000000001d32475d72879cb2c7d6c0ab96816b56412c16010000091e32455671869cb1c6dbc8b39d88735746321e0900000000000000000614202d36434a51576165686a6a6967635b554b5f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e14162020202020202020191610060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4f616e8399a5b7c8b8a69a8472604a3e2d465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5dec9b49e8a8788888888888888898b8f949ba3b3b8b4a69d938578655d4b3e2d1a0a00000000000000021628384c5e667c8a9aa2a79e8a85888a8b8b8988847f7970676054493c2d20100100000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000003162838586d8298adc2d7cbb7a68b75614b36210c00000000000000000002101825303539464b5053555554524e493d495f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e11141516161513100c0a0300000000000000000000000000000000000000000002090b0e11131416161513100c0a040000000000000000000000000000000000000000000009131a1c20202020201f1b12100a010000000000000000000000000000000000000000000000000000081621292b35353535353535352e2b23180a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102032434c6176879daabbc5b3a2947f695c4a39465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad978272727272727272737476797f86919ea6b8b7b2a39b897b655c4a38281603000000000000000a1a2f404c5e6678849aafa89e9b9ea7a1a99f9d99948e857d72635a4a3e2d1f0f00000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000162b41566b8096abc0d5d4c4a38d79634e38230e000000000000000000000008131c202932363b3e3f403e3c39352c495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c141c202326292a2b2b2a2825211e170d0b0500000000000000000000000000000000060a151d202427282a2b2b2a2926221f180d0b050000000000000000000000000000000000000d1b262e313535353535343027251d1305000000000000000000000000000000000000000000000000041626333d404a4a4a4a4a4a4a4a434036281806000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141f334658647a8b9fb4bfc0b49f8b7a645746465b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d5d5d5d5d5d5d5e57616469717c889ea7b8c1b5a79e8a7a645645321e0800000000000000091c304354606c7e899eb3b9b4b0b3b8c5bab4b2aea9a39b928478645c4a3d2d1909000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000152a3f556a7f94aabfd4ceb9a48e79644f39240f00000000000000000000000000070b161e2125292a2b2927232134495f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000070c171f21263035383c3e4040403f3d3a363329221f180d04000000000000000000000000000e1921283236393c3e3f4040403e3b37332a2220190e04000000000000000000000000000000091b2b3943464a4a4a4a4a49463c393023150700000000000000000000000000000000000000000000000e213344515660606060606060605853463623100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b5c697f94a1b3c3bbaa9c8775614b415b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d58484848484839464b4f545e6679899eb3c7c5b9a89c8775604b362614010000000000091930404a607281929ea7b9c6bab4ada8a6a7a9aeb4bcb4b0a29a897a645c4a372715010000000000001d32475d72879cb2c7d6c0ab96816b56412c160100000014293e54697e93a9bed3cfbaa48f7a654f3a2510000000000000000000000000000000030a0c1013151514120e1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000006101b2229333736434b4e51545556555552504b463937342a1f180c00000000000000000000000e1e2c3538454b4e51535455565553504c473a38352b1f170c000000000000000000000000000013263949565c60606060605e5b524d41332515030000000000000000000000000000000000000000000014293d51626b75757575757575756e6453402b16020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4f616e8399a5b7c8b6a597826d5f4d5b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d5842333333332933363a404c5b687e93a9bacdc6b6a5947f6a5443301c0800000000021527374d5e6c81969fb3b9bfb3a89f9893919194999fabb5c0b4a79e897a645544311d080000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000142a3f54697f94a9bed4ceb9a48e79644f39240f0000000000000000000000000000000000000000000000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000010f1a212d363a474c5354606366696a6b6b6a68656157544c473b342a1d1302000000000000000006192c3c494d5660636668696b6b6a68656158554d483c332a1c11030000000000000000000000051a2e4356677175757575757470675f504333211100000000000000000000000000000000000000000000162b40566b808a8a8a8a8a8a8a8a826e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102032434c6176879daabbc3b1a0927d675a5b71869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d58422d1d1d1d171e21242f3d4b60758a9fb4c9d3c3b29d8874604b35200b00000000081d314455667c919fb0bdc0b3a1998a827e7c7c7e848c9ca4b5c4b9a79b8573604b3625130000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000152b40556a8095aabfd5cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000009141d2c353e4a4f5861686e74787b7e7f80807f7d7a76716a62594c473b311d1509000000000000000c2135495b637175797c7d7f80807f7e7b77716a625a4c473a2f21130500000000000000000000071c31465c71858a8a8a8a8a89857d6a61503f2e1c08000000000000000000000000000000000000000000162b40566b80959f9f9f9f9f9f98836e58432e19030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141f334758647a8b9fb4bfbeb39e8978625571869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d58422d180800030a0c121e32455770859ab0c5dacbb7a68e79644e39240f000000000b20364b6074879db2bdc8b4a29983776d686767696f79869ca6b7c5b5a3937e695443301c0700000000001d32475d72879cb2c7d6c0ab96816b56412c1601000001162c41566b8196abc0d6d4c3a18c77614c37220c0000000000000000000000000000000000000000000000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000c1926313d494e5c646e767d83898d919395959594928f8b867f776b61594d41312719090000000000000e23384d6379858a8e91939495959593908c8680786c61584c3f302313040000000000000000000011263c51667c91a39f9fa79e9b91806a5d4b372311000000000000000000000000000000000000000000162b40566b8095abb5b5b5b5ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b5c697f94a1b3c3b9a89b85736071869bb0c6c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000003162839596e8398aec3d8d4c4a8937d68533e28130000000011263c51667c91a5b6cac4b09a84736159535152545b6377889db2c8c1b29d8773604a35200b00000000001d32475d72879cb2c7d6c0ab96816b56412c1601000005192b3b596f8499aec4d9cab6a58b74604b36200b0000000000000000000000000000000000000000000000000a1f34495f74899eb4c9d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000e1d2a37444b5b636f7a838a93999ea7a6a9aaabaaaaa7ab9f9b948a8077675f4b443727190900000000000e23384e63788d9faaa6a8a9aaabaaa8a5a49c958b8276655d4d41302212000000000000000000000f24384c5e71859bb0c1b9b3b09f8d7b65503f2f1c080000000000000000000000000000000000000000162b40566b8095abc0cacac3ad98836e58432e19030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4f616e8399a5b7c6b4a395806b70859bb0c5c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d58422d18030000000001152737596e8398aec3d8d4bfaa947f6a553f2a1500000002182d42576d8297acc3cbb7a68f7a6455473a3c3c3d4959687e93a8c6cab7a58e79644e39240f00000000001d32475d72879cb2c7d6c0ab96816b56412c160300000b2034485972879cb2c7dcc7b29d87725645321d090000000000000000000000000000000000000000000000000a1f34495f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000e1e2b3b4755606a79848e989fa9aeb3b8c5bebfc0c0bfc9bcb4b0a89f968a7d6c60554437271501000000000c21374c61768caabbc8bdbec0c0bfbdc2b6b1aa9f97887b675f4d402f1d0d000000000000000000091d2f4051667b90a3b4c8c9bcab9b85705d4b3823110000000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102032434c6176879daabbc1b49f8d7b6f859aafc4c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d58422d18090002080b0f1d31445570859aafc5dad5bfaa95806a55402b15000000071c31465c71869bb1c6c8b29d88735c4a372a27272c3b4c62778ca8b9cdc3a8927d68533d281300000000001d32475d72879cb2c7d6c0ab96816b5640301e160e0d1527374d62778ca5b6cad8c3ae98836e59382815020000000000000000000000000000000000000000000000000a1f34495f74899eb4c9d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000005192b3c48596173808b99a1adb4bac7c8ccd6d8cec9c9cdd7cfcac6bab4a89e928173605544311d12000000000a1f334758748a9fb4c9cccacaccd0d3d3c9c8bbb4a69e8c7d675e4c3b2b19050000000000000000001224384c5e70859bb0c1d1c9b4a3907b65503f2e1c0800000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141f334758647a8b9fb4bfbcab9d88778399aec3c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d58422d1e1e1e151d20232c3a4b6075899eb3c9ded4bea9947f69543f2a14000000081e33485d73889db2c8c4af9a856f5a3e2d1912121f34485974899eb4c9bfaa957f6a55402a1500000000001d32475d72879cb2c7d6c1ac97816c5f4d413228232225314455697e93a8c3d3d5c4a9947f6a543f2a15000000000000000000000000000000000000000000000000000a1f34495f74899eb4c0c0bea9937e69543e291400000000000000000000000000000000000000000000000000000000000b2035485a627784959faab3bfc9cecfcac3bdc7bab4b4bac7bec6c9cdc6b9b49f968373604b402f1a0a00000004172a3a5d73889db2bbb7b5b5b7bbc1c9cdd7cec5b8aa9f8c7c665948342010000000000000000000091d2f4050667b90a3b4c8d1c1af9a84705d4b37231000000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4b5c697f94a1b3c3b7a699838197acc1c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d584233333333273136393d4958667c91a8b9cce1d3c3a6917c67513c2712000000091e33495e73889eb3c8c4af9a856f5a3e2d1914141f34475974899eb4c9bfaa95806a55402b180d000000001d32475d72879cb2c7dccab49f8c7d675f4b4539383836434b6074879cb2c7dccbb8a68f7a65503a2510000000000000000000000000000000000000000000000000000a1f34495f74899eababababa9937e69543e291400000000000000000000000000000000000000000000000000000000000d22384d6278869aa2b4bbc8d0cec9bcb4aea8a3a99f9fa9a3a8b1b5c1cdcdbdb0a196816c5e4c382715020000001c31465c71869ba9a5a2a0a0a2a6acb4bac7d2d5c8bbaa9e8978624d3e2d1b070000000000000000001223384c5e70859bb0c0d1c8b4a28f7a654f3e2e1b07000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4a60728399a5b7c4b3a199879db2c7c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d58484848484837444b4e525b6376869cb1c6d6dfcab6a58d78624d38230d000000081d32475d72879cb2c7c7b29d87725c4a372b29292d3b4c61778ca8b9ccc7a8937e68533e342b1d130500001d32475d72879cb2c7dccebbaa9f8b7d6c6057514e4d4f54606a7f95a5b6cad8c7b39e8874604b35200b000000000000000000000000000000000000000000000000000a1f34495f748a959595959595937e69543e291400000000000000000000000000000000000000000000000000000000000d22384d6278899fb4c0ced1c8bbb4ab9f99938d8b8a898b8e939ba3b4bac6cdbfb09f907c665645311d09000000162b40556b809194908c8b8b8c90979fa9b5c1d2d9c8b8a798836e5c4a36220b000000000000000000091c2f4050657b90a2b4c8d1c0af9a846f5c4a36220f000000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c3043546176879daabbbfb3a59da5b6cac0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad97826d5e5e5e5e5e5e5e556063676e79859ba4b6cae4d5c5b29c87725a4935200c000000041a2f44596f8499aec7cab7a58e796455483b3e3e3e4a59687e93a8c6cdbaa9907b65524d483b30231301001d32475d72879cb2c7dcd9c8baa99f9181756b6663626468727e8d9fb5c3d3cebaa996806b5443301c080000000000000000000000000000000000000000000000000000152b40556a80808080808080807b654f3a251000000000000000000000000000000000000000000000000000000000000b2035485a6a7f94a4b6c9c1b4aa9f978c847e7876747475797e86929fa8bac8cdbdb29c8774604b36200e0000000b20354b60737c7e7b777575777b818a9ba3b5c2d3d5c5b2a08e7a644f392917030000000000000000001123384c5d70859ab0c0d1c7b3a18f7a644f3d2d1a070000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364758647a8c9fb4bfc3b6b2b6c3d4c0aa95806b55402b1600000000000000162b40566b8095abc0d5d7c2ad978273737373737373737475797d838b9ba3b5c2d3e0ccb8a7947f6a553c2c19060000000014293f54697e94a9bacec3af9a84736259555354565c6477889db2c8c9b49f89756b6762594d41301e0a001d32475d72879cb2c7d9c8bbb4abb49f9688817b7877797e85939fabbccfd4c3b49f8b78624d36261401000000000000000000000000000000000000000000000000000013283c50626a6b6b6b6b6b6b6b655d4b37220e000000000000000000000000000000000000000000000000000000000005192b3c4b6074869cb1bab4a39b8c82786e6863615756606469717d8a9faabbcecab6a5927d68523c2b19050000081d3144556067696662606062666c78859ba4b6cadecfbead98826d5746331e0a000000000000000000091c2f3f50657b90a2b4c8d0bfae99836e5c4a36210f0000000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a4b5c697f94a1b3c3cac7cad4d5c0aa95806b55402b1600000000000000162b40566b8095abc0d5dec9b49f8b8888888888888888898b8e92999faab5c1d2d8cebcb39e8976614c36210e00000000000d22374c62778b9fb4c2c8b4a29983776f6a69696b707a869ca6b7cbc9b49f8b83807c77675f4d392510001d32475d72879cb2c7cebbaa9f959eaea69e96908d8d8e939ba3b5bcc9d6c6b6a596816c5a483518080000000000000000000000000000000000000000000000000000000d2133435055565656565656564f4b3f2e1b080000000000000000000000000000000000000000000000000000000000000e1d314455657b8f9ea89f9485796c625a534e4b46454b4e5360687c8c9fb4cad3c3b09b85705a4835200b000001142637444b5254504d4b4b4d51596275869cb1c2d2dec9b49f8a76614b36210c000000000000000000001123374b5d70849aafc0d1c7b3a18e79644e3d2c1a0600000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4a60728399a5b7c8d8dfe6d5c0aa95806b55402b1600000000000000162b40566b8095abc0d5e1cdbaa99f9d9d9d9d9d9d9d9e9fa9a3a7aeb4bbc8d2d1c8bbb49e927d675846331f0a00000000000b1f3447596a8095a4b5c3c0b3a1998b84807e7e80858e9ca4b6c4d4cdbaa99f9996928c7d67523d2712001d32475d72879cb2c7cab49f8c80949db3b3aba6a3a2a4a8b0b4c1cfd2c6b9a89d8775614b3c2b1900000000000000000000000000000000000000000000000000000000041525333c40404040404040403a372e211000000000000000000000000000000000000000000000000000000000000000021527374b5d6a808f928a7f73635b4d493c383632323639424e5e6d8297acc5d6c8b4a38d78624d38220d00000009192631353c3f3b373636373b4857657b8fa4b5c9decdbaa9917c66513c271100000000000000000000081c2f3f50657b8fa2b4c8d0bfae98836e5b4935210e00000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c3043546176879daabbcee2e3d5c0aa95806b55402b1600000000000000162b40566b8095abc0d5e9d7c7bab4b3b3b3b3b3b3b3b3b4bac7bcc3cacecdc9c0b4aa9f93806a5f4d3a291704000000000005182a3b4b6074869ca5b4c1bfb3a99f99959393959aa2b1b6c2c6c3c3c7bab4afabaa99846f5a442f1a001d32475d72879cb2c7c6b19b86717f929ea7b3bfb8b7b9bdc5c8d1c9c1b5a89e8a7a645746321e0e0000000000000000000000000000000000000000000000000000000000071521282b2b2b2b2b2b2b2b25221b1002000000000000000000000000000000000000000000000000000000000000000009192e3f50626a7a7d776960544a3d352b23211e1d202431404e64798ea7b8ccd1c1a7927d67523d28120000000009141d20272926222020222b394b5d71869cb1c6dbd7c7ac96816c57412c1700000000000000000000001123374b5d6f849aafc0d0cab49f8c79634e3c2c1906000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364758647b8c9fb4bfd0cecec0aa95806b55402b1600000000000000162b40566b8095abc0cdcdcdd7cdc9c8c8c8c8c8c8c8c8c9cdcdc9c6c3c6b9b4ada29a8b7e6a625041301b0b000000000000000d1d3145566278879ba3b3b8c5bab4aeaaa8a9abb0b4c0c1b5b1aeaeaeaeaeaeaeae9a85705a45301b001d32475d72879cb2b2b2ac97826c697d8999a1aeb4bac7bfc0bfc1b5b0a39b8a7b655c4a39291600000000000000000000000000000000000000000000000000000000000000040d131516161616161616100e08000000000000000000000000000000000000000000000000000000000000000000000011213343505d656762594b43362d20190e0c09090b1320354a6074899eb3c8d6c1ab96816c56412c17000000000001080b1214110d0b0b0d1b2e3f556a7f94aabfd4dac5b09a85705b3928160300000000000000000000081c2e3f4f657a8fa2b3c7cfbcab98826d5a4935200e000000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e190a0a0a0a0a0a0a0a0a0a0a0a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a4b5d6a7f94a1b3c4b9b9b9aa95806b55402b1600000000000000162b40566b8095abb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7c6b9b4b1aeaaa89e988f847a696050443323130000000000000000021527384859627885939ea7afb4b9c6bdbebebdc4b8b3ada39b99999999999999999985705a45301b001d32475d72879c9d9d9d9c917c675f67778490999fa9a8aaaaa9a6a39b928579655d4b3d2d1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525333f4b4f524c483b3026180f060000000000071c30435471879cb1c6d9c4ae99846f59442f1a00000000000000000000000000000011263b50667b90a5bbd0dec9b39e89745746321e0900000000000000000000001122374b5d6f849aafbfd0c9b49f8b78634d3c2b19050000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1f1f1f1f1f1f1f1f1f1f1f1f1f1f0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3f4a60728399a6a4a4a4a4a495806b55402b1600000000000000162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a2a1a89e9c99959089837a70645c4f42332515050000000000000000000a1a2b3b485962737e89929a9ea8a7a8a9a9a8a6a69d978f86848484848484848483806b55402b16001b30455b708488888888878072604a59626f7b848a8f93949594918d867d72635b4b3f2e1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c10131415161513110d0b050000000000000000000000000000000000000000000715212e373a3d37342b1c140800000000000006101c30435471879cb1c6dac5b09b85705b46301b0000000000000000000000000000000d22374d62778ca2c8d8e0ccb9a78b76614b36210c0000000000000000000000081b2e3f4f647a8fa1b3c7cebbaa97826d5a4835200d0000000000000000000000000000162b40566b8095abc0d5d8c3ad98836e5843353535353535353535353535353535211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c3043546176878e8e8e8e8e8e8e806b55402b1600000000000000162b40566b808d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c8b8987847f7b756d655d4e4a3e3224150700000000000000000000000d1d2b3b48546069757d84898e9193949493918d88827a716e6e6e6e6e6e6e6e6e6b62503d281400192d4255667073737373726b605443484d5e656f767a7e7f807f7c7771676054493c2e2110010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d161e212528292a2b2a2826222019110b070000000000000000000000000000000000000003111c2325282220180d0100000000050b0f1a212e3c4b60748a9fb4c9dbc5b09b86705b46311b0000000000000000000000000000000b20364b60758baabbcee2d6c5a28d78624d38230d0000000000000000000000001022374b5c6f8499afbfd0c8b49f8b78624d3b2b180500000000000000000000000000162b40566b8095abc0d5d8c3ad98836e584a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a37332a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536475862777979797979797977624d37220d000000000000000c22374c6177787878787878787878787878787878787878777674716e6a656056504b3f362d201406000000000000000000000000000d1d2b36434b5660676f75797c7d7f7f7e7b78746d655d59595959595959595955504433210d0012263848555b5d5d5d5d5d564a433634404c50576165686a6b6a67625a524a43362c1e100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e1920222832363a3d3e40403f3d3c38352b26201c130801000000000000000000000000000000000000080e10120d0b05000000070b0f1920222c353e4b5a677d92a9bacdd9c4af99846f5a442f1a000000000000000000000000000000091d324556748a9fb4c9dfcdb8a38e78634e39230e000000000000000000000000081b2e3e4f647a8fa1b3c7cebbaa97816c594834200c00000000000000000000000000162b40566b8095abc0d5d8c3ad98836e5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f4c473a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a4859626464646464646462594834200b000000000000000a1f344759616363636363636363636363636363636363626260565c5955504b4538372e211a0f010000000000000000000000000000000d18263038454b5255606467686a6a68666260544f4b3f4444444444444444403d3326160400081a2a384245484848484740353025202f3839464b5053555554514d483c353025180e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202b353839464b50525455565453514d483c3b3530251d15090000000000000000000000000000000000000000000000000608131c20242b34373d494e5c6478879db2c7d7d7c2ad98826d58432d18000000000000000000000000000000021528385e74899eb3c9deceb9a48e79644f39240f000000000000000000000000001022364a5c6f8499aebfd0c8b49f8a77624d3a2a1804000000000000000000000000162b40566b8095abc0d5d8c3ad9882747474747474747474747474747474747474615847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3b484d4f4f4f4f4f4f4f4d483b2b18050000000000000004182a3a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d4c4b453844403b363228231c110700000000000000000000000000000000000008141c28323637444b4e5253545453514d4a4336372e2f2f2f2f2f2f2f2f2b282116080000000c1a262d3033333333322b201c13111c232933363a3e3f403f3c38342b201c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141e2b353c484d5557616568696a6b6a6866625a58514a43363127190f010000000000000000000000000000000000000000080e1920253035393b484d535b636c7a879da5b7cbe5d3c3aa947f6a553f2a15000000000000000000000000000000001f34495e74899eb3c9deceb9a48e79644f39240f00000000000000000000000000071b2e3e4f647a8ea1b3c9cdbaa996816b5947341f0c000000000000000000000000162b40566b8095abc0d5dfcab49f8c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34373939393939393937342b1d0d0000000000000000000c1c2a3437383838383838383838383838383838383838373632282f2a26201d150a08000000000000000000000000000000000000000000010a161e21263135393c3e3f3f3e3c38353025231c191919191919191916140d0400000000000812191b1e1e1e1e1d160b070000090b171e2125292a2b2a272220190d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081624313c484d5a626b71767a7d7e7f807f7d7b78726d6660544b44372d1f1305000000000000000000000000000000000005111c232c3536434a4f555962697079828c9da5b6c3d4decab6a48e79634e39240e000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00000000000000000000000000001022364a5c6e8399abbccfc7b49f8a77614c3a2917040000000000000000000000162b40566b8095abc0d5e3cfbcab9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d182022242424242424242220180d00000000000000000000000c181f2223232323232323232323232323232323232322211e161915100b09020000000000000000000000000000000000000000000000000002090b141d202427282a2a292623201c130808000404040404040400000000000000000000000406080808080801000000000000030a0c1013151615120d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008162634424e5a626e7880868a8f929395959492918d88837b736960554a3d312313050000000000000000000000000000000d19202e373c494d5460646a71777e858c979fabb6c3d4e0d0c0b29c87725b4a36210c000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f0000000000000000000000000000071b2d3e4e64798c9fb5c9cdbaa895806b5847331f0b0000000000000000000000162b40566b8095abc0d5ebd9c9bcb4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0f0f0f0f0f0f0f0d0b0500000000000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0d0b09030000000000000000000000000000000000000000000000000000000000000000000001080b0f1213151513110d0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041626344451606878838b959c9faaa7a9aaaba9a8a6a59d9890877e73635b4d413123130300000000000000000000000002101d2b343f4b4f5a636b737980868c939a9fabb4bcc9d4e3d2c2b4a2917c67513d2d1a07000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f0000000000000000000000000000001021364a5c6e8399abbccfc6b49e8976614c3929170300000000000000000000162b40566b8095abc0d5eae7d9cfcac9c9c9c9c9c9c9c9c9c9c9c9c9c9c9b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006080b0b0b0b0b070000000000070d0f13151514120e0b0700000000000000000000000000000000000000001222344451626b7e8a999faab1b4bbc8bebfc0bfbdc3b7b2ada59c938579675f4d4130211100000000000000000000000311212e3b484d5d656f7880878e959ba3a8afb5bcc9cfd9d9cfc1b5a49a846f5f4d391f0f00000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f000000000000000000000000000000071a2d3e4e63798c9fb5c9ccb9a895806a5746331e0a00000000000000000000162b40566b8095abc0d5eaded1c8c5bcbcbcbcbcbcbcbcbcbcbcbcbcbcbcb6a18c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c160c0a0400000000000000000000000000000000000000000000000000000000040d13151717160e0c06000000000000000000000000000000000000000000000000000000000000000000000000060b0d1112141513110b02000000000000070c0e15151515151515151515151515100e080000000000000000080d0f10100f0d0b0500000000000000000000000000000000000000000000000000000000000b141b1d20202020201d0e0c070a101b2224282a2b2a2724201c130806000000000000000000000000000000000d1d304051626b80939ea8b4bbc8caccc9c4c1c0c2c5cacbc7c3b6b2a39b8b7d675f4d402f1b0a0000000000000000000011212e3f4b59626e7a848c959da5aab1b5c1c5cacfdadacfc9bcb4a39b8676614c41301d0100000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f000000000000000000000000000000000f21364a5b6e8398abbccfc6b39e8976614c39281603000000000000000000162b40566b8095abc0d5e4d1c0b4b0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e212b211f170c0000000000000000000000000000000000000000000000000000071521282b2c2c2b2321190e0000000000000000000000000000000000000000000000000000000000000000070c0e1920232628292a29261f1406000000010f1a21242a2a2a2a2a2a2a2a2a2a2a2a2a25231c11030000000002101b2225252525221f180d0700000000000000000000000000000000000000000000000000000e1c282f3235353535353224211a1f212d36393d3f403f3d3935302520190e030000000000000000000000000005182b3b4d5e6b80969eb4b9c6cecac6b9b3aeacabadb0b4bbc8cccac1b5a99f8d7d675e4c3928160300000000000000000e1e2e3f4b5d6578838f999fabb2b7c3c6c9d2daded5ccc9bcb5ab9f9785786258473323120100000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00000000000000000000000000000000071a2d3d4e63798c9fb5c9ccb8a7947f6a5745321e0a000000000000000000162b40566b8095abc0d5ddc8b4a29a91919191919191919191919191919191918c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121b293236403633291c0c000000000000000000000000000000000000000000000000041525333c4041414038352c1e0e0000000000000000000000000000000000000000000000000000000000050f1a21242b35383b3d3e3f3e3b3124140200000f1f2d36393f3f3f3f3f3f3f3f3f3f3f3f3f3b372e21110000000010202e373a3a3a3a37342a211a0f0100000000000000000000000000000000000000000000000b1c2c3a44474a4a4a4a4a4739362d33373e4a4e52545554524e4a4336352c1e160b0000000000000000000000000b20344859667c919eb0bccccfc3b6b2a89e999796989a9faab3b9c5d2c7baab9f8c7c655745321e0c0000000000000006192b3c4b5d657b8898a0aeb5bcc9cad4dbded7cdc9c5b8b3ab9f998c8174625a483a2917050000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00000000000000000000000000000000000f21364a5b6e8398abbccfc5b39e8875604b382816020000000000000000162b40566b8095abc0d5dac5b09a847c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c74604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d19203039464b554c463a29170400000000000000000000000000000000000000000000000d21334450555757554d493c2c1d0d0000000000000000000000000000000000000000000000000000000d181f2d36393c484d51525454534e42311f0b00071a2d3d4a4e54545454545454545454545454504b3f2e1c080000081b2e3f4b4f4f4f4f4c473b362d1f10020000000000000000000000000000000000000000000014283a4b575d60606060605c4e4a3d474c555c64686a6a69676360544d493c32281b0f0100000000000000000006192c3c4d6277899eb3bccdcfbfb2a59d928984828182858b949ea7b5c2d2c9bbaa9d8775604b3a2a18040000000000000b2035495a657b8b9ea6b2bfcacfdaded7cdc9c7bab4aea79e968c84796c6056483c2b1c0c000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f0000000000000000000000000000000000071a2d3d4e63798c9fb4c8cbb8a6947e695645321e090000000000000000162b40566b8095abc0d5d8c3ad98836e6767676767676767676767676767676767605645311d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34414d57616b615846331f0f000000000000000000000000000000000000000000000013283c50626a6c6c6b635b493b2b180500000000000000000000000000000000000000000000000002101d2a343d4a4e575a626667696a68604e3b2611000c21364a5b636a6a6a6a6a6a6a6a6a6a6a6a6a655d4b37230e00000d22374b5d6465656462594e4a3d2d2010000000000000000000000000000000000000000000001b2f44576972757575757572635b4c58616a72797d7f807f7c79746c635a4b46392c1f0f0100000000000000000c2035495a6d8297a7b8ccd0bfb2a199877d746f6c6b6d70767f899ba3b5c3d3c8b7a595806b5947341f0a0000000000081b2e3f4d6278899ea9b8c4cfdfdfd2c9c7bab4aea99f99928880786f645c4b45382b1d0d00000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f0000000000000000000000000000000000000f2135495b6d8298aabbcec5b39d8875604b3727150200000000000000162b40566b8095abc0d5d8c3ad98836e58515151515151515151515151515151514b4538271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182b3b484d5f67758076614c3e2d180800000000000000000000000000000000000000000000152b40556a808181807963594834200b00000000000000000000000000000000000000000000000010202e3b474c5b636d72787b7d7e7f7e68533e2913000e24394e63797f7f7f7f7f7f7f7f7f7f7f7f7f7b65503b251000000f253a4f647a7a7a7a7770645c4a3e2d1b070000000000000000000000000000000000000000001d32475d72878a8a8a8a8a8679635e66767f878e92949594928e8881786c6157493d2d200f00000000000000031629394d63788c9fb4c5d4c4b3a199837567605557565858616a78859ba5b6cad4c3b49f8b77614c37220c00000000000e22374b5d6e8399a7b8c7d5e1d4cac1b5b1a99f98918a837c756b635a4e4a3e32281a0d0000000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f000000000000000000000000000000000000061a2c3d4e63798c9fb4c8cbb7a6937e695544311d0900000000000000162b40566b8095abc0d5d8c3ad98836e58433c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3631271a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364859626f7c8895816c5c4a362513000000000000000000000000000000000000000000071c31475c71869696958977624d37220d00000000000000000000000000000000000000000000000e1e2e3e4b59626e7982878d9092939487725d48331d0013283d53687e92949494949494949494949494806b56412c1600051b30455a70848f8f8f8c847a645c4a3622100000000000000000000000000000000000000000001d32475d72879c9f9fab9f98836e6a7c88959ca5a7a9aaa9a7a69d968b8175635b4a3e2d1d0d0000000000000a1e3246576d8297aabbcecbb7a699837361574b4437413a474c596276879cb2c0d0cebaa9947e695436251300000000011527374f657a8fa1b3c5d5ded1c3b7b2a39b928a837c766e6760564d493c362d1e160a000000000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f000000000000000000000000000000000000000f2135495b6d8298aabbcec4b29d8774604b37261401000000000000162b40566b8095abc0d5d8c3ad98836e58432e2727272727272727272727272727201d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354627883919d9f8c7a645443301c080000000000000000000000000000000000000000051a30455a6f859aaca7937e68533e29130000000000000000000000000000000000000000000006192b3c4b5c6477838e979da5a6a7a99d88725d48331d0013283d53687d92a8a9a9a9a9a9a9a9a9a9a996816b56412c16000012273d52677d92a7a4a29a8a7a644f3f2e1b0800000000000000000000000000000000000000001d32475d72879cb2b5bcb29d87727f909da6b2b6c3bfbfbec4b7b3aa9f968679645c4a3b2b180500000000000c21364b6176899eb4c8d2c1b29d88766155463931272c29333b4858647a8fa2b3c7d8c7af9a856f5443301c07000000081d3144556e8398aebfd0e1d1c0b4a59d91867d766e676157524b4538352c211a0f0200000000000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00000000000000000000000000000000000000061a2c3d4d63788c9fb4c8cab7a5927d685544311d08000000000000162b40566b8095abc0d5d8c3ad98836e58432e19121212121212121212121212120b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60738699a1b2aa9b8572604a36261401000000000000000000000000000000000000040a182e43586d8398adaa95806b55402b1c130b08020000000000000000000000000000000000000b2035485a647a8899a1acb2b7c3bbb29d88725d48331d0013283d53687d92a8bdbfc8bbb4b4b4b4b4ab96806b56412b1600000b21364b6075899eb3b4a89b85705d4b37220b00000000000000000000000000000000000000001d32475d72879cb2c7cab59f8d7f949db3b7b9b3b3b4bbc8c9cbc8bbb4a49c897a645948342013000000000013283d53687d92a8b1b5c2b5a3927d67584737291d1516171f2b3a4b5c6f849aafc4d9c9b49f8973604a35200b0000000b20354b6075899eb4c9ded4c3b4a29a877c71686157524b463936322820190e07000000000000000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00000000000000000000000000000000000000000f2035495a6d8297aabbcec3b29c8774604b362614010000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba3b3bfb4a2917c675443301c0800000000000000000000000000000000080c171f212c41566c8196abac97826c5742353025201d150901000000000000000000000000000000091d2f404d6278899da6b3bfb8b3a9aa9f9b86715b46311c0013283d53687d92a8bdcebbaa9f9f9f9f9f9e927e68533d28130000091e3245566c8196acc1b4a38f7a654f39291703000000000000000000000000000000000000001d32475d72879cb2c7cfbcab9f949db5aea6a89e9d9faaabb4bac6cec2b6a79d8877624d41301a0a0000000014293e54697e8a939ca4a7a69b8572604a3a29190b0100040d1c2e3e53687e93a8bdd3cdbaa88d78624d38220d0000000f24394e64798ea8b9cddfcab7a59a8475665e534c4639363229201d150a060000000000000000000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f000000000000000000000000000000000000000006192c3c4d62788b9fb4c8cab6a5927d675443301c080000000000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32465771869bb0c2c0b19c8673604b362614010000000000000000000000000008111c232a33373d3b556a7f94aaae99836e594d4a43363631271c140800000000000000000000000000000f24384c5e70859ba7b7c4b8a79e938c8a877b65503b25100013283d53687d92a8bdcab49f8c8a8a8a8a898174604b35200b0000021628384e63798ea3b5c1ad97826d5746331e0a000000000000000000000000000000000000001d32475d72879cb2c7dac9bcb5a9ab9f99918b89888a8e959fa8b5c1d2c5b7a699836f5f4d3828150200000012273b4f6069767e868e92918879635443301c0c000000000010253a4f657a8fa4bacfd7c6a48e79644f39240f00000011273c51667c91a6c6d7dcc7b29d877561574c40363329211e160b0902050b0d0b090200000000000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f0000000000000000000000000000000000000000000e2035495a6d8297aabbcec3b19c8673604b3625130000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283951677c91a4b5c9b6a4917c675443301c08000000000000000000000004111c232e373a474c525859687d93a8b09a857066636054514b4437302618100200000000000000000000000215273851667b90a3b5c5b9a89e897e777572655d4b38230e0013283d53687d92a8bdc2ac978274747474736d605544311d080000000a21364a5b71859bb0c6b49f8a76614c36210f000000000000000000000000000000000000001d32475d72879cb2c7dcd5c4b7a69d8d837c7674737579808a9ba3b5c2d3c4b3a1917d675645321d090000000c1f32424f57616871787d7c75635b493625130000000000000e24394e63798ea3b8cecfbaa48f7a654f3a251000000013283e53687d93a8bdd2d2bda8937d685646392f211e170c0a0300080d181f22201d150a000000000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00000000000000000000000000000000000000000006192c3c4d62788b9fb4c7cab6a4917c675443301c0700000000162b40566b8095abc0d5d8c3ad98836e58432e190d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073869cb1c3c2b19c8673604b35200e000000000000000000000c171f2e373f4b505861686e73777f95aab39d887e7b78746e6760554b43362e20130500000000000000000000091d3145566f849aafc1c9b49e8a7969626054504b3f2f1c080013283d53687d92a8bdc2ac97826d5f5f5f5e574b4437271501000000071a2d3d53687d93a8b9baa8937e68533d2d1a070000000000000000000000000000000000001d32475d72879cb2c7dccbb7a69d887b6e6761585460646b78859ba4b6cad0bfb39d8875604b36200e0000000214243239464b535b6367666057493d2c18080000000000000f253a4f647a8fa4b9cfd5c5a38e79644e39240f00000014293e53697e93a8bed3ceb9a48e79644f38291b120a03000006111c232a34373631271a0f0100000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f0000000000090f111414141414141414141414141414142035485a6c8297a9bacdc2b19c8673604a35201100000000162b40566b8095abc0d5d8c3ad98836e58432e2222222222222222222222222222222222211e170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354677c91a5b7c9b6a4907b66513c2b19060000000000000002101c29333f4b505d656e767d83888c959dafb7a69d93918d89837c746860544b3e302315070000000000000000000b20364b60758a9fb4c9c5aa947f6a5b4d4a4336382f2111000013283d53687d92a8bdc2ac97826d574a4a4942353127190900000000000f21364b6176899eb4c6b09b85715b4a36210a0000000000000000000000000000000000001d32475d72879cb2c7dcc8b39d8878655d514c46434b4f5a6276869cb1bfd0cbb7a6927c67523c2c190600000006141b2933363d494e52514b45392c1f0e000000030a0c0f18283852677c91a7bcd1ccb8a78d77624d38220d00000013283d53687d92a8bdd2cdb8a28d78634d38230f0801040a0e1a212e373b484c4b45382d1f0f00000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00000004121d2426292a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2b3c4d62788a9fb4c3c9b5a4917c6651402f1c09000000162b40566b8095abc0d5d8c3ad98836e58433737373737373737373737373737373737373633291b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364b6074879db2c7c2ae99846f5a493520080000000000000412202d3a474c5d65707b838a92989da6aaafbcc4b7b3a8a6a79e9891887d73645c4d413225150400000000000000000f253a4f647a8fa9baccb8a78d77624d3d353025231c1103000013283d53687d92a8bdc2ac97826d574235342d201d15090000000000000a1e3346576d8297adc2b5a38e79634e3828160200000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b5a4b3f363330353c4858657b8fa1b3c7d5c4af9a85705a4935200c00000000000b171e212c35393d3c3632281b0e0b11131d171e21242c3645566b8196abc0d6c8b39e89735a4834200b00000011263b50667b90a5c2d3d0baa5907b65503d2d201c14171f212c353f4b50596260564a3d2d1808000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00000715222f383c3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f485a6a8095a4b6c7c2b09b85715e4c382311000000162b40566b8095abc0d5d8c3ad98836e584d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b4639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556a7f94a9bacab49f8c78624d36251300000000000012222f3e4a58616d7b8590999faaadb3b8c4c3ccd5cbc8bdc5b8b3ada69d92867a675f4f43322212010000000000000012273c51677c91a6c7c8b39e89735a4834201c1308080000000013283d53687d92a8bdc2ac97826d57422d1e180b080100000000000000031729394f647a8fa4b6c1ac96816c5645321e0900000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b563c2e211f1c202b3a4b5d6f8499aec8d8c8b4a28d78634d38230e000000000000030a0f1a21232827211e160a131e262832293336393c49546075899eb3c8d2c2ae99836e593c2b19050000000d22374c62778ca4b6c9d6c1ac96816c5b4a3d3530262933363d494e5d65717774635b4a362513000000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f0004152533404c5154545454545454545454545454545454545454546074869ca9bac9b5a3907b66503f2e1c080000162b40566b8095abc0d5d8c3ad98836e6262626262626262626262626262626262626262615746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374c61778a9fb4c9bcab95806b5443301c0700000000091c2f404c5c6476828f9ba2aeb4bbc8c8cbc8c8ccd5d2c9c6c5c9c8c4b7b3a39b8b7d6a614f40301f0f0000000000000013283e53687d93a8bdc7b29d87725d3c2b19070000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000b22374b5d71869cb1c7b39e8975604b36210e00000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160a080e1c2e3f52677c92aabbced1c0a8937e69533e2914000000000000000000060c0e12110b09031324313a3d4739464c4f535b63728298a7b8ccc8b5a4917c66513c2711000000000b2034485971869cb1c5d5c9b49f8b79635b4f4b43363a464c515b636e7b868c8879635443301c090000000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f000d213343505e6669696969696969696969696969696969696969696969798a9fb4c9c1b09a85705d4b37230e0000162b40566b8095abc0d5d9c3ae998378777777777777777777777777777777777777777776614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091f3447596e8399aec6c9b29d8873604a35200b000000000f23384c5e667a8798a0b0b4c0c9ccc9c4b7b2b3b8c5c1b5b0b0b4bac7cac2b5a99f927f6a5e4d3d2c1a0600000000000013293e53687e93a8bdc8b39e88735e382715020000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000081b2e3f54697e94a9bab8a7927d67523c2c1906000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100001121364b61768a9fb4cad8c3ad98836e58372715010000000000000000000000000000000b1e31424e535d5d576164696f788398a0b2c5c9bbaa9c8674604b35200b0000000005182b3b556a7f94a7b8cccdbaa99d87796c6460545a5b5861666e79838f9ba39b8572604a3726140100000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f0013283c50616a7c7e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f859bb0c5c8b4a28f7a654f3a25100000162b40566b8095abc0d5dbc7b3a1998c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b52677c91a8b9cbb7a68f7a644f3a240f0000000011263b50667b8a9da5b2bec8cec5b9b3aba69d9ea7b8b5a39b9a9fa9b2b6c3c7bab49d917c665b4935211000000000000012273c52677c91a7bcc9b49f8a745645311d090000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000001022374c61778a9fb4c5af9a846f5a49352009000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100000a1e32465771879cb1c6dcc7b19c87725544311d0800000000000000000000000000000011263a4e606872727476797e848c99a1b2bec6b9ab9f8c7a645544311d0800000000000d21364c6176899eb3c1d1c7b7a59d8b81797471707072767c838c98a0b1b5a3917c675544311d0800000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f00152b40556a809194949494949494949494949494949494949494949494949ba2b4c8d1c0ad98826d583a29170400162b40566b8095abc0d5e2d0bfb3aea2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b6075899eb4c9c4ab96806b563c2c190600000012273c51677c91a0b2c3cec8bbb4a79e968d88899eb3b09b85858a929da5b2becdbbb49e8a79634e3e2d1b07000000000010263b50657b90a5c9cdbaa98b75604b36200b0000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000a1f3347586e8398aec3b59f8c78624d372614010000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000003162939596e8398aec3d8cab49f8a73604b35200b00000000000000000000000000000013283d53687e8788898b8e939a9fabb3bfbfb3a89e8d7d685c4b3727150100000000000a1f334658697f94a3b5c3d4c3b7a99f978e89868586878b91999fabb2bec1b19c8673604b35200b00000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f001c31475c71869ca9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9b0b4c0d1ddc8b39e88735846331f0a00162b40566b8095abc0d5e2ddd0c7c3b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7aa947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566e8398aec3c7b29c87725a4935200c0000001024394d5f6e8398a6b8c1b4aa9f96898078738298adab958070767d8798a0b2bfccb9a899836f5c4a36220b00000000000f24394e64798eabbccfc7a28c77624d37220d0000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000004182a3a50657b90a5b7bcab95806b5544311d080000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000162b41566b8096abc0d5cebbaa8c77624d37220d000000000000000000000000000000152a3f546a7f949d9ea8a4a8afb4bcb9b4ada1998a7d685f4e3e2e19090000000000000417293a4b6074859ba5b7c3d0c7bab4aca89e9c9a9b9c9fabaeb4bcc9cfcab6a4927d68533d281300000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f001d32475c72879cb1bebebebebebebebebebebebebebebebebebebebebebec5c8d1dfe0cbb8a68b76614c36210c00162b40566b8095abc0cdcdcdcdcdcdccccccccccccccccccccccccccccccccccccbfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283853687d92a8c2cab6a58d78634d38230e0000000a1d30414c6177889eabb0a39b8c81766b636c8196acac97826d6168748298a1b3c7c6b3a18f7a644f39291703000000000c21364b61768b9fb5cabaa58f7a65503a25100000000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000c20354a6073879db2c9b29d8874604b35200d0000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000152a40556a7f95aabfd4d9c8a38e79644e39240f000000000000000000000000000000152a3f546a7f94a9b4b9c6bec4cab9a89e978f8379675f4e4131201000000000000000000c1d3245566277879da5b3bfcacec9c6b9b4b1afb0b2b4bcc9cacfccc6b9b3a199846f5a45301a05000000000000000000000000000000091f34495e74899eb3c9deceb9a48e79644f39240f001d32475c72879cb1c7cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdd5c5a28d77624d38220d00162b40566b8095abb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8aa947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca4b6c9c3a7927d68523d281300000000121f334758667c8d9c9b9285796c6158556a7f95aaae99846e595660728399a9bacdbfae99836e5746331e0a00000000091e32465772889db2c7bda7927d68523d28130000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000071c3043546a7f95abbcb7a6907b66513b2a180500000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100000014293f54697e94a9bed3cfb9a48f7a644f3a250f000000000000000000000000000000152a3f546a7f94a9bcbfc4c9cdc9b49e8a817a6e635b4d4131231302000000000000000002152838485963798799a1b2b6c3cacfccc9c6c5c5c7cacfcdc9c6b9b3a89e938376614c36210c00000000000000000000000000000000091f34495e74899eb3c9cdcdb9a48e79644f39240f001d32475c72879cb1b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7a28d78624d38230d00162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485971869cb1c6c2ad97826d583a29170400000004182a3a4c5e677d86867d72635b4c4753687d93a8b09b85705b455462778a9fb4c9c9b49f8a76614c36210c00000000031628395a6f849aafc4bfaa95806a55402b150000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000001325364d62788b9fb4c4ae99836e5948341f0b00000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100000014293f54697e94a9bed3cfbaa48f7a654f3a2510000000000000000000000000000000152a3f546a7f94a5a7aaaeb4bac7b39e8981796d6157493c2c1d0c000000000000000000000a1a2a3b4a5b637683929ca5afb4bcc9c1c3c3c3c2c0c7bab4afa89e96897e72615846331f0a00000000000000000000000000000000091f34495e74899eb3b8b8b8b8a48e79644f39240f001d32475c72879ca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a28d78624d38230d00162b40566b808d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b576d8297acc2c7b29d87725847331f0a000000000c1c30404d5f6771716860544a3d3c51667c91a6b29d87725d3848596d8298adc2cdbaa9907b66513b26110000000000172c41566c8196abc1c2ad98826d58432d180300000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000008203448596f8499aec4b49f8b77624c37221100000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000152a40556a7f95aabfd4ceb8a38e79634e39240e000000000000000000000000000000152a3f546a7f8e8f9194999fa9b3b8a79e978c8276635a493b2a1804000000000000000000000d1d2d3d4a5861727d87929a9faba9acadaeaeadaba8a99f9992898077696054463a29170400000000000000000000000000000000091f34495e74899ea3a3a3a3a3a38e79644f39240f001d32475c72868d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d78624d38230d000c22374c617778787878787878787878787878787878787878787878787878787878787876614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8c7cab6a58c76614c37210c0000000000122230414d515c5b534a43362d3a4f657a8fa4b49e897456453b53687d92a8bdd7c7aa957f6a55402a15000000000013283e53687d93a8bdc5b09b85705b46301b0000000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000005192b3b51667c91a6b8bbaa947f6a543f2e1c08000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000001162b41566b8096abc0d5d5c5a28d78624d38220d0000000000000000000000000000000c21374c6176797a7c7f848a939ea7b5b3aa9f978778635947341f1000000000000000000000000f1f2d3a47546067737d858b9094979899989795938f8a847d766b61584a4336291c0c0000000000000000000000000000000000091f34495e74898d8d8d8d8d8d8d8d7a644f39240f000d23384d627878787878787878787878787878787878787878787878787878787878787878787974604b36200b000a1f34475961636363636363636363636363636363636363636363636363636363636363615847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798ea9bacec3a48f7a654f3a2510000000000004122330393c47463d35302523384e63788da3b9a88b76604b3b50667b90a5bbd0c2ad98826d58432d18000000000010253a50657a8fa5bac8b29d88735d3928160300000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000d20354b6074889db3c8b29c87725d4b37230b000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000004182a3a596e8398aec3d8ccb8a78b75614b36210c000000000000000003090b0f12120e0c1f334758616465676a6f767e899ba3b5bbb4a59c8777614c3e2d1b0700000000000000000000010f1c2a36434a55606770767b7f8183848382807d7a756f6861574c473a3025180c000000000000000000000000000000000000000e23384d6378787878787878787974604b36210b000b2035495a62636363636363636363636363636363636363636363636363636363636363636363605544311d080004182a3a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c473a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9bda8937d68533e281300000000000005121d2427313128201c1321374c61768caabba28d77624d3650657b90a5bad0c4ae99846f59442f1a00000000000e23384e63788da3b8c9b49f8a745745321e0900000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000081d3144556b8096abc0b6a48f7a65503a2917040000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160200000a1f33475871869cb1c6dbc8b39e89735746331e0a0000000000060c0e161e212427282321192a3a474c4e50525558616976859ba7b8c3b6a598826d5c4a36220d0000000000000000000000000c18253037444b525861666a6c6e6e6e6d6b68646056534b4639332a1c130800000000000000000000000000000000000000000c2135495b636363636363636363605645321e090006192b3c494d4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b443727150200000c1c2a343738383838383838383838383838383838383838383838383838383838383837332a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445571879cb1c6c1ab96816c56412c1701000000000000010a10121c1c130b070b20354a60758a9fb4a48e79644f4354697e93a8bed3c4af9a856f5a45301a00000000000c22374c61778ca1b6cebaa98b76604b36210b00000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000011527374d63788da2b4c3ad98826d5846331f0a0000000000000000000000001d32475d72879cb2c7d6c0ab96816b5640301e160e0d1527374c61778b9fb4cad9c4af9a846f5a39291703000000010f1a21232832363a3c3d38352c1e2a3337393a3c3a464c586176899eb3c8c3b2a08e79644e39240f0000000000000000000000000008131c2631353a474c5154575859595856534f4b45383632291f180c0000000000000000000000000000000000000000000006192c3c494d4e4e4e4e4e4e4e4e4b453828160200000e1e2b35383838383838383838383838383838383838383838383838383838383838383838383631271909000000000c181f22232323232323232323232323232323232323232323232323232323232323211f170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637596e8399aec3c3ae99846e59442f1904000000000000000000000706000000071c30435473889db3a5907b66504b6072859bb0c5d9c3ae99846e59442f1900000000020b20354b60758aa0b5d5c5a28c77624d37220d00000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000092135495b70859aafc5b49f8a76614c3621100000000000000000000000001d32475d72879cb2c7d6c1ac97816c5e4d403228232327314455687d92aabbced4c4aa95806b55402b16000000000f1f2c353839454b4f52524d493c31231f2124252729333a47586a7f94aabfcfbeac96816c573a291704000000000000000000000000000009141d202a33373b3f4243444342403e3a363228211e160b040000000000000000000000000000000000000000000000000e1e2c353838383838383838383632281a0a000000000e192023232323232323232323232323232323232323232323232323232323232323232323201d1509000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b41566b8096abc0c5b09b86705b46311b00000000000000000000000000000000001325365c71869cb1a7927d6755606a7f94a3b5c9d9c8ac97816c57422c170000000a151d21364c61768ba1b6ccb8a78c76614c37210c00000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000006192c3c52677d92a7b9baa9937e68533e2d1b0700000000000000000000001d32475d72879cb2c7dccab49f8c7c675f4b4538383837444b6074869cb1c8d9cbb7a6907b66503b2611000000061a2c3d494e595760646767635b4e42311c0c0f1012171f2a3a4e64798ea3c6d7c7b29c87725847331f0a00000000000000000000000000000001080c171f21262a2c2e2f2e2d2b2824201d150c0a030000000000000000000000000000000000000000000000000000000e1921232323232323232323211e160a000000000000060b0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9bec7b29d88725d382816030000000000000000000000000002090d1830455a6f859aafa9947e696874808d9fb5c1d2cebbaa937d68533e281300000a1a2731363e4e64798ea3b9c9b39e8874604a35200b00000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000e21364b6075899eb3c7b09b86715c4a36220a00000000000000000000001d32475d72879cb2c7dccebbaa9f8b7d6c6056504d4d4f55606a8095a4b6cad7c7b39d8874604b35200b0000000c2135495b636e7276797c7d7868604e3a2917040000040c20364b60758ba8bacdcab6a58c76614c37210c000000000000000000000000000000000000040a0c1115171919191816130f0b090200000000000000000000000000000000000000000000000000000000000000060c0e0e0e0e0e0e0e0e0e0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1214161513110c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcc9b49f89745645321e090000000000000000000000000a151d202b3443586e8398adab9580767d86959fabbccfd5c5b49f8b77624d37220d0002152738454b535c6c8196abc1bcab98836d5443301c0700000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000091e3245566c8197acc1b5a38e79644e38281603000000000000000000001d32475d72879cb2c7dcd9c8baa99f9181756b65636264697480959eafc2d3cdbaa995806b5544311d080000000e23384e637983878a8f91928c7e685847331f09000000081d31445574899fb4c9d3c3a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e141620202020202020202020202020202020202020202020202020202020202015130d03000000000000000000000000000000090d182022272a2b2a2926211f170c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5bacdbaa98b76604b36210b0000000000000000000008131c2731363b484d576c8196acb29d8789929ca4b5bcc9d7c8b8a698826e594834200b00091d31455660696d7a8a9fb4bdb59f8d7a644f3625130000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000031628384e64798ea3b5c1ac96816c5645321e09000000000000000000001d32475d72879cb2c7dcd5c4b8b3b49e9688807b78787a7f86959eafbcccd3c2b49f8b78624d372614010000000d22374c62778c9c9faba7ab9e8a76614c3726140500000b20354b60758a9fb5cacfbaa48f7a654f3a251000000000000000000b141b1d2020202020202016140e04000000000000000b141b1d2020202020202016140e04000000000000050f1517202020202020201d1b140b00000000000000020c1214202020202020202020202020202020202020202020202020202020202020202020110f090000000000081621292b3535353535353535353535353535353535353535353535353535353535352a2820150700000000000000000000000001111c232b34373c3f40403e3b363329211e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b9d7c7a18c76614c37210c0000000000000000000e18253038454b53596269708095aab6a59d9ea7b1b6c2cfd3c7baaa9e8877624c3b2b1805000b20364b60747e828b9fa9b5b09f96816c5c4a3618080000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000a21364a5c71869bb0c6b39e8975604b36210e000000000000000000001d32475d72879cb2c7dccbb8a69da6b5a69d95908d8d8f949ca4afbcccd4c5b6a4957f6a5a49351909000000000b1f34485972879db2bcc9b9a8937e69554431201913131827374d63788dabbccfd8c8a48f7a654f3a2510000000000000000e1c282f32353535353535352c2921160800000000000e1c282f32353535353535352c29211608000000000917222a2c35353535353535322f281c0e000000000006141f262935353535353535353535353535353535353535353535353535353535353535353527241d12040000041626333d404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3f3c332515030000000000000000000009151d2f383b484c5254565553514c463a3632291c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3b8ccb7a18c77624c37220d00000000000000010f1e2b36434a56606870777e858d9fb5c3b6b2b3b8c5cad3ccc2b6a99f8c7c665947341d0d00000c21364c61768b979fa9b5a39b918173604b3e2e1b000000000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000000000071a2d3e53687e93a8bab9a7927d67523c2c19060000000000000000001d32475d72879cb2c7dcc8b39d88949fabb2aaa5a2a2a4a9b1b6c2cccfc4b7a79c8674604b3c2b19000000000005182a3b586d8298adc2d3c6b19c8673604b41342b28282b364455687e93a8c9dacebbaa8e78634e39230e0000000000000b1c2c3a44474a4a4a4a4a4a4a413d342616040000000b1c2c3a44474a4a4a4a4a4a4a413d342616040000051727343e414a4a4a4a4a4a4a47443a2c1c0b000000021424323b3e4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c3930221200000e213344515660606060606060606060606060606060606060606060606060606060606055504333200d00000000000000000009192731404c50596267696b6a68666158534b463930251808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3b8cdb7a28d78624d38230d000000000000000f1f2c3c48546068747d858c939a9fabbccfcac7c8ccd2c9c5b8b3a49c8b7c665e4c3b2a180000000c21364c61768ba1b4baab9b857c6d605544312010000000000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000000000000f21364c61768a9fb4c5af9a85705a493520090000000000000000001d32475d72879cb2c7d6c0ab96807e8d9ea7b2beb8b7b9bec6c9cdc9bfb2a69d8979635645321e0e00000000000010263b50657b90a4b6cac9b6a4947f6a604d483b3e3e3c48546074879cb2c7dccab49f8a75604b36210b00000000000014283a4b575d6060606060606056514434210e00000014283a4b575d6060606060606056514434210e00000f2234455257606060606060605d574b3a28140000000c1f32424f53606060606060606060606060606060606060606060606060606060606060606060514c40301d090014293d51626b7575757575757575757575757575757575757575757575757575757575756a61503c2813000000000000000001152737444b5e6670777c7f807f7e7b76716961574a43362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da2b7cdb8a28d78634d38230e0000000000000e1e2c3d495a62727e87929a9fabb0b5bcc9dadfd2c9c6c1b5b0a79e95867a665e4c402f1d0d0000000c21364c61768ba1b4b59f8c847b6b625143331f0f000000000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000000000000a1e3346576d8297adc2b59f8c78634d3727150100000000000000001d32475d72879cb2c7d6c0ab96816b7d8998a0adb3b9c5bdbdc6b9b4ada199887a645b49382815000000000000000b20354a6073869cb1c1d1c2b49f8d7e6d6259555353555a62728197a4b6cad4c4b09a85705645321e090000000000001b2f44576972757575757575756b62513d29140000061b2f44576972757575757575756b62513d29140000152a3e52636c75757575757575726957442f1b06000012263b4f6069757575757575757575757575757575757575757575757575757575757575757575665e4c39240f00162b40566b808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7f6a553f2a150000000000000000081d314455606c7b858c9194959593908b867e7569605443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3b8ccb7a28d77624d38220d000000000006192b3c495b637884939da6b0b5bcc9cacfdad7cac2b5b1aaa39b93897f74645c4c40302212000000000c21364c61768b9aa2b4ab9f9a8f806b61503d2d1a070000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000000031729394f657a8fa4b6bcab95806b5544311d0800000000000000001d32475d72879cb2c7d6c0ab96816b6777838f989ea7a6a8a8a7a89e988f8377645c4a3d2c1a0a00000000000000071c304354687e93a3b4c7cfbcab9f9282786f6a68686a6f7883979fb1c3d3cbb7a6937e6953382816020000000000001d32475d72878a8a8a8a8a8a8a806b56412c160100081d32475d72878a8a8a8a8a8a8a806b56412c160002172c41576c818a8a8a8a8a8a8a87725d47321d08000014293e53697e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7c66513c271100162b40566b80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f947f6a553f2a1500000000000000091c2f404b607381909ba3a7a9abaaa8ab9f9b93897e72604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9ccb6a18c77614c37220c00000000000b2035495a6379889aa2b2b7c4cacfd9cecacecab9aca49c948d867e756a60564b3e30221204000000000b21364b60748085909faab5af9e957f6a5b4a36210c0000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000000000b22374b5d72869cb1c8b39d8874604b35200d00000000000000001d32475d72879cb2c7d6c0ab96816b59626e7a82898e919293918e89837a6e61594a3d2d1f0f0000000000000000001325364b6073859ba9bac8c9bcb4a0988b847f7d7d7f848b99a1b1bdcecfbeb29d8875614b36210c000000000000001d32475d72879c9f9f9f9f9f96816b56412c160100081d32475d72879c9f9f9f9f9f96806b56412c160002172c41576c81969f9f9f9f9f9c87725d47321d08000014293e53697e939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f917c66513c271100162b40566b8095abb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5aa947f6a553f2a15000000000000000f24384c5e6c81979fb0b4c1bec0bfc9bcb4b1a89e93826d58432d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9d6c5a18b76614c36210c000000000a1e31414d6278889da6b4c0cbd4cfcac8bbb4bbc8ac9b92867f78716960574b45382e2012040000000000091e324556606b707c8b9fb4bcb49f8b79634e39240e0000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000000081b2e3f54697f94aabbb7a6917c66513b2b1805000000000000001d32475d72879cb2c7d6c0ab96816b564c5c646d75797c7d7d7c79756e655d4c473b2d1f0f01000000000000000000081d31445563798b9faabbc8cfbeb2aa9f9a959393959a9faab3bfcecebfb2a0927d675746321e09000000000000001d32475d72879cb2b5b5b5ab96816b56412c160100081d32475d72879cb2b5b5b5ab96816b56412c160002172c41576c8196acb5b5b5b29c87725d47321d08000014293e53697e93a8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a6917c66513c271100162b40566b8095abc0cacacacacacacacacacacacacacacacacacacacacacacacabfaa947f6a553f2a1500000000000006192c3c51667c909fb1bdc8d1cec9c0babbc1c6b3a1917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbccb9a78b75604b36200b0000000010253a4d5f6f849aa6b7c4d1d3c9bcb4aeaa9faabba7927d716a635a534b453932281a100200000000000002162838454b565e6d8297acc2bbaa97826d573a29170400000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000000001022374c61778b9fb4c4ae99846e5948342008000000000000001d32475d72879cb2c7d6c0ab96816b563e4b4f556063676868676460554f4b3f342a1d0f010000000000000000000001142637495b677d8c9faab6c3cdc8bbb4afaaa8a8aaafb4bbc8d0cabdb1a198826e5f4d39281603000000000000001d32475d72879cb2c7cac0ab96816b56412c160100081d32475d72879cb2c7cac0ab96816b56412c160002172c41576c8196acc1cac7b29c87725d47321d08000012273c52677c91a9bacecacacacacad7cdc9cacfd9cacacacacacacacacacacacacacacabba6917c66513c271100162b40566b8095abc0d5dfded1c8c5bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaa947f6a553f2a150000000000000c2035495a70859bb0bdced8c7bab4aaa5a6acb4a999846f5f4d39241000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdc9b39e89745544311d08000000071a2d3d52677d92a2b4c4d5d1c2b6ab9f998f8c9fb4a7927c67554d493c3632281d150a0000000000000000000a1a283236404f647a8fa4b9c8b39d88735846331f0a00000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000000000a1f3447596e8398aec3b49f8b77624d362513000000000000001d32475d72879cb2c7d6c0ab96816b56413737444b4e515353524f4b4437372e1f180c0000000000000000000000000009192c3d4d5f677d8c9da5b4bac7cacac4bfbdbdbfc4cacdc9c2b6b19f968374604b41301b0b00000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d0800000c22374c61778a9fb4becfdcdfe9d7c6bab4b4bcc9c2c4c5c6c6c6c6c6c6c6c6c6c6c6c6c2a6917c66513c271100162b40566b8095abc0d5e4d1c0b4b0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6947f6a553f2a150000000000000d23384d62788da3b4c8e2cebaa99f959090979f9f8a78624d41301d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfc7b19c87725c372715020000000c21364a5b72869cb1c0d0d1c1b4a49c8c837a849aafa9947e69543f352c211e160a0200000000000000000000000a161e21374c61768ca1b6cbb8a68b76614c36210c00000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000000000004182a3a50667b90a5b7bbaa947f6a5443301c070000000000001d32475d72879cb2c7d6c0ab96816b56412c273135393c3d3e3c39363127221b10040000000000000000000000000000000f1f30414d5f677b87969fa9b1b5bcc9c1c2c3c2c0c7bab4afa49c9081746056453123130000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d0800000b1f3447596b8095a0b2becfdce1cdbaa89f9fabaaadaeb0b1b1b1b1b1b1b1b1b1b1b1b1b0a48f7a644f3a250f00162b40566b8095abc0d5ddc8b4a29a9191919191919191919191919191919191919191917f6a553f2a1500000000000013283d52687d92a7c1d1d5c5b49f8b807b7b828a907f695a4935231201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acc1c5af9a85705a45301b000000000e24394e63798ea4b6cad6c5b4a39b867a6e6d8398adab95806b56402b190e09030000000000000000000000000000020b20354b60758aa0b5d5c4a28c77624d37220d00000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000000000000000000c20354b6074879db2c8b29c8773604a35200c0000000000001d32475d72879cb2c7d6c0ab96816b56412c151d20242728282724201d150908000000000000000000000000000000000001122330414d5d6575818a949c9fabaaabadaeadaba9a99f9a91867c6c605645382715050000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d08000004182a3b4b60728298a0b2becfdec9b49f8a8c909597999b9b9b9b9b9b9b9b9b9b9b9b9b9b978674604b36200b00162b40566b8095abc0d5dac5b09a847c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c78634e38230e000000000001162b40566b8095abc0d5ccb8a7927d6b65666c777b69614f3c2c1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031629395a6f859aafc4c2ad98836d58432e180300000013293e53687e93a8c2d3ccb9a79b8575645c6c8196abac97826d57422d180000000000000000000000000000000000000c22374c61778ca1b6cebbaa8b76614b36210c00000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000000000000081c3043546a8095abbcb6a5907b65503a29170400000000001d32475d72879cb2c7d6c0ab96816b56412c16080b0e121313120f0b08020000000000000000000000000000000000000000041223303f4b57616c767f868b90949698999796948f8a847c73665e4b4538281a0a000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d080000000c1c30435460738298a0b2becfc9b49f897c7b80828486868686868686868686868686858177625645321d0900162b40566b8095abc0d5d8c3ad98836e6666666666666666666666666666666666666666635b4935210c000000000002172d42576c8297acc1d7c8b39e88746050515962665e4f43321e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e32465773889db2c8bfaa95806a55402b1500000001172c41566c8196abc1d6c9b39e89776257556a7f94aaae99846e59442f190400000000000000000000000000000000000e23384d63788da2b8c9b49f8a745746321e0900000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000000000000011426364d62788b9fb4c3ad98826d5847331f0a00000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000000000000000000000000000000000000412212e39464b58616971767b7f81828382807f7a756f6660544c4032281a0a00000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d0800000001142636445560738298a0b2becdbaa89e8a7b6a6d6f70717171717171717171717171706c6259483828150200162b40566b8095abc0d5d8c3ad98836e58515151515151515151515151515151515151514e493d2c1a06000000000003182d43586d8298adc2d7c5b09b867054433b484d504c4032251500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba6b7cbc8a7917c67523c271200000003182e43586d8398adc2d6c0ab96806b594853687d93a8b09b86705b46311b0c0e14110f0900000000000000000000000010253a4f657a8fa4bac8b39d88735e3928160300000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000000000000082035485a6f8499afc4b49f8a76614c37211000000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000000000000000000000000000000000000003111b28323a474c545861666a6c6d6e6d6b69656056514a43362f1e160a0000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d080000000008182637445560738298a0b2bec6b9a89e8a7a645c5b5c5c5c5c5c5c5c5c5c5c5c5c5b574d483b2b1a0a0000162b40566b8095abc0d5d8c3ad98836e58433c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c38352c1f0e00000000000003182e43586d8398adc2d8c5af9a85705a362b34373b382f221507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c4cebbaa8e79634e39240e00000004192e44596e8399aec3d1bba6917c66513b51667b91a6b29d87725d39281a21242926241d12040000000000000000000013283d53687d92a8bdc5b09b86705b46311b0000000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000000000000000000005192b3c51677c91a6b8baa9937e69533e2d1b07000000001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000b161e2a33373a474c5155565859585654504b4538353025181202000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d08000000000009192737445560738298a0b2bfc6b9a89e897a645c4a3d46464646464646464646464237342b1d0d000000162b40566b8095abc0d5d8c3ad98836e58432e272727272727272727272727272727272723211a0e0000000000000003182e43586d8398adc2d8c5af9a85705a4530202226231c1103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536546a7f94a9bfcab49f8a75604b36200b00000003182d43586d8298adc2cfbaa5907a65503b4f647a8fa4b49e89745745322d36393f3b382f221507000000000000000001162c41566b8196abc0c2ad98836d58432e180300000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000000000000000e20364b6074889eb3c7b19b86715c4a36220a000000001d32475d72879cb2c7d6c0ab96816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000030c171f212a33373b3f41434442413f3a363228201c13080000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d0800000000000009192737445560738298a0b2bfc6b9a79e897a645b4a3d2c3131313131313131302c2220180d00000000162b40566b8095abc0d5d8c3ad98836e58432e19111111111111111111111111111111110e0c06000000000000000003182e43586d8398adc2d8c5af9a85705a45301b0d110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546e8399aec3c5b09b86705645311d0900000001162b40566b8095abc8d8bca7927d67523e4d63788da2b9a88b76604b363d4a4e54514c403225150200000000000000021628385a6f8499afc4c0aa95806b55402b160000000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000000000000000000000081d3144556b8096abc0b5a38e79644f382816030000001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000000040a0c171f21262a2c2d2e2d2b2a25211e160b0700000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d080000000000000009192737445560738298a1b2bfc5b8a79e8979635b493d2c1e1c1c1c1c1c1c1b170d0b050000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000000000000000000000000000000000003182e43586d8398adc2d8c5af9a85705a45301b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074889eb3c8c9ab96806b56382715020000000012273c51677c91aabbcec3ad98836e5c4a4c61768ba9baa28d78624d4b4f5b6369665e4f4332201000000000000000091e32455672879db2c7bda8927d68533d28130000000000000013283d53687d92a8bdc2ac97826d57422d1802000000000000000000000000000000000000000000000000021527374e63788da2b4c1ac97816c5645321e090000001d32475d72879cb2c7d5c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1115171819181614100b0902000000000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000009192737445560738299a1b2bfc5b8a79e8879635b493c2c1e0e0007070706020000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1903000000000000000000000000000000000000000000000000000003182e43586d8398adc2d8c5af9a85705a45301b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea6b8cbbcab907b66513b261100000000000c21374c61768a9fb4c9cab49f8c7a645c4e58748a9fb4a48f7964515c646f797e7b6a614f3e2d19090000000000000b21364b60768a9fb4cabaa58f7a65503a25100000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000000000000000000092135495b70859ab0c5b39e8975604b36210e0000001d32475d72879cb2c0c0c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000009192737445560738299a1b2bfc5b8a69d8879635a493c2b1e0e00000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1906060606060606060606060402000000000000000000000000000003182e43586d8398adc2d8c5af9a85705a45301b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c556a7f94aac5cab49f8b76614c36210c00000000000a1f3347586e8399abbccfbcab9d887a6c635b73889db2a6907b6667707a848e94907f6a5c4a3727150200000000000e24394e63798eabbccfc7a28d77624d38220d0000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000000000000000000061a2c3d52687d92a7b9b9a7927d67523d2c1a0600001d32475d72879cababababab96816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f12141516161513100c0a04000000000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000009192737445560738399a1b2bfc5b7a69d8878635a493c2b1d0d000000000000000000000000162b40566b8095abc0d5d8c3ad98836e58432e1b1b1b1b1b1b1b1b1b1b1b1b1917100700000000000000000000000003182e43586d8398adc2d8c5af9a85705a45301b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a70859ab0c5c9af9a85705846331f0a000000000004172a3a4e63798c9fb4c2c9b7a69d8b81787271869bb1a7927d767c858f99a1a99f8c7a645544311d08000000000010263b50657b90a5c9cebaa98b75604b36200b0000000000000013283d53687d92a8bdc2ac97826d57422d180200000000000000000000000000000000000000000000000000000f21364b6075899eb3c5b09a85705b4935210900001d32475d728795959595959595816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c151d202427292b2b2b2a2825221f180e0c07000000000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000000000009192737445560738399a1b3bfc4b7a69d8778625a483b2b1c0c0000000000000000000000162b40566b8095abc0d5d8c3ad98836e5843313131313131313131313131312e2b24180a000000000000000000000003182e43586d8398adc2d8c5af9a85705a45301b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788c9fb5cabcab937e69533a2917040000000000000c21364a5b6d8297a4b6c5c4b7a99f978d8782879db2b29d8789919aa2aeb3bbaa9b8674604b36200b000000000012273c52677c91a7bcc9b49f8a745645321d090000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000000000000000000091e3245566c8197acbeb4a28d78634e3727150100142a3f54697f808080808080807c66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000050b161e21273136393c3f4041403f3d3b37332a24211a0f0900000000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000000000009192737445560738399a1b3bfc4b7a59d87786259483a2a1b0b00000000000000000000162b40566b8095abc0d5d8c3ad98836e5846464646464646464646464646464340362818070000000000000000000003182e43586d8398adc2d8c5af9a85705a45301b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e54697f94abbccab59f8c77624d37220d00000000000000071a2d3d4c6176869ca7b6c2c7bab4aca49c989da5b7b6a59d9fa9afb4c0c7c2b5a3947f6a553f2a15000000000013283e53687d93a8bdc8b39e88735e382815020000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000000000000000000031628384e64798ea0b2bfab96806b5544311d080012273b4f61696b6b6b6b6b6b6b665e4c38240f00000000000000000000000000000000000000000000000000000000000000000000000000000d192029323638454b4e52545556555553504c473a39362d241d12050000000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000000000009192737445560738399a1b3bfc3b7a59c877762584739291a0a000000000000000000162b40566b8095abc0d5d8c3ad98836e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5953463624100000000000000000000003182e43586d8398adc2d8c5af9a85705a45301b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c71869bb1c9c5b09b8570594834200b00000000000000000f1f3346586378899ca4b2bfc8c9c2b6b1adb2b7c3c3b6b2b4bac7c8c7bab4a39b897b654f3a2510000000000013283e53687d93a8bdc7b29d87725d3b2a18050000000000000013283d53687d92a8bdc2ac97826d57422d18020000000000000000000000000000000000000000000000000000000a21364a5c6e8298a1a9ab9d8874604b35200b000c2032434f5456565656565656514c402f1c0900000000000000000000000000000000000000000000000000000000000000000000000002131d2b3439464b5356606467696a6b6b6a68656158574e4a3d38301f180d00000000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000000000000000009192737445560738399a1b3bfc3b6a59c8676615746382818080000000000000000162b40566b8095abc0d5d8c3ad9883707070707070707070707070707070706e6453402b170200000000000000000003182e43586d8398adc2d8c5af9a85705a45301b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4f647a8fa3b5c9b9a7927d68533b2b190500000000000000000417293a495a63798698a0b0b4c1c8cac7c2c7cad4d3cac7c9c9c7bab4a99f948578655d4b37230e000000000012273c51677c91a6c7c8b39e89735947341f150f0d070000000013283d53687d92a8bdc2ac97826d57422d1c150b0700000000000000000000000000000000000000000000000000071a2d3d4b6175838f949595917c66513c271100031425323b3f404040404040403b382f22120000000000000000000000000000000000000000000000000000000000000000000000000a151d313c484d5761686f75797c7e8080807f7d7a77726c635b514c40342a1d11030000000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000000000000000009192737445560748399a1b3c0c3b5a49b85756156453625130000000000000000162b40566b8095abc0d5dec8b39e8985868686868686868686868686868686826e59432e190400000000000000000003182e43586d8398adc2d8c5af9a85705a45301b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586d8297adc1c9b39e8975604b36210d000000000000000000000c1c2c3c495b6375838f9ba3adb3b8c5bfc2c5ced6c8c6bab4afa99f978a7f74625a4b3f2e1c08000000000010253a4f657a8fa9baccb8a78c77624c3b312724211a0f01000013283d53687d92a8bdc2ac97826d574232312a201c13080000000000000000000000000000000000000000000000000f1e324657616f7a7e8080807d67513c27120000071420272a2b2b2b2b2b2b2b26241c120400000000000000000000000000000000000000000000000000000000000000000000000a1a2832424e5a626c767e848a8e91949596959492908c87817970665e4c473b2f21110300000000001d32475d72879cb2c7d6c0ab96816b56412c160100081d32475d72879cb2c7d6c0ab96816b56412c160002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000000000000000009192737455660748399a2b4c1c2b5a39a8474605443301c1200000000000000162b40566b8095abc0d5e0ccb8a79e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b87725d47321d0800000000000000000003182e43586d8398adc2d8c5af9a85705a45301b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c61778a9fb4c9bcab96816c5745321e0900000000000000000000000e1e2c3d4957616e7b8590989ea7a7aaadb1bec8b8aba89f9a948a81786a6055493c2e21110000000000000b21364b60768a9fb4c9c5a8937e69594b453839362d1f0f000013283d53687d92a8bdc2ac97826d57474746403530251808000000000000000000000000000000000000000000000003162839464b5d64696b6b6b675f4d392410000000030c121416161616161616110f0900000000000000000000000000000000000000000000000000000000000000000000000009192838454b6068788189939a9fa9a7a9aaabaaaaa8a5a59c968e857c6e62594b3f2f211100000000001d32475d72879cb2c7d6c0ab96816b56412c16020005192b3c5d72889db2c7d5c0ab95806b56402b160002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000000000000000000000919273845566074849aa3b5c3c1b4a2988272604a40301d0d000000000000162b40566b8095abc0d5e8d5c5b8b3b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09c87725d47321d0800000000000000000209182e43586d8398adc2d8c5af9a85705a45301b131313130b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586b8095a9bac9b49f8c79634e392816030000000000000000000000000f1f2c39464c5d65707b83898e929597a0b1beab9a9089857f776c635a4b44372b1e1103000000000000091e32455670859ab0c2c8b39e89786660565a4e4a3d2d1a070013283d53687d92a8bdc2ac97826d5c5c5c5c554a433625130000000000000000000000000000000000000000000000000b1b28323f4b4f54565656514d40301d0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374556606e7e89969ea8afb4bac7bebfc0c0bfbdc3b6b2aca29a918377655d4c3f2f1e0e000000001d32475d72879cb2c7d6c0ab96816b563a2c1d150f0d2035485a74899eb4c9d4bea9947f69543f2a140002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000000000000000000000a1a273845566175859ba5b7c7c0b2a095806b5e4d3b2b18050000000000162b40566b8095abc0d5eae3d5ccc8c5c5c5c5c5c5c5c5c5c5c5c5c5c5b29c87725d47321d08000000000000000a161e212e43586d8398adc2d8c5af9a85705a45302929292929211e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364c6176899eb3c7bcab98836e5b49351b0a00000000000000000000000000010f1b29333f4b505e656d74797d7f8297adc7a5907c756f6a61584d493c3127190e00000000000000000316283852677c91a4b6c6b8a79d877c75726f645c4a36210d0013283d53687d92a8bdc2ac978272727272716a605443301c070000000000000000000000000000000000000000000000000b161e2e373a3f4040403c3930221200000000000000000000000000000000000000050b0d111415161615120f0b090200000000000000000000000000000000000000000a1d314455607483929ea8b3b9c6c9c7bfbab7b5b6b8bdc3cac7c0b4b0a199897b655d4c3c2c18080000001d32475d72879cb2c7d6c0ab96816b58493d3228242228394d62788da8b9ccd8c8a8927e68533d28130002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000000000000000000000000000a1a283846576277879da9bacdbfb09e917c6659483420110000000000162b40566b8095abc0d5eaded1c8c4babababababababababababababab29c87725d47321d080000000000000a1a2832363d43586d8398adc2d8c5af9a85705a453e3e3e3e3e3e3632281a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546a8095a8b9c8b49f8c79634e3d2c1a000000000000000000000000000000000b171e2e37404c50546064676a768ba9baa38d786355544c473a352c1d1509000000000000000000000b20354b6073869ca8b9c5b7a59d918a87847a644e39240f0013283d53687d92a8bdc9b39e8987878787867f74604a35200b0000000000000000000000000000000000000000000000000003101b2225292b2b2b27241d120400000000000000000000000000000000070c0e18202226292a2b2b2a2824201d150b0903000000000000000000000000000000000a1a2f3f4b60738399a1b3b9c6ccc3b7b2aaa4a2a0a1a3a7aeb5bcc9c8bfb3a79e8b7c655b493625130000001d32475d72879cb2c7dbc6b19b8576635b4b45383938384557687e93a8c6d6cebbaa8f7b65503a25100002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000000000000000000000000000a1a29394859647a8a9fb4bfcdbcb39e8977624c3f2e1c0800000000162b40566b8095abc0d5e3d1c0b4afa5a5a5a5a5a5a5a5a5a5a5a5a5a5a59c87725d47321d08000000000002162838454b5253586d8398adc2d8c5af9a85705a535353535353534b453828160200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074889eb3c6bbaa98836e5b49361f0f000000000000000000000000000000000003111c232f3836434b4e5258748a9fb4a48f7a654f3737332a20190e020000000000000000000000081c30435463798a9ea8b5c1b7b2a99f9d9a85705b46311b0013283d53687d92a8bdccb9a79e9c9c9c9c9b917d67523c2712000000000000000000000000000000000000000000000000000000080d0f1416161612100a00000000000000000000000000000000060f1a21232b34373b3e4040403f3d3a363228211e160a0200000000000000000000000000021527384c5d6d8297a1b3bfccc8bbb4a59d958f8c8b8c8d92999fabb5c2cfc5b8a99e8a79635443301c0700001d32475d72879cb2c7dcc9b5a39b87796a6056514e4d4f566075879db2c7dcc9b49f8a75604b36210b0002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000000000000000000000000000b1b2b3b4a5c687d92a1b3c7ccb8a799836e5d4b37231000000000162b40566b8095abc0d5dcc8b4a29a8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f87725d47321d080000000000091e324556606768686d8298adc2d8c5af9a85706868686868686868605645321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b9fb3b8b49f8b79634e3d2c1a010000000000000000000000000000000000000008111c23263035393a5d73889db2a6917c66513c271f180c0600000000000000000000000000011426364a5b667c8a9ba3afb4babab4b29d88725d48331d0013283d53687d92a8bdc1c5b9b3b1b1b1b1ab96806b56412b16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202d36393b484d515355565554524f4b45383632281d150a000000000000000000000000091d314556657b90a0b1bfd0c8bbaa9f93877f7a777676787d838d9ca4b4c1d1c7b9a89b8572604a35200e00001d32475d72879cb2c7dcd2c1b5a59c8b7f756c6664626469748399a5b6cad5c5b09b85705645321e090002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000000000000000000000000000000000d1d2d3e4e5f6e8399a9bacdc5b2a18f7b65503e2d1b07000000162b40566b8095abc0d5dac4af9a847b7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a644f3a240f0000000000000b21364b60747c7e7e7e859bb0c5dbc7b29c867e7e7e7e7e7e7e7e7e74604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576d82929ea6a696816b5b49351f0f000000000000000000000000000000000000000000000908141c2031465b71869bb0a8937d68533e2813040000000000000000000000000000000008182d3d4c5e667986909a9fa9a8aaab9d88725d48331d0013283d53687d92a8acacacacacacacacacab96816b56412c160000000000000000000000000000000000000000000000000000000001080b0e1010100e0c0600000000000000000000000008131c2c353d4a4e56596266696a6b6b6a67646056534b453932281a1103000000000000000000000b20364b6074869cb1bececebbaa9f8c7e746a6562606163686e79869ba3b4c6d6c6b4a2917c67523c2c1906001d32475d72879cb2c7dcddd0c3b6a99f9589817b7977797e8799a1b3c3d3ccb8a7927d6852382816030002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000000000000000000000000000000000f2031414d62788a9fb4c9cfbfb09b85705c4a36220d000000162b40566b8095abc0d5d8c3ad98836e656565656565656565656565656565645c4b37220d000000000000182d43586d82929393939ba3b5c9ddcab6a49c93939393939393938c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283952636d7d88969d8875614b3d2c1a010000000000000000000000000000000000000000000000000108172c42576c81979fa9947f6a553f2a150000000000000000000000000000000000000f1f2f404c5b63727b848a8f9394969787725d48331d0013283d53687e92979797979797979797979796806b56412c1600000000000000000000000000000000000000000000000000000008141c202325252523211a0f010000000000000000000a1825303c494d5b636b72777b7e7f80807f7d7a756f6860574b45382e21140600000000000000000215273752677d92a4b6cad5c5b49f8c7b6960554f4d4b4c4e525b6375859ba8b9cdd1c0b09b85705b4935210c001d32475d72879cb2c7dcd0bfb3aeb1b4a79e96918e8d8f949da5b3bfcfcfbfb39e8975604b36210b000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000000040a0c1012120c0b0400000000000113203448596c8196abbccfc8b4a38e7a644f39240f000000162b40566b8095abc0d5d8c3ad98836e5850505050505050505050505050504f4b3e2e1b070000000000001c32475c71879ca8a8a8b0b5c1d1e4d3c3b6b2a8a8a8a8a8a8a8a18c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b354552606876818a7d675746331f0f0000000000000000000000000000000000000000000000000000000c21374c6176848a8a8a816c56412c170100000000000000000000000000000000000112222f3d495460666f757a7e7f8181806b55402b160010253a4f657b818282828282828282828282817c67513c271200000000000000000000000000000000000000000000000000051318263035383a3a3a38352c1f0f00000000000000000a1b2836434a5a636d7981878c909395959594928f8a847d756960564b3f3224170900000000000000081d3144556f8499afc2d3ccb8a7947f6a5d4b4437373637383d4a5762778a9eb4c9dec9b5a38d78634d38230e001d32475d72879cb2c7dcc7b3a1999ca4b3b3aca6a3a2a4a9b2b7c3cfcdbfb2a0927d675645321e09000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000090f11171f21252727221f180c000000000005192b3b4d62788c9fb5cad1c1ac97826d573c2c19060000162b40566b8095abc0d5d8c3ad98836e58433a3a3a3a3a3a3a3a3a3a3a3a3a3a372e2010000000000000001d32475c72879cb1c4bdc2c6cfdcece1d3cac7bdbdbdbdbdbdb6a18c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172735414e58616c78675f4d392917010000000000000000000000000000000000000000000000000000000a1f334758616f7475756c63513e29150000000000000000000000000000000000000004121f2c36434a51566065686a6b6c6b62503d2814000e22374b5d656c6c6c6c6c6c6c6c6c6c6c6c6c675f4d3924100000000000000000000000000000000000000000000000000715233136434b4d4f4f4f4e493d2c1a060000000000000a1b28394554606a78828c969da5a6a8aaabaaa9a7a99f9a92887e74655d4f43352717070000000000000b20364b6074899fb4c9dec8b39e8875614b3f3127222121232d3948596b8095abc7d7d1c1a8937e68533e2913001d32475d72879cb2c7d9c3ae99838799a1b2b7c3b9b7b9bec7cacac7bab4a198826e5f4d38281603000002172c41576c8196acc1c8c7b29c87725d47321d080000000004121d24262a33373a3d3c37342a1d1002000000000d2035495a70859ab0c5dac8b29d88735b4935210c0000162b40566b8095abc0d5d8c3ad98836e58432e25252525252525252525252524221b1002000000000000001d32475c72879ca6a4a8adb2becfe1d4c4b7b2acacacacacacaca18c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091723313a464c5b635b4d41301b0b0000000000000000000000000000000000000000000000000000000004172a3a474c5a5f606056514434220e0000000000000000000000000000000000000000010f1825303538454b505355565755504433210d00081b2e3f4b4f57575757575757575757575757514d40301d0a000000000000000000000000000000000000000000000000152532414e546063656565635b4935210c000000000003162839455760727f8b989fabb2b6c3bebfc0c0bfc7bab4afa69d93877b696152453525150300000000000e23394e63798ea8bacdd7c2ad98826d5746321d150d0b0c0f1b2b3b4f64798ea9bacdd6c1ac97816c57422c17001d32475d72879cb2c7d6c0ab96807683919da5b0b5bcc9bdbcc3b6b2a99f958374604b41311a0a00000002172c41576c8196acb2b2b2b29c87725d47321d080000000012222f383b3a474c5052524c473b2d20100000000006192b3c556a8095aabfd5cbb7a68d78634d38230e0000162b40566b8095abc0d5d8c3ad98836e58432e1910101010101010101010100f0d07000000000000000000182d43586d82888c8f9398a0b2c6dacbb7a69d96969696969696968c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131c29333d494e493d3023130000000000000000000000000000000000000000000000000000000000000c1c2a3337444a4a4a413e342616050000000000000000000000000000000000000000000008131c202832363a3e3f4142403d33261604000010212e373a424242424242424242424242423c393022120000000000000000000000000000000000000000000000000e1e32434f5f6874787a7a7a79634e38230e00000000000b1e324557607582959faab4bcc9cac6c0bebcbdbfc5cac9c4b7b3a69d8c7f6c635243332111000000000011263b50667b90a5c6d7d3bda8937e685339281601000000000d20354a6074899fb4c9d9c4af99846f5a442f1a001d32475d72879cb2c7d6c0ab96816b6f7c87939b9faba7a8a7a5a59d968a80736056453223130000000002172c41576c81969d9d9d9d9d9c87725d47321d08000000091d2f404c515a586165676761594a3e2d1b070000000011263b51667b90a6bbd0d4c4a6917c67513c27120000162b40566b8095abc0d5d8c3ad98836e58432e190300000000000000000000000000000000000000000000162b3f53646d73767a7d8298adc3d4c8b29d8881818181818181818176614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f2c3538352c1f1305000000000000000000000000000000000000000000000000000000000000000c171f212f3535352c2922160800000000000000000000000000000000000000000000000000070b161e2125292a2c2c2b2821160800000002101b22252d2d2d2d2d2d2d2d2d2d2d2d2d27241d1204000000000000000000000000000000000000000000000006192b3c4f616a7d878d8f8f8f7e69543e2914000000000b1b31414b60758598a0b4bbc8c9bcb5b1aba8a7a8aaafb4bbc8cbc4b7aa9f94816c61503f2f1a0a0000000012273c51677c91a6bcd1d1bba6917c66513c27110000000000071c30435472889db2c7dac5b09a85705b45301b001d32475d72879cb2c7d6c0ab96816b5f67757e868b8f929392908d8781786a605545382815050000000000162b40556b808888888888888884705b45301b060000000f24384c5e666f73777a7c7c77645c4a36220f000000000f243a4f64798fa4b9ced3bda8937e68533e29130000162b40566b8095abc0d5d8c3ad98836e58432e19030000000000000000000000000000000000000000000010233546535858616568768ca5b7cbc5af9a85706c6c6c6c6c6c6c6c615746321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a2123211a0f01000000000000000000000000000000000000000000000000000000000000000000040a0c1a1f202017150e050000000000000000000000000000000000000000000000000000000002090b101315161716140d04000000000000080e101717171717171717171717171712100a000000000000000000000000000000000000000000000000000b2035485a6a7f929da5a49f8a76614c37210c000000031729394e5f6e8298a3b2becec0b4ab9f9b96939293959a9faab5bcc9c8bbb49f957f6a5d4c3828160200000011263c51667b91a6bbd0d1bba6917c66513c27110000000000061a2c3d5d73889db2c8d9c4af9a846f5a452f1a001d32475d72879cb2c7d6c0ab96816b5657606971767a7c7d7c7a78726b625a4b4437281a0a00000000000013283d50626b73737373737373706655422d190400000011263b51667c84888c8f92918a7a644f3d2d1a070000000e23394e63788ea3b8cdd4bfaa947f6a553f2a150000162b40566b8095abc0d5d8c3ad98836e58432e190d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0a0300000000061828353f3a474c4f5872889db2c7c5af9a85705a575757575757574b463928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384d62788b9fb2b7ad98836d5847331f0a0000000a1e334657687d92a0b2c1cdbcb0a29a8c86807e7c7d80858b979fabb9c6cebdb49f8d7b655645321e0900000010253a4f657a8fa4c3d4d2bda8937d685336261401000000000c2135495b74899fb4c9d8c3ae98836e59432e19001d32475d72879cb2c7d6c0ab96816b56454b5358616567686765635b564d483c3126190a000000000000000d21334450555d5d5d5d5d5d5d5b55483826120000000012273c51677c919da6a5a7a89b85705c4a3621110300000f253a4f647a8fa4b9cfd4bea9947f69543f2a140000162b40566b8095abc0d5d8c3ad98836e58432e2222222222222222222222222222222222211e170b000000000a18232b2a33373a596f8499aec4c5af9a85705a454141414141413632281b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0e0f0e0d0b0902000000000000000000000000000000000002090b15151412100c0a04000000000000000000000000000000000000050b0d1515151515151515151515151512100a0000000000000000000000000000000000000000000000091d3145566b8196a9bab6a5907b65503a2a17040000011426364b6176889eb3becfbeb09e968479716b6967686a7078818d9ea8b9c9cfbcab9d8775604b3727150100000c22374c61778ca5b7cad6c1ac97816c5443301c110a04080b1628384e63788da9bacdd6c6aa95806b55402b16001d32475d72879cb2c7d6c0ab96816b5641363a474c50525352504d493c38342b1d14090000000000000000041526333d403b474c4e4d483c4542382a1a08000000000d22374d62778ca5b7c4c6b4a38e79644e3f2e1e1613141b2c3d52687d92a7bdd2d8c8a8927d68533d28130000162b40566b8095abc0d5d8c3ad98836e58433737373737373737373737373737373737373633291b0b0000000006100c171f2b40556b8095aac0c5af9a85705a45302c2c2c2c2c211e160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f1112100a0100000000000000000000090e101a1a1a1a1a1a0d0b05000000000000010b0c171f2123242422201d150d0b05000000000000000000000000000a151d202a2a292726221f180d0b0500000000000000000000000000000d1920222a2a2a2a2a2a2a2a2a2a2a2a2a27241d12040000000000000000000000000000000000000000000b20364b6075889eb3c7b29c8773604a35200c000000081c3043546a7f94a6b8cbc6b2a0968072645c565352535559626c7c8a9eabbccfc9b6a5947e695544311d0800000b1f34475972879db2c9d9c7b29d8774604b3c2e221f181d2029324556697e93a9c7d7ccb9a8917c66513c2611001d32475d72879cb2c7d6c0ab96816b56412c2a33373a3d3e3d3b38352c2220190d010000000000000000000012222f3e4a4f596164625a514d4133251503000000000b2034485972879db2c8d1c1ac97826d5d4b3e322828292e39495b6e8398aec3d8cebbaa8f7a65503a25100000162b40566b8095abc0d5d8c3ad98836e584d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b46392917030000000000000412273c51677c91a6c6c5af9a85705a45301b171717170c090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121c242627251e13060000000000000003111c23262f2f2f2f2f2f2220180d0000000005131e252a3337383a39373631272220180d02000000000000000000000a1a2832363f3f3e3d3b37332a2220180d0200000000000000000000000d1d2b34373f3f3f3f3f3f3f3f3f3f3f3f3f3c39302312000000000000000000000000000000000000000005192b3c51677c91a6b8bbaa947f6a5443301c070000000b20354b6074879db2c4ccb9a898826d60544a3e3e3d3e3b484d5e667c8d9fb4c6d3c3b29d8874604b35200b000004182a3b566b8196abbccfcab6a5917d675a4b3f37332a313539464b6074879db2c7d6c5b39e8975604b36210b001d32475d72879cb2c7d6c0ab96816b56412c171f2125272827252321190e0b0500000000000000000000000c1c2f404c5c647077797771675f50433321110000000005182b3b556b8095aabbcecab49f8c7b655c4b46393d3e3e4b5763798c9fb4cadfc9b49f8a76604b36210b0000162b40566b8095abc0d5d8c3ad98836e6262626262626262626262626262626262626262615746331e0a000000000000000e23384d63788da8b9c5af9a85705a45301b0502020200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f383b3c3930211a0e01000000000011212f383b44444444444437342b1d0d0000011323313a3a474c4e4f4e4d4b453837342b1d1509000000000000000002152838454b54545352504c473a37342b1e160a00000000000000000005192b3b484d54545454545454545454545454514d41301d0a000000000000000000000000000000000000000b2035485a6f8499afc5b49f8b77624c3625130000000010253a4f657a8fa5b7cbc9b49e8976614c43362d2927282b34404c5e6c8196a8bacdcbb7a6907b66503b26110000000e23384e63798c9fb4c2d3c3b39e8978655d514c473a444b4f57616d8197a5b7cbc9b9a796816c5745321e09001d32475d72879cb2c7d6c0ab96816b56412c160a0c10121312100e0c060000000000000000000000000004182a3a4c5e667a858c8e8d867c6a61503f2f1c08000000000d22374d62778b9fb4c5cebbaa9e897a6a6157545253565c6475859baabbced1c1af99846f5745321e090000162b40566b8095abc0d5d9c3ae998378777777777777777777777777777777777777777776614b36210c000000000000000b20354a6074899eb4c5af9a85705a45301b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b2f404c51524d41352c1c1408000000091c2f404c505959595959594c483b2b1805000b1e31414e525861636463626056554d483b3127190b00000000000000091d324556606a6a6967656158564d483b32281a0d00000000000000000b20344859626a6a6a6a6a6a6a6a6a6a6a6a6a675f4d392410000000000000000000000000000000000000011426364d62788b9fb4c4ae99836e594834180800000000162b40556b8095aac3d4c1ab96816c5846332518141213192030404c61778a9fb4c9d4c4ac97816c573727150200000c2135495b6c8197a4b6c3ccb8a79d877b6f6661585d5560646a7582979fb1c3c9bcab9e8977614c39281603001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000000000000000000a1f344759667c8b9aa2a3a49c91806a5d4c38230e000000000b203448596d8298a7b8ccc8b8a79e8a7f756e6968696b717a869ba3b5c8d9c9b4a3917c6651392816030000162b40566b8095abc0d5dbc7b3a1998c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7f6a553f2a1500000000000000071c30435470859bb0c1af9a85705a45301b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394c5e66675f4e493d3026180800000e23384c5e656f6f6f6f6f6f62594834200b0010253a4e5f6872767879797775706a62594b4437291b0b0000000000000b20364b60747f7f7e7c7b77716b62594b45382b1d0d000000000000000d22374d62777f7f7f7f7f7f7f7f7f7f7f7f7f7d67513c2712000000000000000000000000000000000000081c3043546a8095abbcb7a6917b66513b2b1800000000021628385a6f859aafc4d8c7a5907b66503a29170800000005121f3447596e8399aec3d8c7b19c87725544311d080000061a2c3d4c6176869ca5b4c0c5b7a69d8d847c777472737579808898a0b1bec5b9ab9f8d7d675947341b0a00001d32475d72879cb2c7d6c0ab96816b56412c1601000000000000000000000000000000000000000000000c22374c6177899ea9b4c0b6b19e907b65503b26100000000005182b3b4c6277899eb3bccdc5b8a99f9489837f7d7e80868f9ca4b5c2d2cfbcab9b85705e4d391b0a000000162b40566b8095abc0d5e2d0bfb3aea2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2947f6a553f2a150000000000000000132536576c8197ababab9a85705a45301b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324557667c7c6f635b4b43362614010010263b50657c84848484848377624c37220d0013283d52687d878c8d8f8e8c8a857f776b6055463929170300000000000c21364c61768b949392908b8780776c6056483b2b1b0a00000000000010253a4f657b8f949494949494949494949494836f59442f1a0000000000000000000000000000000000000b20354b6074879db2c9b29d8874604b35200d00000000091e32455673889db3c8cebaa98b76614c36210c000000000004182a3a53687d93a8bdd2cab49f8a75604b36200b0000000f1f3346586278879aa2b2b6c3b7ab9f99918c8988888a8f959ea6b2bebab4a79e8d7f695f4d3b2a180000001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000000000000000000152a3f546a7f94a8b9c7d1cabcaf9a846f5a452f1a05000000000d1f344859677d929eb0bcccc7bab4a79e98949293969ba3b1b6c2d2cdbcb59f8d7a644f40301d00000000162b40566b8095abc0d5e2ddd0c7c3b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7aa947f6a553f2a15000000000000000011263b51667c909696969685705a45301b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4b6075879184796a605443301c080013283d53687d92999999998d78634d38230e00152b40556a8095a4a3a4a3aa9f9a958a8074615746331e1301000000000c21364c61768ba1a8a7ab9f9c968b817462594839281603000000000010253a4f657a8fa4a9a9a9a9a9a9a9a9a9a999846f59442f1a000000000000000000000000000000000004182a3a50667b90a5b7bcab95806b5544311d08000000000b21364b60768a9fb5cac9b49f8a745846331f0a00000000000011263b50667b90a5bbd0cebbaa8d78624d38230d0000000417293a495a627684919ca5b3b8bcb5aea6a89e9d9e9faaaab3b8bdb1a99f97897c69614f41301d0c0000001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000000000000000000192e44596e8399aec6d6e5dec9b49e89745f49341f0a0000000005182a3b4d5f6b80969eb4b9c6cdc5b9b3ada9a7a8abb0b5c1cad0c7bab49e937e695c4b37221200000000162b40566b8095abc0cdcdcdcdcdcdccccccccccccccccccccccccccccccccccccbfaa947f6a553f2a1500000000000000000f24384c5e677c818181817e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b6b8095a29a8b8072604b35200b0013283d53687d92a8aeaea28d78634d38230e0014293f54697e94a9c3b9c8bbb4b0a99f958475614b41301e0a000000000c21364c61768ba9b5bcbcb5b1a99f968578625745321e0d000000000010253a4f657a8faab4b4b4b4b4bbc8bfbfae99846f59442f1a00000000000000000000000000000000000a1f3347586e8398aec3b59f8c78624d37261401000000000d22374c62778cabbccfc8b39e89735443301c080000000000000f253a4f647a8fa4b9cfd9c8a38e79634e39240e000000000c1c2b3c4958616f7c87909ea7b8cac4c6b9b4b2b3b4bbc8c8c4b19f978a8177665e4f43322313000000001d32475d72879cb2c7d6c0ab96816b56412c160100000000000000000000000000000000000000000000192f44596e8499aec8d8e8dec9b49f89745f4a341f0a00000000000d1d304151626b80939ea8b5bcc9cbc9c3bebdbec0c6c9ccc8c0b4a99f93806b614f3e2e1b0400000000162b40566b8095abb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8aa947f6a553f2a150000000000000000091d2f404d5f676b6c6c6c69604f3b2612000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4d63788b9fb4a99f947f6a543f2a150013283d53687d92a8bdb8a28d78634d38230e0013283d52687d92a7bac7bdc8cac7bab4a299836e5f4d392510000000000b20364b60758a9d9fababb4bbbab4a39b8575604b3c2b1905000000000d22374c62778b9d9f9f9f9f9faabbcec4ae99846f59442f1a00000000000000000000000000000000000c22374c61778a9fb4c5af9a846f5a4935190900000000000d23384d62788da2b7dacab49f8a75604b35200b00000000000011263b51667b90a6bbd0d9c9a38e79634e39240e00000000000e1e2b3a474c5f67727b889eb3c8d7cdc9c6c5c6c8cbd4d6c1ac9781766c61584c4032251405000000001d32475d72879cb2c7d5c0ab96816b56412c160100000000000000000000000000000000000000000000162b40556b8095aabbccd5cdbfb09b85705b46301b060000000000001323344451626b7e8a999fabb2b7c4bfc1c2c3c1c0c5b8b3ada29a8a7e6b6251423220100000000000162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3947f6a553f2a15000000000000000000122230414d5156565656534f42321f0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c6e8399a9babaae98836e59432e190013283d53687d92a8bdb8a28d78634d38230e0011263c51667c919fa9a2a8b3b8c5cdc0b3a1927d67523e2e1b08000000081d314455687e888a8d969faabbc1b5a397816c5a4834200b000000000b1f344859687d878a8a8a8a8b9fb4c9c4ae99846f59442f1a00000000000000000000000000000000081b2e3e54697e94a9bab8a7927c67523c2c190000000000000d22374d62778ca2c4d5cebbaa8d78624d382313010000000004182a3a53687e93a8bdd3cfbcab8d78624d38230d0000000000031628394557606e7d879da7b8c9c7bab4b1b0b0b3b7c4cacab49f8c8276655d4c402f1e0e00000000001d32475d72879cb2c0c0c0ab96816b56412c1601000000000000000000000000000000000000000000000e23384d63788b9fb3b8c5bab4a1927d67523d281200000000000000051626344451606878838c969da6a7aaacadaeacaba8a79e988e847968605144342414020000000000162b40566b808d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7f6a553f2a1500000000000000000004122330393c414141413e3b322414020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4e64798c9fb5c7b8a7947e69543f29140013283d53687d92a8bdb8a28d78634d38230e000c22374c617786898a8d939ea7b8cccfbfb19c86715c4b37220d000000021527374e6068737578808c9fb4bfc1b49f8b78624d38220d0000000005182a3b4e5f6872747474747c90a6bbc4ae99846f59442f1a000000000000000000000000000000000d22374b5c71869cb1c7b39e8975604b36200e0000000000000b21364b60768ba6b7cbd9c8a8937e685341301f1007000108131f3347586e8399aec3d8cab49f8a75604b36200b0000000000091e324557607583929da5b7c2b5b1a99f9c9a9b9da6acb4bbbbaa9f97887b665e4c3c2b1906000000001d32475d72879cababababab96816b56412c1601000000000000000000000000000000000000000000000c2035495a697f929ea7a8a99f958372604a35200b000000000000000008162634424e5a626e7880888d92959698999795938e8882796f635b4e42342616060000000000000c22374c617778787878787878787878787878787878787878787878787878787878787876614c37210c0000000000000000000004121d24272c2c2c2c29261f14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6e8399abbcc5b39e8976614b36210c0013283d53687d92a8bdb8a28d78634d38230e000b1f34475961717475787e899eb3c2d2c9b5a48f7a644f3a250f00000000091931424e535560636b7d92a1b3c7bbaa95806b5639281603000000000d1d31414e525d5f5f5f667b90a6bbc4ae99846f59442f1a000000000000000000000000000000031629394f647a8fa4b6c1ab96816c5645321d09000000000000091e32455773889db3c8dbc6b09b86715f4d3d2e211a18141d2030404c61778a9eb4c9dcc7b29d87725645321d0900000000091c2f404b60758499a1b2b7beb1a49c9189878586888e969faab9bbb4a69d8b7c665a49352010000000001d32475d728795959595959595816b56412c16010000000000000000000000000000000000000000000006192c3c4f61697e899093918a8073605443301c07000000000000000000081624313c484d5a636b73787c8081838382807e79746d645c4e4a3d31241608000000000000000a1f34475961636363636363636363636363636363636363636363636363636363636363615847331f0a0000000000000000000000000a10121617171714120c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4e64798ea1b3c9b9a7957f6a5746331e0a0013283d53687d92a8bdb8a28d78634d38230e0004182a3b474c5c556062687b8fa4b5c9d2c2a9947f6a543f2a1500000000001424313a37444b4e5f6f8499afc4c8b09b86705745321e0900000000001323313a3d484a4a51667b90a6bbc4ae99846f59442f1a0000000000000000000000000000000a1e3246576d8297acc2b4a38e79634e38281502000000000000031628395a6f849aafc4d9c9b5a3917d675b4b3f362d2d263135414d5e6b8096a8b9cdd4c3ad97826d5838281502000000000f23384c5e6d8298a3b2bfc0b19f97867c757170717379818c9ea8b9c4b8a99e8978624d3e2d1b07000000142a3f54697f808080808080807c66513b26110000000000000000000000000000000000000000000000000e1e32434f6068757b7d7c766b605544362513000000000000000000000006141e2b353c494d565a62676a6c6d6e6c6b696460544f4a3e362d1f1406000000000000000004182a3a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c473a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586d8298adbfc9b39e8976614c392917030013283d53687d92a8bdb8a28d78634d38230e00000c1d2a343737444b4d5d71869cb1c6d8c3ae98836e59432e19040000000006141f262631354152677c92a7bccab49f8a76604b36210b000000000005131e252833353b51667b90a6bbc4ae99846f59442f1a0000000000000000000000000000000c21364b6176899eb4c6b09b85705b4a361a0a0000000000000000152a3f556a7f94aac2d3d2c1b39e8a79655d4e4a3d4237444b505f677c8d9fb4c6d7cab7a5917c66513c26110000000006192b3c50667b90a0b2c1c8b4a29781736660565b5b5b636c7b8a9eb4c1c7b9a799836e5c4a36220d00000012273b4f61696b6b6b6b6b6b6b665e4c38240f00000000000000000000000000000000000000000000000000152532424e566066686661584b4437271808000000000000000000000000000e19202c35383c484d52555758595756534e4a4336362d211a0f01000000000000000000000c1c2a343738383838383838383838383838383838383838383838383838383838383837332a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364c61778a9fb4c9bcab96816b5846331b0b000013283d53687d92a8bdb8a28d78634d38230e0000000c181f222631353f586e8398adc3d8c5b09a85705b45301b060000000000020b09141d23394e63788ea3b8cebbaa8d78624d38230d000000000000010b10131d263b51667b90a6bbc4ae99846f59442f1a0000000000000000000000000000071a2d3d53687d92a8b9b9a8927d68533d2d1a0000000000000000000f24394e64798ea4b6cadeccb9a89e887b6d635b5a58585560656f7d8a9eabbccfd1c1b29d8774604b35200b000000000b2035495a70859bb0becfc3b09a847260554b45383d4a4e5d677d91a3b4c8c5b3a18e79644f39240f0000000c2032434f5456565656565656514c402f1c09000000000000000000000000000000000000000000000000000715243138454b5053514c473a31271909000000000000000000000000000000050e1920232b35383d4041434442403e39353025221b1007000000000000000000000000000c181f22232323232323232323232323232323232323232323232323232323232323211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354697f94a9bacab59f8c78634d3a291700000013283d53687d92a8bdb8a28d78634d38230e00000000040b0c141d2d42576c8297acc1d7c6b19c87715c47321c070000000000000000010d22374d62778ca2b7d9c8a48f79644f3a240f0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000000000000000000000c21364a5b70859bb0c6b49e8976614b36210f0000000000000000000d22364a5c72879cb1c6d6d6c6b8a69e8c8279726f6d6e6f747a84919ea8b9c9d5c4b5a3927d675544311d08000000000d23384d62788da2b4c8cab6a58f7a6454443732282d363f4d5f70859bb0c5d0bfab96816c56382715020000031425323b3f404040404040403b382f221200000000000000000000000000000000000000000000000000000006131a2832363b3e3c3733291d1509000000000000000000000000000000000000060c0e192022272b2c2e2e2d2b2924201c13080700000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073879db2c7c6af99846f5a49351b0b00000013283d53687d92a8bdb8a28d78634d38230e0000000000000001172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000e23384d63788da2b8cdb9a48f79644f3a240f0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000000000000000000021527384e63798ea3b4c2ac97826d5746321e0a000000000000000000071b2d3e54697f94a8b9cce1d5c4b8ab9f978e8784828385898f99a1b4b9c6d3c6b8a69b8572604a372715010000000013283d53687d92a8c0d1c7b29c87725c4b36261e161a21304153697e93a8bed3c6b19c86715645311d09000000071420272a2b2b2b2b2b2b2b26241c120400000000000000000000000000000000000000000000000000000000000a161e21262827211f170c0100000000000000000000000000000000000000000000050b0d12151718191716140f0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa5b6cab9a8917c67523c2c190000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000f24394f64798ea4b9d8c8a38d78634e38230e0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000000000000000000091d3145566c8196abc1b5a48f7a644f39291603000000000000000000001021364c6176899eb4c4d5e2d5c9bcb4ada59d9997989a9ea7afb3bfcdcec3b6a89e88786254433019090000000002172c41576c8196acc1d6c2ad98836d583e2e1809030713243a4f64798fa4b9cecab49f8a75604b36200b00000000030c121416161616161616110f09000000000000000000000000000000000000000000000000000000000000000003090b1113110c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f11161616100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e566c8196abc3c9b49e8975604b36210e0000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000010253a50657a8fa5bacebbaa8c77614c37220c0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000000000000000000000b20364b6075889eb3c7b19c86715c4b371b0b00000000000000000000000a1f3346586a8095a6b8cbe0e7d9cfcac3b7b2afadadafb3b9c5c7ccc8bbb4a59d8a7a645a49362513000000000003192e43586e8398adc3d5c0ab96806b56412b160000000d22374c62778ca1b7cccebbaa8c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1214100e080000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24262c2c2c25231c110300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c72879db2c7c8ad98826d5645321e090000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000012273c51677c91a6bccab49f8a75604b35200b0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000000000000000006192b3c52677c91a7b8baa9937e69543e2e1b0000000000000000000000000417293a4c6176889eb3c0d0e3e2cfbfb3aeb1b5c1c0c2c3c2c0c5b8b3aa9f98877a645c4a3c2c18080000000000041a2f44596f8499aec4d5bfaa95806a55402b150000000c21364b61768ba0b6cbd7c7a28d78634d38230e0000000000000000000000000000000000030a20202020202020202020202020202020202020202020202020202020202020202020201d1a140a00000000000000000000000000000000000000070d0f1111111111110b0903000000000000000000000000000000000000071420272925231c1107000000000000000000000000000000000000000000000000000000000000000000000000000012222f383c4141413a372e211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa5b7cabbaa917c6651382816030000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000000142a3f54697f94a9bec7b19c87725544311d080000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000000000000000000000b2035485a6f849aafc5b49f8a77614c372110000000000000000000000000000b1e334657677d92a2b3c5d5dbc7b3a1999ba3a7abadaeadaba9a79e978b8276645c4a3e2e1e0e00000000000004192e43596e8398aec3d6c1ac96816c573c2b190700040f23384d62788da2b7cdcdbaa98c77624d37220d000000000000000000000000000000000b161e3535353535353535353535353535353535353535353535353535353535353535353535322f271c0e0000000000000000000000000000000002101b2224262626262626211e160a00000000000000000000000000000000031425323b3f3b372e221b10070000000000000000000000000000000000000000000000000000000000000000000000091d2f404c51565656504b3f2e1c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001152737556a7f94aac3c9b49f8a76614b36210c000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000002172c42576c8197acc1c3ae99836e59372715010000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000000000000000000011426364d62788c9fb5c3ad98836e5847331f0a00000000000000000000000000031729394d5f6f849aa7b8ccd9c3ae9983868d929698999896938e8981786d61584a3e2e20100000000000000001162c41566b8196abc8d8c5b09b85705a4935221b18171f2e3f52677c91a7bcd1c9b49f8a75604b35200b0000000000000000000000000000000b1b29324a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a47433a2c1c0a00000000000000000000000000000010202d36393b3b3b3b3b3b3632281a0a0000000000000000000000000000000c2032434f54504b3f372e211a0f060000000000000000000000000000000000000000000000000000000000080e100b0f24384c5e666b6b6b655d4b37230e0c100e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556f849aafc4c5af9a85705746331e0a000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000001325365a6f8499afc4c0aa95806b55402b16000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000000000000000000081c3043546a8095abbcb6a5907b65503a2a170400000000000000000000000000000b1b30414d6277899eb3bdcec9b39e8978787d80828382817e79746c635a4c463a2d201002000000000000000012273d52677c92aabbcecab49f8b78624d43362e2d29333d4b5d6f8499aec4d8c8b09b85705544311d08000000000000000000000000000003162939465e606060606060606060606060606060606060606060606060606060606060606060605c574a3a27140000000000000000000000000000071b2d3e4a4f5050505050504b4538281603000000000000000000000000000012273b4f6169655d4f4b3e362d20190e050000000000000000000000000000000000000000000000000003111c2325211e263c51667c8181807b65503a251f2125231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6075899eb4c9c8a9947f6a5439291703000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000071c30435472879cb1c7bca7927d67523d2812000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000000000000000b20354b6074879db2c8b29d8773604a35200c000000000000000000000000000000001320344859667c919fb1c1ccb9a79c8676686b6d6e6d6b696460544d493c33291b10020000000000000000000c21374c61778a9fb4c7cebbaa98826e624f4a3e433a474c5c657b8d9fb5cacebbaa947f6a553726140100000000000000000000000000000a1e3246577075757575757575757575757575757575757575757575757575757575757575757575726857432f1a00000000000000000000000000000d22364a5c64666666666666605645321e09000000000000000000000000000014293f54697f7a6f645c4e4a3d352c20190d04000000000000000000000000000000000000000000000011212f373b36322841566c819696947f69543f2933363b382f21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a8fa8b9cdbbaa8f7a65503a251000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000b20354a60758a9fb4c9c7a48f79644f3a240f000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000000000000000004182a3b50667b90a5b7bbaa947f6a5443301c070000000000000000000000000000000005182b3b4d5e6c8197a3b5c6c5b6a49983726058595856544e4a4336352c1f170b00000000000000000000000a1f3347586e8398a9bacdc8b2a095806f645c5a585958616a7a889dabbccfc3b49f8b78624d37220d0000000000000000000000000000000c21364b61758a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86725c47321d00000000000000000000000000000f24394f647a7b7b7b7b7b7b74604b36210b0000000000000000000000000000192e43586e8390847a6e635b4d493c342b1f180c0400000000000000000000000000000000000000000e1e2f3f4b504b453841566c8196a9947f69543f3a464c504b3f2f1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8c6cab49f8a76614b36210c00000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000d22374d62778ca9bacdbaa98b76614c36210c000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000000000000000b1f3447596e8399aec3b49f8b77624d3625130000000000000000000000000000000000000d1d30404b6074859ba8b9ccc2b3a196806b5f4d3e413e3935302520190e0400000000000000000000000004172a3a4d62788a9fb4bfcfbeaf9e95847a736f6d6e70767f8a9da6b8c9c6b7a595806b594834200b0000000000000000000000000000000c21364b61768b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c87725c47321d00000000000000000000000000051a2f445a6f8490909090908d78624d38230d0000000000000000000000000000192e43586e83989a8f83796d635a4d483b342a1f170b03000000000000000000000000000000000006192c3c4b5d6560564d40566c8196a9947f6954434b5861655d4b3b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acc1c6b19b86715746321e0900000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000e24394e63798ea3c7c9b49f89745746331e0a000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000000000000000c22374c61778b9fb4c4ae99846f594834180800000000000000000000000000000000000000121d32455663788a9eb4bdcebfb09e927d675c4a3b2a24201c1308060000000000000000000000000000000c2035495a6a7f95a1b3c0cfbcafa29a8f88848283868b959ea8b8c4c7b9a89d8775614b3b2b19050000000000000000000000000000000c21364b61768ba0b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b19c87725c47321d00000000000000000000000000051a2f445a6f8499a5a5a5a28d78624d38230d0000000000000000000000000000192e43586e8398ada1998c82786c62594c473a33291e160a020000000000000000000000000000000c2135495b657b75665e4e566c8196a9947f6954546068767b655948342010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395a70859aafc5c2ad97826d583928160300000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000010253a4f657a8fa4bac8b29d88735d39291703000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000000000000081b2e3f54697f94aabbb7a6917c66513b2b18000000000000000000000000000000000000000002152838495a677d919fb1c2cdbcb49f8b7a6459483828150700000000000000000000000000000000000006192b3c4b60738399a2b5bcc9c0b3afa69d9998999b9faab4b9c6c2b5a99e8a7a645746321d0d000000000000000000000000000000000c21364b61768ba0b6beb1ada7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7afb4c0b19c87725c47321d00000000000000000000000000051a2f445a6f8499afbbb7a28d78624d38230d0000000000000000000000000000192e43586e8398adb3ab9f988b82786c61594c463a32281d150a01000000000000000000000000091c2f404d63798b877c6f635b6c8196a9947f695d64737d888a77624d3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465773889eb3c8bfa9947f6a543f2a150000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000011263b51667b90a6bbc6b19c86715c3727150a010000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000000000000000e22374b5d72869cb1c8b39d8874604b35200d0000000000000000000000000000000000000000000a1a2c3c4d5f6c8197a4b5c6cdbaa99d8877625645321d14030000000000000000000000000000000000000e1d314455607484969fabb5c1c9c4b7b2afadaeb0b4bbc8c6b9b3a49c8b7b655c4a39281600000000000000000000000000000000000c21364b61768ba0b6b19f9792929292929292929292929292929292929292929292929aa2b4b19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d0000000000000000000000000000192e43586e8398adc7bcb4aa9f978b81776b61584b453931271d140900000000000000000000000f23384c5e6f84999d9184796c6c8196a9947e696d7a85929e98826d5c4a36220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8ccbba6917c66513c27110000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000010263b50657b90a5c3c7b29d8772554431251e130500000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000000000000031729394f657a8fa4b6bcab95806b5544311d08000000000000000000000000000000000000000000000e1e30414b6074869ca8b9cdc7b7a69b8574604b423221110000000000000000000000000000000000000115273745566074808d9ba3aeb4b9c6c0c2c2c2c1c9bcb5b1a89e958679655d4b3e2d1b0b00000000000000000000000000000000000c21364b61768ba0b6ad97817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d849aafb19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d0000000000000000000000000000172d42576c8297a9b2bfc8bbb4a99f968a80766a60574b453831261c130800000000000000000011263b50667b909fa9a29a8c81768095a8927d77828f9ba3a79e8b79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788da2c5d5c8a38e79634e39240e0000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000d23384d62788da4b6cab49f8a75604b3b3930231301000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000000000a1e3346576d8297adc2b59f8c78634d372715010000000000000000000000000000000000000000000000131e32455663798a9eb4becec4b4a397826d604f3f2f1e0e000000000000000000000000000000000000091928384556606b7b8690999ea8a9abacaeadabaaab9f9b94898074635b4b3f2e20100000000000000000000000000000000000000c21364b61768ba0b6a8927d686868686868686868686868686868686868686868686c8297acb19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d00000000000000000000000000000f24394f647a8b99a1afb3bfc7bab4a89e95897f756960564b44373025181208000000000000000b21364b6075808a98a0aa9f96878095a9947f8898a0aa9f97897e73604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4bacebbaa8c77614c37220c0000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000b2035485a72879cb2c0bbaa927d6759524d41301e0a000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000000000c21364b6176899eb4c5af9a85705a4935190900000000000000000000000000000000000000000000000002162838495b677d92a0b1c2d1c1b19f937e695d4c3c2c1b0b0000000000000000000000000000000000000a1a2838454b5d65717b83898f93959799989695918b867f766b60564a3d2e2111020000000000000000000000000000000000000c21364b61768ba0b6a8927d685352525252525252525252525252525252525252576c8297acb19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d00000000000000000000000000000d22364a5c6479838e99a1afb4c0c6b9b4a79e94887e746860554a43362f231c11070000000000091e324557606a78838f9ba3a59d8a9fb49f899ea6a29a8c817669605544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bccab49f8a75604a35200b0000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000006192b3c53687e93a2b4c0b29d87776c675f4d392510000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000000071a2d3d53687e93a8b9b8a7927d67523c2c1900000000000000000000000000000000000000000000000000000a1a2c3d4d5f6d8297a4b6c7cebeb49f8c7b655a49392918080000000000000000000000000000000000000a1a27313f4c505d656e74797e80828383817f7c77716961574b45382d1f1103000000000000000000000000000000000000000c21364b61768ba0b6a8927d68533d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d42576c8297acb19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d0000000000000000000000000000071b2d3e4a5b636e7a848f9aa2b0b4c1c5b8b3a69d93877d736760544c40372e221b100200000003162839454b5a626e7a85919a9f9faabaa99f9f9a9184796c61584b4437261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdc8b39d88735443301c070000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000e20354b6073849aa2b2b7a59d89817d67523d2812000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000000000c21364a5b70859bb0c6b39e8975604b36210e0000000000000000000000000000000000000000000000000000000f1f30414b6075869ca9bacdcebbaa9e8978635746362614010000000000000000000000000000000000000a151d2f383f4b50556064696b6d6e6d6c6a666158544c463932281a0f0100000000000000000000000000000000000000000c21364b61768ba0b6a8927d68533d282828282828282828282828282828282d42576c8297acb19c87725c47321d00000000080e10111111111111111a2f445a6f8499afc4b7a28d78624d382311111111111111110c0b04000000000010202d3d494e5c646f7a84909ba3b1b5c1c4b7b3a59d92867c72665e504b3f362d2011030000000a1b28323c484d5d65727d848b9fb4c7b49f8a847c70645c4c473a3126190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bec7b19c87725c362513000000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000000081d314455617684939da5b7a79e9687725d48331d000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000000021528384e63798ea3b5c1ac96816c5645321e0900000000000000000000000000000000000000000000000000000001131e32455763798a9fb4becfc8b8a79c8675615443301c130200000000000000000000000000000000000002111c232f3737444b4f54565759585655514c473a3633291e160a000000000000000000000000000000000000000000000c21364b61768ba0b6a8927d68533d281313131313131313131313131313172d42576c8297acb19c87725c47321d000003101b222526262626262626262f445a6f8499afc4b7a28d78624d38262626262626262626221f180c0000000002101f2c353e4a4f5d646f7b85909ba3b1b5c2c3b7b2a49c91867b70655d4f4a3e2f21110000000a1a28323b484d5d65727d858c9fb4c7b49f8b847c70645c4c483b32281a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9bec6b19c86715c47311c000000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000001142637475861737e879db2b8b29d88725d48331d000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000000091d3245566c8196acc1b5a38e79634e3828160200000000000000000000000000000000000000000000000000000000031628394a5b687e92a0b2c2d3c5b6a4998372604b41302010000000000000000000000000000000000000000008111c232631353a3e4042444341403c37332a211e170b0200000000000000000000000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d000010212e373a3b3b3b3b3b3b3b3b3b445a6f8499afc4b7a28d78624d3b3b3b3b3b3b3b3b3b3b37342a1d0c00000000010f1a212d363f4b4f5d65707b86919ca4b1b6c2c2b6b1a39b90857b6f645c4c3f2f1c090002152838454b59626d7a85929b9f9fa9baa99f9f9a91857a6d62594b45382816020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfc5b09b86705b46311b060000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000000091e324557606e7d859bb0bbb29d88725d48331d000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000000000b20364b6075899eb3c6b09b85715b4a361a0a0000000000000000000000000000000000000000000000000000000000000a1b2d3d4e606d8298a4b6c7d3c2b3a195806b5f4d3e2d1d0d0000000000000000000000000000000000000000000809141d2024292b2d2e2e2c2a27211f170c0a03000000000000000000000000000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d00081b2e3f4b4f505050505050505050505a6f8499afc4b7a28d786250505050505050505050504c473b2a1804000000000006101b222e373f4b505e66737c86929ca4acb2b7c1b5b1a29b8f847a655d4c38230e00091d324556606a77828f9ba3a49c8a9fb49f8a9da6a29a8c82776a605645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfc5b09b85705b46301b060000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000000a1e30414b607583929ba3b5aa9f9987725d48331d000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000006192b3c52677c92a7b8b9a8937d68533d2d1a00000000000000000000000000000000000000000000000000000000000000000f1f31424b6175869ca9bac8cebfaf9e917d675c4a3b2a1a0a0000000000000000000000000000000000000000000001080b0f14161819181715110c0a04000000000000000000000000000000000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d000e22374b5d6566666666666666666666666f8499afc4b7a28d78666666666666666666666666615947341f0b0000000000000007101b222f38404c546067737d868f979da6b7c9c0b4b0a29a8f7b65503b2610000b20364b60747f8a98a0a99f95877f95a9947f88979fab9f978a7f74604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfc6b09b86715b46311c060000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d080000000000000000001025394d5f6e8399a1b0b5a69e8b837f6a543f2a15000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000000b2035495a6f849aafc5b49e8976614b36210f000000000000000000000000000000000000000000000000000000000000000001131e324657647a8b9faab4bac7bcb49f8a7a64594738271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d0010253a4f657a7b7b7b7b7b7b7b7b7b7b7b7b859bb0c6bda7927d7b7b7b7b7b7b7b7b7b7b7b7b77614c37220c00000000000000000008111c232f36434a546067717b81889db2c8d1c8c0b3a6917c66513c27110011263b51667b909ea8a1998b80768095a8937d76818c9aa2a89e8a79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9bec6b19c87715c47321c000000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000005182b3b52677d92a1b3bfb39e88796e6a614f3c2712000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000011426374d62788c9fb5c2ad97826d5746331e0a000000000000000000000000000000000000000000000000000000000000000000031629394a5c677d8c999fa9a3a3a3a99d8777625645311d0900000000000000000000000000000000000000000000000000000000000000000000000000000000070b0700000000000000000000070b0700000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d001d32475c72869090909090909090909090909ba3b5c9c0ad9b929090909090909090909090907c66513c27110000000000000000020a161e29323a464c58616b767e848b9fb4c9cec7bab4a8917c66513c2711000f24384c5e6f849a9d9184786b6c8196a9947e696c7984919d97816c5c4a36210d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8bec7b29c87725d382815020000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000b2034485971869cb1bfbcab937e695b544f4332200c000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000081d3144556b8095abbcb6a48f7a644f39291703000000000000000000000000000000000000000000000000000000000000000000000b1b2d3d4d5f677a838a8d8d8d8d8d8d8d8575604b36200b000000000000000000000000000000000000000000000000000000000000000000000000020b08131c201c130804000000020b08131c201c13080400000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d001d32475c72879ca5a5a5a5a5a5a5a5a5a5a5b0b5c1d2cabaada7a5a5a5a5a5a5a5a5a5a5a5917c66513c2711000000000000020a151d283239464b58616a768089939a9faabbc8bbb4a99f968a7a644f3a240f00091d2f404e63798c877c6f635b6c8196a9947f695c64707d878976614c3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdc8b39e89735645321d090000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000d22374d62778ca4b5cab49f8b76604b3d3c32251503000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000b20354b6074889db2c7b19c86715d4b371b0b0000000000000000000000000000000000000000000000000000000000000000000000000f1f30414d5c646e75777878787878787975604b36210b000000000000000000000000000000000000000000000000000000000000000000000006141f2625303530251f180c0006141f2625303530251f180c000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d001d32475c72879cb1bbbbbbbbbbbbbbbbbbbbc6c9d2dfd8cac0bdbbbbbbbbbbbbbbbbbbbba6917c66513c2711000000000009151d283238454b57616a768089959ea8afb4bbbcb4aa9f978a8177645c4b37220d00001221364a5b667b75665e4d566c8196a9947f69544e5f67757a645847331f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbccb8a78b75604b36200b0000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000010253b50657a90a5c2c7b29d88725745322720150700000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000005182a3b51667b90a6b7baa9947e69543f2e1b00000000000000000000000000000000000000000000000000000000000000000000000000011223303e4a4e55606263636363636363605745321e0900000000000000000000000000000000000000000000000000000000000000000000021424313a36434a4336342a1c0c1424313a36434a4336342a1c0c0000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d001d32475c72879cb1b3b3b3b3b3b3b3b3b3b3b4bbc8d8d6c6b9b4b3b3b3b3b3b3b3b3b3b3a6917c66513c2711000000041219273138454b566069757f89959ea8b4b9c6bfb2ab9f988b81776b61584b3e2e1b070000071a2d3d4c5e6660564c40566c8196a9947f6954414d5760645c4a3a2a17010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c9d6c5a28d77624d38220d0000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000011263b51667b90a6bbc6b19c86715c3928160c030000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000b1f3447596e8399aec4b49f8a77614c37221000000000000000000000000000000000000000000000000000000000000000000000000000000512202d3637444b4d4e4e4e4e4e4e4e4b453928160300000000000000000000000000000000000000000000000000000000000000000000102031424e535460544c473a2a182031424e535460544c473a2a180400000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d001d32475c72879c9e9e9e9e9e9e9e9e9e9e9e9faabbceccb9a89e9e9e9e9e9e9e9e9e9e9e9e917c66513c271100000412223037444b566069757f88949ea7b3b9c6bfb3afa1998c82786c62594c473a2e2010000000000f1f2f404c504b453841566c8196a9947f69543f39454b4f4a3e2d1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778cabbccfb9a48f7a644f3a250f0000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d08000000000000000010253a50657a8fa5bac7b29d88725d39281603000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000000d22374c62778b9fb4c3ae98836e5847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000002101b2227313638383838383838383632281b0a00000000000000000000000000000000000000000000000000000000000000000000071b2d3e4e606873756f615947341f2d3e4e606873756f615947341f0800000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d001b31465b70858989898989898989898989898c9fb4cac9b49e898989898989898989898989897b66513b26110000122230404d556068747e88949ea7b3b8c5c0b4b0a1998e83796d625a4d483b332a1c1002000000000112222f383b36322841566c819696947f69543f2832363a362d201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cabda7927d68523d28130000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000e24394e63798ea3c7c9b49e89745746321e09000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000081c2e3f546a7f94aabbb6a5907b65503a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000709151d202223232323232323211e160a00000000000000000000000000000000000000000000000000000000000000000000000d22364a5c687e88898377614c3626364a5c687e88898377614c36261401000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d00192e425667707474747474747474747474748499afc4b7a28d78747474747474747474747474665e4c38240f00091d2f404d5e66747e87939da6b3b8c5c1b5b0a29a8f847a6e635b4d493c342b1f180c0000000000000004121c2326211e263c51667c8181807b65503a251e2124221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572879cb2c7c0ab95806b56402b160000000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000d22374d62778ca9bacdb9a88b76614b36210c000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000e23374b5d72879cb1bbb29c8773604a35200c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0d0e0e0e0e0e0e0e0b09030000000000000000000000000000000000000000000000000000000000000000000000000f24394e647a8d9d9f97816c544330394e647a8d9d9f97816c5443301c08000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d0013263849565b5e5e5e5e5e5e5e5e5e5e5e6f8499afc4b7a28d78625e5e5e5e5e5e5e5e5e5e5e514c402f1d09000f24384c5e667c87939da5b3b7c4c2b6b1a39b90857a6f645c4e493d352c20180d0400000000000000000000090f110b0f24384c5e666b6b6b655d4b37230e0b0f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737596e8499aec3c3ae99836e593b2b180500000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1d6c7b29c87725d47321d0800000000000000000b20354b60758a9fb4c9c6a38e79644e39240f000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000010253a50657a8fa4aaaa9f917d675443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abb39e8974604b3541566c8196abb39e8974604b35200b000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d00091b2b384246494949494949494949495a6f8499afc4b7a28d78624d494949494949494949493b382f2212000011263c51667c919da5b2b7c3c3b6b2a49c91857b70655d4f4a3e362c20190e0500000000000000000000000000000000091d2f404c51565656504b3f2e1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0c7b29d8872594834200b00000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acc1c8c7b29c87725d47321d080000000000000000081c30435472879cb2c7bca7927c67523d2712000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0003182d43586d82959595938b7f695f4d362513000000000000000000000000000000000000000000000000080e101515151515150d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e12121212120f0d07000000000417293a5b70859bb0b8a78d78634e383a5b70859bb0b8a78d78634e38230e000c21364b61768ba0b6a8927d68533d281616161616161616161616161616172d42576c8297acb19c87725c47321d00000d1b262e31343434343434343434445a6f8499afc4b7a28d78624d3834343434343434343426241d12040000182d42586d8297adb6c3c4b7b2a59d92867c71665e4f4b3f362d211a0f060000000000000000000000000000000000000012222f383c4141413a372e21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7c4cbb7a58c77624d37220d00000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c8196acb2b2b2b29c87725d47321d080000000000000000011426365a6f8499afc4bfaa95806a55402b15000000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000152a40556a7f8080807d7869614f413018080000000000000000000000000000000000000000000003111c23252a2a2a2a2a2a2220180d00000000000000000002050706040100000000000000000000000000000000000000000000000000000e192123272828282824221b100200000a1f33465873889eb3c5a6907b66513b465873889eb3c5a6907b66513b2611000c21364b61768ba0b6a8927d68533d2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2d42576c8297acb19c87725c47321d0000000913191b1f1f1f1f1f1f1f1f2f445a6f8499afc4b7a28d78624d38231f1f1f1f1f1f1f1f110f0900000000192e43586e8398adc5b8b3a69d93877d73665e504c40372e221b100600000000000000000000000000000000000000000004121d24262c2c2c25231c1103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da6b7cbc3a6917c66513c271100000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000002172c41576c81969d9d9d9d9d9c87725d47321d08000000000000000000172d42576c8297acc1c3ae98836e59372614010000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000013283c50616a6b6b6b68625a4f43322313000000000000000000000000000000000000000000000011212e373b3f3f3f3f3f3f37342b1d0d00000000040a0c12171b1c1c1a17100b0902000000000000000000000000000000000000000007151e2c35383c3d3d3d3d39362d201000000c21364c61768ba7b8bea9937e69543e4c61768ba7b8bea9937e69543e2914000c21364b61768ba0b6a8927d685340404040404040404040404040404040404042576c8297acb19c87725c47321d00000000000406090909090909091a2f445a6f8499afc4b7a28d78624d38230d0909090909090900000000000000192e43586e8398adb3a79e94887e746760544d40382f231c110700000000000000000000000000000000000000000000000000090f11161616100e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a73889db2c8c1ab96816c563c2b1906000000000013283d53687d92a8bdb8a28d78634d38230e0000000000000000162b40556b808888888888888884705b45301b06000000000000000000152a3f546a7f94a9bfc6b19c86715544311d080000000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000d2033435055565655534d483c3225150500000000000000000000000000000000000000000000081c2e3f4b505454545454544d483b2b1805030a0c171f21282c3031312f2c26201d150a000000000000000000000000000000000000071526333c494d51525252524f4a3e2d1b07000f243a4f647a8fa4c5c1ac96816c57414f64798fa4c5c1ac96816c57412c17000c21364b61768ba0b6a8927d685555555555555555555555555555555555555555576c8297acb19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d0000000000000000000000000000192e43586e8398a79e95887e756860554b433630231c110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c586d8398adc9c7b19c87725a4835200b000000000013283d53687d92a8bdb8a28d78634d38230e000000000000000013283d50626b73737373737373706655422d190400000000000000000012273c52677c91a7bcc9b49f8a75604b35200b0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a0000031525333c404040403e38342b1d150700000000000000000000000000000000000000000000000e23374b5d656a6a6a6a6a6a62594834200b171e212933373d4245464644413b3631271a13010000000000000000000000000000000715263344505b636767676767645c4a36220d0012273d52677d92a7bcc4af99846f5a4452677c92a7bcc4af99846f5a442f1a000c21364b61768ba0b6a8927d6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6c8197acb19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d0000000000000000000000000000192e43586e839895897f766960564b4437302618120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93abbccab6a48d78624d38230d000000000013283d53687d92a8bdb8a28d78634d38230e00000000000000000d21334450555d5d5d5d5d5d5d5b55483826120000000000000000000010253b50657a90a5bacebaa98c77614c37220c0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000071520282a2b2b2b282220190d0000000000000000000000000000000000000000000000000010253b50657b7f7f7f7f7f7f77624d3722202933363a474c52575a5c5b5956504b4538301d140900000000000000000000000000061525334450626b787c7d7d7d7d7a644f39240f00142a3f54697f94a9bec6b19c87715c4754697f94a9bec6b19c86715c47321c000c21364b61768ba0b6ae99838080808080808080808080808080808080808080808080859bb0b19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d0000000000000000000000000000192e43586e828980766a61574b453831271c140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778b9fb5cac2a8937e69533c2b19050000000013283d53687d92a8bdb8a28d78634d38230e0000000000000000041526333d403b474c4e4d483b4542382a1a08000000000000000000000f24394f64798ea4b9d8c7a28d78634d38230e0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a00000000030d1315161616130d0b050000000000000000000000000000000000000000000000000000152a40556a7f9494949494907b65503a313639464b525861676c7071716f6c6560564d41312619090000000000000000000000051424324350626b808c919292928b79634e39240e00152a3f546a7f94a9bfc7b19c87725c47546a7f94a9bfc7b19c87725c47321d000c21364b61768ba0b6b3a19995959595959595959595959595959595959595959595959ba3b5b19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d000000000000000000000000000011273c51667c776b61584b463932281d1509010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485970859bb0c9c5b09a85705a483420080000000013283d53687d92a8bdb8a28d78634d38230e00000000000000000012222f3e4b4f5962646259514d4033251503000000000000000000000e23384e63788da3b8cdb9a48f79644f3a240f0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9a9a9a9957f6a5849454b505761686f767d8185868684817b74675f4b443726140100000000000000000004132331424f616b80959faba7a696816c5b4a36210c00152a3f546a7f94a9bfc7b19c87725c47546a7f94a9bfc7b19c87725c47321d000c21364b61768ba0b6bfb3aeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab0b5c1b19c87725c47321d00000000000000000000000000051a2f445a6f8499afc4b7a28d78624d38230d00000000000000000000000000000f24394d5e6662594c473a33291e160a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b54697e94abbccab59f8c78624d3625130000000013283d53687d92a8bdb8a28d78634d38230e00000000000000000c1c2f404c5c647077797771675f5043332111000000000000000000000d22374d62778ca2b7dac9a48f79644f3a240f0000000000000000000011263b51667b90a6bbc4ae99846f59442f1a000000040e14162020202020202020202020202020202020202020202020202020100e08000000000011263b50667b90abbcbfb29d8876635b5660656d767d848a92979a9b9b999690877d6d605544311d12000000000000000003122230414e60697f949eb5bcb39e8876614c3d2d1a0700152a3f546a7f94a9bfc7b19c87725c47546a7f94a9bfc7b19c87725c47321d000c21364b61768ba0b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b19c87725c47321d00000000000000000000000000051a2f445a6f8499afb2b2a28d78624d38230d0000000000000000000000000000091d30404d514c483b332a1e170b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788c9fb5cabcab947f695443301c0700000013283d53687d92a8bdb8a28d78634d38230e0000000000000004182a3a4c5e667a858c8e8c867c6a61503f2f1c08000000000000090f111723384e63788da3b8cfbcab8d78634d38230e00000000000000090f111b263b51667b90a6bbc4ae99846f59442f1a0000081621292c353535353535353535353535353535353535353535353535353525221b10030000000c21364c61768b9fb5cab7a69b85797272757b828a92999faaacafb1b0aeaba59d928173604b4030180800000000000003112130404d5f687e939daebcb5a3927d685846331f0f0000152a3f546a7f94a9bfc7b19c87725c47546a7f94a9bfc7b19c87725c47321d000c21364b61758b9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c87725c47321d00000000000000000000000000051a2f445a6f84999d9d9d9d8d78624d38230d000000000000000000000000000000122230393c37342a1f170c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6f849aafc4c9b29c8773604a35200f00000013283d53687d92a8bdb8a28d78634d38230e000000000000000a1f344759667c8b9ba2a3a49c91806a5d4c38230e0000000004121d242629333f51677c91a6bccab59f8b76614b36210c000000000004111c232630323b51667b90a6bbc4ae99846f59442f1a00041626343d414a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3a372e21100000000a1f33465870859bb0c2c4b4a39b8e88878990989fa8afb4bbc8c5c6c6c4c3b7b29f97816d5f4d36261401000000000210212f404d5e677d8d9fb5bbbcab9b8573604b3a2917010000152a3f546a7f94a9bfc7b19c87725c47546a7f94a9bfc7b19c87725c47321d000b21364b607586878787878787878787878787878787878787878787878787878787878787878787836f5a442f1a0000000000000000000000000003182d43586d8287888888888778624d37220d00000000000000000000000000000004121d2427221f180d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c51667c91a6b7cab6a5907b66503d2d1a07000013283d53687d92a8bdb8a28d78634d38230e000000000000000c22374c6177899ea9b4c0b6b19e907b65503b26100000000012222f383c39464c5d6e8398adc3c9b19b86715746321e0a000000000011222f383b45474751667b90a6bbc4ae99846f59442f1a000e213444515660606060606060606060606060606060606060606060606060604f4b3f2e1b0800000417293a52677d92a4b5c7c1b4b0a59d9c9fa9adb4bac6c9c4bdb7b6b8c1cacabdb19f917c675443301c080000000010202e3f4c5e667c8c9fabbcc6b59f8d7a645443301c0c000000152a3f546a7f94a9bfc7b19c87725c47546a7f94a9bfc7b19c87725c47321d00091e32455760727272727272727272727272727272727272727272727272727272727272727272726f6554412c180000000000000000000000000001162b3f52646d72727272727262594834200b0000000000000000000000000000000000090f110d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e20354b6074889db2c5c3ae99846f5b4a36210f000013283d53687d92a8bdb8a28d78634d38230e00000000000000152a3f546a7f94a8b9c7d1c9bcaf9a846f5a452f1a05000009192f404c515b5761697b8d9fb5cabcab96816b5639291603000000000c1c2f404c505b5c5c5c667b90a6bbc4ae99846f59442f1a0014293d51626b7575757575757575757575757575757575757575757575757575655d4b37220e0000000c20354b6073869ca9b9c6c8c3b7b2b1b4bac7c9c8bbb4aea7a2a0a3abb5bcc9bdb29d8773604b35200b0000000a1b2d3e4b5d657c8b9faabbc9b9a897826d5c4b36261400000000152a3f546a7f94a9b8b8b19c87725c47546a7f94a9b8b8b19c87725c47321d0003162839454b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5a544737251100000000000000000000000000001023354652585d5d5d5d5d5d4d483b2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556a7f95a7b9cab59f8c79634e3d2d1a070013283d53687d92a8bdb8a28d78634d38230e00000000000004192e44596e8399aec6d6e5dec9b49e89745f49341f0a00011527374c5e667072767e8a9fabbcc3b49f8c78634e38230e0000000004172a3a4c5e6670727272727c90a6bbc4ae99846f59442f1a00162c41566b808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7b654f3a2510000000081d31445563798b9ea8b4c0c7c9c7c7c8c4c1b5b0aa9f99928d8b8e969fabbccab6a5917c66513c26110000031628394a5c657b8a9fa9aeaeaeac9e8977624c3e2e180800000000152a3f546a7f94a3a3a3a39c87725c47546a7f94a3a3a3a39c87725c47321d00000a1b283236474747474747474747474747474747474747474747474747474747474747474747474441372919070000000000000000000000000000061727353f4348484848484837342b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b1013131313131313130e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374c6176899eb3c5bcab98836e5b4a36210c0013283d53687d92a8bdb8a28d78634d38230e00000000000004192f44596e8499aec8d8e8dec9b49f89745f4a341f0a00081d314455667c86888a939fa8bac3b6a598826d5b4935210c000000000a1f334758667c8587878787879db2c8c4ae99846f59442f1a00162c41566b81969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8f7a654f3a2510000000011527374a5b657b8a9aa2acb1b4b9b5b3afa9a39b948b847d787679818d9fb5c4c3ad97826d583928160300091e324557647a8999999999999997907d6859473420100000000000152a3f546a7f8d8d8d8d8d8d86725c47546a7f8d8d8d8d8d8d86725c47321d0000000a161e21323232323232323232323232323232323232323232323232323232323232323232322f2c25190b000000000000000000000000000000000917232b2d3333333333332220190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25282828282828282823211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091f3346586a8095a7b9c9b59f8c79634e39230e0013283d53687d92a8bdb8a28d78634d38230e00000000000000162b40556b8095aabbccd6cdbfb09b85705b46301b06000b20354b6074899b9d9faab4babfb3a59c8776614c3d2c1a06000000000c21374c61768a9a9c9c9c9c9da6b7cbc4ae99846f59442f1a00162c41566b8196abb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a48f7a654f3a25100000000009192d3d4b5d65798490979c9ea89f9e99948d867f776f686261636c7f94a6b8c3b29c87725746321e09000b21364b60768284848484848484827b685f4e3b2a180200000000000c21374c617678787878787878624d384c617678787878787878624d38230d0000000003090b1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1a181107000000000000000000000000000000000000061016181d1d1d1d1d1d0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011323313a3d3d3d3d3d3d3d3d39362d1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c6176899eb3c3bcab96816c56412c170013283d53687d92a8bdb8a28d78634d38230e000000000000000e23384d63788b9fb3b8c5bab4a1927d67523d281200000c21364c61768ba8b2b4bbb9b3ada1998779635847331f0e00000000000f253a4f647a8fa8b1b1b1b1b2b7c4c1c1ae99846f59442f1a00162c41566b8196a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a48f7a654f3a251000000000000f1f2f3f4b5b63707b8187898b8a88847f7871696259524d4b4e6074889daeaeaea58b76614b36210c00091e324557606d6f6f6f6f6f6f6e6d655e4e41311d0d0000000000000a1f33475861636363636363625a4935475861636363636363625a4935200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1e31414e52535353535353534e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f3346586a7f94a5b6b4a998836e58432e190013283d53687d92a8bdb8a28d78634d38230e000000000000000c2035495a697f929ea7a8a99f958372604a35200b00000c21364c61768ba1aba9a8a89e988e8376635b493a291700000000000010253a4f657a8fa4acacacacacacacacacac99846f59442f1a00162c41566b80939393939393939393939393939393939393939393939393938f7b654f3a251000000000000111212f3d4a4e5d656c72747675736f69625a544c483b383644556e8398999999998d77624d38220d0003162839454b585959595959595957504c403123130000000000000004172a3a474c4e4e4e4e4e4e4d493c2b3a474c4e4e4e4e4e4e4d493c2b19060000000000000000000812181b20202020202020181610060000000000040e141620202020202020201816100600000000000000000000000000000000000000000000000000000000000000000000000108202020202020202020202020202020202020202020202020202020200f0d070000000000000000000000000000000000000000000000000000000010253a4e5f6868686868686868635b4a36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b6075879db2a39b8b7b65503b26100013283d53687d92a8bdb8a28d78634d38230e0000000000000006192c3c4f61697e899093918a8073605443301c0700000c21364c61768b979694938e89837a6e6158493d2c1c0c00000000000010253a4f657b8f979797979797979797979797846f59442f1a0010253a4f657b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e77624d37220d00000000000003111f2d363f4c50575c566060555a544d493c37342b23273753687e83848484848378624d38220d00000a1b2832364244444444444444423b382f21130500000000000000000c1c2a333738383838383838352b1e2a333738383838383838352b1e0e0000000000000000000c1a252d30353535353535352e2b23180a000000081621292b35353535353535352d2b23170900000000000000000000000000000000000000000000000000000000000000000009151d3535353535353535353535353535353535353535353535353535353524211a0f01000000000000000000000000000000000000000000000000000013283d52687d7d7d7d7d7d7d7d79634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1e324556667c909e92857a655d4c38230e0013283d53687d92a8acaca28d78634d38230e00000000000000000e1e32434f6068757b7d7c766b6055443625130000000b21364b60758181807f7d79746e645c4c473a2c1f0f000000000000000e23384d6378818282828282828282828282827e68533e2913000e23374b5d65696969696969696969696969696969696969696969696969696962594834200b00000000000000010f1a212f383b4238454b4b44373f38352b2220180d263a4e60686e6e6e6e6e6e625a4835200b0000000a161e212d2f2f2f2f2f2f2f2d26231c1103000000000000000000000c171f212323232323232320190e171f212323232323232320190e000000000000000000081a2a3741454a4a4a4a4a4a4a433f3528180600041626333d404a4a4a4a4a4a4a4a423f3527170600000000000000000000000000000000000000000000000000000000000000091927314a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a39362d200f000000000000000000000000000000000000000000000000000a1f34495f748a929292929292927e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384c5e6f83887d72645c4c3f2f1c080013283d53687d92979797978d78634d38230e000000000000000000152532424e576066686661584b4437271808000000091e324556606c6c6b6a686460554f4a3e332a1c0f01000000000000000c2035495a636c6c6c6c6c6c6c6c6c6c6c6c6c68604e3b261100081c2e3f4b4f54545454545454545454545454545454545454545454545454544d483b2b180500000000000000000007111c23262c2832363531262a2320190e0b050b1f31424e535959595959594d483c2b19050000000003090b181a1a1a1a1a1a1918100e0900000000000000000000000000040a0c0e0e0e0e0e0e0d0b0600040a0c0e0e0e0e0e0e0d0b060000000000000000000012253748555a60606060606060585346352310000e2133445156606060606060606058524535231000000000000000000000000000000000000000000000000000000000000001152737445e6060606060606060606060606060606060606060606060606060604e4a3e2d1a070000000000000000000000000000000000000000000000000a1f34495f74899ea8a8a8a8a8937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2f404c6277766860544a3e2f2111000010253a4f657b81828282828177614c37220c0000000000000000000715243139454b5153514c463a312719090000000003162838454b57575654534f4b4437362d1f170c00000000000000000006192c3c494d57575757575757575757575757534e42311f0b000011212e373a3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e37342b1d0d000000000000000000000000080e1017161e21201d14140d0b06000000021424313a3e44444444444438352b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d41556670757575757575756d64533f2b160014293d51626b75757575757575756d64523f2b16010000000000000000000000000000000000000000000000000000000000081d31445570757575757575757575757575757575757575757575757575757575705c4a36210d0000000000000000000000000000000000000000000000000a1f34495f74899eb4bdbdbda9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012203448596261584a43362d20110300000e22374b5d656c6c6c6c6c6c615947341f0a0000000000000000000006131b2832363b3e3c3633291d15090000000000000a1a2832364242413f3e39353126221b100400000000000000000000000e1e2c3538424242424242424242424242423e3b31241402000003111c232529292929292929292929292929292929292929292929292929292220180d000000000000000000000000000000000003090b0b0801000000000000000006141f26282f2f2f2f2f2f2220190e0000000000000000000000000000000000000000000000000000000000000000030a0c131313131313120d0b050000000000000000000000000000000000000000000000001b30455a70858a8a8a8a8a8a8a826d58432e1800162b40566b808a8a8a8a8a8a8a8a826d58422d180300000000000000000000000000000000000000000000000000000000000b20354b60748a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a644e39240f0000000000000000000000000000000000000000000000000a1f34495f74899eb4c9d2bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b484c4c463a3025181002000000081b2e3f4b4f5757575757574c473a2a18040000000000000000000000000a161e21262827211f170c0100000000000000000a161e212d2c2b2a2824201d14090700000000000000000000000000000e1920232d2d2d2d2d2d2d2d2d2d2d2d2d29261f14060000000000080e1014141414141414141414141414141414141414141414141414140d0b05000000000000000000000000000000000000000000000000000000000000000000020b11131919191919190d0b0500000000000000000000000000000000000000000000000000000000000000000b161e21282828282828272220190d00000000000000000000000000000000000000000000001b30455a70859a9f9f9f9f9f98826d58432e1800162b40566b80959f9f9f9f9f9f97826d58422d180300000000000000000000000000000000000000000000000000000000000b20354b60758a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8e79644e39240f0000000000000000000000000000000000000000000000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34373633291c130800000000000010212e373a42424242424237342a1c0c000000000000000000000000000003090b1113110c0a04000000000000000000000003090b17171615130f0b08010000000000000000000000000000000000060c0e1717171717171717171717171713110b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2932363d3d3d3d3d3d3c38342b1d11030000000000000000000000000000000000000000001b30455a70859aafb5b5b5ad98836d58432e1800162b40566b8095abb5b5b5b5ad97826d58422d180300000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a38e79644e39240f0000000000000000000000000000070b0f13151514120e0c061f34495f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d182022211f170b000000000000000002101b22252d2d2d2d2d2d221f180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b140b08020000000000000000000000000000000000000000000000000000060b0d111415151413100c0a0400000000000000000000000000000000000000000000000003090b101315161514120f0b0802000000000000000000000000000000000000000003162939464b535353535353524d483c2f21110000000000000000000000000000000000000000001b30455a70859aafc5cac2ad98836d58432e1800162b40566b8095abc0cacac2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5bbbbbbbbbbbbbcbfc9cacacacacdc3c0bbbbbbbbbbb9a38e79644e39240f00000000000000000000000408131c2024282a2b2a2723211a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0c0a040000000000000000000000080e101717171717170c0a04000000000000000000000000000000000000000000050b0d111415151514120f0b0902000000000000000000000000000000000000000000000000060b0d1214161614120e0c0600000000000000060a0b0b0b06040000000000000000000a151d2029201d150900000000000000000000000000000000000000000000060c0e19202327292a2a2a2825221f180f0d07000000000000000000000000000000000000050b0d161e2125282a2b2a292824201d150b090200000000000000000000000000000000000a1e3246576168686868686867625a4c3f2f180800000000000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000b20354b60758aa0a6a6a6a6a6a6a6a6acb9c9dbdfcdbcb0aba6a6a6a6a6a6a38e79644e39240f000000000000000000000c181f253035393d3f403f3c39362c2234495f74899eb4c9d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1019202226292a2b2a292724201d150d0b0600000000000000000000000000000000000002090e192023272a2b2b2a2723211a0e0b0600060c0e1b1f2020201b1912090000000000000a1a2832363e363127190b00000000000000000000000000000000000000040e1920232b35383c3e40403f3d3b37332a24221b10080000000000000000000000000000070e1920222832363a3e4040403e3d3a363127201d150a000000000000000000000000000000000c21364b61757e7d7d7d7d7d7c78655d4c36251300000000000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000b20354b60748a9090909090909090919bacbfd4d8c3b09e96909090909090908e79644e39240f000000000000000000131c2a3436434a4f52555554524e493d3734495f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d111315151514110e0c060000000000000000000000000000000000000000000000000000000008111c23252b35383b3e3f403f3e3c393631272320190e070000000000000000000000000000000a161e212b35383c3f40403f3c38352c2320190e1920233034353535302d261a0c000000000a1b2838454b544b4437291b0b00000000000000000000000000000000000c181f2c35383c494d515455555452504c473a3a362d231c110300000000000000000000040f1a212b353839454b505355565554524f4b44373631271a140400000000000000000000000000000a1e32465771869292929292918b7b655443301c07000000000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000b20354a60727c7b7b7b7b7b7b7b7b7d91a6bcd1d5c0ab96807b7b7b7b7b7b7b7c75614c36210c0000000000000008131c313a474c546064686a6a6967635b564c483b5f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1019202326292a2b2a292623211a110b08010000000000000000000000000000000000000000000003111c232e373a3c484d515355555553514e4b453838352b221b10040000000000000000000000010f1a2832363c484d5254565554514e493d38352b1e2c3538454a4a4a4a4542382a1a090000031628394556606960554639291a0a000000000000000000000000000003111c2a333c494d565a6266696a6a6968656158564f4a3e372e1e160b00000000000000000b171f2d363c484d54576065686a6b6a6967646055524b4538311f170c000000000000000000000000000316293952677c91a5a8a8a8a99c8673604a35200f000000000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000071c30435460666666666666666666768ba0b6cbd1bca7917c6766666666666666615746331e0a00000000000008182530414e59616b73797d7f807f7c78736b62594b5f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c23252b35383b3e3f403f3e3c38352c26201c140800000000000000000000000000000000000000000b171e2f383f4b50575a6266696a6a6a6967646056554d493c362d1f170b000000000000000000010f1f2d38454b535a6267696b6b6967635b564d483c333c494d5b5f6060605b55483826120000091e32455760747e74615746382818080000000000000000000000000513212f3a474c5a626b72787c7e7f7f7f7d7a77726c645c4f4b3f32291b0e0000000000000d1b29333d4a4e5a626a6f767a7d7f807f7e7d79756f6760564e42332a1c0c000000000000000000000000000b20354b6074879cb2c4c7b6a4907b66513d2c1a060000000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000132536434a515151515151515161768ba0b6cbd1bca7917c67525151515151514c4639291703000000000000132536434a5f687780888e92949594918e88807769605474899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d242f383b3c484d515354555553514e493d3b3530261c130800000000000000000000000000000000000e1b29333f4c505d656c73787b7e7f807f7e7c7975706a625a4f4a3e33291b0f01000000000000000f1f2d3d4a56606972787c7f80807f7c78726b625a4c46495a637074757575706655422d1900000b21364b6075849384756156453625130000000000000000000000051323313f4c58616d7880878d919395959492908c87817a70655d4b46392c1e0e000000000d1d2b3a464c5b636d787f858a8f9395959593928f89857d7468604c473a2a1b0b000000000000000000000000081d314455687e93a6b8cbc2af99846f5b4935210b0000000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000008182530353b3b3b3b3b3b3b4b61768ba0b6cbd1bca7917c67523c3b3b3b3b3b3633291b0b0000000000000b1c304354606c7d89959da6a7aaaaa9a7a69d95897e736274899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f30393f4b50575a6266686a6a6a6966635b58514b43363025180e0000000000000000000000000000000e1e2b39464b5d65717a82888d909394959493918e8a857f786f645c4c463a2d1f0f01000000000009192c3d4a5b63747e878d9194959594918d8780786c61574d637885898a8a8a84705b45301b0000152a3f556a7f94a29a8474605443301c0f00000000000000000001122331414e5d6577828b969da5a6a9aaaaa9a7a5a59c968f857a6d6157493c2c1e0e000005182b3b4858616d79828b949a9fa9a8aaabaaa9a7a89f9a92887e6f615847392916030000000000000000000000011426374b6075889db3c6cab59f8c79634e3929170300000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000008131c20262626262626364b61768ba0b6cbd1bca7917c67523c2726262626211e170b0000000000000b1b30404a607280929ea7b3b8c4bfbfbec4b7b2a89e93857774899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1c2a34404c515d656d73787b7e7f807f7e7b78736d6660544a43362b1e10020000000000000000000000000d1d2b3c4857616d7b858f979da6a6a8aaaaaaa8a6a99f9a948b847a6d61584a3d2d1f0f0000000002152737495b637986939ca4a7a9abaaa9a6a59d968b8176655d6f849a9fa99f9a85705b45301b000013283d52687d92a0a2998372604a3d2d1a0700000000000000000f1f30414e5f687b88979faab2b7c3bebfbfbebdc3b6b2aba29a8f8275635a493c2b1905000b203448596276828c989faaafb4bac7bebdbcbec6bab4afa69d938376615746321e12000000000000000000000000091e3245566a7f94a8b9ccbcab96816c5746331e0800000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d1804040303010000000000000000000000000000000000000000000000000000000000070b111111111121364b61768ba0b6cbd1bca7917c67523c27121111110c0a03000000000000031729394d5e6b80959eb3b9c5cbcecac2bcb9b8c6b9b4a39b87798a9eb4c9d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1f2d3a474c5e66717b82888d909394959493918d88837b73676054483c2e211103000000000000000000000a1b2b3b485a627582909ba3acb2b7c4bebfbfbfbec7bab4b0ab9f998d8276635b4a3d2d1a07000000081d3144556379899ca4b1b6c2bec0c0bcc3b7b2aa9f96877b69778ca2b4bab09a85705b45301b000010253a4e5f6d8298a2a1947f695b4a3621120000000000000009192d3d4d5f687d8c9ea6b4bbc8cac7c7bab4b2b3b9c6c4c0b4b0a0988678635a4835200b000d22374d627787979fabb4bbc6b9b4aea9a8a7a9adb4b9c4b8b3a1998575614b402f1c090000000000000000000000021628384c6176899eb4c7c9b49e8976614c36251300000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d19191919181614110d0b050000000000000000000000000000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c27120000000000000000000000000a1e334657667c919eb0bdccd4c8bbb4ada7a4a3a5a9afb4a59d888c9fb4cad3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3d4a59616f7c8690979da6a6a8a9aaaaa8a6a79e9890877d72625a4b3f2e211100000000000000000003162839485962788698a0b0b5c1c8c9c2bcb7b5b5b6b9bec5c9bcb4ab9f988779635b4a36210c0000000b20364b6074869ca7b5c2cac4b8b3aaa7a5a7a9aeb4a69d8c7e7e93a8c0c5b09a85705b45301b00000b1e31414b6073849aa69f8c79634e402f1c090000000000011426374a5b677d8d9faab8c5cec3b6b2a9a99f9d9ea8a6afb3bfbeb2a49c8778624d38220d000b20364b6074879cb1bcc4b7b2a89e9894929293989ea8b2bebfb3a399836e5e4c38230e0000000000000000000000000a1f3346586b8096a9baccb9a8937e695443301c07000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422f2f2f2e2e2d2b2926222018100b070000000000000000000000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c27120000000000000000000000021528384b6175889db3bccdd4c3b7aa9f98918f8e8f939aa2b2a79e9faabbced3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3d4a5b637783919ca4acb3b7c4bdbfbfbfbec5b8b3ada59c928478655d4b3f2e1e0e0000000000000000091e3245576278879ca4b2bec9c7bab4aca6a2a0a0a1a4a8afb5bcc9bcb5a59c8979634e39240e000004182a3a53697e93a4b6c5cfbfb2a69e9592909193999fa9aa9f93899eb3c8c5b09a85705b45301b000001131d3144556177889daa9a85705e4c38240e0000000000081d31445563798a9fabbbc8cdbdb0a59d938d8a88898b9199a1b2b7c2b2a0937e68533e291300081d314455657b90a0b2b4a69d9389837f7d7d7e828a98a0b2c0c1b3a1907b66503c2b190600000000000000000000000417293a4d62778b9fb4c9c6b19c8773604a35200e000000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d5844444444444342413e3b37342b25201c1308010000000000000000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c27120000000000000000000000091d3245566a7f95a6b8cbd6c6b7a59d8c827c79797a7e848f9da5b3b4bbc8d8d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839495b63798899a1b1b5c2c8c6bec7bab4bac7bdc5c8c3b6b2a29a897b655d4b3c2b1808000000000000071b2d3e4b6075869ca5b6c2cebfb3a99f97918d8b8a8c8e939a9fabb4bcc3b4a295806b56402b1601000a1f34475971869bb0c2d3c7b2a09888807c7a7c7e848a969faaa79ea7b8ccc5b09a85705b45301b000000011527374759677d92a4a2907b66513c2b1906000000011527374b6073859ba9bac9cdbdb09f96877e78747374767c84909da5b4a498826e604e3b261100021527374b5d6e8298a39e95887e766e696867696d768298a2b4c8bfb09b86715a4935200b0000000000000000000000000b203448596d8297abbccab6a4907b66503c2c19060000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d59595959595958585654514d483b3a3530251d150900000000000000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c271200000000000000000000000b20364b6075889eb3c4d5ccb9a89d877a6d67646365696f7a8799a1b3bfd0e5d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3246576379899da6b3bfc9c2b5b1a9a3a99fa9a2a8b0b4c1cac0b4a79e8a7b655a493626140100000000000d22364a5c6c8196a4b5c3cebdb1a1998b827c77767576797e858c989fabb4a69a8473604b35200b00000c22374c61778b9fb5cacdbaa99882756b676567696e76818c9da6b3b8c5d5c5b09a85705b45301b00000005172735414d5f71869caf9a85705a4835200b000000081d314455687d93a3b5c7d2c1b09e96817569625a5d5861666f7b87989f9c8675614b42311f0b000009192f3f4c6176858c89807568615754535254586172849aafc5c9b5a38d78624d38230d00000000000000000000000005182b3b4e63798c9fb4cac2ae99846f5b4935210b0000000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826e6e6e6e6e6e6e6e6d6b6966625957504a433631271910020000000000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c2712000000000000000000000012273c51677c91a6b8cbd7c7b49e8a79645c524f4e50545d64768399a1b3c7d7d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b6175869ca7b7c4c9bcb4a49c948e8b8a8b8d939ba3b4bac7c5b8a89e8978625443301c0900000000071a2d3d4f647a8d9fb5c2d1c0b19f9783776d676260606164697079828c999f9d8777615544311d0800000f243a4f647a8fabbccfc9b49f8a7661565250525458616b7a889ca5b6cadac5b09a85705b45301b00000113233545525f676f7f94a9a28d78624d38230d0000000b20354b6074879db2c1d2c9b5a396806c60564d483c464c515d6576828a867863574632241402000000111f334758617077756b61574b46393d3d3a4754667b91a6bbd2c1a8937e69533e2914000000000000000000000000000d2135495b6e8399aec1cab59f8c78634d3929160300000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5ddc7b29d87838484848484838382807e7b77726c6560544b44372d20140600000000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c27120000000000000000000004172a3a586d8298adc5d5cdbaa9957f6a5b4a3e3a393a3f4b586174839aa9bacdd3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d6d8298a4b5c5cfbcab9f94867e78767476787e85929fa9bac9c6b8a79a8473604b372715010000000c21364a5b6f849aabbccfc9b4a29781726259514d4b4b4c4f535b636d79838a877a64594737271501000011263b51667b90a6c9dac5b09a85705846383b3c3a464c5c6478879cb2c7dac5b09a85705b45301b00000b1e314152636d7c84889db2a9947e69543f291400000215283851677c91a5b7cbd3c2b19b8573604b4538352b33363f4b58616d7571635a49392916060000000004172a3a474c596160564b4639322828282f3a4e63798ea3b8cec0ab96816b56412c1600000000000000000000000000061a2c3d4f647a8fa3b5c9bcab96816c5746321e0800000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5dfcbb7a59d9999999999999998979693908c87817a736860554a3e31241507000000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c2712000000000000000000000a1f33475872879db2c7ddc9b49f8a76614c3d2d2424252e3a465660758a9fb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f50657b90a0b2c2cfbfb49f8d7f7369636157606368737e8b9fabbccfc5b4a2927d685544311d080000000e24394e63798ea2b3c9cfbcab9a84736054483b38363537393d494e5b636e7572645c4a3b2a190900000011263b50667b90a5c3d4c4af9a846f554432282729333e4a5a697e93a8bed3c5b09a85705b45301b000011253a4e606d8191999da6b7ae99836e59442e190400091d3245566e8399aec3d4cab6a48f7a655544322820191f212f3a464c5460544d493c2c1b0b0000000000000c1c2a333b474c4b45383228222a34373f4b58667c91a6bbd1c2ad98836d58432e1800000000000000000000000000000f22364a5c71869bb1c6c9b39e8976614b36251300000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5e6d4c3b7b2aeaeaeaeaeaeaeadadaba9a6a59d978f877d73645c4e42322515050000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c2712000000000000000000000c21374c61768ca5b7cad9c4ae99846f5746331f0f0e101b2938455774899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5d6f849aafbecfc9b3a1937e6960554e4b464b4d5460687d8d9fb4c8d1c0b29d8774604b35200b000006192c3c566c8196abc0d0cab59f8d79635544362b22212021242c363d4a4e5560554e4a3e2d1d0c000000000e23384d63798da5b7cac8b29d8874604b45383531272d3c53697e93a8bed3c5b09a85705b45301b000215273852687d92a0afb2b7c4b29c87725d47321d08000b20364b6075899fb4c9dcc7b19c87725d4b3726160a050a111c293336434b4336352c1e0e00000000000000000c171f2a34373632282b35383a474c535d6576869cb1c6d8c3ad98836e58432e1900000000000000000000000000021528384c62778a9fb4c9ccb9a8937e695443301c07000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5eae2d4cbc7c3c3c3c3c3c3c3c3c2c0bec3b6b2aca49c92867a68604f433223130000000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c27120000000000000000000010263b50657b90a5c3d4d3bea9947e69543929170100000b1a28395f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374f647a8fa2b4c8cfbcab99836e604b443736323636434a5f6d8297aabbcecbb7a6917c675239281603000c2035495a72879db2c7d9c9ae99836e5b4a37271818181818181a212d3637444b4437362d200f00000000000c2135495b72879db2c2cbb7a6947f6a60564f4b44373f3e53697e93a8bed3c5b09a85705b45301b00091d31455671869bb1bec8cbc9b39e89745e49341f09000f243a4f64798fa8bacdd5bfaa95806a553f2e1909000000000c171f263035302620190e00000000000000000000040c181f222731363c484d54596168707b869ca4b5c9d6c6ab96816c56412c1700000000000000000000000000091d3245566a8095a9baced6c6b19c8673604a35200e000000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5eadfd2c9c6bebebebebebebec0c1c5c9cdcac7c2b6b1a39b8b7e6a614f41301e0e00000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c27120000000000000000000014293e53697e93a8bed3d0bba6907b66513b2611000000001f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556d8298adc0d1cab59f8c78634d423126211e212530414d62778b9fb4cad4c4ae99846f5746321e09000e23384d63788da5b7cacfbcab917c67523d2d2d2d2d2d2d2d2d2d2d2d2d26313531262c24221b100200000006192c3c54697f94a3b5c3c4b59f8d80756b64605557545153697e93a8bed3c5b09a85705b45301b000b20364b60758a9fb5cadddec9b49e89745f49341f0a0013293e53687e93a8c6d7d9c8a5907b66503b26110000000000000408141c201c1408060000000000000000000000000e19273137444b515a626970777d85909ca4b5c2d2cdb9a8927c67523d2712000000000000000000000000000b20364b6075889eb3c7d8decab6a4907b65503c2c19060000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5e4d2c1b5b0a9a9a9a9a9a9a9aaacb0b4bac7c9d2cac2b5aa9f937f6a5f4d3c2b1906000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c271200000000000000000000152a40556a7f95aabfd4cdb8a38d78634e38230e0000000a1f34495f74899eb4c9d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073899eb3c8dac5b09b85705b49351d140c0a0b13203448596f849aafc4d9c9b49f8a76614b36210c0012273c52677c91a7c3d4cab49f8b76614c4242424242424242424242424242424242424139362d2010000000000e20364b6074859ba5b4c0bcab9f9588807975706c696765697e93a8bed3c5b09a85705b45301b000c21364b61768ba5b6cad9d6c5b19c86715c47311c0700162b41566b8096abc0d5cebbaa8c77624c37220d000000000000000001080b0801000000000000000000000000000e1e2b37444b5560676f787e858b939ba3b1b6c2d2cebfb49e8976614b36210c000000000000000000000000081c2f3f53687d92a6b8cbe5e5d3c2ae99846f5a4935200b0000000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5ddc9b5a39b9494949494949495979a9fa9b1b5c2cdd2c8bbb49d927d675a4835200f000000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c271200000000000000000000162c41566b8196abc0d6ccb7a18c77624c37220d0000000a1f34495f74899eb4c9d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea7b8ccd4bea9947f69543c2c190100000005182b3b53687e93a8bdd3cdbaa98f7a65503a251000152a40556a7f95aabfd4c7b29d87725857575757575757575757575757575757575757564f4a3e2d1808000000091d3145566278879ba2b3b9bcb5a69d968f8985817e7c7a797f95aabfd4c5b09a85705b45301b00091e32465772879cb2bdc4c6b9a795806b56402b160100182e43586d8398adc2d8cab49f8a755948341f0b000000000000000000000000000000000000000000000000000e1e2b3c48556069747c848c939a9faab0b5c1cad3cabeb1a1947f695746331e0a0000000000000000000000000e23374b5d71869cb1c5d5e0dedfcab49f8c78634d3928160300000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5dbc6b09b857f7f7f7f7f7f7f8081858a929ca4b0bccdd8cebbb49f8a78624d3d2d1a070000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c271200000000000000000000182d42576d8297acc2d7cbb6a08b76614b36210c0000000a1f34495f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8c5d6dac9a5907b65503b251000000000000f253a4f647a8fa4c7d8d7c7a9947f69543f2a1400182d42576d8297acc2d7c4af9a846f6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6b645c4a36261401000002152738485a627884949ea8b2b7b7b3aba89e9a9694918f8e959dafc3dac5b09a85705b45301b000316283953687e939facafaea89e8977624d37220d0000192e44596e8399aec3d8c8b39e89735e3b2a180500000000000000000000000000000000000000000000000009192b3c485a62737e88919a9fabafb4bbc8c9cfcac3b6b2a0978373604b39291703000000000000000000000006192c3c50657b90a4b5c9d6ccc9cccfbcab96816b5746321e0900000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d6969696969696b6c70757d86969eb0bccde1cdbaa899836e5b4a36210c0000000000000000000000000000000c21364b61768ba0b6cbd1bca7917c67523c271200000000000000000000182e43586d8398adc2d8cab5a08b75604b36200b0000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5cfbcab8c77624c37220d00000000000c21364c61768ba9baced6c1ac97816c57422c1700192f44596e8499aec3d9c7b29c87828282828282828282828282828282828282828282817a645443301c080000000a1a2b3c485962737f89959da5abb0b4b9b4afaca9a6a5a3aaafbcccdac5b09a85705b45301b00000b263a4e606c818f979a99958a7c65594834200b00001a2f445a6f8499afc4d9c8b29d88735d48331e00000000000000000000000000000000000000000000000001142637485a627885939da6afb5bcc9cacecac9bcb4aea49c918274605544311b0b0000000000000000000000000c2035495a6e8399aec2d2c5b9b3b9c5c9b39e8975614b36211100000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58545454545455575660687480969eb0c1d2d7c6b59f8c79634e39240e00000000000000000002090b0c0a040c21364b61768ba0b6cbd1bca7917c67523c271200000000000000000000182d42586d8297adc2d7cbb6a18c76614c37210c0000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d8298adc2d7cab59f8a75604a35200b00000000000a1f334658748a9fb4c9d9c3ae99836e59442f19001a2f455a6f849aafc4d9cab6a59c979797979797979797979797979797979797979797968874604b35200b000000000e1e2b3b4855606a777f878f959b9faaa7aaadafb1b2b3b4bbc8d8dac5b09a85705b45301b00000b1f314251626c7a8184848077655d4c3b2b18050000192e44596e8399aec3d8c8b39e89735e3b2a18050000000000000000000000000000000000000000000000081d3144556278889ba3b3b7c4cacfc8c9bcb5b0ab9f9991877c6d605645372614000000000000000000000000031729394d63788c9fb4caccb9a79ea7b9ccb9a7937e68533f2f1c08000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58423f3f3f3f4038454b55606b8096a3b5c9decfbcab96816c563c2c1906000000000000000a161e21211f170c21364b61768ba0b6cbd1bca7917c67523c271200000000000000000000172c41566c8196abc1d6ccb7a28d77624d38220d0000000a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3d8c9b49e89745443301c0700000000000417293a5e73899eb3c8dac4af9a856f5a45301a001a30455a6f859aafc4dad3c3b6b2acacacacacacacacacacacacacacacacacacacacaca78d78624d38220d00000000000e1d2b37444b59616a747a80868a8e9295989a9c9d9e9faabbcedac5b09a85705b45301b00000214243444515d646c6f6f6a62594c3f2f1d0d000000182d43586d8298adc2d7c9b49f8a745947341f0b00000000000000000000000000000000000000000000000b20354b6073859ba6b5c1cbd1c8c1b4b0ab9f9b948b847c73675f4b45382819090000000000000000000000000a1e3346576c8196abbccfc5b39e899eb3c3c5b19c86715d4b38230e000000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d2a2a2a2b283237444b6073859bb1c7d7dac9b29d88735a4935200c000000000007151a2832363633292021364b61768ba0b6cbd1bca7917c67523c271200000000000000000000142a3f54697f94a9bed4cfb9a48f7a644f3a250f0000000a1f34495f74899eb4c9d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afc4d9c8b39e88735e492614010000000000001e33485d73889db2c8dac5b09b85705b46301b00192f44596e8499aec3d9d5c4b8b3a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9aeb2bec2c2c5a38e78634e39230e0000000000000d1927313b474c5460656b7175797d8082858688898c9fb4cadac5b09a85705b45301b000000061626343f4b4f575a59554d483b2f211100000000162b40566b8095abc0d5cebbaa8c77624c37220d0000000000000000000000000000000000000000000004182a3a53687e93a3b5c4d2cdc0b4afa39b938c857f786f6660554d4032281a0a000000000000000000000000011426364c6176899eb4c9ccb9a7937e93a5b6c9b6a4907b65503c2b19060000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d18141416161e27314354677c91a9bacddfcbb7a68d78624d38230d000000000515253338454b4c463a352b364b61768ba0b6cbd1bca7917c67523c27120000000000000000000011273c51667c91a6c4d4d2bda8937d68533626140100000a1f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3d8c9b49f89745544311d08000000000004172a3a5e73899eb3c8dac4af9a856f5a45301a00182d42576d8297acc2d7cbb8a69e94949494949494949494949494949498a0b2c6d7c7a28d78624d38230d0000000000000009151d2a3436434b5056566064686a6d707172737e93a8bed3c5b09a85705b45301b000000000816202e373a4245444037342b1d11030000000013283d53687d92a8c5d6d8c8a5907b65503b261000000000000000090f11150e0c0700000000000000000a1f34475971869bb0c1d2cdbdb0a29a8f857e777069625a514b4437301d150a00000000000000000000000000081c304354697e94a8b9ccc9b39e8975879db2c9c2ae99836e5a4935200a0000000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d1803000002091526364b60758a9fb4c9ded4c4a6917c66513c2711000000001323334350566061584d483c364b61768ba0b6cbd1bca7917c67523c2712000000000000000000000d23384d62788da6b7cbd7c1ac97816c5443301c080000001f34495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d8298adc2d7cdbaa88a75604b35200b00000000000a1f334758748a9fb4c9d9c3ae99836e59442f1900152a3f546a7f94a9c8d8c8b39e887f7f7f7f7f7f7f7f7f7f7f7f7f7f7f8298aec3cdbaa98c77614c37220c00000000000000000b171f212630353a38454b4f5255585a5c5d697e93a8bed3c5b09a85705b45301b000000000002101b22252c2f2f2b2220180d0000000000000f24394e64798ea7b8ccd4bfaa957f6a553f2e18080000000007121d24262a23211a0f010000000000000c22374c61778b9fb5cad4c3b09f96847a70696259544d483c35312619120500000000000000000000000000000b20354b6073879db2c6d3c2ad97826d8095abbccab49f8c78624d3928160300000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d180300000000081e32455670859ab0c5dad3bea9947e69543f29140000000e1e314150616a757670625a4b3f4b61768ba0b6cbd1bca7917c67523c2712000000000000000000000c2035495a73889db2c8ddc8b39d8874604b3626140906091534495f74899eb4c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5d7c6a28c77624d37220d00000000000c21374c61778caabbced6c1ac97816c57422c170011263b50667b90aabbcec9b49f8a7569696969696969696969696969697f94a9bec9b49f89745847331f0a00000000000006131b29333638363228273136393d4043454754697e94a9bed3c4af9a846f5a452f1a00000000000000080d0f171a1a150d0b05000000000000000b20354b6074899eb3c8dcc6b19c86715d4b3626170c0b0b0f1a212f383b3f39362d1f0f0100000000000f243a4f64798fabbccfcab7a5968172645c534d483b38352b2c322f221f180d000000000000000000000000071b2d3e51667c91a5b6cacab6a4907b65788c9fb5cabcab96806b5745321e0900000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d18030000000002162838586e8398adc3d8d5c0aa95806b55402b1600000a1a2c3c4e5f6a7f8a8b8578645d4d4b61768ba0b6cbd1bca7917c67523c27120000000000000000000006192c3c576d8297acc1d2cbb7a6907b65544331261f19202731425f74899eb4c9d3bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8c5d5d0bba5907b66503b2611000000000010253a50657a8fa5c8d8d7c7a9947f69543f2914000c21364c61768a9fb4c9cebaa9907b655454545454545454545454576c8297acc1c6b19b86715c3a2a18040000000000031324313a464c4e4b453832282024282b2d2838556b8095aac0d5c2ad98836d58432e18000000000000000000000205040000000000000000000000081d3144556e8398adc2d3c9b5a48f7a655443332a222020222d36404c51554e4a3d2d1f0f000000000011263b50667b90a5c9dac7b29d877460544a3e37342b2b353841474437342a1d0d00000000000000000000000d22364a5c70859ab0c3d4c7b19c8773606f849aafc5c9b39e8975604b36211100000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d18030000000000172d42576c8297acc1d7d6c0ab96816b56412c160002152738495b687d929fa29a887b675f4b61768ba0b6cbd1bca7917c67523c271200000000000000000000000f243a4f647a8fa3b5c9d4c4b09b8573604b4437332c3537444b6074899eb4c9d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea7b8ccd4bfaa947f6a553e2d1b0700000006192c3c54697e93a9bed3cdbaa98f7b65503a2510000a1e3346576f849aafc2d2c7ad97826d5a49373f3f3f3f3f3f384b5d72879cb2c7c4ac97816c57422c17000000000000112131424e58616360564b463931272422233245566e8399aec3d6c1ac96816c57412c170000000000000000000000000000000000000000000000000114263750667b90a4b6cad2c2b09b8573604c473a373536383e4a4e5e666a635b4a3d2d1a0a0000000010253a50657a8fa5c4d4c4ae99846f5544362d2731363c484d575d5a4c473b2a180500000000000000000005182a3b4e64798ea2b4c8cdbaa9947e6954677d92a7b8ccb8a7937d68533f2e1c08000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d1803000000000417293a596e8398aec3d8d5c0aa95806b55402b1600091d31455663798a9eb4b4a69e8b7d6b6061768ba0b6cbd1bca7917c67523c271200000000000000000000000d22374b5c71869bb0c0d1c9b5a3957f6a60554c473c494d55606b7e93a8b9cdd3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074899eb3c8dbc6b19b86715c4a3622160d0b0c142035495a70859ab0c5dac9b49f8a75604b36210b000317293951667c91a4b5c9c9b49f8b786255453831272630374556657b90a4b6cab7a6907b66513b2611000000000008182f3f4e60687678756b61574b4437393838404b6075899eb3c8d3c3a8927d68533d2813000000000000000000000000000000000000000000000000000b20354b6073869cb1c0d0c9b5a397816d61584f4c4a4b4d525c64707b7f79635b4a382816020000000e23384d63788da6b7cbc6b19c86715f4c473a37444b515a626c726f625947341f120000000000000000000b1f3448596d8298adc0d1c9b49f8a76614c6075899eb3c8c5b19c86715d4b37230e000000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d1803000000000a1f33465870859bb0c5dbd3bea9947e69543f2914000b20364b6074859ba8b9c4b8a99f92807260768ba0b5d8d1bca7917c67523c27120000000000000000000000071b2e3e52687d92a2b4c7d2c1af9e957f736861585d5a63697480939daec6d7d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556d8298adc1d2c9b5a38e79644e4332282220222631424d63788c9fb4cad4c3ae99846f5745321e0900000b20354a6073869cb1bfcebaa99a847360564b443736434b556074859bb1c3c4b39d8875604b36200b00000000011426364b5d687e8a8d898075686055514e4d4e515e697e93a7b8cccab6a48d78624d38230d0000000000000000070b0f1314100b08010000000000000000081c304354677d91a2b3c4d2c1b19f9782766b6561606062676f798590948979635645321e0e0000000b20354a6074889db2c7cab6a4927d6a61585a5a5560666e7881878477624c40301b0b00000000000000021528384c62778b9fb4c9d2c1ad97826d5847566c8196acc1c9b5a48f7b65503c2b19050000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d180003090b101b2a3a4c61768b9fb4cadfd3c3a6917c66513c26110011263c51667b919fa9b8c5c7bab49e958375738aaabbced1bca7917c67523c27120000000000000000000000001020354a6072849aa9bacdccbcaf9d95857d76747374787e86959eaebbcbded3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263750657a8fa3b5c9d2c1af9a846f614b453837363737444b606e8398abbccfcab7a5917c6751392816030000071c304354677d92a1b3c3c7b4a29882746660555858546065748298a3b5c9b7a6947e695645321d0900000000081c304354657b8d9fa79e95887d746c66636263666e7c8b9fb4c5d5c4b29c87725a4935200c00000000000008131c2025292925201d140900000000000000011426364d5f6f849aa6b8c6cebdb1a09888807a777575777c848d9aa2a79c8674604b3c2c19060000071c3043546c8197a9bacdc2b49f8c8077716f6f71757c838b969c99836f5e4d39291703000000000000091d3245566a8095a9bacec9b5a38f7a644f3a4e64798ea3b5c9c2ae99836e5a4835200a0000000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d58422d1e1e161e21242e394758697e93aabbcedecab6a48c78624d37220d000f24384c5e687e8b9ea7b6c3cdbcb0a19985778b9fb4cad1bca7917c67523c2712000000000000000000000000071c30435463798b9fb4bcceccbcafa39b928c89888a8d939ca4afafb4c0d1d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000923374b5d71869bb1becfc8b4a2947f6b60564f4c4b4c4e5560697e92a0b2c9d1c0b29d8774604b35200b000000001325364d5f6e8399a5b7c5c0b2a098867c756f6d6d6f747b8598a0b2c2bcab9d8875604b38281502000000000b20354b6073869cabb9b3a69d9288817c7977787c838d9fa9bacdc9b8a6937e68533c2c190600000000010f182530353a3e3e3a353126191002000000000000081830414d6277889da8b8c4cebeb2a69e968f8c8a8b8d91999fabb4b5a496816c5a4935200c0000001325364d62788a9fb4becebbaa9f958b868484868a91989faab2a1917c665746331e0a0000000000000b20364b6075889eb3c7d6c6b19b86715c4b374a5c71869bb0c6cab49f8b78624d3828160300000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d5842333333283236393e4b576176889db3c8d9d8c8b29c8772594834200b00091d2f404e5f687b899ca4b4c0cdbfb2a39b888c9fb4cad1bca7917c67523c271200000000000000000000000000132536495b687e939eb4bac7ccc1b5b0a7a89e9d9fa9a9b1b0a29aa2b4c7d7bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f50657b90a0b2c3d0c0af9d9480756a64626061646a737f8c9fb4becfc4b4a2927d675544311d0800000000081830414c6176879da6b6c2beb2a49c91898583828488909ba3b2bebdb59f8d7c665645321a0a000000000013283d53687d92a4b4c0c4b7b2a69d96918e8d8d91989fabbac7cfbcab9e8875604b36210e00000000000f1f2c36434a4f5353504b44372d2010010000000000001320344859647a8a9ea6b4c0cac5b8b3aba4ab9faba2a7aeb5bcc2b5a99f8a78624d38230d000000082035495a6a7f95a0b5bcc8bbb4aa9f9b99999b9fa9aeb4bbbcb29d8876614b36210c0000000000081c2e3f52687d92a6b8cbccb9a8937d68533e2e3d53687e93a8bacdbbaa95806b5645321e0900000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d584848484838454b4f535c6475849aa6b7cbe2cebbaa95806b553b2b19050000122231414e5d6579869aa2b1becfc1b5a69d9faabbced1bca7917c67523c27120000000000000000000000000008182c3d4e606a80939fa9b5c1c9c9c6c6b9b3b2b4bab8b39e96859aa9bac8bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001123384c5e6e8298a5b6c4ccbbaf9e9587807a777577797f86949faabbcec5b7a69a8472604a372715010000000000131f334758647a889ca4b2bfc2b5b1a89e9a9897999ea6b1b5c1bbb49f95806a5e4c3828160000000000000f24394f647a889aa2b3b8c5c4b8b3aba6a3a2a3a6adb5bcc9c9bcb59f8d7c665645321e09000000000d1d2c3d4954606468696560554a3e2d1f0f00000000000005182b3b4b5c647a889aa2b1b6c2c7c8c0c9bcb4bcb7bcc4c4b8b3a49c8a7d675a4935200c00000006192b3c4a607282969fabb5c1c8bbb4b1afafb0b4bac7bcb5ab9f968476614c37210c00000000000e23374b5d71869bb1c4d5c9b39e8975614b3621364c61768a9fb4c9c8b39e8875604b36211100000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad97826d5e5e5e5e5e5e56606469707a869aa2b4c4d5d4c4b49f8b78624d38220d000000041323313f4b5b63768497a0b5bcc9c4b7b2b4bbc8d8d1bca7917c67523c271200000000000000000000000000000e1f314250626a7e8b9ba3afb4bac7bfc0bfc5b8b3a69d9180748a9fb2b2b2a9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c6176879ca6b6c2cfbcb0a59d958f8c8b8c8e949ca4b4bbc8c4b7a79d88786254433019090000000000000417293a4a5c64788698a0b0b5c1c6b9b4afadadafb3b8c5bcb4aa9f938172604a40301a0a0000000000000d22364a5c647784939ea7b3b8c5c8c1bbb8b7b8bbc3cacac3b6ab9f94806b5e4c3828160300000005192b3b495b63727a7e7e7a73645c4a3d2d1a070000000000000d1d2e3e4b5c647884929ca4adb2b7c3bcbdbdbcc6b9b3aea69d938679675f4d3c2c1906000000000e1c3043546073818d9ba3adb2b7c3bcbdbdbcc2b6b1ab9f998d8073615847331f0a0000000006192c3c50657b90a3b5c9d1c0ac96816c5746321e3346576d8298adc2ccb8a7927d68533f2e1c08000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5d7c2ad9782737373737373737476797e858f9ca4b4c0d1d7c6b7a697816c5a4835200b000000000513212e3c4958617382949fabbac7cbc8caced8e6d1bca7917c67523c2712000000000000000000000000000000142433435060697a8591999fa9a8aaaaaaa7a69e95887d6b6f849a9d9d9d9d937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111f3347586379889ca4b5bcc9c3b6b2aaa4a1a0a1a3a9b1b5c2c8bfb2a69d897a645a4836251300000000000000000c1c2d3e4a5a6376838f9ba3acb2b7c3bcbdbdbcc2b6b1ab9f988b7e6c60544330221200000000000000071b2d3e4a5962727e89959ea6adb3b8c4bdbfc0bfc8bbb4b0a49c8d7f6b6250402f1a0a000000000b203448596379858f93938f867a645b4a36210c0000000000000010202e3e4b5a626f7d8690979da5a4a7a8a8a7a5a89e9992887e73635b4d41301e0e0000000000001325364455606c7b8690989da5a5a6a8a8a7a4a49c968c83796b6055473a2a1704000000000c2035495a6e8399aec2d2c8b4a28e79634e392817293950657a8fa4b6cac5b19b86715d4b37230d000000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5dec9b49f8b888888888888888a8b8e939aa2b1b6c2d1d3c6b9a89d8776614c3c2b1905000000000003111e2c3a4755606d7f8d9fa9b7c4d2dfe2eae6d1bca7917c67523c271200000000000000000000000000000006152533424e5c64727c848a9093949594928e888076675f63798488888888887e68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a495b637886979fabb3bfc6c7bfb9b7b5b6b9bfc6c6c0b4b0a0988779645c4a3c2b180800000000000000000010202d3c4958616e7a858f979da5a5a7a8a8a7a4a49c968c827968604a4336251304000000000000000010202d3b4854606876808891989da6a5a8a9aaa9a8aa9f9a93877c6a61504433221200000000000d22374d6278899ba3a8a8a49c8a79634e3a2a18040000000000000210202e3c484d5f67737b82878c8f91929392908d89847d756960554a3d3023120000000000000008182737444b5d65717b82878d8f919392918f8c8780796e635b4b44372a1c0c00000000031729394d63788c9fb4cad5c4b09a85705b4a361b0b23374b5d72879cb1c8c9b5a38f7a65503c2b19050000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5e1cdbaa99f9d9d9d9d9d9d9e9fa9a4a8b0b4c0cad3ccc2b6a89e8a7a645846331e0e00000000000000000e1c2a37444b616a7d8b9da6b5c2d0ddebe6d1bca7917c67523c271200000000000000000000000000000000071524313e4a5460666f767a7e7f807f7d79746b61584d5b636f727373737368604e3a261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2c3c495a6275828d99a1aab0b4bbc8bdbdbdc9bcb4b1aba29a908376635b4a3e2d1d0d0000000000000000000002101e2c3a474c5d65737a82888c8f929393928f8c8780796d635b4e423025180800000000000000000002101d2b36434a58616a757c83888d909394959492908a857e74665e4f43332616040000000003172939586d8297a7b5c1c2b6a89a846f5847331f0a0000000000000002101d2b34414d5460656d72777a7c7d7e7d7b78746f6760564b44372d1f12050000000000000000091927313f4c505d656d72787a7c7d7d7c7a77726b635b4e4a3d3126190c00000000000a1e3346576c8196abbccfcbb8a6927c67523d2d1a081c2e3f546a7f94aabbcec2ae98836e5a4834200a0000001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0d5e9d7c7bab4b3b3b3b3b3b3b3b4bac7bec5c8d1c9c5b9b3a49c8a7b655c4a3a2917000000000000000000000c192731434f5f677a889ca4b3bfcde2ebd1bca7917c67523c271200000000000000000000000000000000000614202d36434a51576165686a6b6a686460544c463c494d5a5d5d5d5d5d534e42311e0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3c4957616d7a848d959b9faaa6a7a8a7a6ab9f9c958e857b6e61584a3d2d2010000000000000000000000000000e1c2a333f4b5460656d72777a7c7d7d7c7a77726b635b4e493d311c13080000000000000000000000000d1825303a464c5660676e73787b7e7f807f7d7b76706860554c403225160800000000000a1e33465774899eb3c5d2d3c6b59f8b77614c37220c0000000000000000000d19203036434b50585962656768686766636054524b45383127190f010000000000000000000009151d2f383f4b50585a626567686867646158564e4a3d362d1d14090000000000011426364c6176899eb4c9d9c9b39e8875604b36200f001122374c62778b9fb4cacab49f8b78624d3828160200001b30455a70859aafc5d8c2ad98836d58432e1800162b40566b8095abc0cdcdcdd7cdc9c8c8c8c8c8c8c8c9cdcac8c5c2c1b5b1a79e948679655d4b3e2e1c0c000000000000000000000009151d32414d5c64788699a1b0bdced9cfbca7917c67523c271200000000000000000000000000000000000002101825303539464b5053555555524f4b4336332c35384548484848483d3a31241302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c39464b5c646f7980868a8e91929392918e8b86807970655d4c473a2d1f100200000000000000000000000000000c171f2e36434a505759626567686867656159564e493d352c1f1400000000000000000000000000000008131c293338454b51585a6266686a6b6a68666158534b44372f2215070000000000000c21364b61768ba7b9cce2e3cfbcab8e79644e39240f000000000000000000000513182630353b3b484c4f52535352504e4b43363632281d15090000000000000000000000000001111c232f373b3c484d50515353524f4c473a39362d211a0f01000000000000081c304354697e94a8b9cccfbcab95806b5645311d09000b1f3447596e8399aec4cebbaa95806b5645321e0900001b30455a70859aafc5d5c2ad98836d58432e1800162b40566b8095abb8b8b8b8b8b8b8b8b8b8b8b8b8b8b7bcb5b3b0aca8a39b94897f74635b4b3f2f201000000000000000000000000000021523303e4a5a627583969fb4bbc8babaa7917c67523c2712000000000000000000000000000000000000000008131c202932363b3e3f403f3d393530261f1921232f333333333328261e13060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b29323e4b4f5b636a7176797b7d7e7d7c7976716b645c504c3f332a1c0f01000000000000000000000000000000000410182530353a3b484d50525353524f4c473a38352c211a0f0100000000000000000000000000000000000c171f2832363c3c484d505354555453514c463a353127191204000000000000000b20354b60748a9fb4c8d7d8c9b6a48d77624d38220d00000000000000000000000008141c20262b34373a3c3d3e3d3b38353026211e160a010000000000000000000000000000000009111c23252b35383a3c3e3d3c3a37332a24211a0f0700000000000000000b20354b6073879db2c6d6cab49f8c78624d382715020005182a3b51667b90a6b7cbc8b39e8875604b36211000001b30455a70859aafc0c0c0ad98836d58432e1800162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a2ab9f9e9b97938d867e766a6056493d2f21110200000000000000000000000000000412202e3c4857617381939faaa4a4a4a4917c67523c271200000000000000000000000000000000000000000000070b161e2125292a2b2a2824201c1408060c0e1a1d1e1e1e1e13110b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2e373d494e555760646668686867646157564e4a3e382f1f170c000000000000000000000000000000000000000008131c20252b34373a3d3e3e3d3a37342a23211a0f060000000000000000000000000000000000000000040a161e21272b35383b3e3f403f3d3b363329201d1509000000000000000000081c3043546f8499aabac6c7baab9c86715a4835200b0000000000000000000000000001080b1018202225272829282623201c140b09030000000000000000000000000000000000000000080e10192022252728282725211f170e0c07000000000000000000071b2d3e51667c91a5b6c8c8c2ae99846f5a48351a0a0000000d20354b6074889db2c7c8b8a7927d68523f2e1b08001b30455a70859aababababab98836d58432e1800162b40566b808d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c8a8886827d78716961574b45382c1f11030000000000000000000000000000000002101e2b394655606c7e8b8f8f8f8f8f8f7c67523c2712000000000000000000000000000000000000000000000000030a0c1013151615130f0b0801000000000508080808080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101b222c353839454b4e51525352514f4c463939362d231c11040000000000000000000000000000000000000000000000070b10182022252728282725221f180e0c0600000000000000000000000000000000000000000000000002090b1219202326292a2b2a2826211f170c080100000000000000000000011426364f647a8c9fa8aeafa99f8d7c66513c2b19050000000000000000000000000000000000050b0d1012131312110e0b08010000000000000000000000000000000000000000000000000000050b0d10121313120f0c0a040000000000000000000000000d22364a5c70859aafb2b2b2b2a4907b66513c2b1900000000081d3144556b8095a9b2b2b2b19b86715d4b37220e001b30455a708495959595959595826d58432e18000c22374c61777878787878787878787878787878787877777573706d68625a544c463931271a0f01000000000000000000000000000000000000000e1b2937444b6069797a7a7a7a7a7a76614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f1a2123283236393c3d3e3d3c3936332924211a0f0800000000000000000000000000000000000000000000000000000000050b0d1012131312100c0a0400000000000000000000000000000000000000000000000000000000000000060b0d111315161513110c0a0400000000000000000000000000000822364a5c677d8a959999958b7e685e4c381e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e9d9d9d9d9d9d998673604b35200e00000000011426374d62788b9b9d9d9d9d9d8f7a654f3a25100013283e53687e808080808080807c67523c2712000a1f3447596163636363636363636363636363636363626260555b57534d483c3633291d150a000000000000000000000000000000000000000000000b192631424f5b63656565656565615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e161e2124262829282724211e170f0d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4d5f67777f8484807868604e402f1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b41566b80888888888888888478625443301c080000000000092035485a657b85888888888888816c56412c170011263a4e60686b6b6b6b6b6b6b675f4d3925100004182a3a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d4c4b4437423e38352b211e170b0200000000000000000000000000000000000000000000000009141d323d494e4f4f4f4f4f4f4c473a2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0f11131313120f0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102030414d59626a6f6f6b625a4e423122120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293d51626b737373737373726f625a4936261401000000000005192b3c4b5d65707373737373736c63513e2915000b1f31424e5356565656565656524d41301d0a00000c1c2a34373838383838383838383838383838383838373631272d282320190e0a0300000000000000000000000000000000000000000000000000000001141f2c35393a3a3a3a3a3a37332a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021323303b484d55595a564d493c31241404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21344451565d5d5d5d5d5d5d594d493c2c1808000000000000000e1e2f3f4b505b5d5d5d5d5d5d56514434220e00021424313a3e404040404040403c39302313010000000c181f22232323232323232323232323232323232222201d1518130d0b0600000000000000000000000000000000000000000000000000000000000000010f1a2123252525252525221f180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131d2b34374044444038352c1e14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041626343d41484848484848484438352c1e0e00000000000000000011212f383b46484848484848413e34261605000006141f26282b2b2b2b2b2b2b27251d13050000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0d0b08020000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1010101010100c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1820222a2f2f2b2320190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081621292b333333333333332f2320190e0000000000000000000003111c2325303333333333332c2922160800000000020b11131616161616161612100a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d151a1a160d0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e14161e1e1e1e1e1e1d1a0d0c0600000000000000000000000000080e101b1e1e1e1e1e1e17150e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!21 &-2935581447736933011 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Bold SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -7946609771462161899} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.8333333 + - _ScaleRatioB: 0.6770833 + - _ScaleRatioC: 0.6770833 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Bold SDF + m_EditorClassIdentifier: + hashCode: -356473649 + material: {fileID: -2935581447736933011} + materialHashCode: 1909642639 + m_Version: 1.1.0 + m_SourceFontFileGUID: ae4e4b833eb9f63448b39edf3f03e309 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FaceIndex: 0 + m_FamilyName: Lato + m_StyleName: Bold + m_PointSize: 68 + m_Scale: 1 + m_UnitsPerEM: 0 + m_LineHeight: 81.6 + m_AscentLine: 67.116005 + m_CapLine: 50 + m_MeanLine: 35 + m_Baseline: 0 + m_DescentLine: -14.484 + m_SuperscriptOffset: 67.116005 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.484 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.34 + m_UnderlineThickness: 3.3660002 + m_StrikethroughOffset: 14 + m_StrikethroughThickness: 3.3660002 + m_TabWidth: 17 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 16.53125 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 3 + m_Metrics: + m_Width: 47.96875 + m_Height: 49.15625 + m_HorizontalBearingX: -0.375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 47.21875 + m_GlyphRect: + m_X: 343 + m_Y: 6 + m_Width: 49 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 6 + m_Metrics: + m_Width: 36.453125 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 44.78125 + m_GlyphRect: + m_X: 55 + m_Y: 252 + m_Width: 37 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 7 + m_Metrics: + m_Width: 41.546875 + m_Height: 50.25 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 44.984375 + m_GlyphRect: + m_X: 61 + m_Y: 129 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.65625 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 51.71875 + m_GlyphRect: + m_X: 460 + m_Y: 6 + m_Width: 45 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 11 + m_Metrics: + m_Width: 31.015625 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.09375 + m_GlyphRect: + m_X: 379 + m_Y: 345 + m_Width: 32 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 13 + m_Metrics: + m_Width: 31.015625 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 38.484375 + m_GlyphRect: + m_X: 391 + m_Y: 283 + m_Width: 32 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 14 + m_Metrics: + m_Width: 43.453125 + m_Height: 50.25 + m_HorizontalBearingX: 2.546875 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 49.375 + m_GlyphRect: + m_X: 6 + m_Y: 129 + m_Width: 44 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 15 + m_Metrics: + m_Width: 41.453125 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 52.390625 + m_GlyphRect: + m_X: 210 + m_Y: 161 + m_Width: 42 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 17 + m_Metrics: + m_Width: 9.1875 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 20.15625 + m_GlyphRect: + m_X: 496 + m_Y: 67 + m_Width: 10 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 19 + m_Metrics: + m_Width: 23.453125 + m_Height: 49.703125 + m_HorizontalBearingX: 0.75 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 29.203125 + m_GlyphRect: + m_X: 309 + m_Y: 284 + m_Width: 25 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 20 + m_Metrics: + m_Width: 41.71875 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 46.609375 + m_GlyphRect: + m_X: 342 + m_Y: 67 + m_Width: 43 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 21 + m_Metrics: + m_Width: 28.796875 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 35.328125 + m_GlyphRect: + m_X: 405 + m_Y: 221 + m_Width: 30 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 24 + m_Metrics: + m_Width: 53.3125 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 64.265625 + m_GlyphRect: + m_X: 88 + m_Y: 6 + m_Width: 54 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 25 + m_Metrics: + m_Width: 41.453125 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 52.390625 + m_GlyphRect: + m_X: 153 + m_Y: 180 + m_Width: 42 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 27 + m_Metrics: + m_Width: 49.8125 + m_Height: 50.25 + m_HorizontalBearingX: 2.546875 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 54.9375 + m_GlyphRect: + m_X: 69 + m_Y: 67 + m_Width: 51 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 30 + m_Metrics: + m_Width: 35.09375 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 42.09375 + m_GlyphRect: + m_X: 306 + m_Y: 454 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 32 + m_Metrics: + m_Width: 52.359375 + m_Height: 59.328125 + m_HorizontalBearingX: 2.578125 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 54.9375 + m_GlyphRect: + m_X: 218 + m_Y: 6 + m_Width: 53 + m_Height: 60 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 33 + m_Metrics: + m_Width: 38.390625 + m_Height: 49.15625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 43.71875 + m_GlyphRect: + m_X: 396 + m_Y: 67 + m_Width: 39 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 34 + m_Metrics: + m_Width: 33.25 + m_Height: 50.25 + m_HorizontalBearingX: 1.5625 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 37.296875 + m_GlyphRect: + m_X: 264 + m_Y: 284 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 36 + m_Metrics: + m_Width: 38.796875 + m_Height: 49.15625 + m_HorizontalBearingX: 1.015625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 40.796875 + m_GlyphRect: + m_X: 446 + m_Y: 67 + m_Width: 39 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 38 + m_Metrics: + m_Width: 40.765625 + m_Height: 49.703125 + m_HorizontalBearingX: 4.859375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 50.484375 + m_GlyphRect: + m_X: 274 + m_Y: 114 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 40 + m_Metrics: + m_Width: 47.96875 + m_Height: 49.15625 + m_HorizontalBearingX: -0.375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 47.21875 + m_GlyphRect: + m_X: 282 + m_Y: 53 + m_Width: 49 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 41 + m_Metrics: + m_Width: 70.3125 + m_Height: 49.15625 + m_HorizontalBearingX: 0.578125 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 71.46875 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 71 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 42 + m_Metrics: + m_Width: 45.3125 + m_Height: 49.15625 + m_HorizontalBearingX: 0.109375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 45.59375 + m_GlyphRect: + m_X: 153 + m_Y: 119 + m_Width: 46 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 43 + m_Metrics: + m_Width: 44.9375 + m_Height: 49.15625 + m_HorizontalBearingX: -0.4375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 44.0625 + m_GlyphRect: + m_X: 403 + m_Y: 6 + m_Width: 46 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 44 + m_Metrics: + m_Width: 37.984375 + m_Height: 49.15625 + m_HorizontalBearingX: 1.359375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 41.171875 + m_GlyphRect: + m_X: 6 + m_Y: 191 + m_Width: 39 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 45 + m_Metrics: + m_Width: 29.09375 + m_Height: 36.078125 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 35.53125 + m_HorizontalAdvance: 34.515625 + m_GlyphRect: + m_X: 96 + m_Y: 463 + m_Width: 30 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 48 + m_Metrics: + m_Width: 32.109375 + m_Height: 51.046875 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 38.59375 + m_GlyphRect: + m_X: 174 + m_Y: 312 + m_Width: 33 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 49 + m_Metrics: + m_Width: 29.40625 + m_Height: 35.9375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 32.78125 + m_GlyphRect: + m_X: 160 + m_Y: 462 + m_Width: 30 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 55 + m_Metrics: + m_Width: 32.09375 + m_Height: 51.046875 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 38.59375 + m_GlyphRect: + m_X: 192 + m_Y: 241 + m_Width: 33 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 59 + m_Metrics: + m_Width: 31.921875 + m_Height: 35.9375 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 36.3125 + m_GlyphRect: + m_X: 52 + m_Y: 463 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 61 + m_Metrics: + m_Width: 22.71875 + m_Height: 50.015625 + m_HorizontalBearingX: 1.390625 + m_HorizontalBearingY: 50.015625 + m_HorizontalAdvance: 24.375 + m_GlyphRect: + m_X: 325 + m_Y: 222 + m_Width: 24 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 93 + m_Metrics: + m_Width: 33.078125 + m_Height: 47.78125 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 35.5 + m_HorizontalAdvance: 35.90625 + m_GlyphRect: + m_X: 103 + m_Y: 253 + m_Width: 34 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 95 + m_Metrics: + m_Width: 30.40625 + m_Height: 50.53125 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 38.359375 + m_GlyphRect: + m_X: 268 + m_Y: 346 + m_Width: 31 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 98 + m_Metrics: + m_Width: 10.75 + m_Height: 50.421875 + m_HorizontalBearingX: 3.265625 + m_HorizontalBearingY: 50.421875 + m_HorizontalAdvance: 17.265625 + m_GlyphRect: + m_X: 310 + m_Y: 346 + m_Width: 12 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 102 + m_Metrics: + m_Width: 16.59375 + m_Height: 62.65625 + m_HorizontalBearingX: -2.578125 + m_HorizontalBearingY: 50.421875 + m_HorizontalAdvance: 17.265625 + m_GlyphRect: + m_X: 51 + m_Y: 388 + m_Width: 18 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 104 + m_Metrics: + m_Width: 32.203125 + m_Height: 50.53125 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 36.34375 + m_GlyphRect: + m_X: 281 + m_Y: 222 + m_Width: 33 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49 + m_Height: 35.421875 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 56.953125 + m_GlyphRect: + m_X: 282 + m_Y: 6 + m_Width: 50 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 109 + m_Metrics: + m_Width: 30.40625 + m_Height: 35.421875 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 38.359375 + m_GlyphRect: + m_X: 357 + m_Y: 175 + m_Width: 31 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 111 + m_Metrics: + m_Width: 34.5 + m_Height: 35.9375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 39.0625 + m_GlyphRect: + m_X: 6 + m_Y: 465 + m_Width: 35 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 114 + m_Metrics: + m_Width: 32.109375 + m_Height: 46.921875 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 35.53125 + m_HorizontalAdvance: 38.625 + m_GlyphRect: + m_X: 148 + m_Y: 253 + m_Width: 33 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 116 + m_Metrics: + m_Width: 32.09375 + m_Height: 46.921875 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: 35.53125 + m_HorizontalAdvance: 38.59375 + m_GlyphRect: + m_X: 396 + m_Y: 450 + m_Width: 33 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 117 + m_Metrics: + m_Width: 20.984375 + m_Height: 35.53125 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 35.53125 + m_HorizontalAdvance: 25.359375 + m_GlyphRect: + m_X: 370 + m_Y: 128 + m_Width: 22 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 118 + m_Metrics: + m_Width: 26.03125 + m_Height: 35.96875 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 29.890625 + m_GlyphRect: + m_X: 201 + m_Y: 462 + m_Width: 27 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 124 + m_Metrics: + m_Width: 23.765625 + m_Height: 46.109375 + m_HorizontalBearingX: 1.15625 + m_HorizontalBearingY: 45.5625 + m_HorizontalAdvance: 25.296875 + m_GlyphRect: + m_X: 422 + m_Y: 344 + m_Width: 24 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 134 + m_Metrics: + m_Width: 30.390625 + m_Height: 35.4375 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 38.359375 + m_GlyphRect: + m_X: 327 + m_Y: 128 + m_Width: 32 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 136 + m_Metrics: + m_Width: 35.28125 + m_Height: 34.890625 + m_HorizontalBearingX: 0.3125 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 35.90625 + m_GlyphRect: + m_X: 263 + m_Y: 176 + m_Width: 36 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 137 + m_Metrics: + m_Width: 53.34375 + m_Height: 34.953125 + m_HorizontalBearingX: 0.609375 + m_HorizontalBearingY: 34.953125 + m_HorizontalAdvance: 54.5625 + m_GlyphRect: + m_X: 153 + m_Y: 6 + m_Width: 54 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 138 + m_Metrics: + m_Width: 35.09375 + m_Height: 34.890625 + m_HorizontalBearingX: 0.203125 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 35.5 + m_GlyphRect: + m_X: 310 + m_Y: 176 + m_Width: 36 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 139 + m_Metrics: + m_Width: 35.625 + m_Height: 46.28125 + m_HorizontalBearingX: 0.203125 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 35.875 + m_GlyphRect: + m_X: 239 + m_Y: 459 + m_Width: 36 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 140 + m_Metrics: + m_Width: 27.4375 + m_Height: 34.890625 + m_HorizontalBearingX: 1.765625 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 31.25 + m_GlyphRect: + m_X: 399 + m_Y: 175 + m_Width: 29 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 170 + m_Metrics: + m_Width: 15.953125 + m_Height: 10.0625 + m_HorizontalBearingX: 2.71875 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 27.203125 + m_GlyphRect: + m_X: 220 + m_Y: 437 + m_Width: 17 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 308 + m_Metrics: + m_Width: 10.34375 + m_Height: 49.625 + m_HorizontalBearingX: 4.3125 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 19.109375 + m_GlyphRect: + m_X: 131 + m_Y: 67 + m_Width: 11 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 309 + m_Metrics: + m_Width: 26.21875 + m_Height: 50.171875 + m_HorizontalBearingX: 2.40625 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 31.28125 + m_GlyphRect: + m_X: 115 + m_Y: 129 + m_Width: 27 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 311 + m_Metrics: + m_Width: 10.0625 + m_Height: 19.421875 + m_HorizontalBearingX: 2.921875 + m_HorizontalBearingY: 9.765625 + m_HorizontalAdvance: 15.90625 + m_GlyphRect: + m_X: 488 + m_Y: 196 + m_Width: 11 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 312 + m_Metrics: + m_Width: 10.296875 + m_Height: 43.421875 + m_HorizontalBearingX: 3.921875 + m_HorizontalBearingY: 33.765625 + m_HorizontalAdvance: 18.390625 + m_GlyphRect: + m_X: 137 + m_Y: 462 + m_Width: 12 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 313 + m_Metrics: + m_Width: 10.296875 + m_Height: 34.234375 + m_HorizontalBearingX: 3.921875 + m_HorizontalBearingY: 33.765625 + m_HorizontalAdvance: 17.515625 + m_GlyphRect: + m_X: 403 + m_Y: 128 + m_Width: 12 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 314 + m_Metrics: + m_Width: 10.296875 + m_Height: 10.234375 + m_HorizontalBearingX: 2.921875 + m_HorizontalBearingY: 9.765625 + m_HorizontalAdvance: 16.15625 + m_GlyphRect: + m_X: 465 + m_Y: 196 + m_Width: 12 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 315 + m_Metrics: + m_Width: 46.296875 + m_Height: 10.234375 + m_HorizontalBearingX: 2.921875 + m_HorizontalBearingY: 9.765625 + m_HorizontalAdvance: 52.46875 + m_GlyphRect: + m_X: 216 + m_Y: 77 + m_Width: 48 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 326 + m_Metrics: + m_Width: 27.75 + m_Height: 53.765625 + m_HorizontalBearingX: 1.96875 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 31.6875 + m_GlyphRect: + m_X: 134 + m_Y: 313 + m_Width: 29 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 327 + m_Metrics: + m_Width: 6.53125 + m_Height: 64.296875 + m_HorizontalBearingX: 5.609375 + m_HorizontalBearingY: 52.59375 + m_HorizontalAdvance: 17.75 + m_GlyphRect: + m_X: 32 + m_Y: 389 + m_Width: 8 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 329 + m_Metrics: + m_Width: 27.75 + m_Height: 53.765625 + m_HorizontalBearingX: 1.96875 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 31.6875 + m_GlyphRect: + m_X: 135 + m_Y: 379 + m_Width: 29 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 330 + m_Metrics: + m_Width: 17.609375 + m_Height: 7 + m_HorizontalBearingX: 3.875 + m_HorizontalBearingY: 24.03125 + m_HorizontalAdvance: 25.359375 + m_GlyphRect: + m_X: 206 + m_Y: 222 + m_Width: 19 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 333 + m_Metrics: + m_Width: 26.78125 + m_Height: 5.4375 + m_HorizontalBearingX: 2.453125 + m_HorizontalBearingY: -4.5625 + m_HorizontalAdvance: 31.71875 + m_GlyphRect: + m_X: 135 + m_Y: 445 + m_Width: 28 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 336 + m_Metrics: + m_Width: 14.28125 + m_Height: 64.125 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 53.375 + m_HorizontalAdvance: 18.671875 + m_GlyphRect: + m_X: 6 + m_Y: 389 + m_Width: 15 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 337 + m_Metrics: + m_Width: 14.28125 + m_Height: 64.125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 53.375 + m_HorizontalAdvance: 18.671875 + m_GlyphRect: + m_X: 6 + m_Y: 313 + m_Width: 16 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 338 + m_Metrics: + m_Width: 13.9375 + m_Height: 63.0625 + m_HorizontalBearingX: 5.609375 + m_HorizontalBearingY: 52.59375 + m_HorizontalAdvance: 21.3125 + m_GlyphRect: + m_X: 108 + m_Y: 313 + m_Width: 15 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 339 + m_Metrics: + m_Width: 13.9375 + m_Height: 63.0625 + m_HorizontalBearingX: 1.765625 + m_HorizontalBearingY: 52.59375 + m_HorizontalAdvance: 21.3125 + m_GlyphRect: + m_X: 109 + m_Y: 388 + m_Width: 15 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 340 + m_Metrics: + m_Width: 16.9375 + m_Height: 63.0625 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 52.59375 + m_HorizontalAdvance: 20.8125 + m_GlyphRect: + m_X: 79 + m_Y: 313 + m_Width: 18 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 341 + m_Metrics: + m_Width: 16.9375 + m_Height: 63.0625 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 52.59375 + m_HorizontalAdvance: 20.8125 + m_GlyphRect: + m_X: 80 + m_Y: 388 + m_Width: 18 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 342 + m_Metrics: + m_Width: 21.96875 + m_Height: 23.09375 + m_HorizontalBearingX: 3.46875 + m_HorizontalBearingY: 51.546875 + m_HorizontalAdvance: 28.90625 + m_GlyphRect: + m_X: 411 + m_Y: 406 + m_Width: 23 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 347 + m_Metrics: + m_Width: 32.71875 + m_Height: 26 + m_HorizontalBearingX: 3.359375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 465 + m_Y: 128 + m_Width: 34 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 348 + m_Metrics: + m_Width: 32.765625 + m_Height: 13.15625 + m_HorizontalBearingX: 3.4375 + m_HorizontalBearingY: 26.6875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 175 + m_Y: 437 + m_Width: 34 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 349 + m_Metrics: + m_Width: 7.3125 + m_Height: 18.1875 + m_HorizontalBearingX: 3.53125 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 14.375 + m_GlyphRect: + m_X: 446 + m_Y: 171 + m_Width: 8 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 350 + m_Metrics: + m_Width: 20.3125 + m_Height: 18.1875 + m_HorizontalBearingX: 3.53125 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 26.890625 + m_GlyphRect: + m_X: 248 + m_Y: 428 + m_Width: 21 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 351 + m_Metrics: + m_Width: 46.515625 + m_Height: 50.25 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 49.203125 + m_GlyphRect: + m_X: 216 + m_Y: 99 + m_Width: 47 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 352 + m_Metrics: + m_Width: 51.609375 + m_Height: 55.171875 + m_HorizontalBearingX: 3.09375 + m_HorizontalBearingY: 46.984375 + m_HorizontalAdvance: 57.359375 + m_GlyphRect: + m_X: 153 + m_Y: 52 + m_Width: 52 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 362 + m_Metrics: + m_Width: 34.46875 + m_Height: 63.578125 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 56 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 33 + m_Y: 313 + m_Width: 35 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 370 + m_Metrics: + m_Width: 37.40625 + m_Height: 49.15625 + m_HorizontalBearingX: 1.046875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 56 + m_Y: 191 + m_Width: 38 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 399 + m_Metrics: + m_Width: 36.03125 + m_Height: 50.25 + m_HorizontalBearingX: 1.703125 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 105 + m_Y: 191 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 400 + m_Metrics: + m_Width: 30.734375 + m_Height: 49.234375 + m_HorizontalBearingX: 4.453125 + m_HorizontalBearingY: 49.234375 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 353 + m_Y: 454 + m_Width: 32 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 401 + m_Metrics: + m_Width: 33.734375 + m_Height: 49.703125 + m_HorizontalBearingX: 2.578125 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 333 + m_Y: 346 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34 + m_Height: 50.25 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 218 + m_Y: 304 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 403 + m_Metrics: + m_Width: 37.4375 + m_Height: 49.203125 + m_HorizontalBearingX: 0.265625 + m_HorizontalBearingY: 49.203125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 6 + m_Y: 252 + m_Width: 38 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 404 + m_Metrics: + m_Width: 32.71875 + m_Height: 49.703125 + m_HorizontalBearingX: 2.953125 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 236 + m_Y: 222 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 405 + m_Metrics: + m_Width: 33.96875 + m_Height: 49.15625 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 345 + m_Y: 284 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 406 + m_Metrics: + m_Width: 33.109375 + m_Height: 49.703125 + m_HorizontalBearingX: 2.828125 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 360 + m_Y: 222 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 435 + m_Metrics: + m_Width: 33.15625 + m_Height: 34.15625 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 39.875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 327 + m_Y: 408 + m_Width: 34 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 439 + m_Metrics: + m_Width: 30.125 + m_Height: 18.21875 + m_HorizontalBearingX: 4.65625 + m_HorizontalBearingY: 31.953125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 465 + m_Y: 166 + m_Width: 31 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 442 + m_Metrics: + m_Width: 26.953125 + m_Height: 31.515625 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 38.65625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 426 + m_Y: 128 + m_Width: 28 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 443 + m_Metrics: + m_Width: 26.96875 + m_Height: 31.515625 + m_HorizontalBearingX: 7.34375 + m_HorizontalBearingY: 38.65625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 372 + m_Y: 407 + m_Width: 28 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 8.390625 + m_Height: 50.53125 + m_HorizontalBearingX: 4.25 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 16.890625 + m_GlyphRect: + m_X: 286 + m_Y: 454 + m_Width: 9 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 34.34375 + m_Height: 49.703125 + m_HorizontalBearingX: 2.859375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 175 + m_Y: 375 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.125 + m_Height: 50.25 + m_HorizontalBearingX: 2.65625 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 222 + m_Y: 366 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 50.484375 + m_Height: 50.28125 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 55.71875 + m_GlyphRect: + m_X: 6 + m_Y: 67 + m_Width: 52 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 34.890625 + m_Height: 34.84375 + m_HorizontalBearingX: 2.953125 + m_HorizontalBearingY: 34.84375 + m_HorizontalAdvance: 40.796875 + m_GlyphRect: + m_X: 280 + m_Y: 408 + m_Width: 36 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -7946609771462161899} + m_AtlasTextureIndex: 0 + m_IsMultiAtlasTexturesEnabled: 0 + m_ClearDynamicDataOnBuild: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 82 + m_Height: 61 + - m_X: 82 + m_Y: 0 + m_Width: 65 + m_Height: 61 + - m_X: 147 + m_Y: 0 + m_Width: 65 + m_Height: 46 + - m_X: 212 + m_Y: 0 + m_Width: 64 + m_Height: 71 + - m_X: 147 + m_Y: 46 + m_Width: 63 + m_Height: 67 + - m_X: 0 + m_Y: 61 + m_Width: 63 + m_Height: 62 + - m_X: 63 + m_Y: 61 + m_Width: 62 + m_Height: 62 + - m_X: 125 + m_Y: 61 + m_Width: 22 + m_Height: 62 + - m_X: 276 + m_Y: 0 + m_Width: 61 + m_Height: 47 + - m_X: 337 + m_Y: 0 + m_Width: 60 + m_Height: 61 + - m_X: 276 + m_Y: 47 + m_Width: 60 + m_Height: 61 + - m_X: 210 + m_Y: 71 + m_Width: 59 + m_Height: 22 + - m_X: 210 + m_Y: 93 + m_Width: 58 + m_Height: 62 + - m_X: 147 + m_Y: 113 + m_Width: 57 + m_Height: 61 + - m_X: 397 + m_Y: 0 + m_Width: 57 + m_Height: 61 + - m_X: 454 + m_Y: 0 + m_Width: 56 + m_Height: 61 + - m_X: 0 + m_Y: 123 + m_Width: 55 + m_Height: 62 + - m_X: 55 + m_Y: 123 + m_Width: 54 + m_Height: 62 + - m_X: 109 + m_Y: 123 + m_Width: 38 + m_Height: 62 + - m_X: 336 + m_Y: 61 + m_Width: 54 + m_Height: 61 + - m_X: 268 + m_Y: 108 + m_Width: 53 + m_Height: 62 + - m_X: 204 + m_Y: 155 + m_Width: 53 + m_Height: 61 + - m_X: 147 + m_Y: 174 + m_Width: 53 + m_Height: 61 + - m_X: 390 + m_Y: 61 + m_Width: 50 + m_Height: 61 + - m_X: 440 + m_Y: 61 + m_Width: 50 + m_Height: 61 + - m_X: 490 + m_Y: 61 + m_Width: 21 + m_Height: 61 + - m_X: 0 + m_Y: 185 + m_Width: 50 + m_Height: 61 + - m_X: 50 + m_Y: 185 + m_Width: 49 + m_Height: 61 + - m_X: 99 + m_Y: 185 + m_Width: 48 + m_Height: 62 + - m_X: 0 + m_Y: 246 + m_Width: 49 + m_Height: 61 + - m_X: 49 + m_Y: 246 + m_Width: 48 + m_Height: 61 + - m_X: 0 + m_Y: 307 + m_Width: 27 + m_Height: 76 + - m_X: 0 + m_Y: 383 + m_Width: 26 + m_Height: 76 + - m_X: 0 + m_Y: 459 + m_Width: 46 + m_Height: 48 + - m_X: 26 + m_Y: 383 + m_Width: 19 + m_Height: 76 + - m_X: 27 + m_Y: 307 + m_Width: 46 + m_Height: 75 + - m_X: 45 + m_Y: 382 + m_Width: 29 + m_Height: 75 + - m_X: 73 + m_Y: 307 + m_Width: 29 + m_Height: 75 + - m_X: 97 + m_Y: 247 + m_Width: 45 + m_Height: 60 + - m_X: 46 + m_Y: 457 + m_Width: 44 + m_Height: 48 + - m_X: 74 + m_Y: 382 + m_Width: 29 + m_Height: 75 + - m_X: 102 + m_Y: 307 + m_Width: 26 + m_Height: 75 + - m_X: 90 + m_Y: 457 + m_Width: 41 + m_Height: 48 + - m_X: 103 + m_Y: 382 + m_Width: 26 + m_Height: 75 + - m_X: 128 + m_Y: 307 + m_Width: 40 + m_Height: 66 + - m_X: 142 + m_Y: 247 + m_Width: 44 + m_Height: 59 + - m_X: 129 + m_Y: 373 + m_Width: 40 + m_Height: 66 + - m_X: 129 + m_Y: 439 + m_Width: 39 + m_Height: 17 + - m_X: 131 + m_Y: 456 + m_Width: 23 + m_Height: 55 + - m_X: 168 + m_Y: 306 + m_Width: 44 + m_Height: 63 + - m_X: 154 + m_Y: 456 + m_Width: 41 + m_Height: 48 + - m_X: 186 + m_Y: 235 + m_Width: 44 + m_Height: 63 + - m_X: 200 + m_Y: 216 + m_Width: 30 + m_Height: 19 + - m_X: 169 + m_Y: 369 + m_Width: 47 + m_Height: 62 + - m_X: 169 + m_Y: 431 + m_Width: 45 + m_Height: 25 + - m_X: 195 + m_Y: 456 + m_Width: 38 + m_Height: 48 + - m_X: 214 + m_Y: 431 + m_Width: 28 + m_Height: 22 + - m_X: 233 + m_Y: 453 + m_Width: 47 + m_Height: 58 + - m_X: 212 + m_Y: 298 + m_Width: 46 + m_Height: 62 + - m_X: 216 + m_Y: 360 + m_Width: 46 + m_Height: 62 + - m_X: 242 + m_Y: 422 + m_Width: 32 + m_Height: 31 + - m_X: 230 + m_Y: 216 + m_Width: 45 + m_Height: 62 + - m_X: 257 + m_Y: 170 + m_Width: 47 + m_Height: 46 + - m_X: 258 + m_Y: 278 + m_Width: 45 + m_Height: 62 + - m_X: 275 + m_Y: 216 + m_Width: 44 + m_Height: 62 + - m_X: 304 + m_Y: 170 + m_Width: 47 + m_Height: 46 + - m_X: 321 + m_Y: 122 + m_Width: 43 + m_Height: 47 + - m_X: 262 + m_Y: 340 + m_Width: 42 + m_Height: 62 + - m_X: 303 + m_Y: 278 + m_Width: 36 + m_Height: 62 + - m_X: 319 + m_Y: 216 + m_Width: 35 + m_Height: 62 + - m_X: 351 + m_Y: 169 + m_Width: 42 + m_Height: 47 + - m_X: 364 + m_Y: 122 + m_Width: 33 + m_Height: 47 + - m_X: 274 + m_Y: 402 + m_Width: 47 + m_Height: 46 + - m_X: 304 + m_Y: 340 + m_Width: 23 + m_Height: 62 + - m_X: 280 + m_Y: 448 + m_Width: 20 + m_Height: 62 + - m_X: 300 + m_Y: 448 + m_Width: 47 + m_Height: 61 + - m_X: 321 + m_Y: 402 + m_Width: 45 + m_Height: 46 + - m_X: 327 + m_Y: 340 + m_Width: 46 + m_Height: 61 + - m_X: 339 + m_Y: 278 + m_Width: 46 + m_Height: 61 + - m_X: 354 + m_Y: 216 + m_Width: 45 + m_Height: 61 + - m_X: 393 + m_Y: 169 + m_Width: 40 + m_Height: 46 + - m_X: 397 + m_Y: 122 + m_Width: 23 + m_Height: 46 + - m_X: 347 + m_Y: 448 + m_Width: 43 + m_Height: 61 + - m_X: 420 + m_Y: 122 + m_Width: 39 + m_Height: 43 + - m_X: 366 + m_Y: 401 + m_Width: 39 + m_Height: 43 + - m_X: 373 + m_Y: 339 + m_Width: 43 + m_Height: 61 + - m_X: 385 + m_Y: 277 + m_Width: 43 + m_Height: 61 + - m_X: 399 + m_Y: 215 + m_Width: 41 + m_Height: 61 + - m_X: 459 + m_Y: 122 + m_Width: 45 + m_Height: 38 + - m_X: 390 + m_Y: 444 + m_Width: 44 + m_Height: 59 + - m_X: 405 + m_Y: 400 + m_Width: 34 + m_Height: 35 + - m_X: 416 + m_Y: 338 + m_Width: 35 + m_Height: 58 + - m_X: 459 + m_Y: 160 + m_Width: 42 + m_Height: 30 + - m_X: 440 + m_Y: 165 + m_Width: 19 + m_Height: 31 + - m_X: 459 + m_Y: 190 + m_Width: 23 + m_Height: 22 + - m_X: 482 + m_Y: 190 + m_Width: 22 + m_Height: 31 + m_FreeGlyphRects: + - m_X: 210 + m_Y: 46 + m_Width: 2 + m_Height: 25 + - m_X: 336 + m_Y: 47 + m_Width: 1 + m_Height: 14 + - m_X: 269 + m_Y: 71 + m_Width: 7 + m_Height: 37 + - m_X: 268 + m_Y: 93 + m_Width: 8 + m_Height: 15 + - m_X: 204 + m_Y: 113 + m_Width: 6 + m_Height: 42 + - m_X: 510 + m_Y: 0 + m_Width: 1 + m_Height: 61 + - m_X: 27 + m_Y: 382 + m_Width: 18 + m_Height: 1 + - m_X: 97 + m_Y: 246 + m_Width: 2 + m_Height: 1 + - m_X: 45 + m_Y: 457 + m_Width: 1 + m_Height: 2 + - m_X: 128 + m_Y: 373 + m_Width: 1 + m_Height: 9 + - m_X: 0 + m_Y: 507 + m_Width: 131 + m_Height: 4 + - m_X: 46 + m_Y: 505 + m_Width: 85 + m_Height: 6 + - m_X: 129 + m_Y: 456 + m_Width: 2 + m_Height: 1 + - m_X: 142 + m_Y: 306 + m_Width: 26 + m_Height: 1 + - m_X: 147 + m_Y: 235 + m_Width: 39 + m_Height: 12 + - m_X: 200 + m_Y: 174 + m_Width: 4 + m_Height: 42 + - m_X: 168 + m_Y: 369 + m_Width: 1 + m_Height: 4 + - m_X: 168 + m_Y: 439 + m_Width: 1 + m_Height: 17 + - m_X: 154 + m_Y: 504 + m_Width: 79 + m_Height: 7 + - m_X: 214 + m_Y: 453 + m_Width: 19 + m_Height: 3 + - m_X: 186 + m_Y: 298 + m_Width: 26 + m_Height: 8 + - m_X: 212 + m_Y: 360 + m_Width: 4 + m_Height: 9 + - m_X: 216 + m_Y: 422 + m_Width: 26 + m_Height: 9 + - m_X: 257 + m_Y: 155 + m_Width: 11 + m_Height: 15 + - m_X: 230 + m_Y: 278 + m_Width: 28 + m_Height: 20 + - m_X: 321 + m_Y: 108 + m_Width: 15 + m_Height: 14 + - m_X: 258 + m_Y: 340 + m_Width: 4 + m_Height: 20 + - m_X: 321 + m_Y: 169 + m_Width: 30 + m_Height: 1 + - m_X: 262 + m_Y: 402 + m_Width: 12 + m_Height: 20 + - m_X: 274 + m_Y: 448 + m_Width: 6 + m_Height: 5 + - m_X: 280 + m_Y: 510 + m_Width: 231 + m_Height: 1 + - m_X: 300 + m_Y: 509 + m_Width: 211 + m_Height: 2 + - m_X: 327 + m_Y: 401 + m_Width: 39 + m_Height: 1 + - m_X: 339 + m_Y: 339 + m_Width: 34 + m_Height: 1 + - m_X: 354 + m_Y: 277 + m_Width: 31 + m_Height: 1 + - m_X: 393 + m_Y: 215 + m_Width: 6 + m_Height: 1 + - m_X: 399 + m_Y: 276 + m_Width: 112 + m_Height: 1 + - m_X: 504 + m_Y: 122 + m_Width: 7 + m_Height: 389 + - m_X: 366 + m_Y: 444 + m_Width: 24 + m_Height: 4 + - m_X: 390 + m_Y: 503 + m_Width: 121 + m_Height: 8 + - m_X: 373 + m_Y: 400 + m_Width: 32 + m_Height: 1 + - m_X: 405 + m_Y: 435 + m_Width: 106 + m_Height: 9 + - m_X: 434 + m_Y: 435 + m_Width: 77 + m_Height: 76 + - m_X: 385 + m_Y: 338 + m_Width: 31 + m_Height: 1 + - m_X: 416 + m_Y: 396 + m_Width: 95 + m_Height: 4 + - m_X: 428 + m_Y: 276 + m_Width: 83 + m_Height: 62 + - m_X: 439 + m_Y: 396 + m_Width: 72 + m_Height: 115 + - m_X: 397 + m_Y: 168 + m_Width: 43 + m_Height: 1 + - m_X: 420 + m_Y: 165 + m_Width: 20 + m_Height: 4 + - m_X: 433 + m_Y: 165 + m_Width: 7 + m_Height: 50 + - m_X: 433 + m_Y: 196 + m_Width: 26 + m_Height: 19 + - m_X: 440 + m_Y: 196 + m_Width: 19 + m_Height: 142 + - m_X: 451 + m_Y: 196 + m_Width: 8 + m_Height: 315 + - m_X: 501 + m_Y: 160 + m_Width: 10 + m_Height: 30 + - m_X: 433 + m_Y: 212 + m_Width: 49 + m_Height: 3 + - m_X: 440 + m_Y: 221 + m_Width: 71 + m_Height: 117 + - m_X: 440 + m_Y: 212 + m_Width: 42 + m_Height: 126 + - m_X: 451 + m_Y: 221 + m_Width: 60 + m_Height: 290 + - m_X: 451 + m_Y: 212 + m_Width: 31 + m_Height: 299 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: ae4e4b833eb9f63448b39edf3f03e309 + pointSizeSamplingMode: 0 + pointSize: 68 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Bold SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Bold SDF.asset.meta new file mode 100644 index 0000000..318c00c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Bold SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 693430919429cff4d9e10f1225ca56c8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BoldItalic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BoldItalic SDF.asset new file mode 100644 index 0000000..85a1077 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BoldItalic SDF.asset @@ -0,0 +1,2706 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &-7448725028759579491 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-BoldItalic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -3440903133896555034} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!28 &-3440903133896555034 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-BoldItalic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e10202020202020201e0b09020000000000000000000000000000010a1012202020202020201e0b08020000000000000000000000000000000000000000000000000000090f112020202020202015120c0300000000000000000000000000000000000000000000000000000006101618202020202020200d0b05000000000000000000000000050f1517202020202020201916100600000000040d1315202020202020201b19130900000000020b1113202020202020201e1c150c000000000000000000000000000001080b1f20202020201f14120c0300000000000000040e14162020202020201f0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0d0e0e0e0d0c0a040000000000000000000000000000000000000000000000000000000000000000060c0e1314110b0902000000000000000000050b0d1314120c0a03000000000000000000040a0c1214120d0b0500000000000000000000090f11202020202020202016140e0400000000000000000000000000000913191b20202020202020200e0c0600000000000000000000000000090f1120202020202020202020202020202020201f1e1d1b18140f0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23253535353535353534201d150a00000000000000000000000005131e25273535353535353533201d1509000000000000000000000000000000000000000000000004121d2427353535353535352a27201507000000000000000000000000000000000000000000000000000a18232b2e353535353535353520180d000000000000000000000917222a2c353535353535352e2b23180a0000071521282b35353535353535312e261b0d000006131e2628353535353535353330291e1000000000000000000000000009151d203535353535353429272014070000000000081621292b35353535353534211f170c0000000000000000000000000000000000000000000000000000000000000000000000030a0c1116161e212223242322211f171915110c0903000000000000000000000000000000000000000000000000050f1a2123282926211e160a000000000000030e192022282927211e170b000000000000010c181f22272927221f180d0100000000000004121d242735353535353535352b292116080000000000000000000000000c1a262e3135353535353535352320190e0000000000000000000004121d24273535353535353535353535353535353535353433302d2a25201d150b08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e373b4a4a4a4a4a4a4a493632281a0a0000000000000000000001132330393d4a4a4a4a4a4a4a48363127190900000000000000000000000000000000000000000000122230393c4a4a4a4a4a4a4a3f3c322515030000000000000000000000000000000000000000000000061828353f434a4a4a4a4a4a4a4a342b1d0d0000000000000000051727343e424a4a4a4a4a4a4a433f36281806041525333c404a4a4a4a4a4a4a4642382b1b09021324313a3e4a4a4a4a4a4a4a48453b2e1e000000000000000000000009192731354a4a4a4a4a4a4a3f3b32251400000000001626333d404a4a4a4a4a4a4a3733291c0c0000000000000000000000000000000000000000000000000000000000000000080b161e21272b28323637383938383633292f2b26211e160b090200000000000000000000000000000000000000000d181f2c36393e3e3b3632281a12040000000b161e2b35383d3f3c3633291b140600000009141d2a34373d3f3d37342a1d15090000000000122230393c4a4a4a4a4a4a4a4a413d3426160400000000000000000000091a2b3842464a4a4a4a4a4a4a4a38352c1e0e000000000000000000122230393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494845423f3a353127201d15090300000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b50606060606060605e4b45382815020000000000000000000a1e30414d52606060606060605e4b44372715020000000000000000000000000000000000000000091d30404c5160606060606060544f4332200c0000000000000000000000000000000000000000000000102335465358606060606060605e483b2b1805000000000000000f2234455257606060606060605853463623100d2133435055606060606060605b56493826130b1e31424e53606060606060605e584c3b1a0a00000000000000000001152737445b5f60606060605f544f43321f0e0000000818334451565f60606060605f4c473a291704000000000000000000000000000000000000000000000000000000000009111c232932363c4138454b4d4e4e4e4d4c463a44403b363228211e160a0700000000000000000000000000000000000d1d2a343d494e5354514b453830221204000b1b28323c484d5254514c46393224140700091926313a474c5254524c473b31271909000000091d30404c51606060606060606056514434210e0000000000000000000013263849555b60606060606060605e493c2c190600000000000000091d30404c5160606060606060606060606060606060605f5e5d5b58544f4b44373631271e160b0000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d657575757575757573605645321d090000000000000000001025394d5f677575757575757573605544311d0800000000000000000000000000000000000000000f24394c5e66757575757575756a614f3c27120000000000000000000000000000000000000000000001162b3f53646d7575757575757570594834200b00000000000000152a3e52636c757575757575756e64533f2b1613283c50626a75757575757575706756422e0a11263a4e606875757575757575736a58382715020000000000000000081d3144556d7475757575757469614f3d2c1a06000114263651626b75757575757574615847331f0800000000000000000000000000000000000000000000000000000005111c232f3839464b51565a5660626363636261585c5955514b4639363228211a0f0600000000000000000000000000000b1b2a3b484c5b6368696660564d4030221208182839464b5a6268696761574f4232251401142637444b596167696762594b443727150100000f24394c5e6675757575757575756b62513d291400000000000000000004192e425567707575757575757575705a4935200c000000000000000f24394c5e667575757575757575757575757575757575747372706d69646055514b443732281c13080000000000000000000000000000000000000000000000000000000000000000000000000010253b50657b8a8a8a8a8a8a8a8974604b36200f00000000000000000012273d52677d8a8a8a8a8a8a8a8874604b36200f000000000000000000000000000000000000000011273c51667c8a8a8a8a8a8a8a7f6a543f2a150000000000000000000004080806000000000000000003182e43586d828a8a8a8a8a8a8a77624d37220d00000000000000172c42576c818a8a8a8a8a8a8a826e58432e19152b40556a808a8a8a8a8a8a8a85705b38281613283e53687e8a8a8a8a8a8a8a88735645311d0900000000000000000b20354b60748b8a8a8a8a8a897f695b4935210a00081c3043546b808b8a8a8a8a8a8a76614c36251300000000000000000000000000000000000000000000000000000d181f2f383f4c505761666b70737677787978777674726e6a666157524b4538362d20190e040000000000000000000000031629394859626f797d7e7b75665e4d402f191325364657616d787d7e7c7669604f43321d0d1d314455606a777c7e7c776b605544311d10000011273c51667c8a8a8a8a8a8a8a8a806b56412b16010000000000000000061b31465b70858a8a8a8a8a8a8a8a78634d38230e0000000000000011273c51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898885827f7a756e6660554b46393025180e00000000000000000000000000000000000000000000000000000000000000000000000014293e53697e939f9f9f9f9fa7927d67523d2d1a070000000000000000162b40556b80959f9f9f9f9fa6917c67513d2c1a06000000000000000000000000000000000000000f24394e64798e9f9f9f9f9f97816c57422c1702000000000000070d0f191d1d1b140b08010000000000162b40556b80959f9f9f9f9f8f7a654f3a251000000000000000142a3f54697f949f9f9f9f9f9b85705b37271513283d53687d929f9f9f9f9f9d88735645321e11263b50667b909f9f9f9f9f9f8a75604b36200b00000000000000000e23394e63788ea99f9f9fa89f8c79634e392816030b20354b6074899eab9f9f9fa9947e695443301c07000000000000000000000000000000000000000000000003111d2a34404c505d656e767c8085888a8c8d8e8d8d8b898784807b766f6760564e4a3d352c1f170c000000000000000000000a1e3246576277848e939390887c665e4c37271c3043546175828b929491897e69614f3b2b1a2d3d4b6073808a9294928a8073604b3e2e1b08000f24394e64798e9f9f9f9f9f9f98836e59432e1900000000000000000003192e43586e83989f9f9f9f9f9f907a65503b2510000000000000000f24394e64798e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9a97948f89837c746961574a43362c1e120400000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acb5b5b5c5b09a85705b4a36210b0000000000000002152737596e8399aeb5b5b5c4af9a846f5b4935210a000000000000000000000000000000000000000c21374c61768ca8b9b5b5ae99846f59442f1a000000000002101b22242f32323029201d14090000000013283e53687d93a8b5b5b5a7927c67523d27120000000000000012273c52677c91a7b5b5b5b29d88735544311d10263b50657b90a5b5b5b5b59f8a76604b36210e23394e63788ea3c5b5b5bcab8d78634d38230e000000000000000012273c51677c91a6b5b5b5baaa96816c5745321e090e23384d63788da8b9b5b5b5b29c8773604a35200d000000000000000000000000000000000000000000000513212f3b474c5e66717b838a91969a9d9faba3a3a3a2a89f9c9995908a847d756c635b4d493c332a1c0c0000000000000000000c21364b61758699a1a8a9a69d8d7c6655443120354a607284979faba9a89e937f6959483421364a5c6c81959fa9a9a99f95816d5c4b37220d000c21374c61768ca8b9b5b5b5b09b86705b39281603000000000000000001162b41566b8096abb5b5b5b5a8927d68533d2813000000000000000c21374c61768ca8b9b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b3b2b0ada9a89e9891887f75686054493c3022140600000000000000000000000000000000000000000000000000000000000000000417293a5a6f859aafc4cacac8b4a28e79634e39291603000000000000081d31445571879cb1c6cacac8b4a28d78634e382816030000000000000000000000000000000000000a1f33475874899eb4c9c6b19c86715c3a2917040000000010202d3639444748463e353126190900000010263b50657b90a5c9dabfaa947f6a553f2a15000000000000000f253a4f647a8fa4c7d7cab49f8a75604b36200e23384d63788dabbccfcfbcab8d78634d38230e21364b61768ba7b8ccdac9a5907a65503b25100000000000000000152b40556a8095aabfcad7c8b39e8975604b36211011263c51667b91a6c6d6cacab6a4907b65503b2b19050000000000000000000000000000000000000000051323303f4b59626e7b8690989fa9abafb3b5bcb8b7b7c6bab4b1aeaaa99f9a928981796e635a4c473a2a17040000000000000000152a40556a7f95a4b3bfc4b7ab9d8874604b36273c52677c91a2b4bcc6b9b39f8a77624c3724394e64798c9fb4bac7bab49f8f7a644f3a250f000a1f33475874899eb4c9cac8b39e88735745321e0900000000000000000013293e53687e93a8bdcacabfaa95806a55402b15000000000000000a1f33475874899eb4c9cacacacacacacacacacacad8cec9c8c7c5c2c6b9b4aea69d94887d72635a4c4032251507000000000000000000000000000000000000000000000000000000000000000a1f33475873889db3c8dde4d1c0ac97816c5746321e0a0000000000000b20364b60758a9fb4c9dfe3d0c0ab96816b5645321e0900000000000000000000000000000000000004172a3a5c71869cb1c6c9b49e89745847331f0a0000000d1d2d3e4a4f595d5d5b544b443726140100000e23384e63788dabbccfc1ac97826c57422d17000000000000000d22374c62778ca9bacdcfbcab8d78624d38230d20364b60758a9fb5cadac9a5907a65503b25101e32465773899eb3c8d2bda7927d68523d28130000000000000002152738596e8398aec3d8e0ccb9a7927d68533e2d1b152a3f546a7f94a9bfd4e6d3c3ae99836e59483420090000000000000000000000000000000000000002132330414d5d657783909ba3aeb4bab5b0aba7a4a2a1a1a2a3a5a7aaaeb2b4afa79e968e83786c615847331f0a00000000000000001c31475c71869cb1c2d0d5c9b7a68f7a65503a2e43586e8398adc0cfd6ccbaa9937d68533e2b40556a8095abbccdd7cebdab96816c56412c170004172a3a5c71869cb1c6dbcbb8a68b76604b36210b00000000000000000011263b50667b90a5bbd0d7c2ad98826d58432d180000000000000004172a3a5c71869cb1c6dbdfd8cbc1beb5b5b5b5b5b5b5b5b6b7babec3c9c9c4b7b3a79e928578665e4f43332515060000000000000000000000000000000000000000000000000000000000000c21374c61768ca6b8cbe0efdec9b49e8976614b3621100000000000000e23394e63788eaabbcee2eedec8b39e8975604b362110000000000000000000000000000000000000001a2f44596f8499aec4ccb9a88c76614c37210c000005182b3b4a5c646e72727069605544311d1300000b20364b60758a9fb5cac4af9a846f5a362513000000000000000b20354a60758a9fb4c9d9c9a58f7a65503a25101d32455673889db3c8d2bda7927d68523d28131628395c71869bb1c6d4bfaa957f6a55402a1500000000000000091d31455672879cb1c7dcded6c5b09b86715c4a3622132536586d8298adc2d7dcdacab49f8b78624d37271502000000000000000000000000000000000000102030414d5f677b8899a1b1b5b7b2ab9f9b96928f8d8c8c8d8d8f9195989da5a8afb3aca0988b8176614c37210c00000000000000001e34495e73899eb3c8dee7d4c4a7927d67523d30465b70859bb0c5dae8d7c7aa95806b55402d42576d8297acc9daead8c3ae99836e59442e1900001a2f44596f8499aec4d9d5c4a38d78634e38230e0000000000000000000e23394e63788ea3c4d5dac5af9a85705a37261401000000000000001a2f44596f8499aec4d9ddcbbaada8a0a0a0a0a0a0a0a0a1a2a5a9aeb4bac7cbc5b8b3a29a897c6961504333241404000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c4d5e7f5e1ccb9a8937e68533e2e1b08000000000012273c51677c91a6c8d8eaf5e0ccb8a7927d68523e2d1b07000000000000000000000000000000000002172c41576c8196acc1d6c6a38e79644e39240f00000b20344859647a848787857e73604b41311c0c00091d32455673889db3c8c7b19c87725443301c07000000000000071c30435472879cb2c7d2bca7927d67523d28121528385b70869bb0c5d4bfaa957f6a55402a15192f44596e8499aec3d7c2ac97826d57422d18020000000000000b20364b60758a9fb4cacdc9c6c9b5a38f7a644f3a291c30435471869bb0c6d1c8c5c8bbaa95806a5544311d0800000000000000000000000000000000000c1c2e3f4d5f677d8c9da6b3bab4a69d948c85817c7a78777777787a7c7f83888d939a9fabb4a99f947f6a543f2a1500000000000000001d32475d72879cb2c5d5dacdb9a8907b66513b2f44596f8499aec3d3dacebea9947e69543f2b41566b8096abc0d1dad1c1ac97816c57422d170002172c41576c8196acc1d6d0bba5907b66503b26110000000000000000000b21364b60768ba6b8cbddc7b29d88725544311d0800000000000002172c41576c8196acc1d6d5c1ad9c938b8b8b8b8b8b8b8b8b8d9093999fa9b3b8c5ccc0b4a79e917f6a615042312211000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdd2e8f8e8d6c6b19b86715c4b37220c0000000000152a40556a7f95aabfd4eaf2e8d6c5b09b85705c4a36220b000000000000000000000000000000000000142a3f54697f94a9bed0bba6917b66513c261100001325364d62778a999c9d9b93826e5f4e3a291704021528385b70859bb0c5c9b49f8975604a35200b000000000000001325365a6f859aafc4d4bfaa947f6a553f2a15192e43596e8398aec3d7c2ac97826d57422d18172c41576c8196acc1d6c4af9a846f5a452f1a000000000000000e24394e63798eaabbc6b9b4b0b5c1ad97826d58473320354a6074899eb4c9c0b4b0b4c0b39d8874604b36200f000000000000000000000000000000000417293a4b5d677d8d9faab8b5a89f94887f77706b6764636262626365676a6e72787e858c979faaa68f7a644f3a250f0000000000000000172c42576c8197a7b8c4c9bcb49e8a76614b36293e53697e93a5b6c2c4beb1a08e79634e39263b50657b90a2b4c0c4c0b4a3917c66513c27110000142a3f54697f94a9bed4d2bda8937d68533e2813000000000000000000091e32455673889eb3c8ddcab49f8a75604b35200b00000000000000142a3f54697f94a9bed4d3bea8937e757676767676767676777a7e848a949ea7b1bdcdc5b9b39d947f6a604e402f1d0d00000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6ebe5dedbc9b5a38f7a644f3a2a170400000001142636586e8398adc3d8dfdcdfddc8b4a38e79644e39291703000000000000000000000000000000000012273c51677c91a6bcd1bea8937e69533e291400071c3043546b8095a8b2b2b0a0927d685846331f1000192e43586e8398adc3cdbaa98c77624c37220d00000000000000182d42576d8297acc2d7c2ac97826d57422d18162c41566b8196abc0d6c4af9a846f5a452f1a142a3f54697f94a9bed4c7b19c87725c3a2a170400000000000012273d52677c92a7c8b9a89e9ba3b5b49f8a76614c3723384d62788da8b9c8b4a29aa2b4b7a6917c67523d2c1a060000000000000000000000000000000a1f334658647b8b9fabbbb4a49c8a7f756a625956524f4d4c4c4d4e505255595a62687078818b97998874604b36200b00000000000000000d22384d6278899da6aeafab9f947f6a57463221364b6075879ca4aeafaca097826d5b493623384c5d6f849aa2adafada29b8574604a35200b000012273c51677c91a6bcd1d5c0ab95806b56402b16010000000000000000031628385b70869bb0c5dbcebbaa8d77624d38220d0000000000000012273c51677c91a6bcd1d5c0ab95806b60606060606060616265696e767f88979fb4bac7ccbbae9d937e685e4c3b2a18050000000000000000000000000000000000000000000000000000031729395a6f849aafc4d9e0d2c9c6c9c1ad97826d5847331f0a000000081c30435471869bb1c6d3cac7cad3d1c1ac97826c5746331e0a00000000000000000000000000000000000f243a4f64798fa4c6d7c0ab96816b56412c16010b20354a6073879db2c6c7beb39e8876614c3e2d1808162b40566b8095abc0d7c7a48f79644f3a240f00000000000000152a40556a7f95aabfd4c4af9a846f5a452f1a14293e53697e93a8bed3c7b19c87725c3a2a1812273c52677c91a7bcd1c9b49f89745847331f0a000000000000162b40556b8095aac0b49e8a869bb0baa9937e69543f2f3b51667b90a6c6c7b09a859ab0c4af9a85705b4936210b0000000000000000000000000000071b2e3e4c6176889da9bab4a29a86796a60564d483b3d3a38373738383a3c403c484d535b636c7881837b645544311d0800000000000000000b2035485a657b8893999a968c8072604a39291e32455763788692989a97908274604b3d2c1c2f3f4c61768491989a98918577615443301c0700000f243a4f64798fa4c6d7d8c2ad98836d58432e1800000000000000000000192e43596e8398aec3d8d9c8a58f7a65503a2510000000000000000f243a4f64798fa4c6d7d8c2ad98836d584b4b4b4b4b4b4c4d50545861697681929fa9bac7cbbcb49f8c7c665947341f1200000000000000000000000000000000000000000000000000000a1e33465773889db2c8ddd2c2b5b1b5c2b49f8a76614c3721110000000b20354b6075899fb4c9c3b6b2b6c3d3c9b49e8a76614c36211000000000000000000000000000000000000c22374c61778ca8bacdc3ae98836e59432e19021528384f657a8fa5b7cadccbb8a697816c5c4a36251313293e53687e93a8bdd1bca7917c67523c27120000000000000013283d52687d92a7bdd2c7b19c87725c3a2a1811263c51667b91a6bbd0c9b49f89745947341f0f253a4f647a8fa4c7d8cdbaa88c76614c37210c000000000003162838596e8499aec3b39d887e93a9bab19c87725d4b373f54697f94a9bebaa9927c92a8b9b4a28e79634e39281603000000000000000000000000000d22374b5c6d8298a6b7b5a49a8476635b4b4538342b2725232222222325272a2b35383d494e5b636c6e645d4b37271502000000000000000005192b3c4b5d65767e8484817a6b605443301b162839495a63747d8385827b6e605645321f111f33475861727c8285827c726159473625130000000c22374c61778ca8bacddac5b09b85705b38281502000000000000000001162b41566b8096abc0d5d2bca7927d67523d2812000000000000000c22374c61778ca8bacddac5b09b85705b38363636363636383b3a474c57616c7d8b9fa9bacecebbaa9e8877624c402f1909000000000000000000000000000000000000000000000000000c21364b61768ba6b7cbd7c6b5a39ba3b5baa9947e69543f2f1c0800000e23384d63788da9bacab6a59da5b6cacdb9a8937e69533f2e1b08000000000000000000000000000000000b1f34475974899fb4c9c5b09b86705b382816091d3245566c8297acc3d4e6d5c4b49f8c7a645443301c11263b50667b90a5bbd0bea9947f69543f2a140000000000000010253a50657a8fa5c9d9c9b49f89745947341f0f24394e64798ea3c6d6cdbaa98c77614c37220d22374d62778ca9baced7c6a38e79644e39240f0000000000091e32455672879cb2c7b29c87768a9fb4b6a4907b65503b42586d8297adc2b49f8a75899eb4c0ac96816c5746321e09000000000000000000000000071b2d3e4f647a8fa0b2b9a89c86756158493d32282e2e2b27211e170d0e101a21242b2f2c353c494d57594f4b3f2e1909000000000000000000000e1e2e3f4b5761696e6f6c645c4a433625130a1b2c3c495660686e6f6d655d4b4538281604172a3a475460666d6f6d676054473b2a18080000000b1f34475974899fb4c9ddc8b29d88735645321d0900000000000000000013293e53687e93a8bdd3d4bfaa957f6a55402a15000000000000000b1f34475974899fb4c9ddc8b29d8873564531212121212122252a3339464c5f677c8b9fb4bdcec8b8a699836e5e4c372715010000000000000000000000000000000000000000000000000f243a4f64798fa4c4d4cdbaa89b869bb1c7b19c87725d4b37230d000011263c51667b91a6c7c7b29d879db2c2d2c6b19c86715d4b37220c0000000000000000000000000000000004182a3b5c72879cb1c7c8b39e88735645321e0b20364b6075899eb3c9ded9d7cfbcab9b8572604a3a2a1723394e63788ea3c5d5c1ac97816c57422c17020000000000000d23384d62788dabbccfcdbaa98c77614c37220c21374c61768ca8b9ccd7c7a48e79644f39240f20354b60758a9fb4c9d1bba6917c66513c271100000000000b21364b60768a9fb4c6b09b86718398adc2ae98836e59483c5b70869bb0c5b29c87728398adc6b39e8975614b3621100000000000000000000000000d22364a5c70849aafbeb49e8a786257463a363d424443413c3633291f181d2d363940444543403b3842443a372e201000000000000000000000000010212e39464c54595a574f4a3e30251808000e1e2c38454b52595a57504b3f32281a0a000c1c2a36434a51585a58514a43362a1d0c0000000004182a3b5c72879cb1c7dccab59f8a75604b36200b00000000000000000011263b51667b90a6bbd0d7c2ac97826d57422d180000000000000004182a3b5c72879cb1c7dccab59f8a75604b36200b0b0b0c0d10171f2933414d5d677d929fb1c4d4c5b3a1917c665544311d0800000000000000000000000000000000000000000000000013283d52687d92a7bdd2c9b49f8a7f94abbcb6a4907b65503b2a180500152a3f546a7f94a9bfbfaa947f94a4b5c9c9b5a48f7a654f3a2a1804000000000000000000000000000000001a2f445a6f8499afc4cbb8a68b76604b3621172a3a51677c91a7b9cccec5c2c5c9b4a3927d685847331f21364b60768ba6b8cbc4ae99846f59442f1a000000000000000b20364b60758a9fb4cad7c7a48e79644f39240f1f33475874899eb4c9d1bba6917c66513c27111c30435472879db2c7d3bea9937e69543e291400000000000f24394f64798eabbcc5af9a85707b90a5b6b49f8b77624c485a74899eb4c4af99846f7c91a8b9b9a8937d68533f2e1b0800000000000000000000021527374f64798ea2b4b5a4937e685a4939464b5257595856514b4639342a313e4a4e56595a5955504b443733291c120000000000000000000000000002101b2933363e44454139362d1c13080000000e1a2731363d4345423b372f1e160a0000000c182530353c4345433c353025180c0000000000001a2f445a6f8499afc4d9cfbcab8d78634d38230e0000000000000000000e23394e63788ea3c5d5dac4af9a856f5a36261401000000000000001a2f445a6f8499afc4d9cfbcab8d78634d38230e0000000000040b171e303f4d5f6c8197a6b7cbd0bfb19c8674604b352010000000000000000000000000000000000000000000000001162b41566b8096abc0d5c8b29d88778c9fb5c2ae98836e5948341f0900182d43586d8298adc2c7a58f7b869cb1c6d2c2ad98826d5947341f0800000000000000000000000000000002172d42576c8297acc1d5c4a38d78634e38231f3347586e8399aec5cebdb1acb1bdc1b39e8976614c3e2e1e32455773889eb3c8c6b19c87715c3a2a1804000000000000081d31445573889db2c8d1bba6917c66513c271117293a5c71879cb1c6d3bea9937e69543e29141426365a70859aafc5d6c0ab96816b56412c16010000000012283d52677d92a7c9c3ae99846e73879db2bbaa957f6a554d62778da8b9c1ac97816c75899eb4c6b19b86715d4b37220c00000000000000000000081d3144556d8297adc0b19c8673604b404c5761676c6e6e6b6761574c473a444b5c646b6f6f6e6b6660554c473a301c1308000000000000000000000000000b171e21292f2f2c24221b100000000000000a151d20282e302d25231c1102000000000008131c20272d302e27201c130800000000000002172d42576c8297acc1d7dac9a5907b65503b26100000000000000000000b21364b60768ba7b8ccdcc7b29c87725443301c0800000000000002172d42576c8297acc1d7dac9a5907b65503b26100000000000000003132130414b6175889db3c4d4cab6a4927d67523f2e1b080000000000000000000000000000000000000000000003162838596f8499aec4d9c6b19c8671849aafc5b49f8b77624c37261405192b3c5b71869bb0c6baa98d788095aac2d2c9b49f8a77614c36251300000000000000000000000000000000152a3f546a7f94a9bfd0baa5907b65503b2621374c61768a9fb4c9c3b19f979fb1c5b8a797816c5c4a362628395b71869bb0c6c9b49e89745847331f0a000000000000021527375b70859bb0c5d3bea9937e69543e29141a2f44596f8499aec4d6c0ab96816b56412c16182d43586d8298adc2d7c3ae98836e59432e190000000001162b41566b8096abc0c1ac97826c6a7f94a9bab29d87746050667b90a5c6bea9937e696d8297adc4b5a38f7a644f3a2a18040000000000000000000b20364b6075899eb3b7a6917c6754434d5e66767d818383807c766c61594c55606c7980848483807b746b61584d403025180800000000000000000000000000030a0c14191a170f0d07000000000000000002090b13191a18100e08000000000000000000070b11181a18120b07000000000000000000152a3f546a7f94a9bfd4d2bda8927d68533d2813000000000000000000091e32455773889eb3c8ddc9b49f8a75604b35200b00000000000000152a3f546a7f94a9bfd4d2bda8927d68533d2813000000000000000003131e324657687d92a6b7cbd3c2b19b86715d4b37220800000000000000000000000000000000000000000000091e32455672879db2c7dac5af9a85707c91a6b8bbaa947f6a5544311d0b2035485a74899eb4c9b49f8973798ea4b5c9cdbaa9947f695443301c0700000000000000000000000000000012273d52677c92a7bcd1bda8927d68533d282c3c53687e93a9bacbb7a5978297a7b8c5b49f8c7a645443302e43596e8398aec3cdb9a88c77614c37220c00000000000000182e43586d8398adc2d6c1ab96816c56412c17172c42576c8197acc1d6c3ae98836e59362513162b40556b8095aac0d5c5b09b86705b3827150200000003172939596f8499aec4bfaa947f6a61778a9fb4b7a6917c6654697e94a9bec7a5907b66657b90a6b7c2ad98826d5847331f0800000000000000000011263b50667b90a7b9b39d8874604b4d5f677c88929799989691898177665e6073818e95999a989590898076675f4a43362518080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1d5c0aa95806b55402b16131313131313131313131628395b71869bb0c6dbcebaa98c77624d37220d0000000000000012273d52677c92a7bcd1d5c0aa95806b55402b16000000000000000000031629394b6074879db2c8ddc9b5a38f7a654f362614010000000000000000000000000000000000000000000b21364b60768a9fb4cad8c2ad98836d75889eb3c8b29d8774604b35200e22384d62778da8b9c6b19c867171869cb1c7d7c7b29d8773604a35200d0000000000000000000000000000000f253a4f647a8fa4c7d7c0aa95806b55402b35495a70859bb0c7c7b29d8776889eb3c2bcab9b8573604b3a2a41566b8096abc0d7c6a48e79644f39240f00000000000001162b40566b8095abc0d5c3ae99836e593e2d1b152a3f546a7f94a9bfd4c5b09b86705443301c13283e53687d93a8bdd2c8b39d88735645311d090000000a1e33465772889db2c7bda7927d68596e8398adc2af9a846f5a6d8297acc2baa98d78626074889db2c8b49f8a77614c362614010000000000000001162c41566b8196abc5ac96816c554758677d8d9ea6acaeadaba89e96887c696a7f959fabaeafaeaaa79e95887c6b60544336251300000000000000000000090f112020202020202015120c030000000000000000000000000000000000010b11131d20202020200e0c06000000000000000000000000000f253a4f647a8fa4c7d7d7c2ad98826d58432d2929292929292929292929292e43596e8398aec3d8d8c7a48f7a644f3a250f000000000000000f253a4f647a8fa4c7d7d7c2ad98826d58432d18000000000000000000000b1d3144556a7f94aac2d2d2c1ac97816c5443301c080000000000000000000000000000000000000000000f24394e64798eabbccfd5bfaa95806a6b8096abbcb7a5917c66513c2b19263b50667b90a5c6c3ad98836e697e93a9bacdcab6a5907b66503b2b190500000000000000000000000000000d22374d62778ca9bacdc2ad98826d58432d384d63788da3b4c8c5ac97826d7e93a4b6c9b5a3937e685947343e53697e93a8bed1bca6917c67513c27120000000000000013293e53687e93a8bdd3c7b29d87725c4a362212273d52677c92a7bcd1c8b39e8874604a352011263b50667b90a5bbd0cab59f8a75604b36200b0000000c21364b61768b9fb5cabaa5907b6550657b90a4b6b59f8c786370859bb0c5b49f897460546b8096abc1baa9947f6a5443301c080000000000000005182a3b5b70859ab0bcab907b66504c6176899eabb8c4b8b3adacb1a79e8d7e75899eb3bdb2aea7a6acb3a69d918072605443301c110000000000000004121d2427353535353535352a2720150700000000000000000000000000000005131e25283235353535352320190e0000000000000000000000000d22374d62778ca9bacddac5b09a85705b373e3e3e3e3e3e3e3e3e3e3e3e3e3e41566b8096abc0d5d1bca7927c67523d2712000000000000000d22374d62778ca9bacddac5b09a85705b37271502000000000000000000021527374d62788da4b5c9ddc8b39d8874604b35200b00000000000000000000000000000000000000000012273d52677c92a7c9d9d1bca7927c6762788c9fb5c3ae99846f5a483520293f54697e94a9bebfaa957f6a61778a9fb4c9d3c3ae99836e594834200900000000000000000000000000000b20354a60758a9fb4c9c5af9a85705a372e3e556a7f95aac1ccb9a7917c6674869cb1bec1b39e8977614c3e3b51667b90a6bbd0bea9947e69543f29140000000000000011263b50667b90a5bbd0cab6a58e79644f382816253a4f657a8fa4c8d8ccb8a78f7a654f39291723394e63788ea3c5d6cfbcab8d78624d38230d0000000f253a4f647a8fabbccfc5a38d78634e5d72879cb1bcab96806b74899eb3c6b19c8671544e63798ea3b5c7b29d8773604b35200e000000000000000b1f34475974899eb4b59f8b76614c54697e94a7b8c4b8a79e98969ba3ab9f938298a7b9b2a1999191979fa9b39e968172604a3f2e1a0a000000000000122230393c4a4a4a4a4a4a4a3f3c3225150300000000000000000000000000051323313a3d474a4a4a4a4a38352c1e0e00000000000000000000000b20354a60758a9fb4c9ddc7b29d8872555353535353535353535353535353535353697e93a8bed3d4bfa9947f6a543f2a15000000000000000b20354a60758a9fb4c9ddc7b29d88725544311d0800000000000000000000092035495a71869cb1c6dbcbb7a68f7a644f3a240f000000000000000000000000000000000000000000162b40556b8095aac0d5d5c5a48f7a645a6f849aafc4b49f8c78624d38272d42576d8297acc2c8a7917c67586e8398adc3d4cab49f8b78624d3727150100000000000000000000000000071c30435472879cb2c7c7b29d87725544374b5c72879cb2c7c9b39e897560657b90a0b2c6b8a797826d5c4b374e63798ea3c5d5c1ac96816c57412c17020000000000000e23394e63788ea3c5d5d3c3ab96806b5645321e22374d62778caabbced5c5ac97816c5746331e21364b61768ba7b8ccdac9a58f7a65503a251000000013283d53687d92a8c9ccb9a78b76614b54697e94a9bab39e8875778ca7b9c3ad98836e584a5b71869bb1c8b6a5907b66513c2b19060000000000000d22374c62778ca8b9b29c877258465a70859aafc5b8a69d88828186909ea7a098a0b2b4a299837c7c818a9da5b09f957f6a5d4b3827150200000000091d30404c5160606060606060544f4332200c00000000000000000000000000132331424e535d5f606060605e493c2c190600000000000000000000071c30435472879cb2c7dccab49f8b74686868686868686868686868686868686868687b90a6bbd0d7c1ac97826c57422d1702000000000000071c30435472879cb2c7dccab49f8a75604b36200b0000000000000000000006192c3c566c8196abc1d6d5c4a9947e69543f2914000000000000000000000000000000000000000002152737596e8399aec3d8ccb8a78c766151667c91a6b7bcab95806b5645312a3b5b70859bb0c5bbaa8e796350657b90a5b7cacebbaa95806a5544311d0800000000000000000000000000001325365a6f849aafc4cab49f8a75604b374f647a8fa5b6cac3ac97826d565d6e8398a8b9c5b59f8d7a6455444b61768ba7b8ccc3ae99846e59442f19000000000000000c21364b61768ba7b8ccdec8b39e8975604b392820354b60758a9fb4cadec9b49e8976614c3a291e32465773899eb3c8d2bca7927d67523d2812000001162c41566b8196abc0c9b39e897457464c61768a9fb4b8a7927d7b90a5c5bfaa95806a553d54697f94aabbc3ae99846f5a4835200a0000000000000f243a4f64798fa4c6af9a846f5a465774899eb4c8b39d88786d6c717c899ea8adb2beb09b857067676c79879da6b59f8d7b655645311d0c000000000f24394c5e66757575757575756a614f3c27120000000000000000000000000b1b30414e6068727575757575705a4935200c00000000000000000000001325365a6f849aafc4d9cebbaa947f7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8095aac0d5d9c4af99846f5a442f1a00000000000000001325365a6f849aafc4d9cfbcab8d78624d38230d000000000000000000000012273c52677c91a7c9dad8c3ae98836e593625130000000000000000000000000000000000000000081d31445572879cb1c7dcc8b39e8973584b6074889db2c8b39e8875604b3634485973899eb3c8b49f8a75604b6074879db2c9d9c8b29d8874604b35200e0000000000000000000000000000182d42576d8297acc2cebbaa8d77624d44556c8197acc3cab7a58f7a65504d62778a9eb4c2bcab9b8573604b465773899eb3c8c6b19c86715c3a291704000000000000091e32465773899eb3c8deccb8a7937e685745321e30435472889db2c7ddccb9a8947e695846331f28395c71869bb1c6d4bfa9947f6a543f2a1500000417293a5a6f849aafc4c6b19c87715c3947586d8298adc2af9a847e93a8bdbca7927c67523d4c62778b9fb4cab49f8c78624d38271502000000000011263b51667b90a6bbac97826d574b61768ba8b9bfaa95806a5a575e66798a9eb4c1c0ab95806b56515b6378889db3ab9c8674604b3a29170400000011273c51667c8a8a8a8a8a8a8a7f6a543f2a150000000000000000000000031729394d5f687d878a8a8a8a8a78634d38230e0000000000000000000000182d42576d8297acc2d7d9c8ae9d9493939393939393939393939393939393939393959eafc3d8dcc7b19c87725c3b2a180500000000000000182d42576d8297acc2d7d9c9a5907a65503b251000000000000000000000000e23394e63798eabbccfdcc7b19c87725443301c07000000000000000000000000000000000000000b20364b60758a9fb4cadbc5b09b85705b44556a8095aabbb8a6917c67523d374c62778ca7b8c7b19c87725645546a8095abbccfcbb7a6917c66513c2c190600000000000000000000000000152a3f556a7f94aabfd8c8a48f7a654f4b6075889eb3c8c7b29d8773604a4859697e94a4b5c9b5a3937e6959475c71869bb1c6c9b39e89745847331f0a000000000000031628395b71869bb0c6dbd5c5b39d8875604b3f2f26365b71869bb0c6dbd6c6b39e8876614c402f2f445a6f8499afc4d5c0ab96806b56412b1600000a1f33475873889db2c8c4af99846f5a443a4f647a8fa4b5b59f8d8298adc2c4a48e79644f3948596f849aafc6bcab95806b5645311d09000000000012273c51677c91a6bcab96816b564c61768ca1c5bba6917c6651404c5b677d92a3b4c0ab95806b563d495a667c91a1b3a4957f6a5846331f0a0000000f24394e64798e9f9f9f9f9f97816c57422c1702000000000000000000000a1e334657677d929c9faa9f9f907a65503b25100000000000000000000000152a3f556a7f94aabfd4e6ccbbaea9a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8aaafbcccdfdec9b49f89745947341f0b00000000000000152a3f556a7f94aabfd4d2bda7927d68523d281300000000000000000000000b20364b60758a9fb5cadfc9b49f8a75604a35200b000000000000000000000000000000000000000e23394e63798eaabbced8c2ad98836d58374d62788b9fb4c4af9a85705b493b50657a90a5c5c3ae99846e59384d62788b9fb4cad4c4af9a846f5b4935210a0000000000000000000000000012283d52677d92a7bcd1bca7927c675251667c91a7b8ccc1ab95806b54433b4b6073869cabbcc1b39e8977624c596e8399aec3ccb9a88c76614c37210c00000000000000192e44596e8399aec3d8dfcbb7a695806b5d4b3e30365b70859ab0c5dad0c7b8a796816c5e4c3f3044596e8399aec3d7c2ac97826d57422d1800000c21374c61768ca6b7cbc2ac97826d5742374b5d71869cb1bcab9f8a9fb4cab7a68b76614b363b52677d92a8b9c9b39e8875604b36200f000000000012283d52677d92a7bcaa95806b554b60758ba7b9baa5907a65503b3d4d5f70859bb0c4ad98836e583c3c4c5e6e8399aeb49f8a76614c3621110000000c21374c61768ca8b9b5b5ae99846f59442f1a0000000000000000000005192b3c4b6176889db2b4bbb5a8927d68533d2813000000000000000000000012283d52677d92a7bcd2e7d9ccc2bfbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc0c8cbd5e2e1cdbaa98c77624c37220d0000000000000012283d52677d92a7bcd2d5bfaa95806a55402b150000000000000000000000091d31455673899eb3c8decdbaa98c77624d37220d0000000000000000000000000000000000000012273c51677c91a6c8d8d4bfaa957f6a554048596e8399aec3b4a28e79634e3953697e93a8bec0ab95806b5640485a6f849aafc5d5cab59f8c78634d3828160200000000000000000000000010253a4f657a8fa4c8d8bfaa947f6a55586e8398aec5c9b5a38e79634e36314455657a8d9fb5c5b9a798826d5d566c8196abc1d6c6a38e79644e39240f00000000000001172c41566c8196abc1d6e1d3c4b49f8d7b655c4a43435470869bb0c5d0bfb3aeb49f8d7c665d4b4340596f8499aec4d7c2ad98826d58432d18000010253a4f657a8fa4c4d4bfaa957f6a55402e3f53697e93a8b9bbaa9faabbc8b29d8873574632364b6176899eb4c9b8a6927d67523d2d1a070000000012273d52677c92a7bcaa95806b55445574899eb3bca7927c67523d314151667c91a6b8b29c87725b4935404f647a8fa3b5a8937e69543f2e1c0800000a1f33475874899eb4c9c6b19c86715c3a291704000000000000000000082035485a6b8095a6b8cacebfaa95806a55402b15000000000000000000000010253a4f657a8fa4c8d8ead9c9bcb4b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b3b7c4d5e7d7c7a48f79644f3a240f0000000000000010253a4f657a8fa4c8d8d7c2ad97826d58422d180000000000000000000000021527385c71879cb1c6dcd7c7a38e79634e39240e00000000000000000000000000000000000000152a40556a7f95aabfd4d1bca7927c67523d3b51667b90a5b7c0ab96816c5745576c8197acc1c9a7927d67523d3c52677c91a7b8cccfbcab96806b5645321e090000000000000000000000000d22384d62778daabbcec1ac97826c5761768a9fb4c9c8b09b86715b493627374b5d6d8297a7b8c5b2a08f7b6555697e93a9bed1bba6917c66513c27110000000000000014293f54697e94a9bed3d3c3b6b2ab9e897a686054546074889eb3c8c7b3a1999faa9e8a7b696054545e72879db2c7d6c1ac96816c57412c17000013293e53687e93a8bdd2bda8927d68533d28364c61768a9eb4c8bbb4bbc8c4af9a856f5a39293246576d8298adc4c5b09a85705b4a36210b0000000011273c51667c91a6bbab96816b56375a70859aafbea9947f69543928354b6074889db3b6a58d78634d38374b5c70859bb0b19c87725d4b37230e000004172a3a5c71869cb1c6c9b49e89745847331f0a000000000000000008182e3f4d62788a9fb4c4d5d7c2ad98826d58432d1800000000000000000000000d22384d62778daabbcee2cfbcab9f9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9da6b7cbe0d1bca7917c67523c2712000000000000000d22384d62778daabbcedac5af9a85705a3726140100000000000000000000001c31465c71869bb1c6dbcfb9a48f7a644f3a250f00000000000000000000000000000000000001142637586e8398adc3d8d5c5a48f79644f3a354b6073879db2c8b39e8975604b5a70859aafc5bcab8e79644f39364b6075889eb3c8dac9b39e8975604b36210f0000000000000000000000000b20354b60758a9fb4cac4af99846f5a687d92a9bacdbbaa947e69543d2c192e3f4c6177899eb3c1beb19c867360667b91a6bbd0bea9937e69543e29140000000000000011273c51667c91a6bbd1cab6a59ca5a79e8a7d736c6a6d7d91a7b8ccc4ae99848c9fa89e8b7e736c6a6d7c91a5b6cad5bfaa95806a55402b150002172c41576c8196acc1d0bba5907b66503b263346576d8297acc1cecaced8c1ac96816c57412c283950657b90a6b7c8b4a28e79634e3929170300000010253b50657a90a5c9ac97816c5742566b8196abc5af99846f5746323144556c8196abc2a9947f69543d2e3e54697e94a9b6a48f7a65503a25100000001a2f44596f8499aec4ccb9a88c76614c37210c00000000000000001325364b5d6e8398a9bacde2dac5af9a85705a37261401000000000000000000000b20354b60758a9fb4cadfcab49f8d8687878787878787878787878787878787878787889db3c8ddd4bea9947f69543f2a14000000000000000b20354b60758a9fb4cadcc7b29d87725544311d0800000000000000000000061b30465b70859bb0c5dacfbaa5907a65503b2510000000000000000000000000000000000000081d31445571869cb1c6dbccb8a78c76614c373043546a7f94aabbb9a7927d68535873889db3c8b59f8b76614b363245566c8196abc1d2ccb8a7927d67523d2d1a070000000000000000000000081d31445572879db2c7c6b19c87715a70859aafc7cab49f8b77624c3722101f344759687e93a3b5c9b5a4947e6964798ea3c5d6c1ab96816c56412c17010000000000000f24394f64798ea4c6d7c7b29c8799a1a89e9287817f828b9fb4c5d4c4a7927e8096a4a99f9387817f828b9fb4c3d3d1c0a6917c66513c27110004182a3a5a70859aafc5d6c6a38e78634e392329394f64798ea3b5c9dfe2d3bea8937e69533e2920354b6074889db2c8c0ac97816c5746331e0a0000000e23384e63788dabbcae99846e593650657a90a6b8b49f8a76614b3827374f64798ea4b5b19b86715b4a36384e63788da5b7ab96806b56382815020002172c41576c8196acc1d6c6a38e79644e39240f00000000000000071c304354647a8fa0b2c7d7e9ddc7b29d88725544311d0800000000000000000000081d31445572879db2c7dccab49f8b73727272727272727272727272727272727272727d91a6bcd1d6c1ac97816c57422c1702000000000000081d31445572879db2c7dccab49f8a75604b35200b00000000000000000000071c31475c71869cb1c6dbcfbaa5907a65503b25100000000000000000000000000000000000000b20354b60758a9fb4c9dec8b39e887358473326364c62778b9fb4c5b09b85705c61768ca6b8c7b29d877257463228384e63798ea3b5c9d5c5b09b85705c4a36210b0000000000000000000000011426375a70859aafc5c9b49f897462788c9fb5cac6af99846f5948341f0b182a3a4b6073859babbcc2b49e8a7762768ba7b9ccc3ae99836e59442e19000000000000000c22374c61778ca8b9cdc0ab95808399a4b4a49c9694979faabbcecbb7a68e7975869ca7b4a59d9694979fa9bacedcc8b4a28c77614c37220c000a1f34475973889eb3c8cdb9a88b76614c362122364a5c71869bb0c6d6e8d7c6a5907b65503b261c3043546b8096abc2c9b49e8976614c3621110000000b21364b60768b9fb5b19b867154434b6074889eb3baa9937e69564531364a5c71869cb1b5a38e79634e3635495b72879db2b19b86715645321d090000142a3f54697f94a9bed0bba6917b66513c2611000000000000031628384a6072859bb0becfe5f4dfcab49f8a75604b35200b00000000000000000000011426375a70859aafc5dacebbaa8d77625c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c64798ea4c6d6d9c4ae99846f59442f1a00000000000000011426375a70859aafc5dacebbaa8d77624d38220d0000000000000000000006192b3c5d73889db2c8dddac9a48f79644f3a240f0000000000000000000000000000000000000e23384e63788da9bacddac5b09b85705b3a291f3447596e8398aec2b5a38e7964657a8fa4c4c4af99846f5a392821364a5b70859bb0c6d7c8b4a38e79644e392917030000000000000000000000182d42586d8297adc2cdbaa88c776a7f94abbccdb9a8927d67523b2a18050c1c304354647a8c9fb4c4b9a898826d74899eb3c9c6b19b86715c392917030000000000000a1f33475874899eb4c9c1ac968176869ca5b6b2aba9adb4bbc8d4c3b39d88736379899ea8b7b2aba9adb4bac7d8cebeaf9a85705947341f0b000c22374c61778ca6b8cbc9b49e89745846331f1b2d3e53687d92a8b9ccdecdbaa88d77624d38221426364e63798ea4b5c9b9a8937e69533f2e1c080000091e32455672879db2b39e8974604a44556b8095a9bab29d8774604b3f2e3e546a7f94abbcab96806b5443303d596f8499aeb49f8a75604b36200b000012273c51677c91a6bcd1bea9937e69543e2914000000000000091e324556677d92a3b5c9dcecf7e2cebbaa8d77624d38220d0000000000000000000000182d42586d8297adc2d7d9c8a58f7a65504747474747474747474747474747474c61778ca8b9cddcc6b19c87715c3a2a170400000000000000182d42586d8297adc2d7d8c8a58f7a65503a2510000000000000000000000b2035485a74899eb4c9decfbcab8d78634d38230e00000000000000000000000000000000000011263c51667b91a6c7d7d7c2ad98826d58432d182a3b50657b90a4b6c1ac97826d687d93a8bdc0ab96816b56412c1a2d3d53687e93a8bacdd1c1ac97816c5746331e0a0000000000000000000000152b40556a8095aabfd7c6a48e7971869cb1c9c9b49e8976614b36210d00011426364a5c6c8197a6b8c6b2a0907b71869cb1c6c8b39e89735746331e0a00000000000004182a3a5c71879cb1c6c2ac97826d78879ca4b4bcc9c2c9cecfc5b7a5957f6a5b657b8a9da6b3bfbfc2c9ced3cabfb2a0907b66503b2a18040010253b50657a90a5c5c8c6b19c87715c3a29171021364b6175899eb3c8c9c9b49f8974604a35200b21364a5b71869cb1c6c6b19c86715d4b37230c000003162838596e8399aeb9a88d78634e374c61778a9fb4b7a695806b5d4b3e384d62788c9fb5b29d8874604b3540566b8095abbbaa8e79644e39240f00000f243a4f64798fa4c6d7c0ab96816b56412c16010000000005182b3b4b6075879db2c1d1e4f2f4ebd9c8a58f7a65503a25100000000000000000000000152b40556a8095aabfd5d2bda7927d68523d3232323232323232323232323233475874899eb4c9dec9b49e89745847331f0a00000000000000152b40556a8095aabfd5d2bca7927d67523d2812000000000000000000000d23384d62788da8b9cddfcab59f8b75604b36200b000000000000000000000000000000000000152a3f546a7f94a9bfd4d4bfaa957f6a55402a1523374b5d72879cb1c7b49f8a766c8196abc1bda8927d68533d281321364c61768a9fb4c9dec9b49e8976614b362110000000000000000000000013283d52687d92a7bdd0bba6917c7a8ea4b6cac4ad98826d5746321e09000008182d3e4c6176889eb3c0beb19c86758398aec3ccb8a78b76614b36210c000000000000001a2f445a6f8499afb3b3ac97816c627886979fabb4bac7c9bcb5a79d8776614c5d657b8899a1aeb4bac7bdc2b6b1a198826d5e4c381d0c000014293e53697e93a8b2b2b2af9a846f5a452f1a091e3246576c8197aab4b4b4b19b86715443301c071a2d3d54697f94a8b2b2b2a48f7a65503a2917040000142a3f54697f94a9c3a7927d67523647596a7f95a4b6b49f8d7b655c4d40485a70859aafb7a6907b6550393d53687d92a8c8a6917b66513c261100000c22374c61778ca8bacdc3ae98836e59432e1900000000000b203448596a7f95a6b7cbe0dddcdfe6d2bca7927d67523d2812000000000000000000000013283d52687d92a7bdd2d4bfaa957f6a55402a1d1d1d1d1d1d1d1d1d1d1d182a3a5c71879cb1c6dccdb9a88c76614c37210c0000000000000013283d52687d92a7bdd2d4bfaa957f6a55402a150000000000000000000215273752677c91a7c6d7ddc7b29d88725645321d09000000000000000000000000000000000000132536586d8298adc2d7d1bca7927c67523d27121c2f3f54697f94a9babaa8937e6f849aafc4c4a48f7a644f3a250f1e3346576d8298adc3d3cdb9a8937e68533f2e1b080000000000000000000010253b50657a90a5c9d9bda7927d8196abc2cbb7a6907b655039281603000000101f334658687d92a2b4c8b6a4947f8095aabfd6c5a38e79634e39240e00000000000002172d42576c82979e9e9e9c927d675a6275818c989fa9a7a8ab9f99897a6457464b5d6477838f989fa9a7a8a6a49c938374604b402f1c000000172d42576c82979d9d9d9d9d96816b56412c16031628394e63798c9c9e9e9e9e97826d58362513000f22374c62778a9b9d9d9d9d98836e5847331f0a00000e24394e63798ea5b6ad97826d54433b4b6074869ca8baab9e8a7a665e4d4853687d92a9baad97826d57453c51677c91a6bca8937d68533e281300000b1f34475974899fb4c9c6b09b86715b39281603000000071b2d3e4d62778a9eb4c4d4cbc8c7cad4d4bfaa957f6a55402a15000000000000000000000010253b50657a90a5c9d9d7c2ad97826d58422d18000707070707070707001a2f44596f8499aec4d9d6c6a48e79644f39240f0000000000000010253b50657a90a5c9d9d7c2ac97826d57422d18000000000000000000081d3144556c8196acc1d6d8c3ae98836e59382815020000000000000000000000000000000000071c30435471869bb0c6dbd5c5a48e79644f39240f1121374c61768a9fb4c6b19c8672879db2c7b7a68c76614c37210c17293950657a8fa4b6cad6c6b19c86715d4b37220c000000000000000000000d23384d62788dabbccfbea9947f889eb3c8c8b39d8874604b35200b000000000417293a4e5f70849aaabbc2b49e8a7e93a9bed0bba6917b66513c26110000000000000014293e54697e88898988867f72604a57606c79828a8f9293918b8378645c4a393f4b59626e7b838a8f9193918e867e6f605645322211000000192e43596e828888888888888376614c36210c000b2135495b677d87898989898478624d38230d000b1f344759657b8588888888888776614c37210c00000c21364a5b72879db2b39e8874604b35455663798a9fabb9a89e8a7c6d625a5561768a9fb4b49e8975604b3b50657b90a5baa9947e69543f2914000004182a3b5c72879cb1c7c8b39e88735745321e090000000a22364a5c6d8297a8b9cdc4b8b3b2b6c3d4c2ac97826d57422d1800000000000000000000000d23384d62788dabbccfdac4af9a856f5a36261401000000000000000002172c41576c8196acc1d6d1bba6917c66513c2711000000000000000d23384d62788dabbccfdac4af9a856f5a3626140100000000000000011527374b6074889eb3c8ddd2c1a9947e69543f29140000000000000000000000000000000000000b20354a6074899eb4c9deccb8a78b76614c36210c0a1f3347586d8298adc2b5a48f7a8c9fb4c8b39d88735847331f0a0b23374b5d72879cb2c8d8c9b5a48f7a644f3a2a17040000000000000000000b20364b60758a9fb4cac5b09b859ba6b8cbc2ab96806b5443301c0800000000000c1c31414e63798c9fb4c4b9a89b869bb0c5d3bea8937e69533e29140000000000000012273b4f616973737373716a605443454b5c646d757a7c7d7b776f635a4a3e2d2e3b484d5d656e757a7c7d7b797268604b4538281604000000172b4053646e7373737373726e615846331f0a00061a2c3d4d5f67727474747470625a4935200b0005182a3b4b5d6570737373737372615847331f0a0000071a2d3d566b8196abb8a7907b65503b384a5b677d8d9fabb9a89e9182786f6a686e8398adb9a8927d67523b4f657a8fa4baa9947f6a543f2a150000001a2f445a6f8499afc4cbb8a68b76604b36210b00000a1a30414f647a8d9fb5c6cbb8a69e9da5b6cac4af9a856f5a36261401000000000000000000000b20364b60758a9fb4cadcc7b29d87725443301c08000000000000000000142a3f54697f94a9bed4d3bea9947e69543f2914000000000000000b20364b60758a9fb4cadcc7b29d87725443301c0800000000000004121d314455677c91a6b8cbdec9b5a38d78634d38230e0000000000000000000000000000000000000d23384d62788da8b9cdddc8b39e88735846331f0a04172a3a4f657a8fa4b5c2ae998499abbcc4af9a856f5a3a291704081c2e3f546a7f94aabbced2c2ad98826d5847331f08000000000000000000081d31445573889db2c8c8b4a39ba3b4c4c9b5a48e79644e362614010000000000001321364a5b6b8096a6b7c6b4a39ba3b4c8d6c0ab96816b56412c16010000000000000c1f32424f545e5e5e5e5c554a4336323e4a4e56606567686662594d493c2d201d2b343f4b50566064676866635b534e4232281a0a000000001024364653595d5d5d5d5d5d584c463a29170400000f1f30414d515c5f5f5f5e5b4d493c2b190600000d1d2f3f4b505b5d5d5d5d5d5d4c473a2917040000000f253a4f647a8fa3b5ad98836e5948343d4d5f687d8d9ea8b4b3a0988b84807e7f849aafc6af99846f594850657a90a5baa9937e69543e2914000002172d42576c8297acc1d5c5a38d78634e38230e00021528384d5f70859aabbccfc2b39e88879db2c7c7b29c87725443301c0800000000000000000000081d31445573889db2c8ddc9b49f8a75604b35200b00000000000000000012273c51677c91a6bcd1d6c1ab96816c56412c1701000000000000081d31445573889db2c8ddc9b49f8a75604b35200b070700030a0c181f2f3f4b6074869bb1c4d5d5c5b19b86715a4935200c00000000000000000000000000000000000011263b51667b90a6c6d7dac5b09b85705b3a291704000c22374b5d71869cb1c6b3a199a1b3c9c1ac96816c57412c1700001122374c62778b9fb4cadfc9b49f8a77614c362513000000000000000000021527375b70859ab0c5d1c1b4b0b4c1d1c9b19c86715c4a36180800000000000000071a2d3d4b6175879db2bfc1b4b0b4c1d1d8c3ae98836e59432e1900000000000000021424323b3e4949494947403530251e2d3638454b4f5253514c483b352c1e100d18202e3738454b4f5253514e4a3d3a311e160a0000000000071828364043484848484848433633291c0c00000001122330393c47494949494538352b1e0e0000000011212f373b464848484848483733291c0c000000000d22374b5d71869bb1b49f8b77624c3b30414e5f687c899ba3b2b2aa9f9a9593949aa2b4cab49f8b77624c51667c91a6bba8937d68533e2813000000152a3f546a7f94a9bfd0bba5907b66503b261100091d324556677c91a2b4c9c9b5a4937e849aafc5c9b49f8a75604b35200b00000000000000000000021527375b70859ab0c5dacebbaa8c77624d37220d0000000000000000000f24394f64798ea4c6d7d9c3ae99846e59442f1900000000000000021527375b70859ab0c5dacebbaa8c77624d37221d1d1d1d171e212a33404c5d6a7f94a3b5c9e0cbb8a6937e68533c2c1906000000000000000000000000000000000000142a3f54697f94a9bed4d7c2ad98826d58432d180000081b2e3f53697e93a8b9bfb3aeb3bfd0bea8937e69533e291400000b203448596e8499aec4d5cdbaa9947f695443301c07000000000000000000182e43586d8398adc2d8d1c8c5c8d1cfbcab947f69543d2d1a0000000000000000000f1e324657677c91a1b3c7c8c5c8d1dfdbc6b09b86715b392816030000000000000006141f272934343433322a201c130f1a212832363a3d3e3c37342a20190e000005111c232832363a3c3e3c39362d261f1402000000000000000a18242b2e3333333333332e211f170c000000000005121d24273234343434302320190e000000000003111c232530333333333332211f170c0000000000081b2e3f52677d92a6b7a996816c59483431414e5e667885929da5adb4afaaa8a9afb4c0c8bbaa947e695453697e93a8c6a6907b66513b261100000012273d52677c92a7bcd1bda8937d68533e281304182a3b4b6074879db2c0cfbfb19c86758398adc3cebaa98c77624d37220d0000000000000000000000182e43586d8398adc2d8d8c8a48f7a654f3a25100000000000000000000c22374c61778ca8b9cddbc6b19b86715c3a29170400000000000000182e43586d8398adc2d8d8c8a48f7a654f3a32323232322933363a474c5e667b8b9fb4c1d2d2c2b39e8875614b36210e00000000000000000000000000000000000002182d42576d8297acc2d7d4bfaa947f6a553f2a150000001021364c61768a9eb4c9c7c4c7d0d6c5a5907a65503b2510000005182b3b51667c91a6b7cbd7c7b29c8773604a35200d000000000000000000162b40556b8095aac0d5e4dddadddfcab49f8b77624d37220f000000000000000000031629394d5f6f849aa9bacddbdde4efddc8b39e88735745321e090000000000000000020c12141e1e1e1e1c150b070000070a161e2125272826221f180d060000000000080a151d202527282624211a0f0b02000000000000000000071017191e1e1e1e1e1d190c0a0400000000000000010a10121d1f1f1f1f1b0d0b060000000000000000080e101b1e1e1e1e1e1d0c0a04000000000000001020364b6074889db2b49f8a78624d403031404d5a63727d8790989ea8a8aaabadacaba9aa9f9a86715c576c8197acb9a88d78634e38230e0000000f253a4f647a8fa4c7d7c0aa95806b55402b160b1f344759697f94a5b6cac7b3a1907b6b8096abc0d8c7a48f7a644f3a250f0000000000000000000000162b40556b8095aac0d5d1bca7927c67523d27120000000000000000000a1f33475874899eb4c9dec9b39e89745846331f0a00000000000000162b40556b8095aac0d5d1bca7927c675247474747474739464b5058616d7c8b9fa9bacdd7c7b5a4937e695746321e0900000000000000000000000000000000000005182b3b5b70859bb0c5dad1bca7917c67523c27120000000a1e3346576d8297acc1d2d9dbe0ccb8a78c77624c37220d0000000d20354b6074889db3c8ddcab6a5907b65503b2b1805000000000000000013283e53687d93a8bdd2e8f2f0e9d7c7af9a846f594834200b000000000000000000000b1b30414d63788b9fb4c3d3e6f8f5e0cbb8a68b76604b36210b00000000000000000000000009090909070000000000000002090b101213110d0b0500000000000000000002090b0f1213110e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455697e93a3b5a999836e5e4d3c2b303c49546067747b83898e93959697979693908b857d67525971869bb1b49e8975604b35200b0000000d22374d62778ca9bacdc2ad98826d58432d181a2d3d4c6177899eb3c3cebaa999836e697e93a8bed1bca7927c67523d2712000000000000000000000013283e53687d93a8bdd2d4bfaa947f6a553f2a1500000000000000000004182a3a5c71879cb1c6dcccb9a78b76614c36210c0000000000000013283e53687d93a8bdd2d4bfaa947f6a5c5c5c5c5c5c5c5d5761656c77828d9fa9bac7d7cdbaa99c8674604b392816030000000000000000000000000000000000000b2034485974899eb3c9ded5c4a48e79644f39240f000000031729394f64798ea3b5c9ddf3dec8b39e89735948341f0b000000081d3144556b8095abc0d1d3c3ae99836e5948342009000000000000000010263b50657b90a5c9daecfff6e1cdbaa9927d68523b2b19050000000000000000000000122135495b6a8095a5b6cadfedfbe7d5c5a38e78634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0b0b0b0b0a05000000000000000000000000000000000000000001080b1014161714110b090200000000000000000000000000000000000000021527374b6073869babb2a1917c665a4939292c36434a5560666e74797d7f818282817e7b7670675f4d62778c9fb5af9a846f5544311d080000000b20354a60758a9fb4c9c5b09a85705b37271521364a5b6c8197a8b9ccc5b49f8b7863667b90a6bbd0bfa9947f6a543f2a15000000000000000000000010263b50657b90a5c9dad7c1ac97826c57422d17000000000000000000001a2f44596f8499aec4d9d6c5a38e79634e39240e0000000000000010263b50657b90a5c9dad7c1ac978172727272727272727273767b8189979fabbac7d7cebbb49f8b7a645645311b0b000000000000000000000000000000000000000d22374d62778ca7b9cce0cbb8a68b76614c36210c000000000b22364a5c71869bb0c5d6e8dac5b09b85705b3b2a1805000000011527374e63788da2b4c8dfcab49f8b77624d37271501000000000000000e23384e63788dabbccfe3f8f4dec9b49f8a76614b36210d00000000000000000000000006192c3c4b6075879db2bfcfe4f5e5d0bba5907b66503b261100000000040d131520202020202020201e170b09030000000000000000000000000000000000050f15171f2020202020202013110b020000000000000000000000010a101220202020201f1a0d0b050000000000000000000000000000000108141c20252a2c2c2a26211e160a06000000000000000000000000000000000000091d314455647a8d9fb5b39e89786257463829253037444b50556064686a6c6d6c6b69666158524d576a7f95abbcab947e695437271501000000071c30435472879cb2c7c7b29d88725544311d2f404e63798c9fb4c6cbb8a696806b5a63798ea3c5d6c1ac97826c57422d1702000000000000000000000e23384e63788dabbccfd9c4af9a846f5a36251300000000000000000002172c42576c8197acc1d6d0bba6917b66513c2611000000000000000e23384e63788dabbccfdec9b49e8a878787878787878787888b90969ea7b4bcc9d4c8bbb49d927d675c4a382715000000000000000000000000000000000000000010263b50657b90a5c5d6ddc8b39e88735846331f0a00000000071b2d3e53687d92a7b9cce0d7c2ac97826d57422d180000000000092135495b70859ab0c6d6cebbaa957f6a5544311d08000000000000000b20364b60758a9fb5cadff4e7d5c5ad98836e5746331e0a000000000000000000000000000e1e324556667c90a1b3c6d7e9e8d3bda8937e68533e2913000000071521282b3535353535353535342c211e160a0000000000000000000000000000000917222a2c343535353535353528261e130600000000000000000005131d25273535353535342f2220190e0000000000000000000000000008141c2630353a3f41413f3c36322820190e0100000000000000000000000000000000011426374b5c6c8197a3b5a79b85756156473a2c1d26313537444b4e53555658575654514c473e4b6175899eb3b49f8b77624c37220d00000000001325365a6f849aafc4cab49f8a75604b3527374c5e6f849aaabbcec2b39e8876614c61768ba7b8ccc4af99846f5a442f1a00000000000000000000000b20364b60758a9fb5cadcc7b19c87725443301c07000000000000000000142a3f54697f94a9bed4d3bea8937e69533e2914000000000000000b20364b60758a9fb5cadfcdb9a89e9c9c9c9c9c9c9c9c9c9ea7a5acb3b9c5cfcdc3b7aa9f937f695f4d3e2d1a0a000000000000000000000000000000000000000014293e54697e93a9bed3dac5b09b85705b3a29170400000000001021364b6075899eb3c9ded3bea9947e69543f29140000000000061a2c3d52687d92a8b9ccd9c8b29d8874604b35200e00000000000000091d32455673889db3c8dde2e0cbb8a6907b66513929170300000000000000000000000000021628384c5e6e8399a8bacde1e2d5c0ab95806b56402b160100041525333c404a4a4a4a4a4a4a4a49413632281a0a00000000000000000000000000051727343e424a4a4a4a4a4a4a4a3d3a312413020000000000000001132330393c4a4a4a4a4a4a4438352b1e0e00000000000000000000000b18263036434b4f54565654514b4538352c1d14090000000000000000000000000000000009192e3e4b6075859ba7b5a39a84746158493d31261d20263135393e40414242413e3b373b4b5c6a7f94a7b8ae99836e594834200b0000000000182d42576d8297acc2cebbaa8d77624d38314455667c90a2b3c8c9b5a4937e6858465773899eb3c8c7b19c87725c3b2a180500000000000000000000091d32455673889db3c8ddc9b49f8975604a35200b00000000000000000012273c51677c91a6bcd1d6c0ab96816b56412c1601000000000000091d32455673889db3c8ddd6c6b9b4b1b1b1b1b1b1b1b1b2b3b8c5c1c9cccbc7bab4a59d8b7e69614f41302010000000000000000000000000000000000000000002172d42576c8297acc1cdd9c2ad97826d58422d18000000000000091e3245576c8196acbecfd3c2a5907b66503b26110000000000000e21364b6075899eb3c8d3cbb7a6917c66513c2c1906000000000000021528385b70859bb0c5cdcdd8c9b39e8874604b35200b0000000000000000000000000000000a1a2f404d62788a9fb4c2d1cdcdc3ad98836e58432e1900000d213343505560606060606060605e574b45382816030000000000000000000000001323344552575f60606060606060534e42311e0b000000000000000a1d30414d5260606060605f5a4d483c2c1e0e0000000000000000000b1b2836434b546065696b6c696660564d493c3126190a00000000000000000000000000000000101e3245566278899ea9b4a29a8476635b4b44373025201d2024282a2c2d2d2c28323e4b59647a8b9fb4b2a08f7a644f3b2b18050000000000152a3f556a7f94aabfd9c8a58f7a65503a3a4b6074869cb1c0d0bfb19c8673604b3a5c71869bb1c6c9b49f89745947341f0b00000000000000000000021528385b70859bb0c5cdcdbaa98c77624c37220d0000000000000000000f243a4f64798fa4c6d7cdc3ae98836e59432e1900000000000000021528385b70859bb0c5cdcdd6cdc9c7c7c7c7c7c7c7c7c7c8cccac8c4c4b7b2a99f95877b68604f4332231302000000000000000000000000000000000000000004182a3a5a70859aafb8b8c8bbaa947f6a553f2a15000000000000031628394e63798ea0b4bcc3b6a48d77624d38220d000000000000091e3245576c8297aab6c3b8c4af9a846f5a4935200c00000000000000192e43586e8398adb8b8b8c8bbab96816c5544311d0800000000000000000000000000000000122035485a6a7f94a4b4c0b8b8b8b09b85705b382816020013283c50616a7575757575757575736c605645321e1300000000000000000000000818314252636c747575757575757568604e3a2611000000000000001025394d5f677575757575746f625a493c2c1b0b000000000000000818283946546068737a7f81817f7b756d625a4b4437281b0a00000000000000000000000000000003162838485a657b8b9fa9b4a29a86796960554a4336352b2a282727292b2c3539454b5c6477889da9b9a798826e5c4a361d0d00000000000012283d52677d92a7bcd2bca7927d67523d4758697e93a4b6cac8b3a1907b65554444596e8399aec3cdbaa98c77624c37220d0000000000000000000000192e43586e8398adb8b8b8c7a48f7a644f3a250f0000000000000000000c22374c61778ca8b9b8b8b8b09b86715b3928160300000000000000192e43586e8398adb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7bcb5b2afaaa69d958a8075655d4e42322514050000000000000000000000000000000000000000000a1f33475873889ea3a3a3a3aa9f907b65503b2610000000000000000a21364a5b6e82979faba3a59c8673604a35200b000000000000031628394e63798c9ca4a3a3a3a39f8c78634d38230e00000000000001162b40566b8095a3a3a3a3a3aa9f8d7a644f372715010000000000000000000000000000000005192b3c4b6074869aa2a3a3a3a3a39d88735645321e0900152b40556a808a8a8a8a8a8a8a8a898174604b41301d0d000000000000000000001325364e606c81898a8a8a8a8a8a8a7d68533d28130000000000000012273c52677c8a8a8a8a8a898478635b493a291909000000000001142636465761727d888f94969694918982786b605545392818080000000000000000000000000000000a1a2b3c4b5d667c8b9fa8b4a49c8b7e736660544d493c3f3e3c3d3e403c494d5760697a889da6b7b39e8977624d3e2d1b0000000000000010253a4f657a8fa4c8d8bfaa947f6a553d4c6176899eb3c2cebbaa99836e5d4c3741566c8196abc1d7c7a48f79644f3a240f0000000000000000000001162b40566b8095a3a3a3a3a3a3917c67523c27120000000000000000000a1f34475974899ea3a3a3a3a39e88735746321e0900000000000001162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a2ab9f9d9a958f8880776b61574b3f31241407000000000000000000000000000000000000000000000c22374c61768c8d8d8d8d8d8d8b8172604a35200b00000000000000071a2d3d4b6074828b8d8d8d877a645443301c07000000000000000a2136495b667c878c8d8d8d8d8d8d806b56412b160000000000000013293e53687e8d8d8d8d8d8d8d8b7e695c4a3619090000000000000000000000000000000000000e1d3144556277858c8d8d8d8d8d8d8d75604b36210b000b20354b6073849aa79f9f9f9fa79e96826e5f4d3b2b18080000000000000000071c304354687d929fa99f9f9f9f9d8875604b36200b000000000000001025394d5f6b8095a19fa99f9989796358463726140100000000081c304354617583929da6a9ababa9a89e988b8073605745362614010000000000000000000000000000000e1e2f3f4c5e667b8a9da6b3a99f93867c7369625a58555352525355585a636a757f8b9da6b7af9d917c665948342010000000000000000d22384d62778daabbcec2ac97826d57495b6c8196a7b8ccc5b49f8b78634d3f2f3e54697e93a9bed1bca7917c67523c2712000000000000000000000013293e53687e8d8d8d8d8d8d8d8d7f6a543f2a1500000000000000000004182a3a5c71868d8d8d8d8d8d8d8b76614b36210c0000000000000013293e53687e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c8a8884807a746b62594b46392e21140600000000000000000000000000000000000000000000000b20364b607479787878787878766c605443301c0700000000000000000f1e324556606d7678787774645c4a3625130000000000000000061a2c3d4c5e66727778787878787878624d38220d000000000000000c21364b6175787878787878787669604f3e2d1b000000000000000000000000000000000000000215273748596270777878787878787973604b35200b00081d3144556278899eb3bdb5c5b8b3a0927d67594836251300000000000000000b20354a6073879cb1bab5b5b9a8947f6a5645321d09000000000000000a1d30414a60728399a3b5b4a79c8676615544311d13030000031629394b60728499a1b2b7b6b2adaeb3b4a99f958375605443301c0f0000000000000000000000000000000011212f404c5d657b889aa1b4b4a49c90877e78726e6a686767696a6d72787f88949fa9b7b49e947f6a5e4d3b2b1802000000000000000b20354b60758a9fb4cac4af9a846f5a4e63798b9fb4c5ccb8a796816b5b4935273c51667c91a6bbd1bea9947f69543f2a1400000000000000000000000c21364b6175787878787878787877614c37220c000000000000000000000d22384d6278787878787878787973604b35200b000000000000000c21364b61757878787878787878787878787878787878787775736f6a6560544c473b32281b1002000000000000000000000000000000000000000000000000091d324556606363636363636361574a4336251300000000000000000003162838454b576163636260554a3e2e18080000000000000000000f1f2f404c505962636363636363625a4835200b000000000000000a1e334657616363636363636361574f42322010000000000000000000000000000000000000000009192b3b484d596263636363636363605544311d080001142637485a677d919fb1c2d3ccbeb39e8978625443301c0e000000000000061a2c3d51667b90a4b6cad7c7b39e8976614c382815020000000000000001131c3043546175859ba6b8b6a4998373604b4231211000000a1e324657697f94a2b3bcafa59c98999ea8b1b4a1998472604b3d2d1a070000000000000000000000000000000312222f3f4b5d647784949fa8b5b1a49c948d87837f7d7c7c7e8082888d949ea7b4b6aa9f93806b615040301d0d0000000000000000081d31445572879db2c7c7b19c8772545d6e8399aabbcec2b39e8876614c3c2c24394e64798ea3c6d6c1ac97816c57422c1702000000000000000000000a1e334657616363636363636363615947341f0a000000000000000000000b2035485a626363636363636363605544311d08000000000000000a1e334657616363636363636363636363636363636363626160565a55504b4336342a1e160b000000000000000000000000000000000000000000000000000002152838454b4e4e4e4e4e4e4e4b463930251808000000000000000000000a1a283239464b4e4e4d4b44372e2010000000000000000000000112222f383b484c4e4e4e4e4e4e4d483c2b19050000000000000003172939464b4e4e4e4e4e4e4d4b4639322414020000000000000000000000000000000000000000000d1d2b343b474c4e4e4e4e4e4e4e4b4437261401000009192b3c4d5f6d8297a4b6c7d8ccb9a79a8472604a3c2c190900000000000c2135495b6f8499afc2d3cebaa996806b5846331a0a0000000000000000000013253646576278889ea9bab3a196806b604e3f2e1e0e000c21364b6176899eb3c0af9e9587838489969fb1b3a295806a5c4a36210f000000000000000000000000000000000412212f3f4b5961727f8a979fabb4b1a9a49c98949391929395989da5aab3b7b3a49c8b7e6b625143332212000000000000000000011426375a70859aafc5c9b49f897560657b90a1b3c8c9b5a4937e685846331e21374c61768ca8b9ccc4ae99846f59442f1a000000000000000000000003172939464b4e4e4e4e4e4e4e4e4c473a2a18040000000000000000000005192b3c484d4e4e4e4e4e4e4e4e4b44372715010000000000000003172939464b4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d4c4b4538403a3530261f180d03000000000000000000000000000000000000000000000000000000000a1a283236383838383838383632291c13080000000000000000000000000a161e293236383838353126191002000000000000000000000004121c232b343738383838383838352b1e0e0000000000000000000b1b293336383838383838383632291b140600000000000000000000000000000000000000000000000d18202a3437383838383838383531261909000000000e1e30414b6175869ca9baced6c5b3a2937e685a49372614010000000417293a4e63798c9fb5cadac9b49f8b77624d3a2917000000000000000000000008182839485a647b8b9fb4bcb09e927e685d4b3c2b1b0b13283e53687d93a7b8b4a29580736e6f758196a0b2b49f8c79644e3d2d1a07000000000000000000000000000000000311202e3a4754606a77828c989fa9b0b4b1adaaa8a7a7a8aaadb2b7b4afa69d93867a696051443325150400000000000000000000182d42586d8297adc2cdbaa98c776273869cb1bfd0bfb19c8673604b3a29171f33475874899eb4c9c6b19c87715c3a2a170400000000000000000000000b1b293336383838383838383837342a1c0c0000000000000000000000000e1e2b3538383838383838383835312719090000000000000000000b1b293336383838383838383838383838383838383838373632282b25201c140805000000000000000000000000000000000000000000000000000000000000000a151d2023232323232323211e160b000000000000000000000000000000030b161e21232322201d1409000000000000000000000000000000090d1820222323232323232220190e00000000000000000000000b171e2123232323232323211e160b0000000000000000000000000000000000000000000000000000050d181f2223232323232323201d1409000000000000121e324657647a8b9fb4bfd0d0c0b49f8a78635544311d0f0000000a1f3346586c8197abbccfcfbcab97826d5948341b0b0000000000000000000000000b1b2b3c4b5d687d929eb0bcb49f8b7b655a48392918192e43596e8398aec5b09b8570605456606d8298a9baab99836e5b4a36210c000000000000000000000000000000000002101c2a36434a59626d7a828a939b9fabaaadafb1b1b1b0adaaaa9f9a92887e73645c4e42332616070000000000000000000000152b40556a8095aabfd7c7a48f79687e93a4b5c9c8b3a1907b655544311c0c172a3a5c71869cb1c6c9b49e89745847331f0a0000000000000000000000000b171e212323232323232323221f180c00000000000000000000000000000e1920222323232323232323201d150900000000000000000000000b171e2123232323232323232323232323232323232322201d1515100b08010000000000000000000000000000000000000000000000000000000000000000000002090b0e0e0e0e0e0e0e0c0a03000000000000000000000000000000000000030a0c0e0e0d0b0801000000000000000000000000000000000000050b0d0e0e0e0e0e0e0d0b0500000000000000000000000000030a0c0e0e0e0e0e0e0e0c0a030000000000000000000000000000000000000000000000000000000000050b0d0e0e0e0e0e0e0e0b080100000000000000031628394a5c697f94a1b3c4d5cdbaa89b8573604b3d2d1a0a00011426364c61768a9eb4c9dacab59f8c79634e3b2b1800000000000000000000000000000e1e2e3f4e5f6b8096a1b3baa99e887862574636251729395d73889db2bea8937e695343454c62778a9fb4b59f8c79634e39240e000000000000000000000000000000000000000c1825303b484d5c646d767e858b9195989a9b9c9c9b9895908a847d746960554a3e3124160800000000000000000000000013283d52687d92a7bdd1bba6917c75889eb3c2cebbaa99836f5d4c372614001a2f44596f8499aec4cdb9a88c76614c37210c00000000000000000000000000030a0c0e0e0e0e0e0e0e0e0c0a0400000000000000000000000000000000050b0d0e0e0e0e0e0e0e0e0b080100000000000000000000000000030a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0c0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4a60728499a6b8c9d7c6b4a2947f6a5b4a38271502081c304354697f94a8b9cdd1c0ae99836e5b49351d0d000000000000000000000000000000102031414b60728399a4b6b8a69c8675615443301e334657758a9fb4baa5907a65503b3448596e8399aebcab96806b56392816030000000000000000000000000000000000000008131c2b343e4a4f58616970777b7f83858687868583807b766f6760564b44372d2014060000000000000000000000000010253b50657a90a5c9d9bda8937e8095a6b8cbc5b49f8b79634e3f2f190900172c41576c8196acc1d6c6a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b101618191919191919180c0a0400000000000000000000000000000000000000000000000000050b0d10131516161413110d0c060000000000000000000000000000000000000000000000000000000000080e1020202020202020201f0902000000000000000000000000000000101c3043546277889eabbccfd1c0b49f8b79635645311d100b20354b6073879db2c6d7c8b4a28f7a644f3d2c1a0000000000000000000000000000000002131c3043546175869ca7b8b5a4998372604a4130364c61768baabbb9a48e79644f392a3b53687d93a8c9b19c86715745321e090000000000000000000000000000000000000000000d18202d363a474c535861666a6d70717271706e6b666158524b4538312719100200000000000000000000000000000d23384d62788dabbccfc2ad97828b9fb4c4ccb8a796816c5b493521110000142a3f54697f94a9bed1bba6917c66513c2711000000000000000000000000000000000000000000060b0d11141516161513110e0b080100000000000000000000000000000000000000000000000000000000000000000000070c0e191918140b09020000000000000000000000000000000000000000000000000000000000000000060c0e1314110b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20262b2d2e2e2e2e2e2e2d211f170b000000000000000000000000000000000000000000070b1019202226292a2b2b292826232019150d0b05000000000000000000000000000000000000000000000003111c23253535353535353535341e160a0000000000000000000000000000001325364759667c8d9fb5c1d2cebaa99b8674604b3e2e1b1a2d3d51667c91a5b6cad2c2b09a85705c4b371f0f00000000000000000000000000000000000114263646576378899eaabbb3a195806b5f4d3e364b60758ba8b9b9a48f79644f3a253a4f647a8fa4b9b49f8a76604b36210b0000000000000000000000000000000000000000000005101b222933373a474c5155585a5c5c5c5b5855514c473a3631271d1509000000000000000000000000000000000b20364b60758a9fb4cacab59f8a9fa9bacdc2b39e8976614c3d2c1a03000012273c51677c91a6bcd1bea9947e69543f2914000000000000000000000000000000000000080e1019202326292a2b2b2a292623201d140c0a040000000000000000000000000000000000000000000000000000000000010f1a21242e2e2e29201d150a0000000000000000000000000000000000000000000000000000000000050f1a2123282926211e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d182530353b4042434343434343433633291b0b00000000000000000000000000000000000108131c20252b34383b3e3f40403f3d3c38352c2a2220190e0802000000000000000000000000000000000000000011212e373a4a4a4a4a4a4a4a4a4932281a0a000000000000000000000000000008182a3b4c5e6c8196a3b5c6d7c7b5a395806b5c4b392821364a5b6f849aafc3d4c9b5a4907b66513e2e1b0100000000000000000000000000000000000008182939495a657b8c9fb4bdaf9e927d675c4a3b455674899eb4baa5907a65503b25374d62778ca2b7bcab8e78634e39230e000000000000000000000000000000000000000000000000070c171f212a33373c4043454647474643403b373329201d150a010000000000000000000000000000000000081d31445573889db2c8cfbcab9fabbac7c9b6a4937e695847331f0f0000000f243a4f64798fa4c7d7c1ab96816c56412c170100000000000000000000000000000009111c23252b35383b3e4040403f3e3b38353126221f180c070000000000000000000000000000000000000000000000000000000f1f2d36394343433f3632281a0a0000000000000000000000000000000000000000000000000000000d181f2c36393e3e3b3632281a120400000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2a36434a505558585858585858584c463a29170400000000000000000000000000000008141c2530353a3c484d50535556555453514d493c3f38352b201d1509010000000000000000000000000000000000081c2e3f4b4f60606060606060605d453828160200000000000000000000000000000d1d2f404b6074859ba8bacdd2c2b49f8c7a645745322a3a4e63798ea2b4c8d4c4b19c8673604a35201000000000000000000000000000000000000000000b1b2c3c4b5d687e939fb1bcb49f8b7a645948385d72879db2bca7927d67523d28364c61768ba1b6c9a48f7a654f3a25100000000000000000000000000000000000000000000000000000040a0c171f21262a2e30313231302e2b26211f170c090200000000000000000000000000000000000000021527375b70859ab0c5dac9bcb5bcc9d0bfb19c8674604b3a2917010000000d22374c62778ca9bacdc3ae99846e59442f19000000000000000000000000000005121d242e373a3c494d51535556555453504d4b443737342a221b1005000000000000000000000000000000000000000000000000071a2d3d4a4e585858544b4538281502000000000000000000000000000000000000000000000000000d1d2a343d494e5354514b4538302212040000000000000000000000000000000000000000000000000000000000000000000000000000000a1b2a3b485460656b6d6e6e6e6e6e6e6d615846331f0a00000000000000000000000000010f18263036434a50575a6265686a6b6b696866625a5a544d483c3631271c1408000000000000000000000000000000000e23374b5d6575757575757575756f5645321e09000000000000000000000000000000121d31455663798a9fb4becfcebbaa9c8675604b3f3347586d8297acc0d1cbb7a6927d685443301c070000000000000000000000000000000000000000000e1e2f3f4e606c8197a2b4baa99d8877625645596e8399aec0ab95806b563c2b364b60758ba0b5baa5907a65503b25100000000000000000000000000000000000000000000000000000000000040a0c1115181b1c1d1c1b1916110c0a040000000000000000000000000000000000000000000000182e43586d8398adc2d8dacfcacfd8c8b3a1907b665544311c0c000000000b1f34475974899fb4c9c6b19b86715c3a2917040000000000000000000000000d182030383f4b50585a6266696a6b6b6a6866636055534c473a362d20190d00000000000000000000000000000000000000000000000c21364a5b636e6e6d69605645321d0e0000000000000000000000000000000000000000000000000b1b2a3b484c5b6368696660564d40302212000000000000000000000000000000000000000000000000000000000000000000000000000003162839485962727b80828383838383838276614c36210c0000000000000000000000000114202d36434b5460656d72777b7e7f80807e7d7b78736f6a625a534b44373026180f00000000000000000000000000000010253a4f657b8a8a8a8a8a8a8a8d75604b36210b00000000000000000000000000000002152738495b687e93a0b2c3d4c8b6a496816c5d4b3a4c61778a9fb4c9d6c5b29d8774604b3625130000000000000000000000000000000000000000000000112131424b6073849aa5b6b7a69b8575604b53697e93a8c0b09b85705a4935374c61768ca1b6c5a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac0d5ece3dfe2cebbaa99846f5e4c372715000000000005182a3b5c72879cb1c7c9b39e89745846331f0a0000000000000000000003111d2b34404c515d656d73787b7e7f80807f7e7b78756f6961594e4a3e342b1d13010000000000000000000000000000000000000000000e24394e63798283837f74604b3c2b190500000000000000000000000000000000000000000000031629394859626f797d7e7b75665e4d402f1909000000000000000000000000000000000000000000000000000000000000000000000000000d1e3245576277859095979898989898947f695846331f0a000000000000000000000008141c323e4a546067737a82878d90939495959492918d88847f78706860554b43362d1c1308000000000000000000000000000d22384d62778daa9f9f9f9fab8d78634d38230e000000000000000000000000000000000a1a2c3d4e606e8398a5b7c8d3c2b59f8d7b655846556a7f94a9bacdccb8a7947e695544311808000000000000000000000000000000000000000000000003141d3144556176879ca8b9b5a398826e614e63788da2b4b49f8c78624d433d4f64798fa4b9b8a78d78624d38220d0000000000030d13152020202020201f1a0e0c0600000000000000000000000000000000000000000002090b181f202020202020191710070000000000000000000000000013283e53687d93a8bdd2e8f8e8d5c5b49f8b79634e402f19090000000000001a2f445a6f8499afc4ccb9a78b76614c36210c0000000000000000000412212e3b484d5e66717a82888d90939595959493908d89847e776e645c4d483b311d150900000000000000000000000000000000000000000d22374d62778c989894836e5a4835200b000000000000000000000000000000000000000000000a1e3246576277848e939390887c665e4c3727150200000000000000000000000000000000000000000000000000000000000000000000000d1d30404b6075869ba3aaadadadada6998372604a3a2917040000000000000000000008182630424f5c64737d878f979da5a5a8aaabaaa9a8a6a79e99948c857d746760544a3d3025180a0000000000000000000000000b20354b60758a9fb4b5b5b5a5907b65503b261000000000000000000000000000000000000f1f31424c6176879daabbcecfbcab9d8776614c6074879db2c7d7c7b39e8976614b3727150000000000000000000000000000000000000000000000000001152737475863798a9eabbcb2a0947f6a5e5b6f849aafbcab98826d6054525b6a8095aabfb39e8874604a35200b00000000071520272a353535353535342f2320190e000000000000000000000000000000000000000a151d202d343535353535352e2b24180a00000000000000000000000010263b50657b90a5c9daecf5e0ccb8a796816c5b4935221100000000000002172d42576c8297acc1d6c5a38e79634e39240e00000000000000000312222f3f4b59626f7c868f979da6a6a8aaabaaa9a8a5a79e99938b83796e62594e413127190a000000000000000000000000000000000000000b2034485973889dada18d78624d38220d020000000000000000000000000000000000000000000c21364b61758699a1a8a9a69d8d7c665544311d080000000000000000000000000000000000000000000000000000000000010000000008182a3b4c5e6c8197a4b5c1c2c3bcab9d8877615443301b0b0000000000000000000001142636434b61697a85929ca4acb2b7c3bdbfc0c0bebdc5b8b3afab9f9a92877d73635b4a4336271a0b0000000000000000000000081d31445572889db2c7cabda8927d68533d2813000000000000000000000000000000000001131f334758657b8c9fb4c0d1c9b7a597826d5e677c91a5b7cbcdbaa995806b5746321909000000000000000000000000000000000000000000000000000009192a3a495b667c8d9fb4beb59f8d7c665c667b90a1b3b2a0947f7369676b79899eb3c2ae98836e5443301c07000000031525333c3f4a4a4a4a4a4a494438352c1e0e00000000000000000000000000000000000a1a27313642494a4a4a4a4a4a43403628180700000000000000000000000e23384e63788dabbccfe3e5d3c2b39e8976614c3d2c1a0300000000000000152a3f546a7f94a9bfd0bba6917b66513c2611000000000000000011212f404c5d657783919ca4adb2b7c4bebfc0c0bfbdc5b9b3aeaa9f988c837868604b4437281a0a00000000000000000000000000000000000007192b3b596f8499aea6917c67513c271d150e0c06000000000000000000000000000000000000152a40556a7f95a4b3bfc4b7ab9d8874604b36200b0000000000000000000000000000000000000000000000050b0d10131516161413111325364859667c919fb1c2d1d1c1b49f8d7b6559473625130000000000000000000003111c304354606c7e8c9ba3b1b6c2c7cad4cdc9c7c5c5c7c9ccc8c9bcb5b0a59d9286796960544538281b0b00000000000000000000011426375b70859ab0c5d5bfaa95806a55402b150000000000000000000000000000000000000417293a4b5d6a8095a2b4c5d4c3b1a0917c6670859ab0c3d4c9b49f8a77624c392916000000000000000000000000000000000000000000000000000000000c1c2c3d4c5e697f94a0b1bcab9e8a7a645e6f8399a6b7af9d94857f7c80899ea8b9b5a4907b6651362513000000000d20334350556060606060605f594d493c2c1d0c00000000000000000000000000000002152738454b585e60606060606058534636241000000000000000000000000b20364b60758a9fb5cadfdecab6a4937e695847331f0f000000000000000012273d52677c92a7bcd1bea8937e69533e2914000000000000000d1d2e3f4c5e667b8999a1b1b5c2c8cbd4d3dacfcac9caceccc9c8bbb4ab9f98897d6c6055453828190900000000000000000000000000000209101b222a40556a7f95aaab96806b563636322823211a0f09000000000000000000000000000000001c31475c71869cb1c2d0d5c9b7a68f7a65503a25100000000000000000000000000000000000000000070b1019202226292a2b2b2a2826233043546277899eb3bdced6c5b4a395806b5d4b3a2a180800000000000000000000112132434b607281939faab5c1cad3ccc8c7bab4b1b0b0b1b4bac7c5c8cac3b6b2a49c8b7e7260564639281b0a00000000000000000000182e43586d8398adc2d7c2ad97826d58422d18000000000000000000000000000000000000000c1c2e3f4b6073859ba7b9cccebeb39e88777a8ea2b4c8cfbcab97816c5947341b0b00000000000000000000000000000000000000000000000000000000000f1f2f404f616d8297a2b4b9a89d8777616177889da6b6afa39b9492959ea8b9baa99c8672604a35200b0000000013273c50616a757575757575746f635a493b2a18040000000000000000000000000000091d314556606d747575757575756e6453402b170000000000000000000000091d32455673889db3c8ddd0bfb19c8674604b3a2a1701000000000000000010253a4f657a8fa4c7d8c0ab96816b56412c1601000000000005182b3b4b5d667c8b9ea7b3bfc9d2d7cdc9c3c9bcb5b4b4bbc8bdc3c9c9bcb5a79e928173605645372715020000000000000000000000000a161e212e373a3950667b90a5af9a856f544f4b453839352c241d120700000000000000000000000000001e34495e73899eb3c8dee7d4c4a7927d67523d281200000000000000000000000000000000000108131c20252b34383b3e3f40403f3e3c383d4a60728499a7b8cce0ccb9a79b8573604b3f2f1c0c000000000000000000000a1a2e3f4f616d81979fb4bbc8d2cfc5b8b3aba99f9c9b9b9c9fa9a8b0b4c0c7cac2b5a99f93827461574639281603000000000000000000162b40556b8095aac0d5c4af9a856f5a3626140100000000000000000000000000000000000000111d3144556278899eb3bececbb8a698828298adc0d1cab49f8c78634d3b2a180000000000000000000000000000000000000000000000000000050b0d141a1d2232434b6074849ba5b7b7a59b847460647a889ca4b4b5b0a9a7aab3b9b5a99f8b7a645443301c0700000000152a3f556a7f8a8a8a8a8a8a898478635947341f0b00000000000000000000000000000b20364b607482898a8a8a8a8a8a826e58432e190000000000000000000000021528385b70859bb0c5d8c8b3a1907b665544311c0c0000000000000000000d22374d62778ca9bacec3ae98836e59432e190000000000000820344859657b8b9fa9b8c5d0decfc7bab4aea6ab9f9e9faaa3a8aeb4bbc8c5b9b39f978374605544311d080000000000000000000004131a2832363e4b4f565761778ca7b39e897367646056554e493d382f211a0f010000000000000000000000001d32475d72879cb2c5d5dacdb9a8907b66513b26110000000000000000000000000000000008141c2530353a3c484d50535556555453514d4a5b697e93a1b3c5d5cebdb39e897862554431211100000000000000000000021628384b5d6a7f949fb1bdced8c9bcb4a79e958f8a87868687898d939aa2afb3bfccc7bab4a0988375615745321e1503000000000000000013283e53687d93a8bdd2c7b29d87725443301c080000000000000000000000000000000000000001142637485a677d91a0b1c2d3c4b2a0988b9fb4c9d0c0ae98836e5a49351d0d000000000000000000000000000000000000000000000000000d181f22292f3233323145566277879da8b9b4a297826d61647986949ea8adb1b3b3b1ada49c8b7d675c4a36251300000000000c21364c6176899e9f9f9fa89e998877614c3a29170400000000000000000000000003162839556a80959ea79f9f9f9f937e69533e2914000000000000000000000000192e43586e8398adb8c8bbaa99846f5e4c372715000000000000000000000b20354b60758a9fb4b8b8b09b86715b3928160300000000081830404d6277889da9bac7d5dacfbfb2a99f98918d8a898a8b8e93999faab4bbc8bdb1a1998374604b36200b0000000000000000000c171f3038454b535c646b71767b899eb3a7947f7c7975706a635b514c40362d1f14010000000000000000000000172c42576c8197a7b8c4c9bcb49e8a76614b36210c0000000000000000000000000000010f18263036434a50575a6265686a6b6b696866625a63798b9fb4bfd0d2c2b19f917c675a483727150300000000000000000000091e324556657b8c9fb4bdced8c7baab9f97888079757270707275787e858e99a1b3b9c5cdbfb2a29a8475604b43332111000000000000000011263b50667b90a5bbd0c9b49f8a75604b35200b000000000000000000000000000000000000000009192b3c4d5f6d8297a4b6c7cfbeb2aa9faabbcec8b4a28e7a644f3c2c1900000000000000000000000000000000000000000000000008131c2a34373e4447494744384759647a8a9eabbcb1a0947f695e63747f8991989b9d9e9c9891867b675f4d3e2d180800000000000a1e3346576b8095a8b9c6b9b4a696816c5846331f09000000000000000000000000091e32465771869cb1b9c5b5b9a78e79634e39240e000000000000000000000001162b40566b8095a3a3a3aa9f8b79634e402f190900000000000000000000081c30435472879ca3a3a3a39e88735746321e09000000001325364c5e6f8399a6b8c7d7dac9bcb5a1998a837c7875747576797e838b969faab6c2b8a79b8675604b36210b00000000000000000e1c2a33414d566068727a80868b8f9ea7b9af9d94918e8a85807970665e4e4a3d321d1409000000000000000000000d22384d6278899da6aeafab9f947f6a5746321e0a000000000000000000000000000114202d36434b5460656d72777b7e7f80807f7d7b787474869ca9bacdd7c7b5a497816c5f4d3c2b190900000000000000000000031729394b6074869cabbccfd8c8baa99f8d81766b6460555b5b54606369707984919ea7b7c3cfc0b3a298826e61503f2e1909000000000000000e23394e63788ea3c5d5cebaa98c77624d37220d0000000000000000000000000000000000000000000e1e30414b6175869ca9bacecfc8bbb4bbc8d2c1af9a846f5c4a361e0e0000000000000000000000000000000000000000000000091825303b474c545a5c5e5c5a544d4a5c667c8d9fb5beb49f8d7c665b606a767c8386888987827c73655d4d41302010000000000000031729394c61768a9eb4c7cdc4b49e8976614c3727150100000000000000000000000c21364b61768b9fb4cad6c9b39e8974604b35200b00000000000000000000000013293e53687e8d8d8d8d8d8b7e695b493622120000000000000000000000011426365a6f848d8d8d8d8d8d8b76614b36210c000000071c304354667c91a1b3c4d5e3cfbcab9f9383786e67626056576164686e77818b9ca4b2aa9e8978625745321e09000000000000000e1f2c3a474c5f67757e878f969b9fabb3b9c5bbafaaa6aa9f9b958e857b70635b4f42312619090000000000000000000b2035485a657b8893999a968c8072604a3929160300000000000000000000000008141c323e4a546067737a82878d90939495959493918d89879ca4b5c7d7cdbaa99c8675604b41301e0e00000000000000000000000a1e3346576a7f94a4b6c9d9cebbaa9f8b7c6c61584f4b443736434b4e535c646f7d899da5b7c3d0c0b2a0947f6a5d4b372715020000000000000b21364b60768ba7b8ccd8c7a48f7a644f3a250f00000000000000000000000000000000000000000000131e324657647a8b9fb4c8d8d8cec9ced8c9b5a3907b66503e2d1b000000000000000000000000000000000000000000000009192636434a5962696f7273716f6a635a4e5e6a7f95a0b2bcab9e8a7963585761676e717373716d6660554b3f30231202000000000000000b1f3347586b8096a9bacdccb9a8947f695544311d08000000000000000000000010253a4f657a8fabbccfd9c4ae99846f5443301c080000000000000000000000000c21364b617578787878787669604e3d2c1a040000000000000000000000000d22374d62777878787878787973604b35200b0000000b20354a6073869cb1bfd0e2cebdb59f8d7e6e6259514d4b45464c4e5359626b798698a09f8c7b655a48392816030000000000000e1e2c3d4958616e7d87939ca4abb1b5bcc9ccd6ccc2bfc8bbb4b0aaa29b90847969604b4437261401000000000000000005192b3c4b5d65767e8484817a6b605443301b0b00000000000000000000000008182630424f5c64737d878f979da5a5a8aaabaaa9a8a6a79e9ca4b5c2d2d0bfb49f8a796356453223120000000000000000000000000c21364b6176899eb3c3d3d3c2b49f8c7c665e4c473a353126263035383d4a4e5f6779879da5b7c6cfbeb49f8c7b655544311d0c000000000000091e32455773899eb3c8d1bca7917c67523c271200000000000000000000000000000000000000000000031628394a5c697f94aabbcee2e2dfe2dbc6b19b86715e4c382010000000000000000000000000000000000000000000000114263744546069777e84878887847f786e635b616e8298a3b5b9a89c877661554b52585c5e5e5c58514b44372e211204000000000000000004172a3a4c62778a9fb4c8d6c6b29d8774604b352010000000000000000000000014293e54697e93a9c9d9d7c7a9947f6a54362614010000000000000000000000000a1e33465761636363636361574e42311f0f000000000000000000000000000b203448596263636363636363605544311d0800000317293951667c91a4b5c9ddd4c4b19f927e68604d483b3836313336393b484c5b637582908f7f695d4b3c2b1b0a00000000000006192c3c495b637683929da5b1b6c2c6cac8c2c3c6cfd1c8c5bec3c5c0b4b0a29a8b7e6c605544311d150300000000000000000e1e2e3f4b5761696e6f6c645c4a4336251300000000000000000000000001142636434b61697a85929ca4acb2b7c3bdbfc0c0bebdc5b9b3b1b6c2d2dcc7b3a1937e685b4a38281604000000000000000000000006192b3c53687e93a7b8ccdecab6a495806b5e4c403329201d14141c20232d36414d5b6377879da8bacdcfbcab9c8674604b3a2a17040000000000031628395c71869bb1c6d4bea9947f69543f2a1400000000000000000000000000000000000000000000000b1b2d3e4c61768a9fb4c9dff4ece8d3bea8937e695746331e1301000000000000000000000000000000000000000000081d31445560727f8a93999c9e9c99948d837969616075859ba6b7b6a59a8473604b424346484947433c353126191003000000000000000000000c1f3448596c8196aabbcecab7a5917c67523f2e1b0805050505050505050503162839586d8298adc2d7cdbaa98f7a644f3a250f0000000000000000000000000003172939464b4e4e4e4e4d4b4639312414010000000000000000000000000005182b3b484d4e4e4e4e4e4e4e4b443727150100000a1e3346576e8399aec2d2dfcbb7a697816c604e42342b22201d1e21242a343d4a57616e7b7a69614f3f2f1e0e000000000000000c2035495a63798799a1b2b7c3cacac5b8b3adaeb2bec0b4afa9adb3b9c5c0b4a99f938173604b4333211100000000000000000010212e39464c54595a574f4a3e30251808000000000000000000000003111c304354606c7e8c9ba3b1b6c2c7cad4cdc9c7c5c5c7c9ccc9c7cad3e0d9c4af99846f604b4539281b0a00000000000000000000000b2035485a71869bb1c5d5d6c5b19c8674604b40301f170c080101080b0f1a21303c495963798a9fb4c1d1c9b5a4947f695847331f0a000000000000192e44596e8399aec3d6c1ac96816c57412c170200000000000000000000000000000000000000000000091e3246576a7f94aabbcee2d9d7d9dcc7b29c8775614b42311f0f0000000000000000000000000000000000000000071a2d3d4b607382949ea8afb1b3b1afa9a1998b7f6c606277889da9bab4a297816c604e3f2f3334322d27201d140900000000000000000000000005182a3b4d62788b9fb4c8d4c3b09b85705d4b37221a1a1a1a1a1a1a1a1a1a1a1e32455771869cb1c6dcc9b49f8a75604b36200b00000000000000000000000000000b1b29333638383838383632291b14060000000000000000000000000000000d1d2b34373838383838383835312719090000000c21364c61768a9fb4c9dfd7c6b29d8776614c423120190d0b090a0c0f181f2d39464b5d65655d4f4232211100000000000000000e23384d6378889ca5b3bfcacfc3b7b2a79e9898a0b2b4a29a94989ea7b2b6c3bab49f97826d61503f2e1909000000000000000002101b2933363e44454139362d1c1308000000000000000000000000112132434b607281939faab5c1cad3ccc8c7bab4b1b0b0b1b4bac7c5c8d1dcdfc9b49f8b7e6e60574539281a0a000000000000000000000d23384d62788da3b5c9e0ccb9a7927d685645322212040000000000000007121e2c3b4a5b687e93a3b4c8d2c2b49e8a76614c382715020000000001172c41566c8196abc1d6c4ae99846f59442f1a00000000000000000000000000000000000000000000021628384b6175889eb3c8d8cec5c2c5cecab6a598826d604e3d2d1b0b000000000000000000000000000000000000000c21364a5b6a8095a0b4b9b4b0a8a7abb2b3aa9f94817260647a8b9fb4bcb19f937e685d4b3c2c1b1c18110b080100000000000000000000000000000d2034485a6d8297aabbcec8b4a38f7a644f3c2b2f2f2f2f2f2f2f2f2f2f2f2f364b60768a9fb4cadac5af9a85705645311d090000000000000000000000000000000b171e212323232323211e160b0000000000000000000000000000000000000d18202223232323232323201d15090000000011273c51667c91aabbcee1cdb9a8937e69574633231405000000000000050f1b29333f4b504f4b3f3224140300000000000000000d22374c6277889da9bacec9bcb4a59d9288838298aeaf9a847f8389929da5b2bebdb1a0957f6a5d4b372715010000000000000000000b171e21292f2f2c24221b10000000000000000000000000000a1a2e3f4f616d81979fb4bbc8d2cfc5b8b3aba99f9c9b9b9c9fa9a8b0b4c0c7d0cebbaa9f9382756057453828160300000000000000000014293e53697e93a8c1d2dec9b39e8975604b38281504000000000000000000000e1d2d3d4a6072859bb0c1d1cdb9a8947f6a5645311d09000000000014293f54697e94a9bed3c6b19c86715c3a291704000000000000000000000000000000000000000000091e324556697f94a7b8cccebdb1acb1bdcec3b2a0937e685b4a392816030000000000000000000000000000000000021628384e63798c9fb4beb2a29a9392959da6b3b49f947f695d677d929eb0bdb49f8c7b655a493a29190900000000000000000000000000000000000005192b3c4d63788b9fb4c9d1c1ae98836e5a4844444444444444444444444444444f647a8faabbced9c8aa95806b553827150200000000000000000000000000000000030a0c0e0e0e0e0e0c0a030000000000000000000000000000000000000000050b0d0e0e0e0e0e0e0e0b08010000000002172c41576c8196acc8d8dec9b49e8a76614c392917050000000000000000000b171e2f383b3a372e2114060000000000000000000b1f344859647a8b9fb4bdb7ab9f96877d756d7a8faab09b86706e757d8798a0b2bfbeb49f8c7b655544311d0800000000000000000000030a0c14191a170f0d0700000000000000000000000000021628384b5d6a7f949fb1bdced8c9bcb4a79e958f8a87868687898d939aa2afb3bfccc8bbb4a0988475605645321e14020000000000000001142636586d8398adc2d8d7c1ac97826c5645321a0a0000000000000000000000000f1c304354657a8fa3b4c8d7c6b39d8874604b36200b000000000012273c51677c91a6bcd1c9b39e89745846331f0a0000000000000000000000000000000000000000021527374b6075889db3c5d4c3b19f979fb1becfbeb49f8a79635746321e130100000000000000000000000000000000091e3245566d8298aabbb2a199857e7d80889aa1b3b49f8c7b655f6b8095a1b3bbaa9e8978635846372614010000000000000000000000000000000000000d2035495a6d8298abbccfcab49f8b78625a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a697e93a8c8d9cebbaa907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395b70859ab0c5dad7c2ad97826d5746331b0b000000000000000000000003111c232525231c11030000000000000000000005182a3b4b5c687e939faea59d8c8075686060768a9fb49f8a75606067758298a1b3c5bcab9c8674604b352010000000000000000000000000000004050200000000000000000000000000000000091e324556657b8c9fb4bdced8c7baab9f97888079757270707275787e858e99a1b3b9c5cebeb2a29a8474604b4332201000000000000000081c30435472879cb1c7dcd8c8a7927d685238281600000000000000000000000000001325364b5d70859bb0c6d7cbb7a6927d675239281603000000000f243a4f64798fa4c7d7ccb9a78b76614c36210c0000000000000000000000000000000000000000081d314455697e93a6b7cbcab7a5978297a0b2c4cdbaa99c8675614b41311f0f000000000000000000000000000000000b21364b60758a9fb4c2ae99837368676b76839aa6b7aa9c86726060728399a4b5b8a79c8676615544311d1303000000000000000000000000000000000006192c3c4e63798c9fb5cacebbaa96816f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f8297adc2d7cab49f8a76614b36210c000000000000070d0f2020202020202020202020202020202020202020202020202020202020202020202012100a010000000000000000000000000000000000000a1e33465774899eb3c9ded7c7a8927d68533929170000000000000000000000000000080e10100e08000000000000000000000000000d1d2e3e4e606c81929895877b6b60564b5671869cb1a98e79644f5660728399a7b8c9b5a4927d68523e2d1b0700000000000000000000000000000000000000000000000000000000000000031729394b6074869cabbccfd8c8baa99f8d81766b6460555b5b54606369707984919ea7b7c3cfc0b4a299836e614f3f2e19090000000000000b20354b60758a9fb4cadfcebbaa8e78634e39230e000000000000000000000000000008182e3f52677d92a8bacdd5c4ae99836e5745321e09000000000c22374c61778ca9bacdd6c5a38e79634e39240e00000000000000000000000000000000000000011426374b6074879db2c4d5c6b29d87748298a6b8cbc7b6a497826d5f4e3d2c1a0a00000000000000000000000000000010253a50657a8fa9bab6a48d78625452576175889db2b5a4917c67546175869ca7b8b6a4998373604b413121100000000000000000000000000000000000000e2136495b6e8399aebfd0c8b49e8a848484848484848484848484848484848484899eb3c8dbc6b09b86715746331e0a0000000002101b22243535353535353535353535353535353535353535353535353535353535353535353527251e130500000000000000000000000000000000000c21364c61768ba7b9cce0cdbaa98e78634e39230e000000000000000000000000000000000000000000000000000000000000000000001020314251636c7d837f76655d4b4538576d8297aca8937d685345546176899eb3c8c2b19c86715c4a36220d000000000000000000000000000000000000000000000000000000000000000a1e3346576a7f94a4b6c9d9cebbaa9f8b7c6c61584f4b443736434b4e535c646f7d899da5b7c3d0c0b2a1947f695d4b3727150100000000000d22374d62778caabbcedfcab49f8a75604b35200b0000000000000000000000000000001021364b61768a9fb4c9dec9b49f8a76604b36210b000000000b1f34475974899fb4c9d0bba6907b66513b261100000000000000000000000000000000000000081d314455687d92a5b7cacdb9a8947f6976889eb3becfc2b1a0927d685b4938281603000000000000000000000000000014293e54697e93a9c7b19c87725a49394657697e93abbcb09b85705a576278899eaabbb3a196806b604e3f2e1e0e0000000000000000000000000000000000061a2c3d4f64798ea1b3c7cdb9a89e9999999999999999999999999999999999999ea7b8ccd6c1ab96816c56392917030000000010202d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c3930231301000000000000000000000000000000000e23384e63788da3c5d6dfc9b49f8a74604a35200b000000000000000000000000000000000000000000000000000000000000000000000213243444515f676e6a61574b3f323e53687e93a8ac97826c573846586a7f95aac8c9b5a48e79644e39240f000000000000000000000000060c0e1314110b0902000000000000000000000c21364b6176899eb3c3d3d3c2b49f8c7c665e4c473a353126263035383d4a4e5f6779879da5b7c6cfbfb49f8c7a645544311d0c00000000000f24394e64798ea3c8d8ddc8b39e88735443301c080000000000000000000000000000000a1e3246576f8499aec4d9cdbaa9917c66513c26110000000004182a3b5c72879cb1c7d3bea8937e69533e2914000000000000000000000000000000000000001325364b6074879cb2c3d4c9b49e897661667c91a0b2c4cebeb49e8a79635645321e130000000000000000000000000000152b40556a8095aabfaf99846f5a3c2c394c61778b9fb4b5a38d78624d5a657b8c9fb4bdb09e927d685d4b3c2b1b0b00000000000000000000000000000000000f22364a5c6f8499afc0d1c6b9b4afafafafafafafafafafafafafafafafafafb3b8c5d6d3c2a6917c66513c271100000000071b2d3e4a4f60606060606060606060606060606060606060606060606060606060606060606060524d41301e0a000000000000000000000000000000000f24394f64798ea4b9ceddc8b39d88735443301c07000000000000000000000000000000000000000000000000000000000000000000000006162634414d5259554c46392e24394f64798ea9b19b867156453a4e63798eaabbcec2aa957f6a55402a1500000000000000000000050f1a2123282926211e160a000000000000000006192b3c53687e93a7b8ccdecab6a495806b5e4c403329201d14141c20232d36414d5b6377879da8bacdcebbaa9c8673604b3a2a1804000000000f253a4f647a8fa4b9cfdcc7b29c87725d362614010000000000000000000000000000000316293954697e94a9c9dad7c7ab96816c56412c1700000000001a2f455a6f849aafc4d5c0ab96806b56412b16010000000000000000000000000000000000071c304354677d92a5b6cacfbcab96816c585e6d8298a6b7cbcdb9a89c8675604b41301e0e00000000000000000000000001172c41566c8196abc1ae99836e59442e34475972879cb1c1a8927d68534b5d687e939fb0bcb49f8b7b655a483929180800000000000000000000000000000000071b2d3e4f647a8fa2b4c8d7cdc9c4c4c4bfbfbfbfbfbfbfbfbfbfbfbfbfc0c4c8ccd6decab6a48c77614c37220c000000000d22364a5c7075757575757575757575757575757575757575757575757575757575757575757575675f4d3925100000000000000000000000000000000010253a4f657a8fa4bacfdcc6b19c87715c36251300000000000000000000000000000000000000000000000000000000000000000000000000081623303a3d43403633291b20364b60758a9fb49f8a75604b364a60748a9fb4c9c4af9a846f5a452f1a0000000000000000000d181f2c36393e3e3b3632281a12040000000000000b2035485a71869bb1c5d5d6c5b19c8674604b40301f170c080101080b0f1a21303c495963798a9fb4c1d1c8b6a4937e695847331f090000000010253a4f657a8fa4bacfdbc6b19b86715c46311c00000000000000000000000000000000000f253a4f647a8fabbccfdac5af9a85705a3b2b180500000002182d42576d8297acc2d7c3ad98836e58432e190000000000000000000000000000000000000b20354a6073869cb1c3d3cab49f8c78624d4c6176889db2bdcec6b5a497816c5f4d3c2c1a0a000000000000000000000000152b40556a8095aabfaf99846f5a442f2a3b596e8399aec1ab96816c563f4e606c8196a1b3baa99e887862574636251300000000000000000000000000000000001022374b5c6f849aafc1d1e1d4c4b7b3aaaaaaaaaaaaaaaaaaaaaaaaaaabb0bccddfdcc7b19c87725947341f0b000000000f24394f647a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523c2712000000000000000000000000000000000f243a4f64798fa4b9cedac5b09b85705b46301b000000000000000000000000000000000000000000000000000000000000000000000000000005131e25282e2a211e170b1d31445570869bb0aa8f79644f3a435473889db3c8c7b29d88725d38281602000000000000000d1d2a343d494e5354514b45383022120400000000000d23384d62788da3b5c9e0ccb9a7927d685645322212040000000000000007121e2c3b4a5b687e93a3b4c8d3c2b39e8977614c372715020000000e24394e63798ea3b8cedcc6b19c87715c47321c00000000000000000000000000000000000c21364b61768b9fb5cadec8b39e8973594834200b00000000152a40556a7f95aabfd4c5b09b85705b3827150200000000000000000000000000000000091d2f4051677c91a4b6c9d2c1ae99836e5a494658667b909fb1c3d2c2b19f917d675a4938281502000000000000000000000014293e53697e93a8beb09a85705b3a2a2c42576c8197acc1ae99846e5944424b6073839aa4b6b8a69c8675615443301c1302000000000000000000000000000000081b2e3e50657b90a3b4c8ddcbb7a69d95959595959595959595959595969eb0c4d8d7c2ac97826d573b2a1804000000000c21374c61778ca79f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f947f6a543f2a15000000000000000000000000000000000e23394e63788ea3b8cddbc6b09b86715b46311c000000000000000000000000000000000000000000000000000000000000000000000000000000010a101219150c0a0302152737576c8197aca8937e6853364a5c74899eb4c9cab49f8a755645321e090000000000000b1b2a3b484c5b6368696660564d40302212000000000014293e53697e93a8c1d2dec9b39e8975604b38281504000000000000000000000e1d2d3d4a6072859bb0c1d1ccb9a7957f6a5544311d080000000d22384d62778da2c7d7dcc7b29c87725d39281603000000000000000000000000000000000a1e33465773889db3c8ddccb8a78c77624d37220d0000000012283d52677d92a7bcd2c8b29d88735645311d09000000000000000000000000000000000f24384c5e71869bb1c2d3c9b5a38f7a654f3c3a4c5e6d8197a5b7c9cebdb49e8a78635645321d12000000000000000000000011273c51667c91a6c2b29d88735847332b41566b8096abc0af9a856f5a453144556176869ca7b9b5a4998372604a41302010000000000000000000000000000000001023374b5d70859bb0c1d2c8b39d88808080808080808080808080808096abc0d5d4c4a7927d67523d281200000000000a1f33475874899eb3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ac97826c57422d17000000000000000000000000000000000d22374d62778ca2c5d5dcc6b19c87715c3827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000013283d52687d92a7ad97826d584554647a8fa8b9cdcebbaa8b76604b36210b0000000000031629394859626f797d7e7b75665e4d402f190900000001142636586d8398adc2d8d7c1ac97826c5645321a0a0000000000000000000000000f1c304354657a8fa3b4c8d6c5b39d8874604b36200b0000000c21374c61768ca9bacddec9b39e89745745321e0900000000000000000000000000000000031729395b71869bb0c6dbd5c5a48f79644f3a240f0000000010253a50657a8fa5c9d9cab59f8a75604b36200b000000000000000000000000000000081c2f3f51667b90a3b5c9d4c3b09b85705d4b372f404b6175879dabbccfccb9a89b8574604b40301e0e000000000000000000000d22374c62778ca4b6b7a68c76614c372b41566b8096abc0af9a856f5a45263746586379899eaabbb3a195806b5f4d3e2d1d0d000000000000000000000000000000081c2f3f51667b90a3b5c9cab49f8a786a6a6a6a6a6a6a6a6a6a6a6a7a8fa4bacfcbb7a68d78624d38230d000000000004172a3a586e8398aabbcecacacacacacacacacacacacacacacacacacacacacacacacacacac4af9a846f5a362513000000000000000000000000000000000c21364b61768ba7b8ccddc8b39d88735645311d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea8b19c867157566072849aafc6d6cbb8a68a75604b35200b00000000000a1e3246576277848e939390887c665e4c372715020000081c30435472879cb1c7dcd8c8a7927d685238281600000000000000000000000000001325364b5d70859bb0c6d7cbb7a6927d67523928160300000b20354b6075899fb4c9deccb9a78b76604b36210b00000000000000000000000000000000001a2f445a6f8499afc4d9d0baa5907b65503b2610000000000d23384d62788dabbccfcfbcab8d78624d38230d0000000000000000000000000000000e23384b5d70859bb0c1d2cbb7a5927c67523f2e1e334657657b8d9fb5c3d3c6b5a396816c5e4d3c2b19090000000000000000000b1f34485971869cb1c4a7927c675241303d576d8297acc2ae98836e59432e293a495b657c8c9fb4bdaf9e927d675c4a3b2b1a0a0000000000000000000000000000001124384c5e71869bb1c2cfbcab96816c58555555555555555555697e93a8bed3c8b29d88735a4935200b0000000000000e23394e63798b9fb4bfd0e2dfdfded1c8c5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b19c87725443301c07000000000000000000000000000000091e32465773899eb3c8decab59f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b20354b6075899eb49f8a766067748298a2b3c7ddc8b39d88735443301c0800000000000c21364b61758699a1a8a9a69d8d7c665544311d0800000b20354b60758a9fb4cadfcebbaa8e78634e39230e000000000000000000000000000008182e3f52677d92a8bacdd4c4af99846f5745321e090000081c30435471869bb0c6dbd6c5a38e79634e39240e0000000000000000000000000000000004192e44596e8399aec3d8d1bca6917c67513c2712000000000b20364b60758a9fb4cadac9a5907a65503b25100000000000000000000000000000081b2e3f50657b90a3b4c8d6c6b29d8774604b35201729394b5d6c8196a4b6c9d2c1b09f917c665a4837271502000000000000000005182a3b556b8095a9baaf9a84705f4a43495b70869bb0c8ab96816c56412c1c2c3d4c5e697e939fb1bcb49f8b7a645948382816030000000000000000000000000000091d2f4051677c91a4b6c9c9b49e8976614c37404040404038586d8297adc2d7c3ad98836e583c2b19060000000000000c2135495b697f94a1b3c4d5e7e3d1c0b4afa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09f8a75604a35200b000000000000000000000000000000031628395a70859aafc5dacfbcab8e78634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c171f2131445570859ab0aa8f7b757d8698a0b2c0d0d3c2ae99846f59362614010000000000152a40556a7f95a4b3bfc4b7ab9d8874604b36200b00000d22374d62778caabbcedfcab49f8a75604b35200b0000000000000000000000000000001021364b61768a9fb4c9dec9b49f8a76604b36210b000001142636586d8297adc2d7d1bca7927c67523d27120000000000000000000000000000000003192e43586e8398adc3d8d2bda8927d68533d281300000000081d31445573889db2c8d2bda7927d68523d281300000000000000000000000000000e22374b5d70849aafc1d1cdb9a8947f695544311d0b1b2e3f4b6075869cabbccfcdbdb39e8978625544311d120000000000000000000d22374c62778a9fb4b4a2917d6860545963798c9fb5bbaa917c67513c27121f2f404f606d8197a2b4baa99d8877625645321e150400000000000000000000000000001220354a6073869cb1c3cdb9a8947f695544312b2b2b32455671869cb1c6d6c5a8937e68533e291300000000000000061a2c3d4a60728399a6b8c9dadcc8b4a29a8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b77624d37220d00000000000000000000000000000000172c41576c8196acc1d6dac9a7927c67523d2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2933373e4a566c8196abaf9a8488929ca4b2becfd8c8b6a4927d67523d28120000000000071c31475c71869cb1c2d0d5c9b7a68f7a65503a251000000f24394e64798ea3c8d8ddc8b39e88735443301c080000000000000000000000000000000a1e3246576f8499aec4d9cdbaa9907b66513b261100000014293e54697e93a9c3d4d6c1ab96816c563c2b190500000000000000000000000000000004192f44596e8499aec3d9d2bda7927d68523d281300000000021527375b70859bb0c5d4bfaa957f6a55402a1500000000000000000000000000071b2d3e4f657a8fa2b4c8d9c9b49e8976614c37271501111e324556647a8c9fb4c2d2ccb9a79b8574604b402f1d0d00000000000000000b1f3448596c8197a5b7b49f8b7d736e6f77869cabbcb49f8a77614c37220c112132424b6073849aa5b7b7a69b8575604b433322120100000000000000000000000000071c304354677d92a5b6cac6b29d8774604b35201521364b60768a9fb4caccb8a78e79634e39240e00000000000000000f1c3043546177889dabbccfdac5af9a857475767676767676767676767676767676767676767572604a35200b0000000000000000000000000000000013283d53687d92a8c2d3d6c1ac96816c573d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1927313a474c555c646c7d92a7b4a29a9da6b2b6c3cfd5c7baaa9c8674604b36200b0000000000091e34495e73899eb3c8dee7d4c4a7927d67523d281200000f253a4f647a8fa4b9cfdcc7b29c87725d362614010000000000000000000000000000000316293954697e94a9c9dad7c7ac96816c57412c170000000f24394f64798ea5b7cbdbc6b19c86715a48352008000000000000000000000000000000021527385b70859ab0c5dad1bca7917c67523c27120000000000192e43586e8398adc3d7c2ac97826d57422d18000000000000000000000000000d22364a5c6f8499afc0d1cfbcab96816c584633190900031628384b5c6b8096a4b5c8d6c5b5a396806b5e4c3c2b19090000000000000005182a3b4c6176879da9b9a99f928783848a9ca4b5baa998826d5947341f0b03141d3144556176879da8b9b5a398826e615040301f0f00000000000000000000000000001325364b6074879cb2c3cbb7a6927c67523f2e1b253a4f647a8faabbcec8b39e8974604a35200b0000000000000000001325364759657b8d9fb5c1d1c8b4a2947f696060606060606060606060606060606060606060605443301c07000000000000000000000000000000000e23384d63788da4b6cadcc7b29c87725c4a36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c37444b58616a727a81889db3c0b4afb3b7c4cad3cec4b8a99f8b7a645544311d080000000000081d32475d72879cb2c5d5dacdb9a8907b66513b2611000010253a4f657a8fa4bacfdbc6b19b86715c46311c00000000000000000000000000000000000f253a4f647a8fabbccfdac5af9a85705a3b2b180500000d22364a5c72879db2c7ddcab59f8c78624d362614010000000000000000000000000000091d31455671879cb1c6dcd9c8a5907b65503b26100000000001162b40566b8095abc0c8c4af9a846f5a362513000000000000000000000000071a2d3d4f647a8ea1b3c7cdcab49f8c78634d3a29170000000a1a2e3e4b6074869caabbced1c1b59f8d7c665a4837271501000000000000000d1f334658647b8b9ea8b5b4a59d98999ea8b5bcb49f8b79634e3b2a18040002152737475863798a9eabbcb2a0947f6a5e4d3d2d1d0c00000000000000000000000000081d314455687d92a5b7cbc4b09b85705d4b3722293e53697e93a8c8d9c4ae99846f5443301c0700000000000000000008182a3b4c5d6b8096a3b5c6d1c0b49f8b7a64574b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a4336251300000000000000000000000000000000000c2035495a71879cb1c6dccab6a58e79644e3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3c4955606a767f878f969da6b7cbc8c4c8cbd4ccc8bbb4a69d8b7d675c4a37271502000000000002172c42576c8197a7b8c4c9bcb49e8a76614b36210c00000e24394e63798ea3b8cedcc6b19c87715c47321c00000000000000000000000000000000000c21364b61768b9fb5cadec8b39e8973594834200b0000071b2d3e576c8196acc2d2cfbcab947f695443301c0900000000000000000000000000000b20364b60758a9fb4c9dfcebbaa8d78634e38230e000000000013293e53687e93a8b2b2b2b29c87725443301c0700000000000000000000000c21364a5b6e8399aebfb8b8beae99836e5a49351c0c00000000101d324556647a8c9fb4beb8b8bcab9e8978625544311d08000000000000000417293a4b5d657b8a9ba3b1b6b2aeaeb4b9b4ab9f937e685b49351d0c00000009192a3a4a5b667c8d9fb3b8b59f8d7c665c4a3b2a1804000000000000000000000000011426374b6074879db2c4c9b5a38f7a654f3c2c2838576d8297acc2d7c7a9947f695436251300000000000000000000000c1d2f3f4b6074859ba8b9cccebbaa9d8776614c41363636363636363636363636363636363530251808000000000000000000000000000000000006192c3c566b8095abc1d1d3c3ab96816c5846331f0e00000000000000000000000000000000000000000000000000000000000000000000000000000a1b2c3c495a63747f89959ca5abb3b7c4d4dcd7cdc9c5b8b3aa9f97887b675f4d3e2d1909000000000000000d22384d6278899da6aeafab9f947f6a5746321e0a00000d22384d62778da2c7d7dcc7b29c87725d39281603000000000000000000000000000000000a1e33465773889db3c8ddccb8a78c77624c37220d00000010253b50657b90a4b5c9dac9b29c8773604b37271501000000000000000000000000000f243a4f647a8fa9bacddfcab49f8a76604b36210b000000000011263b51667b909d9d9d9d9d9d8a75604a35200b00000000000000000000000e24394e63798c9fa3a3a3a3a3a08f7a654f3c2c190000000000021528384a5c6a8095a0a3a3a3a3a3a79a8473604b35200b00000000000000000b1b2e3f4b5d657a85929ca4a8abacaba8a29a8d7e69604e3d2c1a00000000000c1c2d3d4c5e6a7f929ea7a2ab9e8a7a645947341f0b00000000000000000000000000091d314455697e93a6b7cbc1ae99836e5a493532455671869bb1c6cdbaa98f7a644f3a250f000000000000000000000000111d3144556278899eb3becec8b6a598826d5f4e3d2c2121212121212121212121212121201c1308000000000000000000000000000000000000000f24394f64798ea3b4c8dec9b39e8976614c3c2b180800000000000000000000000000000000000401000000000000000000000000000000000003162839495a637885959ea8b2b6c3c8cbd4e1d7c7bab4ada79e968b8276655d4d4130201000000000000000000b2035485a657b8893999a968c8072604a3929160300000c21374c61768ca9bacddec9b39e89745745321e0900000000000000000000000000000000031729395b71869bb0c6dbd5c5a48f7a644f3a250f0000000e23374b5d71869cb1c4d4cab6a5917c665544311d0f000000000000000000000000071b2d3e54697e93a9c7d7dbc6b19c86715645321e0900000000000e23384e6379888888888888888876614c37210c0000000000000000000003192e43586e838d8d8d8d8d8d8d8c826e5d4b371e0e0000000000000a1a2d3e4b6073828c8d8d8d8d8d8d8d8d806b56402b1601000000000000000010202f3f4b5c64737d878e93969795938d857a69604f42311f0f0000000000000f1f2f404f616a7d888c8d8d8d8d8777614c37220c00000000000000000000000000021527374b6075889db3c5cab49f8c78624d3a364b60758a9fb4c9c9b49f8975604b36200b00000000000000000000000002152737495a677d92a0b1c2d3c3b2a0927d685b493828150b0b0b0b0b0b0b0b0b0b0b0b0b070000000000000000000000000000000000000000000d22364a5c70859bb0c3d4ccb9a895806a5a4836261401000000000000000000000000010a10121a160b09020000000000000000000000000000091e3245576378889ba3b4b9c6cad3cfcac9cccdbaa99f98918881786d61584c3f30231202000000000000000005192b3c4b5d65767e8484817a6b605443301b0b0000000b20354b6075899fb4c9deccb9a78b76604b36210b00000000000000000000000000000000001a2f445a6f8499afc4d9d0baa5907b65503b2610000000081c2e3f52687d92a6b7cbd3c3b19c8674604b3d2d1d0e00000000000000000000000e22364a5c71869bb0c6dbd7c6ac97826c573828160200000000000c2135495b637373737373737373615847331f0a00000000000000000000000e23384d637978787878787878776e64533f2e1c0000000000000000101d314455606e77787878787878787879634e38230e0000000000000000000211212f3d4a54606872797e8081807e7870645c4f423224140100000000000001122232434f60687477787878787875614b36210c0000000000000000000000000000091e324556697f94a7b8ccbcab96816c58463a4f64798faabbcec5af9a85705544311d080000000000000000000000000009192c3c4d5f6d8297a4b6c7cfbeb49e8a79635645321d1200000000000000000000000000000000000000000000000000000000000000000000071b2d3e52677c91a5b7cad6c6b49f8a78625443301c15040000000000000000000002131e25272f2b201d150a00000000000000000000000005182b3b4b6075879da6b5c1ccd6cfc9bcb5b4b9c6b49f8a837b746c625a4c473a2f211205000000000000000000000e1e2e3f4b5761696e6f6c645c4a4336251300000000081c30435471869bb0c6dbd6c5a38e79634e39240e0000000000000000000000000000000004192e44596e8399aec3d8d1bca6917c67513c2712000000001120364b6074889db3c0d1cab6a4947f695c4a3b2b1e110400000000000000000e1e30404f64798ea3b5c9ddcdb9a8917b66513c2611000000000000061a2c3d494e5d5d5d5d5d5d5d5d4c473a2a170400000000000000000000000c2135495b636363636363636362595346362111000000000000000001142637444b59626363636363636363635b4935210c0000000000000000000003111f2d36434b535b63686b6c6b68625a4f4a3e32241406000000000000000004152532424e5560626262626262615746331e0a0000000000000000000000000000021628384b6175899eb3c6c9b49e8976614c3753687e93a8c8d8c8aa95806a553727150200000000000000000000000000000e1e30414b6175869ca9bacdcdb9a89b8574604b402f1d0d000000000000000000000000000000000000000000000000000000000000000000001020354b6073879db2bfd0cdbaa99a8472604b42331f180c04000000000000000a151d30393d44403631271a0a00000000000000000000000b203448596b8196a5b6c4d2d4c9bcb4ab9f9ea8b9a28d796e6660554d483c332a1c110300000000000000000000000010212e39464c54595a574f4a3e302518080000000001142636586d8297adc2d7d1bca7927c67523d27120000000000000000000000000000000003192e43586e8398adc3d8d2bda8927d68533d281300000000091d314556687d92a2b4c7d3c2b49f8b7a6459483c2e1f180c080200000308131c2c3c4c5e6e8398aec1d2dec9b49e8975604b36210b000000000000000f1f2c35384837444b4e4e4b4437332a1c0c00000000000000000000000006192c3c494d4e4e4e4e4e4e4e4d483b36281803000000000000000000091926313b484d4e4e4e4e4e4e4e4e4e493d2c1a060000000000000000000000010f182630353d4a4e53565756534d493c362e201406000000000000000000000715233137444b4d4d4d4d4d4d4b46392917030000000000000000000000000000000a1e3246576a7f95a8b9ccb9a8947f695544576c8297acc1cebbaa907b65503b261000000000000000000000000000000000131e324657647a8b9fb4bfd0c6b5a396816c5e4c3b2b1808000000000000000000000000000000000000000000000000000000000000000000081d314455677c91a1b3c7d7c7b3a295806a605043342a1f170d0b0700050b111a2832414d5259564b4538271909000000000000000000000d22374d62778b9fb4c3d3d4c4b7ab9f988b8a9eb4a6907b66514b4437352b1f170c000000000000000000000000000002101b2933363e44454139362d1c130800000000000014293e54697e93a9c3d4d6c1ab96816c563c2b190500000000000000000000000000000004192f44596e8499aec3d9d2bda7927d68523d281300000000021527384e5f70849aa9bacecdbaa99d8777625a4b3f342a201d151717161e25303c495a667c91a0b2c6dfd0bfac97826d5745321e0900000000000000010f182637444b5560636360554b44372719090000000000000000000000000e1e2c35383838383838383837342b1d180a000000000000000000000009141d2b3437383838383838383838352c1f0e000000000000000000000000000008141c202d36393e4142403e38352b221b10020000000000000000000000000513192631353738383838383633291b0b00000000000000000000000000000000031629394c6176899eb3c6c6b29d8774604b5671869bb0c6cab49f8a76614b36210c00000000000000000000000000000000031628394a5c697e93a1b3c4d2c1b09f907c665948362614010000000000000000000000000000000000000000000000000000000000000000011426374d5f6f849aa9bacdd0c0af9e937e6a614c473b332923201c131920222e38454b5f676f6b6056453726140100000000000000000014293e54697e93aabbced6c5b7a69d8c82798095aaaa95806a5540312720190e0400000000000000000000000000000000000b171e21292f2f2c24221b1000000000000000000f24394f64798ea5b7cbdbc6b19c86715a48352008000000000000000000000000000000021527385b70859ab0c5dad1bca7917c67523c271200000000000a1a31414e63798b9fb4bdcec7b7a59c8678655d4c473b3631272d2c283236434a5a6378889db3becfd8c7b3a18e79644f3928160300000000000000011426364455606a757878746a605544372715020000000000000000000000000e192123232323232323232220190d0000000000000000000000000000010d182022232323232323232323211a0e0000000000000000000000000000000001080f1a2124292b2c2b292320190e070000000000000000000000000000000009141d20222323232323211e170b0000000000000000000000000000000000000b1f3346586b8095a8bacbb7a5917c675260758a9fb4c9c5b09b86705746321e0a00000000000000000000000000000000000b1b2d3e4f606e8399a6b7c9cdbdb39e8977625443301c10000000000000000000000000000000000000000000000000000000000000000000091930414d63788b9fb4bdceccbcb59f8d7f6e61594c473a383530252b35383f4b56606c7d848074605544311d13030000000000000004192e43596e8398aec8d8ccb8a79d887a6d667b91a6ae99846f593c2b1909060000000000000000000000000000000000000000030a0c14191a170f0d070000000000000000000d22364a5c72879db2c7ddcab59f8c78624d362614010000000000000000000000000000091d31455671879cb1c6dcd9c8a5907b65503b2610000000000000132135495b687e939fb1c0d0c3b6a49c887b6c6159504b4437424138454b54606878879da6b7cbe2cebaa999836e5c4a361b0a0000000000000000081c30435460737f898e8e887f73605544311d0a00000000000000000000000000060c0e0e0e0e0e0e0e0e0d0b050000000000000000000000000000000000050b0d0e0e0e0e0e0e0e0e0e0c060000000000000000000000000000000000000000070c0e13161716130d0b060000000000000000000000000000000000000001080b0d0d0d0d0d0d0c0a03000000000000000000000000000000000000000417293a4c61778a9fb4c7c3b09b85705c64798ea9bacec0ab96816b56392916030000000000000000000000000000000000000f2032424c6176889dabbccfccb8a79a8472604b3f2e1c0c000000000000000000000000000000000000000000000000000000000000000000122035495a687e929fb1c0d0cfbcab9f9483776a6158524d4a43363c484d535d6574819299958373604b4231211100000000000000071c31465c71869bb1c6dbc8b39e8978645d62778ca6b39e88735a4834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e576c8196acc2d2cfbcab947f695443301c0900000000000000000000000000000b20364b60758a9fb4c9dfcebbaa8d78634e38230e000000000000061a2c3d4e606c8197a2b3bfcfc2b6a69d8c81776d65605558575758566067727d899da5b7c4d4d0c0b49f8b79634e3e2d1b0000000000000000001325364b607283949ea7a79e948373604b392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f3347586c8196a9bac9b5a38f7a64687d92a8c7d3c2a6917c66513c27110000000000000000000000000000000000000001141f334758657b8d9fb4c0d1c5b4a2947f6a5d4b3a291704000000000000000000000000000000000000000000000000000000000000000006192c3c4e606c8196a2b3bfcfc9bcb5a199897f766d676260545d5d5a6268707b86979faea196816c604e3f2e1c08000000000000081d32475d72879cb2c7d7c7a9937e695a4b5973889db2a68d77624d38220d00000000000000000000000000000000000001080b140c09030000000000000000000000000000000010253b50657b90a4b5c9dac9b29c8773604b37271501000000000000000000000000000f243a4f647a8fa9bacddfcab49f8a76604b36210b000000000000000f1f31424b60738499a1b2becec4b7ab9f978a827b75716e6c6c6d70757c85929ea7b7c3d4d3c2b4a2957f6a5b493620100000000000000000071c304354697e94a1b3b8b8b3a195806b5745321e0900000000090f11202020202020202014120c030000000000000000000000000002090b171e20202020202020200e0c06000000000000000000000000000000000000000000000006101618202020202020201b1812080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4d62778a9fb4c8c1ad98826d6c8196abc1cab6a48c77614c37220c000000000000000000000000000000000000000004172a3a4b5d6b8095a2b4c5d1c0b49f8c7a645846331f130100000000000000000000000000000000000000000000000000000000000000000e1e31424b60738499a1b2bececfbfb3a89e948a837c787573727274787d858f9ca4b1bdb09e937e685d4b37230e000000000000071d32475c72879cb1c7cdbaa98c77614c3c596e8399aea6917c66513c2711080b100f0d08000000000000000000000008141c2029211e160b0000000000000000000000000000000e23374b5d71869cb1c4d4cab6a5917c665544311d0f000000000000000000000000071b2d3e54697e93a9c7d7dbc6b19c86715645321e090000000000000001141d31445560748398a0b4bac7c9bcb4a99f9790898683828183858a919ba3b3b8c5d4d0c2b6a49a8473604b3d2c1a0200000000000000000b20354a6073879db2bfccccbfb49e8975604b36210b000004121d24273535353535353535292720140700000000000000000000000a161e212c33353535353535353523211a0e0000000000000000000000000000000000000000000917232b2d35353535353535302d251a0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c203448596c8197aabbc9b49f8a7770859aafc5c6b19c87715847331f0a0000000000000000000000000000000000000000000c1c2e3f4b6073849aa7b9cccebbaa9d8776614c42311f0f000000000000000000000000000000000000000000000000000000000000000000131d31445560748398a0b4bbc8d0c6b9b3a99f98928d89888788898d929ba3b1b5c2cdbdb49f8b7a65503a2510000000000000061b30465b70859bb0c5c9b49f897459473f556a7f94aaab95806b56402b141c202525221b1001000000000000000009182630353e3632281b0d0000000000000000000000000000081c2e3f52687d92a6b7cbd3c3b19c8674604b3d2d1d0e00000000000000000000000e22364a5c71869bb0c6dbd7c6ac97826c57382816020000000000000000021527374556607382949fa9b6c2cbc7bab4aca89f9b989796989b9fa9b0b4c1ccd5cdbfb3a49c8676615544311f0f0000000000000000000d22374d62778ca5b7cbe0e0cdb9a88f7a644f3a250f0000122230393c4a4a4a4a4a4a4a4a3f3b322514030000000000000000000a1a28323641484a4a4a4a4a4a4a4a38352c1f0e00000000000000000000000000000000000000061727353f424a4a4a4a4a4a4a4541372a1a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4d62788b9fb4c9baa9947f73889eb3c8c1ac97826c573a2a180400000000000000000000000000000000000000000000111d3144556278899eb3bdcec8b7a598836e604e3d2c1a0a0000000000000000000000000000000000000000000000000000000000000000011527374556607382949faab6c3ccccc7bab4ada7a99f9d9c9d9fa9a8b0b4c1c9d2c5b9a99e8979634e39230e00000000000003182d42586d8297adc8cab59f8a75604b3b50667b90a5af9a846f5a3c2c2630353a3a372e1c140800000000000009192736434b544b46392a1d0d00000000000000000000000000001120364b6074889db3c0d1cab6a4947f695c4a3b2b1e110400000000000000000e1e30404f64798ea3b5c9ddcdb9a8917b66513c26110000000000000000000009192838455560727f8b9ca4b3b7c4cac9c6bab4b0adacacadb0b4bac7c8d1cec6b9b4a1998677625847372614010000000000000000000d22374d62778ca6b8cbe0e2cebbaa8f7a654f3a251000091d30404c516060606060606060544f4332200c000000000000000002162838454b565d5f6060606060605f4e493d2c1a06000000000000000000000000000000000000102335455258606060606060605a5548372111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2035485a6d8297abbcc7b29d87778ca7b8ccc3a7927d67523d2812000000000000000000000000000000000000000000000001142637485a677c919fb1c2d2c3b2a0937e685b4938281602000000000000000000000000000000000000000000000000000000000000000009192838455560727f8c9ca5b3b8c5cbcdc9c2c7bab4b2b2b2b4bac7c5c8d1cbc1b5a79e8b7c655b4a36210c0000000000000013283d53687d92aabbcebcab8f7a644f3f4c61768ca5b39e89735a493536434b4f4f4b3e302618080000000001152737445460696157483b2a1c0c00000000000000000000000000091d314556687d92a2b4c7d3c2b49f8b7a6459483c2e1f180c080200000308131c2c3c4c5e6e8398aec1d2dec9b49e8975604b36210b00000000000000000000000a1a2837445460697a86939da6b2b6c3c7cac9c6c3c1c1c2c5c9cdcfcac7bab4a89e9383766259483a2a1909000000000000000000000b20354b6074889eb3c1cfd0c3b49f8b76614c37210c000f24394c5e66757575757575757569614f3b27120000000000000000091e324556606c737575757575757575635b4935210c000000000000000000000000000000000001162b3f52646d757575757575757066553f2e1c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4e63798c9fb4c9b7a5968096abc5cbb7a58d78624d38220d00000000000000000000000000000000000000000000000009192b3c4d5f6c8197a4b5c7cfbeb49f8a79635645321e120000000000000000000000000000000000000000000000000000000000000000000a1a28374454606a7a87949ea7b2b7c4c7cad4cdc9c8c7c7c9cdd7cdc9c4b7b3a39b897b655d4c3d2d1a07000000000000000d22374c62778b9fb4cac9ac97816c5d4b475872879db2a78d78634d404c546065645c4b4336261401000000081d31445560727e756259483a2a1a0a000000000000000000000000021527384e5f70849aa9bacecdbaa99d8777625a4b3f342a201d151717161e25303c495a667c91a0b2c6dfd0bfac97826d5745321e090000000000000000000000000a192736434a5c64747e88949ca4acb1b5bcc9c0c1c3c3c2c1c9bcb5b1a99f978a7e726158483b2a1c0c0000000000000000000000081c3043546a7f94a3b2bebfb3a598826d5847331f0a0011273c51667c8a8a8a8a8a8a8a8a7f69543f291400000000000000071a2d3d4b607481888a8a8a8a8a8a8a8c78634e38230e000000000000000000000000000000000005192b3c586d828a8a8a8a8a8a8a84705d4b372310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2135495b6e8398abbcc3b49f899fb4c9c7b29d88725a4835200b000000000000000000000000000000000000000000000000000e1e30404b6075869ca9bacdcdbaa99c8674604b40301d0d0000000000000000000000000000000000000000000000000000000000000000000a192736434b5c64757f89959da6acb2b7c3bfc0c2c3c3c2c0c7bab4afa69d938578655d4c3f2f1f0f00000000000000000b203448596f8499aebecab49f8c7b655d4d586e8398ada7917c6752505e66737a7a6d605443301c120000000b20354b607382938577625847382715020000000000000000000000000a1a31414e63798b9fb4bdcec7b7a59c8678655d4c473b3631272d2c283236434a5a6378889db3becfd8c7b3a18e79644f3928160300000000000000000000000000091825303e4a566069757f878f969c9faba9abacadaeadaca9ab9f9b948b8177696054463a2a1d0d000000000000000000000000011426364b60738598a0a7a7a1998777624c3a291704000f24394e64798e9f9f9f9f9f9f96816c57412c17020000000000000821364a5b6c81969d9faa9f9f9fa897816c5b4935210c00000000000000000000000000000000000b2035485a72879d9f9f9f9f9fa28f7a65503f2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4e63798c9fb5cabaa99fa9bacdc2ad98836d583c2b19050000000000000000000000000000000000000000000000000000121e32455663798a9fb4bfcfc7b5a497816c5e4c3c2b1909000000000000000000000000000000000000000000000000000000000000000000091826303e4a56606976808890979da5a6a9abacaeaeadaba8a99f9992887e73625a4b3f2f211101000000000000000005182b3b4f657a8fa0b2c4bbaa9e897b6d635a697f94a9ab96806b6066707b868f8f8272604b40301e0e000013283d53687d92a09b8676615645311d1100000000000000000000000000132135495b687e939fb1c0d0c3b6a49c887b6c6159504b4437424138454b54606878879da6b7cbe2cebaa999836e5c4a361b0a00000000000000000000000000000008131c2d38454b576069727a81878b909495979899989794908b867f776c62594b4336291c0d0000000000000000000000000000081d3144556176828d92928d8477625947341c0c00000c21374c61768ca8b9b5b5b5ae99846e59442f1900000000000008182f3f4e63798c9fb2b4bbb5c4b49e8a77624c3d2c1a0600000000000000000000000000000000000d22384d62788da5b7b5b5b5c0af9a846f5d4b372210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21364a5b6e8399aebfc7bab4bac7d5c5a8937e68533e2913000000000000000000000000000000000000000000000000000000031628384a5b687e93a0b2c3d2c2b19f917c665a483726140100000000000000000000000000000000000000000000000000000000000000000008141c2e38454b58616a747b82878c9094969799989796938f8a847c74686055493c2e211103000000000000000000000d22374b5d6e8398a6b7c6b8a79e8c8278716b7a8fa5af9a8470747b85909ca4a095806b5e4c3c2c19060010253b50657b909ea49b8574604b3f2f1909000000000000000000000000061a2c3d4e606c8197a2b3bfcfc2b6a69d8c81776d65605558575758566067727d899da5b7c4d4d0c0b49f8b79634e3e2d1b000000000000000000000000000000000000101a273139454b545c646c72767a7e8081838383817e7b77716962594d483b3026180c000000000000000000000000000000011426374658616e787d7d786f6259483b2a180000000a1f33475874899eb4c9cac6b19c86715c3a29170400000000011426364c5d6f8499aabbcacecbb8a695806a5947341f0e00000000000000000000000000000000000013283d52687d92a7c3d4cacac7b4a28f7a654f3e2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4f647a8fa1b3c7cdc9cdd7ccb8a78e79634e39230e000000000000000000000000000000000000000000000000000000000a1a2d3d4e606e8398a5b7c8cebdb39e8978625544311d110000000000000000000000000000000000000000000000000000000000000000000001101a28323a464c5460656d72777b7f8082838382817d7a756f6760564b44372b1e11030000000000000000000000081b2e3f4c6177889da8b9c5b8aa9f978d86817e93a9b49e8a8288909ba3b1b5b59f8d7c665b4935210c000e23384b5d6b8095a1a396816c5d4b372715020000000000000000000000000f1f31424b60738499a1b2becec4b7ab9f978a827b75716e6c6c6d70757c85929ea7b7c3d4d3c2b4a2957f6a5b49362010000000000000000000000000000000000000000a151d2832363e4a4f57576165696b6c6e6e6d6c69666158544c473b342b1c140800000000000000000000000000000000000919293a464c5a626767635b4c483b2b1d0d00000004172a3a5c71879cb1c6dcc9b39e89745846331f0a00000000081c304354657b90a1b3c8d9d3c3b39e8875614b3b2a1800000000000000000000000000000000000005192b3c586d8297adc2d7dfe3d0c0af9a846f5c4b372210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f22364a5c6f849aafc0d1cdcdcdc8b39e8974604a35200b00000000000000000000000000000000000000000000000000000000000f1f31424c6176879daabbceccb8a79a8473604b3f2e1c0c00000000000000000000000000000000000000000000000000000000000000000000000a161e293336434b50575961666a6b6d6e6e6d6b68656056524b45383126190e0000000000000000000000000000101f344759647a8a9ea7b5c2bbb4aca39b96939daeb9a89e979ea6b0b4c1c9bcab9e8978634d38230e00081c2f3f4a60728399a59e907b655544311d0800000000000000000000000001141d31445560748398a0b4bac7c9bcb4a99f9790898683828183858a919ba3b3b8c5d4d0c2b6a49a8473604b3d2c1a020000000000000000000000000000000000000000020a161e212e363a39464c505456575859585754514c473a37342a20180d01000000000000000000000000000000000000000b1b29333c494d52524e493d342b1d0d00000000001a2f44596f8499aec4d9ccb9a78b76614c36210c000000031628384b6073869bb1bfd0decab6a4937e685746321d0d0000000000000000000000000000000000000b2035485a72879db2c7dcf2eedcc7b3a18f7a644f3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4f657a8fa2b4b8b8b8b8b8ae99846e5443301c07000000000000000000000000000000000000000000000000000000000001141f334658657b8c9fb4c0d1c5b4a295806a5d4b3a2a17040000000000000000000000000000000000000000000000000000000000000000000000030b171f2630353b3b474c5154565759595856534f4b45383631271d140900000000000000000000000000000004182a3b4b5c657b899ca4b4bbc8c1b5b1aba9aebbc6b9b4acb3b8c5c8c8bbb4a29a8577614c37220c0000111c3043546176879db19c8674604b36251300000000000000000000000000021527374556607382949fa9b6c2cbc7bab4aca89f9b989796989b9fa9b0b4c1ccd5cdbfb3a49c8676615544311f0f00000000000000000000000000000000000000000000000309101b22242933363b3f4042434443423f3b37332a221f180d05000000000000000000000000000000000000000000000b171f2c35383d3d38352c20180d000000000002172c42576c8197acc1d6d6c5a38e79644e39240f000000091e324556687d92a3b5c9ddd1c1b29c8774604b392916000000000000000000000000000000000000000d22384d62788da5b7cadfdddaddd0bfaf99846f5c4a362210000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001022374b5d70859aa3a3a3a3a3a3a3947f6954362513000000000000000000000000000000000000000000000000000000000000000417293a4b5d6a7f95a2b4c5d1c0b49f8c7b655847331f14010000000000000000000000000000000000000000000000000000000000000000000000000408141c20252a34373b3f4142444342413e3a363228201d150a0100000000000000000000000000000000000c1d2e3e4c5d657986979faab5bcc9c6c0bec1cbd6cdc9c2c8cac7bfb3aa9f948476615947341f0a0000001325364758657b8fa1a4927d685443301c070000000000000000000000000009192838455560727f8b9ca4b3b7c4cac9c6bab4b0adacacadb0b4bac7c8d1cec6b9b4a1998677625847372614010000000000000000000000000000000000000000000000000000070d0f171e2125292b2c2e2e2e2c2926211f170d0b0500000000000000000000000000000000000000000000000000040e192023282823211a0f0500000000000000152a3f546a7f94a9bfd4d0bba6917b66513c2611000004182a3b4b6075879db2c1d2ddc8b4a3917c675544311b0b0000000000000000000000000000000000000012283d52677d92a7c3d4d1c8c5c8ccc7b3a18f7a644f3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f50657c8d8d8d8d8d8d8d8d8d7a644f3a240f00000000000000000000000000000000000000000000000000000000000000000c1c2e3f4b6072849aa7b8cccebbaa9d8776614c42311f0f000000000000000000000000000000000000000000000000000000000000000000000000000001080b10181f22262a2b2d2e2e2d2c2825211e160b0902000000000000000000000000000000000000000010202f3f4c5b6375818b989fabb1b5bcc9bfc6c9d2cdc4c3b6b2aba1998b7f736158473a2a1804000003152633404c5d6f8499ae9c8673604a35200b00000000000000000000000000000a1a2837445460697a86939da6b2b6c3c7cac9c6c3c1c1c2c5c9cdcfcac7bab4a89e9383766259483a2a1909000000000000000000000000000000000000000000000000000000000000030a0c101416171919181714110c0a04000000000000000000000000000000000000000000000000000000000000060c0d12120e0c0600000000000000000012273c52677c91a7bcd1d3bea8937e69533e291400000b1f3447596a7f94a6b7cbdfd0bfb09b85705f4d3727150000000000000000000000000000000000000005192b3c586d8297adc2d1c0b4b0b3b8c5bfae99836f5c4a36220f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001023384c5e6579787878787878787973604b35200b000000000000000000000000000000000000000000000000000000000000000000101c3043546277899eb3bdcdc8b7a699836e604e3d2d1b0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c111516181919181613100b090200000000000000000000000000000000000000000000000211212f3c4957616c78838c959b9faba8aab1b5c1bdb0aca49c968e84796a6055463a2a1c0c00000011213344505e656e7c91a7a48f7a644f3a240f0000000000000000000000000000000a192736434a5c64747e88949ca4acb1b5bcc9c0c1c3c3c2c1c9bcb5b1a99f978a7e726158483b2a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7d6c0ab96816b56412c1601061a2c3d4c6177899eb4c4d4d9c8b3a18f7b655041301909000000000000000000000000000000000000000b2034485a72879db2c7c8b4a29a9ea7b8c7b3a18e7a644f3e2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c5b636363636363636363605544311d08000000000000000000000000000000000000000000000000000000000000000000011426364859667c919fb0c1d2c4b3a1937e685b4a39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111e2c39464b5a636e7880868b9093959ba3b5b09f968c8781796f635b4b4437291b0c000000091c2f4050626b7b83879db2ab96806b56412b1600000000000000000000000000000000091825303e4a566069757f878f969c9faba9abacadaeadaca9ab9f9b948b8177696054463a2a1d0d000000000000000000000000000000000000000000000000000000060c0d1114151616151413100e0b080100000000000000000000000000000000000000000000010a10121311100e0b0802000000000000000000000000000000000000000d22374c62778ca9bacdd8c3ae98836e59432e1900082135495b6c8197a8b9cce2cebbaa99836f5d4b37231200000000000000000000000000000000000000000d22384d62778da5b6cac5b09a85899eb3c8bfae99836e5c4a36210f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f3d494e4e4e4e4e4e4e4e4e4b44372614010000000000000000000000000000000000000000000000000000000000000000000008182b3b4c5e6c8196a3b5c6cfbfb49f8b79635745321e1200000000000000000000090f112020202020202020202020202020202020201f1d1b17130e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b28323c494d5a636a71777a7e80859bb1ac968177726b635b4e4a3d3126190b000000000e23384c5e6b8090999da5b7b09b85705b382816030000000000000000000000000000000008131c2d38454b576069727a81878b909495979899989794908b867f776c62594b4336291c0d00000000000000000000000000000000000000000000000001080b1019202326292a2b2b2a2a282623201c14110b0802000000000000000000000000000000000005131d252728272523201d150b0903000000000000000000000000000000000b20354a60758a9fb4c9dbc6b09b86715b39281608182e3f4e63798b9fb4c6d6d7c7b49f8c79634e3f2e1c04000000000000000000000000000000000000000012283d52677d92a7c3d4c1ac97818197acc3cab59f8c79644e3d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111f2c3538383838383838383835312619090000000000000000000000000000000000000000000000000000080808080808080808000d1d2f404b6074859ba8b9cdcdbaa99c8675604b41301e0e0000000000000004121d24273535353535353535353535353535353535353432302d282320190e0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2c353c494d55586165686a7e93a8ac97826c59564e4a3d362d1d1409000000000010263b50657b909eaeb2b7c3b49f89745645321e09000000000000000000000000000000000000101a273139454b545c646c72767a7e8081838383817e7b77716962594d483b3026180c00000000000000000000000000000000000000000000000108141c20262c35383b3e404040403f3d3b3835302626201d150907000000000000000000000000000001132330393c3d3c3a39363127211e160a000000000000000000000000000000071c30435472879cb2c7dcc8b39e88735745321e1325364b5d6e8399aabbcee1cdbaa997826d5b4a362111000000000000000000000000000000000000000005192b3b576d8297acc2dac9a9937e7b8fa4b6cabcab99836e5b4a36210f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21232323232323232323201d14090000000000000000000000000000000000000000000000030c12141d1d1d1d1d1d1d1d1d1d1d1d1d32455663798a9eb4becfc7b6a497816c5f4d3c2b1909000000000000122230393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494845423e38352c221f180c0300000000000000000000000000000000000000000000000000000000000000000000000000000000030e19202c35383a474c505364798faab09b8671564539362d211a0f01000000000000192f44596e8499aebcc7cacdbaa88b75604b36210b000000000000000000000000000000000000000a151d2832363e4a4f57576165696b6c6e6e6d6c69666158544c473b342b1c1408000000000000000000000000000000000000000000000009151d2630353b3c494d5153555656555452504d4b43363b363127211a0f080000000000000000000000000a1d30414d525251504e4b44373632281c130800000000000000000000000000001325365a6f859aafc4dacbb8a68b76604b36211c304354657b8fa1b3c8d8d5c5b49f8a77624d3d2d1a0300000000000000000000000000000000000000000b2034485972879db2c7cfbcab907b72879cb2c5c9b59f8c79634e3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0e0e0e0e0e0e0e0e0b0801000000000000000000000000000000000000000000000006141f2729333333333333333333333333332838495b687d92a0b2c3d3c2b19f917d675a483727150100000000091d30404c5160606060606060606060606060606060605f5f5d5b57534d493c37332a1e160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000060e1920232a33373b4b60758a9fb49f8a75604b36201a0f0700000000000000001e33485d73889db2c8dddfcbb8a68b75604b36210b0000000000000000000000000000000000000000020a161e212e363a39464c505456575859585754514c473a37342a20180d0100000000000000000000000000000000000000000000021019273136434b50585a6266696a6b6b6a69686563605456504b4437362d221b1005000000000000000000001025394d5f67686665636055534b45383025180900000000000000000000000000182d42576d8297acc2d7d5c5a38e78634e392328384a6072859bb0bfd0e0ccb8a795806b5948341f0f0000000000000000000000000000000000000000000d22374d62778ca5b6cacab59f8b76687e93a7b8ccbcab98836e5b4a36210f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031425323b3f4848484848484848484848484848483d4e606d8298a5b6c8cebdb39e8978625544311d11000000000f24394c5e667575757575757575757575757575757575757472706c68635a544c473a32291b11030000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e171f2132455671869bb0aa8f79644f3a240f000000000000000000001e33495e73889eb3c8d9d7c8b39e88735745321e09000000000000000000000000000000000000000000000309101b22242933363b3f4042434443423f3b37332a221f180d0500000000000000000000000000000000000000000000000115202e37444b5460656d73787b7e7f80807f7f7d7b7875706b6660554e4a3d372e20180d00000000000000000012273c52677d7d7c7a78756f6860564a4336271909000000000000000000000000152a40556a7f95aabfd4d0bba5907b66503b26324556677d92a3b5c9ddd4c3b39e8976614c3b2b180100000000000000000000000000000000000000000012283d52677d92a7c3d3c7b19c87726075889eb3c7c9b59f8c79634e3d2c1a060000000000000000000000000000000000000000040e14162020201e1a0f0d0700000000080e101e2020201f0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32434f545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d6176879daabbceccb9a79b8573604b3f2f1c0c00000011273c51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898785827d78716961584b46392e21140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a152838556a7f949e9f937e68533e2913000000000000000000001a30455a6f849aafbcc9c7baaa97826d583928160300000000000000000000000000000000000000000000000000070d0f171e2125292b2c2e2e2e2c2926211f170d0b0500000000000000000000000000000000000000000000000008141c323e4a556068737b82888d9093959595959492908d8986807b756c645c4f4b3e342b1d1205000000000000001c31465c718692918f8e89847e756860544437271808000000000000000000000012283d52677d92a7bcd2d3bda8937e68533e2a3a4b6074879db2c1d2dfcab7a5947e695846331d0d00000000000000000000000000000000000000000005182b3b576d8297acc2d7c2ad98826d576b8095a9bacdbcab98836e5b4935210e00000000000000000000000000000000000000081621292b353535342f24221b100203111c23253335353534201d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000012273b4f616972727272727272727272727272727272727272727a8a9fb4c9d6c5b4a395806b5d4b3a2a180400000f24394e64798e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9a97938d867f776b61574b3f3124140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607381888a8a816c57422d170200000000000000000011263b50667b909fabafaea99f8b79634e39230e0000000000000000000000000000000000000000000000000000000000030a0c101416171919181714110c0a04000000000000000000000000000000000000000000000000000008182630434f5c64737d8790989da6a6a8aaababaaa9a7a5a99f9b96908982796f645c4d483b30231201000000000000192e43596e8398a6a5a89e9993887e72605544362513000000000000000000000010253a50657a8fa5c8d9d5c0ab95806b5640334758697f94a5b7cadfd2c1b29d8774604b3a2917000000000000000000000000000000000000000000000b2034485972879cb2c7d7c7a8937e685361778a9fb4c9c9b49f8c79634e3d2c1a060000000000000000000000000000000000041626333d404a4a4a49443a362e201011212e373b484a4a4a493631271a0a00000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697f8788888888888888888888888888888888888888878b9fb4c9dfd1c1b49f8d7b655847331f1000000c21374c61768ca8b9b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b4b2b0aca8a49c948a8075655d4e423124140300000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606c7374746c63523e2a15000000000000000000000f23384c5e697f8c969a99958b7d675b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636434b61697a86929da5adb2b7c4bebfc0c0bfbebdc7bab4b0aba79e978e847a6e62594d41301d0a000000000000162b40566b8095abb3b8b4aea69d938273605443301c0d000000000000000000000d23384d62788daabbced8c2ad98836d58433e4c6176899eb3c3d4ddc9b5a3927d675645311b0b000000000000000000000000000000000000000000000d22374d62778ca5b6cacdbaa98e79644f596c8297abbccfbcab98826d5b4935210e00000000000000000000000000000000000e21334451566060605e594f4a3e2e211c2e3f4b505d6060605e4b4538271502000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d939d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9fa9bacee2e3cfbcab9d8876614c3f2e1b08000a1f33475874899eb4c9cacacad5cbc8c7c7c7c7c7c7c7c7c9c7c5c1c2b6b1a89e95877b68604e423121110000000000000000000000000000000000000000000000000000000000000000000000000000000000000001152737444b565e5f5f57524535220f00000000000000000000091c2f404f6169798184848078675f4d3d2d1a07000000000000000000000000000000000000000000050b0d11131516161513100c0a040000000000000000000000000000000000000000000000000000000000000000000003111c304354606d7f8c9ca4b2b6c3c8cbcecac5c2c0c0c1c2c4c8c9c5c5b8b3aca29a8f8377675f4d39241000000000000011273c51667c919b9da6afb4b7b2a0988372604a3b2b19050000000000000000000b20354b60758a9fb4cadac5b09b85705b50525c6c8196a7b9cce1d0c0b19b8572604a382715000000000000000000000000000000000000000000000012273d52677d92a7c3d3c9b49f8975604b4e63788c9fb4cac9b49f8c79634e3c2c19060000000000000000000000000000000014293d51626b757575736f645c4b3f2e23374b5d657375757574605645311d09000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b4bac7d8eaebd9c9b7a699836e5d4b37220e0004172a3a5c71869cb1c6dbe7d5c4b8b3b2b2b2b2b2b2b2b2b3b5bcc9c7cac6b9b4a59d8c7e69604e402f1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000091927313541494a4a423e352717050000000000000000000000112232434f5b636c6f6f6b635a4d41301f0f00000000000000000000000000000000000000060c0e18202226292a2b2b2a2825211f170f0d0700000000000000000000000000000000000000000000000000000000000000112133434b607281949faab5c2cad4cac8bbb4b0adabaaabacafb3b7c4c5c8c8c0b4afa098897d67513c27120000000000000b20354b60728086888e9aa2b4beb2a1937e685948342009000000000000000000081d31445572889db2c7ddc8b29d88736666676b7a8b9fb4c5d6dac9b3a2907b655443301a0a0000000000000000000000000000000000000000000005182b3b576d8297acc2d7c5b09a85705544495b6e8399aec1cebbaa98826d5a4935200e00000000000000000000000000000001162b40566b808a8a8a89847a655d4b37253b50657b888a8a8a8a74604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788dabbcc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c9ced8cdcdcdcdd4c4b2a18f7a654f3a251000001a2f44596f8499aec4d9e0cbb8a69e9d9d9d9d9d9d9d9d9e9faba9b2b7c3cdc3b7aa9f937e695e4c3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202c3335352d2a221709000000000000000000000000041425323d4a4e565a59564d493c302313010000000000000000000000000000000000060f1a21232b34373b3e4040403f3d3a37332a24211a0f09000000000000000000000000000000000000000000000000000000000a1a2e3f50616d82979fb4bbc8d2cec3b7b2aa9f9b97959596979a9da6a8b0b4c1cac7beb2a79b86705b392816030000000000081c304354606b717379849aa2b4bfb49e8978624d372715010000000000000000011527375b70859ab0c5dacab59f8d7c7b7b7c808a9eaabbcee3cfbcab9a846f5d4c36251300000000000000000000000000000000000000000000000b2034485972879cb2c7d6c0ab96816b56373d4f647a8fa3b4c8c8b49f8c78634d3c2b19060000000000000000000000000000000f243a4f647a8fa6a79e998b7b654f3c2c475c72879ca69fa8907b655036251300000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9fb5b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8bfab96806b56412b160002172c41576c8196acc1d6ddc8b39e888788888888888888898a8e949da5b5bcc9c8bbb49f8c7b655846331f0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b171e1f1f17150f05000000000000000000000000000007141f2d36394145444038352c1e130500000000000000000000000000000000000f1a212c35383b484d50535556555553504c473a39362d241d120700000000000000000000000000000000000000000000000000031628384b5d6a7f94a0b1beced7c8bbb4a59d938b86828080818284888d939ba3b2b7c3cfc5b39e88735745321e09000000000001142636434b555c5b6373849aaabbb9a895806b5544311d08000000000000000000182e43586d8398adc2d8cfbcab9f90909091959ea8b9c8d8cfc2b59f8d7a644e3f2f180800000000000000000000000000000000000000000000000d22374d62778ca4b6cad5c4a6917c67513c374b5d70859bb0c2cebbaa97826d5a4935200e0000000000000000000000000000000b20354a6074889db2b3a99a85705a49354a5f758a9fb4c4ac97816c5443301c0700000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889da3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a399846e59442f190000142a3f54697f94a9bed4d1bca7927d72727272727272727475797f87959fabbccfcebbaa9d8876614c3a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21242c2f2f2b2320190e000000000000000000000000000000000008131c2c353d494e56596266686a6b6b6a68656158564e4a3e3830211a0f010000000000000000000000000000000000000000000000091e324556657b8d9fb5beced7c7baaa9f95877e76706d6b6b6c6d6f73787e858f9da5b7cacbb8a68b76604b36210b0000000000000818263035403d4a5562788c9fb4c6b39d8874604b35200b000000000000000000162b40556b8095aac0d5dac9bcb5a6a5a5a7abb3b9c6d6c9bcb5a497826d5c4a36211100000000000000000000000000000000000000000000000012273d52677c92a7c3d3cbb7a68d77624d382e3f51667c91a4b6cac8b49f8b78624d3c2b19050000000000000000000000000000071c3043546c8197acc5b4a28d78624d38465b70859bb0c5b29d8874604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000021628385b70858d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d86715c47321c000012273c51677c91a6bcd1d4bfaa947f6a5d5d5d5d5d5d5d5560646a747f8d9fb5becfc8b7a696816c5947341f0a000000000000090f11202020202020202014120c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e171a1a160e0c0600000000000000000000000000000000000a1825303d494e5b636b72777b7e7f80807f7d7a77716b645c514c40362d1f1402000000000000000000000000000000000000000000031629394b6075879cabbccfd9c9baa99f8c807568615858565556575a5a6269707a879db2c7d5c5a38e78634e39230e0000000000000008141c202b2d37495a6f8499afc4b7a6907b65503b261000000000000000000013283e53687d93a8bdd2e7dacfcabbbbbbbcc0c9ccd6cfbcab9f988676614c3e2d1b03000000000000000000000000000000000000000000000005182b3b576c8297acc1d7c8b39d88735a483520354b6073879cb1c4cebbaa97826d5a4835200d00000000000000000000000000000013253650657b90a7b8c0a9947e69543a3f546a7f94a9c2b7a68e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000d22374d6278787878787878787878787878787878787878787878787878787878787878787878634d38230e00000f243a4f64798fa4c6d7d7c1ac97826c57484848484837444b4f56606a7e93a0b2c6d5c4b49f8a77614c37220c0000000004121d2427353535353535353529272014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2736434a5b636e7980878c909395959594928f8b86807970665e4e4a3d321d150900000000000000000000000000000000000000000a1e324657697f94a5b6c9dacfbcab9f8b7c6a60564c463a404041423c484d535c6e8398aec3d0bba5907b66503b2611000000000000000001080b16192c3c54697f94a9bec4aa947f6a553f2a1500000000000000000010263b50657b90a5bad0e5e3d6ccc9bdbdbec3caced9cab59f8d82766158473320100000000000000000000000000000000000000000000000000b2034485972879cb1c7d9c3ae99836e593c2b1c304354687e93a6b8cbc8b49f8b78624d3c2b190500000000000000000000000000000b20354b6074899eb3c5af9a85705847384e63788da4b6c4aa95806b553c2c1906000000000000000000000000000000000000000000000000000000000000000000000000000b20344859626363636363636363636363636363636363636363636363636363636363636363635a4935200c00000c22374c61778ca8bacdd9c4af99846f5a443333333327313538454b606e8298adc1d2cdbaa9937e695438281602000000122230393c4a4a4a4a4a4a4a4a3f3b3225140300000000000000000000000000000000000000000000000000000000000000040d14162020202020202020202020202020202020202020202020201917110700000000000000000000081827384554606979838d969ca4a5a8aaabaaaaa8ab9f9c968e857c70635b4f4231271909000000000000000000000000000000000000000c21364b6176899eb3c3d3d3c3b49f8d7c665e4b453833292b2b2c2d2b35383e566b8196abc0d3bda8937e68533e291300000000000000000000000011263b51667b90a6bbc3ae99846e59442f190400000000000000000e23384e63788da3c4d5e7d6c5b9b3a8a8a9aeb4bbc8cab49f8b80756158473827150200000000000000000000000000000000000000000000000d22374c62778ca4b6cad9c9a9947f6a543f2a1426364b6075889eb3c6cebbaa97816c5a4834200d0000000000000000000000000000081d3144556d8298adc7b49f8b76614c37495b71869cb1c6b19c86715a4935200c0000000000000000000000000000000000000000000000000000000000000000000000000005192b3b484d4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d493c2c190600000b1f34475974899fb4c9dcc7b19c87725c3a2a181d1d151d202731424e63798ea3b5c9d7c7b09a85705645321e090000091d30404c516060606060606060544f4332200c000000000000000000000000000000000000000000000000000000000000081621282b3535353535353535353535353535353535353535353535352f2c24190a000000000000000000132536455660727f8b99a1abb1b6c2bdbfc0c0bfc9bcb5b1aba39b91847969614b4437271909000000000000000000000000000000000006192b3c53687e93a7b8ccdecab6a496806b5e4c4032281f17161617181920293e53697e93a8bed3c0ab95806b56402b160100000000000000000000000f24394e64798ea3b9c7b29c87725d47321d0000000000000000000b21364b60768ba6b8cbe0ccb9a79e929294989faab8c5bbaa9f968576615645311d15040000000000000000000000000000000000000000000012273d52677c92a7c2d3cfbcab907a65503b25101e3245566a7f94a8b9cdc8b49f8b78624d3b2b1905000000000000000000000000000115273751667c91a9babbaa927d6752383d566b8095abc4b5a48d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3437383838383838383838383838383838383838383838383838383838383838383838352c1e0e00000004182a3b5c72879cb1c7dcc9b49f89745947341f0a0001080b1521364a5b71869bb1c6dbc9b49f8a75604b36210b00000f24394c5e66757575757575757569614f3b27120000000000000000000000000000000000000000000000000000000000041626333d404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a44403629190700000000000000071c304354607482949fa9b2bfc7cad3d3d1cecccddacfcac6c1b4b0a29a8b7e6d60554437271501000000000000000000000000000000000b2035485a71869bb1c5d5d6c6b29c8775604b402f1e160a04000000030a11263c51667b91a6bbd0c3ad98836e58432e190000000000000000000000000d23384d62788da2b7c8b39e89735e392816030000000000000000091e32455673889eb3c8ddc9b39e897e7d7e838c9ea7b8c8bbb4a39a8474604b4332221202000000000000000000000000000000000000000005182a3b576c8197acc1d7cab49f8b76614b36210c1628384c61768a9eb4c8cebaa997816c594834200d00000000000000000000000000000b21364b60768a9fb4c8ae98836e56453a4f64798fa6b7c2a9947e69543a2a180d0d0d0c0a030000000000000000000000000000000000000000000000000000000000000000000d19202223232323232323232323232323232323232323232323232323232323232323232320190e00000000001a2f445a6f8499afc4d9cdbaa98c77614c37220c00000000071a2d3d576c8196acc1d6cebaa98e79634e39240e000011273c51667c8a8a8a8a8a8a8a8a7f69543f291400000000000000000000000000000000000000000000000000000000000d2133445055606060606060606060606060606060606060606060606060595447362411000000000000071a2d3d4a60728298a0b4bac7cfd7cdc9c3bcb9b7b8babec5cacec8c0b4a99f938273605544311d14020000000000000000000000000000000d23384d62788da3b5c9e1ccb9a8937e68564532211203000000000b161e2124394e64798ea3c6d6c5b09b85705b3828150200000000000000000000000c21364c61768ba1b6cab49f8a755746321e090000000000000000021628385b70869bb0c5dbcab49f8a7468696e7a899eaabbcec1b4a297826d614f4030201000000000000000000000000000000000000000000b1f34485972879cb1c7dbc6b19c86715746331e0a0a1f3347586c8196aabbcec7b49f8a78624d3b2b1805000000000000000000000000030b1e3245576e8399aec8b49e8975604b364a5c73889db2c5af9a857058473322222222211e170b000000000000000000000000000000000000000000000000000000000000000000050b0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c06000000000002172d42576c8297acc1d7d7c7a48e79644f39240f000000000014293f54697e94a9bed3d8c7a5907b66503b261100000f24394e64798e9f9f9f9f9f9f96816c57412c17020000000000000000000000000000000000000000000000000000000014283d50626b7575757575757575757575757575757575757575757575756e6554402c170200000000000c21364a5b6a7f94a0b2becdd7d1c7bab4aea7a4a2a2a4a8afb4bbc8d0c7bab4a0978373604b4332201000000000000000000000000000000014293e53697e93a8c1d2dec9b39e8976614b3828160300000006141b29323637374c61768ba8b9ccc8b39d88735645321d0900000000000000000000000b20354a60758aaabbcebbaa8b76614b36210c000000000000000000192e43596e8398aec3d8cebbaa8d7762545c657b8c9fb4bdcec0b1a0947f6a5f4d3e2d1d0d000000000000000000000000000000000000000d22374c62778ca4b6cad7c2ac97826d573929170304172a3a4d62788b9fb4cacdbaa996816c594834200d00000000000000000000000b171e29333952687d92aabbb9a8907b66503b3e576c8196acc5b49f8b77614c37373737373633291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4d1bca6917c67513c2712000000000013283d53687d92a8bdd2d1bca7917c67523c271200000c21374c61768ca8b9b5b5b5ae99846e59442f190000000000000000000000000000000000000000000000000000000000162b40556b808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a836e59442f190000000000071b2d3e4e63798b9fb4becfe2cfc0b4a99f98928f8c8d8f939a9faab3c0cfcdbeb1a198826d614f3e2d19090000000000000000000000000001142636586d8398adc2d8d7c2ad97826d5746321a0a0000000214243139464b4d4d4d5874899eb3c9cab59f8a75604b36200b0000000000000000000000071c304354758a9fb4cab5a08b76604b36210b000000000000000001162b41566b8096abc0d5d8c8a58f7a65504b5d687e939fb1c0cebeb59f8d7d675c4a3c2b1b0b00000000000000000000000000000000000012273c52677c91a7c2d3d6c6a8927d68533d281300000c2035485a6e8398adc0d1c7b49f8a77624d3b2a18050000000000000000000b1b293339464c4c61768b9fb4c6ac97816c574c4c50657b90a7b8bbaa927d68524c4c4c4c4c4c46392917030000000000000000000000000000000000010d171c1f202020202020201d1a140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1d3bea9947e69543f2914121212121318283953697e93a8bed3d8c8a6917b66513c261100000a1f33475874899eb4c9cac6b19c86715c3a2917040000000000000000000000000000000000000000000000000000000013283e53687d939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c86715c3a2a1704000000000d22364a5c6f8499aabbcedccfbfb2a29a8a837c7977787a7e858c9aa2b5bcc9cebfb2a0947f695c4a37261401000000000000000000000000081c30435472879cb1c7dcd9c9a8937d6853392916000000000b1f31424e57616262626271869cb1c6cfbcab8d78634e38230e00000000000000000000000013254a5f748a9fb4c9bbaa8a75604b35200b00000000000000000014293e53697e93a8bed3d2bca7927d67523f4e606c8197a2b4c3cfbcab9f8b7a645a48392918080000000000000000000000000000000005182a3b576c8197acc1d6cdb9a88e79634e39240e000006192b3c4f647a8ea2b4c8cdbaa996816c5948341f0c000000000000000003172939464b576162626f859aafc4b29d8873626262626275899eb3c8ae99836e626262626262615746331e0c0000000000000000000000000000000001111f2a313435353535353535322f271c0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7d6c1ac96816c57412c2727272727292a3446576c8197acc1d7cebbaa8f7a644f3a250f000004172a3a5c71879cb1c6dcc9b39e89745846331f0a0000000000000000000000000000000000000000000000000000000010263b50657b90a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b49e89745847331f0a000000001325364f647a8ea1b3c8d8d2c2b2a09884786e676462636569707984949fabbccfcfbeb49f8c7a645544311d090000000000000000000000000b20354b60758a9fb4c9dfcfbcab8e79634e39240e0000000011263b4e6068767777777778849aafc4dac9a5907b65503b26100000000000000000000000001f34495f74899eb4c9b49f8a755544311d0800000000000000000011263c51667b91a6bbd0d4bfaa957f6a5540424b6073849aa5b7c6c9baa99d8878625746362614010000000000000000000000000000000b1f34475972879cb1c7dcc9b49e8974604b35200b0000000e22364a5c6f849aafc2d2c7b49f8a77624c3b2a1804000000000000000a1e3346576170767777777f95aabfb7a6907b7777777777778399aec3b49f8a7877777777777776614c3a2a17040000000000000000000000000000000d1f2f3d46494a4a4a4a4a4a4a47433a2c1c0a000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bacdd9c3ae99846e59443c3c3c3c3c3d3e3a474c6175889eb3c8ddc9b49f8a75604b36210b0000001a2f44596f8499aec4d9ccb9a88b76614c36210c000000000000000000000000000000000000000000000000000000000e23384d63788dabbcb6b6b6b6b6b6c4c7d0cacacacbc2beb6b6b6b6b9a88c76614c37210c000000071c3043546c8297acbfd0dec9b5a4988272625a524f4d4d4f535b636f7f8d9fb5bdcecebbaa9b8573604b3727150200000000000000000000000d22374d62778caabbcedfcab49f8a75604b35200b0000000013293e53687e8c8c8c8c8c8c9aa2b4c8d2bda8937d68533e28130000000000000000000000091f34495e74899eb3c9b49e89745f492614010000000000000000000e24394e63798ea3c5d6d7c2ac97826d57423144556176879da8b9c9c7b7a69b8575615443301c140300000000000000000000000000000d22374c62778ca4b6cadac4af9a856f5443301c08000000071b2d3e50667b90a4b5c9cdbaa996816b5947341f0c000000000000000c21364b6175858b8c8c8c959dafc3c4ab99908c8c8c8c8c8c99a1b2c6baa99f8d8c8c8c8c8c8c84705847331f0a000000000000000000000000000003172a3d4d5a5e606060606060605c574a3a2714000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c9dbc6b19b86715c52525252525252535559616d8197a6b8cbcdbdae99846f5645321e09000002172c42576c8197acc1d6d6c6a38e79644e39240f000000000000000000000000000000000000000000000000000000000b20364b60758a9fa0a0a0a0a0a0a0aeb3bfd0decbbbaea9a0a0a0a0a0a08e79644f39240f0000000b20354a6074889eb3c8ddd3c2b19c86746054483c3a37383a3d4a4e61697e929fb1c3d3c8b5a3927d685544311d0800000000000000000000000f24394e64798ea3c8d8dec8b39e89735443301c08000000041a2f44596f8499aba2a2a2a2afb4c0d1d5c0aa95806b55402b160000000000000000000000091f34495e74899eb3c8b39e89735e49341e000000000000000000000c21364c61768ba7b9ccdac4af9a856f5a362737475863798a9eabbccfc4b5a3998372604b42312111010000000000000000000000000012273c52677c91a7c2d3d5c0ab95806b5636261401000000001023384c5e71869cb1c4d4c7b49f8a77614c3a2a180400000000000010263b50657b90a3a1a1a1aaafbcccc8b7aba5a1a1a1a1a1a1aeb2bfcfc7bab4a2a1a1a1a1a19f8b76614c37210c0000000000000000000000000000081c31465a6b7475757575757575726857432f0c00000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c7dcc9b39e89746767676767676767686b6f7782979fb1c4ccbeb09f8f7a654f38281603000000142a3f54697f94a9bed4d0bba6917b66513c261100000000000000000000000000000000000000000000000000000000091d32455673888b8b8b8b8b8b8b8b99a1b3c7d6c2ae9d948b8b8b8b8b8b8b7c67513c27120000000f24394e64798ea6b8cbdecab6a4907c665645362b242223252d36434f606c8197a5b6cad2c1b29d8774604b36200d00000000000000000000000f253a4f647a8fa4b9cfdcc7b29d87725d3626140100000003182d42586d8297adb7b7b7b7c4c8d1d5d5c2ad98836d58432e180000000000000000000000091e33495e73889eb3c8b39e89735e492715020000000000000000000a1f33465874899eb3c9dcc7b29c87725443302a3a4a5b667c8d9fb5becfc2b3a196806b604e3f2f1f0f00000000000000000000000004182a3b576c8197acc1d6d4c3a6917c66513c27110000000000091c2f4052687d92a6b7cbcdbaa896806b5847331f0c0000000000000f24394e64798ea7b9b7b7bfc5c8ccd6c8bebab7b7b7b7b7b7c3c5caced7cdc9b7b7b7b7b7bbaa927c67523d27120000000000000000000000000000091f34495e74898a8a8a8a8a8a8a86725c3b2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafc4d9ccb9a7927d7c7c7c7c7c7c7c7c7e80848b97a0b1bdc6b9b3a096816c5d4b371a0a0000000012273c52677c91a7bcd1d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000021528384b607576767676767676758399aec4d4bea9947f7676767676767673604b35200b00000013283d53687d92a8c4d5dcc7b19c87725e4c3828180f0d0e101a2132424b6074879cb2c3d3cbb7a5927c67523b2b19050000000000000000000010253a4f657a8fa4bacfdbc6b19b86715c46311c0000000000152b40556a8095aabfc0c0c0c0c0c0c0c0c0b09a85705b3727150200000000000000000000081d32475d72879cb2c7b49f89745544311d080000000000000000000417293a5c71869bb1c6dbc9b49f8a75604b35202d3d4c5e6a7f95a0b2c1d0bfb09e937e685d4c3d2c1c0c00000000000000000000000b1f34475971879cb1c6dccab7a58c77624c37220d0000000000001220364b6074889db2c6d6c6b49e8a77614c3a2a170400000000000b20354b6075899eafafafafafb3b8c5d6c7bab4afafafafafafafb4bbc8d5c5b8b3afafafafab96806b56412b160100000000000000000000000000071c31475c71869c9f9f9f9f9f9f89745947341f0b00000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2d7d6c5ad9b9291919191919191929395999fa9b1beb6b2a89e938273604b3f2e1c00000000000f253a4f647a8fa4c7d7d6c0ab96816b56412c1601000000000000000000000000000000000000000000000000000000000a1e32455660616161616161616c8196acc1d6c0ab96816b616161616161605544311d08000001162c41566b8196abc0d6d6c1ac96816c57402f1a0a0000000007141d324556677d92a5b6cad4c3b09a8570594834200b000000000000000000000e24394e63798ea3b8cedbc6b19c86715c47311c000000000013283d53687d92a8aaaaaaaaaaaaaaaaaaaaaa9d88735544311d0800000000000000000000061c31465b71869bb0c6b59f8a75604b36200b00000000000000000000192f44596e8499aec3d9cebbaa8c77624d37221f30404a60728298a3b5c4cdbcb49f8c7b655b493a2a1a0a000000000000000000000c22374c61778ca4b6caddc7b29d8872594834200b000000000000081d314455697f94a8b9cccdb9a895806b5847331f0c0000000000081d3144556e83989a9a9a9a9a9ea7b8ccbaa99f9a9a9a9a9a9a9a9faabbccb8a79e9a9a9a9a9a95806b55402b16000000000000000000000000000004192f44596e8499aeb5b5b5baa98c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e3cab9ada7a7a7a7a7a7a7a7a7a8aaafb4babfb3a49c94897e7260554431211100000000000d22374c62778ca9bacdd8c3ae99836e59442e19000000000000000000000000000000000000000000000000000000000003162838454b4b4b4b4b4b4b54697e94a9bed3c3ae98836e594b4b4b4b4b4b4437271501000003182e43586d8398adc2d8d1bca6917c67513c2712000000000000021528384b6073879db2c7dccab59f8c77624d37220d000000000000000000000d22384d62778da2c7d7dcc7b29c87725d392816030000000010263b50657b90959595959595959595959595958b75604b36200b00000000000000000000051a2f445a6f8499afc4bcab8d78624d38220d05000000000000000002172c41576c8196acc1d6d8c8a48f7a654f3a25121c3043546075859ba6b8c7cebbaa9e89796358473828150200000000000000000012273c51677c91a6c2d3d8c3ae98836e593b2b1805000000000000021527374c6176899eb3c8d7c6b49e8976614c3a291704000000000115273751667c858585858585899eb3c8b49f8b848585858585848c9fb4c8b39e8984858585858176614c36210c000000000000000000000000000002172c41576c8196acc1cad7c7a48f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2e7d8cac0bcbcbcbcbcbcbcbcbcbdc0c4c9c7b3a199867f76686054443726140300000000000b20354a60758a9fb4c9dbc6b09b86715b3929160302010100000000000000000000000000000000000000000000000000000a1a28323636363636363c51677c91a6bcd1c6b09b86715b39363636363531271909000000041a2f44596f8499aec4d9cfb9a48f7a644f3a250f000000000000000a1c3043546b8095abc5d6cfbcab937e69533e2914000000000000000000000c21374c61768ca9bacddec9b39e89745746321e09000000000d22374c627780808080808080808080808080808076614c36210c0000000000000000000002172c41576c8196acc5c9a5907b6650372720190e000000000000000014293f54697e94a9bed3d1bca7927c67523d271213253645576278889ea9bacec8b9a79d8776615645321d15050000000000000004182a3a576c8197acc1d6d8c8a9947e69543f29140000000000000000091e3346576b8096aabbceccb9a895806b5847331f0b00000000000924384c5e667070707070708096abc4b59f8b77707070707070849aafc4b29d88737070706f6c615846331f0a000000000000000000000000000000142a3f54697f94a9bed4d1bca6917c67513c27120000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8d8e9d7c6bab4afafafafafafb0b1b3b7c4c4c4ae9984786f635b4b4336291b0b000000000000071c30435472879cb2c7dcc8b39e89735746321e1717171614120f0b09020000000000000000000000000000000000000000000a161e212121212124394f64798ea4c6d7c8b39e8873574532212121201d150900000000051a2f445a6f8499afc4d9cdb8a28d78634d38230e00000000000000011426364e64798ea7b9ccdac9ae98836e593a2a18040000000000000000000b20354b6075899fb4c9deccb9a78b76614b36210c000000000b1f344859626b6b6b6b6b6b6b6b6b6b6b6b6b6b6b615746331e0a000000000000000000000011273c51667c91a6b8c0aa95806b554438352b1e0e0000000000000012273c51677c91a6bcd1d4bfaa947f6a553f2a1508182839485a657b8b9fb4bdcdc5b6a59a8474604b43332313020000000000000a1f34475971869cb1c6dccebbaa8f7a654f3a25100000000000000000031729394d62778b9fb4c9d6c6b39e8976614c3a29170400000000091d2f404c515a5a5a5a5a647a8fa6b8bcab937e685a5a5a5a697e93a8c1b7a68e79645a5a5a574c463a29170400000000000000000000000000000012273c51677c91a6bcd1d4bea9947f69543f2a14000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbcee1cdbaa89f9a9a9a9a9a9a9a9c9da6a7afb4b3a1998c84796b605446392919090000000000001325365a6f849aafc4d9ccb8a78b76614b362d2d2c2c2b2a2724201d150e0c060000000000000000000000000000000000000003090b0c0c0c0c22374c61778ca8b9cdcbb8a68b76604b36210c0c0b0801000000000004192f44596e8499aec3d9cdb7a28d78624d38230d00000000000000000821364a5c74899eb3c9ddc8b39d88735847331f0a000000000000000000081c30435471869bb0c6dbd6c5a38e79644e39240f0000000005182a3b484c5555555555555555555555555555554c463929170300000000000000000000000b21364b6075889eb3bfb29d877460524d483c2b19050000000000000f243a4f64798fa4c6d7d7c2ac97826d57422d18000a1b2b3c4b5d687e929fb0c0d0c3b4a298826d6150413020100000000000000c22374c61778b9fb5cadfcab49f8a76604b36210b0000000000000000000b203448596d8298adbfd0ccb9a895806a5846331f0b000000000012222f383c454545454b6074889db3c9af99846f5846454d62788da3b5c4aa95806b553c45413633291c0c000000000000000000000000000000000f243a4f64798fa4c7d7d6c1ac96816c57412c17020000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4cadec9b49f8a8485858585858586888c919aa2b3b3ab9f998b8072615746372715020000000000182d42576d8297acc2d7d5c5a38e79634e4242424241403f3c393632282321190e0800000000000000000000000000000000000000000000000a1f33475874899eb4c9d5c5a38e78634e39230e00000000000000000003182d42586d8297adc2d7ceb9a48e79644f39240f0000000000000000071a2d3e5b70859ab0c5dacbb7a68c77614c37220c00000000000000000001142636586d8297adc2d7d2bda7927d68523d281300000000000d1d2a34374040404040404040404040404040403633291b0b000000000000000000000000091e324556697e93a1b3b7a596806f68625a4835200b0000000000000c22374c61778ca8bacdd9c4af9a846f5a36251300000e1e2e3f4e606c8196a2b4c3d1c0b2a0947f6a5f4d3e2e1e0e000000000012273c51677c91abbccfdbc6b09b86715645321e0900000000000000000005182b3b4e63798ea1b3c7d6c6b39e8976614c392917030000000004121d24263030303043546d8297acc6b49f8a76614c36485a71869bb1c6b19c86715b49352c211f170c00000000000000000000000000000000000c22374c61778ca9bacdd9c4ae99846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572879db2c7dcc8b39e88737070707070707173777c84909da6b7b5aa9f958375615544311d100000000000152a40556a7f95aabfd4d0bba6907b665757575757565654524f4b453838352c231c110500000000000000000000000000000000000000000004182a3a5c71879cb1c6d0bba5907b66503b261100000000000000000001162b40566b8095abc0d5cfbaa5907a65503b2510000000000000000000172c41576c8196acc1d6d5c4a48f7a654f3a25100000000000000000000014293f54697e94a9c4d4d7c1ac97826c573e2d1b0700000000000d181f222b2b2b2b2b2b2b2b2b2b2b2b2b2b2b211e170b00000000000000000000000000021628384b60728399a1b1b09e96847d78624d38220d0000000000000b1f34475974899fb4c9dcc7b29c87725443301c070000102131424b6073849aa5b6c6cfbeb59f8d7d675c4b3c2b1b0b00000004182a3a576c8196acc9dad6c1ac97816c5738281603000000000000000000000d21364a5b6f8499afc1d2ccb9a7957f6a5746331e0b000000000000090f111b1b14263651667b90a8b9bbaa927c6752383c556a7f95aac3b6a48d78634d382317140e0c06000000000000000000000000000000000b1f34475974899fb4c9dbc6b19c86715c3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000011426375a70859aafc5daccb8a78b76615a5a5a5a5b5c5962676f7c889da7b8bbb4a1998373604b3e2d1b070000000012283d52677d92a7bcd2d3bea8937e6c6c6c6c6c6c6c6b6967646056554d493c372e20190e0000000000000000000000000000000000000000001a2f445a6f8499afc4d2bda8937d68533e28130000000000000000000013293e53687e93a8bdd3d2bca7927d67523d281200000000000000000014293f54697e94a9bed3d2bda7927d68523d2813000000000000000000000f243a4f64798fa6b7cbddc7b29d87725c4a36220c000000000000050b0d1616161616161616161616161616160c0a030000000000000000000000000000000a1c304354617583929ca4b0a19a927f6a55402a1500000000000004182a3b5c72879cb1c7cec9b49f8a75604a35200b000003131d3144556176879ca8b9c7cfbcab9f8b7a645a483929190900000a1f33475871869cb1c6cdd4c3a7927d68523d28130000000000000000000000071a2d3d50657b90a3b5c9d4c5b39e8976614c392917030000000000000a151d202c2d364b6075899eb4c8ad98836e5645394e64798ea5b7c2a9947f69543b2a2c2a23211a0e00000000000000000000000000000004182a3b5c72879cb1c7dcc9b49e89745847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2d7d5c5a38e78634e454545453b484c525e6679899eb3c2bfb3a296816c5c4a36220d0000000010253a50657a8fa5c8d9dbc6b09b8581828282828181807f7c7975706a635b504b3f352b1e120400000000000000000000000000000000000002172c42576c8197acc1d5c0ab95806b56402b160100000000000000000011263b51667b90a6bbd0d4bfaa957f6a55402a1500000000000000000011273c51667c91a6bbd1d4bfaa957f6a55402a15000000000000000000000b20354a6074889db2c8ddcab7a58e79644f3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636465761727e869cb1b3ad97826d58422d18000000000000001a2f445a6f8499afb9b9b9baa98c77624d37220d00000001152737475863798a9ea9b5bcc9baa99d887862574637261401000c22374c61778b9fb5b8b8c4b7a58d78634e38230e0000000000000000000000000f23374b5d71859babb7c4b8b8a7947f6a5746331e0a00000000000a1a27313642424245566e8399aec8b49e8975604b424a5c72879db2c5b09b8570594842413f38352c1f130500000000000000000000000000001a2f455a6f849aafc4d9ccb9a88c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5d0bba5907b66503b3030302a3437404c5b677d91a4b6cac0b49f8c7a644f3b2b18050000000d23384d62788daabbceddc9b5a39b979797979797969594918e8a857f786f655d4d483c30221406000000000000000000000000000000000000152a3f546a7f94a9bfd4c2ad98836d58432e18000000000000000000000e24394e63798ea3c5d6d7c2ac97826d57422d180000000000000000000f24394f64798ea4c6d6d7c2ad97826d58422d1800000000000000000000071c3043546c8197acc3d3d4c3ac96816c5846331f0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a4c5e6679849aafc0af9a85705a45301b00000000000002172d42576c8297a4a4a4a4a4a48f7a644f3a250f0000000009192a3a495b667c8b9b9faba3a3a3a69c8675615544311d080012273c51677c91aba3a3a3a3a69d8773604a35200b000000000000000000000000081c2f3f50657b8d9da6a3a3a3a39e8975614b36210c0000000002152738454b5757575757687d92aabbb9a8907b66575757576c8196abc1b59f8b7762575756544e493d3023130000000000000000000000000002172d42576c8297acc1d7d6c6a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2d3bda8937e68533e291b1b181f222f3d4a6073869cb1c6cfbcab99846f594834200b0000000b20354b60758a9fb4cadfd2c1b5b0acacacacacacababa9a7a99f9b948c847b6f625a4d4032241405000000000000000000000000000000000012273c52677c91a7bcd1c5b09b85705b382715020000000000000000000c21364b61768ba7b8ccd9c4af9a846f5a3625130000000000000000000c21374c61768ca8b9cddac4af9a856f5a362614010000000000000000000013253650657b90a4b6cadec9b39e8976614c3b2b180800000000000000000000000000000000000004070000000000000000000000000000000000000000000a1f344759667c8b9aa1b3b1a29a87725d48321d00000000000000152a3f556a7f8e8e8e8e8e8e8e8e7c67523d271200000000000c1c2c3d4c5e667b858b8d8d8d8d8d8d8d8475604b35200b00172c41576c818d8d8d8d8d8d8d887c655443301c07000000000000000000000000001123384c5e677d888d8d8d8d8d8d8d7f6a543f2a1500000000091d314556606c6c6c6c6c6c778a9fb4c6ac97816c6c6c6c6c6c7a8fa5babcab937e6c6c6c6c69635b4d41301a0a00000000000000000000000000152a3f556a7f94aabfd4d1bba6917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d9d5c0ab95806b56402b1600050b121c3043546b8096abc0d9c9b49f8b77624d37220d000000081d31445572889db2c7dddfd2c9c6c1c1c1c1c1c1c1c0bec7bab4b0ab9f9a908378665e4f4232231302000000000000000000000000000000000f253a4f647a8fa4c7d7c8b29d88735645311d090000000000000000000a1e33465773899eb3c8dcc7b29c87725443301c0700000000000000000a1f33475874899eb4c9dcc7b29d87725443301c08000000000000000000000b20354b6073879cb2c5d5ccb9a8957f6a5948362513000000000000000000000000000000070d0f1a1c150b070000000000000000000000000000000000000c22374c6177899ea9b3b19f97847f69543f2914000000000000000c22374c6177797979797979797977614c37220c0000000000000f1f2f404c5d657076787878787878787974604b36210b000d22374d62787878787878787874655d4c3625130000000000000000000000000000091c2f404d5f67747778787878787877624d38220d000000000b20364b607481828282828281899eb3c8b39e898182828282828197acc2c9b19c86818282817f79675f4d3827150200000000000000000000000012273d52677c92a7bcd1d3bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788dabbccfd8c3ad98836e58432e190000000013253651667c91a6bbd1cebbaa927d68523d2813000000011527375b70859ab0c5daebdbcec4c1bbbbbbbbbbbbbcbec2c8c9c9bcb5afa199897c69604f41312010000000000000000000000000000000000d22374c62778ca9bacdcab49f8a75604b36200b000000000000000000031729395c71869bb1c6dbc9b49f8a75604a35200b000000000000000004172a3a5c71879cb1c6dcc9b49f8a75604b35200b00000000000000000000081c304354687e93a7b8ccd6c6b49e8a78625443301c1404000000000000000000000003101b22242f322a201c130800000000000000000000000000000000132536556b8095a7b8bcab97816f69614f3b2712000000000000000a1f344759616464646464646464615947341f0b0000000000000111222f3f4b5057616363636363636363605645321e09000b20344859626363636363636260554c3f2f1808000000000000000000000000000000112130414d546062636363636363625a4835200b00000000091d31455671869797979797979ea7b9ccb8a79e979797979797979fb1c5cab6a49c97979796948c7d675645311d0900000000000000000000000010253a4f657a8fa4c8d8d6c1ab96816c56412c17010000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cadac5b09b85705b3828150200000010253a4f657a8fa4bacfd9c8ac97816c57422c1700000000182d43586d8298adc2d7e0cebdb1aca5a5a5a5a5a6a7a9adb3b7c4c9cabfb3a89e8d7e695f4e3e2d19090000000000000000000000000000000b20354a6075899fb4c9cfbcab8d78634d38230e00000000000000000000192f44596e8499aec3d9cdbaa98c77624c37220d0000000000000000001a2f44596f8499aec4d9cebbaa8c77624d37220d00000000000000000000011426364b6075899eb3c1d2cdb9a8998372604a41321f170c0300000000000000020b161e2e363a44473f35302518080000000000000000000000000000071c30435471869cb1c5b59f8c7762544f43321f0c0000000000000004182a3a474c4f4f4f4f4f4f4f4f4c473b2a1804000000000000000311212e3739464b4d4e4e4e4e4e4e4e4b45382816020005192b3b484d4e4e4e4e4e4e4d4b44372f2111000000000000000000000000000000000312233036434b4d4e4e4e4e4e4e4d483c2b19050000000002152738556a8095aaacacacacb3b9c5d5c5b8b3acacacacacacacb1bdced3c2b6b1acacacabaa9d8874604b36200b0000000000000000000000000d22384d62778daabbced8c3ae99836e59442e1900000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889db2c8ddc8b39d88735645321d090303000e24394e63798ea3b8ced9c4af99846f5a442f1a00000000162b40556b8095aac0d5d9c4b19f969090909090909293979da6b1b5c2cec6b9ab9f927d685c4a372715010000000000000000000000000000071c30435472879cb1c7d9c9a5907a65503b251000000000000000000002172c41576c8196acc1d6d7c7a48f7a644f3a250f000000000000000002172c42576c8197acc1d6d8c8a48f7a654f3a25100000000000000000000000081e324556697e93a3b5c9d7c6b3a1947f6a5f4f43332a1e170d0b0700050b0d151d29323e4a4f595c554a4336251300000000000000000000000000000b20354a60758a9fb4c8b39d887359483b3225140300000000000000000c1c2a3437393939393939393937342a1d0c00000000000000000003111c2329333638383838383838383632281a0a0000000d1d2b34373838383838383835312719110300000000000000000000000000000000000512182630353838383838383838352b1e0e0000000000000f24394f64798ea3b4c0b9b9b9bbbfc8d5ccc8c1c1b9b9b9b9b9b9bfc2ccd3cac7c1bfb9c8b7a6917b66513727150200000000000000000000000b20354b60758a9fb4c9dbc6b19b86715c39291703000000000000000000000000000000000000000000000000000000000000000000000000000000021527375b70859ab0c5dacab59f8a75604b3620181818191b25364f657a8fa4bacfdac5b09b85705b46301b0000000013283e53687d93a8bdd2d6c1ac96817b7b7b7b7b7b7c7e8288909ca4b1becec9bcb49f8b7a645544311d090000000000000000000000000000001325365a6f849aafc4d2bda7927d68523d28130000000000000000000014293f54697e94a9bed3d1bca7917c67523c2712000000000000000000142a3f54697f94a9bed4d1bca7927c67523d27120000000000000000000000031628384b6073859babbccfd0bfb59f8d7d69614c473a332923201c13181f22273139464b5c646f716a605443301c12010000000000000000000000000b20364b60758baabbc7b19c87725c3b2b1f1406000000000000000000000c181f222424242424242424221f180c000000000000000000000000080b171e212323232323232323211e160a00000000000d19202223232323232323201d150900000000000000000000000000000000000000000008141c20222323232323232220190e000000000000000d22364a5c70859aa2a3a4a4a4a6abb8c8cfbeb2aea4a4a4a4a4a4aaafbbccccbcafaaa4a4a4a497826d5544311d080000000000000000000000081c30435472879db2c7dcc8b39e89735746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adc2d8cfbcab8d78634e382e2e2e2e2f2e374354697e93a9bed3dac5b09a85705b45301b0000000010263b50657b90a5c9dad5c0aa95806b666666666667696d737c86979fb1bececebaa99c8673604b372614010000000000000000000000000000172d42576c8297acc1d5bfaa95806a55402b150000000000000000000012273c51677c91a6bcd1d4bea9947f69543f2a1400000000000000000012273c52677c91a7bcd1d4bfaa947f6a553f2a150000000000000000000000000a1c304354647a8c9fb4becfcfbcab9f8d7f6e61584b4639383530252a343738454b57616c7a84877f72604a41301f0f000000000000000000000000091d324556748a9fb4c8b39e88735745321e09000000000000000000000000040a0c0f0f0f0f0f0f0f0f0c0b04000000000000000000000000000000030a0c0e0e0e0e0e0e0e0e0b090200000000000000050b0d0e0e0e0e0e0e0d0b0801000000000000000000000000000000000000000000000001080b0d0e0e0e0e0e0e0d0b050000000000000000071b2d3e4d6278848c8e8f8f8f909aabc2c6b2a0988f8f8f8f8f8f949dafc8c3af9e958f8f8f8f8f8975604b36200b0000000000000000000000011426365a70859aafc5daccb8a78b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac0d5dac9a5907b65504343434343443f4b4f6072859bb0c6dbd8c3ae98836e59432e19000000000e23384e63788dabbccfd8c2ad98836d58505050515254585e66738197a0b2c3d4c7b6a4937e695544311d080000000000000000000000000000152a3f556a7f94aabfd4c2ad97826d58422d18000000000000000000000f243a4f64798fa4c7d7d6c1ac97816c57422c170200000000000000000f253a4f647a8fa4c7d7d7c1ac97826c57422d17000000000000000000000000011426364a5c6a7f94a0b2c1d1c9bcab9f948276696157524d4a43473b474c5156606975818c999c94806b5f4d3d2c1b0b0000000000000000000000021528385d72889db2c7b49f8a76604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102034485a627077797a7a7a7c90a4b5c3ae98837a7a7a7a7a7a7f94aabbbfaa95807a7a7a7a7a7a74604b36210b000000000000000000000000182d42586d8297adc2d7d6c5a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdd2d2bda8937d68585858585858595b5d646e7f95a3b5c9ddd4c4ab96806b56412b16000000000b21364b60768a9fb5cadac5b09a85705b373b3b3b3d3e404c55606d8298a5b7cad3c2b29d8774604b35200b000000000000000000000000000012273d52677c92a7bcd1c5af9a85705a362614010000000000000000000d22374c62778ca9bacdd9c4ae99846f59442f1a0000000000000000000d22374c62778ca9bacdd9c4af9a846f5a3625130000000000000000000000000008182d3e4f616e8298a3b4c0d0c9bcb5a098897f766d676260545d5d5962666c747e88969fabb19e917d675b493928160300000000000000000000001a2f44596f8499aec4bcab8f7a644f3a240f0000000000000000000000000000000002090b0f121416161513100d0b050000000000000000000000000000000000000000000000090f112020202020202020202020202020202020202020202020202020202013110b01000000000000000000000000000000000000000000000000000000000000000005192b3c484d59616464646471869cb1c6b29c87726464646464768b9fb4c2ad98836d6464646464605645321e09000000000000000000000000152b40556a8095aabfd5d0bba6917b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5c9dad5c0aa95806d6d6d6d6d6d6d6e70737a83959dafc1d2dfcbb7a68f7a65503a251000000000091e32455673889db3c8ddc8b29d8873554431262627292f37444b6175879db2c7d7cab7a5907b66513b2611000000000000000000000004090610253a4f657a8fa4c8d8c7b29d87725443301c080000000000000000000b1f34475974899fb4c9dcc6b19c87715c3a2a170400000000000000000b20354a60758a9fb4c9dcc7b29c87725443301c0700000000000000000000000000102032434b6074859aa2b3bfcecfbeb2a79e9489827c787573727374777b8188939ea6b4bcbcb49e8a79635746321e090000000000000000000000152a40556a7f95aac5c9a9947f69543928160300000000000000000000000003090b151d2024272a2b2b2a2926221f180e0c0600000000000000000000000000000000000004121d24273535353535353535353535353535353535353535353535353535353528251e130500000000000000000000000000000000000000000000000000000000000000000d1d2b343a474c4e4f4f556b8095aac3b6a48e79634f4f4f586f849aafc4b39e8975604f4f4f4f4b453828160200000000000000000000000013283d52687d92a7bdd2d3bea8937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788dabbccfdcc7b29c87828383838383838485898f99a1afbccce3d0c0b39d8874604b35200b00000000021628385b70869bb0c5dbcab49f8a75604b36201112141927334657697e93a9bacdd4c3ad97826d583c2b190500000000000000040a0c1a1f1b0f22374d62778caabbcec9b49f8a75604b35200b00000000000000000005182a3b5d72879cb2c7dcc9b49e89745847331f0a0000000000000000071c30435472879cb2c7dcc9b49f8a75604a35200b0000000000000000000000000002151e32455661758499a1b4bbc8cfc5b8b3a89e97918d89888788898c90969da6b3b8c4cfcdb9a89c8676614b36210c00000000000000000000000f253a4f647a8fa7b9c4af9a846f5746321e0900000000000000000000030a161e21273136393d3f4040403e3b37342a23211a0f0700000000000000000000000000000000122230393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3d3a3123130100000000000000000000000000000000000000000000000000000000000000000d19202a3437393a3a4f64798ea5b7c3aa947f6a553b3a53697e93a8c1b9a7907b65503b3a3a3632281a0a0000000000000000000000000010253b50657a90a5c9d9d6c0ab96816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb5cadfcab6a59c98989898989898999a9ea7aeb3bfccd9cfc0b3a2927d685544311d080000000000192e43596e8398aec3d8cfbcab8d78634d38230e0000091729394c61768a9fb4c9ddc8b39d88735a4835200b0000000000000b171f212f34312520354b60758a9fb4c9cebbaa8c77624d37220d000000000000000000001a2f455a6f849aafc4d9cdb9a88c76614c37210c0000000000000000001325365a6f849aafc4d9cdbaa98c77624c37220d0000000000000000000000000000031628384657617483959faab6c3ccccc6b9b4ada7a99f9d9c9d9ea8a6abb3b8c4cbd4cabdb0a19a8575614b36210c00000000000000000000000b20354b6074899eb3c9b49f8a76614b36210c0000000000000000000b171e28323638454b4e525455565553504c473b39362c221b100200000000000000000000000000091d30404c5160606060606060606060606060606060606060606060606060606060524e41311e0b000000000000000000000000000000000000000000000000000000000000000000050c181f222425364a5c72879db2c5b09b86705948384d62788da3b5c5ac96816c573e2d25211e160a00000000000000000000000000000e23384d63788dabbccfd8c3ae98836e59432e1900000000000000000000000000000000000000000000000000000000000000000000000000000000091d32455673889db3c8ddd3c3b6b2adadadadadadadaeb0b3b8c5c7d0cdc9bcb4a29a8472604a372614010000000001162b41566b8096abc0d5d9c9a5907a65503b25100000000b1e33465770859ab0c5dacbb7a68d77624d38220d00000000000b1b2933364449463a3730435472879db2c7d8c8a48f7a654f3a251000000000000000000002182d42576d8297acc2d7d6c6a38e79644e39240f000000000000000000182d42576d8297acc2d7d7c7a48f7a644f3a250f0000000000000000000000000000000a1a293946566073808c9da5b3b8c5cacdc9c2c7bab4b2b2b2b4b9c6c1c8cbd4cbc3b7b29f968375615746321e090000000000000000000000081d3144556e8399aec3baa9907b66513b26110000000000000002121b293338454b5256606467696b6b6a68656259564e493d362d1e160a0000000000000000000000000f24394c5e6675757575757575757575757575757575757575757575757575757575685f4e3a25110000000000000000000000000000000000000000000000000000000000000000000000040a0c0f1b2d3e576c8196acc5b59f8b77624d37485a71869bb0c6b29d88735c4a36220b09020000000000000000000000000000000b20364b60758a9fb4cadbc6b09b86715b39281603000000000000000000000000000000000000000000000000000000000000000000000000000000021528385b70859bb0c5cdcdd3cac7c2c2c2c2c2c2c2c3c5c8cac8c5c7bab4ab9f96847560544330190900000000000014293e53697e93a8bed3d2bda7927d68523d281300000003172939566b8196abc0d6d5c4a5907b66503b2611000000000417293a464c595e5b4f4b3e365a6f859aafc4d1bca7927c67523d271200000000000000000000152a40556a7f95aabfd4d1bba6917c66513c2711000000000000000000152a3f556a7f94aabfd4d1bca7917c67523c2712000000000000000000000000000000000b1b29384555606a7a87949ea7b2b7c3c7cacfcdc9c8c7c8c9cdd6d5cbc8c4b7b2a59d9081736157463928160300000000000000000000000114263753697e93a8c4c7ab96816c563b2b180500000000000a151d3039464c5660676e75797c7f80807f7e7b77726b635b4e4a3e32281a0e000000000000000000000011273c51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a7b9bcab937e68533a3c556a7f94aac3b7a68e79644f39240f0000000000000000000000000000000000091d31455673889db2c8ddc8b39e88735745321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adb8b8b8b8b8b8b8b8b8b8b8b8b8b8b7bcb5b3b0aca99f988c81746057453625130000000000000011263b51667b90a6bbd0d5bfaa95806a55402b1500000000142a3f54697f94a9bed4d2bda8937d68533e281300000000091f334658616f7470645c4d41586d8297adc2d4bfaa947f6a553f2a150000000000000000000013283d52687d92a7bdd2d3bea9937e69543e291400000000000000000012283d52677d92a7bcd2d4bfa9947f6a543f2a1500000000000000000000000000000000000b1a2837444b5c64757f89949da5acb2b5bcc9c0c1c3c3c2c1bfc4b8b3ada69d94877b6c60554639291b0b000000000000000000000000000e23384e63788da6b7c6b19c8771594834200b000000000b1a2731414d57616a757d84898e929495959593908c8780796f645c4b45382b1e0e000000000000000000000f24394e64798e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f95806a55402b150000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075899eb3c9af9a846f5846394e63798ea5b6c4aa95806a553c2c190600000000000000000000000000000000021527385b70859bb0c5dacbb8a68b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a2ab9f9e9a96918a82796c60564539281808000000000000000e24394e63798ea3c5d6d7c2ad97826d58422d180000000013283d53687d92a8bdd2d4bfa9947f6a543f2a1500000009192e3f4c61768389857a675f50556a7f95aabfd4c1ac97826c57422d170200000000000000000010253a50657a8fa5c9d9d6c1ab96816c56412c1701000000000000000010253a50657a8fa5c8d8d6c1ac97816c57422c170200000000000000000000000000000000000a1927313e4b566069767f878f979c9faba9abacadaeadacaaa6a69e9891887e74665e4b4437291b0b00000000000000000000000000000c2135495b73889db2c8b6a48c77624d37220d0000000b1b2838454b5f6776808992999ea8a7a9aaabaaa8a5a49c968e847a6c6056483c2c1f0e0000000000000000000c21374c61768ca8b9b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ad97826d58422d18000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556d8398adc7b49f8a76614c364a5b72879cb2c6b19c86715a4935200c0000000000000000000000000000000000182e43586d8398adc2d8d5c5a38e78634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c8a8885817c766d635b4b4538281b0a00000000000000000c21364c61768ba7b9ccdac5af9a85705a3726140100000013293e53687e93a8bdd3d5bfaa95806a55402b150000011426374b5d6d82979e9b8b7d6a6152687d92a7bdd2c4af9a846f5a452f1a000000000000000000000d23384d62788dabbccfd8c3ae99836e59442e190000000000000000000d22384d62778daabbced9c4af99846f5a442f1a0000000000000000000000000000000000000009151d2e38454b57616a737a81878b909495979899989795918e88837b746960564c403127190b000000000000000000000000000000061a2c3d586d8298adc2c2a7927d67523d28120000091928394656606d7d88959ea7aeb4b9c6bec0c0bfbdc2b6b1aba1998c8174625a493d2c1d0c00000000000000000a1f33475874899eb4c9cacacacacacacacacacacacacacacacacacacacacac5af9a85705a3727150200000000000000000000000000000000000000000000000000000000000000000000000000000215273752677c91a9babbaa927c6752383d566b8196abc4b5a48d78624d38230d0000000000000000000000000000000001162b40566b8095abc0d5d0bba5907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61757878787878787878787878787878787878777573706c6761574e4a3d32281a0a0000000000000000000a1e33465774899eb3c9dcc7b29d87725544311d08000209192b3c556a8095aabfd5d3bea9947e69543f29140000081d314455657a8d9fb3a99f92806d60657a8fa5c7d8c7b19c87725c3b2a18040000000000000000000b20364b60758a9fb4cadbc6b09b86715b3929160300000000000000000b20354b60758a9fb4cadcc6b19c87715c3a2a18040000000000000000000000000000000000000001101a283239464b5460656c72767b7e8082838382817f7c78746d6660554b45382f1d1509000000000000000000000000000000000014293f54697e94a9bec1ab96816c56412c1700011426374657617482919ea6b3b9c5c9cdcfcac7c4c4c5c8cac7bfb3ab9f968678635b493b2a18080000000000000004172a3a5c71869cb1c6dbdfd8cbc1beb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b29d88725544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4c6ae98836e56453a4f657a8fa6b8c2a9947e69543f2914000000000000000000000000000000000013293e53687e93a8bdd3d3bda8937e68533e2913000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576163636363636363636363636363636363626260555b57514b4639362d1e160a00000000000000000000031729395c71869bb1c6dbcab49f8a75604b35201818161e2735485a6f849aafc4dad7c7a7927d67523d281200000b20354b6073869babbcbab49e95827462778da9bacec9b49f89745947341f0b000000000000000000081d31445573889db2c8ddc8b39e89735746321e0a0000000000000000081d31445572889db2c7ddc9b49f89745947341f0a0000000000000000000000000000000000000000000a161e293336434a4f57586165696b6c6e6e6d6c6a67636054514b443732281a110100000000000000000000000000000000000011263b50667b90a5bbc4af9a846f5a452f1a00081d31445561758497a0b3b8c5ccd2c9c9bcb4b1afafb0b3b8c5cac9bcb4a49c877963594736251300000000000000001a2f44596f8499aec4d9ddcbbaada8a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576e8398a8b4b49e8975604b364b6074889db3c4af9a846f5a452f1a050000000000000000000000000000000011263b50667b90a5bbd0d5c0ab95806b56402b160100000000000000000000000000000000000000000000000000000000000000000000000000000003172939464b4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d4c4b4437413c363329211a0f02000000000000000000000000192f44596e8499aec3d9cebbaa8d77624d382e2e2e283237444d62788b9fb4cadfcdbaa9907a65503b251000000f243a4f64798b9ea7b6c2bcafa0988476748a9fb4c9cdbaa98c77614c37220c000000000000000000021527375b70859bb0c5daccb8a78b76614b36210c0000000000000000011426375a70859aafc5dacdbaa88c77614c37220c00000000000000000000000000000000000000000000030b171e2530353a3a464c505456575859585755514e4a43363531261d150a00000000000000000000000000000000000000000f24394f64798ea4b9c6b19b86715c46311c000b20354b60748499a2b1becbd5cdc2b5b1ab9f9c9a9a9b9ea7adb4bbc8c2b5a69d8777615443301c0b00000000000002172c41576c8196acc1d6d5c1ad9c938b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b78624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000031729394e63798a9ba2a2a8907b66513b43546d8297a2a2a69b85705b46301b06000000000000000000000000000000000e23394e63788ea3c5d5d8c3ad98836e58432e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2933363838383838383838383838383838383838373531272c27211e170b070000000000000000000000000001172c41566c8196abc1d6d8c8a48f7a654f4343434338454b55606e8298aabbcedfc9b49f8a75604b36210b00000d22364a5c657b899ca4b3bfbeb2a29a8778869cb1c6d7c7a48f79644f3a240f00000000000000000000182e43586d8398adc2d8d5c5a38e78634e39230e000000000000000000182d43586d8298adc2d7d7c6a48f79644f3a240f0000000000000000000000000000000000000000000000000308131c20252933363b3f404243444342403c39353025201d14090200000000000000000000000000000000000000050b0e23384d63788da2b8c7b29d87725d48321d00081d3144556e8398a5b6c7d3c6bab4a39b928b87858486898e979faab8c5c4b6a59a8472604a39291703000000000000142a3f54697f94a9bed4d3bea8937e7576767676767676767676767676767676767572604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364a5b647a858b8d8d8d816c57423651667c8d8d8d8c887b644f3a250f00000000000000000000000000000000000b21364b60768ba7b8ccdac5b09b85705b3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e21232323232323232323232323232323232322201d1517120c0a030000000000000000000000000000000014293f54697e94a9bed3d2bca7927d67585858585859566067738196a0b2c8d8d3c2af9a846f5645321e090000071b2d3e4b5d65788699a1b0bcc0b4a59c89879cb2c7d1bca6917c67513c271200000000000000000001162b40566b8095abc0d5d0bba6907b66513b2611000000000000000000152b40556a8095aabfd5d1bca6917c67513c2712000000000000000000000000000000000000000000000000000000070b10171f2126292b2d2e2e2d2c2a2723201c130b080100000000000000000000000000000000000000000d182022273a4f647a8fa4b9c6b19c87715c47321c00011426374c6176879da9bac3b6a89f93867d76726f6f707479828c9ea6b8c7c3b3a2937e685746331e0a00000000000012273c51677c91a6bcd1d5c0aa95806b606060606060606060606060606060606060605443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a5c64707677787877624c37354b60737878787773645d4b37220d0000000000000000000000000000000000091e32455773889eb3c8ddc8b39d88735645321d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0d0b080100000000000000000000000000000000000000000012273c51677c91a6bcd1d4bfaa947f6d6d6d6d6d6d6f70757c85969fb0becfd9c8b6a4927d67523828160300000010202f3f4b5a637583969eb4bac3b6a79e9ca5b6cad4bea9947f69543f2a140000000000000000000013293e53687e93a8bdcdcdbda8937e68533e291300000000000000000013283d53687d92a8bdcdcdbea9947f69543f2a14000000000000000000000000000000000000000000000000000000000000040a0c101416171919181715120e0b0700000000000000000000000000000000000000000000000d1d2b3437374452687d92a7bdc5af9a85705a45301b0000091f334658647a8b9fb4b2a59c8a7e736861585a5a5460646d7b889ea9bacdc0b39e8876614c3621100000000000000f243a4f64798fa4c6d7d8c2ad98836d584b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a433625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3e4a4f576162626262594834314455606262626260544b3f2e1b080000000000000000000000000000000000031628395b71869bb0c6dbcab59f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6d7dcc7b19c8682838383838384858a919ba3b0bdcddfcebbaa9c8673604b35200b000000000211212f3c4957617280929fa9b8c4b8b3b2b6c3d3d6c1ac96816c57412c170200000000000000000011263b51667b90a6b8b8b8b8ab95806b56402b1601000000000000000010253b50657a90a5c9b8b8b8ac96816c57412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b484c57556071859bb0c6c3ab96816c56412c1700000417293a4a5c697e939fa09887796960544c463a36434b4f5d657a8b9fb4c8ccb8a7947f69543e2e1b0700000000000c22374c61778ca8bacddac5b09a85705b383636363636363636363636363636363635302518080000000000000000000000000000000000000000000000000000000000000000000000000000000000000110202d3639464b4d4d4d4c483b2a2637444b4d4d4d4d4a43362e201000000000000000000000000000000000000000192e43596e8398aec3d8cfbcab8d78634d38230e00000000000000000000000000000000000000000000000000000000000001080b0c0d0f0e0e0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8b9cddecab6a49c989898989898999b9fa9b0b5c1cdd4cbbcb49f8c7b655443301c08000000000003111e2c394654606b7d8b9da6b5c1c8c7cad3e1d9c3ae99846e59442f19000000000000000000000e23394e63788ea3a3a3a3a3a398836e58432e190300000000000000000e23384d63788daba3a3a3a3a399846f59442f1a0000000000000000000000000000080e10202020202020202016140e040000000000000000000000000000000000000000000000000000000000000000000000000000000b20344859626d6f748096a3b5c9b7a5917c66513c26110000000b1b2d3e4f616a808b8d8276635b4b433633292630353f4b5c6b8095aabbcec5b29d87725c4a36220d00000000000b1f34475974899fb4c9ddc8b29d8873564531212121212121212121212121212121201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b2228323638383837342a1d192631353838383735302518100200000000000000000002090b0c0c0c0c0c0c0c162c41566b8196abc0d6dac9a5907b65503b26100c0c0c0c0c0c0c0c0b0902000000000000000000000000000000040a0c13151d202223242423211f1717110b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb4c9ded3c2b6b1adadadadadadaeb0b4bac7c9d2cac4b7b29d937e695e4c36261401000000000000000e1b2936434b5f687a889ba3b2becfdae7f1dbc6b19c86715c3a2917040000000000000000000c21364b61758b8d8d8d8d8d8d8d85705b46301b0600000000000000000b20364b60748d8d8d8d8d8d8d8d86715c47311c00000000000000000000000003111c232635353535353535352b2821160800000000000000000000000000000000000000000000000000000000000000000000000000000d22374c6277828588969eb0c1bdb29d8774604b35200b000000001020324250626a77786e61584a3d30261f17141c202e3e4c61778b9fb4cacab6a58f7a644f3a240f000000000004182a3b5c72879cb1c7dccab49f8a75604b36200b0b0b0b0b0b0b0b0b0b0b0b0b0b0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b161e21222323221f180d09141d2023232322201c1308000000000000000000000a151d202222222222222222293e54697e93a9bed3d2bda8927d68533d28222222222222222222201d150a000000000000000000000000060c171f212827313537383939383633292c26201d15090500000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c71879cb1c6cdcdd3cac7c2c2c2c2c2c2c4c5c9cac8c4c3b6b2a69d907f6a604f402f18080000000000000000000b182630414e5c64788598a0b5bcc9d7e4dec9b39e89745846331f0a0000000000000000000a1e32465770797878787878787878624d38230d000000000000000000091d31455663787878787878787878634d38230e00000000000000000000000011212f383b4a4a4a4a4a4a4a4a403d3326160400000000000000000000000000000000000000000000000000000000000000000000000001162c41566b80969a9ea7b0bcbcb49f927d675544311d08000000000214243344505962635a4c463a2d1c1408040108111f33475870869bb0c5d4c3aa957f6a55402a150000000000001a2f445a6f8499afc4d9cfbcab8d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c0d0d0d0d0b05000001080b0d0d0d0d0b0700000000000000000000000a1a2832363737373737373737373c51667b91a6bbd0d5c0aa95806b5540373737373737373737373632281a0a000000000000000000020f1a212933363d37444b4c4d4e4e4d4c463a413b36312720180d0200000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afb8b8b8b8b8b8b8b8b8b8b8b8b8c8bbb4b2afaaa59c94887c6a615042322111000000000000000000000008141c313e4b5a627582959fabbac6d4e1ccb9a88b76614c36210c00000000000000000003162939495b6363636363636363625a4935200b00000000000000000002152738495b6363636363636363635a4935200c0000000000000000000000081c2f3f4c50606060606060606056514433210e00000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abb3b8b9b4ab9f95816c5f4d372715010000000000061525333b484c4d493c33291c0f010000000004182a3a576d8297acc2d7c4af99846f5a442f1a000000000002172d42576c8297acc1d7d9c9a5907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152838454b4c4c4c4c4c4c4c4c4c4c4e64798ea3c6d6d7c2ad98826d584c4c4c4c4c4c4c4c4c4c4c4b45382815020000000000000009151d2c353a464c52585560616264636361585b56504b4437342b1d150a00000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297a3a3a3a3a3a3a3a3a3a3a3a3a3a3a2aa9f9d99958f877e75665e5043332414030000000000000000000000000113202e3c485760727f8d9fa8b7c3d1d6c6a38e79644e39240f000000000000000000000b1b2c3d494e4e4e4e4e4e4e4e4d493c2b1906000000000000000000000a1a2c3c494d4e4e4e4e4e4e4e4d493c2c190600000000000000000000000e23384c5d6575757575757575756b62513d28140000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8a9a8a89e988c7f72604a413019090000000000000007151d2b343738352c1f170c00000000000002162b40566b8095abc0d5c7b29d87725d382816030000000000152a3f546a7f94a9bfd4d2bda8927d68533d281302020202020202020202000000000000000000000000000000000000090f11202020202020202016140e040000000000000000000000000000000000000000000000000000000000000000000000060c0e1314110b09020000000000000000091d32455660616161616161616161616161768ca8b9cddac5b09a8570616161616161616161616161605645321d090000000000000b1927313d494e5861686d717577787979787674706c6660554d483b31271a0f010000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c8a8884807a736960574c4033251506000000000000000000000000000002101d2b394554606a7d8a9da5b4c1b9b9a6917b66513c261100000000000000000000000f1f2c35383838383838383838352b1e0e0000000000000000000000000e1e2c35383838383838383838352c1e0e00000000000000000000000010263b50657b8a8a8a8a8a8a8a8a806b56402b160100000000000000000000000000000000000000000000000000000000000000000000000011263c51667c919594928f8982796a605443302313000000000000000000000d1820222320190e040000000000050a151d2e3e576c8196acc1d6cab49f8a755645321e09000000000012273d52677c92a7bcd1d5bfaa95806a55402b181818181818181818181813110b0200000000000000000000000004121d242735353535353535352b292116080000000000000000000000000000000000000000000000000000000000000000050f1a2123282926211e160a000000000000000b20364b6074777777777777777777777777768a9eb4c9ddc8b29d877677777777777777777777777774604b36200b00000000000b1b2937444b5b636e767d82868a8c8d8e8e8d8b8985817b746a62594b45382c1f0f01000000000000000000000000000000000000000000000000000000000000000000000c21364c6176787878787878787878787878787878787775736f6a6460544b45392f22150700000000000000000000000000000000000d1b2836434a5f677a879ba3a4a4a4a4937e69543e29140000000000000000000000010f1a2123232323232323232320190e00000000000000000000000000000e192123232323232323232320190e000000000000000000000000000e23384d63788dab9f9f9f9f9f98836e58432e19000000000000000000000000000000000000000000000000000000000000000000000000000d22384d627880807f7d7a756d635b4a43362513050000000000000000000000050b0d0e0c0600000000040a0d192027313d4b5c70859ab0c5dacebbaa8b76604b36210b00000000000f253a4f647a8fa4c7d7d7c2ad98826d58432d2d2d2d2d2d2d2d2d2d2d2d29261f14060000000000000000000000122230393c4a4a4a4a4a4a4a4a413d342616040000000000000000000000000000000000000000000000000000000000000d181f2c36393e3e3b3632281a1204000000000011273c51667c8c8c8c8c8c8c8c8c8c8c8c8c8c9ea8b9cddfcbb7a69d8c8c8c8c8c8c8c8c8c8c8c8c8c7f69543f291400000000031629394655606c79838a92989c9fa9a2a3a3a2a89e9b96908880776a6056493d2c1f0f000000000000000000000000000000000000000000000000000000000000000000000a1f33465861636363636363636363636363636363626160555a554f4a433632281b1204000000000000000000000000000000000000000a182530414d5c6477858e8e8e8e8e8e816b56412c1601000000000000000000000000060c0e0e0e0e0e0e0e0e0d0b0600000000000000000000000000000000060c0e0e0e0e0e0e0e0e0e0c0600000000000000000000000000000b20364b60758a9fb5b5b5b5b09b85705b382816020000000000000000000000000000000000000000000000000000000000000000000000000b2034485a626b6b69686460554e493d302518080000000000000000000000000000000000000000070c171f212b3438454b5b647a8fa2b4c8dcccb9a88b75604b36200b00000000000d22374d62778ca9bacddac5af9a85705a374242424242424242424242423e3b31241402000000000000000000091d30404c51606060606060606056514434210e00000000000000000000000000000000000000000000000000000000000d1d2a343d494e5354514b453830221204000000000f24394f64798ea1a1a1a1a1a1a1a1a1a1a1a1b4b9c6d6e6d4c4b7b2a1a1a1a1a1a1a1a1a1a1a1a196816c57412c17020000000a1e3246576173818c989fa9adb1b4bac7b9b8c6b9b3b0aba69d958b8074635b493d2c1e0e0000000000000000000000000000000000000000000000000000000000000000000417293a464c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d4c4b4437403a3530251e160a0000000000000000000000000000000000000000000008131c303e4a59627479797979797978624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d31455673889db2c8cac8b39d88735645321e0900000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d565554534f4b4437362c1c130800000000000000000000000000000000000000080f1a212933373c484d56606979889db3c0d1dec9b39e89745645311d0900000000000b20354a60758a9fb4c9ddc7b29d88725557575757575757575757575757534e42311f0b0000000000000000000f24394c5e6675757575757575756b62513d2914000000000000000000000000000000000000000000000000000000000b1b2a3b484c5b6368696660564d40302212000000000c22374c61778ca8b9b6b6b6b6b6b6b6b6b6b6c9cdd6e4e2e2d4cbc8b6b6b6b6b6b6b6b6b6b6b6ae99846f59442f1a0000000a1d30404b617584969faab4bac7c3b6b2aeadacadafb3b9c4b7b3aa9f958679635b493c2b19050000000000000000000000000000000000000000000000000000000000000000000c1c29333638383838383838383838383838383838373531262b25201c1308030000000000000000000000000000000000000000000000000012202d3b475660646464646464625a4835200b000000000000000000000000000000000002090b10131416161513100c0a03000000000000000000000003090a0b0b0b0b0b0b020000000000000000000000000000000000021527385b70859bb0c5dacab59f8a76604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b343840403f3d3a353127211a0f0000000000000000000000000000000000000002101b222d363a474c535a626a747e8a9da6b7cbdedbc6b19c86715c382715020000000000071c30435472879cb2c7dccab49f8b736d6d6d6d6d6d6d6d6d6d6d6d6d6d68604e3b261100000000000000000011273c51667c8a8a8a8a8a8a8a8a806b56412b16010000000000000000000000000000000000000000000000000000031629394859626f797d7e7b75665e4d402f19090000000a1f33475874899eb4c9cccccccccccccccccccdcdcdcdcdcdcdcdcdccccccccccccccccccccc6b19c87715c3a2a180400000f24394d5e6e8398a2b4bbc8beb2ada59d999797989a9ea7aeb2bfbbb4a49c8879635a48352013010000000000000000000000000000000000000000000000000000000000000000000c171f212323232323232323232323232323232322201d14150f0b070000000000000000000000000000000000000000000000000000000002101d2a38454b4f4f4f4f4f4f4d483c2b1906000000000000000000000000000001080b161e2125282a2b2b2a2825211e160e0c060000000000060c0e181e2020202020202017150f05000000000000000000000000000000182e43586d8398adc2d8cfbcab8d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000d1920222b2b2a2825201d150906000000000000000000000000000000000000000a151d2e373e4a4e58616870787f87939ea8b7c4d4e3d0bfab96816b56412c16000000000000001325365a6f849aafc4d9cebbaa988282828282828282828282828282827e68533e29130000000000000000000f24394e64798e9f9f9f9f9f9f98836e59432e190000000000000000000000000000000000000000000000000000000a1e3246576277848e939390887c665e4c37271502000004182a3a5c71879cb1b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b49e89745947341f0a000114263651667c91a0b2c0cebcb0a0988d878482818285898f99a1b4b9c2b5a69e8878624d41301e0a00000000000000000000000000000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0c0b0801000000000000000000000000000000000000000000000000000000000000000000000d1a28323639393939393938352b1e0e000000000000000000000000000009151d202832363a3d3f40403f3d3a36322923211a0e0900010f1a21232e33353535353535352c2a2217090000000000000000000000000001162b40566b8095abc0d5dac9a5907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d161614130f0b080100000000000000000000000000000000000000000b1a27313f4b4f5c646d767d858c959da5b4b9c6d4e2d5c5b3a18f7a644f3a250f00000000000000182d42576d8297acc2d7d9c8b2a098979797979797979797979797979785705b3828160300000000000000000c21374c61768ca8b9b5b5b5b09b86705b3928160300000000000000000000000000000000000000000000000000000c21364b61758699a1a8a9a69d8d7c665544311d080000001a2f445a6f8499a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a88c77614c37220c00081c30435470859aafbfcfc7b09e968278726f6d6c6d6f747a83909ea8b9c4b8a699836f5f4d39250f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d202424242424242320190e0000000000000000000000000001121927313538454b505254555554524f4b463938352c241c12111f2c353843484a4a4a4a4a4a4a423e342717050000000000000000000000000013283e53687d93a8bdd2d2bda8937d68533e28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2838454b5d657079828a939a9fabb2b7c3cdd7e2d4c6b8a799836f5c4b37220d00000000000000152a3f556a7f94aabfd4e6cfbeb2adacacacacacacacacacacacacac9d88735645321e0900000000000000000a1f33475874899eb4c9cac8b39e88735745321e090000000000000000000000000000000000000000000000000000152a40556a7f95a4b3bfc4b7ab9d8874604b36200b000002172d42576c818d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7a644f3a240f000b20354b60758a9fb4c9cdbaa996806d635b595857585460656e7c8a9eaabbc4b3a1917d67523d2d1a0700000000000000000000090f11202020202020202014120c030000000000000000000002090b171e202020202020201e0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f0f0f0f0f0f0d0b060000000000000000000000000009151d3037444b5256606568696b6b6a68656157554e493d382f22212e3d494e585e5f60606060606057524534220f0000000000000000000000000010263b50657b90a5c9dad5c0ab95806b56402b16010000000000000000000000000000000000000000000000000b141b1d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1a181208000000000000000000000000031628394656606c7a858e979fa9afb5bcc9cbd4e1d8cec3b7a89e8978624d3e2e1b080000000000000012283d52677d92a7bcd2e7dccfc6c2c2c2c2c2c2c2c2c2c2c2c2c2b8a68b76604b36210b000000000000000004172a3a5c71869cb1c6dbcbb8a68b76604b36210b00000000000000000000000000000000000000000000000000001c31475c71869cb1c2d0d5c9b7a68f7b65503a25100000000c22374c6177787878787878787878787878787878787878787878787878787878787878787878787975614b36210c000d22374d62778ca9bacec9b49f8a76614e493d424236434a505e667b8c9fb4cabfb19c86715b4a36210c000000000000000004121d24273535353535353535292720140700000000000000000a161e212c333535353535353534211e160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192731404d55606770757a7d7f80807f7d7a76716a635b514c40362e3f4b5b636d73757575757575756c63523e2a15000000000000000000000000000e23384e63788dabbccfd8c3ad98836e58432e190000000000000000000000000000000000000000000000000f1d282f323535353535353535353535353535353535353535353535302d251a0c0000000000000000000000081e3246576174818d9aa2adb4bac7cacfdaded6ccc7bab4a59d8a7b655a49352010000000000000000010253a4f657a8fa4c8d8eae7d9cfcab8b8b8b8b8b8b8b8b8b8b8b8c4a38e78634e39230e0000000000000000001a2f44596f8499aec4d9d5c5a38e78634e39230e00000000000000000000000000000000000000000000000000001e34495e73899eb3c8dee7d4c4a7927d67523d28120000000a1f344759616363636363636363636363636363636363636363636363636363636363636363636363615746321e09000d22374c62778ca8b9cdc7b19c87725746352c2d2c253035404c5d6c8197acc1c9b5a48e79634e39240e0000000000000000122230393c4a4a4a4a4a4a4a4a3f3b322514030000000000000a1a28323641484a4a4a4a4a4a4a493632291b0b00000000010a1012202020202020201b0d0b06000000000000000000010a10121e2020202020202012100a0100000000000000000000000000000000000001152737444b5e66747d858a8f9294959594928f8a867f786f665e4f4a3e4b5d657982888a8a8a8a8a8a8a816c57422c17000000000000000000000000000b20364b60758a9fb5cadac5b09b85705b38281502000000000000000000000000000000000000000000000b1d2d3a44484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4541372a1a08000000000000000000081830414b617584979fabb4c0c9cdd7dfded2c9c6b9b3a99f96877a655d4b3c2c190200000000000000000d22384d62778daabbcee2d9c9bcb4a3a3a3a3a3a3a3a3a3a3a3a3a3a3907b66503b2611000000000000000002172c41576c8196acc1d6d0bba5907b66503b261100000000000000000000000000000000000000000000000000001d32475d72879cb2c5d5dacdb9a8907c66513b261100000004182a3a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b4639281603000b20354a6074899eb4c9c9b49e8974604b433635302630302f3f4e64798ea3b9d2c2a8937e69533e291400000000000000091d30404c516060606060606060544f4332200c000000000002162838454b565e606060606060605e4b4639291603000005131e252735353535353535312320190e0000000000000005131d2527333535353535353527251e130500000000000000000000000000000000000c1d314455606c7c87929a9fa9a7a9aaaaa9a7aa9f9b958d847b70645c4b5a657b8a989d9faa9f9fa79b8574604b36200b00000000000000000000000000091d32455673889db3c8ddc8b39d88735645321d090000000000000000000000000000000000000000000014283a4b575d5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a55483725120000000000000000001325364d5f6e8298a2b5bcc9d1dfe0d6ccc9c2b5b1a89e968b8175645c4b3f2e1e0e0000000000000000000b20354b60758a9fb4cadfcfbcab9f8e8d8d8d8d8d8d8d8d8d8d8d8d8d8d7e68533e2913000000000000000000142a3f54697f94a9bed4d3bda8937e68533e29130000000000000000000000000000000000000000000000000000172c42576c8197a7b8c4c9bcb49e8a76614b36210c000000000c1c2a343738383838383838383838383838383838383838383838383838383838383838383838383632281b0b0000071c3043546e8399aebecdb9a8937e6960544e4b4336454637444b60768ba0b5cbc1ac96816c57412c17020000000000000f24394c5e66757575757575757569614f3b27120000000000091e324556606c737575757575757573615746321e0a0001132330393d4a4a4a4a4a4a4a4638352b1e0e000000000000132330393c494a4a4a4a4a4a4a3d39302313010000000000000000000000000000000c1c32424b607381919da5afb4bac7bec0c0bfc8bbb4b0aaa29a90857a6c606278899ea8b3b4bbbcab9e8978625645311d0900000000000000000000000000021528385b70859bb0c5dacab59f8a75604b36200b000000000000000000000000000000000000000000001b2f4457697274747474747474747474747474747474747474747474746f6655412d0a0000000000000000071c304354677c91a0b2c0cfdae3d5ccc6b9b4aca49c938980776c61574a3e2e211100000000000000000000081d31445572879db2c7dccab49f8c79787878787878787878787878787876614c37210c00000000000000000012273c51677c91a6bcd1d5c0ab95806b56402b1601000000000000000000000000000000000000000000000000000d22384d6278899da6aeafab9f947f6a5746321e0a00000000000c181f222323232323232323232323232323232323232323232323232323232323232323232323211e160b0000000013253650657b90a0b1c1c6b49f8c7e73696360545b5b5b5c556062758ba0b5cac2ad98826d58432d180300000000000011273c51667c8a8a8a8a8a8a8a8a7f69543f29140000000005182a3b4b607481888a8a8a8a8a8a8a8975614b36210c000a1e30414d526060606060605f5b4d483c2b1c0c000000000e1e30414d525e60606060606060524d41301e0a000000000000000000000000000004172a3a4f606c81969fb2b7c3c9cbc8c9bcb4b3b5bcc9c3c0b4afa29b8c817574859ba7b8c6cabfb49f8d7c665a48382715020000000000000000000000000000192e43586e8398adc3d8cfbcab8d78634e38230e000000000000000000000000000000000000000000001d32485d72878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a846f5a38271502000000000000000b20354a6073869cb1becfe3ddd0c5b8b3a89e978e867e766b62594b46392d20110300000000000000000000011426375a70859aafc5dacfbcab8d776363636363636363636363636363615847331f0a0000000000000000000f243a4f64798fa4c6d7d8c3ad98836e58432e1900000000000000000000000000000000000000000000000000000b2035485a657b8893999a968c8072604a39291603000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c090300000000000823384c5d6d8297a3b2bfbbaa9f93867e787572717070717375787d92a7bcd1c1ac96816c57412c17020000000000000f24394e64798e9f9f9f9f9f9f96816c57412c17020000000b1f3448596c81969d9fab9f9f9fa8957f6a5746321e0a001025394d5f677575757575757570625a483a291704000005192b3c4d5f677375757575757575675f4d39251000000000000000000000000000000a1f334758697e939fb0bdcad1c5b8b3aaab9f9e9faba7adb4b9c0b4ab9f97868398a3b5c5d4c3b3a195806a5e4c3c2b1a0a000000000000000000000000000001162b40566b8095abc0d5dac9a5907b65503b2610000000000000000000000000000000000000000000001b30465b70859b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d88735645311d09000000000000000f24394f64798ea4b6cadcddd0bfb3a79e94898179716961574c483b33291b1002000000000000000000000000182d42586d8297adc2d7d9c9a58f7a65504e4e4e4e4e4e4e4e4e4e4e4e4c473a2a17040000000000000000000c22374c61778ca8bacddac5b09b85705b382815020000000000000000000000000000000000000000000000000005192b3c4b5d65767e8484817a6b605443301b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f3f4b61758598a0b2b7bbb4a49c938e8a8786858586888a8d929bacc0d0c0a9947e69543f2914000000000000000c21374c61768ca8b9b5b5b5ae99846e59442f19000000031628394c62778a9fb3b5bcb5b5b49e8976614c392916030012273d52677c8a8a8a8a8a8a8a8578625846331f1300000b2035485a677d888a8a8a8a8a8a8a7d67523d271200000000000000000000000000000c21374c6176899eb3bdcdd1c1b5a69e948e8a898a8d91989ea8b4babcb4a49c98a0b2c1d2c8b7a59a8472604b402f1e0e0000000000000000000000000000000013283e53687d93a8bdd2d2bda8937d68533e281300000000000000000000000000000000000000000000192e43586e8398adb4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b49f8a75604b36200b00000000000000152a3f546a7f94a9c2d3e4d0bfb3a199897f766c645c544c4639342b1e170b0000000000000000000000000000152b40556a8095aabfd5d2bca7927d67523d383838383838383838383837332a1c0c000000000000000000000b1f34475974899fb4c9ddc8b39d88735645321d0900000000000000000000000000000000000000000000000000000e1e2e3f4b5761696e6f6c645c4a4336251300000000000000000000000000000000040a0c111314161615120f0b080100000000000000000000000000000000000000000000000000111e324657617483919da5aeb4b6b1a8a99f9d9b9a9b9c9d9faaa7acb9cac7b4a28d78634e38230e000000000000000a1f33475874899eb4c9cac6b19c86715c3a2917040000091e3245576b8095a9bacacfcdbaa996806b5847331b0b00001025394d5f6d8297a49f9fab9f9b8676614c41311e0e031629394d62788a9ea69f9f9f9f9d8774604b35200b00000000000000000000000000061a2c3d566b8095a7b9ccd5c4b5a39b887f79757475777c838a969fa9b5c2b6b1adb2becfcebbaa9d8776615443302211000000000000000000000000000000000011263b50667b90a5c9dad5c0ab95806b56402b1600000000000000000000000000000000000000000000162b40566b8095a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6ab8d78634d38230e00000000000003182e43586d8398adc2d8d7c6b3a19983776961574f4a3e36332920180d0300000000000000000000000000000013283d52687d92a7bdd2d4bfaa957f6a55402a23232323232323232323211f170c000000000000000000000004182a3b5c72879cb1c7dccab59f8a75604b36200b00000000000000000000000000000000000000000000000000000010212e39464c54595a574f4a3e3025180800000000000000000000000000030a0c171f2126282a2b2b2a2724201d150b090300000000000000000000000000000000000000000000031628394656606e7c8791999ea8a9acafb1b2b0b0b0b1b0adb3b7c4cad1c0af9a846f5b4935210c0000000000000004172a3a5c71879cb1c6dcc9b39e89745846331f0a00011426364b6075899eb3c7d7d8c8b49f8a77624c3a29170000000a1e30414b6075869ca9babcb4a498826e5f4e3c2c19091e3246576b8196a8b8c5b5b7a6937e685544311d08000000000000000000000000000c2136495b72879db2c5d6cbb8a69b85776a6360556062676e77818b9ca4b4c0c6c3c6cfcfbeb49f8b7a6458473626140400000000000000000000000000000000000e23384e63788dabbccfd8c2ad98836d583c2b180800000000000000000000000000000000000000000013293e53687e9191919191919191919191919191919191919191919191907c65503b2610000000000000051a2f445a6f8499afc4d9cdb9a899837361594b4639362d211e170b05000000000000000000000000000000000010253b50657a90a5c9d9d7c2ac97826d57422d180e0e0e0e0e0e0e0e0e0c0a04000000000000000000000000001a2f445a6f8499afc4d9cfbcab8d78634e38230e00000000000000000000000000000000000000000000000000000002101b2933363e44454139362d1c1308000000000000000000000000000b161e212933363b3d3f40403f3d39353127211e160a030000000000000000000000000000000000000000000b1b2838454b5e66737c83898f94979a9c9e9e9f9e9d9b989da6b7cbc8b4a2907b65503d2c1a0600000000000000001a2f44596f8499aec4d9ccb9a78b76614c36210c00081c304354697e93a7b8cce2cebbaa97816c5948341c0c00000001131e32455763798b9fb4bfc3b2a0927d685a4937271526364b6176899eb3c6d5c5b39d8875604b37261401000000000000000000000000000e23394e63798ea5b7caddc8b39e887762594e4b444b4d5259616c79869ba2b4c8d8dad8c8b2a0937e695c4b3a2a18080000000000000000000000000000000000000b21364b60768a9fb5cadac5b09b85705a483625130000000000000000000000000000000000000000000d22374d62777c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c77624d37220d000000000000061b31465b70869bb0c5dbc9b49e8a776155473b3329221b100a03000000090800000000000000000000000000000d23384d62788dabbccfdac4af9a856f5a36261401000000000000000000000000000000000000000000000002172d42576c8297acc1d7dac9a5907b65503b261008080808080808080808080200000000000000000000000000000000000b171e21292f2f2c24221b100000000000000000000000000003141b2932363a464c505354565554524e4b44373632281e170b0000000000000000000000000000000000000000000b1a2832404d5560666e757a7e82858789898989878683889db3c8c0b09a85705d4b371f0f000000000000000002172c42576c8197acc1d6d6c5a38e79644e39240f000b20354b6073879cb2c5d5d9c9b49f8b78624d3b2a180000000000031628394a5b687e93a1b2c3beb49e8a78635544311d304354697e93a7b9ccccb8a7947f695645321909000000000000000000000000000013283d52687d92a7c3d4d5c4a9947f6959473b353136383a474c5b6375859bb0c5dae2cebbaa98826e604f3e2e1c0c000000000000000000000000000000000000031628394d62788b9fb5cadec9b49f8a78625443301c0e00000000000000000000000000000000000000000b203448596266666666666666666666666666666666666666666666666662594834200b000000000000051b30455a70859aafc5d9c4af99846f5947372a1e170b07000000070b141e1e110f0900000000000000000000000b20364b60758a9fb4cadcc7b29d87725443301c08000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4d2bda8937d68533e281d1d1d1d1d1d1d1d1d1d1d1d17150e05000000000000000000000000000000030a0c14191a170f0d07000000000000000000000000000a161e3139464b5458616668696b6b6a67646055524b453933291b120100000000000000000000000000000000000000000a161e3037444b51556065696d707273747473727073889eb3c8b4a28f7b65503f2e1c01000000000000000000142a3f54697f94a9bed4d0bba6917b66513c2611081b2e3f51677c91a5b6cae3cfbcab97826d5a48351d0d0000000000000a1b2d3d4e606e8399a5b7c8b9a89b8574604b3f2e354b6073879cb2c5d6c6b39e8976614b382815000000000000000000000000000000152a3f546a7f94a9bfd4cbb8a68d77624d3b2a201d20222a344658647a8b9fb4c9dfdfcab49f8a77614c4232201000000000000000000000000000000000000000091e3245576b8096abbccfe1cdbaa89a8472604a3c2c18080000000000000000000000000000000000000005182b3b484d5151515151515151515151515151515151515151515151514d483b2b190500000000000004192e43596e8398aec3d7c2ad97826d583b2a190c0300000008131c2029333326231c1204000000000000000000081d31445573889db2c8ddc9b49f8a75604b35200b08080808080808080808080808080000000000000000000012273d52677c92a7bcd1d5c0aa95806b5540333333333333333333333333332c292216080000000000000000000000000000000000000000000000000000000000000000000000000a1b2832424e57616971767b7d7f80807f7c79756f6860574c4639301c1408000000000000000000000000000000000000000003121926313537444b5054575a5c5e5f5f5e5d60758aa6b8c4af9a846f5d4b3721110000000000000000000012273c52677c91a7bcd1d3bea9937e69543e29140d22374b5d70859bb0c3d3dfcab49f8c79634e3c2b1900000000000000000f1f31424c6176879daabbc6b5a395806b5d4b3a3d51667c91a5b6cacdb9a895806a5746331a0a000000000000000000000000000000162c41566b8196abc0d6c8b39d88735a48341d0d08102132434c6176879da9bacde2e2cebbaa95806b5b4a362614010000000000000000000000000000000000000b21364b6075899eb3c9dadfd7c6b4a2937e695a4936261401000000000000000000000000000000000000000d1d2b34373c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c37342b1d0d0000000000000000162b40556b8095aac7d7c3ae99836e593f2e190a0000040d182530353e48483b382f2212010000000000000000021527375b70859ab0c5dacebbaa8c77624d37221d1d1d1d1d1d1d1d1d1d1d1d1d1d1d14120c030000000000000f253a4f647a8fa4c7d7d8c2ad98836d584848484848484848484848484848413e342616050000000000000000000000010a10121e1e180c0a030000000000000000000000000008182839454b6069757f868b909294959594928e8a847d756a61574c403026180800000000000000000000000000000000000000000009141d202731363b484d5257595958565255748a9fb4bba6917c66513f2e1c03000000000000000000000f253a4f647a8fa4c7d7d6c0ab96816b56412c16192c3c4f647a8fa3b4c8e1d0bfae98836e5b49351e0e000000000000000001141f334658647a8c9fb4c0c1b49f8d7b6558474a5b6f849aafc3d3c7b49e8a77614c39291700000000000000000000000000000000162b40566b8095abc0d5c6b19c86715c3c2b19000c1c2e3f4f616e8399a5b6c7d7dfd3d8c8b49f8b79635443301c080000000000000000000000000000000000081c2e3f53687d93a7b8ccd4cbc8cbc0b49e8a78635443301c0e00000000000000000000000000000000000000000d1820222727272727272727272727272727272727272727272727272220190d00000000000000000011263b51667b90a9bacdc8b29d88735d4b37271a1716181f2b36434a545e5d504c402f1f0f000000000000000000182e43586d8398adc2d8d8c8a48f7a654f3a3333333333333333333333333333333329271f140600000000000d22374d62778ca9bacddac5b09a85705d5d5d5d5d5d5d5d5d5d5d5d5d5d5d57514534220e0000000000000000000005131e252833332d211e160b0000000000000000000000001325364557606e7e89949b9faba8a9abaaa9a7a99f9992898076665e4b43362614010000000000000000000000000000000000000000000112222f3c494d5962676c6e6f6d6b686271869cb1b6a18c77614c37221100000000000000000000000d22374c62778ca9bacdd8c3ae99836e59442e192035495a6e8399aec1d1dbc7b3a18e79644e3d2c1a000000000000000000000417293a4b5c6a7f94a2b3c4bcab9d8876614c4e63798ea2b4c8cebaa996816c5847331b0b0000000000000000000000000000000014293f54697e94a9bed3c6b19c86715c3a2a1708182a3a4b5d697f94a1b3c3d3cecabecacebbaa9b8573604b36251300000000000000000000000000000000000e23374b5d71869cb1c5d4c4b7b2b7c4b9a89a8473604b3d2c18080000000000000000000000000000000000000000050b0d1111111111111111111111111111111111111111111111110d0b05000000000000000000000c21364b61768a9fb4c9cbb7a68f7a655545382f2c2b2a343c485460697373665e4c3d2c1a0a0000000000000000162b40556b8095aac0d5d2bca7927d675248484848484848484848484848484848483f3b32241403000000000b20354a60758a9fb4c9ddc8b29d88737272727272727272727272727272726c63513e291500000000000000000000132330393d4849423632291b0b00000000000000000000071c304354607582939ea7b1b4bcc9bec0c0bfc7bab4aea79e95887c6c605443301c1605000000000000000000000000000000000000000011212f404c5a626d777d81838483817d776f8196abb59f8a75604a35200b00000000000000000000000b20354a60758a9fb4c9dbc6b09b86715b3928172a3a4d63788c9fb4cadfd1c0ae99846f5c4a361f0f00000000000000000000000c1c2e3e4b6072849aa6b8c9b7a699836e60596d8297adc0d1c9b49f8b78624d3a2a18000000000000000000000000000000000012273c51677c91a6c2d2c8b39d88735847331f1426364759657b8c9fb4bfcfc8bbb4a9b5bcc8b4a3927d675443301c0700000000000000000000000000000005192b3c50657b90a4b5c9cbb7a69da6b7c5b4a2937e695b493626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3246576e8398adbfd0c4b09b857460564c3f41403b474c5a62727e88887c665b49382715020000000000000013283e53687d93a8bdd2d4bfaa947f6a5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d544f43321f0c00000000071c30435472879cb2c7dccab59f8d87888888888888888888888888888887816c57412c170000000000000000000b1b30414d525d5e574b4639291603000000000000000006192b3c4a60728398a0b3b8c5caccc9c1bcbabcbfc6c9c5b9b3a69d918172604b44332313000000000000000000000000000000000000000c1c2e3f4c5e6678828b929698999896928b847e93a8b6a18c76614c37210c0000000000000000000000071c30435472879cb2c7dcc8b39e88735746321f3347586c8197abbccfdcc8b4a28f7a644f3e2d1a01000000000000000000000000101c3043546277889eabbcc4b2a1937e6861778a9fb4c9cfbcab97826d5948341c0c00000000000000000000000000000000000d22374c62778ca4b5c9cbb7a68c77614c37211c3043546177889daabbcecebbaa9f939fabbcc1b19c8673604a3520100000000000000000000000000000000b2035485a6e8399aec2d2c6b29d889da7b9c0b49f8a79635443301c0f00000000000000000000000000000000000000070c0e131313110d0b06000000000000000000000000000000000000000000000000000000000000031629394f647a8fa1b3c6c8b4a3988274655d5856565759616b7884939d9d8a79635645311d110000000000000010263b50657b90a5c9dad7c2ac97827272727272727272727272727272727272727269614f3b271200000000001325365a6f849aafc4d9cfbcab9f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9b85705b3929170300000000000000031729394d5f6773736d615746321e0c00000000000000000b2035485a6a7f95a1b2beccd0c5b9b3aca7a5a7aab1b5c2cac4b7b39e96816c625141301b0b000000000000000000000000000000000004172a3a4b5d667c89989faaacaeaeadabab9f998b9fb5baa5907b65503a2a170400000000000000000000001325365a6f849aafc4d9ccb8a78b76614b3628384c61778a9fb4c9d9d2c1af9a84705d4b37200f00000000000000000000000000011426364859667c8d9fb5c1bfb49f8a796a7f95a9bacdcab49f8c78634e3b2b190000000000000000000000000000000000000b1f34475971869cb1c6d5c4a7917c67523d2d2f3f4b6072849aa6b7c8cfbfb49f8c7e8d9fb5cab5a4917c66513e2d1b0700000000000000000000000000021628384d62788b9fb4caccb9a8907b899eb3c4baa99b8573604b3d2c190900000000000000000000000000000000010f1a2124282828262320190e0000000000000000000000000000000000000000000000000000000000000b22374b5c6f8399a8b9cdc1b2a098857b736e6c6b6c7077808a9aa1b3a89b8574604b3f2f1c080000000000000e23384e63788dabbccfdec9b49f8a878888888888888888888888888888888888877f69543f29140000000000182d42576d8297acc2d7dac9bcb5b2b2b2b2b2b2b2b2b2b2b2b2b2b2b29e88735746331e0a000000000000000a1e334657677d88888275614b3a29170400000000000005182a3b4d62788b9fb4bfcfd0c0b3a79e97929092949ba3b2b6c3cbbdb09f95806b5f4d39291603000000000000000000000000000000000a1f334758657b8c9ea7b4bbc1b4b0a9a8aab0ab9fabbcc2ad98826d5847331f0e0000000000000000000000182d42576d8297acc2d7d5c5a38e78634e393245566a7f94a8bacdddc9b5a3907b65503f2e1b01000000000000000000000000000008182a3b4c5e6b8096a3b4c5baa89b8575889db3c7d0bfad98836e5b49351d0d00000000000000000000000000000000000005182a3b54697e94a8b9ccc3ae99836e5b4a373b4c5d6a8095a2b3c4d3c3b3a1947f6e8399aec1c2b09b85705c4a36220d00000000000000000000000000091e3245566b8095aabbcec9b39e89737f94a6b7c7b4a3947f695b49372614010000000000000000000000000000000f1f2d36393d3d3d3c38352b1c130800000000000000000000000000000000000000000000000000000000071b2e3e4d62788a9eb4bbcebeb2a39b908883818082858b959fa8b3bfb5a396806b5d4c38230e0000000000000b20364b60758a9fb5cadfcdbaa89f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d97826d58422d180000000000152a3f556a7f94aabfd4e7dacfcac7c7c7c7c7c7c7c7c7c7c7c7c7c7b8a68b76614b36210c000000000000000c21364c61768a9d9e97816c5846331f0a0000000000000b1f3447596d8298a9bacdd1c1b3a29a89817c7b7c7f86909da5b4c1cdbdb09e917d675746321e0c000000000000000000000000000000021528384c6176899eaab9c5bbaea39b9492949aa2b3b8c5c9b49f8a76614c3c2c190600000000000000000000152a40556a7f95aabfd4d0bba6907b66513b364b6075889db3c6d7d2c2b09b85705d4c382010000000000000000000000000000000000d1d2f404b6073859ba7b9c6b5a3998499a6b8cbc7b3a18e79644e3d2c1a00000000000000000000000000000000000000000d21364b6176899eb3c1cab49f8c796355444859657b8d9fb4c0d0c7b6a5998372647a8fa3b5c8b4a38e79644e392410000000000000000000000000000b21364b6075889eb3c8d7c7ae98836e75889db2c1c1b49f8b79635544311d0f0000000000000000000000000000071a2d3d4a4e535353514d483c3025180800000000000000000000000000000000000000000000000000000000102035495a677d929db4bac7c1b5b0a69d989695979b9faab4bac6d0c1b59f8c7b65503b2610000000000000091d32455673889db3c8ddd7c6bab4b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2af9a85705a372614010000000012283d52677d92a7bcd2e7e2d4cbc8b8b8b8b8b8b8b8b8b8b8b8b8b8c4a38e79644e39240f0000000000000010263b50657b90a8b39f8a76614c36210c0000000000000d22374c62778b9fb4c7d7c8b4a39a84776c6765676a717b879ba3b4c3cdbcb29d8875614b3a2a17040000000000000000000000000000091d3245566b8096a7b8c8bfae9d94857f7d7f85909ea7b8c7baa996816b5b493521100000000000000000000012283d52677d92a7bcd2d3bda8937e6853424354687d92a6b8cbdec9b5a4917c66513f2f1c020000000000000000000000000000000000111d3144556278899eb3bdc1b3a199a1b3c4d1c0af99846f5c4a361f0e00000000000000000000000000000000000000000a1e334657697f94a3b5c5bcab9a8473604b556277889eabbccfcdbaa99c8776615c71869bb1c9c1ab96816c563e2d1b070000000000000000000000081c2e3f53687d92a7b8cccdbaa9927d67687d92a3b4c8baa99b8573604b3d2d1909000000000000000000000000000c21364a5b6368686866625a4a433625130000000000000000000000000000000000000000000000000000000006192c3c4d5f6a7f929fa9b7c4c9c4b7b3adababacb0b4bbc8cdcdc2b6a89e8b7b65503a2510000000000000021528385b70859bb0c5cdcdd7cdc9c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7b29d87725544311d080000000010253a4f657a8fa4c8d8e7d4c4b7b3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3917c66513c27110000000000000012283d52677d92a7baa9917c67523c271200000000000316293954697e93aabbcecebbaa9b85746259525052555d6575849ba5b6cacbb7a696806b5847331f0a00000000000000000000000000000b20364b6075899eb4c5c7b3a1947f706a686a707c899ea9bac7b49f8b78634d3e2d1b0700000000000000000010253a50657a8fa5c8d9d5c0ab95806b5858586073869cb1c4d5cebfb19c8673604a35201100000000000000000000000000000000000001152737495a677c919fb1c2bfb3afb3bfd0c8b4a28f7a654f3e2d1a000000000000000000000000000000000000000000031729394b6073859ba7b8c7b4a297816c606073849aa6b8c9cebdb49f8a7a645853697e93abbcc8b29d88735c4a36220d00000000000000000000000e23374b5d71869bb1c5d5c9b49f8a76616072859baabbc7b5a3947f6a5b4a372715010000000000000000000000000e24394e63797d7d7d7b786c605443301c0a000000000000000000000000000000000000000000000000000000000e1e304150616a7e8b9da6b4b9c6cac8c3c1c0c1c5cacec9c6b9b4a49c8a7c665d4b37230e00000000000000192e43586e8398adb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b49f8a75604b35200b000000000d22384d62778daabbcedfcbb7a69d8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e7f69543f2a140000000000000013283d53687d92a8c7ac97826c573b2b1805000000000a1e32465770859bb0c8d9c9b49f8c796356473b3b3d3f4b576175879cb2c0d0c4b49f8a77614c37210c000000000000000000000000000010253b50657b90a8b9cdc3ae99836e615453555e667b8b9fb4c6bbaa98836e5c4a36220a0000000000000000000d23384d62788daabbced8c3ad98836e6d6d6e717f94a4b6c9cebeb2a1917c675443301c070000000000000000000000000000000000000009192b3c4d5f6c8197a4b5c7c7c4c7d0d2c2b09a85705d4b37200f000000000000000000000000000000000000000000000b1d3144556379899ea9b9c0b19f9781736b8096a2b4c5d2c1b19f927d685c4a4d62778b9fb5cab7a68e79644e39240f0000000000000000000005182b3b4f657a8fa3b5c9d4c4ad98836e585463798c9fb4c3c1b49f8b79635544311d0f00000000000000000000000013283d52687d929292918b8172604a3928160300000000000000000000000000000000000000000000000000000000132333435060687b88949ea8b2b6c3bfc1c2c2c1bfc2b5b1a89e95867a665e4c3f2e1c0800000000000001162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3aa8d78624d38220d000000000b20354b60758a9fb4caddc8b39d887979797979797979797979797979797977624c37220d0000000000000013283e53687d93a8bdb29c8772594834200b000000000c21364b61768a9fb4c9ccbcab96816b5b4a382a26272f394657657a8fa2b3c7cdbaa9937e69543726140100000000000000000000000000152b40556a8095aac6d6c7a5907b6550433d404c5d6a8095a8b9c8b2a08e79644f3828160200000000000000000b20354b60758a9fb4caddc8b39d888282828386949dafc2d3c5b2a098836e5f4d3625180c00000000000000000000000000000000000000000e1e30414b6075869ca9baced9dcdec9b5a4907b66513f2e1c010000000000000000000000000000000000000000000001142637495b657b8b9ea7b6bdb19f97857e939eb0c0d1c5b5a397816c5f4e3d485971869bb0c6c4a9947f6a543f2a15000000000000000000000b203448596e8398aec1d2cbb7a6907b66504a5b6b8096a5b7cabaa99b8573604b3d2d1909000000000000000000000010253b50657a90a5a8ab9f947f6a5745321e090000000000000000000000000000000000000000000000000000000005152533424e5d65757f89959ca4a7aaacadadacaaa6a49c94898074645c4c402f2111000000000000000013293e53687e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7a65503a251000000000081d31445572879db2c7dccab49f8a75636363636363636363636363636363625947341f0b0000000000000014293e53697e93a8beb6a48c77624d37220d0000000010263b50657b90a3acb4b9b49f8c78624d3d2d1a10121b29394b5d6f849aafc9d7c7af9a846f5544311d0800000000000000000000000002172d42576c8297acc1cebaa98b76614c36282f3f4b6175899eb4c9beac97826c5645321e090000000000000000081d31445572889db2c7ddcbb7a69d979797989ba3afbbccd7c2ad98827560544c40342a1d0f0100000000000000000000000000000000000000121e32455663798a9fb4c9dff1dcc6b19c87715e4c39291703000000000000000000000000000000000000000000000009192c3d4b5d657b899ca5b1bdb1a29a939cadbccdc9b8a79b8574604b41313b566b8196abc5c0ae99836e593a2917040000000000000000021528384d62778b9fb4caddc8b39d8874604b3d4b6175879db2bfc7b5a3957f6a5c4a37271502000000000000000000000e23384d63788dabbcbcb39e8975604b36210b0000000000000000000000000000000000000000000000000000000000071523313f4b57606a777f878d92959798989795918c867f776a60564a3d2f22120300000000000000000c21364b61757878787878787878787878787878787878787878787878787878787975614b36210c00000000011426375a70859aafc5dacebbaa8d77624e4e4e4e4e4e4e4e4e4e4e4e4e4e4c473b2a18050000000000000014293e54697e93a9bec3a7927d67523d2812000000000f253a4f647a858e979ea8a799846f5a48351f0f00000b1b2e3f51677c91abbccfc9b49f8a75604b35200b00000000000000000000000004192e43596e8398aec3c9b49f8a745746331e1e3246576d8298adc2c9b39e8975604b36210b0000000000000000011527375b70859ab0c5dad5c4b7b3adadadadb1b5c2ccded8c3ae98827b73665e4c473b2d201002000000000000000000000000000000000000071b2e3e4f64798fa9bacee2dedcc9b49f8a79645746331e140200000000000000000000000000000000000000000000000f1f2e3f4b5d657987979fb0b4b4b0a8adbacbcfbcab9e897862564532263c51667b91a7ababab9d88735846331f0a0000000000000000091d3245566b8095aabbced2c1ab96806b5544324657667c90a1b2c6c1b49f8b79645544311d10000000000000000000000b20364b60758a9fb4cab8a7917c67513c27120000000000000000000000000000000000000000000000000000000000000513212e39454b59616a72787c7f828383827f7c77716961584b45382d1f12040000000000000000000a1e3346576163636363636363636363636363636363636363636363636363636363615746321e0a0000000000182d42586d8297adc2d7d8c8a48f7a654f3a39393939393939393939393937342a1d0d000000000000000014293e53697e93a8bec1ac97816c57422c17000000000d22374b5c64717982898f8f8879634e3c2b19010000001022374c61778b9fb5cacdbaa98d78634d38230e00000000000000000000000003182e43586d8398adc2cab49f8a75604a352016283953687d93a8bdccb9a78f7a65503a2510000000000000000000182d43586d8298adc2d7e2d5cbc8c2c2c2c3c3c3c4c6c9cdc6b2a09890867c6f61594a3e2d20100000000000000000000000000000000000000d22364a5c6f8499aec7d8d3cac7cabaa99c8776614c4332201000000000000000000000000000000000000000000000000111212e3f4b5b6375818f9aa2b4c0bdc1cbd0c0b59f8d7c665a48382821364b61758995969696968b76614c36210c00000000000000000b20364b6075889eb3c8d8c9b5a38e79634e3728394c5e6e8399a8b9ccbbaa9b8674604b3e2d1a0a000000000000000000091d31455673889db2c8c5ac97826c573c2c190600000000000000000000000000000000000000000000000000000000000003101b28323a474c555a62676a6c6d6d6c6a676259544c473a32281a0f010000000000000000000003172939464b4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b46392916030000000000152b40556a8095aabfd5d2bca7927d67523d282424242424242424242424221f180d00000000000000000011263c51667b91a6bbc4af99846f5a36251300000000081b2e3e4b4f5c646c74797a75635b49351e0e000000000a1f33475872889db2c7d7c7a5907a65503b251000000000000000000000000001162c41566b8196abc0cfbcab8c77624c372210253b50657a90a5bad6c5a8937d68533e2813010000000000000000162b40556b8095aac0d5e6d3c3b6b2aeaeaeaeaeafb1b4b9c6beb2aea49c918377645c4a3e2d1e0e00000000000000000000000000000000071b2e3e4f647a8fa1b3c7d2c3b6b2b6c3b6a599836e614f3f2e1c0c00000000000000000000000000000000000000000000000311212e3d4a57616c7a849aa2b4c8d5d4c3b3a295806b5e4c3c2b1a1e324657647a80818181818077624d37220d00000000000000081b2e3e52677d92a6b8cbd8c8b09b86715b4a361b2f404d62778a9eb4c1c8b5a395806a5c4a382715020000000000000000021527385b70859bb0c5c7b29d87725a4935200c00000000000000000000000000000000000000000000000000000000000000000a161e2a34373c484d52555758585755514d483b37332a1e160a000000000000000000000000000b1b293336383838383838383838383838383838383838383838383838383838383632291b0b00000000000013283d52687d92a7bdd2d4bfaa957f6a55402a150e0e0e0e0e0e0e0e0e0e0d0b05000000000000000000000e24394e63798ea3c5c7b19c87725443301c070000000010202e373e4a4f556064656056493d2c1a000000000004182a3a5b71869bb0c6d0bba6917b66513c26110000000000000000000000000013293e53687e93a8c2d3c9a6907b66513b2a1824394e64798ea3b9cebea9947f69543f2a1c14080000000000000013283e53687d93a8bdd2dfcab6a59c98989898999a9c9ea8acb4bbc2b6b1a199877a645c4a3c2b18080000000000000000000000000000000d22374b5c6f8499afbfd0c2b5a49ca4b6c3b2a1947e695d4b3a2a1808000000000000000000000000000000000000000000000003111f2d39464b5d6570859aafc5dacbb7a59a8472604b402f1e0e1629394a5c646b6b6b6b6b6b62594834200b000000000000000d22374b5c71859bb0c5d5cebbaa937e69533d2d1a20344859697e93a3b5c8c2b49f8c7a645645311d10000000000000000000192e43586e8398adc3cab7a58d78634d38230e000000000000000000000000000000000000000000000000000000000000000000030c181f222b35383d4042434342403c37342b221f180c020000000000000000000000000000000b171e2123232323232323232323232323232323232323232323232323232323211e160b0000000000000010253b50657a90a5c9d9d7c2ac97826d57422d1800000000000000000000000000000000000000000000000c21364b61768ba7b8c9b49f8975604a35200b0000000002101b222d3637444b4f4f4b45382c1f0f00000002090c182d3d5b70869bb0c5d1bba6917c66513c2711000000000000000000000000000e23384d63788da4b6cac1ac97826c59483628263650657a8fa5bacfbea9937e69543e353026180800000000000010263b50657b90a5c9dadcc7b29c8783838383838586898f979faab4c1bfb3a59d8a7a645a493626140100000000000000000000000000081b2e3e4f647a8fa1b3c7c9b5a49c879ca9babfb49f8b7b645847362614010000000000000000000000000000000000000000000000010f1b29323f4d62788b9fb4cacebeb29d8776615443302212000b1b2d3e4a4f5556565656564d483b2b180500000000000005182b3b4f647a8fa3b5c9dfc9b49f8b77614c37220f182b3b4b6073859baabbcebbaa9c8674604b3e2d1a0a0000000000000001162b41566b8096abc0d4c3a8937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000040a0e192022272a2d2e2e2d2a272220180d0a04000000000000000000000000000000000000030a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0a0300000000000000000d23384d62788dabbccfdac4af9a856f5a36261401000000000000000000000000000000000000000000000a1e33465773889eb3c8baa98c77624c37220d00000000000008101b222731353a3a3632281a0f050b0d1b151d2029364a5b73889db2c8d4c3a5907a65503b2510000000000000000000000000000c2035495a72879cb1c3c9b49e8a77625446393b4354697e93a9bed1bca7927c6757514b433626180800000000000e23384e63788dabbccfd8c2ad98836e6e6e6e6e6f71757a828b9ba3b3bfc3b7a89d8878625443301c0a000000000000000000000000000d22374b5c6f8499afbfd0c4b19c86788a9fb4bfbbaa9d8776615443301c11000000000000000000000000000000000000000000000000000b192c3c556b8095aabbcec7b1a0907b65584736261404000010202d363940414141414137342b1d0d000000000000000b203448596d8398adc1d2d5c5ae99836e5847331f0a0d1c304354647a8c9fb4c4c8b5a495806b5c4a382816020000000000000013293e53687e93a8bdd3c3ae99836e593a29170400000000000000000000000000000000000000000000000000000000000000000000000000050b0d12151718181715120d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cadcc7b29c87725443301c0800000000000000000000000000000000000000000000031729395b71869bb0c6c7a48f7a644f3a250f00000000000000000709151d202425211e160a0d181f22302832363a475463798ea6b7cbcab7a58c77624d37220d0000000000000000000000000006192c3c53687e93a5b7c9b9a899837261575150536073869bb1c6cfbaa5907b716c6660544336251300000000000b21364b60768a9fb5cadac5b09b85705b5959595a5560656c788599a1b3c3c6b8a69b8573604b382816020000000000000000000000081b2e3e4f647a8fa1b3c7cbb7a6927d697e93a1b3c4b7a6998372604b3f2f1d0d0000000000000000000000000000000000000000000000000c2035495a72879cb1c8cebaa997826d5d4b3a2a180800000002101b22242b2c2c2c2c2c2220180d00000000000000021527374c62778b9fb4c9dfccb8a7917c66513a2a1804011426364a5c6c8196a6b7cbc2b49f8c7a645645321e100000000000000011263b51667b90a6bbd0c8b39e89735847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b13131313131313130c0a0300000000000000000000000000000000000000000000000000000000000000000000081d31445573889db2c8ddc9b49f8a75604b35200b0808080808080808080808080808000000000000000000192e43596e8398aec3bca7917c67523c27120000000000000000000001080b0f100b09030d1d2a34374538454b4f5861728399aec4d4c5b29d8772594834200b00000000000000000000000000000e20364b6074879dabbcc6b3a19882756b676669708096a3b5c9d2beab999086817c73605443301c0700000000091e32455673889db3c8ddc8b29d88735645434437444b505a63748399a5b6cac4b5a3937e685645321e0900000000000000000000000d22374b5c6f849aafbfd0c5b29d8774606f8399a6b8c4b3a1957f6a5d4c3b2b190900000000000000000000000000000000000000000000000e23384d63788da4b6cac9b49f8b77624d3f2e1c0c000000000000070d0f1616161616160d0b050000000000000000081d3144556a8095aabbceddc8b39e8874604b36200c000008182d3e4b6175879db2bfcebbaa9c8674604b3e2e1a0a0000000000000e24394e63798ea3c5d6ccb8a78c76614c37210c000000000000000000000000000000000000030a20202020202020202020202020202020202020202020202020202020202020202020201d1a140a00000000000008131c202828282828282828211e170b000000000000000000000000000000000000000000000000000000000000000000021527375b70859ab0c5dacebbaa8c77624d37221d1d1d1d1d1d1d1d1d1d1d1d1d1d1d14120c030000000001162b41566b8096abb7b7a9947f6a543f2a15000000000000000000000000000000000005182a3b484c5a5b5660656c768298a1b3c7c9b8a795806a553b2b18050000000000000000000000000000091d314556667c8d9fb5bcbfb2a09888807c7b7e85969eb0c1d2d7c8b7aba49c96918372604a35200b00000000021628385b70869bb0c5dbcab49f8a75604b362e2731363c49566176879cb2c3d2c1b39e8875604b36210b00000000000000000000081b2e3f4f647a8fa1b3c7ccb9a7947f69556177889dabbcbfb49f8d7b655948372715010000000000000000000000000000000000000000000012273c52677c91a7c2d3c2ad98826d5948342111000003090b100e0b080100010101010100000000000000000000000b20364b6074889db3c8d8d2c2ac96816c5544311d08000000101e334657667c91a1b3c6c8b6a496806b5c4b3828160300000000000c21364c61768ba7b9ccd6c5a38e79644e39240f00000000000000000000000000000000000b161e3535353535353535353535353535353535353535353535353535353535353535353535322f271c0e0000000008182530353d3d3d3d3d3d3d3d3633291b0b000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adc2d8d8c8a48f7a654f3a3333333333333333333333333333333329271f14060000000013293e53687e93a2a2a2a297826c57422d1700000000000000000000000000000000000b1f34485962707072757a818998a0b2bfc9bcab9e8976614c37210d000000000000000000000000000000021527384c5e6a7f959eb4babeb2a69d959190939ba3b0bccac7c2c2c2c2b6b1aca2907b65503b25100000000000192e43596e8398aec3d8cfbcab8d78634d3823151d202c384658667c91a4b6caccb8a7927d6852392816030000000000000000000d22374b5d6f849aafbfd0c7b39e8976614b59667b8d9fb5c1bcab9e8877625544311d1200000000000000000000000000000000000000000000152b40556a8095aabfd6c6a6917b66513b2b1803000a161e212523201c14130c0a03000000000000000000000000071b2d3e52677d92a6b7cbdec9b5a48e79644f37271502000000031729394d5e6e8399a8b9cdc2b49f8c7a645645321e1000000000000a1e33465774899eb3c9d0bba6917b66513c2611000000000000000000000000000000000b1b29324a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a47433a2c1c0a000000132536434a53535353535353534c46392917030000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac0d5d2bca7927d675248484848484848484848484848484848483f3b3224140300000011263b50667c8d8d8d8d8d8d846f5a442f1a00000000000000000000000000000000000d22374c62778486878a8f969ea7b2bec3b6ab9f8d7d675847331f0a000000000000000000000000000000000a1a2f404a607280929fa9b4bcb7b2aaa6a5a8b0b4c1c3b6b2adadadadadadada9947f69543f2a140000000001162b41566b8096abc0d5d9c9a5907a65503b2510080e1a293a4a6073879cb2c7d5c5b09a85705746321e090000000000000000081b2e3f4f647a8fa2b3c7cebaa995806b57464c5e6c8196a3b5c6b8a69a8473604b402f1e0e000000000000000000000000000000000000000002172c42576c8197acc1ccb9a88b76614c36210d000a1b2832363a3835302628211e160b00000000000000000000000d22364a5c70859bb0c4d5d9c8b19c86715c4a36190900000000000b1b30404d62788a9eb4c2cfbcab9c8675604b3f2e1b0a00000000031729395c71869bb1c6d3bea9937e69543e291400000000000000000000000000000003162939465e606060606060606060606060606060606060606060606060606060606060606060605c574a3a27140000071c304354606868686868686868615746331e0a000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdd2d4bfaa947f6a5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d544f43321f0c0000000b20364b607478787878787877624c37220d00000000000000000000000000000000000b20364b60758b9b9d9faaabb3b8c3b7b2a59d8d7e695f4d3a2a17040000000000000000000000000000000000121c304354606b7d8b989fabb2b6c3bcbbbdc8bbb4afa59c979797979797979797816c57422c17000000000014293e53697e93a8bed3d2bda8927d68533d281300000b1c3043546c8196abc1d6cab49f8a76614b36210c00000000000000000e22374b5d6f849aafc0d0c9b49f8b77624c39404b6074859ba8bac5b4a296806b5e4c3c2b1a0a0000000000000000000000000000000000000003182e43586d8398adc2c9b49e89745846331f0a03162839454b4f4e4b43363d3632291b0b00000000000000000004182a3b4f647a8fa3b4c8cdcebbaa947f69543e2d1b00000000000000122035485a697f94a3b5c7c9b6a496816b5d4b3928160300000000192f44596e8499aec3d6c0ab96816b56412c160100000000000000000000000000000a1e3246577075757575757575757575757575757575757575757575757575757575757575757575726857432f1a00000b20354a60727e7d7d7d7d7d7d7d75614c36210c000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5c9dad7c2ac97817272727272727272727272727272727272727269614f3b2712000000091d3145566062626262626262594834200b0000000000000000000000000000000000091d31455673889db2b4bbc8c8cab7a59d93877b69604e41301c0c00000000000000000000000000000000000000132536434a5f6878828c969ca5a4a7a8a8a7aa9f9a92878282828282828282827f69543e2914000000000011263b51667b90a6bbd0d5bfaa95806a55402b1500000013253651677c91a6bcd1cebbaa907a65503b251000000000000000081c2e3f4f657a8fa2b3c8c8bcab97826d59483431455663798a9fb4bfc0b09e917c665a493828150200000000000000000000000000000000000002182d42576d8297acc2c8b39e88735544311d08091e324557606563605457524b463929160300000000000000000b1f3447596d8298adc1b8b8c1b49f8b77624c3722100000000000000005192b3c4b6073869ba9b7c3c2b49f8c7b655745321e0900000002172c41576c8196acc1d6c3ae98836e59432e190000000000000000000000000000000c21364b61758a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86725c47321d0000071c30435473899292929292928f7a654f3a251000000000000000000000000000000000000000000000000000000000000000000e23384e63788dabbccfdec9b49f8a878888888888888888888888888888888888877f69543f291400000002152738454b4d4d4d4d4d4d4c483b2b18050000000000000000000000000000000000021527385b70859bb0babfc4cac7b29d877e75655d4e42312414050000000000000000000000000000000000000008182530414e5a626d7981878c8f929393918f8a857d746d6d6d6d6d6d6d6d6d69614f3b271200000000000e24394e63798ea3c5d6d7c2ad97826d58422d180000000f253a4f647a8fa4b9cfd8c8a9947e69543f2914000000000000000e23374b5d6f849aafb2b2b2b29f8c79634e3b2b2738495b687e93a1b2b2b2b29e8978625645321d0900000000000000000000000000000000000001162b40566b8095abc0cab49f8a75604b35200c1a2d3e4b60757a7874706c68615746321e0a00000000000000000c22374c61778a9fa3a3a3a3a3a399836e594834200b00000000000000000e1d314455647a8b9da5a3a3a3ab9c8775604b36210b00000000142a3f54697f94a9bed4c6b09b86715b3928160300000000000000000000000000000c21364b61768b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c87725c47321d0000001325365b71869ba8a8a8a8a7927c67523d271200000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb5cadfcdbaa89f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d97826d58422d18000000000a1a27313638383838383837342b1d0d00000000000000000000000000000000000000182e43586d8398a3a5a9aeb4bbb49f8b837c70645c4e42312313010000000000000000000000000000000000000008131c313c484d5b636b72777a7c7d7d7c7a766f6860555858585858585858544f42321f0c00000000000c21364c61768ba7b9ccdac5af9a85705a3726140100000e23394e63788ea3b8cdd5c0aa95806b55402b160000000000000010253a4f657a8f9d9d9d9d9d9d99836e5b49351d1a2c3d4e606e83989d9d9d9d9d9b8574604b36200b0000000000000000000000000000000000000012283d52677d92a7c2cebbaa8e79644f3a2a1921364a5c70848f8d8985817d75614b36210c0000000000000000152a3f556a7f8d8d8d8d8d8d8d8c8577624c3b2b18050000000000000000011527374a5c657b878d8d8d8d8d8d8d816c57412c170200000012273c51677c91a6bcd1c8b39e88735745321e0900000000000000000000000000000c21364b61768ba0b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b19c87725c47321d000000192e44596e8399aebdbdbdaa947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000091d32455673889db3c8ddd7c6bab4b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2af9a85705a37261401000000000a151d202323232323232220180d0000000000000000000000000000000000000001162b40566b808c8e9094999faab4aa9f9990857a68604e41311f0f000000000000000000000000000000000000000000131e2b353d494e5659616567686867646157524b4437424242424242423e3b3224140200000000000a1e33465774899eb3c9dcc7b29d87725544311d08000610253a4f647a8fa4b9cfd6c1ac97816c57422c1700000000000003182d43586d82888888888888888578634d3d2c1a0f1f31424c617683888888888888887f6a55402a15000000000000000000000000000000000000000d23384d62788da4b5c9c8aa95806b5847372b2d3e4e64798ea2a89e9a968d78634e38230e00000000000000000d22384d6278787878787878787771625948341d0d0000000000000000000009192d3e4b5d65737778787878787879634e38230e000000000f243a4f64798fa4c7d7cbb8a68b76604b36210b00000000000000000000000000000c21364b61768ba0b6beb1ada7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7afb4c0b19c87725c47321d000001172c41566c8196abc1d2c1ac97826c57422d170000000000000000000000000000000000000000000000000000000000000000021528385b70859bb0c5cdcdd7cdc9c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7b29d87725544311d08000000000002090b0d0d0d0d0d0d0d0b050000000000000000000000000000000000000000000b20364b607477787b7f848b969fabb4aea39b8b7e685f4e3d2c1a060000000000000000000000000000000000000000000e19202c36393b474c4f525353524f4b46393531272d2d2d2d2d2d2d29271f1406000000000000031729395c71869bb1c6dbcab49f8a75604b352018191a212f3f53687d92a8bdd2d6c1ac96816c57412c1700000000000001162b3f53646d7373737373737270635a49351f0f01141f334658616e727373737373736a61503c2813000000000000000000000000000000000000000b2035495a71869cb1c3c8b39e89776155483c3e4a5c6b8196abb9b4b0a68c77614c37220c00000000000000000b2034485a626363636363636362594c483b2b1800000000000000000000000010202f3f4b546062636363636363635b4935210c000000000d22374c62778ca9bacdd5c5a38d78634e38230e00000000000000000000000000000c21364b61768ba0b6b19f9792929292929292929292929292929292929292929292929aa2b4b19c87725c47321d00000014293e54697e93a9bed3c4af9a846f5a362513000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b49f8a75604b35200b00000000000000000000000000000000000000000000000000000000000000000002090b0f11101d324556606263656a6f77808d9ea8b9b4a99f927d685b4936210f00000000000000000000000000000000000000000000060f1a21232a34373a3d3e3e3c3a363228201d151818181818181814120c020000000000000000192f44596e8499aec3d9cebbaa8d77624d382e2e2e2c363e4b5d6f8499aec4d9d4bfaa947f6a553f2a15000000000000001023354653585d5d5d5d5d5d5d5b4d493c2c1901000417293a464c595d5d5d5d5d5d5d55504333200d0000000000000000000000000000000000000006192b3c53687d93a5b6cab8a7998373625a57565c647a8b9fb4c9c8b29d88735847331f0a000000000000000005192b3c484d4e4e4e4e4e4e4e4c483b342b1d0d0000000000000000000000000211212f36434a4d4e4e4e4e4e4e4e493d2c1a06000000000b1f34475974899fb4c9d0bba5907b66503b261100000000000000000000000000000c21364b61768ba0b6ad97817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d849aafb19c87725c47321d00000011273c51667c91a6bbd1c7b19c87725443301c0d12141513110c0a04000000000000000000000000000000000000000000000001162b40566b8095a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3aa8d78624d38220d00000000030a0c1313131313130e0c060000000000000000000000000000060c0e161e21242625202838454b4d4e505459626b7b8a9eb4c0bab49f8b79634e3d2d1a070000000000000000000000000000000000000000000000060c0e181f22252728282724211e160b080100030303030303000000000000000000000001172c41566c8196abc1d6d8c8a48f7a654f434343443d494e5c657b90a1b3c7dbd2c1a7927d68523d281300000000000000061828353f43484848484848484538352c1e0e0000000b1b2933364348484848484848403c3325150300000000000000000000000000000000000000000e20354b6074879db2bdc5b3a19984786f6c6b6f7a879da9bacebfad97826d583a2a18040000000000000000000d1d2b34383838383838383837342b20180d00000000000000000000000000000311182530353838383838383838352c1f0e000000000005182a3b5c72879cb1c7d2bda8937d68533e281300000000000000000000000000000c21364b61768ba0b6a8927d686868686868686868686868686868686868686868686c8297acb19c87725c47321d0000000f24394e64798ea3c6d6c9b49f8a75604a35202227292a2926211f170c070000000000000000000000000000000000000000000013293e53687e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7a65503a25100000000b161e212828282828282321190e0000000000000000000000010f1a2123283236393b3b363228323637393b3b484c5d667c91a2b4c8bbaa9a846f5b4a36210c0000000000000000000000000000000000000000000000000000040b0c10121313120f0c09030000000000000000000000000000000000000000000014293f54697e94a9bed3d2bca7927d6758585858595a5b636c7a899eb3bfd0dec9b5a38c77624d37220d00000000000000000918232b2d33333333333333302320190e00000000000b171f212e333333333333332a28201507000000000000000000000000000000000000000000081d314455677c919fb0bfbfb3a29a8c858181848d9da5b7c7c4b3a18f7a644f3a250f00000000000000000000000d192022232323232323232220180d05000000000000000000000000000000000008131c202223232323232323211a0e000000000000001a2f455a6f849aafc4d5c0aa95806b55402b1600000000000000000000000000000c21364b61768ba0b6a8927d685352525252525252525252525252525252525252576c8297acb19c87725c47321d0000000c21374c61768ca8b9cdcdbaa98c77624c3734373c3e403e3c373329201c130800000000000000000000000000000000000000000c21364b61757878787878787878787878787878787878787878787878787878787975614b36210c00000b1b2932363d3d3d3d3d3d38352c1e0e000000000000000000000f1f2c353838454b4f51504b45382c202223262b343f4c5e6f849aafc4c8b4a28e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcd1d4bfaa947f6d6d6d6d6d6e707379818c9ea7b8ccddd2c1b19b8671594834200b000000000000000000061016181e1e1e1e1e1e1d1b0e0c0600000000000000040a0c191d1e1e1e1e1e1e15130d0300000000000000000000000000000000000000000000011527374d5f6c8196a1b0bdc0b3aa9f9a96969a9fabb7c3c5b8a699846f5c4b37220d000000000000000000000000050b0d0e0e0e0e0e0e0e0d0b05000000000000000000000000000000000000000000070b0d0e0e0e0e0e0e0e0c060000000000000002182d42576d8297acc2d7c2ad98836d58432e1800000000000000000000000000000c21364b61768ba0b6a8927d68533d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d42576c8297acb19c87725c47321d0000000a1f33475874899eb4c9d7c7a48f7a644f3b484c51545553514c473a3530251810010000000000000000000000000000000000000a1e3346576163636363636363636363636363636363636363636363636363636363615746321e0a0003162939464b5353535353534d493c2c19060000000000000000061a2c3d494e5856606466656056493c2c180e101820304051677c91a6c6d0c0ab96806b56372614010000000000000000000001080b10131514120d0b0500000000000000070a0b0b0b0b000000000000000000000000000000000000000000000000000f24394f64798ea4c6d7dcc7b19c8682838383838385888e969faab8c5d5d4c5b5a3937d68533b2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091930414b607383969fb1b6c2bbb4afacabafb5bcc9c2b5a79e8877624d3e2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfd4c5b09a85705b37271501000000000000000000000000000c21364b61768ba0b6a8927d68533d282828282828282828282828282828282d42576c8297acb19c87725c47321d00000004172a3a5c71879cb1c6d1bca7917c675251596267696a68666158514a43362e1c1408000000000000000000000000000000000003172939464b4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b4639291603000a1e32465761686868686868635b4935210c00000000000000000c2135495b636e7275797b7a74625a4936251300051222374c62778ca8b9ccc5b09b85705544311d0800000000000000000209141d2025282a2927221f180d090000080e101d20202020200d0b05000000000000000000000000000000000000000000000c22374c61778ca8b9cddecab6a49c9898989898999a9ea7abb4bbc8d5cfc4b7a79b8573604b35200d000000000000000000000000070d0f131515130e0b070000000000000000060a0b0b0b0b0000000000000000000000000000000000000000000000000000000000000000000000121d314455607381919ca4b0b5c1bfc1c0c2c0c2b6b1a49c897b6559483420100000000000000000000000050f15172020202020202020202020202020202020202020202020202020202020201816100600000000000000000000000000000000000012283d52677d92a7bcd2c7b29d88725544311d08000000000000000000000000000c21364b61768ba0b6a8927d68533d281313131313131313131313131313172d42576c8297acb19c87725c47321d000000001a2f44596f8499aec4d4bfa9947f6a5e6670777c7e7f7e7b76706760544b3f3026180900000000000000000000000000000000000b1b293336383838383838383838383838383838383838383838383838383838383632291b0b00000c21364b61767d7d7d7d7d7d79634d38230e00000000000000000e23384e637982878a8e90908778625443301c07000b1f34475974899eb4c9c9b49f8975604b35200b000000000000000a151d2631353a3e403f3c37342a231c12111c23253235353535352220190e0000000000000000000000000000000000000000000a1f33475874899eb4c9ded3c2b6b1adadadadadaeafb3b8c5cacecdc9beb2a69d8979635544311d0800000000000000000000070f1a2124282a2a2824201c1308040000060c0e1c2020202020110f090000000000000000000000000000000000000000000000000000000000000000011527374455606c7c86929ba3a7aaacadacaba8a49c928679655d4b3b2b1802000000000000000000000917222a2c3535353535353535353535353535353535353535353535353535353535352e2b23180a000000000000000000000000000000000010253a50657a8fa5c9d9cab49f8a75604b35200b000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d00000002172c42576c8197acc1d6c1ac97816c6e7b858b91939593918a857c72645d4b433627190900000000000000000000000000000000000b171e2123232323232323232323232323232323232323232323232323232323211e160b0000000d23384d62788d92929292927d68523d281300000000000000000c21364c61768a9c9faaa6a59b8572604a3520140105182a3b5d72879db2c7cdbaa98c77624c37220d0000000000000d1a273137444b50535554514c473b382f1f212f383b474a4a4a4a4a4a352b1e0e000000000000000000000000000000000000000004182a3a5c71879cb1c6cdcdd3cac7c2c2c2c2c2c3c5c8ccc8c5c7bab4aea0988879635b4937271501000000000000000008131c202d36393d3f3f3d393530251f170c0f1a212331353535353526231c11030000000000000000000000000000000000000000000000000000000000000009192737444b5e66747d868d929597989795938d867d73635b4b3f2e1d0d00000000000000000000051727343e414a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a433f35281806000000000000000000000000000000000d23384d62788dabbccfcfbcab8d78624d38230d000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d00000000142a3f54697f94a9bed4c4af99847683909b9faba9aaa8aa9f9a91867a6a605444372719090000000000000000000000000000000000030a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0a03000000000d23384d62788da2a8a8a7927d68523d281300000000000000000a1f3346586f8499aebbc3b4a3907b665042311d150e1d31455673889db2c8d7c7a28d78634d38230e00000000000d1d2b38454b556065686a69676259504c40342f3f4b505c5f606060605e483c2b190500000000000000000000000000000000000000001a2f445a6f8499afb8b8b8b8b8b8b8b8b8b8b8b8b7c5b8b3b0aca99f988f8377635b4a3c2c190900000000000000000b182530353d4a4e525454534e4a4336332a1c1f2c3639464a4a4a4a4a3b382f2211000000000000000000000000000000000000000000000000000000000000000009192631404d55606871787c80828382807e7872686055493d2e211000000000000000000000000f2234455257606060606060606060606060606060606060606060606060606060606060585346352310000000000000000000000000000000000b20354b60758a9fb4cad9c9a58f7a65503a2510000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d0000000012273c52677c91a7bcd1c8b29d878799a1b0b5bcc9bfc8bbb4afa49c8c8072605544372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da2b7bda7927d68523d281300000000000000000417293a52677d92a5b7cac1b09a8570604e4031272425364b60758a9fb4c9dac9a38e79634e39240e000000000c1d2b3b4856606a747a7d7f7e7c776f665e4c473a4b5d65727575757575705a4835200b0000000000000000000000000000000000000002172d42576c8297a3a3a3a3a3a3a3a3a3a3a3a3a3a2a1a79e9b97918a837a6e61594a3d2d1e0e00000000000000000b1b2936434a535c64686a6a686360544c473a312c3d494e5b5f60606060504c402f1c09000000000000000000000000000000000000000000000000000000000000000009141d3037444b535a62676a6d6e6d6b68635a524b44372c1f10020000000000000000000000152a3e52636c7575757575757575757575757575757575757575757575757575757575756d64533f2b1601000000000000000000000000000000081d31445573889db2c8d2bda7927d68523d2813000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d000000000f253a4f647a8fa4c7d7cbb7a69d9ca4b3bcb5b3b3b4bbc8cac2b5aa9f958273605544311d1300000000000000000000000000000000000002090b0f131516161513100c0903000000000000000000000000000000000000000000000d23384d62788da2b7bda7927d68523d28130000000000000000000c20364b6074879db2c2c8b4a2937e685e4b443739364350657a8fa9bacdcfbcab8c77624d37220d00000004182a3b485962747f888f939594918c847b6e61594a50657b868a8a8a8a8a78624d38220d0000000000000000000000000000000000000000152a3f546a7f8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c8b8885817c766e645c4c473a2d1f0f00000000000000000a1a29394654606872797d7f7f7d79736a61584e4236495b63717575757575665e4c38230f0000000000000000000000000000000000000000000000000000000000000000000112192731353c484d525557585756534d493c353126190e00000000000000000000000000172c41576c818a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a826d58432e1800000000000000000000000000000000011527375b70859ab0c5d4bfaa957f6a55402a15000000000000000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d000000000d22374c62778ca9bacdd4c4b7b2b1b3afab9f9e9d9faab1b5c1c8bbb4a0988373604b41311d0d000000000000000000000000000001080b151d2024282a2b2b2a2825211e160d0b05000000000000000000000000000000000000000d23384d62788da2b7bda7927d68523d2813000000000000000000091d314556687d92a4b6c7c0b49f8b7c6a6055504e4f54606f8499afc7d7cab59f8b75604b36200b0000000b1f344759627786949ea6a8aaa9a6a29a908377645c5872879c9fab9f9f8f7a65503a251000000000000000000000000000000000000000000c21364c6176787878787878787878787878787878777573706c6761584f4b3e342a1c0f010000000000000002152838465761727d878e929494928e877f7668604c464e6379858a8a8a8a8a7c66503b2611000000000000000000000000000000000000000000000000000000000000000000000009151d202b35383d40424342403e38352c201d1409000000000000000000000000000014293f54697e949f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a85705b3827150200000000000000000000000000000000182e43586d8398adc2d7c2ac97826d57422d181313110f0900000000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d000000000b20354a60758a9fb4c9dfd4c7bab4a29a918b89888a919ba3b0bdcebeb2a196816c5f4e3b2b180500000000000000000000000008141c20283236393d3f40403f3d3a3632282220180d0600000000000000000000000000000000000d23384d62788da2b7bda7927d68523d2813000000000000000000021527384b6073869ca9bacdbaa99f8c7f746a65636469728096a1b3c7d7c7b09b86715645311d090000081c2f3f4c6177879ca4b3b8c4bfbec0b4afa199877a6461768ca5b4bcb5a7927d68523d281300000000000000000000000000000000000000000a1f334658616363636363636363636363636363626260555b57524c463a372e1f180c000000000000000000091d324556617584939da5a7a9a9a8a59d94897e6e6157596f84999faa9f9f937d68533e281300000000000000000000000000000000000000000000000000000000000000000000000001080e192022272b2d2e2d2b292320190e080100000000000000000000000000000011273c51667c91abbcb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b29d88735645311d0900000000000000000000000000000002162b40566b8095abc0d5c4af9a856f5a362529292926241d12040000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d00000000071c30435472879cb2c7dccdbaa99f91847c767373767c85969fafbcccbfb09f927d6859483420100000000000000000000004121826303538454b4f5254565555524f4b463937342b21190e020000000000000000000000000000000d23384d62788da2b7bda7927d68523d2813000000000000000000000a1d31445563798b9fb4bcc7baaa9f9487807b797a7e86969eb0bfd0cdbaa995806a553827150200000e23384b5d6e8398a5b5c2cbd5cecac2bdbfb3a59d897a64768cabbccfbfaa957f6a55402a1500000000000000000000000000000000000000000417293a464c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d4c4b4437423c363329221b100400000000000000000005192b3b4b6074849aa2b2b6c3bfbfc3b7b2a79e938375615873889eb3bbb5ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000050b0d121518191816130e0c060000000000000000000000000000000000000d22374d62778c9fb5c3d4cacacacad1c8c5c5c9cdd7cacacacacacacacacacacacab49f8a75604b36200b00000000000000000000000000000a151d263e53687e93a8bdd3c7b29c877254433e3e3e3e3c382f22120000000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d00000000001325365a6f849aafc4d9c9b49f8b7d6f6661585761677381959eafbecdbdb39e8977624d3f2e1b0800000000000000000c181f3036434b51566064686a6b6b6a68656157544d483b352c1d150a00000000000000000000000000000d23384d62788da2b7bda7927d68523d281300000000000000000000011426374a5b687e939eaebbc8bbb4a59d95908e8f939ba3b0bccdd1c1b49f8a78624d37220d000004182a3a50657b90a0b2c3d2d8c8bbb4ada8a9afb3a79e8978748a9fb5cac2ad97826d58422d180000000000000000000000000000000000000000000c1c293336383838383838383838383838383838373631272c27211f170b0800000000000000000000000b203448596a8095a2b4c0cad3cdc9c0b9c5b8b3a19985766173889eb3c8c2ad98836d58432e18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596e8399a5b7c3d3e1e3d1c0b4b0b0b4bac7bfc0c0c0c0c0c0c0c0c0c0c0bcab8d78634d38230e000000000000000000000000000a1a2731374450667b90a5bbd0c9b49f8a75605353535353514c402f1d0900000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d0000000000182d42576d8297acc2d7c1ac97826c5f514c46464b55606c8095a0b2c3ccb9a799836e5d4b372210000000000000010f1d2a34404d5460666e75797d7f80807f7d7a76706962594d493c31271a0e000000000000000000000000000d23384d62788da2b7bda7927d68523d2813000000000000000000000009192d3d4e606b80949db2b7c4c3b7b2aaa5a3a4a8b1b5c2cdcfc1b4a396806b594834200b00000a1f3347586e8399aebecfd8c8bbaa9f9893949aa2b3a79c8675899eb3c9c4af9a856f5a362614010000000000000000000000000000000000000000000c171f2123232323232323232323232323232322201d1517120c0a04000000000000000000000000000d22374d62788a9fb4c0d1d7c7bab4aaa3a2a6afb2a39b857572879cb1c7c5b09b85705b3828150200000000000000000000000000000000000000000000000000000000000000000000000000000811181a202020202020110f0900000000000000000000000000000000000005192b3b4d6278879da5b6c3d3dcc8b4a29a9b9fa9a7aaababababababababababababa28d78634d38230e00000000000000000000000002152738454b556063788ea3b8cdcebaa98c77686868686868665e4c38240800000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d0000000000152a40556a7f95aabfd4c4ae99846f594136333237444b616d8298a5b7cac5b2a18f7a644f3e2d1b070000000002101f2d3b474c5e66737b83898e9294959594928f8a857f776d635b4b45382b1e100200000000000000000000000d23384d62788da2b7bda7927d68523d28130000000000000000000000000f1f314250626b7f919da6b4bac7c7bfbab8b9bec6c9cdc9bcb5a39b8574604b3b2b190500000c22374c61778b9fb4cadfcebbaa9f8c827d7f84909ea7a49782879db2c7c7b29d87725443301c0800000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0d0b0802000000000000000000000000000000000004182a3a556a7f94a9bacdd8c8baa99f958e8d919aa2b4a3998374869bb0c5c8b39d88735645321d09000000000000000000000000000000000000000000000000000000000000000000000000000b19252c2f35353535353526241d120400000000000000000000000000000000000d203448596278879ca5b6c2d3c5b09a84858a8f9294969696969696969696969696938472604a35200b000000000000000000000000091d314556606d74787d92a7bcd2d8c7aa95807e7e7e7e7e7e7c665136251300000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d000000000012283d52677d92a7bcd2c6b19c87715c3a291f1e2731434c6176879db2c2cfbfaf9a846f5c4a36220a0000000010202e3d4a59616f7c8690989ea8a7a9abaaaaa7aa9f9b948b82786b6056493c2d201001000000000000000000000d23384d62788da2b7bda7927d68523d281300000000000000000000000001142433445061697c88979fa9b1b6c2bfc1c2c2c0c6b9b4ab9f978577615645321d0d00000011263c51667b91aabbcedfc9b49f8c7c6d68696f7b899ea6a0978b9fb4c9c9b49f8a75604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475972879cb1c7d7cebbaa9f8b8079787c84929fa9a195808399afc4cab59f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000819293741444a4a4a4a4a4a3c38302212000000000000000000000000000000000005192b3b495a6278879ca4b6c2c9b49e897a757a7d7f8081818181818181818181807d75605443301c070000000000000000000000000b20364b607481898d929bacc0d4d8c3af9e9593939393939386715443301c07000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d000000000010253a50657a8fa5c8d9c9b49e89745847331f09151f334658677d92a4b6cac7b3a28e79644f382815020000081b2e3e4b5c647783919ca4aeb4b9c6bfc0c0bfc8bbb4b0aa9f988b8074625a4a3e2d1f0f000000000000000000000d23384d62788da2b7bda7927d68523d28130000000000000000000000000006162633434f5e6676818a949ca4a6aaabadadaba9a89e988c817461594738281500000000162b40556b8095aac8d9d3c2aa95806b5e53545e6579889ea9a99fa9bacecebbaa8d77624d38220d000000000000050e1416202020202020201d1b140b000000000000050f1517202020202020201c191309000000000000000000000000000000000000000c22374c61778ca4b6cadfcab49f8c7b6b6463666f7d8b9fa99f8c879db2c7cfbcab8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000011253747545a606060606060514c40301d0900000000000000000000000000000000000d1d2b3c495a6277869ca4b5c2b9a89e8a7b65686a6b6b6b6b6b6b6b6b6b6b6b6b686056453625130000000000000000000000000012273c51677c919fa8a7acb9cadcdfccbcafaaa8a8a8a8a89f8975604a35200b000000000c21364b61768ba0b6a8927d68533d281300000000000000000000000002172d42576c8297acb19c87725c47321d00000000000d22384d62778daabbceccb9a88c76614c37210c0417293a4b6073869cb1c9d0c0ac96816c5645321d0900000d22374b5c647a8899a1b1b6c2c9ccc8c2bdbbbbbdc0c6c8bbb4a99f958578645c4a3d2c1c0c0000000000000000000d23384d62788da2b7bda7927d68523d2813000000000000000000000000000008162532404c58616c777f878c919496989796948f8982796c6056473b2a1a0a00000000192e43586e8398adc3d8cab6a48c77624d40404c5b647b8b9fb4b4bac7d8d8c8a48f7a654f3a25100000000000081621292c35353535353535322f271c0e000000000917222a2d35353535353535312e261b0d00000000000000000000000000000000000010263b50657b90a5c2d3d7c6ac97816c5d4e4d515f677b8b9fab9f9da5b6cadac9a5907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000003182c4154656f757575757575665e4c38240f0000000000000000000000000000000000000e1e2b3c48596277869ca4b5c1b9a89e8a7b655e565656565656565656565656534b45382818080000000000000000000000000012273c51677c91a6bac6c3c6cfddeadaccc3c0bdbdbdbdbaa98c77624c37220d000000000c21364b61768ba0b6a8927d68533d281616161616161616161616161616172d42576c8297acb19c87725c47321d00000000000b20354b60758a9fb4cad6c6a38e79644e39240f000b1c304354687e93abbccfc8b39e8975604b36200b00000f253a4f647a899da6b3bfcaccc5b8b3ada8a6a5a7aab1b6c2c7bab4a39b887a645b493a29170400000000000000000d23384d62788da2b7bda7927d68523d28130000000000000000000000000000000715222f3a464c59616a72777c7f818282817f7a756d635b4b45382a1d0c00000000001a2f455a6f849aafc4d9c7b19c87725948342f3d4b5d6a7f94a4b5c9d8e5d2bca7927d67523d281200000000051626343d414a4a4a4a4a4a4a47433a2c1c0b0000051727353e424a4a4a4a4a4a4a4642382b1b09000000000000000000000000000000000014293e54697e93a9bed3cdb9a88e79644f3f38414d5d667c8d9fb4b2b6c3d3d2bda8937d68533e28130000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f838a8a8a8a8a8a7c66513c2611000000000000000000000000000000000000000e1e2b3b48596277869ba3b5c1b9a89f8b7c665e4c404141414141414141413e3632281a0a00000000000000000000000000000f253a4f647a8fa4acacaeb3bfcfe2d4c3b7b2acacacacaca48f7a644f3a250f000000000c21364b61768ba0b6a8927d68533d2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2d42576c8297acb19c87725c47321d0000000000081d31445572889db2c7d0bba6917b66513c261100011426364c62778b9fb4caccb8a7907b65503b25100000162b40556b8095a1b3c1d0c5b9b3a79e9892919092959ca4b1b6c2c1b5a69d8979635847331f1200000000000000000d23384d62788da2b7bda7927d68523d28130000000000000000000000000000000004121c29333a474c555961676a6c6d6d6b696560564e493d32281a0c0000000000001b31465b70869bb0c5d9c4ae99846f593b2b1f2e3f4b6074869cb1c1d2e4d4bfaa947f6a553f2a15000000000e2134445156606060606060605d574a3a271400000f2235455257606060606060605b56493826130000000000000000000000000000000000152b40556a8095aabfd5c9b49e8974604a3523303f4c5e6b8096a4b6c9d3e1d5c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000002172d42576c82979f9f9f9f937e69543e291400000000000000000000000000000000000000000e1d2b3b48596176859ba3b4c0baa99f8b7c665e4d40302c2c2c2c2c2c2b28211e160a0000000000000000000000000000000d22374c62778c96969699a1b3c6dbcab7a59d969696969696927c67523d2712000000000c21364b61768ba0b6a8927d685340404040404040404040404040404040404042576c8297acb19c87725c47321d0000000000011426375b70859ab0c5d3bea9937e69543626140100081f34475970859aafc5d6c5ab95806b5636251300000b20354b60728399a3b5bfb3a79e9489827d7b7b7d80868f9ca4b2bec4b8a79d8776614c40301909000000000000000d23384d62788da2b7bda7927d68523d28130000000000000000000000000000000000000c171f2a34373b474c51555658585654504b4538362c1d150a000000000000001b30465b70859bb0c5d7c2ad98826d58432d181d314455667c91a3b5c9ddd7c2ac97826d57422d180000000014293d51626b75757575757575726857432f0c0000152a3e52636c75757575757575716756422e0a0000000000000000000000000000000000162c41566b8196abc0d6c6b19c86715443301c212f404b6074869cb1bfd0e3d8c2ad98836d58432e18000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9b5b5ab96816c56412c170100000000000000000000000000000000000000000d1d2a3a47586176859ba2b4c0baa99f8b7c665e4d4130231616161616130b0903000000000000000000000000000000000b20354a6072818181818399aec3d8c7b29d87818181818181817b65503b2610000000000c21364b61768ba0b6a8927d685555555555555555555555555555555555555555576c8297acb19c87725c47321d000000000000182d43586d8298adc2d6c1ac96816c5443301c080005182a3b556a8095aabfd5c5b09b86705443301c0700081c3043546175859ba5ada199897f756d686666686b717a8698a0b2bfc5b7a599836e5e4d372715010000000000000d23384d62788da2b7bda7927d68523d281300000000000000000000000000000000000000040c181f222a34373c3f414342413f3a363127211a0f0200000000000000001a2f445a6f8499afc4d7c2ac97826d57422d181527374c5e71869bb1c5d6d9c4af9a846f5a36251300000000162c41566b808a8a8a8a8a8a8a86725d3a2a170402172d42576c818a8a8a8a8a8a8a85715b3828160200000000000000000000000000000000172d42576c8297acc1d7c5af9a85705a362513121d314556667b90a1b3c7dcdac5b09a85705b38271502000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcc3ae99836e59442e19000000000000000000000000000000000000000000000d1c2a3a47586175849aa2b4c0baa99f8c7c675f4d413023130501010000000000000000000000000000000000000000071c304354606c6c6c6c798ea3c4d4c5b09b85706c6c6c6c6c6c655d4c38230e000000000c21364b61768ba0b6a8927d6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6c8197acb19c87725c47321d000000000000162b40556b8095aac0d5c8b29d8874604b35200e000011273c51667c91a6bbd1c9b49f8974604a35200b00011426364657627787959891837769615753515052555d65748298a1b3c5c3b2a1917c665544311d080000000000000d23384d62788da2b7bda7927d68523d2813000000000000000000000000000000000000000000040a0c181f22272a2c2d2d2c2a25201d150a0600000000000000000000192e43586e8398adc3d8c3ae99836e59442e1909192f4052687d92a7b9ccdcc7b29c87725443301c0700000014293e54697e939f9f9f9f9f9f89745847331f0a00152a3f556a7f949f9f9f9f9f9e88735645321e0900000000000000000000000000000000172c41566c8196abc1d6c4af9a846f5a452f1a021527384c5e6f849aafc1d2ddc8b29d88735645311d0900000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7c6b19b86715c39291703000000000000000000000000000000000000000000000c1c2a3a46576175849aa2b3bfbaaa9f8c7d675f4d413123130500000000000000000000000000000000000000000000132536434a57575761768ba6b7cbc8b39d8873585757575757504c3f2f1c08000000000c21364b61768ba0b6ae99838080808080808080808080808080808080808080808080859bb0b19c87725c47321d00000000000013283d53687d92a8bdd2cbb7a6907b65503c2b1906000d23384d62788da2c7d7cdbaa88d78624d38220d0000081828394859627780827c6f62594b46393c3b3d3f4b5660738399a7b8ccbfb29d8774604b35200f0000000000000d23384d62788da2b7bda7927d68523d2813000000000000000000000000000000000000000000000000040b0c12151718181614100b0902000000000000000000000000162b40556b8095aac0d5c5af9a85705a3a2a18041221364b6075899eb3c9dec9b49f8a75604a35200b00000011263c51667b91a6b5b5b5baa98c76614c37210c0012283d52677d92a7b5b5b5b8a68b76604b36210b00000000000000000000000000000000152b40556a8095aabfd5c5b09b86705b362614010a1a2f4050657b90a3b5c9dfcab49f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bac8b39e89735746331e0a00000000000000000000000000000000000000000000000c1c2939465761758499a1b3bfbbaa9f8c7d675f4e413123130500000000000000000000000000000000000000000008182530354141465773889db3c8cbb7a68b76614c414141413b382f211100000000000c21364b61768ba0b6b3a19995959595959595959595959595959595959595959595959ba3b5b19c87725c47321d00000000000010263b50657b90a5c9dad4c4ad98836e5a4935200f000b20364b60758ba9bacdd7c6a5907b65503b26100000000b1b2b3b4859616b6d675f4c483b32282626282e3845556177899eb3c7cab7a5927d68523d2c1a0600000000000d23384d62788da2b7bda7927d68523d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6c3d4c7b29c87725847331f0a091e3245566c8297acc5d6cebaa98c77624d37220d0000000f24394e64798ea3c6d6d7c7a38e79644e39240f0010253a50657a8fa5c9d9d5c4a28d78634d38230e0000000000000000000000000000000014293e54697e93a9bed3c7b29c87725443301c08001123384b5d71869bb1c8d8cfbcab8d78634d38230e00000000000000000000000000000000000000000000070808080808080808080808080b20354a60758a9fb4c9b8a78b76614b36210c0000000000000000000000000000000000000000000000000c1b2939465760748399a1b2bfbbaa9f8c7d685f4e413123130500000000000000000000000000000000000000000008131c202c2939596f8499aec4d5c4a58f7a655038282c2c26231c110300000000000c21364b61768ba0b6bfb3aeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab0b5c1b19c87725c47321d0000000000000e23384e63788dabbccfdfcab49f8b78624d3d2c1808091d31455674899fb4c9d1bca6917c67513c2712000000000d1d2b3b474c5658524d41342b1e161111131a28374759697e94a9bacdc3b09b86715b4935210c00000000000d23384d62788da2b7bda7927d68523d28130000000000000000000000000000050b0d1113151514110d0b050000000000000000000000000000000000000000000000000d23384d62788da5b7cacab59f8b77614c37220c0316283850667b90a7b9ccd8c7a48f7a644f3a250f0000000c21374c61768ca8b9cdd0bba6907b66513b2611000d23384d62788dabbccfd0baa5907b65503b26100000000000000000000000000000000011263b51667b90a6c5d6c9b49f8975604b35200b00081c2f3f53697e93aabbced9c9a5907a65503b2510000000000000000000000000000000000000020b11141d1e1e1e1e1e1e1e1e1e1e1e1e1e1c30435472879cb2c7c5a38e79634e3924180b0902000000000000000000000000000000000000000000000b1b2939455660748399a1b2bebbaa9f8d7d685f4e413123130500000000000000000000000000000000000000000000070b172b40556a8095aac1d2c0ab95806b5645322422201d14090600000000000c21364b61768ba0b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b19c87725c47321d0000000000000b21364b60768a9fb5cadfcebbaa97816c5b49362513021527385e73889db3c8d2bda8927d68533d281300000000000d1d2a343740433c393020180d030000000a192a3b4c61768a9fb4c9c9b5a38d78634e38230e00000000000d23384d62788da2b7bda7927d68523d28130000000000000000000000030a0d181f2226282a2a29262220190d0b050000000000000000000000000000000000000000000c2035495a72879db2c7cfbcab917c6751392917030b20364b6075899eb3c9d1bca7927c67523d27120000000a1f33475874899eb4c9d3bda8937e68533e2913000b20364b60758a9fb4cad2bda8927d68533d2813000000000000000000000000000000000d23384d62788da7b9cccdbaa88d78634e38230e00001122374c61778b9fb4cad2bda8927d68533d2813000000000000000000000000000000000006141f262932333333333333333333333333333325365a6f849aafc4bba6917b66513c332d201d150a000000000000000000000000000000000000000000000b1b2838455660738398a0b2bebbab9f8d7e685f4d413023130500000000000000000000000000000000000000000000000f24394f64798ea3b5c9c8b29d8875604b42393735312620190e000000000c21364b61758b9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c87725c47321d000000000000091e32455673889db3c8ddd9c8b49f8c79635443301c101d31445574899eb3c9d3bea8937e69533e29140000000000000c181f222b2d27251d12050000000000000c1f3347586e8399aec3d2c1a9947e69543f291400000000000d23384d62788da2b7bda7927d68523d2813000000000000000000000b171e212a34373c3e3f3f3e3b37342b2220190d050000000000000000000000000000000000000006192c3c566b8096abc1d2c9ac97816c5746331e0b081d31445570859ab0c5d4bfa9947f6a543f2a1500000004172a3a5c71879cb1c6d5c0aa95806b55402b1600081d31445573889db2c8d5bfaa95806a55402b15000000000000000000000000000000000b20354a6074899eb3c9d7c6a7927c675237261401000a1f33475870859aafc5d5c0aa95806b55402b1600000000000000000000000000000000001424313b3e4748484848484848484848484848484848576d8297acc2bea8937e69534848433632281a0a000000000000000000000000000000000000000000000a1a2838455560738298a0b1bebcab9f8d7d675f4d4130231203000000000000000000000000000000000000000000000d22364a5c71869bb1c1cbb7a695806a60524e4c4b4437352c1e0e0000000b21364b607586878787878787878787878787878787878787878787878787878787878787878787836f5a442f1a000000000000021628385b70869bb0c5dbe2cebbaa9a8472604a3f2e1f20354b60758a9fb4cad2bda7927d68523d281300000000000000040b0c161812100a01000000000000000417293a54697f94a9bed4c3ae99836e5937261401000000000d23384d62788da2b7bda7927d68523d2813000000000000000008131c2933363b484c5153555553514d483b38342b20180d000000000000000000000000000000000000000f243a4f647a8fa3b5c9c9b49e8976614c39291603152737586d8298adc2d7c1ac97826c57422d17000000001a2f445a6f8499afc4d7c2ad98826d58432d1803021527375b70859bb0c5d7c2ad97826d58422d1800000000000000000000000000000000071c3043546e8399aec8d9c2ac97826d5544311d080004182a3a586d8297adc2d7c2ad98826d58432d18000000000000000000000000000000000e1e31424e535c5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d6a7f94aabfc0ab96816b5d5d5d584b4538281502000000000000000000000000000000000000000000000a1a2837445560738297a0b1bebcab9f8d7d675f4d4130211101000000000000000000000000000000000000000000071b2d3e53687d92a3b5c7c4b59f8d7e7068636260554d493c2c19060000091e32455760727272727272727272727272727272727272727272727272727272727272727272726f6554412c1800000000000000192e43586e8398adc3d8dfd1c8b4a2937e695d4b3d3025364e63788daabbced1bba6917c66513c271100000000000000000000010300000000000000000000000010253b50657a90a5bacfc7b29c87725544311d08000000000d23384d62788da2b7bda7927d68523d2813000000000000000b18253039464c55596266686a6a69666259554d483c342b1d130200000000000000000000000000000000000d22364a5c71859bb0c2ccb9a8937e695746321e11162b40556b8095aac0d5c4af9a846f5a36251300000002172c42576c8197acc1d6c4af9a856f5a45301a0000192e43586e8398adc3d8c4af9a856f5a362513000000000000000000000000000000000013253653687e93aabbcec8b39e8874604b3520100000152a40556a7f95aabfd4c5b09a85705b37271502000000000000000000000000000006192b3c4e6069727373737373737373737373737373737373737d92a7bcc3ae9883737373726d605645321d0900000000000000000000000000000000000000000000000a192737445560728297a0b1bebcab9f8c7d675f4d3f2e1f0f000000000000000000000000000000000000000000001020354b6073859ba9bac9bcab9f93857d79777572635a4935200c000003162839454b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5a544737251100000000000001162b41566b8096abc0d5d1c1b4b0b49f8b7b655c4d403a4354687e93a8c8d9d4c3a58f7a65503a25100000000000000000000000000000000000000000000000000e23394e63788ea3b8cdcab49f8a75604b35200b000000000d23384d62788da2b7bda7927d68523d28130000000000000b1b2836434a57616a71777b7d7f7f7e7b77726b625a4c483b311d150900000000000000000000000000000000071b2e3e51677c91a4b5c9c6b29d8775614b3f2f2013283d53687d92a8bdd2c7b19c87725443301c07000000152a3f546a7f94a9bfd4c7b29c87725d3a2a180401162b41566b8096abc0d5c7b29c87725443301c07000000000000000000000000000000000d22374d62778b9fb4caccb8a7907b65503e2d19090012283d52677d92a7bcd2c7b29d88725544311d0800000000000000000000000000000b2035485a697e87888888888888888888888888888888888888899eb3c8c9b49f8b888888888274604b36200b00000000000000000000000000000000000000000000000009192737445460728197a0b2bfbbaa9f8c7d675d4b3d2c1b0a000000000000000000000000000000000000000000081c304354647a8b9fabbbc8bcb5a29a928e8c8a8678634d38230e0000000a1b283236474747474747474747474747474747474747474747474747474747474747474747474441372919070000000000000014293e53697e93a8bed3c8b4a39ba3a99e897a675f524f516072859bb1c6dbcab7a58c77614c37210c0000000000000000000000000000000000000000000000000d22374c62778ca1b7cccebbaa8c76614c37210c000000000d23384d62788da2b7bda7927d68523d281300000000000a1a283946546069767f868b9193949493908c8780786d62594e413127190a000000000000000000000000000000001020354b6073869cabbccab7a596816c5d4b3e2e1d253b50657a90a5c8d9c9b49f8975604a35200b00000012273d52677c92a7bcd1c9b49f89745847331f0a0014293e53697e93a8bed3c9b49f8a75604a35200b000000000000000000000000000000000b203448596f8499afc2d3c5af9a846f5c4a3727150110253a50657a8fa5c8d8cab49f8a75604b36200b00000000000000000000000000000d23384d62788c9c9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea7b8cccdbaa99f9d9d9d9d927d68533d28130000000000000000000000000000000000000000000000000009192636435460728298a1b3c1bbaa9f8b7b655b49392816030000000000000000000000000000000000000000011426364a5c677d8d9faab7c3c0b4b0a7a3ab9f947f6a543f2a15000000000a161e21323232323232323232323232323232323232323232323232323232323232323232322f2c25190b000000000000000011263b51667b90a6bbd0c5b09b8598a0a79e8a7c6f6764666e7f94a3b5c9ddc7b29d87725847331f0a0000000000000000000000000000020808010000000000000d22374d62778ca2b7ccd8c8a28d77624d38220d000000000d23384d62788da2b7bda7927d68523d28130000000002152838465761727f89949b9faba8aaaaa8a6a49c958b8277685f4b4437281a0a000000000000000000000000000000081c304354647a8d9fb5c2c3b59f8d7b655c4b3f3228384d62788daabbcecdbaa98c77624c37220d00000010253a4f657a8fa4c8d8cdbaa98c77614c37220c0011263c51667b91a6bbd0cdbaa98c77624c37220d0000000000000000000000000000000005182b3b51677c91a4b6cac7b3a18f7a645544311d130d22384d62778daabbcecebbaa8d78624d38230d000000000000000000000000000011263b51667b90abb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b3b8c5d5d7c7bab4b2b2b2ab96816c56412c17010000000000000000000000000000000000000000000000000009182636435460738399a3b5c4baa99e8979635745321e1100000000000000000000000000000000000000000008182d3e4d5f687e8c9da5b2b7c4c5bdc9bcad98836d58372715010000000003090b1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1a1811070000000000000000000e24394e63798ea3c5d6bfa9947f8298a3a89e91847d797b83949dafc1d2d3c2ad98826d583a2a17040000000000000000000003090b11171d1d16110c0a0400071124394e64798ea3b9ced5c5a18c77624c37220d000000000d23384d62788da2b7bda7927d68523d281300000000091d324556617583949ea7b1b5bcc9bfbfbec2b6b1aa9f97897d6d605545382818080000000000000000000000000000011426364b5d6c8197a4b5c5bcab9e8a7a655d4b4538354b60758a9fb4cad7c7a48f79644f3a240f0000000d22384d62778daabbced7c7a38e79644e39240f000f24394e64798ea3c6d6d7c7a48f79644f3a240f00000000000000000000000000000000000d20354b6073869cb1c1d0bfb09b8573604b4230252021354b60758a9fb4c9d9c8a5907a65503b2510000000000000000000000000000013283d52687d92a7c9c8c8c8c8c8bfbdbdbdbdbdbdbdbdbdbdbdbdc4c7d0ddd7cdc9c4bdbdae99846e59442f190000000000000000000000000000000000000000000000000000000818263644556074859ba6b8c7b9a79c8675604b402f19090000000000000000000000000000000000000000000f2030414e60687a87949da6abb0b2b4b4b19c86715544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8ccc0aa958076859ba5b4a29a928f9199a1afbbccdecab6a4907b65503b2610000000000000000000000a161e21262d33322c26211f17131c20304053687e93a8bdd2ccb8a78b75604b36200b000000000d23384d62788da2b7bda7927d68523d2813000000091d30404b60748599a1b3b8c5cac6c7bab4b5bcc9c8bbb4a89e92817360564536261401000000000000000000000000000008182e3f4b6175869ca6b8c5b9a89e897b6b60564c47445572889db2c7d1bca7917c67523c27120000000b20354b60758a9fb4cad0bba6917b66513c2611000c21374c61768ca8b9cdd1bca6917c67513c27120000000000000000000000000000000000081d314455677d92a3b5c8c9b5a395806b604a4336353637445472879db2c7d2bda7927d68523d28130000000000000000000000000000142a3f54697f94a9c7d7dac9bcb5aaa8a8a8a8a8a8a8a8a8a8a8a8aeb3bfd0d0c0b4afa8a8a89b86715c362614010000000000000000000000000000000000000000000000000000000818273745566278889eb3bdc5b6a497826d5e4c37271502000000000000000000000000000000000000000001122331424e5c64757f8890969b9d9f9f9e9b8a75604b35200b0000000000000000000000000000050b0d1114161614120e0b08010000000000000000000000000000000000000000000000000000000a1e33465773899eb3c8c1ab96816c77879ca4b3afa7a4a6aeb2bfccd9cfbcb19c8673604b35200b000000000000000009171b2832363c424848413b37332a2530353f4c5e70859ab0c5dac8b39e88735544311d08000000000d23384d62788da2b7bda7927d68523d28130000000f24384c5e6c8197a3b2bfccc2b5b1a6a99f9fabacb4bbc6b9b39f978374605443301c11000000000000000000000000000000101e3246576278889ea7b8c4b9a79e8c8074686158585a70859aafc5d4bfa9947f6a543f2a15000000081c30435472879db2c7d3bda8937e68533e2913000a1f33475874899eb4c9d3bea9947e69543f29140000000000000000000000000000000000011426374b6073859baabbcec1b49f8d7e6a60544c4a4b4e556070859bb0c5d5bfaa95806a55402b150000000000000000000000000000162b41566b8096a9bacdcfbcab9f9492929292929292929292929299a1b3c7c7b4a29a9292929289745443301c080000000000000000000000000000000000000000000000000000000009192838485a657b909fb1c5c2b19f907b665544311d08000000000000000000000000000000000000000000051324313e4b576169757b808588898a88858075604b36210b000000000000000000000001080d181f22262a2b2b2a2724201d14090800000000000000000000000000000000000000000000000000031729395c71869bb1c6c2ac97826d62778699a1b3b9c6bbc3c6cfcec9bcb49e907b655443301c08000000000000000517273439454b51575d5d56514c473a36434a4e5d667c91a2b4c8d8c8ae99846e5937271502000000000d23384d62788da2b7bda7927d68523d28130000091d2f4051667c919fb1c1cfbfb3a49c918c8a8a8f979faab7c4bdb1a1998372604b3f2f1b0a000000000000000000000000000003162839485a647a899ea6b5c2b9aa9f96877e76716d6c6d8298adc2d6c1ac97816c57422c17020000011426365a70859aafc5d5c0ab95806b56402b160004172a3a5c71879cb1c6d6c1ab96816c56412c17010000000000000000000000000000000000091c30435464798c9fb4bfcfbcab9f937f72676260606469748096a2b4c8d7c2ad97826d58422d1800000000000000000000000000000f24394f647a8a9fb4bccab59f8b7f7d7d7d7d7d7d7d7d7d7d7d7d8399aec4c4af9a847d7d7d7d7e75604b35200b00000000000000000000000000000000000000000000000000000000000a1a2b3c4c5d6c8197a7b8ccbeb19c8674604b362513000000000000000000000000000000000000000000000613202e39464b5660666b7072747573706b605745321e090000000000000000000009141d202a34373c3f40403f3d39353126231c1108000000000000000000000000000000000000000000000000192f44596e8499aeb3b3ac97816c59627683939ea8b2b7c3bdc8bbb4ab9f95806b5d4c36261401000000000000000f223445525760666c72726b6661585c5b5460636c7b899eb3c0d1cebbaa947e69543f291400000000000d23384d62788da2b7bda7927d68523d281300000f24384c5e71869bb1bdcec5b3a199867c76747579818b9da6b7c4bfb3a195806b5d4c3928160300000000000000000000000000000b1b2b3c4b5c647a889ca4b5bcbbb4a59c938a86838181869cb1c6d9c4af99846f5a442f1a00000000182d43586d8298adc2d7c2ad98826d583c2b1906001a2f445a6f8499afc4d8c3ae99836e59442e19000000000000000000000000000000000000011426364a5c6a7f95a1b2c0c9bcb49d94857d777576797f87969eb0c0d1dac5af9a85705a37271501000000000000000000000000000d22364a5c677d929eb0bfbcab9a847568686868686868686868687e93a8bdc3ae98836e68686868605443301c08000000000000000000000000000000000000030a0c0f110f0b08010000000d1d2f3f4c6176899eb3c7cab6a4937e695443301c070000000000000000000000000000000000000000000002101b293238454b50565b5d5f5f5e5b564b453928160300000000000000000210192631353b474c5154565554524e4b4437372e231c110300000000000000000000000000000000000000000001172c41566c81969e9e9e9c927d67525861727e89959da5a6a8a7aa9f998c806b62513f2f18080000000000000000152a3e52636c757b818887817b76737170717479818b9ea7b9ccd6c6b49f8b78624d37220d00000000000d23384d62788da2b7bda7927d68523d2813000114263751667b90a3b5c9ccb8a799837467615860646c7a889da6b7c8bfb59f8d7b655745321e0b0000000000000000000000000000000e1e2e3e4b5c647986969fabb4c0b6b2aa9f9b9896969ca4b5c9dcc6b19c87715c3a2a1804000000162b40556b8095aac0d5c6b09b86715a4835200900172d42576c8297acc1d7c6b09b86715b3928160300000000000000000000000000000000000008182d3d4a60728399a2b3c0cfbbafa39b928c8a8b8e949da5b0bcced8ddc7b29d87725544311d0800000000000000000000000000071b2d3e4d5f6b8096a1b3c3b4a296806b5f5353535353535353667b90a6bbc5b09b86705b5353534b4336261401000000000000000000000000000000080e10171e21242625201d1409000000111f3346586a7f94a9bacdc2b19c8773604a35200b0000000000000000000000000000000000000000000000000b161e2731363b4146484a4a4946413632281b0a00000000000000000512202d37444b52596266696b6b6967636055504b3f382f1e170b00000000000000000000000000000000000000000013293e53687e88898988867f72604a47546069777f878d919292908a847a6b625144342111000000000000000002172c41576c818a91979d9d96908c89868687898e969faab9c5d6cdb9a898826d594834200b00000000000d23384d62788da2b7bda7927d68523d281300081d3144556e8399aec1d2c8b39e897661554c474b4f5c6478879daabbcebcab9d8775604b3929170300000000000000000000000000000010202e3e4a5b6374818d9aa2aeb4bbbbb4b0adacacb1b5c2d2cac7b49f89745947341f0a00000013283d53687d92a8bdd2c9b5a38d78624d37271501152a3f556a7f94aabfd4c8b39e88735745321e09000000000000000000000000000000000000000f1c3043546175849aa2b5bcc9c1b5b0a7ab9faba3a9b2b2adb4bbc8d8cab49f8a75604b35200b0000000000000000000000000000102030414b6073839aa5b6c0b09e917d675b49393d3d3d3d4e63788ea3c5c8b39e887356453d3d3530261808000000000000000000000000000003111c23252933363a3c3a353126190c00000417293a4c61768a9fb4c9cab6a4907b65503b261000000000000000000000000000000000000000000000000000030a151d20262b3033343533312b211e160a0000000000000000041223303e4a55606770777c7f80807f7c79746d655d504b3f33291b0f010000000000000000000000000000000000000011263b4e606873737373716a60544336434b59616a72787b7d7c7b766f645c504434261603000000000000000001162c41566b8196a9acb2b2aba6a79e9c9b9c9ea7acb4bbc8d5c9bcb49e8a78634d3b2b190500000000000d23384d62788da2b7bda7927d68523d2813000b20354b6074899eb4c9d6c0ab96816b58473733363e4a5a657b8c9fb4c7c9b6a5947f6a5746331e0a0000000000000000000000000000000210202d3c4956606c7a8490999faaaeb3b7c4bbbcbcbcbac3b7b2aea88c77614c37220c00000010263b50657b90a5bad0d2c1a9947f695544311d0b12283d52677d92a7bcd2ccb8a78b76604b36210b00000000000000000000000000000000000000001325364657617584969fabb5c2c9c6c9bcb4bcc7bab4a0989faabbcecebbaa8d77624d38220d000000000000000000000000000002131d3144556176879ca8b9bcb49e8a79635746362528364b61768ba7b8cbb8a68b76604b3628201c140800000000000000000000000000000011212f373b39464b4f514f4b4437291c0c00000b1f3347586e8398aec3d3c2ac97816c573a2a1804000000000000000000000000000000000000000000000000000002090b11161b1d1f201e1b160b0903000000000000000001122230414d5c64737d858b9194959594928e88827a71655d4c46392c1f0f010000000000000000000000000000000000000b1f31424e535e5e5e5e5c554a433626303b474c555a626668676561584f4a3e332616080000000000000000000010253b50657b90a8b9c7c7c0c5b8b3b1b0b1b3b8c5c9ceccc5b8ab9f927d675a49351d0d0000000000000d23384d62788da2b7bda7927d68523d2813000e24394e63798ea8b9cdd7c7a5907a65503a291f202d3c4b5d6b8196a9bacdc3b39e8976614b36210f00000000000000000000000000000000010f1e2c38454b5c64707b848b93999da6a4a6a7a7a6a5a3a59d98938c79634e39240e0000000e23384e63788da3c4d5ddc7b29d8774604b39281610253a50657a8fa5bacfd5c5a38d78634e38230e00000000000000000000000000000000000000000818283946576174808d9ba3aeb4bac7bdc5b8b3a99f94828c9fb4cad9c8a58f7a65503a251000000000000000000000000000000001142637475863798a9eabbcb9a89c8675615443301e32465773889eb3c8c4a38d78634e38230e0801000000000000000000000000000000081c2f3f4b505957616466646055473a291704000417293a53687e93a8bdd3c7b19c87725947341f0a0000000000000000000000000000000000000000000000000000000000000106080a0a09060100000000000000000000000f1f30404d5f677a86929b9faba9abaaa9a7a79e988f867b6e6157493d2d1f0f000000000000000000000000000000000000021424313b3e494949494740353025181c2a34373c494d515352504c463a362d20160800000000000000000000000b20364b6075899eb4c9dcd3cac7bdc0c3c5c6c6c5c3c5b9b3a79e8d7f695f4d3c2c19000000000000000d23384d62788da2b7bda7927d68523d28130012273c51677c91a6c6d7cdbaa98c77614c37220c101e2e3f4c62778a9fb4c9ccb9a7937e69533d2c1a0600000000000000000000000000000000000e1a28323e4b4f5d656f777e83888c8f90929291908e8b87837e77635b4a36210c0000000b21364b60768ba6b8cbdfcab7a5927d675746321e1223384d62788da2c5d6d0baa5907b65503b26100000000000000000000000000000000000000000000b1b28394656606b7b8691999fa9a6a8a6a79e978a7f72879db2c7d2bda7927d68523d2813000000000000000000000000000000000919293a4a5b667c8d9fb5bfb6a4998372604a402f28395b71869bb0c6bba5907b66503b261100000000000000000000000000000000000e23374b5d656e7276797b7a73615847331f0e00000f243a4f64798fa4b9cecab6a48c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182c3d4d5e677d8b9ca4b0b5bcc9c0c0bec5b8b3ada39b908276635b4a3d2d1e0e00000000000000000000000000000000000006141f262934343433322a201c13080c181f222c35383c3d3d3b363329221b1002000000000000000000000000091d3145566e8499aec3d3c2b6b1a8abaeb0b1b1afaeaba79e95897c69614f41301e0e000000000000000d23384d62788da2b7bda7927d68523d28130014293e54697e93a9bed3c9b49f89745947341f0a00111f3447596c8197acc5d6c5b19c86715b4935210c0000000000000000000000000000000000000a151d2e373f4c505961696e73777a7b7d7d7c7b7876726e6861594a3d2d1a07000000091e32455673889eb3c8ddd4c3b29d8775614b402f1f20364b60758ba7b9ccd2bda7927d68523d2813000000000000000000000000000000000000000000000b1b2838454b5d65727c848a8f9193918e8882786a70859aafc5d4bfaa957f6a55402a1500000000000000000000000000000000000c1c2d3d4c5e6a8095a1b3c2b3a1947f6a5e4c3c2b44596e8399aec3bda8937d68533e2813000000000000000000000000000000000010253b50657b83878b8f918f8576614c3d2c1a06000d22374d62778ca2b7ccd3c2a38e79644e39240f0000000000090f111111100d0b0500000000000000000000000000000000000000000000000000000000000000000000132536495b667c8d9fa9b5c2cac9c6bdbababdc4c8c1b5b1a0988679635b4a3c2b1a0a000000000000000000000000000000000000020b11131e1e1e1e1c150b07000000040b0e19202326282725211f170b0700000000000000000000000000000215273853687e93a8c2cab6a49c9296999a9c9c9a98958f898076665e4f4332231300000000000000000d23384d62788da2b7bda7927d68523d281300152a3f556a7f94aabfd4c8b39e88735e3a2a18040005182a3b50657b90a7b8ccc9b5a48e79634e39230e0000000000000000000000000000000000000002101b222f383a474c5359596264666767676563615759534c473b2d1f0f00000000031628385b71869bb0c6dbdfcab7a596806b5e4c3d2e1e31455674899eb3c9d3bea9937e69543e291400000000000000000000000000000000000000000000000b1a27313f4b5460666f767a7c7d7c79746c625a6d8297adc2d7c2ad97826d58422d180000000000000000000000000000000000000f1f30404a60728399a4b6bfb49f8d7c655a483841566b8196abc0c0ab95806b56402b1601000000000000000000000000000000000f243a4f64798f9d9faba6a398826d5b49352111010b21364b60768ba0b5cbcfbaa5907a65503b251000000003111c23262626262220190d0600000000000000000000000000000000000000000000000000000000000000071c30435463798a9eabbac7cdc1b5b0a8a4a4a8afb5bcc9beb2a49c8879635a48382816030000000000000000000000000000000000000000000909090907000000000000000000060c0d111312100c0a0400000000000000000000000000000000000d23384d62788da4b6c7b19c867d80848586878583807a746b61584d403225140500000000000000000d23384d62788da2b7bda7927d68523d281300152a3f556a7f94aabfd4c8b39d88735e3727150100000d20354b6075899eb3c8d2c2a9947f6a543f2a1500000000000000000000000000000000000000000008111c232a34373e3b484d4f51525251504e4c46393e37342a1d0f010000000000192e43596e8398aec3d8e5d4c3b59f8d7c665c4b3e3230435473889eb3c8d5bfaa95806a55402b150000000000000000000000000000000000000000000000000a151d2e36434a515761656768666460554d556a8095aabfd5c4af9a856f5a36261401000000000000000000000000000000000001121c3043546175869ca7b8bcab9e89786256453e54697e93a9bec2ad98836d58432e1800000000000000000000000000000000000d22364a5c72879db2bcc1b59f8c79634e3f2f1f130e21364c61768ba1b6cbd1bba6917c66513c271100000011222f383b3b3b3b38342b211a0f0100000000000000000000000000000000000000000000000000000000000b20354a6072859ba8b9c9cdbcb0a39b938f8f93999fabb5c1c2b6a69e8878625645321e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a72879cb1c7b49f8a766b6e707171706e6b6560554c463a302214070000000000000000000d23384d62788da2b7bda7927d68523d28130014293f54697e94a9bed3c9b49f89745544311d080000081d3144556e8499aec3d9c3ae99846e593929160300000000000000000000000000000000000000000000090c181f22292b34373a3b3d3d3c3b3936332928221f180c00000000000001162c41566b8196abc0d6d7c7bab4ab9e897a645c4b46394a6074899fb4c9d5c0aa95806b55402b160000000000000000000000000000000000000000000000000002111825303539464b4f5153514f4b443752687d92a7bdd2c7b29d87725443301c080000000000000000000000000000000000000013253646576378899eaabbb8a79b8574604b4251667b91a6bbc5b09b85705b3827150200000000000000000000000000000000071b2e3e566b8095a9bacdbcab97826d5d4b3d30252428394e63798ea3b8ced7c7a5907a65503b25100000091c2f404c505151504d483c352c1f1002000000000000000000000000000000000000000000000000000000081b2e3e51677c91a3b4c6cfbeb09e96857e7a7a7d848d9ba3b3bfc4b8a69b8575604b3e2e1b080000000000000000000000000000000000000001080b0f121415161513110d0b050000000000000000000000000000000000000000000000000000000006192b3c566c8196abc6bbaa917c66595b5c5c5a5956504b443733291b1204000000000000000000000d23384d62788da2b7bda7927d68523d28130013283d53687d92a8bdd2cdbaa98a75604b35200b000001152737556b8095aac0d5c8b39d88735746321e0a000000000000000000000000000000000000000000000000040a0c1419202225262828272623211e17130c0b04000000000000000014293e54697e93a9bed3cdbaa99fa9a79e897a6a6157555564798ea9bacdd3bea8937e69533e291400000000000000000000000000000000000000000000000000000008131c202832363a3c3e3c3935313b50657a90a5c8d9c9b49f8a75604b35200b0000000000000000000000000000000000000008182939495a667c8c9fb4beb5a397826d604e4e64798ea3c5c8b29d88735645311d0900000000000000000000000000000000001022374c62778a9fb4c5c9b59f8d7b655b4d413a39394557697e93a9bed3cdbaa98e79634e39240e00000f23384c5e66666665625a4e493d2d20100000000000000000000000000000000000000000000000000000000d22374b5c71869bb1c1d1c7b2a0968073686565686f7a8599a1b3c2c4b5a396816c5c4b3722120000000000000000000000000000000001080b141d202427292b2b2a2926222019100e08000000000000000000000000000000000000000000000000000011263b50667b90a8bac8ac97816c573d47474543403a3531271f170b0000000000000000000000000d23384d62788da2b7bda7927d68523d28130010253b50657a90a5c4d5d7c7a28d78624d38220d00000012273c52677c91a7bcd1cbb8a68b76614b36210c00000000000000000000000000000000000000000000000000000000050b0d0f11121212100e0c0a0300000000000000000000000011273c51667c91a6bbd1c9b49f899da6a79e8c80756d6a6b748399aec7d7d3c2a6917c67513c27120000000000000000000000000000000000000000000000000000000000070b161e2125272827242023384d62788daabbcecebbaa8d77624d38220d00000000000000000000000000000000000000000b1b2c3c4c5e697f94a0b2c1b1a0937e685c4c61768ba7b9cab59f8a75604b36200b00000000000000000000000000000000000b203448596b8096a7b8ccbcab9e8979675f544f4e50576075879db2c7dcc9b49f8a76604b36210b000011263b50667c7b7b7b776f635b4a3e2d190900000000000000000000000000000000000000000000000000000f253a4f647a8fa3b5c9cdbaa998826e60544f4f535c64748399a4b5c8c1b49f8c7a644f40301d09000000000000000000000000000008141c20263135393d3e4040403e3b38342b25231c11080100000000000000000000000000000000000000000000000b21364b6075899fb4c7b29d87725b493632302e2b25201d150904000000000000000000000000000d23384d62788da2b7bda7927d68523d2813000d22384d62788da6b8cbd0bba6907b66513b261100000010253a4f657a8fa4bacfd5c4a38e78634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c6d6c0aa9580889da9aa9f9589827f808699a1b3c7decab6a48c77624d37220d0000000000000000000000000000000000000000000000000000000000000003090c101213110f0b20354b60758a9fb4cad8c8a48f7a654f3a25100000000000000000000000000000000000000000000e1e2f404f616d8298a3b5beb49f8b7a64595874899eb3c9bcab8d78634d38230e000000000000000000000000000000000005182b3b4c6176899eb3bdc9b8a79e897d71696563656a758399a5b6cad5c4af9a846f5745321e090003182d43586d829090908d8479645c4a3727150200000000000000000000000000000000000000000000000005192b3c566c8196abc1d2c9b49f8a77624c43363a3e4a566075869caabbcebcab9b85715e4d39241000000000000000000000000003131826303537444b4f525455565553514d483c3a372e201d140900000000000000000000000000000000000000000000091e3245566f8499aec4b7a58e79634e39231b1916100f0f0f0f0f0e0c09030000000000000000000d23384d62788da2b7bda7927d68523d2813000b2035485a73889eb3c8d4bfa9947f6a543a29170400000e24394e63798ea3b8cecfb9a48f7a644f3a250f00000000000000000000060c0d12141513100b09020000000000000003090b0b0b0b000000000000000000000000000000000000000c21374c61768ca8b9cdbfaa947f7a8b9fabb4a79e9894959ca4b3bfd0d5c4b19c8671594834200b000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572889db2c7d2bca7927d67523d281200000000000000000000000000000000000000000000112232434b6075859ba6b8baa99d8877615571869bb1c6c9a5907a65503b25100000000000000000000000000000000000000d1f334758667c919eb0bec5b8a79e92867f7a797a7f8799a1b3c3d3cbb7a6937e69533928160300000e23394e63798c9fa5a29a897a645544311d080000000000000000000000000000000000000000000000000b2034485a72879db2c7d7c7ac97826c59483426252d38455763798c9fb4c7c9b5a3917c66513e2e1b07000000000000000000000b171e3036434b5155606467696a6b6a6866625a57504b3f353126190e0000000000000000000000000000000000000000000216283853697e93a8c3c3a9947e6954392925252525252525252424211e160b06000000000000000d23384d62788da2b7bda7927d68523d28130005192b3c596e8399aec7d8c4af9a846f5846331f0800000d23384d62788da2b7cdd0baa5907b65503b26100000000000000000080e192023272a2a2925211e160a070000040a0c181e2020202014110b020000000000000000000000000000000a1f33475874899eb4c9c0ab95806b7d8d9fa9b7b3adaaaab1b6c2d0d7c8b8a6947f6a543b2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000011527375a70859aafc5d4bfaa947f6a553f2a150000000000000000000000000000000000000000000003151e3245566278889eaabbb7a69a8473606e8499aec3bda8927d68533d281300000000000000000000000000000000000004172a3a4c5e6c8196a0b1bec5b9b3a39b948f8e8f949da5b3bfd0cebeb39d8875604b36210b0000000c2136495b6e8399aeb4a79c8674604b3626140100000000000000000000000000000000000000000000000d22384d62778da5b7cacdbaa9907b66503b2a18101a28394a5b6c8196a9bacdc1b09b86715c4b37220a0000000000000000000b1b2933414d5460666f74797c7e80807f7e7b77736d655d524b44372c1e130500000000000000000000000000000000000000000e23384d63788da5b6c4af9a846f57463a3a3a3a3a3a3a3a3a3a39363228211a0f0100000000000d23384d62788da2b7bda7927d68523d2813000013283d52687d92a9bacec9b49f8a76614c36261401000e23384d63788da2b8cdcfbaa5907a65503b251000000000000002101b222c35383d3f3f3e3a363228221b100c171f212d333535353529261f1406000000000000000000000000000004172a3a5c71879cb1c6c1ac96816c677d8b9da6b4bbc8c0c6c9d3cdc6b9aa9e8875614b36210d0000000000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d8298adc2d7c2ac97826d57422d18000000000000000000000000000000000000000000000003162838485a657b8b9fb4bdb4a296806b6c8196abc1bfaa95806a55402b15000000000000000000000000000000000000000c1c30404b607382979fb4b9c6c1b5b1a9a4a3a5a9b2b7c3d0cdbfb2a0937e685645321e09000000061a2c3d4f647a8ea1b3b5a4927d685443301c08000000000000000000000000000000000000000000000012273c51677c91a6c3d4c9b49f8a75604b36200d000a1b2d3d4c62778a9fb4c9c9b5a38f7a644f38271502000000000000000a1a2939464c5f67737c84898e929395959593908d88827a71676055493c30231406000000000000000000000000000000000000000c2035495a72879cb2c7b49f8a76614f4f4f4f4f4f4f4f4f4f4f4e4b4639352c1f0f00000000000d23384d62788da2b7bda7927d68523d281300000c21374c61768a9fb4c9cebbaa927d685443301c0e000f24394e64798ea3b9ced6c5a48e79644f39240f00000000000715202e373c494d525455534f4b4538362d201c29333643494a4a4a4a3e3b3124140200000000000000000000000000001a2f445a6f8499afb3b3ab96816c5f677b88979faab3b7c4bdc7bab4a89e8c7c655746321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5c4af9a856f5a3626140100000000000000000000000000000000000000000000000a1a2b3c4b5d697e939fb1c0b09e917d697e93a9bec2ad98826d58432d180000000000000000000000000000000000000000121d314455607381939ea8b4bcc9c6bebab8babfc7cbccc7bab4a198826d604e38281603000000000f22364a5c6f849aafc0b19c8773604b3520120000000000000000000000000000000000000000000000152a40556a7f95aabfd4c5b09b85705645321d0900000f203448596d8298adc5d2c1ad97826d5645311d09000000000000081828384657616d7d8791999ea8a7a9aaabaaa8a6a69d978f857c73625a4d413225140500000000000000000000000000000000000006192c3c576c8196acc7baa9917c6664646464646464646464646361574e493d2c1e0e000000000d23384d62788da2b7bda7927d68523d281300000a1f3347586d8298adbfcfc8b19c8673604b3c2b1c0e12273c51677c91a6bcd1ccb9a78c77624c37220d00000000051525323e4b4f5a6267696a686560564f4a3e342b3a464c585e60606060534e42311f0b0000000000000000000000000002172d42576c82979e9e9e9c917c67515d6576818b969da6a6a8a7a99f988a7d675e4c39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2c7b29c87725443301c080000000000000000000000000000000000000000000000000e1e2e3f4e606d8197a3b4bcb49e8a797b90a6c4c5af9a85705a372715010000000000000000000000000000000000000002152737445560727e8a999fabb2b7c4bfc1c2c2c0c5b8b3a99f948374604b42311a0a0000000000071b2d3e50657b8fa2b4b6a4917c6752402f1c0900000000000000000000000000000000000000000000182d43586d8298adc2d7c2ad98826d5838281502000005182b3b50657a8fa7b8ccc9b39e8975604b36200b0000000000001325364556617582919ca5aeb3b9c6bebfc0bfbdc4b7b2aca39b918578675f4f433223130000000000000000000000000000000000000011263b51667b90a9bac7ad98827a7a7a7a7a7a7a7a7a7a7a7979766f635b493c2b19050000000d23384d62788da2b7bda7927d68523d2813000004172a3a4f647a8ea1b2c7cab6a4927d675a483a2c21212f40556a8095aabfd5c9b39e8974604a35200b00000000132332434f5c6470787c7f7f7e7a756d645c4c483b4658616d737575757569604e3b2611000000000000000000000000000014293e54697e88898988867f6a5f4d4b58616c7881888d919292908a8378675f4d402f1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c8d9c9b49f8a75604b35200b00000000000000000000000000000000000000000000000000112131424b6074859ba6b7b9a89c86798ea6b8c7b29d88725544311d080000000000000000000000000000000000000000091927374454606978838c969da6a7aaacadacaba9a79e968a7f6e605645322414000000000000001023374b5d70859ab0c1b19b86715e4c382411000000000000000000000000000000000000000000001a30455a6f859aafc4d5c0aa95806b55402b16000000000d20354b6074889eb3c8ccb9a8907b66503b26110000000000071c30435460748498a0b2b6c3c9c9c4b7b3b1b1b3b8c5c8c1b5b0a39b8a7d69614f41301e0e0000000000000000000000000000000000000b21364b60758a9fb4c9b2a0988f8f8f8f8f8f8f8f8f8f8f8f8e8b8479635a4835200b0000000d23384d62788da2b7bda7927d68523d28130000000c22364a5c6e8399a9bacdc2b39e89786258493c37373c4c5e71869cb1c6d7c6af9a846f5443301c070000000c1c31414f61697a858d929494938f89827a6e62594c4c617682888a8a8a8a7e69533e2914000000000000000000000000000012273b4f616973737373716a614f413a474c5a636b73787c7d7d7a766e635a4d41302111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daabbc0c0baa98c77624d37220d0000000000000000000000000000000000000000000000000003141d3145566277889da9bab6a49984889db3c8b49f8a75604b35200b00000000000000000000000000000000000000000009192636434a5a626e7881888d929596989795938e88807769614b453828150600000000000000081c2e3f51667b90a3b5b5a3907b66513f2e1c080000000000000000000000000000000000000000001c31475c71869cb1c6d4bea9947f69543f2a1400000000081c3043546d8298adc2d6c6ac97826c573b2a1804000000021628384a60728399a2b2becac7bab4aba69d9b9c9ea7aab4b9c6c1b4a89e927f695f4d3c2c19060000000000000000000000000000000000091e3245566f849aafc4beb2ada4a4a4a4a4a4a4a4a4a4a4a4ab9f998978624d38220d0000000d23384d62788da2b7bda7927d68523d2813000000071b2d3e4d63798b9fb4bfccb9a79b8576635a4f4c4c4e5a667b90a4b5c9cdbaa8937e695436251300000004182a3a4e5f697f8c9aa2a7a9aaa8a89e988e8377665e576c81969ea79f9f96806b56412b1601000000000000000000000000000c1f32424f545e5e5e5e5c544f433229333c494d565a636668676561574d493c30231303000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fababababa48f7a654f3a25100000000000000000000000000000000000000000000000000000021527384859647a8b9fb4bdb3a1998c9fb4cabbaa8d77624d38220d00000000000000000000000000000000000000000000091825303c484d5a626b73787d7f818382807e79746b62594f4332281a0a0000000000000000001124384c5e71869bb1c1b09a85705d4b3723100000000000000000000000000000000000000000001d32485d72879db2c7d3bda8937e68533e2913000000000114263652687d92a7c6d6c7b19c87725947341f0b000000091e324556677d92a1b3c0cfc6b9a99f968d888687898e959ea8b5c1c6b9b49d917d675a4935201100000000000000000000000000000000000316283854697e93a9c3cfc6c3b9b9b9b9b9b9b9b9b9b9b9c9bcb4a797826d583928160300000d23384d62788da2b7bda7927d68523d281300000000102135495b697f94a1b3c2c5b5a39b86786c656161646a78889db3c2d2c5b49f8a77614c37220c0000000a1f344759687d929faab4c0bebfc6b9b4ada199897c686071869cb1b8c5ad98836e58432e190000000000000000000000000000021424323b3e49494949473f3c3225171f2c35383c494d515352504c4639352c1e13050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144557287959595959595927c67523d27120000000000000000000000000000000000000000000000000000000a1a2a3b4a5c687d929fb0bfb3ab9fabbccfc8a58f7a65503a2510000000000000000000000000000000000000000000000008131c2b353c494d565a62676a6c6d6d6b696460544c483b321d150a00000000000000000000091c2f4051677c91a4b6b4a28f7b65503e2d1b0700000000000000000000000000000000000000001e33485d73889db2c8d2bda8937d68533e281300000000000e23384d63788da8b9cccab6a48c77614c37220c0000000b21364b6075879db2bfd0ccb9a89e8b80787371717379808a9ba3b5c1ccbbb49f8a78634d3f2e1c0800000000000000000000000000000000000e23384e63788da5b6cacdcdcdcdcdcdcdcdcdcdcdcdcdd9cfc5b29d88735745321e0900000d23384d62788da2b7bda7927d68523d28130000000006192c3c4a60728399a3b5c2c1b5a49c8a817a767679808a9da6b7cbc9b9a796816b5847331f0a0000000c22374c61778a9eb4bbc8d1d1c8c5bebdbfb2a79e8c7e6872879cb1c7c5b09b85705b38281502000000000000000000000000000006141f272934343433312a272015040e1920232c35383c3d3d3b36332920190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115273753687e808080808080807b654f3a2510000000000000000000000000000000000000000000000000000000000d1d2e3e4e5f6c8196a2b4c3bcb4bcc9d9bca7927d67523d2812000000000000000000000000000000000000000000000000000e19202c35383c484d525557585756544e4a4336342a1d15020000000000000000000000001220354b6073869cb1c0af9a846f5c4a36220f00000000000000000000000000000000000000001e33485d73889db2c8d2bda8937d68533e281300000000000c2035495a74899eb3c9d3c2a6917c66513c261100000011273c51667c91a5b7cbd3c3b49e8a7b6b625a5c5c5b636b78859ba3b5c7cdbaa89a846f5d4b37230c00000000000000000000000000000000000c2135495b72879db2b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a68b76604b36210b00000d23384d62788da2b7bda7927d68523d281300000000000e1c3043546176859ba4b3bfc2b6a99f968f8c8c8e959ea8b7c4cebcab9e8977624c3a2a18040000071a2d3d566b8096a8b9cdd9cec0b4afa9a8abb2b7aa9f8d7d71869bb0c6c8b39d88735645321d09000000000000000000000000000000020c12141e1e1e1e1c15130c030000060c0e19202327282825211e170b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009263b4e60686b6b6b6b6b6b6b655d4b37230e0000000000000000000000000000000000000000000000000000000000102031414b6073849aa5b7c6cacfd9d4bfaa957f6a55402a150000000000000000000000000000000000000000000000000000050e1920232b35383d40414342403e393530251f180d0000000000000000000000000000081c304354687d92a5b7b3a18e7a644f3d2c1a06000000000000000000000000000000000000001d32485d72879db2c7d3bda8937e68533e2913000000000006192c3c5b70859bb0c5d4bfaa947f6a553f2a15000003182d42586d8297adc3d4cab6a4927d685d4d493c3d4a4e596275859ba9bacdc6b3a28f7b65503a29170400000000000000000000000000000000061a2c3d576c8197a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a28e78634e39230e00000d23384d62788da2b7bda7927d68523d2813000000000000132536465861778699a1b4bac7bab4aba4a1a1a3aab4b9c6c8bbb49f8d7c665948341c0c0000000c21364a5b73889db2c6d7cebdb1a29a9393969da6b4ab9f8c7a849aafc4cab59f8a75604b36200b000000000000000000000000000000000000000909090907000000000000000000060c0e111312100c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f31424e53565656565656564f4b3f2e1c08000000000000000000000000000000000000000000000000000000000002131d3144556176879da8bacde1ebd7c2ac97826d57422d1800000000000000000000000000000000000000000000000000000000060c0e192023282a2c2e2d2b2924201c130805000000000000000000000000000000011426364b6074879db2bfae99836e5b4936210e000000000000000000000000000000000000001d32475c72879cb1c7d3bea9937e69543e2914000000000000182d42586d8297adc2d7c2ad98826d58432d1803000417293a5d72879db2c7dcc7b29c8773604a3f352b2d363b485763798b9fb4c9d0c0ae99836e5846331f0a000000000000000000000000000000000011263c51667c8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7b66513b261100000d23384d62788da2b7bda7927d68523d28130000000000000818293a4759617583949fa9b4bbc8c1bab6b6b9bfc9c8c1b4aa9f93806a5e4c3b2b18000000000e24394e63798ea6b7cbd9c5b19f97847e7d8188949fa9aa9d88859bb0c6cfbcab8d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021424313b3e404040404040403a372e211100000000000000000000000000000000000000000000000000000000000000011527374758647a8a9fb4bccddddac4af9a856f5a36261401000000000000000000000000000000000000000000000000000000000000060b0d121517181816140f0b0700000000000000000000000000000000000000081d314455697e93a6b8b59f8c79634e3c2b19060000000000000000000000000000000000001c31475c71869cb1c6d4bfa9947f6a543f2a15000000000000152b40556a8095aabfd5c5b09b86705b46311b00000a1f334758748a9fb4c9d5c0ab96806b54433020191a212b39495b6c8197acc5d5c9b49f8a76614c36210c00000000000000000000000000000000000b20354b60737878787878787878787878787878787878787878787875614b36210c00000d23384d62788da2b7bda7927d68523d2813000000000000000b1b2a3a475761727f8a989faab1b5c1bcbdbcc5b8b3ada39b8c7e6a625040301d0d0000000013283d52687d92a7c4d4d5c5ac97817069686b747f8a9da6a69d9ba3b5c9dac9a5907a65503b25100000000000000913191b20202020202020202020202020202020202020202020202017150f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f26292b2b2b2b2b2b2b25231c1103000000000000000000000000000000000000000000000000000000000000000009192a3a4a5c677d919eb0bfd0cdc7b29c87725443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374b6075889db3bcab98826d5a4835200d0000000000000000000000000000000000001b30455b70859ab0c5d5c0ab95806b56402b1601000000000013283e53687d93a8bdd2c8b29d88735d3a291704000c21374c61768ca9bacdd2bca7927d675236251306070d1b2c3d4e64798ea7b8cccebbaa917c66513c26110000000000000000000000000000000000081d3144556062626262626262626262626262626262626262626262615746321e0900000d23384d62788da2b7bda7927d68523d281300000000000000000c1c2a394654606978828b959ba3a4a7a8a7a5a79e9890857b686050433322120000000000152a3f546a7f94a9bfd4ccb8a78d786254535560697a889da7b3b0b5c1d2d2bda8927d68533d281300000000000c1a262e313535353535353535353535353535353535353535353535352c292217080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b111316161616161616100e0800000000000000000000000000000000000000000000000000000000000000000000000c1c2d3d4d5f6b8095a1b3c2b8b8b49f8a75604b35200b00000000000000090f111313131313120e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566a7f94a7b9b49f8b78624d3b2b18050000000000000000000000000000000000192e43596e8398aec3d6c1ac97816c57422c1702000000000011263c51667b91a6bbd0c9b49f8a745847331f0a000c22374c61778ca1c6d6d0bba6907b66513b26110000000f21364a5c73889eb3c8d8c8aa95806b55402b16000000000000000000000000000000000001152737444b4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b463928160300000d23384d62788da2b7bda7927d68523d28130000000000000000000c1b2936434a5a626d7880868b8f919392908e88837b70655d4e42332515040000000000162c41566b8196abc0d6c8b39e89735a4837444b5c6479899eaabbc9d2dfd5bfaa95806a55402b1500000000091a2b3842464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a413e342717050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30414b60728399a4a3a3a3a3a98c77624d37220d000000000004121d24262828282828282321190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384b6176899eb3bbaa97816c594834200c0000000000000000000000000000000000172c42576c8197acc1d6c3ae98836e59432e1900000000000010253a50657a8fa5bacfcebbaa8c76614c37210c000b20364b60758ba8b9ccd1bca7917c67523c2712000000071a2d3d5a6f8499afc4d8c3ad98836e58432e190300000000000000000000000000000000000919273135383838383838383838383838383838383838383838383632281b0b0000000d23384d62788da2acaca7927d68523d2813000000000000000000000b1825303c484d5a626a71767a7c7d7d7b79746d665e4f4b3f31241507000000000000162b40566b8095abc0d5c7b29d88725d3c2b313e4a5b657b8c9fb4c3d3e6d7c2ad97826d58422d180000000013263849555b60606060606060606060606060606060606060606060606057514534220f00000000000000000000000000000000000003090b101315151514110d0c06000000000000000000000000000000000000000000000000000000000000000000040a0c101111110b09030000000000000000000000000000000000000000000000000000000000000001121c3043546176868d8d8d8d8d8d8d7a654f3a25100000000000122230383c3d3d3d3d3d3d38352c1e14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576a8095a8b9b49f8a77624c3a2a170400000000000000000000000000000000152a3f556a7f94aabfd4c5b09b85705b3a29170400000000000f24394e64798ea3b9ced8c8a28d78634d38230e00081d31445574899eb3c9d3bda8937e68533e291300000000182d42586d8297adc2d7c4af9a846f5a452f1a0500000000000000000000000000000000000009151d2023232323232323232323232323232323232323232323211e160b000000000d23384d62788d97979797927d68523d2813000000000000000000000008131c2b353c484d5558616567686766636054514c40372e21140600000000000000142a3f54697f94a9bed4c8b39d88735443301d2d3d4b5d6b8096a5b6cadfdac5af9a85705a36261401000000192e425567707575757575757575757575757575757575757575757575756c63513e291500000000000000000000000000000000080a161e2125282a2b2a29262320190e0c0600000000000000000000000000000000000000000000000000000000010c171f2125262626211e160a0000000000000000000000000000000000000000000000000000000000000001142636465861767878787878787975614b36210c00000000091d30404c515353535353524d493c312414000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729394c61778a9eb4baa996806b5847331f0b0000000000000000000000000000000012273c52677c91a7c9d9c8b39d88735846331f0a00000000000e23384e63788da3b8cdcdb8a38e78634e39230e00021527375b70859ab0c5d6c1ab96816c563d2d1a07000001172c41566c8196abc1d6c5b09a85705b45301b060000000000000000000000000000000000000001080b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c090300000000000c21374c61768182828282817b644f3a250f000000000000000000000000000e19202b34383a464c4f525352504e4b4336382f221b1002000000000000000013283d53687d92a8bdd2cab49f8a75604b35201f2f3f4b6075879db2c3d4dcc7b29d87725443301c080000001b31465b70858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816c57412c17020000000000000000000000000005101b222832363a3e3f403f3e3b38352c23211a0f050000000000000000000000000000000000000000000000000008141c2a33373a3b3b3b3632281b0a000000000000000000000000000000000000000000000000000000000000000818293a47586163636363636363615746321e0a000000000f24384c5e66686868686867635b4e42311e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3347586b8196a9bab49e8976614c392916030000000000000000000000000000000f24394e64798eabbccfcbb8a68b76614c36210c00000000000d23384d62788da2b7cdceb9a38e79644e39240f0000162c41566b8196abc3d4c6b19b86715b4a3621140a0407172939576d8297acc2d7c4af99846f5a442f1a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758616c6c6c6c6c6c645c4b37220d0000000000000000000000000000050d1920222933363a3c3e3d3b39353026241c12080000000000000000000011263b51667b90a6bbd0cebbaa8c77624d3722111e324556687d92a5b7cadfc9b49f8a75604b35200b000000192e43586e83989f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f99846e59442f19000000000000000000000000000d18202e3738454b505355555453514d493c39362c20190d0000000000000000000000000000000000000000000000081826303a474c505151514b4539281603000000000000000000000000000000000000000000000000000000000000000b1b293a474c4e4e4e4e4e4e4e4b46392916030000000011263c51667c7d7d7d7d7d7d7868604e3c2b1906000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4d62778a9fb4b9a8957f6a5746321e0a0000000000000000000000000000000b21364b60758b9fb4cad5c4a48f79644f3a240f00000000000d22374d62778ca2b7cccfb9a48f7a644f3a250f000010253a4f657a8fa5b6cacab59f8c79634e4131211f171a213346576f859aafc4d7c2ad97826d58422d1803000000000610161820202020201f1b110f0a0000000000000000000000000000000000000000000000000000000000000000000004172a3a474c5757575757574f4b3e2e1b0800000000000000000000000000000000050b0d171f21252728282624201c1408090000000000000000000000000e24394e63798ea3c5d6d8c8a48f7a644f3a250f1628384b6074879db2c7dccebbaa8c77624d37220d000000162b41566b8096abb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b19b86715c3a29170400000000000000000000010f1d2b343f4b4f566065686a6a6a6966625a564e493d342b1d1205000000000000000000000000000000000000000001142636434b586165666666605745321e0900000000000000000000000000000000000000000000000000000000000000000c1c293337383838383838383632291b0b000000000014293e53697e9292929292928c7e685a4935200f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000c203448596c8197aabbb39e8976614b382815020000000000000000000000000000091e32455671869bb1c6d2bda8927d68533d281300000000000d22374c62778ca1b7ccceb9a48f79644f3a240f00000b20354a6073879db2c1cfbcab98836e5f4e423633292d36404b61768a9fb4c9d1c0a9937e69543e2914000000000a18232b2e3535353535343027241d12040000000000000000000000000000000000000000000000000000000000000000000c1c2a33374242424242423a372e20100000000000000000000000000000000000000000040a0c10121312110e0b080100000000000000000000000000000c21364b61768ba7b9ccd1bca7917c67523c27120a1d3144556a8095aac4d5d8c8a48f7a654f3a251000000013283e53687d93a8bdcecacacacacdc4c0bebebebebebebebebebebeb39e89745846331f0a000000000000000000010f1f2c3b484d5d646e757a7d7f807f7e7b78736c635b4d483b3023150000000000000000000000000000000000000000081c304354606b777a7b7b7c75604b36210b0000000000000000000000000000000000000000000000000000000000000000000c171f2123232323232323211e160b0000000000000b20354b6074869ca8a8a8ab9f8b78624d3d2c1a06000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4d62788b9fb4b8a7947f695645321d09000000000000000000000000000003162838576c8196acc7d8c2ad97826d583c2b1906000000000d22384d62778da2b7ccceb9a38e79644e39240f0000071c304354687d92a3b5c4c9b2a0927d6860514c463a3d4a4e5e6a7f95a9bacdc9b4a28d78634d38230e000000061828363f434a4a4a4a4a49453c39302216080000000000000000000000000000000000000000000000000000000000000000000c171f212d2d2d2d2d2d25221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465774899eb3c9d4bea9947f69543f2a14011527374d63788da6b8cbd1bca7927c67523d27120000000e23384e63788d9fb1c3d4e5e0cdbcb0aba9a9a9a9a9a9a9a9a9a9a9a9a78b76614c36210c0000000000000000000f1f2c3d4959626e7a838a8f9394959493908d8881796d62594d41331c130800000000000000000000000000000000000417293a4b6072808a8f90908a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0c0a0300000000000000081d314455667c91a2b4c9baa997826d5b4935210f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2035495a6d8298abbcb39d8875604b37271501000000000000000000000000000012273c52677c91a9bacec7b29c87725a4835200b000000000e23384e63788da3b8cdd7c7a38d78634e38230e0000001325364b6073859ba6b7c4beb49f8c7e706761585b5c5b636c7c8c9fb4c7cfbcab9a84705a4935200c00000010233646535860606060605e5b514d4034261605000000000000000000000000000000000000000000000000000000000000000000040a0c1717171717170f0d08000000000000010a1012202020202020201e1a110f0a0000000000000000000000000000000000000000000000000000031729395c71869cb1c6d6c1ac96816c57412c1700092035495a73889db3c8d4bfa9947f6a543f2a150000000c2135495b6d8297a5b7c7d7d8c4b09e96949494949494949494949494948e79634e39240e000000000000000009192c3d495b6377828f999fa9a8aaaaa9a8a6a69d968c8278675f504430251808000000000000000000000000000000000a1f3346586b80969fa9a69a85705544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374d5e70859ab0bec7b49f8c79634e3e2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4e63798c9fb5b7a6937e685544311d0800000000000000000000000000000c21364c61768a9fb4c9cab6a48d78624d382311000000000f253a4f647a8fa4b9cfcdbaa98c76614c37210c000000081c3043546278889da6b4c0bbaa9f93857c767271717379818d9faabbc9bbb49f8c7a644f3c2c1906000000162b3f53646d75757575757470665e5144342313000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121d252735353535353535342f27241d1202000000000000000000000000000000000000000000000000001a2f44596f8499aec4d9c3ae99846e59442f190006192c3c5b70869bb0c5d7c1ac97826c57422d17020000061a2c3d4c6176879da9bacdd6c0ab96807f7f7f7f7f7f7f7f7f7f7f7f7f7f78624d38220d0000000000000002152737495b63798798a0aeb4bac7bfbfbfbec4b7b2ab9f98897d6b624a43362513000000000000000000000000000000000c21364c61768a9fb4baaa95806b55372715020000000000000000000000000000000000000000050b0d1010101010100b09030000000000000000000000000000000000000000000000091930404f647a8fa0b2c7bbaa98836e5c4a3621100000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2136495b6e8399aec0b29d8774604b36251300000000000000000000000000000a1f3346586f8499afc5d3c3a9947f69543f2e1c0800000012273c52677c91a7bcd1c9b49f8a745847331f0a00000001142636485a647a889aa2b1b6bbb4a29b918b878686888e979fabbbc2b5b19d947f6a5c4b371e0e00000000182e43586d828a8a8a8a8a89857c6b625141311c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122330393c4a4a4a4a4a4a4a49443c39301d150a000000000000000000000000000000000000000000000002172c42576c8197acc1d6c6b19b86715c3929170300192e43596e8398aec3d8c4af99846f5a442f1a000000000e1f334758647a8b9fb4bdcdc5b09b857569696969696969696969696969625a4835200b00000000000000081d3144556379899da6b2bec9cecac1b9b6b5b6bbc9bcb5a79e91806c605443301c0c00000000000000000000000000000011273c51667c91a8babcab907b66503b261100000000000000000000000000000000000000000e192022252525252525211e160a00000000000000000000000000000000000000000000001222374b5c6e8398a9bac8b59f8d79644e3e2e1b080000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4f647a8ea2b3b6a5927d675443301c07000000000000000000000000000417293a52687d92a7b9ccc6b09b86715d4b372312000002152738556a7f94aabfd4c6b19c86715c3a2917040000000008182b3c4a5c647784919ca4b0b4b4b0ab9f9d9b9b9ea7acb5bcbcb5a49c8f7f6a61503e2e1b00000000000d22374d62788a9f9f9fa79e9a91806b604e3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d30414d52606060606060605e5a514d4031271a0a0000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4c8b39e89735746331e0a01162b41566b8096abc0d5c6b19c87715c3a2a17040000000417293a4a5c677d929fb0c0c8b4a397816c6054545454545454545454544d483c2b1905000000000000031628394b6074859ba7b7c4cfc8bbb4aca4a09fa1a5adb4bab9b39e958172604a3a2917040000000000000000000000000002162838566b8096abc6b49f8b76614c36210c000000000000000000000000000000000000000e1e2b35383a3a3a3a3a3a3632281a0a00000000000000000000000000000000000000000000071b2e3e4d63788b9fb4c5bcab99836f5c4b3722110000000000000000000000000000000000000000000000000000000000000000000000000000000000000f22364a5c6f849aafc0b19c8673604a35201100000000000000000000000000000b21364b6075899eb3c8c9b5a38f7a655041301d0d00091d3145566e8499aec3d8c3ae98836e59432e190000000000000d1d2d3e4a5962707c868f9aa2b4c9bcb4b2b0b1b3b8c5cabcab9f93867b6a61504333201000000000000b203448596a7f95a5b7b9b3b09e927d685847331f0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f6775757575757575736f665e4b45382715020000000000000000000000000000000000000000000012273c52677c91a7bcd1ccb8a78b76614b36210c0014293e53697e93a8bed3c9b49e89745847331f0a000000000c1c2d3e4d5f6c8196a2b4c4c1b19f937e685c4b3b3f3f3f3f3f3f3f3f38352b1e0e00000000000000091e3246576a8095a3b5c5d4c5b9aa9f968f8b8a8c90989fa9b3bcaf9f97816c5847331f0a00000000000000000000000000091e32455670859bb0c5b19c86715846331f0a00000000000000000000000000000000000005192b3c484d5050505050504b453828160300000000000000000000000000000000000000000000102035495a6c8196a7b9c9b3a18f7a644f3f2e1c080000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e50657b8fa2b4b6a4917c6651402f1c0900000000000000000000000000091e3245576c8196aabbcec1af9a846f5f4d3b2b1c101020364b6075899eb4c9d4c4a9947e69543f29140000000000000010202d3b484d5f67727b859ab0c5cfcac7c4c2c4c7cacab59f8a7e74655d504333251504000000000005192b3b4b6075879db2c0c9bcb39e8976614c3c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c8d8a8a8a8a8a8a88847c6e605645311d12000000000000000000000000000000000000000000000f253a4f647a8fa4c8d8d6c5a38e78634e39230e0011263c51667b91a6bbd0cdb9a88c76614c37210c0000000000102030414b6073849aa6b7c7bdb49f8b7a64594837272a2a2a2a2a2a2220190e00000000000000000c21364b6175899eb3c1d2ccb9a79e8c817a7675777b828b9aa2b4baa99d8876614c37210c000000000000000000000000000b21364b60758a9fb4c1ac97816c573a2917040000000000000000000000000000000000000b2035485a62656565656565605645321e090000000000000000000000000000000000000000000006192c3c4c6176899eb3c3bfaf9a846f5d4b3723120000000000000000000000000000000000000000000000000000000000000000000000000000000000001023374b5d70859ab0c1b09b85715e4c38231000000000000000000000000000031628394d62788b9fb4c5c7b3a1917c6759483a2e2322304051667b90a8b9cdcbb7a68e79644f39240f0000000000000002101d2b3747586174818d9fb4cac6b9b4afadaeb1b6c2bcab9f8d8277675f4e423122120000000000000d1e324556677c91a2b4c9ccb8a796816b5a49352010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f6a7f949f9f9f9fa79e99918274604b41301e0e0000000000000000000000000000000000000000000d22374d62778caabbced0bba6907b66513b2611000f24394e64798ea3c6d6d7c6a48e79644f39240f000000000002131d3144556177879da9bacdbaa99d8877625544311d14141414140d0b0500000000000000000215273853687e93a7b9ccd0bfb39e897a6c64616061666d7884959faa9f8b7a645847331f0a0000000000000000000000000010253a4f657a8fa9bac4a7927c67523d2712000000000000000000000000000000000000000d22384d62787a7a7a7a7a7b74604b36210b00000000000000000000000000000000000000000000000e1f334758697f94a5b7c7b4a28f7b6550402f18080000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f51667b90a3b5b5a3907b65503f2e1b08000000000000000000000000000a2035485a6c8197a7b9ccbfb39d887862584b3e38373e4c5e70849aafc6d6c9b29d8873604a35200b0000000000000000081d314455617685979fabbcbbb4a89e9a98999ca4adb2bcab9f98897d69604e40301d0d0000000000031628384d5f70849aabbccfc5b49f8b78634d3f2e18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d304150616d8197a2b3c2b8b3afa096816c5f4d3c2c1a0a00000000000000000000000000000000000000000b20354b60758a9fb4cad3bda8937e68533e2913000c21364c61768ba8b9ccd1bba6917c66513c2711000000000000011527374759647a8b9fb4bdc7b7a69a8474604b423120100000000000000000000000000000091d31455670859ab0c5d6c7b3a1907c665c4f4b4a4c505a6272808c958c7d675c4a3a29170400000000000000000000000000132536546a7f94a9c7b7a68d78624d38220d0000000000000000000000000000000000000013283e53687d8f8f8f8f8f8f7a654f3a2510000000000000000000000000000000000000000000000004172a3a4b6075879db2c1c0b09b85705e4c3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000001124384c5e71869bb1c1af9a85705d4b37220f0000000000000000000000000006192b3c4c6277899eb3bfcbb8a69c8676645c524e4c4f5c667c91a2b4c8cfbcab96816b5443301c0700000000000000021628384b6073859ba3b4bcbbaa9f9589848384878e98a0adbcb4a79e8d7e695e4c3b2a180500000000000a1a30414e647a8c9fb4c6cebaa998836e5d4b36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122333434b6073849aa4b5c4c8beb19f917d675a493828160200000000000000000000000000000000000000081c30435472889db2c7d5c0ab95806b56402b16010a1f33465874899eb3c9d3bea9937e69543e29140000000000000009192a3b4a5c687d929fb1c0c4b4a297816c604e3e2e1d0d000000000000000000000000000b20364b60758a9fb4c9d9c4af99846f5e4c3e3635373c4954606a7a807b675f4d3e2d1c0c00000000000000000000000000071c3043546f8499aec4b29d88735a4835200b0000000000000000000000000000000000000010263b50657b90a5a5a5a5927c67523d27120000000000000000000000000000000000000000000000000c1e324556677d92a3b5c8b4a2907b665443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000091d2f4052677c91a4b6b4a28f7a644f3e2d1a07000000000000000000000000000e20344859687e93a1b3c2c4b5a49c877a6e676362646c7a899eb3c0d1c7b59f8c78634e3625130000000000000000091e324556697f94a3b4c1c1b49f8c7f756f6d6f727983939cadbcb8ab9f8d7c665948341f0c0000000000001322364a5c6d8297a8b9ccc7b2a08f7a655443301c0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005151d3144556176869ca6b8c6cebdb39e8978635645321e1301000000000000000000000000000000000000011426365b70859ab0c5d8c2ad98836d58432e18000417293a5c71869cb1c6d6c1ab96816c56412c1701000000000000000c1d2d3e4e606c8197a2b4c4c0b19f927e685c4a3b2a19090000000000000000000000000f253a4f647a8fa9bacdd6c6a7917c6752402f2120222c36434b5c646a655d4d4130201000000000000000000000000000000b20354a6074899eb3c3ad98836e583c2b1905000000000000000000000000000000000000000e23384e63788dabbcbaaa947f6a553f2a15000000000000000000000000000000000000000000000000021628384a6072859bb0c6c0b09b8572604a3626140100000000000000000000000000000000000000000000000000000000000000000000000000000000001220354b6073879cb1c0ae99846f5c4a36210e0000000000000000000000000005182b3b4a60728399a4b6c3c2b5a59d8f837c78777a818b9ea7b9cccdbaa998836e5b4935180800000000000000000b21364b6075889eb3c1c8b4a3937e6a605658595b636e7e939eb0c5bcab9e8977624c3a2a17040000000000071b2d3e4c6177899eb3c2cfbeb09b8572604a382816020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115273746586278889da8bac9ccb9a89b8574604b41301f0f00000000000000000000000000000000000000182d43586d8298adc2d7c5b09a85705b37261401001a2f44596f8499aec4d8c3ae99836e59442e19000000000000000000102031414b6074849aa6b7c7bdb49f8b7a64594737271502000000000000000000000012273d52677c92a7c7d7cdb9a88c77624d3722120b0e1826303e4a4f554f4b3f3023130200000000000000000000000000000e23394e63788ea7b8c6a8937e69533e291400000000000000000000000000000000000000000b20364b60758a9fb5c1ac97826c57422d17000000000000000000000000000000000000000000000000000a1c304354667b90a6bbc9b5a3917c665443301c090000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354687d92a5b7b3a18e79644e3d2c1a06000000000000000000000000000d1c3043546175869ca5b5c2c3b7b2a199928d8c8f969fa9b9c5cfbeb49f8b79634d3d2c1a00000000000000000011263c51667b91a7b8ccc5b09b8570604b45383d494e606b8196a6b8c9b9a797816c5847331f0a000000000000101f344759697f94a4b6cac9b5a3917d675645321e0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919293a485a647a8a9fabbccfc6b5a397816c5f4d3d2c1a0a000000000000000000000000000000000000162b40556b8095aac0d5c7b29d88725544311d0802172c42576c8197acc1d6c6b09b86715b39291603000000000000000002131d3144556277889da9bacdbaa99d8777625544311d13020000000000000000000014293e53697e93a8bed3c9b49e8974594834200b000008141c2d3639403a372e21130500000000000000000000000000000013283e53687d93a8c5b9a88e79644e39240f0000000000000000000000000000000000000000091d32455673889db3c4af9a846f5a362513000000000000000000000000000000000000000000000000000013253652687d92a7bdd2c1b19c8673604b3727150100000000000000000000000000000000000000000000000000000000000000000000000000000000011426364b6074879db2bfad98836e5b4935210d000000000000000000000000000013253646576278879ca4b2bec9bfb3aea7a3a1a4abb4bac7cdbeb2a0947e695b49351f0e000000000000000001162c41566b8196abc5d5bda8937e68534232282c35424b6175889eb3c8c5b49f8a76614c37210c00000000000004182a3b4b6074869cb1bfd0c1b29d8775604b3a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2b3c4a5c667c8d9fb4bdcec1b19f927d675b4938281603000000000000000000000000000000000013283e53687d93a8bdd2cab49f8a75604b35200b00142a3f54697f94a9bed4c8b39e89735746321e0a000000000000000000021527374859647a8b9fb4bdc7b7a69a8474604b4131201000000000000000000000152a40556a7f95aabfd4c8b29d88735d3b2b180500000001101b22242b25231c110300000000000000000000000000000005182a3b586d8298adc2b39e8975604b35200b0000000000000000000000000000000000000000021528385b70859bb0c5b19c87725443301c07000000000000000000000000000000000000000000000000071c3043546e8398adc3d8c9b6a4927d675544311d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455697e93a6b8b49f8c78634e3c2b19050000000000000000000000000008182939485a62788698a0b1b5c2c9c3bcb8b7b9c1c9ccc7bab4a098826d614f3c2c19000000000000000000041a2f44596f8499aec4ceb9a48e79644f3924161a213246576b8196abc9cebaa9937d68533e2813000000000000000c1d314455667c90a1b3c8cab7a5947f6a5947341f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2d3e4c5e697f949fb1bfcebdb49e8a79635645321e13010000000000000000000000000000000011263b50667b90a5bbd0cebbaa8d77624d38220d0012273c52677c91a7bcd1ccb8a78b76614b36210c0000000000000000000009192a3b4b5c687e939fb1c1c4b4a296816c5f4e3e2d1c0c000000000000000000152b40556a8095aabfd5c8b29d88735d372715010000000000070d0f15100e0800000000000000000000000000000000000b1f34485972879cb2c4af9a846f5544311d08000000000000000000000000000000000000000000192e43586e8398adc3b49f8975604a35200b0000000000000000000000000000000000000000000000000b20354a6074889eb3c8ddd3c2b29c8774604b3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000021527374b6075889db3bcab97826d5a4834200c00000000000000000000000000000b1b2b3c485a627582909ca4aeb4bac7c1c2c3c1c6b9b3a99f948273604b43321e0e000000000000000000061b30465b70859bb0c5ccb7a28d77624d38220d0616293950657a8fabbccfc7ad98836e58432e1900000000000000021527374c5e6f8499aabbcec3b39e8977614c3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102030404f616c8197a1b3c1cdb9a89c8675604b41311f0f000000000000000000000000000000000e23394e63788ea3c5c8c8c8a48f7a654f3a2510000f253a4f647a8fa4c7c8c8c5a38e78634e39230e00000000000000000000000d1d2e3e4e606c8197a3b4c4c0b09f927d685c4a3a2a19090000000000000000142a3f54697f94a9bed4c9b49e89745544311d0800000000000000000000000000000000000000000000000000000000000d22374c62778ca5b6c8aa957f6a5537261401000000000000000000000000000000000000000001162b40566b8095abc0baa98c77624c37220d0000000000000000000000000000000000000000000000000f24394f64798ea7b8cce0dfcab6a5927d685645321d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566a7f94a7b9b49f8b78624d3b2a180400000000000000000000000000000e1e2b3c4857616d7b8690999fa9a9acadadaca9a89e968a7f7260554431241400000000000000000000061b30465b70859bb0c5cdb7a28d78624d38230d000c21364b61768b9fb5cac7b19c87725c372715010000000000000009192f404e63798b9fb4c5ccb9a897816c5b49352111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002122232434b60738399a3b5c4c6b5a497826d5f4d3d2c1b0b0000000000000000000000000000000c21364b61768ba7b2b2b2b2a7927c67523d2712000d22374d62778ca9b2b2b2b2a5907b66503b2611000000000000000000000000102031424b6074859ba6b7c8bdb49f8b7a645947372715010000000000000013283e53687d93a8bdd2cdb9a88a75604b35200b000000000000000000000000000000000000000000000000000000000012273c51677c91a6c3bbaa907a65503b251000000000000000000000000000060c0e0e0e0e0e0e0e13293e53687e93a8bdc7a48f79644f3a240f0e0e0e0e0e0e0e0e0b090200000000000000000000000003162839546a7f94a9c5d5e2dfd3c3b29d8774604b3928160300000000000000000000000000000000000000000000000000000000000000000000000000000000031628384c6176899eb3bbaa96816c5947341f0b0000000000000000000000000000000e1e2b39464b5d65737b838a9093969898979490898178696054443727150600000000000000000000041a2f44596f8499aec4ceb9a48f79644f3a240f000a1e32465774899eb3c9c9b49e89745544311d080000000000000000122135495b6c8196a7b8ccc6b49f8b79634e3f2f1808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004141d3144556175859ba6b7c6c2b19f927d675b493928160300000000000000000000000000000a1e32465773899d9d9d9d9d9d947f6a543f2a15000b20354a60748a9d9d9d9d9d9d937e68533e291300000000000000000000000002141d3145566277889daabbcdbaa99d8777615544311d130200000000000010263b50657b90a5c5d5d6c6a28d78624d38230d0000000000000000000000000000000000000000000000000000000003162839566b8196abc0b49f8a76604b36210b0000000000000000000000010f1a212324242424242424263b50667b90a5bbbca7917c67523c27242424242424242424201d150a0000000000000000000000091e32465770859aafc5d8cecacecbb7a5937e695745321e0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576b8095a8b9b49f8a77614c3a2917040000000000000000000000000000000e1b28323f4c5460666e757a7e818283827f7b756c62594a4336271909000000000000000000000001172c41566c8196abc8d8bda8927d68533a2a170406192c3c5d73889db2c8cdb9a88a75604b35200b0000000000000000061a2c3d4c6176889eb3c2cebbaa99836f5d4b3626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263746576277889da8b9c8bdb49f8a79635746321e130100000000000000000000000000031629395a6f8388888888888888806b55402b1600071c3043547084888888888888887f6a543f2a1500000000000000000000000101021527384859657b8b9fb4bec7b7a59a8473604b413020100000000000000d22374c62778ca6b8cbd1bca6917c67513c271200000000000000000000000000000000000000000000000000000000091e32455770869bb0c5b09b86705745321e0900000000000000000000000f1f2c35383939393939393939394e63788ea3c5bea9947f69543f393939393939393939393631271a0a000000000000000000000c21364b61768a9fb4c9c8bbb4bbc8c3b39d8875604b3929170300000000000000000000000000000000000000000000000000000000000000000000000000000000031729394c61778a9eb4baa995806b5846331f0a000000000000000000000000000000000b161e2f36434a50566065696c6d6e6c6a6560564d483b302518090000000000000000000000000012273d52677c92aabbcec2ad98836d5847331f18152035495a74899eb4c9cab49f8a75604b35200b0000000000000000000f1f334658687e93a4b5c9c8b3a1907b655443301c0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091929394859647a8a9eaabbcdbaa89c8675614b42311f0f00000000000000000000000000000b2d4154656f737373737373736b62503d28140000132536556670737373737373736a614f3c27120000000000000000080e10161616161a2b3b4b5d697e939fb1c1c3b4a296816c5f4d3e2d1c0c00000000000b2034485973889eb3c8d5c0ab96806b563e2d1b070000000000000000000000000000000000000000000000000000000b21364b60768a9fb4c1ab96816c563928160300000000000000000000061a2c3d494e4e4e4e4e4e4e4e4e4e4e60768ba6b8c1ac97816c574e4e4e4e4e4e4e4e4e4e4e4b453827150200000000000000000011263b51667b90a9bacebbaa9faab5c1b8a6947f6a5746331e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3347586b8196a9bab39e8976614c392816030000000000000000000000000000000003111825303538454b50545758585754504b4538342b1c130800000000000000000000000000000c22374c61778b9fb4c8c9b49f8a76614c42332a2a2e3c4d63788da8b9cdc8b39d88735443301c080000000000000000000417293a4b6073869cb1bfcfbfb19b8673604b392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2b3b4a5c667c8c9fb4bdc6b6a498826d604e3d2d1b0b0000000000000000000000000012253747545a5d5d5d5d5d5d5d55504433210d000008183848555b5d5d5d5d5d5d5d544f4332200c00000000000003111c23252c2c2c2c2c2c2e3f4e606d8297a3b5c4c0b09e927d675c4a3a2a19090000000005182b3b586d8398adc7d7c6b19c86715c4a36220f00000000000000000000000000000000000000000000000000000010253a50657a8faabbc3a6917c67513c271200000000000000000000000c2135495b63636363636363636363636373889eb3c4ae99846f636363636363636363636363605645311d09000000000000000005192b3b566c8196abc7cab49f8b9ba3b5c4b39e8976614c3a2a17040000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4d62778b9fb4b9a8947f6a5745321e0a00000000000000000000000000000000000008131c202832363b3e414343423f3b36312720190d000000000000000000000000000000000a1f3347586e8399aabbcdbaa997816c604c473a3f3f4b5a6a7f95aac6d6c9b09a85705b36261401000000000000000000000c1d314455657b90a1b2c7c9b5a3927d685745321e0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0e1d2d3e4c5e687e939eb0bfc2b2a0927d685b4a3929160300000000000000000000000008192937414548484848484848403d332616040000001a2a384246484848484848483f3c3225150300000000000011212e373a4141414141414141424b6074859ba6b8c8bdb49f8a7a645847372614010000000012283d52677d92a9bacdc9b5a48e79644f3d2c1a0600000000040a0c14110f09000000000000000000000000000001142636556a7f94aac8b6a58c77624c37220d00000000000000000000000e23384e6378797979797979797979797979869cb1c6b29c867979797979797979797979797974604b36200b00000000000000000b2034485972879cb1c7c5b09a84859bb0c4b8a795806a5847331f0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000c203448596c8297aabbb39e8875604b3827150200000000000000000000000000000000000000070b161e2125292c2d2e2d2a25201d150a05000000000000000000000000000000000004182a3a4e63798b9fb4c2c7b19f937e6d61585655565d65788a9eb4c9cfbcab947f6a543f2a150000000000000000000000011426374b5d6e8399a9bacdc1b29d8875604b3b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e1920222b3538404e606c8196a1b3c1beb49f8a79635746321e13000000000000000000000000000b19252d2f333333333333332b28211608000000000c1a262e30333333333333332a27201507000000000000081c2e3f4b4f56565656565656565656566278889eaabbcdbaa99d8776615544311d0e000000000c21374c61768a9fb4c9d2c2ac97816c5b493521150400000c181f222926231c1103000000000000000000000000081c3043546f8499afc4b29c87725948341f0b00000000000000000000001d32475d72878e8e8e8e8e8e8e8e8e8e8e8e9ca4b6cab6a49c8e8e8e8e8e8e8e8e8e8e8e8e8e7a644f3a250f00000000000000000d22374d62778ca4b6cac2ad97827d92a6b7c5b39e8976614c3b2a18050000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4d62788b9fb4b8a7937e695645311d0900000000000000000000000000000000000000000003090b10141718191715100b090200000000000000000000000000000000000000000c2136495b6c8196a4b6c4bdb59f8d81776f6b6a6b707b879da8b9ccc5b49f8c78634d38230e00000000000000000000000009192e3f4d62788b9fb4c4cbb7a6957f6a594834200f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2b35383c484d4f515060728399a3b5c3baa99c8675614b41311e0e000000000000000000000000000812181a1e1e1e1e1e1e1e16140d040000000000000912191b1e1e1e1e1e1e1e15120c03000000000000000e23374b5d656b6b6b6b6b6b6b6b6b6b6b6b6b7a8b9fb4cac7b7a59a8473604b3c2c19060000000a1f3347586d8297adbecfc9b49f8b79634e43331f1811121c2a33373f3b382f22150700000000000000000000000b20354b6074899eb3c2ad97826d583b2a180500000000000000000000001a2f455a6f849aa3a3a3a3a3a3a3a3a3a3a3b1b6c2d3c3b6b2a3a3a3a3a3a3a3a3a3a3a3a3927d67523d2712000000000000000114263653687d92a8c2d3c9aa947f74879db2c5b9a896806b5948341f0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000d2035495a6d8298abbcb29d8774604b37261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4c6176869ca6b7c3bcab9f978b84817f81858f9da6b7c6c7b8a797826d5b4935210c00000000000000000000000000112035495a6b8095a6b7cbc4b49e8a77624c3d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000000000000000b1927313c484d565a62646665636075859ba5b7c6b6a498826d604e3c2c18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657b8081818181818181818181818180869cb1c7d4c3b4a295806a5b4935210c0000000417293a4e64798ea0b2c7cebbaa99836f625043342a2627303a474c54504c4033251505000000000000000000000e24394e63798ea7b9c5a8937d68533e2813000000000000000000000000182d42576d8297acb8b8b8b8b8b8b8b8b8b8c6cad3e0d3cac7b8b8b8b8b8b8b8b8b8b8b8aa947f6a553f2a1500000000000000081c3043546e8398adc3cfbcab917b697f94a7b8c6b49f8a77624c3c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4e63798c9fb5b7a6927d685544311d080000000006101618202020202020201916100600000000000000070b161e202020202020200e0c070000000000000000000000000000000f1f3346586278889da5b3bfbcb5aa9f999694969ba3b2b7c4c5b9a99e8978624d3c2c19060000000000000000000000000006192b3c4b6175889db3c1cdb9a897826d5b4a362112000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2937444b5a626c72777a7b7a78756f77879da8bac2b2a0927d685b493626140100000000000000000000000000000000000000000000000000090f11202020202020202016140e04000000000000000000000000000012273c52677c91969696969696969696969696969ca4b6caded0c0b49f8b78634d38230e000000000c22364a5c6e8398a9bacdc8b3a195806a614c473a3b3c404d586169665e50433323130200000000000000000013293e53687e93a8c5b8a78e78634e39230e000000000000000000000000152a3f556a7f94aab1b1b1b1b1b1b1b1b1b1b1b6c2d3d6c5b9b3b1b1b1b1b1b1b1b1b1b1ac97826d57422d18000000000000000b20354b6074889eb3c8cab59f8b776176899eb3c6baa896816c5a4835200e00000000000000000000000000000000000000000000000000000000000000000000000000000000000e21364a5b6e8399abbcb29c8774604b3625130000000a18232b2e353535353535352e2b23180a0000000008131c202c343535353535353524211a0f01000000000000000000000000000417293a485a63798799a1b1b6c2bbb4afabaaabb0b5c1cac1b4a79e8b7b655948341e0e0000000000000000000000000000000e1e324657687d92a3b5c9c6b49f8c79634e402f190900000000000000000000000000000000000000000000000000000000000000000000000000000818293a4655606b7881878d8f908f8d89847d7a899fb4c9beb49f8a79635443301c0d000000000000000000000000000000000000000000000004121d242735353535353535352b29211608000000000000000000000000000f253a4f647a8fa4ababababababababababababb1b6c2d3ddddcebaa996806b56412b1600000000071b2d3e4d62788b9fb4bfd0bfaf9e947f6e6159525051555e66777e7b6a615041302010000000000000000005182b3b586d8298adc2b39e8874604a35200b00000000000000000000000012273d52677d929c9c9c9c9c9c9c9c9c9c9c9ca4b6c5ccb9a79e9c9c9c9c9c9c9c9c9c9c9c9a856f5a45301a000000000000000f24394f64798ea7b8ccc6b19c8671586a8095a8b9c6b49f8b78624d3c2c190600000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4f647a8c9fb4b6a5917c675443301c0700061828353f434a4a4a4a4a4a4a433f362818060000081825303541494a4a4a4a4a4a4a39362d1f0f00000000000000000000000000000b1b2b3c4a5b637683929ca4afb4bbc8c0bfc0c1c8bbb4afa39b897c665d4b3b2b1900000000000000000000000000000000031629394a6072859babbccfbcab9a846f5e4c372614010000000000000000000000000000000000000000000000000000000000000000000000000114263646586173808b969da5a4a6a5a89e9a9288849aafc5cdbaa89b8573604b3b2a180500000000000000000000000000000000000000000000122230393c4a4a4a4a4a4a4a4a413d342616040000000000000000000000000d22374c62778ca9bac0c0c0c0c0c0c0c0c0c0c0c7c8c8c8c8c8c8c7af9a846f5a3726140100000000102035495a697f94a1b3c1ccbcae9d9482776d6866666a717c8894907f6a5f4d3e2e1b07000000000000000b2034485972879db2c3ae99846e5443301c070000000000000000000000000f24394f647a868787878787878787878787868fa7b8c9b39e89878787878787878787878787846f5a452f1a00000000000003162839556a7f94aac5d5c1ac97826c576176899eb4c7baa997826d5a4935200f00000000000000000000000000000000000000000000000000000000000000000000000000000000000f22364a5c6b80959fa9a99c8673604a35200b00102335465358606060606060605853463623100000132536434a565e606060606060604e4a3d2d1a0700000000000000000000000000000e1e2d3d4a5861727d86929a9faaa9acadadabaaaa9f9a908578665e4c3f2e1d0d00000000000000000000000000000000000b1c304354647a8d9fb5c6c9b3a2907b665544311d0b000000000000000000000000000000000000000000000000000000000000000000000000081c304354617684959fa9b2b6c3bbc6b9b4afa69e9aa2b4c8d7c6b4a2937e695947341f0e000000000000000000000000000000000000000000091d30404c51606060606060606056514434210e0000000000000000000000000b20354a60758a9fb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b29d87725544311d080000000006192b3c4a60728399a3b5c2cbbbaea0988a827d7b7c7f86919da69d917d675c4a36220d000000000000000d22374d62778ca5b7c7a9947f6954362513000000000000000000000000000d22364a5c6472727272727272727272727273899eb3c3ae98837272727272727272727272726f6554412d18000000000000091e32465770859aafc5d4c3a7927d6752586b8196a9bac7b49f8b78634d3d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4a6072808a929494917b66513c261100162b3f53646d757575757575756e64533f2b1601071c304354606b7375757575757575635b4a36210c0000000000000000000000000000000f1f2d3a47546068737c848b90949798989694918a847b70635a4c402f2111000000000000000000000000000000000000001325364b5c6d8298a8b9cdc0b19c8673604b392917030000000000000000000000000000000000000000000000000000000000000000000004182a3b4b60728399a2b4bac7cac7c6b9b4b2b2b4b3afb4c0d1e4d1c0b39e8977624c3c2b190500000000000000000000000000000000000000000f24394c5e6675757575757575756b62513d2914000000000000000000000000071c30435472879c9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d8a75604b35200b00000000000e1c3043546176859ba4b3bfcdbeb2a89e97929091949ba3b3b8b49f8a7a644f3a240f0000000000000012273c52677c91a7c3baa98f7a644f3a250f00000000000000000000000000071b2d3e4a4f5c5c5c5c5c5c5c5c5c5c5c5c71869bb0c6b09b86715c5c5c5c5c5c5c5c5c5c5c5a54473725120000000000000c21364b61768a9fb4c9cbb7a58d78624d4c62778a9fb4c8bbaa98826d5b4a3621100000000000000000000000000000000000000000000000000000000000000000000000000000000000101c304354606b777c7f7f7f7c66513c261100182e43586d828a8a8a8a8a8a8a826e58432e19021527374a607280898a8a8a8a8a8a8d79634e39240e000000000000000000000000000000010f1c2a36434a5560676f767b7f818283817f7c766f665e4d493c2f2212030000000000000000000000000000000000000008182e3e4d62778a9eb4c3c9b6a4937e685746331e0e000000000000000000000000000000000000000000000000000000000000000000000b1f3447596a7f94a1b3c0cdccbfb3afa89e9c9c9ea8aab4b9c6d1e0ccb9a797816c5a4835200a000000000000000000000000000000000000000011273c51667c8a8a8a8a8a8a8a8a806b56412b1601000000000000000000000000132536586e8288888888888888888888888888888888888888888888888877624d37220d000000000000132536465861778699a1b4bac6c6b9b4ada7a5a6aab1b5c1c5b8a89b86715b46311c06000000000003162839566c8196abc1b49f8a75604b36200b000000000000000000000000000010202d36394747474747474747474747596e8398aec3b39e8873574647474747474747474745413729190800000000000011263b51667b90a9bacec7b29d88725a4848596c8197aabbc8b49f8c79634e3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a596267696a6a665e4c38240f00162b40556b80959f9f9f9f9f9b85705b382715081d314455677d929ea79f9f9fab98836e5b4a36210c00000000000000000000000000000000000c18253037444b52586166696c6d6d6c6a666157504c40352c1e120400000000000000000000000000000000000000000010203448596a7f94a5b7cac2b39e8876614b3c2b19050000000000000000000000000000000000000000000000000000000000000000000c22374c61778a9eb4bfd0ccbcafa1998f898787898e959ea8b4c0d0d6c5b49f8b78624d38281502000000000000000000000000000000000000000f24394e64798e9f9f9f9f9f9f98836e59432e1900000000000000000000000000082b4053646e73737373737373737373737373737373737373737373737362594834200b0000000000000818293a4759617683949fa8b4bbc8c9c2bdbbbbbfc6c9bfb3a79e8a7a644f3a240f000000000000091e32465771869bb0c5b09a85705645321d09000000000000000000000000000002101b22243232323232323232323241566b8196abc0b8a78b76614b3632323232323232322f2d25190b00000000000005192b3c576c8196acc7d8c2ad98836d583c3b4d62788b9fb4c9bcab99836e5c4a3622100000000000000000000000000000000000000000000000000000000000000000000000000000000000081825303b484c52545454514c402f1d090013283e53687d93a8b5b5b5b29d88735645311d1528384b6074879db2b8c5b5b49f8c79634e3d2d1a0700000000000000000000000000000000000008131c2631353a464c50545758585655514c4639382f20190e000000000000000000000000000000000000000000000005182b3b4b6075879db2c0cbb8a695806b5a483520100000000000000000000000000000000000000000000000000000000000000000061a2c3d566b8096a8b9cdd0c0af9e95837a7572727479808a9aa2b4c0d0cebbaa96816c5645321d09000000000000000000000000000000000000000c21374c61768ca8b9b5b5b5b09b86705b382816020000000000000000000000001024364653585d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d4d483b2b1805000000000000000c1c2a3a475861727f8a989faab0b4bbc8bcbcc5b9b3ada199897b645c4a36220d0000000000000c21364b61768a9fb4c9ab95806b563828150200000000000000000000000000000000070d0f1d1d1d1d1d1d1d1d1d293e53697e93a8bec5a38e78634e39231d1d1d1d1d1d1d1a181208000000000000000b2034485a72879cb1c7d5c5a8937e68533e35495a6d8298abbcc9b2a18e7a644f3f2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2b34373d3f3f3f3c382f2212000010263b50657b90a5c9dacab59f8a75604b36201d324556687e93a5b6cacebbaa98826d5b49351f0f00000000000000000000000000000000000000000009141d202933363b3f424343413f3c363329231c1106000000000000000000000000000000000000000000000000000d1e324556677c91a2b4c8c4b49f8a78624d3e2d1b07000000000000000000000000000000000000000000000000000000000000000c2135495b72879db2c6d7c7b4a295806f6560555d5b636b78849aa2b4c5d5c8b39e8975604b36200b000000000000000000000000000000000000000a1f33475874899eb4c9cac8b39d88735645321e0900000000000000000000000007182836404348484848484848484848484848484848484848484848484837342b1d0d0000000000000000000c1c2a3a4654606a78828b959b9faaa5a7a7a6a79e98908478645c4b3e2d1b0700000000000010253b50657b90aabbbcab907b66513b26110000000000000000000000000000000000000000070707070707070711263c51667b91a6bbbba6907b66513b261107070707070705030000000000000000000d22384d62778da4b6caccb8a78e79634e392c3c4e63798c9fb5cabfaf99846f5d4b372211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d182022272a2a2a26241d120400000e23384e63788dabbccfcfbcab8d78634d382328384b6074879db2c3d4c8b49f8c78634d3d2c1a010000000000000000000000000000000000000000000001080c171f21262a2c2d2e2c2a26211e170b09000000000000000000000000000000000000000000000000000000021628384d5f70849aaabbcdbaa998826d5c4a362212000000000000000000000000000000000000000000000000000000000000000e23384e63788da5b6cad7c6af9a8472604f4b443d4a4e596274849aa7b8ccccb8a7917c67513c27120000000000000000000000000000000000000004172a3a5c71879cb1c6dccbb8a68b76604b36210b000000000000000000000000000a18242b2e3333333333333333333333333333333333333333333333332220180d00000000000000000000000c1b2936434b5a626d777f858a8f909292908e89837b6f62594b3e2e201000000000000001142636556a7f95aac8b59f8b76614c37210c000000000000000000000000000000000000000000000000000000000e24394e63798ea3c5bda8937e68533e2913000000000000000000000000000000000114263653687d92a8c2d3c8b39e8974604a3520364a5b6e8399aec0c7b3a18f7a654f3f2f1c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d12141515110f09000000000b21364b60768a9fb5cadac9a5907a65503b25324556697e93a5b7cbcebbaa97826d5b49351f0f0000000000000000000000000000000000000000000000000000040a0c11141718181715110c0a030000000000000000000000000000000000000000000000000000000000000a1a30414e63798c9fb4c5c7b59f8d7a644f4030190900000000000000000000000000000000000000000000000000000000000012273c52677c91a7c3d3cdb9a8907b65544335312d363b48566277889eb3c5d6c5ac97826d573a2a1804000000000000000000000000000000000000001a2f44596f8499aec4d9d5c4a38d78634e38230e0000000000000000000000000000071017191e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0d0b05000000000000000000000000000b1826303c484d59626a7076797b7d7c7b78756e655d4d483b2e201002000000000000081c3043546f849aafc4b19c87715847331f0a000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8c0ab96806b56412b1601000000000000000000000000000000081c3043546e8398aec3d8c3ae99846e5443301c2d3d4f647a8fa2b4c8bfaf9a84705d4c382312000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889db3c8d2bda7927d68523d28394b6075889db3c3d4c7b49f8b78624d3c2c190100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001221364a5b6c8197a7b9ccbcab9a84705e4c37271502000000000000000000000000000000000000000000000000000000000014293e53697e93a8bed3c9b49e8975604b36251d1a212b384759697e93a7b9ccc7b29d87725847331f0a00000000000000000000000000000000000002172c42576c8197acc1d6d0baa5907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2b353b484c5557606466676766636055504b3f342b1d1002000000000000000b20354b6074899eb4c1ac97826c573a291704000000000000000000000000000000000000000000000000000000000a1e33465773899eb3c3ae98836e59432e19000000000000000000000000000000000b20354b6074899eb3c8d7c7a9947f695436251322374b5c6f849aafc1c8b4a2907b6550402f1808000000000000010a10121515151515150b090300000000000000000000000000000000000000000000000000000000000000000000000000021628385b70869bb0c5d5bfaa95806a5540324657697e94a6b7cbcebaa997826d5a49351e0e00000000000000000000000000020b0b0b0b090300000000060b0d12151513110c0a0400000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c6177899eb3c2c9b4a2917c665544311d0c0000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5c5b09b86705544311808070d1a2a3b4b6176899eb3c9cab7a58c77614c37220c00000000000000000000000000000000000000142a3f54697f94a9bed4d2bda8937d68533e281300000000000000000000000000000000000000060b0d1114151514130f0c0a0400000000000000000000000000000000000000000000000000000000010e19202b343739454b4f505252514e4b4437372e20190d0000000000000000000f24394e64798ea8b9c4a7927d67523d28120000000000000000000000000000000000000000000000000000000000031729395c71869bb1c5b09b86705b392816030000000000000000000000000000000f243a4f647a8fa7b8cccdbaa98f7a644f3a250f1b2e3e50657b90a3b5c9c0b09b85705e4c362513000000000005121d25272a2a2a2a2a2a211e160a00000000000000000002060706040100000000000000000000000000000000000000000000192e43586e8398adc3d7c2ad97826d5842394b6175889eb3c4d4c7b49f8b78624d3c2c190000000000000000000000050f1517202020201e180b09090e192023272a2a2926211f170c070000000000000000000000000000000000000000000000000000000000000000000000000f1f334758697e94a4b6cac0b29c8774604b3a29170400000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5c4af9a846f5a3726140000000d1e3246576e8399aec3d4c3a48f7a654f3a25100000000000000000000000000000000000000012273c52677c91a7bcd1d5c0aa95806b55402b1600000000000000000000000000000000040a0e19202327292a2a292825211f170d0b05000000000000000000000000000000000000000000000000000000050d1820222832363a3b3d3d3b39353127231c11050000000000000000000014293e53697e93a8c6b7a68d78624d38230d000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3b39e88735745321e09000000000000000000000000000003162939556a7f94aac5d5c9b49f8975604b36200b1023384c5d70859bb0c2c8b4a3917c665443301c0900000001122330393c3f3f3f3f3f3f3632281a0a00000000050b0d13181b1c1b19160f0b0801000000000000000000000000000000000001162b41566b8096abc0d5c4af9a856f5a3646576a7f94a6b8cbcdbaa997816c5a48351e0e000000000000000000000917222a2c35353535342d211e1d242b35383c3f403e3c373329201c1308000000000000000000000000000000000000000000070c0e0f0f0f0f0f0f0f0f0f0f0f182a3a4b6074869cb1becab6a4937e695847331f0e0000000000000000000000000000000000000000000000000000000014293f54697e94a9bed3c5af9a85705a3827150200000316283954697e94a9bed2bca7927d67523d2812000000000000000000000000000000000000000f253a4f647a8fa4c7d7d7c2ad98826d58432d180000000000000000000000000000010b171f212b35383c3f40403f3d3a3633292220180d05000000000000000000000000000000000000000000000000000000050b0d161e21242628272623201d150908000000000000000000000005192b3c586e8398adc3b39d88735a4935200c000000000000000000000000000000000000000000000000000000000001172c41566c8196abb1b1a68b76604b36210b00000000000000000000000000000a1e32465770859aafc5dac4af9a856f5544311d08081c2f3f51667c91a4b5c9c1b19b8673604a3726140100000a1d30414d525454545454544b4538281603040a0d182022282d3031312f2b25201c1408000000000000000000000000000000000013293e53687e93a8bdd3c7b29d877254434c6176899eb3c4d5c7b49f8a78624d3c2b1900000000000000000000051727343e424a4a4a4a4943363230393c484d52545553514c473a3530251810010000000000000000000000000000000000010f1a212325252525252525252525252525314455667b90a0b2c3c3b39e8976614c3c2c190600000000000000000000000000000000000000000000000000000012273c51677c91a6c5d5c6b19c86715645311d0900000012273c51677c91a6bcd1bea8937e69533e2914000000000000000000000000000000000000000d22374c62778ca9bacddac5b09a85705b3727150100000000000000000000000008141c2933363c494d5154555554524f4c463a37342b20190e010000000000000000000000000000000000000000000000000000000003090b0f111212110e0b0801000000000000000000000000000b2034485a72889db2c3ae98836e593c2c190600000000000000000000000000000000000000000000000000000000000014293e54697e939c9c9c9c8e78634e39230e00000000000000000000000000000c21364b61768a9fb4c8c8c6aa95806a5537271502001120354a6073869cb1c2c8b5a3917c675544311d0800001025394d5f676a6a6a6a6a6a605645321e0c181f222b34373e4245474644403a35302618110300000000000000000000000000000011263b51667b90a6bbd0c9b49f8a75604b586a7f95a7b8cccdbaa996816c5948341e0e000000000000000000000f2234455257606060605e584b45404d515a62676a6a68666158514a43362e1c140800000000000000000000000000000009171f2d36393a3a3a3a3a3a3a3a3a3a3a3a3a3a374c5e6d8298a5b7c6b8a796816b5a493520100000000000000000000000000000000000000000000000000000000e23394e63798ea7b8ccc9b49f8975604b36200b00000010253b50657a90a5bacfbfa9947f6a543f2a15000000000000000000000000000000000000000b20354a60758a9fb4c9ddc7b29d88725544311d0800000000000000000000000a1826303a464c555a6266696a6a6968646158554d483b352b1c1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778da5b7c6a9937e69543e29140000000000000000000000000000000000000000000000000000000000000010263b50657b8687878787867a654f3a2510000000000000000000000000000011263c51667b91aab2b2b2b2a8907b65503b26100000071c304354677d92a4b2b2b2b19c8673604b362614010012273c52677d7f7f7f7f7f7f75604b3621212a34373b484d53575b5c5b59564f4b43362f21150700000000000000000000000000000e23394e63788ea3c5d5cebbaa8c77624d6176899eb3c5d5c6b49f8a77624c3b2b190000000000000000000000152a3e52636c75757575736d60564c5e6671787c7f7f7e7b76706760544b3e3026180900000000000000000000000000051727343d4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f6176879da8b9c5b49f8b78634d3e2e1b0800000000000000000000000000000000000000000000000000000b20354a6073889eb3c8cdbaa98f7a644f3a291704000011263b51667b90a6bbd0bea9937e69543e291400000000000000000000000000000000000000071c30435472879cb2c7dccab49f8a75604b35200b000000000000000000000a1b2836434b58616a72787c7e7f7f7e7d7a76706a62594d483c3026180d000000000000000000090f11130b0802000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7c3b9a88e79644f39240f000000000000000000000000000000000000000000000000000000000000000e23384c5d65727272727272655d4b37220e0000000000000000000000000000172c41576c81969d9d9d9d9d9c8a75614b36210c0000001325364b607386989d9d9d9d9d927d685443301c0800192e43596e8394949494948d78624d3732363a474c535962686d7071706e6b6460544c3f33251507000000000000000000000000000c21364b61768ba7b8ccd8c8a48f7a64596b8095a7b9cccdbaa896816c5948341d0d0000000000000000000000172c42576c818a8a8a8a89827460616e7c868d91949593918a857c72645c4b43362719090000000000000000000000000f223445525b63646464646464646464646464646464646464647a8a9eb4c9baa998836e5c4b37220f0000000000000000000000000000000000000000000000000000071c3043546d8298adc2d3c7ab96816c5846331f150b0a17293953687d92a8bddac9a7927c67523d271200000000000000000000000000000000000000001325365a6f849aafc4d9cebbaa8d78624d38230d0000000000000000000a1a283945546069767f878d9194959594928f8b867f776d625a4b43362a1d0f01000000000004121c242628201d150902000000000000000000000000000000000000000000000000000000000000000003172939576c8196acc1b49e8975604b35200b00000000000000000000000000000000000000000000000000000000000000081c2f3f4c505c5c5c5c5c5c4f4b3f2e1b0800000000000000000000000000001a30455a6f84888888888888867d665746321e09000000081d3144556277838888888888888474604b35200b00172d42576c8297a9a9a9a7927c675548464b5159616970777d8285868684807a73655d504333251502000000000000000000000000091e32465773889eb3c8d1bca7927c6762778a9eb4c5d6c6b49f8a77624c3b2b18000000000000000000000000142a3f54697f949f9fa79e95806b7783919ba3a7a9aaa8aa9f9a91867a6a605444372719090000000000000000000000152a3e52636c797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7f94aabfc7b2a08f7a644f3d2d1a07000000000000000000000000000000000000000000000000000013253650667b90a4b6cac9b39e8976614c423127211f213346576d8297acc2cfbcab907b65503b26100000000000000000000000000000000000000000182d42576d8297acc2d7d9c8a58f7a65503a2510000000000000000003162838455760727e89959ca5a6a9aaaaa9a7ab9f9b948b82786a6054473b2d1f10030000000012222f383b3e3631271d150a020000000000000000000000000000000000000000000000000000000000000a1e33465771869bb1c4af9a846f5544311d08000000000000000000000000000000000000000000000000000000000000000011212f383b4747474747473a372e2110000000000000000000000000000000182d4155666f73737373737371665e4d39281603000000011527374859626e72737373737370605443301c0800142a3f54697f94a9c5bfb09b857362595761676e777e858b93979a9c9b99958f867b6a615043332010000000000000000000000000031628395b71869bb0c6d4bfaa947f75788399a8b9cdcdb9a896806b5947341d0d00000000000000000000000012273c52677c91a7c5b8b39d88778699a1b0b5c1bfbfc8bbb4afa39b8c7f726055443726140100000000000000000002172c41576c818e8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f949dafc2cfbeaf9a846f5b4a36210c00000000000000000000000000000000000000000000000000000b20354a6073869cb1c0ccb9a897826d604b4538363337434b6176899eb3c9cab59f8b76614c37210c0000000000000000000000000000000000000000152a40556a7f95aabfd4d2bca7927d67523d28120000000000000000081e324556607583939ea7b2b6c3bebfbfbec9bcb4b0aa9f988b7f7262594a3d2e2110000000091c2f404c51534b443732281e160a03000000000000000000000000000000000000000000000000000000000c21364c61768b9fb4c8aa95806a5537271501000000000000000000000000000000000000000000000000000000000000000003111c232632323232323225221b100200000000000000000000000000000012253748555a5d5d5d5d5d5d5c514d40301b0b000000000009192b3b484d595d5d5d5d5d5d5b4b4336261401000f253a4f647a8fa7b8c9b5a39983787272767c838b939a9fabacb0b1b0aeaba49c907f6a61503e2e1b07000000000000000000000000192e43596e8398aec3d8c2af9d948b8c99a1b3c6d2c2b49e8a77614c3b2a18000000000000000000000000000f253a4f647a8fa4c7cbb8a69d879ca4b2bcb5b3b3b4bbc8cac2b5aa9f958273605544311d13000000000000000000091f34495e74899ea4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4aaafbbccdcc7b4a28e79634e39240e0000000000000000000000000000000000000000000000000000071c304354677d92a2b4c6c6b19f937e6a60564e4b474c51616c8196a7b9ccc7b19b86715847331f0a000000000000000000000000000000000000000012283d52677d92a7bcd2d4bfaa957f6a55402a1500000000000000081830414b60748599a1b3b8c5cac9c0c9bcb5bcb8bcc8bbb4a99f948477645c4b3f2e1a0a00000f24384c5e666860554b453832281e160a03000000000000000000000000000000000000000000000000000010263b50657b90abbcbbaa907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000080e101d1d1d1d1d1d100e080000000000000000000000000000000000081a2a374145484848484848473c39302212000000000000000d1d2b34374348484848484845353026180800000b20364b6075889eb3c5c1b3a1998c87878a91999faab0b4bcc9c5c6c5c3c2b5b19d947f6a5c4b37220f000000000000000000000001162c41566b8196abc0d6ccbbafaaa0a2aeb3bfcfc8b5a4957f6a5847331d0d000000000000000000000000000d22374c62778ca9bacdc4b6a59da5b3afab9f9e9d9faab1b5c1c8bbb4a0988373604b41301d0d0000000000000000081d32485d72879db2b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9bfc2ccd9e3d0c0aa957f6a55402a150000000000000000000000000000000000000000000000000000001325364a6072859aa8b9c9bdb59f8d8074696360586166707f8d9fb5c5cebaa995806b553a2a1704000000000000000000000000000000000000000010253a50657a8fa5c8d9d7c2ac97826d57422d18000000000000011426364d5f6d8297a3b3bfccc6bab4aba4ab9faba2a7adb4babab4a29a877a655d4b382816030011263b51667c7d746860564b453832281e160b04000000000000000000000000000000000000000000000001152737556a8095aac9b49f8a76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a252d303333333333333127241d120400000000000000000d1820222e33333333333330201c1408000000091d3145566b8095a6b8cbbfb3ab9f9d9c9faaaeb4bbc8c9c2bbb7b6b9c2c6c9bcb49f8c7a644f3d2d1a07000000000000000000000014293e54697e93a9bed3d9ccc2bfb5b7c3c7cfcebbaa9c8675604b3a2a1800000000000000000000000000000b20354a60758a9fb4c9d4c3b6b2b4a199918b89888a919ba3b0bdcebeb2a196806b5f4d3b2b180500000000000000051a30455a6f859aafc4cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdc3ae99846e59442f19000000000000000000000000000000000000000000000000000000081c30435463788a9eabbcc9bcab9f95867f787674767c84949fabbccfc3b49f8b77624d37220d0000000000000000000000000000000000000000000d23384d62788daabbcedac4af9a856f5a362513000000000000081c304354677c919fb1c1cfc2b6a89f968f8c8a8b8d91989fa9b3bfb4a59d897b655645321e090011263b50667b90877e756960564b453932291f170b04000000000000000000000000000000000000000000081d3144556f859aafc9b09b86715746321e0a00000000000000000000000000000000000000000000000000000000020c12142020202020201f0c0a040000000000000000000000000000000000000000000000000812181a1e1e1e1e1e1e1c110f0a0000000000000000000000050b0d191d1e1e1e1e1e1b0b080100000000021527384c6177889eb3bbc8c9bcb5b2b2b4bbc8c9c7bab4ada6a2a1a4adb2becebbaa9a84705b4a36210c000000000000000000000011263c51667b91a6bbd0e2d0bfb3aeadb2b7c4cab49f8a78645c4a3d2d1e0e00000000000000000000000000071c30435472879cb2c7dccdb9a89e91847b767373767c85969fafbcccbfb09e927d6759483420100000000000000002182d42576d8297acb7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b19c86715c3a291704000000000000000000000000000000000000000000000000000000132536495a667c8d9fabbac7bcb5a49c948d8b8a8c919aa2b5bcc9c7b7a597826d594834200b0000000000000000000000000000000000000000000b20354b60758a9fb4cadcc7b29c87725443301c0700000000000b20354b6073869cb1becec6b6a49c8a807a767575787c838b99a1b3b9b7a79e8876604b36210b000e23384d63788d9d93887e756960574b463933291f170c04000000000000000000000000000000000000000b20354b6075899eb4baab96816b563929160300000000000000000000000000000000000000000000000000000006141f262935353535353534211f170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f344759667c919faab5c2c7c9c7c7c8c8bbb4afa99f98918c8b8e98a0b1bdc8b4a28e79634e39240e00000000000000000000000f24394e64798ea3c5d6dbc7b3a199989da6b4c0bbaa9d877a645b4a3c2b1c0c000000000000000000000000001325365a6f849aafc4d9c9b49e8a7c6f6661575761677381959eafbecdbcb39e8977624c3e2e1b0800000000000000152a40556a7f95a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29e89745846331f0a00000000000000000000000000000000000000000000000000000008182c3c4d5e687e8d9fa9b5c2c2b6b1a9a3aa9faaa6afb4c0cfc4b8a99d8776614c3b2b1805000000000000000000000000000000000000000000081d31445572889db2c7ddc9b49f8a75604a35200b000000000114263751677c91a4b6caccb9a89c86786b6561606063676e7883929ea7af9f8d7c675645321e09000b20364b60758a9fa69d93887f756a61574c463a33291f170c0400000000000000000000000000000000000f24394f64798ea8a9a99f8c79634e39230e000000000000000000000000000000000000000000000000000000021424323b3e4a4a4a4a4a4a493633291b0b00000000000000000000000000000000000000000000000000000000000000060c0d121416161513100c0a030000000000000000000000000000000000000000000004182a3a4c5e687e8c9ca4adb2b4bab4b2aeaa9f9a938a827c77767982979fb1c8c0aa95806a55402b1500000000000000000000000c21364c61768ba7b9ccd9c3ae998382889aa2b4c2b7a59d8979635a483a2a1a0a000000000000000000000000182d42576d8297acc2d6c0ab96816b5e514c46464b55606c8095a0b2c3ccb9a798836e5c4b37220f0000000000000012283d52677d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8b76614c36210c000000000000000000000000000000000000000000000000000000000e1e30404e60687d8a9ca4b3b8c5c7bec8bbb4bbc8c5c8cabfb3a69d8b7a645846331d0d00000000000000000000000000000000000000000000011527375b70859ab0c5dacebaa98c77624c37220d00000000081d3144556e8399aec2d3c9b39e8978625a4f4c4a4b4d525a626e7d89969a947f6a5f4d3828160300091d31455673889db2b2a69d94887f756a61584c473a332a1f180c0500000000000000000000000000000014293e54697e939494928a7e685b4935210c0000000000000000000000000000000000000000000000000000000c1f32424f536060606060605e4c463a291704000000000000000000000000000000000000000000000000000000040a0e192023272a2b2b2a2825211e160d0b0500000000000000000000000000000000000000000c1c2f404e5f687b8691979d9fa99f9d99938b857d766d666261646d8197aabbc3af9a846f5a36251300000000000000000000000a1e33465774899eb3c9d1bca7917c6d75849aa4b6c3b7a79d8878625847382818080000000000000000000000152a40556a7f95aabfd4c3ae98836e594036333237444b626e8298a5b7cac5b2a08f7a644f3d2d1a070000000000000b21364b60757878787878787878787878787878787878787878787878787878787878787873604b35200b0000000000000000000000000000000000000000000000000000000000122231424e5f677986949ea6b0b4bcc9c1c2c3c2c8bbb4afa199887a645c4a3a2917000000000000000000000000000000000000000000000000182d43586d8298adc2d7d8c7a48f7a644f3a250f000000000b20354b6074899eb3c9d4c3aa957f6a5a483c373536383c494d5f677781857e6a615040301a0a0000021527385a70859aafc4b7b3a69e94897f766a61584c473a342a20180d050000000000000000000000000011263b50667c7f7f7f7d7768604e3d2c1a0600000000000000000000000000000000000000000000000000000012263b4f606975757575757574615846331f0b00000000000000000000000000000000000000000000000000010c171f212c35383c3f40403f3e3a3632292220180d0500000000000000000000000000000000000000122231414e5d65737c8287898b8a88837e7770686157514d4c4f62778b9faeaeae9e88735443301c0700000000000000000000031729395c71869bb1c6d4bfa9947f6a6176869ca6b8c5b7a69c8676615645362614010000000000000000000012283d52677d92a7bcd2c6b09b86715b39291e1e2731434c6176879db2c3cfbfaf99846f5b4a362109000000000000091e3245566062626262626262626262626262626262626262626262626262626262626262605544311d08000000000000000000000000000000000000000000000000000000000004142431414d5b63737e88939b9faba9acadadacaaaa9f9a8f8378645c4a3e2e1c0c000000000000000000000000000000000000000000000000162b40556b8095aac0d5d1bca7917c67523c2712000000000f24394f64798ea7b9cccbb7a58d78624d3c2b212020232c35414d59616c706961504333221200000000172c41576c8196a6b4b9c5b8b3a79e948980766b61584c473b342b20190d0500000000000000000000000f23384c5e666a6a696762594e42311f0f0000000000000000000000000000000000000000000000000000000013253653697e8a8a8a8a8a8a8976614c39291703000000000000000000000000000000000000000000000009141d2933363c494d515455565453504b463937342b20190d000000000000000000000000000000000000041323313f4b5460666d72747675736e686159534c463937364759718699999999998b75604a35200b0000000000000000000000192f44596e8499aec3d6c1ac97816c586278889ea9bac4b6a49b8474605443301c150500000000000000000010253a50657a8fa5c8d9c8b39e88735746321e09151f334658677d92a5b6cac7b3a18e79634e37271501000000000003162838454b4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b4437271501000000000000000000000000000000000000000000000000000000000000061423303d4a556069757d858b91949798989795918b847b6f625a4a3e2e20100000000000000000000000000000000000000000000000000013283e53687d93a8bdd2d4bfa9947f6a543f2a150000000012273c52677c91a7c5d6c7b29d88725a4834272c2824201d20303b474c565a544f4333251504000000000e23384d637888969ea8b3b9c5b8b3a79e958980766b61594c483b342b20190e06000000000000000000091c2f404c50545454524d483b31241301000000000000000000000000000000000000000000000000000000071c3043546e83999f9f9f9fa7957f6a5746331e0b000000000000000000000000000000000000000000000b1926313a464c555a6267696b6b6a68656157544c483b342b1d140300000000000000000000000000000000000513212e36434b51585d5760605459534c473b363329222a3b556a7f83848484848375604b36210b0000000000000000000001172c41566c8196abc1d6c4af99846f5a5a647a8b9fabbcc2b4a2998372604b433223130300000000000000000d23384d62788daabbceccb8a78b76614b36210c0417293a4b6074879db2c9d0bfab96816b5544311d080000000000000a1a283236383838383838383838383838383838383838383838383838383838383838383531271909000000000000000000000000000000000000000000000000000000000000000005131f2d37444b57606870767b7f818283827f7c776f655d4d483c2e2010020000000000000000000000000000000000000000000000000010263b50657b90a5c9dad6c1ac97816c57422c170200000014293e53697e93a8bed3c4af9a846f5a4b4538413d39363127242a343741453f3b3224150700000000000c2035495a6376808a959ea7b3b8c5b9b3a89e958a80776c62594d483b352b20190e06000000000000000011222f383b3f3f3f3d37342b1d1306000000000000000000000000000000000000000000000000000000000b20354a6074889eb3b5b5c5b39e8976614b3929160300000000000000000000000000000000000000000b1b2937444b58616a72787c7f80807f7d7a76716962594d483b311e160b00000000000000000000000000000000000311182630353c4239454b4a43363e37342a211e170d283c50616a6e6e6e6e6e6e605645321e09000000000000000000000014293f54697e94a9bed3c6b19c87715c4b5c667c8d9fb4bdc0b2a196816c614f4130211101000000000000000b20354b60758a9fb4cad5c5a38e79634e39240e000c1d314455697e93abbccfc8b39e8874604b35200b000000000000000a161e2123232323232323232323232323232323232323232323232323232323232323201d150900000000000000000000000000000000000000000000000000000000000000000000010f19273139454b53586166696c6d6e6d6a666159504b3f352b1e100200000000000000000000000000000000000000000000000000000e23384e63788dabbccfd9c4ae99846f59442f1a00000000152a40556a7f95aabfd4c3ae98836e6260565a57534f4b4538393530252c3029271f140600000000000006192c3c4958616b768089949ea7b3b8c4b9b3a89e968a81776c62594d483c352c211a0f0100000000000004111c23262a2a2a282220180d0000000000000000000000000000000000000000000000000000000000000e24394e63798ea7b8cccaccb8a7947f6a5746321e0a000000000000000000000000000000000000000b1b2939465560697680878d9194959594938f8b867e776c62594e4232281b0c00000000000000000000000000000000000008141c20262d28323635302528221f180c0a030d20334350555959595959594b4538281603000000000000000000000011273c51667c91a6bbd1c9b49e897458474d5e697f949fb1bfbfb09f947f695f4d3f2f1f0f00000000000000081d31445572889db2c7d0bba6907b66513b261100011527374d62778c9fb5cacbb8a68f7a654f3a2510000000000000000003090b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b08010000000000000000000000000000000000000000000000000000000000000000000000000009151d2832363a474c51545758585755514c473a372e20190e000000000000000000000000000000000000000000000000000000000b21364b60768a9fb5cadcc6b19c87715c3a2a1704000000152b40556a8095aabfd5c5af9a847b7875726f6c68646056554f4a4336352b20190e0000000000000000000e1e2c3a474c58616b767f89949da6b2b7c4b9b4a89f968a81786c625a4d493c352c1f100200000000000000090f11151514120d0b050000000000000000000000000000000000000000000000000000000000000013253653697e93a8c5d5ded5c5b39e8875614b39281603000000000000000000000000000000000003172939465761737e89959da5a6a9aaaba9a8ab9f9b948a817868604b46392a1c0c00000000000000000000000000000000000001080b1118161e21201c13130c0b04000000031525333c404444444444443632281a0a0000000000000000000000000f24394f64798ea4c6d6cdb9a88c77614c404f616c8196a1b3c1bdb59f8d7d675d4b3d2d1d0d000000000000011527375b70859ab0c5d3bea8937e69533625130000092034485970859bb0c5d5c4aa957f6a55402a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a161e212933373c3f42434342403c37342a231c11060000000000000000000000000000000000000000000000000000000000091e32455673889db3c8ddc9b49e89745847331f0a00000014293f54697e94a9bed3c8b4a29a8f8d8a8784817d7975706a6460544d483c352b1e140600000000000000000e1c2a333a474c58616a757f88939da6b2b6c3bab4a99f968b81786d635a4e493d2e21100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546e8399aec3d2c9c6c9b8a7947f695745321e0a0000000000000000000000000000000000091e334657617583949ea7b2b6c3bec0c0bfc9bcb4b0a99f978a7e6f6157473a2a1b0a0000000000000000000000000000000000000000000003090b0b07000000000000000000071520282a2f2f2f2f2f2f211e160a000000000000000000000000000c21374c61768ca8b9cdd7c6a48e79644f39434b60738399a3b5c3bcab9f8b7b655b4a3c2b1c0c000000000000182e43586d8398adc2d6c1ab96816c5443301c070005192b3b566b8096abc0d5c5af9a85705a3b2a1805000000071117191d1d1d1d1d1d1d1d1d1d1d1d1d1d1d14120c020000000000000000090f11202020202020202020202020202020202020202020202020202013110b02000000000000000000000000000000000003090c171f21262a2c2d2e2d2a27221f180c0800000000000000000000000000000000000000000000000000000000000000021628385b70869bb0c5dbcdb9a88c76614c37210c00000013283d53687d92a8bdd2d1c0b4afa5ab9f9d9a96928e89857f79736b625a4d483c3124160800000000000000000c171f2a333a464c576169757e87939da5b1b5c2bab4a99f978b82786d635b4b3f2e1b08000000050f15172020202020202019161006000000000000000000000000000000000000000000000000000000000b20354a6074889eb3c8c2b5b1b5c2b39e8875604b38281602000000000000000000000000000000091930414c61758599a1b3b8c5cac7bfb9b7b8bac0c7c7bab4a89e93837561594739281603000000000000000000000000000000000000000000000000000000000000000000000000030d13151919191919190b090300000000000000000000000000000a1f33475874899eb4c9d1bca6917c67513c3144556175859ba5b7c5baa99e8a79635a483a291a0a0000000000162b40556b8095aac0d5c7b29d8773604a35200e000012273c52677c91a7bcd1c9b39e89745947341f0b00000a18242c2e32323232323232323232323232323229271f1406000000000004121d2427353535353535353535353535353535353535353535353535353528261f140600000000000000000000000000000000000000040a0c11141718191815110c0a0400000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aec3d8d6c6a48e79644f39240f00000010253a50657a8fa5c4d4ded1c8c5c9bcb4b2afaca8a99f9a958e8780786d625a4e42342616060000000000000000040c171f293339464b566069747e87929ca4abb2b6bab4aa9f978c8279655d4b37220e00000917222a2c353535353535352e2b23180a0000000000000000000000000000000000000000000000000000000e24394e63798ea7b8c9b5a49ca4b5b8a6947e695645321e0a0000000000000000000000000000011426374d5f6d8298a3b3bfccc3b6b2a9a4a2a3a5aab2b6c3c6b9b4a1998577615745321e1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c71879cb1c6d3bea9947e69543f263746576277879da7b9c7b9a89d8878625846382815020000000013283e53687d93a8bdd2cab7a58f7a65503c2b1905000e23384e63788da3c8d9ccb9a78c77624c37220d000718283640444747474747474747474747474747473e3b3224140200000000122230393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3e3a31241402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8096abc0d5d1bba6917c66513c27110000000c22374c61778ca6b7cbdfcdbcb0aba4a7abaeb3b8bab4afaaa59d958b82786860514434241400000000000000000000040b171f293238454b566068747d868f969ca4b6c8bbb4aa9f988d7a654f3a251000051727343e424a4a4a4a4a4a4a433f36281806000000000000000000000000000000000000000000000000000013253653697e93a8c5c6b19c879cb1c4b39d8875604b3828150200000000000000000000000000081d314455677d92a0b2c1cebdb1a59d948f8d8d90959da5b4b9c6bfb3a39b8575604b41311d0c000000000000000000000000000002090b11121212120f0d070000000000000000000000070b120c09030000000000000000000000000000000000000000001a2f44596f8499aec4d6c1ab96816c56412c283948596379899ea9b2b2b2a69c8676615645321d090000000011263b50667b90a5bbd0d4c3ad98826d5a4835200f000c21364c61768baabbced6c5a48f7a654f3a2510001124364653595d5d5d5d5d5d5d5d5d5d5d5d5d5d5d544f42321f0c000000091d30404c516060606060606060606060606060606060606060606060606060534e42311f0b000000000000000000000000060c0e13151614120e0c06000000000000000000000000000000000001080b140c09030000000000000000000000000000000000000014293e53697e93a8bed3d3bea9937e69543e29140000000a1f34475973889db2c8ddc3b09e958e9295999ea6a8afb4bbb7b2aa9f988a7e6b625142311b0b0000000000000000000000040b161e283238454b556068717a80879cb2c7cec8bbb4ab927d68533d2813000f22344552576060606060606058534636231000000000000000000000000000000000000000000000000000071c3043546e8399aec3c9a8937e93a6b7b7a6937e695645321d0a000000000000000000000000000b20354b6074879db2becfbeb19f96877f7a78787a8087939ea8b8c4c1b5a399836e604e3b2a18040000000000000000000000000a161e21262728282824221b10020000000000000008131c2028211e160b0000000000000000000000000000000000000002172c42576c8197acc1d6c3ae99846e59442f1b2b3b4a5b657b8b9a9d9d9d9d9d9a8474604b36200b000000000e23384e63788da3c5d5dfcab49f8b78624d3d2c1a060b20354a60758a9fb4cad0bba6917b66513c261100172c4053646e72727272727272727272727272727269604f3b27120000000f24394c5e66757575757575757575757575757575757575757575757575757568604e3a261100000000000000000000080e192023282a2b2a2823211a0f0b060000000000000000000000000008141c2029211e160b00000000000000000000000000000000000011263b51667b90a6bbd0d6c1ab96816c56412c1701000004182a3a586d8297adc6d6c0ab95807a7c8084888d93999faab4b9bbb4a89f93806b604e392917030000000000000000000000030d18202c363f4b505f67737c838a9fb4c9d4cac1b5aa95806a55402b1500152a3e52636c757575757575756e64533f2b16010000000000000000000000000000000000000000000000000b20354a6074889eb3c8bcab8c77879db2c4b29d8875604b3827150200000000000000000000000115273752677c91a5b6cac6b2a09681746a646263656b747e8a9da6b8c7c1b2a1927d685947341f0b00000000000000000000000b1a2832363b3d3d3d3d39362d20100000000000000e182530353d3632281b0b00000000000000000000000000000000000000142a3f54697f94a9bed4c6b19b86715c3a29171d2d3d4b5d657b8487888888888888816b56412c16010000000b21364b60768ba6b8cbe0cebbaa96816c5b49352114071c30435474899eb3c9d1bca7927c67523d271200192e44596e838787878787878787878787878787877e69543e291400000011273c51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7e68533e2813000000000000000003111c232c35383d3f403f3d39362c2320190e030000000000000000000009182630353e3632281b0d00000000000000000000000000000000000e24394e63798ea3c5d6d8c3ae99836e59442e190000000012273c52677c91a8b9cdc5b09b8570676b6f73787e848b959ea8b6c2bab49e937e685746331e0a000000000000000000010b161e2b343d494e5d65707c8791999fa8baccc3b7b2a39b8f7f6a553f2a1500172c42576c818a8a8a8a8a8a8a826e58432e19000000000000000000000000000000000000000000000000000e24394e63798ea7b8cab49f8a738096abc1b7a6937e695645311d090000000000000000000000081d3144556f8499afc3cdb9a898826d60564f4d4e505560697a889da9bacdbfb39e8977614c3a2917040000000000000000000b1b2938454b50525252524f4a3e2d1b0700000006141e2c36434a524b463928160300000000000000000000000000000000000012273c52677c91a7bcd1c9b39e89745846331f0f1f2f3f4b5d646f727373737373736b62513d291400000000091e32455673889eb3c8ddd8c8b49f8b79634e423120101e32455674899fb4c9d2bda8927d68533d281300192e44596e83999c9c9c9c9c9c9c9c9c9c9c9c9c97826d58422d180000000f24394e64798e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f95806b55402b16000000000000000614212e373c494d52555654524e493d38352b1e170b000000000000000009192736434b544b46392a1d0d000000000000000000000000000000000c21364c61768ba7b9ccdbc6b09b86715b392916030000000c21364b6176899eb4c9cab59f8c786356595b63686f77808a9ca4b6c8bcb39e8976614c36210c000000000000000009151d29323b484c5b636f7b85919ca5aeb4bac6b9b3a59d92857b6a61503c281300142a3f54697f949f9f9f9f9f9b85705b3727150200000000000000000000000000000000000000000000000013253654697e93a9c5c7b29d8872798ea3b4c4b29d8774604b37271502000000000000000000000b20354b6075899eb4c9c9b49e8a76614c4538383837444b5c647a8b9fb4c4ccb9a795806b5846331f0a0000000000000000031729394656606667676767645c4a36220d0000031424323c49546067615746321e120000000000000000000000000000000000000f243a4f64798fa4c7d7ccb9a78b76614c36210c11212f3f4b4f5a5d5d5d5d5d5d5d56514434210e00000000031628385b71869bb0c6dbe2cebbaa99836f604e3e2d1f21364b60768ba9bacdd1bca7917c67523c271200162c41566b8196abb2b2b2b2b2b2b2b2b2b2b2af9a85705a3827150200000c21374c61768ca8b9b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ad98826d58432d18000000000000041424323f4b4f5a63686a6b6967635b564d483c33291b0b00000000000001152737445460696157483b2a1c0c0000000000000000000000000000000a1e33465774899eb3c9dec8b39e89735746321e0a0000000a1e3246576c8297abbccfbcab96816c5a48494d5359626a79869caabbccb9a7927d68523d2813000000000000031119273139464b59626c79838f9ba3b2b6c3c8bbb4a89e94877d72655d504333200d0012273c52677c91a7b5b5b5b29d88735544311d080000000000000000000000000000000000000000000000071c3043546e8399aec3c5af9a857070859bb0c5b7a5937e685544311d09000000000000000000000f243a4f64798fa8b9cdc2ad97826d58473328232326313e4a5c697e93a6b7cbc5b49e8976614c36210c0000000000000002101e33465761747b7c7d7d7d7a644f39240f0000112132424f5a63727d75614b402f1b0b00000000000000000000000000000000000d22374c62778ca9bacdd6c5a38e79634e39240e0311202e373a4548484848484848413d342616050000000000192e43596e8398aec3d8ead8c8b3a1937e685c4a3d2f25364e63798ea3c7d7dac9a6907b66513b26110014293e54697e93a9bec7c7c7c7c7c7c7c7c7c7b29d88725645311d0900000a1f33475874899eb4c9cacacacacacacacacacacacacacacacacacacac5af9a85705a362513000000000000122232424f5d6570787d7f807f7d78736c625a4b4639291b0b0000000000081d31445560727e756259483a2a1a0a0000000000000000000000000000031729395c71869bb1c6dbccb8a78b76614b36210c000000031629394e63798c9fb5c7c9b49f8a78624d43383b474c5b63798c9fb4cac5ae99836e59442f1900000000000011212e37444b57616a77828c99a1b0b5c1c9bfb3aa9f97897f756760544b3f33251503000f253a4f647a8fa4c7d7cab49f8a75604b36200b00000000000000000000000000000000000000000000000b20354a6074889eb3c8c2ac97826d687d92a6b8c3b29d8774604b3727150100000000000000000013283d52687d92a7c6d6bda7927d68523a2a170d0e141d2d3d4b6074879db2c8ccb9a8927d685237261401000000000000102032434c61758590929292907a65503b251000081c2f3f4f6069788492816c5e4c3a291704000000000000000000000000000000000b1f34475974899fb4c9d0bba6917b66513c26110002101b22252f323333333333332c29211608000000000001162c41566b8196abc0d6e7d9cfbfb49f8a7a645b4c403a4354697e93a9bed3cfbcab8f7a644f3a250f0011273c51667c91a6b3b3b3b3b3b3b3b3b3b3b3b39f8a75604b36200b000004172a3a5c71869cb1c6dbdfdbcdc4c0bbbbbbbbbbbbbbbbbbbbbbbbbbbbb29c87725443301c070000000009192f404f60697b858d92949594928e8881786c61574639291703000000000b20354b607382938577625847382715020000000000000000000000000000192f44596e8499aec3d9d5c5a38e78634e39230e000000000b21364a5b6d8298a9bacdbaa999836e614f4335343c495b70859aafc5c6b19c87715c47321c00000000000d1d2e3f4b55606875808a979faab3bfc9c1b5b1a1998b81776a60564a43362e21150700000d22374c62778ca9bacdcfbcab8d78624d38230d00000000000000000000000000000000000000000000000e24394e63798ea7b8ccc9a9937e696075889eb3c7b7a5927d685544311d0900000000000000000014293f54697e94a9beceb9a48f79644f3a240f0000010f1d314455697f94a9c5d5c6ae99846f5544311d0800000000000c1c2e3e4f616e8399a3a7a79c86715d4b37230e000e23384c5d697e8a9a9f907c665846331f110000000000000000000000000000000005182a3b5c72879cb1c7d3bea8937e69533e2914000000080d0f1a1d1e1e1e1e1e1e16140e050000000000000014293e54697e93a9bed3d9c9bcb4aea89e8979665e524f516072869cb1c6dbcab59f8b76614b36210c000f24394e64798e9d9d9d9d9d9d9d9d9d9d9d9d9d9d8d78634d38230e0000001a2f44596f8499aec4d9e0cdbcb0aba6a6a6a6a6a6a6a6a6a6a6a6a6a6a69f8a75604a35200b000000011426374c5e697e8c9aa2a7aaaba9a7a69d968b8175615746331e0a0000000013283d53687d92a09b8676615645311d110000000000000000000000000001172c41566c8196abc1d6d0bba6907b66513b261100000000071a2d3d4d62788a9fb4bfc7b3a1947f6a614e493d3744556d8398adc2c8b39e89735e49341e0000000005192b3c4b5d65747e88959ea8b4bbc8c4b7b2a39b9083796c61594b453830251811030000000b20354a60758a9fb4c9d9c9a58f7a65503a2510000000000000000000000000000000000000000000000013253654697e93a9c5cfbcab8f7a65566a8095a9bac3b29d8774604b372614010000000000000000162b40556b8095aac0cdb8a28d78634d38230e000000021527374e63798ea6b8cbc9b49f8973604b35200b0000000008182a3a4b5c697e94a1b2b9a8937e68533f2f1c080010263b50657b909fa8b29d8876614c3f2e1909000000000000000000000000000000001a2f445a6f8499afc4d6c0ab96816b56412c160100000000000508080808080808010000000000000000000011263c51667b91a6bbd0cfbcab9f98a0a79e897c6f6764666e8095a4b5c9dcc7b19c87725746331e0a000c21364c6176888888888888888888888888888888887b65503a2510000002172c41576c8196acc1d6d8c4b09e96919191919191919191919191919191918c77624c37220d000000081d314455667c8d9faab4c0bfc0bec4b7b3aa9f978776614b36210c0000000010253b50657b909ea49b8574604b3f2f19090000000000000000000000000014293f54697e94a9bed3d3bda8937e68533e291300000000000f2035485a687e93a1b3c1bfb59f8d7f6f635b5755556074879cb2c7c7b29d88725d48331d000000000b2034485a657b86939ea6b4b9c6c6b9b4a69d92857b6f635b4c473a32281c13080000000000071c30435472879cb2c7d2bda7927d68523d281300000000000000000000000000000000000000000000071c3043546e8399aec3cab59f8b76614c61778a9fb4c9b6a5927d685544311d080000000000000000162b41566b8096abc0ceb8a38e79634e39240e000000000921364a5b73889eb3c8cdbaa98e79634e39240e000000001325364758647a8b9fb4bfb39e8976614b362111000011273c51667c91a5b7b7a697816c5d4b37271501000000000000000000000000000002172d42576c8297acc1d7c3ae98836e59432e19000000000000000000000000000000000000000000000000000f24394e64798ea3c6d6cab49f8c8398a4a79e91847c797b83959eafc2d2d2c2ac97826c5739291703000a1f3346586173737373737373737373737373737373655d4b37230e000000142a3f54697f94a9bed4d6c0ab96807c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c75614b36210c0000000b20354b6074879cabbbc8d1d1c8c5bbbbc8bbb09a85705746331e0a000000000e23384b5d6b8095a1a396816c5d4b3727150200000000000000000000000012273c51677c91a6bcd1d5c0ab95806b56402b16010000000005192b3c4e606e8399a3b4c1bcab9f948379716c6a6c738196a5b6cac2ae99846f59442f1a000000000d22384d62788b9ca4b3b8c4c8bbb4a89e94877d72655d4e493d342a1e160a00000000000000001325365a6f859aafc4d4bfaa957f6a55402a15000000000000000000000000000000000000000000000b20354a6074889eb3c8c7b19c87725747596d8297abbcc3b29c8773604b3626140100000000000000152a40556a7f95aabfcfbaa5907a65503b251000000000071a2d3d5c71869bb1c6d7c7a7927d67523d27120000000d1c3043546176879daabbbcab96816c5746321e0a00000b21364b6075879db2c1b59f8d7b655544311d0c000000000000000000000000000000152a3f546a7f94a9bfd4c6b09b86715b392816030000000000000000000000000000000000000000000000000c21374c61768ca8b9cccfbcab8e79869ca5b3a29a928f9199a1afbcccdac9b5a48f7a654f3a251000000417293a464c5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e504b3f2e1c0800000012273c51677c91a6bcd1d4bea9947f6966666666666666666666666666666666615746331e0a00000010253a50657a8fa4b6c9d9d1c1b4b0a6a5aab3a5917c66513929170300000000081c2f3f4a60728399a59e907b655544311d080000000000000000000000000f24394f64798ea4c6d7d8c3ad98836e58432e190000000000000e1e31424b6175859ba3b2bfbcb5a1998e8682808187969fb1c3c7b6a4927d67523d28120000000011263b50667b90a9b6c2c9bfb3aa9f978a7f756760544b3f352c1f180c02000000000000000000182d42576d8297acc2d7c2ac97826d57422d18000000000000000000000000000000000000000000000e24394e63798ea7b8ccc3ad98836e583b4e63798c9fb5cab6a5927d675443301c080000000000000013293e53687e93a8bdd3bda8937e685339291703000000001a2f455a6f849aafc4d3bea9937e69543e291400000d1d2e3f4a60728399a5b7c8b59f8c78634e392916030000091e324556677d92a3b4bcab9c8673604b3a2a1704000000000000000000000000000012273d52677c92a7bcd1c8b39e88735745321e090000000000000000000000000000000000000000000000000a1f33475874899eb3c9d9c9a5907a77879ca4b3afa7a4a6aeb2bfccd9cebcab9c86715d4b37220e0000000c1c293336484848484848484848484848484848483a372e2111000000000f243a4f64798fa4c6d7d6c1ac96816c575151515151515151515151515151514b4639291703000000152b40556a8095aac3d3d6c5b4a39b9190959e9d8773604b35200b000000000000111c3043546176879db19c8674604b3625130000000000000000000000000c22374c61778ca8b9cddac5b09b85705b38281502000000000000141e32465761768598a0b3b9bfb3afa39b9795979da5b1bdc6b9a99c8674604b36200b000000000f24394f64798ea4c6c2b5b1a1998c81776a60564a43362e211a0f040000000000000000000000152a40556a7f95aabfd4c4af9a846f5a3625130000000000000000000000000000000000000000000013253654697e93a9c5d5bea9947f69543f495b6f8499afc2c3b19c8673604b3626140100000000000010263b50657b90a5c2d3c3ae98836e5746331e0d00000004182a3a5b70859ab0c5d4bfaa957f6a55402a150005182a3b4b5d6a7f94a1b3c3c1af99846f5b49351b0b000000021628384a6072859bb0beb5a4947e695847331f0e00000000000000000000000000000f253a4f647a8fa4c7d8cbb8a68b76604b36210b0000000000000000000000000000000000000000000000000417293a5c71869cb1c6d2bda7927d6878869aa2b4b9c6bbc3c6cfcec8bbb49f8d7b654f3f2e1b08000000000c171f213333333333333333333333333333333325231c1103000000000c22374c61778ca8bacdd9c4ae99846f59443c3c3c3c3c3c3c3c3c3c3c3c3c3c3633291b0b00000003182d42586d8297adc2d7ccb8a79b857c7b8088907e685443301c08000000000000001325364758657b8fa1a4927d685443301c0700000000000000000000000a1f33475874899eb4c9ddc8b39d88735645321d09000000000000031628394758617583939ea8b4bac1b5b0acaaacb2b7c3c0b4a89e8b7a645544311d08000000000c22374c61778ca8b7b2a39b9084796c62594b453830251811060000000000000000000000000013283d52687d92a7bdd2c7b29c87725443301c070000000000000000000000000000000000000000071c3043546e8399aec3d4c3a5907b65503b3d50657b90a4b5c9b6a4927d675443301c080000000000000d22374c62778ca4b6cac9b49e8976614c3b2b1a0b02000a1f34475972879cb2c7d4bfaa957f6a55402a15000b1f344759657b8c9faeaeaeaea3907b66513d2c1a00000000000a1c304354647a8fa0b2c2b39e8976614c3c2b1906000000000000000000000000000d22374d62778ca9baced5c5a38e78634e39230e000000000000000000000000000000000000000000000000001a2f44596f8499aec4d5bfaa95806a627784949ea8b2b7c4bdc7bab4aa9f95806a5d4b372110000000000000040a0c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e100e080000000000000b1f34475974899fb4c9dbc6b19c86715c3a2a27272727272727272727272727211e170b0000000004192e44596e8399aec3d8c8b39e897666666b767b72604b3626140100000000000003152633404c5d6f8499ae9c8673604a35200b000000000000000000000004182a3a5c71879cb1c6cdcab59f8a75604b36200b000000000000000b1b293a475761727e89979fa9afb4b9c6bbbbc4b8b3ada29a897c665c4b37271502000000000a1f33475874899ea69d92867b6f635b4c473b32281c130800000000000000000000000000000010253a50657a8fa5c9d9c9b49f8a75604a35200b00000000000000000000000000000000000000000b20354a6074889eb3c8cab6a58c76614c37384c5d71869cb1c4c2b19c8673604b3625130000000000000b1f34485971879cb1c6ccb9a8947f69594838291d15151a29394c61778ca5b6cad3bda8937e68533e2913000d22374c627788999999999999958572604a35200e0000000000001325364b5c6e8398abbcb9a796816c5a4835200e000000000000000000000000000b20354a60758a9fb4c9d0bba5907b66503b261100000000000000000000000000000000000000000000000002172c42576c8197acc1d6c2ad97826d5961727f8a959da6a6a8a7a99f998c7f6a62503f2e1c030000000000000000000000000000000000000000000000000000000000000000000004182a3b5c72879cb1c7dcc9b49e89745847331f1111111111111111111111110c0a03000000000003182e43586d8398adc2d8c4ae99846f57505861666054433018080000000000000011213344505e656e7c91a7a48f7a644f3a240f0000000000000000000000001a2f445a6f8499afb8b8b8bcab8d78634d38230e00000000000000000c1c29394654606977828a949a9ea8a5a6a6a5a69e988f8478665e4c3e2e1909000000000004182a3a5c71879c95887d73655d4e4a3d342a1e160a00000000000000000000000000000000000d23384d62788dabbccfcdbaa98c77624c37220d00000000000000000000000000000000000000000f24394e64798ea7b8ccc7b29d87725847332f3f52687d92a6b7c9b6a4917c675443301c08000000000005182a3b566b8196abc2d2c6b39e89786256463a31272a2d384657697e93a8c3d3d3c2a6917c67513c27120014293f54697f838484848484838076615443301c0700000000000008182e3e4e63798c9fb5c5b49f8b78624d3c2b1905000000000000000000000000071c30435472879cb2c0c0bda8937e68533e291300000000000000000000000000000000000000000000000000142a3f54697f94a9bed4c5af9a85705a5460697780888d919392908a847a6a6150443321110000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afc4d9cdb9a88c76614c37210c0000000000000000000000000000000000000001162c41566b8196abc0d6c3ad98836e583a464c514b4336261400000000000000091c2f4050626b7b83879db2ab96806b56412b16000000000000000000000002172d42576c8297a3a3a3a3a3a3907a65503b25100000000000000000000c1b2836434a59626d767e84898e8f91918f8d88837a70635a4c402f2010000000000000001a2f445a6f83897f756860544c3f362d1f180d030000000000000000000000000000000000000b20364b60758a9fb4cad7c7a48f79644f3a240f000000000000000000000000000000000000000013253654697e93a9c5d5c3ae98836e593a2920364b6074889db3c6c2b19c8673604a3625130000000000000f24394f64798ea4b5c9ccb9a79a847461584b45383f3e4a566175879db2c7ddcab6a48d78624d38230d0012273b4f61696f6f6f6f6f6f6e6b61584736251300000000000000001021364a5b6e8399aebfbaa997826c5a4835200b000000000000000000000000001325365a6f859aababababab95806b56402b160100000000000000000000000000000000000000000000000012273c52677c91a7bcd1c7b29d877254434b59626b73787c7d7c7a766f645c504333251503000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1d7d6c6a48e79644f39240f000000000000000000000000000000000000000014293f54697e94a9bed3c5b09a85705b3733363b3530261808000000000000000e23384c5e6b8090999da5b7b09b85705b382816030000000000000000000000152a3f546a7f8d8d8d8d8d8d8d8d7d68533d2813000000000000000000000b1825303b484c5861696f75787a7c7c7a78746d655d4d493c2f2211020000000000000011273c51667c776a61574b43362f211a0f050000000000000000000000000000000000000000081d31445573889db2c8d1bca6917c67513c271200000000000000000000000000000000000000071c3043546e8399aec3d4bfaa947f6a553f2a1d3145566a7f94a8bac9b5a4917c665443301c0700000000000d22364a5c71869cb1c3d3c5b4a29a84766760565655575c64748399a5b7cad6c6b19c87725a4935200b000c2032434f5459595959595959564c473a2a18080000000000000000071a2d3d4e64798ea1b3c7b49f8b78624d39291703000000000000000000000000182d42576d8295959595959595836e58432e19030000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7c9b49f8a75604b3b484c555b636668676561574e4a3e3325150700000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4d1bba6917c66513c2711000000000000000000000000000000000000000011273c51667c91a6bbd1c7b29d88725544312126201c1408000000000000000010263b50657b909eaeb2b7c3b49f89745645321e0900000000000000000000000c21364c6176787878787878787876614c37210c000000000000000000000008131c2a343a474c5455606365666665636054504b3f352c1e110400000000000000000f24394c5e6662594b4639302618110700000000000000000000000000000000000000000000021527375b70859bb0c5d4bfaa947f6a55392816030000000000000000000000000000000000000b20354a6074899eb3c8d4c4a5907b66503b261527384c61768a9fb4c9c2b19b8673604a3520120000000000071b2d3e52677d92a5b6cad1c0b4a29a887d756e6b6a6c71798499a1b2c3d4cdb9a895806b563c2b190600031425323b3f444444444444444037332a1c0c000000000000000000000f21364a5c6f8499afc3bbaa96816c5746331e0a00000000000000000000000010263b50657c808080808080807e68533e2813000000000000000000000000000000000000000000000000000d22374c62778ca9bacdcebbaa8c77624d3734373c494d515352504c4639362d201507000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1d3bea9947e69543f291400000000000000000000000000000000000000000f24394f64798ea4c6d6cab49f8a75604b3620110b0801000000000000000000192f44596e8499aebcc7cacdbaa88b76604b36210b00000000000000000000000a1f334658616363636363636363615847331f0a000000000000000000000000000d181f2a333737444b4e505151504e4a4336372e20190e00000000000000000000091d30404c514c483b32281c140800000000000000000000000000000000000000000000000000182e43586d8398adc2d8c4af9a846f5745321e090000000000000000000000000000000000000f24394e64798ea7b8cccbb7a68c77614c37220c1f3347586c8197abbcc9b5a3917c6651402f1d0900000000001020354b6074879db2c0d0d1c0b4a69d928983807f81868c9aa2b2bfcfd0bfb49e8a77614c37220e00000007142027292f2f2f2f2f2f2e2b221f180c0000000000000000000000071a2d3e51667b90a5b6c8b49e8976614c3621100000000000000000000000000e23384c5e656b6b6b6b6b6b6b68604e3a2611000000000000000000000000000000000000000000000000000b20354a60758a9fb4c9d8c8a48f7a654f3a25222c35383c3e3d3b363329211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7d6c1ab96816c56412c1701000000000000000000000000000000000000000c21374c61768ca8b9cdcfbcab8d78634d38230e0000000000000000000000001e33485d73889db2c8dddfcbb8a68b76604b36210b00000000000000000000000417293a464c4e4e4e4e4e4e4e4e4c473a2a17040000000000000000000000000000050c171f21263135393a3c3c3a38353025231c1106000000000000000000000000122230393c37342b1e160b010000000000000000000000000000000000000000000000000001162b40566b8095abc0d5c9b49f8a76604b36210c00000000000000000000000000000000000013253654697e93a9c5d5c8b29d88735947341f0b172a3a4d63788c9fb4cac1b09b85715e4c3824110000000000081d314455677c91a2b4c6d7d1c4b7b3a79e989694969b9fabb4c0cfcfc0b3a1957f6a5947341f0a00000000030c12141a1a1a1a1a1a19160c0a04000000000000000000000000000f20354b6073879db2c8b9a8937e69543e2e1b080000000000000000000000091c2f404c5056565656565656534e42311e0b00000000000000000000000000000000000000000000000000071c30435472879cb2c7d1bca7927c67523d271219212327282725211e170b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bacdd9c3ae99846e59442f1900000000000000000000000000000000000000000a1f33475874899eb4c9d9c9a5907a65503b25100000000000000000000000001e33495e73889eb3c8d9d7c8b39e88735745321e090000000000000000000000000c1c293336383838383838383837332a1c0c0000000000000000000000000000000000040a0c141d20232527272523201c130808000000000000000000000000000004121d24272220180d030000000000000000000000000000000000000000000000000000000013293e53687e93a8bdd3cdbaa9917c66513b2a180400000000000000000000000000000000071c3043546e8399aec3d8c3ae99846e593b2a18040c2135495b6e8399aec1c9b5a3907b6651402f1c0900000000011527374d5f6f849aa8bacde1d5cbc5b8b3adabaaacb1b5bcc9cdc9bcb4a2998373604b3a2a18040000000000000000000000000000000000000000000000000000000000000000081c3043546a7f94aabbc6b19c86715c4b37220900000000000000000000000011212f383b404040404040403e3a3124130200000000000000000000000000000000000000000000000000001325365a6f849aafc4d4bfaa947f6a553f2a15060c0e111312100c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c9dbc6b19b86715c3a2917040000000000000000000000000000000000000004172a3a5c71879cb1c6d2bda8927d68533d28130000000000000000000000001a30455a6f849aafbcc9c7baaa97826d5839281603000000000000000000000000000c171f212323232323232323211f170c00000000000000000000000000000000000000000001080b0e101111100e0b0700000000000000000000000000000000000000090f110d0b0500000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbd0d7c7ae98836e5947341f0c000000000000000000000000000000000b20354a6074899eb3c8d5bfaa95806a55402b150006192c3c50657a8fa3b5c9c1b09b85705e4c3823110000000000091930414d63788a9fb4bfd0e1d9c8bbb4aeb3b8c5c0c1c0c7bab4ab9f968476615544311c0c000000000000000000000000000000000000000000000000000000000000000000011426364c61778b9fb4cab6a48f7a644f37261401000000000000000000000003111c23262b2b2b2b2b2b2b28261e1306000000000000000000000000000000000000000000000000000000182d42576d8297acc2d7c1ac97826c57422d170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c7dcc9b39e89745846331f0a00000000000000000000000000000000000000001a2f44596f8499aec4d5bfaa95806a55402b1500000000000000000000000011263b50667b909fabafaea99f8b79634e39230e000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3c5d5dfc9b49f8a77614c3a2a17040000000000000000000000000000000f24394e64798ea7b8c8c8c3a6917b66513c261100000e23374b5d71859bb0c2c8b5a3907b66503f2f1c080000000000122035495a697e93a1b3c3d4cebbaa9f989ea7a8aaacaba9a99f988c81736158463726140000000000000000000000000000000000000000000000000000000000000000000000081f3447596f849aafc7c2ac97816c5544311d0800000000000000000000000000090e101616161616161613110b0200000000000000000000000000000000000000000000000000000000152a40556a7f95aabfd4c4af99846f5a442f1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafc4d9ccb9a78b76614c36210c0000000000000000000000000000000000000002172c41576c8196acc1d6c2ad98826d58432d180000000000000000000000000f23384c5e697f8c969a99958b7d675b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1215161514120e0c06000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8cce0cebaa995806a5847331f13070b0d110f0900000000000000000014293e54697e93a9b2b2b2b2a58c77624d37220d0000081c2e3f52677d92a4b2b2b2b09b85705d4c38230e000000000006192c3c4a60728399a5b7c7cab49f8b82888e9295969593908a83796c6055463a291909000000000000000000000000000000000000000000000000000000000000000000000004182a3a53687d92a9bac8b39e8874604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2c7b19c87725c3b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2d7d6c5a38e79634e39240e0000000000000000000000000000000000000000142a3f54697f94a9bed4c5af9a85705a372715010000000000000000000000091c2f404f6169798184848078675f4d3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0f1a2123272a2b2a292723211a0f0d0700000000000000000000000000000000000000000000000000000000000000000000091e32465773899eb3c8ded8c7b39e8976614c4130221b202226241d120400000000000004192e44596e83999d9d9d9d9d9b8772594834200b0000001120354b607386999d9d9d9d9d907b65503b26100000000000000e1c3043546176879da9bacdbbaa9c8676797d8081807e7b756e635b4b4437291c0c000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768a9fb4c9b8a68f7a654f3a25100000000000000000000000000000000000000000000000000000000000050b0d10111313100b010000000000000000000000000000000010253a50657a8fa5c8d9c9b49f89745947341f0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4d0bba6917b66513c2611000000000000000000000000000000000000000012273c51677c91a6bcd1c7b29d88725544311d08000000000000000000000000112232434f5b636c6f6f6b635a4d41301f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1a21242c35393d3f40403e3c39352c24221b10070000000000000000000000000000000000000000000000000000000000000000031628395b71869bb0c6dbe0ccb9a797826d5f4d41362d35383c382f2212000000000000071c31475c7186888888888888857b644f3b2b1905000000081d314455627883888888888888826d58432e18000000000000001325364758647a8b9fb4bdc8b5a49a8474686b6c6b696560564e493d3127190c00000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586f8499afc4c4aa95806a553a29170400000000000000000000000000000000000000000000000000060b0d19202225272828251e13050000000000000000000000000000000d23384d62788daabbcecdbaa98c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2d3bea8937e69533e291400000000000000000000000000000000000000000f243a4f64798fa4c6d7cab49f8a75604b35200b000000000000000000000000041425323d4a4e565a59564d493c302313010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d19202d36393d494e5254565553524e493d39362d211a0f0100000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3d8d6c5b9b39f927d675f4e4a3e484d514c402f1d090000000000051a2e4356677173737373737370645d4b371d0d0000000001152737495a626e7273737373736d64533f2b16000000000000000818293a4a5c687d929fb1c0c2b4a298826d61575654504b4538362c1d15090000000000000000000000000000000000000000000000000000000000000000000000000000000417293a54697e94a9c4c5b09b85705846331f0a0000000000000000000000000000000000000000000000010e1920232b34383a3c3d3d3a3123130000000000000000000000000000000b20354b60758a9fb4cad7c7a48f79644f3a240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8d8d6c0ab96816b56412c1601000000000000000000000000000000000000000c22374c61778ca8bacdcebbaa8d77624d38220d0000000000000000000000000007141f2d36394145444038352c1e1305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005121d2b343d4a4e565b63676a6b6a6967635b584f4a3e362d1f1406000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6ccb9a79ea79f8c7d6e645c5c5a62665e4c38240c00000000000013273949565c5d5d5d5d5d5d5b4f4b3f2e1b00000000000009192b3c494d595d5d5d5d5d5d58534636231000000000000000000c1c2d3e4e5f6c8196a2b4c4c0b2a095806a5f4e3f3b363228211a0f0200000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea6b8cab49f8b76614c36210c0000000000000000000000000000000000000000000009141d2b35383c484d505152524e41311c0c0000000000000000000000000000081d31445572889db2c0c0bca6917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbced8c3ae99836e59442e1900000000000000000000000000000000000000000a1f34475974899fb4c9d9c8a58f7a65503a25100000000000000000000000000000010f1a21242c2f2f2b2320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041223303b484d5b636b72787c7f807f7e7c78736d645c4e4a3d32241709000000000000000000000000000000000000000000000000000000000014293f54697e94a9bed3c9b39e899ea89f928279737273777c66513b2a180400000000000a1b2b394347484848484848463a372e2010000000000000000e1e2b353844484848484848433f36281806000000000000000000102031414b6074849aa6b7c7beaf9e927d685d4c3d2d1e160a06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074889db3c8bbaa917c66513c2711000000000000000000000000000000000000000000091926313c494d575a62656668685f4e3a2a180400000000000000000000000000011527375b70859aababababa9947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4cadbc6b09b86715b392816030000000000000000000000000000000000000004182a3a5c71879cb1c6d2bca7927d67523d28131313130f0d0700000000000000000000070c0e171a1a160e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122330414d59626d7981878e9294959593918e88827a6f635b4f42342717070000000000000000000000000000000000000000000000000000000011273c51667c91a6bbd1c0ab95808a9eb3a0988e8987888d88735947341f0b0000000000000d1b272e313333333333333025221b100200000000000000000e1920232f3333333333332e2b23180a0000000000000000000002131d3144556277889da9bacdbcb49f8c7b655b4a3b2b1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546e8398adc3c8ab95806b56402b16000000000000000000000000000000000000000009192637444b5a626c72777a7c7d7d685847331f0a0000000000000000000000000000182e43586d8295959595959595816c57412c170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572879db2c7dcc8b39e88735746321e090000000000000000000000000000000000000c171f2f445a6f8499afc4d4bfaa957f6a55402a2929292924221b10020000000000000000000000010504010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d30414d5f6778828c969ca5a7a9abaaa8a7a69d978e847969605245342515020000000000000000000000000000000000000000000000000000000f24394f64798ea4c6d7bfaa947f7f94a3b2ada79e9c9ea68c77614c37220c000000000000000a131a1c1e1e1e1e1e1e1b0f0d080000000000000000000000060b0d191d1e1e1e1e1e18161006000000000000000000000000021527374759647a8b9fb4bdcebbaa9e8a7963594839291909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013253654697f94a9bec4af99846f5a3a291704000000000000000000000000000000000000011426374455606b7881878d8f91928c77614c37220c000000000000000000000000000011263b51667c808080808080807d67523d27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426375a70859aafc5daccb8a78b76614b36210c00000000000000000000000000000000000c1c2a333742576c8197acc1d6c2ad97826d58423e3e3e3e3e39362d20100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001024394d5f677d8a979fabb2b6c3bfbdbcbcc4b7b2ada1998b7e6c6352433320100000000000000000000000000000000000000000000000000000000c22374c61778ca8b9cdc0ab958074859ba8b9b8b3b1b3a5907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3b4a5c687e929fb1c0c8b9a89d8777625746372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5c4c8b29d88735847331f0a000000000000000000000000000000000000081d3144556073808b969da5a5a6a48e79644f39240f00000000000000000000000000000f24384c5e666b6b6b6b6b6b6b675f4d392510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2d7d5c5a38e78634e39230e0000000000000000000000000000000004172a3a474c52546a7f94a9bfd4c4af9a856f5a5353535353534e4a3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c8c9ea8b4bcc6b9b4ada8a6a6a9afb5bcb3a99f93816c61503e2e180800000000000000000000000000000000000000000000000000000a1f33475874899eb4c9c1ab96816c788a9ea9bac7c7bfa9947f6a543f2a15000000000000050f1517202020202020201c1a140a00000000000006101618202020202020201a1812080000000000000000000000000000000000000d1d2e3e4e606c8197a2b4c4c6b7a69b8575615544311d15050000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca6b7cbb7a68c76614c37210c000000000000000000000000000000000005192b3b4b607383959faab2b7bab4a6917c67513c27120000000000000000000000000000091c2f404c5156565656565656524d41301e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5d0bba6907b66513b2611000000000000000000000000000000000a1f334758616868687c91a7bcd1c7b29d877268686868686868645c4a36220d0000000000000000000000060c0e1314110b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788a9fb4c1bcb4a89e98939191949a9fabb6bab49f947f6a5c4b362513000000000000000000000000000000000000000000000000000004182a3a5c71879cb1c6c2ac97826d657b8b9fa9b6c3c3ad98836e5839291603000000000917222a2c35353535353535312f271b0d000000000a18232b2e353535353535352f2d25190b000000000000000000000000000000000000102031424b6074849ba6b7c7c4b5a3998373604b433223130300000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889db2c8c4a48f7a654f3a251000000000000000000000000000000000000b203448596b8095a1b4bbbcafa99f9c927d68533d281300000000000000000000000000000012222f383b404040404040403d393023130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2d3bda8937e68533e2913000000000000000000000000000000000c21374c61767d7e7e8096abc0d6c9b49f8b7e7e7e7e7e7e7e7e7a644e39240f000000000000000000050f1a2123282926211e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b6a7f94a3b5ab9f9689827e7c7c7f848d9ca5b6bdaf9d8f7a645443301c0700000000000000000000000000000000000000000000000000001a2f445a6f8499afb3b3ac97816c5d667c8a9ca4b0b4b19c87725746321e0a000000051727343e424a4a4a4a4a4a4a4743392c1b0a0000061828353f434a4a4a4a4a4a4a454137291908000000000000000000000000000000000002131d3144556277889da9bacec1b3a197816c614f41302111010000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5a70859aafc5bca7927c67523d271200000000000000000000000000000000000d22374d62788b9fb4bfbfaf9e958a878376614c36210c00000000000000000000000000000004121c24262b2b2b2b2b2b2b27251e13050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d9d5c0ab96806b56412b1601000000000000000000000000000000192e44596e83929393969eb0c4d8cebbaa9f9393939393939393816c56412c1701000000000000000d181f2c36393e3e3b3632281a120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4b6073859ba49c8c80766d686767696f7a879ca8b9bbb09b8572604a35200b0000000000000000000000000000000000000000000000000002172d42576c82979e9e9e9c927d67525e667a86939b9fa99f8a76614b36210c0000000f2234455257606060606060605c564a3927140000102335465358606060606060605a5447372512000000000000000000000000000000000000021527374859647a8b9fb4bdcebfb19f947f6a5f4d3f2e1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adc2bea9947e69543f29140000000000000000000000000000000000132536556b8095a9bac6b2a1958075726e615846331f0a0000000000000000000000000000000000090f111616161616161612100a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788dabbccfd8c3ad98836e58432e19000000000000000000000000000000001a2f455a6f849aa8a8abb0bccddfd8c8bbb4a8a8a8a8a8a8a899836e59442e19000000000000000d1d2a343d494e5354514b4538302212040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1d3144556378868c877b6b6158535151545c64788a9eb4c9b4a3907b65503b2610000000000000000000000000000000000000000000000000000014293e54697e88898988867f72604a4c5c64747d858a8b8a8477624d37220d000000152a3e52636c75757575757575716856432f0c0001162b3f53646d757575757575756f6654412d180300000000000000000000000000000000000009192b3b4b5c687e939fb1c1cebdb59f8d7d675d4b3d2c1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc0c0ab96816b56412c1600000000000000000000000000000000071c30435470869bb0c7c3ae99836e6056594c463a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cadbc5b09b86705b38281603000000000000000000000000000000182d42586d8297adbbc8c0c4cddae6d8cec9bdbdbdbdbdbdb09b86715b3928160300000000000b1b2a3b484c5b6368696660564d4030221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637495a63737773655d4c463a3c3c3e4a5a6b8096abc0c1ac97816c57382715020000000000000000000000000000000000000000000000000012273b4f616973737373716a6054433e4a556068707576756f62594834200b000000172c42576c818a8a8a8a8a8a8a86715c3a29170403182e43586d828a8a8a8a8a8a8a846f5a452f1a00000000000000000000000000000000000000000d1d2e3e4e606c8197a3b4c4cfbcab9f8b7b655b493b2a1b0a00000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8bdc2ad98836d58432e18000000000000000000000000000000000b20354a60748a9fb4c9c6a48f7a654f45383633291b0b0000000000000000000000000000030a0c0f121315161614120e0c060000000000000000000000000000000000000000000000000000000001080b1014130f0d070000000000000000000000000000000000000000000000081d31445573889db2c8ddc8b39d88735645321e09000000000000000000000000000000152b40556a80959faaa7abb0bccde0d4c4b7b3acacacacacac9e88735746321e0900000000031629394859626f797d7e7b75665e4d402f190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192c3c4954606260544b3f332927272d3c51667c91a6bbc8b29d88735645311d09000000000000000000000000000000000000000000000000000c1f32424f545e5e5e5e5c554a43362d37444b5356606160554d483b2b1805000000142a3f54697f949f9f9f9f9f9e89745846331f0a01162b40566b80959f9f9f9f9f9c87725c3b2a18040000000000000000000000000000000000000000102031424b6074859ba6b7c8c9baa99e897963594739281909000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbc4af9a856f5a45301a000000000000000000000000000000000c21374c61768caabbcdb9a88b76614b3628211f170b00000000000000000000000000050b161e212527292a2b2b2a2723211a0f0d0700000000000000000000000000000000000000000000000009151d2025292924221b1006000000000000000000000000000000000000000000021527375b70859ab0c5dacbb8a68b76604b36210b00000000000000000000000000000011263b51667c868a8e92969eb0c2d2cbb7a69d969696969696968b75614b36210c000000000a1e3246576277848e939390887c665e4c372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c36434a4c4b43362e1f20222e374251677c91a6bccab59f8a75604b36200b00000000000000000000000000000000000000000000000000021424323b3e4949494947403530251927313638454b4c4b4437342b1d0d0000000012273c52677c91a7b5b5b5b9a88b76614c36210c0013293e53687e93a8b5b5b5b49f89745947341f0b000000000000000000000000000000000000000002141d3145566277889daabbc8c7b8a79d8777625745372614010000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc5b09b85705b46301b000000000000000000000000000000000d22374d62778ca2c7c9b49e89745746331e0c0a04000000000000000000000000000e19202932363a3d3e3f40403f3c38352c24221b100700000000000000000000000000000000000000000310192731353b3e3e3a372e20190e000000000000000000000000000000000000000000182e43586d8398adc2d8d5c4a38d78634e38230e0000000000000000000000000000000f24384c5e667175797d8096a4b5c9c8b39d88818181818181818177614c37220c000000000c21364b61758699a1a8a9a69d8d7c665544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1825303537353026232b34373e4b4f606d8298adc2cfbcab8d77624d38220d000000000000000000000000000000000000000000000000000006141f272934343433322a201c1309151d202832363636312720180d00000000000f253a4f647a8fa4c7d7d6c6a38e79644e39240f0011263b51667b90a6bbcacdbaa98c77614c37220c000000000000000000000000000000000000000000021527384859657b8c9faab3b9c5b7a59b8575605544311d080000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5bac6b19b86715c46311c000000000000000000000000000000000c21364c61768ba9bacab49f8a75604a35200b00000000000000000000000000000e1e2b3539464b4f525355565554514e493d3a362e211a0f0100000000000000000000000000000000000110212e37444b5053534f4b3e352c1e0e0000000000000000000000000000000000000000162b40556b8095aac0d5d0bba5907b66503b2611000000000000000000000000000000091d2f404c515660646771869cb1c6c7b19c87726c6c6c6c6c6c6c615847331f0a00000000152a40556a7f95a4b3bfc4b7ab9d8874604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202220222f373b484d545c646f7e93a0b2c5cebbaa8c77624d37220d000000000000000000000000000000000000000000000000000000020c12141e1e1e1e1c150b07000002080b151d2021201d1509050000000000000d22374c62778ca9bacdd0bba6917b66513c2611000e24394e63798ea3c5d6d7c7a48e79644f39240f000000000000000000000000000000000000000000000a1a2b3b4b5d677d8b989ea8a2a2a2a3998373604b362614010000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b9c7b19c87725c47321d000000000000000000000000000000000b20354b60758a9fb4c9bcab8b76614c36210c0000000000000000000000000005192b3c484d57616467686a6b6b6967635b574f4a3e362d1f1501000000000000000000000000000000000f202e3f4b5560656968645c4d493c2c1d0d0000000000000000000000000000000000000013283e53687d93a8bdd2d2bda8937d68533e28130000000000000000000000000000000012222f3838454b4e566b8095abc5c9b49f8975605757575757574c473a2a1804000000071c31475c71869cb1c2d0d5c9b7a68f7a65503a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714202e373f4b50596269717a84939caebecfcab49f8a75604b35200b000000000000000000000000000000000000000000000000000000000000000909090907000000000000000002090b0c0b080200000000000000000b20354a60758a9fb4c9d3bea8937e69533e2914000c21364b61768ba7b9ccd1bca6917c67513c271200000000000000000000000000000000000000000000000d1d2e3f4d5f677982898c8d8d8d8d8d8d816c5443301c080000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3b8c7b29d87725d48321d00000000000000000000000000000000081c30435471869cb1c6c9a48f7a644f3a250f000000000000000000000000000b2035485a6271767a7c7e7f80807f7c78736c645c4e4a3d321d14090000000000000000000000000000071a2d3e4b5d65747a7e7e7a70635a493b2b180500000000000000000000000000000000000010263b50657b90a5c9dad5c0ab95806b56402b160100000000000000000000000000000004121d242832363a4f657a8fa7b8ccbaa98c77624c414141414137332a1c0c00000000091e34495e73899eb3c8dee7d4c4a7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051424323f4b4f5d656e777f868f9aa1aebbcbd1c1b09b86715544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c7d5c0ab96806b56412b16010a1e33465774899eb3c9d3bea9947e69543f2914000000000000000000000000000000000000000000000000102130414d5b636d74777878787878787872604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3b8c8b29d88735d48331e0000000000000000000000000000000001142636586d8298adc9bda8937d68533e2813000000000000000000000000000d22384d6278858b8f929394959594918d88827a6f635b4f4331261909000000000000000000000000000d21364a5c657b879093938f85786359483420080000000000000000000000000000000000000e23384e63788dabbccfd8c2ad98836d58432e18000000000000000000000000000000000000090a151d20354b6074899eb3c8c7a48f7a644f3a2c2c2c2c221f180c0000000000081d32475d72879cb2c5d5dacdb9a8907b66513b26110000000000000000060c0e1314110b090300000000000000000000000000030d1315202020202020201b191309000000000000000000000000000000132332424f5d64717b838b949ca4afb3bfcbcfc2b4a3927d6853372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafc4d8c3ae98836e59432e1900031729395c71869cb1c6d6c1ab96816c56412c17010000000000000000000000000000000000000000000000031323303d494e54606162626262626262605443301c080000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9c7b29d88725d48331d000000000000000000000000000000000012283d52677d92abbcc3ad98836e583d2d1a070000000000000000000000000c22374c61778c9faba7a8aaabaaa9a6a69e978f847969614b4437261401000000000000000000000004172a3a4e647a8b9ca5a8a8a39b8877624c3626140100000000000000000000000000000000000b20364b60758a9fb5cadac5b09b85705b382715020000000000000000000000000000000000000002091d3144556d8398adc9bca7927c67523d271717170c0a0400000000000002172c42576c8197a7b8c4c9bcb49e8a76614b36210c000000000000040f1a2123282926211e160a0000000000000000000000071520272a35353535353535302e261a0c000000000000000000000000000c1c30414f60697a8590999fabb1b5c2c7d0c8bfb2a49b8574604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2d7c5b09b86705b38281602001a2f44596f8499aec4d8c3ae99836e59442e190000000000000000000000000000000000000000000000000005131f2c3536434a4c4d4d4d4d4d4d4d4b433626140100000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5bac7b29c87725d47321d00000000000000000000000000000000000d22374c62778b9fb5c8b39d88735b4a36210c0000000000000000000000000a1f34475974899eb4c9bdbfc0c0bec5b8b3aca29a8b7f6d605544311d1300000000000000000000000a1f3347586f849aa9b6c3c1b4a697826d5443301c080000000000000000000000000000000000091d32455673889db3c8ddc8b29d88735645311d0900000000000000000000000000000000000000000114263752677d92abbcbfa9947f6a543f2a150202000000000000000000000d22384d6278899da6aeafab9f947f6a5746321e0a00000000000c171f2c35383d3f3c3632281b13050000000000000000031525323c3f4a4a4a4a4a4a4a4642382a1a0900000000000000000000000417293a4d5f697e8c9ba3aeb4bcc9c9cdc9c1b4b0a0988677625645311d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfd4c8b39d88735645321e0902172c42576c8197acc1d6c6b09b86715b3928160300000000000000000000000000000000000000000000000000010f1a21253035373838383838383835302618080000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbc6b19c86715c47311c00000000000000000000000000000000000b1f34485971869bb1c6b8a68e79634e39240e00000000000000000000000004182a3a5c71879cb1c6c8c5c5c6c9cccbc8c0b3aa9f948273604b41301f0e000000000000000000000c21374c61768b9fb5c7d3d1c4b49e8974604b35200b0000000000000000000000000000000000021528385b70859bb0c5cdcab49f8a75604b36200b0000000000000000000000000000000000000000000c21374c61778b9fb4c1ac97826c57422d170000000000000000000000000b2035485a657b8893999a968c8072604a39291603000000000c1c2a333d494e5354514b453930231305000000000000000d2032434f54606060606060605b554838261300000000000000000000000a1f334758677d929faab5c1cacfcac6bab4ada39b908376625948382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2cbb8a68b76604b36210b00152a3f546a7f94a9bfd4c8b39e88735745321e090000000000000000000000000000000000000000000000000000000608131c202223232323232323201c1408000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcc5af9a85705a45301b000000000000000000000000000000000005182a3b566b8096abc6c4a9937e6954372614010000000000000000000000001a2f445a6f8499afb7b2b0afb1b4b9c6c9d0c8bbb4a097816c5f4d3d2c1a060000000000000000000e24394e63798eabbccfe5e1ccb9a88c77614c37220c000000000000000000000000000000000000192e43586e8398adb8b8b8bcab8d78634d38230e0000000000000000000000000000000000000000000a1f33475870859bb0c7af9a846f5a36251300000000000000000000000005192b3c4b5d65767e8484817a6b605443301b0b0000000009192a3a474c5b6368696660574d413023130000000000000013273c4f616a75757575757575706755422e0a00000000000000000000000c21374c6176899eb3bbc8d2cdc3b6b2a89f978f857b6e6158483b2b1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8d9d5c4a38d78634e38230e0012273c52677c91a7bcd1ccb8a78b76604b36210b000000000000000000000000000000000000000000000000000000000000070b0c0d0d0d0d0d0d0d0b080100000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bec3ae99836e59442e1900000000000000000000000000000000000010253b50657b90a8b9c3ae99846e5544311d08000000000000000000000001172c41566c8196a8a69d9b9a9b9ea8b0b5c1cecebeb19f927d675b4935210f0000000000000000000d22374d62778ca4b6c9d8d6c7b49f8a75604b36200b000000000000000000000000000000000001162b40566b8095a3a3a3a3a3a3907a65503b251000000000000000000000000000000000000000000004172a3a556a7f94a9abab9c87725443301c070000000000000000000000000e1e2e3f4b5761696e6f6c645c4a4336251300000000021527374758616e787d7e7b75675f4d41301a0a000000000000152a3f546a7f8a8a8a8a8a8a8a85705b382815020000000000000000000014293e53697e93a7b8ccd7c6bab4a49c938a827a70655e4c463a2b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daabbced0baa5907b65503b2610000f253a4f647a8fa4c8d8d5c5a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8196abc0c1ac97826c57422d170000000000000000000000000000000000000b20364b6075899eb4c9b39e8974604b35200b0000000000000000000000000f24394f647a8a8d8b8886858689909ba3b1bdcecebdb49e8a79634e3d2d1a0700000000000000000b2034485971869cb1bbc8c6b9a999846f5645311d0900000000000000000000000000000000000013293e53687e8d8d8d8d8d8d8d8d7d68533d2813000000000000000000000000000000000000000000000d23384d62788b959696968a75604a35200b0000000000000000000000000010212e39464c54595a574f4a3e3025180800000000081d3144556176838d929491887d675f4d38281603000000000012273d52677c929f9f9f9f9f9d88735645321d0900000000000000000004192f44596e8499aec5d6c8baa89f93877e766d645c504c4033291b0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4cad2bda8927d68533d2813000d22374d62778caabbced0baa5907b65503b26100000000000000000000000000000000000000000000000000000000000090f1113110b02000000000000000000000000000000090f110d0b0500000000000000000000000000000000000000000000000004192e43596e8398aec3bfaa947f6a553f2a15000000000000000000000000000000000000091d3145566e8499aec3b9a78f79644f3a240f0000000000000000000000000d22364a5c6476787673707071757b85979fb1bfd0cdb9a898836e5b4a36210b000000000000000005182b3b51667c919faaafaea89e8b7a644f382715020000000000000000000000000000000000000c21364b6175787878787878787876614c37210c000000000000000000000000000000000000000000000b2035485a647a808181818175604b36210b0000000000000000000000000002101b2933363e44454139362d1c130800000000000b20364b60748599a1a8a9a69e927d675645321e09000000000010253a4f657a8fa4b5b5b5b59f8a75604b36200b000000000000000000071c31465c71869bb1c6cebbaa9f8a7e736861574f4b3e382f1f170c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572889db2c7d5bfaa95806a55402b15000b20354b60758a9fb4c9d2bda8937d68533e281300000000000000000000000000000000000000000000000000000007121d242728261e130600000000000000000000000004121d24262220190d03000000000000000000000000000000000000000000000417293a5b71869bb0c6bca7927d67523d28120000000000000000000000000000000000000215273854697e93a9bec5a9937e69543e2914000000000000000000000000071b2d3e4a58616360575b5a556066738197a1b3c6d7c6b59f8c79634e3929170300000000000000000d24394d5e697f8b969999958a7c665c4a361a0a000000000000000000000000000000000000000a1e334657616363636363636363615847331f0a0000000000000000000000000000000000000000000006192b3c4a5c646b6c6c6c6c605745321e090000000000000000000000000000000b171e21292f2f2c24221b100000000000000013283e53687e93a3b2bfc5b8b39e8875604b36210b00000000000d22374d62778caabbcecfbcab8d78634d38230e000000000000000000071d32475c72879cb1c7cab49f8c7b6860554c4639372e23242c2c211f170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527375b70859ab0c5d7c2ad98826d58432d1800081c30435472879db2c7d5c0aa95806b55402b160000000000000000000000000000000000000000000000000005101b2230393c3d3a31241302000000000000000000000012222f383c38342b1e170b0000000000000000000000000000000000000000000a1f33465873889eb3c8c5a58f7a65503a25100000000000000000000000000000000000000010253a4f657a8fa4bac2ac97826d57422d180200000000000000000000000010202d3a474c4e4b453937444b54606f8399a8bacdcfbcab98836e5746331e0a00000000000000000a1d30404f6169798084847f77665e4c3e2d1b000000000000000000000000000000000000000003172939464b4e4e4e4e4e4e4e4e4c473a2a170400000000000000000000000000000000000000000000000e1e2e3e4a4f56565656564b453928160300000000000000000000000000000000030a0c14191a170f0d0700000000000000001a2f455a6f849aafc1cfd5cbb8a7907b66513b261100000000000b20354b60758a9fb4c9dac9a5907a65503b2510000000000000000000061b30455b70859ab0c5c4af99846f5d4b44373329222d363941413733291c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adc2d8c5af9a85705a3a2a1704011426365a70859aafc5d7c2ad98826d58432d180000000000000000000000000000000000000000000000030d19202d36404d51534e42311e0b000000000000000000000a1a2f404c514d483c33291b1305000000000000000000000000000000000000000c21364c61768ba6b8cbb8a78c77624c37220d000000000000000000000000000000000000000d22374c62778ca1b7c4af99846f5a442f1a0500000000000000000000000002101c2a333738363228273136434c62778a9fb4c9dac9b49f8a76614c36210c000000000000000000122232434f5b636b6f6f6a62594c402f20100000000000000000000000000000000000000000000b1b293336383838383838383837332a1c0c0000000000000000000000000000000000000000000000000010202e363a40414141413632281b0a00000000000000000000000000000000000000000000000000000000000000000000001c32475c71879cb1c6dce7d5c5a8937e68533e29130000000000081c30435472879db2c7d2bda8927d68533d281300000000000000000003182e43586d8398adc9c1ac96816c573f31262a2d363d4a4e57564c473a29180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac0d5c7b29d87725847331f0800182d43586d8298adc2d7c5af9a85705a362614010000000000000000000000000000000000000000010b171e2b343e4a4f5e6668604e3a2611000000000000000000021528384c5e66625a4b46393123140600000000000000000000000000000000000010253a50657a8fa5c4c8b39e88735947341f0b0000000000000000000000000000000000000b1721364b60768ba0b5c5b09b85705b46301b0600000000000000000000000000000c171f2123211e16151d263448596c8196acc3d4cdbaa9927c6752362513000000000000000000041424323d494e565a59554c473b2f221202000000000000000000000000000000000000000000000b171e212323232323232323211f170c000000000000000000000000000000000000000000000000000002101b22242b2c2c2c2c211e160a0000000000000000000000000000000000000000000000000000000000000000000000001b30455b70859ab0c4d4dacdbaa9917c67523c27120000000000011426365a70859aafc5d5bfaa95806a55402b150000000000000000000013283e53687d93abbcc4af9a856f5d4d40403f3e4a4f5b636c6b6158473625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdd2cab49f8a77614c36251300162b40556b8095aac0d5c7b29d87725443301c080000000000000000000000000000000000000009141d29333c484d5c64707c7e68533d2813000000000000000000091d324556667c786b61574e4131241402000000000000000000000000000000000014293e54697e93a9bec5af9a85705a3b2a180500000000000000000000000000000000000b1b2933364c61768ca1b6c5af9a85705a45301b05000000000000000000000000000000040a0c0e0b09030208182b3b4e63798ea5b7cad7c7ae99836e5443301c0700000000000000000006141f2c35384144444037342a1d1204000000000000000000000000000000000000000000000000030a0c0e0e0e0e0e0e0e0e0c0a040000000000000000000000000000000000000000000000000000000000070d0f16171717170b090300000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95a6b7c4c4bdb49f8a77614c37220c000000000000182d42586d8297adc2d7c2ad98826d58432d18000000000000000000000d22374c62778c9fb5c7b59f8d7b665e575555575c646d79818076615443301c0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbd0cebbaa937e695443301c0913283e53687d93a8bdd2c9b49f8a75604b35200b0000000000000000000000000000000000071219263139464b5a626d7a8591826d58432e180000000000000000000b20364b6074888a8076685f4e42311f0b0000000000000000000000000000000003162839586d8298adc2c0ab96816b56412c16000000000000000000000000000000000003172939464b54657a8fa5bac1ac97826d57422d18020000000000000000000000000000000000000000000000000d2136495b72879db2c7dcc9b49e8974604a35200b00000000000000000000000e1a212330303030302a27201507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c6176889da6aeafac9f95806b5847331f0a000000000000152b40556a8095aabfd5c5af9a85705a372614010000000000000000000b203448596d8298a9babcab9e897c726c6a6a6c7179828c96968372604a3d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3c5d5d8c8b19c8673604a37271511263b50667b90a5bbd0cebbaa8c77624d37220d000000000000000000000000000000050f1a212f37444b57616b78828d9a9b85705b3928160300000000000000061a2c3d52687d929f95887d68604e3a261100000000000000000000000000000000091e32465771869cb1c6c2a6917c66513c271100000000000000000000000000000000000a1e3346576167728399afc4b5a3917c66513c261100000000000000000000000000000000000000000000000000061a2c3d576d8297acc2d7ccb9a88d78634d38230e000000000000000000000b1b29323645454545453f3c3225150300000000000000000000000000000000000000030a0c0e0f0f0d0b090200000000000000000000000000000000000000000000050b0d131313131313131313131313100e0800000000000000000000000000000002090b13131313131313131313131312100a0100000000000000000000000a1f334758647a8793999a978f8172604b3a2a180400000000000013283d53687d92a8bdd2c7b29d87725544311d0800000000000000000005182b3b4d62788b9fb4bcb9a79e9187827f7f81868e989faba1937e695b4a36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba6b8cbdec9b5a4917c675544311d1023394e63788ea3c7d7d8c8a48f7a644f3a250f00000000000000000000000000030d181f2d36404c55606876808a989fab9d88735745321e09000000000000000c2135495b71859bb0a69e927e68533e2813000000000000000000000000000000000c21364b61768a9fb4cab6a48c77624c37220d00000000000000000000000000000000000c21364b61757d8399a1b3b5a69b8573604b35200b000000000000000000000000000000000000000000000000000014293f54697e94a9bed3d6c6a6917c67513c271200000000000000000003162939464b5a5a5a5a5a544f4332200c0000000000000000000000000000000000040b161e2123252422201d150c0a030000000000000000000000000000000000000d19202228282828282828282828282826231c11030000000000000000000000000a161e2128282828282828282828282827251e13050000000000000000000004172a3a4a5c64757e8385817a6c605443301c0c0000000000000010253b50657a90a5c9dacab49f8a75604b35200b000000000000000000000d2035495a687e939eb4bbb9b3a49c979594969ba3adb4bcb49f8b79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889eb3c8ddd2c2b19c8674604b3f2e1e21364b61768ba9bacdd1bca6917c67513c27120000000000000000000000000a161e2a343d4a4e5e66737e88959fa9b5b7a68b76604b36210b000000000000000e23384e63788da3b5b8af99846f5a442f1a0500000000000000000000000000000011263b50667b90aabbc7b19c87725948341f0b00000000000000000000000000000000000d22374d62778c99a1b3ab9f988778625443301c08000000000000000000000000000000000000000000000000000011263b50667b90a5bbd0d5bfaa95806a55402b150000000000000000000a1e324657616f6f6f6f6f69614f3c270e000000000000000000000000000000000c181f293236393a3937363127211e160b000000000000000000000000000000000d1d2b34383d3d3d3d3d3d3d3d3d3d3d3d3b382f211100000000000000000000000a1a2832363d3d3d3d3d3d3d3d3d3d3d3d3d3930231300000000000000000000000c1c2d3e4a5761696e6f6c645c4b4336261400000000000000000e23384d63788dabbccfcebbaa8d77624d38220d0000000000000000000006192c3c4e606b80939faab4c0b6b1acaaaaacb1b5c1bfb3aa9f937f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628385b71869bb0c6dbdecab6a495806a5d4b3c2d1e33465774899fb4c9d2bda8937d68533e28130000000000000000000008131c28323b484c5b636f7b86939ea6b4bac7c3a38e78634e39230e00000000000006192c3c556a8095aac1c5ab96816c56412c1701000000000000000000000000000006192c3c566b8096abc8c5ab96816b563b2a180500000000000000000000000000000000000b20354b60758a9fb4b59f8c82786259483626140100000000000000000000000000000000000000000000000000000e23384e63788da3c4d5d8c3ae98836e59432e190000000000000000000c21364b617584858585847f69543c2c190600000000000000000000000000000c1c2a3439464b4e4f4e4d4b45383632291b14020000000000000000000000000005192b3c484d525252525252525252525252504c3f2f1c0800000000000000000002162838454b525252525252525252525252524d41301909000000000000000000000010202d39464b53595a574f4b3e3026180800000000000000000b20364b60758a9fb5cad8c8a48f7a654f3a251000000000000000000000000e1e314251626b7e8c9aa2adb3b9c5bdbdbdc5b8b3ada1998c7e6a61503c2713000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aec3d8e5d3c2b49f8b7b645a4a3d3131445574899eb4c9d4bea9947f69543f2a140000000000000000061118253039454b59626d7984909ca4b3b8c4c9bcb5a58f7a644f3a250f0000000000000c2035495a72879cb1c7b8a7907b65503b25100000000000000000000000000000000c2135495b71879cb1c6b8a7907b65503b2510000000000000000000000000000000000000081c30435472879db2b49f8b827a6a614f4332201000000000000000000000000000000000000000000000000000000b21364b60768ba6b8cbdbc5b09b86705b3828160200000000000000000c21364b61768b9a9a9a9a87725a4935200c0000000000000000000000000004182a3a474c5761636464626056544b4639311d150a0000000000000000000000000b2034485a62686868686868686868686868655d4c38230e000000000000000000091e32455660686868686868686868686868675f4d372715020000000000000000000002101b2832363e4445423a372e1c1408000000000000000000091d31455673889db3c8d2bca7927d67523d2812000000000000000000000000142434445160697a848f989ea7a6a7a8a7a6a79e978f83796960504333200d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8196abc0d6ebe2cebbaa9e8878635b4b44384b60758a9fb4cad4bfaa947f6a553f2a15000000000000040f1a212e36434a57606a77828c9aa1b1b5c2c9c0b3ab9f988775604b36210b0000000000000e23384d63788da4b6c8b39e8874604b35200b0000000000000000000000000000000e23384d63788da4b6c8b39e8975604b36200b000000000000000000000000000000000000011426365a6f84969ea6aa9f988c7f6a614f3e2d1b0700000000000000000000000000000000000000000000000000091e32455673889eb3c8ddc8b39d88735645321e0900000000000000000b20354b60758aaaafafa58d78624d38230d000000000000000000000000000a1f344759617076787a7977756f6961574e4231271a0a00000000000000000000000d22384d62787d7d7d7d7d7d7d7d7d7d7d7d7b65503b26100000000000000000000b21364b60747d7d7d7d7d7d7d7d7d7d7d7d7d675544311d080000000000000000000000000b161e212930303030302320190e000000000000000000021527385b70859bb0c5d4bfaa947f6a553f2a1500000000000000000000000006162634424f5c646f7b83898d90929392908d88827a6f635b4f423325150300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bed3e8dccec8b8a69d88796960555456647a8faabbcedac9a8927d68533d281300000000020c181f2c353f4b546068757f8a979fabb3bfc9c2b5b1a29a8d8277625645321e0900000000000114263654697e93a9c2c2ad98836d5544311d0800000000000000000000000000000013293e53687e93a8c2c3ac97816c5544311d080000000000000000000000000000000000000011263b51667c81889ba3b4ab9f947f695c4a36220d00000000000000000000000000000000000000000000000000021628385b70869bb0c5dbcbb8a68b76604b36210b0000000000000000081c304354758a9fb4c3a8937e6853392816030000000000000000000000000c22374c6177848a8e8f8e8c8a847e7568604b4538271502000000000000000000000f253a4f647a8f929292929292929292929285715b3929170300000000000000000b20354b60758b92929292929292929292928c74604b36200b00000000000000000000000012222f383b454545454538352b1e0e000000000000000000192e43586e8398adc3d7c1ac97826c57422d1700000000000000000000000000081624323e4a4f5d656d74787b7d7e7d7b78746d655d4e4a3d322415070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbd0e1cebeb1adb4a69d8a7e746c696a74849aafc8d9cfbcab907b66513b26110000000a151d2a333d494e5d65727d88959ea8b4bcc9c4b7b2a49c9084796d625948382816020000000000081c3043546f8499aec4c6a8927d685337271501000000000000000000000000000000152a3f546a7f94a4b4b6a58f7a654f37271502000000000000000000000000000000000000000f24384c5e666c76859bb0bcb49f8c7a644e3b2a180500000000000000000000000000000000000000000000000000192e43596e8398aec3d8d5c4a38d78634e38230e0000000000000000011426495f74899eb4c3ae98836e5745321e0f0100000000000000000000000b20354b60758a9faaa4a3aa9f9a93887e6d605645311d14000000000000000000000d22374c62778ca9a7a7a7a7a7a7a7a7a79e89735746331e0a0000000000000000081d31445572879da7a7a7a7a7a7a7a7a7ab8d78634d38230e0000000000000000000000091c2f404c515a5a5a5a5a4d483c2b19060000000000000001162b41566b8096abc0d5c4af9a846f5a36251300000000000000000000000000000614202d363f4b5054606366686868666360544f4b3f362d1f140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c6d6dac5b1a0979faaa89f9488817e80869aa2b3c7dfcab59f8b77614c37220c00000a1a28323a474c5b636e7b85929da6b4b9c6c6b9b3a69d92867b6f645c4c483b2a1a0a0000000000000b20354b6074899eb3c9b9a88d78634d38230e000000000000000000000000000000000c21374c617686959fa99c8773604a35200b0000000000000000000000000000000000000000091d2f404c515863798ea2b4bbaa99846f5948341f0b00000000000000000000000000000000000000000000000001162b41566b8096abc0d5d0baa5907b65503b26100000000000000000001e33495e73889eb3c8b39e8975604b3c2c1f110300000000000000000000081d31445571869bb1c8c8bbb4afa69e938274604b42321c0c0000000000000000000b20354a60758a9fb4bdbdc2b6b1b1b1b1a78b76614b36210c0000000000000000011426375a6f849aafb1b1b1b2b6c3bdc9a5907a65503b251000000000000000000000000f24384c5e666f6f6f6f6f625a4835200b000000000000000013293e53687e93a8bdd3c7b19c87725443301c07000000000000000000000000000002101b222e3736434a4e51525352514e4a4336372e211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8b9ccd7c2ad97828c9fb4b4a69d9794959ca4b3c0d0d4c4b19b86715947341f0a0002152838454b58616c79838f9ba3b2b7c4c8bbb4a89e94877d73665e4e4a3e342a1d0d000000000000000e24394e63798ea7b9c9b39e8974604a35200b000000000000000000000000000000000a1f3347586175808a97937e695443301c0700000000000000000000000000000000000000000012222f383a4a5b70859bb0c8b59f8c77624c37220d0000000000000000000000000000000000000000000000000014293e53697e93a8bed3d2bda8927d68533d28130000000000000000071c31465c71869bb1c6b9a7937e685a493d2e21140400000000000000000001152737586d8298adbac7c1c9c4b8b3a097826d614f3a2a18040000000000000000071c30435472879cb2c7cab6a49c9c9c9c9b8a75604b36210b00000000000000000014293e54697e939b9c9c9c9ca5b6cabda8927d68533d2813000000000000000000000011263b51667c848585858478624d38230d000000000000000011263b51667b90a6bbd0c9b49f8975604a35200b0000000000000000000000000000000007111c23253035383b3d3e3d3b38353025221b100700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb3c9d3bea9947f7e939fabb8b3aca9aab1b6c2d0d6c7b7a6937e69543a2a180400091d324556606977818b99a1b0b5c1c8bbb4aa9f96897f756860544c40362d1f180d000000000000000013283e53687d93a8c5c5af9a85705443301c07000000000000000000000000000000000417293a4757616b77828976614c3625130000000000000000000000000000000000000000000004121d242d3d556b8095aac0bcab927c67523d27120000000000000000000000000000000000000000000000000011263b51667b90a6bbd0d5c0aa95806b55402b16000000000000000003182d42586d8297adbdc5b39e8978635b4b3f321f170c00000000000000000014293f54697e949fa9a3acb1bdcbbeb1a0937e695947341f090000000000000000001325365a6f849aafc4c6b19c86878787857d675645321e090000000000000000000b20354b60727f86878787879cb2c7bfaa95806a55402b15000000000000000000000013283e53687d939a9a9a927d68533d281300000000000000000e24394e63798ea3c5d6cdbaa98c77624c37220d0000000000000000000000000000000000000808131c2023262829282623201c130808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5c71869cb1c6d6c1ab96816c7e8d9ea7b5bcc9bfc6cad3cdc6b9a99d8875604b36210c00000b20364b60747f89969faab3bfc2b5b1aa9f988b81776a60564b43362f211a0f05000000000000000002172d42576c8297acc1c1ab96816c563625130000000000000000000000000000000000000c1c2939464b59626d776157463318080000000000000000000000000000000000000000000000000912273c52677c91a7bcc9aa95806b55402b16000000000000000000000000000000000000000000000000000e24394e63798ea3c5d6d7c2ad98826d58432d180000000000000000000f24394f647a8e9fb0bfb9a79d8779655d4f4233291c0f01000000000000000d22384d627886898b8e979fb0bccdbeb49e8977614c372614010000000000000000182d42576d8297acc2b7a28d7871717170675f4d38281603000000000000000000081c304354606a70717171778ca9bac2ad98826d58432d18000000000000000000000013293e53687e93a8afad98836d583c2c1906000000000000000c21364c61768ba7b9ccd7c7a48f79644f3a240f000000000000000000000000000000000000000000070b0e11131313110e0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4d9c3ae99846e687c89989fabb3b8c5bdc6b9b4a89e8b7b655645321e090000182d42586d82949ea7b4bbc8c9b5a39b948b83786c61584b453830261811070000000000000000000004182a3a5b70859ab0c5bda7927d68523d2813000000000000000000000000000000000000000c1b28323b484d59615947392917000000000000000000000000000000000000000000000000000010253a4f657a8fa4bac1ac97826c57422d17020000000000000000000000000000000000000000000000000c21364b61768ba7b8ccdac5b09a85705b3727150100000000000000000d22364a5c6c8196a1b2beb7a59d897b69614c463a2c1f0f010000000000000b2035485a627174757981959eb0c7ccb9a896806b5544311d080000000000000000152a3f556a7f94aabfbaa58f7a655c5c5b524d41301a0a0000000000000000000001142636434b555b5c5c5974899fb4c5af9a85705a372715010000000000000000000013293e53687e93a8bdb39d88735a4935200c000000000000000a1e33465774899eb3c9d1bca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acc1d6c6b19b86715e6677828c979ea6a6a8a7a89e98897d675d4b382816020000172c41566c8196abb9c5ced8c6b19b867f786e635a4c473a32281c14080000000000000000000000000a1f33475874899eb3c9c6a48e79644f39240f00000000000000000000000000000000000000000b161e2b343b474c473b2a1b0b00000000000000000000000000000000000000000000000000000e24394e63798ea3b8c3ad98836e58432e19030000000000000000000000000000000000000000000000000a1e33465773899eb3c8ddc7b29d88725544311d080000000000000000071b2d3e4b60738398a0b4bcb7a79e8b7e6e6158493d2d1f0f00000000000005192b3c484d5c5560636c8095a9bacdc6b39d8874604b35200b000000000000000012283d52677d92a7bcbda7927d685247463c3930231300000000000000000000000008182630354046473b5c72879cb1c7b29d87725544311d080000000000000000000013293e53687e93a8bdb7a68d78634d38230e00000000000000031729395c71869bb1c6d4bea9947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9bed4c8b39e89735759626d7981888e9193928f898278675f4d3f2e1a0a00000014293f54697e94a7b3b8c5cbc9b49e8a837d756a61584c473b342b20190e07000000000000000000000c22374c61778ca7b9ccbaa88c76614c37210c000000000000000000000000000000000000000000030d18202a3437342a1d0c0000000000000000000000000000000000000000000000000000000e23384d63788da2b8c4ae99846f59442f1a04000000000000000000000000000000000000000000000000031729395c71869bb1c6dbcab49f8a75604b35200b000000000000000000101d314455607482949fabb9b9a99f938376635b4a3d2d1d0d0000000000000e1e2b353837444b4e61768a9fb4c9cbb8a68f7a65503a2510000000000000000010253a50657a8fa5c8bfaa957f6a55403027251d13050000000000000000000000000008141c202a3132455a6f849aafc4b49f8a75604b35200b0000000000000000000013283d53687d92a8bdc4a7927d68523d28130000000000000000192f44596e8499aec3d6c1ac96816c57412c170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcd1ccb8a78b76614b4c5b636c74787c7d7c7a766d625a4d41302111000000000f243a4f647a89949ea7b3b8c4b9a89e99928980766b62594d483c352c211a0f0700000000000000000f24394f64798ea4c5c9b49f89745847331f0a0000000000000000000000000000000000000000000000050c181f221f180c000000000000000000000000000000000000000000000000000000000e23384e63788da3b8c4af99846f5a442f1a0500000000000000000000000000000000000000000000000000192e44596e8399aec3d8cebbaa8d77624d38220d000000000000000000021527374556606e7f8d9ea7b6bab4a1998779635b4a3b2b19050000000000000e19202227313646586f859aafc4d5c4a9947f6a543f2a1500000000000000000d22384d62778daabbc2ad97826d58422d18100a0100000000000000000000000000000001080b151b2d42576c8297acc1bbaa8d77624d38220d0000000000000000000013283d52687d92a7bdc2ac97826d573828160300000000000002172c41576c8196acc1d6c4ae99846f59442f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7d6c5a38e79634e3d4a4e5460636768676561574d483c30231203000000000d22374b5c64767f89949ea6b3b7b9b4aea79e958a80776c625a4d493c362d221b100700000000000012273c51677c91a6bcc7b19c87725c3a2a170400000000000000000000000000000000000000000000000000040b0c0b0400000000000000000000000000000000000000000000000000000000000e24394e63798ea3b8c4af9a846f5a452f1a0500000000000000000000000000000000000000000000000001172c41566c8196abc1d6d9c8a58f7a65503a25100000000000000000000009192838454b61697c899ca4b4bfb2a59c897963594834201200000000000000050b0d151d293a566b8196abc0d6c3ad98836e58432e1900000000000000000b20354b60758a9fb4c4af9a856f5a36261401000000000000000000000000000000000000000000152a3f556a7f94aabfc8a58f7a65503a25100000000000000000000012273c51677c91a6bcc6b19c86715645321e090000000000000014293f54697e94a9bed3c6b19c86715c3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9bacdd0bba6907b66513b3636434b4e515352504b4639352b1e12040000000000071b2e3e4b57616a757f88949da6b2b7c4b8b3a89e968a81786d635a4e4a3d362d211a0f010000000014293e53697e93a8bec4af9a846f5a452f1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b9c4af9a846f5a452f1a050000000000000000000000000000000000000000000000000014293f54697e94a9bed3d2bca7927d67523d281200000000000000000000000a1a2832434f5e6679869aa2b4c0b6a79d8878624d40301d0a0000000000000000000214293e53697e93a8bed3c6b09b86715b3928160300000000000000081d31445572879db2c7b29d87725443301c0800000000000000000000000000000000000000000012273d52677c92a7bcbca7927d67523d28120000000000000000000010263b50657b90a5bacab49f8a76604b36210b0000000000000012273c51677c91a6bcd1c9b49e89745847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c9d3bda8937e68533e29263035393c3e3d3a36322820190e000000000000000010202e39464c576169757e88939da6b2b7c3b9b4a99f968b82786d635b4f4a3e362d1f0f01000000152a40556a7f95aabfc2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000002080b111313131313100e0800000000000000000000000000000010253a50657a8fa5bac5af9a85705a45301b050000000000000000000000000000000000000000000000000011273c51667c91a6bbd1d4bfaa957f6a55402a150000000000000000000000000a151d32404c5b6376849aa2b4c5b7a699846f5e4d39240f0000000000000000000011263b51667b90a6bbd0c8b39e88735746321e0900000000000000011426375a70859aafc5b49f8a75604b35200b00000000000000000000000000000000000000000010253a4f657a8fa4c7bfaa957f6a55402a15000000000000000000000f243a4f64798fa4c8cebbaa8f7a644f3a250f000000000000000f243a4f64798fa4c7d7ccb9a88c76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c7d5c0ab96806b56412b141c202327282725211e160b0500000000000000000002101b293339464b576069757e87939da5b2b6c3bab4aa9f978b82796e645c4e4a3d2d1f0f000000172c41576c8196acc1c0ab96816b56412c16010000000000000000000000000000000000000000000000000000000000000009151d2026282828282825231c11030000000000000000000000000010263b50657b90a5bac5b09a85705b45301b06000000000000000000000000000000000000000000000000000f24394f64798ea4c6d6d7c2ac97826d57422d18000000000000000000000000000215222f3d49586175849aa7b8c4b3a1917c66513d2c1a060000000000000000000e24394e63798ea3c5d6ccb8a78b76614b36210c0000000000000000182d42586d8297adc2bbaa8c77624d37220d0000000000000000000000000000000000000000000d22374d62778ca9bac2ad97826d58422d18000000000000000000000d22374d62778caabbcec8a7927d68523d2813000000000000000c22374c61778ca9bacdd6c6a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafc4d8c3ad98836e58432e19080b0e121312100c0903000000000000000000000000000b171e293239454b566069747e87929ca5b1b6c2bbb4aa9f988c837a6f635b4a3d2d1a070000182d42586d8297adc2bfaa947f6a553f2a150000000000000000000000000000000000000000000000000000000000000009192731363b3d3d3d3d3d3b372f21110000000000000000000000000011263b50667b90a5bbc5b09b85705b46301b06000000000000000000000000000000000000000000000000000c21374c61768ca8b9cdd9c4af9a846f5a362513000000000000000000000003000003111f2c3a46576277899eb3c6bfb09b85705b4935210c0000000000000000000c21364c61768ba7b9ccd5c5a38e78634e39230e0000000000000000152b40556a8095aabfc8a48f7a654f3a25100000000000000000000000000000000000000000000b20354b60758a9fb4c4af9a856f5a362614010000000000000000000b20354b60758a9fb4cac0ab95806b56402b16010000000000000b1f34475974899fb4c9d0bba6917b66513c261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2d7c5b09b85705b382815020000000000000000000000000000000000000000000000030b161e283238454b566068747d87929ca4b1b5c2bbb4ab9f998e8479635b4a36210c0000182e43586d8398adc2bea9937e69543e291400000000000000000000000000000000000000000000000000000000000008182737444b515353535353504b3f2f1c0800000000000000000000000010253a4f657a8fa4bac6b19c87715c47321c00000000000000000000000000000000000000000000000000000a1f33475874899eb4c9dcc7b29c87725443301c07000000000000030c121419100e09000e1c29394859687e93a8bac9b5a38d78634e38230e0000000000000000000a1e33465774899eb3c9d0bba5907b66503b2611000000000000000013283d53687d92a8bdbca7927c67523d2712000000000000000000000000000000000000000000081c30435472879cb2c7b29d87725443301c08000000000000000000081d31445573889db2c8c3ae98836e59432e190000000000000004182a3b5c72879cb1c7d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfd4c8b39d88735645321d0900000000000000000000000000000000000000000000000000030a161e283238454b556068737d86919ca4b1b5c1bcb5aea1998a79634e39240e0000192e43596e8398aec3bda8937e68533e2913000000000000000000000000000000000000000000000000000000000000132536445560666868686868655d4b37230e0000000000000000000000000e24394e63798ea3c6c8b39d88735e3a2917040000000000000000000000000000000000000000000000000004172a3a5c71879cb1c6dcc9b49f8a75604a35200b0000000000071520272a2e26231c11050c1b2a3b4b6176899fb4c9c1a8937e68533e2913000000000000000000031729395c71869bb1c6d3bda8937e68533e2913000000000000000010253b50657a90a5c9bfaa947f6a553f2a15000000000000000000000000000000000000000000011426365a6f859aafc4b49f8a75604b35200b000000000000000000011426375b70859bb0c5c6b09b86715b39281603000000000000001a2f455a6f849aafc4d6c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2cab59f8a75604b36200b000000000000000000000000000000000000000000000000000000030a161e273137444b556067737c86919ba3b0b5c1bfb3a896816c57412c170000192e43596e8398aec3bda8937d68533e28130000000000000000000000000000000000000000000000000000000000071c30435460747b7d7d7d7d7d7b65503b25100000000000000000000000000d22384d62778da8b9c9b49f8a745847331f0a00000000000000000000000000000000000000000000000000001a2f44596f8499aec4d9cdbaa98c77624c37220d00000000041525323b3f433b382f20190e0d1e32465771869cb1c6c2ad97826d58422d1800000000000000000000192f44596e8499aec3d5c0ab95806b56402b1601000000000000000e23384d63788dabbcc1ac97826c57422d1700000000000000000000000000000000000000000000182d42576d8297acc2bbaa8c77624d37220d00000000000000000000192e43586e8398adc3c8b39e88735746321e0900000000000002172d42576c8297acc1d7c3ae99836e59442e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8d9cfbcab8d78634d38230e0000000000000000000000000000000000000000000000000000000000020a151d273137444b546067737c86919ba3b0b4c1af9a846f5a3625130000182e43586d8398adc2bda8937e68533e291300000000000000000000000000000000000000000000000000000000000b20354a60728390929292929284705a3727150100000000000000000000000b20354b6075899eb4c9baa98c76614c37210c0000000000000000000000000000000000000000000000000002172c42576c8197acc1d6d7c7a48f79644f3a240f00000000122232434f5458504c3f352b211e1d2c3c5a6f859aafc4c3ae99846e59442f1900000000000000000001172c41566c8196abc1d6c3ad98836e58432e1900000000000000000b20364b60758a9fb4c4af9a846f5a36251300000000000000000000000000000000000000000000152a40556a7f95aabfc8a48f7a654f3a251000000000000000000001162b40566b8095abc0ccb8a78b76614b36210c00000000000000152a3f556a7f94aabfd4c6b09b86715b392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daabbcedac9a5907a65503b2510000000000000000000000000000000000000000000000000000000000000000209151d263136434b546067717c85909ba3afb29c87725443301c0700182d42576d8297acc2bea9947e69543f291400000000000000000000000000000000000000000000000000000000000f253a4f647a8fa2a8a8a8a89d87725544311d080000000000000000000000081d31445570859ab0c5c7a48f7a644f362616100e090000000000000000000000000000000000000000000000142a3f54697f94a9bed4d1bca7917c67523c271200000008182f404f61696e655d4d483c36333137495a71879cb1c6c5b09a85705b45301b0000000000000000000014293f54697e94a9bed3c5b09b85705b3827150200000000000000081d31445573889db2c7b19c87725443301c0700000000000000000000000000000000000000000012283d52677d92a7bcbca7927c67523d27120000000000000000000013293e53687e93a8bdd5c5a38e78634e39230e0000000000000012283d52677d92a7bcd2c8b39e88735746321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4cad2bda8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000109141d263036434a515e66707b85909aa29f8a75604a35200b00172c42576c8197acc1bfaa947f6a553f2a15000000000000000000000000000000000000000000000000000000000011263c51667b91a6c0bdbdb49f8a75604b35200b000000000000000000000001142637566c8196abc2bea9947f695443322826231c110300000000000000000000000000000000000000000012273c52677c91a7bcd1d4bea9947f69543f2a140000001325364c5e697f837b6e625a504b46444b5562788c9fb5cac4af9a856f5a45301a0000000000000000000012273c51677c91a6bcd1c8b29d88735645311d0900000000000000021527375b70859bb0c5b49f8975604a35200b00000000000000000000000000000000000000000010253a50657a8fa5c8bfaa947f6a553f2a150000000000000000000011263b51667b90a6bbd0bba5907b66503b26110000000000000010253a4f657a8fa4c8d8ccb8a78b76614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572889db2c0c0bfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000108141c253035404c515e66707b858f9a8c77624d37220d00162c41566b8196abc0c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c6d7cebbaa8d78624d38230d00000000000000000000000010253a4f657a8fa4b6c7b19c8673604b45383b382f21110000000000000000000000000000000000000000000f253a4f647a8fa4c7d7d6c1ac97816c57422c170200071c304354667c90989083786d666157556065738399abbccfc9ad98836d58432e18000000000000000000000f24394f64798ea4c6d7cab59f8a75604b36200b0000000000000000182e43586d8398adc2baa98c77624c37220d0000000000000000000000000000000000000000000d22384d62788daabbc1ac97826c57422d17000000000000000000000e23394e63788ea3c5d5bda8937e68533e2913000000000000000d22384d62778daabbced5c5a38e78634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527375b70859aababababab97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000108131c202f38404c505d65707a848f7a644f3a250f00152a40556a7f95aabfc1ab96816c56412c1701000000000000000000000000000000000000000000000000000000000c22374c61778ca8b9cdd9c8a58f7a65503a25100000000000000000000000000e23374b5d72869cb1c0b6a4947f6a605659504c3f2f1e0e00000000000000000000000000000000000000000d22374c62778ca9bacdd9c4ae99846f59442f1a00000b20354a6073869bada0988b827b767473757a8499a1b3c9cfbcab937e69533e2914000000000000000000000c22374c61778ca8bacdcfbcab8d78634d38230e0000000000000001162b40566b8095abc0c7a48f7a644f3a250f0000000000000000000000000000000000000000000b20354b60758a9fb4c4af9a846f5a362513000000000000000000000c21364b61768ba7b8ccc0ab95806b56402b16010000000000000b20354b60758a9fb4cad0bba5907b66503b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d829595959595959585705a45301b0500000000000000000000000000000000000000000000000000000000000000000000000000000007121d242f383f4b505d656f7a79634e39240e0013283e53687d93a8bdc3ae98836e59432e19000000000000000000000000000000000000000001080b10131514120d0b1f34475974899eb4c9d2bda7927d68523d2813000000000000000000000000081c2e3f53687e93a2b4c2b59f8d7f75706e655d4c3c2b1905000000000000000000000000000000000000000b20354a60758a9fb4c9dbc6b19c86715c3a2917040012273c52677c91a3b5b2aa9f98908b89888a8f9aa2b3bfd0c5b59f8c78624d38230d000000000000000000000a1f34475974899fb4c9dac9a5907a65503b2510000000000000000013283e53687d93a8bdbca7917c67523c2712000000000000000000000000000000000000000000081d31445572889db2c7b29c87725443301c07000000000000000000091e32465773899eb3c8c3ad98836e58432e1900000000000000081d31445572889db2c7d3bda8937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667c808080808080807f69543f291400000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c232f383f4b505c64635b4a36210c0011263c51667b91a6bbc5b09b85705b3726140100000000000000000000000000000000000208141c2025282a2a272220192a3b5c71879cb1c6d4bfaa957f6a55402a15000000000000000000000000001120354b6073849aa7b7bcab9f948985837b655a4835200b00000000000000000000000000000000000000071c30435472879cb2c7dcc9b49e89745847331f0a001b30455a708599a1b4b9bbb4ada5a89e9e9faaafb4c0d0c7b8a798836e5a4935200b0000000000000000000004182a3a5c72879cb1c7d2bda7927d68523d2813000000000000000011263b50667b90a5bbbfa9947f6a543f2a15000000000000000000000000000000000000000000011426375a70859aafc5b49f8a75604a35200b000000000000000000031628395b71869bb0c6c5b09b85705b38281502000000000000011426375b70859ab0c5d5c0ab95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24384c5e666b6b6b6b6b6b6b69614f3b2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c232e373e4b4f4e4a3d2d1a07000f24394f64798ea4c6c8b29d88735544311d08000000000000000000000000000000000a151d2630353a3e403f3c37342b2f44596f8499aec4d7c2ad97826d58422d1800000000000000000000000000081c3043546378899da5b5bcb5a89e9a988c78624d38220d00000000000000000000000000000000000000001325365a6f849aafc4cdccb9a88c76614c37210c000c22374c617783949ea8b4bac7c6b9b4b3b4bbc8c8cac3b6a99e8978624d3c2b190600000000000000000000001a2f445a6f8499afc4d5bfaa95806a55402b1500000000000000000e23384e63788da3c4c1ac97816c57422c1702000000000000000000000000000000000000000000182d43586d8298adc2baa98c77624c37220d00000000000000000000192e44596e8399aec3c8b39d88735645321d0900000000000000182d43586d8298adc2d7c2ad98836d58432e1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c5156565656565656544f43321f0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111c232e373a39362d1f0f00000d22374d62778ca8bacab49f8a75604b35200b0000000000000000000000000000000d1a273136434b4f535554524d483b3941576c8196acc1d6c5af9a85705a3726140100000000000000000000000001142636495a637987989fabb3b7b4b0aa917c66513c27110000000000000000000000000000000000000000182d42576d8297acb8b8b8c6a38e79644e39240f000b1f34475961727f89969fa9b2b6c3c0c1c3c2c0c3b7b2a59d8b7b655a49351e0e000000000000000000000002172d42576c8297acc1d7c2ad97826d58422d1800000000000000000b21364b60768ba6b8c4af99846f5a442f1a00000000000000000000000000000000000000000000152b40556a8095aabfc7a48f7a644f3a250f00000000000000000001162c41566b8196abc0cab59f8a75604b36200b00000000000000162b40556b8095aac0d5c5b09b85705b382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f383b404040404040403f3b3225140300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b222524211a0f0100000b20354b6075899fb4c9bbaa8d78634d38230e00000000000000000000000000000d1d2b38454b546065686a69676259514c4054697e94a9bed3c7b29d87725544311d080000000000000000000000000008182c3c495b6377828c979da6a6a8a9947e69543f29140000000000000000000000000000000000000000152a3f556a7f94a3a3a3a3a3a3917c66513c27110004182a3b4754606977818b959da5a7aaacadadaba8a59d93877a655d4b3c2c1900000000000000000000000000152a3f556a7f94aabfd4c5af9a85705a3626140100000000000000091e32455673889eb3c6b19c87715c3a2a180400000000000000000000000000000000000000000013283d53687d92a8bdbca7917c67523c27120000000000000000000014293e54697e93a9becfbcab8d78634d38230e0000000000000013283e53687d93a8bdd2c8b29d88735645311d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121c24262b2b2b2b2b2b2b29271f1406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f0e0c0700000000081c30435470869bb0c5c8a6917c67513c2712000000000000000000000000000c1d2b3b4856606a747a7d7f7f7c7770665e4c51667c91a6bbd1cab49f8a75604b35200b00000000000000000000000000000e1e2c3d4959626d7982888e91939495816c56412c17000000000000000000000000000000000000000012283d52677d8d8d8d8d8d8d8d8d7e69543e291400000c1d2a36434a59616c7880878d929597989796938e877e75645c4b3f2e1e0e0000000000000000000000000012273d52677c92a7bcd1c7b29d87725443301c0800000000000000021628385b70869bb0c5b49e89745847331f0a00000000000000000000000000000000000000000010253b50657a90a5c9bfa9947f6a543f2a150000000000000000000011273c51667c91a6bbdac9a5907a65503b25100000000000000010263b50657b90a5bad0cab49f8a75604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f111616161616161614120c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636576d8297acc2c0aa95806b55402b1600000000000000000000000004182a3b485962747f888f939594918c857c6f625964798ea3c5d6cebbaa8d78624d38220d0000000000000000000000000000000f1f2c3b484d5c646d73797c7e7f807d67523c271200000000000000000000000000000000000000000c21364b6175787878787878787876614c37220c0000000c1825303a474c5a626a72787c80828382807e79726960574a3e2e2111000000000000000000000000000010253a4f657a8fa4c8d8cab49f8a75604b35200b0000000000000000192e43596e8398aec3b9a88c77614c37220c0000000000000000000000000000000000000000000e23384d63788dabbcc1ac97816c57422c17020000000000000000000f24394e64798ea3c6d6bda8927d68533d2813000000000000000e23384e63788da3c4d5cfbcab8d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9c7c4ae99846f593d2d1a0700000000000000000000000b1f344759627786949da6a8aaa9a7a29a9184776461768ba7b9ccd8c8a58f7a65503a2510000000000000000000000000000000010f1d2b343e4a4e585b6367686a6b675f4d3925100000000000000000000000000000000000000000091e324657616363636363636363615847331f0a0000000008131c2a343c484d555a63676b6c6e6d6b69635b544b45392d20110300000000000000000000000000000d22384d62778daabbcecebbaa8c77624d37220d0000000000000001162b41566b8096abc0c6a48e79644f39240f0000000000000000000000000000000000000000000b20364b60758a9fb4c4af99846f5a442f1a000000000000000000000c21374c61768ca8b9ccbfaa95806a55402b15000000000000000b21364b60768ba6b8cbd9c9a5907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d131517171717171612100a0000000000000000000000080e1016171717171712100a0100000000000000000000000000080e101414140d0b0500000000000000000000000000000000000000000000000010253b50657a90a9bac8b39d88735b4a36210c00000000000000000000081c2f3f4c6177879ca4b3b8c4bfbec0b4b0a19a887a6574899eb3c9d2bda7927d68523d281300000000000000000000000000000000000d18202d36393d4a4e51535556524d41301e0a000000000000000000000000000000000000000003162839464b4e4e4e4e4e4e4e4e4c473a2a18040000000000000c181f2b35383c494d525557585856534e4a3d3632281b10020000000000000000000000000000000b20354b60758a9fb4cad8c8a48f7a654f3a2510000000000000000014293e53697e93a8bebca6917c67513c2712000000000000000000000000000000000000000000091d31455673889db2c6b19c87715c3b2a18040000000000000000000a1f33475874899eb4c9c2ad98826d58432d1800000000000000091e32455673889eb3c8d2bda7927d68523d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520282a2c2c2c2c2c2c27241d12040000000000000002101b22252c2c2c2c2c2c27251e13050000000000000000000003111c23252929292220190e00000000000000000000000000000000000000000000000b21364b60768a9fb4c9b8a68e79634e39240e000000000000000000000e23384b5d6e8398a5b5c2cbd5cfcac3bdbfb3a69d8a7b71869bb1c6d4bfaa957f6a55402a1500000000000000000000000000000000000005101b22242d36393c3e3f403c39302313010000000000000000000000000000000000000000000b1b283236383838383838383837332a1c0c0000000000000000040e1920222c35383d40424342413e39362d211e160a0000000000000000000000000000000000081c30435472879db2c7d1bca7927c67523d2712000000000000000011263b51667b90a6bbbea9947e69543f2914000000000000000000000000000000000000000000021527385b70859bb0c5b49f89745947341f0b00000000000000000004172a3a5c71869cb1b8b8af9a85705a37261401000000000000021628385b70869bb0c0c0bfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525333c404141414141413c393022140600000000000210212e373a4141414141413d393023130100000000000000000011212f383b3e3e3e38352b1e0e00000000000000000000000000000000000000000000091e3245576f859aafc4c4a9937e695438281502000000000000000004182a3a50657b90a0b2c3d2d8c9bcb4ada8a9afb3a89e89788399aec3d7c2ad97826d58422d180000000000000000000000000000000000000000070d0f1a212427292a2b27251e130500000000000000000000000000000000000000000000000b161e212323232323232323221f180c0000000000000000000000050b0e192023272b2d2e2d2b2923211a0f0903000000000000000000000000000000000000011426365a70859aafc5d4bfaa947f6a553f2a1500000000000000000e24394e63798ea3c5c1ac96816c57412c1702000000000000000000000000000000000000000000182e43586d8398adc2baa88c77614c37220c000000000000000000001a2f44596f8499a3a3a3a39d87725544311d0800000000000000192e43596e8398ababababab97826d58422d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2033435055575757575756514d40312414000000000010202e3f4b4f565757575757524d41301e0a0000000000000000081c2f3f4b505454544d483c2b190500000000000000000000000000000000000000000003162839546a7f94a9c5c4ae99846f5645321d0900000000000000000a1f3347586e8399aebecfd8c8bbab9f98939499a1b3a79c868197acc1d7c5af9a85705a3726140100000000000000000000000000000000000000000000070c0e1213151612100a010000000000000000000000000000000000000000000000000003090c0e0e0e0e0e0e0e0e0c0a04000000000000000000000000000000060c0e121617191816140e0c0700000000000000000000000000000000000000000000182d43586d8298adc2d7c1ac97826c57422d1702000000000000000c21364b61768ba7b8c3ae99846e59442f1900000000000000000000000000000000000000000001162b40566b8095abc0c6a48f79644f3a240f00000000000000000002172c42576c818d8d8d8d8d8d8c74604b35200b00000000000001162c41566b809595959595959585705a45301b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283c50616a6c6c6c6c6c6b675f4e42311d0d00000009192e3f4b5d656b6c6c6c6c6c675f4d3925100000000000060c0e0b23384b5d65696969625a4835200b0c0d0b050000000000000000000000000000000000000f24394f64798ea6b8c9b49e8975604b36200b00000000000000000c22374c61778b9fb4cadfcebbaa9f8d837e7f848f9ea6a49c899fb4c9dcc7b29d87725544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5c4af99846f5a442f1a00000000000000000a1e32465773899eb3c6b19c86715c3a29170400000000000000000000000000000000000000000013283e53687d93a8bdbca6917c67513c2712000000000000000000000c22374c61767878787878787972604b35200b0000000000000010253a4f657b808080808080807f69543f291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f8181818181817c68604e3b2a180500011426374b5d657b8181818181817d67523d2712000000010f1a212320253b50657b7e7e7e78624d38221e212220180d00000000000000000000000000000000000b20354b6074889eb3c8b9a8917c6651392917030000000000000011263c51667b91aabbcedfcab49f8c7c6e68696f7b889da6a89fa8bacddfcab49f8a75604b35200b0000000000000002080b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0a04000000000000000000010a10121e1e180c0a030000010a10121e1e180c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdd2c7b19c87725c3b2a180400000000000000031629395c71869bb1c6b39e89745846331f0a00000000000000000000000000000000000000000011263b50667b90a5bbbea9947f69543f2a14000000000000000000000a1f3347586163636363636363605443301c08000000000000000e23374b5d656b6b6b6b6b6b6b69614f3b27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e939696969696917e685948341f0e00081d314455647b8b96969696968a79644e39240f0000000f1f2c3538353040556b809393927d67523d29333637342b1d0d00000000000000000000000000000000081c3043546c8197acc3c6ae98836e5746331e0a00000000000000162b40556b8095aac8d9d4c3ab96816b5e53545d6578889da9b4bac6d7e2cebbaa8d78624d38220d00000000000009151d202222222222222222222222222222222222222222222222222222222222211f170c0000000000000005131e252833332d211e160b05131e252833332d211e160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5c9dac9b49f89745947341f0b0000000000000000192e44596e8399aec3b9a78b76614c36210c0000000000000000000000000000000000000000000e23384e63788da3c4c1ac96816c57412c170200000000000000000004182a3a474c4e4e4e4e4e4e4e4b433626140100000000000000081c2e3f4b4f56565656565656544f43321f0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074869cacacacab9f8a77624c3c2c19061628394b6073869ca9acaca897826d5c4a36210d000009192c3d494e4a433653687d92a8957f6a554039464c4d483b2b18080000000000000000000000000000000114263650657a8fa5b7c9b49f8a76614b36211000000000000000192e43586e8398adc3d8cab7a58d78634d403f4b5a647a8b9fb4c1d2e4ead8c8a58f7a65503a251000000000000919273136373737373737373737373737373737373737373737373737373737373737332a1c0c000000000000132330393d4849423632291b132330393d4849423632291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788dabbccfcdbaa98c77614c37220c0000000000000001172c41566c8196abc1c5a38e79644e39240f0000000000000000000000000000000000000000000b21364b60768ba6b8c4ae99846f59442f1a00000000000000000000000c1c2a333738383838383838353026180800000000000000000011212e373a404040404040403f3b3225140300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455667c90a2b4c9baa897816c5b493521101e324557687d93a4b6c4b49f8a77624d3d2d1a070001152737495b6360544a50657a90a597826d573f4b5761625948362614010000000000000000000000000000000b20354a6073879db2c8baa9927d68523e2e1b070000000000001a2f455a6f849aafc4d9c7b29d88725a49352e3c4a5c697f94a3b5c9dde7d2bca7927d67523d28120000000002152737444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c473a2a1704000000000b1b30414d525d5e574b4639291b30414d525d5e574b4639291603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb5cad7c7a48f79644f3a240f000000000000000014293e54697e93a9bebba6917b66513c2611000000000000000000000000000000000000000000091e32455673889eb3c6b19c86715c3a2a170400000000000000000000000c181f2223232323232323201c14080000000000000000000003111c23252b2b2b2b2b2b2b29271f14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374c5e6f849aabbcc6b49f8b78634d3e2d1b2a3b4b6075889db3c2b7a695806a5948341f0f0000081d314455637973645c4d63788dab9a856f5a4b5d657677625443301c0f000000000000000000000000000000071c3043546a7f95aabbc7b09b85705c4a36220d0000000000001b31465b70869bb0c5d9c4af9a846f5a3c2c1e2d3e4b6073859bb1c1d1e4d4bfaa957f6a55402a1500000000081d314455606262626262626262626262626262626262626262626262626262626262615847331f09000000031729394d5f6773736d6157463229394d5f6773736d615746321e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d32455673889db3c8d1bca6917c67513c2712000000000000000011273c51667c91a6bbbea9937e69543e2914000000000000000000000000000000000000000000021628385b70869bb0c5b49e89745847331f0a000000000000000000000000040a0c0e0e0e0e0e0e0e0b080100000000000000000000000000080e101616161616161614120c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192f404e64798c9fb4c6bbaa98836e5c4a36223447596a7f95a6b7c2b39d8875614b3b2b180100000b20354b607387857a6c6160758a9f9c877255606b7b878473604b3d2d1a070000000000000000000000000000001325364d62778b9fb4c9b5a38f7a644f3b2b180500000000001b30465b70859bb0c5d8c3ad98836e58432e191d314455667b90a3b5c9ddd7c2ad97826d58422d18000000000b20364b6073777777777777777777777777777777777777777777777777777777777776614c3726140100000a1e334657677d88888275614b3a334657677d88888275614b3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528385b70859bb0c5d3bea9947e69543f291400000000000000000f24394e64798ea3c6c0ab96816b56412c1601000000000000000000000000000000000000000000192e43596e8398aec3b9a88c76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001221364a5c6d8297a8bac8b59f8d7a644f3f2f3c4c6177899eb4c4b5a4927d685746321d0d00000012283d52677d929b8c81766772889d9f8a746374808c9d947f6a5b4a36210c00000000000000000000000000000008203448596d8298adbfc1ad98826d594834200d00000000001a2f445a6f8499afc4d7c2ad98826d58432d181426374c5e70859bb0c5d5dac4af9a856f5a372614010000000e23384d63788c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c87725544311d0800000c21364c61768a9d9e97816c5846364c61768a9d9e97816c5846331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adc3d6c1ac96816c57412c1702000000000000000c21374c61768ca8b9c3ae99836e59442e1900000000000000000000000000000000000000000001162b41566b8096abc0c6a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4d62778a9fb4c4bcab9a846f5d4c36495b6c8197a8b9bfb19c8673604b392816000000001c31465c71869ba39f96887d6f849aa98b767985959fab9f8a79634e39240e00000000000000000000000000000005182b3b4f647a8ea1b3c9b49f8b77624c3b2b180500000000192e43586e8398adc3d8c4ae99846f59442f1a09192f4052677d92a7b8ccdcc7b29d87725544311d080000000b20364b60758a9fa1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19f8a75604b35200b000010263b50657b90a8b39f8a76614c3b50657b90a8b39f8a76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8096abc0c8c3ae99846e59442f1900000000000000000a1f33475874899eb4c6b09b86715b3929160300000000000000000000000000000000000000000014293e53697e93a8bebba6917c66513c2711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f203448596a8095a6b7c9b4a2907b6554434d63788b9fb4c6b3a1907b655443301b0b000000000f243a4f647a85939ea69d92848196ab927d8a9ba3a59d8d8074604b36200b000000000000000000000000000000000d22364a5c6f849aafbfbaa996816c594834200d00000000162b40556b8095aac0d5c5b09b86705b3b2b18051220364b6075889eb3c8decab49f8a75604b35200b000000081d31445572889db2b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7bbaa8d77624d38220d000012283d52677d92a7baa9917c67523d52677d92a7baa9917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8b2b2b2b19c86715c392916030000000000000004172a3a5c71869cb1c6b39e89735746321e0a00000000000000000000000000000000000000000011263b51667b90a6bbbea9947e69543f29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4b6175889db3c2c0b09b8572604a5c6e8399aabbbbaa99846f5e4c36261400000000000d22364a5c64737e89979fa19a8a9f9f8d8a9ea8a098877b6b605645311d0900000000000000000000000000000000071b2d3e4f647a8fa1b3c7b49f8a77624c3c2b190500000012273c51677c91a6c3d4c7b29d8872594834200b091d3245566c8196acc5d5cebbaa8d77624d38220d000000021527375a70859aafb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a58f7a65503a2510000013283d53687d92a8c7ac97826c573b53687d92a8c7ac97826c573b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b909d9d9d9d9d9d89745746321e0a00000000000000001a2f44596f8499aec4b8a78b76614b36210c0000000000000000000000000000000000000000000e24394e63798ea3c5c1ab96816c56412c1701000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1e324657687d92a4b5c9b5a3917c6755647a8fa1b2c6b49f8c79634e402f18080000000000071b2e3e4a54606876818c989e9fa9ab9f9f9f9b918276655d4b453827150200000000000000000000000000000000001022374b5d6f8499abbcbaa996816c5a483420100000000d23384d62788da5b7cacbb7a58c77624d37220d0215283850657a90a7b8ccd8c8a58f7a65503a251000000000182d42586d82979e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e927d67523d2812000013283e53687d93a8bdb29c8772594853687d93a8bdb29c8772594834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e6379888888888888888875614b36210c0000000000000002172c41576c8196acc1c5a38e78634e39230e0000000000000000000000000000000000000000000c21364b61768ba7b8c3ae99846e59442f190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394b6073869cb1bfc1b29c87746070859ab0bfb9a897826c5b4a3621110000000000000010202e36434b58616c7982899eb3bcb49f8c857c6e61584b3f31271a0a000000000000000000000000000000000000081b2e3f4e64798d9fb5c6b49f8a78624d3e2d1b0700000c2035495a72879db2c7d4c3a7927d67523a2a17040b20354b6074889eb3c8d2bca7927d67523d281200000000142a3f54697f88898989898989898989898989898989898989898989898989898989897f69543f2914000014293e53697e93a8beb6a48c77624d53697e93a8beb6a48c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b637373737373737373615746321e0a0000000000000000142a3f54697f94a9bebba6907b66513b26110000000000000000000000000000000000000000000a1e32465773899eb3c6b19b86715c3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1c304354657b90a1b3c8b6a5927d687c91a2b4c4b49e8a77624c3d2d1a03000000000000000210202e39464b5f677780879db2bab49f8b847d73655d4c483b312719090000000000000000000000000000000000001021364a5c6d8298a8b9baa998826d5c4a362212000006192c3c566b8096abc1d2c2ad97826d5847331f0b081d31445570859aafc5d4bfaa957f6a55402a150000000012273b4f6169737373737373737373737373737373737373737373737373737373737369614f3b2712000014293e54697e93a9bec3a7927d675254697e93a9bec3a7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e5d5d5d5d5d5d5d5d4b4639291603000000000000000012273c51677c91a6bcbda8937e68533e2913000000000000000000000000000000000000000000031629395b71869bb0c6b39e89745846331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364c5e6f8499aabbc3b29c8775869bb1c0b7a6957f6a5948341f0f0000000000000000071b2e3e4a57616d7c89969da59fa9a99f9f9a92867b6d62594b44372715010000000000000000000000000000000000071a2d3d4c62778a9eb4c2b59f8d7a644f40301d0900000f243a4f647a8fa3b5c9c9b49f8a76614c3a291704142637586d8297adc2d7c2ad97826d58422d18000000000c2032434f545e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e544f4332200c000014293e53697e93a8bec1ac97816c5753697e93a8bec1ac97816c57422c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c3538483a464c4e4d483c3632291b0b0000000000000000000f243a4f64798fa4c6c0ab96806b56412b1601000000000000000000000000000000000000000000192e44596e8399aec3b9a78b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182f404e63798c9fb4c6b6a5947f94a3b5c1b29d8875604b3b2a180100000000000000000d22364a5c647582919ea7a29a8a9f9f8b959fa49c8f827769605544311d080000000000000000000000000000000000000f20344859697f94a4b5bcab9a84705e4c39240f00000d22364a5c71859bb0c2cdbaa8947f6a5846331f12152a40556a7f95aabfd4c4af9a856f5a37261401000000031525323b3f49494949494949494949494949494949494949494949494949494949493f37332a1c0c000011263c51667b91a6bbc4af99846f5a51667b91a6bbc4af99846f5a36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1e2b3b484c586164625a504c403224140200000000000000000c22374c61778ca8bac3ad98836e58432e1900000000000000000000000000000000000000000001162c41566b8196abc0c5a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121364a5b6c8297a8b9c3b49f8a9fb4c1b5a3927d685745321d0d0000000000000000000f243a4f647a87979faa9f958581979d877f8b9aa2a0988a7f73604b35200b00000000000000000000000000000000000005182b3b4b6074869caabbb4a2917c66513c27110000071b2e3e51677c91a4b5c9c6b39d8876614c402f2112283d52677d92a7bcd2c7b29d87725544311d0800000000071a2d3d4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c473a2a1704000e24394e63798ea3c5c7b19c8772544e63798ea3c5c7b19c87725443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4859626e76797771665e4f4232201000000000000000000b1f34475974899fb4c5b09b86705b3828160300000000000000000000000000000000000000000014293e54697e93a9bebba6917b66513c261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c62778a9eb4c4bcab9fabbcbfb19b8673604b392816000000000000000000051b30455a70859aa5a59d8c7f748297a58d797884919da69e907b65503b2610000000000000000000000000000000000000000d1d314455647a8c9fb4b7ab96816c57412c170000001020354b6073869cabbccbb7a697826d5e4c3f2e1e253a4f657a8fa4c7d8cab49f8a75604b35200b000000000c21364a5b636565656565656565656565656565656565656565656565656565656565615847331f0a000c21364b61768ba7b8c9b49f8975604b61768ba7b8c9b49f8975604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6277838a8e8d867c69604f3e2e1b070000000000000004182a3b5c72879cb1c7b39d88735645321e150c090300000000000000000000000000000000040a11263c51667b91a6bbbea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f3447596a7f94a6b7c9bcb4bcc8b3a1907b655443301b0a000000000000000000000d23384d6278899e98877a6a6b8095a6917c676f7c88969c86715d4c38230e00000000000000000000000000000000000000021527374a5c6b8096a4a59d8d7c66513c2711000000081c304354647a8d9fb5c2c4b19f907c665d4b3f3228374d62778ca9bacecebbaa8d77624d38220d000000000e23394e63797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a76614c37210c000a1e33465773889eb3c8baa98c77624c5773889eb3c8baa98c77624c37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4d627888989faaa39b8d7e695c4b37220d00000000000000001a2f445a6f8499afc4b8a68b76604b362f2b211e160b00000000000000000000000000000c181f222c394e64798ea3c5c0ab96816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4b6075879db2c1cfcacebbaa99836f5d4b36261400000000000000000000000b2035485a677d8f8275645c687e93a8947f695f6775818a7d68523f2f1c08000000000000000000000000000000000000000009192d3e4b6074869c96877c665e4c39240f000000011426364b5d6c8197a4b5c5bdb49e8a7b655d4b4538354b60758a9fb4c9d8c8a58f7a65503a251000000003182e43586d828f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f7d68523d281300031729395b71869bb0c6c7a48f7a644f5b71869bb0c6c7a48f7a644f3a250f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c6f849aa6b4bbb5ab9f8c7a644f3a240f0000000000000002172d42576c8297acc1c4a38d78634e4444403632281b0b0000000000000000000000000c1c2a343741444c61768ba7b9c3ae99836e59442e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1e324556677d92a3b5c9d6c6b49f8b79634e3f2f1808000000000000000000000006192b3c4d5f677a6d615750667b90a596816c5757616b7974604b36201100000000000000000000000000000000000000000000101e324556647a8a8175665e4c40301d090000000008182e3f4b6175869ca6b8c5b9a89e8a7b6b60564c47435472879cb2c7d2bca7927d67523d281200000000162b40556b8095a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4957f6a55402a150000192e43596e8398aec3bca7917c6752596e8398aec3bca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea2b4c4cec9bcab99836e59442e190000000000000000152a3f546a7f94a9bfbba5907b66595959554b46392816030000000000000000000004182a3a474c5759595874899eb3c6b09b86715b392916030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384a6072859bb1bfb8b9a897816c5b49352111000000000000000000000000000e1e30414d5d655d4b464e63788dab99846f59464b5b63605645311d0900000000000000000000000000000000000000000000021628384a5c64776c61574c40302212000000000000101e3246576278889ea7b8c4b9a89e8d8175696158585a6f849aafc4d4bfaa957f6a55402a150000000013283e53687d93a8bababababababababababababababababababababababababaac97826d57422d180001162b41566b8096abb7b7a9947f6a54566b8096abb7b7a9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8c0d1e2d9c9b39e88735e49341e000000000000000012273d52677c92a7bcbda8937e6f6f6f6e6a615746321e0b000000000000000000000a1f344759616c6f6f6f71869cb1c6b39e89735746321e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c304354657b90a1a3a3a39e8977614c3d2c1a0300000000000000000000000000001323303f4b4f4b3f364b60758a9f9c87715c373d4a4e4b453827150200000000000000000000000000000000000000000000000a1a2d3e4a5961594b46392f22120400000000000003162839485a647a899ea6b5c2b9ab9f96877e77716d6c6c8297acc1d7c2ac97826d57422d180000000010263b50657b90a5b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1af9a846f5a452f1a000013293e53687e93a2a2a2a297826c5753687e93a2a2a2a297826c57422d17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8c1d2e4dec9b39e89745e49341f00000000000000000f253a4f647a8fa4c7c7b19c86848484848075614b392916030000000000000000000c22374c61778184848484899eb3c8b8a78b76614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364b5d6e838d8d8d8d8d7f6a5947341f0f0000000000000000000000000000000513212e373a372e324556738894948a7455443136393631271a0a000000000000000000000000000000000000000000000000000f202d3b474c473b32281b110400000000000000000b1b2b3c4b5c647a889ca4b5bcbcb4a59d938b86838181859bb1c6dac4af9a856f5a362614010000000e23384e63788d9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c87725c47321d000011263b50667c8d8d8d8d8d8d846f5a50667c8d8d8d8d8d8d846f5a442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a8fa3b5c6d2cdbeaf9a85705a45301b00000000000000000d22374d62778ca9bacab6a49c9999999995836e5746321e0a000000000000000003182e43586d8296999999999ea7b8ccc5a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182e3f4c6176787878787874604b3a2a18010000000000000000000000000000000002101b2225221b283852687d7f7f7f74604b362024201d150a0000000000000000000000000000000000000000000000000000010f1d2a3437342a1e160b00000000000000000000000e1e2e3e4b5c647986969fabb4c0b6b2aa9f9b9896969ba3b5c9dcc7b29d87725443301c080000000b21364b6075868787878787878787878787878787878787878787878787878787878785705b46311b00000b20364b607478787878787877624c4b607478787878787877624c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6072859ba8b5c2bab4a0917c67513c271200000000000000000b20354b60758a9fb4c0c2b6b1aeaeaeae9f8b76614b36210c0000000000000000061b30455b70859aaeaeaeaeb3b8c5c0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e334657616363636363605645311c0c00000000000000000000000000000000000000080e100e0a253a4e5f686a6a6a605544311d0e0b090200000000000000000000000000000000000000000000000000000000000c181f221f180c030000000000000000000000000010202e3e4a5b6374818d9aa2aeb4bbbbb4b1adacacb1b5c1d2cac7b49f8a75604b35200b000000091e324556607171717171717171717171717171717171717171717171717171717171706755422e190000091d3145566062626262626262594845566062626262626262594834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435463798a9ca4a8a99f95826e5f4d3924100000000000000000081c30435472879cabababababababababab8e78634e39230e000000000000000003182d43586d8298abababababababababa8937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464c4e4e4e4e4e4b453827150000000000000000000000000000000000000000000000000b1e31414e525454544b4437271502000000000000000000000000000000000000000000000000000000000000000000040b0c0b040000000000000000000000000000000210202d3c4956606c7a8490999faaaeb3b7c4bbbcbcbcbbc3b7b2aeaa8d77624d38220d00000002162838454b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5549382613000002152738454b4d4d4d4d4d4d4c483b38454b4d4d4d4d4d4d4c483b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364a5b647a868f92918a8073604b41301d0a0000000000000000011426365a6f849595959595959595959595907b66503b2611000000000000000000152b40556a80959595959595959595959595806b56412b160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b29333638383838383631271a0a000000000000000000000000000000000000000000000000011323313a3d3f3f3f363127190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1e2c38454b5c64707b848b93999da6a4a6a7a7a6a5a3a59d98938d7a644f39240f000000000a1a28323647474747474747474747474747474747474747474747474747474747474642382b1b090000000a1a27313638383838383837342b27313638383838383837342b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182d3d4a5c64737a7d7c776b6055443123120100000000000000000012273c52677d8080808080808080808080807a644f39240f0000000000000000000f243a4f647a8080808080808080808080807d67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e212323232323201d150a000000000000000000000000000000000000000000000000000005131e25282a2a2a201d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a28323e4b4f5d656f777e83888c8f90929291908e8b87837e77645c4a36220d00000000000a161e213132323232323232323232323232323232323232323232323232323232312e261b0d00000000000a151d20232323232323222018151d202323232323232220180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3e4a546064686761584b4437261405000000000000000000001025394d5f676b6b6b6b6b6b6b6b6b6b6b6b645c4a36220d0000000000000000000d22364a5c646b6b6b6b6b6b6b6b6b6b6b6b675f4d3925100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0e0e0e0e0e0b090200000000000000000000000000000000000000000000000000000000010b10131515150b08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2e373f4c505961696e73777a7b7d7d7c7b7976726e6862594a3e2d1b0700000000000002090b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1913090000000000000002090b0d0d0d0d0d0d0d0b0502090b0d0d0d0d0d0d0d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110202d36434a4f53514c473a3126190900000000000000000000000a1d30414d525656565656565656565656564f4a3e2d1b07000000000000000000071b2d3e4a4f565656565656565656565656524d41301d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222f383a474c5359596264666767676663615859534c473b2d2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000210182530353a3d3c37332a1d140900000000000000000000000001132330393c40404040404040404040404039362d2010000000000000000000000010202d363a4040404040404040404040403c393023120100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111c232a34373e3b484d4f51525251504e4c463a3e37342a1d100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20252827211f170c01000000000000000000000000000005131d25272b2b2b2b2b2b2b2b2b2b2b2b24221b1002000000000000000000000002101b22242b2b2b2b2b2b2b2b2b2b2b2b27251d1205000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c181f22292b34373a3b3d3d3c3b3936332929221f180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f13120c0a040000000000000000000000000000000000010a10121616161616161616161616160f0d07000000000000000000000000000000070d0f16161616161616161616161612100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1419202225262828272624211f17130d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0f11121212110e0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-BoldItalic SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: -7448725028759579491} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: b5b9db77b259a12469a05063c52d1d11 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Bold Italic + m_PointSize: 68 + m_Scale: 1 + m_LineHeight: 81.6 + m_AscentLine: 67.116005 + m_CapLine: 50 + m_MeanLine: 35 + m_Baseline: 0 + m_DescentLine: -14.484 + m_SuperscriptOffset: 67.116005 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.484 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.34 + m_UnderlineThickness: 3.3660002 + m_StrikethroughOffset: 14 + m_StrikethroughThickness: 3.3660002 + m_TabWidth: 15 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 14.890625 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 44.5 + m_Height: 49.15625 + m_HorizontalBearingX: -2.71875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 44.203125 + m_GlyphRect: + m_X: 272 + m_Y: 73 + m_Width: 45 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 37.1875 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 41.75 + m_GlyphRect: + m_X: 381 + m_Y: 129 + m_Width: 38 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 40.84375 + m_Height: 50.25 + m_HorizontalBearingX: 2.75 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 42.1875 + m_GlyphRect: + m_X: 390 + m_Y: 67 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.65625 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 48.140625 + m_GlyphRect: + m_X: 448 + m_Y: 6 + m_Width: 45 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 34.703125 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 36.484375 + m_GlyphRect: + m_X: 198 + m_Y: 175 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 34.703125 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 36.109375 + m_GlyphRect: + m_X: 245 + m_Y: 195 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 42.53125 + m_Height: 50.25 + m_HorizontalBearingX: 2.75 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 46.0625 + m_GlyphRect: + m_X: 65 + m_Y: 129 + m_Width: 44 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 44.5 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 48.796875 + m_GlyphRect: + m_X: 391 + m_Y: 6 + m_Width: 46 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 14.84375 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 19.171875 + m_GlyphRect: + m_X: 371 + m_Y: 345 + m_Width: 16 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 27.734375 + m_Height: 49.703125 + m_HorizontalBearingX: -1.21875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 27.8125 + m_GlyphRect: + m_X: 196 + m_Y: 420 + m_Width: 29 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 43.65625 + m_Height: 49.203125 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.203125 + m_HorizontalAdvance: 43.625 + m_GlyphRect: + m_X: 151 + m_Y: 114 + m_Width: 45 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 27.5625 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 32.84375 + m_GlyphRect: + m_X: 271 + m_Y: 379 + m_Width: 29 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 55.484375 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 59.765625 + m_GlyphRect: + m_X: 83 + m_Y: 6 + m_Width: 57 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 44.5 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 48.796875 + m_GlyphRect: + m_X: 333 + m_Y: 28 + m_Width: 46 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 46.65625 + m_Height: 50.25 + m_HorizontalBearingX: 2.75 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 51.203125 + m_GlyphRect: + m_X: 65 + m_Y: 67 + m_Width: 48 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 36.890625 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.515625 + m_GlyphRect: + m_X: 430 + m_Y: 142 + m_Width: 38 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 46.65625 + m_Height: 59.359375 + m_HorizontalBearingX: 2.75 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 51.203125 + m_GlyphRect: + m_X: 6 + m_Y: 67 + m_Width: 48 + m_Height: 60 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 36 + m_Height: 49.15625 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 40.765625 + m_GlyphRect: + m_X: 413 + m_Y: 203 + m_Width: 37 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 34.75 + m_Height: 50.21875 + m_HorizontalBearingX: -0.109375 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 35.046875 + m_GlyphRect: + m_X: 151 + m_Y: 175 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 36.6875 + m_Height: 49.15625 + m_HorizontalBearingX: 3.609375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 37.875 + m_GlyphRect: + m_X: 315 + m_Y: 150 + m_Width: 38 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 41.96875 + m_Height: 49.703125 + m_HorizontalBearingX: 3.9375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 47.015625 + m_GlyphRect: + m_X: 6 + m_Y: 138 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 44.53125 + m_Height: 49.15625 + m_HorizontalBearingX: 3.265625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 44.125 + m_GlyphRect: + m_X: 207 + m_Y: 114 + m_Width: 45 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 65 + m_Height: 49.15625 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 65.859375 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 66 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 47.875 + m_Height: 49.15625 + m_HorizontalBearingX: -2.859375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 42.875 + m_GlyphRect: + m_X: 151 + m_Y: 53 + m_Width: 49 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 41.78125 + m_Height: 49.15625 + m_HorizontalBearingX: 3.234375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 41.3125 + m_GlyphRect: + m_X: 60 + m_Y: 191 + m_Width: 43 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 41.1875 + m_Height: 49.15625 + m_HorizontalBearingX: -1.265625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 38.140625 + m_GlyphRect: + m_X: 328 + m_Y: 89 + m_Width: 42 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 32.0625 + m_Height: 35.90625 + m_HorizontalBearingX: 1.1875 + m_HorizontalBearingY: 35.390625 + m_HorizontalAdvance: 35.421875 + m_GlyphRect: + m_X: 360 + m_Y: 250 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 33.046875 + m_Height: 51.046875 + m_HorizontalBearingX: 1.359375 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 36.65625 + m_GlyphRect: + m_X: 196 + m_Y: 357 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.546875 + m_Height: 35.90625 + m_HorizontalBearingX: 1.46875 + m_HorizontalBearingY: 35.390625 + m_HorizontalAdvance: 30.84375 + m_GlyphRect: + m_X: 441 + m_Y: 314 + m_Width: 30 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 35.09375 + m_Height: 51.046875 + m_HorizontalBearingX: 1.390625 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 36.6875 + m_GlyphRect: + m_X: 461 + m_Y: 251 + m_Width: 36 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 29.5 + m_Height: 35.875 + m_HorizontalBearingX: 1.46875 + m_HorizontalBearingY: 35.359375 + m_HorizontalAdvance: 33.109375 + m_GlyphRect: + m_X: 398 + m_Y: 357 + m_Width: 30 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 23.65625 + m_Height: 58.40625 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 50.015625 + m_HorizontalAdvance: 22.515625 + m_GlyphRect: + m_X: 114 + m_Y: 221 + m_Width: 25 + m_Height: 60 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 36.890625 + m_Height: 47.625 + m_HorizontalBearingX: -2.140625 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 34.171875 + m_GlyphRect: + m_X: 364 + m_Y: 190 + m_Width: 38 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 32.375 + m_Height: 50.53125 + m_HorizontalBearingX: 1.359375 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 36.78125 + m_GlyphRect: + m_X: 6 + m_Y: 415 + m_Width: 33 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 14.578125 + m_Height: 50.421875 + m_HorizontalBearingX: 1.703125 + m_HorizontalBearingY: 50.421875 + m_HorizontalAdvance: 16.65625 + m_GlyphRect: + m_X: 124 + m_Y: 67 + m_Width: 16 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 22.171875 + m_Height: 62.65625 + m_HorizontalBearingX: -6.1875 + m_HorizontalBearingY: 50.421875 + m_HorizontalAdvance: 16.59375 + m_GlyphRect: + m_X: 271 + m_Y: 440 + m_Width: 23 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 33.71875 + m_Height: 50.53125 + m_HorizontalBearingX: 1.296875 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 34.03125 + m_GlyphRect: + m_X: 150 + m_Y: 345 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49.5 + m_Height: 35.421875 + m_HorizontalBearingX: 1.359375 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 53.921875 + m_GlyphRect: + m_X: 151 + m_Y: 6 + m_Width: 50 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 32.375 + m_Height: 35.421875 + m_HorizontalBearingX: 1.390625 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 36.78125 + m_GlyphRect: + m_X: 404 + m_Y: 264 + m_Width: 33 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 31.78125 + m_Height: 35.9375 + m_HorizontalBearingX: 1.5 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 35.59375 + m_GlyphRect: + m_X: 311 + m_Y: 273 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 34.46875 + m_Height: 46.8125 + m_HorizontalBearingX: -0.03125 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 36.65625 + m_GlyphRect: + m_X: 198 + m_Y: 236 + m_Width: 36 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 32.09375 + m_Height: 46.78125 + m_HorizontalBearingX: 1.1875 + m_HorizontalBearingY: 35.390625 + m_HorizontalAdvance: 35.46875 + m_GlyphRect: + m_X: 120 + m_Y: 458 + m_Width: 33 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 23.875 + m_Height: 35.265625 + m_HorizontalBearingX: 1.359375 + m_HorizontalBearingY: 35.265625 + m_HorizontalAdvance: 24.03125 + m_GlyphRect: + m_X: 480 + m_Y: 379 + m_Width: 25 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 27.375 + m_Height: 35.96875 + m_HorizontalBearingX: -0.609375 + m_HorizontalBearingY: 35.421875 + m_HorizontalAdvance: 27.578125 + m_GlyphRect: + m_X: 423 + m_Y: 405 + m_Width: 28 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 22.0625 + m_Height: 46.109375 + m_HorizontalBearingX: 2.109375 + m_HorizontalBearingY: 45.5625 + m_HorizontalAdvance: 24.890625 + m_GlyphRect: + m_X: 311 + m_Y: 382 + m_Width: 23 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 32.375 + m_Height: 35.40625 + m_HorizontalBearingX: 2.203125 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 36.78125 + m_GlyphRect: + m_X: 355 + m_Y: 298 + m_Width: 33 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 32.984375 + m_Height: 34.890625 + m_HorizontalBearingX: 1.96875 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 33.421875 + m_GlyphRect: + m_X: 6 + m_Y: 369 + m_Width: 34 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 49.0625 + m_Height: 34.953125 + m_HorizontalBearingX: 2.171875 + m_HorizontalBearingY: 34.953125 + m_HorizontalAdvance: 50.1875 + m_GlyphRect: + m_X: 212 + m_Y: 6 + m_Width: 50 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 36.609375 + m_Height: 34.890625 + m_HorizontalBearingX: -2.71875 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 33.15625 + m_GlyphRect: + m_X: 461 + m_Y: 205 + m_Width: 37 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 33.046875 + m_Height: 46.28125 + m_HorizontalBearingX: 2.046875 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 33.421875 + m_GlyphRect: + m_X: 53 + m_Y: 313 + m_Width: 34 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 30.015625 + m_Height: 34.890625 + m_HorizontalBearingX: -0.84375 + m_HorizontalBearingY: 34.890625 + m_HorizontalAdvance: 29.4375 + m_GlyphRect: + m_X: 399 + m_Y: 311 + m_Width: 31 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 13.53125 + m_Height: 10.0625 + m_HorizontalBearingX: 8.09375 + m_HorizontalBearingY: 49.703125 + m_HorizontalAdvance: 25.03125 + m_GlyphRect: + m_X: 95 + m_Y: 382 + m_Width: 14 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 307 + m_Metrics: + m_Width: 13.9375 + m_Height: 49.625 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 18.015625 + m_GlyphRect: + m_X: 371 + m_Y: 426 + m_Width: 15 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 23.734375 + m_Height: 50.140625 + m_HorizontalBearingX: 5.0625 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 29.28125 + m_GlyphRect: + m_X: 236 + m_Y: 420 + m_Width: 24 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 310 + m_Metrics: + m_Width: 10.03125 + m_Height: 19.421875 + m_HorizontalBearingX: 1.046875 + m_HorizontalBearingY: 9.765625 + m_HorizontalAdvance: 15.984375 + m_GlyphRect: + m_X: 493 + m_Y: 113 + m_Width: 11 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 13.34375 + m_Height: 43.421875 + m_HorizontalBearingX: 2.046875 + m_HorizontalBearingY: 33.765625 + m_HorizontalAdvance: 18.390625 + m_GlyphRect: + m_X: 345 + m_Y: 382 + m_Width: 14 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 10.34375 + m_Height: 10.234375 + m_HorizontalBearingX: 1.046875 + m_HorizontalBearingY: 9.765625 + m_HorizontalAdvance: 16.1875 + m_GlyphRect: + m_X: 292 + m_Y: 195 + m_Width: 11 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 46.65625 + m_Height: 10.234375 + m_HorizontalBearingX: 1.046875 + m_HorizontalBearingY: 9.765625 + m_HorizontalAdvance: 52.5 + m_GlyphRect: + m_X: 333 + m_Y: 6 + m_Width: 47 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 324 + m_Metrics: + m_Width: 31.78125 + m_Height: 52.765625 + m_HorizontalBearingX: -1.015625 + m_HorizontalBearingY: 49.46875 + m_HorizontalAdvance: 29.203125 + m_GlyphRect: + m_X: 106 + m_Y: 292 + m_Width: 33 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 325 + m_Metrics: + m_Width: 6.5 + m_Height: 63.984375 + m_HorizontalBearingX: 5.875 + m_HorizontalBearingY: 52.59375 + m_HorizontalAdvance: 18.328125 + m_GlyphRect: + m_X: 292 + m_Y: 247 + m_Width: 8 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 18.828125 + m_Height: 52.765625 + m_HorizontalBearingX: 5.34375 + m_HorizontalBearingY: 49.46875 + m_HorizontalAdvance: 28.96875 + m_GlyphRect: + m_X: 482 + m_Y: 314 + m_Width: 20 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 328 + m_Metrics: + m_Width: 17.171875 + m_Height: 6.765625 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 23.90625 + m_HorizontalAdvance: 23.59375 + m_GlyphRect: + m_X: 241 + m_Y: 379 + m_Width: 18 + m_Height: 7 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 331 + m_Metrics: + m_Width: 25.328125 + m_Height: 5.28125 + m_HorizontalBearingX: -0.953125 + m_HorizontalBearingY: -4.6875 + m_HorizontalAdvance: 30.21875 + m_GlyphRect: + m_X: 114 + m_Y: 204 + m_Width: 26 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 334 + m_Metrics: + m_Width: 17.375 + m_Height: 63.890625 + m_HorizontalBearingX: 2.3125 + m_HorizontalBearingY: 53.28125 + m_HorizontalAdvance: 18.125 + m_GlyphRect: + m_X: 91 + m_Y: 433 + m_Width: 18 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 335 + m_Metrics: + m_Width: 17.375 + m_Height: 63.890625 + m_HorizontalBearingX: -1.46875 + m_HorizontalBearingY: 53.28125 + m_HorizontalAdvance: 18.09375 + m_GlyphRect: + m_X: 120 + m_Y: 382 + m_Width: 18 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 20.734375 + m_Height: 62.90625 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 52.53125 + m_HorizontalAdvance: 20.296875 + m_GlyphRect: + m_X: 305 + m_Y: 440 + m_Width: 22 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 20.78125 + m_Height: 62.90625 + m_HorizontalBearingX: -2.109375 + m_HorizontalBearingY: 52.53125 + m_HorizontalAdvance: 20.296875 + m_GlyphRect: + m_X: 338 + m_Y: 440 + m_Width: 22 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 19.890625 + m_Height: 62.90625 + m_HorizontalBearingX: 1.796875 + m_HorizontalBearingY: 52.53125 + m_HorizontalAdvance: 19.71875 + m_GlyphRect: + m_X: 164 + m_Y: 407 + m_Width: 21 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 19.921875 + m_Height: 62.90625 + m_HorizontalBearingX: -1.9375 + m_HorizontalBearingY: 52.53125 + m_HorizontalAdvance: 19.71875 + m_GlyphRect: + m_X: 120 + m_Y: 129 + m_Width: 20 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 21.453125 + m_Height: 22.90625 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 51.46875 + m_HorizontalAdvance: 26.921875 + m_GlyphRect: + m_X: 49 + m_Y: 477 + m_Width: 22 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 345 + m_Metrics: + m_Width: 30.796875 + m_Height: 22.734375 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 6 + m_Y: 477 + m_Width: 32 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 346 + m_Metrics: + m_Width: 32.8125 + m_Height: 13.15625 + m_HorizontalBearingX: 3.265625 + m_HorizontalBearingY: 26.6875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 98 + m_Y: 357 + m_Width: 34 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 8.25 + m_Height: 18.109375 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 49.125 + m_HorizontalAdvance: 13.734375 + m_GlyphRect: + m_X: 292 + m_Y: 217 + m_Width: 9 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 20.25 + m_Height: 18.109375 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 49.125 + m_HorizontalAdvance: 25.265625 + m_GlyphRect: + m_X: 208 + m_Y: 482 + m_Width: 21 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 41.546875 + m_Height: 50.21875 + m_HorizontalBearingX: 1.421875 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 45.453125 + m_GlyphRect: + m_X: 6 + m_Y: 200 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 47.859375 + m_Height: 55.046875 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 46.859375 + m_HorizontalAdvance: 52.5 + m_GlyphRect: + m_X: 273 + m_Y: 6 + m_Width: 49 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 360 + m_Metrics: + m_Width: 37.90625 + m_Height: 63.625 + m_HorizontalBearingX: 0.546875 + m_HorizontalBearingY: 55.96875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 443 + m_Y: 67 + m_Width: 39 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 368 + m_Metrics: + m_Width: 39.71875 + m_Height: 49.125 + m_HorizontalBearingX: 0.46875 + m_HorizontalBearingY: 49.125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 263 + m_Y: 134 + m_Width: 41 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 397 + m_Metrics: + m_Width: 34.140625 + m_Height: 50.21875 + m_HorizontalBearingX: 3.09375 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 150 + m_Y: 283 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 398 + m_Metrics: + m_Width: 25.984375 + m_Height: 49.203125 + m_HorizontalBearingX: 6.421875 + m_HorizontalBearingY: 49.203125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 479 + m_Y: 144 + m_Width: 27 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 34.984375 + m_Height: 49.671875 + m_HorizontalBearingX: 1.359375 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 59 + m_Y: 252 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 33.6875 + m_Height: 50.21875 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 314 + m_Y: 211 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 34.625 + m_Height: 49.15625 + m_HorizontalBearingX: 1.421875 + m_HorizontalBearingY: 49.15625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 6 + m_Y: 262 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.203125 + m_Height: 49.671875 + m_HorizontalBearingX: 2.171875 + m_HorizontalBearingY: 49.125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 245 + m_Y: 256 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 34.078125 + m_Height: 49.125 + m_HorizontalBearingX: 5.0625 + m_HorizontalBearingY: 49.125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 242 + m_Y: 318 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 31.25 + m_Height: 49.671875 + m_HorizontalBearingX: 5.234375 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 311 + m_Y: 321 + m_Width: 32 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 433 + m_Metrics: + m_Width: 33.859375 + m_Height: 34.09375 + m_HorizontalBearingX: 3.0625 + m_HorizontalBearingY: 39.84375 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 6 + m_Y: 323 + m_Width: 34 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 437 + m_Metrics: + m_Width: 32.21875 + m_Height: 17.921875 + m_HorizontalBearingX: 3.78125 + m_HorizontalBearingY: 31.828125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 164 + m_Y: 482 + m_Width: 33 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 440 + m_Metrics: + m_Width: 29.078125 + m_Height: 31.515625 + m_HorizontalBearingX: 5.296875 + m_HorizontalBearingY: 38.65625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 50 + m_Y: 433 + m_Width: 30 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 441 + m_Metrics: + m_Width: 29.09375 + m_Height: 31.515625 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 38.65625 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 439 + m_Y: 362 + m_Width: 30 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 14.40625 + m_Height: 50.53125 + m_HorizontalBearingX: 1.46875 + m_HorizontalBearingY: 50.53125 + m_HorizontalAdvance: 16.21875 + m_GlyphRect: + m_X: 397 + m_Y: 426 + m_Width: 15 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 32.09375 + m_Height: 49.671875 + m_HorizontalBearingX: 3.4375 + m_HorizontalBearingY: 49.125 + m_HorizontalAdvance: 36.28125 + m_GlyphRect: + m_X: 51 + m_Y: 371 + m_Width: 33 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 33.15625 + m_Height: 50.21875 + m_HorizontalBearingX: 2.890625 + m_HorizontalBearingY: 49.671875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 196 + m_Y: 295 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 48.234375 + m_Height: 50.21875 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 49.609375 + m_HorizontalAdvance: 51.78125 + m_GlyphRect: + m_X: 212 + m_Y: 52 + m_Width: 49 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 34.890625 + m_Height: 34.84375 + m_HorizontalBearingX: 2.953125 + m_HorizontalBearingY: 34.84375 + m_HorizontalAdvance: 40.796875 + m_GlyphRect: + m_X: 150 + m_Y: 237 + m_Width: 36 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 12.34375 + m_Height: 34.234375 + m_HorizontalBearingX: 2.046875 + m_HorizontalBearingY: 33.765625 + m_HorizontalAdvance: 17.609375 + m_GlyphRect: + m_X: 493 + m_Y: 67 + m_Width: 13 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -3440903133896555034} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 77 + m_Height: 61 + - m_X: 77 + m_Y: 0 + m_Width: 68 + m_Height: 61 + - m_X: 145 + m_Y: 0 + m_Width: 61 + m_Height: 47 + - m_X: 206 + m_Y: 0 + m_Width: 61 + m_Height: 46 + - m_X: 267 + m_Y: 0 + m_Width: 60 + m_Height: 67 + - m_X: 206 + m_Y: 46 + m_Width: 60 + m_Height: 62 + - m_X: 145 + m_Y: 47 + m_Width: 60 + m_Height: 61 + - m_X: 0 + m_Y: 61 + m_Width: 59 + m_Height: 71 + - m_X: 59 + m_Y: 61 + m_Width: 59 + m_Height: 62 + - m_X: 118 + m_Y: 61 + m_Width: 27 + m_Height: 62 + - m_X: 327 + m_Y: 0 + m_Width: 58 + m_Height: 22 + - m_X: 385 + m_Y: 0 + m_Width: 57 + m_Height: 61 + - m_X: 327 + m_Y: 22 + m_Width: 57 + m_Height: 61 + - m_X: 266 + m_Y: 67 + m_Width: 56 + m_Height: 61 + - m_X: 442 + m_Y: 0 + m_Width: 56 + m_Height: 61 + - m_X: 145 + m_Y: 108 + m_Width: 56 + m_Height: 61 + - m_X: 201 + m_Y: 108 + m_Width: 56 + m_Height: 61 + - m_X: 59 + m_Y: 123 + m_Width: 55 + m_Height: 62 + - m_X: 114 + m_Y: 123 + m_Width: 31 + m_Height: 75 + - m_X: 0 + m_Y: 132 + m_Width: 54 + m_Height: 62 + - m_X: 54 + m_Y: 185 + m_Width: 54 + m_Height: 61 + - m_X: 0 + m_Y: 194 + m_Width: 53 + m_Height: 62 + - m_X: 384 + m_Y: 61 + m_Width: 53 + m_Height: 62 + - m_X: 322 + m_Y: 83 + m_Width: 53 + m_Height: 61 + - m_X: 257 + m_Y: 128 + m_Width: 52 + m_Height: 61 + - m_X: 437 + m_Y: 61 + m_Width: 50 + m_Height: 75 + - m_X: 487 + m_Y: 61 + m_Width: 24 + m_Height: 46 + - m_X: 487 + m_Y: 107 + m_Width: 22 + m_Height: 31 + - m_X: 375 + m_Y: 123 + m_Width: 49 + m_Height: 61 + - m_X: 424 + m_Y: 136 + m_Width: 49 + m_Height: 61 + - m_X: 473 + m_Y: 138 + m_Width: 38 + m_Height: 61 + - m_X: 309 + m_Y: 144 + m_Width: 49 + m_Height: 61 + - m_X: 358 + m_Y: 184 + m_Width: 49 + m_Height: 60 + - m_X: 407 + m_Y: 197 + m_Width: 48 + m_Height: 61 + - m_X: 455 + m_Y: 199 + m_Width: 48 + m_Height: 46 + - m_X: 455 + m_Y: 245 + m_Width: 47 + m_Height: 63 + - m_X: 145 + m_Y: 169 + m_Width: 47 + m_Height: 62 + - m_X: 108 + m_Y: 198 + m_Width: 37 + m_Height: 17 + - m_X: 108 + m_Y: 215 + m_Width: 36 + m_Height: 71 + - m_X: 53 + m_Y: 246 + m_Width: 47 + m_Height: 61 + - m_X: 0 + m_Y: 256 + m_Width: 47 + m_Height: 61 + - m_X: 192 + m_Y: 169 + m_Width: 47 + m_Height: 61 + - m_X: 239 + m_Y: 189 + m_Width: 47 + m_Height: 61 + - m_X: 192 + m_Y: 230 + m_Width: 47 + m_Height: 59 + - m_X: 144 + m_Y: 231 + m_Width: 47 + m_Height: 46 + - m_X: 286 + m_Y: 189 + m_Width: 22 + m_Height: 22 + - m_X: 144 + m_Y: 277 + m_Width: 46 + m_Height: 62 + - m_X: 100 + m_Y: 286 + m_Width: 44 + m_Height: 65 + - m_X: 308 + m_Y: 205 + m_Width: 46 + m_Height: 62 + - m_X: 286 + m_Y: 211 + m_Width: 20 + m_Height: 30 + - m_X: 286 + m_Y: 241 + m_Width: 19 + m_Height: 76 + - m_X: 239 + m_Y: 250 + m_Width: 46 + m_Height: 62 + - m_X: 190 + m_Y: 289 + m_Width: 46 + m_Height: 62 + - m_X: 144 + m_Y: 339 + m_Width: 46 + m_Height: 62 + - m_X: 236 + m_Y: 312 + m_Width: 46 + m_Height: 61 + - m_X: 190 + m_Y: 351 + m_Width: 45 + m_Height: 63 + - m_X: 47 + m_Y: 307 + m_Width: 45 + m_Height: 58 + - m_X: 0 + m_Y: 317 + m_Width: 45 + m_Height: 46 + - m_X: 0 + m_Y: 363 + m_Width: 45 + m_Height: 46 + - m_X: 92 + m_Y: 351 + m_Width: 45 + m_Height: 25 + - m_X: 45 + m_Y: 365 + m_Width: 44 + m_Height: 62 + - m_X: 0 + m_Y: 409 + m_Width: 44 + m_Height: 62 + - m_X: 0 + m_Y: 471 + m_Width: 43 + m_Height: 35 + - m_X: 43 + m_Y: 471 + m_Width: 33 + m_Height: 35 + - m_X: 44 + m_Y: 427 + m_Width: 41 + m_Height: 43 + - m_X: 85 + m_Y: 427 + m_Width: 29 + m_Height: 76 + - m_X: 114 + m_Y: 376 + m_Width: 29 + m_Height: 76 + - m_X: 89 + m_Y: 376 + m_Width: 25 + m_Height: 22 + - m_X: 114 + m_Y: 452 + m_Width: 44 + m_Height: 59 + - m_X: 158 + m_Y: 401 + m_Width: 32 + m_Height: 75 + - m_X: 158 + m_Y: 476 + m_Width: 44 + m_Height: 30 + - m_X: 190 + m_Y: 414 + m_Width: 40 + m_Height: 62 + - m_X: 202 + m_Y: 476 + m_Width: 32 + m_Height: 30 + - m_X: 230 + m_Y: 414 + m_Width: 35 + m_Height: 62 + - m_X: 354 + m_Y: 244 + m_Width: 44 + m_Height: 48 + - m_X: 305 + m_Y: 267 + m_Width: 44 + m_Height: 48 + - m_X: 398 + m_Y: 258 + m_Width: 44 + m_Height: 47 + - m_X: 349 + m_Y: 292 + m_Width: 44 + m_Height: 47 + - m_X: 305 + m_Y: 315 + m_Width: 43 + m_Height: 61 + - m_X: 265 + m_Y: 373 + m_Width: 40 + m_Height: 61 + - m_X: 235 + m_Y: 373 + m_Width: 29 + m_Height: 18 + - m_X: 265 + m_Y: 434 + m_Width: 34 + m_Height: 75 + - m_X: 299 + m_Y: 434 + m_Width: 33 + m_Height: 75 + - m_X: 305 + m_Y: 376 + m_Width: 34 + m_Height: 58 + - m_X: 332 + m_Y: 434 + m_Width: 33 + m_Height: 75 + - m_X: 339 + m_Y: 376 + m_Width: 25 + m_Height: 55 + - m_X: 393 + m_Y: 305 + m_Width: 42 + m_Height: 46 + - m_X: 365 + m_Y: 339 + m_Width: 27 + m_Height: 61 + - m_X: 435 + m_Y: 308 + m_Width: 41 + m_Height: 48 + - m_X: 392 + m_Y: 351 + m_Width: 41 + m_Height: 48 + - m_X: 476 + m_Y: 308 + m_Width: 31 + m_Height: 65 + - m_X: 433 + m_Y: 356 + m_Width: 41 + m_Height: 43 + - m_X: 474 + m_Y: 373 + m_Width: 36 + m_Height: 47 + - m_X: 365 + m_Y: 420 + m_Width: 26 + m_Height: 62 + - m_X: 391 + m_Y: 420 + m_Width: 26 + m_Height: 62 + - m_X: 417 + m_Y: 399 + m_Width: 39 + m_Height: 48 + m_FreeGlyphRects: + - m_X: 266 + m_Y: 46 + m_Width: 1 + m_Height: 21 + - m_X: 205 + m_Y: 47 + m_Width: 1 + m_Height: 61 + - m_X: 54 + m_Y: 132 + m_Width: 5 + m_Height: 53 + - m_X: 384 + m_Y: 22 + m_Width: 1 + m_Height: 39 + - m_X: 322 + m_Y: 67 + m_Width: 5 + m_Height: 16 + - m_X: 257 + m_Y: 108 + m_Width: 9 + m_Height: 20 + - m_X: 498 + m_Y: 0 + m_Width: 13 + m_Height: 61 + - m_X: 375 + m_Y: 83 + m_Width: 9 + m_Height: 40 + - m_X: 424 + m_Y: 123 + m_Width: 13 + m_Height: 13 + - m_X: 509 + m_Y: 107 + m_Width: 2 + m_Height: 31 + - m_X: 473 + m_Y: 136 + m_Width: 14 + m_Height: 2 + - m_X: 309 + m_Y: 128 + m_Width: 13 + m_Height: 16 + - m_X: 358 + m_Y: 144 + m_Width: 17 + m_Height: 40 + - m_X: 407 + m_Y: 184 + m_Width: 17 + m_Height: 13 + - m_X: 455 + m_Y: 197 + m_Width: 18 + m_Height: 2 + - m_X: 108 + m_Y: 185 + m_Width: 6 + m_Height: 13 + - m_X: 53 + m_Y: 194 + m_Width: 1 + m_Height: 52 + - m_X: 239 + m_Y: 169 + m_Width: 18 + m_Height: 20 + - m_X: 144 + m_Y: 215 + m_Width: 1 + m_Height: 16 + - m_X: 100 + m_Y: 246 + m_Width: 8 + m_Height: 40 + - m_X: 308 + m_Y: 189 + m_Width: 1 + m_Height: 16 + - m_X: 191 + m_Y: 231 + m_Width: 1 + m_Height: 58 + - m_X: 190 + m_Y: 277 + m_Width: 2 + m_Height: 12 + - m_X: 236 + m_Y: 289 + m_Width: 3 + m_Height: 23 + - m_X: 47 + m_Y: 256 + m_Width: 6 + m_Height: 51 + - m_X: 92 + m_Y: 307 + m_Width: 8 + m_Height: 44 + - m_X: 45 + m_Y: 317 + m_Width: 2 + m_Height: 48 + - m_X: 44 + m_Y: 409 + m_Width: 1 + m_Height: 18 + - m_X: 44 + m_Y: 470 + m_Width: 41 + m_Height: 1 + - m_X: 76 + m_Y: 470 + m_Width: 9 + m_Height: 41 + - m_X: 137 + m_Y: 351 + m_Width: 7 + m_Height: 25 + - m_X: 89 + m_Y: 365 + m_Width: 3 + m_Height: 11 + - m_X: 89 + m_Y: 398 + m_Width: 25 + m_Height: 29 + - m_X: 0 + m_Y: 506 + m_Width: 114 + m_Height: 5 + - m_X: 76 + m_Y: 503 + m_Width: 38 + m_Height: 8 + - m_X: 143 + m_Y: 351 + m_Width: 1 + m_Height: 101 + - m_X: 143 + m_Y: 401 + m_Width: 15 + m_Height: 51 + - m_X: 354 + m_Y: 205 + m_Width: 4 + m_Height: 39 + - m_X: 306 + m_Y: 211 + m_Width: 2 + m_Height: 56 + - m_X: 305 + m_Y: 241 + m_Width: 3 + m_Height: 26 + - m_X: 398 + m_Y: 244 + m_Width: 9 + m_Height: 14 + - m_X: 349 + m_Y: 267 + m_Width: 5 + m_Height: 25 + - m_X: 285 + m_Y: 250 + m_Width: 1 + m_Height: 123 + - m_X: 282 + m_Y: 312 + m_Width: 4 + m_Height: 61 + - m_X: 282 + m_Y: 317 + m_Width: 23 + m_Height: 56 + - m_X: 235 + m_Y: 351 + m_Width: 1 + m_Height: 22 + - m_X: 235 + m_Y: 391 + m_Width: 30 + m_Height: 23 + - m_X: 264 + m_Y: 373 + m_Width: 1 + m_Height: 41 + - m_X: 158 + m_Y: 509 + m_Width: 353 + m_Height: 2 + - m_X: 158 + m_Y: 506 + m_Width: 107 + m_Height: 5 + - m_X: 234 + m_Y: 476 + m_Width: 31 + m_Height: 35 + - m_X: 348 + m_Y: 315 + m_Width: 1 + m_Height: 61 + - m_X: 393 + m_Y: 292 + m_Width: 5 + m_Height: 13 + - m_X: 348 + m_Y: 339 + m_Width: 17 + m_Height: 37 + - m_X: 364 + m_Y: 339 + m_Width: 1 + m_Height: 95 + - m_X: 442 + m_Y: 258 + m_Width: 13 + m_Height: 50 + - m_X: 435 + m_Y: 305 + m_Width: 20 + m_Height: 3 + - m_X: 392 + m_Y: 339 + m_Width: 1 + m_Height: 12 + - m_X: 503 + m_Y: 199 + m_Width: 8 + m_Height: 109 + - m_X: 502 + m_Y: 245 + m_Width: 9 + m_Height: 63 + - m_X: 433 + m_Y: 351 + m_Width: 2 + m_Height: 5 + - m_X: 507 + m_Y: 199 + m_Width: 4 + m_Height: 174 + - m_X: 510 + m_Y: 199 + m_Width: 1 + m_Height: 312 + - m_X: 474 + m_Y: 356 + m_Width: 2 + m_Height: 17 + - m_X: 339 + m_Y: 431 + m_Width: 26 + m_Height: 3 + - m_X: 365 + m_Y: 482 + m_Width: 146 + m_Height: 29 + - m_X: 364 + m_Y: 400 + m_Width: 53 + m_Height: 20 + - m_X: 392 + m_Y: 399 + m_Width: 25 + m_Height: 21 + - m_X: 456 + m_Y: 399 + m_Width: 18 + m_Height: 112 + - m_X: 417 + m_Y: 447 + m_Width: 94 + m_Height: 64 + - m_X: 456 + m_Y: 420 + m_Width: 55 + m_Height: 91 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: b5b9db77b259a12469a05063c52d1d11 + pointSizeSamplingMode: 0 + pointSize: 68 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BoldItalic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BoldItalic SDF.asset.meta new file mode 100644 index 0000000..e69ae05 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-BoldItalic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfef7c6d601b6c047999b7e4c6a76a31 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Hairline SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Hairline SDF.asset new file mode 100644 index 0000000..c8a8d8e --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Hairline SDF.asset @@ -0,0 +1,2730 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &-3866548254171027442 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Hairline SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -2937446388065179406} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!28 &-2937446388065179406 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Hairline SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d13150b090200000000000000000000000000000000000000000000000000000000000000000000040a0c111314140d0b0500000000000000090f111414120f0b0801000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000003090b1115171715120c0a04000000000000000000000000000000000000000000000000000000000000000000000000050b0d10131516171817171614110e0b0801000000000000000000000000000000000000000000000000000812181b0e0c070000000000000000000000000000000000000000000002090b1417110f09000000000000000913191b19130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a101214120c03000000000000060b0d1c0b08010000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1b1913090000000000020e171d1f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1a181107000000000000000000000000000000000000040e141614120c0200000000000000000000000000000000000000080e101b1913090000000000000000000000000000000000010d171c1f1c170d010000000000000000000000000000000000000000071520272a201d150a00000000000000000000000000000000000000000000000000000000000000070c171f21262829292220190d0000000003111c232629292725201d1409040000000000000000000000000000000000000000050b0d1b0c0a0300000000000000000000000000000000000000000000050a161e21262a2c2c2a27211f170c06000000000000000000000000000000000000000000000000000000000000050b0d1418202225282a2b2c2d2d2c2b292623201c140f0b080100000000000000000000000000000000000000000c1a252d3024211a0f01000000000000000000000000000000000000000a161e21292c26241d1204000000000c1a262e312e261a0c000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24272a27201407000000000e19202332201c1408000000000000000000000000000000000000000000000000000000000000000000000002101b2224312e261b0d0000000212202b32343232323232323232323232323232323232323232323232323232322f2c25190b00000000000000000000000000000000081621282b29271f14060000000000000000000000000000000003111c2325312e261b0d00000000000000000000000000000001111f2a3134312a1f1101000000000000000000000000000000000000031525333c3f3632281a0a0000000000000000000000000000000000000000000000000000000001101b222933373b3d3e3e37342b1d0d00000011222f383b3e3e3c3a3531261f170c0000000000000000000000000000000000000d181f2230211e170b00000000000000000000000000000000000000000d18202832363b3f4142403c37332a211a0f010000000000000000000000000000000000000000000000000002090d192022292b34373a3d404142424241403e3c3935302625201c1408060000000000000000000000000000000000081a2a37414539362d1f0f0000000000000000000000000000000000000a1a2832363f413b382f2214060000091a2b38424642382b1a0900000000000000000000000000000000000000000000000000000000000000000000000000000000122330393c3f3b3225140300000e1e2b35384735302618080000000000000000000000000000000000000000000000000000000000000000000010202d36394642382b1b0900000e20303d46494747474747474747474747474747474747474747474747474747474441372919070000000000000000000000000000041626333d403e3b3224140200000000000000000000000000000011212e373a4642382b1b0000000000000000000000000000000d1f2f3d4649463d2f1f0d0000000000000000000000000000000000000d20334350554b4538281502000000000000000000000000000000000000000000000000000008141c2e363a474c505354544d483b2b190500091c2f404c505453524f4b443733291c11030000000000000000000000000000000d1d2a3437453633291b0b000000000000000000000000000000000005121d2b3438454b5155575755524c473a362c1f150700000000000000000000000000000000000000000000020a151d202b34373e3b484d50525556575757565553514e4b43363a353026211a0f0800000000000000000000000000000012253748555a4e4a3d2d1a070000000000000000000000000000000002162838454b5457514c40312414020013263849555b55493826130000000000000000000000000000000000000000000000000000000000000000000000000000000a1d30414d51544f4332200c0006192b3c484d5c4b43362614010000000000000000000000000000000000000000000000000000000000000000071b2d3e4a4e5b56493826130000172b3d4e5a5f5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5a544737251100000000000000000000000000000e2133445156544f42321f0c0000000000000000000000000000081c2e3f4b505b5549381e0e0000000000000000000000000000172a3d4d5a5e5a4d3d2a1700000000000000000000000000000000000013273c50616a605645321d0900000000000000000000000000000000000000000000000000081826303e4a4f58616668696962594834200b000f23384c5e666969676460554c473a2f2112040000000000000000000000000005182a3b474c5b4c4639291703000000000000000000000000000000061323303b484c5660666a6c6c6a6761584e493d33251608000000000000000000000000000000000000000009151d2731363b484d5359596265686a6b6c6d6c6c6b6966636054554f4b4336352c231c110600000000000000000000000004182d41556670635b4a36210c00000000000000000000000000000000091e32455660696c665e4e42311f0b00192e425567706755422e190400000000000000000000000000000000000000000000000000000000000000000000000000001024394d5f6769614f3b2712000b2035485a6271605443301c0800000000000000000000000000000000000000000000000000000000000000000d22364a5c64706756422e1904001d32465a6c747272727272727272727272727272727272727272727272727272726f6554412c18000000000000000000000000000014283d51626b69604f3b270f00000000000000000000000000000e23374b5d657067553c2c1906000000000000000000000000001c31465a6b746b5a46311c000000000000000000000000000000000000152a3f556a7f74604b36200b00000000000000000000000000000000000000000000000001142636434b5c646e767b7d7e7f78624d37220d0011263b50667b7e7e7c7a756b61584b3f2f2212000000000000000000000000000b1f3447596270615746331e13000000000000000000000000000002132431414d59626d767b7f81817f7c766e635b5043342616050000000000000000000000000000000000021119273138454b525962696e71777a7d7f8081828281807e7b78756f6a6460544e493d372e20190e0300000000000000000000051b30455a708579634e39240e00000000000000000000000000000005182b3b4b60747e817c68604e3a2611001b31465b7085705b46311b06000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677d7f69543f2a14000d23384d62788773604b35200e0000000000000000000000000000000000000000000000000000000000000004172a3a4e647a85705b46311b06001f34495f748a878787878787878787878787878787878787878787878787878787846f5a442f1a00000000000000000000000000081b2e3e566b807e69543d2c1a060000000000000000000000000215273850657b85705a4935200c000000000000000000000000001f34495e7489745e49341f0000000000000000000000000000000000041a2f44596f8378624d38230d0000000000000000000000000000000000000000000000000c1c304354606c7a83827e7c7b7b74604b36210b000d23384d62787b7b7c80848176655d4c402f1d0d0000000000000000000000000d22374c62778475614c41301e0e00000000000000000000000000102031424e5f677782837e7a7877797d8283796a615144342313000000000000000000000000000000000a151d2f37444b56606870777e838684807e7b7a797879797a7c7f828584807a746b635b4f4b3f352b1e160a000000000000000000051b30455a708579634e39240e0000000000000000000000000000000b203448596f839496907e68533e2913001b31465b7086705b46311b06000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c7f69543f2a14000b2035485a6f847b66513c2c19060000000000000000000000000000000000000000000000000000000000000a1f3347586d827d68533d281300001f34495e74897472727272727272727272727272727272727272727272727272726f6554412c18000000000000000000000000000d22374b5c6f84836e5b4935210c000000000000000000000000091d3145566d828578634d38230f000000000000000000000000001f34495e7489745e49341f000000000000000000000000000000000004192e43596e8378634e39230e00000000000000000000000000000000000000000000000c1c32424b60728181776e69666565605645321e09000b2035485a626565676a6f7b847b665e4c3c2b190500000000000000000000000b1f344759667c826d5f4d3c2b1808000000000000000000000009192d3e4e60687c857a6f6964626264686e78827f6c635141301d0d00000000000000000000000000000c1a2832404c556069757d85847e78716f6b696665646363646567696c70767b818580786f655d4d493c32281a0a0000000000000000051b30455a708579634e39240e0000000000000000000000000000000d22374c62778ca1ac9b86715c46311c001b31465b7086705b46311b06000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c7f69543f2a140006192b3c50667b846f5b4935210a0000000000000000000000000000000000000000000000000000000000001325364c61768875604b36210b00001f34495e7489745e5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5a5447372511000000000000000000000000011426364f647a808078634e3823100000000000000000000000000b20364b6075847c7f6a553d2d1a070000000000000000000000001f34495e7489745e49341f000000000000000000000000000000000003182d43586d8279644f39240f0000000000000000000000000000000000000000000004172a3a4f606d827e6c6159535150504b45382816020006192b3c484d505052555d6575837c665a4834200e000000000000000000000005182a3b4c5e6c817d675a4836261401000000000000000000011426374a5c687e8374645c544f4d4d4f525a626e80816c5f4d3b2b18050000000000000000000000000d1c2a38454b5e66747e8780776f69635a595653514f4f4e4e4f505254575660656c757b84847a6e625a4b453828160300000000000000051b30455a708579634e39240e0000000000000000000000000000000c21364c61768b9fa99a85705b45301b001b31465b7086705b46311b06000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c7f69543f2a1400000e20354a60738778634d3928160300000000000000000000000000000000000000000000000000000000071c304354697f816b5645321e0900001f34495e7489745e49474747474747474747474747474747474747474747474747444137291907000000000000000000000000081c3043546c817a7a806a553e2d1b07000000000000000000000316283951667c7f73846f5b4a36210c0000000000000000000000001f34495e7489745e49341f000000000000000000000000000000000002172d42576c827a65503a2510000000000000000000000000000000000000000000000a1f334758697e7f6a604c473b3c3b3b3632281a0a0000000e1e2b35383b3b3d3f4b5761758578624d3c2b190500000000000000000000000d1d2f404b60758578625443301c10000000000000000000081d314455647a847360564b3e3a3838393c494d626c817d67594834200a00000000000000000000000d1d2b3a4756606c7b8680766b6259534d493c413e3c3a3939393a3b3d3f38454b505560666f798383786a605645321e0900000000000000051b30455a708579634e39240e0000000000000000000000000000000a1f3346586b8090938a7b65503a2510001b31465b7086705b46311b06000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c7f69543f2a140000071c304354697e816b5745321e09000000000000000000000000000000000000000000000000000000000b20354a60738778634d3828160300001f34495e7489745e493432323232323232323232323232323232323232323232322f2c25190b000000000000000000000000000b20354b607485706f836f5c4a36220800000000000000000000091e3245576d83786c8279634e3923100000000000000000000000001f34495e7489745e49341f00000000000000000000000000000000040a172c41566c817b66503b2611050000000000000000000000000000000000000000000c21374c61768573604b42342a272625211e160a00000000000e1920232626272f394657647a826d5a4835200b000000000000000000000000121e32455664798473604b3e2d1b0b00000000000000000b20354b60738678625545382e252322242c35444b60758577624c382816030000000000000000000c1c2b3b485861748184786a61574d483b38352c2b2926252423242425272a28323637444b505b636e79848075604b36210b00000000000000051b30455a708579634e39240e0000000000000000000000000000000417293a51626b7b7d78655d4b37230e001b31465b7086705b46311b060000000000000000000000000000000000070b0b09020000000000000000000000000000000012273c51677c7f69543f2a140000001325364c61768876604b36211000000000000000000000000000000000000000000000000000000006192b3c51667b846f5a49351a0a0000001f34495e7489745e49341f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1a181107000000000000000000000000000115273750657a806b6b8079644f362614010000000000000000000b21364b6076856f657b806a553e2d1b0700000000000000000000001f34495e7489745e49341f00000000000000000000000000040a0c171f212b40566b807c66513c271f180d0b05000000000000000000000000000000000004172a3a556a7f7c675443301f181110100b090200000000000000060b0d1010121b29394b5c6f8478624d38220d000000000000000000000000031628384a5c697f7f6a5c4a3928160300000000000004182a3a51677c816b5a4937281a100d0d0f1920324556677c806b5645321e0900000000000000000919293a48596276857f73625a4b4639342b232019161411100f0e0e0f101214161e212631353d4a4e5c646f7d86715c47311c00000000000000051b30455a708579634e39240e000000000000000000000000000000000b1b3444515d6568625a4b3f2e1c08001b31465b7086705b46311b0600000000000000000000000000000008131c20201d150a00000000000000000000000000000012273c51677c7f69543f2a14000000081f3347586d827d68533e2e1b0800000000000000000000000000000000000000000000000000000b2035495a6f847b66513c2c19000000001f34495e7489745e49341f090808080808080808080808080808080808080808080503000000000000000000000000000000081d3144556c8179646379816b5443301c0800000000000000000417293a52677c7e69607585705c4a36220800000000000000000000001f34495e7489745e49341f0000000000000000000000040c171f212a33373b40556a7f7c67523d37342a2220180d040000000000000000000000000000000a1f334758718576614b36261404000000000000000000000000000000000000000b1b2e3e53687e7e69533e2914000000000000000000000000000a1a2d3e4a6072847a645746321e120000000000000a1f344759708578624d3c2c190a00000000061628384b60758675604b36210b000000000000000215273746586278857c6a6054483c322820180e0c06000000000000000000000002090b141d202d363e4a4f5f7287725d47321d00000000000000051b30455a708579634e39240e00000000000000000000000000000000001626343f4b50534d493c2e211100001b31465b7086705b46311b06000000000000000000000000000008182530353632281a0a000000000000000000000000000012273c51677c7f69543f2a140000000417293a4f647986715c4b37220c00000000000000000000000000000000000000000000000000021628384d62788774604b35200e000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607585705c5b6f8474604b35200b00000000000000000a1f3346586e837762556c8279644f36251300000000000000000000001f34495e7489745e49341f000000000000000000000c171f2a33373a474c505356697f7d6854514c483b37342b1f170b00000000000000000000000000000c21374c6176857057463218080000000000000000000000000000000000000000001023384e6378836e59442e1904000000000000000000000000000f1c30435462778575614b40301d0d00000000000c22374c617785705a49351e0e0000000000000a1d3144556b817b66503b261100000000000000081d3144556176857b665e4b43362b1e160b05000000000000000000000000000000000001080f1a212d36415d7287725d47321d00000000000000051b30455a708579634e39240e00000000000000000000000000000000000816212e373b3e38352c1e110300001b31465b7086705b46311b060000000000000000000000000000132536434a4b4538281a0a0000000000000000000000000012273c51677c7f69543f2a14000000000c22364a5c70857a644f3a2a1804000000000000000000000000000000000000000000000000091e3245566b807f6a5443301c08000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000215273850667b806b56556a7f7a655037271502000000000000000c21364c6176846f5a50657b806b5443301c07000000000000000000001f34495e7489745e49341f000000000000000004121c29333a474c54586165696b6c7e7e6b69666259554d483b33291b12040000000000000000000000000f24394e6479836e59392816000000000000000000000000000000000000000000000c21364b617685715b46311c0600000000000000000000000000001325364859677c826c5e4d3b2b18080000000011273c51667c816b563c2c19000000000000000115273751677c806b55402b1600000000000008182e3e4b6074847d675d4d403026180e030000000000000000000000000000000000000000000007101b32475d7287725d47321d00000000000000051b30455a708579634e39240e00000000000000000000000000000000000003111c2325282320190e000000001b31465b7086705b46311b0600000000000000000000000000091c304354606056453828160200000000000000000000000012273c51677c7f69543f2a1400000000071b2d3e52677d826d5947341f090000000000000000000000000000000000000000000000000b21364b60758877614c36261401000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000000091d3145566d8279644f4d6378816c5544311d0800000000000004182a3a52687d7e69534b60758574604a35200b000000000000000000001f34495e7489745e49341f00000000000000011622303a474c58616970767a7e80818585807f7b77706a62594c463a2f221406000000000000000000000010253b50657a826c57422d1700000000000000000000000000000000000000000000091e3246577286725c47321d07000000000000000000000000000008182b3b4d5f6d827c66594836251300000001162b41566b807c67513c271200000000000000000d22374d627785705a45301b0000000000001325364b5c6b80806b5f4d3f301c140800000000000000000000000000000000000000000000000000001d32475d7287725d47321d00000000000000051b30455a708579634e39240e0000000000000000000000000000000000000000080e10130d0c0600000000001b31465b7086705b46311b0600000000000000000000000009192e3f4a607275605645321e0d00000000000000000000000012273c51677c7f69543f2a1400000000001020364b60758877614c3726140100000000000000000000000000000000000000000000071b2d3e52687d826d584733180800000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607586715c4a495b6f8475604b36200b0000000000000a1f3347586f8477624c44556c827a644f362614010000000000000000001f34495e7489745e49341f00000000000008141c33404c58616c767e8586817d7b7a7f817b7c7f84867f776b61584c40322415070000000000000000000010253a50657a826d58422d1803000000000000000000000000000000000000000000091e3246577287725c47321d070000000000000000000000000000000d1d30404b61758577625443301c0f000003182e43586d8379644f39240f00000000000000000b203448597286725c3625130000000000071c304354647a8574604b41302112010000000000000000000000000000000000000000000000000000081d32475d7287725d47321d00000000000000051b30455a708579634e39240e00000000000000000000000000000000000000000000000000000000000000001b31465b7086705b46311b060000000000000000000000011426374b5d6d828674604b3b2b1805000000000000000000000012273c51677c7f69543f2a140000000000091d3245566b807f6a5544311d08000000000000000000000000000000000000000000000d22364a5c70867a644f3a2a180000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000316283851667b806b563e3c54697f7b66513928160300000000000c22374c6177846f59483750657b816c5443301c080000000000000000001f34495e7489745e49341f00000000000818263044505e667681878078716c6865667c806b676a6f767d858076665e4f43332515040000000000000000000f24394f6479836e59432e19000000000000000000000000000000000000000000000c21364b617686715c46311c0700000000000000000000000000000000121e324657647a8472604a3d2d1a0a00051a2f445a6f8478634d38230e000000000000000005192b3b5d7287725443301c07000000001325364a6073867964554431231303000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d00000000000000051b30455a708579634e39240e00000000000000000000000000000000000000000000000000000000000000001b31465b7086705b46311b060000000000000000000000081d314455657a837e7f6a5948342010000000000000000000000012273c51677c7f69543f2a140000000000021528384d62788774604b35200e00000000000000000000000000000000000000000004172a3a4f647986715c4b371c0c0000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000091e3245566d8379644e39384d6277826d5745321e090000000005182b3b53687e7d68533b354b60758574604b35200b0000000000000000001f34495e7489745e49341f0000000001142636434b626b7c887f756b635a575350667b816b5655576168747e877c696150433322110000000000000000000d22374c627785705b3b2a18050000000000000000000000000000000000000000000e23384e6378846f59442f1a0400000000000000000000000000000000031629394a5c6a7f7e695c4a38281602061b30465b708577614c37220c0000000000000000001d32475d728775604a35200b000000071c304354677d826d5c4a3727150500000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d00000000000000051b30455a708579634e39240e00000000000000000000000000000000000000000000000000000000000000001b31465b7086705b46311b060000000000000000000004182a3a4b60738679748677624c3e2d1b070000000000000000000012273c51677c7f69543f2a140000000000000a2035485a6e847b66513d2c1a121212121212121212121212121212121212121212121f3347586d827d68523e2e1b000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000b21364b607686715c4a3635485a6f8476604b36210c000000000b203448596f8477614c373144556c817a65503727150100000000000000001f34495e7489745e49341f00000000081c304354606c8085796a60564d493c3e50657a816c5739464b55606877857f6a6150402f1d0d00000000000000000b1f3448597287725947341f0b00000000000000000000000000000000000000000011263c51667b816c56412c170100000000000000000000000000000000000b1b2e3e4b60738479645645321e12001b31465b708676614c37210c0000000000000000071d32475c728775604b35200b0000000b20354a60738778624d3e2d19090000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d00000000000000051b30455a708579634e39240e000000000000000000000000000000000000000000090e100e090000000000001b31465b7086705b46311b0600000000000000000000081f334758697e806b667b826d5c4a3622130000000000000000000012273c51677c7f69543f2a1400000000000005192b3c50667b846f5b4935282828282828282828282828282828282828282828282826364c61778875604b362110000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000317293952677c806b563e2d2b3c54697e7c67523a2917040000000d22374d6277846f584733263750657a826c5544311d0800000000000000001f34495e7489745e49341f000000081b2e3f4b6072818375635b4b4538352c3a4f6479826d58423237444b596274837f6a5e4c3b2a18050000000000000005182a3b5b708577624c37220d000000000000000000000000000000000000000000152a3f556a7f7d68533d281300000000000000000000000000000000000000101d31445562788574604b402f1d0c1a2f445a6f8478634d38230e000000000000000005182b3b5d7286725443301c0800000317293950667b836e5a4835200f000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d00000000000000051b30455a708579634e39240e0000000000000000000000000000000000000003111c2326231c1103000000001b31465b7086705b46311b0600000000000000000008182d3e4c61778675615e6f847a644f41301b0a00000000000000000012273c51677c7f69543f2a14000000000000000e20354a60738778634e393d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4354697f806b5645321e09000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000a1e3346576e8379644e392422374c6277836e5847331f0a000006192b3c54697e7d68523a2a20354b60758675604b35200b00000000000000001f34495e7489745e49341f0000000e22374b5d6c8182736057493d32282024394e6379836e58432e27313b48566074857b665948341f0d0000000000000000172c41576c817b66513c2611000000000000000000000000000000000000000005192b3c596e8479634e39240e0000000000000000000000000000000000000001142637485a677d816c5e4c3b2a18192e43586e8379644f39240f00000000000000000b203448597287725c3626140100000a1e3346576e847a65503c2b1901000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d00000000000000051b30455a708579634e39240e0000000000000000000000000000000000000011212f383b382f2111000000001b31465b7086705b46311b060000000000000000001325364a5c6d827c67574e637985705f4d39281603000000000000000012273c51677c7f69543f2a1400000000000000071c304354697e816c57525252525252525252525252525252525252525252525252525260748778624d38281603000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000c21364b617686715c4a36211f3448596f8476614c37210d00000b2035495a708576614c36211d3144556c817b665038281502000000000000001f34495e7489745e49341f00000010253a4f657a8273605545392c1e160e23384d6378846e59442f151d2a38455662788677624c3b2a18050000000000000012273d52677c806b5536251300000000000000000000000000000000000000000b2035485a728775604b35200b000000000000000000000000000000000000000009192b3c4d5f6d827b665947341f162c41566b817c66513c271100000000000000000d22374c627785705b45301b0000000c21364b61768774604a35200e00000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d00000000000000051b30455a708579634e39240e000000000000000000000000000000000000091c2f3f4c504c3f2f1c090000001b31465b7086705b46311b060000000000000000071c304354647a846f5f4d495b6c817c675745321e0d000000000000000012273c51677c7f69543f2a1400000000000000001325364c61768875676767676767676767676767676767676767676767676767676767677b846f5a49351a0a00000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000004172a3a52677d806b553e2d1a182a3b53687d7d68533b2b1805000d23384d6278836e5846331f14263750657a826d5645321d09000000000000001f34495e7489745e49341f0000000e22374b5d656d60554437281b0e030d22374d6277846f5a452f1a0d1a28384859687d816c5948341f0b000000000000000e23384d6378846f5443301c07000000000000000000000000000000000000000d22384d6277856f5443301c080000000000000000000000000000000000000000000e1e30414c61768577614c42311f273c51677c806b563c2b19050000000000000114263751667c806b56412b1601000012273c52677c826c5443301c0700000000000000000000000000000000000000000000050b0d111111111111111d32475d7287725d47321d00000000000000051b30455a708579634e39240e0000000000000000000000000000000000000e23384c5d655d4c38230e0000001b31465b7086705b46311b06000000000000000417293a4a60728579634e413d4c61768675604b3c2b19050000000000000012273c51677c7f69543f2a140000000000000000081f3347586d82817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d857b66513c2c190000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000a1f3347586f8479644e39240f0d21374c6176846f594834200b061a2c3d546a7f7c67523a29170b20354b60758775604b36200b000000000000001f34495e7489745e49341f000000081b2e3f4b4f574b443726190a00000c21374c617685705b45301b000a1a2b3b4b60748677624c37220d000000000000000c2035495a728775604a35200b0000000000000000000000000000000000000012273c51677c806b563626140100000000000000000000000000000000000000000000131f334658657b836e604e3d2c22374d627785705a4835200d000000000000081d3144556b807b66513c2611000003172939586d827c6651362513000000000000000000000000000000000000000000000e192022262626262626262632475d7287725d47321d00000000000000051b30455a708579634e39240e00000000000000000000000000000000000010263b50657b65503b26100000001b31465b7086705b46311b06000000000000000a1f334658687d816b5b4936334758697e7f6a5a483420100000000000000012273c51677c7f69543f2a1400000000000000000417293a4e6479897e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e808774604b35200e0000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000c21374c617686715c4a36210d0a1f3347586f8477624c37220e0c2135495b708576614b36210c081d3144556c817c6651392816030000000000001f34495e7489745e49341f0000000010212e373a4235312619090000000b21364b607686715c46311c07000d1d314455687e806a553a2a170400000000000006192c3c596f8478634e38230e00000000000000000000000000000000000001142636566b807c66513c271100000000000000000000000000000000000000000000000417293a4b5d6b807e685b493827344859708577624d3c2b180900000000041527384b60748676614b36210c00000a1e334657728777624c37220d0000000000000000000000000000000000000000000e1e2b35383b3b3b3b3b3b3b3b3b475d7287725d47321d00000000000000051b30455a708579634e39240e000000000000000000000000000000000003192e43586e836e58432e190300001b31465b7086705b46311b06000000000000071a2d3d4c61768676614c3d2c293a4b60738578624d3f2e180800000000000012273c51677c7f69543f2a140000000000000000000c22364a5c70857a696969696969696969696969696969696969696969696969696b807f695443301c080000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000005182a3b53687d806b553e2d1a0704172a3a52677d7e69543c2c190e23394e6378836e5746321e0a0114263750657a836e5745321e090000000000001f34495e7489745e49341f0000000002101b22252d201d1409000000000b20354a607586715c47321c0700011527374c617786715847331f0a00000000000000152a40556a7f7d67523d2812000000000000000000000000000000000000081c304354708577624d37220d0000000000000000000000000000000000000000000000000b1b2e3f4b60738579635645312b3b52677d806b5a483627190f0b0b0d181f314556667c816c5746331e0a00000c21364c617587725948341f0b000000000000000000000000000000000000000005192b3c484d515151515151515151515d7287725d47321d00000000000000051b30455a708579634e39240e0000000000000000000000000000000000051a2f445a6f846f5a442f1a0500001b31465b7086705b46311b060000000000000b21364a5b6c817d675746331f1d314455657b836d5d4b36251300000000000012273c51677c7f69543f2a14000000000000000000071b2d3e52677d826d585353535353535353535353535353535353535353535360758877614c362614010000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000b1f3447596f8479644e39240f00000c21364c617685705a4935201b2d3e556a807c675139291603000b20354b60758776604b36210b0000000000001f34495e7489745e49341f000000000000080e10180b08010000000000071c3043547286725c47321d070000091f334758708576614c37210c0000000000000010263b50657b816c56412c170000000000000000000000000000000000000b20354b60758672594834200b00000000000000000000000000000000000000000000000000111d31445563788574604b3f2f364b60748678625444372c222020222a33424b60748578624d3929170300000f253a4f647a846f593b2a180500000000000000000000000000000000000000000b2035485a6266666666666666666666667287725d47321d00000000000000051b30455a708579634e39240e0000000000000000000000000000000000061b30455b7085705b45301b0600001b31465b7086705b46311b0600000000000b1b30414e63798572604a3929171426374c5d6e837a645443301c0b000000000012273c51677c7f69543f2a14000000000000000000001020364b60758777614c363e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e52677d826d5847331808000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000d22374c627787715c4a36210d00000a1e3346576e8378634d382322364a5c718676604b36210b0000081d3144556c817c67523929170300000000001f34495e7489745e49341f000000000000000000020000000000000000001325365c7287725c47321d00000004172a3a576c817b65503b2610000000000000000c21364c617685705b3a2a180400000000000000000000000000000000000e23394e6378836e593b2b180500000000000000000000000000000000000001080b0d0d0b0903152737495a687d806b5d4b3a314556657b84726055493d373535373a474c616b807e695a49351b0b00000012273c52677d816c57422c170000000000000000000000000000000000000000000d22384d62787b7b7b7b7b7b7b7b7b7b7b7c88735d48331e00000000000000051b30455a708579634e39240e0000000000000000000000000000000000071c31475c7186715c47311c0700001b31465b7086705b46311b0600000000031629394d5f6f8579645443301b0b09192f3f4d63788573604a392916030000000012273c51677c7f69543f2a1400000000000000000000091d3145566b807f6954433029292929292929292929292929292929364a5c708579644f3a2a1700000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000005192b3c53697e806b553d2d1a0700000317293952677c7f6a553d2d25364f6479826d5645321e0900000114263750657a836e5746331e0a00000000001f34495e7489745e49341f000000000000000000000000000000000000001d32475c7287725c37271502000000142a3f54697f7d68533d2813000000000000000a1f3346587186715847331f0a000000000000000000000000000000000012273c51677c806b56402b1600000000000000000000000000000000050b0d141c202223211e1611192c3c4e606e837b65584733384b5d6a7f8273635b514d4b4b4c5058616c7f8272604a3c2b1900000000152a3f546a7f7f6a543f2a1500000000000000000000000000000000000000000011263b50667b7f7f7f7f7f7f7f7f7f7f7f7f7f6a553f2a1500000000000000051b30455a708579634e39240e0000000000000000000000000000000000081d32485d7287725d48321d0800001b31465b7086705b46311b06000000000a1e324657677c816c5c4a3625130000112035495a6b807d685746321e0e0000000012273c51677c7f69543f2a1400000000000000000000021527384d62788774604b35201414141414141414141414141417293a4e647986705c4a361c0c00000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000b2034485a708579634e39240f000000000b21364b607685705b4a363043546b807b6651382816030000000b20354b60748776614c36210c00000000001f34495e7489745e49341f000000000000000000000000000000000000071d32475c7287725544311d0800000013283d53687d7f69543f2a14000000000000000417293a5b708577614c37220c0000000000000000000000000000000000142a3f54697f7d68533d28130000000000000000000000000000010d182022263035373836322826241e31424c61768676614c42313f4f616a7e83786d6762606062656c77818172605443301e0e00000000162c41566b817d68523d28130000000000000000000000000000000000000000000f23384c5e666a6a6a6a6a6a6a6a6a6a6a6a6a61503c271300000000000000051b30455a708579634e39240e0000000000000000000000000000000000071c3043547388735e48331e0900001b31465b7086705b46311b06000000061a2c3d4b61758676614c3e2d1808000006192c3c4c61768676614b3c2b190600000012273c51677c7f69543f2a1400000000000000000000000a2035485a6e837b66513c2c1906000000000000000000000a1f3347586d827d68523e2d1b0000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000d22384d627787725b4a36210c00000000091e3245566d8379634e36354a60748675604b36200b00000000081c3043546c817d68523a2a1704000000001f34495e7489745e49341f000000000000000000000000000000000000071c32475c718675604b36200b00000013283d52687d7f6a553f2a150000000000000000192f44596e8478634e39230e0000000000000000000000000000000001162b41566b807c66513c27110000000000000000000000000009151d2b343736434b4c4d4b45393b382f21334758657b836e604e3c32434f60697984827c777575777b81857b6c6054433625130000000000172c42576c817c67523c2712000000000000000000000000000000000000000000091c2f404c5055555555555555555555555555504333200d00000000000000051b30455a708579634e39240e00000000000000000000000000000000000b20354a607589745e49341f0900001b31465b7086705b46311b060000000a2135495b6b807d685847332010000000000e1e334657687d806b5a4835201100000012273c51677c7f69543f2a14000000000000000000000005192b3c50657b846f5a4935200a000000000000000000001325364c61768775604b3621100000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000006192c3c54697e806b553d2d1a07000000000316283851667b806b5443374f657a826d5645311d09000000000114263650657a846f5847331f0a000000001f34495e7489745e49341f000000000000000000000000000000000000061c31465b718676614c36210c00000014293e54697e7e69543e29140000000000000000182e43586d8379644f3a240f0000000000000000000000000000000002172c42576c817b65503b26100000000000000000000000000a1927313b484d5554606262605758514c40362d3a4c5d6b817d685a493732424f5b636e777e828384827f786f655d4b43362618080000000000182d43586d827b66513c26110000000000000000000000000000000000000000000011222f383b3f3f3f3f3f3f3f3f3f3f3f3f3f3c3325150300000000000000051b30455a708579634e39240e00000000000000000000000000000000000b20364b60758a745f4a341f0a00001b31465b7086705b46311b0600000a1a30404e63788573604b3a2a170200000000031729394b60738578624d3f2e1808000012273c51677c7f69543f2a140000000000000000000000000e20354a60738778634d382816030000000000000000071c304354697e806b5645321e090000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000c2035495a718679634e39240f0000000000000b20364b60758674604a44556c817b66503827150200000000000b20354b60748877614c37210d000000001f34495e7489745e49341f000000000000000000000000000000000000061b30455b708577624c37220d000005192b3c566c817c67513c2712000000000000040a192d3d596e8379644e39240f0000000000000000000000000000000001172c41566c817b66513b261308010000000000000000000a1b2837444b59626a6f757778766f6d665e4e4a3d2f3f4b6074857863554431323d4a4e5a62686c6e6e6d69635b504b3f30261808000000000000182e43586d837b66513b26110000000000000000000000000000000000000000000003111c23262a2a2a2a2a2a2a2a2a2a2a2a2a272015070000000000000000051b30455a708579634e39240e00000000000000000000000000000000000b21364b60768b745f4a351f0000001b31465b7086705b46311b0600021628384c5e6f847a645443301c0c0000000000000b1c304354657a836e5d4b362614010012273c51677c7f69543f2a14000000000000000000000000071c304354697e806b5645321e0900000000000000000b20354a60738778624d382816020000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000e23384d637887725b4a36210c000000000000091d3145566d827a644f4b60758675604b35200b000000000000081c3043546c817d68533b2a18050000001f34495e7489745e49341f000000000000000000000000000000000000051a2f455a6f8478624d38230d00000e2035485a708578634e38230e00000000080c171f28374a5c718676614c36210c000000000000000000000000000000000014293e54697e7e69544131201d140900000000000000031628394555606a777f848382818384827b6f635b4b3f31455663798573604b3f2e2d363c484d5357595957544e4a3d382f1c140800000000000000182d42576d827c66513c2711000000000000000000000000000000000000000000000000090f1115151515151515151515151515130d03000000000000000000051b30455a708579634e39240e00000000000000000000000000000000000c21364b61768c755f4a25130000001b31465b7086705b46311b0600091e324556667c826d5c4b36261400000000000000011426364b5d6e837a655443301c0b0012273c51677c7f69543f2a14000000000000000000000000001325364c61768775604b3621100000000000000005192b3c50667b846f5a49351a0a000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000061a2c3d556a7f806a553d2d1a070000000000000215273850657b816c5550657b816c5544311d080000000000000114263650657a856f5948341f0b0000001f34495e7489745e49341f00000000000000000000000000000000000004192f44596e8478634e39230e02101e2f404d627887725b4935210c000003111c2329333845556479846f5846331f0a00000000000000000000000000000000000d23384d627885705f4e40353126191b0d00000000000b1e324557607380837b756e6d6c6e6f777f8479655d4b3d38495b697e806b5d4b3a29212b35383e424444423f39362d231c11010000000000000000172c41576c817d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0c1b30455a708579634e39240f0f0f0f0f0f0f0f0e0c06000000000000000c21364b61768a755443301c0700001b31465b7086705b46311b0606192b3c4b60758677614c3e2e1808000000000000000008182e3f4d62788573604b3929170312273c51677c7f69543f2a1400000000000000000000000000081f3346586c827d68523e2e1b070000000000000b2035485a6e847b66503c2b1900000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000c2136495b718679634e39240f00000000000000000b20354b6075867560556d827a655037271501000000000000000b20354b60748877624c37220e0000001f34495e7489745e49341f00000000000000000000000000000000000003192e43586e8379644f39240f151d2e3c4c5e6c817e69543d2c1a06000011212f373a464c566073847a644f3a29170400000000000000000000000000000000000c2035495a6c817d685f4f4b4437382b1b090000000b1b31424b6075837e6f65605557575859626a77847b655c4a383d4f606e837a655846331f192022292d2e2f2d2a23211a0f0800000000000000000000162b40566b807e68533e291300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d20212230455a708579634e3924242424242424242423211a0f0100000000000c21364c61768a75604a35200b00001b31465b7086705b46311b00092035485a6a7f7e69594734201000000000000000000000112035485a6b807d685746331e0e12273c51677c7f69543f2a14000000000000000000000000000417293a4e647986715c4a36220c0000000000021528384d62788773604a35200e00000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000e23394e637887725b4a36210c0000000000000000081d3144556c817b6560758774604b35200b0000000000000000081c3043546c817e69533c2b190500001f34495e7489745e49341f00000000000000000000000000000000000003182d42586d827a654f3a251d27313e4a5a667b8674604b36200e0000081c2f3f4b5058616875827e685c4a361c0c00000000000000000000000000000000000006192c3c4b6074847c6d65605556493826130000031629394e606e837d6860504b4437413b484d596275847a64564532424c61778576614c41301e0e0d1317191918140e0c0700000000000000000000000013293e53687e806b56402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919263135363738455a708579634e3939393939393939393939352c1f0f00000000000c21364c61768a75604b35200b00001b31465b7086705b46311b09192f404d62788573604b3b2a18020000000000000000000005192b3c4b61758676614c3c2c1912273c51677c7f69543f2a1400000000000000000000000000000c21364a5c708579644f3a2a170400000000091d3245566b807e695443301c0700000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000071b2d3e556a80806a553d2d1a0700000000000000000114263750657a826d667b816c5443301c0800000000000000000114263650657a85705a4835200b00001f34495e7489745e49341f00000000000000000000000000000000000002172c42576c817b65503b273138454b5c64788779635645321d0900000e23374b5d6572767d847c68604e3e2e1b00000000000000000000000000000000000000000e1e324556607480837a75716756422e1900000a1e324657687e816b5f4e423531262c2b343b485762788575604b37344759667b826d5f4d3c2b190900020404020000000000000000000000000000000011263b51667b836d583727150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b4c4c4d4d5a708579634f4f4f4f4f4f4f4f4f4f4f4e493d2c1a06000000000c21364c61768a75604b35200b00001b31465b7086705b46311b1527374c5e6e837a655544311d0c0000000000000000000000000e1e324657677d806b5a49352012273c51677c7f69543f2a140000000000000000000000000000071a2d3d52677c826d5847331f08000000000b20364b60758776614c3625130000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000d22364a5c728779634e39240f000000000000000000000b20354a607486756d827a644f362614010000000000000000000b20354b60748877624d38220e00001f34495e7489745e49341f00000000000000000000000000000000000001162c41566b817b66513c38454b56606a7a877b655b4938281502000010253b50657a88897f75665e4e423120100000000000000000000000000000000000000000021628384556606b77848a86715b46311c00000c21364b61768675604b4131201d141718202b39485a687e7e695544313b4c5e6c817d675a483726140100000000000000000000000000000000000000000e23394e637885705544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606162626363708479646464646464646464646464635b4935210c000000000c21364c61768a75604b35200b00001b31465b7086705b46311b1d314455657b836d5d4b37261400000000000000000000000000031628394a60738578634d3f2f19273c51677c7f69543f2a140000000000000000000000000000000f20364b60758777614c362614010000071b2d3e52677d826d58473318080000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000001325364f647987715b4a36210c00000000000000000000071c3043546b817c748674604a35200b00000000000000000000081c3043546c817f69543c2c1906001f34495e7489745e49341f00000000000000000000000000000000000003162b40556b807c6752494e566067747f8779655d4b3d2c1a0a0000000e23374b5d6574797f837a665e4c3d2c1a0600000000000000000000000000000000000000081c30435460727e837c7772604a35200b000417293a53697e7f6a5645322314080100050d1b2b3c4b60758674604b352f404b60758578625544311d1000000000000000000000000000000000000000000b20354b60758875604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607376777778787a857d79797979797979797979797979634e39230e000000000c21364c61768a75604b35200b00001b31465b7086705b4631182b3b4b60748677624d3f2e190900000000000000000000000000000b1c304354647a836e5d4c3726273c51677c7f69543f2a14000000000000000000000000000000091d3145566b807f695443301c0800000d22364a5c708579644f3a2a17000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000071c3043546b80806a553d2d1a0700000000000000000000001325364f6479837c806b5443301c07000000000000000000000114263650657a86715b4935210c001f34495e7489745e49341f00000000000000000000000000000000060b171e2a3f556a7f7d68545b636a757d868075635b4b3f2f1f0e00000000081c2f3f4b5560646a76837c665b4935210b00000000000000000000000000000000000005182b3b4b6072827e6e6762605443301c07000a1f334758718677614c3828150400000000000d1e3245566b817b66503b2632455664798473604b3e2e1b0b00000000000000000000000000000000000000081c304354708579644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c81818181818188838181818181818181818181817f69543f2a14000000000c21364c61768a75604b35200b00001b31465b7086705b463120344859697f7f695948342111000000000000000000000000000000001325364b5c6d827b65554431273c51677c7f69543f2a14000000000000000000000000000000021527384d62778774604b35200e000417293a4e647985705c4a361c0c000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000b20354a60738779634e39240f0000000000000000000000000822364a5c71868379644f3625130000000000000000000000000b20354b60748878634d38230e001f34495e7489745e49341f0000000000000000000000000000050f1a212933363b54697e7e696a7178808681786b61574a3d2f211100000000000011212f37444b4e5861758479634e3929160300000000000000000000000000000000000b203448596a807f6960524c4a4336251300000c21374c617685705847331a0a0000000000000316283851667b806b56412b28384a5c697f7f6a5c4a3929160300000000000000000000000000000000000001142636556b807e69543a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f676c6c6c6c6c7085796c6c6c6c6c6c6c6c6c6c6c6c69614f3b2712000000000c21364c61768a75604b35200b00001b31465b7086705b46312e3f4d62778674604b3b2b18030000000000000000000000000000000008182e3e4d62778573604b3a293c51677c7f69543f2a14000000000000000000000000000000000a203448596e837b66513c2c19060a1f3346586d827d67523e2d1b00000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000f253a4f647a86715b4a36210c000000000000000000000000071b2e3e566b8087725c4a361808000000000000000000000000081c3043546b807f6a553f2a15001f34495e7489745e49341f000000000000000000000000000d18202c3639464b5259687e7f787f86857d766c635a4b46392d1f11030000000000000311192731363a4756647a836e5746321e0a00000000000000000000000000000000000d22374c62778574604b42373530251808000011263b51667b816c573a2a1700000000000000000c21374c617685705b38281a2d3d4a6072847a645746321e12000000000000000000000000000000000000000f243a4f6479856f5847331f0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d30414d52575757575a708579635757575757575757575757544f4332200c000000000c21364c61768a75604b35200b00001b31465b7086705b4626374b5d6d827b655544311d0d00000000000000000000000000000000000010203448596a7f7e685847333c51677c7f69543f2a140000000000000000000000000000000005192b3b50657b846f5a4935200a1325364c61768775604b36201000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000d22374c627777614c3d2d1a07000000000000000000000000001022374c62777b65503e2d1b00000000000000000000000000011426364b607478634d38230e001f34495e7489745e49341f000000000000000000000005131d2b343d494e5761686f778188857e776f6861574d493c32281b0f0100000000000000000009151d202a384b5d718676614b36210c000000000000000000000000000000000013283e53687d7f6a54433022201c1308000000152a3f546a7f7d68533d281300000000000000000a1f3347587286725645321e1c30435462778575614b40301d0d0000000000000000000000000000000000000b20354a60748776614c362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001132330393c414141455a708579634e414141414141414141413f3b32251503000000000c21364c61768a75604b35200b00001b31465b7086705b46314455657a836e5e4c3727150000000000000000000000000000000000000005182b3b4b60758676614c3d3c51677c7f69543f2a1400000000000000000000000000000000000d23384b5d718678624d3828161c304354697e806b5645321d0900000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000b1f34485962615847331f0f00000000000000000000000000000b2034485962655d4b3720100000000000000000000000000000081d31455660635b4935210c001f34495e7489745e49341f00000000000000000000061423303b484d5b636d767d8486838070696259534c4639352c1e160b00000000000000000000000002080c1a2e3f596e8379634e39240e0000000000000000000000000000000001162c41566b817b66513626140b070000000000162b41566b807c66513c2711000000000000000004172a3a5c718676604b36211325364859667c826d5e4d3b2b18080000000000000000000000000000000000071c3043546b807e695443301c09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131d25272c2c30455a708579634e392c2c2c2c2c2c2c2c2c2a2720150700000000000c21364c61768a75604b35200b00001b31465b7086705b463a4b60738578624d402f190900000000000000000000000000000000000000000d1e324556677c816c5b493c51677c7f69543f2a140000000000000000000000000000000000081c2f3f54697e806b5645321e20354a60738778624d3828150200000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000005182a3b484c4c473a2a1801000000000000000000000000000005182b3b484c504b3f2e1c02000000000000000000000000000002152738454b4d493c2c1906001f34495e7489745e49341f00000000000000000006142432414d59626e7982878179717c806b564d483b36332920190e0300000000000000000000000000000000182e43586d8379644f3a240f0000000000000000000000000000000002172c42576c817b65503b261000000000000000182d42576d827a65503a25100000000000000000001b30455a708577624d37220d182b3b4d5e6d827c6659483625130000000000000000000000000000000000001325364d62788773604a372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1012171b30455a708579634e3924171717171717171714120c030000000000000c21364c61768a75604b35200b00001b31465b7086705b464759697e7f6a5a48352111000000000000000000000000000000000000000000021628384d5f6f8479634e4051677c7f69543f2a140000000000000000000000000000000000001121364c61768775604b36212b3c50667b846e5a48351a0a0000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000d1d2a343737332a1c0c000000000000000000000000000000000d1d2b34373b372e2111000000000000000000000000000000000a1a27313638352c1e0e00001f34495e7489745e49341f000000000000000000132432424f5f677783867d756c64657b816c5641342b211e170b06000000000000000000000000000000000004192f44596e8478634e39230e0000000000000000000000000000000001162c41566b817b66513c261100000000000000192e43586e8379644f39240f0000000000000000041a2f44596f8478634e38230e0d1d30404b61758577625443301c0f0000000000000000000000000000000000082035485a6e837c675544311d0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a30455a6f8579634e39240e02020202020202000000000000000000000c21364c61768a75604b35200b00001b31465b7086705b3e4c61778675604b3c2b1903000000000000000000000000000000000000000000000a1a30414f6479846f5e4c51677c7f69543f2a140000000000000000000000000000000000000a1e3346576c817d68523e2d35485a6e847b66503c2b19000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000d181f22221f180c0000000000000000000000000000000000000d18202225231c110300000000000000000000000000000000000a151d202321190e0000001f34495e7489745e49341f00000000000000000e1e31424f61697d877d736760554f657a826c57422d180d0a0300000000000000000000000000000000000000031628395a708577624c37220d0000000000000000000000000000000000152a3f546a7f7d68523d281300000000000000182d42576d827a65503a25100000000000000000051b30455a708577624d37220d00121e324657647a8472604a3e2d1a0a0000000000000000000000000000000005192b3c4e63788674604b3d2c1b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e44596e837a654f3a251000000000000000000000000000000000000c21364c61768a75604b35200b00001b31465b7086705b4a5c6d827c665645321e0e0000000000000000000000000000000000000000000000001222364a5c6d827b665551677c7f69543f2a14000000000000000000000000000000000000031729394e637986715c4a36384d62788773604a35200e000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000050b0d0c0a040000000000000000000000000000000000000000050b0d100e08000000000000000000000000000000000000000002090b0e0c06000000001f34495e7489745e49341f0000000000000006192b3c4e60697f85786860544b444f6479826d58432d1800000000000000000000000000000000000000000000091e3245577187715948341f0b000000000000000000000000000000000012273c52677c806a55402b1500000000000000162b41566b807c66513c2711000000000000000004182a3a5c718676604b36210b00031628394a5c6a7f7f695c4a38281603000000000000000000000000000000000e2135495b6c817e695b49392818090000000000000000000000000000000000000000000000000000000000080e100d0b05000000000000000000000003182d42586d827b66513b261100000000000000000000000000000000000c21364c61768a75604b35200b00001b31465b7086705b54647a846f5e4c38281600000000000000000000000000000000000000000000000000071b2d3e4c627785746051677c7f69543f2a14000000000000000000000000000000000000000b21364a5b708579644f3a45566b807e695443301c07000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f000000000000000b2035485a687e8576625a4b4336394e6378836e59432e19040000000000000000000000000000000000000000000b21364b607685705b3b2a180500000000000000000000000000000000000f24394e6479836e583a2a1704000000000000152a3f546a7f7d68533d281300000000000000000a1f3347587287725645321e0900000b1b2d3e4b6073847a645645321e1200000000000000000000000000000000061a2c3d4c617687796357463626190a000000000000000000000000000000000000000000000000000000111c23252220180d0000000000000000000001162b41566b807d68523d281300000000000000000000000000000000000c21364c61768a75604b35200b00001b31465b7086705b60738578634d402f1a0a0000000000000000000000000000000000000000000000000000101f344759697f7e6958677c7f69543f2a1400000000000000000000000000000000000000071a2d3d52677c826d58474b60758776614c36251300000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000a141a1c0d0b050000000000000000000000000000000006101619110f090000000000000000000000000000000000050b0d1c1a140a0000000000000000001f34495e7489745e49341f00000000000006192c3c4d627887776158483c3026384d6278846f59442f1a0400000000000000000000000000000000000000000010253a50657a826c57422d170000000000000000000000000000000000000b20364b607586715847331f0a00000000000011263b51667b816c573a2a1804000000000000000c22374c617785705b38281603000000101c30435462788575604b402f1d0c000000000000000000000000000000000f1e334657657b857561544437281a0f02000000000000000000000000000000000000000000000008131c2e373b37342b1d0d0000000000000000000012273c52677c816c573c2b1906000000000000000000000000000000000c21364c61768a75604b35200b00001b31465b70867058687d806b5b4935221200000000000000000000000000000000000000000000000000000005182a3b4b6074867761677c7f69543f2a1400000000000000000000000000000000000000000f20364b60758777614c52677d826d584633180800000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000e1c272f322220190d00000000000000000000000000000a18232b2e26231c110400000000000000000000000000000d192022322f271c0e00000000000000001f34495e7489745e49341f0000000000000c2035495a6f847c6759473a2b1c22374c6177856f5a45301a05000000000000000000000000000000000000000000142a3f54697f7d68533d2813000000000000000000000000000000000000081d314455708576614c37210c0000000000000c21374c617685705847331f0a0000000000000316283951667b806b56412b160000000001142636485a677d816c5e4c3b2a1804000000000000000000000000000000031729394b5d697e8372605545382c1d15090100000000000000000000000000000000000000040e1825303f4b504d483b2b18050000000000000000000d22384d627785705a4935200e000000000000000000000000000000000c21364c61768a75604b35200b00001b31465b70867061768675614b3c2c1904000000000000000000000000000000000000000000000000000000000d1d314556667c816c677c7f69543f2a140000000000000000000000000000000000000000081d3144556a807f69545c708579644e3a29170000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000a1c2c39434737342b1d0d0000000000000000000000000618283640433b382f2211000000000000000000000000000d1d2b34374743392c1c0a000000000000001f34495e7489745e49341f0000000000000e23384d637885715f4d3b2a1c0e21364b617685705b46301b06000000000000000000000000000000000000000005192b3b596e8379634e39240e00000000000000000000000000000000000002152737576c817b66503b26110000000000000a1f334758718677614c3828160200000000000b1e3245576c817b66513b2611000000000008182b3c4d5f6d827c665947341f14010000000000000000000000000000000b1b2e3f4f606b8081736056493d31271d140905000000000000000000000000000000070b171f2b36434a5d6562594834200b0000000000000000000b2035485a718678624d3c2c1a0c050002090b0f0d07000000000000000c21364c61768a75604b35200b00001b31465b7086706c817c675746321e0e0000000000000000000000000000000000000000000000000000000000021527384c5e6f8479677c7f69543f2a140000000000000000000000000000000000000000021527374d6277877460647985705c4a361c0c0000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000001427394a565c4d483b2b19050000000000000000000000102336465358504c402f1c09000000000000000000000005192b3b484d5c564a392714000000000000001f34495e7489745e49341f00000000000014293e54697e7f6a5441301d0c0b20354b607586715c46311c0700000000000000000000000000000000000000000b20344859728675604b35200b0000000000000000000000000000000000000012283d52677d806a55402b1500000000000004172a3a54697e7f6a5645321e13070000040d1b2b3c4b60768674604b35200b0000000000000e1e30414c61768577614c42311f0f000000000000000000000000000000001121324251626b808374635b4b443731262019100c0a0400030202020000070b0e121a2129333c4854606a7a77624d37220d00000000000000000005192b3c53687d806b5a49382a201919151d2024211a0f0100000000000c21364c61768a75604b35200b00001b31465b70867079846f5f4d392816000000000000000000000000000000000000000000000000000000000000000a1a30404e6379846f7c7f69543f2a1400000000000000000000000000000000000000000009203448596e837b666d827d67523e2d1b000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000001a2f4356687162594834200b0000000000000000000002162b4053646e665e4c38230f00000000000000000000000b2034485962716856432f1a000000000000001f34495e7489745e49341f000000000003182d43586d827a654f3a251300081d3144557186715c47321c0700000000000000000000000000000000000000000d22374d627785705544311d08000000000000000000000000000000000000000e23384e6378846f5a3d2c1a060000000000000c21364b61768675604b4031201c1316171f2a39485a697e7f695544311d0800000000000000131e334657657a836e604e3d2c1a0a000000000000000000000000000000031424344451626b7e85796960554b4437342b26211f17191817171818131c2023272d363a464c5a62727f8476614c36210c000000000000000000000e21364b607586786356473a352b2e27313639362d1f0f00000000000c21364c61768a75604b35200b00001b31465b7085708479634e41301b0b00000000000000000000000000000000000000000000000000000000000000001221364a5b6c817c7c7f69543f2a1400000000000000000000000000000000000000000005182b3b50657a846f768775604b362010000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000001c32475c718678624d37220d0000000000000000000003192e43586e827c66503b261100000000000000000000000d22374d627886715c47321c000000000000001f34495e7489745e49341f0000000000061b30455b708577624c37220d00011426375c7187715c47321c07000000000000000000000000000000000000000012273c51677c806b5637261401000000000000000000000000000000000000000b20354a607587725b4935210c0000000000000a1e334657697e816c5f4e423530252b2a333b475762788675604b3726140100000000000000031729394b5d6b807e695b493828150200000000000000000000000000000006162634445060697a867e746760554d483b3b3633292e2d2d2c2d2e253035383d3d4a4e58616a78848072615846331f0a00000000000000000000091e324556657b847461584d483c4338454b4e4a3d2d1a07000000000c21364c61768a75604b35200b00001b31465b70857d816b5b49362312000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c6177867d7f69543f2a14000000000000000000000000000000000000000000000d23374b5d7186787f806b5645311d09000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627786715c47321c000000000000001f34495e7489745e49341f0000000000071c31465c718676604b36210b00001c31475c7186715c47311c000000000000000000000000000000000000000001162b41566b807c67513c27120000000000000000000000000000000000000000071c3043546f8478634e38230e000000000000031729394a6072847c68604f4a4336403a474c596275847a6456453219090000000000000000000b1b2e3f4b60738579635645321d0c0000000000000000000000000000000008162633424f5c64757f857c7469625955504c463a44434241424336434a4e52575c646c7680867a6a6054463a29170400000000000000000000031628384b5d687d84776a625a5a58595660645c4a36210d000000000c21364c61768a75604b35200b00001c31475c71868676614c3d2c1a05000000000000000000000000000000000000000000000000000000000000000000000f1f334758697e857f69543f2a1400000000000000000000000000000000000000000000081c2e3f53697e808678624d38271502000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c000000000000001f34495e7489745e49341f0000000000061b30465b708576614c37210c00071c31475c7186715c382715020000000000000000000000000000000000000004182a3a5b708577624d38220d000000000000000000000000000000000000000000132536556a807d67523d2812000000000000000b1c3043546175847d6f65605456555758616a77847c665c4a3828160000000000000000000000101d31445563788574604b3a2a170400000000000000000000000000000000081624323e4a56606a7881867e77706a6561585b5958575757585a546063676c727981867d73645c4b4336291c0c0000000000000000000000000a1a2e3f4e5f687b867f77716f6e6e707579644e39240f000000000c21364c61768a75604b35200b00001f34495f74897d675746331f0f000000000000000000000000000000000000000000000000000000000000000000000004172a3a4b6074867f69543f2a1400000000000000000000000000000000000000000000001121364b617688836e5a48351a0a00000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c000000000000001f34495e7489745e49341f000000000004192e44596e8378634e39230e00071c31475c7186715645311d09000000000000000000000000000000000000000a1f3347587287725a4834200b00000000000000000000000000000000000000000011273c51667c806b56412b1601000000000000001325364657617481837a746e6c6b6d6f777f857a665e4c3e2d1a0a000000000000000000000001152737495a687e816b5847331f0a00000000000000000000000000000000000614202d38454b59626b767d84857f7b7670706e6d6c6c6d6d6f7175787c8187847c746860554a3e3026180c0000000000000000000000000000112131414e5d65747d838684838385847f6a55402a15000000000c21364c61768a75604b35200b0000152a3f546a7f72604a392917010000000000000000000000000000000000000000000000000000000000000000000000000c1d314455647a7b65503b261000000000000000000000000000000000000000000000000a1e334657687e7a644f3c2b19000000000000000000000000000000000000000000000000162c41566b816b56412c1601000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000000000000162c41566b806b56412c16000000000001162b41566b807b665137271501061c31465b718675604b36200b0000000a101212100a010000000000000000000c22374c617785705b3c2b19050000000000000000000000000000000000000000000e24394e6379836e59442e190400000000000000081829394656606c7881858281808284837c73645c4c402f20100000000000000000000000000009192c3c4e60697e76614c37210c00000000000000000000000000000000000002101a28323b484d5761686f767b8084868583828281828384868784807b766f6760554b44372d1c1408000000000000000000000000000000031323313f4c5560676e7176777670706a61503c2813000000000b21364b60758273604b35200b000013273c4f616a605443301b0b00000000000000000000000000000000000000000000000000000000000000000000000000011527374a5c64655d4c38230e0000000000000000000000000000000000000000000000031729394e6068645c4a361e0e00000000000000000000000000000000000000000000000014293d51626b62513d291400000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c0000000000000014293d51626b62513d291400000000000010263b50657b816c5544311d0b001b30455b708576614c36210c0004121d242728251e130500000000000000000f24394e6479836e59432e19000000000000000000000000000000000000000000000c21364c617686715b46311c0600000000000000000b1b2938454b5b636b7076787977756e6760544b3e2f22120200000000000000000000000000000e1e31424f6169615847331f0a00000000000000000000000000000000000000000a161e2b3439464c535861666b6f70757778797979787775726f6b666157514b4437312619100100000000000000000000000000000000000513212f37444b525957606261585b55504333200d00000000091e324556606c605443301c0800000c2032434f544a4336251300000000000000000000000000000000000000000000000000000000000000000000000000000009192d3e4a4f504c3f2f1c080000000000000000000000000000000000000000000000000b1b31424e534f4a3e2e1b000000000000000000000000000000000000000000000000000e2234445156514434220e00000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c000000000000000e2234445156514434220e0000000000000b20364b60758675604b392918081a2f455a6f8477624c37220d03142330393c3d39302313010000000000000010253a4f657a826d58422d18030000000000000000000000000000000000000000000b20354a607586715c47321c070000000000000000000b1a28323c494d5657616364626055524b43362e20120400000000000000000000000000000000132332434f544c473a2a1704000000000000000000000000000000000000000000030d19202933363a474c51565a55606263646463636160545a56514b46393631271d140900000000000000000000000000000000000000000311192731353d39454b4d4c463a403c332515030000000003162838454b574b43362614010000031525323c3f35302518080000000000000000000000000000000000000000000000000000000000000000000000000000000010202d363a3b382f211100000000000000000000000000000000000000000000000000001424313a3e3a362e201000000000000000000000000000000000000000000000000000051626343d413d3426160500000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000000000000051626343d413d34261605000000000000091d3145566b807d685746362518192f44596e8478624d38230d161e32414d51524d41301e0a0000000000000010263b50657b816c57422c1700000000000000000000000000000000000000000000091e3245567286725c47321d07000000000000000000000a161e2c353839464c4e4e4c4b44373530261810020000000000000000000000000000000000051425323b3f37332a1c0c000000000000000000000000000000000000000000000000050b171e212a33373c4137444b4d4d4e4f4e4d4c4a4336403c363229201d150901000000000000000000000000000000000000000000000009151d2028283236383633292a282015070000000000000a1a28323642353026180800000000071520272a201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222426231c1103000000000000000000000000000000000000000000000000000006141f262824221b10020000000000000000000000000000000000000000000000000000081622292c292216080000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c0000000000000000081622292c2922160800000000000000021527384c6176867561544336291d2e43586e8378634e39231d2932424f5f67675f4d392510000000000000000f24394f6479836e58382715020000000000000000000000000000000000000000000b21364b607686715b46311c060000000000000000000000020e192123293336383937353126201c140800000000000000000000000000000000000000000714202729211f170c000000000000000000000000000000000000000000000000000000030a0c171f21262b2731353738393a3938373530252b26211e160b0802000000000000000000000000000000000000000000000000000001080b12161e2122211f1715130d0300000000000000000a161e212d201c1408000000000000030c13150b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f100e080000000000000000000000000000000000000000000000000000000000020b11130f0d070000000000000000000000000000000000000000000000000000000000050e1416140e05000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c000000000000000000050e1416140e050000000000000000000a1f334758677d83726054463a312742576d8279644f39273139464b60697c7d67523d2812000000000000000d22374c627785705645311d090000000000000000000000000000000000000000000d23384d6278846f59442f1a0400000000000000000000000000060c0e171e21232422201d140b080100000000000000000000000000000000000000000000030c12140c0a0400000000000000000000000000000000000000000000000000000000000000040a0c1116151d2022232424242322201c1316110c0a0300000000000000000000000000000000000000000000000000000000000000000003090b0d0c0a040000000000000000000000000003090b170b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c000000000000000000000000000000000000000000000000000417293a4d5f6b80807261584b443741576c817a654f3a37444b57616d7e8777624c37220d000000000000000b1f344859718675604b362013020000000000000000000000000000000000000009192c3d52687d7f69543f2a140000000000000000000000000000000000030a0c0e0f0d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d0e0f0f0e0e0c0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d171c1f1c170d01000000000000000000000000000000000000000000000000000000000000000000000000000812181b1b1b1b1b1b1b1b1b1b1b1b1b1f1c1b1b1b1b1b1b1b1b1b1b1b1b0e0c06000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c0000000000010a101217150f05000000000000000000000000000c1c30414a6072808376686055504b566b807b65504b4e5560687582847662594834200b0000000000000005182a3b566b817b665142311e160e0d0d0b070000000000000000030a0c0d0d0f192737495b6e8378634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c121419171107000000000000000000000000000000000000000000000000000000000000060f151815130d04000000000000000000000000000000000000000001111f2a3134312a1f110100000000000000000000000000000000000000000000000000000000000000000000000c1a252d3031313131313131313131313134323131313131313131313131312321190e0000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c0000000005131e25282c2a22170900000000000000000000000000131c304354606a7c867e756b6560556a807b665460646a757d877f736158483b2b180500000000000000000d22384d6278846f604e403228242322201c130800000000000b161e212323252c3744556379846e5b4935210c00000000000000000000000000000000000000000000000000000000000000000000000000000002090b10141517171614120d0b0500000000000000000000000000000000000000000000000700000000000000000000000000000000000000090e1017140c0903000000000000000000000000000000000000000000000000000000060f161814120c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f26292f2c24190a000000000000000000000000000000000000000000000000000000000917232a2d2b28211507000000000000000000000000000000000000000d1f2f3d4649463d2f1f0d00000000000000000000000000000000000000000000000000000000000000000000081a2a384145464646464646464646464646494746464646464646464646464638352c1e0e00000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000001132330393d413e3427170500000000000000000000000000132536434a5e66757f86807a7571707f7d6f70757980878278696055473a2b1d0d0000000000000000000b2034485a6b807d685e4b453839383835302518080000000b1b29323638383a3d495560738479634e3d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000070b151d2025292b2c2c2b2a27222019110b080100000000000000000000000000000000070c0e1d12100a000000000000000000000000000003111c23262c2a211e160b000000000000000000000000000000000000000000000000000917232a2d2a272015070000000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e4440362919000000000000000000000000000000000000000000000000000000001727353f42403c33251504000000000000000000000000000000000000172a3d4d5a5e5a4d3d2a170300000000000000000000000000000000000000000000000000000000000000000012253848555a5b5b5b5b5b5b5b5b5b5b5b5b5e5c5b5b5b5b5b5b5b5b5b5b5b5b4d493c2c1906000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c0000000a1e30414d5257524534220f0000000000000000000000000008182530404d57616a757c828586858685848585827d766c625a4b44372a1c0d0000000000000000000005192b3c4b6073837c6a6056504e4d4d4a43362513000003162939464b4d4d4f525b6373817e685b4a361f0f00000000000000000000000000000000000000000000000000000000000000000000000008131c202731363a3e404242403f3c38352b26201d150903000000000000000000000000010f1a21243227241d120400000000000000000000000513212f383b413f3632281b0b0000000000000000000000000000000000000000000000061727353f423f3c32251501000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f53595447361c0c00000000000000000000000000000000000000000000000000000a1a3545525755504333210d0000000000000000000000000000000000001c31465a6b746b5a46311c08000000000000000000000000000000000000000000000000000000000000000004182d415566707070707070707070707070707471707070707070707070707070635b4935210c000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c0000001025394d5f676c63523e2a15000000000000000000000000000008131c3039464b5660676d7075767f7f7675706d6761574d483c3126190c0000000000000000000000000d1d3144556074837f756b66636262605443301c07000a1e32465761626264686e78837d68604e3d2d1a010000000000000000000000000000000000000000000000000000000000000000000004121825303538454b4f535557575554514d483c3b3531271e170b0100000000000000000002101f2d3639473c393022120000000000000000000001132330404c5057544b4639281909000000000000000000000000000000000000000000000f2335455257544f43321f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000012263b4f60696e65543a2917040000000000000000000000000000000000000000000000000215273852636d6a61503c280e0000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000051b30455a7085868686868686868686868685898685868686868686868686868678634d38230e000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000012283d52677d816c57412c1702000000000000000000000000000000121b283238454b51575460687d7e69605458524b4639352b1d140900000000000000000000000000011527374556606e7c85817b79787872604a35200b000c21364b617578787a7d828379675f4e41311f0f000000000000000000000000000000000000000000000000000000000000000000000c171f3036434a51566065696a6c6c6b6967625a58514b443733291d1509000000000000000210202d3d4a4e5c514d40301d0a0000000000000000000a1e30414d5e656c6961574637271501000000000000000000000000000000000000000001162a3f52636d69614f3d2d1909000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a53697e836e5846331f0a000000000000000000000000000000000000000000000000091d3145566d81806a553c2c190600000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000004182d41556670707070707070707070707070847b707070707070707070707070635b4935210c000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000012283d52677d816c57412c1702000000000000000000000000000000000b161e2832363c364352677c7f6a5543363d36332920190e0100000000000000000000000000000009192838454b5f676f797e80818178634d38230e0012273d52677d81817f7c776e635b4d41312313010000000000000000000000000000000000000000000000000000000000000000000c1c2933404d5460666f757a7e808181807f7c77706d6660554b46393127190f01000000000311202e3e4a5b6372675f4d3924100000000000000000001025394d5f677b817f75615544311d08000000000000000000000000000000000000000002182d42576d827f695b4a37271501000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586f848576614c36210c0000000000000000000000000000000000000000000000000b20364b60758685705a4935200c00000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000012253848555a5b5b5b5b5b5b5b5b5b5b5b6f847a655b5b5b5b5b5b5b5b5b5b5b4d493c2c1906000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000012283d52677d816c57412c17020000000000000000000000000000000000030a161e2127263c51667c806b55402628211e170b050000000000000000000000000000000000000a1a2832414d525c64696b6c6c635a4935200c001025394d5f676c6c6a6761584e493d312313050000000000000000000000000000000000000000000000000000000000000000000c1c2a3a464c5e66737b8486827d7b79797a7c7e8385827b756a61574b44372d1f130000000311212e3e4b5c6479867c67513c271200000000000000000012273c52677d9096948573604b35200b0000000000000000000000000000000000000000000c21364c61768779635544311d0f000000000000000000000000000000000000000000000000000000000000000000000000000c21374c617784807d68523b2a1804000000000000000000000000000000000000000000000316283951667b818378634d38230e00000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000081a2a38414546464646464646464646596f847a654f4646464646464646464638352c1e0e00000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000012283d52677d816c57412c17020000000000000000000000000000000000000003090b12263b50667b816b56412c160c0a030000000000000000000000000000000000000000000a161e30393e4a4e535557574d493c2c1906000a1e30414d52575655524c473a352c1f13050000000000000000000000000000000000000000000000000000000000000000000c1c2a3a4758616d7c868279716d686564646566696e707880847f766960554a3d311c13080412222f3f4b5c647a877c675f4d3924100000000000000000051a2f455a6f849aaca38e79644f39240f0000000000000000000000000000000000000000000a1e334657657b8673604b3e2d190900000000000000000000000000000000000000000000000000000000000000000000000316283952687d7f7a846f5947341f0b00000000000000000000000000000000000000000000091e3245576e837c7d7e69543b2a1805000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000c1a252d3031313131313131313144596f847a654f3a3131313131313131312321190e0000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000012283d52677d816c57412c17020000000000000000000000000000000000000000000010253a50657a816c57422c170200000000000000000000000000000000000000000000000003131e252d36393e40414138352c1e0e000001132330393d41413f3d37332a211a0e0000000000000000000000000000000000000000000000000000000000000000000004172a3a475861768284786d645c5753504e4e505154585a636a747c847f74635b4e41302518132230404c5d657b887b665e4d40301d0a000000000000000004192e44596e8399a89f8d78634e38230e000000000000000000000000000000000000000000031729394b5d6c817f6a5c4a3727150200000000000000000000000000000000000000000000000000000000000000000000091e3246576e8378728777614c37220e000000000000000000000000000000000000000000000b21364b607687747785705948341f0b000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000812181b1b1b1b1b1b1b1b1b2f44596f847a654f3a251b1b1b1b1b1b1b1b0e0c06000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000012283d52677d816c57412c1702000000000000000000000000000000000000000000000f243a4f6479826d58422d180300000000000000000000000000000000000000000000000000010a0f1a2124292b2c2c2320190e0000000005131e25272c2c2a27221f180c0600000000000000000000000000000000000000000000000000000000000000000000000a1f3347586176867e6f625a4f4a3e3d3b39393b3c3f3c494d546066737d8479685f4a4336252330404c5e667b877b655d4c40302212000000000000000000000f243a4f647a8a9390816c5b4935210c000000000000000000000000000000000000000000000b1b2f3f4b60758679645544311d10000000000000000000000000000000000000000000000000000000000000000000000c21364b617685706a807e69533c2b190500000000000000000000000000000000000000000417293a52677c816c708577624c37220d000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000405060606060606061a2f44596f847a654f3a251006060606060606000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000012283d52677d816c57412c1702000000000000000000000000000000000000000000000e23384d6378836e58432e190300000000000000000000000000000000000000000000000000000000070d0f141617170e0c06000000000000010a1012171715120c0a040000000000000000000000000000000000000000000000000000000000000000000000000a1a30404c6176857d69604d493c362d282624242527292c3536434a54606877837d6b6054433031414d5e667c877a645c4b3f2f221204000000000000000000000d22364a5c64787d7b6c63523d2c1a060000000000000000000000000000000000000000000000111e324557657a8674604b3e2d1a0a00000000000000000000000000000000000000000000000000000000000000000215273751677c806a637885705a4835200b00000000000000000000000000000000000000000a1f3346586e847a65697e7d68533a2917040000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66503b261100000000000000000000000d22374d627787715c47321c00000012283d52677d816c57412c1702000000000000000000000000000000000000000000000c2035495a6376614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384d5e6e837e695f4f42352b221b13100f0f1011141920253036434a596273808072604a44414e5f677c8779645c4b3e2e2112040000000000000000000000071b2d3e4a5a6268655d5245351f0e000000000000000000000000000000000000000000000000031628394b5d6b80806a5c4a3828150200000000000000000000000000000000000000000000000000000000000000081d3144556d8379645b718677624d38220f00000000000000000000000000000000000000000c21364c61768774606278846f5846331f0a0000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000003192e43586e837b66513b261100000000000000000000000d22384d627786715c47311c00000012283d52677d816c57412c17020000000000000000000000000000000000000000000006192c3c4957615746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030503000000000001080b0e1113141413110d0b06000000000000000000000000000000000000091d314556667c8572604a413220190e07000000000000000608131c25303b4854606b7e816c62514e5f687d8778635b4a3e2e2011030000000000000000000000000010202d3c484d53504c3f35271700000000000000000000000000000000000000000000000000000a1b2e3f4b6074867a645645321d10000000000000000000000000000000000000000000000000000000000000000b20364b607586715c546a7f7f69543d2c1a0600000000000000000000000000000000000005182a3b53687d806b545a718676614c36210c0000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000051a2f445a6f847c67523d271200000000000000000000000e23394e637885705b45301b00000012283d52677d816c57412c170200000000000000000000000000000000000000000000000e1e2c39464c463929170300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000811181a181108000808141c20232728292928262320190f0d080000000000000000000000000000000b20364b607487786254433023140600000000000000000000000008131c2b36434b60697f816c6160687d8678635a493d2d201002000000000000000000000000000002101e2b35383e3b382f211709000000000000000000000000000000000000000000000000000000101d324556647a8674604b3e2e1a0a00000000000000000000000000000000000000000000000000000000000114263650667b816c574d627886715b4935210c0000000000000000000000000000000000000b1f3447596f8479644e556a807c67523828160200000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c718677624d37220d00000000000000000000011527375b70857e69543e291400000000000000000000000f253a4f647a846e59442f1900000012283d52677d816c57412c17020000000000000000000000000000000000000000000000000e1b29333633291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b19252c2f2c2519111c23263035383c3e3f3f3d3b38352b25221b10070000000000000000000000000012273d52677c826d5a49362513050000000000000000000000000000000d182630424f616b807f69697e8677625a493c2c1f100200000000000000000000000000000000000e1920222826231c110300000000000000000000000000000000000000000000000000000000021528384a5c6b80806b5c4a3828160200000000000000000000000000000000000000000000000000000000081c3043546c827a6550485a708578634e3823100000000000000000000000000000000000000d22374c627786715c4a4f6479836e5645321e0900000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c718677624d37220d00000000000000000000081d3144557186806b55382816030000000000000000000011263b51667b826d58432d1800000012283d52677d816c57412c1702000000000000000000000000000000000000000000000000000b171e211e170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081929374144413729222f3836434b4e5153545453504d483c3a372e221b10010000000000000000000004182a3a596e837b66503c2c1808000000000000000000000000000000000008141c32434b6072847a7e85766259483c2c1e0f0100000000000000000000000000000000000000050b0d13100e09000000000000000000000000000000000000000000000000000000000000000a1a2d3e4b6074867a645645321e10000000000000000000000000000000000000000000000000000000000b20354b60748675604b3c53697e806a553e2d1b070000000000000000000000000000000005192b3c53697e7f6a553e4a5c718775604b36210b00000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c718677624d392816030000000000000000000b20354b607585846f5645321e0900000000000000000001142636546a7f7f69543f2a1400000012283d52677d816c57412c17020000000000000000000000000000000000000000000000000000030a0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011253747545a544737363f4c50546063666869696866625a574f4b3e362d1d14090000000000000000000a1f334758738876604b36210e0000000000000000000000000000000000000009182530435461778885766158483b2b1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d31445563798675604b3f2e1a0a00000000000000000000000000000000000000000000000000000010253a4f657a826d5544374c617786715c4a362208000000000000000000000000000000000b2035485a708578634d383e576c817b665137271501000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c71867c665746321e130300000000000000000e24394e6379818476604b362111000000000000000000081c3043546e837a654f3a251000000012283d52677d816c57412c170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182c4154656f65543e4a4f5d656d75787c7d7e7e7d7b78716c645c4f4a3e3126190a00000000000000000c22374c617787725745321e0900000000000000000000000000000000000009192636434a626c8086846f5f4d3a2a1d0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374a5b6a7f806b5d4b3828160300000000000000000000000000000000000000000000000000071a2d3d566b817c6651373447596f8479644e362513000000000000000000000000000000000d22384d627886715b49353b50657a826d5544311d08000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c71878575614b413021110200000000000005192b3c53687e7c7f7c6651402f1d0c00000000000000000c20354b60748774604b36210b00000012283d52677d816c57412c1702000000000000000003090b0b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b17110f09000000001a2f445a6f846f5a4f5c64707b8385827f7d7c7c7d808386827a6f645c4b4437281a0a000000000000000e23394e637885705b3928160300000000000000000000000000000000000a1927374454606c818476837c675645321d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192d3d4b6073857a645645321e11000000000000000000000000000000000000000000000000000c21364a5b718676614b362a3b52687d806b5443301c070000000000000000000000000000061a2c3d546a7f7e69543c2c354b60758775604b35200b000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c71867b816c5f4d3f2e2013050000000000102035485a6f84767784705e4c3b2a1a0d0100000000000c1c2f3f50657b826d5645321e0900000012283d52677d816c57412c1702000000000000000a161e21201d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e212c26241d120400001c31465c71867154616a7a858279716d6a686767686a6e747a82847a6a605545382818080000000000000f24394e6479856f5a45301a00000000000000000000000000000000000a1a27374455607281837462788775604b3827150200000000000000000000000000000000000000000000080e100b0801000000000000000000000000000000000000000000000000000000000000000000000f1d31445563798675604b3f2e1b0b0000000000000000000000000000000000000000000000000e24394e6379846e57463221364c61768774604a35200b00000000000000000000000000000c2135495b718677624d37223144556d827a6550362513000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c718675807d675d4b3f3020190e0b0a0c131c2f404d6278846f6d827b665947382a1d150c0b0a0c121c2a3a4b5d6e837a654f3828160300000012283d52677d816c57412c17020000000000000a1b283236363127190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a283236423c382f221200001c31475c718675606c7f84786c645c585552515253555460646d788480736056453626140100000000000e23384e637885705b3b2a18050000000000000000000000000000000b1a283845556073828273605a6b807e695645311d09000000000000000000000000000000000000000003111c2326201c140800000000000000000000000000000000000000000000000000000000000000000001142637495b697e816c5d4b392816030000000000000000000000000000000000000000000006192c3c556a807d685339281e3346576e837a654f37261401000000000000000000000000000e23384e6378857059483420273751667c816c5443301c070000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c32475c71867572837b655d4d41352b22201e2125303e4c5e6e837a65617785776156473b312722201f2124303a4758657b846f5d4b371a0a0000000012283d52677d816c57412c1702000000000003162839454b4b443727150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192838454b57514c402f1d09001c32475c7186756c818072625a4e4a3e3f3d3c3c3d36434a4f5b63727f8374605443301c1000000000000c21364b617688735947341f0b00000000000000000000000000000b1b28384556607382827360554c62778775604b36200d000000000000000000000000000000000000000011212f383b353026180800000000000000000000000000000000000000000000000000000000000000000009192c3d4b6073857b655746321e11000000000000000000000000000000000000000000000c2035495a718677614c372217293951677c816c5544311d08000000000000000000000000071b2d3e556a807d68533b2b1921364b60768774604a35200b0000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c31475c7186756175837b675f4d483c3835333636434a5c667c846f5d59667c847462594b44373735333739404c5861768678624d3f2e1b000000000012283d52677d816c57412c17020000000000091e32455760605544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081827374556606c665e4c38240f001c32475c718676807f6b6054493c362d2a282727282530353c4954606a7e8372604b3e2d1b0700000000091e324657728777624c37220f000000000000000000000000000c1b29394656607483817260554448596e837d67523b2b1805000000000000000000000000000000000000081c2f3f4c504b43362614010000000000000000000000000000000000000000000000000000000000000000000f1c30435462788675614b3f2f1b0b0000000000000000000000000000000000000000000d23384d627885705847331f0b21364b60758775604b35200b0000000000000000000000000d22364a5c718677614c37210d1e3245576e8479644f3a240f0000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c31475c718671576175837d6e625a524d4b464c4e5460697a8777624c4c5e687e8577686055504c4b474c4e545e6676857c665a48342110000000000012283d52677d816c57412c170200000000000b21364b607574604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263644556074817c66513c2611001c32475c71867d826d614a43362b221b1513121213131c202c36434a606a807f6a5c4a3622110000000003162839586d827c67523e2d1a0700000000000000000000000c1c2a394657617483806c605444373b4f647a8570594834200b0000000000000000000000000000000000000e23384c5d65605443301c080000000000000000000000000000000000000000000000000000000000000000070b142636495a687e816c5d4b392917030000000000000000000000000000000000000005182a3b54697e7e69543a2a18091e3245566d827b65503828150200000000000000000000001325364f6479846f5847331f0a16283952687d806b563d2c1a0600000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001c31465b7186715b5761738083786e6762605761636a737e8679635947404e60687c867d746b65616058616369707c857b665e4c3c2b1903000000000012283d52677d816c57412c17020000000000152b40556a807b66503b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007151c304354607383826d5e4c38240f001c32475c71878574604b433025180e07000000000000070e182530424b6073867a644f402f1c090000000011263b50667b846f5c4a362112000000000000000000000d1c2a3a4757617584806b624a433626374b5d728877624c37220d00000000000000000000000000000000000010263b50657b73604b35200b000000000000000000000000000000000000000000000000000003090b1217131c2021202c3c4e606f847b655746331e11000000000000000000000000000000000000000b1f344859708578624d38230d0216283850667b826d5645321d0900000000000000000000071c3043546b807d67523a2a17040c22374c617786715b4935210c00000000000000000000001f34495e7489745e49341f151515151515151515151515151515151515151515150b0802000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000001b30455b7085705b4655606b7983837c77757076797f858277635b4a3b31424e5e66778186807a77757076797f848176655d4c402f1d0d00000000000012283d52677d816c57412c17020000000000152b40556a807c66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006152534444b6072828272604b402f1d09001c32475c71867a655645321c13080000000000000000000008131d314455657a85705e4c38230d000000000b20354b60738679644e402f1d0d00000000000000000e1d2b3a47586175847f6a6151443025182e3f576c817d68533e2813000000000000000000000000000000000002182d42576d8276614b36210c000000000000000000000000000000000000000000000000040a161e21272c25303536353031424d62788675614b402f1b0b0000000000000000000000000000000000000d22374c627786715a4935200b000b20354b60758775604b36200b000000000000000000000b20354a60748776614b36210c000a1f334758708578634e38230e00000000000000000000001f34495e7489745e49342a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a201d15090000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000000d22374d6277624d37444b5b636e787e83858585837e786d62594a3d2d2331404c59616c767c8184858584827c766c61584b3f2f22120000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051424334351626c81837360544330221200001c32475c718677624d38281600000000000000000000000000011426374b5d6e837b66503b2b1805000000081c304354677c846f5e4c3b2b1b0b0000000000000e1e2b3b48596176857e69615043341c1311263b50667b836e58392816030000000000000000000000000000000002182d42576d8277614c37220c00000000000000000000000000000000000000000000000c171f2832363c4236434a4b4a4336424859687d826c5e4c39291703000000000000000000000000000000000417293a53687d806a553c2b190600081d3144556c817c6651392916030000000000000000011527374f657a836e5746321e0a0004182a3a54697e7f6a553c2b1905000000000000000000001f34495e7489745e493f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f363127190900000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000000b2034485962594834313d4a4e5a62696e7070706e68625a4c473b2d1f1322303b474c5761666c6f70706f6c6761574c473a2e2112040000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041323324250616b8084746055443626140400001c32475c718777624d37220d000000000000000000000000000009192e3f4f657a846f594834200b000000011426364a6072857c66594839291b0d000000010f1e2c3c48596277857d68604f43332516000c21374c617687725746321e090000000000000000000000000000000002182d42576d8277624d38220d00000000000000000000000000000000000000000008131c2a3339454b51575a54606060545a57524c5f6e837b665746331e11000000000000000000000000000000000a1f3346586f8479644e39240f0000011527374f657a836e5746321e0a0000000000000000081d3144556c817c66513929160300000d23384d627886715a4834200b000000000000000000001f34495e7489745e555555555555555555555555555555555555555555555555554b4437271502000000000000000000000000000000000000041a2f44596f847a654f3a2510000000000000000000000000000000000000000005192b3b484d483b2b1d2d363c494d54585b5b5a58534d483c342a1d0f04121d2a3439464b51565a5b5b5a57524c4639332a1c1103000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003122230414f606a7f8575615645372718080000001c32475c718777624d37220d0000000000000000000000000000001120354a60748777624c37220d00000000081c30435463788778625746392b1d1205010f1f2c3c495a6277867d685f4e4232251507000a1f334758728776614b36210c0000000000000000000000000000000002182d42576d8278634e38230e00000000000000000000000000000000000000000b1825303a474c5760676c707075767570706c67615862778676614c402f1b0b0000000000000000000000000000000c21364c617687725c4a36220d0000000b20354a60748776614b36210c00000000000000000b20354b60758775604b36200b0000000b2035485a718677624d38220d000000000000000000001f34495e7489746a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a605544311d08000000000000000000000000000000000000041a2f44596f847a654f3a25100000000000000000000000000000000000000000000d1d2b3437342b1d0f1a212c35383e43454645433e38352b1f180d0000000c181f2933363c4144464644423c3633291f170c0000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b26110000000000000000000000000000000000000000000000000000000000000001000000000000000000000002112130404d5f697e857661574638281909000000001c32475c718777624d37220d000000000000000000000000000000071c3043546b807e68533e29130000000000132536495a677d85756157483b2f2019101f2d3d495a6378867c675f4e413124150700000417293a596e8378634d38230e0000000000000000000000000000000002182d42576d8279644e39240f000000000000000000000000000000000000000b1b2936434a58616b767c8185848484858484827d766d63677c826d5e4c39281603000000000000000000000000000216283852677c816c563e2d1b07000000071c3043546b807c67523a2917040000000000000215283850667b826d5645321d0900000006192b3c556a807e69533a2a18040000000000000000001f34495e74897f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f74604b36200b000000000000000000000000000000000000041a2f44596f847a654f3a2510000000000000000000000000000000000000000000000d19202220190d00070e192023292e3031302e292320190e050000000000040b171e21272c2f30302f2d27211e170b04000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b2611000000000000000000000000000000000000000000000000050b0d1013141516151413100d0b050000000110202f3f4c5e677d867761584739291a0a00000000001c32475c718677624d37220d000000000000000000000000000000001325364f647a836e593b2b18050000000008182c3c4d5f697e847562594c40342b202d3d4a5b6378867b665e4d4131231406000000000d22374d627775614b36210c0000000000000000000000000000000002182d42576d827a644f3a250f0000000000000000000000000000000000000b1b2939465460697680857f797570706f6f7070787d8383796d6e837b655746321e0f00000000000000000000000000091e3245566e837a65503b251000000000001325364f6479846f5847331f0a000000000000091d3245566d827b655038281502000000000f24394e6479856f5847331f0a0000000000000000001f34495e74897d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d74604b35200b000000000000000000000000000000000000041a2f44596f847a654f3a25100000000000000000000000000000000000000000000000050b0d0b0500000000060c0d14191b1b1b19130d0b06000000000000000000030a0c11171a1b1b1a17120c0a030000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b26110000000000000000000000000000000000000000040a0c1318202225282a2b2b2a292826222018130d0b0f1f2e3e4c5d667c87786259473a291b0b0000000000001c32475c718677624d37220d000000000000000000000000000000000c21364b61768873594834200b00000000000e1e30414f60697e8578665e4d483b343e4a5b6379867b655d4c403023130500000000000b2034485962615746331e0a0000000000000000000000000000000002172c41576c817b66513c2c1d0f0100000000000000000000000000000008182939465761727f847c746a6460555a5a5a5a5a62686e78838276778575614b3d2c1a060000000000000000000000000b21364b60758875604b35200b00000000000822364a5c718676614c37210d0000000000000b20364b60758675604b35200b00000000000d21364a5c728777614c37220c0000000000000000001f34495e7489746868686868686868686868686868686868686868686868686868605544311d08000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b2611000000000000000000000000000000000000080c171f21282b34373a3d3f4041403f3d3b37342b2822201e2d3d4b5c657b87786359483b2a1c0c000000000000001c32475c718677624d37220d000000000000000000000000000000000a1e324657728777624d37220d000000000000132332424f60687c867c6d62594d484b5c6479867a655d4b3f2f22120500000000000005182b3b484d4b4639291703000000000000000000000000000000000013293e53687e806b5a493b2d1f13030000000000000000000000000000132536465761758380736760544f4b443745453c494d535b636e7a847b7d806b5b4936211100000000000000000000000114263751667b826d5544311d080000000000071b2d3e556a807d68533b2b1805000000000316293951667c816c5544311d080000000000071a2d3e566c817d68523929160300000000000000001f34495e7489745e525252525252525252525252525252525252525252525252524b4437271501000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000000000071117191a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1b16140d04000000000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b26110000000000000000000000000000000007101b222933373d3b484d5053545556555453504d483b3e37342c3c4a5b647a8779635a493b2b1d0c00000000000000001c32475c718677624d37220d0000000000000000000000000000000003162939596e837b65503b261000000000000005142432424e5e66778482786b62595c647a8679645c4b3f2f21120400000000000000000d1d2b34373633291b0b0000000000000000000000000000000000000c21364c6176877863594a3d301e160a000000000000000000000000071c3043546175857c6b60544a43363531272f302b35383d494e5d6576837c8379634e3f2e1c0800000000000000000000081d3144556d827c6651372614010000000000001023384e6378846f594834200b000000000a1e3246576e837a644f3726140100000000000010253a50657a846e5746321e0a00000000000000001f34495e7489745e493d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d353127190900000000000000000000000000000000000000041a2f44596f847a654f3a25100000000000000000000000000000000b19242c2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f302b282116080000000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b2611000000000000000000000000000003101b222e373a474c535859626568696a6b6a696865625959534d483c495b6379877a645b4a3c2c1d0d0000000000000000001c32475c718677624d37220d0000000000000000000000000000000000162c41566b817d68533d28130000000000000006142431404c59626f7b8680776e697a8679635b4a3e2e211103000000000000000000000d182022211e170b000000000000000000000000000000000000000a1e334657657c8677645c4d4132281a0e0000000000000000000004172a3a4a6072837d675e4b43363025201d151a1a1920232c353f4b586173817f836e5d4b37230f000000000000000000000b20354b60758776604b36210b000000000000000c2135495b708577624c37220e000000000c21364b617686715c4b371909000000000000000b20354b60758876614b36210c00000000000000001f34495e7489745e49342828282828282828282828282828282828282828282828201d15090000000000000000000000000000000000000000041a2f44596f847a654f3a2510000000000000000000000000000007192936404444444444444444444444444444444444444444444444444444444444444444444444444445403d3326160400000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b2611000000000000000000000000000a161e2d363f4b4f5861686e71777a7d7f80807f7e7d7b77716e686259505a6379877b655c4a3d2d1e0e000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000152a40556a7f7f6a553f2a1500000000000000000614222f3b484c5e66737c83837e8678635b4a3d2d201002000000000000000000000000050b0d0c0a030000000000000000000000000000000000000000031729394c5e667c867a675f4b45382c1e110300000000000000000a1f334758697f816c5f4d4030261c130b08010000060b0e1a212e3a4655607383837b65503d2d1a0700000000000000000010253b50657a846e5745321e0900000000000000061a2c3d54697f7e69543c2b1906000004172a3a52677d806b563e2e1b0000000000000000081d3144556d827c675138271502000000000000001f34495e7489745e49341f131313131313131313131313131313131313131313130b0801000000000000000000000000000000000000000000041a2f44596f847a654f3a251000000000000000000000000000001124364754595959595959595959595959595959595959595959595959595959595959595959595959595b55504433210d00000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b26110000000000000000000000000e1a28323e4a4e5d646e767d838683817e7c7b7a7b7c7d808386837d776f666278877c665d4b3e2d1f0f00000000000000000000001c32475c718777624d37220d000000000000000000000000000000000014293e54697e806b56412b1600000000000000000003111d2b34404c5460666e7c8778625a493d2d1f1002000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2f404c5e667a867d6c6056493c2f211103000000000000021628384c61768775614b41311c140800000000000000000006111b29374455617785846f5b4a36210c0000000000000000071b2d3e576c817d68523928160300000000000000000f22374d627785705a4935200b00000a1f3347586f8479634e39241000000000000000000114263751667c836d5645311d09000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a25100000000000000000000000000000172c4054656e6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f706b62503d281400000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b26110000000000000000000002101e2c38454b5c646f7a83857f78716e6b686666656566686b6e71787e85847b77867c675e4c3f2e20100100000000000000000000001c32475c718777624d37220d000000000000000000000000000000000013283d52687d816c57412c1700000000000000000000000d18202f37475963798778625a483c2c1f0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f404c5c6476838275635a4b3f2f2111020000000000091e3245566b807e695746322313010000000000000000000000000b1927374758687d8979634e39230e00000000000000000d22364a5c728777614c37220c0000000000000000000b20344859708578624d38230f00000c21374c617686715b4a36210c0000000000000000000b21364b60768875604b36200b000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847a654f3a25100000000000000000000000000000192f44596e8383848484848484848484848484848484848484848484848484848484848484848484848385806b55402b1600000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b26110000000000000000000311202e3c4956606c7985837a716a635b59565351505050515356595a626870788289816d61584b3f3022130500000000000000000000001c32475c718777624d37220d000000000000000000000000000000000012273d52677c816c57422c17000000000000000000000000081d3144556277867a645a493c2b1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000312222f3e4a57616e7e8678655d4c402f201000000000000b21364b60758875604b39281605000000000000000000000000000009192a3a4b607386816b563b2b1905000000000000000f243a4f647985705847331f0a00000000000000000005192b3b53687e7f6a543d2c1a0605182b3b53687d7f6a553d2d1a07000000000000000000091e3245566e837b6650362614010000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000060c0e0d0b050000000000041a2f44596f847a654f3a25100000000000000000000000000000192f44596e836f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7a806b55402b1600000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b261100000000000000000111212e3e4b5a637581857a6e645c544e493d413e3c3b3a3b3c3d403c484d535b636d78848276655d4c4031231303000000000000000000001c32475c718777624d37220d000000000000000000000000000000000013283d53687d816b56412c160000000000000000000000071b2d3e4b6074857d675c4a3c2c1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412202d39464c60687a867b655e4c3e2d1b0b0000000011263c51667c826d5645321b0b000000000000000000000000000000000c1d314455687d8772594834200b000000000000061a2c3d566b807e69543a2a1804000000000000000000000d22374c617786715b4936210c0b203448596f8478634d38230f000000000000000000000316283852687d826c5443301c080000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000010f1a21232220190d00000000041a2f44596f847a654f3a25100000000000000000000000000000192f44596e846e595959595959595959595959595959595959595959595959595959595959595959596479806b55402b1600000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b261100000000000000000f1f2e3f4b5c6478867f73645c4f4b3e39352c2c292726252627282b2b35383d494e5a626f7d877b665e4e42312111000000000000000000001c32475c718677624d37220d000000000000000000000000000000000014293e53697e806b55402b1600000000000000000000000d22364a5c6b80816c5f4d3e2d1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b2933424e5d6478867c655c4a3a291704000000172c41566c817d68523828160000000000000000000000000000000000011426374c61768a78624d37220d0000000000000c2135495b728778624d38230d00000000000000000000000a1f3347586f8478634e3923100d22374c627785705a4935200c00000000000000000000000c21374c61768874604b35200b0000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000f1f2c353838342b1d10020000041a2f44596f847a654f3a25100000000000000000000000000000192f44596e846e5944444444444444444444444444444444444444444444444444444444444444444e6479806b55402b1600000000000000000000000000000000000012283d52677d816c57412c17020000000000152b40556a807b66503b2611000000000000000c1c2c3d4b5d657b877b6a60554a3e372e23211a1613111110101113161920232c353c494d5f6779857c68604e3f2f1e0e0000000000000000001c32475c718677624d37220d0000000000000000000000000000000000162b40556b807e69533e291400000000000000000000081c2f3f4f647a8775604b413020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e313f4b5a6278877a645846331f0e0000001b30455b708579634e39240e000000000000000000000000000000000000091f33465870857c66513b26110000000000000e23384e637886715a4935200b000000000000000000000004182a3a52677d806b553e2d1b192c3c54697e7e69543c2c190600000000000000000000000a1f33475870857a654f3a25100000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000061a2c3d494e4d483c2d20110300041a2f44596f847a654f3a25100000000000000000000000000000192f44596e846e59442f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f394e6479806b55402b160000000000000000000000000000000000000c22374c617678624d38230d000000000000152b40556a807b66503b261100000000000004172a3a495b657b8679655d4b44372d221b100c06000000000000000000060b0e1a212b35414d5b6377857e685d4c3c2c190900000000000000001c32475c718677624d37220d0000000000000000000000000000000001142636576d827c67513c2712000000000000000000000e23374b5d70857b66574532231302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000314202e3c485a657b8776614c3c2b190600001e33485d738876614b36210c0000000000000000000000000000000000000417293a576d827e68533d2813000000000005192b3c556a7f806a553c2b19060000000000000000000000000c21364b617686715c4a36222035495a708577624d37220e00000000000000000000000004172a3a54697e816b563d2d1a0700000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000c2135495b63625a4a3e2f211305041a2f44596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a24394e6479806b55402b160000000000000000000000000000000000000a1f33475861625a4835200b000000000000152b40556a807b66503b26110000000000000a1f33475863798779635b4b3f3126191007000000000000000000000000000000060e1920303d49596176867b655b4937271501000000000000001c32475c718677624d37220d00000000000000000000000000000000081c304354708579634e39230e0000000000000000000216283850657b85705e4c3928160500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101e2b3c4b5d6a7f816c5a4835200b00001f34495e7489745746321e0900000000000000000000000000000000000000162b40556b807e69543e291400000000000b2034485a718679644e39240f000000000000000000000000000a1e3346576e8379644f362623384d6278846f594834200b000000000000000000000000000d22384d627887725c4a36210d00000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000e23384e637977645c4c3f302314061a2f44596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904040404040404040404040404040404040404040404040404040f24394e6479806b55402b1600000000000000000000000000000000000004182a3a474c4d483c2b1906000000000000152b40556a807b66503b261100000000000a1a30404c6176867b655b493d2e1d14090000000000000000000000000000000000000006131f2c3a475863788779635544311d0d000000000000001c32475c718777624d37220d000000000000000000000000000000000b20354b60758875604b36200b000000000000000000091e3245566e837d6752402f1b0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2e3f4b60758778624d38230d00001f34495e7489745e3a29170400000000000000000000000000000000000000152b40556a807e68533e291300000000000d22384d627787725c4a36210d000000000000000000000000000317293951667c816b5443302d3d556a7f7d68533b2b1805000000000000000000000000000b2035485a718679644e39240f00000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000010263b50657b877a655d4d413224161a2f44596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000000000c1c2a333738352b1e0e00000000000000152b40556a807b66503b261100000000021527384c5e6e837f695d4b3d2c1f1101000000000000000000000000000000000000000000010f1c2a3a495a667c8673604b3b2b18050000000000001c32475c718777624d37220d000000000000000000000000000000000e24394e637985705544311d080000000000000000000b21364b60758976614b36211200000000000000000000000000000002090b0902000000000000000000000000000000000000000000000000000000000000000000000000000000101e324557697e806b563b2b1805001f34495e7489745846331f0a00000000000000000000000000000000000001162c41566b817c67523d27120000000004172a3a53697e816c563e2d1a0700000000000000000000000000000b20364b60758674604b35364a5b718676614c37210d000000000000000000000000000005192b3c556a7f806a553c2c1906000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000e23384c5d657a877b675f4f42341d152f44596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000000000000000000000c181f222320190e0000000000000000152b40556a807b66503b261100000000091d314556667c8573604b3f2e1f0f010000000000000000000000000000000000000000000000000c1c2c3c4c5e6d827e69594834200c0000000000001c32475c718677624d3c2b1a0a0000000000000000000000000000081b2e3e546a7f7f6a55372715020000000000000000000f243a4f647985705746321e0a00000000000000000000000000000a151d201d150a0000000000000000000000000000000000000000000000000000000000000000000000000000031628394d62788771594834200b001d32485d728776614c36210c0000000000000000000000000000000000000417293a586e837a654f3a2510000000000a1f3347586f857a65503a2510000000000000000000000000000000091d3245566d827a655037394e6379846e5847331f0a0000000000000000000000000000000e24394e637986715a4935200c000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000091c2f3f4c5c6479867d6961514431272f44596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000000000000040a0c0d0b06000000000000000000152b40556a807b66503b2611000000011527374b607487796354433021110100000000000000000000000000000000000000000000000000000e1e2f404c61768777624d3a2a170400000000001c32475c71867d675a4838281809000000000000000000000000000e22374b5c718678634d38230e0000000000000000000012283d52677d816c573929160300000000000000000000000006131a27313631271a0a00000000000000000000000000000000000000000000000000000000000000000000000000000a2035495a728777624d37220d001a2f445a6f8479644f3a240f0000000000000000000000000000000000000a1f334658718676614c37210c000000000c21374c61778875604b35200b0000000000000000000000000000000215283850657b816c55443e556b807c67523a2a17040000000000000000000000000000000c21364a5b728778634d38230e000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000011212f3e4a5b6377857e6b624b44372844596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000000000000000001020000000000000000000000152b40556a807b66503b2611000000081d314455697e826d5b4a3626140300000000000000000000000000000000000000000000000000000000121f3347586a7f826c5847331f0800000000001c32475c718786786256453626190c00000000000000000000000e1e30404f647a85705b4935210c0000000000000000000014293f54697e806a55402b150000000000000000000000000213243138454b45382715020000000000000000000000000000000000000000000000000000000000000000000000000006192b3c5a6f8479644f3a240f00152a40556a7f7e69543c2b190500000000000000000000000000000000000c21364c617687715847331f0a0000000316283952687d826d5544311d08000000000000000000000000000000000b20354b60758675604b4a5c718676614b36210c00000000000000000000000000000000071a2d3d566b817f69543b2a18050000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000311202d3c4959627584806d6055453944596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b160000000000000000000000000000000000000000040b0c16170e0c060000000000000000152b40556a807b66503b26110000000b20354b60748878624d3d2d1808000000000000000000000000000000000000000000000000000000000004172a3a4b61768877614c36251300000000001c32475c71867b847460544437291c11080000000000000004101d2b3c4c5e6f847b66513c2c190600000000000000000000142a3f54697f7f6a553f2a150000000000000000000000000b1e31424e56605645311d090000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d827b66513c2611000f24394f6479846f5a4835200f00000000000000000000000000000000081c2e3f52677d816b563a2a1704000000091e3246576e847c66513726140100000000000000000000000000000000081d3144556c817b66504f6479836e5746321e09000000000000000000000000000000000010253a50657a85705948341f0b0000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000002101e2c3b475761738282736057473a596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000000000c181f222c2d23211a0f01000000000000152b40556a807b66503b2611000004182a3a51677c836e5a48351f0f000000000000000000000000000000000000000000000000000000000000000c1e3246576c817f6a5443301c07000000001c32475c7186787c82726055463a2f221b110d0b09090b0e171f2d3b485a667c846f5e4c381e0e000000000000000000000013283d52687d816c5637261401000000000000000000000011263a4e606874604b36200b0000000000000000000000000000000000010a10120c09030000000000000000000000000003182d42586d827c67523c2712000d22364a5c718678624d3d2d1b0a0000000000000000000000000000021023374b5d6f8479644f39240f000000000c21364b61768976604b36210b0000000000000000000000000000000000011426374f657a826d56546c817b66513928160300000000000000000000000000000000000b20354b60748877624c37220d0000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000e1d2a3946556072808375615848596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b160000000000000000000000000000000000000c1d2a3437414238352c1f0f000000000000152b40556a807b66503b261100000a1f3347586f847b65503c2b190100000000000000000000000000000000000000000000000000000000000000031629394e63788774604a35200b000000001c32475c718777697e827361584b3f372e2622201d1e21242a333e4a5962788778624d402f1c00000000000000000000000010263b50657b836e5544311d08000000000000000000000316283953687e7d67523d28120000000000000000000000000000000005131e2527211e160b000000000000000000000000071b2e3e5a6f847b65503b261000071b2d3e51667c826d5b4a3928180a00000000000000000000000003102032424f657a846f5c4a36220d0000000215273851677c836e5745321e090000000000000000000000000000000000000b20354a607486756060748675604b36200b000000000000000000000000000000000000081c3043546d827d68533a29170400001f34495e7489745e49341f10101010101010101010101010101010101010101010101010100e080000000000000000000d1b29374454606b7f8576625a596f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000004182a3b474c56574e493d2c1c0c0000000000152b40556a807b66503b261100000c22374c61778874604a35200e0000000000000000000000000000000000000000000000000000000000000000000b2135495b718679644f39240f000000001c32475c71877762697e8376655d4f4b3e3b3736313236393a474c5c6477867c665a483522120000000000000000000000000c21364b61768875604b352012010000000000000000000a1e3246576d827a654f3a251000000000000000000000000000000001132330393d3632281b0c00000000000000000000000d22364a5c728777624d37220d00001024394c5e6f847963574536281a0f050000000000000000000713212e3f4f606f847a644f3e2d1b07000000091d3145566d837d685239281603000000000000000000000000000000000000071c3043546b807c67657a826d5645311d090000000000000000000000000000000000000114263651667b846f5846331f0a00001f34495e7489745e4934262626262626262626262626262626262626262626262626262625231c110300000000000000000b192736434a61697d8678635b6f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000000000000000b1f344759616b6c635b493a29170400000000152b40556a807b66503b2611000013283d52687d826d5443301c07000000000000000000000000000000000000000000000000000000000000000000061a2c3d556b807f6a55382815020000001c32475c7187776260687c857b6f645c55514d4b45454b4e5358616b7a867c665e4c3c2b19040000000000000000000000000a1e3346576f847a6550402f1f1002000000000000000c1a2b3b4b61768775604b36200b0000000000000000000000000000000a1e30414d524b4639291c100400000000000000000d1d2e3f4f64798671594834200b0000091d30404e63798475605445382c20190d0a0300020003090f1a21303f4b5d697e826d5c4b372010000000000b20364b60758977614c37210c00000000000000000000000000000000000000001325364e6479836e6c827a655038271502000000000000000000000000000000000000000b21364b60758976614c36210c00001f34495e7489745e493b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a372e211100000000000000000009182530434f5f677b8679656f847a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000000000000021528384c6177818279635847331f0a00000000152b40556a807b66503b2611000417293a586d837c665136251300000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a85705645321d090000001c32475c718777624d5e667783847a716b66626056566063686e77808679665e4d402f1e0e000000000000000000000000000317293951667b846f5e4c3d2d1d150a0600000208111c29384859697f816b5645311d090000000000000000000000000000001025394d5f676157463a2d1f170c08010000050b131d2b3b4b5d6d827e69533b2b18050000001221364a5b667c83726056493d342b211e17181717161e212d36414d5d657b8575614b3e2e1b020000000114263650667b85705847331f0a00000000000000000000000000000000000000000821364a5c718676748674604b35200b0000000000000000000000000000000000000000091e3245566e837c675238281603001f34495e7489745e50505050505050505050505050505050505050505050505050505050504b3f2e1c0800000000000000000008131c32414d5d657a867b6e837a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000000000000091d324556708596978876614c37210c00000000152b40556a807b66503b2611000a1f334658728777624c37220d00000000000000000000000000000000000000000000000000000000000000000000000b20364b60758975604b36200b0000001c32475c718777624d4c59626e7a8385807b7775707076797d83867d73645c4d403022120000000000000000000000000000000b24384c5e6f847c665b4a3e3228211a1817151d202e3a475662778776614c3827150200000000000000000000000000000012273d52677d7561584a3e332a201d151718182022303b4859647a8674604b36200d00000000071a2d3d4c5e697e8275635b4d483c3633292d2c2d2832363d4a4e5f677b867963574632201000000000081c3043546c827e69543a2a17040000000000000000000000000000000000000000071a2d3d556a7f7d7c816c5443301c0800000000000000000000000000000000000000000216283852677d836e5645321e09001f34495e7489746565656565656565656565656565656565656565656565656565656565655d4b37230e00000000000000000000001423303f4c5c6478867d837a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000b20364b60758ba2a58f7a654f3a251000000000152b40556a807b66503b2611000c21364c617688735948341f0b0000000000000000000000000000000000000000000000000000000000000000000000091d324556718679634e39240e0000001c32475c718777624d3b484d5c646e767c808485858585827e78706860554a3d30221204000000000000000000000000000000091c2f404d62788679645c4b4538352c2e2c2731363f4b586174857c665846331a0a0000000000000000000000000000000011263c51667b8476645c4c473a3531272c2d2b3437414d596277867a645645311d0900000000000f1f30404f60697c84796c625a514c463942414239454b515c646f7d8678635b4939281602000000000b20354b60738878624d38230d000000000000000000000000000000000000000000000f23384d637883827a644f362614010000000000000000000000000000000000000000000c21374c61768976604b36210b001f34495e74897b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b65503a251000000000000000000000000513212f3e4a5a627785877a654f3a25100000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000000000000091d3245566f8494958775614b36210c00000000152b40556a807b66503b26110010253a4f657a846f593b2a1805000000000000000000000000000000000000000000000000000000000000000000000002152838586d827c67523c27120000001c32475c718777624d37343e4b4f5861676b6e707070706d69635b524b44372d1f12040000000000000000000000000000000000122035485a647a867a6960564e493d434237444b505d6576847d675e4c3a291700000000000000000000000000000000000f24384c5e667b85796c61584f4b443742423b484c535f6777867c665c4b38271502000000000001122232424f5e66788481776d66615759575757595760666e79848376625a493c2c1b0b000000000010253a4f657a85715a4835200b000000000000000000000000000000000000000000000c2035495a708485705c4b371808000000000000000000000000000000000000000000000a1f3347586f847b66513c261100172c41566c81818282828282828282828282828282828282828282828282828282828282816c56412c170000000000000000000000000311202d3c49596175847a644f3a240f0000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000000000000021528384b61757f8077625746321e0a00000000152b40556a807b66503b26110012273d52677c816c57422c1700000000000000000000000000000000000000000000000000000000000000000000000000152b40556a80806a55402b150000001c32475c718777624d37222e373a464c5156595b5b5b5a58544e4a3d353126190f0100000000000000000000000000000000000005192b3c4a5c6478857f756a635b5a5857585560666e7a857c675f4d402f1c0c0000000000000000000000000000000000091d2f404c5d64788481766c65605559575759596268717d867b665e4c3e2e1a0a0000000000000004142432404c5a626f7a84827b76706f6d6c6c6e70767b83857a6e6157493c2c1e0e00000000000011263b50667c7c66513c2b19060000000000000000000000000000000000000000000006192c3c50657b7c66513e2e1b00000000000000000000000000000000000000000000000417293a50657b7c67513c27120014293e51626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c62513e29140000000000000000000000000002101e2c3a4757616e645c4a36220d0000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000000000000000a1e32465761696a6259483929160300000000152b40556a807b66503b261100152a3f546a7f7f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d826d58422d180300001c32475c718777624d37221b222933363c404445464645423e39362d201d14090000000000000000000000000000000000000000000e1e2d3e4a5a63747f857f78716f6d6c6e70757b838277665e4d413022110000000000000000000000000000000000000012222f3f4b5a626f7d86817a756f6e6c6d6e71777e858176655d4c402f20100000000000000000000614222f3c494d5d656f797f84858482818283858580796f645c4c46392b1e0e000000000000000f23384c5e66665e4c381e0e0000000000000000000000000000000000000000000000000e23384c5d65665e4d3920100000000000000000000000000000000000000000000000000c23374b5d65675f4d392410000e223444515657575757575757575757575757575757575757575757575757575757575756514434220e0000000000000000000000000000000e1c2a39464b594f4a3e2e1b070000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000003162839464b54554c483b2b1b0b0000000000152b40556a807b66503b261100162c41566b817d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b836e59432e190400001c32475c718777624d37220d0b171f21272b2f303131302d2923211a0f080100000000000000000000000000000000000000000000000f202d3c4956606a757d838684838183858480786d62594c4030231304000000000000000000000000000000000000000412202e3c484d5f67737b8186848381828386847e766c61584c3f2f2212020000000000000000000004121e2b353f4b505b636a6f70767879797775706b645c4f4b3e33291b0e0000000000000000091c2f404c50514c402f1d00000000000000000000000000000000000000000000000000081c2f3f4c50514d40301d02000000000000000000000000000000000000000000000000081c2e3f4b50514d41301d0a00051626343e41424242424242424242424242424242424242424242424242424242424242413e34261605000000000000000000000000000000000c1b283236443a362e2010000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b160000000000000000000000000000000000000b1b2832363f4037342b1d0d000000000000152b40556a807b66503b261100172d42576c827c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b846f5a442f1a0500001c32475c718777624d37220d00040a0c1216191b1b1b1b18140e0c070000000000000000000000000000000000000000000000000000010f1e2c38454b5660686e7176787978766f6a625a4c473b2f22130500000000000000000000000000000000000000000002101d2b34414d5460656c717678797877756f6961584c463a2f211204000000000000000000000000000e19202e373d4a4e555a5861636464626055564f4a3e372e1e170b0000000000000000000012222f383b3c382f2212000000000000000000000000000000000000000000000000000011212f383b3c39302212000000000000000000000000000000000000000000000000000011212e373a3c39302312010000081622292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c292216080000000000000000000000000000000000000b161e212f24221b1002000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000000000b161e212a2b2220180d00000000000000152b40556a807b66503b261100182d43586d827b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a85705b46301b0600001c32475c718777624d37220d00000000000104060606050300000000000000000000000000000000000000000000000000000000000000000e1a283238454b525857616264626056554d483c342a1d12040000000000000000000000000000000000000000000000000d19203036434a50575760636463616054544c473a33291c110300000000000000000000000000000006111c232d3639403a474c4e4f4e4d4b443739362d221b1003000000000000000000000004121c232626241d1204000000000000000000000000000000000000000000000000000003111c232627241d1204000000000000000000000000000000000000000000000000000003111c232527241d120500000000050e141717171717171717171717171717171717171717171717171717171717171717140e05000000000000000000000000000000000000000003090c190f0d070000000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000000000003090c14150d0b050000000000000000152b40556a807b66503b261100182e43586d837b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647986715b46311c0600001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2832363d39464b4d4f4d4b453838352b1f180d0000000000000000000000000000000000000000000000000000000513182530353b39454b4d4f4e4c4b43363733291f170c00000000000000000000000000000000000000080f1a21232a2a33373939393835312624221b1008000000000000000000000000000000090f11110f09000000000000000000000000000000000000000000000000000000000000080e10110f09000000000000000000000000000000000000000000000000000000000000080e1012100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000152b40556a807b66503b261100182d42576d827c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a85705b45301b0600001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a161e21282933363839383632282220190e0500000000000000000000000000000000000000000000000000000000000008131c202628323638393937353026211f170c0400000000000000000000000000000000000000000000070c0e15171f2123242422201d140f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d171c1f1c170d0100000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000000000000060c0e13161816130c0b0400000000000000000000152b40556a807b66503b261100172c41576c817d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b846f5a452f1a0500001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b13171e21232423211e160d0b0500000000000000000000000000000000000000000000000000000000000000000000070b10161e2123242322201c140c0a0400000000000000000000000000000000000000000000000000000000040a0c0e0f0f0d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1b19130900000000000000071117190d0b0500000000000000000000000000000000000000000000020e171d1f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d0b07000000000001111f2a3134312a1f1101000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000000050e192123292c2d2c28221f180c070000000000000000152b40556a807b66503b261100162b40566b807e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c836e59442e190400001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0d0f0d0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0e0f0e0c0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c20312e261a0c00000000000b19242c2f221f180d00000000000000000000000000000000000000000212202b323432323232323232323232323232323232323232323232323232323232323232201c13080000000d1f2f3d4649463d2f1f0d000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b160000000000000000000000000d181f2c35383e4142413d37342a211a0f00000000000000152b40556a807b66503b26110014293e53697e806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e816c57412c170200001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d11151718171614100b0903000000000000000000000000000000000000000008182630354642382b1a0000000007192936404437342a1d0d000000000000000000000000000000000000000e20303d46494747474747474747474747474747474747474747474747474747474747474735302518080000172a3d4d5a5e5a4d3d2a17030000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b1600000000000000000000000d1d2a343c494d53565756534c473b362d1c13080000000000152b40556a807b66503b26110011263c51667b826d5837261401000000000000000000000000000000000000000000000000000000000000000000000001162c41566b817f69543f2a140000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141a1c0d0b05000000000000000000000000000000000000080e101c0f0d0700000000000000000000000000000001080b0f12151718171614110d0b050000000000000000000000000000000000000000040d0d192022272a2c2d2d2b2925211e160b07000000000000000000000000000000000001142636434b5b5549381e0e0000001124364754594c483b2a1805000000000000000000000000000000000000172b3d4e5a5f5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c4a4336251300001c31465a6b746b5a46311c080000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59442f1904000000000000000000000000000000000000000000000000000f24394e6479806b55402b16000000000000000000000d1d2b3b484c5b63686b6d6b6861594e4a3d3025180800000000152b40556a807b66503b2611000e23394e637885705544311d08000000000000000000000000000000000000000000000000000000000000000000000005182a3b596e847c67513c27120000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c272f322220190d00000000000000000000000000000003111c23253124211a0f0100000000000000000000050b0d141c2024282a2c2d2d2c2926221f180e0c0600000000000000000000000000000000071520282b34383c3f414242413e3a363228201c1308000000000000000000000000000000081c304354607067553c2b19060002172c4054656e625948341f0b0000000000000000000000000000000000001d32465a6c7472727272727272727272727272727272727272727272727272727272727272605443301c07001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59442f1915151515151515151515151515151515151515151515151515151524394e6479806b55402b1600000000000000000005182b3b4859626e787e8182817d776e635b4a4336251300000000152b40556a807b66503b2611000b20354b60758975604b35200b00000000000000000000000000000000000000000000000000000000000000000000000b1f344759738878624d38230d0000001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c2c39434737342b1d0d000000000000000000000000000311212e373a4739362d200f0000000000000000090d192022263035393d40414242413f3c37342a2320190e0600000000000000000000000000041525333c3c484d51545657575653504b4539353025181103000000000000000000000000000b20354b607386705a4935200b0004192f44596e8377624c37220d0000000000000000000000000000000000001f34495f748a8787878787878787878787878787878787878787878787878787878787878773604a35200b001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59442f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a394e6479806b55402b160000000000000000000b20344859627783867e7a797a7e8384796a605443301c07000000152b40556a807b66503b261100081d314455708579634e39240e00000000000000000000000000000000000000000000000000000000000000000000000d22374c627788735a4935200b0000001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001427394a565c4d483b2b190500000000000000000000000412212f3f4b505c4e4a3e2d1a07000000000007111c232b343836434b4f52555657575654514c473b38352c211a0f0200000000000000000000000d20334350555a62666a6c6d6c6b69656057514a43362e211507000000000000000000000000081c3043546f8478624d38230d0001162b40566b807c66513c27110000000000000000000000000000000000001f34495e748974727272727272727272727272727272727272727272727272727272727272605443301c07001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e59443f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f4e6479806b55402b16000000000000000006192b3c4c6277877f7169656365686f79847f72604a35200b000000152b40556a807b66503b26110001142637566b807e69533a2917040000000000000000000000000000000000000000000000000000000000000000000115273751677c846e593c2b19060000001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f4356687162594834200b000000000000000000000412222f404c5d6571645c4a36210d000000010f1a212f383c484d54546064676a6c6d6c6b69666259554d493c362c1d150a0000000000000000000013283c50616a72777c7f818282807e7a766f6660544b3f33251709000000000000000000000001142636556a807c67523d2712000011263c51667b806b563827150200000000000000000000000000000000001f34495e7489745e5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c4a4336251300001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e595555555555555555555555555555555555555555555555555555555555555555556479806b55402b1600000000000000000b2035495a6e83806b61544f4e4f535c647381816c57422c17020000152b40556a807b66503b2611000010253a4f657a846f5846331f0a000000000000000000000000000000000000000000000000000000000000000000081d3144556d827d68533d2813000000001c32475c718678624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718778624d37220d00000000000000000005132230404c5e657b8679644e39240f0000000f1f2d363f4c505a62696e75797d7f818282817e7b77716b635a4e493d32281a0d000000000000000000152a40556a7f8784807c7978797a7d8185847c73655d504334271707000000000000000000000011263b50667b816c5739281603000c22374c617785705645311d0900000000000000000000000000000000001f34495e7489745e4947474747474747474747474747474747474747474747474747474747353025180800001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e846e6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7a806b55402b1600000000000000000d23384d62788875604b433a393a3e4a55606c7a644f3a250f000000152b40556a807b66503b261100000b20354b60748876614c3621120000000000000000000000000000000000000000000000000000000000000000000b20354b60758877624c37220d000000000d23384d627873604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d000000000000000005132330404d5e667c8779645c4a36210d00000e1e2d3d4a4e5d656f777e848885817e7d7c7c7d7f83878680786e635b4b45382a1d0e00000000000000000d22374c6277766f6a6664636465676b707881867a6a61524534251502000000000000000000000c21364c617686715746321e09000a1f334758718675604b36200b00000000000000000000000000000000001f34495e7489745e4934323232323232323232323232323232323232323232323232323232201c13080000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e847f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f81806b55402b16000000000000000013283d53687d826c5745322524252d37444b5c645c4b37220d000000152b40556a807b66503b26110000081d3144556c817e6953402f180800000000000000000000000000000000000000000000000000000000000000071a2d3d51667c846f5947341f0b000000000b2035495a62605544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000006132330414d5e667c8779635b4a3e2d1a070006192c3c4a5b63707b8489817b75706c69686767686a6d72787e8683796b6056483b2b1e0e000000000000000b1f34485962605655514f4e4e4f52565b636c78847f6c635243322010000000000000000000000a1f334658718676614b36210c0004182a3a586d8279644f3a240f00000000000000000000000000000000001f34495e7489745e49341f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d0b0700000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a78624d37220d0000000000000001172c41566c817d68533928160e101927313e4b4f4b3e2e1b08000000152b40556a807b66503b26110000011426374e637886715e4c362513000000000000000000000000000000000000000000000000000000000000000a21364a5b6f847c66513b2a18050000000006192b3c494d4b4437271501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000006142431414d5f677c8778635b4a3d2d200f00000c2035495a637984877e756c65605657545351525255585a6269717c8680746259483c2b1c0c00000000000005182a3b484c4b45383c3939393a3d3c494d5a627381816c614f3e2e18080000000000000000000417293a576d827a65503a2510000013293e53687e7e69543e291400000000000000000000000000000000001f34495e7489745e49341f0908080808080808080808080808080808080808080808080807000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b636464646464646464646464646464646464646464646464646464646464646464646464646462594834200b0000000000000003182d43586d827b66513b2611000009151d2e373a372e201000000000152b40556a807b66503b2611000000092135495b6f847b665443301c0d00000000000000000000000000000000000000000000000000000000000a1a2e3f4e63798774604b35200d0000000000000e1e2b3538353127190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d000000000006142431424e5f677d8678635a493d2d1f0f0100000d23384d6278867e74686056504b45383e3d3c3c3d403c484d545e6674808577625a483a2917040000000000000d1d2a34373632282724232425282c353c4955606d827f6a5c4b3625130000000000000000000013283d53687d7f6a543f2a1500000f24394e6479836e583b2b1905000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4d483b2b19050000000000000004192e43596e837a65503a251000000001101b2225221b100200000000152b40556a807b66503b2611000000061a2c3d4f647a8673604a3b2a1808000000000000000000000000000000000000000000000000000000021528384b5d6e837d685544311d08000000000000000e192023201d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000007152432424e60687d8678625a493c2c1f0f010000000c2035495a62726960554b453836312729282727282a2b3538404c56606b7d8678625846331f13000000000000000d181f22211e16110f0e0f101219212c37444b6074857a645443301c070000000000000000000e23394e6378846e593c2c1906000b20354b60758671594834200b000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c35383a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a37342b1d0d000000000000000004192e43596e837a65503a25100000000000080d0f0d08000000000000152b40556a807b66503b2611000000000f22364a5c6e837d685948362614010000000000000000000000000000000000000000000000000003111d324556647a8673604b372614010000000000000000060b0d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000007152532434f60687e8677625a483c2c1e0f010000000006192c3c494d5d544b44373228201d151413121213151920223038454b5f677c8676614c41311b0a00000000000000050b0d0b0902000000000000060e192632455664798673604a35200e0000000000000000000b20354a607587725b4935210c00081d3144556f8577624d37220d000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2123252525252525252525252525252525252525252525252525252525252525252525252525252220190d00000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b261100000000071b2d3e4d62778777625443301c1402000000000000000000000000000000000000000000000004122131414b6074867a645544311909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d000008162533434f61697e86776259483c2b1e0e000000000000000e1e2c3538473e3631271e160b0902000000000000050b121a2832414d5e697e846f5f4d392816030000000000000000000000000000000000000000091528384a5c6e837c67513c2c19060000000000000000071c3043546f8478634d38230e0001142637556b807c67513c2712000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0d0b050000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b261100000000001020344859687d8472604b42321d150a0000000000000000000000000000000000000000000514222f404d5f6c81816b5d4b3726140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1013141516151513100d0b070000000000000000000000000000000000000000000000001c32475c718777624d37220d00001626334350616a7f85766159483b2b1d0e0000000000000000000e1920233229201d1509030000000000000000000000000a151d30404f616f847d675745321e090000000000000000000000000000000000000000000a1a2d3e4f647985705a4935200c000000000000000000132536556a7f7d67523d2812000011263b51667b816b56382815020000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b2611000000000005182b3b4e606c81806b604f4231271a0f040000000000000000000000000000000000030d182032404c5e677d8474604b3f2e190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1318202225282a2b2b2b2a282522201c130d0b0500000000000000000000000000000000000000001c32475c718777624d37220d08131c344451616a7f85766158473b2b1d0d0000000000000000000000060c0d1d140b080200000000000000000000000000000002122232434d63788875604b362110000000000000000000000000000000000000000000001022364a5c718678634d38230e000000000002090b0c10263b50657b826c573929170c0c0c21374c617685705645321d0c0c0c0c0c0c0c0a04000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d13160b08010000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b26110000000000000d1d31414b6073847e69604b45382d1f180c0600000000000000000000000000050a161e2b34434f5e667c8677615544312010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c171f21282b34373a3d3f4041403f3e3b38353025221f180d090000000000000000000000000000000000001c32475c718777624d37220d1825304451626b8084756158473a2a1d0d00000000000000000000000000000008000000000000000000000000000000000000000004142135495b6d827e69543e2e1b07000000000000000000000000000000000000000000071b2d3e556b807e69543e2914000000000a161e21212121364b617686715746332121212121334758718675604b3621212121212121211f170b0000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071521282b201c140800000000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b261100000000000000131d3144556175847e6c60564a3d332a211a100b0903000202020002090b0f192028323b484d61697c8678625947372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101b222933373d3b484d5053545556555453504d4a433637342a241c1208000000000000000000000000000000001c32475c718777624d3722182636434a626b8084756157473a2a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4e647987725c4b37220d0000000000000000000000000000000000000000000010253b50657a846e593929170300000a1a283236363636364657718676614b363636363636363a586d827a644f3a363636363636363633291b0b00000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041526333d403530261808000000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b2611000000000000000215273746576174838174635b4c473a362c25211e161918171819151d20252b3539454b59626e7f8577625a483a2a190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101b222e373a474c535859626568696a6b6a6a6865626054534c483b382f231c110400000000000000000000000000001c32475c718777624d372226364354606c80847561574639291c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000e22364a5c71867a644f3a240f000000000000000000000000000000000000000000000c21364c617687725746331e0a0002162838454b4c4c4c4c4c576c827a65504c4c4c4c4c4c4c4c53687d7e69544c4c4c4c4c4c4c4c4c463a291704000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21334450554b43362614010000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b2611000000000000000009192839465660727f85796b61584e493d3b3632282e2d2c2d2e2731363a3c484d576069778382756259483c2b1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2d363f4b4f5861686e71777a7d7f8080807f7d7a77756e696259514c40382f1f180c000000000000000000000000001c32475c718777624d3727374454607281837460574639291b0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e566b817f6a553f2a15000000000000000000000000000000000000000000000a1e334657728776614c36210c00091e32455660616161616161687d7f6a616161616161616161616379836e616161616161616161615846331f0a000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0902020202020201000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d50626b605443301c080000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b26110000000000000000000b1b28384554606a7a8580776c635b55504b4539434241424338454b4f545a626a757f867c6d6056483b2b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a28323e4a4e5d646e767d838683817e7c7b7a7b7c7d808386837e776f665e504c3f332a1c100200000000000000000000001c32475c718777624d37374455607281837460564539291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c846f59442f1a00000000000000000000000000000000000000000000031729395b708578634e39230e000b21364b6075767676767676767a8476767676767676767676767676877676767676767676767676614c36210c000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f17171717171717161513100c0a040000000000000000000000000000000000000000000000000000000000000000000000162b40556b8073604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b2611000000000000000000000b1a2836434a5c64737d868178706a6560575a58575757585a5660646a70777f867f75665e4b45382b1d0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101e2c38454b5c646f7a83857f78716e6b686666656566686b6e71787e85847b70655d4c473a2e201204000000000000000000001c32475c718777624d384555607382827360564538281b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e637987725d3727150200000000000000000000000000000000000000000000192e44596e837a65503a251000172d42576c8282838383838382838a838283838383838383838383828883838383838383838382816b56412c16010000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49342d2d2d2d2d2d2d2c2c2b2825211f170e0c0600000000000000000000000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b261100000000000000000000000a1825303e4a556068747c8385807a76716f6e6d6c6d6e6f71757a7f84847d756a61574c4032281a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311202e3c4956606c7985837a716a635b59565351505050515356595a6268707882867b6d61584a3e302313050000000000000000001c32475c718777624d4556607382827360554538281a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a745544311d0800000000000000000000000000000000000000000003182e43586d837b66513b261100152a3e52636c6d6d6d6d6d6d6d7085766d6d6d6d6d6d6d6d6d6d6d6d817b6d6d6d6d6d6d6d6d6d6b62513d2914000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e4942424242424242424241403e3b37332923211a0f090000000000000000000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b261100000000000000000000000008131c2d37444b5560666e767b818585848382818283848585817c776f6860564b46392f1e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111212e3e4b5a637581857a6e645c544e493d413e3c3b3a3b3c3d403c484d535b636d78848377645c4d413023130300000000000000001c32475c718777624d56607483817260554437271a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a75604b36200b00000000000000000000000000000000000000000002182d42576d827c66513c2711000f2235455257585858585858586c817b6658585858585858585858687d7f6a585858585858585856514434220e000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e57575757575757575757565553504c473a39352c231c1105000000000000000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b261100000000000000000000000000001019263137444b515861666b70717678787979787671706c676259534b453832281b12030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2e3f4b5c6478867f73645c4f4b3e39352c2c292726252627282b2b35383d494e5a626f7d877a675f4d4130211100000000000000001c32475c718777625a62748381726054443727190a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556748a76614b36210c00000000000000000000000000000000000000000002182d42576d827c67513c271200051727353e4243434343434352677c806b5536434343434343434e6378846f593d434343434343413d34261605000000001f34495e7489745e49341f0904040404040404040404040404040404040404040000000000000000000000001f34495e7489746c6c6c6c6c6c6c6c6c6c6c6b6a68656158564e493d382f20180d0000000000000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b261100000000000000000000000000000009141d2631353a464c51565b5761626364636261585b57524c483b3632281e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2c3d4b5d657b877b6a60554a3e372e23211a1613111110101113161920232c353c494d5f6779867d675f4d3f2f1e0e000000000000001c32475c7186786f7178848172605443362619090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a75604b35200b00000000000000000000000000000000000000000002182d42576d827c67513c271200000917222a2d2e2e2e2e2e384d6277846f5443302e2e2e2e2e35495b7287725b49352e2e2e2e2e2c2922160800000000001f34495e7489745e49341f1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0f0d070000000000000000001f34495f748981828282828282828282828181807d7a76706b635b504c3f342b1d1205000000000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b2611000000000000000000000000000000000109141d202933363c4139464b4d4e4f4e4d4c463a423d37342a211e160a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a495b657b8679655d4b44372d221b100c06000000000000000000060b0e1a212b35414d5b6377857d675d4b3c2c19090000000000001c32475c71878584868a7c6b60544336261809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d627789745544311d0800000000000000000000000000000000000000000002182d42576d827c67513c2712000000050f1517181818182035485a728675604b35201818181a2c3d596f8478634e38231818181816140e050000000000001f34495e7489745e49342f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f24211a0f01000000000000001f34495e74897a79797979797979797979797a7b7d80848680786f655d4c483b302315070000000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b261100000000000000000000000000000000000001080c171f21262c29333638393939383633292c27221f180d09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475863798779635b4b3f3126191007000000000000000000000000000000060e1920303d49596176867b655a493726140100000000001c32475c7186786f747e8678645c4c40311c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e647986715c3727150100000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000203030305192b3c596e8379634e39240e0300152a40556a7f7d68523d2813000303010000000000000000001f34495e7489745e49444444444444444444444444444444444444444444444439362d1f0f000000000000001f34495e74897464646464646464646464646466686b6f767b84847b6f62594d413225150600000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000152b40556a807b66503b2611000000000000000000000000000000000000000000040a0c1116171e212323242423211f1717120d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a30404c6176867b655b493d2e1d14090000000000000000000000000000000000000006131f2c3a475863788778635544311d0c00000000001c32475c7187776260687b867a665e4e423025180a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013253653687d836d58432e180000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000000000000142a3f54697f7d68533e2813000010263b50657b816c57392916030000000000000000000000001f34495e7489745e5959595959595959595959595959595959595959595959594e4a3d2d1a070000000000001f34495e7489745e4e4e4e4e4e4e4e4e4e4e4f5053565660666f79838477675f4f4332241402000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a25100000000000000000000000000000000011263b51667b79634e39230e0000000000000000000000000000000000000000000000000000030a0c0d0e0f0e0d0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384c5e6e837f695d4b3d2c1f1101000000000000000000000000000000000000000000010f1c2a3a495a667c8573604b3b2a1804000000001c32475c718777624d5d6579867c68604a4336271a0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546d837e68533e29130000000000000000000000000000000000000000000002182d42576d827c67513c2712000000000000000000000010253a4f657a826d583a291704000c21364b617686715746321e0a0000000000000000000000001f34495e7489746f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f645c4a36210d0000000000001f34495e7489745e493939393939393939393a3b3d38454b515c646e7c867c69614f42312010000000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a2510000000000000000000000000000000000f24384c5e66635b4935210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556667c8573604b3f2e1f0f010000000000000000000000000000000000000000000000000c1c2c3c4c5e6d827f695947341f0c000000001c32475c718777624d4b5b6378857e6b60544538291c0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e20354a60748877624d38220d0000000000000000000000000000000000000000000002182d42576d827c67513c271200000000000000000000000b21364b607686715847331f0a000a1e334657718676614b36210c0000000000000000000000001f34495f7489848484848484848484848484848484848484848484848484848379644e39240f0000000000001f34495e7489745e493424242424242424242526282832363d4a4e5e6677857f69604e3e2d19090000000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a251000000000000000000000000000000000091c2f404c514e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b080100000000000000000000000000000000000000060c0e1113141413100c0a04000000000000000000000000000000000000011527374b607487796354433021110100000000000000000000000000000000000000000000000000000e1e2f404c61768877614c3b2a18040000001c32475c718777624d3d4a5962758480726056463a2b1e100200000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e304050657b856f5a4834200b0000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000000000000091e324556718676614c37210c0003172939576c827a65503b25100000000000000000000000001f34495e7489797878787878787878787878787878787878787878787878787975604b36210b0000000000001f34495e7489745e49341f0f0f0f0f0f0f0f0f1113161e212d36404d596275857e685c4a3726140100000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a2510000000000000000000000000000000000012222f383b39352c1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d201d1509000000000000000000000000000000080e10192123262829292825211f170c0a040000030d13150f0d08000000000000081d314455697e826d5b4a3626140300000000000000000000000000000000000000000000000000000000121f3347586a7f816c5947341f080000001c32475c718777624d373b485761738282746158483c2d201204000000000000000000000000000000000000000000020000000000000000000000000000000003101d2b3c4d5e6f857b66503c2b19050000000000000000000000000000000000000000000002182d42576d827c67513c2712000000000000000000000003162838576c817b66503b2611000013283d53687d7f6a553f2a150000000000000000000000001f34495e74897463636363636363636363636363636363636363636363636363605745321e090000000000001f34495e7489745e49341f0900000000000000000002090f1a21303b48576277877a645544311d0800000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000004192e43596e837a65503a2510000000000000000000000000000000000004121c242623211a0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000b19192731353127190900000000000000000000000007111c23252c35383b3e3f3f3d3b363329211f170c021520272a25221b1002000000000b20354b60748878624d3d2d1808000000000000000000000000000000000000000000000000000000000004172a3a4b61768877614c3625130000001c32475c718777624d372b394655606d808476625a4a3e2f22130000000000000000000000000000000000020b111318130e0b0700000000000000000000070b161e2d3b485a667c846f5e4c381d0d000000000000000000000000000000000000000000000002182d42576d827c67513c271200000000000003090b0c0c0c12283d52677d806a553625130c0c0e23394e6378846e593c2c190c0c0c0c0b090200000000001f34495e7489745e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b45392816030000000000001f34495e7489745e49341f0900000000000000000000000007121d2b394759667b8673604b35200f0000000000040a0c1010101010101010101010101b30455b708575604b35201010101010101010101010100e0c070000000000000000000000000000000000040a0c0f192e43596e837a65503a25100f0f0f0f0f0f0f0c0a03000000000000000000090f110e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000119293737444b443727150100000000000000000002101b222e373a3c494d5153545452504c463a37332a1e1625333c3f3a372e201000000004182a3a51677c836e5a48351f0f000000000000000000000000000000000000000000000000000000000000000c1e3246576c817f6a5443301c0700001c32475c718777624d37222937444b626b7e8678645c4c40311c1308000000000000000000000000000006131e26282d2823201c13151311100f0f1012151a2129323e4a5962788778624d402f1c00000000000000000000000000000000000000000000000002182d42576d827c67513c271200000000000a161e212121212123384d6378846f5443302121212121354a607586725a49352121212121211e160a000000001f34495e7489745e4938383838383838383838383838383838383838383838383632281b0a000000000000001f34495e7489745e49341f0900000000000000000000000000000d1b2a3b4c5e6e847d68533d2d1a070000000c181f222626262626262626262626262630455b708575604b352626262626262626262626262623211a0f0100000000000000000000000000000c171f2124242e43596e837a65503a252424242424242424211e170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f37475455605544311d0800000000000000000614202d363f4b50585b636668696968656158544c473a3228334350554f4b3e2e1b0800000a1f3347586f847b65503c2b190100000000000000000000000000000000000000000000000000000000000000031629394e63788774604a35200b00001c32475c718777624d3722192731445060687c877a665e4e423025180a000000000000000000000000021324313a3d423d383530252b282625252525272a2d3639464b5c6477857b655a4835221200000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000000a1a283236363636363636495a728775604a3636363636363643546f8478634d3836363636363632281a0b0000001f34495e7489745e493423232323232323232323232323232323232323232323211e160a00000000000000001f34495e7489745e49341f090000000000000000000000000000000d1d2f404f647986715b4a36210c00000c1c2a34373b3b3b3b3b3b3b3b3b3b3b3b3b3b455b708575604b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39362d1f0f000000000000000000000000000c1c29333739393943596e837a65503a3939393939393939393633291b0b0000000000000000050b0d141716140f0d070000000000000000000000000000000000000000000000000000000000000000000000071a2d3d54656f73604b35200b00000000000000081624323e4a4f5d656d71787b7d7e7e7d7a76706961584b45383c50616a645c4b37220d00000c22374c61778874604a35200e0000000000000000000000000000000000000000000000000000000000000000000b2135495b718679644f39240f00001c32475c718777624d37220d151d33424e5e667a877c68604a4336271a0c00000000000000000000000b1e31424e5357524e4a4336403e3c3b3a3a3b3d3f3d4a4e57616b7a867c655d4b3c2b190400000000000000000000000000000000000000000000000002182d42576d827c67513c271200000003162838454b4b4b4b4b4b4b4b596f8478634e4b4b4b4b4b4b4b4b556a7f7d67524b4b4b4b4b4b4b4538291b0b00001f34495e7489745e49341f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b09030000000000000000001f34495e7489745e49341f09000000000000000000000000000000001122364a5c718679634e39240e0004182a3a474c5050505050505050505050505050505b708575605050505050505050505050505050504e4a3d2d1a0700000000000000000000000417293a474c4f4f4f4f596e837a65504f4f4f4f4f4f4f4f4f4f4c46392917030000000000000e192022292c2c2924211a0f080000000000000000000000000000000000000000000000000000000000000000000c21364a5b6f847a644f39240f00000000000006162633434f5c64707a8286837f7d7c7c7e8084857e766a60564a3d556a7f7a644f3a250f000013283d52687d826d5443301c07000000000000000000000000000000000000000000000000000000000000000000061a2c3d556b80806a5538281502001c32475c718777624d37220d02162431404c5c6478867e6b60544538291c0e0000000000000000000011263a4e60686d6863605458555351504f4f505254585b636b76808579655d4c3f2e1e0e0000000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000091e3245566061616161616161616a7f7d6861616161616161616161657b816c6161616161616160564639291703001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000071b2d3e566b807f69543f2a14000a1f344759616565656565656565656565656565656570857465656565656565656565656565656565635b4a36210c00000000000000000000000a1f3347586164646464646e837a656464646464646464646464615746331e0a00000000000e1e2b35383f41413f39362d221b10020000000000000000000000000000000000000000000000000000000000000417293a4e637985705c4a36220d000000000001142433445161697a85827a716e6a686767686b6f767e857f75645c4d576c817a644f3a250f000417293a586d837c665136251300000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a86715645321d09001c32475c718777624d37220d000614222f3e4a5a62768480726056463a2b1e1002000000000000000013283d53687e827d7875706d6a686665646465676a6d717980867d73635b4c3f2f2111000000000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000b21364b60757676767676767676757c827576767676767676767676767786757676767676767675615746331e0a001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000011263c51667b836d58432e18000c22374c61777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b867b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b79634e39230e00000000000000000000000c21374c61767a797979797a847e7a797979797979797979797a75614c36210c000000000e1e2c3c484d545656544e4a3e372e20120500000000000000000000000000000000000000000000000000000000000a1f3347586c827c67523e2d1b0700000000000f1f314251626b7e85796d655d58555251525356586168747e857a675f576c827a644f3a250f000a1f334658728777624c37220d00000000000000000000000000000000000000000000000000000000000000000000000b20364b60758975604b36200b001c32475c718777624d37220d00000412202d3c495861748282746158483c2d20120400000000000001172c41566c817f7e82858582807d7b7a7a7a7a7c7f8385837c74686055493d2f211103000000000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000142a3f54697f8383838383838383828389838383838383838383838383838a83838383838383838376614c36210c001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000e23394e637885705b46301b000e23394e637980808080808080808080808080808080808880808080808080808080808080808080807c67513c271200000000000000000000000f253a4f647a7f7f7f808081878381818181818181818181818179634e39230e00000006192c3c495a62696c6b69645c4f4b3e30231201000000000000000000000000000000000000000000000000000000011426364c61768775604b3620100000000000061a2c3d4e606b808375645c4f4b3f403d3c3c3e3a464c55606878847d68606d827a644f3a250f000c21364c617688735948341f0b0000000000000000000000000000000000000000000000000000000000000000000000091d324556718679644f3a240f001c32475c718777624d37220d00000002101e2b3a47566072808476625a4a3e2f22120000000000000013283d52687d806a6d7075787b7d7f808181807e7c78756d6660554b44372c1f110300000000000000000000000000000000000000000000000000000002182d42576d827c67513c271200000012273b4f61696e6e6e6e6e6e6e6e6e7287736e6e6e6e6e6e6e6e6e6e6e6e83796e6e6e6e6e6e6e6d615746331e0a001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000d22374d627787715c47321c000c2135495b636b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b7085736b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b675f4d39241000000000000000000000000d22374b5c64696a6a6b6b6e827b6c6c6c6c6c6c6c6c6c6c6c6c635b4935210c0000000c2035495a62787e81817e796f645c4d41301f0f000000000000000000000000000000000000000000000000000000081c304354697f806a5645311d0900000000000c2135495b687e837360564a3e372e2a28272729293337444b5a6274837e686d837a644f3a250f0010253a4f657a846f593b2a1805000000000000000000000000000000000000000000000000000000000000000000000002152838586d827d68533d2813001c32475c718777624d37220d00000000000e1c2a384554606b7e8678645c4c402f1c090000000000000f24394f6479836e5955606366686a6b6c6b6b6966636054514b44373126190f010000000000000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000c2032434f545858585858585858596e837964585858585858585858586a7f7d68585858585858584c4639291703001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000d22374c627787715c47321c00061a2c3d494e5555555555555555555555555555555b70857560555555555555555555555555555555514d41301d0a0000000000000000000000081b2e3e4b4f54545555586d827a6557575757575757575757574e493d2c1a060000000d23384d6278847e7a7a7c81857a675f4d3d2d1a0700000000000000000000000000000000000000000000000000000b20354b60748777624c3827150200000000071b2d3e4e63798776615545382d221b1513121213171f27313c49566073827d6e837a644f3a250f0012273d52677c816c57422c1700000000000000000000000000000000000000000000000000000000000000000000000000152b40556a80806a55402b15001c32475c718777624d37220d0000000000000c1a2836434a60697c877a665e4c38230f0000000000000b21364b6076877258464b4e5053555656565554514d4a43363531261d140900000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000031525323b3f434343434343434354697e7e685343434343434343434f657a826d583a43434343433633291b0b00001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000e23384d637886715b46311c00000f1f2c35394040404040404040404040404040455b708575604b40404040404040404040404040403c393023120000000000000000000000000010202e373a3f3f4042576d827a65504141414141414141414139352c1f0f000000000c2035495a626f696565676c77837d675b4a36210e00000000000000000000000000000000000000000000000000061a2c3d51667b836e5948341a0a00000000000d22364a5c6f847c66584737281a0f0800000000000409151d2b3845556074837a837a644f3a250f00152a3f546a7f7f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d826d58422d18001c32475c718777624d37220d000000000000000a182530424f5e667b877b66503b2611000000000000091e324556718676614c36383b3d3f404141403e3c38353025201d1409010000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c271200000000071520272a2e2e2e2e2e2e2e3a4f647a826d583b2a2e2e2e2e2e364b607686715847332e2e2e2e211e170b0000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000010253a50657a846f59442f1a0000010f1a21232b2b2b2b2b2b2b2b2b2b2b2b2b30455b708575604b352b2b2b2b2b2b2b2b2b2b2b2b2b27241d12040000000000000000000000000002101b2225292a2d42576c827a65503a2c2c2c2c2c2c2c2c2c23211a0f010000000006192c3c494d5a53504f515961748479634e3c2b19060000000000000000000000000000000000000000000000000c2135495b6f847a644f3b2b180000000000011527374f647986715e4d3a29190a000000000000000000010e1a28374556617684847a644f3a250f00162c41566b817d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b836f59442f1a001c32475c718777624d37220d000000000000000008131c32404d5d64767a644e39240f00000000000002162838586e837a65503a2526282a2b2c2c2b292723201c130b080100000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000030c121419191919191920364b607586715947341f1919191e324556708576614c37211919180c0a03000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000013283d52687d816c57412c1700000000060c0e1616161616161616161616161b30455b708575604b352016161616161616161616161612100a0000000000000000000000000000000000080d0f14172c41576c817a65503a2517171717171717170e0c06000000000000000e1e2c3538453e3a3a3a47566479846f5a4935200b0000000000000000000000000000000000000000000000031729394e637886715d4b371d0d0000000000081d3144556d827d685240301c0c0000000000000000000000000a1927384758657b8c7a644f3a250f00172d42576c827c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b856f5a45301a001c32475c718777624d37220d000000000000000000001422303f4b5761645c4a36210d00000000000000152a3f556a7f7e69533e291413151617161614110e0b070000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000000000303030303091d324556708577624c37220d0303162838566c817b66513b26110003000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000081b2e3f576c827d68523d2813000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000001162c41566b817a65503a25100202020202020200000000000000000000000e192023302925252a384a5c708678624d38230d00000000000000000000000000000000000000000000000a1e3346576c817d68523f2e1b0000000000000b20354b60758876614b36211200000000000000000000000000000a1a293a4b5d6f847a644f3a250f00182d43586d827b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a86705b46311b001c32475c718777624d37220d000000000000000000000412202e39464b4e4a3e2d1a070000000000000011263b51667b826d5737261401000101010000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000000000000000000000000002152838566b817b66513c2611000012273c52677c806b553727150100000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000d22374b5d728778624d38220d000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000001162b40566b807a65503a251000000000000000000000000000000000000000060c0d1a1410101a2d3e566b807d68533d281300000000000000000000000000000000000000000000001325364c61768775604b36211000000000000010253a50657a846f5746321e090000000000000000000000000000000c1c2e3f5a6f847a644f3a250f00182e43586d837b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647986715b46311c001c32475c718777624d37220d000000000000000000000002101b28323639362d200f00000000000000000d22384d627786715544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c271200000000000000000000000000000012273c51677c806b5637271502000d22384d627785705544311d0800000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000d1d2f404f657a86705a4835200b000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000000162b40556b807a65503a2510000000000000000000000000000000000000000000000500000014293e53697e806a55402b1500000000000000000000000000000000000000000000071c304354697e806b5645321e09000000000000152a3f556a7f7f6a5539281603000000000000000000000000000000001a2f445a6f847a644f3a250f00182d42576d827c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a85705b45301b001c32475c718777624d37220d000000000000000000000000000b161e2124211a0f0100000000000000000b2035485a738875604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000000000000000000000d22374d627785705544311d08000b2035485a728775604b35200b00000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000004101d2b3b4c5e6e847d67523c2b1905000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f7a65503a2510000000000000000000000000000000000000000000000000000012283d52677d816c57412c17020000000000000000000000000000000000000000000b20354a60738678624d38281602000000000004192e44596e837a65503b251000000000000000000000000000000000051a2f445a6f847a644f3a250f00172c41576c817d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b846f5a452f1a001c32475c718777624d37220d000000000000000000000000000003090c0f0d070000000000000000000005192b3c5b708578634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000000000000000000000b20344859728775604b36200b0005192b3c596e8379644f39240f00000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000002090c181f2d3b4859657b8673604b35200e00000000000000000000000000000000000000061b30455b708575604b35200b0000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f7a65503a2510000000000000000000000000000000000000000000000000000012283d52677d816c57412c1702000000000000000000000000000000000000000006192c3c50667b836e5a48351a0a000000000000031729395c718677624d37220d00000000000000000000000000000000051a2f445a6f847a644f3a250f00162b40566b807e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c836e59442e19001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000172c41576c817c67523d2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c271200000000000000000000000000000005182b3b586e8379644f3a240f000014293f54697e7e69533e291400000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0f0f0f0f0f0f0f0f101214151d202a343e4a596277877a645544311d0800000000000000000000000000000000000000061b30455b708575604b35200b000000000000000000000000000000000000000000000000000000000000000000000014293f54697e7a65503a2510000000000000000000000000000000000000000000000000000012283d52677d816c57412c170200000000000000000000000000000000000000000c2035495a6f847a65503c2b19000000000000000a1e334657748975604a35200b00000000000000000000000000000000051a2f445a6f847a644f3a250f0014293e53697e806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e816c57412c17001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000013283e53687d806b56402b16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000000000000000000000014293e54697e7e69543e291400000f253a4f647a836d583b2b1805000000000000001f34495e7489745e49341f10101010101010101010101010101010101010101010101010100e0800000000001f34495e7489745e49342424242424242424252527292832363b474c5c6477857d675c4a3726140100000000000000000000000000000000000000061b30455b708575604b35200b000000000000000000000000000000000000000000000000000000000000000000000014293e54697e7a65503a2510000000000000000000000000000000000000000000000000000012283d52677d816c57412c170200000000000000000000000000000000000000031628394d637886715d4b371e0e000000000000000c21364b617687725443301c0700000000000000000000000000000000051a2f445a6f847a644f3a250f0011263c51667c826d5837261401000000000000000000000000000000000000000000000000000000000000000000000001162c41566b817f69543f2a14001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000000000f253a4f647a846f5a3a2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000000000000000000000000000000f243a4f6479836e583b2b1805000b20364b60758672594834200b000000000000001f34495e7489745e4934262626262626262626262626262626262626262626262626262625231c11030000001f34495e7489745e493939393939393939393a3b3c3e38454b5059616c7a867d675f4d3e2d19090000000000000000000000000000000000000000061b30455b708575604b35200b000000000000000000000000000000000000000000000000000000000000000000000013293e53687e7a65503a2510000000000000000000000000000000000000000000000000000012283d52677d816c57412c170200000000000000000000000000000000000000091e3246576b817d68533f2e1c00000000000000000d23384d627886715c3625130000000000000000000000000000000000051a2f445a6f847a644f3a250f000e23394e637985705544311d08000000000000000000000000000000000000000000000000000000000000000000000005182a3b596e847c67513c2712001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000000000c21364b617688735947341f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000000000000000000000000000000b20364b60758672594834200b00091d324556708577624c37220d000000000000001f34495e7489745e493b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a372e21110000001f34495e7489745e4e4e4e4e4e4e4e4e4e4e4f505254575660666d77818679675f4d41302010000000000000000000000000000000000000000000061b30455b708575604b35200b000000000000000000000000000000000000000000000000000000000000000000000013283d53687d7a65503a2510000000000000000000000000000000000000000000000000000012283d52677d816c57412c1702000000000000000000000000000000000000000c21364b61768776614b36211100000000000000000e23394e637885705b46301b0000000000000000000000000000000000051a2f445a6f847a644f3a250f000b20354b60758975604b35200b00000000000000000000000000000000000000000000000000000000000000000000000b1f344759738878624d38230d001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000091e324657728777614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d827c67513c271200000000000000000000000000000000091d314556708577624d37220d0002152838566b817c66513c2711000000000000001f34495e7489745e50505050505050505050505050505050505050505050505050505050504b3f2e1c0800001f34495e7489746464646464646464646464646567696c70757b82867d73635b4d4130231302000000000000000000000000000000000000000000061b30455b708575604b35200b000000000000000000000000000000000000000000000000000000000000000000000012283d52677d7b65503a2510000000000000000000000000000000000000000000000000000012283d52677d816c57412c1702000000000000000000000000000000000000081c2e3f53687e816b5746321e0900000000000000000f24394e647985705a45301b0500000000000000000000000000000000051a2f445a6f847a644f3a250f00081d314455708579634e39240e00000000000000000000000000000000000000000000000000000000000000000000000d22374c627788735a4935200b001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000003162839596e837b65503b261010101010101010101010101010101010100e0c06000000000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000000000000000000000002152738566b817c67513c2712000012273c51677c816b56412c16010000000000001f34495e7489746565656565656565656565656565656565656565656565656565656565655d4b37230e00001f34495e74897a79797979797979797979797a7a7c7e818485807a706760544a3d3023130500000000000000000000000000000000000000000000061b30455b708575604b35200b00000000000000000000000000000000000000000000000000000000000000000000000d22384d627878624d38220d000000000000000000000000000000000000000000000000000012283d52677d816c57412c17020000000000000000000000000000000000000e23374b5d718678634d3928160300000000000000000f24394e647985705b45301b0600000000000000000000000000000000051a2f445a6f847a644f3a250f0001142637566b807e69533a2917040000000000000000000000000000000000000000000000000000000000000000000115273751677c846e593c2b1906001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000152a40556a7f7e69543f2926262626262626262626262626262626262623211a0e0000000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000000000000000000000000000000012273c51677c806b56412c1601000d22374d627784705b46301b060000000000001f34495e74897b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b65503a25100000172c41566c8181828282828282828282828181807e7c7976706b645c524b43362d1f13050000000000000000000000000000000000000000000000061b30455b708575604b35200b00000000000000000000000000000000000000000000000000000000000000000000000b2035485a62625a4835200b000000000000000000000000000000000000000000000000000012283d52677d816c57412c1702000000000000000000000000000000000005192b3c50657a846f5a49351b0b0000000000000000000e23394e637886715c47311c0000000000000000000000000000000000051a2f445a6f847a644f3a250f000010253a4f657a846f5846331f0a000000000000000000000000000000000000000000000000000000000000000000081d3144556d827d68533d281300001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000000000011273c51667c826d58383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b38352c1f0e00000000000000000000000000000000000000000000000002182d42576d827c67513c271200000000000000000000000000000000000b21364b60757d68533d281300000b20344859697e69543f291400000000000000172c41566c81818282828282828282828282828282828282828282828282828282828282816c56412c17010014293e51626c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6967646157564f4b3e353026180f0100000000000000000000000000000000000000000000000003182e43586d8373604b35200b000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d4d483c2b1905000000000000000000000000000000000000000000000000000012283d52677d816c57412c170200000000000000000000000000000000000b2035485a6e837b66503c2c19000000000000000000000d22374c627788735d3b2a180500000000000000000000000000000000051a2f445a6f847a644f3a250f00000b20354b60748876614c3621120000000000000000000000000000000000000000000000000000000000000000000b20354b60758877624c37220d00001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000e23384d637886715650505050505050505050505050505050505050504e493d2c1a06000000000000000000000000000000000000000000000002182d42576d827c67513c27120000000000000000000000000000000000091e3245576068604e3a2611000005182b3b4f6169614f3b27120000000000000014293e51626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c62513e291400000e2234445156575757575757575757575757565654524f4b46393a372e201c1408000000000000000000000000000000000000000000000000000001162b3f53646d605544311d080000000000000000000000000000000000000000000000000000000000000000000000000e1e2b353838352b1e0e00000000000000000000000000000000000000000000000000000012283d52677d816c57412c170200000000000000000000000000000000021628384d62788673604a35200e000000000000000000000b20354b607589745948341f0b00000000000000000000000000000000051a2f445a6f847a644f3a250f0000081d3144556c817e6953402f180800000000000000000000000000000000000000000000000000000000000000071a2d3d51667c846f5947341f0b00001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000b20354a60758975656565656565656565656565656565656565656565635b4935210c000000000000000000000000000000000000000000000002182d42576d827c67513c2712000000000000000000000000000000000003162839454b534e42311e0b0000000d1d32434f544f43321f0c000000000000000e223444515657575757575757575757575757575757575757575757575757575757575756514434220e0000051626343e4142424242424242424242424241403f3d3936322824221b100801000000000000000000000000000000000000000000000000000000001023354653584b4437261401000000000000000000000000000000000000000000000000000000000000000000000000000e1920222220190e0000000000000000000000000000000000000000000000000000000012283d52677d816c57412c170200000000000000000000000000000000091e3245566b807e695443301c0700000000000000000000081c304354728777624c37220d00000000000000000000000000000000051a2f445a6f847a644f3a250f0000011426374e637886715e4c362513000000000000000000000000000000000000000000000000000000000000000a21364a5b6f847c66513b2a180500001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000071c30435470857d7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b79634e38230e00000000000000000000000000000000000000000000000012283d52677d7a644e39240f0000000000000000000000000000000000000a1b2832363d3a31241302000000001424323b3f3b3224140300000000000000051626343e41424242424242424242424242424242424242424242424242424242424242413e34261605000000081622292c2d2d2d2d2d2d2d2d2d2d2d2c2c2b292724211e160f0d0700000000000000000000000000000000000000000000000000000000000000061828353f433531261909000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0d0b05000000000000000000000000000000000000000000000000000000000012283d52677d816c57412c1702000000000000000000000000000000000b21364b60758776614c362513000000000000000000000001142636596e847b66513b261100000000000000000000000000000000051a2f445a6f847a644f3a250f000000092135495b6f847b665443301c0d00000000000000000000000000000000000000000000000000000000000a1a2e3f4e63798774604b35200d0000001c32475c718678624d37220d00000000000000000000000000000000000000000000000000000000000000000013253652687d828282828282828282828282828282828282828282817f6a543f2a150000000000000000000000000000000000000000000000001025394d5f67645c4a36220d000000000000000000000000000000000000000a161e2128261e1306000000000006141f2729271f1406000000000000000000081622292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c292216080000000000050e1417171717171717171717171717171614120f0c090300000000000000000000000000000000000000000000000000000000000000000000000a18232b2e201d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d816c57412c1702000000000000000000000000000000081b2e3f52687d816c5746331808000000000000000000000000152a3f556a7f7f6a553b2a1805000000000000000000000000000000051a2f445a6f847a644f3a250f000000061a2c3d4f647a8673604a3b2a1808000000000000000000000000000000000000000000000000000000021528384b5d6e837d685544311d080000000d23384d627873604b35200b00000000000000000000000000000000000000000000000000000000000000000008253a4e5f686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a614f3c27130000000000000000000000000000000000000000000000000a1e30414d524e4a3e2d1b07000000000000000000000000000000000000000003090b13110b0200000000000000030c1214120c030000000000000000000000050e141717171717171717171717171717171717171717171717171717171717171717140e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061016180b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0b08010000000000000000000000000000000012283d52677d816c57412c17020000000000000000000000000000000e22374b5d718678634e392917000000000000000000000000000f253a4f647a846f5947341f08000000000000000000000000000000051a2f445a6f847a644f3a250f000000000f22364a5c6e837d685948362614010000000000000000000000000000000000000000000000000003111d324556647a8673604b372614010000000b2035495a62605544311d080000000000000000000000000000000000000000000000000000000000000000000b1e31414e5257575757575757575757575757575757575757575757544f4332200c00000000000000000000000000000000000000000000000001132330393d39362d2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1f1c1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a181208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21201c140800000000000000000000000000000012283d52677d816c57412c1702000000000000000000000000000005182b3b4f657a846f5b49351b0b000000000000000000000000000b20354b60748877624c362513000000000000000000000000000000051a2f445a6f847a644f3a250f00000000071b2d3e4d62778777625443301c1402000000000000000000000000000000000000000000000004122131414b6074867a6455443119090000000006192b3c494d4b4437271501000000000000000000000000000000000000000000000000000000000000000000011323313a3d424242424242424242424242424242424242424242423f3c322515030000000000000000000000000000000000000000000000000005131e252824221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000020c121412100a0100000000020e171d1f1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a16120d0b0500000000000000000000000000000000000d1820223532313131313131313131313131313131313131313131313131302d251a0c000000000000000000000000000000000002090b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832363530261808000000000000000000000000000012283d52677d816c57412c170200000000000000000000000000000b203448596e837b66513d2c1a0000000000000000000000000000081c3043546c817f695443301c0c0000000000000000000000000000001a2f445a6f847a644f3a250f00000000001020344859687d8472604b42321d150a0000000000000000000000000000000000000000000514222f404d5f6c81816b5d4b3726140000000000000e1e2b35383531271909000000000000000000000000000000000000000000000000000000000000000000000005131e25282d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a27201507000000000000000000000000000000000000000000000000000000010a10120f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000006141f272927251e130500000212202b3234313131313131313131313131313131313030302f2b272220190e0b04000000000000000000000000000d1d2b34374a474646464646464646464646464646464646464646464646464541372a1a080000000000000000000000000000000a151d201d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002162838454b4b43362614010000000000000000000000000012283d52677d816c57412c170200000000000000000000000000021527384d62778774604b35200f0000000000000000000000000000011426364d63788673604a3a2a1804000000000000000000000000000c1c2e3f5a6f847a644f3a250f000000000005182b3b4e606c81806b604f4231271a0f040000000000000000000000000000000000030d182032404c5e677d8474604b3f2e1909000000000000000e192023201d150900000000000000000000000000000000000000000000000000000000000000000000000000010b11131717171717171717171717171717171717171717171715130c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041424323b3e3d3930231301000e20303d46494646464646464646464646464646464646464644403c38352b221f180c040000000000000000000005182b3b484d5f5c5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a554837251200000000000000000000000000000a1a28323632281a1406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455660605443301c080000000000000000000000000012283d52677d816c57412c170200000000000000000000000000091d3145566a807f695443301c08000000000000000000000000000000082135495b6e837d685847331f150400000000000000000000000a1a293a4b5d6f847a644f3a250f0000000000000d1d31414b6073847e69604b45382d1f180c0600000000000000000000000000050a161e2b34434f5e667c8677615544312010000000000000000000060b0d0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e100c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122232424f54524d41301e0a00172b3d4e5a5f5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a56514d483c37342a1f170b0000000000000000000b203448596274717070707070707070707070707070707070707070707070706f6655412d180300000000000000000000000002152838454b45383124140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607572604b35200b0000000000000000000000000012283d52677d816c57412c1702000000000000000000000000000b20364b60758776614c3626140100000000000000000000000000000006192c3c4d62788777614c43331f180c0400000000000000040e1b28384758657a8c7a644f3a250f00000000000000131d3144556175847e6c60564a3d332a211a100b0903000202020002090b0f192028323b484d61697c8678625947372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a10120c0a0400000000000000000000000000000000000000000001080b130b0801000000000003101b2225211f170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2f404f6069675f4d392510001d32465a6c74707070707070707070707070707070707070706f6b67625a554c473b33291b1002000000000000000d22374d62778b86858686868686868686868686868686868686868686868686856f5a45301a05000000000000000000000000091d32455660564e4231190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c1702000000000000000000000000071b2d3e52677d826d584733180800000000000000000000000000000000000e2035485a697e826d615043332a1f170f0c0a030a0c0f171f2c394556617685857a644f3a250f000000000000000215273746576174838174635b4c473a362c25211e161918171819151d20252b3539454b59626e7f8577625a483a2a1909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111719171107000000000000000000000000000004121d2427211f170c0000000000000000000000000000000000000008141c2028201d14090000000010212e373a3633291b0b00000000000000000000000000000002080b0d0e0c0a0400000000000000000000000000000000000b1b2c3d4c5e697e7d67523d2712001f34495f748a8586868686868686868686868686868685858584807c77716a61594c463a2e2112040000000000000b20344859697e837070707070707070707070707070707070707070707070706f6655412d18030000000000000000000000000b20364b607568604e37271501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c17020000000000000000000000000d22364a5c708579644e3a2a1700000000000000000000000000000000000006192b3c4e606d827f6a614c473a332924211e171e21242a333c49576074837b847a644f3a250f000000000000000009192839465660727f85796b61584e493d3b3632282e2d2c2d2e2731363a3c484d576069778382756259483c2b1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b19242c2f2c24190b00000000000000000000000000122230393c37332a1c0c000000000000000000000000000000000008182630353d35312619090000081b2e3f4b4f4c463a2917040000000000000000000000050b0d151d202223211f170b09030000000000000000000000000008182939495b667c8573604b35200b001f34495e748974707070707070707070707070707070707070767b7f83867f776b61584b3f30221202000000000005182b3b4f606e837e685b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a554837251200000000000000000000000003182d43586d827e685544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c1702000000000000000000000004182a3a4f647985705c4a361c0c000000000000000000000000000000000000000e1e31424b6073837f6e61584c463a393633293236393a474c5a6375837d6f847a644f3a250f0000000000000000000b1b28384554606a7a8580776c635b55504b4539434241424338454b4f545a626a757f867c6d6056483b2b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071929364044403629190700000000000000000000000a1d30404d514c473a2a170400000000000000000000000000000001142636434b524b4437261401000e22374b5d65615846331f0a000000000000000000080d1920222731363838363329211e160a000000000000000000000001142636465763798878635544311d08001f34495e7489745e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b586165696e767e858176655d4c403020100000000000000d1d32424c61768779635645464646464646464646464646464646464646464541372a1a08000000000000000000000000000f24394e64798774604b352010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000000000000000000a1f3447596d827c67513d2d1a000000000000000000000000000000000000000000141d31445560738183776a6158534f4c4639464b4e5258616a78847c676f847a644f3a250f000000000000000000000b1a2836434a5c64737d868178706a6560575a58575757585a5660646a70777f867f75665e4b45382b1d0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112436475459544736241100000000000000000000001024394d5f67615847331f10000000000000000000000000000000081c3043546068605544311d080010253a4f657a76614c36210c0000000000000108101b222b343837444b4d4e4c463a3632281a0f010000000000000000010f1c3043546176867d685a4937261401001f34495e7489745e4946464646464646464646464646463a474c5054586168747f877b665e4c3f2e1b0b000000000000141f334758657b8674604b40303131313131313131313131313131313131302d251a0c00000000000000000000000000000d21364a5c6f847c67523e2e1b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000000000000000011527374c61778774604b35200f000000000000000000000000000000000000000000021527374455606c7b867f766e686461575b576164686e767f8579665e6f847a644f3a250f00000000000000000000000a1825303e4a556068747c8385807a76716f6e6d6c6d6e6f71757a7f84847d756a61574c4032281a0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000005000002172c4054656e6554402c17020000030000000000000012273c51677c76614c3e2d1b0700000000000000000000000000031729394b60727d73604b35200b00172c41576c817a644f3a250f000000000309141d202e373c484d54556062636158544b45382d1f0f00000000000000000f1f30414b607283836e604e3c2c190900001f34495e7489745e4934313131313131313131313131302a33373b3a474c55606978857c665d4b39291703000000000004172a3a4b5d6a80816c5f4d3c2b191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a181208000000000000000000000000000000071a2d3d51667b86705c4b37220e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000000000000000081d3144556a7f7f6a5544311d080000000000000000000000000000000000000000000009192737444b5e66747d85837d797670707076797d83847c73635b5a6f847a644f3a250f00000000000000000000000008131c2d37444b5560666e767b818585848382818283848585817c776f6860564b46392f1e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1a0f0d07192f44596e846e59442f19050b0d190f0d080000000013283d52687d826e5c4a362212000000000000000000000000000a1e334657697e826c5544311d080014293f54697e7d67523b2a180600070b171e2631353e4b4f5a626a7075777876706a60564a3d2d1f0e0000000000000c1c2d3d4d5f6b808877614c42311e0e0000001f34495e7489745e49341f1b1b1b1b1b1b1b1b1b1b1b1b171f21262a3337444b5a6276867b645746331e0a0000000000000c1c2e3f4b6073847c675a48372614010606060606060606060606060605030000000000000000000000000000000000000f20354a6073877a644f3c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c1702000000000000000000000b20354b60748777614c37271501000000000000000000000000000000000000000000000009192631404c55606870787e818485858584817d776f6760544a5a6f847a644f3a250f00000000000000000000000000001019263137444b515861666b70717678787979787671706c676259534b453832281b1203000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e212f24221b1b31465b7086705b46311b1920222e25221b100200000b20354b6073867a644f402f1909000000000000000000000005182b3b4c61768777624c37261401000f243a4f6479826d594734211a181b22293337444b525c646e777f8584838284867f75635b4a3d2c18080000000009192a3a4a5b677d8c7c665947342413000000001f34495e7489745e49341f090606060606060606060600040a0c10171f27313c495863798776614b38281603000000000000111d31445562788778625544311d11000000000000000000000000000000000000000000000000000000000000000000071c304354687e836e5a4835200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c1702000000000000000000071a2d3d51677c826d59473419090000000000000000000000000000000000000000000000000009141d2f37444b535a63686c6f7070706f6c68625a524b43365a6f847a644f3a250f00000000000000000000000000000009141d2631353a464c51565b5761626364636261585b57524c483b3632281e160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2933364539362d1f31465b7086705b46311e2b3438433a372e20100000081c304354657b85705e4c37261401000000000000000000000b203448596b80806a594834190900000b20354a60738677614c43352c2d2d3639464b556067707a83847d76706e6d6f767e8679635b4936251300000001142637475863798a826d5e4c3b2a1806000000001f34495e7489745e49341f090000000000000000000000000000000409151d2b3a495b6a80806a5645321e09000000000000011426374859667c8573604b3f2e1c0c0000000000000000000000000000000000000000000000000000000000000000001325364b60758878624d3928160300000000000000000000000000000000000000000000000000000000000000000000000000060c0e1113141413100c0a040000051a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c17020000000000000000000d21364a5c708579644f3b2a180000000000000000000000000000000000000000000000000000000111192731363c494d53575a5b5b5b5a57534d483c3530445a6f847a644f3a250f000000000000000000000000000000000109141d202933363c4139464b4d4e4f4e4d4c463a423d37342a211e160a03000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464c5a4f4a3e342a465b7086705b4628323c484d584f4b3e2e1b0800011426364c5d6f847b665544311d0a000000000000000000061a2c3d4d62778776614b3b2b18000000071c304354677c826d614e493d423e4a4f576169747c8583796f6761585958566069798679635443301c070000081d3144556176878775614b40301d0c00000000001f34495e7489745e49341f090000000000000000000000000000000000010e1c2c3d4c61768875604b36210b0000000000000009192b3b4c5e6c81806b5d4b3a2a18080000000000000000000000000000000000000000000000000000000000000000081e3245566a80806b5746321e0800000000000000000000000000000000000000000000000000000000000000000000080e10192123262829292825211f170c0a041a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c1702000000000000000004172a3a4e647985705c4a361d0c000000000000000000000000000000000000000000000000000000000009151d202c35383e424546464645423e38352b202f445a6f847a644f3a250f00000000000000000000000000000000000001080c171f21262c29333638393939383633292c27221f180d0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e334657616f645c4c473b465b7086705b4638454b5a626e645c4b37220d000008182f3f4e63798674604b3928160300000000000000000c2136495b6d827e685746321d0d000000001325364d5f6d82806e635b58575a5c646b767e8680776d645c524c463a38454b5b647a8573604a35200b00000b20354b6075848a7b6557463322120000000000001f34495e7489745e49341f09000000000000000000000000000000000000000f1e3346576d827c67523c271200000000000000000d1d2f404b6074867b6558473625130000000000000000000000000000000000000000000000000000000000000000021628384c62778876614b362513000000000000000000000000000000000000000000000000000000000000000007111c23252c35383b3e3f3f3d3b363329211f171a2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000000000000a1f3347586d827d67523e2d1b0000000000000000000000000000000000000000000000000000000000000002080e192023292c2f3030302f2c282220191a2f445a6f847a644f3a250f000000000000000000000000000000000000000000040a0c1116171e212323242423211f1717120d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c6176837a6d61594b445b7086705b414d56606a78827a644f3a250f0000001121364a5b6d827d685745321e0c00000000000000081c2e3f4e63798674604b3929160000000000081830414b6073818378706e6d6f717980867e766b625a4f4a3e36332928323d4a5c6c817b66513b261100000c21364b61757a77655d4b392917040000000000001f34495e7489745e49341f09000000000000000000000000000000000000000317293952677c826d57422d18000000000000000000121d32455663798777615443301c1000000000000000000000000000000000000000000000000000000000000000000a1f3447596d827e695443301c07000000000000000000000000000000000000000000000000000000000002101b222e373a3c494d5153545452504c463a37332a1e2f445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000000000011426364c61768775604b36201000000000000000000000000000000000000000000000000000000000000000000000060c0e13171a1b1b1b1a17130d0b051a2f445a6f847a644f3a250f0000000000000000000000000000000000000000000000000000030a0c0d0e0f0e0d0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465763798482776960555b7086705b4f5f677580867c655c4b37220d000000071a2d3d4d62788775604b3a2a18040000000000000923374b5d6f847c665544311b0b000000000000121d314455606c7a848683828486827b746961574d483c362d211f17161e2d3e4e6379836e5938281603000a1e334657616462594b3f2e1b0b000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000d22384d627786715c37271502000000000000000002152838495b687d8472604a3e2d1b0b0000000000000000000000000000000000000000000000000000000000000005182a3b4e63798773604a35200f000000000000000000000000000000000000000000000000000000000614202d363f4b50585b636668696968656158544c473a3228445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000000000081c304354697f806a5645311d09000000000000000000000000000000000000000000000000000000000000000000000000000002050606060502000000051a2f445a6f847a644f3a250f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729394a5b636f7c867e74665e7086705c64707c867e74655e4c3e2e1b08000000000f2034485a6b807f6a5947341f0e00000000000919304150657a85705e4d3727150000000000000001142637444b5d656e75777976716d6660544b4639342b221b100a04031021364a5b7186715645321e090003172939464b4f4c483b2e211000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000b20354b607589735544311d080000000000000000000a1a2c3d4e606d827e695c4a39291603000000000000000000000000000000000000000000000000000000000000000d21364a5b6f847b66513d2d1a070000000000000000000000000000000000000000000000000000081624323e4a4f5d656d71787b7d7e7e7d7a76706961584b4538445a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c1702000000000000000b20354b60748777624d38271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000002090b0902000000000002090b0902000000000000000002090b09020000000000000711181a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0e0c0600000000000b1b2d3d4a4e5e66757f867b6e7085706d798581776960554c402f2010000000000005192b3c4c61768777614c3c2c1906000000021527374d5f70857a644f403019090000000000000000091926313f4b5056606263615858514b4336322920190d0700000000071a2d3d5a708575604b36210b00000b1b2933363a37342b1d100200000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000081c304354738875604b36200b000000000000000000000f1f31414b6175867a645746321e1300000000000000000000000000000000000000000000000000000000000000071a2d3d50667b846f5b4a36210c0000000000000000000000000000000000000000000000000006162633434f5c64707a8286837f7d7c7c7e8084857e766a60564a3d5a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c1702000000000000061a2c3d51667c836e5948341a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000a161e211e160a0000000a161e211e160a0000000000000a161e211e160a000000000b19242c2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f23211a0f01000000000f1f2d36404d56606a7883837884778284796c61584b44372f2111020000000000000d1f334658697e816c5a49352010000000081d314455677c836e5c4b3722120000000000000000000009141d2e3738454b4d4e4c473a3c3530261e160b050000000000000010253b50657a75604b36210b0000000b171e21242220180d000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000417293a5d738876614b36210c0000000000000000000001131e334657647a8675614b41301e0e000000000000000000000000000000000000000000000000000000000000000f23384c5e718679634e3a2a1804000000000000000000000000000000000000000000000001142433445161697a85827a716e6a686767686b6f767e857f75645c4d5a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c17020000000000000c2135495b6f847a654f3b2b180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000a1a28323632281a0a000a1a28323632281a0a000000000a1a28323632281a0a000007192937414444444444444444444444444444444444444444444444444444444444444438352c1f0f00000000010f1a213038454b59626d7b8284827c6f635b4c473a3127191103000000000000000417293a4b60748778634d3e2e1b0700031729394b60748778634d3e2e1b04000000000000000000000001111c23273136383937332a26201c1408030000000000000000000e23384b5d65605645321e0900000000030a0c0f0d0b0500000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000a1f334758748973604b35200b0000000000000000000000031729394a5c697f826d5f4d3c2c1a0a000000000000000000000000000000000000000000000000000000000000091c2f4054697e826d5947341f0a00000000000000000000000000000000000000000000000f1f314251626b7e85796d655d58555251525356586168747e857a675f5a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c17020000000000031729394e637886715d4b371d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000002162838454b4538281602162838454b4538281602000002162838454b4538281602001124374754595a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4e493d2c1a0600000003111927313a474c5c646f7d8383837e73655d4d483c32281a120400000000000000000b1d314455677c836e5c4b372212000a1e334657697e816c5b493520100000000000000000000000000000080a151d202224211f17110b08010000000000000000000000081c2f3f4b504b4538281603000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000c21374c617688735443301c080000000000000000000000000b1b2d3e4a6072847d675b493827150200000000000000000000000000000000000000000000000000000000000c2035495a6e838877614c38271502000000000000000000000000000000000000000000061a2c3d4e606b808375645c4f4b3f403d3c3c3e3a464c55606878847d68606f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000000a1e3346576c817d68533f2e1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000091e324556605645321e091e324556605645321e090000091e324556605645321e0900182c4154656f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f635b4935210c00000011212f37444b58616c79848176857480857a6e625a4b45383022120100000000000000021527374d5f70857a644f402f1909182b3b4c61768777614c3c2c19020000000000000000000000000000000002090b0d0e0c0a040000000000000000000000000000000011212f383b3632281a0a00000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000417293a50657b846f593626140100000000000000000000000000101c30435461778779635645311d1200000000000000000000000000000000000000000000000000000000031729394d6278867f7f6a5645311d090000000000000000000000000000000000000000000c2135495b687e837360564a3e372e2a28272729293337444b5a6274827e686f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000001325364c61768775604b362110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f000000000000000000000b21364b6076604b36210b21364b6076604b36210b00000b21364b6076604b36210b001a2f44596f8484848484848484848484848484848484848484848484848484848484848479634e38230e00000d1d2f404c556069778184796c7085706b788383786a60564d40301f0f0000000000000000091930414f657a85705e4c372614203448596b807f6a5947341e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c2325211e160a0000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000010f1f3346586c817e69543e29140000000000000000000000000000001325364759657b8574604b402f1d0d0000000000000000000000000000000000000000000000000000000a1e3346576c817f778775604b3620110000000000000000000000000000000000000000071b2d3e4e63798776615545382d221b1513121213171f27313c49566073827d6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000000071c304354697e806b5645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000001152737586d826d58422d152737586d826d58422d180001152737586d826d58422d18000c21364c617676767676767676767676767676767676767676767676767676767676767674604b35200b0005182b3b4c5e65747e867c6f645c7086705a626e7b867f75665e4d3d2c1a0600000000000000001323374b5d6e837c665544311d2c3d4d62778775604b3a2a180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e100b0903000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000003101f2e3f4c61768877614c37220c00000000000000000000000000000008182a3a4b5d6b80816c5e4c3b2b180800000000000000000000000000000000000000000000000000011426374c617688766d827d67523f2e1c08000000000000000000000000000000000000000d22364a5c6f847c66584737281a0f0800000000000409151d2b3845556074837a847a644f3a250f0000000000000000000000000012283d52677d816c57412c1702000000000b20354a60738778624d38281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f000000000000000000081d3144556e836e58432e1d3144556e836e58432e1900081d3144556e836e58432e19000a1f33465861616161616161616161616161616161616161616161616161616161616161605544311d08000b20344859657c867f75675f4e5b7086705b4d5e65747e867c665b4935210c0000000000000000081c2e3f4e63798674604b392836495b6d827d685745321c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000040a161e2e3d4b5d6c81806b5947341f0b000000000000000000000000000000000c1c2f3f4b6073857c66594836261401000000000000000000000000000000000000000000000000081d314455697e816c647986715d4b37230e000000000000000000000000000000000000011527374f647986715e4d3a29190a000000000000000000010e1a28374556617685857a644f3a250f0000000000000000000000000012283d52677d816c57412c170200000006192c3c50667b836e5a48351a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000b20354b6074826e59432e20354b6075836e59432e19000b20354b6074836e59432e19000417293a464c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4437261401000d22374d627782786a60564d415b7086705b404c556069778278634e38230e000000000000000000112135495b6c827d685745323f4e63798674604b39281600000000000000000000000000000000000000000000000000000000010d171c1f1c170d01000000000000000000000000000000000000000000000000000000020b11131a0c0a03000000001f34495e7489745e49341f09040404040404040404050003090b10181f28323e4b5c657b8875614b3b2a18040000000000000000000000000000000000111d31445562788777625443301c100000000000000000000000000000000000000000000000000b20354b60748778635c70857a65503c2b19060000000000000000000000000000000000081d3144556d827d685240301c0c0000000000000000000000000a1927384758657b8c7a644f3a250f0000000000000000000000000012283d52677d816c57412c17020000000c2035495a6f847b65503c2b190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000b20364b6074836e59442e20364b6075836e59442e19000b20364b6074836e59442e1900000b1b293336363636363636363636363636363636363636363636363636363636363636353126190900000b20344859626d625a4b4538465b7086705b4637444b59616d635b4935210c000000000000000000061a2c3d4c62778775604b3b4b5d6f847b665544311b0a00000000000000000000000000000000000000000000000000000001111f2a3134312a1f11010000000000000000000000000000000000000000000000000006141f26292f211e160b0000001f34495e7489745e49341f1a1a1a1a1a1a1a1a1a1a1a1b161e21252a3439454b5c647a877a645746331d0c00000000000000000000000000000000000001152737485a677c8473604b3f2e1c0c00000000000000000000000000000000000000000000071b2d3e51677c846f5b51677c836e5a4935200b00000000000000000000000000000000000b20354b60758876614b36211200000000000000000000000000000a1a293a4b5d6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c17020000031628394d637886715d4b381e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000c21364b6175836e59442f21364b6176836e59442f19000c21364b6175836e59442f190000000b171f21212121212121212121212121212121212121212121212121212121212121201d140900000005182b3b484d584d483c3228465b7086705b4627313b474c574e493d2c1a06000000000000000000000f1f3448596a807f6a594750657a846f5e4c372614000000000000000000000000000000000000000000000000000000000d1f2f3d4649463d2f1f0d000000000000000000000000000000000000000000000000071524313a3e443632291b0b00001f34495e7489745e49342f2f2f2f2f2f2f2f2f2f2f2f302832363a3b474c57606b7a887c665c4b392917000000000000000000000000000000000000000009192b3c4d5f6c817f6a5d4b3a2917040000000000000000000000000000000000000000000d22364a5c70857a65504b60748778624d392917030000000000000000000000000000000010253a50657a846f5746321e090000000000000000000000000000000c1c2e3f5a6f847a644f3a250f0000000000000000000000000012283d52677d816c57412c17020000091e3246576c817e68533f2f1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d627774604b36210b0000000000000000000c21364c6176846f59442f21364c6176836f59442f1a000c21364c6176836f59442f1a00000000080e101010101010101010101010101010101010101010101010101010101010100c0a0300000000000d1d2b34374338342b1e31465b7086705b46311d2a34374238352c1f0f000000000000000000000005182a3b4b61758777614c5f708579644f402f190900000000000000000000000000000000000000000000000000000000172a3d4d5a5e5a4d3d2a17030000000000000000000000000000000000000000000000162533424e53594b4639291603001f34495e7489745e49444444444444444444444444444639454b4f545961697580867a665e4c3e2e1b0b0000000000000000000000000000000000000000000e1e30404b6075867a655847331f14010000000000000000000000000000000000000005192b3b4f647986715d4b4455697e816c5746331e0800000000000000000000000000000000152a3f556a7f7f6a5539281603000000000000000000000000000000001a2f445a6f847a644f3a250f000000000000000000000000000c22374c617678624d38230d0000000c21364b61768776614b362111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485962605645321e090000000000000000000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a000003111c2325252525252525252525252525252525252525252525252525252525252525211e170b00000000000d1820222e2220191b31465b7086705b46311b181f222d23211a0f010000000000000000000000000d1e324657687e816c5b677c836d5c4a36221200000000000000000000000000000000000000000000000000000000001c31465a6b746b5a46311c0800000000000000000000000000000000000000000008131c33435060686f615746321e0a001f34495e7489745e595959595959595959595959595a5b5c576065696e777e858075645c4c402f20100000000000000000000000000000000000000000000000121e32455663798676614c42311f0f000000000000000000000000000000000000000b203448596d837d68533f374c61768876614b36261401000000000000000000000000000004192e44596e837a65503b251000000000000000000000000000000000051a2f445a6f847a644f3a250f000000000000000000000000000a1f33475861625a4835200b00000013293e53687e806b5746321e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b484d4b45382816020000000000000000000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a000011212e373a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3633291b0b0000000000050b0d180d0b05182d42586d826d58422d18040b0c180e0c060000000000000000000000000000031628394b6074867863748678624d3e2d1b0400000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000091825304451616a7e8376614b36210c001f34495e7489746f6f6f6f6f6f6f6f6f6f6f6f6f6f6f70716f767a7e83857e766a60564a3d2f2212020000000000000000000000000000000000000000000000031628384a5b687e836e604e3d2d1b0a0000000000000000000000000000000000031628394d62778875604b363346586c817e695443301c080000000000000000000000000000031729395c718677624d37220d00000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000004182a3a474c4d483c2b19060000000d22374c627773604b3929160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34373632281a0a000000000000000000000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a00081c2e3f4b505050505050505050505050505050505050505050505050505050505050504c46392917030000000000000003000001162a3f52636d63523f2a16010000020000000000000000000000000000000000000b1d314455667c836e7e816b5a483520100000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000a192736434a626b7f8374615746321e0a001f34495f74898484848484848484848484848484848485878482807d76706961574b45382d1f1204000000000000000000000000000000000000000000000000000a1a2d3d4e606e837e685b4a3928160300000000000000000000000000000000091e3245576b80806a564532293a4d63788774604b35201000000000000000000000000000000a1e334657748975604a35200b00000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000000000c1c2a333738352b1e0e000000000b1f34475962605443301b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192022211e160a00000000000000000000000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a000e23374b5d65656565656565656565656565656565656565656565656565656565656565615746331e0a0000000000000000000000102335455258524535231000000000000000000000000000000000000000000000011426374c5e70857a8676614c3c2b19020000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000a1a28374454606c80827360564639291603001f34495e7489767777777777777777777777777777787a7d8082827b70665e4c473b32281a0f010000000000000000000000000000000000000000000000000000000f1f31424c61768679635745321e12000000000000000000000000000000001325364b60758877624c38282035495a6e847c66513e2d1b07000000000000000000000000000c21364b617687725443301c0700000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000000000c181f222320190e000000000005182a3b474c4b43362614000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0b09020000000000000000000000000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a0010253a50657b7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7b76614c36210c0000000000000000000000061727353f423f352717060000000000000000000000000000000000000000000000091930404f647a887f695847331e0e000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000b1b28384555607281817260554538291b0b00001f34495e74897461616161616161616161616161626365676b6d777f857c6e6159493c2c1e0e0000000000000000000000000000000000000000000000000000000001141f334658647a8675604b41301e0e0000000000000000000000000000071c304354687e826d5947341a192c3c50657a85705c4a36220d000000000000000000000000000d23384d627886715c3625130000000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000000000000040a0c0d0b06000000000000000d1d2a343735302618080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a00162b40556b8080808080808080808080808080808080808080808080808080808080808078624d38220d0000000000000000000000000917232a2d2a231709000000000000000000000000000000000000000000000000001222364a5c697e74604b3a2a1700000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000c1b29394556607382806d60544437281a0b0000001f34495e7489745e4c4c4c4c4c4c4c4c4c4c4c4c4d4d4f525659626a757f8377635a493c2b1a0a000000000000000000000000000000010101010101010101010101010417293a4b5c6a7f826c5f4d3c2b1909000000000000000000000000000b20354a60738779644e3b2a180e23374b5d718679644e3b2a18050000000000000000000000000e23394e637885705b46301b0000000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000000000000000102000000000000000000000d181f22201c140800000000000000000000000000000000000000000000000000000000000000000000000000060b0d16160e0c060000000000000000040a0c1414141414141414141414141414141414120c020000000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a0014283d50626b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b625a4834200b00000000000000000000000000061016181610060000000000000000000000000000000000000000000000000000071b2e3e4f6169605645321c0c00000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000d1c2a3a4657607483806b624b433627190a000000001f34495e7489745e49373737373737373737373737383a3d3b484d57606a798478635a483828160200000000000000000000030d13151717171717171717171717171717171b2e3e4a6072847c675a48372715010000000000000000000000071a2d3d51667b85705c4a361d0d081c2f3f52687d826d5948341f0a0000000000000000000000000f24394e647985705a45301b0500000000000000000000000000000000051a2f445a6f847a644f3a250f000000000000000000000000000000050b0d17170d0c060000000000000000050b0d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000e1920232b2b2321190e0000000000000c181f222a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a29271f140600000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a000d21334450555656565656565656565656565656565656565656565656565656565656564d483c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102032424f544b453828150000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000e1d2b3a47586175837f6a6251443026180900000000001f34495e7489745e493422222222222222222222222325282b3439454b5b63778478625645321e0d000000000000000000071520282a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c30435462778778625544311d1100000000000000000000000c21364a5b6f847c66513e2d1b00001120364b60758777624c3828150200000000000000000000000f24394e647985705b45301b0600000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000000000d1820222c2d2320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b3538404138352c1e0e000000000c1c2a34373f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3e3b32241402000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a00041626333d4040404040404040404040404040404040404040404040404040404040404038342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e3632281a0a0000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000010f1e2c3b48596176847e69615043341c14080000000000001f34495e7489745e49341f0c0c0c0c0c0c0c0c0c0d0e1012182028323d4a5962778474604b3c2b190500000000000000031525333c3f414141414141414141414141414141414141364859667b8573604b3f2f1b0a00000000000000000004182a3b4e63798774604b3520100000091d3245566a80806a5645321d0900000000000000000000000e23394e637886715c47311c0000000000000000000000000000000000051a2f445a6f847a644f3a250f000000000000000000000000000d1d2b3437414238352c1e0e00000000000002080b0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0c0600000000000d1d2b3c494d56564d493c2c1e0e000004182a3a474c54545454545454545454545454545454544f42321f0c000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a0000081621282b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2220190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f2729201d150a000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000002101f2c3c49596277857d68604f4333251601000000000000001f34495e7489745e49341f09000000000000000000000000050a161e2d3b4859667b806b5a4834200b000000000000000d20334350555656565656565656565656565656565656565656565e6b80806b5d4c3928160300000000000000000b1f3447596d827e695443301c080000021528384c62778775604b36201100000000000000000000000d22374c627788735d3b2a180500000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000005182b3b484c56574d493c2c1b0b0000000009151d202525252525252525252525252525252525252525252525252525252525252320190e00000005182b3b495a626b6b635b493c2c1906000a1f344759616969696969696969696969696969696969614f3b2712000c21364c6176846f5a442f21364c6176846f5a442f1a000c21364c6176846f5a442f1a000000040d14161616161616161616161616161616161616161616161616161616161616160d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c12140b090200000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000311202d3d495a6277857c675f4e423225150700000000000000001f34495e7489745e49341f090000000000000000000000000000030f1d2b3b4c5e6e8378624d38220f0000000000000013283c50616a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c74857b655745321e0900000000000000021528384c61778876614b362614010000000a1f3447596d827d68533f2f1c08000000000000000000000b20354b607589745948341f0b00000000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000000000b20344859626c6c625a4939281603000009192731363a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a38352c1e0e00000b203448596278808079635b4935210c000c22374c61777f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f69543e2914000b21364b60757e69533e2921364b60757e69533e2914000b21364b60757e69533e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000311212e3e4a5b6378867b665e4d41312414060000000000000000001f34495e7489745e49341f09000000000000000000000000000000000d1d2f4050667b816c563d2d1a07000000000000152a3f556a7f818181818181818181818181818181818181818181818181838876604b36210b00000000000000091d3245566a7f816c57463318080000000005182a3b4e647986715d4b37230e00000000000000000000081c304354728777624c37220d00000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000417293a4c6277818178625746321e090002152737444b4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4d493c2c1906000d22374d62778995968a79634d38230e000c21364c61767c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c66513c271100091e3245566069604f3b261e3245566069604f3b261200091e3245566069604f3b26120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f13161718171614100c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1a1812080000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000412222f3f4b5c6479867a655d4c4030231306000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000001220364b607586715c4a36210d0000000000000f24394e647a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a74604b36200b000000000000000b20364b60758878624d3929170000000000000d21364a5c70857a65503c2c190600000000000000000001142636596e847b66513b261100000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000a1f334658718696978875614b36210c00081d31445560646464646464646464646464646464646464646464646464646464646464635a4935200c0013293e53687e93a7a895806a55402b15000a1f3346586167676767676767676767676767676767665e4d39240f0003162838454b534f42321f162838454b534f42321f0c0003162838454b534f42321f0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000809151d2024282b2c2d2c2b2925211e170c0a030000000000000000000000000000000000000000000000000000000000000000000002101b2224302d25190b00000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000005132230404c5d657a8679645c4b3f2f22130500000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000081d3144556e8379644e39240f0000000000000d21364a5c646464646464646464646464646464646464646464646464646464605645321d09000000000000081c2f3f52687d836e5a49351b0b000000000000071a2d3d51667c846f5b4935210c00000000000000000000152a3f556a7f7f6a553b2a1805000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000c21364c61768ba2a48e79644e39240f000b20364b60747a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a78634d38230e0012283d52677d92a3a4947e69543f2914000417293a464c51515151515151515151515151515151514d40301d0900000a1a2832363e3b3224140a1a2832363e3b3224140200000a1a2832363e3b3224140200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111c23273135393d40424242403e3b363329211e170b04000000000000000000000000000000000000000000000000000000000000000010202d3639454137291908000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000006142331404d5e667b8679635b4b3e2f2112040000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000002152737566b807c67513c2712000000000000071a2d3e4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b45382815020000000000000e23374b5d71867a65503c2b1900000000000000000f20354b60748778634d3a2917040000000000000000000f253a4f647a846f5947341f08000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000a1f334658708494958674604b36200b000c21364c61768283838383838383838383838383838383838383838383838383838383827e68533e2913000b21364b60748592928676614c36210c00000b1b2933363c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c39302212000000000a161e2129261f1406000a161e2129261f1406000000000a161e2129261f1406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101b222e3737444b4f53555757575653504c46393633291f170c000000000000000000000000000000000000000000000000000000000000071b2d3e4a4f5a5448372512000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000007152432414e5f677c8578635b4a3d2e201103000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000014293e53697e7e69543e2914000000000000000f202d36393a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3632281a0a00000000000006192c3c50657b86715d4b371e0e0000000000000000081c304354697e816c5846331f090000000000000000000b20354b60748877624c362513000000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000000000417293a4b61757f8076615645321d09000a1f334658616d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68604e3b261100091e32455660757c7d75615746331e0a0000000b171f212727272727272727272727272727272727241d1204000000000003090b14120c0200000003090b14120c0200000000000003090b14120c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2e373f4b50556064686b6c6d6c6b69656157544b4639332a1c1201000000000000000000000000000000000000000000000000000000000d22364a5c646f6654412d18030000000000000000000000000000000000000000001f34495e7489745e49341f090000000000162533424f5f687d8577625a493d2d1f100200000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000013293e53687e7f69543f2a1400000000000000010f1a21242525252525252525252525252525252525252525252525252525201d150a000000000000000c2135495b6f847d67523f2e1c000000000000000000011426364b61768876614c372614010000000000000000081c3043546c817f695443301c0c0000000000000000000000000000001a2f445a6f847a644f3a250f0000000000000000000000000b1e334657616a6a61584738281502000417293a464c585858585858585858585858585858585858585858585858585858585858534e42311f0b000216283845566067676157463929170300000000040a0c12121212121212121212121212121212110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1926313e4b4f5d656d75797d80818281807e7a766f6961574c473a2f1d14090000000000000000000000000000000000000000000000000000000f24394f647a846f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f0900000008131c33435060697d84766259483c2c1f0f010000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000152b40556a807e68533e2913000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0b0902000000000000000417293a4d63788875604b36201100000000000000000000081e3346576b817f695544311d080000000000000000011426364d63788673604a3a2a1804000000000000000000000000000c1c2e3f5a6f847a644f3a250f00000000000000000000000003172939464b54554c473a2a1a0a0000000b1b2933364343434343434343434343434343434343434343434343434343434343433e3b3124140200000a1a2838454b52524b4639291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1114161718171613100c0a030000000000000000000000000000000000000000000a1a2837444b5c64707a8386827e7b7978797a7c8084847e766a61584c403126190900000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f090000091825304451616a7e84756158483b2b1e0e00000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000005192b3c576c827b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586c817f6a5645311d0900000000000000000000031729394d62788774604b352010000000000000000000082135495b6e837d685847331f150400000000000000000000000b19293a4b5d6f847a644f3a250f000000000000000000000000000b1b2933363f4037332a1c0c00000000000b171f212e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e29261f1406000000000a1a2832363d3d3632281b0b0000000000000000000000000000000000000000000000000000040a0c101315161514110d0b050000000000000000000000000000000000000000000000000000000000060c0e19202226292b2c2d2c2b2925211e160b09020000000000000000000000000000000000021528384555606b7a85857b756d696664636465676a6f767c848076665e4b4437261808000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f09000a192636434a626b7f83746157473a2a1d0e0000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000b2034485a718577624d38220d00000000000000070d0f0e0c0600000000000000000000000000000000000000000000000000000000000000000000011527374c61768877614c3827150200000000000000000000000b2035485a6e837c67513e2d1b07000000000000000006192c3c4d62788777614c43331f180c0400000000000000050f1b28374658657a8c7a644f3a250f00000000000000000000000000000b171e212a2b221f180c00000000000000040a0c18181818181818181818181818181818181818181818181818181818181813110b020000000000000a161e212727211e160b000000000000000000000000000000000000000000000000040a0c171f2125292a2b2b29262220190e0c06000000000000000000000000000000000000000000000000060e1921232b34383b3f41424242403e3b363229201d150a020000000000000000000000000000000e1d324556607380877c7066605553504f4e4e4f5255576067737c847b6b605544362614010000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f000a1a27374454606c80827360564639291c0d000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000004182a3a4d627787725a4835200b000000000002101b22242321190e060000000000000000000000000000000000000000000000000000000000000000081d314455697f826d5947341a0a00000000000000000000000006192b3c50657a85705c4a36220d0000000000000000000e2035485a697e826d615043332a1f170f0c0a040a0c0f18202d394655617684847a644f3a250f000000000000000000000000000000030a0c15150c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b12120c09030000000000000000000000000000000000000000000000040c171f212933363a3e4040403e3b37342b2320190e060000000000000000000000000000000000000000010e1a212c35383c484d5154565757575653504b46393631271d1509000000000000000000000000000e1e31424b6074838476675f504b44373b3939393a3d39454b54606675828073605443301c110000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f0b1b28384555607281817260554538291b0c00000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000008141f334758697f806b563c2b1905000000000010202d363a38352c20190e050000000000000000000000000000000000000000000000000000000000000b20354b60748779634e3a2a1800000000000000000000000000000e23374b5d718679644f3b2b1805000000000000000006192b3c4e606d827f6a614c473a332924211e171f21252b343d4a576173837a837a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171f2933373a464c505355565554514d483b38352c20190e00000000000000000000000000000000000008141c2c353c494d565a6266696b6c6d6c6b68656157534b45383127190e000000000000000000000006192c3c4e606d82827361584d40353126262423242527283236434a57606d7f8272604b402f1a0a00000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f1b29394556607382807260544437281a0b0000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000040a10182630444c61778878624d37220e0000000000071b2d3e4a4f4d493c352c20190e05000000000000000000000000000000000000000000000000000000081b2e3e52677c846f5b4a361c0c0000000000000000000000000000081c2e3f52677d836d594834200a0000000000000000000e1e31424b6073837f6e61584c463a3936332933363a3b484d5b6375837d6d827a644f3a250f0000000000000000000000000000000000050b0d0b0902000000000000000000000000000000000000000000000000000000000000000000030a0c0d0e0f0f0e0d0b0903000000000000000000000000000000000000000000000000000000000000000000000003111b29333a474c54586165686a6b6a69666259564d493c352c1c13080000000000000000000000000000000b1826303d494e5b636b71777b7e80818281807e7a766f6860564b44372c1e11030000000000000000000c2035495a687d85746055473a30201d14110f0e0f1012161e253039454b616c81806b5e4c38271502000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341c2a3a4657607483806c6054433627190a000000000000000000000000000000000000000000001f34495e7489745e49341f0f0f0f0f0f0f0f0f0f0f101214171f212d36434b626d82806b594834200b00000000000d22364a5c64635b4d493c352b20180d05000000000000000000000000000000000000000000000000000d22374b5c70857b66513d2d1a000000000000000000000000000000001120364b60758777624d38281603000000000000000000141d31445560738183776a6158534f4c463a464c4f5359626b79857d676d827a644f3a250f000000000000000000000000000000000d192022201d150a000000000000000000000000000000000000000000000000000001080b0f1418161e21222324242322211e161916120d0b05000000000000000000000000000000000000000000000000000000000715212f3a464c58616970767a7e7f80807e7b77716b635a4d493c3025180a000000000000000000000000000c1b2936434b5b636e78808784807d7a7978797a7d8185857d75686055493c2f2112040000000000000005192b3c4d6378877862554437291c1208010000000000000308131c2832434b6073847b655645311d09000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49342c3a47586175837f6a624a433626180900000000000000000000000000000000000000000000001f34495e7489745e4934242424242424242424242525272a2933363e4a54606b808474604b3b2b190500000000000f243a4f647a786d625a4d483c342b1f180d040000000000000000000000000000000000000000000005192b3c4f647a8773604a35200f00000000000000000000000000000000081d3144556a7f806b5645321e08000000000000000000021527374455606c7b867f766e686461575b586164696f77808579675f6c827a644f3a250f0000000000000000000000000000000d1d2b34373632281a0a0000000000000000000000000000000000000000000002080b151d2024292d2932363838393938383632282f2b27222018100b08010000000000000000000000000000000000000000000000081625323f4c58616b767e8584807d7b7a7b7c80848680786e635a4a4336281a0a00000000000000000000000c1c2a394654606a7984867e76706b676564636465686b707780877d74635a4c3f2f2212010000000000000b2035485a6d827e6859483727190c0000000000000000000000000a161e31445563798774604b362010000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49413d49586176847e69615043302518080000000000000000000000000000000000000000000000001f34495e7489745e4939393939393939393939393a3b3d3f3a464c525c6473808576615645311d0d0000000000000d22374c62778482786d625a4d483b342a1f180c0400000000000000000000000000000000000000000b2035485a6e837e695443301c0700000000000000000000000000000000021527374c61778875604b3625130000000000000000000009192737444b5e66747d85837d7976707070767a7e84857d73645c566b807a644f3a250f000000000000000000000000000008182b3b484d4b4538281502000000000000000000000000000000000000000509151d202731353a3e4339464b4d4e4e4e4e4d4b453944403c37342b25201c140805000000000000000000000000000000000000000006162633434f5d657680857e76706b68666566676a6f757c8483786960544538281a0a0000000000000000000b1b2a3a475761727f877c736861585652504f4e4f5052565a626a77818678655d4c402f1f0f0000000000000d22384d62788775604b3b2b1909000000000000000000000000000003152737495b6d827e68533e2d1b070000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e5656575b6376857d68604f43331c1308000000000000000000000000000000000000000000000000001f34495e7489745e4e4e4e4e4e4e4e4e4e4e4e4f4f505254575861676f79858275615847382715000000000000000b1f344859626f7a8482786c62594c483b342a1f170c040000000000000000000000000000000000000d22384d62788876614b362513000000000000000000000000000000000000091f3347586d827d685443301c070000000000000000000009192631404c55606870787e818485868584817e78706760554a4c617675614b36210c0000000000000000000000000000132536485962605645321d090000000000000000000000000000000000030d182027313637444b4f53585b576162636464636260575c5955524c483b3a35302620180d060000000000000000000000000000000000021424334450616a7b867d7469615856525150505255566067707b867e72605645382815020000000000000003162839475861758483766760544c473a3d3b3939393b3d3c484d58616b7b877b665e4c3d2c18080000000006192c3c566b817e695645311d0d0000000000000000000000000000000009192c3d4d627887715c4a36220d0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489746b6b6b6c6f79867c675f4e423225150000000000000000000000000000000000000000000000000000001f34495e74897464646464646464646464646464646567696d70767d84857a6d6157473a2a1a0a0000000000000005182a3b484c5d656f7b8581776c62594c473a332a1f170c0300000000000000000000000000000000162b41566b80806b574632180800000000000000000000000000000000000004182a3a4e63798673604a35200b000000000000000000000009141d2f37444b535a63686c6f7070706f6c68625a524b4437465861615746321e0a00000000000000000000000000071c304354627774604b36200b000000000000000000000000000000000b171e2b3437444b51556064696d7172767778797978777672716e6b676259564f4b4336342b20190e040000000000000000000000000000001021314250626b7f84776860554c473a3d3b3a3b3d38454b525e6675828374605645321d1401000000000000091e324657617685807261584a43363329282524232425282b343a474c5d6578867c665b49362614010000000c2035495a728777614c3827150000000000000000000000000000000000000f2035495a708579644e39240f0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495f74898181818181848379665e4d41312414070000000000000000000000000000000000000000000000000000001f34495e74897a797979797979797979797979797a7a7c7f828585807970655d4b46392a1c0c0000000000000000000d1d2a343f4b505d656f7b8581776b61594c473a33291e170b0300000000000000000000000000000e23394e637973604b39281600000000000000000000000000000000000000000c21364a5b637875604b36200b0000000000000000000000000111192731363c494d53575a5b5b5b5a57534d493c3531293a464c4b463929160300000000000000000000000004182a3a4a60728578624d38230d000000000000000000000000000003121b29333b484c5560666d75797e8286878685848383848586878783807c77726c6560544c483b352b1f170c000000000000000000000000000b1b2e3f4e606b80827462594b443733292826252627283236404c57616d808374604b43321f0f0000000000000c21364b6175867f6b6054463a30251f1712100f0e0f101319202a333f4b5a63788879635443301c080000000e23384d637885705947341a0a00000000000000000000000000000000000006192c3c556a7f7f69543f2a140000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e74897b7a7a7a7a7d847e6c6054443727190a000000000000000000000000000000000000000000000000000000172c41566c81818282828282828282828282828181807e7c7976706a635b4f4b3f32281b0c00000000000000000000000d181f2e373f4b505e65707b8581776b61584c463a33291e160b030000000000000000000000000c2135495b63605544311b0b0000000000000000000000000000000000000000071a2d3d4a5b63605645311d09000000000000000000000000000009151d202c35383e424546464645423e38352c201d1b2933363632291b0b000000000000000000000000000a1f334758687d806b5a4935200b000000000000000000000000000b171e3039464c59626a757c8288837f7a767271706f6e6e6f6f717276797d818687817a746a62594d493c33291c120400000000000000000000031628394b5d687e83736056483b31261f171311101112151d202f39464b626b80826d614f3d2c1a06000000000014293e53697e7e69614a4336291c13080400000000000000050c181f2e3c495a657b8673604b36261401000012273d52677d816c563a2a18000000000000000000000000000000000000000010263b50657b826e59442e190000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e74897465656565687381817260554437281a0a000000000000000000000000000000000000000000000000000014293e51626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6967646056554e4a3d372e1e160b0000000000000000000000000005111c232f38404c505e66707b8580766b61584c463932281e160a0200000000000000000000061a2c3d494e4b44372614000000000000000000000000000000000000000000000f1f2d3c494d4b453827150200000000000000000000000000000002080e192023292c2f303131302c292320190e080b171f21211e160b00000000000000000000000000071b2e3e4c61778575604b3c2b19060000000000000000000000000e1b2933414d57616b778087827b756e6a6561585c5a595959595a5c576164676c71777d848780776d625a4c473a30221200000000000000000000091e324657657b8575615545382b1d14090400000000000209121b2832434a6072837f695b49362112000000000011263b4e606969614f433025180c00000000000000000000000004111e2c3c4c5d6d827d685443301c080000152b40556a807d68533e281300000000000000000000000000000000000000000d22384d627786715c47311c0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e4f4f5055606c80827360554538281b0b000000000000000000000000000000000000000000000000000e22344451565757575757575757575757575757565554524f4b453839362d231c11030000000000000000000000000000000008111c232f38404c505e66707c8580766a61574b463932281e160a020000000000000000000f1f2c3539353126190900000000000000000000000000000000000000000000010f1e2c35383631271a0a00000000000000000000000000000000000000060c0e13171a1b1b1b1a17130d0c06000000040a0c0c0a0300000000000000000000000000000822374b5c6d827b665645321e0e0000000000000000000000010f1e2b39464c5f677680877e766d66605654504c473a45444344444539464b4f52575861686f777f8782786c61584d40301d0a000000000000000005182a3b4b6175877963574637271a0d01000000000000000000000b161e30435461768779634e402f1d09000000000b1f31424e53544f42321c13080000000000000000000000000000000e1e2f3f4d63788774604b35200b0000182d42576d827b66513b261100000000000000000000000000000000000000000b20364b607588735e49331e0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e493a37444b626b80827360564539291b0c000000000000000000000000000000000000000000000000051626343e41424242424242424242424242424241403f3c3936322824211a0f08000000000000000000000000000000000000000008111c232f38404c515e66737c857f766a61574b453932281d150a0200000000000000010f1a2123201d1409000000000000000000000000000000000000000000000000000e192123201d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182f404f647a836e5e4c3828160000000000000000000000010f202d3c4857616d7c877f75696158504b45383a37332a302f2e2e2f30283236393d3a474c5259626a757e878176675f4d39241000000000000000000b1f3448596b807f6a5b4a3929190a00000000000000000000000000031325364758667c85705e4c38241000000000021424313b3e3e3b322414000000000000000000000000000000000000112135495b6d827b65503b26100000192e43596e837a65503a25100000000000000000000000000000000000000000091d3145567489745e49341f0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e493426314451626a7f837460574639291c0c000000000000000000000000000000000000000000000000081622292c2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b292724211e160e0c0700000000000000000000000000000000000000000000000009121c232f38404c546067737c857f766960574b453831271d15090000000000000000060c0e0b0801000000000000000000000000000000000000000000000000000000060c0e0b090200000000000000000000000000000000000000000000040d131518161006000000000000000000000000000000000000000000000000000000001325364c5e6f8478634e402f1a0a00000000000000000000000f1f2d3e4a5a62768285786a61574c473a36312725211f171b1a19191a1a161e2124282a33373b484d5660697681887c67513c271200000000000000031628394c62778775604b3d2d1b0b0000000000000000000000000000000818293a4c5e70857b66513e2e1b070000000006141f262929271f140600000000000000000000000000000000000006192c3c51667b816c5738281603001a2f44596f847a654f3a251000000000000000000000000000000000000000000b20354a607589735e49341e0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e4934141d344450616a7e83756157473a2a1c0d000000000000000000000000000000000000000000000000050e14171717171717171717171717171717171614120f0b0903000000000000000000000000000000000000000000000000000000000009121d243036434a546067747c857f756960564b45383127191305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071521282b2d2b23180a0000000000000000000000000000000000000000000000000000071c304354667b826d5b4935221100000000000000000000000d1d2c3d4a5c6478867f73625a4b46393329201d15100c0a0400040404040003090c0f12171f212b3438454b57616b797b654f3a251000000000000000091e3245576b807e695645321f0f00000000000000000000000000000000000c1c304050657a85705c4a36220a0000000000020b111414120c0200000000000000000000000000000000000000000e21364b617686715645321e0900192e43596e837b66513c261100000000000000000000000000000000000000000c21364b617688725d48331d0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f162533434f60697e84756158473a2b1d0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091218253036434a546067747d857e756960564b44373123130000000000000000000000000000000002090b0f1315161818171614110d0b05000000000000000000000000000000000000000000000000000000000000000000001525333c40433f35281800000000000000000000000000000000000000000000000000000b20354a60738577624d3d2c1a030000000000000000000009192b3b495b647a877c6a6054493c32281f170c0902000000000000000000000000000000040a0d1820283239464b5b63655d4b37220e000000000000000b21364b60768776614b382816010000000000000000000000000000000000001223374b5d71867a644f3827150200000000000000000000000000000000000000000000000000000000000000000a1e324657718676604b36210b00172c41566c817f695439291603000000000000000000000000000000000000000e23394e637885705b45301b0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f07152532424f60687d84766159483b2b1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c253036434b556067747d857e756860554e42311808000000000000000000000000050b0d161e2124282a2c2d2e2c2b2a27221f180f0d080000000000000000000000000000000000000000000000000000000000000a1a33435055585346351d0d000000000000000000000000000000000000000000000000081b2e3f51677c816c5948341f0f000000000000000000000115273748596379877b675f4b43362c1e160b04000000000000000000000000000000000000000000050a161e29323d4a4e4f4b3f2e1b0800000000000004182a3a53687d816c5746321a0a00000000000000000000000000000000000000081c2e3f53687e826d5645311d09000000000000000000000000000000000000000000000000000000000000000003162939596e8478634e39230e0013283d53687d836e5746321e0a0000000000000000000000000000000000000012273c51677c816c57422c170000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f0907152432424e5f677d85776259483c2c1e0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c263037444b556068747d847d7468604e36261401000000000000000000060d1920222832363a3e4041424342403f3c37342a25221b100a0100000000000000000000000000000000000000000000000000000215273850616a6d64533b2a180500000000000000000000000000000000000000000000000d22374b5d708578624d3b2b190100000000000000000000081d3144556277877c655d4d403026180e0300000000000000000000000000000000000000000000000000020b161e2d36393a372e2110000000000000000a1f3347586f847a644f3928160000000000000000000000000000000000000000001121374c61778875604b36200b000000000000000000000000000000000000000000000000000000000000000000182d43586d827a644f3a250f000e23384d63788a76614b382816030000000000000000000000000000000000081c2e3f566b817d67523d27120000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f090006142431414d5e667c8577625a493c2c1f0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c263137444b556068747e847e685443301c0800000000000000000e19202b343838454b4f5355565758575554514c473b3a372e251e130600000000000000000000000000000000000000000000000000091d3145566a80826d5948341f0a0000000000000000000000000000000000000000000005192b3c4f647a836e5a49351d0d0000000000000000000008182d3e4b6073857d685e4c3f301c14080000000000000000000000000000000000000000000000000101000000030f1a212425221b1002000000000000000c22374c61778774604a35200b0000000000000000000000000000000000000000000a1f3347586f847b66513b2611000000000000000000000000000000000000000000000000000000000000000003182d42586d827a65503a2510000c2035495a72877e685645321e1000000000000000000000000000000000000d23374b5d728776614c37210c0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f09000006132330404d5e667b8578635a493d2d201002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e19202c353c494d5b636d79828274604b35200b00000000000008131c2c353c484d54566064686a6b6d6d6c6b69666259574f4b3e3930211a0e0000000000000000000000000000000000000000000000000b20364b6075878777624c382815020000000000000000000000000000000000000000000b2035485a6e837a654f3c2c1900000000000000000000001325364a5c6b80826d604e402f21120100000003090b0f1111100c0a030000000000000002090b1115171614100b0801070c0e100e0800000000000000000012273c52677c826c5443301c0700000000000000000000000000000000000000000004172a3a54697e816c573a291704000000000000000000000000000000000000000000000000000000000000000417293a596f8479644f3a240f0006192c3c556a7f8875604b3e2d1d0d0000000000000000000000000000000d1d2f4050657a836e5847331f0a0000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f0900000005132230404c5d657b8678635b4a3e2e201103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d19202b353c494d5a636d788282786d605443301c0800000000000a1825303c494d5a62697076797d7f81828381807f7c77716c645c524d41352c1f1103000000000000000000000000000000000000000000081c2e3f52677d827f806a5645321d090000000000000000000000000000000000000000000d22384d627886715d4b371e0e00000000000000000000071c30435464798775604b42312111030000050a161e2125272725211e170b08020000000a161e21262a2c2c2925201d14090400000000000000000000000002152737576c817c675236251300000000000000000000000000000000000000000000000f24394f647986715847331f0a000000000000000000000000000000000000000000000000000000000000000a1f334758718577624c37220d00000e23384d6278887f6a5c4a3b2b1d10030000000000000000000000000c1a2b3b4c5e708579634e3a2917040000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f09000000000412222f3f4b5d657a8679645c4b3e2e211103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d18202b343c484d5a626d788283796d635b4b4336261401000000000a1a2836434a5a636e777f8684827e7b797877797a7c808486827a71675f4e493d2e21120400000000000000000000000000000000000000000e23374b5d71867a778775604b3620110000000000000000000000000000000000000000071a2d3e556a7f7e69543f2e1b00000000000000000000000b20354a6072857b6657453224130300000d18202832363a3c3c3a363329201d150905131a2832363b3f41413f3a3531261f170c0000000000000000000000081d314455718677624d38220d00000000000000000000000000000000000000000000000b20354b60758976614c37210c000000000000000000000000000000000000000000000000000000000000011426374c61768873594834200b00000b2035495a6e83857a6459483b2e1e160b03000000000000000007101d2a384859657b836e5b4a361c0c000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000412212f3f4b5c6479867a645c4b3f2f211204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d181f2b343c484d5a626d788283796e635b4e493d3026180800000000021628384554606a7883857e77706c68656463626365676b6f757c83867c6f635b4b3f2f22120000000000000000000000000000000000000005192b3c4f657a85706d827d68523f2e1c08000000000000000000000000000000000000000d21364a5c718677624d37221000000000000000000000091c2f4052677c846e5e4c392816060003111d2b3438454b4f51514f4c46393631271914233138454b51555656544f4b443733291c12040000000000000000000b20364b607488735a4834200b0000000000000000000000000000000000000000000000081d31445570857a654f3a2510000000000000000000000000000000000000000000000000000000000004121d314455677d826d583b2b1805000006192b3c4f647a83847762594a3e32291e160e0b0902040a0c101b222e3b475662778577624d3d2d1a00000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000311212e3e4a5b6379867a655d4c402f221305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c181f2a343b484d5a626c788283796e645c4e4a3d352c1c14080000000000091e324556607280867c706961595753504f4e4d4e5051565660666e78838479655d4c402f1e0e0000000000000000000000000000000000000b2035485a6e837c67647986715d4b37230e000000000000000000000000000000000000000f24394e6479846f594834200b000000000000000000000f24384c5e718679644f402f1b0a000111212e3b484d5660646666656157524b44372e2431414e5660666a6c6b696560554c463a3022150700000000000000000e23394e637985705b3c2b1905000000000000000000000000000000000000000000000001142637576d827d68533e2813000000000000000000000000000000000000000000000000000000040c171f303f4b6074867a644f3a240f000000000e22374b5c6e837e8478645c4b4639322823201d15181f22252e363f4b596174847b655948341f0f00000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000210202d3d4a5b6378867b655e4c4030231305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c181f2a343b484c59626c7881847a6e645c4e4a3d362d211a0f0100000000000a1d30404b6074828275665e534c473b3e3b3a3938393a3c38454b515b636e7b877b665e4c3c2b190600000000000000000000000000000000031628394d62788774605c70857a65503c2b1906000000000000000000000000000000000005182a3b566b807d68533b2b18050000000000000000000417293a51667b846f5c4a36221200000f1f2e3f4b59626d767a7c7c7a766f6860554b3f31424e5f68757b7f81817e7a756b61584d40332616080000000000000011273c51667c826d58422d1800000000000000000000000000000000000000000000000000142a3f54697f816b56412c1600000000000000000000000000000000000000000000000000070c181f2933414d5d697e826c5c4a36220d00000000081b2e3e4e63798479857a6b61574b4538393632282a33373a3e4a4f5d6577847d675d4b3b2b180100000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000002101f2d3d495a6278857c665e4d4131231406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c171f2a333b474c59626c7781847a6f645c4f4a3e362d211a0f06000000000000001024394d5f6d82817260574d4037342a29262423222425272832363c494d5d6578857c665a4835201200000000000000000000000000000000091e3246576b807f695551667c836e5a4835200b00000000000000000000000000000000000b1f344859718677624d38220d000000000000000000000a1f3346586e837b65503e2d1b0400071a2d3d4b5d65778286827f7e8084847d74655d4e424e60687d86807b797a7c81858076675f50443326160500000000000014293e53697e806b55402b160000000000000000000000000000000000000000000000000012273d52677c826e58432e1900000000000000000000000000000000000000000000060c0f1a212a333a464c5f677b8675614b3e2d1b070000000000102135495b6c817e77848076686056524e4b45383a474c50555c646e7a857b675f4d3f2e1d0d0000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000010f1f2c3c49596277857c675f4e4131241407000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c171f2a333a474c59616b7781847a6f655d4f4b3e362d211a0f070000000000000000071a2d3d51677c85746054453930221f1813100f0e0d0e1012151d202c353f4b5a62778778624d402f1c090000000000000000000000000000001325364b61768876614c4b60748778624d39281603000000000000000000000000000000000d22374c627786725a4835200b000000000000000000000c21364c61768774604b35201000000c21364a5b657b877d746c6a696b6f767e857b68604e59687e83756b666464676c747c857c6b625044332313000000000000152b40556a807e69543e29140000000000000000000000000000000000000000000000000010263b50657b84705a45301b00000000000000000000000000000000000000060c0e1a21232d363a474c58616c7d8678625746322010000000000000061a2c3d4b617586786e7d857e766d676360565b5b5861656a707a848278645d4d41302111000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000010f1e2c3b48596276857d68604e4232251507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b171e29333a474c58616b7781857b6f655d4f4b3f372e221b1007000000000000000000000d21364a5c72877964564536281b120b04000000000000000002090e19212f3c4859647a85705e4c38240f0000000000000000000000000000071c304354687e816c58474455697e816b5746321e080000000000000000000000000000000012273d52677c816c573c2b19050000000000000000000013283d53687d816b5443301c0800071b2e3e4e6379887a68605455545657616977837e685f617786756157514f4f525460677582806b625041301e0e0000000000172d42576c827c67523c2712000000000000000000000000000000000000000000000000000e24394e637987715c47321c00000000000000000000000000000000050b0e1920232c35383d4a4e58616a76818577625a4839281602000000000000000f1e324657667b857368757d84827d787570707070777a7f8482786d62594b3f30231303000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000e1d2b3b48586176847e68604f43332516000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d29333a464c58616b7780857b70665e504b3f372e221b10070000000000000000000000000f24394e647985705c4a3827180a000000000000000000000000000006111e2b3b4b5c6d827b66513b261100000000000000000000000000000b20354a60738678634e3a374c61768876614b36251300000000000000000000000000000002152738576d827b66513c26110000000000000000000005192b3c586e837a655036261401000d22374b5c70857d675c4a43363f39464b596172827d68697e7f695746393a3a36434b57616d81806b5f4d3c2b190500000000182e43586d837b66513b2611000000000000000000000000000000000000000000000000000d23384d627888735d48331e0000000000000000000000000000070d1820222c35383d494e555b636c777f877e736259483c2b1b0b0000000000000000031629394c5e6c817f6960686f787d81848485858584807c766d635b4d483b2e20130500000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000d1d2a3a47586175847e69615043341c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919273139464c58616a7680857c70665e504c40372e221b1008000000000000000000000000000013283d53687d816b563e2d1a0a00000000000000000000000000000000000e1d2e3e4f647a836e5836261401000000000000000000000000061a2c3d50667b846f5b49353346586c817e685443301c070000000000000000000000000000091d314556718677624d37220d000000000000000000000b2034485a728776604b36210b00000f243a4f647a86715f4d3e30252929323b47546074847a6e8379644f39292425263039464b626e827d675a4835201000000000192e43596e837a65503b2510000000000000000000000000000000000000000000000000000d22374c627788735e49331e000000000000000000000000060f1a212b34373c494d555b636a707982887f77696054483b2b1e0e000000000000000000000b1b2f404b6175867a64575a62686c6f707070706f6b6661574e493d342b1d10020000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000d1c2a3a46576174837f6a6151443025180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737444b57616a7680857c73665e514c40382f231c110800000000000000000000000000000000152a3f546a7f7f6a543f2a15000000000000000000000000000000000000001020354b607587725443301c080000000000000000000000000c2135495b6f847b66503d2c293a4e63788773604a35200f00000000000000000000000000000b20364b60758873594834200b000000000000000000000d22384d627785705745321e090001162b41566b807e695441301c1314161e2a364455627885748476614c37210f0f141c2832444b61768778624d3e2d1b070000001a2f44596f847a654f3a2510000000000000000000000000000000000000000000000000000c21374c617689745e49341f00000000000000000000010f1a212d363b484c545a636a71787f86837c756a61584b43362a1d0e000000000000000000000000121e324657647a8675614b4d53575a5b5b5b5b5956514b4639352c20190d00000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000c1b293946566074837f6b624a43362618080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606a767f857d736760544d40382f231c110800000000000000000000000000000000000013293e53687e806b563a291704000000000000000000000000000000000000081d314455728675604b35200b00000000000000000000000417293a4e63788773604a35202135495b6f847b66503d2c1a06000000000000000000000000000f24394e6479846f5a3b2b18050000000000000000000011263b50667b816c573928160300051b30455a708579644f3a24130000030c182737485a697e7f8475604b36200b00010b161e334657677c836e5c4a36220b0000001a2f445a6f847a644f3a250f000000000000000000000000000000000000000000000000000c21364c617689745f4a341f00000000000000000001151f2c363d4a4e59626a71787f86857d766e6760564c473a3026180d00000000000000000000000000031628394a5c697e826d5f4e3d42454546464644413c363229211a0f050000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000b1b29384556607382806c60544336261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60747f867d746760544a433630241d1209000000000000000000000000000000000000000010253a50657a846f5847331f12020000000000000000000000000000000209101e324556728674604a35200b00000000000000000000000a1f3346586c817e695443301c1a2c3d50667b846f5b4935210c0000000000000000000000000012283d52677d806b56412b16000000000000000000000013293e53687e7f69543f2a140000081d33485d728776614c37210c0000000009192b3c4b6074868476614b36210c000000031729394d5f708579644e392917030000192f44596e847a65503a2510000000000000000000000000000000000000000000000000000c22374c617789735e49341e000000000000000009151d323d494e5b636d777f86867f7770686158514b4538332a1c14080000000000000000000000000000000b1b2d3e4f616e837d685b493828303030302f2b27211e160b0600000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000b1a283845556072818172605443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667c7d746860554b43363025181209000000000000000000000000000000000000000000000b20354b60748876614c402f1d150a010005050002090b0c0e0f111315151d202e3c4b607687725443301c0700000000000000000000011426374c61768876614b3625130f20354a60738778634e3a291704000000000000000000000000152b40556a807e68533e29130000000000000000000000162c41566b817c67513c27120000091e34495e738975604b35200b00000000000d1d314455697e8a78634d38230e000000000b1b304151677c826d5746331e0a0000192e43586e837b65503b2610000000000000000000000000000000000000000000000000000d22374d627788735e48331e0000000000000009192731434f5b636f798287807871696259534c473a3632281f180c010000000000000000000000000000000000102032424c61768679635645321e1b1b1b1a16110c0a03000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000a1a273744546072818273604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24384c5e666860554b443730261c1308000000000000000000000000000000000000000000000000081d3144556a7f816c5e4c4031271d14181a1a1a161e2122232526282a2832363e4b5a677c826c573625130000000000000000000000081d314455697f816b5746321808071c304354687e816c5847331f09000000000000000000000002182d42576d827b66513b26110000000000000000000000182e43586d8379644f3a240f0000091e33485e738876604b36210b0000000000021527374b61768a7b66503b261100000000001320354b60758776614c36210c0000182d43586d827b66513c2611000000000000000000000000000000000000000000000000000e23384d637888725d48331d00000000000001152737444b616a7984857c746a635b544d483b373329201d150a040000000000000000000000000000000000000002141f334758647a8675604b41301e0e00040100000000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a05000000000000000000000000000000000000000000162c41566b816b56412c1601000000000000000000000000000000000000000a1927364354606c7c7b65503b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d2f404c51534b443731261c14080000000000000000000000000000000000000000000000000000011527374b6074857c665e4b453831262d2f2f2f28323637383a3c3e3f38454b515c64788778624d38230d00000000000000000000000b20354b60748778624d39281600001325364b61768876614c3726140100000000000000000000041a2f44596f8479644e39240f0000000000000000000000192f44596e8478634e39230e0000071d32475c728777624c37220d000000000000091e3346576d827f69543f2a140000000000081d3144556b807d67523d28120000172c41566c817d68523d2813000000000000000000000000000000000000000000000000000f243a4f647986715b46311c000000000000091d314455606d7f877d706760554e493d37342b211f170c0902000000000000000000000000000000000000000000000417293a4b5d6a7f816c5f4d3c2c1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a0500000000000000000000000000000000000000000014293d51626b62513d291400000000000000000000000000000000000000000009182636434a5f67655d4b37230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f383b3e3531271d14090100000000000000000000000000000000000000000000000000000000091d3245566278857c6a60564b44374244444538454b4c4d4f515355575660666e7a867b655a4935200c00000000000000000000071b2d3e51667c836e5a48351b0b0000081e3246576b807f695544311d0800000000000000000000061c31465b718676614c37210c00000000000000000000001a2f455a6f8478624d38230d0000051a2f445a6f847a65503a25100000000000000317293951667b836e593d2c1a06000000000115273750657a826d583a29170400152a3f546a7f7f6a543f2a150000000000000000000000000000000000000000000000000011263c51667b846f5a442f1a000000000009192f404b6073828476675f514b4437352c2220190d0a0400000000000000000000000000000000000000000000000000000c1c2e3f4a6072847d675a49382715020000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000000e2234445156514434220e0000000000000000000000000000000000000000000008182530414d52504b3f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d242628201d15090100000000000000000000000000000000000000000000000000000000000002152838485a627784807467605554575a5a5a5a566061636466686a6c70757b838479655d4b3c2c1906000000000000000000000d22364a5c70857a65503c2b19000000031628394d62788774604b35201000000000000000000000081d32485d7287725847331f0a00000000000000000000001b30465b708577614c37220c000001162b40566b807e69543a2917040000000000000c21364b617687725b4936210c00000000000b20364b607587725846331f0a0013283d52687d816b56412c160000000000000000000000000000000000000000000000000013283d53687d826d58422d1800000000011426374c5e6c81837461584d41353126211a0f0b05000000000000000000000000000000000000000000000000000000000000101c30435461778678635645311d120000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a05000000000000000000000000000000000000000000051626343d413d34261605000000000000000000000000000000000000000000000008131c30393c3b372f21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f11130b08010000000000000000000000000000000000000000000000000000000000000000000a1a2b3c485962737e857d746b696d6f6f6f6f6f7677787a7b7d7f81848580796e635b4b3f2e1e0e0000000000000000000004182a3b4e647986715d4b371e0e000000000b2035485a6e837c67513e2d1b07000000000000000000081d32485d7287725d3a2a170400000000000000000000001b30455a708477624c37220d00000011263b51667b846f5846331f08000000000000091e3246576f8478634e39230e0000000000081d314455718676614c36210c0010253b50657b836e5937271502000000000000000000000000000000000000000000000000162b40556b807f6a55402a1500000000081d314455667c86756156473a30201d140906000000000000000000000000000000000000000000000000000000000000000000001325364759657b8574604b40301e0e00000000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a0500000000000000000000000000000000000000000000081622292c292216080000000000000000000000000000000000000000000000000000131e252725231c1103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3b48546069757e84807f828484848584848382807e7d7b7975706b645c4e493d2e211100000000000000000000000b1f3447596d827d68523f2e1c000000000005192b3c50657a85705c4a36220d000000000000000000011426365d7287725d48321d0000000000000000000000001a2f44596f8478624d38230d0000000b20364b60758876614c36261401000000000003162839556a7f7e6953372614010000000002152737586e8379644f3a240f000d22374c627787725544311d0800000000000000000000000000000000000000000000000417293a596e837c67513c2712000000000b20354b60748679645746382a1c13080100000000000000000000000000000000000000000000000000000000000000000000000008182a3b4b5d6a80816c5e4c3c2b1909000000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a050000000000000000000000000000000000000000000000050e1416140e05000000000000000000000000000000000000000000000000000000010a1012100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d314250616a7a82857f7b77756f6f6f6f6f6e6c6b696766636056564f4a3e352c1f110300000000000000000000021527384c61778775604b3620110000000000000e23374b5d718679644f3b2a18050000000000000000081c3043547287725d47321d080000000000000000000000192e43586e8379644f39240f000000091d3245566d827e695443301c0c0000000000000f253a4f647a836e5544311d080000000000162c41566b817b66513c2611000b1f344859738875604b36200b00000000000000000000000000000000000000000000000a1f334658718779634e39240e0000000011263c51667b826d5c4a39281a0c000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d2f3f4b6073847c665a48372715010000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21201c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263a4e606a8084796f6a666260555a5a5a595857555452514e4b453839362d211a0f010000000000000000000000091d3145566a7f806a5645321d09000000000000081c2e3f52687d826d5948341f0a00000000000000000b20354b607587725d47321d080000000000000000000000172c41576c817b66513b2611000000021528384e64798773604b3a2a180800000000000b20354b60758775604b35200b0000000000152a3f546a7f7d68523d28130005182a3b5a6f8479644f3a240f00000000000000000000000000000000000000000000000c21364c61768975604b35200b00000002172d42576c827b65503e2d1b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d31445562778778625544311d110000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f1b0b080100000000000000000000000000000000000000000000000000000000000000000a1a283236353025180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215273753687e8272635b54504d4b44374545444342403f3d3b3936322824221b1006000000000000000000000000000b20364b60758777624c38281502000000000000001120364b60758777624c3828150200000000000000081c3043547287725d47321d08000000000000000000000014293e54697e7e68533e2913000000000a21364a5c6f847d6858473625130000000000081d3144556f8479644f3a240f000000000014293f54697e7e68533e29130000152a40556a7f7e6954392917030000000000000000000000000000000000000000000011263b51667b846f5544311d08000000021527385c728776604b36210f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374859667c8573604b402f1d0d00000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222530201d140900000000000000000000000000000000000000000000000000000000000003162838454b4a433625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445571867761544a3d3b3735312730302f2e2d2b29282624201d150f0d070000000000000000000000000000081b2e3f52677d826d5948341a0a0000000000000000091d3245566a80806a5645321d0900000000000000011426365d7287725d48321d00000000000000000000000011263b51667b816c5738281502000000071a2d3e4d63788876615443301c13080000000114263754697e7f6a54382815020000000014293e54697e7e68533e2913000010253a4f657a846f5746331e0a000000000000000000000000000000000000000000071b2d3e566b817f6a5437271501000000091d3145567186715645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3b4c5e6b80806b5e4c3b2b1808000000000000000000000000000000000000000000000000000000000000000000000f24394f6479856f5a45301a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a4635312619090000000000000000000000000000000000000000000000000000000000091e32455660605443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607586725847362d2622201d151a1a1a1917161412110e0b090200000000000000000000000000000000000e22374b5d718679644f3b2b18000000000000000000021528384c62778775604b36201100000000000000001d32485d7287725d3928160300000000000000000000000d22384d627885705645321d09000000000f2035495a6a7f8372604a423025180c0300000e24394e6379846f5645321d0900000000152a3f556a7f7d67523d271200000b20354b60758776614b36210f0000000000000000000000000000000000000000000d22364a5c728778634e39230e000000000b20364b607586715c382816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f404b6074857b6659483626140100000000000000000000000000000000080e1010101010101010101010101010101024394f6479856f5a45301a1010101010101010101010101010100c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b4f5b4b4437261401000000000000000000000000000000000000000000000000000000000b21364b607672604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607586715948342019202326292a292826221f180c0a040000000000000000000000000000000000000005192b3c4f657a85705c4a361d0d000000000000000000000a1f3448596d827d68523f2e1c08000000000000081d32485d7287725746321e0900000000000000000000000b2035485a728775604b36200b0000000006192c3c4a6072837f6a604a43362a1e160b090b20354a60748775604b36200b00000001162b40566b807b66513b26110000081d3144556c827c67523d2c1a0600000000000000000000000000000000000000031628394e647986715b4935210c000000000b20364b607586715c3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121d31445562788677625443301c11000000000000000000000000000002101b222526262626262626262626262626262626394f6479856f5a453026262626262626262626262626262626211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5d6470605544311d09000000000000000000000000000000000000000000000000000000001c32475c718678624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455708577624c40302c35383c3e3f3f3d3b37342a211f170c0200000000000000000000000000000000000b2035485a6e837c67523e2d1b000000000000000000000005182a3b4f647986715d4b37230e000000000000071c31475c718676614b36210c000000000000000000000005192b3c586d837b665037271502000000000e1c3043546176857e6a6054473b3228201d151c3043546e837a65503a251000000002182d42576d827a644f3a250f0000011426374f647a846f5b4935210f00000000000000000000000000000000000000091e3246576c817f6a543d2c1a0600000000081d3144557287725847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737485a667c8473604b3f2e1c0c0000000000000000000000000010212e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b4f6479856f5a453b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3733291c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8573604b372715010000000000000000000000000000000000000000000000000000001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215273751667b816c5f4d403c494d5153545452504c473a37332a1d1509000000000000000000000000000000031628394d62788774604b3520100000000000000000000000000d22364a5c70857a654f3c2b19050000000000051a2f455a6f8478634e38230e00000000000000000000000012283d52677d826d5544311d08000000000013253646586176857f7261594b45393632282d253653687d806b5539291703000005182b3b5a708577624d37220d0000000922374b5d718678634e3d2c18080000000000000000000000000000000000031729394b61768877614c37220f0000000000021527375b718677614c37220f00000000000000000000000000000000020b11130e0c0700000000000000000000000000000000000000000000000009192b3c4d5e6c817f6a5d4b3a2a18080000000000000000000000081b2e3f4b4f5050505050505050505050505050505050506479856f5a5050505050505050505050505050505050504c473a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5d6f847d675544311d0a0000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000924384c5e6e837c675e4e565a636668696967666159554c473a3127190d0000000000000000000000000000091e3245576b807f6a5544311d08000000000000000000000000071b2d3e51677c836e5a4835200b000000000003182d43586d827b65503b26100000000000000000000000000c21364b61768875604b36201000000000000818293a465861758283776a60574f4b45384241414d637885705746331e0a00000b20344859718671594834200b000000081b2e3f52677d826d5b4936251300000000000000000000000000000000000d1e334657697e826d5847331f0a000000000000162b40566b807d67523d2d1a07000000000000000000000000000001141f262824211a0f0100000000000000000000000000000000000000000000000e1e30404b6074857b65594736251300000000000000000000000e22374b5d656565656565656565656565656565656565656579846f65656565656565656565656565656565656565615847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4f647a8774604b3827150200000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d2f404b6075847c6c646c71787b7e7f7e7d7b77706a61584b44372b1d0d000000000000000000000000000b21364b60758877614c37271501000000000000000000000000001020354b60748778624d392816030000000001162b40566b807d68523d28130000000000000000000000000a1e3346576e837b66503e2e1b0700000000000b1b293a4657606d7c877f766c65605659575656585a728776614b36210c00000d22374c6277846f593b2b1905000000001020354b60748679635443301c100100000000000000000000000000000d1d2e3f4c61768778624d3a2a180400000000000010253a4f657a836e5b4a3621140400000000000000000000000008141c313a3e39362d1f0f000000000000000000000000000000000000000000000000121d32455663798677615443301c070000000000000000000010253a4f657a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7e857b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000001022364a5c6e847d685645311d0a00000000000000000000000000000000000000000000000000001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e32455761758281798186837f7d7c7c7d7f838580776b6055483b2b1c0c0000000000000000000000091c2f4053687e826c58473319090000000000000000000000000000081d3144556a7f806b5746321e08000000000013283e53687d7f6a55402a150000000000000000000000000317293950657a846f5c4b3722110000000000000b1b2939454b5f67757f86817a75706e6c6b6c6d6f74837b66513b2611000316283952677c806a55402b150000000000081d314455667b8472604a3e2e1f10020000000000000000000000000d1c2b3b4b5d6c81806b5a48341c0c000000000000000b20354a60738679634e4232221508000000000000000000010c182630424e534e4a3d2d1a07000000000000000000000000000000000000000000000002152838495b677d8473604a35200b00000000000000000000162b40556b80828282828282828282828282828282828282828182818282828282828282828282828282828282828179634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4e64798774604b38281602000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3d4a5c647686857c756e6a686666686a6e757c8480746259483a291808000000000000000000000e23384c5e718679634e3a2a17000000000000000000000000000000011426374c61768876614b362513000000000010253a4f657a836e593a2917040000000000000000000000000b23374b5d71867a644f3f2e1b0a0000000000000b1b2832414d56606a747b818585838280818384847f76614c37220c00091e3245576d8279644e39240f0000000000011426374c5e6d827e685c4b3d2d20130700000000000000000006111d2a3a4859657b8674604b3c2b190000000000000000071c304354667b836e604f4032221b100a0400020000070b141c2936434b6068635b4a36210c0000000000000000000000000000000000000000000000000a1a2c3c4d5f697e79644e39240f0000000000000000000014283d50626b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c635b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000001021364a5c6e837e685645321e0a000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394a5b647a877d71666055555351515355556067707e8577625846362513000000000000000000061a2c3d50657b846f5b4a361c0c00000000000000000000000000000000091f3347586c827e685443301c07000000000c21364c617687725846331f0a000000000000000000000000081c2f3f51677c846e5d4b392816030000000000000a161e3038454b5460656c707677797a7977756f69615847331f0a011426364b607686705c4a36220d00000000000009192f404c6176867a645b4a3e31221b100b05000200040a0e19202f3b47586277877a645645321d0d0000000000000000001325364c5e6e837e695e4f43372e211f17181717131c2026303a4754606c7d79634e39240e000000000000000000000000000000000000000000000000000e1e30414f6169645c4a36210d000000000000000000000d213344505557575757575757575757575757575757575757575757575757575757575757575757575757575757574e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4e63798875604b392816030000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3246576379877a6860514b44373d3c3c3e37444b5160697b8576615443301c0800000000000000000c2135495b6f847b66513d2d1a000000000000000000000000000000000004172a3a4e63798773604a35200b000000000a1f334658728776614c36210c000000000000000000000000001124394d5f70857a655745321e110100000000000003131a283236434b5057566062646564626054544c473a2a1804081c304354687d7f6a553e2d1b0700000000000000121f33475863798679645c4e42362e222019181718171f212b353f4b596276857d675c4a3828160000000000000000000008182f404b6074857c6a614f4b3e3633292d2c2d25303536434b586172818575614b36210c0000000000000000000000000000000000000000000000000000132332434f544e4a3d2d1a0700000000000000000000041626333d40424242424242424242424242424242424242424242424242424242424242424242424242424242424238352c1f0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f21364a5b6d837e695745321e0b0000000000000000000000000000000000000000000000001c32475c718777624d37220d01080b0e1113141413100d0b050000000000000000000000000000000000000000000000000000000000000000000417293a4b6175877c665c4e4235312628272728263135424e5d677c8472604a36261401000000000000000e23384e63788774604b35200f0000000000000000000000000000000000000c2136495b6f847b66503b2611000000000417293a596e837a65503a2510000000000000000000000000000a1d30414f647a8675604b402f1f0f00000000000000000a161e2630353b38454b4d4e4f4f4d4a433637332a1c0c0417293a4b60748577624d37221000000000000000000417293a495b647a877a68604f4a3e37342b2d2c2d2933363c484d5d6577857e685f4d3e2d1a0a0000000000000000000000111e3245566177847f6f645c524c463a42414236434a4e54606776838274615746321e090000000000000000000000000000000000000000000000000000051424323b3f39362d1f0f000000000000000000000000081621282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d23211a0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4e63788875604b3929160300000000000000000000000000000000000000000000001c32475c718777624d37220d141c20232728292928262220190f0d070000000000000000000000000000000000000000000000000000000000000a1f3346586b80816c5e4c3e31201d1413111113141d20313f4d5f6d827c675443301c0800000000000000172c41576c817e695443301c08000000000000000000000000000000000000061a2c3d50657c836f5a442f1a050000000014293e53697e7f6a5539291703000000000000000000000000001222364a5c6c81816b5e4c3d2d1d0e00000000000000000308141c202628323638393a3937353025221f180c02101f334658677d806b594834200b0000000000000000000c1c2c3d4a5c6479867d70645c534d483b4241423a464c515a626d7b877c68604e41302010000000000000000000000000021628384759617481847a6f67615859575757585460646a747d867d6d6056463928160300000000000000000000000000000000000000000000000000000006141f272924211a0f0100000000000000000000000000040d141617171717171717171717171717171717171717171717171717171717171717171717171717171717170e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2135495b6d827f695746321e0b00000000000000000000000000000000000000000000001c32475c718777624d372223263035383c3e3f3e3d3b37342b24211a0f06000000000000000000000000000000000000000000000000000000000c21364c61768877624c402f20130801000000000108142130414d63788774604b35200b000000000000000e23394e637973604b36261401000000000000000000000000000000000000000f23384c5e6579634e39230e00000000000e23394e637885705746331e0a00000000000000000000000000071b2d3e4b6074867b665b4a3b2b1e0f01000000000000000001080b10161e212224252422201c130c0a0402102030414c61768677614c3b2b1805000000000000000000000f1f2e3e4a5b637582847a706862595a585757595861676e78828578675f4e4231231202000000000000000000000000000a1a2a3b4755606c7983847c76706f6d6c6c6d7075797f86817768604b4538281b0b0000000000000000000000000000000000000000000000000000000000030c12140f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4d62788876614b3a291704000000000000000000000000000000000000000000001c32475c718777624d372e3736434b4e5153545453504d483b39362d211a0f00000000000000000000000000000000000000000000000000000013283d52687d836d594834221202000000000000000003122135495b6f847a644f3a240f000000000000000c2135495b636054433018080000000000000000000000000000000000000000091c2f404c5b635b4a36210c00000000000c2136495b738876614c36210c0000000000000000000000000000101d324556637987796359483c2d1f1204000000000000000000000002090b0d0f100f0d0b070000000212202e3e4d5f6c827d685847331d0d00000000000000000000000110202e3d4a57616d7983857d77716f6d6c6d6e71767c83857c70635a4d40312413050000000000000000000000000000000c1d2a37444b5b636e787f858584828182838586827d766b61594e4232281a0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e101a1711070000000000000000000000000000000000000000000000000000000000000000000000000e2035495a6c827f6a5846331f0c000000000000000000000000000000000000000000001c32475c718777624d373f4b505460636668696968656259574e4a3d352c1c130800000000000000000000000000000000000000000000000003182e43586d837d67523b2a18040000000000000000000006192c3c54697e806a55402b1500000000000000061a2c3d494e4b433626140000000000000000000000000000000000000000000011212f3d4a4e4a3d2d1a070000000000061a2c3d586d827c6651392816030000000000000000000000000002152838495b657b8777625a4a3d301f170b000000000000000000000000000000000000000000000a151d303e4b5c677d826d604e3a2a170000000000000000000000000002101f2d39464b5c646e777e848584828182838585807970665e4d493c3022130600000000000000000000000000000000000c1927313d4a4e5b636a6f70777879797875716d6761574c473b311e160a0000000000000000000000000000000000000000000000000000000000020e171d1f1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a17130f0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000003101b22252f2c24190b000000000000000000000000000000000000000000000000000000000000000000000006192c3c4d62788876614c3a2917040000000000000000000000000000000000000000001c32475c718777624d4a4e5d656d75787c7d7e7e7d7b77706c645c4e493d302518090000000000000000000000000000000000000000000000071c32475c718678624d38230d0000000000000000000000000f253a4f647a846f5a442f1a05000000000000000f1f2c353935302618080000000000000000000000000000000000000000000003111f2d3639362d1f0f0000000000000011263b50667b826d5745321e0900000000000000000000000000000a1a2c3d4b5d677d8678635b4c4033291c130800000000000000000000000000000000000008111a2731404c5c647a8576614c42311c0c0000000000000000000000000000010f1b29323e4a4e5962696f71767879787775706a645c514d40352c1e12040000000000000000000000000000000000000009151d2d363d494e555a596263646362605658524b4639342a1d130200000000000000000000000000000000000000000000000000000000000212202b3234313131313131313131313131313131313131313131312f2d2924201c140b070000000000000000000000000000000000000000000000000000000000000000000000000000000010212e373a44403729190700000000000000000000000000000000000000000000000000000000000000000000000e2034485a6c817f6a5847331f0c0000000000000000000000000000000000000000001c32475c718777624d5c646f7a8285827f7d7c7c7d80838681796e635b4a433627190900000000000000000000000000000000000000000000091f34495e748976604b36210b0000000000000000000000000d23384d627886715b46311c0600000000000000010f1a2123201c1408000000000000000000000000000000000000000000000000010f1a2123211a0f01000000000000000b20354b60758776604b36210e0000000000000000000000000000000f1f2f3f4d5f677c8779665e4c463a30251c130806000000000000000000000000060c101b222e38454b5e667b857762574633241300000000000000000000000000000000000b161e2d363b484d545a5861636463626054554e4a3e393020190e00000000000000000000000000000000000000000000020f1a212c3538403b474c4e4f4e4d4b45383d3632291f180c000000000000000000000000000000000000000000000000000000000000000e20303d46494646464646464646464646464646464646464646464645423e39353026201c130802000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b4f595447372411000000000000000000000000000000000000000000000000000000000000000000000005192b3c4d62778876614c3a2a180400000000000000000000000000000000000000001c32475c71877762616979848179716d6a686767686a6e747a82847969605444372718080000000000000000000000000000000000000000000a1f34495f748a745645321e090000000000000000000000000c21364c617688725d48331d08000000000000000000060c0e0b0801000000000000000000000000000000000000000000000000000000070c0e0c07000000000000000000081d3144556c817c67523c2b1906000000000000000000000000000001112130414d5e667b877c6d61584a43363025211a130f0c0a030001080b0d0f131920232e373f4b56606b7c857762594839291706000000000000000000000000000000000000030f1a212b34373e3a474c4e4f4e4d4a433639362d241d120600000000000000000000000000000000000000000000000000070f1a21232a2a34373939393836322828211e160b040000000000000000000000000000000000000000000000000000000000000000172b3d4e5a5f5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a57534e4b43363530251d150a00000000000000000000000000000000000000000000000000000000000000000000000e22374b5d656f6554402c170300000000000000000000000000000000000000000000000000000000000000000000000d203448596b81806b5847331f0d00000000000000000000000000000000000000001c32475c718777626c7f83786c635b585452515253555460656d79847f72605544362513000000000000000000000000000000000000000000091e34495e738975604b35200b0000000000000000000000000d22374d627786715c47321c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374f647a846f5a4835200b00000000000000000000000000000003132330404c5d65778582766760544a4336352c2824211e171b141c202225292c35383f4b4f5d65748082756259483b2a1b0b000000000000000000000000000000000000000000070d192022292a33373839393735302524211a0f090000000000000000000000000000000000000000000000000000000000060c0e15181f2223242423201d15120c0a03000000000000000000000000000000000000000000000000000000000000000000001d32465a6c74707070707070707070707070707070707070707070706f6c68646054504a433631271a110300000000000000000000000000000000000000000000000000000000000000000010253a4f657b836f59442f1a04000000000000000000000000000000000000000000000000000000000000000000000005182b3b4c61778877614c3b2a1805000000000000000000000000000000000000001c32475c7187776c81806f625a4e4a3d3f3d3c3c3d36434a4f5b6373808273605443301c100000000000000000000000000000000000000000071d32475c728777624c37220d0000000000000000000000000f24394e6479856f5a45301a050000000000000000080e101c0c0a03000000000000000000000000000000000000000000090f111c0b090300000000000000000000000000000922374b5c708578624d39291703000000000000000000000000000000051322303f4b5962737f867c736660544e493d3e3936332931263035373a3e3c494d545d656e7a857d6d6157473b2a1d0d000000000000000000000000000000000000000000000000050b0d14171f2123242322201c130f0d070000000000000000000000000000000000000000000000000000000000000000000000050b0d0e0f0e0d0b090200000000000000000000000000000000000000000000000000000000000000000000000000001f34495f748a8586868686868686868686868686868686868686868584827e79756d6560544b45382f1e160a000000000000000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a040000000000000000000000000000000000000000000000000000000000000000000000000d1f3447596b80806b5948341f0d000000000000000000000000000000000000001c32475c718678807f6b624d483c362d2a282727282530353d4a55606b7e8272604a3e2e180800000000000000000000000000000000000000041a2f44596f847a655037271501000000000000000000000317293952677c826c57422d170200000000000003111c232531211e160b00000000000000000000000000000000000004111c232631211e160a00000000000000000000000000081b2e3e52677d816b5746331e0a000000000000000000000000000000000412212e3b485560697882867c746b635b57534e4b46394636434b4c4f53575a6369707a838176685f4b46392a1d0d0000000000000000000000000000000000000000000000000000000000040a0c0e0f0e0d0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e74897470707070707070707070707070707070707070707076797d8286827b736860564c4032281b0e0000000000000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000000000004182a3b4c61768877624c3b2b18050000000000000000000000000000000000001c32475c71867d826d615044352b211a1513121213131c202d37444b606b807f6a5c4b362513000000000000000000000000000000000000000014293e53697e816b5544311d0d000000000000000000000c1e3346576d837c66513c27110b05000000000011212f383b463632291b0b000000000000000000000000000000000011222f383b463632281b0a000000000000000000000000001020364b60758676614b382816020000000000000000000000000000000003111d2b37444b5a626d7882868078706c686461575b5b5b54606264686d70787f8580786c61584e4132291b0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a101217150f050000000000071117191e1b1c1c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d110f09000000001f34495e7489745e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b586164686d747a81867d74665e4b45392c1e0f01000000000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a04000000000000000000000000000000000000000000000000000000000000000000000000000c1f3347586a80816c594834200e0000000000000000000000000000000000001c32475c71878574604b433320190e07000000000000070f192631424b6074867a645443301c07000000000000000000000000000000000000000d23384d62788774604b3b2b1a0e03000000000000040f1c2c3d4b61768876614b36282220190d000000081c2f3f4b505b4b46392916030000000000000000000000000000000d1d2f404c505c4b4539281603000000000000000000000000081d3144556a7f7e695645321e0b0000000000000000000000000000000000000d1927313c484d5b636d767d8485827d7976717170707075777a7e8285827c756b625a4c473a311e160b00000000000000000000000000000000000000000000000000000000000000000000000000040b0c1114161718171614110d0c06000000000000000000000000000000000005131e25282c2a2217090000000b19242c2f33303132323232323232323232323232323232323232323232323232323232323226241d120400001f34495e7489745e4946464646464646464646464646464646463a464c4f535460656c7780867b6d6057493c2d1f0f000000000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a040000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4c61768877624d3c2b190500000000000000000000000000000000001c32475c71867a655645322516050000000000000000000009141d314455657a8673604a35200e000000000000000000000000000000000000000b2035495a6d827d685948382b1e170e0c0a0a0c0e181f2d3a495b6a7f806a57463d3d37342b1d0d00000e23384b5d6571615746321e13000000000000000000000000000008182a3b4c5e6671605745321e09000000000000000000000000021527374b61768675604b3a29170400000000000000000000000000000000000009151d2b343c494d5761686f757a7f828586868685858583807d79706d6760564d493c332a1c13030000000000000000000000000000000000000000000000000000000000000000000000050b0d181f2226292b2c2d2d2c2a272320190f0d070000000000000000000000000001132330393d413e34271705000719293640444845464747474747474747474747474747474747474747474747474747474747473b382f221200001f34495e7489745e4934313131313131313131313131313131312933363936434a4f58616a78838275625a4a3d2d1e0e0000000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000000000000000c1f3346586a7f816c5a4835200e00000000000000000000000000000000001c32475c718677624d38281607000000000000000000000000011527374b5d6d827c67513d2c1a0600000000000000000000000000000000000006192b3c4d627887776256483c332923211e1f21232a333d4a586379877561545353524d483b2b19050010253b50657b8675614b41301e0e000000000000000000000000001325364759667c8575604b36210b00000000000000000000000000091e334657697e7f695846331f0e00000000000000000000000000000000000000010d19202c3539464c53566065696d707171707070706e6b67635b58514b4538352b1f170c0000000000000000000000000000000000000000000000000000000000000000000000070e1920222a34373b3e40424242413f3c38352c24221b100a01000000000000000000000a1e30414d5257524534220f001124364754595d5b5c5c5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d514c402f1d09001f34495e7489745e49341f1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b171f21242530353a474c5a626e7e8678635b4a3c2c1c0c00000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b61768878624d3c2c1906000000000000000000000000000000001c32475c718777624d37220d000000000000000000000000000009192e3f4f647a85705b4935210c000000000000000000000000000000000000000e2035495a677d8574625a4b46393836333336383a474c5b6376867a6a696968686762594834200b000e23384b5d6b80826d5f4d3c2c190900000000000000000000000b1c30435462778779635745321e0900000000000000000000000000031729394b60758676614c3c2c19060000000000000000000000000000000000000000050e192129333638454b5054575a5c5b5b5b5a5b5955524e4a3d3c36312720190e040000000000000000000000000000000000000000000000000000000000000000000002101b222b35383b474c5053565757575654514d493c3a362e251d12050000000000000000001025394d5f676c63523e2a1500172c4054656e737071717272727272727272727272727272727272727272727272727272727272665e4c38240f001f34495e7489745e49341f090606060606060606060606060600040a0c0f131c202a333c484d60697b8779635a493a291704000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a040000000000000000000000000000000000000000000000000000000000000000000000000000000b1e334657697f826d5a4935200f000000000000000000000000000000001c32475c718777624d37220d0000000000000000000000000000001022374b5c718678634e38230e0000000000000000000000000000000000000006192c3c4d5f697e8578696157524d4c46464c4e5358616b7986847f7f7e7e7e7d7d78624d37220d00081c2f3f4b6073857d675a49372715020000000000000000000b1b2d3e4a6072847e685b4a3928160300000000000000000000000000000b1d314556687d806b5a4935201200000000000000000000000000000000000000000000060b171e212832363b3f424546464646454544403d39362d27201d150a0600000000000000000000000000000000000000000000000000000000000000000000000a161e2d363c484d55596166696b6c6d6c6b6966625a574f4a3e393020180d000000000000000012283d52677d816c57412c1700192f44596e838884858787878787878787878787878787878787878787878787878787878787877c66513b2611001f34495e7489745e49341f0900000000000000000000000000000000000000070c171f2b35424f5d657a8778635846331f13000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a04000000000000000000000000000000000000000000000000000000000000000000000000000000031729394b60758878634d3d2c1a060000000000000000000000000000001c32475c718777624d37220d000000000000000000000000000000071b2e3e546a7f7f6a5537271502000000000000000000000000000000000000000e1e30414f60697b867f766d67636157586163686d7780857d7c7c7c7c7c7c7c7d7a644e39240f0000111d31445562788778635544311d110000000000000000031629394a5c697f836e604e3d2d1b0a000000000000000000000000000000021527384b60738578624d41301b0b0000000000000000000000000000000000000000000000030a0c151d20252a2d303131313030302e2b2824211a120b09020000000000000000000000000000000000000000000000000000000000000000000000000d1a28323e4a4f5a626b71777b7e80818282817f7c78726d645c524d41342b1d110300000000000012283d52677d816c57412c17000c22374c6177857c71717272727272727272727272727272727272727272727272727272727272665e4c38240f001f34495e7489745e49341f09000000000000000000000000000000000000000000040e1920323f4b5c667c8676614c41301b0b0000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a04000000000000000000000000000000000000000000000000000000000000000000000000000000000b1e324557697e826d5b4935210f0000000000000000000000000000001c32475c718677624d37220d000000000000000000000000000000001024394f647985705544311d080000000000000000000000000000000000000000122332424f5d65757e86827d7876707076787d83867e74676767676767676767645c4a36210d000001152737485a667c8574604b3f2f1c0c000000000000000e1e324657647a8776614c42311f0f00000000000000000000000000000000000a1c304354647a846f5f4d392917030000000000000000000000000000000000000000000000000002090b1014181b1c1c1b1b1b1b1916120e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b38454b5c646e78808686817d7b7a79797b7d808487827970675f4d483b2f211103000000000012283d52677d816c57412c17000a1f3447596277857b655d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d514c402f1d09001f34495e7489745e49341f0900000000000000000000000000000000000000000000000514212e3e4c5e697e836e5f4d3929160300000000000000000000000000000000000000000000000010253a4f657a846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000000000000000000031628394b60758778634e3d2d1a0700000000000000000000000000001c32475c718677624d37220d000000000000000000000000000000000b20364b60758975604b36200b0000000000000000000000000000000000000000041424323f4b56606974797f8384858685837e797068605552525252525252524e4a3e2d1a0700000009192b3c4d5e6c81806b5d4c3a2a180800000000000e1e30414b6175867a655847332414010000000000000000000000000000000000011426364a5c6c817c675746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d2b3b4856606b7a84857d76716c686665636466676a6f757b84867c6f62594c3f2f2111000000000012283d52677d816c57412c170004182a3a47596277857b655d4b3e474747474747474747474747474747474747474747474747473b382f221200001f34495e7489745e49341f090000000000000000000000000000000000000000000000000311202f404a6072847d675746321e0b00000000000000000000000000000000000000000000000010253a4f657a846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e324556687e836d5b4a36210f00000000000000000000000000001c32475c718677624d37220d00000000000000000000000000000000081d314455708579634e39240e0000000000000000000000000000000000000000000614212e38454b546064696d6f70706f6d69645c534b44373c3c3c3c3c3c3c39362d200f00000000000e1e30404b6074867b6559473625130000000009192b3c4d5f6d827f6a5d4b3a2917060000000000000000000000000000000000000008182d3e4c61768576614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e111416171817161513100d0b05000000000000000000000000000000000000000009192a3b4859627480867a716861575652514f4e4f5152555560666f78848477655d4c402f1e0e0000000012283d52677d816c57412c1700000c1c2a3b48596277857b655c4b3e2d323232323232323232323232323232323232323232323226241d120400001f34495e7489745e49341f090000000000000000000000000000000000000000000000000002111c30435462788875614b3a291704000000000000000000000000000000000000000000000010253a4f657a846f59442f1a040000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384b60748779634e3e2d1a07000000000000000000000000001c32475c718677624d37220d0000000000000000000000000000000002152737576c827c67523c27120000000000000000000000000000000000000000000003111a283236434a4e54585a5b5b5a58544f4a3e3531262727272727272724211a0f01000000000000121d32455663798777615443301c10000001152737485a677d8473604b3f2e1c0c000000000000000000000000000000000000000000101e334657667b77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c131c202326292b2c2d2c2c2b2825222019130c0a040000000000000000000000000000000115273747596277868074655d534b46393d3c3a393a3b3d37444b505b636f7d887b655e4c3c2c190600000012283d52677d816c57412c170000000d1d2b3b48596278857b645c4a3e2d1f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d110f09000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000132536495a6b81806a5846331f0a000000000000000000000000000000000000000000000010253a4f657a846f59442f1a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d314556687d836e5c4a362110000000000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000162b40566b807e69543f29140000000000000000000000000000000000000000000000000a161e253035393f4345464645433e39362d201d14121212121212120f0d07000000000000000002152838495b687d8472604a3e2d1b0b000c1d3144556278877762544330211000000000000000000000000000000000000000000000031729394c5e6662594834200b000000000000000000000000000000000000000000000000000000000000000000000000000000070c171f21253035383c3f4041424241403e3b37342b28211f170c0800000000000000000000000000081d3144556177867e6b60564b3f363229282625242426282731353d494e60687a887c655a4935201200000012283d52677d816c57412c17000000000d1d2b3b48596278857a645c4a3d2d1f0f01080808080808080808080808080808080808000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000008182b3c4c61778876614c36210f000000000000000000000000000000000000000000000010253a4f657a846f59442f1a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384b60748779644e3e2d1b070000000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000142a3f54697f806b56402b16000000000000000000000000000000000000000000000000000208131c20242a2e2f3031302e2924221b100801000000000000000000000000000000000000000a1a2c3d4e606d827e695c4a3928160c1c2e3f4b6073857c6659483626140200000000000000000000000000000000000000000000000b1b2f404c504d483b2b18050000000000000000000000000000000000000000000000000000000000000000000000000007101b222a333736434a4e515456575757565553504d483b3d373329231c11080000000000000000000005192b3c4b6073857e68604b45382e211e161311100e0f1112151d202c35424e5c657b8878634d40301d0a000012283d52677d816c57412c1700000000000d1d2b3b485a6278857a645b4a3d2d1f0f000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000e1f3347586c817e69543d2d1a070000000000000000000000000000000000000000000010253a4f657a846f59442f1a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d314455687d846e5c4a3622100000000000000000000000001c32475c718777624d37220d000000000000000000000000000000000013283e53687d816c56412c1700000000000000000000000000000000000000000000000000000000070b0f14181a1b1b1a18140f0d0700000000000000000000000000000000000000000000000f1f31414b6175867a645746321e172a3a4b5d6b80816b5e4c3b2b18080000000000000000000000000000000000000000000000000011222f383b37342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000020f1a212e373a474c5354606366696b6c6d6c6b6a6865625958534c473a372f231c110400000000000000000b2034485a697f836e604e4132281a110a030000000000000001080e1a21313e4b5d697e85705f4d39240e000012283d52677d816c57412c170000000000000d1d2b3c485a62788579635b4a3d2c1f0e0000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000004172a3a4e637987725c4a36210d0000000000000000000000000000000000000000000010253a4f657a846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374b6074877a644f3f2e1b0800000000000000000000001c32475c718777624d37220d000000000000000000000000000000000012273d52677c816c57422c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001131e334657647a8675614b41301f334758657b8574604b402f1d0d000000000000000000000000000000000000000000000000000003111c23262220180d0000000000000000000000000000000000000000000000000000000000000000000000000a151d2d363e4b4f5861686e75787b7e8081828181807d7a776f6d686158504b3f372e1f180c000000000000000d22384d62788877624c42311d150a000000000000000000000000000613202e3f4b6073867c67513c2b19060012283d52677d816c57412c17000000000000000e1e2b3c495a63788579635b493d2c1e0e00000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000c21364a5b718679644e39240f0000000000000000000000000000000000000000000010253a4f657a846f59442f1a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314455677c846f5d4b37221100000000000000000000001c32475c718777624d37220d000000000000000000000000000000000013283d52687d816c56412c17000000000000000000000a141a1c0d0b05000000000000000000000000000000000000000000090f1118161006000000000000000000000000000000000000000000031729394a5c697e826d5f4d3c31424c617687786356453122120000000000000000000000000000000000000000000000000000000000090f110d0b050000000000000000000000000000000000000000000000000000000000000000000000000d1a27313d4a4e5c646e777e8485837f7c7a7978797a7a7d7f8284827d766e655d504b3f332a1c100200000000061a2c3d566b807f6a59483424140200000000000000000000000000000002101d314455657b85705a4935200b0012283d52677d816c57412c1700000000000000000e1e2c3c495a63798679635b493c2c1e0e000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000071a2d3d556b807f6a553827150200000000000000000000000000000000000000000010253a4f657a846f59442f1a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374b6073867a654f3f2e1c08000000000000000000001c32475c718677624d37220d000000000000000000000000000000000013283e53687d806b56402b160000000000000000000e1c272f322220190d00000000000000000000000000000000000004121d24262e2b23180a0000000000000000000000000000000000000000000b1b2d3e4f616e837d675a493d4e606e837d675a4938271504000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d2b38454b5b636f7a83857e78716d6a67656463646465676a6d6f767c83837a6f655d4c473a2e2114060000000c2136495b738877624d3b2b18060000000000000000000000000000000000011426374a60748778624d38230d0012283d52677d816c57412c170000000000000000000e1e2c3c495b63798679635a493c2b1e0e0000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000f253a4f647a85705645311d0900000000000000000000000000000000000000000010253a4f657a846f59442f1a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c304354677c846f5d4b372311000000000000000000001c32475c718677624d37220d0000000000000000000000000000000000152a3f546a7f7f6a543f2a1500000000000000000a1c2c39434737342b1d0d000000000000000000000000000000000012222f383b433f35281806000000000000000000000000000000000000000000102032424c6176867862554a5b687e826d5f4d3c2c1a0a00000000000000000000000000000000000000060c0e0c06000000000000000000000000000000000000090f1114141414141414141414120c0200000000000000000000000210202d3c4856606b7984837a7069625a585552504f4e4e4f505255585861676e7780847a6d61584b3f3124150700000e23394e637986715948341d0d00000000000000000000000000000000000000091c3043546c817d68533e28130012283d52677d816c57412c17000000000000000000000e1e2c3d495b63798578635a483c2b1d0d00000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000b20364b60758974604b36200b00000000000000000000000000000000000000000010253a4f657a846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364a6073867a65503f2f1c090000000000000000001c32475c718677624d37220d0000000000000000000000000000000001162c41566b817d68533d281300000000000000001427394a565c4d483b2b1905000000000000000000000000000000091d2f404c5158534635231000000000000000000000000000000000000000000002141f334758657b8573605663798675614b41301e0e000000000000000000000000000000000000000e19202320190e00000000000000000000000000000004121d242629292929292929292929261f14060000000000000000000010202d3e4a5a627480857a6e645c544d493c403d3a3939393a3b3d403a474c5259616b77828277655d4e42332615040012273d52677d826c573b2b1800000000000000000000000000000000000000000013253652687d816c57412c170012283d52677d816c57412c1700000000000000000000000f1f2c3d4a5b63798578625a483b2b1d0d000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000091d31455671867a644f39240f00000000000000000000000000000000000000000010253a4f657a846f593828160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354667b85705d4c3823120000000000000000001c32475c718677624d37220d0000000000000000000000000000000003162838596e837b65503b261000000000000000001a2f4356687162594834200b0000000000000000000000000000000f24384c5e666d64533f2b160000000000000000000000000000000000000000000004172a3a4b5d6a7f806b60748679645746322313000000000000000000000000000000000000000e1e2c3538352c1e12040000000000000000000000000012222f383c3e3e3e3e3e3e3e3e3e3e3b3224140200000000000000000e1e2d3e4a5c6478857f74645c4f4b3e38352b2a27252423242525282a2a33373b474c59616d7c867b6860504433210d00152a3f546a7f7f6a543f2a1500000000000000000000000000000000000000000010253a4f657a836f59442f1a0012283d52677d816c57412c170000000000000000000000010f1f2d3d4a5b647a85786259483b2b1d0d0000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000002152738576d827d68533d2813000000000000000000000000000000000000000005192b3c4f657a836f5645321e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364c5e70857b6550402f1d0900000000000000001c32475c718677624d37220d00000000000000000000000000000000091e324556718678624d38220d00000000000000001c32475c718678624d37220d00000000000000000000000000000011263b51667c836d58432e1800000000000000000000000000000000000000000000000c1c2e3f4b6073847b6c817e695c4a3928160500000000000000000000000000000000000006192c3c494d493c302212000000000000000000000000091d2f404c51545454545454545454534f42321f0c000000000000000b1b2c3c4a5c647a877c6a60554b3e372e2320191512100f0e0f0f101215171f212a343b474c5e6678857e6b62503d281300162b40566b807e68533e29130000000000000000000000000000000000000000000e24394e637985705a45301b0012283d52677d816c57412c17000000000000000000000000010f1f2d3d4a5c647a85776259483b2a1c0c00000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000000152a40556a7f806a55402b1500000000000000000000000000000000000000000d2035485a697e8775604b3e2d19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182f4050667b85705e4c38241200000000000000001c32475c718777624d37220d000000000000000000000000000000000b21364b60768875604a35200b00000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b826d58432e18000000000000000000000000000000000000000000000000111c3043546277867d836e604f3d2d1b0b000000000000000000000000000000000000000c2035495a635a4c40301b0b00000000000000000000000f24384c5e6669696969696969696969604f3b261200000000000003172939495a647a877a665e4b44372e221b100b0600000000000000000000040a0c181f2a34404c5a627583806b55402b1600162b40566b807e69533e29140000000000000000000000000000000000000000000f24394f647985705a45301b0012283d52677d816c57412c1700000000000000000000000000010f1f2d3e4a5c647a85776259473a2a1c0c000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000013283d53687d826d58422d18000000000000000000000000000000000000000d1d31414d6278867f806b5c4a37271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001223384c5e70857b665140301808000000000000001c32475c718777624d37220e000000000000000000000000000000001325364f657a846f5443301c0700000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000000000000000000000000000000000000000002152737495a6a7f8a78624d42321f0f00000000000000000000000000000000000000000e23384d6378665e4c392816030000000000000000000011263c51667c7e7e7e7e7e7e7e7e7e7e69533e2914000000000000091e33465762788779645c4c40312719100700000000000000000000000000000000040c181f2f3c485660737a644f3a240f00152a3f556a7f7f6a55402a1500000000000000000000000000000000000000000010263b50657b846f59442f1a0012283d52677d816c57412c170000000000000000000000000000010f202d3e4a5c647a85776259473a2a1c0c0000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000011263b51667b846f59442f1a00000000000000000000000000000000000005182a3b4e5f6f847c74867a645544311d0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f4050657a86715e4c362513000000000000001c32475c718677624d3c2b1b0a0000000000000000000000000000071c3043546b807e69543625130000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180000000000000000000000000000000000000000000000000d1d3144556278857d836d604e3d2c1a0a00000000000000000000000000000000000000172c41576c817c665746321e0f000000000000000000000d23384d62787b7b7b7b7b7b7b7b7b87735d48331e000000000009192f404c6176867b655b4a3e2f1d1509000000000000000000000000000000000000000004121d2b38455460645c4a36220d0012283d52677d816c5739291703000000000000000000000000000000000000000012273d52677c816c57422c170012283d52677d816c57412c170000000000000000000000000000000110202d3e4b5c657b85776158473a291b0b00000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000010253b50657a856f5a45301a0000000000000000000000000000000000000c1f344759687d836d647a8674604b3d2c1808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001123374b5d6f857c665443301c080000000000001c32475c71867d675a483928180a000000000000000000000000000e20354a60748778624d38230d0000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000000000000000000000000000000000000000d1d2f404b6074857b6d827d685b49382816030000000000000000000000000000000000000c21374c61768575614b3d2d1a070000000000000000000c2035495a6265656565656565657287725d47321d00000000011527374c5e6d827f6a5e4c3d2d20110100000000000000000000000000000000000000000000000d1a2836434b4f4a3e2e1b07000f24394e647986715746331e0800000000000000000000000000000000000000071a2d3d566c817e69533e29140012283d52677d816c57412c17000000000000000000000000000000000210202e3e4b5d657b847661584639291a0a000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000f253a4f647a86705b46311b00000000000000000000000000000000000c1c30404c62778777615c6b817f6a5b4936261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4f657a8673604a3626140100000000001c32475c7187857862574536271a0c00000000000000000000000e1e304150657b846f5a4935200b0000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180000000000000000000000000000000000000000000008182a3b4c5e6b807f6a60758679635645321e120000000000000000000000000000000000000a1f334758677d806b5b4a36211100000000000000000006192c3c494d505050505050505d7287725d47321d00000000081d314455667b8573604b402f1f0f01000000000000000000000000000000000000000000000000000a182630353a362e201000000b20354b60748876614c362513000000000000000000000000000000000000000a21364a5b718679634e39240e0012283d52677d816c57412c1700000000000000000000000000000000000210202e3f4b5d657b847661574638281a0a0000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000000000f24394f647986715b46311c000000000000000000000000000000000417293a4d5e6e837d67594b60758779635443301c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122374b5d6f847c675443301c0900000000001c32475c71867a8475605445382a1c11070000000000000005101d2c3c4d5f70857b66503c2b19060000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000000000000000000000000000000000011426364859667b84736057647a8575604b41301e0e000000000000000000000000000000000004172a3a4d5f6f8479634e402f18080000000000000000000e1e2c35383b3b3b3b3b3b475d7287725d47321d000000011527374b607487796355443121110100000000000000000000000000000000000000000000000000000008141c2024221b10020000081c3043546c827d685443301c0e00000000000000000000000000000000000a1b2d3e4e637986715b4a36210c0012283d52677d816c57412c170000000000000000000000000000000000000210212e3f4b5d667c84756156453828190900000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000010253a4f657a85705b45301b000000000000000000000000000000000b1f334658667c846f5f4d4557657b8573604b3c2b1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4f647a8673604b37271501000000001c32475c7186767c82726056473a2f221b100c0b070a0c0f19202e3b495a677c846f5e4c381e0e000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180000000000000000000000000000000000000000000c1c3043546277867862544a5c697e816c5f4d3c2b190900000000000000000000000000000000000c1c31414e6379846f5e4c362513000000000000000000000e192023262626262632475d7287725d47321d000000081d314455687e826d5b4a37261403000000000000000000000000000000000000000000000000000000000001080b0f0d0700000000011426364d63788673604a3c2c1d100300000000000000000000000000010d1a28394a5c6d827d67523d2d1a070012283d52677d816c57412c17000000000000000000000000000000000000000211212e3f4c5e667d847460564537271501000000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000010263b50657b846f5a452f1a0000000000000000000000000000000b1b2f3f4c61768778624d41394b5d6d827e695a48352013000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001022364a5c6e847d675544311d09000000001c32475c718676687e827461594c40362d2521201c1f21252b353f4b5962788778624d402f1c00000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000000000000000000000000000000000c1c2e3f4b6073847c6659483e4f606f847c675a49372715020000000000000000000000000000000000132135495b6d827b665443301c0800000000000000000000060c0d101010101d32475d7287725d47321d0000000b20354b60748778624d3d2d19090000000000000000000000000000000000000000000000000000000000000000000000000000000000082135495b6c817e685b493b2d1e160b050000000000000000000308141c2b384557647a8673604a35200f000012283d52677d816c57412c1700000000000000000000000000000000000000000311212f404d5e677d8374605544311d15050000000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000011273c51667c836e59442e190000000000000000000000000000031628394c5d6d827e695a48352f3f4c61768778624d41311d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4e64798774604b372715020000001c32475c71867560687d8377655e4e4a3e3a37353033373a3c484d5d6478867b655a4835221100000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000000000000000000000000000000417293a4b5d6a7f816c5e4c3b32424c61778778625544311d120000000000000000000000000000000000061a2c3d4d62778573604a36261401000000000000000000000000000000081d32475d7287725d47321d000004182a3a51677c836e5a48351f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4c6176867963594a3e32292018110e0c0b08080b0d10161e26303b48566075857a645443301c07000012283d52677d816c57412c1700000000000000000000000000000000000000000003112230404d5f697e8373604b443323130100000000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000014293e54697e816c57412c1700000000000000000000000000000a1e324657657b8573604b3c2b1f334658677c846f604e3b2a18050000000000000000000000000000000000040a0c101010101010101010101010101010101010101010101010101021364a5c6e837d685544311d0a0000001c31475c718671555f677b857b6e645c54504c4a43474c4f545a626c7a877c665d4c3c2b190400000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000000000000000000000000000010f1f334758647a8674604b40301f334758657b8574604b402f1d0d00000000000000000000000000000000000f203448596b807c675443301c08000000000000000000000000000000081d32475d7287725d47321d00000a1f3447596f857a65503c2b1901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f33475863798678645c4b4639342b262322201d1d202225293236434b596274837d675c4b36251300000012283d52677d816c57412c170000000000000000000000000000000000000000000003122231414e606a7f826d625041311f0f00000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000001162b41566b807f69543f2a14000000000000000000000000000a1a2e3e4b61758679635443301e17293a4d5f6e837d685948341f12000000000000000000000000000000000c181f222626262626262626262626262626262626262626262626262626262d3e4e63798774604b3828150200001c31465b7186715b4d5d6576828379706a65616054586164696f78818579665e4c3f2f1e0e0000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180000000000000000000000000000000000000f1f31424c617686796356453222182a3a4b5d6b80806b5e4c3b2b18080000000000000000000000000000000005182b3b4c61778674604b352010000000000000000000000000000000081d32475d7287725d47321d00000c22374c617787725d4b371e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4a5b657b857a6a61574d483b3c383735313136383b39464b54606877847e685f4d3e2e180800000012283d52677d816c57412c170000000000000000000000000000000000000000000000041323314250616c81806b5f4d3d2d1b0a000000000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000004182a3a596e837c66513c2711000000000000000000000000021527384b5c6c817f6a5b493626140c1c30404c62778777624c40301c0c00000000000000000000000000000c1c2a34373b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b4a5b6d837d685645321d0900001b30455b7085705b3f4b58616d7983857f7a76757070767a7e84857c72635b4c402f2111000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000000000000000000000000000a1b2d3d4e606e837e685b4a3828160c1c2f3f4b6073857c66594836261401000000000000000000000000000000000d1f3347586c817c66513e2d1b070000000000000000000000000000081d32475d7287725d47321d000013283d53687d816c573f2e1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3d4b5d65788580766a625955514e4c4b44444b4d5054576168747d867b68604e413020100000000012283d52677d816c57412c1700000000000000000000000000000000000000000000000005142433434b6073847d675b4a392816030000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000a1f344759728778624d38220d000000000000000000000000091d314556647a8674604b3d2c1808001220344859687d836e5f4d3a29170400000000000000000000000004182a3a474c5050505050505050505050505050505050505050505050505050505050505063788775604b37271501000d22374d6277624d373a474c5c646e767c818485858584817d7770676054493d2f221203000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000000000000000000000000031628394a5b687e836e604e3d2d1a0a00111d31445562788777625443301c110000000000000000000000000000000004172a3a4e637885705c4a36220b0000000000000000000000000000081d32475d7287725d47321d0005182a3b596e837b66503b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2e3f4b5a62737d8580776f6a666361605555606265696e767e857f75655d4e42312313020000000012283d52677d816c57412c170000000000000000000000000000000000000000000000000006151d31445561768679635745321e0f0000000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000000c22374c617788735a4835200b000000000000000000000009192d3d4b6074867a645544311f0f000005182b3b4e606f847c675847331f110000000000000000000000000a1f3447596165656565656565656565656565656565656565656565656565656565656565656d827e695544311d08000b20344859625948342a333e4a4e5861676b6f7070706f6c68625a514a43362c1f120400000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000000000000000000000000e1e32455763798776614c42311f0f000001152737495a677d8473604b3f2e1c0c000000000000000000000000000000000c2135495b6f8479644f3929170300000000000000000000000000081d32475d7287725d47321d000b1f344859728776614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111212e3c48546067757b8284807b787775717275777a7f84847d766a61574b3f31241405000000000012283d52677d816c57412c170000000000000000000000000000000000000000000000000000011527374758657b8675604b3d2c1a0600000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000215273751677c836e593c2b190500000000000000000000011426374a5b6a80816b5c4a372715010000000d1d31424d63788776614c402f1b0b00000000000000000000000c22374c61777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7d8875604b35200b0005192b3b484d483b2b191f2d363a464c52565a5b5b5b5a57524d483c353025180f010000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180000000000000000000000000000000e1e30414b6075867b6558473324140100000009192b3c4d5f6d827f6a5d4b3a2a1704000000000000000000000000000000061a2c3d50667b826d5746331e0a00000000000000000000000000081d32475d7287725d47321d000d22374c627787725846331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111e2b36434b5560666d747b868c8a888687898c877e766e6861584b46392e21140600000000000012283d52677d816c57412c170000000000000000000000000000000000000000000000000000000919293a4b5d6b80806b5b4935210f00000000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000000081d3144556d827d67523d28120000000000000000000000081d31445563798775604b3e2e19090000000000132035495a697f826d5e4c392816030000000000000000000011263b51667b818282828282828282828282828282828282828282828282828282828282828282818177614c37220c00000d1d2b3437342b1d0d101b222933363c414446464644413d38352b201c130800000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000000000000000000009192c3c4d5f6d82806a5d4b3a2a170600000000000e1e30414b6175867b655847331f14020000000000000000000000000000000e20354b60748776614b36210c00000000000000000000000000081d32475d7287725d47321d0010263b50657b836e593a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a3a464c6068767e84807b777573717274767a7f8480776c60564a3d2d200f0000000000000012283d52677d816c57412c17000000000000000000000000000000000000000000000000000000000c1c2e3f4b60758779634e3d2d1a07000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000000b20364b60758876614c37210c0000000000000000000008182c3c4b6073857b65574532201000000000000006192c3c4b6073857b655746321e10000000000000000000000f24384c5e666c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c615847331f0a0000000d19202220190d0000070c171f21272c2f3031302f2c282220190e07000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180000000000000000000000000002152737495a677d8573604b3f2e1c0c00000000000000131e324657647a8776614c42322010000000000000000000000000000000081d3144556c817d67523a2a1804000000000000000000000000081d32475d7287725d47321d0013283d53687d816b56412c160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3a4758616f7d857d746b666260545c5c5861656a6f7a848175635b4a3e2d1d0d00000000000012283d52677d816c57412c170000000000000000000000000000000000000000000000000000000000111e324556677c846f5c4a36210a000000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000000000081b2e3f52677c836e5847331f0a00000000000000000000132536495a697f826d5d4c39281602000000000000000e1d31445563798775614b3e2e1a0a000000000000000000091c2f404c5157575757575757575757575757575757575757575757575757575757575757575757574c473a2a180400000000050b0d0b050000000000040a0c12161a1b1b1b1a17130d0b050000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000000000000000000081d314455637888786255443121110000000000000000031628394a5c697e836e604f3e2d1b070000000000000000000000000000011426374f6479846f5947341f0a000000000000000000000000081d32475d7287725d47321d00162b40556b807e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263747586176848074686055514c4a43363a474c50555d65707d8679645c4a3b2b1808000000000012283d52677d816c57412c170000000000000000000000000000000000000000000000000000000000031628384d5f718679644e382816020000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000000000d22374b5d70857a65503a2a1704000000000000000000071c30435463788776614c3f2f1b0a0000000000000000011426374a5b6b80816c5c4b3828150200000000000000000012222f383b424242424242424242424242424242424242424242424242424242424242424242424237332a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000000000000000001325364b6074857c675a48372614030000000000000000000b1b2d3e4a6072847e695c4a36220d0000000000000000000000000000000922364a5c728777614c37220c000000000000000000000000081d32475d7287725d47321d00172d42576c827c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556176847d6b60554b4437373530252933373a3f4b505f6779857a645948362513000000000012283d52677d816c57412c170000000000000000000000000000000000000000000000000000000000000a1a304053687d826d5645321e090000001f34495e7489745e49341f090000000000000000000000000000000000000000000000000000000d1d30414f657a86715d4b371c0c00000000000000000005182b3b4a6072857c6758473321110000000000000000000009192d3d4b6074867a645645321d0f00000000000000000004121c24262d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d221f180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000000000000000071c3043546b81816c5f4d3c2b19090000000000000000000000101c30435461778779644f39240f000000000000000000000000000000071b2d3e576c817d67523d2812000000000000000000000000081d32475d7287725d47321d00182d43586d827b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b4b6073847d675f4b4437312622201c13171f21252e37414d5b63798777625443301c070000000012283d52677d816c57412c17000000000000000004020000000000000000000000000000000000000000001221364b60758875604b36210b0000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000009192a3b4d5f70857b66503f2f1c000000000000000000000c20344859687e836e5f4d3a29170300000000000000000000000f1d324556657a8674604b3d2d190900000000000000000000090f1117171717171717171717171717171717171717171717171717171717171717171717170c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180000000000000000000000000b20354a60727a73604b41301e0e000000000000000000000000001325364759617778624d38230d0000000000000000000000000000000011273c51667c826d583c2c19060000000000000000000000081d32475d7287725d47321d00192e44596e837a65503b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3447596a7f816b5f4d4131271d140d0b0700040a0c111c23303d4a5b667c8472604a35200d0000000012283d52677d816c57412c170000000000050b0d1917100700000000000000000000000000000000000000091e3245566e847b65503b26100000001f34495e7489745e49341f0900000000000000000000000000000000000000000000000000021527374759677c846f5e4c3821110000000000000000000c1c30414d62778877624d41301c0c000000000000000000000000021528384b5d6c81806b5c4a37261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000000000000000071c3043546064605544312312000000000000000000000000000008182a3a475961625a4935200c000000000000000000000000000000000c21364c617687725a4935200c0000000000000000000000081d32475d7287725d47321d00192f44596e847a65503a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778876614b41301d150901000000000000000008131f2d3d4d5e70857b66513b2b180500000012283d52677d816c57412c17000000000d1920222e2b24180a0000000000000000000000000000000000000216283854697e806b56412b160100001f34495e7489745e49341f090000000000000000000000000000000000000000000000000a151d31445562778778624d402f1c03000000000000000004182a3a4d5f6e837d68594834231200000000000000000000000000000a1a2e3f4b61768779645544311d0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d171c1f1c170d0100000000000000000000000000000000000000000000000000010a10121c0c0a03000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000000000000000000132536434a4f4b44372614050000000000000000000000000000000c1c2a3b474c4d493c2c1906000000000000000000000000000000000a1f334658708578634d38230e0000000000000000000000081d32475d7287725d47321d00192e43586e837b66503b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c556b807f6a5746332313020000000000000000000000010f1f30404f657a8570594834200b00000012283d52677d816c57412c170000000d1d2b343743403628180000000000000000000000000000000000000010253a4f657a846f59442f1a0400001f34495e7489745e49341f0900000000000000000000000000000000000000000000020e1a2832444b6073847d685a483522110000000000000000000b1f334758677d8572604a3b2b1804000000000000000000000000000000101e334657667b8673604b3c2c18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111f2a3134312a1f1101000000000000000000000000000000000000000000000005131e252731211e170b0000000000001c32475c718777624d37220d00000000000000000000000000000011263c51667b826d58432d1800000000000000000000000000081825303539353126190900000000000000000000000000000000000c1d2a343738352c1e0e00000000000000000000000000000000000417293a576c817d67523d28120000000000000000000000081d32475d7287725d47321d00182d42586d827c66513c2711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035495a728777624d3929170500000000000000000000000000011223374b5d728777624d37220d00000012283d52677d816c57412c17000005192b3b484d595346361a0a0000000000000000000000000000000000000e23384e637885705b46311b0600001f34495e7489745e49341f090000000000000000000000000000000000000000030a151d2c38454b626c81816c604e3c2b190400000000000000000b1b2f404c61778778635443301d0d00000000000000000000000000000000031729394c5e6d827f695b49362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f2f3d4649463d2f1f0d0000000000000000000000000000000000000000000002132330393c463633291b0b00000000001c32475c718777624d37220d00000000000000000000000000000012273d52677c816c57412c17000000000000000000000000000008131c2024201d1409000000000000000000000000000000000000000c181f222320190e0000000000000000000000000000000000000013283d53687d806b56412b160000000000000000000000081d32475d7287725d47321d00172c41566c817d68523d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d627886715a48341b0b000000000000000000000000000000081c2e3f576c827d67523d281200000012283d52677d816c57412c1700000b20344859626e64533828160200000000000000000000000000000000000c21374c617687725d48321d0800001f34495e7489745e49341f090000000000000000000000000000000000030a0c171e28323c4956606d808272604b41311e0e0000000000000000031729394c5e6d827f695a493625130000000000000000000000000000000000000b1b2f404c61778778635443301c0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172a3d4d5a5e5a4d3d2a1703000000000000000000000000000000000000000000102030414d525b4b4639291703000000001c32475c718677624d37220d00000000000000000000000000000013293e53687e806b55402b1600000000000000000000000000000000070b0f0b0801000000000000000000000000000000000000000000040b0c0d0c0600000000000000000000000000000000000000000f24394f6479846f5a3828160300000000000000000000081d32475d7287725d47321d0014293f54697e7f6a55402a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c826d573c2b19000000000000000000000000000000000013283d53687d816c57412c1702000012283d52677d816c57412c1700000d22374d6278836e5645321e0900000000000000000000000000000000000c21364c617688725d48331d0800001f34495e7489745e49341f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f101215161e21293338454b5a62748282736054433023130000000000000000000a1e334657667b8673604b3c2c180800000000000000000000000000000000000000121f334758677d8572604a3b2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465a6b746b5a46311c0800000000000000000000000000000000000000000e1e2e3e4d5f6771615746331e0a000000001c32475c718677624d37220f000000000000000000000000000000152a40556a7f7e69543f29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607587725645321e0900000000000000000000081d32475d7287725d47321d0012273c51677c826d573726140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e806b55402b16000000000000000000000000000000000011263b51667b836e58432e1903000012283d52677d816c57412c1700000b20344859728775604b36210b00000000000000000000000000000000000d22374d627787715c47321c0700001f34495e7489745e49342424242424242424242424242424242526272a29323639464b56606a78857f726055443626140500000000000000000a1a2e3f4b61768779645544311e0e000000000000000000000000000000000000000004182a3a4d5f6f847e68594834201301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000b1b2b3c4b5c677d8576614b36210c000000001c32475c718777624d3d2d1d0d0000000000000000000000000005192b3c596e837b65503b261000000000000000000000000000000000000000000000000000000000000000040a0c110f090000000000000000060b0d16160e0c0600000000000000000000000000000000091d324556728776604b36210b00000000000000000000081d32475d7287725d47321d000e24394e637985705544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f7e69543f291400000000000000000000000000000000000f243a4f6479846f5a452f1a05000012283d52677d816c57412c17000005192b3b596e847a6550382816020000000000000000000000000000000010253a4f657a846f5a442f1a0500001f34495e7489745e49393939393939393939393939393939393a3b3c3f39464b51576169757f867b6a605444372618080000000000000000021628384b5d6c81806b5c4a372614000000000000000000000000000000000000000000000c1c30414d62788878624d41301e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000008182839485a647a8778625746331e0a000000001c32475c71867e685c4a3b2a1b0d0000000000000000000000000b2035485a728776614c37210c0000000000000000000000000000000000000000000000000000000000030c171f2126241c120400000000000e1920232b2b2321190e000000000000000000000000000000021528385b708578624d38230d00000000000000000000081d32475d7287725d47321d000b20354b60758875604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f7f6a55402a15000000000000000000000000000000000010263b50657b846f59442f1a04000012283d52677d816c57412c1700000013293e53687e806b5645321e0c0000000000000000000000000000000417293a53687e816b56412c160100001f34495e7489745e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4f505254575761666d767e867f74655d4a4336261909000000000000000000091e324556657b8775604b3e2d19090000000000000000000000000000000000000000000000132034485a687e846f5f4d392510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000000013253646576278877b645a4839291703000000001c32475c718685796459483a2b1d1002000000000000000000021528384d627886715847331f0a000000000000000000000000000000000000000000000000000000030b171e2933373b382f2212000000000e1e2b3538404138352c1e0e000000000000000000000000000000192e43586e837a654f3a251000000000000000000000081d32475d7287725d47321d00081d314455708579644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d816c57392916030000000000000000000000000000000012283d52677d826d57422d1802000012283d52677d816c57412c170000000c21364c61768775604b3a29170400000000000000000000000000000a1f3347586e837b66513c26110000001f34495e7489746464646464646464646464646464646464646465676a6c70767b82867e766a60564b3f30251809000000000000000000000b21364b6075867b65564532200f00000000000000000000000000000000000000000000000005192b3c4a6072847c67523d2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000002101c3043546175857d675d4b3c2b1b0b00000000001c32475c71867984776258483b2d1d150a0200000000000005121d3245566a7f7f69543a29170400000000000000000000000000000000000000000000000000030b161e29333a474c514c402f1c0900000d1d2b3c494d56564d493c2c1e0e0000000000000000000000000001162c41566b817c67513c271200000000000000000000081d32475d7287725d47321d0001142637556a7f7e69543b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a846f5746321e0800000000000000000000000000000005192b3c556a807e69543f291400000012283d52677d816c57412c170000000a1e3346576d827d685847331f14030000000000000000000000000a1a2c3c4c61768875604b36210b0000001f34495e74897a7979797979797979797979797979797979797a7b7c7f8285858079716961574b45382e1c1308000000000000000000000010253a4f657b7d685d4b38281601000000000000000000000000000000000000000000000000000d1c3043546278806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000000102030414a607283806b5f4d3f2e1e0e0000000000001c32475c7186767a847662594a3e31271e160e0b090a0c0e181f2f3f4b60758777614c37220c000000000000000000000000000000000000000000000000020a161e293239464c5861665e4c38240f0005182b3b495a626b6b635b493c2c190600000000000000000000000000152a3f546a7f7e68533e291300000000000000000000081d32475d7287725d47321d00000f24394e64798570594834200900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758876614b3625130000000000000000000000000000000b2034485a718679644f39240f00000012283d52677d816c57412c17000000031729394d62788776614c42321e160a000000000000000000020d192838495b6b80806b5645321e09000000172c41566c818182828282828282828282828282828282828181807e7c7975706b645c544b463931271a11000000000000000000000000000e23374b5d6568604e3f2e1a0a000000000000000000000000000000000000000000000000000000132536495a626a61503c2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000000000e1e2e3f4d5f6b808372604a41302010000000000000001c32475c718676657b8477645c4b4538322823211e1f21232a34404c5d6b80806b5947341f0a00000000000000000000000000000000000000000000020a161e283239464b57616a767c66513b2611000b203448596278808079635b4935210c0000000000000000000000000014293e54697e7e69543f291400000000000000000000081d32475d7287725d47321d00000d21364a5c728777624d3727150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556d827c675443301c0e000000000000000000000000000b1b2c3c4d627787725c4a36220d00000012283d52677d816c57412c17000000000b2035485a697e826d604f4232281c13080700020002090b151d2b37455663788775614b3828160300000014293e51626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6b6a6966646056564f4a3e3633291d150a0000000000000000000000000000081c2e3f4b4f534e423121110000000000000000000000000000000000000000000000000000000008182c3c494d55504333210d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f0900000000000000000000000000000b1b2b3c4b5d677d857560544330231302000000000000001c32475c71867560657a857a6a60564b45383836323336383b474c5e667b8674604b3a2a18040000000000000000000000000000000000000000020a151d283239454b57616a767f867a644f3a250f000d22374d62778995968a79634d38230e0000000000000000000000000013283d53687d7f6a553f2a1500000000000000000000081d32475d7287725d47321d0000071a2d3e546a7f7f6a5544311d0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374e63798673604a3d2c1d1105000000000000000000030e192839495a6c817e68533e2d1b0700000012283d52677d816c57412c170000000005192b3c4b6073847e69604b45383025211a191718151d2028323b48556074847c665746321a0a000000000e223444515657575757575757575757575757575757575757565554514e4b453839362d211e170b020000000000000000000000000000000011212e373a3e3a3124140300000000000000000000000000000000000000000000000000000000000e1e2c3538403c33251504000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000008182939485a647b87776257453625130500000000000000001c31475c718671555c6478847f74686056524e4b45464c4e5259626c7c8679635645321c0c000000000000000000000000000000000000000109151d283238454b576069767f857d73645c4b37220d0013293e53687e93a7a895806a55402b150000000000000000000000000012273d52677c806a55402b1500000000000000000000081d32475d7287725d47321d0000000f22374c61778775604b39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000921364a5b6d827d675b493b2e20190d0a0400020002090b161e2b37465763788674604b3520100000000012283d52677d816c57412c1700000000000e1d3144556175847e6c60564a4336362d2e2c2d27313638454b596273837f6a5e4d3928160000000000051626343e414242424242424242424242424242424242424241403f3c3936322824221b100a0300000000000000000000000000000000000003111c232528261f1406000000000000000000000000000000000000000000000000000000000000000e1920232b2821150700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000000114263646576278877a645948392818080000000000000000001c31465b7186715b4a5962727d857d756d67636057586163686e77818678635b493828150000000000000000000000000000000000000109151d273138454b566069757f857d746760554b3e2e1b080012283d52677d92a3a4947e69543f29140000000000000000000000000011273c51667c806b56412b1600000000000000000000081d32475d7287725d47321d0000000a1f3347586c817e685746321e1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c6277867963594b3f342b211f17191718151d2029323c48556175857b655544311d080000000012283d52677d816c57412c17000000000001142637465761768481756660544e4a3d43424238454b4f5660687783806b615040301b0b000000000000081622292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2b292724201d150f0d070000000000000000000000000000000000000000000000080e1013110b02000000000000000000000000000000000000000000000000000000000000000000060c0d15130d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f09000000000000000000000003101c3043546175867c675c4a3b2b1b0a000000000000000000001b30455b7085705b3b48546068757e85827d7876707076787d83877d736259493d2c1a0a000000000000000000000000000000000109141d273137444b566069757e857d746860554b44372e201000000b21364b60748592928676614c36210c0000000000000000000000000012273c52677c806b55402b1600000000000000000000081d32475d7287725d47321d00000004182a3a4c62778775614b3e2e1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f344859647a8577655d4d483b3733292e2c2d28323639464b5a6273837e685d4b372715010000000012283d52677d816c57412c1700000000000009192939465861727f857c7369635b5a595757595660646b757d867c6b6250433322120000000000000000050e141717171717171717171717171717171717171717161514110f0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489745e49341f090000000000000000000000102131414b6072837f6a5f4d3e2d1d0d00000000000000000000000d22374d6277624d3736434a56606970787e8284858584837f7974686054483b2c1f0e0000000000000000000000000000000008141c263137444b556068757e867e746860554b443731261910020000091e32455660757c7d75615746331e0a0000000000000000000000000013283d53687d7f6a553f2a1500000000000000000000081d32475d7287725d47321d000000000c1f3448596a7f806b5c4b3a2a1a0a000000000000000000000000000000000000000000000000000000050b0d13110b01000000000000000005182a3b4a5c657b857b6c6259514c473a43424338454b5057616978847e68604e3f2e1909000000000012283d52677d816c57412c17000000000000000b1b293a465460697881857e7971706e6c6d6e70757a80868076665e50443325150400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191b1913090000000000000000000000000000000000000000000000000000000000000000040d1416110f09000000001f34495e7489745e49341f09000000000000000000000e1e2e3f4e5f6b80826d6150403020100000000000000000000000000b2034485962594834253038454b545b63686d6f70706f6d696460544b43362b1d0e00000000000000000000000000000008131c263037444b556068747e857e756860554b443731271d140900000000021628384556606767615746392917030000000000000000000000000014293e53697e7f69543f2a1400000000000000000000081d32475d7287725d47321d0000000005182a3b4b6074867a64584738271a0b000000000000000000000000000000000000000000000000000d19202228251e130500000000000000000d1d2d3e4b5d65778581776d6661585a585758595660656b767f867a68604e4131211100000000000012283d52677d816c57412c1700000000000000000c1c2936434a5a626c777d838684838182838485827c756b61584c4033261507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a10121a0b0801000000000000000000000000000000000000000000000000000000000000000000040a0c1d0f0d0700000000000c1a262e312e261a0c000000000000000000000000000000000000000000000000000000000000081621282b26241d120400001f34495e7489745e49341f090000000000000000000b1b2b3c4b5d687d8574604b433322120200000000000000000000000005192b3b484d483b2b191c2832363d494e53585a5b5b5a58544e4a43363026180d0000000000000000000000000000091218253036434b556067747d857e756960564b443731271d1509010000000000000a1a2838454b52524b4639291b0b0000000000000000000000000000142a3f54697f7e69533e291400000000000000000000081d32475d7287725d47321d00000000000d1d3144556379867661564538281b0f0100000000000000000000000000000000000000000004121d2b34383d3a3123130100000000000000000f202e3f4b59626f7b85827c76716f6e6c6d6f70757a80867e74645c4e423123130300000000000012283d52677d816c57412c170000000000000000000c1825303c494d5961686d71757779787775706c6760564c473a2f22150700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25282f201d1509000000000000000000000000000000000000000000000000000000000000000c181f223224221b10020000091a2b38424642382b1a0900000000000000000000000000000000000000000000000000000000031626333d403b382f221200001f34495e7489745e49341f09000000000000000008182939485a657b86776156453225150400000000000000000000000000000d1d2b3437342b1d0d0a161e212c36393e4245464645433f393530251c14080000000000000000000000000009121d243036434a546067747d857e756960564b453831271d1509010000000000000000000a1a2832363d3d3632281b0b000000000000000000000000000000162b40556b807c67523d271200000000000000000000081d32475d7287725d47321d0000000000021527374a5b677c8474605646392c1d1409000000000000000000000000000000000000030c171f2f3c484d534e42311e0b00000000000000000111212e3b484d5e66707a81858584838182848586827b756860564b3e31241405000000000000000c21364c617677624c37220d0000000000000000000008131c2c353a474c5358566062646362605657524b4538332a1c1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011323303a3d45353127190900000000000000000000000000000000000000000000000000000000000c1c2a34374739362d2010000013263849555b554938261300000000000000000000000000000000000000000000000000000000112133445055514c402f1d09001f34495e7489745e49341f09000000000000000114263646576278877963594738281507000000000000000000000000000000000d19202220190d000003090f1a2123292d3030302f2e2a24201c13080100000000000000000000000008111c232f38404c546067737c857f756960564b453831271d1509010000000000000000000000000a161e212727211e160b00000000000000000000000000000003182d43586d827a65503b251000000000000000000000081d32475d7287725d47321d00000000000009192d3d4d5f697f83746157493d312619120a0300000000000000000000000000060a161e2933404c5a6268604e3a251100000000000000000003111d2b34404c515c646b7075777979797775716d6660554b45382e20140600000000000000000a1e33465761625947341f0b0000000000000000000000000e19202a34373d38454b4d4e4e4c4b45383c3631271f170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e30414d525a4b443727150100000000000000000000000000000000000000000000000000000004182a3a474c5c4e4a3e2d1b0700192e425567706755422e190400000000000000000000000000000000000000000000000000000d1d2f4050626b665e4c38240f001f34495e7489745e49341f0900000000000003111c3043546175867c665b4a3a2a1a0a000000000000000000000000000000000000050b0d0b05000000000000060c0e13181a1b1b1a18140f0b070000000000000000000000000003111c232f38404c515e66737c857f766960574b453832281d150a0200000000000000000000000000000003090b12120c090300000000000000000000000000000000011426365a6f8578634e38230e00000000000000000000081d32475d7287725d47321d000000000000000f1f30414f61697f8375635b4b44372f211e170f0b0801000202020001080b0f192028323a464c5e66787e68533d281300000000000000000000000d18202f383e4b4f5654606263646362605557514b443732281a100200000000000000000003172939464c4c473b2a180500000000000000000000000000060c181f22282832363739393736312727201d150a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4d5f676f605544311d110000000000000000000000000000000000000000000000000000010f1f3447596172645c4a36220d001b31465b7085705b46311b060000000000000000000000000000000000000000000000000008182a3b4c5e6b807b66513b2611001f34495e7489745e49341f09000000000000112131414b6072837e695e4c3d2d1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e37404c505e666f7c857f766a61574b453932281e160a020000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354728776614c36210c00000000000000000000081d32475d7287725d47321d0000000000000001122332434f61697d85796960554c4036332924201c141818171718151d20242c3538454b58616c7b8579634e39240e00000000000000000000000005121d242e373a36434a4c4e4f4e4d4b44373b3631271d150a0000000000000000000000000b1b29333637342a1d0d00000000000000000000000000000000040a0c13151d2022242322201d15120b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d8473604b3f2f1c0c000000000000000000000000000000000000000000000000000f1f32424c6177867a644e39240f001b31465b7086705b46311b06000000000000000000000000000000000000000000000000001325364759657b897c66513b2611001f34495e7489745e49341f0900000000000e1e2e3f4e606b80816c614f402f1f0f000000000000000000000000000000000000000000000000060c0e121617171614110d0b050000000000000000000000000000000000000000081c2e3f4b4f5e656f7b847f766a61574b463932281e160a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607588735846331f0a00000000000000000000081d32475d7287725d47321d000000000000000004152532434f5f6779867e73665e524c4639393530262e2d2c2d2d273135393c494d56606976818276635b4a36210c000000000000000000000000000009101b222525303537393a393835312726201d15090200000000000000000000000000000b171e21221f180d00000000000000000000000000000000000000000002090b0d0f0e0d0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4d5f6d82806b5d4b3a2a180400000000000000000000000000000000000000000000000a1b2d3d4f606f837e695c4a36220d001b31465b7086705b46311b060000000000000000000000000000000000000000000000000c1c304354627786807c66513b2611001f34495e7489745e49341f09000000000b1b2b3c4b5d687d8473604b423222120100000000000000000000000000000000000000000000090e192023282b2d2c2b2926221f180d0a040000040d13150d0b0500000000000000000e23374b5d656e7b8480766a61584b463932291e160a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e637885705b3a29170400000000000000000000081d32475d7287725d47321d00000000000000000007152532414d5c647580857b70686157534e4b4336434241424337444b4f545a636a757e857b6d61584a3d2d1a0700000000000000000000000000000000080d0f131c202224242422201d15110b08020000000000000000000000000000000000030a0c0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e30414b6175867b655847331f1402000000000000000000000000000000000000000000031628394a5c697e836f604f3e2d1b07001b31465b7086705b46311b0600000000000000000000000000000000000000000000000c1c2e3e4a6072847a7f7b66513b2611001f34495e7489745e49341f0900000008182939495a657b86766155443124140400000000000000000000000000000000000000000002121d242c35383d404242413f3b37342a211f170c031521282b2220190d0000000000000010253a4f657b8380766b61584c463a33291e160b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c816c57422c170000000000000000000000081d32475d7287725d47321d00000000000000000000061423313d4a56606a7881857d766e696460545a58575757585a5560646970787f867e74665e4c463a2d1f0f000000000000000000000000000000000000000000070b0d0e0f0e0d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812181b14120c03000000000000000000000000000000000000000000000000000001131e324657647a8777614c423220100000000000000000000000000000000000000000000e1e32455764798777614c4232201000001b31465b7086705b46311b06000000000000000000000000000000000000000000000417293a4b5c6a7f7f6a7f7b66513b2611001f34495e7489745e49341f09030301142636465762788779635847372715060000000000000000000000000000000000000000000a151d2f383c494d525657575654504c473b37332a1e1725333c4037342b1d0d00000000000014293e54697e827a6f655d504b3f372e221b1007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737566b807e68533e29130000000000000000000000081d32475d7287725d47321d000000000000000000000005131f2d38454b5a626c777e85837e7975706f6d6d6c6c6d6f7075797f85857d756960564c4033291b0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f1316181919181714100b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a252d3029271f14060000000000000000000000000000000000000000000000000000031629394a5c697e846f604f3e2d1b0b000000000000000000000000000000000000000e1e30414b6075867b6558473324140200001b31465b7086705b46311b06000000000000000000000000000000000000000000010f1f334658647a84736a7f7b66513b2611001f34495e7489745e49341f181818181c3043546175857b655b493a2919090000000000000000000000000000000000000000000a1a2832404c515a63676b6c6c6b69666259544c473a3329334450554d483b2b1905000000000012273b4f60697680847b6f655d4f4b3f372e221b1007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556f8479644f3a240f0000000000000000000000081d32475d7287725d47321d000000000000000000000000010f1a28323c484d59626970787d828585848382818282848485817d776f6760564b45382f1f170b000000000000000000000000000a141a1c0d0b05000000000000000000000000000000000000000000090f1118161006000000000000000000000000000000000001080b151d2025282c2d2e2e2e2c2925211e160b09020000000000000000000000000000000000000000000000000000000000000000000000000000011a2a3841453f3b3224140000000000000000000000000000000000000000000000000000000b1b2d3e4f606e837e695c4a39281603000000000000000000000000000000000009192b3c4d5f6d82806b5d4b3a2a18060000001b31465b7086705b46311b060000000000000000000000000000000000000000000f1f31424c61768577626a7f7b66513b2611001f34495e7489745e49342e2e2e2e2e31424b6072837e685d4b3d2c1c0c00000000000000000000000000000000000000000009192838454b5e6670787d808281807e7b77706961584c46393c50626a62594834200b00000000000c1f32424f58616b7780847a6f655d4f4b3e362d221b1007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758875604b35200b0000000000000000000000081d32475d7287725d47321d00000000000000000000000000000a161e2b353b474c545a62686d70707678797979787670706c676159524b453831271a1204000000000000000000000000000e1c272f322220190d00000000000000000000000000000000000004121d24262e2b23180a00000000000000000000000000000009141d202731353a3e4143444443413e3b363228201d150a020000000000000000000000000000000000000000000000000000000000000000000000000f1f3848555a544f433218080000000000000000000000000000000000000000000000000000000f2032424c6176877a645746321e130000000000000000000000000000000001142637485a677c8573604b3f2e1c0c000000001b31465b7086705b46311b0600000000000000000000000000000000000000000a1b2d3d4e606e837b66596a7f7b66513b2611001f34495e7489745e49434343434343414e606b81816c604e3f2f231c110902000000000000000000000000000000000000021527374556606d7b85837e7a79797a7c8084857f766b61574c40556a8078624d37220d0000000000021424323a474c58616b7781847a6f645c4f4a3e362d211a0f07000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a846e5544311d080000000000000000000000081d32475d7287725d47321d000000000000000000000000000000020e19202a34373c494d52585b5861626364636361585b57524c473b3631271d150a00000000000000000000000000000a1c2c39434737342b1d0d000000000000000000000000000000000012222f383b433f3528180600000000000000000000000008131c26313537444b4f5356585959585653504b45383632281d150900000000000000000000000000000000000000000000000000000000000000000000071a2d3d55667069614f36251300000000000000000000000000000000000000000000000000000001141f334758657b8675614b41301e0e0000000000000000000000000000000c1d3144556278877862554431211100000000001b31465b7086705b46311b0600000000000000000000000000000000000000031628394a5b687e806b5e556a7f7b66513b2611001f34495e7489745e58585858585858595f687e8373604c473a3b372e201d150a0000000000000000000000000000000000081d31445560748283786f6965636465676b70777e868176665e4b586d8277624d37220d00000000000006141c29333a474c59626c7781847a6e645c4e4a3e362d211a0f06000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c556b807e6954372614010000000000000000000000081d32475d7287725d47321d0000000000000000000000000000000000060d181f222c35383d423a474c4d4e4f4e4d4c463a423d37342a201d150a020000000000000000000000000000001427394a565c4d483b2b1905000000000000000000000000000000091d2f404c5158534635231000000000000000000000000e18253037444b51556064686b6d6e6e6d6c69656056524b4538312719100200000000000000000000000000000000000000000000000000000000000000000c21364a5b70847f695443301c0700000000000000000000000000000000000000000000000000000004172a3a4b5d6a7f826d5f4d3c2c1909000000000000000000000000000c1c2e3f4b6073857c675a483727150300000000001b31465b7086705b46311b06000000000000000000000000000000000000000e1e32455763798574604b556a7f7b66513b2611001f34495e7489746d6d6d6d6d6d6d6d6e727d85766866615857504b3f3632281a1000000000000000000000000000000005182b3b4b607483806f635a54504e4f505256596169747d867c6b60556e8377624d37220d00000000000000000c171f2a333b474c59626c788283796e645c4e4a3d362d211a0f060000000000000000000000000000000000000000000000000000000000000000000000000b2034485a708678634e38230e000000000000000000000000081d32475d7287725d47321d00000000000000000000000000000000000000050b0e192023282d29333738393a39383633292c28221f180c090200000000000000000000000000000000001a2f4356687162594834200b0000000000000000000000000000000f24384c5e666d64533f2b1600000000000000000004121e2c36434a5560666e757a7d8182838383817e7a766f6760564b44372d201406000000000000000000000000000000000000000000000000000000000000031729394e6379868773604a35200e000000000000000000000000000000000000000000000000000000000c1c2e3f4b6073847d675a493727150200000000000000000000000417293a4b5d6a80816c5f4d3c2b19090000000000001b31465b7086705b46311b060000000000000000000000000000000000000e1e30414b60758578625544556a7f7b66513b2611001f34495f748983838383838383838383878b817f7d7b77706c655d534b45382e1c1308000000000000000000000000000b203448596a7f816c614d493c3b39393b3c3a474c55606776828073606f8477624d37220d000000000000000000040c181f2a343b484d5a626c788283796e635b4e4a3d352c21190e06000000000000000000000000000000000000000000000000000000000000000000000d22384d627786715b4935210c000000000000000000000000081d32475d7287725d47321d00000000000000000000000000000000000000000000060c0d1318171f212324242423211f1717120c0b0400000000000000000000000000000000000000001c32475c718678624d37220d00000000000000000000000000000011263b51667c836d58432e180000000000000000061422303c49546067747b8387837f7c7a79797a7b7e8286847c756960554a3e3124160800000000000000000000000000000000000000000000000000000000000a1e3346576c817d837b65503c2b190500000000000000000000000000000000000000000000000000000000111c30435462778778625544311d1100000000000000000000010f1f334758657b8675604b40301e0e000000000000001b31465b7086705b46311b0600000000000000000000000000000000000a1a2c3c4d5f6d827c675a4937556a7f7b66513b2611001f34495e74897878787878787878787878797a7b7d808485827a706960564b3e302518080000000000000000000000000d22374d62778776614c43352c25242425272a3437444b58616d7d82746f8477624d37220d0000000000000000000000040d181f2b343c484d5a626d788283796e635b4e493d352c20190e0600000000000000000000000000000000000000000000000000000000000000071a2d3d546a7f7f69543d2c1a06000000000000000000000000081d32475d7287725d47321d000000000000000000000000000000000000000000000000000000040a0c0d0e0f0e0e0c0a04000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b826d58432e180000000000000005142431404c5a63727c86827a726d69666463636466696d727981877e74645c4e4234261608000000000000000000000000000000000000000000000000000000000c21364c617688747b846e5a4835200a00000000000000000000000000000000000000000000000000000000011426364859667c8574604b3f2f1d0c0000000000000000000f1f31424c6176877963564532221200000000000000001b31465b7086705b46311b060000000000000000000000000000000002152738495a677d826c5f4d3c3f556a7f7b66513b2611001f34495e74897463636363636363636363636566676b6f757981857e74645c4a4336251808000000000000000000000014293f54697e806b5846332019100e0f1012181f26313a464c60687b83758577624d37220d00000000000000000000000000050d18202b353c494d5b636d798383796d635b4d493c352c20190e0400000000000000000000000000000000000000000000000000000000000c21364a5b718677624d38220f00000000000000000000000000081d32475d7287725d47321d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000002132331424e5e66788582776d645c5854514f4e4e4f5154585b636b7680867a69605144342616050000000000000000000000000000000000000000000000000000081c2f3f53697e816b738778624d382815020000000000000000000000000000000000000000000000000000000008182b3b4c5e6b81806b5d4c3b2a1808000000000000000a1a2c3d4e606e837e685b4a3828160400000000000000001b31465b7086705b46311b06000000000000000000000000000000000d1d31455663788575604b41303f556a7f7b66513b2611001f34495e7489745e4d4d4d4d4d4d4d4d4d4e4f5152565460646c767f867a6b60544336251300000000000000000000051b30455a708579644f3a29170600000000000409141d2933424e5d657b848777624d37220d000000000000000000000000000000050e19202b353c494d5b636e798383786d635b4d493c352b1f180c0000000000000000000000000000000000000000000000000000000417293a4e637985705a4835200b00000000000000000000000000081d32475d7287725d47321d0000000000000000000000000000000000000000000000000000000000000000070b0e11151617181715130f0b0801000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000000102131424e60687c867b6d62594f4b3e3f3c3a39393a3b3e3d4a4e58616b79857e6b62514433231300000000000000000000000000000000000000000000000000000e23384b5d71867863697e806b5645321d0900000000000000000000000000000000000000000000000000000000000d1d2f404b6074857b65594736251300000000000002152838495b687e836e604e3d2d1a0a0000000000000000001b31465b7086705b46311b060000000000000000000000000000000d1d2f404b60748579635645322a3f556a7f7b66513b2611001f34495e7489745e493838383838383838393a3b3d36434a4f57606978838072605443301c11000000000000000000081d33485d728876604b36210b0000000000000000010b171f313f4b5d657a8a77624d37220d0000000000000000000000000000000000050e19202c353d494e5b636e798382786d635a4d483c342a1c0c00000000000000000000000000000000000000000000000000000a1f3346586c817c67513c2b190500000000000000000000000000081d32475d7287725d47321d0000000000000000000000000000000000000000000000000000000000070b131c2023272a2b2c2d2c2b2824201c14080800000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000000b1b2e3f4e60687e8477655d4d483b372e2a272524242526292d363a474c5b637582806b625041301e0e00000000000000000000000000000000000000000000000005192b3b50657b846f5a61768775604b362010000000000000000000000000000000000000000000000000000000000000121d31455663788777615443301c1000000000000d1d32455663798676614c42311f0f000000000000000000001b31465b7086705b46311b06000000000000000000000000000008182b3b4c5e6b817e685b4a38282a3f556a7f7b66513b2611001f34495e7489745e4934232323232323232425262825303539454b5a626e808272604a3f2e18080000000000000000091e33495e7388735645321e09000000000000000000000413212f3f4b5c718677624d37220d00000000000000000000000000000000000000060e19212c353d4a4e5c646e7a8482786d625a4c473a2a1804000000000000000000000000000000000000000000000000011527374c61768674604b35200e0000000000000000000000000000081d32475d7287725d47321d00000000000000000000000000000000000000000000000000000008131c20253035383c3f40424241403d39353026231c11080000000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000000031729394b5d687e847561594b3f342b221b14110f0e0e0f11141a2129333d4a57607382806b5f4d3c2b190600000000000000000000000000000000000000000000000b203448596e837b6651586d827d67523e2d1b07000000000000000000000000000000000000000000000000000000000002152738495a677d8472604a3e2d1b0b0000000d1d2f404b6074867a65584733241401000000000000000000001b31465b7086705b46311b0600000000000000000000000000011426364859667c836e604e3d2d1a2a3f556a7f7b66513b2611001f34495e7489745e49341f0e0e0e0e0e0e0e101112131c2028323c484d626b80806b5d4b3626140100000000000000091e33495e7388735947341f0a00000000000000000000000311212e3e5c718777624d37220d000000000000000000000000000000000000000000060f1a212d363e4a4e5c646f7a8482786c615947341f0a000000000000000001010000000000000000000000000000081d314455697f7e695544311d080000000000000000000000000000081d32475d7287725d47321d0000000000000000000000000000000000000000000000000004121825303536434a4d51545657575755524e4b4336372e231c1103000000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000000000a1e334657657b86766157473b2e20180d080000000000000000070c171f2d3945556073847d675a4835201100000000000000000000000000000000000000000000021527374d62778774604b4f647985705c4a36220c0000000000000000000000000000000000000000000000000000000000000a1a2c3c4d5f6d827f695c4a392917030008182b3b4c5e6c817f6a5d4b3a29170600000000000000000000001b31465b7086705b46311b06000000000000000000000000000c1c30435462778576614c42311f152a3f556a7f7b66513b2611001f34495e7489745e49341f0900000000000000000000070b161e2b34444b6073847b655443301c0800000000000000071d32475c728777614c382816090000000000000000000000031c32475c718777624d37220d0000000000000000000000000000000000000000000000060f1a212d363e4a4f5d656f7a848177614c37220c0000000000060b0d16160e0c0600000000000000000000021628384b60748776614c372614010000000000000000000000000000081d32475d7287725d47321d0000000000000000000000000000000000000000000000000c171f3036434a50546063666a6b6c6d6c6a686460544f4b3f372e1e160b0000000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000006192c3c4b61758779635846392a1d1105000000000000000000000000040f1b2837445561778678624d3f2f1c09000000000000000000000000000000000000000000081d3144556b807f6954434a5c708579644f3a2917040000000000000000000000000000000000000000000000000000000000000e1e30414b6075867a645746331e13011426364859667c8473604b3f2e1c0c0000000000000000000000001b31465b7086705b46311b060000000000000000000000000c1c2e3f4b6073847a645846332414152a3f556a7f7b66513b2611001f34495e7489745e49341f09000000000000000000000000030d192030435463798673604b35200b0000000000000002172c42576c817d6856453227191008000000000000000000071c32475c718777624d37220d0000000000000000000000000000000000000000000000000007101b222e363f4b4f5d656f7b7e69543e2914000000000e1920232b2b2321190e000000000000000000091e324556687d806a5746331909000000000000000000000000000000081d32475d7287725d47321d00000000000000000000000000000000000000000000000d1c2a33404d5460656d74787c7f80818281807d79756d655d504b3f32291b0f01000000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180000000c2035495a6c817f6a5b4a3a291b0c000000000000000000000000000000000a1927374759667c846f5d4c38230f0000000000000000000000000000000000000000000b20364b60758777614c363e52677d826d5847331f0800000000000000000000000000000000000000000000000000000000000000131e32455763798675614b41311e0e1c30435462778777625443302110000000000000000000000000001b31465b7086705b46311b06000000000000000000000004172a3a4b5d6a7f7f695c4b3a291706152a3f556a7f7b66513b2611001f34495e7489745e49341f09000000000000000000000000000005142636495b6d827c665138271502000000000000000e23394e63798675604b44372d231c110b09020000000000071c32475c718777624d37220d00000000000000000000000000000000000000000000000000000007101b222e373f4b505d6569614f3b27120000000e1e2b3538404138352c1e0e00000000000000031729394b60758676614b39291700000000000000000000000000000000081d32475d7287725d47321d000000000000000000000000000000000000000000000d1d2b3a474c5f67737b8287837f7c7a7978797b7e8185827a6f655d4b46392d1f0f010000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000004172a3a4d63788774604b3d2d1c0c00000000000000000000000000000000000009192a3a4d5e6f847b65503d2d1a0700000000000000000000000000000000000000071a2d3d52677c826d584733364b60758776614c36251300000000000000000000000000000000000000000000000000000000000000031628394a5b687e826d5f4d3c2c1b2e3e4b6073847c66594836261402000000000000000000000000001b31465b7086705b46311b060000000000000000000002101f334758657b8472604a3e2e1b0b00152a3f556a7f7b66513b2611001f34495e7489745e49341f0900000000000000000000000000000008182c3d50657a846e5645311d09000000000000000c21364a5b6b80816c60554a3e372e25201d1513100d0b05001c32475c718777624d37220d000000000000000000000000000000000000000000000000000000000007101b222e373f4c50544f42321f0c00000d1d2b3c494d56564d493c2c1e0e000000000000081e334657697e7e695746331b0b00000000000000000000030a0c0d0d0d0d1d32475d7287725d47321d0000000000000000000000000000000000000000000c1c2b3b4858616e7c86847c756e6a666463636465686c707981847a6d61574a3d2d1f0f0000000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000a1f3347586d827d685645311f0f00000000000000000000000000000000000000000c1c30404f647a85705b4a36210c000000000000000000000000000000000000000c21364a5b708579644f3a2a3245566b807e695443301c07000000000000000000000000000000000000000000000000000000000000000a1b2d3d4e606e837d675b493829394b5c6a7f816c5e4c3b2b180800000000000000000000000000001b31465b7086705b46311b0600000000000000000000102032424c617686776154433020100000152a3f556a7f7b66513b2611001f34495e7489745e49341f09000000000000000000000000000000000f20354b60758875604b36200b00000000000000071a2d3d4b6073828174645c504b3f3a3632282825221f181b1c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000008111c232f383b3e3b322414020005182b3b495a626b6b635b493c2c19060000000008182d3e4c61768675604b392917000000000000000000000b161e21232323232332475d7287725d47321d00000000000000000000000000000000000000000417293a4859627683867a6f67605554514f4e4e4f5053575b636c77828275635b4a3d2c1d0d00000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800000c21374c61768875604b382715010000000000000000000000000000000000000000001222374b5d718679634e39240e0000000000000000000000000000000000000417293a4e637986715c4a361c28384d62788773604a35200e00000000000000000000000000000000000000000000000000000000000000000f1f31424c61768679635645334657647a8574604b402f1d0d0000000000000000000000000000001b31465b7086705b46311b060000000000000000000b1b2d3e4f606e837b655947362513020000152a3f556a7f7b66513b2611001f34495e7489745e49341f0900000000000000000000000000000000081d314455708579634e39240e00000000000000000f1d314455607280857a6e655d56504b45383d3a37342a302e32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000008111c232629271f140600000b203448596278808079635b4935210c000000011426364a5c6c817c675645321b0b0000000000000000000b1b293236383838383838475d7287725d47321d00000000000000000000000000000000000000000a1f3346586278868173655d514b44373c3a3939393b3e3d4a4e59626d7c8679635b493b2b1808000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000215273753687e816c5645321a0a00000000000000000000000000000000000000000000081b2e3f53687e816b563c2b190600000000000000000000000000000000000a1f3346586c827d68523e2e1b2035485a6e847b66503c2b19060000000000000000000000000000000000000000000000000000000000000001141f334658647a8574604b414c61768679635645322212000000000000000000000000000000001b31465b7086705b46311b060000000000000000031629394a5c697e806b5d4b3b2a1808000000152a3f556a7f7b66513b2611001f34495e7489745e49341f090000000000000000000000000000000001152737586d827b66513c26110000000000000000011426374454606b7a85837a716b65605657534f4c473b454442475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000000000080e1014120c020000000d22374d62778995968a79634d38230e000000081c3043546479846f5f4d38281500000000000000000003162939464b4d4d4d4d4d4d4d5d7287725d47321d000000000000000000000000000000000000000a1a30414c6176877e6b60554b3f353127272524232426292d363b484c5e66798679635948362513000000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800081d3144556f847a65503828160000000000000000000000000000000000000000000000001022374d627787725a4935200b00000000000000000000000000000000001325364c61768875604b362110192b3c50667b846f5a4935200a00000000000000000000000000000000000000000000000000000000000000000417293a4b5c6a7f816b5e4d5f6d827d685b4938281504000000000000000000000000000000001b31465b7086705b46311b0600000000000000000e1e324657647a8473604b3f2f1d0c00000000152a3f556a7f7b66513b2611001f34495e7489745e49341f090000000000000000000000000000000000172c41576c817d67523d281200000000000000000009192636434b5c64707a8386807a75706c686562595c5b5957565c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a7a895806a55402b150000000b20354b60738578634d41301a0a0000000000000000000a1e3246576162626262626262627287725d47321d000000000000000000000000000000000000021628384d5f6f83806b604b44372e201d15110f0e0e0f10131a212b34404d5b647a8678625443301c0b0000001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000b20364b60748975604b36200b0000000000000000000000000000000000000000000000000b20344859718678624d38230d00000000000000000000000000000000071c304354697e816b5645321e090e20354a60738778624d3828160200000000000000000000000000000000000000000000000000000000000000000c1c2e3e4a6072847b665a677d826d604e3d2c1a0a00000000000000000000000000000000001b31465b7086705b46311b06000000000000000e1f31414b617585786255443121110000000000152a3f556a7f7b66513b2611001f34495e7489745e49341f090000000000000000000000000000000002172c41576c817d67523d281200000000000000000000091826303e4b4f5d656d767c828685817d7a777171706e6d6b6a718677624d37220d0000000000000000000000060c0d121517181715130e0b0700000000000000000000000000000000000000000012283d52677d92a3a4947e69543f291400000014293e53697e7f6a5a49352313000000000000000000000c21364b617678787878787878787887725d48321d000000000000000000000000000000000000091e324556677d8572604a4231271911080100000000000000070d1820303d4a5c677d8572604a3929160300001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e18000f24394f647a85705544311d0800000000000000000000000000000000000000000000000005182b3b576d827c67523c2712000000000000000000000000000000000b20354a60738778634d38281603071c304354697e806b5645321e09000000000000000000000000000000000000000000000000000000000000000000101c3043546277867763788676614c41311f0f0000000000000000000000000000000000001b31465b7086705b46311b060000000000000a1a2c3d4e5f6d827c665a48372715030000000000152a3f556a7f7b66513b2611001f34495e7489745e49341f090000000000000000000000000000000000132536586d827c66513c2711000000000000000000000008141c2e373f4b4f5761676c71767b7e8285868685838280807f8877624d37220d0000000000000000050b0e192023272a2c2d2c2a2924201c1308050000000000000000000000000000000000000b21364b60748592928676614c36210c00000012273d52677d74604b3c2c19050000000000000000000013283d53687d818181818181818181816c56412c170000000000000000000000000000000000000b21364b60758879635443301d150900000000000000000000000005121f2d3e4d5f6e837d685746321e0a00001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e180012283d52677d816c57372715020000000000000000000000000000000000000000000000000014293e53697e806b55402b1600000000000000000000000000000005192b3c50657b846f5a49351a0a00001325364c61768775604b362110000000000000000000000000000000000000000000000000000000000000000000001325364759657b8475857a645746332313010000000000000000000000000000000000001b31465b7086705b46311b06000000000002152838495b687d816c5e4d3c2b1909000000000000152a3f556a7f7b66513b2611001f34495e7489745e49341f0900000000000000000000000000000000071c304354708579644f39240f00000000000000000000000001101b222e3739464b5157586165696c6f71717678797a7b7c8777624d37220d000000000000020d1820222c35383c3f414241403e3935302520180d0100000000000000000000000000000000091e32455660757c7d75615746331e0a0000001025394d5f67605645321e0e000000000000000000000011263a4e60686c6c6c6c6c6c6c6c6c6c62513e29140000000000000000000000000000000000061a2c3d53687e826d5b4936251301000000000000000000000000000001102030414e63788876614b36210c00001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800152a40556a7f7f69543f2a14000000000000000000000000000000000000000000000000000011263b51667b826d58432e180000000000000000000000000000000b2034485a6e837b66513c2c19000000081f3347586d827d67523e2d1b0700000000000000000000000000000000000000000000000000000000000000000008182a3b4c5e6b80867f695c4a39291705000000000000000000000000000000000000001b31465b7086705b46311b0600000000000d1d32455663798574604b40301e0e00000000000000152a3f556a7f7b66513b2611001f34495e7489745e49341f09000000000000000000000000000000000b20354a60748876614b36210c000000000000000000000000000007111c232832363c3a474c5054575a5c576162646566718777624d37220d00000000000a161e2b34373c494d525556575755534e4a4336342b1d1409000000000000000000000000000000021628384556606767615746392917030000000a1e30414d524b453828150000000000000000000000000b1e31424e5357575757575757575756514434220e00000000000000000000000000000000000c2135495b718679634e3d2c18080000000000000000000000000000000002132135495b6d827d685338281602001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800172c42576c817c67523d271200000000000000000000000000000000000000000000000000000f24394f6479846f5a45301a0000000000000000000000000000021527384d62778774604b35200e0000000417293a4f647985705c4a36220c00000000000000000000000000000000000000000000000000000000000000000009192b3c4d5e6c81857d685b4a38281603000000000000000000000000000000000000001b31465b7086705b46311b06000000000d1d30404b607485796356453222120000000000000000152a3f556a7f7b66513b2611001f34495e7489745e49341f0900000000000000000000000000000004182a3b4e647985705746321e0a00000000000000000000000000000000080b161e21272a33373b3e424539464c4d4f505c718777624d37220d000000000e1a28323b484c555a62676a6c6d6c6a686360544d483b3126190c0000000000000000000000000000000a1a2838454b52524b4639291b0b0000000001132330393d3632281a0a000000000000000000000000021324313a3d414141414141414141413e3426160500000000000000000000000000000000000e23394e637885705b49361f0f000000000000000000000000000000000000061a2c3d50657a85705645321e09001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800182d43586d827c66513c271100000000000000000000000000000000000000000000000000000e23384e637885705b46301b0000000000000000000000000000091d3145566b807f6a5443301c08000000000c22364a5c708579644f3a2a17040000000000000000000000000000000000000000000000000000000000000001152737485a667c82768579635645321e13000000000000000000000000000000000000001b31465b7086705b46311b0600000009192b3c4c5e6c817d685b49382816040000000000000000152a3f556a7f7b66513b2611001f34495e7489745e49341f0900000000000000000000000000000a161f3447596b817e69543929160300000000000000000000000000000000000003090c12171f2126292d302933363839475c718777624d37220d000003111e2c38454b59626b71787c7f8182817f7e79746c62594b4437291c0c0000000000000000000000000000000a1a2832363d3d3632281b0b00000000000005131e2527201d150a000000000000000000000000000006131e26282c2c2c2c2c2c2c2c2c2c2922160800000000000000000000000000000000000014293f54697e7f6a553d2c1a01000000000000000000000000000000000000000e20354b60758975604b36210b001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00000000000000000000000000000b20364b60758777614c3626140100000000071b2d3e52677d826d5847331f08000000000000000000000000000000000000000000000000000000000000000d1d3144556278867663798575604b41301e0e0000000000000000000000000000000000001b31465b7086705b46311b06000001142637485a667c826d604e3d2c1a0a000000000000000000152a3f556a7f7b66513b2611001f34495e7489745e49341f0900000000000000000000000708131c2832434c61778876614c36210c0000000000000000000000000000000000000000000000040a0c1014171a171e212332475c718777624d37220d000011212f3c4956606b778087847f7b7a79797b7d828581776a6055473a2919090000000000000000000000000000000a161e212727211e160b0000000000000000010a10120b090200000000000000000000000000000000020b111317171717171717171717140e05000000000000000000000000000000000000001a2f455a6f847a644f3a250f0000000000000000000000000000000000000000081d31445570857a644e39240f001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00000000000000000000000000071a2d3e52677d826d58473318080000000000001020364b60758776614c3626140100000000000000000000000000000000000000000000000000000000000d1d2f3f4b6073857a645b687d826c5f4d3c2c190900000000000000000000000000000000001b31465b7086705b46311b0600000c1d31445562788575614b41311f0f00000000000000000000152a3f556a7f7b66513b2611001f34495e7489745e49341f0f0f0f0f0f0f0f10111213161a21253039454b626e837e695846331f0a000000000000000000000000000000000000000000000000000000000200030a0c1d32475c728777624c37220d00081c2f3f4b5a627480887f776f6a6665636466686d707b8480736158473727150200000000000000000000000000000003090b12120c090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e6379645c4b37220d000000000000000000000000000000000000000001152737586d827b66513b2611001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000000000000000000000d21364a5c70857a644f3a2a1800000000000000091d3245566b807f695443301c080000000000000000000000000000000000000000000000000000000008182a3b4c5d6b807f6a5c4e606e837c675a4937271502000000000000000000000000000000001b31465b7086705b46311b06000c1c2f3f4b6073847a6457463323130100000000000000000000152a3f556a7f7b66513b2611001f34495e7489745e49342424242424242424252627282c2d3636434a57606c808372604a3a291704000000000000000000000000000000000000000000000000000000000000000004172a3a5e738876604b36210b000e23374b5d65788681766961585551504e4f5052575e66707f8476615544311d0e000000000000000000000000000000000000000000000000000000000000000000070d0f141414141414141414140d0b050000000000000002080b08020000000000000000000000000000000000000000000000000000000000000c2135495b635b4b3e2e1b08000000000000000000000000000000000000000000172d42576c827c66513c2711001c32475c718777624d37220d00000000000000000000000000000011263b51667b836d58432e1800192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000000000000000000000417293a4e647986715c4b371c0c00000000000000021528384d62788774604b35200e000000000000000000000000000000000000000000000000000000001325364759657b8473604b424c61768678625544311d12000000000000000000000000000000001b31465b7086705b46311b0008182a3a4b5d6b807e695c4a392917050000000000000000000000152a3f556a7f7b66513b2611001f34495e7489745e493939393939393939393a3b3c3e413d4a4e54606775818374605443301c0c00000000000000000000000000030c12140c0a04000000000000000000000000000a1f3347587489745745321e090010253b50657b877c6c61574c473a3c3a39393b3d404c5061697c8474604b3c2b1905000000000000000000000000000000000000000000000000000000000000010f1a2124292929292929292929292220180d000000000009151d201d15090000000000000000000000000000000000000000000000000000000000061a2c3d494e493d2e201000000000000000000000000000000000000000000001142636596e837a65503a2510001c32475c718777624d37220d00000000000000000000000000000011263c51667b826d58432d1800192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000000000000000000000a1f3346586d827d68523e2e1b0000000000000000000a2035485a6e847b66513c2c190600000000000000000000000000000000000000000000000000000c1c30435462778677625443334658647a8574604b402f1d0d0000000000000000000000000000001b31465b7086705b46311b001325364759657b836e614f3e2d1b0b000000000000000000000000152a3f556a7f7b66513b2611001f34495e7489745e4e4e4e4e4e4e4e4e4e4e4f505153565a5b636b737d867e72605645362513000000000000000000000000000714202729211f170c0000000000000000000000000c21374c617688735d392816030010253a4f657b78665e4b4639332a2625242426282f38434f5e697e806b5a4835200b0000000000000000000000000000000000000000000000000000000000000f1f2d36393e3e3e3e3e3e3e3e3e3e37342b1d0d00000009192731363127191507000000000000000000000000000000000000000000000000000000000f1f2c3538352c1f1002000000000000000000000000000000000000000000081c304354708578634e39230e001c32475c718777624d37220d00000000000000000000000000000012273d52677c816c57412c1700192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000000000000000000001325364c61768875604b36211000000000000000000005192b3c50667b846f5a4935200a000000000000000000000000000000000000000000000000000c1c2e3f4a6072847c66594836293a4b5c6a7f806b5e4c3b2b180800000000000000000000000000001b31465b7086705b46311b0b1c30435461778676614c4232201000000000000000000000000000152a3f556a7f7b66513b2611001f34495e7489746464646464646464646464656667686b6f7179808681776960544538281808000000000000000000000000031425323b3f3733291c0d000000000000000000000010263b50657b846f59442f1a00000e22374b5d65635b4c4033291f1811100e0f11131c2332404a60738578624d38220e0000000000000000000000000000000000000000000000000000000000071a2d3d4a4e545454545454545454544d483b2b18050002152737444b443732251500000000000000000000000000000000000000000000000000000000010f1a2123211a0f01000000000000000000000000000000000000000000000b20354b60758876604b36210b001c32475c718677624d37220d00000000000000000000000000000013293e53687e806b55402b1600192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000000000000000000071c304354697e816b5645321e09000000000000000000000e20354a60738778624d3828160200000000000000000000000000000000000000000000000417293a4b5d6a7f816b5e4c3b2b1b2e3e4b6073847c66594836261401000000000000000000000000001b31465b7086705b46311b1b2d3e4a6072847b6558473324140200000000000000000000000000152a3f556a7f7b66513b2611001f34495e74897a79797979797979797979797a7b7c7d818486837c766c61584a4336281a0a000000000000000000000000000c2032434f544c473a2b1d10000000000000000000071a2d3e556a7f806b55402b160000081b2e3f4b4f4e493d301e170b0400000000000009141c304354667c816c563c2c1906000000000000000000000000000000000000000000000000000000000d21364a5c646969696969696969696962594834200b00081d31445560554f43321a0a0000000000000000000000000000000000000000000000000000000000060c0e0c060000000000000000000000000000000000000000000000031628394f647a846f5645321e09001c32475c718677624d37220f000000000000000000000000000000152a40556a7f7e69543f291400192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00000000000000000000000b20354a60738778634d3828160300000000000000000000071c304354697e806b5645321e0900000000000000000000000000000000000000000000010f1f334758647a8574604b402f1d101c30435462778677625443301c11000000000000000000000000001b31465b7086705b46311729394a5c697f806a5d4b3a2a17060000000000000000000000000000152a3f556a7f7b66513b261100172c41566c81818282828282828282828281817f7e7d7a76716e6760564c473a3025180a000000000000000000000000000012273b4f61696158483b2e1c1308010000000000031221364a5c71867a654f3a251000000010212e373a38352c1f1203000000000000000000001325364b607586715a4935200c000000000000000000000000000000000000000000000000000000000f24394e647a7e7e7e7e7e7e7e7e7e7f77624d37220d000b20364b60746a614f382815020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002121e3246576b807e695438281603001c32475c718777624d3d2d1d0d0000000000000000000000000005192b3c596e837b65503b261000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000000000000000005192b3c50657b846f5a49351a0a0000000000000000000000001325364c61768875604b362110000000000000000000000000000000000000000000000f1f31424c61768679635645312212011426364859667c8473604b3f2e1c0c0000000000000000000000001b31465b7086705b46311e334657647a8473604b3f2e1c0c000000000000000000000000000000152a3f556a7f7b66513b26110014293e51626c6c6c6c6c6c6c6c6c6c6c6c6c6b6a696865615859514b4538332a1c130800000000000000000000000000000014293f54697f7662594a3e30251c140d0b080b0d161e31414e64798773604a35200b00000002101b222523211a0f010000000000000000000000081d3245566f8478634d38230e0000000000000000000000000000000000000000000000000000000014293e53697e817b7b7b7b7b7b7b7b7b74604b36200b00142a3f54697f7f6a5645321d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109151d30404b61758676614c36210c00001c32475c71867e685c4a3b2a1b0d0000000000000000000000000b2035485a728776614c37210c00192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000000000000000b2035485a6e847b66513c2c1900000000000000000000000000081f3347586d827d68523e2e1b0700000000000000000000000000000000000000000b1b2d3d4e606e837d675b49382715040008182b3b4c5e6c817f6a5d4b3a2a170400000000000000000000001b31465b7086705b463131424c6176857762554431211100000000000000000000000000000000152a3f556a7f7b66513b2611000e223444515657575757575757575757575756555453504c473a3c3632281f180c000000000000000000000000000000000011263b50667b8677645c4a4336302622201d20222832404d5f6f847e695443301c070000000000080e100e0c060000000000000000000000000002152838576c827a65503a25100000000000000000000000000000000000000000000000000000000014293e53697e7e696565656565656565605645311d09000c21374c61768775604b362010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b141c2731404c5e6b817f6a5746331e0a00001c32475c718685796459483a2b1d1002000000000000000000021528384d627886715847331f0a00192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000000000000021528384d62788774604b35200e000000000000000000000000000417293a4f647986715c4a36220c00000000000000000000000000000000000000031628394a5c697e826d5f4d3c2c1a0a0000000d1d2f404b6074857b655847331f1402000000000000000000001b31465b7086705b462c3d4e606d827c6659483726140300000000000000000000000000000000152a3f556a7f7b66513b261100051626343e4142424242424242424242424241403f3d3a37332927211e160a040000000000000000000000000000000000000f23384c5e667b867a6960544b4336383531353739454b5e677d8673604b3625130000000000000000000000000000000000000000000000000000162b40566b807c67513c27120000000000000000000000000000000000000000000000000000000014293e53697e7e6954505050505050504b4538271502000a1f3347586d827d67523e2e1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f111214131c20263037444b5e667c8574604b3929170300001c32475c71867984776258483b2d1d150a0200000000000005121d3245566a7f7f69543a29170400192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000000000000091d3245566b807f6a5443301c0800000000000000000000000000000c22364a5c708579644f3a2a18040000000000000000000000000000000000000e1e32465764798675614b41311e0e0000000000121d31455663798676614c42322010000000000000000000001b31465b7086705b4638495b687d816c5e4c3b2b19090000000000000000000000000000000000152a3f556a7f7b66513b26110000081622292c2d2d2d2d2d2d2d2d2d2d2d2c2c2a292825211f17120b09030000000000000000000000000000000000000000091c2f404c5d6578857e73666054514d4b444b4c5057606b7c87796355443118080000000000000000000000000000000000000000000000000008182c3c576d827a65503b25100000000000000000000000000000000000000000000000000000000014293e53697e7e69543e3b3b3b3b3b3b3631271a0a00000417293a4e637986705c4b37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222526272925303536434b55606a7c8778625645311b0b0000001c32475c7186787a847662594a3e31271e160e0b090a0c0e181f2f3f4b60758777614c37220c0000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000000000000000b20364b60758877614c362614010000000000000000000000000000071b2d3e52677d826d5847331f0800000000000000000000000000000000000e1f30414b6175867a64574633231300000000000002152738495b687d836f614f3e2d1b0b0000000000000000001b31465b7086705b46455663798574604b402f1d0d000000000000000000000000000000000000152a3f556a7f7b66513b2611000000050e141717171717171717171717171716151413100c0a040000000000000000000000000000000000000000000000000011222f3f4b5a637480857b746c666260556062656c75808779635b49372614000000000000000000000000000000000000000000000000030b172536495a708478634d38230e0000000000000000000000000000000000000000000000000000000014293e53697e7e69543e292626262625201d150a000000000c21364a5b70857a644f3b2a18050000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a3b3c3e36434a4e546067747f8678625948382715000000001c32475c718777657b8477645c4b4538322823211e1f21232a34404c5d6b80806b5947341f0a0000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000000000000071b2d3e52677d826d5847331808000000000000000000000000000000001020364b60758877614c362614010000000000000000000000000000000a1a2c3d4d5f6d827f695c4a39291705000000000000000a1a2c3d4e5f6d827e695c4a3929170300000000000000001b31465b7086705b414b6074857863564531221200000000000000000000000000000000000000152a3f556a7f7b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000411212e3c4955606a788186817b77757075777a81878075635b493d2c190900000000000000000000000000000000000000000001080b161e29334354637886715b4935210c0000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914101010100b09020000000000071a2d3d51677c826d5947341f09000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b4f515254565460646a747c868275625a483b2b1a0a000000001c32475c71877762657a857a6a60564b45383836323336383b474c5e667b8674604b3a2a18040000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00000000000000000d22364a5c70857a644f3a2a180000000000000000000000000000000000091d3245566b807f695443301c08000000000000000000000000000002152838495b677d8472604a3e2d1b0b0000000000000000000e1f31414b6175867a645746331e1301000000000000001b31465b7086705b4d5f6c817d675a493827150400000000000000000000000000000000000000152a3f556a7f7b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111e2c37444b5a626c767b808385868584817b766b6157493d2c1f0f0000000000000000000000000000000000000003090b151d20283239464c6072837d68533c2c19060000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000f20354b60748777624c3727150100000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5d646667696b6e7479808683796d6157483c2b1d0d00000000001c32475c718777625c6478847f74686056524e4b45464c4e5259626c7c8679635645321c0c000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000000000417293a4f647986715c4b371c0c0000000000000000000000000000000000021528384d62788774604b35200e00000000000000000000000000000d1d324556637987776154433020100000000000000000000000131e334657647a8675614b42311f0f000000000000001b31465b7086705b5a677c826d5f4d3c2c1a0a0000000000000000000000000000000000000000152a3f556a7f7b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1927313c484d5660666b6e7070706e6c6660574b46392c1f0f0100000000000000000000000000000000040a0c161e2127313539464b57616e80836e604e3a1e0e000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000081d3144556a7f7f6a5544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647b7b7c7e818484827d766e635b4b46392b1e0e0000000000001c32475c718777624d5962727d857d756d67636057586163686e77818678635b4938281500000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000000000a1f3347586d827d68533e2e1b000000000000000000000000000000000000000a2035485a6f847b66513c2c19060000000000000000000000000d1d30404b6074857b655947362513020000000000000000000000031729394a5c697f826d604e3d2c1a0a0000000000001b31465b7086705562788575614b41301e0e000000000000000000000000000000000000000000152a3f556a7f7b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2b3538454b5156595b5b5b5957514b453932281b0f01000000000000000000000000000000080b171f2128323637444b5057616976828375614b42311e00000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000011527374c61778774604b352010000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687e80828488817c756b62594e493d32291b0e000000000000001c32475c718777624d48546068757e85827d7876707076787d83877d736259493d2c1a0a00000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000000001325364c61768875604b3621100000000000000000000000000000000000000006192b3c50667b846f5a4935200a000000000000000000000009192b3c4c5e6c81806b5d4c3b2a1808000000000000000000000000000b1b2d3e4a6072847d685b493828160200000000001b31465b7086706073847964574632231300000000000000000000000000000000000000000000152a3f556a7f7b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e19202832363b404446464644423c3632281e160b00000000000000000000000000000007111c2329333639454b515560656c767e877f7261574632241302000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000091f3447596d827c67523e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000011263a4e60686b6d6f757a7f868177696055463a2a1d0d000000000000001c32475c718777624d36434a56606970787e8284858584837f7974686054483b2c1f0e0000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000000071c304354697e816b5645321e0900000000000000000000000000000000000000000e20354a60738778634d3828160300000000000000000001152737485a667c8574604b3f2f1d0c000000000000000000000000000000101c30435462778779635645321e1200000000001b31465b7086706b807e695c4a3928160500000000000000000000000000000000000000000000152a3f556a7f7b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060a161e21262b2e3031302f2c26211e160a030000000000000000000000000000010f1a212e373a464c525760666d757b818781776a6054463928160600000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000004182a3a4f647985705c4a36220c000000000000000000000000000000000000000000000000000000000000000000000000000b1e31424e5356585560646a747c847f736158483b2a1a0a0000000000001c32475c718777624d373038454b545b63686d6f70706f6d696460544b43362b1d0e000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000000000b20354a60738778634d382816030000000000000000000000000000000000000000071c304354697e816b5645321e090000000000000000000c1d3144556278877862554431211100000000000000000000000000000000001325364759657b8674604b41301e0e000000001b31465b7086707b836e604e3d2d1b0b0000000000000000000000000000000000000000000000152a3f556a7f7b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b1116191b1b1b1917110b090300000000000000000000000000000005131f2d363f4b505861676e767c8287837c756b62594b4336281b0b0000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000c22364a5c708579644e3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000021324313a3e4037444b4f556067747f84766259483828160200000000001c32475c718777624d37222832363d494e53585a5b5b5a58544e4a43363026180d00000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000006192b3c50667b846f5a49351a0a000000000000000000000000000000000000000000001325364c61768875604b36211000000000000000000c1d2f3f4b6073857d675a4937271503000000000000000000000000000000000008182a3b4c5e6b80816c5f4d3c2b19090000001b31465b7085778576614c42311f0f000000000000000000000000000000000000000000000000152a3f556a7f7b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051323313d4a4e5d656e767d8388827c756e6760564d483b3026180b000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000071b2d3e52677d826d5847331f090000000000000000000000000000000000000000000000000000000000000000000000000006131e26282b27313537444b55606a7b8577625645321e0f00000000001c32475c718777624d3722161e212c36393e4245464645433f393530251c14080000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00000000000b2035485a6f847b66513c2c190000000000000000000000000000000000000000000000081f3347586d827d68533e2e1b0800000000000004182a3b4b5d6b80826d5f4d3c2c1909000000000000000000000000000000000000000d1d2f404b6074857c675a483727150200001b31465b7085847a64584733241401000000000000000000000000000000000000000000000000152a3f556a7f7b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141a1c0d0b05000000000000000000000000000000000000000000000000000000000000132331414e5b636f7a8387817a756d666056514b4538342b1c140800000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000001020364b60758777614c3726140100000000000000000000000000000000000000000000000000000000000000000000000000020b111316151d20263137444b5d657b8474604b3d2d1a07000000001c32475c718777624d37220d090f1a2123292d3030302f2e2a24201c130801000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00000000021528384d62788774604b35200e00000000000000000000000000000000000000000000000417293a4f647986715c4b37220c0000000000000b1f344759657b8675614b41301e0e000000000000000000000000000000000000000000111d31445563788778625544311d0800001f34495e74897f6a5d4b3a29170600000000000000000000000000000000000000000000000000152a3f556a7f7b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c272f322220190d000000000000000000000000000000000000000000000000000000000e1e30414e5f687985857c756c656055514b453836322820180d010000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000091d3145566a807f695544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b141d27313f4b5d687d816c5b4a36210e000000001c32475c718777624d37220d0000060c0e13181a1b1b1a18140f0b07000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00000000091d3245566b807f6a5443301c080000000000000000000000000000000000000000000000000c22364a5c70857a644f3a2a180400000000000c22374c6177877a6457463223130000000000000000000000000000000000000000000002152737495a677d8574604b36200b0000152a3f546a7f72604b3f2e1c0c000000000000000000000000000000000000000000000000000011263b50667c79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c2c39434737342b1d0d000000000000000000000000000000000000000000000000000006192b3c4d5f687d877c70666055504b4437363228211e160a0500000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000021527384c62778774604b35200f0000000000000000000000000000000000000000000000000003050300000000000000000000000000000000000109151d2e3f4a60728579634e3c2b19060000001c32475c718777624d37220d00000000000003050606050300000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000000b20364b60758877614c36261401000000000000000000000000000000000000000000000000071b2d3e52677d826d5947341f08000000000012273c52677d7c665c4a39281605000000000000000000000000000000000000000000000009192c3c4d5f697e7b654f3a2510000013273c4f616a6054433020100000000000000000000000000000000000000000000000000000000f23384c5e66635b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001427394a565c4d483b2b1905000000000000000000000000000000000000000000000000000b2035495a677d8577665e514b4437353127211e160b0903000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000a203448596e837c66513d2c1a06000000000000000000000000000000000000000000000811181a181108000000000000000000000000000000000001111c3043546479846f5a4835200b0000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000000071b2d3e52677d826d584733180800000000000000000000000000000000000000000000000000001020364b60758877614c36261401000000001025394d5f67665e4c3e2d1b0b000000000000000000000000000000000000000000000000000e1e30414f6069655d4b37220e00000d2032434f544b4336261402000000000000000000000000000000000000000000000000000000091c2f404c504e4a3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f4356687162594834200b000000000000000000000000000000000000000000000000000d23384d6278877762594c40353127201d150b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000005182b3b4f657a846f5b4936210b0000000000000000000000000000000000000000000b19252c2f2c25190b0000000000000000000000000000000000001325364a5c718678624d38230d0000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c0000000d22364a5c70857a644f3a2a18000000000000000000000000000000000000000000000000000000091d3245566b807f6a5443301c08000000000a1e30414d52514c402f200f000000000000000000000000000000000000000000000000000000132332424f534f4b3f2e1b080000031525323c3f3530261808000000000000000000000000000000000000000000000000000000000012222f383b39362d1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718678624d37220d00000000000000000000000000000000000000000000000001162c41566b817e6859483b2f201d150b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000d22374b5d718679634e3a291704000000000000000000000000000000000000000819293741444137291900000000000000000000000000000000000008182d3e556b807e68533e29130000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000004172a3a4f647986715c4b371c0c000000000000000000000000000000000000000000000000000000021528384d62788774604b35200e0000000001132330393c3c382f221201000000000000000000000000000000000000000000000000000000051424323b3e3a372e211000000000071520272a201c140800000000000000000000000000000000000000000000000000000000000004121c232624211a0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d000000000000000000000000000000000000000000000000011527375c728776614b3b2b1d120801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000081b2e3f52687d816c5846331f080000000000000000000000000000000000000011253747545a5447371e0e00000000000000000000000000000000000011273c51667c826d58422d180300001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00000a1f3347586d827d68533e2e1b00000000000000000000000000000000000000000000000000000000000a2035485a6f847b66513c2c19060000000005131e252726241d1204000000000000000000000000000000000000000000000000000000000006141f262925221b10020000000000030d13150b0801000000000000000000000000000000000000000000000000000000000000000000090f110e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d000000000000000000000000000000000000000000000000081d3144557287725746321d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000001021364b60758776614c36251300000000000000000000000000000000000003182c4154656f65543c2b190600000000000000000000000000000000000f24394f6479856f5a45301a0500001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00011426364c61768875604b362110000000000000000000000000000000000000000000000000000000000006192b3c50667b846f5b4935210c0000000000010a1012110f090000000000000000000000000000000000000000000000000000000000000000020c1214100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000b20354b607587725443301c07000000000000000000000000080e100b0801000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000091e3245566b807e695443301c070000000000000000000000000000000000051a2f445a6f846f5a4935200b00000000000000000000000000000000000e23384e637886705b46311b0600001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c00081c304354697f816b5645321e090000000000000000000000000000000000000000000000000000000000000e20354a60738778634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071017191f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d191710070000001c32475c718777624d37220d000000000000000000000000000000000000000000000000081d314455728775604a3520100000000000000000000004111c2325201c14080000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000021628384d62778773604a35200e0000000000000000000000000000000000041a2f44596f8478624d38230d00000000000000000000000000000000000f24394e647985705a45301b0500001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000b20354b60758778634d38281603000000000000000000000000000000000000000000000000000000000000071c304354697f816b56412c160100000000000000000000000000000000000000000000000000000000000000000b141b1d1b140b00000000000000000000000000000000010d171c1f1c170d010000000000000000000000000000000000000000000000000000000000000006101618110f0900000000000a18242b2e34323232323232323232323232323232323232323232323232323232323232323232323232322e2b24180a00001c32475c718777624d37220d00000000000000000000000000000000000000000000000001152737596e837a654f3f2e1e1004000000000000030c171f2e373a353026180800000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000a2034485a6e837b66503c2c19060000000000000000000000000000000000152b40556a807d68523b2b18050000000000000000000000000000000010253b50657a836e59442e190400001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000d22384d62787e695a49351a0a00000000000000000000000000000000000000000000000000000000000000001325364c6176806a55402b1500000000000000000000000000000000000000000000000000000000000000000e1c282f322f281c0e000000000000000000000000000001111f2a3134312a1f110100000000000000000000000000000000000000000000000000000000000a18232b2e26241d120400000718283640434947474747474747474747474747474747474747474747474747474747474747474747474747434036281807001c32475c718777624d37220d0000000000000000000000000000000000000000000000000011263b51667b826d5d4b3c2e1f180d0b09090b0e161e2a333f4b504b4336261401000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000005192b3c50657a846f5a4935200b00000000000000000000000000000000000f243a4f647a836e594834200f0000000000000000000000000000000215273853687d806b56412b160100001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000192e43586e837b66503b261100000000000000000000000000000000000000000000000000000d23384d627886715c46311c000b2035485a6269614f3c2c19000000000000000000000000000000000000000000000000000000000000000000081f334658616a62503c2813000000000000000000000000000000000000000000000000000000000000000b1c2c3a4447443a2c1c0b000000000000000000000000000d1f2f3d4649463d2f1f0d00000000000000000000000000000000000000000000000000000000061828353f433b382f221200001024364653585f5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d595346362410001c32475c718777624d37220d000000000000000000000000000000000000000000000000000f24384c5e6f857a655a4b3e342a23211e1e212329323a474c5d65605443301c08000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000d23374b5d718678634d39291603000000000000000000000000000000000d22374b5c718677624d3d2c18080000000000000000000000000000091d3145566d827c67523c27120000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000013283d53687d79634e39230e00000000000000000000000000000000000000000000000000000c21374c61767f6a553f2a150005192b3c484d544f43321e0e0000000000000000000000000000000000000000000000000000000000000000000417293a464c55504333210d0000000000000000000000000000000000000000000000000000000000000014283a4b575d574b3a281400000000000000000000000000172a3d4d5a5e5a4d3d2a1703000000000000000000000000000000000000000000000000000000102335465358514c402f1d0900172b4053646e74727272727272727272727272727272727272727272727272727272727272727272727272726e6453402b17001c32475c718777624d37220d00000000000000000000000000000000000000000000000000091d2f404d63798678645c4c473b38363232363839464b58616e7b73604b35200b000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000081c2e3f53687d816c5746321e0a00000000000000000000000000000000071b2e3e53697e806b5b49362614040000000000000000000000000417293a4b60758877614c37210c0000001c32475c718678624d37220d0000000000000000000000000000000000000000000000000000000011263a4e6068635b4936210c00000000000000000000000000000000000000000000000000000a1f334758616a61503c281300000e1e2b35383f3b32251400000000000000000000000000000000000000000000000000000000000000000000000b1b293336403c33251504000000000000000000000000000000000000000000000000000000000000061b2f445769726957442f1b060000000000000000000000001c31465a6b746b5a46311c08000000000000000000000000000000000000000000000000000001162b3f53646d665e4c38240f00192e43586e838987878787878787878787878787878787878787878787878787878787878787878787878787826e59432e19001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000122135495b647a867a6b6159524d4b45454b4e5257616976838275604b36200b000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000001121364b60768776614b36211100000000000000000000000000000000001021364b60758679635443301f180c020000000000000000000a151f334658687d836e5847331f0a0000000d23384d627873604b35200b000000000000000000000000000000000000000000000000000000000b1e31424e534e493d2c1a06000000000000000000000000000000000000000000000000000004172a3a474c55504333200d0000000e19202229272014070000000000000000000000000000000000000000000000000000000000000000000000000b171f212b2821150700000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d827b66513b2611000d23384d627887777272727272727272727272727272727272727272727272727272727272727272727272726e6453402b17001c32475c718777624d37220d000000000000000000000000000000000000000000000000000006192c3c4a5c64788580776d68626056576063676d767f877d6d605645321d09000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000091e3245576b817e68533f2f1c0800000000000000000000000000000000091e324556657b8473604b44332a1d150b0801000200060c111a2832434c61768778634d3a2a17040000000b2035495a62605544311d0800000000000000000000000000000000000000000000000000000000021324313a3d39362c1f0f000000000000000000000000000000000000000000000000000000000c1c2a33373f3c3325150300000000050b0d14120c030000000000000000000000000000000000000000000000000000000000000000000000000000040a0c15130d040000000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000b2035485a677d8472605d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d595346362410001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000e1e2d3e4a5a63747d86827d7876707076787d82878076675f4b4538281502000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000031628394d627886715d4b37230e00000000000000000000000000000000021628384b5d6c81816c624c473a3127201d141817191a21232e38454b626c817f6a5a49351c0c0000000006192b3c494d4b4437271501000000000000000000000000000000000000000000000000000000000006131e262823211a0f0100000000000000000000000000000000000000000000000000000000000c171f212a282015070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110006192b3c4d5f6d827f695c4a3947474747474747474747474747474747474747474747474747474747474747434036281807001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000010202d3c4955606774797e8385868484827e79746a61584d4132281a0a00000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000a2035495a6f847a65503c2b1905000000000000000000000000000000000a1a2f3f4a607282806e61584b45383531262d2d2e2c35383f4b56606b808374604b3c2c190000000000000e1e2b3538353127190900000000000000000000000000000000000000000000000000000000000000020b11130e0c060000000000000000000000000000000000000000000000000000000000000000040a0c15130d03000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e1113141413100c0b04000000000000000000000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000e1e30414b6175867a645746323232323232323232323232323232323232323232323232323232323232322e2b24180a00001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000002101e2c37444b546064696e6f70706f6d696460544c463a311d150a0000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000006192c3c50667b836e5a4835200a0000000000000000000000000000000000111c30435460738183776860564f4b44374242433d494e535d6574808374605645311e0e000000000000000e192023201d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000908131c202327292a292825221f180f0d07000000000000000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000131e334657647a8675614b41301e1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d191710070000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000e19273136434a4e54585a5b5b5a58544f4b433633291c1302000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000e20354a60738678624d3828160300000000000000000000000000000000001325364455606c7c867d756a646055595757595a5b6369707a857f73605645382715000000000000000000060b0d0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e131517181615110c0a0400000000000000000000000000000000000000000000000000000008111c23253035383c3e3f3e3d3b37342a24221b100900000000000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000031729394a5c6a7f826d5f4d3c2b19090008080808080808080808080808080808080808080808080808040200000000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000009151d253035393f4345464544433f393530261f170c0000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000071c304354697e806b5645321e09000000000000000000000000000000000008182637444b5e66777f867f7a75706e6d6c6e6f71787e8583796a60554538281a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0e1a2123282a2c2d2c2a26211f170c09020000030d13150f0d080000000000000000000000000001111c232f3836434a4e5153545452504c473b3a362e241c12040000000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000000b1b2d3e4b6073847c675a483726140100000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000108131c2024292e3031302f2d2924201c140804000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000001325364b61768775604b36211000000000000000000000000000000000000009192631404d58616a757c818684838282838486837e766d635b4b4437281a0a000000000000000000000000000000000000000000040a0c0a04000000000000000000000000000000000000000000000000030a0c0f1214141412100c0a04000000000000000000000000000000000000000000000b171e212c35383d3f4142413f3b37332a211e160a011520272a25221b10020000000000000000000009151d2e373f4c505460636668696968656159564f4a3e382f1f180c00000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000101c30435462778778625544311d1000000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d0000000000000000000000000000000000000000000000000000000000000000000000070b0f14191a1b1b1a18140f0b08010000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000081e3346576c817d68533f2e1b0800000000000000000000000000000000000009141d303a474c5660676c71757779797776716e6861584e493d3127190a0000000000000000000000000000000000000000000c171f211f170c0000000000000000000000000000000000000000050b0d161e212427292a292825211f17100b08010000000000000000000000000000000005131b2933363d494e535556575654504c473a3632281c1425333c3f3a372e20100000000000000000000a1927313f4b505d656d75787c7e7f7e7d7a77706c645c514c40332a1c0e000000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000011426364859667c8573604b3f2e1b0b000000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000031729394e637886715d4b37220d0000000000000000000000000000000000000001121c2a3338454b5157556062636462605758534c473a352c1d15090000000000000000000000000000000000000000000c1c29333633291c0c0000000000000000000000000000000000040d181f222932363a3d3e3f3e3d3a37332a26201c140804000000000000000000000000000614233039464c555b63686a6c6d6b6a666158534b45383026334350554f4b3e2e1b08000000000000000a1a2837444b5d65707b8386837f7d7c7c7e7f8385817970665e4c473a2b1e0e0000000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000000000008182b3b4c5e6c817f6a5d4b3a2917040000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000000b2135495b6f847a654f3b2b180500000000000000000000000000000000000000000c171f2832363c37444b4c4e4e4d4b45393e37332a211a0f010000000000000000000000000000000000000000000417293a464c463a291a0a0000000000000000000000000000000c171f2a343739464b4f52535453524f4c473a3b3530261f170b000000000000000000000005142532414d57616a71787d7f8182817f7b766f6860564b43363c50616a645c4b37220d000000000000081828384555606c7b86827a716d6a686767686a6e707a82857b6e6158483c2b190600000000000000000000000000000000000000000000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000000000000d1d30404b6075867a655846331f130000000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000061a2c3d51667b836e594834200a000000000000000000000000000000000000000000040a161e21272731353739393836322829211f170c0600000000000000000000000000000000000000000000000a1f3346586158463828160200000000000000000000000003111c29333b474c54576164676969696765615857504b433633291c1308000000000000000000132332434f5f67768086837e7b7a797a7b7f84847d75686054493d556a7f7a644f3a250f000000000001142636455660738184786d645c58555251525355595c646d77828376625a4835200b00000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1d32475d7287725d47321d0e0e0e0e0e0e0b0902000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000121e32455663798676614c41311e0e00000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000000f20354b60748777624d382715020000000000000000000000000000000000000000000003090b12151d2022242422211e16130c0a04000000000000000000000000000000000000000000000000000c21364c6176615645321e1200000000000000000000000614212f3a464c5962697076797c7e7f7e7d7a766f6c6560544c463a3025180b000000000000000d1d30414f61697d877f756e6966646364666a6f767e847e73635b4c576c817a644f3a250f0000000000081c3043546074838073635b4f4b3e3f3d3c3d3e403e4b4f59626d7c8678624d38230d0000000c171f21232323232323232323232323232323232323232323232332475d7287725d473223232323232323201d150a0000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000031628384a5b697e836e5f4e3c2c1909000000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000000000081c304354697f806a5645311d09000000000000000000000000000000000000000000000000000001080b0d0e0f0d0b09030000000000000000000000000000000000000000000000000000000002172c41576c8174604b402f1909000000000000000000051424313f4c58616c777e8585817e7d7c7d7e7f8384817b746a61584a4336291b0b000000000005182a3b4d5f697f857769605653514f4e4f5155586168757f8579665e576c827a644f3a250f00000000071a2d3d4b6072837f6b6054493d372e2a282727292a2e373b484d5e6679806b56412b1600000c1c2a3337383838383838383838383838383838383838383838383838475d7287725d4738383838383838383632281a0a00001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000a1a2d3d4f606f847d685a49372715020000000000000000000000000000000000000000000000000000001c32475c718777624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000000000011426364c61768775604b36201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d6277806b5e4c372715010000000000000002132331424e5d657681867e77706c69676667696a6e6f787f847f76686054463a291704000000000b1f344859677d847561594b45383c3a393a3c3a474c56606979847c675f6d827a644f3a250f000000000c21364a5b6a7f826d614b43362c221b1513121213151b222b34404c5c646b62513d29140004172a3a474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e5d7287725d4e4e4e4e4e4e4e4e4e4b4538281502001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000000000000000000f1f32424c61778778635544311d110000000000000000000000000000000000000000000000000000001c32475c718677624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000000000081f3347586c827d67523e2e1b07000000000000000000000000000000000000000000000000000000000000000000040b0c101314141412100c0a040000000000000000000000000000000000000b20344859677c7b665544311d0800000000000000102031414e60687b877e7469615857545251525355595a636a747c847e72615846331f0a000000031729394c627787776257473a322826252425262a3338454b5b6375837d676d837a644f3a250f000000071b2e3e4e63798675604b433026180e07000000000000080d1920303d4a4e56514434210e000a1f33475861636363636363636363636363636363636363636363636363636372877263636363636363636363605645321d09001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000001141f344759657b8574604b3f2f1c0c00000000000000000000000000000000000000000000000000001c32475c71867a654f36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000000000000417293a4e637985705c4a36220c000000000000000000000000000000000000000000000000000000000000070c0e181f222528292a292825211f170d0b0600000000000000000000000000000005182b3b4d5f6c8174604b3520100000000000000a1a2e3e4e5f687e85786860554c473a3f3d3c3d3e403c494d546066747f8376614c36210c0000000a1e3346576c827e685948392a1d15110f0e0f11171f28323d49576173827c6e837a644f3a250f0000000d22364a5c6f847b665645321c14080000000000000000000005121f2d3639413d34261604000c21374c617778787878787878787878787878787878787878787878787878787988797878787878787878787874604b36200b001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000000000000000000004182a3b4c5e6b81806b5d4b3a2a1704000000000000000000000000000000000000000000000000001c32475c7186816c5443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000000000000c21364a5b708579644f3b2a1804000000000000000000000000000000000000000000000000000000060f1a21242a34373a3d3e3f3e3d3a3633292320190e0500000000000000000000000000000d1d30404f657a7e68533e2d1b0700000000021528384a5c687d8575625a4b4437332a29282728292a2c3536434b55606a7a7f6a553f2a150000000c21364b61768875604b3b2b1b0c020000000000040a151d2c3946556074837a837a644f3a250f0000031628384f647a85705e4c38281601000000000000000000000000010f1a21242b292116080000192f44596e838682828282828282828282828282828282828282828282828282828982828282828282828282827c66513b2611001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000000000c1d2f404b6074857b655847331f14010000000000000000000000000000000000000000000000001c32475c71878474604a35200e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000000000071a2d3d51677c826d5947341f0900000000000000000000000000000000000000000000000000010f1a212d36393b474c5052535453524f4c463a38352b20180d00000000000000000000000000061423374b5d6e826e5c4a36220d00000000091d324556647a86766157493c31271f181412111214151920263037444b5d646a61503c281300000013283d53687d816c5645321d0d000000000000000000020f1b28374556617684857a644f3a250f0000091e3245566d827c6752402f1a0a000000000000000000000000000000070d0f16140e040000000e23384d637886776d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d7287726d6d6d6d6d6d6d6d6d6d665e4c38240f001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000000000000000000000000111d31455663798776614c42311f0f0000000000000000000000000000000000000000000000001c32475c71867f7b65503c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000000000000f20354b60748777614c37271501000000000000000000000000000000000000000000000001141f2c353d4a4e565961656869696967656158554d483c342b1d130500000000000000000000021424313d49546a7f79644e39240f000000031628394b6074877a645847392c1d1509040000000000000608141c27313f4b4f55504333200d000003162839586d837b66513828160000000000000000000000000b1928384658647a8a7a644f3a250f00000b21364b60768875604b36211200000000000000000000000000000000000000010000000000000c2035495a677c8473605858585858585858585858585858585858585858585d7287725d585858585858585858514c402f1d09001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000000000002152738495b687e836e604e3d2c1a0a00000000000000000000000000000000000000000000001c32475c718678836e5b493521110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000000000000000081d3144556a7f7f6a5544311d080000000000000000000000000000000000000000000008141c323d494e5b636b71777a7d7e7f7e7d7a76706a625a4d483b302315070000000000000000000b1f31424e5b63657a7f69543f2a14000000091e3246576a7f816c5c4a3a2a1b0e01000000000000000000000109151d2e373a3f3c332515030000091e324657728777624c37220d000000000000000000000000000a1a293a4a5c6f837a644f3a250f000011263b50667b836e5645321e09000000000000000000000000000000000000000000000000000006192c3c4d5f6c817f6a5d4b3b4242424242424242424242424242424242475d7287725d4742424242424242423b382f221200001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000000000000000000000000000a1a2c3d4e606e837e685b4938281502000000000000000000000000000000000000000000001c32475c7186768278634d3f2e1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000000000000000011426374c61778774604b35200f00000000000000000000000000000000000000000008182630424f5b636e79818684807e7c7c7c7e8184857f786d62594d4133251507000000000000000011263a4e6068787a78826d58432e180000000c21364b61768776614c3e2d1c0c000000000000000000000000000001101b22252a282015070000000c21364b61768873594834200b00000000000000000000000000000b1b2d3e5a6f847a644f3a250f0001162b41566b807d6853382816020000000000000000000000000000000000000000000000000000000e1e30414b6074857b65594837262d2d2d2d2d2d2d2d2d2d2d2d2d2d32475d7287725d47322d2d2d2d2d2d2d26241d120400001f34495e7489745e49341f09040404040404040404040404040404040404040404040404040404182e43586d837b66513b26110000000000000000000000000000000f1f31424c61768779635645321d12000000000000000000000000000000000000000000001c32475c71867579836e5d4b3a2a1a0c010000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000000000000000091f3347586d827c67513d2d1a070000000000000000000000000000000000000001142636434b61697983847b756f6b68676667696c6f767d858277675f5043332515040000000000000013283e53687e8c9088846f5a45301a000005192b3c53697e816b58473320100000000000000000000000000000000000080d0f15130d03000000000d22384d627786715c3b2b18050000000000000000000000000000001a2f445a6f847a644f3a250f00021628385a6f8579644e39240f0000000000000000000000000000000000000000000000000000000000121d31445562788677625544311d1818181818181818181818181d32475d7287725d47321d181818181818110f09000000001f34495e7489745e49341f1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a2e43586d837b66513b261100000000000000000000000000000001131f334758657b8674604b402f1d0d0000000000000000000000000000000000000000001c32475c7186756d837b655847382a1d140e0c0c0d11160f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000000000000004182a3a4f647985705c4a36210c000000000000000000000000000000000000000e1c304354606d7e857a6f66605556535251525356566067707c867d6a615043332212000000000000081d32485d72879da69a85705b45301b00000b2035485a708678634e3a291702000000000000000000000000000000000000000000000000000000000e24394e637985705a45301b000000000000000000000000000000051a2f445a6f847a644f3a250f00091e324556738875604b36200b000000000000000000000000000000000000000000000000000000000002152737485a667c8473604b402f1e0e000303030303030303081d32475d7287725d47321d080303030303000000000000001f34495e7489745e49342f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f43586d837b66513b2611000000000000000000000000000000000417293a4b5d6b80816c5e4c3b2a180800000000000000000000000000000000000000001c32475c718675627786766156473a312623212122262b24221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000000000000000000c22364a5c708579644e3a2a170400000000000000000000000000000000000e1e31424b6072818275655d514b44373e3d3c3d3e38454b525e667683806a6150402f1c0c0000000000081d32485d72879da898826d58432d1800000d22384d627886715b49361c0c000000000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a040000000000000000000000000000051a2f445a6f847a644f3a250f000b21364b607687735645321d0900000000000000000000000000000000000000000000000000000000000009192b3c4c5e6b80806b5e4c3c2b19090000000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49444444444444444444444444444444444444444444444444444444444444444444586d837b66513b261100000000000000000000000000000000000c1c2e3f4b6073857c66594836251300000000000000000000000000000000000000001c31475c71867159677c847461594b4437383736383b413a362d2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000000000000000071b2d3e52677c826d5847331f080000000000000000000000000000000006192b3c4e606c81816d60564b3f3631272927272729283236404c586173827f6a5e4c3a291704000000000013293e53687e8f938a7a644f39240f000013283d53687d806b563d2c1a00000000000000000000000000000000000000000000000000000000000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000d23384d627886715b38281502000000000000000000000000000000000000000000000000000000000000000e1e2f404b6073847c665a483727150200000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e59595959595959595959595959595959595959595959595959595959595959595959596d837b66513b2611000000000000000000000000000000000000111d31445562788777625443301c10000000000000000000000000000000000000001c31465c7185715c5f697f8477686055504e4c4b4d51564f4a3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000000000000000001020364b60758776614c362614010000000000000000000000000000000b2035495a687e8372604b45382e201d151312111214161e212f3a46556074847c665846331f0d000000000011263a4e60687a7d78645c4a36220d0003182d42586d827b66513c261100000000000000000000000000000000000000000000000000000000000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000f24394e6479856f5a45301a000000000000000000000000000000000000000000000000000000000000000000121d31445562778678625544311d1200000000000000081d32475d7287725d47321d080000000000000000000000001f34495e7489746f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f827b66513b261100000000000000000000000000000000000001152737495a677d8472604a3e2d1b0a0000000000000000000000000000000000001c31465b7186715b4f61697c867d746b6563616162666b645c4a36220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000000000000000000000081d3144556a807f695443301c080000000000000000000000000000071a2d3d4d6278867661544332281a11080200000000000309121c2937445562778776614c3b2a1805000000000b1f31424e5d6468635a4a3e2d1b07000417293a5b718677624d38220d00000000000000000000000000000000000000000000000000000000000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000f253a4f647a846f59442f1a040000000000000000000000000000000000000000000000000000000000000000011426374859657b8574604b40301e0e000000000000081d32475d7287725d47321d080000000000000000000000001f34495f748a8484848484848484848484848484848484848484848484848484848484848484848484848484887b66513b26110000000000000000000000000000000000000009192b3c4d5f6d827e695c4a3928160300000000000000000000000000000000001b30455b7085705b434f5f67788286817b787676777b8079644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000000000000000000000021527374c62778774604b35200f00000000000000000000000000000c21364a5b6e837c6758463625160a00000000000000000000000c1927374859697e816c5947341f0b00000000021424313f4b4f534d493c2d201000000a1f334658738875604a35200b00000000000000000000000000000000000000000000000000000000000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000f253a4f647a846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000009192a3b4b5d6a7f816c5e4d3c2c1a0a0000000000081d32475d7287725d47321d080000000000000000000000001f34495e74897978787878787878787878787878787878787878787878787878787878787878787878787879847b66513b261100000000000000000000000000000000000000000e1e30414b6175867a645745321e1200000000000000000000000000000000000d22374d6277624d37414d5a626d777c8284868685827e75614b36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000000000000000000000091f3448596d837b66513d2c1a06000000000000000000000000021528384e637986715f4d3a2918080000000000000000000000000009192b3b4b60748777624c37220f00000000000614202e373a3e38352c1e100200000c21364c617687725443301c0704040404040404040404040404040404040404040404040806010000000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000f24394e6479846f5a452f1a00000000000000000000000000000000000000000000000000000000000000000000000d1d2e3f4a6072847c665a493828160200000000081d32475d7287725d47321d080000000000000000000000001f34495e7489746363636363636363636363636363636363636363636363636363636363636363636363636d827b66513b2611000000000000000000000000000000000000000000131e334657647a8675604b40301d0d000000000000000000000000000000000b2034485962594834303c484d5961676d6f71716f6d68615746321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000000000000000000005182a3b4f647a846f5b4935210c000000000000000000000000091d3245566d827d675240301b0b0000000000000000000000000000000d1d3144556a7f7f6a553d2c1a06000000000002101b2225282320190e000000000e23384e637885705b3625131a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1d1b150b00000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000e23384d637885705b372715020000000000000000000000000000000000000000000000000000000000000000000000111c30435461768678635645321e1301000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e586d837b66513b2611000000000000000000000000000000000000000000031729394a5c6a7f826d5f4d3c2b180800000000000000000000000000000005192b3b484d483b2b1e2b353b474c52575a5b5c5a58534b46392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e291400000000000000000000000000000000000000000000000000000000000000000000000d22374b5d708579634e39230e0000000000000000000000000b20364b60758876604b36211200000000000000000000000000000000011527374d627787725b4935210c00000000000000080d0f130e0c0600000000000f24394f6479846f5a452f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f3230281d0f000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000b21364b607687725544311d080000000000000000000000000000000000000000000000000000000000000000000000001325364758647a8574604b41301f0f000000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49383838383838383838383838383838383838383838383838383838383838383843586d837b66513b2611000000000000000000000000000000000000000000000b1b2e3e4b6073847c675a48362614010000000000000000000000000000000d1d2b3437342b1d0e19202a34373d4244464645433d3632281b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b607576614c36210c00000000000000000000000010263b50657b836e5645321e0900000000000000000000000000000000000920344859708678634e39230e000000000000000000000000000000000000000f253a4f647a846e5944444444444444444444444444444444444444444444444444444448443a2d1d0b0010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f00091e324557738875604b36200b00000000000000000000000000000000000000000000000000000000000000000000000008182a3a4b5c697e816c5f4d3d2c1b0a0000081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49342323232323232323232323232323232323232323232323232323232323232e43586d837b66513b26110000000000000000000000000000000000000000000000101c30435462778778625443301c10000000000000000000000000000000000d19202220190d00050c181f22272d2f3131302d28211e160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000101e32455660615846331f0a000000000000000000000001162b40566b807f6a5438281603000000000000000000000000000000000005182b3b576c817e69533e2914000000000000000000000000000000000000000f243a4f647a846e595959595959595959595959595959595959595959595959595959595d574b3a28150010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f00031628395a708578634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4f616e837d675b493928160300081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e182e43586d837b66513b26110000000000000000000000000000000000000000000000011426364859667c8573604b3e2e1b0b00000000000000000000000000000000050b0d0b0500000000040b0c12181a1c1c1a18130c09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29140d0d0d0d0b0500000000000000000000000000000000000000000000000000000000000003162838454b4c463a2917040000000000000000000000021528385a6f857a65503b25100000000000000000000000000000000000000013283d52687d826d58422d18000000000000000000000000000000000000000e24394e6379846f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f72695744301b0010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f0000162c41566b817d68523727150200000000000000000000000000000000000000000000000000000000000000000000000000102032434c61768679635745321e1301081d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000000000000000000000000000000000000000000000008182b3b4c5e6c817f6a5c4b3929170300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e29232323232220190d0000000000000000000000000000000000000000000000000000000000000a1a2832363633291b0b000000000000000000000000091d324556738876614c36210c000000000000000000000000000000000000000e23394e637886715b382815020000000000000000000000000000000000000d22374d627789848484848484848484848484848484848484848484848484848484848387725d48321d0010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000011263b51667b826d5544311d080000000000000000000000000000000000000000000000000000000000000000000000000002141f334658647a8575604b42311f0f001d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000000000000000000000000000000000000000000000000d1d30404b6075867a645746331e1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69543e383838383838342b1d0e0000000000000000000000000000000000000000000000000000000000000a161e21211f170b000000000000000000000000000b20364b607588735846331f0a000000000000000000000000000000000000000b20364b607589735645321d090000000000000000000000000000000000000b20354b607389736f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7286725c47321d0010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f00000c21364b61768775604b36201000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4a5c687e826d604e3d2d1b0b1d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000000000000000000000000000000000000121e32455664798676614c41301e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e69544d4d4d4d4d4d4d483c2b1e0e00000000000000000000000000000000000000000000000000000000000003090b0c0a0400000000000000000000000000000d23384d627887725c3a29170400000000000000000000000000000000000000081d314455748a75604b36200b000000000000000000000000000000000000081d3144557287776259595959595959595959595959595959595959595959595959607587715c47321c0010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f0000091e3246576d837b66513f2e190900000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4e606d827d685c4a3929171d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000000000000000000000000000000000000031628384a5c697e826d5f4d3c2c19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e6962626262626262625a493c2b1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e647986705b46311b0000000000000000000000000000000000000000021527375e738877614c37220c00000000000000000000000000000000000001142637586e837b665044444444444444444444444444444444444444444444444c6277846f5a45301a0010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f0000031628394f657a846f5d4b372715010000000000000000000000000000070b120c0a04000000000000000000000000000000000000102031424b61758579645746331e1d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000000000000000000000000000000000000000a1a2d3d4a6072847d675a493727150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e80787878787878787878625a4935200b000000000000000000000000000000000000000000000000000000000000000000000000040a0c0a0400000000000000000f253a4f647a846f5a452f1a0500000000000000000000000000000000000000001c32475c718777624d38220d0000000000000000000000000000000000000013293e53687e806b563d2d2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f3a4f657a826c57422d170010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f0000000b22374b5d70857a655544311d1403000000000000000000000008131c2028211f170c000000000000000000000000000000000002141e32465763798675614b42322032475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000000000000000000000000000000000000000000000000000000f1c30435461778778625544311d1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657b8181818181818181818178624d38230d00000000000000000000000000000000000000000000000000000000000000000000000c171f211f170c000000000000000f253a4f647a846f5a442f1a0500000000000000000000000000000000000000071c31475c718678624d38230d000000000000000000000000000000000000000d23384d627887725b4a36211a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a182a3b54697e7d68533d28130010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000000081b2e3f4f647a8574604b41311e170b0300000000000000040d182530353d37332a1c0c000000000000000000000000000000000003162839495b677d836e604f3e2d32475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000000000000000000000000000000000000000000000000000000001325364759667b8573604b3f2e1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d656c6c6c6c6c6c6c6c6c6c625a4935200b000000000000000000000000000000000000000000000000000000000000000000000c1c29333633291c0c0000000000000f24394f647985705b46301b0000000000000000000000000000000000000000011426375d728777624c37220d000000000000000000000000000000000000000b2035495a708579634e3d2c1a0604040404040404040404040404040b1f3448596f8477624d38220d0010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000000001022364a5c6b80806b5f4e4233291e160f0c0a070b0c0f181f2a36434a524c473a2a170400000000000000000000000000000000000b1b2c3d4d5f6c817e695c4a3a29475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000000000000000000000000000000000000000000000000000000000008182a3b4c5e6c81806b5d4b3a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b50575757575757575757574d493c2b19060000000000000000000000000000000000000000000000000000000000000000000417293a464c463a291a0a00000000000e23384d637887715c3828150200000000000000000000000000000000000000081d314455748976614b36210c0000000000000000000000000000000000000006192b3c52687d826d5b49352114030000000000000000000000000417293a4c627785705a4834200b0010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f00000000071b2d3e4b6073847d68604c4639322924211e1c2021242a343b48546067615847331f0a0000000000000000000000000000000000000f1f30414b6074857a64584736475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000000000000000000000000000000000000000000000c1d2f404b6074857b655847331f13010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e373a4141414141414141414138352b1e0e000000000000000000000000000000000000000000000000000000000000000000000a1f33465861584638281602000000000c21364b617688735645321d09000000000000000000000000000000000000000b20354b60758a745746321e0900000000000000000000000000000000000000000e20354b60748779634e43322113030000000000000000000001131f3346586b807c66513c2b19050010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f0000000000101d3144556175847e6d61574b46393936333035363a3a474c5962727d76614c37210c00000000000000000000000000000000000001131d32455662788676615443475d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000000000000000000000000000000000000000000000000000000000000111d31455663798676614c42311f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23252c2c2c2c2c2c2c2c2c2c2320190e00000000000000000000000000000000000000000000000000000000000000000000000c21364c6176615645321e12000000000a1e334657738875604b36200b000000000000000000000000000000000000000d22384d627787715c392816030000000000000000000000000000000000000000081d314455667c836e614f3f301e160a020000000000000009151d31424c61768573604a35200d000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f00000000000115273746576174828276696157534e4b46434a4c4f5359616a77837f73604a35200b0000000000000000000000000000000000000002152838495a667c8372604a3f5d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000000000000000000000000000000000000000000000002152738495b687e836e604e3d2c1a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e10171717171717171717170d0b06000000000000000000000000000000000000000000000000000000000000000000000002172c41576c8174604b402f1909000000031729395b708579644f3a240f0000000000000000000000000000000000000012273c51677c836e59432e19000000000000000000000000000000000000000000011527374d5e6e837f695d4d4132281d150e0c09050b0d131c2731414e606e837b665443301c07000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000000000000091929394656606d7d867e766d6864615754606164686f7780847a69605443301c0700000000000000000000000000000000000000000a1a2c3c4d5e6b817f695d4b5d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000000000000000000000000000000000000000000000000000000000000000a1a2c3d4e606e837e685b493827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d6277806b5e4c37271501000000172c42576c817e695338271502000000000000000000000000000000000004182a3a566b807f6a543f2a1500000000000000000000000000000000000000000000091930404b6175867c675f4b4539322824211e181f22253037444b60697e806b5e4c36251300000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f000000000000000b1b2938454b5f67757e86837d797670707576797e84847b6f645c4a43362513000000000000000000000000000000000000000000000e1e30404b6074857b65595d7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000000000000000000000000000000000000000000000000000000000000000f1f31424c61768679635645311d110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d16160e0c0600000000000000000000060b0d16160e0c060000000000000000000000060b0d16160e0c060000000000000b20344859677c7b665544311d0800000012273c52677c826d5645311d0900000000000000000000000000000000000a1f3447596f847a644f3a250f0000000000000000000000000000000000000000000000121e3346576277867d6b60574b45383936322a343736434a55606b7e8473604b402f180800000010253a50657a846e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f00000000000000000b1a2832414d57606971787e828485858584817d776f665e4f4b3e302518080000000000000000000000000000000000000000000000121d3144556278867761547287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000003090b101010101010101010101010101010101010101010101010101010141f334758657b8574604b402f1d0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1920232b2b2321190e00000000000000000e1920232b2b2321190e0000000000000000000e1920232b2b2321190e000000000005182b3b4d5f6c8174604b3520100000000c21374c61768875604b36201000000000000000000000000000000000000c22374c61778875604b35200b00000000000000000001010000000000000000000000000317293948596276848075696056524e4b463b484c50546067748083756055443122120000000010253a50657b836e59442f19040000000000000000000000000000051a2f445a6f847a644f3a250f0000000000000000000a161e3039454b545b63696c6f7070706f6c68625a514c40372e1c1308000000000000000000000000000000000000000000000000021527374859667b8473607287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110000000a161e212626262626262626262626262626262626262626262626262626262626293a4b5d6b80816b5e4c3b2a1808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b3538404138352c1e0e0000000000000e1e2b3538404138352c1e0e000000000000000e1e2b3538404138352c1e0e00000000000d1d30404f657a7e68533e2d1b0700000a1f3347586f847c67513e2e19090000000000000000000000000000000b1b304054697e816c5544311d08000000000000060b0d16160e0c06000000000000000000000b1b2b3b485861727e867e756d676361575b5962656b747c867f7260574537271504000000000c21364c617578634e38230e000000000000000000000000000000000e23384e637876614b36210c0000000000000000000002131b2832363d4a4e53575a5b5b5b5a57534d483c382f221b1000000000000000000000000000000000000000000000000000000009192b3b4c5e6b807f6a7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100000a1a2832363b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3f4b6073857b6659473625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3c494d56564d493c2c1e0e000000000d1d2b3c494d56564d493c2c1e0e00000000000d1d2b3c494d56564d493c2c1e0e00000000061423374b5d6e826e5c4a36220d000004172a3a51667b846f5c4b3727150100000000000000000000000000031729394c5e718679644e3727150100000000000e1920232b2b2321190e000000000000000000000d1d2b3a47546069767f86827d7976707070777b808681786a6054453928190900000000000a1e33465761635b4935210c000000000000000000000000000000000c2135495b63615746321e0a0000000000000000000000000a161e212d36393e424546464645423d38352b241c120700000000000000000000000000000000000000000000000000000000000d1d2f404b6073847b7287725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b26110003162838454b5050505050505050505050505050505050505050505050505050505050505050505562788777615443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b495a626b6b635b493c2c1906000005182b3b495a626b6b635b493c2c190600000005182b3b495a626b6b635b493c2c19060000021424313d49546a7f79644e39240f0000000c20354a6073867a645544311d1202000000000000000000000003141e334657667c846f5c4a36190900000000000e1e2b3538404138352c1e0e000000000000000000000d1c2a36434a58616a70797e828485858584807b756c625a4b4336281b0a00000000000003172939464c4e493d2c1a0600000000000000000000000000000000061a2c3d494e4b46392916030000000000000000000000000003090f1a2123292d303031312f2c282220190e090000000000000000000000000000000000000000000000000000000000000000111c3043546277857787725d47321d080000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b261100091e324556606565656565656565656565656565656565656565656565656565656565656565656565677c8372604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596278808079635b4935210c00000b203448596278808079635b4935210c0000000b203448596278808079635b4935210c00000b1f31424e5b63657a7f69543f2a14000000071c304354657b8674604b40301d150a0200000000000000030b171e31414b61768779634e3d2d1a00000000000d1d2b3c494d56564d493c2c1e0e000000000000000000000c1825303a464c555b63696d6f7070706e6b6660564d483c3026180a00000000000000000b1b29333638352c1f0e0000000000000000000000000000000000000f1f2c35383632291b0b0000000000000000000000000000000000070c0e14171a1b1b1b1a17130d0b0500000000000000000000000000000000000000000000000000000000000000000000011426364759657b8586725c47321d070000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d837b66513b2611000b21364b60757b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b867e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778995968a79634d38230e00000d22374d62778995968a79634d38230e0000000d22374d62778995968a79634d38230e000011263a4e6068787a78826d58432e18000000001325364c5d6d827f6a5e4d4032281d150e0c09030a0c0f171e2933424e5f6c81806a5b4a361f0f0000000005182b3b495a626b6b635b493c2c19060000000000000000000008131c2933363d4a4e54575a5b5b5b5956514b4538352b1c1408000000000000000000000b171e2123211a0e00000000000000000000000000000000000000010f1a2123211e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3b4b5d6a7f8b745f4a341f0a0000000000000000000000001f34495e7489745e49341f09000000000000000000000000000000000000000000000000000003182e43586d827b66513b2611000c22374c617781828282828282828282828282828282828282828282828282828282828282828282828281827f6a55402a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a7a895806a55402b15000013293e53687e93a7a895806a55402b1500000013293e53687e93a7a895806a55402b15000013283e53687e8c9088846f5a45301a0000000008182f3f4b6075857c665e4b4538322824211e171e2124293339464c60687d8373604b3d2d1a01000000000b203448596278808079635b4935210c0000000000000000000000000b171f212d36393e424546464644403b36322820190e01000000000000000000000000030a0c0e0c0600000000000000000000000000000000000000000000060c0e0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2e3f4a6072806b56402b1601000000000000000000000000162c41566b816b56412c160100000000000000000000000000000000000000000000000000000013283d52687d79634e39240e000a1f344759616c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6a61503c28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a3a4947e69543f2914000012283d52677d92a3a4947e69543f291400000012283d52677d92a3a4947e69543f291400081d32485d72879da69a85705b45301b0000000000111e3245576177857c6b60564b45383936322933363939464b57616d7e8475615544311f0f00000000000d22374d62778995968a79634d38230e00000000000000000000000000040a0f1a2124292d303030302f2b26201d150a050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111c304354606b62513d29140000000000000000000000000014293d51626b62513d29140000000000000000000000000000000000000000000000000000000011253a4e6068635b4a36210c0004182a3a474c575757575757575757575757575757575757575757575757575757575757575757575757575755504333200d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60748592928676614c36210c00000b21364b60748592928676614c36210c0000000b21364b60748592928676614c36210c00081d32485d72879da898826d58432d1800000000000316283947596176848075686056524e4b4639464c4f535761697682827461574637261401000000000013293e53687e93a7a895806a55402b1500000000000000000000000000000000070c0e14181a1b1b1b1916110b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a56514433210e000000000000000000000000000e2234445156514434220e000000000000000000000000000000000000000000000000000000000b1e31414e524e4a3d2d1a0700000c1c2a34374242424242424242424242424242424242424242424242424242424242424242424242424242403c3325150300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455660757c7d75615746331e0a0000091e32455660757c7d75615746331e0a000000091e32455660757c7d75615746331e0a000013293e53687e8f938a7a644f39240f0000000000000a1b2a3b475861727e867d756d676361575b576164686e767e867d6d6056463928190900000000000012283d52677d92a3a4947e69543f29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818253035403d3326160400000000000000000000000000051626343d413d3426160500000000000000000000000000000000000000000000000000000000011323313a3d39362d1f0f000000000c181f222d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2820150700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000216283845566067676157463929170300000216283845566067676157463929170300000002162838455660676761574639291703000011263a4e60687a7d78645c4a36220d000000000000000c1d2a3a47546069767f86827c797670707076797d83867e75675f4b4538281b0b000000000000000b21364b60748592928676614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202b29211608000000000000000000000000000000081622292c2922160800000000000000000000000000000000000000000000000000000000000005131e252824211a0f010000000000040a0c171717171717171717171717171717171717171717171717171717171717171717171717171715130d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2838454b52524b4639291b0b000000000a1a2838454b52524b4639291b0b00000000000a1a2838454b52524b4639291b0b0000000b1f31424e5d6468635a4a3e2d1b0700000000000000000c1c2936434a58616a74797e828585868584817e78706960564d4132281a0b0000000000000000091e32455660757c7d75615746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b16140e040000000000000000000000000000000000050e1416140e050000000000000000000000000000000000000000000000000000000000000000010b11130e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832363d3d3632281b0b0000000000000a1a2832363d3d3632281b0b000000000000000a1a2832363d3d3632281b0b00000000021424313f4b4f534d493c2d2010000000000000000000000c1825303a474c546064696d6f7070706f6c68635b544b4538301e160a00000000000000000002162838455660676761574639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e212727211e160b00000000000000000a161e212727211e160b0000000000000000000a161e212727211e160b0000000000000614202e373a3e38352c1e1002000000000000000000000008131c2a3336434b4f54575a5b5b5b5a57534e493d3632281a130200000000000000000000000a1a2838454b52524b4639291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b12120c09030000000000000000000003090b12120c0903000000000000000000000003090b12120c0903000000000000000002101b2225282320190e0000000000000000000000000000000c171f263035393f424546464645423e39352c211e160a00000000000000000000000000000a1a2832363d3d3632281b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f130e0c0600000000000000000000000000000000000408141c2024292d303131302f2c2923211a0f0903000000000000000000000000000000000a161e212727211e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f14181a1b1b1b1a17130e0c06000000000000000000000000000000000000000003090b12120c0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Hairline SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: -3866548254171027442} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: 268e79bc7d26d5f4eba730c096c20174 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Hairline + m_PointSize: 78 + m_Scale: 1 + m_LineHeight: 93.6 + m_AscentLine: 76.986 + m_CapLine: 55 + m_MeanLine: 38 + m_Baseline: 0 + m_DescentLine: -16.614 + m_SuperscriptOffset: 76.986 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -16.614 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -19.89 + m_UnderlineThickness: 0.741 + m_StrikethroughOffset: 15.2 + m_StrikethroughThickness: 0.741 + m_TabWidth: 22 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 22.234375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 46.34375 + m_Height: 54.59375 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 49.6875 + m_GlyphRect: + m_X: 340 + m_Y: 6 + m_Width: 48 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 34.015625 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 48.328125 + m_GlyphRect: + m_X: 338 + m_Y: 205 + m_Width: 35 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 44.703125 + m_Height: 55.84375 + m_HorizontalBearingX: 5.296875 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 53.28125 + m_GlyphRect: + m_X: 51 + m_Y: 330 + m_Width: 45 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 44.765625 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 59.234375 + m_GlyphRect: + m_X: 212 + m_Y: 314 + m_Width: 45 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 31.984375 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 45.4375 + m_GlyphRect: + m_X: 339 + m_Y: 139 + m_Width: 33 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 31.90625 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 43.984375 + m_GlyphRect: + m_X: 349 + m_Y: 72 + m_Width: 32 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 46.640625 + m_Height: 55.84375 + m_HorizontalBearingX: 5.34375 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 57.6875 + m_GlyphRect: + m_X: 168 + m_Y: 6 + m_Width: 47 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 40.25 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 58.34375 + m_GlyphRect: + m_X: 316 + m_Y: 446 + m_Width: 41 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 0.9375 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 19.03125 + m_GlyphRect: + m_X: 504 + m_Y: 6 + m_Width: 1 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 22.234375 + m_Height: 55.21875 + m_HorizontalBearingX: 1.09375 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 31.78125 + m_GlyphRect: + m_X: 256 + m_Y: 141 + m_Width: 23 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 37.28125 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 47.65625 + m_GlyphRect: + m_X: 289 + m_Y: 231 + m_Width: 38 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 28.78125 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 39 + m_GlyphRect: + m_X: 399 + m_Y: 6 + m_Width: 29 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 51.40625 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 69.5 + m_GlyphRect: + m_X: 277 + m_Y: 6 + m_Width: 52 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 40.25 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 58.34375 + m_GlyphRect: + m_X: 317 + m_Y: 379 + m_Width: 41 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 50.46875 + m_Height: 55.765625 + m_HorizontalBearingX: 5.34375 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 61.15625 + m_GlyphRect: + m_X: 112 + m_Y: 155 + m_Width: 51 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 30.8125 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 43.609375 + m_GlyphRect: + m_X: 383 + m_Y: 138 + m_Width: 31 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 52.421875 + m_Height: 67.9375 + m_HorizontalBearingX: 5.34375 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 61.15625 + m_GlyphRect: + m_X: 19 + m_Y: 92 + m_Width: 53 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 35.25 + m_Height: 54.59375 + m_HorizontalBearingX: 9.046875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 46.0625 + m_GlyphRect: + m_X: 369 + m_Y: 363 + m_Width: 36 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 31.96875 + m_Height: 55.84375 + m_HorizontalBearingX: 4.296875 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 41.265625 + m_GlyphRect: + m_X: 146 + m_Y: 253 + m_Width: 33 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 42.125 + m_Height: 54.59375 + m_HorizontalBearingX: 1.125 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 44.375 + m_GlyphRect: + m_X: 235 + m_Y: 247 + m_Width: 43 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 39.46875 + m_Height: 55.296875 + m_HorizontalBearingX: 8.34375 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 56.15625 + m_GlyphRect: + m_X: 153 + m_Y: 389 + m_Width: 40 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 46.34375 + m_Height: 54.59375 + m_HorizontalBearingX: 1.671875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 49.6875 + m_GlyphRect: + m_X: 204 + m_Y: 388 + m_Width: 48 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 73.234375 + m_Height: 54.59375 + m_HorizontalBearingX: 2.421875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 78.078125 + m_GlyphRect: + m_X: 264 + m_Y: 73 + m_Width: 74 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 42.265625 + m_Height: 54.59375 + m_HorizontalBearingX: 2.265625 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 46.84375 + m_GlyphRect: + m_X: 263 + m_Y: 380 + m_Width: 43 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 41.65625 + m_Height: 54.59375 + m_HorizontalBearingX: 1.40625 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 44.453125 + m_GlyphRect: + m_X: 268 + m_Y: 313 + m_Width: 43 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 39.625 + m_Height: 54.59375 + m_HorizontalBearingX: 3.234375 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 46.328125 + m_GlyphRect: + m_X: 368 + m_Y: 445 + m_Width: 40 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 26.125 + m_Height: 39.46875 + m_HorizontalBearingX: 3.984375 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 36.890625 + m_GlyphRect: + m_X: 416 + m_Y: 385 + m_Width: 28 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 30.421875 + m_Height: 56.625 + m_HorizontalBearingX: 7.171875 + m_HorizontalBearingY: 56.15625 + m_HorizontalAdvance: 42.390625 + m_GlyphRect: + m_X: 83 + m_Y: 86 + m_Width: 31 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.15625 + m_Height: 39.3125 + m_HorizontalBearingX: 4.765625 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 36.390625 + m_GlyphRect: + m_X: 224 + m_Y: 454 + m_Width: 29 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 30.421875 + m_Height: 56.625 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 56.15625 + m_HorizontalAdvance: 42.390625 + m_GlyphRect: + m_X: 69 + m_Y: 172 + m_Width: 32 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 31.1875 + m_Height: 39.3125 + m_HorizontalBearingX: 4.765625 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 40.203125 + m_GlyphRect: + m_X: 140 + m_Y: 458 + m_Width: 32 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 21.65625 + m_Height: 55.140625 + m_HorizontalBearingX: 2.375 + m_HorizontalBearingY: 55.140625 + m_HorizontalAdvance: 25.890625 + m_GlyphRect: + m_X: 226 + m_Y: 6 + m_Width: 23 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 33.0625 + m_Height: 53.5 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 39.15625 + m_GlyphRect: + m_X: 425 + m_Y: 270 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 28.46875 + m_Height: 56.15625 + m_HorizontalBearingX: 7.171875 + m_HorizontalBearingY: 56.15625 + m_HorizontalAdvance: 42.390625 + m_GlyphRect: + m_X: 113 + m_Y: 390 + m_Width: 29 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 4.375 + m_Height: 54.59375 + m_HorizontalBearingX: 5.921875 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 16.21875 + m_GlyphRect: + m_X: 498 + m_Y: 72 + m_Width: 6 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 12.59375 + m_Height: 69.1875 + m_HorizontalBearingX: -2.34375 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 16.21875 + m_GlyphRect: + m_X: 6 + m_Y: 177 + m_Width: 14 + m_Height: 70 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 26.453125 + m_Height: 56.15625 + m_HorizontalBearingX: 7.171875 + m_HorizontalBearingY: 56.15625 + m_HorizontalAdvance: 34.984375 + m_GlyphRect: + m_X: 174 + m_Y: 142 + m_Width: 27 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 47.65625 + m_Height: 38.84375 + m_HorizontalBearingX: 7.171875 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 61.578125 + m_GlyphRect: + m_X: 439 + m_Y: 56 + m_Width: 48 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 28.46875 + m_Height: 38.84375 + m_HorizontalBearingX: 7.171875 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 42.390625 + m_GlyphRect: + m_X: 419 + m_Y: 335 + m_Width: 29 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 33.375 + m_Height: 39.3125 + m_HorizontalBearingX: 4.765625 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 42.9375 + m_GlyphRect: + m_X: 77 + m_Y: 466 + m_Width: 35 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 30.421875 + m_Height: 52.890625 + m_HorizontalBearingX: 7.171875 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 42.390625 + m_GlyphRect: + m_X: 370 + m_Y: 295 + m_Width: 31 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 30.421875 + m_Height: 52.890625 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 42.3125 + m_GlyphRect: + m_X: 473 + m_Y: 203 + m_Width: 32 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 18.328125 + m_Height: 38.84375 + m_HorizontalBearingX: 7.171875 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 26.828125 + m_GlyphRect: + m_X: 419 + m_Y: 436 + m_Width: 19 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 24.140625 + m_Height: 39.46875 + m_HorizontalBearingX: 4.21875 + m_HorizontalBearingY: 38.84375 + m_HorizontalAdvance: 32.640625 + m_GlyphRect: + m_X: 455 + m_Y: 409 + m_Width: 25 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 21.609375 + m_Height: 53.125 + m_HorizontalBearingX: 2.453125 + m_HorizontalBearingY: 52.5 + m_HorizontalAdvance: 25.625 + m_GlyphRect: + m_X: 483 + m_Y: 138 + m_Width: 23 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 28.46875 + m_Height: 38.84375 + m_HorizontalBearingX: 6.75 + m_HorizontalBearingY: 38.21875 + m_HorizontalAdvance: 42.3125 + m_GlyphRect: + m_X: 183 + m_Y: 456 + m_Width: 30 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 33.921875 + m_Height: 38.21875 + m_HorizontalBearingX: 2.109375 + m_HorizontalBearingY: 38.21875 + m_HorizontalAdvance: 38.140625 + m_GlyphRect: + m_X: 471 + m_Y: 268 + m_Width: 35 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 53.203125 + m_Height: 38.453125 + m_HorizontalBearingX: 2.53125 + m_HorizontalBearingY: 38.453125 + m_HorizontalAdvance: 58.265625 + m_GlyphRect: + m_X: 439 + m_Y: 6 + m_Width: 54 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 29.875 + m_Height: 38.21875 + m_HorizontalBearingX: 2.375 + m_HorizontalBearingY: 38.21875 + m_HorizontalAdvance: 34.625 + m_GlyphRect: + m_X: 470 + m_Y: 318 + m_Width: 31 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 34.015625 + m_Height: 52.265625 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 38.21875 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 425 + m_Y: 205 + m_Width: 35 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 28.3125 + m_Height: 38.21875 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 38.21875 + m_HorizontalAdvance: 34.015625 + m_GlyphRect: + m_X: 384 + m_Y: 204 + m_Width: 30 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 9.046875 + m_Height: 10.0625 + m_HorizontalBearingX: 9.671875 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 31.203125 + m_GlyphRect: + m_X: 317 + m_Y: 205 + m_Width: 10 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 5.0625 + m_Height: 55.21875 + m_HorizontalBearingX: 6.828125 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 18.875 + m_GlyphRect: + m_X: 260 + m_Y: 6 + m_Width: 6 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 309 + m_Metrics: + m_Width: 24.265625 + m_Height: 55.84375 + m_HorizontalBearingX: 4.09375 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 32.6875 + m_GlyphRect: + m_X: 184 + m_Y: 74 + m_Width: 25 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 4.828125 + m_Height: 13.734375 + m_HorizontalBearingX: 5.96875 + m_HorizontalBearingY: 4.453125 + m_HorizontalAdvance: 16.53125 + m_GlyphRect: + m_X: 60 + m_Y: 490 + m_Width: 6 + m_Height: 15 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 5.28125 + m_Height: 46.734375 + m_HorizontalBearingX: 6.515625 + m_HorizontalBearingY: 37.453125 + m_HorizontalAdvance: 18.84375 + m_GlyphRect: + m_X: 123 + m_Y: 458 + m_Width: 6 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 5.0625 + m_Height: 38.078125 + m_HorizontalBearingX: 6.515625 + m_HorizontalBearingY: 37.453125 + m_HorizontalAdvance: 18.09375 + m_GlyphRect: + m_X: 499 + m_Y: 368 + m_Width: 6 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 314 + m_Metrics: + m_Width: 5.0625 + m_Height: 5.078125 + m_HorizontalBearingX: 6.515625 + m_HorizontalBearingY: 4.453125 + m_HorizontalAdvance: 18.09375 + m_GlyphRect: + m_X: 74 + m_Y: 241 + m_Width: 6 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 315 + m_Metrics: + m_Width: 42.0625 + m_Height: 5.078125 + m_HorizontalBearingX: 6.515625 + m_HorizontalBearingY: 4.453125 + m_HorizontalAdvance: 54.75 + m_GlyphRect: + m_X: 6 + m_Y: 498 + m_Width: 43 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 326 + m_Metrics: + m_Width: 26.125 + m_Height: 59.203125 + m_HorizontalBearingX: 3.3125 + m_HorizontalBearingY: 56.15625 + m_HorizontalAdvance: 32.765625 + m_GlyphRect: + m_X: 29 + m_Y: 418 + m_Width: 27 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 0.78125 + m_Height: 72.65625 + m_HorizontalBearingX: 8.5 + m_HorizontalBearingY: 58.578125 + m_HorizontalAdvance: 17.78125 + m_GlyphRect: + m_X: 6 + m_Y: 92 + m_Width: 2 + m_Height: 74 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 329 + m_Metrics: + m_Width: 26.125 + m_Height: 59.203125 + m_HorizontalBearingX: 3.3125 + m_HorizontalBearingY: 56.15625 + m_HorizontalAdvance: 32.765625 + m_GlyphRect: + m_X: 31 + m_Y: 172 + m_Width: 27 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 330 + m_Metrics: + m_Width: 17.15625 + m_Height: 0.78125 + m_HorizontalBearingX: 5.8125 + m_HorizontalBearingY: 23.328125 + m_HorizontalAdvance: 28.78125 + m_GlyphRect: + m_X: 91 + m_Y: 241 + m_Width: 18 + m_Height: 2 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 333 + m_Metrics: + m_Width: 30.734375 + m_Height: 0.859375 + m_HorizontalBearingX: 1.90625 + m_HorizontalBearingY: -9.359375 + m_HorizontalAdvance: 34.546875 + m_GlyphRect: + m_X: 31 + m_Y: 244 + m_Width: 32 + m_Height: 2 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 11.359375 + m_Height: 68.015625 + m_HorizontalBearingX: 4.984375 + m_HorizontalBearingY: 58.65625 + m_HorizontalAdvance: 19.53125 + m_GlyphRect: + m_X: 6 + m_Y: 258 + m_Width: 13 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 11.34375 + m_Height: 68.015625 + m_HorizontalBearingX: 3.203125 + m_HorizontalBearingY: 58.65625 + m_HorizontalAdvance: 19.53125 + m_GlyphRect: + m_X: 6 + m_Y: 338 + m_Width: 12 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 10.6875 + m_Height: 68.015625 + m_HorizontalBearingX: 8.578125 + m_HorizontalBearingY: 58.578125 + m_HorizontalAdvance: 22.546875 + m_GlyphRect: + m_X: 6 + m_Y: 418 + m_Width: 12 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 10.6875 + m_Height: 68.015625 + m_HorizontalBearingX: 3.28125 + m_HorizontalBearingY: 58.578125 + m_HorizontalAdvance: 22.546875 + m_GlyphRect: + m_X: 29 + m_Y: 338 + m_Width: 11 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 15.59375 + m_Height: 68.015625 + m_HorizontalBearingX: 3.671875 + m_HorizontalBearingY: 58.578125 + m_HorizontalAdvance: 22.625 + m_GlyphRect: + m_X: 50 + m_Y: 6 + m_Width: 17 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 341 + m_Metrics: + m_Width: 15.59375 + m_Height: 68.015625 + m_HorizontalBearingX: 3.359375 + m_HorizontalBearingY: 58.578125 + m_HorizontalAdvance: 22.625 + m_GlyphRect: + m_X: 78 + m_Y: 6 + m_Width: 16 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 342 + m_Metrics: + m_Width: 19.734375 + m_Height: 21.6875 + m_HorizontalBearingX: 6.703125 + m_HorizontalBearingY: 57.796875 + m_HorizontalAdvance: 33.15625 + m_GlyphRect: + m_X: 199 + m_Y: 210 + m_Width: 21 + m_Height: 22 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 29.015625 + m_Height: 26.046875 + m_HorizontalBearingX: 8.109375 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 231 + m_Y: 209 + m_Width: 30 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 32.75 + m_Height: 10.765625 + m_HorizontalBearingX: 6.359375 + m_HorizontalBearingY: 28.390625 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 272 + m_Y: 208 + m_Width: 34 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 0.78125 + m_Height: 17.703125 + m_HorizontalBearingX: 6.9375 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 14.65625 + m_GlyphRect: + m_X: 143 + m_Y: 223 + m_Width: 2 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 10.78125 + m_Height: 17.703125 + m_HorizontalBearingX: 6.9375 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 24.5625 + m_GlyphRect: + m_X: 120 + m_Y: 223 + m_Width: 12 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 351 + m_Metrics: + m_Width: 47.03125 + m_Height: 55.84375 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 53.59375 + m_GlyphRect: + m_X: 125 + m_Y: 74 + m_Width: 48 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 352 + m_Metrics: + m_Width: 54.21875 + m_Height: 60.140625 + m_HorizontalBearingX: 5.21875 + m_HorizontalBearingY: 50.9375 + m_HorizontalAdvance: 64.078125 + m_GlyphRect: + m_X: 30 + m_Y: 258 + m_Width: 55 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 362 + m_Metrics: + m_Width: 31.984375 + m_Height: 73.796875 + m_HorizontalBearingX: 6.515625 + m_HorizontalBearingY: 63.109375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 33 + m_Height: 75 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 370 + m_Metrics: + m_Width: 37.125 + m_Height: 54.59375 + m_HorizontalBearingX: 4.015625 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 290 + m_Y: 139 + m_Width: 38 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 38.6875 + m_Height: 55.765625 + m_HorizontalBearingX: 3.28125 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 96 + m_Y: 254 + m_Width: 39 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 28.859375 + m_Height: 54.90625 + m_HorizontalBearingX: 9.328125 + m_HorizontalBearingY: 54.90625 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 392 + m_Y: 72 + m_Width: 30 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 34.171875 + m_Height: 55.21875 + m_HorizontalBearingX: 5.21875 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 166 + m_Y: 321 + m_Width: 35 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.234375 + m_Height: 55.84375 + m_HorizontalBearingX: 5.109375 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 67 + m_Y: 398 + m_Width: 35 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 40.328125 + m_Height: 54.671875 + m_HorizontalBearingX: 2.1875 + m_HorizontalBearingY: 54.671875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 264 + m_Y: 446 + m_Width: 41 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 31.4375 + m_Height: 55.21875 + m_HorizontalBearingX: 6.625 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 212 + m_Y: 142 + m_Width: 33 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 405 + m_Metrics: + m_Width: 35.640625 + m_Height: 54.59375 + m_HorizontalBearingX: 5.5 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 322 + m_Y: 297 + m_Width: 37 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 406 + m_Metrics: + m_Width: 32.453125 + m_Height: 55.21875 + m_HorizontalBearingX: 6 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 220 + m_Y: 74 + m_Width: 33 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 435 + m_Metrics: + m_Width: 35.953125 + m_Height: 37.515625 + m_HorizontalBearingX: 4.6875 + m_HorizontalBearingY: 44.84375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 425 + m_Y: 156 + m_Width: 37 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 439 + m_Metrics: + m_Width: 31.203125 + m_Height: 12.25 + m_HorizontalBearingX: 7.015625 + m_HorizontalBearingY: 32.53125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 156 + m_Y: 223 + m_Width: 32 + m_Height: 13 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 442 + m_Metrics: + m_Width: 28.46875 + m_Height: 29.484375 + m_HorizontalBearingX: 7.21875 + m_HorizontalBearingY: 40.875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 459 + m_Y: 368 + m_Width: 29 + m_Height: 30 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 443 + m_Metrics: + m_Width: 28.46875 + m_Height: 29.484375 + m_HorizontalBearingX: 9.5625 + m_HorizontalBearingY: 40.875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 384 + m_Y: 254 + m_Width: 30 + m_Height: 30 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 0.9375 + m_Height: 56.15625 + m_HorizontalBearingX: 7.640625 + m_HorizontalBearingY: 56.15625 + m_HorizontalAdvance: 16.21875 + m_GlyphRect: + m_X: 153 + m_Y: 321 + m_Width: 2 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 33.6875 + m_Height: 55.21875 + m_HorizontalBearingX: 6.28125 + m_HorizontalBearingY: 54.59375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 190 + m_Y: 247 + m_Width: 34 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.328125 + m_Height: 55.84375 + m_HorizontalBearingX: 5.453125 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 107 + m_Y: 322 + m_Width: 35 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 50.703125 + m_Height: 55.84375 + m_HorizontalBearingX: 4.328125 + m_HorizontalBearingY: 55.21875 + m_HorizontalAdvance: 59.359375 + m_GlyphRect: + m_X: 105 + m_Y: 6 + m_Width: 52 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 38.21875 + m_Height: 38.21875 + m_HorizontalBearingX: 4.296875 + m_HorizontalBearingY: 38.21875 + m_HorizontalAdvance: 46.796875 + m_GlyphRect: + m_X: 433 + m_Y: 106 + m_Width: 39 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -2937446388065179406} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 44 + m_Height: 86 + - m_X: 0 + m_Y: 86 + m_Width: 13 + m_Height: 85 + - m_X: 0 + m_Y: 171 + m_Width: 25 + m_Height: 81 + - m_X: 13 + m_Y: 86 + m_Width: 64 + m_Height: 80 + - m_X: 44 + m_Y: 0 + m_Width: 28 + m_Height: 80 + - m_X: 72 + m_Y: 0 + m_Width: 27 + m_Height: 80 + - m_X: 0 + m_Y: 252 + m_Width: 24 + m_Height: 80 + - m_X: 0 + m_Y: 332 + m_Width: 23 + m_Height: 80 + - m_X: 0 + m_Y: 412 + m_Width: 23 + m_Height: 80 + - m_X: 0 + m_Y: 492 + m_Width: 54 + m_Height: 17 + - m_X: 23 + m_Y: 332 + m_Width: 22 + m_Height: 80 + - m_X: 24 + m_Y: 252 + m_Width: 66 + m_Height: 72 + - m_X: 23 + m_Y: 412 + m_Width: 38 + m_Height: 72 + - m_X: 54 + m_Y: 484 + m_Width: 17 + m_Height: 26 + - m_X: 25 + m_Y: 166 + m_Width: 38 + m_Height: 72 + - m_X: 25 + m_Y: 238 + m_Width: 43 + m_Height: 13 + - m_X: 63 + m_Y: 166 + m_Width: 43 + m_Height: 69 + - m_X: 68 + m_Y: 235 + m_Width: 17 + m_Height: 17 + - m_X: 85 + m_Y: 235 + m_Width: 29 + m_Height: 13 + - m_X: 77 + m_Y: 80 + m_Width: 42 + m_Height: 69 + - m_X: 99 + m_Y: 0 + m_Width: 63 + m_Height: 68 + - m_X: 106 + m_Y: 149 + m_Width: 62 + m_Height: 68 + - m_X: 119 + m_Y: 68 + m_Width: 59 + m_Height: 68 + - m_X: 162 + m_Y: 0 + m_Width: 58 + m_Height: 68 + - m_X: 45 + m_Y: 324 + m_Width: 56 + m_Height: 68 + - m_X: 90 + m_Y: 248 + m_Width: 50 + m_Height: 68 + - m_X: 114 + m_Y: 217 + m_Width: 23 + m_Height: 30 + - m_X: 137 + m_Y: 217 + m_Width: 13 + m_Height: 30 + - m_X: 61 + m_Y: 392 + m_Width: 46 + m_Height: 68 + - m_X: 71 + m_Y: 460 + m_Width: 46 + m_Height: 51 + - m_X: 101 + m_Y: 316 + m_Width: 46 + m_Height: 68 + - m_X: 140 + m_Y: 247 + m_Width: 44 + m_Height: 68 + - m_X: 150 + m_Y: 217 + m_Width: 43 + m_Height: 24 + - m_X: 107 + m_Y: 384 + m_Width: 40 + m_Height: 68 + - m_X: 117 + m_Y: 452 + m_Width: 17 + m_Height: 59 + - m_X: 134 + m_Y: 452 + m_Width: 43 + m_Height: 51 + - m_X: 168 + m_Y: 136 + m_Width: 38 + m_Height: 68 + - m_X: 178 + m_Y: 68 + m_Width: 36 + m_Height: 68 + - m_X: 147 + m_Y: 315 + m_Width: 13 + m_Height: 68 + - m_X: 147 + m_Y: 383 + m_Width: 51 + m_Height: 67 + - m_X: 160 + m_Y: 315 + m_Width: 46 + m_Height: 67 + - m_X: 184 + m_Y: 241 + m_Width: 45 + m_Height: 67 + - m_X: 193 + m_Y: 204 + m_Width: 32 + m_Height: 33 + - m_X: 206 + m_Y: 136 + m_Width: 44 + m_Height: 67 + - m_X: 225 + m_Y: 203 + m_Width: 41 + m_Height: 38 + - m_X: 214 + m_Y: 68 + m_Width: 44 + m_Height: 67 + - m_X: 250 + m_Y: 135 + m_Width: 34 + m_Height: 67 + - m_X: 220 + m_Y: 0 + m_Width: 34 + m_Height: 67 + - m_X: 254 + m_Y: 0 + m_Width: 17 + m_Height: 67 + - m_X: 258 + m_Y: 67 + m_Width: 85 + m_Height: 66 + - m_X: 271 + m_Y: 0 + m_Width: 63 + m_Height: 66 + - m_X: 334 + m_Y: 0 + m_Width: 59 + m_Height: 66 + - m_X: 177 + m_Y: 450 + m_Width: 41 + m_Height: 51 + - m_X: 198 + m_Y: 382 + m_Width: 59 + m_Height: 66 + - m_X: 206 + m_Y: 308 + m_Width: 56 + m_Height: 66 + - m_X: 229 + m_Y: 241 + m_Width: 54 + m_Height: 66 + - m_X: 218 + m_Y: 448 + m_Width: 40 + m_Height: 51 + - m_X: 257 + m_Y: 374 + m_Width: 54 + m_Height: 66 + - m_X: 262 + m_Y: 307 + m_Width: 54 + m_Height: 66 + - m_X: 258 + m_Y: 440 + m_Width: 52 + m_Height: 66 + - m_X: 310 + m_Y: 440 + m_Width: 52 + m_Height: 66 + - m_X: 311 + m_Y: 373 + m_Width: 52 + m_Height: 66 + - m_X: 362 + m_Y: 439 + m_Width: 51 + m_Height: 66 + - m_X: 266 + m_Y: 202 + m_Width: 45 + m_Height: 23 + - m_X: 284 + m_Y: 133 + m_Width: 49 + m_Height: 66 + - m_X: 283 + m_Y: 225 + m_Width: 49 + m_Height: 66 + - m_X: 311 + m_Y: 199 + m_Width: 21 + m_Height: 22 + - m_X: 316 + m_Y: 291 + m_Width: 48 + m_Height: 66 + - m_X: 363 + m_Y: 357 + m_Width: 47 + m_Height: 66 + - m_X: 332 + m_Y: 199 + m_Width: 46 + m_Height: 66 + - m_X: 333 + m_Y: 133 + m_Width: 44 + m_Height: 66 + - m_X: 343 + m_Y: 66 + m_Width: 43 + m_Height: 66 + - m_X: 377 + m_Y: 132 + m_Width: 42 + m_Height: 66 + - m_X: 386 + m_Y: 66 + m_Width: 41 + m_Height: 66 + - m_X: 393 + m_Y: 0 + m_Width: 40 + m_Height: 66 + - m_X: 433 + m_Y: 0 + m_Width: 65 + m_Height: 50 + - m_X: 498 + m_Y: 0 + m_Width: 12 + m_Height: 66 + - m_X: 433 + m_Y: 50 + m_Width: 59 + m_Height: 50 + - m_X: 492 + m_Y: 66 + m_Width: 17 + m_Height: 66 + - m_X: 427 + m_Y: 100 + m_Width: 50 + m_Height: 50 + - m_X: 477 + m_Y: 132 + m_Width: 34 + m_Height: 65 + - m_X: 419 + m_Y: 150 + m_Width: 48 + m_Height: 49 + - m_X: 378 + m_Y: 198 + m_Width: 41 + m_Height: 50 + - m_X: 467 + m_Y: 197 + m_Width: 43 + m_Height: 65 + - m_X: 419 + m_Y: 199 + m_Width: 46 + m_Height: 65 + - m_X: 378 + m_Y: 248 + m_Width: 41 + m_Height: 41 + - m_X: 465 + m_Y: 262 + m_Width: 46 + m_Height: 50 + - m_X: 419 + m_Y: 264 + m_Width: 45 + m_Height: 65 + - m_X: 364 + m_Y: 289 + m_Width: 42 + m_Height: 65 + - m_X: 464 + m_Y: 312 + m_Width: 42 + m_Height: 50 + - m_X: 413 + m_Y: 329 + m_Width: 40 + m_Height: 50 + - m_X: 410 + m_Y: 379 + m_Width: 39 + m_Height: 51 + - m_X: 453 + m_Y: 362 + m_Width: 40 + m_Height: 41 + - m_X: 493 + m_Y: 362 + m_Width: 17 + m_Height: 50 + - m_X: 449 + m_Y: 403 + m_Width: 36 + m_Height: 51 + - m_X: 413 + m_Y: 430 + m_Width: 30 + m_Height: 50 + m_FreeGlyphRects: + - m_X: 0 + m_Y: 509 + m_Width: 54 + m_Height: 2 + - m_X: 23 + m_Y: 484 + m_Width: 31 + m_Height: 8 + - m_X: 13 + m_Y: 166 + m_Width: 12 + m_Height: 5 + - m_X: 25 + m_Y: 251 + m_Width: 43 + m_Height: 1 + - m_X: 63 + m_Y: 235 + m_Width: 5 + m_Height: 3 + - m_X: 44 + m_Y: 80 + m_Width: 33 + m_Height: 6 + - m_X: 77 + m_Y: 149 + m_Width: 29 + m_Height: 17 + - m_X: 99 + m_Y: 68 + m_Width: 20 + m_Height: 12 + - m_X: 24 + m_Y: 324 + m_Width: 21 + m_Height: 8 + - m_X: 85 + m_Y: 248 + m_Width: 5 + m_Height: 4 + - m_X: 106 + m_Y: 217 + m_Width: 8 + m_Height: 18 + - m_X: 45 + m_Y: 392 + m_Width: 16 + m_Height: 20 + - m_X: 0 + m_Y: 510 + m_Width: 71 + m_Height: 1 + - m_X: 61 + m_Y: 460 + m_Width: 10 + m_Height: 24 + - m_X: 90 + m_Y: 316 + m_Width: 11 + m_Height: 8 + - m_X: 114 + m_Y: 247 + m_Width: 26 + m_Height: 1 + - m_X: 101 + m_Y: 384 + m_Width: 6 + m_Height: 8 + - m_X: 107 + m_Y: 452 + m_Width: 10 + m_Height: 8 + - m_X: 119 + m_Y: 136 + m_Width: 49 + m_Height: 13 + - m_X: 140 + m_Y: 315 + m_Width: 7 + m_Height: 1 + - m_X: 150 + m_Y: 241 + m_Width: 34 + m_Height: 6 + - m_X: 168 + m_Y: 204 + m_Width: 25 + m_Height: 13 + - m_X: 193 + m_Y: 237 + m_Width: 32 + m_Height: 4 + - m_X: 206 + m_Y: 203 + m_Width: 19 + m_Height: 1 + - m_X: 214 + m_Y: 135 + m_Width: 36 + m_Height: 1 + - m_X: 220 + m_Y: 67 + m_Width: 38 + m_Height: 1 + - m_X: 147 + m_Y: 450 + m_Width: 30 + m_Height: 2 + - m_X: 160 + m_Y: 382 + m_Width: 38 + m_Height: 1 + - m_X: 184 + m_Y: 308 + m_Width: 22 + m_Height: 7 + - m_X: 198 + m_Y: 448 + m_Width: 20 + m_Height: 2 + - m_X: 206 + m_Y: 374 + m_Width: 51 + m_Height: 8 + - m_X: 229 + m_Y: 307 + m_Width: 33 + m_Height: 1 + - m_X: 134 + m_Y: 506 + m_Width: 377 + m_Height: 5 + - m_X: 134 + m_Y: 503 + m_Width: 124 + m_Height: 8 + - m_X: 177 + m_Y: 501 + m_Width: 81 + m_Height: 10 + - m_X: 218 + m_Y: 499 + m_Width: 40 + m_Height: 12 + - m_X: 257 + m_Y: 440 + m_Width: 1 + m_Height: 8 + - m_X: 262 + m_Y: 373 + m_Width: 49 + m_Height: 1 + - m_X: 362 + m_Y: 505 + m_Width: 149 + m_Height: 6 + - m_X: 311 + m_Y: 439 + m_Width: 51 + m_Height: 1 + - m_X: 250 + m_Y: 202 + m_Width: 16 + m_Height: 1 + - m_X: 258 + m_Y: 133 + m_Width: 26 + m_Height: 2 + - m_X: 266 + m_Y: 225 + m_Width: 17 + m_Height: 16 + - m_X: 284 + m_Y: 199 + m_Width: 27 + m_Height: 3 + - m_X: 283 + m_Y: 291 + m_Width: 33 + m_Height: 16 + - m_X: 316 + m_Y: 357 + m_Width: 47 + m_Height: 16 + - m_X: 311 + m_Y: 221 + m_Width: 21 + m_Height: 4 + - m_X: 271 + m_Y: 66 + m_Width: 72 + m_Height: 1 + - m_X: 343 + m_Y: 132 + m_Width: 34 + m_Height: 1 + - m_X: 492 + m_Y: 50 + m_Width: 6 + m_Height: 16 + - m_X: 427 + m_Y: 66 + m_Width: 6 + m_Height: 34 + - m_X: 510 + m_Y: 0 + m_Width: 1 + m_Height: 132 + - m_X: 509 + m_Y: 66 + m_Width: 2 + m_Height: 66 + - m_X: 477 + m_Y: 100 + m_Width: 15 + m_Height: 32 + - m_X: 419 + m_Y: 132 + m_Width: 8 + m_Height: 18 + - m_X: 377 + m_Y: 198 + m_Width: 1 + m_Height: 1 + - m_X: 467 + m_Y: 150 + m_Width: 10 + m_Height: 47 + - m_X: 510 + m_Y: 197 + m_Width: 1 + m_Height: 65 + - m_X: 465 + m_Y: 199 + m_Width: 2 + m_Height: 63 + - m_X: 332 + m_Y: 265 + m_Width: 46 + m_Height: 24 + - m_X: 332 + m_Y: 265 + m_Width: 32 + m_Height: 26 + - m_X: 464 + m_Y: 264 + m_Width: 1 + m_Height: 48 + - m_X: 406 + m_Y: 289 + m_Width: 13 + m_Height: 40 + - m_X: 406 + m_Y: 289 + m_Width: 7 + m_Height: 68 + - m_X: 364 + m_Y: 354 + m_Width: 49 + m_Height: 3 + - m_X: 363 + m_Y: 423 + m_Width: 47 + m_Height: 16 + - m_X: 410 + m_Y: 289 + m_Width: 3 + m_Height: 90 + - m_X: 453 + m_Y: 329 + m_Width: 11 + m_Height: 33 + - m_X: 506 + m_Y: 312 + m_Width: 5 + m_Height: 50 + - m_X: 510 + m_Y: 312 + m_Width: 1 + m_Height: 199 + - m_X: 449 + m_Y: 379 + m_Width: 4 + m_Height: 24 + - m_X: 485 + m_Y: 412 + m_Width: 26 + m_Height: 99 + - m_X: 485 + m_Y: 403 + m_Width: 8 + m_Height: 108 + - m_X: 363 + m_Y: 430 + m_Width: 50 + m_Height: 9 + - m_X: 413 + m_Y: 480 + m_Width: 98 + m_Height: 31 + - m_X: 443 + m_Y: 454 + m_Width: 68 + m_Height: 57 + - m_X: 443 + m_Y: 430 + m_Width: 6 + m_Height: 81 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 268e79bc7d26d5f4eba730c096c20174 + pointSizeSamplingMode: 0 + pointSize: 78 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Hairline SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Hairline SDF.asset.meta new file mode 100644 index 0000000..a6999af --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Hairline SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 932db15dad1eb664ab1a91d94a8b6fbf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HairlineItalic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HairlineItalic SDF.asset new file mode 100644 index 0000000..bbbf522 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HairlineItalic SDF.asset @@ -0,0 +1,2710 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-4398803698183095516 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-HairlineItalic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f0c0a04000000000000000000000000000000000000000000000000000000061016180e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1518100e0800000000000000000000000000000000000000000000040a0c101316171717161513110e0b080100000000000000000000000000000000000000000000000000040a0c11141617171614110c0a0400000000000000000000000000000000000000000000000000000000000000070d0f1d0b0801000000000000000000000000000000000000000000000000000000080d0f1c1a140a0000000000000000000000000000000000000000000000000000000000000812181a0b09030000000000000001080b1b18120800000000000000000000000000000000000000000000000000000002080b1b0f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d0f10100f0d0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812181b0e0c060000000000000000000000000000000000070d0f1b19130900000000000000000000000000000000000000000000000000000000000000000002101b2224211f170c000000000000000000000000000000000000000000000000000a18232b2e23211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000917232a2d25221b10030000000000000000000000000000000000060c0e171f2126292b2c2d2c2b2b282623201c14100b080100000000000000000000000000000000000000070c171f2126292b2c2c2b2a26211f170c0903000000000000000000000000000000000000000000000000000002101b222432201c140800000000000000000000000000000000000000000000000002101b2225322f271c0e000000000000000000000000000000000000000000000000000000000c1a252d30211e160a000000000009151d20302d251a0c0000000000000000000000000000000000000000000000000009151d203024221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b10141c20232425252422201d15110b080100000000000000000000000000000000000000000000080d0f12100a0000000000000000000000000000000000000000000c1a252d302320190e000000000000000000000000000002101b2224302e261a0c000000000000000000000000000000000000000000000000000000000000000010202d363937332a1c0c0000000000000000000000000000000000000000000000061828353f4339362d1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001727353e423a372e2110000000000000000000000000000000080f1a21232a33373b3e4041424141403e3b3835302625201d15090700000000000000000000000000000002101b222a33373b3e414242403f3c373329211e160a0000000000000000000000000000000000000000000000000010202d3639483530261808000000000000000000000000000000000000000000000010202e373a4743392c1c030000000000000000000000000000000000000000000000000000081a2a3741453632281a0a00000009192731354541382a1a01000000000000000000000000000000000000000000000009192731364639362d20100000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202526303538393a3b393736322826201d15090400000000000000000000000000000000000002101b222527241d1204000000000000000000000000000000000000001a2a37414538352c1e0e0000000000000000000000000010202d36394642382a1a02000000000000000000000000000000000000000000000000000000000000071b2d3e4a4f4c473a2a1704000000000000000000000000000000000000000000001023354653584e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919354552574f4b3f2e1b0800000000000000000000000004101b222c35393a474c505355565757565553504e4b43363a353127211a0f080000000000000000000000000010202d363a474c51545657575654514c473a3632281b120000000000000000000000000000000000000000000000071b2d3e4a4f5d4b4336261401000000000000000000000000000000000000000000081b2e3e4b4f5c564a392111000000000000000000000000000000000000000000000000000012253748555a4b45382816030001152737444b5a5548381f0f0000000000000000000000000000000000000000000002152737444b5b4f4a3e2d1808000000000000000000000000000000000000000000000000000000000000000000000000000212182630353a36434b4d4f50504e4d4b45383c3531271f180c000000000000000000000000000000000010202e373a3c3930231201000000000000000000000000000000000008183748555a4d493c2c19060000000000000000000000071b2d3e4a4f5b55483820100000000000000000000000000000000000000000000000000000000000000d22364a5c64615847331f0a00000000000000000000000000000000000000000000162b3f53646d635b4a3621100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115273752636d655d4b37220e00000000000000000000000c171f2e373d494e56586165686b6c6c6c6b6a6866636054554f4b4437362d231c110600000000000000000000071b2d3e4a4f586166696b6c6c6b69666158544b4539301c13080000000000000000000000000000000000000000000d22364a5c6472605443301c080000000000000000000000000000000000000000000d22374b5c647168563f2e1c0800000000000000000000000000000000000000000000000003182d4155666f605645321e0900081d314455607066553d2c1a06000000000000000000000000000000000000000000081d3144556070645c4a3625130000000000000000000000000000000000000000000000000000000000000000000000000a151d3036434b4f565460626465656462605656514b4437342a1c13080000000000000000000000000000081b2e3e4b4f514d41301f0f0000000000000000000000000000000001142636556670635a4935200c00000000000000000000000d22364a5c647066553e2e1b0700000000000000000000000000000000000000000000000000000000000f24394f647a76614c37210c00000000000000000000000000000000000000000000182e43586d8279634e3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556d827b654f3a251000000000000000000002101c2a333e4b4f5b636b71767b7e8081828180807d7b78756f6b6560554e4a3d372e211a0f0200000000000000000d22364a5c6470767b7e808181807f7b76706960574d403025180800000000000000000000000000000000000000000f24394f647a8773604b3520100000000000000000000000000000000000000000000f253a4f647a86715d4b37230d000000000000000000000000000000000000000000000000051a30455a6f8475604b36210b000b20354b607485705b4935210c0000000000000000000000000000000000000000000b20364b6075847a645443301c0b000000000000000000000000000000000000000000000000000000000000000000000a1a2832404d5460656b707578797a7a7977756f6c6660554c473a3025180b000000000000000000000000000d22374b5c64675f4d3d2d1909000000000000000000000000000000081c304354708478634d3a291704000000000000000000000f24394f647a85705c4b37220d000000000000000000000000000000000000000000000000000000000013283e53687e7e68533e2813000000000000000000000000000000000000000000000f243a4f647a836e5c4a36221000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758875604b36200b00000000000000000311202d3a474c5c646f78808684807d7a797879797a7c7e818484807a756c635b504b3f362c1e160a000000000000000f24394f64798586807c7a79797a7c8084857e75665e4a43362513000000000000000000000000000000000000000012283d52677d867c66513e2d1b07000000000000000000000000000000000000000014293e53697e857a65503b2a1805000000000000000000000000000000000000000000000000162b40556b807c675239291703081d3144556e8378634e382310000000000000000000000000000000000000000000081d314455657b8572604a3a291704000000000000000000000000000000000000000000000000000000000000000008182838454b5e66747a8185848281807f81828484817b756a61594a4336291b0d0000000000000000000000000f253a4f647a7c675b4a3726140100000000000000000000000000000b20354b607584816b5846331f090000000000000000000013293e53687e847a644f3b2b19050000000000000000000000000000000000000000000000000000000010253a50657a816c56412c17000000000000000000000000000000000000000000000d22374b5c6e847a644f3f2e1b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a846f5645311d09000000000000000311212f3e4a58616d7a84847d76706b6865646363646567696c6f757a7f8481796f655d4e493d32281a0a0000000000000b20354b607276716b6765636365666a6f767f867c6b605443301c1400000000000000000000000000000000000001162b40566b807c846f5c4a36220d0000000000000000000000000000000000000002152838586d827b836d5948341f090000000000000000000000000000000000000000000000000e23394e6378836e5746331e0a0115273751667c806a553e2d1b070000000000000000000000000000000000000000021527374c5d6e837d685846331f0f00000000000000000000000000000000000000000000000000000000000000001325364556606d7c86827b75706d6b6a6a6c6d6f75797f857f77686054463a2b1d0d00000000000000000000000d22374b5c6b8179635544311d0b00000000000000000000000000000e23384e6378818176614c37271501000000000000000002152737576d8279826c594834200a000000000000000000000000000000000000000000000000000000000c22374c6177846f5a39281603000000000000000000000000000000000000000000071b2e3e4e6479846f5d4b37221100000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939556a7f7e6954382715020000000000000011212f3f4c5c647682857a6f6761575653504f4e4e4f505254575560646a707982847a6e635b4b45382816020000000000081c30435460615856524f4e4e4f515558616a77848072604a42311e0e000000000000000000000000000000000003162839596f84778179644f3b2b1805000000000000000000000000000000000000091d3245567085728377624c3726140100000000000000000000000000000000000000000000000c2136495b708576614c36210c000b20364b607585705c4a36220800000000000000000000000000000000000000000009192f3f4d62788776614c3d2d1a07000000000000000000000000000000000000000000000000000000000000071c30435460748282776d6660555856555556585460646a747b847e726158483b2b190900000000000000000000081b2e3e4b60758373604b392916030000000000000000000000000012273c52677c7d797f695544311d080000000000000000081d3144556f846f8177624d382816030000000000000000000000000000000000000000000000000000000a1f3447597185715746321e09000000000000000000000000000000000000000000001021364a5c6e837a654f3f2f1c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e334657708579634e39240e000000000000000e1e2e3f4c5d657a877e72645d524b46393d3b3939393a3a3c3f37444b4f555c646d778184796b605645321e09000000000001142636434b4c463a3d3a39393a3c3a474c59627381816c604e3c2c190600000000000000000000000000000000091e32465770857078826d594834200a0000000000000000000000000000000000000b20364b6075846f7b7f6a5544311d080000000000000000000000000000000000000000000000061a2c3d556a7f7d67523a2a1704091d3245566d8279644e36251300000000000000000000000000000000000000000000112035485a6a7f816c5b4a3621120000000000000000000000000000000000000000000000000000000000011527374a6072837f6e6259504b44374140404136434b4e546066747f84766259483727150200000000000000000000101e324556657b7e685746321e0a00000000000000000000000001162b41566b80796e8375604b35201000000000000000000b20364b6075846f78806b5645321e0900000000000000000000000000000000000000000000000000000006182a3a5b708576614b36210c08010000000000000000000000000000000000000000071a2d3e4e6379846f5d4b38231200000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b617687725b4a36210c00000000000008182b3c4b5d657c877a6960544b3f3632282825242324242527292631353a3e4a4f59626c78838074604b36210b00000000000008182630353633292725242425272a333b48556072837e685a49352010000000000000000000000000000000000c21364b617685706e8377624d3928160300000000000000000000000000000000000f243a4f6479816c748574604b35200e0000000000000000000000000000000000000000000000000f23384d6278846f5847331f0a0215283850667b806b5443301c0700000000000000000000000000000000000000000005192b3c4b60758779634e41301b0b00000000000000000000000000000000000000000000000000000000081d314455697e816c614d483b3631272c2b2a2c26303536434b55606a7b8477625544311d0e00000000000000000000031628384c5e6e8376614b36210c00000000000000000000000005192b3b596f8475677c7c67523f2e1b08000000000000000f24394e6479806b6d8275604b362111000000000000000000000000000000000000000000000000060c0f1a212d42576d8279644f3924201d140b08020000000000000000000000000000000000000f21364a5b6d837b6550402f18080000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b826d583d2d1a07000000000000132536485a657b8779645c4a43362e211e1613100f0e0e0f101214141d20252d363b484d5b636e7c836f593727150100000000000008141c20211f1712100e0e1011171f2a37445461768778634d3e2d1b070000000000000000000000000000000f243a4f6479826c657a806b5745321e08000000000000000000000000000000000013283e53687d7d676a7f7c66513d2c1a0600000000000000000000000000000000000000000000000b2035495a708577614c37210d000b20354b60758574604a35200b000000000000000000000000000000000000000000000e1e324556667c85705f4d392816030000000000000000000000000000000000000000000000000000000b20354b60748776614b43342b201d1516151517141c20263037444b5d657a8574604b3c2b1906000000000000000000000a1a2f4051667b7e68533929170300000000000000000000000b203448596f846f6074836e5d4b37220e0000000000000013283d53687d7c67667b7d6853402f1c09000000000000000000000000000000000000000000050f1a21232c35383f54697e7c67523d39353126201d15090000000000000000000000000000000000071a2d3d4d637885705e4c36251300000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b576c817d67523d2812000000000000071c30435462788779635b4a3e30251810090300000000000000000001080b101b222b343d494e5e7185715544311d080000000000000001080b0c0a04000000000000040d1926364758677c846e5c4a36220b00000000000000000000000000000013283d52687d7e695d6f8476604b3625130000000000000000000000000000000002152737576c8279636277846f5b4935210a000000000000000000000000000000000000000000000006192b3c54697e7d68533b2b1805081d3144556c827a644f37261401000000000000000000000000000000000000000000021628384c5e6f847c675746321e0e00000000000000000000000000000000000000000000000000000010253b50657a826d57463320180d08020000000001080b141c27313f4b5c697f806b5a4935200b00000000000000000008182636434b6074836e5746331e0a00000000000000000000000d22374d6277826d55697f7a654f3c2c1906000000000001142637576c8178636074836e5e4c38230f00000000000000000000000000000000000000000d19202c35393d494e5154667b806b55524f4b44373631271c1308000000000000000000000000000000000f2135495b6d827b665443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000b20344859718677624d37220d0000000000031628394a6072857d675b4a3d2e1c130800000000000000000000000000000000070d18202c35405b708575604b35200b0000000000000000000000000000000000000000000918293a4d5f718579644f392917030000000000000000000000000001162b41566b807b6552687d7e685443301c07000000000000000000000000000000081d31445570857560596e8378634e3928160300000000000000000000000000000000000000000000000e22374c6277846f594834200b0115273750657a816c5544311d08000000000000000000000000000000000000000000000a1a30404d63788775614b3c2c1906000000000000000000000000000000000000000000000000000013283d53687d7f695439291705000000000000000000000109151d2f3e4a60738578624d38230d000000000000000000132536435460646d8176614b36210c000000000000000000000011263c51667b7e69546176826d5a4935200b0000000000081d3144556f84756054697e7b65503d2c1a06000000000000000000000000000000000004121d2b343d494e565b63676a6b78836e6a67646055514b44373025181002000000000000000000000000000006192c3c4d62788573604a36261401000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778671594834200b0000000000091e324657687e836e5f4d3d2d1f100000000000000000000000000000000000000000050e1a2e43596e8378624d38230d000000000000000000000000000000000000000000000c1c304151677c826d5746331e0a00000000000000000000000000031729395a6f8477624d60758574604a35200f0000000000000000000000000000000b20364b607585705550657a816c5745321e0900000000000000000000000000000000000000000000000b203448596f8477624d37220e000b20354b60748675604b35200b0000000000000000000000000000000000000000000000122135495b6b80806b5a493520120000000000000000000000000000000000000000000000000000142a3f54697f7d68533d28130000000000000000000000000002111c304354677c806b56402b160100000000000000071c30435460737a797f7a644f3a250f0000000000000000000000152a40556a7f7a6550586c8178624d3a291704000000000b20354b6075846f544b6176836e5b4935210c00000000000000000000000000000000061423303c484d5b636c72787c7f808188817f7d79756e6760554a43362d20130500000000000000000000000000000e2035485a6c817c665443301c090000000000000000000000000000000000000000000000000000000000000000000000000013253652687d816c563b2b180500000000001325364b61758878624d41301f0f0000000000000000000000000000000000000000000000162c41566b817a65503a251000000000000000000000000000000000000000000000001220364b60758776614b36210c000000000000000000000000000a1e3346577186715948566a7f7b66513d2d1a0700000000000000000000000000000f24394e6479816c574b5d708576604b362110000000000000000000000000000000000000000000000005182b3b53687d7e69543c2b1906081c3043546c817b6550372715020000000000000000000000000000000000000000000006192c3c4b61758778634d402f1a0a0000000000000000000000000000000000000000000000000012283d52677d7f6a553b2a180500000000000000000000000000001325364b617686715b46311c06000000000000000b20354a6072838f8e877c67513c27120000000000000000000004172a3a596e8376614c4d6378816b5846331f09000000000e23394e6378816c5746576c8178634e3a291704000000000000000000000000000005142432414d5a626e78818784807c7a7a867a7b7d8184837c746760544a3e312316080000000000000000000000000005192b3c4d62778673604b372614010000000000000000000000000000000000000000000000000000000000000000000000071c3043546d837b66513b26110000000000071c304354697f816c594834231301000000000000000000000000000000000000000000000014293e53697e7d68523d28130000000000000000000000000000000000000000000000081d3144556d827c67513c2712000000000000000000000000000c21364b617685705b3b4c6177846f5c4a36210d000000000000000000000000000013283d53687d7d68533f54697e7d68533e2e1b0800000000000000000000000000000000000000000000000d21374c617785705a4935200b011426364f647a826d5544311d0800000000000000000000000000000000000000000000000e1e324657677c846f5e4c382815020000000000000000000000000000000000000000000000000e23384e6378846f5947341f120100000000000000000000000000081e3346577186715c47321c07000000000000000f24394e64798ea1a6917c67523c2712000000000000000000000a1f3347587085705847495b6d8376614c3726140100000012283d52677d7d6852394d6378816c5846331f090000000000000000000000000003132332424f5f677883867d766f6a67656e827865686c70787f867c73645c4d4134261607000000000000000000000000000e203448596c817c675544311d0900000000000000000000000000000000000000000000000000000000000000000000000b20354a60748876614b36210c00000000000b20354a60738778624d3b2b190500000000000000000000000000000000000000000000000011263c51667b806a55402b1500000000000000000000000000000000000000000000000215273751667c826d57392917030000000000000000000000000f253a4f647a826d574247586d8279644e3b2a180500000000000000000000000001142637576c8179644e394c617685705c4b37220c0000000000000000000000000000000000000000090f11161f3347586f8478624d382316161622374b5c718675604b3620161616161616160f0d070000000000000000000000000000031628394d5f70857b665645321d0d0000000000000000000000000000000000000000000000000c2135495b708677624c402f1c1408000000000000000000000000071a2d3d5c7186715c47311c07000000000000000e23394e63798ea0a08e79644f39240f000000000000000000000c21374c6176836e593a3c50657b7e695544311d08000000132536566b8179644e39495b6e8376614c37261401000000000000000000000000102131414f60697c887e746861575551556a807b6653575a626a7680857a675f51443426150400000000000000000000000005182b3b4c61778674604b37271502000000000000000000000000000000000000000000000000000000000000000000000e24394e637985705746321e0a000000000010253b50657a846f5a48351d0d000000000000000000000000000000000000000000000000000e24394e6379826d58432d180000000000000000000000000000000000000000000000000c22374c617786715746331e0a00000000000000000000000013283d53687d7e69543f3a4e6379826d5947341f0a000000000000000000000000081d314455708575604b3646586d827a644f3a2a1804000000000000000000000000000000000003111c23262b2b2a3a52677d7f6a543d2c2b2b2b2b2e3e566b807b665138282b2b2b2b2b2b2b24221b1002000000000000000000000000000b1b30414e63798774604b3c2b19050000000000000000000000000000000000000000000000061a2c3d52677c816c5e4c3f30261c1308070000000000000000000a21364a5b7186715c47311c07000000000000000c2136495b6d828f8f826e5c4a36220d0000000000000000000010253b50657a806a5540384b5d6f8474604b3520100000071c3043546f8475604b363c50667b7f695544311d080000000000000000000000081b2e3f4e60697e87796860554c46393d52677c7e69543c484d58616b78857d6b625144332212000000000000000000000000000d1f3447596b807d685544311d0a0000000000000000000000000000000000000000000000000000000000000000000215273854697e7f6a55392916030000000005182a3b576c817d68523c2b1900000000000000000000000000000000000000000000000000000c21364b617685705a3727150200000000000000000000000000000000000000000000000b1f344759728776614b36210c000000000000000000000001162c41566b817b66503b36495b6e8377624c3828160200000000000000000000000b20354b607585705544313a4f6479826d5847331f08000000000000000000000000000000000011222f383b404040404b617685705b49404040404040404e6479826d5645404040404040404039362d201000000000000000000000000000001321364a5b6c817f6a5a483420110000000000000000000000000000000000000000000000000f25394d5f6e837c665d4b43363025211a1613110f0e0e0e0f101a2c3c4e6379836e58432e190300000000000000061a2c3d4a60727a7a72604a3e2d1b0700000000000000000000142a3f54697f7c66513c2f3f53687d7c67523e2e1b08000b20354a6075846f554431354a60748474604b35201000000000000000000000000e22374b5d687d8677635b4b44373329394e6479826d5742353a464c5a637583806b625040301c0c00000000000000000000000004182a3b4c61768674604b382815020000000000000000000000000000000000000000000000000000000000000000091d3145566f847a644f3a250f00000000000b1f344859728777624c37220e00000000000000000000000000000000000000000000000000000a1e3346577185715544311d08000000000000000000000000000000000000000000000004182a3b5a6f8479644f39240f00000000000000000000000417293a5a6f8477624d382c3d50667b806a5645321e0900000000000000000000000e24394e6379826d573727364a5c708577614c36261401000000000000000000000000000000091c2f404c505555555555576e8378635555555555555555555c708576605555555555555555554f4a3e2d1b0700000000000000000000000000071a2d3d4c61768778624d3f2f190900000000000000000000000000000000000000000000000a1d30414c6175847b6960544a4336362d2b28262424232324252738495a6c827b66513b26110000000000000000000f1c3043546064646054433020100000000000000000000003162839586d8378624d3823364b6075836e5c4b37220e000e23384d6378826c573727304354697e7c67513e2d1b070000000000000000000010253a4f657a87786259493d31261e21364b607685705a3a2a29333c4957617282806b5e4c3a2a17040000000000000000000000000c1f3347586a807e685645321d0a00000000000000000000000000000000000000000000000000000000000000000b20364b60758875604b35200b00000000000d22374c62778672594834200b0000000000000000000000000000000000000000000000000000031729395b718675604b36200b000000000000000000000000000000000000000000000000172c41576c817c67523d271200000000000000000000000a1f3346587286725a483523384c5e708575604b362111000000000000000000000012283d52677d7e68533e292d3e53687d7f695443301c080000000000000000000000000000000f23384c5e666b6b6b6b6b6b6b7d806b6b6b6b6b6b6b6b6b6b6b6b7f7d6b6b6b6b6b6b6b6b6b6b645c4a36220d00000000000000000000000000000f1f334658687d836e5d4b372715010000000000000000000000000000000000000000000001121e3346576176847f736660544e4a3d413d3b3a3939393a3b36455662788573604a35200b00000000000000000000132536434a4f4f4a433625130200000000000000000000091e324557708575604a35203245566b807a644f3c2b190612273c52677c7e68533e2925364b6176846f5c4a36220d0000000000000000000014293f54697f7a645a483b2c1d14091e3245567186715847331f1f2c3946546075857c665847331f0d00000000000000000000000004172a3a4c61768675604b392816030000000000000000000000000000000000000000000000000000000000000010253b50657a836e5544311d08000000000011263b50667b836d583b2b1805000000000000000000000000000000000000000000000606060600192e44596e8378624d38230d00000000000000000000000000000000000000000000000014293f54697e7f6a553f2a1500000000000000000000000c21364c617685705b3c2b1c2f4053687d7d6853402f1c0900000000000000000000132536566c8179644f3a2421364b60768674604b35200e00000000000000000000000000000011263b50667b80808080808080818780808080808080808080808082858080808080808080808079644f39240f00000000000000000000000000000417293a4a6072857b655544311d0d000000000000000000000000000000000000000000000003172939465861737f847b746a635b595653514f4e4e4e4f50525460748479635443301c070000000000000000000008182530353a3a353025180800000000000000000000000b21364b607685705443301c28384c6277826d5a4835200b162b40566b8079644f3a241e3246576c8179644f3b2b180500000000000000000012273b4f6169645c4a3c2b1d0f01031628385a6f8477614c37220e1b2936455762788776614c3b2a18050000000000000000000000000c1f3346586a7f7e695745321e0b00000000000000000000000000000000000000000000000000000000000004172a3a566b807e6853372614010000000000142a3f54697f7f6a543f2a150000000000000000000000000000000000000000070d0f1b1b1b1b1b1b2c41566c817a65503b251000000000000000000000000000000000000000000000000011273c51667c826c57422d17000000000000000000000010253a4f657a826d58422d1821364b6075846f5e4c38230f000000000000000000071c3043546f8476604b36211e3245576c817b66513c2b190600000000000000000000000000000d22374c62777878787878787879847c797878787878787878787879877978787878787878787974604b36200b0000000000000000000000000000000b1c304354647a8674604b3b2a180500000000000000000000000000000000000000000000000b1b293a465460697780847f79706e6b6866646363636465676973827c675b4a36251300000000000000000000000008131c202525201c13080000000000000000000000000f253a4f647a816c573625131f3448596d8278624d392917192b3c5a6f8476604b36211629394d6378826d594834200a0000000000000000000c2032434f544f4a3e2d1e0e000000162c41566b817a654f3a25100b182839485a6a7f816c5947341f0b0000000000000000000000000417293a4b61768675604b3929170300000000000000000000000000000000000000000000000000000000000a1f334758718678634e38230e000000000000172c41576c817c67523d271200000000000000000000000000000000000002101b2224303030303030303e54697e7d68533d28130000000000000000000000000000000000000000000000000f24394f6479846f5a362513000000000000000000000013283e53687d7f69543f2a141e3245566a807b65503d2c1a0600000000000000000b20354a607585705645321e1628394e6378846f5a4835200a00000000000000000000000000000b203448596263636363636363687d7f69636363636363636363636b807b666363636363636363605645311d09000000000000000000000000000000001325364a5c6d827e695947341f100000000000000000000000000000000000000000000000000c1c2936434b59616b757b818584807d7b79797878797a7d7f847f695f4d3d2d18080000000000000000000000000000070b0f0f0b07000000000000000000000000000013293e53687e7d68533d2813182a3b4e6479816b5746331e2035485a7084705645321e0b2035495a6e8377624d382816020000000000000000031425323b3f39362d20100000000013283e53687d7d68533e2813000a1b2b3c4b61768877624c37220d000000000000000000000000000b1e324657697e7f695746331e0c00000000000000000000000000000000000000000000000000000000000c21374c617687725b4935210c000000000000192e44596e837a65503a251000000000000000000000000000000000000010202d3639454545454545454551667b806b55402b160000000000000000000000000000000000000000000000000c21374c617687725443301c0700000000000000000001172c41566c817b66513b26111628384c6277836e5b4935210c00000000000000000e23384e6378826d583828160a2136495b708578624d382815020000000000000000000000000005182b3b484c4e4e4e4e4e4e4e617685705b4e4e4e4e4e4e4e4e4f6479826d564e4e4e4e4e4e4e4b45382715020000000000000000000000000000000008182d3e4c61778777624c3e2e18080000000000000000000000000000000000000000000000000c1826303b474c5660666c70767a7d7f80818181807e7c84806b614f40301f0f0000000000000000000000000000000000000000000000000000000000000000000001152737576c8279644f39240f0d22364a5c6f8476614b372622384d6277826d5838281606192c3c50657b806b5645321e09000000000000000000071420272924221b10020000000010253a4f657a816b56412c1600000e1e3246576a7f7f69543a291704000000000000000000000000031628394b60758676614b3a2917040000000000000000000000000000000000000000000000000000000012273c51677c826d573d2c1a060000000000001a30455a6f8579644e39240f0000000000000000000000000000000000071b2d3e4a4f5b5b5b5b5b5b5b5b5b6479826d58432d180300000000000000000000000000000000000000000000000a1f334758738875604a35200b00000000000000000004172a3a5a6f8478624d38230d0a1f3447596d8278634e3a2a18040000000000000012273d52677c7e69543e2914061a2c3d52677c806b5645321d0900000000000000000000000000000d1d2b343738383838383846586e8378634e383838383838384a5c718676604b3838383838383631271a0a000000000000000000000000000000000000101f334758697e826d5c4b3626140100000000000000000000000000000000000000000000000008141c2a3438454b515757616467696b6c6c6c6a697d8272604a433222120100000000000000000000000000000000000000000000000000000000000000000000081d314455708575604b36200b071b2d3e51667c7e69554431273c51667c7e69543f2914000e23384c5e708575604b36211100000000000000000000030c12140f0d070000000000000c22374c6177846f5a3828160300031629394d627886715846331f0a000000000000000000000000000b1e324556697e7f6a5846331f0c00000000000000000000000000000000000000000000000000000006192c3c576c827c67523c2712000000000000001b30465b708578634e38230e00000000000000000000000000000000000d22364a5c64707070707070707070707684705b45301b06000000000000000000000000000000000000000000000004172a3a5c718677624c37220d0000000000000000000a1f334758728775604a35200b05182a3b4e6379826c5847331f0a00000000000001162c41566b817a654f3a2510000f20364b60758675604b3620100000000000000000000000000000000d1820222323232323293a52677c806a553e2d232323232d3e556a807c67513a2923232323201d150a0000000000000000000000000000000000000004182a3a4b6073867a645443301c0c00000000000000000000000000000000000000000000000000010c181f2731363b39464c4f525456575756627786756154433025150400000000000000000000000000000000000000000000000000000000000000000000000b20354b607586715645321d09001020354b60748474604b352b40556a807a65503a251000091c2f4053687e7d68533f2f1c08000000000000000000000000000000000000000000000a1f3447597185715645321e0900000b2035495a728676614c36210c00000000000000000000000000021628384b60758676614c3a2a180400000000000000000000000000000000000000000000000000000c2035495a728777614c37220c000000000000001b31465b708678624d38230d00000000000000000000000000000000000f24394f6479858585858585858585848484705b46301b060000000000000000000000000000000000000000000000001a2f44596f8479644f3a240f0000000000000000000c21374c617686715443301c07000d21364a5b6f8477614c38271502000000000006192c3c5a6f8476614b36210c00091d3145566b807d67523e2d1b07000000000000000000000000000000050b0d0e0e0e0e0e21364b607686715c4a36220e0e1023394e6378836e5846331f0e0e0e0b09020000000000000000000000000000000000000000000c1d314455657a8673604b3a2917040000000000000000000000000000000000000000000000000000040a151d20262933363a3d3f414142556a7f7d685746362513070000000000000000000000000000000000000000000000000000000000000000000000000e24394e6379826d583828150200081c304354697e7c67513e2e3b596e8476614c36210c00001121364b617685705d4b38230e0000000000000000000000000000000000000000000004182a3a5b708576604b36210b000006192b3c586d827a65503b251000000000000000000000000000000a1d314556687d806b5847331f0d00000000000000000000000000000000000000000000000000000d23384d627886715947341f0a000000000000001b30455b708578634e39230e00000000000000000000000000000000000d22364a5c647070707070707070707070706655422e1904000000000000000000000000000000000000000000000002172c41576c817c67523c271200000000000000000010253a4f657a826d583625130000071a2d3d51667b7f6a5645311d0900000000000c2035495a7085705746321e0a00021527384d627885705c4a36220b00000000000000000000000000000000000000000000091e3245566d8279644f362513000c2135495b708576614c36210c0000000000000000000000000000000000000000000000000000011426374b5d6d827d685847331f0f0000000000000000000000000000000000000000000000000000000002090b11171e2125282a2b2e43596e8377624d392818080000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d7e69543f29140000011426364c6176846f5c4a3647597085705846331f0a0000091e3246576b817b65503c2c190600000000000000000000000000000000000000000000182d42576d8279644e39240f000000152b40556a807d68533e28130000000000000000000000000000021527384b60748677614c3b2a18050000000000000000000000000000000000000000000000000114263653687d806b563a2a1804000000000000001a2f445a6f8479644f39240f0000000000000000000000000000000000071b2d3e4a4f5b5b5b5b5b5b5b5b5b5b5b5b554838261200000000000000000000000000000000000000000000000000142a3f54697f7f69543f2a1400000000000000000013293e53687e7f6a543f2a150000000f20354a60748575604b36201100000000000d23384d6278836d583929160300000a2035495a6f8479644e3a2917040000000000000000000000000000000000000000000316283851667b806b5443301c07061a2c3d546a7f7d68523b2a1804000000000000000000000000000000000000000000000000000009192e3f4c62778776614c3d2d1a07000000000000000000000000000000000000000000000000000000000000060c171f21272b2c2f44596e8476614c37210d0000000000000000000000000000000000000000000000000000000000000000000000000000132536566c817a65503b2510000000081e3346576c8179644f3c4c6277836e593a2917040000031628394d6278836e5b4935210b0000000000000000000000000000000000000000000014293f54697e7c67523c271200000014293e54697e7f6a543f2a150000000000000000000000000000000a1d314455677d806b5948341f0d000000000000000000000000000000000000000000000000081c3043546e837b65503b26100000000000000000192e44596e837a654f3a251000000000000000000000000000000000000010202d363945454545454545454545454642382a1a090000000000000000000000000000000000000000000000000012273c51677c816c57422c17020000000000000002172c41576c817b66513c2611000000071c304354687e7d67523f2e1c080000000012273c51677c7e69543f291400000006192b3c51667b826d5846331f0a000000000000000000000000000000000000000000000b20364b60758674604a35200b000f22384d6278846f5947341f0b0000000000000000000000000000000000000000000000000000001020344859697f816c5c4a36211300000000000000000000000000000000000000000000000000000000000e19202a33373c40424242576c817a644f3b2b1805000000000000000000000000000000000000000000000000000000000000000000000000071c304354708576614c37210c000000031729394d6278826d5a4851667b7f6a543f2a15000000000b2035495a6e8378634d3a29170400000000000000000000000000000000000000000011263b51667b806a55402b1500000013293e53687e806a55402b15000000000000000000000000000000011527374b60738677624c3c2b190500000000000000000000000000000000000000000000000b20354b60758876604b36210b0000000000000000172d42576c827c66513c271100000000000000000000000000000000000002101b22243030303030303030303030302e261a0c00000000000000000000000000000000000000000000000000000f243a4f6479846f59442f1a000000000000000004182a3a5a708578634d38230e000000001325364b6076846f5d4b37230e00000001162b40566b807a65503b2510000000000e20354b60748776614c36211100000000000000000000000000000000000000000000081d3144556c827a654f372614010b2035485a708577614c37220e00000000000000000000000000000000000000000000000000000005182b3b4b60748679644e41301b0b000000000000000000000000000000000000000000000000000004121e2c353a474c515557575552667b806b59483420110000000000000000000000000000000000000000000000000000000000000000000000000b20354a607586715847331f0a000000000b2035495a6e8377624d556a7f7b66503b26110000000006192c3c50657b816c5846331f090000000000000000000000000000000000000000000d23384d6278836e58362614010000132536546a7f7f69543f2a1400000000000000000000000000000000091c304354677c816c5a4834200e00000000000000000000000000000000000000000000000f243a4f6479846f5645321e090000000000000000152a3f556a7f7e69543e29140000000000000000000000000000000000000000070d0f1b1b1b1b1b1b1b1b1b1b1b1b1912090000000000000000000000000000000000000000000000000000000c22374c617786715c3a2a1804000000000000000a1f344759728775604b35200b00000000081e3245576b807a65503c2c1906000005192b3c5a6f8476614c36210c00000000081d3144556a7f7e69543f2f1c080000000000000000000000000000000000000000000215273750657a816c5544311d0805192b3c53697e7e68533c2b19050000000000000000000000000000000000000000000000000000000d1d314455657b85705f4d39291603000000000000000000000000000000000000000000000000031222303c494d5861676a6c6d6b6761758777624d3f2f1c0c00000000000000000000000000000000000000000000000000000000000000000000000e23384d6378846f593a2a17040000000006192c3c50657a806b57596e8377614c37220c00000000000e23384c5d708576614c3726140100000000000000000000000000000000000000000b20354b607585705443301c08000b1c3043546d827c66513c271100000000000000000000000000000000011426364a60738578624d3c2c190600000000000000000000000000000000000000000003162839556a7f7f6a5438281602000000000000000013283d52687d806b56412b1600000000000000000000000000000000000000000000000606060606060606060606060400000000000000000000000000000000000000000000000000000000000b1f3447597388735847331f0a000000000000000c22374c617786715544311d0800000000031628394d6277836e5b4935210c00000b2035485a7085705846331f0a00000000011426374c627786715d4b38230d000000000000000000000000000000000000000004000b20354b60748575604b35200b000e22374c627785705a4835200b040404040000000000000000000000000000000000000000000000021527374c5d6e837d675746321e0f000000000000000000000000000000000000000000000000112130404d5a636d767c808182807c766d7c826d5d4c3a2a18040000000000000000000000000000000000000000000000000000000000000000000012273c51677c806b55402b160000000000000e23374b5d70857661587085705947341f0b0000000000081c2f3f53687e7e695544311d080000000000000000000000000000000000000000081c304354708575604b35200b0d1b2a3b4a60748777624c37220d0000000000000000000000000000000000081c304354667c826c5a4935200f000000000000000000000000000000000000000000091e3245576f8579644f39240f0000000000000000000f253a4f647a846e593a2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b5c718677614c37220c0000000000000010253a50657a836d583726140100000000000a203448596d8278634d3a291704000d22384d6277836e593a2917040000000000091f3448596e837b65503b2b180500000000000000000000000000000000070c0e1919191c3043546c817b655038281519191f3447596f8477624d3822191919191914110b02000000000000000000000000000000000000000009192f3f4d62788775614b3d2c1a06000000000000000000000000000000000000000000000b1b2f3f4d5e667882847f7a7978797d82817a837b655947341f1300000000000000000000000000000000000000000000000000000000000000000000162b40556b807c67513c2712000000000000081c2e3f52687d7e696176836e593b2a18040000000000001121364b61768574604b352010000000000000000000000000000000000000000001142636586e8378624d3823131c2a394759677c846f594834200b0000000000000000000000000000000000001325364c5e708578624d3d2c1a0600000000000000000000000000000000000000000b21364b60768874604a35200b0000000000000000000c21364b617687725947341f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8479644f39240f0000000000000014293e53697e7f6a553f2a1500000000000005182b3b4f6479816c5847331f090011273c51667c7f6a543f2a1500000000000005182a3b50657a836e59483420090000000000000000000000000000010f1a21242e2f2f2f26364f6479826d5645322f2f2f2f2a3b53687d7f69543d2c2f2f2f2f2f29261f14060000000000000000000000000000000000000000112035485a6a7f806b5b493521120000000000000000000000000000000000000000000417293a4c5d667c857a6f6965636364676c767f838677614c41311d0d000000000000000000000000000000000000000000000000000000000000000005182b3b5a6f8478634d38230e000000000000001120364b60758574657b806a55402b1500000000000000091e3246576b817c66513e2d1b070000000000000000000000000000000000000000152b40556a807b66513b2625303b48576177877a644f3b2b18050000000000000000000000000000000000000818304050667b826d5b4935210f000000000000000000000000000000000000000011263b50667b836e5443301c07000000000000000000091e324657718677614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c817c67513c271200000000000002172c42576c817c66513c2711000000000000000d22364a5c6f8476614c37271501152b40556a807b65503b2610000000000000000d23374b5d718677624d37271502000000000000000000000000000f1f2d36394444444444444a5c718675604b444444444444444c617685705b494444444444443e3b312414020000000000000000000000000000000000000005192b3c4b60758779634e40301a0a00000000000000000000000000000000000000000a1f334658657b8375645c54504e4d4f5257616a7986846f5f4e3b2a1805000000000000000000000000000000000000000000000000000000000000000b20344859728775604a35200b00000000000000091d3245566a807c697f7b66513c261100000000000000031628394d627885705c4a36220d000000000000000000000000000000000000000012273c52677c7e69543f3236434a596275847e695c4a361d0d00000000000000000000000000000000000000001223384c5e708578634e3d2d1a0700000000000000000000000000000000000004182a3b566b817d68533625130000000000000000000003162839576d827b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f7e69543f291400000000000005182a3b5b708578634e38230e00000000000000071b2d3e51667c7f695544311d08182a3b596f8477614c37220c00000000000000081c2f3f54697e806a5544311d08000000000000000000000000071a2d3d4a4e59595959595959596b807c66595959595959595959586e83786359595959595959534e42311f0b00000000000000000000000000000000000000000e1e324556667c846f5e4c38281602000000000000000000000000000000000000000c21364c6176847561564a3e3b39383a39464b5b6376857d685947341f0f000000000000000000000000000000000000000000000000000000000000000d22374c627785705443301c0700000000000000021528384c6177846f8277624d38220d00000000000000000b2035495a6e8379644f3b2a1805000000000000000000000000000000000000000f24394e6479826d5739454b5460687785806a614f3e2d1b000000000000000000000000000000000000000000091c2f4050657a836e5b4a3621100000000000000000000000000000000000000b1f344759718677624d38220d000000000000000000000012273c51677c826c573e2e1b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c816c57412c170200000000000b1f344859738875604b35200b00000000000000001020354b60748475604b3520101f3448597085705847331f0a00000000000000001121374c61768775604b36200f0000000000000000000000000c21364a5b636e6e6e6e6e6e6e6e6e79836e6e6e6e6e6e6e6e6e6e6e6e7d806e6e6e6e6e6e6e6e69604e3b26110000000000000000000000000000000000000000021628384c5e6f847c665645321e0e000000000000000000000000000000000000061a2c3d556a7f7c675746382e2524232429323d495861768677624c3d2d1a0700000000000000000000000000000000000000000000000000000000000011263b51667c816c573625130000000000000000000a1f3447596d827a84705a4835200b000000000000000006192b3c50657b826d5948341f0b000000000000000000000000000000000000070c21364b607685705a50576068737e877d6a625042322010000000000000000000000000000000000000000000001123374b5d6f8479634e3e2d1b0700000000000000000000000000000000000c22374c617787725a4835200b00000000000000000000000c21364b617687725c4b37220b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a846e59442f190000000000000d22374c627786715544311d080000000000000000081c304354697e7c67523f2e1b22374c6277836e593a2a180400000000000000000a1f3347586d827c67513d2c1a0600000000000000000000000e24394e63798384848484848484838389848384848484848484848483848983838484848484847e69533e29140000000000000000000000000000000000000000000a1a30404e63788775604b3c2b190500000000000000000000000000000000000c2135495b708575604b39291a100e0e0f161e2c3a4758657a836d5b4a36210a000000000000000000000000000000000000000001000000000000000000152a3f556a7f7d68533e281300000000000000000004182a3b4e647982846f5a3c2b19050000000000000000000e23384b5d718677624c37220d0000000000000000000000000000000005101b222a33455670857060656d767e868277675f50433324140200000000000000000000000000000000000000000000081c2e3f4f647a836e5c4a362210000000000000000000000000000000000012273d52677c816c573c2b190500000000000000000000000a1e3346576f847a644f392917030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c627786715c3a291704000000000010253b50657a836e59372715010000000000000000011426364b6176846f5d4b3722263b51667b7f6a55402a150000000000000000000417293a4f647a85705b4936210b00000000000000000000000c21364a5b636e6e6e6e6e6e6e6e6e6e827b6e6e6e6e6e6e6e6e6e6e6e7085776e6e6e6e6e6e6e69604e3b261100000000000000000000000000000000000000000000122135495b6b807f6a5a4835201100000000000000000000000000000000000e23384e6378836e5443301b0b00000000030f1c2a3a4b5d6d8279634e38281602000000000000000000000000000000040a0c15160e0c07000000000000192e43596e837a644e39240f000000000000000000000c21364a5c6f84806b56412b1600000000000000000000081c2f3f53687e806a55402b150000000000000000000000000000000d19202d363a474c596f8377757b828780786d61594d41332515060000000000000000000000000000000000000000000000001122374b5c6f8479644f3f2e1b08000000000000000000000000000000061a2c3d586d827c66513c27110000000000000000000000000317293951677c826d5746331e0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607588735846331f0a000000000014293e54697e806a55402b1500000000000000000000081e3246576b807a654f3c2b2a40556a7f7b66513b2611000000000000000000000c22374b5c718679634e3929160300000000000000000000071a2d3d4a4e595959595959595959657a816c55595959595959595959697e7e69595959595959534e42311f0b00000000000000000000000000000000000000000000061a2c3d4b61758778624d3f2f19090000000000000000000000000000000012273c52677c7f6a54362614000000000000000c1c2e3f4e6379826c5645321e0900000000000000000000000000000c171f212a2b24211a0f01000000000e23384e6378645c4a36220d00000000000000000000071a2d3d4e637979634e39230e00000000000000000000001120354a607279634e38230e0000000000000000000000000005131d2b343e4a4f58616971818287837c756b625a4c473a3023150700000000000000000000000000000000000000000000000000081b2e3e4f6479846f5d4b3722110000000000000000000000000000000c2135495b728776614c36210c000000000000000000000000000b20364b60758776614b392916030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354728776614c36210c0000000002172d42576c827c67523c271200000000000000000000031629394d6277836e5a48352a3a596e8377624c37220d00000000000000000000071b2e3e53687d816c5746321e0a00000000000000000000000f1f2d363944444444444444444b60748675604b444444444444444c627785705a48444444443e3b3124140200000000000000000000000000000000000000000000000e1e324657677d836e5d4c3727150200000000000000000000000000000014293e53697e7d68533e281300000000000000001121364a5b6f8375604b36210b000000000000000000000000000c1c2a33373f4139362d1f0f010000000c2135495b635b4a3e2d1b0700000000000000000000000f21364a5b63635b4a36210c0000000000000000000000071c30435460635b4935210c000000000000000000000000061323303b484d5c646e767e858882766e6660564d483c342a1c13050000000000000000000000000000000000000000000000000000001022364a5c6e837a644f3f2e1c0800000000000000000000000000000e23394e637885705846331f0a00000000000000000000000000081d3144556a7f7f695746321e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f8479644e39240f0000000005182b3b5b708579634e39240e00000000000000000000000b2034485a6d8278624d39334758708670594834200b00000000000000000000001021364b61768776614b3621100000000000000000000000010f1a21242e2f2f2f2f2f2f3043546c817b665038282f2f2f2f3447596f8478624d382f2f2f29261f1406000000000000000000000000000000000000000000000000031629394d5f70857b655544311d0d000000000000000000000000000000142a3f54697f7d67523d28120000000000000000071a2d3d556a7f7a65503b25100000000000000000000000000a1a2a3a474c55564e4a3d2d200f000000061a2c3d494e493d2d2010000000000000000000000000071a2d3d4a4e4e4a3d2d1a07000000000000000000000000132536434a4e493d2c1a06000000000000000000000003132431414d59626e79838781787b816c58514b4538342b1f180c0000000000000000000000000000000000000000000000000000000000071b2d3e4e6379846f5d4b372311000000000000000000000000000115273753697e806b553a29170400000000000000000000000000021527374b61768776614b3d2c18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172d42576c827b66513c2611000000000b20344859738875604b36200b000000000000000000000005192b3c4f6479816b5746374c6177846f593b2b18050000000000000000000000091e3246576c817e68533f2e1b08000000000000000000000000070c0e1919191919191426364f647a826d5645321e1919182a3b53687d7f6a543d2c1a1914110b0200000000000000000000000000000000000000000000000000000b1b30414e63798674604b3b2b1805000000000000000000000000000013283d53687d7e69543e291400000000000000000010253a50657a7f6a55402a150000000000000000000000021628384758616a6b635b4a3e2d1a070000000e1f2c3538352c1f1002000000000000000000000000000f1f2d363939362d1f0f00000000000000000000000000081825303538352c1f0f000000000000000000000000112131424e5f677883867c756b6377846f5a3a36312720190d04000000000000000000000000000000000000000000000000000000000000001021364a5b6e837a6550402f1c09000000000000000000000000081d3144556e847a65503a2510000000000000000000000000000000091e3346576a7f7f6a5b493626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f7e69543e2914000000000d22374d627787725645311d090000000000000000000000000d22364a5c6f8476614c3750667b806b55402b16000000000000000000000000031628394e637986715d4b37220c0000000000000000000000000000000404040404000822374b5c718675604b36210b000d21364c617685705b4936210c000000000000000000000000000000000000000000000000000000000000001321364a5b6c817f695948342010000000000000000000000000000011263b51667b806b563828160200000000000000000d22384d6277826d58432e180300000000000000000000091e32455661767f8079645c4a36210d000000000e1a2123211a0e000000000000000000000000000000010f1a212423211a0f01000000000000000000000000000008131c2023211a0f0100000000000000000000000a1b2f3f4e60687d887e746760565a7186715746321e150a05000000000000000000000000000000000000000000000000000000000000000000071a2d3d4e637885705e4c3823120000000000000000000000000b20354b60758875604b36200b000000000000000000000000000000031729394b60748679635443301c120300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c816b56412c160100000010263b50657b836e5938271502000000000000000000000000071b2e3e51677c7e695544546a7f7c66513c2711000000000000000000000000000b21364a5b70857a654f3b2a18040000000000000000000000000000000000000000071b2e3e556b807c6651392917030a1f3346586e8378634e39231000000000000000000000000000000000000000000000000000000000000000071a2d3d4c61768777624c3f2e1909000000000000000000000000000d22374c6277846f5645321e0900000000000000000b21364b6076846f5a452f1a05000000000000000000000b21364b60758694968b7a644e39240f0000000000060c0e0c06000000000000000000000000000000000000070c0e0e0c07000000000000000000000000000000000000070b0e0c06000000000000000000000000031628394b5d687e86796860554b455b708576614b36210c0000000000000000000000000000000000000000000000000000000000000000000000000f2135495b6d827b665040301808000000000000000000000010253a4f657a846f5544311d08000000000000000000000000000000000b1d314556647a8473604b4030211103000000000000000000000000000000000000000000000000010b1113110f090000000000000000000000000000000000000000000000000000000010253a4f657a836e59442e190000000014293f54697e806b55402b1600000000000000000000000000001020354b60748474604b596e8377624d38220d00000000000000000000000000071a2d3d52677d836d5947341f090000000000000000000000000000000000000000001024394e6379836e5746331e0a0417293a52677c806b553e2e1b07000000000000000000000000000000000000000000000000000000000000000f1f334658687d826d5d4b372614010000000000000000000000000b20344859718676604b36211200000000000000000b20354b607585705a45301b050000000000000000000010253a50657a8fa4a996816b56412c16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324557657b8777635b4b443743586d8279644f39240f000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4d627885705e4c3625130000000000000000000003172939556a807e69543727150200000000000000000000000000000000021527384b5c6a80806b5e4d402f2114040000000000000000000000000000000000000000000005131e252826231c110400000000000000000000000000000000000000000000000000000d22374d627786715b39291603000002182d42576d827c67523d27120000000000000000000000000000081d314455697e7c6751587085705a4835200b00000000000000000000000000000f20364b60758877614c3726140100000000000000000000000000000000000000000c21364a5b718676614b36210c000c21364b607686715c4a362208000000000000000000000000000000000000000000000000000000000000000417293a4a6072857a655544311d0c00000000000000000000000005182b3b566b807c675241301d0d000000000000000d22374c6277836e59432e1904000000000000000000000e24394e63798e9fa3947f6a553f2a150000000000000000000000000000000000000000000000000000000000040a0c1e0b09030000000000000000000000000000000000000000000000000000000000000000000b21364b6075877a6459493c31263f556a7f7c67523d2712000000000000000000000000000000000000000000000000000000000000000000000000000e2035495a6c827c665443301c090000000000000000000a1e334657708578634e39230e0000000000000000000000000000000000000a1a2e3e4a6072837c665e4c40321f170c0000000000000000000000000000000000000000031423313a3d3b382f221100000000000000000000000000000000000000000000000000000b20354b607588735746321e0a000005192b3c5b708579644e39240f0000000000000000000000000000011426374c6176846f5c6176846f5a3c2b19050000000000000000000000000000091d3245566b807f6a5544311d080000000000000000000000000000000000000000071a2d3d556a7f7d67523a2a1804091e3245576d8379644f36261401000000000000000000000000000000000000000000000000000000000000000c1c304354647a8673604b3a2a17040000000000000000000000000d22374c627785705f4d3b2b1c0e0200000000011527374f657a806b56412b1914120c02000000000000000c21364a5b6c818e8f8575614c36210c000000000000000000000000000000000000000000000000000000000c181f2233211e160a000000000000000000000000000000000000000000000000000000000000000012283d52677d816c5c4a3b2c1d273c51667c806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4d62778573604a3726140100000000000000000c21364c617687725b4a36210c00000000000000000000000000000000000000101c3043546176847c655e4f42332a1c130801000000000000000000000000000000000a161e32414e52504c402f1c0900000000000000000000000000000000000000000000000000081c304354728776614b36210c00000b2035485a748976604b36210b000000000000000000000000000000091e3346576c817964657a806b56402b16000000000000000000000000000000021528384d62788774604b35200e0000000000000000000000000000000000000000000f23384d6278846f5847331f0a0316283951667b816c5443301c0800000000000000000000000103030303030303030303030303030303030303001325364a5c6d827e685847331f100000000000000000000000000b203448596c817c6759483a2b1d150d0b0b0c141d3144556a7f7b66503b2f2f29261f1406000000000000071a2d3d52636c797a74615746331e0a0000000000000000000000000000000000000000000000000000000c1c2a3437483632281a0a000000000000000000000000000000000000000000000000000000000000011527375a6f847a644f3e2e1d0e23394e6378836e5937261401000000000000000000000000000000000000000000000000000000000000000000000000000e203448596c817c675544311d09000000000000000011263c51667b826d583d2d1a07000000000000000000000000000000000000000013253646586176847c69604c473a30251c1408070000000000000000000000040a121b2832424f6068665e4c38230f00000000000000000000000000000000000000000000000000011426365a6f8479634e39240e00000d22384d627787725645321e09000000000000000000000000000000031729394d6278826d697f7c67523c2712000000000000000000000000000000000a2035495a6f847b66513c2c190600000000000000000000000000000000000000000c2035495a708577614c37220d000b20364b60758674604b35200b0000000000000000050e1417181818181818181818181818181818181818181818182d3e4c61778776614c3e2d1808000000000000000000000005182b3b4b617586776258483c31272220202226313f4b60748575604b4444443e3b322414020000000000000f1f3545525c646560564639291703000000000000000000000000000000000000000000000000000004182a3a474c5d4b45382816030000000000000000000000000000000000000000000000000000000000081d3144557287725c4b3720100b20364b607586715544311d080000000000000000000000000000000000000000000000000000000000000000000000000005192b3b4c62778674604b3727150100000000000005192b3b576c817d67523d28120000000000000000000000000000000000000000000818293a46586176837e6d61584a43363026211a14110e0c0b08080b0c0f12171f212f39454b61697d7c66503b26110000000000000000000000000000000000000000000000000000182d42576d827b66513b2611000011263b50667b846e5938281602000000000000000000000000000000000b2035495a6e83776e8378634d38230e0000000000000000000000000000000006192c3c51667c846f5a4935200a000000000000000000000000000000000000000006192c3c54697e7e68533b2b1905081d3144556d827b655038271502000000000000081622292c2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e344759697e816c5c4a3625130000000000000000000000000d1e334657647a8476625a4b44373735353737444b5d687e7e69565a5a5959534f42321f0c000000000000011727353e4a4e504b4538291b0b0000000000000000000000000000000000000000000000000000000a1f3447596173605645321e0b00000000000000000000000000000000000000000000000000000000000b20354b607586715c3e2e1b02081d314455718675604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000d1f3448596b807d675544311d0a0000000000000b20344859728777624c37220d000000000000000000000000000000000000000000000b1b293a465861738082766760544b4336362d29262321201d1d202124272a3337404c57606d7e8576614b36210c0000000000000000000000000000000000000000000000000000152a40556a7f7e69533e29140000142a3f54697f806b56402b16000000000000000000000000000000000006192b3c4f657a80708575604a35200b00000000000000000000000000000000000e20354b60748778634d3828160300000000000000000000000000000000000000000e22374c6277856f594834200b0215273750657a826d5645311d090000000000051626343e414343434343434343434343434343434343434343434343433a4b60738679645443301c080000000000000000000000031729394a5c647b84786a6055504c4b4b4c505560687b84726f6f6f6f6f6e69604f3b2612000000000000000917202d36393a3631271a0b000000000000000000000000000000000000000000000000000000000c22374c61778875604b39291703000000000000000000000000000000000000000000000000000000000c22374c617785705b45301b0002152737596e8478634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4c61778674604b3828150200000000000d22374d62778671594834200b00000000000000000000000000000000000000000000000c1c293a4655606b7b857d736760544e4a3d3f3c39363631313537393c3a474c535e6675828375615746331e0a000000000000000000000000000000000000000000000000000012283d52677d806b56412b160000132536586d827d67523d28120000000000000000000000000000000000000e22374b5d6f8477846f5443301c070000000000000000000000000000000000081d3144556a7f816b5645321e0900000000000000000000000000000000000000000b203448596f8477624d37220d000b20354b60748675604b36200b00000000000e2234445156585858585858585858585858585858585858585858585858585855657a8572604a3626140100000000000000000000000b1b2e3e4b5c6479857f756b6562606061656a747e8986848585848484847e69533e2914000000000000000002101b222425201d150a000000000000000000000000000000000000000000000000000000000013253652677c847f695746331e0c000000000000000000000000000000000000000000000000000000000b21364b607686715c3b2b190500162b40566b807b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000000000d1f3347586b807d685645321d0a000000000013253652687d816c563b2b18050000000000000000000000000000000000000000000000000c1c2937444b5d65757f857c746b645c5954514e4c4b44444b4c4e5156586168717b867f7261574639291703000000000000000000000000000000000000000000000000000010253a50657a836e59432e1900071c304354718679644f39240f000000000000000000000000000000000000081b2e3f52677c82816b56362513000000000000000000000000000000000000011426374d62778875604b36210b000000000000000000000000000000000000000005182b3b53687d7e69543f291400081c3043546c817c66513c2611000000000014293e51626c6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d827d675443301c0800000000000000000000000010202e3e4b5b63737e85807b777575777a7f857e7571706f6f6f6f6f6e69604f3b261200000000000000000000070d0f100b09020000000000000000000000000000000000000000000000000000000000071c3043546d827a8576614c3a2a1704000000000000000000000000000000000000000000000000000000091e324556728672594834200b0013283d52687d7f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4c61768675604b38281603000000071c3043546d837b66513b261100000000000000000000000000000000000000000000000000000c1926313f4b56606a767f858079706e69666361605555606164676b70777d8583786960544639291b0b0000000000000000000000000000000000000000000000000000000d22384d627786705b46311b000b20354a60728975604b36210b000000000000000000000000000000000000001020354b6074867d67523d27120000000000000000000000000000000000000009203448596e837d68523d28130000000000000000000000000000000000000000000d21374c617684705a45301b05011426364f647a826d58432e180300000001172c41566c818283838383838383838383838383838383838383838383838383838383838875604b35200b0000000000000000000000000210202e3d49546068747a7f83848583807b746960555a5a5a5a5a5959534f42321f0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607487737e7f6a5847331f0d000000000000000000000000000000000000000000000000000000031628385a6f8477624d372211000f243a4f6479826d58422d18000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f3346586a7f7e695645321e0b0000000b20354a60748876614b36210c00000000000000000000000000000000000000000000000000000009141d2f38454b58616a747a8285837e7b78767570707576797c80858780786e635b4a4336281b0b000000000000000000000000000000000000000000000000000000000b20354b607488735d48331e000b20354b607378635745321e0900000000000000000000000000000000000000081d314455627774604b36200b0000000000000000000000000000000000000005182b3b4b617578624d38230d0000000000000000000000000000000000000000000a1f3347586277624d38220d00000822374b5c6478624d38220d00000000000f24394e647a7979797979797979797979797979797979797979797979797979797979797a72604b35200b0000000000000000000000000002101f2c36434b5560656a6e6f6f6e6b6660554b44374545454444443e3b32241402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e6479836e748677614c3b2b1805000000000000000000000000000000000000000000000000000000142a3f54697f7e68533f2e18080c21364c617685705b3b2a18050000020b111414120c0300000000000000000000000000000000000000000000000000000000000417293a4b61768675604b3929160300000f24394e647985705746321e0a0000000000000000000000000000000000000000000000000000000001111a28323a464c5460656c70777c7f8284848484858482807c78726b635b4d493c3025180b0000000000000000000000000000000000000000000000000000000000081d3144556479644e39240f00081d31445560635b4a392816030000000000000000000000000000000000000001152737485962605645311d0900000000000000000000000000000000000000000d1e32465761625a4835200b00000000000000000000000000000000000000000004172a3a485a625a4834200b0000071b2e3e4b5a625a4835200b00000000000d21364a5c6464646464646464646464646464646464646464646464646464646464646464605443301c080000000000000000000000000000010f18263037444b5055585a5a5956514b4437312630302f2f2f2f29261f14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839546a7f7e68677c806b594834200e0000000000000000000000000000000000000000000000000000000d22384d6278846f5d4b3625130a1e3346577187715947341f0b0006141f262929271f140600000000000000000000000000000000000000000000000000000000000b1e324657697f7e695746321e0a000013253654697f7f6a55392916030000000000000000000000000000000000000000000000000000000000000a161e293336434a5057596266696c6e6f7070706f6d6a67625a564e493d352c1c1308000000000000000000000000000000000000000000000000000000000000011426374a5c645c4a36210d0001142637444b4e4a3d2d1b0a00000000000000000000000000000000000000000009192b3b484c4b4538271502000000000000000000000000000000000000000003162939464b4d483c2b1906000000000000000000000000000000000000000000000c1c2b3c484d483c2b190500000010202e3c484d483c2b19050000000000071a2d3d4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b43362614010000000000000000000000000000000008141c2631353a4043454543403b3531271d141a1a1a1a1a1914120c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3246576f85786260738577624d3c2c190600000000000000000000000000000000000000000000000000000b2035485a6d827a655443301c151729395a6f8577624c37220d021424313b3e3f3b3225140300000000000000000000000000000000000000000000000000000000031629394b60758676614b36210c00071c3043546f847a644f3a250f0000000000000000000000000000000000000000000000000000000000000000030b171f2530353b3b484d515457595a5b5b5b5a5855524d483c38352c21190e00000000000000000000000000000000000000000000000000000000000000000009192d3d4a4e4a3d2d1a070000091926313539362d1f0f00000000000000000000000000000000000000000000000d1d2b34373631271a0a000000000000000000000000000000000000000000000b1b29323638352b1e0e0000000000000000000000000000000000000000000000000d1d2b3438342b1d0d0000000002101e2b3538352b1e0e000000000000000f1f2d36393939393939393939393939393939393939393939393939393939393939393935302618080000000000000000000000000000000000000109141d20252a2e2f302e2b26201d1509010005050504040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b617686715a54667c816c5a4935200f000000000000000000000000000000000000000000000000000005192b3c4d62788472604a413220192c42576c817a65503a2510151d32424e53544f43321f0c00000000000000000000000000000000000000000000000000000000000b1e324556667c7c66503b2611000b20354a60738273604b35200b000000000000000000000000000000000000000000000000000000000000000000000408131c20252b34373c3f4244454546454442403c38352b23211a0f0600000000000000000000000000000000000000000000000000000000000000000000000f1f2d3639362d1f0f0000000009141d2023211a0f010000000000000000000000000000000000000000000000000d182022201d150a0000000000000000000000000000000000000000000000000b161e212320190e00000000000000000000000000000000000000000000000000000d19202220190d000000000000000e19202220190e0000000000000000010f1a212424242424242424242424242424242424242424242424242424242424242424201c140800000000000000000000000000000000000000000001080b1015191a1a1916110b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b816c574c5e708578624d3d2d1a0700000000000000000000000000000000000000000000000000000e20344859697e806b5f4f43342b293e53697e7d68533e281c2731424f606969614f3b27120000000000000000000000000000000000000000000000000000000000031628384c5e66665e4c38230f00071c304354606c605544311d0800000000000000000000000000000000000000000000000000000000000000000000000000070b10192022272a2d2f303030302f2d2b272320190e0c0600000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124211a0f01000000000001080b0e0c07000000000000000000000000000000000000000000000000000000050b0d0b09020000000000000000000000000000000000000000000000000000030a0c0d0b0600000000000000000000000000000000000000000000000000000000050b0d0b05000000000000000000050b0d0b050000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c576c817b66514050657b826d5b4a362110000000000000000000000000000000000000000000000000000005192b3b4f616d827d6a614d483c343b50657b816c5641263038454b60697e7f69543f29140000000000000000000000000000000000000000000000000000000000000a1a2f404c51504c402f1c090000132536434a574b443726140100000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d111417191a1b1b1b1a1815120d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f151716130d0b05000000000000000000000000000000000000000000000000000000000000000000000000000a10120f0d0700000000000000000000000000000000000c2035495a718676614b364c5d6f8479634e3e2d1b0700000000000000000000000000000000000000000000000000000d1d32434b6074827f6e625a4c483b4d6277846f5a3936434b56606b7e8575614b36210c0000000000000000000000000000000000000000000000000000000000000012222f383c3b382f221200000008182530354235312619090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1b12100a01000000000000000000000000000000000000000000000000000000000000050b0d1d0d0b0600000000000000000000020b111316130d04000000000000000000000000000000000000000000000000030d131518160f060000000000000000000000020b111316130d04000000000000000000000000000000000000000000000000000000000000000000000000000000020b111316130d040000000000000000000000000000000004101b22252a2c2b282220190d0700000000000000000000000000000000000000000000000000000000000000000004121d242724221b10020000000000000000000000000000000d23384d627885705746323f4f647a836e5c4a362211000000000000000000000000000000000000000000000000000000141d31455660727f83786c6259545059718671574d5154606674818475615746331e0a0000000000000000000000000000000000000000000000000000000000000004121d242626231c12040000000008131c202d201d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1a171107000000000000000000000000000000070c0e1c0e0c06000000000000000000061016180d0b050000000000000000000000000a151d203027251d1205000000000000000000000000000000000000000000000000000000000d181f22332320190e000000000000000006131e26282b2821150700000000000000000000000000000000000000000000071520272a2d2a23170900000000000000000006131e26282b282115070000000000000000000000000000000000000000000000000000000000000000000000000006131e26282b2821150700000000000000000000000000000c181f2e373a3f42403e37342b211a0f0100000000000000000000000000000000000000000000000000000000000000122330393c3a362d201000000000000000000000000000000215273753687e7f6a543929374b5d6f8479644f3f2e1c080000000000000000000000000000000000000000000000000000021527384554606a7a8481776f6965627085766062666c747c857f7361574639291703000000000000000000000000000000000000000000000000000000000000000000090f11110f090000000000000000070b170b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1920232f2c24190b000000000000000000000000010f1a21233223211a0f010000000000000a18232b2e2220180d000000000000000000000a1a283236453c393023120100000000000000000000000000000000000000000000000000000d1d2a34374838352b1e0e000000000000021324313a3d403d332615040000000000000000000000000000000000000000051525323c3f423f3527170600000000000000021324313a3d403d332615040000000000000000000000000000000000000000000000000000000000000000000000021324313a3d403d332615040000000000000000000000000c1c2a343f4b4f555756534d483b362d1f150700000000000000000000000000000000000000000000000000000000000a1d30414d514f4a3e2d1b0700000000000000000000000000081d3144556e8379644f39242e3f4e6479846f5d4b3723120000000000000000000000000000000000000000000000000000000a1a2736434a5c646f7b83847f7a7773827a75787c818681786a60544639291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c353844403629190700000000000000000000000f1f2d36394738352c1f0f0000000000061828353f4337342b1d0d000000000000000002152838454b5b524d41301f0f0000000000000000000000000000000000000000000000000005182a3b474c5d4d483c2b190600000000000b1e31424e5355504433210d0000000000000000000000000000000000000002132332434f5458524535230f000000000000000b1e31424e5355504433210d00000000000000000000000000000000000000000000000000000000000000000000000b1e31424e5355504433210d000000000000000000000004182a3a474c5d646a6c6b6862594e4a3d33251608000000000000000000000000000000000000000000000000000000001024394d5f67645c4a36220d000000000000000000000000000b20364b60758774604a352021364a5c6e837a6550402f18080000000000000000000000000000000000000000000000000000000a1825303e4b4f5d656e767b808384878785837f7a756c625a4b4336291b0b00000000000000070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b08010000000000000812181b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c16140e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c494d595447362411000000000000000000000c1c2d3d4a4e5c4e493d2c1a06000000001023354653584d483b2b180500000000000000091d3245566070675f4d3d2d1c0c0000000000000000000000000000000000000000000000000b1f3447596272625a4835200b000000000011263a4e60686b62503d281300000000000000000000000000000000000000102130414f616a6d63523f2a160100000000000011263a4e60686b62503d2813000000000000000000000000000000000000000000000000000000000000000000000011263a4e60686b62503d281300000000000000000000000a1f344759616f7a7f81807d776e635b50433426160400000000000000000000000000000000000000000000000000000012273c51677c7a644f3a240f0000000000000000000000000010253a50657a826d5443301c1a2d3e4e637985705e4c3625130000000000000000000000000000000000000000000000000000000008131c2e373f4b505861666a6e6f7c7f6f6d6a6560564d483c3026180b00000000000008131c20212121212121212121212121212121201c1408000000000c1a252d3032323232323232323232323232323232323232323232323232322b28211608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a636f6554402c1702000000000000000009192a3a4a5b6371635b4935210c00000000162b3f53646d62594834200b000000000000000b20364b6075847d675b4a3a29180800000000000000000000000000000000000000000000061a2c3d4c62778778624d38230d000000000013283d53687e806b55402b160000000000000000000000000000000000000e1e2e3f4d5f6a7f826d58422d180300000000000013283d53687e806b55402b16000000000000000000000000000000000000000000000000000000000000000000000013283d53687e806b55402b1600000000000000000000081c2f3f4c617784837c79797c8284796a61514434210e000000000000000000000000000000000000000000000000000002172c41576c817e68533e291300000000000000000000000004182a3a556b807d67523625130f2135495b6d827b665443301c090000000000000000000000000000000000000000000000000000000000101b222f383a464c5155586378836e5855504b4538342b1c1408000000000000081825303536363636363636363636363636363635302618080000081a2a3841454747474747474747474747474747474747474747474747474747403d332616040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d6378846f59442f1a000000000000000001152737475863798678634e38230e00000000182e43586d8277624d37220d00000000000000091d32455662788779635847362614010000000000000000000000000000000000000000000c2135495b6c81806b5a4835200b000000000010263b50657b826d58432d1800000000000000000000000000000000000c1c2c3c4b5d677d8474604b36200b0000000000000010263b50657b826d58432d18000000000000000000000000000000000000000000000000000000000000000000000010263b50657b826d58432d18000000000000000000000e23374b5d70857e6e676464676d78837f6b62513d2914000000000000000000000000000000000000000000000000000000152a3f546a7f806b56402b160100000000000000000000000a1f344759718677624c37220d061a2c3d4d62788573604a37261401000000000000000000000000000000000000000000000000000000000008111c232933363b404b6075857054433b36322820190d0100000000000000132536434a4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b43362614010012253848555a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c56514433210e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607586715c3a29170400000000000003111d3144556176867c665b4935210c00000000162b40566b807a644f3a250f00000000000000021528384859657b8676615443301c120100000000000000000000000000000000000000081b2e3f4e63798876614c3c2b190600000000000e23384e637885705b372715010000000000000000000000000000000919293a495a657b8676615645311d09000000000000000e23384e637885705b37271502000000000000000000000000000000000000000000000000000000000000000000000e23384e637885705b3727150100000000000000000010253b50657a846f60514e4f525a626e7e806b56412b1601000000000000000000000000000000000000000000000000000012273c52677c836d58432e180000000000000000000000000c22374c617786715948341f0b000f2035485a6c817c675544311d0a00000000000000000000000000000000000000000000000000000000000000080b171f2126314455718675604b35211e160a050000000000000000071c30435460606060606060606060606060606060605443301c0800182d4155667071717171717171717171717171717171717171717171717171716b62513d2814000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145567287725846331f0a000000000000112131424b6073847f695e4c3d2c1a060000000013283e53687d7c67523d271200000000000000000a1a2b3b4b5d697e8472604b40301f0f000000000000000000000000000000000000000922374b5d6e837e695846331e0e0000000000000b20364b607587725544311d0800000000000000000000000000000115273746586278877963584738271502000000000000000b20364b607587725544311d08000000000000000000000000000000000000000000000000000000000000000000000b20364b607587725544311d08000000000000000001162b40566b807d675242393a3c494d606878624d38230d0000000000000000000000000000000000000000000000000000000f253a4f647a85705b37271502000000000000000000000013253652677c806b563b2a18050005192b3c4c62778674604b382715020000000000000000000000000000000000000000000000000000000000000000040a0c142637596e8378624d38230d02000000000000000000000b20354a607275767676767676767676767676767572604b35200b001b30455a70848787878787878787878787878787878787878787878787878787806b56402b16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527385b708576614c36210c00000000000e1e2e3f4e606c81826d614f402f1f0f000000000011263b50667b7f6a543f2a150000000000000000000d1d2e3f4f606d82806b5e4c3d2c1b0b0000000000000000000000000000000000091930404f657a8774604b3a291700000000000000091d324556738875604b35200b0000000000000000000000000004121d3144556176867b655b493a2a1a0a0000000000000000091d324556738875604b36200b00000000000000000000000000000000000000000000000000000000000000000000091d324556738775604b35200b000000000000000004192e43596e8379634e3924242b35424e5a625a4835200b0000000000000000000000000000000000000000000000000000000d22374c627788735544311d0800000000000000000000071c3043546d827a65503b25100000000e1f3448596b807d685645311d0a0000000000000000000000000000000000000000000000000000000000000000000000162b40556b807b66513b261100000000000000000000000c21364b61768484848484848484848484848484847a644f3a250f00182d4155667071717171717171717171717171717171717171717171717171716b62513d281400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8379644e39240f000000000b1b2b3c4b5d687e8574604b433222120100000000000e23394e6378826c57422d1702000000000000000000112132424b6074857c665b4939291603000000000000000000000000000000011527374d5f70857c675645311c0c00000000000000021528385b708578624d38230d00000000000000000000000002122232434b6073847e685d4c3d2c1c0c000000000000000000021528385b708578624d38230d00000000000000000000000000000000000000000000000000000000000000000000021528385b708578624d38230d0000000000000000051a2f455a6f8477624d38220f1920313c484d483c2b19060000000000000000000000000000000000000000000000000000000b20354a60758a75604b36200b000000000000000000000b20354a60748775604b36200b00000005182a3b4c61768675604b392816030000000000000000000000000000000000000000000000000000000000000000000012273d52677d7f69543f291400000000000000000000000a1e324657616f6f6f6f6f6f6f6f6f6f6f6f6f6f6f645d4b37220d0012253848555a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c56514433210e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b807b66513c261100000008182839485a657b8777625645312514040000000000000b21364b6076846f5a442f1a0000000000000000000003141e32455662788779635746321e15030000000000000000000000000000081d314455677c85705f4d382715000000000000000000192e43586e837a65503a2510000000000000000000000000102030404f616c81806b604e3f2f1f0f0000000000000000000000192e43586e837a65503b25100000000000000000000000000000000000000000000000000000000000000000000000192e43586e837a65503a2510000000000000000004192e44596e8378634e38230e06141e2b3538352b1e0e00000000000000000000000000000000000000000000000000000000071c304354728778624d38230d000000000000000000000f24394e6479846f5645311d09000000000d1f3347586a7f7e695745321e0b000000000000000000000000000000000000000000000000000000000000000000000c21364c61767b65503b2510000000000000000000000003162939464b5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4f4b3f2e1b0800081a2a3841454747474747474747474747474747474747474747474747474747403d332616040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e7e69533e291400000013253646576278877a6459473827150700000000000000091e3245577084705b3a2a18040000000000000000000002162838485a657b8675614b4332211100000000000000000000000000031629394b6074877a654f41301a0a000000000000000001162b41566b807d68523d281300000000000000000000000d1d2d3e4c5e697f8372604b42312111010000000000000000000001162b41566b807d68523d28130000000000000000000000000000000000000000000000000000000000000000000001162b41566b807d68523d2813000000000000000002172d42576c827a65503a251000000e19202320190e00000000000000000000000000000000040a0c101314120f0b08010000001325365a6f847a65503b251000000000000000000003162939546a7f7e6954382715020000000004172a3a4b61768675604b3a2917040000000000000000000000000000000000000000000000000000000000000000000a1f33465861655d4b38230e0000000000000000000000000b1b2932364444444444444444444444444444443a372e20100000000c1a252d3032323232323232323232323232323232323232323232323232322b28211608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b816b56412c1601010f1c3043546175857c675c4a3b2a1a0a0000000000000000031628395b7085705947341f0a00000000000000000000000a1a2b3c4b5d697e836e614f3f2f1e0e0000000000000000000000000a1e324657687e836e5d4b3723120000000000000000000013293e53687e7f6a55402a15000000000000000000000b1b2b3b4a5c667c85756154433024140300000000000000000000000013293e53687e806a55402b15000000000000000000000000000000000000000000000000000000000000000000000013293e53687e7f6a55402a15000000000000000000152a40556a7f7c67523d2712000000060b0d0b06000000000000000000000000000000060c171f212628292824201c14080500172d42576c827d68523d28130000000000000000000a1e3246576f8578634e38230e0000000000000c1e334657697f7f6a5846331f0c0000000000000000000000000000000000000000000000000000000000000000000417293a464c504b3f2f1c08000000000000000000000000000b161e212f2f2f2f2f2f2f2f2f2f2f2f2f2f2f25221b1002000000000812181b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c16140e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e6378836e59432e19000f1f30404a6072837f6a5f4d3e2d1d0d00000000000000000000192e44596e8377614c37220c0000000000000000000000000d1d2e3f4f606d827f6a5d4c3c2b1a0a0000000000000000000005182a3b4b61768878634e3f2e1b050000000000000000000011263b51667b826d57422d18000000000000000000081828394859647a8678625746362614060000000000000000000000000011263b51667b826d58432d18000000000000000000000000000000000000000000000000000000000000000000000011263b51667b826d58422d1800000000000000000012283d52677d7f6a553f2a15000000000000000000000000000000000000000000000e1a212933373b3d3e3d393530261f180d152a3f556a7f7f6a55402a150000000000000000000c21364b617687725b4935210c000000000000031729394b60758676614c3a2a18040000000000000000000000000000000000000000000000000000000000000000000b1b2933363b382f2111000000000000000000000000000000030a0c1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0f0d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b617685705b3928160c1c2d3d4d5f6a808372604a4030200f0000000000000000000001162c41566b8179644f39240f00000000000000000000000000112132424b6074857b655a48382816030000000000000000000b1f3448596a80816c5b4935211000000000000000000000000e23394e6378856f5a36261401000000000000000114263646576277867a6459483928180800000000000000000000000000000e23394e637885705a37271501000000000000000000000000000000000000000000000000000000000000000000000e23394e6378856f5a36261401000000000000000010253a50657a826d57422d18000000000000000000000000000000000000000005121f2c353a474c505254524f4b4336342a1c13273d52677c826d58422d1800000000000000000011263c51667b826c573d2c1a06000000000000000b1e324556687e806b5947341f0d000000000000000000000000000000000000000000000000000000000000000000000b171f2125231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d10131516151413100d0b05000000000000000000000000000000000000000000000000000000091e3246577186715745321e192a3a4a5c677c857560544330221201000000000000000000000014293e54697e7c67513c27120000000000000000000000000003141e32455662788678625645321e140300000000000000061a2c3d4c62778877614c3d2c1a0300000000000000000000000c21364b617687725443301c0800000000000003111c3043546175857c665c4a3b2b1b0b0000000000000000000000000000000c21364b617687725544311d08000000000000000000000000000000000000000000000000000000000000000000000c21364b617687725443301c0800000000000000000d22384d6277846f5a36251300000000000000000000000000000000000000031223303d494e5861656869676460544c483b3025253a4f647a856f5a362513000000000000000006192c3c576c817c67513c27120000000000000000031628384b60748677614c3c2b190500000000000000000000000000000000000000000000000000000000000000000000040a0c100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f18202226292a2b2a292825222018130c0a040000000000000000000000000000000000000000000000031628395b718676604b362127374759647a87786257453625130400000000000000000000000011273c51667c7e69543f2914000000000000000000000000000002162838485a657b8575604b42322110000000000000000c2135495b6c827f6a5947341f0e000000000000000000000000091e324657738875604b35200b000000000001112131424b6072837f6a5e4d3e2d1d0d00000000000000000000000000000000091e324657738875604b35200b00000000000000000000000000000000000000000000000000000000000000000000091e324657738875604b35200b00000000000000000b20354b607586715443301c07000000000000000000000000000000000000102130414d5b636e767b7d7e7d79746b62594a433629374d627787725443301c07000000000000000c2035495a728776614c36210c0000000000000000000a1d314455677d816c5a4834200e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101b22252b34373b3e3f40403f3d3b37342b28211f170b0700000000000000000000000000000000000000000000192e44596e8378634e38233144556177867a645a4839281808000000000000000000000000000f24394f6479816c57412c170200000000000000000000000000000a1a2b3c4b5d697f826d604f3f2e1d0d0000000000081c2e3f4e63798775604b3a2a1800000000000000000000000000031628395b718677624d37220d00000000000f1f2f3f4e606b80826d614f403020100000000000000000000000000000000000031628395b718678624d38230d00000000000000000000000000000000000000000000000000000000000000000000031628395b718677624d37220d0000000000000000081d314455728675604a35200b00000000000000000000000000000000000a1a2e3f4d5f677983847f7d7c7d818580776860544639354a60758975604a35200b000000000000000d23384d627885705846331f0a000000000000000000021527374b60738678624d3c2c1906000000000000000000020b11140d0b050000000000000000000000000000040a0c0e0f0d0c0600000000000000000000000000000000000000000000000000000000000000030a0c1015191b1d1d1d1d1d1d1b1815120d0c060000000000000000000000000000000000000000000000000000000000000000000005121d242e373a3b484d50535455555453504c483b3d363329221b10060000000000000000000000000000000000000001162c41566b817b66503b32424b6074847d675c4b3c2b1b0a00000000000000000000000000000c21374c6176836e59442f19000000000000000000000000000000000e1e2e3f4f616d827e695d4b3b2b1a0a000000000923374b5d6e837d675645321c0c0000000000000000000000000000192e44596e837a644f3a250f000000000c1c2c3d4c5d687e8474604b4332221202000000000000000000000000000000000000192e44596e837a65503a25100000000000000000000000000000000000000000000000000000000000000000000000192e44596e837a654f3a25100000000000000000011426375a708577624c37220d00000000000000000000000000000000021527384b5d677d867a706a6866686c707b847e726157483b4354728777624d37220d0000000000000215273753687e7f6a553a29170400000000000000000000091c304354677c826d5b4935210f000000000000000006141f26292220180d0000000000000000000001080c181f2224242320190e00000000000000000000000000000000000000000000000000000002090b161e21252a2e31323232323232302e2b27232019110b090200000000000000000000000000000000000000000000000000000000000d19202f383e4b4f57596265686a6b6a696865625958524c463a362d211a0f0200000000000000000000000000000000000014293e54697e7d68533e3f4f606c81806b5f4d3e2e1d0d0000000000000000000000000000000a1f3347587085705b3a29170400000000000000000000000000000000112132434b6075857b655948382715020000091930414f657a8673604b382816000000000000000000000000000001162c41566b817c67523d27120000000a1a2a3a495b657b86766155443125150400000000000000000000000000000000000001162c41566b817d68523d28130000000000000000000000000000000000000000000000000000000000000000000001162c41566b817c67523d2712000000000000000000182d43586d8279644f3a240f00000000000000000000000000000000091d314556657b8576645d55525153575e66737e83756259483a5a6f847a644f3a250f000000000000081d3144556e8379644f3a240f0000000000000000000000011426364a60738578634d3d2d1a07000000000000021424313b3e37342b1d0d000000000000000009141d202a3337393938352c1e0e000000000000000000000000000000000000000000000000030a151d202932363b4043464747474747474543403c38352c27201d150a070000000000000000000000000000000000000000000000000003111d2b34404c515c646c71777b7e7f807f7e7d7a77706d6861584f4a3e362c1d1509000000000000000000000000000000000011263c51667b806b553c4b5d697e8372604b413120100000000000000000000000000000000004172a3a5b7085705846331f0a0000000000000000000000000000000003141e32455662788677625645311d1302021527374d5f70857b655443301a0a00000000000000000000000000000014293e54697e7f6a543f2a1500000215283847586379877963584737271507000000000000000000000000000000000000000014293e54697e7f6a55402a15000000000000000000000000000000000000000000000000000000000000000000000014293e54697e7f6a553f2a15000000000000000000162b40556b807c67513c2712000000000000000000000000000000000b20364b6074877863584b3f3d3c3d404c5460697a8477625947576d827c67523c27120000000000000b20364b60758775604b35200b000000000000000000000000081c304354667b836d5b4a3621100000000000000b1f31424e534d483b2b18050000000000000b192631353a474c4e4f4d493c2c1906000000000000000000000000000000000000000000000a161e28323639464b5055585b5c5c5c5c5c5c5a5855514d493c3c363228211a0f08000000000000000000000000000000000000000000000513212f3b484d5e66707a818684807d7b7a7a7b7d808385837d766d645c4e493d3127190e000000000000000000000000000000000f24394e6479836d58495a657b86756154433023130200000000000000000000000000000000001a2f445a6f8476614c36210c000000000000000000000000000000000003162838485a657b8574604b41312010081d314455677c846f5d4c3626140000000000000000000000000000000011263c51667b826c57422d170205131d3245566176867b655b493a2a190900000000000000000000000000000000000000000011263c51667b826d58422d18000000000000000000000000000000000000000000000000000000000000000000000011263c51667b826c57422d1700000000000000000013283d53687d7f69543f2a1400000000000000000000000000000005192b3c53687e816b5a493a2e2827282f36434a5c647884776156556a7f7f6a543f2a1500000000000010253a50657a836e5443301c08000000000000000000000000001325364c5e708579634e3e2e1b08000000000011263b4e606962594834200b00000000000b1b2937444b5358616364625a4935200c000000000000000000000000000000000000000003131b283238454b525761656a6e70727272727272706d6a67625a58514b4538362d221b100600000000000000000000000000000000000000041323303f4b59626f7b86837b756f6b6866656566686b6e70787e8482796e635b4b44372b1e100200000000000000000000000000000c21374c617685705b586278877863574636261405000000000000000000000000000000000002172c42576c8179644e39240f0000000000000000000000000000000000000a1a2b3c4b5d697f816c5f4e3e2d1c1729394b60748779634e3f2f1808000000000000000000000000000000000f24394e6479846f5a442f1a02132333434b6074847d685d4b3c2c1c0c000000000000000000000000000000000000000000000f24394e6479856f5a37261401000000000000000000000000000000000000000000000000000000000000000000000f24394e6479846f5a36251300000000000000000010263b50657b816c57412c170200000000000000000000000000000b2035485a718677624d3c2c1b1311131825303e4a5a637983746052677c816c57422c17020000000004182a3a566b807d6853362614010000000000000000000000000008182f404f657a836e5c4b372209000000000014293e53697e77624d37220d000000000919293a465560696f77797978624d38230d000000000000000000000000000000000000000b161e3039454b5660676f767a7f83868787878786868583807c78726d6660564e4a3d372e211a0e010000000000000000000000000000000001122230414d5d65788483786e6560555552515050515255595a62686f798283796a6055483c2e211103000000000000000000000000000a1f334758718671666976857b655a493929180800000000000000000000000000000000000000152a3f546a7f7b66513c2611000000000000000000000000000000000000000e1e2f3f4f616d827d685c4a3a2a1e334657697e826d5b4a36211100000000000000000000000000000000000c21364c617687725c3b2a181020304150616d82806b604e3f2e1e0e00000000000000000000000000000000000000000000000c21364c617687725544311d08000000000000000000000000000000000000000000000000000000000000000000000c21364c617687725443301c0700000000000000000e23384d6378846e59442f190000000000000000000000000000000d22384d627785705948341e0e00000008131c2d3c495b667c826d5f657a846f59442f1a00000000000a1f344759718677624d38220d0000000000000000000000000000001223374b5d6f847a644f3726140100000000182d42576d8279634e38230e00000001142637465861737e8482807f7c66513c26110000000000000000000000000000000000000d1b2932414d57606a757d8487827d797772727272727577797d808587827c756c635b4f4b3f352c1d15090000000000000000000000000000000f1f30404d5f677b877c6e635a504b44373d3b3a3b3c3d403c494d535b636d79848074625a4b3f2f2111020000000000000000000000000417293a5c71867c7c7e857c675d4b3c2c1b0b000000000000000000000000000000000000000012273d52677c7e69533e29140000000000000000000000000000000000000000112132434b6075857a645847372b3b4b61768777624c3d2d1a0300000000000000000000000000000000000a1f3346587388735947341f1e2e3f4d5f6a7f8372604a413121110000000000000000000000000000000000000000000000000a1f334658738875604b35200e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0b06000000000000000000000000000a1f334658738875604a35200b00000000000000000b20364b607586715c3a291704000000000000000000000000000012283d52677d806b563b2b18000000000000101e2c3d4c5e6a7f7d67627786715c3a2a1704000000000c22374c617786715a4834200b000000000000000000000000000000081c2e3f4f647a846f5544311d0800000000182d42576d8279634e38230e000000081d3144556176847d746d6a6a665e4c38240f00000000000000000000000000000000000e1d2b39464b5f67757f87827a746d686461595c5c5c54606264676b70767b828782796f645d4e493d312719090000000000000000000000000009192c3d4c5e677d8678665e4d493c3531262826252526282b2c35383d4a4e5b63727e8578655d4b3f2f2110000000000000000000000000001a2f44596f847f7d7f8478655d4e423026180b000000000000000000000000000000000000000f253a4f647a816b56412c16010000000000000000000000000000000000000003141e324557627886766155443448596b80806a5948341f0f0000000000000000000000000000000000000417293a5c718677614c37222b3c4b5d677d8575605443302313030000000000000000000000000000000000000000000000000417293a5c718677624d3823232323232323232323232323232323232323232320190e0000000000000000000000000417293a5c718677624c37220d0000000000000000091d3245567286725846331f0a0000000000000000000000000000162b40566b807d67523d2812000000000000000f1f2f404b60738477627589735847331f0a000000000c21364c617677624d3c2b1905000000000000000000000000000000001122364a5c647873604b35200b00000000182d42576d8278634e38230e0000021527374b6073847a6860545555514c40301d09000000000000000000000000000000000e1e2b3b4857616d7c8780776d656054534f4c473a4736434b4c4f52565660666d757c85847a6f635b4b4437271501000000000000000000000001152737495b667c8677625a4c40352c201d14131110101113161920232d363d4a54606879857b655d4b3f2e1e0e000000000000000000000002172c41576c817b686a77847b68604b4336281b0d0000000000000000000000000000000000000d22374d6277836e59432e1900000000000000000000000000000000000000000003162839495a657b8473604b414c62778776614b3b2b180100000000000000000000000000000000000000192f44596e8479644f3a293a495a647b8777625745362513050000000000000000000000000000000000000000000000000000192f44596e847a654f3a383838383838383838383838383838383838383838352b1e0e000000000000000000000000192f44596e847a644f3a250f0000000000000000021528385b708576614c36210c0000000000000000000000000000192e44596e837a644f3a250f0000000000000001121c3043546379836e728776614c37210c000000000a1f33465861625948341d0d0000000000000000000000000000000000071b2d3e4a5b63605544311d0800000000182d42576d8278634e38230e0000081d314455697e7e685c4a43363f3c38302212000000000000000000000000000000000c1c2b3c485962758285786b61594f4a43363a37342a3226303537393d38454b50556067707a8584786a605544311d080000000000000000000000081d314455637987786259493c2f20190e080100000000000000060c0f1a212d36434a5b6377857b655d4b3c2b1a0a0000000000000000000000142a3f54697f7d67596275837e6b605446392b1d1002000000000000000000000000000000000b20354b607585705b392816030000000000000000000000000000000000000000000a1b2b3c4c5d697f806b5f4d5b6d827e685746321d0d0000000000000000000000000000000000000002172c41576c817c67513c3746586278877a64594839281808000000000000000000000000000000000000000000000000000002172c41576c817d67524e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d493c2b19060000000000000000000002172c41576c817c67523c2712000000000000000000192e43586e8379634e39240e00000000000000000000000000001b30455a708578634d38230e000000000000000001142636495b6a7f7a6f8479644e39240f000000000417293a464c4d483b2b180000000000000000000000000000000000000010202d3d494e4b443726140100000000182d42576d8278634e38230e00000b20364b60758675604b3e30252a26241d12040000000000000000000000000000000417293a485a6277868073635b4c473a35302524221f181d141c2022242828323637444b525d65707b877f74604b35200b000000000000000000000417293a4b6073867b655a483a2b1e120600000000000000000000000000070f1825303d4a596277857b655a48382815020000000000000000000012273c51677c7f6a555761728180726157483b2d201204000000000000000000000000000000081c3043547085705745321e09000000000000000000000000000000000000000000000e1e2f3f4f616e837c675b63798674604b39291600000000000000000000000000000000000000000014293f54697e7f69545050556176867c665c4a3b2b1b0a0000000000000000000000000000000000000000000000000000000014293f54697e7f6a63636363636363636363636363636363636363636363625a4935200b000000000000000000000014293f54697e7f6a543f2a15000000000000000001162b41566b807b66513c261100000000000000000000000000001c31465c718677624c37220d00000000000000000008182c3d4b60758372827c66513c271100000000000b1b29333637342b1d0d0000000000000000000000000000000000000002101f2c353835312619090000000000182d42576d8278634e38230e000010253a50657a816c5544311c1315110f0900000000000000000000000000000000000d1f3346586278877e6b6055493c342a201c130f0c0a040001080b0d0f12161e212731363f4b4f5e66757f74604b36200b000000000000000000000a1f334658697f826d5d4c3c2b1c0e000000000000000000000000000000000008131c2d3b485962778678625645321d0f000000000000000000000f243a4f6479826d574654606c7e837562594a3e2f2214010000000000000000000000000000011426365a6f8576604b36210b0000000000000000000000000000000000000000000000112132434b61758579636e847b665544311b0b00000000000000000000000000000000000000000012273c51677c816c6565656874847f695e4c3e2d1d0d000000000000000000000000000000000000000000000000000000000012273c51677c83797878787878787878787878787878787878787878787878624d38230d000000000000000000000012273c51677c816c57422c1702000000000000000013293e53687e7e69533e291400000000000000000000000000001c32475c718776614c37210c000000000000000000000f1e324556687d7c7f7e69543e29140000000000000b171f212220180d000000000000000000000000000000000000000000010f1a2123201d1409000000000000182d42576d8278634e38230e0000152a3f546a7f7c67523727150000000000000000000000000000000000000000000d1d31424c6176867d68604b44372c1f180c0700000000000000000000000003090b151d202e37404c566069605645321d09000000000000000000011426364c61768877614c3f2f1d0d00000000000000000000000000000000000000000f1d2a3a4859657b8574604b3d2d1a070000000000000000000c22374c6177846f5a36434b60697c8477645c4c40321d15090000000000000000000000000000182d42586d8278634e39230e000000000000000000000000000000000000000000000003151e324657627885767b856f5e4c372614000000000000000000000000000000000000000000000f243a4f6479857b7a7a7b7d847f6a614f402f200f0000000000000000000000000000000000000000000000000000000000000f24394f6479888383838383838383838383838383838383838383838383826d57422d1802000000000000000000000f24394f6479846f5a442f1a00000000000000000011263b51667b806b56412b1601000000000000000000000000001b30465b708578624d38230d00000000000000000000021628384b6074837d816b56412c1601000000000000040a0c0d0b05000000000000000000000000000000000000000000000000060c0e0b080100000000000000182d42576d8278634e38230e0001172c41566c817a65503b2510000000000000000000000000000000000000000005182b3b4e606f847f6a5f4e423126190e0400000000000000000000000000000000000208111c232f38454b544b4538281502000000000000000000081c3043546a7f806b5847332111000000000000000000000000000000000000000000000d1c2b3b4b5d6a7f806b5b4a3621120000000000000000000b1f344759718671544330424f5e667a867a665e4f433127190b00000000000000000000000000152b40556a807b66503b261100000000000000000000000000000000000000000000000003162839495a667b838579644f402f1909000000000000000000000000000000000000000000000c22374c6177898080808081847c6b60544437281a0b00000000000000000000000000000000000000000000000000000000000c22374c617786716e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6d63523e2a1501000000000000000000000c22374c617786715c3a2a180400000000000000000e23394e6378836e59432e1900000000000000000000000000001a2f44596f8479644f39240f00000000000000000000000a1d314455677d7f836e59442e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8278634e38230e0002182d42576d827a644f3a250f00000000000000000000000000000000000000000b20344859697e8472604a41311d14090000000000000000000000000000000000000000000008121a2832363f3632281a0a000000000000000000000b20354b60748777624c3a2a180300000000000000000000000000000000000000000000000d1d2e3f4b60738679634e402f1c09000000000000000004182a3b5c718675604b3532404c5c6477847c69614b4437291b0e00000000000000000000000013283d53687d7d68533e2813000000000000000000000000000000000000000000000000000b1b2c3c4c5e6e848775604b41302010000000000000000000000000000000000000000000000a1f3447597389736b6b6b6c7581807260554538291b0c000000000000000000000000000000000000000000000000000000000a1f3347587388735859595959595959595959595959595959595959595957524535230f00000000000000000000000a1f3347587388735947341f0a00000000000000000c21364b617685705b3828160200000000000000000000000000182d42586d827b66503b26110000000000000000000000011527374b60758486715b39281603000000000000050b0d1a1812080000000000000000000000000000000000010a101216130d040000000000000000000000182d42576d8278634e38230e0001162b41566b807b66513b26110000000000000000000000000000000000000006192b3c4c6277887762544330231301000000000000010000000000000000000000000000040604000a161e212a201d150a000000000000000000000010263b50657b846f5948341c0c00000000000000000000000000000000000000000000000000101d314455647a85705e4c3823110000000000000000001a2f445a6f8477624d37222f3d4a596275837f6c6055463a2b1e10020000000000000000000010253b50657a806b56402b160100000000000000000000000000000000000000000000000008182e3f4e6378857e806b5f4d3e2d1c0c00000000000000000000000000000000000000000004182a3a5c71867761555656606d808273605646392a1c0e00000000000000000000000000000000000000000000000000000004182a3a5c718677614c4343434343434343434343434343434343434343423e35271706000000000000000000000004182a3a5c718677614c37220c00000000000001080b1e3246577187715645321e0d0d0d0d0d0d0d0b09020000000014293f54697e7f69543f2a14000000000000000000000000091d3145566a8088735745321e0900000000000d1820222f2d25190b00000000000000000000000000000005121d24272b2821150700000000000000000000182d42576d8278634e38230e0000152a3f546a7f7d67523d2812000000000000000000000000000000000000000b2035495a6d827f69594836251305000001080b10141615110c0a040000000000060c0e16191b1a16110b090b140b0902000000000000000000000005182b3b576c827d67523b2b180000000000000000000000000000000000000000000000000000011426374b5c6e837b66503f2e1c080000000000000002172d42576c827a644f3a251f2d3b485761728181736158493c2e2013050000000000000000000e23384d6378836d58432e18000000000000000000000000000000000000000000000000001325364b5d6e837c6d827d675c4a3a2a19090000000000000000000000000000000000000000001a2f445a6f8479644f38454b626b7f83746157473a2b1e0f0100000000000000000000000000000000000000000000000000001a2f445a6f8479644f392e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2a231709000000000000000000000000001a2f445a6f8479644f39240f000000000009141d202229395b718676604b362222222222222222201d150a00000010253a50657a836e583d2d1a070000000000000000000000021527384c62778b76604b36210b000000000d1d2b34374541372919080000000000000000000000000001122330393c403d33261504000000000000000000182d42576d8278634e38230e000011273c51667c806b56392816030000000000000000000000000000000000021527384d62788775604b3b2b1808000008141c20252a2b2a26211f170c0700000e1920232b2f302f2c26201d150902000000000000000000000000000b20344859728777624c37220d00000000000000000000000000000000000000000000000000000009192e3e4e647985705d4b37230c0000000000000000152a3f556a7f7c67523d27121d2b394654606c7e8476625a4b3e3023150200000000000000000b20364b607585705b382715020000000000000000000000000000000000000000000000071c304354657a856f6074857a645847372715010000000000000000000000000000000000000002172d42576c827c67513c32445061697e84756159483c2c1f100200000000000000000000000000000000000000000000000002172c42576c817c66513c2719191919191919191919191919191919191918150f060000000000000000000000000002172c42576c817c67513c2712000000000919263135373744596e8378634e3837373737373737373631271a0a00000c21364c617687725b4a36210c0000000000000000000000000a203448596f8378634e39230e00000005182b3b484c5a5447372512000000000000000000000000000a1d30414d5155504433210d000000000000000000182d42576d8278634e38230e00000d22374c627785705745321e090000000000000000000000000000000000091d3145566b817e695645321d0d00010f182630353a3f403f3c37332a211a0f131e2c353840444544413b3531271d15090000000000000000000000000d22374d627786715947341f0b000000000000000000000000000000000000000000000000000000001021364a5c6f847a654f3a2917040000000000000012273d52677c7f6a543f2a150d1b2836434b60697c8578645c4d41331d150a00000000000000091d3145567186715645311d0900000000000000000000000000000000000000000000021628384a60738579645662788576615544311d130200000000000000000000000000000000000000152a3f546a7f7e69543f2933434f60687c8577625a493d2d201103000000000000000000000000000000000000000000000000152a3f546a7f7e69543f29140404040404040404040404040404040404020100000000000000000000000000000000152a3f546a7f7e69543f291400000001142637444b4d4d4d566c817b65504d4d4d4d4d4d4d4d4d4b4538271502000a1e334657708579634e39231100000000000000000000000005182b3b576c817b66503b26110000000b20344859626f6654412d18030000000000000000000000001024394d5f676b62503d2813000000000000000000182d42576d8278634e38230e00000b1f344759718676604b36210b00000000000000000000000000000000000b20364b60758876614c38281500010f1f2d36434b50545654514c473a362d1d23303c494d55595b5956504b44373127190f010000000000000000000011263b51667b836d583b2a180500000000000000000000000000000000000000000000000000000000071a2d3e51677c826d5846331f0a0000000000000010253a4f657a826c57422d17000b182630424f5e667a857a675f504331271a0c000000000000021527385b708575604b36200b00000000000000000000000000000000000000000000091e324556677d836d5c4a5a657b8473604b413020100000000000000000000000000000000000000012273d52677c816c57412c2532424e5e667b8578635b4a3e2e211204000000000000000000000000000000000000000000000012273c52677c816c56412c17010000000000000000000000000000000000000000000000000000000000000000000012273c52677c816c57412c17020000081d3144556062626262697e7d6862626262626262626262605645311d09000317293953697e7f6a553f2f1c09000000000000000000000000152a3f546a7f7d68533e28130000000d22374c6277846f5a452f1a0000000000000000000000000012273c51677d806b55402b16000000000000000000182d42576d8278634e38230e000005182a3b556a807c6751382816020000000000000000000000000000000011263b51667b836e5846331a0a000f1f2d3d4a546065696b6a6661584e4a3d3130414d5a636b6e706f6b6660554b44372d1f1104000000000000000000152a3f546a7f7f6a543f2a150000000000000000000000000000000000000000000000000000000000000f20364b60758776614c36210c000000000000000d22374d6277846f5a442f1a000008141c32404c5c6477857d6a614b45382a1c0c000000000000192e43586e8378634d38230e00000000000000000000000000000000000000000004182a3a4b60758778624d3e4b5d697f816c5f4d3e2d1c0c0000000000000000000000000000000000000f253a4f647a846e59442f192331404d5d657a8579645c4b3f30221305000000000000000000000000000000000000000000000f253a4f647a846e59442f1900000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a846e59442f190000000b20354b607377777777787e81787777777777777777777874604b36200b00000d22374c627786715d4c38231000000000000000000000000012273c52677c806b55402b160000000b20354a607586715c3b2a18040000000000000000000000000f243a4f6479826d58432d18000000000000000000182d42576d8278634e38230e0000000e23394e6378836d5645321e090000000000000000000000000000000417293a576d827c67513a291700061a2c3d4a5c64737a7f807f7b766d635b4b443c4d5f677880848584817b756960554a3d2f2211030000000000000000172c41576c817c67523d2712000000000000000000000000000000000000000000000000000000000000091d3145566c827c6752372614010000000000000b20354b607586715c3b2a180400000114222f3d4a596275837f6d6056473a2a18040000000001162b41566b807a65503b25100000000000000000000000000000000000000000000a1f3447596a7f816b5a49353f4f616e827d675c4a3a2a190900000000000000000000000000000000000d22374d627786715c3a29171322303f4c5c6479867a655d4c40312314060000000000000000000000000000000000000000000d22374c627786715c39291703000000000000000000000000000000000000000000000000000000000000000000000d22374c627786715c3a29170400000e23394e637980808181818488838383838383838383838279634e39240e00000b203448596e837b65503e2e180800000000000000000000000f253a4f647a836d58432e18000000071c3043547186715947341f0b0000000000000000000000000d22374c627785705a362513000000000000000000182d42576d8278634e38230e0000000c2135495b708576604b36210b0000000000000000000000000000000a1f334658728776614c36210c000c2135495b647a86827c7a7b7e8282796b6055485a677d857c777576797f857e74635b4c402f21110100000000000000192e44596e837a65503a25100000000000000000000000000000000000000000000000000000000000000215273851667c836d5544311d08000000000000081c3043547186715947341f0b00000004121f2d3b48576172818274615847331f0a000000000013293e53687e7d68533d28130000000000000000000000000000000000000000061a2c3d4c61778776614c3c2b32434b6075857a64594737271501000000000000000000000000000000000b20354a607588735846331f0a12212f3e4b5b6378857b665e4e413225160100000000000000000000000000000000000000000b20354a607588735746331e0a000000000000000000000000000000000000000000000000000000000000000000000b20354a607588735847331f0a00000c2136495b636a6b6b6c6d7785706d6d6d6d6d6d6d6d6d6d635b4a36210c000005182b3b4f6479846f5c4b36261401000000000000000000000d22374c627785705b372715010000001325365a6f8477614c37220c0000000000000000000000000b20354a607586715443301c070000000000000000182d42576d8278634e38230e000000061a2c3d546a7f7b66513828160200000000000000000000000000000c21364c617686715846331f0a061a2c3d4e6379877c6e676565686d7781807361576278857466616061646a747d8579665e4c402f1f0f000000000000001a30455a6f8579644e39240f000000000000000000000000000000000000000000000000000000000000000c21364b61768875604b35200b000000000000011426365a6f8577614c37220c00000000010f1d2b394654606c7e8477614c37220c000000000011263b51667b806a55402b150000000000000000000000000000000000000000082135495b6c817f695847331e1e32455762788677615544311d1302000000000000000000000000000000071c304354728776614c36210c0311202e3d4a5a6277857c68604f43331c140800000000000000000000000000000000000000071c304354728776614c36210c00000000000000000000000000000000000000000000000000000000000000000000071c304354728776614c37210c0000061a2c3d494e5556565759728672565858585858585858584e4a3d2d1a070000000d22364a5c6f847a645443301c0e000000000000000000000b1f3448597287725544311d08000000182d42586d8279644f39240f000000000000000000000000071c304354718675604a35200b0000000000000000182d42576d8278634e38230e000000000f23384d6278826d5645321e09000000000000000000000000000010253a50657a826d583a2917040c2135495b6f847d685e524f505359626c7c8375616a7f7c66564c4a4b4f55606877837c665e4c3d2c1a0a0000000000001b30465b708578634e38230e000000000000000000000000000000000000000000000000000000000000000a1e334657708579634e39240e00000000000000182d42586d8279644f3a240f0000000000000d1b2836434b60697778624d38230d00000000000e24394e6379826d58422d180000000000000000000000000000000000000008182e3f4e63798775604b3a2a17162839495a667b8473604b41312010000000000000000000000000000000001325365a6f8479644e39240f0002101f2d3c49596276847e6961504430261809000000000000000000000000000000000000001325365a6f8479634e39240e00000000000000000000000000000000000000000000000000000000000000000000001325365a6f8479644e39240f0000000f1f2c36394040413b5b718575604b434343434343434339362d1f0f00000000071b2d3e4e63798573604b3c2c1a0a00000000000000000005182a3b5c718675604b35200b000000152a40556a7f7c67513c2712000000000000000000000000001325365a6f8577624c37220d0000000000000000182d42576d8278634e38230e000000000b2035495a6f8476604b36210b000000000000000000000000000013283d52687d7f6a55402a15000e23384e63788773604a403a3b3b484c5e667a83746d8377624c38353637444b596274837c655b493827150200000000001b31465b708678624d38230d0000000000000000000000000000000000000000000000000000000000000003172939576c827d68523d281300000000000000152b40556a807c67513c2712000000000000000b182630424e5962625a4935200b00000000000c21364c617685705a372614010000000000000000000000000000000000001325364b5d6f847d675645321c0c0a1b2c3c4c5e6a7f816c5f4e3e2d1d0d000000000000000000000000000000182d42576d827b66513c26110000010f1e2b3b48586175837f6b624b433627190a000000000000000000000000000000000000182d42576d827b66513c26110000000000000000000000000000000000000000000000000000000000000000000000182d42576d827c66513c2711000000010f1a21232b2b2e43596e8378634d382e2e2e2e2e2e2e24211a0f0100000000001021364a5b6c817e685b49382818080000000000000000001a2f455a6f8478624d38230d00000013283d52687d7e69543f291400000000000000000000000000182d42586d827a644f3a250f0000000000000000182d42576d8278634e38230e0000000006192b3c53697e7c66513828160200000000000000000000000000152a40556a7f7d67523d28120014293e53697e806b54433025262a34404c5c667c816f8375604b36202126313b475660748479635645311d0d00000000001a30455a6f8579634e39240e000000000000000000000000000000000000000000000000000000000000000013283e53687d816c57412c170200000000000013283d52687d7f69543f2a14000000000000000008141c313b484d4d493c2b190600000000000a1e3346577185715544311d080000000000000000000000000000000000071c304354657b8673604b38281600000e1e2f4050616e837d685c4a3b2a19090000000000000000000000000000152a40556a7f7e69543e2914000000000e1d2a3a4657607482806c60544437281b0c0000000000000000000000000000000000152a3f556a7f7e69533e29140000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f7e69543e29140000000000060c0e15162b40566b807b65503b261818181818180e0c0700000000000000071a2d3d4c61768679635645362514090000000000000002172d42576c827a65503a251000000010253b50657a816c56412c1701000000000000000000000000152b40556a807c67523c27120000000000000000182d42576d8278634e38230e00000000000e22374c6177826d5645321e0900000000000000000000000000172c41576c817b65503b261002172c42576c817c675236251310181f2f3e4c5e6b807c8276614c36210c141d2a38455662788574604b3b2b190500000000192f44596e847a644f3a250f000000000000000000000000000000000000000000000000000000000000000010253a4f657a846f5a452f1a0000000000000010253b50657a816c57412c1702000000000000000001141d2b343738352b1e0e000000000000031729395b718575604b35200b00000000000000000000000000000000031628384a6073867b655443301a0a000000112233434b6175857a645947372715020000000000000000000000000012283d52677d816b56412c1601000000000d1c29394556607281817260554539291c0d0000000000000000000000000000000012283d52677d806b56412b16010000000000000000000000000000000000000000000000000000000000000000000012283d52677d816b56412c1601000000000000000013283d53687d7d68533d2813030303030300000000000000000000000f1e334657647a85746054433126190c00000000000000152a3f556a7f7d67523d28120000000e23384d6378836e59442e190000000000000000000000000013283d53687d7f69543f2a140000000000000000182d42576d8278634e38230e00000000000b1f3447596e8376604b36210b00000000000000000000000000182d42586d827a654f3a251003182e43586d837a65503b2510000512202f404b6074848179634e39240e010d1a2838485a687d806a594834200c00000000182e43586d837b65503b261000000000000000000000000000000000000000000000000000000000000000000d23384d627887725c392917030000000000000d23384d6278846f59442f1a00000000000000000000000d1820222320190e0000000000000000192f44596e8477624d38220d00000000000000000000000000000000091e324556687d846f5d4c3626140000000003151e32465763798677625544311d130200000000000000000000000010253a50657a836e59442e190000000000000c1b28384554606c8082736057473a2a1d0e00000000000000000000000000000010253a4f657a836e59432e19000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a836e59442e1900000000000000000010253a50657a806b55402b1600000000000000000000000000000000031729394a5c687e8272604b4437291c1105000000000012273d52677c7f6a55402a150000000b20364b607585715b3928160300000000000000000000000010263b50657b816c57412c170200000000000000182d42576d8278634e38230e000000000004182a3b556a7f7a65503a251000000000000000000000000000192e43586e8379644e39240f03182d42586d827b65503b2610000002121d314556657b877c67523c271200000a1a2b3c4e5f708578624d3a2a1704000000172c42576c817c67513c271200000000000000000000000000000000000000000000000000000000000000000b20364b607589745746331e0a0000000000000b20364b607586715c3a2a17040000000000000000000000050b0d0d0b06000000000000000002172c41576c817a654f3a251000000000000000000000000000000005182a3b4b60758779644e3f2f1808000000000003162939495b667c8474604b423120100000000000000000000000000d22384d627786715b392816030000000000000a1a2736434b626b7f83756158483b2c1e0f01000000000000000000000000000d22384d627786705b38281603000000000000000000000000000000000000000000000000000000000000000000000d22384d627786715b3929170300000000000000000d22374d6277826d58432d1800000000000000000000000000000000000b1b2d3e4e606b80816c6055473a2e1f180d060000000f253a4f647a826d57422d18000000091d3145567186715745321e090000000000000000000000000e23384e6378836e59442f190000000000000000182d42576d8278634e38230e00000000000010253b50657a7f6a553f2a1500000000000000000000000000192e43586e8379634e39240e01172c41566c817c67523c2712000000021527384b5d6f84816c563c2c190600000d1d314150657b816c5847331f0a000000152a3f556a7f7e69543e29140000000000000000000000000000000000000000000000000000000000000000091d314556738876614c36210c000000000000081d3144557186715847331f0a000000000000000000000000000000000000000000000000000014293f54697e7d67523d28120000000000000000000000000000000b1f3447596a7f826d5c4a362111000000000000000b1b2c3d4c5e6a80816c604e3e2e1d0d00000000000000000000000b20354b607588735746321e09000000000000000a182630445161697e84766259493c2d1f10020000000000000000000000000b20354b607588735645321e09000000000000000000000000000000000000000000000000000000000000000000000b20354b607588735746331e0a00000000000000000b20354a6075846f5a3727150100000000000000000000000000000000001020314250626b80817361584b3f342a211a110f0d0d22374d6277846f5a362513000000021527385b708576604b36210b0000000000000000000000000b21364b607686715b3928160300000000000000182d42576d8278634e38230e0000000000000d23384d6278826d58422d1803000000000000000000000000182d43586d8279644f3a240f0014293e53697e7f6a54362614010000000a1a2e3f4f657a86715a4935200c0000001323384c5e708576614c37210d00000012273c51677c816c57422c170000000000000000000000000000000000000000000000000000000000000000021527385d728877624c37220d000000000000021527375b708576614c37210c000000000000000000000000000000000000000000000000000012273c51677c7f6a553f2a150000000000000000000000000000071a2d3d4c62778878624d3d2d1a0300000000000000000e1f2f404a6072837d685c4b3b2a190900000000000000000000081d314455728776614b36210c000000000000000008141c33434f60687d8577625a4a3d2e2011030000000000000000000000081c304354728776604b36210b00000000000000000000000000000000000000000000000000000000000000000000081c304354728776614b36210c0000000000000000071c3043546f846f5544311d080000000000000000000000000000000000021424334451626b7f8476655d4c473b362c2724232223354a607586715443301c07000000192e43586e8378634e38230e000000000000000000000000091e3245567287725746321e0900000000000000182d42576d8278634e38230e0000000000000c21364c6176846f59442f1a04000000000000000000000000172c42576c817a65503a2510000f253a4f647a836e5443301c08000000001122374b5d718578624d38230f000000091c2f4053697e7e69533b2a180500000e23394e637885705a3b2a180500000000000000000000000000000000000000000000000000000000000000001d32475c728778624d38230d00000000000000182e43586d8379644e39240f00000000000000000000000000000000000000000000000000000f243a4f6479826d57422d1800000000000000000000000000000821364a5b6c82806b5a48341f0f00000000000000000000121c3043546176867a64594837271502000000000000000000011426375a708578634e39230e00000000000000000001162532424e5f677c8678635b4b3e2f22130500000000000000000000011426365a708578634e38230e03030303030303030303030303030303030303030303000000000000000000000000011426365a708579634e39240e000000000000000000132536596e8375604b35200b000000000000000000000000000000000000061526344451616a7c867b6d62594e493d3c3a3837383b4354718675604a35200b000001162b41566b807b66503b2611000000000000000000000000031628385b718676614b36210c00000000000000182d42576d8278634e38230e00000000060b0f20364b6075856f5a45301a05000000000000000000000000152b40556a807c66513c2711000b21364b60768775604b35200d00000000081b2e3f53687d7f69543d2d1a070000001122374c617785705947341f0b00000b20364b607588735948341f0b00000000000000000000000000000000000000000000000000000000000000071c31465c718679634e39230e00000000000000162b40556b807c66513c271100000000000000000000000000000000000000000000000000000c22374c6177846f5a3625130000000000000000000000000008182f3f4e63798876614c3c2b19010000000000000000000000132536465863798677625544311d1302000000000000000000182d43586d827b66513b26110000000000000000000007152431414d5e657b8679645c4c403023140600000000000000000000182d42586d827b66503b26181818181818181818181818181818181818181818181813110b02000000000000000000182d42586d827b66513b2611000000000000000000162c41566b8078624d38230d0000000000000000000000000000000000000007162634434f5e66788382776d635b56514f4d4c4d50545a6f8477624c37220d00000014293e53697e7d68533e281300000000000000000000000000192e44596e8378634e39230e00000000000000182d42576d8278634e38230e0000000e1920232d3b4d6378826d58432d180300000000000000000000000013293e53687e7e68533e291300091e3245566e837a65503b2a1805000000001021364b617685705b4a3621090000000a1f344759708577624c37220d0000091d314556718677624c37220d00000000000000000000000000000000000000000000000000000000000000071c31475c718678634e39230e0000000000000013283e53687d7e69543e291400000000000000000000000000000000000000000000000000000b1f3447597186715443301c070000000000000000000000011426364c5d6f847e695846331d0d0000000000000000000000000818293a495b667c8474604b42312010000000000000000000152b40556a807e68533e2913000000000000000000000006132330404c5c6479867b665e4d4131241507000000000000000000152b40556a807d68533e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e29261f14060000000000000000152b40556a807e69533e291400000000000000000013293e53687e7a65503a2510000000000000000000000000000000000000000008162532404c59626e7b858278706c666462616265696f788679644f39240f00000011263b51667b806b55402b1600000000000000000000000001172c41566c817b66503b261100000000000000182d42576d8278634e38230e00000e1e2b35383d4a59697f7c67523d27120000000000000000000000000011263b50667b806b56412b16000316283851677c826c5948341f0f000000000a1e3346576d8279634e37261401000004182a3a556a7f7c67523d2712000002152738566b817d67523d281200000000000000000000000000000000000000000000000000000000000000011426375d728778624d38230d0000000000000011263b50667b816c56412c17010000000000000000000000000000000000000000000000000004182a3b5c718675604a35200b0000000000000000000000081c304354657b8774604b3a291700000000000000000000000000000b1b2c3d4d5e6b80816c604e3e2e1d0d000000000000000013283d53687d806b56412b160100000000000000000000000412212f3e4b5b6378867c675f4e4233251500000000000000000013283d52687d806b56434343434343434343434343434343434343434343434343433e3a312414020000000000000013283d52687d806b56412b1600000000000000000010263b50657b7d68523d28130000000000000000000000000000000000000000000715222f3b484d5e66707a8385817c797877787a7e84857c665c4a36220d0000000e24394e6379826d58432d180000000000000000000000000014293f54697e7d68533e281300000000000000182d42576d8278634e38230e0006192b3c494d555b63788574604b35200b000000000000000000000000000d23384d6278846e593b2a1805000b20354b60748777624c3d2c19090000000317293950667b806b5544311d0800000010253b50657a816c57412c1700000011263b50667b826d583f2e1b08000000000000000000000000000000000000000000000000000000000000081d314455738877614c37220c000000000000000e23384e6378836e59442e190000000000000000000000000000000000000000000000000000001a2f455a6f8477624c37220d00000000000000000000031628394b6073867c675645311c0c0000000000000000000000000000000f1f30404b6072847e685c4b3b2b18050000000000000010253b50657a836e58432e19030000000000000000000000000311202e3d4a5a6277857d68605043331a0a000000000000000010253b50657a836d5858585858585858585858585858585858585858585858585858534e42311f0b0000000000000010253b50657a836e59432e190000000000000000000d22374d62777f6a55402a150000000000000000000000000000000000000000000004121d2b34404c515d656e757a7f81838382807d7770665e4c3e2d1b070000000c21364c617685705a3626140100000000000000000000000012273c51677c806b55402b1600000000000000182d42576d8278634e38230e000b2035495a626a6d798479635544311d08000000000000000000000000000b20354a607586715948341f0b00081d314455697e816b5b49372614010000000b20354b60758674604b35200b0000000c21374c617685705a3727150100000b21364b607587725d4b37220c0000000000000000000000000000000000000000000000000000000000000b20354b60758975604a35200b000000000000000b21364b607686715c392917030000000000000000000000000000000000000000000000000002182d42576d8279644f3a240f00000000000000000000091e324557687d8672604a3827150000000000000000000000000000000001121c3043546176867a64594834200b000000000000000e23384d637885705b46301b060000000000000000000000000002101f2d3c49596276847e6a615038271502000000000000000d23384d627885706d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68604e3a2611000000000000000d23384d627885705b46311b0000000000000000000b203448596276614b36210c0000000000000000000000000000000000000000000000000d19202f383f4b4f556064696b6d6e6d6b68625a504c402f2010000000000a1f3346587186715443301c080000000000000000000000000f243a4f6479826d58432d1800000000000000182d42576d8278634e38230e000d23384d627880828077635b493727150100000000000000000000000000071c3043546f8477624c37220d00011527374b60748679635544311d12040000081d3144556c817b66503929170300000a1f3347587186715544311d080000091e3245566e847a644f3a29170400000000000000000000000000000000000000000000000000000000000d22374d627787725443301c0700000000000000091e3245567286725746331e0a0000000000000000000000000000000000000000000000000000152a3f556a7f7c67523c2712000000000000000000000b21364b6076877b655443301a0a000000000000000000000000000000000001142636475863798677624c37220d000000000000000b20364b607588735d48331e080000000000000000000000000000010f1e2c3b48586175847f6a5645311d09000000000000000b20364b6074898383838383838383838383838383838383838383838383838383827e68533e2913000000000000000b20364b607488735e48331e00000000000000000005182b3b4857615746321e0a0000000000000000000000000000000000000000000000000005121d242e3737444b4f545658595856524d483c382f221102000000000417293a5b718675604b35200d0000000000000000000000000d22374c627785705a36261401000000000000182d42576d8278634e38230e000c22374c61767d80827b6b6251443320100000000000000000000000000000132536556a7f7c67513828150200091d314455657a8573604b413022130300011426374f6479836d5746331e0a000004172a3a5c718675604b35200b00000216283851667b826d5847331f0b000000000000000000000000000000000000000000000000000000000010263b50657b846f5a3625130000000000000000031628385b708576614b36210c000000000000000000000000000000000000000000000000000012283d52677d7f69543f2a14000000000000000000000c21364c617578655d4b362513000000000000000000000000000000000000000818293a4a5b637777624c37220d00000000000000091d314556657a65503b251000000000000000000000000000000000000e1d2b3a475761737974604b36200b00000000000000081d314455647979797979797979797979797979797979797979797979797979797979634d38230e00000000000000081d3144556479644e39240f000000000000000000000d1d2b39464b463929160300000000000000000000000000000000000000000000000000000009111c232631353a3f41434443413d38352b231c11040000000000001a2f44596f8478634e3b2b180500000000000000000000000b20354a607586715443301c08000000000000182d42576d8278634e38230e000a1f33475861686b757f806b62503e2d1b07000000000000000000000000000e24394e6379836d5645321d0900021527374b5d6b80806b5f4d40311e160b000922364a5c718676614c36210e0000001a2f455a6f8477624d37220d0000000b20354b60748776614c392917030000000000000000000000000000000000000000000000000000000215273754697f806b56402b16000000000000000000192e43596e8279634e39240e000000000000000000000000000000000000000000000000000010253a50657a816c57422c17000000000000000000000a1e33465761635a4b3f2e180800000000000000000000000000000000000000000c1c2d3d4a5962625948341f0b00000000000000021527384b5d655d4b37230e0000000000000000000000000000000000000d1c293946546063605645311d0900000000000000021527374a5c64646464646464646464646464646464646464646464646464646464635b4935210c00000000000000021527374a5c645c4a36210d00000000000000000000000d1b29323632291b0b0000000000000000000000000000000000000000000000000000000000000809141d20252a2c2e2e2d2b282220190e090000000000000002172c41576c81816c594834200d0000000000000000000000071c304354718675604b35200b000000000000182d42576d8278634e38230e0004182a3a474c5256606a7e806a5c4a36220b000000000000000000000000000c21364a5b718675604b36200d000009192e3f4b6073847d675e4e4232291c13081b2d3e556a7f7d68533c2b19060004192f44596e8478634d38230e000000081c3043546a7f7e695746331e0d000000000000000000000000000000000000000000000000000000081d3144556e837c66513c271100000000000000000013283e53687e7a644f39240f00000000000000000000000000000000000000000000000000000d22374c62777f6a55402a150000000000000000000003172939464c4d493c2e2111000000000000000000000000000000000000000000000f1f2d3b484c4c483b2a180500000000000000000a1a2f3f4b504b3f2f1c08000000000000000000000000000000000000000c1b2836434a4e4b4538271502000000000000000009192d3e4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4d493c2c1906000000000000000009192d3d4a4e4a3d2d1a070000000000000000000000000b161e211e160b00000000000000000000000000000000000000000000000000000000000000000001080b0f141618191816130d0b0500000000000000000000142a3f54697f8877624c3c2b190500000000000000000000001325365a6f8477624d37220d000000000000182d42576d8278634e38230e00000c1c2a333738454b606d827a644f39291703000000000000000000000000071a2d3d566b807b66513b2b18050000101d3144556176847c68604b46393025201822384d627885705a4935200b0003192e43586e8379634e39240e000000011426364c61768676614b3c2b180800000000000000000000000000000000000000000000000000000b20364b60758976614c36210c00000000000000000011263a4e6068645c4a36220d00000000000000000000000000000000000000000000000000000b20344859626a61503c281300000000000000000000000b1b29333638352c1e110300000000000000000000000000000000000000000000010f1d2b343737342a1d0d0000000000000000000011212f373b372f21110000000000000000000000000000000000000000000b18253035393631271a0a000000000000000000000f202d363939393939393939393939393939393939393939393939393939393938352c1e0e000000000000000000000f1f2d3639362d1f0f0000000000000000000000000000030a0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c81806b5a483420110000000000000000000000182d42586d827a644f3a250f000000000000182d42576d8278634e38230e0000000c181f222731424e6378836e5746331e0a000000000000000000000000000f243a4f6479826d594834200b00000114263746586176847e6c61574a4336342b2b35485a708578624d3823100004192e43596e8378634e38230e00000000081f334658697e806b5a483626140100000000000000000000000000000000000000000000000005182b3b50667b856f5746331e0a0000000000000000000b1f31424e534f4a3e2d1b07000000000000000000000000000000000000000000000000000005182b3b484c55504333200d0000000000000000000000000b171e212320190e00000000000000000000000000000000000000000000000000000d182022221f180d000000000000000000000003111c2325231c11030000000000000000000000000000000000000000000008131c2023201d150a0000000000000000000000010f1a21242424242424242424242424242424242424242424242424242424242321190e0000000000000000000000010f1a2124211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a808278624d3f2f1b0a00000000000000000001162b40566b807b66513c2611000000000000182d42576d8278634e38230e00000000040a0c152136495b708576614b36210c000000000000000000000000000d22364a5c708577624d3929170300000919293a465861748282756760544c483b403f3c53687d7f6a553f2e1b08041a2f44596f8477624d38220d000000000417293a4b60748678625443301c1102000000000000000000000000000000000000000000000008203448596e837d685239291703000000000000000000021424313a3e39362d2010000000000000000000000000000000000000000000000000000000000d1d2b3437403c3325150300000000000000000000000000030a0c0e0c0600000000000000000000000000000000000000000000000000000000050b0d0d0b050000000000000000000000000000080e100e080000000000000000000000000000000000000000000000000000070b0e0b09020000000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0c060000000000000000000000000000070d0f0d0700000000000000000000000000000000000000000000000000070d0f13100b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778279836e5d4b3928160300000000000000000014293f54697e7d68533d2813000000000000182d42576d8278634e38230e00000000000000061a2c3d566c817b66503b261100000000000000000000000000071b2e3e51667c806b5746331e0e0000000b1b293a4656606d7d857c736962595856545354617686715d4b37220e031628385b708576614c36210c00000000000c1d314455657b8473604b3f2e20100200000000000000000000000000000000000000000008182c3c4c62778876614b36210c000000000000000000000006141f262824221b100200000000000000000000000000000000000000000000000000000000000d1820222a28201507000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222428251e1305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6075846f817b655745321e1302000000000000000012283d52677d7f69543f2a14000000000000182d42576d8278634e38230e000000000000000014293e53697e7e68533e291300000000000000000000000000001020354b60748676614c3d2c1a060000000c1c2938454b5f677680857e77706d6b69696a6c70837a654f3a2510091e3245567186715846331f0a0000000000021527374c5d6b807f6a5d4b3e2d2011010000000000000000000000000000000000000000132536495a6b817f6a5746321e09000000000000000000000000020b11130f0d070000000000000000000000000000000000000000000000000000000000000000050b0d15130d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c1f0e0c060000000000000000000000000000000000000000000000000000000000000000020b11131f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d100e08000000000000000000000000061016181b1b1b1b1b1b1b1b1b1b1b1f1b1b1b1b1b1b1b1b1b1b1b13110b020000000000000010202e373a3d3a31231300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546f856f768575604b41302010010000000000000012283d52677d7f6a553f2a15000000000000182d42576d8278634e38230e000000000000000012283d52677d7f6a553f2a150000000000000000000000000000081c304354687d806a5b49352113010000000c1a2832414d57616b757d838482807e7e7f82848279634e38230e0b21364b607685705b3a29170400000000000009192f3f4b6073847b655c4a3e2f1c1408000000000000000000000000000000000001121c30435463788876614c3928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e21342320190e00000000000000000000000000000000000000000000000000000000000006131e26283432323232323232323232323232323232323232323232323232323225221b10030000000000000000000917232b2d303030303030303030303035303030303030303030303029261f14060000000000071b2e3e4b4f524e41311e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f8475677c826d5f4d3e2e1f0f0100000000000013283d53687d7e69543f2914000000000000182d42576d8278634e38230e000000000000000012273d52677c7f6a553f2a150000000000000000000000000000011426364a60728579634e41311f0f000000000a161e3039464b5660676e75787a7c7c7b78756d635b4935210c10253a50657a816c57422c170000000000000000111d3144556277857a645c4c3f3026180f05000000000000000000000000000008141c30404a6072847d685846331b0b0000000000000000000000090f1117130b08020000000000000000000000000000000000000000000002090b1416100e080000000000000000000000020b11131e1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b18140f0b0801000000000000000000000000000000000000000000000000000000000000000000000000000b1b2832364a38352c1e0e00000000000000000000000000000000000000000000000000000000021324313a3d494747474747474747474747474747474747474747474747474747473a372e21100000000000000000061727353f4245454545454545454545454a45454545454545454545453e3b31241402000000000d22374b5c64685f4e3c2b1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8277626d827d675c4a3d2c1f1102000000000014293e54697e7e68533e2913000000000000182d42576d8278634e38230e000000000000000013283d53687d7e69543f2914000000000000000000000000000000081c3043546379846f5f4e3d2d1d0c0000000002131b293238454b52546063656667656360544e493d2c1a061a2c3d556a7f7c67523d271200000000000000000114263748596277857a655d4b43362d20190d0902000000000000000000070f182630404d5e6a7f836e5f4e3a29170000000000000000000004111c23262c29201d150900000000000000000000000000000000000000000a161e21292c25231c1103000000000000000006131e26283330303030303030303030303030303030303030302d2924201c140b070000000000000000000000000000000000000000000000000000000000000000000003162839464b5f4d493c2c19060000000000000000000000000000000000000000000000000000000b1e31424e535e5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4f4b3f2e1b08000000000000001023354552585b5b5b5b5b5b5b5b5b5b5b5f5b5b5b5b5b5b5b5b5b5b5b534e42311f0b000000000f243a4f647a7d685a4835200f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8079646074857a645b493d2f1d150a00000005182a3b576c817b65503b2610000000000000182d42576d8278634e38230e000000000000000014293e53697e7d68533e2813000000000000000000000000000000001325364a5b6b807d685c4a3b2a1a0b00000000000b161e28323636434a4d4f5152504d4a4336352c1f0f0c2136495b708576614c37210c00000000000000000009192a3b48596278857b6a60544a3e342b201d15110e0c0b080b0c0f131c202d36434b5e667c8675614c41311c0c0000000000000000000513222f383b413e36312719090000000000000000000000000000000000000a1a2832363e413a372e211204000000000000021324313a3d484545454545454545454545454545454545454545423f3a353026201c13080100000000000000000000000000000000000000000000000000000000000000091e3246576174635a4935200e00000000000000000000000000000000000000000000000000000011263a4e606874727272727272727272727272727272727272727272727272727272655d4b37220e00000000000000162b3f52646d707070707070707070707074707070707070707070707068604e3b2611000000000b20354b60758678624d3d2c1a06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d7c675662788679635b4c4032281a120c0b0f1f344759708477624c37220d000000000000182d42576d8278634e38230e0000000000000000152a40556a7f7c67513c27120000000000000000000000000000000008182d3d4b6075857a64594738281b0c0000000000030a151d20253035383a3c3c3b38353025211a0f06192c3c4e6378836e5847331f0a000000000000000000000d1d2b3b485a6276838073645c4d483c363228262322201d2021242530353e4a54606a7c867762574633231300000000000000000001132330404c5056534b44372715020000000000000000000000000000000002162838454b5456504b3f3022120000000000000b1e31424e535d5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a58544f4b43363530251d14090000000000000000000000000000000000000000000000000000000000000c21364b61758a78634d3d2c1a06000000000000000000000000000000000000000000000000000013283d53687d898687878787878787878787878787878787878787878787878787877a654f3a251000000000000000182d42586d8285858585858585858585848a84848585858585858585857e68533e291300000000081d314455677c826d5b49362110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a7e69545a63798579665e4b45382f242120222d3c4c627786715947341f0b000000000000182d42576d8278634e38230e0000000000000002172c41576c817a65503b251000000000000000000000000000000000000f1e3245566278857761564639291c0e00000000000002090b131c20232527272623201c13080602102035495a6d827a65503a29170400000000000000000000000d1d2b3c4858616e7f84796d625a514b45383b3837363135363936434a505c64737f8577625948392917050000000000000000000a1e30414d5e666c68605544311d0c00000000000000000000000000000000091e32455660696b655d4d40301d09000000000011263a4e60687370707070707070707070707070707070707070706d69646054504a433631261911030000000000000000000000000000000000000000000000000000000011263b50667b86826d5b4935210f000000000000000000000000000000000000000000000000000010263b50657b83727272727272727272727272727272727272727272727272727272655d4b37220e00000000000000162b3f52646d707070707070707070707186777070707070707070707068604e3b261100000000011527374a60738579634e3e2e1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d6378816b56495b6379867c6a60564c403a3635373d4a5a6a7f7f69543b2a1805000000000000182d42576d8278634e38230e0000000000000003182e43586d8379644e39240f000000000000000000000000000000000003162838485a657b84746157473a2b1e13040000000000000000070b0e101112100e0b07000001102031414d627885705d4b371c0c000000000000000000000000000d1d2b3a474c6169788382776e67605655514e4c4b444b4c4f525460656e798581746259483b2b1b0b000000000000000000001025394d5f677b817e74604b3a2a1704000000000000000000000000000005182a3b4b60747e817b665e4d39240f000000000013283d53687d888485858585858585858585858585858585858584827e79756d6560544b44372f1e170b000000000000000000000000000000000000000000000000000004172a3a566b807c8378634e3d2c1a06000000000000000000000000000000000000000000000000000e23384e637885705c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4f4b3f2e1b08000000000000001023354552585b5b5b5b5b5b5b5b5b5b6e8479645b5b5b5b5b5b5b5b5b534e42311f0b0000000000091c304354657b836e5c4a362211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075836e583d495b6376847f74665e554f4c4b4c4f5b63788776614c37210d00000000000000182d42576d8278634e38230e00000000000000051a2f455a6f8477624d37220d0000000000000000000000000000000000000a1a2b3c4b5d677d83756158493c301f170c02000000000000000000000000000000000002111f2d3e4e606f847a644f3f2f1c0000000000000000000000000000000d1c2933434f5b636e7a84837c756f6a6663616055606164676c747a83857a6c6056483b2b1d0d000000000000000000000012283d52677d909693836e5847331f0a00000000000000000000000000000b1f3447596f8393968d7c66513c2711000000000010263b50657b827070707070707070707070707070707070707075787c8184827a736860554c3f33291b0e000000000000000000000000000000000000000000000000000a1f3347587186777b826d5b4935210f000000000000000000000000000000000000000000000000000b20364b6075887356454747474747474747474747474747474747474747474747473a372e21100000000000000000061727353f42454545454545454545576c817c675145454545454545453e3b312414020000000000001325364c5d6f847a644f3f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145566e836e59443d495861737f857b706a64616062656c79867b655847331f0a00000000000000182d42576d8278634e38230e00000000000000061c31465b718676604b36210b000000000000000000000000000000000000000d1d2e3f4d5f677d8476625a4d4133291d150a0300000000000000000000000000000a151d2f3d4a5c687d816c5c4b372111000000000000000000000000000000000c171f323c494d5d646e777f8584807b787775707576797c8286827a6f645c4b45382b1d0d0000000000000000000000051a2f455a6f849aaba08c76614c37210c00000000000000000000000000000d22374c62778ca1ab99846f59442f1a04000000000e23384e6378856f5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b556063666c707880857d74655d4b46392c1e100200000000000000000000000000000000000000000000000c21374c617686716f8479634e3d2d1a07000000000000000000000000000000000000000000000000091d324556738875604b36323232323232323232323232323232323232323232323225221b10030000000000000000000917232b2d30303030303030303f54697e7f69543f3030303030303029261f14060000000000000008182f3f4f6479846f5d4b38231200000000000000000000000000000000000000000000000000000000000000000000000000000000000002152738596e836e59432c3a475460697781857f797675777a81877a655d4c3a29170400000000000000182d42576d8278634e38230e00000000000000071c31475c7186715645321e090000000000000000000000000000000000000000112130414d5f677c8578675f4c463a31271e170b080200000000000000000608131c27313f4b5b647a8574604b3e2e1b03000000000000000000000000000000000004141e2c353f4b4f59626970777b7f828485848584817e7a756d645c4f4b3e32281a0d00000000000000000000000003192e43586e8398a69f8a75604b36200b00000000000000000000000000000b21364b60768a9fa598826d58432d1803000000000b20364b607587725544454545454545454545454545454537444b4d51565b636b767f857b6d6157493c2e2010020000000000000000000000000000000000000000000012273c51677c816c657a836e5b4a36210f000000000000000000000000000000000000000000000000021528385b708578634d38231d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d100e08000000000000000000000000061016181b1b1b1b1b1b1b273c51677c816c57422c1b1b1b1b1b1b13110b020000000000000000001122364a5c6e837b6550403018080000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e6479644e39242a36434b58616c767b81848583817b74645c4c3f2f1c0c0000000000000000182d42576d8278634e38230e00000000000000071c32475c7187715c38281602000000000000000000000000000000000000000003132330404d5e667a867d6d61584b45383329201d1512100e0e0e0f11141921253038454b5d6579857762564532201000000000000000000000000000000000000000000e19212e373b484c545961666a6d6f7070706f6c696460554f4b3e372e1e160a00000000000000000000000000000e23394e637988908b7e685645321d090000000000000000000000000000091e324557697f8c908778624d38230d0000000000091d324556728775604b3530303030303030303030303030273135383c3d494e57606976828275635a4a3e2e201000000000000000000000000000000000000000000005192b3c576c817b665d6f8479634e3d2d1a07000000000000000000000000000000000000000000000000192e43586e837b65503b2610070707070707070707070707070707070707070707000000000000000000000000000000000001030606060606060f24394f6479846f59442f1a000606060600000000000000000000000000071b2d3e4e637885705e4c3626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c645c4a36211826303a474c5760666b6e6f6e6c6660554b3e2f2111000000000000000000182d42576d8278634e38230e00000000000000071c32475c7187715c47321c0000000000000000000000000000000000000000000005132230404c5c64758382766960564c463936312727252423232426292c3536434a56606b7b85786259483828150200000000000000000000000000000000000000000006101b222b34373b474c5155585a5b5b5b5a57544f4b4437372e221b10020000000000000000000000000000000c2136495b63767b7868604e382815020000000000000000000000000000031628394f6169787b75625a4935200c0000000000021528385b708577624d38221b1b1b1b1b1b1b1b1b1b1b1b151d2023272c3639454b58616d7c8578645c4a3e2d1e0e00000000000000000000000000000000000000000b2034485a718676614f647a836e5b4a36210f000000000000000000000000000000000000000000000001162b41566b807d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c617786715c3a2a1704000000000000000000000000000000000000102135495b6c827c665443301c0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4a4e4a3e2d1a08141c2a3339454b5156595a5956504b44372e201103000000000000000000182d42576d8278634e38230e00000000000000071c32475c7187715c47321c00000000000000000000000000000000000000000000000412222f3e4a57616d7c867e75686157504b44373d3a393839393c3e3c494d54606774808476625a483b2b1a0a000000000000000000000000000000000000000000000000080d1820222a34373c40424546454544423f3a353127221b10070000000000000000000000000000000000061a2c3d49586165625a4e42311a0a000000000000000000000000000000000a1b32434f5b63656157493c2c1906000000000000192e43586e837a654f3a2510060606060606060606060001080b0e111a2128323a474c5e6679867a645c4a3c2b1a0a000000000000000000000000000000000000000d22384d62778570584b5d6f8479634e3e2d1a07000000000000000000000000000000000000000000000013293e53687e806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3447597388735847331f0a000000000000000000000000000000000000061a2c3d4d62778673604b3827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000f202d3639362d200f00010c171f2832363c41444543413b35312619100200000000000000000000182d42576d8278634e38230e00000000000000071c31475c7186715c3929170300000000000000000000000000000000000000000000000412202d39464b5f67757f857e766d6560555552504e4d4e4f5154585b636a747c857e726158483c2b1d0d000000000000000000000000000000000000000000000000000000050b0d181f22262a2d2f3030302f2c2925201d15090800000000000000000000000000000000000000000f1f2c3a474c504d483c3124130000000000000000000000000000000000001424323d494e504b46392c1e0e00000000000001162b41566b807d67523d281200000000000000000000000000000000060a161e2933404c5b6378857a645a493828160300000000000000000000000000000000000013283d52687d806b563f4f647a836e5c4a362110000000000000000000000000000000000000000000000011263b51667b826d58432d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c718676614c37210c000000000000000000000000000000000000000e203448596b807d675645311d0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124211a0f01000000040a161e21262c2f302e2c26201d1409000000000000000000000000182d42576d8278634e38230e00000000000000071c31475c7186715746331e0a00000000000000000000000000000000000000000000000002101b2933414d566069767e85827b756f6b67656363636466696d70787f858076696054473a2b1e0e00000000000000000000000000000000000000000000000000000000000000040b0c1115181a1b1b1b1a17140f0b080100000000000000000000000000000000000000000000010f1c2933373b38352b1e130600000000000000000000000000000000000006141f2c35383b3632291b0e000000000000000013293e53687e7f6a553f2a15000000000000000000000000000000000000030c171f2f3d495962788678625645321e110000000000000000000000000000000000061a2c3d586d827b65503b4b5c6f8479644e3e2d1b07000000000000000000000000000000000000000000000e23394e637885705b37271501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8479644f39240f0000000000000000000000000000000000000005182b3b4c61768675604b39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f0d070000000000000003090b1116191a1917110b080100000000000000000000000000182d42576d8278634e38230e00000000000000051b30455a708576614c36210c00000000000000000000000000000000000000000000000000000b171e3038454b5861697079818584807c7a797878797b7e8285837c756b61584a4336291c0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f21262320190e000000000000000000000000000000000000000000010f1a212326211e160b00000000000000000011263b51667b826d57422d18000000000000000000000000000000000000000004121f2c3b485a647a8575604b3f2e1a0a000000000000000000000000000000000c2135495b728776604b363e4f647a836e5c4a362210000000000000000000000000000000000000000000000c21364b617687725544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c827c66513c271100000000000000000000000000000000000000000d1f3347586a7f7e695746321e0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8278634e38230e0000000000000001162b41566b807b655036261401000000000000000000000000000000000000000000000000000003131a28323a474c545c646b70767a7d80818282817f7c78756e6760564c473a3025180c000000000000000000000000000000000000010200000000000000000000000000000000000000000000000001080b1015171614100b080100000000000000000000000000000000000000040a0c100d0b06000000000000000000000000000000000000000000000000060c0e100c0a03000000000000000000000e23394e6378846f5a362513000000000000000000000000000000000000000000010f1d2b3c4b5c697e826c5d4b382715020000000000000000000000000000000e23394e6378856f564532364a5c6f8479644f3e2d1b07000000000000000000000000000000000000000000091e324657738875604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f7e69543f291400000000000000000000000000000000000000000417293a4b60768775614b3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b14110f090000000000000000000000000000000000000000000000000000182d42576d8278634e38230e000000000000000011263b51667b806a5443301c0a000000000000000000000000000000000000000000000000000000000a161e2a33373e4a4f56586165686b6c6d6c6b6967636054524b4538332a1c13080000000000000000000000000000000000060f1518100e09000000000000000000000000000000000000000009141d20252a2c2b2925201c14080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b617687725443301c07000000000000000000000000000000000000000000000e1e2e3e4a6072857b655645311d0a00000000000000000000000000000114263653697e7f6a5538282e3e4f6479846e5c4a362210000000000000000000000000000000000000000000031628395b718678624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c816c56412c170100000000000000000000000000000000000000000d22374d6277887f6a5847331f0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a161e212a26231c1103000000000000000000000000000000000000000000000000182d42576d8278634e38230e00000000000000000b20364b60758574604b3928180a02000000000000000000000000000000000000000000000000000000020c171f212d36393a464c5053555757575654514e4a43363632281f170c0000000000000000000000000000000000000917232a2d26231c1103000000000000000000000000000000000412192631353a3f41413e3a3530261e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324657738875604a35200b0000000000000000000000000000000000000000000000101c30435463798674604b3827150200000000000000000000000000081c3043546e837a644f3a2522364a5c6e837a644f3e2e1b08000000000000000000000000000000000000000000192e44596e837a65503a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a846e59442f1900000000000000000000000000000000000000000114263753687d7f8576614c3b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2832363f3b382f2211000000000000000000000000000000000000000000000000182d42576d8278634e38230e0000000000000000081d3144556a7f7c66574536281d151813110b02000000000000000000000000000000000000000000000000040a101b22242933363a3e40414242413f3c38353025211e160a04000000000000000000000000000000000000061727353f423b382f21110000000000000000000000000000000715223037444b50545756544f4b433632281a10020000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395b718677624d37220d000000000000000000000000000000000000000000000000132536495b6c817e685645311d09000000000000000000000000000b20354b60758775604b35201b2d3e4e6479846f5c4b372210000000000000000000000000000000000000000001162c41566b817d68523d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d627786715c3a29170400000000000000000000000000000000000000081d3144556e837b7d806b594834200e00000000000000000000000000000000000000000000000000000000000000000000000000000000071118263038454b54504c402f1c090000000000000000000000000000000000000000000000182d42576d8278634e38230e0000000000000000021527374b617584756054453832282d29261f14060000000000000000000000000000000000000000000000000000070d0f171f2125282b2c2d2d2c2a2723201c130b090200000000000000000000000000000000000000000f2335455257504c3f2f1e0e0000000000000000000000000005152533404d5560656a6c6b696560544b45382e2011030000000000000000000000000000050e1517150e05000000000000000000000000000000000000000000000000020c12140e0c0600000000000000000000192e44596e837a644f3a250f00000000000000000000000000000000000000000000000008182c3d4d62778775604b36200f000000000000000000000000000f24394f6479846f5544311d1022364a5c6e837a644f3f2e1b08000000000000000000000000000000000000000014293e54697e7f6a55402a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607588735846331f0a000000000000000000000000000000000000000b20354b60758774738677624c3c2c19060000000000000000000000000000000000000000000000000000000000000000000000000006101b222f36434b566069665e4c38230f0000000000000000000000000000000000000000000000182d42576d8278634e38230e000000000000000000091e324657657b817260564b4538423e3b3124140200000000000000000000000000000000000000000000000000000000040a0c1013161718171614120e0b07000000000000000000000000000000000000000000000001152a3f52636d655d4c3c2b1a0a00000000000000000000000013233344505f67747a7f81807e7a746a60564b3f2e211101000000000000000000000000081622292c292216080000000000000000000000000000000000000000000006141f26292321190e000000000000000001162c41566b817c67523d2712000000000000000000000000000000000000000000000000000f203448596d827d68523d2d1a07000000000000000000000002152838546a7f7e6954372715071b2d3e4e6479846f5d4b372211000000000000000000000000000000000000000011263c51667b826d58422d1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354728776614c36210c0000000000000000000000000000000000000010253a4f657a836e667c816c5a4935200f0000000000000000000000000000000000000000000000000000000000000000000000040e19202d36404c546067757f7b66503b26110000000000000000000000000000000000000000000000182d42576d8278634e38230e000000000000000000031628394b5d677d81746760565857534e42311f0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d817b655a4838281502000000000000000000000c1c314150626a7c85807a77787a7f847f75645d4b3f2e1f0f0000000000000000000000051626343e413e342616000000000000000000000000000000000000000000021424323b3e38352c1e0e000000000000000014293e54697e7f6a543f2a150000000000000000000000000000000000000000000000000005192b3b4f647985705b4a36210c0000000000000000000000091d3245566f8479644e39240f001021364a5c6e837a644f3f2e1c08000000000000000000000000000000000000000f24394e6479856f5a36261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f8479644e39240f00000000000000000000000000000000000004182a3a556b807d685e708578624d3d2d1a070000000000000000000000000000000000000000000000000000000000000000030c181f2b353e4a4f5e66737d867f72604b35200b0000000000000000000000000000000000000000000000182d42576d8278634e38230e000000000000000000000b1b2e3f4d5f677b837c756e6d6d68604e3b2611000000000000000000000000000000000000000000000000000000000000000000000002090b0f121414120f0b080100000000000000000000000000000000000000000b21364b60758578625645321d1301000000000000000004172a3a4e5f6a8081766a65626265696e7b847b655d4b3d2d1909000000000000000000000e22344451565144341c0c00000000000000000000000000000000000000000c1f32424f534d493c2c19060000000000000011263c51667b826c57422d1700000000000000000000000000000000000000000000000000000d22364a5c718679634e39240e00000000000000000000000b20364b60758774604a35200b00071a2d3d4e6379846f5d4b372311000000000000000000000000000000000000000c21364c617687725443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d827b66513c26110000000000000000000000000000000000000a1f3347587086776250657b826d5b4a362110000000000000000000000000000000000000000000000000000000000000010a161e2a333c494d5c646f7b85807669605443301c080000000000000000000000000000000000000000000000182d42576d8278634e38230e0000000000000000000000112130414d5d65757d838382817e68533e29130000000000000000000000000000000000000000000000000000050b0d14120c02070a151d20242829292724201c140806000000000000000000000000000000000000091e32455763798474604b4131200f00000000000000000a1f334758687d816c61574f4d4d50545e6675837b655c4a3727150200000000000000000015293e51636c63513a2a17040000000000000000000000000000000000000012263b4f6069635b4935210c000000000000000f24394e6479846f5a3625130000000000000000000000000000000000000000000000000000071b2e3e546a7f806b553b2b18050000000000000000000010253a50657a836e5443301c0700000f21364a5b6e837a654f3f2e1c080000000000000000000000000000000000000a1f334658738875604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f7e69543e29140000000000000000000000000000000000000c22374c61778671594c5d6f8479634e3e2e1b080000000000000000000000000000000000000000000000000000000009141d28323a474c5a626d798482776b61584b43362614010000000000000000000000000000000000000000000000182d42576d8278634e38230e0000000000000000000000031223303f4b5660686e6e767776614c36210c000000000000000000000000000000000000000000000000000d18202229261f141b22273136393d3e3e3c39353026211a0e040000000000000000000000000000000003162839495b667c816c5f4e3e2d1c0c000000000000000c21374c61778575604b463938383a404c576074847a645544311d09000000000000000001172c41566c816c5847331f0a0000000000000000000000000000000000000014293e53697e79634d38230e000000000000000c21364c617687725443301c0700000000000000000000000000000000000000000000000000001024394e63798671594834200b00000000000000000003172939556b807d6853362513000000071a2d3d4e6379846f5d4b3723110000000000000000000000000000000000000417293a5c718677624d3722131313131313131313131313131313131313130d0b050000000000000000000000000000000000000000000000000012283d52677d816b56412c1601000000000000000000000000000000000013253652677c816b563f4f647a836e5c4b3722110000000000000000000000000000000000000000000000000000071219263138454b58616c788383796d62594c463a30261808000000000000000000000000000000000000000000000000182d42576d8278634e38230e0000000000000000000000000512212e38454b5359576161615846331f0a0000000000000000000000000000000000000000000000000d1d2b34373e3b321f2d3638454b4f525353524e4b4336352c1f170c000000000000000000000000000000000a1b2c3c4d5e6b807d685c4a3a291808000000000004172a3a54697f7d67564532292223252f39455662788674604b372715020000000000000002172c42576c8176614c37210c0000000000000000000000000000000000000013283d52687d7b66513c2611000000000000000a1f334658738875604a35200b00000000000000000000000000000000000000000000000000000c21364a5b728777624d37220d0000000000000000000a1e334657708578634d38230e000000000f21364a5b6e837a65503f2f1c08000000000000000000000000000000000000192f44596e847a654f3a29292929292929292929292929292929292929292220180d00000000000000000000000000000000000000000000000010253a50657a836e59442e190000000000000000000000000000000000071c3043546d827b65503b4b5c6e837a644f402f1808000000000000000000000000000000000000000000000006101b222f37444b56606a7781857a6e635b4d483b33291c140800000000000000000000000000000000000000000000000000182d42576d8178634e38230e0000000000000000000000000003111a2832363d39464b4c4c463a291704000000000000000000000000000000000000000000000005182b3b484c544f42333e4a4e566064676969676460544e493d332a1c10020000000000000000000000000000000e1e30404b6073847a64584636251300000000000a1f334758708575604b3828160d0d111b2838485a697e7e695544311d080000000000000000142a3f54697f7a654f3a25100000000000000000000000000000000000000010263b50657b7f69543f2a14000000000000000417293a5c718677624c37220d0000000000000000000000000000000000000000000000000000071a2d3d586d837c67513c27120000000000000000000c21364b617687725b4935210c00000000071a2d3d4e637985705d4b382311000000000000000000000000000000000002172c41576c817c67523e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e37342b1d0d00000000000000000000000000000000000000000000000d23384d627886715b39291603000000000000000000000000000000000b20354a60748775604b363e4e6379846f5e4c362513000000000000000000000000000000000000000000040e19202e36404c556068757f857c70655d4e493d342b1f170b010000000000000000000000000000000000000000000000000000182d42576d8279634e38230e0000000000000000000000000000000a161e2128283236373633291b0b0000000000000000000000000000000000000000000000000b203448596269604f474c5c646d75797d7e7e7c79756c635b4c473a2e201305000000000000000000000000000000121d31445562778576615443301c11000000000c21374c6176836f5645321a0a0000000a1a2b3c4b60758675604b36200b000000000000000012273c51677c7d68533e2813000000000000000000000000000000000000000e23394e6378826c57422d170000000000000000192f44596e8479644f3a240f00000000000000000000000000000000000000000000000000000014293f54697e806b56402b1600000000000000000011263b51667b826d583c2c190600000000000f2135495b6d837b6550402f1c09000000000000000000000000000000000014293f54697e7f6a545353535353535353535353535353535353535353534d483b2b1805000000000000000000000000000000000000000000000b20354b607588735746321e0a000000000000000000000000000000000f24394f6479846f564532364a5b6d827b655443301c09000000000000000000000000000000000000030c181f2c353e4a4f5e66747d857d74665e4f4b3f362c20180d04000000000000000000000000000000000000000000000000000000000c21364b617673604b35200b0000000000000000000000000000000003090b13161e2122211f170b000000000000000000000000000000000000000000000000000d22374c62777e695458616d798284817d7c7c7d818481786c61584b3e312313050000000000000000000000000000011426374759657a8372604a3f2f1d0d00000010263b50657b7f6a5538281500000000000e1e3245566c817b66513c261100000000000000000f24394f6479816c56412c17000000000000000000000000000000000000000c21374c617684705a3928160300000000000002172c41576c817c67523c271200000000000000000000000000000000000000000000000000000010253b50657a846f5a372614010000000000000004182a3a566b817d67523d2812000000000000061a2c3d4e637885705e4c382312000000000000000000000000000000000012273c51677c816c6868686868686868686868686868686868686868686862594834200b00000000000000000000000000000000000000000000081d314455728776614b36210c0000000000000000000000000000000417293a556a7f7e695338282d3d4d62788573604a37261401000000000000000000000000000000010b161e2a343c494d5c646f7b857f756860554c40372e211a0f050000000000000000000000000000000000000000000000000000000000000a1e32465761605544311d08000000000000000000000000000000000000000003090c0c0c0a0400000000000000000000000000000000000000000000000000000b20354a6075816c5a6276828379706c686766686c6f79828176645c4e4131231304000000000000000000000000000009192a3b4b5d697e7f6a5d4c3c2b1a0a000012283d52677d7d68533e28130000000000021628384e6479836d583c2b1905000000000000000c21374c6176846f5a3e2d18080000000000000000000000000000000000000a1f3347587287725745321e090000000000000014293f54697e7f6a543f2a150000000000000000000000000000000000000000000000000000000d22374c627787725544311d08000000000000000a1f344759718677624d37220d000000000000000f2135495b6d827b6550402f1c09000000000000000000000000000000000f24394f6479867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e77624d37220d00000000000000000000000000000000000000000000011426375a708578634e39230e0000000000000000000000000000000a1f334658708578634d38232035495a6c817c675544311d0a000000000000000000000000000009151d28323b474c5a636e7a8481776a60574b443730221b1006000000000000000000000000000000000000000000000000000000000000000003162939464b4b44372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546d826d6278867c6e635b5653515153565b636d7a847a68604e413022120000000000000000000000000000000d1d2e3f4f616d827b655a48382715020014293e54697e7c67523c27120000000000000b20354a607586715a4835200b000000000000000a1f3347587186715c4a3626180a00000000000000000000000000000000000417293a5d728776604b36210b0000000000000012273c51677c816c57422c170200000000000000000000000000000000000000000000000000000b20354a60758975604b35200b000000000000000c22374c61778671594834200b00000000000000061a2c3d4e637885705e4c382312000000000000000000000000000000000c22374c6177897e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e78634d38230e0000000000000000000000000000000000000000000000182d43586d827b66513b26110000000000000000000000000000000c21364c617687725a493520192b3c4c62778674604b382815020000000000000000000000000919273139464b59616c788382786c61584b4539312619120800000000000000000000000000000000000000000000000000000000000000000000000b1b2932363531261909000000000000000000000000000000000000000000000000080e100e080000000000000000000000000000000000000000000000000000132536586d826d76867a665e4e4a3d3e3c3c3e3d4a4e5d6575827e685f4d402f1d0d000000000000000000000000000000102132424b61758578625645311d1301142a3f54697f7b66513c2611000000000000071c3043546f8477624d38220d0000000000000004172a3a596f847964544336281a0e00000000000000000000000000000000001b30455b708579634e39240e000000000000000f24394f6479846f5a442f1a000000000000000000000000000000000000000000000000000000071c304354728777624d37220d0000000000000012273c52677c816c573b2b180500000000000000000f2135495b6d827b6650402f1d090000000000000000000000000000000a1f33475873897369696969696969696969696969696969696969696969635a4935200c0000000000000000000000000000000000000000000000162b40556b807e68533e291300000000000000000000000000000012273c51677c816c573c2c190e203448596b807d685645321d0b000000000000000000000001152737444b57616a778184796d625a4c473a32281d140900000000000000000000000000000000000000000000000000000000000000000000000000000b161e21201d1409000000000000000000000000000000000000000000000003111c2326231c1103000000000000000000000000000000000000000000000000182d42576d8276837b655c4d40362d282727282d363f4b576172817d675e4c3b2b1808000000000000000000000000000002141e32465763798474604b41311f0f14293e54697e7c67513c271200000000000000132536566b817b66503b2611000000000000000011263b50667b8473605445382c1e1304000000000000000000000000000003182e43586d837c66513c2711000000000000000c22374c617786715c3a2a18040000000000000000000000000000000000000000000000000000001325365b708579644f39240f00000000000006192b3c576c827c67513c2712000000000000000000061a2c3d4d637885705e4c38241200000000000000000000000000000004182a3a5c718677625454545454545454545454545454545454545454544d493c2c1906000000000000000000000000000000000000000000000013283d53687d806b56412b160100000000000000000000000000071a2d3d576d827b66513c261105182b3b4c61768675604b3929160300000000000000000000081d3144556068757f857b6f645c4d483c332a1e160a0100000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0b080100000000000000000000000000000000000000000000000011212f383b382f2111000000000000000000000000000000000000000000000000152a40556a7f80816c5e4c3e30211a131211131a212e3946546072827c66594836251300000000000000000000000000000003162939495b677c816c5f4d3d2d1b13283d52687d7d68533d28130000000000000014293f54697e7d68533d281300000000000000000f23384c5e6c8181726056493c311f170b0000000000000000000000000001162b41566b807f69543f2a14000000000000000a1f3347587388735947341f0a0000000000000000000000000000000000000000000000000000001a30455a6f857a65503a25100000000000000b2035485a728776614c37210c000000000000000000000e2035495a6d827b6651403018080000000000000000000000000000001a2f445a6f8479644f3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e38352c1e0e00000000000000000000000000000000000000000000000010263b50657b836e58432e1900000000000000000000000000000c21364a5b728776614b36210c000d1f3347586a7f7e695746321e0c000000000000000000000b20354b60737e847c73655d4e4a3e352b1f170c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2f3f4c504c3f2f1c08000000000000000000000000000000000000000000000013283d52687d8876614c402f2012070000000007111b2936435460748377625443301c0b0000000000000000000000000000000b1b2c3d4d5f6c817d675b4a3a2918263b50657b7f6a553f2a150000000000000012283d52677d7f6a543f2a150000000000000000091c2f404a6072818275635a4e4133291b0f0100000000000000000000000013293e53687e826c57422d170000000000000004182a3a5c718677614c37220c0000000000000000000000000000000000000000000000000000041a2f44596f847b66503b26110000000000000d23384d627886715847331f0a0000000000000000000006192c3c4d627885705e4c362513000000000000000000000000000002172c42576c817c67523c292929292929292929292929292929292929292320190e000000000000000000000000000000000000000000000000000e23384d637886705b38281603000000000000000000000000000e23394e6378846f5746321e09000417293a4b61758676614b3a2a1704000000000000000000152a3f556a7f84776b62594d493c362d221b1008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0f0d0b0801000000000000000000000000000000000000000e23384c5d655d4c38230d000000000000000000000000000000000000000000000010253a50657a816c584633211102000000000000000b182536455663788472604a392916030000000000000000000000000000000f1f30414b60738479635846362523384d6378826d583a2a170400000000000012273c52677c806a55402b15000000000000000000111c304354606c7e8578685f4c463a2c1f1103000000000000000000000011263b51667b846f5a37271501000000000000001a2f445a6f8479644f3a240f000000000000000000000000000000000000000000000000000004192e43596e837c66513c271100000000000013283d53687d806b563a2a170400000000000000000000000e2035495a6d827c665443301c080000000000000000000000000000152a3f546a7f7f69543f2a1414141414141414141414141414141414140e0c0600000000000000000000000000000000000000000000000000000b20364b607588735645321e090000000000000000000000000316283954697e7f69543928160300000c1e324657697e7f6a5847331f0d00000000000000000013283c50616a7a8381776c635a4e4a3d372e231c11070000000000000000000000000000000000000000000000000000000000000000000000000000000000050d181f222423201c140805000000000000000000000000000000000010263b50657b65503b2b1805000000000000000000000000000000000000000000000d23384d6278836e583a29170300000000000000000008182738495b697e7d685746321e0b00000000000000000000000000000001121d314455627785766154433020354a607585705847331f0a00000000000012273c51677c806a55402b1500000000000000000000132536434a60687a867d6d6158493d2e211103000000000000000000000e24394e637987725544311d0800000000000002172c42576c817c67513c2712000000000000000000000000000000000000000000000000000004192e44596e837b66513c26110000000000071a2d3d586d837b66503b261100000000000000000000000006192c3c4d62788573604a362513000000000000000000000000000012273c52677c816c57412c1702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556738876604b36210b000000000000000000000000091e3245576f8479634e39240e000000031628394b60758677614c3b2b180500000000000000000d203343505c646d798281786d635b4f4b3e382f201c130801000000000000000000000000000000000000000000000000000000000000000000000000000d18202a343739383530261f180d00000000000000000000000000000001172c41566c816c594834200b000000000000000000000000000000000000000000000b20364b607585705b38281502000000000000000000000a1a2c3c4b60748576614b39281603000000000000000000000000000000011527374859657b8372604a3f2f3043546f8476614c37211000000000000013283e53687d7e69543f29140000000000000000000008182530424e5c6475818376635b4b3f2e2110000000000000000000000c21364c61768b75604b35200b00000000000000152a3f546a7f7f69543f2a140000000000000000000000000000000000000000000000000000051a2f445a6f847b65503b261000000000000c21364a5b728776614b36210c000000000000000000000000000e2035485a6c827c665443301c08000000000000000000000000000f253a4f647a846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000060b0d0e0c07000000021527385b708578634e38230e0000000000000000000000000b21364b607687725b4a36210c000000000b1d314556687d806b594834200e0000000000000000031525333e4a4f5b636d788282796e645c504b3f3530251d140902000000000000000000000000000000000000000000000000000000000000000000000d1d2b343b474c4e4d4b4336342a1d11030000000000000000000000000000152a40556a7f77624d37220d00000000000000000000000000000000000000000000081d3144557085705645321d0900000000000000000000000e1d314455677c806a5746321e090000000000000000000000000000000009192b3b4b5d697f7f6a5d4b3c2b3653687e7d68533e2e19090000000000152a3f546a7f7d68523d2813000000000000000000000008131c313e4a57606c7c8679655d4b3f2e1d0d0000000000000000000a1f334658748977624d38220d0000000000000012273c52677c816c57412c170200000000000000000000000000000000000000000000000000011426365b70857a644f3a250f00000000000e24394e637985705746321e0a0000000000000000000000000006192b3c4d62788673604a362614010000000000000000000000000d22374c627786715c3a29170400000000000000000000000000000000000000000000000000000000000000000000000e19202324211a0f010000192e43586e837b66503b261100000000000000000000000011263b51667b826d573d2d1a0700000000021527384b60748677624d3c2c190600000000000000000715202e363d4a4e5a636c7781837a6e655d514a433631261d150a030000000000000000000000000000000000000000000000000000000000000005182b3b484d5962646260544c473b2f2111020000000000000000000000000013283d52687d7a65503b251000000000000000000000000000000000000000000000021527375b708575604b36200b0000000000000000000000011527374d5f708576614b36211000000000000000000000000000000000000d1d2e3f4f616e837b655a4838374c617785705c4a37261402000000081b2e3e586d8379644f39240f0000000000000000000000000014202d39454b5f6779867b655d4b3b2b180500000000000000000417293a5c71867a65503a2510000000000000000f253a4f647a846f59442f1a0000000000000000000000000000000000000000000000000000081c304354728777624d38220d000000000114263754697e806a553929160300000000000000000000000000000e2035485a6c817c675443301c080000000000000000000000000b20354a607588735846331f0a000000000000000000000000000000000000000000000000000000000000000000000e1e2b353839362d1f120401162b40566b807d68533e2813000000000000000000000006192c3c576c817c67513c27120000000000000a1d314455677c826c5b4935210f00000000000000000002101b222d363c494d5a626c7780837b6f6660544b443731271e160a0400000000000000000000000000000000000000000000000000000000000b203448596270777978756c62594c3f2f20100000000000000000000000000010253b50657a7e68533e29130000000000000000000000000000000000000000000000182e43586d8378634d38230e0000000000000000000000000919304153687d7e69533e2d1b070000000000000000000000000000000000112132434c617685786256453347586d827a645544311d150903041022374b5c718775604b35200b0000000000000000000000000002101b2832414d5b6378867b655948342012000000000000000000192f44596e847d67523d2812000000000000000d22374c627786715c3a2a1704000000000000000000000000000000000000000000000000000b20354b60758975604b35200b00000000081d3144556e847a65503a251000000000000000000000000000000005192b3c4d62788673604b362614010000000000000000000000071c304354728776614c36210c00000000000000000000000000000000000000000000000000000000000000000006192b3c484d4e4a3d2f22140013293e53687e806b56402b1601000000000000000000000c2035495a728776614c36210c000000000000011426374d5f708578634d3e2d1a0700000000000000000000070f1a212c353c484d59616b767f847c736760554b453832281f170c040000000000000000000000000000000000000000000000000000000d22374d627786848182858177655d4c3f2e1a0a0000000000000000000000000d23384d6278816c56412c170000000000000000000000000000000000000000000001162b40566b807b65503b2610000000000000000000000000001221364b617685705c4a36220d000000000000000000000000000000000003151e33465763798474604b413a4d62788473604b4131271e16181f2f404f647a836e5544311d080000000000000000000000000000000a161e303d495a62788777624d403018080000000000000002172c41576c817f6a55402a15000000000000000b20354a607588735847331f0a000000000000000000000000000000000000000000000000000e23384e637887725544311d08000000000b20354b60758875604b36200b000000000000000000000000000000000e2034485a6c817c675443301c090000000000000000000000001325365a6f8479644e39240f0000000000000000000000000000000000000000000000000000000000000000000b2035485a62635b4c40311c1311263b50667b836d58432e1800000000000000000000000d23384d627885705846331f0a000000000000000919304150667b836e5c4a362110000000000000000000000000070e19202b343b474c58616a767e847c746860564b453933291f180c05000000000000000000000000000000000000000000000000000b20354a6072776f6c6d6f79847b655d4b3828160300000000000000000000000b20364b6075836f59382816020000000000000000000000000000000000000000000013293e53687e7d68533d281300000000000000000000000000091e3246576d8279644f39240f000000000000000000000000000000030404031729394a5b677d816c5f4d3d485a697f7f695f4b443732292a333e4c5e6d837a6550372715010000000000000000000000000000000003121f2c3c495a667c846f5e4c362513000000000000000014293f54697e826d57422d1800000000000000071c304354728776614c37210c0000000000000000000000000000000000000000000000000012273d52677c836d5837271501000000000f243a4f6479846f5645311d090000000000000000000000000000000005192b3c4d62778673604b372614010000000000000000000000182d42576d827b66513c26110000000000000000000000000000000000000000000000000000000000000000000d23384d627879665e4e4230251823394e637885705b382815020000000000000000000215273853697e7f6a553a29170400000000000000001223384c5e6f8579644e3f2e1b0800000000000000000000000000060d19202a343a474c576169757e857d756960574c463a342a20190e050000000000000000000000000000000000000000000000071c30435460625957585c6474837b645645321e090000000000000000000000081d3144557085705645321e090000000000000000000000000000000000000000000011263b50667b806b55402b16000000000000000000000000000316283951667b806b563b2a18050000000000000000000002090b1218191919181b2d3d4d5f6c817d675b4a3c4a6072827d6a60554b46393a474c5c667b836e5d4b371909000000000000000000000000000000000000010f1d2c3c4c5e6e837c665443301c070000000000000012273c51677c856f5a36251300000000000000001325365a6f8479644f39240f000000000000000000000000000000000000000000000000081b2e3f576c827e69533e29140000000002162838556a7f7f6a543827150200000000000000000000000000000000000d203448596c817d675544311d090000000000000000000000152a3f556a7f7e69543e29140000000000000000000000000000000000000000000000000000000000000000000d23384d6278857c68604a43362721364b617688735645321d09000000000000000000091d3145566f8479644f3a240f000000000000000000091c2f404f647a846f5d4b372212000000000000000000000000000000050c181f293339464b566068747d847e756a61584c473b352b20190d0000000000000000000000000000000000000000000000132536434a4c473b3e4a5661768675604b36210c0000000000000000000000021527375a708576604b36210b000000000000000000000000000000000000000000000e23394e6378826d58432d1800000000000000000000000000000b20364b607586715948341f0b0000000000000000000a151d20272d2f2e2e2d272130414b6074847963584643546072827f74676157585858616b7a8577614c3f2e1c0000000000000000000000000000000000000000000e1e30404e63788673604a35200b000000000000000f24394f647987725443301c0700000000000000182d42576d827c66513c27110000000000000000000000000000000000000000000000000d22374b5d728778624d38230d00000000091e3245566f8479644f39240f00000000000000000000000000000000000005182b3b4d62778674604b372715010000000000000000000012283d52677d816b56412c160100000000000000000000000000000000000000000000000000000000000000000b2035495a6276847e6b6054453829324657738875604b36200b0000000000000000000b20364b60758775604b35200b000000000000000000001122374b5c6e847a654f402f180800000000000000000000000000000000040c171f293238454b556068747c847f766b61594d483c342b1d0d00000000000000000000000000000000000000000000081825303537342a2d384758697e7e69543a2917040000000000000000000000182e43586d8379634e39240e000000000000000000000000000000000000000000000c21364b617685705a3e2e1b0700000000000000000000000000091d3245566f8477624c37220d0000000000000003111a2731363c43444444433c3632314455627885766154434354606c7c837d766e6e6d6f7780857762594734211100000000000000000000000000000000000000000000122135495b708579644f39240f000000000000000c22374c61778a75604a35200b00000000000000152a3f556a7f7e69543f2914000000000000000000000000000000000000000000000005182a3b4f647a86715a4935200c000000000b21364b60768875604b35200b000000000000000000000000000000000000000d203448596c817d675544311d090000000000000000000010253a4f657a836e59432e1900000000000000000000000000000000000000000000000000000000000000000006192b3c495861748280726056463a2b395b718678634d38230e00000000000000000010253b50657a836d5443301c0800000000000000000000081b2e3e4e637985705e4c362513000000000000000000000000000000000000040b161e283237444b5460676f7b8480776c625a4d483c2b19050000000000000000000000000000000000000000000008131c20221f181a2a3a4c617686715847331f0a0000000000000000000000162b40556b807c67513c271200000000000000000000000000000000000000000000091e3246577185715c4a36220c0000000000000000000000000002152838556a807c67513c27120000000000000412212e38454b525859595958524b4639374859657b8372604a3f434b5f67767c8383838283837c726259483b2a180300000000000000000000000000000000000000000000061a2c3d54697e7f6a55402a15000000000000000a1f344759748977624d37220d0000000000000012283d52677d816c56412c1701000000000000000000000000000000000000000000000a1f3448596d827e69543c2c19060000000010253b50657a836e5443301c080000000000000000000000000000000000000005182b3b4c62778674604b372715010000000000000000000d22384d627786715b392816030000000000000000000000000000000000000000000000000000000000000000000e1e2b3a475660728082746158483c43596e837b65503b2610000000000000000005192b3b566b807d67523626140100000000000000000000001021364a5b6d837b665443301c0900000000000000000000000000000000000000030a151d273136434b515e666f7a8481786d625a4834200b000000000000000000000000000000000000000000000000070b0d0b050c1f334758708576614c37210c000000000000000000000013283e53687d7e69543f291400000000000000000000000000000000000000000000031628395b71857a644f3b2a18040000000000000000000000000011263b50667b806b56412b1601000000000012222f3f4b5660676d6e6e6e6d6761574b443b4b5d6a7f7f6a5d4b3b414d5761676d6e75756f6e676054483b2b1d0c0000000000000000000000000000000000000000000000000f24394e6379846f5a452f1a0000000000000004182a3a5c71877a644f3a250f0000000000000010253a4f657a846e59442f19000000000000000000000000000000000000000000000a1a2d3d4c62778876614c37210e000000000417293a566b807e69533626140100000000000000000000000000000000000000000d1f3448596b817d685544311d090000000000000000000b20354b607588735745321e09000000000000000000000000000000000000000000000000000000000000000000000e1c2a384554606b7e8476625a4a3e566b817d68533d281300000000000000000b20344859718677624c37220d000000000000000000000000071a2d3d4d63788673604a3727150100000000000000000000000000000000000000000209151d263035404c515d656e7a838278624d38220d000000000000000000000000000000000000000000000000000000000004172a3a576c817a65503a2510000000000000000000000011263b50667b816c56412c170100000000000000000000000000000000000000000000192e44596e83826d5947341f0b000000000000000000000000000d23384d6278846e59442f1900000000000d1d2f404c5d65747c82838383827c766a6055483f4a6072837b6559483739464b52585460605659514a43362b1d0d000000000000000000000001000000000000000000000000000c22374c617786715c47311c00000000000000001a2f445a6f847c67523c2712000000000000000d22384d627786715c3a2917040000000000000000000000000000000000000000021528384a5b6c81806b5847331f0a000000000a1f334658708578634e39230e00000000000000000000000000000000000000000005182a3b4c62778674604b372715020000000000000000081c304354728776604b36210b00000000000000000000000000000000000000000000000000000000000000000000000c1a2836434a60687c8578645c4c54697e806b55402b1600000000000000000d22374d627786715947341f0b000000000000000000000000000f2035495a6c817c675544311d0a000000000000000000000000000000000000000000000108141c202f383f4b505c646e797f6a543f2a15000000000000000000000000000000000000000000000000000000000000142a3f54697f7d68523d281300000000000000000000000e23384e6378846e59442f190000000000000000000000000000000000000000000001172c41566c818677614c3a2917040000000000000000000000000b20354b607586715c3727150100000005182b3b4c5e667b857e776e6e6e767d837f746259484354617685776255443132363d36434b4b45383c353025180d000000000000000000050b0d160b0801000000000000000000000b20354b607588735d48331e0000000000000002172d42576c827f6a543f2a15000000000000000b20354b607588735846331f0a000000000000000000000000000000000000000a151d32455663798876614c3a291704000000000c21364c617688735b4936210c000000000000000000000000000000000000000000000d1f3447596b817d685544311d0a0000000000000000011426365a708578634e39230e0303030303030303030303030303030303030303030300000000000000000000000000000a182530424e5e667a857a665e51667b826d58432d18000000000000000114263753687d806b563b2a18050000000000000000000000000006192c3c4d62778674604b3828160200000000000000000000000000000000000000000000000108121d242e373e4b4f5b636a614f3c271200000000000000000000000000000000000000000000000000000000000012273c51677c806a55402b1500000000000000000000000b21364b607686715c392917030000000000000000000000000000000000000000000014293e54697e807f6a5846331f0d000000000000000000000000081d3144557186715544311d080000000b20344859667c8376696259595861676e7c8477625a48465864798474604b4130212726303536322827201c13080000000000000000000d1820222c201d15090000000000000000000a1f3347587388735e48331e0000000000000000152a3f546a7f816c57422c1702000000000000081c304354728776614c36210c000000000000000000000000000000000006101a2832444b6074857c665846331c0c000000000011263c51667b836d583d2c1a060000000000000000000000000000000000000000000005182a3b4c61778674604b382715020000000000000000182d42586d827b66503b26181818181818181818181818181818181818181818181813110b02000000000000000000000008131c31404c5c6478857c6860647985705b37271501000000000000081d3144556e837a65503a25100000000000000000000000000000000e203448596b807d685645321e09000000000000000000000000000000000000000000000000000009111c232e373d4a4e544f4332200c0000000000000000000000000000000000000000000000000000000000000f243a4f6479826d58422d180000000000000000000000091e3245567286725746331e0a0000000000000000000000000000000000000000000011273c51667c7f8276614c3b2a18050000000000000000000000011426375c718675604b35200b000004182a3a4d6277857561584c483b464c525f677884786255444a5c687d816c5f4d3d2d1b141c20201d15120b07000000000000000000000d1d2b343741353127190b00000000000000000c21374c617687725c47321d000000000000000012273d52677c846f5a442f1a00000000000000011426365a708579644e39240f0101010101010101010101010200060c0e1a212d38454b626d82816c5e4d3a2917000000000005182a3b566c817d68533d28130000000000000000000000000000000000000000000000000d1f3447596b807d685645311d0a0000000000000000152b40556a807d68533e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e29261f140600000000000000000000000014222f3e4a5a6276847e6a617687725544311d080000000000000b20354b60748774604b35200b00000000000000000000000000000005182b3b4c61768676604b36210b0000000000000000000000000000000000000000000000000000000008101b222d36393f3c322515030000000000000000000000000000000000000000000000000000000000000c22374c617785705a3726140100000000000000000000031628385b708576614c36210c000000000000000000000000000000000000000000000f24394f6479817a806b5948341f110000000000000000000000001b30465b708576614c36210c00000a1f3347586d827a6557463a342a3336404d5a62788473604b3d4e5f6c817d675b4a392917080b0b090200000000000000000000000005182b3b484c564b4437291b1106000000000008182a3b50657a846e59442f1900000000000000000f253a4f647a87715c3a2a180400000000000000182d42586d827b66513c261717171717171717171717171718191a21232c353e4a56606d808373604b40301b0b00000000000b1f344859718677624d38220d00000000000000000000000000000000000000000000000004182a3a4c61778675604b382815020000000000000013283d52687d806b56434343434343434343434343434343434343434343434343433e3a3124140200000000000000000000000412202d3c4858617382806d738975604b35200b0000000000000b20364b607478635544311d08000000000000000000000000000000000d1f334758627876614c36210c000000000000000000000000000000000000000000000000000000000000070f1a21242a27201507000000000000000000000000000000000000000000000000000000000000000a1f3447597186715544311d080000000000000000000000192e43596e8379634e39240e000000000000000000000000000000000000000000000c22374c6177846f8377624c402f1b0b00000000000000000000061b30465b708576614c36210c00000c22374c6177846f5d4b39291f181f21303c495a687e7f6a5947414b60748479635746331e15030000000000000000000000000000000b20344859626b6055463a2e211a0f0c0b0b0d18253447596c817d68523d281300000000000000000d22374d627789745847331f0a00000000000000152b40556a807e69543e2c2c2c2c2c2c2c2c2c2c2c2c2c2c2d2e2c35383d494e5c64748283746055443122120000000000000d22374c627787725a4835200b000000000000000000000000000000000000000000000000000c1f3347586b807e685645321d090000000000000010253b50657a836d5858585858585858585858585858585858585858585858585858534e42311f0b00000000000000000000000002101e2b3a4655606d8082748578624d38230d000000000000091d32455660635a49372715010000000000000000000000000000000004172a3a485a62615846331f0a0000000000000000000000000000000000000000000000000000000000000000070c0e15120c03000000000000000000000000000000000000000000000000000000000000000004182a3a5c718675604b35200b0000000000000000000001162b41566b807b66513c2611000000000000000000000000000000000000000000000a1f33475871857178816c5e4c39291703000000000000000000031729395c718675604b35200b000013283d53687d7d68533f2e1b0b050a121e2c3c4a60738477614c37455662788576614c433221110000000000000000000000000000000d22374c6277807361584b3f362c24212020222b36434c62778776614c36210c00000000000000000b20354a60758a77614c37220c0000000000000013283d52687d816b5641414141414141414141414141414142433d494e535b636d79857f726056453727150400000000000012273d52677c826d573c2b19050000000000000000000000000000000000000000000000000004182a3a4c61778674604b36200b000000000000000d23384d627885706d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d68604e3a261100000000000000000000000000000e1b2937444b616a7d84827a65503a251000000000000002152838454b4d493c2c19090000000000000000000000000000000000000c1c2b3c484d4c463a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8477624d38220d000000000000000000000014293e53697e7e69533e29140000000000000000000000000000000000000000000004182a3a5c7186756c817b655746331e140400000000000000000a1e3346577286725544311d080002182d42576d8278634e392310000000000e1c304354677d7f6a554438485a657b836e614f3f2e1d0d00000000000000000000000000000b20344859677c8376655d4e493d39373535373b4854606e827e685746331e0a0000000000000000071c304354728779644f39240f0000000000000010253b50657a836e5956565656565656565656565656565657585b5b6368707882857a6a6054453827190900000000000000182d42576d827d67523c27120000000000000000000000000000000000000000000000000000000c1f3347586b807e69533e2914000000000000000b20364b6074898383838383838383838383838383838383838383838383838383827e68533e29130000000000000000000000000000000b19273143505f687b897d68523d2813000000000000000a1a28323638352c1e0e00000000000000000000000000000000000000000e1e2b35383633291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c817a654f3a2510000000000000000000000011263c51667b806b56412b1601000000000000000000000000000000000000000000001a2f445a6f847762758476614c4332221203000000000000000c21364c617686705b3726140100051b30455a708575604a35200b00000000001325364b60758674604b353c4c5e6a7f7f695d4b3b2b19090000000000000000000000000005182b3b4d5f677b847a6d635b544e4c4a4b4c5159627280826d604e392917030000000000000000001325365a6f857c67513c2712000000000000000d23384d627886716c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6d6e7070787e84847b70645c4a4336271a0a00000000000000000e23384e637874604b36200b00000000000000000000000000000000000000000000000000000004172a3a4b607478634d38230e00000000000000081d314455647979797979797979797979797979797979797979797979797979797979634d38230e0000000000000000000000000000000009151d33414e5d65797b654f3a251000000000000000000a151d202320190e000000000000000000000000000000000000000000000e192023211f170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f7d67523d281200000000000000000000000e24394e6379836e59432e190000000000000000000000000000000000000000000002172d42576c827964647a826d614f402f21120200000000000010253a4f657a826d58422d180000051b30455a7084705443301c070000000000081d3245566d827a644f3a2f404a6072837b65594837271502000000000000000000000000000d1d30414d5d65758182796e696361606062666d78838173604b42311b0b00000000000000000000182d42576d827e69543f2914000000000000000b20364b60748a818181818181818181818181818181818182838586837e776f665e4f4a3e3025180a0000000000000000000c2135495b63605645311d09000000000000000000000000000000000000000000000000000000000c1d31455660635a4935200c00000000000000021527374a5c64646464646464646464646464646464646464646464646464646464635b4935210c0000000000000000000000000000000000021523313f4c5b63655d4b37220e00000000000000000002090b0e0c06000000000000000000000000000000000000000000000000060b0d0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c7f6a553f2a1500000000000000000000000c21364c617685705b3828160300000000000000000000000000000000000000000000152a3f546a7f7c675c6a7f7f695e4c3f301d150a0000000009192f40556a807d68523d28130000051b30455a7085705a3625130000000000000215283852677c7f6a553f2a30435461768577625544311d1301000000000000000000000000001223303f4b57616c7982837e79767575777c82857b6c6055443124140000000000000000000000152a40556a7f816c56412c1700000000000000081d31445564797979797979797979797979797979797979787775706e696259514c40362d1c130800000000000000000000061a2c3d494e4b45382715020000000000000000000000000000000000000000000000000000000002152738454b4d493c2c1906000000000000000009192d3e4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4d493c2c19060000000000000000000000000000000000000513212f3d4a4e4f4b3f2e1b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a826d57422d1800000000000000000000000a1e3346577287725645321e090000000000000000000000000000000000000000000012273d52677c7f6954616d817c665d4d4131271a120c0b0d1827374c5e718676614c36210c0000051b30455a7085705a45301b000000000000000e23394e6378836e59432e25364758647a8474604b41301f0f000000000000000000000000000512212e39464b5b636d767c80848585837f7970665e4b443727150600000000000000000000000c22374c617778624d38230d00000000000000021527374a5c6464646464646464646464646464646464646362605558534d483b382f221b10000000000000000000000000000f1f2c35383631271a0a0000000000000000000000000000000000000000000000000000000000000a1a27313638352c1e0e000000000000000000000f202d363939393939393939393939393939393939393939393939393939393938352c1e0e000000000000000000000000000000000000000003111f2d36393a372e21100000000000000000000000000000000000000000000000040a0c15160e0c070000000000000000000000000000000000050b0d1a181208000000000000000000000000000000040e1416110f09000000000000000000000000000000000a141a1c1a140a0000000000000000000000000000000000000000000d22374c6277846f5a3626140100000000000000000000031729395c718676604b36210b0000000000000000000000000000000000000000000010253a4f657a816c574b6073827b675f4b45382f242120222a364455667b836d5846331f0a0000051b30455a7085705a382715020000000000000b20364b607586715c463118293a4a5c687d816c5f4d3d2d1b0b0000000000000000000000000003101b29323d4a4e5761666b6f70706e6a645c514c40312719090000000000000000000000000a1f34475961625a4935200b000000000000000009192d3e4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e4d4b44373e37342b241d12070000000000000000000000000000010f1a2123201d150a00000000000000000000000000000000000000000000000000000000000000000a151d202320190e0000000000000000000000010f1a21242424242424242424242424242424242424242424242424242424242321190e00000000000000000000000000000000000000000000010f1a212425221b1003000000000000000000000000000000000000000000000c171f212a2b24211a0f0100000000000000000000000000000d1820222f2d25190b00000000000000000000000000081621292b26241d1204000000000000000000000000000e1c272f322f271c0e00000000000000000000000000000000000000000b20354a607586715443301c080000000000000000000000192f44596e8378634e38230e000000000000000000000000000000000000000000000d22374d6277846f5944556075827c6b60564c40393635373a475460748578624d3a2917040000051b30455a7085705645311d09000000000000081d3144557286725c3727151c2d3e4e606d827d675b4a3929170300000000000000000000000000000b161e2d3639464b5156595b5b59554f4a3e382f1d15090000000000000000000000000004182a3a474c4d493c2b19060000000000000000000f202d363939393939393939393939393939393939393938363127292220190d09000000000000000000000000000000000000060c0e0b09020000000000000000000000000000000000000000000000000000000000000000000002090b0e0c060000000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0c0600000000000000000000000000000000000000000000000000070c0e100e0800000000000000000000000000000000000000000000000c1c2a33373f4139362d1f0f010000000000000000000000000d1d2b34374541372919080000000000000000000000041626343d413c383022120000000000000000000000000a1c2c39434743392c1c0000000000000000000000000000000000000000071c304354718675604b35200b0000000000000000000001172c41566c817b66503b2611000000000000000000000000000000000000000000000b20354b607585715b3a45576072808074665e544f4b4b4c4f596172827e685a48351c0c000000051a2f455a6f8475604b36200b000000000000021527375c7286725544311d102031424b60748579635746331e14030000000000000000000000000000030f1a212832363c4144454544403a362e241d12010000000000000000000000000000000c1c2a343738352b1e0e00000000000000000000010f1a212424242424242424242424242424242424242322201d15140d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2a3a474c55564e4a3d2d200f000000000000000000000005182b3b484c5a544737251200000000000000000000000e2134445156514c40301d0900000000000000000000001427394a565c564a391c0c00000000000000000000000000000000000000001325365a6f8477624d37220d000000000000000000000014293f54697e7d68533e281300000000000000000000000000000000000000000000081c3043547186715846394554606b7c847b706964616062656c77827f6a604e3c2b190000000002172c42576c8179634e39240e000000000000001c31475c718675604b35200b131e32455662788575614b4332211100000000000000000000000000000000070b161e21272b2f30302e2a24221b10090000000000000000000000000000000000000c181f222320190e00000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0d0b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1f1b1b1c1c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d14120c03000000000000000000020b11131f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d13110b020000000000071117190e0c060000000000000000000000021628384758616a6b635b4a3e2d1a07000000000000000000000b20344859626f6654412d18030000000000000000000014293d51626b665e4c38240f00000000000000000000051a2f4356687168563a29170400000000000000000000000000000000000000182d42576d827a644f3a250f000000000000000000000012273c51677c806b55402b1600000000000000000000000000000000000000000000011426365a708576614c3636434b5e667580847f797675777a81867b6a615042311e0e000000000013283d53687d7d6852392917030000000000021527375c718675604a35200b02162838495a667c836e614f3f2e1d0d000000000000000000000000000000000003090c11161a1b1b19150f0d07000000000000000000000000000000000000000000040a0c0d0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e2134313031323232323232323232323232323232323232323232323232323229271f14060000000000000006131e26283432323232323232323232323232323232323232323232323228261e13060000000a19242c2f23211a0f01000000000000000000091e32455661767f8079645c4a36210d000000000000000000000d22374c6277846f5a452f1a0000000000000000000001162b41566b807c66513c261100000000000000000000071c32475c7187715847331f0a00000000000000000000000000000000000000152a3f556a7f7c67523d271200000000000000000000000f24394f6479836d58432e180000000000000000000000000000000000000000000000182d43586d8279644e392630404c57616b767c81848583807a73655d50433324140000000000000d23384d6278826d5746331e090000000000081d3144557287725443301c07000a1a2b3c4c5e6b807f695d4b3b2b1909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1c0d0b050000000000000000000000000000000000000000000000000000000000000000000711171a110f0900000000000b1b2933364946464647474747474747474747474747474747474747474747474747473f3b322414030000000000021324313a3d494747474747474747474747474747474747474747474747473e3a312413020007192936404438352c1f0f0000000000000000000b21364b60758694968b7a644e39240f000000000000000000000b20354a607586715c3b2a18040000000000000000000014293e53697e7e69533e291400000000000000000000061b30455b708576614c37210c0000000000000000000000000000000000000012283d52677d7f6a543f2a1500000000000000000000000c22374c617785705b3727150200000000000000000000000000000000000000000000152b40556a807b66513c261c3039464b5760666c6f6f6d6b6560544b3f332515060000000000000c2035495a708576614b37271502000000000b20364b607586715c3625130000000e1e2f404b6072847b655948372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000020b111313100b01000000000000000000000000000000000000000000000000000000000000000000000000000002090b1a1812080000000000000000000000000b161e21322220180d000000000000000000000000000000000000000000000000000000000000000b19242c2f26241d1204000003172939464c5e5b5b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c544f43321f0c00000000000b1e31424e535e5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c534e42311e0b001124364754594e493d2c1a06000000000000000010253a50657a8fa4a996816b56412c1601000000000000000000071c3043547186715947341f0b0000000000000000000011263c51667b806b56412b160100000000000000000003182e43586d8379644e39240f0000000000000000000000000000000000000010253a4f657a826c57422d1700000000000000000000000a1f3347587286725544311d080000000000000000000000000000000000000000000013283d53687d7e69533e29141b283239454b5156595a5856504a43362f2115070000000000000006192c3c54697e7e685544311d10000000000f243a4f6479826d58432e1800000000121c30435461768577625544311d130100000000000000000000000000000000000000000000000000000000000000000000000000000006131e262828251e13050000000000000000000000000000000000000000000000000000000000000000000000000a151d20302d251a0c000000000000000000000b1b2932364737342b1d0d00000000000000000000000000000000000000000000000000000000000019293640443c382f221200000a1e3346576174707071717272727272727272727272727272727272727272727272727269614f3b2712000000000011263a4e60687472727272727272727272727272727272727272727272727268604e3a261100172c4054656e635b4935210c00000000000000000e24394e63798e9fa3947f6a553f2a1500000000000000000000001325365a6f8477614c37220c000000000000000000000f24394e6479836e58432e190000000000000000000001162b40566b807b66513c2611000000000000000000000000000000000000000d22384d6277846f5a362513000000000000000000000004182a3a5c718675604b36200b0000000000000000000000000000000000000000000010263b50657b816b56412c160b161e2832363c41444543413a3530251811030000000000000000000e21364b61768574604b3e2d1c130b080d1c2f4054697e7e68533e291300000000011426364758647a8473604b41301f0f0000000000000000000000000000000000000000000000000000000000000000000000000000021324313a3d3d3a31231301000000000000000000000000000000000000000000000000000000000000000000000a1a2731364541372a1a08000000000000000003162939464b5c4c483b2b1805000000000000000000000000000000000000000000000000000000000a1a36475459514c402f1d09000c21364c61768986858687878787878787878787878787878787878787878787878787877e69543f2914000000000013283d53687d898687878787878787878787878787878787878787878787877e68533e281300192f44596e8379634e38230e00000000000000000c21364a5b6c818e8f8575614c36210c0000000000000000000000182d42586d8279644f39240f000000000000000000000c21374c617685705b382715020000000000000000000013293e53687e7e69533e2914000000000000000000000000000000000000000b20354b607586715443301c0700000000000000000000001a2f445a6f8478624d38230d000000000000000000000000000000000000000000000e23384d6378836e59432e1900030a161e21272c2f302e2b25201c130800000000000000000000000a1e334657697e7f6a5c4a3e3025201c212b3a4c5e718577614c37210c000000000008182a3a4a5c687e816c5f4d3d2c1b0b000000000000000000000000000000000000000000000000000000000000000000000000000b1e31424e53524e41311e0b00000000000000000000000000000000000000000000000000000000000000000002152738454b5a554837251200000000000000000a1e324657617162594834200d0000000000000000000000000000000000000000000000000000000215283854656f665e4c38240f000a1e334657647a857771717272727272727272727272727272727272727272727272727269614f3b2712000000000010263b50657b8372727272727272727272727272727272727272727272727268604e3a261100172c41566c817b65503b26100000000000000000071a2d3d52636c797a74615746331e0a0000000000000000000000152a40556a7f7c67513c2712000000000000000000000a1f3347587287725645311d090000000000000000000011263b51667b806b56412b1601000000000000000000000000000000000000081c304354718675604a35200b0000000000000000000002172c42576c817a65503b2510000000000000000000000000000000000000000000000b20364b607585705b39281603000003090b11171a1a1816100b0700000000000000000000000000031729394b6073847a645c4a43363530353b4859667b826d5847331f0a0000000000000c1c2d3e4e606d827d675b493929170300000000000000000000000000000000000000000000000000000000000000000000000011263a4e6068685f4e3a2510000000000000000000000000000000000000000000000000000000000000000000091d314556606f6655412d0900000000000000000c21364b61768677624c3b2b18050000000000000000000000000000000000000000000000000000091d3245566f847c66513c261100031729394a5c647a8477625a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c544f43321f0c00000000000e23384e637885705c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c534e42311e0b0014293f54697e7d68533e28130000000000000000000f1f3545525c646560564639291703000000000000000000000013283d52687d7e69543f2914000000000000000000000417293a5c718675604b36200b000000000000000000000e24394e6379836e58432e1900000000000000000000000000000000000000011426365a6f8577624c37220d0000000000000000000000152a3f546a7f7d68523d281300000000000000000000000000000000000000000000091d3245567186715745321e09000000000000010405030100000000000000000000000000000000000b1c3043546176847a6860544d4b43494e5962778577614c3a2a170400000000000000102031424b60758579635746331e0a00000000000000000000000000000000000000000000000000000000000000000000000013283d53687e7d68523d28130000000000000000000000000000000000000000000000000000000000000000000b20364b6074856f5a37261401000000000000000a1e324657697f816c594834200d00000000000000000000000000000000000000000000000000000b20364b60758a76614c36210c00000b1b2d3e4a5c64798478625a493c4747474747474747474747474747474747474747473f3b3224140300000000000b20364b6075887356454747474747474747474747474747474747474747473e3a312413020011273c51667c806b55402b16000000000000000000011727353e4a4e504b4538291b0b00000000000000000000000010253b50657a816c56412c1701000000000000000000001a2f445a6f8478634d38230e000000000000000000000c21364b617685705b3727150200000000000000000000000000000000000000182d42586d8279644f3a240f000000000000000000000012273c52677c7f6a55402a1500000000000000000000000000000000000000000000021528385b708576604b36210b000000000000000000000000000000000000000000000000000000000114263647586176837e73696260545b636a78857b655947341c0c000000000000000002141e32455663788575614b38281502000000000000000000000000000000000000000000000000000000000000000000000010263b50657b7f6a55402a15000000000000000000000000000000000000000000000000000000000000000000091d3145567084705544311d0800000000000000031629394b60758777624d3b2b19050000000000000000000000000000000000000000000000000010253b50657a85705846331f0a00000010202d3e4a5b63798478635a493d2d3232323232323232323232323232323232323229271f1406000000000000091d324556738875604b36323232323232323232323232323232323232323228261e130600000f24394f6479836d58432e18000000000000000000000917202d36393a3631271a0b000000000000000000000000000e23384d6378836e59442e190000000000000000000002172d42576c827a65503b2510000000000000000000000a1e3346577186715544311d0800000000000000000000000000000000000000152a40556a7f7c67523c271200000000000000000000000f253a4f647a826d58422d180000000000000000000000000000000000000000000000192e43586e8378634e38230e00000000000000000000000000000000000000000000000000000000000818293a475861727d847e78756e6e7880857a655d4b3a2a180000000000000000000003162838495a667c836e5645321d0900000000000000000000000000000000000000000000000000000000000000000000000e23384e6378826d58422d18000000000000000000000000000000000000000000000000000000000000000000021527385a708575604b35200b00000000000000000b1e324557697e816c594834200d00000000000000000000000000000000000000000000000003172939556b80806b553a2917040000000210202d3d4a5b63788578635b4a3d2d1f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d14120c0300000000000000021528385b708578634d38231d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d13110b020000000c22374c617785705b372715020000000000000000000002101b222425201d150a00000000000000000000000000000b20364b607585715b3928160300000000000000000000152a3f556a7f7d68523d281300000000000000000000031729395c718675604b36200b0000000000000000000000000000000000000013283d52687d7f69543f2a1400000000000000000000000d22374d6277856f5a3626140100000000000000000000000000000000000000000001162b41566b807b66503b26110000000000000000000000000000000000000000000000000000000000000c1c293a46546068747b81838384817b73645c4b3f2e1c0c00000000000000000000000a1a2c3c4c5e667874604b36200b00000000000000000000000000000000000000000000000000000000000000000000000b20364b6075846f5a36261401000000000000000000000000000000000000000000000000000000000000000000182e43586d8377624d38220d0000000000000000031628394b60758777624d3c2b190500000000000000000000000000000000000000000000000a1e33465770857a65503b2510000000000002101f2d3d495a63788479635b4a3d2d2010020707070707070707070707070707000000000000000000000000192e43586e837b65503b2610070707070707070707070707070707070707000000000000000a1f3347587286725544311d08000000000000000000000000070d0f100b0902000000000000000000000000000000091d3145567186715745321e090000000000000000000012283d52677d7f6a55402a1500000000000000000000001a2f44596f8478624d38230d0000000000000000000000000000000000000010253a50657a816c57422c1702000000000000000000000b20354a607586715443301c0c0c0c0c0c0c0c0a03000000000000000000000000000014293e53697e7d68533e2813000000000000000000000000000000000000000000000000000000000000000c1c2936434a5560656c6e6e6e6c6660544a3e2e2111000000000000000000000000000e1e2f404c5a62605645321d090000000000000000000000000000000000000000000000000000000000000000000000091d3245567085705443301c08000000000000000000000000000000000000000000000000000000000000000001162b40566b807a654f3a25100000000000000000000a1e324556697e816c5a4834200e00000000000000000000000000000000000000000000000c21364b61768975604b36210b000000000000010f1f2c3c495a62788479645c4a3e2e20100200000000000000000000000000000000000000000000000001162b41566b807d68533d28130000000000000000000000000000000000000000000000000004182a3a5c718675604b36200b00000000000000000000000000000000000000000000000000000000000000000000021527385b708576604b36210b0000000000000000000010253a4f657a826d57422d180200000000000000000002172c42576c817a65503a2510000000000000000000000000000000000000000d23384d6278846f5a442f1a000000000000000000050b0d1c304354718675604b3521212121212121211e160b0000000000000000000000000011263b51667b806b55402b1600000000000000000000000000000000000000000000000000000000000000000c18253037444b505659595957504b43362d201103000000000000000000000000000012222f3c494d4b45382815020000000000000000000000000000000000000000000000000000000000000000000000021528385a708575604b35200b0000000000000000000000000000030a0c100e080000000000000000000000000013293e53687e7d67523d2812000000000000000000031628384b60758778624d3c2b19050000000000000000000000000000000000000000000011263b51667b846f5645321e0900000000000000010f1e2c3c495a6277847a645c4b3e2e21110300000000000000000000000000000000000000000000000013293e53687e806b55402b1600000000000000000000000000000000000000000000000000001a2f445a6f8478624d38230d0000000000000000000000000000000000000000000000000000000000000000000000192e43586e8378634e38230e000000000000000000000d22384d6277846f5a452f1a0000000000000000000000152a3f546a7f7d67523d2812000000000000000000000000000000000000000b20354b607586715c3a2a1804000000000000000e1920222b25365a6f8477624d37363636363636363632291b0c0000000000000000000000000e24394e6379836d58432e1800000000000000000000000000000000000000000000000000000000000000000008131c2631353b41434444423b35302618100200000000000000000000000000000004121e2c35383632281a0a00000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8377624d37220d000000000000000000000000000b171e2125231c1103000000000000000000000011263b50667b7f6a553f2a15000000000000000000000a1d324556697e816c5a4835200e00000000000000000000000000000000000000000004172a3a566b817f6a54382816020000000000000000000e1e2b3c48596277847a645c4b3f2e211103000000000000000000000000000000000000000000000011263b51667b826d58432d180000000000000000000000000000000000000000000000000002172c42576c817a65503b25100000000000000000000000000000000000000000000000000000000000000000000001162b41566b807b66503b2611000000000000000000000b20354b607586715c3a2a18040000000000000000000012273d52677c7f6a553f2a1500000000000000000000000000000000000000081d3144557186715947341f0a0000000000000e1e2b3538414137576d827a644f4b4b4b4b4b4b4b4b4b46392a1c0c00000000000000000000000c21364c617685705b372715020000000000000000000000000000000000000000000000000000000000000000000009141d20252c2e2e2f2c26201c1408000000000000000000000000000000000000000e192023201d150a0000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b807a654f3a25100000000000000000000000000b1b2933363b372e211103000000000000000000000e23394e6378826d57422d1800000000000000000000021528384b60758778624d3c2b190600000000000000000000000000000000000000000a1f334758718679644f3a240f00000000000000000000000e1e2b3b48596276847a655d4b3f2f211204000000000000000000000000000000000000000000000e23394e637885705b3727150100000000000000000000000000000000000000000000000000152a3f546a7f7d68523d2813000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7d68533e281300000000000000000000081d3144557287725947341f0a0000000000000000000010253a4f657a826c57422d1702000000000000000000000000000000000000011527375b708577614c37220c000000000005192b3c484d565757556a7f7c676161616161616161616157473a2a1704000000000000000000000a1e3346577186715544311d08000000000000000000000000000000000000000000000000000000000000000000000001080b101719191917110b0801000000000000000000000000000000000000000000060c0d0b090200000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e7c67523d2712000000000000000000000003172939464b504b3f2e2111000000000000000000000b21364b6076846f5a36251300000000000000000000000a1d314556687e826c5a4835200e00000000000000000000000000000000000000000c21374c61778975604b35200b0000000000000000000000000e1d2b3b47586176847b655d4c3f2f2212040000000000000000000000000000000000000000000c21364b617687725544311d080000000000000000000000000000000000000000000000000012273c52677c806a55402b15000000000000000000000000000000000000000000000000000000000000000000000011263b51667b806b55402b1600000000000000000000011527375b708577614c37220c000000000000000000000d22384d6277846f5a442f1a0000000000000000000000000000000000000000182d43586d8279644f39240f00000000000b2035485a626b6c6c6d737e7f7576767676767676767676615847331f0a00000000000000000000031729395c718675604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b7f6a543f2a1500000000000000000000000a1e33465761655d4b3f2e1b0a000000000000000000091e3245577085705443301c0700000000000000000000021527384b60748778624d3c2c19060000000000000000000000000000000000000012273c51677c836e5544311d08000000000000000000000000000d1d2a3a47586176847b655d4c402f2212040000000000000000000000000000000000000000091e324657738875604b35200b000000000000000000000000000000000000000000000000000f253a4f647a826d58422d1800000000000000000000000000000000000000000000000000000000000000000000000e24394e6379826d58432d180000000000000000000000192e43586e8379644f39240f000000000000000000000b20354b607586715c3a2a170400000000000000000000000000000000000000162b40556b807c67513c271200000000000d22384d627780818282828487838383838383838383838376614c37210c0000000000000000000000192f44596e8378624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a101214120c0300000000000000040a0c15160e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e6378826c57422d1702000000000000000000011527374b61757a655d4b392816030000000000000000031628395b708575604a35200b00000000000000000000000a1d314455687d826d5a4935200e00000000000000000000000000000000000005182b3b576c817e69533726140100000000000000000000000000000d1c2a3a47586175837c665e4c403022130500000000000000000000000000000000000000031628395b718678624d38230d000000000000000000000000000000000000000000000000000d22374c627785705a36261401000000000000000000000000000000000000000000000000000000000000000000000c21364c617685705a3626140100000000000000000001162b40566b807c66513c271100000000000000000000081d3144557186715847331f0a0000000000000000000000000000000000000013283d53687d7e69543f291400000000000b2035485a626b6c6c6d6d78836e6d6d6d6d6d6d6d6d6d6d615847331f0a000000000000000000000014293e53697e79634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25282a2720150700000000000c171f212a2b24211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b6176846f5a442f1a00000000000000000000081d3144556a7f867b655745321e10000000000000000000192e43596e8377624c37220d0000000000000000000000021527374b60748778624d3c2c190606060606060606060606060606060606060b20344859728778634e39230e000000000000000000000000000000000c1c293a46576175837c665e4d403023130500000000000000000000000000000000000000192e44596e837a65503a2510000000000000000000000000000000000000000000000000000b20354a607586715443301c08000000000000000000000000000000000000000000000000000000000000000000000a1f3346587186715443301c080000000000000000000013293e53687e7e69543e291400000000000000000000011426375b708576614c37210c0000000000000000000000000000000000000010263b50657b816c57412c17020000000005192b3c484d56575758607585715b5858585858585858584c473a2a1704000000000000000000000012263b4f6069635b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000132330393d3f3c322515030000000c1c2a33373f4139362d1f0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3246577085705b3b2a18040000000000000000000b20354b607585768475604b3e2e1a0a0000000000000001162c41566b817a644f3a250f000000000000000000000000091d314455687d826d5a4935201b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b22374d627788735b4a36210c00000000000000000000000000000000000c1b293946576174837c675f4d4131231306000000000000000000000000000000000001162c41566b817d68523d281300000000000000000000000000000000000000000000000000071c304354718675604b35200b000000000000000000000000000000000000000000000000000000000000000000000417293a5b718675604b35200c0000000000000000000011263b51667b816c56412c170000000000000000000000182e43586d8379644e39240f000000000000000000000000000000000000000e23384d6378846f59442f1a0000000000000e1e2b353841414244557186715847434343434343434337332a1c0c0000000000000000000000000c1f32424f534e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c30414d52544f4332200c00000a1a2a3a474c55564e4a3d2d200f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395b7085705947341f0b0000000000000000071a2d3d51677c806b7b816b5c4b382715020000000000000014293e53697e7c67523c2712000000000000000000000000011527374b60748678634d3c2c30303030303030303030303030303030303030303d52677d836d583d2d1a070000000000000000000000000000000000000b1b293946566074837d675f4d4131241406000000000000000000000000000000000014293e54697e7f6a55402a1500000000000000000000000000000000000000000000000000001325365a6f8477624d38220d00000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8478634e3a2a17040000000000000000000e24394e6379836e593a29170400000000000000000001162b40566b807b66513c2611000000000000000000000000000000000000000b20364b607586715c3a2a17040000000000000e1920222b2c27375a708577614c372e2e2e2e2e2e2e211f170c00000000000000000000000000021424323b3e39362d1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4d5f6769614f3c271200021628384758616a6b635b4a3e2d1a0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8377614c37220c00000000000000000c21364a5b6f8477626d827a645645311d0f0000000000000011263c51667b7f6a543f2a1500000000000000000000000000091d314455677d826d5b494545454545454545454545454545454545454545453c586d827d68533d281300000000000000000000000000000000000000000b1b283845566073827d675f4e42312414060000000000000000000000000000000011263c51667b826d58422d180000000000000000000000000000000000000000000000000000182d42576d827a654f3a25100000000000000000000000000000000000000000000000000000000000000000000002172c41576c81816c5847331f0b0000000000000000000c21364c617685715847331f0a0000000000000000000013293e53687e7e69533e291400000000000000000000000000000000000000091d3145567287725847331f0a00000000000000050b0d16182d42586d8279644f3a241818181818180c0a0400000000000000000000000000000006141f262923211a0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344759677d7f69543f2a1400091e32455661767f8079645c4a36210d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8179644f3a240f000000000000000417293a4e6379836e5961768474604b3d2d19090000000000000e24394e6379816c57422c1702000000000000000000000000011426374b60738678635b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b728878624d38220d0000000000000000000000000000000000000000000b1a283845556073827d68604e42312414060000000000000000000000000000000f24394e6479856f5a3626140100000000000000000000000000000000000000000000000000152a3f556a7f7d67523d28120000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f8777614c3a29170400000000000000000a1f334658738876614c3828150200000000000000000011263b50667b806b56412b1601000000000000000000000000000000000000021527385b708576614c37210c0000000000000000000001152a3f556a7f7c67523d2712000303030300000000000000000000000000000000000000020c12140e0c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2f404c61778675604b36210b000b21364b60758694968b7a644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e7c67513c2712000000000000000a1f3346586c827a655058677c806a5b4a3726140100000000000c21364c6176846f59442f1a0000000000000000000000000000091c304354677c82717070707070707070707070707070707070707070707070707987725a4835200b000000000000000000000000000000000000000000000a1a283744556073827e68604e423224140600000000000000000000000000000c21364c617687725443301c080000000000000000000000000000000000000000000000000012283d52677d7f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000012273c52677c817f6a5846331f0e00000000000000000417293a5c71867f695645321d0b0000000000000000000e23394e6378836e58432e190300000000000000000000000000000000000000182e43586d8379644e39240f000000000000000000000011263c51667b806b563726140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394c5e6d827e695745321e090010253a50657a8fa4a996816b56412c160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b7f69543f2a14000000000000001325364c617685705d4b4d5f6e8379635544311d0e00000000000a1e3346577085705b3a2a180400000000000000000000000000011426364b6073868584858585858585858585858585858585858585858585858587826c573c2b190500000000000000000000000000000000000000000000000a19273744556072817e69604f4232251507000000000000000000000000000a1f334658738875604b35200b0000000000000000000000000000000000000000000000000010253a4f657a826c57422d1700000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a808276614c3c2b190500000000000000001a2f445a6f848375604b3929170300000000000000000c21374c617685705b45301b0600000000000000000000000000000000000001162b40566b807c66513c271100000000000000000000000d22384d6277846f5544311d08000000000000000000000000000000000000040a0c15160e0c0700000000000000000000060b0d16160d0b0500000000000000000000070d0f16150c0a040000000000000000091e324657667b8774604b39281603000e24394e63798e9fa3947f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e6479816c57412c17020000000000071c304354697e7e68533f404c62778473604b3c2c180800000000031729395b7085705847331f0a0000000000000000000000000000081c304354677c82707070707070707070707070707070707070707070707070837c67523c2712000000000000000000000000000000000000000000000000000919273744546072817e69604f43322515060000000000000000000000000417293a5c718677624d37220d000000000000000000000000000000000000000000000000000d22384d6277846f5a36251300000000000000000000000000000000000000000000000000000000000000000000000d22374c6277827a806b5a483520120000000000000003182d42586d827d7e695746331e1000000000000000000a1f3347587186715c47311c000000000000000000000000000000000000000013283e53687d7e69543e291400000000000000000000000b2035485a718675604b35200d00000000000000000000000000000000000c171f212a2b24211a0f01000000000000000e1920232b2b2220190d00000000000000010f1a21242b2a211f170c00000000000009192d3e4b6175877d685645311b0a00000c21364a5b6c818e8f8575614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c6176846f59442f1a0000000000000b20354a60748676614b36344759687d7f695b493625130000000000192f44596e8377614c37220c0000000000000000000000000000011426364a60738678635b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b738877614c37220c00000000000000000000000000000000000000000000000000000919263643546072817e69614f4332241405000000000000000000000000192f44596e847a654f3a2510000000000000000000000000000000000000000000000000000b20354b607586715443301c07000000000000000000000000000000000001000000000000000000000000000000000b20354a6075846f8278624d40301d0c00000000000000162b40556b807a8376614c3e2e1b0b000000000000000417293a5c7186715c362513000000000000000000000000000000000000000011263b50667b816c56412c17010000000000000000000005192b3c576c817a65503b2a18050000000000000000000000000000000c1c2a33373f4139362d1f0f0100000000000e1e2b3538404038342b1d0d0000000000010f202d3639413f3733291c0c00000000011527374a5c6b818773604b382715000000071a2d3d52636c797a74615746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346587085705b3a2917040000000006192c3c50667b816c5746322a3b4e5f6e8378635443301c0d00000001172c41566c8179644f39240f000000000000000000000000000000081c304354667c826d5b4945454545454545454545454545454545454e637886715947341f0a0000000000000000000000000000000000000000000000000000000918263643546072817f69614f42322313030000000000000000000002172c41576c817c67523d271200000000000000000000000000000000000000000000000000081d314455728675604a35200b00000000000000000000000000040a0c15160e0c0700000000000000000000000000071c3043546f856f78826d5e4d3b2a180800000000000014293f54697e7c7b806b5c4a39291808000000000000001c32475c7186715443301c07000000000000000000000000000000000000000c21364b617578634e38230e00000000000000000000000010253a50657a816c5948341f1201000000000100000000000000000a1a2a3a474c55564e4a3d2d200f000000000d1d2b3c484d55554d483c2b1d0d000000000f1f2d3e4a4e56554c473a291a0a000000081d314455647a8c7c675443301a0a000000000f1f3545525c646560564639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5b7085705847331f0a000000000c2035495a6f8478634d39281d31414d62788472604a3c2b190500000014293f54697e7c67513c2712000000000000000000000000000000001325364d5e708679634e3d2d30303030303030303030303030263653697e816b563a2a1804000000000000000000000000000000000000000000000000000000000818253643546072817f69604f41302111000000000000000000000014293f54697e7f6a553f2a1500000000000000000000000000000000000000000000000000011426375a708577624c37220d0000000000000000000000000c171f212a2b24211a0f010000000000000000000000001325365a6f84756a7f7c66594736261401000000000013283e53687d7c6c817a645746362513010000000000071c31475c718675604a35200b000000000000000000000000000000000000000a1e32465761635b4935210c0000000000000000000000000e23374b5d708577624c402f1d140d0c0e12170c0a0400000000021628384758616a6b635b4a3e2d1a07000005182a3b485a626b6b625a483b2b18050000071a2d3d4a5c646b6a61584738281603000417293a4b60738686715f4d3626140000000000011727353e4a4e504b4538291b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e8376614c37210c000000031628394d6378846f5b49351b132035485a697e7e685a4834201300000011273c51667c7e69543f2914000000000000000000000000000000000818304051667b836e5b4a36211b1b1b1b1b1b1b1b1b1b1b1c3043546e837b66513b26110000000000000000000000000000000000000000000000000000000000000818253643546072827e695f4d3f2f1e0e0000000000000000000012273c51677c826c57422d170000000000000000000000000000000000000000000000000000182d42586d8279644f3a240f00000000000000000000000c1c2a33373f4139362d1f0f010000000000000000000000182d42586d827762738377615443301c14030000000013283d52687d7d67768575615443301d150900000000011426365c718575604b36200b0000000000000000000000000000000000000003162939464b4e493d2c1a06000000000000000000000000081c2e3f50657b816c5e4c3e3126222123272c211f170c000000091e32455661767f8079645c4a36210d00000b1f344759627880807862594834200b00000c21364a5b647a807f76615645321e09000a1f334758697f907b6550403018080000000000000917202d36393a3631271a0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c8179644e39240f000000091e3245576b817b66513c2c1905192b3c4a60728478624d41301d0c00000f24394f6479816c57412c1702000000000000000000000000000000001224384c5e708579634e3d2d1a0706060606060606060b20354b60758876614b36210c000000000000000000000000000000000000000000000000000000000000000818253643546073837d675d4b3c2b1a0a0000000000000000000f24394f6479846f5a3625130000000000000000000000000000000000000000000000000000152b40556a807c67523c2712000000000000000000000a1a2a3a474c55564e4a3d2d200f0000000000000000000000152b40556a80796462788272604b42321e160a00000014293e53697e7c67657b8272604a433127190e040000081c3043547286725544311d0800000000000000000000000000000000000000000b1b29323638352c1f0e00000000000000000000000000001123384c5e6d827b665c4b44373736383c413633291c0c00000b21364b60748694968b7a644e39240f00000d22374c62778995958977624c37220d00000e24394e63798b96948675604b36210b000c21374c617684806b5e4c382212000000000000000002101b222425201d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e7c66513c27110000000b21364b60768674604b35200e000e1c3043546379836e5f4d3b2a1804000c21374c6176846e59442f190000000000000000000000000000000000091d2f4051667b836e5b4a36210f00000000000000000f24394f647985705746331e0a00000000000000000000000000000000000000000000000000000000000000000818263644556175857b655a483828150200000000000000000c22374c617787725443301c070000000000000000000000000000000000000000000000000013283d53687d7f69543f2a14000000000000000000021628384758616a6b635b4a3e2d1a070000000000000000000013283d52687d7c675a667c806b604f4232281b120c0b152737556a7f7b655d687e806b614b44372b1f170e0b0b20354b607587715c372715020000000000000000000000000000000000000000000b161e2123211a0e000000000000000000000000000000091c2f404b6075847a6860554f4d4c4d52564c463a2917040010253a50657a8fa4a996816b56412c16010013283d53687d92a7a7937e68533e29130001162b40566b8095a9a4907b65503b2610000a1f33475861706b6251402f1c0400000000000000000000070d0f100b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c7e69543e29140000081c2e3f53687d7f695443301c080000132536495b6a7f7d675947341f12000a1f3347587085705b3a29170400000000000000000000000000000000001224384c5e708579634e3d2d1a070000000000000215273754697f806a553929170300000000000000000000000000000000000000000000000000000000000000000008182737465762778678625645321d0f00000000000000000a1f334758738875604a35200b0000000000000000000000000000000000000000000000000010253b50657a816c57422c17020000000000000000091e32455661767f8079645c4a36210d0000000000000000000010253b50657a7e69545e687e7e69604b453930252120213144556e8378634d606b807f6b6055483c3329232121293a4e6479846f59442f1a0000000000000000000000000000000000000000000000030a0c0e0c060000000000000000000000000000000000111e3245576176847d746a64626163676c615846331f0a000e24394e63798e9fa3947f6a553f2a15000011273c51667c91a1a1917c67523c27120000142a3f54697f94a49f8e79644f39240f000417293a474c5b5651443421110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479816c56412c1701000e23374b5d708576614c36261401000008182c3d4b60738477614c40301c0c04172a3a5b7085705846331f0a0000000000000000000000000000000000091c2f4050657b836e5c4a362110000000000000081d3144556f847a65503a25100000000000000000000000000000000000000000000000000000000000000000000000091929394859657b8574604b3d2c1a060000000000000004182a3a5c718677624c37220d000000000000000000000000000000000000000000000000000e23384d6378846f59442f1a0000000000000000000b21364b60758694968b7a644e39240f000000000000000000000e23384d6378816b564e60697e7e6c60574d403a3735373e4b607586715a4951626b7f8173625a4c463a3836363946586a7f7e69533e29140000000000000000000000000000000000000000000000000000000907000000000000000000000000000000000003162839465861737e857f7a7776787c8176614c36210c000c21364a5b6c818e8f8575614c36210c00000b20354b6073838f8f8373604b35200b00000c21364c617686908e816c5c4a36220d00000c1c29333745413d3426160300000000000000000000000000000000000000000000000000000000000000050b0d121517171715130f0b08010000000000000000000000000000000000000000000000000c22374c6177836e59442e190005182b3b4f657a826d5847331808000000000e1d3144556379826d5e4d3a2917041a2f44596f8476614c36210c0000000000000000000000000000000000001223384c5e708579644e3e2d1b0700000000000b20364b60758875604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000b1b2b3b4c5d6b80806b5b4935211000000000000000001a2f445a6f8479644f3a240f000000000000000000000000000000000000000000000000000b20364b607586715c3a2a1704000000000000000010253a50657a8fa4a996816b56412c16000000000000000000000b20364b6075836e58424f61697c8175665e554f4c4b4c4f5c687d806b563c4451616a7d84786b6158524d4b4b4e5761768777614c37220c0000000000000000000000000000000000000000000000010a10121e1c0e0c060000000000000000000000000000000a1b293a46556068757b808384827f7a645846331f0a00071a2d3d52636c797a74615746331e0a0000081d31445560737a7a72605544311d0800000a1e33465761747a796c63523e2d1b070000000c171f21302c292116080000000000000000000000000000000000000000000000000000000000070d0f192022272a2c2d2c2b2824201d140b08010000000000000000000000000000000000000000000a1f3347587084705b392917030b203448596e8379644e3a2a170000000000011426374a5b6a807c665846331f11172c42576c8179644e39240f000000000000000000000000000000000000091c2f4050657b836e5c4a362210000000000010253a4f657a846f5645311d09000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f3f4b60758779634e3f2e1b0800000000000002172c42576c817c67523c271200000000000000000000000000000000000000000000000000081d3144557287725847331f0a00000000000000000e24394e63798e9fa3947f6a553f2a1500000000000000000000091d3145566e836e5944424f5e6679827c6f6a65616061646b7a8776614c373443506068798480766d67636060636975847e695947341f0b0000000000000000000000000000000000000000000005121d242733312321190e0000000000000000000000000000000c1c2937444b5660656b6d6f6d6a645c4a3a29170400000f1f3545525c64656056463929170300000114263744546065646054443726140100000317293946566065645c52453420100000000000040a0c1b16140e040000000000000000000000000000000000000000000000000000000008101b22242b35383c3f414241403d39353126201c1408000000000000000000000000000000000000000004182a3a5b7085705746331e0a1527374d627785705c4a361c0c00000000000009192d3d4b60748476614c3f2f1b142a3f54697f7b66513c2611000000000000000000000000000000000000001123374b5d6f8579644e3e2d1b0700000003162838556a7f7f6954382715020000000000000000000000000000000000000000000000000000000000000000000000000000111e324556667b856f5d4b37220e00000000000000152a3f546a7f7f69543f2a1400000000000000000000000000000000000000000000000000021527375b708576614c37210c00000000000000000c21364a5b6c818e8f8575614c36210c0000000000000000000002152738596e836e594332404c5b636d7d837f7a76757679818679635847331f33424e5b636f7b84827c787676787e867e69604e3b2a180400000000000000000000000000000000000000000000122330393c484638352c1e0e0000000000000000000000000000000c19273138454b5056585958554f4a3e2d1c0c000000011727353e4a4e504b4538291b0b0000000009192636434b4f4f4a4336261909000000000b1b2938454b504e4a3d3427170200000000000000000000000000000000000000000000000000000000000000000000000000000003111c232d36393c484d515556575755524f4b44373530261c1308000000000000000000000000000000000000001a2f44596f8476614b36210c1d3144556a807c67523e2d1b00000000000000000f1d314556647a826c5d4c392816273c52677c7e69543e291400000000000000000000000000000000000000081c2f3f50657a836e5c4a362210000000091e324556708579644f39240f000000000000000000000000000000000000000000000000000000000000000000000000000000021628384c5e70857a654f3c2b190600000000000012273c52677c816c57412c170200000000000000000000000000000000000000000000000000182e43586d8379644f39240f0000000000000000071a2d3d52636c797a74615746331e0a00000000000000000000000f24394e6479644e3924303d4a4e5f67747a7f838484827d75635b493a2a1724313d494e5e666f787e828484827e7769604e42311d0c000000000000000000000000000000000000000000000a1a30414d515e5c4d493c2c190600000000000000000000000000000009151d2731363b404344423f39362d201000000000000917202d36393a3631271a0b00000000000009182630353a3a35302518090000000000000b1a2832363b39362d1f17090000000000000000000000000000000000000000000000000000000000000000000000000000000b171e2e373e4a4f565a62676a6c6c6c6a68646055514b43363025180e000000000000000000000000000000000002172c42576c8179634e39240e20364b60758675604b3620100000000000000000021527384b5c6b817b655746321e253a4f647a816b56412c1601000000000000000000000000000000000000001123374b5d6f8479644f3e2e1b0700000b21364b60768875604b35200b0000000000000000000000000000000000000001080b0801000000000000000000000000000000000a1a2f4051667b836e5a4935200b0000000000000f253a4f647a846f59442f1a0000000000000000000000000000000000000000000000000001162b40566b807c66513c27110000000000000000000f1f3545525c64656056463929170300000000000000000000000d21364a5c645c4a36211f2d36414d5460646a6e6f6f6d676056493d2c1c0c131f2c35404c515a62686c6f6f6d6961584e4231241400000000000000000000000000000000000000000000021527384d5f677371635b4935210c00000000000000000000000000000000010a151d20262b2e2f2d2a24221b100200000000000002101b222425201d150a000000000000000008141c202525201c130800000000000000000a151d202524211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000b1b29333f4b505c646b71777c7f818281807d79756e6660544a43362c1e120400000000000000000000000000000000152a3f546a7f7b66513b261b2d3e52677c806a5645311d090000000000000000000a1a2e3e4b60758475614b3f2e22374c6277836e59432e190000000000000000000000000000000000000000081c2e3f4f647a846f5c4a362210000010263b50657b836e5443301c0800000000000000000000000000000000000009141d201d1409000000000000000000000000000000001220354a60738678624d38230d0000000000000d22374c627786715c3a2a17040000000000000000000000000000000000000000000000000013283e53687d7e69543f2914000000000000000000011727353e4a4e504b4538291b0b000000000000000000000000071a2d3e4a4e4a3e2d1a0f1a213036434a4f55595a5a58524b45382c1f0f00000e1a212f383c484d5357595a57544c473a3124140600000000000000000000000000000000000000000000091d314556677d888679634d38230e00000000000000000000000000000000000002090b1016181a18150f0d0700000000000000000000070d0f100b09020000000000000000000001080b100f0b07000000000000000000000002090b100f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464c5d656f79818786827e7d7c7c7d808487837b74686054493c3023140600000000000000000000000000000012273c52677c7e69533e2922364a5c708577624d3827150200000000000000000000101e324557657b816c5d4b3828354a607585705b3928160300000000000000000000000000000000000000001122374b5d6f847a644f3e2e1b0803172939566b807e685336261401000000000000000000000000000000000009192631353126190f010000000000000000000000000000071c3043546a7f7f69543f2a140000000000000b20354a607588735847331f0a0000000000000000000000000000000000000000000000000011263b50667b816c56412c17010000000000000000000917202d36393a3631271a0b00000000000000000000000000000f202d3639362d200f000713182530353a40434545423d3632281a0f0100000006121d242b35383e424444423e37332a1c140600000000000000000000000000000000000000000000000b20364b6075899d99846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e334657616d7a84877f77716d69676667686b6e757a82867d72635b4d413124140500000000000000000000000000000f253a4f647a806b56412b2a3a4e6479836e5948341a0a0000000000000000000000031628394b5d6c817a645645323043547085705746321e090000000000000000000000000000000000000000081b2e3f4f647a846f5c4b3722100a1e334657708578634e38230e000000000000000000000000000000000001142637444b44372c1f0f0000000000000000000000000000001325364f6479846f5a3a2a18040000000000071c304354728776614c37210c000000000000000000000000000000000000000000000000000c21364b617578634e38230e000000000000000000000002101b222425201d150a000000000000000000000000000000010f1a2124211a0f0100000008131c20252a2e302f2d28211e160a00000000000000090e192023292d2f2f2d29211f170c000000000000000000000000000000000000000000000000000b21364b60768b9f9a85705b45301b000000000000000000000000000000000000000000000000000000000000000000000000060c0e111314110d0b05000000000000000000000100000000000000000000000000000000000000000000000003090b111416171614110d0b05000000000000000000000000000000000000000005010000000000000c21364c617582887e746a625a575452515153555460656d77818579675f4e4231231302000000000000000000000000000d22374c6277836e58432e3347586d827a65503b2b18000000000000000000000000000a1b2f3f4c61768474604b3e2d365a6f8476614b36210c0000000000000000000000000000000000000000001022374b5c6f847a644f3f2e1b0c21364c617687725b4935210c0000000000000000000000000000000000081d3144556055493d2c1a0600000000000000000000000000000b20364b607588735847331f0a0000000000001325365a6f8479644f39240f000000000000000000000000000000000000000000000000000a1e32465761635b4935210c00000000000000000000000000070d0f100b0902000000000000000000000000000000000000070d0f0d0700000000000000070b0f15191a1a18120b090200000000000000000000060b0d13171a1a18140c0a040000000000000000000000000000000000000000000000000000091e3245576b808d8a7b65503b2610000000000000000000000000000000000000000000000000000000000000000000010a0e192023262829272220190e090200000000040e14160d0b0500000000000000000000000000000000000000070a161e21262a2c2c2b29272220180f0d07000000000000000000000000000002090b1a16140e04000000142a3f54697f82766860554d483c3e3d3c3c3d36434b5059616c7a867d68604e41312010000000000000000000000000000b20354a607585705a3828364c617685705d4b371d0d0000000000000000000000000000111e334657667c806b5c4a3742576d8278634e39230e000000000000000000000000000000000000000000071b2e3e4f6479846f5d4b372211263b51667b826d583d2c1a0600000000000000000000000000000000000b20354b6075635b4935210c0000000000000000000000000000081d314455728777614c37220c000000000000182d42576d827c66513c27110000000000000000000000000000000000000000000000000003162939464b4e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283950626b7876655d4c38230e000000000000000000000000000000000000000000000000000000000000000003131d252c35383b3e3e3c38352b201d150a0000081621292b2220190e0000000000000000000000000000000003101b222832363b3f4142403f3c37342b24221b100700000000000000000000000a151d202f2b29211608000012273c4f61696d61584b4437352b29282727282630353b474c5c6476847e685f4d3e2e1b0b000000000000000000000000071c3043547085705645324354697f7e68533f2e1c000000000000000000000000000000031729394c5e6d82796455443f556a7f7b66513b2611000000000000000000000000000000000000000000001022364a5c6e837a644f3f2e1c2a3a566c817d68523d2813000000000000000000000000000000000004192e43596e8279634e3823110000000000000000000000000000021527375a6f8579634e39240e000000000000152a3f556a7f7e69543e291400000000000000000000000000000000000000000000000000000b1b29323638352c1f0e0000000000000000000000000000000000000000000000000000000000000000000912191b19191919191919191919191919191919191919191919191919191919191919191919191b14120c0200000000000000000000000000000000000000000000000000000000000000000000000a1b3344505a6261584c3f2f1c08000000000000000000000000000000000000000000000000000000000000000a161e30393c494d515353514d483c3631271a11011626343d4138352b1e0e00000000000000000000000000000b161e2d3638454b505456575554514d483b39362d201c130800000000000000000a1a28323645413d34261604000c2032434f54584c473a312720191412111213141c202a343e4a586174847d675c4a392816030000000000000000000000001325365a6f8476604b364b60748676614b362111000000000000000000000000000000000b1b2f404c61778474604b3d52677d7e68533e291300000000000000000000000000000000000000000000071b2d3e4e6479846f5d4b3723334758718677624d37220d00000000000000000000000000000000000013283d52687d806b56402f1c0900000000000000000000000000001a2f44596f8479644f3a240f00000000000012283d52677d816c56412c170100000000000000000000000000000000000000000000000000000b161e2123211a0e0000000000000000000000000000000000000000000000000000000000000000000c1a262d302f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f3029261f140600000000000000000000000000000000000000000000000000000000000000000000001526333c484d4c473a2f2111000000000000000000000000000000000000000000000000000000000000000a1b2832414d525a6366686966625a534b45382e1d1421344451564d483c2b19050000000000000000000000000e1b29323e4a4f566066696b6c6b69666259574f4a3e353025181103000000000002152838454b5a56514434210e00031525323c3f4237332a1d150905000000000001080c181f2e3a46566176867a645746321e0d000000000000000000000000182d42576d8278634e3d51667b816c5746321e090000000000000000000000000000000000121f334758677c7f6a5b494f657a806b56402b1601000000000000000000000000000000000000000000001021364a5c6e837a654f3f2e374c61778672594834200b0000000000000000000000000000000000000c21374c617687725e4c38231200000000000000000000000000011426365a708579644f39240f00000000000010253a4f657a836e59442e1900000000000000000000000000000000000000000000000000000000030a0c0e0c06000000000000000000000000000000000000000000000000000000000000000000091a2a3842454444444444444444444444444444444444444444444444444444444444444444444444463e3b322414020000000000000000000000000000000000000000000000000000000000000000000007151e2b35383733291c110300000000000000000000000000000000000000000000000000000000000009192839454b5f6770787b7d7e7c77706860564b3f3126293d51626b625a4835200b00000000000000000000000e1e2b39464b5c646e767b7f8181807e7c77706c645c514a43362e1e160b00000004121d324556606f6b62513d29140000071520272a2d211f170c010000000000000000000004101c2938465864798775614b3b2b18050000000000000000000000152a3f556a7f7b6550495b6f8478634d39281603000000000000000000000000000000000004182a3a4d5f6e837963544d6277836e58432e190000000000000000000000000000000000000000000000071a2d3e4e6379846f5d4b373c51677c816c573b2b19050000000000000000000000000000000000000a1f3347586d827b655041301d0d000000000000000000000000081c304354718778634d38230e0000000000000d22384d627786715c3929170300000000000000000000000000000000000000000000000000000000000000090400000000000000000000000000000000000000000000000000000000000000000012263848555b59595959595959595959595959595959595959595959595959595959595959595959595b534f42321f0c0000000000000000000000000000000000000000000000000000000000000000000000000e192022211f170c00000000000000000000000000000000000000000000000000000000000000011527374557606e7c85837e7c7c7e83857e74655d4b44372941566b8078624d38220d000000000000000000000c1c2b3c4857616d798387817c7a797a7b7e838581796f6760544b3f32281b0e0001122232434b607484806b56412b16000000030c1214180c0a0400000000000000000000000000000c1a293a4a5c6b80806b594834200a000000000000000000000012283d52677d7d68534e6378846f5b49351b0b000000000000000000000000000000000000000c1c30414d62778473604b607585705b3828150200000000000000000000000000000000000000000000000f21364a5b6e837a65503f3b576c817c67513c2712000000000000000000000000000000000000000417293a4e637985705f4d3b2b190900000000000000000000000b20354b60758975604b36200b0000000000000b20354b607588735746331e0a000000000000000000000000000000000000000000000000000000040d13161e190b0903000000000000000000000000000000000000000000000000000000000000192d425566706e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e7069604f3b261200000000000000000000000000000000000000000000000000000000000000000000000000050b0d0c0a040000000000000000000000000000000000000000000000000000000000000000081d31445560758381766e696767696e767e857b6c6055463940556a7f7a65503a251000000000000000000004172a3a485a627582857c746c6765636566696e707981857c73655d4b46392c1e110f1f2f404f616d828372604b35200b00000000000000030000000000000000000000000000000000000b1b2d3d4b60758777624d382715020000000000000000000010253a4f657a806b55576c817b66513c2c190000000000000000000000000000000000000000001320344859687d7e695a547085705645321d090000000000000000000000000000000000000000000000071a2d3d4e6379856f5d4b4859718676614c37210c00000000000000000000000000000000000000000c2135495b6e837c6759483727190b00000000000000000004172a3a4f647a86715645311d09000000000000081c304354728776614b36210c0000000000000000000000000000000000000000000000000000071521282b342f211e160a00000000000000000000000000000000000000000000000000000000001b30455b70858384848484848484848484848484848484848484848484848484848484848484848483857e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4b6073837d6c615854525154566068768181736157463953687d7d67523d28120000000000000000000a1f3347586278868074666054524f4e4f5154585c646c767f857a6c6157493c2f211c2d3d4c5e6a7f8675615443301c080000000000000000000000000000000000000000000000000000000f1e3245576a7f816b5645311d09000000000000000000000d22384d6277836d5861768674604b35200e00000000000000000000000000000000000000000005182b3b4e606e8378625a6f8475604b36200b0000000000000000000000000000000000000000000000000f2136495b6d837b65504d627786715847331f0a0000000000000000000000000000000000000000061a2c3d4c6277867762554437291b100600000000000006131f3347586b807f6a5538271502000000000000011426365a708579634e39240e00000000000000000000000000000000000000000000000000021526333d4049443632281b0a00000000000000000000000000000000000000000000000000000000192e43596e826e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e7b7e69533e29140000000000000000000000000000000000000000060c0e0f0e0c0a030000000000000000000000000000000000000000000001080b0801000000000000000000000000000000000000000b203448596a807f6a5f4c463a3c3c38454b57616c7c837561574650657b7f6a55402a150000000000000000091d2f404c6176867d6a60554a43363a393a3c3e3e4a4f57616a77828175635a4b3f2f2a3a4a5b667c887862574636261401000000000000000000000000000000000000000000000000000000031628394c61768875604b36200b000000000000000000000b20354b607584705a687e7f695443301c08000000000000000000000000000000000000000000000d1d31424d6278836e606d8278634e38230e000000000000000000000000000000000000000000000000061a2c3d4e637885705d52677d806b563a2a17040000000000000000000000000000000000000000000f1f344759667c8473605546392d211a0f0d0b0a0c0e192031414c61768777624c37220d0000000000000000182d42586d827b66513b2611000000000000000000000000000000000000000000000000001020334450555e594b4539281603000000000000000000000000000000000000000000000000000000192e43596e836e595959595959595959595959595959595959595959595959595959595959595959657b7e69533e2914000000000000000000000000000000000000010f1a21232423211e170c0a0400000000000000000000000000000000000009151d201d15090000000000000000000000000000000000000d22374d62778574604b4133292727283239464b5f677b847561554e6378826d57422d1800000000000000000f24384c5e6f847f695f4b4437302525242526292d3639464b58616d7c8578655d4c403747586379887b655a483929180800000000000000000000000000000000000000000000000000000000000a1f3347586e847c66513c271100000000000000000000081c3043547085705d718676614c362614010000000000000000000000000000000000000000000000132035495a697e7d686a807b65503b2610000000000000000000000000000000000000000000000000000f2135495b6d827b65586d827b66503b26110000000000000000000000000000000000000000000005182a3b4c5e6a7f827361574a3e362c2522201f21242c35414e5f6c817f6a594834200b0000000000000000152b40556a807e69533e2914000000000000000000000000000000000000000000000000071b2d3e50626b736e605745321e09000000000000000000000000000000000000000000000000000000192e43596e836e594444444444444444444444444444444444444444444444444444444444444450657b7e69533e29140000000000000000000000000000000000000f1f2c35383939363329221f180c0000000000000000000000000000000009192731353127190e00000000000000000000000000000000061a2c3d566b807d675544311f171212161e2932414d5d657b8373604b6076846f5a36251300000000000000071b2d3e51667b8573604b4131271c13100e1011141b2229323a474c5f6779857b665e4c44556176877d675d4b3c2b1b0b0000000000000000000000000000000000000000000000000000000000000417293a53687d816c5737271501000000000000000000011426365a6f8475657a826d584733180800000000000000000000000000000000000000000000000006192c3c4b60738477687d7d68533d281300000000000000000000000000000000000000000000000000061a2c3d4d637885705e728776614b36210c00000000000000000000000000000000000000000000000d1d2f404f616a7f8375645c4e493d3a37353336393c494d5f687d8575604b3b2b1805000000000000000013283d52687d806b56412b160100000000000000000000000000000000000000000000000d22364a5c6b80898375604b36210b000000000000000000000000000000000000000000000000000000192e43596e836e59432f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f3b50657b7e69533e29140000000000000000000000000000000000061a2c3d494e4f4e4c463937332a1c12050000000000000000000000000001152737444b44372c1e0e0000000000000000000000000000000c2135495b718676614b372715040000030b161e303f4b5d677d816c5f567084705443301c070000000000000d22364a5c71867a645443301d1509000000000000070b161e2a33404d5b6376847c665e4b607484806b5f4d3f2e1e0e00000000000000000000000000000000000000000000000000000000000000000e23394e637886715544311d0800000000000000000000182d42586d82786e8379644e3a2a1700000000000000000000000000000000000000000000000000000e1c3043546379836e7a806b55402b1600000000000000000000000000000000000000000000000000000f2035495a6d827b667885705746321e090000000000000000000000000000000000000000000000001222324350616a7d857a6d635b554f4d4b464c4e535a636e7d8677625645321d0d00000000000000000010253b50657a836e59432e190400000000000000000000000000000000000000000000000f243a4f647a8f9e947f6a543f2a15000000000000000000000000000000000000000000000000000000192e43596e836e59432e191919191919191919191919191919191919191919191919191919263b50657b7e69533e291400000000000000000000000000000000000c2135495b6364636157554c473a30231406000000000000000000000000081d3144556055493c2c190900000000000000000000000000000e23384e6378846e574632190900000000000312212e3f4d5f6b807c6759708575604a35200b0000000000000f24394f647985705c4a36261401000000000000000000030c171f303c49586175847c66606c818372604a413021100000000000000000000000000000000000000000000000000000000000000000000b20354b60758a75604b35200b00000000000000000000152b40556a807b7885705c4a361c0c000000000000000000000000000000000000000000000000000001142636495b6a7f7c78826d58432d18000000000000000000000000000000000000000000000000000006192c3c4d627885707d7f6a55392816030000000000000000000000000000000000000000000000000415253343505f6778848279706a646260586163686f78828476625947382816000000000000000000000d23384d627886705b46311b06000000000000000000000000000000000000000000000010253b50657b90a195806b56402b16000000000000000000000000000000000000000000000000000000192e43596e836e59432e190404040404040404040404040404040404040404040404040410263b50657b7e69533e291400000000000000000000000000000000000e23384e63797978766f6a61584d413124140400000000000000000000000b20354b6075635a49372614010000000000000000000000000012273c51677c806a553929160000000000000002102130414b60738478626e8377624d37220d000000000000142a3f54697f7f6a553e2e180800000000000000000000000004121e2c3a47576175847a697e857561544330231302000000000000000000000000000000000000000000000000000000000000000000081c304354728778624d38230d0000000000000000000013283d52687d7d807c67523e2d1b0000000000000000000000000000000000000000000000000000000008182c3d4b6074847784705a3727150200000000000000000000000000000000000000000000000000000e2035495a6d827b837a654f3a2510000000000000000000000000000000000000000000000000000007152533414d5a626f7a84847f7a77757076797e83857c6e6158473b2a1a0a000000000000000000000b20364b607488735e48331e0900000000000000000000000000000000000000000000000b20354b6073838d8778624d37220d000000000000000000000000000000000000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e2914000000000000000000000000000000000011263c51667c7f8082848077675f4e423122120000000000000000000000182d43586d8278635544311d1000000000000000000000000000152b40556a807c67513c2712000000000000000003131d3144556379846f6c817a644f3a250f000000000000182d43586d827b66513b26110000000000000000000000000000000e1c293946576277857d88786257463625130500000000000000000000000000000000000000000000000000000000000000000000011426365b708579644f3a240f0000000000000000000010253b50657a808675604b36201000000000000000000000000000000000000000000000000000000000000f1d314455647a8285705544311d08000000000000000000000000000000000000000000000000000006192b3c4d6278858775604b36200b000000000000000000000000000000000000000000000000000000071523303c494d5d656e767b8183848584827e7870675f4c473a2a1d0d0000000000000000000000081d3144556479644e39240f000000000000000000000000000000000000000000000000081d3144556072787562594834200b000000000000000000000000000000000000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000f24384c5e666a6b6d6f79837c68604e402f1c0c000000000000000000000e23384d63788473604b3e2d1a0a000000000000000000000000172c42576c817a654f3a251000000000000000000001142637495b6a7f7c697e7c67523c27120000000000001a2f455a6f8479644e39240f000000000000000000000000000000000c1b29394859677c8f7a655a48392818080000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f847a65503b2510000000000000000000000d23384d627888806a5544311d080000000000000000000000000000000000000000000000000000000000011527374a5c6b808975604b36200b0000000000000000000000000000000000000000000000000000000e2035485a6c81836f5544311d080000000000000000000000000000000000000000000000000000000005131e2c353f4b4f5761666b6e6f706f6d68635b514d41332a1c0d000000000000000000000000021527374a5c645c4a36210d00000000000000000000000000000000000000000000000001142637445460636056483b2b1905000000000000000000000000000000000000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e29140000000000000000000000000000000000091d2f404c515555585c6472807e685e4c3a2917040000000000000000000c2135495b687e7f6a5c4a382715020000000000000000000000182e43586d8379644e39240f0000000000000000000009192c3d4b607483747c7f6a543f2a150000000000001b30455a708578634e38230e00000000000000000000000000000003111d31445561768783806b5c4a382815020000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f847b65503b2610000000000000000000000b20364b60748a77624d3727150200000000000000000000000000000000000000000000000000000000000009192d3e4b60748778624d38230d00000000000000000000000000000000000000000000000000000005192b3c4c617678624d372715020000000000000000000000000000000000000000000000000000000000000e19202e3739464c5156585a5b5a58534e493d39301f180c000000000000000000000000000009192d3d4a4e4a3d2d1a070000000000000000000000000000000000000000000000000009192636434a4d4b45382b1d0d00000000000000000000000000000000000000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000012222f383c3f403e4a54606b807c665847331f0a00000000000000000006192c3c4e606e847a645645311d0f0000000000000000000000192e43596e8378634e38230e00000000000000000000000f1d314455677c7e7a816c57422c170200000000001a2f445a6f8479644e39240f000000000000000000000000000000112132424b6074847f75847a645645321d0b0000000000000000000000000000000000000000000000000000000000000000000000031628385b708579644f39240f00000000000000000000081d31445562776259483419090000000000000000000000000000000000000000000000000000000000000000101e324556617775604b36210b000000000000000000000000000000000000000000000000000000000e1e33465761625948341909000000000000000000000000000000000000000000000000000000000000000006101b222933363c4143454544423e39352c241d1204000000000000000000000000000000000f1f2d3639362d1f0f0000000000000000000000000000000000000000000000000000000918253035383632281a0d0000000000000000000000000000000000000000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000004121d24262a2b2d36434b60748476614c382815020000000000000000000e1e31424c62778574604b3d2c180800000000000000000000182d43586d8279644e39240f0000000000000000000000021527374a60738378836f5a442f1a000000000000182d42586d827b66503b261100000000000000000000000000000e1f2f3f4f606c81826d63788674604b3a29170400000000000000000000000000000000000000000000000000000000000000000000091e324556728778624d38230d0000000000000000000002152737485a625a483b2b1800000000000000000000000000000000000000000000000000000000000000000002162838475861605745321e090000000000000000000000000000000000000000000000000000000003172939464c4d483b2b190000000000000000000000000000000000000000000000000000000000000000000000080b171e21262c2e30302f2d2923211a0f0a000000000000000000000000000000000000010f1a2124211a0f010000000000000000000000000000000000000000000000000000000008131c2023211e160a000000000000000000000000000000000000000000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e29140000000000000000000000000000000000000000090f1115161825314556667b806b5645321d09000000000000000000001420344859677d7f6a5b4936251300000000000000000000172c42576c817a654f3a2510000000000000000000000000091c304354667b7d85715c3a2a18040000000000142a3f54697f7e6954392916030000000000000000000000000c1c2c3d4c5d697e8574605a6a7f7f6a5846331f0b000000000000000000000000000000000000000000000000000000000000000000000b21364b60768975604b36200b000000000000000000000009192b3c484d483c2b1d0d000000000000000000000000000000000000000000000000000000000000000000000a1a2a3a474c4b453928160300000000000000000000000000000000000000000000000000000000000b1b29333637342b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000030a0c1116191a1b1a18130e0c0600000000000000000000000000000000000000000000070d0f0d070000000000000000000000000000000000000000000000000000000000000000070b0e0b090200000000000000000000000000000000000000000000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000000000000000000081527384a60748575604b36200b0000000000000000000005182b3b4d5f6f8479635443301c0b000000000000000000152b40556a807c67513c2712000000000000000000000000001325364c5e6e8386715947341f0a00000000000f253a4f647a836e5746321e0a00000000000000000000000919293a495b657b877762564b60758776614c3a29170400000000000000000000000000000000000000000000000000000000000000000316283850657a846f5544311d080000000000000000000000000e1e2b3538352b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000c1c2a33373632281b0a000000000000000000000000000000000000000000000000000000000000000b171e212220190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000000000000000000000a1c3043546a807b66513b261100000000000000000000000d1d30414e63798472604a39281603000000000000000012283d52677d7f6a543f2a150000000000000000000000000008182f4053687e8a77614c37220c00000000000b20354b60748776614b382815020000000000000000000114263746586379877a6459474557697e806a5846331f0a00000000000000000000000000000000000000000000000000000000000000000d1e3245566b807f6a5537271502000000000000000000000000000e19202220190e00000000000000000000000000000000000000000000000000000000000000000000000000000c171f21211e160a000000000000000000000000000000000000000000000000000000000000000000030a0c0d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e101b0b0902000000000000000000000000000000000000000000000000000000000000050e151714120c02000000000000000000000000000000000000020c121416140e04000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000000000000000000000013253650667b806b56412b16010000000000000000000000132135495b6b807d685746321e0d00000000000000000f253a4f647a826d5739281603000000000000000000000000001121364b61758979644f39240f0000000000081d3144556b807e685645321d0e000000000000000003111d3144556176867c665c4a3b394b60758776614c36210f00000000000000000000000000020b1114110c0a0400000000000000000006101d2d3d4b60758877624c37220d000000000000000000000000000000050b0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232530201d150a00000000000000000000000000000000000000000000000000000000081622292c29271f14060000000000000000000000000000000006141f26292b292116080000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e29140000000000000000000000000000000000000000000000000000000c21374c617685705a45301b050000000000000000000000061a2c3d4b61758575614b3b2b1905000000000000000c21364b617685705745321e0900000000000000000000000000091e3246576c827c67513c27120000000000011426374c61778675604b3c2c1a0a00000000000000112131424b6073847f6a5e4c3d2d3245566b807e69543d2d1a07000000000000000000000006141f262927221f181512100d0d0c0d0f1119202d3c4a5b697e826c5948341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191c19130900000000000000000000000000000000000000000011212e373a463632281a0a0000000000000000000000000000000000000000000000000000051626343e413e3b322414030000000000000000000000000000001424323b3e413d3426160400000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e29140000000000000000000000000000000000000000000000000000000a1f3347587186715c47321c070000000000000000000000000f1e324657687d806a594834200e00000000000000091e324657708576604b36210b000000000000000000000000000316283954697f7e69543f2914000000000000091f3447596b807e695a493827180800000000000e1e2e3f4e606c81826d614f40301f28384e637886715b4a36210c00000000000000000000021424313b3e3c37332a2a27252322212324262c353e4a5a63798777624c3b2a1805000000000000000000000000020b111316130d0400000000000000000000000000000000000000000000000000000000070d0f1a171107000000000000000000000000000b141b1d1e1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d13110b01000000000000000000000000000000000000000000000000000000000000000000000d1b262e312e261b0d00000000000000000000000000000000000000081c2e3f4b505b4b4538281502000000000000000000000000000000000000000000000000000e2234445156544f4232211100000000000000000000000000000c1c32424f5356514434210e00000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e29140000000000000000000000000000000000000000000000000000000417293a5c7287725c47321d07000000000000000000000000031628394b60748678624d3c2b190500000000000003162839566c817a65503b2510000000000000000000000000000012273c52677c816c57412c1702000000000004182a3a4c617686786356453626180a0000000b1b2b3c4b5d687e8474604b433222122135495b708579634e39230e000000000000000000000b1f31424e53514c473a3f3c3a38373638393b3c494d5c6478867b655947341d0d00000000000000000000000006131e26282b282115070000000000000000000000000000000000000000000000000002101b22242f2c24190b00000000000000000000000f1d282f323332323232323232323232323232323232323232323232323232323232323232323228251e13050000000000000000000000000000000000000000000000000000000000000000091b2b38424642382b1b000000000000000000000000000000000000000e23374b5d6570605645321d120000000000000000000000000000000000000000000000000015293e51636c69604f3f2f1e0e00000000000000000000000004172a3a4f60696b62513d291400000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e2914000000000000000000000000000000000000000000000000000000001d32475c7287725c47321d07000000000000000000000000000b1d314455687d826c5a4835200d0000000000000011263b50667b816b563e2d1b07000000000000000000000000000f243a4f6479846e59442f19000000000000000c1f334658647a857460544336281b0f0208182939495a657b8677615645312515061a2c3d556a7f7f69543f2a140000000000000000000011263b4e60696661585955524f4d4c4c4d4f51565a636d7a877c655d4b3b2a18000000000000000000000000021324313a3d403d3326150400000000000000000000000000000000000000000000000010202d36394440362919070000000000000000000b1d2d3a4448484747474747474747474747474747474747474747474747474747474747474747473d3a312313010000000000000000000000000000000000000000000000000000000000000013263849565b5649381b0b00000000000000000000000000000000000010253a50657a8574604b40301e0e000000000000000000000000000000000000000000000000172c41566c817e695d4b3c2b1a0a00000000000000000000000a1f334758697e806b56412b1601000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e2914000000000000000000000000000000000000000000000000000000071c32475c7187715c47321c0700000000000000000000000000011527374b60748678624d3b2b19050000000000000b20354b607586715c4a36220c000000000000000000000000000d22374c627786715c3a2917040000000000000417293a4b5c697f8272605445392c1e1614263646576278877963594738271507000f253a4f647a836f59442f1a0400000000000000000014293e53697e7c776f6e6a67656262616264666b7078828579655e4c3f2e1d0d0000000000000000000000000b1e31424e5355504433210d0000000000000000000000000000000000000000000000071b2d3e4a4f59544736241100000000000000000114283a4b575d5e5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c524e41311e0b00000000000000000000000000000000000000000000000000000000000005192e4256677167563928160300000000000000000000000000000000000e23374b5d6a7f816c5e4d3c2b190900000000000000000000000000000000000000000000000b20364b6074847b655a483828160200000000000000000006192c3c4c61768776614c36210c00000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e2914000000000000000000000000000000000000000000000000000000031628395c7186715c47311c070000000000000000000000000000091d314455677d816c594834200a000000000000081d3144556d8279644f3a2a17040000000000000000000000000b1f3447597388735846331f0a000000000000000b1b2e3e4f616a7f81726057493d32281d3043546175867c665b4a3a2a1a0a00000b20354b60737f6a553f2a15000000000000000000071c31465c71867f8285837f7c7a78777678797b8084847b70635b4c402f21110000000000000000000000000011263a4e60686b62503d281300000000000000000000000000000000000000000000000d22364a5c646f6554402c170200000000000000061b2f445769727372727272727272727272727272727272727272727272727272727272727272727268604e3a2511000000000000000000000000000000000000000000000000000000000000061c31465b7186715746321e090000000000000000000000000000000000081c2e3f4b6073847c665a483727150100000000000000000000000000000000000000000000081d31445562778578625645321e140200000000000000000c2035495a6c817e695846331f0a00000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e2914000000000000000000000000000000000000000000000000000000091e3246577185715c46311c070000000000000000000000000000011426374b60758777624d382815020000000000011527374f6479826d5847331f0d00000000000000000000000005182a3b5c728776614c36210c00000000000000001020324350616a7f8275635b4b453831414b6072837e695e4c3d2d1c0c000000081d314455606a61503c281300000000000000000001162b40566b807d6d6f777a7e8082838483817f7b766f655d4e493d2f2111030000000000000000000000000013283d53687e806b55402b1600000000000000000000000000000000000000000000000f24394f647a846f59442f1a0000000000000000081d32485d7287888686878787878787878787878787878787878787878787878787878787878787877d68523d2813000000000000000000000000000000000000000000000000000000000000051b30455a708576614b36210c000000000000000000000000000000000000111c30435462778678625544311d1100000000000000000000000000000000000000000000021527374759647a8574604b4231201000000000000000071b2e3e4d62788674604b3a29170400000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e29140000000000000000000000000000000000000000000000000000000c21364b617685705a45301b05000000000000000000000000000000091d3145566b80806b5645321d090000000000000922364a5c6f8477614c3b2a18050000000000000000000000001a2f445a6f8479644e39240f0000000000000000021424334350616a7c85796a60564b444d5f6b80816c614f402f1f0f0000000001142637444b55504333200d0000000000000000000010253a4f657a826d596165686b6d6e6f6d6c6a666157504c3f352c1f1103000000000000000000000000000010263b50657b826d58432d1800000000000000000000000000000000000000000000000c22374c617786715c3a29170400000000000000000f243a4f647a8574727272727272727272727272727272727272727272727272727272727272727268604e3a251100000000000000000000000000000000000000000000000000000000000003182d43586d8278634e39230e000000000000000000000000000000000000011426364759657b8573604b402f1d0d0000000000000000000000000000000000000000000009192a3b4a5c687d826d604e3e2e1d0d0000000000000922374b5c6e837c675645311c0c0000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e29140000000000000000000000000000000000000000000000000000000d22384d6277836e59442e1904000000000000000000000000000000021527384d62788875604b36200d000000000000071b2d3e51667c806a5948341f11000000000000000000000002172d42576c827b66513c26110000000000000000000615253343505f6778857f756760555c677d8474604b4332221201000000000009192631353f3c33251503000000000000000000000b20354b60758674604c505356585959585755504b4639382f211a0e000000000000000000000000000000000e23384e637885705b37271501000000000000000000000000000000000000000000000a1f3447597388735847331f0a00000000000000000d22374b5c687e816c605c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c524e41311e0b00000000000000000000000000000000000000000000000000000000000000152b40556a807b66503b26110000000000000000000000000000000000000008182a3b4b5d6a80806b5e4c3b2b1808000000000000000000000000000000000000000000000d1d2d3e4e5f6c817e685c4b3b2a190900000000091930404f647a85705f4d382715000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e29140000000000000000000000000000000000000000000000000000000e24394e6379826d57422d1802000000000000000000000000000000000a2035485a6f847d67523b2b18050000000000001024394c5e6f8477624c3f2f1c0c0000000000000000000000152a3f546a7f7e69543e29140000000000000000000007152533414d5a62727d857c746a647a8676615544312414040000000000000009141d202a282015070000000000000000000000081d3144556e8379644f3b3e404243444341403b363228231c110600000000000000000000000000000000000b20364b607587725544311d080000000000000000000000000000000000000000000004182a3a5c718676614c37210c0000000000000000071b2e3e4e606d827d685c4a3a4747474747474747474747474747474747474747474747474747473d3a312313010000000000000000000000000000000000000000000000000000000000000013283d53687d7e68533e291300000000000000000000000000000000000000000d1d2f3f4b6073847b6659483626140100000000000000000000000000000000000000000000102031414b6073847a645947372715010000011527374c5e70857a644f41301a0a000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000000000000000000000010253b50657a806b56402b16010000000000000000000000000000000006192b3c51667c8570594834200b000000000000091d30404f647a816c5d4c3a291a0a0000000000000000000012273d52677c816b56412c160100000000000000000000071523303c49546067757e84807a86796358473727150600000000000000000001080b15130d030000000000000000000000000114263752687d7f6a553a2a2b2d2e2f2e2c2a26211e160b0800000000000000000000000000000000000000091d324556738875604b35200b00000000000000000000000000000000000000000000001a2f445a6f8479644e39240f000000000000000000102031424b6074857a64584736263232323232323232323232323232323232323232323232323228251e1305000000000000000000000000000000000000000000000000000000000000000010253b50657a806b56402b16010000000000000000000000000000000000000000111c30435462778677625443301c110000000000000000000000000000000000000000000002131d31445561778577625544311d130100081d314455667c836e5c4b37231200000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000000000000000000000012273c51677c7e69543f29140000000000000000000000000000000000000e21364b60768977624d37220d000000000000001222374b5c6c817b6558463827180b0000000000000000031628394f647a836e59432e1900000000000000000000000004121e2c36434a5660696f7b8b7c665b493a2a19090000000000000000000000000000000000000000000000000000000000000c22374c617785705947341f18191a181715110c0903000000000000000000000000000000000000000000021528385b708578624d38230d0000000000000000000000000000000000000000000002172c42576c817c66513c271100000000000000000002141e32455662788576615443301c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d13110b010000000000000000000000000000000000000000000000000000000000000000000e23384d6378836e58432e19000000000000000000000000000000000000000000011426364859657b8473604b3f2e1c0c00000000000000000000000000000000000000000000011527374759647a8473604b4130200f031729394b60748678634d3e2e1b0400000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000000000000000000000013283d53687d7d68533d2813000000000000000000000000000000000000091e3245576e847e695439291603000000000000071b2e3e4b6175857661564536291b0f04000000000006141e324657687d85715b39281603000000000000000000000000000e18253038454b5d6b81806b5e4c3d2c1c0c000000000000000000000000000000000000000000000000000000000000000b1f344759708577614c37220c00040302000000000000000000000000000000000000000000000000000000192e43586e837a65503b25100000000000000000000000000000000000000000000000152a3f546a7f7e69543e29140000000000000000000002162838485a657b8472604b40301e0e00070707070707070707070707070707070707070707000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607585705b3828150200000000000000000000000000000000000000000008182b3b4c5d6b807f6a5d4b3a2a18080000000000000000000000000000000000000000000009192a3b4a5c677d816c5f4d3e2d1c0c1e334657687e816b5a493520100000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e291400000000000000000000000000000000000000000000000000000014293e53697e7c67523d27120000000000000000000000000000000000000316283953687d85705746321e0a00000000000000101e324657647a8374605446392c1f170e0b0b0c0e1a2132424b61758588735746321e09000000000000000000000000000008131d314556657b8674604b402f1f0f000000000000000000000000000000000000000000000000000000000000000004182a3b556a807d675237271501000000000000000000000000000000000000000000000000000000000001162b41566b807d68523d2813000000000000000000000000000000000000000000000012273c52677c816c56412c1701000000000000000000000a1a2b3c4c5e6a7f806b5e4c3c2c1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145567185715645321d09000000000000000000000000000000000000000000000d1d2f3f4b6073847b65584736251300000000000000000000000000000000000000000000000c1d2d3e4d5f6c817d675c4a3a2a182b3b4b61768776614c3c2c19020000000000000000000000192e43596e836e59432e190400000000000000000000000000000000000000000000000010263b50657b7e69533e2914000000000000000000000000000000000000000000000000000000142a3f54697f7b66513c2611000000000000000000000000000000000000000c22374c61778a76614b36210c00000000000000031628394a5c667c82726157493d332923212021242c35434f606d827c8676614b36210c0000000000000000000000000000031628384b6074877a645645312212010000000000000000000000000000000000000000000000000000000000000000000f253a4f647a836e5544311d0800000000000000000000000000000000000000000000000000000000000013293e53687e806a55402b1500000000000000000000000000000000000000000000000f253a4f647a836e59442e190000000000000000000000000e1e2f404a6072837c665b4939281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527385b708575604b36200b0000000000000000000000000000000000000000000000111d31445562778677615443301c100000000000000000000000000000000000000000000000102030414b6073837a64584736263448596b807f695847331e0e000000000000000000000000192e43596e836e59432e191414141414141414141414141414141414141414141414141414263b50657b7e69533e291400000000000000000000000000000000000000000000000000000014293e54697e7c67523c2712000000000000000000000000000000000000000a1f33475870867b66513c261100000000000000000b1b2d3e4c5e677d8275635b4c473a38363536393d494e61697e816f8478634e39230e0000000000000000000000000000091e324556697f826d5c4b38271504000000000000000000000000000000000000000000000000000000000000000000000b20354b60758775604b35200b00000000000000000000000000000000000000000000000000000000000011263b51667b826d58422d1800000000000000000000000000000000000000000000000d22374d627786715c39291703000000000000000000000000111c30435461768579635746321e1403000000000000000000000000000000000000000000000000000000000000000000000000000000020202020202020202020202020202020200182e43586d8378634d38230e0202020201000000000000000000000000000000000000011426374859667b8472604a3e2e1b0b0000000000000000000000000000000000000000000002131d31445561768476615443303d4d62778674604b3a2a1700000000000000000000000000192e43596e836e59432e292929292929292929292929292929292929292929292929292929293b50657b7e69533e291400000000000000000000000000000000000000000000000000000012283d52677d7e68533e29130000000000000000000000000000000000000004182a3a576c81816b5636251300000000000000000010202f404d5f677b84796c6158524d4b4a4b4e525b636e7f83746d827b66503b261100000000000000000000000000000b21364b60758878634d3e2e1a0a0000000000000000000000000000000000000000000000000000000000000000000000081c3043546d837a65503a25100000000000000000000000000000000000000000000000000000000000000e23394e637885705a37261401000000000000000000000000000000000000000000000b20354a607588735746331e0a00000000000000000000000000132536465763798575614b433221110000000000000000000000000000000000000000000000000000000000000000000000030c1214171717171717171717171717171717171717172b40566b807b65503b261717171717170c0a040000000000000000000000000000000009192b3b4c5e6b807f695c4a3a29170400000000000000000000000000000000000000000000011527374758647a8372604b404a5b6d827c675645311c0c00000000000000000000000000192e43596e836e59433e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e50657b7e69533e29140000000000000000000000000000000000000000000000000000000f243a4f6479816c563e2e18080000000000000000000000000000000000000012283d52677d85705443301c07000000000000000002122230414d5d65788381766d676360606163686e78838073606a7f7e68533e2913000000000000000000000000000114263652677d846f5b493520100000000000000000000000000000000000000000000000000000000000000000000000000114263652677c806b563c2b190500000000000000000000000000000000000000000000000000000000000c21364b617687725544311d0800000000000000000000000000000000000000000000071c304354728776614c36210c00000000000000000000000000081829394a5b677d826e614f3f2e1d0d00000000000000000000000000000000000000000000000000000000000000000006141f27292c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c3e53687d7d68533d2c2c2c2c2c2c2c221f180c000000000000000000000000000000000d1d2f404b6073847a645846331f14010000000000000000000000000000000000000000000009192a3a4a5c677d806b5e4c4e637985705f4d3827150000000000000000000000000000192e43596e836e595454545454545454545454545454545454545454545454545454545454545454657b7e69533e29140000000000000000000000000000000000000000000000000000000b20354b607584705c4b3625180d0b05000000000000000000000000000000000e23384e63788974604a35200b000000000000000000041323303f4b5a626e7a84827c78767576797d8383796b6055677c806b56402b1601000000000000000000000000081c3043546f847c67523c2c1902000000000000000000000000000000000000000000000000000000000000000000000000000c22374c617786715a4835200b0000000000000000000000000000000000000000000000000000000000091e324657738875604b35200b00000000000000000000000000000000000000000000001325365a6f8479634e39240e00000000000000000000000000000b1b2d3d4d5f6b817e695d4b3b2b190900000000000000000000000000000000000000000000000000000000000000031425323b3f41414141414141414141414141414141414141414150667b806b55414141414141414137342a1c0c00000000000000000000000000000000111d31445562788676614c42311f0f00000000000000000000000000000000000000000000000c1c2d3e4d5f6b817c665b5d6f847a654f41301a0a0000000000000000000000000000192e43596e836e696969696969696969696969696969696969696969696969696969696969696969697b7e69533e2914000000000000000000000000000000000000000000000000000000081d3144556c817a645443342a2220190d0000000000000000000000000000000b20354a60748977624d38220d000000000000000000000513212e3c484d5d656f787e82848584817d776e645c4b4f657a836e58432e19000000000000000000000000000b20354b60758976614c36210e00000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758708578624d38220d0000000000000000000000000000000000000000000000000000000000031628395b718677624d38220d0000000000000000000000000000000000000000000000182d42576d827b66513b26110000000000000000000000000000000f1f30414b6073847b655948372715020000000000000000000000000000000000000000000000000000000000000c1f32434f54575757575757575757575757575757575757575757576378826d5857575757575757564c473a2a1804000000000000000000000000000000011527374859667c836e604e3d2d1b0b0000000000000000000000000000000000000000000000102030414b6073837963657b836e5d4b3723130000000000000000000000000000001a2f455a6f847e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7f817e69533e2914000000000000000000000000000000000000000000000000000000011426374d62788372604c473a38342b1d0d0000000000000000000000000000071c30435470857a65503b2510000000000000000000000003111e2b353f4b505a63686c6f6f6f6c6862594f4a3e4d627785705b382815020000000000000000000000000d23384d627886725846331f0a00000000000000000000000002090b0d0b05000000000000000000000000000000000000000004182a3a556a7f7e6853382816020303030303030303030303030303030000000000000000000000000000192e44596e837a654f3a25100000000000000000000000000000000000000000000000152a3f556a7f7e69533e291400000000000000000000000000000001131d31445562778577625544311d1301000000000000000000000000000000000000000000000000000000000012273b4f61696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c7585706c6c6c6c6c6c6c6c6c615947341f0a0000000000000000000000000000000009192b3b4c5e6b807e685c4a392816030000000000000000000000000000000000000000000002131d31445561768475728578634d3f2e1b050000000000000000000000000000000f24394e64797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a77624c37220d00000000000000000000000000000000000000000000000000000000092034485a677d806c6159554d483c2b19050000000000000000000000000000132536586d827d68533e2813000000000000000000000000000e19202e373c494d53575a5a5957524c473b36354a607587725645321d0900000000000000000000000010253a4f657a846f593a29170400000000000000000000000a151d202220180d00000000000000000000000000000000000000000f243a4f6479846f5645321e181818181818181818181818181818180e0c070000000000000000000001162c41566b817d67523d2812000000000000000000000000000000000000000000000012283d52677d806b56412b1601000000000000000000000000000000011527374759647a8474604b4130200f000000000000000000000000000000000000000000000000000000000014293f54697f818181818181818181818181818181818181818181818181888181818181818181818177614c37220c00000000000000000000000000060c0e13161d2f404b60738479645746321e130100000000000000000000000000000000000000000000011426374758647a827d816c5a49352110000000000000000000000000000000000d21364a5c6465656565656565656565656565656565656565656565656565656565656565656565656562594834200b0000000000000000000000000000000000000000000000000000000005192b3c4d5f687e81776c6a625a4834200b0000000000000000000000000000162b40556b80806a55402b15000000000000000000000000000005111c232c35383e42444544423d37342a22304354728775604b36200b00000000000000000000000010263b50657b836d58432e1800000000000000000000000a1a27313637342b1d0d000000000000000000000000000000000000000b20354a60748776604b362e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d24211a0f0100000000000000000014293e54697e7f6a553f2a15000000000000000000000000000000000000000000000010253a50657a836e59432e19000000000000000000000000000000000009192a3b4b5c687e816c5f4d3e2d1c0c00000000000000000000000000000000000000000000000000000000162c41566b81827979797979797979797979797979797979797979797979867a79797979797979797976614b36210c0000000000000000000001080e192023292b2d2e31445562788575614b41311f0f000000000000000000000000000000000000000000000009192a3a4a5c687d8a77614c40301f0f00000000000000000000000000000000071a2d3e4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c483b2b180500000000000000000000000000000000000000000000000000000000000d1d31414e60687880828078624d38220d000000000000000000000000000013283d53687d816c57422c1700000000000000000000000000000000080e192023292d2f302f2c28221f181325365a6f8478634d38230e0000000000000000000000000f24394f6479836e59442e190000000000000000000002152738454b4c483b2b1805000000000000000000000000000000000000071c3043546d827b665043434343434343434343434343434343434339362d1f0f00000000000000000011263c51667b826d57422d1800000000000000000000000000000000000000000000000d22384d627786705b3928160300000000000000000000000000000000000d1d2e3e4e606d827d675c4a3a2918080000000000000000000000000000000000000000000000000000000b20354b6073837b6663636363636363636363636363636363636363636e8378636363636363636363615746321e0a00000000000000000009141d202c35383e4042434237485a667c826d5f4d3d2c1a0a00000000000000000000000000000000000000000000000c203448596a8083806a5e4d3d2c1b0b000000000000000000000000000000000f202d36393a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a37342b1d0d000000000000000000000000000000000000000000000000000000000000031729394b5d657982817e77624d37220d000000000000000000000000000010263b50657b836e59432e19000000000000000000000000000000000000060c0e13171a1a1a17130d0b05182d42576d827b65503b26100000000000000000000000000d22374d627785705b3d2d1a07000000000000000000091d3145566062594834200b0000000000000000000000000000000000000013253652677c816c585858585858585858585858585858585858584e4a3d2d1a0700000000000000000f24394e6479846f5a36251300000000000000000000000000000000000000000000000b20354b607588735745321e09000000000000000000000000000000000000102031424b6075857a645847362614010000000000000000000000000000000000000000000000000000081d3144556176857963584e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e566c817b66504e4e4e4e4e4e4e4b4639291603000000000000000210192631353c494d535557585754504b5e6b817d675b4938281602000000000000000000000000000000000000000000071b2d3e4d62778674817c665b493a291808000000000000000000000000000000010f1a21242525252525252525252525252525252525252525252525252525252525252525252525252220180d000000000000000000000000000000000000000000000000000000000000000a1e334657657b85786c6862594834200b00000000000000000000000000000e24394e6379846f5a452f1a00000000000000000000000000000000000000000000020505040200000000152a3f556a7f7d68533d28130000000000000000000000000b20354b607586725b4a36210a0000000000000000000b20364b607477624c37220d000000000000000000000000000000000000000c21374c617687726d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d635b4a36210c00000000000000000c21364c617687725443301c0700000000000000000000000000000000000000000000081d314455728776604b36210b00000000000000000000000000000000000002141e32455662788576615443301c1200000000000000000000000000000000000000000000000000000114263746586379857661554439393939393939393939393939393e54697e7e68533e3939393939393632291b0b000000000000000412202d37444b535a63686b6d6d6c6a65615760748479635645321e120000000000000000000000000000000000000000000922364a5c6d827b667484796358463625130000000000000000000000000000000000070d0f1010101010101010101010101010101010101010101010101010101010101010101010100d0b0500000000000000000000000000000000000000000000000000000000000000000c21364b61768677625a534d483b2b180500000000000000000000000000000d23384d627885705a45301b0000000000000000000000000000000000000000000000000000000000000012273d52677c806b55402b16000000000000000000000000081d3144556f8478634e38281602000000000000000011263c51667c7e69533e2914000000000000000000000000000000000000000a1f3347587084838383838383838383838383838383838383838279634e39240e00000000000000000a1f334658738875604a35200b00000000000000000000000000000000000000000000011426375a708578634e39230e0000000000000000000000000000000000000003162838495a667c8372604b402f1e0e00000000000000000000000000000000000000000000000000000919293a495b667c8473604b41312424242424242424242424273c51667c806b56402b2424242424211e160b000000000000000212222f3e4a55606870787e808283817f7b766d6662788574604b40301d0d00000000000000000000000000000000000000091930404f6479846f5e62778476615443301c1201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e7e6959483c37342b1d0d0000000000000000000000000000000d22374c627786705b46311b0000000000000000000000000000000000000000000000000000000000000010253a4f657a826d58432d180000000000000000000000000115273753687e7f6a5645321e10000000000000000316283954697e7c67513c2712000000000000000000000000000000000000000417293a4d6278797979797979797979797979797979797979797a77614c37220c00000000000000000417293a5c718677624d3722131313131313131313131313131313131313131313131313182d42586d827b66503b261100000000000000000000000000000000000000000a1a2b3c4c5e6a7f806a5e4c3c2c1b0a00000000000000000000000000000000000000000000000000000c1c2c3d4c5e697f816c604e3f2e1d0e0e0e0e0e0e0e0e0f24394e6479836e58432e190e0e0e0e0c0a03000000000000000010202f404c5c64737e86837d7a7877787a7e82827b6e677c816c5e4d3b2b19050000000000000000000000000000000000021527374d5e6f8479634e59657b8372604a40301f0f000000000000000000000000000000000000000000000000000000000000060c0e15130d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192f44596e8478634e3b2b2220180d000000000000000000000000000000000c21364c617686715c46311c000000000000000000000000000000000000000000000000000000000000000d22374d627785705a372715010000000000000000000000000c21364c61768675604b3e2d1e100500000000000c1e3246576e8378634d38230e00000000000000000000000000000000000000000c2035485a626464646464646464646464646464646464646464615947341f0b000000000000000000192f44596e847a644f3a29292929292929292929292929292929292929292929292929292b40556a807e68533e29130000000000000000000000000000000000000000000e1e2f404a6072837c665a493928160300000000000000000000000000000000000000000000000000000f1f2f404f616d827d685d4b3c2b1b0a0000000000000c21374c617685705b38281502000000000000000000000000000c1c2e3f4c5e667a8680766e686563626365686d757d837a6c817c6659483420140000000000000000000000000000000000081d314455667c826d5b4a4b5d697e806a5e4c3d2c1b0b000000000000000000000000000000000000000000000000000000010f1a21232a282015070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061b30465b708576614c36210e0b0500000000000000000000000000000000000b20354b607587715c47321c000000000000000000000000000000000000000000000000000000000000000b20354a607587725544311d080000000000000000000000000a1e3346576a7f7e695c4a3c2e20180e0c0a0b111d2b3c4b617686705a4935200c000000000000000000000000000000000000000005192b3c484d4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c473b2a1804000000000000000002172c41576c817c67523e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e52687d806b56402b1601000000000000000000000000000000000000000000111c30435461768578635745321e14020000000000000000000000000000000000000000000000000001112232434b6074847b645a483928160300000000000a1f3347587286725645321d090000000000000000000000000417293a4b5d667c85786b615853504e4d4e5053566067747f80778478624d42311d0d00000000000000000000000000000004172a3a4b60748677624c3d3f4e606d827c665b493929180800000000000000000000000000000000000000000000000000000f1f2c35383f3c3325150300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f455a6f8477624c37220d00000000000000000000000000000000000000081d3144557286725c47321d00000000000000000000000000000000000000000000000000000000000000071c304354728675604b35200b000000000000000000000000031729394b6075857a645a4b3f342b23211f20232f3b485a697e7e69543c2c19060000000000000000000000000000000000000000000e1e2b3538393939393939393939393939393939393939393937342a1d0c0000000000000000000014293f54697e7f6a54535353535353535353535353535353535353535353535353535353535353657a836e58432e190000000000000000000000000000000000000000000000132536465863798575604b42322110000000000000000000000000000000000000000000000000000003141d31455662778578625745321e1504000000000417293a5c718675604b36200b0000000000000000000000000a1f334758647b8576635b4c463a3a3937383a38454b56606a78827b836f604e3b2b180500000000000000000000000000000a1f334758697e7f6a59483431424b6074847963574636251300000000000000000000000000000000000000000000000000061a2c3d494e55504333200d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8379634e39240e00000000000000000000000000000000000000091d3145567287725c47321d00000000000000000000000000000000000000000000000000000000000000001325365a6f8477624d38220d000000000000000000000000000b1e32455662788678655d4d483b39373336383f4b5962788674604b36200e00000000000000000000000000000000000000000000000e1920222424242424242424242424242424242424242424221f180c000000000000000000000012273c51677c816c68686868686868686868686868686868686868686868686868686868686868687885705b38281502000000000000000000000000000000000000000000000818293a4a5b677d826d604f3f2e1d0d0000000000000000000000000000000000000000000000000000021527384759647a8575604b4333221201000000001a2f44596f8478634d38230e0000000000000000000000031729394c617686796358493c33292523222325283238454b5a627682817e68594834200f0000000000000000000000000006192c3c4c61768675614b3b2b1e32455662788576615443301c120100000000000000000000000000000000000000000000000c2135495b636a61503c28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f7c67523c2712000000000000000000000000000000000000000b20364b607586715c47311c0000000000000000000000000000000000000000000000000000000000000000182d42576d827a65503a25100000000000000000000000000003162838485a647a867a6c6259534e4c474b4d525d6577857a645645311d09000000000000000000000000000000000000000000000000050b0d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0c0b040000000000000000000000000f24394f6479867e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e88735645321d0900000000000000000000000000000000000000000000000b1b2d3d4d5f6c817e695d4b3b2a190900000000000000000000000000000000000000000000000000000a1a2a3b4a5c677c826e615040301f0f00000002172c41576c817b65503b261000000000000000000000000a1e3346576b807e695b493a2c1f17100e0d0e10151d27313c49586175828577624c3d2d1a07000000000000000000000000082135495b6c817d685746321d162838485a657b8372604a402f1f0f00000000000000000000000000000000000000000000000e23384e63797f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a816c573c2b19050000000000000000000000000000000000000c21364b617686715b46311c0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f7d67523d281200000000000000000000000000000a1a2b3c4a5c64778481776e686361586062676f7b857b655c4a3827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c6177897e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8875604b36200b0000000000000000000000000000000000000000000000000f1f30414b6073847b6559483727150100000000000000000000000000000000000000000000000000000d1d2d3e4d5f6a807f6a5e4c3d2d1c0c000000142a3f54697f7d68533d281300000000000000000000000c21364c61768775604b3d2c1c0e040000000000020a151d2b3a4757627885826d5c4a36210d000000000000000000000008182e3f4d63788673604b3928160a1a2b3c4b5d697f7f6a5e4c3d2c1b0b000000000000000000000000000000000000000000000c21374c6176836e59442e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607686715a4835200b0000000000000000000000000000000000000d22384d6277856f5a45301a000000000000000000000000000000000000000000000000000000000000000012273d52677c7f6a55402a150000000000000000000000000000000e1e2d3e4a59626f7b85837d78767075787c838278655d4b3d2d1a0a00000000000000000000000000000000000000000000000000000000050b0d11151617171613100b09020000000000000000000000000000000000000000000a1f3347587389736969696969696969696969696969696969696969696969696969696969696969708578634d38230e00000000000000000000000000000000000000000000000001131d31445562778677625544311d13010000000000000000000000000000000000000000000000000000102030414a6072837c665b4a3a2a1909000012273c51677c806b55402b16000000000000000000000013283d53687d806b5645321f0e000000000000000000020e1c2a39495a667c8979644e3b2a1805000000000000000000001325364b5d6e837b655443301b0b000e1e2f3f4f616d827c665b49392918080000000000000000000000000000000000000000000a1f3347587084705a3929160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576e8377624d38220f0000000000000000000000000000000000000f24394f6479836e58432e19000000000000000000000000000000000000000000000000000000000000000010253a4f657a826d57422d180000000000000000000000000000000010202d3b474c5e666f777d82848585837e786d625a4b3f2e1f0f0000000000000000000000000000000000000000000000000000040a0d192022272a2b2c2c2b2925201d150b070000000000000000000000000000000000000004182a3a5c71867762545454545454545454545454545454545454545454545454545454545454586d827b65503b261000000000000000000000000000000000000000000000000000011527374859657b8473604b41301f0f000000000000000000000000000000000000000000000000000002121c3043546175857963584737271501000f243a4f6479826d58432d180000000000000000000000132536586d827b65503828160000000000000000000000000c1b2b3c4c5e7085836d5947341f0b000000000000000000071c304354657a846f5d4b362614000000112132434b6075857963574636251300000000000000000000000000000000000000000004172a3a5a7084705746321e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283952677c7e69543d2d1a07000000000000000000000000000000000011263b50667b816c57412c1700000000000000000000000000000000000000000000000000000000000000000d22374c6277806b55402b160000000000000000000000000000000002101d2a34404c505962686c6e706f6e69625a4d483c2e211101000000000000000000000000000000000000000000000000000c171f212b34373c3f404242403e3a363228201c13080000000000000000000000000000000000001a2f445a6f8479644f3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e40556a807d68533d2813000000000000000000000000000000000000000000000000000009192a3b4b5d697e816c5f4d3d2d1c0c000000000000000000000000000000000000000000000000000000132536465762788576615544311d14030c22374c617785705b37271501000000000000000000071c304354728776604b36210b000000000000000000000000000e1e30404f657a8b77624c37220d0000000000000000031628394a60738579634e3f2f180800000003141e32455763788575615443301c120000000000000000000000000000000000000000001a2f44596f8476614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607684705c4a362108000000000000000000000000000000000013283d53687d7f69543f2a1400000000000000000000000000000000000000000000000000000000000000000b1f344759626b62503d28140000000000000000000000000000000000000d181f2f383b484d5357595b5a58534d493c352b1e110300000000000000000000000000000000000000000000000008131c2a33373b484d515456575756534f4b453835302518120400000000000000000000000000000002172c42576c817c67523c2929292929292929292929292929292929292929292929292929293d52687d806b55402b160000000000000000000000000000000000000000000000000000000d1d2e3f4f606d827d675b4a3a291808000000000000000000000000000000000000000000000000000008182839485a657b8473604b423121110b1f3447597286725544311d080000000000000000000b20354a607588735745321e0900000000000000000000000000001222374b5d70857e68533e29130000000000000000091e324557687d816c5b49362111000000000003162839495a667c8372604a402f1d090000000000000000000000000000000000000002172c41576c8179634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576e8379644e3626140100000000000000000000000000000000162b40556b807c67513c2712000000000000000000000000000000000000000000000000000000000000000005182a3b474c55504433210d0000000000000000000000000000000000000005111c232b34373e42444545433e38352b20190e000000000000000000000000000000000000000000000000000a1825303a474c545962666a6b6c6c6b68656056514a43362f1f180c000000000000000000000000000000152a3f546a7f7f69543f2a14141414141414141414141414141414141414141414141414253b50657a826d58432d1800000000000000000000000000000000000000000000000000000000102132424b607585796358463625130000000000000000000000000000000000000000000000000000000b1b2b3c4b5d687e816c604e3f2e1e0e182a3b5c718675604b35200b0000000000000000000c21374c617686715c392816030000000000000000000000000000081b2e3f53687d846f5a3a2a1804000000000000000b21364b60758677614c3d2c1a030000000000000a1b2c3c4c5e6a7f7f6a5e4c38240f0000000000000000000000000000000000000000142a3f54697f7b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283951677c806b5443301c0800000000000000000000000000000002152738586e8379644e39240f0000000000000000000000000000000000000000000000000000000000000000000d1d2a3437403d33261604000000000000000000000000000000000000000000090d192022282d2f30302e292320190e05000000000000000000000000000000000000000000000000000a1b2836434a58616971777c7f808181807e7a756e6660544c40342a1d10020000000000000000000000000012273c52677c816c57422c1702000000000000000000000000000000000000000000000e23384d637885705b3727150200000000000000000000000000000000000000000000000000000002141e32455762788576615443301c110000000000000000000000000000000000000000000000000000000e1e2e3f4e606c817e685d4b3c2b1b1a2f445a6f8478624d38230d0000000000000000000d23384d627885705b46301b000000000000000000000000000000001022374d627788735847331f0a00000000000000152a40556a7f7f6a5947341f0f00000000000000000e1e2f404a6072837b66513b2611000000000000000000000000000000000000000012273c51677c7e69533e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768674604b35200b000000000000000000000000000000091d314556718676614b36210c000000000000000000000000000000000000000000000000000000000000000000000d181f222b28211608000000000000000000000000000000000000000000000000050b0d1317191b1a19140d0b0600000000000000000000000000000000000000000000000000000818283945546069777f8685807c7a79797a7c8084837c73665e4c473b2d2011030000000000000000000000000f253a4f647a846f59442f1a00000000000000000000000000000000000000000000000b20364b607587725544311d080000000000000000000000000000000000000000000000000000000003162839495a667c8372604a402f1e0e000000000000000000000000000000000000000000000000000000112131424b6073847b655a493929182d42576c827a65503a25100000000000000000000d22374c627786715c382715020000000000000000000000000000000b20344859738877614c37220c000000000000000e24394e637973604b3b2a1801000000000000000000121c304354607579634e39240e00000000000000000000000000000000000000000f243a4f6479806b56412b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576e837a65503b25100000000000000000000000000000000b20364b607586715746321e090000000000000000000000000000000000000000000000000000000000000000000000050b0d16140d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536455760727e878077706b6765646364676a6f777f847b6f61594a3e2f22110100000000000000000000000d22374c627786715c3a2a170400000000000000000000000000000000000000000000091d314556728775604b36200b00000000000000000000000000000000000000000000000000000000000a1b2c3c4c5e6a807f6a5e4c3c2b1a0a000000000000000000000000000000000000000000000000000003131d3144556176857862574636252a3f546a7f7d68523d28130000000000000000000b20364b607587725645311d0900000000000000000000000000000005192b3b5a6f8478634e38230e000000000000000c21364a5b63605443301d0c0000000000000000000000132536455660635b4a36210c00000000000000000000000000000000000000000c22374c6177836e58432e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283951677c816c563b2b180500000000000000000000000000000f24394f6479836e593928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1013151514120e0b08010000000000000000000000000000000000000000000000071c30435460758385786b62595551504e4e4f525558616976818477645c4c402f1f0f00000000000000000000000b20354a607588735847331f0a00000000000000000000000000000000000000000000021527385b708578624d38230d0000000000000000000000000000000000000000000000000000000000000e1e2f404a6072837c665a493828160300000000000000000000000000000000000000000000000000000115273747586379857561544330273d52677c7f6a55402a15000000000000000000091d324556728775604b36200b00000000000000000000000000000000192e43596e8379644f3a240f00000000000000071a2d3d4a4e4b4336261400000000000000000000000008182838454b4e4a3d2d1a0700000000000000000000000000000000000000000b1f3447596f846f5a382816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768671594834200b000000000000000000000000000013283d53687d7f6a553f2a150000000000000000000000000000000000000000060c0e12151617171615130f0c0a04000000000000000000000000000000000000000000000000000000000000000000070a151d2025292a2b2a2724201d140909000000000000000000000000000000000000000004172a3a4a6072838273625a4c483b3c3b39393a3c3a474c58616c7a857a665e4c3d2d1c0c00000000000000000000071c304354728776614c37210c0000000000000000000000000000000000000000000000182e43586d837a65503b251000000000000000000000000000000000000000000000000000000000000000121c30435461768578625645321e140200000000000000000000000000000000000000000000000000000919293a495b667c8372604a41303a4f647a826d58422d1800000000000000000002152838596e8379644f39240f00000000000000000000000000000004192e43596e8379644e39240f00000000000000000f1f2d36393530261808000000000000000000000000000a1a28323639362d1f0f00000000000000000000000000000000000000000004182a3b5a7085705645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324557708577624c37220d0000000000000000000000000006192c3c586d827a65503a25100000000000000000000000000000000000070b101a2123272a2c2c2c2b2a2825211f170f0d070000000000000000000000000000000000000000000000000000000004101b222832363a3e40403f3d39353126231c11090000000000000000000000000000000000000a1f334758697e85746055493c342a2725242425272a333a464c5c6478857c665b4a3a2a1804000000000000000000001325365a6f8479644f39240f0000000000000000000000000000000000000000000001162b40566b807d68523d281300000000000000000000000000000000000000000000000000000000000000001325364758647a8575604b423120100000000000000000000000000000000000000000000000000000000c1c2c3d4c5e697f806b5f4d3e374d6277856f5a3626140100000000000000000014293e54697e7e69543d2d1a070000000000000000000000000000031629395a708577624d37220d0000000000000000010f1a2124201c14080000000000000000000000000000000a161e2124211a0f01000000000000000000000006060606060606060606001a2f445a6f8476604b36210b06060606060606060606060503000000000000000000000000000000000000000000000000000000000000000000000000000003162839566b817c66513c2711000000000000000000000000000c2035495a728675604b36200b00000000000000000000000000000008131c20252c35383c3f414242413f3d3a36332924221b1009030000000000000000000000000000000000000000000000000c171f2d3638454b5053555554524e4b4437382f241d1205000000000000000000000000000000000c21374c61778879635645372b1f1812100f0e0f12171f29333e4a5a62768579635947341f0f00000000000000000000182d42576d827c66513c2711000000000000000000000000000000000000000000000013293e53687e7f6a55402a1500000000000000000000000000000000000000000000000000000000000000000818293a4a5c677d826d604e3e2e1d0d0000000000000000000000000000000000000000000000000000000f1f2f404f616d827d675c4a3b4a607586715443301c080000000000000000000d22384d627785705b4a36211000000000000000000000000000000a1e324657718676604b36210b00000000000000000000070c0e0b0801000000000000000000000000000000000002090b0e0c0700000000000000000000040a0c1b1b1b1b1b1b1b1b1b1b1b1b2d42576c8278634e38231b1b1b1b1b1b1b1b1b1b1b1b1a1811080000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d7f6a543f2a15000000000000000000000000000d23384d627885705645321d09000000000000000000000000000512182530353b3d494e51545657575655524f4c463a3a362e211e160a010000000000000000000000000000000000000000010f1c29333e4a4f566065686a6a6967636055504c4038301f180d0000000000000000000000000000071a2d3d556a7f816c5b493827190e05000000000000040c171f2d3c4858647a8677614c3d2d1a07000000000000000000152a3f556a7f7e69543f2914000000000000000000000000000000000000000000000011263b50667b826d58422d180000000000000000000000000000000000000000000000000000000000000000000c1c2d3d4d5f6c817e685c4b3b2a1909000000000000000000000000000000000000000000000000000001122232434b6074847a6459474354718675604b35200b0000000000000000000b2034485a6f8479634e3e2d1a0a000000000000000000000000000c21364b617686715645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f21303030303030303030303030303f546a7f7b66503b303030303030303030303030302f2c25190b00000000000000000000000000000000000000000000000000000000000000000000000011273c51667c816b56412c160100000000000000000000000417293a53687e7f6a54382815020000000000000000000000000e19203036434a50585b63676a6b6c6c6b6a68646158564f4a3e3632281d1509000000000000000000000000000000000000000f1f2c3a464c5c646d757a7e7f807f7c79756d655e514c40342a1d10020000000000000000000000000c21364a5b728778634e3d2c1a0a0000000000000000000004101e2b3a4a5c687e826c5c4a36210e00000000000000000012283d52677d816c56412c1701000000000000000000000000000000000000000000000e23394e6378856f5a372614010000000000000000000000000000000000000000000000000000000000000000000f1f30414b6074847a64594737271501000000000000000000000000000000000000000000000000000004151e324556627785776256455a6f8477624d37220d00000000000000000005192b3c4e6479836e5c4a38281603000000000000000000000004172a3a50667b816c5738281602000000000000000000000000000000050b0d1a181208000000000000000000000000000000000000000000000000000c1c2a3337454545454545454545454545454552677c7d68534545454545454545454545454545444137291908000000000000000000000000000000000000000000000000000000000000000000000010253b50657a816c57422c170200000000000000000000000a1f3346586f8478634e39230e000000000000000000000003111e2b35404d5460656d71787c7f818181807f7d7a766f6b645c544b45383127191000000000000000000000000000000000000e1e2c3d4958616d798385817d7b7a7b7e8285827b70665e4c483b2e20110300000000000000000000000e24394e637985715b49351f0e000000000000000000000000000e1c2d3e4a60738679644e3c2c1906000000000000000010253a4f657a836e59442e1900000000000000000000000000000000000000000000000b21364b607687725544311d0800000000000000000000000000000000000000000000000000000000000000000001131d31445562778577625544311d12010000000000000000000000000000000000000000000000000000021628384859647a8474604b576d827a654f3a2510000000000000000000000d21364a5c6d8279645645321e160a000000000000000000000d1f3347586c817c66513c27110000000000000000000000000000000d1820222f2d25190b000000000000000000000000000000000000000000000004172a3a474c5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b647a806b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a5447372511000000000000000000000000000000000000000000000000000000000000000000000011263b51667b806b56412b160100000000000000000000000c21364c617686715b4935210c000000000000000000000512212f3c484d5e66737a8286837f7c7a79797a7b7d80838480796f6960564b44372e1c130800000000000000000000000000000b1b2c3c495b637682847a716b68656566686c707981857c6e62594b3e2f2111030000000000000000000014293e53697e806b563d2c1a0000000000000000000000000000000f1c304354677c846f5a4935200c00000000000000000d22384d627786715c3929170300000000000000000000000000000000000000000000091e324557738875604b35200b00000000000000000000000000000000000000000000000000000000000000000000021527374859657b8473604b41301f0f0000000000000000000000000000000000000000000000000000000a1a2b3b4a5c677d826d61556a7f7c67523d271200000000000000000000071a2d3e4d62788475604b4432281a1007000000000000020e1d2e3e4c61768774604b35200b00000000000000000000000000000d1d2b3437454137291908000000000000000000000000000000000000000000000a1f33475861707070707070707070707070707070707783707070707070707070707070707070706f6554412c18000000000000000000000000000000000000000000000000000000000000000000000417293a53687e7e68533e2913000000000000000000000005192b3c52687d806b563d2c1a06000000000000000000041223303f4b5a626f7c86837b746e6a666463636465686b6e757980847e756960554a3e3025180a00000000000000000000000003172939495a6379867d6f645c565250505153575b636c77828477645c4c3f2f211100000000000000000000172d42576c827c66513c2711000000000000000000000000000000001325364a60738678624d38230d00000000000000000b20354b607588735746331e0a00000000000000000000000000000000000000000000031628395b718677624d38220d000000000000000000000000000000000000000000000000000000000000000000000009192b3b4b5d697e816b5f4d3d2c1b0b0000000000000000000000000000000000000000000000000000000d1d2d3e4d5f6b807e695d677d7f6a553f2a1500000000000000000000000f2034485a657b826d624b45382e221b110d0b080b0d151d2c3b4a5c6b807e695544311d080000000000000000000000000005182b3b484c5a5447372512000000000000000000000000000000000000000000000c21374c617685858585858585858585858585858584858985858585858585858585858585858585846f5a442f1a0000000000000000000000000000000000000000000000000000000000010b111318171f3346586d8379634e39240e00000000000000000000000b2035485a6f8578634e38230f00000000000000000000122230414d5d65788483786d65605454514f4e4e4f5052555460646b747c837e74645c4a4336281a0a00000000000000000000000a1e3346576378867a675f4f4b3e3d3b3a3c3e3d4a4e58616d7b867a655d4c3f2e1e0e0000000000000000001a30455a6f8579634e39240e00000000000000000000000000000000081c3043546a807f69543f2a140000000000000000081c304354728776614c36210c0000000000000000000000000000000000000000000000192e43596e837a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000d1d2e3f4f616d827c675b4939291808000000000000000000000000000000000000000000000000000000102030414b6072837b65657a826c57422d17000000000000000000000005192b3c4b5d687e806d60564b3f362d2623201d202227313c4959647a8674604b37271501000000000000000000000000000b20344859626f6654412d18030000000000000000000000000000000000000000000a1f33475861707070707070707070707070707070707085707070707070707070707070707070706f6554412c180000000000000000000000000000000000000000000000000000000005131e25282d2933404c617685705b4a36210c00000000000000000000021528384d627885705b4935210c0000000000000000000e1e2f404d5f677b877c6e635b504a43363c3a39393a3b3d36434a4e5460666e7c847a6960544538281a0a000000000000000000071b2d3e4b6175867b645c4d41372e28262526292d363a474c5d6578857b655d4b3c2b190900000000000000001a2f44596f8475604b36210b00000000000000000000000000000000001325364f657a846f5a3827150200000000000000011426365a708579634e39240e0000000000000000000000000000000000000000000001162c41566b817d67523d281200000000000000000000000000000003030303030303030303030303030303030303030300112132424b6075857963574636251300000000000000000000000000000000000000000000000000000002131c304354617585796377846f5a3625130000000000000000000000000d1d2e3f4e60697e8275655d4e4a3e3b383531363838454b5b6378867963564532190900000000000000000000000000000d22374c6277846f5a452f1a0000000000000000000000000000000000000000000004172a3a474c5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b6f8475605b5b5b5b5b5b5b5b5b5b5b5b5b5b5a5447372511000000000000000000000000000000000000000000000000000000011323313a3d423a464c5e6b807c67513d2d1a0700000000000000000000091d3245566a807d68533d2c1a06000000000000000008182c3c4c5e677d8679675f4e493d3530252725242425262825303536434a515f6776827f726056453828150200000000000000000d22364a5c6c817e695d4b3e30221b13101011131a212a333f4b5a6277857b655a483727150200000000000000182c4154656f605745321e0900000000000000000000000000000000000b21364b607688735645311d090000000000000000182d42586d827b66513b2611000000000000000000000000000000000000000000000014293e54697e7f6a553f2a1500000000000000000000000000070b1818181818181818181818181818181818181818181818181e32455763788576615443301c11000000000000000000000000000000000000000000000000000000011426364657627885767486715443301c07000000000000000000000000112131424f60697b847a6e645c55504d4b444b4d5056606a79867c655b4a3828150000000000000000000000000000000b20354a607586715c3a2a1804000000000000000000000000000000000000000000000c1c2a3337454545454545454545454545454545586d8277624d454545454545454545454545454441372919080000000000000000000000000000000000000000000000000000000b1e31424e53575858616b7c826d5f4d391f0f00000000000000000000000b20364b60758676604b36210f000000000000000001142636495a667c8778635b4d41352c201c13110f0e0e0f1013131c20253035414d58616d7e8374605645321d0900000000000000061a2c3d4f647a8573604b3f2e2013080000000000070c181f2f3c485962788678625544311d0e000000000000001124374754594b45392816030000000000000000000000000000000000091e324556728775604b36200b0000000000000000152b40556a807e69533e2914000000000000000000000000000000000000000000000011263c51667b826d57422d18000000000000000000000008131c202d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2839495a667c8372604a3f2f1e0e00000000000000000000000000000000000000000000000000000008182939495a657b83728675604a35200b00000000000000000000000003142432424f5d65768183796f6b666260556062656c757f867a655e4c3d2d1a0a000000000000000000000000000000071c3043547186715947341f0a00000000000000000000000000000000000000000000000c171f21303030303030303030303030303040556a807a65503a3030303030303030303030302f2c25190b0000000000000000000000000000000000000000000000000000000011253a4e60686d6d6f76808273604b41301d01000000000000000000000013283d52687d806b5745321e090000000000000000081c30435463788779635a493d30211a0e07000000000000000000070b131c20303a464c60697c8475604b36200b000000000000000c2135495b6f847b65544330201002000000000000000004111e2b3b485a657b8574604b3c2c19060000000000000719293741443632281b0a000000000000000000000000000000000000021628385c718776614c37210c000000000000000013283d52687d806b56412b1601000000000000000000000000000000000000000000000f24394e6479846f5a3625130000000000000000000008182530354243434343434343434343434343434343434343434343434343433c4c5e6b807f6a5d4c3c2b19050000000000000000000000000000000000000000000000000000000b1b2c3c4b5d687e808477624c37220d00000000000000000000000000061424323f4c58616c788184807b78757075777a81867f75645c4c402f1f0f00000000000000000000000000000000001325365a6f8477614c37220c000000000000000000000000000000000000000000000000040a0c1b1b1b1b1b1b1b1b1b1b1b1b1b283d52687d7d67523d281b1b1b1b1b1b1b1b1b1b1b1a181108000000000000000000000000000000000000000000000000000000000013283d53687d828284837b6d6055443123120100000000000000000000041a2f44596f8377624d3928160300000000000000031629394b6073867c665b493c2c1f1306000000000000000000000000000007131c2933424f5e6676615645321d09000000000000000e23394e637885705d4b3626140200000000000000000000000e1d2b3c4c5d6b807f6a5a4935200f000000000000000b19242c2f211e160a0000000000000000000000000000000000000006192c3c5d728776604b36210b000000000000000010253b50657a836e59432e1904000000000000000000000000000000000000000000000c21364c617687725443301c07000000000000000000132536434a5858585858585858585858585858585858585858585858585858585858586072847b655a48352008000000000000000000000000000000000000000000000000000000000e1e2e3f4e606c81877a644f3a240f00000000000000000000000000000614212f3a474c5a626b757a7f8284848584817b756a60564b3e2f2111010000000000000000000000000000000000182d42586d8279644f39240f00000000000000000000000000000000000000000000000000000006060606060606060606060610253b50657a7f6a55402a15060606060606060606060503000000000000000000000000000000000000000000000000000000000000000c21364b617577766f6e665e4b44372715050000000000000000000000000b20364b6075625948341b0a00000000000000000a1e324657697e836e5e4d3d2c1d0f0100000000000000000000000000000000000c171f32404c5861584638281502000000000000071a2d3e566c817d68533f2f1808000000000000000000000000000e1e2f3f4b61758678634d3d2d1a07000000000000000711181a0b090300000000000000000000000000000000000000000c2135495b7389735745321e0900000000000000000d23384d627886705b46311b06000000000000000000000000000000000000000000000a1f334658738875604a35200b0000000000000000071c304354606d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d768578624d3626140100000000000000000000000000000000000000000000000000000000112131424b6073857c67523c271200000000000000000000000000000003111c2a333c484d556064696d6f70706f6b6660564b45382e201103000000000000000000000000000000000000152a40556a7f7c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d6278826d57422d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576161615759504c403127190900000000000000000000000000091d3245566056483b2b180000000000000000001325364b61768877624d40301f0e00000000000000000000000000000000000000000414222f3a464c463a291a0a000000000000000d21364a5c728776614c372111000000000000000000000000000000111e324657677c836d5b4a36210c000000000000000000030400000000000000000000000000000000000000000000001325364d637886715b3928160300000000000000000b20364b607488735e48331e09000000000000000000000000000000000000000000000417293a5c718677624c37220d00000000000000000b20354a60748283838383838383838383838383838383838383838383838383838383838383828586705443301c080000000000000000000000000000000000000000000000000000000003141d314455617678624d38220d00000000000000000000000000000000000c171f2b3537444b4f54585a5b5b5956514b453832281a10020000000000000000000000000000000000000013283d52687d7e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075846f5a3626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464b4c4b46393b382f1d1509000000000000000000000000000002152838454b45382b1d0d0000000000000000071c304354697f816c59483422120000000000000000000000000000000000000000000004121c29333633291c0c00000000000000000f24394e6479856f5847331f0a000000000000000000000000000000031628394a60738679634e3a2a170400000000000000000000000000000000000000000000000000000000000000000d1c304354697e816b56412c16000000000000000000081d3144556479644e39240f0000000000000000000000000000000000000000000000000e23384e637874604b36210b0000000000000000071c30435464797979797979797979797979797979797979797979797979797979797979797979797a72604b35200b000000000000000000000000000000000000000000000000000000000001152737475861625a4835200b000000000000000000000000000000000000040e19202731353a3f4245454644413c3632281e160a00000000000000000000000000000000000000000010253b50657a816c56412c17010000000000000000000000000000000000000000000000000000000000000000000000000000081d3144557084705443301c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2933363736332926231c1102000000000000000000000000000000000a1a28323632281a0d0000000000000000000b20354a60738778624d3b2b18040000000000000000000000000000000000000000000000000c171f211f170c00000000000000000014293e54697e7f6a553a291704000000000000000000000000000000000b1c304354677c826d5847331f0a00000000000000000000000000000000000000000000000000000000000009121d2b3c4a6073857a644f3a250f000000000000000000021527374a5c645c4a36210d0000000000000000000000000000000000000000000000000c2135495b63605645321e090000000000000000001325364a5c6464646464646464646464646464646464646464646464646464646464646464646464605443301c080000000000000000000000000000000000000000000000000000000000000919293a474c4d483c2b190500000000000000000000000000000000000000000509151d20252a2d3030302f2c26211e160a02000000000000000000000000000000000000000000000e23384d6378836e59442e19000000000000000000000000000000000000000000000000000000000000000000000000000000021527375a6f8475604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e2122211e17110f09000000000000000000000000000000000000000a151d201d150a0000000000000000000010253b50657b846f5a48351d0d0000000000000000000000000000000000000000000000000000040a0c0a0400000000000000000003182e43586d837b65503b26100000000000000000000000000000000000001325364b60758776614c37210e00000000000000000000000000000000000000000000000000040a0c0f121c232f3b485a677c85705c4b37220d0000000000000000000009192d3d4a4e4a3d2d1a07000000000000000000000000000000000000000000000000061a2c3d494e4b453828160300000000000000000008182d3d4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b4336261401000000000000000000000000000000000000000000000000000000000000000c1c29333738352b1e0e000000000000000000000000000000000000000000000001080b0f14181a1b1b1a16110b09020000000000000000000000000000000000000000000000000b20364b607585705b38281602000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8277624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0c0c0a03000000000000000000000000000000000000000000000002090b09020000000000000000000005192b3c576c817d68523c2b19000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c718677624c37220d000000000000000000000000000000000000081d3144556b807e69543c2b1905000000000000000000000000000000000000000000040e0c171f2124272f38404c596278877a644f3e2e1b0800000000000000000000000f1f2d3639362d1f0f00000000000000000000000000000000000000000000000000000e1f2c35383632281a0a00000000000000000000000f1f2d36393939393939393939393939393939393939393939393939393939393939393939393935302618080000000000000000000000000000000000000000000000000000000000000000000c171f212220190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145567185715645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b807a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a728777624c37220e00000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758738873594834200b000000000000000000000000000000000000021527374e637886715a4835200b0000000000000000000000000000000000000000081621292a3337393d404c505e6677867e685c4a362010000000000000000000000000010f1a2124211a0f010000000000000000000000000000000000000000000000000000000e1a2123211e160a000000000000000000000000010f1a212424242424242424242424242424242424242424242424242424242424242424242424201c14080000000000000000000000000000000000000000000000000000000000000000000000040a0c0d0b05000000000000000000000000000000000000000000000000000000000000000000000000050b0d10121413120f0b090300000000000000000000000000000000021527385b708576604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d7c67523d271200000000000000000000000000000000000000000000000000000000000000000000000000060c0e0f0f0f0f0f0f0f0f0e0c0600000000000000000000000000000000000000000001080b0801000000000000000000000000000d22384d627786715947341f0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c617686715c3b2b180500000000000000000000000000000000000000092135495b728778624d38220d00000000000000000000000000000000000000041626333d3a474c4e52575e656f7c887e68604e3e2d1b020000000000000000000000000000070d0f0d07000000000000000000000000000000000000000000000000000000000000060c0e0b0903000000000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0d182022262729292724211e160b09020000000000000000000000000000192e43586e8378634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b7f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000010f1a2123242424242424242423211a0f0100000000000000000000000000000000000009141d201d140900000000000000000000000011263c51667b826d583b2a180500000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e637885705a45301b0000000000000000000000000000000000000000061a2c3d566b807e6954362614010000000000000000000000000000000000000e2133445156586164676c717b84867b68604e42312010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b111316130d040000000000000000000000000000000000000000000000090f111d0b09030000000000000000000000000b171f212b34373b3d3e3e3d3a363228201d150a00000000000000000000000001162b41566b807b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d6378826c57422d1702000000000000000000000000000000000000000000000000000000000000000000000f1f2c3539393939393939393938352c1f0f00000000000000000000000000000000000919263135312619120400000000000000000000152a3f556a7f7e69543f29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a836e59442e1904000000000000000000000000000000000000000010253b50657a846f5443301c0800000000000000000000000000000000000014293d51626b7177797c8187847c73655d4e423124140200000000000000000000000000000000000000000000000000000000000000020b111313100b0100000000000000000000000000000000000000000000000000000000060b0d18161006000000000000000000000000000000000000000000000000080d0f19171107000000000000000000000000000000000000000000000000000000000006131e26282b28211507000000000000000000000000000000000000000004121d242632211e160a00000000000000000000141b2933363b484d50525453524f4b45393631271c1308000000000000000000000014293e53697e7d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075846f5a442f1a05000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e4f4f4f4f4f4f4f4f4e493d2c1a0600000000000000000000000000000001142637444b443730231200000000000000000000172d42576c827c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a836e58432e190300000000000000000000000000000000000000000b21364b60768875604b35200b000000000000000000000000000000000001162b40566b8086888d867e756e6760554b3f312414060000000000000000000000000000000000000000000000000000000000000006131e262828251e130500000000000000000000000000000000000000000000000000000e1920232d2b23180a00000000000000000000000000000000000000000002101b22252e2c24180a000000000000000000000000000000000000000000000000000000021324313a3d403d332615040000000000000000000000000000000000000012222f383b473632281b0a0000000000000008131c313a464c5559626567696867646057524b45383025180d0000000000000000000011263b51667b806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000091d3245567085705a45301b050000000000000000000000000000000000000000000000000000000000000000000c2135495b636464646464646464635b4935210c000000000000000000000000000000081d31445560554d41301d0a0000000000000000001a2f44596f8479644f3a240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b826d58432d18030000000000000000000000000000000000000000091e324557718679644e39240f00000000000000000000000000000000000014293d51626b7173767b808480786b60564a3d2e2111020000000000000000000000000000000000000000000000000000000000021324313a3d3d3a312313010000000000000000000000000000000000000000000000000e1e2b3538433f35281806000000000000000000000000000000000000000010202e373a44403628180700000000000000000000000000000000000000000000000000000b1e31424e5355504433210d0000000000000000000000000000000000000b1b2f404c515c4b4539281603000000000008182530424e58616a70777b7c7e7e7c79766f6860564a43362b1d110300000000000000000e24394e6379826d58422d1800000000000000000000000000000000000000000000000000000000000000000000000000000002152838566b806b56402b16010000000000000000000000000000000000000000000000000000000000000000000e23394e6379797979797979797979634e38230e0000000000000000000000000000011426364b6074675f4d3924100000000000000000001b30455b708578634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a836d58432e1803000000000000000000000000000000000000000003162839576c817d68533d28130000000000000000000000000000000000000e21334451565b5660656b707b848075635b4b3f2e201000000000000000000000000000000000000000000000000000000000000b1e31424e53524e41311e0b000000000000000000000000000000000000000000000006192b3c484d58534635231000000000000000000000000000000000000000081b2e3e4b4f595447362411000000000000000000000000000000000000000000000000000011263a4e60686b62503d28130000000000000000000000000000000000031729394c5e6672605745321e090000000000132536434a6068767f85837f7d7c7c7d8184847d75686054483c2f221305000000000000000c21364c6176856f5a362513000000000000000000000000000000000000000000000000000000000000000000000000000000000a283d51626b62513d2814000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f84807f7f7f7f7f7f7f7d67523d27120000000000000000000000000000081c304354687e7c67513c27120000000000000000001c31465b718677624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a836e59432e190400000000000000000000000000000000000000000014293e54697e806b56412b16010000000000000000000000000000000000041626333d4038454b50565d656f7b8579655d4b3e2e1d0c0000000000000000000000000000000000000000000000000000000011263a4e6068685f4e3a251000000000000000000000000000000000000000000000000b2035485a626d64533f2b16010000000000000000000000000000000000000d22374b5c646e6554402c17020000000000000000000000000000000000000000000000000013283d53687e806b55402b1600000000000000000000000000000000000a1e334657667c8675604b36210b00000000081c304354606c7e867d766e6a686667686c70777e857d72625a4c40312314060000000000000a1f3346587186715443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000e2133445156514433210e00000000000000000000000000000000000000000000000000000000000000000000182d42576d81786a6a6a6a6a6a6a675f4d39251000000000000000000000000000000b20354b60748576614b36210c0000000000000000001c31475c718677614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f6479846e59442f190400000000000000000000000000000000000000000011263b50667b846f59442f1a00000000000000000000000000000000000000081621292b2832363b3f4c505e6677837b655c4b3b2a180400000000000000000000000000000000000000000000000000000013283d53687e7d68523d281300000000000000000000000000000000000000000000071b2e3e4d6278826d58432d18000000000000000000000000000000000000000f253a4f647a836e59442e19000000000000000000000000000000000000000000000000000010263b50657b826d58432d18000000000000000000000000000000000a1a2e3f4c6176887b655745321e0900000008182e3f4a6072818275686056555351525356596269757e8478665e4e423224140600000000000417293a5b708575604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000041626333d403d3326160400000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f7a65555555555555524d41301e0a0000000000000000000000000006192c3c51667c806b5746321e090000000000000000001b31465b708677624d38220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e6379846f5a442f1a050000000000000000000000000000000000000000000d23384d627887725d3828160300000000000000000000000000000000000000040e1416161e21262f38404c596274847a645947341f1000000000000000000000000000000000000000000000000000000010263b50657b7f6a55402a15000000000000000000000000000000000000000000000922364a5c6e8285705b3a2917040000000000000000000000000000000000000d22374c627786715c3a291704000000000000000000000000000000000000000000000000000e23384e637885705b372715010000000000000000000000000000021528384b5d6c81826d5d4b392816030000001325364b5d6c81817261574b45383e3c3c3e3b484c55606978837c68604f423224140200000000001a2f44596f8477624c37220e00000000000000000000000000000000000000000000000000000000000000000000000000000000081621282b28211608000000000000000000000000000000000000000000000000000000000000000000000012283d52677d7d68533f3f3f3f3f3d3930231301000000000000000000000000000c2035495a6f8477614c392816030000000000000000001b30455a708578634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d627786705b46311b000000000000000000000000000000000000000000000b20364b607589745645321e09000000000000000000000000000000000000000000000002090b111c232f3b485661768477614c3f2e1b0800000000000000000000000000000000000000000000000000000e23384e6378826d58422d18000000000000000000000000000000000000000000091930404f647a8384705847331f0a0000000000000000000000000000000000000b20354a607588735846331f0a000000000000000000000000000000000000000000000000000b20364b607587725544311d080000000000000000000000000000081d324556657a8876614c3f2f1b0a000000071c304354657b8472605446393228282727282a3437444b5a6375827e69614f42311f0b0000000002172c41576c817d68523d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000040e1416140e0400000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a806b55402b2a2a2a27251e130500000000000000000000000000001325364d6278836e5947341b0b000000000000000000001a2f445a6f8479644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607587725d39291703000000000000000000000000000000000000000000091d324556748976604b36210b00000000000000000001080b08010000000000000000000000000008121d2b384758647a836e5d4b37220f00000000000000000000000000000000000000000000000000000b20364b6075846f5a3626140100000000000000000000000000000000000000011527374c5e6f84798376614c37210c000000000000000000000000000000000000071c304354728776614c36210c00000000000000000000000000000000000000000000000000091d324556738775604b35200b0000000000000000000000000008182d3d4b6074877c665846332111000000000b20354a6073867963544336291e1613111213181f27313c49576073827f69604e3b26110000000000142a3f54697f84705b4935210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d6277826d58432d18151512100a010000000000000000000000000000071c3043546b807b66513b2a180000000000000000000000182d42586d827b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3245567388735746331e0a000000000000000000000000000000000000000000021528385d728777624d38220d000000000000000009141d201d140900000000000000000000000000000d1a293a4a5c6d827a654f3d2c1a0600000000000000000000000000000000000000000000000000091d3245567085705443301c0800000000000000000000000000000000000000081d314455667c816c8179644e39240f000000000000000000000000000000000000001325365a6f8479644e39240f00000000000000000000000000000000000000000000000000021528385b708578624d38230d000000000000000000000000011426364a5b6b80836e5e4c3a2917030000000010263b50657b836e5b493625180b03000000000509151d2c3945556072817e68533e2913000000000012273c52677c8778634e3a291704000000000000000000000000000000000000000003090c1e1c1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b0f0d0700000000000000000000000000000000000000000000000000000000000000000b20354b6075846f5a37271502000000000000000000000000000000000000000b20354a60748575604b35200c0000000000000000000000152b40556a807d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528385c728776614b36210c000000000000000000000000000000000000000000001b31465b708679644f39240f0000000000000009192631353126190c00000000000000000000000000000c1c2d3e4d627885705b4936210c00000000000000000000000000000000000000000000000000021528385a708575604b35200b000000000000000000000000000000000000031729394b60748577697e7c66513c271100000000000000000000000000000000000000172d42576c827b66513c26110000000000000000000000000000000000000000000000000000192e43586e837a65503a2510000000000000000000000000081c30435463798877614c40301c0c0000000006192b3c586e837b65503d2c18080000000000000000020e1b28374454606c76614b36210c00000000000f253a4f647a82806b5846331f0b000000000000000000000000000000000000000b161e2133313030303030303030303030303030303030303030303024211a0f01000000000000000000000000000000000000000000000000000000000000081c3043547084705544311d08000000000000000000000000000000000000000f253a4f647a826c5544311d08000000000000000000000013283d53687d806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8479644f39240f000000000000000000000000000000000000000000051b30455a70857a644f3a250f00000000000001142637444b44372a1c0c0000000000000000000000000000102035485a6f8478634e39230e0000000000000000000000000000000000000000000000000000192e43586e8377624d37220d0000000000000000000000000000000000000a1e334657687e7f6a667c7e69543e291400000000000000000000000000000000000000152a3f546a7f7e69543e29140000000000000000000000000000000000000000000000000001162b41566b807d68523d2813000000000000000000000005192b3c4b6073857d67594734221200000000000b2035495a728774604a35200f00000000000000000000000a192636434a57615746331e0a00000000000d22374c6277838176614c3929170300000000000000000000000000000000000b1b28323649464545454545454545454545454545454545454545454539362d1f0f000000000000000000000000000000000000000000000000000000000000011426365a6f8475604b36200b00000000000000000000000000000000000006192c3c566b807b665137271501000000000000000000000010253a4f657a836e583a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b817c67523d2712000000000000000000000000000000000000000000051a2f455a6f847a65503b2510000000000000081d3144556055473a2a18040000000000000000000000000005192b3c54697e7f6a543f2a150000000000000000000000000000000000000000000000000001162b41566b807a654f3a2510000000000000000000000000000000000005182b3b4b61768575606479816c56412c170100000000000000000000000000000000000012273d52677c816b56412c16010000000000000000000000000000000000000000000000000013293e53687e7f6a55402a1500000000000000000000000c2035485a697e846f5f4d3b2a180400000000000d23384d6278846f5443301c070000000000000000000000000918253039464b463929170300000000000b20354a607584797f6a5746331e0e0000000000000000000000000000000003162839464b5e5c5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000182d42586d8278624d38230d0000000000000000000000000000000000000c2035495a718576604b36210b0000000000000000000000000b21364b607687725847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d806a55362513000000000000000000000000000000000000000000041a2f44596f847b66503b26110000000000000b20354b6075615847331f0a00000000000000000000000000000f243a4f6479846e59442f19000000000000000000000000000000000000000000000000000013293e53687e7c67523d271200000000000000000000000000000000000b203448596b807d67566176836e59442e19000000000000000000000000000000000000000f253a4f647a836e59442e19000000000000000000000000000000000000000000000000000011263b51667b826d58422d18000000000000000000000c1c30414d62788878624d41301d0c00000000000011273c51667c806b56362513000000000000000000000000000008131c29333633291b0b000000000000071c3043547084708276614c3c2c1808000000000000000000000000000000091e32465761737170707070707070707070707070707070707070707070645c4a36210d000000000000000000000000000000000000000000000000000000000000152b40556a807a65503b25100000000000000000000000000000000000000e23384d6378846f5645321e09000000000000000000000000091e324557718676614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479846f5443301c07000000000000000000000000000000000000000004192e44596e837b66513c2611000000000004192e43596e8376614c37220f00000000000000000000000000000c21374c617686725c47321d000000000000000000000000000000000000000000000000000011263b51667b7f6a543f2a1500000000000000000000000000000000071a2d3d4d62778573604a587084705a392917030000000000000000000000000000000000000d22374d627786715c39291703000000000000000000000000000000000000000000000000000e23394e6378856f5a36261401000000000000000004182a3a4d5f6f847e695a483523130000000000000013293e53687e7e69543e2914000000000000000000000000000000000b171e211e170b00000000000000001325365a6f847479806a5a493625130000000000000000000000000000000c21364b617688868484858585858585858585858585858585858585858579644e39240f00000000000000000000000000000000000000000000000000000000000013283d52687d7d68533d281300000000000000000000000000000000000013283d53687d7f6a553828160200000000000000000000000003162839576c817b66513625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758874604a35200b0000000000000000000000000000000000000000041a2f44596f847b66503b261100000000000013283e53687d7e68533d2d1a07000000000000000000000000000a1f3347587388735e49331e00000000000000000000000000000000000000000000000000000e23394e6378826c57422d17020000000000000000000000000000000821364a5b6d827b6554435a7085705746331e0a0000000000000000000000000000000000000b20354a607588735746331e0a000000000000000000000000000000000000000000000000000c21364b617687725443301c0800000000000000000b1f334758677d8572604a3c2b190500000000000000152a3f546a7f7d68523d28130000000000000000000000000000000000030a0c0a03000000000000000000182d42586d82776d8278635443301c110200000000000000000000000000091e324657657b8372707070707070707070707070707070707070707070645c4a36210d00000000000000000000000000000000000000000000000000000000000010253b50657a806a55402b1500000000000000000000000000000000000417293a586d827a654f3a2510000000000000000000000000000011263b50667b826c5443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556f8478634e39230e0000000000000000000000000000000000000000051a2f455a6f847a65503b25100000000000000d22374c627785705b4a362110000000000000000000000000000a1e3346577388735e49341e00000000000000000000000000000000000000000000000000000c21364b6176846f5a442f1a00000000000000000000000000000008182f404e6379846e5d4b36596f8476614c36210c000000000000000000000000000000000000071c304354728776614c36210c00000000000000000000000000000000000000000000000000091e324657738875604b35200b000000000000000b1b2f404c61778879635443301e0e0000000000000000162b40566b807c66513c27110d0b0500000000000000000000000000000000000000000000000000000000152b40556a807a64778372604a3f2e201103000000000000000000000000031628394b5d697e7f6a5e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4e4a3d2d1a070000000000000000000000000000000000000000000000000000000000000d23384d6278826d58432d1800000000000000000000000000000000000a1f334658728675604b36200b00000000000000000000000000000b20364b60758774604a35200c000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637546a7f7e69543a2a170400000000000000000000000000000000000000001325365b708679644f39240f0000000000000b1f3447596e8379634e3e2e1b0b0000000000000000000000000c21364c617687725d48321d0000000000000000000000000000000000000000000000000000091e3246577085705b3b2a180400000000000000000000000000011426364c5e6f8479634e3f41576c8179634e39240e000000000000000000000000000000000000001325365a6f8479634e39240e00000000000000000000000000000000000000000000000000031628395b718677624d37220d000000000000031628394c5e6d827f6a5b49362513000000000000000000162b40556b807c67513c2825221f1817130f0b09020000000000000000000000000000000000000000000013283d52687d7c67687d7e695d4b3e2f1e160c0b0d12100e080000000000000b1b2e3f4f606d827c665a49394545454545454545454545454545454539362d1f0f000000000000000000000000000000000000000000000000000000000000000b20364b6075846f5a37271501000000000000000000000000000000000c21364c617686715645321d090000000000000000000000000000091d3245566d827a65503a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e6378846f5847331f0a00000000000000000000000000000000000000071c304354728777624d38220d00000000000005182a3b4e6479836e5c4b3929170300000000000000000000000e23384d637886705b46311b0000000000000000000000000000000000000000000000000000031628395b7085705947341f0b00000000000000000000000000081c304354667b826c5b49363f54697f7b66513b261100000000000000000000000000000000000000182d42576d827b66513c26110000000000000000000000000000000000000000000000000000192e44596e837a654f3a2510000000000000091e324657667b8673604b3d2c1808000000000000000000152a3f546a7f7d6752403d3a37342a2d2924201d15100b090200000000000000000000000000000000000010253b50657a7e695f6d827b655c4b3f32282120232725221b10020000000000112132424b607584786357463230303030303030303030303030303024211a0f0100000000000000000000000000000000000000000000000000000000000000081d3144557085705544311d080000000000000000000000000000000010253a50657a826d58382815020000000000000000000000000000021528384f657a836e5947341f0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b718676614c372110000000000000000000000000000000000000000b20354a60758975604b36200b000000000000000d21364a5c6e837a645746331e150a00000000000000000005182a3b52677c826d58422d18000000000000000000000000000000000000000000000000000000192e44596e8377614c37220c000000000000000000000000031628394b60738577624c3d2c3c51677c7e69533e291400000000000000000000000000000000000000152a3f556a7f7e69533e29140000000000000000000000000000000000000000000000000001162c41566b817c67523d2712000000000009192e3e4b61758779645544311f0f0000000000000000000013283e53687d7e695855524f4c473b423e3a36322826201d150b09020000000000000000000000000000000e23384d6378816c566075847a655d4b45393636383c3a372e2110000000000003141e32455662788475614b4332211b1b1b1b1b1b1b1b1b1b1b1b1b0f0d07000000000000000000000000000000000000000000000000000000000000000000021527375a708575604b35200b0000000000000000000000000000000014293e54697e7e69543f2914000000000000000000000000000000000a23374b5d718677614c3b2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d556a7f7e68533e2e1b070000000000000000000000000000000000000d22374d627787725645311d0900000000000000071a2d3d4d62788575614b4531271a0f0600000000000005131f3448596e837c66513c2711000000000000000000000000000000000000000000000000000001162c41566b8179644f3a240f000000000000000000000000091e324557687d7f6a594834243a4f6479806b56412b160100000000000000000000000000000000000012273d52677c816b56412c16010000000000000000000000000000000000000000000000000014293e54697e7f6a553f2a1500000000021527374a5c6c81806b5c4a372715010000000000000000000011263b50667b816f6d6a686562595a57534f4b45383b363228201d150a05000000000000000000000000000b20364b6075836e59576176837b6b60574f4c4b4d524f4b3f2e1b08000000000003162838485a657b826e614f3f2f1e0e000606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8378624d38230d00000000000000000000000000000002172c42576c817b66513c261100000000000000000000000000000000081c2e3f52687d806b5947341f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000f22374d627786715c4a36221000000000000000000000000000000000000010263b50657b846f5a3827150200000000000000000f20344859677c826d634b45382c20190f0d0b0a0c0e192030414c62778875604b36210b00000000000000000000000000000000000000000000000000000014293e54697e7c67513c2712000000000000000000000004182a3b4b60758675614b3b2a22374c6177836e59432e190000000000000000000000000000000000000010253a4f657a836e59442e19000000000000000000000000000000000000000000000000000011263c51667b826c57422d1700000000081d314455647a8674604b3e2d190900000000000000000000000e23384d6378888482807d7a776f6f6c6864605656504b45383632281f180d010000000000000000000000091d3145566e836e59475861758280756b6461606267655d4b37220e0000000000000a1a2b3c4c5d697f7f695d4c3c2b1a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b807a65503a2510000000000000000000000000000000051a2f455a6f8479634e39240e00000000000000000000000000000000001120354b60748677614c3f2e1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596e837a644f3e2d1b070000000000000000000000000000000003162839556a7f7f6a55402a1500000000000000000005192b3b4d5f6b80816c6056493d352c2422201e21232b34414d5f6d827e695745321e0900000000000000000000000000000000000000000000000000000011263c51667b7f69543f2a1400000000000000000000000b1f3447596a7f7d685746321d1f3447597084705a392816030000000000000000000000000000000000000d22374d627786715b39291603000000000000000000000000000000000000000000000000000f24394e6479846f5a36251300000008182c3d4b6074867a65564532200f0000000000000000000000000b20354b60758673777a7d80838484817e79756f6b656056514b4538342a1d14090000000000000000000002152738596e836e593a4757616d7c85807a7675787c7b654f3a2510000000000000000e1e2f3f4f616d827b655a48382816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d7d68523d28130000000000000000000000000000000417293a5d728776604b36210b0000000000000000000000000000000000081d314455677c816c5d4b3828160200000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4f657a836e5c4a36221300000000000000000000000000000000091e3245576f847b65503b2610000000000000000000000d1d304150626b808174635b4d493c3a37353336393c484d5f677d8574604b392816030000000000000000000000000000000000000000000000000000000f24394e6479816c57412c1702000000000000000000061a2c3d4c61778574604b392816182a3b5a7085705745321e090000000000000000000000000000000000000b20354a607588735746321e0a000000000000000000000000000000000000000000000000000c21364c617687725443301c070000132536495b6a7f816c5d4b38281501000000000000000000000000081d3144557085786265686a6d6f75787c808484807b756e6760564c473b3126190c000000000000000000000f24394e6479644e3939464b5f67747a808383827e77614c37220c0000000000000000112132434b61758478625645321e140300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b806a55402b150000000000000000000000000000000a1f3346587388735745321e090000000000000000000000000000000000011426374d5f6e847a645645321e14050000000000000000000000000000000000000000000000000000000300000000000000000000000d22374b5d6f8479644f41311e0e0000000000000000000000000000000b21364b60768875604b36200b00000000000000000000001223334451626b7e85796c635a544f4c4b464c4e535a626d7d8677625544311b0a000000000000000000000000000000000000000000000000000000000c21364c6176846f59442f1a00000000000000000000082135495b6c817b665544311b0b1a2f445a6f8476604b36210b000000000000000000000000000000000000071c304354728776614b36210c000000000000000000000000000000000000000000000000000a1f334658738875604a35201111111c30435463798775614b3f2e1a0a0000000000000000000000000001142637556b807d6752525558546063676b6f75797f84837c756b62594b44372a1c0c0000000000000000000d21364a5c645c4a362932414d5460656b6e6e6c68615947341f0b000000000000000003151e32465763788475604b423221110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e6378826d58422d180000000000000000000000000000000c21364c617687725d39281603000000000000000000000000000000000000091930414d62788574604b42322313000000000000000000000000000000000000000000000000040a0c180c0a030000000000000000081b2e3f4f647a846f5f4e3c2b1a0a00000000000000000000000000061a2c3d51677c836e5645321d0900000000000000000000000516263444516068798582786f69646260576163686e7882847762594737271500000000000000000000000000000000000000000000000000000000000a1f3346587085705b3a291704000000000000000008182e3f4e6379846f5e4c37261400172d42576c8278634e39230e000000000000000000000000000000000000001325365a6f8479634e39240e000000000000000000000000000000000000000000000000000417293a5c718677624c37272727272b3b4a6072857b66574632211000000000000000000000000000000010253a4f657a826d57454036434a4d51565560646a6f777e848077696055473a2a1c0c0000000000000000071a2d3e4a4e4a3e2d1a1e3036434b5056595957534c473b2a180400000000000000000003162839495a667c826d614f3f2e1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6076846f5a3726140100000000000000000000000000000e23384e637885705b46301b0000000000000000000000000000000000000000122034485a677d826d604f41311c13080000000000000000000000000000000000000000000c181f222e211e160b00000000000000001022364a5c6c817d685a48382819090000000000000000000000000d2135495b6f847b66503828150200000000000000000000000008162634424e5b63707b84847f7977757076787d83857c6f6259483b2a190900000000000000000000000000000000000000000000000000000000000417293a5b7085705847331f0a00000000000000001325364b5d6e8379644e402f190900152a3f546a7f7b66503b261100000000000000000000000000000000000001152737576d827b66513c2b190900000000000000000000000000000000000000000000000000192f44596e8479644f3c3c3c3c3c364859687e826d5e4c39291e160a04000000000000000000000000000b20354a60748776604b36253035383c37444b4f545861686f7a837f736158473a29170400000000000000000f202d3639362d200f12182630353b404344423d37342a1d0c00000000000000000000000b1b2c3c4c5e6a7f7e695d4b3c2b1a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245567085705544311d0800000000000000000000000000000f243a4f6479846f59442f1a040000000000000000000000000000000000000005192b3c4d5f6b807e695f4d413025180d010000000000000000000000000000000000000d1c2a3437433632291b0b00000000000000071b2d3e4b617586786256453727190c000000000000000000000d1d2f3f4e63788773604a35200b0000000000000000000000000000081624313d494e5d656f767c8183848584827e7870675f4c483b2b1d0d00000000000000000000000000000000000000000000000000000000000000192f44596e8376614c37210c00000000000000071c304354657a826d5c4a362212000012273d52677c7e68533e2913000000000000000000000000000000000000081d3144556b807f6a5a4937271501000000000000000000000000000000000000000000000002172c41576c817c67525151515151515462778776614c403b3632281f180c020000000000000000000000071c3043546b817c67523e2e1c202327263135393a474c535d656f7e8476615846331f0f0000000000000000010f1a2124211a0f010008141c20252b2e2f2d28221f180c000000000000000000000000000e1e2f404a6072837b655a4838281602000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628385b708575604b35200b000000000000000000000000000010253a4f657a836e59442e190400000000000000000000000000000000000000000d1d30414b6073827d675f4a43362b1c140801000000000000000000000000000004101d2b3a474c584b463929160300000000000000101e334657647a8574605544372a1c1307000000000000020e1c2b3b4c5d6e837d675443301c0700000000000000000000000000000006141f2c363f4c505861676c6e6f706f6d68635b524d41342b1d0d0000000000000000000000000000000000000000000000000000000000000002172c41576c8179644e39240f000000000000021528384a60738578624d3e2d1b0400000f253a4f647a806b56402b160100000000000000000000000000000000001325364b6074868578625544311d1100000000000000000000000000000000000000000000000014293f54697e7f69666666666666676873837c67605557514b4538332a1d150900000000000000000000001325364e6378846f5c4b3722110e12141d20242a33373f4b5060687a8576614c3d2c1a06000000000000000000070d0f0d070000000001080b1016191917130c0b04000000000000000000000000000000121c30435461758578625645321e1403000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8377624d38220d000000000000000000000000000010263b50657b836d58432e1803000000000000000000000000000000000000000000131d3144556073827d6b6054483b30261c14080600000000000000000000060b171f2e3b4859616d615746321e0a00000000000000031729394a5c687d82736055473a30201c130e0b090b0d161e2c3a4859657b8573604b3625130000000000000000000000000000000000010f1a212f383a474c5156595a5b5a58534e493d393020180d00000000000000000000000000000000000000000000000000000000000000000014293f54697e7c66513c2711000000000000091d324556677c806b5a483420100000000d22374d6277836e58432e190000000000000000000000000000000000071c304354677d81798573604b3f2e1c0c000000000000000000000000000000000000000000000012273c51677c847c7c7c7c7c7c7c7c7e84837a78756f6c6660564c473a3127190e00000000000000000000082135495b6e837a644f3f2f1c0c0001080b0f181f222e37424e5c657b826d5b4935210c00000000000000000000000000000000000000000000010404020000000000000000000000000000000000000000132536465763798474604b42312110000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b807a65503a2510000000000000000000000000000010263b50657b826d58432d1803000000000000000000000000000000000000000000011426374455607381807262594b43363026201913100d0b09030a0c0e11192029333f4b5962778276614b36210c00000000000000000b1b2d3e4e5f697e827361594d4135302523211e202228323c4958627786796354433018080000000000000000000000000000000000000006111c232a33373c4143454544423e39362c251e13050000000000000000000000000000000000000000000000000000000000000000000012273c51677c7e69543e2914000000000004172a3a4b60758576614c3c2b19020000000b20354a607584705a38281502000000000000000000000000000000000b20354a60738678697f806b5d4b3a291704000000000000000000000000000000000000000000000f24394f6479877f7f7f7f7f7f7f7f7f7f7f80828484817b756a61584b44372c1e11030000000000000000061a2c3d4f6479846f5d4b3a29170400000000040a111c23313e4b5d6c8178634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182939495b667c826d604e3f2e1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7d67523d2812000000000000000000000000000010253a50657a836d58432e180300000000000000000000000000000000000000000000091927374455606c7e83776860544b4336352c282522211e161e2123262c353a464c5d6577857b665746321e0a000000000000000000102031414f60697e8477675f514a4336383632353738454b5a6376857c665b4936261400000000000000000000000000000000000000000000080c171f21272c2e30302f2d2923211a0f0a0100000000000000000000000000000000000000000000000000000000000000000000000f24394f6479816c56412c1701000000000a1f334758697f7e695746331d0d00000000071c3043547085705645321d09000000000000000000000000000000081c2f3f51667c826d6072847b655846331f13000000000000000000000000000000000000000000000c22374c617787726969696969696969696a6b6d6f6f787e8480776b6055493c2e21110200000000000000000e22364a5c6d827b655846331f14000000000000000814202e3f4f64797f6a55402a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3d4c5e6b807e685d4b3b2b1a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b7f6a55402a1500000000000000000000000000000f253a4f647a836e58432e1903000000000000000000000000000000000000000000000009192737444b606979857d736760544d493c3e3a373632293236383c3c494d58616b7a857a665e4c3929160300000000000000000002132332424f60687a867c6f666054514d4b454a4c5056606978857d675e4d3d2c1808000000000000000000000000000000000000000000000000040a0c1217191a1b1a18130e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000c22374c6177836e59442e190000000006192c3c4c61768574604b3929170000000000001325365a6f8475604b36200b0000000000000000000000000000000e23384c5d708578635462778676614c42311f0e0000000000000000000000000000000000000000000a1f3347587389756054545454545454545556585a5b6369747b838074635a4b3f2e20100000000000000000071b2d3e4c62778676614c42321c1308000000000000021020354b6075836e58432e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30404b6072837b655948382715020000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e6379826d58422d1800000000000000000000000000000f24394f6479836e59442e190400000000000000000000000000000000000000000000000009192731424f5c64747e857c746a635a5753504d4b4539464b4e51555a626b76808478645c4c402f1b0b000000000000000000000005142432424e5d657580847c746c676360566062666c757f867a675f4d40301f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347587084705b392917030000000c2035495a6c817c665544311b0b000000000000182d42576d8278634d38230e0000000000000000000000000000071b2e3e50657b836e5b4959667c836e604e3d2c1909000000000000000000000000000000000000000004182a3a5c718677624d3f3f3f3f3f3f3f3f40423d494e5460666e7d8478655d4b3e2d1c0c0000000000000000101f344759677d836e614f423025180e030000000000081d3144556e836e59432e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121c30435461768577625645311d130200000000000000000000000000000000000000000000000000000000000000000000000000000c21364b6176846f5a36261401000000000000000000000000000e24394e6379846f5a452f1a050000000000000000000000000000000000000000000000000009151d323d4a556069767f858078706c68656260575b576163666a707880877e72625a4b3e2f221100000000000000000000000000061424313f4b57616b778085817c78767075777b81867f75645d4d41302212010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e131517171614110c0a04000000000000000000000000000000000000000004182a3a5b7085705746331e0a0000071b2e3e4d6278846f5e4d37271500000000000000152a40556a7f7b65503b261000000000000000000000000000000d22374b5c6f847a644f3d4c5e6c827d685b493727150200000000000000000000000000000000000000001a2f445a6f847a654f3a2a2a2a2a2a2a2a2b2d2c3636434a505f6878857b655c4a3a2917040000000000000005182a3b4d5f6c817e69614a43362b1e170e0c0b0b0d1621364a5b6e836e59442e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636465863798474604b4231201000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3246577185715443301c08000000000000000000000000000e23384e637886705b46311b00000000000000000000000000000000000000000000000000000002141f2d37444b57616a747b8285827d7a777670707076787b8085857e75686054483c2e20110300000000000000000000000000000613212e39464b59626b70797e8284858584807b756a60564b3f30231304000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0f1a2123282a2c2c2b2926211f170c0a040000000000000000000000000000000000001a2f44596f8476614b36210c00000922374b5c6e837a644f403019090000000000000012283d52677d7d68533d281300000000000000000000000000071a2d3d4f647a846f5c4a36404b60758679635544311d110000000000000000000000000000000000000002172c42576c817c67523d2714141414141516181a21253035414e5a6276857a645847331f0f00000000000000000d1d30414b6074837f6a6054483c332924212021222832414e6379806b56412b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818293a4a5b677c816c604e3e2e1d0d00000000000000000000000000000000000000000000000000000000000000000000000000031629395b708575604b35200b000000000000000000000000000d22374d627787725c38281603000000000000000000000000000000000000000000000000000000010f19273139464b5560666d70797d80838484858584827f7c77706860574a43362b1d10020000000000000000000000000000000002101b28323b484c555c64696d6f70706e6b6560554b45382e2013050000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e212c35383d3f4142413e3b37332a221f180c0400000000000000000000000000000002172c42576c8179634e39240e00091930404f647a836e5c4b372212000000000000000010253a50657a806b55402b16000000000000000000000000000c21364a5b6e837b65503e2e324557647a8574604b3f2f1c0c00000000000000000000000000000000000000152a3f546a7f7f6a553f2a15000000000001000608131c20313c495862788676614c3d2d1a070000000000000000131d3145566074837f72625a4b4639393635363739464b5f6d8178634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3d4d5f6b807d685c4b3b2a190900000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8377624d38220d000000000000000000000000000b20364b607589745645321e09000000000000000000000000000000000000000000000000000000000009151d293337444b51585b63676b6e6f7070706f6d6a666158534b45393025180d00000000000000000000000000000000000000000b161e2a34373e4a4f54585a5b5b5956504b443732281a1002000000000000000000000000000000000000000000000000000000000000000000000000000000000005131b2932363d494e535556575654504c473a37342a1f170c000000000000000000000000000000152a3f546a7f7b66513b2611021527374d5e6f8478624d3e2e1b0400000000000000000d22384d6277826d58432d1800000000000000000000000006192b3c4e637986715d4c382028394a5c697f806b5d4b3a2a170400000000000000000000000000000000000012273c52677c826c57422d170000000000000000000007131e2b3a485a677c826d5b4a36210b00000000000000000215273845566073808478696157524e4c4a4b4d5057616b7e816b5b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30414b6073847a64594737271502000000000000000000000000000000000000000000000000000000000000000000000001172c41566c817a654f3a251000000000000000000000000000081d314455748976604b36210b000000000000000000000000000000000000000000000000000000000000020b171e2631353b3d4a4e5255585a5b5b5b5a5855514c473a3632281c130800000000000000000000000000000000000000000000030d181f222d36393e4245454544403b3631271e160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000816233039464b555b63686a6c6c6b69666158544c473a332a1c12000000000000000000000000000012273c52677c7e69533e2914081d314455667c816b5a493520100000000000000000000b20354b6075846f5a3727150200000000000000000000000b2035495a6d827c67513f2f1c1b2d3e4a6072847b655847331f140100000000000000000000000000000000000f253a4f647a846f5a3625130000000000000000000000000e1c2b3c4d5f708579634e3929170300000000000000000a1a27384555606b7b867f766d676361606062666b76808273604b3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121d31445561768477625544311d1302000000000000000000000000000000000000000000000000000000000000000000000014293e54697e7d67523d281200000000000000000000000000021527375c718678634e38230e00000000000000000000000000000000000000000000000000000000000000000309141d20262d36393d4043444545454542403c37332a211e160a0000000000000000000000000000000000000000000000000000050b101b2224292d2f30302f2b26201d15090300000000000000000000000000000000000000000000000000000000000000000000000000000000000007162633414d57616a71787d7f8181807e7b766f6961594c473a301c13080000000000000000000000000f253a4f647a806b56412b161729394b60748576614c3c2c1902000000000000000000081d3144557084705544311d080000000000000000000005182a3b4d62788774604b352011101c30435462778676614c42311f0f00000000000000000000000000000000000d22374c627787725443301c070000000000000000000000000e1e304150667b826d5746331e0a0000000000000000000a1a2737444b5d65737d85827c79767576777b81867d6d605544311f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374758647a8474604b41312010000000000000000000000000000000000000000000000000000000000000000000000011273c51667c7f6a55402a150000000000000000000000000000192f44596e847b66503b26110000000000000000000000000000000000000000000000000000000000000000000001080b111a2124282b2e2f3030302f2d2a27221f180c0903000000000000000000000000000000000000000000000000000000000000070d0f14181a1b1b1916100b0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000315263344505f67767f86837e7b7979797c7f83847f776c61584d413025180800000000000000000000000d22374c6277836e58432e191e334657697e7e695847331e0e00000000000000000000011426375a6f8475604b36200b000000000000000000000b1f3447596c817d685443301c08001325364859667c836e604e3d2c1a0a000000000000000000000000000000000b20354a60758975604a35200b000000000000000000000000001320354b60748776614b36210c000000000000000000000a1927313f4b54606770777d8183848482807a74675f4b44372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3a4a5c677d816c5f4d3e2d1c0c000000000000000000000000000000000000000000000000000000000000000000000f24394e6479826d57422d180000000000000000000000000001162c41566b817e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000070c0e1216191a1b1b1b1a1815110c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121334450626b7d877f766e686664636466696e757b838176675f4a4336251808000000000000000000000b20354a607585705a3828192b3c4c61768574604b3a2917000000000000000000000000182d43586d8278624d38230d0000000000000000000417293a4c62778775604b362614010008182b3b4c5e6c827e685b4938281502000000000000000000000000000000071c304354728777624c37220d00000000000000000000000000081c3043546d827b66513b2611000000000000000000000009151d2f36434b525962686c6e6f6f6d6a6560554d41312719090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3e4d5f6c817d675c4a3a2a19090000000000000000000000000000000000000000000000000000000000000000000c21374c6176846f5a362614010000000000000000000000000013283d52687d826d583a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e12151617171613100b090200000000000000000000000000000000000000000009192e3f50626b8084776a615753514f4e4f51545560666f7b847c6c60544336251300000000000000000000071c3043547085705645322034485a6b807c675645311c0c000000000000000000000000152b40556a807a65503b25100000000000000000000a1f3346586b807f6956453118080000000d1d30404b60758679635645321d12000000000000000000000000000000001325365a6f8479644f3a240f000000000000000000000000000114263652677d806b56402b160000000000000000000000000111182630353b484d5356585a5958554f4b4437301d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2030414b6073847a6458473726140100000000000000000000000000000000000000000000000000000000000000000a1f3347587185715443301c08000000000000000000000000000e23394e637886715846331f0a0000000000000000000000000000000000000000000000040b0c16140e040000000000000000000000000000000000070b07000000000000070b070000000000000000000000070b070000000000000000000000000000000000000000000000000000000000000000040a0e1a2123272a2c2d2c2b2825211e160b08010000000000000000000000000000000000011527374b5d6b80837562594b46393c3a393a3c37444b515e6674818172605443301c12000000000000000000001325365a6f8476604b362d3e4d62788573604a3827150000000000000000000000000013283d53687d7d68523d28130000000000000000031628394c61768876614b3827150000000000121e324557647a8574604b402f1d0d000000000000000000000000000000182d42576d827c67523c271200000000000000000000000000000f253a4f647a836e59442e19000000000000000000000000000008141c202b34373d4143454443403a35312719130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001131d31445561778576615544311d13010000000000000000000000000000000000000000000000000000000000000004172a3a5b718675604b35200b000000000000000000000000000b20354b60758976614c36210c000000000000000000000000000000000000000000000c181f222b29211608000000000000000000000000000008131c201c1308000008131c201c13080000000000000008131c201c130800000000000000000000000000000000000000000000000000000000010c181f222c35383c3f414241403e3a363228201d140900000000000000000000000000000000081d314455657b86756157483b32282624242427273136404c55606c7f8272604a40301c0c000000000000000000182d42576d8278634e38364a5c6d827a655443301a0a0000000000000000000000000010253b50657a7f6a55402a150000000000000000091e3245576a7f806b5746331a0a0000000000031628394a5c697f816c5e4c3b2a18080000000000000000000000000000152a3f556a7f7f69543f2a1400000000000000000000000000000d22384d627785705b46301b00000000000000000000000000000001080d182022282c2e2f2f2d2b25201d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374759647a8473604b41301f0f00000000000000000000000000000000000000000000000000000000000000001a2f44596f8477624d37220d00000000000000000000000000081c3043546f847a65503b25100000000000000000000000000000000000000000000c1d2a3437403d332616040000000000000000000000000818253035302518080818253035302518080000000000081825303530251808000000000000000000000000000000000000000000000000000008141c2a33373d494e52555657575653504b453835312619120500000000000000000000000000000b20354b6074877a645746392b1e16110f0e0f11151d202f37444b61697e806b5e4d3a2917040000000000000000152a3f556a7f7b65503b404e6479836e5d4b36251300000000000000000000000000000e23384d6378826d58422d1800000000000000021527374b60758777614c392917000000000000000a1b2d3e4a6072847b665947362513000000000000000000000000000012283d52677d816c57422c1702000000000000000000000000000c22374c617786715c47311c000000000000000000000000000000000000050b0d1317191a1a1815100b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f161616161616161616161616192a3b4a5c687d806b5f4d3d2d1c0c00000000000000000000000000000000000000000000000000000000000002172c41576c817a654f3a2510000000000000000000000000000114263654697e7f6a553b2b18050000000000000000000000000000000000000004182a3b474c56514433210e000000000000000000000000132536434a43362513132536434a433625130000000000132536434a43362513000000000000000000000000000000000000000000000000000b1826303a474c555b63676a6b6c6c6b68656056524b44372f1f180d00000000000000000000000004172a3a52677c836e5c4b39281b0d030000000000020812192731434f616e837c665846331f0c000000000000000012283d52677d7d6853374c5e6f8478634e3f2e180800000000000000000000000000000b20364b6075846f5a37261401000000000000081d314455697e816c5947341b0b0000000000000000101c30435462778677625443301c0f0000000000000000000000000010253a4f657a846f59442f1a00000000000000000000000000000d23384d627886705b46311b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b22252b2b2b2b2b2b2b2b2b2b2b2b2b2b2d3e4e606c817d675b4a3a291808000000000000000000000000000000000000000000000000000000000000142a3f54697f7c67523d271200000000000000000000000000000e23384e63788570594834200b000000000000000000000000000000000103000b1f344759616b62513d29140000000100000000000000071c304354605443301c1c304354605443301c07000000071c304354605443301c0700000000000000000000000000000000000000000000000b1b2936434b58616a71787c7f818281807d7a766f6760554c40342a1d0f01000000000000000000000a1f33475870867a654f3e2e1b0b0000000000000000000009151d32434c61768676614c3a2a18040000000000000010253a4f657a806b554455667b816c5b49352111000000000000000000000000000000091d3145567084705544311d080000000000011426364b60748778624d3a2a18000000000000000000001325364859667c8472604a3d2d1a0a0000000000000000000000000d22384d627786715c3a2a1704000000000000000000000000000f243a4f6479846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a40404040404040404040404040404040424b6074847963584736261401000000000000000000000000000000000000000000000000000000000012273c51677c7f6a553f2a1500000000000000000000000000000c2135495b718677624d37220d000000000000000000000000000006101618130c22374c6177806b56402b16080b1416140e04000000000b20354a6075604a352020354a6075604a35200b0000000b20354a6075604a35200b000000000000000000000000000000000000000000000b1b293a46546069778087847f7b7a79797a7d8084847c74665e4c473b2d1f10030000000000000000000c21374c617786725d4b37201000000000000000000000000001141e334657687d816b5847331f0a000000000000000d22384d6277836d584b60748577614c3d2c1a03000000000000000000000000000000021527385a708575604b35200b0000000000081c304354687d826d5a48351c0c0000000000000000000008182b3b4c5e6c817e695c4a3828160300000000000000000000000b20354b607589735847331f0a0000000000000000000000000316283852677c826c57422d170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3e4b4f5555555555555555555555555555555555555562778576615443301c0800000000000000000000000000000000000000000000000000000000000f243a4f6479826d57422d180000000000000000000000000000061a2c3d556a7f7e68533b2a18050000000000000000000000000917232a2d282020354b607584705a3727151c202a2b29211608000000172c41576c816c57412c2c41576c816c57412c17000000172c41576c816c57412c170000000000000000000000000000000000000000000919293a465861737f877f776f6a6664636465676b70777f857b6f62594a3d2e211000000000000000000011273c51667c826d573f2e1b0200000000000000000000000000031729394b60748677614c37220d000000000000000b20354b607584705a57687d7f6a5947341f0f0000000000000000000000000000000000182e43586d8377624d38220d00000000000b20354b60738779634e3c2b190000000000000000000000000d1d30404b60758679645645321e120000000000000000000000081c304354728776614c37210c000000000000000000000004111e3245566d827c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c646b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b7a8372604b35200b00000000000000000000000000000000000000000000000000000000000d22374c6277846f5a3625130000000000000000000000000000000f23384d6378846f5947341f090000000000000000000000061727353f423d35303144557085705544312630353f413d342616040000182d43586d826d583b2a2d43586d826d583b2a18040000182d43586d826d583b2a18040000000000000000000000000000000000000001152737465861768483776a615855514f4e4e4f525659626a77818477635b4b3f2e1e0e0000000000000000162b40566b807d68523d28130000000000000000000000000000000b1d314455697e7f69543b2a1805000000000000081c3043547085705561758575604b3a2a18010000000000000000000000000000000001162b40566b807a654f3a251000000000091c2f4051677c846f5b4a361e0e00000000000000000000000000121e324557647a8675604b40301d0d00000000000000000000011426365a708579644f39240f0101010101020300040a0c181f2e3f4b60758876614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8080808080808080808080808080808080808080808086806a55402b1500000000000000000000000000000000000000000000000000000000000b1f3447597186715443301c0700000000000000000000000000000c2035495a6f8477624c3727150200000000000000000000102335455258524a4336375a6f8475604b3636434b5456514434210e0000192e43586e826e5947342e43586e826e5947341f0b0000192e43586e826e5947341f0b00000000000000000000000000000000000000081d3144556176857f6e61584c473a3c3a39393a3d3b484d58616c7a8679655d4b3c2c190900000000000000182d42586d827a65503b2510000000000000000000000000000000021527374c627786715947341f0b000000000000011426365a6f8475606a7f7d685645321c0c00000000000000000000000000000000000013283e53687d7d67523d2812000000000f23384c5e71867a654f3d2d1a0000000000000000000000000000031628394a5c697f816c5e4c3b2b180800000000000000000000182d42586d827c66513c27171717171717171819181f222a333f4b5d6b80816c5846331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61777a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a644e39240f000000000000000000000000000000000000000000000000000000000005182a3b5c718675604a35200b000000000000000000000000000006192c3c52677c7f6a5544311d0800000000000000000000162a3f52636d6860544a3e586d8278624d3c495460696b62513d29140000182d42576d8277614c372d42576d8277614c37220c0000182d42576d8277614c37220c000000000000000000000000000000000000011426364b607384806a614c473a332a2625242425282b343a474c5c6478857b655b4937271502000000000000192f44596e8379644e39240f00000000000000000000000000000000091f344759708577624c37220d00000000000000182d42586d827862778573604b3828160000000000000000000000000000000000000011263b50667b7f6a553f2a15000000081b2e3f50667b85705d4b371f0f0000000000000000000000000000000a1b2d3e4a6072847c66594836261401000000000000000000152b40556a807e69543f2c2c2c2c2c2c2c2c2d2e2a34373a474c5d657b8776614c3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344759616565656565656565656565656565656565656565656565645c4a36210d0000000000000000000000000000000000000000000000000000000000001a2f445a6f8477624d37220d0000000000000000000000000000000e20354b60748575604b36201100000000000000000000182d42586d827d73645c4c556a807a65504e5a62737f806b56412b160100152b40556a807a644f3a2b40556a807a644f3a250f0000152b40556a807a644f3a250f000000000000000000000000000000000000081c3043546b80836e625043332a1f17110f0e0f101218202a333e4b5a62778679635544311d0b0000000000001b30455a708577624d38220d0000000000000000000000000000000005182a3b566c817c66513c271100000000000000152b40556a807a6c827b655443301a0a000000000000000000000000000000000000000e23384e6378826d57422d180000000d22374b5d70857b66513f2e1b0100000000000000000000000000000000101c30435462778677625443301c1000000000000000000013283d52687d816c5641414141414141414142443a474c5158616c7b8779635846331b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b474c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e4a3e2d1a07000000000000000000000000000000000000000000000000000000000002172d42576c827a644f3a250f000000000000000000000000000000081d3144556a7f7c6752402f18080000000000000000000b20364b60747f857a6d6159687d7d6852606878848074604b36200b000013283e53687d7c67523d283e53687d7c67523d2712000013283e53687d7c67523d27120000000000000000000000000000000000000b20354b60738176614c43331f180c04000000000000050c181f2e3c4859657a8574604b3929170300000000001a2f445a6f8478634e38230e000000000000000000000000000000000013283e53687d7f6a543f2a150000000000000013283d52687d7d79846f5d4c36261400000000000000000000000000000000000000000b21364b6076846f5a3625130000071a2d3d4f647a86715e4c3821100000000000000000000000000000000000001325364859667c8473604b3e2d1b0b000000000000000010253b50657a846e5956565656565656565758595a5961666e77818679635b4a3a291700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d2a34373a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39362d200f00000000000000000000000000000000000000000000000000000000000000152a3f556a7f7c67523d2712000000000000000000000000000000011527374c6176846f5e4c362513000000000000000000091d324556606a7883827769657a806a626f7d867a6b605645321d09000011263b50667b7f6a553f2a3b50667b7f6a553f2a15000011263b50667b7f6a553f2a15000000000000000000000000000000000000081c304354606b615846332515040000000000000000000004101e2b3b4b5d6a7f7f695746331e0a0000000000192e43586e837a65503a2510000000000000000000000000000000000011263b50667b826c57422d170000000000000010253b50657a808379634e3f2f18080000000000000000000000000000000000000000091e3245567084705443301c07000c21364a5b6f847d6752402f1d0200000000000000000000000000000000000008182b3b4c5e6c817f695c4a39281603000000000000000d23384d627886716c6c6c6c6c6c6c6c6c6c6d6e6f71777c83867d73635b4a3d2d1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f22252525252525252525252525252525252525252525252524211a0f010000000000000000000000000000000000000000000000000000000000000012273d52677c7f6a543f2a1500000000000000000000000000000000091e3346576a7f7b655443301c09000000000000000002152838454b5a626e7b857e7578826d77848175645c4b453828150200000e23384e6378826c57422d384e6378826c57422d1700000e23384e6378826c57422d1700000000000000000000000000000000000001142636434b564c463a291707000000000000000000000000000e1d2e3f4b61768776614c36210e0000000000162b40556b807d685337261401000000000000000000000000000000000f243a4f6479836e58432e19000000000000000d23384d627886826d5b4a362111000000000000000000000000000000000000000000031628385b708575604a35200b000e24394e63798774604b35201200000000000000000000000000000000000000000d1d30404b6075867a645746321e09000000000000000b20364b60748a81818181818181818181818283848684807971686054493d2d1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c10101010101010101010101010101010101010101010100f0d0700000000000000000000000000000000000000000000000000000000000000000010253a4f657a826c57422d1700000000000000000000000000000000031729394c61768473604a3727150200000000000000000a1a28323c484d5d65747e847b827d867b6c60574b3e32281a0a0000000b20364b6075846f5a3625364b6075846f5a36251300000b20364b6075846f5a362513000000000000000000000000000000000000000818263035413633291b0b000000000000000000000000000000101e3246576a7f7e69543c2c19060000000012273d52677d826d5544311d08000000000000000000000000000000000f24394e6479836e59442f19000000000000000b20364b60748977624c3d2d1a0300000000000000000000000000000000000000000000192e43596e8377624c37220d00192e43586e827e685544311d08000000000000000000000000000000000000000000121e324557647a8675614b36210c00000000000000081d31445564797979797979797979797979787776716f6b645c534b43362c1f0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d6277846f5a36251300000000000000000000000000000000000b1e334657697f7c675544311d0d0000000000000000000a151d2b353f4b5560697780868176655d4b45392e1f170c00000000091d3245566f856f5443303245566f856f5443301c0700091d3245566f856f5443301c070000000000000000000000000000000000000008141c202c211f170b00000000000000000000000000000000031629394c617686705a4935200c000000000d22374c62778874604b3520110000000000000000000000000000000010253a50657a826d58422d1800000000000000081d3144556277625948341f0f00000000000000000000000000000000000000000000000d22384d627774604b36210b000f24394e647973604b37261401000000000000000000000000000000000000000000031628394a5c647876614c37210c00000000000000021527374a5c646464646464646464646464636260565a554f4a3e353026180f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e1316171716140f0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607586715443301c0700000000000000000000000000000000031729394b60748474604b3c2b1905000000000000000003111c2a33414d59626f7e84818280766760544a3e332a1c14060000021528385a6f8475604a3528385a6f8475604a35200b00021528385a6f8475604a35200b000000000000000000000000000000000000000001080b160c0a040000000000000000000000000000000000000b1f3346586f8478634d38230e000000000b2034485971867b6651402f190900000000000000000000000000000012273c51677c806b56412c160000000000000002152737485a625a483b2b180100000000000000000000000000000000000000000000000b2035485a62605645321e09000d21364a5c6460554431190900000000000000000000000000000000000000000000000a1b2d3e4a5a62615847331f0a000000000000000009192d3e4a4e4f4f4f4f4f4f4f4f4f4f4e4d4c4b45384039362d201c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080f1a2123282b2c2d2b2924201d140903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354718675604a35200b00000000000000000000000000000000000b1d314556667c7e695a48342012000000000000000011212f3a474c5f677784817583777b857d73645c4c473a312414020000182d43586d8277624c372d43586d8277624c37220d0000182d43586d8277624c37220d0000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000417293a54697e7d68533d28130000000005182b3b54697e85705e4c37271502000000000000000000000000000114263754697e7e69543e2914000000000000000009192b3c484d483c2b1d0d00000000000000000000000000000000000000000000000005192b3c484d4b453828160300071a2d3d4a4e4b443726140000000000000000000000000000000000000000000000000010202d3c494d4c473a2917040000000000000000000f202d3639393939393939393939393938373632282b24221b1008010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202d36393d404142413e3a3531261e170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426365a6f8477624c37220d0000000000000000000000000000000000021527384d5e6f8478624d40301b0b000000000000081c2f3f4b58616e7d867b6c6b807a65747f84796c61584e42311f0b0000152b40556a8079644f3a2b40556a8079644f3a240f0000152b40556a8079644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a816c57422c1702000000000d21374c61768a7b665544311d1204000000000000000000000000081d3144556e8379644f39240f0000000000000000000d1d2b3438342b1d0d00000000000000000000000000000000000000000000000000000e1e2b35383632281a0a0000000f1f2d363935312619090000000000000000000000000000000000000000000000000002101e2b35383733291c0c00000000000000000000010f1a212424242424242424242424242322211e16160f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f192731353d4a4e5355575756534f4b443733291b130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d827a644f3a250f0000000000000000000000000000000000000a1a30404e6379836e5e4d3929170300000000000e23384b5d6576838376665e687e7c6760697782817768604e3a2611000013283d52687d7c67523c283d52687d7c67523c2712000013283d52687d7c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d6277846f5a442f1a05000000000a1f3347586c818574604b413022140500000000000000000000021020354b60758774604b35200b000000000000000000000d19202220190d000000000000000000000000000000000000000000000000000000000e192022211e160a00000000010f1a2124201d1409000000000000000000000000000000000000000000000000000000000e192023211f170c00000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0e0d0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111f2d37444b545b63686b6c6c6b696460554c4639311d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f7c67523c271202020200000000000000000000000000000000122135495b6a7f7c665746331e12000000000010253b50657b867c6e615851667b7f6a5459626d7a847e68533e2813000010253a50657a7f69543f2a3a50657a7f69543f2a14000010253a50657a7f69543f2a14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607686715b46311c060000000004172a3a4d627787806b5f4d40311f180d0200000000000000031120314252677c816c5443301c080000000000000000000000050b0d0b05000000000000000000000000000000000000000000000000000000000000050b0d0b090300000000000000070d0f0b0801000000000000000000000000000000000000000000000000000000000000060b0d0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311212f3d4a55606971787d808182807e79756a61574e4231271909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d7f6a543f2a1818181815130c03000000000000000000000000061a2c3d4b60748476614c41301d0d000000000f24394f647a77675f4c474e6378826c57484c5d64737b65503b261000000d22384d6277816c57422c384d6277816c57422c1700000d22384d6277816c57422c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607586715c47311c0700000000000c203448596b80847c675e4e42342a1d150b09020000070b161e2e3e4e60718578634d362614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e15170b080100000000000000000000000000000000000000000000000000000000000000000000000011212f3f4b5b63747e86827d797877797b7f84807668604b44372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a826c57422d2d2d2d2d2a272015070000000000000000000000000f1d314556647a826d5f4d3b2b18080000000d22364a5c6462594d41364b6076846f5a443f4b5460655e4c38230e00000b20354b6073836e59442e354b6073836e59442e1900000b20354b6073836e59442e19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c617785705a45301b05000000000005182b3b4b607585807c68604c473b3127201d1519131c2028323f4b5c687e826c5a493518080000000000030a0c0b090300000000000000000000000000000000000000070b0d0b0500000000000000000000000000000000000000000000000000020b11131e1b1b1b1b1b1b1b1b1b1b1b1b1b1b1c1c1b1915100b09020000000000000000000000000000000000020b111316130d04000000000000000000000000000000000000000000000000000000000000000000000000081622292c201c140800000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b5d6579857f766d6764636263656a6f79827d6b605544311d14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d6278846f5a4442424242423f3c322515030000000000000000000000021527384b5d6b807c675948362513000000071b2d3e4a4f4c483b303245577085705a3b2e36434b504c402f1c090000081c3043546378634d38233043546378634d38230e0000081c3043546378634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f24394e6479836e58432e19030000000000000d1e324557667c82807e6c62594b45383631272f25303539464b5d657a8575604b3c2c1900000000000b171e21211e160a0000000000000000000000000000000008131c20221f180d000000000000000000000000000000000000000000000006131e26283330303030303030303030303030303131302e2a26201d150a08000000000000000000000000000006131e26282b2821150700000000000000000000000000000000000000000000000000000000000000000000051626343e4135302618080000000000000000000000000000000000000000000000000000000000000000000e23374b5d657b85786a6157524f4d4c4e50555c646d7d8073604b43321e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607586715c575757575757544f4332200c0000000000000000000000000a1a2e3f4b60748577625443301c0700000010202d363937342b1d28395a7084705947342630353b382f211100000001142636495a635a4935202636495a635a4935200c000001142636495a635a4935200c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101f314254697e7e69543f291400000000000000031628394c5e6d827c7d8177696056504b45384436434a4f57616a7b8578635645321e0e000000000b1b2933363632281a0a0000000000000000000000000000081825303537342a1d0d000000000000000000000000000000000000000000021324313a3d48454545454545454545454545454646464643403b363228221b10070000000000000000000000021324313a3d403d332615040000000000000000000000000000000000000000000000000000000000000000000e22344451564b4336261401000000000000000000000000000000000000000000000000000000000000000010253a50657a8576635a4c46393a3837393b3e4a4f5f677a816c614f3c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144557286726d6d6d6d6d6d6d6a614f3c271300000000000000000000000000101d31455663798472604a35200b00000002101b2224222018192e43596e8377614c37221c2026231c11030000000008182c3c494d493c2c19182c3c494d493c2c190600000008182c3c494d493c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000109151d2e3d4e60718577624c37220d00000000000000000a1b2f404b6175857778837e756b6560565a595a5460646a767f8577635a493828160000000003172939464c4b4538281a0a00000000000000000000000000132536434a4c483b2a180500000000000000000000000000000000000000000b1e31424e535d5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5c5b5955504b4538372e211a0f000000000000000000000b1e31424e5355504433210d00000000000000000000000000000000000000000000000000000000000000000015293e51636c605443301c0800000000000000000000000000000000000000000000000000000000000000000c22374c6177776158493c332924232224262d36414d5c667c7f695a4935200c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527375b708482828282828282817f6a543f2a1500000000000000000000000000021527384a5b697f7c67513c27120000000000070d0f0d0b050e24394e637975614b36210c0b100e09000000000000000e1e2c3538352c1e0e0e1e2c3538352c1e0e00000000000e1e2c3538352c1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000609151d27313e4b5b687d826d594834200b000000000000000000121e334657647a84746d7a82807a756f6f6e6f7175797f867d736259493c2c1a0a000000000a1e33465761605645382815020000000000000000000000071c30435460625948341f0b000000000000000000000000000000000000000011263a4e60687370707070707070707070707070707171706e6a6560564f4b3f362d1c1308000000000000000011263a4e60686b62503d2813000000000000000000000000000000000000000000000000000000000000000000172c41566c8173604b35200b00000000000000000000000000000000000000000000000000000000000000000a1f344759616159473a2c1e170f0e0d0e101b22313e4d5e6c8178624d3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b6176777777777777777776614c37210c00000000000000000000000000000a1a2d3d4b607374604b35200b00000000000000000000000c21364a5b63615746331e0a0000000000000000000000000e19202320190e00000e19202320190e000000000000000e19202320190e00000000000000000000000000000000000000000000000000000000000000000000000000000002090e1920273137444b5c64798676614c3b2b1805000000000000000000031729394b5d697e816c656d777e82848483848585837c75686054473b2c1e0e00000000000c21364c617676605645321d0c00000000000000000000061a2c3d4a607377624c37220d000000000000000000000000000000000000000013283d53687d888485858585858585858585858585868684837f7b756d655d4e4a3d302518080000000000000013283d53687e806b55402b160000000000000000000000000000000000000000000000000000000000000000001a2f455a6f8477624d37220d000000000000000000000000000000000000000000000000000000000000000004182a3a474c4c473a2a1c0e03000000000007132030404d6277826d5847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e334657616161616161616161615847331f0a0000000000000000000000000000000f1c30435460605544311d080000000000000000000000071a2d3d4a4e4b463929170300000000000000000000000000060c0e0c0600000000060c0e0c06000000000000000000060c0e0c060000000000000000000000000000000000000000000000000000000000000000000000000000060a151d202c3537444b55606a7a8679635846331d0d00000000000000000000000b1b2e3f4f616e837d675b62686d6f6f767675706d6760564b43362a1d0e0000000000000d23384d62788674604b3a2a17040000000000000000000c2135495b6b817e69533e2914000000000000000000000000000000000000000010263b50657b827070707070707070707070707070717170777c8084827a6f635b4a433626180800000000000010263b50657b826d58432d18000000000000000000000000000000000000000000000000000000000000000000182d42576d827a654f3a25100000000000000000000000000000000000000000000000000000000000000000000c1c2a343737342a1c0c00000000000000000212203448596d8277614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464b4c4c4c4c4c4c4c4c4c473a29170400000000000000000000000000000001142636434b4b44372715010000000000000000000000000f1f2d36393633291b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e19202731363c494d55606874808578635b493a291700000000000000000000000000102032434c61768579635853585a576161605458524b45383026180d000000000000000b2035485a6b817f695847331f0e0000000000000000081b2e3f4e63788674604b36200b00000000000000000000000000000000000000000e23384e6378856f5b5b5b5b5b5b5b5b5b5b5b5b5b5b5c5962666b70798284796a6054433626140100000000000e23384e637885705b372715010000000000000000000000000000000000000000000000000000000000000000152a40556a7f7c67523d2712000000000000000000000000000000000000000000000000000000000000000000000c181f22221f180c0000000000000000000005192b3b52677c7d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b29333637373737373737373733291c0c00000000000000000000000000000000000818263035353127190900000000000000000000000000010f1a2124211e170b0000000000000000000000000000000000000000000000000001080b0f13171819181714100c09030000000000000000000000000000000000000000000000000000000000000000000000000004101b222c3538454b525a636b757d867e73625a493d2c1b0b0000000000000000000000000002141e3346576379867661554439464b4b4b43363c3632281c1408000000000000000006192b3c4c61768777614c3c2c1906000000000000000a22374b5d6e837c665544311d0800000000000000000000000000000000000000000b20364b6075877255444545454545454545454546463b484d51565c646d79857f72605443301c1200000000000b20364b607587725544311d08000000000000000000000000000000000000000000000000000000000000000012283d52677d7f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000040a0c0c0a040000000000000000000000000d22384d6277826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e212222222222222222211f170c0000000000000000000000000000000000000008141c20201d150900000000000000000000000000000000070c0e0c0a030000000000000000000000000000000000000000000000000508141c2024292c2d2e2e2c2926211e160b08020000000000000000000000000000000000000000000000000000000000000000000c171f2d363c494d5660676f7880857f76696055483c2c1f0e00000000000000000000000000000003172939495b667c8473604b4132363635302627211e160a01000000000000000000000e1f334658697e816c5a493520100000000000000a1a30414f657a85705e4d372715020000000000000000000000000000000000000000091d324556728775604b3530303030303030303030312b34373c3e4a4f5b6373808272604b41301b0b00000000091d324556738875604b35200b000000000000000000000000000000000000000000000000000000000000000010253a50657a826c57422d1702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075846f5a452f1a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0c0c0c0c0c0c0c0c0c0a0400000000000000000000000000000000000000000001080b0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e19202630353a3e41434343423f3b363228201d1509000000000000000000000000000000000000000000000000000000000000010f1c29333e4a4f5a636b757c84847b746a61574b44372b1e0e00000000000000000000000000000000000b1b2c3d4c5e6a7f806b5f4d3e2d21201c14120b09020000000000000000000000000417293a4b60748678634d3f2e1b0800000000021527384d5f70857a644f40301909000000000000000000000000000000000000000000021528385b708577624d38221b1b1b1b1b1b1b1b1b1c182022272d363d4955606b7f816c5f4d39291703000000021528385b708578624d38230d00000000000000000000000000000000000000000000000000000000000000000d22384d6277846f5a442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346587085705b45301b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2b3536434b4f53565859585754504b46393631271c1308000000000000000000000000000000000000000000000000000000010f1f2d3a464c5c646f78808780786f6660544b46393126190e000000000000000000000000000000000000000f1f2f404a6072837d675c4a3a2a19090100000000000000000000000000000000000c1d314455677c836e5d4b37221200000000091d314556677c836e5c4a3622120000000000000000000000000000000000000000000000192e43586e837a654f3a2510060606060606060600050b0d111b222c37444b616d827c675746331e0800000000192e43586e837a65503b251000000000000000000000000000000000000000000000000000000000000000000b20354b607586715c3b2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081321364c6176846f5a442f1a050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f0f0f0f0f0f0f0f0f0e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0d100e08000000000000000000000000000000000e1a28323c484d546064686c6d6e6d6c69656157524b44373025180e00000000000000000000000000000000000000000000000000000f1f2d3d4a58616d7a84857c756b625a514b433633291d1409000000000000000000000000000000000000000001121c3043546175857a645947372715010000000000000000000000000000000000021527374d5f70857a644f41301a0a00000417293a4b60748778624d3e2e1b040000000000000000000000000000000000000000000001162b41566b807d67523d281200000000000000000000000000070f192631434c61768676614c36251300000001162b41566b807d68523d28130000000000000000000000000000000000000000000000000000000000000000081d3144557286725947341f0b01080b0f121414120f0b0801000000000000000000000000000000000000000000000000000000000000000000000000040a101825304250667b806b56402b1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124242424242424242423211a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202325221b1003000000000000000000000000010f1e2b38454b5a626b74797e81828383817e7b766f6760554a43362c1e120400000000000000000000000000000000000000000000000a1a2d3d4a5c647682857b706760564d483c3530261e170b010000000000000000000000000000000000000000000000132536465763788677615544311d13020000000000000000000000000000000000091930414f647a85705f4d38271502000a1f334758697e806b5a4835201000000000000000000000000000000000000000000000000013293e53687e7f6a55402a1500000000000000000000000000000009141f334758697e7f6a5443301c0700000013293e53687e806a55402b150000000000000000000000000000000000000000000000000000000000000000011426375a708577614c37220c151d20242729292724201c1408060000000000000000000000000000000000000000000000000000000000000002080c171f212e36434a606f8378634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3639393939393939393938352c1f0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c35383a372e21100000000000000000000000000f1f2c3c4956606b788187837f7b7978797a7d8185847c74676054493c30221406000000000000000000000000000000000000000000021628384a5b647a877e72655d524b4538352b201c1408030000000000000000000000000000000000000000000000000008182939495a667c8473604b413120100000000000000000000000000000000000001222374b5c6e837c675645311d0c06192b3c4c61768776614c3c2b190200000000000000000000000000000000000000000000000011263b51667b826d57422d18000000000000000000000000000000000417293a4b61768774604a35200b00000011263b51667b826d58422d18000000000000000000000000000000000000000000000000000000000000000000182d43586d8279644f3a2421273135393d3e3e3d39353026211a0f040000000000000000000000000000000000000000000000000000000609151d202a33373e4b5460697e816c5b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e4f4f4f4f4f4f4f4f4e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2c3c494d4f4b3f2e1b08000000000000000000000c1c2c3d495a627480867d756e696664636465686b707880867d72635a4c40312414060000000000000000000000000000000000000000091e3245566379877b6960544b3f36312720190e0801000000000000000000000000000000000000000000000000000000000b1b2c3c4c5e6a7f816c604e3e2e1d0d0000000000000000000000000000000000081b2e3e4d62788774604b3a29170b2035495a6b817e695846331e0e000000000000000000000000000000000000000000000000000e23394e6378846f5a36261401000000000000000000000000000000000c1e3246576e837a644f3a250f0000000e23394e637885705a372614010000000000000000000000000000000000000000000000000000000000000000162b40556b807c67513c2d3637444b4e525353524e4b4336352c1f180c000000000000000000000000000000000000000000000000050e1a212731363a474c535c64727f8274604b3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c646464646464646464635b4935210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a495a62655d4b37220e00000000000000000004182a3a495b6378867f7468605654514f4e4e5053565a626b76808478665e4e4231241403000000000000000000000000000000000000011426364b6075877b655d4a43362f201d150a0600000000000000000000000000000000000000000000000000000000000000000e1e2f404f616e837d685c4a3b2a1a0a0000000000000000000000000000000000102035495a6b817e695846331f1b2e3e4d62788674604b3a291700000000000000000000000000000000000000000000000000000c21364b617687725443301c08000000000000000000000000000000000316293953687e7f6a553f2a150000000c21364b617687725544311d08000000000000000000000000000000000000000000000000000000000000000013283d53687d7f69543f3d4a4e556064676969676460544e493d332a1c11030000000000000000000000000000000000000000000d181f2c3537444b515861686f7a847f73605645311f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e647a797979797979797979634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536475862787b654f3a2510000000000000000000091f3447596379867b6a60564b45383b3a39393a3d3c484d57616b79847c69604e42312110000000000000000000000000000000000000081c3043546a80806b5d4b3f3025181109020000000000000000000000000000000000000000000000000000000000000000000000122232434b6175857a645948382715020000000000000000000000000000000006192c3c4c61768776614c3c2b22374b5c6e837c675544311c0c0000000000000000000000000000000000000000000000000000091e324657738875604b35200b00000000000000000000000000000000000f253a4f647a836e59432e19040000091e324657738875604b35200b000000000000000000000000000000000000000000000000000000000000000010263b50657b816c57464c5b636d75797c7e7e7c79756c635b4c473a2e21140600000000000000000000000000000000000003111d2a343d494e5560666e767e8481786a605545382715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677d7f7f7f7f7f7f7f7f85715c3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c30435461768678634d38230e0000000000000000091930414c6177867a655d4b453832282624232425282b3539464c5b6375837e69604e3f2e1d0d00000000000000000000000000000000000b20354b60748776614b3f2e1c1308000000000000000000000000000000000000000000000000000000000000000000000000000004151e32465762788677625645311d1402000000000000000000000000000000000e1f334758697e816b5a493530404f647a85705f4d372715000000000000000000000000000000000000000000000000000000031628395b718677624d37220d00000000000000000000000000000000000d22374c627786715b46311c060000031628395b718677624d38220d00000000000000000000000000000000000000000000000000000000000000000e23384d6378846e5957616d798285817d7c7c7d818482796c61584b3f31241406000000000000000000000000000000000211212e3b474c5b636c757c83847d766c625a4b4437271a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f676a6a6a6a6a6a6a7186715846331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4a6072847d675b4935210c00000000000000011426374d5f6f847d675c4b3f31271e16110f0e0f1013192029333d4a576173827e685d4b3b2b18050000000000000000000000000000000010253a50657a836d5746332110000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839495a657b8474604b42312110000000000000000000000000000000000417293a4b60748678624d3e374d5e70857a644f4030190900000000000000000000000000000000000000000000000000000000192e44596e837a654f3a251000000000000000000000000000000000000b20364b607587725d48321d08000000192e44596e837a654f3a251000000000000000000000000000000000000000000000000000000000000000000b20364b60758671596276828379706c686766686b6f78828177655d4e423124130400000000000000000000000000000010202e3f4b59626d78818580786f6861574d483c3126190a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e30414d525555555555555b708576614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b5c697f816c5f4d3c2c190600000000000000081d314455677c836e5f4d3e2f1d150a02000000000000050b171e2d3946556073847b6559483420120000000000000000000000000000000013283e53687d7e6954392917020000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3c4c5d697f816c604e3f2e1d0d000000000000000000000000000000000c1d314556677c836e5c4a4455667c836e5c4b3722120000000000000000000000000000000000000000000000000000000001162c41566b817c67523d271200000000000000000000000000000000000b20354a607588735e48331e09000001162c41566b817d67523d28120000000000000000000000000000000000000000000000000000000000000000091d3245567286726277857d6e645c5753515153565b636d7a847b68604e423122120000000000000000000000000000071b2d3e4b5d657782847b746b635b524b4639342b1d14090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001132330393d3f3f3f3f3f43586d8379644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101f334758647a8574604b41301e0e00000000000000000b20354b60748778624d413020110200000000000000000000030f1b2837445561778577624d40301909000000000000000000000000000000152a40556a7f7c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2f3f4f616d827e685d4b3b2b1a0a000000000000000000000000000000021527384d5f70857a644f4b60748678624d3e2e1b04000000000000000000000000000000000000000000000000000000000014293e54697e7f6a553f2a1500000000000000000000000000000000000c22374c617787725c47321d0700000014293e54697e7f6a553f2a150000000000000000000000000000000000000000000000000000000000000000021528385b70857675867b675f4f4a3e3e3c3c3d3d494e5c6475827e68604e40301e0e000000000000000000000000000d22364a5c657b867b6f6660544e493d36322820190d0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25272a2a2a2a2b40566b807b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102032434c6176867863564532231300000000000000000316283951677c836e5a4935231302000000000000000000000000000b1927374759647a846f5e4d372715020000000000000000000000000001162b40566b807b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112132434b6075857b655948382815020000000000000000000000000000000a1a30414f647a85705e57697e816b5a4935201000000000000000000000000000000000000000000000000000000000000011263c51667b826d57422d1800000000000000000000000000000000000e24394e637985705b45301b0600000011263c51667b826d57422d180f0f0f0f0f0f0e0d0b080100000000000000000000000000000000000000000000192e43586e837a827c665d4d41362d282727282c353e4b56606d807e685e4c3c2b19090000000000000000000000081c2e3f4f647a8577665e514b4336352c211e160b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a101215151515283e53687d7e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4f616e837c675a49382815050000000000000000091e3245576f847b65503c2c190500000000000000000000000000000009192a3b4a5c6c817c665544311d09000000000000000000000000000014293f54697e7d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003151e32455662788677625645321d14030000000000000000000000000000001222374b5d6e837c6661768776614c3c2b19020000000000000000000000000000000000000000000000000000000000000f24394e6479846f5a36251300000000000000000000000000000000071a2d3d53687e816c56412c17010000000f24394e6479846f5a3625242424242424242322201c14120c0a04000000000000000000000000000000000001162b41566b8080816c5e4c3f30221b131211131a212e38454b626d827c665a4937261401000000000000000000000e23374b5d70867862594c40353026211a0e090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b816b56412c160100000000000000000000000000000000000000000000000000050b0d10131516151413100c0a0400000417293a4a5c697e816c5f4d3c2c1a0a0000000000000000000b21364b60768875604b35200e00000000000000000000000000000000000c1d2e3e4c61778574604b372614010000000000000000000000000012283d52677d7f69543626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162838485a657b8574604b42322111000000000000000000000000000000081b2e3f4d637886746b807e695847331e0e000000000000000000000000000000000000000000000000000000000000000c21364c617687725443301c070000000000000000000000000000091421364a5b6f847b66503b2611000000000c21364c6176877254433939393939393939393735302628211f170c070000000000000000000000000000000013293e53687e8977614c402f2113070000000006101a2832444b60738378625544311d0c0000000000000000000010253a50657a816c5a493b2f201c1408060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e6378836e59442e190000000000000000000000000000000000000000000000080d0f18202226292a2b2a292825221f18120c101f334658647a8574604b41301e0e0000000000000000000010263b50657b836e5544311d08000000000000000000000000000000000000101f3447596a7f7e695544311d08000000000000000000000000000f24394e6479836d5443301c08000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000a1a2b3c4b5d697e826d604f3f2e1c08000000000000000000000000000000102035495a6c817e788674604b3a291700000000000000000000000000000000000000000000000000000000000000000a1f334658738875604a35200b0000000000000000000000030a0f192631444e63798774604b36200b000000000a1f334658738875604f4f4f4f4f4f4f4f4f4e4d4b43363d373329221b1005000000000000000000000000000011263b51667b816d584733221202000000000000000a161e31445562788473604b3a29170400000000000000000014293f54697e7c66513c2c1d12080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607686715b39291603000000000000000000000000000000000000000009101b22252b34373b3e3f40403f3d3b37342a27211f32424c617686786256453223120000000000000000000000152a3f556a7f7f69543726140100000000000000000000000000000000000004182a3a4b61768674604b35200b000000000000000000000000000b20354a60748675604b3520100000000000000000000000000000040a0c1a0c0a0300000000000000000000000000000000000000000000000000000e1e2e3f4f616d827e695d4b37230e00000000000000000000000000000006192c3c4c617686817c675645311c0c00000000000000000000000000000000000000000000000000000000000000000417293a5c718677624d3722131313131313131313131516171e212d37444b6270847d675544311d08000000000417293a5c718677646464646464646464646362605458524c473a372e20190e000000000000000000000000000e23394e6378836e593a2a170400000000000000000003152737485a687d7e695847331f0c000000000000000001162b40566b8079644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245567186715746321e0a00000000000000000000000000000000000005121d242e373a3b484d50535455555453504c473a3d37333e4f606e837c675a49382815050000000000000000000003182d43586d827b66513c261100000000000000000000000000000000000000000c1e3346576c827b665138271502000000000000000000000000071c3043546d827a654f3e2d1b0a0000000000000000000000000c171f212f211e170b0000000000000000000000000000000000000000000000000000112132424b6074857a65503a2510000000000000000000000000000000000e1f334758697f84705f4d38271500000000000000000000000000000000000000000000000000000000000000000000192f44596e847a644f3a29292929292929292929292a2b2933363d4a55606b808272604a372715020000000000192f44596e847d79797979797979797979787775706d6761584f4b3e352b1e130500000000000000000000000c21364b617686715c392917030000000000000000000009192b3c4a60738476614c3a2a17040000000000000000142a3f54697f7b66513b26120000000000000000000000070d0f0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628385b708576614b36210c00000000000000000000000000000000000d19202f383e4b4f57596265686a6b6a696865615958524c474a5c697e816c5f4d3c2c1a0a0000000000000000000000051a30455a6f8579644e39240f00000000000000000000000000000000000000000317293950657a836d5645311d09000000000000000000000000001325364e6479846e5c4a3928160a000000000000000000000c1c2a3337443633291b0b0000000000000000000000000000000000000000000000000003141e324556617679634d38230e0000000000000000000000000000000004172a3a4b607477624c41301a0a00000000000000000000000000000000000000000000000000000000000000000002172c41576c817c67523e3e3e3e3e3e3e3e3e3e3e3e3f4139464b515b6373808474605443301909000000000002172c41576c81848181818181818181818182838485827d766e645c4d483c30231608000000000000000000000a1e3246577287725746331e0a00000000000000000000000e1c304354667b816b5847331f08000000000000000011273c51667c7f6a54402f1c0c0000000000000000000f1a2124201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8378634e39230e00000000000000000000000000000003111d2b34404c515c646c71777b7e7f807f7e7d7a77706d67615857647a8574604b40301e0e000000000000000000000000071c31465c718677624d38220d0000000000000000000000000000000000000000000b20354b60758775604b36200b000000000000000000000000000822364a5c6e837a64574532271a0e04000000000000020d1b2a3a474c5a4b46392917030000000000000000000000000000000000000000000000000002162838465761635b4935210c00000000000000000000000000000000000c1d31455660625947342312000000000000000000000000000000000000000000000000000000000000000000000014293f54697e7f6a545353535353535353535353535456575761666f798480736056453625130000000000000014293f54697e7f6c6c6c6c6c6c6c6c6c6c6c6e7075787e84837a6e625a4d4133261608000000000000000000031629395b718676614c36210c0000000000000000000000001325364c5e6f8476614c36261401000000000000000b21364b607685705e4c3a2a1b0e03000000000008131c2d363935302518080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b807b66513b261100000000000000000000000000000513212f3b484d5e66707a818684807d7b7a7a7b7d808385827c766d6475867862564531221200000000000000000000000000071c31475c718677624d37220d000000000000000000000000000000000000000000081d3144556e837a654f3a251000000000000000000000000000071b2d3e4e63798575604b45382b1f170f0c0a080b0d151d2a394758616f615746331e0a00000000000000000000000000000000000000000000000000000a1a2939464c4d493c2c1906000000000000000000000000000000000002152738454b4c473b2a1805000000000000000000000000000000000000000000000000000000000000000000000012273c51677c816c686868686868686868686868686a6b6d6e767c8483796b605545382818080000000000000012273c51677c816c575656565656565656575854606369707b858378675f514434261606000000000000000000192e44596e8379634e39240e00000000000000000000000008182f4052677d7f6a5443301c0800000000000000091e3245576c817c665847392c1e170d0c0b0c0f1825303e4a4e4a43362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e7e68533e291300000000000000000000000000041323303f4b59626f7b86837b756f6b6866656566686b6e70787e84827a837c665a49382b1e1002000000000000000000000000071c31465c718677624d37220d0000000000000000000000000000000000000000000114263754697e7f6a543f2a150000000000000000000000000000102135495b677d826d6056483c332a24211e1d202227313b485761768376614b36210c0000000000000000000000000000000000000000000000000000000b1b29333638352c1e0e000000000000000000000000000000000000000a1a27313637342a1d0d0000000000000000000000000000000000000000000000000000000000000000000000000f24394f6479867e7e7e7e7e7e7e7e7e7e7e7e7e7e7f808284837e776e635b4b4437281a0a00000000000000000f24394f6479846f5944414141414141414236434a4e545d65707b877d6b625144342414010000000000000001172c41566c817b66513c2611000000000000000000000000001120364b60758674604b35200b00000000000000031628394c617685766157493d332923212021242d36434a5c64605443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b806b56412b1601000000000000000000000001122230414d5d65788483786e6560555552515050515255595a626870798288786a6055483c2d2011030000000000000000000000051a30455a6f8578634e39230e0000000000000000000000000000000000000000000010253b50657a836e58432e190000000000000000000000000000061a2c3d4d5f6a7f8174625a4c473a39363331353837444b596275857e685746331e0a000000000000000000000000000000000000000000000000000000000b171e212321190e0000000000000000000000000000000000000000000a151d20221f180d000000000000000000000000000000000000000000000000000000000000000000000000000c22374c6177897d7d7d7d7d7d7d7d7d7d7d7d7d7e7f8282817c746a60574b3f3126190a0000000000000000000c22374c617786715c3a2a2c2c2c2c2c2c2d253035393f4b505e667784806b625142311f0f000000000000000014293e54697e7e69533e291400000000000000000000000000091d3145566c817a654f3a251000000000000000000a1f334658657b8475635b4b463938363537393d4a54606a7972604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e6379836e58432e190000000000000000000000000f1f30404d5f677b877c6e635a504b44373d3b3a3b3c3d403c494d535b636d79847f74625a4a3e2f2211020000000000000000000003182e43586d837a65503a2510000000000000000000000000000000000000000000000d22374c627786715c3a2a170400000000000000000000000000000f1f304150616a7d84786b6158534e4b46444b4d5155606877847f69604e392917030000000000000000000000000000000000000000000000000000000000030a0c0e0c06000000000000000000000000000000000000000000000002090b0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758738974676767676767676767676768686a6d6d767d847f75655d4f433325150500000000000000000a1f3347587388735847331f171717171717131c20232f37404c59627382806b604e3d2d1a070000000000000011273c51667c816b56412c16010000000000000000000000000215273850657a816c573c2b1906000000000000000417293a4b5d667c84796a6157514d4b4b4c4e535b63727f8576604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b617685705b382816020000000000000000000009192c3d4c5e677d8678665e4d493c3531262826252526282b2c35383d4a4e5b63727e8578645c4c402f20100000000000000000000001162b41566b807d67523d2812000000000000000000000000000000000000000000000b1f3447597388735847331f0a00000000000000000000000000000113233343505f687a8480766e68646157556062666c757d867c69614f42311b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c7186776252525252525252525252525355585861686f7b847b69615043332313010000000000000004182a3a5c718677614c37220c010101010000070b111c232f3b48556073837e685b4a362112000000000000000f24394e6479836e59432e1900000000000000000000000000000b20354b607586715a4835200b00000000000000000c1c2e3f4c5e6679857f766d676261606163686f79848274605645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346577186715645321e0900000000000000000001152737495b667c8677625a4c40352c201d14131110101113161920232d363d4a54606879857a665e4c3e2e1d0d0000000000000000000013293e53687e7f6a553f2a150000000000000000000000000000000000000000000005182a3b5c718676614c37210c00000000000000000000000000000005152533414e5c646f7b84837d7976707075777b81868076665e4f4332241400000000000000000000000000050b0d1a1812080000000000000000000000000000000000020b111314120c020000000000000000000000000000000000000000010b111316140e0400000000000000000000000000000000000000000000000000000000000000001a2f445a6f847a644f3d3d3d3d3d3d3d3d3d3d3e403a474c535e6674817f6a615042311f0f00000000000000001a2f445a6f8479644f39240f00000000000000000008111d2b37445561768679634e402f1d090000000000000c21374c617686715b3f2f1c0800000000000000000000000000081d3144556e8378624d38230d00000000000000000011212f404c5b63737c85827c78767576797e84867b6d6056453828160200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395b718676604b36210b000000000000000000081d314455637987786259493c2f20190e080100000000000000060c0f1a212d36434a5b6377847c665c4a3c2b1b0a00000000000000000011263b51667b826d57422d1800000000000000000000000000000000000000000000001a2f445a6f8479644e39240f00000000000000000000000000000000071523313e4a4f5e666f777d818484848583807b756b61584c40322514060000000000000000000000000d1820222f2d25190b00000000000000000000000000000006141f262929271f140600000000000000000000000000000000000005131e25282b2921160800000000000000000000000000000000000000000000000000000000000002172c42576c817c67523d282828282828282828292a2a3337404c56606c7e7f6a604e3d2c1a0600000000000002172c42576c817c67513c271200000000000000000000000d1927374657657b85705e4c38240e0000000000000a1f3347587287725d4b38230e0000000000000000000000000001142637546a7f7d67523d28120000000000000000000312222f3d4955606770787e82838583817e7871665e4b4538281a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8378634e38230e00000000000000000417293a4b6073867b655a483a2b1e120600000000000000000000000000070f1825303d4a596277857a645a483928160300000000000000000e23394e6378846f5a3625130000000000000000000000000000000000000000000002172c42576c817c66513c271100000000000000000000000000000000000513202d36404c515a62686c6f7070706e6b6660564c473a2f2214060000000000000000000000000d1d2b343745413729190800000000000000000000000000021424313b3e3e3b3224140200000000000000000000000000000000011323313a3d413d34261604000000000000000000000000000000000000000000000000000000000000152a3f546a7f7f6a543f2a15121212121212131315171f212f38454b60697f7d685b4935211100000000000000152a3f546a7f7e69543f2914000000000000000000000000091929394b5d6e837b66513c2c1906000000000004172a3a5c71867b65503c2b19050000000000000000000000000010253a50657a816c57412c170000000000000000000004121f2c37444b525b63696d6e6f6e6c68625a514c4032281a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c817b65503b261000000000000000000a1f334658697f826d5d4c3c2b1c0e000000000000000000000000000000000008131c2d3b485962778678625745321e0f00000000000000000c21364b617687725443301c0700000000000000000000000000000000000000000000152a3f546a7f7e69543e291400000000000000000000000000000000000002101b222f383c484d5257595a5b5a5955504b453833291c120400000000000000000000000005182b3b484c5a5447372512000000000000000000000000000b1f31424e53544f42321f0c000000000000000000000000000000000b1e31414e5256514434210e00000000000000000000000000000000000000000000000000000000000012273c52677c826c57422d17020000000000000000040a121a2832424f616d8279634e3f2f1c0900000000000012273c52677c816c57412c17020000000000000000000000000b1b2e3f4f647985705a4935200c0000000000001a2f44596f84836e5a4835200c000000000000000000000000000d22374d6277846f5a3625130000000000000000000000010f192631353d494e5457595a5957534d493c382f1e160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e7d68533e281300000000000000011426364c61768877614c3f2f1d0d00000000000000000000000000000000000000000f1d2a3a4859657b8575604b3d2d1808000000000000000a1e324657738875604a35200b0000000000000000000000000000000000000000000012273c52677c816c56412c17010000000000000000000000000000000000000007121d242b35383d414445454543403b3632281f170c00000000000000000000000000000b20344859626f6654412d080000000000000000000000000011263b4e606869604f3b27120000000000000000000000000000000011253a4e5f686b62513d29140000000000000000000000000000000000000000000000000000000000000f253a4f647a846f5a442f1a0000000000000000000000000a151d32434c6177846f5d4c38230e0000000000000f253a4f647a846e59442f1900000000000000000000000000001122364a5c718678634d38230e000000000002172c42576c818678624d3b2a18040000000000000000000000000b203448597186715443301c0700000000000000000000000009141d202c35383e42444543423e38352b241d120300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c806b55402b1600000000000000081c3043546a7f806b5847332111000000000000000000000000000000000000000000000d1c2b3b4b5d6a7f806b5b4a36251300000000000000031629395b718677624c37220d000000000000000000000000000000000000000000000f253a4f647a836e59442e1900000000000000000000000000000000000000000000090e192022282c2f3030302e2b26211e160a040000000000000000000000000000000d22374c6277846f5a3625130000000000000000000000000013293e53687e7e69543e29140000000000000000000000000000000013283d52687d806b56412b160100000000000000000000000000000000000000000000000000000000000d22374c627787725c3b2a180400000000000000000000000002141f3347586a7f7b65503c2c190600000000000d22374c627786715c3a29170400000000000000000000000000071b2d3e556a7f7e69543e2914000000000000142a3f54697f7f806b5947341f0e00000000000000000000000005182b3b5c718775604a35200b0000000000000000000000000001080f1a2123292d2f302e2c292320190e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e6479836d58432e18000000000000000b20354b60748777624c3a2a180300000000000000000000000000000000000000000000000d1d2e3f4b60738679635443301c0700000000000000192e44596e837a644f3a250f000000000000000000000000000000000000000000000d22374c627786715c392917030000000000000000000000000000000000000000000000050b0d13171a1b1b1b1916110b090200000000000000000000000000000000000b20354a607586715443301c0700000000000000000000000011263b51667b816b56412c160100000000000000000000000000000010253b50657a836e59432e190000000000000000000000000000000000000000000000000000000000000b20354a607589735947341f0b0000000000000000000000000004172a3a4c6177846f5a4935200c00000000000b20354a607588735847331f0a000000000000000000000000000010253a4f657a836e59442e1900000000000012273c52677c7f8277614c3c2b19060000000000000000000000001c31465b718676614b36210c00000000000000000000000000000000060c0e1418191a1917130d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c617685705b3727150200000000000010263b50657b846f5948341c0c00000000000000000000000000000000000000000000000000101d314455647a8572604a35201000000000000001162c41566b817c67523c2712000000000000000000000000000000000000000000000b20354a607588735746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354718675604a35200b0000000000000000000000000e24394e6379836e59432e19000000000000000000000000000000000d23384d627886705b382816030000000000000000000000000000000000000000000000000000000000071c304354728777614c37220c00000000000000000000000000000c1f3347586f8478624d38230d0000000000071c304354728776614c37210c00000000000000000000000000000c21364c617687725c3828160200000000000f243a4f6479817a816c5a483520110000000000000000000000051b30455a708577624c37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347587186715544311d08000000000005182b3b576c827d67523b2b180000000000000000000000000000000000000000000000000000011426374b5c6e837c67523f2e1b0800000000000014293e54697e7f6a543f2a1500000000000000000000000000000000000000000000071c304354728776614b36210c000000000000000000000000000000000000000000000001080b0f131517171715120f0b08010000000000000000000000000000000000001325365a6f8477624c37220d0000000000000000000000000c21364c617685705b382815020000000000000000000000000000000b20364b607588735645321e090000000000000000000000000000000000000000000000000000000000001325365a6f8479644f3a240f000000000000000000000000000004172a3a54697f7e68533e29130000000000001325365a6f8479644e39240f00000000000000000000000000000a1e3346577388735645321e0900000000000d22374c6277836e8278624d402f1b0b00000000000000000000051b30455a708577624c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c718675604b36200b00000000000b20344859728777624c37220d00000000000000000000000000000000000000000000000000000009192e3e4e647986705d4b37220b00000000000011273c51667c816c57422c1702000000000000000000000000000000000000000000001325365a6f8479634e39240e0000000000000000000000000000000000000000000909151d2024292a2c2d2c2a2824201d150b0700000000000000000000000000000000182d42576d8279644f3a240f0000000000000000000000000a1e3346577286725645321d09000000000000000000000000000000081d314455728776604b36210b000000000000000000000000000000000000000000000000000000000000182d42576d827c67513c27120000000000000000000000000000000f253a4f647a826d58422d18000000000000182d42576d827c66513c27110000000000000000000000000000031729395d728776604b36210b00000000000b20354a6075857078826d5e4c3a291704000000000000000000021628385c718676604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8478624d38230d00000000000d22374d627786715947341f0b000000000000000000000000000000000000000000000000000000001021364a5c6f847a644f3a29170400000000000f24394e6479846f5a442f1a0000000000000000000000000000000000000000000000182d42576d827b66513b26110000000000000000000000000000000000000007111c232731353a3e3f4142413f3d39353127201c13080100000000000000000000000000152a40556a7f7c67513c2712000000000000000000000000031729395c718675604b36200b000000000000000000000000000000021527375b708578634e38230e000000000000000000000000000000000000000000000000000000000000152a3f556a7f7f69543f2a140000000000000000000000000000000d22384d627785705b45301b000000000000152a3f556a7f7e69543f29140000000000000000000000000000011426365c728776614c36210c0000000000071c3043547084706b807b665846331f14040000000000000000091e3245567286725745321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c817a65503b2510000000000011263b51667b836d583b2a180500000000000000000000000000000000000000000000000000000000071a2d3e51677c836e5846331f0a00000000000c21374c617686715c3a2a180400000000000000000000000000000000000000000000152a3f556a7f7e69533e2914000000000000000000000000000000000002101b222f3837444b4f535556575655524e4b44373530251d140900000000000000000000000013283d52687d7f69543f2a14000000000000000000000000001a2f44596f8478634d38230e00000000000000000000000000000000182e43586d837b66503b261100000000000000000000000000000000000000000000000000000000000012283d52677d816c57412c170200000000000000000000000000000b21364b607686715c47311c00000000000012283d52677d816c56412c170100000000000000000000000000081c304354738875604a35200b0000000000001325365a6f847660748476614c4232221203000000000000000b21364b607686715c3928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f7d68523d28130000000000152a3f546a7f7f6a543f2a150000000000000000000000000000000000000000000000000000000000000f20364b60758876614c36210c00000000000a1f3347587388735947341f0a0000000000000000000000000000000000000000000012283d52677d806b56412b16010000000000000000000000000000000715202e37404c50556064686a6c6c6c6a67646055514a43363126190d000000000000000000000010253a50657a816c57412c1702000000000000000000000002172c42576c817a65503b251000000000000000000000000000000000162b40556b807d68533e281300000000000000000000000000000000000000000000000000000000000010253a4f657a846f59442f1a0000000000000000000000000000000c21364c617686715b46311c00000000000010253a4f657a846e59442f1900000000000000000000000000000b20354b607588735443301c07000000000000182d42576d8278636479826d604f402f2113020000000000000f243a4f6479836d58432e18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c806a55402b150000000000172c41576c817c67523d2712000000000000000000000000000000000000000000000000000000000000091d3145566c827c675136251300000000000417293a5c718677614c37220c0000000000000000000000000000000000000000000010253a4f657a836e59432e19000000000000000000000000000000071525333e4b4f5e656e75797e7f8182817f7d79756e6660544b44372b1d12040000000000000000000d23384d6278846e59442f1900000000000000000000000000152a3f546a7f7d68523d28130000000000000000000000000000000013283e53687d806b56402b160100000000000000000000000000000000000000000000000000000000000d22384d627786715c3a29170400000000000000000000000000000e23384e6378846f59442f1a0000000000000d22384d627786715c3a291704000000000000000000000000000e23394e637886715b36251300000000000000152a3f556a7f7a655c697e7e695e4c3f301d150a0000000009192e3f546a7f7d68533e281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f6479826d58422d180000000000192e44596e837a65503a25100000000000000000000000000000000000000000000000000000000000000215273851667c826d5443301c0700000000001a2f44596f8479644f3a240f000000000000000000000000000000000000000000000d22384d627786705b39281603000000000000000000000000000515253343505c64717b8486827d7b7978797b7e8286837b73686055483c2f22120300000000000000000b20364b607586715c3a29170400000000000000000000000012273d52677c7f6a55402a150000000000000000000000000000000010263b50657b836d58432e180000000000000000000000000000000000000000000000000000000000000b20354b607588735847331f0a000000000000000000000000000316283951667b826c57422d170000000000000b20354b607588735846331f0a00000000000000000000000009192e3f54697e806b56412b160000000000000012283d52677d7d6752616c817c665d4d4132281c130c0b0d1727374b5d718577614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c617785705a37261401000000001a30455a6f8579644e39240f000000000000000000000000000000000000000000000000000000000000000c21364b61768774604a35200b0000000002172c41576c817c67513c2712000000000000000000000000000000000000000000000b20354b607588735745321e09000000000000000000000000001323334350616a7a868379716c686664636466696d717982867d73625a4c402f21110100000000000000081d3144557186715846331f0a00000000000000000000000010253a4f657a826d57422d18020000000000000000000000000000000e23384e637885705b382715020000000000000000000000000000000000000000000000000000000000081c304354728776614c37210c00000000000000000000000003101e3246576c817c67513c2712000000000000081c304354728776614c36210c00000000000000000000000a1627374b5d6f847b65503b26100000000000000010253a4f657a7f6a554b6073827c675f4b453830252120222a334455657a836e5947341f0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3447597186715544311d08000000001b30465b708578634e38230e000000000000000000000000000000000000000000000000000000000000000a1e334657708679644e39240f0000000000142a3f54697f7f69543f2a1400000000000000000000000000000000000000000000081c304354728776604b36210b0000000000000000000000000b1b304150616a7f867a6e645c5752504f4e4f5053575b636c77818578665e4c3f2e1f0f00000000000000021527375b708576614c36210c0000000000000000000000000d22384d6277846f5a452f1a000000000000000000000000000000000b21364b607688735645311d090000000000000000000000000000000000000000000000000000000000011426365a708579644e39240f010101010101010200030a0c161e2e3f4b61768776614c36210c000000000000011426365a708579644e39240f0101010101020001080b111b28324455657a8774604b35200b000000000000000d22384d6277816c5744556074827d6b60564a43363635373a474c60738579634e3b2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b5c718675604b35200b000000001b31465b708678624d38230d0000000000000000000000000000000000000000000000000000000000000003172939576c827d68533d2813000000000012273c51677c816c57412c1702000000000000000000000000000000000000000000011426365a708578634e39230e0000000000000000000000031729394d5f6a808475645c4f4a3e3d3b3a39393b3e3d4a4e59626c7b867c665d4b3d2d190900000000000000182e43586d8379634e39240e0000000000000000000000000b20354b607586715c3a2a1804000000000000000000000000000000091e324556738875604b36200b000000000000000000000000000000000000000000000000000000000000182d42586d827c66513c2717171717171717171819171e2128323f4b5d6a80806b5746331e0a00000000000000182d42586d827b66513c261717171717171718151d20242f39454b6074857c675544311d08000000000000000b20354b6075836e5937455660728081746660544f4b4b4c4f58616d817f695b49351d0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8477624d38220d000000001a30455a6f8579634e39240e000000000000000000000000000000000000000000000000000000000000000013283e53687d816c57422c1702000000000f243a4f6479846f59442f1a0000000000000000000000000000000000000000000000182d42586d827b66503b261100000000000000000000000a1e334657677d867561574a3e362d282624232426292d363b484c5e6677867b655b4a37261401000000000001162b40566b807b66513b2611000000000000000000000000081d3144557286725947341f0a000000000000000000000000000000021628385b708578634d38230e000000000000000000000000000000000000000000000000000000000000152b40556a807e69543e2c2c2c2c2c2c2c2c2c2d2e29333639464b5d657b8775614b3929170300000000000000152b40556a807e69543e2c2c2c2c2c2c2c2c2e273135393f4b57606d82836e5f4d3727150100000000000000081d3144556e836e5944384554606b7c847b746a64616062646b7682806b614f3d2c1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c827a654f3a251000000000192f44596e847a644f3a250f000000000000000000000000000000000000000000000000000000000000000010253a4f657a846f5a452f1a00000000000c22374c617786715c3a2a170400000000000000000000000000000000000000000000152b40556a807e68533e291300000000000000000000000c21364c61768879635746392e221b13110f0e0f11141a212a34404c5962788679635544311d0b00000000000013293e53687e7e69533e2914000000000000000000000000011426375b708577614c37220c00000000000000000000000000000000192e43586e837a65503b251000000000000000000000000000000000000000000000000000000000000013283d52687d816c5641414141414141414141424339464b5057616b7b8779635746331b0b000000000000000013283d52687d816b564141414141414141424337444b4e545d6575818474604b41301909000000000000000001142637596e836e59442836434a5e667580847f797675777a81867b6b625143321f0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f7d67523d281200000000182e43586d837b65503b261000000000000000000000000000000000000000000000000000000000000000000d23384d627887725d39291703000000000b1f3447597388735847331f0a0000000000000000000000000000000000000000000013283d52687d806b56402b1601000000000000000000071a2d3d556b80816c5b4939291b100700000000000000070d181f2f3b495a647a8673604b39291703000000000011263b50667b806b56412b1601000000000000000000000000182e43586d8379644f39240f00000000000000000000000000000001162b41566b807d68533d281300000000000000000000000000000000000000000000000000000000000010253b50657a836e595656565656565656565657585a5761656c76808679635b4939291700000000000000000010253b50657a836e59565656565656565657585955606469717b868074605645312312000000000000000000000f24394e6479644e39242530404c57606a757b81848583807a73665e514433251400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c7f6a553f2a1500000000172c42576c817c67513c271200000000000000000000000000000000000000000000000000000000000000000b20364b607589745746331e0a0000000004182a3b5c728776614c37210c0000000000000000000000000000000000000000000010253b50657a836d58432e18000000000000000000000c21364a5b728777624d3d2c1b0b000000000000000000000005111d2c3c4a5c6c827e685746331e0a00000000000e23394e6378836e58432e1900000000000000000000000001162b40566b807c66513c27110000000000000000000000000000000013293e53687e806a55402b150000000000000000000000000000000000000000000000000000000000000d23384d627886716c6c6c6c6c6c6c6c6c6c6c6d6e6f71767a82867f73635b4a3d2c1b0b0000000000000000000d23384d627886716c6c6c6c6c6c6c6c6c6c6d6f7075797e8683796b60564538271504000000000000000000000d21364a5c645c4a3621131c2f39454b5660666b6f6f6e6b6560544c40332616060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a826d57422d1800000000152a3f556a7f7e69543e29140000000000000000000000000000000000000000000000000000000000000000091d314556738876614b36210c00000000001a2f445a6f8479644e39240f000000000000000000000000000000000000000000000d23384d627885705b382815020000000000000000000e24394e637986715a48341f0e00000000000000000000000000000e1e2e3e4c61778776614c36210c00000000000c21364b617685705b3828150200000000000000000000000013293e53687e7e69543e29140000000000000000000000000000000011263b51667b826d58432d180000000000000000000000000000000000000000000000000000000000000b20364b60748a8181818181818181818181818283848685817b746960554a3d2d1f0f000000000000000000000b20364b60748a818181818181818181818183848586827e776e645c4b4538281a0a0000000000000000000000071a2d3e4a4e4a3e2d1a07121b283238454b5156595a5856504a43362f221608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d6277846f5a3625130000000012273c51677c816c57422c170000000000000000000000000000000000000000000000000000000000000000021527385d728877624d38220d0000000002172d42576c827c66513c2711000000000000000000000000000000000000000000000b20354b607587725645321d0900000000000000000013283e53687d816b563c2b1900000000000000000000000000000000101f3447596b807e68533928160300000000091e3246577186715645321d0900000000000000000000000011263b51667b816b56412c16010000000000000000000000000000000e23394e637885705a372614010000000000000000000000000000000000000000000000000000000000081d314455647979797979797979797979797978777671706c6660544b44372d1f0f0100000000000000000000081d31445564797979797979797979797979777675706d6861594f4a3e32281a0a000000000000000000000000000f202d3639362d200f00000a161e2832363c41444543413b35302518120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607586715443301c070000000e23394e637885705a3b2a180500000000000000000000000000000000000000000000000000000000000000001d32475c728778634e38230e0000000000152a3f556a7f7e69543e291400000000000000000000000000000000000000000000081d314455728775604b36200b000000000000000000152a40556a7f7e69543f29140000000000000000000000000000000004182a3b4e637985705746321e0900000000031628395b718675604b36200c0000000000000000000000000e24394e6379836e59432e19000000000000000000000000000000000c21364b617687725544311d080000000000000000000000000000000000000000000000000000000000021527374a5c64646464646464646464646464636261575a56504b43363127190f010000000000000000000000021527374a5c6464646464646464646464636261605458534c473a362d1d150a0000000000000000000000000000010f1a2124211a0f01000000030a161e21262c2f302e2b25201c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354718675604a35200b0000000b20364b607588735948341f0b00000000000000000000000000000000000000000000000000000000000000071c31465c718679634e39240e000000000012273d52677c816c56412c1701000000000000000000000000000000000000000000011527375b708578634d38230e000000000000000000172c41576c817c67523d271200000000000000000000000000000000000c21364a5b738776614b36210c0000000000192e44596e8378634e3a2a170400000000000000000000000c21364b617685705b382816020000000000000000000000000000000a1e324657738875604b35200b00000000000000000000000000000000000000000000000000000000000009192d3e4a4e4f4f4f4f4f4f4f4f4f4f4f4f4e4d4b4639413b3530261d1509000000000000000000000000000009192d3e4a4e4f4f4f4f4f4f4f4f4f4f4e4d4c4b43363e37342a221b10020000000000000000000000000000000000070d0f0d070000000000000003090b11161a1a1916100b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f8477624c37220d000000091d314556718677624c37220d00000000000000000000000000000000000000000000000000000000000000071c31475c718678634e39230e000000000010253a4f657a836e59442e190000000000000000000000000000000000000000000000182e43586d837b65503b2610000000000000000000172c42576c817c67523c27120000000000000000000000000000000000071a2d3d596f847a644f3a250f0000000001172c41566c81806b5847331f0d00000000000000000000000a1e3346577286725645321e09000000000000000000000000000000031629395b718677624d38220d000000000000000000000000000000000000000000000000000000000000000f202d363939393939393939393939393939373633292c26201c140801000000000000000000000000000000000f202d36393939393939393939393939383635302629221f180c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d827a644f3a250f00000002152738566b817d67523d281200000000000000000000000000000000000000000000000000000000000000011426375d728778624d38230d00000000000d22374d627786715c3929170300000000000000000000000000000000000000000000162b40556b807d68533d2813000000000000000000162b41566b807e68533e2913000000000000000000000000000000000000172c41566c817d67523d2812000000000014293e54697e8976614c3b2a180500000000000000000000031729395c718676604b36210b00000000000000000000000000000000192e44596e837a65503a251000000000000000000000000000000000000000000000000000000000000000010f1a21242424242424242424242424242322211e1717110b0801000000000000000000000000000000000000010f1a212424242424242424242424242221201c14130c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d1113141412100c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f7c67523c27120000000011263b50667b826d583f2e1b08000000000000000000000000000000000000000000000000000000000000081d314455738877614c37220c00000000000b20354b607588735746331e0a0000000000000000000000000000000000000000000013283e53687d806b55402b1600000000000000000014293e54697e7f6a553f2a15000000000000000000000000000000000000152a3f556a7f7e69543e2914000000000011273c51667c84806b5947341f1100000000000000000000001a2f44596f8478634d38230e00000000000000000000000000000001162c41566b817d67523d2812000000000000000000000000000000000000000000000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0e0d0c0a0300000000000000000000000000000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0e0d0c0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0e192023262829292825221f180d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d7f6a543f2a15000000000b21364b607587725d4b37220c0000000000000000000000000000000000000000000000000000000000000b20354b60758975604a35200b0000000000081c304354728776614c36210c0000000000000000000000000000000000000000000010263b50657b826d58432d1800000000000000000011263b50667b826d583c2b1906000000000000000000000000000000000014293f54697e7f6a543f2a1500000000000f24394f6479828377624c3f2e1a0a00000000000000000002182d42576d827a654f3a25100000000000000000000000000000000014293e54697e7f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e212b35383c3e3f3e3d3a37332a2220180d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a816c57422c1702000000091e3245566e847a644f3a29170400000000000000000000000000000000000000000000000000000000000d22374d627787725443301c070000000000011426365a6f8579634e39240e000000000000000000000000000000000000000000000e23384e637885705b45301b0000000000000000000c21374c617687725a4835200b0000000000000000000000000000000000152b40556a807e68533e291300000000000c22374c6177847a826d5d4b38281602000000000000000001162b40566b807b66513c26110000000000000000000000000000000011273c51667c826d57422d18000000000000000000000000000000000000000000000000000000000000000000000000070b0e12131412100c0a0400000000000000000000000000000000000000000000000000000000040a0c101314120f0b0801000000000000000002040000000000000000000000000000000000000000070c0e111413110d0b050000000000000000000002000000000000000000000000000000000004121b2933363c494d5153545352504c473a37342b1e170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d6277846f5a442f1a000000000216283851667b826d5847331f0b000000000000000000000000000000000000000000000000000000000010263b50657b846f5a36251300000000000000182d42586d827c66513c2611000000000000000000000000000000000000000000000b20364b607587725d48331d0000000000000000000a1f334758708578624d3928160300000000000000000000000000000002162838576c817c67513c271200000000000a1f334758718571837b655645321e1302000000000000000014293f54697e7d68523d2813000000000000000000000000000000000f24394e6479846f5a3625130000000000000000000000000000000000000000000000000000000000000000000608131c20232729292726221f180c0a040000000000000000000000000000000000000000000000060c171f212628292824201c14080500000000071017190b08010000000000000000000000000000010a0f1a2124272929262220180d090200000000050f15170d0b05000000000000000000000000000715223039464c555a626668696967656158554c483b33291b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607586715c3a2a1804000000000b20354b60748776614c392917030000000000000000000000000000000000000000000000000000000215273754697f806b56402b16000000000000000d22374d627876614c37210c00000000000000000000000000000000000000000000091d3245566479644e39240f00000000000000000004172a3a53687d806b5746321e11010000000000000000000000000000091e324556708579644e39240f000000000004182a3a5c718673778474604b41302010010000000000000014293e54697e7d68533d2813000000000000000000000000000000000c21374c617687725443301c07000000000000000000000000000000000000000000000000000000000000030e1920253035393c3e3e3d3b37342a211f170c0300000000000000000000000000000000000000000e1a212933373b3d3e3d393530261f180d00000a18242b2e201d140900000000000000000000000005131e252d36393c3e3e3c37342b201d150a00000917222a2c221f180d000000000000000000000006152532404c57616a70787b7d7e7e7d7a77716a62594c46392e2114060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144557186715947341f0a00000000081c3043546a7f7e695746331e0d000000000000000000000000000000000000000000000000000000081d3144556e837c66513c2711000000000000000b2034485962615847331f0a00000000000000000000000000000000000000000000021528384a5c645c4a36210d000000000000000000000c20364b60748576614b3f2e1f1102000000000000000000000000011426374b60758874604a35200b0000000000001a2f445a6f8477687d816c5f4d3e2d1f0f00000000000000142a3f54697f7d67523d2812000000000000000000000000000000000a1f334758738875604a35200b00000000000000000000000000000000000000000000000000000000000a161e2b3536434a4e51535452504c473a37332a1e160a000000000000000000000000000000000005121f2c353a474c505254524e4b4336342a1c1308182836404335312619090000000000000000000008162330393d4a4e515353514c483b3631271a12031727343e4237342a1d0d00000000000000000001142432434f5e66767f86837f7c7b7c7e8184867f776b61574b3f3124160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426375a708577614c37220c00000000011426364c61768676614b3c2b180800000000000000000000000000000000000000000000000000000b20364b60758976614c36210c0000000000000005192b3b484d4c473a2a170400000000000000000000000000000000000000000000000a1a2d3d4a4e4a3d2d1a0700000000000000000000081d314455677d816b5d4b3d2e1e160a0200000000000000000006131d314455687d826d5443301c07000000000002172d42576c827a646e837d675c4a3d2c1e11010000000000162b40556b807c67513c2712000000000000000000000000000000000417293a5c718677624c37220d000000000000000000000000000000000000000000000000000000000c1a28323c494d54606367686967656159554c473a32281b10020000000000000000000000000000031223303d494e5861656869676460544c473b30251824364653594b4437261401000000000000000006162634414d525b63666968666259534b4538301e1622344552574c473b2a180500000000000000000f1f32424f616a7c867d756e69676667686c70777e868076655d4e423326160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d8279644f39240f0000000000081f334658697e806b5a483626140100000000000000000000000000000000000000000000000005182b3b50667b856f5746331e0a00000000000000000d1d2b343737332a1c0c000000000000000000000000000000000000000000000000000f1f2d3639362d1f0f0000000000000000000000021527374a6072837b655b4b3f32281e160c0b04000300050b0e192031404b60748579634e36251300000000000000152a3f546a7f7c676175857a645b493c2f1d1509000000061a2c3d586e8379644f39240f00000000000000000000000000000000001a2f44596f847a644f3a250f0000000000000000000000000000000000000000000000000000000c1c2938454b5a626c74787c7e7e7c7b776f6a61584b45392e20130500000000000000000000000000102130414d5b636e767b7d7e7d79746b62594a4336292b4053646e605544311d08000000000000000014243444515f6770797c7e7e7b77706860564d4132292a3e52636c625947341f0b00000000000000061a2c3d4f606a7f8377686056545251525356586168737d857a6860504434261607000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a807c67513c271200000000000417293a4b60748678625443301c1102000000000000000000000000000000000000000000000008203448596e837d6852392917030000000000000000000d192022211f170c0000000000000000000000000000000000000000000000000000010f1a2124211a0f01000000000000000000000000091c30435461768579655d4b45383228221f1819191a1820222c35414d5e697f826d5b493518080000000000000012273d52677c7f695763798779635a4b3f312719110c0b102135495b718676614b36210c0000000000000000000000000000000002172c41576c817c67523c271200000000000000000000000000000000000000000000000000000b1b293a4656606b788187827f7d7c7d7f83847f766b60574b3e3023130600000000000000000000000a1a2e3f4d5f677983847f7d7c7d81858077686054463a2b43596e8373604b35200b000000000000000b1b314251636c7d86827e7c7c7e83857e74675f4b46392c42576c8177624c37220d000000000000000c2135495b697e837361594b45383d3c3d3e3a474c54606877837e6b62514434251503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d7e69543f29140000000000000c1d314455657b8473604b3f2e20100200000000000000000000000000000000000000000008182c3c4c62778876614b36210c0000000000000000000000050b0d0c0a040000000000000000000000000000000000000000000000000000000000070d0f0d0700000000000000000000000000000013253646576278847b6a60564b453837342a2f2e2f2b34373c494d5f677c8575604b3d2c1a000000000000000010253a4f657a816c575b63798678655d4b44372f242120222e3e4e637886715746321e090000000000000000000000000000000000142a3f54697f7f6a543f2a15000000000000000000000000000000000000000000000000000417293a4658617580857b756d6a6866676a6e757c848075645c4d4131241303000000000000000000021527384b5d677d867a706a6866686c707b847d726158483b43586d8277624d38220d000000000000031729394e606c8183766d696767696e767e857c6e6157493c41566b8079644f3a240f000000000000071a2d3e4e637986756055473a3127272627292a3336434a59617381806b62514333200d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a816c57412c17020000000000021527374c5d6b807f6a5d4b3e2d2011010000000000000000000000000000000000000000132536495a6b817f6a5746321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182939485a6275837f75686056514c473b4443443b484c525a636e7d8577625645321f0f00000000000000000d22374d6277846f594a5b6379867b6960554b3f393635373e4b5c6b817e695339281603000000000000000000000000000000000012273c51677c816c57422c17020000000000000000000000000000000000000000000000000a1f3346586176857f746660555452515254566066737d867a675f4e42312111000000000000000000091d314556657b8576645d55525153575e66737e84766259483b556b807a654f3a25100000000000000a1e334657687e837261585451515457616976818375635a493c53697e7c67513c27120000000000000d21364a5c6f847b665645372a1d1512111213181f25303a4755606c80806b61503c281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d6378846e59442f190000000000000009192f3f4b6073847b655c4a3e2f1c1408000000000000000000000000000000000001121c30435463788876614c39281603000000000000000000000000000000000000000000000000050b0d160d0b050000000000000000000000000000000000000000000000000000000000000000000000000b1b2b3c485761727c847d756d6661595b59585a5b5962676e788382756259483828160100000000000000000b20354b607586715c3d4a5b6377847f74655d544e4b4b4d505c647a8776614b36210c0000000000000000000000000000000000000f243a4f6479846f5a442f1a000000000000000000000000000000000000000000000000091c2f404c6176857d6960554b44373d3c3d38454b54606878857d68604e3f2f1e0e00000000000000000b20364b6074877863584b3f3d3c3d404c5460697a847762594853687d7c67523d27120000000000000c21364b617687776154473a3c3c39464b58616c7c8578635a4951667b7e69543f29140000000000000f24394e647985705e4c3828190c02000000000408131c2a37444b626b807f6a55402a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607586715c3a29170400000000000000111d3144556277857a645c4c3f3026180f05000000000000000000000000000008141c30404a6072847d685846331b0b0000000000000000000000000000000000000000000000000d1820222b2220180d0600000000000000000000000000000000000000000000000000000000000000000000000e1e2b3946546067757d83827c7772706e6e6f7173777d83837a6d6157483b2b1a0a000000000000000000081c30435471867158473d4a5962737f857b706964616062656d7a877b655746331e0a0000000000000000000000000000000000000c22374c617786715c3a2a180400000000000000000000000000000000000000000000000f24384c5e6d827f695f4b44373127282728273136434a5a6276847e685d4b3c2b190500000000000005192b3c53687e816b5a493a2e2827282f36434a5c64798577625650667b7f6a553f2a1500000000000013283d53687d806b5847362a272728323a474c5e66798578635a4e6379816c57412c17020000000004172a3a566b817d6853402f1a0a0000000000000000000c1926314450616a76614b36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145567186715846331f0a000000000000000114263748596277857a655d4b43362d20190d0902000000000000000000070f182630404d5e6a7f836e5f4e3a29170000000000000000000000000000000000000000000000000d1d2b34374137342b20190e06000000000000000000000000000000000000000000000000000000000000000000000e1b2936434a5660686e777d8287858383848588847e776e645c4b46392b1d0d00000000000000000000011426365a708576614c373b4755606a7781847e797675777a828679655d4b392917030000000000000000000000000000000000000b1f3447597388735947341f0a00000000000000000000000000000000000000000000071b2d3e51667b8573604b4131271d15131112151d25303c49586175857b655a483520130000000000000b2035485a718677624d3c2c1b1311131825303e4a5b63798475604e6378826c57422d17020000000003162939596f8479644f3a2a181212161e2933404c5b6379857862576176836e59442f1900000000000a1f334758728777614c372111000000000000000000000009141d33435057615746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002021527385b708576614c36210c000000000000000009192a3b48596278857b6a60544a3e342b201d15110e0c0b080b0c0f131c202d36434b5e667c8675614c41311c0c000000000000000000000000000000000000000000000005182b3b484d564c483b352b211a0f070000000000000000000000000000000000000000000000000000000000000000000b1825303c4857616d7982847f7b7a78787a7c808180776c61584c403124140500000000000000000000182d43586d8279644e392a37444b59616c767c81848583817a73635b4b3f2e1b0b0000000000000000000000000000000000000004182a3b5c728777614c37220c000000000000000000000000000000000000000000000d22364a5c70857a645443301d1509010000000208131c2b3a465762788778624d4130190900000000000d22384d627785705948341e0e00000008131c2e3d4a5b667c836e606176846f5a442f1a00000000000a1e324657728775604b35200c0000030c171f2f3d4a5b647a857561577084705a39291703000000000c21374c617687725847331f0a0000000000000000000000000116253339464b4639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c12141818182e43586d8379644e39240f0000000000000000000d1d2b3b485a6276838073645c4d483c363228262322201d2021242530353e4a54606a7c86776257463323130000000000000000000000000000000000000000000000000b20344859626b62594d483c352c221b10080000000000000000000000000000000000000000000000000000000000000004182a3a485a62758282786f6a6664636364676b6c79828177665e4e4231231301000000000000000000152b40556a807c66513c2726313b474c5761676c6f6f6e6b6560544a3d2e21100000000000000000000000000000000000000000001a2f445a6f8479644f39240f000000000000000000000000000000000000000000000f24394f647985705c4a3626140100000000000000000e1b2939485a667c846f5f4d372715020000000012283d52677d806b563b2b18000000000000101f2d3d4d5e6a807d685a7085705b3a2a1804000000000c21364b617686715544311d080000000004121f2d3c4a5c667c826d607084705746331e0a0000000010253b50657a836e593a2a17040000000000000000000000000007151b29333633291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f27292d2d2d2d40566b807b66513c2611000000000000000000000d1d2b3c4858616e7f84796d625a514b45383b3837363135363936434a505c64737f8577625948392917050000000000000000000000000000000000000000000000000d22374d627780776c625a4e493d362d221b100900000000000000000000000000000000000000000000000000000000000a1f3347586278867c6e635b55514f4d4e4f52565b636d7a847b68604e42311f0f00000000000000000013283d53687d7e69543e29141d2a3439464b5156595a5856504a43362d1f1002000000000000000000000000000000000000000002172d42576c827c67513c271200000000000000000000000000000000000000000003162839576c817d68533e2d1808000000000000000000000b1b2b3c4c5e6f847c675544311d0800000000162b40566b807d67523d2812000000000000000f1f30404b60738478627085705847331f0a000000000d22374d6277846f5a372614010000000000010f1e2d3e4c5e6b807e686e8376614b36210c0000000013283e53687d806b55402b16000000000000000000000000000000000b171e211e170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e424242424253687d7e69543e291400000000000000000000000d1d2b3a474c6169788382776e67605655514e4c4b444b4c4f525460656e798581746259483b2b1b0b000000000000000000000000000000000000000000000000000b20344859657b8381786d635b4e4a3e372e231c11070000000000000000000000000000000000000000000000000000081b2e3f4c6176857a665e4d493c3c3a38383a3d3d494e5c6475827e68604e3d2d1909000000000000000010263b50657b816b56412c160c181f2933363c41444543413a353025180f0100000000000000000000000000000000000000000000152a3f546a7f7e69543f2914000000000000000000000000000000000000000000091e324557718678624d3823100000000000000000000000000d1d30404e63798774604b36201000000000192e44596e837a644f3a250f0000000000000001121d3144556479846e6f8477614c37220c000000000e23384d6378846f5a442f1a000000000000000010202f404b607484786c8179634e39240e00000000142a3f54697f7f69543f2a140000000000000000000000000000000000030a0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f54575757575757667b816b56412c160000000000000000000000000d1c2933434f5b636e7a84837c756f6a6663616055606164676c747a83857a6c6056483b2b1d0d000000000000000000000000000000000000000000000000000005182b3b4b5d656e798382786e645c4f4b3f382f201c13080100000000000000000000000000000000000000000000000e22374b5d6e837d685c4c40352c2625232324272c363e4a566072827e685b4a37271501000000000000000e23384d6378836e59442e1900040b171e21272c2f302e2c25201c130800000000000000000000000000000000000000000000000012273d52677c816c57412c170200000000000000000000000000000000000000000b21364b607688735a4835200b00000000000000000000000000122135495b6c817d68533f2e1b080000001b30455a708578634d38230e0000000000000000011426374a5c6b807b6c8179644f39240f000000000e23384d6378846f59442f1a040000000000000002111d3144556379836d7e7b66513b261100000000162b40556b807d68533e2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273b4f60696d6d6d6d6d6d6d79836e59442e19000000000000000000000000000c171f323c494d5d646e777f8584807b787775707576797c8286827a6f645c4b45382b1d0d000000000000000000000000000000000000000000000000000000000d1d2e3f4b4f5c646e798283796e655d504c403530251d1409020000000000000000000000000000000000000000021527384f657a8570604e3e2f2119110f0e0e0f121a212d38455460748579635544311d08000000000000000b20364b607585715b392816030000030a0c12171a1a1916100b0700000000000000000000000000000000000000000000000000000f253a4f647a846e59442f190000000000000000000000000000000000000000000f243a4f6479846f593c2b190600000000000000000000000000061a2c3d4d637887725d4b3722080000001c31465c718677624c37220d00000000000000000009192d3d4b617584737f7c66513c2711000000000c21374c617685705b45301b00000000000000000002152737495b6b807b7c7e68533e291300000000162b40566b807d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e818282828282828285715b46311c000000000000000000000000000004141e2c353f4b4f59626970777b7f828485848584817e7a756d645c4f4b3e32281a0d00000000000000000000000000000000000000000000000000000000000010212e373e4a4f5b636d7881837a6f655e514a433631261d150a03000000000000000000000000000000000000091d3145566e837b6651413120120600000000000006101a2836455663788574604b35200f00000000000000091d3245567186715746321e09000000000000010405030100000000000000000000000000000000000000000000000000000000000d22374d627786715c3a291704000000000000000000000000000000000000000011263b50667b826d58422d180000000000000000000000000000000f2135495b70857a654f3625130000001c32475c718776614c37210c000000000000000000000f1e324657697e7d7d7e69543f2914000000000b20354a607586715c3828160300000000000000000009192c3d4b6176837a806b56402b1601000000152a3f546a7f7e69533e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c6176777777777777777776614c37210c000000000000000000000000000000000e19212e373b484c545961666a6d6f7070706f6c696460554f4b3e372e1e160a0000000000000000000000000000000000000000000000000000000000000002101b222d363d4a4e5a626c7780847b6f6660544b443731271e160a03000000000000000000000000000000000b20364b60758875604b352013020000000000000000000a182838495b6c827d67523d2d1a07000000000000021528385b708576614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607588735846331f0a000000000000000000000000000000000000000012273d52677c816c56412c1701000000000000000000000000000006192c3c52687d826c5443301c0700001b30465b708578624d38230d00000000000000000000031628394b6075837a816c56412c1701000000071c3043547186715645321e09000000000000000000000f1e334657687d7d826e58432e190000000014293e53697e7f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334658616161616161616161615847331f0a000000000000000000000000000000000006101b222b34373b474c5155585a5b5b5b5a57544f4b4437372e221b10020000000000000000000000000000000000000000000000000000000000000000000008101b222d363c494d59626b7680847c736760554b453832281e170b0400000000000000000000000000000f253a4f647a846f5544311d0800000000000000000000000a1a2c3c4d627886705b4a36210c00000000000000192e43586e8378634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354728776614c36210c000000000000000000000000000000000000000013283e53687d806a55402b15000000000000000000000000000000000e21364b60768874604a35200b00001a2f44596f8479644f39240f00000000000000000000000b1d314556687d7d836e59442e1900000000001325365b708576604b36210b00000000000000000000031729394b607583846f5a3827150200000011273c51667c826c57422d1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a464c4c4c4c4c4c4c4c4c4c473a29170400000000000000000000000000000000000000080d1820222a34373c40424546454544423f3a353127221b10070000000000000000000000000000000000000000000000000000000000000000000000000000070f1a212b353b484c58616a767f847c746860564b453933291f180c0500000000000000000000000012283d52677d816c56372614010000000000000000000000000e2035495a708579634e39240e00000000000001162b41566b807b66503b261100000000000000000000000000000000000000000000000000000000000303030303030303030303001325365a6f8479644e39240f030303030303030303030303030000000000000013283d53687d806b56402b1601000000000000000000000000000000091e3245576f8479634e39240e0000182d42586d827b66503b26110000000000000000000000021527384b60758386705b3929160300000000192e44596e8378634e38230e00000000000000000000000b1d314455697e88735645311d090000000e23394e6378846f5a3b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b29333637373737373737373733291c0c00000000000000000000000000000000000000000000050b0d181f22262a2d2f3030302f2c2925201d150908000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e19202b343a474c576169757e847d756960574c4639332a20180d060000000000000000000014293e54697e7f6a553f2a150000000000000000000000000006192c3c556a7f7e69543e29140000000000000014293e53697e7d68533e28130000000000000000000000000000000000000000000000000000090f11181818181818181818181818182d42576d827b66513c2618181818181818181818181818180e0c070000000012273c52677c816c57412c170200000000000000000000000000000003162839556a7f7e69533e2914000014293f54697e7f69543f2a140000000000000000000000000a1e3245566b8088735746321e0a00000001162c41566b817b65503b26100000000000000000000000021527374b60758875604b36200b0000000b20364b60758773594834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171f212222222222222222211f170c0000000000000000000000000000000000000000000000000000040b0c1115181a1b1b1b1a17140f0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d18202a3339464b566068747d847e756a61574c473a342b20190e00000000000000000014293f54697e7f69543f2a14000000000000000000000000000010253a4f657a836e59432e190000000000000011263b51667b806b56402b1601000000000000000000000000000000000000000000000004121d24262e2e2e2e2e2e2e2e2e2e2e2e2e2e40556a7f7e69543e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e24211a0f01000010263b50657b826d58432d18000000000000000000000000000000000011263b50667b826d58422d18000010253a50657a836e583d2d1a070000000000000000000000031628384d62788c76614b36210c0000000014293e54697e7d68533d2813000000000000000000000000091e3245566e8378634d38230e000000081d314455708577624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0c0c0c0c0c0c0c0c0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c171f293338454b556067737c847f766b61584d483b352c1e0f010000000000000013283d53687d806a55402b1500000000000000000000000000000d23384d627885705b46311b000000000000000e24394e6379836d58432e18000000000000000000000000000000000000000000000000122230383c43434343434343434343434343434352677d816b564343434343434343434343434343434339362d1f0f00000e23384d637885705b3b2a1805000000000000000000000000000000000d22374d627785705b37261401000c21364c617687725b4a36210c0000000000000000000000000a2035485a6f8478634e39230e0000000011273c51667c806a55402b1500000000000000000000000003162838566c817a65503b251000000002152737566b807d675239291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000610161816100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b171e283237444b5460666f7b8380776b62594d493c2c1f0f0000000000000010253b50657a826d583b2a1805000000000000000000000000000b21364b607687725d48321d000000000000000c21364c617685705b3727150200000000000000000000000000000000000000000000091d30404c5158585858585858585858585858585858657a836e59585858585858585858585858585858584e4a3d2d1a07000b20354b607588735947341f0b000000000000000000000000000000000b20354a607588735544311d08000a1e334657708579634e39231100000000000000000000000005192b3c576c827b66503b2611000000000f24394f6479826d58432d180000000000000000000000000014293f54697e7d68523d28130000000010263b50657b826d5746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e10101010101010101010101010101010101010101010101010101010100e0c06000000000000000917232b2d2b2317090000000000000000000000000000000000000304020000000000000000000000000000000000000000000000000000000000030a161e273136434a515e666e7a8381776c625a493d2c1a060000000000000c21374c617686715947341f0a000000000000000000000000000b20364b607588735d48331e000000000000000a1e3346577186715544311d08000000000000000000000000000000000000000000000f24384c5e666d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d7886716d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d635b4a36210c00081d314455718677624c37220d00000000000000000000000000000000071c304354728775604b35200b000317293953697e7f6a553f2f1c09000000000000000000000000152a3f546a7f7e68533e2913000000000c22374c617785705a3626140100000000000000000000000011273c51667c7f6a55402a15000000000b20354b60758776614c36211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f12100a000000000000000000010f1a2123252525252525252525252525252525252525252525252525252525252523211a0f0100000000061727353f433f3527170000000000000000000000000001080b1015181917130c0a040000000000000000000000000000000000000000000000000000000209151d253035404c505d656e79828178635b4935210c0000000000000a1f334758718677624c382816020000000000000000000000000d22374c627786715c46311c00000000000000031729395c718675604b36200b0000000000000000000000000000000000000000000011263c51667c8283838383838383838383838383838382838983838383838383838383838383838383838279634e39240e0001152737576c827c675236251300000000000000000000000000000000001325365c718676614c36210c00000d22374c627786715d4c38231000000000000000000000000012273d52677c806b56402b16010000000a1f3447597186715443301c080000000000000000000000000f24394f6479826d58422d1800000000081d3144556c817e68533e2e18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222527241d1204000000000000000f1f2c35383a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39362c1f0f000000001023354652585246351a0a000000000000000000000509141d20252b2d2e2c28211f170c010000000000000000000000000000000000000000000000000000000108131c202f383f4b4f5c646d7b8878634e38230e00000000000004172a3a54697f7e695645321e0f0000000000000000000000000f243a4f6479846f59442f1a0000000000000000192f44596e8378624d38230d000000000000000000000000000000000000000000000d22374c62777979797979797979797979797979797979797979797979797979797979797979797979797a76614c36210c000012273c52677c816c5443301c07000000000000000000000000000000001c31465b718677624d37220d00000b203448596e837b65503e2e180800000000000000000000000f253a4f647a836d58432e180000000004182a3a5c718675604b35200b0000000000000000000000000c22374c6177846f5a36251300000000011527374e647986715c4b3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a3c39302312010000000000061a2c3d494e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e493d2c1a06000000162b3f52646d64523827150200000000000000070d18202631353a404243423d3633291c14080000000000000000000000000000000000000000000000000000081219263139454b58616c78828379635b4935210c000000000000000c21364c61768675604b3d2c1c0e0000000000000000000009192e3f546a7f7f69543f2a14000000000000000014293e53697e79634e39230e000000000000000000000000000000000000000000000b1f3447596264646464646464646464646464646464646464646464646464646464646464646464646464615846331f0a00000c21374c61778774604a35200d000000000000000000000000000000071c32475c718676614c37210c000005182b3b4f6479846f5c4b36261401000000000000000000000d22374d627785705b37271502000000001a2f455a6f8477624d37220d0000000000000000000000000a1f3447597186715443301c07000000000921364a5c6f847a645443301c0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3e4b4f514d41301f0f00000000000c2135495b636565656565656565656565656565656565656565656565656565656565635b4936210c000000182d43586d826d5645311d09000000000108101b222b3437444b5055585957524c463a30261809000000000000000000000000000000000000000000000006101b223037444b57606a7781847a6e635b493d2c1a06000000000000000a1e3346576a7f7e695b493a2b1e1108000000000000000a1527374b5d708579634e39240e000000000000000012263b4f6069635b4a36210c0000000000000000000000000000000000000000000005182a3b474c4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c463a29170400000a1f3347586e847a65503b2b1805000000000000000000000000000006192c3c5d738875604b35200b0000000d22364a5c6f847a645443301c0e000000000000000000000b20354a607587725544311d0800000002182d42576d827a644f3a250f00000000000000000000000004182a3a5c718675604a35200b00000000071a2d3d4f647a8572604a3929170300000000000000000000000000070d0f0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c64675f4d3d2d1909000000000e23384e63797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79634e39230e0000001b30455b708475604b36200d00000308141c202d363b484d5560656a6d6e6c6861584b43362619090000000000000000000000000000000000000000050f1a212e37404c556068757f857b6f645c4d493c2c1f0f0000000000000000031729394b607585796358483c2f221b100d0b080b0d121a27314455657a846f5b4a36210c00000000000000000c1f32424f534e4a3d2d1a0700000000000000000000000000000000000000000000000d1d2a3437393939393939393939393939393939393939393939393939393939393939393939393939393633291c0c00000004172a3a51677c826d594834200e00000000000000000000000000000c2035495a7388735443301c08000000071b2d3e4e63798573604b3c2c1a0a000000000000000000071c304354728675604b36200b00000000152a40556a7f7c67523c2712000000000000000000000000001a2f445a6f8477624c37220d00000000000f22374b5c6e837d675746331e14050000000000000000000002101b2224211e170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a7c675b4a3726140100000012273c51677c80808080808080808080808080808080808080808080808080808080807d68533d2813000000172c41576c817a654f3b2b1a1011161e2630353e4a4f59626b757a808283817d7669605444372614010000000000000000000000000000000000040d18202c353f4b4f5e66747d857d74665e4f4b3e352c1e0f010000000000000000000b1e32455762788576625a4c40372e2622201d2022252f38454b6074857a654f3d2d1a070000000000000000021424323b3e39362d1f0f000000000000000000000000000000000000000000000000000d181f2224242424242424242424242424242424242424242424242424242424242424242424242424211f170c00000000000c20354b60748777624d3d2c1a06000000000000000000000000000d23384d627886705b36261401000000001021364a5b6c817e685b49382818080000000000000000001325365a6f8478624d38230d0000000012283d52677d7f69543f2a1400000000000000000000000002172d42576c827a644f3a250f0000000000081b2e3e4c62778776614b433223150400000000000000000311202e363a3633291b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c6b8179635544311d0b0000001024394d5f676b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b68604e3a261100000011263b50667b816c5948382c2526283236434b515c646d778086817b7877797e857f72605544311d0d000000000000000000000000000000020b171f2b343d494e5d656f7c857f756860554c40372e21190e000000000000000000000003162839495a657b8478665e4f4b3e3b38353136373a404c56606d81806b5d4b371f0f0000000000000000000006141f262923211a0f010000000000000000000000000000000000000000000000000000050b0d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0c0a04000000000000081d314455687e816b5b493521140300000000000000000000000216283852677c816c56412c170000000000071a2d3d4c61768679635645362514090000000000000000182d42576d827a65503a25100000000010253a50657a816c57412c1702000000000000000000000000152a3f556a7f7c67523c2712000000000000101f344859687d826d614f41321f170c0100000000000412212f3e4a4f4c4639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3e4b60758373604b3929160300000a1d30414d515555555555555555555555555555555555555555555555555555555555534e42311e0b0000000b20354a607386786256493c3b3b39454b5460666f7983847c746c666362636974808273604b3b2b1805000000000000000000000000000a151d29333b484d5b636e7a8581776a60564b44372f221b1006000000000000000000000000000a1b2c3c4b5d6579857b6f645c55504d4b444b4c4f555e6674818272604b3f2e1b010000000000000000000000020c12140e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374b60758778634e423221110200000000000000000000091e3245566c817c67523c27120000000000000f1e334657647a85746054433126190c00000000000000152a3f556a7f7d68523d2813000000000d23384d6278846e59442f190000000000000000000000000012283d52677d7f69543f2a1400000000000005182a3b4e5f6c817f69604f4333291d140c0a070b0c181f2f3f4b5c64615746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101e324556657b7e685746321e0a000000122330393c40404040404040404040404040404040404040404040404040404040403d3a31241302000000071c304354657b8474635a52505153576068747c8483796f666054504e4c4e55606b807f6a594834200b000000000000000000000008131c28323a464c59626d798383786c61584b45383126191207000000000000000000000000000000000e1e2e3f4b5b637681847a706a656260556062646a707b857f6d60544330211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d324556667b846f614f3f2e2011020000000000000000021628384b60758776614b36210c000000000000031729394a5c687e8272604b4437291c1105000000000012273d52677c7f6a55402a15000000000b20364b607586715c3929170300000000000000000000000010253a50657a816c57422c17020000000000000d1d31414b6073837e69614c463a3126211f1c20212a34404c5d657976614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384c5e6e8376614b36210c00000004121d24272b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b28261e130600000000001325364b5d677d84786d676566686e767e8580776e645c514b4336383737444b60738577624d37220d000000000000000000071118253038454b58616b778284796d625a4c473a32281d14090000000000000000000000000000000000000011212e3d4957616b7781847f7b77757075777a808582786a614b433626140300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384c5e6d827e695d4b3e2f1d150901000000000007141e324556687d816c5746331e0a000000000000000b1b2d3e4e606b80816c6055473a2e1f180d0600000010253a4f657a826d57422d1800000000081d3144557186715746331e0a0000000000000000000000000d22384d6277846f59442f1a0000000000000000131d3144556074837f6e61584b443736333035373a474c5e667b8375604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2f4051667b7e685339291703000000000a10121616161616161616161616161616161616161616161616161616161616130c0b0700000000000008182e3f4d5f677a85827d7a7b7e83857e766b625a4f4a3e353026232227314455677d7f6a55402a1500000000000000010f1a212f36434a5660697680857b6f645c4d493c332a1e160a01000000000000000000000000000000000000000003111f2c39464c59626c757b7f8385858583817c766d635a4f43302618080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2f404b6175867b655c4b3f31271d140e0c0b0d0f1a2131414b60758679634e3929170300000000000000001020314250626b80817361584b3f342a211a110f0d0d22374d6277846f5a36251300000000021527375b708576614b36210c0000000000000000000000000b20354b607586715c3a291704000000000000000215273745566073818276686055504c46434a4c5159616c7c8475615544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182636434b6074836e5746331e0a0000000009151d20212121212121212121212121212121212121212121212121212121212121201c13080000000000102130414d5c6470787d7f7f7c77706961574d483c362d201c140e0d1526374c617685705a362513000000000000000f1f2d36404c546067757e867d73655e4f4a3e352b1f170c030000000000000000000000000000000000000000000000000e1b29333b484d5660656a6d7070706e6c6661574d493c321c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e3246576278867a655d4b4437312623212022242d36424e5f6b817f6a5b49351b0b000000000000000000021424334451626b7f8476655d4c473b362c2724232223354a607586715443301c0700000000192e43586e8378634e39230e000000000000000000000000081d3144557186715846331f0a0000000000000000091928384555606c7b857d746b656158546061666c778184756157463727150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536435460646d8176614b36210c0000000919273136363636363636363636363636363636363636363636363636363636363636353025180800000000031323303e4a4f5b63686a6967625a534b4639342b221b1008010000091f3346587085705443301c070000000000071a2d3d4a4e5e66737d867e756760544c40362d20190e040000000000000000000000000000000000000000000000000000000b171e2b3438454b5055585a5b5a5957514c4639352c1e150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162939495a6379867b6b60554b443738363537393d4a4e60697d8573604b3d2c1a0000000000000000000000061526344451616a7c867b6d62594e493d3c3a3837383b4354718675604a35200b00000001162b41566b807b66513b2611000000000000000000000000011527375b708576614c36210c0000000000000000000a1a2837444b5e66757e85807b766f7075767b81867d6f6157463929190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435460737a797f7a644f3a250f000002152737444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a4336251300000000000513202e363d494e535554524d483c36322820190d0700000000000417293a556a8072604a35200b00000000000c21364a5b636f7b8580766960564a43362f221b1006000000000000000000000000000000000000000000000000000000000000030d19202832363b404345454543413c36332920190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3c495b6378858074676055514d4c4b4d4f545b636f7e8476615544311f0f00000000000000000000000007162634434f5e66788382776d635b56514f4d4c4d50545a6f8477624c37220d0000000014293e53697e7e68533e291300000000000000000000000000182e43586d8379644e39240f000000000000000000000a192731404c56606974797f8383858584807a74675f4c4639291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6072838f8e877c67513c27120000081d31445560616161616161616161616161616161616161616161616161616161616161605443301c07000000000002101b222c35383e403f3d38352b211e160b0500000000000000000b283c50616a605443301c0700000000000e24394e63798382786b61584b4538302518110700000000000000000000000000000000000000000000000000000000000000000000050a161e21262a2e3030302e2c27211e170b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3d495a62737f857c746c666361606264697079848275615846372715010000000000000000000000000008162532404c59626e7b858278706c666462616265696f788679644f39240f0000000011263c51667b806b56402b1601000000000000000000000000162b40556b807b66513c2611000000000000000000000009151d2f38454b5460646a6e6f70706e6b6560554d4133291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea1a6917c67523c271200000b20364b607476767676767676767676767676767676767676767676767676767676767672604a35200b00000000000000070f1a2123282a2a272220190e0903000000000000000000000d21334350554a43362513000000000000142a3f54697f796d62594c463a32281c1308000000000000000000000000000000000000000000000000000000000000000000000000000002090b1015181b1b1b1917110c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f2c3c48546069778085817b78767577797e84857a6d6057463a2919090000000000000000000000000000000715222f3b484d5e66707a8385817c797877787a7e84857c665c4a36220d000000000f24394e6479826d58432e180300000000000000000000000013283e53687e7e69533e291400000000000000000000000002121a283236434a4f55585a5a5b5955504b4437311e170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798ea0a08e79644f39240f00000f24394f647983848484848484848484848484848484848484848484848484848484848377614c37220c000000000000000000060c0e131514120d0b0500000000000000000000000000041525333c40353025180800000000000012273b4f6169635b4d483b33291d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1d2b36434b58616a74797f82838484827e786f645c4b4539291b0b000000000000000000000000000000000004121d2b34404c515d656e757a7f81838382807d7770665e4c3e2d1b07000000000b20364b607479634e39230e000000000000000000000000000c21374c617678624d38220d00000000000000000000000000000a151d25303539404344454644403a35312619130300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2136495b6d828f8f826e5c4a36220d00000d22364a5c646e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e615847331f0a000000000000000000000000000000000000000000000000000000000000000000071521282b201c1308000000000000000c2032434f544e4a3d342b1f170c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1826303a474c5460646a6d6e706f6c68635a4f4b3e32281b0b00000000000000000000000000000000000000000d19202f383f4b4f556064696b6d6e6d6b68625a504c402f20100000000000091d31455660635b4a36210c000000000000000000000000000a1f33475861625a4835200b0000000000000000000000000000000208131c20242a2e2f30302f2b25201d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4a60727a7a72604a3e2d1b070000071b2d3e4a4f5959595959595959595959595959595959595959595959595959595959594c473a2a180400000000000000000000000000000000000000000000000000000000000000000000040d13150b07000000000000000000031525323b3f39362d20190d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2a3336434b4f5457595a5957534d493c372e1e160a0000000000000000000000000000000000000000000005121d242e3737444b4f545658595856524d483c382f221102000000000002152738454b4e4a3d2d1a070000000000000000000000000004172a3a474c4d483c2b1905000000000000000000000000000000000000070b0f15191a1b1b1916100b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1c3043546064646054433020100000000010202d363944444444444444444444444444444444444444444444444444444444444437332a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520272a24211a0f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c181f263035393f42444544423e38352c221b10030000000000000000000000000000000000000000000000000009111c232631353a3f41434443413d38352b231c1104000000000000000a1a27313639362d1f0f0000000000000000000000000000000c1c2a333738352b1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a4f4f4a43362513020000000002101b22242f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f221f180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c12140e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408141c20242a2d2f302f2d292320190e0800000000000000000000000000000000000000000000000000000000000809141d20252a2c2e2e2d2b282220190e09000000000000000000000a151d2023211a0f01000000000000000000000000000000000c171f212220190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530353a3a353025180800000000000000070d0f1919191919191919191919191919191919191919191919191919191919190c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f1518191b1a17130e0c0600000000000000000000000000000000000000000000000000000000000000000001080b0f141618191816130d0b050000000000000000000000000002090b0e0c0700000000000000000000000000000000000000040a0c0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202525201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f0f0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!21 &-3838080009512101219 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-HairlineItalic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -4398803698183095516} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-HairlineItalic SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: -3838080009512101219} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: 747a175745b7f704e8f9c65f1aca44b3 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Hairline Italic + m_PointSize: 76 + m_Scale: 1 + m_LineHeight: 91.2 + m_AscentLine: 75.012 + m_CapLine: 54 + m_MeanLine: 37 + m_Baseline: 0 + m_DescentLine: -16.188 + m_SuperscriptOffset: 75.012 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -16.188 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -19.38 + m_UnderlineThickness: 0.722 + m_StrikethroughOffset: 14.8 + m_StrikethroughThickness: 0.722 + m_TabWidth: 20 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 20.375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 41.65625 + m_Height: 53.203125 + m_HorizontalBearingX: -1.21875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 44.765625 + m_GlyphRect: + m_X: 268 + m_Y: 203 + m_Width: 43 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 33.296875 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 43.734375 + m_GlyphRect: + m_X: 288 + m_Y: 399 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 42.03125 + m_Height: 54.421875 + m_HorizontalBearingX: 5.171875 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 48.109375 + m_GlyphRect: + m_X: 62 + m_Y: 311 + m_Width: 43 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.78125 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 53.625 + m_GlyphRect: + m_X: 223 + m_Y: 138 + m_Width: 45 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 35.1875 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 41.078125 + m_GlyphRect: + m_X: 332 + m_Y: 136 + m_Width: 36 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 35.1875 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 40.125 + m_GlyphRect: + m_X: 334 + m_Y: 71 + m_Width: 36 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 43.40625 + m_Height: 54.421875 + m_HorizontalBearingX: 5.203125 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 52.171875 + m_GlyphRect: + m_X: 123 + m_Y: 6 + m_Width: 44 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 42.640625 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 52.75 + m_GlyphRect: + m_X: 208 + m_Y: 269 + m_Width: 44 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 7.453125 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 17.5625 + m_GlyphRect: + m_X: 381 + m_Y: 71 + m_Width: 8 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 26.4375 + m_Height: 53.84375 + m_HorizontalBearingX: -1.4375 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 29.03125 + m_GlyphRect: + m_X: 178 + m_Y: 6 + m_Width: 27 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 38.6875 + m_Height: 53.28125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.28125 + m_HorizontalAdvance: 42.984375 + m_GlyphRect: + m_X: 283 + m_Y: 71 + m_Width: 40 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 26 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 34.890625 + m_GlyphRect: + m_X: 369 + m_Y: 201 + m_Width: 27 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 52.671875 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 62.78125 + m_GlyphRect: + m_X: 203 + m_Y: 204 + m_Width: 54 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 42.640625 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 52.75 + m_GlyphRect: + m_X: 232 + m_Y: 334 + m_Width: 44 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 45.984375 + m_Height: 54.34375 + m_HorizontalBearingX: 5.203125 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 55.40625 + m_GlyphRect: + m_X: 111 + m_Y: 87 + m_Width: 47 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 32.53125 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 333 + m_Y: 399 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 45.984375 + m_Height: 66.203125 + m_HorizontalBearingX: 5.203125 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 55.40625 + m_GlyphRect: + m_X: 35 + m_Y: 411 + m_Width: 47 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 32.296875 + m_Height: 53.203125 + m_HorizontalBearingX: 5.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 41.609375 + m_GlyphRect: + m_X: 336 + m_Y: 333 + m_Width: 33 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 32.296875 + m_Height: 54.421875 + m_HorizontalBearingX: 1.90625 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 37.234375 + m_GlyphRect: + m_X: 145 + m_Y: 376 + m_Width: 34 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 37.84375 + m_Height: 53.203125 + m_HorizontalBearingX: 4.484375 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 39.59375 + m_GlyphRect: + m_X: 238 + m_Y: 434 + m_Width: 39 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 40.125 + m_Height: 53.890625 + m_HorizontalBearingX: 6.84375 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 50.875 + m_GlyphRect: + m_X: 93 + m_Y: 407 + m_Width: 41 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 41.578125 + m_Height: 53.203125 + m_HorizontalBearingX: 5.203125 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 44.5 + m_GlyphRect: + m_X: 279 + m_Y: 136 + m_Width: 42 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 65.75 + m_Height: 53.203125 + m_HorizontalBearingX: 5.921875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 70.21875 + m_GlyphRect: + m_X: 216 + m_Y: 6 + m_Width: 67 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 43.78125 + m_Height: 53.203125 + m_HorizontalBearingX: -1.21875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 42.59375 + m_GlyphRect: + m_X: 227 + m_Y: 71 + m_Width: 45 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 37.390625 + m_Height: 53.203125 + m_HorizontalBearingX: 5.015625 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 39.9375 + m_GlyphRect: + m_X: 287 + m_Y: 334 + m_Width: 38 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 42.09375 + m_Height: 53.203125 + m_HorizontalBearingX: -0.03125 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 41.265625 + m_GlyphRect: + m_X: 263 + m_Y: 269 + m_Width: 44 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 29.109375 + m_Height: 38.15625 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 37.703125 + m_HorizontalAdvance: 37.09375 + m_GlyphRect: + m_X: 331 + m_Y: 464 + m_Width: 30 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 30.25 + m_Height: 55.171875 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 54.71875 + m_HorizontalAdvance: 38.34375 + m_GlyphRect: + m_X: 71 + m_Y: 160 + m_Width: 32 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 27.828125 + m_Height: 38.296875 + m_HorizontalBearingX: 3.453125 + m_HorizontalBearingY: 37.84375 + m_HorizontalAdvance: 34.6875 + m_GlyphRect: + m_X: 413 + m_Y: 461 + m_Width: 29 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 32.453125 + m_Height: 55.171875 + m_HorizontalBearingX: 3.3125 + m_HorizontalBearingY: 54.71875 + m_HorizontalAdvance: 38.375 + m_GlyphRect: + m_X: 62 + m_Y: 244 + m_Width: 33 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 27.359375 + m_Height: 38.21875 + m_HorizontalBearingX: 3.453125 + m_HorizontalBearingY: 37.765625 + m_HorizontalAdvance: 34.953125 + m_GlyphRect: + m_X: 380 + m_Y: 331 + m_Width: 28 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 21.515625 + m_Height: 63.3125 + m_HorizontalBearingX: 3.71875 + m_HorizontalBearingY: 53.734375 + m_HorizontalAdvance: 22.578125 + m_GlyphRect: + m_X: 37 + m_Y: 169 + m_Width: 23 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 35.1875 + m_Height: 52.046875 + m_HorizontalBearingX: -1.484375 + m_HorizontalBearingY: 37.765625 + m_HorizontalAdvance: 33.671875 + m_GlyphRect: + m_X: 389 + m_Y: 6 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 28.71875 + m_Height: 54.71875 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 54.71875 + m_HorizontalAdvance: 38.265625 + m_GlyphRect: + m_X: 197 + m_Y: 434 + m_Width: 30 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 8.359375 + m_Height: 53.203125 + m_HorizontalBearingX: 4.25 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 14.890625 + m_GlyphRect: + m_X: 407 + m_Y: 201 + m_Width: 9 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 19.15625 + m_Height: 67.421875 + m_HorizontalBearingX: -6.3125 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 14.859375 + m_GlyphRect: + m_X: 6 + m_Y: 173 + m_Width: 20 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 26.90625 + m_Height: 54.71875 + m_HorizontalBearingX: 3.796875 + m_HorizontalBearingY: 54.71875 + m_HorizontalAdvance: 31.546875 + m_GlyphRect: + m_X: 169 + m_Y: 72 + m_Width: 28 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49.25 + m_Height: 37.765625 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 37.765625 + m_HorizontalAdvance: 58.828125 + m_GlyphRect: + m_X: 453 + m_Y: 197 + m_Width: 51 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 29.21875 + m_Height: 37.765625 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 37.765625 + m_HorizontalAdvance: 38.34375 + m_GlyphRect: + m_X: 472 + m_Y: 104 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 30.546875 + m_Height: 38.21875 + m_HorizontalBearingX: 3.578125 + m_HorizontalBearingY: 37.765625 + m_HorizontalAdvance: 38.640625 + m_GlyphRect: + m_X: 288 + m_Y: 464 + m_Width: 32 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 32 + m_Height: 51.453125 + m_HorizontalBearingX: 2.125 + m_HorizontalBearingY: 37.765625 + m_HorizontalAdvance: 38.375 + m_GlyphRect: + m_X: 378 + m_Y: 398 + m_Width: 33 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 29.109375 + m_Height: 51.390625 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 37.703125 + m_HorizontalAdvance: 37.125 + m_GlyphRect: + m_X: 431 + m_Y: 70 + m_Width: 30 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 20.671875 + m_Height: 38.03125 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 38.03125 + m_HorizontalAdvance: 24.09375 + m_GlyphRect: + m_X: 419 + m_Y: 315 + m_Width: 22 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 24.78125 + m_Height: 38.375 + m_HorizontalBearingX: 1.40625 + m_HorizontalBearingY: 37.765625 + m_HorizontalAdvance: 29.453125 + m_GlyphRect: + m_X: 422 + m_Y: 392 + m_Width: 26 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 18.703125 + m_Height: 51.75 + m_HorizontalBearingX: 3.609375 + m_HorizontalBearingY: 51.140625 + m_HorizontalAdvance: 25.046875 + m_GlyphRect: + m_X: 400 + m_Y: 70 + m_Width: 20 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 28.84375 + m_Height: 37.6875 + m_HorizontalBearingX: 4.671875 + m_HorizontalBearingY: 37.234375 + m_HorizontalAdvance: 38.34375 + m_GlyphRect: + m_X: 372 + m_Y: 464 + m_Width: 30 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 30.40625 + m_Height: 37.234375 + m_HorizontalBearingX: 3.71875 + m_HorizontalBearingY: 37.234375 + m_HorizontalAdvance: 34.203125 + m_GlyphRect: + m_X: 472 + m_Y: 55 + m_Width: 32 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 47.640625 + m_Height: 37.46875 + m_HorizontalBearingX: 4.1875 + m_HorizontalBearingY: 37.46875 + m_HorizontalAdvance: 52.40625 + m_GlyphRect: + m_X: 458 + m_Y: 6 + m_Width: 48 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 30.859375 + m_Height: 37.234375 + m_HorizontalBearingX: -0.984375 + m_HorizontalBearingY: 37.234375 + m_HorizontalAdvance: 31.3125 + m_GlyphRect: + m_X: 408 + m_Y: 266 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 30.46875 + m_Height: 50.921875 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 37.234375 + m_HorizontalAdvance: 34.3125 + m_GlyphRect: + m_X: 415 + m_Y: 134 + m_Width: 32 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 29.9375 + m_Height: 37.234375 + m_HorizontalBearingX: -0.109375 + m_HorizontalBearingY: 37.234375 + m_HorizontalAdvance: 30.734375 + m_GlyphRect: + m_X: 453 + m_Y: 343 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 7.03125 + m_Height: 9.8125 + m_HorizontalBearingX: 14.703125 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 27.96875 + m_GlyphRect: + m_X: 124 + m_Y: 219 + m_Width: 8 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 307 + m_Metrics: + m_Width: 8.8125 + m_Height: 53.8125 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 17.03125 + m_GlyphRect: + m_X: 202 + m_Y: 138 + m_Width: 10 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 21.28125 + m_Height: 54.421875 + m_HorizontalBearingX: 6.6875 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 29.75 + m_GlyphRect: + m_X: 169 + m_Y: 138 + m_Width: 22 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 310 + m_Metrics: + m_Width: 4.71875 + m_Height: 13.375 + m_HorizontalBearingX: 2.65625 + m_HorizontalBearingY: 4.328125 + m_HorizontalAdvance: 15.3125 + m_GlyphRect: + m_X: 6 + m_Y: 490 + m_Width: 6 + m_Height: 15 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 8.96875 + m_Height: 45.375 + m_HorizontalBearingX: 3.65625 + m_HorizontalBearingY: 36.328125 + m_HorizontalAdvance: 17.859375 + m_GlyphRect: + m_X: 436 + m_Y: 6 + m_Width: 10 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 4.9375 + m_Height: 4.9375 + m_HorizontalBearingX: 3.6875 + m_HorizontalBearingY: 4.328125 + m_HorizontalAdvance: 17.140625 + m_GlyphRect: + m_X: 143 + m_Y: 219 + m_Width: 6 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 40.65625 + m_Height: 4.9375 + m_HorizontalBearingX: 3.6875 + m_HorizontalBearingY: 4.328125 + m_HorizontalAdvance: 52.859375 + m_GlyphRect: + m_X: 71 + m_Y: 227 + m_Width: 42 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 324 + m_Metrics: + m_Width: 30.5625 + m_Height: 57.6875 + m_HorizontalBearingX: 0.03125 + m_HorizontalBearingY: 54.71875 + m_HorizontalAdvance: 29.828125 + m_GlyphRect: + m_X: 52 + m_Y: 6 + m_Width: 31 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 325 + m_Metrics: + m_Width: 0.765625 + m_Height: 70.765625 + m_HorizontalBearingX: 8.390625 + m_HorizontalBearingY: 57.078125 + m_HorizontalAdvance: 17.75 + m_GlyphRect: + m_X: 6 + m_Y: 90 + m_Width: 2 + m_Height: 72 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 16.421875 + m_Height: 57.6875 + m_HorizontalBearingX: 6.953125 + m_HorizontalBearingY: 54.71875 + m_HorizontalAdvance: 29.484375 + m_GlyphRect: + m_X: 94 + m_Y: 6 + m_Width: 18 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 328 + m_Metrics: + m_Width: 15.5 + m_Height: 0.75 + m_HorizontalBearingX: 5.859375 + m_HorizontalBearingY: 22.71875 + m_HorizontalAdvance: 27.359375 + m_GlyphRect: + m_X: 52 + m_Y: 75 + m_Width: 17 + m_Height: 2 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 331 + m_Metrics: + m_Width: 27.671875 + m_Height: 0.828125 + m_HorizontalBearingX: -0.953125 + m_HorizontalBearingY: -9.125 + m_HorizontalAdvance: 33.671875 + m_GlyphRect: + m_X: 80 + m_Y: 75 + m_Width: 28 + m_Height: 1 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 334 + m_Metrics: + m_Width: 14.78125 + m_Height: 66.28125 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 57.15625 + m_HorizontalAdvance: 18.234375 + m_GlyphRect: + m_X: 35 + m_Y: 332 + m_Width: 16 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 335 + m_Metrics: + m_Width: 14.859375 + m_Height: 66.28125 + m_HorizontalBearingX: -0.984375 + m_HorizontalBearingY: 57.15625 + m_HorizontalAdvance: 18.234375 + m_GlyphRect: + m_X: 36 + m_Y: 253 + m_Width: 15 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 17.703125 + m_Height: 66.28125 + m_HorizontalBearingX: 4.1875 + m_HorizontalBearingY: 57.078125 + m_HorizontalAdvance: 20.59375 + m_GlyphRect: + m_X: 6 + m_Y: 332 + m_Width: 18 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 17.78125 + m_Height: 66.28125 + m_HorizontalBearingX: -0.90625 + m_HorizontalBearingY: 57.078125 + m_HorizontalAdvance: 20.703125 + m_GlyphRect: + m_X: 6 + m_Y: 411 + m_Width: 18 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 18.09375 + m_Height: 66.28125 + m_HorizontalBearingX: 3.6875 + m_HorizontalBearingY: 57.078125 + m_HorizontalAdvance: 20.59375 + m_GlyphRect: + m_X: 19 + m_Y: 90 + m_Width: 19 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 18.15625 + m_Height: 66.28125 + m_HorizontalBearingX: -0.796875 + m_HorizontalBearingY: 57.078125 + m_HorizontalAdvance: 20.671875 + m_GlyphRect: + m_X: 6 + m_Y: 253 + m_Width: 19 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 18.84375 + m_Height: 21.125 + m_HorizontalBearingX: 8.09375 + m_HorizontalBearingY: 56.3125 + m_HorizontalAdvance: 29.828125 + m_GlyphRect: + m_X: 62 + m_Y: 377 + m_Width: 19 + m_Height: 22 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 345 + m_Metrics: + m_Width: 25.234375 + m_Height: 22.34375 + m_HorizontalBearingX: 11.546875 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 232 + m_Y: 399 + m_Width: 26 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 346 + m_Metrics: + m_Width: 31.90625 + m_Height: 10.5 + m_HorizontalBearingX: 6.125 + m_HorizontalBearingY: 27.671875 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 67 + m_Y: 489 + m_Width: 33 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 2.734375 + m_Height: 17.25 + m_HorizontalBearingX: 8.0625 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 13.40625 + m_GlyphRect: + m_X: 115 + m_Y: 377 + m_Width: 3 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 11.734375 + m_Height: 17.25 + m_HorizontalBearingX: 8.0625 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 22.3125 + m_GlyphRect: + m_X: 92 + m_Y: 377 + m_Width: 12 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 40.734375 + m_Height: 54.421875 + m_HorizontalBearingX: 3.234375 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 48.03125 + m_GlyphRect: + m_X: 106 + m_Y: 244 + m_Width: 41 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 49.859375 + m_Height: 58.59375 + m_HorizontalBearingX: 4.328125 + m_HorizontalBearingY: 49.625 + m_HorizontalAdvance: 57.796875 + m_GlyphRect: + m_X: 49 + m_Y: 90 + m_Width: 51 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 360 + m_Metrics: + m_Width: 34.578125 + m_Height: 71.890625 + m_HorizontalBearingX: 4.140625 + m_HorizontalBearingY: 61.484375 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 35 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 368 + m_Metrics: + m_Width: 38.453125 + m_Height: 53.203125 + m_HorizontalBearingX: 3.3125 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 294 + m_Y: 6 + m_Width: 39 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 397 + m_Metrics: + m_Width: 35.59375 + m_Height: 54.34375 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 116 + m_Y: 310 + m_Width: 37 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 398 + m_Metrics: + m_Width: 24.46875 + m_Height: 53.5 + m_HorizontalBearingX: 9.125 + m_HorizontalBearingY: 53.5 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 379 + m_Y: 136 + m_Width: 25 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 34.390625 + m_Height: 53.8125 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 322 + m_Y: 201 + m_Width: 36 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 32.875 + m_Height: 54.421875 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 164 + m_Y: 302 + m_Width: 33 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 36.1875 + m_Height: 53.28125 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 53.28125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 318 + m_Y: 268 + m_Width: 37 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 33.25 + m_Height: 53.8125 + m_HorizontalBearingX: 5.203125 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 158 + m_Y: 236 + m_Width: 34 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 32.21875 + m_Height: 53.203125 + m_HorizontalBearingX: 9.84375 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 344 + m_Y: 6 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 29.375 + m_Height: 53.8125 + m_HorizontalBearingX: 8.859375 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 366 + m_Y: 266 + m_Width: 31 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 433 + m_Metrics: + m_Width: 35.109375 + m_Height: 36.5625 + m_HorizontalBearingX: 4.859375 + m_HorizontalBearingY: 43.703125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 453 + m_Y: 295 + m_Width: 36 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 437 + m_Metrics: + m_Width: 31.84375 + m_Height: 11.921875 + m_HorizontalBearingX: 6.3125 + m_HorizontalBearingY: 31.6875 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 23 + m_Y: 490 + m_Width: 33 + m_Height: 13 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 440 + m_Metrics: + m_Width: 29.53125 + m_Height: 28.734375 + m_HorizontalBearingX: 7.328125 + m_HorizontalBearingY: 39.828125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 458 + m_Y: 153 + m_Width: 30 + m_Height: 29 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 441 + m_Metrics: + m_Width: 29.5625 + m_Height: 28.734375 + m_HorizontalBearingX: 7.75 + m_HorizontalBearingY: 39.828125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 111 + m_Y: 473 + m_Width: 31 + m_Height: 29 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 7.4375 + m_Height: 54.71875 + m_HorizontalBearingX: 4.296875 + m_HorizontalBearingY: 54.71875 + m_HorizontalAdvance: 14.8125 + m_GlyphRect: + m_X: 208 + m_Y: 72 + m_Width: 8 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 30.46875 + m_Height: 53.8125 + m_HorizontalBearingX: 6.234375 + m_HorizontalBearingY: 53.203125 + m_HorizontalAdvance: 40.546875 + m_GlyphRect: + m_X: 190 + m_Y: 368 + m_Width: 31 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 32.53125 + m_Height: 54.421875 + m_HorizontalBearingX: 5.390625 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 44.078125 + m_GlyphRect: + m_X: 153 + m_Y: 442 + m_Width: 33 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 42.5625 + m_Height: 54.421875 + m_HorizontalBearingX: 5.96875 + m_HorizontalBearingY: 53.8125 + m_HorizontalAdvance: 53.546875 + m_GlyphRect: + m_X: 114 + m_Y: 153 + m_Width: 44 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 37.234375 + m_Height: 37.234375 + m_HorizontalBearingX: 4.1875 + m_HorizontalBearingY: 37.234375 + m_HorizontalAdvance: 45.59375 + m_GlyphRect: + m_X: 453 + m_Y: 246 + m_Width: 38 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 8.9375 + m_Height: 36.9375 + m_HorizontalBearingX: 3.6875 + m_HorizontalBearingY: 36.328125 + m_HorizontalAdvance: 17.171875 + m_GlyphRect: + m_X: 427 + m_Y: 197 + m_Width: 10 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -4398803698183095516} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 46 + m_Height: 84 + - m_X: 0 + m_Y: 84 + m_Width: 13 + m_Height: 83 + - m_X: 0 + m_Y: 167 + m_Width: 31 + m_Height: 80 + - m_X: 13 + m_Y: 84 + m_Width: 30 + m_Height: 79 + - m_X: 0 + m_Y: 247 + m_Width: 30 + m_Height: 79 + - m_X: 0 + m_Y: 326 + m_Width: 29 + m_Height: 79 + - m_X: 0 + m_Y: 405 + m_Width: 29 + m_Height: 79 + - m_X: 0 + m_Y: 484 + m_Width: 17 + m_Height: 26 + - m_X: 17 + m_Y: 484 + m_Width: 44 + m_Height: 24 + - m_X: 29 + m_Y: 326 + m_Width: 27 + m_Height: 79 + - m_X: 30 + m_Y: 247 + m_Width: 26 + m_Height: 79 + - m_X: 29 + m_Y: 405 + m_Width: 58 + m_Height: 78 + - m_X: 61 + m_Y: 483 + m_Width: 44 + m_Height: 22 + - m_X: 31 + m_Y: 163 + m_Width: 34 + m_Height: 75 + - m_X: 43 + m_Y: 84 + m_Width: 62 + m_Height: 70 + - m_X: 46 + m_Y: 0 + m_Width: 42 + m_Height: 69 + - m_X: 46 + m_Y: 69 + m_Width: 28 + m_Height: 13 + - m_X: 74 + m_Y: 69 + m_Width: 39 + m_Height: 12 + - m_X: 88 + m_Y: 0 + m_Width: 29 + m_Height: 69 + - m_X: 56 + m_Y: 238 + m_Width: 44 + m_Height: 67 + - m_X: 65 + m_Y: 154 + m_Width: 43 + m_Height: 67 + - m_X: 65 + m_Y: 221 + m_Width: 53 + m_Height: 17 + - m_X: 105 + m_Y: 81 + m_Width: 58 + m_Height: 66 + - m_X: 108 + m_Y: 147 + m_Width: 55 + m_Height: 66 + - m_X: 117 + m_Y: 0 + m_Width: 55 + m_Height: 66 + - m_X: 56 + m_Y: 305 + m_Width: 54 + m_Height: 66 + - m_X: 100 + m_Y: 238 + m_Width: 52 + m_Height: 66 + - m_X: 56 + m_Y: 371 + m_Width: 30 + m_Height: 33 + - m_X: 118 + m_Y: 213 + m_Width: 19 + m_Height: 21 + - m_X: 86 + m_Y: 371 + m_Width: 23 + m_Height: 30 + - m_X: 137 + m_Y: 213 + m_Width: 17 + m_Height: 17 + - m_X: 87 + m_Y: 401 + m_Width: 52 + m_Height: 66 + - m_X: 109 + m_Y: 371 + m_Width: 14 + m_Height: 30 + - m_X: 110 + m_Y: 304 + m_Width: 48 + m_Height: 66 + - m_X: 105 + m_Y: 467 + m_Width: 42 + m_Height: 40 + - m_X: 152 + m_Y: 230 + m_Width: 45 + m_Height: 66 + - m_X: 139 + m_Y: 370 + m_Width: 45 + m_Height: 66 + - m_X: 158 + m_Y: 296 + m_Width: 44 + m_Height: 66 + - m_X: 147 + m_Y: 436 + m_Width: 44 + m_Height: 66 + - m_X: 184 + m_Y: 362 + m_Width: 42 + m_Height: 66 + - m_X: 191 + m_Y: 428 + m_Width: 41 + m_Height: 66 + - m_X: 163 + m_Y: 66 + m_Width: 39 + m_Height: 66 + - m_X: 172 + m_Y: 0 + m_Width: 38 + m_Height: 66 + - m_X: 163 + m_Y: 132 + m_Width: 33 + m_Height: 66 + - m_X: 196 + m_Y: 132 + m_Width: 21 + m_Height: 66 + - m_X: 202 + m_Y: 66 + m_Width: 19 + m_Height: 66 + - m_X: 210 + m_Y: 0 + m_Width: 78 + m_Height: 65 + - m_X: 197 + m_Y: 198 + m_Width: 65 + m_Height: 65 + - m_X: 217 + m_Y: 132 + m_Width: 56 + m_Height: 65 + - m_X: 221 + m_Y: 65 + m_Width: 56 + m_Height: 65 + - m_X: 202 + m_Y: 263 + m_Width: 55 + m_Height: 65 + - m_X: 226 + m_Y: 328 + m_Width: 55 + m_Height: 65 + - m_X: 257 + m_Y: 263 + m_Width: 55 + m_Height: 65 + - m_X: 226 + m_Y: 393 + m_Width: 37 + m_Height: 35 + - m_X: 262 + m_Y: 197 + m_Width: 54 + m_Height: 65 + - m_X: 273 + m_Y: 130 + m_Width: 53 + m_Height: 65 + - m_X: 277 + m_Y: 65 + m_Width: 51 + m_Height: 65 + - m_X: 288 + m_Y: 0 + m_Width: 50 + m_Height: 65 + - m_X: 232 + m_Y: 428 + m_Width: 50 + m_Height: 65 + - m_X: 281 + m_Y: 328 + m_Width: 49 + m_Height: 65 + - m_X: 312 + m_Y: 262 + m_Width: 48 + m_Height: 65 + - m_X: 316 + m_Y: 195 + m_Width: 47 + m_Height: 65 + - m_X: 326 + m_Y: 130 + m_Width: 47 + m_Height: 65 + - m_X: 328 + m_Y: 65 + m_Width: 47 + m_Height: 65 + - m_X: 338 + m_Y: 0 + m_Width: 45 + m_Height: 65 + - m_X: 282 + m_Y: 393 + m_Width: 45 + m_Height: 65 + - m_X: 282 + m_Y: 458 + m_Width: 43 + m_Height: 50 + - m_X: 325 + m_Y: 458 + m_Width: 41 + m_Height: 50 + - m_X: 327 + m_Y: 393 + m_Width: 45 + m_Height: 65 + - m_X: 330 + m_Y: 327 + m_Width: 44 + m_Height: 65 + - m_X: 360 + m_Y: 260 + m_Width: 42 + m_Height: 65 + - m_X: 363 + m_Y: 195 + m_Width: 38 + m_Height: 65 + - m_X: 373 + m_Y: 130 + m_Width: 36 + m_Height: 65 + - m_X: 401 + m_Y: 195 + m_Width: 20 + m_Height: 65 + - m_X: 375 + m_Y: 65 + m_Width: 19 + m_Height: 65 + - m_X: 383 + m_Y: 0 + m_Width: 47 + m_Height: 64 + - m_X: 394 + m_Y: 64 + m_Width: 31 + m_Height: 64 + - m_X: 366 + m_Y: 458 + m_Width: 41 + m_Height: 50 + - m_X: 372 + m_Y: 392 + m_Width: 44 + m_Height: 63 + - m_X: 409 + m_Y: 128 + m_Width: 43 + m_Height: 63 + - m_X: 452 + m_Y: 0 + m_Width: 59 + m_Height: 49 + - m_X: 425 + m_Y: 64 + m_Width: 41 + m_Height: 63 + - m_X: 430 + m_Y: 0 + m_Width: 21 + m_Height: 58 + - m_X: 466 + m_Y: 49 + m_Width: 43 + m_Height: 49 + - m_X: 466 + m_Y: 98 + m_Width: 42 + m_Height: 49 + - m_X: 407 + m_Y: 455 + m_Width: 40 + m_Height: 50 + - m_X: 447 + m_Y: 191 + m_Width: 62 + m_Height: 49 + - m_X: 452 + m_Y: 147 + m_Width: 41 + m_Height: 40 + - m_X: 421 + m_Y: 191 + m_Width: 21 + m_Height: 49 + - m_X: 447 + m_Y: 240 + m_Width: 49 + m_Height: 49 + - m_X: 402 + m_Y: 260 + m_Width: 42 + m_Height: 49 + - m_X: 374 + m_Y: 325 + m_Width: 39 + m_Height: 50 + - m_X: 447 + m_Y: 289 + m_Width: 47 + m_Height: 48 + - m_X: 413 + m_Y: 309 + m_Width: 33 + m_Height: 50 + - m_X: 447 + m_Y: 337 + m_Width: 42 + m_Height: 49 + - m_X: 416 + m_Y: 386 + m_Width: 37 + m_Height: 50 + m_FreeGlyphRects: + - m_X: 0 + m_Y: 510 + m_Width: 511 + m_Height: 1 + - m_X: 17 + m_Y: 508 + m_Width: 494 + m_Height: 3 + - m_X: 29 + m_Y: 483 + m_Width: 32 + m_Height: 1 + - m_X: 13 + m_Y: 163 + m_Width: 18 + m_Height: 4 + - m_X: 31 + m_Y: 238 + m_Width: 25 + m_Height: 9 + - m_X: 43 + m_Y: 154 + m_Width: 22 + m_Height: 9 + - m_X: 46 + m_Y: 82 + m_Width: 59 + m_Height: 2 + - m_X: 74 + m_Y: 81 + m_Width: 31 + m_Height: 3 + - m_X: 105 + m_Y: 147 + m_Width: 3 + m_Height: 7 + - m_X: 108 + m_Y: 213 + m_Width: 10 + m_Height: 8 + - m_X: 56 + m_Y: 404 + m_Width: 31 + m_Height: 1 + - m_X: 86 + m_Y: 401 + m_Width: 1 + m_Height: 4 + - m_X: 100 + m_Y: 304 + m_Width: 10 + m_Height: 1 + - m_X: 61 + m_Y: 505 + m_Width: 44 + m_Height: 6 + - m_X: 87 + m_Y: 467 + m_Width: 18 + m_Height: 16 + - m_X: 118 + m_Y: 234 + m_Width: 34 + m_Height: 4 + - m_X: 137 + m_Y: 230 + m_Width: 15 + m_Height: 8 + - m_X: 110 + m_Y: 370 + m_Width: 29 + m_Height: 1 + - m_X: 123 + m_Y: 370 + m_Width: 16 + m_Height: 31 + - m_X: 152 + m_Y: 296 + m_Width: 6 + m_Height: 8 + - m_X: 139 + m_Y: 436 + m_Width: 8 + m_Height: 31 + - m_X: 158 + m_Y: 362 + m_Width: 26 + m_Height: 8 + - m_X: 184 + m_Y: 428 + m_Width: 7 + m_Height: 8 + - m_X: 113 + m_Y: 69 + m_Width: 50 + m_Height: 12 + - m_X: 117 + m_Y: 66 + m_Width: 46 + m_Height: 15 + - m_X: 154 + m_Y: 213 + m_Width: 43 + m_Height: 17 + - m_X: 163 + m_Y: 198 + m_Width: 34 + m_Height: 32 + - m_X: 210 + m_Y: 65 + m_Width: 11 + m_Height: 1 + - m_X: 197 + m_Y: 263 + m_Width: 5 + m_Height: 33 + - m_X: 202 + m_Y: 328 + m_Width: 24 + m_Height: 34 + - m_X: 217 + m_Y: 197 + m_Width: 45 + m_Height: 1 + - m_X: 221 + m_Y: 130 + m_Width: 52 + m_Height: 2 + - m_X: 262 + m_Y: 262 + m_Width: 50 + m_Height: 1 + - m_X: 273 + m_Y: 195 + m_Width: 43 + m_Height: 2 + - m_X: 263 + m_Y: 393 + m_Width: 19 + m_Height: 35 + - m_X: 61 + m_Y: 507 + m_Width: 221 + m_Height: 4 + - m_X: 147 + m_Y: 502 + m_Width: 135 + m_Height: 9 + - m_X: 191 + m_Y: 494 + m_Width: 91 + m_Height: 17 + - m_X: 232 + m_Y: 493 + m_Width: 50 + m_Height: 18 + - m_X: 312 + m_Y: 327 + m_Width: 18 + m_Height: 1 + - m_X: 316 + m_Y: 260 + m_Width: 44 + m_Height: 2 + - m_X: 383 + m_Y: 64 + m_Width: 11 + m_Height: 1 + - m_X: 330 + m_Y: 392 + m_Width: 42 + m_Height: 1 + - m_X: 394 + m_Y: 128 + m_Width: 15 + m_Height: 2 + - m_X: 451 + m_Y: 0 + m_Width: 1 + m_Height: 64 + - m_X: 509 + m_Y: 49 + m_Width: 2 + m_Height: 462 + - m_X: 430 + m_Y: 58 + m_Width: 36 + m_Height: 6 + - m_X: 451 + m_Y: 49 + m_Width: 15 + m_Height: 15 + - m_X: 425 + m_Y: 127 + m_Width: 41 + m_Height: 1 + - m_X: 372 + m_Y: 455 + m_Width: 35 + m_Height: 3 + - m_X: 407 + m_Y: 505 + m_Width: 104 + m_Height: 6 + - m_X: 508 + m_Y: 98 + m_Width: 3 + m_Height: 93 + - m_X: 452 + m_Y: 187 + m_Width: 59 + m_Height: 4 + - m_X: 493 + m_Y: 147 + m_Width: 18 + m_Height: 44 + - m_X: 452 + m_Y: 127 + m_Width: 14 + m_Height: 20 + - m_X: 409 + m_Y: 191 + m_Width: 12 + m_Height: 4 + - m_X: 496 + m_Y: 240 + m_Width: 15 + m_Height: 271 + - m_X: 442 + m_Y: 191 + m_Width: 5 + m_Height: 69 + - m_X: 421 + m_Y: 240 + m_Width: 26 + m_Height: 20 + - m_X: 360 + m_Y: 325 + m_Width: 14 + m_Height: 2 + - m_X: 494 + m_Y: 289 + m_Width: 17 + m_Height: 222 + - m_X: 444 + m_Y: 191 + m_Width: 3 + m_Height: 118 + - m_X: 402 + m_Y: 309 + m_Width: 11 + m_Height: 16 + - m_X: 489 + m_Y: 337 + m_Width: 22 + m_Height: 174 + - m_X: 446 + m_Y: 191 + m_Width: 1 + m_Height: 195 + - m_X: 374 + m_Y: 375 + m_Width: 73 + m_Height: 11 + - m_X: 374 + m_Y: 375 + m_Width: 42 + m_Height: 17 + - m_X: 447 + m_Y: 436 + m_Width: 64 + m_Height: 75 + - m_X: 453 + m_Y: 386 + m_Width: 58 + m_Height: 125 + - m_X: 416 + m_Y: 436 + m_Width: 95 + m_Height: 19 + - m_X: 413 + m_Y: 359 + m_Width: 34 + m_Height: 27 + - m_X: 413 + m_Y: 359 + m_Width: 3 + m_Height: 33 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 747a175745b7f704e8f9c65f1aca44b3 + pointSizeSamplingMode: 0 + pointSize: 76 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HairlineItalic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HairlineItalic SDF.asset.meta new file mode 100644 index 0000000..1e2e67f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HairlineItalic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5c362fec725a413469a94a06a01b6c75 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Heavy SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Heavy SDF.asset new file mode 100644 index 0000000..7c3be98 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Heavy SDF.asset @@ -0,0 +1,2821 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &-8700429325407997208 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Heavy SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 9189266081204752172} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.8333333 + - _ScaleRatioB: 0.6770833 + - _ScaleRatioC: 0.6770833 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Heavy SDF + m_EditorClassIdentifier: + hashCode: -1772390039 + material: {fileID: -8700429325407997208} + materialHashCode: -363141847 + m_Version: 1.1.0 + m_SourceFontFileGUID: 010b82bc895978049b69aaf4b855d7ab + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FaceIndex: 0 + m_FamilyName: Lato + m_StyleName: Heavy + m_PointSize: 67 + m_Scale: 1 + m_UnitsPerEM: 0 + m_LineHeight: 80.4 + m_AscentLine: 66.129 + m_CapLine: 49 + m_MeanLine: 34 + m_Baseline: 0 + m_DescentLine: -14.271 + m_SuperscriptOffset: 66.129 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.271 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.085001 + m_UnderlineThickness: 3.3165 + m_StrikethroughOffset: 13.6 + m_StrikethroughThickness: 3.3165 + m_TabWidth: 16 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 15.90625 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 3 + m_Metrics: + m_Width: 48.25 + m_Height: 48.609375 + m_HorizontalBearingX: -0.609375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 47.03125 + m_GlyphRect: + m_X: 344 + m_Y: 6 + m_Width: 49 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 6 + m_Metrics: + m_Width: 36.75 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 44.453125 + m_GlyphRect: + m_X: 450 + m_Y: 250 + m_Width: 37 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 7 + m_Metrics: + m_Width: 41.265625 + m_Height: 49.671875 + m_HorizontalBearingX: 2.3125 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 44.15625 + m_GlyphRect: + m_X: 451 + m_Y: 68 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.578125 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 50.984375 + m_GlyphRect: + m_X: 342 + m_Y: 66 + m_Width: 44 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 11 + m_Metrics: + m_Width: 30.953125 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 38.453125 + m_GlyphRect: + m_X: 283 + m_Y: 457 + m_Width: 32 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 13 + m_Metrics: + m_Width: 30.953125 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 37.921875 + m_GlyphRect: + m_X: 326 + m_Y: 457 + m_Width: 32 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 14 + m_Metrics: + m_Width: 43.3125 + m_Height: 49.671875 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 48.546875 + m_GlyphRect: + m_X: 461 + m_Y: 6 + m_Width: 44 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 15 + m_Metrics: + m_Width: 41.640625 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 51.828125 + m_GlyphRect: + m_X: 211 + m_Y: 162 + m_Width: 42 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 17 + m_Metrics: + m_Width: 10.109375 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 20.296875 + m_GlyphRect: + m_X: 292 + m_Y: 234 + m_Width: 11 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 19 + m_Metrics: + m_Width: 23.625 + m_Height: 49.140625 + m_HorizontalBearingX: 0.703125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 28.9375 + m_GlyphRect: + m_X: 252 + m_Y: 396 + m_Width: 25 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 20 + m_Metrics: + m_Width: 42.28125 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 46.5625 + m_GlyphRect: + m_X: 397 + m_Y: 66 + m_Width: 43 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 21 + m_Metrics: + m_Width: 28.84375 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 34.96875 + m_GlyphRect: + m_X: 369 + m_Y: 457 + m_Width: 29 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 24 + m_Metrics: + m_Width: 53.59375 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 63.75 + m_GlyphRect: + m_X: 88 + m_Y: 6 + m_Width: 54 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 25 + m_Metrics: + m_Width: 41.640625 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 51.828125 + m_GlyphRect: + m_X: 328 + m_Y: 126 + m_Width: 42 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 27 + m_Metrics: + m_Width: 49.8125 + m_Height: 49.671875 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 54.34375 + m_GlyphRect: + m_X: 68 + m_Y: 66 + m_Width: 51 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 30 + m_Metrics: + m_Width: 35.609375 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 42.015625 + m_GlyphRect: + m_X: 6 + m_Y: 174 + m_Width: 36 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 32 + m_Metrics: + m_Width: 52.421875 + m_Height: 58.453125 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 54.375 + m_GlyphRect: + m_X: 218 + m_Y: 6 + m_Width: 53 + m_Height: 60 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 33 + m_Metrics: + m_Width: 38.75 + m_Height: 48.609375 + m_HorizontalBearingX: 5.09375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 43.515625 + m_GlyphRect: + m_X: 381 + m_Y: 126 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 34 + m_Metrics: + m_Width: 33.4375 + m_Height: 49.671875 + m_HorizontalBearingX: 1.265625 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 36.921875 + m_GlyphRect: + m_X: 246 + m_Y: 272 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 36 + m_Metrics: + m_Width: 38.5 + m_Height: 48.609375 + m_HorizontalBearingX: 1 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 40.46875 + m_GlyphRect: + m_X: 451 + m_Y: 130 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 38 + m_Metrics: + m_Width: 40.96875 + m_Height: 49.140625 + m_HorizontalBearingX: 4.484375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 49.953125 + m_GlyphRect: + m_X: 275 + m_Y: 113 + m_Width: 42 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 40 + m_Metrics: + m_Width: 48.25 + m_Height: 48.609375 + m_HorizontalBearingX: -0.609375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 47.03125 + m_GlyphRect: + m_X: 282 + m_Y: 53 + m_Width: 49 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 41 + m_Metrics: + m_Width: 70.109375 + m_Height: 48.609375 + m_HorizontalBearingX: 0.375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 70.859375 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 71 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 42 + m_Metrics: + m_Width: 45.734375 + m_Height: 48.609375 + m_HorizontalBearingX: -0.140625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 45.53125 + m_GlyphRect: + m_X: 153 + m_Y: 119 + m_Width: 47 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 43 + m_Metrics: + m_Width: 45.359375 + m_Height: 48.609375 + m_HorizontalBearingX: -0.640625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 44.09375 + m_GlyphRect: + m_X: 404 + m_Y: 6 + m_Width: 46 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 44 + m_Metrics: + m_Width: 37.859375 + m_Height: 48.609375 + m_HorizontalBearingX: 1.171875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 40.671875 + m_GlyphRect: + m_X: 450 + m_Y: 190 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 45 + m_Metrics: + m_Width: 29.484375 + m_Height: 35.734375 + m_HorizontalBearingX: 1.40625 + m_HorizontalBearingY: 35.203125 + m_HorizontalAdvance: 34.296875 + m_GlyphRect: + m_X: 87 + m_Y: 396 + m_Width: 30 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 48 + m_Metrics: + m_Width: 32.328125 + m_Height: 50.453125 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 38.25 + m_GlyphRect: + m_X: 198 + m_Y: 283 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 49 + m_Metrics: + m_Width: 29.578125 + m_Height: 35.578125 + m_HorizontalBearingX: 2.015625 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 32.421875 + m_GlyphRect: + m_X: 87 + m_Y: 444 + m_Width: 30 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 55 + m_Metrics: + m_Width: 32.328125 + m_Height: 50.453125 + m_HorizontalBearingX: 2.078125 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 38.25 + m_GlyphRect: + m_X: 243 + m_Y: 334 + m_Width: 33 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 59 + m_Metrics: + m_Width: 32.03125 + m_Height: 35.578125 + m_HorizontalBearingX: 1.96875 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 35.90625 + m_GlyphRect: + m_X: 128 + m_Y: 359 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 61 + m_Metrics: + m_Width: 22.84375 + m_Height: 49.484375 + m_HorizontalBearingX: 1.3125 + m_HorizontalBearingY: 49.484375 + m_HorizontalAdvance: 24.25 + m_GlyphRect: + m_X: 288 + m_Y: 388 + m_Width: 24 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 93 + m_Metrics: + m_Width: 33.140625 + m_Height: 47.171875 + m_HorizontalBearingX: 1.46875 + m_HorizontalBearingY: 35.140625 + m_HorizontalAdvance: 35.609375 + m_GlyphRect: + m_X: 404 + m_Y: 275 + m_Width: 34 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 95 + m_Metrics: + m_Width: 30.65625 + m_Height: 49.953125 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 37.984375 + m_GlyphRect: + m_X: 6 + m_Y: 390 + m_Width: 32 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 98 + m_Metrics: + m_Width: 11.453125 + m_Height: 49.984375 + m_HorizontalBearingX: 2.984375 + m_HorizontalBearingY: 49.984375 + m_HorizontalAdvance: 17.421875 + m_GlyphRect: + m_X: 172 + m_Y: 359 + m_Width: 13 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 102 + m_Metrics: + m_Width: 17.046875 + m_Height: 62.015625 + m_HorizontalBearingX: -2.609375 + m_HorizontalBearingY: 49.984375 + m_HorizontalAdvance: 17.421875 + m_GlyphRect: + m_X: 101 + m_Y: 128 + m_Width: 18 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 104 + m_Metrics: + m_Width: 32.875 + m_Height: 49.953125 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 36.546875 + m_GlyphRect: + m_X: 359 + m_Y: 248 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49.21875 + m_Height: 35.078125 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 56.515625 + m_GlyphRect: + m_X: 282 + m_Y: 6 + m_Width: 51 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 109 + m_Metrics: + m_Width: 30.65625 + m_Height: 35.078125 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 37.984375 + m_GlyphRect: + m_X: 166 + m_Y: 467 + m_Width: 32 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 111 + m_Metrics: + m_Width: 34.671875 + m_Height: 35.578125 + m_HorizontalBearingX: 2.015625 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 38.6875 + m_GlyphRect: + m_X: 6 + m_Y: 342 + m_Width: 35 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 114 + m_Metrics: + m_Width: 32.328125 + m_Height: 46.359375 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 35.203125 + m_HorizontalAdvance: 38.25 + m_GlyphRect: + m_X: 449 + m_Y: 310 + m_Width: 34 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 116 + m_Metrics: + m_Width: 32.328125 + m_Height: 46.359375 + m_HorizontalBearingX: 2.078125 + m_HorizontalBearingY: 35.203125 + m_HorizontalAdvance: 38.21875 + m_GlyphRect: + m_X: 196 + m_Y: 345 + m_Width: 33 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 117 + m_Metrics: + m_Width: 21.3125 + m_Height: 35.203125 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 35.203125 + m_HorizontalAdvance: 25.265625 + m_GlyphRect: + m_X: 209 + m_Y: 467 + m_Width: 23 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 118 + m_Metrics: + m_Width: 26.296875 + m_Height: 35.609375 + m_HorizontalBearingX: 1.375 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 29.640625 + m_GlyphRect: + m_X: 128 + m_Y: 467 + m_Width: 27 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 124 + m_Metrics: + m_Width: 24.0625 + m_Height: 45.390625 + m_HorizontalBearingX: 1 + m_HorizontalBearingY: 44.859375 + m_HorizontalAdvance: 25.296875 + m_GlyphRect: + m_X: 409 + m_Y: 335 + m_Width: 25 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 134 + m_Metrics: + m_Width: 30.65625 + m_Height: 35.0625 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 37.953125 + m_GlyphRect: + m_X: 171 + m_Y: 420 + m_Width: 32 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 136 + m_Metrics: + m_Width: 35.515625 + m_Height: 34.53125 + m_HorizontalBearingX: 0.09375 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 35.71875 + m_GlyphRect: + m_X: 53 + m_Y: 203 + m_Width: 36 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 137 + m_Metrics: + m_Width: 53.421875 + m_Height: 34.578125 + m_HorizontalBearingX: 0.40625 + m_HorizontalBearingY: 34.578125 + m_HorizontalAdvance: 54.234375 + m_GlyphRect: + m_X: 153 + m_Y: 6 + m_Width: 54 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 138 + m_Metrics: + m_Width: 35.703125 + m_Height: 34.53125 + m_HorizontalBearingX: -0.03125 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 35.640625 + m_GlyphRect: + m_X: 6 + m_Y: 128 + m_Width: 37 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 139 + m_Metrics: + m_Width: 35.84375 + m_Height: 45.6875 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 35.640625 + m_GlyphRect: + m_X: 153 + m_Y: 179 + m_Width: 36 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 140 + m_Metrics: + m_Width: 27.40625 + m_Height: 34.53125 + m_HorizontalBearingX: 1.640625 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 30.984375 + m_GlyphRect: + m_X: 243 + m_Y: 466 + m_Width: 29 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 170 + m_Metrics: + m_Width: 16.71875 + m_Height: 10.046875 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 26.796875 + m_GlyphRect: + m_X: 98 + m_Y: 370 + m_Width: 18 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 308 + m_Metrics: + m_Width: 10.921875 + m_Height: 49.078125 + m_HorizontalBearingX: 4.046875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 19.15625 + m_GlyphRect: + m_X: 130 + m_Y: 222 + m_Width: 11 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 309 + m_Metrics: + m_Width: 26.484375 + m_Height: 49.609375 + m_HorizontalBearingX: 2.21875 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 31.15625 + m_GlyphRect: + m_X: 214 + m_Y: 404 + m_Width: 27 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 311 + m_Metrics: + m_Width: 10.625 + m_Height: 19.90625 + m_HorizontalBearingX: 2.609375 + m_HorizontalBearingY: 10.21875 + m_HorizontalAdvance: 15.84375 + m_GlyphRect: + m_X: 130 + m_Y: 167 + m_Width: 12 + m_Height: 21 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 312 + m_Metrics: + m_Width: 10.921875 + m_Height: 42.90625 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 33.21875 + m_HorizontalAdvance: 18.390625 + m_GlyphRect: + m_X: 130 + m_Y: 66 + m_Width: 12 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 313 + m_Metrics: + m_Width: 10.921875 + m_Height: 33.6875 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 33.21875 + m_HorizontalAdvance: 17.484375 + m_GlyphRect: + m_X: 130 + m_Y: 121 + m_Width: 12 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 314 + m_Metrics: + m_Width: 10.921875 + m_Height: 10.6875 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 10.21875 + m_HorizontalAdvance: 15.953125 + m_GlyphRect: + m_X: 130 + m_Y: 199 + m_Width: 12 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 315 + m_Metrics: + m_Width: 46.921875 + m_Height: 10.6875 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 10.21875 + m_HorizontalAdvance: 52.296875 + m_GlyphRect: + m_X: 217 + m_Y: 77 + m_Width: 48 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 326 + m_Metrics: + m_Width: 27.9375 + m_Height: 53.203125 + m_HorizontalBearingX: 1.84375 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 31.625 + m_GlyphRect: + m_X: 6 + m_Y: 451 + m_Width: 29 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 327 + m_Metrics: + m_Width: 7.171875 + m_Height: 63.4375 + m_HorizontalBearingX: 5.296875 + m_HorizontalBearingY: 51.984375 + m_HorizontalAdvance: 17.75 + m_GlyphRect: + m_X: 431 + m_Y: 156 + m_Width: 8 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 329 + m_Metrics: + m_Width: 27.9375 + m_Height: 53.203125 + m_HorizontalBearingX: 1.84375 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 31.625 + m_GlyphRect: + m_X: 46 + m_Y: 451 + m_Width: 29 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 330 + m_Metrics: + m_Width: 17.6875 + m_Height: 7.578125 + m_HorizontalBearingX: 3.65625 + m_HorizontalBearingY: 24.09375 + m_HorizontalAdvance: 25.03125 + m_GlyphRect: + m_X: 99 + m_Y: 276 + m_Width: 19 + m_Height: 9 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 333 + m_Metrics: + m_Width: 26.390625 + m_Height: 5.890625 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: -4.09375 + m_HorizontalAdvance: 31.453125 + m_GlyphRect: + m_X: 86 + m_Y: 492 + m_Width: 27 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 336 + m_Metrics: + m_Width: 14.625 + m_Height: 63.6875 + m_HorizontalBearingX: 2.21875 + m_HorizontalBearingY: 52.828125 + m_HorizontalAdvance: 18.59375 + m_GlyphRect: + m_X: 445 + m_Y: 369 + m_Width: 15 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 337 + m_Metrics: + m_Width: 14.609375 + m_Height: 63.6875 + m_HorizontalBearingX: 1.734375 + m_HorizontalBearingY: 52.828125 + m_HorizontalAdvance: 18.59375 + m_GlyphRect: + m_X: 375 + m_Y: 309 + m_Width: 16 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 338 + m_Metrics: + m_Width: 14.328125 + m_Height: 62.53125 + m_HorizontalBearingX: 5.296875 + m_HorizontalBearingY: 51.984375 + m_HorizontalAdvance: 21.203125 + m_GlyphRect: + m_X: 323 + m_Y: 383 + m_Width: 15 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 339 + m_Metrics: + m_Width: 14.296875 + m_Height: 62.53125 + m_HorizontalBearingX: 1.609375 + m_HorizontalBearingY: 51.984375 + m_HorizontalAdvance: 21.203125 + m_GlyphRect: + m_X: 349 + m_Y: 383 + m_Width: 15 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 340 + m_Metrics: + m_Width: 17.125 + m_Height: 62.53125 + m_HorizontalBearingX: 1.734375 + m_HorizontalBearingY: 51.984375 + m_HorizontalAdvance: 20.640625 + m_GlyphRect: + m_X: 101 + m_Y: 202 + m_Width: 18 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 341 + m_Metrics: + m_Width: 17.109375 + m_Height: 62.53125 + m_HorizontalBearingX: 1.78125 + m_HorizontalBearingY: 51.984375 + m_HorizontalAdvance: 20.640625 + m_GlyphRect: + m_X: 99 + m_Y: 296 + m_Width: 18 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 342 + m_Metrics: + m_Width: 22.25 + m_Height: 23.21875 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 50.921875 + m_HorizontalAdvance: 28.46875 + m_GlyphRect: + m_X: 287 + m_Y: 353 + m_Width: 23 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 347 + m_Metrics: + m_Width: 33.171875 + m_Height: 25.96875 + m_HorizontalBearingX: 2.84375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 246 + m_Y: 234 + m_Width: 35 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 348 + m_Metrics: + m_Width: 32.84375 + m_Height: 13.375 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 26.5 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 52 + m_Y: 371 + m_Width: 33 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 349 + m_Metrics: + m_Width: 8.03125 + m_Height: 18.21875 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 14.375 + m_GlyphRect: + m_X: 431 + m_Y: 126 + m_Width: 9 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 350 + m_Metrics: + m_Width: 21.03125 + m_Height: 18.21875 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 27.171875 + m_GlyphRect: + m_X: 375 + m_Y: 384 + m_Width: 22 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 351 + m_Metrics: + m_Width: 46.53125 + m_Height: 49.671875 + m_HorizontalBearingX: 2.25 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 48.78125 + m_GlyphRect: + m_X: 217 + m_Y: 100 + m_Width: 47 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 352 + m_Metrics: + m_Width: 51.390625 + m_Height: 54.640625 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 46.5625 + m_HorizontalAdvance: 56.6875 + m_GlyphRect: + m_X: 153 + m_Y: 52 + m_Width: 53 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 362 + m_Metrics: + m_Width: 34.796875 + m_Height: 62.578125 + m_HorizontalBearingX: 1.8125 + m_HorizontalBearingY: 55.28125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 54 + m_Y: 128 + m_Width: 36 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 370 + m_Metrics: + m_Width: 37.484375 + m_Height: 48.609375 + m_HorizontalBearingX: 0.734375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 264 + m_Y: 174 + m_Width: 39 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 399 + m_Metrics: + m_Width: 35.859375 + m_Height: 49.671875 + m_HorizontalBearingX: 1.5 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 363 + m_Y: 186 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 400 + m_Metrics: + m_Width: 30.953125 + m_Height: 48.640625 + m_HorizontalBearingX: 3.953125 + m_HorizontalBearingY: 48.640625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 128 + m_Y: 407 + m_Width: 32 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 401 + m_Metrics: + m_Width: 33.703125 + m_Height: 49.140625 + m_HorizontalBearingX: 2.3125 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 200 + m_Y: 222 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.015625 + m_Height: 49.671875 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 53 + m_Y: 249 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 403 + m_Metrics: + m_Width: 37.1875 + m_Height: 48.640625 + m_HorizontalBearingX: 0.0625 + m_HorizontalBearingY: 48.640625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 314 + m_Y: 186 + m_Width: 38 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 404 + m_Metrics: + m_Width: 32.890625 + m_Height: 49.140625 + m_HorizontalBearingX: 2.546875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 151 + m_Y: 298 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 405 + m_Metrics: + m_Width: 33.875 + m_Height: 48.609375 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 52 + m_Y: 311 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 406 + m_Metrics: + m_Width: 33.234375 + m_Height: 49.140625 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 314 + m_Y: 246 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 435 + m_Metrics: + m_Width: 32.890625 + m_Height: 33.828125 + m_HorizontalBearingX: 2.984375 + m_HorizontalBearingY: 39.390625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 291 + m_Y: 307 + m_Width: 34 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 439 + m_Metrics: + m_Width: 30.015625 + m_Height: 18.765625 + m_HorizontalBearingX: 4.421875 + m_HorizontalBearingY: 31.890625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 321 + m_Y: 353 + m_Width: 31 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 442 + m_Metrics: + m_Width: 26.84375 + m_Height: 31.6875 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 38.421875 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 411 + m_Y: 231 + m_Width: 28 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 443 + m_Metrics: + m_Width: 26.828125 + m_Height: 31.6875 + m_HorizontalBearingX: 7.109375 + m_HorizontalBearingY: 38.421875 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 49 + m_Y: 407 + m_Width: 27 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 9.234375 + m_Height: 49.953125 + m_HorizontalBearingX: 3.890625 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 17.015625 + m_GlyphRect: + m_X: 129 + m_Y: 283 + m_Width: 11 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 34.46875 + m_Height: 49.140625 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 152 + m_Y: 237 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.171875 + m_Height: 49.671875 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 6 + m_Y: 280 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 50.515625 + m_Height: 49.71875 + m_HorizontalBearingX: 2.453125 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 55.40625 + m_GlyphRect: + m_X: 6 + m_Y: 66 + m_Width: 51 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 34.578125 + m_Height: 34.5 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 34.5 + m_HorizontalAdvance: 40.203125 + m_GlyphRect: + m_X: 6 + m_Y: 234 + m_Width: 36 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 9189266081204752172} + m_AtlasTextureIndex: 0 + m_IsMultiAtlasTexturesEnabled: 0 + m_ClearDynamicDataOnBuild: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 82 + m_Height: 60 + - m_X: 82 + m_Y: 0 + m_Width: 65 + m_Height: 60 + - m_X: 147 + m_Y: 0 + m_Width: 65 + m_Height: 46 + - m_X: 212 + m_Y: 0 + m_Width: 64 + m_Height: 71 + - m_X: 147 + m_Y: 46 + m_Width: 64 + m_Height: 67 + - m_X: 0 + m_Y: 60 + m_Width: 62 + m_Height: 62 + - m_X: 62 + m_Y: 60 + m_Width: 62 + m_Height: 62 + - m_X: 124 + m_Y: 60 + m_Width: 23 + m_Height: 55 + - m_X: 276 + m_Y: 0 + m_Width: 62 + m_Height: 47 + - m_X: 338 + m_Y: 0 + m_Width: 60 + m_Height: 60 + - m_X: 276 + m_Y: 47 + m_Width: 60 + m_Height: 60 + - m_X: 211 + m_Y: 71 + m_Width: 59 + m_Height: 23 + - m_X: 211 + m_Y: 94 + m_Width: 58 + m_Height: 62 + - m_X: 147 + m_Y: 113 + m_Width: 58 + m_Height: 60 + - m_X: 124 + m_Y: 115 + m_Width: 23 + m_Height: 46 + - m_X: 398 + m_Y: 0 + m_Width: 57 + m_Height: 60 + - m_X: 455 + m_Y: 0 + m_Width: 55 + m_Height: 62 + - m_X: 336 + m_Y: 60 + m_Width: 55 + m_Height: 60 + - m_X: 391 + m_Y: 60 + m_Width: 54 + m_Height: 60 + - m_X: 445 + m_Y: 62 + m_Width: 53 + m_Height: 62 + - m_X: 269 + m_Y: 107 + m_Width: 53 + m_Height: 61 + - m_X: 205 + m_Y: 156 + m_Width: 53 + m_Height: 60 + - m_X: 322 + m_Y: 120 + m_Width: 53 + m_Height: 60 + - m_X: 258 + m_Y: 168 + m_Width: 50 + m_Height: 60 + - m_X: 375 + m_Y: 120 + m_Width: 50 + m_Height: 60 + - m_X: 425 + m_Y: 120 + m_Width: 20 + m_Height: 30 + - m_X: 445 + m_Y: 124 + m_Width: 50 + m_Height: 60 + - m_X: 425 + m_Y: 150 + m_Width: 19 + m_Height: 75 + - m_X: 444 + m_Y: 184 + m_Width: 50 + m_Height: 60 + - m_X: 308 + m_Y: 180 + m_Width: 49 + m_Height: 60 + - m_X: 357 + m_Y: 180 + m_Width: 48 + m_Height: 62 + - m_X: 405 + m_Y: 225 + m_Width: 39 + m_Height: 44 + - m_X: 444 + m_Y: 244 + m_Width: 48 + m_Height: 60 + - m_X: 0 + m_Y: 122 + m_Width: 48 + m_Height: 46 + - m_X: 48 + m_Y: 122 + m_Width: 47 + m_Height: 75 + - m_X: 95 + m_Y: 122 + m_Width: 29 + m_Height: 74 + - m_X: 124 + m_Y: 161 + m_Width: 23 + m_Height: 32 + - m_X: 0 + m_Y: 168 + m_Width: 47 + m_Height: 60 + - m_X: 147 + m_Y: 173 + m_Width: 47 + m_Height: 58 + - m_X: 124 + m_Y: 193 + m_Width: 23 + m_Height: 23 + - m_X: 95 + m_Y: 196 + m_Width: 29 + m_Height: 74 + - m_X: 124 + m_Y: 216 + m_Width: 22 + m_Height: 61 + - m_X: 47 + m_Y: 197 + m_Width: 47 + m_Height: 46 + - m_X: 0 + m_Y: 228 + m_Width: 47 + m_Height: 46 + - m_X: 47 + m_Y: 243 + m_Width: 46 + m_Height: 62 + - m_X: 0 + m_Y: 274 + m_Width: 46 + m_Height: 62 + - m_X: 93 + m_Y: 270 + m_Width: 30 + m_Height: 20 + - m_X: 194 + m_Y: 216 + m_Width: 46 + m_Height: 61 + - m_X: 146 + m_Y: 231 + m_Width: 46 + m_Height: 61 + - m_X: 123 + m_Y: 277 + m_Width: 22 + m_Height: 61 + - m_X: 93 + m_Y: 290 + m_Width: 29 + m_Height: 74 + - m_X: 46 + m_Y: 305 + m_Width: 46 + m_Height: 60 + - m_X: 0 + m_Y: 336 + m_Width: 46 + m_Height: 48 + - m_X: 240 + m_Y: 228 + m_Width: 46 + m_Height: 38 + - m_X: 286 + m_Y: 228 + m_Width: 22 + m_Height: 60 + - m_X: 240 + m_Y: 266 + m_Width: 45 + m_Height: 62 + - m_X: 192 + m_Y: 277 + m_Width: 45 + m_Height: 62 + - m_X: 145 + m_Y: 292 + m_Width: 45 + m_Height: 61 + - m_X: 308 + m_Y: 240 + m_Width: 45 + m_Height: 61 + - m_X: 353 + m_Y: 242 + m_Width: 45 + m_Height: 61 + - m_X: 398 + m_Y: 269 + m_Width: 45 + m_Height: 60 + - m_X: 443 + m_Y: 304 + m_Width: 45 + m_Height: 59 + - m_X: 285 + m_Y: 301 + m_Width: 45 + m_Height: 46 + - m_X: 237 + m_Y: 328 + m_Width: 44 + m_Height: 62 + - m_X: 190 + m_Y: 339 + m_Width: 44 + m_Height: 59 + - m_X: 122 + m_Y: 353 + m_Width: 44 + m_Height: 48 + - m_X: 166 + m_Y: 353 + m_Width: 24 + m_Height: 61 + - m_X: 92 + m_Y: 364 + m_Width: 29 + m_Height: 22 + - m_X: 46 + m_Y: 365 + m_Width: 44 + m_Height: 25 + - m_X: 0 + m_Y: 384 + m_Width: 43 + m_Height: 61 + - m_X: 0 + m_Y: 445 + m_Width: 40 + m_Height: 65 + - m_X: 40 + m_Y: 445 + m_Width: 40 + m_Height: 65 + - m_X: 43 + m_Y: 401 + m_Width: 38 + m_Height: 44 + - m_X: 81 + m_Y: 390 + m_Width: 41 + m_Height: 48 + - m_X: 122 + m_Y: 401 + m_Width: 43 + m_Height: 60 + - m_X: 81 + m_Y: 438 + m_Width: 41 + m_Height: 48 + - m_X: 122 + m_Y: 461 + m_Width: 38 + m_Height: 48 + - m_X: 160 + m_Y: 461 + m_Width: 43 + m_Height: 47 + - m_X: 165 + m_Y: 414 + m_Width: 43 + m_Height: 47 + - m_X: 203 + m_Y: 461 + m_Width: 34 + m_Height: 47 + - m_X: 208 + m_Y: 398 + m_Width: 38 + m_Height: 62 + - m_X: 80 + m_Y: 486 + m_Width: 38 + m_Height: 17 + - m_X: 237 + m_Y: 460 + m_Width: 40 + m_Height: 46 + - m_X: 246 + m_Y: 390 + m_Width: 36 + m_Height: 61 + - m_X: 277 + m_Y: 451 + m_Width: 43 + m_Height: 60 + - m_X: 281 + m_Y: 347 + m_Width: 34 + m_Height: 35 + - m_X: 282 + m_Y: 382 + m_Width: 35 + m_Height: 61 + - m_X: 315 + m_Y: 347 + m_Width: 42 + m_Height: 30 + - m_X: 317 + m_Y: 377 + m_Width: 26 + m_Height: 74 + - m_X: 320 + m_Y: 451 + m_Width: 43 + m_Height: 60 + - m_X: 343 + m_Y: 377 + m_Width: 26 + m_Height: 74 + - m_X: 363 + m_Y: 451 + m_Width: 40 + m_Height: 60 + - m_X: 369 + m_Y: 303 + m_Width: 27 + m_Height: 75 + - m_X: 403 + m_Y: 329 + m_Width: 36 + m_Height: 57 + - m_X: 369 + m_Y: 378 + m_Width: 33 + m_Height: 30 + - m_X: 439 + m_Y: 363 + m_Width: 26 + m_Height: 75 + m_FreeGlyphRects: + - m_X: 211 + m_Y: 46 + m_Width: 1 + m_Height: 25 + - m_X: 510 + m_Y: 0 + m_Width: 1 + m_Height: 511 + - m_X: 336 + m_Y: 47 + m_Width: 2 + m_Height: 13 + - m_X: 498 + m_Y: 62 + m_Width: 13 + m_Height: 449 + - m_X: 445 + m_Y: 60 + m_Width: 10 + m_Height: 2 + - m_X: 270 + m_Y: 71 + m_Width: 6 + m_Height: 36 + - m_X: 269 + m_Y: 94 + m_Width: 7 + m_Height: 13 + - m_X: 205 + m_Y: 113 + m_Width: 6 + m_Height: 43 + - m_X: 322 + m_Y: 107 + m_Width: 14 + m_Height: 13 + - m_X: 258 + m_Y: 156 + m_Width: 11 + m_Height: 12 + - m_X: 495 + m_Y: 124 + m_Width: 16 + m_Height: 387 + - m_X: 494 + m_Y: 184 + m_Width: 17 + m_Height: 327 + - m_X: 444 + m_Y: 150 + m_Width: 1 + m_Height: 34 + - m_X: 308 + m_Y: 168 + m_Width: 14 + m_Height: 12 + - m_X: 405 + m_Y: 180 + m_Width: 20 + m_Height: 45 + - m_X: 492 + m_Y: 244 + m_Width: 19 + m_Height: 267 + - m_X: 47 + m_Y: 168 + m_Width: 1 + m_Height: 29 + - m_X: 94 + m_Y: 197 + m_Width: 1 + m_Height: 73 + - m_X: 93 + m_Y: 243 + m_Width: 2 + m_Height: 27 + - m_X: 194 + m_Y: 173 + m_Width: 11 + m_Height: 43 + - m_X: 146 + m_Y: 216 + m_Width: 1 + m_Height: 15 + - m_X: 123 + m_Y: 270 + m_Width: 1 + m_Height: 7 + - m_X: 46 + m_Y: 274 + m_Width: 1 + m_Height: 31 + - m_X: 240 + m_Y: 216 + m_Width: 18 + m_Height: 12 + - m_X: 192 + m_Y: 231 + m_Width: 2 + m_Height: 46 + - m_X: 145 + m_Y: 277 + m_Width: 1 + m_Height: 15 + - m_X: 353 + m_Y: 240 + m_Width: 4 + m_Height: 2 + - m_X: 398 + m_Y: 242 + m_Width: 7 + m_Height: 27 + - m_X: 488 + m_Y: 304 + m_Width: 23 + m_Height: 207 + - m_X: 443 + m_Y: 269 + m_Width: 1 + m_Height: 35 + - m_X: 285 + m_Y: 266 + m_Width: 1 + m_Height: 35 + - m_X: 285 + m_Y: 288 + m_Width: 23 + m_Height: 13 + - m_X: 237 + m_Y: 277 + m_Width: 3 + m_Height: 51 + - m_X: 190 + m_Y: 292 + m_Width: 2 + m_Height: 47 + - m_X: 122 + m_Y: 290 + m_Width: 1 + m_Height: 63 + - m_X: 122 + m_Y: 338 + m_Width: 23 + m_Height: 15 + - m_X: 92 + m_Y: 305 + m_Width: 1 + m_Height: 59 + - m_X: 43 + m_Y: 384 + m_Width: 3 + m_Height: 17 + - m_X: 121 + m_Y: 364 + m_Width: 1 + m_Height: 26 + - m_X: 90 + m_Y: 386 + m_Width: 32 + m_Height: 4 + - m_X: 90 + m_Y: 365 + m_Width: 2 + m_Height: 25 + - m_X: 43 + m_Y: 390 + m_Width: 38 + m_Height: 11 + - m_X: 165 + m_Y: 401 + m_Width: 1 + m_Height: 13 + - m_X: 190 + m_Y: 398 + m_Width: 18 + m_Height: 16 + - m_X: 234 + m_Y: 339 + m_Width: 3 + m_Height: 59 + - m_X: 80 + m_Y: 445 + m_Width: 1 + m_Height: 41 + - m_X: 80 + m_Y: 503 + m_Width: 42 + m_Height: 8 + - m_X: 118 + m_Y: 486 + m_Width: 4 + m_Height: 25 + - m_X: 208 + m_Y: 460 + m_Width: 29 + m_Height: 1 + - m_X: 234 + m_Y: 390 + m_Width: 12 + m_Height: 8 + - m_X: 0 + m_Y: 510 + m_Width: 277 + m_Height: 1 + - m_X: 80 + m_Y: 509 + m_Width: 197 + m_Height: 2 + - m_X: 160 + m_Y: 508 + m_Width: 117 + m_Height: 3 + - m_X: 237 + m_Y: 506 + m_Width: 40 + m_Height: 5 + - m_X: 246 + m_Y: 451 + m_Width: 31 + m_Height: 9 + - m_X: 281 + m_Y: 328 + m_Width: 4 + m_Height: 19 + - m_X: 281 + m_Y: 382 + m_Width: 1 + m_Height: 8 + - m_X: 330 + m_Y: 301 + m_Width: 23 + m_Height: 46 + - m_X: 282 + m_Y: 443 + m_Width: 35 + m_Height: 8 + - m_X: 315 + m_Y: 377 + m_Width: 2 + m_Height: 5 + - m_X: 330 + m_Y: 303 + m_Width: 39 + m_Height: 44 + - m_X: 357 + m_Y: 303 + m_Width: 12 + m_Height: 74 + - m_X: 396 + m_Y: 303 + m_Width: 2 + m_Height: 75 + - m_X: 396 + m_Y: 329 + m_Width: 7 + m_Height: 49 + - m_X: 402 + m_Y: 329 + m_Width: 1 + m_Height: 122 + - m_X: 439 + m_Y: 329 + m_Width: 4 + m_Height: 34 + - m_X: 403 + m_Y: 438 + m_Width: 108 + m_Height: 73 + - m_X: 403 + m_Y: 386 + m_Width: 36 + m_Height: 125 + - m_X: 465 + m_Y: 363 + m_Width: 46 + m_Height: 148 + - m_X: 369 + m_Y: 438 + m_Width: 142 + m_Height: 13 + - m_X: 369 + m_Y: 408 + m_Width: 70 + m_Height: 43 + - m_X: 402 + m_Y: 386 + m_Width: 37 + m_Height: 65 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 010b82bc895978049b69aaf4b855d7ab + pointSizeSamplingMode: 0 + pointSize: 67 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!28 &9189266081204752172 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Heavy SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_MipsStripped: 0 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IsPreProcessed: 0 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + m_PlatformBlob: + image data: 262144 + _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812181b2020202020202020191711070000000000000000000000000000000a141a1c202020202020202017140e0500000000000000000000000000000000000000000c161c1e202020202020201f1d180f030000000000000000000000000000000000000000000000000000000000070d0f2020202020202020191711070000000000000000000000000000000000070b1e2020202020201f180b08010000000000000000050e14171f202020202020200e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1011111111111111110e0c0700000000000000070d0f202020202020202020200a040000000000060c0e2020202020202020200d0b050000000000080d0f202020202020202020200902000000000000020b1113202020202020201f1b0f0d070000000000000000000000000000000000000000000000070d0f1b1f2020202020202014120c03000000000000000000000000000000000000000000000410191e20202020202020202020200a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e1013141516151513110e0b08010000000000000000000000000000000000000000000000000000000000000000000c1a252d3035353535353535352e2b24180a000000000000000000000000000e1c272f3235353535353535352c29221608000000000000000000000000000000000000101e2930333535353535353535322c2113030000000000000000000000000000000000000000000000000000010f1a212435353535353535352f2c24190a000000000000000000000000000008131c2033353535353535352d201c1408000000000000081622292c35353535353535352320190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0e19202325262727272727272724211a0f01000000010f1a2124353535353535353535351f170c0000000e192023353535353535353535351f180d000002101b2225353535353535353535351e160a0000000006141f262935353535353535343024221b10020000000000000000000000000000000000000002101b222430343535353535353529271f140600000000000000000000000000000000000000000414222d3335353535353535353535351f170c00000000000000000000000000000000000000000000000000000000000000000000000000000001080b10151d202326282a2a2b2b2a282623201d14100b080100000000000000000000000000000000000000000000000000000000001a2a3741454a4a4a4a4a4a4a4a4340362818000000000000000000000000001c2c3943474a4a4a4a4a4a4a4a413e34261605000000000000000000000000000000000c1e2e3b45484a4a4a4a4a4a4a4a473e31210f00000000000000000000000000000000000000000000000000000f202d36394a4a4a4a4a4a4a4a4440362919070000000000000000000000000818253035484a4a4a4a4a4a4a42353026180800000000011626343e414a4a4a4a4a4a4a4a38352c1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e212c35383a3c3c3c3c3c3c3c3c39362d1f0f0000000f202d36394a4a4a4a4a4a4a4a4a4a33291c0c000e1e2c35384a4a4a4a4a4a4a4a4a4a342a1d0d0010202e373a4a4a4a4a4a4a4a4a4a4a32281a0a0000021424313b3e4a4a4a4a4a4a4a4a4539362d20100100000000000000000000000000000000000010202e363a45494a4a4a4a4a4a4a3f3b32251403000000000000000000000000000000000000001022323f484a4a4a4a4a4a4a4a4a4a4a33291c0c0000000000000000000000000000000000000000000000000000000000000000000000000608141c2025273135383b3d3f4040403f3e3b3935312626201d15090600000000000000000000000000000000000000000000000000000c1c3748555a6060606060606060595346361a0a00000000000000000000000e1e394a565c606060606060606056514434220e0000000000000000000000000000000016293b4c595e606060606060605f5b4f3e2c1804000000000000000000000000000000000000000000000000071a2d3e4a4e6060606060606060595447362411000000000000000000000000132536434a5e6060606060605f584b43362614010000000f1f344451565f606060606060605e493c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2933363c494d5051515151515151514e4a3d2d1a0700071a2d3e4a4e6060606060606060605e463a291706192c3c495e6060606060606060605e483b2a18081b2e3e4b4f6060606060606060605e4538281602000b1f31424e53606060606060605f5a4f4a3e2d1f0f00000000000000000000000000000000000e1e2e3e4a4f5a5f60606060606060544f43321f0c00000000000000000000000000000000000005192d3f505c5f6060606060606060605e463a291704000000000000000000000000000000000000000000000000000000000000000000060e19202630353a37444b4d5053545555555453514e4b44373b353127211a0f07000000000000000000000000000000000000000000000004172a3a55667075757575757575756e64533828160200000000000000000006192c3c56687175757575757575756c62513e290f000000000000000000000000000000001c3045596a7375757575757575746d5b47321d080000000000000000000000000000000000000000000000000d21364a5c7075757575757575756e6554402c170000000000000000000000071c3043546073757575757575746d605443301c080000061a2c3d51626c7475757575757575705a4935200c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c39464c555a63656666666666666666635b4a36210c000d21364a5c70757575757575757575705846331f0c2035495a70757575757575757575705948341f0d22374b5c64757575757575757575705645321e090011263b4e6068757575757575757470645c4a3d2c1a0600000000000000000000000000000006192c3c4a5c6470747575757575757569614f3b2712000000000000000000000000000000000000091e33485c6e75757575757575757575705846331f0a00000000000000000000000000000000000000000000000000000000000000030f1a212c3536434b50565560636568696a6b6a6a686663605556504b4437352c211a0f030000000000000000000000000000000000000000000a1f33475870848a8a8a8a8a8a8a8a826e5645321e090000000000000000000c2035495a71868a8a8a8a8a8a8a8a806c563d2d1a070000000000000000000000000000001e33485e73888a8a8a8a8a8a8a8b745f4a351f0a00000000000000050b0d131515130c0a04000000000000000f24394e647a8a8a8a8a8a8a8a8a836e59442f1900000000000000000000000b20354a6072888a8a8a8a8a8a8a8272604b35200b00000c2135495b6c818a8a8a8a8a8a8a8a78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2c3c4957616a73787a7b7c7c7c7c7c7c7c79634e39240e000f24394e647a8a8a8a8a8a8a8a8a8a76614c36210e23384d63788a8a8a8a8a8a8a8a8a77624c37220f253a4f647a8a8a8a8a8a8a8a8a8a75604b36210b0013293e53687e8a8a8a8a8a8a8a89857a645b4935210b0000000000000000000000000000000c2035495a647a85898a8a8a8a8a8a8a7f69543f29140000000000000000000000000000000000000a20354a5f758c8a8a8a8a8a8a8a8a8a76614c36210c0000000000000000000000000000000000000000000000000000000000000b171e2c363c494d5460656b7075787b7d7f7f80807f7d7b7875706b6560554e493d362d1e170b00000000000000000000000000000000000000000c21374c61768b9f9f9f9f9f9f9f9e8975604b36210b0000000000000000000e23384d63788da49f9f9f9f9f9f9d87725b4a36210c0000000000000000000000000000001e33485e73889d9f9f9f9f9f9f8a745f4a351f0a0000000000000e192022292a2a28211f170c0000000000000f24394e64798e9f9f9f9f9f9f99836e59442f1900000000000000000000000f253a4f647a8fa69f9f9f9fa99f917c665137271501000e23384e63798d9faa9f9f9f9f9f947f69543b2a180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2b3b495a627680888d8f919191919191918777624c37220d000f24394e64798e9f9f9f9f9f9f9f8b76614c36210e23384d63788d9f9f9f9f9f9f9f8c77624c37220f253a4f647a8f9f9f9f9f9f9f9f8b76604b36210b000c21364c61768a9f9f9f9f9fa99f9a8a79634e3928160300000000000000000000000000021528384d62788a9a9ea89f9f9f9f9f8a77614c37220c0000000000000000000000000000000000000a20354a5f758a9f9f9f9f9f9f9f9f8b76614c36210c0000000000000000000000000000000000000000000000000000000003111b29333d494e5a636c747a8085898d9092949595959493908e8a86807b746c635b4e4a3d33291b100200000000000000000000000000000000000216283852677d92aabbb5b5b5b5b9a8917c6651372614010000000000000005182a3b54697f94a9c2b5b5b5b5b6a58e79634e39240e0000000000000000000000000000001e33485e73889db3b5b5b5b49f8a745f4a351f0a0000000006131e2b35383e40403d37332a1c1103000000000f24394e64798ea3b5b5b5b5ae99846e59442f1900000000000000000000061a2c3d566b8096abc4b5b5b5baad98836d5544311d0804182a3a546a7f94a9bbb5b5b5b5b09a85705947341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a293a4859627886959da6a5a6a6a6a6a79d8878635948341f0b000f24394e64798ea3b5b5b5b5b5a18b76614c36210e23384d63788da2b5b5b5b5b5a18c77624c37220f253a4f647a8fa4b5b5b5b5b5a08b76604b36210b000a1f3346586d8298adc2b5b5bab4a898826d5746321e0900000000000000000000000000091d3245566d8297a8b4b9c6b5c3ae98836e5847331f0a0000000000000000000000000000000000000a20354a5f758a9fb4b5b5b5b5b5a18b76614c36210c0000000000000000000000000000000000000000000000000000000614212e39464c5b636e7881888f969a9fa9a5a8a9aaaaaaa9a8a6a99f9b96908881796e635b4b46392d20100000000000000000000000000000000000091e3245566e8399aec8d9cacad7c6ad97826d5544311d08000000000000000b1f34475970859bb0c5cacacad4c3aa957f6a553c2b190500000000000000000000000000001e33485e73889db3c8cac9b49f8a745f4a351f0a000000021324313c484d535555534c473a2f2111000000000f24394e64798ea3b9cacac3ae99846e59442f19000000000000000000000c2136495b72879cb1c7cacad7c9b39e8974604b35200b0a1f34475970859bb0c5d8cacacab49f8b77624c37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818283846586277879ca4b3b7c4bbc8baa99e897a645a493b2a1805000f24394e64798ea3b9cacacab6a18b76614c36210e23384d63788da2b8cacacab7a18c77624c37220f253a4f647a8fa4b9cacacab5a08b76604b36210b000417293a50657a8fa4b6cad7cdc6b49e8976614b36210c000000000000000000000000000b20364b6075899eb3c6cdd7cab7a5907b65503a2a18040000000000000000000000000000000000000a20354a5f758a9fb4cacacacab6a18b76614c36210c0000000000000000000000000000000000000000000000000000081624313f4b57616c79838c969da6abb0b4bac7bdbebfc0bfbfbdc7bab4b0aba79e978c83796c61574a3e2d1b07000000000000000000000000000000000b21364b6075899eb4c9dedfdfdec8b39e8874604b35200b000000000000000d22374c62778b9fb4cadfdfdfdbc6b09b86715a4834200b00000000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f0a000000102031424e5a62686a6a6861584c3f2f1d0c0000000f24394e64798ea3b9ced9c3ae99846e59442f19000000000000000000000e23394e63798ea4b6cadedfe0ccb9a7907a65503b25100c22374c61778b9fb4cadfdfe3cfbcab937d6853392917030000000000000000000000000000000000000000000000000000000000000001080b0e11131415161413120f14263645566176869ca5b6c2cbd5cebbaa9f8b7b655c4a3c2c1d0d00000f24394e64798ea3b9cedfcbb6a18b76614c36210e23384d63788da2b8cddfccb7a18c77624c37220f253a4f647a8fa4b9cfdfcbb5a08b76604b36210b00000b23374b5d72879cb1c8d8e1cdb9a8927d67523a2a180400000000000000000000000417293a51677c91a7b9cce1d9c9b29d8774604b35200c000000000000000000000000000000000000000a20354a5f758a9fb4cadfdfcbb6a18b76614c36210c0000000000000000000000000000000000000000000000000007162634424e5d6576818c999fabb3b8c4c5c9cdd7d2d3d2d1d2d4d2d7cdc9c5c5b8b3ab9f998c8175645c4a36220d0000000000000000000000000000000013253651667b90a8b9cde1f6f5e0ccb8a7907a65503b25100000000000000316293953687d93abbccfe3f7f2ddc9b5a38d78624d38220d00000000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f0a0000071b2d3e4e6068787e7f7f7d76655d4c3b2a180400000f24394e64798ea3b9ced9c3ae99846e59442f1900000000000000000005192b3b556a7f94aac2d3e1dee1d6c5ab96816c563d2d1a15273852687d92abbccfe0dee0d9c9ae99846f5746331e0a00000000000000000000000000000000000000000000000000000000060c0e151d202326282a2b2b2a292724213043546074849aa4b5c3d3e0ccbbb49f8c7c665d4b3e2d1e0e0000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b0000081c2e3f54697f94aabbcee2d7c6ae99846f5847331f0a00000000000000000000000a1f3346586e8399aec5d6e3cfbcab957f6a5443301c08000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000005152534445160697b87979faab4bcc9cbd5d6ccc9c4c0bebdbcbdbfc2c6cacfdad5ccc9bcb5aa9f97877a644e39240f000000000000000000000000000000071c3043546d8297acc6d7e9fcfbe8d5c5ac96816c573e2d1b0700000000000a1e3246576f8499aec9d9ebfef8e4d2c1a8937e69533a291704000000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f0a00000d22364a5c687e8b93959592897b655947341f0e00000f24394e64798ea3b9ced9c3ae99846e59442f190000000000000000000b2034485971869bb0c6d7cdc9cdd7c7b29d87725b4a36211d3145566e8399aec9d6ccc9ccd6c9b49f8a76614b36210c0000000000000000000000000000000000000000000000000002090f1a2123273135383b3e3f40403f3e3c3936434b60728298a2b4c2d2dccdbcae9d927e685e4c3f2e200f000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b0000001122374c61778b9fb4c9dfdfcab49f8b77614c37221616161616161616161616161621364c61768a9fb4c9dfdfcab49f8b78624d36261401000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000011323334351626b7e8c9da5b4bbc8cfd8cec9c5b9b3afaba9a7a7a8a9adb1b5bcc9c9d2dacfc8bbb4a5937e69533e29140000000000000000000000000000000b20354a6074889db3c8ddf2fffff2ddc7b29d87725c4a36220d00000000000c21364b61768a9fb4c9dff4ffffefd9c4af9a846f5846331f0a000000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f0a00081c2f3f4e647a8c9faaaaaaa89e8977614c3c2b1906000f24394e64798ea3b9ced9c3ae99846e59442f190000000000000000000d22374d62778b9fb5cac6b9b4b9c6cab6a58e79634e392420364b6075899eb4c9c5b9b3b9c5cdbaa9917c67523827150200000000000000000000000000000000000000000000010a151d202c353937444b4d50535455555453524f4b50616c8196a0b2c0d1ddcebeb09e947f6a604e4030211101000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b0000000b1f3447596e8399aec3d4e2cebbaa937e68533c2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b3b53687d92a9bacde2d5c4af99846f5a4834180800000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000f1f314250616b80939faab7c3ced9cfc8bbb4ada79e99969392929394979c9fabb1b5c1d0e3d9cec3a8937e69533e29140000000000000000000000000000000f253a4f647a8fa6b8cbe0f4f7f4f4dfcbb7a58e79644f39240f000000000215273752677c91a9bacde2f6fffff4dfc9b49f8a76614c36210c000000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f0a000823384b5d6f849aaabbc8c6b8a796816c5a4935200f000f24394e64798ea3b9ced9c3ae99846e59442f1900000000000000000417293a53697e93abbccdb9a89ea8b5c2c3aa947f6a553b2a263b50667b90a8b9ccb9a79ea7b9ccc7ad98836e5645311d0900000000000000000000000000000000000000000009151d2832363d494e555560636668696a6b69686764605f6a7f949fb0becfded0bfb2a096806b614f423122120300000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b00000004182a3b51667b90a5b7cbdfd8c8b09b85705a4840404040404040404040404040404048596f859aafc7d7e0cbb8a6917c66513c2b190000000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c0000000000000000000000000000000000000000000009192d3d4e606a80959eb4bbc8d4d7cdbfb2aa9f98908984817e7d7c7d7f82868b939ba3b3bfd0e3d3bea8937e69533e29140000000000000000000000000000061a2c3d566b8095abc4d5e7ebe2dfe2e6d4c3aa95806b553d2c1a06000000081d3144556d8398adc7d7eaf2f0f2f7e2cebbaa927c6752382715020000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f000818304050657b90a2b4c8d8d5c5b49f8b78624d3d2d1a070f24394e64798ea3b9ced9c3ae99846e59442f1900000000000000000a1f3347586f849aafc9c9b49e899ca4b5c5b09b85705948342d3d576c8196acc6c7b39e899eb3c9c9b39e8975604b36200b00000000000000000000000000000000000000011019273138454b535b636a6f75787b7d7f80807f7e7c7975727d929dafbdcddcd1c0b3a1988272604a43322313040000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b000000000c20354b6074879db2c9d9dfcab59f8c7862555555555555555555555555555555555562778b9fb4cadfddc8b39e8874604b36200d0000000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c000000000000000000000000000000000000000000011527374a5b687e929eafbcced9d6c7bab4a0988b827a746f6b696867686a6d71777e8599a1b3c7dcd3bea8937e69533e291400000000000000000000000000000c2135495b72879cb1c7dce6d9cecaced9dcc6b19c86715b4935210c0000000b20364b6075899eb3c9dee4dddbdde4ead8c8ad98836e5645311d090000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f011426364d5e70859bb0c0d0e6e2cebaa998826d5b4a3621100f24394e64798ea3b9ced9c3ae99846e59442f1900000000000000000c21374c61768b9fb4cac4af9a84869cb1c6b59f8b77624c37364a5b72879db2c7baa9968196abc4ccb9a8907b665036251300000000000000000000000000000000000008141c2e37444b56606871797f84898d90939495959493918e8a878c9fb4bbccdbd2c2b4a299837360544330251505000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b00000000081c3043546a8095abbccfe3cfbcab947f6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b7f94abbccfe3d1c0ab96806b5544311d080000000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c000000000000000000000000000000000000000000081d31445563798a9fb4bccce2d6c6b9a99f9283786d65605556545252535458596268718499afc4d9d3bea8937e69533e291400000000000000000000000000000e23384e63788da4b6caded9c8bbb4bbc8d9cab6a48d78634e38230e00000013253650657b90a7b9cce0d1c8c5c8d1dfdec9b49e8975604b36200b0000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f081c304354667c91a3b5c9deeeead8c7b49f8c79634e3e2e1b0f24394e64798ea3b9ced9c3ae99846e59442f19000000000000000216283852677d92aabbcec0ab96808096abc6bcab937d685339394e63798ea5b7c9b49f8a788da6b7cbc6ac97816c5443301c07000000000000000000000000000000000a1826303e4b556069757e868e959a9ea8a5a8a9aaaaa9a8a7aa9f9c9faabbced9d4c3b5a49a84746055443625130700000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b00000000011426364d62788b9fb4cadfdac9b29d8780808080808080808080808080808080808080879cb2c9d9ddc8b4a28d78634e372715020000000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c00000000000000000000000000000000000000000417293a4b6073869ca9bacddae1cdb9a89e8b7d6e625a504b44373e3d3d3e3f3b484d596e8499aec3d9d3bea8937e69533e29140000000000000000000000000004182a3b54697f94a9c2d3e2cebbaa9faabbc8d3c2a9947f6a543b2b180500071c3043546c8197acc5d6d1c1b4b0b4c1d1e1ccb9a8907b66503625130000000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f1527384b6073869cb1c1d1dddbdde0cfbcab99836e5c4b37221124394e64798ea3b9ced9c3ae99846e59442f1900000000000000091e3245566e8399aec8d5c5a7927d7b90a8b9c9ae99846f57453b556a7f94aac3c4af9a8573889db3c8c8b39d8874604a35200b0000000000000000000000000000000a1a2836434b5c64737e88939ba3aaafb4b9c6bdbebfc0bebdc8bbb4b1b4bbc8d8dfcab7a59c8676615645372718080000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b0000000000082035485a6f849aafc5d5dfcab7a59d959595959595959595959595959595959595959ca5b6cae7d6c5b09a85705b49351909000000000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c00000000000000000000000000000000000000000a1f334658697e94a4b5c7d7e2cebdb49e8a7b675f4d483c353126292827282a2b3444596e8499aec3d9d3bea8937e69533e2914000000000000000000000000000b1f34475970859bb0c5dadfcab49f8a9faabbcec5b09b8570594834200b000b20354a6074889db2c8ddc8b4a39ba3b4c8d9d6c6ac97816c5443301c0700000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351f1d314556687d92a4b6c9d1c9c5c8cbd5c9b3a18f7a644f3f2f1c24394e64798ea3b9ced9c3ae99846e59442f19000000000000000b21364b6075899eb4c9ccb8a78d7874899eb3c9b49f8a76604b475970859bb0c5c4a9947f6e8399aec3cbb7a68f7a644f3a250f00000000000000000000000000000a1a28384554606a7a86939da6b1b5c1c4c9cdd7d2d4d5d5d4d3d9cecac7caced8e6dcc7b29d877762584738281909000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b000000000005192b3c52677c91a7b8cce0d4c3b7b2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab2b6c3d3e0ccb9a7927d68523d2c1a00000000000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c00000000000000000000000000000000000000011426374c6176899eb3c2d2e5d4c3b19f917d675d4d41352b201d141413121318182f44596e8499aec3d9d3bea8937e69533e2914000000000000000000000000000c22374c61778b9fb4cadfd9c3ae99838c9fb4cacab59f8b77624d37220d000f243a4f647a8fa6b7cbdac9b09b869baabbceddc8b29d8874604a35200b00000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351628394b6074879db2c2d1c1b5b0b3b8c4cfbfaf9a846f5d4c382324394e64798ea3b9ced9c3ae99846e59442f190000000000000114263751667c91a8b9cdc8b39e88736e8398aec9baa9917c66514c62778b9fb5cab7a68e79697e94a9c5d4c4ab96806b563d2c1a0600000000000000000000000009192838455660727f8c9ca4b3b7c4c9d2daddd6d1d7cdc9c9cacfd9d4dadcdfe2eaf0dbc5b09b8577645c4a3e2d1f0f000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b0000000000000e20364b6075889eb3c8dde1d4cac7c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c7cad3e1dec9b39e8975604b36210f00000000000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c00000000000000000000000000000000000000081d3144556a7f94a7b9cce0dfcbb7a597816c5f4d3f3120190e0801111c23262d2f2f44596e8499aec3d9d3bea8937e69533e29140000000000000000000000000316283953687d92abbccfe3d9c8a9947f859bb0c6cfbcab937e69533a2a17061a2c3d566b8095abc4d4cfbcab927d8c9fb4cadfcbb7a68f7a644f3a240f00000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a351e324657697e93a5b7cac9b5a39b9ea6b8cbc8b4a2907b6550403024394e64798ea3b9ced9c3ae99846e59442f19000000000000081d3144556d8297adc6d7c4ae99846f677d92abbcc7ac97826d5453687d92abbcc8b29d887364798ea7b9ccc7b19c87725b4936210c0000000000000000000000011426374556607482949faab5c2cbd5ded4cbc8c1bcc7bab4b4b4bcc9bfc5c8d1dce3edddc9b5a39b877a645c4a3d2c1b0b0000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b000000000000091d3145566b8196abc0d1e4e6dfddcfc6c3bebebebebebebebebebebebebec2c6cfdcdfe6e5d2c1ac97816c5745321e0900000000000000000000000000000000000000000000000a20354a5f758a9fb4cadfe0cbb6a18b76614c36210c000000000000000000000000000000000000000b20354b6074889db3c5d6e8d5c5b29d8774604b4130211305000011212f383b43444444596e8499aec3d9d3bea8937e69533e2914000000000000000000000000091e3245576e8499aec9d9e2cebbaa8f7b8196abc6d6c9af9a846f5847331f0c2135495b72879cb1c7dccab59f8b77869cb1c6dbd4c4aa95806b553c2c1906000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a352a3a4b6175889eb3c3d4c4b09b85889eb3c9d1c0b09b85715e4d3726394e64798ea3b9ced9c3ae99846e59442f190000000000000b20354b6074889eb3c8d6c6a9947f6961778b9fb4c8b39e887460566e8399aec9c8ac97826d6074899eb3c9cab6a48e79634e39230e00000000000000000000000b1d31445560748498a0b4bbc8d2e0d4cbc4b7b2aca6a2a99f9e9faba4a9b0b4c1c7d0e0e4d2c1b5a59d897a645b493929170300000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b000000000000021527384e63798ea2b4c8ddf4e2cfbfb2aea9a9a9a9a9a9a9a9a9a9a9a9a9adb2becfe1f2dec9b5a38e79644f3928160300000000000000000000000000000000000000000000000020354a5f758a9fb4cadfe0cbb6a18b76614c36210c0000000000000000000000000000000000000011263b50667b90a6b7cbe4e0ccb8a7937e6956453223130300000d1d2f404c5058595959596e8499aec3d9d3bea8937e69533e29140000000000000000000000000b21364b60768a9fb4c9dedfcab49f8a757b90a8b9cdcab49f8b76614c37210e23384e63788da4b6cadbc5b09b85708297acc2d7dcc6b19c86715a4935200c000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a353347586a7f94a6b8cbcbb8a6927d8096abbccfc9b5a3917c66554431394e64798ea3b9ced9c3ae99846e59442f1900000000000010253a50657a8fa7b8ccccb9a88f79645870859bb0c5b8a68f7a646075899eb4c9bbaa917c66556e8499aec3d3c2aa947f6a553b2b19050000000000000000000b1b2f404b60738399a2b2beced8e2ccc3b7b2a69d96918d8b89898a8c8f949ba3afb3bfcbd5dfd2c3b7a79e8979635746331e1200000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b000000000000000a2135495b70859bb0c6d6e8dbc6b2a1999494949494949494949494949498a0b2c6dae9d7c7b19b86715c4a361b0a0000000000000000000000000000000000000000000000000d1d314556758a9fb4cadfe0cbb6a18b76614c36210f00000000000000000000000000000000000006192b3c586d8297adc4d5e7dec8b39e8875604b38281505000005182b3b4c5e656d6e6e6e6e6e8399aec3d9d3bea8937e69533e291400000000000000000000000114263751667c91a9bacde1dbc6b19b867175899eb4c9cebbaa927d67523928182a3b546a7f94a9c2d3d3c2a9947f6a7d93a8c3d4dec9b6a48d78634d38230e000000000000000000001e33485e73889db3c8ddc9b49f8a745f4a2b3b4c6176899eb3c4d5c5b39d8874788c9fb4c9d2c1b19c8673604b38394e64798ea3b9ced9c3ae99846e59442f190000000000071a2d3e566c8196abc5d5c9b49e897460556a7f94aac3c4ab95806b667b90a8b9c9b49f8a766154697e93a9c4d5c5b09b8670594834200b0000000000000000031629394c5e6b8096a1b3c0cfe2d8cebcafa59d9288817c7875747475777a7f858e99a1b3b8c4d3e1d4c5b8a79c8775614b40301a0a000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b00000000000000061a2c3d52687d92a8b9cce1d8c3ae99837f7f7f7f7f7f7f7f7f7f7f7f7f8298adc2d8e1cdbaa9937e69533e2d1b00000000000000000000000000000000000000000000000005182b3b4b60758b9fb4cadfe1ccb7a18c77624c3d2c1a0600000000000000000000000000000000000b2035495a73889db2c8ddead8c8ab96816b5745321a0a0000000b20344859657c828484848483889db3c8ddd3bea8937e69533e29140000000000000000000000081d3144556d8297adc7d7e9d7c7ab96816c6e8398aec7d7c8ae99836e5745321f34485970859bb0c5dac9b6a48d7863788da5b6cadfd3c2a9947f69543a2a18040000000000000000001e33485e73889db3c8ddc9b49f8a745f4a3448596b8096a7b9ccccb8a7947f6a6e8398abbccfcab6a4927d685645394e64798ea3b9ced9c3ae99846e59442f1900000000000d21364a5c72879db2c7d9c4af99846f554e64798ea5b7c6b19c87716c8197acc6c5af9a8570574e63798ea6b7cbcab59f8b77624d37220d00000000000000000a1e324657667b8d9fb5bfcfded8c8bbb49e95877d746c676360565f5962656a707984909ea6b6c3d3e2d5c5b6a598826d5f4d382715020000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b00000000000000000f21364b6075899eb3c9ded8c3ae99836e69696969696969696969696d8297adc2d7dec9b49f8a76614c36211000000000000000000000000000000000000000000000000009203448596a7f94abbccfe3ebd5c0ab96806b5b4935211200000000000000000000000000000000000d23384d62788da6b7cbdfe2cebbaa8f7a6550392816000000000d22374d62778b9899999999999da6b7cbe0d3bea8937e69533e291400000000000000000000000b20354b6074889eb3c8dde2cdbaa9907b66677c92a9bacdc9b49f8a76604b3622374c62778b9fb5cadcc6b19c86715b72879db2c7dcdac5b09a85705947341f0a0000000000000000001e33485e73889db3c8ddc9b49f8a745f4a3c4d62778a9fb4c5d5c4b39e89766163798c9fb5c8d3c2b29d8774604b394e64798ea3b9ced9c3ae99846e59442f1900000000000f24394e64798ea5b7cad6c6a9947f6a544a5c72879db2c7b6a48d7872879db2c7c4a9947f6a544a5b73889db3c8cfbcab937e69533a29170400000000000005182a3b4b6175889dabbccfdde2cebbaa9f928075676054514d4b453b474c4f545b636f7b889ca4b6c3d4e3d3c3b2a0917c675645311d080000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe0cbb5a08b76604b36210b0000000000000000091e3245576c8297acc2d2dfc9b49f8a76615454545454545454546075899eb3c9ded3c3ad98826d5846331f0a000000000000000000000000000000000000000000000009192e3f4d62778a9eb4c9d9ebf3dfc9b49f8b79634e40301a0a0000000000000000000000000000000012273c51677c91a6c4d4e6dfcab49f8a76604b36210b0000000010253a50657a8faaaeaeaeaeaeb3b7c4d5e7d3bea8937e69533e2914000000000000000000000010253a50657a8fa7b8cce0dfc9b49f8a766061768a9fb4c9cdbaa9917c665137293953687e93abbccfd4c3aa95806b576c8197acc8d8dfcab49f8b77614c37220c0000000000000000001e33485e73889db3c8ddc9b49f8a745f4a495a6c8197a9bacdcbb8a6947f6a575b6e8398aabbcecab7a5937e6957464e64798ea3b9ced9c3ae99846e59442f190000000006192b3c556a8095aac3d4cdb9a88f7a644f3d576c8197acc7c2a8937e798da5b7cab7a68e79634e3d586d8398adc2dac9af9a846f5847331f0a0000000000000b1f3448596b8095a6b7c9dae1cebdb49f8c7e6b60564b43363836312a34373a3d4a4e5d6578869ca5b7c9d9e1cfbeb29d8774604b3626140100000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e23384d63788da2b8cde1ccb7a18c77624c37220f253a4f647a8fa4b9cfe2cebbaa8b75604b36200b0000000000000000031628394f647a8fa3b5c9decdbaa9927d68533b3f3f3f3f3f3a51677c91a8b9ccdfcab6a58f7a65503a29170400000000000000000000000000000000000000000000011426374b5d6d8298a8b9cde3dfdde0cebbaa99846f5e4c38281602000000000000000000000000000000152a3f546a7f94a9bfd4e9dbc6b19c86715645321e090000000010253a50657a8fa5c8c3c3c3c3c8cbd5dadad3bea8937e69533e291400000000000000000000071a2d3d566b8196abc5d5e7dac4af9a846f57576f8499aec8d7c7ad98826d55443346576f8499afc9dacab7a58e796451667c91aabbcee2cfbcab927d68533928160300000000000000001e33485e73889db3c8ddc9b49f8a745f3d4d63788b9fb4c7d4c3b39e8875614b4e63798c9fb4c7d4c3b39e8875614b4e64798ea3b9ced9c3ae99846e59442f19000000000b2035495a71869cb1c6dbc9b49e8975604b3c51667b91a9bac3ad98827e93a8c3c8b29d88735b4a3d53687d92a8c3d3cab49f8b76614c37210c0000000000021527384c62778a9fb4c4d4e7d4c3b19f917d68604b4538302623201d181f22252d363f4c5a6277879dabbccfe3dfcab6a5937e695443301c0800000000000f24394e64798ea3b9cee0cbb6a18b76614c36210e24394e63798ea3b8cee2cdb7a28d78624d382310253a50657a8fa5bacfdfcab49f8a75604a35200b0000000000000000000a22364a5c71869bb1c7d7d7c7af9a846f5948342a2a2a3346586e8399aec6d6d8c8b29c87725d4b371c0c0000000000000000000000000000000000000000000000081d314455657b8fa0b2c6d6cfcac8cbd5c8b3a1917c665645321e0e000000000000000000000000000000172d42576c8297acc1d7ecd9c4ae99846f59382816030000000010253a50657a8fa5bac5c5c5c5c5c5c5c5c5c5bea8937e69533e2914000000000000000000000c21364a5b72879cb2c7dce7d5c4a9947f695453687d92aabbcec8b39e8974604b364c61768a9fb4c9dcc7b29d87725c4c61768a9fb4cadfd9c9ae99836e5745321e0900000000000000001e33485e73889db3c8ddc9b49f8a745f4a5c6d8298aabbcecab7a5937e695746495b6d8298a9bacecbb8a6957f6a584e64798ea3b9ced9c3ae99846e59442f19000000000d23384d62788da4b5c9d9c4af99846f5544364b60758a9fb4c8b29d888298adc2c8ac97826d573d384d62788da5b6cacebbaa927d67523828160300000000091d3145566b8095a9bacde2dfcab6a597816d5f4e4132281c140e0b09050b0d101a212f3c4959657b8c9fb4c7d7e6d3c3b29d8773604b35200b00000000000f24394e64798ea3b9cee0cbb6a18b76614c362821253a50657a8fa5bacfe4cfbaa58f7a65503a2a20283852677c91a7bcd1dec8b39e89735443301c07000000000000000000071b2d3e53697e93a9bacddfcab49f8b77624d37221421364c61768a9fb4c9dfcebbaa947f6a543f2e1c000000000000000000000000000000000000000000000004172a3a4b6073869bb1becfc9bcb5b3b8c4d0bfb29d8775604b3c2b19050000000000000000000000000000192e43596e8398aec3d8ecd7c1ac97826c57422d17000000000010253a50657a8fa5afafafafafafafafafafafafa8937e69533e2914000000000000000000000e24394e63798ea5b6cadfe0cbb8a68e79644e4c61778b9fb4caccb8a7907b65503852677c91a9baced5c4ab96816b56465770859ab0c5dadec9b49f8a76604b36210b00000000000000001e33485e73889db3c8ddc9b49f8a745f4e64798d9fb5c8d3c2b29d8774604b393d4d62788b9fb4c7d5c5b39e8976614e64798ea3b9ced9c3ae99846e59442f1900000004182a3a54697e94a9c2d2d7c6a9947f6a54373245566f8499afc4b7a69d899eb3c8bbaa917c67513c35485a72879cb2c7d8c8ae99836e5645321e09000000000b20364b6075889eb3c7d7e8d6c5b29d8775614b41311e160a010000000000000007111e2c3a4b5d6b8096a9bacde1dfcab7a5907b665137271502000000000f24394e64798ea3b9cee0cbb6a18b76614c453836364253697e93a8bed3e3d5c0ab95806b584739363745566b8096abc0d5dcc7b29c87725d36251300000000000000000000001021374c61768a9fb4c9decfbcab947e69543d2c1a2b3b53687d92a9bacddfcab49f8b77624c3722110000000000000000000000000000000000000000000000081f334758687e93a3b5c9cfbcab9f9ea6b8cbcab6a5957f6a5a4835201100000000000000000000000000001a2f445a6f8499afc4d9ebd6c1ab96816c56412c17010000000010253a50657a8f9a9a9a9a9a9a9a9a9a9a9a9a9a9a937e69533e291400000000000000000005182b3b556a7f94aac3d3e6ddc8b39d8874604a475870859aafc9d6c5ac97816c5445566e8398adc7d8cbb8a68f7a654f39556a7f95aac5d5e1cdbaa9917c665137261401000000000000001e33485e73889db3c8ddc9b49f8a745f5d6f8499abbccfcab6a4927d6856453135485a6c8197a9bacdccb9a896806b5964798ea3b9ced9c3ae99846e59442f190000000a1f34475970859ab0c5dacdb9a88f7a644f3a283853687e93a8c2c4b7a79ea7b8cab49f8a76614c362b3c576c8297acc9dac9b49e8975604b36210b0000000011263b51667b90a7b8cce5e0ccb8a7937e6857463223130200000000000000000000000e1c2e3f4c61778a9fb4c9dee6d4c3ae98836e5544311d08000000000f24394e64798ea3b9cee3d3bea9947e6c60564e4b4c4f6070859ab0c5d9cfcac8b39e897661574d4b4c506074879db2c8ddd8c3ae99836e59442e1900000000000000000000000a1f3347586d8298adc3d3d9c9b09b86715b4935213448596f849aafc7d7d4c4ae99836e5948341f0b0000000000000000000000000000000000000000000008182d3e4c6176899eb3c2d2cab59f8d889eb3c7d4c3b49f8a78624d3f2f1909000000000000000000000000001a30455a6f859aafc4daebd5c0ab96806b56412b1601000000000f24394e647a848585858585858585858585858585847c66513c27110000000000000000000b2034485970869bb0c5dbecdac9ad98826d54433a53697e93abbccfc8b29d8874604b6075899eb3c9ddc8b39d8874604b3a4f647a8fa7b8cce0d7c7ad97826d5544311d08000000000000001e33485e73889db3c8ddc9b49f8a745f657a8fa1b3c9d2c1b19c8673604b38272b3c4c62778a9fb4c5d6c6b49f8a776264798ea3b9ced9c3ae99846e59442f190000000c22374c61778b9fb4cadec9b49e8975604b3522384d62788da4b5c9c5b8b3b8c5c5af9a8570584633273c52677c91abbccfcdb9a8917c665137261401000005192b3c586d8297adc5d5e8dec8b39e8975614b3928160500000000000000000000000000111f3447596d8297acc4d4e7dec9b49e8975604b36200b000000000f24394e64798ea3b9cee3d6c2ae9d94817569636061656d7e93a2b4c8c9bcb4bcb8a79a847568626061666f8196a6b7cbdfd1c1a9947e69543f291400000000000000000000000417293a50657b90a5b6caddc9b5a38d78634e3823374d62778b9fb4cadfcbb7a6907b66513b2a1805000000000000000000000000000000000000000000001325364a5c6c8197a7b8ccd2c2af99837f94a9bacecdbaa998836e5d4b372715010000000000000000000000001a2f44596f8499aec4d9ebd6c1ab96816c56412c1701000000000d21364a5c6470707070707070707070707070707070665e4d39240f0000000000000000000d22374d62778b9fb5cadfe3cfbcab927d675236374d62778c9fb5cacbb7a68f7a6450667b90a8b9ccd6c5ac97816c5443354b6074899eb3c8deddc8b39e8874604b35200b000000000000001e33485e73889db3c8ddc9b49f8a745e70859ab0bfd0c9b5a3917c675544311a203448596b8096a7b9cccdbaa997816c64798ea3b9ced9c3ae99846e59442f1900000316293953687d92abbccfd9c4af9a846f5544312035485a71869cb1c6d6ccc8ccd4c4a9947f6a543a2922374c61778b9fb5cad7c6ad97826d5544311d0800000b2035485a73889db2c8ddebd6c1ab96816c5746321b0b000000000000000000000000000004182a3a4f64798ea6b7cbdfe1ccb9a88f7a65503a2510000000000f24394e64798ea3b9cee3e3cbbbae9f96877f7876767a82939cadc0cfbcab9fabb4b4a29a877d7775777b84969fb1c4d4ddc8b4a38e79644e39240f0000000000000000000000000c20354a6073879cb2c8d8d2c1aa95806a553e2e3d54697e94abbccfdac9b29d8874604b35200d00000000000000000000000000000000000000000000071c304354647a8c9fb4c5d5c9b5a4907c778a9fb4c9d7c7b2a0907b655544311d0d000000000000000000000000192e43586e8398adc3d8edd7c2ad98826d58432d180000000000071a2d3e4a4e5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a514d40301d0900000000000000000317293953687e93abbccfe3dfcab59f8b77624c3734485970859bb0c5d4c4ab95806b546c8197acc6d6ccb9a7907b6550363043546e8398aec3d8e0ccb8a78f7a65503a2510000000000000001e33485e73889db3c8ddc9b49f8a74667b90a2b4c8d1c0b09b8572604a372614182b3b4c6176899eb3c5d5c7b49f8b7864798ea3b9ced9c3ae99846e59442f1900000a1e3246576f8499aec9d9d7c6a9947f6a543727192b3c566b8095abc5d5e0dedfcbb7a68e79644e39241f33475871869bb1c6dbc8b39e8874604b35200b00000d22384d62778da6b7cbdfe6d3c3a6917c6651392816000000000000000000000000000000000c22364a5c73889db3c8dde8d6c6aa947f6a553f2a15000000000f24394e64798ea3b9cee8d6c5b9b3b0a59d948d8b8b8f97a0adbacac7b49f8b9aa2b4b4a59c928d8b8c909aa2b1bdcee1d0bfb09b85705c4a36220d000000000000000000000000071c3043546a7f94aabbcedcc7b29c87725c4b37495b71869bb0c9d9cfbcab95806b5544311d08000000000000000000000000000000000000000000031729394a6072859babbccfd2c2b19c86736d8298abbccfcfbeb19c8674604b3b2a18050000000000000000000000172c41576c8196acc1d6ebdac5af9a85705a3c2b190500000000000f202d3639454545454545454545454545454545453c393022120000000000000000000a1e3346576f8499afc9daecdbc6b19b86715947342b3b546a7f94a9c2d2c7b19c87726074889db3c8ddc9b39e8975604b36263653687d92a8c2d3e5d5c5ab96816b563d2d1a070000000000001e33485e73889db3c8ddc9b49f897472869bb1c0d1c8b4a2907b6654433019090d1f3347586a7f95a7b8cccebbaa98836e798ea3b9ced9c3ae99846e59442f1900000c21364b61768a9fb4c9decdb9a88f7a644f3a2510253a4f657a8fa7b8cce0ebddc8b29d88735c4a3621182a3a566b8196abc8d8ccb8a78f7a65503a2510000011273c51667c91a6c4d4e6dfcab6a58c77614c37220c00000000000000000000000000000000071b2d3e596e8398aec3d8edd8c3ad98836e58432e19000000000f24394e64798ea3b9cee0ccb9a79ea7b3b2a9a3a0a1a4adb1becacdbaa99781849aa7b9b6b2a8a2a0a1a5afb3c0cee0d2c3b3a1917c67523e2d1b07000000000000000000000000001325364c62778b9fb4cadfcab6a58f7a644f374e63788da3b5c9dfcab59f8c78624d372614010000000000000000000000000000000000000000000a1e334657677d92a2b4c9d9c9b5a4917c6763798c9fb4c9d9c9b6a4937e695947341f10000000000000000000000014293f54697e94a9bed3e9ddc8b39e88735a4835200b0000000000010f1a21243030303030303030303030303030303027241d12040000000000000000000c21364b61768a9fb4c9dfe9d7c6ab95806b563b2a23384d63788da4b5c9cab6a48e79647a8fa6b7cbd7c6ad98826d55443122384d62778da4b6cadedcc7b29d87725b4a36210c0000000000001e33485e73889db3c8ddc9b39e89747c91a3b5c9d0bfaf9a85705e4c3625130004172a3a4b6175889eb3c4d4c8b59f8d7a798ea3b8ced9c3ae99846e59442f19000215273751677c91a9bacdd5c9b49e8975604b36200b20354b6074899eb3c8d6d6d8c8ac97826d573d2d1a11263b51667b90aabbced5c5ab96816c563e2d1a070014293f54697e94a9bed3e9dcc7b29c87725947341f0b0000000000000000000000000000000000152a3f556a7f94aabfd4e9dbc6b19c86715c362513000000000f24394e64798ea3b9ced5c5b39e899aa1b1bdb8b5b6bac2c5cecebeb49f8a7879899ea9b7c4bdb7b5b6bbc4c7d0d6ccc1b5a599836f5f4d3920100000000000000000000000000000081f3448596e8399aec4d4d3c3ab96816c5544556a8095aac1d2d5c5af9a846f5a49351909000000000000000000000000000000000000000000061a2c3d4b6175889db3c0d1d2c1b19c8673605b6e8398abbccfd3c2b39e8977624c3e2e18080000000000000000000011263c51667b91a6c3d3e6e0cbb8a68d78624d38221000000000000000070d0f1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b110f09000000000000000000000115273752677c91a9bacee2e1cdb9a8907b65503b252035495a71869cb1c6d3c2aa947f6b8095abc4d4cdbaa8917c665137272034485a72879cb1c7dcdfcab6a58e79634e39240e0000000000001e33485e73889db3c8ddc8b39d8874879cb2c1d2c9b3a18f7a654f402f180800000c1e324657697f94a6b7cbcfbcab9984798da3c9d9d9c3ae99846e59442f1900081d3144556d8398adc7c0c0c4af9a846f5544311d081d3144556d8398adc2c1c1c1bbaa917c67513c27120c21364b61768a9fb4c9c0c0b29d87725c4a36210d00172c41576c8196acc1d6ebdac5af9a85705a3b2a1804000000000000000000000000000000000012273d52677c92a7bcd1e7dec9b39e89745443301c070000000f24394e64798ea3b9c0c0b8a78f7a84979fb2b7c3c8cbcfcac8bbb4a0947f6a657b8b9da6b4b9c6c7cacecdc9c7c5b9b3a39b8777614c41301d02000000000000000000000000000005182a3b51667b91a6b7cbddc8b39d8874604b5c72879cb2c7dcccb8a7927c67523c2b19000000000000000000000000000000000000000000000a2135495b6b8096a6b7cbddc9b5a3917c66544e63798c9fb4c8d9ccb9a797826d5c4b362614010000000000000000000d22374c62778ca5b6cadfe7d5c4a8937d68533e2e1b080000000000000000000505050505050505050505050505050500000000000000000000000000081d3144556d8398adc7d8eadec9b49e8975604b3620192c3c556a8095aac3d3c6b09b8672879cb1c7dcc9b49f8a75604b3621192b3c566c8196abc7d7e6d3c3aa947f6a553b2b190500000000001e33485e73889db3c8dcc7b19c867d93a4b6cacfbcab99846f5d4b372211000000031629394b6075889db2c3d3c9b3a1917c91abbccfd9c3ae99846e59442f19000b20364b6074899eabababababa6947f6a543727150214263752677c92a4acacacacab9f8b76614c36210c0a1e32465770859aabababababa58e79644e39240f00182e43586d8398adc2d8edd8c3ae99836e59442e1900000000000000000000000000000000000010253b50657a90a5bacfe5dfcab49f8a75604a35200b0000000f24394e64798ea3abababaa9e88727481909da5aeb2b7bcb5b2aa9f95826d615d657a87969ea8adb1b4bbb9b4b2ada79e948577625947342313010000000000000000000000000000000d20354b6074889db2c9dacbb8a6907b6550647a8fa4b6cadec8b39e8975604b36200e0000000000000000000000000000000000000000000a1a30404e63798b9fb4c4d5d1c0b09b85715e4d4a5b6d8298aabbced6c5b59f8d7a645443301c0c0000000000000000000b1f34475972879cb2c7dcefdac5b09a85705c4b372212000000000000000000000000000000000001080b0c0a040000000000000000000000000000000b20354b6074899eb3c9deeed9c4ae99846f5645311d0e24394e63798ea5b6cac9b5a3907a90a4b6cad8c8ae99836e5645321e11263b51667b90a9bacde2dbc6b09b8671594834200b00000000001e33485e73889db3c8dbc6b19b85889db2c3d3c8b59f8d79644e3f2e1b04000000000b1e324556687e93a5b6cad0bfb09b858c9fb4cad9c3ae99846e59442f190010263b50657b90959595959595938877624c37220d000b21364b60748693969696969691816c5846331f0a0316293951667c8c94959595959595806a55402b1500192e44596e8399aec3d8ecd7c2ad97826d58422d180300000000000000000000000000000000000f253a4f647a8fa4b9cfe4e3cfbcab8b76614b36210c0000000f24394e64798e959595959591806a606c7c8791989da6ab9f9c978c8072604b4b5c6475808992989c9faaa89e9d9892897f756259483a2a180500000000000000000000000000000000081d3144556b8095abbccfd5c4ad98826d576c8196abc3d3d1c1ab96816c5645321d090000000000000000000000000000000000000000021628384d5e6f849aaabbcedcc8b4a2907b6550403d4d63788c9fb4c7d8cfbcab9b8573604b3a291704000000000000000005182a3b576c8197acc3d4e6ddc8b4a28f7a644f402f1d0d00000000000000000000000000000309151d20211f170c050000000000000000000000000010253b50657b90a7b9cce0e6d4c3a9937e69543827150c21364a5b72879cb2c7d2c1b09a859ab0c2d3cebbaa927d67523828160b21364b60768a9fb4c9dfddc9b5a38c77624d37220d00000000001e33485e73889db3c8ddcab59f8c9da6b7cbcebbaa98836e5c4a3621100000000000021628384b6074879cb2c2d2c8b4a39b9fabbccfd9c3ae99846e59442f190010263b50657b808080808080807e76625948341f0b00091e32455661767e81818181817c72604a3a291704000b24384c5e667a7f8080808080807e68533e2813001a2f44596f8499aec4d9ebd6c1ac96816c57412c170200000000000000000000000000000000000f24394f64798ea4b9cee3ebd9b6a18c77614c37220c0000000d22374c62778080808080807c72604b5e66747c83888b8b8a8781796b6054433e4a57616b767d83878a8b8b8987837d766a6057483b2b1c0c0000000000000000000000000000000000011426374d62788c9fb5cadec9b49f8a766174889eb3c8dec9b5a38e79634e382815020000000000000000000000000000000000000000091e324556667c91a2b3c8d8d0bfaf9a85705e4c3835495b6d8297a9bacedac9b5a3927d685846331f0f00000000000000000010253a50657a8fa5b7cadfe4d1c0ae98836e5e4c3b2b1c0e0100000000000000000000020b161e27313537332a20180d0000000000000000000000071b2d3e576c8196acc5d6e8dfcab7a58d78634e38230e071a2d3d566b8096abc4d4c8b4a29aa2b4c8dfc9b49f8a76614c36210c091e3245576f849aafc4dae4d2c1a8937e68533a291704000000001e33485e73889db3c8ddcfbcab9fabb7c4d4c7b49f8b78634d3d2d1a020000000000000a1d314455677d92a4b5c9d1c1b4b0b4bcc9d9d9c3ae99846e59442f19000e23384c5d656b6b6b6b6b6b6b696158483b2a18050002162838465861696c6c6c6c6b67605443301b0b0000091d2f404c5c646a6b6b6b6b6b6b68604e3a261100192e43596e8398aec3d8edd8c2ad98836d58432e1800000000000000000000000000000000000010253a4f657a8fa4bacfe4e3cfbcab8b76604b36210b0000000b20344859626b6b6b6b6b6b676054434c5560676e73757675726c635b4b43362d39464b5761686e7275767674726d6861584b45392b1d0d00000000000000000000000000000000000000092035495a6f849aafc5d5cdbaa8927c677b91a7b8ccd7c6b09b85705b4a361a0a000000000000000000000000000000000000000005192b3c4b6075879db2c0d0dac9b3a18f7a654f402f2c3c4d62788b9fb4c7d7d2c1b39e8876614c3d2d1a0700000000000000000b20354b6074879db2c5d5e8dbc6b2a0917c6659483a2b1d150903000000000000060a151d293237444b4c473a342b1d0d000000000000000000000d22364a5c72879db2c7ddf2ddc7b29d87725b4935210c000f253a4f647a8fa6b7cbd1c0b4b0b4c0d1d9c9af99846f5846331f0a0316283954697f94a9c4d5e7d9c4af9a846f5846331f0a000000001e33485e73889db3c8dddac9bcb5bcc9d4cdbaa997826d5b49351f0f00000000000000011527374b6073869cb1c1d1d1c8c5cacfd9e7d9c3ae99846e59442f1900091c2f3f4c5056565656565656534c473a2a1d0d0000000a1a293a464c545757575756514a433625130000000012222f3e4a4f55565656565656534e42311e0b00182d43586d8298adc2d7edd9c4af99846f5a36251300000000000000000000000000000000000011263b51667b90a6bbd0e5dfcab59f8a75604a35200b00000005182b3b484c565656565655514a433637444b52595560616054574e493d30261b293239464c525854606160565d58524c473a32281b0d000000000000000000000000000000000000000006192b3c52677c91a7b8ccd7c6ae98836e8298adc5d5cdb9a8937d68533d2d1a000000000000000000000000000000000000000000092035485a6a7f95a5b7cae3cfbcab99846f5d4b37212035485a6c8197a9bacde0cbb8a696816c5b4a3621130000000000000000081c304354697e94a7b8cce0e2cfbfb39e89776258483c31271e161312111213151a21283239464b556061584d483b2b19090000000000000000000f24394e64798ea5b7cadfebd9c8ac97826c573d2c1a06000b20354a6073889db2c8ddd1c8c5c8d1e3cfbcab937d68533a291704000f24394e64798ea6b7cbe0dfc9b49f8a76614c36210c000000001e33485e73889db3c8dde7dacfcacfdad6c6b49f8a78624d3c2c19010000000000000000091c304354667c91a3b4c8dddddadfe3ebeed9c3ae99846e59442f19000011212f383b404040404040403e37332a1c0d00000000000c1c2933363e41414141413c3530251808000000000412202d36393f4040404040403e3a3124130200162b41566b8096abc0d5ebdbc5b09b86705443301c07000000000000000000000000000000000013283e53687d93a8bdd2e8ddc8b39d88735443301c07000000000d1d2b34374040404040403c3530252731363c37444b4c4b433639362c1c140b161e2933363d36434a4b4b4538433d3733291e160a000000000000000000000000000000000000000000000e20364b6075889eb3c8dec9b49e8976889eb3c8dec9b49e8976614b36210f000000000000000000000000000000000000000009192f3f4d62788a9fb4c3d4d9c9b59f8d7a644f3f2e1b192b3c4c62778a9fb4c6d6d5c5b49f8c79634e41301b0b00000000000000011426364b6175899eb3c1d2e4e0ccb8a79b8576625a4b4437322828272627282a2c3538454b57616a757671625948372715010000000000000005192b3c556a8095aac3d4e6e2cebbaa917c67513c27120000071c3043546c8196acc5d5e4dddadde4dfcab49f8b77624c37220d00000d21364a5c73889db3c8dde2cebbaa917c6752382715020000001e33485e73889db3c8ddf2ece3dfe3e1ccb9a896816b5948341e0e000000000000000000011426364c5e70859bb0c0d1e3f0f4f7feeed9c3ae99846e59442f19000003111c23262b2b2b2b2b2b2b29221f180c000000000000000c171f21292c2c2c2c2c27201c130800000000000002101b22242a2b2b2b2b2b2b28261e1306000013283e53687d93a8c8d9ebdec9b39e8974604a35200b0000000000000000000000000000000003162839566b8196abc0d6ebdac5b09a85705b3625130000000000000d1820222b2b2b2b2b2b27201c13151d20272731363635302623211a0f0100030b171e2128253035363632282e28211f170c030000000000000000000000000000000000000000000000091d3245566c8196abc1d1ccb9a8947f94a7b8ccd3c2ac97826d5746331e0a00000000000000000000000000000000000000021527374c5d6e8399a9bacde3cfbcab98836e5c4a3621100e203448596b8096a8b9cde1cebbaa9a84705f4d3928160300000000000000081e324657687e93a3b5c6d7e7d5c5b5a39b86786960554b46393e3c3c3c3d403d494e5660687580888c8577625544311d0f000000000000000b2035485a71869bb1c6dbf0dfcab49f8b76614c37210c00000013253650657b90a7b8cce0f1eff1efdac5b09a85705947341f0b0000071a2d3d586d8298adc9daead8c8ad98836e5645311d090000001e33485e73889db3c8ddf2fff8f4e8d5c5b49e8977614c3b2b1900000000000000000000000818304050657b90a2b4c8dcedffffffeed9c3ae99846e59442f1900000000090e1016161616161616140c0a04000000000000000000040a0c141717171716120b0700000000000000000000070d0f1516161616161613110b0200000010253a50657a8faabbcee2e0ccb9a78e79634e39240e00000000000000000000000000000000091e32465770859aafc5daecd7c2ac97826d57422d1800000000000000050b0d161616161616120b070002080b12151d2021201c140e0c060000000000030a0c13131c2021211e1618130c0a0400000000000000000000000000000000000000000000000000021528384e63798ea3b4c8d6c6b39e899eb3c5d5c9b6a48f7a644f3929170300000000000000000000000000000000000000081d314455657b90a1b2c7d7d8c8b49f8c79634e3e2d1b0305182b3b4c61778a9eb4c5d6d9c8b4a2917c675746321e0e00000000000000031629394b6073859ba8bacde1e3d2c1b5a49c897e7467615756535251525355595b636b757e88959ea39b8573604b3d2c18080000000000000d22384d62788da3b5c9def0dac5b09b85705847331f0a0000000b20354b6074889eb3c8ddf3fff8e4d2c1a9947e69543b2a180500000012283d52677d92abbccfe3dec9b39e8975604b36200b0000001e33485e73889db3c8ddf2fffff5e0ccb8a795806a5847331d0d0000000000000000000000001223384c5d6f849aafbfd0e7f7ffffeed9c3ae99846e59442f190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4cadfe8d6c5a8937e68533d2c1a060000000000000000000000000000000c21364b61768a9fb4c9dfe6d3c3a8927d68533d281300000000000000000000010101010100000000000000000002080b0c0b080100000000000000000000000000070b0c0b0903000000000000000000000000000000000000000000000000000000000000000a21364a5b70859bb0c6d6ccb8a79ea7b8ccd8c7b19c86715c4b371b0b0000000000000000000000000000000000000005182a3b4b6074869cb1bfcfe2cebbaa98826d5b4935201000000d1f3347586b8095a7b8cce0d1c0b29d8775614b3c2c1906000000000000000b1d31445563798a9fb4bbcce2dfd2c2b6a79e93867d766f6b68676667686a6e73788088939da6b3b5a3947f6a5b4936251300000000000417293a53697e93a8c1d2e5e8d6c5aa95806a553a291704000000081d3144556d8297adc6d6e8fcf2ddc9b5a38d78624d38230d000000000c22374c61778b9fb5cadfe1ccb9a8907b66503625130000001e33485e73889db3c8ddf2fffae7d4c4b39e8976614c3a2a1800000000000000000000000000081c2f3f4f647a8fa1b3c9daecffffeed9c3ae99846e59442f190000000000000000000000000000000000000000000000000000000000020001080b0c0c0c0b080100030000000000000000000000000000000000000000000000000a1e32465771869bb0c6dbeed9c4ae99846f5b49352110000000000000000000000000000009192e3e52677c92a9bacde2decab6a48d78634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d53687d92a8b9cdd6c5b8b3b8c5d6cebaa9947e69543e2e1b0000000000000000000000000000000000000000081f344759697e94a4b6caddd7c7b49f8b78624d3d2c1a02000004182a3a4c6176899eb3c5d5dfcbb7a695806b5a493520120000000000000001142637495b677d929daebbcdd7e0d3c5b8b3a49c928a85807d7c7b7c7d7f83888d959ea6b3b8c4c1b49f8b79635443301c07000000000a1f3346586f849aafc4daefe0ccb9a78f7a644f3a250f000000000114263751667b90a8b9cce1f5f0dbc6b09b86715a4835200b000000000b1f34475971869bb1c6dbe8d6c6ac97816c5443301c0700001e33485e73889db3c8ddf2fff4dfcbb7a6947f695746331c0c00000000000000000000000000001122374b5c6f8399abbccfe3f6ffeed9c3ae99846e59442f1900000000000000000000000000000000000000000000000001080b0e13171a141c20212121201d141b1815110c0a040000000000000000000000000000000000000003162939556a8095aac1d1e4dfcab59f8c78634e3e2d1a0a000000000000000000000000011527374b5c70859bb0c7d7ead9c9b29c87725b4935210c0000000000000000000000000000000000000000000000000000080e10202020202020202020110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000f21364b6176899eb4c9ded6ccc8ccd6dfc9b49f8a77614c3722100000000000000000000000000000000000000008182e3e4c6277899eb3c2d3e1cdbaa997816c5a49351f0f000000000c1f3346586a7f94a6b8cbe0d4c4b49f8b78634d402f1a0a0000000000000009192c3d4d5f6a7f949db4bac7d3e1d5ccc2b6b1a99f9a96939191919295999ea6abb3b8c5cbd5cdbaa99a8572604a35200b000000000c21364c61768b9fb4cadfecdec9b39e8974604b35200b00000000000b20364b6075899eb4c9deece5d3c2aa947f6a553c2b19060000000004182a3b566b8095abc6d7e9ddc8b29d8874604a35200b00001e33485e73889db3c8ddecece6d3c3b29d8875604b392917000000000000000000000000000000081b2e3e4e63798d9fb5c8d8eaececd9c3ae99846e59442f1900000000000000000000000000000000000000000002090b141d2024282d2f263035363736353126302e2a26211f170e0c0600000000000000000000000000000000000e23394e63798ea3b5c9dde3cfbcab97816c5c4a3828190b0000000000000000000005141d314455647a8fa3b4c8e5e3cfbcab95806b553d2c1a0600000000000000000000000000000000000000000000000003101b222535353535353535353526231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3246576d8297acc2d2e5e0dee0e6d4c3ae98836e5847331f0a000000000000000000000000000000000000011426364b5c6d8297a8b9cce0d6c6b49f8a77624d3c2b1901000000000417293a4b6175889eb3c4d4e2cdbaa999836f5e4c38271502000000000000000f1f30414f616a7f929fa9b6c2cdd6e0d3cac7bab4afaba8a7a6a7a8aaaeb3b8c4c8cbd5dcd0c6b9b49f917c67523c27120000000215273852677d92aabbced7d7d8c8ae99836e5544311d080000000000091d3245566e8398adc5d5d7d7cab6a48e79634e39230e00000000000010253b50657b90a8b9cdd7d7cbb7a68f79644f3a240f00001e33485e73889db3c8d7d7d7d7cab6a5937e685645321b0b000000000000000000000000000000001021364a5b6e8398aabbced7d7d7d7c3ae99846e59442f1900000000000000000000000000000000000000050a151d20263135393e424536434b4b4c4b4b443746433f3c37332a23211a0f090300000000000000000000000000000c2136495b70859bb0c2d3e5dac9b49f8b7a64564537291b1108010000000000060d192031404b6073859bb0c1d1e4dac9b49f8c78634d38230f0000000000000000000000000000000000000000000000000010212e373a4a4a4a4a4a4a4a4a4a3b382f2211000000000000000000000000000000000000000000000000000000000000000000000000000000031629394f647a8fa4b5c9d7d7d7d7d7cab7a5907b65503a2a1804000000000000000000000000000000000000081c304354647a8d9fb5c6d6d7ccb9a896806b5948341e0e0000000000000c1e324657697f94a6b7cbd7d7c7b3a1907c665645311d0d00000000000000011323324350616a7d8b9ca4b4b9c6ccd6dfd7cdc9c4c0bdbcbbbcbdbfc3c8cbd5dddcd0c7bfb3a89e928174604b36200b000000091d3145566e8398aec8c2c2c2c2bbaa937d68533726140100000000000215283852677c91a7b8c8c2c2c1b19c87725b4936210c0000000000000b20364b6075899eb4c4c2c2c2c4aa95806b553c2c1906001e33485e73889db3c2c2c2c2c2c0b29c8774604b3828160000000000000000000000000000000000071a2d3d4d63788b9fb4c5c2c2c2c2c2ae99846e59442f190000000000000000000000000000000000040d192028323637444b4e53575a5d546061616160555d5b5855514c473a39362c211e160b03000000000000000000000000061a2c3d52677c91a4b6cadee2cebaa99c8675605546392f201d14131211121419202b34424e5e6a8095a3b4c8dfe3cfbcab99836e5a4935200c000000000000000000000000000000000000000000000000081b2e3f4b4f606060606060606060504c402f1c090000000000000000000000000000000000000000000000000000000000000000000000000000000b22374b5c71869cb1c7c2c2c2c2c2c9b29d8774604b35200c0000000000000000000000000000000000000417293a4b6073859babbcc2c2c2c0b49e8977614c3b2b1800000000000000031629394b6075889db2bec2c2c2bfb29c8774604b3b2b1805000000000000000515253343505f687a86949ea8b3b9c6caced9d9dad5d2d1d0d1d2d4d8dad7d3cac7bfb3afa1998a7e6d605544311d080000000b20364b6074899eacacacacacacaa9f8b77624d37220d000000000000000c21364b6175899eaaacacacaba3947f6a553d2c1a06000000000000091d3145566e8398a6acacacacacac9c86715a4935200c001e33485e73889dacacacacacacaca2927d675544311a0a0000000000000000000000000000000000000f2135495b6d8297a7acacacacacacac99846e59442f19000000000000000000000000000000000c171f2b3438454b51556063686c6f727475767676757472706d6a666158554e493d3632281e170b0000000000000000000000000f20354b6073869cb1bfd0e2d8c7b6a498827361574c40353126282726272a2c353b484d60687d8c9fb4c1d1e4d6c5b59f8d7a644f3c2c19060000000000000000000000000000000000000000000000000e22374b5d65757575757575757575665e4c38230d000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3e54697e93a9acacacacacacacab957f6a5443301c080000000000000000000000000000000000000a1f334758687e93a3acacacacacaba2947f6a5847331d0d00000000000000000b1e324556687d92a0abacacacacaca5947f6a594834200b000000000000000007152533414e5c64747f8a969ea8afb4bbc8c4c7c9cdd7cddacfcac8c5c2c3b6b2aba19a90837868604b443727150200000011263b50667b9097979797979797958f7f6a594834200b00000000000000091e324657677d8b9597979796928575604b36210f00000000000000021527384d62788793979797979797978d78634d38230e001e33485e73889797979797979797938472604a3727150000000000000000000000000000000000000006192c3c4c627789959797979797979797846e59442f19000000000000000000000000000004131c2a333b484d5660666d74797d828487898a8b8c8b8a8a8885837f7b76716a635b534b463933291c130800000000000000000000081d314455667c90a1b3c4d4e5d3c2b2a0988375665e504b44373d3c3c3d3f3c494d59626d7e8d9faabbcedfe0ccb9a798826d5c4a361e0e00000000000000000000000000000000000000000000000004172a3a4f657b8a8a8a8a8a8a8a8a8a7c66503b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000001021374c61768b9797979797979797978c78624d362614010000000000000000000000000000000000000c21374c6176889797979797979796928474604b3a2a18000000000000000000021628384a6072829196979797979797978977624d37220d000000000000000000071523313d4a56606a778089939a9faaabafb1b4bac7b7b7bcb5b3b0aca8a59c958e847b6e625a4e42312719090000000011273c51667d8282828282828282807a6a61503b2b180500000000000000031628394d5f67787f828282817d74605745321e0900000000000000000a2035495a62767e81828282828282827b654f3a251000162c41566b8082828282828282817e7560544330190900000000000000000000000000000000000000000e2034485962787f81828282828282827e69533e2914000000000000000000000000000c171f313a474c59626b757c82898e93979a9c9fa9a0a1a0a99f9d9b9894918b868079716861574b463930251808000000000000000000011426374c5e6e8399a6b7c7d8e0cfbeb2a29a867b6f656055555251515254575a636b7882939fabbbc8d9ddcdbdb39e8978624d3e2e1b000000000000000000000000000000000000000000000000000a1f3347586d82989f9f9f9f9f9f9f99836e59483420080000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758697f8282828282828282827f6a5a483418080000000000000000000000000000000000000011263b50667c8282828282828282817d73605645321c0c000000000000000000000a1c304354606d7c8182828282828282827c67513c27120000000000000000000005131f2d38454b59626b767e848b9195999c9fa9a1a2a2ab9f9d9a97928d8780796f655d4d493c311d150900000000000f24394d5e666d6d6d6d6d6d6d6d6b645d5043331d0d0000000000000000000b1b30404d5a636a6c6d6d6c6860564539281603000000000000000006192c3c495761696c6d6d6d6d6d6d6d655d4b37220e0014293d51626b6d6d6d6d6d6d6d6c6960564536251300000000000000000000000000000000000000000005182b3b4859626a6c6d6d6d6d6d6d6d69604e3b26110000000000000000000000000e1c2a33414e58616b78808891989ea7a8acafb2b4bac7b6c7bab4b2b0adaaab9f9b958e867d756a61574a433625130000000000000000000009192f404c6177889da9bac9d8dccfc0b3a49c90847b746e6a68676667696c7178808a98a0b4bcc9d9ddcfbfb09f917d675948342010000000000000000000000000000000000000000000000000000c21374c61768a9fb4b5b5b5b5b5b49f8b77624c36261401000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4f61696d6d6d6d6d6d6d6d6d6a61503c2b1900000000000000000000000000000000000000000f23384c5e666d6d6d6d6d6d6d6d6c67605545382815000000000000000000000000132536434a5e666c6d6d6d6d6d6d6d6d675f4d3924100000000000000000000000010f1a28323b484c5761686f777b8084878a8b8c8d8c8b8a8885827d78726b635b504b3f352c1e13020000000000000a1d30404d515757575757575757554f4b3f33251500000000000000000000001222303c494d5557575756524b4538281b0a000000000000000000000e1e2c39464c5357575757575757574f4b3f2e1b08000e21344451565757575757575757534b4538281808000000000000000000000000000000000000000000000d1d2b3b484d555757575757575757534e42311f0b0000000000000000000002101f2c3a474c5f6876818b959ea6adb3b8c5c9bcb5b3b1b0afb0b1b2b4bac7c9bcb4b1aaa39b93897f7668605443301c0700000000000000000000121f344759657b8b9fabbbc8d6ded0c2b6b1a29a908883807d7c7b7c7f82868d959fa9b2becfd9e1cebfb2a196816c5f4d3b2b1902000000000000000000000000000000000000000000000000081c2e3f54697e94a9bacdcacacacebbaa947f6a5443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000c1c32434f54575757575757575757555043331d0d0000000000000000000000000000000000000000091c2f404c50575757575757575756524b4437281a0a00000000000000000000000008182530404d51565757575757575757514d40301d0a000000000000000000000000000a161e2b3439464b535861666b6f727576777877767573706d68635b564e493d372e20190e000000000000000000122230393c4242424242424242403a372e201507000000000000000000000004121e2c353840424242413d3631271a0a0000000000000000000000000e1b2933363e42424242424242423a372e21100000051626343d4142424242424242423e3632281a0a0000000000000000000000000000000000000000000000000d1d2b34374042424242424242423e3b312414020000000000000000000110202d3d4958616e7d89969fa9b3b8c4b8b3aca8ab9f9d9c9b9a9b9b9d9fa9a4a8adb2b6c1b5b1a79e94887d72604a35200b0000000000000000000004182a3a4b5d677d8d9faab9c6d2e1d3c9c0b3afa79e99959291919294979ca4abb4bac7cee3d6ccbdb1a1998372604b41301d0d000000000000000000000000000000000000000000000000000e23374b5d72869cb1c7d7e9dfead8c8b29d8773604b35200d000000000000000000000000000000000000000000000000000000000000000000000000000000001424323b3f4242424242424242423f3c3325150000000000000000000000000000000000000000000011222f383b4242424242424242413d353127190a000000000000000000000000000008131c30393c4142424242424242423c39302212000000000000000000000000000000020d18202933363a474c51565a5460616262626160555b57534e493d39362c231c11060000000000000000000004121d24272d2d2d2d2d2d2d2d2b25221b100200000000000000000000000000000e1920232a2d2d2d2c28201d150a00000000000000000000000000000b171e21292c2d2d2d2d2d2d2d25221b1003000000081621292c2d2d2d2d2d2d2d2c29211e160a00000000000000000000000000000000000000000000000000000d1920222a2c2d2d2d2d2d2d2d29261f1406000000000000000000000f1f2d3e4a5b637683929ea7b4babab4ada69d97928e8b88868685858687898c8f93979ca4a9b1b5b8b3a69d8a77624c37220d00000000000000000000000c1c2e3f4d5f677d8c9ea8b5c1ccd6ded0c7c5b8b3aeaaa7a6a6a7a9acb1b5c2c9cdd7dccfc6b9b49f9782746054433023120000000000000000000000000000000000000000000000000004182a3a50657a8fa4b6cae5f5fff6dfcab7a5907b66513b2b190500000000000000000000000000000000000000000000000000000000000000000000000000000006141f27292d2d2d2d2d2d2d2d2d2a282015070000000000000000000000000000000000000000000003111c23262d2d2d2d2d2d2d2d2c28201d15090000000000000000000000000000000000121d24272c2d2d2d2d2d2d2d2d27241d12040000000000000000000000000000000000050b171e212a33373c4036434a4b4c4d4d4c4b4437423d38352c23211a0f0800000000000000000000000000000a0f111818181818181818160f0d080000000000000000000000000000000000060c0e1517181817130b090200000000000000000000000000000000030a0c141718181818181818100e08000000000000050e14161818181818181817140b090300000000000000000000000000000000000000000000000000000000050b0d15171818181818181814110b02000000000000000000000d1d2d3d4a5c64798799a1b3b8bcb4a99f988f88827d79757371707070717274777a7d82878d949ba3afb3ae99846e5948341f0b000000000000000000000000112130414d5f677c899ba3b3b9c6ccd6dfd5ccc8c3bfbdbcbbbcbec1c6c9d2deddd0c7beb2a89e92817360564536261405000000000000000000000000000000000000000000000000000a1f3347586d8398adc2d3e5f1eff1e6d4c3ae99836e594834200900000000000000000000000000000000000000000000000000000000000000000000000000000000030c121418181818181818181815130d0300000000000000000000000000000000000000000000000000090f11181818181818181817120b080100000000000000000000000000000000000000090f1117181818181818181812100a000000000000000000000000000000000000000000030a0c171f21262b25303536373837363631272d2823211a0f0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3b4a5b647a899ca5b3bfb6ab9f978a827a746d686360565c5b5a5b5c5d586165686d72787e868f99a1a4917c66513b2a180500000000000000000000000003132330414d5e667885949ea8b4b9c6cacfdadad8d5d2d1d0d1d4d7dbd8d4cbc8bfb3afa0988a7d6c6055453828180800000000000000000000000000000000000000000000000000001325364c61778a9fb4c9dfe4dddadde4dfcab49f8b78624d372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1116131c202122232221201d1518130e0c06000000000000000000000000000000000000000000000000070b0b0b0b0b0a080000000000000000000000000000000000000000000000070b0f14161716130e0c060000000000000000000000000000000000000000000000000000000000000000000001080b0e11131415161514120f0c0a030000000000000000000000000000000000000000000000000000000000040a0c140b0801000000000000000000000000000000000114263748596379899ea7b6bfb3a49c8c82786d656054534e4b4538464546463a474c4f53585a6269717a848e938673604b35200d000000000000000000000000000005132330404c5a62737e89969ea8b0b5bcc9c5c8cacfdaccd6ccc9c6c3c4b7b2aba1998f8378675f4b4437281a0a0000000000000000000000000000000000000000000000000000071c304354697f94a9bacee2d1c8c5c8d1e2cebbaa957f6a5544311d080000000000000000000000000000000000000c161c1e2020202020202020202020202020202020201f1e1d1b1814100b090200000000000000000000000000000000000000000000000c161c1e2020202020202020200e0c06000000000000000000000000000000080e101a1e20202020202020201e0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0d0d0d0c0b08020000000000000000000000000000000000000000000000000000030a0c1d2020202020201d13110b01000000000000000000000000000000000308131c2024292b2c2b2923211a0f080100000000000000000000000000000000000000000000000000000000070c0e151d202326292a2b2b2a292724211e17110b08010000000000000000000000000000000000000000000000000b171f212a201d1509000000000000000000000000000000081d3144556277889da7b8bdb1a199867a6d625a504a433639363228313030312a33373a3e3c494d545d656f797e78625544311d080000000000000000000000000000000513222f3c49556069778089939a9fabacafb2b5bcb7b7c6b9b3b1ada9a69d968e847a6e625a4d413126190a0000000000000000000000000000000000000000000000000000000b20354a6073879cb2c7d8d1c0b4b0b4c0d1d9c8b29d8774604b35200e0000000000000000000000000000000000101e293033353535353535353535353535353535353535353433302d2a25211e160b090200000000000000000000000000000000000000101e2930333535353535353535352320190e00000000000000000000000003111c23252f343535353535353535342220180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e21323535353535353228251e130500000000000000000000000000000b171e2530353a3e4042403e38352c201d140900000000000000000000000000000000000000000000000003090f1a2124273135383b3e3f40403f3e3c3936332926201d1509050000000000000000000000000000000000000000000d1b2933363f353127190b0000000000000000000000000006192c3c4b6073849aa6b7beb19f978375655d4d483c3530252d28211f171b1b1c1920222a2f2c35383f4b4f5c6469625948372614010000000000000000000000000000000004121e2c37444b59626b767e858b91969a9d9faba2a2a1a89e9b98938e8881796f655d4d483c301d140900000000000000000000000000000000000000000000000000000004182a3b50657b90a4b6caddc8b4a29aa2b4c7d7cbb7a6917c66513c2b19050000000000000000000000000000000c1e2e3b45484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494845433f3a363228211e160a04000000000000000000000000000000000c1e2e3b45484a4a4a4a4a4a4a4a4a38352c1e0e000000000000000000000412212f373b45494a4a4a4a4a4a4a4a4937342b1d0d000000000000000000000000000000000000000000000003090b0f11141516151514110e0b09030000000000000000000000000000000000000000000000000000000000000000000b1b293336474a4a4a4a4a4a483d3a31231507000000000000000000000004121b293336434a4f53555755534e493d353126190f010000000000000000000000000000000000000000020a161e212d363937444b4e50535455555454514f4c46393b35312720190e050000000000000000000000000000000000000d1d2a3a464c544b4437291b0b0000000000000000000000000c2035495a6a7f95a2b4c2b2a097817261574b3f3d43454745433d37332a20191d2b35384044474746423d3e4a4f544d483b2b1909000000000000000000000000000000000000000e1927313b474c58616970777c8185888a8b8c8d8c8b8986837e79746b645c4f4b3f342b1d1301000000000000000000000000000000000000000000000000000000000b1f3447596e8398aec3d3d6c6b09a859aa9bacdd4c4ae99846f5a4835200900000000000000000000000000000016293b4c595e6060606060606060606060606060606060605f5e5d5b58544f4b45383632281f170c02000000000000000000000000000016293b4c595e6060606060606060605e493c2c190600000000000000000012222f3f4b505a5e60606060606060605e4c483b2b180500000000000000000000000000000000000000070d0f161e212427292a2b2b2a292724211e16100b07000000000000000000000000000000000000000000000000000000000003172939464b5c60606060605f5d534e42322515030000000000000000000614222f39464b546064696b6c6b68635b534b44372d1f120400000000000000000000000000000000000009151d2832363d4a4e555560636668696a6b6a696764615757514b4437352b20180d0000000000000000000000000000000005182a3b4858616960554639291a0a00000000000000000000071b2e3e4d63788b9fb4c0b5a4988272605446474c52585b5c5a58534c473a352b313c484d55595c5c5b57524c473a3e37342b1d0d00000000000000000000000000000000000000000009151d2a343a464c535962676c707375767777777674716e696460544e4a3d372e20190d0000000000000000000000000000000000000000000000000000000000001325364c61778b9fb4c9dfccb9a8907b8a9fb4c9decab49f8c78624d3727150100000000000000000000000000001c3045596a73757575757575757575757575757575757575747372706d69656056524b4538332a1d1509000000000000000000000000001c3045596a73757575757575757575705a4935200c00000000000000000d1d2f404c5d656f7375757575757575757362594834200b000000000000000000000000000000000209101b2224283236393c3e3f40403f3e3c3936322825201c13080300000000000000000000000000000000000000000000000000000a1e33465761727575757575757268604f43322111000000000000000004142432404c57616a737a7e8081807e78726860554a3d2f221202000000000000000000000000000000011119273138454b535b636a6f75787b7e7f80807f7e7c7976716c6660554d483c342b1c130800000000000000000000000000000b1f34485962767f73615746382818080000000000000000000d22364a5c6f8499a9babaa99c86756054434e5861686e70716f6d6861584d483c444b5a626a6f7172706d6861584c473a3023160800000000000000000000000000000000000000000000010d181f2933363b484c52575a55606162626160565c58544f4b4336362d231c1105000000000000000000000000000000000000000000000000000000000000071c3043546a7f94aabbcedec9b49e8974859aafc5dacfbcab95806a5544311d0800000000000000000000000000001e33485e73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898885827f7a756e6760564c473a3127190f0100000000000000000000001e33485e73888a8a8a8a8a8a8a8a8a78634d38230e0000000000000008182b3b4c5e667b84898a8a8a8a8a8a8a8a8977624c37220d0000000000000000000000000000000a151d202d363938454b4e51535455555453514e4b45393a3530251e160b000000000000000000000000000000000000000000000000000c21364b6176868a8a8a8a8a8a877d6a614f3f2f1d0d00000000000000122232424f5e667580888f93959795938d877d73635b4c402f2010000000000000000000000000000009141d2e37444b56606871797f85898d90939495959493918e8b86817b746c625a4c483b3025180d000000000000000000000000000d22374c627786948375615645362614010000000000000005192b3c4f647a8fa1b3c5b49f8b79635645516068767d83858685827d776e625a4d55606c787f84868785827d766c61584d41342616080000000000000000000000000000000000000000000000050c171f212b34373c4137444b4c4d4d4c4b4538433e39353026211a0f0800000000000000000000000000000000000000000000000000000000000000000b20354a6073879db2c8d8d8c8ae99836e8095aac4d5d9c9b29d8874604b35200e00000000000000000000000000001e33485e73889d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa99f9e9d9a98948f8a837c756a61584b44372c1f1305000000000000000000001e33485e73889d9f9f9f9f9f9f9f8d78634d38230e000000000000001325364859667c8d9a9e9fab9f9f9f9fa0917c66594834200b0000000000000000000000000005131a2832363e4a4f5656606466696a6b6a6a696663605756504a433632281c130800000000000000000000000000000000000000000000000a1e33465763798a9f9f9fab9f9d927f6a5d4c3b2b190900000000000c1c2f404f60697c88959da6a8aaacaaa8a49c938679665e4c3e2d1b0b0000000000000000000000000a1926313f4b556069757e868e959a9fa8a5a8a9aaaaa9a9a6ab9f9c97908881786d62594a43362a1d0f0100000000000000000000051a2f455a6f849aa19a8474605443301c10000000000000000b2035485a6e8399aebfb8a795806b5b4951626b7e8992989a9c9a98928b8378675f6073818c95999c9c9b97928a8177675f514434261606000000000000000000000000000000000000000000000000040a0d182022272c273135363738373632282e2924201c14080700000000000000000000000000000000000000000000000000000000000000000005182b3b50657b90a5b6cae2cebbaa927d687a8fa6b8cbdfcbb7a6917c66513c2b1906000000000000000000000000001e33485e73889db3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bab4b3b2b0ada9a99f9991888076696055493d302315070000000000000000001e33485e73889db3b5b5b5b5b5a28d78634d38230e0000000000000a1c3043546277899eabb3b5bcb5b5b6a597826d5e4d3b2b18050000000000000000000000000e19203138454b535c646b7076797c7e7f80807f7e7c7976716b6560544b46393025180d00000000000000000000000000000000000000000000031729394a5b677d929fb1bcb4b29f8d7b6559483727150200000004182a3a4c5e697e8d9ea7b3b8c4bdbbbdc2b6b1a49c8a7c665c4a39291603000000000000000000000b1a2837444b5d65747e88939ca4aaafb4bac6bdbebfc0bfbec9bcb5b1aca79e968b8277696054473b2c1f1002000000000000000000051a30455a6f849aa6a2998372604b3f2e19090000000000000d22384d62788c9fb5c9b39e8975614b4d5f6b80939ea7adb0b1afadaa9f98897d686d82979fabaeb1b1b0aca99f97887d6c625144342414000000000000000000000000000000000000000000000000000000050b0d1217151d2021222222211e1619140f0b080100000000000000000000000000000000000000000000000000000000000000000000000b203448596e8399aec3d3dfc9b49f8a766174889eb3c8ddd4c4af99846f5a48352009000000000000000000000000001e33485e73889db3c8cacacacacacacacacacacacacad8cec9c8c7c5c2c7bab4aea69e95897e74635b4d413225150600000000000000001e33485e73889db3c8cacacab8a28d78634d38230e00000000000a1b2d3e4a6072849aa7b8c9cacfcebbaa9d8775614b40301d0d000000000000000000000003111e2b35414e566068717980858a8e91939495959493918e8a86817a736a61574a43362b1d0f010000000000000000000000000000000000000000000b1b2d3d4d5f6c8197a3b5c5bcab9e8978625544311d130100000a1f344759667c8d9fabb8c0b4afa8a5a8afb3bfb6a89e8b7a645746321e0b0000000000000000000b1b28384555606a7b86949ea6b1b5c2c4c9cdd7d3d4d5d5d4d3dacfcac6c5b8b3aa9f97897f726259493d2d2010000000000000000000000d23384d6278889ea9a1957f6a5d4b372715010000000005182a3b546a7f94abbcbcab95806b574657677d929eb3b8c5c5bfb6b6bbb4a89e8d7e7b90a0b4bcbcb4b1b0b3b8b4a69e92816c625143321f0e0000000000000000000000000000000000000000000000000000000000000001080b0c0d0d0c0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000011426364c62778b9fb4cadfd5c5ae99846e586c8197acc2d3dfcab49f8c78624d372715020000000000000000000000001e33485e73889db3c8dddfdfe2d4cbc8c7c7c7c7c7c7c7c7c8c9cdd7d5d7cdc9c5b8b3a79e948579675f4f4332241405000000000000001e33485e73889db3c8dddfcdb8a28d78634d38230e00000000031628394a5c697f94a2b3c5d5dfd2c1b49f8c7b65574633221200000000000000000000000513212f3c484d5f68747e868e959b9faaa6a8a9aaaaa9a8a6aa9f9b968f877f75686054483b2d1f10020000000000000000000000000000000000000000000f1f30414b6074859ba7b8c9b8a79b8574604b41301f0f00031729394c6177899eabbcbdb1a29a9290929aa1afbcb9a99d8775614b39291703000000000000000919283946566073808c9ca4b3b8c5c9d2daddd6d1d7cdc9c9cacfd9d4dbdbd5ccc8bbb4a89e948477635b4a3e2d1e0e0000000000000000000c2035495a647a8b9fb49f8c7a645544311d09000000000b1f34485971869cb1c9b49f8b77624d4b6175899eb3bcc9bcb4a9a1a0a4abb4ab9f8c879db2beb8ab9f9b9a9ea7b4b8b39f96806c614f3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546a7f94aabbcee0ccb8a7917c6751647a8fa4b6cadecfbcab95806b5544311d080000000000000000000000001e33485e73889db3c8ddf2e7d4c4b7b3b2b2b2b2b2b2b2b2b3b4b9c6bfc7cad3d5cbc5b9b3a39b8a7d69614f42322312000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000d1e324557647a8b9fb4c0d0e3d7c7b5a395806b5d4b392917040000000000000000000005132330404c5a62707d88939ca4abb0b4bbc8bebfc0bfbfbec8bbb4b0aba59d94887e7262594a3d2d201000000000000000000000000000000000000000000001131d3145566278899eabbcc5b4a396816c5f4d3d2c1b0b0a1e3346576b8096a7b8c5b19f97847d7b7d84959eafc3b7a695806a5746331e0a000000000000011527374657617483959faab6c2cbd5ded4cbc8c1bbc7bab4b4b4bcc9bfc5c9d1dcd8cec6b9b4a29a8779645c4a3c2b1b0a000000000000000006192c3c4a5c677d91a1ab9c8673604b372715010000000d22374c62778ca4b5c5af9a8570594853687d92a7b8ccbcab9f948c8b8e969faaab9f9da5b6b8a79e8c868589949faabbb09e947f695b493521110000000000000000000002090b101414100b0801000000000000000002090b101414100b0801000000000000000002090b101414100b08010000000000000000000000000000000000000000000000000b20354b6073879db2c8d8dec8b39e8975604b5c72879cb1c9d9d9c9b39d8874604b36200e0000000000000000000000001e33485e73889db3c8ddf2dfcbb7a69d9d9d9d9d9d9d9d9d9d9ea8a5aab1b6c2cad3d6ccc1b5a99f8d7f69614f41301e0e0000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000d1d30404b6075869ca9bacedee1cdbaa99b8574604b3f2e1b0b0000000000000000000002132330414d5e657884929da6b1b6c2c5c9ced8d3d4d5d5d4d3d9cecac6c3b7b2a69e938477635b4a3e2d1e0e00000000000000000000000000000000000000000002152738485a667c8d9fb5c0c1b09f917d675b493928160c21364b6176899eb4c5b8a797816f6866686f8095a4b6c4b49e8976614c36210c0000000000000c1d31445561758499a1b4bbc8d3e0d4cac4b7b2aba6a2a99f9e9faba5aab0b5c1c7d0e0d6ccc0b3a59d897a645a493928160300000000000000000e1e2d3e4d5f6e8399aba4937e685544311d0800000012273c51677c91a6c2c7a9937e69543b596f8499aec5cab49f8d7f777679818c9fa9b4b2b6c3b39e89797170757f8c9faabbb49f8a79634e3f2f1c0800000000000000000a151d2026292925201d15090000000000000a151d2026292925201d15090000000000000a151d2026292925201d15090000000000000000000000000000000000000000000005182b3b51667b90a5b7cae6d2c2ac97816c5645556a7f94abbccfe0cbb7a6917c67513c2c190600000000000000000000001e33485e73889db3c8ddf2ddc8b39d88888888888888888888898c90959ca4b2b6c3cfdad2c7baab9f937f695f4d3c2c180800000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000008182b3b4c5e6c8197a4b6c7d8e3d0bfb49f8a796355443121100000000000000000000000102030414d5f677c899aa2b2b7c4cad3dbdfdbdacfcac8c7c8c9ccd6d4dad4cac4b8b3a29a8879645c4a3c2b19060000000000000000000000000000000000000000000a1a2b3c4c5e6b8095a2b3c4bdb49e8a79635746321e14273c51667c91a8b9c8b39e8975605350536073879cb2c7b9a8917c67513c271200000000000c1c30404b60738399a2b3bfced9dacfc3b7b2a69d96918d8b89898a8c8f949ba3afb3c0ccd5e1d0c3b7a79d8878625745321e1100000000000000000a1b2836434d62788c9fb29d8774604b35200b000001172c41566c8196abc1baa98f79644f465873889eb3c8c1ac97816c6161646b7c8b9fb4c5cac0aa95806b5b5660697c8c9fb4baa99b85705d4b38230e00000000000004121a2731363b3e3e3a353127191103000004121a2731363b3e3e3a353127191103000004121a2731363b3e3e3a35312719110300000000000000000000000000000000000000000b203448596e8399aec3d4dec9b5a48e79644f384d62788b9fb4cadfd5c4af9a846f5a4935200a00000000000000000000001e33485e73889db3c8dde3ceb9a48e7a72727272727272727374777b8087919ca4b5bcc9d8d7c9bcb59f8d7d675a4936261401000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00001325364859667c919fb1c2d3e5d5c5b3a1937e685b4937271502000000000000000000000c1c2e3e4d5f677d8c9ea7b4c0cbd4deddd2c9c6c9bcb5b3b2b3b3b9c6bec5c8d1d5cbc0b3a69d897a645a4935200b000000000000000000000000000000000000000000000e1e2f404b6072849aa6b7c8b9a89c8675614b4231202c42576c8197acc6c2ac97826d57453b44556a7f95aabfc6ad98826d58432d18000000000417293a4c5e6c8196a1b3c0d0e2d8c9bcb5a59d9287817c7875747475777a7f858e9aa2b3b8c5d4e1d4c5b8a69c8675604b402f190900000000000003162839455460686f859aafa5907b66513b26110000051a2f445a6f8499afc4b49f8a75604b4c61768ba7b8ccc8a38e79634e4b4f5e6a7f95a7b8ccbca7927c6752454b5e6b8095a6b8b4a2907b65503c2b1906000000000412222f38454b505353504b44372e2111030412222f38454b505353504b44372e2111030412222f38454b505353504b44372e211103000000000000000000000000000000000000011426374d62778b9fb4cadfd8c8b19c86715c4a36485a6f849aafc6d6dfcab59f8c78634d38271502000000000000000000001e33485e73889db3c8dde3ceb9a48e79645d5d5d5d5d5d5d5e5961656a727c87949fabbbc8d8dacfbcab9e8a78635443301c0a000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000a1c3043546277899eb3bdcee0e0ccb8a799836f604e3d2c19090000000000000000000004172a3a4b5c677d8d9faab8c5d1dfe3d1c9c1b5b0a9ab9f9e9d9d9ea8a4a9b0b4c0c7d0d0c4b7a79d8878624d38230d0000000000000000000000000000000000000000000000121c3043546177879daabbc6b6a498826d604e3e2d2f455a6f849aafc4bda8937e685339283750667b90a5bbc6b09b86715b46311c000000000a1f334658667c919fb1bfd0ded8c7baab9f95877d736c666360555f5962656a707984909ea7b6c3d4e2d5c4b6a497816d5e4c372715010000000000091e32455760737d84899eb3ad98826d583a2a180400021628385c72879cb1c7b19c877255444d62788da2c5cebbaa8b76604b36404b6075889eb3c8bca7927c67523d404b6075889eb3c0ae99836e5a4935200b0000000012222f404c56606569696560554b3f2e211112222f404c56606569696560554b3f2e211112222f404c56606569696560554b3f2e2111000000000000000000000000000000000000081d3144556a7f95aabbcee2cebbaa947f69543e2d3c52677d92a8b9cce1cfbcab95806b5645311d09000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f4848484848483a474c50555e66747f8d9faabbcee2dac9b9a89b8573604b382816030000001e33485e73889db3c8dde2cdb8a28d78634d38230e0a1b2d3e4a6072849aa7b8ccdbe1cebdb39e8977624c42311f0f00000000000000000000000a1f334758647a8b9fabbbc8d5e3d9cfc1b5b0a39b948e8b888888898b8f949aa2afb3bfcec9bbaa9f8a7a654f3a25100000000000000000000000000000000000000000000000011426364759647a8b9fb4bec2b2a0937e685c4a3a2a475c71869cb1c6bca6917c67513c27394e64798ea3b9c7b29d88725d48331d00000005192b3c4c6176889eb3bdcedddac9baa99f8d7f74676054514d4b443b484c50555c646f7c899da5b6c4d4e2d3c2b19f907b665544311d080000000004172a3a4b60758492999ea7b8b29d88725947341f0a00091e324556748a9fb4c4af99846f5a374d62788da2c5c9b49f8a745846333245576c8197acc7bea9947e69543f3245566a7f95aac3b49f8b78624d38230d0000000a1a2f404c5e66747b7e7e7a74655d4b3f2e191a2f404c5e66747b7e7e7a74655d4b3f2e191a2f404c5e66747b7e7e7a74655d4b3f2e190900000000000000000000000000000000000b20354b6074879db2c8d9dfcab49f8b77624c3722364b6075899eb4c9dedac9b39e8875604b36200e000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f3933333333332a34373b404d55606a7d8c9fb4becfe2d6c6b5a3927d685645321e090000001e33485e73889db3c8dde2cdb8a28d78634d38230e1628394a5c697f94a2b3c5d5e6d3c3b19f917c6659483424140100000000000000000000081c2e3f4c6176889da9bac9d9e6d9c9bcb4a39b8f867f797673727374767a7f858f99a1b4babcab9f8c7c665d4b37220e00000000000000000000000000000000000000000000000008182a3a4b5c697e93a0b2c2beb49f8b7a64584736485d72879db2c7bba6907b66513b26384e63788da3b8c9b49e89745f49341f0000000b2034485a6c8196a6b8cbdbe3cfbcab9f8b7d6a60564a43363836312a34373a3e4a4e5e6679879da6b7c9dae0cebdb19c8674604b362513000000000a1f3347586c8196a2afb3b8c5b7a58c77614c37220c000b21364b60768ba9bac2ad98826d58434c61768ba7b8ccbbaa8b76614c36283950667b90a9bac2ad98826d583b2b384e63788da5b6bcab947e69543f29140000021628384c5e667c879093938f877b655d4b372628384c5e667c879093938f877b655d4b372628384c5e667c879093938f877b655d4b3726140100000000000000000000000000000005192b3c51667c91a6b7cbe6d5c5ae99846f5948341f3245576d8297acc3d3e0cbb8a6917c67523c2c19060000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39241d1d1d1d181f22253037444b5f677d92a0b2c4d5e4d1c1b39d8875604b3621100000001e33485e73889db3c8dde2cdb8a28d78634d38230e1e324557647a8b9fb4c0d0e3d9c8b6a597826d5e4c3b2a180600000000000000000000000e23374b5d6d8298a6b7c7d7e7d9c8bbab9f94857b71696460565d5e56606569707a84939fa9b29f8d7d675e4c3f2e1b08000000000000000000000000000000000000000000000000000c1c2e3e4f606e8298a4b6c6baa99d8776615443465c71869bb1c6bca6917c67513c27394f64798ea4b9c7b29d88725d48331d0000031628384d62788b9fb4c5d5e5d3c2b59f8d7c675f4b4538302523201d181f22252d36404c5b6377889dabbccfe3decab6a4927d685443301c070000000c21374c61778b9fb4c0c8ccd4c3a38e79634e39240e000c21374c61768ca1c7c1ac97816c5742465873899eb3c8c8a38e79644e3924364b60768a9fb4c7b19c877259483435495b72879db2c9ae99846f593a29170400091e324556667c8d9da5a8a8a59c8c7b65554431324556667c8d9da5a8a8a59c8c7b65554431324556667c8d9da5a8a8a59c8c7b655544311d080000000000000000000000000000000b2035485a6f8499aec4d4e0ccb8a7917c67513b2a1828394f657a8fa5b6cadfd5c4af9a846f5b4935210a0000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f080800040a0c12192731414d5f6d8298a6b7cbe0e0cbb8a6937e68533e2e1b0700001e33485e73889db3c8dde2cdb8a28d78634d38231d30404b6075869ca9bacedee2cebbaa9c8775614b40301d0d0000000000000000000000091c2f4050657b90a0b2c4d4e5e2cebbaa9f8d7f73655d544f4b453838454b4f545c646f7e8b9b9d937e685f4d402f2110000000000000000000000000000000000000000000000000000000102032424b6175869ca8b9c7b7a5998372604a3f5a6f849aafc4bea9937e695439293751667b91a6bbc6b09b86715b46311c0000091e3245566b8096aabbcee3decab6a496816c5e4d4131271c130e0b08050b0d101a212f3d4959657b8d9fb5c8d8e5d3c2b19c8673604a35200b00000011263b51667b90aabbcedde0d4c3a48f79644f3a240f000d22374d62778ca2b7c0ab96816b56413a5a6f859aafc4bea9947f69543f2e32455770859ab0c5b6a48c77624c372c3d596e8398aec3b39e88735847331f0a000b21364b6074889dabb7c3c3b6aa9c8773604b35364b6075889dabb7c3c3b6aa9c8773604b35364b6075889dabb7c3c3b6aa9c8773604b35200b0000000000000000000000000000011527374d62788c9fb4cadfdec8b39e8975604b36200d23374b5d72879cb2c9dadfcab59f8c78634d3828150200000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000009151d30414c6176889db3c7d7e7d5c4b19c87725c4a36220d00001e33485e73889db3c8dde2cdb8a28d78634d38232b3b4c5e6c8197a4b6c7d8e4d2c1b49f8c7a6457463222120000000000000000000000000f23384c5e70859bb0becfe2e3d0bfb49f8c7d6a60544b3f393632282832363a3e4b4f60687a85887e68604e413022120300000000000000000000000000000000000000000000000000000002141e33465763798a9eb4bdc3b3a1957f6a5d4c566c8196abc6c2ad97826d57463a44556b8095aac0c8ad98836d58432e1800000b21364b6075899eb3c8d8e7d5c4b19c8674604b40301d150a000000000000000007121f2c3b4c5e6c8196aabbcee2decab6a4907b655037271502000012283d52677d92a7c4d4e3dfcab7a58d77624d38220d000c21374c61768cabbcc1ac97816c57423f556a7f94aac0c5b09b85705d4b382839556a7f95aac6c2a7927d67523d2a40556a7f95aabfb8a68c76614c37210c0011263b51667b90a6b7c9d4d3c8b6a58f7a65503a3b51667b90a6b7c9d4d3c8b6a58f7a65503a3b51667b90a6b7c9d4d3c8b6a58f7a65503a25100000000000000000000000000000081d3144556b8095abbccfe3d2c2ac96816c5645311d091c2e3f556a7f95abbccfe3cfbcab96806b5645321d0900000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000001131f3346586a7f95a9bacde2decab6a48f7a644f3a240f00001e33485e73889db3c8dde2cdb8a28d78634d3825364859667c919fb1c2d3e5d7c6b5a395806a5c4b39291604000000000000000000000005182a3b50667b90a3b5c9dce8d6c5b3a1937e695f4b43362e24211e16161e21252e37424e5c64707268604e42312313040000000000000000000000000000000000000000000000000000000000031729394a5b677d929fb1c1bfb49f8d7b655951667b91a8b9c8b39e8976615250526074879db2c7bbaa927d68523d2813000012273c51677c91a8b9cce6e0cbb8a6927d6856453222130200000000000000000000000e1d2f404d62778b9fb4c9dfe5d3c2ad97826d5544311d08000010253b50657b90a6b7c8cfccc0b29d87725a4834200b000b20354b60758a9fb5c3ad98836e5843394e63798ea2b4c8b5a3907b655645313a4f657a8fa8b9c2ac97826d573c2c3e53687d93a8bdc5a38e79634e39240e0014293f54697e94a9c4d4e7e6d3c3a8937d68533e3f54697e94a9c4d4e7e6d3c3a8937d68533e3f54697e94a9c4d4e7e6d3c3a8937d68533e281300000000000000000000000000000b20354b6074889db2c9d9dec9b5a48e79644f382715021123384d62788c9fb5cadfdac9b39e8875604b36200f00000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000417293a4c61778a9fb4c9dfe5d3c2ab96816b563a291704001e33485e73889db3c8dde2cdb8a28d78634d383043546277899eb3bdcee0e1cdbaa89b8573604b3e2e1b0b0000000000000000000000000b1f3448596e8399aec1d1e4e0ccb8a799836e604f41302618110b090203090b101b22313e4b4f5b5d534e4231241405000000000000000000000000000000000000000000000000000000000000000b1b2d3d4d5f6c8197a3b5c5bcab9e887862556176899eb4c5b8a797816f6765676f8095a5b6c7b49f8b77624c37220d00061a2c3d586e8398adc6d6e8ddc8b39e8875604b382815040000000000000000000000000011203448596d8298adc5d5e8dec9b39e8975604b36200b00000b20364b6075889daab5bcb9b3a2947f6a553c2b190500081c30435474899eb3c4af9a846f5a3a35495b70859aafbfc1b19b8574604b44364b6075899eb4c7b29d87725a49353c52677c91a7bcbaa48f7a654f3a25100014293e53697e93a8c1d1e1e1d0bfa7927d68523d3e53697e93a8c1d1e1e1d0bfa7927d68523d3e53697e93a8c1d1e1e1d0bfa7927d68523d28130000000000000000000000000006192b3c51667c91a6b7cbe7d8c8b19c86715c4a361a0a000b2035485a70859aafc6d6e0ccb8a7927c67523d2c1a06000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000c1f3447596d8398adc2d8eddbc6b19c86715846331f0a001e33485e73889db3c8dde2cdb8a28d78634d383f4a6072849aa7b8ccdbe3d0bfb49f8a79635544312010000000000000000000000000000d22374c62778b9fb4cadfead7c7b39e8977614c42321c140800000000000000000814202e373a46483e3a312414060000000000000000000000000000000000000000000000000000000000000000000f1f30414b6074859ba7b8c9b8a69b857460576b8096a7b9c5b19f97847c7a7c83959eb0c3baa997826d594834200b000c2135495b73889eb3c8ddebd9c9ab95806b5645321a0a000000000000000000000000000005182b3b4f657a8fa7b8cce0e0ccb9a78f7a644f3a250f0000091d324556667c8c9a9faba79e968474604b36200d0000011426365c71869cb1c6b29d88735847333d51667b90a1b3c5b5a396816c624e4944556f8499afc4b7a58d78624d383c51667b91a6bbbaa58f7a65503a2510000f243a4f647a8fa3b4c4cdcdc3b3a18d78634e383a4f647a8fa3b4c4cdcdc3b3a18d78634e383a4f647a8fa3b4c4cdcdc3b3a18d79634e38230e000000000000000000000000000b2035495a6f8499afc4d4e2cebbaa947f69543e2d1b000006192b3c52687d92a8b9cde1d5c5af9a85705b4935210a000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000004182a3a52677c92a7c5d6e8dfcab49f8b76614c36210c001e33485e73889db3c8dde2cdb8a28d78634d474c5d697f94a2b4c5d5e7d5c5b3a1937e685b49372715020000000000000000000000000013253653687d93aabbcee2e2cdbaa995806b5847332414010000000000000000000002101b2224303328261e13060000000000000000000000000000000000000000000000000000000000000000000001131d3145566278899eabbcc5b4a396816c5f6277899eabbcbdb1a199928f9199a1b0bcbcb49f8a78634d3b2b1805000e23384e63788da6b8cbe0e3cfbcab907b6650382815000000000000000000000000000000000d20354b6074889eb3c8dee8d6c5a9947e69543f29140000021528384c5e667a848b8e8d898075605645311d09000000182d42586d8297adc2b7a68c77614c37384c5e6f8399a7b8c1b09f968070635b5354697f94a9c7c3a8927d68533d3c52677c91a7bcb9a38e79644e39240f000d22374b5c70859ba6b4bab9b4a599846f5b4935374b5c70859ba6b4bab9b4a599846f5b4935374b5c70859ba6b4bab9b4a599846f5b4935210c000000000000000000000000021527374d62788c9fb5cadfdfcab49f8b77624c3722100000000e21364b6176899eb4c9dedcc8b4a28d79634e382816020000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000000000d22384d62778da7b8cce0e3cfbcab907b65503b2510001e33485e73889db3c8dde2cdb8a28d78635e5861687b8b9fb4c0d0e3e0cbb8a699836f604e3d2c190900000000000000000000000000071c3043546f8499aec8d9ebdfc9b49f8a77624c3a2a180600000000000000000000000000070d0f1b1d13110b0200000000000000000000000000000000000000000000000000000000000000000000030a0c152738485a667c8d9fb5c0c1b09f917d675b667c8d9fabb9bfb3afa7a5a7aeb3bfb9b49e927d685a49351d0d000012273c52677c91a7c5d5e7dfcab49f8b76614c36210c00000000000000000000000000000000081c3043546f8499aec4d9edd8c2ad98836d58432e180300000a1a2f404c5c6470767978756b6057453827150200000014293e53697e93a8c3c4a6907b6651362f404d6278899eaabbbdb09e9684796f686664798ea9bac2ad98836d583d3e53687d93a8bdc3a28d77624d38220d00071b2e3e4d627888979fa9a89e978777624c3d2c2e3e4d627888979fa9a89e978777624c3d2c2e3e4d627888979fa9a89e978777624c3d2c1a06000000000000000000000000081d3144556b8095abbccfe3d5c5ae99846f5947341f0b000000091e3246576d8297adc3d4e3d1c0ab96816b5645321e090000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000000000b2035485a73899eb3c8deebd9c9a8937e68533e2813001e33485e73889db3c8dde2cdb8a28d78737374777e899ea9bacededfcebdb39e8877624c42311f0e00000000000000000000000000000b20354a6074899eb3c8deedd8c2ad98826d5948341c0c000000000000000000000000000000000006080000000000000000000000000000000000000000000000000000000000000000000002090b13171e2123222b3c4c5e6b8095a2b3c4bdb49e8a79635e697f8d9ea7b3b9c5bcbabcc6b9b4a89e92806a5f4e3c2c19000000152a3f556a7f94aabfd4e9dcc6b19c86715846331f0a0000000000000000000000000000000001142636556b8095aac0d5eadbc5b09b86705b46311b0000000011222f3e4a4f5861646360554b4539281a0a000000000f24394f64798ea5b7c1ac97826c54433035485a657b8c9faab9bcb0a29a8c847e7b797c8b9fb4c8b39d88735b4a40556b8095aac0b7a58b76614b36210c0000102035495a6277828a8e8e898176625948341f2035495a6277828a8e8e898176625948341f2035495a6277828a8e8e898176625948341f0f000000000000000000000000000b20364b6074889db3c9dae0ccb8a7917c67513b2a18050000000316283950657b90a5b7cadfdec8b39e8975604b36210f0000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000005192b3c5c71869bb1c6dbead5c0ab95806b56402b16001e33485e73889db3c8ddf2dec8b39e898989898c939ea7b9c7d8e0d1c1b19f917c6659473424140000000000000000000000000000000e23384d63788da7b8cce0e7d4c4a6917c67513b2a1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d202829333638373631404b6072849aa6b7c8b9a89c86756161697c89969ea7a9abadaba9a89e968a7d6a625041311e0e000000182d42576d8297acc2d7ecd9c4af9a846f5a3a291704000000000000000000000000000000000013283d53687d92a8bdd2e7ddc8b39e88735e382715020000000311202e363a474c4e4e4b443732281b0a00000000000b20354a6073879db2c7b39d8874604b352b3c4b5d677d8c9ea8b4c0b4aa9f9993908f909fa9bacbb8a68e79634e3c586e8398adc3b29d88725746331e0a000006192c3c4959626d767978756c6158483b2b18192c3c4959626d767978756c6158483b2b18192c3c4959626d767978756c6158483b2b180100000000000000000000000006192c3c51677c91a6b8cbe7dec8b39e8875604b36200d00000000000b20354a6073879db2c9dae0ccb8a7927d67523d2d1a0700000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000001a2f445a6f8499afc4d9ecd6c1ac97816c57422c17001e33485e73889db3c8ddf2e0ccb8a79e9e9e9fa9a8b3b9c5d6d5ccc0b4a397816c5e4c3b2a180600000000000000000000000000000011273c51667c91a6c5d6e8dfcbb7a68c77614c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001131a2832363d39464c4d4d4b443743546177879daabbc6b5a498826d605f6776818990949698969490898177685f504433231300000000192e44596e8399aec3d8edd8c3ad98836e58432e1900000000000000000000000000000000000011263b51667b90a6bbd0e5dfcab49f8a755645311d090000000002101b222a333739383631271e160a000000000000071c3043546b8196abc0b8a6917c66513f2f2f3f4d5f677c899aa2b1b5bbb4afa8a5a4a5b4bac7cec4a8937e6953495b72889db2c3ae98836e59392917030000000e1e2c3b484c5760636360564c473a2b1d0d0e1e2c3b484c5760636360564c473a2b1d0d0e1e2c3b484c5760636360564c473a2b1d0d000000000000000000000000000c2035495a6f849aafc4d5e5d2c2ac96816c5645311d090000000000071c3043546a8095abbccfe3d5c5b09a85705b4a36210a00000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000004192e43596e8398aec3d8edd7c2ad98826d58432d18001e33485e73889db3c8ddf2e8d6c5b8b3b3b3b4bac7c9ccd6d5c5b8b3a29b8574604b402f1d0d0000000000000000000000000000000014293f54697e94a9bed3e9ddc8b29d88735947341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d3038454b5359576163626055564e4959647a8b9fb4bec2b2a0937e685c58616b747a7f8182817f7a756c62594e4133251505000000001a2f445a6f8499afc4d9ecd6c1ac97816c57422c1702000000000000000000000000000000000010253a50657a8fa5bacfe4e2cebbaa8b75604b36200b000000000000070c171f212423201d15090300000000000000001325364f64798ea2b4c4b09b85705d4c382830414d5e667884919ba3abb1b5bcc9b9bbbebdc7bab4ae99836e544d63788da5b7c1a9947f69543f2a1400000000000e1d2a3439454b4e4e4b4538332a1c0d00000e1d2a3439454b4e4e4b4538332a1c0d00000e1d2a3439454b4e4e4b4538332a1c0d00000000000000000000000000021527384d63788c9fb5cadfdec9b5a48e79644f382715020000000000001325364d62788c9fb5cadfddc8b4a28e79634e38281603000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000003182e43586d8398adc2d8edd8c3ad98836e58432e19001e33485e73889db3c8ddf2f3e3d6ccc8c8c8c9cdd7dee0e0ccb8a79e9384766156453222120000000000000000000000000000000000172c41566c8196abc1d6ebdac5b09a85705b3b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192631414d5660686e7476787775716b635b4c5c697e93a0b2c2beb49f8b7a64584c5560656a6c6d6c6a6560554c473b3123150700000000001a30455a6f859aafc4daebd6c0ab96816b56412c160100000000000000000000000000000000000f253a4f647a8fa4b9cfe4e9d7c7a08b76614b36210c0000000000000000040a0c0f0e0b0802000000000000000000000822364a5c70859bb0c1b4a3907b655645321e30404c5a62707c868f969c9faba7a8a9a9a8a6a99f9a94887360556a7f94aac3b5a38e79634e39230e0000000000000d181f28323639393632281f170c000000000d181f28323639393632281f170c000000000d181f28323639393632281f170c0000000000000000000000000000091d3145566b8096abbccfe3d8c8b19c86715c4a361a0a00000000000000082035495a70859ab0c6d7e4d1c0ab96816c5645321e09000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000004192e44596e8399aec3d8ecd7c2ad97826d58422d18001e33485e73889db3c8ddf2ecdbcec5c2c0c1c4c9cdd7e5ddc8b39e887e73615847382816040000000000000000000000000000000000182d42586d8297adc2d7ecd8c3ad98836e58432e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b5f67747d83898b8d8c8b8680796d6159606e8298a4b6c6baa99d87766154444b505456585654504b4437342a1d13050000000000001a2f44596f8499aec4d9ecd7c2ac97826d57422d1802000000000000000000000000000000000010253b50657a90a5bacfe5e1cdbaa98a75604b35200b0000000000000000000000000000000000000000000000000000071b2d3e50667b90a3b5c1b29c8674604b4030222f3c484d5e66717a81878b8f9193949392918e8a857f7762546074879db2c4b09b86715b4a36210c00000000000000050a161e212423201d150a04000000000000050a161e212423201d150a04000000000000050a161e212423201d150a040000000000000000000000000000000b20364b6075889eb3c9dae2cebbaa947e69543e2d1b000000000000000006192c3c53687d92a8bacde1dec9b39e8975604b36210f000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000021527385a6f859aafc4daebd6c1ac96816c57412c17001e33485e73889db3c8ddf2e1cebdb1acabacafb4bac7d2dfcab49f8b8073605443301c12010000000000000000000000000000000000192e43586e8398adc3d8ecd7c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1d314455606c7d8792999ea8a2ab9f9c958b8277645c6175869ca8b9c7b7a5998372604a3f3b3f4143413f3b3631271f180d0000000000000000192e43586e8398adc3d8edd8c3ae99836e59442e1900000000000000000000000000000000000011273c51667c91a6bbd1e6dec9b49f89745544311d080000000000000002090b101414100b0801000000000000000000001023384c5e70859babbcb6a495806b5f4d3e2e212b35404c515c646b72767a7c7d7e7e7d7c79767069625957687d92a5b7b8a6937e69533d2d1a0700000000000000000003090b0e0e0b09020000000000000000000003090b0e0e0b09020000000000000000000003090b0e0e0b090200000000000000000000000000000000061a2c3d52677c91a6b8cbe7dfcab49f8b77614c3722100000000000000000000e21364b61768a9fb4c9dee0ccb9a7927d68523d2d1a070000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000091d31455672879cb1c7dce9d4bfaa947f6a553f2a15001e33485e73889db3c8ddf2d9c5b19f979696999fa9b5c1d2cebbaa9f958272604b41301f0f0000000000000000000000000000000000192e43596e8398aec3d8ecd7c2ac97826d57422d180200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b31424b607381929da5aeb3b9c6bcb5b1aa9f97877a645b63798a9eb4bdc3b3a1947f6a5d4c3b2b2c2d2c2a25201d150905000000000000000000172c41566c8196abc1d6ebdac5af9a85705a3c2c1906000000000000000000000000000000000014293e53697e93a8bed3e8dcc7b29d87725d372614010000000000000a151d2026292925201d1509000000000000000000091c2f404f647a8c9fb4c2b59f8d7c675c4b3f311f2030383e4a4f56576165676869696866636056544c4c6176889db3c2b39e8876614b36210f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b70859aafc5d5e7d5c5ae99846e5947341f0b0000000000000000000a1e3346576d8298adc3d4e6d6c5b09b85705b4a36210b0000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000000000b20364b60758a9fb4c9dfe8d6c6a7917d67523c2712001e33485e73889db3c8ddecd7c2ac97818181848a9ba3b5c4d4c8bbb4a096806b5f4d3d2c1b0b00000000000000000000000000000000182d42586d8297adc2d7ecd8c3ae98836e59432e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4e606d81969fb2b7c3b7b2afafb4b9bbb4a59d8a79635b677d929fb1c1bfb49f8d7b6559483727151715100b0802000000000000000000000014293e54697e93a9c9daecddc8b39d88735a4935200c000000000000000000000000000000000417293a576c8197acc1d6ecdac4af9a856f5a45301a000000000004121a2731363b3e3e3a35312719110300000000000000001122374b5c6b8196a4b6bcab9f8a7a655d4e41332a1e242d363a39464b4f5253545453514e4b45434a616e8298a6b7b6a4937e695746331e0a000000000000000000000000000000000002080b101214161514120f0c0a0300000000000000000000000003090a0b0b0b0b0b0b0b0a000000000000000000000000000000021528384e63788da2b4c8e3e0ccb8a7917c66513b2a18040000000000000000000317293950657b90a5b7cbdfddc8b4a38e79634e3928160300001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000000000f24394f64798eaabbcee2e1ccb9a88e79644e39240f001e33485e73889db3c8dde2cdb8a28d786b6c6f78859ba6b7c8d8cebeb09e917d675b4939291603000000000000000000000000000000172c41576c8196acc1d6ebdac4af9a856f5a37261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334658687e929fb1bdbbb4a59d999a9ea8b1bdb7a89d8776615f6c8197a3b5c5bcab9e8877625544311d120100000000000000000000000000000011263b50667b90abbccfe3e0cbb8a68d78634d38230e000000000000000000000000000000000a1f33465870859bb0c5daecd6c1ac97816c57422c17020000000412222f38454b505353504b44372e21110300000000000000081b2e3e4b6075869ca7b9baa89e8a7b685f4c473a33292022242933363a3c3e3f3e3d3c393b4754606a7f94a0b2baa99c8673604b39291703000000000000000000000000000002080b151d202528292b2a292725211e17110b08010000000000060c0e191e202020202020202020110f09000000000000000000000000091d3245566b8196abc0d1e3ddc8b39e8874604b36200c00000000000000000000000b20354b6074879db2c7dde4d1c1ac97816c5746321e0900001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000000081b2e3f546a7f94a9c8d8eadec9b49e8975604b35200b001e33485e73889db3c8dde2cdb8a28d7863575a6277889daabbcee2cdbcb49e8a79635746321e14020000000000000000000000000000162b40556b8095aac0d5eadbc6b19b86715544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c6176899eb3bdbbaa9f9287848589979fb1c0b7a597816c5b6074859ba7b8c9b8a69b8474604b41301f0f0000000000000000000000000000000c21374c61768b9fb5cadfe7d5c4a7927d68523c2b19050000000000000000000000000000000c21364c61768a9fb4cadfe5d2c2a7927d67523d28120000000012222f404c56606569696560554b3f2e21110000000000000000101e3245566379899eaabbb9a89e8b7d6e61584b463935302529272626272926313538454b59627280949dafbdb49f8b7a645544311b0b000000000000000000000000000109151d202731363a3d3f40403f3d3a36332926201d15090500000e1921232e3335353535353535353527241d1204000000000000000000000b20364b6075889eb3c8d7d7d1c1ab96816c5544311d080000000000000000000000081c3043546b8095aac0d0d7d7c9b39e8975614b36211000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000b22374b5d71869bb0c6dbead8c8af9a846f5544311d08001e33485e73889db3c8dde2cdb8a28d78634d4859657b8c9fb4c0d0e1ccb9a89c8675614b42322010000000000000000000000000000013283d52687d92a7c9d9ebdec9b49e8975604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c556a7f95a7b9c8b49f8c7d726f70768197a2b4c3b49f8b7863566278899eabbcc5b4a296816c5f4d3d2c1b0a00000000000000000000000000000a1f33475871869cb1c6dceed8c3ae99836e5a4835200f00000000000000000000000000000a1a2e3f52687d92aabbcee2dec9b5a48d78624d38230d0000000a1a2f404c5e66747b7e7e7a74655d4b3f2e19090000000000000003162838495b657b8c9faabab9a99f9283766a6157504a43363e3d3b3b3c3e37444b4f5660697783959eafbbb19f937e695c4a3727150000000000000000000000000009141d27313637444b4f5254555554524f4c46393b3531271f180d101e2c353843494a4a4a4a4a4a4a4a4a3c39302212000000000000000000061a2c3d52677d92a7b8c2c2c2c5b4a38e79644e372715020000000000000000000000011426364d63788da2b4c4c2c2c2b9a8927d68533e2d1b07001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000b1b2e3f4f647a8fa3b5c9dde2cebbaa937e685337261401001e33485e73889db3c8dde2cdb8a28d78634d3a4b5d6a7f95a2b3c4d5d6c6b6a498826e604f3f2e1d0d000000000000000000000000000f24394f64798eabbccfe3e1ccb9a88e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035495a72879cb2c5bbaa95806a5f5a576172849ab0c9bbaa95806b565a667c8d9fb5c0c0b09e917d675b4939281603000000000000000000000000000417293a566b8096abc2d2e5dfcab49f8b78624d3d2c1a0a000000000000000000000000021527384b5d71869bb1c8d8ead8c8b19c86715a4835200b0000021628384c5e667c879093938f877b655d4b37261401000000000000000a1a2c3d4b5d677d8c9fa9b8bab4a098897f766c65605456535250515153565560656c757f8999a1afbcb09f97816c604f3e2d19090000000000000000000000000e19263137444b5255606567696b6a696764615757504b4437342a1f202e3c494d585e5f606060606060605f514d40301d0900000000000000000c2136495b70859aacacacacacaca79b85705c4a36190900000000000000000000000000082135495b6f849aa6acacacacacac9b85705c4a36220d001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000c1a293a4b5d6e8398adc1d2e4dfcab49f8b77614c37220c00001e33485e73889db3c8dde2cdb8a28d78634d383f4b6072849aa6b7c9d9d3c2b2a0937e695d4b3b2a19090000000000000000000000000b21364b60768b9fb4cadfe8d6c6a8937e69533c2c190600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da5b6cab49f8b77614c414654667c91abbcc8b19c8671584c5e6b8095a2b3c4bdb49e8a79635745321e1402000000000000000000000000000f24394f64798ea4b5c9dee2cebbaa96806b5b493827190a0000000000000000000005141d314556657b8fa3b5c9e6e2cebbaa947f6a553c2b19060000091e324556667c8d9da5a8a8a59c8c7b655544311d0800000000000000000f1f2f3f4d5f677c8b9ea7b3bfb2a79e9589827a746f6b6867666667696b6f747a8189949ea7b3b9b49e968172604a42322010000000000000000000000003111e2c37444b5560676f757a7d7e807f7e7c7a76726c6660554c473b332e3f4b5b636e73757575757575757575665e4d39240f00000000000000000e23394e63788e97979797979797948979634e3e2d1b000000000000000000000000000006192c3c4d63788894979797979797978e79644e39240f001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000108121c29384658657b8c9fb4cadfe6d0bfae98836e5947341f0a00001e33485e73889db3c8dde2cdb8a28d78634d383043546177889dabbccfe3cfbeb49f8b7b645947372614010000000000000000000000091e32455671869bb1c6dbeed9c4ae99846f5a4935200f00000000000000000000000000000000040a060000000000000000000000000000000000000000000000000012273d52677c92a7c3c6b19b8671594734364b61768b9fb4cab5a48c77614c4b6072849aa6b7c8b9a89c8675604b42312010000000000000000000000000000d22364a5c71869cb1c3d4e6d9c8b49f8a7963564537281b1108010000000000060e192032414b6074859bb1c2d2e5d9c9b49f8b78624d38220e0000000b21364b6074889dabb7c3c3b6aa9c8773604b35200b000000000000000001112130414d5e667b8999a1b3b9b9b3a79e978f8985807e7c7b7b7c7e8184898f969ea7b3b8b3a89e91807260544330241402000000000000000000000211212f3c49556069747d84898f9294959594928f8b87817b746b62594c463e4b5d647983888a8a8a8a8a8a8a8a8c7c66513c2711000000000000000011263b51667c82828282828282817f77635b4a3620100000000000000000000000000000000e2035495a63767e81828282828282827c66513c2711001e33485e73889db3c8dde3ceb9a48e79644f3924101010101112141c202f3a46566176879dabbccfe3d8c8b3a18f7a644f3a2a180400001e33485e73889db3c8dde2cdb8a28d78634d3826364759657b8d9fb4c0d0e2cebbaa9d8877625544311d12000000000000000000000003162838556a8095aac2d3e5dfcab59f8c78634d3d2c1909000000000000000000000000060c0e1a1f1b0d0b050000000000000000000000000000000000000000000014293e54697e93a9bec3ae99836e593a2a32465773889db2c8c2a38e79634e43546177879daabbc6b5a498826d604e3e2d1c0c000000000000000000000000071b2d3e52687d92a5b7cadfe1cdbaa99b8574605545392f201c1413121112141a212b35434f5f6b8096a3b5c9e0e3cfbcab98826d5a4835200b00000011263b51667b90a6b7c9d4d3c8b6a58f7a65503a251000000000000000000003132330404c5d647783939ea8b4b9b9b3aca79e9a95939290909193969a9ea7abb3b8b6b1a1998a7d6b60544336251306000000000000000000000010202f3f4b5a63737e8792999ea8a7a9aaaaa9a7ab9f9c96908880776b61584d5c647b89989e9fab9f9f9fab9f8d7d675e4d39240f00000000000000000f24384c5e666d6d6d6d6d6d6d6c6961594a3d2d1a0200000000000000000000000000000006192c3c495861696c6d6d6d6d6d6d6d665e4c39240f001e33485e73889db3c8dde3ceb9a48e79644f3926262626262627263035404c5861748399a5b7c9d9e2cebbaa9a846f5c4b371c0c0000001e33485e73889db3c8dde2cdb8a28d78634d38232a3b4b5d6a7f95a2b4c4d5d8c8b7a69a8473604b40301e0e00000000000000000000000f24394f64798ea4b6cadee3cfbcab96816c5b4937271509000000000000000000020f1a21232f34312220190d000000000000000000000000000000000000000000162b40556b8095aac0c2ad97826d58422d29395c71879cb1c6baa5907a6550364759647a8b9fb4bec2b2a0937e685c4a3a2a18080000000000000000000000001020364b6074879db2bfd0e3d7c7b5a397827360574b3f353026282727272a2c353c484d61697d8d9fb4c1d2e4d5c5b49f8c79634e3c2b190500000014293f54697e94a9c4d4e7e6d3c3a8937d68533e2813000000000000000000000513222f3f4b59626f7e89959ea8b2b6c3b9b3afaba8a7a5a6a6a8abafb3b9bcb5afa49c918478675f4a433625180800000000000000000000000e1e2e3f4b5d657885939da6afb4b9c6bec0bfbec9bcb5b1aca69d958a8176675f647a8a9ea7b3b4bcb5bbb59f8d7e685f4d40301d090000000000000000091d2f404c515757575757575757544c473b2d1f0f00000000000000000000000000000000000e1e2c3a464c545757575757575757514c40301d09001e33485e73889db3c8dde3ceb9a48e79644f3b3b3b3b3b3b3b3d36434b505e66768499a1b3c3d4e1d1c0b49f8b79634e3e2e1b000000001e33485e73889db3c8dde2cdb8a28d78634d38231d2e3f4b6072849aa6b8c9d9d4c4b4a296806b5e4d3c2c1b0a000000000000000000000d22364a5c72879cb1c4d5e7dac9b49f8a796355443126190f060000000000050a161e2c363944494638342b1d0d0000000000000000000000000000000000000000152a40556a7f95aabfc2ad98826d58432d2a3b5c72879cb1c7c9a58f7a65503a3a4b5c697e93a0b2c2beb49f8b7a645847362513000000000000000000000000091d314556677c91a1b3c5d5e5d2c1b1a0978375655d504b43363d3c3c3d3f3d494e5a626e7f8d9fabbccfdfe0ccb8a797826d5b4a361e0e0000000014293e53697e93a8c1d1e1e1d0bfa7927d68523d281300000000000000000000000412202e3b484c606876808a959ca5abb0b4bac7bdbcbbbbbcbdc5b8b3aeab9f9a90867c6f635a4d4130251808000000000000000000000005192b3c4b5d657b8a9ba3b2b7c4c9cdd4cac7c5c4c6c8cac7c4b7b3a99f96887d6e79899ea8b9c5cacfbcaf9d937e69604e413022120000000000000000000012222f383b42424242424242423f37342a1d0f010000000000000000000000000000000000000e1c2933363f42424242424242423c3930221200001e33485e73889db3c8dde3ceb9a48e7964505050505050505152555460656f7c869aa2b3bfd0e1d4c3b4a295806a5b49352010000000001e33485e73889db3c8dde2cdb8a28d78634d3823111c3043546277889dabbccfe3d1c0b09e917c665b4939281603000000000000000000071b2d3e53687e93a6b8cbe0e1cdbaa99b8573604b44372c21191412111214181f28323d494e595f5b4d483c2b1a0a0000000000000000000000000000000000000014293e53697e93a8c9c4ae99846f593c2c34475973889eb3c8bcab8e78634e392e3e4f606e8298a4b6c6baa99d8776615443301c110000000000000000000000021527384d5f6f849aa6b8c8d8dfcebeb1a199867b6f656054555251515254575b636b7882949fabbcc9d9dccdbcb39e8877614c3d2d1a00000000000f243a4f647a8fa3b4c4cdcdc3b3a18d79634e38230e00000000000000000000000002101d2b34424e58616b777f878f969b9fa9a7a8aaabaaa9a8a5a79e99938c847b73665e4d493c301c13080000000000000000000000000b2035485a647b8a9ea8b4c1cbd4cec9c3b7b2afafb0b2b7c4c3cac7bab4a69e9283889da7b8c6d6cdbdaf9e947f6a604f42312313040000000000000000000004121d24262d2d2d2d2d2d2d2c2a221f180c0000000000000000000000000000000000000000000c171f21292c2d2d2d2d2d2d2d27241d120400001e33485e73889db3c8dde3ceb9a48e79656565656565656566676a6e747b84919ca4b4c0d0ddd3c4b6a59a8473604b3d2c1a02000000001e33485e73889db3c8dde2cdb8a28d78634d38230e1426364859657b8d9fb4c0d1decdbcb39e8979635745321e14020000000000000000001021364b6075889db3c1d1e5d7c7b5a396816d6055493d352c29272628292a3438454b5b636f7470625a483828160300000000000000000000000000000000000011273c51667c91abbcc7b29c87725a4935384c61778ca6b8cab59f8b76614c362132424b6175869ca8b9c7b7a5998372604a3f2f1d0d00000000000000000000000a1a30414c6277889eaabbced9dccebfb3a49c90847b746e6a68676667696d7278818b98a0b5bcc9d9dccfbeb09e907c665947341f0f00000000000d22374b5c70859ba6b4bab9b4a599846f5b4935210c00000000000000000000000000000d1820313a474c59616a727a81858a8e91939496959493908c89847d776f6660544c40352c1e12000000000000000000000000000a1d30404d6278899ea8b9c6d1d5c7bab4aca59d9a9a9b9da6a7aeb4bbc8c5b8b3a0989da6b7c5d5cebdb09f95806b6150423224130500000000000000000000000000090f111818181818181817140c0b040000000000000000000000000000000000000000000000040a0c141718181818181818110f09000000001e33485e73889db3c8dde8d3bda8937e7b7b7b7b7b7b7b7b7b7c7f8388909aa2b2b6c3d1e1d0c2b6a69d8777625544311f0f00000000001e33485e73889db3c8dde2cdb8a28d78634d38230e08182a3b4b5d6a8095a2b4c4d5e1ccb9a89c8675604b42312010000000000000000000091e324556697e93a3b4c7d8e5d1c1b09f968173635b4d493c3e3c3c3d3e3b484c56606a7984898578625645321e120000000000000000000000000000000000000c22374c61778b9fb5cab6a58d78634d454956687d92a7c5c9b19c86715846331f1e32465763798a9eb4bdc3b3a1947f6a5d4b3b2b190900000000000000000000001220344859657b8c9fb4bbc8d6ddd0c2b5b1a199908883807d7c7c7c7f82878d969fa9b2becfdae0cdbeb2a095806b5e4c3b2a18010000000000071b2e3e4d627888979fa9a89e978777624c3d2c1a0600000000000000000000000000000005141c2a333b474c555c646b7075797c7e7f80807f7d7b77736e686259514a43362f20190e00000000000000000000000000001024394d5f6f8399a7b9c6d6d5c4b8a99f968d87858486888c91999faab1becbbfb2aeb3b7c4d5cfbeb19f96816c6250433324140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2d5c1ad9c939090909090909090909294989ea6afb4c0cad3d6ccbfb3a49c88786359483726140100000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000d1d2f3f4b6073849aa6b8c9d9d6c6b5a498826d604e3e2e1c0c0000000000000000021628384b6073859ba9bacee2dfcdbdb09f9784796c635b57535251525357596269757f8b999e9b8675604b41301e0e00000000000000000000000000000000000a1f34475971869bb1c4c3ac97816c60575a6274869cb1c7bcab96816b563a29171629394a5b677d929fb1c1bfb49f8d7b655948372715020000000000000000000005182b3b4c5d677d929faab9c6d2e1d2c9bfb3afa69e99959291919294979ca4abb4bac7cfe3d6ccbcb0a0988272604a402f1d0c00000000000000102035495a6277828a8e8e898176625948341f0f0000000000000000000000000000000000000c171f2a34373e4b4f5655606467686a6b6b696866625959534d483b3530251812060000000000000000000000000000061a2c3d51677c91a1b3c5d6d8c7b8a69d8b817872706f7173777c838b979facb9c9c6c3c8cbd5cfbfb2a097816c62514433251506000000000000000000000000000000000000000000000000070b0e11131516161513110e0b07000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2ddcbbaada8a5a5a5a5a5a5a5a5a6a7aaaeb3b8c4c8d1d8cec6b9b4a1998678635a493b2b19090000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000111d3144556277889eabbccfe3d2c2b2a0937e685c4b3a2a180800000000000000000a1c30435463798b9fb4bccddbdbcdbdb1a29a8b8178716c69676667696c70777f88959fa9b4a497816c5f4d3c2b19060000000000000000000000000000000004182a3a53697e93a6b7c5b19f958075717278849aa4b6c5b49f8c79634e39230e0b1b2d3d4d5f6c8197a3b5c5bcab9e8877625544311d1200000000000000000000000d1d2f3f4d5f687e8c9ea8b5c1cdd6ded0c7c5b8b3aeaaa7a6a6a7a9acb1b6c2c9cdd7dbcfc5b9b39e968273605443302212000000000000000006192c3c4959626d767978756c6158483b2b180100000000000000000000000000000000000000040c181f222e373a37444b4f52535556555453504d483b3e37342b201c1308000000000000000000000000000000000c2135495b71869bb0bfd0e2cebaa99d887a6c635b5a5a5b5962676e7882919bacbfd3d8dde0d2c1b2a1988272604b4434261607000000000000000000000000000000000000000000040a0c131c202326292a2b2b2a292623201c130c0a040000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddece8d8cbc1bdbababababababababbbcbfc3c8cbd5d6ccc8bbb4a89e938376625a493c2c1d0d000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000011426374859657b8d9fb4c0d1e0cfbeb49f8b7a6458473626140100000000000000011426364a5b687d929eb0bdcce0dccec0b4aa9f968d86817e7c7b7d7e81858b949da6b4bac2b19f917d675a4835200b00000000000000000000000000000000000c21364b6075889db3bcbdaf9e958a86878d9aa2b3c2b8a798836e5b4935210c000f1f30414b6074859ba7b8c9b8a69b8474604b41301f0e0000000000000000000000112131414e60687c8a9ba3b4b9c6cdd6dcd5cbc8c3bfbdbcbbbcbec2c7cad3dfddd0c7beb2a79e918072605544362513040000000000000000000e1e2c3b484c5760636360564c473a2b1d0d00000000000000000000000000000000000000000000040b101b2225273136393c3e3f41403f3e3b37342b282220180d070000000000000000000000000000000000000e23384e63788da3b5c9dddfc9b49f8b7a645c4d493c453b484c525a626d7c91a6bbd1e6f2dec9b5a3998373605443302616080000000000000000000000000000000000000000060c171f21253035383b3e3f40403f3e3b38353025211f170c06000000000000000000000000000000000000000000000000000000001e33485e73889db3c8d7d7d7d7d7d7d3d0d0d0d0d0d0d0d0d0d1d4dacfcac7c5b8b3aa9f978a7e6f6158493c2c1e0e00000000000000001e33485e73889db3c8d7d7cdb8a28d78634d38230e00000009192b3b4c5d6b8095a2b4c4d3d7cebaa99d8776615443301c12000000000000000008182d3d4e5f6b80969fafbcccd6ded0c8bbb4aca49c979391919293969b9faab3b7c4cdcebdb39e8978624d38230d0000000000000000000000000000000000091e324556667c919eb5bcbcafa99f9c9ca4afb3c0b9aa9e8978624d3d2c1a060001131d3145566278899eabbcc4b4a296806b5f4d3d2c1b0a0000000000000000000003132331424e5e667985949ea8b4b9c6c8d1d6dad8d5d2d1d1d1d4d7dbd8d4cbc8bfb3aea098897c6b6054443727180800000000000000000000000e1d2a3439454b4e4e4b4538332a1c0d0000000000000000000000000000000000000000000000000000080d0f151d202427292a2b2b2a2826222018130d0b05000000000000000000000000000000000000000014293e53697e93a8c1d2e4d3c2ab96816b5c4b3e352c2f2b343745566175849ab0c5daeff0dbc6b19b86756055443626140800000000000000000000000000000000000000030f1a212a333736434a4e51535455555453504d4a433636332920190e0300000000000000000000000000000000000000000000000000001e33485e73889db3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c1c0bfc9bcb5b1aca79e968b827769604c473a2b1e0e0000000000000000001e33485e73889db3c2c2c2c2b8a28d78634d38230e000000000d1d2f3f4b6073849aa6b6c3c1c2c7b7a59a8472604b402f190900000000000000000f1f31414a607281959eb3b9c5d0dcd8cecac2b5b1aca8a7a6a7a8acb0b4bbc8cbd4d8cec1b5a79a856f5a45301a0500000000000000000000000000000000021628384c5e6b80949fabb5c1bab4b1b2b6c3bcb5a79e8c7c655a48341f0f00000002152738485a667c8d9fb5bdc0b09e917d675b49392816030000000000000000000005132431404c5b63747f8a969ea8b0b4c1c1c5c8cacfdaccd6ccc9c6c3c4b7b2aba1998f8277675f4a4336271909000000000000000000000000000d181f28323639393632281f170c00000000000000000000000000000000000000000000000000000000000002080b0f12131516161413110d0b05000000000000000000000000000000000000000000000000172d42576c8297acc1d7decab6a48d78624d3e2e211918263744556074849aa2b4c8ddf2ecdfc9b49f8a78634d3f2e1808000000000000000000000000000000000000000b171e2c353a474c5354606366686a6b6b6a6866636054524c463a352c1e160a000000000000000000000000000000000000000000000000001e33485e73889dacacacacacacacacacacacacacacacacacacabaaa7ab9f9c97908981786d62594f42332a1c0e000000000000000000001e33485e73889dacacacacacaca28d78634d38230e0000000000111d3144556277889ca5abacacacacaca295806b5e4c372715010000000000000001131c304354606c80929ea7b3bfc8d1dddfd2c9c6c1bebcbbbcbec1c5caced9d9cec7bab4a39b897a644f3a250f0000000000000000000000000000000000000a1a304051626b7f8d9ba3acb2b4bbb9b4b0ab9f98897b655d4c3c2b1901000000000a1a2b3c4c5e6b80959fabacacac9e8a79635745321e090000000000000000000000061322303c49556069778189939ba3a7acafb2b5bcb7b7c5b9b3b0ada9a69d968e847a6d62594d4030251809000000000000000000000000000000050a161e212423201d150a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4d9dcc7b19c87725a48352010132536445560738399a2b4c0d1dfdcd7d9cdbaa999846f5d4b37230f000000000000000000000000000000000002101b29333d494e5861686f74787b7e7f80807f7e7b78746e6861584d493c32281b0f0100000000000000000000000000000000000000000000001e33485e7388979797979797979797979797979797979797969694928f8b87827b746b625a4c483b321f170c00000000000000000000001e33485e738897979797979797978d78634d38230e00000000000114263748596379879195979797979797978b7b665544311d08000000000000000000132536434a616a7d8999a1afb4c0c8cbd5d8dbd6d3d1d0d2d3d6dbd8d4cac8bbb4a99f958578645c4b37220d000000000000000000000000000000000000001222334451616a7b8690979d9faaa89e9b958c8378655d4c3f2f1d0d0000000000000e1e2f404b607281919697979797978675604b36210b00000000000000000000000004121e2c37444b59626b767e858c92979a9d9faba2a2a1a79e9b98938e8880796f645c4d483b301c130800000000000000000000000000000000000003090b0e0e0b0902000000000000000000000001080b1c20202020202020201f170b08010000000000000000000000000000000000060c0e1b1f202020202020202020110f09000000000000000000001a30455a6f859aafc4dad9c4af99846f5a3c2b19151c30435460738298a1b3c0d0d4cac7c2c5cec7b3a18f7a65503d2d1a070000000000000000000000000000000412202e39464c5b636d777d84898d90939495959493908d89847d766c625a4b45392d1f110300000000000000000000000000000000000000000000162c41566b8082828282828282828282828282828282828281807f7d7a76726d6660554d483c342a1d1404000000000000000000000000162c41566b8082828282828282828277614c37220c00000000000009192b3b4a5b63757c8082828282828282828074604b35200b0000000000000000000818253043505f677784909aa2acb3b8c5c3c7c9cdd7cdd6cdc9c6c3c3b6b2aa9f988b8074635a4b3e2e1b08000000000000000000000000000000000000000416263343505d65737b82878a8c8b898680796e625a4b3f2f21110000000000000000121c304354606d7c818282828282827c66513b261100000000000000000000000000000e1927313b484c58616970777c8185888a8b8c8d8c8b8986837e79736b635b4f4b3e342b1d12000000000000000000000000000000000000000000000000000000000000000000000000000009141d20313535353535353535342d201d14090000000000000000000000000000010f1a2123313535353535353535353526231c11040000000000000000192e43596e8398aec3d8d9c3ae99846e593726142634444a60728298a0b2bfd0d4c3b7b2acb1bdcebfaf9a846f5b4a3621090000000000000000000000000000041222303e4b57616c79828a92999ea7a6a8a9aaaaa9a8a5a79e99928a81786b60574a3d2f21110300000000000000000000000000000000000000000014293d51626b6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6b6a6765615857514b4437352b1f180d000000000000000000000000000014293d51626b6d6d6d6d6d6d6d6d6d615947341f0a000000000000000d1d2d3d4a5660676b6c6d6d6d6d6d6d6d6b605544311d080000000000000000000008131c33414d59626f7b858f979ea6a9adb1b4bac7b7c6b9b4b1ada9a59d958b83796b6056493c2e2010000000000000000000000000000000000000000000081625333f4b5460666c7275767674716a635b4d493c2f211103000000000000000001142636434b5e666b6d6d6d6d6d6d665e4c38240f00000000000000000000000000000009151d2b343a474c535962676c707375767777777674716e696460544e4a3d372e20180d000000000000000000000000000000000000000002090b101414100b080100000000000000000919263135464a4a4a4a4a4a4a4a49423531261909000000000000000000000000000f1f2c3538464a4a4a4a4a4a4a4a4a4a3b382f22110000000000000000172c42576c8197acc1d6dbc6b09b86715544311d334451626c8197a0b2becfd4c4b7a59d979fb1c7c8b4a28e79634e3727150100000000000000000000000002122330404d5c6476818b979fa9aeb3b8c5bdbfc0c0bfbdc5b8b3aea99f978b8075635b4c402f21110100000000000000000000000000000000000000000e2134445156575757575757575757575757575757575757575655524f4c473a3b36312720190e050000000000000000000000000000000e21344451565757575757575757574c473a2a180400000000000000000f1f2d38454b51565757575757575757564b44372715010000000000000000000000001523303b484d5d65707a81888f94989c9fa9a1a2a1a89e9b98938e8780786e635b4b45382c1e1002000000000000000000000000000000000000000000000715212f36434a515754606161575b554e4a3d352c1e11030000000000000000000008182630404c5156575757575757514c402f1d0900000000000000000000000000000000020d18202a33373b484d52575a55606162626160565b58544e4a4336362d221b100500000000000000000000000000000000000000000a151d2026292925201d150900000000000001142637444b5c60606060606060605f574b443726140100000000000000000000000b1b2c3d494e5b5f606060606060606060504c402f1c090000000000000013283d52687d92a7c0d0dec8b39e8974604b35324350626b80969fb1beced5c5b7a69d878297a9bacec0ac96816c5544311d08000000000000000000000000102030414d5f677a87969faab4bac7c8ccd6d3d4d5d5d4d3d5ccc8c7bab4a99f968679655e4c402f1f0f0000000000000000000000000000000000000000051626343d4142424242424242424242424242424242424241413f3d3a37332a26201d1509050000000000000000000000000000000000051626343d4142424242424242424237342a1c0c000000000000000000010f1a2832363c4042424242424242424135312719090000000000000000000000000005131d2b343f4c505d656c747a7f8387898b8c8d8c8b8986837e79726b625a4e493d32281a0e000000000000000000000000000000000000000000000000000311182530353b36434a4c4b46394039362d20190e0000000000000000000000000008141c30383c414242424242423b382f221200000000000000000000000000000000000000050c171f212b34373d4237444b4c4d4d4c4b4538433e39353025211a0f08000000000000000000000000000000000000000004121a2731363b3e3e3a35312719110300000000081d31445560717575757575757575746c605544311d110000000000000000000003172939495b637074757575757575757575665e4c38230f000000000000000d22384d62788da2b4c7dcccb8a7907b66503f424f616b80959eb0bdced6c5b8a69d8878778b9fb4c9c8b39e8874604b35200b00000000000000000000000b1b2e3e4d5f677d8b9da5b4bbc8cdd7deddd6d0ceccccced1d7ddded7cdc7bab4a49c8a7c655e4c3d2d1a0a0000000000000000000000000000000000000000081621292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b2a2825211f17110b08020000000000000000000000000000000000000000081621292c2d2d2d2d2d2d2d2d2d221f180c0000000000000000000000000a161e21272b2d2d2d2d2d2d2d2d2b201d1509000000000000000000000000000000000d18202f383f4b4f5560656a6e7274757778777674716e69645c564d493c352c1d150a0000000000000000000000000000000000000000000000000000000008131c2026253035373632282b24211a0f0600000000000000000000000000000001121d24262c2d2d2d2d2d2d26241d1204000000000000000000000000000000000000000000040a0d182022272c273135363738373632282e2924201c1308070000000000000000000000000000000000000000000412222f38454b505353504b44372e2111030000000b20354b6075858a8a8a8a8a8a8a8a898173604b3f2f1a0a0000000000000000000a1e3346576379858a8a8a8a8a8a8a8a8a8a7b66503b2611000000000000000b2035485a6f849aafbfd0d6c5ae99836e5d4c4f606a7f949eafbccdd6c6b8a79e8879636e8398adc8cbb8a6907b65503b251000000000000000000000031729394b5c677d8d9fa9b6c3ced8e0d4cbc8c1bbb8b6b7b8bbc1c8cbd5e1d8cec2b6a89e8c7c655b4a382816030000000000000000000000000000000000000000050e141618181818181818181818181818181818181817161512100c0a0400000000000000000000000000000000000000000000000000050e14161818181818181818180c0a04000000000000000000000000000003090b12161718181818181818160b080100000000000000000000000000000000000005111c232e3737444b5054585c566061626261575c58544e4a3d38352c211a0f0200000000000000000000000000000000000000000000000000000000000000070b11131c2021211e16150e0c0700000000000000000000000000000000000000090f1116181818181818110f090000000000000000000000000000000000000000000000000000050b0d1217151d2021222222211e1619140f0b0700000000000000000000000000000000000000000000000012222f404c56606569696560554b3f2e2111000000081d314455647a8c9f9f9f9f9f9fa89e97816c5d4c3827150200000000000000061a2c3d4c6176869b9faa9f9f9f9f9fa798826e5e4c38230f0000000000000005192b3c50667b90a1b3c5d5c6b2a1907b655b60697e939daebcccd7c7b9a89e897a645b677c91aabbcec5ab95806b56372614010000000000000000000a1e334657647a8b9fabbac7d4e2d6ccc4b7b2aca6a3a1a1a3a6acb3b8c4cdd7e2d3c6b9aa9e8a79635645321e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b222631353a3f4338454b4c4d4c4b4639433e39362d2320190e0600000000000000000000000000000000000000000000000000000000000000000000000000070b0c0c09030000000000000000000000000000000000000000000000000000010202020202020000000000000000000000000000000000000000000000000000000000000000000001080b0c0d0d0c0b0903000000000000000000000000000000000000000000000000000000000a1a2f404c5e66747b7e7e7a74655d4b3f2e19090000011426374a5c6b8096a5b7b5b5c6b9b49f907b655645311d0e000000000000000a2135495b6b8096a4b4bbb5b5b5c1b39e8977624c402f1c0900000000000000000e23384c5e6f8399a7b8c7cfbfb39e897964687e8d9fb5bbccd8c7baa99e8a7a645c4b61768a9fb4cac5b09b85705544311d080000000000000000061a2c3d4c6176879da9bac9d7e2d4c5b9b3a69d97918e8c8c8e91979da6b4b9c6d5e2d7c8b9a89c8675604b3c2b190500000000000c161c1e202020202020201f1d180f0300000000000000000000000000000000000003090c161d20202020201a18120800000000000c161c1e2020202020202020200e0c06000000000000000000000000070b141c1f202020202020202016140d040000000000000000060b0d151612100a0100000000000000000000000000000000000000000000000809141d20252a2e2731363738373632282e2924211a0f0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384c5e667c879093938f877b655d4b37261401000009192d3e4b6075879db2becfd7cdbdb19c8674604b3c2b190500000000000a1a30404e63798b9fb4c3ced8d8c8b4a3937e685948342211000000000000000000091c2f404d6278899ea9bac6ccb8a79d887a7d8d9fabbccfd8c8baa99f8b7b655c4b465771869bb0c6c9b49f8975604b35200b00000000000000000c2136495b6c8197a5b7c7d7e4d4c3b7a79e9488817b797777797c8288949ea8b8c4d5e5d6c6b6a495806b5a4835200b00000000101e2930333535353535353535322c211303000000000000000000000000000000000b161e212c333535353535302d25190b000000101e2930333535353535353535352320190e00000000000000000008131c2029313535353535353535352b282116080000000000000e1920232a2c27251d120500000000000000000000000000000000000000000000000001080b101519151d20222322211e1619140f0d07000000000000000000000000000000000000000000000000000000000000000711171a202020202020201f170b070000000000000000000003090b191f202020202020202012100a0100000000000000000000000000000000000000060c0e1111110e0c06000000000000000000000000000000000000000000000000000000000001080b0b080100000000000000000000000000000000091e324556667c8d9da5a8a8a59c8c7b655544311d08000000101e324557667b90a0b2c5d5decab6a4947f6a5a4835201100000000021628384d5e6f849aaabbcee2e2cebbaa9b8573604b3b2a180400000000000000000000122034485a657b8b9fa8b7c4c5b7a69d8a8b9fabbcc9d9c9bbaa9f8b7c665d4b3e39576c8197acc1cdbaa98d78634e38230e0000000000000004182a3b4e63798c9fb4c3d4e5d6c5b7a59d897f746c6663616263666c757f8a9ea6b8c7d7e4d3c2b49f8a78624d3929160300000c1e2e3b45484a4a4a4a4a4a4a4a473e31210f0000000000000000000000000000000b1b28323641484a4a4a4a4a454137291908000c1e2e3b45484a4a4a4a4a4a4a4a4a38352c1e0e0000000000000008182530353e474a4a4a4a4a4a4a4a4a403d33261604000000000e1e2b353840413c3930231608000000000000000000000000000000000000000000000000000000000002090b0c0d0d0c090300000000000000000000000000000000000000000000000000000000000000000000000b19242c2f35353535353535342c201c1308000000000000000a161e212e34353535353535353527251e130500000000000000000000000000000000010f1a212326262623211a0f010000000000000000000000000000000000000000000000090e1018141d20201c1418130c0a0300000000000000000000000b21364b6074889dabb7c3c3b6aa9c8773604b35200b000000031628394c5e6d8298a7b8cce0d3c2b49f8a78624d402f1a0a000000091e324556667c91a2b3c8d8e6d4c3b49f8c79645443301d0d000000000000000000000005192b3c4b5d667c8a9da6b3bfc4b7a99f9faabbc9d9cfbcab9f8c7c665e4c3f2e3e53697e93a8bec9c7a5907b65503b2610000000000000000b1f3447596d8298aabbcee1e0ccb9a79d8779696056514e4c4c4e5156606a7a889ea9bacde1e1cdbaa996816c5746321e0a000016293b4c595e606060606060605f5b4f3e2c1804000000000000000000000000000a1b2839464b565d5f606060605a54483725120016293b4c595e6060606060606060605e493c2c1906000000000000132536434a535c5f606060606060606055504433210d0000000e1e2b3c484d5556524d413326160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000719293640444a4a4a4a4a4a4a4941353025180800000000000a1a28323643494a4a4a4a4a4a4a4a3d39302313010000000000000000000000000000000f1f2c35393b3b3b39352c1f1608000000000000000000000000000000000000000003111c23262d2631353530262e28211e160b0200000000000000000011263b51667b90a6b7c9d4d3c8b6a58f7a65503a2510000000000a1b2f404c6177899eb3c0d0e1cdbaa899836e5e4c382815020005192b3c4b6075879db2c0d0e6dfcab7a596806b5c4a362614000000000000000000000000000d1d2e3f4c5e667a8899a1b1b5c2bab4b4bbc8d8cbbbb49f8d7d675e4d402f263b51667b90a6b4b4b4a7927d68523d2813000000000000000c22374c61778a9fb4c8d9e5d2c2b39e8978635b4b45383937373938454b5c64798a9fb4c3d4e6d7c7b49e8976614b36210c00001c3045596a7375757575757575746d5b47321d08000000000000000000000000031628394657616b7275757575756f6654412d18001c3045596a73757575757575757575705a4935200c00000000000a1c3043546069717475757575757575756b62503d2814000006192b3c485a626a6b675f5144331c0c000000000000000000000000000000000000000913191c202020202020202020110f09000000000000000000000000000000000000000000000000000000000000000000000000112436475459606060606060605f564a433625130000000003162838454b585f6060606060606060524d41301e0a0000000000000000000000000000061a2c3d494e5151514e493d342616010000000000000000000000000000000000000011212f383b4337444b4b4336433d3632291d150a000000000000000014293f54697e94a9c4d4e7e6d3c3a8937d68533e28130000000000111f344759687d92a2b3c7d7d7c6b2a1907b665645321d0e00092035485a6a7f95a5b7cadee4cfbfb29d8775614b3d2d1808000000000000000000000000000010212f404c5c647783909ca4b5c9c9caced8ccbbae9d937e685f4d40302222384d62788d9e9f9f9f9f937e69543e29140000000000000114263653687e93a9bacee6dec9b5a4927d675a493d31272422222428323e4a5b687e93a5b6cadfe1cdb9a8917c67523c271200001e33485e73888a8a8a8a8a8a8a8b745f4a351f0a000000000000000000000003101e324557617580888a8a8a8a8a846f5a45301a001e33485e73888a8a8a8a8a8a8a8a8a78634d38230e000000000a1a2f3f4a60727e868a8a8a8a8a8a8a8a8a806b55402b1600000b2035485a62787f817c6b62513a29170400000000000000000000000000000000000d1b262e3135353535353535353526241d120400000000000000000000000000000000000000000000000000000000000000000002172c4054656f75757575757575746c605443301c100000000a1e324556606e747575757575757575675f4d39251000000000000000000000000000000c2135495b63666666635b5144341f0f000000000000000000000000000000000000091c2f404c50585c556060545c58524b463931271a0c0000000000000014293e53697e93a8c1d1e1e1d0bfa7927d68523d2813000000000004182a3a4e5f6f849aa9bacde1cfbfb29c8774604b3c2b1909192f3f4d62788a9fb4c3d4e6d6c6b2a1917c665746321f0f0000000000000000000000000000000212222f3e4b59616e7c869cb1c6dbdfe2cdbcaf9d937e69604e413022122035485a6a80898a8a8a8a8b7f69543f2914000000000000081c3043546f8499afc7d8eadbc6b19c86715f4d3c2c1d150e0c0d0e161e2d3d4b6073879db2c7dce9d6c6ad98836e583b2a1805001e33485e73889d9f9f9f9f9f9f8a745f4a351f0a0000000000000000000000102132424b607584969d9faa9f9f9a846f5a45301a001e33485e73889d9f9f9f9f9f9f9f8d78634d38230e000000021528384b5d6c81939c9fa99f9f9f9fab9c8675604b36200b00011426364d627889959691806b5847331f0a00000000000000000000000000000000091b2b3842464a4a4a4a4a4a4a4a4a3b382f2212000000000000000000000000000000000000000000000000000000000000000000041a2f44596f838a8a8a8a8a8a8a898172604a3e2e1909000a1a30404b607482898a8a8a8a8a8a8a8a7c67523d271200000000000000000000000000000e23394e63797b7b7b796c62513d2d1a0700000000000000000000000000000000000e23384c5e656d7174757574716d6861574b45382a1c0c0000000000000f243a4f647a8fa3b4c4cdcdc3b3a18d79634e38230e0000000000000c1c31414d62788a9fb4c1d2dfcab6a5957f6a5a4935201527374b5d6e8398a9bacde1e1ccb9a899836e5e4c39281601000000000000000000000000000000000412202e3a474c5e697e93a8bed3ddcebdb09e947f6a604f4231231305192b3c50626a73747474747469614f3b27120000000000000b20354b6074899eb3c9dee5d3c2a8927d685341301e0f020000000003101c304354697e94a9c4d5e7ddc8b29d88735948341f0b001e33485e73889db3b5b5b5b49f8a745f4a351f0a000000000000000000000d1d2e3f4f606d8298a2b2b4bbb5af9a856f5a45301a001e33485e73889db3b5b5b5b5b5a28d78634d38230e000000091d324556657b909fb1b4bab5b5c3b59f8d7a655645321d0900081c3043546d8297a7ab9f8a76614c37210c0000000000000000000000000000000013263849565b606060606060606060514c402f1d090000000000000000000000000000000000000000000000000000000000000000000d22374d6277899e9f9f9f9fa89e95806b5c4a372614031628384c5e6e82989ea89f9f9f9fa899836f5f4d3925100000000000000000000000000000152a40556a7f9090908e816c5b4a36210c000000000000000000000000000000000010263b50657c8287898a8a8987837d76696056473a2a1b0a00000000000d22374b5c70859ba6b4bab9b4a599846f5b4935210c00000000000000132035495a697f94a3b5c8d9d3c3b49f8a78624d402f1d314455657b90a0b2c7d7e6d2c1b49e8a77624d402f1b0b00000000000000000000000000000000000002101c2a3a4c6177899eb3c9ded0bfb19f95806b61504232241305000e1e334350555e5f5f5f5f5f544f4332200c0000000000000e23394e63798ea8b9cce1decab6a48c77614c37221300000000000000011426364d63788da6b8cbe0dfcbb7a68c77624c37220d001e33485e73889db3c8cac9b49f8a745f4a351f0a00000000000000000009192b3b4b5d697e93a0b2c0cacec4af9a856f5a45301a001e33485e73889db3c8cacacab8a28d78634d38230e0000061a2c3d4b6074869cb1bdc9cdd7cab7a596816c5d4b38281502000b20354b6074899eb3baa9917c66513c271100000000000000000000000000000005192e42566771757575757575757575665e4c38240f0000000000000000000000000000000000000000000000000000000000000000000b20344859687e92a2b3c6c6b9b49f8c7a645544311d0e1e324556667c91a0b4b9c6b5c0b49e8a78624d41301e0a000000000000000000000000000013283e53687d93a6a69f8e79634e39230e0000000000000000000000000000000000162c41566b81969c9e9fa89e9c9892887e746158473928160300000000071b2e3e4d627888979fa9a89e978777624c3d2c1a060000000000000006192c3c4b6073859baabbcee1cdbaa999836e5e4c382a3b4b6073869cb1bfcfe5d9c8b5a3937e69594834221200000000000000000000000000000000000000000a1f3347586c8197a7b9ccd4c3b3a197816c625043332414060000001525333c40494a4a4a4a4a3f3b3225140300000000000011263c51667b91a6c6d6e8dcc7b19c87725947341f0a0000000000000000082135495b73889eb3c8dde6d4c4a48f7a654f3a2510001e33485e73889db3c8ddc9b49f8a745f4a351f0a0000000000000000021527374859657b8b9fb4becfdfdac4af9a856f5a45301a001e33485e73889db3c8dddfcdb8a28d78634d38230e00000c2135495b6a7f95a4b6cadfe2cfbeb29d8775614b3f2e1a0a00000e23384d63788da7b8c7aa95806a55402b15000000000000000000000000000000061c31465b71858a8a8a8a8a8a8a8a8a7c66513b261100000000000000000000000000000000000000000000000000000000000000000005182b3b4e606f849aa8b9cdcdbcab9b8673604b3c2b192c3c4b6075879db2becdd7c7b4a2937e695a4834231301000000000000000000000000000511263c51667b91a6bda7917c67523c2718100e080000000000000000000000000000152a3f556a7f94aab3b5b9b4b1ada79e938476615745321e0e0000000000102035495a6277828a8e8e898176625948341f0f0000000000000000000e1d314455647a8c9fb4c3d4d7c7b3a1917c665645344759697e93a4b5c9dde2cebbaa9b8573604b3b2b180400000000000000000000000000000000000000000c21374c61768a9fb4c5d6cab7a5998372604b443325150600000000071521282b34353535353529272014070000000000000014293e53697e93a8bed3e8d8c3ae99836e593a2a1804000000000000000006192c3c5a6f859aafc4dae7d1bca7927c67523d2712001e33485e73889db3c8ddc9b49f8a745f4a351f0a00000000000000010f1d3144556277889daabbcedcecdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e000c1c30414e63798b9fb4c2d3e5d5c4b2a0907b66574632211000000011263b51667b90a6c5c3ad98836e58362513000000000000000000000000000000061c31465b71869b9f9f9f9f9f9f9f907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000d1d31424d62788a9eb4c0d1c9b5a3947f695a48352035495a6a8095a5b7cae1cdbaa99a8572604a3c2b1905000000000000000000000003090e1920253a4f647a8fa4b9a9937e69543e342a25231c110900000000000000000000000013293e53687e93a8bdc7cac9c6c5b8b3a29a8675604b3c2c19060000000006192c3c4959626d767978756c6158483b2b1801000000000000000000011527374a5c6b8196a5b7cadfd0bfb29d8775604b3e4c6177899eb3c2d2e5d4c4b49f8c7a645544311d0d00000000000000000000000000000000000000000215283854697f94a9bacdd3c2b29d877661544330261607050b0d0b0801040d13151e1f1f1f1f1f14120c030000000000000000152a3f546a7f94a9bfd4e9d7c2ac97826d57422d1800000000000000000000192e44596e8399aec3d8e8d2bda8937d68533e2813001e33485e73889db3c8ddc9b49f8a745f4a351f0a000000000000000f1f30414b6074849aa6b7c8d8eaefdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e0417293a4d5f6f849aa9bacde0e0cbb8a698826d5e4c39291602000000142a3f54697f94a9bec6b19b86715443301c070000000000000000000000000000061c31465b71869bb0b5b5b5b5b5a6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000132035485a697e93a2b4c6d2c2b49e8a78624d4030404d62788a9fb4c3d4d2c2b49f8b79635443301d0d00000000000000000000010a161e212b3538364d62788da2c7aa95806b554c473b3a372e231c11060000000000000000000012273d52677c92a7afb1b6c2cad4ccc0b4a497816c5b4935210c00000000000e1e2c3b484c5760636360564c473a2b1d0d000000000000000000000009192d3e4b6175879db2becfdfcab6a595806a5a4a5c6d8297a7b9cce0dfcbb7a696816c5c4a372614000000000000000000000000000000000000000000091d32455670859ab0c7d7cab6a4907c665746362614020d181f22201d15130e0b0801000a0a0a0a000000000000000000000000152b40556a8095aabfd5ead5c0ab96806b56412b1601000000000000000002182d42576d8297acc2d7e9d3bea9947e69543f2914001e33485e73889db3c8ddc9b49f8a745f4a351f0a0000000000000c1c2d3d4d5f6c8196a2b4c4d5e6f6efdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e091f334758677d92a2b4c7d7e4d0bfb39e8876614c402f1b0b00000000182d42576d8297acc2c9b49e8973604a35200b0000000000000000000000000000061c31465b71869bb0c6cacacabba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000005192b3c4a6072849aa8bacdcdb9a899836f5e4d394c5e6f8399a9bacdd9c9b5a4957f6a5b493625130000000000000000000009141d2832363c484d545460768ba9baac97826d65615957504b3f382f20190e00000000000000000010253b50657b90999a9ca4b2b7c3d4d1c2b59f8c78634d38230e0000000000000e1d2a3439454b4e4e4b4538332a1c0d00000000000000000000000000101e324657667b90a0b2c5d5d4c3b49f8b786354647a8d9fb5c5d6e4d0bfb29d8875614b3e2d19090000000000000000000000000000000000000000000b20364b60758a9fb4c9dcc7b19c87725e4c3929180a151d2a34373531272824201d140900000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f0a00000000000818293a4a5b677d929fb0c0d1e2f2ffefdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e192e3f4c6176889eb3c0d0e5d6c6b3a1917d67584733221100000000001b30455b70859ab0c5cdb9a88c78624d37220d0000000000000000000000000000061c31465b71869bb0c6dbdfd0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000e1c30435463788a9fb4c1d1c6b3a1917c66574656667c91a1b3c7d7cfbcab9c8674604b3d2c18080000000000000000021119263139454b525a62696f74788a9fb4b19c867d7b77726c655d504c40352b1e1002000000000000000b20354b6073808384878e9da5b7cadfcfbcab96806b563a2917040000000000000d181f28323639393632281f170c0000000000000000000000000000031628394c5e6d8298a7b8cce0cdbaa999846f6072859babbccfe4d7c6b3a1917c665746332010000000000000000000000000000000000000000000000f24394e64798ea9bacdd5bfaa95806a55402f1b0b1a28323b484c4b44373d393531261909000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f0a0000000000132536465863798a9fb4bdcddeefffffefdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38231527374b5d6c8197a6b8cbdee1ccb9a899836e5f4d3a2a170400000000001d32475c72879cb1c7d7c6a38e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000132536495a697f94a3b4c7d0bfb29d8875614b6075879db2bfd0d4c3b49f8c7a645544311f0f000000000000000009151d2f37444b5760676f787f84898d9fa9bab5a49c92908c87817a71665e4d493c2e211204000000000000081d314455606a6e6f727a879db2c7dddac9b19c87725846331f0a00000000000000050a161e212423201d150a04000000000000000000000000000000000b1b2f404c6177899eb3c0d0d7c7b3a1917c687d92a3b5c9dae1cdb9a899836e5e4d392917020000000000000000000000000000000000000000000011263b50667b90a5c7d7d1bca6917c67513c2712152838454b5962605557524e4b44372614010000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f0a000000000e1c3043546176879ca8bacddbebfdffffefdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38231d314455647a8d9fb5c4d5e5d1c0b39e8977624d41301c0c0000000000001d32475c72879cb1c7ceb9a38e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000008182c3c4b6073859ba9bacdcbb7a696816c5c6a7f95a5b6cadfcab7a596816c5c4a37271501000000000000000a1927313f4c556068757d848c949a9ea8b4bac7c2b5b1a8a5a59d978f867b6f625a4b3f30221201000000000001152737444b55595a5c677c91a6c6d6dfcab59f8b76614c36210c00000000000000000003090b0e0e0b090200000000000000000000000000000000000000111f344759687d92a2b4c7d7d0bfb29d8777889eb3c1d1e7d2c2b49e8a78624d40301b0b000000000000000000000000000000000000000000000012273c52677c91a7bcd1cfbaa58f7a65503a25101d32455660707775706c6863605544311d080000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f0a0000000e1e2f404a60728399a5b6c6d7e9f0f3f5fbefdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38232b3c4b6073869cabbccfe2d7c7b4a2937e685948342313000000000000001d32475c72879cb1c7ceb9a38e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000e1c30435463798b9fb4c1d2c4b49f8c7a64788a9fb4c3d3cebeb29d8775614b3e2e1909000000000000000a1a2837444b5d65737d88929a9fabafb4b9c6cdd7d2c9c6bdc3b7b2aca49c908478655d4d4030200f000000000000091927313540443e4b61768ba8b9cce1cfbcab8e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000004182a3a4e5f6f849aa9bacddfcab7a59c879ca6b8cbdfd9c9b5a3947f695a4835221200000000000000000000000000000000000000000000000010263b50657b90a5c6d7d0bba6907b665138281829394b6074848c8986817d7973604b35200b0000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f0a00000a1b2c3c4c5e6a7f95a1b3c3d3e4dddadee0e8efdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d382335485a697f94a4b5c9dae1cdbaa99a8472604a3b2b1805000000000000001d32475c72879cb1c7ceb9a38e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000001142636495b6a7f94a3b5c8cfbcab9b85708399a9bacdd5c4b2a0907b65574632201000000000000000031628384555606c7b86939da6afb5bcc9c9ccd6d8e0e5dedbd2d4cac7c2b5b1a199897b665e4d3e2d1c0c00000000000009151d202b2e33465774899eb3c9dedac9a5907b65503b2610000000000000000002090b101414100b0801000000000000000000000000000000000000000c1c31414d63788a9fb4c1d2d4c3b6a49ca4b6c4d5e3cfbcab9b8673604b3c2b19040000000000000000000000000000000000000000000000000e24394e63798ea8b9cdd5bfaa95806a5645352c364657697f94a29f9b97928e86725c47321d0700000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f0a0003162839495a667c8d9fb5bfd0dfd1c8c5c8ccd6e3dac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d3830404d62788a9fb4c2d2e6d2c1b49f8a78635443301d0d00000000000000001d32475c72879cb1c7ceb9a38e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000008182c3d4b6073859baabbcec9b4a2957f95a1b3c7d7cbb8a698826d5e4c3928160200000000000000091e324556607381909ca4b3b7c4cacfcdc9c3c1c4cddbcdc4c1bdc3c9cec9bfb3a79e8b7d665c4a3a29170400000000000001080b151729395e73889db3c8ddd1bca6917c67513c2712000000000000000a151d2026292925201d150900000000000000000000000000000000000000132035495a6a7f94a3b5c8d9d3c2b6b1b6c2d3e2d5c4b49f8c7a645544311e0e000000000000000000000000000000000000000000000000000b20364b6075899eb4c9ddc7b29d8774604e493d48546175889eb3b4b0aca799846e59442f190400000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f0a02101e3245576378899eabbccfddd1c0b4b0b3b8c5d6dac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38394d5f6f8399a8bacde0d8c8b5a3947f695a493625130000000000000000001d32475c72879cb1c7ceb9a38e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000f1d31445563798b9fb4c2d1c0af9e959eafbfd0d0bfb39e8876614c402f1b0b00000000000000000b21364b607584969fb1b5c2cbd5cdc7bab4aeabb0bdcdbdb0aca8aeb4bbc8d0c5b8a99f8b7a645847331f0c000000000000000000001e33485e73889db3c8ddd1bca6917c67513c2712000000000004121a2731363b3e3e3a353127191103000000000000000000000000000000000006192c3c4b6073859baabbcee2d3cac6cad3e0e0cbb7a697816c5c4b3727150000000000000000000000000000000000000000000000000000091d3245566e8399aec2d2cab7a597816e635b5b5962728298a6b8c9c5bbaa947e69543f29140000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f00102132424b6075869ca7b9c9dad5c4b4a29b9ea7b8ccdac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d384657677c91a1b3c6d7e2cebbaa9b8573604b3c2c18080000000000000000001d32475c72879cb1c2c2b9a38e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000000011426374a5b6a8095a4b5c8ccbcafaaafbcccd6c6b3a1917d6758473321110000000000000000000b20354a6073859aa8b9c9d2cfc7bab4a99f99969fb0c4b09f9693999faab3c0cfc7baa99d8776614c3b2a18040000000000000000091e33485e73889db3c8ddd1bca6917c67513c2712000000000412222f38454b505353504b44372e21110300000000000000000000000000000000000e1d314455647a8c9fb4cadfe5dedcdee5e7d5c4b39d8876614c3e2e190900000000000000000000000000000000000000000000000000000215283852677c91a4b5c9d4c3b19f978378727071778298a0b2c5d5c5b49f8b77614c37220c0000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f0d1d2e3f4f606d8298a4b5c5d6d8c8b7a69b85899eb3c8dac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78635455566175889db2bfd0dccfc0b49f8c79645544311e0e000000000000000000001d32475c72879cacacacaca38e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000009192d3d4b6074869caabbceccc3bfc3cce1ccb9a899836f5f4d3a2a1703000000000000000000071c30435462788a9eb4bfc9beb2a99f958a838196abc1ac96817d838b9aa2b2bfcfc7b6a596806b5947341f0b0000000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000000012222f404c56606569696560554b3f2e21110000000000000000000000000000000000011527374a5c6c8196abc1d6ebf3f1f3f4e0cbb7a6917c675846332010000000000000000000000000000000000000000000000000000000000b20354b6073869cabbccfcebdb1a1998d8785878b98a0b2becfc8b8a797826d5947341f0b0000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351f192b3b4b5d697e93a0b2c2d2e2cebbaa9d88778b9fb4cadac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d786a6a6a6c748399a6b7cbdccfbeb2a295806a5c4a37261400000000000000000000001d32475c72869797979797978e79644e39240f0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1d314455647a8c9fb4cadfd7d4d7dedec9b49e8a78624d41301c0c0000000000000000000000132536485a687e93a1b3b5b1a0988a80776e788da2c7ab95806b6e788498a0b2c5d4c3b49f8a77614c37220e0000000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000000a1a2f404c5e66747b7e7e7a74655d4b3f2e190900000000000000000000000000000000011527374a5c6b8095abc0d5eaf7f4eff2ddc8b39d8875604b3d2c180800000000000000000000000000000000000000000000000000000000081c304354657b8d9fb5bdcdcebfb3aea59d9b9c9fabb2becfc8bbaa9e8977614c3b2a18040000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351527374859657b8b9fb4becfe0cfbeb49f8b7b768caabbcedac4af9a856f5a45301a001e33485e73889db3c8ddebd5c0ab96807f7f7f818799a1b3c4d4cfbeb2a0988473604b3d2d19090000000000000000000000162b40556b808282828282828278624d38220d0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374a5c6b8196abc0d6ebeaf1e8d3bda8937e68594834231300000000000000000000000008182b3c4e606f8399a2a49c8f82786b6161768ba9baad97826d5a62738298a7b8cccdbaa895806b563c2c190600000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000021628384c5e667c879093938f877b655d4b37261401000000000000000000000000000000081d314455647a8c9fb4cadfeae2dfdadce0cbb7a6947e695b4936261401000000000000000000000000000000000000000000000000000000011426364c5e6a7f949eb4bac6cdc6c3b6b2b0b1b4bcc9ccc4b7aa9f8c7c665947341d0c000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a351d3144556277889daabbcedcd2c2b2a0937e69778ca2c8d9dac4af9a856f5a45301a001e33485e73889db3c8ddf2d8c4b09e96949494969ca5b3bfcfdac6b2a098827560554431211406000000000000000000000013283d50626b6d6d6d6d6d6d6d625a4834200b0000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000008182c3d4b6073859ab0c5dae5dedcdeceb8a38e79635645311d10000000000000000000000000000e1e31424c6176848f8e867b6d62594c5774899fb4ae99846f59556176899eb3c8d7c6b29d87725b4935210c00000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000091e324556667c8d9da5a8a8a59c8c7b655544311d08000000000000000000000000000008182c3d4b6073859baabbcee2d8cec9c5c8d1d5c4b49f8a79635443301c0e0000000000000000000000000000000000000000000000000000000008182f4050616c80929fa8b4bac7c7c9c7c5c6cac7c6b9b3a69d8c7e685e4c3a2a1800000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a3530414b6074849aa6b7c8d8d6c5b5a398826d62788da2b7cddac4af9a856f5a45301a001e33485e73889db3c8ddf2dfcdbcb0aba9a9aaabb2b6c3cfddd8c3ad9883746960564b3f32241608000000000000000000000d2133445055575757575757574d483c2b19050000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636495b697e94a2b4c8dcd3cac7cad3c6b19b8574604b3f2e1b0b00000000000000000000000000131f33475861727a7973655d4d483b5d72879db2b09b86715b46576b8096abc0d5cab7a58d78634d38230e00000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000b21364b6074889dabb7c3c3b6aa9c8773604b35200b0000000000000000000000000000132536495b6a7f94a3b5c8d8d8c8bbb4afb4c0d1cdbaa99b8573604b3d2c1808000000000000000000000000000000000000000000000000000000001121334351626c7d8a969fa9adb2b4bac7bbb4b2ada89e95887b68604e402f1c0c00000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a2d3d4d5f6c8196a2b4c4d4d9c9b8a79b85756063788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8ddf2ebdacdc4c0bfbfbfc1c7cad3dee1dac6b2a098877f74655d4f4233261606000000000000000000041526333d404242424242424238342b1d0d000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000091c30435463798a9fb4c0d1d0c2b6b1b6c2c9b5a395806b5d4b392816030000000000000000000000000417293a475460646460544b3f34465b70869bb0b29d8873544351667b90a6bbd0d4c3a7927c67523d271200000000000000091e33485e73889db3c8ddd1bca6917c67513c2712000011263b51667b90a6b7c9d4d3c8b6a58f7a65503a251000000000000000000000000000071c30435463798b9fb4c1d2e2cebbaa9f9aa2b4c8d7c7b4a2947f695b49362614010000000000000000000000000000000000000000000000000000000315253444515f6777818a92989d9fa9a2aa9f9d9892898076655d4e413122120000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a3a4a5b677d929fb0c0d1e3cfbcab9e8978625663788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8ddf2ecdccfc6c2c1c1c1c1c2c3c5c9ccd6cfbeb2a59d94867b6960504433241401000000000000000000071521282b2d2d2d2d2d2d2d2220190d00000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000009192c3d4b6073859ba9bacdd0c0b3a49ca4b6cac1b49f8c7a645746321e12000000000000000000000000000c1c2936434a4f4f4a43362e2f44596e8499aeb49f8a75604a4e64798ea3b9ced4bfaa957f6a55402a1500000000000000091e33485e73889db3c8ddd1bca6917c67513c2712000014293f54697e94a9c4d4e7e6d3c3a8937d68533e281300000000000000000000000005192b3c4a6072849aa9bacddfd4c3b49f8b859aaabbced1c0b49f8a79635443301c0e0000000000000000000000000000000000000000000000000000000007162634414d59626c777d82878a8b8d8c8a88827d766b61584b3f312313040000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a465863798a9fb4bdcdded0bfb49f8d7c665a4d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8ddf2e1cfbeb2adacacacacacaeafb4b9c6cacec3b7b2a49c8c7e6b625042311f0f00000000000000000000040d1316181818181818180d0b050000000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000001142637495b697f94a3b4c7d7c7b3a29a879cb1becebbaa9c8775614b402f1c0c000000000000000000000000000c182530353a39353025182d42576c8297acbbaa8c77614c4f64798fa4b9ced6c1ab96816c56412c1700000000000000091e33485e73889db3c8ddd1bca6917c67513c2712000014293e53697e93a8c1d1e1e1d0bfa7927d68523d28130000000000000000000000000d2035485a697e93a2b4c7d7dfcbb7a59680788b9fb4c3d4cdbaa99b8573604b3d2c180800000000000000000000000000000000000000000000000000000000081623303b484d5961676d727476777675726d6761584c473a2e211305000000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f43546176879ca8bacddbd3c2b3a1947f6a5e4c4d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8ddf2dac6b2a0989797979797989a9ea8adb4bbc8cac2b6aa9f93806b604e3d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000091d31445563798b9fb4c1d1cdbaa99a84798ea0b2c6c8b6a597816c5e4c3a2a17040000000000000000000000000008131c202524201c13152b40556a8095aac8a38e78634e56687e93a8bdd3d6c1ac97816c57422c1700000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000f243a4f647a8fa3b4c4cdcdc3b3a18d79634e38230e00000000000000000000000d1d31414d62788a9eb4c0d1e5d0bfb29d87756b8096a5b7cbd7c7b4a2947f695b49362614010000000000000000000000000000000000000000000000000000000005131d2b343a474c52585d57616261605458524c463a332a1c110300000000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f4a60728399a5b6c6d7d7c6b6a4998372604a404d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8ddedd8c2ad988282828282828385898f989faab7c4d3c8bbb49e937e685b4935211000000000000000000000090f111414141414140f0d07000000000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000009192d3d4b6073859ba9bacdd3c3b49f8b796e8398a8b9cdc3b19f907c665847331f13000000000000000000000000000000070b0f0f0b070014293e53697e93a8baa5907a65566075879cb2c7dcd5c0ab95806b56402b1600000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000d22374b5c70859ba6b4bab9b4a599846f5b4935210c0000000000000000000005182a3b4e5f6f8499a8b9cdded7c7b3a1917c666175879db2bfd0d1c0b49f8a79635443301c0e0000000000000000000000000000000000000000000000000000000000000d18202a34373d4339464b4d4c4a43363d3633291f170c000000000000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745f5e6a7f95a1b3c3d3e1cdb9a89c8676615443384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d786c6c6c6c6d6e70757a828c9da6b7c5d6cebcb49f8b79634e3e2e1b080000000000000004121d24272a2a2a2a2a2a24221b100200000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000021527374a5b6a7f94a3b5c7d7cab6a495806a62788a9eb4c2cebdb39d8876614c41301d0d00000000000000000000000000000000000000000812273c51677c91a6bca7927c6765758399a5b6cadfd4c4a9937e69543e291400000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000071b2e3e4d627888979fa9a89e978777624c3d2c1a06000000000000000000000c1f344759687d92a1b3c6d6e1cdbaa999846f5e57667c91a1b3c7d7cdbaa99b8573604b3d2c1808000000000000000000000000000000000000000000000000000000000000050c181f22282d293336383735302528211f170c0400000000000000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f8a745a667c8d9fb5bfd0decdbcb49e8a7963584636384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d786357575757595560646d7b889da7b8cce0cebaa99a84705c4b37220800000000000000122230393c3f3f3f3f3f3f3a362e201000000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000a1d31445563798b9fb4c1d2cfbeb29c8674605a697f94a4b5c9cbb7a698826e5f4d3b2b180800000000000000000000000000000000000a101b22283a4f657a8fa4baa9947f717b8699a1b3c3d3dfcbb7a68f7a644f3a250f00000000000000091e33485e73889db3c8ddd1bca6917c67513c2712000000102035495a6277828a8e8e898176625948341f0f000000000000000000000c1c30404c6277899eb3bfd0e4d3c3b49f8a78634d4d5e6f8399a9bacdd7c7b4a2947f695b493626140100000000000000000000000000000000000000000000000000000000000000040a0c1218171e212221201c13120c0a04000000000000000000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b49f89746278899eabbccfddd1c0b09e917d675b4a3a29384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d42424237444b4f5d6579899eb3c4d4d8c7b4a28f7a644f362513000000000000091d30404d515454545454544f4a3e2e1b07000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000a1a2d3e4b6074859ba9baced6c5b2a0907b65564b6074869cb1becec4b2a0927d67594836251300000000000000000000000000000005121d242e3738454d63788da2b8b09a8486909ca4b3bfd0e1d4c3b39d8874604b35200b00000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000006192c3c4959626d767978756c6158483b2b18010000000000000000000417293a4d5e6e8398a7b8ccdddfcab6a5957f6a5a49404d62788a9fb4c2d3d1c0b49f8a79635443301c0e000000000000000000000000000000000000000000000000000000000000000000000000030a0c0d0c0b070000000000000000000000000000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc9b39e897475859ba7b8c9dad4c4b4a296806b5f4d3d2d23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d382d2d2631353f4b5b687d92a6b7cbdfd1c0ad98826d5443301c0700000000000f24394d5e66696969696969645c4a36220d000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000021527384a5c6a8095a3b5c7d8ccb9a798826d5d4c4455657b8fa0b2c5cfbeb39e8978625443301c0e000000000000000000000000000e192030393f4b4f566066768ba0b6b4a29a9ca4b1b5c2d0ddd6c6b7a5957f6a5544311d0800000000000000091e33485e73889db3c8ddd1bca6917c67513c2712000000000e1e2c3b484c5760636360564c473a2b1d0d000000000000000000000b1f334658667c91a0b2c5d5e4cfbfb29c8774604b3c35495a6a7f95a4b6cadecdbaa99b8573604b3d2c18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8ddc8b39d88738298a3b5c5d6d7c7b7a69a8473604b41301f23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d382318141d202e3d4b6074889db2c8dddec8b39e8874604a35200b000000000011273c51667c7f7f7f7f7f7f7a644f3a240f000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000a1d314556647a8c9fb4c1d2d2c1b39e8977624c3f374b5d6d8298a7b8ccccb9a79a8472604a3d2c19090000000000000000000004121e2b35404d515d646d757b8197acc2c0b4b0b1b5c2c9d2dfd0c5b9a89d8775604b3727150100000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000000000e1d2a3439454b4e4e4b4538332a1c0d000000000000000000000b1b2f3f4c6176889db3becfe3d6c6b2a0907b665645322c3c4b6074869cb1becfd7c7b4a2947f695b493626140100000000000000000c161c1e2020202020202020200f0d07000000000000000000000000000000020b11132020202020202020201a1812080000000000000000000000000000162b40556b8095aac0d5ead5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7e9d4bea9947f69543f2a14001e33485e73889db3c8dcc6b19c867e93a0b2c2d2e2cdbaa99d877761554431231223384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e0108101d3144556d8298adc2d7e0ccb8a78d78634e38230e00000000001a2f44596f839494949494947f6a543f2a15000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000a1a2d3e4b6074869caabbced9c8b5a3937e685948342e3f4c6177899eb3c1d1c5b3a2937e695b493726140100000000000000000412222f3c484d5e66717a828a91979fb1c5d1c8c5c6c9d2dfd4cac0b3a79e8a7a6457453219090000000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000000000000d181f28323639393632281f170c00000000000000000000031628394c5d6d8297a6b7cbdce1cdb9a898836e5e4c38281d314556657b90a0b2c6d6d1c0b49f8a79635443301c0e00000000000000101e29303335353535353535353524221b100200000000000000000000000006131e2628353535353535353535302d25190b00000000000000000000000000162b40556b8095aac0d5d7d5c0ab95806b56402b1601000000000000000002172d42576c8297acc1d7d7d4bea9947f69543f2a14001e33485e73889db3c8ddc8b39e898a9fb4becfdfcebdb49f8b7a6459473726140e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e00000115273754697f94a9bed4e8d5c5a6917c67513c271200000000001a2f44596f8499a9a9a9a9947f6a543f2a15000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000021628384a5c6b8095a4b5c8c0c0bbaa9b8573604b3b2a1f344759687e93a3b4c6c0c0b49f8a79635544311d0a000000000000000012222f404c5a626f7c868f989fa8acb1bdcee1dcdadbd9cfcac3b7b2a29a897b655c4a392816000000000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000000000000050a161e212423201d150a0400000000000000000000000a1e324657657b909fb1c4d4e5d2c2b49e8a78624d402f1a1527384b5d6e8298a8b9cce1cdbaa99b8573604b3d2c180800000000000c1e2e3b45484a4a4a4a4a4a4a4a4a39362d20100000000000000000000000021324313a3d4a4a4a4a4a4a4a4a4a454137291908000000000000000000000000162b40556b8095aac0c2c2c2c0ab95806b56402b1601000000000000000002172d42576c8297acc1c2c2c2bea9947f69543f2a14001e33485e73889db3c8ddccb8a79e9faabbcedcd2c1b19f937e685c4a3a2a19090e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e00000013283d53687d92a8bdd2e7d2bda8937d68533e281300000000001a2f44596f8499aebebea9947f6a543f2a15000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000091e324556647a8c9fabababababaa9f8c7a645443301d182a3a4b6073859ba8ababababa89b8573604b382815020000000000000e1e2f404c5e667883919ba3adb4bac6c5cedbe7d9cfcac9bcb4afa59d918478655d4b3e2d1b0a000000000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000000000000000003090b0e0e0b09020000000000000000000000000a1a2e3e4b6175879db2becee2dec9b5a4947f6959483422110a1a2f3f4c6277899eb3c1d2d7c7b4a2947f695b49362614010000000016293b4c595e6060606060606060604f4a3e2d1b07000000000000000000000b1e31424e536060606060606060605a5448372512000000000000000000000000162b40556b8095aaacacacacacab95806b56402b1601000000000000000002172d42576c8297acacacacacaca9947f69543f2a14001e33485e73889db3c8ddd5c5b8b3b4bbc8d8d5c5b5a397816d604e3e2e1c0c000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e00000113253654697e93a9bed3e8d4bea9947f69543f2a1400000000001a2f44596f8499aec4bfa9947f6a543f2a15000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000b21364b607587959595959595959591806b5c4a3626140c1c30435463798a95959595959595957f6a5645321d09000000000006192b3c4c5e667c8a99a1b0b5c1c9cdd7d9e1ebd9c9bcb4b0ab9f9991877c6f635a4b3f2f201000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000000000000000000000000000000000000000000000000000000021527384b5c6c8196a5b6cadce3cfbeb19c8673604b3b2b1904001120344859697e93a3b5c9dad1c0b49f8a79635443301c0e000000001c3045596a73757575757575757575705c4a36220d0000000000000000000011263a4e60687575757575757575756f6654412d18000000000000000000000000162b40556b80959797979797979795806b56402b1601000000000000000002172d42576c819797979797979797947f69543f2a14001e33485e73889db3c8dde3d5ccc8c9ced8d9c8b8a69b8574604b4231201000000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d38230e0d0e141c3043546c8196abc1d6e8d3bea8937e69533e291400000000001a2f44596f8499aec4bfa9947f6a543f2a15000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000f24394f647a8080808080808080807c72604a3e2d1808011426364a5b63797f808080808080808075604b36200b00000000000b2035495a667c8c9ea8b3bfc9d2deded5d0d2e3cfbcab9f9a938b847c73675f4d493c2f21110200000000000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000000000000040a0c140b08010000000000000000000000000000091d314556647a8c9fb4c3d4e6d6c5b2a08f7b655544311d0d000005182b3b4b6073859babbccfe1cdbaa99b8573604b3d2c18080000001e33485e73888a8a8a8a8a8a8a8a8a7a644f39240f0000000000000000000013283d53687e8a8a8a8a8a8a8a8a8a846f5a45301a00000000000000000000000011273c51667c8282828282828282827d66513c27110000000000000000000012283d52677d8282828282828282827b65503b2610001e33485e73889db3c8ddf2e7e0dddfe2e2cebbaa9e88786256453224130200000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d382321222326303d4a6073879cb2c7dce8d5c5a6917c66513c271100000000001a2f44596f8499aec4bfa9947f6a543f2a15000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000d22364a5c646b6b6b6b6b6b6b6b6b67605443302010000008182d3d4a5b636a6b6b6b6b6b6b6b6b605645321d0900000000071a2d3d4d6278899eaab9c6d0ddd6ccc9c0babec8cab49f8c857e786f6660554d40352c1e11030000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000000000000b171f212a201d150900000000000000000000000009192d3d4b6074869cabbccfd7d7ccb9a798826d5d4b372715000000000d1d314455647a8d9fb5c5d5d7c7b4a2947f695b493626140100001e33485e73889d9f9f9f9f9f9f9f8e79644f39240f0000000000000000000013283d53687d929f9f9f9f9f9f9f9a846f5a45301a0000000000000000000000000f24394c5e666d6d6d6d6d6d6d6d6d665e4d39240f000000000000000000001025394d5f676d6d6d6d6d6d6d6d6d655e4c38230e001e33485e73889db3c8ddf2fbf5f3f0e0cfbeb49f8c7b655a48382815060000000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d383636373936434b5c677d92a5b6cadfe0ccb8a78e79634e39230e00000000001a2f44596f8499aec4bfa9947f6a543f2a15000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000071b2d3e4a4f565656565656565655524a43362513020000000f1f2d3d494e5556565656565656554b4538281502000000000c21364a5b6e8399a7b9c8d6ddd0c6b9b3aba5abb8bda7927d7069625a514b44373020190e00000000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000000000d1b2933363f353127190b00000000000000000000011426374a5b6b8095a4b6c9c2c2c2c1b39e8977614c3f2e190900000000011426374b5c6c8197a6b8c2c2c2c0b49f8a79635443301c0a00001e33485e73889db3b5b5b5b5b5a48e79644f39240f0000000000000000000013283d53687d92a8b5b5b5b5b5af9a856f5a45301a000000000000000000000000091d30404c51575757575757575757514d40301d0a000000000000000000000a1e30414d52575757575757575757504c402f1c09001e33485e73889db3c8ddf2fffff4e4d2c2b2a0947f695d4b3c2b1a0a000000000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d78634d4b4b4b4c4e515460687a899eb3c3d3e6dec8b39e8874604a35200b00000000001a2f44596f8499aec4bfa9947f6a543f2a15000000000000000000000000000000061c31465b71869bb0c6dbe5d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000010202d36394040404040404040403c353025180800000000010f1f2c35384040404040404040403632281a0a00000000000e23394e63798ea1b2c5d6ddd0bfb3a89e96909aabbea9937e69544d483c3531261912060000000000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c2712000000000d1d2a3a464c544b4437291b0b000000000000000000081d31445563798b9facacacacacacaca3937e68594734211100000000000009192e3e4c6176889eacacacacacaca99b8573604b38271502001e33485e73889db3c8cacacab9a48e79644f39240f0000000000000000000013283d53687d92a8bdcacacac4af9a856f5a45301a00000000000000000000000000122230393c4242424242424242423c39302212000000000000000000000001132330393d4242424242424242423b382f211100001e33485e73889db3c8ddf2fff7e7d6c6b5a498826e614f3f2e1d0d00000000000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde2cdb8a28d7863606060606263676b737e899ea7b8cce1e3d0bfac97826d5443301c0700000000001a2f44596f8499aec4bfa9947f6a543f2a1500000000040d131515151515151515151c31465b71869bb0c6dbe5d0bba6907b66513b26151515151515151515100e08000000000000000000000000000000000000000000000002101b22242b2b2b2b2b2b2b2b2b27201c1308000000000000010f1a21232a2b2b2b2b2b2b2b2b201d150a000000000002152738566b8196abbfcfe4d0bfb3a19989807c90a5c8aa95806b5540352b201d140900000000000000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c271200000005182a3b4858616960554639291a0a00000000000000000b20354b607486979797979797979797948573604b3b2a180300000000000000101f334758677d919797979797979797947e695645311d09001e33485e73889db3c8dddfceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2dfdac4af9a856f5a45301a0000000000000000000000000004121d24272d2d2d2d2d2d2d2d2d27241d120400000000000000000000000005131e25282d2d2d2d2d2d2d2d2d26231c110300001e33485e73889db3c8ddf2ffecdac9b9a89c8675614b433221110000000000000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8dde3cdb8a38e79767676767677787c8087939ea7b8c5d6e4d5c5b3a18f7a644f3625130000000000001a2f44596f8499aec4bfa9947f6a543f2a15000000071521282b2b2b2b2b2b2b2b2b2b31465b71869bb0c6dbe5d0bba6907b66513b2b2b2b2b2b2b2b2b2b2b25231c11030000000000000000000000000000000000000000000000070d0f161616161616161616120b0700000000000000000000060c0e1516161616161616160b0902000000000000091d31455671869bb1c6dbd6c6b3a19983776b778caabbac97826d57422d190e08010000000000000000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000000b1f34485962767f7361574638281808000000000000000f24394f647a818282828282828282827f76615443301d0c00000000000000000417293a4d5f677c8182828282828282828175604b36200b001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a000000000000000000000000000000090f11181818181818181818110f0a000000000000000000000000000000010a1012181818181818181818100e09000000001e33485e73889db3c8ddf2f1e3cfbcab9e8a79635746322514030000000000000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8ddf2d0bca8978e8b8b8b8b8b8c8e91969da6b3b9c5d6e2d4c6b8a799836e5c4a3618080000000000001a2f44596f8499aec4bfa9947f6a543f2a150000041525333c4040404040404040404040465b71869bb0c6dbe5d0bba6907b665140404040404040404040403a372e21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cadfcdb9a89983736260758a9fb4ae99846f59442f1a0000000000000000000000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000000d22374c627786948375615645362614010000000000000d22364a5c646d6d6d6d6d6d6d6d6d6c6a615847362614000000000000000000000c1c30414d5e666c6d6d6d6d6d6d6d6d6c605645311d09001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf1e1d0bfb59f8d7c665b4939291607000000000000000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8ddf2d8c6b5a8a3a0a0a0a0a0a1a3a6abb2b7c4ccd6dfcfc4b7a89e8977624d3e2e1b000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000d213343505555555555555555555555555b71869bb0c6dbe5d0bba6907b66555555555555555555555555504b3f2e1c0800000000000000000000000000000000000000000c161c1e2020202020202020200e0c0600000000000000000000000000000000000000000000000000000000000000000d22374d62778caabbcedec9b49e8a7761555473889db2b09b86715b46311c0b11130d0b050000000000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000051a2f455a6f849aa19a8474605443301c10000000000000071b2d3e4a4f57575757575757575757554c473a2a18080000000000000000000000132330404c51575757575757575757574b4538271502001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a00000000000000050f15172020201f1d150c0a03000000050b0d1b202020201c1a140a0000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde5d4c3b3a195806b5e4c3d2c1b0b00000000000000000e23384d63788da2b8cddac4af9a856f5a45301a001e33485e73889db3c8ddece3d3c6bcb8b5b5b5b5b5b7b8bcc0c8cbd4d8cecabeb2a69d8a7b645948342010000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000013283c50616a6a6a6a6a6a6a6a6a6a6a6a6a71869bb0c6dbe5d0bba6907b6a6a6a6a6a6a6a6a6a6a6a6a6a655d4b37230e00000000000000000000000000000000000000101e2930333535353535353535352320190e000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3c8d8d8c3ae98836e59475b71869bb0b29d88725d3a291d2026282220180d00000000000000000000000000091e33485e73889db3c8ddd1bca6917c67513c27120000051a30455a6f849aa6a2998372604b3f2e190900000000000010202d3639424242424242424242423f37332a1c0c0000000000000000000000000513222f383c424242424242424242413631271a0a00001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a0000000000000917222a2c35353535322a211e160b000e1920223035353535312f271b0d00000000000000000000000000000000000000000000000000000000001e33485e73889db3c8d7d7c7b6a5998372604b402f1f0e0000000000000000000e23384d63788da2b8cdd7c4af9a856f5a45301a001e33485e73889db3c8d7d7d7d7d7d7cdcbcbcbcbcbcccdd1d2d5ccc8c8bbb4aea098887a645d4b3b2b1802000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000152b40556a8080808080808080808080808080889db3c8ddedd8c2ad9882808080808080808080808080807b65503a25100000000000000000000000000000000000000c1e2e3b45484a4a4a4a4a4a4a4a4a38352c1e0e0000000000000000000000000000000000000000000000000000000000000e23394e63788ea3c4d5d5c0ab95806b563a5a6f8499afb49f8a7458463331363b3e37342b1d0f010000000000000000000000091e33485e73889db3c8d5d1bca6917c67513c27120000000d23384d6278889ea9a1957f6a5d4b37271501000000000002101b22242d2d2d2d2d2d2d2d2d2d2a211f170c000000000000000000000000000004121d24262c2d2d2d2d2d2d2d2d2c201d150a0000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a0000000000051727343e424a4a4a4a47403632291b0e1e2b3538454a4a4a4a4743392c1b00000000000000000000000000000000000000000000000000000000001e33485e73889db3c2c2c7baa99d8776615443302212000000000000000000000e23384d63788da2b8c2c2c2af9a856f5a45301a001e33485e73889db3c2c2c2c2c2c2c2c2c2c2c2c2c1c1c0bfbdc5b8b3aeaa9f988f8276645c4b3f2e1d0d00000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000020354a60758a959595959595959595959595959da6b7cbdfefdac6b2a09895959595959595959595959595806a55402b1500000000000000000000000000000000000016293b4c595e6060606060606060605e493c2c190600000000000000000000000000000000000000000000000000000000000c21374c61768ca6b8cbd6c1ab96816c5640586d8297adbaa98b76614c37444b51534d483b2c1f0f0000000000000000000000091e33485e73889db3c0c0c0bca6917c67513c27120000000c2035495a647a8b9fb49f8c7a645544311d0900000000000000070d0f18181818181818181817150c0a040000000000000000000000000000000000090f11171818181818181818170b0902000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a00000000000f22344552576060605f5c554b463929192b3c484d5b5f6060605c564a391a0a000000000000000000000000000000000000000000000000000000001e33485e73889dacacacaca99f8b7a64584736261404000000000000000000000e23384d63788da2acacacacac9a856f5a45301a001e33485e73889dacacacacacacacacacacacacacacacabaaa8a5a79e99938b837a6e61584a3e2e20100000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000020354a60758a9faaaaaaaaaaaaaaaaaaaaaaaab3b7c4d4e7f5e1cfbeb2adaaaaaaaaaaaaaaaaaaaaaaaa95806a55402b150000000000000000000000000000000000001c3045596a73757575757575757575705a4935200c00000000000000000000000000000000000000000000000000000000000a1f33475873889eb3c8dbc6b09b86715e4c566b8095abc7a38d78634e4b556066686259493d2c190900000000000000000000091e33485e73889dabababababa6917c67513c271200000006192c3c4a5c677d91a1ab9c8673604b372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a0000000000152a3e52636c75757574726a615746372735485a627075757575716856382715020000000000000000000000000000000000000000000000000000001e33485e73889797979797958b7c665c4a3a29180800000000000000000000000e23384d63788d97979797979797856f5a45301a001e33485e738897979797979797979797979797979796969493908d88837e776e645c4c473a2e2010020000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000020354a60758a9fb5bfbfbfbfbfbfbfbfbfbfbfc8cbd4e2ecececdccfc6c2bfbfbfbfbfbfbfbfbfbfbfaa95806a55402b150000000000000000000000000000000000001e33485e73888a8a8a8a8a8a8a8a8a78634d38230e000000000000000000000000000000000000000000000000000000000004172a3a596e8398aec2d3c9b5a3917c665d54697e93a9baa58f7a65576169747b7d77635b4937271501000000000000000000091e33485e738895959595959595917c67513c2712000000000e1e2d3e4d5f6e8399aba4937e685544311d08000000000000000000000000050b0d0e0e0e0e0e0e0d0b080200000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a0000000002172c42576c818a8a8a8a877f75615544313e4d6278858a8a8a8a86715645311d09000000000000000000000000000000000000000000000000000000162c41566b8082828282828079665e4c3e2d1c0c0000000000000000000000000c22374c617782828282828282827e69543f291400162c41566b8082828282828282828282828282828281817f7d7b77746e6861594f4a3e332a1c1002000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000020354a60758a9fb5cad5d5d5d5d5d5d5d5d5d5d7d7d7d7d7d7d7d7d7d7d7d5d5d5d5d5d5d5d5d5d5bfaa95806a55402b150000000000000000000000000000000000001e33485e73889d9f9f9f9f9f9f9f8d78634d38230e00000000000000000000000000000000000000000000000000000000000012273c51677c91a4b6cad2c1b39e897b6d64677c91a7bca6917c676b767f8890938979635544311d1000000000000000000000152a3f556a7f808080808080808079634e39240e000000000a1b2836434d62788c9fb29d8774604b35200b00000000000000000000000d181f2223232323232323201d1509000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a000000000013283e53687d939faa9f9c958573604b354a5c71869a9faa9f9f8a75604b36200b00000000000000000000000000000000000000000000000000000014293d51626b6d6d6d6d6c6b635b4c4030200f000000000000000000000000000a1f344759616d6d6d6d6d6d6d6d69614f3b27120014293d51626b6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6c6b6a6865626054534c473a362e1f180c0000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000020354a60758a9fb5c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2bfaa95806a55402b150000000000000000000000000000000000001e33485e73889db3b5b5b5b5b5a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000b20354b6074869cb1bfd0ccb9a79e8c827a737b8fa5baa8937e798189949da6a79b8573604b3e2d1b0700000000000000000013283c50616a6b6b6b6b6b6b6b6b635b4a36210c00000003162839455460686f859aafa5907b66513b2611000000000000000000000d1d2a34373838383838383836312719130500000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a00000000000f253a4f647a8fabbbb4b1a3917c67513c4e64798ea4b4bbbbaa8e79644e39240f0000000000000000000000000000000000000000000000000000000e21344451565757575757564e4a3d302212010000000000000000000000000004182a3a474c5757575757575757544f43321f0c000e213444515657575757575757575757575757575757565553504d4a433637342a221b1004000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000020354a60758a9facacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaa95806a55402b150000000000000000000000000000000000001e33485e73889db3c8cacacab8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000081d314455667c91a1b3c2d2c5b9ab9f988f88859bb0c5b49f8b8f969ea7b2b7b5a395806a5c4a36220d0000000000000000000d203343505556565656565656564e4a3d2d1a07000000091e32455760737d84899eb3ad98826d583a2a1804000000000000000005182a3b484c4e4e4e4e4e4e4d4b443730231300000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0c0c0c0c0c0c0c0c0c0c13283d53687d92a8bdd2e7dac4af9a856f5a45301a00000000000c21364b61768b9fb5c9c1ac97826c57364f64798eabbccec8a7927d68523d2813000000000000000000000000000000000000000000000000000000051626343d4142424242424039362d1f12040000000000000000000000000000000c1c2a343742424242424242423f3b3225140300051626343d4142424242424242424242424242424241413f3e3b38353025221f180c070000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000020354a60758a97979797979797979797979797979797979797979797979797979797979797979797979795806a55402b150000000000000000000000000000000000001e33485e73889db3c8dddfcdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000011527374d5e6e8399a3b5c2cfc9bcb4ada69e9ba3b5c9baa99fa9abb3b9c5cbc1b49f8b7a644f39240f00000000000000000002152533404c505962646360544b44372d1f0f00000004172a3a4b60758492999ea7b8b29d88725947341f0a00000000000000000b1f344859626363636363636260554d41301e0e000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f3924212121212121212121212121283d53687d92a8bdd2e7dac4af9a856f5a45301a00000000000a1e32465772879cb2c7c5b09b857054434b61768a9fb4cac0ab96816b56412c1600000000000000000000000000000000000000000000000000000000081621292c2d2d2d2d2d2b24211a0f0100000000000000000000000000000000000c181f222d2d2d2d2d2d2d2d29271f1406000000081621292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2a282622201c130c0a0400000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000182d42576d82828282828282828282828282828282828282828282828282828282828282828282828282827c66513c26110000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000091930404b6175859ba4b2becacfcac5b8b3b0b5c1d2c7bab4bac7c9cccdc3b6ab9f94806a55402b15000000000000000000102031424e5e6571777978736a6055453828150200000a1f3347586c8196a2afb3b8c5b7a58c77614c37220c00000000000000000d22374c62777878787878787874675f4d3c2b19050000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f3936363636363636363636363636363d53687d92a8bdd2e7dac4af9a856f5a45301a000000000003162939596e8399aec3c9b49e8974604a465772879cb2c7c4af9a856f5a3b2b180500000000000000000000000000000000000000000000000000000000050e14161818181817160e0c070000000000000000000000000000000000000000040a0c181818181818181814120c030000000000050e141618181818181818181818181818181717161513100d0b070000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000152a3f52636d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d665e4c38240f0000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000121e32465762788698a0b2b6c3cad3cbc8c5c9d2dfd7cdc9cdd3cac6bab4a59c8d7f6a61503c28130000000000000000071b2d3e4e60687b868c8f8d887f73605645321d0c00000c21374c61778b9fb4c0c8ccd4c3a38e79634e39240e000000000000000012273d52677c8d8d8d8d8d8d8d897d675a4835200a0000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c53687d92a8bdd2e7dac4af9a856f5a45301a000000000000152a40556a7f95aabfcdb9a88d78624d39596e8398aec3c8b39e8873594834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000f233545525757575757575757575757575757575757575757575757575757575757575757575757575757514c402f1d090000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000031629394859627582929da5b1b6c2c3c7c9cdd7e4ddcfc6c3c3b6b2a89f95877b6961504333210d00000000000000000d22364a5c687e8d9ba3a4a69d948474604b3b2a18040011263b51667b90aabbcedde0d4c3a48f79644f3a240f00000000000000000b20354b6074879da3a3a3a3a79e8a78624d3928160300000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e7964616161616161616161616161616161616161687d92a8bdd2e7dac4af9a856f5a45301a00000000000011273c51667c91a6c6d6c6a6917c66513f556a7f94aabfccb8a78c77624d37220d01010000000000000000000000000000000000000000000000000000000000000000000000020c121420202020202020181610060000000000000000000000000000000000000000000000000000050b0d111415161513100c0a0300000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000061727353f42424242424242424242424242424242424242424242424242424242424242424242424242423c382f2212000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000b1b2b3b4857616e7d87939ca4a9aeb1b4b9c6cccfbfb2aea8a59d958a8075655d4f433325150400000000000000000f24394e647a8c9fabb5c1b8b3a296816c5947341f0b0012283d52677d92a7c4d4e3dfcab7a58d77624d38220d0000000000000000081d314455687e93a6b8b8c5b8a996806b5745321e0900000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde4cfbaa58f7b76767676767676767676767676767676767676767e93a8bed3e8dac4af9a856f5a45301a0000000000030e23384d63788da8b9ccbfaa957f6a554051667b91a6c5d5c5a6907b66513b261616160d0b050000000000000000000000000000000000000000000000000000000000000006141f2629353535353535352d2b23170900000000000000000000000000000000000000000000060c0e18202226292a2b2a2825211e170c0a0400000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000917232a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d26241d1204000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000d1d2b39464b5f67747e868e94989c9ea8aebbc6b2a199938e877f776b60564b3f32251507000000000000000004192e43596e8398aabbc9d2cbc0b49f8b77614c37220c0010253b50657b90a6b7c8cfccc0b29d87725a4834200b0000000000000000011426374b6075889db3c6d6c7b39e8975604b36211100000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2d2beaa998f8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b939caec1d6efdac4af9a856f5a45301a000000000a161e21354a6074899eb4c9c3ae98836e59384d62778da7b8ccbfa9947f6a543f2b2b2b2b2220190d0000000000000000000000000000000000000000000000000000000000021424323b3e4a4a4a4a4a4a4a423f3527170600000000000000000000000000000000000000050e1920232b34373b3e40403f3e3a363329211f170c030000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000000060f151818181818181818181818181818181818181818181818181818181818181818181818181818110f090000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000d1b2832414d55606871797f838789949daec3ae99827e78726a62594b45382e211507000000000000000000091e34495e73889eb3c8d9e7e0cebbaa917c67523c2712000b20364b6075889daab5bcb9b3a2947f6a553c2b1905000000000000000000091e3245566a7f94a8b9ccccb9a7937d68533f2e1c08000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2dac8b7aaa5a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a8aebacbddefdac4af9a856f5a45301a0000000a1b2832363d435470859bb0c5c7b19c87725645485a73899eb3c8c3ad98836e58384040404038342b1d0d000000000000000000000000000000000000000000000000000000000c1f32424f53606060606060605852453523100000000000000000000000000000000000000e19202c35383b484d515455555553504c463937332a1e160b00000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38231111100f0e0b090300000000000000000000000000000000000000000000000000000000000b161e3037444b535c64696e72747f94a9b9a48f7a69635b554c473b32281a1103000000000000000000000a20354a5f758a9fb4cadff3e8d5c5a8937e68533e291300091d324556667c8c9a9faba79e968474604b36200d00000000000000000000021628384c6176899eb3c7d6c5b19c86715d4b37230d000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2e5d5c8bebab6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6bec1cbd9e9efdac4af9a856f5a45301a000003162839454b5355576c8297acc1cab49f8a766056565a70859aafc5c7b19c87725656565656564d483c2b190500000000000000000000000000000000000000000000000000000012263b4f6069757575757575756d64523f2b160100000000000000000000000000000005131e2b353c494d56596266696a6b6a68656157544c473a32281b10020000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000a141a1c20202020202020202020202020202020202020202020202020202020202020202020202012100a01000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38262626252423211e16150f0b0801000000000000000000000000000000000000000000000000000313192731363e4a4e54595c677d92a7bba6917c6651493d37342a1e160a000000000000000000000000081d32485d72879db2c4d5dedaccb8a7907b66513b261100021528384c5e667a848b8e8d898075605645311d0900000000000000000000000a1f3346586b8096a9bacdc9b5a48f7a65503c2b19050000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2f5e5d8cec9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9caced8e6f6efdac4af9a856f5a45301a0000091e32455760686b6b6b7e93a8bdcebbaa8e7a6b6b6b6b6c8196abc1cab49f8b756b6b6b6b6b6b625a4834200b00000000000000000000000000000000000000000000000000000014293e53697e8a8a8a8a8a8a8a826d58422d18030000000000000000000000000000081623303c484d5a636b72777b7e7f807f7d7a76706961584b46392d20120400000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000e1c272f3235353535353535353535353535353535353535353535353535353535353535353535353528251e13050000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d3b3b3b3b3a3a383632282a25201c1408040000000000000000000000000000000000000000000000000009151d202d36393f4350667b90a5c7a8937e68533e2c221f180d030000000000000000000000000001162c41566b8196a6b8c4c9c9bcb39e8875604b36210b00000a1a2f404c5c6470767978756b6057453827150200000000000000000000000417293a4c62778a9fb4c9d2c2ae98836e5a4834200a0000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2ead8c7bab4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4bbc8d8eaefdac4af9a856f5a45301a00031628384b60757d8080808298adc3d9c8ae99838080808080849aafc4cebbaa978180808080808078624d38220d00000000000000000000000000000000000000000000000000000014293e53697e939f9f9f9f9f97826d58422d18030000000000000000000000000008162633414d5a626d7880878c9093959594938f8a857e766a61574a3e30221204000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000a1c2c3943474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3d393023130100000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78635050505050504f4d4b4539403a3530261f180c0300000000000000000000000000000000000000000000000002080f1a21242a394e64798ea9baaa95806a55402b150b05000000000000000000000000000000000c22374c6177889ea6b1b4b2ab9f927d685645321e0900000011222f3e4a4f5861646360554b4539281a0a000000000000000000000000000b203448596c8297abbccfcab49f8b78624d3828160200000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2e2cebaa99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faabbcee2efdac4af9a856f5a45301a00091e32455670849295959598a0b2c6dac6b3a19995959595959aa2b4c7d9c8b19f979595959595917c67523c271200000000000000000000000000000000000000000000000000000014293e53697e93a8b5b5b5ad97826d58422d18030000000000000000000000000516263344505f6778828c959ca4a6a9aaaaaaa8aa9f9b93898075645c4c40302212020000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15001427394a565c606060606060606060606060606060606060606060606060606060606060606060606060524d41301e0a00000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d7866666666666665646360575a554f4b4336342a1e160a0000000000000000000000000000000000000000000000000000070d0f21364b60758a9faaa597826c57422d170200000000000000000000000000000000000b1f344759647a88969c9f9d988d7f6a604e382816020000000311202e363a474c4e4e4b443732281b0a000000000000000000000000000005182b3b4d63788c9fb4cacebbaa95806b5645321e0900000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2dfc9b49f8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8c9fb4cadfefdac4af9a856f5a45301a000b21364b60768ba2aaababadb2becfe2cfbfb3aeabababababafb4c0d0e6cebdb1acababababaa95806a55402b1500000000000000000000000000000000000000000000000000000014293e53697e93a8becac2ad97826d58422d18030000000000000000000000001323334450626b7d89989fabb1b6c2bebfc0bfc8bbb4b0a89e95867a665e4c402f20100000000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15001a2f43566871757575757575757575757575757575757575757575757575757575757575757575757575675f4d39251000000000000000000000000000000000000000001e33485e73889db3c8dde7d2bda7927e7b7b7b7b7b7b7a797876736f6a6460544c473b32281a0f010000000000000000000000000000000000000000000000000000091e324557687e8b909090836e59442f1904000000000000000000000000000000000004182a3b4a5c647780878988837a6a615041311a0a000000000002101b222a333739383631271e160a000000000000000000000000000000000d2035495a6e8398aec0d0c8b39e8875604b36211000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e7a74747474747474747474747474747474747474747e92a8bdd2e7dac4af9a856f5a45301a000b21364b60768ba6b8c0c0c3c6cfdce5ddcfc6c3c0c0c0c0c0c4c7d0dee8dbcec5c1c0c0c0c0ad98836e58432e1903000000000000000000000000000000000000000000000000000014293e53697e93a8bed3c2ad97826d58422d180300000000000000000000000e1e314150626b80929ea8b4bcc9cad3d0cccbcdd9cecac6b9b4a49c8b7c665e4c3e2d1a0a00000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15001c32475c71868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523d281200000000000000000000000000000000000000001e33485e73889db3c8ddf2d5c0ad9c929090909090908f8f8d8b88847f7a746b61594b45382d1f110300000000000000000000000000000000000000000000000000031628394e6068777b7b7b7a644f3a240f000000000000000000000000000000000000000c1d2d3e4a59616b7274736e645c50433323130000000000000000070c171f212423201d150903000000000000000000000000000000000006192c3c4f64798ea2b3c7ccb8a7927d68523e2e1b08000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79645f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f687d92a8bdd2e7dac4af9a856f5a45301a00091e32455673889db3b5b5b5babdc7d5e5d8cac0bdb5b5b5b5b5bdc0cad8e5d5c8bebab5b5bbaf9a846f5a452f1a05000000000000000000000000000000000000000000000000000014293e53697e93a8bed3c2ad97826d58422d18030000000000000000000006192c3c4e5f6b80959eb3b9c6cfcfc6c3bbb7b5b7bdc6c9d2cdc3b6a99f8c7c665c4a38281603000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15001c32475c71879c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927d67523d281200000000000000000000000000000000000000001e33485e73889db3c8ddf2dccabaada7a5a5a5a5a5a5a5a4a2a69d9a958f8780776b60564a3d2f211102000000000000000000000000000000000000000000000000000a1b31424e5962656666645c4a36220d000000000000000000000000000000000000000010202d3a474c565c5f5d584f4a3e3325150500000000000000000000040a0c0f0e0b080200000000000000000000000000000000000000000e22364a5c6f849aafc4d5c5b09b86715c4b37220d000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a53687d92a8bdd2e7dac4af9a856f5a45301a00021628385a70859aa0a0a0a0a4aab7c7e7cabaada8a0a0a0a0a0a8adbacadac8b7aaa5a0a0aa9f97826d58422d18030000000000000000070d0f13141414141414141414141414141414293e53697e93a8bed3c2ad97826d58422d180b060000000000000000000c2035495a687d929eafbcccd6cdbfb3aea6a2a0a2a8b0b5c1ccd3c7baaa9f8a7a645645321e0d000000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15001c32475c71879cb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a7927d67523d281200000000000000000000000000000000000000001e33485e73889db3c8ddf2e8d8cac0bdbbbbbbbbbbbbbab9c4b7b3afaaa59d958a8075635b4b3f2f201000000000000000000000000000000000000000000000000000001324313b484d5050504f4a3e2e1b07000000000000000000000000000000000000000002101c2a343741474a48433a362e201507000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e50667b90a5bbd0c9b5a38f7a644f3b2b18050000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f3935353535353535353535353535353d53687d92a8bdd2e7dac4af9a856f5a45301a0000172c42576c818b8b8b8b8b8f99aac9d9c0ad9c928b8b8b8b8b929cadc0d2beaa998f8b8b8b8a8578624d38230d0000000000000002101b222429292929292929292929292929292929293e53697e93a8bed3c2ad97826d58422d2320190e00000000000000081c2f3f4d62788a9eb4bcccd7c6bab4a199918c8b8d939ba3aebbccd7c8baa89c8675604b3c2b19050000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15001c31475c71869cb1c6cacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabca7927d67523d281200000000000000000000000000000000000000001e33485e73889db3c8ddf2f6e8dcd5d2d0d0d0d0d0d0cfced5cbc8c4c3b7b2a99f958779655d4b3e2e1c0c0000000000000000000000000000000000000000000000000006131d2b34373b3b3b3a362e201000000000000000000000000000000000000000000000000c181f222b3234332e24221b1002000000000000000000000002090b101414100b080100000000000000000000000000000000000000081c304354697e94a9bed3d2c1ad98836d59483420090000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39241f1f1f1f1f1f1f1f1f1f1f1f283d53687d92a8bdd2e7dac4af9a856f5a45301a00000b20354b607375767676767b8fabbccfbda8927e75767676757e92a8c8d8baa58f7b7576767570625a4835200b0000000000000614202d36393e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e53697e93a8bed3c2ad97826d58423e38352b1e0e0000000000000e23384b5d6f8499a8b9cde1cdbaa89f90837b7776787d85949daebcccd7c6b6a495806b5a4834200b0000000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15001a2f455a6f849aafc4d4e7dfdfdfdfe2d4cbc8c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7bca7927d67523d281200000000000000000000000000000000000000001e33485e73889db3c8ddf2eadaccc3bfbebebebebebebfc0c4c9cdd7d4cbc7bab4a59c8a7b655c4b3a2a170400000000000000000000000000000000000000000000000000000d18202226262624221b1002000000000000000000000000000000000000000000000000040a0c161d1f1e190f0d070000000000000000000000000a151d2026292925201d15090000000000000000000000000000000000000b20354b6073879db2c7dcdfc9b49f8b77624c3727150200000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0a0a0a0a0a0a0a0a0a0a13283d53687d92a8bdd2e7dac4af9a856f5a45301a0000081d314455606060606060768b9fb4cac0ab96806b60606064798eaabbcebda8937d68606060554d483c2b19060000000000001424323e4a4e53545454545454545454545454545454545454697e93a8bed3c2ad97826d5854534d493c2b1c0c00000000071a2d3d50657b90a1b3c6d6cfbeb49f8a7c6e6662606268727f949eafc1d2d3c2b49f8a78624d3929170300000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500152a3f546a7f94a6b7c9daecfffae6d4c4b7b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a7927d67523d281200000000000000000000000000000000000000001e33485e73889db3c8ddf2dfccbcafaaa8a8a8a8a8a9aaabafb4b9c6cbd4d7cdc3b6a89f8b7a645847331f0e000000000000000000000000000000000000000000000000000000050b0d1011110f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121a2731363b3e3e3a353127191103000000000000000000000000000000071a2d3e51667c91a5b6cadfe2cebbaa95806a5544311d0800000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a000001152737444b4b4b4b4b5772879cb2c7c4af99846f5a4b4b60758a9fb4cac1ac97816c574b4b4437352b1e0e000000000000091932424f5c6468696969696969696969696969696969696969697e93a8bed3c2ad97826d696968625a493a2917040000000c21364a5b70859aafbfd0d8c8b2a0917c665e514d4b4d54606b8095a3b5c9ddcdbaa996816c5746331e0a00000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000c21364b6175889dabbccfe3f0f4dfcbb7a69d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d927d67523d281200000000000000000000000000000000000000001e33485e73889db3c8ddf2d7c3af9e9593939393939394969a9ea8b2b7c4d1e1d3c6baa99d8876614c3c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f1314151615130c0300000000000412222f38454b505353504b44372e21110300000000000000000000000000000d21364a5c70859aafc3d4e6ead8c8b39d8874604b36201000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a000000091927313536363639596e8399aec3c8b29d88735847455671879cb1c6c5b09a85705b3c35312620190e000000000000011426374f6069797e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8298aec3d8c5b09b857e7e7e7e78625847331f0a0000001325364e63798ea2b4c8e2cebbaa98826d5e4c40373636434b6073859bb1c3d3d7c7b49e8976614c36210c00000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000a1e324657657b8d9fb5c2d2e5f2ddc8b29d8787888888888888888888888888888888888888888888877c66513c271100000000000000000000000000000000000000001e33485e73889db3c8ddead5bfaa95807e7e7e7e7e7e7f818589939da6b4c0d1e2d7c7b7a697826d5a493520080000000000000000000000000000000000040e14162020202020202020100e08000000000000000000000000000000000000000000000000000000000001080b151d202528292b2b2a272015070000000012222f404c56606569696560554b3f2e21110000000000000000000000000005182a3b4e64798ea2b4c8e1f1f2e0cbb7a6927c67523e2d1b07000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a0000000009151d2025282a40556a7f95aabfcbb7a68c77614c38586e8398adc3c9b39e89745a483526221f180d000000000000081d314455697e8e939393939393939393939393939393939393939398a0b2c6dbc9b5a39b939393938976614c37210c0000071c3043546b8196abc0d1dfcab49f8b78624d4030222125314455667b90a5b6cadfccb9a8927d685339291703000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500031629394c5d6c8196a4b5c7d7ead5bfaa95807272727272727272727272727272727272727272727272665e4c39240f00000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d786969696969696a6b6f757e879aa2b4c3d4e5d4c4b49f8c78634d36261401000000000000000000000000000000081621282b353535353535353525231c1103000000000000000000000000000000000000000000000000000009141d202731363a3d3f40413f3c3225150300000a1a2f404c5e66747b7e7e7a74655d4b3f2e19090000000000000000000000000b1f3447596d8297adc0d1e3dfdddfd5c4b09b85705c4a36220c000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a0000000010212e373a3d3d3d51667c91a6c6d4c4a58f7a65503f556a7f94aabfccb9a78d78624d3d3b37342a1d1507000000000b20354b6073899ea8a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9aeb2bfcfe2d2c1b5b0a9a9a9a78f7a654f3a251000000b20354a6074879db2c7dddac9ae99836e5a483522120b1426374a6073879cb2c7dcd6c6af9a846f5746331e0a000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000b1b2f3f4b6074869ca9bacde2dfcab49f8c7a64575d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d514c40301d0900000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78635353535354555656606877849aa5b7cbdfe3cfbcab96816c5443301c080000000000000000000000000000001626333d404a4a4a4a4a4a4a4a3a372e211100000000000000000000000000000000000000000000000003111926313538454b4f52545556544f4332200c00021628384c5e667c879093938f877b655d4b3726140100000000000000000000021528384c62778a9fb4c9dfd4cbc8cbd4c8b4a38e79644f3a2a18040000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a000000081b2e3f4b4f5252525263788da8b9cdbea9937e69545252667b91a6c8d6c5a6917b665252514c473b322515020000000e24394e63798ea7b8bebebebebebebebebebebebebebebebebebebec3c6cfddeddfd2c9c5bebec5a58f7a65503a251000000f24394e64798ea5b7cbdfcfbcab927c67523c2b190400091c3043546b8095abc7d7dfcab49f8a76614c36210c000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000000111d32455663798b9fb4c0d0e2cebbaa9c8775614b404848484848484848484848484848484848483c393022120000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d3e3e3e3e3f38454b596176879db2c4d5e7d9c9b39d8873604b35200b00000000000000000000000000000919334450566060606060606060504b3f2e1c08000000000000000000000000000000000000000000000715212f37444b5256606468696a6b6a614f3c271300091e324556667c8d9da5a8a8a59c8c7b655544311d0800000000000000000000091d3245566a8095a9bacdd4c4b7b2b7c4d1c1ad97826d5847331f090000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a0000000e22374b5d65676767676774899eb4c9c2ac97826d67676767788daabbcebfaa947f6a67676662594f4332201000000013283d53687d92a8c5d6d3d3d8cecac1c1c1c1c1c1c1c1c1c1c1c1c1c5c8d1deeee0d3cac6c1c1baa58f7a65503a2510000014293f54697e94a9c3d4dfcab59f8b77614c37210e0000001325364f657a8fa9bacde1cebbaa907b66503b2611000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000000021528384a5b697f94a2b4c5d6d9c8b6a597826d5f4d3b2b3333333333333333333333333333333327241d12040000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d382929292a28323a4758677d92a6b8cbe0dfcbb7a68e79634e39240e000000000000000000000000000115273750626b7575757575757575655d4b37230c000000000000000000000000000000000000000000061525333f4b55606770757a7d7e80807f6a543f2a15000b21364b6074889dabb7c3c3b6aa9c8773604b35200b000000000000000000000b20364b6075889db3c7d7cbb7a69da6b7cbc9b49f8a77614c3726140100000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a00000010253a4f657b7d7d7d7d7d7d879db2c7c7b19c867d7d7d7d7d7d8b9fb4cac5b09a847d7d7c7b776a614f3e2d1b070000172d42576c8297acc1d7ead8c8bbb4acababababababababababababafb4c0d1e3d3c2b6b1abababa58f7a65503a25100002162838596e8399aec3d8dcc6b19c86715847331f0a0000000b20364b6075899fb4c9ded8c8ab95806b56402b16000000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000000000a1a2d3d4a6072849aa7b8cce0d3c3b19f917c6759483625131d1d1d1d1d1d1d1d1d1d1d1d1d1d110f0900000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d3823141415161e2a3a4b6074889db3c8dde7d4c4a8937e68533e281300000000000000000000000000081d3144556b808a8a8a8a8a8a8a8a7b65503a291704000000000000000000000000000000000000000113243343505d65737c858a8f9294959687725d47321d0011263b51667b90a6b7c9d4d3c8b6a58f7a65503a2510000000000000000000081c2e3f52687d92a6b8cbd3c3b29d889db2c2cdbaa9947f6a5544311d0800000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a000001162b40566b809292929292929da5b7cacab6a49c9292929292929faabbcec8b4a29a929292908b7f6a5c4a36220d00001c31465c71869bb1c3d3e2cebbaa9f969696969696969696969696969aa2b4c8dccab6a49c969696968f7a65503a251000091e32455672879db2c7dcd7c2ad98826d583a2a1704000000091d31455671869bb0c6dbd9c4af99846f5a382815020000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000000000f1c3043546278899eb3becfe1cebeb39e8977625443301c0f0008080808080808080808080800000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000020c1d3144556e8398adc3d8ebd5c0ab96806b56412b16000000000000000000000000000b20354b6074889d9f9f9f9f9f9f98826d5846331f0a000000000000000000000000000000000000000f1f314250616a7b87919a9fa9a7a9aa9c87725d47321d0014293f54697e94a9c4d4e7e6d3c3a8937d68533e28130000000000000000000e23374b5d71869bb1c4d5cab6a5917c91a4b5c9c7b29d8774604b35200f00000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a00000012273d52677c92a7a7a7a7a7b2b7c3d4d3c2b6b1a7a7a7a7a7a7b4bbc8d8d1c0b4b0a7a7a7aa9f8e7a644f39240f0000182e43586d8298a5b6c7d7cab49f8b81818181818181818181818181849aafc5dac6b19c86818181818178634d38230e000b21364b60758a9fb4cadfd4bfa9947f6a543f2a150000000002152738586d8297adc2d7dcc7b29d87725645321d090000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000000001325364859677d91a0b2c3d4e0ccb8a79a8472604a3d2d1a0a00000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000001142637556a7f94aabfd4e9d7c2ad98826d58432d1800000000000000000000000005192b3b51667c91a6b7b5b5b5b5b49f8a76614c362110000000000000000000000000000000000000061a2c3d4e606a7f8d9da5afb4bac7beb29c87725d47321d0014293e53697e93a8c1d1e1e1d0bfa7927d68523d2813000000000000000006192b3c50657a8fa3b5c9dcc7b29d8772869cb1c9cbb7a5917c67513d2d1a07000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2e7dac4af9a856f5a45301a0000000e23394e63788ea8b9bcbcbcc7cad4e1e0d3cac7bcbcbcbcbcbccaced8e6ded1c8c5bcbcc8bbaa95806b55402b1600000c21364b6175879ca9bacdcebbaa95806c6c6c6c6c6c6c6c6c6c6c6c7e93a8bed3c2ad97826d6c6c6c6c635a4935200c000e23394e63788eabbccfe3d1bca7927c67523d27120000000000152a40556a7f95aabfd4dfcab59f8a75604b36200b0000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000000000008182b3b4d5f6d8298a5b7c9d9d5c5b3a2937e695b4a38281502000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000013293e53687e93a8bdd3e8d8c3ae99836e59442e190000000000000000000000000b203448596f8499aec4d4cacacdbaa9937e69533e2d1b0700000000000000000000000000000000000c2135495b687e929fabb6c3c2b5b1a9a69c86715c47311c000f243a4f647a8fa3b4c4cdcdc3b3a18d79634e38230e00000000000000000b2035495a6e8399aec1d2d2c1ab95806b7f94abbccfc3af9a85705b4a36210c000000000000000000000000000000000000001e33485e73889db3c8d7d7ceb9a48e79644f39240f0000000000000000000013283d53687d92a8bdd2d7d7c4af9a856f5a45301a0000000b20354b6074899eb3bbc8b9b9c6c9d2e0e0d3c9c6b9b9b9b9b9b9c9cdd7e4ded0c7c4b9b9b9af99846f5a3b2a1804000a1e334657647a8b9fb4becfc8b49f8c7b65585656565656565656697e93a8bed3c2ad97826d585656564d493c2c19060010253b50657b90a5c9d9ebcfbaa58f7a65503a2510000000000013283d53687d92a8bdd2e3cfbcab8d77624d38220d0000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000000000000000d1d30414c6176879dabbccfe3d0c0b49f8b79635645321d11000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000014293e53697e93a8bed3e8d8c3ae99836e59442e190000000000000000000000011426364d62788b9fb4cadfdfe9d7c7b19b86715c4a36220b0000000000000000000000000000000004182a3a4e63798b9fb4bcc9bdb1a49c94918e7e69533e2914000d22374b5c70859ba6b4bab9b4a599846f5b4935210c00000000000000031729394d62788c9fb4cadfc9b5a38e7964788c9fb5cac8b4a28e79634e3a2917040000000000000000000000000000000000001e33485e73889db3c2c2c2c2b9a48e79644f39240f0000000000000000000013283d53687d92a8bdc2c2c2c2af9a856f5a45301a000000081d3144556c81979faaa4a4a4b1b5c2d2d3c2b6b1a4a4a4a4a4a4b4b9c6d7d0c0b3afa4a4a4a49d88735947341f0b00031729394a5c697e93a0b2c3cfbcab9d8776614c42414141414153697e93a8bed3c2ad97826d5842414138352c1e0e000012273d52677c92a7bcd1e3ceb8a38e79634e39240e000000000011273c51667c91a6bbd1ecdac9a48e79644f39240f0000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000000000000121e334657657b8c9fb4c1d2e2cdbaa99c8674604b3f2f1c0c0000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000005182b3b556b8095aac0d5ead7c2ad97826d58422d180000000000000000000000081c3043546a7f95aabbcededcdedec9b5a38e7a644f392816030000000000000000000000000000000a1f3347586d8298a9bacec3b19f97867f7c7969604f3b261200071b2e3e4d627888979fa9a89e978777624c3d2c1a06000000000000000a1e3346576c8196abbccfd6c6b09b85705c70859ab0c7d1c0ac97826c5847331f080000000000000000000000000000000000001e33485e73889dacacacacacaca48e79644f39240f0000000000000000000013283d53687d92a8acacacacacac9a856f5a45301a000000011426374b6075838b8e8e8e8e9ba3b5c9c9b6a49c8e8e8e8e8e8e9ea8b9cdc7b3a29a8e8e8e8e8e8c77614c37220c00000b1b2d3e4e606e8398a5b6c7c9b7a598836e604e3d2c2c2c3e53697e93a8bed3c2ad97826d58422d2c2320190e00000014293e53697e93a8bed3e2ccb7a28d77624d38220d000000000010253b50657a90a5bacfe5d0bba5907b66503b26110000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000000000000031729394b5d6b8095a3b5c6d7d7c7b5a496806b5d4b3a2a170400000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0b0d0e17203448596f859aafc4daead5c0aa95806b55402b1600000000000000000000000b20354b6074879db2c8d3cac7c8ccd2c2ac97826c5746321e090000000000000000000000000000000c22374c61778b9fb4c7cab7a59781736967635b4f42321f0c0000102035495a6277828a8e8e898176625948341f0f00000000000000011426364b6176899eb3c9d9ccb9a8927d6853687d92a9bacdc9b49f8a76614c3626140100000000000000000000000000000000001e33485e738897979797979797978e79644f39240f0000000000000000000013283d53687d929797979797979797856f5a45301a00000000091e324557606e767879797a859bb1c6c6b19c867a797979797a8a9eb4c9c4af9a847a797979797a75604b36210b000000102031424c6176879da9bacec3b2a0927e685b493827293e53697e93a8bed3c2ad97826d58422d180e0c0600000000142a3f54697f94a9bed4e1ccb7a18c77624c37220d00000000000f253a4f647a8fa4b9cfe4d0bba6917b66513c26110000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000000000000000b1b2e3f4b6074859ba8bacde1d2c2b59f8d7b655847331f1300000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d3823212122242933424d62778b9fb4c9dfe4d2c1a7927d67523d27120000000000000000000004182a3b50667b90a5b7cac3b6b2b3b8c5c9b49e8976614b36210f00000000000000000000000000000011273c51667c91aabbcec7b29d87746054514e493d32241402000006192c3c4959626d767978756c6158483b2b180100000000000000081c304354697e93a8b9ccdec9b49e8975614c61768a9fb4c9cdbaa8947f695443301c080000000000000000000000000000000000162c41566b8082828282828282828278624d38220d0000000000000000000010253a4f657b8282828282828282827e69543f29140000000003162839454b57616364646c8297acc1c9b49e89756464646470859bb0c5c6b19c87716464646464605745321e0900000002141f334658647a8b9fb4bfcfbfb49f8a7963564531293e53697e93a8bed3c2ad97826d58422d1803000000000000152a3f556a7f94aabfd4e1cbb6a18c76614c37210c00000000000f24394f64798ea4b9cee3d1bca6917c67513c27120000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000000000000000000101d31445563798a9fb4bfd0e3cfbcab9d8876614c41311e0e000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d3836363637393a474c606c8197a9bacee2ddc9b5a38d77624d38220d000000000000000000000b1f3447596e8398aec3cab6a49c9ea7b8ccb9a8927d68533d2d1a070000000000000000000000000001162c41566b8196abc8d8c0ab95806b56453639352c1f1406000000000e1e2c3b484c5760636360564c473a2b1d0d00000000000000000b20354b6073879cb2c6d6d2c1ac97826c5746576d8398adc4d4c6b29d8773604b35200f000000000000000000000000000000000014293d51626b6d6d6d6d6d6d6d6d6d625a4835200b000000000000000000000e22374b5d656d6d6d6d6d6d6d6d6d69614f3b271200000000000a1b283239464b4e4f53687e93a8c9cdb9a88d78634f4f576c8197acc1cab49f8a75604f4f4f4f4b4539281603000000000417293a4a5c697e93a1b2c3cdbaa89b8574604b3f2f3e53697e93a8bed3c2ad97826d58422d1803000000000000152a40556a7f95aabfd4e0cbb6a18b76614c36210c00000000000f24394e64798ea3b9cee3d1bca7927c67523d27120000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000000000000000002152737495b687e93a1b3c4d5dac9b7a698836e5f4e3c2c19090000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d4b4b4b4b4c4e5258616c7e939fb1c7d8e7d5c5b19b86715a4834200b000000000000000000000c22374c61778b9fb4c9c7b29c87899eb3c8c6b09b85705b4a36210a0000000000000000000000000003192e43586e8398adc3d1bca6917c6751382823211a0f010000000000000e1d2a3439454b4e4e4b4538332a1c0d0000000000000000071a2d3d51667c91a5b6caddc9b5a38e79644f3950667b90a6b7cbcab6a5917c66513d2c1a06000000000000000000000000000000000e21344451565757575757575757574d483c2b190500000000000000000000081b2e3f4b4f575757575757575757544f43321f0c0000000000000a161e293336393a4f657a8fabbccfc6a6917c67513e53687e93a8c9cebbaa8e79644f3939393632281b0a0000000000000b1b2d3e4f606e8399a5b7c8c6b5a396806b5d4c3a3e53697e93a8bed3c2ad97826d58422d1803000000000000152a3f546a7f94a9bfd4e1ccb6a18c77614c37220c00000000000f243a4f64798fa4b9cee4d1bca6917c67513c27120000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a15000000000000000000000009192c3d4e606f8399a6b8cbe0d4c4b2a0927d685a493726140100000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d786360606060606263676d7681939cadbdcee5e0cbb8a6937e69543c2b1905000000000000000000081c2e3f54697f94aabbcec2ac97818399aec3c8b4a38e79634e38281502000000000000000000000000051a30455a6f859aafc4d0bba5907b66503b26110c060000000000000000000d181f28323639393632281f170c0000000000000000000c21364a5b6f849aafc3d3d7c6b09b86715c4a354b6074889db2c8d4c3af9a846f5b4935210b00000000000000000000000000000000051626343d4142424242424242424238352b1e0e00000000000000000000000010212e373a4242424242424242423f3b3225140300000000000000030b171e2123364b61768b9fb5cac0aa95806b55404f647a8fabbccfc8a8927d68533d2824211e160a0000000000000000102032424c6176879daabbcec1b59f8d7b6558473e53697e93a8bed3c2ad97826d58422d180300000000000014293f54697e94a9bed3e1ccb7a18c77624c37220d000000000010253a4f657a8fa4bacfe4d0bba6907b66513b26110000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000000000000000000000f1f31424c6177889eb3bdcee0cfbeb49e8a78625544311d1000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3cdb8a38e7976767676767677797d828a969fadbacadbdecfbeb39e8875614b36210d000000000000000000000e23374b5d72879cb1c8d3c3a8927d7e93a9c3d1c1ab96816c5645321d09000000000000000000000000051b30455a70859aafc5d0bba6917b66513c2611000000000000000000000000050a161e212423201d150a0400000000000000000004182a3a4e63798ea2b4c8e1cdb9a8937e68533e3144556b8096abc1d2cab59f8c79634e3929170300000000000000000000000000000000081621292c2d2d2d2d2d2d2d2d2d2220190e0000000000000000000000000003101b22252d2d2d2d2d2d2d2d2d29271f140600000000000000000000030a0c1e32465772879cb2c7c3ae99846e593a4b61768a9fb4cac1ac96816c57412c170b090300000000000000000002141f334658647a8b9fb4bfcfbcab9d8876614c4253697e93a8bed3c2ad97826d58422d180300000000000013283e53687d93a8bdd2e2cdb8a28d78634d38230e000000000011263b50667b90a5bbd0e5cfbaa5907a65503b25100000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000000000000000000000001141f344759667c909fb1c2d3e1ccb9a89b8573604b3e2e1b0b000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2d0bca8978e8b8b8b8b8b8b8c8e92979ea8b1bdcad8e0cfc0b2a0927d685746321e090000000000000000000417293a50657a8fa4b6cacab6a48d78798ea5b7cac8b39e8975604b36200e00000000000000000000000004192f44596e8499aec3d1bca7927c67523d2712000000000000000000000000000003090b0e0e0b090200000000000000000000000a1f3447596d8297adc0d1dec9b49e8a76614b3626374e63798ea3b5c9cfbcab96816c5746331e080000000000000000000000000000000000050e14161818181818181818180d0b0500000000000000000000000000000000080e1018181818181818181814120c030000000000000000000000000003162939596e8398aec3c7b29d88725847465772879cb1c7c5b09a85705b3c2b19060000000000000000000000000417293a4a5c697f94a1b3c3c9b7a699836e604e53697e93a8bed3c2ad97826d58422d180300000000000011273c51667c91a6bbd1e3ceb9a48e79644f39240f000000000012273c52677c91a7bcd1e9d7c7a38e79634e39240e0000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a150000000000000000000000000004182a3b4c5e6c8197a4b6c8d8d6c6b4a2957f6a5c4a392816030000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddf2d8c6b5a8a3a0a0a0a0a0a0a1a3a7acb4b9c6cee0d5ccbeb2a298826e5f4e392816030000000000000000000a1f3347586d8298adc2d3c7b29c877272879db2c7ccb8a7927c67523c2c1906000000000000000000000003182d43586d8298adc2d2bda8937d68533e28130000000000000000000000000000000000000000000000000000000000000000021527384c61778a9fb4c9dfd2c2ac97826d57463321364a5b71869bb0c8d8c9b49e8976614c36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfcbb7a58c76614c39596e8398aec3c9b39e89745a4835200b000000000000000000000000000c1c2e3e4f616e8399a5b7c8c4b3a1937e695b53697e93a8bed3c2ad97826d58422d180300000000000010253a4f657a8fa4c6d7e9d0bba5907b66503b2611000000000014293e53697e93a8bed3e1cdbaa98c77614c37220c0000000000000000000000000000000000000000001a2f44596f8499aec4bfa9947f6a543f2a1500000000000000000000000000000c1d2f404b6075869caabbcee2d1c0b49f8c7a645746321e120000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8ddece3d3c6bcb8b5b5b5b5b5b5b7b8bcc2c9cdd7d5cbc5b8b3a0988474604b41311b0b000000000000000000000c21374c61768a9fb4c9d5c5ab96816c6c8196abc4d5c5af9a846f5a49352009000000000000000000000001162b41566b8096abc0d4bfa9947f6a543f2a1500000000000000000000000000050b0d1214120d0b0500000000000000000000091d3145566a7f95a9bacddec9b5a38f7a644f39291a2d3d54697e93aabbceccb9a8937e695443301c0700000000000711171920202020202020202020202020202020202020202020202020202020202020202020080100000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6c4d4c3a5907a65503f556a7f94aabfccb9a78d78624d38230d0000000000000000000000000000102032434c6176879daabbcebfb49f8b796356697e93a8bed3c2ad97826d58422d18030000000000000d22384d62788da8bacde1d2bda8937d68533e28130000000001162b41566b8096abc0d5dec9b49f8974604b35200b0000000000000000000000000000000000000000001a2f44596f8499aeb4b4a9947f6a543f2a15000000000000000000000000000000121e324557647a8c9fb4c0d1e2cebbaa9c8775614b40301d0d00000000000000000000000000000000000000000000000000000000001e33485e73889db3c8d7d7d7d7d7d7cdcbcbcbcbcbcbccced2d2d4cac7c4b8b3a79e92827460564532231300000000000000000000071b2e3e53697e93a9bacdccb8a7907b65657b90a6b8cbcab59f8c78634d37271501000000000000000000000013283e53687d93a8bdd2c1ac97826c57422d170200000000000000000000030e1920222829282220190d0300000000000000000b20364b6074889db3c7d7d7c6b19b86715c4a361b0f22374c61778b9fb4c9d6c6b19c8773604a35200e000000000a19242c2f353535353535353535353535353535353535353535353535353535353535353535351d150900000000000000000000000000000000000000000000000000000000000000000d22374d62778ca6b7cbbea9937e69543e51667b90a6c5d5c5a6917c66513c2711000000000000000000000000000002141f334758647a8c9fb4bfcdbaa99c867460697e93a8bed3c2ad97826d58422d18030000000000000b20354a6074899fb4c9ded5c0ab96806b563625130000000005182a3b596e8399aec3d8dbc6b19b86715443301c080000000000000000000000000000000000000000001a2f44596f84999f9f9f9f947f6a543f2a15000000000000000000000000000000031628394a5c6a7f95a2b4c6d6d8c8b6a597816d5e4c3b2a1808000000000000000000000000000000000000000000000000000000001e33485e73889db3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c1c0bfbdc3b7b2aca69d94887d6d60564538281605000000000000000000000d22364a5c71869cb1c7d7c8b39e8874606074889db3c8cfbcab95806b5544311d08000000000000000000000010253b50657a90a5c6d6c4af99846f5a442f1a000000000000000000000a161e2b35383d3f3d38342b1e160a000000000000081c2e3f52677d92a6b7cbe1cdbaa8937e69533e2e1b0a1f3347586e8399aec5d5cab6a4907b66503c2c190600000719293640444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a31271909000000000000000000000000000000000000000000000000000000000000000b2034485973889db3c0c2ad97826d58374d62778ca7b8c2c4aa947f6a553f2a1500000000000000000000000000000004172a3a4b5c697f94a1b3c4c7b5a496816c687e93a8bdd3c2ad97826d58422d1803000000000000071c30435471869bb1c6dbd9c4ae99846f5443301c070000000b1f34475972879db2c7dcd8c3ad98836e5836261401000000000000000000000000000000000000000000192f44596e838b8a8a8a8a8c7f69543f2a14000000000000000000000000000000000a1b2d3e4b6073849aa8b9cce1d3c3b19f917c665948362513000000000000000000000000000000000000000000000000000000001e33485e73889dacacacacacacacacacacacacacacacacaba9a7a5a59d9790887f76685f4b4538281a0a00000000000000000000031629394f647a8fa4b5c9d5c4ac97826c55556c8196acc3d3c9b39d8874604b35200d00000000000000000000000d22374d62778ca8b9cdc6b19c87715c3a2a180400000000000000000a1b28323c484d5254524d483c32281a0a00000000000e23374b5d71869bb0c4d5dec9b49f8a76614c36211004182a3a51667c91a7b8ccd3c2ae99846f5a4935200b00001124364754596060606060606060606060606060606060606060606060606060606060606060605e443727150100000000000000000000000000000000000000000000000000000000000005182b3b566b8096a2abacac9b86715544485973889eacacaca6947f6a553f2a15000000000000000000000000000000000c1c2e3e4a60728399a6b7c8c2b09f907c687d92a7bdd2c2ad97826d58422d180300000000000000132536576c8297acc9daddc8b39e8874604a35200b0000000d22374c62778ca5b6cadfd5c5a9937e69543e291400000000000000000000000000000000000000000000172c4054656e75757575757569614f3c27120000000000000000000000000000000000101d31445562788a9eb4becfe1cebdb39e8977625443301c0f0000000000000000000000000000000000000000000000000000001e33485e738897979797979797979797979797979797969694928f8c87827b746a61584e4132281a0a00000000000000000000000a1e3246576c8297acc2d2cbb8a6907b65504f647a8fa5b6cacbb7a6917c66513b2b1905000000000000000000000b2034485974899eb4c9c9b49f89745847331f0a0000000000000009192839454b5a62676967625a4b453828190900000006192b3c4f657a8fa3b5c9d5d2c2ad97826d5846331f0a000c20364b6075889eb3c8d5cab49f8c78634d3928160300172c4054656e757575757575757575757575757575757575757575757575757575757575757575705544311d08000000000000000000000000000000000000000000000000000000000000000d21364b60758491959797978a75604b3b5a6f8497979797948877624d37220d0000000000000000000000000000000000101c3043546176879daabbcebdb39e88777c91a6bcd1c2ad97826d58422d18030000000000000012273d52677c92abbccfe0ccb8a78e79634e39241200000417293a52677c91a7c3d3e0ccb8a78e79644e39240f000000000000000000000000000000000000000000001124364754595f5f5f5f5f5f544f4332200c000000000000000000000000000000000001142637495a687d92a0b2c4d4e0ccb8a7998372604a3d2c1a0a0000000000000000000000000000000000000000000000000000162c41566b808282828282828282828282828282828281817f7d7a77726c6660554c463a311e160a0000000000000000000000000c21364b6176899eb4c9ddc8b39e8874604b4b5c72879cb2c7d5c4ae99846f59483420080000000000000000000005182b3b5c71869bb1c6cdbaa88c77614c37220c000000000000011426374557606d787d7e7d786c6056453726140100000b2035485a6e8399aec1c0c0c8b5a48f7a644f3a29170400091d3145566c8197acbec0c0bcab96816b5746321e0900192f44596e838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a73604b35200b00000000000000000000000000000000000000000000000000000000000000091e32455760727c808282828177614c3d52677d828282817e7662594834200b0000000000000000000000000000000000001325364758657b8c9fb4bfcbb8a69a837b8fa5bacfc2ad97826d58422d1803000000000000000d22374c62778b9fb5cadfd5c5aa947f6a55402f1a0a000b1f3346586e8398adc3d8ddc8b39e8874604b35200b000000000000000000000000000000000000000000000719293640444a4a4a4a4a4a3f3c3225150300000000000000000000000000000000000009192b3c4e5f6e8398a6b7c9dad5c5b3a1937e695b49382715020000000000000000000000000000000000000000000000000014293d51626b6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6b6a6865615857514b443733291c1303000000000000000000000000071a2d3d53687d92a8b9cdd4c4ac97816c55443e556b8095aac2d2cab49f8b78624d3626140100000000000000000000192e43596e8398aec3d7c6a38e79644e39240f000000000000081d3144556075828b9294928b8174605544311d0800000d23384d62788b9fabababababaa9c86715d4b371b0b0000021527384f647a8fa0aaabababab9e8975614b36210c00192f44596e84999f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8a74604b35200b0000000000000000000000000000000000000000000000000000000000000003162839455460666b6d6d6d6d615947394d5f676d6d6d6c696158483b2b180500000000000000000000000000000000000008182a3a4b5d6a7f94a1b3c4c5b3a1978197acc1d7c2ad97826d58422d1803000000000000000b1f34485970859ab0c6d6dcc7b19c87725e4c382818141b2b3c4c61768a9fb4c9ded3c2ac97826c5443301c0800000000000000000000000000000000000000000000000b19242c2f3535353535352a2720150700000000000000000000000000000000000000000e1e31414c6176889dabbccfe3d0bfb49f8b79635645311d11000000000000000000000000000000000000000000000000000e21344451565757575757575757575757575757575757565452504c473a3b3531271f170c00000000000000000000000000000c21364a5b70859bb0c6d6cbb7a68f7a655037394e63798ea3b5c9cebbaa957f6a5443301c0800000000000000000002172c42576c8197acc1cfbaa58f7a65503a25100000000000000b20354b607484979faba9ab9f978373604b35200b0000162c41566b8195959595959595948c7c66503f2e1b000000000a22364a5c6d8291959595959595937e68533e281300192f44596e8499aeb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a08a75604b35200b00000000000000000000000000000000000000000000000000000000000000000a1b2836434a5156575757574c473b30414d5257575757544c473a2b1d0d00000000000000000000000000000000000000000c1c2e3f4a60728399a6b7c8bfb59f8a9fb5cad7c2ad97826d58422d18030000000000000005182a3b53697e93a8b9cddecab6a4907c665645362b292d39485a6a7f94a9bacddec9b6a48f7a6550362614010000000000000000000000000000000000000000000000000711171920202020202014120c0300000000000000000000000000000000000000000000131f334758657b8d9fb5c2d2e1cdbaa99b8574604b3f2e1c0c000000000000000000000000000000000000000000000000051626343d414242424242424242424242424242424241413f3d3a37332a26201d1509040000000000000000000000000000021628384e63798ea3b4c8ddc8b29d8874604b3535495b71869bb1c9d9c8b29d8774604b35200c00000000000000000000162b40556b8095aac0d0bba6917b66513c261100000000000013283d53687d92a2b4bcc9bcb4a1927d68533d28130000152a3f546a7f808080808080807f7a665e4c38201000000000071b2d3e4b60727c808080808080807d68533d281300182d43586d8298adc6d6cacacacacacacacacacacacacacacacacacacacacacacacacacab5a08a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000a182530353c404242424237342a2330393d424242423f3733291c0d00000000000000000000000000000000000000000000101c3043546177889daabbcebcab9fabbccfd7c2ad97826d58422d180300000000000000000d21364c6176899eb4c6d7d3c2b19c86746054483b3e3e4a5762788a9eb4c7d7d3c2b19c86715d4b3718080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b10101010101010101010101010172a3a4c5d6c8196a4b5c7d7d7c7b5a396806b5d4b3a291704000000000000000000000000000000000000000000000000081621292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2a2825211f17110b080100000000000000000000000000000000091e3245566c8196acc1d1d4c3ab96816c5443302c3d54697f94abbccfcab7a5907b65503a2a1804000000000000000008142a3f54697f94a9bedac9a7917c67523c27120000000000001b30455b70859ab0c0cfd9cfbfb09a84705b45301b000013273c4f616a6b6b6b6b6b6b6b6a645c4c402f1c020000000000101c30435460676b6b6b6b6b6b6b68604e3a26110014293e54697e93a8b9c8d9e6dfdfdfe0d2c9c6c3c8cbd5d2d3d4d4d4d4d4d4d4d4d4d4cebbaa8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000008131c20262b2d2d2d2d221f18131e25272d2d2d2c29211f170c0000000000000000000000000000000000000000000000001325364759657b8c9fb4c0c9bcb5bcc9dad7c2ad97826d58422d180300000000000000000a1f3346586c8196a8b9cddecab6a498827262595553565c6475859ba8b9ccdecab6a4927d68533f2e1c00000000000000000000000000000000000000000000000000000000000000000000040a0c0a04000000000000000a161e212626262626262626262626262626262f3f4b6074869ca9bacde2d2c2b59f8d7b655847331f1300000000000000000000000000000000000000000000000000050e14161818181818181818181818181818181817161513100c0a0400000000000000000000000000000000000000000b21364b6075899eb3c8decbb7a58f7a644f362622384d62788c9fb5cad4c3ae98836e5947341f0a00000000000003111826303d566b8196abc0cfbcab907b65503b26100000000000001e33495e73889eb3c8ddebdec8b39e89735e49341e00000c2032434f5456565656565656554f4a3e2f221200000000000001142636434b5155565656565656534e42311e0b000c21374c6176899eaabbc8d9e7f7e5d2c2b5b1aeb3b7c4bdbebfbfbfbfbfbfbfbfbfbfc5b49f8a73604a35200b000000000000000000000000000000000000000000000000000000000000000000000000070b1116181818180c0b04010a101218181817140c0a040000000000000000000000000000000000000000000000000008182a3a4b5d6a7f95a2b3c4cfcacfdae7d7c2ad97826d58422d180300000000000000000417293a4c62778a9eb4c1d2d3c2b2a09883776f6a696b717a869ba3b5c6d6cebdb19c8674604b3520110000000000000000000000000000000000000000000000000000000000000000050c171f211f170c00000000000a1a2832363b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b455663798b9fb4c0d0e3cfbcab9d8776614c41301e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c52677d92a7b8ccddc7b29d8773604a35202034485a70859ab0c8d8c9b49f8b77614c37221100000000000011212e36434b5c6f859aafc4cab59f8b77614c37210c0000000000001e33485d73889db2c8dde5dac9b39d88735e48331e0000031525323c3f404040404040403f39362d2012040000000000000008182630353c404040404040403d3a31241302000a1f334758667c8c9faabbc9d9e7dec9b5a49c989da6a5a8a9a9a9a9a9a9a9a9a9a9a9a9a79b86715443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3f4b6072849aa6b7c9d9e3ececd7c2ad97826d58422d18030000000000000000000b203448596a7f95a3b5c5d5cfbeb2a1998b84807e80868f9ca4b5c1d2d1c1b19f907c665544311d08000000000000000000000000000000000000000000000000000000000000040d192029333733291c0c00000002162838454b505050505050505050505050505050505050505b697f94a2b4c9d9dac9b7a698826e5f4d3c2b1808000000000000000000000000000000000000000000000000070d0f2020202020202020202020202020202020202020202020202020202020202020202013110b0200000000000c2135495b70859aafc5d6d4c3ab96816b5443301c192b3c53687e93aabbcecebbaa947f69543f2e1c0800000000081c2e3f4b546065798ea2b4c8bcaf9a846f5847331f0a000000000000192e43596e8398aebbc9d2c9bcab99836e59442e19000000071520272a2b2b2b2b2b2b2b2a24221b100200000000000000000008141c20272b2b2b2b2b2b2b28261e1306000004172a3a4c5e677d8c9fabbcc9d9dcc6b19c8683888d909394949494949494949494949492897b654f362513000000000002090b12121212121212110b0902000000000000000000000000080d0f12121212121212100a000000000000000c161c1e2020202020202020200f0d07000000000000000000000000000000000000000000111c3043546277889dabbccfe3edecd7c2ad97826d58422d180300000000000000000005182b3b4b6073859ba6b8c5d4cfbfb3aa9f999593959ba3b1b5c2d2d1c2b5a397816c5e4c3727150100000000000000000000000000000000000000000000000000000000040c181f2b343a474c473a2917040000091e3245566065656565656565656565656565656565656565656573849aabbccfe3d4c4b2a0927d675a4836261401000000000000000000000000000000000000000000010f1a21243535353535353535353535353535353535353535353535353535353535353535353528261e1306000000021527374d63788da2b4c8dfcab6a58f7a644f3625130d21374c61778a9fb4c9d8c8b19c87725d4b37230b000000000e23374b5d65737b879db2c0bab49e8f7b65503a2a170400000000000010253a4f657b8f9db1b5c2b5b19f8d7a654f3a251000000000030c131516161616161616150f0d0700000000000000000000000001080b121616161616161613110b02000000000c1c30404d5f677d8d9fabbcc9d9c9b5a4937e73787b7d7e7f7f7f7f7f7f7f7f7f7f7f7d77655d4b371808000000000a151d202728282828282826201d150a00000000000000000002101b222527282828282827241d120400000000101e29303335353535353535353524221b100200000000000000000000000000000000000000011426364759657b8d9fb4c0d1d8d8d7c2ad97826d58422d1803000000000000000000000d1d3144556278889ea7b7c4cfcfc8bbb4aeaaa8abb0b5c1c9d2cec0b4a49b8575604b402f1909000000000000000000000000000000000000000000000000000000030b171f2a343b484d58615847331f0a00000b21364b60747b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7d8b9fb4cadfe2cfbeb39e8978625443301c080000000000000000000000000000000000000000000f202d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3d3a312413020000081d3144556b8096abc0d1dcc7b29d87725c4a3618080a1f3347586f8499aec6d7cab6a48f7a654f3a29170400000010253a50657b8b909da5b6b3a99f94806a5d4b371c0c000000000000000e22374b5d6a7f919ca4a3a49c917f6a5d4b37220e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122230414d5f677d8d9fabbcc9d2c2b59f8d7e686668696a6a6a6a6a6a6a6a6a6a6a6762594b3f2e1b000000000a1a2731363d3d3d3d3d3d3d3b3632281a0c000000000000000917202e373a3d3d3d3d3d3d3c393023120000000c1e2e3b45484a4a4a4a4a4a4a4a4a39362d2010000000000000000000000000000000000000000008182a3b4b5d6a8095a2b4c4c2c2c2c2ad97826d58422d18030000000000000000000001152737495a647a899da6b2becacfcecac4bfbec0c6c9d2cdc7bab4a29a86776157453222120000000000000000000000000000000000000000000000000000020a161e29333a474c59626d76614c37210c00000d23384d62788d909090909090909090909090909090909090909090929fabbccfe3ece1ccb9a89a8473604b35200b0000000000000000000000000000000000000000071a2d3e4a4e60606060606060606060606060606060606060606060606060606060606060606060534e42311e0b00000b20364b6074889db3c8ddd3c2ab95806b563e2d1b0004172a3a52677d92a8bacdd3c2ad98826d5846331f0a00000010263b50657b90a9b2b6b3a1998b7f6a62503f2e1c0000000000000000081b2e3f50616a7c868c8e8c867c6a614f3f2e1b080000000000000000000000000000000000070b0e111415161514110e0c0600000000000000000000000000000000000000000004132330414d5f677d8d9fabbcc9cfbcab9f8d7e685f545454545454545454545454524c473b2e211000000002152738454b52525252525252504b4538291c0c0000000000021727343e4b4f525252525252514d41301d0a000016293b4c595e6060606060606060604f4a3e2d1b0700000000000000000000000000000000000000000d1d2e3f4b6072849aa6adadadadadad97826d58422d1803000000000000000000000009192c3c4a5c64798898a0afb5bcc9c8cbd4d8cecac7c7bab4a99f95847661594739281604000000000000000000000000000000000000000000000000010a151d28323a464c59616c788284705a45301b00000d23384d62788da2a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a7b4bcc9d9ebfce8d6c6b4a2927d675236251300000000000000000000000000000000000000000d21364a5c707575757575757575757575757575757575757575757575757575757575757575757568604e3a26110005192b3c51667c91a6b8cbd5cab6a48e79644e39241000000c21364b61768a9fb4c9d5c9b49f8a76614c36211000000010263b50657b90a5c7c3ae9983786961504433211100000000000000000010213343505e667177797771665e4f43322110000000000000000000000000000001080b131c202327292a2b2a292723211a100e090000000000000000000000000000000000000005132330414d5f677d8d9fabbcc9c9bcab9f8d7d675f4d403f3f3f3f3f3f3f3f3f3d37342a1d1003000000091d3145566067676767676767666056473a2917040000000010203445525c64676767676767675f4d39241000001c3045596a73757575757575757575705c4a36220d000000000000000000000000000000000000000000111c3043546277889898989898989897826d58422d18030000000000000000000000000e1e2e3e4a5b6376838f9a9fabaeb2b7c4c8bbb4b1ada99f978b7f736158473a2a1b0a00000000000000000000000000000000000000000000000009141d273139454b58616b77818b9785705b45301b00000d23384d62788da2b7babababababababababababababababababababdcacfd9e7ececece4d1c0b09b85705443301c07000000000000000000000000000000000000000f24394e647a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7e68533d2813000b2035485a6f8499afc4c0c0c3b19c87725c4a36210d0000091e3246576e8398adc0c0c0baa9937e68533e2d1b07000010263b50657b90a5b5bcb3a1998378645c4a3a2a1704000000000000000003152533404d515962646259514c40322515020000000000000000000000000009141d20253035383c3e4040403e3c38352c26231c110900000000000000000000000000000000000005132330414d5f677d8d9fabbcc9c9bcab9f8c7d675e4d402f2a2a2a2a2a2a2a27221f180d00000000000b20364b60747d7d7d7d7d7d7d7b74615847331f0a000000071b2e3e52636c7a7c7d7d7d7d7d7d67513c271200001e33485e73888a8a8a8a8a8a8a8a8a7a644f39240f000000000000000000000000000000000000000000011426364859657b82838383838383827e68533e2813000000000000000000000000000010202e3d4a58616e7a848c94999da6a1a2aa9f9c98928a82786a6055473a2a1c0c000000000000000000000000000000000000000000000008131c263138454b57606a76808a969f9a85705b45301b00000d23384d62788da2b7cdd0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d2d7d7d7d7d7d7d7d7d7c9b49f8975604a35200b000000000000000000000000000000000000000f24394e64798e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927d68533d2813000d22384d62788b9fabababababa595806a553e2d1a0700000316283951667b90a2ababababab9b86715c4a36220d000010263b50657b90989fabbcb3a199897a645847331f0900000000000000000007152230393b484d4e4d483b383022150700000000000000000000000008131c26313536434a4e515455555554514e493d3b382f231c1105000000000000000000000000000000000005132330414d5f677d8d9fabbcc9c9bbaa9f8c7d665e4c402f211515151515120d0b05000000000000091d3145566f84929292929292908676614c3928160300000d22364a5c6c818f929292929292816c56412c1701001e33485e73889d9f9f9f9f9f9f9f8e7a644f39240f0000000000000000000000000000000000000000000008182a3b4b5d656d6d6d6d6d6d6d6d68604e3a2611000000000000000000000000000002101f2d3a474c5d656f787e84888b8c8d8c8a87837d766d625a4b44372a1c0c00000000000000000000000000000000000000000000081218253037444b566069757f89959ea8b09a85705b45301b00000d23384d62788da2b7c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2baa88b76604b36210b000000000000000000000000000000000000000f24394e64798ea3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a8927d68533d281300152b40556a8095959595959595938777614c37220f000000000b20354b607384929595959595958e79644f39240f00000c22374c61777d838d9fb5bfb3a79d8876614c3727150200000000000000000006141f272b34373937342b2a2317090000000000000000000000000e18253037444b5154606366696a6b6a6966635b58504c40382f1f180d000000000000000000000000000000000005132330414d5f677d8d9fabbcc9c8bbaa9f8c7c665e4c3f2f211102000000000000000000000000021527384f647a8ea1a7a7a7a7a495806b5745321e0800071a2d3d4f647a8f9fa7a7a7a79e8977614c37220c00001e33485e73889db3b5b5b5b5b5a48e79644f39240f00000000000000000000000000000000000000000000000d1d2e3f4b505858585858585858534e42311f0b000000000000000000000000000000010f1c2a333f4b4f5a62696f737677787775726d6861584d483c3127190c00000000000000000000000000000000000000000007111c232f36434a556068747e88949ea7b4b9b09a85705b45301b00000d23384d62788da2acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaca08b76604b36210b000000000000000000000000000000000000000f24394e64798ea3b9c6b9b4b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b3b8c5bda8927d68533d28130014293e53697e808080808080807e76615947341f0a00000000081c30435460757d808080808080807b65503b261000000a1f34475961686e7e93a5b7c5b7a696816c5544311d080000000000000000021424323b3e4646464646423f3527170600000000000000000002101e2b36434a5560666e74787c7e7f807f7e7c78736d655e504c3f342a1d10020000000000000000000000000000000005132331414d5f687d8d9fabbcc9c8bbaa9f8b7c665d4c3f2e2010010000000000000000000000000a22364a5c6e8399abbcbcc2b39e8975604b362513000c21364a5b6e8399aebdbcb8a795806a5847331f0a00001e33485e73889db3c8cacacab9a48e79644f39240f00000000000000000000000000000000000000000000000011212e373b43434343434343433e3a3124140200000000000000000000000000000000000c171f2e373c494d54595660626261605558524c463a352b1d1509000000000000000000000000000000000000000006101b222e37404c546067737d87939da6b3b8c5c5b09a85705b45301b00000d23384d62788d979797979797979797979797979797979797979797979797979797979797979797978b75604b36210b000000000000000000000000000000000000000f24394e64798ea3b9b9a89e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ea6b8bda8927d68533d28130012263b4f60696b6b6b6b6b6b6b696158473a2a18040000000001142636455660686b6b6b6b6b6b6b655d4c38230e000004182a3a474c536074879db2c7c4b39e8975604b36200b00000000000000000c1f32424f545b5b5b5b5b57524535230f00000000000000000210202e3c48546068747c83898d919395959593918d88827b70655d4c483b2e2012040000000000000000000000000000000005132331414e5f687d8d9fabbcc9c8baa99f8b7b655d4b3e2e1f0f000000000000000000000000071b2d3e4e63798c9fb4c8ccb8a7937e685443301c07192c3c4e63798c9fb5cac3b39e8876614b3a2a180400001e33485e73889db3c8dddfceb9a48e79644f39240f00000000000000000000000000000000000000000000000003111c23252e2e2e2e2e2e2e2e28261f14060000000000000000000000000000000000000004101b222b35383f38454b4c4d4c4b44373d36332920190e0100000000000000000000000000000000000000060f1a212d363f4b4f5e66727c86929da5b3b7c4ccc4b7af9a846f5a452f1a00000c21374c617681828282828282828282828282828282828282828282828282828282828282828282828173604b35200b000000000000000000000000000000000000000f24394e64798ea3b9b49e8a85868686868686868686868686868686868686868686889eb3bda8927d68533d2813000c1f32424f5356565656565656534c473a2a1c0c00000000000008182838454b5256565656565656504c3f2f1c080000000c1c2a343744556c8297acc1ccb9a78e79644f39240f000000000000000012273b4f616970707070706d63523f2a0b000000000000000010202e3f4b5a62727d8791989ea7a6a9aaaaaaa9a6a79e9890857b6f62594b3e302212030000000000000000000000000000000005132331414e5f687e8d9fabbcc9c7baa99f8b7b655c4b3d2d1e0e0000000000000000000000001021364a5b6d8298aabbcec5b19c8773604a35200f2035495a6d8298abbccbb7a5947e695746331c0c0000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000080e10181818181818181813110b0200000000000000000000000000000000000000000000080e1920232928323637383736312728211f170b0600000000000000000000000000000000000000050e19202c353e4a4f5d65707b86919ca4b2b7c3cbc5b8b3a69d927d68533d281300000a1f334758616d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d605544311d08000000000000000000000000000000000000000f24394e64798ea3b9b09b85717171717171717171717171717171717171717171718196acbda8927d68533d281300021424323b3e404040404040403e37332a1c0c00000000000000000a1a2832363d404040404040403b382f211100000000000c181f2737556a7f94aabfd6c5a6917c66513c2711000000000000000014293e54697f8586868686816d57392917030000000000000d1d2e3e4b5d647884929da5adb3b8c5bebfc0bfbec5b8b3ada39b908477645c4d40302111000000000000000000000000000000000005132331414e5f687e8d9fabbcc9c7baa99e8a7a645b4a3c2c1d0d0000000000000000000000071a2d3d4d63788b9fb4c7cab6a4907b66513d2d1a2b3b4d63788b9fb4c9c2b29d8774604b392917000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d14161e21222322201d15130c0a0400000000000000000000000000000000000000020d18202b353d494e5c646f7a85909ba3b1b6c2cac6b9b4a79e94887d68604e3a2611000004172a3a474c5757575757575757575757575757575757575757575757575757575757575757575757574b4437271501000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b6c8196acbda8927d68533d2813000006141f26292b2b2b2b2b2b2b29211f170c000000000000000000000a161e21282b2b2b2b2b2b2b26231c110300000000000004152a3f556a7f94aabfd1bca6917c67513c27120000000000000002162838596f84999b9b9b9b88735746331e0a000000000005192b3b4b5c647b899aa2b2b6c3c8ccd6cdc9c8cacfd5ccc8c1b5b0a29a887a665e4d3f2e1c0c000000000000000000000000000000000005132331414e5f687e8d9fabbcc9c7b9a89e8979635a493b2b1b0b00000000000000000000000f2035495a6d8297a9bacdc2af9a846f5c4a36213448596d8297aabbcab6a4927d685645321b0b000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000010a101220202020202020201e1b130b0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0d0d0c0b08020000000000000000000000000000000000000000000009151d2b343c494d5b636e7a848f9aa2b1b5c1cac7bab4a89e95897f7568604e42311e0b0000000c1c2a3337424242424242424242424242424242424242424242424242424242424242424242424242353127190900000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b464646464646464646464646464646464646576c8196acbda8927d68533d2813000000020c121416161616161616140c0a0400000000000000000000000003090b1316161616161616100e08000000000000000001162c41566b8196abc0d0baa5907b65503b261000000000000000091e32455672879db0b0b0a68b76614c36210c00000000000b20344859647a8a9ea7b4c0cad0c7c3c7bab4b3b4bcc9c8cbd1c9c0b3a69d8b7d665d4b3a2a1804000000000000000000000000000000000005132331414e60687e8d9fabbccfc6b8a79d8878635948392918080000000000000000000006192c3c4d62788b9fb4c6c8b4a28e79644e3b2b3b4d62788b9fb4c8c1b19c8673604b38281500000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000005131e25273535353535353535343029201d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091927313b484c5a626d79838e99a1b0b4c0c9c8bbb4a99f968980766960564e4131241302000000000c171f212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d15090000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b463131313131313131313131313131313141576c8196acbda8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d42586d8297adc2d9c9a48f79644f3a240f000000000000000b21364b60768b9fb5c5c5a48e79644f39240f000000000a1d30414d6278889ea8b8c5d1ccbfb3aea6a99f9e9fabaab3b8c4ced0c4b7a99f8b7b655847331f0f00000000000000000000000000000000000005132331414e60687e8d9fb5bcccc5b7a69d877862574636251300000000000000000000000e2035485a6c8196a8bacdc0ad97826d59483447596c8196a9bac9b5a3917c675544311a0a00000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000001132330393d4a4a4a4a4a4a4a4a49453e363127190d00000000000000000000000000000000000000000000070d0f202020202020202020200a040000000000000003090c171e202020202020202012100a010000000000000000000002152737444b59626c78828c99a1afb3bfc8c9bcb5aa9f978a81776a61574b453831231306000000000000040a0c1818181818181818181818181818181818181818181818181818181818181818181818180b0801000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311c1c1c1c1c1c1c1c1c1c1c1c1c1c2c41576c8196acbda8927d68533d28130000000000000000000000000000000000040a0c10131415151412100c0a03000000000000000000000000000000000000000000031629395a6f859aafc4cfbcab8d78624d38230d000000000000000e23384e63788dabbccfbca7917c67523c2712000000001024394d5f6f849aa6b8c6d5c5b8b3a199918c8a898a8e949da6b1bdccd4c7baa99d8876614c3d2d1a0700000000000000000000000000000000000005132331414e60697e939eafbecec4b7a59c8675615443301c0f0000000000000000000005192b3c4c62778a9fb4c6c9b49f8b77624c3a4c61778a9fb4c7c0b09b85715f4d3726140000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000a1e30414d5260606060606060605e5b534b44372b1d0d00000000000000000000000000000000000000010f1a2124353535353535353535351f170c00000000000b161e212c33353535353535353528251e1305000000000000000000081d314455606b77818b989fabb2bfc7c6bab4ab9f988b82786b61584c463932281a130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060606060606060606060606172c41576c8196acbda8927d68533d28130000000000000000000000000000070d0f181f222628292a2b292725211e160e0c070000000000000000000000000000000000000a1e32465773889db2c8cab49f8a75604b36200b0000000000000011263b50667b90a5c9dabfaa947f6a553f2a15000000081c2f3f51677c91a2b3c5d5c7b8a79e90837c77747375797f88979fafbcccd7c7b7a697826d5b4a36210b0000000000000000000000000000000000000005132331424f606a8095a0b1c1d2c3b5a4998372604a3d2d1a07000000000000000000000e1f3448596b8096a8b9ccbaa995806b5646586b8095a9bac8b4a2907b6550413019090000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000001025394d5f6775757575757575757370686055483b2b19090000000000000000000000000000000000000f202d36394a4a4a4a4a4a4a4a4a4a33291c0c0000000b1b28323642484a4a4a4a4a4a4a4a3d3a3023130100000000000000000b20364b6074808a979faab4bcc9c6b9b4a89f978c82786c62594c473a33291e160a000000000000000c161c1e202020202020202020202020202020202020201f1d1b18140f0b0801000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d281300000000000000000000000008101b22242a33373b3d3e40403e3d3a36322923211a0f09000000000000000000000000000000000c21364b61768ba6b7cbc7b29d88725544311d080000000000000013283e53687d93a8bdd2c2ac97826d57422d180200000e23374b5d71869cb1c0d0cdbaa99e897b6e6661585560636a7581959eafbfd0d4c4b59f8c79634e3929170300000000000000000000000000000000000000051324324250626d8297a3b5c6d2c2b3a1947e695b4a3621120000000000000000000005182a3b4c6176899eb3c5c7b39e8875604c6176899eb3c7bfaf9a846f5d4c382312000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000012273d52677d8a8a8a8a8a8a8a8a89857e746259483727150200000000000000000000000000000000071a2d3e4a4e6060606060606060605e463a2917040003162839464b575e6060606060606060524d41301e0a00000000000000000c22374c61778c9fa9b4bbc8cfccb9a89e948a82796d635a4d483b332a1e170b0300000000000000101e293033353535353535353535353535353535353535353433312d2a24201c14080700000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d28130000000000000000000003111c232e363a3a474c50525455555452504b463939362d241c120400000000000000000000000000000f24394f64798ea4c4d4c5b09a85705b3727150200000000000000152a3f556a7f94aabfd4c3ae99846e59442f1904000010253b50657b90a4b6c9d7c6b49f8b7a655d514c47444b4e57616c8095a1b3c9d9cfbcab98826d5746331e0a000000000000000000000000000000000000000006142433434b6074859ba8b9cdcfbfb49f8b79634e40301d09000000000000000000000d1f3347586a8095a7b8ccb8a7937e68576a7f94a8b9c9b3a18f7a644f3f2f1c04000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000001025394d5f6b8096a19f9f9f9fa79e9a938677625544311d10000000000000000000000000000000000d21364a5c70757575757575757575705846331f0a000a1e324657616c737575757575757575675f4d3a251000000000000000000c22374c61778ca1bac7ced8dec9b49e897f766d635b4d493c342b1f180c0300000000000000000c1e2e3b45484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494846433f3a353026211a0f060000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d28130000000000000000000a161e2e373e4a4f5758616568696a6a6967656157564e4a3d382f1f170c0000000000000000000000000012273c52677c91a7bcd1c2ad98836d58432e180000000000000001162c41566b8196abc0d6c5b09b85705b46301b060005192b3c576c8297acc2d3cdbaa8947f6a5c4c3f3733313539464b60728399abbccfdac9b49f8a76614b36210c00000000000000000000000000000000000000000006151d32455662788a9eb4c2d3cdbaa99a84705e4d3924100000000000000000000004172a3a4c6176899eb3c4c5b19c86716075889eb3c6bcab99836e5c4b37211100000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000a1e30414b60728399a4b6c5c5b8b3b0a49b8574604b3f2e1b0b0000000000000000000000000000000f24394e64798a8a8a8a8a8a8a8a8a76614c36210c0a1a2f404b617581888a8a8a8a8a8a8a8a7d67523d281200000000000000000c22374c61778ca1b0b4c0c9d2ccb9a89e94867e766a61574b453831261c13080000000000000016293b4c595e6060606060606060606060606060606060605f5f5d5b58544f4b4336362d20190e00000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d281300000000000000000b1b28323f4b505c646c72777b7d7e7f807e7c7a76716b635b514c40332a1c0f010000000000000000000000152a40556a7f95aabfd4c0aa95806b55402b160000000000000003182d42586d8297adc2d7c7b29c87725d47321d08000b2034485a73889db2c8ddc9b49f8a76614c3d2f211f1d202832435463798c9fb4cadfcdbaa9917c67513c27120000000000000000000000000000000000000000000002152838495a697e94a4b6cad7c7b4a2917c66513e2d1b07000000000000000000000c1e3346576a7f94a6b8cab6a4907b697e93a7b8c7b49f8c79634e3e2e1b0300000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000001131c3043546176869ca7b9c9ccc8c2b5a395806b5d4b3929170300000000000000000000000000000f24394e64798e9f9f9f9f9f9f9f8b76614c36210c1628384c5e6d82979d9fab9f9f9fa899846f5f4d3a251000000000000000000b21364b6075838f9aa2b0b5c1cac6b9b4a49c94897f756960564b4437302518110700000000001c3045596a73757575757575757575757575757575757575757472706d696460544e4a3d352b1e14000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000000000000000b1b2939454b5d65717a82878c909293959593928f8a86817970665e4c473a2d1f0f0100000000000000000002172d42576c8297acc1d3bea8937e69533e29140000000000000003192e43586e8398adc3d8c7b29d88725d48331d08000d22384d62788da6b7cbd9c4af99846f5846331f110a080b162536495b70859aafc5dad7c7ac97816c57422c1700000000000000000000000000070b0b090200000000000a1a2c3c4b6073869cb1c6d6d1c0b09b85715c4a36220d00000000000000000000031729394b6075889db3c3c2ad988373879db2c5baa997826d5b493620100000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000114263646586379899eabbccfded2c1b49f8c7b655746331e1200000000000000000000000000000f24394e64798ea3b5b5b5b5b5a18b76614c36210c1e324556667b90a0b3b5bcb5c1b49e8a78624d41301e0a0000000000000000091e324556606f7a85909ba3b1b6c2cac2b6b1a79e94887e746860554a43362f221b10020000001e33485e73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898886827f7a746c635b4d493c311c130800000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d28130000000000000a1a293a4657606d7b868f979da5a5a7a9aaaaa9a7aa9f9b968e857b6d61584a3d2d1f0f00000000000000000004192e43596e8398aec3d2bca7927d67523d28120000000000000004192e44596e8399aec3d8c8b39d88735e48331e090011263b50667c90a5c4d4d5bfaa95806a553a29170100000008182c3d546a7f94a9bfd4dac5af9a85705a45301b00000000000000070c0e1216131c20201d150a07000000000e1d314455677d92a8b9ccddc9b5a38f7a644f3a240f00000000000000000000000b1e324557697e93a5b7c9b49f8a7b91a5b6c6b49f8b78624d3d2c1a020000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000818293a495b667c8d9fb4becfe3cfbcab9d8776614c41301d0d000000000000000000000000000f24394e64798ea3b9cacacab6a18b76614c36211a2c3d4b6074879cb2becacfc8b5a3937e695a4835231301000000000000000002162838454b5d65707b85919ca4b2b7c3cac5b9b3a69d93877d736760544c40362d20110400001e33485e73889d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9b98948f8881796e625a4e4230251808000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d281300000000000316283846586175828d9ba3acb2b7c3bdbebfbfbec8bbb4b1aba29a908276635b4a3d2c1d0c0000000000000000051a2f455a6f849aafc4d1bca6917c67513c271200000000000000041a2f44596f8499aec4d9c9b39e89745e49341f090013293e53687e93a8bdd3d3bda8937e68533e2913000000000012273c52677c91a7bcd1dcc7b29d87725d48321d0000000000010f1a2123272b253035363228221b10020000011426374b6075899eb3c9ded2c1ab96816c563929170300000000000000000000031628394b6074879db2c3baa89d889db3c3b9a896816c5a48351f0f000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000b1b2c3d4c5e697f94a0b2c1d2d9c9b7a597826d5f4d3b2b18080000000000000000000000000f24394e64798ea3b9cedfcbb6a18b76614c36212135495b6a8095a5b6cadfcebbaa9b8573604b3c2b1905000000000000000000000a1a28323f4b505e66727c86929da5b3b7c4ccc4b8b3a59d92867c72665e4f4a3e2f221100001e33485e73889db3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b4b2b0ada9a79e968c837868604a43362513000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d281300000000000a1e324556617684979fabb5c1c7cad4d2cfcdcdcfd9cecac6c0b4afa0988879635b493b2a180400000000000000061b30455b70859ab0c5d0bba5907b66503b261100000000000000041a2f44596f8499aec4d9c9b39e89745e49341f0900152a3f546a7f94a9bfd4d2bda7927d68523d2813000000000011263b51667b90a6bbd0dec8b39e89735e49341e00000000000f1f2d36393d4136434a4b4538362e2010000000091e3245566e8398adc3d8dbc6b19b86715746331e0a00000000000000000000000a1d324556687e93a5b6c6b7a69da6b7c5b49e8a77614c3c2b1901000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000f1f2f404f616d8298a3b5c4d4d4c3b1a0917c6759483625130000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c362130414e63798b9fb4c3d3d3c2b49f8b79635443301e0e0000000000000000000000000a161e2e37404c546067737d87939da6b3b8c5cbc3b7b2a49c91857b70645c4c402f1c09001e33485e73889db3c8cacacacacacacacacacacacacad9cecac9c7c5c2c5b8b3ab9f998b7e6c605443301c130000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000000000a1a30404b6074859aa2b5bcc9d2d4cac7bfbab8b8babfc6c9d2d1c8beb2a69d8879635947341f110000000000000004192f44596e8499aec3d0bba6907b66513b26170e0c0600000000041a2f44596f8499aec4d9c9b39e89745e49341f0900152b40556a8095aabfd5d3bea9947e6954362513000000000012283d52677d92a7bcd2dec8b39e89735e49341e00000000071a2d3d4a4e52565a546060564f4a3e2e1c0c00000216283854697e93a9bed3dfcab59f8b76614c36210c0000000000000000000000021528384b6074879cb2c2c4b7b3b7c4b8a795806a5947341e0e00000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000001112232434b6074859ba6b7c7d7cebeb39e8977625443301c0f00000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36293a4d5f6f849aa9bacddac9b6a495806b5b4a362614000000000000000000000000000002111c232f36434a556068747e88949ea7b4b9c6cac2b6b1a39b90847a665e4c38230f001e33485e73889db3c8dddfdfded1c8c4c4c4c4c4c4c4c4c4c5c6c9cdd7d5ccc9bcb5a99f938172604a41311c0c00000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000000021527384d5f6d8197a3b4c0cfdacfc3b6b2aaa5a2a3a5a9b1b5c2cdd7cfc4b7a69d8877614c3f2f1c0800000000000002182d42576d8297acc2d3bea8937e69533f332923211a0f010000041a2f44596f8499aec4d9c9b39e89745e49341f0900152a3f556a7f94aabfd4d7c2ac97826d5443301c0b00000009192d3e556a8095aabfd5ddc7b29d88725d48331d000000000c21364a5b63676b6f73757571645c4a3a291704000011263b51667b90a6bbd0e3cfbcab8d78634e38230e0000000000000000000000000a1d314455677d92a4b6c9cbc8cbc4b39e8976614c3b2a180000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000004151e3245566277889da9bacde0ccb8a79a8472604a3d2c1a0a000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36334658677d92a2b3c7d7cfbcab9c8674604b3d2d180800000000000000000000000000000000081218253037444b566068757f89959ea8b4bac7cac1b5b0a29a8d7c66503b2611001e33485e73889db3c8ddf2e3d1c0b4afaeaeaeaeaeaeaeaeafb1b4bac6cacfd9cfc7bab49f96816c5f4d3a2a1804000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000000091d314556677c919fb1c1d1dac9bcb5a59d948f8d8d8f949ba3b4b9c6d7d5c4b7a698826d5d4b37230f0000000000000014293e53697e93a8c2d2c4af99846f5d4c463a39352c1f0f0000041a2f44596f8499aec4d9c9b39e89745e49341f090013293e53687e93a8bdd3ddc7b29d8773604a39291a1210121927374a5c70859bb0c5dadac5b09b85705b46301b000000000e23394e63797d8084888a8a867a645846331f0800000f253a4f647a8fa4b9cfecdac9a48f7a644f3a250f000000000000000000000000011527374b6073869cb1c1d2d7cbb7a6947f695746331d0c0000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000021628384859647a8b9fb4bdcdd5c5b3a1937e695b49382715020000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c363e4c6176889db3c0d0d4c4b59f8d7b655645321f0f0000000000000000000000000000000000000008131c263138454b566069768089969fa9b4bbc8c9c0b4ab99846f59442f1a001e33485e73889db3c8ddf2dcc8b4a29a99999999999999999a9c9fa8adb4bcc9d6d7cdbdb09f927d675847331f0a000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b111111111111111111111111172c41576c8196acbda8927d68533d28130000021527374b6074879db2bdcee3cfbcab9f95877f7a78787a7f86929ea8b9c6d7d4c4b2a0907b65503d2c1a060000000000000e24394e63798ea4b5c9cab59f8d7b6961585b4e493d2c1a0600041a2f44596f8499aec4d9c9b39e89745e49341f090011263b50667b90a5c3d3dfcab7a5917c665746382d2726272d374455647a8ea3b4c8ddd8c7ac97826d57422d18000000071c31475c71869296999d9f9f9b8876614c362614050010253a50657a8fa5bacfe4cfbaa5907a65503b251000000000000000000000000000091c304354677c91a3b5c2c2c2b29d8875604b392917000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000000a1a2b3b4b5c687d929eb0c0d0d0bfb49f8b79635645311d110000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c364a5c6c8196a6b7cbdfcbb7a697816c5d4b3828150100000000000000000000000000000000000000000009141d273138454b57616a77808a979faab4bcc9c9b09a85705b45301b001e33485e73889db3c8ddefdac4af9a8484848484848484848586898f989fabb9c5d6e1cdbdb39e8977614c382815020000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b463126262626262626262626262626262c41576c8196acbda8927d68533d28130000081d314455697e93a5b7cadbcdbcb59f8d80746a656363656a737d8a9ea8bacde1cfbeb09b85705b4936210c0000000000000c21364a5b71869cb1bfcfbcab9e8a7e767370635b4935210c00041a2f44596f8499aec4d9c9b39e89745e49341f09000d22374c62778ca5b6cadfd4c3b29c867561564a3e3c3b3c3d4a556073849aafc1d1e2cebaa9927d68523d281300000002172c42576c8197abafb2b5b5a6947f6954433020181618293952677c91a7bcd1e7d5c5a48f79644f3a240f00000000000000000000000000011426364a6072869bacacacaca4937d685645321b0b000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000d1d2e3e4e5f6c8196a2b3c3d3cdbaa99b8574604b3f2e1b0b00000000000000000f24394e64798ea3b9cee0cbb6a18b76614c4354647a8c9fb4c4d5cfbeb29d8876614c3f2e1a0a0000000000000000000000000000000000000000000000010a151d283239464c58616b77818b989fabb5bcb09a85705b45301b001e33485e73889db3c8dde2cdb8a28d786f6f6f6f6f6f6f6f7071757a838c9ea7b9cce0e0ccb9a796806b5645321d090000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b463b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b41576c8196acbda8927d68533d281300000b20364b6074889db3c3d4d3c3b09e927e6a6055504d4e505460687a8a9fb4c2d3ddc8b4a38e79634e39230e000000000000071a2d3d52677c91a1b3c2c9b9a89e938b898579634e39230e00041a2f44596f8499aec4d9c9b39e89745e49341f09000b2034485972879cb2c7dcdecab6a4998375645c54515052555b63738197a2b4c8dfd7c7b49f8a77614c37220c0000000012273d52677d92aabbc8cac5b19c8673604b41342b2b2c3646576c8196acc1d6e0cbb8a68c77624c37220d0000000000000000000000000000081c304354667c9097979797978674604b38281600000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000000000102031414b6073849aa5b6c6d6c7b5a395806b5d4b39291703000000000000000f24394e64798ea3b9cee0cbb6a18b76614c4b6073859babbccfd6c5b2a0917c6657463321100000000000000000000000000000000000000000000000000000020a161e29333a474c59626c78828c989fabb09a85705b45301b001e33485e73889db3c8dde2cdb8a28d7863595959595959595a5560656e7c899eb3c0d0e3d6c5b39e8975604b36200b0000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b515151515151515151515151515151515151576c8196acbda8927d68533d2813000013253651667c91a6b7cad3cab6a596806b604b4437383836434a5c687d92a4b6caded1c1a9947e69543f2914000000000000000f20354b60738399a4b2bec6b9b4ab9f9e9a846f5a45301a00041a2f44596f8499aec4d9c9b39e89745e49341f090005182b3b576c8196acc2d2e5d3c3b3a199857a706a6765676a707984979fb1c0d1e1cdbaa998826d5847331f0a000000000d22374c62778a9fb4c9dfcab6a4947f69604c483b403c49546176899eb3c8deddc8b39e88735948341f0b0000000000000000000000000000001325364c5e6b8082828282827b655544311a0a00000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000000000000040a131d3144556176879ca8b9c9d2c1b49f8c7b655746331e12000000000000000f24394e64798ea3b9cee0cbb6a18b76614c59687e93a3b5c9d9ccb8a798836e5e4c3929170300000000000000000000000000000000000000000000000000000000030b171e2a333b484d5a626d79838d99a19a85705b45301b001e33485e73889db3c8dde2cdb8a28d78634d44444444444437444b4f5e667c90a2b3c7dce0ccb8a7907b66513b26110000000000000000000000000000000000000000000f24394e64798ea3b9b09b857066666666666666666666666666666666666666666c8196acbda8927d68533d281300071c3043546f8499a9b1b6c2bdb29d8774604b413127232325303e4b6073879cb1c7dcd8c3ae98836e59432e1900000000000000081c30435461768698a0b0b4c0c9bcb5b29c87725d47321d00041a2f44596f8499aec4d9c9b39e89745e49341f0900000f253a4f647a8fa4b5c9dee1d0bfb3a39b8f857f7c7b7c7f858c9aa2b1bdceded0c0b49f8a78624d3a2a1804000000000b1f3447596d8398adbfd0d3c2b59f8d7e6c62595655575a62728298a7b8cce0d2c1ad98836e583b2a180500000000000000000000000000000008182f4051626b6d6d6d6d6d655d4c3727150000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000000000000070c171f21272637475863798a9eabbccfcfbcab9d8776614c41301d0d0000000000000f24394e64798ea3b9cee0cbb6a18b7661546277899eb3c1d2d0c0b39e8977624c402f1b0b00000000000000000000000000000000000000000000000000000000000000030c181f2b343c494d5b636e7a848f9a85705b45301b001e33485e73889db3c8dde2cdb8a28d78634d382f2f2f2f2f273136404c5e6f849aafc4d9e8d6c5ab96806b56412b160000000000000000000000000000000000000000000f24394e64798ea3b9b19c867c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c8399aebda8927d68533d2813000b20354a6073818a939ca4a9a99f907c665645321d150e0e131c3043546b8095abc0d5dbc6b19c86715c47311c00000000000000011426364658617583919aa2a8adb1b2b29c87725d47321d00041a2f44596f8499aec4d9c9b39e89745e49341f0900000d22374b5d71869cb1c3d3e6ddd0c1b5b0a29a94919091959a9fabb4c0cedfcfc2b4a295806b5a48351c0c000000000005182a3b4f647a8fa1b3c5d5cfbcab9f8d8177706c6b6c70788398a0b2c5d6dec9b5a3917c66513c261100000000000000000000000000000000001222334451565757575757504c3f2f19090000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000003101b222a33373c41443a495b667c8d9fb4becfc9b7a598826d5f4d3b2a180500000000000f24394e64798ea3b9cee0cbb6a18b7669696f8298a7b9ccd7c6b4a2927d68594734221200000000000000000000000000000000000000000000000000000000000000000000040d18202b353d494e5c646f7a8584705b45301b001e33485e73889db3c8dde2cdb8a28d78634d38231a1a1a1a151d202f4053687d92a8bdd2e7d9c4ae99836f59442f1a0000000000000000000000000000000000000000000f24394e64798ea3b9b6a49c9090909090909090909090909090909090909090909099a1b3bda8927d68533d281300071c304354606d767e868e93948f816c5e4c3828160100000114263652677c91a7bcd1ddc8b39d88735e48331e00000000000000000818293a4657616e7c858e93989b9d9e9c87725d47321d00041a2f44596f8499aec4d9c9b39e89745e49341f090000081b2e3f53687d92a5b6cadfeddfd2c9c0b4b0a9a6a5a7aab0b5bcc9d1d4cbbeb2a39a8474604b3c2b19000000000000000d22374b5c6e8399a7b8c9d9c9bcab9f968b85818081858b99a1b2becfddcebdb19b8673604b35200b0000000000000000000000000000000000041626333d4042424242423b382f2111000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000000000b171e2d363a474c5156595b5b595e6a7f94a0b2c2d2c3b2a0917c675947341f1100000000000f24394e64798ea3b9cee3d4bea9947f7e7f8398a0b2c5d6cdbaa89a846f604e3b2a1804000000000000000000000000000000000000000000000000000000000000000000000000050e19202c363e4a4f5d657079634e39230e001e33485e73889db3c8dde2cdb8a28d78634d38230e04040002081224394f64798ea4b9cee3dbc6b09b85715b46311c0000000000000000000000000000000000000000000f24394e64798ea3b9c2b6b1a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aeb3bfbda8927d68533d28130000132536434a58616972797e7f7a6c6351402f1a0a0000000011263b50667b90a5bbd0dec9b39e89745e49341f0000000000000000000b1b2939464b5e6670797e838688898a86725c47321d00041a2f44596f8499aec4d9c9b39e89745e49341f090000001020364b6074879db2c0d1e5efe4ddd1c8c5bfbcbabcbfc5cacfcdc9c3b7b2a0988575615544311e0e00000000000000081b2e3e4c6277899eabbcc9d7c9bcb4aa9f9a9695979b9faab3bfcfe1cfbfb19f907b655443301c08000000000000000000000000000000000000081621292b2d2d2d2d2d26231c1103000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000010f1b29333e4a4f5861676c6e70706f6c686e8298a4b5c6cebeb39e8977624c402f1808000000000f24394e64798ea3b9cee3d6c2ae9d94939499a1b2becfcdbdb49f8a78634d42311d0d000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a212d363f4b4f5b635b4a36210c001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000d23384d62788da2b7cde2dbc6b19c86715c47311c0000000000000000000000000000000000000000000f24394e64798ea3b9bfbfbfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbfbfbfbda8927d68533d28130000081825303a464c545c646969655d5144342212000000000512273c51677c91a6bcd1ddc8b29d88735d48331e000000000000000000000b1b2933404c515b63686e71727475726857432f1a00041a2f44596f8499aec4d9c9b39e89745e49341f09000000081d314455677d92a2b4c7d7e9e9d7c6bab4aeb4bac7bfc0bfc7bab4afa59d928275615746372715000000000000000000101f344859677d8d9fabbac6d1cfc8bbb4afabaaacb0b4bbc8d0d7cdbeb2a197816d5d4b3626140100000000000000000000000000000000000000040e14161818181818100e080000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0000000000000f1f2c39464b5c646e767c8183858584817d7775869ca8b9ccccb8a798836e5e4c362513000000000f24394e64798ea3b9cee3decbbbaea9a8a9aeb3bfcfd2c2b09f937e685a4935231300000000000000000000000000000000000000000000000000000000000000000000000000000000000006101b222e373d4a4e4a3d2d1a07001e33485e73889db3c8dde2cdb8a28d78634d38230e0003090c0d1224394e63798ea3b8cee3dac5b09a84705b45301b0000000000000000000000000000000000000000000f24394e64798ea3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8927d68533d281300000008131c2933363e4a4e54544f4b3f342616111314151619202b3c54697e94a9bed3dbc6b19b86715c46311c00000000000000000000000b171e2f383d4a4e53585c5d5e5f5c574a3a271400041a2f44596f8499aec4d9c9b39e89745e49341f09000000021527374d5f6f849aa9bacde1e1cdbaa89f999fa9a8aaaba9a8a99f9a92877d6e6157463929190900000000000000000005182a3b4d5f687e8d9fa8b4c0cacfcec9c5c1c0c1c5caced6ccc6bab4a0988373604b3f2f180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000000000d1d2c3d4957616d7a838b9196999a9a9996928b857f899eb4c9d5c5b2a0907b665443301c070000000f24394e64798ea3b9cee3e9d9cbc2bebebec4c7d0dec9b5a496816c604e3c2c1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c232d3639362d1f0f00001e33485e73889db3c8dde2cdb8a28d78634d38232020161e212225303f51677c91a6bcd1ebd9c9ad98826e58432e190000000000000000000000000000000000000000000f24394e64798e9595959595959595959595959595959595959595959595959595959595959595927d68533d281300000000000c171f212d36393e3f3a372e21161e2528292a2c2b353b485a6e8398aec3d8d6c6ad97826d58422d1800000000000000000000000003121d242d36393e434648494a47433a2c1c0a00041a2f44596f8499aec4d7c9b39e89745e49341f0900000000091930414e63798a9fb4bfd0dec9b49f8a838a8f9395959492908a857d7468604c4639291b0b00000000000000000000000d1d30404e5f687d8a9aa2afb5bcc9c7c9cdd7d7cdc9c6c5b8b3a89f9382756155443121110000000000000000000000000000000000000001080b0e111415161514120f0b080200000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000a1a2b3b495b6375828e999fababaeb0b0aeacab9f9b948d9fb5cadfcfbfb19c8672604a3520100000000f24394e64798ea3b9cee3e1cfbeb2adacafb4bbc8d9c6b19c86756259483929180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080f1a2123211a0f0100001e33485e73889db3c8dde2cdb8a28d78634d38353535283236373a414d5d6e8398adc3d8e3cfbcab937e69543e29140000000000000000000000000000000000000000000d22374c6277808080808080808080808080808080808080808080808080808080808080808080807a644f39240f000000000000040a0f1a2124292a25221b1323313a3d3e3f413c484d5962788b9fb4c9dfcdb9a8927d68523d28130000000000000000000000000000090f1a2123292e31333435322f271c0e0000041a2f44596f8499aec2c2c2b39e89745e49341f090000000000132135495b697e93a1b3c4d4cdbaa89782747a7d7f807f7d7a756f6760554e4233291b0b00000000000000000000000000122231414e5f67788491999fabadb2b4bac7c7bab4b1aca79e958a7e6e6157463727150300000000000000000000000000000000050b0d141c202326292a2b2b292724201d150c0a0400000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000002162838485963798698a0aeb4bcc9c3c5c5c4c9bcb5b0ab9fabbccfe3dec9b5a4917c67513e2d1b0700000f24394e64798ea3b9cee3dac5b2a098979a9faabbc8c9b5a49b8577625746362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e0c07000000001e33485e73889db3c8dde2cdb8a28d78634d4a4a4a4a39464b4c50545f677b8d9fb5cadfd5c5b49f8b78634d38230e0000000000000000000000000000000000000000000b1f344859626a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a645c4a36220d000000000000000000070d0f1414100e0b1e31414e52535456595a626a77869ca9baced3c2b49e8976614b36210c00000000000000000000000000000000070c0e13191c1d1f201d1a140a000000041a2f44596f8499acacacacac9e89745e49341f090000000000061a2c3d4e606f8399a6b7c8d7c6b19f937e69686a6b6a68656056524b4437311e170b000000000000000000000000000004132331414d5a63727c848c93989c9fa9a2a2a99f9c979189807768604b4639281909000000000000000000000000000000070d181f22263035383b3e3f40403f3c39363127211f170b040000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000091e3245566277879ca4b2becacfd1c8c5bdb8b6b6b8c9bcb5bcc9daece5d2c2b09b85705c4a36220d00000f24394e64798ea3b9cee3d7c2ad988282848c9faabbcec2b5a39b8575615443301c1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78636060606060605761626569717c899eabbccfd4c6b8a798836e5a4935200c00000000000000000000000000000000000000000005182a3b484c555555555555555555555555555555555555555555555555555555555555555555554f4a3e2d1b070000000000000000000000000000000011253a4e6068696a6b6e72787f899ca4b5c7d1c4b6a495806b5746331e0a0000000000000000000000000000000000000000000000000000000000000000041a2f44596f849797979797979789745e49341f090000000000000f1f31424c6176879daabbcecebdb49f8c7c665b565453504b453836312719130300000000000000000000000000000000051323303c495460666f787e82878a8b8c8d8c8986827c756b61594e4232281b0b000000000000000000000000000008131c202a343736434b4d515355555554524f4b44373633291f170c00000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000005182a3b4b6074859ba6b6c2cfd6ccc0b4afa8a3a1a1a2a7adb4bcc9d3e0f0ddc8b4a38e79644e39240f00000f24394e64798ea3b9cee0cbb6a18b766d6f7c8c9fb4bfd0c1b5a3998372604a402f1e0e00000000000000000000000000000000000000000000000002050002080b0b0801000300000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78757575757575757576777a7f86919ea7b9c9ccc3b6a89e8978624d3c2c1906000000000000000000000000000000000000000000000d1d2a34374040404040404040404040404040404040404040404040404040404040404040404039362d2010000000000000000000000000000000000013283d52687d7e7f8183878d949ea7b5c2cbc1b4a69c8675604b3929170300000000060c0e15151515151515151515151515151515150e0c0600000000000014293e53697e82828282828282816c57412c170200000000000001141f334758657b8c9fb4c0d0cebbaa9e8979635846373b363228201d15090000000000000000000000000000000000000005131e2c36434a515a62686d72747677777674716d6761574c473a311e160b000000000000000000000000000511182530353b484c5354606366696a6b6a6967646055534c463a33291c12000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000b1f3447596a7f94a3b5c4d3d6c6b9b4a29a928e8c8b8d91989fabb6c2d3e1e4d1c1ab96806b563b2a1805000f24394e64798ea3b9cee0cbb6a18b76615e6a7f94a1b3c4d2c1b3a1957f6a5e4c3c2c1b0a00000000000000000000000000000000000000040b0c12171a1d151d20201d151c19140f0b07000000000000000000000000000000001e33485e73889db3c8ddf2d0bba8978d8a8a8a8a8a8a8a8a8b8c8f949ba3b3b9c5c5b9b3a59d8a7b655948341e0e0000000000000000000000000000000000000000000000000d181f222b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b24221b1002000000000000000000000000000000000a1f34495f748a939496989ca5aab3b8c5c5b8b3a39b8878625645321b0b000000010f1a21232a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a23211a0f010000000012263b4f60696d6d6d6d6d6d6d6c63513e2915000000000000000004172a3a4b5d6a7f94a2b3c4d5c8b9a79c867661554431211e160b0802000000000000000000000000000000000000000000000e182530353c494d53585d5760626261585c57514b4639342a1c1403000000000000000000000000000d181f2f36434a515962696e74787b7e7f80807e7c79756f6861584c473a301c130800000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f00000d22374c6277899eb4c2d2d9c9b9a89e91847d797676787c838c9ca4b6c3d3e6dcc7b19c87725947341f0b000f24394e64798ea3b9cee0cbb6a18b76614c60728399a6b7c8d0bfb59f8d7c665a493928160300000000000000000000000000000002090c181f22282c2f32273136353127312e2a24201c130804000000000000000000000000001e33485e73889db3c8ddf2d7c5b5a8a29f9f9f9f9f9f9f9fa0a1a5a9b0b5c1bab4afa79e95877a655d4b3b2b190000000000000000000000000000000000000000000000000000050b0d151515151515151515151515151515151515151515151515151515151515151515150f0d070000000000000000000000000000000000000a1f34495f74899ea9abaeb2b6c3c8c5b8b3a69e938577625a48382816000000000f1f2c36393f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f39362c1f0f000000000c1f32424f535757575757575757514534220e0000000000000000000c1c2e3f4b6072849aa6b8c9d6c5b6a49a8473604b42312111000000000000000000000000000000000000000000000000000008131c202b35383e4339454b4d4d4c473a423c3632281f180c0000000000000000000000000003111d2a34404c5460666f777e84898d909394959594918e8a847e766b61584d4130251808000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0005192b3c556b8095a8b9cce3cfbcab9e8a7c706863616163676e79869ca5b6cadfdecab6a48c77624c37220d000f24394e64798ea3b9cee0cbb6a18b76614c546177889daabbcecfbcab9e8978635745321e1403000000000000000000000000000a151d202a34373d41454749444b4b444946433f393530251f180c0300000000000000000000001e33485e73889db3c8ddf2e3d3c5bbb8b5b5b5b5b5b5b5b5b6b7babec6c9baa99f9993898075645c4b3f2f1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74899eb4c0c3c7cad3ccb8a79e92887e736259483c2b1a0a000000061a2c3d494e55555555555555555555555555555555554e493d2c1a06000000021424323b3e42424242424242413e3426160500000000000000000000101c3043546277889dabbccfd3c2b3a296816c604e3f2e1e0e000000000000000000000000000000000000000000000000000000070e192023292d283236373837332a2d27211e160b04000000000000000000000000000512212f3b474c5e66737b848b93999ea7a6a8aaaaaaa9a7a99f9a93898076675f4a43362513000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000b2035485a72879db2c6d6dfcab49f8c7b665e534e4c4c4d525b6376879cb2c0d0e3d3c2a6917c66513c2611000f24394e64798ea3b9cee0cbb6a18b76614c4759657b8c9fb4bfd0c9b9a79c8675604b42322111000000000000000000000003131a2731363b474c52575a5d5e556060555e5c58544f4a4336332a1e160a000000000000000000001e33485e73889db3c8ddf2f1e1d3cac7c7c7c7c7c7c7c7c8ccd5cfd4dbc9b49f8b837e756b60574a3e2f2111000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0f121415161514120f0b0902000000000000000000000000000000000000000000000000000000000000000a1f34495f74899eb4bcbfc5cacfc8b39e897d75686055483b2b1e0e000000000c2136495b636a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a635b4936210c0000000006141f26292d2d2d2d2d2d2d2c292216080000000000000000000000011426364759657b8d9fb4c0d1d0c0b09f927e685d4b3c2b1b0b00000000000000000000000000000000000000000000000000000000060b0d1318161e212222211f1718120c09030000000000000000000000000000011223303f4b59626e7b86909a9fabaeb3b9c5bebfc0bfbec7bab4afa89e96897c6b605443301c140100000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000d22384d62788da5b6cae4d7c6ad98826d5d4c40393736383d4a58647a8fa2b4c7dcd4bea9947f69543f2a14000f24394e64798ea3b9cee0cbb6a18b76614c3a4b5d6a7f94a1b3c4d4c5b5a498826d604f3f2e1d0d0000000000000000000a161e3138454b535961676c6f72747575757573716e696460544c473a32281b110300000000000000001e33485e73889db3c8ddf2e6d3c3b6b2b1b1b1b1b1b1b2b3b8c5bfc7cbc5b09a857c73655d4b45392d201103000000000000000000000000000000000000000000000000000000000000000000000000060b0d161e2125272a2b2b2a292724201d150c0a04000000000000000000000000000000000000000000000000000000000a1f34495f74899ea4a6aab0b5bcc9b8a79d877f74645c4c402f1f0f000000000e23394e63797f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f79634e39230e0000000000020c12141818181818181817150e050000000000000000000000000008182a3b4b5d6b8095a2b4c5d5cdbdb49f8c7b655a4839291808000000000000000000000000000000000000000000000000000000000000000003090b0d0d0c0a04000000000000000000000000000000000000000a1d30414d5d657783909ca4afb4bcc9c9ccd6d3d4d5d5d3d7cdc9c6b9b4a79e918072604a42321f0f00000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0011263c51667c91a6c3d4e1cdb9a88f7a644f3f30232121232d3a4b5c6f849aafc4dad6c1ac97816c57422c17000f24394e64798ea3b9cee0cbb6a18b76614c363f4a60728399a6b7c8d2c2b2a0937e695d4b3b2b1a0a000000000000000a1a2832414e5660686f777d818487898a8b8a8a8886837f79736a61584b45392f211306000000000000001e33485e73889db3c8ddf2dfcab6a59d9c9c9c9c9c9c9d9ea7a4aab2b7c3b4a29a91867b6b6055443726140100000000000000000000000000000000000000000000000000000000000000000000080e1920232932363a3d3f4040403f3c39363228221f180c0700000000000000000000000000000000000000000000000000000a1f34495f748a8d8f91959b9fabb2beb7a69d94877a665e4c3d2c1a0600000012273c52677c91949494949494949494949494949494917d67523c2712000000000000000000000000000000000000000000000000000000000000000000000d1d2f3f4b6073849aa7b8c9dacebbaa9e887862574636251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f677b8899a1b1b5c2cacfd9d8cecac5c3c2c2c3c7cad4d6cdc5b8b39e96816c604f3d2d1a07000000001e33485e73889db3c8dde3ceb9a48e79644f39240f0014293e54697e93a9bed3dec9b49e8975604b3520120c0c0f1c2e3e53697e93a8bed3d8c3ad98836e58432e19000f24394e64798ea3b9cee0cbb6a18b76614c363043546177889daabbcecfbeb49f8c7b65594838271502000000000008182838454b5f68747d858b92969a9c9e9fabaa9f9e9b98948e877f776b60574b3f312413050000000000001e33485e73889db3c8ddf2dcc7b29d8787878787878787888b8f959da5b0bdb4b0a49c908073605544311d10000000000000000000000000000000000000000000000000000000000000000003111c232b353839464b4f525455565554524f4b453837332a211a0f0200000000000000000000000000000000000000000002090b090d22384d627878797c7f858c98a0aebbb7b2a59d8b7c665b4935210f00000012273c52677c91a7aaaaaaaaaaaaaaaaaaaaaaaaaaa7917c67523c271200000000050b0d2020202020202020200d0b0600000000000000000000000000000000111d3144556278899eabbccfd8c8b8a69c8675615443301c13020000000000000000000000000000000b0b0b0b0b0b090000000000060c0e12141514120e0b070000000000000000000000000000000000000012273c52677c8b9ea6b3bfc9d2dfd1c8c8bbb4b0aeacacaeb2b7c3c6cfd5ccbcb09f937e695b4a362111000000001e33485e73889db3c8d7d7ceb9a48e79644f39240f00152a40556a7f95aabfd4dbc6b19b86715544311d0800000010243a4f64798fa4b9ced9c3ae99846e59442f19000f24394e64798ea3b9cee0cbb6a18b76614c3625364759657b8c9fb4bfd0cebbaa9d8877625645311d1300000000001325364556606d7d87929a9faaacafb2b3b5bcbbb4b3b1ada9a59d948a8075655d4e423123130100000000001e33485e73889db3c8dde2cdb8a28d78727272727272727376797f87969fb0bdc2b5b19e968373604b3f2e1b080000000000000000000000000000000000000000000000000000000000000b171e2e373c484d5557616467696a6b6a6967646056544c473a362d1d15090000000000000000000000000000050b0d111519161e211e162034485a626364676a707882949daec0c3b7a99e8a79634e3d2d1a07000012273c52677c91a7bcbfbfbfbfbfbfbfbfbfbfbfbca7917c67523c27120000000d1920223535353535353535352320190e000000000000000000000000000000011426374859667c8d9fb5c1d1d5c5b5a4998372604a41302010000000000000000000000000070d0f2020202020201e14120c080e1a2123272a2a292724201c1308060000000000000000000000000000000012273c52677c91a1b3c5d0ded2c9c0b4b0aa9f9b999797999da5adb2becae0cdbdb49f8b79634e3f2e1c080000001e33485e73889db3c2c2c2c2b9a48e79644f39240f00152b40556a8095aabfd5dac4af9a856f5a372614010000000d23384d62788da2b7cdd9c3ae99846e59442f19000f24394e64798ea3b9cee0cbb6a18b76614c36212a3a4b5d6a7f94a1b3c1c0c8b8a69b8574604b41311909000000071c304354607482929da5afb4bbc8c4c4c1bfbebebfc0c3c3c3b7b2a99f96877b68604e41301f0f00000000001e33485e73889db3c8dde2cdb8a28d78635c5c5c5c5c5d5761646a7581969fb1c7c9bcb0a196816c5d4b37220d00000000000000000000000000000000000000000000000000000000010f1b29333f4b505a626b71767a7c7f80807f7e7c7975706961584e4a3d3127190d0000000000000000000000000d182022262a2e2832363228252b3c484d4d4f51555a626e7f94a2b4c8c7b9a89a846f5b4a36210c000012273c52677c91a7bcccccccccccccccccccccccbca7917c67523c271200000d1d2b344a4a4a4a4a4a4a4a4a4a4a352b1e0e00000000000000000000000000000009192b3b4c5e6b8196a3b5c5d6d2c2b3a195806b5f4d3e2d1d0d000000000000000000010f1a21243535353535353429271f1d202c35383d3f3f3f3c3935302521190e0300000000000000000000000000001025394d5f6f8499a9bacdcdc1b5b1a29a918a8583828284878e98a0adbacae2cebaa99a84705d4b37230a0000001e33485e73889dacacacacacaca48e79644f39240f00142a3f54697f94a9bed4dac5b09a85705b3b2b18050000000e23384d63788da2b8cdd8c2ad98836d58432e18000f24394e64798ea3b9cee0cbb6a18b76614c36211c2e3f4a60728399a3aaababababa397816c5f4e3727150200021628384a60728398a0b2b7c3cac6bab4afacaaa9a9aaabadb1b6c2c7bab4a59d8c7e685f4d3d2c1a06000000001e33485e73889db3c8dde2cdb8a28d78634d4747474739464b4f56606d8197a9bacdcdbfb59f8d7a654f3b2b18050000000000000000000000000000000000000000000000000000000f1f2c39464b5d656e7880868b8f929495959594918e8a857f776d635b4b44372b1d0d000000000000000000000d1d2b34373c404338454b45383a312b3438383a3c3c494d616f849aafc4d7c6b3a28e79634e39240e000012273c52677c91a7b7b7b7b7b7b7b7b7b7b7b7b7b7a7917c67523c27120005192b3b485e6060606060606060605e483c2b19060000000000000000000000000000000d1d2f404b6074859ba7b9cce0cfbfaf9e917d675c4a3b2b1a0a00000000000000000f202d36394a4a4a4a4a4a493f3b3231353d494e52545554524e4a4336352c1e160b000000000000000000000000000a1d30414d62788a9fb4c1bab4a39b90857c76706e6d6d6e727982939cadbeced8c7b4a28f7a65503828160300001e33485e738897979797979797978e79644f39240f0012273c52677c91a7c5d6dcc7b29d8772594834200c00000110253a4f657a8fa4bacfd6c0ab96816b56412c16000f24394e64798ea3b9cee0cbb6a18b76614c3621111c3043546176859195959595959595927d685544311d0800091e324556697f94a1b2becac4b7b3a89f9a979594949496989ca4abb4bcc3b6aa9f8d7d675b49352110000000001e33485e73889db3c8dde2cdb8a28d78634d3832323228323638454c61768a9fb4c9dfcfbcab99846f594834200b00000000000000000000000000000000000000000000000000000e1e2c3d4957616c7b838c959b9faba7a9aaabaaa9a7aa9f9a948a82796a6055483b2b1d0d000000000000000005182b3b484d5155595c566056524e413120222324272b354351667c91a6c9dad0c0ab95806b56402b16010012273c52677c91a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1917c67523c2712000b2034485970757575757575757575705a4835200b00000000000000000000000000000000121d3144556278899eb3bcccd6ccbcb49f8a7a64594838281602000000000000071a2d3e4a4e6060606060605e544f43444b535b6367696a69676360544d493c32281b0e00000000000000000000000001132035495a6a7f94a3b1a99f94857b70676157595757595b636e7e93a0b2c5dad1c0ad98836e5645321e090000162c41566b8082828282828282828278624d38220d000e24394e63798ea7b8ccdfcab6a58c77624c3a2a1b1211141d3041546a7f94a9bfd4d4c4a8937e68533e2813000f24394e64798ea3b9cee0cbb6a18b76614c36210c132536475861747c80808080808080807f73604b36200b000b21364b6075889eb3bfcfc5b7a69d928985827f7f7e7f8083878d969fabbcc8bbab9f8a79634e3e2e1b070000001e33485e73889db3c8dde2cdb8a28d78634d38231d1d161e21283347586f8499afc4d9dac9b59f8b77624d37220d000000000000000000000000000000000000000000000000000c1c2c3c495b6375818f999fabb1b5bcc9bebfc0bfbec8bbb4b0a99f988b7f746259483b2b1909000000000000000b2034485962666a6e7275767268604e3f2e1b0e0f121922374c62778cabbccfdac4af9a856f5a45301a000012273c52677d8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7d67523c2712000d22374d62788a8a8a8a8a8a8a8a8a78624d38230d0000000000000000000000000000000002152737495a677c919eb4b9c6c1c2baa99d8877625645321e0f0000000000000d21364a5c707575757575757369614f55606870787c7f7f7e7c79746c635b4b46392c1f0f01000000000000000000000006192c3c4b607485979c978a7f73655d514b463942423d4a4e606d8298adc5d5dec9b49f8975604b36210b000014293d51626b6d6d6d6d6d6d6d6d6d625a4835200b000b20354b6074899eb3c8ded3c3a9947f6a5947392d272626313e4d5f71869bb1c6dbcbb7a68e79644e39240f000f24394e64798ea3b9cee0cbb6a18b76614c36210c0818293a475660676a6b6b6b6b6b6b6b6a605544311d080011263c51667c91a7b8ccccb8a79d887d756f6c6a69696a6b6e7278818d9fb4c1c9baa89a846f5c4a36220d0000001e33485e73889db3c8dde2cdb8a28d78634d38230e0003090c17293a566c8196abc1d6e3cfbcab917c67523c27120000000000000000000000000000000000000000000000000417293a495a637987979faeb4bcc9cacdc9c4c1c0c2c5c9cecac7bab4aa9f958577625948372715020000000000000d22374d62777c7f83878a8b877d685d4b37220e00000b20354b60758a9fb5caddc8b39e88735e38281602000b21364b6074777777777777777777777777777777777775604b36210b000d22374d62778c9f9f9f9f9f9f9f8d78624d38230d000000000000000000000000000000000009192b3c4d5f6b80939ea8aaacacacaca69b8574604b3e2d1a0700000000000f24394e647a8a8a8a8a8a8a897f695b63737e858d92949494918e8881786c6157493d2d1f0f0000000000000000000000000e1d3144556176828682786960554b3f3632292d2d2d36424e63798ea7b8cce0cdbaa8907a65503b251000000e21344451565757575757575757574d483c2b190500081c3043546d8298adbfd0ddc8b39e887761574a3d3c3b37444b5c677d91a3b5c9d7c7b39d8873604a35200b000f24394e64798ea3b9cee0cbb6a18b76614c36210c000c1c2938454b515556565656565656554b443727150200142a3f54697f94a9c5d5c8b39e8978676056575554545556585a626c7d91a3b4c8c6b3a28f7a644f3a240f0000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000152b40556a8095aabfd5ecdac9aa947f6a553f2a150000000000000000000000000000000000000000000000000a1f3346586378889da5b1bdcacfcbc6b9b4afacabacafb4bac7cdcdc8bbb4a39b8777625544311d0d000000000001162c41566b819195989c9fa59d8d7b654f3c2b1909000b20354b60758a9fb5cadfcab49f8a755645321e0900091e324556606262626262626262626262626262626262605645321e09000d22374d62778ca2b5b5b5b5b5a28d78624d38230d0000000000000000000000000000000000000e1e304151626b7e89929597979797979797826d5c4a36210d00000000000f24394e64798e9f9f9f9fa79e8b77657985939ba3a7a9aaa9a7a69d968b8175635b4a3d2d1d0c0000000000000000000000021527374658616d716d625a4b44372f211e1618181a21364a5b73889eb3c8ddd7c6a9947f69543f2a140000051626343d4142424242424242424238352b1e0e0000011426364f657a8fa1b3c9dacbb8a69a8475645c545151525560687a8a9eb4c1d2cdbaa996816c5443301c07000f24394e64798ea3b9cee0cbb6a18b76614c36210c00000c1a2731363c40404040404040404036312719090000152a40556a7f95aac6d7c1ac97826c5a4b4538403f3f3f413c494d5f70859bb0c5d0c0ab96816c56412c170100001e33485e73889db3c8dde2cdb8a28d78634d38230e0b0b0c0e17293a566c8196abc1d6ebd5c0ab96806b56412b160100000000000000000000000000000000000000000000071b2d3e4c6176879da6b7c3ced3c4b8b3a89e999796979a9fa9b4b9c6d5cec1b5a59b8574604b3b2b1805000000000011273c51667c91a6aeb1b4b7ab99846f5a48372618161722374c62778cabbccfe2cebbaa8b76604b36210b0002162838454b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4538281602000d22374d62778ca2b7cacacab7a28d78624d38230d0000000000000000000000000000000000000012233444516069767c80828282828282828179644e39240f00000000000f24394e64798ea3b5b5c5b8aa907c7b8a9ba3b0b5c1bebfbec4b8b3aa9f968679635b4a3b2a180400000000000000000000000919293a464c585c574d493c312619110a030000071a2d3d5c71869cb1c6dbd6c1ac97816c57422c17000000081621292c2d2d2d2d2d2d2d2d2d2220190e000000000822374b5d6f8499abbccfd5c5b4a29a85796f696766686c747d8a9ea8b9ccd5c4b49f8a78624d36251300000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000a151d20272b2b2b2b2b2b2b2b2a201d150900000012273d52677d92a8b9cdc0ab95806b56413637393a3b3c3e403c48546d8297acc2d7c6b09b86715b46311c0600001e33485e73889db3c8dde2cdb8a28d78634d38232121212223283346586f8499afc4d9e9d4bfaa947f6a553f2a1500000000000000000000000000000000000000000000000d22364a5c6c8197a5b7c4d4d3c2b6a69e938984828182858a949ea8b7c4d5d2c3b5a395806a594834200b00000000000c22374c61778ca3b5c7cac9b49f8c78625544362d2b29334151677c91a6c9dadfcab49f8a75604a35200b00000a1a28323637373737373737373737373737373737373632281a0a00000d22374d62778ca2b7ccdfcdb7a28d78624d38230d0000000000000000000000000000000000000004162634424f5761676b6c6d6d6d6d6d6d6d645c4a36210d00000000000f24394e64798ea3b9cad5c8ae98838a9ea8b5c1bebec0c6c9d2cbc8bbb4a49c8879635947341f120000000000000000000000000b1b29333642474238352c1d1409000000070c171f32465772879cb2c7dcd8c3ad98836e58432e1900000000050e14161818181818181818180d0b050000000000081b2e3f4e64798d9fb5bfcfd0c0b4a39b8c847e7c7b7d8187929ea8b9c6d6c8b8a697816c594834180800000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000002090b121516161616161616150b0802000000000c21374c61768a9eb4bdc5af9a85705f4e4b4d4e4f50515355575a6273869bb1c6dbc8b39e89735e49341e0900001e33485e73889db3c8dde2cdb8a28d78634d3836363636373838454c61768a9fb4c9dee9d7c6a8927d68533d281300000000000000000000000000000000000000000000031729394f647a8c9fb4c3d4d7c6b6a49c887e756f6c6b6d70767f8a9da6b7c9dad2c1b49f8a77624d37220e00000000000a1f34475970859bb0c4d5cfbcab99837360544a3e4039464b606f8499afc4d9ddc7b29d88725443301c070000000a161e212222222222222222222222222222222222211e160a0000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000000000000000000000000000000000000816243239464b525557575757575757574e4a3e2d1a0700000000000f24394e64798ea3b9cedbc6b2a0989ea8b5b1aba9a9abb1b5c1cad3cec2b6a69d8777614c402f18080000000000000000000000000b171f212d312d2320190e0102090b131c202a33414b61768b9fb4cadfd8c3ae99836e59442e1900000000000000000000000000000000000000000000000000001021364a5c6b8095a1b2c0cdd0c1b5ab9f9a94919092969da5b4b9c6d6c9bbaa9d8877624c3b2b190000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000101010101010100000000000000000a1f334758697f949fb3b8b4a2917d6860606263646567696a6d71788298a3b5c9dec8b39e89735e49341e0900001e33485e73889db3c8dde2cdb8a28d78634d4b4b4b4b4b4c4e5156606c8196a8bacde1e1cdbaa8907b65503b2610000000000000000000000000000000000000000000000a1e3346576e8399abbccfe1cdb9a89c867868605657565757616a79889dabbccfe1cdbaa995806b553d2c1a060000000004182a3a52687d92a6b8cbd9c9b3a1988272645c57555657616a7e92a1b3c7dcd5c5ae99836e59362513000000000002090b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b0902000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000000000000000000000000000000000000006141b2933363d40424242424242424239362d200f0000000000000f24394e64798ea3b9cee2cfbfb2aeb4b0a49c969494969ba3b1b6c2d3d3c5b7a698826e5e4c36261401000000000000000000000000040a0c181c180d0c06090b161e212530353a474c5f6a7f95aabbcee2d7c2ac97826d57422d180000000000000000000000000000000000000000000000000000071a2d3d4a60728399a2b0bccad2c9bcb4afa9a6a6a7acb2b6c3cdd1c6b9ab9f8c7b655948341d0d0000000f24394e64798ea3b9cee0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000004172a3a4a607281929da6b2b49f8c7e747577787a7b7c7e8082868c98a0b2c2d2dbc6b19c86715c47311c0700001e33485e73889db3c8dde2cdb8a28d78636060606060606163666c7580969fb0c6d7e9dec9b49f8975604b36210b000000000000000000000000000000000000000000000c21364c61768a9fb4c9d9dec9b49e8a7963594b45384139464b5b657b8d9fb5cadfd7c7b29d87725b4935210c00000000000c20364b6075889eb3c0d1d0bfb2a0988479716c6b6c6f76808d9fb4bfd0e0ccb8a7927d68533d281300000000000000000000000000000000000000000000000000000000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000000000000000000000000000000000000000000b171e21272b2d2d2d2d2d2d2d2d24211a0f010000000000000f24394e64798ea3b9cee3ddcfbfb2a39b8f86817f7e81868f9ca4b6c2d3d4c4b2a0907c665443301c08000000000000000000000000000000030700060a161e2128323636434a4f58616c7d8c9fb4c8d8ead9c8aa95806b55402b160000000000000000000000000000000000000000000000000000000f1c304354617584969eb2b6c3cacfcac4bebcbbbdc1c7cad1c8c0b4a89e8d7e685d4b3b2a18000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000c1c304354606c7d8898a0b2aa9f93898b8c8e8f90919395979b9fabb2bfcfe0d1c0ad98836e58432e190300001e33485e73889db3c8dde3cdb8a38e797676767676767677787c8188969eb0bdcde4e1d0bfae99846e5645321e090000000000000000000000000000000000000000000011263b51667c90aabbcee7d7c7ab96816b5b493b31272c29333d4b5d6f8499aec4d9dfcbb7a58d78634e38230e0000000000091d324556697e93a2b4c5d5cfbeb2a29a8e868280818489959fabbccfddd2c1b39e8975614b36210c0000000000050b0d16161514120e0c06000000000000000000000000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000000000000000000000000000000000000000000030a0c121617181818181818180f0d0700000000000000000f24394e64798ea3b9cee3dbc6b2a199857a716c69696b717a869ca4b6c8d9cfbeb29d8773604b35200c00000000000000000000000000000000040e192128323638454b515460656c76818d9faabbcee6e2cebbaa927d67523d2812000000000000000000000000000000000000000000000000000000001325364657617380919ca5b2b7c3c5c8ccd5dacfcac8c4c1b4b0a29a897c68604e3f2e1d0d000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000132536434a5f67758398aebbb4a89fa8a2a3a4a5a6a8aaacb1b5bcc9cfddcfc3b4a2907b66503b26110000001e33485e73889db3c8ddf2d0bca8978e8b8b8b8b8b8b8b8c8d91969da6b0bccddbe1d3c3b3a1907b66513828160200000000000000000000000000000000000000000000152a3f556a7f94aac8d8e2cdbaa98e79644f3c2c1d1516171e2e3f52677c91a7bcd1e6d4c3a6917c67513c27120000000000021528384a6072849aa7b8c5d4cfc0b4afa49c979596999ea8b4bcc9d9d3c3b5a3937e685746321e0a000000000e1920222c2b2a29272320190e0c07000000000000000000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3d8c3ae998374645c565454565d6576869caabbcedfcab6a5907b66503a2a180400000000000000000000000000000c181f2c3538454b525660666c747a818a979fabbbc8d8eadac9b49f8b77614c37220c00000000000000000000000000000000000000000000000000000000081828394655606b7c87929da5abb0b3b8c5b7bcb5b2afaaa39b908579665e4e4231211100000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000081825384c5e6a7f8d9fb5cac6bab4bac6b8b9babcbebfc2c6cacfd5ccc8bfb2a59a8473604b35200b0000001e33485e73889db3c8ddf2d8c6b5a8a3a0a0a0a0a0a0a0a1a3a6abb2b7c4cde3dfcfc3b6a59a846f5e4c381a0a0000000000000000000000000000000000000000000000172d42576c8297acc1d7dfc9b49f8a75604b35200e0200031123384d62788da2b7cde2d3bea9947e69543f29140000000000000a1c3043546278899ea7b7c3cfd0c8c2b5b1acaaabaeb4b9c6cfd9cec2b6a59b8573604b392916030000000e1e2b353841413f3e3c38352c24211a0f0400000000000000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000000000000000000000002090b0e121415161513100d0b0500000000000000000000000000000000000000000f24394e64798ea3b9cee1cbb6a18c7661564b3e3f3f3f4b5863798c9fb4cadfd3c3ae99836e5847331f0a00000000000000000000000003111d2a343c494d5660676e757b82888f979fa8b4bcc9d8e6e3cfbcab9a846f5847331f0a00000000000000000000000000000000000000000000000000000000000b1b2837444b5e66747d878f969b9ea7a2a2ab9f9d99948e857b70635b4c403124140300000000000f24394e64798ea3b9cedecbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000114263651667c909fabbccfd7cdc9cdd7cfcac9c8c7c6c5c3c1bfc5b8b3ada1998777625443301c080000001e33485e73889db3c8ddece3d3c6bcb8b5b5b5b5b5b5b5b6b8bbc1c8cbd4d9cfcabeb2a59c8777624c402f1d000000000000000000000000000000000000000000000000182e43586d8398adc2d8ddc8b29d88735544311d080000000b21364b60768ba0b5cbe0d4bfaa957f6a55402a1500000000000000132536485a6379899da5b5bcc9cdd2c9c6c1c0c1c4c9ccd6cecabdb1a49c8777625544311b0b00000005192b3c484d56565553524d493c39362d1f170c000000000000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000000000000000000040a0c151d202427292b2b2a2826221f18100e0800000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c382e2a292e3a4a5b6d8297acc5d5dfcab49f8b77614c37220c00000000000000000000000513212f3b474c5b636c757c838990979da6acb4bac6cfd9e7e2d0c0b59f8d7a644f3a2a18040000000000000000000000000000000000000000000000000000000000000b192631404d556068737a8085898b8c8d8c8a88847f7970655d4e493d2f2214060000000000000f24394e64798ea3b9c9c9c9b6a18b76614c36210c0000000000000000000000000000000000000000000000000000081c30435470859ab0bcc9dad4cbc8bfc9bcb5b4b3b2b0afaeacaaa7a79e988f8376625948362614010000001e33485e73889db3c8d7d7d7d7d7d7cdcbcbcbcbcbcbcbcccdd1d3d6ccc9c9bcb4aea0988778635948342212000000000000000000000000000000000000000000000000182d42576d8297acc2d7ddc8b29d88735443301c070000000b21364b60768ba0b5cbe0d4bfa9947f6a543f2a150000000000000008182b3c4a5b637987969fabb4bac6c6c9cdd6d7cdc9c7c8bbb4ad9f978678625947372614000000000b2035485a626b6b6a6967635a574e4a3d332a1c100200000000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000000000000050c171f21273136393d3f40403f3e3b37342a25221b10090000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c362114141c2d3d50657a8fa7b8cce0cebbaa917c67523c271200000000000000000000021323303f4c59616d78818991999fa8acb3b7c4c9cdd7e3e3d8cec0b3a297826d5c4b371c0c000000000000000000000000000000000000000000000000000000000000000009141d3037444b5460656b70737677787775736f6a635b504c3f352c1f1204000000000000000f24394e64798ea3b4b4b4b4b4a18b76614c36210c00000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9dad4c4b7b2aaa5ab9f9e9d9c9b9a999795918e88827a6e6158483b2a1808000000001e33485e73889db3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c1c1c0bfbdc6b9b3afab9f998f8276635a493b2b1804000000000000000000000000000000000000000000000000162b41566b8096abc0d5dec9b49f8974604a35200c0000000d22384d62778da2b7ccead8c8a8937d68533e281300000000000000000e1e2d3d4a5b6375818c979fa8acb0b4b9c6c7bab4b2adaa9f988e8175625a493b2a1909000000000d22384d627880807f7e7c78736d635b4c473a2d201000000000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000000000030d181f29333638454b4e525455555553504c483b3a372e231c1105000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000f20354b6074889eb3c8ded8c8ac96816c57412c1700000000000000000000102030414d5d6577828c969ea8aeb4bac6c8cbd4dee1e0d9cfc7bab4a29a8474604b3e2e1b00000000000000000000000000000000000000000000000000000000000000000000011219273136434a4f565b576162626260565a554e4a3d382f211a0f0100000000000000000f24394e64798e9e9e9e9e9e9e9e8b76614c36210c00000000000000000000000000000000000000000000000000000c22374c61778ca9bacdd7c7b7a69d95908c8a898887868584827f7c79746d645c4c473a2a1d0d00000000001e33485e73889dacacacacacacacacacacacacacacacacacabaaa8a5a89e9a938b847a6d6158493c2c1d0d0000000000000000000000000000000000000000000000000013283d53687d92a8c2d3e1cdbaa98e79634e3a291a1615161c2c3c51667c91a6bbd1e2cebbaa8f7a654f3a25100000000000000000000f1f2d3d4a57616c79828a92969b9ea8a1a2a99f9d98928b837a6c6056493c2b1d0d00000000000f253a4f647a8f969493918d8882796e61584a3e2d1d0d000000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000000000a161e2a343a464c5356606367696a6b6a68656259574f4b3f382f20190e0000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c00081c30435470859aafc5dadac5b09a85705b3727150200000000000000000a1a2e3e4d5f677b89979fabb3b9c6c9cdd7dddfe1ded6ccc9bcb4a99f95847661564532201000000000000000000000000000000000000000000000000000000000000000000000000009151d2530353a4139464b4d4d4c4b45383f39362d231c1106000000000000000000000e24394e63798a898989898989898a76614c36210c00000000000000000000000000000000000000000000000000000b20364b60758a9fb4c8cdbaa99d88807b777574737271706e6c6a676360544f4a3e33291c0d0000000000001e33485e7388979797979797979797979797979797979796969493908d89847e786f645c4c473a2c1e0e00000000000000000000000000000000000000000000000000000e23394e63798ea4b6caded7c7aa947f6a5847382e2b2a2b2f3a495a6d8297adc2d7dfc9b49f8a75614b36210c000000000000000000010f1f2d39464b5c646d767c8186898b8c8d8b8987827d776e645c4b45382b1e0e0000000000000f253a4f647a8fa4aaa8a7a69d978e8376645c4a3b2b19050000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000003111b28323b484c5861686f75797c7e80807f7d7b77726c655d504c40352b1e1204000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0001142636576c8196acc1d6ddc8b39e88735544311d0800000000000000021528384b5c677d8c9ea7b4bcc9ccd6dee1e1ded7cdc9c5b9b3ab9f998b807361584638281502000000000000000000000000000000000000000000000000000000000000000000000000000108131c20252b2933363738373632282a23211a0f090000000000000000000000000c21364a5b63747474747474747474615846331f0a0000000000000000000000000000000000000000000000000000091d3145566e8399aabbc9b49f8a776a656260555e5d5b5a595755524e4b4336362d1f170c00000000000000162c41566b80828282828282828282828282828282828281817f7e7b78746f69625a4f4b3e33291c0e0000000000000000000000000000000000000000000000000000000c21364a5b71869cb1c3d3ddc8b39d887661564b3f403f40404c5863788b9fb4c9dfd0bfae99836e5746321e0900000000000000000000010f1b29323e4a4e5861676c71747577777674726d6862594f4a3e32281a0e000000000000000f253a4f647a8fa4c1bec4b7b3aca199877a6459483420110000000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000614212e39454b59626c767e84898e929495959493908c87817a70655e4d483c2f2214060000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000152a3f556a7f94aabfd4dfcab59f8a75604b36200b00000000000000091d324556647a8b9faab8c5cfd9e1e4ddd6cdc9c6b9b4aea79e978c83796b6055463a291a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000070b1016171e21222322201d15150e0c070000000000000000000000000000071a2d3d4a4e5f5f5f5f5f5f5f5f5f4c463a2917040000000000000000000000000000000000000000000000000000021527384e647a8c9fb4bab39d8874606264646362605657514b433639353026221b1004000000000000000014293d51626b6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6c6b6a6866636054544d483c372e1f170c00000000000000000000000000000000000000000000000000000000071a2d3d53697e93a4b6c6d6cbb7a6998374655d58555456585e6676859ba9baced4c4b3a1907b6550392816030000000000000000000000000b161e2d363a464c52575b5560626260575d58534d483b362d1e160a00000000000000000f24394e64798ea3a7abb4b9c6bfb2a69d8878624d3f2e1c0800000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000021424323f4b57606a77818a93999fa9a7a9aaaaaaa8a5a59d968f857b70625a4c403225140600000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000014293e54697e93a9bed3e3cfbcab8c77614c37220c000000000000011426374b6074879da9bac8d6e3e6dfd2c9c6b9b4ada89e98918981796e635b4b4437291c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0d0d0d0b0902000000000000000000000000000000000000000f1f2d36394949494949494949493633291b0b000000000000000000000000000000000000000000000000000000000a21364a5c697f939fa9b7a696807577797a797776716c6660544b44372d1f1107000000000000000000000e2134445156575757575757575757575757575757575757565553504d4b433638352b221b10040000000000000000000000000000000000000000000000000000000000000f20364b6074869ca8b9c6d1c4b3a199857a726d6b6a6b6d737c869ba3b5c7d0c3b7a699846f5d4c381b0b0000000000000000000000000000030f1a212933363d4137444b4c4d4b4539433d37342b221b10030000000000000000000b20364b6074859092969ea8b7c3c4b7a69a84705d4b37230800000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000102132424f5d65757f8a979fa9afb4bac7bebfc0bfbdc3b7b2aca29a908578665e4f4332241302000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000013283d53687d92a8bdd2ecdab7a28d77624d38220d000000000000081d314455697e93a5b7c7d7e6e2d4cbc1b5b0a89e989189837c756c635b4e493d3126190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124343434343434343434211f170b0000000000000000000000000000000000000000000000000000000000071a2d3e4f61697e8b9da5b09e968a8c8e8f8e8c8a86817b736960554a3d2e211101000000000000000000051626343d41424242424242424242424242424242424241413f3e3b383530262220190e080000000000000000000000000000000000000000000000000000000000000000081d314455647a8a9ea8b5c1c9bfb3a39b8f8782807f808388909ca4b5c1c8bfb3a59d8877624c3f2f1c0000000000000000000000000000000000070c171f21272c27313637383632282d282220190d070000000000000000000000081d31445560747b7d818a9da5b7cac4b4a2907b655036261401000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00081b2e3f4f61697b87959ea8b4bac7c9cdd7cfcdcccdcfd4cac7c0b4b0a29a897c69614f42312010000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000013293e53687e93a8bdd3ebd9c8a28d77624d38220d0000000000000b20354b6074889db3c3d4e5e0d2c4b7b2a39b9289827c756e6760564e493d352c1d14090000000000000000000000000000000000000000000000060c0e141414141414140c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e1f1f1f1f1f1f1f1f1f0c0a04000000000000000000000000000000000000000000000000000000000000000f2032434f606878879db2b0aa9faaa3a4a3ab9f9c9790877e73645c4b3f2e200f00000000000000000000081621292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2c2a292623201c140d0b0500000000000000000000000000000000000000000000000000000000000000000000021527374a5c657c8a9ba3b1b5c1c1b4b0a49c97959495989da6b2b6c3c0b4afa199877963594834211100000000000000000000000000000000000000040a0c1217151d202222211e1618130d0b05000000000000000000000000000215273744556065676c78879db2c4d1c0ae99836e5443301c08000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000e22374b5d697f8c9da5b4b9c6cdd2c9c6bfbab8b6b7babfc6c9d1c8c0b4a79e8d7f69604e3e2d19090000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000014293f54697e94a9bed3e2cebbaa8b76614c36210c00000000000010253b50657a90a6b7cbe1e6d2c2b5a69d91857d756d666056524b4538352c211a0e0100000000000000000000000000000000000000000000010f1a212329292929292929211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b495b6377849aa5b7c8bbb4bbc8b9c9bcb4b1aca59d93857a655d4b3e2d190900000000000000000000050e1416181818181818181818181818181818181717161513110e0b0801000000000000000000000000000000000000000000000000000000000000000000000000000009192d3e4c5e657985929ba3b3bfc8c3b6b2adaaa9abadb2b7c4cabdb1a29a908377635b4a3b2b180300000000000000000000000000000000000000000000000002080b0d0d0b09030000000000000000000000000000000000000009192737444b50525a667b90a6b7cbc9b39e8974604b35200b000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0010253a4f657a8f9faab7c3cdd2c9c2b5b1aaa5a2a1a2a4aab1b6c2cdd1c5b8ab9f927e685c4a3727150200000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000162b40556b8095aac0d5dfcab49f8a75604a35200b000000000000152a40556a7f95aac4d5e7d8c8b5a39b877c70676056514b4538363228211a0f060000000000000000000000000000000000000000000000000f1f2c35383e3e3e3e3e3e3e3733291c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b1412100a0100000000000000000000000000000000000b203448596379889aa2b4c3cbc3b6b2adacacb0b4bbc3b7b2a39b8a7b655c4a3727150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202f404c5b63727d8599a1b3c7d3cac7c2c0bfc0c2c8cbd4c5b19f97847b6f62594a3d2d1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192731363b3c4c5e73889db2c8ccb9a78e79644e39240f000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000e22374b5d6d8298a5b6c8ccc1b5b0a49c948f8d8c8d8f959ca4b4bac7d5c9bcb49f8b7a645544311d0a00000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0006192b3c596e8398aec3d8dec8b39e89735443301c07000000000003192e43586e8398adc3d8e2cebbaa9b8577665e524b4538363228211e160a0c0d0b0600000000000000000000000000000000000000000000061a2c3d494e545454545454544c473a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202a27251e1305000000000000000000000000000000091c2f404d6277889da6b4c0c4b8b3a59d9896979a9faab2bfc1b5a89e8a7a645544311d0800000000000000000002090b0e0e0e0e0e0e0e0e0e0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000211212f3d49546068768499afc4d9d4cbc8c5c3c5c8cbd5d7c2ac978276665e4c483b2d1f0f0000000000000000000000020c12142020202020201f1c130b08010000000000000000000000000000000000000000000000000000000009151d20252f40596f8499aec4d6c5a6907b66513b2611000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00081b2e3f4b6175879caabbb8b3a39b90867f7a7877787a7f86939fa9b9c6d7cebaa99c8674604b38271502000000000f24394e64798ea3b9cee0cbb6a18b76614c3621140c0d2035495a72879cb1c7dcdac5b09a85705b362513000000000000051b30455a70859aafc5dadfc9b49f8b7963594d40363228211e160b0b171e212320190e0200000000000000000000000000000000000000000c2135495b6369696969696969615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000411192731363f3d393023130000000000000000000000000000000f24384c5e6f849aa6b7c4c7b8a69d9087838182858b99a1b2bfc6b9a89b8573604b35200e00000000000000000a151d20232323232323232323201c1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c304354606c7d8999a1b3c7c8c4b7b2afaeb0b3b8c5c9c5b19f97887c6a614f42321f0f0000000000000000000006141f2629353535353535343129201d15090000000000000000000000000000000000000000000000000000000002080b182d43586d8298adc2d2bda7927d68523d2813000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000101e334657647a8b9faba79e92857b716a65636162656a737e8b9ea8b9cdd8c7b5a4937e695645311d09000000000f24394e64798ea3b9cee0cbb6a18b76614c40322321212b3b4d62788da4b6caded8c8ab96816c56412c17000000000000061c31465b71869bb0c6dbdac5af9a85705b493b30211e160b090c181f29333638352b1d150a000000000000000000000000000000000000000e23384e63797e7e7e7e7e7e7e76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f2f37444b54524d41301b0b000000000000000000000000000114263751667b90a2b3c4cdbaa99d887c726e6c6d70778399a1b3c7c6b5a3937e69533c2c19060000000000000a1a28323638383838383838383835302618080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192f404b607281929ea8b3bfc0b4afa69d9a999a9ea6b1b5c2bdb1a69d907f6a604f3d2d1a070000000000000000021424323b3e4a4a4a4a4a4a49463e353127190a000000000000000000000000000000000000000000000000000000000004192e43596e8398aec3d2bda8927d68533d2813000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000031729394a5c687e8d9492887d72655d55504d4c4d4f5460687b8a9eb4c2d2d2c2b29d8874604b36200b000000000f24394e64798ea3b9cee3d1bca6917c675e4f433936363b48596a8095aac2d3e2cebbaa927c67523d2712000000000000061b31465b70869bb0c5dbd7c2ad97826d583d2c1d12090a0c171f2a3339464b4d493c32281a0a00000000000000000000000000000000000012283d52677d9293939393938d78634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d2a343f4c556069675f4d3a291704000000000000000000000000081d3144556e8399aec0d0c9b49f8b79665e585757596272849aafc3d2c1b19c87725a4935200c000000000002152838454b4e4e4e4e4e4e4e4e4e4b43362614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374c5e6c81969fb3b9c6beb2a29a8f8885848588909ca4b4c0c4b7b29d937e695c4a36210e00000000000000000c1f32424f536060606060605e5b534b4437271a0a00000000000000000000000000000000000000000000000000000000051a2f455a6f849aafc4d1bca6917c67513c2712000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000b1b2d3e4e60687a7f7d766860544c3f3a38373836434b5d687e93a4b5c9decbb7a6917c6651362513000000000f24394e64798ea3b9cee3dfc9b49f8b7c6961534e4b4c4e5962778a9eb4c9dedfcab49f8b77624c37220d000000000000051a2f445a6f8499afc4d9d9c3ae99846e564531221f181f2129333a474c5761625a4b4538281502000000000000000000000000000000000012283d52677d92a7a9a9a9a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2a3b474c5d65747f7d675846331f0f0000000000000000000000000b20354b6075899fb4c9d6c1ac97816c5b4c40413b485463798ea5b7cacab6a48d78634d38230e0000000000091d32455660636363636363636363605443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455667c919fb0bdccc4b2a098847a73706e70747b869aa2b4c7cbbbb49f8b79644e3c2c19060000000000000012263b4f606975757575757574716860554538271502000000000000000000000000000000000000000000000000000000061b30465b70859bb0c5d9c9a5907a65503b2510000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000102031424e5c646a6861574a43362f2523222326303f4e6071869cb1c6dcd4c4ae98836e5443301c070000000f24394e64798ea3b9cee3e2cdbaa99f8c7f7168636161636a77869ca8b9cce1d2c1ae99846e5948341f0b00000000000001172c41566c8196abc7d7dec9b39e8975604b4137332a33363a464c58616c76786f605645321d0d000000000000000000000000000000000012283d52677d92a7bcbeb8a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384759616e7b86948876614c3d2d1a0700000000000000000000000e23384e63788da8bacdd0bba5907b66503d2f2c2b364a5b72889db2c7d3c2a6917c66513c271100000000000b20364b607479787878787878787972604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073869cb1bdcdcbb7a6988272645c5a5954606575849aa9bacdcebaa999846f5a4935200c0000000000000014293e53697e8a8a8a8a8a8a89867e73605645311d0e00000000000000000000000000000000000000000000000000000004182a3a5c72879cb1c7cfbcab8e78634e39230e000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000021424313e4a4f55524b4639302518110e0c0d141c314254697e93a9c6d6ddc8b39e8874604a35200b0000000f24394e64798ea3b9cee3ead7c7baaa9f94867e797676797f899ca4b5c6d6dac9b5a3917c66513b2a18050000000000000012273c51677c91a9bacde0ccb9a7947f6a5f514c473a464c5158616a77818a8d8474604b3b2a18050000000000000000000000000000000012283d52677d92a7bccdb8a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556617783909ca496816c5b4a36211000000000000000000000000f253a4f647a8fa4c6d7ceb8a38e79634e392417182d3d5b70859bb0c5d2bda8937d68533e281304000000000f24394e64798d8d8d8d8d8d8d8d8b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a4b6caddc8b29d887561544a3e36434b5762788a9fb4c9d8c7b3a18d78634d38230e000000000000000b20364b6075879d9f9f9fa79e9b938374604b3c2c190600000000000000000000000000000000000000000000000000000a1f34475974899fb4c9cab49f8a75604b36200b000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000000614202d363a3f3d3633291c130800000000011423394e63788ea8b9cce0ccb8a78d78634d38230e0000000f24394e64798ea3b9cee3e6d4c3b7b2b4a39b938e8b8b8e949ea7b5c2d2e3cfbcab9b8673604b35200d00000000000000000c21364b61768a9fb4c6d7d6c5b49f8c7d6f6661585e5861666d767f89979fa295806b5948341f0e0000000000000000000000000000000012283d52677d92a7bccdb8a38d78634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60748699a1b1b49f8b79634e3e2d1b07000000000000000000000f253a4f647a8fa4c6d6ceb9a48f79644f3626242532455671869bb1c6d2bda7927d68523d271f170c0000000f24394e64798ea3a3a3a3a3a3a18b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc2d3d4bfaa957f6a5746362d263039485a6d8298adc2d7d0bfa9947f69543f2a1400000000000000091d324556697e93a5b7c5b9b3b0a195806b5a4935200d00000000000000000000000000000000000000000000000000000c22374c61778ca9bacdc7b29d87725645321d09000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000000002101b22242a28211e170b000000000000000b20354a6074899eb4c9ded5c5a5907b66503b26110000000f24394e64798ea3b9cee3dfcab7a59da5b4b1a8a3a0a1a3aab3b8c5d2dfcebfb59f8d7a645544311d0800000000000000000a1e3346576c8197a8b9cde1cebbaa9f92847c77747374767b8289959ea8b4b49f8a77624c3c2b190600000000000000000000000000000012283d52677d92a7bccdb8a38d78634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea4b2bfbbaa99836e5c4a36220f000000000000000000000e23384d63788da8b9ccd2bda8937e685444373a3a3f4b60758a9fb4c9d6c6a6907b6651443733291c0c00000f24394e64798ea3b8b8b8b8b6a18b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527375c71869bb1c6dbd9c8a48f79644f392818141c2b3c52677c92a7bcd1d8c3ae98836e59432e1904000000000000021528384b6074879db2c3ccc9bfb49f8c78634d3b2b1805000000000000000000000000000000000000000000000000000f24394f64798ea4c7d7c4af99846f5a38281502000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000000000000070d0f15130c0a030000000000000000071c30435472879db2c7dcd2bda7927d68523d28130000000f24394e64798ea3b9cee3ddc7b29d889aa2b4bbc8b6b6b8bfc8ccd5d3cabdb1a196816c5c4b372614010000000000000000031729394c62778a9eb4becfd9c8bbb4a199918c8988898b90979ea8b3b9c6baa896816c5a4935200b00000000000000000000000000000012283d52677d92a7bccdb8a38d78634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a9fb4c8c8b3a18e7a644f3e2d1a070000000000000000000b20354b6074899eb3c9dbc6b19b85736055504f50525d697e93a9bacdcdb9a88c776460554c473a291704000f24394e64798ea3b9cdcdcbb6a18b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445574899eb4c9decebbaa8b76614c36210c010f24394f64798ea4b9cedbc6b19b86715c46311c07000000000000000a1d314556687e93a5b7cbdecebbaa97816c594834200c0000000000000000000000000000000000000000000000000012273c51677c91a6bcd1c1ab96816c56412c1700000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000000000000000000000000000000000000000000021628385c71869cb1c6dbd3bda8937e68533e29130000000f24394e64798ea3b9cee2cdb7a28d7884969faab4c0c6c9cdcfcac7c3b6b29f978373604b3e2e1909000000000000000000000b1f3448596a7f94a0b2c0ced9cebfb3aea6a89e9d9fa9a6acb4b9c6ccd6c6b49f8b78624d38230d00000000000000000808080808080812283d52677d92a7bccdb8a38d78634e38230e080808080808060400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586c8196aabbcebfae99836e5c4a36210c000000000000000000081c3043546e8398adbecec9b5a39781736a656465686e7b8b9fb4c7d7c9b49e8a7e79756d615847331f0a000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa8b9cddfcab49f8a755746331e0a000d23384d62788da2b7cddcc7b29d87725d48321d0800000000000000021527384b6074879db2c3d4d9c8b49f8b77624d3a2a1804000000000000000000000000000000000000000000000000142a3f54697f94a9bed3bea8937e69533e291400000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000000000000000000000006050000000000000000091e32455672889db2c7ddd2bda8927d68533d28130000000f24394e64798ea3b9cee0cbb6a18b7674818c9aa2abb1b4babcb4b2ada59d918173605544312010000000000000000000000005182a3b4a60728298a2b1bdcbd4d0c7c4c6b9b4b3b4bac7c2c9cdd6d5ccc2b5a998826d58432d18030000000001080b1d1d1d1d1d1d1d1d283d52677d92a7bccdb8a38d78634e38231d1d1d1d1d1d1d1b1912090000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4d62788b9fb4cac7b3a18e79644e3a2917040000000000000000011426364f657a8f9fb1c3d2c1b19f97867f7b797a7d838c9fa9bacde1cdb9a89e938e898276614c37210c000f24394e64798ea3b9cee0cbb6a18b76614c36210f12141514120e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758ba8b9cde1cebbaa8a75604b35200b020e23394e63788ea3b8cdddc7b29d88725d48331d0800000000000000000a1d314556687e93a5b7cadfcebaa996816c5847331f0b000000000000000000000000000000000000000000000001172c41566c8196abc1d0bba5907b66503b261100000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000000000000001080b10161c1b140e0b07000001081221364b60758a9fb4c9dfd8c8a6917b66513c26110000000f24394e64798ea3b9cee0cbb6a18b76616b79858f969b9fa9ab9f9c9891877c6d605544372715020000000000000000000000000d1c304354607484979fb2b7c4cbd4d9d7cdc9c8c9cdd7d7d7d2c9c5b8b3a49c8b7d67523d27120000000009141d203333333333333333333d52677d92a7bccdb8a38d78634e383333333333333333302d261a0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6d8298adc1cfbfad97826d5847331f0a0000000000000000000822374b5d6d8297a4b6c2cebdb1a49c94908f8f92999fabbac7d7d3d6c6b9b4a8a89f95806a55402b15000f24394e64798ea3b9cee0cbb6a18b76614c36212427292a292723211a0f0b050000000000000000000000000000000000000000000000000000000000000000000000000000081d31445574899eb4c9ded9c8a28d78634d39281c151d2b3b51667b90a6bbd0dbc6b19b86715c46311c070000000000000000021527384b6074879db2c3d4d8c7b49f8a77614c392917030000000000000000000000000000000000000000000003182d43586d8298adc2ceb9a48f79644f3a240f00000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000000000a09141d20252b31302923201c1319141c20304050657b90a9bacee2cebbaa8f7a644f3a250f0000000f24394e64798ea3b9cee0cbb6a18b76615c64707a8186898b8b8a87827c73665e4b443727190900000000000000000000000000001325364556607481929da6b2b7c4c5c8ccd6cdd6ccc9c6c2c1b5b0a79e94867a675f4d39251000000009192631354848484848484848484852677d92a7bccdb8a38d78634e4848484848484848484542382a1a09000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4f647a8ea3b5c9c9b49f8a76614c37210f000000000000000000081b2e3f4c6176869ca4b1becac2b6b1a9a5a4a5a7aeb4bcc9c6bebdbdbdbdbdc6baac97826d57422d18000f24394e64798ea3b9cee0cbb6a18b76614c36353a3d3e3f3f3c38352c2220190d02000000000000000000000000000000000000000000000000000000000000000000000000021527375b71869bb0c6dbd3bea8937e695745373027313a48596c8196acc1d6d8c7ad98836d58432e18030000000000000000000a1d314556687e93a5b7cadfcdbaa895806b5746331e0a0000000000000000000000000000000000000000000004192e44596e8399aec3cdb8a28d78634d38230e00000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000004121d242631353a4046453e393530252e263035404c5e6e8399aec7d8dfc9b49f8a76614b36210c0000000f24394e64798ea3b9cee0cbb6a18b76614c4e5c646c7174767675726d6660554d4031271909000000000000000000000000000000081828384556606c7d88939da6abb0b3b8c5b7c6b9b3b1ada8a39b93887f74645c4d41301e0a000001142637444b5d5d5d5d5d5d5d5d5d5d5d677d92a7bccdb8a38d78635d5d5d5d5d5d5d5d5d5d5b55483826120000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22364a5c71869bb0c7cdbaa9947e69543e2d1a07000000000000000000101f334658627786979faeb4bbc8c6bfbab9babdc3c5c2b5b1a9a8a8a8a8a8a8a8a897826d57422d18000f24394e64798ea3b9cee0cbb6a18b76614c444b4f52545554514e493d38342b1d150a000000000000000000000000000000000000000000000000000000000000000000000000162b41566b8096abc0d0dcc7b29c877560554b4338454b5862778a9eb4c9decebaa9937d68533e281300000000000000000000021527384b6074879db2c3d4d7c6b39e8976614c38281603000000000000000000000000000000000000000000051a2f445a6f8499afc4ccb7a18c77624c37220d00000000000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000001222303937444b4f555b5a534e4a43364336434b4f5e667c91a1b3c7e5d7c6b09a85705746321e0a0000000f24394e64798ea3b9cee0cbb6a18b76614c3e4b4f565c576061605458514b4437301d150900000000000000000000000000000000000a1a2838454b5f67757e8890969b9ea7a1a2a1a89e9c97938d867e756960564a3e302313010000081d314455607272727272727272727272727d92a7bccdb8a38d797272727272727272727272706655422d19000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e53687e93a9bacec7b19c87725c4a36210d0000000000000000000417293a48596276828f999faaadb2b4bbc8c5b8b3b0aaa49c94939393939393939393826d57422d18000f24394e64798ea3b9cee0cbb6a18b76614d55606467696a6967635b564d483c32281a0e00000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea2b3c7d7cab6a59882746560545956606776849ba8b9ccd5c4b49f8a77614c37220c00000000000000000000000a1d314455687e93a5b7cadfccb9a7947f6a5645321e0a00000000000000000000000000000000000000000003182e43586d8398adc9dab9a38e79644e362b1d1c0e0000000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000a1d30404d515560656b7170696360545958595460646e7c8a9eb4bfd0e1cdbaa8947f6a55392916030000000f24394e64798ea3b9cee0cbb6a18b76614c36373a4139454b4c4b43363c353126191202000000000000000000000000000000000000000a1a2832414d566069747b8185898b8c8d8c8b8986827e78716861574b45382d2013050000000b20354b6073878888888888888888888887889eb3c8ddc8b29d88888888888888888888888884705b45301b000000000000000000000000000000000000000000000000000000000000000000000000000000000000001021364c61768a9fb4c9cab6a48e79644e39240f000000000000000000000c1c2b3b4858616d7b848b93989d9faaa2a1a79e9a958f867f7e7e7e7e7e7e7e7e7e7b65503a2510000f24394e64798ea3b9cee0cbb6a18b7661626d747a7c7e7f7e7c78726b625a4b45382b1e0f010000000000000000000000000000000000000000000000000000000000000000000d22364a5c6f849aa9bacdd3c3b2a098857b74706f70757c879ba3b4c6d6c9b8a697816c5947341f0a0000000000000000000000021527374b6074879db2c3d4d6c5b39e8875604b38271502000000000000000000000000000000000000000000142a3f54697f94abbccfbda7927d6854483c3a2c1c0a00000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000f24394d5e666e747a8086857e7974716f6e6e70747a83919ea8b9cdddd4c4b49f8a77614c37220c000000000f24394e64798ea3b9cee0cbb6a18b76614c3621252c2832363635302626201d1409000000000000000000000000000000000000000000000a151d3038454b5560656b7073767778777674716d68625a534b463932281a1002000000000b20354b60748a9d9d9d9d9d9d9d9d9d9d9d9ea7b8ccdfcbb7a69d9d9d9d9d9d9d9d9d9d9d9d88725d48331d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586f8499aec8d3c2aa95806b553d2c1a06000000000000000000000d1d2b3a474c5d656f777e83878a8b8d8c8b8885807a7169686868686868686868655d4b37230e000f24394e64798ea3b9cee0cbb6a18b766a7882898f92939494918d8780786b6056493c2c1f0f000000000000000000000000000000000000000000000000000000000000000000071b2d3e4e63798b9fb4bccfcfbeb2a39b908885848689919ca5b4c1d1cdbcab9e8876614c3a2a1804000000000000000000000000091d314455687d93a5b6cadfcbb8a6937e695645311d090000000000000000000000000000000000000000000d23384d62788c9fb5c2c6b09b8572625a574a3a271400000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000011273c51667d83898f959b9a938e898684838485898f98a0b4b9c6d7d7c7b7a696816b5947341f0a000000000f24394e64798ea3b9cee0cbb6a18b76614c36210f17161e2121201c14110b080100000000000000000000000000000000000000000000000002131a283237444b50565b576162626261575c58534d483c3632281d150a0000000000000b20354b60758aa0b2b2b2b2b2b2b2b2b2b2b3b8c5d5e7d4c4b7b2b2b2b2b2b2b2b2b2b2b29d88725d48331d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a52677d92aabbcec6b19c86715b4935210c00000000000000000000000d1c29333f4b505962696e72757677777673706b645c54535353535353535353504b3f2e1c08000f24394e64798ea3b9cee1cbb6a18c76808b979ea7a7a9aaa9a6a59d958a8074625a493d2c1c0c000000000000000000000000000000000000000000000000000000000000000000102135495b697f949eb4bcc9cfc1b5b0a79e9b999b9ea8b2b6c3d1c7bab49f8d7c665846331c0c00000000000000000000000000021527374b6074879db2c3d4d5c4b29d8774604b3726140100000000000000000000000000000000000000000b2035495a6d8297a4b3bfb5a3988278726857432f1a00000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000003182e43586d83989ea7aab0afa8a89e9b9998999a9ea8adb2becdd7d4c7baa99d8877614c3a2a1804000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0003090b0c0b08010000000000000000000000000000000000000000000000000000000000000a161e2631353b4139464b4c4d4c4b4639423e38352b211e160b02000000000000000b20354b60758aa0b5c7c7c7c7c7c7c7c7c7c8cbd5e2f1e1d4cac7c7c7c7c7c7c7c7c7c7b29d88725d48331d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b9fb4cac9b6a48d78634e38230e0000000000000000000000000c171f2e373b484d5458546061626261575b554f4b3e3e3e3e3e3e3e3e3e3e3a372e211100000f24394e64798ea3b9cee3dac5b09a85959fa9b3b8c5bebfbec3b7b2a99f958678635b493a2a18040000000000000000000000000000000000000000000000000000000000000000061a2c3d4f616b80959fabb6c3c9c9c5b8b3b0aeb0b4b9c6cac8c1b5a99f927e685e4d3a2917000000000000000000000000000000091d314455687d92a5b6cadfcbb7a5927d685544311d08000000000000000000000000000000000000000006192b3c4c61758699a1b2b7b2a0988d86725c47321d00000d22374d62778ca2b7cce1cdb7a28d78624d38230d00000000152a3f546a7f94a9b9c5c6c5c6b9b3b1aeadaeb0b4b9c6c6cfd8cec4b7a99f8b7a645947341c0c00000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000209141d20252c2832363738373633292d292220190e09030000000000000000000b20354b60758aa0b2b2b2b2b2b2b2b2b2b2b3b8c4d5e6d4c3b7b2b2b2b2b2b2b2b2b2b2b29d88725d48331d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465870859bb0c5d3c2a8937e68533e29130000000000000000000000000004111c232b34373e36434a4c4d4c4b4639403a372e29292929292929292925231c110300000f24394e64798ea3b9cee3ddc8b4a29aa2b4bac7bebec0c6c9d2cbc7bab4a49c8879635947341f120000000000000000000000000000000000000000000000000000000000000000000e1f324351626b808c9da5b1b5c2c4c8c8c5c4c5c9c8c3c0b4b0a39b8a7e68604e40301c0c000000000000000000000000000000021527374b6074879db2c3d3d4c3b29c8774604b3625130000000000000000000000000000000000000000000e1e334657617683909da5b7b2ad9d88735d48331e00000d22374d62778ca2b7cce1cdb7a28d78624d38230d0000000011263c51667b91a6c6d6dbdad6ccc9c6c4c3c3c5c9ccd6d5ccc8bbb4a69d8b7d675c4a3a2a180000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1016161e21222322211e1718130d0b050000000000000000000000000b20354b60738a9c9c9c9c9c9c9c9c9c9c9c9da6b8cbdfcab7a59d9c9c9c9c9c9c9c9c9c9c9c88725d48331d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a556a8095aac8d9c2ad98836d583c2b19060000000000000000000000000000080d192022292530353638373632282b25221b131313131313131313100e08000000000f24394e64798ea3b9cee3e4d1c0b4b0b4b5b1aca9a9abb0b5c1cad3cdc2b5a69d8777614c403019090000000000000000000000000000000000000000000000000000000000000000001525344451626b7b87929ca4a9afb3b4bbc8bbb4b2aea9a29a91857968604e423122120000000000000000000000000000000000091d314455687d92a5b6cadecab6a4917c675443301c070000000000000000000000000000000000000000031729394758616f7b879db2c7b29d88735d48331e00000d22374d62778ca2b7cce1cdb7a28d78624d38230d000000000d23384d62788da8b9cde1d9cbc1bebdc0c2c3c5c4c3c1c5b8b3aa9f97887a675f4d3e2e1c0c0000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c0d0d0d0c0a0300000000000000000000000000000000000b20354b6073878787878787878787878787889db3c8ddc7b29d87878787878787878787878784705a45301b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8faabbcec8b29d88735a4835200b00000000000000000000000000000000050b0d14131c20212222211e16160f0d08000000000000000000000000000000000f24394e64798ea3b9cee3edddcfc1b5b0a49c969494969ba3b1b6c2d3d2c4b7a598826e5e4d3727150100000000000000000000000000000000000000000000000000000000000000000716263444505d65747d868f94999e9faaa2aa9f9d99938e857c73635b4e42312413040000000000000000000000000000000000011527374b6074879db2c3d3d3c3b19c8673604a35201100000000000000000000000000000000000000000a1a304150616a7c879da5b7b8b29d88735d48331e00000d22374d62778ca2b7ccdecdb7a28d78624d38230d000000000b20354a6074899eb4c9decbbbaea9a8abadaeafafaeaca9a79e978b8177645c4d41302010000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455607272727272727272727272727d92a7bccdb8a38d797272727272727272727272706655412d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9fb4cacbb7a68d78624d38230d000000000000000000000000000000000000000000070b0c0d0d0c090300000000000000000000000000000000000000000f24394e64798ea3b9cee3e2cfbfb2a39b8f86817f7e80868f9ca4b6c2d3d4c3b2a0917c665544311d08000000000000000000000000000000000000000000000000000000000000000000081626333f4b566068717a7f84888a8c8d8b8a88837e7970666054493d3124130600000000000000000000000000000000000000091d314455687d92a5b6cadec9b5a4917c66513f2f1c08000000000000000000000000000000000000021628384d5f6a7f919da5b6b8a79e9588735d48331e00000d22374d62778ca2b7c9c9c9b7a28d78624d38230d00000000071c30435470869bb0c5dbc1ae9d93929698999a9a9996938f8881786c62594b3e30231302000000000000000f24394e64798ea3b9cedecbb6a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000040a0c1114151413100c0903000000000000040a0b0b0b0b0b000000000000000000000001142637444b5d5d5d5d5d5d5d5d5d5d5d677d92a7bccdb8a38d78635d5d5d5d5d5d5d5d5d5d5a5548372512000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455771869cb1c6d4c4a6917b66513c2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3dbc6b2a199857a716c69696b717a869ca4b6c9d9cfbeb29d8774604b35200e000000000000000000000000000000000000000000000000000000000000000000000715212e38454b525c646a6f737576777674736e69635b514b43362c1f13060000000000000000000000000000000000000000011527374b6074879cb2c3d3d2c2b09b85705d4b372310000000000000000000000000000000000000091e324556677d929db2b6b8a79e89807c66513c261100000d22374d62778ca2b4b4b4b4b4a28d78624d38230d0000000000132536586d8297adc2d3bea9937e7d808384858584817e7a746c625a4c483b2e20130500000000000000000f24394e64798ea3b9c9c9c9b6a18b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000080b171f2126292a2a2825211e160b0900030a0c191f202020202013110b02000000000000000009192631354747474747474747474752677d92a7bccdb8a38d78634e4747474747474747474541372a1a0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839576d8297acc2d4bfa9947f6a543f2a150000000000000000000000000000000000000000000000040b0c1214151513110c0a0400000000000000000000000000000f24394e64798ea3b9cee3d8c3ae998374645c575454565d6476869cabbccfdfcbb7a5917c66513c2b19050000000000000000000000000000000000000000000000000000000000000000000003101a2832363e4b4f545a5460616261575d59544e4a3d353026180f0100000000000000000000000000000000000000000000091d314455687d92a5b6caddc8b4a3907b65503e2e1b0700000000000000000000000000000000000b21364b6075889db3bcc8b39e89786b665e4c38240f00000d22374d62778c9e9e9e9e9e9e9e8d78624d38230d000000000014293f54697e94a9bed2bda8937d686b6d6e706f6e6c696460554d493c342a1d10020000000000000000000f24394e64798ea3b4b4b4b4b4a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000003111c232933363b3e3f3f3d3a363228231c11171e212f35353535353529261f1406000000000000000009141d203232323232323232323d52677d92a7bccdb8a38d78634e383232323232323232302d251a0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bed3c2ad98826d58432d18000000000000000000000000000000000000000000090c181f2227292b2a2826211f170c0a0400000000000000000000000f24394e64798ea3b9cee1cbb6a18c7661564b3e3f3f3f4b5863798c9fb4cadfd4c3af9a846f5a4835200b0000000000000000000000000000000000000000000000000000000000000000000000000a151d202e373a3f36434a4c4d4c4639443e39362d201c1408000000000000000000000000000000000000000000000000011527374b6073879cb2c3d3d1c1af9a846f5c4b37220f000000000000000000000000000000000012273c52677c91a6b8cbc0ab95806b5a514c40301d0900000d22374d62778a898989898989898a78624d38220d000000000010263b50657b90a5c5d6c1ab96816c5658595a5a5957544f4b4437352b1f180d00000000000000000000000f24394e64798e9e9e9e9e9e9e9e8b76614c36210c000000000000000000000000000000000000000000000000000000000000000b161e2e373a464c50535554534f4b4639382f20293336444a4a4a4a4a4a3e3a31241402000000000000000001080b1d1d1d1d1d1d1d1d283d52677d92a7bccdb8a38d78634e38231d1d1d1d1d1d1d1b18120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5c9d9c6b09b86715b3626140100000000000000000000000000000000000003121d242a34373c3e403f3e3b363329211f170c020000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c382e2a292e3a4a5b6d8297adc5d5dfcab59f8c78624d38220d000000000000000000000000000000000000000000000000000000000000000000000000000209101b22242a25303537383633292e2923211a0f08010000000000000000000000000000000000000000000000000000091d314455687d92a4b6cadcc7b4a28f7a644f3d2d1a0700000000000000000000000000000002172c42576c8197acc4d5baa48f7a654f3c383022120000000b2034485962747474747474747474625a4835200b00000000000d22374d62778ca7b8ccc4af9a856f5a3a44454544413e3a35312720190e050000000000000000000000000e24394e63798a898989898989898a76614c36210c0000000000000000000000000000000000000000000000000000000000000d1b29323f4b4f586166696a6968656157504c403539464b595f6060606060534e42311f0b00000000000000000000000808080808080812283d52677d92a7bccdb8a38d78634e38230e080808080808050400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788dabbccfc8b39d88735443301c0800000000000000000000000000000000000b161e2f383b474c5154555553504c463a3733291d150a00000000000000000f24394e64798ea3b9cee0cbb6a18b76614c362114141c2d3d50657a8fa7b8cce0cfbcab937d68533e281300000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f15131c202122211e1719140e0c070000000000000000000000000000000000000000000000000000000000011426374b6073879cb2c2d3d0c0ae99836e5b4a36210e000000000000000000000000000000041a2f44596f8499aec4ccb7a28d77624d38221d120400000005182b3b484d5f5f5f5f5f5f5f5f5f4d483c2b190500000000000b2034485973899eb3c8c8b39e887359473430302f2c2925201d151816130c0a04000000000000000000000c21364a5b63747474747474747474615846331f0a00000000000000000000000000000000000000000000000000000000000d1d2a39464b5d656f767b7e7f7f7d7a766e665e4d484657616e74757575757568604e3a261100000000000000000000000000000000000012283d52677d92a7bccdb8a38d78634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4cacab49f8a75604b35200b000000000000000000000000000000000b1b2832404c51596167696a6a68666158544c473a31271a0a000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000f20354b6074889eb3c8dddac9ad98826d58432d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0d0c0a030000000000000000000000000000000000000000000000000000000000000000000000091d314455677d92a4b6cadfcab59f8c79634e3c2c19060000000000000000000000000000041a2f44596f8499aec4ccb7a28d77624d38220d0000000000000d1d2b343749494949494949494938352b1e0e00000000000005182b3b5b70859ab0c5cbb8a68c77614c372d2d2d2d2d2d2d2d2d2d2c28211f170c000000000000000000071a2d3d4a4e5f5f5f5f5f5f5f5f5f4c463a291704000000000000000000000000000000000000000000000000000000000b1b2a3b4757616d7a848a90939494928f8a847b6f625a4b6175838a8a8a8a8a8a7e68533e291300000000000000000000000000000000000012283d52677d92a7bccdb8a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889eb3c8cebbaa8c77624c37220d00000000000000000000000000000009192839464b5e6670777c7e807f7d7b76716961584b45382718080000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c00081c3043546f849aafc4dadbc6b19c86715c392917030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374b6073869cb1c2d3cfbcab98836e5a4935200d000000000000000000000000000003192e43586e8398adc3ceb9a38e79644e39240f000000000000000d1820223434343434343434342220190e0000000000000000172c42576c8197acc1d5c4a5907a65504242424242424242424242413d3633291c130500000000000000000f1f2d36394949494949494949493633291b0b000000000000000000000000000000000000000000000000000000000316293947596275828f999faaa8aaa9a8a99f9990847868606a7f959fa99f9f9f937e68533e291300000000000000000000000000000000000012283d52677d92a7bccdb8a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426375c71869cb1c6d9c8a38e79644e39240f0000000000000000000000000000011527374657616e7c858b9193959493908b867f766a6056453625130000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0001142636566c8196abc1d6dec9b49e89745746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e111315151413100d0b05000000000000000000000000000000000000000000000000000000000000000000091d314455677d92a4b6cadac9b49f8b78634d3c2b19050000000000000000000000000002172d42576c8297acc1cfbaa58f7a65503a25100000000000000000050b0d1f1f1f1f1f1f1f1f1f0d0b0500000000000000000014293e53697e93a8bed3bea8937e6958585858585858585858585756524c463a3023130100000000000000010f1a2124343434343434343434211f170b00000000000000000000000000000000000000000000000000000000000a1e32465762778698a0aeb4bbc8bfbec7bab4aea29a8a7e6a71869bb0bab5b5a8937e68533e291300000000000000000000000000000000000012283d52677d92a7bccdb8a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a30455a6f859aafc4cfbaa48f7a654f3a25100000000000000000000000000000081d314455617583919b9faba9aaaaa8ab9f9b948a8074605443301c0700000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000152a3f556a7f94aabfd4e1cdb9a88b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000002080b131c202326292a2a2a2826222018100e08000000000000000000000000000000000000000000000000000000000000011426374b6073869cb1c2d3cebbaa97826d5a4834200c0000000000000000000000000000152b40556a8095aabfd2bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c4d5c1ac97816d6d6d6d6d6d6d6d6d6d6d6d6d6b6861584d41301f0f000000000000000000070c0e1f1f1f1f1f1f1f1f1f0c0a040000000000000000000000000000000000000000000000000000000000081c2f3f4b6175859ba4b2becaced8d3cac7c4c4c0b3a89e927f768c9fb4cad7bda8937e68533e291300000000000000000000000000000000000012283d52677d92a7bcbdb8a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8499aec4d0baa5907b65503b2610000000000000000000000000000417293a4b60738498a0b0b5bcc9bfbfc9bcb5b1a99f958573604a35200b00000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000014293e53697e93a8bed3e9d6c6a28c77624d37220d00000000000000000000000000000000000000000000000000000000000000000000000209151d20253035383c3e3f403f3e3b37342b25221b10090000000000000000000000000000000000000000000000000000000000091c304354677d92a4b6cad9c8b49f8b78624d3a2a18040000000000000000000000000013283d52687d92a7bdd2bfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000c21374c61778ca6b8cbc8b29d8882828282828282828282828282817d76675f4d3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384b5d6d8298a3b5c2cfdfd1c8c2b6b1afafb1b4b9b49d94859aabbccfd3bda8937e68533e291300000000000000000000000000000000000012283d52677d92a7a8a8a8a38d78634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aec3d0bba6907b66513b2611000000000000000000000000000a1f3347586a8095a2b2becacfd9cfcac7c6cac7b5a3937e695443301c0700000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000013283d53687d92a8bdd2e2cdb7a28d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000009151d27313636434a4e515354555453504d483b3a372e231c1204000000000000000000000000000000000000000000000000000000011426364b6073869cb1c2d3cebaa996816c5947341f0b0000000000000000000000000010253a50657a8fa5c9d9c3ad98836e58432e1900000000000000000000000000000000000000000000000000000000000000000a1f33475873889db3c8cbb7a69d9797979797979797979797979796928a7d675b4a36210c0000000000000000000000000000000000000000000000000000000000060b0d0e0e0e0e0e0e0e0e0c0a040000000000000000081b2e3f50657b90a0b2c2d2ded0c0b4afa49c999a9c9fa9b3afa29aa2b4c9d9d3bda8937e68533e291300000000000000000000000000000000000012283d52677d9292929292928d78634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8398adc2d1bca6917c67513c2712000000000000000000000000000c21374c6176899eb4c0cfdfd6c9bcb4b1b1b4bbaa9b8573604b3625130000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000014293e53697e93a8bed3e9d7c7a18c77614c37220c0000000000000000000000000000000000000000000000000000000000000000021019273137444b5154606366686a6a6968656259574f4b3f382f1f170c000000000000000000000000000000000000000000000000000000081c304354677d92a4b6cad8c7b49f8a77614c3a2917040000000000000000000000000d23384d62788dabbccfc6b19b86715c3b2b18050000000000000000000000000000000000000000000000000000000000000004172a3a5a6f849aafc4d4c4b7b2adadadadadadadadadadadadacaba89e8c79634e39240e000000000000000000000000000000000000000000000000000000000e1920232323232323232323211f170c000000000000000e22374b5d70859bb0becee0d0bfb3a29a8e878484878a939da6b3afb4c0d1e7d3bda8937e68533e29130000000000000000000000000000000000000e23384d63787d7d7d7d7d7d7d76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8398adc2d1bca6917c67513c27120000000000000000000000000013293e53687e93a8b9cdded6c6b9ab9f9c9c9faa9f8c7a6455443118080000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000142a3f54697f94a9bed4e1cdbaa98b75604b36200b000000000000000000000000000000000000000000000000000000000000000513202d37444b5560676e74787b7e7f7f7f7d7b77726c655d504c40332a1c0f0100000000000000000000000000000000000000000000000000011426364b6073869cb1c2d3cdbaa995806b5846331f0a0000000000000000000000000b20364b60758a9fb4cac9b49e8974594834200b0000000000000000000000000000000000000000000000000000000000000000172c41566c8196abc1d6d4cbc8c2c2c2c2c2c2c2c2c2c2c2c2c2c6b9aa96816b56412c160100000000000000000000000000000000000000000000000000000e1e2b353838383838383838383633291c0c0000000000011426364f657a8fa3b5c9dcd7c7b3a19a8479726f6f72767e8899a1b2bfcfdee8d3bda8937e68533e29130000000000000000000000000000000000000c2035495a6368686868686868615846331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aec3d0bba6907b66513b261100000000000000000000000004192e43596e8398aec6d6e1ccb9a89e8c87878b9696806b5c4a372614000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0001162b41566b8096abc0d5dec9b49f89745544311d08000000000000000000000000000000000000000000000000000000000000061323303e4a556069747c83898d919394959493908c87817a71665e4c473a2d1f0f0100000000000000000000000000000000000000000000000000081c304354677c91a4b6c9d7c7b39e8976614c392816030000000000000000000000081d31445573889db2c8cdb9a88c77624d37220d000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdd2d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d6c8ae99836e59442e19040000000000000000000000000000000000000000000000000006192b3c494d4e4e4e4e4e4e4e4e4c463a29170400000000081c3043546d8297acc1d2e1cdbaa99a8373635b5a5a586169778399a1b2c4d4e7d3bda8937e68533e291300000000000000000000000000000000000006192c3c494d535353535353534c463a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8499aec4d0baa5907b65503b2610000000000000000000000000071d32475c72879cb1c7dcdec9b39e8a7a727177818174604b3e2d1909000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c00061a2c3d596e8499aec3d9ddc8b29d88735d37271502000000000000000000000000000000000000000000000000000000000003132431414d5c64747e8891989ea7a6a8a9aaa9a8a5a59d978f857b6e61584a3d2d1f0f00000000000000000000000000000000000000000000000000011426364b6073869cb1c2d2ccb9a8947f6a5745321e0a0000000000000000000000021527375b71869bb0c6d6c6a48f7a644f3a250f00000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2ae99846f59442f1a04000000000000000000000000000000000000000000000000000b2035495a626363636363636363615846331f0a000000000b20354b6073889eb3c8dedec9b49f8a7762554a3d3a474c5861738399a6b7cbdfd3bda8937e68533e2913000000000000000000000000000000000000000e1e2c35383d3d3d3d3d3d3d3633291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a30455a6f859aafc4cfbaa48f7a654f3a2510000000000000000000000000091e33495e73889eb3c8ddd5c0ab95806b5c59626b6c60564532201000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c3621130c0b2135495b72879db2c7dcd9c4ae99846f59442f1a000000000000000000000000000000000000000000000000000000000000112131424e5f677a86949da6aeb3b8c5bdbfbfbebdc3b7b2aca39b908376635b4a3d2d1d0c00000000000000000000000000030303030303030303030300081c304354677c91a4b5c9d6c6b39e8875604b3827150200000000000000000000001a30455a6f859aafc4d0bba6907b66513b261100000000000000000000000000000000000000000000000000000000000000000c21364b61768ba5acacacacacacacacacacacacacacacacacacacacac99846f59442f1a04000000000000000000000000000000000000000000000000000d23384d6278787878787878787876614c36210c000000000e23384e63798da7b8cce0d9c9ac97816c5948372d2a333a47556074889db2c8ddd3bda8937e68533e291300000000000000000000000000000000000000000e19202328282828282828211f170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426375c71869cb1c6d9c8a38e79634e39240e0000000000000000000000000a1f344a5f74899fb4c9ded1bca6917c6751484d56574b453828160200000000000000000f24394e64798ea3b9cee0cbb6a18b76614c3f302522202a3b4e63788da5b6cadfd8c8aa95806a55402b1500000000000000000000000000000000000000000000000000000000000c1c2f404e60687d8b9ca4b3b7c4c8cbc8c2c0bec0c3c9cac7c1b5b0a1998779635b4a3b2a18040000000000000000040a0c16181818181818181818181818181426364b6073869cb1bfd0ccb8a7937e695645311d090000000000000000000004192f44596e8499aec3d2bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000a1e33465772879797979797979797979797979797979797979797979797846f59442f1a04000000000000000000000000000000000000000000000000071d32475c72868d8d8d8d8d8d8d8d7e68533e29130000000012273d52677d92a7c5d5e3cfbcab907b66503b2a19171f2a37455672879cb1c7dcd3bda8937e68533e2913000000000000000000000000000000000000000000060c0e131313131313130c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889eb3c8cebbaa8c77624c37220d0000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b3741423632281a0a0000000000000000000f24394e64798ea3b9cee3d1bca6917c675d4a433637363947596a8095aac3d4e2cebbaa917b66513c26110000000000000000000000000000000000000000000000000000000004182a3a4c5e687e8d9faab6c2cbcbc4b8b3adaaa9abaeb4bac7cec9bfb3a69d8979635947341f12000000000000000c171f212b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d304354667c90a1b3c5d5c5b29d8874604b3726140100000000000000000000182e43586d8398adc2d2bda8937d68533e281300000000000000000000000000000000000000000000000000000000000000000317293954697f82828282828282828282828282828282828282828282827e69533e291400000000000000000000000000000000000000000000000000071d32475c72879ca3a3a3a3a3a3937e68533e291300000000162c41566b8196abc0d6dfcab49f8b76604b36210d040c1927385c72879cb1c7dcd3bda8937e68533e291300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4cacab49f8a75604b35200b0000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b262c2c211e160a000000000000000000000f24394e64798ea3b9cee3dfc9b49f8b7b6960544e4c4b4d576277899eb3c9dedfc9b49f8a76614c36210c000000000000000000000000000000000000000000000000000000000a1f334758657c8c9fabbbc8d3c4b8b3a69e98959496999fa9b4bbc8cfc4b7a79d8777614c402f1d0900000000000c1c2a33374042424242424242424242424242424242364c5e6f8399a7b9c9cbb7a6937d685544311d08000000000000020c12141a2b3b596e8398aec3d9c9a6917c67513c27120000000000000000000000000000000000000000000000000000000000000000000b273b4f61696d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69604f3b261200000000000000000000000000000000000000000000000000071d32475c72879cb1b8b8b8b8a8937e68533e2913000000001a2f44596f8499aec4d9ddc7b29d87725645321e0900001d32475c72879cb1c7dcd3bda8937e68533e291300000000000000000000000000090f111111110d0b06000000000000000000000000000000040d13151d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d13110b010000000000000000000000000000000000000000000d23384d62788dabbccfc8b39d88735443301c080000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b2616170b090300000000000000000000000f24394e64798ea3b9cee3e2cdbaa99f8c7f7369646160626876849ba8b9cce1d2c2ae99846f5846331f0a00000000000000000000000000000000000000000000000000000006192c3c4c6177889daabbc9d5c4b7a69e928882807f80848a969faabbc9d4c5b7a699836e5e4c3824110000000004172a3a474c55585858585858585858585858585858585858586278899eabbccfc4b29c8774604b352010000000000006141f26292c35485971869bb0c6cfbcab8f7a65503a25100000000000000000000000000000000000000000000000000000000000000000000c2032434f545757575757575757575757575757575757575757575757534f42321f0c00000000000000000000000000000000000000000000000000071d32475c72879cb1c7cdcdbda8937e68533e2913000000001b30455b70859ab0c5dadac4af9a856f5a3828160300071d32475c72879cb1c7dcd3bda8937e68533e2913000000000000000000000004121c23262626262320190e00000000000000000000000000071521282b333333333333333333333333333333333333333333333333333333333328251e1305000000000000000000000000000000000000000011263b50667b90a5c9d9c6b09b86715b362614010000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110200000000000000000000000000000f24394e64798ea3b9cee3dacdc7baaa9f94867e797775787e879ba3b4c6d6dec9b5a4917c66513a2917040000000000000000000000000000000000000000000000000000000c2035495a6c8197a6b8c8d9cbb7a69d887d746d6b696b6e76808c9fabbccfd4c4b3a1917c66513f2f1c080000000a1f334758616b6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d7b8c9fb5cacab6a5927d67523f2e1b08000000001424323b3e3d494e62778b9fb4cacab49f8b76614c36210c000000000000000000000000000000000000000000000000000000000000000000031425323b3f42424242424242424242424242424242424242424242423e3b3224140200000000000000000000000000000000000000000000000000071d32475c72879cb1c7dcd3bda8937e68533e2913000000001c31475c71869cb1c6dbd9c3ae99846e59442f190000071d32475c72879cb1c7dcd3bda8937e68533e2913000000000000000000000012222f383b3b3b3b38352b1e0e0000000000000000000000041525333c4048484848484848484848484848484848484848484848484848484848483d3a312313010000000000000000000000000000000000000014293e54697e93a9bed3c2ad98826d58432d18000000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110000000000000000000000000000000f24394e64798ea3b9cedfcdbcb0abb1b4a49c948e8c8b8d939da5b4c1d1dfcebeb19c8673604b35200c000000000000000000000000000000000000000000000000000000011426374d63788b9fb4c4d5d0bfb39d887867605455545657616b7d8d9fb5c6d6d0bfb19c86715d4c382309000005182b3b4c61768082828282828282828282828282828282828282828282889db3c8d3c3b19c86715d4b37220d0000000e1e32424f535d5b636e8298aabbcec5b09b86715846331f0a0000000000000000000000000000000000000000000000000000000000000000000007142027292d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d29261f140600000000000000000000000000000000040a0c1114151513100c0a1d32475c72879cb1c7dcd3bda8937e68533e2913000000001d33485d72889db2c7ddd8c2ad98836d58432e180300071d32475c72879cb1c7dcd3bda8937e68533e291300000000000000000000091c2f404c505151514d483c2b1906000000000000000000000d21334350555d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d534e42311e0b00000000000000000000000000000000000003162839576d8297acc2d4bfa9947f6a543f2a15000000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110000000000000000000000000000000f24394e64798ea3b9ced8c3b09e959ca4b5b1a9a3a1a0a2a8b2b7c3d1e1d0c0b19f907b665443301c08000000000000000000000000000000000000000000000000000000081d3144556c8196aabbcedcc7b3a1907b655a4b43363f39464b5f6c8196a8b9cddec9b5a4907b655037261401000b20344859718595979797979797979797979797979797979797979797979da6b7cbdec9b5a48f7a644f3a250f000005192b3c4f60697274788298a0b2c8ccb8a7947e69543a2917040000000000000000000000000000000000000000000000000000000000000000000000030c1214181818181818181818181818181818181818181818181814120c02000000000000000000000000000000080b171f2126292a2a2825211e1632475c72879cb1c7dcd3bda8937e68533e2913000000001e33485e73889db3c8ddd8c2ad98836d58432e180300071d32475c72879cb1c7dcd3bda8937e68533e2913000000000000050b0d0b0f23384c5e66666666625a4835200b0c0d0b0500000000000013283c50626a727272727272727272727272727272727272727272727272727272727268604e3a2511000000000000000000000000000000000000091e32455771869cb1c6d4c4a6917b66513c2611000000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110000000000000000000000000000000f24394e64798ea3b9ced5c5ab9580869ca4b2beb9b6b5b7bdc7cbd4d7cdc0b4a297826d5e4c362614010000000000000000000000000000000000000000000000000000000b20354b6074889eb3c8d9d9c8af99846f5d4b3c30262a2932414c6177899eb4c9ded2c2ad98826d5544311d08000d22374d62778ca3adadadadadadadadadadadadadadadadadadadadadadb3b7c4d5e5d2c2aa95806b55402b1600000b2035485a697e87898d98a0b2becdbcb39e8975614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232933363b3e3f3f3e3a36322932475c72879cb1c7dcd3bda8937e68533e2913000000001d33485d72889db2c7ddd9c3ae99846e59442f190000071d32475c72879cb1c7dcd3bda8937e68533e291300000000000d1920222019263b50667c7b7b7b78624d38231e212220180d0000000000152b40556a8087888888888888888888888888888888888888888888888888888888877e68533d28130000000000000000000000000000000000000b21364b60768a9fb4cacbb7a68d78624d38230d000000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110000000000000000000000000000000f24394e64798ea3b9c0c0b8a78e79778698a0b1b6c2c7cad4d9cecac6b9b4a29a8474604b402f18080000000000000000000000000000000000000000000000000000000010253a50657a8fa6b8cbe2cebbaa917c67523f2e1c1414161f3347586d8398adc2d8dec8b39e8974604b35200b000d23384d62788da2c1c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c8cbd5e2ecd8c3ae99836e59442e1900000d22384d62788d9d9fa8adb2bec7bab49e917d675746321e09000000000000000000000000000000000000000000070b0e111415151312110e0b080100000000000000000000000000000000000c161c1e202020202020202012100a0000000000000000000000000b161e2e373a464c5053555453504b463938475c72879cb1c7dcd3bda8937e68533e2913000000001c31465c71869bb1c6dbdac4af9a856f5a3928160300071d32475c72879cb1c7dcd3bda8937e68533e291300000002101d2b3437342b354a5f748b9090907e69533e29333637342b1d0d00000000172c41576c81969d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d937e69543e291400000000000000000000000000000000000010253a4f657a8faabbcec8b29d88735a4835200b000000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110000000000000000000000000000000f24394e64798ea3abababaa9e8973617683919ca4adb2b7c3c8bbb4b0a89e9484756156453222120000000000000000000000000000000000000000000000000000000000152a3f556a7f94aac5d5dfcab49f8a76614b362111010004172a3a52677c91a7c8d8e0ccb8a78e79634e39240e000d23384d62788da2b7cdd7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c4af9a856f5a45301a00000f253a4f647a8fa4b4bac6c7bab4a99f92806b5f4d39281603000000000000000000000000000000000001080b131c202326292a2a29272623201c140c0a0400000000000000000000000000101e293033353535353535353527241d12040000000000000000000d1b29323f4b4f586166696a6a68656157514c405c72879cb1c7dcd3bda8937e68533e2913000000001a2f44596f8499aec4d9dcc7b29d87725746321e0900071d32475c72879cb1c7dcd3bda8937e68533e291300000010202d3b484d483b344a5f748a9fa6937e69533e39464b4d483b2b1805000000172c41576c8196acb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a9937e69543e291400000000000000000000000000000000000417293a556a8095aac8d9c2ad98836d583c2b1906000000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110000000000000000000000000000000f24394e64798e959595959591806a58616e7c8690979da5a2a3aa9f9b948a7f72615746382816040000000000000000000000000000000000000000000000000000000000192e44596e8399aec3d8dcc7b29c87725746331e0a0000000e23384e63788daabbcee2d6c5a7927d68523d2813000d23384d62788da2b7c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2af9a85705a45301b00000f253a4f647a8fa4b3b1b0aba99f978a7d6b625041301b0b000000000000000000000000000000000109151d20253035383c3e3f3f3e3d3b38353026221f180c06000000000000000000000c1e2e3b45484a4a4a4a4a4a4a4a3c3930231200000000000000000d1d2a39464b5d656f767b7e7f7f7d7a766f665e4d5c72879cb1c7dcd3bda8937e68533e291300000000162b41566b8096abc0d5dfcab59f8b76614b36210d00071d32475c72879cb1c7dcd3bda8937e68533e2913000008182d3e4a5962594c473a5f748a9fa8937e6953414d5761625948342012000000172c41576c8196acc1c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7bea9937e69543e291400000000000000000000000000000000000a1f33465870859bb0c5d3c2a8937e68533e291300000000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110000000000000000000000000000000d22374c62778080808080807c72604a4c5e66737b82878b8d8e8d8a867f776a60544639291a0a0000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6dbd9c3ae99846e59392917030000000b20354b60758a9fb4c9dfd5bfaa95806a55402b15000d23384d62788da2acacacacacacacacacacacacacacacacacacacacacacacacacacacacacac9a85705a45301b00000f253a4f647a8f9f9e9c9b96918a8178686050443323130000000000000000000000000000000009141d27313536434a4e515354555352504e4b433637342a20190e02000000000000000216293b4c595e6060606060606060514d41301d0a0000000000000b1b2a3b4757616d7a848a90939494938f8a847c6f635a72879cb1c7dcd3bda8937e68533e29130000000012273d52677d92a7c1d2e3cfbcab907b65503b2a1807051d32475c72879cb1c7dcd3bda8937e68533e291300001325364a5c64776d61594b5f748a9fa8937e69534e5f677677624d40301a0a0000172c41576c8196acb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a9937e69543e291400000000000000000000000000000000000c21364c61768b9fb4cac9b6a48d78634e38230e00000000000000000000000000000a1f354a5f748a9fb4c9dfd0bba5907b66503b26110000000000000000000000000000000b20344859626b6b6b6b6b6b67605443404c5460666d727678797875716a61594b4336291b0b000000000000000000000000000000000000000000000000000000000000001e33495e73889eb3c8ddd7c2ac97826d57422d1800000000081d31445573889eb3c8ddd7c2ac97816d57422d18000d23384d62788d979797979797979797979797979797979797979797979797979797979797979785705a45301b00000f243a4f647a8c8a888785817c766c635a4e41332615050000000000000000000000000000010f19263137444b5154606366696a6a686766636054534c473a352c1d150a000000000000071c3045596a737575757575757575675f4d39241000000000000316293947596275828f999faaa8aaa9a8aa9f999084786772879cb1c7dcd3bda8937e68533e2913000000000d22374c62778ca3b5c9dddac9ac97826d594734221b181f2a395c72879cb1c7dcd3bda8937e68533e291300071c304354647a8b8277696055748a9fa8937e695b63707d88846f5e4c3828160200172c41576c81969c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c937e69543e2914000000000000000000000000000000000417293a52677d92aabbcec6b19c86715b4935210c0000000000000000000000000000031f354a5f748a9fb4c9dfd0bba5907b66503b26110d0d0d0b080100000000000000000005182b3b484c565656565655514a43363036434a505858616364636056554c473b3026180b00000000000000000000000000000000000000000000000000000000000000001f34495f74899eb4c9ded6c1ab96816c56412c1701000000011527375d72879db2c7dcd8c3ad98826e58432e19000c21374c61768182828282828282828282828282828282828282828282828282828282828282827f69543f2a1400000d22374b5c6475747372706c6761584d493c31231507000000000000000000000000000004111f2c37444b5560666e74787b7e7f7f7e7c7b78746f6961594d493c31271a0d0000000000091e33485e73888a8a8a8a8a8a8a8a7c67513c271200000000000a1e32465762778698a0aeb4bbc8bfbfc8bbb4afa1998b7d72879cb1c7dcd3bda8937e68533e2913000000000b2034485970859bb0c5d6dec9b49e8a77624c43362e2a343a475772879cb1c7dcd3bda8937e68533e2913000b20354a6072859b97897e736574899fa8937e696c7984929d917c665645321e0900152a40556a7f87878787878787878787878787878787878787878787878787878787877d68523d2813000000000000000000000000000000000a1f3346586f8499aec8d3c2aa95806a553d2c1a06000000000000000000000000000b161e354a5f748a9fb4c9dfd0bba5907b66503b2622222222201d15090000000000000000000d1d2b34374040404040403c353025182530353b3a464c4d4e4d4b453837342a1c14080000000000000000000000000000000000000000000000000000000000000000001f354a5f748a9fb4c9dfd5c0ab96806b56412b1601000000001d32475c72879cb1c7dcd8c3ae98836e59432e19000a1f334758616d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69614f3b27120000071b2e3e4b4f5f5f5e5c5b56514c473a352c1e130500000000000000000000000000000412222f3d49556068747c83898d919394949392908d89847e776d635a4b45382b1d0d00000000091e33485e73889d9f9f9f9f9f9f917c67513c271200000000081c2f3f4b6175859ba4b2becaced8d3cac7c4c4bfb3a99f927f869cb1c7dcd3bda8937e68533e29130000000005182b3b53687d92a7b8cce0cdb9a898826d614f4a3e3b484c586175889db3c8ddd3bda8937e68533e29130013283d53687d92a3a79e93867b73889ea7927d76818c9aa2b29d8775604b36210b0013283c50616a7272727272727272727272727272727272727272727272727272727272685f4e3a2511000000000000000000000000000000000c21364c61768a9fb4c9cab6a48e79644e39240f00000000000000000000000007151b2832364a5f748a9fb4c9dfd0bba5907b66503b373737373735312719090000000000000000000d1820222b2b2b2b2b2b27201c1308131c2026293336383938363228221f180c01000000000000000000000000000000000000000000000000000000000000000000001f34495e74899eb3c9ded6c1ac97816c57422c17020000000417293a5d73889db2c8ddd8c2ad98826d58432e180004172a3a474c575757575757575757575757575757575757575757575757575757575757575757544f4332200c00000010202e373a4a4a494746413c37332a20190e0000000000000000000000000000000112222f404c5b63737e8791989ea7a6a8a9aaa8a7a5a89f99938a82786b6056483c2b1d0d000000091e33485e73889db3b5b5b5b5a6917c67513c2712000000000e23384b5d6d8298a3b5c2cfdfd1c8c2b6b1afafb1b4bab49d948d9fb5cadfd3bda8937e68533e291300000000000d21364b6075899eb3c2d3d6c6b2a0947f6f645c5b5b59626976849ba6b7cbdfd3bda8937e68533e291300152b40556a808c9aa2b2a49c9081859ba8937e87969faaa69e928578624d38220d000d20334350555d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d524e41311e0b000000000000000000000000000000071b2d3e53687e93a9bacec7b19c86725c4a36210d00000000000000000000000415253339464b4c5f748a9fb4c9dfd0bba5907b66504c4c4c4c4c4c4b4437271501000000000000000000050b0d161616161616120b07000000070b11171f21232423201d150c0b040000000000000000000000000000000000000000000000000000000000000000000000001d33485d72879db2c7ddd7c2ad98826d58432d18000000000a1f33465874899eb3c9ded6c1ac97816c57422c1700000c1c2a33374242424242424242424242424242424242424242424242424242424242424242423f3b3225150300000002101b222435353332302c27211f170c06000000000000000000000000000000000f202f404c5e667985939da5adb3b8c5bebfbfbdbcc6bab4afa99f988b8074625a483c2b19050000091e33485e73889db3c8cacabca6917c67513c2712000000081b2e3f50657b90a0b2c2d2ded0c0b4afa49c999a9c9fa9b3afab9fabbccfe3d3bda8937e68533e29130000000000091e3245566b8095a4b6c9dacebeaf9d94837a73707072777e899ba3b4c4d4e7d3bda8937e68533e29130013283c50616a7984919da5b19f968b9fb49f899da5aa9f96887d72625a4834200b00041525333c4047474747474747474747474747474747474747474747474747474747473d3a312313010000000000000000000000000000000d22364a5c71869bb1c7cdbaa9937e69543d2d1a0700000000000000000000000d2133435057616262748a9fb4c9dfd0bba5907b6662626262626262605544311d08000000000000000000000000010101010100000000000000000000040a0c0e0f0e0b09020000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b70859ab0c5dadac5b09a85705b3d2d1a070000000c21364c61768ba7b9cce0d4bea9947f69543f2a140000000c171f212d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2a27201507000000000000070d0f201f1e1d1b17120c0a0400000000000000000000000000000000000a1a2d3e4c5e667c8a9ba3b2b7c3c8ccc9c6c2c0c0c1c5c9c9c7bab4aa9f968578625a4834200b0000091e33485e73889db3c8ddd1bca6917c67513c27120000000e22374b5d70859bb0becee0d0bfb3a29a8e878484878a939da6b3b5bcc9daecd3bda8937e68533e29130000000000031628384b6074869cabbccfe1ccbbafa1998f888685878b939ea7b4c1d1e2e8d3bda8937e68533e2913000d213343505b636f7c87949da6aa9faabaa99fa99f998c8176686054483c2b1905000d20334350555c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c524d41311e0a000000000000000000000000000006192c3c4f647a8fa3b5c9c9b49f8a76614c36210f00000000000000000000000013283c50616a767777778b9fb4c9dfd1bca7927d777777777777777773604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2d7dec8b39e89735b4a36210b0000000f253a4f647a8fa4c5d6e5d2c2a6917c66513c261100000000040a0c18181818181818181818181818181818181818181818181818181818181818181814120c03000000000000000000000000000000000000000000000000000000000000000000000000031628384a5c667c8c9ea8b5c1cbcfcac2b5b1adababacb0b4bac7c9c8bbb4a39b8778624d38220d0000091e33485e73889db3c8ddd1bca6917c67513c27120000011426364f657a8fa3b5c9dcd7c7b3a19a8479726f6f72767e8899a1b2bfcfe2e8d3bda8937e68533e29130000000000000a1e324556657b8d9fb5bcccd6ccbfb3aea69d9b9a9c9fabb3b8c5cad4e1e8d3bda8937e68533e291300041525333d4a4e5e66757f889ca4b4bbc7baaa9f8d83796c61584a43362b1d0d000013283c50616a7272727272727272727272727272727272727272727272727272727272675f4d3a251000000000000000000000000000000c2035495a6e8398adc1cfbcab97826d5846331f0a000000000000000000000000152b40556a808c8c8c8c9fa9bacde2d4c0ac9b928c8c8c8c8c8c8c8c79644e39240f0000000000000000000000000001080b180f0d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8c1d2e0ccb8a78e79634e39291609080c1b2f3f556a7f94aabfd4dec9b5a48c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b151c1e1e1e1e1e12100a0100000000000000091e324556647a8a9faab9c6d2c9bcb5aca49c979695979a9fa9b1b5c2cac1b3a2947f6a553f2a150000091e33485e73889db3c8ddd1bca6917c67513c27120000081c3043546d8297acc1d2e1cdbaa99a8373635b5a5a586169778399a1b2c4d4e7d3bda8937e68533e2913000000000000021628384b5d6a7f949eb4b9c6cfd0c7c4b7b3b0b0b2b5bcb1acb2b6c3d4e6d3bda8937e68533e291300000a1a28323c484d5d65737c879cb1c7cab49f8a81776b61574a43362e2010000000152a3f556a7f87878787878787878787878787878787878787878787878787878787867d67523d2812000000000000000000000000000417293a4d63788b9fb4cacab59f8c79644e3a2917040000000000000000000000001f34495f74899eaba1a1b4bac7d7eadcc9b9aca7a1a1a1a1a1a1a18e79644e39240f00000000000000000000000008141c202d25221b100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da3b5c9ddd5c5aa957f6a574632261f1c202a394c5d71869bb0c6dbd8c8b19c86715948341f0b0000000812181b1d1d1d1d1d1d15130d04000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d202a31333333333327251e1305000000000004172a3a4b6075869ca8bac8d7c6baab9f978d8682808082858a929ca4b1b6b6a59a8473604b35200b0000091e33485e73889db3c8ddd1bca6917c67513c271200000b20354b6073889eb3c8dedec9b49f8a7762554a3d3a474c5861738399a6b7cbdfd3bda8937e68533e2913000000000000000a1a2e3f4f616a80929ea8b4bcc9c9cecbc8c5c5c3b7b29f979da5b6cadfd3bda8937e68533e29130002152838454b5a626e7b86919ca4b2b6c2b5aa9f968b80766860544b3e2e1e0e0000172c41576c81969c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c937e69543e2914000000000000000000000000000a1f3347586c8197aabbcebfae99836e5c4a361c0c0000000000000000000000000020354a60758aa8b9b7b7c9cdd7e5f5e7d7c9c0bcb7b7b7b7b7b7a38e79644e39240f00000000000000000000000818263035423a372e1f180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035495a71869bb0c4d4ddc8b39d8875614b44373430353a4757657b90a3b5c9ddcebbaa95806a553b2a180500000c1a252d303333333333332b28211507000000000000050b0d0f100e0c0a0400000000000000000000000000000000000000000000000009192631353f4648484848483d3930231301000000000a1f3347586a7f95a4b6c6d7cdbaa89f8d8278716d6b6b6c70767d86919ca4a79d8776615544311d080000091e33485e73889db3c8ddd1bca6917c67513c271200000e23384e63798da7b8cce0d9c9ac97816c5948372d2a333a47556074889db2c8ddd3bda8937e68533e291300000000000000001021324350626a7d8a989fabb0b4bac7c6bab4aea59d9182879db2c7dcd3bda8937e68533e291300091d324556606a7883909ca4a99f9ca5b5a49ca4a99f96887d72645c4b3c2c190600172c41576c8196acb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a9937e69543e2914000000000000000000000000000c21374c61768a9fb4c8c8b3a18e79644e3d2d1a000000000000000000000000000020354a60758a9fb2b5bcc9c5cedceceadacdc3c0bcbcbcbcbcb9a38e79644e39240f0000000000000000000001142636434b574f4b3e342a1c1406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c53687d93a6b7cbdfcbb8a696816c60554c47434b4e586175869cb1c1d2d7c6b49f8b78624d38220d0000081a2a374145484848484848403c3325150400040a0c12192022242524221f180d0b06000000000000000000000000000000000000000009192737444b545c5e5e5e5e5e524d41301e0a000000000c21374c61768a9eb4c2d3cfbeb49f8a7c6d635a58565657576168737c868f928979635847372614010000091e33485e73889db3c8ddd1bca6917c67513c2712000012273d52677d92a7c5d5e3cfbcab907b66503b2a19171f2a37455672879cb1c7dcd3bda8937e68533e291300000000000000000315253343505f6778828c959b9fa9a3a3a89f9992877d72879cb1c7dcd3bda8937e68533e2913000b20364b60747f8a98a0b1a49c89879cb19c86969faaa69d92857a645b4935210c00172c41576c8196acc1c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7bea9937e69543e2914000000000000000000000000000e24394e63798ea4b3bfbbaa99836e5c4a361f0f000000000000000000000000000020354a60758a999c9fabadb1becee1dfcdbcb0aba7a7a7a7a7a7a38e79644e39240f00000000000000000000081c304354606d645c4c473a3124140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21364b6075889db2bfd0d5c4b09f9580736862595460636a77849aa4b6c9e1cdbaa898826d5a4834200b000012253748555a5d5d5d5d5d5d5550433321090b171f21272b34373a3a3937342a2320190e010000000000000000000000000000000000091927374455606a717373737373675f4d392510000000071a2d3d546a7f94a8b9cddbc6b2a0917d675e4d493c414039464b546067737a7c77635b4a3a2a1909000000091e33485e73889db3c8ddd1bca6917c67513c27120000162c41566b8196abc0d6dfcab49f8b76604b36210d040c1927385c72879cb1c7dcd3bda8937e68533e291300000000000000000007152533414d5a626d7880868a8d8e8d8c89847d746772879cb1c7dcd3bda8937e68533e291300192e43596e83949fa8a89e94867a869ca6917d808c9aa2b2a39b8b79634d38230e00172c41576c8196acb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a9937e69543e2914000000000000000000000000000b20364b60748699a1b1b49f8b79634e3e2d1a010000000000000000000000000000152a40556a7f83878b8f97a0b1c5dad8c3b09e95919191919191918e79644e39240f00000000000000000004172a3a4b6072827a6d61594e423225140300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556677d92a1b3c2d3cdbdaf9e95857d77747375787f889aa2b4c2d3cebeb49f8a78624d3c2b19050000182d415566707272727272726a61503c281e212933363d3b484d4f504e4c473a38352b1d140900000000000000000000000000000008182637445560737f8688888888887d67523d27120000000d21364a5c72879cb2c6d7d3c2ae98836e5f4d40352c2b2b293336434a5460656762594a3d2d1c0c00000000091e33485e73889db3c8ddd1bca6917c67513c271200001a2f44596f8499aec4d9ddc7b29d87725645321e0900001d32475c72879cb1c7dcd3bda8937e68533e291300000000000000000000071523303c484d5a626a707577797876746f68605672879cb1c7dcd3bda8937e68533e2913000f243a4f647a8d9fa0988a7f7474899ea8927d6b7984919da597826d5b4935210c00172c41576c81969d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d937e69543e291400000000000000000000000000091d314556627783909ca496816b5b4936200f00000000000000000000000000000013283c50616a6e72767a8197adc8d9d5c0ab95807c7c7c7c7c7c7c7d76614c36210c0000000000000000000a1f334758687e938c827768604f43321f0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384d5f6e8399a4b6c3d0ccbcafa39b928c8a888a8d949ea7b4c0d1cfbeb1a0937e685a48341d0d0000001b30455a7084878888888887806a55392932363a464c525859626465636159564d483c3126190a00000000000000000000000000081825364455607382949b9d9d9d9c8674604b35200b0000000f24394e64798ea5b6cadecab6a48e79634e4130232323232323253036434a50524d483b2d1f0f0000000000091e33485e73889db3c8ddd1bca6917c67513c271200001b30455b70859ab0c5dadac4af9a856f5a3828160300071d32475c72879cb1c7dcd3bda8937e68533e2913000000000000000000000005131e2b353c494d555560626363616054534b5c72879cb1c7dcd3bda8937e68533e2913000d22364a5c6d82978f82776960748a9fa8937e69636f7c87958977614c3c2c190600162b40556b8088888888888888888888888888888888888888888888888888888888887d68533d281300000000000000000000000000021527384759626e7b86938876614c3d2c1a010000000000000000000000000000000d2033435055595761657a8faabbced0bba5907b6767676767676767615846331f0a0000000000000000061a2c3d4c6176899e9f97897e69614f3b271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a30414c6176869ca4b4c0ccccc1b5b0a7a99f9e9faaa9b3b8c5d1c9bcb5a097826d604e3c2b19000000001c31465b71869b9d9d9d9d99836e574638454b525861676e7377797a7977726b625a4b4437281a0a000000000000000000000000132536435460738298a0b1b3b3a1907b665544311d0800000014293e54697e93a9c3d3dcc7b19c87725b4a383838383838383838383838383a3d383837332a1c1406000000091e33485e73889db3c8ddd1bca6917c67513c271200001c31475c71869cb1c6dbd9c3ae99846e59442f190000071d32475c72879cb1c7dcd3bda8937e68533e2913000000000000000000000000000e19202b353837444b4d4e4e4c4a4336475c72879cb1c7dcd3bda8937e68533e291300071b2e3e4c6176857a6d62595f748a9fa8937e69535f6775807e685947341e0e000013283d50626b737373737373737373737373737373737373737373737373737373737368604e3a261100000000000000000000000000000a1a2a3b474c5d65747e7d675746331f0f00000000000000000000000000000000041525333c4039464b61768a9fb4cad0bba5907b66525252525252524c463a29170400000000000000000c2135495b6c8197a7b5a79e937f69543f2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f3347586278869aa2b3b8c5cbc9c6c7bab4b3b4bbc8c8ccc9c2b6ab9f958273604b42311d0d000000001a2f455a6f849aafb2b2b29e89766156565660676f767c83888c8f8f8e8c8781786b6055453828150200000000000000000007151c30435460728298a0b2bfbbaa99846f5e4c37271501000003182e43586d8398adc2d8d6c0ab96816b564e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c473a322414020000091e33485e73889db3c8ddd1bca6917c67513c271200001d33485d72889db2c7ddd8c2ad98836d58432e180300071d32475c72879cb1c7dcd3bda8937e68533e29130000000000000000000000000000050e19202326313538393837353025475c72879cb1c7dcd3bda8937e68533e29130000101f3347586170655d4c485f748a9fa8937e69534d56606a68604e3b2a180000000d21334450555d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d534e42311e0b0000000000000000000000000000000d1d2a343f4c556069675f4d392917010000000000000000000000000000000000071520282a2832465771869cb1c6d0bba5907b66503c3c3c3c3c3c3633291c0c0000000000000000061a2c3d4e63798c9fb4c5b8af9a85705a45301b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a485a627784939ea7b2b7c4c4c7cac9c8cac9c7c3c1b5b0a49c8d80726055443124140000000000162b41566b8096abc5c7b9a89882746c6b6e757c848a92989ea6a4a5a3a49c968b8073605645321d11000000000000000007152534444a60728197a0b2bec5b49f8b79634e402f1909000000061c31465b71869bb0c6dbd2bda8927d686363636363636363636363636363636363636361584f42321f0c0000091e33485e73889db3c8ddd1bca6917c67513c271200001e33485e73889db3c8ddd8c2ad98836d58432e180300071d32475c72879cb1c7dcd3bda8937e68533e291300000000000000000000000000000000060b0d141d2022242321201c32475c72879cb1c7dcd3bda8937e68533e2913000004182a3a474c5a4f4b3f4a5f748a9fa8937e695338454b55534e42311d0c000000041526333d4048484848484848484848484848484848484848484848484848484848483d3a31241302000000000000000000000000000000000d181f2f37444b54524d41301b0b00000000000000000000000000000000000000040d1315162839576d8297acc2d0bba5907b66503b2727272727211f170c0000000000000000000c2135495b6d8298abbccfbcab97826d57422d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3c485961737e89949da6aaafb2b4bbc7bab4b1aea9a39b92867b6b60544437271506000000000011263c51667b91a7b9ccc6b2a098878281848991999faaadb3b8c5bac3b6b2a99f958374604b3f2f1c08000000000000061525334451626c81969fb1beccb8a796816c5b4935221100000000091e33495e73889eb3c8ddd2bca7927d78787878787878787878787878787878787878787669604f3b27120000091e33485e73889db3c8ddd1bca6917c67513c271200001d33485d72889db2c7ddd9c3ae99846e59442f190000071d32475c72879cb1c7dcd3bda8937e68533e29130000000000000000000000000000000000000001080b0d0e0e0c0b1d32475c72879cb1c7dcd3bda8937e68533e29130000000c1c2a3337453a372e4a5f748a9e9e937e69533e3236403e3a3124140000000000071521282b333333333333333333333333333333333333333333333333333333333328261e13060000000000000000000000000000000000000511192731353e3c3930231200000000000000000000000000000000000000000000000013283e53687d93a8c7d7bba5907b66503b26121212120c0a0400000000000000000005182b3b4e63798c9fb4c9cab59f8c79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b3a47546069767f888f95999d9faaa1a99f9c98948d857d74655d4b43362719090000000000000c21364b6176899eb3c4cfbeb2a59d9796999ea8aeb4bbc8c8cbd5ced3cac7bab4a196816c5d4b38230f0000000000031425334350626b80969fb0bdcec1b39e8976614c3d2c1a0400000000081d314455748a9fb4c9dfd4c0ac9b928d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c7e69543e29140000091e33485e73889db3c8ddd1bca6917c67513c271200001c31465c71869bb1c6dbdac4af9a856f5a3928160300071d32475c72879cb1c7dcd3bda8937e68533e29130000000000000000000000000000000000000000000000000000071d32475c72879cb1c7dcd3bda8937e68533e2913000000000c181f2230252233485d73888989897e68533d28212b28261f1406000000000000040d13161e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e13110b0200000000000000000000000000000000000000000009151d202927251d12050000000000000000000000000000000000000000000000000f24394e64798ea9bacdbba5907b66503b26110000000000000000000000000000000b203448596e8398abbccfc1ae99846f5b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c2a36434b58616a737a8084878a8b8b8b8987837e78716760554b3f3026180900000000000000091e3246576b8196a6b8c8cfc3b7b2acabaeb4b9c6c9ccc9c2bcb8b9bfc9cdcdbfb19f907b65503d2c1a06000000000c1f324350616a80959eb0bdb8c0b4a3937e695847331f0f00000000000b20354b60738aaabbcee2dccab9aca7a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39c87725d47321d0000091e33485e73889db3c8ddd1bca6917c67513c271200001a2f44596f8499aec4d9dcc7b29d87725746321e0900071d32475c72879cb1c7dcd3bda8937e68533e29130000000000000000000000000000000000000000000000000000071d32475c72879cb1c7dcd3bda8937e68533e29130000000000040a0c1b101b3044586a7373737368604e3a260b1513110b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1412100a01000000000000000000000000000000000000000000000000000b20354b6075899fb4c7bba5907b66503b26110000000000000000000000000000011426374d62778b9fb4c9c9b5a38f7a654f3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1826303a474c5460656a6f727576767674726e69635b524b44372f1c14080000000000000000031628394c6177889daabac6d0cac7c1c0c3c9ccc9c6b9b4ada6a3a4aab4bac7cebdaf9a846f5b4936210c0000000012273b4f616a7f949ea2a2a2a2a2a29a8574604b3a2a170100000000000b20354b60738aa9bacde1e7d7cac0bcb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b49f8a745f4a351f0000091e33485e73889db3c8ddd1bca6917c67513c27120000162b41566b8096abc0d5dfcab59f8b76614b36210d00071d32475c72879cb1c7dcd3bda8937e68533e29130000000000000000000000000000000000000000000000000000071d32475c72879cb1c7dcd3bda8937e68533e29130000000000000000050015293b4c585d5e5e5e534e42311e0b0000000000000000000000000000010b11131616161616161616161616161612100a01000000000000070d0f1616161616161616161616161615130d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445570859bb0b2b2a5907b66503b26110000000000000000000000000000081d3144556a8095aabbcec6b09b85715d4b371f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2a3336434a4f555a5460606160565c59544d493c353127191101000000000000000000000b1f344759667c8c9fa8b3bfc4c6c8c7c5c7bab4aea89e97918e8f959fa9bacdc8b4a28e79634e39230e0000000014293f54697e8d8d8d8d8d8d8d8d8b8478625544311c0c000000000000081d31445574899fb4c9dee1cebdb1aca7a7a7a7a7a7a7a7a7a7a7a7a7abb0bccdcdcab49f8a755f4a35200000091e33485e73889db3c8ddd1bca6917c67513c2712000012273d52677d92a7c1d2e3cfbcab907b65503b2a1807051d32475c72879cb1c7dcd3bda8937e68533e29130000000000000000000000000000000000000000000000000000071d32475c72879cb1c7dcd3bda8937e68533e2913000000000000000000000c1d2d3b44484949493d3a312413020000000000000000000000000005131e25282c2c2c2c2c2c2c2c2c2c2c2c2c27251d130500000002101b22242c2c2c2c2c2c2c2c2c2c2c2c2c2a2820150700000000000000060b0d151612100a0100000000060b0d151612100a010000000000000000000000000001152737556b80959c9c9c9c907b66503b261100000000000000000000000000000b20354b6074889db2c8ccb9a8937d68533f2e1b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c171f2530353a4036434a4b4c4b4538433f38352c201d150900000000000000000000000004182a3a4c5e667c8a99a1a9afb1b3b2b0aca99f999289827c7979808b9fb4c2d1c0a9937e69543e2914000000000e23384d637878787878787878787670625a4837271500000000000000011426375d72879cb2c7dcd9c5b19f9791919191919191919191919191959eb0c3dec9b49e89745f49341f0000091e33485e73889db3c8ddd1bca6917c67513c271200000d22374c62778ca3b5c9dddac9ac97826d594734221b181f2a395c72879cb1c7dcd3bda8937e68533e29130000000000000000000000000000000000000000000000000000071d32475c72879cb1c7dcd3bda8937e68533e291300000000000000000000000f1d29303334343428261e130600000000000000000000000000011323313a3d414141414141414141414141413c3930231301000010202e363a41414141414141414141414141403c3325150300000000000e1920232a2c27251d120500000e1920232a2c27251d1205000000000000000000000000000c21364c61768287878787877b654f3a2510000000000000000000000000000215273851667c91a6b7cbc9b49e8976614b362110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408131c20252b25303536363632282e292321190e080100000000000000000000000000000c1c2f404c5e6679838e94999c9d9d9b97918a847d756d6763646a7d92a4b5bfbfae98836e59432e19000000000c2035495a63636363636363636261574d483c2b190900000000000000001a2f445a6f8499afc4d9d7c2ac97817c7c7c7c7c7c7c7c7c7c7c7c7c8095abc0d5c7b29d88725d48331d0000091e33485e73889db3c8ddd1bca6917c67513c271200000b2034485970859bb0c5d6dec9b49e8a77624c43362e2a343a475772879cb1c7dcd3bda8937e68533e29130000000000000000000000000000000000000000000000000000071d32475c72879cb1c7c9c9bda8937e68533e29130000000000000000000000000c151b1e1e1e1e13110b0200000000000000000000000000000b1e31424e5356565656565656565656565656524d41301d0a00071b2e3e4a4f5656565656565656565656565655504333200d000000000e1e2b353840413c39302316080e1e2b353840413c39302316080000000000000000000000000a1f334658616d7272727272655d4b37230e00000000000000000000000000091d3145566d8398adc4d4c5ad97826d5746321e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b1015131c202121211e1619140e0c0600000000000000000000000000000000000011222f404c5b636e797f8486888785817c766e676057514e4f5f71869caaaaaaaa9b86715c46311c0000000006192c3c494d4d4d4d4d4d4d4d4d4b4639342b1d0d000000000000000000152b40556a8095aac4d4d6c1ac97816c6767676767676767676767677c92a7bcd1c5b09a85705b45301b0000091e33485e73889db3c8ddd1bca6917c67513c2712000005182b3b53687d92a7b8cce0cdb9a898826d614f4a3e3b484c586175889db3c8ddd3bda8937e68533e29130000000000000000000000000000000000000000000000000000071d32475c72879cb1b4b4b4b4a8937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000011253a4e60686b6b6b6b6b6b6b6b6b6b6b6b6b675f4d392510000d22364a5c646b6b6b6b6b6b6b6b6b6b6b6b6b6a61503c28130000000e1e2b3c484d5556524d413326161e2b3c484d5556524d413326160000000000000000000000000417293a464c585c5d5d5d5d4f4b3f2e1c08000000000000000000000000000b20364b6075899eb3c9ccb9a7907b665139291603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0b0c0b090200000000000000000000000000000000000000000000000312222f3d494e5b636a6f717372706c676157524b45393941576d8295959595959587725d48331d00000000000e1e2c3538383838383838383836332920190d0000000000000000000010253a4f657a8fa6b7cbdcc7b29d877360525252525252525252566b8095abc0d8c7ac96816c57412c170000091e33485e73889db3c8ddd1bca6917c67513c27120000000d21364b6075899eb3c2d3d6c6b2a0947f6f645c5b5b59626976849ba6b7cbdfd3bda8937e68533e29130000000000000000000000000000000000000000000000000000071d32475c72879c9e9e9e9e9e9e937e68533e291300000000000000000007111719202020202020202016140e0400000000000000000000000013283d53687d818181818181818181818181817d67523c2712000f243a4f647a808181818181818181818181817f6a55402a15000006192b3c485a626a6b675f5144331c2b3c485a626a6b675f5144331c0c0000000000000000000000000b1b2933364347474747473a372e2111000000000000000000000000000011263b51667b90a8b9ccc9b39e8975604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121f2c353d494e545a5c5e5d5b57514b4639363228253b50657b8080808080807f6a543f2a150000000000000e1920232323232323232323211e170b0500000000000000000000000b20354b6074889db2c6d6cab7a5907b665544363c3c3c3c3c4c5e71869cb1c6cebaa9927c67523d27120000091e33485e73889db3c8ddd1bca6917c67513c2712000000091e3245566b8095a4b6c9dacebeaf9d94837a73707072777e899ba3b4c4d4e7d3bda8937e68533e29130000000000000000000000000000000000000000000000000000061c31465b7185898989898989898a7e68533d281300000000000000000a18242b2e35353535353535352c2921160800000000000000000000001a2f44596f8396969696969696969696969696826d58422d180013283d53687d9296969696969696969696969688735e48331e00000b2035485a62787f817c6b62513a2935485a62787f817c6b62513a2917040000000000000000000000000b171f212e323232323225231c11030000000000000000000000000005182b3b576d8297acc6d6c2ad98826d5544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f202020202020202020200a040000000000000812181a202020202020202015130c030000000000000000000000010f1a212c36393f4447484846423c363229211e1623374b5d656a6a6a6a6a6a6a614f3c271200000000000000060c0e0e0e0e0e0e0e0e0d0c0a0300000000000000000000000000081c3043546a8095a8b9ccd4c3b19b85746054493c3f3f404c5a667c91a4b5c9c8b49f8a76614c36210c0000091e33485e73889db3c8ddd1bca6917c67513c2712000000031628384b6074869cabbccfe1ccbbafa1998f888685878b939ea7b4c1ccd5e3d3bda8937e68533e2913000000000000000000000000000000000000000000000000000005192e42566771747474747474747468604e3a2611000000000000000718283640434a4a4a4a4a4a4a4a413d34261604000000000000000000001a2f44596f8499ababababababababababab97826d58422d180013283d53687d92a8abababababababababab9d88735e48331e00011426364d627889959691806b584733364d627889959691806b5847331f0a00000000000000000000000000040a0c181d1d1d1d1d100e080000000000000000000000000000000b2034485972879cb2c7d3c2a7927d67523727150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124353535353535353535351f170c000000000b19252d3035353535353535352a27201507000000000000000000000000060f1a21232a2f313332302c27211e160b09081c2f3f4b50555555555555544f4332200c00000000000000000000000000000000000000000000000000000000000000000000011426364c6177899eb3c1d1c9b5a3978172635b565454575e6678889db3c2cebbaa97826d5846331f0a0000091e33485e73889db3c8ddd1bca6917c67513c2712000000000a1e324556657b8d9fb5bcccd6ccbfb3aea69d9b9a9c9fabb3b3aeb3b8c5d5d3bda8937e68533e291300000000000000000000000000000000000000000000000000000013263949565b5f5f5f5f5f5f5f5f534e42311e0b00000000000000112436465359606060606060606056514434210e000000000000000000001a2f44596f8499aec0c0c0c0c0bbbbbbc3ad97826d58422d180013283d53687d92a8c0bbbbbbc0c0c0c0c0b39d88735e48331e00081c3043546d8297a7ab9f8a76614c3743546d8297a7ab9f8a76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca5b6cac9b6a48c77624c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f202d36394a4a4a4a4a4a4a4a4a4a33291c0c00000819293741454a4a4a4a4a4a4a4a3f3c3225150300000000000000000000000000060c0e151a1c1e1d1b17120c0a0300000011212f373b4040404040403f3c322515030000000000000000000000000000000000000000000000000000000000000000000000081f3347586a7f94a3b5c4d2c1b19f978378706b696a6c727c889da6b7cbc2b49f8c78634d3a2917040000091e33485e73889db3c8ddd1bca6917c67513c271200000000021628384b5d6a7f949eb4b9c6cfd0c7c4b7b3b0b0b2b5bcb1a1999ea7b8ccd3bda8937e68533e2913000000000000000000000000000000000000000000000000000000091b2b39424649494949494949493d3a3124130200000000000002172b4053646e75757575757575756b62513d2914000000000000000000001a2f44596f8499aec4d6c9b8aba6a6a6a6a595806b55402b160011263b51667b90a2a6a6a6a6b2b6c3d3c8b39d88735e48331e000b20354b6074899eb3baa9917c66513c4b6074899eb3baa9917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7c3d3c6b19c8671594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4a4e6060606060606060605e463a2917040012253748545a6060606060606060544f4332200c00000000000000000000000000000000000507090806020000000000000003111c23252b2b2b2b2b2b2a2720150700000000000000000000000000000000000000000000000000000000000000000000000004182a3a4b6073859ba6b6c3cebdb1a1998b85807f7f8187919da6b7c4c6b6a497826d5b49351b0b000000091e33485e73889db3c8ddd1bca6917c67513c271200000000000a1a2e3f4f616a80929ea8b4bcc9c9cecbc8c5c5c4b7b29f9784899eb3c9c0bda8937e68533e2913000000000000000000000000000000000000000000000000000000000d1b262e31343434343434343428261e13060000000000000004192e43596e828a8a8a8a8a8a8a8a806b56412c16010000000000000000001a2f44596f8499aec4d9bfab9a919191918f8777624c37220d000b20354b6073848f919191919ca5b6cac8b39d88735e48331e000e23384d63788da7b8c7aa95806a55404d63788da7b8c7aa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6c2ac97826d573b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c70757575757575757575705846331f0a03182d4154666f75757575757575756a614f3c27130000000000000000000000000000000000000000000000000000000000000000080e1015151515151515120c0300000000000000000000000000000000000000000000000000000000000000000000000000000c1d3144556278889da5b4c0ccbfb3aa9f9a969494969ca5b2b7c4c3b6a89c8676614c3c2c1900000000091e33485e73889db3c8d5d1bca6917c67513c27120000000000001021324350626a7d8a989fabb0b4bac7c6bab4aea69d9181758399ababababa8937e68533e291300000000000000000000000000000000000000000000000000000000000913191c1f1f1f1f1f1f1f1f13110b02000000000000000004192e43596e83989f9f9f9f9f9f96816b56412c16010000000000000000001a2f44596f8499aec4d1bba6917c7c7c7c7a75625948341f0b00081d31445560737a7b7c7c7c879cb2c7c8b39d88735e48331e0011263b51667b90a6c5c3ad98836e583651667b90a6c5c3ad98836e5836251300000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5a70859aafc5d9c9a8937d68533e281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e647a8a8a8a8a8a8a8a8a8a76614c36210c051a30455a6f848a8a8a8a8a8a8a8a7f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263748596379879ba2b3b9c6c8bbb4b0aba9a9acb2b6c3c7bfb3a59d8a79635746331e0e00000000091e33485e73889db3c0c0c0bca6917c67513c27120000000000000315253343505f6778828c959b9fa9a3a3a89f9992887c6d657b8d9595959595937e68533e2913000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aeb5b5b5b5ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75666666656056483b2a180500011426374454606466666671869bb0c6c8b39d88735e48331e00142a3f54697f94a9bec6b19b8671544354697f94a9bec6b19b86715443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889eb3c8cfbcab8e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e9f9f9f9f9f9f9f8b76614c36210c051a30455a6f859a9f9f9f9f9f9f947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e1314161514110d0b0500000000000000080a0b0b0b080701000000000000000009192b3b495b637684949ea8b4b9c6c6c5c0bebfc1c7c3bfb3afa1998779635b493929170000000000091e33485e73889dabababababa6917c67513c27120000000000000007152533414d5a626d7880868a8d8e8e8c89847d75675f5d657a7f80808080807a644f3a240f00000000000000000000000000000000000000070b0e11131415161513100c0a04000000000000000000000000000000000000000004192e43596e8398aec3cacac0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75605151504b45382a1d0d00000009192636434b4f51515b71869bb0c6c8b39d88735e48331e00182d42576d8297acc2c9b49e8974604a576d8297acc2c9b49e8973604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61778ca6b8cbcab49f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b5b5b5b5b5a18b76614c36210c051a30455a6f859aafb5b5b5b5a9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000508131c2024282a2b2a2926221f180d0a03030c12141d202020201e1b150c00000000000000000d1d2c3d495861747f89969ea8acb0b3b9c5bbb4b2aea9a1998f8376635b4a3d2c1b0b0000000000091e33485e738895959595959595917c67513c27120000000000000000071523303c484d5a626a707577797977746e6761574d4c5d656a6b6b6b6b6b645c4b37220d000000000000000000000000000000000708131c20232628292a2b2a2826221f180d0c06000000000000000000000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a3c3a3632281a0d000000000009182630353a3c465b71869bb0c6c8b39d88735e48331e001b30455b70859ab0c5cdb9a88c77624d5b70859ab0c5cdb9a88c78624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c5d5c7b29d87725645321d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cacacab6a18b76614c36210c051a30455a6f859aafc4cacabfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d181f253035393d3f40403e3b37342a211e171420272933353535353330291d0f00000000000000000f1f2c3a4756606a77818991979b9ea7a1aa9f9d99948d847a6e61584a3d2d1f0f00000000000000152a3f556a7f808080808080808079634e39240e00000000000000000005131e2b353c494d555560626363626054524b46393f4b4f5556565656564f4b3e2e1b070000000000000000000000000000010f1a21253035383c3d3e40403f3e3b37332a2320190e0500000000000000000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a3525211e160a0000000000000008141c202531465b71869bb0c6c8b39d88735e48331e001d32475c72879cb1c7d7c6a38e79644e5c72879cb1c7d7c6a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcd1c4af9a846f5a3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cedfcbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d2a3436434a4e5254555554514c483b3633291c323b3f484a4a4a4a48443b2d1d0c00000000000000010f1c2a38454b59616c767c8286898a8b8b8a87847f786f645c4c473a2d1f0f010000000000000013283c50616a6b6b6b6b6b6b6b6b635b4a36210c00000000000000000000000e19202b353837444b4d4e4e4d4a43363632292e373a4040404040403a372e20100000000000000000000000000000000f1f2d3636434a4d51525455555553504c473a38352c1f180d000000000000000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b090300000000000000000001080b1c31465b71869bb0c6c8b39d88735e48331e001d32475c72879cb1c7ceb9a38e79644e5c72879cb1c7ceb9a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bed3c1ac97826c57422d170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000051322303b474c54606368696b6a69666259544b463930434f545d5f6060605d584c3b29150000000000000000000c1a28323a474c5761676c717475767675726e69635b4f4b3e332a1c0f0100000000000000000d203343505556565656565656564e4a3d2d1a07000000000000000000000000050e19202326313538393937353025211e161b22252a2b2b2b2b2b24221b10020000000000000000000000000000071a2d3d4a4e5460636668696a6b6a68656158554d493c342a1d120400000000000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e001d32475c72879cb1c7ceb9a38e79644e5c72879cb1c7ceb9a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000001132330404d59626b73797d7f807f7e7b77716961574a434f61697275757575736a5844301b000000000000000000000a151d2a3439464b52575b55606161605459544d493c372e1f170c0000000000000000000002152533404c505962646360544b44372d1f0f000000000000000000000000000000060b0d141d2022242422201c130c0a03080e101516161616160f0d07000000000000000000000000000000000c21364a5b637074787b7d7e7f807f7d7b77716b625a4c483b30221406000000000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e001d32475c72879cb1c7ceb9a38e79644e5c72879cb1c7ceb9a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2d3bda8937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30414d5e667780888e9294959593908c867f766860545d697f878a8a8a8a88735d48331e0000000000000000000000020c181f2832363c4237444b4c4b4b43363f38352c221b10040000000000000000000000102031424e5e6571777978736a60554538281502000000000000000000000000000000000001080b0d0e0e0d0b0700000000000000000101010101000000000000000000000000000000000000000e24394e637984898d91929395959493908c8780786d62594c40322414050000000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e001d32475c72879cb1c7ceb9a38e79644e5c72879cb1c7ceb9a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3d1bca6917c67513c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4d5f677c89959ea6a7a9aaaaa9a6a49c94897e7261657b8f9d9faa9f9d88735d48331e00000000000000000000000000040b161e21272d27313536363530262a2321190e08000000000000000000000000071b2d3e4e60687b868c8f8d887f73605645321d0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798e9ea8a6a7a9aaaaaaa8a5a49c958b8277665e4f423223130100000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e001d32475c72879cb1c7ceb9a38e79644e5c72879cb1c7ceb9a38e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b677d8d9ea7b3b8c5bec0bfbec2b5b1a79e9383766d8298adb4bbb29d88735d48331e00000000000000000000000000000003090c1217151d202121201c14140e0c0600000000000000000000000000000d22364a5c687e8d9ba3a4a69d948474604b3b2a18040000000000000000000000000000000000000000000000000000000000000002090b111414100b0801000000000000000000000000000000000d22374d62778cabb9c6bdbebfc0bfbdc2b6b1aa9f98897c69604f41301f0f00000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e001d32475c72879cb1c2c2b9a38e79644e5c72879cb1c2c2b9a38e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000001a30455a6f859aafc4cfbaa5907a65503b25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4e63798b9fabb8c5cbcfc6b9b4b1afb0b2b7b3a199877a8a9eb4c9c8b29d88735d48331e000000000000000000000000000000000000000001080b0c0c0b08010000000000000000000000000000000000000f24394e647a8c9fabb5c1b8b3a296816c5947341f0b0000000000000000000000000000000000000000000000000000000000000a161e2126292925201d14090000000000000000000000000000000b20364b60758a9fb5cad2d3d4d5d4d2d3cac8bbb4a79e8d7e695f4d3d2d1808000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e001d32475c72879cacacacaca38e79644e5c72879cacacacaca38e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000001b30465b70859bb0c5cfbaa48f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586e8399aabbc9d5c9bcb5a89e9b999b9da6abb4a59d8a9ea8b9ccc8b29d88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aabbc9d2cbc0b49f8b77614c37220c0000000000000000000000000000000000000000000000000000000004121a2832363b3e3e3a35312619100200000000000000000000000000081d31445573899eb3c8c5c3c3c5c9ccd6ded9cec5b9ab9f927d675b4a362513000000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e001d32475c72869797979797978e79644e5c72879797979797978e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000001b30455b70859ab0c5cfbaa48f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a1500000000040a0c0a040000000000000000000000000000000000000000000000000000000000000c21374c61768b9fb4c8d8cfbcab9f9589868486888e969fa9aa9faab9c6d6c8b29d88735d48331e00000000000000010a101220202020202020202020202020202020202020202020202020201e1c160c00000000091e34495e73889eb3c8d9e7e0cebbaa917c67523c27120000000000000000000000000000000000000000000000000000000412223038454b505453504b44372e201002000000000000000000000000021527375c71879cb1b3afadaeafb3b9c5c9d3e2d6c9bcb49f8a79635443301c070000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00162b40556b808282828282828278624d556b808282828282828278624d38220d00000000000000000000000000000000000000000000000000000000000000000000000000001a30455a6f859aafc4cfbaa5907a65503b25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a150000000c171f211f170c040000000000000000000000000000000000000000000000000000000012273c52677d91aabbcedfcab59f8d8076716f707379808b9ba3b4bbc8d6ddc8b29d88735d48331e00000000000005131e252835353535353535353535353535353535353535353535353535353330291e100000000a20354a5f758a9fb4cadff3e8d5c5a8937e68533e2913000000000000000000000000000000000000000000000000000000122330404d56606669696560554b3e2e201000000000000000000000000000192f44596e8399a59e9a98989a9ea7b1b6c2d1dfdacdbaa99a8572604a35200e0000000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0013283d50626b6d6d6d6d6d6d6d625a4850626b6d6d6d6d6d6d6d625a4834200b00000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4d0bba6907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a1500000c1c29333733291f170c030000000000000000000000000000000000000000000000000000152a3f556a7f94aac8d9d7c2ad98826d61585a5b5b636b798599a1b3c7dcddc8b29d88735d48331e000000000001132330393d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a48453b2e1e0c0000081d32485d72879db2c4d5dedaccb8a7907b66513b261100000000000000000000000000000000000000000000000000000b1b30414d5e66757b7e7e7a73645c4b3e2e1b080000000000000000000000000f24394e647a878b888583838589909ca4b5c1d1e5d7c7b4a2917c66513c2b190600000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000d2133445055575757575757574d483c445055575757575757574d483c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3d1bca6917c67513c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000417293a474c473a332a1e170b02000000000000000000000000000000000000000000000000172c41566c8196abc1d6d1bca6917c6751463a3d4a4e5b63758399afc4d9ddc8b29d88735d48331e00000000000a1e30414d5260606060606060606060606060606060606060606060606060605e594c3b2916000001162c41566b8196a6b8c4c9c9bcb39e8875604b36210b00000000000000000000000000000000000000000000000000031629394d5f677c889093938f867a645c4b3722100000000000000000000000000d21364a5c64727573706e6e70747b869ba3b5c7d7e5d1c0af9a85705a4835200b00000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00041526333d404242424242424238342b333d404242424242424238342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2d3bda8937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000a1f33475861584c473a33291e160a0100000000000000000000000000000000000000000000162b40556b8095aac8d9d0bba5907b66503c312d363d495762788da2b7cdddc8b29d88735d48331e00000000001025394d5f677575757575757575757575757575757575757575757575757575736a5945301c0000000c22374c6177889ea6b1b4b2ab9f927d685645321e09000000000000000000000000000000000000000000000000000a1e324657677d8d9da6a9a8a49c8b7a644f3e2d1b070000000000000000000000071a2d3d4a4e5560555a585955606675859ba9bacde2dfcab59f8c78624d38230d00000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000071521282b2d2d2d2d2d2d2d22201921282b2d2d2d2d2d2d2d2220190d00000000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d5bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000c21374c61766b61584b463932281d150901000000000000000000000000000000000000000013283d53687d92aabbced4bfa9947f6a5a4b44373834394d62788da2b7cdddc8b29d88735d48331e000000000012283d52677d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a88735e48331e0000000b1f344759647a88969c9f9d988d7f6a604e38281602000000000000000000000000000000000000000000000000000c21364b6175889eabb7c4c2b6a99c86715c4a36220d0000000000000000000000000f1f2d3637444b44374337444b5763788b9fb4c9dfe3cfbcab937e69543e291400000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000040d1316181818181818180d0b050d1316181818181818180d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bed3c1ac97826c57422d170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15001d32475d728680766a61574b453831271c1408000000000000000000000000000000000000000d22374d62778b9fb4c7d7c8b39e8878676055514d483c4d62788da2b7cdddc8b29d88735d48331e000000000012283d52677d929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d88735e48331e00000004182a3b4a5c647780878988837a6a615041311a0a000000000000000000000000000000000000000000000000000012273c52677c91a6b8c9d4d3c7b5a48e79644f39240f000000000000000000000000010f1a2127313631272e263139495a6d8297acc2d7ecdac9ae99836e593a291704000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcd1c4af9a846f5a3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15001e33485d738896897f766960564b4437302618120800000000000000000000000000000000000b203448596f8499a9bac8cbb8a69e887d746c67625a5c5a62788da2b7cdddc8b29d88735d48331e000000000012283d52677d92a7b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b39d88735e48331e000000000c1d2d3e4a59616b7274736e645c5043332313000000000000000000000000000000000000000000000000000000152a40556a7f95aac5d5e7e5d2c2a7927c67523d271200000000000000000000000000000709151d201d1519141d2c3c50667b90a5c4d4e7ddc8b29d88735846331f0a000000000004192e43596e8398aec3d8d6c0ab96816b56412c16010000000000000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c4d5c7b29d87725645321d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15001e33485d73889d9e95887f756860554b433630231c110700000000000000000000000000000005182b3b4e63798b9faab8c5c5b8a69e9288817c7774716f6d788da2b7cdddc8b29d88735d48331e000000000012283d52677d92a7bcc6c6c6c6c6c6c9ccd6cacacacad4cbc8c6c6c6c6c6b39d88735e48331e000000000010202d3a474c565c5f5d584f4a3e33251505000000000000000000000000000000000000000000000000000000152a3f546a7f94a9c1d2e2e1cfbfa6917c67513c27120000000000000000000000000000000002080b080200010e21364c61768ba6b7cbdfdfcbb7a68b76614c36210c000000000004192e43596e8398aec3d8d6c0ab96816b56412c160d0d0c0a0400000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca6b8cbcab49f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15001e33485d73889db2a79e94887e746760544c40382f221b100700000000000000000000000000000d21364a5b677d8c9ea7b5bcc4b8b3a69d96918d898784838298adc2d8ddc8b29d88735d48331e000000000012283d52677d92a7b0b0b0b0b0b0b0b3b9c6d6e8e7d4c4b7b3b0b0b0b0b0b09d88735e48331e000000000002101c2a343741474a48433a362e2015070000000000000000000000000000000000000000000000000000000010253a50657a8fa3b5c4cdccc2b2a08c77624d37220d00000000000000000000000000000000000000000000000a1f33465873889db2c8dde6d4c4a38e78634e39230e000000000007192e43596e8398aec3d8d6c0ab96816b56412c222222211f170c000000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889eb3c8cfbcab8e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c3621120c182b3b5b70859bb0c5dad3bea8937e69533e2914001e33485d73889db2b8b3a69d93877d73665e504c3f372e211a0f06000000000000000000000000071a2d3d4d5f677c89989fabb4b9c4b7b2aba6a89e9c9a9898a0b2c6daddc8b29d88735d48331e000000000012283d52677d929b9b9b9b9b9b9b9b9ea8b9cce1dfcbb7a69d9b9b9b9b9b9b9b88735e48331e000000000000000c181f222b3234332e24221b100200000000000000000000000000000000000000000000000000000000000b20354a6072859ba6b4bab9b4a498836e594834200b00000000000000000000000000000000000000000000000417293a5c71869cb1c6dbe5cfbaa5907a65503b251000000002101b222e43596e8398aec3d8d6c0ab96816b56413737373737332a1c0c0000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5a70859aafc5d9c9a8937d68533e281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c3b3023212134485972879db2c7dcd2bca7927d67523d2812001e33485d73889db2c8c4b7b2a59c92867c70655d4f4b3e362d20190e0500000000000000000000000f1f30414d5e6677828c979ea8acb2b7c3c6b9b4b1afadadb2becfe1ddc8b29d88735d48331e000000000011263b50667c8586868686868686868a9eb3c9deddc8b39d8886868686868686836f5a442f1a0000000000000000040a0c161d1f1e190f0d0700000000000000000000000000000000000000000000000000000000000000071c304354637988989fa9a89e968676614c3b2b19050000000000000000000000000000000000000000000000001b30465b70859bb0c5dae5d0bba6907b66513b261100000412202d363a36596e8398aec3d8d6c0ab96816b564c4c4c4c4c4c473a2a170400001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41576c8196acc1d6c2ac97826d573b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee1ccb6a18c7761594d413936363f4c62778ca5b6cadfd4c3a5907b66503b2611001d32475d72879cb2b9c5cbc3b6b2a49c91857b6f645c4e4a3d352c20190d0400000000000000000001132330404c59626d79828991979da5a5a9acaeb0b1b2b3b8c5d5e8ddc8b29d88735d48331e00000000000f23384c5e667171717171717171718499afc4d9d5bfaa9580717171717171716f6554412c18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536495b6378828a8e8e898176615847331d0d000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200001222303e4a4f57546e8398aec3d8d6c0ab96816b626262626262615847331f0a00001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7c3d3c6b19c8671594834200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3dac5b09b8477675f534e4b4b4e5d6a8095aac3d4dfcab7a58c77624d37220d00162b40566b80949ea7b4bac6cac2b5b1a39b90847a6e635b4d493c342b1f180c0400000000000000000513222f3b484d5b636d757c82878c909396989a9c9d9ea7b8cce0ddc8b29d88735d48331e0000000000091c2f404c505b5b5b5b5b5b5b5b6f8499afc4d9d5bfaa95806a5b5b5b5b5b5b5a544737251100000000000000000000000002090b1013151614120e0c06000000000000070a0b0b0b0b0b000000000000000000000000000008182c3d4959626d767978756c6158473a2a1800000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200091d30404d5c646c70728399aec3d9d6c1ac97817777777777777776614c37210c00001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca5b6cac9b6a48c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3ddc8b4a39b887c7069636161646b7b8b9fb4c9dfddc7b29d8772594834200b000b20354b60737f89959fa8b4bbc8c9c1b4b0a29a8f83796d635a4d483b342a1f170b000000000000000004121d2b343d4a4e5760666d72777b7e8183858787899eb3c8deddc8b29d88735d48331e00000000000012222f383b464646464646465a6f8499afc4d9d5bfaa95806a55464646464644413729190800000000000000000000070a151d2025282a2b2a272320190e0a04070c0e1c2020202020200e0c060000000000000000000000000e1f2c3b484d5761636360564c463a2a1c0c00000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000f24394d5e667a81858999a1b3c7dbd9c4b19f978c8c8c8c8c8c8c85715c46311c07001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485972879cb2c7d3c2a7927d6752372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3e4d1c1b4a69d91857e78767679808b9fa9bacde2d0c0ac97826c573b2b180500081d314455606976808a979faab4bcc9c8c0b4afa1998c82786c62594c473a33291b140700000000000000000d18202d3639454b5157596266696c6e707172788da2b7cdddc8b29d88735d48331e00000000000004121c2326313131313131445a6f8499afc4d9d5bfaa95806a5540313131312f2c25190b00000000000000000003101b222832363b3d3f403f3c38352c211f171a2124313535353535352320190e0000000000000000000000000e1d2b3439464b4e4e4b453833291b0c0000000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c27120011273c51667c8d969b9ea8b3bfd0e2e0cebdb1aca1a1a1a1a1a19b86715c46311c07001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b576d8297acc6d6c2ad98826d5544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3ebdbcdc4b7b2a39b938e8b8b8e969fa9bac7d7d6c6b3a28e79644e39240f000001142637444b58616b77818b989fabb2bfc7c8bfb3ab9f988b82786c61594c463a32251403000000000000010f1a21232e2832363c3b474c505457595b5c62788da2b7cdddc7b29d88725d48331d0000000000000000090f111c1c1c1c1c2f445a6f8499afc4d9d5bfaa95806a55402b1c1c1c1a1811080000000000000000000a161e2d3638454b5052545554524d493c37332a2d3639474a4a4a4a4a4a38352c1e0e0000000000000000000000000d19202832363939363127251e13050000000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200182e43586d8398abb0b4b9c6d0ddedebdbcec4c1b7b7b7b7b7b19b86715c46311c07001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a8b9ccc9b39e8975604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3e0cdbcb0abb5b5b0a8a3a0a0a3abb4bac7d7d7c8b9a89a846f5c4a36210d000000091926313a474c59626c78828c99a1afb3bfc9c9bcb4aa9f978a81776b61584f4332200c0000000000000f1f2c35384346443b382f34373b3e4143454e63798ea3b8cedbc6b19c86715c47311c0000000000000000000000060606061a2f445a6f8499afc4d9d5bfaa95806a55402b1506060503000000000000000000000b1a28323e4a4e566065686a6b6967635a544c473a3d4a4e5c5f60606060605e493c2c19060000000000000000000008182530354546464646463d393023130100000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200192f44596e8499aec9bcc5c8d1dfefeadaccc3bfbcbcbcbcbcb19b86715c46311c07001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075899eb3c9ccb9a7907b66513929160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3d8c4b09e969fabb8c5b8b6b6b9c0c9cdd7cfc7baaa9e8a78624d3d2d1a070000000009141d2a333b484c5a626d79838e9aa1adb4bbc8c8bbb4a99f968a807669614f3b271200000000000e1e2c3d494e595c59514c40372e26292c273750657b90a5bad0dac4af9a856f5a45301a0000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b15000000000000000000000000000b1b2938454b5c646e757a7d7f807f7c78716961584a4a5b6371757575757575705a4935200c00000000000000000000132536434a5b5b5b5b5b5b524d41301e0a00000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200192f44596e8499a7a7a7b0b4c1d1e4dfccbcafaaa7a7a7a7a7a79b86715c46311c07001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145566d8398adc3d4c5ad97826d5746321e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee3d6c0ab96818d9ea7b4bac7c7cacfcac8c6bfb3a99f8c7d675a48351f0f000000000000010c171f2b343c494d5b636e7a848f989faab4bac7c7bab4a89e95897f69543f29140000000006192b3c495b636e716e665e504b3f3937363644556a7f95aabfd4d8c2ad98836d58432e180000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b15000000000000000000000000081829394656606c7a83899092949594918d867f766860546379868a8a8a8a8a8a78634d38230e000000000000000000071c30435460707070707070675f4d39251000000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200192f44596e83919191919ba3b4c8ddd7c3af9e959191919191919186715c46311c07001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215273851667b91a5b7cbc9b49e8976614b36211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b767c88959fa9adb2b5bcb5b3b0aaa1998b7c675f4d3c2b19010000000000000000040d18202b353d494e5c646f7a838b969fa9bacdcdc6b9b4a79e89745e49341f000000000b2035485a63798386837b70655d544e4c4b4c546074879cb2c7dcd2c1a8937e68533e29130000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b1500000000000000000000000013253646576174818c989ea8a7a9aaa9a7a39b94887d726170859b9fab9f9f9f8d78634d38230e0000000000000000000b20354a60728486868686857d67523d271200000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c27120010253a4f657b7c7c7c7d859bb0c5dbd5bfaa95807c7c7c7c7c7c7c7c66503b261100001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074879db2c8cdb9a8937d68533f2e1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b766676808a92989d9fab9f9e9b958e8378665e4d40301e0e0000000000000000000000050e19202c363e4a4f5d656e76808a9fb4c9dfd6cdc5b39e89745e49341f000000081c2f3f4d627888989b9990857b71696461606166728196a5b6caddc9b5a38d78634d38230e0000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b150000000000000000000000071c304354617584979fabb4b9c6bfc0bec1b5b0a79e928476768c9fb4bcb5b5a28d78634d38230e0000000000000000000d22374c62778c9b9b9b9b97826d5736251300000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000e22374b5d656767676e8398aec3d8cfbaa58f7a67676767676767665e4c38230f00001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556a7f95aabbcec6b09b86715d4b37230f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b7661616b767c83888a8b8a888680796e625a4c40302212000000000000000000000009151d283239464b58616b778088969fa9bacdd0c7bfb3ab9e89745e49341f0000000e23374b5d6f8399a6b1aea29a8f857e797675777b84969fb1c3d3d2c1b09b86715b4935210c0000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b1500000000000000000000031628394a6072849aa2b4bcc9cdd6cdc9c4c1c1c5b8b3a19a867e93abbccfd9b8a28d78634d38230e0000000000000000000f243a4f64798fa4b0b0b09b85705443301c07000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200081b2e3f4b4f5252596e8398aec3d8cfbaa5907a65525252525252504c402f1c0900001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374d62778b9fb4c9c9b5a38f7a654f3e2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c5861676e7275767573716a635b4d493c2f22120400000000000000000008131c273138454b57616a77818a959da6b4bac7c8c0b4afa1998d826d58422d1800000010253b50657b90a1b3c4c0b4b0a39b938e8c8b8c919aa2b1bdced6c5b5a3917c67513c2c19060000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b1500000000000000000000091e324657697e93a2b4c0cfd9cfc6bab4aeabacaeb3b9b3a49c939daec9dacdb8a28d78634d38230e00000000000000000012273c51677c91a6bcc5b49e8974604a35200d000000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000010212e373a3c42576c8297acc1d7d1bba6917c66513c3c3c3c3c3b382f22110000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009203448596d8298abbccfc1af99846f5c4a36210d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c464c525855606160555b554e4a3d352c1e12040000000000000000041118253037444b566069768089969fa9b2b7c4c9c1b4b0a29a8f83796d63523f2a160000061b30455b70859aa5b2bec9c8c1b5b0a9a3a1a0a1a6afb4c0ced4c6b9a79b8573604b35200e000000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b15000000000000000000000c21364b6175899eb3c0d0e3cfbfb3a89f999697999ea7b2b6b1a9aebbcbe7cdb8a28d78634d38230e00000000000000000014293f54697e94a9becdb9a88d78624d3b2b1d110000000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000003101b22252b40556b8095aac0d5d3bea9947e69543e2d28272726231c11030000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4e63798c9fb4c9c7b3a18e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36363d37444b4c4b44374039362d20190e0000000000000000000614222f36434a556068757f89959ea8b4bac7cac2b5b1a39b90847a6e635b52453523100000000e24394e63798798a0b1b5c2cac9c6beb9b6b5b6bbc5c8d1cdc4b7a89e8978625443301c08000000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b150000000000000000000316283953687e93a7b9ccded1c1b3a1998a8481818489919da5b0bdc1cbd9e2cdb8a28d78634d38230e000000000000000001162c41566b8196abc0d6c6a8937d6859483c2e1c1308000000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200000000080e13283e53687d93a8c3d4d9c4af99846f5c4a3e3e3c3935302518080000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2135495b6d8298abbccfbfad97826d58422d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c362127263135363531272b24211a0f0600000000000000000002142431404c546067747e88949ea7b4b9c6cac2b6b1a49c91857b6f645c4e4a3d352717060000000c21364a5b637682909ba3afb4bbc8c6c9cdd7ccd7cdc9c7bab4a69d8a7c655a4936261401000000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b15000000000000000000091e32455770859bb0c5d6ddc9b5a39983776f6c6c6f757c87969fadbacbdde2cdb8a28d78634d38230e000000000000000002172c42576c8197acc7d8c8b29d8877625a4b3f3025180b0000000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c27120000000000000e23384e63788da5b7cadfcab59f8d7a645c5553524f4a433625130000001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4e63798c9fb4c5b9af9a85705a45301b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c362112141d2021201d15150e0c0700000000000000000000000b1f31424e5e66727d87939da6b3b8c5cbc3b7b2a49c91867c70655d4f4b3e362d1f170900000000071a2d3d4a58616d7b8691999faaadb1b4bac7b9c6b9b4afa99f96887a655e4c3c2b180800000000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b150000000000000000000b21364b60768a9fb4cadfd7c6b09b8573615956575660677581939cadc1d5e2cdb8a28d78634d38230e000000000000000000152a3f556a7f94a9bacecbb7a69c8678655d4a4336291b0c00000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c27120000000000000c2135495b72879db2c5d5cfbcab9d877a6f6a686764605443301c0700001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2135495b6c8197a7b4a79e937f69543f29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c01080b0c0b080100000000000000000000000000000011263b4e60687c86929ca5b2b7c4ccc4b8b3a59d92867c72665e504b3f372e211a0f010000000000000f1f2d3a464c5e66737c848b92979c9fa9a3a3a2a89e99938a8076645c4c402f1e0e0000000000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b1500000000000000000010253a50657a8faabbcee1cdb9a8907b6555473b38454b56606c7e93a8bed3e2cdb8a28d78634d38230e0000000000000000000e23384d63788b9fb4bdcec4b6a49c887b6a605446392a1c0c000000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000000000000061a2c3d556a7f94a7b8ccdac9b7a59d8d85807d7c7972604a35200b00001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4c6176889e9f97897e69614f3b27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000000000000000000013293e53687e909ca4b2b6c3cbc5b9b3a69d93877d746760544c40372f221b10070000000000000000010f1c2933404c5460666f777d8286898c8d8e8d8b89847e776b61584a3e2f2111000000000000000000000000000000000000051a2f445a6f8499afc4d9d5bfaa95806a55402b1500000000000000000013283d52687d92a7c8d8dec9b49e8974604b372a283238454d62778ca2b7cce1cdb8a28d78634d38230e0000000000000000000c2035495a6a7f949eb4bac7c2b6a69e8c7f726157473a2a1b0b0000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000000000000000e21364b6175899eb3bccfd4c3b7ab9f9a9593918e816d5736261401001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f334758687d928c827768604f43321f0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000001c32475c71869cb1b5c2cac6b9b4a79e94887e746860554a43362f231c11070000000000000000000000000c171f2f36434b515961686d71757778797876746f6962594c473a2d201103000000000000000000000000000000080902051a2f445a6f8499afc4d9d5bfaa95806a55402b1500000000000000000014293f54697e94a9bed3dbc6b09b867155443119151d28374d62778ca2b7cce1cdb8a28d78634d38230e00000000000000000006192c3c4f616c80939fa9b7c4c4b8aa9f9483756159473928160300000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000000000000000a1e324657677d929eb4bcc9d2c9bcb5afaaa8a79e89745443301c08001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4a6072817a6d61594e42322514030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000001e33485d73889db2c8c7bab4a89e95897f756960564b443730251812080000000000000000000000000000000411182630353a474c525854606263646361575a534d483b33291c1002000000000000000000000000030c12141d1e180c1a2f445a6f8499afc4d9d5bfaa95806a55402b15000000000000000000152b40556a8095aabfd5dac4af9a856f5a372614020d22374d62778ca2b7cce1cdb8a28d78634d38230e000000000000000000000e1e324351626c7e8b9da6b4c0c8bbb4a1998577615746321e1000000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200000000000000031629394d5f6b80959fabb5c2c9cccac4bfbdb9a88a75604b35200b001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c304354606c645c4c473a31241406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000001e33485d73889db2bbb4a99f968a80766a61574b453831271c13080000000000000000000000000000000000000008141c202a34373d36434a4c4e4e4d4b46393e37342b1f170c0000000000000000000000000006141f272933332d211f2f445a6f8499afc4d9d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a000d22374d62778ca2b7cce1cdb8a28d78634d38230e0000000000000000000000152534445160687a889aa2b1bdcebfb3a39b8575614b3e2e1b08000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200000000000000000b1b30414b60727f8c9ca4aeb3b9c5bdbebec6a08b76614b36210c001a2f44596f8499aec4cab59f8a75604a35200b00000000000000000000000000061c31465b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a574f4a3e342a1c140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9cedecbb6a18b76614c36210c000000000000000000000000000000000000000000001e33485d73889db2aa9f978b81776b61584b463932281d15090000000000000000000000000000000000000000000001080c181f222825303537383938363329292220180d0400000000000000000000000000071425323b3f484942363329445a6f8499afc4d9d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e000000000000000000000007162634424e5c647784979fb1becfc2b5a397816c5c4b37220d000000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000000000000000000131c304354606a7b8691999ea7a6a8a9a8a7aa8c77624c37220d001a2f44596f8499aec4cab59f8a75604a3520150b070000000000000000010a10121c31465b71869bb0c6c8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530354239362d1f180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9c9c9c9b6a18b76614c36210c000000000000000000000000000000000000000000001e33485d73889d9f988b82786c61594c463a32281d150a010000000000000000000000000000000000000000000000000000040a0c13131c2022232423211e17140d0b05000000000000000000000000000002142532434f545d5e574c463a445a6f8499afc4d9d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e000000000000000000000000081624313e4b5962738197a0b2c3d2c1b59f8d7a644f3b2a18050000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200000000000000000001142636434b5d65737c83898e91929493928f8c78624d38220d001a2f44596f8499aec4cab59f8a75604a35322b201c1308000000000005131e25273133465b71869bb0c6c8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202c24221b100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b4b4b4b4b4a18b76614c36210c000000000000000000000000000000000000000000001e33485d7388998d82786d625a4c473b33291e160b02000000000000000000000000000000000000000000000000000000000000000000070b0d0e0f0e0c0a03000000000000000000000000000000000000102032434f616972736d6158493d5a6f8499afc4d9d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e000000000000000000000000000613202e3b475560728298a5b6cacfbcab99836e5947341f0b0000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200000000000000000000081826303f4c5460666e74797c7d7f7e7c7974625a4835200b001a2f44596f8499aec4cab59f8a75604a484740353025180800000001132330393c4648485b71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b170f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e9e9e9e9e9e9e9e8b76614c36210c000000000000000000000000000000000000000000001e33485d738783796d635b4d483c342a1f170c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4f61697f87888276635b4c5a6f8499afc4d9d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e000000000000000000000400000002101d2a3744546175879db2c7dac9b59f8c77624c37220d0000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000000000000000000000008141c2f36434a515460646668696967646056483c2b1905001a2f44596f8499aec4cab59f8a75605e5e5c554a433625130000000f1f30414d525c5e5e5e71869bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798a898989898989898a76614c36210c000000000000000000000000000000000000000000000e23394e63796e635b4d493c342b1f180c040000000000000000000000000000000000000000000000000000000000000000000000070b0e1214151413110f0b090300000000000000000000000000000417293a4b5c697f949d9e978679655d5a6f8499afc4d9d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e000000000000020c12141a140b0902000d1927364657687d93a8c5d5cfbcab927c67523d27120000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c271200000000000000000000000001111825303536434b4f51535453524f4b45382b1e0e00001a2f44596f8499aec4cab59f8a75737373726a605443301c0700061a2c3d4d5f677173737373859bb0c6c8b39d88735e48331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b63747474747474747474615846331f0a000000000000000000000000000000000000000000000c21364a5b635b4e4a3d352c20190d04000000000000000000000000000000000000000000000000000000000000000000000808131c202427292a29282624211e160d0b0600000000000000000000000a1f334758647a8b9fb2b3a49c897b69606f8499afc4d9d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e000000000006141f27292f2a211e160a01091829394c61768ba7b8ccdac9ab96816b56412c160000000000000000000000000000051a30455a6f859aafc4dae6d1bca6917c67513c2712000000000000000000000000000008131c20263035393c3d3f3e3d3a3632281a0e0000001a2f44596f8499aec4d9b5a18f88888888878073604a35200b000c2135495b677d86888888888c9fb4cac8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e5f5f5f5f5f5f5f5f5f4c463a29170400000000000000000000000000000000000000000000071a2d3d4a4e4a3d362d21190e050000000000000000000000000000000000000000000000000000000000000000000007101b22253035393c3f3f3f3d3c3a3632282320190e060000000000000000000c21374c6176879daabbc2b6a79e8c7e6c6f8499aec4d9d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e00000000061424323b3e443f3632281d150f0e1e33465773899eb3c8d7c2ad97826d58422d180000000000000000000000000000051a30455a6f859aafc4d7d7d1bca6917c67513c271200000000000000000000000000000000070b141c202427282a292724201d150a000000001a2f44596f8499aec4d9cbb8a69d9d9d9d9c927d68523d2813000e23394e63798c9b9d9d9d9d9faabbcec8b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36394949494949494949493633291b0b0000000000000000000000000000000000000000000000000f1f2d3639362d211a0f0600000000000000000000000000000000000000000000000000000000000000000000000f1a212e3736434a4e5254555452514f4b453938352b211a0e0100000000000004192e44596e8399a5b7c6d3c5b8aa9f9381748398aec3d8d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e00000000142432424f5459544b4538312725242534485973889db3c8d8c3ae99836e59442e190000000000000000000000000000051a30455a6f859aafc2c2c2c2bca6917c67513c271200000000000000000000000000000000000001080b0f11131414120f0b090200000000001a2f44596f8499aec4cacac4b8b3b3b3b3ac97826d57422d180013283d52687d92aab3b3b3b3b4bbc8cac8b39d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124343434343434343434211f170b00000000000000000000000000000000000000000000000000010f1a2123211a0f07000000000000000000000000000000000000000000000000000000000000000000000008131c2d363f4b4f54606367696a696866646057554d483c352c1d140900000000000014293f54697f8d9ea8b7c4d2c8bbb49f97848299aec3d8d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e0000000d1d31424f60696f6960564b44373a393a424c62778b9fb5cad7c2ac97826d57422d180000000000000000000000000000051a30455a6f859aacacacacacaca6917c67513c27120000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aeb4b4b4b4b4b4b4b4b4ad97826d58422d180013283d53687d92a8b4b4b4b4b4b4b4b4b4b39d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e1f1f1f1f1f1f1f1f1f0c0a0400000000000000000000000000000000000000000000000000000000070c0e0c07000000000000000000000000000000000000000000000000000000000000000000000000091825303e4a4e5d656d74797c7e7f7e7d7b7976716a625a4e493d3126190c000000000012273b4f61697c8a9da6b5c1cfcebdb1a29a99a1b2c6dbd5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e000005192b3c4e60697e847f75676055524f4e4f53606b8096abbccfd7c7aa95806b55402b160000000000000000000000000000051a30455a6f849797979797979797917c67513c27120000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f84999f9f9f9f9f9f9f9f9f9f9f97826d58422d180013283d53687e929f9f9f9f9f9f9f9f9f9f9f9d88735e48331e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192736434a5c64707a82888e9194949492918f8a867f786e635b4b4437291c0c000000000c1f32434f5e667a879ba3b2bfcdcec0b3afaeb2bfcfe2d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e00000b2034485a697e939994877d746c6764636468707e8d9fb5c9dacdbaa9917c66513c271100000000000000000000000000000014293f54697f8282828282828282827a644f39240f000000000000000000000000000000000000000000000000000000000000000000000000192f44596e838b8a8a8a8a8a8a8a8a8a8a8a8b826d57422d180013283d53687d8c8a8a8a8a8a8a8a8a8a8a8a8a88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b101010100e0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0f1010100e0c07000000000000000000011527374454606a7a848f979ea7a7a9aaa9a7a6aa9f9b958b83796a6055463a291b0b00000003142532404c5c64778599a1b0bcced0c7c4c3c6cfddead5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e000a1e30414d62788a9eaea59d9288817c7a797a7e85939fabbccfd7c6b49f8a75604b36210b00000000000000000000000000000012273b4f61696d6d6d6d6d6d6d6d6d645c4a36220d000000000000000000000000000000000000000000000000000000000000000000000000172c4054656e757575757575757575757575756d63523f2a160011253a4e606875757575757575757575757575736a5844301b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d202525252523201d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b161e212425252524211a0f01000000000000010f1d31445560727f8c9aa2adb3b8c5bebfbebdc8bbb4b0aa9f988b8073615846392917030000000614222f3e4a59627583959eb4bbc8d5d9d8dbe2edead5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e001025394d5f6f8399a8b9b7b2a69d96918f8e8f939ba3b5bcc9dacdb9a897826d5745321e090000000000000000000000000000000c1f32434f545757575757575757574f4a3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000001124364754595f5f5f5f5f5f5f5f5f5f5f5f5f57524535230f000b1e31424e535f5f5f5f5f5f5f5f5f5f5f5f5f5d584c3b2915000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832363a3a3a3a38353126191406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f293236393a3a3a39362d1f0f0000000000000f1f32434b607382949faab4c0c8ccccc9c2bfbebec2c8c8bbb4aa9f958476615746331e0a000000000412202d3b4857607280929faab8c5d3e0eef5ffead5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e0012273c52677c91a1b3c2cac4b7b3aca7a4a3a4a8b0b4c1cfd6ccbbb49e8a77624d39281603000000000000000000000000000000031425323b3f42424242424242424239362d2010000000000000000000000000000000000000000000000000000000000000000000000000000719293640444a4a4a4a4a4a4a4a4a4a4a4a4a423f3527170600011323313a3d4a4a4a4a4a4a4a4a4a4a4a4a4a48443b2d1d0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152838454b505050504d4b44373124170900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2a3439464b4f5050504e4a3d2d1a0700000000061a2c3d4f616d8298a0b4bbc8d1cec6b9b3adaaa8a9acb3b7c4c8bbb4a29a8576614c36210c0000000000010f1d2b394554606b7d8c9ea7b6c2d1deecffead5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e0012283d52677d8b9ca4b3b9c5cbc8c1bcb9b8b9bdc5c8d1cdc5b9b39d927e685948341b0a000000000000000000000000000000000006141f27292d2d2d2d2d2d2d2d2d24221b100200000000000000000000000000000000000000000000000000000000000000000000000000000b19242c2f353535353535353535353535352d2a23170900000005131e2528353535353535353535353535353330291d0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d32455660656565656360554e42342717030000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3b474c576164656565635b4a36210c000000000c2135495b697e94a0b2beced8c7bab4a89e98959394979da6b3b8c4c0b19f917c67523c2712000000000000000d1b2836434a60687b899ca4b4c0cee3ecead5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5dac4af9a856f5a45301a050d22374d62778ca2b7cce1cdb8a28d78634d38230e001025394d5f677986949ea7b3b8c5c5c8ccd5d9cecac7c6bab4a79e927f6a604e3b2b1800000000000000000000000000000000000000030c12141818181818181818180f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000071117192020202020202020202020202018160f060000000000010b1113202020202020202020202020201e1b150c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60747b7a7a7a787468605245342111000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b4859616d76797a7a7a79634e39240e000000071b2d3e4e63798b9fb4beced8c7baa99f9589837f7e7f8288929da6b3b5a397816d5f4d39251000000000000000000a182530414e5d6579869aa2b1bdcfdad8d5bfaa95806a55402b15000000000000000000162b40556b8095aac0d5d5c4af9a856f5a45301a050d22374d62778ca2b7ccd5cdb8a28d78634d38230e000a1e30414d5b63757f89959ea7abb0b3b8c5c8bbb4b2ada89f97897d6a615042311d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074878f8f8f8d877e6c63523f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596277828a8e8f8f8f7f6a55402a150000000d22364a5c6f8399a9bacde2cebaa99f8b7f756d6a69696d747d889aa1a59b8574604b41301e0a00000000000000000008131c313f4b5b637684979fb5bcc9c2c2bfaa95806a55402b15000000000000000000162b40556b8095aac0c0c0c0af9a856f5a45301a050d22374d62778ca2b7c0c0c0b8a28d78634d38230e00011323303d4a57616a76808890969a9ea7a1a2aa9f9d98938a8178675f5043332413000000000000000000000000000000000000000000000000000000000000000000000000000c161c1e202020202020202020202020202020202020202020202020202020202020200a030000000000000c161c1e2020202020202020200f0d070000000000000000000000000000000000000000000000000000000c161c1e2020202020202020202020202020202020202020202020202020201f1c170d01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546a7f94aaa5a59d93816c5d4c38230e000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4d627887979faaa59f8b78624d38220d0000021528384f647a8ea1b3c7d7d2c1b49f8b7c6a605655535454606777848f91877862564532231301000000000000000000000013212e3c4958617381949fabadadadadaa95806a55402b15000000000000000000162b40556b8095aaababababab9a856f5a45301a050d22374d62778ca2abababababa28d78634d38230e000005131f2d39464b58616b747b8085888b8c8d8b8a87827d766c625a4d4133251506000000000000000000000000000000000000000000000000000000000000000000000000101e293033353535353535353535353535353535353535353535353535353535353535351e160b00000000101e29303335353535353535353524221b1002000000000000000000000000000000000000000000000000101e29303335353535353535353535353535353535353535353535353535353534312a1f11010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364d62778b9fb4b7b29f907b65503d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b6e8398a5b4bbaf99846f5a4834200b0000091d3245566d8297adbfd0dec9b5a3937e685e4b45383e36434b59626f7a7c766259483828150500000000000000000000000003111e2c3a4755606d7f8d98989898989895806a55402b15000000000000000000162b40556b809595959595959595846f5a45301a050d22374d62778c959595959595958d78634d38230e000000010f1b28323a474c5560666b70737677777675726d6861584d483c302315070000000000000000000000000000000000000000000000000000000000000000000000000c1e2e3b45484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a32291b0b00000c1e2e3b45484a4a4a4a4a4a4a4a4a39362d201000000000000000000000000000000000000000000000000c1e2e3b45484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49463d2f1f0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008203448596f8499aec4bdb09a85705b4935210900000000000000000000000000000000000000000000000000000000000000000000000000021527374e63798ea0b2c3b8a7917c67513c2b190500000b20364b6075899eb4c9ded8c8b19b8673604b4032282926303b474c5d64676158483b2b1a0a0000000000000000000000000000000e1c2937444b61697c838383838383827d66513c271100000000000000000010263b50657c80808080808080807e68533d2813000c21364c617680808080808080808077614c37210c00000000000b161e293337444b50565b5761626261605458534c473a352b1e13050000000000000000000000000000000000000000000000000000000000000000000000000016293b4c595e6060606060606060606060606060606060606060606060606060606060605e46392916030016293b4c595e6060606060606060604f4a3e2d1b070000000000000000000000000000000000000000000016293b4c595e6060606060606060606060606060606060606060606060606060605e5a4d3d2a1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b51667c91a6b8c8b4a28d78634e37261401000000000000000000000000000000000000000000000000000000000000000000000000081d3144556b8196abbec8b39e8875604b36200d00000011263b50667b90a8b9cce1cebbaa927d685443301e1614141c2a343f4b4f524c473a2b1d0d00000000000000000000000000000000000c192731434f5e666d6d6d6d6d6d6d665e4d39240f0000000000000000000e23384c5e656b6b6b6b6b6b6b6b68604e3a2611000a1e334657616b6b6b6b6b6b6b6b6b615847331f0a000000000000030c171f2731353b4139464b4c4d4c4a43363e37332a20190e0000000000000000000000000000000000000000000000000000000000000000000000000000001c3045596a73757575757575757575757575757575757575757575757575757575757575705746321e0a001c3045596a73757575757575757575705c4a36220d000000000000000000000000000000000000000000001c3045596a73757575757575757575757575757575757575757575757575757575746b5a46311c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20364b6074889eb3c8c0ab95806b5544311d080000000000000000000000000000000000000000000000000000000000000000000000000b20364b6074889eb3c8c1ab96816b5645311d09000000152b40556a8095aac6d6dfcab49f8a76614c3626140200010d181f2e373a3c37332a1c0d0000000000000000000000000000000000000009151d32404c5158585858585858514d40301d0a000000000000000000091c2f404c505656565656565656534e42311e0b0003172939464c5656565656565656564c473a2a170400000000000000000409151d20262b29323637383635302528211f170c05000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a75614b36210c001e33485e73888a8a8a8a8a8a8a8a8a7a644f39240f000000000000000000000000000000000000000000001e33485e73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89745e49341f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556b8096abc1c8b39d8874604b35200d000000000000000000000000000000000000000000000000000000000000000000000005182b3b51677c91a6b8c8b4a38e79634e38271502000000192f44596e8499aec3d9dbc6b19c867158463318080000000005101b222527211f170c00000000000000000000000000000000000000000002152230393c434343434343433c39302212000000000000000000000011212f383b40404040404040403d3a3124130200000b1b29333640404040404040404037332a1c0c000000000000000000000001080b1116161e21222221201c13130c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8b75614b36210c001e33485e73889d9f9f9f9f9f9f9f8e79644f39240f000000000000000000000000000000000000000000001e33485e73889d9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e89745e49341f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374e63798ea3b4c8b7a6907b66513b2a1805000000000000000000000000000000000000000000000000000000000000000000000b203448596f8499aec5c6b09b85705b4a361a0a000000001c31475c71869cb1c6dbd8c2ad98836d583a291700000000000000080d0f120c0a04000000000000000000000000000000000000000000000004121d24272e2e2e2e2e2e2e27241d1204000000000000000000000003111c23262b2b2b2b2b2b2b2b28261e1306000000000b171e212b2b2b2b2b2b2b2b2b211f170c0000000000000000000000000000000000030a0c0d0d0c0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a08b76614b36210c001e33485e73889db3b5b5b5b5b5a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b39e89745e49341f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092135495b70859bb0c6c4ae99836e5947341f0b000000000000000000000000000000000000000000000000000000000000000000000d22374d62778b9fb4cab9a8937d68533d2d1a00000000001e33495e73889eb3c8ddd6c0ab96816b56412c16000000000000000000000000000000000000000000000000000000000000000000000000000000090f1118181818181818110f0a000000000000000000000000000000090e10161616161616161613110b02000000000000030a0c1616161616161616160c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8cacacacacacacacacacacacacacacacacacacacacacacacab6a08b76614b36210c001e33485e73889db3c8cacacab9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8cacacacacacacacacacacacacacacacacacacacacac9b39e89745e49341f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d53687d92a8b9cab49f8b77624c372210000000000000000000000000000000000000000000000000000000000000000000081c2e3f556a7f94aabbc9b49e8976614b36210f00000000001f34495f74899eb4c9ded4bfaa957f6a55402a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1012202020202020202020202020202020202020202020202020202018150f06000000001e33485e73889db3c8dddfdfe2d4cbc8c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7b6a08b76614b36210c001e33485e73889db3c8dddfceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dddfdfdfdad3d0cecececececececececececececec9b39e89745e49341f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f21364b6176899eb4c9bbaa947f69543e2e1b0800000000000000000000000000000000000000000000000000000000000000000e23374b5d72879cb2c8c2ad97826d5746331e0a00000000001f354a5f748a9fb4c9dfd4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000050b0d111315161513120e0c060000000000000000000000000000000000070d0f202020202020202020200a040000000000000812181a202020202020202015130c03000000000000070d0f202020202020202020200a04000000000000000000000000000000000005131e252835353535353535353535353535353535353535353535353535352d2a2317090000001e33485e73889db3c8ddf2e7d4c4b7b3b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a08b76614b36210c001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8ddf2e6d6c8bebbb8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b39e89745e49341f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3246576d8297adc2c8b19c86715c4b37220b000000000000000000000000000000000000000000000000000000000000000317293950657a8fa4b6cab6a48f7a654f3929170300000000001f34495e74899eb3c9ded5bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000080d0f18202226292a2b2a282723211a110b08010000000000000000000000010f1a2124353535353535353535351f170c000000000b19252d3035353535353535352a27201507000000010f1a2124353535353535353535351f170c00000000000000000000000000000001132330393d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a423f3527170600001e33485e73889db3c8ddf2dfcbb7a69d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d8b75614b36210c001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8ddf2dac8b8aba5a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39e89745e49341f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031629394f657a8fa4b6cab6a48f7a644f392816030000000000000000000000000000000000000000000000000000000000000a1e3346576d8297adc3c8b19c87725d4b371b0b0000000000001d33485d72889db2c7ddd6c1ab96816c56412c1700000000000000000000000000000000000000000000000000000108101b22252b34373b3e3f403f3e3c38352c26201c1408000000000000000000000f202d36394a4a4a4a4a4a4a4a4a4a33291c0c00000819293741454a4a4a4a4a4a4a4a3f3c3225150300000f202d36394a4a4a4a4a4a4a4a4a4a33291c0c00000000000000000000000000000a1e30414d52606060606060606060606060606060606060606060606060606057524535230f00001e33485e73889db3c8ddf2ddc8b39d88888888888888888888888888888888888888888775604b36210b001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8ddf2d3beab9a908e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e89745e49341f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b22374b5d72869cb1c8c2ac97826d5746321e090000000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4c9bbaa947f6a543f2e1c000000000000001b30455b70859ab0c5dad9c4ae99846f593d2c1a06000000000000070d0f0e0c0700000000000000000000000008141c202e373a3b484d505355555453514e493d3c35302618120300000000000000071a2d3e4a4e6060606060606060605e463a2917040012253748545a6060606060606060544f4332200c00071a2d3e4a4e6060606060606060605e463a291704000000000000000000000000001025394d5f6775757575757575757575757575757575757575757575757575756d63523f2a1501001e33485e73889db3c8dde3ceb9a48e7a7272727272727272727272727272727272727272605745321e09001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde5d0bba5907c797979797979797979797979797979797979634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f54697f94aabbc9b49e8976614b36210e0000000000000000000000000000000000000000000000000000000000061a2c3d53687d93a8bacab49f8b77624c37221100000000000000182d42576d8297acc2d7ddc7b29d88725b4935210c0000000008101b222424211a0f010000000000000000010f182630353f4b4f57596266686a6b6a6867635b59514b4336301e160b0000000000000d21364a5c70757575757575757575705846331f0a03182d4154666f75757575757575756a614f3c2713000d21364a5c70757575757575757575705846331f0a0000000000000000000000000012283d52677d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816d57422d1802001e33485e73889db3c8dde3ceb9a48e79645d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d4b4539281603001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d786363636363636363636363636363636363635b4935210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001022374c62778b9fb4cab9a8927d68523c2c1906000000000000000000000000000000000000000000000000000000000c2135495b70859bb0c6c4ae99836e5948341f0b0000000000000013293e53687e93a8c2d2dfcab7a58d78634e3a29180a0409101b222d363939362d1f16080000000000000412202d36434b515d646c72777b7e7f807f7d7c78736e6660544d4132281b0b00000000000f24394e647a8a8a8a8a8a8a8a8a8a76614c36210c051a30455a6f848a8a8a8a8a8a8a8a7f6a543f2a15000f24394e647a8a8a8a8a8a8a8a8a8a76614c36210c0000000000000000000000000012283d52677d929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f97826d57422d1802001e33485e73889db3c8dde3ceb9a48e79644f4848484848484848484848484848484848483632281b0a00001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3447596e8399aec4c6b09a85705b49352109000000000000000000000000000000000000000000000000000000011527374e63798ea3b4c8b7a6917c66513b2a1805000000000000000e23384d63788da4b5c9ded4c3aa957f6a584636281f171e212e373e4a4e4e4a3d3426160500000000001222303e4a546066707a81878c909394959493918d88837c73675f4b4639281a0a000000000f24394e64798e9f9f9f9f9f9f9f8b76614c36210c051a30455a6f859a9f9f9f9f9f9f947f6a543f2a15000f24394e64798e9f9f9f9f9f9f9f8b76614c36210c0000000000000000000000000012283d52677d92a7b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ac97826d57422d1802001e33485e73889db3c8dde3ceb9a48e79644f393333333333333333333333333333333333211e160a0000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d39393939393939393939393939393939352c1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b51667b90a6b7c8b4a28d78634d372614010000000000000000000000000000000000000000000000000000081d3144556b8096abc1c8b39d8874604b35200d00000000000000000c2035495a71869cb1c5d5dec8b39e897661544538332a32363e4b4f5c64635b514434231300000000091d30404c5c64737c858f979da5a5a8aaaaa9a8a6a79e9991877c6d615746382715020000000f24394e64798ea3b5b5b5b5b5a18b76614c36210c051a30455a6f859aafb5b5b5b5a9947f6a543f2a15000f24394e64798ea3b5b5b5b5b5a18b76614c36210c0000000000000000000000000012273d52677c92a7c3d4cacacacad8cec9c9c9c9c9c9c9c9c9c9c9c9c9c2ac97826d57422d1802001e33485e73889db3c8dde3ceb9a48e79644f39241d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d0b0903000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38242424242424242424242424242423211a0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20354b6074889db2c9c0ab95806b5544311d0800000000000000000000000000000000000000000000000000000b20354b6074889eb3c8c0ab95806b5544311d08000000000000000006192c3c54697e94a7b8cce0ccb8a798827260564c473a464b515c647179796b625141301f0e0000000f24384c5e667a85919ba3acb2b7c3bdbfc0bfbdc5b8b3aea59c918275615645311d100000000f24394e64798ea3b9cacacab6a18b76614c36210c051a30455a6f859aafc4cacabfa9947f6a543f2a15000f24394e64798ea3b9cacacab6a18b76614c36210c0000000000000000000000000010253a50657a8fa5b7cadfdfead8c8bbb4b4b4b4b4b4b4b4b4b4b4b4b4b4ac97826d57422d1802001e33485e73889db3c8dde3ceb9a48e79644f39240f080808080808080808080808080808000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f020202020202020202020200000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0e0e0e0e0e0e0e0e0e0e0e0e0e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556b8095abbcc8b39d8874604b35200c0000000000000000000000000000000000000000000000000005182a3b51667c91a6b8c8b4a28d78634e372715010000000000000000000e21364c6176899eb3c1d1d5c5b2a09781756861585c5761666e7a858e8e806b5f4d3d2c1a0a000011263c51667c8b9ba3b0b4c1c7c7c4b7b3b1b1b3b8c5c8c3b6b2a0988374604b3f2e1b0800000f24394e64798ea3b9cedfcbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cedfcbb6a18b76614c36210c000000000000000000000000000b20364b6074879db2bfd0e1e2cebbaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f97826d57422d1802001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f392418181818181818181818181814120c02000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374d63788c9fb5cab7a6907b66513b2a18040000000000000000000000000000000000000000000000000b1f3448596f8499aec4c6b09a85705b49351909000000000000000000000a1e334657697e94a3b5c5d5cfbeb19f97867d77737273767b838f9ba39e927d675b4938281502000e23394e63798b9fb4c1c8c3b6b2a8a69d9c9c9ea7aeb2bfcabeb2a297826d5d4b37220d00000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c00000000000000000000000000091d314556687d92a1b3c3d4dfc9b49f8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816c57422c1702001e33485e73889db3c8dde3ceb9a48e79644f392412121212121212121212120e0c060000000000000000001e33485e73889db3c8dde3ceb9a48e79644f392d2d2d2d2d2d2d2d2d2d2d2d2d29261f14060000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092035495a70859aafc5c4ae99836e5947341f0b0000000000000000000000000000000000000000000000000d22374c62778b9fb4cab9a8927d68523d2c1a0000000000000000000000031729394b6073859ba6b8c5d3cebdb1a49c938c8987888a9099a1b0b5b49e8a79635645321d09000c2136495b6b8095a5b6b8b3a49c938c888686898e98a0b1becec0b1a08f7a654f3b2a1805000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c00000000000000000000000000021527384a60728399a5b7c8d8c4af9a847274747474747474747474747474746c63523e2a1500001e33485e73889db3c8dde3ceb9a48e79644f3928282828282828282828282823211a0e00000000000000001e33485e73889db3c8dde3ceb9a48e79644f42424242424242424242424242423e3b3224140200000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c52677d92a7b9c9b49f8b77614c3722100000000000000000000000000000000000000000000000081b2e3f546a7f94aabbc9b49e8975604b36210e0000000000000000000000000b1d3144556278889ea7b6c2cecec2b6b1a8a79e9c9d9faaaeb3bfc9b9a89b8675604b36200b00061a2c3d4b6075879da8a69d92877e7773717173798397a0b1c5cebeaf9a85705948341f0b000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c00000000000000000000000000000a1c3043546176879daabbcec7b3a1957f6a5d5f5f5f5f5f5f5f5f5f5f5f5f57524535220f00001e33485e73889db3c8dde3ceb9a48e79644f3d3d3d3d3d3d3d3d3d3d3d3d3d38352c1f0e000000000000001e33485e73889db3c8dde3ceb9a48e7964575757575757575757575757575757534f42321f0c00000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21364b6075899eb3c9bbaa947f69543e2e1b08000000000000000000000000000000000000000000000e22374b5d72879cb1c8c2ac97826c5745321e0900000000000000000000000001142637485a647a899ca4b4bbc8cdcac7c5b8b3b1b2b4bbc8c7c5b8b3a0988576614c36210c00000f1e324556657b8a9391887d746962595c5c5b636e8297adc7d7cab59f8b77624c37220d000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000001325364758647a8b9fb4bfcfbfb49f8d7b6559484a4a4a4a4a4a4a4a4a4a423e3527170500001e33485e73889db3c8dde3ceb9a48e796452525252525252525252525252524e493d2c1a060000000000001e33485e73889db3c8dde3ceb9a48e7a6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69604f3b261200000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566c8197acc2c8b19c86715c4b37220b000000000000000000000000000000000000000000031629394f657a8fa4b6c9b5a48f7a644f392816030000000000000000000000000009192b3c4a5c647986969faab4bac7c5c8ccc8c7c8c8c5c5b8b3a79e928275615846331f0a0000031628384b5d65787d7c756860554d483b3d4a4e62778ca9bacdcfbcab927d68533d2813000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c00000000000000000000000000000008182a3a4b5c697e93a1b2c3cfbcab9d88776255443135353535353535352c2a2217090000001e33485e73889db3c8dde3ceb9a48e79676767676767676767676767676767635b4935210c0000000000001e33485e73889db3c8ddeed9c3ae9983828282828282828282828282828282827e69533e291400000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384f647a8fa4b5c9b6a48f7a644f3928160300000000000000000000000000000000000000000a1e3246576d8297adc2c7b19c86715c4b371b0a0000000000000000000000000000000e1e2d3e4a5b6375818c979fa9acb0b3b8c5c5b8b3b0aba79e95897e6e6157463a2917040000000a1a2e3f4b5a62686760574b4437342b333b4a5b748a9fb4c9dac9aa95806b55402b16000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000c1c2e3e4f616e8399a5b6c7c9b8a69a8473604b402f1e1f1f1f1f1f1f17150f05000000001e33485e73889db3c8ddead4bfaa957f7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d79634e38230e0000000000001e33485e73889db3c8ddf2dbc7b3a19997979797979797979797979797979797846f59442f1a04000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22364a5c71869cb1c7c2ac97826d5746321e0900000000000000000000000000000000000000000c21364b6176899eb4c9baa9947e69543e2e1b000000000000000000000000000000000010202d3d4957616c79828a92979b9ea7a1a1a79e9b969188807668604b4639291c0c000000000011212e3c484d53524b45393133373a474c5963798ea9bacdd7c2ad97826d58422d18000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000000000102032424c6176879da9bacdc4b4a295806b5e4c3c2b1909000a0a0a02000000000000001e33485e73889db3c8ddf2d7c3af9d959292929292929292929292929292927e69533e29140000000000001e33485e73889db3c8ddf2e2cfbfb3aeacacacacacacacacacacacacacacac99846f59442f1a04000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e54697e93a9bac9b49e8976614b36210e00000000000000000000000000000000000000061a2c3d53687d92a8b9c9b49f8a77614c372210000000000000000000000000000000000002101f2c39464b5b636d767c8286898a8b8b8a8885817b746b61584e4232281b0c00000000000003111e2b35383e3c3632363a474c5258616a77859bb1c7d7d7c2ad98826d58432d18000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000002141f334658647a8b9fb4becfc0b59f8d7c665a483727150200000000000000000000001e33485e73889db3c8ddf2deccbbafaaa7a7a7a7a7a7a7a7a7a7a7a7a7a7937e69533e29140000000000001e33485e73889db3c8ddf2edddcfc7c3c2c2c2c2c2c2c2c2c2c2c2c2c2c2ae99846f59442f1a04000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001021374c61778a9fb4c9b9a8927d68523c2c19060000000000000000000000000000000000000c2135495b70859bb0c6c3ae98836e5847331f0a000000000000000000000000000000000000010f1b29323d494e5761676c70737576767573706c6660554c473a311e160b0000000000000000000e1920222b3539464b535861686e777f899ba3b5c9e5d6c6ab96806b56412b16000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000000000000417293a4a5c687e93a0b2c2cfbcab9e8978625544311d1200000000000000000000001e33485e73889db3c8ddf2eadaccc3bfbcbcbcbcbcbcbcbcbcbcbcbcbca8937e69533e29140000000000001e33485e73889db3c8ddf2f7e9ddd6d3d0d0d0d0d0d0d0d0d0d0d0d0d0c4ae99846f59442f1a04000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586e8398adc3c6b09a85705b493521090000000000000000000000000000000000011527374e63788da2b4c8b7a5907b66503a2a180400000000000000000000000000000000000000000b161e2c3539464b52575b5560616160555b56514b4437332a1c1303000000000000000000000a1926313c494d5761686f777d848a949ea7b5c2d2e1cdb9a8917c67523c2712000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000b1b2d3e4e606e8298a4b6c7c9b8a79b8574604b40301e0e000000000000000000001e33485e73889db3c8ddf2f6e8dcd5d2cfcfcfcfcfcfcfcfcfcfcfcfbea8937e69533e29140000000000001e33485e73889db3c8ddf2e9d9cbc1bebbbbbbbbbbbbbbbbbbbbbbbbbbbbae99846f59442f1a04000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a50657b90a5b7c8b4a28d78634d3726140100000000000000000000000000000000081d3144556b8096abc0c9b29d8774604b35200c00000000000000000000000000000000000000000000030f1a212933363d4237444b4c4c4b4437413c3631271f170c00000000000000000000000a1a2837444b5a626c757d858b92999fa9b3b9c5d2dfcfbfb49e8976614b36210c000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c0000000000000000000000000000000000000000102031424b6175869ca9bacdc5b4a396816c5e4d3c2c1a0a0000000000000000001e33485e73889db3c8ddf2e8d8cac0bdbababababababababababababaa8937e69533e29140000000000001e33485e73889db3c8ddf2ddcbbbaea9a6a6a6a6a6a6a6a6a6a6a6a6a6a6a699846f59442f1a04000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c20354b6074879db2c9c0ab95806b5544311d08000000000000000000000000000000000b20354b6074889db3c8bcab95806a5443301c08000000000000000000000000000000000000000000000000060b171e21272d26313536363531262c26201d1509040000000000000000000000031628384555606a788189939a9faaaeb4bac7ccd6d4cbbeb2a1947f6a5746321e0a000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000002141e32465763798a9fb4becec1b09f917c665a493828160200000000000000001e33485e73889db3c8ddf2dccabaada8a4a4a4a4a4a4a4a4a4a4a4a4a4a4937e69533e29140000000000001e33485e73889db3c8ddf2d6c1ae9d9390909090909090909090909090909090836f59442f1a04000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546a8095abbcc8b39d8874604b35200c00000000000000000000000000000005182a3b51667c91a6b7cab59f8c78624d362614010000000000000000000000000000000000000000000000000000030a0c1217141d202121201d1417110b080200000000000000000000000000091e3245566073808b969ea7afb4bbc8c9cdd7d1c8c4b7b2a0988373604b39291603000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000031629394a5b687e92a0b1c2cdbdb39e8978635645321e1301000000000000001e33485e73889db3c8ddf2d5c0ad9c928f8f8f8f8f8f8f8f8f8f8f8f8f8f8f7e69533e29140000000000001e33485e73889db3c8dde8d3bea9937f7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a644f3a240f00000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364d62788b9fb4cab7a6907b66513b2a180400000000000000000000000000000b1f3447596e8399aec4c5af9a846f5a49351808000000000000000000000000000000000000000000000000000000000000000001080b0c0c0b080100000000000000000000000000000000000a1d30414b607483959fa9b3b9c5caced9d2c9c6c0b4b0a69d928275605544311b0b00000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c000000000000000000000000000000000000000000000b1b2d3d4e606d8297a4b5c6ccb9a79b8574604b41301f0f000000000000001e33485e73889db3c8dde7d2bda8927e7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a77624c37220d0000000000001e33485e73889db3c8dde3ceb9a48e7966666666666666666666666666666666645c4a36220d00000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082035485a6f849aafc5c4ae99836e5947341f0b00000000000000000000000000000d22374c62778b9fb4cab8a7927c67523c2b19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001024394d5f6e8298a1b4bac7ccd6d3cac7c2b5b1aaa29a92887d6e6057453727150000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c36210c00000000000000000000000000000000000000000000000f1f31424b6075869ca8b9cdc5b5a397816c5f4d3d2c1b0b0000000000001e33485e73889db3c8dde3ceb9a48e7965656565656565656565656565656562594834200b0000000000001e33485e73889db3c8dde3ceb9a48e79645151515151515151515151515151514f4a3e2d1b0700000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c52677c91a7b8c9b49f8b77614c37221000000000000000000000000000081b2e3f54697f94aabbc8b39e8975604b36210e00000000000000000000000000000000030d1315202020202020202020202020202020202020202020202020201e1b150c0000000000000000061a2c3d51677c91a0b2bfcdd7d3cac3b6b2aaa49c958e857d74675f4b45392819090000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee0cbb6a18b76614c362113020006080700000000000000000000000000000000000001131e32455763798a9eb4bdcec1b19f927d675b493928160300000000001e33485e73889db3c8dde3ceb9a48e79644f4f4f4f4f4f4f4f4f4f4f4f4f4f4c483b2b18050000000000001e33485e73889db3c8dde3ceb9a48e79644f3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a362d20100000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e20364b6075899eb3c8bbaa947f69543e2e1b080000000000000000000000000d22374b5d71869cb1c8c1ac96816c5645321e09000000000000000000000000000000071520272a353535353535353535353535353535353535353535353535353330291d0f000000000000000c2135495b71869cb1becfe2d2c3b6b2a59c958d868079706760564d4132281b0a000000000f24394e64798ea3b9cee0cbb6a18b76614c36210c051a30455a6f859aafc4dad4bfa9947f6a543f2a15000f24394e64798ea3b9cee3cfbaa48f7a654f41301d15191b1d1c0e0c06000000000000000000060c0e1414141414162839495b677d929fb1c1cebdb49e8a79635746321e1301000000001e33485e73889db3c8dde3ceb9a48e79644f3a3a3a3a3a3a3a3a3a3a3a3a3a37342b1d0d000000000000001e33485e73889db3c8dde3ceb9a48e79644f392626262626262626262626262624221b10020000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3245566c8196acc1c8b19c86715c4b37220b0000000000000000000000031628394f647a8fa4b6c9b5a38e79644e382816020000000000000000000000000000031525333c3f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a48443b2d1d0c0000000000000e23384e63788da4b6cadcd2c2b5a59c91877f78716a635b524b4538311e160a00000000000f24394e64798ea3b9cee0cbb6a18b76614c3621120c182b3b5b70859bb0c5dad3bea8937e69533e2914000f24394e64798ea3b9cee3d9c4af9a846f5f4d3e31272e30323123211a0f010000000000010f1a2123292929292929292c3d4d5f6c8197a3b5c6cdb9a89c8675614b4231200f000000001e33485e73889db3c8dde3ceb9a48e79644f392525252525252525252525252220180d00000000000000001e33485e73889db3c8dde3ceb9a48e79644f39241111111111111111111111110f0d0700000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384e63798ea3b5c9b6a48f7a644f3928160300000000000000000000091e3246576d8297acc2c7b09b86715c4a361a0a0000000000000000000000000000000d20334350555f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d584c3b291500000000000013283d53687d92a8c2d3dec9b5a49c877c736a635b554e4a3d363127251e130500000000000f24394e64798ea3b9cee0cbb6a18b76614c3b3023212134485972879db2c7dcd2bca7927d67523d2812000f24394e64798ea3b9cee3dcc7b3a2917d675c4b45384446484739362c1f0f00000000000f1f2c36393e3e3e3e3e3e3e3e3e414b6074859ba8b9ccc6b6a498826d604e3e2d1b0b0000001e33485e73889db3c8dde3ceb9a48e79644f392410101010101010101010100d0b050000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21364a5b71869bb0c7c2ac97826d5746321e09000000000000000000000c21364b6176899eb4c9baa9937e69533e2d1a0000000000000000000000000000000013273c50616a75757575757575757575757575757575757575757575757575736a5844301b000000000000152a3f546a7f94a9bfd4dbc6b19c86766660544e493d3936373f423d3930231304000000000f24394e64798ea3b9cee1ccb6a18c7761594d413936363f4c62778ca5b6cadfd4c3a5907b66503b2611000f24394e64798ea3b9cee3e3d0c0b39e897a68605658595b5d5c4e493d2c1a06000000061a2c3d494e5353535353535353535353566378899eb3c2d3c2b2a0937e685c4a3929170300001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde3ceb9a48e79644f39240f000000000000000000000000000000000000000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d53687e93a9bac9b49e8976614b36210e00000000000000000006192c3c52687d92a8b9c9b49f8a76614c36210f00000000000000000000000000000000152a3f556a7f8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a88735d48331e000000000000162b40556b8095aac0d5d1bca7917c67584a433635363a474c5457524d41302212000000000f24394e64798ea3b9cee3dac5b09b8477675f534e4b4b4e5d6a8095aac3d4dfcab7a58c77624d37220d000f24394e64798ea3b9cee3e7d9ccb9a79e8a7e756f6d6e707271635b4936210c0000000c2136495b6369696969696969696969696969697c91a4b6cacfbeb49f8b7a645746331e0a00001e33485e73889db3c8dde3ceb9a48e79644f3924101010101010101010101010101010100b0801000000001e33485e73889db3c8dde3ceb9a48e79644f3924101010101010101010101010101010100b0801000000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f21364c61768a9fb4c9b9a8927d68523c2c190600000000000000000c2135495b70859ab0c6c3ad98826d5846331f0a00000000000000000000000000000000152a3f556a7f949f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d88735e48331e00000000000014293e54697e93a9c7d7cfbaa5907a65504639413d4a4e5861696d675f4d40301c0c0000000f24394e64798ea3b9cee3ddc8b4a39b887c7069636161646b7b8b9fb4c9dfddc7b29d8772594834200b000f24394e64798ea3b9ceebd9c9bcb4b9a89e938984828385878679634e39230e0000000e23394e63797e7e7e7e7e7e7e7e7e7e7e7e7e7e7e869cb1c7dccdbaa99c8775614b36210c00001e33485e73889db3c8dde3ceb9a48e79644f392626262626262626262626262626262626201d14090000001e33485e73889db3c8dde3ceb9a48e79644f392626262626262626262626262626262626201d14090000001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586d8298adc3c6b09a85705b4935210900000000000000011426374d63788da2b4c8b6a5907b65503a29170400000000000000000000000000000000152a3f556a7f94aab4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b39d88735e48331e00000000000011263c51667c91a9bacdd6c1ac96816c61575756585b636c767e827d675f4d3a2a170400000f24394e64798ea3b9cee3e0d1c1b4a69d91857e78767679808b9fa9bacde2d0c0ac97826c573b2b1805000f24394e64798ea3b9cee3cfbcab9fabb9b4a79e9998999b9d95806b56402b1601000013283d53687d9293939393939393939393939393939ca4b6caded7c7b6a595806b5537271502001e33485e73889db3c8dde3ceb9a48e79644f3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b353126190900001e33485e73889db3c8dde3ceb9a48e79644f3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b353126190900001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a50657a8fa5b6c8b4a28d78634d37261401000000000000081d3144556b8095abc0c9b29d8773604a35200c0000000000000000000000000000000000152a3f556a7f94aab3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39d88735e48331e0000000000000c21364b61768a9fb4c7d8cab49f8d7f756f6c6c6e7279818a9497917c675847331f1000000f24394e64798ea3b9cee5d3c2b6b1b6b2a39b938e8b8b8e969fa9bac7d7d6c6b3a28e79644e39240f00000f24394e64798ea3b9cedfcab49f8a9fa9bab9b3afadaeb0ad97826d58422d1803000013283d53687d92a8a8a8a8a8a8a8a8a8a8a8a8a8a8b1b6c2d3e5e5d3c3b29d87725544311d08001e33485e73889db3c8dde3ceb9a48e7964505050505050505050505050505050505050504b4437261401001e33485e73889db3c8dde3ceb9a48e7964505050505050505050505050505050505050504b4437261401001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073879cb2c8c0ab95806b5544311d080000000000000b20354b6074889db3c8bcab947f6a5443301c070000000000000000000000000000000000152a3f556a7f949d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d88735e48331e0000000000000a1e3246576e8398a9bacecfbcab9f948984818183878e969ea8ac9d8876614c3e2d1b07000f24394e64798ea3b9cedec9b6a49ca4b5b5b0a8a3a0a0a3abb4bac7d7d7c8b9a89a846f5c4a36210d00000f24394e64798ea3b9ced5c0ab96808b9fb4bfc9c4c2c3c4af99846f5a442f1a05000013283d53687d92a8bdbebebebebebebebebebebebec7cad3d5d5d5d5cab6a58b75604b36200b001e33485e73889db3c8dde3ceb9a48e796565656565656565656565656565656565656565605544311d08001e33485e73889db3c8dde3ceb9a48e796565656565656565656565656565656565656565605544311d08001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546a7f94aabbc8b39d8874604b35200c000000000004182a3a51667b90a6b7cab49f8b78624d36251300000000000000000000000000000000000014293e54697e8888888888888888888888888888888888888888888888888886715c47311c000000000000031629394d63788b9fb4bcccc9bcb4a79e999796989ca5acb4b9b8a697826d5c4a36220d000f24394e64798ea3b9ced5c5b19c86949fabb7c4b8b6b6b9c0c9cdd7cfc7baaa9e8a78624d3d2d1a0700000f24394e64798ea3b9ced5c5a5907b7f94a1b3c0cfd7d8c6b09b86715b46311c00000013283d53687d92a8bdc0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c3a08b76614b36210c001e33485e73889db3c8dde8d3bda8937e7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b73604b35200b001e33485e73889db3c8dde8d3bda8937e7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b73604b35200b001e33485e73889db3c8dde2cdb8a28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364d62778b9fb4cab7a6907b66513b2a1804000000000a1f3447596e8399aec4c5af99846f594834180800000000000000000000000000000000000012273b4f616973737373737373737373737373737373737373737373737373716856432f1a000000000000000b2035495a697f949eb3b9c5ccc5b8b3aeacabadb2b6c3c9c2b6ab9f8e79644f39240f000f24394e64798ea3b9c0c0b8a78e797f8d9da6b4bac7c7cacfcac8c6bfb3a99f8c7d675a48351f0f0000000f24394e64798ea3b9c0c0b8a78d78728399a2b2bec9cdc8b29d88735d3a291704000013283d53687d92a8ababababababababababababababababababababababa08b76614b36210c001e33485e73889db3c8ddf2d5c1ad9c93909090909090909090909090909090909090908b75614b36210c001e33485e73889db3c8ddf2d5c1ad9c93909090909090909090909090909090909090908b75614b36210c001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008203448596f8499aec4c4ae99836e5947341f0b000000000c22374c61778b9fb4c9b8a6917c67513b2b19000000000000000000000000000000000000000c1f32424f545e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5c56493927130000000000000006192c3c4f616b80929ea7b3b9c5c6c8c4c1c1c3c7c4c2b5b1a49c8c806a5c4a36220d000f24394e64798ea3abababaa9e8872697c87969fa9aeb2b5bcb5b3b0aaa1998b7c675f4d3c2b19010000000f24394e64798ea3abababaa9e887460758498a0afb4bac3b49f8a745847331f0a000013283d53687d929595959595959595959595959595959595959595959595958b76614b36210c001e33485e73889db3c8ddf2ddcbbaada8a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a08b76614b36210c001e33485e73889db3c8ddf2ddcbbaada8a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a08b76614b36210c001e33485e73889db3c8dde2cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b51667c91a6b8c9b49f8b77614c372210000000071b2e3e54697f94aabbc6b39e8874604b36200d00000000000000000000000000000000000000021424323b3e484848484848484848484848484848484848484848484848484743392b1b0a00000000000000000e1e324351626b7d89969ea7acb1b3b4bbbbb4b2afaaa49c92867b6a62503e2d1b07000f24394e64798e959595959591806a5e6675808a93999d9fab9f9e9b958e8378665e4d40301e0e000000000f24394e64798e959595959591816c5760748290999fa9a3a59d8c76614c37210c00000f243a4f647a808080808080808080808080808080808080808080808080808074604b36200b001e33485e73889db3c8ddece8d8cbc1bdbababababababababababababababababab6a08b76614b36210c001e33485e73889db3c8ddece8d8cbc1bdbababababababababababababababababab6a08b76614b36210c001e33485e73889db3c8dde2cdb8a28d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20364b6074889db3bebbaa947f69543e2e1b0800000d22374b5c71869cb1c7b9a896806b5544311d08000000000000000000000000000000000000000006141f272933333333333333333333333333333333333333333333333333312f271b0d0000000000000000000014253344515f6777808991969b9e9faaaa9f9d99948e867d74655d504333201000000d22374c62778080808080807c72604a57616b767e83878a8b8a888680796e625a4c4030221200000000000d22374c62778080808080807c73604b56606d7b848a8d8e8c877f73604b35200b00000d22364a5c646b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b605645311d09001e33485e73889db3c8d7d7d7d7d7d7d3d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0cbb6a08b76614b36210c001e33485e73889db3c8d7d7d7d7d7d7d3d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0cbb6a08b76614b36210c001e33485e73889db3c8d7d7cdb8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455697e93a0afb3b19c86715c4b37220d00021628384f647a8fa4b4b1a99e8a77624c37271502000000000000000000000000000000000000000000020c12141e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1c1a130a000000000000000000000006162633414d59626b767c8186888a8b8b8a87847f79716860554b3f3325150200000b20344859626b6b6b6b6b6b67605443464b5861686e7275767573716a635b4d493c2f22120400000000000b20344859626b6b6b6b6b6a67605544454b5d656f75787977726a605544311d080000071b2d3e4a4f56565656565656565656565656565656565656565656565656564b4538271502001e33485e73889db3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b6a08b76614b36210c001e33485e73889db3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2b6a08b76614b36210c001e33485e73889db3c2c2c2c2b8a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374b607382929a9d9e9e8f7a644f3a250f00091e3245566c82979e9e9c988b7c66594734190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081623303b484d5761676c717375767675726f6a635b524b44372e21150700000005182b3b484c565656565655514a4336323a474c535955606160555b554e4a3d352c1e120400000000000005182b3b484c565656565655524b4437323f4c50566063636259544b443727150100000010202d363a40404040404040404040404040404040404040404040404040403631271a0a00001e33485e73889dacacacacacacacacacacacacacacacacacacacacacacacacacacaca08b76614b36210c001e33485e73889dacacacacacacacacacacacacacacacacacacacacacacacacacacaca08b76614b36210c001e33485e73889dacacacacacaca28d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d31445560727d858889898a816c56412c17000b21364b607588898989878279665e4c3b2a1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131d2b3439464b51575c5460616160545a554e4a3d35312719110300000000000d1d2b34374040404040403c3530251e2933373e37444b4c4b44374039362d20190e0000000000000000000d1d2b34374040404040403c3531271e2f3838454b4d4e4d483b35312719090000000002101b22242b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b201d150a0000001e33485e738897979797979797979797979797979797979797979797979797979797978b76614b36210c001e33485e738897979797979797979797979797979797979797979797979797979797978b76614b36210c001e33485e738897979797979797978d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374454606770737474746c63513e291500091e3245566073747474726d635b4c40301d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18202933363c4136434a4c4b4a43363f39362d201d150900000000000000000d1820222b2b2b2b2b2b27201c130c171f2129263135363531272b24211a0f0600000000000000000000000d1820222b2b2b2b2b2b27201d15111c23273136383937342b201d150900000000000000070d0f16161616161616161616161616161616161616161616161616160b090200000000162c41566b8082828282828282828282828282828282828282828282828282828282828174604b36200b00162c41566b8082828282828282828282828282828282828282828282828282828282828174604b36200b00162c41566b8082828282828282828277614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192736434b525a5e5f5f5f56514434220e0002162838454b5d5f5f5f5c584e4a3d30221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b171e21272c25303536363530252a24211a0f080100000000000000000000050b0d161616161616120b070000040a0c13141d2021201d15150e0c070000000000000000000000000000050b0d161616161615120b080100090a151d2023242220180d0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293d51626b6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d605645321d090014293d51626b6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d605645321d090014293d51626b6d6d6d6d6d6d6d6d6d615947341f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009182630353d4548494949413e3426160500000a1a28323648494949474339362d1f1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1217131c202121201c13150e0c070000000000000000000000000000000001010101010000000000000000000001080b0c0b08010000000000000000000000000000000000000000000101010101000000000000000002090b0e0e0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21344451565757575757575757575757575757575757575757575757575757575757574b4538281502000e21344451565757575757575757575757575757575757575757575757575757575757574b4538281502000e21344451565757575757575757574c473a2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202730333434342c29221608000000000a161e2133343434322d24211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0c0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051626343d414242424242424242424242424242424242424242424242424242424242423632281a0a0000051626343d414242424242424242424242424242424242424242424242424242424242423632281a0a0000051626343d4142424242424242424237342a1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b121b1e1f1f1f17150e0500000000000002090b1e1f1f1f1d180e0c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081621292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d150a00000000081621292c2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d201d150a00000000081621292c2d2d2d2d2d2d2d2d2d221f180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e14161818181818181818181818181818181818181818181818181818181818180b0902000000000000050e14161818181818181818181818181818181818181818181818181818181818180b0902000000000000050e14161818181818181818180c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Heavy SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Heavy SDF.asset.meta new file mode 100644 index 0000000..ffc7ebd --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Heavy SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51a1aa396f4dea44fbb24fc6076c78b8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HeavyItalic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HeavyItalic SDF.asset new file mode 100644 index 0000000..a999424 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HeavyItalic SDF.asset @@ -0,0 +1,2710 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-1361375102305407215 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-HeavyItalic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101618202020202020202013110b0200000000000000000000000000090f1120202020202020201b1812080000000000000000000000000000000000000000000000000006101619202020202020201e1c160d0000000000000000000000000000000000000000000000000000020c121420202020202020200d0b05000000000000000000000000000000000000010b1113202020202020201a0c090300000000000000080d0f1f202020202020200d0c06000000000000000000000000000000000000000000000000050b0b0b0b0b0a07000000000000000000000000000000000000000002090b1115171614100b080100000000000000000000000000000000000000000000000000000000000000000000070b0e11141516151412100c0a04000000000000000000000000000000000000000000000000000000000000000000070d0f1314110c0a03000000000000000000060c0e1314120c0a04000000000000000000050b0d1214130d0b0600000000000000000006101618202020202020201d150b080200000000000000000000000000000000000000020b11131d202020202020201b18120800000000000610161920202020202020201f0b0801000000000000000000000000020b11131c1f202020202020202012100a01000000000000000000000000000000000000000000000000000000000000000917232b2d353535353535353528261f14060000000000000000000004121d24273535353535353535302d251a0c00000000000000000000000000000000000000000000000a18232b2e353535353535353331291e1000000000000000000000000000000000000000000000000006141f26293535353535353535351f180d0000000000000000000000000000000005131e2528353535353535352f211e160b0000000002101b222534353535353535352320190e000000000000000000000000000000000000000002080b1b2020202020201c110f09000000000000000000000000000000030a161e21262a2c2c2925201d1509040000000000000000000000000000000000000000000000000000000002090b131c202326292a2b2a292725211f17130c0a0300000000000000000000000000000000000000000000000000000006101b2224282927211e170b000000000000040f1a2123282927221f180c010000000000020d1920222829282320190e030000000000000918232b2d35353535353535332b201d1509000000000000000000000000000000000006141f26293335353535353535302d251a0c0000000a18232b2e353535353535353535201c14080000000000000000000006141f26283234353535353535353527251e13050000000000000000000000000000000000000000000000000000000000061727353f434a4a4a4a4a4a4a4a3e3a31241402000000000000000000122230393c4a4a4a4a4a4a4a4a4541372a1a010000000000000000000000000000000000000000000618283640434a4a4a4a4a4a4a49453c2e1e0000000000000000000000000000000000000000000000021424323b3e4a4a4a4a4a4a4a4a4a342a1d0d0000000000000000000000000000011323313a3d4a4a4a4a4a4a4a443632281b0b00000010202e373a494a4a4a4a4a4a4a38352c1e0e00000000000000000000000000000000000009151d20303535353535353226241d12040000000000000000000000000b161e2832363b3f41413f3b3531271f180c00000000000000000000000000000000000000000000000000040a151d20253035383b3e3f403f3e3d3b37332a28211e170b090000000000000000000000000000000000000000000000010f1a212d36393e3e3c3633291b14060000000c181f2c35383d3f3c37342a1d14090000000a161e2b34373d3f3d38352b1e170b00000000061828353f434a4a4a4a4a4a4a48403631271909000000000000000000000000000000031424313b3e484a4a4a4a4a4a4a4541382a1a08000618283640434a4a4a4a4a4a4a4a4a47302618080000000000000000051424313a3e474a4a4a4a4a4a4a4a4a3d3930231301000000000000000000000000000000000000000000000000000000001023354652586060606060606060534e42311f0b0000000000000000091d30404c5160606060606060605a5548371f0f000000000000000000000000000000000000000000102336465358606060606060605e594c3c1a0a000000000000000000000000000000000000000000000c1f32424f5360606060606060605e473b2a1805000000000000000000000000000b1e31414e526060606060605f5a4b463928160300081b2e3e4b4f5e606060606060604d493c2c1906000000000000000000000000000000000919273136454a4a4a4a4a4a473b382f221306000000000000000000000d1b283238454b5155575654504b4437332a1c1401000000000000000000000000000000000000000000000b171f28323636434a4e51535555555352504c473a3d363329231c11080000000000000000000000000000000000000000000f1f2c353e4a4f5354514b463931241407000c1d2a343d494e5354524c473a31261909000a1a28323b484d5254524d483c33291b0b000000102335465358606060606060605d554b44372715020000000000000000000000000000112131424e535d5f6060606060605a55483825120010233646535860606060606060605f5b433626140100000000000000132331424e535c5f6060606060606060524d41301e0a00000000000000000000000000000000000000000000000000000001162b3f52646d757575757575757568604e3a261000000000000000000f24394c5e6675757575757575757066553d2c1a060000000000000000000000000000000000000000162b4053646e75757575757575736b593828160300000000000000000000000000000000000000000012263b4f60697575757575757575705947341f0b0000000000000000000000000011253a4e6068757575757575756f615746321e09000d22374b5c6474757575757575756f5a4935200a00000000000000000000000000000002152737444b5a60606060605f5c514c403124130300000000000000000d1d2b39464b5660666a6c6b696560554c473a311d14090000000000000000000000000000000000000003131b293338454b5254606366696a6b6a696765615858524c4639382f231c11040000000000000000000000000000000000000e1e2c3d494e5c6468696661574e423225140b1b2a3b474c5b6368696761594b4437261408182838454b5962676968625a4b4639291a0a0000162b3f53646d75757575757575726a605544311d1200000000000000000000000000091c2f404e60687275757575757575706655412d1800162b4053646e7575757575757575746d5443301c080000000000000a1a30414e606871747575757575757575675f4d39251000000000000000000000000000000000000000000000000000000003182d43586d828a8a8a8a8a8a8a8a7e68533e2d1b070000000000000011273c51667c8a8a8a8a8a8a8a8a84705b4935210a0000000000000000000000000000000000000000192e43586e828a8a8a8a8a8a8a89735645321e0900000000000002090b1012120f0b0700000000000014293e53697e8a8a8a8a8a8a8a8a77624c37220d0000000000000000000000000013283d52687d8a8a8a8a8a8a8a8375614b372715020f253a4f647a898a8a8a8a8a8a8d78624d382815020000000000000000000000000000081d314455607075757575757571665e4e42312111000000000000000c1c2b3c4857616a757b7f81817e7a746c61584e423126190900000000000000000000000000000000000b161e303a464c5660676e74787b7e7f807f7e7c7a76726e686157504c3f372e1f180c0000000000000000000000000000000005192b3c495b6370797d7e7c7668604f43321e1629394759616f787d7e7c776b605544311d1325364556606c777d7e7d786d6157463827150200182d43586d828a8a8a8a8a8a8a888073604b40301d090000000000000000000000000e23384c5e687e878a8a8a8a8a8a8a84705a45301b00192e43586e828a8a8a8a8a8a8a8a8b73604b35200b0000000000021528384d5f687e86898a8a8a8a8a8a8a8a7d67523d271200000000000000000000000000000000000000000000000000000005192b3c5b71869b9f9f9f9f9f9f9b86715c4a36220b00000000000000152a3f546a7f949f9f9f9f9f9fa28e79634e3928160300000000000000000000000000000000000000162b41566b80969f9f9f9f9fa78b76604b36210b00000000000a151d2025272724201c13080000000011263c51667b919f9f9f9f9f9f8f79644f3a240f00000000000000000000000001162c41566b81969f9f9f9faa9f95806a5544311d08182d42586d8297a79f9f9f9fab96806b5645321d0900000000000000000000000000000b20364b6075848a8a8a8a8a8a867c68604e3f2f1e0e00000000000417293a485a6275808990949696949088817768604b44372614010000000000000000000000000000000c1b2932414d58616a757c83888d90939495949392908c87837d766e655d4f4b3f332a1c110400000000000000000000000000000b2035485a6379858e939391897e69614f3c2b1e3246576177838d9294918a8073604b3f2f1c3043546074818b9294928c8275615645311d09000e23394e63798c9f9f9f9fab9f9d95836e5e4c38240f00000000000000000000000010263b50657b909d9fab9f9f9f9f95806b55402b1600162b41566b80969f9f9f9f9f9fa98c77624d37220d0000000000091d324556677d929c9fa89f9f9f9f9f9c8673604b35200b0000000000000000000000000000000000000000000000000000000b2035485a74899eb4b5b5b5b5b5a38e79644f39291603000000000003182d42586d8297adb5b5b5b5c0ab96816c5745321e090000000000000000000000000000000000000013293e53687e93a8b5b5b5c5a38d78634e38230e000000010f1a2731363a3c3c3a353025180f0100000e24394e63798ea3c5b5b5b5a7917c67523c2712000000000000000000000000031729395a6f8499afb5b5b5bbb39e8874604b36200e192b3c5b71869bb0c5b5b5b5b39e8875604b36200f0000000000000000000000000000081d3144556176879ca79faa9f9c8d7e685d4b3c2c1c0c000000000a1f334758627886959ea8aaacaba9a79e96897e6c605544311d1400000000000000000000000000000c1d2a39464b5f67767f8991989ea7a6a8aaaaaaa8a7a5a59d98928a837b70655d4c473a2f2215000000000000000000000000000417293a4d6278889ba3a8a9a79e937f695a483521364b61758699a1a8a9a99f95816d5d4b3720354a607283979faaa9ab9f988474604b36200b000c2135495b6e8398aebfb5bcb5b2a1917c66513d2d1a070000000000000000000002162838586d8298adb4bcb5b5bcab907b66503b26110013293e53687e93a8b5b5b5b5b5a48f7a644f3a250f00000000021628384b6074889db1b4bab5b5b5b6a4927d675443301c080000000000000000000000000000000000000000000000000000000d22384d62778da8b9cdcacad2c1ac97826c5746321e0a000000000005182a3b5b70859bb0c5cacacac9b39e8975604b3621100000000000000000000000000000000000000011263b51667b90a6bbcacabaa5907b65503b26100000000f202d38454b5052514f4a43362d200f00000c21364c61768ba7b9cccabea9947f69543f2a140000000000000000000000000a1e33465772889db2c7cad9cbb8a6917c67513c2c192034485a74899eb4c9cacaccb8a7927d67523d2d1a07000000000000000000000000000215273747586379899eaabbb4ab9f8c7b655b493a2919090000071a2d3d4c6176879ca4b4b9c6bbb6c5b8b3a79e938173604b42311d0d0000000000000000000000000c1c2a3b4757616e7d88959ea7aeb3b8c5bebfc0bfbebcc3b6b2ada99f9890857a6e61584c40331c130800000000000000000000000a1f3346586e8398a6b5c1c5b9b39f8b78624d382839556b8095a4b3bfc7bab49f907b65503b273d52677d92a1b4bbc8bcb5a2937e69543e291400061a2c3d4e64798ea1b3c7cfcabfaf9a846f5b4a36210c00000000000000000000091e32455671869cb1c6cfd9cab49f8b76614c36210c0011263b51667b90a6bbcacacabca7927c67523d271200000000091e324556697e93a6b7c9cdd7d2c2b19c8673604b3626140100000000000000000000000000000000000000000000000000000011263b50667b90a5c6d6e9dfdec9b49e8976614b36211000000000000b1f34485974899eb3c9dedfe0ccb9a7927d68533e2d1b070000000000000000000000000000000000000e23394e63788ea3c5d5d2bda8927d68533d2813000008182d3e4a56606567676460544a3e2d1d0d000a1f33465874899eb3c9d6c1ac97816c57422c170200000000000000000000000c21364b61768ba5b7cbdfe7d5c4af9a846f5a49352022384d62778da8b9cde1e7d5c5b09a85705b4a36210b000000000000000000000000000009192a3a495b667c8c9fb4bdbbaa9e897963584637271501000c21364a5b6e8298a5b6c2b7b2a6a1a3aab4b9b39f97816d604e3c2b19050000000000000000000009192a3a4759617582929ea7b3b8c5c8ccd5d3d4d4d2d2d1d4cac7c7bab4aea29a8f8376665e504330251808000000000000000000000c21364c61768a9fb4c5d1d6ccbaa9947f69543f32455772889db2c2d0d7cdbdad98826d58432f455a6f849aafbfced9cfc0b19b86715c46311c00000f22364a5c6f8499afc0d1dfc8b4a28e79634e3a2a17040000000000000000000b21364b60758a9fb4cadfdbc6b19b86715846331f0a000e24394e63798ea3c5d5e8d4bfa9947f6a543f2a15000000021628384b6075889db2c4d4e1dec9b5a4917c6754433018080000000000000000000000000000000000000000000000000000000014293f54697e94a9bed3e9f5e1ccb9a8937d68533e2d1b07000000000d22374c62778ca7b9cce0f5e8d6c5b09b85705c4a36220b0000000000000000000000000000000000000c21364b61768ba7b8ccd5bfaa95806a55402b1500001325364a5c64747a7c7c7973645c4a3b2b18050417293a5c71869cb1c6d9c4ae99846f59442f1a0000000000000000000000000f243a4f647a8fa4c3d4e6e2dfcab59f8c78634d3827263b50657b90a5c6d6e9e2dfc8b4a28e79634e3929170300000000000000000000000000000c1c2c3d4c5e697e939fb1c0b8a79c8676615544311d14030e24394e63798ea0b2c3b7a59d908c8e959faabbb19f937e685a4834200d00000000000000000001152737475861778698a0b3b8c5ccd5ded2c9c6c1bfbdbdbec1c6cacfcdc9c0b4b0a199887c6a614a43362513000000000000000000000f24394f64798eaabbcee3e8d8c7ad97826d5842364b60768ba5b7cbe3eadbc6b19b86715c4633485d72889db2c7ddebdec9b49f89745f4a341f0000071b2d3e4f657a8fa2b4c8dcd1c0ac97826d5847331f090000000000000000000f243a4f64798faabbcee2d6c1ac96816c573a291704000c21364b61768ba7b8cce0d7c1ac97826c57422d17020000091e324556697e93a6b7cbe2e5d2c2b19c8673604b3626140000000000000000000000000000000000000000000000000000000002182d42576d8297acc2d7ecfce8d6c6b09b85715c4a36220b0000000010253a50657a8fa5c5d6e8fbf3ddc9b5a38e79644f3a2917040000000000000000000000000000000000091e32465773889eb3c8d7c2ad97826d58422d1800071c304354647a888f91918f867a64594834201100192f44596e8499aec3d9c6b19c87715c3a2a1704000000000000000000000013283d53687d92a8bdd2d7cdc9cdbcab96806b564531293e54697e93a9bed3d8cec9cec0ac97816c5746331e0a0000000000000000000000000000000f1f2f404f616c8197a2b4c3b6a49a8473604b42312111182a3b576c8297acbebcab9d877c7779808c9fb4beb49f8b78624d3c2b19050000000000000000081d3144556176869ca4b2beccd5dacfcac2b5b1aca9a7a7a9acb0b5bcc9cbd1c8bfb2a69d8d7f6c605443301c150400000000000000000e24394e63798ea7b9cce0e2d4c4ac97816c5742364b60758b9fb5cadfe6d7c7b09b85705b4632475d72879cb2c9dae5dec9b39e89745e49341f0000001022374b5d70849aafc1d1dec9b49f8a77614c37271512121212121212121213283e53687d93a8c8d8e6d4c3a7917c67523c271200000a1e33465773899eb3c8ded9c4af99846f5a442f1a0000031628384b6075889db3c4d4e7dec9b5a4917c6754433018080000000000000000000000000000000000000000000000000000000005182a3b5b70859bb0c5daf0fff4ddc9b5a38e79644e3928160300000013283e53687d93a8bdd2e8fff8e4d2c1ac97826d5846331f0a0000000000000000000000000000000000031628395b71869bb0c6dac4af9a856f5a362513000b20354a6072869ca6a7a6a49c8877624d3f2e1909172c41576c8196acc1d6c9b49e89745847331f0a0000000000000000000001162c41566b8196abc0d7c7bab4bac7b39e8875604b362c42576c8197acc1d8c8bbb4bbc8b49e8976614b36211000000000000000000000000000000001112232424b6073849aa5b6c2b3a296816c604e3f2f1f1f34475972879db2c7b59f8d796661636b7d91a1b3baa997826c5a4834200b00000000000000071b2d3e4b6073849aa4b5c2cfe0d4c9bcb5aca49c9694929293979b9fabb3b7c4cfcfc4b7ab9f948072604a4332221200000000000000000b20364b6073899eb3c0cccec6b7a6927d68523d31445571869bb0becad1c8baa996816b56412e43586d8298abbcc9d2cabcaf99846f5a442f1a000000081b2e3f50657b90a3b5c9ddcdbaa9947f6a55443127272727272727272727272536576c8197acc1d6dfcab7a58c77624d37220d0000031729395c71869bb1c6dbdcc7b19c87725c3b2a180500091e324556697e93a6b7cbe2e5d2c2b19c8673604a36261400000000000000000000000000000000000000000000000000000000000b1f34485973899eb3c8def3f8f2e4d2c1ac97816c5746321e09000001172c41566c8196abc1d6ebf4f3efdec9b49f8a76614c362111000000000000000000000000000000000000192e43596e8398aec3d8c7b29c87725443301c071527374f657a8fa4b5c4c2b6a698836e5d4b372715142a3f54697f94a9bed4cdb9a88c77614c37210c00000000000000000000031729395a6f8499afc4cdbaa99fa9bab8a6917c67523c2c3a5a70859aafc5c9bbaa9faabbb9a8937e68533f2e1b0800000000000000000000000000000004141d3144556176879ca7b9c0b09f937e685d4b3d2c22374c61778ca5b6c5b09b86705b4c4e5f6e8399aec7b49f8b78624d38220d000000000000000d22364a5c6b8095a2b4c2d2e0d4c4b7ab9f978d86817f7d7d7e81868c949da6b4bcc9d5c9bcb59e96816d614f402f1d0d00000000000000081d3144556b8095a2b3b8bbb4a89d8875604b36273752677d929fb2b7c1b4aa9f8b78624d3824394f647a8d9fb1b5c2b6b19e907c66503b2611000000001023384c5d70859bb0c2d2d7c7b29d8774604b3c3c3c3c3c3c3c3c3c3c3c3c3c435470859bb0c5dadcc7b29d8772594834200b000000192e44596e8399aec3d8dec9b49f89745947341f0b031628384b6075889db3c4d4e7dec9b5a4917c67544330180800000000000000000000000000000000000000000000000000000000000d22374c62778ca7b8cce0f0e5dedbdec9b39e8975614b36210f0000021628385a6f8499afc4d9e1dedde0e1cdbaa8937e69533f2e1c080000000000000000000000000000000001162c41566b8196abc0d6c9b49f8a75604a35200b1d3144556c8197acc2d2d3c4b2a0907b655544311d12273c51677c91a6bcd1d6c6a48e79644f39240f000000000000000000000a1e33465772889db2c7c9b49f8a9fb4c5af9a846f5b4935465873889db3c8bcab9f8a9fb4c6b19c86715d4b37220c000000000000000000000000000000000215273747586379899eaabbbdb49f8c7b655b493a29394e63798ea3c3c2ad97826d583d4051667b91abbcbbaa947f69543f2a14000000000000081c2f3f4f647a8c9fb4c0d1e0d4c4b7a69d8d8278716c6a6868696c71777f88959fabb9c5d6cfbdb09f947f695e4c3b2b1805000000000000021527374b607484959ea7aa9f998a7b6557453225394d5f6d81939da5a3a39b8c7d675a493522364a5c697f919ca4a3a49c91806b5e4c38230f00000000091c2f3f51667c91a4b5c9decbb7a5917c675252525252525252525252525252526074899eb4c9ded7c2ad98826d583b2b1805000001172c41566c8196abc1d6e1cdbaa98c77624c37220d091e324556697e94a6b7cbe2e5d2c1b19c8673604a36251300000000000000000000000000000000000000000000000000000000000010253b50657a90a5c5d6e8dfd2c9c6c9ccb9a8927d68533e2d1a0700091e32455672879db2c7d7cdc9c8ccd5d7c6b19c86715d4b37230c000000000000000000000000000000000014293e53697e93a8bed3cebaa98c77624c37220d20354b6074889eb3c8dde2cfbeb19c8673604b3b2a18243a4f64798fa4c7d7d1bba6917c66513c2711000000000000000000000c21364c61768ba5b7cbbcab988298adc2b59f8c78634d384c61768ba6b7cab49f8c8398aec8b5a48f7a644f3a2a18040000000000000000000000000000000009192a3a495b667c8c9fb4bdbbaa9e8979635847373a50657a8fa5bac1ac96816c5741364b60768b9fb4c8af9a846f5a3a2a170400000000000e23384b5d70849aaabbceded8c8b7a69d887b6d635b57545252545759626a75808d9ea7b8c5d6cdbdb49f8d7c66594834201200000000000000091d314556607480888d8e8b8479655d4b39281e304152636d7e878d8e8c857b675f4d3c2b1b2d3e4f61697c868c8e8d867d6b6251402f1c0900000000001120354a6073869cb1c3d3d4c3b09a857067676767676767676767676767676767788da8b9cde1d5c5a8937d68533e28130000000014293f54697e94a9bed3e9d7c7a48f79644f3a240f1628394b6075889db3c4d5e7dec9b5a3917c66544330180800000000000000000000000000000000000000000000000000000000000014293e53697e93a8bed3e5d2c1b5b1b5c1c6b09b85705c4a36210a000b21364b60768a9fb4cac6bab4b3b8c5d5c9b6a48f7a65503b2a18040000000000000000000000000000000011263c51667b91a6bbd0d8c7a48f79644f3a2416283951667b90a7b8cce0eddec9b5a4937e695947341f22374c62778ca9bacdd3bea9947e69543f2914000000000000000000000f253a4f647a8fa4c3cab59f8c798fa4b5bcab96806b56454f647a8fa4c4c8b29d887d92aabbc2ad98826d5847331f0800000000000000000000000000000000000c1c2c3d4c5e697e939fb1c0b8a79c8676615544394f64798ea4c9c1ac97826c574232455772879db2c7b39e89745847331f0a0000000005182b3b50657b90a2b4c8d8e2cebbaa9d8879655d4e493d3f3d3d3e3b474c57616b7b899ea7b8c8d8cfbcab9e8977624c402f1808000000000000021527384556606a747879766f635b4b3f2e1b132335455260687278797770655d4d41301e102032434f5e667177797772675f5144332211000000000000071c304354677c91a4b6caddc8b4a2937e7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c8096abc6d6e0ccb8a78e79634e39230e0000000011273c51667c91a6bbd1e6d1bca7917c67523c27121e324557697f94a6b8cbe2e4d2c1b19b8673604a36251300000000000000000000000000000000000000000000000000000000000002172c42576c8197acc1d6dec9b5a39ba3b5c9b5a38e79644e392816030e24394e63798eabbccdbaa89f9ea7b8ccd3c2ad98836e5947341f08000000000000000000000000000000000e24394e63798ea3c5d6d1bca6917c67513c271e3245576d8398adc5d5e6dedcd2c2b39e8977624c3e2e1f34475974899fb4c9d6c1ab96816c56412c170100000000000000000013283d53687d92a8bdc9b49e8974869cb1c7b39e8875604b52687d92a7bdc5b09b85768b9fb4c9b49f8a77614c3625130000000000000000000000000000000000000f1f2f404f606c8197a2b4c3b6a49a8473604b424d62778dabbcc2ad98826d584328395b70859ab0c5b9a88c76614c37210c000000000b203448596e8399aec0d1e6d6c5b49f8c7a645b4b3f352c2a2828292a3439464b5d657a899eaabbced9c9b9a798836e5e4c362513000000000000000a1a2738454b5460636461584e493d2e211005172735424e535a626461594f4b3f30231302142532404c51596264625a524d4133261604000000000000001325364b6073879cb2c3d4d1c0ae9c9391919191919191919191919191919191969eb0c4e4dec8b39e8874604a35200b000000000f24394f64798ea4c6d7e9d4bea9947f69543f2a1628394b6075889db3c4d5e7ddc9b5a3917c6654433018080000000000000000000000000000000000000000000000000000000000000417293a5a6f859aafc4dadbc6b19b869bb1c2c1ac97816c5745321e0912273c52677c91a7c9c9b49f8a889eb3c8ddc9b49f8a77614c362614010000000000000000000000000000000c21364b61768ba7b8ccd4bea9947f69543f2a21364b6075899eb4c9ded3cac7caccb9a897826d5c4b36262a3b5c72879cb1c7d9c3ae99846e59442f1900000000000000000001162c41566b8196abc0c8b39d88737e93a9bab8a7917c6752566b8096abc0c2ad98826f849aafc8baa9947f695443301c07000000000000000000000000000000000001112232424b6073849aa5b6c2b3a297816c604e4b60768b9fb5c5af9a85705a3d2d445a6f8499afc4c6a28d78634d38230e000000000d22374c62778b9fb4cadfe0ccb9a796806b5c4a3c2e211a15131314181f28323f4b5c657b8c9fb4c2d3d6c5b2a0907b665443301c07000000000000000a1a273136434b4e4e4c463a352c1f100300091724313b3c484d4e4c473b372e211305000714222f383b484d4e4d483c39302316080000000000000000081c304354687d92a5b7cadfcbbaaea8a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7abb0bccddfd9c3ae99846e5443301c07000000000c21374c61778ca8b9cde1d6c1ac97816c57422c1e324557697f94a6b8cbe2e4d2c1b09b85715e4c362513000000000000000000000000000000000000000000000000000000000000000a1f33475873889db3c8ddd2bda8937d93a4b5c9b39e8975604b36210f152a40556a7f95aabfc7b29c878297adc6d6cebaa9947f6a5443301c080000000000000000000000000000000a1e33465773899eb3c8d6c1ac96816c57412c2a3a52677c92a8b9cdd3c3b6b2b6c3c6b59f8d7a645443302f455a6f849aafc4d9c6b19b86715c3a2917040000000000000000031729395a6f8499afc4c7b29c8772768a9fb4c5af9a846f5b596e8499aec3bfaa95806a7d92aabbc7b29d8773604a35200d00000000000000000000000000000000000003141d3144556176879ca7b9c0b19f937e685d4c5671869bb1c6b39d88735b4a3637596f8499aec4c7a28d78634d38230e0000000013293e53687e93aabbcee2dec9b39e8975604b3e2d1e100600000000050b161e2f3e4b5d6a8095a4b6cadecfbeb19c8673604a35200f00000000000000000a151d2630353839363329211a0f0100000006141f262b35383937342a231c110300000004121d242b34373938342b251e1305000000000000000000011426364b6074879db2c4d5d8cbc1bebcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcc0c4cddae9d7c7a9947f695436251300000000000a1f33475874899eb4c9ded9c4ae99846f59442f28394b6075889eb3c4d5e7ddc9b5a3917c665140301808000000000000000000000000000000000000000000000000000000000000000c21374c61768ca6b8cbe0dac9a38e79869cb1c7b9a8927d68533d2d1a132536586d8398adc2c5b09a857c91a8b9cdd8c7b29d8773604b35200d000000000000000000000000000000031729395c71869bb1c6d9c3ae99846e59442f3347586f8499aec6d3c3b6a49ca4b6cabcab9b8573604b3a2a42576c8297acc1d7c9b39e89745846331f0a00000000000000000a1e33465773889db2c8c6b19b86716d8298adc2b4a28d78635672879cb2c7bca7927d67768a9fb4c9b6a5907b66503c2b19050000000000000000000000000000000000000215273747586379899eaabbbdb49f8c7b655b566b8196abc1b8a68e79634e3e445570859ab0c5baa98c76614c37210c00000006192b3c596f8499aec8d9e8d6c6ac96816c574532201000000000000000000311202f3f4b6074869cb1c2d3dec9b6a4907b66513d2d1a0700000000000000000208141c202324211f170c06000000000000020b0e19202324221f180c0800000000000000090d182022242220190d0a010000000000000000000000081d314455697e93a6b8cbe0ddd6d3cdc4c0bdbdbdbdbdbdbdbdbdbdbdbdc5c9d1dfeae1cdbaa98f7a644f3a250f000000000004172a3a5c71879cb1c6dcdcc6b19c87715c3a2a324657697f94a6b8cbe2e4d2c1b09b85715e4c382212000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c4d5e3cfbcab8c777e94a9bac6b09b85705b4a36211c30435471869bb1c6c2ad988274899eb4c9decab6a5907b66503c2b1905000000000000000000000000000000192e44596e8399aec3d8c6b19b86715c3928374c61768a9fb4c9cab6a59c879cb2c1c9b5a3937e685847333f556a7f94aabfd4ccb9a78b76614c36210c00000000000000000c21364c61768ba6b7cbc4af9a846f657a8fa4b6c0ab96806b60758a9fb4cac5a48f7a646f8499aec7c3ae99836e5a483420090000000000000000000000000000000000000009192a3a495b667c8c9fb4bdbbaa9e89796358657b90a3b5c4ac96816c5c4d4c6074899eb3c9b49f8a75604b35200b0000000b2035495a73889eb3c8dee1ccb9a88e79644f3928160200000000000000000001111d314455667c91a4b6caded3c2af9a846f5b4a36210c0000000000000000000001080b0e0f0c0a040000000000000000000000060b0d0f0c0b040000000000000000000000050b0d0f0d0b050000000000000000000000000000021527374b6075889db3c5d5e8e0cdbcb0aba8a8a8a8a8a8a8a8a8a8a8a8b0b5c1d1e4dec9b49f8975604b36200b0000000000001a2f445a6f8499afc4d9dec9b49e8974584733394b6175889eb3c5d5e7ddc9b5a3907b6651402f1d04000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdd2dfcab59f8a74778a9fb4c9b4a38e79634e392820354a6074899eb4c9bfaa957f6e8398adc5d5d4c3ae99836e5a48342009000000000000000000000000000001172c41566c8196abc1d6c8b39e89735746323b53687e93aabbcec7b29c877b91a3b5c9c1b39e8976614c3e3d52677d92a7bcd2d6c5a38e79644e39240f00000000000000000f253a4f647a8fa4c4d4c2ad98826d5d72869cb1c8b39e887563798eaabbccb9a78c7761677d92a9bacab49f8b78624d37271502000000000000000000000000000000000000000c1c2c3d4c5e697e939fb1c0b9a79c8676615d71869bb1bfb49f8b7b696261687d91a7b9c7af9a85705443301c080000000d23384d62788da7b8cce0dec9b49e8974604b35200b0000000000000000000000011527374a6073879cb1c9dadcc8b4a28e79634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556697f94a7b8cce0d8c4b09e969292929292929292929292929ba3b5c9dddac5af9a85705544311d08000000000002172c42576c8197acc1d6e1cdb9a88c77614c3746576a7f94a6b8cbe3e4d1c1b09b85705e4c382212000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6ddc8b39e88736e8398aec3c1ac96816c57453222384d62778da8b9cdc9a7927c677c91a6b8cbdfcab49f8b78624d37271502000000000000000000000000000014293e54697e93a9bed3ccb8a78b76614b36485970859aafc8d6c6ac978170859bb0beccb8a797816c5c4a364f657a8fa4c8d8d0bba6917b66513c2611000000000000000013283d53687d92a8bdd2c0ab96816b56697f94aabbb8a7927c677c91a6c8c9b39e89745861768a9fb4c9bbaa95806b5544311d0800000000000000000000000000000000000000000f1f2f404f606c8197a2b4c3b6a49a847360677c91a1b3baa99e8a7f78777d8a9eb4c5baa9947f6a543626140100000010263b50657b90a5c5d5e8dac5af9a85705443301c08000000000000000000000000091c304354697e94abbccfe3d1c0aa957f6a553c2b190500000000061016192020202020202020200d0b05000000000000000000000000000913191b2020202020202020200b080100000000000000000000000000000000000000021628384b6176899eb3c6d6d6c0ab96807d7d7d7d7d7d7d7d7d7d7d7d859bb0c5dbd9c9aa95806b5537271502000000000000152a3f546a7f94a9bfd4e9d6c6a48e79644f444b6175889eb3c5d5e7ddc8b4a3907b6650402f1d040000000000000000000000000000000000000000000000000000000000000000031629395a6f8499afc4d9dac5b09b8570657b90a5b7c9b39e8975604b36263b50657b90a5c6cfbcab8e796474889eb3c8ddcebbaa95806b5544311d08000000000000000000000000000011273c51667c91a6bbd1d5c5a38e78634e394d62778c9fb5caccb9a8907b667a8fa0b2c6c5b49f8c7a6454434d62778daabbced3bea9937e69543e29140000000000000001162c41566b8196abc0d4bea9947f695461778b9fb4c5af9a85707f94aabfc5b09b86705b576e8399aec6c8b39d8874604b36200f000000000000000000000000000000000000000001112232424b6073849aa5b6c3b4a297816c606e8399a6b6b9a89e948d8c929ea8b9c1b49f8a77614c37220c0000000013283d53687d92a8bdd2e7d6c1ac96816c5736261401000000000000000000000000001325364d62778c9fb5cadfdbc6b09b86715a4835200b0000000a18232b2e353535353535353535351f180d00000000000000000000000c1a262e31353535353535353535331d1409000000000000000000000000000000000000000a1e3246576a8095a8b9ccd7c2ad97826d6868686868686868686871869bb1c6dbcfbcab907b66503b26110000000000000012273c52677c91a7bcd1e6d1bca6917c675c55606a7f95a7b8cce3e4d1c1b09b85705e4c3822120000000000000000000000000000000000000000000000000000000000000000000a1e32465772889db2c7ddd8c2ad98836d6073879db2c8b9a7927d68523d2d3e53697e93a8becab59f8b76616c8196abc1d2d9c8b39d8874604b36200e00000000000000000000000000000f24394e64798ea3c6d6d0bba5907b66503d54697f94abbccfc9b39e8975606e8398a8b9cdbcab9b8572604a4b60758a9fb4cad6c0ab96816b56412c1601000000000000031729395a6f8499afc4d2bca7927d6752596e8398aec3b4a28d798298adc2c2ad98836d5852677c91a8bacbb7a6917c67513d2c1a06000000000000000000000000000000000000000209141d3144556176879ca7b9c0b19f937e696176879ca5b3b9b4a9a2a1a8b4b9c1b4a396806b5947341f0a00000000142a3f54697f94a9bed4e9d5bfaa95806a55402b150000000000000000000000000000082034485971869bb0c6dbddc9b5a38d78624d38220d00000618283640434a4a4a4a4a4a4a4a4a4a342a1d0d000000000000000000091a2b3842464a4a4a4a4a4a4a4a4a4831261909000000000000000000000000000000000000031629394c6176899eb4c7d7c9b49f8a7761535353535353535360758a9fb4c9dfcab49f8b76614c36210c000000000000000f253a4f647a8fa4c7d8ead3bea9947f717172757d8b9fb4c5d5e7ddc8b4a3907b6650402f1c040000000000000000000000000000000000000000000000000000000000000000000c21364b61768b9fb5cadfd5bfaa95806a546a7f94aabbc5b09b85705b4a3642576c8197acc1c8b29d88735763798ea3b5c9ddcbb7a6917c67513d2c1a06000000000000000000000000000c21374c61768ca8b9ccd2bda8937d6853495b71869bb1c9d5c4ad97826d5662788a9eb4c2c9b4a3927d6858465572889db2c7d8c3ae99836e59442e19000000000000000a1e33465773889db2c8d0baa5907b655050667b90a5b7c0ab9680849aafc4bfaa95806a554b61768a9fb4c9c4af9a846f5b4935210a0000000000000000000000000000000001080b151d2022273747586379899eaabbbdb49f8c7c6562788799a1b0b5bcb7b6bdc5b8b3a39b8574604b3a2a180400000000152a40556a7f95aabfd4e9d3bea9947e69543f2914000000000000000000000000000005182b3b566b8196abc0d6e4d2c1a7917c67523c271200001023364653586060606060606060605e473b2a1805000000000000000013263849555b60606060606060605f5c44372614010000000000000000000000000000000000000b1f3347586b8096a9bacdcdbaa9947f6a55443d3d3d3d3d4e63798ea9bacddbc6b19b86715746331e0a000000000000000d22374d62778ca9bacee2ddc8b39e8886878789929fa9bacde3e0d0bfb09b85705e4c382212000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fabbccfe3d2bda7927d685262778b9fb4cab4a38e79634e38395a6f859aafc4c4af9a846f5a5b71869bb0c7d8d4c4af9a846f5b4935210a000000000000000000000000000a1f33475874899eb3c9d5c0aa95806b554e63798ea3b5c9cbb8a6907b6550596a7f94a4b6cac1b39e8876614c5a70859aafc5dac6b09b86715b392816030000000000000c21364c61768ba6b7cbd9c9a38e79644e4b6074879db2c9b29d88879cb2c7bca7927d675246576e8398adc6c8b4a28d79634e39281603000000000000000000000000000008141c202731363839373a495b657c8c9fb4bdbbaa9e897963627783909b9fabaaacacaaa79e948576615645311c0c0000000000152a40556a7f95aabfd4e8d2bda8937d68533e281300000000000000000000000000000012273c52677c91a7bcd1e6d5c0ab95806b56402b160100162b4053646e757575757575757575705947341f0b0000000000000004192e425567707575757575757575756e5544311d080000000000000000000000000000000000000417293a4c62778a9fb4c8d7c7b29d8774604b352828283d52677d92a7c7d7d6c1ac96816c5739291703000000000000000b20354a60758a9fb4c9dfe0cbb8a69e9c9c9c9fa8b4bac7d7dbcdc2b3a1907b6550402f1c040000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7c9dae9d7c6a48f7a654f596e8499aec4c1ac96816c5645465773889db2c8c1ac96816c5753697e93a9bacedfcab59f8c78634e382816020000000000000000000000000417293a5c71869cb1c6d7c2ad98826d58556b8095aac1d2c8b39d8874604b4b6074869cb1bfcbb8a696816c5b586d8298adc2d7c8b39e88735746321e090000000000000f253a4f647a8fa4c4d4cfbcab8c77624c43546a7f95abbcb7a69d9ca5b6cac5a48f7a644f3951667c91a8b9ccc0ab96816c5745321e09000000000000000000000000000e1826303538454b4d4e4c4a434c5e697e939fb1c0b9a79c877661616f7b858b929597979590897f7461584738271500000000000014293e54697e93a9bed3e8d3bea8937e69533e29140000000000000000000000000000000e23394e63788ea3c5d6e8d9c4af99846f5a442f1a0000192e43586e828a8a8a8a8a8a8a8a8a77624c37220d00000000000000061b31465b70858a8a8a8a8a8a8a8a8c73604b35200b000000000000000000000000000000000000000c1f3447596c8196aabbcecbb7a6917c67523e2d1b2c41566b8196abc0d6d3c3a7917c67523c27120000000000000000071c30435472879cb2c7dce7d5c5b8b3b1b1b2b4bac6cdd7e5cdbdb0a499836f5d4c3822110000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc0d5e1cdbaa88c77624c51667b91a6b7c9b39e8975604b4b61768ba6b7cbbea8937e69534c61768a9fb4c9dfcfbcab96816b5645321e0900000000000000000000000000192f44596e8499aec3d9c5af9a85705a5c72879db2c7d4c3ac96816c55444556657b90a1b2c6c4b49f8c7963556a8095aabfd5ccb8a78b76614b36210c00000000000013283d53687d92a8bdd2cab49f8a75604b364d62788b9fb4c4b7b2b2b6c3ccb8a78c76614c374b6075899eb4c9c9b39e8975604b3621100000000000000000000000010f1e2c36434b5256606263626054524b606c8197a2b4c3b6a59a8473605e6670777d808282807b75696056473a2a1a0a00000000000013283d52687d92a7bdd2e7d4bea9947f69543f2a140000000000000000000000000000000b21364b60768ba7b9cce0ddc7b29d88725d3727150200162b41566b80969f9f9f9f9f9f9f8f79644f3a240f0000000000000003192e43586e83989f9f9f9f9f9faa8d77624d38220d0000000000000000000000000000000000000005182a3b4d62788b9fb4c8d4c4b09a85705c4a36222b3c5a6f859aafc4dacab6a58c77624d37220d0000000000000000001325365a6f859aafc4daefe3d5cbc8c6c6c7c9cdd7e2ead8c4b09e968676614c3f2f1c030000000000000000000000000000000000000000000000000000000000000000000002162838596e8499aec3d9dec9b49f897459484b6074889db2c9b9a7927d67524f64798ea4c4d4c6a5907b655047586e8398aec4d4dac9b39e8975604b36210f00000000000000000000000002172c41576c8196acc1d6c7b29d877254647a8fa5b6cacab6a58f7a644f37384c5e6e8399a8bacdbbaa9a84705f687d92a8bdd2d5c5a38e78634e39230e000000000001162c41566b8196abc0d6c8b39e8873554434485a6f8499afc4cbc8c7cad3c8b39e897358473345566d8298adc5ccb9a7927d68533e2d1b07000000000000000000000f1f2c3c495460676f75777977746f6860566073849aa4b6c3b4a297816c60505962686b6d6c6a6660564b45382a1c0c0000000000000011273c51667c91a6c8d9ebd6c0ab96816b56412c16000000000000000000000000000000091e32455674899eb3c9dedec9b49f89745544311d080013293e53687e93a8b5b5b5b5b5a7917c67523c27120000000000000001162b41566b8096abb5b5b5b5b5a58f7a65503a251000000000000000000000000000000000000000000d2034485a6d8297aabbcec8b4a28e79644f3a2a34485a73889eb3c8dcc7b29d8772594834200b000000000000000000182d42576d8297acc2d7ececdccfc6c2bdbdc0c8cbd4e2d6c1ab9681766158473321110000000000000000000000000000000000000000000000000000000000000000000000091e32455672879cb2c7dcdbc6b19c86715c3b44556b8095abbcc5b09b85705b52677d92a7bccdb9a88d77624d3a51667b90a6b7cbdfccb8a7927d68523e2d1a0700000000000000000000000014293f54697e94a9bed3c9b49f8a75606c8196acc3d3c7b29d87725c4b372f404d62788a9fb4c3c8b4a2917d67657b90a5c9dad0bba6907b66513b261100000000000417293a5a6f849aafc4d9c6b19c86715c372b3c51667c91a6b8cbdddcdfdbc5b09b85705b3a2a3851667b90a7b8ccc5b09b85715c4a36220c0000000000000000000a1a2c3d495a63737d848a8d8e8c8a847d75675f6176869ca7b9c0b19f937e695e4c4d5355575755504b453832281a0c00000000000000000f24394f64798eaabbcee2d8c2ad98836d58372614010000000000000000000000000000031628385d72879db2c7dce1cdbaa98b75604b36200b0011263b51667b90a6bbcacacabea9947f69543f2a14000000000000000013293e53687e93a8bdcacacabca7927d67523d2812000000000000000000000000000000000000000005192b3c4d63788b9fb4c9d1c0ad97826d594734384d62778da7b8ccd7c2ad98826d583b2b1805000000000000000000152a40556a7f95aabfd4eae1cfbeb2ada7a8abb3b7c4d0dbc6b19c867a655e4c3d2d1c0c000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9fb4cadfd9c3ae99846e5944374d62788c9fb5cab4a28e7963556b8095aac0c9b49e8974604a354b6074889db3c8ddd5c5b09b85705c4a36210b00000000000000000000000012273c51677c91a6bcd1cebbaa8c776274889db3c8d2c2aa95806b553e2e2035485a6a7f94a5b6cac0b29d887563788dabbccfd3bda8937e68533e291300000000000a1f33465873889db2c8d9c4af9a846f5a452f354b6074889db3c8ddeeedd7c2ad98826d58432d364b6075899eb3c8c9b5a38e7a644f3a2917040000000000000002162838495b637885929a9faaa3a99f9992877d6d606379899eaabbbdb49f8c7c665b493a404242403b3631271d150a0000000000000000000b21364b60758a9fb4cadfdbc6b19b86715544311d080000000000000000000000000000001d32475c72879cb1c7dce9d7c7a18c77614c37220c000e23394e63788ea3c5d5e7d6c1ac96816c57412c17020000000000000011263b51667b90a6bbd0dfd4bfaa957f6a55402a150000000000000000000000000000000000000000000d2135495b6e8398abbccfc9b49f8a77614c373c51667b91a6c5d5d5c5a8937d68533e28130000000000000000000013283d52687d92a7bdd2e7dac6b2a0989293969da6b3bfd0c9b5a49c8b7c655b4a3a2a19090000000000000000000000000000000000000000000000000000000000000000000f24394e64798eabbccfe3d6c0ab96816b564135485a6f849aafc5c0ab96816c566e8398aec3c6b19b867154433144556b8096abc1d1ddc8b4a38e79644e3929170300000000000000000000000f24394f64798ea4c6d7d8c8a48f7a657b90a6b8cbc9b5a48e79634e3923192b3c4b6074879cb2bfcbb7a695806b758a9fb5cad5c0ab96806b56412b1601000000000c21364c61768ba6b7cbd8c2ad98836d58432e3144556b8096abc0d1e3ead4bfaa957f6a55402a3144556d8297acc5d2c1ac97826d5846331f0a00000000000000091e3245566379889ba3afb4bbc7bab4aea59d92827460657b8c9fb4bdbbaa9e897963584737272d2b26201d150a0200000000000000000000091e32455672879cb1c7dcdec9b49f8975604b35200b0000000000000000000000000000071c32475c71879cb1c6dce2cdb7a28d78624d38230d000c21364b61768ba7b8cce0d9c4ae99846f59442f1a00000000000000000e24394e63798ea3c5d5e8d7c2ac97826d57422d1800000000000000000000000000000000000000000006192c3c4e63798c9fb5cacdbaa9947f6a55443f556a7f94aabfd4ccb8a78d78634e38230e0000000000000000000010253a50657a8fa5c8d9ebd8c2ad98827d7d818899a1b3c2d2c2b5a99e8a7963584737271501000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7c9d9ebd3bea8937e69533e2b3c51677c91a6b8c8b39e89756071869cb1c6c2ad98836d583626374e63798da3b4c8ddd1c1ac97826c5746331e0a00000000000000000000000c22374c61778ca8b9cdd1bca7917c6d8297adc4d5c9b19c86715b4a36210e1d324556667c90a1b3c7c4b49f8b7973889db3c8d8c3ad98836e58432e1900000000000f253a4f647a8fa4c4d4d6c0ab96816b56412c27374d63788da2b4c8dce7d1bca7927c67523d27273750657b90a6b8cbc9b49f8a76614c362111000000000000021527384b6074869ca6b5c1b7b3acaaafb4b7b2a098847460697e939fb1c0b9a79c8776615544311d15110b090200000000000000000000000002162838586e8398adc8d9e1cdbaa98f79644f3a240f0000000000000000000000000000031729395d73889db2c8dde9d7c6a18c77624c37220d00091e32465773889eb3c8dddbc6b19c86715c3a2a1704000000000000000c21364b61768ba7b8cce0dac4af9a856f5a362614010000000000000000000000000000000000000000000e21364a5b6e8399aec0d0c7b29d8874604b39596e8398aec3d8c8b39e88735b4935210c000000000000000000000d23384d62788daabbcee2d5c0ab96806b686b758399a4b6c6d2c7b9a89d8776615544311d130200000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5ebd9c8a5907b66503b26364b6074889eb3c8b8a7927d67758a9fb4c9bfaa957f6a55402a35495b70859bb0c7d7dec9b49e8976614c36211000000000000000000000000a1f33475874899eb4c9d3bea9947e74899eb3c9cfbcab947f6a543d2d1a071528384c5e6e8399a9bacdbaa9998470859ab0c5dac5b09b86705b382816030000000013283d53687d92a8bdd2d4bea9947f69543f2a2135495b70859aafc5d6d6d5c5a48f79644f3a2420354b6074889eb3c8cdbaa9937e69543f2f1c080000000000091d3145566a7f94a4b5c4b7a69d9795999fabb9b2a297816d606c8197a2b4c3b6a59a8473604b423222110100000000000000000000000000000013283d52687d92aabbcee2d7c7a9947f6a543d2c1a06000000000000000000000000000a1e33465774899fb4c9dee1cdbaa88b76614c36210c00031628395b71869bb0c6dbdec9b49e89745847331f0a000000000000000a1e32465773899eb3c8dedcc7b29c87725443301c08000000000000000000000000000000000000000000071a2d3d4f647a8fa2b3c7cbb7a6917c6752465772879cb2c7d9c3ae99836e593d2c1a06000000000000000000000b20354b60758a9fb4cadfd8c3ae98836e59576175869ca8b9cdd6c6b6a59a8473604b4231201000000000000000000000000000000000000000000000000000000000000001152737596e8398aec3d8e2cebbaa8d78634d38233144556b8096abc0c5b09a8570788da9bacdc9a7917c67523c272c3d53687e93a9bacde1cdb9a8937e68533f2e1b080000000000000000000004182a3a5c71879cb1c6d5c0ab95807d91a8b9cccab59f8c78624d38220f000a1a2f404d62788a9fb4c3c7b3a1917c8297acc1d7c8b39d88735645321e0900000001172c41566c8196abc0c0c0c4a7927d68523d28192c3c52677d92a7b8c1c1c1b8a78b76614c36211d3144556c8197acbfc0c7b19c86725d4b37230800000000000b20364b6075889db3c2b7a69d888280848c9ea8b9b19f927d676073849aa4b6c3b4a297816c604f402f1f0f0000000000000000000000000000000c21374c61778b9fb4cadfdbc5b09b85705b4935210e000000000000000000000000000c21364c61768ba8bacde1dec9b49f89745746331e0a0000192e43596e8398aec3d8e1ccb9a88c76614c37210c00000000000000031629395b71869bb0c6dbdfc9b49f8a75604b35200b000000000000000000000000000000000000000000000f22364a5c6f849aafc0d1c4b09b85705c4b61768b9fb5cad7c6a9947e69543f29140000000000000000000000081d31445572889db2c7dddbc6b09b86715b465763798a9eb4bdcdd4c3b4a296816c604e3e2e1d0d0000000000000000000000000000000000000000000000000000000000081d31445571879cb1c6dcdfcab49f8a75604b362027374e63788da2b4c8b4a28e797b90a6c7cfbcab8e79644e392421364c61768a9fb4c9ded6c6b19c86715d4b37220c00000000000000000000001a2f44596f8499aec4d6c1ac97818399aec6d6c8b09b85705a4835200b0000122035495a6a8095a5b6cabfb29d877f94a9bed3cbb8a68b76604b36210b000000011426375a6f849aabababababa6907b66503b261121364b6075899eabacacacab9e88735846331f14263750657a8fa1aaabababa4907b6550362614010000000010263b50657b90a6b7c8b29d87776c6b6f7b8a9eb4bdb29d8774606176869ca7b9c0b19f937e695e4c3d2c1c0c00000000000000000000000000000a1f33475870859aafc4d5ddc9b5a38d79634e3c2b190500000000000000000000000010253b50657b90a5c6d7e9dcc6b19c87715c392917030001162c41566b8196abc0d6e8d6c6a38e79644e39240f0000000000000000192e44596e8399aec3d8e2cebaa98c77624d37220d00000000000000000000000000000000000000000000071b2d3e50657b8fa2b4c8c8b4a38e7a644f657a8fabbccfcdbaa88f7a644f3a240f0000000000000000000000011527375b70859ab0c5daddc8b39e88735745495b677d919fb0c0d1d1c0b09f927e685c4b3b2b1a0a000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9dfdcc7b29d87725544311d2135495b70859aafc5c0ab96807f94a9becab59f8b76604b36211f3346586d8398adc3d4dec9b5a48f7a654f3a2a180400000000000000000002172c42576c8197acc1d6c3ae99838b9fb4c9cebbaa937e69533c2b1905000006192b3c4b6075879db2bfcab7a5998499afc4d9d5c4a38d78634e38230e000000081d3144557388959595959595948875614b36210c1e324556697e90969696969693826d583a29170923374b5d6f8392959595959595836e5443301c0800000000162b40556b8095aac4bea9947f6959555d687e93a6b8b7a5937e69586379899eaabbbdb49f8c7c665b493a2a19090000000000000000000000000004172a3a53687d92a6b8cbe0d2c1ac97816c5a483520130200000000000000000000061a2c3d546a7f94a9bfd4e9d8c3ae98836e59432e1900000014293e53697e93a8bed3e6d1bba6917c66513c27110000000000000001172c41566c8196abc1d6ead8c7a48f7a654f3a251000000000000000000000000000000000000000000000001023374b5d70859ab0c1d1c1ad98826d59697e93a8c9dac9b49f8975604b36200b000000000000000000000000182e43586d8398adc2d8e0cbb8a68b76604b3d4d5f6c8196a2b4c4d5cdbdb49f8b7a645948382816020000000000000000000000000000000000000000000000000000000e23394e63788eaabbcee2dac4af9a856f5a3727151a2c3d52677d92a7b8c8b39e888196acc1c7b29d88725745321e17293a50657b90a5b7cbdfd2c2ad98826d5847331f0800000000000000000000142a3f54697f94a9bed4c9b49f8a9fa9bacdcab49f8b77614c37220e000000000e1e324556667c91a1b3c7c3b49f8a9fb4cadfd0bba5907b66503b26110000000b20354b6073808080808080807f77625746321e091628384e60697b80818181817e74604b36210c081c2e3f4b60747d8080808080808073604b35200b00000003192e43586e8398adc3b9a48f7a644f3f4b6074889eb3c3b19c86715b5b657b8c9fb4bdbbaa9e8a7963584737271502000000000000000000000000000c20364b6075889db3c5d6dec9b49f8a78624d41302010010000000000000000000c2136495b70859bb0c5dae6d4c4a9947e69543f291400000011263c51667b91a6bbd0e6d3bea9937e69543e2914000000000000000014293e54697e93a9bed3e7d1bca7927c67523d27120000000000000000000000000000000000000000000000081c2e3f50667b90a3b5c9c9b49f8b77626d8297acc2d7c4af9a856f5544311d08000000000000000000000000162b40556b8095aac0d5e7d5c5a38e78634e39414b6074849aa6b8c8d9cebaa99d8877625645321e1403000000000000000000000000000000000000000000000000000011273c51667c91a6c8d8ead7c1ac97826c57422d170e21364b6075899eb3c8b8a69e889eb3c8c4af9a846f5a3928160b20354b6074879db2c7dddfc9b49f8a77614c3625130000000000000000000012273c52677c91a7bcd1cebbaa9faabac7d7c7af99846f5947341f0a00000000031628384c5e6f8499a9bacdbcab9fabbccfe3d2bda8937d68533e2813000000081d314455606b6b6b6b6b6b6b69625948392816030a1a31424e5d656b6c6c6c6c68605645321e0900111d31445560676b6b6b6b6b6b6b605443301c08000000051a30455a6f859aafc4b7a28d77624d3844556d8297adc2b6a48d78634e5d697e939fb1c0b9a89d8776615544311d1404000000000000000000000000091d3245566a7f95a7b9cce0cdbaa998836e5f4d3e2d201206000000000000000d1c2e3f4e63798ea2b4c8dddfcbb7a68e79644f39240f0000000e24394e63798ea3c5d6e8d6c1ab96816c56412c17010000000000000011273c51667c91a6bbd1e6d4bfaa947f6a553f2a150000000000000000000000000000000000000000000000001123384c5e71869bb0c2cebaa995806a71869bb1c6d9c8aa95806a553727150200000000000000000000000013283e53687d93a8bdd2e5d0bba6907b66513b3144556277889eaabbced8c7b7a69b8574604b433221110000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4e9d4bfa9947f6a543f2a15091e3245566c8196acc1c5b8a79ea7b8ccc1ab96816c56412c17081c3043546b8095aac0d1e2cdbaa9947f695443301c070000000000000000000f243a4f64798fa4c7d7d8c8bbb4bbc8d7cdbaa9927d67523a2a180400000000000a1a30404d63788b9fb4c3c9bcb4bcc9d9ebd5c0ab95806b56402b1601000001142637444b56565656565656544c483b2b1b0b00001424313f4b505657575756534b45382816020002152737444b52555656565656554b4336261401000000051b30455a70859aafc5b7a28c77624d373753697e93a8bec2a8927d68534f606c8197a2b4c3b6a59a8473604b43322212010000000000000000000000021528384c6176899eb3c1d1d7c7b2a0917d675c4a3e3020190e0a0400040a121d2a3a4b5d6c8297acc0d1e4dac9b29d88735c4a36220d0000000c21364b61768ba7b8cce0d8c3ae99836e59442e1900000000000000000f24394e64798ea3c6d6e8d7c1ac97826c57422d17000000000000000000000000000000000000000000000000091c2f4051677c91a4b6c9c7b39d8874758a9fb4c9cebbaa907b65503b26100000000000000000000000000011263b50667b90a5bbd0e5d3bda8937e68533e27374859657b8c9fb4bfd0d5c4b5a398826d614f3f2f1e0e00000000000000000000000000000000000000000000000001142636586d8398adc2d8e6d1bca6917c67513c2712021628384e63798ea3b4c8c5b8b3b8c5d5bda8937e68533e2913011426364d63788da2b4c8ddd7c7b29c8773604a35200d0000000000000000000d22374c62778ca9bacde1d8cec9ced8dec9b49f8a76614b36210c00000000000000122035495a6b8095a5b7cacfcacfd9e7edd8c2ad98836d58432e18000000000919263135404040404040403f37342b1d0d0000000614212f383b41414141413e3632281a0a00000009192731363d4040404040404035302618080000000004192e43596e8398aec3b8a28d78634d383b50657b90a5bac0ab96806b56424b6073849aa4b6c3b4a297816d614f402f1f0f0000000000000000000000000a1f334758687e93a3b4c6d7cfbeb49e8a7a645c4d41352c221f181b171f21303b4759657b8d9fb5cadfe3cfbcab95806b563e2d1b070000000a1e33465773899eb3c8dedbc6b19b86715c39291703000000000000000c21374c61768ca8b9cce1d9c4af9a846f5a362513000000000000000000000000000000000000000000000000001220354a6073869cb1c3cbb8a6927d798ea9bacecab49f8a76614b36210c000000000000000000000000000e23384e63788da3c4d5e7d5c0ab96806b56412b2b3b4b5d6a7f94a1b3c3d3d2c1b2a0947f695d4c3c2c1b0b0000000000000000000000000000000000000000000000081c30435471869bb1c6dbe7d5c5a38e79644e39240f000a21364a5b70859bb0c6d5ccc8ccd5d6c6a5907a65503b251000082035495a70859ab0c6d7dfcab6a5907b65503b2b180500000000000000000b1f34475974899fb4c9deeae2dfe2e8d6c5ae98836e5746331e0a0000000000000006192c3c4b6075879db2c0d0dfe3ebf7f0dac5b09b85705b382715020000000009141d202b2b2b2b2b2b2b2a2220180d000000000003111c23252b2c2c2c2c29211e160a000000000009151d20282b2b2b2b2b2b2b201c1408000000000002172d42576c8297acc1b9a48f7a644f3a3a4f647a8fa4b9c2ad98826d584344556176869ca7b9c0b19f947f695e4c3d2c1c0c000000000000000000000004172a3a4a6072859ba8b9c9dacdb9a89e887a675f4d493c37332a302a3337404d596277879cabbccfe3d8c8b59f8c78624d38231000000000031729395c71869bb1c6dbdec8b39e89735746331e0a0a0a0a0a0a0a0a0a1f33475874899eb3c9dedcc7b19c87725443301c07000000000000000000000000000000000000000000000000071c304354677d92a5b6cac4b09a847d91a6c7d8c6b09b86715746331e0a000000000000000000000000000b21364b60768ba6b8cbe0d8c3ad98836e58432e1d2e3f4a60728399a5b6c7d7cfbeb49f8c7b655a4939291808000000000000000000000000000000000000000000000b20354b6075899fb4c9dee0ccb8a78b76614c36210c00071a2d3d53687d92a8b9cce0dee0e1cdb9a88c77624d37220d0006192c3c53687d92a8b9cde1d3c3ae99836e5948342009000000000000000005182a3b5c72879cb1c7dcf1f7f4f5e0ccb9a7917c66513929170300000000000000000e1e324557677c91a2b3c8d8eafdfff2ddc8b29d88735645311d09000000000001080b16161616161616140d0b050000000000000000080e101617171717130b09020000000000000002080b12161616161616160b08010000000000000014293e54697e93a9c4bca7927d675237394e64798ea3b9c3ae98836e59433747586379899eaabbbdb49f8d7c665b493a2a1a0a00000000000000000000000c1c30435463798a9eabbccfd7c6b8a69e8a7d6e625a524c473a453a474c535e6677869ca5b6c9dae2cebbaa98836e5a4935200b0000000000192e44596e8399aec3d8e0ccb8a78b76614b36211f1f1f1f1f1f1f1f1f17293a5c71869cb1c6dbdec9b49f8975604a35200b000000000000000000000000000000000000000000000000001325364b6074879db2c4c8b4a2988298adc2d6c1ab96816c563929170300000000000000000000000000091e32455673889eb3c8dddbc5b09b86705b3828161c3043546176879ca9bacde1cebbaa9e8978635746362513000000000000000000000000000000000000000000000e23384d63788da9bacde1ddc8b39e88735746331e0a00000f21364b6176899eb4c9def0f3dec9b49e8974594834200b00000e21364b6176899eb4c9dedfcab49f8b77624d3727150100000000000000001a2f455a6f849aafc4d9effffff3dec9b39e8975604b36200b000000000000000000031628394d5f6f849aaabbcee2f2fff4dfcab49f8a75604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea6b8c1ac96816c55443a4f647a8fa4b9c2ad97826d5842293a495b657b8c9fb4bdbcab9e8a796358473827150200000000000000000000001325364a5b667c8d9fb5bdccd5c4b8a89e9183786e6761585b5a5c586168707c879ca4b6c3d3e2d2c1b49f8b79634e3c2b19060000000001172c41566c8196abc1d6e8d6c5a38e79634e3935353535353535353535353544596f8499aec4d9e1cdbaa98c77624c37220d00000000000000000000000000000000000000000000000000081d314455687e93a6b7cbc0b49f8a9fb4cad3c3a6917c67513c27120000000000000000000000000000031628385b70869bb0c5dbddc8b39e88735645321e1325364658647a8a9fb4bdced9c8b8a79c8675615443301c1201000000000000000000000000000000000000000011263b51667b90a6c7d7e9dbc5b09b86705b392917030000091e3246576c8297acc1d2e5f0dbc6b09b86715b3b2b180500000a1e3246576d8298adc3d3e2cebbaa95806a5544311d080000000000000002172d42576c8297acc1d7ecfffae7d5c4ac97826d5645321d09000000000000000000000a1b30414e63798b9fb4c4d4e7faf7e3cfbcab8d78634d38230e0000000000071117192020202020202020201d150b0700000000000000000000000000000000010a10121e202020202020202018160f060000000000000000000000000b20354a6073889db3c6b29d8774604b4052677d92a7bcc0ab96806b56412b2c3d4c5d697e939fb1c0b9a89d8776615645311d14040000000000000000000008182d3d4d5e6a7f959eafbccdd5c6b9b3a0988c837c777371707173777d84919da6b6c2d3e1d5c4b5a395806a5b49351e0e00000000000014293e54697e93a9bed3e5d0bba6907b66514a4a4a4a4a4a4a4a4a4a4a4a4a4a576c8196acc1d6e9d7c7a48f7a644f3a250f00000000000000000000000000000000000000000000000000011426374b6074889db2c5cfbcab9fabbccfcab6a58c77624c37220d000000000000000000000000000000192e43596e8398aec3d8e0cbb8a68b76604b36210b18293a4a5c687d929fb1c1d2d5c5b5a4998372604a40301f0f0000000000000000000000000000000000000000142a3f54697f94a9bed4e9d8c2ad98836d58432e18000000031628394f647a8fa3b5c9deedd8c2ad98836d58432e180000000316293950657a8fa5b6cadfd9c8b29d8874604b35200e0000000000000000152a3f546a7f94a9bfd4e9fef4e0cbb7a6907b6550382815020000000000000000000000122135495b6b8096a6b7cbdfeefeebd9c9a5907a65503b2510000000000a19242c2f353535353535353535332a201c13080000000000000000000000000005131e25273335353535353535352d2a2317090000000000000000000000071c3043546b8095a8bab7a5937e685e575e6e8398aec3c0a7927d67523d271f2f3f4e606c8197a2b3c2b6a59a8474604b4332221201000000000000000000000f1f30404a607280959db4bac7d2ccbfb2aa9f99918c88868586888b929aa2b2b7c4d3e0d3c5b8a69b8574604b3d2c1a0000000000000011273c51667c91a6bbd1e6d3bea8937e695f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f697f94a9bed4e6d1bca7917c67523c27120000000000000000000000000000000000000000000000000000091d314556697e93a6b8cbc9bcb4bcc9d9c7b29c87725948341f0b000000000000000000000000000001162b41566b8096abc0d5e7d5c4a38d78634e38230e0b1b2d3d4e5f6d8197a3b5c5d5d2c2b3a195806a5e4d3d2d1c0c00000000000000000000000000000000000003182d42586d8297adc2d7ead5c0aa95806b55402b16000000000b22364a5c71869bb1c7d7e9d4bfaa957f6a55402a15000000000b20354a6073879db2c9dadfcbb7a6917c66513c2c19060000000000000012273d52677c92a7bcd1e7ececddc8b39d8874604b35200b000000000000000000000000061a2c3d4b6175889db2c0d1e6ece7d2bda8927d68533d28130000000719293640444a4a4a4a4a4a4a4a4a483f3530251808000000000000000000000000132330393d484a4a4a4a4a4a4a4a423f3527170600000000000000000000001325364c61778a9fb4c0b49f8b7c706d6f7c8d9fb4cab4a28c77624d3722112131424b6073849aa4b6c3b4a297816d614f402f1f0f0000000000000000000001121c304354606c7f939fa9b5c2cdcfc8bbb4aea7a69d9b9a9b9e9fabafb4c0cbd4dfcfc3b6a69d8878625645311f0e000000000000000f24394e64798ea3c6d6e8d5c0ab96807474747474747474747474747474747474747d91a6bcd1e6d4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000021527384b6075889eb3c5d6cfcacfd9d7c2ad97826d583b2a180500000000000000000000000000000014293e53697e93a8bed3e5d0bba5907b66503b2611000f1f31414b6074859ba7b8c9dacfbfb59f8d7c665b4a3a2a1909000000000000000000000000000000000005192b3c5b70869bb0c5d7d7d9c9a7927d68523d281300000000071b2d3e53697e93a9bacdd7d6c6a6917c67513c271200000000071c3043546a7f95abbccfd7d4c4af9a846f5a4935200a000000000000000f253a4f647a8fa4c7d7d7d7d7d3c3ab96816c5443301c08000000000000000000000000000f1e324657677d91a2b4c8d8d7d7d5bfaa95806a55402b150000001124364754596060606060606060605d544a4336251300000000000000000000000e1e30414d525d606060606060606057524535230f0000000000000000000000081f3347586a7f95a2b4baa99f908582848d9fabbcbeaf9a846f594834200b141d3144556176869ca7b8c0b19f947f695e4c3d2d1c0c0000000000000000000000132536434a616a7e8b9ca4b4b9c6cdcecac3c4b7b3b0afb1b3b4bcc9c8d1ddd3cabfb3a59d887963594838271500000000000000000c21374c61768ca8b9cce1dfcab49f8c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b9fb4c9dfecd6c1ac97816c57422c170200000000000000000000000000000000000000000000000000000a1e3245576a7f94a7b9ccd7d7d7d7d5c5a8927d68533d28130000000000000000000000000000000011263c51667b91a6bbd0d8d3bda8937e68533e29130001131d3245566278899eabbcced9cfbcab9e8a7963584737271501000000000000000000000000000000000b2034485a74899eb4c2c2c2c2bcab8f7a654f3a251000000000001021364c61768a9fb4c0c2c2b9a88e79634e39240e00000000001325364d62788c9fb5c3c2c2c2b59f8c78634d382815020000000000000d22374d62778ca9bac2c2c2c2c9b6a58f7a644f3626140100000000000000000000000000031629394d5f70849aaabbc8c2c2c2c2ad98826d58432d18030002172c4054656e757575757575757575726a605443301c1000000000000000000006192c3c4d5f677375757575757575756d63523f2a16010000000000000000000004182a3a4b6072849aa4b4bab4a39b97999fabbcc0b2a0907b66503b2b19050115273747586379899eaabbbdb49f8d7c665b4a3a2a1a0a0000000000000000000008182530435060687986959ea8b4bac7cacfd5cbc8c6c5c6c8cacfd9d8d1c9c3b6b2a1998779635b4a3b2b1a0a00000000000000000a1f33475874899eb3c9dee2cebbaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faabbcee2eed9c4af99846f5a442f1a000000000000000000000000000000000000000000000000000000031628394c6176899eb3c6c2c2c2c2c2b8a68d78634e38230e000000000000000000000000000000000e24394e63798ea3c5c2c2c2c0ab95806b56402b16010002152838485a667c8d9fb4bbc8c2c9b9a89d8776615544311d0e000000000000000000000000000000000d22384d62778da8acacacacacab9f8b77614c37220c00000000000a1f3346586c8197a2abacacab9e8975604b36210b0000000000082035485a6f8499a5acacacacacab96806b5645321d090000000000000b20354a60758a9facacacacacacab9c87725c4a3618080000000000000000000000000000000b1b30414e63798c9faaacacacacacac9a85705a45301b050004192f44596e838a8a8a8a8a8a8a8a8a877f72604a3e2e1a0a00000000000000000c2035495a677d888a8a8a8a8a8a8a8a826d57422d180200000000000000000000000c1c3043546277869aa2b3b7b5b0acafb5bcbbb4a298826d5e4c381d0d00000919293a495b657b8c9fb4bbbcab9e8a79635847382715020000000000000000000008131c33424e5b6374808a969fa9b0b5bcc9c5c8caced8d8cec9c7c3c1b5b0a59d918376635b4a3d2d1d0d0000000000000000000417293a5c71869cb1c6dbebd9c8bbb4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4bbc8d8eaf1dcc6b19c87715c3a2a18040000000000000000000000000000000000000000000000000000000a1e3346576b8095a8acacacacacacac9e88735b4935210c000000000000000000000000000000000c21364c61768ba7adadadadadad98836e58432e190300000a1a2b3c4c5e6a7f959faaabacacacaca59a8473604b3c2c190600000000000000000000000000000010263b50657b909797979797979691816d5947341f0a00000000000417293a4c6176849196979796907f695645321e09000000000005192b3c4d62788792969797979797978975604b36200b000000000000071c304354728797979797979797968c7d67513e2e1b00000000000000000000000000000000001321364a5b687e8c959797979797979787725d48331d0800000c21374c6176889dab9f9f9f9fab9f9d94806a5c4a38271502000000000000031628394d62788b9da69f9f9f9f9f9f8c79634e39230e000000000000000000000000011426364759627584929da6adb1b4b9b4b1aa9f968475614b402f1c000000000c1c2c3d4c5d687e939faaacaca89d8776615645311d090000000000000000000000001524313d4a56606a77818a939a9fababafb3b4bbc8c7bab4b1aea8a39b92877c6e6158493d2d1f0f0000000000000000000000192f44596e8499aec3d9eee6d9cecac8c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c8cbd4e2f2dec9b49f89745947341f0a000000000000000000000000000000000000000000000000000000031729394c61778a979797979797979797836e593d2c1a06000000000000000000000000000000000a1f3346587489989898989898989885705b46301b060000000e1e2f4050616b808b939697979797979796816c5a4935200c00000000000000000000000000000010253a50657b82828282828282817c72604b3a2a18040000000000000b1f33465861737c818282807b69614f382816020000000000000e2035495a62747d818282828282828179634e39230e0000000000000013253654697f82828282828282817b675f4d3920100000000000000000000000000000000000071a2d3d4e60687a8082828282828282816c57422d170200000a1f334758657b8d9fb5c1b5b5bcb5b29f8c7a645645311d10000000000000091e3245576c8196aab7c4b5b5c1ae99846f5b4936210c0000000000000000000000000008182a3b475761727d8891989c9ea89e9c958b817461574632221200000000000e1f2f3f4e60697f8c9596969696968574604b36200b00000000000000000000000006141f2d38454b59616b767e858b91969a9e9faaa2a2a99f9c99938d857d74675f4c473a2c1f0f010000000000000000000002172c41576c8196acc1d6ebe7d4c4b7b2b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b2b7c4d4e6e1cdbaa88c77614c37220c000000000000000000000000000000000000000000000000000000000b1f334758687e8282828282828282827c66513b261100000000000000000000000000000000000417293a566b808383838383838383816c56412c1701000000001222334351626b787e81828282828282828178624d38230d0000000000000000000000000000000e23374b5d656d6d6d6d6d6d6d6c67605443301c0c000000000000000417293a465560676c6d6d6b655e4f43321a0a0000000000000006192c3c495660686c6d6d6d6d6d6d6d635b4a36210c0000000000000008273c4f61696d6d6d6d6d6d6d6b655d4d40301d020000000000000000000000000000000000000f1f31424e5c646b6c6d6d6d6d6d6d6c63523e2a1500000004172a3a4c5d6b8096a3b5c7d7cfcabbaa9c8674604b3e2d1a0a00000000000b21364b6075899eb3c8d4cac9b5a3907b65503d2c1a0600000000000000000000000000000d1d2a3946546068757c8287898b898680796c60564639291604000000000000112131424f6169797f8181818181817b65503b251000000000000000000000000000010f1a28323a474c58616870777c8185888a8b8d8c8b8a87837e78706860554d4133291c0f0100000000000000000000000014293f54697e94a9bed3e9dfcbb7a69d9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9da6b7cbdfe9d7c6a48f79644f3a240f0000000000000000000000000000000000000000000000000000000004182a3a4e60686d6d6d6d6d6d6d6d6d665e4c38240f0000000000000000000000000000000000000b293d51626b6d6d6d6d6d6d6d6d6c62513e291400000000000415253344515b63696c6d6d6d6d6d6d6d6d625a4935200c000000000000000000000000000000081c2e3f4b505757575757575756524b433626140000000000000000000b1b2937444b5256575756504c403225140000000000000000000e1e2c38454b5257575757575757574e4a3d2d1a07000000000000000c2032434f5457575757575757564f4b3f30221200000000000000000000000000000000000000011324313e4a4f565757575757575757524535220f000000000c1c2f3f4b6074859ba9bacde1d9c8b5a495806b5c4a38271502000000081b2e3f53687d93a7b9cce6d4c3b09b85715d4b371f0f000000000000000000000000000000000d1b2936434a5660666d72747574716b635b4b4538291b0b0000000000000003142432434f5c646a6c6c6c6c6c6c655d4b37230e0000000000000000000000000000000a151d2a343a474c535962676b7073757677777675726e69635b524b4437301f170c000000000000000000000000000012273c51677c91a6bcd1e6ddc8b29d88868686868686868686868686868686868686879db2c8dde6d1bca6917c67513c271200000000000000000000000000000000000000000000000000000000000c1c31424e53575757575757575757514c402f1d090000000000000000000000000000000000000e2134445156585858585858585856514434220e000000000000071626333d494e545657575757575757574d493c2c19060000000000000000000000000000000011212e373a42424242424242413c3530261808000000000000000000000b192631353c414242413b382f211407000000000000000000000e1a2832363d414242424242424239362d1f0f0000000000000000031525323c3f42424242424242413a372e21120400000000000000000000000000000000000000000613202d36394042424242424242423e352717050000000000111d31455663798a9fb4bfd0e2d2c2b49f8c7a645645311d0f0000000e22374b5d71869bb1c5d6dfcab7a5927c67523f2e1c0100000000000000000000000000000000000b18253038454b51585c5560555c564e493d32281a0b000000000000000000061425323d4a4e55575757575757504b3f2e1c0800000000000000000000000000000000020c181f2a33373b484d52565a5e5761626261605459534e493d3531271912040000000000000000000000000000000f24394f64798ea4c6d7e9d5c0aa95807171717171717171717171717171717171717d91a7bcd1e6d4bea9947f69543f2a140000000000000000000000000000000000000000000000000000000000001324313a3e4242424242424242423b382f221200000000000000000000000000000000000000041626343d414343434343434343413e342616050000000000000008161f2c35383e41424242424242424238352c1e0e000000000000000000000000000000000003111c23252d2d2d2d2d2d2d2c27201c140800000000000000000000000009141d20272c2d2d2b26231c11030000000000000000000000000a161e21282c2d2d2d2d2d2d2d23211a0f01000000000000000000071520272a2d2d2d2d2d2d2d2c25231c11030000000000000000000000000000000000000000000002101b22242b2d2d2d2d2d2d2d2d2a22170900000000000002152738495b687e93a1b3c4d4e2cebbaa9c8674604b3e2d19090005182a3b4f657a8fa3b5c9e3d6c5b29d8774604b3520110000000000000000000000000000000000000008131c2832363c4337444b44374038352c1d150a000000000000000000000007141f2d3639404141414141413b372e211100000000000000000000000000000000000000040c171f212b34373c414539464b4d4d4c4b43363e38352c201d150900000000000000000000000000000000000c22374c61778ca8b9cde1d8c2ad98836d5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c64798fa4c7d7e9d6c1ac96816c57412c1702000000000000000000000000000000000000000000000000000000000006131e26282d2d2d2d2d2d2d2d2d26241d12040000000000000000000000000000000000000000081621292b2e2e2e2e2e2e2e2e2c29221608000000000000000000000e1a2123292c2d2d2d2d2d2d2d2d2320190e0000000000000000000000000000000000000000080e101818181818181817120b0801000000000000000000000000000001080b1217181816100e0900000000000000000000000000000002090b1317181818181818180e0c07000000000000000000000000030c12141818181818181816100e080000000000000000000000000000000000000000000000000000070d0f161718181818181817150f0500000000000000000a1a2c3d4e606e8399a6b7c9dad8c8b5a495806a5c4a372715020b1f3447596d8398adc2d2e0ccb9a7947e695544311d080000000000000000000000000000000000000000000a161e21272d27313631272b23211a0f0200000000000000000000000000010f1a21242a2c2c2c2c2c2c25231c1103000000000000000000000000000000000000000000040a0d192022272c302932363837363530262923211a0f08010000000000000000000000000000000000000a1f33475874899eb4c9dedac5b09b85705b38464646464646464646464646464c62778ca9bacde1d9c4ae99846f59442f1a00000000000000000000000000000000000000000000000000000000000000020b1113181818181818181818110f090000000000000000000000000000000000000000000000040e1416181818181818181817140e05000000000000000000000000060c0e141718181818181818180d0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f31424c6176889dabbccfe3d2c2b49f8b7a645544311d0f1426374c62778a9fb4c9dfd8c7b39e8976614b372715010000000000000000000000000000000000000000000002090b1118151d201d15160e0c060000000000000000000000000000000000070d0f15171717171717100e080000000000000000000000000000000000000000000000000000050b0d12161b161e21222221201c14140e0c0600000000000000000000000000000000000000000004182a3a5c71879cb1c6dcddc8b29d8873564531313131313131313131313134475974899fb4c9dedbc6b19c86715c3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b141b1d20202020202020200f0d0700000000070d0f20202020202020201e1c150c000000040d1416202020202020202017150f0500000000000000000000000000000000000000000000000000000000000001080b0c0c0b0b0700000100000000000000000000000000000000000000000000000000000000000000070b140d0b05000000000000000000000000000000000001141f334758657b8d9fb5c2d2e2cebbaa9b8574604b3d2d191d3144556a7f94a9bacee2cebaa995806b57463219090000000000000000000000000000000000000000000000000000000002080b0802000000000000000000000000000000000000000000000000000202020202020000000000000000000000000000000000000000000000000000000000000000000100030a0c0d0d0c0b080100000000000000000000000000000000000000000000000000001a2f44596f8499aec4d9dfcab49f8a75604b36201c1c1c1c1c1c1c1c1c182a3b5c72879cb1c7dcdec9b49e89745847331f0a0000000000000000000000000000000000000610161920202020202020202020202020202020202020202020202020200d0b0500000000000000000000000000000000060c0d13171a1c1d1f1f1e1c1a16120c0a04000000000000000000000000000000000000000000000000000000070d0f1314110c0a0300000000000000000000000f1d282f32353535353535353524221b100202101b222435353535353535353330291e1000081621282b35353535353535352c2a221709000000000000000000000000000000000000000000000003090b101519141d20212121201c131a16120d0b050000000000000000000000000000000000000000000000000008131c2029221f180d000000000000000000000000000000000004182a3a4c5e6b8196a3b5c7d7d8c8b5a3957f6a5b4a372720354b6074879db2c7d8dfc9b49f8b77624d392916000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acc1d6e3cfbcab8d78634d38230e07070707070707001a2f445a6f8499afc4d9e1ccb9a88c76614c37210c00000000000000000000000000000000000a18232b2e35353535353535353535353535353535353535353535353535353520180d00000000000000000000000002090e192023282c303233343433312f2b27221f180c08010000000000000000000000000000000000000000000006101b2224282927211e170b0000000000000000000b1d2d3a44484a4a4a4a4a4a4a4a3a372e201010202d363a4a4a4a4a4a4a4a4a48453b2e1e001626333d404a4a4a4a4a4a4a4a423e352717050000000000000000000000000000000000000000090a161e21262a2f2631353636363530252f2b272220190f0d0700000000000000000000000000000000000000000009182530353f37342a1d0f01000000000000000000000000000000000c1c2f404b6074859ba9bacde1d2c1b49f8b79635544312c3d51667c91a6b7cbe5d0bfad97826d5948341b0b00000000000000000000000006101619202020202020201e1c160d0000000000000000000000000000000000080d0f1b1f20202020200b080100000000000000000000000000000000000000000003090b101314151514120f0b09020000000000000000000003090a0b0b0b0b0b0b0b0000000000000000000000000000000000000000000000142a3f54697f94a9bed4ebd9c9a5907b65503b26100000000000000002172d42576c8297acc1d7e8d6c6a38e79644e39240f000000000000000000000000000000000618283640434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a342b1d0d000000000000000000000a161e212c35383d414547484949484744413c37332a201d140900000000000000000000000000000000000000010f1a212d36393e3e3c3633291b14060000000000000014283a4b575d60606060606060604f4b3e2e1b1b2d3e4a4f60606060606060605e584c3b1a0a2133445055606060606060606057524535220f00000000000000000000000000000000000009111c232832363b404437444b4c4c4b4a433644403c37342b24211a0f0903000000000000000000000000000000000009192636434a544c473b2d1f0f0100000000000000000000000000000000111d31455663798a9fb4bfd0e2cebaa99b8573604b3d35495b6f849aafc4d4dcc7b3a18e79634e3b2b180000000000000000000000000a18232b2e353535353535353331291e10000000000000000000000000000002101b222530343535353535331d1409000000000000000000000000000000000003090c161e212528292b2b2a2724201d150d0b0500000000070d0f181e202020202020202014120c020000000000000000000000000000000000000012273c52677c91a7bcd1e6d2bda8927d68533d28130000000000000000152a3f546a7f94a9bfd4e6d1bba6917c66513c27110000000000000000000000000000000010233646535860606060606060606060606060606060606060606060606060605e483b2b18050000000000000001131a2832363c494d53565a5c5d5e5e5e5c5956524c473a35312619130500000000000000000000000000000000000f1f2c353e4a4f5354514b4639312414070000000000001b2f445769727575757575757575645c4b372222364a5c647575757575757575736a58382715283d50626b75757575757575756c63523e2a150000000000000000000000000000000006121d242f3838454b5055595c556061616060545c5956524d483b39362d211e160a020000000000000000000000000000011426374454606962594a3d2d1f0f0000000000000000000000000000000002152738495b687e93a1b3c4d5d8c7b5a3947f6a5b49394e63798ea2b4c8e2d2c1af99846f5b4a361d0d00000000000000000000000618283640434a4a4a4a4a4a4a49453c2e1e000000000000000000000000000110202e373a464a4a4a4a4a4a48312619090000000000000000000000000000000b161e212832363b3d3f40403f3d3a3632282220180d0702101b22242e33353535353535353529261f14060000000000000000000000000000000000000f243a4f64798fa4c7d7e9d5c0aa95806b55402b16000000000000000012273d52677c92a7bcd1e7d3bea9947e69543f291400000000000000000000000000000000162b4053646e757575757575757575757575757575757575757575757575757570594834200b00000000000009141d3038454b545a62686c6f7172747473716f6b676158514b4437301f180d0000000000000000000000000000000e1e2c3d494e5c6468696661574e423225140000000000001d32485d72878a8a8a8a8a8a8a8a7a644f3a24243a4f647a8a8a8a8a8a8a8a8a88735645311d2b40556b808a8a8a8a8a8a8a8a816c57422c170200000000000000000000000000000e19203039404c505660656a6e7174757676767573716f6b676259564e4a3d3632281e160a00000000000000000000000000081d31445560727e77635b4a3d2c1d0d000000000000000000000000000000000a1a2c3d4e606e8399a6b7c9dad2c1b49f8b79635546576c8196acc0d0dec9b5a3907b65503d2d1a000000000000000000000000102336465358606060606060605e594c3c1a0a0000000000000000000000000f1f2e3e4b4f5b5f606060605f5c443726140100000000000000000000000008131c28323639454b505254555554524f4b453837342b221b13202d363943484a4a4a4a4a4a4a4a3e3b3224140200000000000000000000000000000000000d22374c62778ca9bacde1d7c2ad98826d58432d1800000000000000000f253a4f647a8fa4c7d7ead6c1ab96816c56412c1701000000000000000000000000000000192e43586e828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a77624d37220d000000000009192631414d56606971787d818587888989888684807c776f6660554d41342a1d0f0100000000000000000000000005192b3c495b6370797d7e7c7668604f43321e0e00000000001a30455a6f859a9f9f9f9f9f9f917c67513c2722374c62778ca99f9f9f9f9f9f8a75604b3620283e53687d939f9f9f9f9f9f99846f59442f1a0000000000000000000000000004121e2c35404d515e656e757b7f8487898a8b8b8b8a898684807c77726b645c534b453832281a120400000000000000000000000b20354b607382948779635b493b2a1808000000000000000000000000000000000f1f31424c6176889dabbccfe2cdbaa99b8573604b6176899eb3c9ded4c4b19b86715d4c381f0f000000000000000000000000162b4053646e75757575757575736b593828160300000000000000000000071a2d3d4b5c64707475757575756e5544311d0800000000000000000000000c18253039464b5457606568696a6a6967646056544d483b372e21313e4a4f585e5f60606060606060544f42321f0c00000000000000000000000000000000000b1f34475974899fb4c9dedac5b09a85705b37271502000000000000000d22374c62778ca9bacde2d9c3ae99846e59442f1900000000000000000000000000000000162b41566b80969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8f7a644f3a250f0000000001142637444b5f67757e868d92969a9c9d9e9e9d9c9996918b847c74675f4c483b2c1f0f0000000000000000000000000b2035485a6379858e939391897e69614f3c2b190500000000182d42586d8297adb5b5b5b5a9947f69543f2a1f34475974899fb4b5b5b5bcab8d78634d3823263b50667b90a5b5b5b5b5b19c86715c3a2917040000000000000000000000071523303c494d5e66717b83899095999c9ea8a1a1ab9f9e9c9995918c878079716860564b45383022120000000000000000000000152a3f546a7f94a09d88796359483626140100000000000000000000000000000001141f334758667b8d9fb5c2d2d7c7b5a3947f695b687e93a8b9ccdfcbb7a6927d67523f2f1c01000000000000000000000000192e43586e828a8a8a8a8a8a8a89735645321e09000000000000000000000a21364a5b647a85898a8a8a8a8c73604b35200b000000000000000000000c1c2a36434a57616970767a7d7e80807f7c7975706962594f4b3e35414e5c646d73757575757575757569604f3b2612000000000000000000000000000000000005182a3b5c72879cb1c7dcddc7b29d88725544311d08000000000000000b20354a60758a9fb4c9dfdbc6b19b86715c3a29170400000000000000000000000000000013293e53687e93a8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a7927c67523d271200000000081d314455606c7d88939ba3a8abafb1b2b3b3b3b1aeabab9f9a91877d6e6259493d2c1d0d000000000000000000000417293a4d6278889ba3a8a9a79e937f695a4835200b00000000152b40556a8095aabfcacac1ac96816c57412c182a3b5d72879cb2c7cadac9a5907a65503b2523394e63788ea3c5d6cac9b39e89745846331f0a0000000000000000000007152532414d5a626f7c8690989ea8aaaeb1b4b9c6b6bcb5b3b1aeaba7a49c968e867d756960564c40301b0a00000000000000000000152a3f556a7f94a3a69d8777625443301c0e0000000000000000000000000000000004182a3a4c5e6c8196a4b5c7d7d1c1b49f8b796371869cb1c6d6d6c6b29d8774604b35201100000000000000000000000000162b41566b80969f9f9f9f9fa78b76604b36210b0000000000000000000a1a30404e63798a9b9fa99f9faa8d77624d38220d0000000000000000000a1a2a3a47546069757e858a909294959594928f8a857f776e645c4e494e5f687a82888a8a8a8a8a8a8a8a7e69543e29140000000000000000000000000000000000001a2f455a6f849aafc4d9dfcab49f8a75604b36200b00000000000000071c30435472879cb2c7dcdec9b39e89745846331f0a00000000000000000000000000000011263b51667b90a6bbcacacacacacacacacacacacacacacacacacacacabfa9947f6a543f2a15000000091c2f3f4b607381929da6b0b5c1c1c4c1bdbbbabbbdc2c9bcb4afa59d918377635b493b2b18080000000000000000000a1f3346586e8398a6b5c1c5b9b39f8b78624d38220d0000000013283d52687d92a7bdd2d9c3ae99846e59442f1a2f455a6f849aafc4d9d2bda7927d68523d2821364b61768ba7b9cce0ccb9a88b76614c36210c00000000000000000005152533434f5f677884919ba3adb4b9c6bbb4b1afadacacadaeb0b3b7c2b6b1aba39b92887e75665e4c392816030000000000000000000b21364b6075859ba5a59a8472604b3c2b1906000000000000000000000000000000000c1c2f404b6074869ca9bacde1cdbaa99b85737b8fa4b5c9e1ccb9a8947f695544311d080000000000000000000000000013293e53687e93a8b5b5b5c5a38d78634e38230e0000000000000000021527384d5e70849aa8b4bab5b5a58f7a65503a2510000000000000000002152838475861727f89939b9faaa7a9aaaaa9a7a99f9a948b837a6f635b5d687e8c989d9faa9f9f9fa498826e604f3b2612000000000000000000000000000000000002172d42576c8297acc1d7e3cfbcab8d78624d38230d00000000000000001325365a6f849aafc4d9e0ccb9a78b76614c36210c0000000000000000000000000000000e23394e63788ea3c5d5e7dfe7dacfcac7c7c7c7c7c7c7c7c7c7c7c7c7c1ac97826c57422d170200000e23384c5d6b80969fb2b7c4c9c4b8b3aca8a5a5a6a8acb3b8c5c3b7b2a19987796359483626140100000000000000000c21364c61768a9fb4c5d1d6ccbaa9947f69543f2a140000000010253b50657a90a5c9d9dbc6b19b86715c3929172d42576d8297acc2d7d4bfaa957f6a55402a1e32465774899eb3c9ded6c6a38e79634e39240e000000000000000001132333435061697d899aa2b1b5c2b8b3abaa9f9c9998979798999b9da6a4a9afb4b5b1a69e94877c665745321e09000000000000000000091e3245566177879da9a2947f6a5a4835200e0000000000000000000000000000000000111d32455663798a9fb4bfd0d7c7b4a3947e8298aec2d2d8c8b39e8976614c372715010000000000000000000000000011263b51667b90a6bbcacabaa5907b65503b26100000000000000000091d314556667c91a2b4c6cdd7bca7927d67523d28120000000000000000091d324556617683949ea7b0b4bbc8bebfbfbec7bab4b0aa9f988f84796a657b8c9faab3b4bbb5baa89c8675614b42321f0c000000000000000000000000000000000000152a3f546a7f94a9bfd4ebd9c9a5907a65503b25100000000000000000172d42576c8297acc1d7e8d6c5a38e79634e39240e0000000000000000000000000000000c21364b61768ba7b8cce0ecdac9bcb5b2b2b2b2b2b2b2b2b2b2b2b2b2b2af99846f5a442f1a05000316283850657b909eb0bdcbcebeb2a69d9792908f9093979ea7b4b9c6bfb3a59d8777625443301c0800000000000000000f24394f64798eaabbcee3e8d8c7ad97826d58422d18030000000e23384d63788dabbccfdec9b39e89745746331e2a40556a7f95aabfd4d7c2ac97826d57422d1629395c71869cb1c6dbd0bba6907b66513b261100000000000000000f1f314150616a7f919ea7b3c0b7b2a69d96908a8784838282838486888b8f94999fa9b0b5b3a59d8a76604b36210b000000000000000000031628384759647a8b9fb49f8a78624d3c2c190600000000000000000000000000000000021528384a5b697e93a1b3c4d5d1c1b49e898c9fb4cadfcebbaa96806b574633190900000000000000000000000000000e23394e63788ea3c5d5d2bda8927d68533d28130000000000000004182a3a4b6074879cb2c0d1e1d4bfaa957f6a55402a1500000000000000071b2e3e4b60748499a1b3b8c5cacecdc9c4c0bec0c2c7c8bbb4ada29a8b8078889eaabbc8cacebdb49f8a796357463324140200000000000000000000000000000000000012273d52677c92a7bcd1e7d2bda7927d68523d28130000000000000000152a3f556a7f94aabfd4e6d0bba6917b66513c2611000000000000000000000000000000091e32465773889eb3c8dde3cfbcab9f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c87725c47321d0700091e3245566f849aafbccdd4c3b2a09888817d7b7a7b7d8288939ea8b9c5c3b7a69a8473604b36261401000000000000000e24394e63798ea7b9cce0e2d4c4ac97816c57422c17020000000b20364b60758a9fb4cadfccb9a78b76614c3621283d52687d92a7bdd2d9c4af9a846f5a452f1a2f44596f8499aec4d9d3bda8937e68533e29130000000000000009192d3d4d5f6a7f949db3b9bdb1a69d9288817a76726f6d6d6d6d6e7073767a7f848a929ba3b0b09a85705745321e09000000000000000000000a1a2a3b4a5c697e93a4a998826d5b4935210c00000000000000000000000000000000000a1a2d3d4e606f8399a6b8c9dacdb9a89e9faabbcedfc9b49f8b78624d3929170000000000000000000000000000000c21364b61768ba7b8ccd5bfaa95806a55402b15000000000000000a1f334758697f94a5b6cadeecd7c2ac97826d57422d18000000000000000d22364a5c6d8297a3b3bfccd6d0c7bab4afaba9aaadb2b6c3cac0b4a99f958a9ea6b8c8d8d2c1b19f927d675b4a39291706000000000000000000000000000000000000000f253a4f647a8fa4c7d7d7d5bfaa95806a55402b15000000000000000012273d52677c92a7bcd1d7d3bea8937e69533e2914000000000000000000000000000000031628395b71869bb0c6dbdfcab59f8d8788888888888888888888888888888886725c47321d07000b21364b60768b9fb5cadfcab6a59882756c68666566686d757e8a9ea7b9ccc4b4a2927d685443301c08000000000000000b20364b6075899eb3c0cccec6b7a6927d68523d281300000000091d31455673889db2c8ddd6c5a38e79634e3924253b50657a90a5c9dadcc7b19c87725c3a2a182c42576c8197acc1d6d5c0ab95806b56402b16010000000000011527374a5b677d929daebbbbb49f97877d756c6561575a58575758595b576165696f767d85909b9f947f6a543928160300000000000000000000051626333f4b6073869cb19f8b78634d38230e0000000000000000000000000000000000000f1f31424c6177889dabbccfd6c6b9b4b4bbc8d8d0c0ad98826d5948341b0b000000000000000000000000000000091e32465773889eb3c8d7c2ad97826d58422d18000000000000071a2d3d4c6177899eb3c3d3e6efdac4af9a856f5a36261401000000000004182a3a4f647a8fa0b1c1d0e0d0bfb3a99f99959495979da5adb4bbc7bab4aa9faab8c5d5d6c5b5a397816c5f4d3d2d1b0b00000000000000000000000000000000000000000d22374d62778ca9bac2c2c2c2ad98826d58432d18030000000000000010253a4f657a8fa4c7c2c2c2c0ab96816b56412c1600000000000000000000000000000000192e43596e8398aec3d8dfcab49f8b74727272727272727272727272727272726857432f1a05000e23394e63788eabbccfdcc7b29d8774605653505051535660697a899eb3c3d1c0b29c8773604b35200b00000000000000081d3144556b8095a2b3b8bbb4a89d8875604b36210b00000000021527385b70859bb0c5dad0bba6907b66513b2623384d63788dabbccfdec9b49f89745947341f2a3f546a7f94a9bfd4d8c2ad98836d58432e18000000000000081d31445563798b9fb4bbbbaa9f928175686056504b4639434242434439464c4f54576168717c858a8575614c36210c000000000000000000000113233344515d656d7e93a9aa96806b563c2c1906000000000000000000000000000000000001141f344759667c8d9fb5c2d2d6cdc9caced8dcc7b3a28e79644e3b2b1900000000000000000000000000000000031628395b71869bb0c6dac5af9a85705a3626140100000000000921364a5b6c8197a7b9cce1f1f1dcc7b29c87725443301c0800000000000a1f3347586f8499afbecedfd0c0b3a1998a84807f8082878e979faab4c1c8bbb4bbc8d5dac9b9a79b8574604b41311f0f0000000000000000000000000000000000000000000b20354a60758a9facacacacacac9a85705a45301b05000000000000000d22374d62778ca9acacacacacac99836e59442e1900000000000000000000000000000001162c41566b8196abc0d6e3cfbcab8d78625d5d5d5d5d5d5d5d5d5d5d5d5d5d5c574a3a271400000f24394e64798ea3c2d3d6c1ac97816c5545383b3a3b38454b5c677d92a5b7cbcab6a58f7a65503a251000000000000000021527374b607484959ea7aa9f998a7b655745321e090000000000182e43586d8398adc2d8d3bda8937e68533e2920364b60758a9fb5cadfcdbaa98c77614c3722273d52677c92a7bcd1dac5b09a85705b3726140100000000031628394b6073859ba9babcab9f8c7d6c60574b45383632282e2d2d2e2f2933363a39464b535e66707570615746331e0a000000000000000000000a1e304151626b7b82879cb2b29d87725a4935200c00000000000000000000000000000000000004182a3a4c5e6c8196a4b5c9dee1dedfe2ead7c7af9a846f5c4a361d0d0000000000000000000000000000000000192e43596e8398aec3d8c7b29d87725443301c080000000009192f404e63798c9fb4c5d6e8fff4dfc9b49f8a75604b35200b00000000000c22374c61778b9fb4cadfdac9b4a29983786f6b696b6d7279828b9ba3b4c0cecaced8e3cfbcab9e897862564532231301000000000000000000000000000000000000000000071c3043547287979797979797979787725d48331d08000000000000000b20354b60748b979797979797979786715b46311c0000000000000000000000000000000014293e53697e93a8bed3ebd9c9a5907a65504848484848484848484848484847433a2c1c0a00000c22374c61778ca4b6cad7c2ac97826d58493c3a383635363e4b6074879db2c7d3c3aa95806b55402b160000000000000000091d314556607480888d8e8b8479655d4b392816030000000001162b40566b8095abc0d5d5c0ab96806b56412b1d31455673889db3c8ddd7c7a48e79644f3924253a4f657a8fa4c8d8ddc7b29d88725544311d0800000000091e324657697e93a3b5c1b59f8d7d675f4b453931272f2d27211e1618191920222b293336404c515660564c4639291703000000000000000000001025394d5f6b808f989ca5b6b7a58d78624d38230d000000000000000000000000000000000000000c1c2f404b6075869cb1c6dbf1f3f4f6e2cdbaa9907b66503d2d1a010000000000000000000000000000000001162c41566b8196abc0d6c9b49f8a75604b35200b000000011527374c5e6f8499aabbcee4f4fff6e2cebaa98c77624d37220d000000000012273d52677c92abbccfe3cfbcab9a84736259565455585b636d79859aa2b4c8dfe2e9d6c6b59f8d7c665a4938281505000000000000000000000000000000000000000000000013253654697f8282828282828282816c57422d170200000000000000081c3043546b808282828282828282806b56412c160000000000000000000000000000000011263c51667b91a6bbd0e6d2bda7927d68523d333333333333333333333333322f271c0e0000000a1f33475872879cb1c2d2c8b39e8876635a534f4d4b4a4b4c4e546e8398aec3d8c4ae99846f59442f1a0400000000000000021527384556606a747879766f635b4b3f2e1b0a00000000000013293e53687e93a8bdd3d8c3ad98836e58432e1527385b70869bb0c5dbd1bba6917c66513c2722374d62778caabbcedfcab49f8a75604b35200b000000000c21364b6175889eb3c1b5a3957f6a5f4d413b42454644423c3632281e1e2b353840454747454138454b453833291b0b000000000000000000000417293a52677d919eadb2b6c3c3a6917c67513c271200000000000000000000000000000000000000001123374b5d70859ab0c5daeff2f0f4dfc9b49f8a76614c4232200f000000000000000000000000000000000014293e53697e93a8bed3cebaa98c77624d37220d000000081d314455667b90a1b3c8d9ebf1f3f9ead8c7a48f7a654f3a25100000000000172c41566c8196abc9d9dfcab59f8c796355483b3f403d4a4e5b6374859ab0c5daefe1cdb9a896806b5e4c3c2c1a0a00000000000000000000000000000000000000000000000008273c4f61696d6d6d6d6d6d6d6d6c63523e2a1500000000000000000114263651626b6d6d6d6d6d6d6d6d6b62513d2914000000000000000000000000000000000e24394e63798ea3c5d6e8d5bfaa95806a55402b1d1d1d1d1d1d1d1d1d1d1d1d1a140a0000000004182a3a54697f94a4b5c5ccb8a79b85786e6964626060606163666c8297acc1d7c5b09b86705b46311b0600000000000000000a1a2738454b5460636461584e493d2e21100000000000000011263b50667b90a5bbd0dac5b09b85705b3827152e43586e8398adc3d8d3bea9937e69543e2920354b60758a9fb4cadfcebbaa8d77624d38220d000000071a2d3e53687e93a6b8bfb09b8573604b414c50575b5c5a57514b453832303c484d565a5c5c5a56504b43363026180f01000000000000000000000a1f33475871869cb1bcc7cad3bea8937e69533e291400000000000000000000000000000000000000071b2d3e50657a8fa2b4c8dde4dddadde2cdbaa999836e604f3e2d1b0b0000000000000000000000000000000011263c51667b91a6bbd0d8c7a48f7a644f3a250f00000417293a4b6074869cb1bfd0e6dedcdee5e7d1bca7927c67523d27120000000000182e43586d8398adc2d8dac5b09b85705b49372b2a2b2d374859667b8d9fb5cadff3dec9b49e8976604b40301e0e000000000000000000000000000000000000000000000000000c2032434f54575757575757575757524535220f000000000000000000081834445156575757575757575756514434210e000000000000000000000000000000000c21364b61768ba7b8cce0d7c2ad97826d58422d18000808080808080808080705000000000000000c21364b6075869ca7b6c3c5b5a39b8c837e797776757577797b7e869cb1c6dac5b09a85705b45301b060000000000000000000a1a273136434b4e4e4c463a352c1f1003000000000000000e23394e63788ea3c5d5ddc8b29d88735645311d2b41566b8096abc0d5d6c0ab96816b56412c1c30435472889db2c7ddd9c8a48f7a654f3a25100000000d21364a5c71869cb1c4b3a18f7a6455464c5d656d70716f6c6660564b45404c5a626b6f72716f6b6560544b43362c1f12040000000000000000000c21374c61768ca4b5c9dcdfd4bea9947f69543f2a14000000000000000000000000000000000000000d22364a5c6f8499afc0d1dfd1c8c5c8d1d7c7b3a1937e695c4a392916030000000000000000000000000000000e24394e63798ea3c5d6d1bca7917c67523c271200000a1f334658697e93a4b6caddd3cac7cad3e0d4bfaa947f6a553f2a1500000000001a2f455a6f849aafc4d9d6c0ab96816b563d2c19141d3144556277889eabbccfe3f4e1cdb9a8947f6a5b4936251300000000000000000000000000000000000000000000000000031525323c3f4242424242424242423e35271705000000000000000000001626343d414242424242424242413d34261604000000000000000000000000000000000a1e33465773899eb3c8dedac5af9a85705a37261401000000000000000000000000000000000000091e3245566379899da5b4bbc1b5aa9f99938f8d8b8a8b8c8e90939ca4b6cad8c7ad98836e58432e1903000000000000000000000a151d2630353839363329211a0f0100000000000000000c21364b61768ba7b8ccdfcab59f8a75604b3620293e53697e93a8bed3d8c3ae99836e59442e1426365b70859ab0c5dad1bca7927c67523d27120000000f24394e64798ea4b5c5ae99846f5c4b57616f7b82858684827c756b60574c5e66788084878784807a73686054493d2f22120400000000000000000d23384d62788daabbcee2e2d0c0a7927d68523d2813000000000000000000000000000000000000061a2c3d4f64798ea1b3c7ded1c1b4b0b4c1d0cfbfb49f8b7a645746321e130000000000000000000000000000000c21364b61768ba7b8ccd4bea9947f69543f2a140006192c3c4c6176899eb3c2d3d1c2b6b1b6c2d3d7c1ac97826c57422d1700000000001a2f445a6f8499afc4d9d4bea9947f69543f2a141d2f3f4b6073849aa6b8c9dae1deddd6c6b49f8b79635443301c0700000000000000000000000000000000000000000000000000071520272a2d2d2d2d2d2d2d2d2d2a2217090000000000000000000000081621292b2d2d2d2d2d2d2d2d2c292116080000000000000000000000000000000000031729395c71869bb1c6dbdcc7b29d87725544311d0800000000000000000000000000000000000003162838495b637987969faab3b7bbb4aea8a4a2a09fa0a1a3a6a9b1b6c2d3cebaa9937e69533e29140000000000000000000000000208141c202324211f170c06000000000000000000000a1e32465773899eb3c8decfbcab8d78634d3823263c51667b91a6bbd0dbc6b09b86715b3929162e43586d8398adc2d8d4bfa9947f6a543f2a15000001152737556a8095aac2b8a6907b66505561758390979a9b999791898075635b667c8a959a9c9c9a968f877d73635b4c4030221202000000000000000b21364b60768a9fb4c4cdcec4b4a28d78634d38230e0000000000000000000000000000000000000c2135495b6e8398aebfd0d8c7b4a39ba3b3c0d0cdbaa99c8675614b41311f0e00000000000000000000000000000a1e33465773899eb3c8d6c1ac96816c57412c1700082035495a6b8196a7b8ccd1c0b4a49ca4b6cad9c4af9a846f5a3625130000000000182d43586d8298adc2d7d3bea9947e69543f29182a3b4b5d6a8095a2b4c5d5d7cdc9c8cbcdbaa99a8572604a3520110000000000000000000000000000000000000000000000000000030c1214181818181818181817150f0500000000000000000000000000040e1416181818181818181816140e0400000000000000000000000000000000000000192e44596e8399aec3d8dfcab49f8a75604b35200b000000000000000000000000000000000000000a1a2c3d495b6376818b959da6a9adb0b3b4bcb5b5bab4b2afb4bac7d3dfc9b49f8a77624c37220d000000000000000000000000000001080b0e0f0c0a04000000000000000000000000031629395b71869bb0c6dbdac9a5907a65503b2524394e64798ea3c6d6ddc8b39e88735746321e2b40566b8095abc0d5d6c1ac97816c57422c170200081d31445570859bb0c5b39e8874604b60738499a1acb0b1afaca89e95867965798b9fa9afb1b1afaba59d938579665e4c4030201000000000000000091e3245576e8398a6b4babab4a69a846f5b4935210c000000000000000000000000000000000005192b3c4e63798c9fb4cadfcebaa99b859aa2b3c6d7c7b6a498826d5f4d3d2c1a0a00000000000000000000000000031729395c71869bb1c6d9c3ae99846e59442f1908182e3f4d63788b9fb4c5d5c9b4a29a879cb1c7dcc7b19c87725443301c0700000000162b40556b8095aac7d7d5c0aa95806b55362626364759657b8d9fb4c0d1d7c7bab4b3b8c4c7b4a2917c6751402f1c090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6e2cebbaa8d77624d38220d00000000000000000000000000000000000000000f1f2c3d4958616c7880888e93989b9e9faba1a1a99f9d9a9fa9baced0c0ad98826d5948341f0b0000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3d8d3bea8937e69533b2a21374c61768ca8b9cce0cbb8a68b76614b3621293e53687e93a8bdd3d9c4ae99846f59442f1a00000b20354b6075899fb4c2ad97826d5454697e93a2b3bfc5c4b7b3b3b4a49c8a7a8197a9bac1b5b0acaeb4b2a39b8a7c665e4c3e2e1a0a000000000000031628394d627888989fa9a99f988878624d3c2c190600000000000000000000000000000000000b2035485a6d8297abbccfdfc9b49f8b77849aa8b9cdd3c2b2a0927d675b493828150200000000000000000000000000192e44596e8399aec3d8c6b19b86715c3929171426364b5d6e8399a9bacecfbcab9a847f94a9bfd4c9b49f8975604a35200b0000000011263b50667b90a9bacdd8c3ae99836e5443303043546277889dabbccfe1cdbaa99f9da6b8cbc0b09b86715e4c38230f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101619202020202020202020202020202020202020202020202020202020201e0802000000000000000000000014293e54697e93a9bed3ead8c8a58f7a65503a25100000000000000000000000000000000000000000010f1f2c3a464c5a636b73797e8286898a8c8c8c8b8a88848b9fb4c9c7b3a28e79644e3b2a180500000000000000000000000000000000070d0f1314110c0a0300000000000000000001172c41566c8196abc1d6dac4af9a846f5948341f33475874899eb4c9ded5c4a7917c67523b2b263b51667b90a6bbd0dbc6b19c86715c39291703000e24394e63798ea9babda8927d68536073879cb2c0c9bcb5a69d9ea7b0a89e89899eb3bfb3a39b97999fa9b5a89e8c7c665c4a382816030000000000000a203448596277828a8e8e8a8378625a49351e0e000000000000000000000000000000000004182a3b4d62788b9fb4c9d9d1c0ad98826d788a9eb4c0d1cebeb49e8a79635645321d1200000000000000000000000001172c41566c8196abc1d6c8b39e89735746331e1c304354657b90a1b3c7d6c6b59f8d7a7d92a8bdd2cdbaa98c77624c37220d000000000c21364b61768a9fb4c9dac8b39e8874604b353f4b6072849aa6b8c9d9cebdb49f8a889db3c5c9b5a3907b66503d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000a18232b2e35353535353535353535353535353535353535353535353535353535331d15090000000000000000000011273c51667c91a6bbd1e6d2bca7927d67523d2812000000000000000000000000000000000000000000010f1c29333c494d546064696d707375767776767472728b9fb4cac3af9a846f5c4a361d0d00000000000000000000000000000006101b2224282927211e170b00000000000000000014293e54697e93a9bed3dfcab49f8b77624c3928293a5c71879cb1c6dcd8c3ae99836e59483424394e63798ea3c6d6dec9b39e89745746331e0a0011273c51667c91a6c7c6a48e79644f63798ea5b6cabcab9f9188898e9aa2a89e9ea7b9b3a1998581838a9ba3b5aa9f8b7a645645321e0f00000000000005192b3b4859626d757979766e625a493c2c190000000000000000000000000000000000000b1f3447596c8196aabbceddc8b4a28e7a64697e93a2b4c7d7cdb9a89b8574604b40301e0e00000000000000000000000014293e54697e93a9bed3ccb8a78b76614b362129394b6073869bb1bfcfcdb9a897826d7b90a5bbd0d7c7a48f7a644f3a250f00000000091e3246576d8297abbccfccb8a7907b6651424b5d6a7f95a2b4c4d5d2c2b19f927d7e93a7b8ccc1af9a85705b4936210c000000000000000000000000000000000000000000000000000000000000000000000000000000000618283640434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a48312719090000000000000000000f24394e64798ea3c6d6e8d4bfaa957f6a55402a1500000000000000000000000000000000000000000000000c171f2c3536434a4e54585b5460616161605661778caabbcab6a5907b65503e2d1b0000000000000000000000000000010f1a212d36393e3e3c3633291b14060000000000000011273c51667c91a6bbd1e2cebbaa957f6a5746322f44596f8499aec4d9dfcab49f8b78624d3c2c364b61768ba8b9cce0ccb9a78b76614c36210c0014293e54697e93a9beb9a88b766152677d92a7c3cab59f8d7d737479849aa1b4b3b9c5ae9983726c6e78859ba4b6a99d8775604b3d2d1a070000000000000d1d2b3b484d5660636361574d483c2c1e0e00000000000000000000000000000000000417293a4c61778a9fb4c8d8d4c4b09b85705c6073859ba9bacdd6c6b5a396816c5e4c3c2b1909000000000000000000000011273c51667c91a6bbd1d6c5a38e78634e3923324657687d92a3b5c9d4c3b49e8a7763788da3c5d5d1bca7917c67523c271200000000031628394e63798c9fb5c4d5c5b09b8570604e59657b8c9fb4c0d0d6c5b5a397826d75889eb3c8c8b4a28e79634e39230f000000000000000000000000000000000000000000000000000000000000000000000000000000001023364653586060606060606060606060606060606060606060606060606060605f5d443727150200000000000000000c21374c61768ca8b9cce1d7c2ac97826d57422d18000000000000000000000000000000000000000000000000040e19202530353b484c545a556060555d5861768ba5b6c7b29d87725d4b37201000000000000000000000000000000f1f2c353e4a4f5354514b4639312414070000000000000f24394f64798ea4c6d7e9d9c8b39d8875614b3d2d42576d8297acc2d7e2cebbaa96816b5a493733465774899eb4c9ded6c5a28d78634d38230e00162b40556b8095aac0b49e89745854697f94a9bec4af99846f5f5c6473839aa6b8cbbda8937e68545a6276869caab6a595806b5b4a36210d000000000000000d1d2b3438454b4e4e4b4639342b1d0e0000000000000000000000000000000000000a1f3346586b8095a9bacddfcbb7a6917c67525463798b9fb4c1d2d2c1b09f917c665a4837261401000000000000000000000f24394e64798ea3c6d6d0bba5907b66503b2b3c4b6175889db3c1d2cab7a5947f6a60768ba7b8ccd4bfa9947f6a543f2a1500000000000b21364a5b6d8297a6b7c7c8b4a2937e695e6177889daabbcee0ccb9a79b8574606b8196abc2d1c0ab95806b563d2c1a06000000000000000000000000000000000000000000000000000000000000000000000000000000162b4053646e757575757575757575757575757575757575757575757575757575756f5544311d0800000000000000000a1f33475874899eb3c9dedac4af9a856f5a36261401000000000000000000000000000000000000000000000000000c1c2937444b59626a7073757574726e6772879db2c2ad98826d583f2f1c02000000000000000000000000000e1e2c3d494e5c6468696661574e423225140000000000000c21374c61768ca8b9cde1e0cbb8a6957f6a5b4a3b40566b8095abc0d5ead8c8b49f8b7863554432395d72879db2c7dcceb9a48f79644f3a240f00162c41566b8196abc0b29d88735d556a7f94aabfbfaa95806a554a556177889eb3c6bda8937d6853485863798c9fb4b49f8b79634e3b2a1805000000000000000d1820283236393936322920190d000000000000000000000000000000000000031628384c6176899eb3c7d7d7c7b29d8774604b495b6a7f94a3b5c8d8cdbdb39e8978625544311d11000000000000000000000c21374c61768ca8b9ccd3bda8937e68533e35485a6b8095a6b7cbd1c0b29d8775605773889eb3c8d6c1ac97816c57422c170200000000071a2d3d4c6176889da9bac8c0b49f8b7c67728399a6b7c8d9cdbcb39e8978635663798ea4b6cac7b29d87725b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8d74604b36200b00000000000000000417293a5c71869cb1c6dbdcc7b29c87725443301c080000000000000000000000000000000000000000000000000919293a4755606b777f85888a8a8987837d758197acc0ab96816b56412c160000000000000000000000000005192b3c495b6370797d7e7c7668604f43321e0e00000000000a1f33475874899eb4c9dee7d5c4b49f8b7963594a3d556b8095aac0d5ded1c8baa99a8473604b45435472879cb2c7dcd0bba5907b66503b261100172c42576c8197acc1b29c87725d53697e93a8bebfa9947f6a54374759697e93a8b9c0aa95806b553a4a5b6c8196abbbaa98836e5947341f0b0000000000000000050a161e212424211e160b0500000000000000000000000000000000000000091e3245566a7f94a7b9cce1cdbaa9947f6a55443d4b6073859baabbcee0ccb8a79a8473604b3f2f1d0c0000000000000000000a1f33475874899eb3c9d5c0ab95806b56403e4d62788a9fb4c4d5c9b4a2917d67565b71869bb0c6d9c4af99846f5a442f1a0000000000000f1f334758647b8b9faabac7baa99f8b7d7f94a1b3c4d4d1c0b09e917c665a4a5b72879cb1c7cab6a58e78634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000162b41566b80969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fab8d78634d38230e000000000000000000192f44596e8499aec3d9dfc9b49f8a75604b35200b00000000000000000000000000000000000000000000000115273747586174808a949a9e9fa99f9c9892898298adc2ad97826d583a2a17040000000000000000000000000b2035485a6379858e939391897e69614f3c2b19050000000004172a3a5c71879cb1c6dce7d9cdbaa99c8777645c54576d8297adc2d7d1c0b4afb4a296816d6057536074899eb4c9ded0baa5907b65503b261000162b41566b8096abc0b29c87725d51677c91a6c5c0ab96816b56373a4b61768a9eb4c4af9a846f56453d4d62788c9fb4b49f8b77624c37220e0000000000000000000003090b0e0e0c0a030000000000000000000000000000000000000000021527374b6075889eb3c5d6dec9b49f8a77614c3731445564798b9fb4c2d2d6c5b4a295806b5d4b3b2a180800000000000000000417293a5c71869cb1c6d8c2ad98836d58364b5c6e8298a9bacdcfbcab9b85705f4d596e8399aec3d8c6b19c87715c3a2a180400000000000417293a4b5d677d8c9fa9b7c3baa99f928c9fb4bfd0d5c4b4a296806b5e4d3d566b8096abc9d4c3a9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a5907a65503b2510000000000000000002172c41576c8196acc1d6e2cebaa98c77624d37220d0000000000000000000000000000000000000000000000081d314455617685969fa9afb3b5bab4b2ada79e98a0b2c5b09a85705847331f0c00000000000000000000000417293a4d6278889ba3a8a9a79e937f695a4835200b00000000001a2f445a6f8499afc4d9d9c9bcb4b4a59c86796e696975889db3c8ddc8b4a29aa2b09f9682756b686b7c91a8b9cde1d3c3a38e79644e39240f00152a3f556a7f94aabfb39d88735e4e63788da7b8c3ae99836e55443246576d8298adc4b49f8a75604b36485a6f8499aebbaa947f6a553c2c190600000000000000000000000000000000000000000000000000000000000000000000000000081d314455697e93a6b8cbe4d1c0ac97826d58473327374a5c6b8095a4b5c8d9d1c0b49f8d7b655947362513000000000000000000192f44596e8499aec3d9c5b09a85705b4354647a8fa0b2c7d7c6b59f8d7a644f41566b8196abc0d6c9b49f89745947341f0a0000000000000c1c2e3f4d5f677c8b9da5b1bebab4ab9fabbccfd9c9b8a69a8473604b403b51667b90abbcc4c3ad98836e5839281603000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbcacacacacacacacacacacacacacacacacacacacacacabda8927d68533d281300000000000000000014293f54697e94a9bed3ead8c7a48f7a644f3a250f00000000000000000000000000000000000000000000031629394b6073849aa3b4bac7c4b7b2aba9abb2b3adb2becab49f8b77614c3a291704000000000000000000000a1f3346586e8398a6b5c1c5b9b39f8b78624d38220d0000000002172c42576c8197acc1d6cfbcab9f9fa9a49c8c837e7e859ba6b7cbd8c8af9a8599a1b09f9788807d808a9eb4c6d6dfcab6a58c77624c37220d0014293e53697e93a8beb39e8974574a6074899eb3c8b39e8974604b353950657b90a6b7baa9917b66513a3c52687d92a7c3b29c87725b4935210c000000000000000000070d0f1314110c0a03000000000000000000000000000000000000011426364b6074879db2c4d5dcc8b4a28e79634e3a2a192d3d4b6074869caabbcee2cfbcab9d8877615443301c100000000000000002172c41576c8196acc1d6c7b29d8872554a6072859bb0becfcdbaa898826d5c4a3e54697e93a9bed3cdbaa88c77614c37220c00000000000000102030414d5e667a8797a0b0b4c0bcb4bcc9d9cfbcab9e887762554431364c61768b9fafafafaf9d87725745321e0900000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3c5d5e7dfdfdbcec5c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2bfaa95806a55402b1500000000000000000012273c51677c91a6bcd1e6d1bca7927c67523d2712000000000000000000000000000000000000000000000a1e324657697e94a2b4c1cdc0b3a69d9694969ca4afbccccebbaa957f6a5847331f0b000000000000000000000c21364c61768a9fb4c5d1d6ccbaa9947f69543f2a140000000000152a3f546a7f94a9bfd4cab49f8d8a9fb4aa9f9893939ba3b5c4d4cebbaa907b8399a6b1a69d9692959ea8b9cce4dcc7b29d87725947341f0b0012273d52677c92a7c8b9a88b76614b546d8298adc3b9a78f7a65503e354b6074889db2c7ae98836e5846374d62778ca5b6b6a58d78634d38230e0000000000000006101b2224282927211e170b0000000000000000000000000000000000081c304354687d92a5b7cae2d4c3af9a846f5b4a361c0f1d314556647a8c9fb4c3d3d9c9b7a6998372604a3e2e1b0b0000000000000014293f54697e94a9bed3cab49f8a756056677d92a3b4c8d4c4b49f8a77624d3e3c51667c91a6bbd1d7c6a48f79644f3a240f0000000000000002132330404c5c6476828f9aa2b4c8cacfd9d0bfb49f8d7b65594837273346587084989a9a9a9a9a8b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8cce0f5e1cebdb1acacacacacacacacacacacacacacacacac98826d58432d180300000000000000000f24394f64798ea4c6d7e9d4bfa9947f6a543f2a15000000000000000000000000000000000000000000000c21364b6176889eb3c0d0c7b3a29a88817e8087959dafbccdc8b39e8976614c3a2917040000000000000000000f24394f64798eaabbcee3e8d8c7ad97826d58422d18000000000012273d52677c92a7bcd1cab59f8d7e939fb1b4aea9a8b0b5c1d2dfc9b49f8a7677889da9b7b3aba8aab4b9c6d6e0cfbfac97826d573b2a1805000f243a4f64798faabbc6a38e79634e51667b90a4b6c5ae99836e5c4a3843546b8096abc1b49f8a76614c36485972879cb2c3a8937d68533e28130000000000010f1a212d36393e3e3c3633291b14060000000000000000000000000000000b20354b6073869cb1c3d4dfcab6a5917c66513d2d1a021527384a5c6b8096a4b6c9dad5c4b3a1947f695c4b3a29170400000000000012273c51677c91a6bcd1cebbaa8d77626075879db2c1d1cbb7a6957f6a594834394e64798ea3c6d6d1bca6917c67513c27120000000000000000051322303e4b57616d7a849ab0c5dae3d4c3b3a1957f6a5d4b3b2b19293a4d63788385858585858478624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000091e32465773889eb3c8ddf3d9c5b19f97979797979797979797979797979797979785705a45301b0500000000000000000c22374c61778ca8b9cde1d7c1ac97826c57422d170200000000000000000000000000000000000000000012273c51677c91a7b8cccdbaa99a84756b696b737f959eb0c3ccb9a795806b5846331f0a0000000000000000000e24394e63798ea7b9cce0e2d4c4ac97816c57422c1700000000000f253a4f647a8fa4c8d8cfbcab8b748197a0b5bcc9bec6c9d2decebdaf99846f647a8b9fa9b7c4bdc0c9ccd6ddd0c2b2a18e79644e39240f00000b21364b60758a9fb4bba6917c66514b6073879cb2c1b59f8d7a645645364e63798ea3b5baa9937d68533c3b596e8499aec1ac97816c57422c1702000000000f1f2c353e4a4f5354514b46393124140700000000000000000000000000091c2f4051677c91a4b6cad7d6c6b29d8773604b35200f000a1a2e3e4b6075869cabbccfd7d0bfb49f8b7a645846331f140000000000000f24394f64798ea4c6d7d9c8a48f7a656a7f94a5b7cbd1c1b29d8775604b3b2b374c61768ca8b9cdd4bea9947f69543f2a140000000000000000000412202e39464c5c687d92a7bdd2dfcab7a5998372604a3f2f1d0d2035495a636d6f6f6f6f6f6f625a4835200b0000000000000000000000000000000000000000000000000000000000000000000000000000031628395b71869bb0c6dbecd7c2ac97818282828282828282828282828282828282806b55402b160000000000000000000a1f33475874899eb4c9ded9c4af99846f5a442f1a00000000000000000000000000000000000000000002182d42576d8297acc5d5c9b49f8b7762575454606b8096a5b7cbc5b39e8976614c3827150200000000000000000b20364b6075899eb3c0cccec6b7a6927d68523d281300000000000d22374d62778caabbc1c1b8a78b767282969fabb6c2c8cbcdc9beb19f8f7b655c667c8b9da6b5bcc9c9cdcac8c0b4a499836e5c4a36220d0000091e32455671869cb1c0ab95806b564354687d93a3b5bcab9c8674604b434a5b71869bb1c7b09a85705a4941566b8096abc0af9a85705a45301b050000000e1e2c3d494e5c6468696661574e42322514000000000000000000000000000f23384c5e71869bb0c2c2c2c2b9a8947e695443301c080000101e324556657b8d9fb5c2c2c2c2bbaa9d8776614c42311a0a00000000000c22374c61778ca8b9cdd1bca7927c67778a9eb4c3d4c8b4a3927d675745321f33475874899eb4c9d6c1ac96816c57412c170200000000000000000002101b2935495b71869bb0c6dbcfbfb29d877661544330211106192c3c494d585a5a5a5a5a5a4d483c2b1906000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aec3d8e1ccb6a18c776d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6b62503d281400000000000000000004182a3a5c71879cb1c6dcdcc7b19c87725c3b2a18050000000000000000000000000000000000000000061b31465b70869bb0c5d9c3ae99846e594839434b6074879db2c7ccb9a7947f6a5645311d090000000000000000081d3144556b8095a2b3b8bbb4a89d8875604b36210b00000000000b20354b60758a9facacacaa9e89736072808d9ca4aeb3b7b9b4afa097816d5d4c5e667b88979fabb0b4bab5b3aea29a8676614c3e2d1b07000002162838586d8298adc7af9a856f57464b6073859baabbb5a497816c60544854697e93aabbb4a28d78634d3653687e93a8bdb29d87725d48321d00000005192b3c495b6370797d7e7c7668604f43321e0e000000000000000000000004182a3a50667b90a3acacacacacac9e8976614c362614010000031628384b5d6c8197a4acacacacacaca598826e604e38281602000000000a1f33475874899eb4c9d4bfa9947f6d8297a8b9cdcfbeb09b8572604a3928172a3a5c71879cb1c6d9c4ae99846f59442f1a0000000000000000000000000e23384e63788da3b5c9dbc6b2a0907b65584736251303000e1e2c35384345454545454538352b1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8196abc0d6e3ceb9a48e79645757575757575757575757575757575755504433210d000000000000000000001a2f44596f8499aec4d9dec9b49f89745947341f0b0000000000000000000000000000000000000000081d32485d72879db2c7d5c0aa95806b553b2a3245566a7f94aac6d6c5b39e8875604b36200b0000000000000000021527374b607484959ea7aa9f998a7b655745321e090000000000081c30435472879696969695907f6a54606b7b8691989da6a89e99918274604b404c5d6577828c959b9fa99f9e999184776258463320100000000012273d52677c92a9bab49f8a76614b4354647a8b9fb4bdb19f96817262595062778b9fb4c0aa95806a544352677d92a7bcb49e89745f4925130000000b2035485a6379858e939391897e69614f3c2b1905000000000000000000000a1f3447597085979797979797979794816c5846331808000000000a1a2e3f4b617586959797979797979797937d685645321e090000000004182a3a5c71879cb1c6d6c0ab96817a8c9fb4c6d7c7b2a08f7a645443301b1a2f44596f8499aec4d9c6b19c86715c3a2a1704000000000000000000000014293f54697e94a9c1d2d1c0ae98836e5d4c3a2a18080000000e1920232e3030303030302320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8bed3e6d1bca6917c6751424242424242424242424242424242403d3326160400000000000000000002172c42576c8197acc1d6e1cdbaa98c77624c37220d0000000000000000000000000000000000000000091e34495e73899eb3c8d4bfa9947f6a543f2a28384e63798ea8b9cdccb8a78f7a65503a2510000000000000000000091d314556607480888d8e8b8479655d4b3928160300000000000114263654697f81818181807b6a61504a5d65737c83888b8b89847c6d605645323f4b59626d788085898b8a88837c726259483a291702000000000c21364b61768a9fb4baa9917c67513b4a5c697e939fb1bdb09f9684786d66636f8499aec4b29d8773604a51667c91a6bbb49f8a755443301c07000417293a4d6278889ba3a8a9a79e937f695a4835200b000000000000000000000c22374c61778182828282828282827f75614b3a2917000000000000111e3246576176808282828282828282828175604b36210b00000000001a2f44596f8499aec4d8c2ad9882849aabbccfcdbaa998826d5c4b362513172c42576c8197acc1d6c9b49e89745847331f0a0000000000000000000004192e44596e8399aec3d8c8b4a28e79634e3f2f1c0c0000000900060c0e181a1a1a1a1a1a0d0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbd0e6d3bea9947e69543f2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b282116080000000000000000000000142a3f54697f94a9bed4e9d7c7a48f79644f3a240f0000000000000000000000000000000000000000081d32485d72879db2c7d5c0aa95806b55402b20354a6074899eb4c9d5c5aa947f6a553f2a15000000000000000000021527384556606a747879766f635b4b3f2e1b0a0000000000000008273b4f61696c6c6c6c6a655d50433f4c5560666e737576746f665e4b4538282e3b474c5a636b70747675736e666054483b2b1c0c00000000000a1e3346576f8499aec4ae99836e59483e4f606c81969fb4bab0a29a8b827b78777f94aabfb6a58f7a654f51667b91a6bbb59f8a75604a35200b000a1f3346586e8398a6b5c1c5b9b39f8b78624d38220d000000000000000000000a1f344759616d6d6d6d6d6d6d6d6c6a615746321b0b000000000000031629394758616a6d6d6d6d6d6d6d6d6d6c605645321e090000000002172c42576c8197acc1d6c9b49e899aa2b4c9d4c4b49f8a78624d3e2e1808152a3f546a7f94a9bfd4ccb9a88c76614c37210c00000000000000000000021527375c72879cb1c7dac5b09a85705b4a36211100090e101e1e1a16120e0b08010005050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3c5d6e8d6c1ac96816c57412c1818181818181818181818181816140d0400000000000000000000000012273c52677c91a7bcd1e6d1bca7917c67523c27120000000000000000000000000000000000000000061b30465b70859bb0c5d8c2ad98836d583f2e1c30435472879cb1c7d6c1ac96816c57412c170b0000000000000000000a1a2738454b5460636461584e493d2e211000000000000000000c1f32434f545757575755504c3f332f37444b5159566061575a514c4032281a1d2a343c494d555b5761605659514a43362b1d0d0000000000000317293952677d92a6b7b49f8b77624c3a424a607281939fa9b4b4a99f97908d8c949dafc2c3ac97826d5652687d92a7bdb49f89745443301c07000c21364c61768a9fb4c5d1d6ccbaa9947f69543f2a140000000000000000000004182a3a474c575757575757575757554b4639281600000000000000000b1b2a3a474c55575757575757575757574b45382816020000000000142a3f54697f94a9bed4ccb9a89ea8b4c0d1cbb7a695806b5a483520100012273d52677c92a7bcd1d6c6a38e79644e39240f00000000000000000000081d31445574899fb4c9d4bfaa947f6a553d2d1a03111c23263333302c2824201d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8cce0d9c4ae99846f59442f1a000202020202020202020202000000000000000000000000000000000f243a4f64798fa4c7d7e9d4bea9947f69543f2a14000000000000000000000000000000000000000002172c42576c8197acc5d6c7b29d87725d4b36262d3e5c71869cb1c6d7c2ad97826d584233291b140600000000000000000a1a273136434b4e4e4c463a352c1f10030000000000000000031424323b3f41414141403b382f21192631353c38454b4b46393c382f1d150a0d181f2c35384039464b4b45383c353025180d00000000000000000b20364b6074889db2bbaa95806b5847334354606c7e8b9ba2b0b4b4ada5a2a1aaafbbccc9b39e89756054697e94a9beb39d88735e48251300000f24394f64798eaabbcee3e8d8c7ad97826d58422d1800000000000000000000000c1c2a34374242424242424242423f3632281b0b0000000000000000000c1c2a333740424242424242424242413632281a0a00000000000012273c52677c91a7bcd1d6c6b9b4b9c6d1d2c1b29d8875614b3c2b1902000f253a4f647a8fa4c7d8d1bba6917c66513c2711000000000000000000000b20364b60758ba9bacdd0bba6917b66513c261111212f383b484845413d39353127190c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465773899eb3c8dedbc6b19c86715c3a2a17040000000000000000000000000000000000000000000000000000000d22374c62778ca9bacde1d6c1ac97816c57422c1702000000000000000000000000000000000000000011263b51667b90a7b9cccab7a58f7a65544336374a5c73899eb3c8d6c1ac96816c574c46393124140100000000000000000a151d2630353839363329211a0f010000000000000000000006141f27292c2c2c2c2b26231c1109141d202727313636322926241d12020000050e1920232b28323636312727201c1308000000000000000000091d3145566a7f94a8b9b39e8976614c3d36434a60697985919ba3aaafb4b9c6bbbbbbc5b8b3a8917c67566b8096abc0b09b85705b46301b00000e24394e63798ea7b9cce0e2d4c4ac97816c57422c170000000000000000000000000c181f222d2d2d2d2d2d2d2d2d2a211e160b00000000000000000000000c181f222b2d2d2d2d2d2d2d2d2d2c211e160a000000000000000f243a4f64798fa4c7d7e4d6ccc9ccd6ddc9b5a3927d685746321e0e00000d22374d62778ca9baced3bea9947e69543f2914000000000000000000000b20364b60758ba8bacdcfbaa48f7a654f3a25101c2f404c505e5e5a56524e4b4437291c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395c71869bb1c6dbdec9b49e89745847331f0f0f0f0f0f0f0f0f0f0f0b09030000000000000000000000000000000b1f34475974899fb4c9ded9c4ae99846f59442f1a0000000000000000000000000000000000000000000b21364b6075899eb3c5d4c3b09a847360544c4c55647a8fa7b8ccd4bea9947f6d6761574e42311f0f0000000000000000000208141c202324211f170c0600000000000000000000000000030c12141717171715100e09000001080b11151d20211e16110f09000000000000060c0e16161e21201d15110b070000000000000000000000021527384c6176899eb3b9a896816b5b4a3830424f5c64707c858d959a9ea8a4a5a6a6a4a79e9892836e5670859ab0c2ad97826d58422d1803000b20364b6074899eb3c0cccec6b7a6927d68523d281300000000000000000000000000040a0c181818181818181817150c090300000000000000000000000000040a0c15181818181818181818170b090200000000000000000d22374c62778ca9bacde1e8e1dee1e5cfbeb09b8572604a3928160000000b20354b60758a9fb4c9d6c1ab96816c56412c1701000000000000000000091d31455674899fb4c9d0bba5907b66503b261123384c5e6573736f6b67636055473a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3d8e1ccb9a88c77614c372424242424242424242424211e160a000000000000000000000000000005182a3b5c72879cb1c7dcdcc6b19c87715c3a2a17040000000000000000000000000000000000000000091e3245566a7f95a6b8c8c8b4a29680726561616573849aafc5d6dec8b39e89827c7669604e3d2c1a060000000000000000000001080b0e0f0c0a0400000000000000000000000000000000000000020202020000000000000000000002090b0c0a030000000000000000000000000003090c0b09020000000000000000000000000000000a1f3346586a7f94a4b6b49f8c7963564532323d4a4e5e6670798085898d8f9091908f8c88837d746060758a9fb4c2a8937e68533e29130000081d3144556b8095a2b3b8bbb4a89d8875604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475974899fb4c9def4f5f3ead7c7b2a08f7a655443301b0b000000081c30435472879db2c7d9c3ae99846e59442f1900000000000000000000021527385c71869cb1c6d4bea9947f69543e2d1b2e3f50657c888885817d7974615847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6e8d6c6a48e79644f3939393939393939393939393632281a0a00000000000000000000000000001a2f455a6f849aafc4d9dec9b49e89745847331f0a0000000000000000000000000000000000000000031628384b6175889eaabbcdc0b09e96847b77767a849aa2b4c8e3e0ccb8a79e98918a7e695b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b6074869cb1bbaa9b8574604b43332d36404c515b636b707578797b7c7b7977736e676056667b90a9bab5a48d78634e38230e0000021527374b607484959ea7aa9f998a7b655745321e09000000000000000000000000000000040a0c2020202020202020200e0c060000000000000000000000000000000000000000000000000000000000000000000000000005182a3b5c72879cb1c7dcf1fff6e2cdbaa998836e5d4b36251300000000011426365a6f859aafc4dac6b19b86715c3a29170400000000000000000000182d42586d8297adc5d5c4af9a846f5c4a392c374b5d71869c9d9a96928e8b76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bed3e6d1bba6917c66514f4f4f4f4f4f4f4f4f4f4f4f4b453828160300000000000000000000000002172d42576c8297acc1d7e1cdb9a88c77614c37210c0000000000000000000000000000000000000000000a1e334657657b8c9fb4bac7bdb0a29a908c8b8f9aa2b4c0d0d6d0d5c5b8b3ada99f8c79634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f1213131313131313120b08020000000000000000000000000b1d314455657b8f9fb1b5a397816d615043312730393d494e555560636466666664615859524b5c6f849aafc6b19c86715b4935210c000000091d314556607480888d8e8b8479655d4b3928160300000000000000000000000000000b171f2135353535353535353523211a0e000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4d9effae7d5c4b49f8b78624d3f2e18080000000000182d42586d8297adc2d7c9b39e89745846331f0a0000000000000000000012273c52677c91a7b8cccab59f8d796457493c4655657a8fa4b3afaba79f8a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbd1e6d3bea9947e6964646464646464646464646464605645321e0900000000000000000000000000152a3f546a7f94a9bfd4e9d6c6a48e79644f39240f000000000000000000000000000000000000000000031729394b5d697e929fa9b6c2c0b4afa5a1a1a5afb4c0cdc9c1bbbbbbbbbbc7baab937e69533e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a151d2024272828282828282828201d15090000000000000000000000021527374b5d6c8197a3b4b19f947f6a614b44372c242c353837444b4d4f5051514f4c473a4556647a8fa2b4b9a8947f69543d2c1a06000000021527384556606a747879766f635b4b3f2e1b0a00000000000000000000000000000b1b2933364a4a4a4a4a4a4a4a4a38352c1f0e000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1d7ecf4e0cbb7a695806b5a48352110000000000000152b40556a8095aabfd5ccb9a78b76614c36210c000000000000000000000b21364b6075899eb3c4cfbcab9b8575635b58576173859bb0c2c4c0b29d88725544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c6d6e8d8c2ad98827a7979797979797979797979797a74604b36210b0000000000000000000000000012273d52677c92a7bcd1e6d1bba6917c66513c2711000000000000000000000000000000000000000000000b1b2f3f4f60697d8b9ca4b2b6c3c4bab6b6bac4c7c7bab4aba6a6a6a6a6a6a6a696816c56412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2731363a3c3d3d3d3d3d3d3d3d3631271909000000000000000000000009192e3f4b6074859ba6b7af9d947f6c6055493c33292123263135383a3b3c3b3a3737444b6074859bb1c0b49e8976614c36210f00000000000a1a2738454b5460636461584e493d2e211000000000000000000000000000000417293a465c5f606060606060605f4e493d2c1a060000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4e9e5d2c1b39d8876614b3c2b190300000000000013283d52687d92a7bdd2d6c5a38e79634e39240e00000000000000000000091e3245576a7f94a6b7c8c9b5a39b8578706d6e758298a3b4c8d2c2ad97826d58372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8b9cce1dac6b2a0988e8e8e8e8e8e8e8e8e8e8e8e8e8e7b65503b2510000000000000000000000000000f253a4f647a8fa4c7d7d7d3bea9947e69543f29140000000000000000000000000000000000000000000000112132424f5f687a86929da5abafb3b7c4bcb4b2aea99f96909090909090909090836f59442f1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b283238454b4f5152525252525252524b44372715020000000000000000000000111d3145566277889da8b9ae9d948174635b4c4639362c292624242526282c363c4955606d8297a3b5b7a695806b5846331f0a0000000000000a1a273136434b4e4e4c463a352c1f100300000000000000000000000000000a1f3346586e757575757575757575635b4935210e000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1e7dec9b5a3927d685746331e0e0000000000000010253b50657a90a5c9d9d0bba6917b66513c261100000000000000000000031628394b6175889daabbcec1b4a39b8c8582838898a0b2c1d1c8b5a4917c66513c2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb3c9dee1cfbeb2ada4a4a4a4a4a4a4a4a4a4a4a4a4937d68533e2813000000000000000000000000000d22374d62778ca9bac2c2c2c1ab96816c56412c17010000000000000000000000000000000000000000000003142432414e5c64737d878f959a9da6a0ab9f9d99938a817b7b7b7b7b7b7b7b7b7b654f3a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2839464b566064676868686868686867605544311d080000000000000000000000021527384859647a8a9ea7b8ae9f9685796b61574e493d3e3b3a393a3c3e3d494e5a62748197a0b1bcab9d8875614b3a291704000000000000000a151d2630353839363329211a0f010000000000000000000000000000000c21364c61768c8a8a8a8a8a8a8a8c79634e3c2c1906000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7d7cfbfb19b8673604b39291700000000000000000e23384d63788dabbccfd3bea8937e69533e291400000000000000000000000a1e324657657b8c9fb4bbc8c1b4ab9f9a97999ea7b2becfcebbaa9c8672604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5c71869cb1c6dbecdccfc6c2b9b9b9b9b9b9b9b9b9b9b9b9ab95806b56402b16010000000000000000000000000b20354a60758a9facacacacacac99846e59442f19040000000000000000000000000000000000000000000000061423313e4b546067737a8085888a8b8b8a87837d776c666666666666666666655d4b37220e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394657616b757a7c7d7d7d7d7d7d7d7d74604b36200b0000000000000000000000000a1a2b3b4b5c647a899ea7b5b0a39b8b80766c635b5753504f4e4f5153575b636d7884979fb1beb59f8d7c665746321c0c0000000000000000000208141c202324211f170c06000000000000000000000000000000000011263b51667b90aa9f9f9f9f9faa98826d5a4935200e000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bac2c2c5b2a18f7b655443301b0b00000000000000000b20364b60758a9fb4c2c2c0ab96816b56412c160000000000000000000000031628394b5d697f939faab7c4c9bcb4b0adaeb3b8c5cfc8bbb49f8c7b655443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e8499aec3d9eeece1dad8cecdcdcdcdcdcdcdcdcdcdc3ae98836e59432e1900000000000000000000000000071c3043547287979797979797979786715c46311c070000000000000000000000000000000000000000000000000513202e36434b5460656b707375767675726e6861585151515151515151514f4b3f2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1e324657617580898f9192929292929292806b5544311d08000000000000000000000000000d1d2e3e4b5c647a899ba3b1b5a99f95898179726c696664636566686d7279828b9aa2b1bdb1a095806b5e4c39281600000000000000000000000001080b0e0f0c0a0400000000000000000000000000000000000003172939566b8096abb5b5b5b5b5b49f8c78634d3c2b19060000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9facacacaca799836e5d4b362614000000000000000000091d31455673889dacacacacac99836e59442e190000000000000000000000000b1b2f3f4f61697e8c9da6b3b8c5c7c5c2c3c8c9c6bfb3aa9f937f695d4b362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c8196acc1d6ebecdccec5c2b8b8b8b8b8b8b8b8b8b8b8b09b86715b3a2917040000000000000000000000000013253654697f8282828282828282806b56412c160100000000000000000000000000000000000000000000000000021018263036434a50565a55606161605459534c473a3b3b3b3b3b3b3b3b3a372e2110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d30404b617584969ea8a6a7a7a7a7a79b8573604b37271502000000000000000000000000000010202e3e4a5c647885969fb1b6b4a79e968e87827e7b79797a7b7d82878e989faab4bab49f978272604a402f1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465770869bb0c5cacacacebbaa97826d5a4835200e000000000000000000000000000000000000000000000000000000000000000000071c30435472879797979797958978624d3f2e1808000000000000000000021527385b70859797979797979786715b46311c00000000000000000000000000112132434f60697b88949ea7adb1b4bac6b9b3b0aaa19a8b7e69614f3f2f180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9bed3e9e1cebeb1ada2a2a2a2a2a2a2a2a2a2a2a29e89745847331f0a0000000000000000000000000008273c4f61696d6d6d6d6d6d6d6d6b62513d29140000000000000000000000000000000000000000000000000000000008141c2530353a4037444b4b4b4a43363e37332a262626262626262625221b100300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4c5e6d8197a2b4b9c6bdbdbdb39e89786255443119090000000000000000000000000000000210202e3e4a5a637481909ca4b3b8b3aba59d9793908f8e8f9193979da5adb4bbb4a99f93817360544330221200000000000000000000060c0e1515100e080000000000000000000000000000000000000000000c21364b61768b9fb4cadfdfebd9c8b49f8b78624d3c2b190500000000000000000000000000000000000000000000000000000000000000000013253654697f82828282828079635a48352111000000000000000000000013293e53687e82828282828282806b56412c160000000000000000000000000003142532424f5d65757f8991979c9fa9a1a89e9b958f847a68604f433221110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcd1e6dac5b1a0978d8d8d8d8d8d8d8d8d8d8d8d8d8c76614c37210c000000000000000000000000000c2032434f54575757575757575756514434220e00000000000000000000000000000000000000000000000000000000000108131c20252b263135363635302528221f181111111111111111100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e11141516151413101f344759667c919fb1c0cdd7d3c2b19f917d675a4837271500000000000000000000000000000000000210202d3c4956606c7b86939ea6afb4b6b2aca8a5a4a3a4a6a8acb2b7c0b4afa29a8b7e6c605544362513040000000000000000000e1920232a2a25221b10020000000000000000000000000000000000000011263b50667b90aabbcee2f7f4e2cebbaa97816c5a4835200d00000000000000000000000000000000000000000000000000000000000000000008273c4f61696d6d6d6d6c6b635b493c2b1903000000000000000000000011263b4e60686d6d6d6d6d6d6d6b62513d29140000000000000000000000000000061424323f4c566069757c82878a8b8c8b8986807a6f645c4e4232251503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6d7e9d7c2ad9782787878787878787878787878787873604b36200b00000000000000000000000000031525323c3f4242424242424242413d342616050000000000000000000000000000000000000000000000000000000000000000070b1016141d202121201c13130c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b131c202326292a2b2a29282531424c6277889eb3bdcee1d7c7b6a497816d5f4d3c2b190900000000000000000000000000000000000002101e2c38454b5e66737e88929aa2a9afb4b9c6b9b8babbc8bbb4b0aaa29a90847969604b44372618080000000000000000000e1e2c353840403a372e211406000000000000000000000000000000000003162839566b8095abc8d9eae2dfe2d8c8b49f8b78624d3b2b180500000000000000000000000000000000000000000000000000000000000000000c2032434f545757575757554e493d2c1e0e0000000000000000000000000b1f31424e535757575757575756514434210e0000000000000000000000000000000614212f38454b5760676d727576777574716b645c4f4a3e3124150700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8b9cde1d8c3ae99836e63636363636363636363636363605544311d080000000000000000000000000000071520272a2d2d2d2d2d2d2d2d2c292216080000000000000000000000000000000000000000000000000000000000000000000000000001080b0c0c0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a151d20253035383b3e3f40403e3d3a3c4e606f8399a6b8cbdbe1cdbaa99c8675604b41301e0e0000000000000000000000000000000000000000000e1a2832404c556068757d858d949a9ea8a5a7a8a8a7a6aa9f9b958d857b6f635b4e42312619090000000000000000000c1c2c3c494d55554f4b3f3224140000000000000000000000000000000000091e32465770859bb0c5dad8cecaced8cebaa997816c594834200d0000000000000000000000000000000000000000000000000000000000000000031525323c3f42424242424038352c1f0f00000000000000000000000000021424313b3e42424242424242413d342616040000000000000000000000000000000003111a283239454b52585460616260565b554f4a3e362d2014060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb4c9dedbc6b09b86715b4d4d4d4d4d4d4d4d4d4d4d4d4b4437271502000000000000000000000000000000030c1214181818181818181816140e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171f28323636434a4e51535555555452504c5b687e93a1b3c5d5e1cfbfb49f8b7963574532231200000000000000000000000000000000000000000000000a151d2f37444b56606770787f85898d9092939392918e8a857f7970665e4e4a3d311d140900000000000000000004172a3a495a636a6a655d4f42321c0c000000000000000000000000000000000c21364b61768a9fb4cad8c8bbb4bbc8d1c7b49f8a77624d3b2a18050000000000000000000000000000000000000000000000000000000000000000071520272a2d2d2d2d2d2b23211a0f01000000000000000000000000000006141f26292d2d2d2d2d2d2d2c29211608000000000000000000000000000000000000000a161e2832363c36434b4c4c4b4538403a362d221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c71879cb1c6dcdec8b39e88735746383838383838383838383836312719090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e1417202020202020201f170b08010000000000000000040a0c1a1f202020202020201b1812080000000000000000000000000000000000000000000000000000000000000000000000000000000000000003131b293338454b5254606366696a6b6a6968656163798a9eb4bfd0e3d4c3b2a1937e685b4a39281605000000000000000000000000000000000000000000000000021119263138454b525b636a6f74787a7d7e7e7d7c7976706a635b514c40362d1f1401000000000000000000000a1f33475863787f7f7a69604f3a2a170400000000000000000000000000000010263b50657b90aabbcecebbaa9faab4c1cdbaa996816c5948341f0c000000000000000000000000000000000000000000000000000000000000000000030c12141818181817160e0c060000000000000000000000000000000000020b11131818181818181816140e04000000000000000000000000000000000000000000030a161e212726303536373632282b24221b1007000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4d9e0ccb8a78b76614b3623232323232323232323201d15090000000000000000000000000000000000000001080b0f1215161513110d0b05000000000000000000000000000000000000081622292c35353535353535342c201c14080000000000000c171f212f3535353535353535302d251a0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e303a464c5660676e74787b7e7f807f7e7d7a7674859ba8b9cdddd9c8b7a599836e604e3d2d1b0a00000000000000000000000000000000000000000000000000000009141d2832363d494e54546063656768696866636056554e493d382f211a0f0100000000000000000000000c21374c61768995958f7e695847331f0a000000000000000000000000000003162839556b8095aac8d8cab49f8b9ba3b4c8c7b49f8a77624c3b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b12141c202122201d15160f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acc1d6e8d5c5a38e78634e39230e0e0e0e0e0e0e0e0e0b08020000000000000000000000000000000000000909151d2024282a2b2a28262220190e0c060000000000000000000000000000051626343e414a4a4a4a4a4a4a49413530261808000000000c1c2a3337454a4a4a4a4a4a4a4a4541372a1a080000000000000000000000000000000000000000000000000000000000000000000000000000000c1b2932414d58616a757c83888d909394959593928f8c899ba3b5c6d7e2cebbaa9d8776614c42311f0f0000000000000000000000000000000000000000000000000000000000010a161e212c353836434a4d5052535352514e4b453838352c241c12070000000000000000000000000013293e53687e93a7aa9f8a76614c37210c0000000000000000000000000000091e32455770859bb0c5dac6b19b85859bb0c7cdbaa996816b5947341f0c000000000000000000000000000000000000000000000000000000000000000000000001080b0e121415161514120f0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0c0d0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9bed4e5d0bba5907b66503b261100000000000000000000000000000000000000000000000000000008121c23273135393d3f403f3d3c38342b23211a0f060000000000000000000000000e2234445156606060606060605f574b4336261401000004172a3a474c5a5f606060606060605a554837251200000000000000000000000000000000000000000000000000000000000000000000000000000c1d2a39464b5f67767f8991989ea7a6a8aaaaaaa9a7a5a79ea7b5c1d1e4d1c0b49f8c7b655847332414010000000000000000000000000000000000000000000000000000000000000003090f1a2123253035383b3d3e3e3d3c3936322823211a0f09000000000000000000000000000000172d42576c8297acbaa9937e685338281502000000000000000000000000000b21364b60768a9fb4c9d8c3ad98827e93a9bacdc7b49f8a77614c3a2a18040000000000000000000000000000000000000000000000000000000000000003090b151d202427292a2b2a292724211f17100b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcd1e6d3bda8937e68533e29130b0b0b0b0b0b0b0b0b0b0b0b0b0a000000000000000000000001111c232f3837444b4f5254555453514d483c39352c211a0f010000000000000000000014293e51626c75757575757575746c605443301c1200000a1f334758616f7475757575757575706655412d18040000000000000000000000000000000000000000000000000000000000000000000000000c1c2a3b4757616e7d88959ea7aeb3b8c5bebfc0bfbebdc5b9b3b9c5d1dfdcc8b4a2957f6a5d4b3a2917060000000000000000000000000000000000000000000000000000000000000000000000060c0e131c202325282929282724211e160e0c060000000000000000000000000000000000192e43596e8398aec7af99846f5645321d090000000000000000000000000010263b50657b90aabbced5bfaa9580768a9fb4c9cdbaa896806b5847331f0c0000000000000000000000000000000000000000000000000000000000030a161e21273135393c3f40403f3e3d3a36332925201c13080300000000000000000000000000000000000610161920202020202020202020202020202020201f1f1d1b17130d0b05000000000000000000000000000000000000000610161920202020202020201f0b080100000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c7d7e9d5c0ab95806b56402b20202020202020202020202020201f0b07000000000000000008141c2e37404c50556064676a6b6a6866625a574e493d352c1f1406000000000000000000172c41566c818a8a8a8a8a8a8a898172604b41301d0d05182a3b4c6176848a8a8a8a8a8a8a8a84705a45301b05000000000000000000000000000000000000000000000000000000000000000000000009192a3a4759617582929ea7b3b8c5c8ccd5d3d4d4d2d2d2d6ccc9ccd6e3efdac5af9a8575604b4334261608000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e1012131413110e0b090300000000000000000000000000000000000000001a2f44596f8499aec4b49f8975604b36200b00000000000000000000000002162838556b8095aac8d8d5c5a7917c6d8398adc0d1c6b49e8a77614c3a2a17040000000000000000000000000000000000000000000000000000000b161e28323637444b4e515455555554524f4c463a3b3530251e160a0000000000000000000000000000000a18232b2e3535353535353535353535353535353535353432302c282220190e0a030000000000000000000000000000000a18232b2e353535353535353535201c1408000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9bacde1d8c2ad98836d584335353535353535353535353535353534201c13080000000000081826303f4b505e666e75797d7f807f7d7b77726c635b4e493d3124160800000000000000000b20364b6074859ba89f9f9fa89e96816c5f4d3b2b180b1f3447596d82979fa99f9f9f9fa3907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000001152737475861778698a0b3b8c5ccd5ded2c9c6c1bfbdbdbec1c6cacfdadfe7dec8b39e897b6a6151453426160700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a30455a6f859aafc4baa8907b65503b2510000000000000000000000000091e32455670859ab0c5daccb8a78d78647a8ea2b4c8cdb9a895806b5847331f0c0000000000000000000000000000000000000000000000000000111b293239454b5255606367696a6b6a696764615857504a433632281c13080000000000000000000000000618283640434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494845423d38352b211e170b020000000000000000000000000618283640434a4a4a4a4a4a4a4a4a47302618080000000000000000000000000000000000000000000000000000000000000000000b1f34475974899fb4c9dedac5b09b85705b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a353025180800000001142636434b5d65717b83898e9294959492918d8781796e635b4e423426160700000000000000091d31455663798a9eb4bec6b9b49f917c67594834201527374c62778b9fb4bab5b5c3b19b86715e4c38230f0000000000000000000000000000000000000000000000000000000000000000000000081d3144556176869ca4b2beccd5dacfcac2b5b1aca9a7a7a9acb0b5bcc9cbd4e0ccb8a79e8d7f6c63514434251503000000000000000000000610161920202020202020202020202020202020201f1d1c1a16120d0b060000000000000000000000000000000000000000000000000000000000001b30455b70859ab0c5c6ab96806b563727150200000000000000000000000b21364b60758a9fb4c9dec8b39e89746070859aafc2d3c6b49e8976614c3a291704000000000000000000000000000000000000000000000008131c2f39464b5760676f75797c7e7f807f7e7c7976716c6560544b45393025180d000000000000000000000010233646535860606060606060606060606060606060605f5e5d5a57534d483c3633291d150a000000000000000000000010233646535860606060606060605f5b4336261401000000000000000000000000000000000000000000000000000000000000000005182a3b5c72879cb1c7dcddc8b29d887356606060606060606060606060606060605f5b43362513000000081c304354606b7b8690989ea8a7a9aaa9a8a6a49c968c8379686051443425150200000000000002152738495b687d92a0b2c3cdbdb39e8977624c42311d3144556a7f95a9baced8cab6a5927d6752402f1c0900000000000000000000000000000000000000000000000000000000000000000000071b2d3e4b6073849aa4b5c2cfe0d4c9bcb5aca49c9694929293979b9fabb3b7c4cfd5c5b8ab9f94816c6251433321110000000000000000000a18232b2e35353535353535353535353535353535353433312f2b272320190e0c060000000000000000000000000000000000000000000000000000001c31465b71869bb0c6c6b19c86715544311d08000000000000000000000010253b50657a90a9bacdd8c3ae99836e54667c91a4b6caccb9a895806b5846331f0b0000000000000000000000000000000000000000000008182530404c57616a757d84898e919495959493928f8b86817b736960574a43362b1d1002000000000000000000162b4053646e7575757575757575757575757575757575747472706c68625a534b463931271a1002000000000000000000162b4053646e7575757575757575746d5443301c080000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4d9dfcab49f8c747575757575757575757575757575757575746d5443301c0700000b20354b6072808f9ba3adb4b9c6bfc0bfbdc3b6b2ab9f998a7e6c635143322010000000000000000a1a2c3d4e5f6d8298a5b6c8ccb8a799836f604e3c2c354b6074889db2c7d8d5c4b29d8774604b35201100000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6b8095a2b4c2d2e0d4c4b7ab9f978d86817f7d7d7e81868c949da6b4bcc9d5c9bcb49f96806b61503f2e1d0d000000000000000618283640434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49484744403c38352b23211a0f08000000000000000000000000000000000000000000000000001a30455a6f859aafc4cab49f8a75604b36200b0000000000000000000002152838556a8095aac7d7d4bfa9947f6a546073879cb1c5d6c6b39e8976614c39291703000000000000000000000000000000000000000008182536434a5e66757f8992999ea8a6a9aaaaaaa9a7ab9f9c9690877f75686054483c2e2012040000000000000000192e43586e828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898785817d78716961574b45382d2012050000000000000000192e43586e828a8a8a8a8a8a8a8a8b73604b35200b000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1d7e3cfbcab928b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b72604a35200b0000172c41566c81969eb1b5c1c9c9c4b8b3b1b1b4bac6bcb5a99f93816c614f3e2e1808000000000000000e1f31414b6175879caabbcec5b3a1937e685b49373d51677c91a6b7cbe0cbb8a6937e685544311d0800000000000000000000000000000000000000000000000000000000000000000000081c2f3f4f647a8c9fb4c0d1e0d4c4b7a69d8d8278716c6a6868696c71777f88959fabb9c5d6cfbdb09e947f6a5d4b3b2a180500000000000010233646535860606060606060606060606060606060605f5d5c5a56514d493c38352c231c11070000000000000000000000000000000000000000000000182d42576d8297acc2cfbcab8d78624d38230d00000000000000000000091d32455670859aafc5dad3c3a5907b655054687e93a7b8ccccb9a7957f6a5746331e0b00000000000000000000000000000000000000001325364354606b7c87959ea7aeb4b9c6bebfc0bfbec9bcb5b1aca59d94887e72625a4b3e2f22120300000000000000162b41566b80969f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9a97928d867e766a60564a3e3023130500000000000000162b41566b80969f9f9f9f9f9fa98c77624d37220d000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4ebd9c9bca4a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa98c77624c37220d000012273c51677c91a0b2c5c7bab4aba69e9c9c9fa8b1b5c2bab49f947f6a5c4b3625130000000000000000131e334657647a8b9fb4bfd0bfb49f8a796355444a5b70859aafc4d4d6c6b39e8875604b37261401000000000000000000000000000000000000000000000000000000000000000000000e23384b5d70849aaabbceded8c8b7a69d887b6d635b57545252545759626a75808d9ea7b8c5d6cdbcb49f8c7b655948341f10000000000000162b4053646e75757575757575757575757575757575757472716f6b67625a554e493d372e221b1002000000000000000000000000000000000000000000152a40556a7f95aabfd9c9a5907a65503b2510000000000000000000000b20364b60758a9fb4c9decab6a58c76614c4b6075899eb3c8d6c5b39e8976614c392917030000000000000000000000000000000000000d1c304354607280909da6b3b9c5c9cdd6d3d4d5d4d3dacfcac6c3b7b2a69d938478645c4c402f21110000000000000013293e53687e93a8b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b3b2afaca8a39b93897f74645c4d413023130200000000000013293e53687e93a8b5b5b5b5b5a48f7a644f3a250f00000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1e7e7d9cfb8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a48f7a644f3a250f00001024394d5f6e8398a7b8b4a99f968d88868789909ca4b5c1bdb59f8d7a645443301c0700000000000000031729394a5c697f94a1b3c4cdbaa89b8573604b4e63798ea2b4c8e1ccb9a8947f6a56453219090000000000000000000000000000000000000000000000000000000000000000000005182b3b50657b90a2b4c8d8e2cebbaa9d8879655d4e493d3f3d3d3e3b474c57616b7b899ea7b8c8d8cebbaa9d8877624c3f2e18080000000000192e43586e828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888684807c78716a635b504b3f362d1d1509000000000000000000000000000000000000000012283d52677d92a7bcd2bda8927d68533d28130000000000000000000010253a50657a8fa9bacddcc7b29c8772584745576b8095aabbceccb9a7947f6a5746331e0b00000000000000000000000000000000000d1d30414a607282959eb2b7c4ccd6dedcd5ccc8c4c2c1c2c4c8cbd4cac4b8b3a29a887a665e4c3f2e1c0800000000000011263b51667b90a6bbcacacacacacacacacacacacad8cec9c9c7c5c1c1b5b1a79e94867a675f4d4130211000000000000011263b51667b90a6bbcacacabca7927c67523d27120000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7d7d7d7d7d7cacacacacacacacacacacacacacacacabca7927c67523d271200000a1d30404c6177899ea9a29a8b8178737171757b869ba3b5c9bcab9b8572604a35200b00000000000000000b1b2d3e4a6072849aa6b8c9c6b4a3957f6a5c586c8197acc0d1d8c7b49e8976614c38281600000000000000000000000000000000000000000000000000000000000000000000000b203448596e8399aec0d1e6d6c5b49f8c7a645b4b3f352c2a2828292a3439464b5d657a899eaabbced9c8b8a698826d5d4b3625130000000000162b41566b80969f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9e9d9c9995918d867f7970655d4f4a3e3127190e0000000000000000000000000000000000000010253a4f657a8fa4c7d8bfaa95806a55402b1500000000000000000002152738556a7f95aac7d7d8c3ad98836e583a394d62778b9fb4c9d6c5b39e8976614b3928160300000000000000000000000000000005182b3b4d5f6c8196a0afbccbd4e0e1d0c7c5b8b3afadacadafb2b7c4c7cbcbc0b4a69e8b7c665d4b37230e0000000000000e23394e63788ea3c5d5e7dfe4d6ccc9bebebebebebebebebfc1c6cacfc9c5b8b3a49c8a7d675f4d3f2e1b0b00000000000e24394e63798ea3c5d5e8d4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bac2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2bfaa947f6a553f2a15000000121f344759667c8b939084786b635b5c55606675859bb1c6c9b4a3907b66513b2611000000000000000000101c3043546277889eabbccfc1b49f8c7a6461768a9eb4c9decebaa996806b5846331a0a00000000000000000000000000000000000000000000000000000000000000000000000d22374c62778b9fb4cadfe0ccb9a796806b5c4a3c2e211a15131314181f28323f4b5c657b8c9fb4c2d3d5c4b2a08f7a655443301c070000000013293e53687e93a8b5b5b5b5b5b5b5b5b5b5b5b5b5bcb5b4b2b1afaba6a49c958d857b70645c4b44372b1e0f0100000000000000000000000000000000000d22374d62778ca9bacec2ad98826d58432d18000000000000000000091d3145566f859aafc4dad9c9a9947e69543f3448596d8298adc0d1ccb8a7947f6a5746321e0a0000000000000000000000000000000b20344859677d929fb0beccdfe4d6ccbfb3afa79e9a9897989a9da6a9b2b7c3cec4b8a99f8a7b65503a25100000000000000c21364b61768ba7b8cce0e8d6c5b9b3a9a9a9a9a9a9a9a9aaacb1b5bcc9cfccc2b6a99f8d7d675d4b39291603000000000c21364b61768ba7b8cce0d7c1ac97826c57422d170000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9facacacacacacacacacacacacacacacacacacacacacacacacac97826d57422d1800000004182a3b4c5e66787d7b72635a4d493c444b57667b90a5bbd1c1ad98836e583a2a18040000000000000000001325364759667c8d9fb5c1cebbaa9c8675697e93a8b9cdd9c9b49f8b77624d3a291700000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93aabbcee2dec9b39e8975604b3e2d1e100600000000050b161e2f3e4b5d6a8095a4b6cadecfbeb09b8572604a35200f0000000011263b51667b90a6bbcacacacacacacacacacacadacfcac9c7c6c4c0c2b6b1aaa29a90847a6a6055483c2d1f1002000000000000000000000000000000000b20354b60758a9fb4c1c1af9a85705a3727150100000000000000000b20364b60758a9fb4c9decfbcab8f7a65503a2b3b4f647a8ea2b4c8d5c5b39e8875614b3828160300000000000000000000000000071a2d3d4d62778a9eb4bdcddce4d6c6b9b4a19a90888582828285888d949da5b4bbc8bfb09e917c67523c2712000000000000091e32465773889eb3c8dde0ccb9a79e939393939393939495979c9fabb2becbd3c7baab9f8b7b655746321e0c000000000a1e33465773899eb3c8ded9c4af9a846f5a362513000000000000000000000000000000000000000000000000000000000000000000071c3043547287979797979797979797979797979797979797979797979797979797856f5a45301a000000000c1d2f404c5a6268666054493c352c31394b61768ba0b6cbc8b39e88735847331f0a00000000000000000008182a3b4c5e6b8096a3b5c6c8b6a4968173879cb2c6d7cfbcab97826d5948341c0c000000000000000000000000000000000000000000000000000000000000000000000006192b3c596f8499aec8d9e8d6c6ac96816c574532201000000000000000000311202f3f4b6074869cb1c2d3ddc9b5a3907b66503d2c1a060000000e23394e63788ea3c5d5e7dfdfdccec5c2c2c2c2c2c2c2c2c3c4c8cbd3c9c6c0b4afa29a8c8074625a4a3d2e201000000000000000000000000000000000081c30435472879cacacacac9d88725544311d08000000000000000010253a4f657a8fa9bacddfcab49f8b76614b3621364a5c70859ab0c3d3ccb8a7947f695645321e0a000000000000000000000000000c21364a5b6e8298a8b9ccdbe8d6c6b9a89e92847b756f6d6c6d6f73787f87949faab7b3a195806b5f4d392510000000000000031628395b71869bb0c6dbdec9b39e897e7e7e7e7e7e7e7e8081868c98a0aebbcbd7c9baa99d8775614b3a291704000000031729395c71869bb1c6dbdcc7b19c87725443301c0700000000000000000000000000000000000000000000000000000000000000000013253654697f828282828282828282828282828282828282828282828282828282806b55402b16000000000012222f3c494d53504a43362c2a3439454e63788da3b8cdcbb8a68c77614c37220c000000000000000000000d1d2f404b6074859ba8b9ccc2b49f8c7f94a4b6cadfcab49f8c78634e3b2b180000000000000000000000000000000000000000000000000000000000000000000000000b2035495a73889eb3c8dee1ccb9a88e79644f3928160200000000000000000001111d314455667c91a4b6caded2c1af99846f5b4935210c0000000c21364b61768ba7b8cce0f5e1cebeb1adacacacacacacacadafb2b7c4c6c9d1c8c0b4aa9f958578635b4b3e2e1e0e000000000000000000000000000000011426365a6f849696969696968b75604b35200b0000000000000002152737556a7f94aac7d7dcc6b19c87715746331e2d3e51667c91a5b6cad5c5b39d8875604b382816020000000000000000000000031629394e63798c9fb5c6d6e8e1ccb9a89e8a7d6f6660555857585a5a636a747f8c9da6a4998372604b41301d0a00000000000000192e43596e8398aec3d8dfc9b49f8a74696969696969696a6c717883949daebdced8c7b7a595806b5847331f0a00000000192e44596e8399aec3d8dec9b49f8975604a35200b00000000000000000000000000000000000000000000000000000000000000000008273c4f61696d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6b62503d2814000000000004121e2b35383e3b353032363b484c57606c8096abc0d6d5c5a38d78634e38230e0000000000000000000000111d31445563788a9eb4becebbaa9f949daec3d3d0c0ae98836e5b49351d0d0000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da7b8cce0dec9b49e8974604b35200b0000000000000000000000011527374a6073879cb1c9dadfcab59f8c78634e38230e000000091e32465773889eb3c8ddf3dac5b19f9797979797979797989a9da6a8b1b5c2cad1c8bbb4a39b8879645c4b3c2c1b0b00000000000000000000000000000012283d52677d8181818181818176614c36210c00000000000000081d3144556f849aafc4d9d7c2ad98826d5839291720354b6073879db2c5d6cbb8a6947e695645321e0a00000000000000000000000a1e3246576d8297abbccfe4e5cebeb49e8a7b675f504b443742433c494d56606a7b88969786756154433023120100000000000001162c41566b8196abc0d6e2cebbaa8c776254545454545455575b636e7f949fb1c7d7d4c3b49e8976614c37210c00000001172c41566c8196abc1d6e1cdbaa98c77624c37220d0000000000000000000000000000000000000000000000000000000000000000000c2032434f5457575757575757575757575757575757575757575757575757575755504433210d000000000000000e19202328283238454b5259626a7581969eb0c4d8cfbcab8d78624d38230d000000000000000000000002152737495a677d92a0b2c3c8bbb4a9aebbcbdcc8b4a28e7a644f3d2c1a0000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5c5d5e8dac5af9a85705443301c08000000000000000000000000091c304354697e94abbccfe3cfbcab957f6a553b2a18050000031628395b71869bb0c6dbecd7c2ad9782828282828282828385888d939ca4b2b6c3cfcec1b5a69d897b645a4939291703000000000000000000000000000010253a4d5f676c6c6c6c6c6c6c615846331f0a000000000000000b20364b6075899fb4c9ded8c8a9937e69543e29141c304354697e93a7b9ccd5c4b39d8875604b38281502000000000000000000000c21364b6176899eb4c9dae9d7c7b19f907c665c4d413531272d2d2c3538454b5d657681827862574636261405000000000000000014293e53697e93a8bed3ead8c8a48f7a654f3e3e3e3e3f403c494d616c8197a9bacde1cdb9a8937e69533828150200000014293f54697e94a9bed3e9d7c7a48f79644f3a240f000000000000000000000000000000000000000000000000000000000000000000031525323c3f424242424242424242424242424242424242424242424242424242403d3326160400000000000000000611202d39454b5660676f777f88969fb0bccddfcab59f8b75604b36200b00000000000000000000000009192c3c4d5f6d8298a4b6c7cecabec2cbd9d2c1af9a846f5c4a361f0e0000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdd2e7d6c1ac96816c5736261401000000000000000000000000001325364d62778c9fb5cadfdac9b09b86715948341f0b000000192e43596e8398aec3d8e1ccb7a28c776d6d6d6d6d6d6d6e6f73787e86919da5b2becdd2c4b7a79e8978635746331e1200000000000000000000000000000a1e30414d52575757575757574c463a291704000000000000000f253a4f647a8fa8bacde1cebbaa8f7a644f3a250f1426364b6176899eb3c8d9cbb7a6937e695645321d090000000000000000000012273c52677c91a8b9cde7e1cdbaa997826d5e4c3e30201d151718192027313f4b58616c6d625a483929180800000000000000000011263c51667b91a6bbd0e6d1bca7927c67523d292929292b2c35434c61768a9fb4c9ded6c6af9a85705645321d0900000011273c51667c91a6bbd1e6d1bca7917c67523c27120e0d0d0b090200000000000000000000000000000000000000000000000000000000071520272a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2821160800000000000000000011212e3e4a57606a757d848b949ea6b0bdcddad2c2b19c86715645321d09000000000000000000000000000e1e30414b6175869ca9bacedfd4d6deddc9b5a3907b65503e2d1b0000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9bed4e9d5bfaa95806a55402b150000000000000000000000000000082034485971869bb0c6dbdfcab59f8b77624c37220d000001162c41566b8196abc0d6e4cfb9a48f7a64575757575757585a5a6269717c8798a0b0bccdd4c5b8a79c8675614c40301b0b00000000000000000000000000011323303a3d414141414141413633291b0b0000000000000001152737546a7f94a9c6d7dfcab49f8a76604b36210b081e3346576b8096aabbced4c4b29d8875604b3727150200000000000000000417293a586d8297adc6d7e9dec9b49f8a77614c402f201308010000060a151d2e3a474c57574d483c2b1b0b000000000000000000000e24394e63798ea3c5d6e8d4bfaa947f6a553f2a1514141519213347586e8398adc3d8dfc9b49f8a75604b36200b0000000f24394f64798ea4c6d6e9d4bea9947f69543f2a23232322201d1517130c0b04000000000000000000000000000000000000000000000000030c121418181818181818181818181818181818181818181818181818181816140d040000000000000000000d1d2e3f4b5c64757f8892999faab3b8c5cdded1c3b5a3937e6953382815020000000000000000000000000000131e324657647a8b9fb4c9dfe9ebf0dbc6b09b86715d4c3820100000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfd4e9d3bea9947e69543f2914000000000000000000000000000005182b3b566b8196abc0d6e3cfbcab927c67523d271200000014293e53697e93a8bed3e7d1bca7927c67524242424242433c484d535e667582969eb0beced5c5b6a499836e5e4d392917030000000000000000000000000005131e25282c2c2c2c2c2c2c211f170b0000000000000000081d3144556f8499afc4d9dbc6b19c86715645321e09031729394d62788b9fb4cadfcbb7a6937e685544311d0900000000000000000a1f33465872879db2c7dce9d7c7ad98826d58473322110200000000000002111c2a3337414238352b1e0e00000000000000000000000c21364b61768ba7b8cce0d7c1ac97826c57422d1702000006172a3a54697e93a9bed3e2cdbaa98e79634e39230e0000000c21374c61768ca8b9cde1d6c1ac97816c574238383838373632282c28221f180c09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4b5d657a87959ea7aeb4bbc8cbd5d2c9c0b4a59b8574604b36210b000000000000000000000000000000031629394a5c6a8095aabfd5eaf6e8d2bda8937d685745321e130100000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfd4e8d2bda8937d68533e281300000000000000000000000000000012273c52677c91a7bcd1ecdac9ab95806b56402b1601000011263c51667b91a6bbd0e6d4bfa9947f6a543f2d2d2d2d2e2b3538404d5761728096a0b1c2d2d3c2b2a1917c665746331e0b0000000000000000000000000000010a1012171717171717170c0a040000000000000000000b20354b6075899eb4c9ded7c2ac97826d5738281603000b2035485a6e8398aec1d1d4c4b29d8774604b37271501000000000000000c21364c61768ba5b7cadfe1cdbaa98f7a654f3a2a18030000000000000000000c181f222c2d2220190e0000000000000000000000000a1e33465773899eb3c8ded9c4af99846f5a442f1a0000000011263b51667b90a6bbd0ead7c7a6907b66513b26110000000a1f33475874899eb4c9ded9c4ae99846f594e4e4e4e4d4c4b4538423d37342a201d150a000000000000000000000000000000061016192020202020202020200d0b0500000000000000000000000000000000000000000000000000000000000000000b1f344859657b8a9da5b3b8c5caced8cec9c2b5b1a29a8778635645321e09000000000000000000000000000000000b22374b5c6f8499afc4d9eae2dfdbc6b19c8675604b42311f0f0000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bed3e8d3bea8937e69533e29140000000000000000000000000000000e23394e63788ea3c5d6e8d9c4ae99846f59442f1a0000000e24394e63798ea3c5d6e8d7c1ac97826c57422d1818181919202330394654606d8297a4b5c9d9cfbfb29d8876614c392917030000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a8fa8b9cde1d8c7a8937e68533e2913000005192b3c4f647a8fa3b4c8ddcab7a5937d685544311d09000000000000000f253a4f647a8fa4c3d4e6dec9b49f8a75604b36200c0000000000000000000000040a0c17180d0b0500000000000000000000000000031729395c71869bb1c6dbdcc7b19c87725c3b2a180408000610253a4f657a8fa4bacfe4d1bca7917c67523c271200000004172a3a5c71879cb1c6dcdcc6b19c87716363636363626260565b57524c473b3631271c13080000000000000000000000000a18232b2e353535353535353535351f180d000000000000000000000000000000000000000000000000000000000000000d22374c6277889da8b7c3ccd5d4cbc7bab4ada49c918477635a4938281602000000000000000000000000000000071b2d3e4f647a8fa1b3c7dcd7cdc9cdc9b5a497826d604e3d2d1b0b00000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2e7d4bea9947f69543f2a140000000000000000000000000000000b21364b60768ba7b9cce0ddc7b29d87725d3828150200000c21364b61768ba7b8cce0d9c4af99846f5a442f1a000200060b121b2936434b6074869cabbccfdfcbb7a695806b5746331e0800000000000000000000090f11110f09000000000000000000000000000000000000000114263754697f94a9c6d6e2cebaa98f79644f3a240f0000000e22374b5c70859bb0c3d4d4c3b29d8774604b3726140100000000000012273c52677c91a7bcd1e6dac5b09b85705544311d08000000000000000000000000000002020000000000000000000000000000000000192e44596e8399aec3d8dec9b49f89745947341f1e1e1e1920273750667b90a5bbd0ead7c7a6917b66513c2611000000001a2f445a6f8499afc4d9dec9b49e8a79787878787878777573706c686159524b45383025180d000000000000000000000618283640434a4a4a4a4a4a4a4a4a4a342a1d0d00000000000000000000000000000000000000000000000000000000000417293a566c8196a6b8c6d4d9cfc4b7b3a99f9890867c6f6259493c2c1a0a000000000000000000000000000000000d22364a5c6f8499afbfd0d7c7bab4bac7c2b1a0927e685c4a39291703000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6c8d9ebd6c0ab96816b56412c16000000000000000000000000000000091e32455674899eb3c9dedfc9b49f8a745645321d0900000a1e33465773899eb3c8dedcc6b19c87715c3a2a180400000000000b1825324556647a8c9fb4c9dad4c4b39e8976614c362513000000000000000004121c232626241d12040000000000000000000000000000000000081d3144556f8499afc4d9dfc9b49f8a75604b36200b000000081b2e3e52677c91a5b7cadfcab7a5927d685544311d0900000000000014293e54697e93a9bed3e8d6c1ac97816c5737271502000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1d6e1cdbaa98c77614c37333333332b353845556a7f94a9bfd4e2cdbaa98f7a644f3a240f00000002172c42576c8197acc1d6e1cdb9a89e8d8d8d8d8d8d8d8c8b8885817d77706760564a43362b1d100200000000000000001023364653586060606060606060605e473b2a1805000000000000000000000000000000000000000000000000000000000a1f33475873889db2c4d5d9c9bcb4a69d948a837b71675f4c473b2c1e0e00000000000000000000000000000000071b2d3e4f647a8fa1b3c7e2cdbaa99fa9b9c6beb49f8a7a645746331e1402000000000000000000000000000000000000000000000000000000000000000000000f24394f64798eaabbcee2d8c2ad98836d58372614010000000000000000000000000000031628385d72879db2c7dce2cdbaa98b75604b36200b0000031729395c71869bb1c6dbdec9b49f89745947341f0a000000000000081528384a5c6d8297abbccfe0ccb9a7947f695443301c070000000000000c181f2f383b3b382f221200000000000000000000000000000000000b20354b6074899eb3c9dedbc6b09b86715645311d09000000001020354b6074879db2c6d6d4c3b29c8773604b372614010000000000152a3f556a7f94aabfd4e9d5c0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bed3e9d7c7a48f79644f48484848483c484d566074869cb1c7dcd9c8b49f8a75604b36200b00000000152a3f546a7f94a9bfd4e9d7c6b9b4a3a3a3a3a3a3a2a1a69e9b97928b857d74676054483b2d20100100000000000000162b4053646e757575757575757575705947341f0b000000000000000000000000000000000000000000000000000000000c21374c61768ca6b7cbe3cfbcab9f95887f776e655d524d41342a1d0e00000000000000000000000000000000000d22364a5c6f8499aebfd0d1c0b49f8a9ea8b9ccbaa99c8676614c42322010000000000000000000000000000000000000000000000000000000000000000000000b21364b60758a9fb4cadfdbc6b19b86715544311d080000000000000000000000000000001d32475c72879cb1c7dcead7c7a18c77614c37220c000000192e44596e8399aec3d8e1cdbaa88c77614c37220c000000000000000a1a2d3e4e63798c9fb5cadfd6c5b29d8773604a35200b0000000005131d2a34404c50514c402f1d0d000000000000000000000000000000000f24394f64798ea8b9cce1d7c1ac97826c573827150200000000081d314455697f94a8b9cddfcab6a5927d675544311d080000000000152b40556a8095aabfd5e9d3bea9947e69543f29140000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbd1e6d1bca6917c675d5d5d5d5d5d5e5a6268748197a4b6cadecebbaa98836e5645321d090000000012273c52677c91a7bcd1e6e4d7cdc9b8b8b8b8b8b8b7c5b8b3b0acab9f9a92877d7262594a3e2d1f0f00000000000000192e43586e828a8a8a8a8a8a8a8a8a77624c37220d000000000000000000000000000000000000000000000000000000000e23384d63788da2c4d4dfcab49f8d8075696158504b3f3930272320190e000000000000000000000000000000071b2d3e4f647a8ea1b3c7ddc8b4a2917b8a9eb3bfc7b6a498836e604f3e2e1c0c000000000000000000000000000000000000000000000000000000000000000000091e32455672879cb1c7dcdec9b49f8975604b35200b0000000000000000000000000000071c32475c71879cb1c6dce2cdb7a28d78624d38230d000001172c41566c8196abc1d6e9d7c6a48e79644f39240f0000000000000000102135495b6f849aafc9dadfcbb7a68f7a644f3a250f000000031323303b474c5e66665e4c3b2b180500000000000000000000000000000114263654697f94a9c6d6e8d7c7a8927d68533d28130000000000011426374c6176899eb4c9d9d3c3b19c8673604b3626140100000000152a3f546a7f94a9bfd4e8d2bda8937d68533e2813000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c6d6e8d4bea9947f737373737373737374787d8697a0b1c2d3cabcb49f8c7a644f38281502000000000f253a4f647a8fa4c7d7eaf4e9e1decdcdcdcdcdcdcdd5cbc8c5c9bcb4afa59d928478645c4a3d2d1d0c000000000000162b41566b80969f9f9f9f9f9f9f8f79644f3a240f000000000000000000000000000000000000000000000000000000000d22374c62778caabbced4bfaa947f6b60564c473a372f34373c38352c1e1103000000000000000000000000000d22364a5c6f8399aebfd0d3c3b09a85707d92a1b3c5c3b2a0937e695c4b3a2a1808000000000000000000000000000000000000000000000000000000000000000002162838586e8398adc8d9e1cdbaa98f79644f3a240f0000000000000000000000000000031729395d73889db2c8dde9d7c6a18c77624c37220d00000014293e54697e93a9bed3e6d1bca6917c67513c27120000000000000000061a2c3d53687d92abbccfe3d4c4ab95806b563a2a17040000112130414d59616e7b7c6659483420130000000000000000000000000000081c3043546f8499aec4d9e1cdbaa98e79644e39240f000000000000091f3346586c8196abbccfdecab6a4927d675443301c080000000013293e53687e93a8bdd3e8d3bea8937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8b9cce1dec9b49e8a8888888888888888898d929ca4b1bec9c3b6b29e95806a5c4a361a0a00000000000d22374d62778ca9bacde2f5e5d7cdc9bababababababbbdc1c8cbcfcac3b7b2a29a887a645c4a3b2a1804000000000013293e53687e93a8b5b5b5b5b5a7917c67523c2712000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4caccb6a18c77614c4538332b343b484c514d493c2f2111000000000000000000000000071b2d3e4f647a8ea1b3c7dfcab6a5917c666e8399a7b8ccbeb49f8b7a64584736251300000000000000000000000000000000000000000000000000000000000000000013283d52687d92aabbcee2d7c7a9947f6a543d2c1a06000000000000000000000000000a1e33465774899fb4c9dee1cdbaa88b76614c36210c00000011273c51667c91a6bbd1e6d3bea9947e69543f29140000000000000000000f22374c61778b9fb5cadfdcc7b19c87725847331f0a00081c2f3f4d5f677782908977624c41311c0c000000000000000000000000000b20354b6074899eb3c9dedec9b49f8975604b35200b0000000000000417293a4d62788c9fb4cadfd3c2b19c8673604b3625130000000012273d52677c92a7bcd1e7d4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb3c9dee1ccb9a89e9d9d9d9d9d9d9d9d9fa9a8b1b5c2bab4aea59d90806b62503e2d1b0000000000000b20354a60758a9fb4c9dfe9d7c7bab4a5a5a5a5a5a5a6a8acb2b7c4cbd4cac0b3a69d897a645947341f12000000000011263b51667b90a6bbcacacabea9947f69543f2a1400000000000000000000000000000000000000000000000000000000081c30435471869cb1c6cbb5a08b76604b3d3b3b3b484d596267635a4b3f2f1d0d00000000000000000000000d22364a5c6e8399aebfd0d6c5b29d8773606277899eb3becebaa99d8776615443301c1100000000000000000000000000000000000000000000000000000000000000000c21374c61778b9fb4cadfdbc5b09b85705b4935210e000000000000000000000000000c21364c61768ba8bacde1dec9b49f89745746331e0a0000000f24394e64798ea3c6d6e8d6c1ac96816c57412c170200000000000000000a1f34475971869cb1c6dbdecab6a48c77614c37210c000e23384c5d677d8998a099836f5f4d3a2a18040000000000000000000000000f24394f64798ea7b9cce0dac5b09b85705544311d08000000000000000b2035495a6e8399aec1d2decab6a4917c675443301c0800000011263b51667b90a6c6d7e9d6c0ab96816b56412c16000000000000000000000000000000000000000000000000000000000000000000000417293a5c71869cb1c6dbe8d6c6b9b4b2b2b2b2b2b2b2b3b4bac7c6c9baa99f9992877c6b625143332010000000000000071c30435472879cb2c7dce1cdbaa99f8f8f8f8f8f909193979da6b2b7c3d2d0c4b7a79d8877614c402f1d09000000000e23394e63788ea3c5d5e7d6c1ac97816c57422c170200000000000000000000000000000000000000000000000000000001142636566b8095abbfcfbca7917c675b5250515359626c777c78655d4b3b2a1808000000000000000000071a2d3e4e64798ea1b3c7e0ccb9a7937e695459677c91a0b2c4c7b7a5998372604a3f2e1d0d000000000000000000000000000000000000000000000000000000000000000a1f33475870859aafc4d5ddc9b5a38d79634e3c2b190500000000000000000000000010253b50657b90a5c6d7e9dcc6b19c87715c392917030000000c21374c61768ca8b9cce1d9c3ae99846e59442f1900000000000000000004182a3a586d8297adc2d7e5d3c2a5907a65503b25100010263b50657b909ea7b2a1927d675947341f1100000000000000000000000013253654697e94a9c5d6e8d6c1ac96816c57372715010000000000000006192c3c50657a8fa3b5c9ddd3c2b19c8673604a3625130000000e23384d63788da8b9cde1d8c3ae98836e593928160300000000000000000000000000000000000000000000000000000000000000000000192f44596e8499aec3d9eee4d6ccc9c5c3c3c3c3c3c3c4c7cacfdac9b49f8b837d73665e514434251502000000000000001325365a6f859aafc4dadec9b49f8a7b7a7a7a7a7a7c7d8288929da5b5c1d2d5c5b7a699836f5e4c382411000000000c21364b61768ba7b8cce0d9c4ae99846f59442f1a00000000000000000000000000000000000000000000000000000000000f24394e64798ea1b2c6c8b39d88796d686666686e78818a918b7b6559473625130000000000000000000d21364a5c6e8399aebfd0d8c8b39e8976614b4d5f6d8298a6b7c9c3b3a1947f6a5d4b3b2a180800000000000000000000000000000000000000000000000000000000000004172a3a53687d92a6b8cbe0d2c1ac97816c5a483520130200000000000000000000061a2c3d546a7f94a9bfd4e9d8c3ae98836e59432e19000000000a1f33475874899eb3c9dedbc6b19b86715c3a29170400000000000000000014293f54697e94a9bed3e8d3bea9937e69543e29140013293e53687e93a9b8bfb39e8977614c3f2e190900000000000000000000071c3043546e8399aec3d9e9d6c6a7927d67523d28120000000000000000000e23374b5d71859bb0c4d4dec9b5a4917c675443301c0700000b20354b6075899eb4c9dedcc6b19c87715745321e0900000000000000000000000000000000000000000000000000000000000000000002172c41576c8196acc1d6ebe4d2c1b5b0aeaeaeaeaeaeafb1b5bcc9c8b39d8880786b61574a3e2f22120200000000000000182d42576d8297acc2d7e1cdbaa98b76656565656566686c737d879ba3b5c5d5d4c4b3a1917c66513f2e1c08000000091e32465773889eb3c8dddcc6b19c87715c3a2a1704000000000000000000000000000000000000000000000000000000000d21364a5c6e8399a8b9c9b7a69d8b827d7b7b7e848b969fa99d8877625443301c0700000000000000071a2d3d4e64798c9fb5cad5cebbaa96806b5746404c6176879dabbccfbfb49f8c7b655947362614010000000000000000000000000000000000000000000000000000000000000c20364b6075889db3c5d6dec9b49f8a78624d41302010010000000000000000000c2136495b70859bb0c5dae6d4c4a9947e69543f2914000000000417293a5c71869cb1c6dbdec9b39e89745846331f0a00000000000000000011273c51667c91a6bbd1e6d7c2ac97826d57422d18000d22384d62788a9fb4c5b8a798826d5d4b372614010000000000000000000b20354a6074899eb3c8d7d7cdb9a88e78634e39230e000000000000000000081c2e3f52677d92a6b7cbd7d2c2b19b8673604a3520120000081c30435470869bb0c5dbdfcab49f8a76604b36210b0000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9bed3e9ddc9b5a39b9898989898999a9c9fabb0b5b7a69d958b8075645c4c402f201000000000000000152a40556a7f95aabfd4e9d7c7a38e796450505050515354606777859ba6b8cbe0d0bfb19c86715d4b37230e000000031628395b71869bb0c6dbdec9b49e89745847331f0a00000000000000000000000000000000000000000000000000000000071a2d3e4e63798a9eabbbc4b7a99f9792909093999faab4b8a6998372604a35200b000000000000000d21364a5c6e8399abbcc0c0c9b49f8b78624d39334658657b8d9fb5c2c0bbaa9d8877625443301c0b000000000000000000000000000000000000000000000000000000000000091d3245566a7f95a7b9cce0cdbaa998836e5f4d3e2d201206000000000000000d1c2e3f4e63798ea2b4c8dddfcbb7a68e79644f39240f0000000000192f44596e8499aec3d9e0ccb9a78b76614c36210c0000000000000000000f253a4f647a8fa4b9cfe4d8c3ae99836e59442e19000b2035485a6b8196a7b9c5b2a08f7b655544311d0a0000000000000000000f24394e64798ea7b8c2c2c2c8b49e8974604b35200b000000000000000000001120364b6074889db2bdc2c2c2b5a3917c6651402f1d090001142636576c8197acc6d7e2cebbaa907b66503727150200000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcd1e6dbc5b09b8583838383838485878b929ba3aeb7b3aa9f96877a665e4c3e2d1a0a00000000000012283d52677d92a7bcd2e6d0bba6917b66513c3a3b3c36434a596176889eb3c5d5dec9b5a48f7a65503a251000000000192e43596e8398aec3d8e1cdb9a88c77614c37210c00000000000000000000000000000000000000000000000000000000000f2135495b667c8d9faab7c4bab4ada7a5a6a8aeb4bbc8c1b3a1947e69543f2914000000000000031628384e64798c9fabababababab98836d594834293a4c5d6c8197a4ababababa69a8472604b392917030000000000000000000000000000000000000000000000000000000000021528384c6176899eb3c1d1d7c7b2a0917d675c4a3e3020190e0a0400040a121d2a3a4b5d6c8297acc0d1e4dac9b29d88735c4a36220d0000000002172c41576c8196acc1d6e8d6c5a38e79634e39240e0000000000000000000e23384e63788da3b8cde2dac4af9a856f5a45301a0005192b3c4c6176899eb3c4beb19b8673604b38281603000000000000000014293e54697e93a9acacacacacaa9a846f5443301c0800000000000000000000081d314455697e939fabacacacacac9b85715e4c38240f000011263c51667b91a8bacde1d9c8ac96816c5544311d080000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6d7e9d3bea9947e6e6e6e6e6e6e6f72767d85949daebcbbb4a69d8a7c665c4a38281602000000000010253a50657a8fa5c8d9ebd3bea9937e69543e29252725303b4758687d92a7b8cce0d2c2ac97826c573c2b1905000001162c41566b8196abc0d6e9d6c6a48e79644f39240f0000000000000000000000000000000000000000000000000000000000061a2c3d4d5e687e8c9da6b3b9c5c2bdbbbbbdc3c6c3b6b2a39b897b65503a2510000000000000091e3245566e8395959595959595958d7a644e3b2b1c2f3f4b6075869495959595959595806a5746331e0a0000000000000000000000000000000000000000000000000000000000000a1f334758687e93a3b4c6d7cfbeb49e8a7a645c4d41352c221f181b171f21303b4759657b8d9fb5cadfe3cfbcab95806b563e2d1b07000000000014293f54697e94a9bed3e6d0bba6917b66513c26110000000000000000000d22384d62778da2b7cce2dbc6b09b86715b46311c00000e1f3347586a7f94a6b7c9b5a3927d685645321e0a0000000000000000192e44596e8397979797979797958c7b65503626140100000000000000000000021527374b6072818f95979797979797907c66513b261100000b21364b6075899fb4c9deddc8b39e8874604b3620130000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8b9cde1d6c1ab96816c59595959595a576167737f949eafc3c4b7a89e8a7a645645321e0900000000000d23384d62788daabbcee2d6c0ab96816b56412c1611131c2a3a4b6075889eb3c8ddddc8b29d88735a4835200b00000014293e53697e93a8bed3e6d1bba6917c66513c27110000000000000000000000000000000000000000000000000000000000000e1f30404e60687b88949ea7adb1b4bac5b9b3b0aba49c918578655d4b37230e0000000000000b21364b60758080808080808080807b655c4a361d111e32455761767e808080808080808076614c36210c00000000000000000000000000000000000000000000000000000000000004172a3a4a6072859ba8b9c9dacdb9a89e887a675f4d493c37332a302a3337404d596277879cabbccfe3d8c8b59f8c78624d38231000000000000012273c51677c91a6bcd1e6d3bea8937e69533e29140000000000000000000d22374d62778ca2b7cce1dcc7b19c87725c47321d000004172a3a4b6075889db3c5c2b29d8875604b3827150200000000000000162b41566b80828282828282828079655d4c381808000000000000000000000000091c304354606d7b80828282828282827e69533e29140000091e3245566e8399aec3d3e0cbb8a6917c675241301d0c00000000000000000000000000000000040100000000000000000000000000000a1f33475874899eb4c9ded9c3ae99846e594443434439464b54606b8095a5b7cbc6b9a89d8774604b37271502000000000b20354b60758a9fb4cadfd8c3ae99836e59442e1900000c1d3145566d8297acc2d7dfcbb7a68d78624d38220d00000011263c51667b91a6bbd0e6d3bea9947e69543f291400000000000000000000000000000000000000000000000000000000000000122231424e5d65757f8992989c9fa9a1a79e9b9690877c70625a4b3f2e1c08000000000000091e324556606b6b6b6b6b6b6b6b6a655d4b3e2d1a03162839465861696b6b6b6b6b6b6b6b615746331e0a000000000000000000000000000000000000000000000000000000000000000c1c30435463798a9eabbccfd7c6b8a69e8a7d6e625a524c473a453a474c535e6677869ca5b6c9dae2cebbaa98836e5a4935200b0000000000000f24394f64798ea4c6d7e9d6c0ab96816b56412c160100000000000000000e24394e63798ea3b8cee3dbc6b19c86715c47311c0000000c1e324557697f94a7b8cbb7a6947e695645311d080000000000000014293d51626b6d6d6d6d6d6d6d6b645c4c3f2f1c0000000000000000000000000001142636434b5d656b6d6d6d6d6d6d6d69604f3b261200000316283851677c91a5b6cadfd5c5b19b86715f4d3b2a19090000000000000000000000010a10121a170c0a03000000000000000000000004182a3a5c71879cb1c6dcdbc6b19b86715c3a292e2f293336434b6075879db2c7d7c6b6a5957f6a5544311d0800000000081d31445572889db2c7dddbc6b19b86715c39291703000215273853687e93a8bdd3e7d4c4a6917b66513c26110000000e24394e63798ea3c5d6e8d6c1ab96816c56412c1701000000000000000000000000000000000000000000000000000000000000041424313f4b57616a767c8287898b8b8b8986817b73675f4d493c2e21110000000000000003162838454b565656565656565655504b3f2e200f000a1b293a464c5456565656565656564c463929170300000000000000000000000000000000000000000000000000000000000000001325364a5b667c8d9fb5bdccd5c4b8a89e9183786e6761585b5a5c586168707c879ca4b6c3d3e2d2c1b49f8b79634e3c2b19060000000000000c22374c61778ca8b9cde1d8c3ae98836e59432e1900000000000000000010253a4f657a8fa4bacfe4dac5b09b85705b46301b000000031628394b6176899eb3c7c4b29d8874604b362513000000000000000e213444515657575757575757554e4a3d2f21110000000000000000000000000000081826303f4b505657575757575757534f42321f0c0000000b20354b6074879db2c4d5dec9b5a3927d6759473726180a00000000000000000003131e25282f2c211e170b00000000000000000000001a2f44596f8499aec4d9dec9b39e89745846331f19171e263245566a8095aabfd5d4c3b39e8874604b36200b00000000011527375b70859ab0c5dadec8b39e89735746331e0a000010253b50657a90a5bacfe5d3bea9937e69543e29140000000c21364b61768ba7b8cce0d9c3ae99846e59442f1900000000000000000000000000000000000000000000000000000000000000000614212e39464b5761676d717476767574716c6560544d41352c1e110300000000000000000a1a2832364040404040404040403b372e21110100000c1c2933363f40404040404040403633291b0b00000000000000000000000000000000000000000000000000000000000000000008182d3d4d5e6a7f959eafbccdd5c6b9b3a0988c837c777371707173777d84919da6b6c2d3e1d5c4b5a395806a5b49351e0e000000000000000a1f33475874899eb4c9dedbc5b09b86705b39281603000000000000000012273c51677c91a6bcd1e6d8c3ae98836e59432e19000000000a1e3246576a8095a9bacbb7a6927d685443301c07000000000000041626343d41424242424242424039362d1f110300000000000000000000000000000008141c2e373a40424242424242423e3b32241402000000081d314455697e93a6b8cbe0d2c1b39d887761554436271a0f060000000000000a161e313a3d44413633291b0b00000000000000000002172c42576c8197acc1d6e0ccb9a78b76614c36210c030815283850657a8fa5bacfe0cbb8a6907b66513b26110000000000182d43586d8298adc2d7e0ccb8a78b76614b36210c00000f24394f64798ea4b9cee3d5c0ab95806b56402b160000000a1e33465773899eb3c8dedbc6b19c86715c3a291715151515151515151515150d0b050000000000000000000000000000000000000003111b283239464b52585c57606160565b56504b43363020190e00000000000000000000000a161e212b2b2b2b2b2b2b2b2b25231c1103000000000c171f21292b2b2b2b2b2b2b2b211e170b00000000000000000000000000000000000000000000000000000000000000000000000f1f30404a607280959db4bac7d2ccbfb2aa9f99918c88868586888b929aa2b2b7c4d3e0d3c5b8a69b8574604b3d2c1a000000000000000004182a3a5c71879cb1c6dcddc8b39e88735745321e090000000000000004182a3a566b8096abc0d5ebd6c0ab96816b56412c1600000000031629394c61778a9fb4c9c4b19c8673604a35200d00000000000000081621292b2d2d2d2d2d2d2d2b24211a0f01000000000000000000000000000000000001111c23252b2d2d2d2d2d2d2d29261f140600000000011426374b6175889db3c0d1e0cbb8a69a8473605445382c2019100d0c0c0d121a2832414d5259564b4639291b0b000000000000000000142a3f54697f94a9bed4e8d6c5a38e79644e39240f00000d22384d62778da2b7cce7d5c4ab95806b56402b160000000000162b40556b8095aac0d5e8d6c5a38e79634e39240e00000e24394e63798ea3b8cee3d6c1ab96816c56412c17000000031729395c71869bb1c6dbdec9b39e89745846332a2a2a2a2a2a2a2a2a2a2a2a2220180d00000000000000000000000000000000000000000b161e2932363d4339454b4c4b4538413b3530261812060000000000000000000000000003090b161616161616161615100e0800000000000000040a0c1416161616161616160c0a0300000000000000000000000000000000000000000000000000000000000000000000000001121c304354606c7f939fa9b5c2cdcfc8bbb4aea7a69d9b9a9b9e9fabafb4c0cbd4dfcfc3b6a69d8878625645311f0e0000000000000000001a2f44596f8499aec4d9e0cbb8a68b76604b36210b000000000000000a1f33475870859aafc5dae6d4c4a7927d68523d281300000000000b1f3347586d8298adc2cab6a4917c66513b2b190500000000000000040e141618181818181818160f0d07000000000000000000000000000000000000000000080e10161818181818181814120c02000000000000091e324657677d92a2b4c6d7d5c4b3a29781726056493d352b2522212123252f38454b5f676f6c61574639281808000000000000000012273c52677c91a7bcd1e6d0bba6917b66513c261106000b21364b60768ba0b5cbe0d9c4af99846f5a442f1a000000000013283e53687d93a8bdd2e6d0bba6917b66513c2611000711253b50657a90a5bacfe5d6c0ab96816b56412c1600000000192e44596e8399aec3d8e0ccb9a78b76614c3f3f3f3f3f3f3f3f3f3f3f3f3f37342b1d0d0000000000000000000000000000000000000000030b161e21272d283236363632282c25201c1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a616a7e8b9ca4b4b9c6cdcecac3c4b7b3b0afb1b3b4bcc9c8d1ddd3cabfb3a59d887963594838271500000000000000000002172c42576c8197acc1d6e7d5c4a38d78634e38230e000000000000021528384c61778a9fb4c9dfdfcbb7a68d78634e38230e000000000004172a3a4f647a8fa3b5c9c2af9a846f594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394d5f70849aa8b9c9dad0c0b19f978274635b4d493c3b383637383a404c56606d7d84817561574636261401000000000000000f243a4f64798fa4c7d7e9d3bea9937e69543e291b1b1b1921374c61768ca1b6cbe1dbc6b09b86715b46311c000000000010263b50657b90a5c9daecd3bea8937e69533e291b131c20304054697f94a9bed4e9d4bfa9947f6a543f2a1500000001172c41566c8196abc1d6e8d6c5a38e796454545454545454545454545454544d483b2b1805000000000000000000000000000000000000000000030a0c1218161e2121201d1517100b0801000000000000000000000003090b0e0e0e0e0e0e0e0e0d0b050000000000000000000000000000000000000000000000000000000000000000061016192020202020202020200d0b0500000000000000000000000000000000000008182530435060687986959ea8b4bac7cacfd5cbc8c6c5c6c8cacfd9d8d1c9c3b6b2a1998779635b4a3b2b1a0a00000000000000000000142a3f54697f94a9bed4e5d0bba5907b66503b2611000000000004111d324556697e94a9bacee2ddc8b29d88735b4935210c0000000000000c22374b5c71869bb1c9cab49f8b77624d3722100000000000000000090f11202020202020202020202020202020202020202020202020202020202020202020200d0b0500000000000000000000000000000000000b1b30414e63798a9eabbccfe3cebdb1a09885796c625a54504d4c4c4d50555e6675829299968575615443301c13000000000000000d22374c62778ca9bacde1d6c0ab96816b5641303030302c353e4f64798fa4b9cee4dcc6b19c87715c47321c00000000000e23384e63788dabbccfe3d6c0ab96816b564130302530353f4d5e70859bb0c5dbe8d5c5a8927d68533d28130000000014293e54697e93a9bed3e6d0bba6917c6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a62594834200b000000000000000000000000000000000000000000000000000003090b0c0b09020000000000000000000000000000000a161e2123232323232323232220190d0000000000000000000000000000000000000000000000000000000000000a18232b2e353535353535353535351f180d00000000000000000000000000000000000008131c33424e5b6374808a969fa9b0b5bcc9c5c8caced8d8cec9c7c3c1b5b0a59d918376635b4a3d2d1d0d000000000000000000000012273c52677c91a7bcd1e6d2bda8937d68533e281300030a0c0e171f2f3f4b6074879cb2c7d8e4d2c1ac97816c573d2c1a06000000000000081b2e3e53697e93abbccfbcab947f6a543e2d1b07000000000004121d242735353535353535353535353535353535353535353535353535353535353535353535351f180d0000000000000000000000000000000000132135495b677c8d9fb5bdcde2cebeb2a39b8c81786f696562616162656a717b86979faea3998372604b423119090000000000000b1f34475974899fb4c9ded8c3ae99836e5945454545463c494d5c6b8095abc0d5eadac5b09a85705b45301b00000000000b21364b60768a9fb5cadfd8c3ae98836e5945454536434a4e5d667c91a3b5c9dde0ccb8a78e79644f39240f0000000011273c51667c91a6bbd1e6d8c3ae99837f7f7f7f7f7f7f7f7f7f7f7f7f7f7f77624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b283236383838383838383837342b1d0d000000000000000000000000000000000000000000000000000000000618283640434a4a4a4a4a4a4a4a4a4a342a1d0d000000000000000000000000000000000000001524313d4a56606a77818a939a9fababafb3b4bbc8c7bab4b1aea8a39b92877c6e6158493d2d1f0f0000000000000000000000000f243a4f64798fa4c7d7e9d5c0ab95806b56402b1f1f171e21232933404c5d6b8095a5b6cae5ddc9b5a38f7a644f3a240f00000000000000001022374c62778b9fb4cac9b19c86715c4a36220d0000000000122230393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a342a1d0d00000000000000000000000000000000061a2c3d4d5f6b80959fb0bcced9cfc1b5aa9f978c857f7a777676787a7f86909ca4b1beb3a196806b604e37261401000000000005182a3b5c72879cb1c7dcdbc6b09b86715b5b5b5b5b5b5c5b636b7a8a9fb4c9deedd8c3ae98836e59432e190000000000091e32455673889db3c8dddbc6b09b86715b5b5b5b5b5460636c7b899eb3c1d2e4dec8b39e8874604a35200b000000000f24394e64798ea3c6d6e8dbc6b2a1999494949494949494949494949494917c66513c27110000000000000000000a141a1d20202020202020202020202020202020202020202020202014120c02000000000003162839454b4e4e4e4e4e4e4e4e4d483b2b19050000000000000000000000000000000000000000000000000000001023364653586060606060606060605e473b2a180500000000000000000000000000000000000006141f2d38454b59616b767e858b91969a9e9faaa2a2a99f9c99938d857d74675f4c473a2c1f0f010000000000000000000000000d22374c62778ca9bacde1d8c2ad98836d5843353535293336383a464c5e667b8c9fb4c3d3e4d0c0b09b85705c4a36220d00000000000000000b1f34485970859aafc5cab6a48e79644f39240f00000000091d30404d51606060606060606060606060606060606060606060606060606060606060606060605e473b2a1805000000000000000000000000000000000f1f30404a607281969eb4bbc8d3d2c8bbb4ab9f9a94908d8b8c8d8f959ca4b1b6c2cebfb09e937e685544311d080000000000001a2f455a6f849aafc4d9dec8b39e8873707070707070717378808b9fa8bacde1e6d1c0a9947e69543f29140000000000021628385b70869bb0c5dbdec8b39e88737070707070717479818b9ea7b9ccdfe1cfbead98826d5443301c07000000000c21374c61768ca8b9cce1e2cfbfb2aea9a9a9a9a9a9a9a9a9a9a9a9a9a9947e69543f291400000000000000000e1c272f3235353535353535353535353535353535353535353535353529261f140600000000091e32455760636363636363636362594834200b000000000000000000000000000000000000000000000000000000162b4053646e757575757575757575705947341f0b00000000000000000000000000000000000000010f1a28323a474c58616870777c8185888a8b8d8c8b8a87837e78706860554d4133291c0f01000000000000000000000000000b1f34475974899fb4c9dedac5b09a85705b4a4a4a4a39464c4e5158616c7c8b9faabbcee1d6c6b4a2907b66513e2d1b07000000000000000005182a3b53697e93a8c2d3c2aa95806a553a2917040000000f24394d5e6675757575757575757575757575757575757575757575757575757575757575757575705947341f0b0000000000000000000000000000000001121c304354606d80949faab6c3ced8cec9bcb4afa9a5a2a1a1a2a5aab1b5c2cad3d3c6b9a89d8775604b35200b000000000002172d42576c8297acc1d7e0ccb8a79a8585858585858586898d959fa9bac6d7e7d8c8b4a28d78634d38230e000000000000192e43596e8398aec3d8e0ccb8a79a85858585858587898e979faab9c5d6e1d3c3b2a08f7a644f36251300000000000a1f33475874899eb3c9deedddcfc6c3bfbfbfbfbfbfbfbfbfbfbfbfbfac97816c57422c17000000000000000a1c2c3a43474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3e3b322414020000000b21364b6075797878787878787878624d37220d000000000000000000000000000000000000000000000000000000192e43586e828a8a8a8a8a8a8a8a8a77624c37220d0000000000000000000000000000000000000000000a151d2a343a474c535962676b7073757677777675726e69635b524b4437301f170c00000000000000000000000000000005182a3b5c72879cb1c7dcddc8b29d8873555f5f5f5f5f576163666d76818d9fa9bac8d8dac9b9a89a846f5e4c382010000000000000000000000d22374d62778ca4b6cac5b09b85705846331f0a00000011273c51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a77624c37220d000000000000000000000000000000000000132536434a626b7f8c9da5b4bac7ced9cfcac4bebab7b6b6b7babfc6c9d2d9cec3b6a89e8a7a645544311d08000000000000152a3f546a7f94a9bfd4e8d5c5b4a29a9a9a9a9a9a9b9c9ea7aab4bac7d7e2d6c9bbaa9a84705a4935200c000000000001162b41566b8096abc0d5e8d5c5b4a29a9a9a9a9a9b9c9ea7acb4bbc8d6dfd1c3b6a598826d5c4a36180800000000000417293a5c71869cb1c6dbf1ede2dbd8d4cdcdcdcdcdcdcdcdcdcdcdc4af9a846f5a3726140100000000000014273a4a575c606060606060606060606060606060606060606060606060534f42321f0c0000000f24394e64798d8d8d8d8d8d8d8d85705b382816030000000000000000000000000000000000000000000000000000162b41566b80969f9f9f9f9f9f9f8f79644f3a240f00000000000000000000000000000000000000000000020c181f2a33373b484d52565a5e5761626261605459534e493d35312719120400000000000000000000000000000000001a2f455a6f849aafc4d9dfcab49f8c737474747474747476787c8289979fabbac7d7e1cfbcab9e8a78624d402f1c02000000000000000000000b2034485971879cb1c6cab49f8b76614c36210c0000000f24394f64798e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8f79644f3a240f000000000000000000000000000000000000081825304451616a7a87969fa9b4bbc8c9d2d7d4cfcccbcbcdcfd4dad7cdc8bbb4a59c8a7b655c4a3726140100000000000012273d52677c92a7bcd1e7e3d1c0b4b0b0b0b0b0b0b0b1b3b8c5c9cdd7d8cec5b9ab9f8b7a644e3c2c190600000000000014293e53697e93a8bed3e8e3d1c0b4b0b0b0b0b0b0b1b3b8c5c9ced8d4cac0b4a59d8776614c3e2e1b00000000000000192f44596e8499aec3d9eeeadaccc3bfb8b8b8b8b8b8b8b8b8b8b8b8b29c87725544311d080000000000001a2f4357687275757575757575757575757575757575757575757575757569604f3b26120000000c21374c61768ca8a3a3a3a3a39d88735645321e09000000000000000000000000000000000000000000000000000013293e53687e93a8b5b5b5b5b5a6917c67513c2712000000000000000000000000000000000000000000000000040c171f212b34373c414539464b4d4d4c4b43363e38352c201d150900000000000000000000000000000000000002172d42576c8297acc1d7e3cfbcab928a8a8a8a8a8a8a8a8b8d91989ea7b4bcc9d7d6cdbbb59f8d7d675a49352212000000000000000000000005182b3b576c8196acc1cebbaa917c66513c27110000000c22374c61778ca4b6b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a7917c67523c27120000000000000000000000000000000000000008131c34434f5c6475818b979faab1b5c2c2c6c9cacfdad6ccc8c5c6b9b4aa9f97877a655d4b3e2d1909000000000000000f253a4f647a8fa4c7d7d7d7d7d1c8c5c5c5c5c5c5c5c6c8ccd6d8cec9c8bbb4a79e8d7d685c4a361e0e0000000000000011263b51667b90a6bbd0d7d7d7d1c8c5c5c5c5c5c5c6c8ccd6d6ccc9c3b7b2a29a877862584633201000000000000002172c41576c8196acc1d6ebdfccbcafaaa2a2a2a2a2a2a2a2a2a2a2a2a29f8a75604b35200b0000000000001d32475c72868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7e69533e29140000000a1f33475874899eb3b8b8b8b8a68b76604b36210b000000000000000000000000000000000000000000000000000011263b51667b90a6bbcacacabea9947f69543f2a140000000000000000000000000000000000000000000000000000040a0d192022272c302932363837363530262923211a0f08010000000000000000000000000000000000000000152a3f546a7f94a9bfd4ebd9c9baa99f9f9f9f9f9f9f9fa9a3a6adb3b9c5cfd9d0c6b9b49d947f6a5f4d3c2b190400000000000000000000000011273c51667c91a6c3d4c8ac96816c573625130000000a1f33475872879cb1c0d1cacacacacacacacacacacacacacacacacacacacacacacacacacabea9947f69543f2a140000000000000000000000000000000000000000001625323e4b57616c78828b949ca4a8acb1b3b5bcb7c5b8b3b0aca89e978c8176645c4b3f2e201000000000000000000d22374d62778ca9bac2c2c2c2c2c2c2c2c2c2c2c2c2c1c1c0bec7bab4b0aa9f97897d685f4e3e2d1a00000000000000000e24394e63798ea3c5c2c2c2c2c2c2c2c2c2c2c2c2c2c1c0bec5b9b3aea59d928477625a493a2917020000000000000014293f54697e94a9bed3e9d7c3af9e958d8d8d8d8d8d8d8d8d8d8d8d8d8d8d78624d38230d0000000000001a2f445a6f84999f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f96816b56412c160100000417293a5c71869cb1c6cdd5c4a38d78634e38230e00000000000000000000000000000000000000000000000000000e24394e63798ea3c5d5e8d6c1ac96816c57412c170200000000000000000000000000000000000000000000000000000000050b0d12161b161e21222221201c14140e0c06000000000000000000000000000000000000000000000012273d52677c92a7bcd1e7e7d7c7bab4b4b4b4b4b4b4b4bac7bbc2c9ccd6d1c8bfb3a89e917f6a615041301e0e000000000000000000000000000c21374c61768ca5b7cac5b09b85705443301c07000004182a3a53687d93a2b4c5d5e8dfdfdfdfd2c9c6c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c1ac97816c57422c170200000000000000000000000000000000000000000715202e39464b5a626d787f868e93979c9e9faba2a1a79e9b97918982796c61584a3d2e21110200000000000000000b20354a60758a9facacacacacacacacacacacacacacacacaba9a7a99f9a948b8278675f4e4131200f00000000000000000c21364c61768ba7acacacacacacacacacacacacacacacaba9a7a79e9891877d726259493c2c1c0c000000000000000012273c51677c91a6bcd1e6d5bfaa958078787878787878787878787878787874604b36200b000000000000172c42576c8197acb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ae98836e59432e19000000001a2f44596f8499aec4d9d0bba5907b66503b261100000000000000000000000000000000000000000000000000000c21364b61768ba7b8cce0d9c4ae99846f59442f1a0000000000000000000000000000000000000000000000000000000000000000000100030a0c0d0d0c0b08010000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7d7d7d7d7cdc9c9c9c9c9c9c9c9ced8d1d3d3cac7c1b4b0a19a8a7d6a61504333231300000000000000000000000000000a1f33475872889db2c7c9b49e8974604a35200b0000000c20354a6072849aa7b8cce0ebf8e4d2c1b5b1acacacacacacacacacacacacacacacacacacac99846f59442f1a0400000000000000000000000000000000000000000002101b29333c484d5a626a71797d8286898a8c8d8c8b8985817b766c635b4c463a2d1f1103000000000000000000071c304354728797979797979797979797979797979797969694928e8a857f776d62594d403123130100000000000000000a1e3346577489979797979797979797979797979797969694918e89837c74686054473b2c1e0e0000000000000000000f24394f64798ea4c6d7e9d5c0ab96806b6363636363636363636363636363605645321d09000000000000142a3f54697f94a9bec0c0c0c0c0c3c6cfcacacacad2c9c6c0c0c0c0b09b86715b39291703000002172c41576c8196acc1d6d3bda8937e68533e291311131513110d0b050000000000000000000000000000000000000a1e33465773899eb3c8dedbc6b19c86715c3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bac2c2c2c2c2c2c2c2c2c2c2c2c2c2c1c1c0bdc2b6b1aba39b908478675f4f4333251505000000000000000000000000000004172a3a596e8499aec3ccb9a88d78624d38230d000000071c3043546277899eb3bdcee0f0ddc9b5a39b979797979797979797979797979797979797979786715c47321c0700000000000000000000000000000000000000000000000b171e2b353c484d545b63686d7174757678777673706c6661574e493d33291b0f01000000000000000000000013253654697f8282828282828282828282828282828281807f7c7975706962594d483b3022130500000000000000000003172939556a8082828282828282828282828282828281807f7c78746e6660554a43362a1d0e000000000000000000000c22374c61778ca8b9cde1d8c3ad98836e584d4d4d4d4d4d4d4d4d4d4d4d4d4b453828150200000000000012273c51677c91a6ababababababaeb2bfcfe2e5d2c2b5b1ababababab9e89735746331e0a000000142a3f54697f94a9bed4d5c0ab95806b56402b2126282a2927221f180d0802000000000000000000000000000000031729395c71869bb1c6dbdec9b39e89745846331f0a00000000000000000000000000000000000000000000000001080b0e1214151615151412100c0a040000000000000000000000000000000000000000000000000000000000000b20354a60758a9facacacacacacacacacacacacacacacacabaaa8a5a49c968e857b6f635a4d413225150700000000000000000000000000000000152b40556a8095aabfd6c6a6917b66513c2611000000001325364859667c919fb1c2d2e5dbc6b19b858282828282828282828282828282828282828282816c56412c1701000000000000000000000000000000000000000000000000030e19202b34383d494e53575c556061626160575b57514b4639362c1f170b0000000000000000000000000008273c4f61696d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6c6b6967646056544c483b342b1d120400000000000000000000000b283c50626a6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6b6967636055514b44373025180d00000000000000000000000a1f33475874899eb4c9dedbc5b09b86705b383838383838383838383838383632281a0a000000000000000f24394f64798e9595959595959598a0b2c6dbdec9b5a49c9595959595958b76614c36210c00000012273c52677c91a7bcd1d8c3ad98836e584333363b3e3f3e3c37342a201d1509000000000000000000000000000000192e44596e8399aec3d8e1ccb9a88b76614c36210c000000000000000000000000000000000000000000030a0c151d202427292a2b2b2a292725221f18140e0c060000000000000000000000000000000000000000000000000000071c30435472879797979797979797979797979797979797969593908c87817970665e4d493c30231507000000000000000000000000000000000011273c51667c91a6bbd1bfa9947f6a543f2a150000000008182b3b4c5e6c8197a4b5c7d7ddc8b39e88776d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c63513e2915000000000000000000000000000000000000000000000000000000060d1920222c36393e4237444b4c4d4c4b4539423c363229211a0f0400000000000000000000000000000c2032434f5457575757575757575757575757575757575654524f4b453837342b20190d000000000000000000000000000d2133445055575757575757575757575757575757575654524e4b44373531271c130800000000000000000000000004182a3a5c71879cb1c6dcddc8b39d88735645322323232323232323232323201d150a00000000000000000c21364b617580808080808080808298aec3d8dbc6b19c868080808080808076614c37220c0000000f243a4f64798fa4c7d7dbc5b09b86705b39464b51535553514c473b36312719120200000000000000000000000001172c41566c8196abc1d6e8d6c6a38e79644e39240f00000000000000000000000000000000000000040b161e21273135393c3f4040403f3e3c3a37332a2a23211a0f0a0400000000000000000000000000000000000000000000000013253654697f828282828282828282828282828282828281807e7b77726b645c514c40352c1e13050000000000000000000000000000000000000f24394e64798ea3c7d7c1ac96816c57412c1702000000000d1d30404b6075869ca9bacde0cbb8a699837260575757575757575757575757575757575756514434220e0000000000000000000000000000000000000000000000000000000000050b0f1a2123282d2631353738373632282c26211e160b0600000000000000000000000000000000031525323c3f4242424242424242424242424242424241413f3d393632282220180d050000000000000000000000000000041525333c4042424242424242424242424242424241413f3c39353126201d15090000000000000000000000000000001a2f44596f8499aec4d9e0cbb8a68b76604b36210e0e0e0e0e0e0e0e0e0e0b09020000000000000000000a1e334657616b6b6b6b6b6b6b6b7a8fa4c7d7d9c4ae99846f6b6b6b6b6b6b615847331f0a0000000d22374c62778ca9bacdddc8b39d8873564e576166686a68666259534b44372f1e160a00000000000000000000000014293f54697e94a9bed3e6d0bba6917b66513c26110000000000000000000000000000000000000c171f29323637444b4e51545556555453514f4c473a3f39362c211f170c040000000000000000000000000000000000000000000008273c4f61696d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c6c6b68666259564f4a3e382f20190e00000000000000000000000000000000000000000c22374c61778ca9bacdc3ae98836e59432e19040000000000121e32455663798b9fb4bfd0d5c4b3a1947e695c4a394242424242424242424242424242413e342616050000000000000000000000000000000000000000000000000000000000000000060c0e1318141d20212322211e1617110c0a0300000000000000000000000000000000000000071520272a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b2a2724211e160d0b050000000000000000000000000000000000071521282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b2a2723201d140b080100000000000000000000000000000002172c42576c8197acc1d6e7d5c4a38d78634e38230e00000000000000000000000000000000000000000003172939464b5656565656565662778ca9bacddcc6b19c87715c56565656564c473a2a18040000000b1f34485974899fb4c9decbb8a68b7660646e767b7d7f7e7c77706860554c4032281a0b000000000000000000000011273c51667c91a6bbd1e6d3bea9937e69543e29140000000000000000000000000000000003131c2a3339464b5255606367696a6b6a6a696765615859544e493d3733291f180c0100000000000000000000000000000000000000000c2032434f545757575757575757575757575757575757565553504c483b39362d241d12060000000000000000000000000000000000000000000a1f33475874899fb4c9c5b09b85705b46301b060000000000031628384a5b697e93a1b3c4d4d0bfb49f8b7a645745322d2d2d2d2d2d2d2d2d2d2d2d2d2c29221608000000000000000000000000000000000000000000000000000000000000000000000000000001080b0c0d0c0b090300000000000000000000000000000000000000000000000000030c121418181818181818181818181818181817171614120f0b0902000000000000000000000000000000000000000000040d1315181818181818181818181818181818171614120e0b080100000000000000000000000000000000000000142a3f54697f94a9bed4e5d0bba5907b66503b2611000000000000000000000000000000000000000000000b1b293336404040404040475974899fb4c9dec9b49e897458474040404037332a1c0c0000000005182a3b5c72879cb1c7dcd5c4a38d796b79838a90939493918b857d74665e4b4538291b0b000000000000000000000f24394f64798ea4c6d6e9d6c0ab96816b56412c160100000000000000000000000000000b161e313a474c5761686f75797c7e7f80807f7e7c7a77736f69635b544c473a332a1c140800000000000000000000000000000000000000031525323c3f424242424242424242424242424242424241403e3b37342a24221b1009000000000000000000000000000000000000000000000004182a3a5d72879cb2c7c7b29d88725d48331d000000000000000a1a2d3d4f606f8399a6b7c9dacebaa99c8675604b41301e181818181818181818181817150e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcd1e6d2bda8937d68533e28130b0b0b0b0b0b0b0b0b0b0b0b0b0a0000000000000000000b171e212b2b2b2b2b2a3b5c72879cb1c7dccdb9a88c77614c372b2b2b221f180c0000000000001a2f455a6f849aafc4d9d0bba6907c808d999fa9a8aaa8ab9f9b92877c6d60564639291b0b0000000000000000000c21374c61768ca8b9cde1d8c3ae98836e59432e1900000000000000000000000000000c1b2932424e58616b767d84898e91949595959493918f8c88847f79716961584c473a3026180c00000000000000000000000000000000000000071520272a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b2926221f180f0d0700000000000000000000000000000000000000000000000000001b30465b70859bb0c5c9b49e89745f49271502000000000000000f1f32424c6176889dabbccfd8c7b6a497816d5f4d3c2b190900020202020202020201000000000000000000000000000000040a0c0d0d0d0d0d0d0d0b07000000000000000000000000030a0c0d0d0d0d0d0d0c0a04000000000000000000000000000000070b0f0f0f0f0b0903000000000000000000000000000000000000060c0e1515100e0800000000060c0e1515100e0800000000000000000000000001080b1d1d1d1d1d1d1d12100a0100000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c7d7e9d5c0ab95806b56402b20202020202020202020202020201f0b070000000000000000030a0c161616161a2f455a6f849aafc4d9d7c6a48e79644f392416160c0a0400000000000002182d42576d8297acc2d7ddc8b39d88969fabb4bac7bfc9bcb5b0a59d9181746157463928180800000000000000000a1f33475874899eb4c9dedbc6b09b86715b392816030000000000000000000000000c1d2a39464b606876808992999ea8a6a9aaabaaa9a8a6a4a69e99948e867f766c61584b43362a1c0c00000000000000000000000000000000000000030c12141818181818181818181818181818181817171613110d0b0500000000000000000000000000000000000000000000000000000000051a30455a6f859aafc4cab49f8a755544311d080000000000000001141f334758657b8d9fb5c1d2d3c2b19f917c675a483726140100000000000000000000000000000000000000000000000c171f2122222222222222201c13080000000000000000000b161e21222222222222211f170c00000000000000000000000008131c2024242424211e160a000000000000000000000000000000000e1920232a2a25221b1002000e1920232a2a25221b100200000000000000000009151d203233333333333328251e1305000000000000070b0d0f100e0c0a04000000000000000000000000000000000d22374c62778ca9bacde1d8c2ad98836d584335353535353535353535353535353534201c130800000000000000000001010102172d42576c8297acc1d7d1bba6917c66513c27110100000000000000000000152a3f556a7f94aabfd4e0cbb8a69da6b5bcc9bebec1c8cbcac3b7b29f978475615746362513000000000000000004172a3a5c71879cb1c6dcddc8b39e88735745321e0900000000000000000000000c1c2a3b4757616e7d89959ea8aeb4b9c6bebfc0bfbfbebcc5b8b3aea9a49c948a8177696054473a2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8499aec4cebbaa8b75604b36200b000000000000000004182a3a4c5d6b8096a3b5c6d6cebdb39e8978625544311d10000000000000000000000000000000000000000000000c1c29333737373737373737353025180f01000000000007151b29323637373737373737332a1c0c000000000000000000000818253035393939393632281a0a00000000000000000000000000000e1e2c353840403a372e21140e1e2c353840403a372e211406000000000000000919273135484848484848483d3a3123130100050b0d131c2023252523211f170c0a04000000000000000000000000000b1f34475974899fb4c9dedac5b09b85705b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3530251808000000000000000000000000152a3f556a7f94aabfd4d3bea9947e69543f2914000000000000000000000012283d52677d92a7bcd2e7d5c4b8b3b8b6b1aca9a9acb3b7c4cfcabdb1a29a8575615443301c0f00000000000000001a2f445a6f8499afc4d9e0cbb8a68b76604b36210b0000000000000000000009192a3a4759617583929ea7b4b9c6c9cdd6d3d1cecccccdced5cbc8c4c2b5b1a89f96897f73615947341f0a000000000000000000000000000000000000000000060c0e111415161514120f0b090300000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aec3d9b6a08b76614b36210c0000000000000000000c1c2f3f4b6074859ba8b9cde0ccb8a79a8473604b3f2e1b0b00000000000000000000000000000000000000000417293a474c4d4d4d4d4d4d4c4a43362d1f0f000000000515263339464b4d4d4d4d4d4d4c473a2a1704000000000000000000132536434a4e4e4e4e4b45382816030000000000000000000000000c1c2c3c494d55554f4b3f32241c2c3c494d55554f4b3f32241400000000000001152737444b5d5d5d5d5d5d5d524d41311e0a0d181f22253035383a3a39363329221f180c00000000000000000000000005182a3b5c72879cb1c7dcddc8b29d887356606060606060606060606060606060605f5b4336251300000000000000000000000012273d52677c92a7bcd1d6c1ab96816c56412c17010000000000000000000010253a50657a8fa5c8d8eae2d3c3b6b2a49c979493979da6b4bcc9cec0b4a3998372604a3d2d180800000000000002172c42576c8197acc1d6e7d5c5a38e78634e39230e00000000000000000001152737475861778699a1b3b8c5cdd6d6cdc9c3bcb9b7b6b7b9bcc1c7cad2c9c6bab4a89e948477614c37220c000000000000000000000000000000000000070b1019202326292a2b2a292724211e160d0c0600000000000000000000000000000000000000000000000000000000000000000000000003182d43586d8298adc2ccb6a18c77614c37220c00000000000000000000111d31445563788a9eb4becfd6c5b4a2957f6a5d4b3a291704000000000000000000000000000000000000000a1f334758616262626262626260544a3d2d1a0a00000013233344505761626262626262615847331f0a00000000000002090b1c3043546064646464605645321e090b0902000000000000000004172a3a495a636a6a655d4f42322a3a495a636a6a655d4f42321c0c0000000000081d3144556072727272727272675f4d3a251f212a343736434a4d4f4f4e4c463a37332a1c140000000000000000000000001a2f455a6f849aafc4d9dfcab49f8c747575757575757575757575757575757575746d5443301c07000000000000000000000010253a4f657a8fa4c8d8d9c3ae99846e59442f1900000000000000000000000d22384d62778daabbcee2dfcab6a59d9086817f7e8188959fabbbc8d1c1b2a1947f6a5b4a36251300000000000000152a3f546a7f94a9bfd4e5d0bba5907b66503b2611000000000000000000081d3144556176869ca4b2bfccd6d8cec6b9b4ada7a4a2a1a2a4a7abb2b6c3c5cecdc6b9b3a2917b66513c26110000000000000000000000000000000008131c20252c35383b3e3f40403f3d3a3632282320190e080000000000000000000000000000000000000000000000000000000000000000000003182e43586d8398adc2ccb7a18c77624c37220d0000000000000000000002152737495a687d92a0b2c3d4d1c0b49f8c7a645846331f13000000000000000000000000000000000000000c21374c61767777777777777773635b4a38281603000a1a304150626b7677777777777776614c37210c00000000000a151d2020354a60727a79797974604b36211e211e160a000000000000000a1f33475863787f7f7a69604f3a33475863787f7f7a69604f3a2a1704000000000b20354b6074878888888888877d6752372933363b474c535460626465636158554c473a321c130800000000000000000002172d42576c8297acc1d7e3cfbcab928b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b72604a35200b00000000000000000000000d22384d62778daabbcedbc6b19b86715c39291703000000000000000000000b20354b60758a9fb4cadfdcc7b29d877b716c69696c747f8d9faabbcecfbfb49f8b79635443301c0800000000000012273c52677c91a7bcd1e6d2bda8937d68533e28130000000000000000071a2d3d4b6073849aa4b5c2cfe0d4c8bbb4a89e98928f8d8c8d8e92969ca4adb1beced6ccc0a8937e69533e291400000000000000000000000000000412182530353b3c494d515355555554524f4b453938352c221b1005000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aec3cbb6a18c76614c37210c000000000000000000000009192c3c4e5f6d8298a5b7c8d8cebbaa9d8776614c41311e0e00000000000000000000000000000000000011263c51667b8c8c8c8c8c8c8c8779635645321e0b021528384d5f6b808b8c8c8c8c8c8c7d68523d2813000000000c1a28323632304354748a8e8e8e7b65503b28323632281a130500000000000c21374c61768995958f7e695847374c61768995958f7e695847331f0a00000000081d31445574899d9d9d9d9d96806b55443a464c535962686f74787a7a7876716a61584f4230251808000000000000000000152a3f546a7f94a9bfd4ebd9c9bca4a09f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa98c77624c37220d00000000000000000000000b20354b60758a9fb4cadec9b39e89745746331e0a00000000000000000000081d31445572889db2c7ddcdb8a38e79655d57545456606a7d8c9fb4bfd0cebaa99b8572604a3625130000000000000f253a4f647a8fa4c7d7ead5c0ab95806b56402b1601000000000000000c21364a5b6a8095a2b4c2d2e0d4c4b7aa9f9689837c79777778797d81878e979fb1c8d8d6c0ab96816b56412c16010000000000000000000000000c171f2f36434a50585a6366696a6b6a6967646057554d493c372e20190e00000000000000000000000000000000000000000000000000000000000000041a2f44596f8499aec4d6c5a08b76614b36210c0000000000000000000000000e1e31414c6176879daabbced9c8b7a598826e5f4e3c2c190900000000000000000000000000000000000f24384c5e6f849aaba2a2a2a59d8775604b3a2917091d324556677d919faba2a2a29b8673604b35200b0000000c1c2938454b4538365c71879ca3927d68533d38454b4538302313000000000013293e53687e93a7aa9f8a76614c3e53687e93a7aa9f8a76614c37210c00000000011527375d72889db2b2b2b29c877360545658616870777d84898d8f8f8e8b86807769604a4336251300000000000000000012273d52677c92a7bcd1e7e7d9cfb8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a48f7a644f3a250f0000000000000000000000081c30435472879db2c7dcccb9a78b76614c36210c00000000000000000000011426375a70859aafc5dacfbaa58f7a65503f3f38454b5f687e93a1b3c8d8c7b5a3917c675443301c0700000000000d22374d62778ca9bacde2d8c2ad98836d58432e1800000000000000081c2e3f4e63798b9fb4c0d0e0d4c4b7a69d8b80766e676462616264676c72798197aabbced8c3ae98836e59432e190000000000000000000000000e1c2933404c5460656d73787b7e7f807f7e7c7976706a625a4f4b3f352b1e13000000000000000000000000000000000000000000000000000000000000061b30455b70859ab0c5ccb9a78a75604b35200b00000000000000000000000000131f334658647a8c9fb4c0d1d4c3b2a0927d685b493727150200000000000000000000000000000000091d2f404e647a8d9fb5c7c3b7a5947f695846331f1729394b6074879db2bcc8b3a1907b655443301c0800000417293a475660564b44596f8499aa95806a553e4b5660564d41301e0e00000000172d42576c8297acbaa9937e685338576c8297acbaa9937e68533828150200000000192f44596e8499aec9c7b6a49680736c6c6f767d858b93999ea8a4a4a3a39b95897e6c605443301c0f00000000000000000f253a4f647a8fa4c7d7d7d7d7d7d7cacacacacacacacacacacacacacacacabca7927c67523d27120000000000000000000000011426365a70859aafc5dad6c5a38e79634e39240e0000000000000000000000182d43586d8298adc2d7d2bda7927d68523d2a2731414e606e8399aabbced2c1b19c8673604a35200b00000000000b20354a60758a9fb4c9dfdac5b09b85705b382715020000000000000e23374b5d6f849aaabbceded9c9b7a69d88796b6157524f4d4c4d4f52565c64738b9fb4cadbc6b09b86715b39291603000000000000000000000e1e2b3a464c5e66737b82888d909394959594928f8a857f786f655d4d483c301c130800000000000000000000000000000000000000000000000000000000031629395c71879cb1c6c9b39e89745544311d08000000000000000000000000000417293a4b5c6a7f95a2b4c5d6cfbeb49e8a79635544311d1100000000000000000000000000000000001222364a5c6d8298a9bacdc3b39e8976614c3a2a1e334657697e94a5b7cabbaa99836f5d4b3626140100000a1f3347586175696055576c8196ac98826d584b5c6476675f4d3c2b1808000000192e43596e8398aec7af99846f5645596e8398aec7af99846f5645321d0900000000142a3f54697f94abbccfc3b09e96868181848a939a9fabaeb3b9c6bac1b5b1a79e938172604a3d2c1a06000000000000000d22374d62778ca9bac2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2bfaa947f6a553f2a15000000000000000000000000182d42586d8297adc2d7d0bba6917b66513c26110000000000000000000000162b40556b8095aac0d5d4bfaa957f6a55402a151d31424d62788b9fb4c9dfc9b5a4907b65503929160300000000071c30435472879cb2c7dcddc8b29d88735645311d09000000000005182a3b50657a8fa2b3c8d8e3cfbcab9d8778635b4b46393a383738393d3e4a5472879db2c7dcc8b39e88735746321e0a0000000000000000000d1d2b3c4858616e7b8690979da6a6a8aaaaaaa9a7aa9f9b948c847a6e625a4d41302518080000000000000000000000000000000000000000000000000000000a1e32465774899eb3c9c7b29d87725d3727150100000000000000000000000000000b1b2e3e4b6072849aa7b8cce0cdb9a89b8574604b3f2f1c0c00000000000000000000000000000000071b2d3e4d62788a9fb4c4ccb8a795806a5847332b3b4c6176899eb3c3c6b49f8b79634e3f2f18080000031628384c6176887f73655d697e94a99a857055606a7a877d675a483626140100001a2f44596f8499aec4b49f8975604b596f8499aec4b49f8975604b36200b000000000e23384d63788c9fb5c7cdbcb0a49c96969a9fa9afb4bcc9c9ccd6cfd2c9c5b9b39f947f695b4936210c000000000000000b20354a60758a9facacacacacacacacacacacacacacacacacacacacacacacacac97826d57422d18000000000000000000000000152b40556a8095aabfd5d3bea8937e69533e2914000000000000000000000013283d53687d92a8bdd2d7c2ad97826d58422d18142034485a6d8297acc2d3d2c2ad98826d5746321e0a00000000001325365a6f859aafc4dadfcab49f8a75604b36200b00000000000b1f3447596e8399aec0d0e6d7c7b49f8c7a645a4a3d32292422222324282d365a70859aafc5daccb8a78b76614b36210c000000000000000009192b3b485a627682909ba3adb3b7c4bebfc0bfbec8bbb4b0ab9f998f8378675f4a433625180800000000000000000000000000000000000000000000000000000c21364b61768ba7b9ccc5b09b86705b46311b00000000000000000000000000000000101c3043546278899eb3bdced6c6b5a396806b5d4c3a2a18040000000000000000000000000000000010203448596b8095a6b8cbc5b49e8a77614c3b3448596b8095a7b8ccb9a897816c5b49352111000000091e3245566a7f9494867b6d667c91a69d87726373808c9c8978625443301c0800001a30455a6f859aafc4baa8907b65505a6f859aafc4baa8907b65503b2510000000000c2035495a6f8499a9bacdcdc2b6b1acabafb4bac7cacbc8c1bbb8bac1cacfccbdb49f8b79634e3a2a1704000000000000071c3043547287979797979797979797979797979797979797979797979797979797856f5a45301a00000000000000000000000013283d53687d92a8bdd2d6c0ab96816b56412c16010000000000000000000010263b50657b90a5c9dadac4af9a856f5a36261405192b3c4e63798ea4b6c9dec9b49f8a76614b36210c0000000000182d42576d8297acc2d7e3cfbcab8d78624d38230d00000000000d22374c62778b9fb4cadfe1cdbaa996816c5d4b3c2d1e160f0d0c0d0f182d43586d8298adc2d7d5c5a38e78634e39230e0000000000000001152737485962788698a0b1b5c2c8cbd4d3d4d5d4d3d8cec9c9bcb5aea199897d6b60544336251300000000000000000000000000000000000000000000000000000e23394e63788ea3c5d6c3ad98836e58432e190300000000000000000000000000000001142636485a677c919fb1c2d3d2c1b59f8d7b655947341f140100000000000000000000000000000005192b3b4b6175889db3c2cdb9a896816b59483d4c62778a9fb4c5c3b39e8977614c3d2c1a030000000b21364b6075889ea49c8f8277798ea69e89747885959fa79a8573604b35200b00001b30455b70859ab0c5c6ab96806b565b70859ab0c5c6ab96806b563727150200000006192c3c4e63798b9fb4bcc9d1c9c6c1c1c4c9ccc9c4b8b3aca6a3a4acb5bcc9cebaa997826d5847331f0a0000000000000013253654697f828282828282828282828282828282828282828282828282828282806b55402b1600000000000000000000000010253b50657a90a5c9d9d8c3ae98836e59432e1900000000000000000000000e23384d63788dabbccfdcc7b29d87725443301c080d2135495b71869cb1c6dccdbaa9907b66513b26110000000000152a40556a7f95aabfd4ebd9c9a5907a65503b2510000000000013283e53687e93aabbcee2dec9b49f8a76614c3f2e1e0f03000a161e21292b40556a8095aabfd5d0bba6907b66513b261100000000000000081d3144556277879ca4b2bec9d2dddcd5ccc8c5c4c5c7cacfdacfcabfb2a79e928072605443301c130000000000000000000000000000000000000000000000000010263b50657b90a5bad0c0ab96806b56412b16010000000000000000000000000000000008182b3c4d5f6c8197a4b6c7d7cfbcab9d8877614c42321f0f000000000000000000000000000000000d1e324657687e93a4b5c9c6b49f8a77624d495b6c8197a8bacab7a5947f6a5947341f0f000000000d23384d627886949ea8a098897d889d9e897c8a9ba3b39f978677624d37220d00001c31465b71869bb0c6c6b19c8671555b71869bb0c6c6b19c86715544311d08000000000e21364a5b697e939fabb5c1c4c6c8c7c5c5b9b3ada69e96908e8f979fabbccfc7b49f8a76614c37210c0000000000000008273c4f61696d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6b62503d28140000000000000000000000000e23384d63788dabbccfdbc5b09b86705b39281603000000000000000000000b20364b60758a9fb5cadfc9b49f8a75604b35200b061a2c3d556a8095aabfd5d7c7ab96816c56362614010000000012283d52677d92a7bcd2e7d2bda7927d68523d28130000000006192b3c596e8499aec8d8ead7c7ad97826d584733201000000a1a2832363e414153687d92a8bdd2d3bea8937e69533e291400000000000005182a3b4b6073859ba5b6c2cfdeded0c7c5b8b3b0aeafb2b5bcc9cbd4cfc5b9b39e968172604a41301e0e00000000000000000000000000000000000000000000000013283d53687d92a8bdd2bda8937e68533e29130000000000000000000000000000000000000d1d30404b6075869ca9bacddac9b7a699836f604f3d2d1a0a000000000000000000000000000000031629394b6073869cb1c0cdbaa997816c5a4e63798b9fb4c6c1b29d8775604b3a2a1801000000000b2035485a62747f8a98a0a79e928a9e9f8a8a9ea8a89e91827562594834200b00001a30455a6f859aafc4cab49f8a75605a6f859aafc4cab49f8a75604b36200b00000000071a2d3d4f60697e8d9ba3aaafb1b3b2afaba79e989088817b787a818d9fb5c6cdbaa9917c66513c2611000000000000000c2032434f5457575757575757575757575757575757575757575757575757575755504433210d0000000000000000000002050b20364b60758a9fb4caddc8b39e88735745321e0900000000000000000000091d32455673889db3c8ddcebbaa8d78624d3823100011263b50667b90a5c5d5dbc6b19b86715443301c080000000010253a50657a8fa5c8d9ebd5bfaa95806a55402b15000000000b2035495a73889eb3c8dde2cdbaa98f7a654f3a2a17020003162838454b53565656657b90a5bad0d5c0ab96806b56412b160100000000000b1f3448596a7f94a3b4c3d3e0d9ccc0b4afa79e9b999a9c9fabb3b7c4ced6ccbcb09f96806b5f4d3c2c19060000000000000000000000000000000000000000000001172c41566c8196abc1d4c4a58f7a65503a251000000000000000000000000000000000000000121e324557647a8b9fb4bfd0d4c4b3a1937e695b4a382816030000000000000000000000000000000b1d314455667b90a2b3c9c7b49f8b78635c6e8399aabbc9b5a3927d675645321c0c000000000006192b3c485560697883909ba2a89ea8a89f9faaa199897d6d6057483b2b18050000182d42576d8297acc2cfbcab8d7862576d8297acc2cfbcab8d78624d38230d00000000000f1f32424f60697b858f959a9c9d9c9a969089827b746c6663656c8095a8b9bfc7ab96806b56412b1600000000000000031525323c3f424242424242424242424242424242424242424242424242424242403d3326160400000000000000050b0d181a161d31455673889db2c8ddcbb8a68b76604b36210b00000000000000000000021528385b70869bb0c5dbd8c8a9947e69543e2d1b070c22374c61778ca6b8cbdec9b49f8975604b35200b000000000d23384d62788daabbcee2d7c2ad97826d58422d18000000000d23384d62788da7b8cce0dfc9b49f8a75604b36200c0000091e32455660696b6b6b6b788da3b8cdd8c3ae98836e59432e190000000000021527374c62778a9eb4c1d1e1daccbbaea29a9088868485878b939da6b1bdcce0cdbdb09e927d675a493520120000000000000000000000000000000000000000000005182b3b5a6f859aafc4cbb7a68c77614c37210c00000000000000000000000000000000000000031628394a5c697e93a1b3c4d5d0bfb49f8b79635645321e12000000000000000000000000000000011426374c5e6f849aabbccebbaa98826d647a8fa1b2c8bfb09b8572604a382816000000000000000e1e2b37444b59626e7b85979faab9bab4aa9f968378675f4b45392b1d0d000000152a40556a7f95aabfd9c9a5907a65556a7f95aabfd9c9a5907a65503b2510000000000001142432424f5d65737a808587888785817b756d666055514e4f6176899eaaaaaaaa98836e59432e190000000000000000071520272a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b28211608000000000000000d1920222d302b2127385b70859bb0c5dad5c5a38d78634e38230e0000000000000000000000192e43586e8398adc3d8dbc6b09b86715c4a36220f0b1f34475973889eb3c8ddcdbaa98d78634d38230e000000000b20354b60758a9fb4cadfdac4af9a856f5a3626140100000010263b50657b90a5c5d5e7dac5b09b85705645311d0900000b21364b60747e808181818196acc1d6dbc5b09b86705b3928160300000000081d3144556b8095a8b9cddfe2cdbcae9d94847b74706f7072777e88979fafbcccdccdbcb49f8a78624d402f1d090000000000000000000000000000000000000000000b2034485973889eb3c8c8b29d88735847331f0a00000000000000000000000000000000000000000a1b2d3e4a60728399a6b8c9dacdbaa99c8675604b40301d0d00000000000000000000000000000009192f404e63798c9fb4c6c8b49f8c796f849aafbfc8b3a18f7b655443301a0a00000000000000000e1927313b484d606877828a9fb4cab49f8a81776c61584a43362d1f0f00000012283d52677d92a7bcd2bda8927d6853677d92a7bcd2bda8927d68533d2813000000000000061424323f4b5460646b6f717372706b666055514b44373946577085959595959595846f5a45301a000000000000000000030c121418181818181818181818181818181818181818181818181818181816140d04000000000000000d1d2b3437424541373343586d8398adc2d8d0bba5907b66503b26110000000000000000000001162b41566b8096abc0d5ddc9b5a38f7a644f3d2d1a07182a3b5c72879cb1c7dcd7c7a5907b65503b261000000000081d31445572889db2c7dddcc7b29d87725443301c0800000013283d53687d92a8bdd2e7d6c1ac97816c57382715020000152b40556a809396969696969fb0c4d9ddc8b39e88735745321e09000000000b20364b6075889eb3c6d7e6d4c3b09e947f72656055595a5962697681959eafbecee1cdbaa89a846f5e4c3824110000000000000000000000000000000000000000000d22374c62778ca6b8cbc3ae99836e593a2a17040000000000000000000000000000000000000000000f1c3043546177889dabbccfd7c7b6a497816c5e4c3b2b18080000000000000000000000000000001221364a5b6d8297a8b9cdbcab97817a8fa2b3c7bbaa99836e5d4b3625130000000000000000000e1f2f3f4b58616e7e89979faab3b8b6aa9f968b81766860544a3d2d1f0e000010253a4f657a8fa4c7d8bfaa95806a55657a8fa4c7d8bfaa95806a55402b15000000000000000614212e36434a4f555a5c5e5d5a56504b4437353127293952677d8080808080807e68533e2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3b484d575a564c473a566b8095abc0d5d2bda8937d68533e2813000000000000000000000013293e53687e93a8bdd3e4d2c1ad98836e5b4a3621131b30465b70859bb0c5dad1bba6917c66513c271100000000011527375b70859ab0c5dadfc9b49f8a75604b35200b000000142a3f54697f94a9bed4e9d5c0aa95806b55402b16000001172c41566c8196ababababacb0bdcde0e0cbb8a68b76604b36210b0000000010253a50657a8fa6b8cbe4dfcbb7a596806b60544b44373b484d57616c7f95a0b2c3d3d7c6b4a2907c66513f2f1c08000000000000000000000000000000000000000011263b50667b90a5c5d5c5a9947e69543f291400000000000000000000000000000000000000000000001325364759667b8d9fb5c1d2d3c2b19f917c665948362614010000000000000000000000000000071a2d3d4d62778a9eb4c4c9b39e8a8398adc0c5b49f8b78634d3f2e18080000000000000000061a2c3d4b5d657683939ea8a59d9ea7a59d9ea79f97887d72635b4a3d2c1a06000d22374d62778ca9bacec2ad98826d5862778ca9bacec2ad98826d58432d1800000000000000000210182530353a404547484745413b363127201d1525394d5f676a6a6a6a6a6a68604e3a261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374859626d6f6b61584953687e93a8bdd3d5c0ab95806b56402b16010000000000000000000011263b51667b90a6bbd0e5dfcab49f8c79634e41301e1b30455a70859aafc5dad2bda7927d68523d28130000000000182d43586d8298adc2d7e2cebbaa8c77624d37220d000000152a40556a7f95aabfd4e9d3bea9947e69543f2914000000142a3f54697f94a9bec0c0c1c4cdd7d7d7d5c5a38e78634e39230e00000000162b40556b8095aac5d5e7ddc7b29d8774604b433631262b3439464b616d8298a5b6cadfd0c0b19c86715d4b38230b000000000000000000000000000000000000000417293a556b8095aac0ccb9a78f7a644f3a250f000000000000000000000000000000000000000000000008182a3b4c5e6b8096a3b5c6d7cebdb39e8977625443301c100000000000000000000000000000000f203448596a8095a6b7cbb9a89e98a0b2c6b9a796816c5b493521110000000000000000000c2135495b657b8899a1b3a29a87899e9d878998a0a79e928579635b4935210c000b20354b60758a9fb4c1c1af9a85705a60758a9fb4c1c1af9a85705a3727150100000000000000000008131c20252b30323332302c26201d150b080a1e30414d52555555555555534e42311e0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455627882858076635b50667b90a5bbd0d8c2ad98836d58432e1800000000000000000000000e24394e63798ea3c5d6e8e2cebbaa99846f5f4d3c2c1d2b3b5b71869bb0c6dbd2bda8927d68533d28130000000000162b40556b8095aac0d5ead8c8a48f7a654f3a2510000000152a40556a7f95aabfd4e8d2bda8937d68533e281300000012273c52677c91a7bcc1c1c1c1c1c1c1c1c1bba5907b66503b2611000000051a2f445a6f8499afc4d9e6d4c3a9937e69564531251d1418202933434b6175879db2c3d3dec9b5a4907b6550392917030000000000000000000000000000000000000a1f33465870859ab0c5c9b39e8975604b35200b0000000000000000000000000000000000000000000000000c1d2f404b6074859ba8b9cde0ccb8a79a8472604b3e2e1b0b000000000000000000000000000005182b3b4b6175889db3c2c6b9b3adb2bec3b39e8976614c3c2c19030000000000000000000e23384e63788b9da6aa9f9484778a9f9f8a7983909ca5a29a8b78634e38230e00081c30435472879cacacacac9d8872555472879cacacacac9d88725544311d080000000000000000000000070b0f161a1c1e1d1b16110b0802000001132330393c4040404040403e3a3124130200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4b607486979a968779655d63788ea3c5d5dac5b09b85705b38271502000000000000000000000c21364b61768ba7b8cce0ebd9c8b3a1927d675a493b2c34485973889db3c8ddd1bca6917c67513c2712000000000013283e53687d93a8bdd2e7d1bca7927c67523d271200000014293e54697e93a9bed3e8d3bea8937e69533e29140000000f253a4f647a8fa4acacacacacacacacacacaca8937e68533e2913000000021527385d72879db2c7dcdfcab7a58d78624d3827150801050b171e324657677d92a5b6cadfd2c2ae99836e5746331e0a0000000000000000000000000000000000000c21364c61768a9fb4c9c8ae98836e5544311d08000000000000000000000000000002040b0b0b0b0b0b0b0b00111d31455663798a9eb4becfd5c5b4a2947f6a5c4b3929170300000000000000000000000000000d1e324657687d92a4b5c9ccc9c3c6cab6a5947f695847331e0e000000000000000000000c2135495b6c8196a49d8c7f7274899ea98f7a6e7b87959f9b85715b4935210c00011426365a6f849696969696968b75605a6f849696969696968b75604b35200b0000000000000000000000000000000507090805010000000000000005131e25272b2b2b2b2b2b28261e1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6a7f94a4afa59d897b6860768ba6b8cbddc8b29d88735645311d09000000000000000000000a1e33465773899eb3c8dee5d8cebfb39e89786359493d3b4d62778ca6b8cbe0d7c7a5907b65503b2610000000000010263b50657b90a5c9daecd4bfa9947f6a543f2a1500000013283d53687d92a8bdd2e7d4bfa9947f6a543f2a150000000d22374c62778c9797979797979797979797979796806b56412b16010000091d31455674899fb4c9deddc7b29d87725a48351a0a00000000031629394b6074879cb2c7dcdec9b49f8a76614b36210c00000000000000000000000000000000000012273c51677c91aabbcebbaa927d6853372715010000000000000000000000000711171920202020202020202020152738495b687d92a0b2c3d4d1c0b49f8c7a645746331e130000000000000000000000000000031628394b6073869cb1bfd0ded8d1c1b29d8774604b3a2a170000000000000000000000061a2c3d4b60748697877a6a6072879ca7927d686674808b917c67523d2c1a06000012283d52677d81818181818181766152677d8181818181818176614c36210c0000000000000000000000000000000000000000000000000000000000010a101215151515151513110b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788a9fb4c2b7a79e8c7e6b73889eb3c8ddcab59f8a75604b36200b00000000000000000000031729395c71869bb1c6dbd8c7bab4b3a89c8777635b4e4d59697e93a9c4d5e2cdbaa98e79634e39240e00000000000e23384e63788dabbccfe3d7c1ac97826c57422d1702000012273c51677c91a6c9daecd6c1ab96816c56412c170000000b20354a60728182828282828282828282828282817e68523d28130000000b20364b60758ba9bacde1dac5b09a85705b3c2b190000000000000b1d3144556a8095aac5d6e1cdbaa9917c67513c2712000000000000000000000000000000000002182d42576d8297acc8c9b49f8a77614c37210c0000000000000000000000000a18242b2e3535353535353535353535352c3d4e606e8298a5b7c8d9cebbaa9d8775614b41301e0e00000000000000000000000000000b1c304354657b90a1b3c8d9d7c8b4a3917c675645311c0c0000000000000000000000000e1e32455663798276645c5a6f8499aa957f6a56606a788273604b35200e00000010253a4d5f676c6c6c6c6c6c6c61584d5f676c6c6c6c6c6c6c615846331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8499a8b8c5c5b9aa9f928072859bb0c5dacfbcab8d78634d38230e0000000000000000000000192f44596e8499aec3d9cebaa99f9ea8a59c86796b64626777889db3c8dddfc9b49f8a75604b35200b00000000000b21364b60768a9fb5cadfd9c4af99846f5a442f1a0000000f243a4f647a8fabbccfe3d8c3ae98836e59392816030000071c304354606c6c6c6c6c6c6c6c6c6c6c6c6c6c6c685f4e3a25110000000b20364b60758babbccfe3d8c3ae99836e59442e19000000000000011426374e63798ea7b8cce0d7c7ac96816c57362614010000000000000000000000000000000004192e43596e8398abb5c2ae99846f5847331f0a00000000000000000000000718283640434a4a4a4a4a4a4a4a4a4a4a4a4a4a424c6176879daabbced8c8b6a598826d5f4d3c2c190900000000000000000000000000011426364c5e6f8499aabbc2c2beb09b85705f4d38271500000000000000000000000000021628384a5b636d61574b576c8197ac97826d584b5a636d605544311d080000000a1e30414d52575757575757574c46414d52575757575757574c463a29170400000000000000000000000000000000070d0f2020202020201f1c130b0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687e8c9ea6b5c2c8bbb49e95838298adc2d7dac9a5907a65503b25100000000000000000000001172c41566c8196abc1d6c9b49f8b899eb3a49c8a8079777c879da6b8cbe0dac9b09b86705544311d080000000000091e32455673889db3c8dddcc7b19c87725c3a2a180400000c21364b61768b9fb5cadfdcc6b19c87715746321e09000000132536434a575757575757575757575757575757524e41311e0b0000000b20354b60758a9fb5cadfd8c3ae98836e59432e19040000000000000921364a5b73899eb3c8dedbc6b19b86715443301c08000000000000000000000000000000000011263b50667c8d9ba3b2a7927d67523a2a170400000000000000000000001124364653596060606060606060606060606060606058657b8c9fb4cadfd3c3b2a0927d675a49372715010000000000000000000000000008182f404e63798c9facacacaca08f7a644f41301a0a00000000000000000000000000000a1a2d3d4a4e584c463954697f94a99a856f5a3c494d574b4437261401000000011323303a3d414141414141413633303a3d414141414141413633291b0b00000000000000000000000000000002101b2224353535353535343129201d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263a4e60687b889ba3b2bfcebcb0a0988b9fb4c9dfd2bda8927d68533d2813000000000000000000000014293f54697e94a9bed3c9b49f8a7c919eafa89e958e8c919da5b6c4d5e3cfbcab957f6a55372715010000000000021628385b70869bb0c5dbdec9b49f89745947341f0a0000091e32465772879cb2c7dcdfcab49f8a76614b36210c00000008182530354242424242424242424242424242423d3a31231301000000081d31445573899eb3c8ded9c4af9a846f5a452f1a00000000000000071a2d3d5b70859ab0c5dadec9b49f8975604b35200b00000000000000000000000000000000000f23384c5e667b86929d9e8875604b36210c000000000000000000000002172b4053646e757575757575757575757575757575757575758095aabfd5e1cfbeb49e8a78625544311d1000000000000000000000000000001121364a5b6c81979797979797826e5c4b372312000000000000000000000000000000000f1f2d36394236333c51677c919c9c877254433538423531261909000000000005131e25282c2c2c2c2c2c2c211f1e25282c2c2c2c2c2c2c211f170b0000000000000000000000000000000010202d36394a4a4a4a4a4a49463e363127190b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1e31424e5d65788599a1b5bcc9beb2a99fa9bacee2d5bfaa95806a55402b15000000000000000000000011273c51667c91a6bbd1cab59f8a7580959fb0b4aaa3a2a6b2b6c3d4e2d6c5b59f8c78624d38220d00000000000000192e43596e8398aec3d8e1cdbaa98c77614c37220c000003162839596e8399aec9dae2cebbaa907b66503726140100000008131c202c2d2d2d2d2d2d2d2d2d2d2d2d2d2d28251e130500000000011426375c72879cb1c7dcdbc6b09b86715b3928160300000000000000172c42576c8197acc1d6e1cdbaa98d78624d38230d0000000000000000000000000000000000091c2f404c5d65737d8794806b5645321e09000000000000000000000004192e43596e838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a959eafc3d7ece1ccb9a89b8573604b3f2e1b0800000000000000000000000000071a2d3d4c627782828282828278624d3e2e1b0500000000000000000000000000000000010f1a21242d2124394e63798787878673604a35232d201d140900000000000000010a1012171717171717170c0a0a1012171717171717170c0a0400000000000000000000000000000000071b2d3e4a4f6060606060605e5b534b4437291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021324313f4b5a627583959fabbac6c7bab4bac7d8ead7c2ad98826d58432d1800000000000000000000000f24394f64798ea4c6d7cfbcab8b756c81969eb4bac6b7bcc7cad4ddd2c6b9a798836e5a4835200b00000000000001162b41566b8096abc0d5e9d7c7a48f79644f3a240f00000014293e53697e93abbccfe3d9c8ac96816c5544311d080000000000070b17171717171717171717171717171713110b010000000000001a2f455a6f849aafc4d9ddc8b39e88735745321e0900000000000000142a3f54697f94a9bed4e9d7c7a5907a65503b251000000000000000000000000000000000000012222f3f4b546068757f77624d38281602000000000000000000000001162c41566b81969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faaafbcccdff2e8d6c6b4a395806b5d4b37220e00000000000000000000000000000f1f344759626d6d6d6d6d6d625a4935201000000000000000000000000000000000000000070c0e180c21364a5b6372727271605443301c180b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c647575757575757471686055463929170300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613212e3c48576172808d9fa8b7c3cec9ced8e5efdac5af9a85705a37261401000000000000000000000c22374c61778ca8b9c1c1b8a78b76617280929fa8b3bfc6c9cdcac8c2b5a89e8977624c3c2b19050000000000000014293e53697e93a8bed3e6d1bca6917c67513c27120000000d22374d62778b9fb5cadfddc8b39d8874604b3520120000000000000002020202020202020202020202020200000000000000000002182d42576d8297acc2d7e0cbb8a68b76604b36210b0000000000000012273c52677c91a7bcd1e6d2bda7927d68523d28130000000000000000000000000000000000000412212e36434b56606a625948341a0a0000000000000000000000000014293e53697e93a8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bfc3ccdaeaecece4d1c1b49f8c7a644f3c2b19060000000000000000000000000005182a3b474c5757575757574d493c2b19020000000000000000000000000000000000000000000003071a2d3d4a4e5d5d5d5c4a433625130000000000000000000000000000000000000000000000000000000000040e1416202020202020202017150f050000000000000000000f24394f64798d8a8a8a8a8a89867e74615746331e1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111e2b394654606a7d8a9da5b4c0cee2eaf5f2dcc7b29d87725544311d08000000000000000000000a1f33475874899eacacacaa9e897357606b7d8a99a1abb0b4bab5b3aea49c8a7b655948341e0e000000000000000011263b51667b90a6bbd0d7d3bea9947e69543f29140000000b2034485971869bb0c6d6e0cbb8a6917c665140301c0c00000000000000000000000000000000000407010000000000000000000000152a40556a7f95aabfd4e7d5c4a38d78634e38230e000000000000000f243a4f64798fa4c7d7e9d5bfaa95806a55402b1500000000000000000000000000000000000000031118263038454b544d483b2b18000000000000000000000000000011263c51667b91a6bbcacacacacacacacacacacacacacacacad5d7d7d7d7d7d7d7d7cfbcab9b85705a4835200b00000000000000000000000000000d1d2a343742424242424238352b1e0e000000000000000000000000000000000000000000000000000f1f2d363947474747353025180800000000000000000000000000000000000000000000000000000000081621292b35353535353535352c2922170800000000000000000d22364a5c6d8298a89f9fa79e9b938475614b41301909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b2836434a5f677a879aa2b1bdced9e6f3dfcab49f8a75604b35200b0000000000000000000004182a3a5c71869696969695907f6a554a5f6878838e969b9fa99f9e9992867a655d4b3b2a180000000000000000000e24394e63798ea3c5c2c2c2c1ac96816c57412c1700000005182b3b54697f94a8b9cce1d5c4b09b85705f4d3a29180800000000000000000000000000080e101a1c160b0902000000000000000012283d52677d92a7bcd2e5d0bba5907b66503b2611000000000000000d22374c62778ca9bacde1d7c2ad97826d58422d1800000000000000000000000000000000000000000008141c2832363f37342b1d0d00000000000000000000000000000e24394e63798ea3c5c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c9b4a38d78624d38230d0000000000000000000000000000000d181f222d2d2d2d2d2d2320190e0000000000000000000000000000000000000000000000000000010f1a212432323232201c130800000000000000000000000000000000000000000000000000000000041626343d414a4a4a4a4a4a4a4a413e3427170500000000000000071b2d3e4d62778a9eb4c3b9b3b0a299836e5f4d37271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b182530414d5c647784979fb4bbc8d6e3e2cebbaa8d77624d38220d000000000000000000000014293e53697e81818181807b6a6150414e5a636e7980868a8b8a88847d74645c4b3f2e1d0d0000000000000000000c21364c61768ba7acacacacacac99846e59442f19000000000d21364c6176899eb3c7d7ddc8b4a3917c675846362514090000000000000000000004101b22252f322c211e160a0000000000000010253a50657a8fa5c9d9ebd2bda8937d68533e2813000000000000000b1f34475974899fb4c9dedac4af9a856f5a36261401000000000000000000000000000000000000000000010a161e212a2220180d0000000000000000000000000000000c21364c61768ba7acacacacacacacacacacacacacacacacacacacacacacacacacacacacaca6917b66513c261100000000000000000000000000000000050b0d1818181818180d0b060000000000000000000000000000000000000000000000000000000000070c0e1d1d1d1c0b070000000000000000000000000000000000000000000000000000000000000e2134445156606060606060606057514534220f000000000000000010203448596a7f94a5b7cac9c0b2a1917c675544311d0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c303e4a59617481939faab8c5d3d8d8c8a48f7a654f3a2510000000000000000000000012263b4f60696c6c6c6c6a655d5043333c494d5b636b71747675736e6760554b3e2e2111000000000000000000000a1e3346577489979797979797979786715c46311c000000000a1e3346576b8096a9bacde1d1c1b29d87766154433126190e05000000000000030c171f2e373a4447413632281a0a0000000000000d23384d62788dabbccfe3d5c0ab95806b56402b160100000000000005182a3b5c72879cb1c7dcdcc7b29d87725443301c08000000000000000000000000000000000000000000000002090b150d0b05000000000000000000000000000000000a1e334657748997979797979797979797979797979797979797979797979797979797979797947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293d51626b75757575757575756c63513e2915000000000000000005182b3b4b6075879db2c0d1cfbfb29c8774604b3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012202d3b4756606d7e8c9ea7b6c2c2c2bca7927d67523d281200000000000000000000000c1f32424f535757575755504c3f33252c353d494e565b5761605559524b44372e2011030000000000000000000003172939556a808282828282828282806b56412c1600000000031729394d62778a9fb4c2d2dfcab7a5988372604b44372b2018100d0c0c0d0f171e29333f4b4f595c564b453828190900000000000b20364b60758a9fb4cadfd8c2ad98836d58432e1800000000000000001a2f445a6f8499afc4d9dfc9b49f8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939556a8082828282828282828282828282828282828282828282828282828282828282827d67523d271200000000000000000000000000000000000000000000000000000000070d0f1f202020202020201e1a130b080100000000000000000000000000000000000000000000000000000000000000060c0e1314120c0a040000000000000000000000162b41566b808a8a8a8a8a8a8a8a816c57412c170200000000000000000d1e324556677c91a2b4c9dacab6a5937e695846331f0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d2a38454b60697b899ca4adadadadaa947f6a553f2a150000000000000000000000021424323b3e41414141403b382f211519202c36394139464b4b44373d3531271910020000000000000000000000000b283c50626a6d6d6d6d6d6d6d6d6b62513d291400000000000b203448596a7f94a4b5c8d8d4c3b2a096806c6055483c342b25222121222429333a474c5d656f716b6056453726140100000000081d31445573889db2c8dddac5b09b85705b3827150200000000000002172d42576c8297acc1d7e2cebbaa8c77624d37220d000000000000070d0f1111110f0c0a04000000000000000000000000000000000000000000000000000000000000000b283c50626a6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d675f4d3925100000000000000000000000000000000000000000000000000000010f1a21243435353535353535343028201d150900000000000000000000000000000000000000000000000000000000040f1a2123282927221f180c0100000000000000000013293e53687e939f9f9f9f9f9f99846e59442f19000000000000000000021628384d5f70859aabbccfd3c3b39e8976614c3c2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a2731424f5d65788696989898989897826d57422d1802000000000000000000000006141f26292c2c2c2c2b26231c1103060f1a21232b29323636312728201d150900000000000000000000000000000d2133445055575757575757575756514434220e000000000005182b3b4b6073869caabbcee2cfbfb09e968173625a4d483b3a373636373a39464b58616d7a84878174605544311d1301000000021527375b70859bb0c5daddc8b29d88735645311d0900000000000000152a3f546a7f94a9bfd4ead8c8a48f7a654f3a251000000000010f1a212426262625221f180c0400000000000000000000000000000000000000000000000000000000000d21334450555757575757575757575757575757575757575757575757575757575757575757524d41301e0a00000000000000000000000000000000000000000000000000000f202d3639494a4a4a4a4a4a4a49453e353127190d00000000000000000000000000000000000000000000000000000c181f2c35383d3f3c37342a1d1409000000000000000011263b51667b90a6b5b5b5b5b19b86715c392917030000000000000000000a1a30414f647a8d9fb5c6d6ccb8a796806b5a4835201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d323f4c5a6376818383838383827f69543f2a1400000000000000000000000000020c12141717171715100e0900000000060c0e16161e21201d15120b0801000000000000000000000000000000041525333c404242424242424242413d342616050000000000000d1d314455647a8b9fb4bdcddccdbcb09f9684786b625954504d4c4c4c4f5357616a76828d999c968373604b41301f0f00000000182e43586d8398adc2d8dfcab49f8a75604b36200b0000000000000012273d52677c92a7bcd1e7d1bca7927c67523d2712000000000f202d36393b3b3b3a37332a1f180c00000000000000000000000000000000000000000000000000000000041525333c4042424242424242424242424242424242424242424242424242424242424242423d393023130100000000000000000000000000000000000000000000000000071a2d3e4a4e5f606060606060605e5a534b44372b1d0d0000000000000000000000000000000000000000000000000c1c2a333d494e5354524c473a31261909000000000000000e24394e63798ea3c5d6cac8b39e89735746331e0a000000000000000000001322364a5c6d8297a8b9cdd5c5b49f8a78624d3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000214212f3c4957616c6d6d6d6d6d6d69614f3b2712000000000000000000000000000000000002020202000000000000000000000000030a0c0b08020000000000000000000000000000000000000000071521282b2d2d2d2d2d2d2d2d2c2922160800000000000000011527374a5c687e929fb0becee2cdbdb1a29a8b80776f69656261616264686e767f89979fabb1a196806b5f4d3d2d1a07000001162b40566b8095abc0d5e3cfbcab8d78634d38230e000000000000000f253a4f647a8fa4c7d7ead4bfaa947f6a553f2a15000000071a2d3e4a4e5050504f4c473a342a1c0c00000000000000000000000000000000000000000000000000000000071521282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d27251e130500000000000000000000000000000000000000000000000000000d21364a5c647475757575757575736f686055483b2b1a0a000000000000000000000000000000000000000000000b1b2a3a474c5b6368696761594b44372614010000000000000c21364c61768ba7b9cce0ccb8a78b76614b36210c00000000000000000000071b2d3e4c62778a9eb4c3d4cdbaa998826d5c4a36221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111e2c39464c57585858585858544f4332200c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1315181818181818181816140e0500000000000000000009192d3e4e606c8196a0b1bdced9cec0b4a99f958b847e7a777676777a7e8489949ea7b5bcbfb09e917d675b4a36210c00000013293e53687e93a8bdd3ebd9c9a5907a65503b2510000000000000000d22374d62778ca9bacde2d7c1ac97826c57422d170200000d21364a5c646666666461584c473a2a190900000000000000000000000000000000000000000000000000000000040d1315181818181818181818181818181818181818181818181818181818181818181812100a010000000000000000000000000000000000000000000000000000000f24394e64798a8a8a8a8a8a8a8a88857e73625948382816020000000000000000000000000000000000000000031628394758616e787d7e7c776b605544311d110000000000000a1e33465774899eb3c9ded6c5a38e78634e39230e000000000000000000000010203448596a7f94a5b7cad7c7b59f8d7a644f402f1909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b293336414343434343433f3b3225140300000000000000070d0f2020202020202020202020202020202020202020202020202020202020202020202013110b020000000000000000000000000000000000000000000000000000000000000000000000000000102031424b607382969fb4bbc8d3d1c7bab4aa9f99938f8c8b8b8c8f93999ea8b3b8c5cfcdbcb49e8a79634e39240e00000011263b51667b90a6bbd0e5d2bda8927d68533d2813000000000000000b20354a60758a9fb4c9dfd9c4af99846f5a442f1a0000000f24394e647a7b7b7b7a776e61594737271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c667c8c9f9f9f9fab9f9e9a938677625645321e130100000000000000000000000000000000000000091e3246576176838d9294918a8073604b3f2f1c080000000000031729395c71869cb1c6dbd0bba6907b66513b2611000000000000000000000005182b3b4b6075879db2c0d1cfbcab9a846f5e4c37261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e212c2e2e2e2e2e2e2a27201407000000000000010f1a21243535353535353535353535353535353535353535353535353535353535353535353528261e13060000000000000000070b140d0b05000000000000000000000000000000000000000000000002131d314455607281949faab6c3ced7cdc8bbb4afa9a5a2a1a1a1a4a8aeb4b9c6ccd5d6ccbeb1a297826d58422d180000000e24394e63798ea3c5d6e8d5bfaa95806a55402b1500000000000000071c30435472879cb2c7dcdcc7b19c87725c3b2a18040000172d42576c819090908f8c8377615544311d0800000000000000000000000000000000000000000000000000000001080b0f121314140b080100000000000000000000000000000000000000000000000003090c10131415151513100c0a04000000000000000000000000000000000000071a2d3e4c5e687e929eafbebcb5b3afa49b8574604b41301f0f000000000000000000000000000000000000000c21364b61758699a1a8a9a99f95826d5d4b38230e0000000000001a2f44596f8499aec4d9d3bda8937e68533e29130000000000000000000000000d1e324556677c91a2b4c9d9c9b4a2907c665544311d0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1718181818181814120c03000000000000000f202d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3d3a31241302000000000008131c2029221f180d0000000000000000000000000000000000000000000000011426374454606c7f8c9da5b4bac7ced8cecac4bebab7b6b6b7b9bdc3c9cdd6d8cec6b9b3a0978474604b36210b0000000c21364b61768ba7b8cce0d7c2ad98826d58432d1800000000000000001325365a6f849aafc4d9dec9b49f89745947341f0b0000152a3f546a7f94a5a5a4a0988474604b36200d000000000000000000000000000000000000000000000000000809151d20242728292a201c14080000000000000000000000000000000000000000040a0c161e212528292b2b2a2825211f170e0c06000000000000000000000000000000000f202f404e606a8095a0b2c0cac8c2b5a397816c5f4d3d2c1a0a000000000000000000000000000000000002152838556a7f95a4b3bfc7bab4a0907b65503b2510000000000002172c41576c8196acc1d6d5c0ab95806b56402b16010000000000000000000000021628384d5f70849aabbccfd1c0b19c8673604b39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4a4e60606060606060606060606060606060606060606060606060606060606060606060534e42311e0b0000000009182530353f37342a1d0f010000000000000000000000000000000000000000000009192636434a616a7a87969fa9b4bbc8c9d2d6d3cfcccbcbccced3d9d8d4cbc8bbb4a89e928273605645321e090000000a1e33465773899eb3c8dedac5af9a85705a3726140100000000000000182d42576d8297acc2d7e1cdbaa98c77614c37220c000012273d52677c92a7bbbeb2a2927d67523b2a18050000000000000000000000000000000000000000000005111c232731353a3c3e3f3f35302618080000000000000000000000000000000000020c171f212832363b3d3f40403f3d3a36332923211a0e080000000000000000000000000000011122314250626d8298a2b3c2d2d2c2b19f927d675b493828160300000000000000000000000000000000091d32455672879db2c2d0d7cdbead98826d58432d18030000000000142a3f54697f94a9bed4d8c2ad98836d58432e18000000000000000000000000000a1a30414f647a8c9fb4c6d6c9b6a4937d685746321e0d000000000000000000000000000000000000000003090b0e0e0e0e0e0e0e0b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c707575757575757575757575757575757575757575757575757575757575757575757568604e3a261100000009192636434a544c473b2d1f0f01000000000000000000000000000000000000000000000918253043505d6475818b979faab1b5c1c1c5c8cacfd9d8cec9c6c3c4b7b3aa9f97897d6d60554538281603000000031729395c71869bb1c6dbdcc7b29d87725544311d0800000000000000152a3f556a7f94aabfd4e9d7c7a48f79644f3a240f000010253a4f657a8fa4c8cfc0b09b85705948341f0b0000000000000000000000000000000000000000000d181f2f3837444b4f515354544b43362614010000000000000000000000000000000a161e29333639464b50525455555452504c463a38352c221b10030000000000000000000000000003132333444b6073849aa4b5c4d4cebdb49e8a79635645321e13010000000000000000000000000000000b20364b60758ba5b6cae2eadbc5b09b86705b46311b06000000000012273c52677c91a7bcd1dac5b09a85705b37271501000000000000000000000000001222364a5c6d8297a8b9ccd3c2b39d8875614b3b2b18050000000000000000000000000000000000000a161e2123232323232323211e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e647a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7e68533d28130000011426374454606962594a3d2d1f0f000000000000000000000000000000000000000000000008131c333f4b57616c78828b949ba3a7acb0b3b4bcc9c8bbb4b1aea9a69d958b8277685f4b4437281a0a0000000000192f44596e8499aec3d9dfcab49f8a75604b35200b0000000000000012283d52677d92a7bcd2e6d1bca6917c67513c271200000d22384d62778daabbcecab59f8b77624c37220d00000000000000000000000000000000000000000e1d2a343f4b5055606467686969605443301c0800000000000000000000000000010f1a28323a464c5457616568696a6a6a68656158564e493d372e1e170b0000000000000000000000000005151d3144556175869ca6b7c6d6cdb9a89c8675604b41301f0f0000000000000000000000000000000b20354b60758a9fb4cadfe6d8c7b09a85705b45301b0600000000000f253a4f647a8fa4c7d8ddc8b29d88735544311d0800000000000000000000000000071b2d3e4c6277899eb4c3d4cbb7a6957f6a594834200f00000000000000000000000000000000000a1b283236383838383838383632281a15070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927d68533d28130000081d31445560727e77635b4a3d2c1d0d00000000000000000000000000000000000000000000000015202e39464b5a626d777f868d92979b9e9faba2a1aa9f9c99948e8880786d62594e413127190a000000000002172c41576c8196acc1d6e2cebbaa8d77624d38220d0000000000000010253a4f657a8fa4c8d8ead3bea9947e69543f291400000b20354b60758a9fb4cacfbcab927d6852372715020000000000000000000000000000000000000e1e2b3b474c5d656f75797c7d7e7f73604b35200b000000000000000000000000010f1f2d38454b58616970767a7d7e80807f7d7a76716b635b4f4b3f33291b10020000000000000000000000000215273746576277879da8b9c8d6c6b5a497816d5f4d3d2c1a0a0000000000000000000000000000081d31445570859bb0bdcad1c8baa996816b56412c160100000000000d22374d62778ca9bacedfcab49f8a75604b35200b0000000000000000000000000000101f3448596a7f94a5b6cad5c4b49e8a77624c3d2d1a0700000000000000000000000000000003162839454b4e4e4e4e4e4e4d4b45383325150500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a8927d68533d281300000b20354b607382948779635b493b2a1808000000000000000000000000000000000000000000000002101b29333c484d59626971787d8186898a8b8d8c8b8a87837f79736b625a4d483b311d150900000000000000142a3f54697f94a9bed4ead8c8a48f7a654f3a2510000000000000000d22384d62778daabbcee2d6c1ac96816c57412c170200081c30435472879db2c7dac9ae98836e5544311d0800000000000000000000000000000000000a1a2b3c4859626f7b84898f9193948c77624d37220d0000000000000000000000000f1f2d3d4a56606b767f868a909294959594928f8b8680786e655d4c46392e20110300000000000000000000000009192939485963798a9eaabbced2c2b19f927d675b4938281603000000000000000000000000000114263752677c919fb2b7c1b4aa9f8b78624d38230d0000000000000b20354a60758a9fb4c9dfcfbcab8d78624d38230d000000000000000000000000000005182a3b4b6074879db2c0d1cdb9a897826c5b4a362111000000000000000000000000000000091e32455760636363636363636056504333231300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9c6b9b4b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b3b8c5bda8927d68533d28130000152a3f546a7f94a09d8879635948362614010000000000000000000000000000000000000000000000000b171e2b353b484d545b63686c7073757677777675716e6a6460544d493c342b1d1302000000000000000012273c51677c91a6bcd1e6d2bca7927d67523d2812000000000000000b20354b60758a9fb4c9dfd9c3ae99846e59442f190000011426365a70859aafc5dac9b39e8975604b36200b0000000000000000000000000000000002152738485a62778490999ea8a6a8a48f7a654f3a251000000000000000000000000d1d2c3d4a5b6374808a949b9faaa7a9aaaaa9a7ab9f9c958c837a6d61574b3e2f2111010000000000000000000000000b1b2b3b4a5b657b8c9fb4bbcccebdb49e8a79635645321e1301000000000000000000000000000925394d5f6c81939da5a3a39b8c7d675a4935200c000000000000071c30435472879db2c7dcd9c9a58f7a65503a25100000000000000000000000000000000d1d324556677c91a2b4c9d7c6b49f8c79634e3f2f180800000000000000000000000000000b21364b607579787878787878756a615041301a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b9a89e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ea6b8bda8927d68533d28130000152a3f556a7f94a3a69d8777625443301c0e00000000000000000000000000000000000000000000000000030e19202b34373d494e52575b546061626261605459544f4a4336352b20180d000000000000000000000f243a4f64798fa4c7d7e9d4bfaa947f6a553f2a1500000000000000081c30435472879db2c7dcdbc6b19c86715c3a2917040000182d43586d8298adc2d7ccb9a8907a65503b251000000000000000000000000000000000091d3145566278889aa2aeb4b9c6c5a7927c67523d27120000000000000000000005182b3b495b637986969ea8b0b4bbc8bebfbfbfc9bcb5b1ab9f998f8276645c4c3f2f1f0f000000000000000000000000000d1d2d3d4c5d677d929dafbdcecdb9a89c8675604b41301f0f000000000000000000000000000a1d304152636c7e878d8e8c857b675f4d3c2c1906000000000000001325365a6f859aafc4dad2bca7927d67523d2812000000000000000000000000000000021528384d5f70849aabbccfcebbaa99836f5d4b36251300000000000000000000000000000c21364b6176888d8d8d8d8d8d8a7f6a5f4d382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b49e8a85868686868686868686868686868686868686868686889eb3bda8927d68533d281300000b21364b6075859ba5a59a8472604b3c2b19060000000000000000000000000000000000000000000000000000050d1820222c35383d4236434a4c4d4c4b4a43363f3935302520190e0500000000000000000000000d22374c62778ca9bacde1d7c2ac97826d57422d1800000000000000011426365a6f859aafc4dadec9b39e89745846331f0a0000152b40556a8095aabfd5d6c6ab95806b56402b16010000000000000000000000000000000b20364b6074859ba6b3c0c4b7b2a8a7937e69543e2914000000000000000000000b203448596379899ca4b4b9c6cacdc9c2bdbbbdbfc6cac9bcb5aea098877a655d4c3d2d1a0a000000000000000000000000000f1f2f3f4d5f6a7f959fb1bfd0c6b5a497826d5f4d3d2c1b0a00000000000000000000000001132335455260687278797770655d4d41311e0e0000000000000000182d42586d8297adc2d7d4bfaa947f6a553f2a15000000000000000000000000000000000a1a30414e647a8c9fb4c6d6c8b3a1907b655443301c0a00000000000000000000000000091e324657687d93a4a3a3a3a99f927d675645311d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b85717171717171717171717171717171717171717171718196acbda8927d68533d28130000091e3245566177879da9a2947f6a5a4835200e00000000000000000000000000000000000000000000000000000000050b0e1a2123282c253035363837363530252a24201c130806000000000000000000000000000b20354a6075899fb4c9ded9c4af9a846f5a3625130000000000000000182d42586d8297adc2d7e0ccb9a78b76614c36210c000013283d53687d92a8bdd2d8c3ae99836e59442e1900000000000000000000000000000005182a3b53687d93a3b5c4c8b7a69d928e8979634e39240e000000000000000000071b2d3e4c6277879da7b5c2cdd2c7bab4ada8a6a7aab1b5c2cacabeb2a59d8b7b655b4a38281602000000000000000000000000011121314150616d8197a1b3c1d2c2b19f927d675b493928160300000000000000000000000005172735424e535a62646159504b3f312313000000000000000000152b40556a8095aabfd5d7c1ac97826c57422d1702000000000000000000000000000000001222364a5c6d8297a8b9ccd0bfb09b8572604a38281602000000000000000000000000031628394b6073869cb1c0c7bab29d8774604b3828160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b6c8196acbda8927d68533d28130000031628384759647a8b9fb49f8a78624d3c2c1906000000000000000000000000000000000000000000000000000000000000060c0e1317131c2021222221201c13150f0b0700000000000000000000000000000000071c30435472879cb2c7d7d7c7b29c87725443301c0700000000000000152a40556a7f95aabfd4d7d6c5a38e79644e39240f000010263b50657b90a5c9dadbc6b09b86715b3928160300000000000000000000000000000b1f34475971869cb1c1cebbaa9d877d7975635b4a36210c0000000000000000000d22364a5c6d8298a6b7c5d2d2c2b5a99f98939192959ba3b2b7c3cfc3b6a99e8a79635645321e0c0000000000000000000000000003132333434b60738399a3b5c3cebdb49e8a79635745321e1301000000000000000000000000091724313a3c494d4e4c473a372e21130500000000000000000013283d53687d92a8bdd2d9c4af9a846f5a452f1a0000000000000000000000000000000000071b2d3e4c6277899eb4c3d3c9b5a3927d675645321e0c000000000000000000000000000b1d314455667b90a2b3c9cab7a5937e695645321e0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b464646464646464646464646464646464646576c8196acbda8927d68533d28130000000a1a2a3b4a5c697e93a4a998826d5b4935210c000000000000000000000000000000000000000000000000000000000000000000000000070b0c0d0d0c0b07000000000000000000000000000000000000000000001325365a6f859aafc2c2c2c2b49f8a75604a35200b0000000000000013283d52687d92a7bdc2c2c2bba6917b66513c261100000e23384e63788dabbccfddc8b39e88735745321e0900000000000000000000000000000d22374c62778ca4b5c9cab49f8c79686461574a3d2d1a070000000000000000001325364f647a8c9fb5c4d4d5c4b5a49c8a827d7c7d8086909da5b6c2d3c7b9a89c8674604b3a2a17040000000000000000000000000005151d3144556175859ba5b7c5cdb9a89c8675604b41311f0f0000000000000000000000000006141f262b35383937342a292720140700000000000000000010263b50657b90a5c9dadcc7b19c87725c3a2a18040000000000000000000000000000000000101f3447596a7f94a5b6cad2c1b29d8775604b3a2a1704000000000000000000000000011426374c5e6f849aabbccfc3b39d8875604b39291603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b463131313131313131313131313131313141576c8196acbda8927d68533d2813000000051626333f4b6073869cb19f8b78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acacacacacaca98c77624c37220d0000000000000010253a50657a8fa5acacacacaca8937e69533e291400000b21364b60768a9fb5cadfcbb8a68b76604b36210b000000000000000000000000000011263b50667b90a5c2d2c3ad98836e5b4e4b46392d1f0f000000000000000000071c3043546c8297abbccfe0cbb8a69c86786d6866686a717b879ca4b6c8d6c6b6a495806a5847331f0a000000000000000000000000080e1920273746576277879da7b9c7c6b5a497826d5f4e3d2c1a0a000000000000000000000000041626333d4047474747473f3b3225140300000000000000000e23384d63788dabbccfdec9b49f89745947341f0a000000000000000000000000000000000005182a3b4b6074879db2c0d1cab7a5947f695847331f0e0000000000000000000000000009192f404e64798c9fb4c6cbb7a6947f695746321e0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311c1c1c1c1c1c1c1c1c1c1c1c1c1c2c41576c8196acbda8927d68533d281300000113233344515d656d7e93a9aa96806b563c2c19060000000000000000000000000000000000000006101618202020202020202020200a04000000000000000000000000000000000000000000000000000000000000152a40556a7f95979797979797978f7a644f3a250f000000000000000d22384d62788d9797979797979796816b56412c160000091e32455673889db3c8ddd5c5a38d78634e38230e000000000000000000000000000012283d52677d92a7bcd2bea9947f69543c3632281b0f010000000000000000000b20354a6074889db2c9daddc8b39e8877625a535152555e6677869caabbced3c2b49e8976614c37210c0000000000000000000001111c232b35383e3948596379899ea9bac9c2b19f927d685b493828160200000000000000000000000e21334450565c5c5c5c5c544f4332200c00000000000000000b20364b60758a9fb5cadfcdbaa98c77614c37220c0000000000000000000000000000000000000d1d324556677c91a2b4c9d4c3b39e8976614c3c2c1906000000000000000000000000001221364a5c6d8297a8bacdc4b39e8875614b3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060606060606060606060606172c41576c8196acbda8927d68533d281300000a1e304151626b7b82879cb2b29d87725a4935200c0000000000000000000000000000000000000a18232b2e353535353535353535351f170c000000000000000000000000000000000000000000000000000000000010253a4f657b8282828282828282827a644e39240f000000000000000b20354b60738182828282828282827e68533e28130000021628385b70869bb0c5dbd0bba5907b66503b2611000000000000000000000000000013283e53687d93a8bdd2bca7927d67523d281e160b00000000000000000000000e23384e63788da6b7cbe7d5c4a8937e6959493c3c3d404c5963798b9fb4c9dfccb9a8947e69543a2a1704000000000000000009151d2e373c494d535759595b657b8b9fabbccfbeb49f8a79635645321e11000000000000000000000014283d50626b727272727269614f3b270c0000000000000000091d32455673889db3c8ddd7c7a48e79644f39240f000000000000000000000000000000000000021528384d5f70849aabbccfccb9a796816c5a4935201000000000000000000000000000071a2d3d4d62778a9fb4c4cbb8a6947f6a5846331f0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d281300001025394d5f6b808f989ca5b6b7a58d78624d38230d0000000000000000000000000000000000061828353f434a4a4a4a4a4a4a4a4a4a332a1c0c000000000000000000000000000000000000000000000000000000000e23374b5d656d6d6d6d6d6d6d6d6d645c4a36220d00000000000000081d314455606d6d6d6d6d6d6d6d6d68604e3a2611000000192e43596e8398aec3d8d2bda8937d68533e2813000000000000000000000000000012273d52677c92a7bcd1bda8937d68533e28130300000000000000000000000010253b50657a90a5c4d4e0cbb8a68c77614c3a2c27282f3b4a5b6c8197acc6d6d6c6b09b86715847331f0a00000000000000091927313f4b505a62686c6e6e6c69677d8d9fb5c0cdbaa89c8674604b402f1b0b00000000000000000001162b40566b8087878787877f69543a29170400000000000000021528385b70869bb0c5dbd1bba6917c66513c2711000000000000000000000000000000000000000a1a30404e64798c9fb4c6d6c5b49f8b78634d3e2e1b08000000000000000000000000000f203448596b8095a6b8cbc5b39e8976614c3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000417293a52677d919eadb2b6c3c3a6917c67513c271200000000000000000000000000000000001023354653586060606060606060605e473a2a1704000000000000000000000000000000000000000000000000000000081c2e3f4b4f5757575757575757574e4a3e2d1b070000000000000001142637444b575757575757575757534e42311e0b000001162b41566b8096abc0d5d5c0aa95806b55402b16000000000000000000000000000011263b50667b90a5c5d5bfa9947f6a543f2a150000000000000000000000000012273d52677c92a7bcd1ddc8b39d88735947341c11131d2d3d4f647a8fa8b9ccdfcab59f8b77614c37210c00000000000008182737444b5d6570787e818383827e7a737f94a2b4c8c6b5a497816c5e4c3a291704000000000000000003182e43586d83989c9c9c9b85705846331f0a0000000000000000192e43596e8398aec3d8d3bea9937e69543e291400000000000000000000000000000000000000001221364a5c6d8297a8b9cccebbaa98836e5c4b3722120000000000000000000000000005182b3b4b6175889db3c2ccb9a795806b5847331f0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000a1f33475871869cb1bcc7cad3bea8937e69533e29140000000000000000000000000000000001162b3f53646d757575757575757575705847331f0a0000000000000000000000000000000000000000000000000000000011212e373a42424242424242424239362d201000000000000000000009192631354242424242424242423e3a3124130200000014293e53697e93a8bed3d8c2ad98836d58432e1800000000000000000000000000000d22384d62778da7b8ccc2ad98826d583a29170400000000000000000000000012283d52677d92a7bcd2dcc7b19c87725c3b2a1800000f20354a6074899eb4c9decfbcab907b65503b26100000000000011426364455606c7b858d9396989897948f8880849aafc4d2c2b19f907b665846331f0f000000000000000004192e43596e8398aeb1b19f8b76614c36210c0000000000000001162c41566b8196abc0d6d6c1ab96816c56412c170100000000000000000000000000000000000000071a2d3e4c6177899eb3c3d3c8b2a08f7a644f40301909000000000000000000000000000d1e324657687e93a4b6c9c5b49e8a77614c3b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000c21374c61768ca4b5c9dcdfd4bea9947f69543f2a140000000000000000000000000000000003182e43586d828a8a8a8a8a8a8a8a8a76614c37210c0000000000000000000000000000000000000000000000000000000003111c23252d2d2d2d2d2d2d2d2d24221b10020000000000000000000009141d202d2d2d2d2d2d2d2d2d28261e13060000000011263c51667b91a6bbd0dac5b09a85705b37271501000000000000000000000000000b2034485a73889eb3c8c6b19b86715846331f0a00000000000000000000000011263c51667b91a6c9daddc7b29d88725d3b2b180500071c30435470859ab0c5dadac9a8937e68533e29130000000000081c3043546073818f9aa2a8acaeaeaca9a69d958c9fb4cadfcebdb29d8876614c3d2d1a070000000000000004192e44596e8399aec3bbaa917c66513c2711000000000000000014293e54697e93a9bed3d8c3ae99836e59442e190000000000000000000000000000000000000000000f1f344759697f94a5b6cacfbeb09b85705f4d37271502000000000000000000000000031629394b6073869cb1c0cdb9a896806b594834200e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000d23384d62788daabbcee2e2d0c0a7927d68523d28130000000000000000000000000000000000162b40556b80959f9f9f9f9f9f9f8e79644f39240f000000000000000000000000000000000000000000000000000000000000080e101818181818181818180f0d070000000000000000000000000001080b18181818181818181813110b0200000000000f24394e64798ea3c6d6ddc7b29d88725544311d080000000000000000000000000005192b3c596e8398aec3cab49f8b76614c36210c0000000000000000000000000f253a4f647a8fabbccfdec9b39e8974594834200b0000132536596e8399aec3d8d4bfaa947f6a553f2a1500000000071a2d3d4b607283969fafb4c0c1c3c3c1c4b7b3aa9faabbcee2dfcbb7a696816c5b4a36210f0000000000000004192e44596e8399aec3c8ab96816c563a2917040000000000000011263c51667b91a6bbd0dbc6b09b86715b39281603000000000000000000000000000000000000000004182a3b4b6074879cb2c0d1c8b4a2917c675544311d0b000000000000000000000000000b1d314455667c90a2b4c8c6b49f8a77624c3c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000b21364b60768a9fb4c4cdcec4b4a28d78634d38230e000000000000000000000000000000000013283d53687d92a8b5b5b5b5b5a6917c67513c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba8b9ccdfcab49f8a75604b35200b000000000000000000000000000013283e53687e93a8c3cfbcab907b66513b26110000000000000000000000000c21364b61768b9fb5cadfccb9a88c77624d3722100000182d42586d8297adc2d7d5c0aa95806b55402b16000000000d21364a5c6b8095a1b0bdc8d1d1c8c7bab4b2b3b8b4bbc8d1e3e7d4c4b49f8c79634e3d2d1a0700000000000004192e44596e8399aec3c6b19c86715846331f0a000000000000000f24394e64798ea3c6d6ddc8b39e88735745321e090000000000000000000000000000000000000000000c1d314556667c91a2b4c9d1c0b29c8774604b3a291704000000000000000000000000011426374c5e70859aafc5cdbaa996816c5a4835200e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d281300091e3245576e8398a6b4babab4a69a846f5b4935210c000000000000000000000000000000000010263b50657b90a5c9d9cacabea9947e69543f291400000000000000000000000000000000000000000000000000000001080b1e2020201e1a100e08000000020c12141f202020200e0c07000000000000000000000000000000000000000000000000000a1f33465874899eb3c9decebbaa8d78624d38230d00000000000000000000000000000e23384d63788da5b6cac9ab96806b563929170300000000000000000000000a1e32465772879cb1c9d9d6c6a6917c66513e2d1d1312192b3c596e8398aec3d8d4bfa9947f6a543f2a1500000005192b3b4e64798d9fb5bfcddccfc0b4b0a99f9d9ea7a7b0b4c1cfdae2cebbaa99836e5b4a36210a00000000000003192e43586e8398adc3cab59f8b76614c36210c000000000000000c21374c61768ca8b9cde0ccb8a78b76604b36210b000000000000000000000000000000000000000000021527384d5e6f849aabbccfcab6a5937e695846331f0e00000000000000000000000000091e3245566f849aafc4d7c7b49f8b78624d3c2c190600000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d281300031628394d627888989fa9a99f988878624d3c2c190600000000000000000000000000000000000e23384d63788dabbccfe3d6c1ac96816c57412c17020000000000000000000000000000000000000000000000000009141d2034353535342f25231c110306141f2729343535353523211a0f0100000000000000000000000000000000000000000000000417293a5c71869cb1c6dbd9c8a58f7a65503a251000000000000000000000000000000c2035495a72879db2c7c5b09b86705746331e0a000000000000000000000003162939556b8095abbccfd9c3ae99836e5c4a3b3029272735485a71869cb1c6dbd3c3a7927d67523d28120000000b203448596e8399abbccfddcfbeb2a29a908a88898b919ba3b5bcc9dad9c8b59f8c79634e38271502000000000003182d42586d8297adc2cfbcab907b65503b2610000000000000000a1f33475874899eb4c9d5d5c5a38d78634e38230e000000000000000000040b0c12121212121212121212121a30404e64798c9fb4c2d3c3b39e8876614c3c2b19050000000000000000000000000b21364b60758a9fb4c9decebaa997826d5a4935200f00000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d281300000a203448596277828a8e8e8a8378625a49351e0e0000000000000000000000000000000000000b20364b60758a9fb4cadfd9c3ae99846e59442f19000000000000000000000000000000000000000000000000000919263135494a4a4a49453a372e21131424323b3e494a4a4a4a39362d1f0f0000000000000000000000000000000000000000000000001a2f44596f8499aec4d9d2bca7927d67523d2812000000000000000000000000000006192c3c576c8197acc8cab49f8b76614b36210c0000000000000000000000000e23384e63798c9fb4c5d5cab49f8c7a64594d403e3d38454d62788b9fb4cadfcab6a48e79634e39230e0000000d22374d62778ca1b3c9dad5c5b2a098847b757373767c85939fabbccfe3cfbcab96816c5645311d09000000000001172c41566c8196abc1dac9a9947f6a543f2a150000000000000004172a3a5c71879cb1c0c0c0baa5907b65503b261000000000000000000c181f2227282828282828282828282828364a5c6c8196a4b6c7ccb8a795806b5a4835201000000000000000000000000010263b50657b90a9bacde1d8c7b49f8b78634d3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d2813000005192b3b4859626d757979766e625a493c2c1900000000000000000000000000000000000000091d31455673889db2c8dddbc6b19c86715c3a2a1704000000000000000000000000000000000000000000000001142637444b5e6060605e5a504b3f30231f32424f545e606060605e4a3d2d1a070000000000000000000000000000000000000000000002172c41576c8196acc1d6d4bfaa957f6a55402a1500000000000000000000000000000011263c51667c91aabbcebbaa907b66503b26110000000000000000000000000c2135495b6d8298a6b8c8cebbaa9d8778665e5653525356606d8297abbccfd3c2b29c87725b4936210c00000013283e53687d93a8bfd0e0cbb8a6988273656055576167727e8d9fb5bfd0dac9b39e8975604b36200b000000000000152b40556a8095aabfd5c3ae98836e5936251300000000000000001a2f445a6f8499abababababa8937d68533e2813000000000000000c1d2a34373c3d3d3d3d3d3d3d3d3d3d3d3d3d3d4b6075869ca9bac8c5b49f8a78624d3e2d1b070000000000000000000005182a3b566b8196abc7d7e9e2cebbaa98826d5b4a362110000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b060000000000000000000002172c41576c8196acbda8927d68533d28130000000d1d2b3b484d5660636361574d483c2c1e0e00000000000000000000000000000000000000021527385b70859ab0c5dadec9b49e89745847331f0a0000000000000000000000000000000000000000000000081d3144556073757575736f655d4d41302c3d4f61697475757575705b4a36210c0000000000000000000000000000000000000000000000142a3f54697f94a9bed4d7c2ac97826d57422d180000000000000000000000000000000c21364b61768a9fb4c9c8ab95806b56402b16010000000000000000000000061a2c3d4d6277889eaab9c5c8b6a59d887c726c6867686c748095a0b1c9d4c5b6a4937e69543d2c1a06000003192e43586e8398adc3d8ddc8b39e887661554b44464b5460697e93a1b3c7dbccb8a7907b66503b261100000000000013283e53687d93a8bdd2c6b19c86715443301c0700000000000002172d42576c819595959595959595806b55402b160000000000000c1c2a3b474c5252525252525252525252525252525257647a8b9faabbcdbaa998826d5c4a362211000000000000000000000b1f34485971869cb1c6dbf1ead8c8b49f8c79634e3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b46311b111111111111111111111111172c41576c8196acbda8927d68533d2813000000000d1d2b3438454b4e4e4b4639342b1d0e000000000000000000000000000000000000000000182e43586d8398adc2d8e1ccb9a88c76614c37210c00000000000000000000000000000000000000000000000b20354b6074898a8a8a89847b675f4d3935495b697f898a8a8a8a79634e39230e000000000000000000000000000000000000000000000012273c52677c91a7bcd1d9c4af9a846f5a3625130000000000000000000000000000000a1e33465771869bb0c6c4af99846f5a442f1a050000000000000000000000000f20344859657b8c9ea7b4c0c3b6a69d9187817e7c7d8187959eb0becdc3b7a79c8674604b36200f000000061b30455b70859ab0c5dad6c0ab96816b574637313236434a606f8399aec1d2d5c5ab96806b56412b1600000000000011263b51667b90a6bbd0c9b49f8974604a35200b0000000000000010263b50657b80808080808080807d66513c2711000000000004172a3a475961676767676767676767676767676767676767677c8c9fb4cac7b59f8d7a644e402f1c090000000000000000000d22374c62778b9fb5cadfeae2dfcfbcab98836e5c4a3622100000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b463126262626262626262626262626262c41576c8196acbda8927d68533d281300000000000d1820283236393936322920190d00000000000000000000000000000000000000000000162b40556b8095aac0d5e8d6c6a48e79644f39240f0000000000000000000000000000000000000000000000081d3144556d82989fa79e9a8c7d675746384e63798d9ea89f9f947f6a543b2a1805000000000000000000000000000000000000000000000f253a4f647a8fa4c7d7dcc7b29c87725443301c07000000000000000000000000000003172939576d8297acc2c7b29d87725d48321d0800000000000000000000000005182b3b4b5d657b899aa2b0b5c1b7b3a49c96939293969da5b0bcc6bab4a59d8979635645321d09000000071d32475c72879cb1c7dcd0bba6917c665139291d1e2530424e64798ea3b5c9dbc5b09b85705b3b2a180400000000000f24394e64798ea3c6d6cdbaa98d77624d38220d000000000000000e23384c5d656b6b6b6b6b6b6b6b665e4d39240f00000000000a1f33475861777c7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d8499aec4cfbcab9a846f5e4c38230b00000000000000000012283d52677d92abbccfe3d8cecacec9b59f8d7a644f3e2e1b0800000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b463b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b41576c8196acbda8927d68533d2813000000000000050a161e212424211e160b05000000000000000000000000000000000000000000000013283d53687d92a8bdd2e6d1bba6917c66513c271100000000000000000000000000000000000000000000000114263751667c91a9b8b3aa9e8975614b3d52687d92a7b9c6b09b85705948341f0b000000000000000000000000000000000000000000000d22374c62778ca9bacddfc9b49f8a75604a35200b000000000000000000000000000000162b40556b8095aac0c9b49e89745f49341f0a000000000000000000000000000d1d2e3f4c5d657984919ba3b5bcc2b6b1aba8a7a8acb2b7c3cdbaa89f96877a645b4a38281502000000081e33485d73889db2c8ddceb9a38e79644e39240f081322364a5c71869bb0c6dbc9b39e89745947341f0b00000000000c21374c61768ca8b9ccd7c7a48f7a654f3a251000000000000000081c2f3f4c505656565656565656514d40301d0a00000000000c21374c617688919292929292929292929292929292929292929299a1b3c7dac9b4a2907b65503929160300000000000000071a2d3d586d8298adc9dad5c8bbb4bbc8bcab99846f5c4b37221100000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b86705b515151515151515151515151515151515151576c8196acbda8927d68533d2813000000000000000003090b0e0e0c0a030000000000000000000000000000000000000000000000000010253b50657a90a5c9d9ebd3bea9947e69543f29140000000000000000000000000000000000000000000000000c21364b61768a9fb4c8b9a7917c6752374f647a8fa6b8cab59f8b77624c37220d000000000000000000000000000000000000000000000b20354a60758a9fb4c9dfcdbaa98c77624c37220d0d0c0a04000000000000000000041219263f54697f94a9becab49f8a755f4a35200a000000000000000000000000000011212f3f4c5b63707c85939fabbccac7c1bdbcbdc1c7cbd4c9b49f8a8075645c4a3d2d1a0a00000000081d32475d72879cb2c7dccdb8a38d78634e38230e00071b2d3e566b8196abc0d6ccb9a78c77614c37220c00000000000a1f33475874899eb4c9d2bca7927d67523d2812000000000000000011212f3839464b5660646460564c473a2a1d0d000000000010263b50657b90a6a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7aeb3bfd0e7d0c0af99846f5746321e0a000000000000000c21364a5b73889db3c8d5c4b8aa9faabbc9b3a18f7a644f3f2e1c08000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b09b857066666666666666666666666666666666666666666c8196acbda8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788dabbccfe3d6c1ab96816c56412c17010000000000000000000000000000000000000000000000091e3246576f8499aec9c5ad98836d55444b6074889eb3c8bcab937d685339281603000000000000000000000000000000000000000000071c30435472879cb2c7dcd7c7a48f79644f3a242222211f170c00000000000000001222303744566b8096abc0c8b39e88735e49331e0900000000000000000000000000000311212f3d494e5f67707e8a9fb5cad4cbc8c3c1c3c8cbd5bfaa958075665e4a433625130000000000061b30455b70859ab0c5daceb9a48f79644f3a240f000012283d52677d92a7bcd2d6c5a38e78634e39230e000000000004172a3a5c71869cb1c6d4bfaa947f6a553f2a150000000000000000031729394657616c757979756c6158483b2a1805000000000f24394e64798ea3c4bcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcc4c7d0ddebdfcab49f8b76614b36210c000000000000000e24394e63798ea6b7cbcbb8a69d8a9fb4cabfaf9a846f5d4b372312000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b19c867c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c8399aebda8927d68533d28130000000000000000000000070d0f1314110c0a030000000000000000000000000000000000000000000b20364b60758a9fb4cadfd9c3ae99846e59442f190000000000000000000000000000000000000000000000000316283953687d92abbcc9b39e8974604b43546d8297acc6c9ae99846f5746321e09000000000000000000000000000000000000000004111c25365a6f859aafc4dad1bca7917c67523c37373737332a1c0c000000000000091d30404d556071869bb1c6c1af99846f5a442f1a0500000000000000000000000000000003111c304354607381939fabbccec4b7b2adacaeb3b8c4c3af9e95887c6c605443301c140000000003182d42586d8297adc2d7d1bba6917c66513c2711000011263b50667b90a5bbd0ceb9a48f79644f3a240f0000000000001a2f44596f8499aec4d7c2ac97826d57422d1800000000000000000a1e334657617581898e8e898176625948341f11000000000c21374c61768ca8b9ccd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d6d6d6d6d6d6cebbaa8f7a654f3a25100000000000000216283854697f94a9c4d5c8b39d888398adc0c8b4a2907b6550402f1c090000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9b6a49c9090909090909090909090909090909090909090909099a1b3bda8927d68533d281300000000000000000006101b2224282927211e170b0000000000000000000000000000000000000000081d31445573889db2c8dddbc6b19c86715c3a2917040000000000000000000000000000000000000000000000000d22374c62778b9fb4cab9a7907b65503651667c91a8bac9b49f8a76614b36210c000000000000000000000000000000000000000412222f3842576d8297acc2d7d4bea9947f69544c4c4c4c4c473a2a170400000000000f24394d5e66738095a3b5c2b5a3927d67523d27120000000000000000000000000000000005182b3b4b607282969fb5bcc8bbb4a69d9897999da6b3b8bcafa69d918172604a42311d0d0000000013293e53687e93a8c2d2d5c0ab95806b563e2e18080010253b50657a90a5bacfcfb9a48f7a644f3a250f000000000002172c42576c8197acc1d6c4af9a846f5a3625130000000000000005192b3c4c617585969fa8a89f978777624c3f2f1c080000000a1f33475874899eb3c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c8a8927d68533d2813000000000000091e3245566f849aafc4d9c5b09a857a8fa2b4c8c0b09b85705e4c3823120000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9c2b6b1a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6aeb3bfbda8927d68533d281300000000000000010f1a212d36393e3e3c3633291b1406000000000000000000000000000000000000021527375b70859ab0c5dadec9b39e89745846331f0a0000000000000000000000000000000000000000000000000b1f34475970859bb0c5c5ab96816c563d4b6075899fb4c9baa9917c665137261401000000000000000000000000000000000000122230404c50596a7f95aabfd4d6c1ac96816c6262626262615847331f08000000000011273c51667c8b959eafbcb0a49b8573604b35200b000000000000000000000000000000000b203448596a7f94a0b0bdcebbaa9f938883828488919da6b7c4b7b39f96826d604e3b2b18050000000e23384e63788da4b5c9dbc6b19b86715c4a3625150c13253651677c91a6bcd1d6c5a38d78634e38230e000000000000142a3f54697f94a9bed4c7b19c87725443301c070000000000000b2035485a6d8298a3b4babab4a59a84705d4c38230e0000000417293a5c71869cacacacacacacacacacacacacacacacacacacacacacacacacacacacaa95806a55402b150000000000000b21364b60758a9fb4c9d6c1ac978170859ab0c2c8b4a2907b66504030180800000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9bfbfbfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbfbfbfbda8927d68533d2813000000000000000f1f2c353e4a4f5354514b463931241407000000000000000000000000000000000000182d43586d8298adc2d7e1ccb9a88b76614c36210c00000000000000000000000000000000000000000000000005182a3b546a7f94a9c2c7b29d87725b4a45566e8399aec9c7ad97826d5544311d1515150e0c06000000000000000000000000091d30404d5e666e727e93a8bdd3d9c4af998377777777777776614c362513000000000010253b50657a90a9afbcb09e968678625544311d08000000000000000000000000000000000d22374c62778a9fb4becdc5b49f8c7e736e6c6e747c889da6b7cbbdb0a0937e69594834200a0000000c2135495b71869cb1c5d5c9b5a38f7a645443312721223043546b8095abc0d5ccb9a78c77614c37220c00000000000012273c52677c91a7bcd1c9b49f8975604a35200b0000000000000d22384d62788c9fb5c2cdcdc3b4a2907b65503b261000000000192f44596e83969696969696969696969696969696969696969696969696969696969696826d58432d1800000000000010263b50657b90a9bacdd6c6a8937d687b90a4b5c9c0b09b85715e4d36261401000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8927d68533d28130000000000000e1e2c3d494e5c6468696661574e42322514000000000000000000000000000000000000162b40556b8095aac0d5e8d6c6a38e79644e362614010000000000000000000000000000000000000000000003111c23384e63788da4b6cab6a58e79634e3853687d92abbcc8b39e8874604b352a2a2a2a2320190e00000000000000000000000f24394d5e667c8387939cadc1d5dcc7b3a1998c8c8c8c8c8c86715443301c07000000000d23384d62788daabbc0ab968176625a493d2c1b0b00000000000000000000000000000002152838556a8095a9bacdccb8a7947f6960545755606778889db2c0cdbeb49f8a77624d382815020000061a2c3d54697e93a7b8ccd2c1b09a8472604b44373737404a6073869cb1c7dcc9b39e8974604a35200b0000000000000f243a4f64798fa4c7d7cdbaa98c77624c37220d00000000000013283d52687d92abbccfe1e1d1c0ab96816b56412c160000000012273c52677d8181818181818181818181818181818181818181818181818181818181817e69533e2914000000000005182a3b566b8196abc7d7cdb9a88e796373869cb1c4c9b5a3917c665443301c09000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e9595959595959595959595959595959595959595959595959595959595959595927d68533d2813000000000005192b3c495b6370797d7e7c7668604f43321e0e0000000000000000000000000000000006192c3c53687e93a8bdd3e6d1bba6917c665443301c0f0000000000000000000000000000000000000000000513212e373a495b72879cb1c7c3aa947f6a553b4c61778b9fb4cab8a78f7a654f3f3f3f3f3f38352c1e0e0000000000000000000011273c51667c90989da5adbacbdde3d0bfb3afa1a1a1a1a19f8974604a35200b000000000b20354b60758a9fb3b8b49f8c8276635b493a2917040000000000000000000000000000091d32455671869bb1c7d7c8b39e8874604b4337444b5a657b90a2b4c8cdbaa997816c5645321d090000000f21364b6075889eb3c0d1c8b4a2947f6b60554e4c4c505e687e92a4b6cad7c7ae99846e5443301c070000000000000d22374c62778ca9bacdd7c7a48f79644f3a240f00000000000014293e54697e93a9c5d6e8ecdac9ad97826d58422d18000000001025394d5f676c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69604e3b261100000000000b1f34485971869cb1c6dbc9b49e897460687d92a6b7cbc1b19c8673604b372614010000000000000000000000000000000000000000000000000000000000000000000d22374c6277808080808080808080808080808080808080808080808080808080808080808080807a644f39240f00000000000b2035485a6379858e939391897e69614f3c2b19050000000000000000000000000000000c2035495a6f8499aec4d9eedac5b09b8573604b3d2c190900000000000000000000000000000000000000011323313f4b5054566b8096abc8c5b09b85705954545970859ab0c5c5ab96806b5654545454544d493c2c1906000000000000000000152b40556a8095aab2b7c3cbd8e8eeddd0c7c4b7b7b7b7baa98c77624c37220d00000000081d3144557287959ea6b8aa9f978779635846331f0d00000000000000000000000000000b20364b60758a9fb4cad9c3ae99836e55443126313c4c5d70859aafc5d7c7b39e8975604b36200b000000091e324557687e93a2b4c5d1c0af9d94807469636162656d7c8b9fb4c2d3cdbaa9937e6954362513000000000000000b20354a6075899fb4c9d1bca7917c67523c271200000000000011273c51667c91a7b9ccdedecfbcab95806a55402b15000000000a1e30414d52575757575757575757575757575757575757575757575757575757575757534e42311f0b00000000000d22374c62778b9fb5cadac4af9a856f546074889db2c6c9b5a4927d675544311d0a0000000000000000000000000000000000000000000000000000000000000000000b1f344859626a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a645c4a36220d000000000417293a4d6278889ba3a8a9a79e937f695a4835200b0000000000000000000000000000031628384d62788c9fb4cadff4ddc8b4a3947f695b49372614010000000000000000000000000000000000000b1e31414e5d65696a6a7a8faabbcab59f8c776a6a6a6a6a7f94a9bec7b29c87726a6a6a6a6a6a635a4935200c00000000000000000013293e53687e93a8bcbcc3c6cfdcedeadaccc3bfbcbcbcc7a48f7a654f3a2510000000000115273750657b7f889ea7b8b4a59d8776614c3b2a1805000000000000000000000000000d23384d62788daabbced6c1ac96816c573727151d2f3f53687e93a8bdd2ccb9a7907b66503b2611000000031628394b6073859ba7b8c7ccbbaf9e95867e7976777b828d9fa9bacdd5c5b49f8a77614c37220c00000000000000071c30435472879cb2c7d4bea9947f69543f2a140000000000000c21364b6175899eb3bcc8c9bfb59f8c79634e39240e0000000001132330393c4141414141414141414141414141414141414141414141414141414141413e3b31241402000000000012283d52677d92abbccfd5c0aa95806b55566a7f94a8b9ccc2b29c8773604b38271502000000000000000000000000000000000000000000000000000000000000000005182a3b484c555555555555555555555555555555555555555555555555555555555555555555554f4a3e2d1b07000000000a1f3346586e8398a6b5c1c5b9b39f8b78624d38220d0000000000000000000000000000091e3245566b8096abbccfe3e1ded1c1b49f8b79635544311d0f00000000000000000000000000000000000011253a4e5f687b7e7f7f7f8c9fb4cabcab98827f7f7f7f7f8197acc1cab6a495807f7f7f7f7f7f78634d38230e00000000000000000011263b50667b90a5a7a7aeb2becfe2dfccbcafaaa7a7a7a7a7927d68523d281300000000000923374b5d656a78899eb3c3b6a597816c5948341f0b000000000000000000000000000e23384e63788da3c8d8d5bfaa95806a55402b151124394e63798ea3c7d7d6c5aa957f6a55402a15000000000a1c3043546278899ea9b9c6ccbcafa49c938e8c8c90989fabbac7d7c9b8a796816c5947341f0a00000000000000001325365a6f849aafc4d6c1ac97816c57422c17020000000000091e324657687e939eafb3b3afa197816d5b4a36210c000000000005131e25272c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c29261f14060000000000071a2d3d586d8298adc9dad3c3a6907b66514c6176899eb4c8cab6a4927d685645311d0a0000000000000000000000000000000000000000000000000000000000000000000d1d2a34374040404040404040404040404040404040404040404040404040404040404040404039362d201000000000000c21364c61768a9fb4c5d1d6ccbaa9947f69543f2a1400000000000000000000000000000b21364b6075899eb3c9d9d6ccc9cccdbaa99b8573604b3d2c1909000000000000000000000000000000000013283d52687d8f949494949faabbcec9b2a0989494949494979fb1c4d3c3af9e95949494949494806b563c2b190500000000000000000e23384e63798d91919198a0b2c6dbd7c3af9e95919191919191806a55402b150000000000081c2f3f4b505a697e93abbcc3b49f8a77624c37220d000000000000000000000000000d22384d62778daabbced6c0ab96816b56412c160b20364b60758ba9bacdd8c3ad98836e58432e190000000001142636485a647b8b9ea8b6c2cec2b6b1a9a3a1a1a5adb5bcc9d6c8bbab9e8877624d3a2a18040000000000000000182d42576d8297acc2d7c4ae99846f59442f1a000000000000031628394e606b8090999e9e9a928374604b3d2d1a07000000000000010a101217171717171717171717171717171717171717171717171717171717171714110b020000000000000c21364a5b73889db3c8ddcab6a58c77614c46586b8196aabbcec3b29d8774604b382816020000000000000000000000000000000000000000000000000000000000000000000d181f222b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b24221b100200000000000f24394f64798eaabbcee3e8d8c7ad97826d58422d1800000000000000000000000000081b2e3f53687d92a7b8ccd6c6b9b4b9c6c7b4a3947f695b493726140100000000000000000000000000000000172c41576c8196a9a9a9aab4bbc8d9cfbeb2ada9a9a9a9a9acb1bdcee1ccbcafaaa9a9a9a9a99c87715a4835200b00000000000000000b20364b60747d7c7c7c8298aec3d8d5bfaa95807c7c7c7c7c7c7a644f39240f00000000000011212f373c4c61778b9fb5cabaa9937e68533e2913000000000000000000000000000b20364b60758a9fb4cad8c3ae99836e593f2e1b091d31455674899fb4c9d9c4af9a846f5a452f1a000000000008182b3c4b5d657b8a9ca4b4bac7c9c6beb8b6b7bac2cacfcdc5b9aa9f8d7c665948341c0c000000000000000000152a3f556a7f94aabfd4c6b19c86715c3a2a17040000000000000b1b314251626b7b848989857d72605645311f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea6b7cbdcc7b29c877258473a4d62788b9fb4cacab7a5937e685645321e0b00000000000000000000000000000000000000000000000000000000000000000000050b0d151515151515151515151515151515151515151515151515151515151515151515150f0d07000000000000000e24394e63798ea7b9cce0e2d4c4ac97816c57422c17000000000000000000000000000d22374b5d71869bb1c5d5ccb9a89ea8b8c5c1b49f8b79635544311d0f00000000000000000000000000000000142a3f54697f94a9c4bfbfc6c7cad4dccfc6c2bfbfbfbfbfc1c6c8cbd4daccc3c0bfbfbfbfb6a48d78624d38220d0000000000000000091d31455660676767687d93a8bdd2d1bca7927c676767676767645c4a36220d00000000000003111c2333475872879db2c7c7ad98826d58432d1803000000000000000000000000091d31455671879cb1c6dcc8b29d88735d4b3722172034485a748a9fb4c9dac5b09a85705b45301b0000000000000e1e2e3f4b5d657986959fa9b4b9c6c6c9cdd7cfcac8c7bab4a79e8c7e685e4c3b2b180000000000000000000012283d52677d92a7bcd2c9b49e89745847331f0a0000000000000014243344515d656f737470676054453827150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000216283854697f94a9c4d5d7c2ad98826d583a34485a6d8298adc0d0c3b29d8875604b3929160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6075899eb3c0cccec6b7a6927d68523d281300000000000000000000000005182a3b4f647a8fa3b5c9dec9b49e899ea6b8cbbaa99b8573604b3d2d19090000000000000000000000000000000f24394f64798ea6b1b1b1b1b2b6c3d4e6d3c2b6b1b1b1b1b1b1b3b7c4d4d7c7bab4b1b1b1b1a6917b66513c2611000000000000000002152738454b525252657b90a5c3d4d4bfaa947f6a55525252524f4a3e2d1b07000000000000000008182a3a5a6f849aafc4c5b09b85705b46301b0600000000000000000000000002152738576c8196acc0d1cbb7a68f7a654f4333292a394d62778da9baced8c3ae99836e59442e190000000000000010202e3f4b5b6375808b979ea8acb1b4b9c6bcb5b2aea99f96897c68604e402f1d0d0000000000000000000010253a4f657a8fa4c8c2c2b9a88c76614c37210c00000000000000061626333f4c505a5e5e5a524a4336271a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566f849aafc4d9d7c6a8937e69533e2b3c4e64798ea2b3c7cbb7a6947e695746321e0c0000000000000000000000000000000000000002090b131313131313130c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556b8095a2b3b8bbb4a89d8875604b36210b0000000000000000000000000b1f3447596d8398adc1d2d3c3a8937e889eb3c3c7b5a3947f6a5b4a3727150100000000000000000000000000000b20354a6073889c9c9c9c9c9da5b6c8d9c9b6a49c9c9c9c9c9c9da6b7cbcdbaa99f9c9c9c9c9b907b65503b25100000000000000000000a1a2731363c3c4c61778ca5b7cad8c2ad98836d54433c3c3c39362d201000000000000000000000182d43586d8298adc2c7b19c87725c47321d07000000000000000000000000000f253a4f647a8fa2b4c9d4c4af9a846f614b46393b4757687e93a8c7d8d8c7ac96816c57412c17000000000000000211212e3d4956606b78818991979b9ea8a1ab9f9d99938a8076665e4e4231221100000000000000000000000d22384d62778daaacacacaca38e79644e39240f00000000000000000816212f383b444949453d353025180a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60758a9fb4c9decdbaa88e79644f3924364a5c6f849aafc2d2c4b39e8875614b3a29170400000000000000000000000000000000000a151d2028282828282828211f170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374b607484959ea7aa9f998a7b655745321e090000000000000000000000011527374c62778a9fb4c9dfcab6a48d787e94a5b6cac1b49f8b79635544311d0f0000000000000000000000000000071c3043546b808687878787879daabbcec6b19c868787878786889db3c5c9b49f8b86878787857f72604a35200b000000000000000000000a151d202734475972879db2c7dcc8b29d8874604a37272724221b100500000000000000000002172d42576c8297acc1c8b39e88735e49331e00000000000000000000000000000d22374b5c70859aabbccfc7b3a2947f6c61575655596275879db2c7dccebaa9917c67523c2712000000000000000003111f2c38454b5a626c757c8286898b8c8c8a88847e776b61584c403124140400000000000000000000000b20354b60748b979797979797917c66513c271100000000000000000003111c23262f34343027201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a9bacddec9b49f8975604b35202d3d50657b90a3b5c9cbb8a6947f6a5846331f0c000000000000000000000000000000000a1a2731363d3d3d3d3d3d3d37332a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556607480888d8e8b8479655d4b392816030000000000000000000000081d3144556a7f95a9bacedcc7b29c877274879db2c0cdbaa99b8573604b3d2d1909000000000000000000000000000013253650626b7171717171768c9fb4cab9a48f7a71717171717b8fa7b8c9b49f8a75717171706a605443301c07000000000000000000000002090b182a3a586d8298adc2d3cbb7a68f7b655544373835312720180d000000000000000002172c41576c8196acc1c9b49f8a745f4a25130000000000000000000000000000081b2e3e4e647a8c9fb4c0d0c0ae9d9481766e6b6b6e77849aa5b7cad6c6b49f8a76614b36210c000000000000000000010f1a28323c484d5760676c717476777675736e6961594c473a2f221406000000000000000000000000081d3144556b80828282828282827b65503a25100000000000000000000000090e101a1e1f1b120b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b566b8096abc7d7dac5af9a85705544311d23384c5d71869bb1c3d4c5b39e8976614c3a2a1804000000000000000000000000000002152738454b525252525252524c473a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384556606a747879766f635b4b3f2e1b0a0000000000000000000000000b20354b6074889db2c7d8d4c4ab96816b667c91a2b4c8c7b5a3947f6a5b4a37271501000000000000000000000000000818334450555c5c5c5c5870859aafc5c0ab95806b5c5c5c6074899eb3c8baa9917c675c5c5b544a4336251300000000000000000000000000000010253b50657b90a4b6cad4c4b09b857360554f4d4b4437342b1d0d0000000000000002172c41576c8196acc1cab49f8a755443301c0700000000000000000000000000001022364a5c6c8196a2b3c1cbbbae9f968a838180838a9aa2b4c3d4c9b9a897826c5746331e0a00000000000000000000000a161e2b3539454b52575c57616261605659534c473b332a1c1104000000000000000000000000000114263751626b6d6d6d6d6d6d6d655d4b37230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475971869cb1c6dbd5c0ab96806b563727151c2f3f52677d92a5b7cbccb9a795806b5847331f0d0000000000000000000000000000091d3145566068686868686868615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2738454b5460636461584e493d2e2110000000000000000000000000071a2d3d51677c91a6b7cbdfcbb7a68f7a655e6f849aaabbcec1b49f8b79635544311d0f00000000000000000000000000001626333d404747473a54697e94a9c2c6b19c86715b4944556d8398adc8c7ad98826d5544463f35302518080000000000000000000000000000000e23374b5d72879cb1bfd0c8b4a397817469646260554d483b2b180500000000000002182d42576d8297acc2cfbcab8a75604a35200b0000000000000000000000000000071b2d3e4b6074849aa3b2becbbdb1a99f999695989ea8b4c0d1c9bcab9e8a77624c39291703000000000000000000000000030e19202832363c4239464b4c4c4b45383e37342a1f170c0000000000000000000000000000000009193444515657575757575757504b3f2e1c0800000000000000000000000000000000000000000000000000000000000000090f112020202020202014120c020000000000000000000000000000000000000000000000000000000000000d22374c62778b9fb5cad5d4c3a6917c66513c27111120354b6074879db2c5d6c5b49e8977614c3b2b1805000000000000000000000000000b20364b60747d7d7d7d7d7d7d76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a273136434b4e4e4c463a352c1f10030000000000000000000000000c21364a5b70859aafc4d4ddc8b29d8873604e63798c9fb4c4cebaa99b8573604b3d2d190900000000000000000000000000081621282b323232384d63788da4b6c9b6a48d78634e3752677c91aabbc8b39e8874604b352a201c130800000000000000000000000000000000081c2e3f51677c91a1b3c3d1c1b19f97867e7977757162594834200b00000000000003192e43586e8398adc3d9b5a08b75604b36200b000000000000000000000000000000101d31455661758598a0b3b8c5c7bab4aeabaaaeb4b9c6cdc5b8ab9f8d7d675947341b0b000000000000000000000000000000050a161e21272d293236373736312729221f180c040000000000000000000000000000000000001626343d41424242424242423a372e211100000000000000000000000000000000000000000000000000000000000004121d24263535353535353529271f1406000000000000000000000000000000000000000000000000000000000012283d52677d92abbcc0c0c0b7a58c77624c37220d081d314455697e94a7b9c8c0b9a896806b5948342009000000000000000000000000000b20354b60748b9292929292907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2630353839363329211a0f010000000000000000000000000417293a4e63798ea2b4c8e2d3c2ab96816b54495b6b8196a6b7cbc7b5a3947f6a5b4a3727150100000000000000000000000000040d0e1920222535495a71869cb1c6c2a9947f69543b4c61768b9fb4cab8a78f7a65503a2523201d1509000000000000000000000000000000001124394d5f6f8399a5b7c4cebdb1a49c938e8d8a8577624d37220d00000000000004192e44596e8399aec3cbb5a08b76604b36210b000000000000000000000000000000021527384657617582929ea6b3b7c4c5c3c0c0c3c9c8c7bab4a79e8d7e695f4d3b2a1800000000000000000000000000000000000003090b1217161e212221201d15140c0b040000000000000000000000000000000000000000081621292c2d2d2d2d2d2d2d25231c110300000000000000000000000000000000000000000000000000000000000012222f383c4a4a4a4a4a4a4a3e3b322414020000000000000000000000000000000000000000000000000000000417293a586d8298abababababaa9d87725948341f0b011527374b6176899eaaabababab9f8a77624c37261401000000000000000000000000081c30435472879da7a7a7a7937d68533e281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208141c202324211f170c0600000000000000000000000000000a1f3346586c8197acc0d1decab6a48e79644f3d4b6175889db3c0d1c1b49f8b79635544311d0f00000000000000000000000000000e1e2b35383a3a3c566b8095abc4c5b09a8570594746586f859aafc4c5ab96816b563d3a3836312719140700000000000000000000000000000a1d30414d6277879da6b4c0ccc2b5b1a8a4aa9f947f69543f2a1400000000000004192f44596e8499aec3cbb6a18b76614c36210c000000000000000000000000000000000a1a29394657616d7d88949da6abb0b3b9c5bab4b2ada99f96897c69604f41301d0d0000000000000000000000000000000000000000000000030a0c0d0c0b090200000000000000000000000000000000000000000000000000040e141618181818181818100e0800000000000000000000000000000000000000000000000000000000000000091d2f404c5160606060606060544f42321f0c0000000000000000000000000000000000000000000000000000000a1f334658738895959595959595917f6a543b2a180500091e334657677d8c95959595959595816c5544311d08000000000000000000000000011426365a6f859aafbdbdaa95806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e0f0c0a04000000000000000000000000000000001325364c61768a9eb4c9dedcc7b19c87725c4a364657677d92a2b4c8cebaa99b8573604b3d2d190900000000000000000000000005192b3c484d4f4f4f4f647a8fa6b7cab49f8b77614f4f54697e93a9c4c7b29c87725b4f4f4d4b443732251405000000000000000000000000000112203448596378889aa2b3b8c5c9c6bec8bbad98826d5837271501000000000003192e43586e8398adc3ccb7a18c77624c37220d00000000000000000000000000000000000b1b2939464b5f68757e8890969b9ea7a1a99f9d98928a8177665e4f423223120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24384c5e667575757575757569604f3b27120000000000000000000000000000000000000000000000000000000c21364c617680808080808080807c72604a35200d0000031729394d5f67797f8080808080808074604b35200b00000000000000000000000000182d42576d8297acc2c2ad98836d58432e18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354697e93a8b9cde1d2c1aa957f6a553e2d394d5f70849aaabbcec7b5a3957f6a5c4a3727150200000000000000000000000b2035485a62646464646475889db3c8bcab927d6864646464788da6b7cab6a58e796464646260554f43322313010000000000000000000000000005182b3b495a637884949ea7b0b4bbc8bebeb19b86715544311d08000000000002172d42576c8297acc1ceb8a38e79634e39240e0000000000000000000000000000000000000b1b2832414e576069747b8186898b8c8b8a88837d776c62594c403224140500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e121314161514120e0b070000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667c8a8a8a8a8a8a8a7e69543e29140000000000000000000000000000000000000000000000000000000a1f334658616b6b6b6b6b6b6b6b67605443301c070000000b1b30414d5b636a6b6b6b6b6b6b6a605544311d0800000000000000000000000000152a40556a7f95aabfc5b09a85705b37271502000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d0e0e0e0e0e0d0b050000000000000000000000000000000000000000000000000b20354a6073879cb2c6d7ddc9b5a38d78634e382330414e63798c9fb4c4d2c1b49f8b79645544311d0f00000000000000000000000d22384d62787a7a7a7a7a7a8499afc4c9af9a847a7a7a7a7a7a889db2c8c3ab96817a7a79787569614f41301d0a00000000000000000000000000000d1d2c3c495a62737f88939a9faaa7a8a9a89f8a75604b35200b000000000001162b41566b8096abc0cfbaa5907a65503b2510000000000000000000000000000000000000000b161e3139454b5560666c707476777674736e6861594c483b2f22140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408141c202327282a2b2b292723201c130808000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798e9f9f9f9f9f96816c56412c170100000000000000000000000000000000000000000000000000000417293a464c5656565656565655514a4336251300000000001323303d4a4e55565656565656554b44372614010000000000000000000000000012283d52677d92a7bcc8b29d88735544311d080000000000000000000000000000000000000000000000000000000000000000000000000009141d202323232323232220190e0000000000000000000000000000000000000000000006192b3c50667b90a4b6cae4dac9b09b86715b49352121364a5b6c8196a6b8cbcebbaa9b8574604b3e2d19090000000000000000000012273d52677c8f8f8f8f8f8f99a1b3c7c7b4a29a8f8f8f8f8f8f9da6b7cbc4b09f968f8f8f8d887f695f4d39250e0000000000000000000000000000000e1e2c3c48556069757e858a8f91939492908d78634d38230e00000000000014293e53697e93a8c8d8bca7917c67523c2712000000000000000000000000000000000000000003131b283237444b50565b57616261585d58534c473a342a1d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f263035393c3e3f40403f3c39353025231c110700000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba7b9b5b5ae99836e59442e19000000000000000000000000000000000000000000000000000000000b1b29333640404040404040403c3530251808000000000005131f2d363940404040404040403531261909000000000000000000000000000010253a4f657a8fa4c8cab49f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000010f1926313538383838383838352b1e0e0000000000000000000000000000000000000000000b2035495a6f8499aec3d3e3cfbcab947e69543d2c1a1a2d3d4c6176889db3c0d1c8b5a3957f6a5c4a372715020000000000000000000c21364c61768a9fa4a4a4a4afb3bfd0d0c0b4afa4a4a4a4a4a4b2b7c4d4cdbdb0aba4a4a4a79e917d67523c2b19050000000000000000000000000000000e1e2b37444b57606970767a7c7e7f7d7b76635a4935200c0000000000000f253a4f647a8faabbcebfa9947f6a543a2a180e0c06000000000000000000000000000000000000000a161e2731363b4139464b4c4c463a433d37342a1f180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d2a3436434b4e515354555554514e4a4336372e221b10010000000000000000000000000000000000000000000000000000000000000000000a1f33465874899eb3c9c6b19b86715c39291703000000000000000000000000000000000000000000000000000000000b171f212b2b2b2b2b2b2b2b27201c130800000000000000010f1a21242a2b2b2b2b2b2b2b201d14090000000000000000000505050505050d22384d62778daabbcebcab8d78624d38230d05050505050505010000000000000000000000000000000000000000000000000000000f1f2c37444b4d4e4e4e4e4e4d483c2b190500000000000000000000000000000000000000031628384d62788c9fb4cadfdfcab59f8c77624d37220e0f1f334658677d92a2b4c8d2c1b49f8b7a645544311d100000000000000000000a1f3346586f8499afc2b9b9c4c7d0dcded0c7c4b9b9b9b9b9b9c8cbd4e1dbcdc4c1b9b9c5b8b09b85705a4835200b000000000000000000000000000000000e19263139454b5357616567696968656157493c2c19060000000000000b21364b60768a9fb4cac3ae99846e5847332823211a0f010000000000000000000000000000000000000309151d20262c283236373633292e28221f180c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b474c5460636768696b6a6967636054504b3f372e1d140900000000000000000000000000000000000000000000000000000000000000000417293a5c71869cb1c6c8b39e89735746331e0a0000000000000000000000000000000000000000000000000000000000040a0c1616161616161616120b070000000000000000000000070c0e15161616161616150b080100000000000000040a0c1a1a1a1a1a1a1a20354b60758a9fb4c9c9a5907a65503b251a1a1a1a1a1a1a1a16140e040000000000000000000000000000000000000000000000061a2c3d495560626363636363625a4835200800000000000000000000000000000000000000091e3245566b8096abbccfe3d8c8af9a8570594834200b0417293a4a6072859aaabbcecebbaa9c8674604b3e2d1a0a00000000000000000417293a52687d92a4b3b5bcb6b6c4c8d1dedccec5c1b6b6b6b6b6b6c9ccd6e4d8cac0bdb6b6b5a38d78624d38220d000000000000000000000000000000000009141d28323639464b5052535453504b46392c1e0e00000000000000091e32455670859aafc5c9b49f8a77614c453839362c1f0f000000000000000000000000000000000000000002080b1117161e2122211f1719130c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344759617074797c7d7f80807e7c78746d655d4f4b3e3126190a0000000000000000000000000000000000000000000000000000000000000000192f44596e8499aec3ccb8a78b76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f22303030303030303030435472879db2c7bda7927d68523d3030303030303030302b28211608000000000000000000000000000000000000000000000c2136495b637478787878787878624d362513000000000000000000000000000000000000000b21364b6075899eb3c9d9e2cebbaa937e68533b2b1905000b1c30435464798c9fb4c4d5c8b5a495806a5c4a3827150200000000000000000b20364b607486979e9faba0a0afb4c0d1cebdb1aca0a0a0a0a0a1b4b9c6d6cabaada7a0a0a0a0947e69543f2914000000000000000000000000000000000000010a161e212832363a3c3e3f3d3b3633291b0e00000000000000000316283852677d92a7b8ccbaa997816c6056574e493d2c1a0a00000000000000000000000000000000000000000000000003090c0d0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c617784898e919394959594918e88827a70645c4b4437281a0a000000000000000000000000000000030a0c11121212121212121212121212172c41576c8196acc1d5c5a38e79634e39240e080000000000000000000000000000000002090b10131514100c0a0300000000000001090b0b0b0b0b00000000000000000000000000000000000000000000000000000000000000000c1c2a3337454545454545454545365a6f859aafc4bfaa95806a5545454545454545454545403d332616040000000000000000000000000000000000000000000e23394e6379878d8d8d8d8d8d86725443301c070000000000000000000000000000000000081b2e3f53687d92a7b8cce7dfc9b49f8a77614c37210d0000001325364a5c6c8196a6b8cbd2c2b49f8c7a645645311d100000000000000000091d314556627782888a8b8b8b9aa2b4c8c5b19f978b8b8b8b8b8b9ea8b9ccc0ad9c928b8b8b8b8b84705b45301b000000000000000000000000000000000000000003090b161e212527292a2826211e170b000000000000000000000b20364b6075889eb3bfc7b19f958075706d635b4938281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b9ea8a6a8a9aaaaa9a6a79e978f857a6b60554538281808000000000000000000000000000b171e2126272727272727272727272727272a3f54697f94a9bed0bba6907b66513b26231c1103000000000000000000000000040a151d2026292a2926211e170b070003090b171e2020202020100e080000000000000000000000000000000000000000000000000000000004182a3a474c5a5a5a5a5a5a5a5a5a5a5a6d8297acc2c2ad97826d5a5a5a5a5a5a5a5a5a5a5a56514433210e0000000000000000000000000000000000000000061b30455b70859aa5a3a3a3a39f8975604a35200b00000000000000000000000000000000000d22374b5d71869bb0c5d5e8d7c6ae99846f5847331f0a00000008182d3d4c6176889eb3c1d1cebbaa9c8674604b3e2d1a0a00000000000000021527384859626d7375767675849aafc4c1ac97817576767676768a9eb4c9bda7927d767676767675614b36210c000000000000000000000000000000000000000000000003090c1012141413100c0a030000000000000000000000091d324556677d92a1b2bfbdb09e9589858279635645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e1214161514120f0b0902000000000000000000000000000000000000091e32455673889eb3c6bdbec0bfbec5b8b3ada29b8c80736056453625130000000000000000000000000c1b2933363b3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c52677c91a7bcd1bea8937e69533e3a372e211708000000000000000000000c171f2832363b3e3f3e3b363329211a0f161e212c34353535353525221b100200000000000000000000000000000000000000000000000000000a1f334758616f6f6f6f6f6f6f6f6f6f6f6f7f95aabfc5af9a84706f6f6f6f6f6f6f6f6f6f6f6b62513d281400000000000000000000000000000000000000000a1f344a5f74899fb4c3b8b8baa98c77624c37220d0000000000000000000000000000000005182a3b4f647a8fa3b5c9d7d7cdbaa8927d67523a2a1704000000000f1f334658687d92a3b4c7d7c8b5a495806b5c4a38271502000000000000000a1a2b3b484d5855606161697e93a9c2c7b29d8872616161616e8398aec8c2ad98836d61616161615746321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384d5f6e8399a1b5bcbcb0a89e9a978975604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608141c2024272a2b2b2a2824201d150c0a03000000000000000000000000000000031628385b70869bb0c5d2d2d1d3d3d5ccc8c0b4ab9f968374605443301c11000000000000000000000c1c2a39464b515252525252525252525252525252525264798fa4c9d9c0ab96806b5652504b3f342717000000000000000002101c2a3338454b50535553504c4639362d1d28323641494a4a4a4a4a3a372e211000000000000000000000000000000000000000000000000000000c22374c6177848585858585858585858584869cb1c7c9b49e8a848585858585858585858584806b56402b160000000000000000000000000000000000000000091e34495e73899eb3c8cdd7c7a48f7a644f3a250f000000000000000000000000000000000b1f3447596d8298adc1c2c2c2c5b49f8a76614b36210c00000000000417293a4a6072859ba9bac7c2c2b49f8c7a645645311d0b00000000000000000d1d2b343737444b4b4d62788da4b5c9b7a58e79644e4b52677d92aabbc9b39e8974604b4b4b4b46392816030000000a141a1c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e13100b01000000000000000000000000000a1a30414b617583979fabb5bcb9b3afa78f7a654f3a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a21263035393d3f40403f3d3a363228211e160b030000000000000000000000000000192e43586e8398adc2bfbdbcbec2c8ccd5d1c9bcb4a1998372604a3f2e1808000000000000000004172a3a475761666767676767676767676767676767676767778cabbccfc3ae98836e6767655d51453418080000000000000210212e3a474c566065686a696561574e4a3d3138454b565e60606060604f4b3f2e1b08000000000000000000000000000000000000000000000000000b20354b60758a9a9a9a9a9a9a9a9a9a9a9a9ca4b6cacdb9a89e9a9a9a9a9a9a9a9a9a9a9a9a86715c3b2a180500000000000000000000000000000000000000061c31465b71869bb0c6dbd1bca7927c67523d2712000000000000000000000000000000000d22374c62778a9facacacacacaca798826d5746321e0a0000000000000c1c304354647a8b9fa9acacacacaa9c8674604b3929170300000000000000000d18202227313536485a71869cb1c6c3aa95806a553c4c61768b9fb4cab9a7907b65503b363632281b0b0000000e1c272f32343434343434343434343434343434343434343434343428251e130500000000000000000000000000131e3246576173818d999fabacafb0a7927c67523d27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f2c3536434b4e5254555554524f4b45383632291e160b00000000000000000000000001162b41566b8096abadaaa8a7a8acb3b8c5ced9cfbfb3a1947f6a5d4b36251300000000000000000a1f33475861757b7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d8c9fb4cac7b19c867d7c7c7a6c635136251300000000000010202e3f4b58616c757b7e7f7e7b766e635b4b444556606c737575757575655d4b37220e00000000000000000000000000000000000000000000000000081d31445572879dafafafafafafafafafafb1b6c2d3d7c6b9b4afafafafafafafafafafaf9f89745947341f0b000000000000000000000002090b10131514110c192e43596e8398aec3d8d4bfa9947f6a543f2a1500000000000000000000000000000000152a40556a7f9597979797979797958979634d39291603000000000000001325364a5c667d8b9597979797979795806b5746331e0a000000000000000000050b0d151d202b3c556a8095aac4c6b19b86715a4847586f859aafc4c5ab96816c563d2d211e160b0000000a1c2c39434749494949494949494949494949494949494949494949493d3a31231301000000000000000000000000031628394655606c79848c91979a9b9d947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d2a343d494e54606367696b6a6967646056534b463932291b1201000000000000000000000011273c51667c919a9895929293979ea7b1bdcde3d0bfb49f8c7b655443301c07000000000000000c21374c617687909191919191919191919191919191919191929fabbccfcab6a49c9191918f816c5443301c07000000000b1b2e3f4b5d6576818990939493908a83796b60554b607481888a8a8a8a8a7b654f3a251000000000000000000000000000000000000000000000000000011426375a6f859aafc4c4c4c4c4c4c4c4c4c5c8cbd4e2d7cdc9c4c4c4c4c4c4c4c4c4c4baa88c77624c37220d000000000000000000040a151d2026292a2926211f2c41566b8196abc0d6d7c1ac97826c57422d1700000000000000000000000000000000152b40556a8082828282828282827f78635b49351b0b000000000000000008182d3d4d5e66787f828282828282828175614b36210c00000000000000000000000001080f24394f64798ea6b7c9b5a38d78624d3a54697e93a9c2c7b29d87725b4a36210c03000000001427394a575c5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e524e41311e0b000000000000000000000000000b1b2837444b5c646f777c8284868888806b56412b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101f2d3b474c5b636c74797c7f80807f7d79756f6861574b46392f1c1408000000000000000000000b20354a6072808482807d7c7e8289979fb0bccde3cfbcab9c8672604a3520100000000000000012283d52677d92a5a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7b4bcc9d9d3c2b6b1a7a7a79f8973604a35200b000000031628394b5d657b89969ea8a8aaa8a99f988c807461586a7f949ea79f9f9f927c67523d27120000000000000000000000000000000000000000000000000000182d42576d8297acb0b0b0b0b0b0b0b0b0b0b2b7c4d4d5c5b8b3b0b0b0b0b0b0b0b0b0b0a48f7a644f3a250f00000000000000000c171f2731363b3e3f3e3b3633293e53697e93a8bed3d9c4af9a846f5a3625130000000000000000000000000000000013283c50616a6d6d6d6d6d6d6d6c6a625a493c2c19000000000000000000000f1f30404d5a626a6d6d6d6d6d6d6d6c615746331e0a00000000000000000000000000000d22364a5c73889db2c8c2a9937e69543a4d62788da4b5c9b7a58e79634e39240e00000000001a2f435768717373737373737373737373737373737373737373737373685f4e3a251000000000000000000000000000000b1927313d4a4e5861676c6f7172736b62513d291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e3d4a59616c7982898e9294959594928f8a847d766a61574c4030261809000000000000000000071c304354606a6f6d6a6867696d7681969eb0c1d2d9c9b5a4917c67513e2d1b07000000000000152a3f546a7f94a9c3bcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbccacfd9e7e0d3cac7bcbcbaa88c77624d37220d000000091e324657647b8a9ea7b4b9c6bfc7bab4aa9f968476616f8499afb8c5b5aa947f6a553f2a150000000000000000000000000000000000000000000000000000152a3f556a7f949a9a9a9a9a9a9a9a9a9a9a9da6b7cbccb8a79e9a9a9a9a9a9a9a9a9a9a9a927c67523d271200000000000002101c293338454b50535554504c463a3b51667b90a6bbd0dcc7b19c87725443301c070000000000000000000000000000000d21334350555757575757575757554d483c2c1e0e00000000000000000000011222303c494d5557575757575757574b46392917030000000000000000000000000000071b2d3e576c8197acc6c4af9a856f5847485a71869cb1c6c3aa947f6a553b2b1805000000001c32475c718688898989898989898989898989898989898989898989897d68523d281300000000000000000000000000000009151d2d363a474c52575a5b5d5e56514434210e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3f4b5b6377818c979ea7a7a9aaaaa9a7a99f9a92897f75665e4b4336271909000000000000000000132536434a555a585553525357616c8096a3b5c9ded2c2b19c86715c4a36220d000000000000162c41566b8196abc0d1d1d1d2c9c6bebebebebebebebebebebebfc3ccdaeae0d2c9c6bec6a48f7a654f3a25100000021528384b6175879da8b8c5ccd6d4d7cdc8bbb4a29b867770859aafc5d5c2ac97826d57422d18000000000000000000000000000000000000000000000000000011263b50667c858585858585858585858585889db2c8c8b39e898585858585858585858585857d67523d271200000000000210202e3a464c566065686a696661584f4a4e63788ea3c4d5dfc9b49f8a75604a35200b000000000000000000000000000000041525333c4042424242424242424038352b1e0e00000000000000000000000004121e2c35384042424242424242423633291b0b0000000000000000000000000000000011263b50667b90a8b9cab49f8b76614c3c556b8095aac4c5b09b8670594834200b000000001b31465b70869b9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e95806b56402b1601000000000000000000000000000000010f1a212a33373c4245464849413d342616040000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4b5d647987979faab3b8c5bec0bfbec7bab4afa79e95877c6b6054443727150200000000000000000818253035404543403d3d39464c6074859bb1c3d4dec9b5a48f7a644f3a240f000000000000182e43586d8398adc2d8e5d2c2b5b1a9a9a9a9a9a9a9a9a9a9a9aaafbccce6d2c2b5b1a9a9a7927d67523d28120000091d3245566b8095a5b6c6d5e1d5ccc7bab4b4bab4a49b85768499aec4d9c4af9a846f5a36251300000000000000000000000000000000000000000000000000000f23384c5e667070707070707070707070707f95aabfc4af9a84707070707070707070707070675f4d392510000000000010202e3e4a58616c757b7e7f7e7b766e645c4b60768ba6b8cbe0cdbaa98c77624c37220d00000000000000000000000000000000071521282b2d2d2d2d2d2d2d2d2a2220190e0000000000000000000000000000000e1920232a2d2d2d2d2d2d2d2d211e170b00000000000000000000000000000000000b20364b6075899eb4c8bbaa927d6752384f64798fa6b7cab59f8b77624c37220d00000000192e43586e8398adb3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3ad98836e58432e19000000000000000000000000000000000000070c181f22272d2f3133332b2921160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758647b8a9da5b4bbc8cccdc9c5c3c4c7cac9c5b8b3a69d908072605544311d1502000000000000000008131c202b2f2d2b282729334455667c91a5b6cadfd2c2ab95806b563c2c190600000000001a2f455a6f849aafbdcddec9b5a49c9494949494949494949494959eafc8d9c9b5a49c949494947f6a553f2a1500000b20364b6075889eb3c3d4e4d5c5b8b3a99f9fa9b0b5a398828298aec3d8c7b29c87725443301c0700000000000000000000000000000000000000000000000000091c2f404c505b5b5b5b5b5b5b5b5b5b5b677d92a7bcc7b29d8772555b5b5b5b5b5b5b5b5b5b524d41301e0a000000000a1a2d3e4a5c6476818990939493908a837a6c605773889eb3c8ddd7c7a48f7a644f3a250f0000000000000000000000000000000000040d13151818181818181817150d0b050000000000000000000000000000000000060c0d1518181818181818170c0a03000000000000000000000000000000000000091d3145566d8398aabac6ae98836e56454a6074889db2c1bcab927d68533d281300000000162b40566b8095abafafafafafafafafafafafafafafafafafafafaf9b86715b3828160200000000000000000000000000000000000000040a0c12171a1c1d1e16140e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4c6176889da8b7c3cecdc7bab4b0aeafb2b6c3c6ccc4b7b29e968273604b4332201000000000000000000000070b151a181513121727374a6073879db2c7dcdcc7b29c87725a4935200c000000000013283d52687d929fb0c0d1c6b19c867f7f7f7f7f7f7f7f7f7f7f8095aabbcec6b19c867f7f7f7f7b65503b2510000012273c51677c91a6b8cbe1e0ccb8a79e91898a8f9ba3b2a098889eb3c8ddc9b49f8a75604a35200b000000000000000000000000000000000000000000000000000011222f383b4545454545454545454550657a8fa5c8cab49f8a75604b4545454545454545453d3930231301000000031628384a5c647a88969ea8a8aaa9aa9f998d81756270869bb0c5dbd1bca7927c67523d27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384e63798c9fa8abac9e8975604b43546c8197acacaca995806b56402b160100000013283e53687d939a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a89735645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6e8399a6b7c6d4c7bab4a99f9a989a9da5aeb2becdcbbcb0a098826d614f3e2d18080000000000000000000000000503000000091c3043546c8196acc1d6dfcab6a58d78634d38230e000000000011253a4e5f6c8196a2b4c3cab49f8c7b69696969696969696969738b9fb4cac5b09b8570696969655d4b38230e0001172c41566c8196abc5d5e3d1c0b39e897c74757a8598a0b2a69ea6b8cbe0cdbaa98c77624d37220d000000000000000000000000000000000000000000000000000003111c2326303030303030303030384d62778daabbcebbaa8d77624d38303030303030303027251e130500000000091e324556647a8a9ea6b3b9c6bfc8bbb4ab9f9785776e8398adc3d8d4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000090f111212110d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21364a5b677d8a93969696907b66513650667b90969696948b7a644f3a250f000000000f243a4f647a84858585858585858585858585858585858585858585858475604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d111314161514110d0b0600000000000000000000000000000000000000031729394f647a8ea1b3c4d4c8baa99f948a858384878e98a0b4bac7cdbeb2a0947f695c4a36251300000000000000000000000000000000000013253651667b91a6c7d7e6d3c3a6917c67513c271200000000000b1e31414b6073849aa5b7c7bcab9e897862565454545454545572889db2c7c8b39d8873565454504b3f2f1c0800061b31465b70869bb0c5dbdcc8b4a2907b67606065748298a2b4b3b8c4d5e7d7c7a48f7a644f3a250f00000000000000000000000000000000000000000000000000000000090f111b1b1b1b1b1b1b1b20354b60758a9fb4cac8a48f7a654f3a251b1b1b1b1b1b1b12100a0100000000011527374b6075869ca8b8c4ccd6d4d7cdc9bcb5a39b87778095abc0d5d7c1ac97826c57422d1700000000000000000000000000000000000000000000000000000004121c2326272726221f180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4d5f67777e818181817c66513c4b6074818181817f79645c4b37220d000000000d22364a5c64707070707070707070707070707070707070707070707070605645321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d18202226282a2b2a2926232019100b07000000000000000000000000000000000a1e3346576e8398adbfcfcebbaa9f8b7f76706e6f727983919fa9bac8cebeb49f8b7a645443301c0700000000000000000000000000000000000d23384d62788da9bacde1d5c0aa95806b55402b16000000000001131d3144556176879da9bac9b8a79b8574604b423f3f3f375b70859ab0c5cab59f8a76604b3f3b382f21110000031628395e73889eb3c8dddac5af9a85705d4b4b566073849aa8b9cbd5e2e7d1bca7927c67523d27120000000000000000000000000000000000000000000000000000000000000006060606060606081d31445572879db2c7bca7927d67523d28120606060606060000000000000000081d3144556a7f94a4b6c6d5e1d6ccc7bab4b4bab5a59c867f94a9bed3d9c4af9a846f5a36251300000000000000000000000000000000000000000000000000000012222f383b3c3c3c37342a1d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30414d5961696c6c6c6c665e4c384556606c6c6c6c6a635b4b3e2e1b0800000000071b2e3e4a4f5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4b45382816020000000000000000000000000000000000000000000000000000000000000000000000000000020d1920222b34373c3e3f403f3e3b38352b26201c130800000000000000000000000000000c21364c61768b9fb4cad8c8b49f8b7b6a6157595a5c646e7c8b9faabbcecebbaa9b8572604a35201000000000000000000000000000000000000b20354b6075899fb4c9ded9c3ae99846e59362513000000000000011527374758647a8a9fb4bcc5b5a397816d604e3e2d2d43586d8298adc2cfbcab8d78634e3825231c11030000091e324557748a9fb4c9dfd4bfa9947f6a543f3845556277899eb3c3d4e6e9d4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000011426375a70859aafc5bfaa947f6a553f2a1500000000000000000000000000000b20354b6074889db2c2d3e4d6c5b8b3a99f9fa9b0b4a49c889db2c8dddcc7b29c87725443301c0700000000000000000000000000000000000000000000000000091c2f404c505252514c473b3022120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011323303b474c5356575757514c403038454b57575757554e493d2e201000000000000010202e363a4545454545454545454545454545454545454545454545453632281a0a00000000000000000000000000000000000000000000000000000000000000000000000000000a161e2b34373b484c515354555553514d483c3b3530251c130800000000000000000000000011263b51667b90aabbcecebbaa95806b5d4b46393e4a4f5e667b8c9fb4c3d4c8b5a3917c67523e2d1b0700000000000000000000000000000000081c30435471879cb1c6dcdcc7b29c87725443301c0700000000000009192a3a4a5c677d919eb0bfc1b19f927e685c4a3a2a40556b8095aac0dac9a5907b65503b261008000000000b21364b60768baabbcee2d0bba6917b66513c27374859697e93a5b7cadfecd7c1ac97826c57422d17000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2c2ac97826d57422d18000000000000000000000000000011263b51667b90a6b7cbe0e0ccb8a79e918a898f9ba3b2a69da6b7cbdfdfc9b49f8a75604a35200b000000000000000000000000000000000000000000000000000f23384c5e6667676662594d40301909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131d2a34373e414141413c383022283236414141413f39362c1f100200000000000002101b2224303030303030303030303030303030303030303030303030211e160a00000000000000000000000000000000000000000000000000000000000000000000000000000e1a28323b484d5659626668696b6a6966625a57504a43363025180f0100000000000000000000162b41566b8096abc8d9cab49f8b77624c3f32282d36404c5d6a7f94a5b7cad2c1b19b86715c4a36220d00000000000000000000000000000000011426365a6f8499afc4d9dfc9b49f8a75604a35200b000000000000000c1c2d3e4d5f6b8096a1b3c3bdb49f8b7a645847363e53687d93a8bdd2bda8927d68533d281300000000000b20364b60758ba9bacde1cfb9a48f7a644f3a252b3b4b6074879db2c6d7e9d9c4af99846f5a362513000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfc4af9a846f5a3625130000000000000000000000000001162b40566b8095abc4d4e4d1c1b39e897c75757a8598a0b2b2b7c4d4e7e2cdbaa98c77624d37220d0000000000000000000000000000000000000000000000000011263b50667c7c7c7b77665e4d372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f22292c2c2c2c26241d12151d202c2c2c2c2a23211a0f01000000000000000000070d0f1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b0b090200000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b38454b59626b72777b7d7f807f7e7b78736d6560544a43362d1f1305000000000000000000192f44596e8499aec3d9c6b19b86715948341e161b22303f4b6074879db2c7ddc9b5a38e79644f39240f0000000000000000000000000000000000172c42576c8197acc1d6e2cebaa98c77624d37220d00000000000000000f2030414b60738399a5b6c6baa99d87766154433b50667b90a5bbd0c0aa95806b55402b160000000000081d31445574899fb4c9deceb9a48e79644f39241d314455697e93a8b9cde1dcc7b19c87725443301c07000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdc7b29c87725443301c07000000000000000000000000051b30455a70859aafc5daddc8b4a3907b67606065748298a2b4c5d4e2f2ead7c7a48f7a644f3a250f000000000000000000000000000000000000000000000000041a2f44596f849191918a7d665544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c1417171717110f090002090b17171717150e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3c4856606c7880878c919394959493908d88827b736860544a3d3123140700000000000000001b30465b70859bb0c5d8c2ad98836d583b2a180307121d314455697e94a9c4d4d2c1ab96806b563828160200000000000000000000000000000000152a3f546a7f94a9bfd4ead8c7a48f7a644f3a250f000000000000000001131d3144556176879ca8b9c7b7a59a8472604b404e63788da3c5d5c2ad98826d58432d180000000000021527375d73889db2c8ddcfbaa5907a65503b251527374b61768a9eb4c9dedec9b49f8975604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9bcb49f8a75604a35200b000000000000000000000000011426375d72889db2c7dddac5b09b85705e4b4b566073849aa7b8cce0f1e7d1bca7927c67523d271200000000000000000000000000000000000000000000000000152a40556a7f95a7a89e8874604b35200b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d1215161514110d0b05000000000000000000000000000000000000000000000008182a3a485a6274818b969da5a6a8a9aaaaa8a6a69d9790877d72635b4e4132251406000000000000001d32475c72879cb1c7d6c1ac97816c57422c170000011527374d63788da6b7cbdbc6b09b86715645321e090000000000000000000000000000000012273d52677c92a7bcd1e6d1bca7917c67523c271200000000000000000001142637475863798a9eabbcc3b3a195806b5e4c4b60768ba6b8cbc5b09a85705b3727150100000000001b30455a70859aafc5dad1bca7917c67523c27121e3246576d8297adc5d6e1cdbaa98c77624c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daba6a6a6a98c77624d37220d000000000000000000000000081d31445574899eb4c9ded4bfaa957f6a55403845556277899eb3c3d3e6e9d4bfaa947f6a553f2a150000000000000000000000000000000000000000000000000111263b50667b90a5b8a78e79644f39241d140d0b0500000000000000000000000000000000000000000002080b111111100e0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d101111110c0a0300000000000000000000000000000003090e192023272a2b2a29262220190e0c0600000000000000000000000000000000000000001325364758627885969faab2b6c3bdbec0bfbec4b7b2aca49c92857968604f43322413010000000000001d32485d72879db2c7d7c2ac97826d57422d18000000092035495a73889db3c8ddcab49f8b74604b36210b000000000000000000000000000000000f253a4f647a8fa4c7d8ead4bfa9947f6a543f2a15000000000000000000000919293a4a5b667c8d9fb5bfbfb59f8d7c665a495673889eb3c8c7b29d88725544311d080000000001172c41566c8196abc9d9d3bea9947e69543f291416293950657b90a7b8cce0d7c7a48f79644f3a240f00000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60748c91919191918f7a644f3a250f0000000000000000000000000b20354b60758aa8b9cde1d1bca6917c67513c27374759687e93a4b6cadeecd7c1ac97826c57422d17000000000000000000000000000000000000000000000508141c22374c61778ca5b7a8937e68533e3531262220190d0700000000000000000000000000000000000009151d202626262623201c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e19202325262626211e170b000000000000000000000000000b161e212b35383c3f40403e3b38352b23211a0e060000000000000000000000000000000000071c3043546176869ba3b4bbc8cad3d5cbc8c7c9cdcbc8c3b6b2a39b8a7d69614f4231200f0000000000001c31475c71869cb1c6d8c3ae99836e593b2b1805000006192c3c5b71869bb0c6dbcfbcab8e79634e39230e000000000000000000000000000000000d22374d62778ca9bacee2d6c1ac97816c57422c1702000000000000000000000c1c2d3d4d5e6b8095a1b3c2bcab9e897863575b71869bb0c6cab49f8a75604b35200b000000000012283d52677d92abbccfd8c3ae98836e593e2d1b0b20354b6074899eb3c8ded1bca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000081d314455667c7c7c7c7c7c7c77624c37220d000000000000000000000000081d314455758a9fb4cadfcfbaa5907a65503b252a3b4b6073879cb2c5d6e8d9c4af9a846f5a3625130000000000000000000000000000000000000000020d18202630353b475872879db2ad97826d584e4b443737342b221b100500000000000000000000000000000009192731363b3b3b3b3835302518130500000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212b35383b3b3b3b3633291b0b0000000000000000000004121b2832363c494d5154555554514d483c38352c211a0e010000000000000000000000000000021628384a6072849aa4b5c1ced8d0c7c5b8b3b2b4b9c6c9cdcac1b5a99f927f69604e3e2d180800000000001a30455a6f859aafc4dac7b29c8772594834200a0000001a2f455a6f849aafc4d9d9c9a5907b65503b2610000000000000000000000000000000000b20354a60758a9fb4c9dfd9c4af99846f5a442f1a0000000000000000000000000f1f30404a60728399a4b6c5b9a79c867560596e8399aec3cebbaa8d78624d38230d00000000000d22374c62778b9fb4caddc8b39e88735c4a36220c1d3144556e8398adc3d8d4bfa9947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000021527374c5e6667676767676762594834200b000000000000000000000000011426495e73899eb3c8decfbaa48f7a654f3a251c304354687d93a7b9cce0dcc7b29c87725443301c070000000000000000000000000000000000000a151d2b3436434b5057586e8398aeb19c867266636055544d483b372e20190d0000000000000000000000000002152737444b505050504e4a4336312317090000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d363c484d505050504b463929170300000000000000000816223039464b545a62676a6b6a6966625a564e493d352c1c140800000000000000000000000000091e324556677d92a2b4c3d2e2cdbfb3aea69e9c9ea8abb4bac7d2c7bab49d937e685c4a3625130000000000172c42576c8197acc1d6cab6a58c77624c382816030005192b3c5b70859ab0c5dad1bba6917c66513c271100000000000000000000000000000000071c30435472879cb2c7dcdcc6b19c87715c3a2a1804000000000000000000000001121c3043546175869ca7b9c5b5a498826d606b8196abc0d9c8a58f7a65503a251000000000000b1f34485970859aafc5d5cbb8a68e79644f3a2a18152737556a8095aabfd5d6c1ac97816c57422c1702000000000000000000000000000000000000000000000000000000000000000000000000000009192f404c515151515151514c483b2b1805000000000000000000000000001d32485d72879db2c7dcd0bba6907b66513b261426364b6075899eb3c9dedfc9b49f8a75604a35200b0000000000000000000000000000000003111a28323b484d5460666d72768197acb59f8d7e7c79756f6962594f4b3e342b1d12050000000000000000000000081d31445560666666656360544d4134271705000000000000000000000000000000000000000000000000000000000000000000000000000e1e2d3d4a4e5a6265666666615746331e0a0000000000000008162633404d57616972787c7f807f7e7b77726b635b4e493d3026180b0000000000000000000000000b21364b6075889db2c0d1decdbcb0a1998e8887898d959fa9b6c3d3cdbbb49f8b7a645443301c070000000013293e53687e93a8c4d4d3c3a9947f695645321e160e0f2035485a72889db2c7ddd0bba6907b66513b261100000000000000000000000000000000001325365a6f859aafc4dadec9b49f89745947341f0a0000000000000000000000000013253646576379899eabbcc2b2a0937e69697e93a9bed2bda7927d68523d2813000000000005182a3b53687e93a7b8ccd5c4ad97826d5847331f13283d52687d92a7bdd2d9c4af99846f5a442f1a0000000000000000000000000000000000000000000000000000000000000000000000000000000012222f383c3c3c3c3c3c3c37342b1d0d00000000000000000000000000051a2f455a6f849aafc4d9d2bda7927d68523d28131e3245566c8197acc4d5e2cdbaa98c77624d37220d0000000000000000000000000000000715212f38454b59626a747b82878c979fb1bcab9f93918e89857e776e645c4d483b30231507000000000000000000000b20364b60747c7b7b7b7873675f524534231300000000000000000000000000000000000000000000000000000000000000000000000006192b3c4a5b6370787a7b7b7b75614b36210c0000000000000516263344505e66757f878d9194959593908d8780786e635b4b4336291b0b0000000000000000000004182a3a52677d92a6b7cbded0c0b09e96837973727478808b9ca4b6c4d4cdbaa99b8572604a352010000000000e23394e63798ea6b7cbddc8b29d8775604b42322823242d3d4d62788da5b7cadfd5c5a48f7a644f3a240f0000000000000000000000000000000000182d42586d8297adc2d7e1cdbaa88c77614c37220c0000000000000000000000000008182939495b667c8d9fb4bebeb49f8b7a667b91a6c8d8bfaa957f6a55402a150000000000000d21364b6176899eb3c5d5c9b49f8a77614c3f2e1e253a50657a8fa5c8d8dcc6b19c87715c3b2a180400000000000000000000000000000000000000000000000000000000000000000000000000000004121d24262727272727272220180d000000000000000000000000000001162b40566b8095abc8d8d4bfa9947f6a543626141628384f657a8fa6b8cbe0d7c7a48f7a644f3a250f0000000000000000000000000000071525323f4b56606a777f8790979da5acb1bdc9bcb5a9a6a99f9a948b837a6e62594d4133251608000000000000000000081d31445570859090908d877d6c635241311a0a00000000000000000000000000000000000000000000000000000000000000000000000b2035485a6379858d9090908c76614b36210c0000000000001323334451626b7c88949ca4a6a9aaaaa9a6a59c968c83796a60544639291b0b0000000000000000000a1f3447596f849aafc4d4d9c8b3a296806f635b5d5b636b79869ca6b7cbd7c7b5a3927d67523e2d1b070000000c2136495b73889db2c9dacbb7a696816c604b453938393e4a5b6b8095aac3d4e0cbb8a68d78624d38230d0000000000000000000000000000000000152a40556a7f95aabfd4e9d7c6a48e79644f39240f00000000000000000000000000000b1b2c3d4c5e6a7f94a0b2c2bbaa9d8877788eaabbcec2ac97826d57422d180000000000000a1e3246576a7f95a7b8cccdbaa997826d5d4b3c2b22384d62788daabbcedec9b49f89745947341f0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000090f111212121212120d0b050000000000000000000000000000000012273c51677c91aabbced9c4ae99846f5443301c0b20354b6074889eb3c8ddd1bca7927c67523d27120000000000000000000000000003152533434f5d65747f8a959da5acb2b6c3c5cedacfcabec7bab4afab9f998f8378675f50433326160600000000000000000215273751667c90a4a5a49c92816c5f4e38281603000000000000000000000000000000000000000000000000000000000000000000000d23384d6278899ba3a5a59b86715746331e0a00000000000c1d304151626b80919da6b1b6c2bfc0bfbec3b6b2ab9f998b7f726157463a29190900000000000000000c22374c61778b9fb4cadfcebbaa9a8472604e4a3d494e5b6378889db2c0d1d2c1b19c86715c4a36220d000000061a2c3d566b8096abbccfd4c4b59f8d7e6b6057504e4e515c64798a9fb4c9deddc8b39e8874604b35200b000000000000000000000000000000000013283d52687d92a7bdd2e6d1bca6917c67513c27120000000000000000000000000000000e1f2f4050616e8298a4b5c5b7a69a84758a9fb4c9c4af9a856f5a362614010000000000031629394c6176889eb3bfd0c7b19f907b655a483b2f354b60758a9fb4c9dfcdbaa88c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768b9fb4cadec9b39e8974604b35200d1c3043546d8298adc2d7d4bfaa947f6a553f2a15000000000000000000000000000d2033435061697b87959fa9b2b7c3c7cad3cedadce3d7cdc9cac9c9bcb4aea098897d6a6150443324130100000000000000000b20354a6073869cb1b6b29f927d685645321e0900000000000000000000000000000000000000000000000000000000000000000006192b3c576c8196a7b4c1ac97816c57392917030000000004182a3b4d5f6b80959eb3b7c4cad3cbc8c5c6cacac9bcb5aa9f958375615846372715020000000000000012273c51677c91abbcc9cdcab49f8c78635443362d353d4959667c90a2b4c8ddc9b5a48e79644e39240f000000000f23384e63798c9fb5cadfcfbcab9f9380756b656363666d7a889da9bacde1d2c1ad98826d5443301c08000000000000000000000000000000000010253a50657a8fa5c9d9ebd3bea9947e69543f291400000000000000000000000000000000122233434b6175869ca7b8c4b4a29680859bb1c6c7b29c87725443301c080000000000000b1f334758677d92a1b3c3cebdb29d877862594c4035445572879db2c7dcd7c6a48f79644f3a240f000000000000000000000000070d0f121514120e0b080100000000000000070a0b0b0b0b0000000000000000000000000000000000000000000000000000000000000000000a1f3347586f849aafc4d5ccb9a78f7a654f3b2b18142636556a7f95aabfd4d7c1ac97826c57422d170000000000000000000000000013283c50616a7f8d9ca5b4bac7cad4cbc8bfb8c5c8d1c7bab4b5bcc9c9cabfb2a89e91806b625042311f0f0000000000000000071c304354677d92a5b6bdb39e8875604b3727150100000000000000000000000000000000000000000000000000000000000000000b2035495a73889db3c5c4a7927d67523d271200000000000b1f344759677d919eafbccbd5ccc4b8b3b0b1b4bbc8ccc8bbb4a1998576615544311d1200000000000000172c41576c8196a4adb4babcad98836e5b4936251a212c3b4c5e70859ab0c5dad2c2aa95806a55402b15000000000c2135495b6f8499aebecfdac9bcb59e9688807a78797c828c9da6b7c7d7d9c9b5a3917c66513626140100000000000000000000000000000000000d23384d62788dabbccfe3d6c1ac96816c57412c170200000000000000000000000000000004151e3246576278899eaabbc0b09e96889db2c8c9b49f8a75604b35200b0000000000000417293a4d5f6f8399a5b6c5cbb7a69d8777665e4e493d5a6f859aafc4dad1bca6917c67513c2712000000000000000000010b101b2224282a2a2824201c1408050000090f111c1f2020202016130d04000000000000000000000000000000000000000000000000000000000004172a3a53687d92a6b8cbd6c5ad98836d5948342012283d52677d92a7bcd2d9c4af9a846f5a36251300000000000000000000000000152a3f556a7f949fabb6c3cdd7cdc4b7b2aaa3afb4c0baa99f9fabacb4b9c6c6b9b39e95806b604e3d2c1a0600000000000000001325364b6074879cb2c4b8a6937e695544311d0800000000000000000000000000000000000000000000000000000000000000000d23384d62788da6b7cbb7a68d78624d38230d0000000004182a3a4c6177899eb3bcccd6c6b9b4a69e9a9b9faab3b9c5cebfb3a39a8473604b402f1b0b00000000000012283d52677d868f979fa9a79e8e7a644e3c2c18080f1d2f4052677d92a7c4d5d9c4af99846f5a36261401000000061a2c3d4f647a8fa0b2c7d7dacfbcb0a69d95908d8e91979faab7c4d4e0cfbcab9b8572604a35200b0000000000000000000000000000000000000b20354b60758a9fb4cadfd9c3ae99846e59442f19000000000000000000000000000000000003162839495a657b8c9fb4bebcb0a69da6b7cbcebaa98c77624d37220d000000000000000c1c30414c6176879da7b9c5c4b6a59d887c6d635b57576d8297acc2d7d4bea9947f69543f2a14000000000000000002131e252d36393d3f3f3d3935302620190e121d24263134353535352b2821150700000000000000000000000000000000000000000000000000000000000c21364b6075889db3c4d5c9b49f8b77624c402f1e253a4f657a8fa4c7d7dcc7b29c87725443301c0700000000000000000000000012273c52677c919eafbfd0d0c6b9b4a69d958e9aa2b4b49f8b8b90979ea8b2beccbcaf9e927e685b493521110000000000000000081d314455687e93a6b7c5b29d8774604b362513000000000000000000000000000000000000000000000000000000000000000012273d52677d92a7c4c8b39d88735a4935200b000000000a1f3347586c8196a7b8ccd9c9b9a89e928885868b949ea7b5c2d0c1b4a297816c5e4c39291703000000000010253a4d5f67717a828a90918e806b5c4a361e0e00001222374d62778ca6b8cbddc8b39e88735443301c08000000000f22374b5c6e8398a9bacde1e3cdc4b7b2aba5a3a3a6adb4bbc8d4d5cbbcb49f8c7b655443301c07000000000000000000000000000000000000081d31445573889db2c8dddbc6b19c86715c3a29170400000000000000000000000000000000000b1b2c3c4c5d697f94a0b2c1c4b7b2b7c4d4d8c7a48f7a644f3a250f0000000000000000131f3347586379899ea7b7c4c3b6a69d908279716c696a7f94aabfd4d6c1ac97816c57422c170200000000000009151d313a3e4a4e525454524e4b4336352b1e2230383c464a4a4a4a4a403d3326150400000000000000000000000000000000000000000000000000000000091e3245566a7f94a6b7cbcebbaa98826d5e4c3c2c22374d62778ca9bacddfc9b49f8a75604a35200b0000000000000000000000001025394d5f6b8095a1b3c2c0b4a89e94887f79849aafaf9a84757a818a98a0b1bdccbcb49f8a79634e402f1c0900000000000000011426374b6075889db3c5b7a5927d675443301c0700000000000000000000000000000000000000000000000000000000000003162939576c8197acc1c3ae98836e593c2b1906000000000c22374c61778a9fb4c5d5cfbcab9e8a7d747071767f899ca4b5c3d1c0b19f917c665746331e0c00000000000a1e30414d525d656d757b7c796b62513e2d1b0000000b2034485973889db3c8ddcab59f8a75604b35200b00000000071b2e3e4d62788a9fb4c0d1e3e2d4cbc8c0bab8b8bbc2caced2c9c5b8b39e947f6a5d4b36251300000000000000000000000000000000000000011527375b70859ab0c5dadec9b39e89745846331f0a0000000000000000000000000000000000000e1e2f3f4f616d8298a3b5c5cbc8cbd4e2d1bca7927c67523d2712000000000000000004182a3a495b657b899da6b4c0c4b7b3a0988d86817e7d8298adc2d7d9c4ae99846f59442f1a00000000000009192731414e525c64676a69676360544d483c3230404c515c5f6060606055504433210d00000000000000000000000000000000000000000000000000000000021628384b6176889db3bfcfc8b2a0907c665a493c30354a6075899fb4c9decebaa98c77624d37220d0000000000000000000000000a1d30414a60728399a4b5b3a29a8a7f746a6b8096abb39e8973656c7782979fb1c2cdbaa99a84705e4c38230d0000000000000000091d324556697f94a7b8c3b19c8673604a3520110000000000000000000000000000000000000000000000000000000000000a1e32465771869bb1c6c7a9947e69543f29140000000005182a3b54697f94a9bacddfcab49f8c7b67605558616978869ca5b7c9cebdb29d8876614c3a2a180400000000011323303a3f4b4f56606567645c514434201000000005182b3b5c71879cb1c6dccfbcab8c76614c37210c0000000000102035485a697e94a2b4c5d5e7e7d4c4b7b2afb4bbc8bebdc2b5b1a69e91806b614f3f2f18080000000000000000000000000000000000000000182e43586d8398adc2d8e0ccb9a78b76614c36210c00000000000000000000000000000000000000112132434b6075859ba6b8c8d8dfe7e9d4bfa9947f6a543f2a150000000000000000000c1c2c3d4b5d6579889aa2b4bac7beb2ada39b97949398a0b2c5dadcc6b19c87715c3a2a18040000000002152737444b5f6872797d7f7f7d79746c625a4b453d4c5e667174757575756b62503d281300000000000000000000000000000000000000000000000000000000000a1e334657677c91a1b2c2cfbeb39d8878635a4c4036435472879cb1c7dcd8c7a48f7a654f3a251000000000000000000000000001121c304354617586999f9d938478696056677c91a6b8a78d786359616e8197a4b5c9c7b4a2907b65503b2b180500000000000000021528384b6176899eb3c6b6a4917c66513f2e1c0800000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4cabaa98f7a644f3a250f000000000b1f34485971869bb0c7d7d3c2ac97826d5d4b44464c5a6277879dabbccfcbb7a695806b5847331f09000000000005131e252e3738454b50524e4a3d3426160d0f1112141c30435471869bb1c6dbd3c3a18c77614c37220c000000000005192b3c4b6073849aa7b8c9dadfcbb7a69d9a9faaa8a9a8a6a49c94887d6b625143322111000000000000000000000000000000000000000000162b40556b8095aac0d5e8d6c5a38e79644e39240f0000000000000000000000000000000000000003141e3245566278889eaabbcee2ececd7c1ac97826c57422d17020000000000000000000f1f2e3f4b5b637884949fa9b4bbc8c1b5b1aca9a8adb2becedcd9c9b49e89745847331f0a00000000081d314455606e7d878e929494928e8881786b6057495b667c86898a8a8a8a806b55402b160000000000000000000000000000000000000000000000000000000000031729394d5f6e8399a4b6c5cbb7a69d8778665e4e4a3d5a6f8499afc4d9d1bca7927c67523d2712000000000000000000000000000013253646576176838a887e72625a4b4d62778da6b7a7927d67524c6074869cb1c8d1c0af9a846f594834200b00000000000000000a1e3246576a8095a8b9c2b09b85705d4b372310000000000000000000000000000000000000000000000000000000000010253b50657b90aabbc9b49f8a75604b36200b000000000d22374c62778ca3b5c9decab6a48e79634e3f31333c4859657a8d9fb5c9d4c4b49e8a77614c372614010000000000010a101b222832363b3c39362d1f161a2124262726303a4a6074899eb3c8decab6a58b75604b36200b0000000000000e1c3043546278899eabbccfddc8b29d88848a90929392908c867f75675f51443425150300000000000000000000000000000000000000000013283e53687d93a8bdd2e6d0bba6917b66513c2611000000000000000000000000000000000000000003162838485a657b8c9fb4bdcedfecd9c4af99846f5a442f1a000000000000000000000110212e3d4a5a62737f8a979faab2b6c3c2c1bebdc2c5ccc9c6c4c9b9a88c77614c37220c000000091d2f404b607383929ca4a7a9a9a7a69d968b8075635b63798b9b9fa99f9f98826d58432d180000000000000000000000000000000000000000000000000000000000000b1b30414c6176869ca7b8c5c4b7a59d887c6d635b57576c8197acc1d6d4bfaa947f6a553f2a150000000000000000000000000000081829394758616f7573686054483c485a73889db3ab96816c564455677c91aabbcecab49f8b77624d37220d0000000000000000031629394c61778a9eb4c7b4a3907b65503e2d1b0700000000000000000000000000000000000000000000000000000000132536556a7f95aac8c5b09a85705645311d090000000012273c51677c91a6c1d2dcc6b19c87715b49351d1f2b3a4b5d6d8298abbccfcdb9a895806a5544311d080000000000000000080a161e21252724211a0f1f2d36393b3d36434b58657a8fa7b8ccdcc7b29c87725645311d0900000000000001142636485a667c8d9fb5bfd0cbb7a6937e767a7d7e7d7b77716961574d41342616070000000000000000000000000000000000000000000011263b50667b90a5bbd0e5d3bea9937e69543e29140000000000000000000000000000000000000000000a1a2b3c4b5d697e939fb1c1d1d7d7c6b19c87715c3a2a18040000000000000000000002101f2d3c4854606977818b959ca5a9adb1b3b4bbc6b9b4b1afabab9f8e79644f39240f0000000f24384c5e6d8297a1b2b6c3bfbec4b7b3aa9f96867964697e93aab4bab5af9a85705a37261401000000000000000000000000000000000000000000000000000000000000121f3346586379899ea7b7c3c3b7a69e918279716c69697f94a9bed4d7c2ac97826d57422d180000000000000000000000000000000b1b2a3a474c566056534a43362b3c596e8499aeb09b857055444b61768a9fb4c9cfbcab927d68533d28130000000000000000000b1f3347586c8196a9bac1af9a846f5c4a36220f000000000000000000000000000000000000000000000000000000071c3043546f8499afc4c0ab96806b563827150200000001162b41566b8096abc0d5d6c1ac96816c573d2c1a0e1c2e3f4e63788c9fb4cad6c6b29d8874604b35200b0000000000000000000002090b10120f0d071a2d3d4a4e51525454606676859bb1c5d5d0c0ad97826d58382715020000000000000008182b3c4c5e6a8095a1b3c3d3c4b59f8d7d67686968666259544b46393023160800000000000000000000000000000000000000000000000e23384e63788da3c5d5e7d6c0ab96816b56412c16010000000000000000000000000000000000000000000e1e2e3f4f606d8197a3b4c4c2c2c2b49f89745947341f0a0000000000000000000000010f1d2b36434b59626c787f878e93989c9e9faaa0a89e9c9995918b8479634e39230e0000061a2c3d51667c90a0b1bfcad3d4d8cecac8bbb4a49c897a6a8095aac8cdc7b29d88725544311d080000000000000000000000000000000000000000000000000000000000000417293a495b647a899da5b3bfc4b8b3a0988e86817e7d8197acc2d7d9c4af9a846f5a362614010000000000000000000000000000000c1c2a3338454b45383530252a3f556a7f94aab49f8a75604b465772879cb1c7d9c9ad98826d58432d1803000000000000000004172a3a4d62788b9fb4c9b3a28e7a644f3d2c1a0600000000000000000000000000000000000000000000000000000b20354a6074899eb3c9c3a6917c66513c26110000000004192f44596e8499aec3d9d2bca7927d67523d281200102135495b6f8499afc8d8cbb7a6917c665137271502000000000000000000000000000000000d21364a5c646667696d747c869ba3b5c9d4c4b3a28f7b65503a25100000000000000000000e1e2f404a60728399a4b6c6cfbcab9f8b7b655b53514d483b3632281b12050000000000000000000000000000000000000000000000000b21364b60768ba6b8cbe0d8c3ae99836e59442e190000000000000000000000000000000000000000000000112132424b6074859ba6acacacacaca88c77614c37220c000000000000000000000000000d1826303b484d5a626a72797e8287898a8b8b8a898784807c7770635b4936210c00000c2136495b71869bb1becededaccc8bbb4b3b9c2b6a79e89797f94aabfd4cab49f8a75604b35200b000000000000000000000000000000000000000000000000000000000000000c1c2c3c4a5c6479879aa1b4b9c6beb2ada49c979493979fb1c5dadcc7b29c87725443301c08000000000000000000000000000000000c171f2731363127201c13263b50657b90abbaa98e79644f3e5b70869bb0c5dbc5b09b86705b46311b060000000000000000000c203448596d8297abbcc0ae98836e5b4935210d00000000000000000000000000000000000000000000000000000e23394e63798ea7b9cab6a48c77614c37220c00000000011426365c71879cb1c6dccfbaa48f7a654f3a251000061a2c3d52677c92aabbced4c4ad98826d5544311d08000000000000000000000000000000000f24394e647a7b7c7f8288909ca4b5c2cfc3b7a69a846f5d4b37230e00000000000000000000111c3043546176869ca8b9cdc9baa99e897963594839342b211e160b0000000000000000000000000000000000000000000000000000091e32455673889eb3c8dddbc6b09b86715b392816030000000000000000000000000000000000000000000003141d324556627788979797979797978e79644f39240f000000000000000000000000000008141c2b343c484d555c64696d71737576767574716f6b6761594e493d2c1a0600000e23394e63798ea3b5c9dcdeccbcafaa9f9ea7a9b3b8a79d878096abc0d5cebbaa8d77624d38220d00000000000000000000000000000000000000000000000000000000000000000e1e2e3e4a5b637784939ea8b4bac7c2b5b1aca9a8acb1bdcedcd9c9b49f8a75604b35200b0000000000000000000000000000000000040a151d201d150b070c21364c61768b9fb5a8937e68534b5c72889db2c7ddc8b29d88735d48331e0800000000000000000005192b3b4e63788c9fb4cab49f8c79634e3b2b19050000000000000000000000000000000000000000000000000013283e53687d93a8c5c7b29c87725947341f0a00000000081c30435473899eb3c8decdb8a28d78634d38230e00000e21364c61768a9fb4cadec9b39e8975604b36200b00000000000000000000000000000002172c42576c81909294989da6b1b6c2c9bcb5a59d8878624d3f2e1c080000000000000000000000132536465863798a9eb4bccdc7b8a79d87776257463727150903000000000000000000000000000000000000000000000000000000031628385b70869bb0c5dbddc8b39e88735746321e090000000000000000000000000000000000000000000000021528384859647a82828282828282827a644e39240f000000000000000000000000000000010d18202b35383e4a4f54585c5460616160555c5a56514c473a362c1f0f00000014293f54697e94a9c1d2e4d1c0af9e958a898c949ea7b4a69d8a9fb4c9dfd8c8a48f7a654f3a251000000000000000000000000000000000000000000000000000000000000000000010202e3d495962727e8a969fa9b1b6c2c2c1bebdc2c5cdc9c7c4c9baa98c77624d37220d0000000000000000000000000000000000000002090b090200000a1f33465872879cb1ad97826d5858647a8fa5b7cadec9b39e89745e49341f09000000000000000000000d2135495b6e8398aebfbcab97826d594834200c00000000000000000000000000000000000000000000000004172a3a586d8297adc2c2ad97826d583a2a1804000000000b20354b60758a9fb5cadfcbb6a18c76614c37210c00000a1f33465870859ab0c5daccb9a7907a65503b251000000000000000000000000000000000142a3f54697f94a7a9adb3b8c4cac3b7ab9f978779635a483521110000000000000000000000000818293a4a5b677d919eb0c0d0c5b7a59b8575615544311d150500000000000000000000000000000000000000000000000000000000192e43596e8398aec3d8e0ccb8a78b76614b36210c0000000000000000000000000000000000000000000000000a1a2b3b4b5c646d6d6d6d6d6d6d6d645c4a36210d0000000000000000000000000000000000050e1920222d36393e4336434a4c4b4b443744403c37342a211a0f01000003182e43586d8398adc2d8ddc8b4a295807674777e899aa2b3aa9faabbcee2d2bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000002101f2c3b4854606977818a949ca4a8adb1b3b4bbc6b9b4b1afabab9f8f7a654f3a251000000000000000000000000000000000000000000000000000000417293a586d8298adb19c87715d6576869cb1c3d4ddc8b39e88735e49331e0900000000000000000000061a2c3d4e64798ea1b3c9b49f8b78624d3a2a170400000000000000000000000000000000000000000000000a1f33475872879cb1c7c5a8937d68533e281300000000000b21364b60768babbccfe3cbb6a08b76614b36210c00000417293a566b8095abc0d5d6c5aa957f6a55402a150000000000000000000000000000000012273c51677c91a6bcc2c8cbd5cbb7a59d8d8276635b4a3c2b1903000000000000000000000000000b1b2d3d4d5f6b8095a2b3c3d4c3b5a3998373604b4333231303000000000000000000000000000000000000000000000000000001162c41566b8196abc0d6d7d5c5a38e78634e39230e000000000000000000000000000000000000000000000000000d1d2e3e4b4f57575757575757574e4a3d2d1a0700000000000000000000000000000000000000050b101b2224292e25303536363531262f2b27221f180c0600000000051a30455a6f859aafc4dadac5b09a857060596169778499a1b3b4bbc8d8ead4bfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000010f1d2b36434a59626c787f878e93989c9e9faaa0a89e9c9a96918b8479634e39240e000000000000000000000000000000000000000000000000030a161e293e53697e93a8b49f8b75707b889ca4b6c9e1dbc6b19b86715c46311c0700000000000000000000000e22364a5c6f8499afc0baa996816b5847331f0b00000000000000000000000000000000000000000000000c21374c61778ca4b6cab9a78e79634e39230e00000000000c21374c61768ca1b6daeccbb5a08b76604b36210b00000011263b51667b90a6c6d6d9c4af9a846f5a3b2b18050000000000000000000000000000000f24394f64798ea4c6bbbfc5c9c7b29d88796d62594f423025180800000000000000000000000000000f1f30414b6072849aa5b7c7d2c1b3a197816d61504131211101000000000000000000000000000000000000000000000000000014293e53697e93a8bec2c2c2bba6907b66513b2611000000000000000000000000000000000000000000000000000010202e373a424242424242424239362d1f0f0000000000000000000000000000000000000000000000070d0f1418131c202121201d141a16120c0a04000000000000071c31475c71869cb1c6dbd5c0aa95806b55474c5961748399a4b5c8d8e6ecd7c1ac97826c57422d170200000000000000000000000000000000000000000000000000000000000000000000000d1825303b474c59626a72797e8287898a8b8b8a898784807c7770635b4a36210c00000000000000000000000000000000000000000000000a161e2832363a4f64798fa9baab958085909da6b6c2d3e3d1c0ac97826c57422d17020000000000000000000000071b2d3e50657a8fa2b4c7b49e8a77614c392916030000000000000000000000000000000000000000000011263c51667b91a6c2c9b39e8974604a35200b00000000000c21374c61768ca1b6cbe0cbb6a08b76614b36210c0000000d22384d62778da8b9ccdec9b49e8974594834200b0000000000000000000000000000000c21374c61768ca8a2a5a9b0b5c1b7a59d8a817769614a43362513000000000000000000000000000001121c3043546176879da9bacdd0bfb19f947f6a5f4d3f2f1f0f000000000000000000000000000000000000000000000000000011263c51667b91a6acacacacaca8937e68533e2913000000000000000000000000000000000000000000000000000002101b22242d2d2d2d2d2d2d2d24211a0f010000000000000000000000000000000000000000000000000000000000070b0c0c0b0801000100000000000000000000061b31465b70869bb0c5dbd3bea9947e69543f3b47566175869caabbcee2efd9c4af9a846f5a452f1a0000000000000000000000000000000000000000000000000000000000000000000000000008131c2a343b484d555c64696d71737576767574726f6b6762594e4a3d2d1a0700000000000000000000000000000000000000000002101a283238454b525861758a9fb4af9e959aa2b2b7c4d3e0d6c5b4a2907b65503b2610000000000000000000000000001023374b5d70859bb0c2b9a895806a5746321e0a00000000000000000000000000000000000000000001152737566b8095abc0c4af99846f5443301c0700000000000b21364b60768ba0b5d9ebcbb6a18b76614c36210c0000000b2034485a74899eb4c9deccb9a88c77624d37220d0000000000000000000000000000000a1f334758748a8c8d90949ba3b1b5b7a89e978a7e6d605443301c100000000000000000000000000000011426364758647a8a9fb4bdcdcebdaf9d927d675d4c3d2d1d0d000000000000000000000000000000000000000000000000000f24394e64798e9797979797979795806b56402b1600000000000000000000000000000000000000000000000000000000070d0f18181818181818180f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f455a6f849aafc4d9d4bfa9947f6a543f2a38465763798c9fb4c6d6e8dcc7b19c87725c3b2a180400000000000000000000000000000000000000000000000000000000000000000000000000000d181f2b34373e4a4e53585c5460616160555c5a56524c473b362d1f0f0000000000000000000000000000000000000000000412202e38454b5660676e767e899eb3bcafaab0b4c0cbd4e0d3c5b9a79a84705d4c38230e00000000000000000000000000081c2e3f51667c90a4b5c6b39e8976614b382715020000000000000000000000000000000000000000081d31445570859aafc5c8aa947f6a553625130000000000000b20354b60758aaabbcee2ccb6a18c77614c37220c00000005192b3c5c71869bb1c6dbd6c6a5907a65503b251000000000000000000000000000030604172a3a4b607476787b7f858e9ba3b3b9b4a99f938172604a3e2d1b07000000000000000000000000000008182a3a4a5c677d929fb0c0d1ccbbb49f8c7b655b4a3b2b1b0b0000000000000000000000000000000000000000000000000c21364b61758282828282828282827e68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131a1c2020202020202012100a010000000000000000000000000000000000000003192e43586e8398adc3d8d6c0ab96816b56412c29394a5b6b8095a8b9cce1dec9b49f89745947341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000050d1920222d36393e4336434a4c4b4b443745413c37342a211a0f0100000000000000000000000000000000000000000312222f3e4b566069757d848a929ea7b9ccc3c0c5c8d1ded6ccc2b6a79e8978624d3f2f1c0900000000000000000000000000001120354a6073869cb1c3b8a7947e695645311d0800000000000000000000000000000000000000000b20354b6075899fb4c9bbaa907a65503b2510000000000000081d314455758a9fb4cadfcdb7a28d78624d38230d000000001a2f44596f8499aec4d9d3bda8937e68533e29130000000000000000050b0d1114181c1e1e1d314455606162666a707a859aa2b3c5bab4a095806b5c4a36220d0000000000000000000000000000000c1c2d3e4d5f6c8196a2b4c4d4cebbaa9e8a796359483a29190900000000000000000000000000000000000000000000000a1e334657616d6d6d6d6d6d6d6d6d68604e3a25110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b272e313535353535353527251d120500000000000000000000000000000000000001162c41566b8196abc0d6d8c3ae98836e59432e1b2d3d4c6176899eb3c9dee1cdbaa98c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0f1a2124292d25303536363531262f2b27221f180d070000000000000000000000000000000000000000000011212f404c5c64757f8892999fa9b3b9c5d6d7d5daddd2c9c5b9b3a49c897b655a48352111000000000000000000000000000000071c304354677d92a5b6c5b29d8874604b36261401000000000000000000000000000000000000000f243a4f64798fa8bacab49f8a76614b36210c000000000000011527375e73889eb3c8ddceb8a38e79634e39240e00000002172d42576c8297acc1d7d5bfaa95806a55402b15000000000000000d182022262a2d3133332e2737444b4c4d50545c6474839aa7b8ccbeb49f8c7a644f3c2b19050000000000000000000000000000000f2030414b6073849aa6b7c7d7c8b9a89d8878625846372715020000000000000000000000000000000000000000000003172939464b575757575757575757534e42311e0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2b3943464a4a4a4a4a4a4a3c393023120000000000000000000000000000000000000014293e54697e93a9bed3dbc5b09b86705b3828161f3347586b8095abc1d2e5d7c7a48f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1418131c202121201d141a16120d0b0500000000000000000000000000000000000000000000000b1b2e3f4c5e667a86949da6aeb4bac7ccd6e4e1d4cac7c2b5b1a79e948679655d4b3c2b1903000000000000000000000000000000001325364b6074879cb2c4b7a6927d685443301c080000000000000000000000000000000000000014293e54697e93a9c6c6b19b86715746321e09000000000000001c32475c71879cb1c6dccfbaa48f7a654f3a251000000000162b40556b8095aac0d5d6c1ac97816c57422c170000000000000d1d2b34373b3f43464849433734313537383b3e4a566176899eb3c8cfbcab9a846f5a4834200b00000000000000000000000000000001131d3144556177879da9bacdd6c6b7a69c8676615544311d1506000000000000000000000000000000000000000000000b1b2933364242424242424242423d3a3123130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c3949565c60606060606060524d4130180800000000000000000000000000000000000011273c51667c91a6bbd1ddc8b39d88735645321e17293a4e63788da3b5c9ded1bca6917c67513c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0c0b080100010000000000000000000000000000000000000000000000000000031628394b5d667c8b9ca4b3b8c4c9ced8dee1e6d4c3b7b2aba49c94897f74635b4b3f2e1e0e0000000000000000000000000000000000081d314455687e93a6b7c4b29c8773604b35201100000000000000000000000000000000000005192b3b586e8398adc3c1ac96816c5739281603000000000000051a30455a6f859aafc4dad1bca6917c67513c271200000000152a3f546a7f94a9bfd4d8c3ae98836e59432e19000000000005182b3b484c5054585b5e5e584c483b2b2123262d3846586b8095aac0d9c9b59f8c78624d38220d00000000000000000000000000000000011527374759647a8b9fb4bcccd4c4b5a49a8473604b4433241300000000000000000000000000000000000000000000000b171e212d2d2d2d2d2d2d2d2d28251e130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a56677175757575757575675f4d3625130000000000000000000000000000000000000f24394f64798ea4c7d7dfcab59f8a76604b36210c2135495b71869bb1c6dbd3bea9947e69543f291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324657657b8b9fa9b6c2cbd5dfd6ccc9ccd6cab7a59d958e867f766a60564a3d2e2110000000000000000000000000000000000000011426374b6075889db3c5b6a4917c6751402f1c0900000000000000000000000000000000000b2034485973889db2c8c4a7927c67523d27120000000000000003182d43586d8298adc2d7d3bea8937e69533e29140000000013293e53687e93a8bdd3d9c4af9a846f5a452f1a00000000000b203448596266696d7173736d625948392816111a293a4f647a8fa4c6d7cfbcab937e69533e2914000000000000000000000000000000000009192a3b4a5c687e929eb3b8c5c1c2b4a298826d625042311c0c0000000000000000000000000000000000000000000000030a0c18181818181818181813110b010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475871858a8a8a8a8a8a8a7d675443301c0700000000000000000000000000000000000c22374c61778ca9bacde1cfbcab8d78634d38230e1a2c3d586d8398adc2d8d6c1ac96816c57412c1702000000000000000000000000000000060b0d1113151513100c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364b6175879da9bac7d3e0d7cdc6b9b4b9c6c7b29d878079716961574b45382d1f100200000000000000000000000000000000000000091d324556697f94a7b8c3b09b86715e4c38231000000000000000000000000000000000000d22374d62778ca6b7cbb7a68d78624d38220d0000000000000000152a3f556a7f94aabfd4d5c0ab96806b56412b160000000013283d52687d92a7bdd2dac5af9a85705a45301b00000000000d22374c62777b7f828688888277625745321e0a0c21364b60768ba8bacddac9ad97826d58422d180000000000000000000000000000000000000c1d2e3e4e606b80939ea7aaabacacaca095806b604e3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768b9f9f9f9f9f9f9c8673604a35201200000000000000000000000000000000000a1f34475974899fb4c9dedac9a5907a65503b2510162b40556b8095aac0d5d9c3ae99846e59442f1900000000000000000000000000050b0e19202326282a2a2825211f170c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546a8095a5b6c7d8e1d3c7bab4a89ea8b7c3a28d786b635b544b463931271a0f010000000000000000000000000000000000000000021528384b6176899eb3c6b5a3907b65503e2e1b080000000000000000000000000000000012273c52677c91a7c4c8b29d88735a4835200b000000000000000012273c51677c91a6c5d5d9c3ae99846e593a29170400000012283d52677d92a7bcd2dac5b09b85705b46301b0000000002172c41576c819094989b9d9e988675604b392816091e32455674899fb4c9dbc6b09b86715b46311c000000000000000000000000000000000000001020314251626b7e889194969696969696937d685847331f0a00000000000000000000000000000913191c2020202020202020110f090000000000000000000000000000000000000000030d13152020202020202020200e0c0700000000000000000000000000000000000000000000000000000000000011263c51667b91abbcb5b5b5b5a4917c6651402f1d090000000000000000000000000000000004182a3a5c72879cb1c7dcd2bda8927d68533d281313283e53687d93a8bdd2dbc6b19b86715c3a29170400000000000000000000030d1920222b35383c3d3f3f3e3a373329211f170c030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073889db2c3d4e3d3c3b6a99f95899da5b7a7927c67524a3d3633291d150a00000000000000000000000000000000000000000000000a1e3246576a8095a8b9c1af9a84705c4b37220f00000000000000000000000000000003162838566c8196abc1c3ae98836e593c2b190500000000000000000e23394e63788ea7b8ccdcc7b29c87725846331f0a00000012273c52677c91a7bcd1dbc6b09b86715b46311c000000000010253a4f657a8fa6adb0b3b3a4957f6a5745321e151d31445573899eb3c8dcc7b29d87725d48321d000000000000000000000000000000000000000213233444516068757b7f818181818181818176614c37210c000000000000000000000000000d1b262e31353535353535353526231c11030000000000000000000000000000000000071520282a35353535353535353523211a0f010000000000000000000000000000000000000000000000000000000417293a566b8196abc9d9cad2c2b09b85715e4c38241100000000000000000000000000000000001a2f455a6f849aafc4d9d5bfaa95806a55402b1511263b50667b90a5bbd0dec9b39e89745846331f0a0000000000000000000b171e2b34383c484d5153545453504c473a3633291e170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea6b7cbe1d5c5b6a49c8a8076879db2ab96816c56372d211e170b02000000000000000000000000000000000000000000000000031629394c61778a9eb4c7b4a28f7a644f3d2d1a070000000000000000000000000000091e32455671869bb0c6c7a9937e69543e29140000000000000000000b20354a6074899eb3c8decab59f8b76614c36210c00000012273c52677c91a7bcd1dbc5b09b86705b46311b00000000000b20354a6073889db2c5c8c2b39d8875604b42312726364b60758a9fb4cadec8b39e89735e49341e000000000000000000000000000000000000000005162634424e5660666a6c6c6c6c6c6c6c6c615847331f0a000000000000000000000000091b2b3842464a4a4a4a4a4a4a4a3b382f221100000000000000000000000000000000031525333c3f4a4a4a4a4a4a4a4a4a39362d1f0f0000000000000000000000000000000000000000000000000000000a1f33465871869bb0c6dbe3dfc9b5a3907b6651402f1c0900000000000000000000000000000002182d42576d8297acc2d7d7c2ad97826d58422d180e23384e63788da3c5d5e0ccb9a78b76614c36210c00000000000000000e1b29333c484d565a6266686a6a68656158544c463a33291b120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6c4d4e0ccb8a79c86796a6e8398aeb09b85705544311d0a030000000000000000000000000000000000000000000000000000000b1f3347586c8196a9bac0ae99836e5b4a36210e00000000000000000000000000000b21364b60768a9fb4c9baa98f79644f3a240f000000000000000000071c3043546f8499aec4d9cfbcab907b65503b261000000012273d52677c92a7bcd1dac5b09a85705b45301b0000000000071c3043546a8095a7b8cccbb8a696806b604b44373b424f647a8faabbceddc8b39d88735e48331e0000000000000000000000000000000000000000000816243138454b515556575757575757564c473a29170400000000000000000000000013263849565b6060606060606060504c402f1c090000000000000000000000000000000d20334350556060606060606060605e4a3d2d1a0700000000000000000000000000000000000000000000000000000c21364c61768b9fb4cad9cfcacfc1b09b85705e4c38231100000000000000000000000000000000152a40556a7f95aabfd4dac4af9a856f5a3625130b21364b60768ba6b8cbe0d6c5a38e79634e39240e000000000000000e1e2c39464b5a626b72787b7d7f7f7d7a76706961584c46392f1c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8bdd3dec8b39e8978635b6a7f94a9b49f8a75604b35200b0000000000000000000000000000000000000000000000000000000004172a3a4d62788b9fb4c9b59f8c79634e3c2b19060000000000000000000000000010253a50657a8faabbc9b49f8975604b36200b0000000000000000000013253654697e94a9c2d2dac9ab96806b563d2c1a06000013293e53687e93a8bdd3d9c4ae99846f59442f1a0000000000001325364c6176899eb3c2d2c4b09e937e6a6055515153606d8298adc8d8dbc6b19b86715c46311c0000000000000000000000000000000000000000000006141a2832363c3f41414141414141413733291c0c00000000000000000000000000192e425667717575757575757575665e4c38230f00000000000000000000000000000013283c50616a757575757575757575705b4a36210c000000000000000000000000000000000000000000000000000011263b51667b90abbccfc9bcb4bcc9b4a3907b65503f2e1c0800000000000000000000000000000013283d52687d92a7bdd2dcc7b29c87725443301c091e32455673889eb3c8ddd0bba6917b66513c26110000000000000e1e2c3c4957616c7881878d91929494938f8b857e766b61574c40302518090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8bed3d4bfaa957f6a5950657a90abbaa98e79644e39240f0a0c0f0c090300000000000000000000000000000000000000000000000c203448596d8297abbcbcab98826d5a4835200c00000000000000000000000000152a3f546a7f94a9c8c5af9a85705544311d08000000000000000000000e23384d63788da4b5c9dbc6b19c86715b4935210b0000152a3f556a7f94aabfd4d7c2ac97826d57422d18000000000000081f3346586a7f94a4b5c6cdbcb49f8d7f746b6766686f7e92a0b2c5e6d7c6ae98836e59432e190000000000000000000000000000000000000000000000000a151d20262a2c2c2c2c2c2c2c2c211f170c00000000000000000000000000001c31465b71858a8a8a8a8a8a8a8a7c66503b2611000000000000000000000000000000152a3f556a7f8a8a8a8a8a8a8a8a8a79634e39230e0000000000000000000000000000000000000000000000000003172939566b8096abc9cfbcab9fabbcc1b09a85705d4b37231000000000000000000000000000000010253b50657a90a5c9dadfc9b49f8a75604a35200b1628385b71869bb0c6dbd3bea8937e69533e291400000000000a1b2c3c495a6275818a969ca4a6a8a9a9a8ab9f9b938a8076665e4a433626190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7c8d9cfbaa48f7a654f4b61768b9fb4a8937d68533e28171f2124211e160b0000000000000000000000000000000000000000000005192b3b4e63788c9fb4c9b49f8b78624d3b2a18040000000000000000000000061a2c3d596f8499aec4c0ab95806b5637271502000000000000000000000c2035495a71869cb1c7d8c9b5a48d78634e3929160303162839576c8297acc1d7d5bfaa95806a55402b150000000000000417293a4b6074869ca8b9c8cfbcab9f9587807c7b7e84929cadbecee1cdbaa8927d68523d28130000000000000000000000000000000000000000000000000002090b111517171717171717170c0a04000000000000000000000000000000192e44596e83999f9f9f9f9f9f937d68533e281300000000000000000000000000000012283d52677d929f9f9f9f9f9f9f907b66513b2611000000000000000000000000000000000000000000000000000a1e33465770869bb0c5cab49f8a9fb4c7b4a28f7b65503f2e1b0800000000000000000000000000000e23384d63788dabbccfe2cdbaa98c77624c37220d192e43596e8398aec3d8d5c0ab96806b56412b160100000003162839495a637886969fa9b2b6c3bdbfbfc9bcb4b0a89e95887c6b60544437261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8faabbceceb9a48e79644f465771879cb1ac97826d573929293336393632281b11030000000000000000000000000000000000000000000d2135495b6e8398aebfbbaa96816c5947341f0b00000000000000000000000c2135495b73889eb3c8c2a6917b66513c2611000000000000000000000006192c3c546a7f94a9baced2c2ab95806b5746321e0f091e32455770859bb0c5dad5c5a7927c67523d2712000000000000000b1e32455663798a9eaabac7c9bcb4a59d959190939aa2adbacadcd3c3b49f8a77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162c41566b8196abb5b5b5b5aa95806b55402b1600000000000000000000000000000010253a50657a8fa5b5b5b5b5b5a8937e68533e2913000000000000000000000000000000000000000000000000000c21364b61768b9fb4cac3ae998499a9bac0af9a846f5d4b37221000000000000000000000000000000b20364b60758a9fb5cadfd7c7a48f79644f3a240f162c41566b8196abc0d6d8c3ae98836e59432e1900000000091e3245576378899ca4b4bac7cacac6c0bec0c5cac6b9b4a69d908072605544311d1502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a9fb4cad1bca6917c67513e586d8297adb19c86715746343a464c4f4b46392e2111000000000000000000000000000000000000000000061a2c3d4e64798ea1b3c8b49f8a77614c39291703000000000000000000000e23384e63788da7b8cab6a48c77614c37210c0000000000000000000000000e22374c61778a9fb4c8d9c8b39e8975614b3d2d1d1021364b60768a9fb4c9dfccb8a78e79634e39230e0000000000000002162838495b677d8c9fa9b8c4cfc3b7b2aba6a6a8afb4c0cae0d2c5b6a495806b5847331f0a00000000000000000000000000000b141b1d202020202020202013100b0100000000010a101220202020202020201d1a140a00000000000014293e54697e93a9becacac2ad98836d58432e180000000000000000000000000000000d22384d62778daabbcecacac0ab96806b56412b160100000000000000000000000000000000000000000000000011263b50667b90aabbcebba6907b8b9fb4c9b4a28f7a654f3e2e1b0700000000000000000000000000091d32455673889db3c8ddd1bca6917c67513c271214293e54697e93a9bed3dbc5b09b86705b38281602000005182b3b4b6075869ca7b5c2cdcbc2b6b1aba9abb0b4c0cac4b7b29e958273604b43322010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465770859ab0c5d5c2ad98826d5c4a53697e93a8b49f8b76614b484d58616461574b3f2e1e0e0000000000000000000000000000000000000000000e22364a5c6f8499afc0baa995806b5746331e0a0000000000000000000013283d52687d92a7c5c7b19c87725847331f0a0000000000000000000000000b1f3447596d8298aabbceccb8a795806b5b4a3b2d242e3e51667b90a9bacedec8b39e8974604a35200b00000000000000000a1a2c3d4d5f677d8b9da6b2bec9cac7c0bcbbbdc4c8d0d5cbc2b5a79c8676614c3a2a1804000000000000000000000000000e1c282f32353535353535353528251e1305000005131e25283535353535353535322f271c0e000000000011273c51667c91a6bbd1dac5b09a85705b3727150200000000000000000000000000000b20354b60758a9fb4cadfd8c3ad98836e58432e1900000000000000000000000000000000000000000000000003162839566b8095abc8d5c5a38d798399aec4c0af99846f5c4a36221000000000000000000000000000021528385b70869bb0c5dbd4bea9947f69543f2a1411263c51667b91a6bbd0ddc8b39d88735645321e0900000b203448596c8196a4b5c5d2cbbbaea49c9694959aa2b2b6c3cbbcb0a098826d614f3f2e1a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000317293953687e93a7b8cccab49f8c7a645c4f64798fa9baab8f7a655059626c767975655d4b3c2c1b0b0000000000000000000000000000000000000000071b2d3e50657a8fa2b4c7b39e8976614c3828160200000000000000000417293a576d8297acc2c2ad97826d583a2a170400000000000000000000000004182a3b4e63798c9fb4c5d5c5b49f8b7963594a3e393c4b5c6e8399aec7d8d6c5ae98836e5443301c070000000000000000000f1f30414d5e667b8898a0adb4bac7c6c9ccd6cdc9c7c4b8b3a39b8979635846331c0c000000000000000000000000000b1c2c3a44474a4a4a4a4a4a4a4a3d3a31231301011323303a3d4a4a4a4a4a4a4a4a47433a2c1c0a000000000f24394e64798ea3c6d6ddc8b29d88735544311d080000000000000000000000000000081d31445572889db2c7dddbc5b09b86705b382816020000000000000000000000000000000000000000000000091e32465770859bb0c5ccb8a78b767c91a6b8c7b3a18f7a644f3e2d1b0700000000000000000000000000192e43596e8398aec3d8d6c1ac96816c57412c170f24394e64798ea3c6d6e0cbb8a68b76604b36210b00011527374d62778a9fb4c2d2cebdae9d9486817f80858f9da5b6c2cdbeb2a0947f6a5d4b382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b6175889eb3c1cebbaa9d887a6c6260758a9fb4a9947f69636c77818a8e897b655a493928160300000000000000000000000000000000000000001023374b5d70859bb0c2b9a7947f6a5645321e0900000000000000000a1f33465871879cb1c6c5a8927d68533d281300000000000000000000000000000c2135495b6d8297a7b8cccdbaa99c8777645c524e4f5a647a8d9fb5cadfccb9a7927c67523625130000000000000000000001122330404d5d6576828f989fa9acb1b4b9c6bab4b2aca69e948578635b493a2917000000000000000000000000000014283a4b575d6060606060606060524e41311e0b0a1e30414d5260606060606060605c574a3a2714000000000c21374c61768ca8b9cddfcab49f8a75604b36200b0000000000000000000000000000011426375a70859aafc5daddc8b39d88735645321e0900000000000000000000000000000000000000000000000c21364b61768a9fb4c9c8b39e887374889eb3c8bfae99836f5c4a36220f00000000000000000000000001162c41566b8196abc0d5d5c3ae99846e59442f190c21374c61768ca8b9ccd5d5c4a38d78634e38230e00081d3144556c8196a9bacdd9c5b19f947f736b696b707a879ca4b6c6cfbeb49f8c7a645645311d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324657697e93a3b5c5c8b7a69d8b81787170869bb0ae98837179818a969fa79e8978635746321e0e0000000000000000000000000000000000000000081c2e3f51667c90a4b5c5b39d8875604b37261401000000000000000c21364c61768b9fb5cab8a78e78634e39230e0000000000000000000000000000061a2c3d4c6177899eb3bdcec7b6a59c877a6e6764656a78879dabbccfd6c6b39e8975604b36210b0000000000000000000000041222303f4b58616d7a828a92979c9ea8a1a99f9c9791887f75635a493d2c1b0b00000000000000000000000000001b2f445769727575757575757575685f4e3a251010253a4d5f677575757575757575726857432f0c000000000a1f33475874899eb4c9decfbcab8d78624d38230d000000000000000000000000000000182d43586d8298adc2d7e0cbb8a68b76604b36210b000000000000000000000000000000000000000000000010263b50657b90aabbcec5b09b86706b8096abc0c7b3a18e79644e3d2d1a0700000000000000000000000014293e54697e93a9bec0c0c0b19b86715c3929160a1f33475874899eb4c0c0c0baa5907b65503b2610000b20354b6074899eb3c7d7d3c2ac97816d605454565c6477869ca8b9cdcfbcab9c8674604b382816030000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394b6073859ba7b8c5c4b7a99f968d8681859bb0b39e89868e979fa9b4b8a79c8675614b3c2c190600000000000000000000000000000000000000001120354a6073869cb1c3b8a6937e685544311d080000000000000011263b50667b90abbcc8b39e8974604a35200b0000000000000000000000000000000f1f344759677d929fb1bfd0c3b6a59d8d837c797a7f899da5b7c9daccb9a896806b5645321e090000000000000000000000000412212f3a474c5c646d777d8287898b8c8b8987827c756a6056493c2c1f0e0000000000000000000000000000001d32475d72878a8a8a8a8a8a8a8a7d68523d281312283d52677d8a8a8a8a8a8a8a8a86725c3a2a180400000004172a3a5c71879cb1c6dcd9c9a5907a65503b2510000000000000000000000000000000162b40556b8095aac0d5e7d5c4a38d78634e38230e0000000000000000000000000000000000000000000003162838556b8095aac8d8c2ad98836d63798da2b4c8bfae99836e5b4a36210f00000000000000000000000011273c51667c91a6ababababab9e89735746321e0a17293a5c71869cabababababa8927d68533d2813000f253a4f647a8fa7b8ccdecab6a48d78624d43363e4b5963788a9eb4c4d5c9b6a4937e695645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1d3144556278899ea7b6c2c7bab4aba39b979ba3b5b8a79e9ca4acb4bac7c5b5a498836e5a4935200c0000000000000000000000000000000000000000071c304354677d92a5b6c4b29d8774604b36251300000000000001142637556b8095aac9c4ae99846f5443301c0700000000000000000000000000000004182a3b4d5f6c8197a1b3bfcdc3b6ab9f99928e8f959ea7b7c3d4d0bfb49e8977614c382816030000000000000000000000000003111c2a333e4b4f5961676d717475777674726d6760574b45382c1e0e000000000000000000000000000000001a30455a6f859a9f9f9f9f9f9f957f6a55402a1510253a50657a8f9f9f9f9f9f9f9f89745847331f0a000000001a2f44596f8499aec4d9d2bda7927d68523d281300000000000000000000000000000013283d53687d92a8bdd2e5d0baa5907b65503b261000000000000000000000000000000000000000000000091e32455670859ab0c5d4bfaa947f6a5b6f849aafc3cab59f8c79634e3d2c1a0600000000000000000000000f24394f64798e959595959595958b76614b36210c1a2f44596f849595959595959595806b55402b160014293e54697e93a9c5d5dcc7b19c87725a4935252e3b495a697e93a6b7cbd3c2b39e8875604b36210e00000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637485a647a899ca4b2bec8c9c1b5b0acb0b5c1c5b8b3b1b5c2c9cdcdc1b4a79e8978634d38230e0000000000000000000000000000000000000000001325364b6074879cb2c4b6a5927d675443301c070000000000081d3144556f859aafc4c8aa947f6a5536251300000000000000000000000000000000000c1d30414b60738399a1b0bdcac9bcb5aea7a3a4aab3b8c5d4cfc1b3a1937e695847331a0a000000000000000000000000000000000c171f2e373b474c52575c56606161575d57524b453932281a0e0000000000000000000000000000000000182d42586d8297adb5b5b5b5ac97826d57422d180d23384d62788dabbcb5b5b5baa88c77614c37220c00000002172c42576c8197acc1d6d4bfaa957f6a55402a1500000000000000000000000000000010263b50657b90a5c9daecd2bda8937d68533e2813000000000000000000000000000000000000000000000b21364b60758a9fb4c9d6c6a6917b6651667c91a5b7cabcab98836e5b4935210e00000000000000000000000c21364c617680808080808080808076614c37210c12273c51677d80808080808080807d66513c271100172c41576c8196acc1d6d8c3ae98836e593c2c191d2c3c4b6075889db3c8ddccb8a7927d68533c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3c4a5c64798698a0b0b4c1cac9c6c1c6c9d2d5ccc8c6c9d2cbc6bab4a39b897b645a4935200c000000000000000000000000000000000000000000081d314455687e93a6b7c3b19c8673604a35201100000000000b20354b6075899eb4c9bbaa8f7a65503a2510000000000000000000000000000000000000131d314455607483969eb2b6c3cacac3bcb9babfc8ccd4cbbfb3a3998372604a3a2a1800000000000000000000000000000000000004101b222a34373d4238454b4c4b4639423c3632281e160a000000000000000000000000000000000000152a40556a7f95aabfcacac4af9a856f5a3626140b20364b60758a9fb4cacad7c6a48e79644f39240f00000000152a3f546a7f94a9bfd4d7c2ad97826d58422d180000000000000000000000000000000e23384d63788dabbccfe3d5c0aa95806b55402b160000000000000000000000000000000000000000000010253b50657a90a9bacecdb9a88d78624d6074879db2c7c9b49f8c79634e3c2c1906000000000000000000000a1f334658616b6b6b6b6b6b6b6b6b615847331f0a1024394d5f676b6b6b6b6b6b6b6b665e4d39240f00192e44596e8399aec3d8d6c0ab96816b56412c160e1d3245566a7f94aac3d3d5c5b09b85705a4835200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2d3e4a5b637582909ba3afb4bbc8c5c7c9cdd7e0d2c9c6c4b8b3a89f948579645c4b3c2c1906000000000000000000000000000000000000000000011426374b6075889db3c5b5a4907c66513f2e1c08000000000f24394e64798ea8b9cab49f8a76604b36210b000000000000000000000000000000000000021527374556607381919da5b2b6c3c5c8ccd6cecac7c3b7b2a1998575615443301c0c0000000000000000000000000000000000000000070c181f22282d273136373632282d27211e160a030000000000000000000000000000000000000013283d52687d92a7bdd2dcc7b29c87725443301c081d31445573889db2c8ddd1bba6917c66513c27110000000012273c52677c91a7bcd1dac4af9a856f5a3626140100000000000000000000000000000b20364b60758a9fb5cadfd8c2ad98836d58432e1800000000000000000000000000000000000000000002162838556a8095aac7d8c9b49e8974604a556a7f94a9bacdbcab98826d5a4935200e000000000000000000000417293a464c5656565656565656564c473a2a17040a1d30404d515656565656565656514d40301d0a001a2f445a6f8499afc4d9d5bfaa95806a55402b15021528384d63788da4b6caddc9b5a38d78624d38220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202d3d4957616e7b8591999faaacafb2b4bac7d2c1b5b0a9a69d958a7f73635b4b3e2e1e0e0000000000000000000000000000000000000000000000091d324556697f94a7b8c2b09b85705d4b37230f0000000014293e53697e93a8c6c6b09b86715745321e0900000000000000000000000000000000000000091928384555606c7c87939da5abafb3b8c5bbb4b2ada59d9283756157463625130000000000000000000000000000000000000000000000040b0c1218151d2022211e1618120b090300000000000000000000000000000000000000000010253b50657a90a5c9d9dfc9b49f8a75604b35200b1527375b70859bb0c5dad3bea9937e69543e2914000000000f253a4f647a8fa4c7d7dcc7b29d87725443301c080000000000000000000000000000091d32455673889db3c8dddac5b09a85705b382715020000000000000000000000000000000000000000091e32455670859aafc5dac5b09b857054434c61778a9fb4c9c9b49f8c78634d3c2b1906000000000000000000000b1b29333640404040404040404037332a1c0c0000122230393c40404040404040403c3930221200001a2f445a6f8499afc4d9d5bfaa95806a55402b15000a2135495b72879cb2c7dcd1c1a8937e68533e2913000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101f2c39464b5d65707c848b91969a9d9fa9b7c3b5a39b948f8880776a6055493c2e2010000000000000000000000000000000000000000000000000021528384b6176899eb3c6b4a28f7a654f3e2d1a07000005182a3b586d8398adc2c1ac96816c573928160300000000000000000000000000000000000000000a1a2837444b5e66757e878f969a9ea7a1aa9f9c9791877d6e615746392918080000000000000000000000000000000000000000000000000000000002090b0c0c090300000000000000000000000000000000000000000000000000000d23384d62788dabbccfe2cebaa98c77624d37220d192e43586e8398adc3d8d6c0ab96816b56412c16010000000d22374d62778ca9bacddfc9b49f8a75604b35200b0000000000000000000000000000021528385b70869bb0c5dbddc8b29d88735645311d0900000000000000000000000000000000000000000b21364b60758a9fb4c9d7c2ac97826d573647586d8297adc1cebbaa97826d5a4835200d00000000000000000000000b171f212b2b2b2b2b2b2b2b2b211f170c00000004121d24272b2b2b2b2b2b2b2b27241d12040000192e44596e8399aec3d8d6c0ab96816b56412c160106192c3c576d8297acc2d7d8c2ad98826d58362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b29323f4b505e666f777c8185888a8fa5b7b09b857f7a746b62594b44372c1e1002000000000000000000000000000000000000000000000000000a1e3246576a8095a8b9c0af99846f5c4a36210e00000b1f34485972879db2c7bfa7917c67523c2712000000000000000000000000000000000000000000000a192731404c566069747a8085898b8c8c8a87827c74675f4b4639291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cadfd8c7a48f7a644f3a250f162b41566b8096abc0d5d8c3ae99836e59442e19000000000b20354a60758a9fb4c9dfcebbaa8c77624d37220d000000000000000000000000000000192e43586e8398adc3d8dfcab49f8a75604b36200b000000000000000000000000000000000000000010253a50657a8fa9bacdd3bea9937e69543e3a4f64798ea3b4c8c8b49f8b78624d3c2b19050000000000000000000000040a0c1616161616161616160c0a040000000000000a10121616161616161616110f0a00000000182d42576d8297acc2d7d7c2ac97826d57422d18000014293e54697e93a9bed3dcc6b19c87715443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2f38404c515861676c707274879db2ac96816c6460544c483b3126190e000000000000000000000000000000000000000000000000000000031629394c6176899eb4bcb3a18e79644e3c2c1906000d22374c62778ca5b6c4b3a18c77624d37220d000000000000000000000000000000000000000000000009151d2f38454b5460656b707375777675726d6660554d4132291b0b0000000000000000000000000000000000000000000006080b0b0b0b0a0600000000040a0c11141513110d0b05000000000000000000000000000000000000081d31445573889db2c8ddd1bca7927c67523d271214293e53697e93a8bed3dbc6b09b86715b38281603000000071c30435472879cb2c7dcd8c8a48f7a644f3a250f000000000000000000000000000001162b41566b8096abc0d5e3cfbcab8d78634d38230e0000000000000000000000000000000000000002152738556a7f95aac7d7d5c4a5907a65503b364a5c70859bb0c4cebbaa97816c5a4834200d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd4dac4af9a856f5a3a2a18040010263b50657b90a5bad0dec9b49f8975604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232f383a474c52575a5d6e8399aeb09b8570564b4336342b1d140900000000000000000000000000000000000000000000000000000000000b1f334758687e929fabafad98836e5a4935200c0011273c51667c91a6b1afa699846f594834200b00000000000000000000000000000000000000000000000001121a283236434b4f565a56606161605558514b4437301e160b0000000000000000000000000000000000000000000b141b1d202020201f1b0f0d070c181f2226292a2927221f180d0801000000000000000000000000000000021527375b70859bb0c5dad4bfa9947f6a543f2a1511263c51667b91a6bbd0ddc8b39e88735645321e09000000001325365a6f859aafc4dad1bca7927c67523d271200000000000000000000000000000013293e53687e93a8bdd3ebd9c9a5907a65503b251000000000000000000000000000000000000000091d3145566f859aafc4dacbb8a68c77614c372d3e52677d92a6b7cbc8b49f8b78624d3b2b18050000000000000a141a1c202020202020202013110b0200000000010a101220202020202020201d1b150b0000000000000012273c51677c91a6c3d4ddc8b39d88735947341f0a000f24394e64798ea3b9cee1cdbaa98c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121d242a33373c4145546a7f94a9b49f8a75604b362620180d0100000000000000000000000000000000000000000000000000000000000004172a3a4e606a7f8d969a9b9b8b78634d38230e00162c41566b81969b9b9a958878624d3b2b190500000000000000000000000000000000000000000000000000000a161e2630353a4138454b4c4c4b44373c3531271913030000000000000000000000000000000000000000000e1c282f3235353535343024211b222a33373c3f3f3e3c37342a201d1509000000000000000000000000000000182e43586d8398adc2d8d7c1ac97826c57422d170f24394e64798ea3c6d6e0cbb8a68b76604b36210b00000000182d42576d8297acc2d7d4bfa9947f6a543f2a1500000000000000000000000000000011263b51667b90a6bbd0e5d2bda8927d68533d2813000000000000000000000000000000000000000b20364b60758a9fb4c9ddc8b39d887359473420364b6075889db3c8cebaa996816c594834200c00000000000e1c272f32353535353535353528261f1406000005121d242735353535353535353230281d0f0000000000000d22384d62778da5b7cadfcbb7a68c77614c37220c000d23384d62788da2b7cde9d7c7a28d78624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090c181f22272c3b50657a90a7b8a98e79644f39240f050000000000000000000000000000000000000000000000000000000000000000000c1c31424f616a7981858686867f69543f291400182d42576d81868686848076625a49351d0d000000000000000000000000000000000000000000000000000000000208141c20252b283236373735312727201d1509000000000000000000000000000000000000000000000b1c2c3a44474a4a4a4a494639362d363a474c51545553514c473b35312719120200000000000000000000000001162b40566b8095abc0d5d9c4af99846f5a442f1a0c21374c61768ca8b9cde1d5c5a38d78634e38230e00000000152a40556a7f95aabfd4d7c1ac97826c57422d170200000000000000000000000000000e24394e63798ea3c5d5e8d5bfaa95806a55402b150000000000000000000000000000000000000010253a4f657a8fa9bacddac4af9a846f5a3a2a1d3145566a8095aabbcec7b49f8a77624c3b2a18040000000a1c2c3943474a4a4a4a4a4a4a4a3e3a3124140201122330393c4a4a4a4a4a4a4a4a48443a2d1d0000000000000b2034485a72879db2c7dcd4c4a7927d67523b2a18040d22374c62778ca1b7cce1cdb8a38e78634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1220364b6075899ea7a4937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000132432434f5b636c6f71717169614f3b271200152a3f52636d7171716f6b6158493c2c190000000000000000000000000000000000000000000000000000000000000001080b1016151d202221201d15110b0801000000000000000000000000000000000000000000000014283a4b575d606060605f5b4e4a3e4a4f586166696a68666259534b44372f1d150a00000000000000000000000013293e53687e93a8bdd3dcc6b19c87715c3a2a180a1f33475874899eb4c9ded0baa5907b65503b26100000000013283d52687d92a7bdd2d9c4af99846f5a442f1a0000000000000000000000000000000c21364b61768ba7b8cce0d7c2ad98826d58432d1800000000000000000000000000000000000002152737556a7f94aac7d7d6c1ab96816c56412c1527384d62778b9fb4c9cdbaa996816b5947341f0c0000001427394a575c6060606060606060534e42311f0b0a1d30414d5160606060606060605d584b3a1808000000000005192b3c566c8196abc1d1d8c3ad98836e5947341f0e0d22384d62778da2b7cce8d6c6a28d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d324556667c898f8f8f826d58422d180300000000000000000000000000000000000000000000000000000000000000000000061525323d494e575a5c5c5c544f4332200c000f23354552575c5c5c5a554c473a2c1e0e00000000000000000000000000000000000000000000000000000000000000000000000002090b0c0c0b08010000000000000000000000000000000000000000000000000000001b2f44576972757575757470645c4b5c646f777b7e7f7e7c77706860554c4032281a0b000000000000000000000011263b50667b90a5bbd0dec9b49f89745947341f0a172a3a5c71879cb1c6dcd2bda8937d68533e28130000000010253a50657a8fa5c9d9dcc6b19c87715c3a2a180400000000000000000000000000000a1e32465773899eb3c8dedac5af9a85705a372614010000000000000000000000000000000000081d3144556f849aafc4d9dac9a8927d68533d2813203448596e8398adc1d2c7b49f8a77614c3a2a170400001a2f43576871757575757575757568604e3a26111024394d5f6775757575757575757269583626140100000000000f243a4f647a8fa3b5c9dec9b49f8a77614c3c2c1a0f24394e64798ea3b9cee1ccb9a88c76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384c5e6675797a7a79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000007151f2c363941454646463f3b3225140300061727353f42464646454037332a1c0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72878a8a8a8a89857a64606b7a848b91949493918b857d74665e4b4538291b0b000000000000000000000e23394e63788ea3c5d5e1cdbaa88c77614c37220c1a2f445a6f8499afc4d9d5c0aa95806b55402b16000000000d23384d62788dabbccfdec9b49f89745947341f0a0000000000000000000000000000031629395c71869bb1c6dbddc7b29d88725544311d0800000000000000000000000000000000000b20364b6075899eb4c9decfbcab8f79644f3a240f182b3b4f657a8fa3b5c9cdbaa895806b5847331f0c00001c32475c71868a8a8a8a8a8a8a8a7e68533e281312273c51677c8a8a8a8a8a8a8a8a87725443301c0800000000000d22364a5c70859bb0c1d2cdbaa995806a5b4938291f273851667c91a6bbd1dec9b49e89745847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2f404c5760646565635b4a36210c00000000000000000000000000000000000000000000000000000000000000000000000000010f1a21232c3031313129272014070000000917232a2d3131312f2b211f170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b141413110f0c0a03000000000000000000000000000000000000001a30455a6f859a9f9fa89e9b877373808c999faba9aaa8ab9f9b92877c6c60564639291a0a0000000000000000000c21364b61768ba7b8cce0d7c6a48e79644f39240f172d42576c8297acc1d7d7c2ad98826d58432d18000000000b20364b60758a9fb4cadfcdbaa88c77614c37220c000000000000000000000000000000192e44596e8399aec3d8dfcab49f8a75604b35200b00000000000000000000000000000000000f253a4f647a8fa8b9cdd5cab59f8b76614b36210c0d23374b5d71869bb1c5d5c6b49e8a76614c3a291704001a2f445a6f84999f9f9f9f9f9f95806a55402b150f243a4f64798f9f9f9f9f9f9f9f8a75604b35200b0000000000071b2e3e51677c91a3b5c8d7c7b49e8a796356463a333545566b8196abc0d6dac5b09a85705b3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f39454b4f4f4f4e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e171a1c1c1c14120c030000000000060f15181c1c1c1a160c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202929282625211e160c0a0400000000000000000000000000000000182d42586d8297adc6b9b4a5927d83969faab4bcc9bfc9bcb5b0a59d908174615746382816020000000000000000091e32465773889eb3c8ddd1bca6917c67513c2712152a3f556a7f94aabfd4dac5af9a85705a37261401000000081d31445573889db2c8ddd7c6a48e79644f39240f000000000000000000000000000001172c41566c8196abc1d6e2cebbaa8d77624d38220d0000000000000000000000000000000001152737546a7f94a9c6c0c0c0b29c87725746321e09081c2e3f53687d92a7b8c9c0b9a895806b5846331f0a00172c42576c8197acb5b5b5b5ad97826d58422d180d22374c62778ca9bab5b5b5bbaa8c77624d37220d0000000000001024394d5f70859baabbcecdb9a89b857461584c46494e6074879db2c7ddd1c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111b2832363a3a3a39362d1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530353f3f3d3c3a363229211f170c020000000000000000000000000000152a40556a7f95aabfcdc3b49f8a98a0b4bbc8bebec1c8cbcac3b7b29f978475615645321e140100000000000000031628395b71869bb0c6dbd3bea9947e69543a291712283d52677d92a7bcd2dcc7b29d87725544311d08000000021527375b70859ab0c5dad1bca6917c67513c271200000000000000000000000000000014293e54697e93a9bed3ebd9c8a58f7a65503a251000000000000000000000000000000000081d3144556f8499abababababaa99836e5939281603001121364b6075899eababababab9e8976614c36210c00152a3f546a7f94a9bfcacac4af9a856f5a45301a0b20354a60758a9fb4c9cad8c8a48f7a644f3a250f0000000000000a1d30414f647a8c9fb4bfd0c6b5a39a84766861585b636c8095a5b7cbdcc8b4a28e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2124252524211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e1014141414141414141414141412100a010000000000000000000000000000050b0d141414141414141414141414140c0a04000000000000000000000000132536434a545453514f4b463937332a1e160a0000000000000000000000000013283d52687d92a7bdd2cdbaa89fa8b2b6b1aca9a9acb3b7c4cfcabdb1a29a8474604b43321f0f0000000000000000192e44596e8399aec3d8d8c3ad98836e5847331f10253a50657a8fa5c9d9dfcab49f8a75604b35200b00000000182e43586d8398adc2d8d3bea9947e69543f291400000000000000000000000000000011273c51667c91a6bbd1e6d2bca7927d67523d2812000000000000000000000000000000000b20354b60748995959595959595907c66513c27110000091e324556677d8d959595959595957f6a55402a150012273d52677c92a7bcd1dcc7b19c87725c3a2a17071c30435472879db2c7dcd1bca7927c67523d2712000000000000001222364a5c6b8095a1b3c1d1c1b4a29a877d7673747881959eafc3d4cfbfaf9a84705c4a36220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0f10100e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23262a2a2a2a2a2a2a2a2a2a2a2a28251e13050000000000000000000000000d1820222a2a2a2a2a2a2a2a2a2a2a2a2a221f180c00000000000000000000071c3043546069696866646157554c473a32281a0c00000000000000000000000010253b50657a90a5c9d9d7c6bab4b6b2a49c969493979da6b4bcc9cec0b4a298826e614f3d2c1a0600000000000001162c41566b8196abc0d6dfc9b49f8a76614c38281623384d62788dabbccfe2cebbaa8d77624d38220d00000001162b40566b8095abc0d5d6c1ac96816c57412c170200000000000000000000000000000f24394f64798ea4c6d6e9d4bfaa957f6a55402a15000000000000000000000000000000000c22374c617680808080808080807b665e4c39240f0000031628384d5f677a7f8080808080807f69543f2a140010253a4f657a8fa4c8d8dec9b49f89745847331f0a1325365a70859aafc5dad4bfa9947f6a543f2a1500000000000000071b2d3e4b6073839aa3b4c0cec0b4a59d928b88898d979fafbcccd3c3b3a1907b65503e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f383b3f3f3f3f3f3f3f3f3f3f3f3f3d3a30231301000000000000000000000d1d2b34373f3f3f3f3f3f3f3f3f3f3f3f3f37342a1c0c0000000000000000000b20354a60727f7e7d7b7a76706a61584b4538291c0c00000000000000000000000d23384d62788dabbccfe3d7cab6a59d9086817f7e8188959fabbbc8d0c0b2a0947f695b493521120000000000000014293e54697e93a9bed3e2cdbaa9947e695645321e20364b60758a9fb4cadfd8c8a48f7a654f3a25100000000013283e53687d93a8bdd2d9c3ae99846e59442f190000000000000000000000000000000c21374c61768ca8b9cde1d7c2ac97826d57422d18000000000000000000000000000000000a1f334758616b6b6b6b6b6b6b6a655d4c40301d090000000a1a30414d5c646a6b6b6b6b6b6b69614f3c2712000d22374d62778caabbcee1cdbaa88c76614c37210c182d43586d8298adc2d7d6c1ac97816c57422c170200000000000000101d3144556176859aa2b1bdcac3b7b2ab9f9e9ea8acb1bdccd1c3b6a499836e5d4b37201000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b150c0a04000000000000000000000000000000000000040a0c0e0e0e0e0e0e0d0b05000000000000000000000001080b0b080100000000000000000000000000000000000000000000091c2f3f4c50545454545454545454545454524d41301e0a00000000000000000005182b3b484c545454545454545454545454544c473a2a18040000000000000000071c30435473889492918f8a857f766a6056463a291b0b000000000000000000000b20364b60758a9fb4cadfdcc7b29d877b716c69696c747f8d9faabbcecfbeb49f8b79634e402f180800000000000011273c51667c91a6bbd1ead7c7b39d8875604b3d2d1d31445573889db2c8ddd1bca7927c67523d27120000000011263b50667b90a5bbd0dbc6b19b86715c3a29170400000000000000000000000000000a1f33475874899eb4c9dedac4af9a856f5a3626140100000000000000000000000000000004182a3a474c5656565656565655504b3f30221200000000001323303e4a4f55565656565656544f4332200c000b20354b60758a9fb4c9dfd7c6a38e79644e39240f162b40556b8095aac0d5d9c4ae99846f59442f1a0000000000000000011426374658617684979fb2b6c3cac9bcb5b3b4b9c6c5cecac0b4a59c8675614c3f2f1c02000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202a211f170c020000000000000000000000000000000c171f212323232323232220190d000000000000030a0c16141c20201c1417110b090200000000000000000000000000000000000e23384c5d65696969696969696969696969675f4d3a250a0000000000000000000b203448596269696969696969696969696969615947341f0a0000000000000000001325365b70859ba8a6aa9f9a94897f7461584639291703000000000000000000081d31445573889db2c8ddcdb8a28d78655d57545456606a7d8c9fb4bfd0cdbaa99a85705e4c3625130000000000000f24394e64798ea3c6d6e9e0cbb7a6957f6a5b4a3a2a27375b71869bb0c6dbd3bea9937e69543e2914000000000e23394e63788ea3c5d5dec9b39e89745846331f0a000000000000000000000000000004172a3a5c71879cb1c6dcdcc7b29c87725443301c08000000000000000000000000000000000c1c2a333740404040404040403b372f21120400000000000513202e363a404040404040403f3c3225150300081c30435472879db2c7dcd0bba6907b66513b261113283e53687d93a8bdd2dcc6b19c87715c3a29170400000000000000000919293a4658617481909da5b1b6c2c5c8c8c9cac8c6c3b6b2a29a877963574633211100000000000000000000000000000000000000000000000000000000000000000000000000000000000919273136403633291d150a000000000000000000000000000c1c29333738383838383838342b1d0d000000000b171e212c2630353530262d26201d150a0100000000000000000000000000000010263b50657c7f7f7f7f7f7f7f7f7f7f7f7f7d67523828150200000000000000000d22374c62777f7f7f7f7f7f7f7f7f7f7f7f7f77614c37220c000000000000000000182d43586d8298adc2bbb4b0a89e958476615746331e11000000000000000000021527375b70859bb0c5daceb9a48f79644f3f3f38454b5f687e93a1b3c8d7c7b4a2917c665443301c0700000000000c21374c61768ca8b9cde1e7d5c4b49f8b796358473a2e445a6f8499afc4d9d4bfaa957f6a55402a15000000000b21364b60768ba6b8cbe0ccb9a78b76614c36210c0000000000000000000000000000001a2f44596f8499aec4d9dfc9b49f8a75604b35200b00000000000000000000000000000000000c181f222b2b2b2b2b2b2b2b25231c11030000000000000002101b22242a2b2b2b2b2b2b2a272015070000011426365a70859aafc5dad3bda8937e68533e291311263b50667b90a5bbd0dec9b49e89745847331f0a0000000000000000000b1b293a4656606c7c87939ca4aaafb3b8bcb4b3b0aba49c928476635b49392917030000000000000000000000000000000000000000000000000000000000000000000000000000000002152737444b554c463a31271a1204000000000000000000000417293a474c4e4e4e4e4e4e4d483c2b190500000b1b2933364136434b4b4336423c3632281c14080000000000000000000000000000152b40556a8094949494949494949494949488735645321d0900000000000000000d22384d62788d9494949494949494949494907b65503b2610000000000000000000142a3f54697f94a4a5acb4bbb9b3a29a8675614c3f2f1c08000000000000000000182e43586d8398adc2d8d1bca7917c67523c2a2731414e606e8399aabbced1c0b19b8673604a35200b00000000000a1f33475874899eb4c9def2e2cebaa99c877661584b3f3f5a6f849aafc4d9d6c0ab96816b56412c1600000000091e32455773889eb3c8ddd6c5a38e79634e39240e000000000000000000000000000002172c42576c8197acc1d6e2cebaa98c77624d37220d000000000000000000000000000000000000040a0c1616161616161615100e080000000000000000000000070d0f1516161616161614120c0300000000182d43586d8298adc2d7d5c0aa95806b55402b160e23394e63788ea3c5d5e1ccb9a88c76614c37210c000000000000000000000c1c2938454b5e66747e878f959a9ea7ab9f9e9b9690877d736158493d2c1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606a61584b4538302214060000000000000000000a1f33475861636363636363625a4834200b0003172939464b565b546060545c57514b45383026180b0000000000000000000000000013283d53687d92a8a9a9a9a9a9a9a9a9a99f8a75604b36200b00000000000000000b20354b60758a9fa9a9a9a9a9a9a9a9a9a8937d68533e28130000000000000000000c22374c6177868d90979faabbc0b4a497816d5d4c38230e000000000000000001162b40566b8095abc0d5d4bfa9947f6a543f2a151d31424d62788b9fb4c9dfc9b5a3907b6550392916030000000004172a3a5c71879cb1c6dcf1ead8c7b6a59b8576645d53515d72879cb2c7dcd5c0ab95806b56402b1600000000031628395b71869bb0c6dbd0bba6917b66513c2611000000000000000000000000000000152a3f546a7f94a9bfd4ead8c7a48f7a644f3a250f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd5d7c2ad98826d58432d180b21364b60768ba7b8cce0d6c6a38e79644e39240f00000000000000000000000c1a2731404c566069737a8085888a8b8a8886807b74676054473a2c1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60737f766960564d403124140200000000000000000c21374c617678787878787878624d38220d000a1e334657616b7074757573716c6660564b4336291b0c00000000000000000000000010263b50657b90a5c9bebebebebeb8b8bcab8d78634d38230e0000000000000000081c30435472879cb1c1b8b8bebebebebeaa95806b55402b160000000000000000000a1f3447596173787b818c9fabbcc2b19f907b65503c2b1906000000000000000013293e53687e93a8bdd3d7c1ac97826c57422d17142034485a6d8297acc2d3d2c1ad98826d5746321e0a00000000001a2f44596f8499aec4d9eee4d6cdc3b5a39b877a6f68676a7b90a5b6cadfd9c8a8937e69533e29140000000000192e43596e8398aec3d8d3bea8937e69533e291400000000000000000000000000000012273c52677c91a7bcd1e6d1bca7927c67523d271200000000000000000000000000000000000b151b1d20202020202020202020202020202020202020202020202017150f0500000000000000000000000013283d53687d92a8bdd2dac4af9a856f5a45301a091e32455773899eb3c8ded0bba6917b66513c26110000000000000000000000000a151d2f38454b5460656b707375767573716b6560554b43362a1c0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e52677d92897e74665e4e42311f0b000000000000000014293e54697e8d8d8d8d8d8d846f5a45301a000c21364b61758086898a8a8886827c75686054463a291c0c00000000000000000000000e23384d63788dabbccfcebdb1aca3a3a3a18e79634e39230e000000000000000001142636576d8297a3a3a3a3acb1bdcec2ad98836d58432e1800000000000000000004182a3a47546063656c7c8d9fb5cabdaf9a846f5a4835200b000000000000000011263b50667b90a5bbd0d9c4af99846f5a36251305192b3c4e63798ea4b6c9dec9b49f8a76614b36210c0000000002172c42576c8197acc1d6e9d6c6b9b4b2b5a59c8d847e7c808a9eb4c3d3e2cebbaa917c66513c26110000000001162c41566b8196abc0d6d6c0ab96816b56412c16010000000000050b0d10101010101010253a4f647a8fa4c7d7ead4bfa9947f6a543f2a1510101010101010100e080000000000000f1d2830333535353535353535353535353535353535353535353535352c29221708000000000000000000000010263b50657b90a5c9dadcc7b29c87725d3a2a18041628395c71869bb1c6dbd3bea8937e69533e29140000000000000000000000000002121a273136434a4f555a55606160555b56504b44373026180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c70859b9e94877c69604e3b2611000000000000000014293e54697e93a3a3a3a39a846f5a45301a000b20364b60758a9b9ea89f9e9c9791877d736158463a291808000000000000000000000b20364b60758a9fb5cac5b19f978e8e8e8d836e5b4a36210c0000000000000000000d22374c6277858d8e8e8e979fb1c4c5b09a85705b372715020000000000000000000c1c2a36434b4e505e6d8298adc5cab49f8b78624d38230d00000000000000000e23394e63788ea3c5d5dcc7b19c87725443301c070d2135495b71869cb1c6dccdbaa9907b66513b26110000000000152a3f546a7f94a9bfd4e1cdb9a89e9da5b6ab9f999391959ea8b9cde1dfcab49f8b76614c36210c000000000014293e54697e93a9bed3d8c3ae98836e59432e1900000000000d1920222525252525252525374c62778ca9bacde2d7c1ac97826c57422d252525252525252525221b10030000000b1d2d3a44484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a413e34271705000000000000000000000e23384e63788dabbccfdec9b49f89745847331f0a192f44596e8499aec3d9d5c0ab96806b56412b160100000000000000000000000000000a151d2530353a4037444b4c4b4437413b3531261c140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364f64798ea3b3a59d917e69533e2914000000000000000014293e54697e93a9b8b8af9a856f5a45301a00081d31445571869cb1b9b4b3b1aca59d92837661584636261401000000000000000000091d31455673889db3c8c2ac9782797979776e65543d2d1a070000000000000000000b1f3447596272777979798197acc1c8b29d88735544311d08000000000000000000000c1826303538404f64798ea7b8ccbcab947f6a543f2a1500000000000000000c21364b61768ba7b8ccdec9b49f8974604a35200b061a2c3d556a8095aabfd5d7c7ab96816c56362614010000000012273c52677c91a7bcd1dec9b49e8a879da6b6b5afa8a6aab4b9c6d6e1d1c0b09a85705846331f0a000000000011263c51667b91a6bbd0dbc5b09b86705b392816030000000d1d2b34373a3a3a3a3a3a3a3a3a4a60758a9fb4c9dfd9c4af99846f5a443a3a3a3a3a3a3a3a3a3a372e211000000015283a4b585d60606060606060606060606060606060606060606060606057514534220f000000000000000000000b21364b60768a9fb5cadfcdbaa98c77614c37220c172c41576c8196acc1d6d8c3ae98836e59432e19000000000000000000000000000000000208131c20252b263135363531262b25201d1409010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546b8196abc1b6b19c86715c47311c070000000000000014293e54697e93a9bec4af9a856f5a45301a0002152737586d8398adc2c7c8c6c3b7b2a1998676615443301c0a000000000000000000021527385b70859bb0c5c2ad98836d6363625a5447361f0f0000000000000000000005182a3b475460626363687d92a8bdcab49f8a75604b36200b000000000000000000000008141c2023354a6074889eb3c8c9ae99836e593929170300000000000000091e32465773889eb3c8ddcdbaa98d78624d3823100011263b50667b90a5c5d5dbc6b19b86715443301c08000000000f253a4f647a8fa4c7d7dfcab59f8c79889da5b3bfbdbcbfc9cdd6ddd0c3b4a2917c66513a29170400000000000f24394e64798ea3c6d6ddc8b39e88735745321e09000005192b3b484d4f4f4f4f4f4f4f4f4f4f5472879cb2c7dcdcc7b19c87725c4f4f4f4f4f4f4f4f4f4f4f4b3f2e1d0d00001b30445869727575757575757575757575757575757575757575757575756c63513e291500000000000000000000091e32455673889db3c8ddd7c7a38e79644e39240f142a3f54697f94a9bed4dbc5b09b86705b38281502000000000000000000000000000000000000070b1016141d2021201d1416100b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074889db2c8c5b09b85705b46301b060000000000000014293e54697e93a9bec4af9a856f5a45301a0000152a3f546a7f94a9afb2b7c3cdcbbfb3a4998373604b38281502000000000000000000192e43586e8398adc3c5b09b85705b4e4d483c3629190100000000000000000000000d1d2a36434a4d4e50657a90a5c9cfbcab8d78634d38230e00000000000000000000000001080b1c30435470859ab0c5c7b29d88725746331e0a00000000000000031628395b71869bb0c6dbd7c7a9947f69543e2e1b080c22374c61778ca6b8cbdec9b49f8975604b35200b000000000d22374d62778ca9bacde2cfbcab8d78788799a1b1b6c2c6c9cecac8bfb3a59a84705e4c381c0c0000000000000c21374c61768ca8b9cce0cbb8a68b76604b36210b00000b203448596265656565656565656565656f859aafc4dadec9b49f8a746565656565656565656565655d4b3b2a1805001d33485d72878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816c57412c1702000000000000000000021628385b70869bb0c5dbd2bda8927d68533a2a1812273c52677c91a7bcd1ddc8b39d88735645321d090000000000000000000000000000000000000000000001080b0c0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa6b7cbc4aa947f6a553f2a15000000000000000014293e54697e93a9bec4af9a856f5a45301a000010263b50657b90989a9da5b4bac7d0c2b3a1927d685645321d09000000000000000001162b40566b8095abc0c8b29d8873564538342b1d190a000000000000000000000000000d1825303538394d63788dabbccfc9a5907a65503b2510000000000000000000000000000000132536586e8398adc3cbb7a58b76614c36210c0000000000000000192e44596e8399aec3d8dbc6b19b86715c4b37220f0b1f34475973889eb3c8ddcdbaa98d78634d38230e000000000b20354a60758a9fb4c9dfdac9a5907a657683919ca4acb1b4bbb4b3ada1998777614c40301d000000000000000a1f33475874899eb4c9ded5c4a38d78634e38230e00000d22374d62787a7a7a7a7a7a7a7a7a7a7a7b8399afc4d9e1cdbaa9907c7a7a7a7a7a7a7a7a7a7a7a7a655947341f0b001b30455a70859a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f99846e59442f190000000000000000000000192e43596e8398aec3d8d9c4ae99846f5847331f0f253a4f647a8fa4c7d8dfcab59f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a556b8095aac4cbb7a68e79634e39240e000000000000000014293e54697e93a9bec4af9a856f5a45301a00000b20354a60727f838587919fa9bacdd0bfb29d8775604b36200b00000000000000000013293e53687e93a8bdcab49f8a75604b3620190d0000000000000000000000000000000008131c2022364b60758a9fb4cabda8927d68533d2813000000000000000000000000000000172c42576c8197acc1d4c3a28d78624d38230d0000000000000001162c41566b8196abc0d6ddc9b5a38f7a644f3d2d1a07182a3b5c72879cb1c7dcd7c7a5907b65503b261000000000071c30435472879cb2c7dcd2bda7927d68616e7c8690979c9faa9f9d98908478625947342212000000000000000417293a5c71869cb1c6dbd0bba5907b66503b2611000013283e53687e8f8f8f8f8f8f8f8f8f8f8f8f99a1b3c7dce9d7c7ab9a908f8f8f8f8f8f8f8f8f8f8f8c77624c37220d00182d43586d8298adb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b19b86715c3a29170400000000000000000001162c41566b8196abc0d6dfc9b49f8a77614c39291722374d62778ca9bacee2cfbcab8d78634d38230e0000000000000000000000000000060c0e1114151514120f0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475871869bb0c6c8b29d88735b4a36210c000000000000000014293e54697e93a9bec4af9a856f5a45301a0000071c30435460696e6f727c8b9fb4c9decbb7a5917c675236251300000000000000000011263b50667b90a5bbcfbcab8d78634d38230e00000000000000000000000000000000000000070b1d31455673889db2c8bfaa95806a55402b15000000000000000000000000000000152b40556a8095aabfceb9a38e79644e39240f000000000000000014293e54697e93a9bed3e4d2c1ad98836e5b4a3621131b30465b70859bb0c5dad1bba6917c66513c271100000000001325365a6f859aafc4dad5bfaa95806a555e66737b81868a8b8a88837b6f6259483b2a180400000000000000001a2f44596f8499aec4d9d2bda8937d68533e2813000011263b50667b90a4a4a4a4a4a4a4a4a4a4a4afb3bfd0e3f5e5c8b8aba6a4a4a4a4a4a4a4a4a4a4a48f7a644f3a250f00152b40556a8095aac2d2cacacacacad7cdc9c9c9c9c9c9c9c9c9c9c9b39e89745846331f0a0000000000000000000014293e53697e93a8bed3e2cdbaa9957f6a5746331e20354a60758a9fb4c9dfdac9a5907a65503b25100000000000000000000000050b0e19202327292a2a292724211e170d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768b9fb5cac2ad98836d583d2d1a07000000000000000014293e54697e93a9bec4af9a856f5a45301a000000132536434a54595a5e6a7f94aac3d4d4c3ae99836e5443301c0700000000000000000e23394e63788ea3c5d5c9a5907a65503b25100000000000000000000000000000000000000000021527385b70859bb0c5c2ad98826d58432d1800000000000000000000000000000014293f54697e94a9becfbaa58f7a65503a2510000000000000000011273c51667c91a6bbd1e6dfcab49f8c79634e41301e1b30455a70859aafc5dad2bda7927d68523d28130000000000182d42576d8297acc2d7d7c2ad97826d584d5460656c71757675736e665e4d483b2b1d0c000000000000000002172c42576c8197acc1d6d5c0aa95806b55402b1600000e23394e63788ea3c5bababababababababac4c7d0ddecece6d6c8bebbbabababababababababaa7917c67523c27120011263b51667b90a4b5c9daecdfead7c7bab4b4b4b4b4b4b4b4b4b4b4b4a78b76614c36210c0000000000000000000011263c51667b91a6bbd0ead7c7b39e8876614c3f2e1c30435472879db2c7dcd2bda8927d68533d2813000000000000000000030d181f222c35383c3e3f3f3e3d3a3633292220180d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90abbccfc9a8937e68533e291300000000000000000014293e54697e93a9bec4af9a856f5a45301a00000008182530353f43404c62778ca5b6cadec9b49e8974604a35200b00000000000000000b21364b60768ba7b8ccbda8927d68533d2813000000000000000000000000000000000000000000182e43586d8398adc2c5af9a85705a37271501000000000000000000000000000014293e53697e93a8becfbaa5907a65503b251000000000000000000f24394e64798ea3c6d6e9e2cebbaa99846f5f4d3c2c1c2b3b5b71869bb0c6dbd2bda8927d68533d28130000000000152a40556a7f95aabfd4dac4af9a856f5a36434a5057546061605558514c40342b1d0d00000000000000000000142a3f54697f94a9bed4d8c2ad98836d58432e1800000b21364b60768ba7b8cccfcfcfcfcfcfcfcfd7d7d7d7d7d7d7d7d7d7d0cfcfcfcfcfcfcfcfcfbfa9947f6a543f2a15000b20354b6073869cabbccfe3ede2cdbaa99f9f9f9f9f9f9f9f9f9f9f9f9f8e79634e39240e000000000000000000000f24394e64798ea3c6d6e8e0cbb8a696816c5d4b3b2b25365b70859ab0c5dad4bfa9947f6a543f2a1500000000000000000a161e2a34373c494d5154555454524f4b463937342b20190e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac9cfbcab8f7a644f3a250f00000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000008131c202a2e34485972879db2c7dccdb9a88d78634e38230e0000000000000000091e32455773889eb3c8bfaa95806a55402b15000000000000000000000000000000000000000001162b40566b8095abc0c7b29d88725544311d08000000000000000000000000000013283e53687d93a8bdcfbaa48f7a654f3a251000000000000000000c21374c61768ca8b9cde1ebd9c8b3a1927d675a493a2c34485973889db3c8ddd1bca6917c67513c2712000000000013283d52687d92a7bdd2dcc7b29d8772544330353b36434a4b4b44373b382f20190d000000000000000000000012273c52677c91a7bcd1dac5b09a85705b3727150200091e32455773889eb3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c1ac97826c57422d1700081d314455657b8d9fb5bfd0e1dfc9b49f8b8a8a8a8a8a8a8a8a8a8a8a8a8b7c66513b2611000000000000000000000c21374c61768ca8b9cce1e7d5c5b49f8c7b6559483c3044596e8499aec3d9d5c0ab95806b56402b16000000000000000d1a28323b484c565a6366696a6a6967646157554c483b352b1d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b5a6f849aafc4cab59f8b76614b36210c00000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000070b14182a3b5a6f8499afc4d9d6c6a6917c67513c27120000000000000000031628395b71869bb0c6c2ad98826d58432d1800000000000000000000000000000000000000000013283e53687d93a8bdcab49f8a75604b35200b000000000000000000000000000013283d52687d92a7bdcfb9a48f7a644f3a250f00000000000000000a1f33475874899eb4c9def3e6d0bfb39e89786258493c3b4d62778ca6b8cbe0d7c7a5907b65503b2610000000000010253a50657a8fa5c9d9dfc9b49f8a75604b3520252530353635312726241d12050000000000000000000000000f243a4f64798fa4c7c9c9c8b29d88735544311d0800031628395b71869bacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac9a846f5a452f1a00011426374b5d6a8095a1b3c3d3d1bca7917c74747474747474747474747474665e4c38240f000000000000000000000a1f33475874899eb4c9def3e2cebbaa9d8878625a4d413f596e8499aec3d9d6c1ac97816c57422c170000000000000e1d2b38454b59626b72787c7e7f7f7e7c7a76706a62594d483c3127190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475973889eb3c8c7b29c87725746321e0a00000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000172d42576c8297acc1d7d4bea9947f69543f2a14000000000000000000192e43596e8398aec3c5af9a85705a37271501000000000000000000000000000000000000000011263b50667b90a5c9cebbaa8d78624d38230d000000000000000000000000000012283d52677d92a7bcceb9a48f79644f3a240f000000000000000004172a3a5c71879cb1c6dcf1e1d4cab9a79c8676635a4e4d59697e93a9c4d5e2cdbaa98e79634e39240e00000000000d23384d62788dabbccfe2cebbaa8c77624d372210131c2021201d15110f0900000000000000000000000000000d22374c62778ca9b4b4b4b4b49f8a75604b36200b0000192e44596e839797979797979797979797979797979797979797979797979797979797979797979787725d47321d000009192e3f4a60728399a4b6c6d7c9b49e8a7963585f5f5f5f5f5f5f5f5f5f514c402f1c09000000000000000000000417293a5c71869cb1c6dbe4d6cdc8b7a69c8778675f55535d71869cb1c6dcd6c0ab96816b56412c1600000000000e1e2b3b4856606b7780878d9193949493928f8a857f776d625a4b44372b1d1002000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca6b8cbc3ae99836e593929160300000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000152a3f546a7f94a9bfd4d6c1ac96816c57412c17020000000000000001162c41566b8196abc0c7b29d88725544311d0800000000000000000000000000000000000000000e23384e63788dabbccfc8a58f7a65503a2510000000000000000000000000000012273c52677c91a7bcceb9a48e79644f39240f0000000000000000001a2f44596f8499aec4d9e6d4c3b7b2b6a49c86786a64626777889db3c8dddfc9b49f8a75604b35200b00000000000b20354b60758a9fb4cadfd8c8a48f7a644f3a250f00070b0c0b080100000000000000000000000000000000000b20354a60748a9e9e9e9e9e9e9e8d78624d38230d000012273d52677d82828282828282828282828282828282828282828282828282828282828282828282816c57422c17000000101c3043546176869ca8b9cdcdb9a89c87766154434a4a4a4a4a4a4a4a3b382f22120000000000000000000000001a2f44596f8499aec4d9d6c6b9b4adb2a59c897c716a686b7b8fa4b6c9dedac9a9947f69543f2a14000000000a1a2b3c48596275808a969da5a6a9aaa9a9a7aa9f9b948b82786a6055483b2e20110300000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c5d5c0aa95806b55402b160000000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000012273d52677c92a7bcd1d9c3ae99846e59442f1900000000000000000014293e53697e93a8becab49f8a75604b35200b00000000000000000000000000000000000000000b21364b60768a9fb5cabda7927d68523d2813000000000000000000000000000011263c51667b91a6bbcfb9a48f7a644f3a250f000000000000000002172c42576c8197acc1d6dfcab7a59da5b0a49c8a8079777c879da6b8cbe0dac9b09b86705544311d080000000000081d31445573889db2c8ddd1bca7927c67523d2712000000000000000000000000000000000000000000000000071c3043547185898989898989898a7b654f3a251000001025394d5f676d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6c63523e2a1500000000132536465863798a9eb4bccdc6b6a5998372604a402f35353535353526241c1204000000000000000000000002172c42576c8197acc1d6cdb9a89e98a0b2a79e91867f7d808a9eb4c2d3e3cfbcab917c67523c271200000002152738485a627785959ea8b2b7c3bebfbfbec8bbb4b0aa9f988b7f7362594b3e2f211100000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdd2bda8937d68533e28130000000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000f253a4f647a8fa4c7d8dbc6b19c86715c3a291704000000000000000011263c51667b91a6bbcebbaa8d77624d38220d0000000000000000000000000000000000000000091e32455673889db3c8bfaa957f6a55402a15000000000000000000000000000010253a50657a8fa5bacfbaa58f7a65503a2510000000000000000000152a3f546a7f94a9bfd4ddc7b29d87969eb0a89e958e8c919da5b7c4d5e3cfbcab957f6a55372715010000000000011527375b70859ab0c5dad4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000001325365667717474747474747474655d4b37230e00000a1e30414d525757575757575757575757575757575757575757575757575757575757575757575757524534220f000000000818293a4a5b677d919eb0c0d0c3b3a195806a5e4c3c2c1b1f1f1f1f110f090000000000000000000000000000152a3f546a7f94a9bfd4c9b49e8a8398a4b5b3a49c9592969ea8b9cde0dfcab59f8b77614c37220c000000091d3145566278879ba3b4b9c6cbcfcac6c1c0c0c2c7c8bbb4a99f948577645c4c3f2f1a0a0000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd0bba6907b66513b26110000000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000d22374d62778ca9bacedec9b39e89745846331f0a00000000000000000f24394e64798ea3c5d6c8a58f7a65503a25100000000000000000000000000000000000000000021628385b70869bb0c5c2ad97826d58422d1800000000000000000000000000000f24394e64798ea3c4d4bba6917b66513c261100000000000000000012273c52677c91a7bcd1d9c3ae99838096a0b1b4aaa3a2a6b2b7c3d4e2d6c5b59f8c78624d38220d00000000000000182e43586d8398adc2d8d6c1ac97816c57422c170200000000000000000000000000000000000000000000000008183949565c5f5f5f5f5f5f5f5f4f4b3f2e1c08000001132330393d42424242424242424242424242424242424242424242424242424242424242424242423e3427170500000000000b1b2d3d4d5f6b8096a2b4c3d0bfb59f8d7c665a49392816030a0a000000000000000000000000000000000012273c52677c91a7bcd1c9b49f8a75869ca5b5b5b1aaa8abb4b9c6d7e1d2c1b09b86715947341f0b000005182b3b4b6074859ba5b5c1cdd1c9bcb5b0acaaabadb2b6c3c7bab4a39b887a655d4c3828160300000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2d8c8a38e79644e39240f0000000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000b20354a60758a9fb4c9dfccb9a88b76614c36210c00000000000000000c21364c61768ba7b9ccbca7927d67523d2812000000000000000000000000000000000000000000192e43586e8398adc3c4af9a856f5a36261401000000000000000000000000000c21374c61778ca6b7cbbda8937e68533e29130800000000000000000f253a4f647a8fa4c7d7dbc6b19c867282979fb4bac6b7bcc7cad4ddd2c6b9a798836e5a4835200b00000000000001162b40566b8095abc0d5d9c4af99846f5a442f1a00000000000000000000000000000000000000000000000000001b2b39434649494949494949493a372e21110000000005131e25272d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2a221709000000000000000f1f30414b6073849aa5b7c7cfbcab9e8978635746321e14030000000000000000000000000000000000000f253a4f647a8fa4c7d8cebaa98a7577879ba3b1bebfbdc0c9cdd7ddd1c3b5a3917c67523b2a180400000b203448596b8096a3b5c3d2d1c1b4ab9f9b979596989da5aeb2bec1b4a69d8a7b655645321e09000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afc4cebbaa8c77614c37220c0000000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000071c30435472879cb2c7dcd6c6a38e79644e39240f00000000000000000a1f33465874899eb3c9bfaa957f6a55402a15000000000000000000000000000000000000000001162b41566b8096abc0c7b29d87725443301c08000000000000000000000000000a1f33475873889db2c9c1ac97816c574130251813060000000000000d22374d62778ca9bacddec9b39e89747281939fa8b3bfc6c9cecac8c2b5a89e8977624c3c2b19050000000000000013283e53687d93a8bdd2dcc6b19c87715c3a2a1704000000000000000000000000000000000000000000000000000d1b272e31343434343434343425231c11030000000000010a10121818181818181818181818181818181818181818181818181818181818181818181817150f05000000000000000001121d3144556176879da9bacdc9b9a79c8675614b433221110000000000000000000000000000000000000d22374d62778ca9bac1c1b7a68a75627785979fb0b4c1c6c9cdcac8c0b4a59b8572604a35200c0000011426364d62778a9fb4c1d2d1c1b4a39b8c8681808182878e98a0b2b6c3b7a89e8876604b36210b000000000000000000000000000000000000000000000000000000000000000000000000001b31465b70869bb0c5cab49f8a75604a35200b0000000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000001325365a6f859aafc4dad0bba6917b66513c261100000000000000000417293a5c71869bb1c6c2ad97826d58422d1800000000000000000000000000000000000000000013293e53687e93a8bdc9b49f8a75604b35200b0000000000000000000000000004172a3a576c8197abbcc7b29d87725f4a43363124130200000000000b20354a60758a9fb4c9dfccb9a88b76616c7e8a99a1abb0b4bab5b3aea49c8a7b655948341e0e000000000000000011263b50667b90a5bbc9c9c9b49e89745847331f0a00000000000000000000000000000000000000000000000000000a131a1c1f1f1f1f1f1f1f1f100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374758647a8b9fb4bdcec5b5a498826e614f3f2e1d0d00000000000000000000000000000000000b20354b60758a9facacacaa9d887359627582909ba3abb0b4bab5b3aea29a8777625443301c070000081c3043546c8196a9bacddac9b4a39b8579716c6b6b6d7279838f9da5b3b39f8c7c665645321e09000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879cb2c7c9b39e89745443301c070000000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000182d42586d8297adc2d7d3bea9937e69543e2914000000000000000000192f44596e8499aec3c4af9a856f5a36261401000000000000000000000000000000000000000011263b51667b90a6bbcebbaa8d77624d38220d00000000000000000000000000000e23394e63798c9fb5c0b6a5917c6760544e42311e0b0000000000071c30435472879cb2c7dcd6c6a38e7964606879838e969b9fa99f9e9992867a655d4b3b2a180000000000000000000e23384e63788da3b4b4b4b4b4a88c76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3a4a5c687d929fb1c0d1c2b2a0947f695d4b3c2b1a0a00000000000000000000000000000000081c30435472879696969695907f695457616d7b858f969b9fa99f9e999184786259483625130000000b20354b6074899eb3c7d7cfbcab9b8574635b575556585c646e7b87969e9e937f695e4c38281603000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8c8b29d88735d482513000000000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000152a40556a7f95aabfd4d6c0ab96816b56412c16010000000000000002172c41576c8196acc1c7b29d87725443301c0800000000000000000000000000000000000000000e23394e63788ea3c5d5c8a48f7a654f3a251000000000000000000000000000000c2136495b6c8197a2b2beb39e897c7368604e3a26110000000000001325365a6f859aafc4dad1bba6917c66515b636e7980868a8b8a88847d74645c4b3f2e1d0d0000000000000000000b21364b60768b9e9e9e9e9e9e9e8e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3e4e5f6c8197a2b4c4cfbeb49f8c7b655a48382815020000000000000000000000000000000114263654697f81818181807b69614f464b5d65707a81868a8b8a88837c72625a483b2b18080000000f24394f64798ea7b8ccdfcab59f8c7963564a3d40413e4a4e5d65758088897f6a614f402f1a0a00000000000000000000000000000000000000000000000000000000000000000000000000001e34495e73899eb3c8c7b29c87725d47321d000000000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000013283d52687d92a7bdd2d8c3ae98836e59432e1900000000000000000014293f54697e94a9bec9b49f8a75604b35200b00000000000000000000000000000000000000000c21364b61768ba7b8ccbca7927d67523d28120000000000000000000000000000061a2c3d4b60748498a0b1b5a79e91897e68533d2813000000000000182d42576d8297acc2d7d3bea9937e6954494d5b636b71747675736e6760554b3e2e211100000000000000000000091e3245567287898989898989898a7c66513c2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102031414b6074849ba6b7c8cebbaa9e8878625645321d130200000000000000000000000000000008273b4f61696c6c6c6c6a655d4f43323f4b505c646c71747675736e666054483c2b1d0d00000000142a3f54697f94a9c5d6dac4af9a856f5b49382d2b2c2d363f4b57616b73736a614f423222120000000000000000000000000000000000000000000000000000000000000000000000000000001f34495f74899eb4c9c6b19c86715c47311c070000000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000010253a50657a8fa5c8d9dbc6b09b86715b39281603000000000000000012273c51677c91a6bccebbaa8c77624d37220d0000000000000000000000000000000000000000091e32465773889eb3c8bfaa947f6a553f2a150000000000000000000000000000000f1e3245566075828f9ba3b5b3a796816c57412c17020000000000152a40556a7f95aabfd4d6c1ab96816c56413d4a4e565b5761605559524b44372e20110300000000000000000000031628385869727474747474747474665e4c38240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002131d3144556277889daabbcec8b8a69b8574604b423120100000000000000000000000000000000c1f32434f545757575755504b3f321e2f383e4b4f565b5761605659514a43362b1e0e0000000000182d42576d8297acc2d7d4bfaa947f6a553d393633292a252e39464b565e5e544f43322414040000000000000000000000000000000000000000000000000000000000000000000000000000001e34495e73899eb3c8c5b09b86705b46311b060000000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000d23384d62788daabbceddc8b39e88735746321e0900000000000000000f24394f64798ea4c6d7c8a48f7a654f3a25100000000000000000000000000000000000000000031628395b71869bb0c6c2ac97826d57422d18000000000000000000000000000000031628384557606d7b869bb1c5ae99846e59442f1904000000000013283d52687d92a7bdd2d8c3ae99836e59442d36394139464b4b44373d3531271910020000000000000000000000000a1a3a4b585d5f5f5f5f5f5f5f5f514c402f1d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374859657b8b9fb4becec5b5a397816d604e3e2e1d0c0000000000000000000000000000031424323b3f41414141403b372e21151c232e373a4139464b4b45383c353025180e000000000000192e44596e8399aec3d8d1bba6917c6655524f4c4639403b363232364149493f3c32251506000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3c8c6b19c86715c47311c070000000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000b20354b60758a9fb4cadfccb8a78b76614b36210c00000000000000000c22374c61778ca8b9cdbca7927c67523d2712000000000000000000000000000000000000000000192e44596e8399aec3c4af9a846f5a362513000000000000000000000000000000000a1f33475862778399a3b5bfb19b86715c46311c07000000000010253a50657a8fa5c9d9dbc6b19b86715c392921242b29323636312728201d15090000000000000000000000000000001d2d3a444849494949494949493c382f221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3b4b5d697e93a0b1c1d2c1b19f937e685c4b3b2a1909000000000000000000000000000006141f27292c2c2c2c2b25231c110308101b22252c28323636312727201c1308000000000000001b30455b70859ab0c5dacfbaa5907b6c6a676461575955504b4538363329342a2720150700000000000000000000000000000000000000000000000000000000000000000000000000000000001d32485d72879db2c7c7b29c87725d47321d000000000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000081d31445572889db2c7ddd5c5a38e78634e39230e00000000000000000a1f33475874899eb4c9bfaa947f6a553f2a15000000000000000000000000000000000000000001162c41566b8196abc0c7b29c87725443301c070000000000000000000000000000031729394c61768799a1b3bfb3a19988735e49341e0900000000000d23384d62788dabbccfdec8b39e89735746331e0e16161e21201d15120b0801000000000000000000000000000000000f1d283032343434343434343426241d12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f111414141d2e3f4f606d8297a3b5c5cebdb49f8b7a645947372715010000000000000000000000000000030c12141717171715100e0800000000080d0f17161e21201d15110b070000000000000000001b30465b70859bb0c5dadac5b09a84817f7c7976726e6a656056534c4639352c1e160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c71879cb1c6c8b29d88735d372614010000000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000011527375b70859ab0c5dad0bba5907b66503b2611000000000000000004182a3a5c71879cb1c6c1ac97826c57422d1700000000000000000000000000000000000000000014293e54697e93a9bec9b49f8a75604a35200b00000000000000000000000000000a1e3346576c8197a5b3bfb3a199837d68523d28130000000000000b20354b60758a9fb4cadfccb8a78b76614b36210c00030a0c0b08020000000000000000000000000000000000000000000b151b1d1f1f1f1f1f1f1f1f110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c2326292929292932424b6074859ba7b8c8cdbaa99d8777615544311d130100000000000000000000000000000000000202020200000000000000000000000003090c0b09020000000000000000000000001a2f445a6f8499afc4d9dcc8b4a29a9794928e8b88847f7a756f6861574e493d32281b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465b71869bb0c6c8b39e89735544311d080000000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000182e43586d8398adc2d8d3bda8937e68533e29130000000000000000001a2f445a6f8499afc4c4af9a846f5a36251300000000000000000000000000000000000000000011263c51667b91a6bbcdbaa98c77624c37220d00000000000000000000000000000c21364b61768a9fb4c3c3ae99836e685f4e3a2510000000000000081d31445573889db2c8ddd5c5a38e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b3e3e3e3e3e3e3e45566278899eaabbcec7b7a69a8473604b41301f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adc3d8e3d1c0b4b0acaaa7a4a59d9995908a847d766d635b4b45392b1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4cab49f8a75604b35200b0000000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000162b40556b8095aac0d5d5c0ab95806b56402b16010000000000000002172c42576c8197acc1c7b19c87725443301c0700000000000000000000000000000000000000000f24394e64798ea3c5d6c7a48f7a644f3a250f000000000000000000000000000010263b50657b90a9bacdbba5907b66524e41311e0b000000000000011527375b70859ab0c5dad0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000a10121a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a12100a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c505353535353535353535a657b8c9fb4c4d4c4b4a296806b5f4d3d2c180800000000000000000000000000000000000000000000000000000000000003090b0b09020000000000000000000000000000162b40556b8095aac0d5eaded1c8c5babcbcc3b7b2aeaaa99f99928a82796c6057483c2b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d8298adc2cebbaa8c77624d37220d0000000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000013283e53687d93a8bdd2d8c2ad98836d58432e18000000000000000000152a3f546a7f94a9bfc9b49f8975604a35200b00000000000000000000000000000000000000000c21364c61768ba7b9ccbca7927c67523d2712000000000000000000000000000013283e53687d93a8c7d7b8a28d78634d383123130100000000000000182e43586d8398adc2d8d3bea8937e69533e2914000000000000000000000000000000000000000000000000000000000000000004121d24272f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f27251d12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e6669696969696969696969696a7f94a6b7cbd1c0b09e917d675b4936251300000000000000000000000000000000000000000000000000000000000a161e21201d150a0000000000000000000000000012273c52677c91a7c3d3e6dac8b7aba5a7aaaeb3b7c4c7bab4aea99f978b8175625a483b2a18050000000000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc0d9c8a48f7a644f3a250f0000000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000010263b50657b90a5c9dadac5b09b85705b38271502000000000000000012273c52677c91a7bccdbaa98c77624c37220d00000000000000000000000000000000000000000a1f33465874899eb3c9bfa9947f6a543f2a15000000000000000000000000000013283e53687d93a8bdcdb8a38d78634e382313050000000000000001162b40566b8095abc0d5d5c0ab96806b56412b160100000000000000000000000000000000000000000000000000000000000000122330393c44444444444444444444444444444444444444444444444444444444443c3930231201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667c7e7e7e7e7e7e7e7e7e7e7e7e7e889db3c8ddcdbcb49f8a79635443301c07000000000000000000000000000000000000000000000000000008131c2832363632281a0a0000000000000000000000000e23384d63788da5b6cadfd2beab99909195999da6a8afb4bbc7bab4aa9f968678625947341f0f000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9bed1bca6917c67513c27120000000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000e23384e63788dabbccfddc8b29d88735645311d0900000000000000000f253a4f647a8fa4c7d7c7a48f79644f3a240f00000000000000000000000000000000000000000417293a5c71869bb1c6c1ac97826c57422d17020000000000000000000000000012273c52677c91a7c9d9b9a48f7a644f3a250f00000000000000000013283e53687d93a8bdd2d8c3ae98836e59432e19000000000000000000000000000000000000000000000000000000000000000a1d30414d515959595959595959595959595959595959595959595959595959595959524d41301d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c81939393939393939393939393939da6b7cbe0e1cdbaa89a8572604a35200b000000000000000000000000000000000000000000000000061118253038454b4b453828150200000000000000000000000c2135495b72879cb2c7dccfbaa5907b7c8084888d93999faab1bdc8bbb4a49c8777624c3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6c7d7bea9947f69543f2a140000000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000b21364b60768a9fb5cadfcab59f8a75604b36200b00000000000000000d22374d62778ca9bacdbca7917c67523c2712000000000000000000000000000000000000000000192f44596e8499aec3c4af99846f5a442f1a00000000000000000000000000000f243a4f64798fabbccfbda7927d68523d281300000000000000000011263b50667b90a5bbc9c9c5b09b86705b392816030000000000000000000000000000000000000000000000000000000000001024394d5f676f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f675f4d3925100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a8a8a8a8a8a8a8a8a8a8a8a8b3b7c4d5e7e9d7c6b4a2907b66503b261100000000000000000000000000000000000000000000040e19212e36434a5660605645321d09000000000000000000000006192c3c566c8196abc1d1d2bda8927d686a6e73787e848b979fb5bcc9c2b6a599836f5b4a36210c000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798ea9bacdc2ad98836d583828150200000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000091e32455673889db3c8ddcfbcab8d78634d38230e00000000000000000b20354a60758a9fb4c9bea9947f69543f2a14000000000000000000000000000000000000000001172c41566c8196abc1c7b19c87725c3b2a1804000000000000000000000000000c21364b61768b9fb4cac1ac96816c573b2a180500000000000000000e23384e63788da3b4b4b4b4b39e88735745321e0900000000000000000000000000000000000000000000000000000000000012273c51677d84848484848484848484848484848484848484848484848484848484847d67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcbebebebebebebebebebec8cbd5d5d5d5d5d1c0ab95806b56402b160100000000000000000000000000000000000000020c171f2c353f4b5460677674604b36200b0000000000000000000000000f24394f64798ea3b4c8dac5b09a85705c595a62686f7882929fabbccfc3b3a18e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9c6b19c86715645321d0900000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000021628385b70869bb0c5dbdac9a5907a65503b25100000000000000000071c30435472879cb2c7c1ac97816c57422c1702000000000000000000000000000000000000000014293f54697e94a9bec9b49f89745947341f0b00000000000000000000000000091e32465771869bb0c6c6b19c86715948341f0b00000000000000000b21364b60768b9e9e9e9e9e9e9e8b76604b36210b00000000000000000000000000000000000000000000000000000000000012283d52677d9299999999999999999999999999999999999999999999999999999997816c57422c1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c7c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0ae98836e59432e19000000000000000000000000000000000000000a151d2a333c494d5d65727d877a644f3a240f0000000000000000000000000d22364a5c70859bb0c0d1c8b4a28f7a6454494d535a626d7d8d9fb5cad0bfaa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000081d31445571869bb1c6cab49f8a75604b36200b00000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000192e43596e8398aec3d8d2bda8927d68533d28130000000000000000001325365a6f849aafc4c4af99846f5a442f1a00000000000000000000000000000000000000000011273c51667c91a6bbcdbaa98c77614c37220c0000000000000000000000000003162839566b8196abc8c9b5a48c77624c37220d0000000000000000091e3245567287898989898989898a79634e38230e00000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae99846f5a36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9ababababababababababababababababababababab9b86715c372715020000000000000000000000000000000007121a27313a474c5b636e7b8592917c67523c2712000000000000000000000000071b2d3e51677c91a2b4c8d1c0b09b8572604a413c484d5f6e8399aec3d9c5b09a85705b45301b0000000000000000000000000000000000000000000000000000000000000000000000000001152737586d8297adc2cebbaa8e79644f39240f00000000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000001162b41566b8096abc0d5d5bfaa95806a55402b15000000000000000000182d42576d8297acc2c6b19c87715c3a2a180400000000000000000000000000000000000000000f24394f64798ea4c6d6c7a48f79644f3a240f000000000000000000000000000011263b51667b90aabbcec2a7927d67523d28120000000000000000031628385869727474747474747474635b4935210c0000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bac4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b19c87725443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344759748a959595959595959595959595959595959595959595959589745544311d08000000000000000000000000000005101b223038454b58616c78838f9ba3947f6a543f2a15000000000000000000000000001024394d5f70859aaabbcec8b4a3947f695f4b46394154697e94a9bed3c7b29d87725d48321d000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9c4d4c8a9947e695437271501000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000014293e53697e93a8bed3d7c2ad97826d58422d18000000000000000000152a40556a7f95aabfc9b49e89745847331f0a00000000000000000000000000000000000000000c21374c61768ca8b9cdbca7917c67523c271200000000000000000000000000000c21364b61768b9fb4cac2ad97826d583c2c190600000000000000000a1a3a4b585d5f5f5f5f5f5f5f5f4e493d2c1a060000000000000000000000000000000000000000000000000000000000000b20354a6075899fb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b09f8975604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b546a7f80808080808080808080808080808080808080808080808074604b36200b000000000000000000000000030e19202d36404d56606976818b99a1b0ac97826c57422d17020000000000000000000000000a1d30404f647a8c9fb4bfd0c1b49f8c7d6b61575352596a8095aabfd5c8b39e88735e49331e00000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea6b7cbc4ae99846f5544311d08000000000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000011263b51667b90a6bbd0dac5af9a85705a37261401000000000000000012283d52677d92a7bccdb9a88c77614c37220c00000000000000000000000000000000000000000a1f33475874899eb4c9bea9947f69543f2a1400000000000000000000000000000a1e33465770869bb0c5c7b29d87725a4935200c0000000000000000001d2d3a4448494949494949494938352c1f0e00000000000000000000000000000000000000000000000000000000000000071c30435472879b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8c77624c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d273c4f616a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b605544311d0800000000000000000000010b171e2b353e4a4f5f67747e89969faab3bfaf9a846f5a452f1a05000000000000000000000000001222364a5c6a7f94a1b3c0cebbaa9f8d80756c68686b78889eb3c8d8c8b19b86715c46311c00000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b73889db3c8c9b49e8975604b35200b000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000000e24394e63798ea3c5d6dcc7b29d87725544311d08000000000000000010253a50657a8fa5c8d7c6a48e79644f39240f000000000000000000000000000000000000000004172a3a5c71879cb1c6c1ac97816c57422c17020000000000000000000000000003172939566b8096abc0cab7a58d78634d38230e0000000000000000000f1d283032343434343434343423211a0e000000000000000000000000000000000000000000000000000000000000000000132536576c81868686868686868686868686868686868686868686868686868686868579634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2032434f545656565656565656565656565656565656565656565656564b443727150200000000000000000009141d29333c484d5c64707c87949ea7b4bbc8c7b29c87725d47321d0800000000000000000000000000071b2d3e4b60728399a2b4c0c8bbab9f9688827e7d81899ea6b8cbcebbaa96806b56412b160000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d586d8298adc8cdb9a88f7a654f3a2510000000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000000c21364b61768ba7b8ccdfcab49f8a75604b35200b00000000000000000d22384d62778daabbcebca6917c67513c27120000000000000000000000000000000000000000001a2f44596f8499aec4c4ae99846f59442f1a00000000000000000000000000000011263b50667b90a5c4d4c3a8927d68533d2813000000000000000000000b151b1d1f1f1f1f1f1f1f1f0e0c060000000000000000000000000000000000000000000000000000000000000000000008293e51636c7171717171717171717171717171717171717171717171717171717171635b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525323c3f40404040404040404040404040404040404040404040404036312719090000000000000000071119263139464b5a626d7a85919ca5b3b8c5cec9bfb49e89745f49341f0a0000000000000000000000000000101c3043546175849aa2b0bcc9bcb5a79e979392969ea7b8c5cebfb49f8b79634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92aabbcec6ab96806b563e2e1b070000000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000000a1e33465773899eb3c8d5cebbaa8d77624d38220d00000000000000000b20354b60758a9fb4cabea9947e69543f2914000000000000000000000000000000000000000002172c42576c8197acc1c6b19c87715c3a2a170400000000000000000000000000000c21364c61768ba6b7cbc2ac97826d57422d1802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f22344551575b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520272a2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b201d150900000000000000050f1a212f37444b57616b78828d9aa2b2b6c3cccbc1b5b0a199846f5a45301a050000000000000000000000000000011426364657617684969eb1b5c2c5b8b3aca8a7abb3b9c5c9bdb1a196806b5b4935210c0000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778b9fb4cac7b29d87725c4a36220a0000000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000031729395c71869bb1c0c0c0c8a48f7a654f3a25100000000000000000081d31445572889db2c7c1ac96816c57412c17020000000000000000000000000000000000000000142a3f54697f94a9bec9b49e89745847331f0a00000000000000000000000000000a1f33465873889db2c8c5b09b85705b46301b060000000000000000000000060c0e1a1d1e1e1e1e12100a01000000000000030a0c131313131313131313131313131313130d0b05000000000000051727343e4146464646464646464646464646464646464646464646464646464646464541372a1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c12151616161616161616161616161616161616161616161616160b0802000000000000000d181f2d36404c55606876808a989fabb4c0caccc3b7b2a39b908377624c37220d00000000000000000000000000000000081828394658617381909ca4b0b4c1c3c1bdbdc0c7c5c1b5b09f978373604b3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586e8499aec5cab7a58f7a644f3827150200000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000000192f44596e8499abababababa7927d67523d28120000000000000000011426375a70859aafc5c3ae99846e59442f1900000000000000000000000000000000000000000012273c52677c91a7bccdb9a88c77614c37210c00000000000000000000000000000417293a5b70859bb0c5c8b29d88735d48331e08000000000000000000000e1920232f333333333327251e1305000000000b171e21282828282828282828282828282828282220180d00000000000012253848555a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a5548371c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007151d2a343d4a4e5e66737e88959fa9b5bcc9cec6b9b3a59d92857b6e625948341f0b00000000000000000000000000000000000b1b293a4655606b7b86929ba3a8adb1b3b4b4b2afaaa39b918174605544311f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a51677c91a7b8ccc3ab96806b5645311d0900000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000001172c41566c8195959595959595947f6a553f2a15000000000000000000182d43586d8298adc2c6b19c86715c3a29170400000000000000000000000000000000000000000f243a4f64798fa4c7d6c6a48e79644f39240f00000000000000000000000000070c1a2f445a6f8499afc4c9b49e89745f49341f0a0000000000000000000e1e2c35384448484848483d393023130100000b1b2933363d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d37342b1d0d0000000004182d41556670707070707070707070707070707070707070707070707070707070707066553a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d12151614120e0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525323b474c5b636f7b86939ea6b4bac7cfc8bbb4a89e94877d72655d4c483b2a18050000000000000000000000000000000000000b1b2937444b5d65737d858e93989c9d9f9e9d9a958f857c6d6056453727150100000000000000000000000000000000000000000000000000000000000000000000000000000000000c20364b6075899eb3c8c8b39e8875604b36200f00000000000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000000010253a50657b80808080808080807c66513c2611000000000000000000152b40556a8095aabfc9b39e89745846331f0a00000000000000000000000000000000000000000d22374c62778ca9bacdbca6917c67513c27120000000000000000000000010f1a21232e3f5a70859aafc5c9b49e89745f49341f0a00000000000000000c1c2c3c494d595d5e5e5e5e524d41301e0a0003172939464b535353535353535353535353535353534c483b2b1805000000051b30455a70848686868686868686868686868686868686868686868686868686868684705846331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e192022272a2b292824201c1308070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2032434f59626c7984909ca4b3b8c4cdcabfb3aa9f97897f756760544b3f342a1d0d00000000000000000000000000000000000000000b1927313f4b55606770797e8387888a898785807a71665e4b4538281909000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3245566c8197acbfcbb8a6917c67523d2d1a07000000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000000e23374b5d656b6b6b6b6b6b6b6b665e4c38240f00000000000000000013283d53687d92a8bdccb9a88b76614c36210c00000000000000000000000000000000000000000b1f34475974899fb4c9bea9947e69543f291400000000000000000000000f1f2d36393b4b5d72879db2c7c7b29d88725d48331d080000000000000008182a3a495a636f7273737373675f4d392510000a1e334657616868686868686868686868686868686862594834200b000000081d32475d72879b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232b35383d3f403f3d39353025211a0f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c4f616977828c99a1b1b5c2cbc9bcb5aea1998b81776a60564a43362e1f180d0000000000000000000000000000000000000000000009151d2e37444b525b63696e7173747472706a655d514c4032281a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384e63798ea1b3c7c4af9a85705b4a36210e000000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000000081c2e3f4b505656565656565656514c402f1d0900000000000000000010253b50657a90a5c9d6c6a38e79644e3924140b080200000000000000000000000000000000060c182a3b5c72879cb1c7c1ac96816c57412c1702000000000000000000071a2d3d4a4e5859657b8fa5b7cac9af9a85705a45301b0500000000000001142636475863788488888888887d67523d2712000c21364b61757e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d77624c37220d000000051a2f445a6f8499afb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000715212f373c484d52545554524e4a4336362d20190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f8a979faab3bfc9cfbeb2ab9f998f83796c61594b453830251811050000000000000000000000000000000000000000000000000111192631353d494e53585c5e5f5f5d5a554f4b3f382f1e160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a21364a5b6f8499aec1c8b4a28e79634e3c2b19060000000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000000011212e373e4a4f596264635a524e41352717060000000000000000000e23384d63788dabbccfbba6917b66513c2e29201d150900000000000000000000000000000e1921232f445a6f8499afc4c3ae99846e59442f19000000000000000000000c21364a5b636d7078869cb1c3cfbcab957f6a55402a15000000000000000e1c304354617687999d9d9d9d8976614b36210c000c21364b61768b9292929292929292929292929292917c67523c271200000002172c42576c8197acc1c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4bba6917c66513c2711000000000000000000000000000000000000000000000000000000000000000000000000000000000000061525333f4b505a62676a6b69676360544e4a3e352b1e1002000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879ca8b4bbc8d0dac6b2a0988c847a6e635b4c473a32281c13080000000000000000000000000000000000000000000000000000000009141d202c36393e4347484a494845403a372e241d120300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d50657a8fa3b4c8c0ad98826d5a4935200e0000000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000000000c1c2f404c5c647077797872685f52453524140000000000000000000b20364b60758a9fb4cabea9937e695444443e36312719090000000000000000000000000e1e2c35384244576c8297acc1c6b19c86715c3a2917040000000000000000000e23394e637982858b9ca4b5c9c3b59f8c79634e39230e0000000000000e1e2f404b6072849aa5b2b3ac97816c5746331e0a000a1e32465773899ea8a8a8a8a8a8a8a8a8a8a8a8a8947f6a543f2a1500000000142a3f54697f94a9afafafafafafafafafafafafafafafafafafafafafafafafafa9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000013243343505d6570787c7f807e7d79746d645c4d483c2d2010000000000000000000000000000000000000000000000000000000000000000000000000000000001a30455a6f859aafc3cad4dfd8c3ad9883786f655d504c3f382f241c120900000000000000000000000000000000000000000000000000000000000001080f1a2123292e3233353432302b25221b1009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f23374b5d70859bb0c1cab49f8b78624d3c2b190500000014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000000004182a3a4c5e667a858c8f8d877d6c6352423119090000000000000000091d31455673889db2c8c0ab96816b595959544b44372715020000000000000000000006192c3c494d5759596a7f94a9bfc9b39e89745846331f0a0000000000000000061b30465b7085989a9fa9b5c2c2b6a598836e5b4935210c00000000000a1a2b3c4c5e6a8095a1b3c3b4a28e79634e3929170300031629395b71869bb0bdbdbdbdbdbdbdbdbdbdbdac97826c57422d170000000012273c51677c9199999999999999999999999999999999999999999999999999999996816c56412c1700000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c314250616a7b858d92949594928e8882796f625a4a3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297a5b2b7c3cad3c6b2a0988a827a70655d504c40382f241d120700000000000000000000000000000000000000000000000000000000000000060c0e14191c1e1f1f1d1b15100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f51667c91a3b5c9bbaa97816c5a4835200f00000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000000a1f334758667c8b9aa2a4a59d92816c604e3727150100000000000000021527385b70859bb0c5c3ae99836f6f6f6e69605544311d0a000000000000000000000c2135495b636d6f6f6f7d92a7bcccb9a88b76614c36210c0000000000000000061b31465b70869bb0b4bac6b9b3a49c8777614c3d2c1a060000000002162838495a667c8d9fb5bfc5b09a85705b4a361b0b000000192e44596e8399aec3c8c8c8c8c8c8c8c8c8c4af9a846f5a362614010000000e23384e637984848484848484848484848484848484848484848484848484848484847f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4e606a7f8d9aa2a7a9aaa9a7a79e978e8478645c4a36220d00000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667c87939da5b2b6c3cabeb2a89e978f857b70665e514c40382f201c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001124384c5e70859bb0bfc8b49f8b78624d3d2d1a07000014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000000c22374c6177899ea9b4c0b6b29f937e685544311d080000000000000000182e43586d8398adc2c8b39e89848484837e73604b382715020000000000000000000e23384d637982848484859bb0c5d6c6a38e79644e39240f000000000000000004192e43596e8398aeb1b0aca89e968679635947341f0f0000000002101e3245566278899eabbccbb8a6927d67523d2d1a00000001162c41566b8196abb3b3b3b3b3b3b3b3b3b3b3b29c87725443301c080000000c2135495b636f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6a61503c2813000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758687e939fabb4c0bfc0bec5b8b3aca1998a79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e66747e87929ca5b1b6c2c6b9b4ada29a90857b70665e514c403530251812040000000000000000040a0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d304050657b90a1b3c7baa998826d5b4a362111000014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000000152a40556a7f95a7b8c7d1cabdb39e8874604b35200b0000000000000001162b40566b8095abc0ccb8a79e9999999993816d5645311d090000000000000000071d32475c7286979999999ba3b4c8d0bba6917b66513c2611000000000000000001162c41566b81969d9c9a9791898075635b493a2a180100000000102031424b6074859ba7b8c9c7b39e8875604b36200f0000000014293e53697e939e9e9e9e9e9e9e9e9e9e9e9e9e9e8a75604b35200b000000061a2c3d494e5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55504333200d000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c6176899eb3bcc9d1d4d6ccc9c6c8bfb39e8875604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c566068747d87929ca4b1b5c2c9c0b4b0a29b90857b71665e514a43362f2216080000000000000c171f211f170c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001223374b5d6f8399a9bac7b49f8c79634e3f2f1c080014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000051b30455a70859aafc5d6e5dfccb8a78f79644f3a240f000000000000000013293e53687e93a8bdc8c5b8b3aeaeaeae9f8a75604b36200b00000000000000000a20354a5f758a9faeaeaeb0b4c1c8c8bea9937e69543e291400000000000000000013283e53687e88888785817c766b6157493d2c1c0c00000000071b2d3e4e606d8197a3b5c5c6b9a995806b5645311d090000000011263b50667c8989898989898989898989898989898977624d37220d000000000f1f2c353844444444444444444444444444444444444444444444444444444444443f3c332515030000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a7b9ccdadfd2c5b9b3b0b3b9a995806a5645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000011222f38454b556068737d86919ca4b1b5c2c8c0b4b0a39b90857c716660544c4034261600000000000c1c2933373329211a0f07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4d63788b9fb4c3bcab99846f5d4b37230e0014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000071c31465c71869bb1c6dbefe7d3c2a5907b66503b2611000000000000000011263b50667b90a5b3b3b3b3b3b3b3b3b3a98d78624d38230d0000000000000000081d33485d72889db2b3b3b3b3b3b3b3b3ab96816c56412c1700000000000000000011263a4e6068737371706c6761584b46392c1f0f00000000000d22364a5c687d929fa2a2a2a2a89e8b78624d38271502000000000f23384c5e667373737373737373737373737373737362594834200b00000000010f1a21232f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2a282015070000000000000000000000000000000000000000000000000000000000000000000000000000000004192f44596e8499aec5d6e4d2c1b5a79e9b9ea79f8a77614c382816030000000000000000000000000000000000000000000000000000000000000000000000000000000004111a273137444b556067737c86919ba3b0b5c1c8c1b4b0a39b91857c73665e5144341d0d0000000417293a474c473a362d221b10080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112035495a6b8095a5b6c9b3a1907b65503b25100014293e54697e93a9bec4af9a856f5a45301a00000000000000000000000004192f44596e8499aec0d1ded8c9b6a48e78634e39230e00000000000000000e23394e63788e9e9e9e9e9e9e9e9e9e9e9e8f7a65503a25100000000000000000051a30455a6f859a9e9e9e9e9e9e9e9e9e9e99836e59442e190000000000000000000b1e31424e535e5e5c5b57524c463a32291b0f0100000000000f24394e64798a8d8d8d8d8d8d8d897e685a48351a0a0000000000091c2f404c505e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e4d483b2b1805000000000000060c0e1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a15130d030000000000000000000000000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6dcddc9b5a39b8986899397816c5847331a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d273137444b546067737c86919ba3b0b4c1c8c1b5b0a39b91867c6b62513c2b190500000a1f33475861584e4a3d362d221b100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4b6075879db2bebaab96816c56412c170014293e54697e93a9bec4af9a856f5a45301a0000000000000000000000000012273d52677d92a2b4c1c9c8bbab9c86715b4936210c00000000000000000b21364b6075898989898989898989898989897c67513c2712000000000000000001172c41566c80888989898989898989898988846f5a45301a000000000000000000021324313a3e49484745423c3633291e160b000000000000000c22374c617778787878787878777568604e3c2b190000000000000011222f383b4949494949494949494949494949494937342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e33485e73889db3c8dddbc6b09b857671757e8377624d3a2a180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000209151d263136434b546067737c85909ba3b0b4c0c8c1b5b0a39b91806b5a4834200b00000c21374c61766e645c4f4a3e372e231c110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e324556657b909fb1a99f937e68533e29130014293e54697e93a9bec4af9a856f5a45301a000000000000000000000000000b20354b6073849aa3b1b4b2aa9f8d7b65503d2c1a060000000000000000091e3245576073737373737373737373737373675f4d39241000000000000000000014293e51626c7373737373737373737373736f6654412d180000000000000000000006131e2628343332302c27211f170b0300000000000000000a1f34475961636363636363636260554e42311e0e0000000000000004111c2326343434343434343434343434343434342220180d000000000000000000000000000000000000000000000000000000000000000000000000000610161920202020202020201f0b080100000000000000000001080b151d20202020202020201f0d0b05000000000000081d32485d72879db2c7dcd2bda7927d685760686e625948341c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109141d263036434a546066717b85909aa2afb4c0c7c1b5b19f8c78624d38220d0000172d42576c8183796e645c4f4b3e372e231c1109000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384c5d6d8297a29a8b7f6a604e3b26110014293e54697e93a9b4b4af9a856f5a45301a00000000000000000000000000081c304354617785949b9e9d988b7d685d4c381f0f00000000000000000003162839454b5e5e5e5e5e5e5e5e5e5e5e5e5e514d40301d0a0000000000000000000e22344451565e5e5e5e5e5e5e5e5e5e5e5e5a54483725120000000000000000000000020b11131e1e1c1b17120c0a040000000000000000000004182a3a474c4d4d4d4d4d4d4d4d4b443731231300000000000000000000090f111e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0d0b05000000000000000000000000000000000000000000000000000000000000000000000000000a18232b2e353535353535353535201c14080000000000000009141d202a32353535353535353535221f180d0000000000061b31465b70869bb0c5dbd0bba5907b66504b53584d483b2b1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108141c253036434a515e66707b858f9aa2afb3bfc7bcab917b66513c26110000152a3f556a7f948e837a6f645c4f4b3f372f231c110900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2f3f4c6176879284796a615042311f0b0014293e54697e939f9f9f9f9a856f5a45301a0000000000000000000000000001142636475961747e8689888279685f4e3f2f1c01000000000000000000000a1b283236494949494949494949494949493c3930221200000000000000000000051626343e4149494949494949494949494945413729190800000000000000000000000000000000000000000000000000000000000000000000000c1c2a3437383838383838383836312719130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000618283640434a4a4a4a4a4a4a4a4a47302618080000000000091926313540484a4a4a4a4a4a4a4a4a37342a1d0d0000000004192e44596e8399aec3d8d1bca7927c67523d3e4337342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108131c253035404c515d65707b848f9aa1aeb3bfa8937e69533e2914000012273d52677c92a1998e847a6f655d504b3f382f241d120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111e334657657b7d6f635b5043332414020014293e54697e8c8a8a8a8a8b846f5a452f1a000000000000000000000000000008182a3b475660697174736d635b4e413121110000000000000000000000000a161e213334343434343434343434343427241d12040000000000000000000000081622292c343434343434343434343434302d25190b000000000000000000000000000000000000000000000000000000000000000000000000000c181f222323232323232322201d150900000000000000000000000000000000000000000000000000010d171c1f20202020202020200e0c07000000000000060c0e1b1f2020202020202017150f050000000000000010233646535860606060606060605f5b433626140100000001142637444b555d5f606060606060605f4c483b2a180500000001172c41566c8196abc1d6d4bfa9947f6a543f2a2e2220180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202f383f4c505d656f7a848f99a1aeab96816b56412c1601000f253a4f647a8fa4aea1998f847a70655d504c40382f201c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729394b5d65675f4e493d33251506000012263b4f60697575757575756f6554412d180000000000000000000000000000000c1d2a38454b545c5f5d584e4a3d312313030000000000000000000000000003090b1e1e1e1e1e1e1e1e1e1e1e1e1e12100a0000000000000000000000000000050e14171e1e1e1e1e1e1e1e1e1e1e1e1a181208000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0d0b08020000000000000000000000000000000000000000000000000001111f2a3134353535353535353523211a0f010000010f1a21233035353535353535352c2a221709000000000000162b4053646e7575757575757575746d5443301c08000000081d314455606a72757575757575757574625948341f0b0000000014293f54697e94a9bed3d7c1ac97826c57422d190d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c242f383f4b505d656f7a848e999f98836e59432e1904000d22374c62778ca9bab3afa29a8f847b70665e514c403530251c1308010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2e3f4b50524d41352c1f15070000000c1f32424f545f5f5f5f5f5f5a5447372512000000000000000000000000000000000c1a2731363f4649484339362d1f1305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f2f3d46494a4a4a4a4a4a4a4a39362d1f0f00000f1f2c3639464a4a4a4a4a4a4a4a423e352717050000000000192e43586e828a8a8a8a8a8a8a8a8b73604b35200b0000031629394b60737f878a8a8a8a8a8a8a8a8b77624c37220d0000000011273c51667c91a6bbd1d9c4af9a846f5a3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c232e373f4b4f5c646f7a838c9886715b46311c06000b20354a6074899fb4c9c0b3afa29a90857b70665e514a433630251c140801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e373a3d3a30211a0e0000000000021424323b3e4a4a4a4a4a4a45413729190800000000000000000000000000000000000a151d20293134332d23211a0f01000000000000000000000000000000000000000000000000000000000001080b0e121415161513100c0a04000000000000000000000000000000000000000000000000000000000001080b10131514120d0c060000000000000000090b0b0b0b0b00000000000000000000000000000000000000000002090b101414100b0801000000000000000000000000000000000000172a3d4d5a5e60606060606060605e4a3d2d1a0708182c3d494e5b5f6060606060606057524535220f0000000000162b41566b80969f9f9f9f9f9fa98c77624d37220d00000a1e3246576a80959d9faa9f9f9f9f9f97826d5948341f0b000000000f24394f64798ea4c6d6dcc7b29c87725443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c232e373e4b4f5c646e798388735e48331e0900071c30435471869bb0b5c2c7c0b4afa29a90857b716660544a433630261d14090100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232528251e13060000000000000006141f26293535353535352f2d25190b0000000000000000000000000000000000000002090b141c1f1e180e0c0700000000000000000000000000000000000000000000000000000000030a0c151d202427292b2b2a2825211f170d0b060000000000000000000000000000000000000000000000000309141d2025282a29272320190e09020000070b151e202020202013100b01000000000000000000000000000000000a151d2026292925201d140900000000000000000000000000000000001c31465a6b747575757575757575705b4a36210c132536495b637074757575757575756c63523e2a15000000000013293e53687e93a8b5b5b5b5b5a48f7a654f3a251000000c21364b6176899eb2b4bbb5b5b5b3a18e79634e3b2a1805000000000c21374c61768ca8b9ccdfc9b49f8a75604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b222e373e4a4f5b636e79634e39230e00000013253652677d909ca4b1b5c2c8c0b4b0a39b90857c736760544b433631261d150902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1012100a01000000000000000000020c12142020202020201a181208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b161e21273135393c3f40403f3d3a3733292320190e050000000000000000000000000000000000000000000b171e2631353a3d3f3f3c38352c201d150a131c202a33353535353528251e13050000000000000000000000000004121a2832363b3e3e3a3531261911030000000000000000000000000000001f34495e74898a8a8a8a8a8a8a8a79634e39230e1c3043546379858a8a8a8a8a8a8a8a816c57422c17020000000011263b51667b90a6bbcacacabca7927c67523d271200081c2e3f53687e93a8b9caced9d2c2af99846f5b4a361d0d00000000000a1f33475874899eb4c9decdbaa98c77624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b222d363d4a4e5b635b4936210c0000000825394d5f677c86919ca4b1b5c1c8c1b4b0a39b91867c736760544b443731271d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d181f29323637444b4e525455555453504c473a38352b20180d010000000000000000000000000000000000010f1b293337444b4f535454524d493c3632281a2530353f484a4a4a4a4a3d3a3123130100000000000000000000000412222f38454b505353504b44372e21110300000000000000000000000000001c31475c71869c9f9f9f9f9f9f907b66513b261120354a6072869b9fa99f9f9f9f9f8b78624d38230d00000000000e24394e63798ea3c5d5e8d4bfaa947f6a553f2a15000e23374b5d71869cb1c6d6e2dec9b5a4907b65503d2d1a00000000000004172a3a5c71869cb1c6dbd7c7a48f7a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101b222d363d494e493d2c1a060000000a1e30414d5e66737c86919ba3b0b5c1c8c1b5b0a39b91867d736760554b443731271a130600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b141b1d20202020202020202020202020202020202020202020202020202020202012100a010000000000000000000000000000000000000002090b0f1315161514120e0b0801000000000000000000000000000000000000000000000000000009141d2a3439464b5255606367696a6b6a68656158554d493c342b1d1409000000000000000000000000000000000f1f2c39464b556065686a6967625a534b45382f36434a555e6060606060524e41311e0b000000000000000000000012222f404c56606569696560554b3f2e21110000000000000000000000000000192f44596e8499aeb5b5b5b5a8937e68533e291b2e3e51667c91a3b4bab5b5bfad98836e5a4935200c00000000000c21364b61768ba7b8cce0d7c1ac97826c57422d1704182a3b4f657a8fa4b5c9e4e7d4c4b19c86715d4c381f0f000000000000001a2f44596f8499aec4d9d1bca7927c67523d271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a212c3639362c1f0f0000000001132330404c546067737c86919ba3b0b5c1c8c2b5b1a49c92867d736860554b4538312413020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c282f3235353535353535353535353535353535353535353535353535353535353528251e130500000000000000000000000000000002080b161e2124282a2b2a292724201d140c0a03000000000000000000000000000000000000000000000d1926313b484c5761686e75797c7e80807f7d7a76716a625a4d483b3126190b00000000000000000000000000000e1e2c3d4957616b747a7d7f7e7c78716960564c3f4354606a737575757575685f4e3a2510000000000000000000000a1a2f404c5e66757b7e7e7a73655d4b3f2e180800000000000000000000000000172c41576c8196acc1cacac0ab96806b56412b22374b5c70859ab0c2cdd7c7b3a18e79644e3c2c190600000000000a1e33465773899eb3c8ded9c4af9a846f5a3625130b1f3447596d8398adc2d2e5dfcbb7a6927d67523f2f1c0100000000000002172c41576c8196acc1d6d4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a2123211a0f0100000000000513222f36434a546066717c85909ba3b0b4c0c9c2b5b1a49c92877d746860564e42311e0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1c2c3a44474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3d39302313010000000000000000000000000109151d202832363a3d3f40403f3c39353126211e160b04000000000000000000000000000000000000010f1d2b37444b59626c767d84898e9194959594928f8b8680786d62594b4437291b0e00000000000000000000000006192c3c495b637580898f929494918d867e74655d4a4a60727f888a8a8a8a8a7d68523d2813000000000000000000031628384c5e667c879093938f877b655d4b3626140100000000000000000000000014293f54697e94a9bed3d8c3ad98836e58432e2c3c4f647a8fa2b4c8e2d1c1af99846f5c4a361e0e000000000000031729395c71869bb1c6dbdcc7b19c87725443301c1426364c61778a9fb4c9dfe9d6c6b29d8874604b362011000000000000000014293f54697e94a9bed3d7c1ac97826c57422d170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0c060000000000000000041218253036434a515e66717b85909ba2adb4bac7c2b6b1a59c92877e7468604e3a260c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014283a4b575d606060606060606060606060606060606060606060606060606060606060524d41301e0a000000000000000000000009141d27313638454b4f5354555554514e4b44373632291f170c00000000000000000000000000000000000f1f2c3b4855606977818992999ea8a7a9aaaaa9a8ab9f9c958b82776a6055463a2b1e0e00000000000000000000000c2035495a637988969ea7a8a9a9a7a49c93877b6b6054667c919d9fab9f9f957f6a55402a15000000000000000000091e324556667c8d9da6a8a8a59c8c7b655443301c0800000000000000000000000011273c51667c91a6bbd1dbc5b09b86705b382835495b6e8399aec0d1ddc8b4a38f7a65503d2d1a0000000000000000192e44596e8399aec3d8dec9b49f8975604a35201c3043546a7f94a9bacee2e1cdb9a8947f6a5544311d08000000000000000012273c51677c91a6bcd1d9c4af99846f5a362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c253035404c515e66707b8590989fa9b3b9c5c3b6b2a59d93877e68533a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2f44576972757575757575757575757575757575757575757575757575757575757575675f4d392510000000000000000000010f19263137444b52566064686a6b6a6967636055524b4639332a1c140400000000000000000000000000000d1d2c3d495962737f8a969ea8aeb4b9c6bebfc0bfc9bcb5b1aa9f978a80736158483c2b1c0c000000000000000000091d30404d6378889da6b3b8c5bfbec2b5b1a59d8d8072606b8096abb5bcb5ad97826d58422d180000000000000000000b21364b6075889dabb7c4c3b6aa9c8673604b35200b0000000000000000000000000f24394f64798ea4c6d6ddc8b39e88735645323b4d63788c9fb4cadfd3c2b09b85705d4b371f0f0000000000000001172c41566c8196abc1d6e1cdbaa98c77624c372220354b6073879db2c7d8ead9c8b49e8976614c3727150200000000000000000f24394f64798ea4c6d7dcc7b19c87725443301c0d0d0d0c0a030000000000000000000000000000000000030a0c101315151413100d0b0500000000000000000000000000000000000b141b1d20202020202020200f0d07000000000000000000000000000000000000000000000000000008131c202f38404c515e66707b838a949ea7b9cccac3b7b2a59d8a745947341f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523d2812000000000000000004121f2c37444b5560676f75797d7f807f7e7c79756f6761574c473a311f170c00000000000000000000000005182b3b495b637785949fa8b4b9c6c9ccd6d3d3d1d0dacfcac8bbb4a99f958376625a483a2a170400000000000000000f24394d5e6f849aa6b7c4ccd5dacfcac5c3b6ab9f9582736c8196acc1cfc5af9a85705a37261401000000000000000011263c51667b91a6b7c9d4d3c8b6a48f7a644f3a250f0000000000000000000000000c21374c61778ca8b9cde0cbb8a68b76604b3647596c8197abbccfdec9b6a4917c66513f2e1c01000000000000000014293f54697e94a9bed3e9d7c7a48f7a644f3a252c3c51667c91a5b7cae5e2cebbaa96816c58463319090000000000000000000c22374c61778ca8b9cddec9b49f8975604a3522222222211e170b0000000000000000000000000000090b171e2125282a2a292825221f180d0b05000000000000000000000000000f1d282f32353535353535353524221b1002000000000000000000000000000000000000000000000000000007121d242f38404c505d656e767e899eb3c9ded4cac3b7a88c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a30455a6f859a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f947f6a553f2a15000000000000000513222f3d49556068747c848a8f9294959594918e89847d766b61584e4233291c0d00000000000000000000000b203448596379889ba3b4bac6cdd6d7cdc9c3bebcbbbcc0c6c9cec7bab4a1998678625847331f130000000000000004182a3b51667c91a2b4c4d4e0d5c9bcb5b0aeb2b6b5a097816d8095abc0d5c7b29d87725544311d080000000000000000142a3f54697f94a9c4d4e7e6d3c2a8927d68533d28130000000000000000000000000a1f33475874899eb4c9ded5c4a38d78634e394c62778a9fb4c9d9d4c3b19c8673604a35201100000000000000000011273c51667c91a6bbd1e6d1bca7917c67523c2735495a6f8499afc3d4e6dfcab49f8b78624d3a2917000000000000000009181c2a33475874899eb4c9decdbaa98c77624c37373737373633291b0b000000000000000000000007121d242933363b3e3f3f3f3d3b37342a2220190e04000000000000000000000b1d2d3a44484a4a4a4a4a4a4a4a3a372e201000000000000000000000000000000000000000000000000000020c171f2c353e4b4f5f67747d86949ea7b9ccd7cdc5b8b3a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ac97826d57422d1802000000000000132330404c5b63737e8892999fa9a8a9aaaaa9a6a89e999289807668604c463a2b1d0d000000000000000000000d22374c6277879da6b4c1cdd7d8cec6bab4aea8a6a5a7aab1b5c2cccdbfb3a49c8676614c41311b0a0000000000000b1f3447596f8499afc0d0e2d5c5b8ab9f9b999ca5b2b19f957f7f94aabfd4cab49f8a75604b35200b000000000000000014293e54697e93a9c1d1e1e1d0bfa7927c67523d271200000000000000000000000004172a3a5c71879cb1c6dcd0bba5907b665046576b8095a9bacddfcab7a5927d685443301c070000000000000000000f24394f64798ea4c6d6e9d4bfa9947f6a543f28384d63788c9fb5cadfe4d1c0ae98836e5a48351c0c00000000000000061828353a474c5c71879cb1c6dcd7c7a48f79644f4c4c4c4c4c4b46392917030000000000000000010f1a21303939464c505354555453504c473b38352b1f170c00000000000000000014283a4b575d60606060606060604f4b3e2e1b07000000000000000000000000000000000000000000000009151d29333c494d5c64707c87929ca4b3b9c5cfc7bab4a79e938678634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a9bacdcacacacacadacfcacfdacacacacacacacacacacacacacac4af9a856f5a45301a0500000000000a1a30414d5e667985939da6aeb4bac7bfc0bfbec6b9b4aea79e95897e6e6158483b2b1c0c0000000000000000000b21364b6075869ba8b9cde1d2c8bbb4a89f9993919092959ca4b3b8c5d0c2b6a499836e5f4e3928160300000000000c22374c61778b9fb4cadfe0ccb8a79e8d858387919da6b49f8d8499afc4d9cebbaa8d77624d38220d00000000000000000f253a4f647a8fa3b4c4cdcdc3b3a18d78634d38230e000000000000000000000000001a2f44596f8499aec4d9d2bda8937d68534b6175899eb3c7d7d5c5b29d8774604b362513000000000000000000000c21374c61768ca8b9cde1d6c1ac97816c57423245566b8096abbccfe3ddc8b4a28f7a644f3c2b19000000000000000010233546535861626f8499aec4d9d1bca7917c67626262626262615746331e0a0000000000000004121f2d36404c51576165686a6a6968656259554d483c332a1c1103000000000000001b2f445769727575757575757575645c4b37220d00000000000000000000000000000000000000000004121927313a464c5a626e7a85919da5b1b5c2ccc8beb2a99f96887e73635a4935200c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778a9fb4bdcddadfecdac9bcb5bcc9c1c6c9cdd7cdcdcdcdcdcdcdcdc7b29d87725d48321d0800000000021527384d5f677c8a9ba3b2b7c4c9cdd6ccc8c7c6c9ccc9c5b9b3a79e9383766259483a2a19090000000000000000091e32455663798a9eb4bdcec2b5aa9f968a837e7c7b7c8086919ea7b8c5d3c2b3a1927d685745321e09000000000011263c51667b91aabbcee2d3c3b39e897a706e727c889ca4ab9f99a1b3c7dcd8c8a58f7a65503a251000000000000000000d22374b5c70859ba6b4bab9b4a599836e5a4935200c00000000000000000000000002172c42576c8197acc1d6d5c0ab95806b5655697e93a7b8cce0ccb8a7937e695544311808000000000000000000000a1f33475874899eb4c9ded9c4af99846f5a44364b6075899eb3c9dae6d3c3b09a85705c4a361e0e0000000000000001162b3f53646d7777778297adc2d7d5bfaa95807777777777777775614b36210c0000000000000412222f3d4a4e5e666f767b7d7f7f7e7d7a77716a625a4c473a2f2114060000000000001d32485d72878a8a8a8a8a8a8a8a7a644f3a240f00000000000000000000000000000000000000000412222f37444b58616b78838f9ba3b2b6c3c9cac0b4b0a0988b8076696055493c2c1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3447596a7f949fb0bccddae3cfbcab9faba7acb1b4b9c6b8b8b8b8b8b8b8b8c3b49e89745f49341f0a00000000091d314556677d8d9fa8b5c1cbd4ccc9c5b8b3b1b1b3b9c5c8cbc5b8b3a1998678625847372715010000000000000002162838495b677d929fb1beb2a49c8b80776e696766676b717c899ea7b8ccd0bfb39d8875604b36210f0000000000152a40556a7f95aac8d9dfcab6a5917c665c595e6677869ca5b4afb3bfd0e3d2bca7927d67523d28120000000000000000081b2e3e4d627888989fa9a89e978777624c3c2c190600000000000000000000000000142a3f54697f94a9bed4d8c2ad98836d586074879db2c5d5d6c6b39e8875604b372715000000000000000000000004172a3a5c71879cb1c6dcdcc6b19c87715c3b4052687d92a7b8cce7decab6a4917c66513e2e1b000000000000000003182d43586d828c8c8c97a0b1c5dad7c3af9e958c8c8c8c8c8c8c826d58432e18000000000000122230404c5b63707c848b909394949492908c8780786c61584c3f3124150700000000001a30455a6f859a9f9f9f9f9f9f917c67513c2712000000000000000000000000000000000000000012222f404c55606976808b98a0b0b4c1caccc3b6b2a29b8f82786b61584b44372c1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b50616c81969eb0bcccdfcab59f8d9591969b9ea8a2a2a2a2a2a2a2a2a2a2a59b86715c46311c07000000000b20364b6075889da8b9c6d2cfc6b9b4aba79e9c9c9ea7aab3b8c4ccbfb3a49c8676615544311d0f00000000000000000a1a2c3d4d5f6d8197a2aca09886796b615853515052555e6678899eb3c4d4cbb7a6937e69533d2d1a0700000000192e43586e8398adc3d8dcc7b29d87725e4d404c596277879daabbc7d0ddead4bfaa957f6a55402a15000000000000000000102035495a6277828a8e8e898176625947341e0e000000000000000000000000000012273c51677c91a6bcd1dac5b09b857055677d92a5b7cae1cdb9a8957f6a57453219090000000000000000000000001a2f445a6f8499afc4d9dec9b49f89745951525e70859bb0c5d5e0d2c1b29c8773604b3520100000000000000000091e33495e73889ea1a1adb1becee1dfccbcafaaa1a1a1a1a1a19b85705b37271502000000000e1e30404d5e667984919a9faaa8a9aaa9a8a5a49c958b8176655d4e423325150700000000182d42586d8297adb5b5b5b5a9947f69543f2a1400000000000000000000000000000000000000091d2f404c5e66747e89969fa9b2bec8cec5b8b3a59d91857a6e625a4c463a3127190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d334351636c80959eafbccccab59f8a807c8186898c8d8d8d8d8d8d8d8d8d8d8c877a644f3a240f0000000000091d314556647a8a9eaabbccbeb2a89e958e898787898d949da6b3bfcfc2b5a49b8473604b3d2d1a0700000000000000000e1f30414b6074849396908275635b4c473a3c3b3d404c5a677d92a6b7cbd4c4b19c86725b4a36210c000000001a2f455a6f849aafc4d9d7c1ac97826c5740303b4859647a8b9fb4c3d4e6ecd7c2ac97826d57422d1800000000000000000006192c3c4959626d767978756c6158473b2a180000000000000000000000000000000f243a4f64798fa4c6d7ddc8b29d88736973869cb1c3d4d8c7b49e8976614c39281600000000000000000000000002172c42576c8197acc1d6e1cdbaa88c776666676b7c91a3b5c9e0d3c2b5a3937e685443301c080000000000000000071c32475c71879cb1b7c2c5cedce9eadaccc3bfb7b7b7b7b7b29d88735544311d0800000005192b3c4d5e667c8a9aa2afb4bbc8bfbfbebdc2b6b1aa9f96887b6960504333251503000000152b40556a8095aabfcacac1ac96816c57412c17020000000000000000000000000000000000000f24384c5e667c87939ea7b4bac7cfc8bbb4a79e94877c70645c4d483c33291d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001525344551626b80959eafbbcfbcab9f8d7e6c717476777878787878787878787772645c4a36220d0000000000021527384a5c667c8c9fb4b8b3a09889807973727174787f8899a1b2bfcfc2b4a295806b5b4a362110000000000000000000131e32455660737e817b6d60574a3d332a2726272f3c4b6074889db2c8ddcab6a48e79634e39240e000000001b30465b70859bb0c5dad3bea9947e69543f292b3b4a5c6a7f95a5b7cadfefdac4af9a856f5a362614010000000000000000000e1e2c3b484c5760636360564c473a2a1d0d0000000000000000000000000000000c22374c61778ca8bacddfcab59f8d7e7e849aa4b5c9e2cebaa996816b5847331b0a00000000000000000000000000152a3f546a7f94a9bfd4e9d7c6a9947f7c7c7c808b9fb4c1d2d3c2b6a49b8573604b362614010000000000000000051a2f445a6f8499afb4bac7c2cbd9e9eadacdc4c0bcbcbcbcb49f8a75604b36200b0000000b2035485a667c8c9fa8b4c0cacecfcac5c1c0c1c6c8bbb4a69d8d7e6a61504332200d00000013283d52687d92a7bdd2d9c3ae99846e59442f190000000000000000000000000000000000000011263b51667c909ca4b3b8c5cec9bfb2aa9f96897e74675f4f4b3e352b1f170b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071626344451626b80959daebbc9bcab9f937f6961616263636363636363636362594f4a3e2d1b070000000000000a1a2d3e4c5e687e939fa79e9283776b635b5c5c5a626a768399a1b2c3d1c0b49f8c79634e3e2d1b07000000000000000002162838455560686c665e4b45392d1f171211121d3144556d8298adc2d7d3c2a9947f69543f2a14000000001c31465c71869bb1c6dbd2bda7927d68523d281d2d3e4b6075879db2c3d4e6dcc7b29d87725443301c08000000000000000000000e1d2b3439454b4e4e4b453833291c0d000000000000000000000000000000000b1f34475974899fb4c9decfbcab9f93949aa1b3c2d2d3c2b49f8b78624d3a2a17000000000000000000000000000012273c52677c91a7bcd1e6d6c2ae9d94919191959fa9bacddecab6a49c8678625544311d1509000000000000000002172d42576c81979b9fa9a9aebbcbe2e0cdbcb0aba7a7a7a7a7ab8d78624d38230d0000071b2e3e4d6278899eaabac6d1d4c9bcb5b0ababacb1b5c2c4b7ab9f93806a614f3c271300000010253b50657a90a5c9d9dbc6b19c86715c3a291704000000000000000000000000000000000002172c42576c8197acb6c3cccac1b5b0a1998b81766960564d41372e20190e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081626344451626a7f949daebbc9bcb59d937f6a614d4d4d4d4d4d4d4d4d4d4c473b362d201000000000000000000f202f404e60697e8a8e887d6e62594e493d3c484d5861738399a5b7cacebbaa99846f5c4a36220a0000000000000000000a1a2837444b5357514c4032281b0f04000001142637556a7f94aabfd4d9c3ae99836e59442f19000000001b30465b70859bb0c5dad1bca7927c67523d27121e324556677d92a5b7cadfdfc9b49f8a75604b35200b00000000000000000000000d18202832363939363228201c13080000000000000000000000000000000004182a3b5c72879cb1c7dcdac9bcb5a8a9afb3bfd0decab6a496816c5948341c0c00000000000000000000000000000f253a4f647a8fa4c7d7eaddcbbbaea9a6a6a7abb4bac7d7dcc7b19c87766961574c403127190b00000000000000000f253a4f647b8185898e949daec4d5d8c4b09e96919191919191907a65503b251000000d22374b5c6f849aa7b9c8d7d4c3b6ab9f9b9695979ca4afb3c0bcb49e947f6a543f2a150000000e23384d63788dabbccfdec9b39e89745846331f0a000000000000000000000000000000000001162b40566b8095abc0ccc3b7b2a39b8f83786c61584b453830221b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081626334450616a7f949db5bcc9bbae9d947f6a6150433838383838383837342a221b1002000000000000000001122231424f6169767975685f4c483b362c2b353a47556075879db2c5d5c8b3a18e7a644f382816020000000000000000000a192731353e413b382f1e160a000000010813293e53687e93a8bdd3dcc7b19c87725c362614010000001a2f455a6f849aafc4d9d3bda8937e68533e29131628384b6074879db2c8d8e2cebbaa8c77624d37220d000000000000000000000011212f373b4747474747463530251808000000000000000000000000000000001a2f445a6f8499afc4d9e7dacfcabebec4c7d0e3dcc7b19c8676614c3b2b190500000000000000000000000000000d22374d62778ca9bacde2e9d9cbc2bebbbbbcc0c9cdd7dcdecab6a49c877f75665e4b4437281b0b000000000000000d22374b5d646c7075797f94a6b8cbd6c0ab96807c7c7c7c7c7c7c78624d38220d00021527384f647a8fa2b4c5d6d5c5b6a59d8d85818082868e9aa2b4bab5a499846e59442f190400000b20364b60758a9fb4cadfccb9a88b76614c36210c00000000000000000000000000000000000013283e53687d93a8c6b9b3a59d92857a6e635b4c473a31271a120700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081625334350616a7f939fabbcc9bbae9d947f6a625044342323232323221f180d07000000000000000000000004142432424f58616360564e41342a211a19202a374556677c91a6b8cbd0bfac97826d5645321e090000000000000000000009151d20292c26241c120300000709151d253041556a8095aabfd5dec9b49e89745443301c08000000182e43586d8398adc2d8d4bfaa947f6a553f2a150a1d314455697e93aabbcee2d8c8a48f7a654f3a251000000000000000000000081c2f3f4b505c5c5c5c5c5b4a4336251300000000000000000000000000000002172d42576c8297acc1d7e7d5c5b8b3acafb4c0cfd9bca6917c69604f4232231202000000000000000000000000000b20354a60758a9fb4c9dff4e9dacdc4c0bfbfbfbfc1c2c7cad3c2b6a59d94877c6c60554639281808000000000000081b2e3f4b4f5755606373889db3c8d3bea8937e69676767676767625a4834200b00091d3145566e8398adc0d0e0ccb8a79d877a706c6b6c717984939fa9a69c8675614b36210c000000091d31455673889db2c8ddd6c6a38e79634e39240e00000000000000000000000000000000000010263b50657b90a5b4a89e94877d72655d4d493c332a1d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007152533434f61697e8d9fabbcc9bbae9d94806b6251443426160e0e0d0b050000000000000000000000000000061424323a464c4e4b4538311f180d06050c1928384b6074889eb3c8ddc9b39e8975604b36210b000000000000000000000001080b1317110f0900040a101b22273136434a5f70859ab0c5dae1cdb9a88a75604b35200b000000152a40556a7f95aabfd4d7c1ac97826c57372715011426374c61778b9fb4c9dfd2bca7927d67523d2812000000000000000000000e23374b5d65727272727270605443301c07000000000000000000000000000000152a3f546a7f94a9bfd4e0cbb8a69e979aa2b4bcc9c9b49f8c7e69604f4130201000000000000000000000000000071c30435472879cb2c7dcf1e0cdbcb0abaaaaaaaaacadb1b6c2c9c3b7b2a59d9181736157463626140100000000000010202e373a37444b546c8297acc5d6c0ab96816b5652525252524d483c2b1905000b20364b60758a9fb4c9ded6c6b39e8978645c5656575c646f7e8b97978878625746321e0a000000021527385b70859bb0c5dad0bba6917b66513c26110000000000000000000000000000000000000e23384e63788daa9f97897f756760544b3f352c1f170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007152532434f60697e8d9fabbbc8bbaf9e95806b6251443426160800000000000000000000000000000000000006141b293336393632281a1305000000000a1d3144556c8197acc1d7ccb9a7907a65503b2510000000000000000000000000000000020000060c171f212d3637444b5460697d92a2b4c8dddfcab49f8a75604a35200b00000012273c52677c91a7c3d4dbc5b09b85705544311d08091f3347586f8499aec4d9d4bfaa947f6a553f2a150000000000000000000010253b50657b86878787878572604a35200b00000000000000000000000000000012273c52677c91a7bcd1ddc8b39e888285929fabbccebbaa9f937e695f4d3e2e1d0d000000000000000000000000001325365a6f859aafc4daefd8c4b09e969595959596989ca4abb4bac7c3b7b29f978375615443301c1000000000000002101b222526313650667b90a7b9ccc3ae98836e59433c3c3c3c38342b1d0d000010253a4f657a8fa9bacde1ccb9a8927d685a4b3e403e4a4e606979828278625a483929160300000000182e43586d8398adc2d8d3bea8937e69533e29140000000000000000000000000000000000000b20364b60758b998c81776a60564a43362e21190e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007152532424f60687e8d9faabbc8bcaf9e95806b62514434261608000000000000000000000000000000000000000b171f2124211e160a0000000000000115273752687d92a7bdd2d6c5aa957f6a55402a1500000000000000000000000000000000020f1a212a33373e4a4f556066727e8c9fb4c0d1e4ddc8b39e88735443301c070000000e23384d63788da5b7cadec9b49f8975604b35200b04172a3a54697f94a9bed4d7c2ac97826d57422d180000000000000000000011263b51667b909c9c9c9c8e79644f39240f0000000000000000000000000000000f253a4f647a8fa4c7d7dcc7b29d8772707d8d9fb4bec8bbb49f8d7d675c4a3c2b1b0b000000000000000000000000182d42576d8297acc2d7ebd6c0ab9680808080808183878d969fa9b7c3cabdb1a1998372604b3e2d180800000000000000080d0f1420364b6075899eb3c9c6b09b86715b39292727272220190d000000142a3f54697f94a9c7d7dec9b39e8975604b3c2e2b2d36424f5b636d6d625a483c2b1b0b0000000001162b40566b8095abc0d5d5c0ab96806b56412b16010000000000000000000000000000000000091d324556738884796c61594b4538302518110600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006142432424e60687d8c9faabbc8bcaf9e96806c6251443426160800000000000000000000000000000000000000040a0c0e0b090300000000000000000f24394f64798ea4b9ced8c3ae98836e59432e190400000000000000000000000000000a151d2c353a474c545c646c747c85939faabbcedeefdbc6b09b86715b362513000000000c2035495a72879db2c7ddcdbaa8907b65503828150212273c51677c91a6bcd1d9c4af9a846f5a3625130000000000000000000011263b50667b90a5b1b1aa957f6a553a2a180400000000000000000000000000000d22374c62778ca9bacddfcab49f8a75606a7f94a0b2c1cebcab9f8b7a645a48392918080000000000000000000000152a40556a7f95aabfd4e3ceb9a48e796a6a6a6a6c6d7278818b9da5b7c5cebfb3a195806b5c4a36251300000000000000000000081d3144556d8298adc6c8b39e88735746321e12120d0b0500000000172c42576c8197acc1d6d9c4af9a846f5645321d161a21323d4a4e58574d483c2b1e0e00000000000013293e53687e93a8bdd3d8c3ae98836e59432e19000000000000000000000000000000000000021528384e63796f635b4c473a32281c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006142431424e5f677d8c9faabac7bcb09e96816c625144342616070000000000000000000000000000000000000000000000000000000000000000000d22384d62778da2b7ccdbc6b09b86715b46311c06000000000000000000000000000c1a28323d494e58616a72798188919ba3b4bbc8d8eae3cfbfaa95806b55402b160000000006192c3c576c8297acc3d4d7c6ac96816c5645321d0a0f243a4f64798fa4c6d7dcc7b29c87725443301c0700000000000000000010263b50657b90a5bac5b09b85705847331f0b00000000000000000000000000000b20354a60758a9fb4c9dfcebbaa8d7762616e8298a3b5c5c9baa99d8878625746362614010000000000000000000012283d52677d92a7bcd2e6d1bba6917c6655555557585a626c79879da6b8cbd0bfb49f8c7a645443301c070000000000000000000215273751667c91a8baccb8a78b76614b36210c0000000000000000192e43586e8398adc3d8d6c1ab96816c563828160007141f2d3639424238352b1e0e0000000000000011263b50667b90a5bbd0dbc5b09b86705b392917030000000000000000000000000000000000000a21364a5b635b4e493d342a1e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006142331414d5f677d8c9fa9bac7bcb09f96816c6251443326150700000000000000000000000000000000000000000000000002020000000000000c21364c61768ba1b6cbddc7b29d88725d48331d080000000000000000000000000c1c2938454b5b636c777f878e969da6b0b5c1ced8e6e4d5c5b3a18e79644f39240f000000000010263b50657b90a5b7caddc8b39d8875604b3928160c22374c61778ca8bacddfc9b49f8a75604a35200b00000000000000000010253b50657a90a5bacab49f8b77614c3928180a00000000000000000000000000071c30435472879cb2c7dcd8c8a58f7a65506075859ba7b8c8c7b7a69b8575615443301c130300000000000000000010253a50657a8fa5c8d9ebd3bea9947e69544040413c494d5b6377889eb3c2d3cfbcab9b8572604a35200b000000000000000000000b21364b60758a9fb4c7c5a38e79634e39240e00000000000000001a2f455a6f849aafc4d9d5bfaa95806a55402b150000010f1a21242d2d2320190e00000000000000000e23394e63788ea3c5d5ddc8b39d88735746331e0a000000000000000000000000000000000000071a2d3d4a4e4a3d352c1f180c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005132330414d5f677c8b9fa9bac7bdb09f96806b625144332515050000000000000000000000000000000000000003090b111717100b080200000d22374d62778ca2b7ccddc8b39e88735e49331e0900000000000000000000000919293a4656606b79818a949ca4abb3b8c4c9d2e2eae2d4c6b8a799836e5c4a36220d00000000000b20354b6074879db2c5d6cbb8a6937e685745321e141f34475974899fb4c9decebaa98c77624d37220d00000000000000000010253a4f657a8fa4c3cfbcab937e69574636281a0c000000000000000000000000001325365a6f849aafc4d9d2bca7927d6752576278899eaabbcec4b5a3998372604b423121110000000000000000000d23384d62788daabbcee2d6c1ab96816c56412c2c2b353d4a59667c91a4b6c9d9c9b5a3907b655037271502000000000000000000091e3245566e8399aeb2b2a6907b66513b261100000000000000001b30455a70859aafc5dad5c0aa95806b55402b1600000000070c0e18180d0b060000000000000000000c21364b61768ba7b8cce0cbb8a68b76614c36210c000000000000000000000000000000000000000f1f2d3639362d211a0f04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005132330414d5e667c8b9fa9bac7bdb09e95806b62504332231303000000000000000000000000000000040a0c161e21262c2d25201d1516151928384f647a8fa4b9cfddc7b29d88725d48331d08000000000000000000000114263746586174808b979fa9b1b6c2c8cbd5dde4e1d8cec4b7a89e8978624d3e2d1b070000000000081c3043546a7f95a7b9ccd5c4b29d8775604b4131221b2a3b5c71879cb1c6dcd8c7a48f7a644f3a250f0000000000000000000d23384d62788da5b7cac9b29d8775615445382a1c10020000000000000000000000182d42576d8297acc2d7d4bfaa957f6a55485a657b8c9fb4bdcec2b3a196806b604e3f2e1e0e00000000000000000b20354b60758a9fb4cadfd9c3ae99846e59442f1919202d3b4d5e71869cb1c6dcd1c1ad98836d5544311d080000000000000000000316283851677c919c9c9c9c937e69533e291400000000000000001a2f44596f8499aec4d9d6c1ac96816c57412c170000000000000003020000000000000000000000000a1e32465773899eb3c8ded5c4a6917b665136261401000000000000000000000000000000000000010f1a2123211a0f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005132330404c5e667c8b9fa9bac8bcb09e95806b614f4130211000000000000000000000000000000c171f212832363c42423a3631272b2b2b3545566a7f94aabfd4dbc6b19b86715c46311c0700000000000000000000081d314455617684959faab4bac7cad3dde0e5ded6cdc8bbb4a69d8a7b655a48352010000000000000011426364c6176899eb3c3d3cab7a597816c5f4e42362d34395a6f8499afc4d9d1bca7927c67523d27120000000000000000000b20354b6074879db2c0cab6a59882726056473a2e20140100000000000000000000152a3f556a7f94aabfd4d7c2ac97826d573c4b5d697e939fb1c1d0bfb09e927e685d4b3c2c1c0c00000000000000081d31445572889db2c7dddbc6b19b86715c3a2917060f1d3040546a7f94a9bfd4dec9b49f8a75604b36200b000000000000000000000b20354a60728087878787877f69543f2a140000000000000000182d42586d8297adc2d7d7c2ad98826d58372614010000000000000000000000000000000000000000031629395b71869bb0c6dbd6c1ac97816c5443301c080000000000000000000000000000000000000000070c0e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004122230404c5e667c8b9faabbcebcaf9e947f6a5f4d3f2e1c0c0000000000000000000000000c1c29333739454b515757504b443740403c484d6074879db2c7ddd9c3ae99846e59442f190400000000000000000004172a3a4b6073849aa2b4bbc8cdd7dee5e1ded2c9c6b9b4aa9f97887a655d4b3c2b190200000000000000081f3346586a7f95a5b6cad4c3b19f927d68604e4a3e484d576c8197acc1d6d4bfaa947f6a553f2a15000000000000000000081c304354697e94a2b4c2c3b2a098827461584b3f321d150900000000000000000012273d52677c92a7bcd1dac4af9a856f5a363f4f606d8197a3b4c4cdbcb49f8c7b655b493a291909000000000000011527375b70859ab0c5dadec9b39e89745846331f0a0012253a4f657a8fa4bacfe1cdbaa98e79644f39240f00000000000000000000071c304354606b717272727269614f3c27120000000000000000152b40556a8095aabfd5dac5b09b85705544311d08000000000000000000000000000000000000000000192e44596e8399aec3d8ddc8b39d8874604b35200f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412222f404c5e667c8c9fb4bcccbcb59f8d7d675d4b3a2a1704000000000000000000000417293a474c545760666c6c656055575655575a626e8197a5b7cadfd2c2a9947f69543f2a14000000000000000000000a1f3347586a7f94a2b4c0ced8e1e8e1d6ccc9c2b5b1a89e968b8176645c4b3f2e1e0e00000000000000000417293a4b6075879db2bccdcebdb49f8d7e6e645c5c59626975849aafc4dad7c1ac97826c57422d17000000000000000000011426364b6073849aa4b4c0beb2a0988476645d4f4331271909000000000000000010253a4f657a8fa4c8d8dcc7b29c8772544330424b6074859ba6b7c7cebbaa9e897963584737271501000000000000182d43586d8298adc2d7e0ccb9a78b76614c36210c000c22374c61778ca1b6cce9d7c7a8937e69533e29140000000000000000000000132536434a565c5d5d5d5d544f4332200c000000000000000012273c52677c91a7c3d3dec9b49f8975604b35200b000000000000000000000000000000000000000001172c41566c8196abc1d6dfcbb7a6907b65503d2d1808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412222f404c5e687e929eafbfcfbcab9f8c7b655847331f12000000000000000000000a1f33475861696f767b81827a75706d6b6a6c707882979fb1c3d4dec9b5a48f79644f3a240f000000000000000000000c21374c6176899eb4c0d1e2eae4d6ccc6b9b4aca49c938981786c61584a3e2e2111000000000000000000000c1e324557657b909eb0bfd0cfbcab9f938379737273777e879aa2b4c7dcd9c4af9a846f5a36251300000000000000000000081d3144556177869aa2b1bdbeb2a29a877b69614b4437271808000000000000000d22374d62778caabbcedfc9b49f8a75604a353245566277889da9bac7c8b8a79c8676615544311d0e000000000000162b40556b8095aac0d5e8d6c5a38e79644e39240f000b20354b60758aa0b5cadfd5c0ab95806b56402b16000000000000000000000008182530354047474747473f3c3225150300000000000000000d22384d62788da5b6cadfcdbaa88e79634e39241200000000000000000000000000000000000000000014293e54697e93a9bed3e7d4c4ae99836e5b4a362513070b0f110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004122230404e606b8095a1b3c5c9bbaa9d8776614c402f1a0a0000000000000000000c21374c61767e848a9197978f898582808081858b98a0b1bdcee1d1c1b19c86715c4a36220d00000000000000000000142a3f54697f94a8b9ccdeeedfd2c6b9b3a89e978e867e766b625a4c463a2d20110300000000000000000000031628394b5d6b8096a1b3c0cfc9bcb4a0988e8987888c939da5b4c0d0e3dcc7b19c87725443301c07000000000000000000011426374759617784979fb4bbc0b4a59d8c7f6d605544362513000000000000000b20354b60758a9fb4c9dfcebaa98c77624d3728384859647a8b9fa9ababababa49a8473604b3c2b1906000000000013283e53687d93a8bdd2e6d0bba6917b66513c2611050c21364b60768ba0b5cbe0d7c1ac97826c57422d1700000000000000000000000008131c202b32323232322a272015070000000000000000000b2035485a72879db2c7dcd7c6aa95806a55402f190900000000030a0c0c0a040000000000000000000011273c51667c91a6bbd1e6dfcab59f8d7963544330211c202426241d12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004122231424b60728399a6b8cbc8b7a699836e5e4c3827150200000000000000000d22374d62778c9a9fa9acaca89e9a979595969a9faab2becedbd4c5b4a3927d68523e2d1b07000000000000000000031628395a6f849aafc6d6e8e0d2c1b5a89e94898179716961584d483c33291b10020000000000000000000000000a1b2f3f4b60728399a2b3bfcdcfbeb2ada79e9c9ea7a8b2b7c3c8d1dfdfc9b49f8a75604a35200b0000000000000000000009192a3a4759617481939faab8c3b7aa9f948173605443301c0f000000000000081c30435472879db2c7dcd8c7a48f7a644f3a252b3b4b5c667c8a9495959595959595826c5a4935200b000000000010263b50657b90a5c9daecd3bea9937e69543e291b19202a3a4e63798ea3b8cee3d7c2ad98826d58432d180000000000000000000000000000070b161c1d1d1d1d14120c030000000000000000000005192b3c566b8196abc1d1dcc7b29c87725e4c3727150200010b171e21221f180c0000000000000000000f24394f64798ea4c6d7e9e3cfbcab9a8472604a413530353a3b382f2212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004131c3043546176889eb3c1d2c4b3a1907c665645311d0900000000000000000b2034485971869cb1bac7c6b9b4b0acabaaacb0b4bbc8cfdfd0c4b7a79b8573604b35201000000000000000000000091e32455774899eb4c9dee5d3c2b5a39b897f766c645c544c473a342b1f170b000000000000000000000000000000111c30435461758499a1b4bac7cfc6c5b8b3b1b3b8c1b4b0b0b4c0d1e2cdbaa98c77624c37220d00000000000000000000000c1c2a3b4756606d7e8c9ea7b7c4bbb49f978272604a3d2c1a060000000000011426365a6f859aafc4dad1bca7927c67523d271d2e3e4d5e66787e808080808080808078624d38230d00000000000e23384e63788dabbccfe3d6c0ab96816b564130302b353a47586a7f94a9bfd4e9d6c0ab96816b56412c16000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b5c9ddcab6a5917c665544311e160e151d29333637342a1c1308000000000000000c21374c61768ca8b9cde1e7dac9b4a2947f695f4e49434a4f514c402f1d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000307090801000000011426364758677d92a3b5c9cfbfb29c8774604b362010000000000000000005182b3b566b8095abc6d6d7cdc9c5c2c0bfc1c5c9ced8cecac0b4a69d8978625544311d08000000000000000000000b21364b60768ba8b9cde1decab6a49b85786a61574f4a3e37332a20190d0400000000000000000000000000000000011426364657617483949fa9b5bcc9c8ccc8c7c7bab4a39b9ba2b4c8ddd7c7a48f7a644f3a250f0000000000000000000000000c1d2a38454b60697b899da6b7c5beb1a0947f695b4935210d000000000000182d42586d8297adc2d7d4bfa9947f6a543f2a152030404d5a62696b6b6b6b6b6b6b6b625a4935200b00000000000b21364b60768a9fb5cadfd8c3ae99836e594545463c484d586176889eb3c8dde8d6c5a9947f69543f2a14000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c70859bb0c1d1d3c3b19c8673604b42322824273139464c4c473a302518080000000000000a1f33475874899eb4c9dedac9bcb5b49f8d7d6d635b546064665e4c38240900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1115191c1e1d170b09030008182a3a4d5f71859bb0c5d5cab6a5927d68523e2d1b07000000000000000010253a50657a8fa8b9cce1e1cac0bcbcc0c1c2c3c1c8bbb4afa29a887a645a4837271501000000000000000000000d22384d62778da2c6d7e9dcc7b19c8676625a4b4639362d211f170c05000a050000000000000000000000000000000008182939465660727f8b989fabb0b3b8b9b3b0a99f9585849bb0c5dad1bca7917c67523c2712000000000000000000000000000c1a2731424f5d6578879da7b9ccbeb49f8b79634e3b2a18050000000000152a40556a7f95aabfd4d7c1ac97826c57422d171222303c484d5456565656565656564d493c2b19060000000000091e32455673889db3c8dddbc6b09b86715b5b5b5b5c5a626976849aa6b8cbe0e0ccb9a78f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e51667c91a3b5c8d9cab6a496806b604b45383937444b576161594a4336251300000000000004172a3a5c71879cb1c6dccfbcab9fabab9f928278737274797c66513726140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e192023272a2e3133332c211e160a000c1c304151667c91a6b8cbd3c3b09b86715c4a36220d00000000000000000b20364b6075899eb3c9decab9aca7a7aaacadadacaaaa9f9a908478645c4a3c2b190900000000000000000000000d22384d62778da2c5d5e7d1bca7917c6758483c3329221b100a070d0f1b1f1a0c0a0400000000000000000000000000000b1b29384554606979838c949b9ea7a89e9b948a80758196acc1d6d4bfa9947f6a543f2a1500000000000000000000000002000a151d323f4b5a6379899eb3c2cdbaa998826d5948341f0b000000000012283d52677d92a7bcd2d9c4af99846f5a442f1a04121e2b35383f404040404040404038352b1e0e000000000000021628385b70869bb0c5dbdec8b39e8873707070707173787f889aa2b4c5d5e7d7c7b39e8974604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000001024394c5e70859baabbced3c2b09e937e6c6056514e4f55606976776c605443301c140400000000001a2f445a6f8499afc4d9cab59f8d98a0b4a0988d8888898f85705544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c35383c4043474948413632281a0a001320354b6074889eb3c8ddc9b5a38e79644f39240f0000000000000000081d3144556e8399aec3d8c0ac9b9292959798989695918a857b6f625a4a3e2d1e0e0000000000000000000000000c21364b61768ba6b8cbe0ccb7a28d77624d3a2b1e170b07020f1a2124303530221f180c00000000000000000000000000000b1a2836434a5b636e787f85898b8b89857f776b697e94a9bed3d7c1ac97826c57422d17000000000000000000090f1117110f0914212f3c495b677d92a4b6cac7b49f8b77624c37220d000000000010253a50657a8fa5c8d8dcc7b19c87725c3b2a1804000e192022292b2b2b2b2b2b2b2b2320190e0000000000000000192e43596e8398aec3d8e0ccb8a79a858585858586888d949da6b4c0d1e3e1cdbaa997826d5544311d080000000000000000000000000000000000000000000000000000000000000000000000000000091d30404f647a8c9fb4c0d0cdbcad9c9381756b66636569747f898c8172604a423122120000000002172c42576c8197acc1d6c9b49e8a8398a8b2ada69d9d9e9f8975604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c494d5155585c5e5d564b4538281603081d3144556d8297acc2d7d2c1a9947f69543f2a1400000000000000000215273753687d93a8c2d3bca7927d7d80818383817f7c7670665e4d483c2d200f000000000000000000000000000a1e32465773889eb3c8ddccb7a28c77624d37220e03030a151d2d3639454a4537342a1c0c00000000000000000000000000000a1825303d494e5b636a7073757674706a6259677c91a6bcd1d9c4af99846f5a3625130000000000000004121d24272c26231c11111e2c3d4a6073869cb1c7cebbaa927d67523d271200000000000d22384d62788daabbcedec9b49f89745947341f0b0000050b0d1416161616161616160d0b06000000000000000001162b41566b8096abc0d5e8d5c5b4a29a9a9a9a9b9c9ea6a9b3b7c4d1e2d7cdbcb49f8a78624d372715010000000000000000000000000000000000000000000000000000000000000000000000000000001222364a5c6a8095a2b3c1d1cabaad9f9688807b797a7f87949e9f96806b604e402f1c0900000000152a3f546a7f94a9bfd4c9b49f8a788a9eb4beb7b3b2b4a98e79634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a63666a6e7173726c605645321e120115273753687e93a8bdd3d9c4af99846f5a442f1a0000000000000000000d22384d62778da4b6c9bea8937e696b6c6d6e6c6a676158504c40342b1d0f0100000000000000000000000000031629395a6f8499afc9dacfbaa58f7a65503b2b1e16171e27313d4a4e5a5f5a4c473a2a1909000000000000000000000000000008131c2c353d494e555b566060565b544d4f64798ea4c6d6dcc7b19c87725443301c07000000000002122230393c413b382f211a0f1c3043546b8096abc0d8c8ac97826c57422d1700000000000b20354b60758a9fb4cadfcdbaa98c77614c37220c000000000000010101010101010100000000000000000000000014293e53697e93a8bed3e8e3d1c0b4b0b0b0b0b0b1b3b8c5c8cbd5d8cec6bab49e937e685a4935190900000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4b6072849aa3b4c0cecabdb0a69e95908e8f949ca4b4b09e937e685e4c38240f0000000012273d52677c92a7bcd1cebbaa8a727e93a0b2c0c8c7c7a7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63787c7f838688888174604b402f180810253a50657a8fa5bacfddc7b29d88725d3828160300000000000000000b2034485a71869cb1c6c4ae99846f565758585755514c463a382f20190d00000000000000000000000000000000142a3f54697f94abbccfd5c0ab96806b59483a3228293338454b5c6470746f615947372715010000000000000000000000000000000f1a212c35383f38454b4b45383f374c61778ca8b9cddec9b49f8975604a35200b0000000000102030404c5157504c40352c2220253653697e93a8bed3c4af99846f5a442f1a0000000000081d31445572889db2c7ddd7c7a48f79644f3a240f000000000000000000000000000000000000000000000000000011263b51667b90a6bbd0d7d7d7d1c8c5c5c5c5c5c6c8cbd5d8cec9c8bbb4a89f92806b604e3c2b19000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c3043546175859aa2b1bdcacdc5b8b3aaa6a3a4a9b2b6c3bcb49f8c7b66513b2611000000000f253a4f647a8fa4c8d8d5c5a08b766d8298a2b3bfccc0ab96816b563625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061b30465b70859195989c9e9d96836e5e4c3625130f24394e64798ea3b9cedec9b49f89745645321e09000000000000000005192b3c566b8196abc6c9b49f8975604b434341403c363329231c110500000000000000000000000000000000000d22384d62788c9fb5cadec9b49e8a7762584b453839464b56606a79858a8477615544311d1100000000000000000000000000000000060f1a21232a2832363632282a33475874899eb4c9decdbaa98c77624c37220d00000000071b2d3e4c5e666c665e4e493d3836353f546a7f94a9bfd4c5b09b86705b46311b0000000000011426375a70859aafc5dad1bca6917c67513c271200000000000000000000000000000000000000000000000000000e24394e63798ea3c5c2c2c2c2c2c2c2c2c2c2c2c1c1c0bec8bbb4b0aa9f978a7e6b625042311e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364657617684979fb2b7c3cacbc8c0bbb8babec7cac9bcb5a095806b56402b16000000000d22374d62778caabbc1c1b8a78b7661748499a1b3b8c5af9a85705443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94abadb1b3b2a1907c665443301c1323394e63788ea3b8cde1cdbaa98b76604b36210b00000000000000000010263b50657b90a8b9cdbaa8907b65503b2e2c2a27211f171212120f0b090300000000000000000000000000000b2035485a6f8499afbecfccb9a89b85766860565959576168747f8b9a9f9a8473604b3f2e1c0c0000000000000000000000000000000000060c0e15151d20211e16182a3a5c71879cb1c6dcd7c7a48f79644f3a240f000000000d22364a5c667c817b6f635b524d4b4b4d5d6f8499aec4d9c6b19c86715c47311c000000000000182d42586d8297adc2d7d4bea9947f69543f2a1400000000000000000000000000000000000000000000000000000c21364c61768ba7acacacacacacacacacacacacacacaba9a7aa9f9a948b8278686050443324140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081829394758617481919da5b2b6c3c4c8cacecac8c5c1b5ab9f958272604b35200b000000000b20354b60758a9facacacaa9e897357607583939ea7adae9e8974604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778c9fb5c9c8bfb19b8672604a3f3026273750657a8fa5bacfe1cdb9a88b76604b36210b0000000000000000000b20364b6075899eb4c9c6ab96816b563c2b28282828282828272725211e160a0200000000000000000000000005192b3c4f647a8fa0b2c4d4c6b5a39b877d75706e6f70767d87949faab4a295806b5d4b3a291704000000000000000000000000000000000000000002090b0b09021a2f44596f8499aec4d9d1bca7917c67523c2712000000081c2e3f4f647a8c969084796e6762606062697b8c9fb4cadac4af9a856f5a45301a000000000000152b40556a8095aabfd5d6c1ac96816c57412c1702000000000000000000000000000000000000000000000000000a1e33465774899797979797979797979797979797969694928e8a857e776d625a4e42332616060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2a3a4756606d7c87939da5abafb3b4bbb5b3b0aba39b8d8072605443301c0800000000081c30435472879696969695907f6a555760727e89939799988d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596f8499abbccfc9b5a3927d675d4d413c374455697f94a9bed4dec9b49e89745645321e09000000000000000000091d3245566f8499aec4c6b19c86715a483d3d3d3d3d3d3d3d3d3c3a3632281d15090000000000000000000000000e22374b5d6d8298a6b7c6d2c1b5a59d928a858484868a929ca5b4bbc0b49f8c7b655847331f0a0000000000000000000000000000000000000000000000000002172c42576c8197acc1d6d4bfa9947f6a543f2a150000000e23374b5d6f849aaaa1998c837c777575787f8a9eabbccfd4c4ac97826c57422d1700000000000013283d52687d92a7bdd2d9c4ae99846f59442f1a000000000000000000000000000000000000000000000000000003172939556a80828282828282828282828282828281807f7d7976706962594d483c3124160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a38454b5e66757e878f959a9d9faa9f9e9b968f857b6b60544336261401000000000114263654697f81818181807b6a615045546069767d8284827d75614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4f647a8d9fb5c5d2c2b49f8b7b675f545151556074869cb1c7dcdcc7b19c87725c382816030000000000000000000215283853697e93a8c3c9b6a48d776252525252525252525252514f4b4538312719090000000000000000000000081b2e3f4c6176879da8b8c5d2c3b7b2a99f9b99999b9faab2b6c3cecfbcab9d8776614c37210c0000000000000000000000000000000000000000000000000000142a3f54697f94a9bed4d6c1ac97816c57422c1702000114263750657b90a2b3b3aa9f99918d8b8a8d949ea8b9c9d9cbb7a6917c66513c271100000000000010253b50657a90a5c9c9c9c6b19c86715c3a2a170400000000000000000000000000000000000000000000000000000b283c50626a6d6d6d6d6d6d6d6d6d6d6d6d6d6c6c6b6967646057544d483b342b1d1306000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a2832404c566069747a8085888a8b8a8985817a71655d4a433626180800000000000008273b4f61696c6c6c6c6a655d504336434a5761686d6e6d68615746321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6e8398a7b9cccdbaa99e8a7d716a66666a738197a4b6caded4c3ac97826c57422d1700000000000000000000000d23384d62788da4b6cac2a8937d6867676767676767676767676460564b44372715020000000000000000000000101f334758647a8a9ea7b5c2cdcac7bab4b0aeaeb0b4bbc8cad3d3c9bcb5a0937e69533e2914000000000000000000000000000000000000000000000000000012273c51677c91a6bcd1d9c4af99846f5a442f1a0000081d31445570859bb0b8c5bbb4aea7a2a0a0a2a9b4b9c6d7cfbeb29d8875604b36210b0000000000000d23384d62788dabb4b4b4b4b49e89745847331f0a00000000000000000000000000000000000000000000000000000d21334450555757575757575757575757575757575654524f4b453937342b20190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e3038454b5460656b6f7375767573706b655d4f4b3f30251808000000000000000c1f32434f545757575755504c3f33253039464b53585958524b4639281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4d6278899eb3bcccc7b9a89e92867f7b7b7f86979fb1c2d3dfcab7a5917c66513c271100000000000000000000000c2035495a72879cb2c7c5b09a847d7d7d7d7d7d7d7d7d7d7c7c7a756b605544311d10000000000000000000000004172a3a4a5c657b899ca4b4bac7cdcdc9c5c3c4c5c9ced8d2c9c2b6ab9f958272604b35200b00000000000000000000000000000000000000000000000000000f243a4f64798fa4c6d7dcc6b19c87715c3b2a1804000b20354b607381909ea7b4bac7c3bcb7b5b5b7bec9cdd4cabeb2a0937e685645321e090000000000000b20364b60758a9e9e9e9e9e9e9e8c76614c37210c0000000000000000000000000000000000000000000000000000041525333c40424242424242424242424242424241413f3d393632282220180d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002121a283236434b4f565a5e566060545b564f4b3f372e1c13080000000000000000031424323b3f41414141403b382f21131c2933363e4244433d3632281b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102035485a667c919eafbccdc6b9b4a39b949191949ca4b1bdcee0d0bfb29d8774604b36200b000000000000000000000006192c3c566c8196abc7c8b4a29a9292929292929292929292918f898073604b3f2e1b0800000000000000000000000c1c2d3e4b5d657886959fa9b4bac7c6c9cdd7d4cbc8c4c1b5b0a49c8d8072605443301c0800000000000000000000000000000000000000000000000000000c22374c61778ca8bacddec9b49f89745947341f0b00081d314455606c7c88969fa9b3b9c6c5c9cdd7cec9c7c3b6b2a098826d604e38281603000000000000081d3144557286898989898989898a79634e39240e000000000000000000000000000000000000000000000000000000071521282b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c2b2a2824211e160d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2630353a404538454b4b4336413a372e231c11000000000000000000000006141f27292c2c2c2c2b26231c11000b171e21282d2f2d28211e160b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4c5e6b80959eb4bac7cdc1b5b1a9a6a6a9b1b6c2cedecfc2b3a1937e685645311d0900000000000000000000000011263b50667b90a9bacdc0b4b0a7a7a7a7a7a7a7a7a7a7a7a6a89e96826d5d4b37220e00000000000000000000000010202e3f4b5a6275808a979fa9acb1b4b9c6c4b7b2afa9a39b92867b6b6054433626140100000000000000000000000000000000000000000000000000000b1f34475974899fb4c9c9c9baa88c77614c37220c0001142637444b5e6677818b979ea8acb0b4b9c6bab4b2aca59d928274604b42311a0a00000000000000021527375768727474747474747474635b4a36210c00000000000000000000000000000000000000000000000000000000040d13151818181818181818181818181817171614120f0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208141c20252b302832363530262c25221b100800000000000000000000000000030c12141717171715100e09000000030a0c13181918130c090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e304050626b7f939fa9b4c0cac9c6bfbbbbbfc6c9d3d3c9bfb3a4998373604b382715020000000000000000000000000b21364b60758a9fb4c9d1c8c5bcbcbcbcbcbcbcbcbcbcbcc6b9b4a08f7a654f3a25100000000000000000000000000211212e3c4957616b77828a92979c9ea8a1a1a69d99948e867d73655d4a433626180800000000000000000000000000000000000000000000000000000004182a3b5c71879cb1b4b4b4b4a48f79644f3a240f000009192631404c59616c78818991979b9ea8a1a99f9c9791877d6d60564532241400000000000000000009193a4a575c5f5f5f5f5f5f5f5f4e4a3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b10161a161e21201c1416100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001222334450616a7e8b9aa2afb5bcc9c7c9cdd6ccc9c6c2b6b1a1998676615544311a0a00000000000000000000000000091e3245566f8499afc4d6d6d6d2d2d2d2d2d2d2d2d2d2d1d6cdbeab95806b56402b160100000000000000000000000003111e2b39464b59626c767d8286898b8c8c8b88847f79716860554b3f3025180800000000000000000000000000000000000000000000000000000000001a2f445a6f84999e9e9e9e9e9e917c67513c271200000009141d2f3a474c5a626c757c8186898b8c8b8a87827c74675f4b4538281506000000000000000000001c2c3a4347494949494949494939362d1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010002090b0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004162633435060687984919a9fabadb2b4bac6b9b3b1aba49c92837561584637261400000000000000000000000000000316283854697e93a9c3c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1ae99846e59442f190000000000000000000000000000000e1b29333b484d5761676d717476777675736f6a635b524b44372e1c1308000000000000000000000000000000000000000000000000000000000001172c41566c81898989898989898a7e69543e29140000000001121c2a343c484d5660666c707476777674726d6760554d4132281a0a00000000000000000000000e1c272f32343434343434343424211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008162533424e5b63727c848c93989d9fa9a1a89e9b9690867d726157463a2919090000000000000000000000000000000e23384e63788da5acacacacacacacacacacacacacacacacacacac9b86715c382715020000000000000000000000000000000b171e2b3439464c52575c5761626160555a544e4a3d3531261911000000000000000000000000000000000000000000000000000000000000000014293e51626c747474747474747469604f3b27120000000000000c181f2b3438454b51575b57606261575d57514b4437311d150a000000000000000000000000000a141a1d1f1f1f1f1f1f1f1f0e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071524313d495460666f787e8387898b8c8b8986817b736760544639291c0c000000000000000000000000000000000c2135495b728796969696969696969696969696969696969696969689745645311d0900000000000000000000000000000000030d18202933363d4239464b4c4c4b44373f39362d201d14090000000000000000000000000000000000000000000000000000000000000000000e22344451565f5f5f5f5f5f5f5f544f42321f0c00000000000000040d19202832363c4239454b4c4b4639423c35312719130200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f2c36434a515b63686e727476777574716b6560544a4336291b0c0000000000000000000000000000000000061a2c3d52687d8181818181818181818181818181818181818181818174604b36200b000000000000000000000000000000000000050b171e21282d28323637373631272a24211a0f080100000000000000000000000000000000000000000000000000000000000000000000051626343e4149494949494949493e3b32241402000000000000000000050a161e21272c283236373633292d27201d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e182530353c494d53585d56606160565c56504a43363025180b000000000000000000000000000000000000000f253a4e5f686c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c605645311d090000000000000000000000000000000000000000030a0c1218161e212221201d15150e0c070000000000000000000000000000000000000000000000000000000000000000000000000000081622292c343434343434343429271f140600000000000000000000000003090b1117161e2122211e1718120b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202c35383e4338454b4c4b4538413b3530251c130800000000000000000000000000000000000000000b1e31414e52575757575757575757575757575757575757575757574b45382715020000000000000000000000000000000000000000000000000003090c0d0c0b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e14171f1f1f1f1f1f1f1f14120c0200000000000000000000000000000000000003090b0d0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e192123292e283236373631272c26201c130800000000000000000000000000000000000000000000011323313a3d414141414141414141414141414141414141414141413631271a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1319161e2122201d1516100b070000000000000000000000000000000000000000000000000005131e25282c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c201d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0c0b0902000000000000000000000000000000000000000000000000000000000000010b1013171717171717171717171717171717171717171717170b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-HeavyItalic SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: 6383068405828875511} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: 1f7095e4df627d446a114125f9882224 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Heavy Italic + m_PointSize: 67 + m_Scale: 1 + m_LineHeight: 80.4 + m_AscentLine: 66.129 + m_CapLine: 49 + m_MeanLine: 35 + m_Baseline: 0 + m_DescentLine: -14.271 + m_SuperscriptOffset: 66.129 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.271 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.085001 + m_UnderlineThickness: 3.3165 + m_StrikethroughOffset: 14 + m_StrikethroughThickness: 3.3165 + m_TabWidth: 14 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 14.234375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 44.75 + m_Height: 48.609375 + m_HorizontalBearingX: -2.875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 44.046875 + m_GlyphRect: + m_X: 392 + m_Y: 6 + m_Width: 45 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 37.578125 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 41.46875 + m_GlyphRect: + m_X: 259 + m_Y: 130 + m_Width: 38 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 40.625 + m_Height: 49.671875 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 41.46875 + m_GlyphRect: + m_X: 206 + m_Y: 128 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.578125 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 47.46875 + m_GlyphRect: + m_X: 65 + m_Y: 133 + m_Width: 44 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 34.609375 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 35.90625 + m_GlyphRect: + m_X: 357 + m_Y: 89 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 34.609375 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 35.609375 + m_GlyphRect: + m_X: 358 + m_Y: 149 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 42.375 + m_Height: 49.671875 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 45.328125 + m_GlyphRect: + m_X: 6 + m_Y: 184 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 44.65625 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 48.265625 + m_GlyphRect: + m_X: 333 + m_Y: 29 + m_Width: 45 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 15.671875 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 19.328125 + m_GlyphRect: + m_X: 490 + m_Y: 171 + m_Width: 16 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 27.84375 + m_Height: 49.140625 + m_HorizontalBearingX: -1.171875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 27.640625 + m_GlyphRect: + m_X: 266 + m_Y: 286 + m_Width: 29 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 44.1875 + m_Height: 48.640625 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.640625 + m_HorizontalAdvance: 43.65625 + m_GlyphRect: + m_X: 448 + m_Y: 6 + m_Width: 45 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 27.734375 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 32.5625 + m_GlyphRect: + m_X: 403 + m_Y: 66 + m_Width: 29 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 55.734375 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 59.359375 + m_GlyphRect: + m_X: 83 + m_Y: 6 + m_Width: 57 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 44.65625 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 48.265625 + m_GlyphRect: + m_X: 212 + m_Y: 68 + m_Width: 45 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 46.65625 + m_Height: 49.671875 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 50.6875 + m_GlyphRect: + m_X: 274 + m_Y: 6 + m_Width: 48 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 37.3125 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 39.46875 + m_GlyphRect: + m_X: 308 + m_Y: 130 + m_Width: 38 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 46.65625 + m_Height: 58.515625 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 50.6875 + m_GlyphRect: + m_X: 6 + m_Y: 113 + m_Width: 48 + m_Height: 60 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 36.375 + m_Height: 48.609375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 40.609375 + m_GlyphRect: + m_X: 276 + m_Y: 446 + m_Width: 37 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 34.96875 + m_Height: 49.640625 + m_HorizontalBearingX: -0.328125 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 34.765625 + m_GlyphRect: + m_X: 100 + m_Y: 452 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 36.484375 + m_Height: 48.609375 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 37.625 + m_GlyphRect: + m_X: 304 + m_Y: 347 + m_Width: 37 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 42.0625 + m_Height: 49.140625 + m_HorizontalBearingX: 3.625 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 46.53125 + m_GlyphRect: + m_X: 60 + m_Y: 193 + m_Width: 43 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 44.796875 + m_Height: 48.609375 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 44.015625 + m_GlyphRect: + m_X: 150 + m_Y: 112 + m_Width: 45 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 64.859375 + m_Height: 48.609375 + m_HorizontalBearingX: 3.546875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 65.265625 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 66 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 48.265625 + m_Height: 48.609375 + m_HorizontalBearingX: -3.046875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 42.84375 + m_GlyphRect: + m_X: 151 + m_Y: 52 + m_Width: 50 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 42.21875 + m_Height: 48.609375 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 41.40625 + m_GlyphRect: + m_X: 6 + m_Y: 246 + m_Width: 43 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 41 + m_Height: 48.609375 + m_HorizontalBearingX: -1.375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 37.71875 + m_GlyphRect: + m_X: 150 + m_Y: 172 + m_Width: 42 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 32.390625 + m_Height: 35.578125 + m_HorizontalBearingX: 0.9375 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 35.203125 + m_GlyphRect: + m_X: 352 + m_Y: 292 + m_Width: 34 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 33.328125 + m_Height: 50.453125 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 36.375 + m_GlyphRect: + m_X: 188 + m_Y: 368 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.609375 + m_Height: 35.546875 + m_HorizontalBearingX: 1.234375 + m_HorizontalBearingY: 35.046875 + m_HorizontalAdvance: 30.34375 + m_GlyphRect: + m_X: 359 + m_Y: 460 + m_Width: 29 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 35.34375 + m_Height: 50.453125 + m_HorizontalBearingX: 1.171875 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 36.453125 + m_GlyphRect: + m_X: 147 + m_Y: 452 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 29.75 + m_Height: 35.5 + m_HorizontalBearingX: 1.203125 + m_HorizontalBearingY: 35 + m_HorizontalAdvance: 32.859375 + m_GlyphRect: + m_X: 441 + m_Y: 393 + m_Width: 30 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 23.921875 + m_Height: 57.765625 + m_HorizontalBearingX: 2.3125 + m_HorizontalBearingY: 49.484375 + m_HorizontalAdvance: 22.484375 + m_GlyphRect: + m_X: 114 + m_Y: 226 + m_Width: 25 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 37.03125 + m_Height: 47.03125 + m_HorizontalBearingX: -2.21875 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 34.171875 + m_GlyphRect: + m_X: 443 + m_Y: 66 + m_Width: 38 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 32.71875 + m_Height: 49.953125 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 36.546875 + m_GlyphRect: + m_X: 233 + m_Y: 355 + m_Width: 33 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 15.25 + m_Height: 49.984375 + m_HorizontalBearingX: 1.40625 + m_HorizontalBearingY: 49.984375 + m_HorizontalAdvance: 16.84375 + m_GlyphRect: + m_X: 298 + m_Y: 220 + m_Width: 16 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 22.46875 + m_Height: 62.015625 + m_HorizontalBearingX: -6.15625 + m_HorizontalBearingY: 49.984375 + m_HorizontalAdvance: 16.78125 + m_GlyphRect: + m_X: 54 + m_Y: 381 + m_Width: 24 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 34.46875 + m_Height: 49.953125 + m_HorizontalBearingX: 1 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 34.265625 + m_GlyphRect: + m_X: 230 + m_Y: 449 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49.4375 + m_Height: 35.078125 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 53.296875 + m_GlyphRect: + m_X: 6 + m_Y: 66 + m_Width: 50 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 32.71875 + m_Height: 35.078125 + m_HorizontalBearingX: 1.109375 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 36.578125 + m_GlyphRect: + m_X: 397 + m_Y: 369 + m_Width: 33 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 31.90625 + m_Height: 35.578125 + m_HorizontalBearingX: 1.265625 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 35.171875 + m_GlyphRect: + m_X: 442 + m_Y: 345 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 34.671875 + m_Height: 46.234375 + m_HorizontalBearingX: -0.265625 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 36.421875 + m_GlyphRect: + m_X: 443 + m_Y: 171 + m_Width: 36 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 32.390625 + m_Height: 46.234375 + m_HorizontalBearingX: 0.96875 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 35.234375 + m_GlyphRect: + m_X: 463 + m_Y: 286 + m_Width: 34 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 24.1875 + m_Height: 34.875 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 34.875 + m_HorizontalAdvance: 23.984375 + m_GlyphRect: + m_X: 399 + m_Y: 460 + m_Width: 25 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 27.640625 + m_Height: 35.609375 + m_HorizontalBearingX: -0.84375 + m_HorizontalBearingY: 35.078125 + m_HorizontalAdvance: 27.296875 + m_GlyphRect: + m_X: 404 + m_Y: 126 + m_Width: 28 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 22.421875 + m_Height: 45.390625 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 44.859375 + m_HorizontalAdvance: 24.828125 + m_GlyphRect: + m_X: 324 + m_Y: 432 + m_Width: 24 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 32.703125 + m_Height: 35.03125 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 36.546875 + m_GlyphRect: + m_X: 397 + m_Y: 322 + m_Width: 34 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 33.21875 + m_Height: 34.53125 + m_HorizontalBearingX: 1.78125 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 33.296875 + m_GlyphRect: + m_X: 352 + m_Y: 340 + m_Width: 34 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 49.15625 + m_Height: 34.578125 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 34.578125 + m_HorizontalAdvance: 49.84375 + m_GlyphRect: + m_X: 151 + m_Y: 6 + m_Width: 51 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 37.21875 + m_Height: 34.53125 + m_HorizontalBearingX: -2.921875 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 33.296875 + m_GlyphRect: + m_X: 443 + m_Y: 125 + m_Width: 38 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 33.296875 + m_Height: 45.6875 + m_HorizontalBearingX: 1.8125 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 33.296875 + m_GlyphRect: + m_X: 371 + m_Y: 234 + m_Width: 35 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 30.015625 + m_Height: 34.53125 + m_HorizontalBearingX: -0.9375 + m_HorizontalBearingY: 34.53125 + m_HorizontalAdvance: 29.25 + m_GlyphRect: + m_X: 352 + m_Y: 386 + m_Width: 31 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 14.234375 + m_Height: 10.046875 + m_HorizontalBearingX: 7.34375 + m_HorizontalBearingY: 49.140625 + m_HorizontalAdvance: 24.65625 + m_GlyphRect: + m_X: 188 + m_Y: 430 + m_Width: 15 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 307 + m_Metrics: + m_Width: 14.515625 + m_Height: 49.078125 + m_HorizontalBearingX: 1.9375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 18.09375 + m_GlyphRect: + m_X: 271 + m_Y: 225 + m_Width: 16 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 23.953125 + m_Height: 49.578125 + m_HorizontalBearingX: 4.890625 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 29.171875 + m_GlyphRect: + m_X: 194 + m_Y: 452 + m_Width: 25 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 310 + m_Metrics: + m_Width: 10.640625 + m_Height: 19.90625 + m_HorizontalBearingX: 0.84375 + m_HorizontalBearingY: 10.21875 + m_HorizontalAdvance: 16.046875 + m_GlyphRect: + m_X: 127 + m_Y: 66 + m_Width: 12 + m_Height: 21 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 13.8125 + m_Height: 42.90625 + m_HorizontalBearingX: 1.84375 + m_HorizontalBearingY: 33.21875 + m_HorizontalAdvance: 18.421875 + m_GlyphRect: + m_X: 489 + m_Y: 231 + m_Width: 15 + m_Height: 44 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 10.890625 + m_Height: 10.6875 + m_HorizontalBearingX: 0.765625 + m_HorizontalBearingY: 10.21875 + m_HorizontalAdvance: 16.046875 + m_GlyphRect: + m_X: 127 + m_Y: 98 + m_Width: 12 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 47.234375 + m_Height: 10.6875 + m_HorizontalBearingX: 0.765625 + m_HorizontalBearingY: 10.21875 + m_HorizontalAdvance: 52.359375 + m_GlyphRect: + m_X: 333 + m_Y: 6 + m_Width: 48 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 324 + m_Metrics: + m_Width: 31.890625 + m_Height: 52.09375 + m_HorizontalBearingX: -1.140625 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 29.109375 + m_GlyphRect: + m_X: 56 + m_Y: 314 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 325 + m_Metrics: + m_Width: 7.171875 + m_Height: 63.140625 + m_HorizontalBearingX: 5.5625 + m_HorizontalBearingY: 51.984375 + m_HorizontalAdvance: 18.359375 + m_GlyphRect: + m_X: 35 + m_Y: 381 + m_Width: 8 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 19.0625 + m_Height: 52.09375 + m_HorizontalBearingX: 5.15625 + m_HorizontalBearingY: 48.8125 + m_HorizontalAdvance: 28.875 + m_GlyphRect: + m_X: 100 + m_Y: 314 + m_Width: 20 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 328 + m_Metrics: + m_Width: 17.328125 + m_Height: 7.3125 + m_HorizontalBearingX: 2.84375 + m_HorizontalBearingY: 23.921875 + m_HorizontalAdvance: 23.15625 + m_GlyphRect: + m_X: 214 + m_Y: 430 + m_Width: 19 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 331 + m_Metrics: + m_Width: 25.0625 + m_Height: 5.671875 + m_HorizontalBearingX: -0.96875 + m_HorizontalBearingY: -4.25 + m_HorizontalAdvance: 29.8125 + m_GlyphRect: + m_X: 111 + m_Y: 296 + m_Width: 26 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 334 + m_Metrics: + m_Width: 17.65625 + m_Height: 63.453125 + m_HorizontalBearingX: 2.046875 + m_HorizontalBearingY: 52.734375 + m_HorizontalAdvance: 18.09375 + m_GlyphRect: + m_X: 6 + m_Y: 381 + m_Width: 18 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 335 + m_Metrics: + m_Width: 17.65625 + m_Height: 63.453125 + m_HorizontalBearingX: -1.546875 + m_HorizontalBearingY: 52.734375 + m_HorizontalAdvance: 18.0625 + m_GlyphRect: + m_X: 120 + m_Y: 151 + m_Width: 19 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 21.03125 + m_Height: 62.375 + m_HorizontalBearingX: 1.375 + m_HorizontalBearingY: 51.921875 + m_HorizontalAdvance: 20.234375 + m_GlyphRect: + m_X: 89 + m_Y: 378 + m_Width: 22 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 21.109375 + m_Height: 62.375 + m_HorizontalBearingX: -2.25 + m_HorizontalBearingY: 51.921875 + m_HorizontalAdvance: 20.234375 + m_GlyphRect: + m_X: 122 + m_Y: 378 + m_Width: 22 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 20.0625 + m_Height: 62.375 + m_HorizontalBearingX: 1.578125 + m_HorizontalBearingY: 51.921875 + m_HorizontalAdvance: 19.59375 + m_GlyphRect: + m_X: 150 + m_Y: 232 + m_Width: 21 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 20.0625 + m_Height: 62.375 + m_HorizontalBearingX: -2.046875 + m_HorizontalBearingY: 51.921875 + m_HorizontalAdvance: 19.5625 + m_GlyphRect: + m_X: 155 + m_Y: 375 + m_Width: 22 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 21.671875 + m_Height: 23.046875 + m_HorizontalBearingX: 4.65625 + m_HorizontalBearingY: 50.859375 + m_HorizontalAdvance: 26.5625 + m_GlyphRect: + m_X: 246 + m_Y: 190 + m_Width: 23 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 345 + m_Metrics: + m_Width: 31.359375 + m_Height: 22.71875 + m_HorizontalBearingX: 5.359375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 203 + m_Y: 190 + m_Width: 32 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 346 + m_Metrics: + m_Width: 32.859375 + m_Height: 13.375 + m_HorizontalBearingX: 2.953125 + m_HorizontalBearingY: 26.5 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 313 + m_Y: 190 + m_Width: 34 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 8.953125 + m_Height: 18.15625 + m_HorizontalBearingX: 5.1875 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 13.765625 + m_GlyphRect: + m_X: 127 + m_Y: 121 + m_Width: 10 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 20.953125 + m_Height: 18.15625 + m_HorizontalBearingX: 5.1875 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 25.5625 + m_GlyphRect: + m_X: 280 + m_Y: 190 + m_Width: 22 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 41.578125 + m_Height: 49.640625 + m_HorizontalBearingX: 1.234375 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 45.09375 + m_GlyphRect: + m_X: 268 + m_Y: 68 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 47.609375 + m_Height: 54.515625 + m_HorizontalBearingX: 2.40625 + m_HorizontalBearingY: 46.4375 + m_HorizontalAdvance: 51.828125 + m_GlyphRect: + m_X: 67 + m_Y: 66 + m_Width: 49 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 360 + m_Metrics: + m_Width: 38.21875 + m_Height: 62.578125 + m_HorizontalBearingX: 0.140625 + m_HorizontalBearingY: 55.234375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 6 + m_Y: 306 + m_Width: 39 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 368 + m_Metrics: + m_Width: 39.796875 + m_Height: 48.578125 + m_HorizontalBearingX: 0.140625 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 60 + m_Y: 254 + m_Width: 40 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 397 + m_Metrics: + m_Width: 33.890625 + m_Height: 49.640625 + m_HorizontalBearingX: 2.921875 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 131 + m_Y: 313 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 398 + m_Metrics: + m_Width: 26.09375 + m_Height: 48.640625 + m_HorizontalBearingX: 6.09375 + m_HorizontalBearingY: 48.640625 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 404 + m_Y: 174 + m_Width: 27 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 35 + m_Height: 49.109375 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 6 + m_Y: 456 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 33.734375 + m_Height: 49.640625 + m_HorizontalBearingX: 2.21875 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 177 + m_Y: 306 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 34.375 + m_Height: 48.609375 + m_HorizontalBearingX: 1.234375 + m_HorizontalBearingY: 48.609375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 306 + m_Y: 281 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.234375 + m_Height: 49.109375 + m_HorizontalBearingX: 1.84375 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 53 + m_Y: 456 + m_Width: 36 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 34.25 + m_Height: 48.578125 + m_HorizontalBearingX: 4.515625 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 325 + m_Y: 215 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 31.828125 + m_Height: 49.109375 + m_HorizontalBearingX: 4.421875 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 227 + m_Y: 225 + m_Width: 33 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 433 + m_Metrics: + m_Width: 33.671875 + m_Height: 33.703125 + m_HorizontalBearingX: 2.84375 + m_HorizontalBearingY: 39.328125 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 417 + m_Y: 276 + m_Width: 35 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 437 + m_Metrics: + m_Width: 32.234375 + m_Height: 18.421875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 31.71875 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 244 + m_Y: 416 + m_Width: 33 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 440 + m_Metrics: + m_Width: 28.96875 + m_Height: 31.6875 + m_HorizontalBearingX: 5.0625 + m_HorizontalBearingY: 38.421875 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 394 + m_Y: 416 + m_Width: 30 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 441 + m_Metrics: + m_Width: 29 + m_Height: 31.6875 + m_HorizontalBearingX: 5.296875 + m_HorizontalBearingY: 38.421875 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 435 + m_Y: 440 + m_Width: 30 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 15.171875 + m_Height: 49.953125 + m_HorizontalBearingX: 1.140625 + m_HorizontalBearingY: 49.953125 + m_HorizontalAdvance: 16.375 + m_GlyphRect: + m_X: 277 + m_Y: 347 + m_Width: 16 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 32.234375 + m_Height: 49.109375 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 48.578125 + m_HorizontalAdvance: 35.75 + m_GlyphRect: + m_X: 222 + m_Y: 294 + m_Width: 33 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 33.171875 + m_Height: 49.640625 + m_HorizontalBearingX: 2.609375 + m_HorizontalBearingY: 49.109375 + m_HorizontalAdvance: 38.859375 + m_GlyphRect: + m_X: 182 + m_Y: 232 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 48.875 + m_Height: 49.65625 + m_HorizontalBearingX: 1.8125 + m_HorizontalBearingY: 49.046875 + m_HorizontalAdvance: 51.484375 + m_GlyphRect: + m_X: 213 + m_Y: 6 + m_Width: 50 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 34.578125 + m_Height: 34.5 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 34.5 + m_HorizontalAdvance: 40.203125 + m_GlyphRect: + m_X: 442 + m_Y: 230 + m_Width: 36 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 12.890625 + m_Height: 33.6875 + m_HorizontalBearingX: 1.765625 + m_HorizontalBearingY: 33.21875 + m_HorizontalAdvance: 17.625 + m_GlyphRect: + m_X: 492 + m_Y: 66 + m_Width: 14 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -1361375102305407215} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 77 + m_Height: 60 + - m_X: 77 + m_Y: 0 + m_Width: 68 + m_Height: 60 + - m_X: 145 + m_Y: 0 + m_Width: 62 + m_Height: 46 + - m_X: 207 + m_Y: 0 + m_Width: 61 + m_Height: 62 + - m_X: 145 + m_Y: 46 + m_Width: 61 + m_Height: 60 + - m_X: 0 + m_Y: 60 + m_Width: 61 + m_Height: 47 + - m_X: 61 + m_Y: 60 + m_Width: 60 + m_Height: 67 + - m_X: 121 + m_Y: 60 + m_Width: 23 + m_Height: 32 + - m_X: 121 + m_Y: 92 + m_Width: 23 + m_Height: 23 + - m_X: 0 + m_Y: 107 + m_Width: 59 + m_Height: 71 + - m_X: 268 + m_Y: 0 + m_Width: 59 + m_Height: 62 + - m_X: 327 + m_Y: 0 + m_Width: 59 + m_Height: 23 + - m_X: 386 + m_Y: 0 + m_Width: 56 + m_Height: 60 + - m_X: 327 + m_Y: 23 + m_Width: 56 + m_Height: 60 + - m_X: 442 + m_Y: 0 + m_Width: 56 + m_Height: 60 + - m_X: 206 + m_Y: 62 + m_Width: 56 + m_Height: 60 + - m_X: 144 + m_Y: 106 + m_Width: 56 + m_Height: 60 + - m_X: 121 + m_Y: 115 + m_Width: 21 + m_Height: 30 + - m_X: 59 + m_Y: 127 + m_Width: 55 + m_Height: 60 + - m_X: 114 + m_Y: 145 + m_Width: 30 + m_Height: 75 + - m_X: 0 + m_Y: 178 + m_Width: 54 + m_Height: 62 + - m_X: 54 + m_Y: 187 + m_Width: 54 + m_Height: 61 + - m_X: 0 + m_Y: 240 + m_Width: 54 + m_Height: 60 + - m_X: 262 + m_Y: 62 + m_Width: 53 + m_Height: 62 + - m_X: 200 + m_Y: 122 + m_Width: 53 + m_Height: 62 + - m_X: 144 + m_Y: 166 + m_Width: 53 + m_Height: 60 + - m_X: 108 + m_Y: 220 + m_Width: 36 + m_Height: 70 + - m_X: 54 + m_Y: 248 + m_Width: 51 + m_Height: 60 + - m_X: 0 + m_Y: 300 + m_Width: 50 + m_Height: 75 + - m_X: 0 + m_Y: 375 + m_Width: 29 + m_Height: 75 + - m_X: 0 + m_Y: 450 + m_Width: 47 + m_Height: 61 + - m_X: 29 + m_Y: 375 + m_Width: 19 + m_Height: 75 + - m_X: 47 + m_Y: 450 + m_Width: 47 + m_Height: 61 + - m_X: 48 + m_Y: 375 + m_Width: 35 + m_Height: 74 + - m_X: 50 + m_Y: 308 + m_Width: 44 + m_Height: 64 + - m_X: 83 + m_Y: 372 + m_Width: 33 + m_Height: 74 + - m_X: 94 + m_Y: 308 + m_Width: 31 + m_Height: 64 + - m_X: 105 + m_Y: 290 + m_Width: 37 + m_Height: 17 + - m_X: 94 + m_Y: 446 + m_Width: 47 + m_Height: 62 + - m_X: 116 + m_Y: 372 + m_Width: 33 + m_Height: 74 + - m_X: 141 + m_Y: 446 + m_Width: 47 + m_Height: 62 + - m_X: 125 + m_Y: 307 + m_Width: 46 + m_Height: 62 + - m_X: 149 + m_Y: 369 + m_Width: 33 + m_Height: 74 + - m_X: 144 + m_Y: 226 + m_Width: 32 + m_Height: 74 + - m_X: 171 + m_Y: 300 + m_Width: 45 + m_Height: 62 + - m_X: 176 + m_Y: 226 + m_Width: 45 + m_Height: 62 + - m_X: 197 + m_Y: 184 + m_Width: 43 + m_Height: 35 + - m_X: 182 + m_Y: 362 + m_Width: 45 + m_Height: 62 + - m_X: 182 + m_Y: 424 + m_Width: 26 + m_Height: 22 + - m_X: 188 + m_Y: 446 + m_Width: 36 + m_Height: 62 + - m_X: 208 + m_Y: 424 + m_Width: 30 + m_Height: 19 + - m_X: 224 + m_Y: 443 + m_Width: 46 + m_Height: 61 + - m_X: 216 + m_Y: 288 + m_Width: 44 + m_Height: 61 + - m_X: 221 + m_Y: 219 + m_Width: 44 + m_Height: 61 + - m_X: 240 + m_Y: 184 + m_Width: 34 + m_Height: 35 + - m_X: 253 + m_Y: 124 + m_Width: 49 + m_Height: 60 + - m_X: 227 + m_Y: 349 + m_Width: 44 + m_Height: 61 + - m_X: 238 + m_Y: 410 + m_Width: 44 + m_Height: 30 + - m_X: 260 + m_Y: 280 + m_Width: 40 + m_Height: 61 + - m_X: 265 + m_Y: 219 + m_Width: 27 + m_Height: 61 + - m_X: 274 + m_Y: 184 + m_Width: 33 + m_Height: 30 + - m_X: 302 + m_Y: 124 + m_Width: 49 + m_Height: 60 + - m_X: 292 + m_Y: 214 + m_Width: 27 + m_Height: 61 + - m_X: 307 + m_Y: 184 + m_Width: 45 + m_Height: 25 + - m_X: 271 + m_Y: 341 + m_Width: 27 + m_Height: 61 + - m_X: 270 + m_Y: 440 + m_Width: 48 + m_Height: 60 + - m_X: 298 + m_Y: 341 + m_Width: 48 + m_Height: 60 + - m_X: 300 + m_Y: 275 + m_Width: 46 + m_Height: 60 + - m_X: 319 + m_Y: 209 + m_Width: 46 + m_Height: 60 + - m_X: 351 + m_Y: 83 + m_Width: 46 + m_Height: 60 + - m_X: 352 + m_Y: 143 + m_Width: 46 + m_Height: 60 + - m_X: 397 + m_Y: 60 + m_Width: 40 + m_Height: 60 + - m_X: 437 + m_Y: 60 + m_Width: 49 + m_Height: 59 + - m_X: 486 + m_Y: 60 + m_Width: 25 + m_Height: 46 + - m_X: 437 + m_Y: 119 + m_Width: 49 + m_Height: 46 + - m_X: 398 + m_Y: 120 + m_Width: 39 + m_Height: 48 + - m_X: 437 + m_Y: 165 + m_Width: 47 + m_Height: 59 + - m_X: 484 + m_Y: 165 + m_Width: 27 + m_Height: 60 + - m_X: 398 + m_Y: 168 + m_Width: 38 + m_Height: 60 + - m_X: 436 + m_Y: 224 + m_Width: 47 + m_Height: 46 + - m_X: 483 + m_Y: 225 + m_Width: 26 + m_Height: 55 + - m_X: 365 + m_Y: 228 + m_Width: 46 + m_Height: 58 + - m_X: 411 + m_Y: 270 + m_Width: 46 + m_Height: 46 + - m_X: 457 + m_Y: 280 + m_Width: 45 + m_Height: 59 + - m_X: 346 + m_Y: 286 + m_Width: 45 + m_Height: 48 + - m_X: 391 + m_Y: 316 + m_Width: 45 + m_Height: 47 + - m_X: 346 + m_Y: 334 + m_Width: 45 + m_Height: 46 + - m_X: 436 + m_Y: 339 + m_Width: 44 + m_Height: 48 + - m_X: 391 + m_Y: 363 + m_Width: 44 + m_Height: 47 + - m_X: 346 + m_Y: 380 + m_Width: 42 + m_Height: 46 + - m_X: 318 + m_Y: 426 + m_Width: 35 + m_Height: 57 + - m_X: 435 + m_Y: 387 + m_Width: 41 + m_Height: 47 + - m_X: 388 + m_Y: 410 + m_Width: 41 + m_Height: 44 + - m_X: 353 + m_Y: 454 + m_Width: 40 + m_Height: 48 + - m_X: 393 + m_Y: 454 + m_Width: 36 + m_Height: 46 + - m_X: 429 + m_Y: 434 + m_Width: 41 + m_Height: 44 + m_FreeGlyphRects: + - m_X: 206 + m_Y: 46 + m_Width: 1 + m_Height: 16 + - m_X: 144 + m_Y: 60 + m_Width: 1 + m_Height: 46 + - m_X: 59 + m_Y: 107 + m_Width: 2 + m_Height: 20 + - m_X: 142 + m_Y: 115 + m_Width: 2 + m_Height: 30 + - m_X: 114 + m_Y: 127 + m_Width: 7 + m_Height: 18 + - m_X: 54 + m_Y: 178 + m_Width: 5 + m_Height: 9 + - m_X: 200 + m_Y: 106 + m_Width: 6 + m_Height: 16 + - m_X: 108 + m_Y: 187 + m_Width: 6 + m_Height: 33 + - m_X: 50 + m_Y: 300 + m_Width: 4 + m_Height: 8 + - m_X: 50 + m_Y: 372 + m_Width: 33 + m_Height: 3 + - m_X: 105 + m_Y: 248 + m_Width: 3 + m_Height: 42 + - m_X: 48 + m_Y: 449 + m_Width: 46 + m_Height: 1 + - m_X: 94 + m_Y: 508 + m_Width: 417 + m_Height: 3 + - m_X: 83 + m_Y: 446 + m_Width: 11 + m_Height: 4 + - m_X: 105 + m_Y: 307 + m_Width: 20 + m_Height: 1 + - m_X: 125 + m_Y: 369 + m_Width: 24 + m_Height: 3 + - m_X: 142 + m_Y: 290 + m_Width: 2 + m_Height: 17 + - m_X: 142 + m_Y: 300 + m_Width: 29 + m_Height: 7 + - m_X: 197 + m_Y: 166 + m_Width: 3 + m_Height: 18 + - m_X: 171 + m_Y: 362 + m_Width: 11 + m_Height: 7 + - m_X: 149 + m_Y: 443 + m_Width: 33 + m_Height: 3 + - m_X: 208 + m_Y: 443 + m_Width: 16 + m_Height: 3 + - m_X: 224 + m_Y: 504 + m_Width: 287 + m_Height: 7 + - m_X: 176 + m_Y: 288 + m_Width: 40 + m_Height: 12 + - m_X: 197 + m_Y: 219 + m_Width: 24 + m_Height: 7 + - m_X: 253 + m_Y: 122 + m_Width: 9 + m_Height: 2 + - m_X: 216 + m_Y: 349 + m_Width: 11 + m_Height: 13 + - m_X: 227 + m_Y: 410 + m_Width: 11 + m_Height: 14 + - m_X: 221 + m_Y: 280 + m_Width: 39 + m_Height: 8 + - m_X: 315 + m_Y: 62 + m_Width: 12 + m_Height: 62 + - m_X: 274 + m_Y: 214 + m_Width: 18 + m_Height: 5 + - m_X: 260 + m_Y: 341 + m_Width: 11 + m_Height: 8 + - m_X: 238 + m_Y: 440 + m_Width: 32 + m_Height: 3 + - m_X: 292 + m_Y: 275 + m_Width: 8 + m_Height: 5 + - m_X: 307 + m_Y: 209 + m_Width: 12 + m_Height: 5 + - m_X: 383 + m_Y: 23 + m_Width: 3 + m_Height: 60 + - m_X: 315 + m_Y: 83 + m_Width: 36 + m_Height: 41 + - m_X: 351 + m_Y: 143 + m_Width: 1 + m_Height: 41 + - m_X: 383 + m_Y: 60 + m_Width: 14 + m_Height: 23 + - m_X: 498 + m_Y: 0 + m_Width: 13 + m_Height: 60 + - m_X: 397 + m_Y: 120 + m_Width: 1 + m_Height: 23 + - m_X: 486 + m_Y: 106 + m_Width: 25 + m_Height: 59 + - m_X: 352 + m_Y: 203 + m_Width: 46 + m_Height: 6 + - m_X: 436 + m_Y: 168 + m_Width: 1 + m_Height: 56 + - m_X: 509 + m_Y: 225 + m_Width: 2 + m_Height: 286 + - m_X: 483 + m_Y: 224 + m_Width: 1 + m_Height: 1 + - m_X: 365 + m_Y: 203 + m_Width: 33 + m_Height: 25 + - m_X: 319 + m_Y: 269 + m_Width: 46 + m_Height: 6 + - m_X: 411 + m_Y: 228 + m_Width: 25 + m_Height: 42 + - m_X: 502 + m_Y: 280 + m_Width: 9 + m_Height: 231 + - m_X: 457 + m_Y: 270 + m_Width: 26 + m_Height: 10 + - m_X: 346 + m_Y: 269 + m_Width: 19 + m_Height: 17 + - m_X: 391 + m_Y: 286 + m_Width: 20 + m_Height: 30 + - m_X: 300 + m_Y: 335 + m_Width: 46 + m_Height: 6 + - m_X: 480 + m_Y: 339 + m_Width: 31 + m_Height: 172 + - m_X: 436 + m_Y: 316 + m_Width: 21 + m_Height: 23 + - m_X: 271 + m_Y: 402 + m_Width: 75 + m_Height: 8 + - m_X: 282 + m_Y: 402 + m_Width: 64 + m_Height: 24 + - m_X: 282 + m_Y: 402 + m_Width: 36 + m_Height: 38 + - m_X: 298 + m_Y: 401 + m_Width: 48 + m_Height: 25 + - m_X: 298 + m_Y: 401 + m_Width: 20 + m_Height: 39 + - m_X: 476 + m_Y: 387 + m_Width: 35 + m_Height: 124 + - m_X: 435 + m_Y: 363 + m_Width: 1 + m_Height: 24 + - m_X: 388 + m_Y: 380 + m_Width: 3 + m_Height: 30 + - m_X: 270 + m_Y: 502 + m_Width: 241 + m_Height: 9 + - m_X: 270 + m_Y: 500 + m_Width: 83 + m_Height: 11 + - m_X: 318 + m_Y: 483 + m_Width: 35 + m_Height: 28 + - m_X: 353 + m_Y: 426 + m_Width: 35 + m_Height: 28 + - m_X: 393 + m_Y: 500 + m_Width: 118 + m_Height: 11 + - m_X: 429 + m_Y: 410 + m_Width: 6 + m_Height: 24 + - m_X: 429 + m_Y: 478 + m_Width: 82 + m_Height: 33 + - m_X: 470 + m_Y: 434 + m_Width: 41 + m_Height: 77 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 1f7095e4df627d446a114125f9882224 + pointSizeSamplingMode: 0 + pointSize: 67 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!21 &6383068405828875511 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-HeavyItalic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -1361375102305407215} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HeavyItalic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HeavyItalic SDF.asset.meta new file mode 100644 index 0000000..cd8c796 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-HeavyItalic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 191c85d053c814242b6d9fab0a91b9f9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Italic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Italic SDF.asset new file mode 100644 index 0000000..1524ee7 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Italic SDF.asset @@ -0,0 +1,2805 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Italic SDF + m_EditorClassIdentifier: + hashCode: 898919216 + material: {fileID: 7050917537736483203} + materialHashCode: -1953287408 + m_Version: 1.1.0 + m_SourceFontFileGUID: e0fc9e42b93cafb49903ae27c9cb0d9c + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FaceIndex: 0 + m_FamilyName: Lato + m_StyleName: Italic + m_PointSize: 71 + m_Scale: 1 + m_UnitsPerEM: 0 + m_LineHeight: 85.2 + m_AscentLine: 70.077 + m_CapLine: 52 + m_MeanLine: 37 + m_Baseline: 0 + m_DescentLine: -15.123 + m_SuperscriptOffset: 70.077 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -15.123 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -18.105 + m_UnderlineThickness: 3.1595001 + m_StrikethroughOffset: 14.8 + m_StrikethroughThickness: 3.1595001 + m_TabWidth: 17 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 16.609375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 3 + m_Metrics: + m_Width: 44.125 + m_Height: 50.875 + m_HorizontalBearingX: -2.3125 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 44.796875 + m_GlyphRect: + m_X: 279 + m_Y: 194 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 6 + m_Metrics: + m_Width: 36.453125 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 42.734375 + m_GlyphRect: + m_X: 343 + m_Y: 130 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 7 + m_Metrics: + m_Width: 41.59375 + m_Height: 52 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 44.34375 + m_GlyphRect: + m_X: 127 + m_Y: 287 + m_Width: 43 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 9 + m_Metrics: + m_Width: 44.15625 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 50.234375 + m_GlyphRect: + m_X: 230 + m_Y: 6 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 11 + m_Metrics: + m_Width: 35.203125 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 38.203125 + m_GlyphRect: + m_X: 383 + m_Y: 225 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 13 + m_Metrics: + m_Width: 35.203125 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 37.625 + m_GlyphRect: + m_X: 335 + m_Y: 239 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 14 + m_Metrics: + m_Width: 43.234375 + m_Height: 52 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 48.3125 + m_GlyphRect: + m_X: 74 + m_Y: 159 + m_Width: 44 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 15 + m_Metrics: + m_Width: 44.4375 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 50.40625 + m_GlyphRect: + m_X: 230 + m_Y: 68 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 17 + m_Metrics: + m_Width: 12.875 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 18.921875 + m_GlyphRect: + m_X: 491 + m_Y: 130 + m_Width: 14 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 19 + m_Metrics: + m_Width: 27.65625 + m_Height: 51.4375 + m_HorizontalBearingX: -1.28125 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 28.4375 + m_GlyphRect: + m_X: 240 + m_Y: 325 + m_Width: 29 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 20 + m_Metrics: + m_Width: 42.703125 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 43.875 + m_GlyphRect: + m_X: 288 + m_Y: 130 + m_Width: 44 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 21 + m_Metrics: + m_Width: 27.40625 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 33.765625 + m_GlyphRect: + m_X: 412 + m_Y: 392 + m_Width: 28 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 24 + m_Metrics: + m_Width: 55.265625 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 61.234375 + m_GlyphRect: + m_X: 212 + m_Y: 194 + m_Width: 56 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 25 + m_Metrics: + m_Width: 44.4375 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 50.40625 + m_GlyphRect: + m_X: 286 + m_Y: 6 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 27 + m_Metrics: + m_Width: 46.921875 + m_Height: 51.96875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 52.9375 + m_GlyphRect: + m_X: 55 + m_Y: 70 + m_Width: 48 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 30 + m_Metrics: + m_Width: 36.03125 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 39.90625 + m_GlyphRect: + m_X: 443 + m_Y: 130 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 32 + m_Metrics: + m_Width: 46.921875 + m_Height: 61.984375 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 52.9375 + m_GlyphRect: + m_X: 37 + m_Y: 317 + m_Width: 48 + m_Height: 63 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 33 + m_Metrics: + m_Width: 35.3125 + m_Height: 50.875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.421875 + m_GlyphRect: + m_X: 430 + m_Y: 239 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 34 + m_Metrics: + m_Width: 34.390625 + m_Height: 51.9375 + m_HorizontalBearingX: 0.46875 + m_HorizontalBearingY: 51.375 + m_HorizontalAdvance: 36.0625 + m_GlyphRect: + m_X: 129 + m_Y: 134 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 36 + m_Metrics: + m_Width: 37.375 + m_Height: 50.875 + m_HorizontalBearingX: 3.90625 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 38.765625 + m_GlyphRect: + m_X: 456 + m_Y: 68 + m_Width: 39 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 38 + m_Metrics: + m_Width: 41.859375 + m_Height: 51.484375 + m_HorizontalBearingX: 4.828125 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 48.640625 + m_GlyphRect: + m_X: 157 + m_Y: 454 + m_Width: 43 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 40 + m_Metrics: + m_Width: 44.125 + m_Height: 50.875 + m_HorizontalBearingX: 3.875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 44.6875 + m_GlyphRect: + m_X: 286 + m_Y: 68 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 41 + m_Metrics: + m_Width: 65.921875 + m_Height: 50.875 + m_HorizontalBearingX: 4.4375 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 67.8125 + m_GlyphRect: + m_X: 210 + m_Y: 132 + m_Width: 67 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 42 + m_Metrics: + m_Width: 47.171875 + m_Height: 50.875 + m_HorizontalBearingX: -2.40625 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 43.234375 + m_GlyphRect: + m_X: 249 + m_Y: 256 + m_Width: 48 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 43 + m_Metrics: + m_Width: 40.9375 + m_Height: 50.875 + m_HorizontalBearingX: 3.796875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.328125 + m_GlyphRect: + m_X: 342 + m_Y: 6 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 44 + m_Metrics: + m_Width: 41.859375 + m_Height: 50.875 + m_HorizontalBearingX: -0.921875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 39.4375 + m_GlyphRect: + m_X: 342 + m_Y: 68 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 45 + m_Metrics: + m_Width: 31.546875 + m_Height: 36.953125 + m_HorizontalBearingX: 1.78125 + m_HorizontalBearingY: 36.453125 + m_HorizontalAdvance: 36.28125 + m_GlyphRect: + m_X: 113 + m_Y: 460 + m_Width: 33 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 48 + m_Metrics: + m_Width: 32.59375 + m_Height: 52.796875 + m_HorizontalBearingX: 2.09375 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 37.53125 + m_GlyphRect: + m_X: 171 + m_Y: 389 + m_Width: 33 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.640625 + m_Height: 36.953125 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 36.453125 + m_HorizontalAdvance: 32.265625 + m_GlyphRect: + m_X: 477 + m_Y: 270 + m_Width: 29 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 55 + m_Metrics: + m_Width: 34.6875 + m_Height: 52.796875 + m_HorizontalBearingX: 1.953125 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 37.5625 + m_GlyphRect: + m_X: 124 + m_Y: 389 + m_Width: 36 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 59 + m_Metrics: + m_Width: 29.171875 + m_Height: 36.953125 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 36.453125 + m_HorizontalAdvance: 33.96875 + m_GlyphRect: + m_X: 462 + m_Y: 366 + m_Width: 30 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 61 + m_Metrics: + m_Width: 23.28125 + m_Height: 60.453125 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 51.609375 + m_HorizontalAdvance: 22.75 + m_GlyphRect: + m_X: 38 + m_Y: 162 + m_Width: 25 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 93 + m_Metrics: + m_Width: 36.78125 + m_Height: 49.421875 + m_HorizontalBearingX: -1.984375 + m_HorizontalBearingY: 36.5 + m_HorizontalAdvance: 34.359375 + m_GlyphRect: + m_X: 391 + m_Y: 164 + m_Width: 37 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 95 + m_Metrics: + m_Width: 31.625 + m_Height: 52.296875 + m_HorizontalBearingX: 2.09375 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 37.59375 + m_GlyphRect: + m_X: 169 + m_Y: 198 + m_Width: 32 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 98 + m_Metrics: + m_Width: 12.953125 + m_Height: 51.796875 + m_HorizontalBearingX: 2.453125 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 16.328125 + m_GlyphRect: + m_X: 205 + m_Y: 69 + m_Width: 14 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 102 + m_Metrics: + m_Width: 21.515625 + m_Height: 64.71875 + m_HorizontalBearingX: -6.28125 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 16.265625 + m_GlyphRect: + m_X: 37 + m_Y: 241 + m_Width: 23 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 104 + m_Metrics: + m_Width: 32.125 + m_Height: 52.296875 + m_HorizontalBearingX: 2.03125 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 33.65625 + m_GlyphRect: + m_X: 161 + m_Y: 6 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 108 + m_Metrics: + m_Width: 50.296875 + m_Height: 36.5 + m_HorizontalBearingX: 2.09375 + m_HorizontalBearingY: 36.5 + m_HorizontalAdvance: 55.875 + m_GlyphRect: + m_X: 395 + m_Y: 6 + m_Width: 51 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 109 + m_Metrics: + m_Width: 31.671875 + m_Height: 36.5 + m_HorizontalBearingX: 2.09375 + m_HorizontalBearingY: 36.5 + m_HorizontalAdvance: 37.625 + m_GlyphRect: + m_X: 324 + m_Y: 423 + m_Width: 32 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 111 + m_Metrics: + m_Width: 31.765625 + m_Height: 37 + m_HorizontalBearingX: 2.09375 + m_HorizontalBearingY: 36.5 + m_HorizontalAdvance: 36.84375 + m_GlyphRect: + m_X: 369 + m_Y: 381 + m_Width: 32 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 114 + m_Metrics: + m_Width: 34.078125 + m_Height: 48.671875 + m_HorizontalBearingX: 0.609375 + m_HorizontalBearingY: 36.5 + m_HorizontalAdvance: 37.53125 + m_GlyphRect: + m_X: 327 + m_Y: 301 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 116 + m_Metrics: + m_Width: 31.546875 + m_Height: 48.625 + m_HorizontalBearingX: 1.78125 + m_HorizontalBearingY: 36.453125 + m_HorizontalAdvance: 36.3125 + m_GlyphRect: + m_X: 325 + m_Y: 362 + m_Width: 33 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 117 + m_Metrics: + m_Width: 23.1875 + m_Height: 36.453125 + m_HorizontalBearingX: 2.09375 + m_HorizontalBearingY: 36.453125 + m_HorizontalAdvance: 24.28125 + m_GlyphRect: + m_X: 477 + m_Y: 415 + m_Width: 24 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 118 + m_Metrics: + m_Width: 26.90625 + m_Height: 37.0625 + m_HorizontalBearingX: -0.03125 + m_HorizontalBearingY: 36.5 + m_HorizontalAdvance: 28.40625 + m_GlyphRect: + m_X: 438 + m_Y: 454 + m_Width: 28 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 124 + m_Metrics: + m_Width: 21.296875 + m_Height: 48.203125 + m_HorizontalBearingX: 2.59375 + m_HorizontalBearingY: 47.640625 + m_HorizontalAdvance: 25.171875 + m_GlyphRect: + m_X: 405 + m_Y: 454 + m_Width: 22 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 134 + m_Metrics: + m_Width: 31.65625 + m_Height: 36.46875 + m_HorizontalBearingX: 2.953125 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 37.59375 + m_GlyphRect: + m_X: 280 + m_Y: 378 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 136 + m_Metrics: + m_Width: 32.59375 + m_Height: 35.96875 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 34.015625 + m_GlyphRect: + m_X: 373 + m_Y: 334 + m_Width: 34 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 137 + m_Metrics: + m_Width: 49.171875 + m_Height: 36.03125 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 36.03125 + m_HorizontalAdvance: 51.328125 + m_GlyphRect: + m_X: 395 + m_Y: 54 + m_Width: 50 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 138 + m_Metrics: + m_Width: 35.328125 + m_Height: 35.96875 + m_HorizontalBearingX: -2.234375 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 32.9375 + m_GlyphRect: + m_X: 335 + m_Y: 192 + m_Width: 37 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 139 + m_Metrics: + m_Width: 32.65625 + m_Height: 48.140625 + m_HorizontalBearingX: 2.5625 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 34.046875 + m_GlyphRect: + m_X: 280 + m_Y: 318 + m_Width: 34 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 140 + m_Metrics: + m_Width: 30.3125 + m_Height: 35.96875 + m_HorizontalBearingX: -0.640625 + m_HorizontalBearingY: 35.96875 + m_HorizontalAdvance: 30.109375 + m_GlyphRect: + m_X: 475 + m_Y: 319 + m_Width: 31 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 170 + m_Metrics: + m_Width: 11.796875 + m_Height: 10.15625 + m_HorizontalBearingX: 10.078125 + m_HorizontalBearingY: 51.4375 + m_HorizontalAdvance: 26.125 + m_GlyphRect: + m_X: 96 + m_Y: 368 + m_Width: 12 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 307 + m_Metrics: + m_Width: 12.609375 + m_Height: 51.40625 + m_HorizontalBearingX: 2.65625 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 17.921875 + m_GlyphRect: + m_X: 205 + m_Y: 6 + m_Width: 14 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 308 + m_Metrics: + m_Width: 23.25 + m_Height: 51.90625 + m_HorizontalBearingX: 5.609375 + m_HorizontalBearingY: 51.375 + m_HorizontalAdvance: 29.71875 + m_GlyphRect: + m_X: 175 + m_Y: 134 + m_Width: 24 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 310 + m_Metrics: + m_Width: 8.59375 + m_Height: 18 + m_HorizontalBearingX: 1.53125 + m_HorizontalBearingY: 8.375 + m_HorizontalAdvance: 15.9375 + m_GlyphRect: + m_X: 308 + m_Y: 256 + m_Width: 10 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 311 + m_Metrics: + m_Width: 12.1875 + m_Height: 45 + m_HorizontalBearingX: 2.53125 + m_HorizontalBearingY: 35.375 + m_HorizontalAdvance: 18.421875 + m_GlyphRect: + m_X: 89 + m_Y: 460 + m_Width: 13 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 312 + m_Metrics: + m_Width: 8.875 + m_Height: 8.90625 + m_HorizontalBearingX: 1.84375 + m_HorizontalBearingY: 8.375 + m_HorizontalAdvance: 16.609375 + m_GlyphRect: + m_X: 100 + m_Y: 134 + m_Width: 10 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 313 + m_Metrics: + m_Width: 45.375 + m_Height: 8.90625 + m_HorizontalBearingX: 1.84375 + m_HorizontalBearingY: 8.375 + m_HorizontalAdvance: 53.140625 + m_GlyphRect: + m_X: 119 + m_Y: 368 + m_Width: 47 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 324 + m_Metrics: + m_Width: 31.78125 + m_Height: 54.75 + m_HorizontalBearingX: -0.75 + m_HorizontalBearingY: 51.515625 + m_HorizontalAdvance: 29.671875 + m_GlyphRect: + m_X: 71 + m_Y: 234 + m_Width: 33 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 325 + m_Metrics: + m_Width: 4.90625 + m_Height: 66.59375 + m_HorizontalBearingX: 6.671875 + m_HorizontalBearingY: 54.421875 + m_HorizontalAdvance: 18.359375 + m_GlyphRect: + m_X: 6 + m_Y: 85 + m_Width: 6 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 327 + m_Metrics: + m_Width: 18.3125 + m_Height: 54.75 + m_HorizontalBearingX: 5.859375 + m_HorizontalBearingY: 51.515625 + m_HorizontalAdvance: 29.421875 + m_GlyphRect: + m_X: 96 + m_Y: 301 + m_Width: 20 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 328 + m_Metrics: + m_Width: 16.875 + m_Height: 5.1875 + m_HorizontalBearingX: 3.96875 + m_HorizontalBearingY: 23.859375 + m_HorizontalAdvance: 24.921875 + m_GlyphRect: + m_X: 165 + m_Y: 351 + m_Width: 18 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 331 + m_Metrics: + m_Width: 26.265625 + m_Height: 4.109375 + m_HorizontalBearingX: -0.953125 + m_HorizontalBearingY: -5.96875 + m_HorizontalAdvance: 31.53125 + m_GlyphRect: + m_X: 127 + m_Y: 351 + m_Width: 27 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 334 + m_Metrics: + m_Width: 16.96875 + m_Height: 65.3125 + m_HorizontalBearingX: 3.015625 + m_HorizontalBearingY: 54.984375 + m_HorizontalAdvance: 18.359375 + m_GlyphRect: + m_X: 35 + m_Y: 395 + m_Width: 17 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 335 + m_Metrics: + m_Width: 16.796875 + m_Height: 65.3125 + m_HorizontalBearingX: -1.3125 + m_HorizontalBearingY: 54.984375 + m_HorizontalAdvance: 18.3125 + m_GlyphRect: + m_X: 6 + m_Y: 395 + m_Width: 18 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 336 + m_Metrics: + m_Width: 20.0625 + m_Height: 64.578125 + m_HorizontalBearingX: 2.40625 + m_HorizontalBearingY: 54.390625 + m_HorizontalAdvance: 20.59375 + m_GlyphRect: + m_X: 6 + m_Y: 164 + m_Width: 21 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 337 + m_Metrics: + m_Width: 20.140625 + m_Height: 64.578125 + m_HorizontalBearingX: -1.78125 + m_HorizontalBearingY: 54.390625 + m_HorizontalAdvance: 20.625 + m_GlyphRect: + m_X: 23 + m_Y: 85 + m_Width: 21 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 338 + m_Metrics: + m_Width: 19.59375 + m_Height: 64.578125 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: 54.390625 + m_HorizontalAdvance: 20.15625 + m_GlyphRect: + m_X: 6 + m_Y: 241 + m_Width: 20 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 339 + m_Metrics: + m_Width: 19.640625 + m_Height: 64.578125 + m_HorizontalBearingX: -1.640625 + m_HorizontalBearingY: 54.390625 + m_HorizontalAdvance: 20.203125 + m_GlyphRect: + m_X: 6 + m_Y: 318 + m_Width: 20 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 340 + m_Metrics: + m_Width: 20.90625 + m_Height: 22.71875 + m_HorizontalBearingX: 5.96875 + m_HorizontalBearingY: 53.421875 + m_HorizontalAdvance: 28.046875 + m_GlyphRect: + m_X: 258 + m_Y: 426 + m_Width: 22 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 345 + m_Metrics: + m_Width: 29.546875 + m_Height: 22.9375 + m_HorizontalBearingX: 7.625 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 258 + m_Y: 471 + m_Width: 31 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 346 + m_Metrics: + m_Width: 32.90625 + m_Height: 12.5625 + m_HorizontalBearingX: 4.125 + m_HorizontalBearingY: 27.265625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 55 + m_Y: 134 + m_Width: 34 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 347 + m_Metrics: + m_Width: 6.703125 + m_Height: 18.0625 + m_HorizontalBearingX: 6.390625 + m_HorizontalBearingY: 50.796875 + m_HorizontalAdvance: 13.8125 + m_GlyphRect: + m_X: 308 + m_Y: 286 + m_Width: 8 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 348 + m_Metrics: + m_Width: 17.703125 + m_Height: 18.0625 + m_HorizontalBearingX: 6.390625 + m_HorizontalBearingY: 50.796875 + m_HorizontalAdvance: 24.671875 + m_GlyphRect: + m_X: 487 + m_Y: 192 + m_Width: 19 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 349 + m_Metrics: + m_Width: 41.75 + m_Height: 51.9375 + m_HorizontalBearingX: 1.953125 + m_HorizontalBearingY: 51.375 + m_HorizontalAdvance: 46.640625 + m_GlyphRect: + m_X: 115 + m_Y: 223 + m_Width: 43 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 350 + m_Metrics: + m_Width: 48.953125 + m_Height: 56.65625 + m_HorizontalBearingX: 3.125 + m_HorizontalBearingY: 48.171875 + m_HorizontalAdvance: 54.5625 + m_GlyphRect: + m_X: 63 + m_Y: 391 + m_Width: 50 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 360 + m_Metrics: + m_Width: 37.3125 + m_Height: 66.640625 + m_HorizontalBearingX: 1.59375 + m_HorizontalBearingY: 58.15625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 38 + m_Height: 68 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 368 + m_Metrics: + m_Width: 39.75 + m_Height: 50.796875 + m_HorizontalBearingX: 1.28125 + m_HorizontalBearingY: 50.796875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 457 + m_Y: 6 + m_Width: 41 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 397 + m_Metrics: + m_Width: 34.90625 + m_Height: 51.9375 + m_HorizontalBearingX: 3.578125 + m_HorizontalBearingY: 51.40625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 114 + m_Y: 6 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 398 + m_Metrics: + m_Width: 25.859375 + m_Height: 50.984375 + m_HorizontalBearingX: 7.234375 + m_HorizontalBearingY: 50.984375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 367 + m_Y: 454 + m_Width: 27 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 399 + m_Metrics: + m_Width: 35.1875 + m_Height: 51.40625 + m_HorizontalBearingX: 2.09375 + m_HorizontalBearingY: 51.40625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 211 + m_Y: 454 + m_Width: 36 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 400 + m_Metrics: + m_Width: 33.796875 + m_Height: 51.96875 + m_HorizontalBearingX: 3.265625 + m_HorizontalBearingY: 51.40625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 114 + m_Y: 70 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 401 + m_Metrics: + m_Width: 35.421875 + m_Height: 50.875 + m_HorizontalBearingX: 1.921875 + m_HorizontalBearingY: 50.875 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 395 + m_Y: 102 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.25 + m_Height: 51.40625 + m_HorizontalBearingX: 3.09375 + m_HorizontalBearingY: 50.84375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 194 + m_Y: 326 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 403 + m_Metrics: + m_Width: 33.90625 + m_Height: 50.84375 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 50.84375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 429 + m_Y: 301 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 404 + m_Metrics: + m_Width: 30.84375 + m_Height: 51.40625 + m_HorizontalBearingX: 6.5 + m_HorizontalBearingY: 51.40625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 215 + m_Y: 389 + m_Width: 32 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 433 + m_Metrics: + m_Width: 34.53125 + m_Height: 35.140625 + m_HorizontalBearingX: 3.625 + m_HorizontalBearingY: 41.359375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 382 + m_Y: 287 + m_Width: 36 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 437 + m_Metrics: + m_Width: 32.4375 + m_Height: 16.46875 + m_HorizontalBearingX: 4.546875 + m_HorizontalBearingY: 32.15625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 418 + m_Y: 363 + m_Width: 33 + m_Height: 18 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 440 + m_Metrics: + m_Width: 29.5 + m_Height: 31.125 + m_HorizontalBearingX: 5.921875 + m_HorizontalBearingY: 39.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 6 + m_Y: 472 + m_Width: 31 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 441 + m_Metrics: + m_Width: 29.53125 + m_Height: 31.125 + m_HorizontalBearingX: 6.25 + m_HorizontalBearingY: 39.4375 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 48 + m_Y: 472 + m_Width: 30 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 12.578125 + m_Height: 52.296875 + m_HorizontalBearingX: 2.265625 + m_HorizontalBearingY: 52.296875 + m_HorizontalAdvance: 15.96875 + m_GlyphRect: + m_X: 181 + m_Y: 262 + m_Width: 13 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 31.984375 + m_Height: 51.40625 + m_HorizontalBearingX: 4.265625 + m_HorizontalBearingY: 50.84375 + m_HorizontalAdvance: 37.875 + m_GlyphRect: + m_X: 205 + m_Y: 262 + m_Width: 33 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 33.296875 + m_Height: 51.96875 + m_HorizontalBearingX: 3.65625 + m_HorizontalBearingY: 51.40625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 160 + m_Y: 70 + m_Width: 34 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 47.03125 + m_Height: 51.9375 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 51.328125 + m_HorizontalAdvance: 52.828125 + m_GlyphRect: + m_X: 55 + m_Y: 6 + m_Width: 48 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 35.921875 + m_Height: 35.921875 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 35.921875 + m_HorizontalAdvance: 42.59375 + m_GlyphRect: + m_X: 439 + m_Y: 192 + m_Width: 37 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 11.875 + m_Height: 35.90625 + m_HorizontalBearingX: 2.84375 + m_HorizontalBearingY: 35.375 + m_HorizontalAdvance: 17.640625 + m_GlyphRect: + m_X: 487 + m_Y: 222 + m_Width: 13 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_ClassDefinitionType: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 6471949460707905293} + m_AtlasTextureIndex: 0 + m_IsMultiAtlasTexturesEnabled: 0 + m_ClearDynamicDataOnBuild: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 49 + m_Height: 79 + - m_X: 0 + m_Y: 79 + m_Width: 17 + m_Height: 79 + - m_X: 0 + m_Y: 158 + m_Width: 32 + m_Height: 77 + - m_X: 17 + m_Y: 79 + m_Width: 32 + m_Height: 77 + - m_X: 0 + m_Y: 235 + m_Width: 31 + m_Height: 77 + - m_X: 0 + m_Y: 312 + m_Width: 31 + m_Height: 77 + - m_X: 0 + m_Y: 389 + m_Width: 29 + m_Height: 77 + - m_X: 0 + m_Y: 466 + m_Width: 42 + m_Height: 43 + - m_X: 29 + m_Y: 389 + m_Width: 28 + m_Height: 77 + - m_X: 42 + m_Y: 466 + m_Width: 41 + m_Height: 43 + - m_X: 31 + m_Y: 235 + m_Width: 34 + m_Height: 76 + - m_X: 31 + m_Y: 311 + m_Width: 59 + m_Height: 74 + - m_X: 32 + m_Y: 156 + m_Width: 36 + m_Height: 72 + - m_X: 57 + m_Y: 385 + m_Width: 61 + m_Height: 69 + - m_X: 83 + m_Y: 454 + m_Width: 24 + m_Height: 57 + - m_X: 107 + m_Y: 454 + m_Width: 44 + m_Height: 49 + - m_X: 65 + m_Y: 228 + m_Width: 44 + m_Height: 67 + - m_X: 90 + m_Y: 295 + m_Width: 31 + m_Height: 67 + - m_X: 90 + m_Y: 362 + m_Width: 23 + m_Height: 22 + - m_X: 113 + m_Y: 362 + m_Width: 58 + m_Height: 21 + - m_X: 118 + m_Y: 383 + m_Width: 47 + m_Height: 65 + - m_X: 151 + m_Y: 448 + m_Width: 54 + m_Height: 63 + - m_X: 165 + m_Y: 383 + m_Width: 44 + m_Height: 65 + - m_X: 205 + m_Y: 448 + m_Width: 47 + m_Height: 63 + - m_X: 49 + m_Y: 0 + m_Width: 59 + m_Height: 64 + - m_X: 49 + m_Y: 64 + m_Width: 59 + m_Height: 64 + - m_X: 49 + m_Y: 128 + m_Width: 45 + m_Height: 25 + - m_X: 68 + m_Y: 153 + m_Width: 55 + m_Height: 64 + - m_X: 94 + m_Y: 128 + m_Width: 21 + m_Height: 21 + - m_X: 109 + m_Y: 217 + m_Width: 54 + m_Height: 64 + - m_X: 121 + m_Y: 281 + m_Width: 54 + m_Height: 64 + - m_X: 121 + m_Y: 345 + m_Width: 38 + m_Height: 17 + - m_X: 159 + m_Y: 345 + m_Width: 29 + m_Height: 17 + - m_X: 108 + m_Y: 0 + m_Width: 47 + m_Height: 64 + - m_X: 108 + m_Y: 64 + m_Width: 46 + m_Height: 64 + - m_X: 123 + m_Y: 128 + m_Width: 46 + m_Height: 64 + - m_X: 154 + m_Y: 64 + m_Width: 45 + m_Height: 64 + - m_X: 155 + m_Y: 0 + m_Width: 44 + m_Height: 64 + - m_X: 163 + m_Y: 192 + m_Width: 43 + m_Height: 64 + - m_X: 169 + m_Y: 128 + m_Width: 35 + m_Height: 64 + - m_X: 175 + m_Y: 256 + m_Width: 24 + m_Height: 64 + - m_X: 188 + m_Y: 320 + m_Width: 46 + m_Height: 63 + - m_X: 199 + m_Y: 256 + m_Width: 44 + m_Height: 63 + - m_X: 209 + m_Y: 383 + m_Width: 43 + m_Height: 63 + - m_X: 234 + m_Y: 319 + m_Width: 40 + m_Height: 63 + - m_X: 199 + m_Y: 0 + m_Width: 25 + m_Height: 63 + - m_X: 199 + m_Y: 63 + m_Width: 25 + m_Height: 63 + - m_X: 204 + m_Y: 126 + m_Width: 78 + m_Height: 62 + - m_X: 206 + m_Y: 188 + m_Width: 67 + m_Height: 62 + - m_X: 243 + m_Y: 250 + m_Width: 59 + m_Height: 62 + - m_X: 273 + m_Y: 188 + m_Width: 56 + m_Height: 62 + - m_X: 224 + m_Y: 0 + m_Width: 56 + m_Height: 62 + - m_X: 224 + m_Y: 62 + m_Width: 56 + m_Height: 62 + - m_X: 280 + m_Y: 0 + m_Width: 56 + m_Height: 62 + - m_X: 280 + m_Y: 62 + m_Width: 56 + m_Height: 62 + - m_X: 282 + m_Y: 124 + m_Width: 55 + m_Height: 62 + - m_X: 336 + m_Y: 0 + m_Width: 53 + m_Height: 62 + - m_X: 336 + m_Y: 62 + m_Width: 53 + m_Height: 62 + - m_X: 389 + m_Y: 0 + m_Width: 62 + m_Height: 48 + - m_X: 451 + m_Y: 0 + m_Width: 52 + m_Height: 62 + - m_X: 389 + m_Y: 48 + m_Width: 61 + m_Height: 48 + - m_X: 450 + m_Y: 62 + m_Width: 50 + m_Height: 62 + - m_X: 389 + m_Y: 96 + m_Width: 48 + m_Height: 62 + - m_X: 337 + m_Y: 124 + m_Width: 48 + m_Height: 62 + - m_X: 437 + m_Y: 124 + m_Width: 48 + m_Height: 62 + - m_X: 485 + m_Y: 124 + m_Width: 25 + m_Height: 62 + - m_X: 385 + m_Y: 158 + m_Width: 48 + m_Height: 61 + - m_X: 329 + m_Y: 186 + m_Width: 48 + m_Height: 47 + - m_X: 433 + m_Y: 186 + m_Width: 48 + m_Height: 47 + - m_X: 481 + m_Y: 186 + m_Width: 30 + m_Height: 30 + - m_X: 481 + m_Y: 216 + m_Width: 24 + m_Height: 48 + - m_X: 377 + m_Y: 219 + m_Width: 47 + m_Height: 62 + - m_X: 329 + m_Y: 233 + m_Width: 47 + m_Height: 62 + - m_X: 302 + m_Y: 250 + m_Width: 21 + m_Height: 30 + - m_X: 302 + m_Y: 280 + m_Width: 19 + m_Height: 30 + - m_X: 424 + m_Y: 233 + m_Width: 47 + m_Height: 62 + - m_X: 471 + m_Y: 264 + m_Width: 40 + m_Height: 49 + - m_X: 376 + m_Y: 281 + m_Width: 47 + m_Height: 47 + - m_X: 423 + m_Y: 295 + m_Width: 46 + m_Height: 62 + - m_X: 469 + m_Y: 313 + m_Width: 42 + m_Height: 47 + - m_X: 321 + m_Y: 295 + m_Width: 46 + m_Height: 61 + - m_X: 274 + m_Y: 312 + m_Width: 45 + m_Height: 60 + - m_X: 367 + m_Y: 328 + m_Width: 45 + m_Height: 47 + - m_X: 319 + m_Y: 356 + m_Width: 44 + m_Height: 61 + - m_X: 274 + m_Y: 372 + m_Width: 44 + m_Height: 48 + - m_X: 412 + m_Y: 357 + m_Width: 44 + m_Height: 29 + - m_X: 363 + m_Y: 375 + m_Width: 43 + m_Height: 49 + - m_X: 318 + m_Y: 417 + m_Width: 43 + m_Height: 48 + - m_X: 252 + m_Y: 465 + m_Width: 42 + m_Height: 35 + - m_X: 252 + m_Y: 420 + m_Width: 33 + m_Height: 35 + - m_X: 456 + m_Y: 360 + m_Width: 41 + m_Height: 49 + - m_X: 406 + m_Y: 386 + m_Width: 39 + m_Height: 62 + - m_X: 361 + m_Y: 448 + m_Width: 38 + m_Height: 62 + - m_X: 399 + m_Y: 448 + m_Width: 33 + m_Height: 60 + - m_X: 432 + m_Y: 448 + m_Width: 39 + m_Height: 49 + - m_X: 471 + m_Y: 409 + m_Width: 35 + m_Height: 48 + m_FreeGlyphRects: + - m_X: 17 + m_Y: 156 + m_Width: 15 + m_Height: 2 + - m_X: 31 + m_Y: 385 + m_Width: 26 + m_Height: 4 + - m_X: 0 + m_Y: 509 + m_Width: 83 + m_Height: 2 + - m_X: 57 + m_Y: 454 + m_Width: 26 + m_Height: 12 + - m_X: 32 + m_Y: 228 + m_Width: 33 + m_Height: 7 + - m_X: 65 + m_Y: 295 + m_Width: 25 + m_Height: 16 + - m_X: 90 + m_Y: 384 + m_Width: 28 + m_Height: 1 + - m_X: 113 + m_Y: 383 + m_Width: 5 + m_Height: 2 + - m_X: 107 + m_Y: 503 + m_Width: 44 + m_Height: 8 + - m_X: 118 + m_Y: 448 + m_Width: 33 + m_Height: 6 + - m_X: 49 + m_Y: 153 + m_Width: 19 + m_Height: 3 + - m_X: 68 + m_Y: 217 + m_Width: 41 + m_Height: 11 + - m_X: 109 + m_Y: 281 + m_Width: 12 + m_Height: 14 + - m_X: 94 + m_Y: 149 + m_Width: 29 + m_Height: 4 + - m_X: 115 + m_Y: 128 + m_Width: 8 + m_Height: 25 + - m_X: 123 + m_Y: 192 + m_Width: 40 + m_Height: 25 + - m_X: 163 + m_Y: 256 + m_Width: 12 + m_Height: 25 + - m_X: 171 + m_Y: 362 + m_Width: 17 + m_Height: 21 + - m_X: 175 + m_Y: 320 + m_Width: 13 + m_Height: 25 + - m_X: 199 + m_Y: 319 + m_Width: 35 + m_Height: 1 + - m_X: 199 + m_Y: 126 + m_Width: 5 + m_Height: 2 + - m_X: 204 + m_Y: 188 + m_Width: 2 + m_Height: 4 + - m_X: 206 + m_Y: 250 + m_Width: 37 + m_Height: 6 + - m_X: 224 + m_Y: 124 + m_Width: 58 + m_Height: 2 + - m_X: 450 + m_Y: 48 + m_Width: 1 + m_Height: 14 + - m_X: 437 + m_Y: 96 + m_Width: 13 + m_Height: 28 + - m_X: 503 + m_Y: 0 + m_Width: 8 + m_Height: 124 + - m_X: 500 + m_Y: 62 + m_Width: 11 + m_Height: 62 + - m_X: 385 + m_Y: 124 + m_Width: 4 + m_Height: 34 + - m_X: 282 + m_Y: 186 + m_Width: 47 + m_Height: 2 + - m_X: 433 + m_Y: 158 + m_Width: 4 + m_Height: 28 + - m_X: 510 + m_Y: 0 + m_Width: 1 + m_Height: 186 + - m_X: 377 + m_Y: 186 + m_Width: 8 + m_Height: 33 + - m_X: 424 + m_Y: 219 + m_Width: 9 + m_Height: 14 + - m_X: 505 + m_Y: 216 + m_Width: 6 + m_Height: 48 + - m_X: 471 + m_Y: 233 + m_Width: 10 + m_Height: 31 + - m_X: 376 + m_Y: 233 + m_Width: 1 + m_Height: 48 + - m_X: 423 + m_Y: 281 + m_Width: 1 + m_Height: 14 + - m_X: 469 + m_Y: 295 + m_Width: 2 + m_Height: 18 + - m_X: 323 + m_Y: 250 + m_Width: 6 + m_Height: 45 + - m_X: 321 + m_Y: 280 + m_Width: 8 + m_Height: 15 + - m_X: 243 + m_Y: 312 + m_Width: 31 + m_Height: 7 + - m_X: 302 + m_Y: 310 + m_Width: 19 + m_Height: 2 + - m_X: 367 + m_Y: 295 + m_Width: 9 + m_Height: 33 + - m_X: 319 + m_Y: 310 + m_Width: 2 + m_Height: 46 + - m_X: 234 + m_Y: 382 + m_Width: 40 + m_Height: 1 + - m_X: 412 + m_Y: 328 + m_Width: 11 + m_Height: 29 + - m_X: 363 + m_Y: 356 + m_Width: 4 + m_Height: 19 + - m_X: 318 + m_Y: 372 + m_Width: 1 + m_Height: 45 + - m_X: 294 + m_Y: 420 + m_Width: 24 + m_Height: 91 + - m_X: 209 + m_Y: 446 + m_Width: 43 + m_Height: 2 + - m_X: 252 + m_Y: 382 + m_Width: 22 + m_Height: 38 + - m_X: 252 + m_Y: 455 + m_Width: 66 + m_Height: 10 + - m_X: 285 + m_Y: 420 + m_Width: 33 + m_Height: 45 + - m_X: 456 + m_Y: 357 + m_Width: 13 + m_Height: 3 + - m_X: 406 + m_Y: 375 + m_Width: 6 + m_Height: 11 + - m_X: 361 + m_Y: 417 + m_Width: 2 + m_Height: 31 + - m_X: 252 + m_Y: 510 + m_Width: 259 + m_Height: 1 + - m_X: 252 + m_Y: 500 + m_Width: 109 + m_Height: 11 + - m_X: 294 + m_Y: 465 + m_Width: 67 + m_Height: 46 + - m_X: 361 + m_Y: 424 + m_Width: 45 + m_Height: 24 + - m_X: 399 + m_Y: 508 + m_Width: 112 + m_Height: 3 + - m_X: 445 + m_Y: 386 + m_Width: 11 + m_Height: 62 + - m_X: 432 + m_Y: 497 + m_Width: 79 + m_Height: 14 + - m_X: 497 + m_Y: 360 + m_Width: 14 + m_Height: 49 + - m_X: 506 + m_Y: 360 + m_Width: 5 + m_Height: 151 + - m_X: 445 + m_Y: 409 + m_Width: 26 + m_Height: 39 + - m_X: 471 + m_Y: 457 + m_Width: 40 + m_Height: 54 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: e0fc9e42b93cafb49903ae27c9cb0d9c + pointSizeSamplingMode: 0 + pointSize: 71 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!28 &6471949460707905293 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Italic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_MipsStripped: 0 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IsPreProcessed: 0 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + m_PlatformBlob: + image data: 262144 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b111315140e0c0600000000000000000000000000000000000000000000000000000000000000000a0b0b0b0800000000000000000000000000000000000000000000030a0c12151716130f0d070000000000000000000000000000000000000000000000000000000000050b0d1214161514110d0b0500000000000000000000000000000000000000000000000c161c1e202020202012100a000000000000000000010a10121e202020202012100a0100000000000000000000000000080e101515110f0900000000000000000000000000030c121420202020202020202020202020202020201f1f1d1b1815100b090200000000000000000000000000000000000000000000000000030c1214202020202013110b02000000000000000000000000000000000000000000080e101d2020201a1711070000000000000000000000000000000000000000000000080e1020202020202013110b02000000000000000000000000000000000000000000000000000000000a141a1d202020202012100a0000000000000000050f15172020202020191710070000000000000000090e1020202020201f0b07000000000000000000000000030c121420201f190d0b0500000000030c12141f202017150f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25282a2a2321190e00000000000000000000000000000000000000000000000000000000080e10202020201e110f090000000000000000000000000000000000040b171e21272a2c2b2924211a0f0801000000000000000000000000000000000000000000000002090d192022272a2b2a29262220190e0c0700000000000000000000000000000000000000101e293033353535353527241d120400000000000005131e252833353535353527251d12050000000000000000000003111c23252a2a26231c110500000000000000000000071420272a3535353535353535353535353535353535353433302d2a25201d150b0902000000000000000000000000000000000000000000071420272a353535353528261f140600000000000000000000000000000000000003111c2326323535352f2c24190b000000000000000000000000000000000000000003101b222535353535353528261e130600000000000000000000000000000000000000000000000000000e1c272f32353535353527241d120400000000000917222a2c35353535352e2b24180a000000000003111c2326353535353535201c1308000000000000000000071520272a3535342e2220180d0000071520272a3435352d2a221709000000000000000000000000000000000000000000000000000000000000000000000000000000000000011323313a3d3f3f38352c1e0e0000000000000000000000000000000000000000000000000003111c2325353535353327241d120400000000000000000000000000000c171f2933363c4042403e39362d201d15090000000000000000000000000000000000000000000a161e212b34383c3f40403e3c38352b23211a0f07000000000000000000000000000000000c1e2e3b45484a4a4a4a4a3c39302212000000000000132330393d484a4a4a4a4a3c393023120100000000000000000b161e2e373a3f403b382f1f180d0000000000000000031425323b3f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494846433f3a363127201d150a04000000000000000000000000000000000000031425323b3f4a4a4a4a4a3e3a31241402000000000000000000000000000000000011212f383b474a4a4a4440362919070000000000000000000000000000000000000010212e373a4a4a4a4a4a4a3d3a312413020000000000000000000000000000000000000000000000000a1c2c3a43474a4a4a4a4a3c3930221200000000051727343e424a4a4a4a4a4340362818070000000011212f383b4a4a4a4a4a4a473025180800000000000000031525323c3f4a4a494437342b1d0d001525323c3f494a4a423e3527170000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1e31414e5255544d493c2c1e0e00000000000000000000000000000000000000000000000011212f383b4a4a4a4a483c39302212040000000000000000000000010f1c293339464b51555756534e4a3e353127191002000000000000000000000000000000000004121a2832363c484d5154555554514d483c39362d211a0f02000000000000000000000000000016293b4c595e6060606060514d40301d0a000000000e1e30414d525e6060606060524d41301d0a000000000000000b1b28323f4b4f5555504c40342a1d0d000000000000000c2032434f5460606060606060606060606060606060605f5e5d5b58544f4b45383632281f170b01000000000000000000000000000000000c2032434f546060606060534e42311f0b000000000000000000000000000000000d1d2f3f4c505d606060595447362411000000000000000000000000000000000000081b2e3f4b4f606060606060534e42311e0b00000000000000000000000000000000000000000000000014273a4a575c6060606060514d40301d0a0000000f22344552576060606060595346362410000000091c2f3f4c5060606060605f5b43362513000000000000000c2032434f5460605f594d483b2b18082032434f545f6060575245351808000000000000000000000000000000000000000000000000000000000000000000000000000000000011253a4e60686a69635b493c2b190500000000000000000000000000000000000000000000081c2f3f4b505f6060605d514d4030221201000000000000000000000f1f2c3a474c5761676a6c6b68645c544b44372e2012040000000000000000000000000000000715222f38454b535a6267696b6a6966625a564e4a3d362d1d1509000000000000000000000000001c3045596a737575757575675f4d39241000000005192b3c4d5f67737575757575675f4d39251000000000000003162839464b5d656a6a665e4c473b2a180500000000000012273b4f61697575757575757575757575757575757575747472706d6a656056514b453833291d140900000000000000000000000000000012273b4f6169757575757568604e3a261100000000000000000000000000000005192b3c4c5d65727575756f6554402c170200000000000000000000000000000000000e22374b5d6575757575757568604e3a26110000000000000000000000000000000000000000000000001a2f435768727575757575675f4d392410000000152a3e52636c75757575756e6453402b170200000e23384c5d657575757575746d5443301c0700000000000012273c4f61697575746e625948362513273c4f61697475756c6352362614010000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687e7f7f79635a4835200b000000000000000000000000000000000000000000000e23384b5d657575757573665e4d402f1f0f0000000000000000000d1d2c3d4958616c767c7f81807e79726960554b3e2f2212030000000000000000000000000008162533404c56606971777c7f807f7e7b78726c635b4e4a3d3127190d0000000000000000000000001e33485e73888a8a8a8a8a7c67513c27120000000b2035485a677d888a8a8a8a8a7c67523c2712000000000000091e324657616e7a7f7f7b6f625947341f11000000000000142a3f54697f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898885827f7a756e6760564c463a3126190f0100000000000000000000000000142a3f54697f8a8a8a8a8a7e68533e28130000000000000000000000000000000b2034485a657b878a8a8a836f59442f1a00000000000000000000000000000000000010253a4f657a8a8a8a8a8a8a7e68533d28130000000000000000000000000000000000000000000000001d32475c72868a8a8a8a8a7c67513c2712000002172c42576c818a8a8a8a8a826e59432e1900000010263b50657b8a8a8a8a8a8b73604a35200b000000000000142a3f54697f8a8a898377625443301c2a3f54697f898a8a816c5443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8294948a78624d38220d0000000000000000000000000000000000000000000010253b50657b8c8a8a8a887c665e4c3d2c1b0b0000000000000005182a3b495b6376818a91959795938e877e73645c4c402f21110000000000000000000000000516263343505e66757e868d9194959593918d8781796f635b4b44372b1d0d00000000000000000000001b31465b70869b9f9f9f947e69543f291400000b1b30404d62788a9da69fa99a846f5f4d392510000000000005192b3b4b6175828f9495908477624c3f2e1c08000000000012273c51677c919f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9b98948f8a837c756a61584b44372d1f130500000000000000000000000012273c51677c919f9f9f95806b56402b160100000000000000000000000000071b2e3e4d62788a9c9fab9c86715c3a2a170400000000000000000000000000000000000d22384d62778daa9f9f9f95806b55402b160000000000000000000000000000000000000000000000001a2f455a6f849a9f9f9f947e69543f2914000000152a3f546a7f949f9f9f9b86705b3828150200000e23384e63788d9f9f9fa98c77624c37220d0000000000000e23384d63788da39e998672604a352034495e74899ea89d8874604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a8937e69533e2914000000000000000000000000000000000000000000000e23384b5d697f94a0a69d8d7c665b493a2918080000000000000b1f344759637987969fa9aaa9a9a8a59c93867a665e4c3f2f1d0d00000000000000000000001323334450616a7c87939ca4a6a9aaaaa9a6a59d968e84796b6055483b2b1d0d00000000000000000000192e43596e8398aeb5ab96816c56412c1701031729394d5e6f8399a8b8b49f8b78634d41301d0a00000000000b203448596c8197a0aaaaa19984705d4b37230e00000000000f243a4f64798fa4b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b3b2b0ada9a99f9991887f766960554a3d3023160800000000000000000000000f243a4f64798fa4b5ad98836d58432e1800000000000000000000000000000a22364a5c6d8298a8b5b49e89745847331f0a00000000000000000000000000000000000b20354b60758a9fb4b5ad98826d58432d18000000000000000000000000000000000000000000000000182d42576d8297acb5ab96816c56412c1701000012273d52677c92a7b5b39d88735645321d0900000b21364b60768ba6b8b5a48f79644f3a240f0000000000000c2035495a71869bb1a4907b6550372632475c72879cb1a68f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a597826d5737271508010000000000000000000000000000000000000000081c2f3f4f616d8297a3ab9e89796358463626140100000000071b2d3e4c6277889da5b4a1999494969da5a49c8a7c665d4c3b2a18050000000000000000000d1d304150626b7f8d9da5b1b5b7b2afadaeb2b6b2aba19a8c80746259483b2b1c0c000000000000000000162b41566b8096abc0ae99846e59442f1900091e334657667c91a1b3b6a595806a5b493523120100000000000d22374d62778c9fb5bebfb3a28f7a65503a251000000000000c22374c61778ca8bacdc4b7b2a7a7a7a7a7a7a7a7a7a7a7a8a9abafb3b9b4aea79e95897e73635b4d4133261608000000000000000000000c22374c61778ca8bab09a85705b372715020000000000000000000000000a1a30414f647a8d9fb5c6b9a88c76614c37210c0000000000000000000000000000000000081c30435472879db2c5b09a85705b372715020000000000000000000000000000000000000000000000152a3f556a7f94aabfae99836e59442e1900000010253a4f657a8fa4c8b59f8a75604b36200b0000091e32455673889eb3bca6917c67513c271200000000000006192c3c556a7f95aaac97826c5544312c41566b8196abab96816c563e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000003090c21374c61768ca59b8671554431201d140c0a04000000000000000000000000000000000000112132434b6074859ba6a79c8676615443301c13020000000d22364a5c6f8399a6a89f90847f7e8187939fa99f8c7b655947341f0f000000000000000005182b3b4d5f6b80959fabb7b5b1a69d9998999ca5abb4b3aa9f9685776259483a2a1909000000000000000014293e53697e93a8beb19b86715c39291709192d3e4b6175889db2bfb29d8775604b3c2c190500000000000011263c51667b91abbccfd0c0a9947f69543f2a1400000000000b1f34475974899fb4c9b7a69d92929292929292929292929394969a9ea8acb4b8b3a79e948579675f5044342616070000000000000000000b1f34475974899fb4b29d88735544311d080000000000000000000000021528384d5f70859aabbccfc6a48e79644f39240f0000000000000000000000000000000000011426365a6f859aafc4b29d88735544311d08000000000000000000000000000000000000000000000012283d52677d92a7bcb09b86715b3928160300000d22374d62778caabbbcab8d78634d38230e0000021628385b71869bb0bea9947e69543f2914000000000000000e23394e63798ea4b39e8874604b35253a4f647a8fa6b29d87725c4a36220d0000000000000000000000000000000000000000000000000000000000000000000000040a161e212533475872879d9f8a75604b39353126211f170b040000000000000000000000000000000003141d3245566277889da9a4998372604b413020100000000f243a4f647a8fa1b49f8a7c6f6a696c737e8b9faa9d8877624c3d2c1a06000000000000000b20344859677d929eb5bcb2a49c9088848283878d959ea8b3b4a39b8777625847372614010000000000000011263b51667b90a6bbb39e89745746331e1426374a5c6c8196a6b7b3a1907c665645321e0e0000000000000011263b50667b90a8bacdcfbea9937e69543e2914000000000004182a3b5c72879cb1c7b29d887d7d7d7d7d7d7d7d7d7d7d7d7e8184898f979ea8b4b9b3a39b8a7d6b62514434251505000000000000000004182a3b5c72879cb1b49f8a75604b36200b0000000000000000000000091d324556677c91a2b4c9dabba6917c66513c2711000000000000000000000000000000000000182d42586d8297adc2b49f8a75604b36200b000000000000000000000000000000000000000000000010253a50657a8fa5c8b39e89735746321e0900000b20354b60758a9fb4c9a5907a65503b2510000000192e43596e8398aec1ab96816c56412c17010000000000000c2135495b71869cb1a68f7a65503a25354a6073889db2a58e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000b171f28323636434a596e8399a98e7964514e4b44373633291f170c02000000000000000000000000000000021528384859647a8b9fb4a195806b5f4d3e2d1d0c0005182b3b586d8297ada7937e695e54545460697d8d9fa698836e5b4936210b00000000000006192c3c4d6277899eb3bcb2a098867b746f6d6e7278808999a1b0b4a59c8676615544311d0f000000000000000e24394e63798ea3c5b9a78b76614c36211d314455647a8c9fb4baa899836e5e4c38281600000000000000000c21364c61768a9fb4bbbcb4a08e79634e39240e0000000000001a2f445a6f8499afc4b39e89746767676767676767676768696c6f757a8289969fa9b5b5a99f92806c6251433323120000000000000000001a2f445a6f8499afbcab8d78624d38230d0000000000000000000004182a3a4b6074879db2c0d1d3bea9947e69543f2914000000000000000000000000000000000000152a40556a7f95aabfbcab8d78624d38230d00000000000000000000000000000000000000000000000d23384d62788daabbb8a78b76614b36210c0000081c30435472889db2bda7927d68523d2813000001162c41566b8196abc0ae99836e59442e1900000000000000061a2c3d556b8095aaab96816c563e2d3043546c8196acaa95806b553d2c1a060000000000000000000000000000000000000000000000000000000000000003131b293339454b525460636a7f95a7927d6967636055534c463a332a1e160a0000000000000000000000000000000a1a2b3b4b5c687e929fb09e927d675c4a3b2a19090b2034485972889db29e8875604b4036434b5f6d8297aa9f8c79634e3928160300000000000c2035495a6d8298a7b9b4a298827465605458595a636b7783969eb0b6a49a8473604b3d2c1a060000000000000c21364b61768ba7b8c5a38e79634e39242b3b4b6073859baabbb49f8a78624d402f1a0a00000000000000000a1f334658697f949faaab9f97826d5b4a36210c000000000002172d42576c8297acc1b9a78b76615252525252525252525354565560656c76808b9ba3b2bab49e95806c615041301e0e0000000000000002172d42576c8297acc9a5907a65503b2510000000000000000000000a1f3447596a7f94a5b6cacacfc1ab96816c56412c1701000000000000000000000000000000000012283d52677d92a7bcc9a5907a65503b251000000000000000000000000000000000000000000000000b20354b60758a9fb4c5a38e78634e39230e0000011426365b70859ab0bfaa957f6a55402a1500000014293e54697e93a9beb09b86715b38281603000000000000000f24394e64798ea5b29d87725c4a36253650657a8fa6b19c87725b4936210c0000000000000000000000000000000000000000000000000000000000000b161e303a464c5760676e74787c8197ad9a847e7c78756f6861584c473a32281a0d0000000000000000000000000000000d1d2e3e4e606c8196a2b49f8a7a6459473727150d22374d62778ca5ad98836e5645312630404d62778b9fab98826d5746321e0900000000011426374d63788c9fb4baa99b847460564b43363c494d59627280969fb1b3a1957f6a5b493521110000000000000a1e32465773899eb3bba6907b66513b26344859697e93a3b5b6a4947f6a5a483522120000000000000000000417293a4b6072808b91918b8174604b3d2d1a07000000000000152a3f546a7f94a9bfc5a38e79644e3d3d3d3d3d3d3d3d3e3f37444b4f58616b798598a0b1bcb09e957f6a5f4d3c2b180800000000000000152a3f546a7f94a9bda7927d68523d2813000000000000000000071a2d3d4c6177899eb3c3bcb5bcc9ae99846e59442f1900000000000000000000000000000000000010253a50657a8fa5c8bda8927d68533d28130000000000000000000000000000000000000000000000081d31445573889db2bba5907b66503b2611000000182d43586d8298adc2ac97826d57422d1802000011273c51667c91a6bbb39e88735645321e09000000000000000d21364a5c72879cb2a58f79644f3a24354b6074889db3a48e79634e39230e00000000000000000000000000000000000000000000000000000000000c1b2832414d58616a757c83888d91979fb1a29a93918e89847d766c61584b45382b1d10020000000000000000000000000000102031424b6073849aa5a99d8777615544311d14243a4f64798fa4aa957f6a55382715203448596f849aaf9f8a76614b36210c00000000081d3144556b8196abbcb49f8a786256453830262c353b4754606d8197a3b5b49f8b79634e3f2f1c080000000000031629395c71869bb1bea8937e69533e2f404d62778a9eb4beb19c8674604b3c2b1904000000000000000000000c1c304354606b777c7c776c605645321f0f0000000000000012273d52677c92a7bcbba6917b66513c2828282828282828292731353a474c5b637482979fb1bdb59f8d7d675a493625130000000000000012273d52677c92a7bcaa957f6a55402a150000000000000000000921364a5b6c8197a8b9b6ab9fabbcb19b86715c3a29170400000000000000000000000000000000000d22384d62778daabbbfaa95806a55402b150000000000000000000000000000000000000000000000011527375b70859ab0bda8937d68533e2813000000162b40556b8095aac0af9a846f5a452f1a0000000f24394f64798ea4c6b8a78b76604b36210b00000000000000071a2d3e566b8096abab95806b563d2d3043546c8197acaa947f6a553c2b19060a0a0a0706000000000000000000000000000000000000000000000c1d2a39464b5f6776808891989ea7a6adb1beb4b0a9a6a89e99938a81766a6056483b2d2010020000000000000000000000000002131d3144556176879da8a59a8473604b423121263b50667b90a5a9937e69543e2914182b3b54697e93a9a9917b66513c2611000000000b20354b6074889eb3c3ac97816c5a4838281c1419202a36434b6074859baabaa99a84705d4b382310000000000000192e44596e8399aec0ab96806b5641394c5e6e8399a8b9b2a08f7b655544311e0e000000000000000000000001142636434b5961666762594b4538281501000000000000000f253a4f647a8fa4c7bea9937e69543e291412121212121314151d202a333d4956606d8197a0b2bcab9e8a78625443301c0a0000000000000f253a4f647a8fa4c7ad97826d58422d18000000000000000009192f404e63798c9fb4b6a49c8c9fb5b39e89745846331f0a00000000000000000000000000000000000b20354b60758a9fb4c2ad98826d58432d18000000000000000000000000000000000000000000000000182e43586d8398adc0ab95806b56402b1601000013283e53687d93a8bdb29c87725d3b2a180400000c21374c61768ca8b9c5a38d78634e38230e000000000000070d0f243a4f647a8fa5b29c87725b4a36263650657b90a7b19b86715a4835201f1f1f1f1d1a140a000000000000000000000000000000000000000b1b2a3b4757616e7d88959ea7aeb3b8b8b3b1b5c2b7b2b1b4b4aea99f96897f7462594a3e2e20100000000000000000000000000000011527374758647a8a9fb4a297816c604e3f2e263b50667b90a5a9937e69543e291410253a50657a8fa5aa95806b55402b160000000010253a50657a8fa6b8b6a48e79644e3c2b1a0a01060d182531445563798c9fb4b4a2907b65503e2d1b070000000001172c41566c8196abc1ae98836e59434657667c90a1b2b9a798826d5d4b37271500000000000000000000000000081826303b474c51514d483b32281a0a00000000000000000d22374d62778ca9bac0ab96816b56412c160100000000000001080c171f2c38454b60728298a4b6b9a89a8472604a3928160300000000000d22374d62778ca9baaf9a856f5a36261401000000000000011426374c5e6f8499aabbb19c86849aafb9a78b76614c36210c0000000000000000000000000000000000081d31445572879db2c5b09a85705b372715010000000000000000000000000000000000000000000001162b40566b8095abc0ad98836d58432e1800000011263b50667b90a5bbb49f89745947341f0b00000a1f33475874899eb4baa5907b65503b261000000000010f1a212432364a5c72879db2a48e79634e3934354b6074889eb3a38d78624d383434343434322f271c0e00000000000000000000000000000000000417293a4759617582929ea6b3b8b6b2a9a69e9ca4b5a59d9b9fa9abb3b4a79e948577645c4a3e2e1d0d000000000000000000000000000009192a3a4a5c677d919eb09f937e685d4b3c2b394f64798ea4aa947f6a553f2a150c22374c61778ca1ae98836e59432e1904000000162b40556b8095aac5b29c87725c4a361e0e00000000081527374a5b6c8197aabbb09b85705c4a36220a000000000014293e54697e93a9beb09b86705b3d4b6175879db2bfb39e8977624c3f2e1909000000000000000000000000000008141c2a34373c3c37342b1d150a0000000000000000000b20354a60758a9fb4c3ae99836e59442e1900000000000000000000040f1a273143546175869cabbcb4a2937e685745321e0900000000000b20354a60758a9fb4b29c87725443301c08000000000000081d314455667b90a1b3b4a2917c8298adc5a38e79634e39240e0000000000000000000000000000000000011426375a70859aafc5b29d88725544311d08000000000000000000000000000000000000000000000013283e53687d93a8bdb09a85705b3727150100000e23394e63788ea3c5baa98c77614c37220c000004172a3a5c71879cb1bda8927d68533d2813000000000f1f2d363947493e566c8196abaa957f6a553c494944556d8297aca9947e69543b494949494947433a2c1c01000000000000000000000000000000000a1f33465861778598a0b3b8b9b3a59c948d88869cb19d8786898f969da6b4b3a39b887a645c4a3b2b180500000000000000000000000000000c1c2d3d4d5f6b8095a1b49f8c7b655a4839384d62788daaab96806b56412b160b20364b60758ba9b09b85705b46301b06000004182a3a5a6f859aafc1ac97816c573d2d1a00000000000009192d3d4d62778b9fb4b4a28e79644f382816020000000011273c51667c91a6bbb39d8873564a5b6b8096a5b7b5a3937e69594834211100000000000000000000000000000000010c181f2227272220190d0500000000000000000000071c30435472879cb2c6b09b86715b3929170300000000000000000000000a1526364657647a8c9fb4c0b39d8875604b3727150200000000071c30435472879cb2b49f8a75604b35200b0000000000031729394b6073869cb1bcab9a846f8096abbba6917b66513c2611000000000000000000000000000000000000182d42586d8297adc2b49f8a75604b35200b000000000000000000000000000000000000000000000011263b50667b90a5bbb29d88725544311d0800000c21364b61768ba7b8c7a48f79644f3a240f0000001a2f445a6f8499afbfaa95806a55402b15000000071a2d3d4a4e5c5f5f5f657a8fa6b19b86715a5f5f5f5f5f667b90a7b09a8570595f5f5f5f5f5f5c574a3a1f0f000000000000000000000000000000000c21364c6176869ba3b2beb4a79e93877f7873798ea8998471747a8088949ea8b5a69d8a7a6459483420130000000000000000000000000000000f1f30414b60728399a4aa9e8978625745364b60768a9fae99846f593d2d1a081d314455748a9fb19c86715c47311c0700000a1f33475873899eb3bda7927d68523d2813000000000000000f203448596e8398adc0ac97826d5645321e09000000000f24394e64798ea3c6b8a68b76605463798c9fb4bcab9b8573604b3b2a1803000000000000000000000000000000000002101b22252626262220180d000000000000000000001325365a6f859aafc4b39e89735746331e0a000000000000000000000000081829394a5c6c8197a9bab7a6947f6a5544311d0800000000001325365a6f859aafbaa98c77624d37220d00000000000a1e334657687e93a4b6b49f8c79697e93a9bea9937e69543e2914000000000000000000000000000000000000152b40556a8095aabfbbaa8d78624d38230d00000000000000000000000000000000000000000000000e23394e63788ea3c5b49f8a75604b35200b00000a1e32465773899eb3bca6917c67513c2712000002172d42576c8297acc1ad97826d58422d180000000d21364a5c64727474747472889db3a38d787474747474747474899eb39f8c77747474747474747268573d2c1a060000000000000000000000000000000d23384d6278899eabbcb0a29a897e746a626074899f9d887360646b757f8a9da5b6a89e8877624d41301909000000000000000000000000000001121c3043546175869ca7a79b8575604b43455670859bb09d88735b4a36210d1d31455674899fb19b86715c46311c0700000c22374c61778ca7b8c8a48e79644f39240f0000000000000005182b3b50657b90a6b8b49e8975604b36210b000000000c21374c61768ca8b9c4a38d78636073859baabbb59f8d7a645544311d0d00000000000000000000000000000000000010202e373a3b3b3b37342b1d0d000000000000000000182d42576d8297acc2b8a78b76614b36210c000000000000000000000000000b1b2d3e4c61778a9fb4c4b29d8874604b36200c0000000000182d42576d8297acc7a48f7a644f3a250f0000000006192b3c4c6176889eb3b9a897826d667b91a6bbab96816b56412c1601000000000000000000000000000000000013283d52687d92a7bdc8a5907a65503b251000000000000000000000000000000000000000000000000c21364b61768ba7b8bbaa8d77624d38220d0000031629395c71869bb1bea9947e69543f2914000000152a3f556a7f94aabfaf9a856f5a3625130000000f24394e647a86898989898a8c9fb4b49f8a898989898989898a8d9fb4ab9f8a8989898989898986725b4936210c0000000000000000000000000000000c2035495a667c8d9fae9f9684776960554d5470859ba68c77624f56606a79879da6b7a69a846f5f4d3726140100000000000000000000000000000114263646576379899eaba398826e615040566b8096aba68e79634e3b2a1820364b60758ba9af9a856f5a45301a0500000f24394f64798ea4c5bbaa8c76614c37210c00000000000000000d20354b6074889db3b9a8917c66513c2611000000000a1f33475874899eb3baa5907c71738095a3b4b8a797816c5c4b372614000000000000000000000000000000000000081b2e3e4b4f5050504c483b2b18050000000000000000152a40556a7f95aabfc5a38e79634e39240e0000000000000000000000000000101f3447596c8196acc1b7a6917c67523a2a170400000000152a40556a7f95aabca7927c67523d271200000000082035495a6b8096a6b8b49e8a776264798ea3c5ae99836e59442e1900000000000000000000000000000000000010253a50657a8fa5c8bda7927d68523d28130000000000000000000000000000000000000000000000091e32465773899eb3c8a58f7a65503a2510000000192f44596e8499aec1ab96816c56412c1700000012283d52677d92a7bcb29c87725443301c070000152a3f546a7f949e9e9e9e9e9faabbbaa99f9e9e9e9e9e9e9e9e9fabbcbaa99f9e9e9e9e9e9e9e8e79634e39230e00000000000000000000000000000006192c3c4c5e6a80929891817362594b4437576c8297a5907b6650454b5b6377879daab4a2927d675544311d0800000000000000000000000000000008182939495b667c8d9fb4a0947f6a5e4c4f657a8fa3ab96806b5948362928384e64798ea3ad98836d58432e1803000011263b50667b90a5bbb49f8a75604a35200b0000000000000000081c3043546c8297acc6ad98826d583d2c1a060000000417293a5c71869cb1c6b29d878688959eafbdb39e8876614c3e2e19090000000000000000000000000000000000000d22374b5c6466666662594834200b000000000000000012283d52677d92a7bcbba6907b66513b2611000000000000000000000000000004182a3b4e63798ea3b5c4af9a846f5847331f0a0000000012283d52677d92a7bca9947f6a543f2a1500000008182e3f4d62788b9fb4b7a5947f6a5961768ba7b9b09b86715b3929160300000000000000000000000000000000000d23384d62788daabbbfaa95806a55402b150000000000000000000000000000000000000000000000031628395c71869bb1bca7927d67523d2812000002172c41576c8196acc1ae99836e5936261401000010253a4f657a8fa4c8b49f8a75604a35200b000012273c52677c91ababababababafb4c0bab4b1ababababababababb0b4c1bab4b0abababababa8927d68533d2813000000000000000000000000000000000e1e2f4050616a7d837c6c6055483b313e53687d93a8947f6a553f3d4a59647a8c9fb4b29d8774604b35200b000000000000000000000000000000000b1b2c3d4c5e6a7f94a0b59f8d7c665b4b5d71859bb09e8a776254463a374556697e94a9a9937e69543e291400000012283d52677d92a7bcb39e89735443301c0700000000000000000114263651677c91abbcb39e88735b4935210c000000001a2f44596f8499aec4b7a59d9c9ea6afbcb19f927d685847332010000000000000000000000000000000000000000f253a4f647a7b7b7b77624c37220d000000000000000010253a50657a8fa5c8bea8937e69533e29140000000000000000000000000000000c2136495b71869bb0c6b49f8b76614c37210c0000000010253a50657a8fa5c8ac97816c57422c170200001325364b5d6e8398a9bab29d8775604b5874899eb3b39e88735746321e0a00000000000000000000000000000000000b20354b60758a9fb4c2ad98826d583a2917040000000000000000000000000000000000000000000000192e44596e8399aebfaa957f6a553d2d1a070000142a3f54697f94a9beb09b86715443301c0800000d22384d62778daabbbaa98c77624c37220d00000d22374c62778d9696969696969aa2b4b5a49c96969696969696969ba3b4b5a39b969696969696937e68533e28130000000000000000000000000000000000122233435060686e675f4b44372b243a4f647a8faa98836e59392d3b4a5c6d8297adb6a5917c675138271502000000000000000000000000000000000e1f2f404f616e8298a3ab9e8a79635852677c91a1a899837261585251556074879cb2a38e79634e39240e00000013283d53687d92a8bdb29d88735d482513000000000000000000000c21374c61778b9fb5b8a68d78634e38230e00000002172c41576c8196acc1c3b7b2aaabb2b7c3ac97816c604e3a2a1c0c000000000000000000000000000000000000061b30455b7085909090806a5536261401000000000000000d22384d62778daabbc0ab96816b56412c16010000000000000000000000000000061a2c3d546a7f94a9c6bbaa927d68523d2813000000000d22384d62778daabbaf99846f5a442f1a0000071c304354657a8fa0b2b4a3927d6756455c71869bb1b8a78b76614b36210c0000000000000000000000000000000000081d31445572889db2c5af9a85705847331f120000000000000000000000000000000000000000000001172c41566c8196abc1b09b86715b4a36210c000012273c52677c91a7bcb39e8974604b35200d00000b20354b60758a9fb4c7a48f79644f3a240f00000b1f3447596a7f818181818181849aafb19c868181818181818181859bb0b09b858181818181817e74604b36200b000000000000000000000000000000000004152533424e5359514d4131261921364b60768a9f9c87725746322d3e4d63788da4b6ae99836e5645311d090000000000000000000000000000000000122232434b6075859ba6a89c867661556072849aa7a19882766c676669738197a5b09b85705b4a36210c00000013293e53687e93a8bdb29d88725d48331d000000000000000000000a1f33475872879cb2c4a8927d68533d281300000000142a3f54697f94a9bebaa99f95969da5b4af9a84766158473a2a1c0c0000000000000000000000000000000000051a30455a6f859aa59a846f5443301c08000000000000000b20354b60758a9fb4c3ae98836e59432e19000000000000000000000000000000000f24394f64798ea8b9c8ad98826d583a2a17040000000b20354b60758a9fb4b19c87715c3a2a1804031628384a6072859bb0beb09b8572604a38596e8499aec5a38e78634e39230e00000000000000000000000000000000000b20354b6075889db2c8b39e8976614c41301d0d0000000000000000000000000000000000000000000014293f54697e94a9beb5a38e79634e3a291704000f253a4f647a8fa4c7b8a7907b66503b2b180500081d31445572889db2bca6917c67513c2712000005182a3b50616a6c6c6c6c6c6c7a8fa5b19c86716c6c6c6c6c6c6c7b90a7b09b85706c6c6c6c6c69605645321d09000000000000000000000000000000000000071524313a3d433c39301d14091e32455671879c9f8b76614b362135495b72879cb1b49f8a75604b36200b000000000000000000000000000000000309151e3245566278889eaaa499837360546277899ea7a09888817c7b7e8697a0b1a0917c66513d2d1a0700000013293e53687e93a8bdb29d88735d48331e0800000000000000000004172a3a586e8398adc1ac97826c57422d170000000012273c51677c91a6bcb49f8b8081879ba3b3a19a86766158473a291b0b00000000000000000000000000000000051a2f445a6f8499af9e8974604b35200b00000000000000081d31445572889db2c6b09b86715b392816030000000000000000000000000000000b20354a6074899eb4c7b29c87725847331f0a000000081d31445572889db2b49f89745847331f0a091e324556677d92a3b5b2a08f7a64544341566c8196abbba6907b66513b261100000000000000000000000000000000071b2d3e51677c91a6b7cbb8a798826d5f4d3b2a180500000000000000000000000000000000000000000011273c51667c91a6bbc1ab96816c5846331f0c000d22374d62778ca9bac5ad98836e594834200d00011426375b70859ab0bea9947e69543f29140000000d1d3343505556565656566073879db2a48d786356565656566074889eb39f8c776256565656544b45382815020000000000000000000000000000000000000006131e26282e27241d120103162838586d8398ab8f7a654f3a252c3c576d8297acbaa98f7a644f3a250f00000000000000000000000003090b14161e21202838485a657b8c9fb4a196806b5f59647a899ca4a69e969290939ca4b4a198826d5e4c381f0f0000000013283d52687d92a7bdb39e88735e49331e0000000000000000000000152a3f556a7f94aabfaf9a85705a392917030000000f243a4f64798fa4c6b59f8b756c76859ba3b3a49b85766158463a291b0b00000000000000000000000000000004192f44596e8499aea88e79634e39240e00000000000000011426375a70859aafc5b39e88735746321e09000000000000000000000000000000071c30435470859ab0c5b6a48c76614c37210c000000011426375a70859aafbaa88c77614c37220c182a3b4b6075879db2baa998826e5c4b363f54697e94a9bda8937e68533e2913000000000000000000000000000000000d22364a5c70859ab0c4c7c5b2a0917c675947341f130000000000000000000000000000000000000000000f24394f64798ea4c6c9b49e8976614c3a2a17040b20354a60758a9fb4c9b49f8a77624d3b2b180500182e43586d8398adc1ab96816c56412c17010000001525333c404141414143546c8196aba9947f69543c414144556d8297acab937e68533a41413f3632281a0a000000000000000000000000000000000000000000020b11131912100a000000142a3f54697f94a8937e69533e292b40556b8095aac7a8927d68533d281300000000000000000000000a161e212928323636312b3c4b5d687e939fb09e927d675c5c647986949ea7aba7a6a9ada89e948374604b402f1d010000000012273d52677c92a7bcb39e89735e392816030000000000000000000012273c52677c91a7bcb39d88735746331e0a0000000c22374c61778ca8babcab8d78636175859ba3b5a39b857661584639291b0b000000000000000000000000000003182e43586d8398ada7927d68523d28130000000000000000182d43586d8298adc2b8a78b76614b36210c00000000000000000000000000000000132536576c8197acc1c3a48f7a644f3a250f00000000182d43586d8298adc6a48e79644f39240f1f3448596a7f94a5b7b49f8a78624d3e2e3c51667c91a6bbab96806b56412b1601000000000000000000000000000005182b3b4f647a8ea2b4bfb3aeb3b39e8977624c41311e0e00000000000000000000000000000000000000000c22374c61778ca8baccb9a8947f6a5847331f11071c30435472889db2c7baa996816c594834201201162b41566b8096abc0ad98836d58432e1803000000071520282a2c2c2c253650657a8fa6b09b85705a4834263751667b90a8af9a846f5847332c29201d150a00000000000000000000000000000000000000000000000000000400000000000010263b50657b90a597826d5737272a3f546a7f94a9bfaa957f6a55402a1500000000000000000003111a2832363e38454b4b44373e3f4e606c8197a2b49f8b7a64595b63747f889096999b9a9892897f74605645322212000000000011273c51667c91a6bbb49f8a745746321e09000000000000000000000f253a4f647a8fa4b9b8a68b76614c36210c0000000b1f34475974899fb4c9a5907b65576176859ba4b5a39b857661574639291b0b0000000000000000000000000002172d42576c8297acac97816c573626140100000000000000152b40556a8095aabfc5a38e78634e39230e00000000000000000000000000000000152a3f546a7f94a9bfbca7927c67523d271200000000152b40556a8095aabba6917c66513c271a2d3d4c62778a9eb4b8a695806b5a483524394f64798ea4c6ae98836e59432e190000000000000000000000000000000b203448596d8298adc0b3a199a1b3a799836e604e3c2b1808000000000000000000000000000000000000000a1f34475974899fb4c9c6b39e8976614c3f2e1d0d1325365b70869bb0c9bcb49f8a77624d41301f0f142a3f54697f94a9beaf9a846f5a452f1a0500000000030d131517171720354b6074889eb3a38d78624d3822364b6075899eb39f8b77614c3721140b0902000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca69b86715544313041566c8196abc0ab96806b56412b1601000000000000000412212f38454b535a566060555a534c474b6074849aa6a99d88776256556069747b81838585827d766a60554538281604000000000010253b50657a90a5babbaa8b76614b36210c000000000000000000000d22374c62778ca1c6c4a38d78634e38230e00000004182a3b5c72879cb1bda8927d6853586176869ca4b5a39b857561574639281b0a00000000000000000000000001162c41566b8196abb09b86705443301c080000000000000013283d53687d92a8bdbba6907b66513b26110000000000000000000000000000000012283d52677d92a7bcbfa9947f6a543f2a150000000013283d53687d92a8bda9947e69543f2921364a5c6d8297a8b9b39d8876614b3c2b21374c61778ca8b9b09b86705b3828160300000000000000000000000000021628384c62778b9fb4b8a6998499a8b3a1927d685a483625130000000000000000000000000000000000000004182a3a5c72879cb1c7c5b8a797816c5d4b3b2a1c1a30455a6f859aafbcab9fa999836e5f4d3d2d1f14293e53697e93a8beb09b86715b46311c0600000000000000000101081c3043546c8297aca9937e69543b2a3145566d8398adaa927d6853392917030401000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889d9f8a75604b353e4d5f72879cb1c0ab95806b56402b1601000000000000001222303f4b5660696f747675736f6861594b566277879da9a69b8574604b4b5560656b6e706f6d6861584b4437281a0a0000000000000e23394e63788ea3c7c8a28d77624d38220d000000000000000000000b20364b60758ba8babaa48f7a654f3a2510000000001a2f445a6f8499afc0aa95806b5547586177869ca4b4a39b847561574639281a0a000000000000000000000000152a3f556a7f94aab49f8975604b35200b0000000000000010253b50657a90a5c9bda8937e68533e29130000000000000000000000000000000011263b50667b90a5bbc0ab96806b56412b160000000010253b50657a90a5c9ab96816c56412c2f404e64798c9fb4b5a4927d685746331e1f33475874899eb4b39e88735645321e0900000000000000000000000000091e3245566b8095aabbb39e88778a9eb4b39e8978625443301c0f000000000000000000000000000000000000001a2f455a6f849aafc4b8a79e9f8c7b6559473a2d2125365a6f8499afb49f8c9aa1917d675c4a3d2f22293e53697e93a8beb09b86715b46311c0600000000000000060f161814263650657b90a7af9a8570594734273851667c91a8ae99846f5746331e1919160d0b050000000000000000000000000000000000000000000000000000000000000004182a3a596f8499a98e79634e414d5c677d91a4b6c4a9937e69543e2914000000000000000e1e30404d5d65757e85898b8a88847e776a605659647a8b9fb4a397816d604f444b5056595b5a58524c473a3127190a000000000000000c22374c61778ca9bab9a48e79644f39240f00000000000000000000091d31455674899fb4bca6917c67513c271200000002172d42576c8297acc1ad98826d583a47596277869ca5b4a29a847561574538281a0a000000000000000000000013293e53687e93a8baa98d78634e38230e000000000000000e23384d63788dabbcc0ab96806b56412b160100000000000000000000000000000010253a50657a8fa5bac1ac96816c57412c17000000000e23384d63788dabbcae99846e594427374c5e6f849aabbcb19c8673604b392917172a3a5c71869cb1b8a68b76604b36210b000000000000000000000000000b21364b6075889eb3c5ad98826d7f95a5b7a89a8472604a3d2c1909000000000000000000000000000000000002172d42576c8297acc1b39e899e9d887762594a3d3530435470869bb0b19b85859a9e8a7a645b4c40372e3b556a8095aabfb09a85705b45301b060000000000000917232a2d2f2f354b6074899eb39f8b77614c372f364b60758a9fb49f8a76614c362f2f2e2b2220190d00000000000000000000000000000000000000000000000000000000000000162b40556b8095a7927d6752515f677a899eb3c2b8a68f7a65503a251000000000000006192c3c4d5e667b87939a9ea89f9e9a938a7f7462595c677d929eb09f937e695d4b3c3b41444645433d37332a1d150900000000000000000b20354a6074899fb4bba6917c66513c271100000000000000000000021527385d73889db2bda8927d68533d281300000000152a3f546a7f94a9bfaf9a85705a373a47596277879ca5b4a29a847560564538281a0a0000000000000000000012273c51677c91a6c7a6917c67513c2712000000000000000b20364b60758a9fb4c3ad98836e58432e19000000000000000000000000000000000f243a4f64798fa4b9c2ad97826d58422d18000000000b20364b60758a9fb4b19b86715c39314455667c91a2b4b3a1907b655443301b0b1a2f44596f8499aec4a38d78634e38230e000000000000000000000000091c2f3f53687d93a7b8b8a7917c6775879db2b4a2937e695b49372614010000000000000000000000000000000000152a3f556a7f94aabea9947e8b9f9c8677645c4d493e4a6074889eb3b09a85798c9f9d8779655e4f4b3e49596e8399aec3af99846f5a442f1a050000000000061727353f4244444444556d8298adab937d68533a444445576e8399aea9927c6752394444434038342b1d0d00000000000000000000000000000000000000000000000000000000010812273c51677c91a696816b6066707d8a9ea7b8c0b39e8874604b35200b0000000000000c2035495a667d8b9da5afa8a2a0a2a8a89e948678635b5f6b8096a1b49f8c7b655a4939282e30302d28211f170c02000000000000000000071c30435471869cb1bea9937e69543e291400000000000000000000001d32475d72879cb2bda8937e68533e29130000000012273d52677c92a7bcb29d88725544313b48596278879da5b4a29a847460564538281a0a0000000000000000000f253a4f647a8fa4c8aa947f6a553f2a1500000000000000091d31455673889db2c5b09b86705b3828160300000000000000000000000000000010253a50657a8fa5bac2ad97826d58422d1800000000091d31455673889db2b39e897357463a4b6074869cb1bbaa99836e5d4b36261400172c41576c8196acbba5907b66503b26110000000000000000000000000e23384c5d71869cb1c5b39e897560667c90a0b2b49f8a79635544311d10000000000000000000000000000000000012283d52677d92a7bca7927d7f94a19c86796b635b5b5c657b8fa7b8ad98836e8095a29d897b6e645c5b5a62778a9eb4c7ab96816b56412c160100000000000f23354552585959595959667c91a8af9a846f585959595959677c92a9ae99836e5759595959564d483c2b1a0a000000000000000000000000000000000000000000000000000008141c202c384d63788da79a846f747c85929ea8b8c3b4a2947f695544311d080000000000061a2c3d4d63788a9ea9a79e938c8b8d929ca4a49c877963576073839aa5aa9e89786257463625131a18130c0a04000000000000000000000000132536596e8398aec1ac96816c5736261401000000000000000000071c32475c71879cb1bea9947e69543f2914000000000f253a4f647a8fa4c7b49f8a75604b352b3b48596278879da6b4a29a847460564538271a0a00000000000000000d22384d62778daabbad98826d58432d1800000000000000021527385b70859bb0c5b39e88735645321e0900000000000000000000000000000011273c51667c91a6bbc1ac97816c57422c1700000000021527385b70859bb0b8a78b76614b4758697e93a4b6b49f8b79634e3f2f180800142a3f54697f94a9bda8937d68533e28130000000000000000000000061a2c3d50657b90a4b5bcab96816b565e6d8298a6b7a99b8573604b3e2d1a0a0000000000000000000000000000000010253a4f657a8fa4c8a9947f738399a39c8b81787371727a879db2c3aa947f6a73849aa59e90837a73717278849ba8b9baa9927c67523d2712000000000001162a3f52636d6e6e6e6e6e6e75899eb49f8b766e6e6e6e6e6e6e768a9fb49f8a756e6e6e6e6e6b625a483827150200000000000000000000000000000000000000000000000111182630353c494d6074899e9e898088919ba3b4b9c1b5a59a8473604b3727150100000000000c2135495b6f8499a8a79e897e7775787d86979fa59c867560556176879ca8a79c8675615443301c120100000000000000000000000000000000162b40556b8095aac9b09b85705443301c08000000000000000000071c31475c71869cb1bfa9947f6a543f2a15000000000d22374d62778ca9babbaa8d77624d38222b3b485a6278879da6b3a299837460564538271909000000000000000b20354b60758a9fb4b09b85705b3828150200000000000000182e43586d8398adc2b8a68b76604b36210b00000000000000000000000000000013283d52687d92a7bdc0ab95806b56402b160000000000182e43586d8398adc5a38e79634e4c6176899eb3b8a796816c5b49352111000012273c51677c91a6bcab95806b56402b1601000000000000000000000c2135495b6f8499aec2b59f8c78634d4c6176889db3b5a3947f6a5c4a382815020000000000000000000000000000000d22384d62778daabbab95806b75859ba49f968d8886878e9da5b6b7a58f7a646277879da6a0988f8886878c9ba3b4c5b49f8a77614c37210c000000000003182d42586d8184848484848483899eb3aa9a848484848484848483899eb3a89a8484848484838078625645311d090000000000000000000000000000000000000000000009141d2f36434b525a636a72859ba79e959da6b0b4c1bab4a39b87786254433019090000000000000e23394e63798c9fb39e89796862606268748197a1a497826d5b5863798a9eaba4998372604a40301f0f0000000000000000000000000000000011263b51667b90abbcb49e8974604b35200b000000000000000000061c31465b71869bb0bfa9947f6a543f2a15000000000b20354a60758a9fb4c8a58f7a65503a251d2b3c495a6379889da6b3a199837460564537271909000000000000081d31445572889db2b39d88735645321d0900000000000001162b40566b8095abc0c4a38d78634e38230e000000000000000000000000000000142a3f54697f94a9bebda8937e68533e29130000000001162b40566b8095abbba6907b66515b6c8196a7b8b39e8976614c3d2c1a0300000f243a4f64798fa4c6ad98836e58432e19000000000000000000000417293a4e63798c9fb5c4af9a846f5b494758667c91a0b2b49f8b7a645645321d100000000000000000000000000000000b20354b60758a9fb4ac97826d6177869aa2aba69d9b9da5b2b6beb29d877360596278889ba3ada79e9b9c9fabb4c1b9a798826d5847331f0a000000000003192e43586e83989999999999999ea7b8b4a29a99999999999999999ea8b9b4a29a9999999998958774604b36200b000000000000000000000000000000000000000000091926313f4c54606770787f869ba3b4b3abb3b7c4b9b3a99f94857762594836261400000000000000152b40556a8095abaa937e695b4d4b4d5660728399a99f8e79634e5b667c8d9fb5a1957f6a5e4c3d2d1c0c0000000000000000000000000000000c21374c61768b9fb5b9a88e79644e39240f000000000000000000071c31475c71869cb1bea9947e69543f291400000000071c30435472879cb2bca7927d67523d28121e2c3c495b6379889da6b4a1998374605544372614010000000000011426375b70859ab0b59f8a75604b36200b0000000000000013283e53687d93a8bdbba5907b66503b2611000000000000000000000000000005192b3c596e8398aec3c4a6907b66513b2611000000000013283e53687d93a8bda8937e695363788b9fb4b6a4937e695847331f0f0000000c22374c61778ca8bab09b85705b382815020000000000000000000a1f3347586c8197abbcb7a6917c66513c3a4c5e6e8298a6b8aa9c8674604b3f2e1b0b0000000000000000000000000000081d31445572889db2ae99836e59617684949fa9b3b0b2b7c3b9b4a0927d6854495a627785959fa9b3b0b1b5bcbcb5a99e8978624d3a2a170400000000000013283d52687d92a6aeaeaeaeaeafb2b7c0b4b0aeaeaeaeaeaeaeaeafb3b7c0b4afaeaeaeaeaea5917c67513c2712000000000000000000000000000000000000000009192637444b5d65737d858d959ca4b4c1c8c8bbb4afa89e968b7f746259483b2b1808000000000000001325365a6f859aaf9f8b76614c3d3638455462788a9fad98836e594c5e6a7f95a1b59f8d7c665b4a3a2a190900000000000000000000000000000a1f33475871869cb1c6a9947e69543a2a17040000000000000000031628385d72879cb2bda8937e68533e291300000000001325365a6f859aafbfaa947f6a553f2a150e1e2c3c495b6379889a9e9f9f998373605544311d08000000000000182d43586d8298adbcab8d78634d38230e0000000000000011263b50667b90a5bbbda8937d68533e281300000000000000000000000000000b2034485a73889db2c8b7a68c77624d37220d000000000011263b50667b90a5bbab96806b5d6e8399aabbb29c8774604b3a2a17010000000b1f34475974899fb4b39d88735645321d090000000000000000011527374c61768a9eb4c8b29d8774604b3530404c6177889eb3b5a496806b5d4b3928160300000000000000000000000000011426375b70859aaa9f97826d575861737f8a969ea8a8a9a8a89e948272604a3c49596274808b969ea7a7a9a9ab9f9a8a7c665a48351c0c000000000000000c21364b617588969a9a9a9a9a9a9da5b7b7a59d9a9a9a9a9a9a9a9a9da6b7b6a59d9a9a9a9a9a98836d58432e1803000000000000000000000000000000000000011426374455606c7b86929ba3aab2b6c3cdbcafaa9f99928980776a6055473b2b1d0d00000000000000071c30435473889eb19c8671584633202736485a6d8398ad9f8b77624d4a60728399a4ab9e8a7963584737261401000000000000000000000000000417293a566b8095abc3af9a846f5847331f0a0000000000000000091e32455673899eb3bca6917c67513c27120000000000182d42576d8297acc2ac97826d57422d18000e1e2c3d4a5b637885898a8a8a8b8275604b35200b000000000000162b40556b8095aac9a5907b65503b2610000000000000000e23384e63788da3c4c0ab95806b56402b1601000000000000000000000000011426364d62788da6b7c8b29d8873594834200b00000000000e23384e63788da3c4ad98836e657b8fa1b3b4a2917c665544311c0c0000000004182a3b5c72879cb1b59f8a75604b36200b0000000000000000081d314455697f94a8b9bbaa957f6a5544311f334758677c91a0b2b49f8c7b655746321e110000000000000000000000000000182e43586d828a8a8a8579634e4755606a7881898f939493908a7f73605443303b4856606b7881898e929494918b8479665e4c3c2b1900000000000000000a1e324657637981848585858585879db2b29d878585858585858585889db3b29d87858585858585836e59442e1904000000000000000000000000000000000000081d3144556073818d9ca4b0b4c1c6bab4baaf9e958b847d756b62594b44372a1d0d00000000000000000b20354a60758a9fae99846f593a2917182b3c51667b90a6aa937e695343546175869ca7a89c8776615544311d1302000000000000000000000000000f243a4f647a8fa5b7b49f8b76614c37211000000000000000000b21364b60768a9fb5c6a48f7a654f3a25100000000000152a40556a7f95aabfaf9a846f5a36251300000f1f2d3d4a5a627074747474746d605544311d0800000000000013283d53687d92a8bda8927d68533d2813000000000000000b21364b60768ba6b8c3ad98836e58432e1900000000000000000000000000081c3043546a7f94a9c4c5ad97826d583b2b180500000000000b21364b60768ba6b8b09b867073859bb1bcab9a846f5e4c3727150000000000001a2f445a6f8499afbcab8d78634d38230e00000000000000000b20354b6074879db2c6b49f8b77624c3726182a3a4d5f6e8398a7b8ab9c8775614b402f1c0c00000000000000000000000001162b3f53646d75757571635b4937444b5a626c757a7d7f7e7b756a60554436252b38454b5a626c74797d7f7e7c7870635b4c402f1e0e000000000000000003162939495b636c6f70707070707c91a8af9a8470707070707070707e93aaae99837070707070706e6554402c17020000000000000000000000000000000000071a2d3e4b607382969fabb6c2bcb5aea89fa8aa957f776f6760574d483b3127190d0000000000000000000c21364b61768baaae98836e59432e190e21374c61768ca6ae98836e593646576278899eaaa59a8473604b41312010000000000000000000000000000b20354a6073879db2bbaa927d68533f2e1b08000000000000000e23394e63788eabbcb9a88c77624d37220d000000000012283d52677d92a7bcb29c87725443301c0700010f1f2d3c494d5a5f5f5f5f5f584b443726140100000000000010263b50657b90a5c9aa95806a55402b1500000000000000091e32455673889eb3c5b09b85705b382815020000000000000000000000031729394b6073879db2c7b8a7917c67513c2712000000000000091e32455673889eb3b39d88737d92a3b5b49f8c79644e402f1909000000000002172c42576c8197acc9a5907b65503b261000000000000000071b2e3e52677c91a5b7c2ad98836e594834190c1c30414c6177889eb3b6a597816c5e4c3a29170400000000000000000000000010233546535860605f5c4e493d2c313c494d556064686a696660564b443727181a28323c494d54606468696967625a4e4a3d2f2212000000000000000000000b1b2c3c494d575a5a5a5a5a6075899eb49f8b76615a5a5a5a5a61778b9fb49f8a76615a5a5a5a5954473624110000000000000000000000000000000000000d21364a5c6b8095a0b5bcc1b4ab9f998f8a9fa5907b6659524b4539342b1d1509000000000000000000000b20354a60758a9fae99846f59442f1a0a1f33475873889db29c8772544339495a657b8c9fb4a296816c5f4e3e2e1d0d000000000000000000000000071c3043546a8095aabbb09b86715d4b3722120000000000000012273d52677c92a7c9b49e8974594834200b000000000010253a50657a8fa5c8b49f8a75604a35200b0000010f1e2c353845494a4a4a4a433531261909000000000000000e23384e63788dabbcad98826d58432d1800000000000000031628385b70869bb0c5b39d88735645321d090000000000000000000006151e334657667c91a5b6c7b39e8875604b36210b000000000000031628385b70869bb0b49f8b75889db2b9a897826d5c4a36221200000000000000152a3f546a7f94a9bda8927d68533d2813000000000000000d22374b5c70859bb0c3b6a48f7a65503b2a1800121f344759677d91a1b2b19f907b655846331f12000000000000000000000000061828353f434a4a4a4638352c1f1d2b3537444b4f535453514b4538312719090a161e2c3536434b4f525454524d483c362d1f120400000000000000000000000e1e2c3538414545454545566e8398adaa927d68523a4545475970859aafa9917c67523845454440362818070000000000000000000000000000000000021628384e64798b9fb4bebdb1a39b8d837a7e93a8947f6a543b36322820180d020000000000000000000000071c30435473899eaf9a85705a39281604172a3a5b70859bb09f8a75604a353c4b5d697f94a0b09e927d685c4b3b2b1a0a0000000000000000000000001325364d62788b9fb4b5a38f7a644f40301d0d0000000000071b2d3e576c8196acc1af9a85705a3b2b180500000000000d22384d62778daabbbaa98c77624c37220d000000000e1920233034353535352e201d140900000000000000000b20364b60758a9fb5af9a85705a3726140100000000000000192e43596e8398aec3b59f8a75604b36200b0101010101010002090f1a2133424b6175879db2c3baa996806b5645321e0900000000000000192e43596e8398aebbaa968196a6b7b49e8a77624c3e2d1a040000000000000012273c52677c91a7bcaa95806b55402b1600000000000005192b3b4f647a8fa3b4c6b19c86715d4b371d0d0004182a3a4d5f6e8399a7b8b29d8876614c40301d0c0000000000000000000000000a18232b2e3535353123211a0f0e19202731363a3e3f3e3b3632281d15090000020e1920263035393d3f3f3c38352b211a0f01000000000000000000000000000e1921232c2f3030283851677c91a9ae99846f5846332a3a53697e93abae98836e564532302e2c24180a000000000000000000000000000000000000091e3245566d8298aabbbfb19f9785796e657a8fab98836e5839291e160a0500000000000000000000000000001325365c72879cb19c87725745321e091a2f455a6f849aafa98b76614b362f3f4f616d8297a3b49f8b7a64594838281502000000000000000000000008203448596e8398abbcaf9a84705f4d3b2a1a0b000000000b22364a5c72879cb2c4aa95806b55402b160000000000000b20354b60758a9fb4c7a48f79644f3a240f0000000000060c0d1b1f1f1f1f1f180b0801000000000000000000091d32455673889db3b29d88725544311d0800000000000001162b41566b8096abc0bcab8d78634e38231616161616161617151d202c354350606d8197a5b7c3b49f8a77624c3828160200000000000001162b41566b8096abc8b49f8a9fb4b7a5947f6a594834200f00000000000000000f253a4f647a8fa4c7ad98826d58432d180000000000000b203448596e8398adc1b9a8937e69533f2e1c0000000c1c30414c6277899eb3b7a698826d5f4d3b2a1804000000000000000000000000061016182020201c0e0c0600000609151d2025282a2926211e160a0100000000000608141c2024282a29272320190e0700000000000000000000000000000000060c0e171a1b1b21364b61768a9fb49f8a76614c3622374c62778c9fb49e8975604b362119171107000000000000000000000000000000000000000b21364b6075899eb4c7b2a1978173645c61768b9f9c87725746321e0a00000000000000000000000000000000192e43596e8398ae9f8b76604b36210b192e44596e8399aea18c77614c372232434b6074859ba6a99d8877625645321d14030000000000000000000005192b3b4e63798c9fb4b4a2917c67594738291b1009040d1b2d3d4f64798ea5b6b8a68f7a654f3a2510000000000000081d31445572889db2bca7917c67523c27120000000000000000050a0a0a0a0a03000000000000000000000000021528385b70869bb0b49f8a75604b35200b0000000000000014293e53697e93a8bec9a5907b65503b2b2b2b2b2b2b2b2b2c2832363d494e616a7e939fb1c3b6a596806b5948341a0a000000000000000014293e53697e93a8bebcab9fabbcb29d8775604b3b2a180100000000000000000d22374c62778ca9bab09a85705b3727150200000000031628394d62788b9fb4c9b49e8976614c36211100000000131f344759677d92a1b3b2a0917c675947341f13000000000000000000000000000001030b0b0a070000000000000002080b0f131514110b090300000000000000000001080b0f131414120d0b06000000000000000000000000000000000000000000020505091e3246576e8399aea9927d6752392834485970859ab0a8917c6651382815020000000000000000000000000000000000000000000f253a4f647a8fa8b9baa999837260554a5772879c9f8b76614b36210c0000000000000000000000000000000014293e53697e93a8ab8f7a654f3929171629395a6f849aafa98b76604b36211d3245566277889da9a69b8574604b4232211100000000000000000000000d2135495b6d8297a7b8b39e8877625646392e201d171f2a3a4a5b6d8297adc3b39d8874604b35200b000000000000011426375a70859aafbea9947f69543f2a1400000000000000000000000000000000000000000000000000000000192e43586e8398adbbaa8d77624d38220d0000000000000011263b51667b90a6bbbda8937d68534040404040404040404138454b505b636f7f8d9fb5bdbaa99c8775604b3b2b1800000000000000000011263b51667b90a6bbc9bcb4bcb4a3927d675645321d0d0000000000000000000b20354a60758a9fb4b29d88735544311d0800000000091e3245576b8095aabbc0ac97816c5746331e0a0000000005182a3b4d5f6e8399a7b9b39e8977614c41311e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283952677d92a9ae99836e5746322b3b54697e94a9ad98836d5645321d0900000000000000000000000000000000000000000011273c51667c91a6c6b49f8a7762544439586e8398ab8f7a644f3a250f000000000000000000000000000000000e24394e63798ea3ab96816c5746331f1e32465771869cb19f89745645321e1528384859647a8b9fb4a397826d614f3f2f1e0e00000000000000000000061a2c3d4c6177899eb3b8a69b857461574b3e363229333b475863798c9fb4bbaa95806b5443301c0800000000000000182d43586d8298adc1ac97816c57422c1702000000000000000000000000000000000000000000000000000001162b41566b8096abc8a58f7a65503a2510000000000000000e24394e63798ea3c5c0aa95806b5656565656565656565657585660666e7984949fabbcbab49f8b7a645745321d0d0000000000000000000e24394e63798ea3c5d5cfcabeb09b8572604a38281600000000000000000000071c30435472879cb2b49f8a75604b36200b000000001325364b6075899eb3c8b4a28e79634e3929170300000000000d1d30414c6277899eb3b8a799836e5f4e3c2b18080000000000000000000000000002080b1f20202020191610060000000000000000000007111719202020201f0c0a04000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a9fb49f8a76614b3622384d62788da3b49e8975604b36200b00000000000000000000000000000000000000000013293e53687e93a8bdae99836e5947363f546a7f94a8937e68533e2913000000000000000000000000000000000c21364a5b71859bb09e8876614b41342c394b61768b9fb19b86715c3828160a1a2b3b4b5c687e929fb0a0937e695d4c3c2c1b0b000000000000000000000f1f344759677d929fb1b4a39a8475645c514b453a474c596276869caabbb49f8b78624d3626140100000000000000152b40556a8095aabfae99846f59442f1a0000000000000000000000000000000000000000000000000000000013293e53687e93a8bca7927d67523d2812000000000000000c21364b61768ba7b8c2ad98826d6b6b6b6b6b6b6b6b6b6b6c6d70757b838c9aa2b5bcbab49c927e685c4b392816000000000000000000000c21364b61768ba7b8ccd7c7b2a08f7a645443301a0a00000000000000000000001325365a6f849aafbcab8d78624d38230d000000071c304354687e93a7b8c5b09b85705b4a361b0b000000000000001320344859687d92a1b3b3a1927d685a4836251300000000000000000000000009151d2035353535352e2b23180a00000000000000000b19242c2f3535353535221f180c0000000000000000000000000000000000000000000000000000000000000000000a1e3346576f8499aea9917c6752382835485a70859bb0a8917b665137271502000000000000000000000000000000000000000013283e53687d93a8bdaa95806b553b2a3b50667b90a597826d5737271501000000000000000000000000000000071a2d3d52677d92a4a695806b5f4c473c4957687d92aaac96816c57412c17000d1d2e3e4e606c8196a2b49f8c7b655a493929180800000000000000000004182a3a4d5f6c8197a2b3b4a29a867a6e6660565b58616977849aa4b6b8a697816c5a48351808000000000000000013283d53687d92a8bdb19c86715c3a29170400000000000000000000000000000000000000000000000000000011263b51667b90a6bbaa947f6a553f2a15000000000000000a1e32465773899eb3c7b29d8780808080808080808080808183858a90989fabb4c0b5a89f927e69604e3e2e1b0a000000000000000000000a1e32465773899eb3c8cdbaa998836e5c4b362513000000000000000000000000172d42576c8297acc9a5907a65503b25100000000b20354a6073869cb1c5b8a6927d67523d2d1a000000000000000005182b3b4e5f6f8399a7b9b39e8978625443301c0e0000000000000000000009192731364a4a4a4a4a433f362818030000000000000019293640444a4a4a4a4a37342a1c0c00000000000000000000000000000000000000000000000000000000000000000317293952687d92aaad98836e5645322b3c54697f94a9ad98826d5544311d08000000000000000000000000000000000000000012273c51677c91a6c5aa947f6a553f2a374c62778ca69b86715544311d08070d0f150f0d070000000000000000000f20354b6074869ca99f8d7d6b6159595a6375879db2a4907b65503b26100000102031424b6073849aa5aa9e8978635746362513000000000000000000000c1c30414b6073849aa2b1b4a49c8f837b75717072767e889aa2b4bcab9d8876614c3c2b1900000000000000000010253b50657a90a5c9b49e89745847331f0a0000000000000000000000000000000000000000000000000000000e24394e63798ea3c5ac97826d57422d1800000000000000031629395c71869bb1c6b7a59d959595959595959595959596989b9fa9aeb4bcb7b2a39b8a7d69604f413120100000000000000000000000031629395c71869bb1c6c4b49f8a78624d3e2e1808000000000000000000000000152a3f556a7f94aabda7927d68523d28130000061a2c3d50667b90a4b6c9b39e8875604b36200f0000000000000000000d1d31414d6277899eb3b9a89a8472604a3d2c1909000000000000000002152737445b5f606060605853463622110000000000000c1c36475459606060605f4c473a2a180400000000000000000000000000000000000000000000000000000000000000000c21374c61768b9fb49e8975604b3623384d63788da3b39e8975604b36200b00000000000000000000000000000000000000000e23394e63798ea7b8ac96816c573c2c34475973889d9f8a75604b35200f1a21242b24221b100200000000000000081d314455647a8b9fab9f8d8077716f7078849ba5ab9c86715d4c38230e000002131d3144556176879da8a79c8675615443301c1200000000000000000000131d314455607484979fb3b6b1a199908a8785878a939da6b4bab49f8d7c665847331e0e0000000000000000000e23384d63788dabbcb9a88c76614c37210c0000000000000000000000000000000000000000000000000000000c21364b61768ba7b8af9a846f5a3625130000000000000000192e44596e8399aec3c3b7b2abababababababababababacadb0b4babbb4afa59d938579675f4f4232231302000000000000000000000000192e44596e8399aec3b8a695806b5a483520100000000000000000000000000012273d52677c92a7bcaa95806a55402b1500000c2136495b6f849aafc2bcab95806b5645311d09000000000000000000001320344859687d92a1b3b4a2937e695b493726140100000000000000081d3144556d74757575756e6453402f1c090000000004172a3a54656e7575757574615947341f0900000000000000000000000000000000000000000000000000000000000000000a1f3347586f849aafa8917c6651382735495a71869bb1a7907b66503b261100000000000000000000000000000000000000000b20354b6074899eb3b09b86715a49352a3b5a6f8499a98e79634e39241d2d36394039362d201002000000000000011527374a5c687e8d9faa9f968b8684868c9ba3b49f8d7b65503f2f1c08000000011527374758647a8a9fb4a4998372604a40301d0c000000000000000000021527374556607482929ea7b4b3aeaa9f9c9b9d9faab3b8b5a99f927e685e4c3a2a17000000000000000000000b20364b60758a9fb4c6a38e79644e39240f0000000000000000000000000000000000000000000000000000000a1e33465773899eb3b29c87725443301c0700000000000001172c41566c8196abb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b1b0adaaaa9f9992877e73635b4d413224140500000000000000000000000001172c41566c8196abb2b19d8876614b3c2b19020000000000000000000000000010253a4f657a8fa4b2ad97826d58422d1800031629394e63798ea2b2b2b29f8c78624d382715020000000000000000000005182b3b4e606f8499a6b2b29f8a79635544311d08000000000000000b20364b60748b8a8a8a8b826e5e4c38230e000000000a1f3347586e838a8a8a8a8b77614c372614010000000000000000000000000000000000000000000000000000000000000004172a3a53687d92a4ad98826d5645312c3c556a7f94aaac97826c57422d170200000000000000000000000000000000000000081c3043546d8298adb59f8c78634d423040566b8095a7927d67523d28323d4a4e554f4a3e2e20100000000000000009192d3d4e60687d8c9ba3aa9f9b999b9fabaa9f95806b5e4c382111000000000009192a3a4a5c677d919eafa195806a5f4d3b2a1804000000000000000000091928384556606d7d89969ea8afb4b4b1b0b2b4bab4aea39b8b7e68604e402f1c0c00000000000000000000091d31455673889db2bba6917c66513c2711000000000000000000000000000000000000000000000000000000031729395c71869bb1b29f8a75604a35200b0000000000000014293e54697e939d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9c9c9a9895908b847c746860544a3d30231406000000000000000000000000000014293e54697e939d9d9c927e685746331e0e00000000000000000000000000000d22374d62778c9d9d9d9a85705a45301b000a1e3246576c82979d9d9d9d99836e5a48351a0a0000000000000000000000000d1d31424d627888999d9d9d9b8573604b35200b000000000000000e24394e63798ea99fab9f907b66503c2c19060000000c21374c61768ca19f9fa9947f6a5544311d0800000000000000000000000000000000000000000000000000000000000000000c20364b607486969a9b8975604b3623384e63798d9b9b99836e59442f1904000000000000000000000000000000000000000114263650657a8fa2b4ab98836e604a433652677c91a796816b564138454b5c646a645c4b3f2e1c0c000000000000000f1f31424e5f687b8592999fa9a5a5a89e988c7f6b6251402f1c030000000000000c1c2d3d4d5f6a80929a9b9b8d7c675947341f0b000000000000000000000a1a2838454b6068768189939a9fa9a6a7a8a6a89f9990857a68604e423122120000000000000000000000021527385b70859ba6a6a6937e69543e291400000000000000000000000000000000000000000000000000000000192e44596e83999d9d9d8c77624c37220d0000000000000011263b50667c878888888888888888888888888888888887868583807b766f6760554b43362d1f130500000000000000000000000000000011263b50667c878888878172604a3929170000000000000000000000000000000b20354b6073878888888784705b45301b000c21364b61758687888888878377624c3c2b190000000000000000000000000000132034485963798487888888877d68523d28130000000000000012273d52677c92a7b5bcae99846f5a4935200b00000010253a50657a8fa5bfb5b29d8774604b35200f0000000000000000000000000000000000000000000000000000000000000000091d3245566177818586857a644f392435495b6e8386868379634e39230e0000000000000000000000000000000000000000000823374b5d70859babb2a0937e6a60544b4e63788da89a856f5a434b56606b79807a645d4b3a2a170400000000000001142431414e5d65737c848a8e90908e8983796a61514433211100000000000000000f1f304150626a7d858686868477614c37220c00000000000000000000000a1a2832424e58616c767e848a8e919292918e89837b72645c4e4231241404000000000000000000000000182e43586d829090909090816b56412c1601000000000000000000000000000000000000000000000000000000152a40556a7f878888888779644e39240f000000000000000f23384c5e6672727272727272727272727272727272727271706d6a666157524b44373026180f01000000000000000000000000000000000f23384c5e66727272726b605443301b0b000000000000000000000000000000081c304354607272727272706655422d19000a1e324657617172727272726e625948341e0e000000000000000000000000000005192b3b495b636f727272727268604e3a251100000000000001162b40566b8095abc0cab59f8c78634d39281603000014293e54697e93a9becab7a5917c66513d2c1a0600000000000000000000000000000000000000000000000000000000000000021528384759616c707171645c4a36222c3d54656e71716e635b4a36210c000000000000000000000000000000000000000000081c2e3f4f647a8c9fb4b49f8d7f72655d556074899e9e89735a54606774808c958b7b645847331f0a00000000000000061423313f4b5460676e76787b7b79756e635b50433326160300000000000000000112233344505f687071717170615947341f0b0000000000000000000000000a161e313a474c5861686f75797b7d7d7c79756e6660544a3e31241406000000000000000000000000000e23394e63797b7b7b7b7b7a644e39240f0000000000000000000000000000000000000000000000000000000013283c50616a7272727272645c4a36210d00000000000000091c2f404c505d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5b5855504c46393631271c1408000000000000000000000000000000000000091c2f404c505d5d5d5c564a433625130000000000000000000000000000000001142636434b5d5d5d5d5d5b55483825120003162939464b5c5d5d5d5d5d594c483b2b18000000000000000000000000000000000d1d2c3d494e5a5d5d5d5d5d524e41311e0b00000000000003172939596f8499aebcb4bcab96816b5746321e090001142636576d8297acbcb4bcaf9a846f5b4935210b00000000000000000000000000000000000000000000000000000000000000000a1a2a3a474c565b5b5b4f4a3e2d1b1f364754595b5b594e4a3d2d1a07000000000000000000000000000000000000000000001122364a5c6b8095a1b2ab9f94847a716a6570859ba78d78646a737c87959fa99d8776614c37210c00000000000000000513212e36434b5257606365666460564e4a3d332516080000000000000000000005152533414e525a5b5b5b5a4c473b2a18040000000000000000000000000002131c2a333a464c5355606366676867646056514a43362d20130600000000000000000000000000000c21364a5b636666666666645c4a36210d000000000000000000000000000000000000000000000000000000000d20334350555d5d5d5d5d4e4a3d2d1a07000000000000000011222f383b484848484848484848484848484848484847474543403b363329201d150901000000000000000000000000000000000000000011222f383b484848474135302518080000000000000000000000000000000000081826303547484848484542382a1a0800000b1b2932364748484848484437342b1d0d00000000000000000000000000000000000f1f2c36394448484848483d3a312313010000000000000a1e33465772879db2ab9fabb39e8975614b36211100081c30435470869bb0ab9fabb59f8c79634e3929160300000000000000000000000000000000000000000000000000000000000000000c1c2a34374145464639362d2010192936404446464439362d1f0f0000000000000000000000000000000000000000000000071b2d3e4b60728398a0b4b4a29a8f867f7a778196a6917d797f87919ca5b4b7a598836e58432e1900000000000000000002101826303539454b4e50504e4b4538362d1f1507000000000000000000000000071523313a3d454646464537342a1d0c000000000000000000000000000000000c171f29333637444b4e515253514f4b4538353025181002000000000000000000000000000000071a2d3d4a4e51515151514e4a3e2d1a0700000000000000000000000000000000000000000000000000000000041525333c40484848484839362d1f0f00000000000000000003111c232633333333333333333333333333333333333231302e2b26211e170b08020000000000000000000000000000000000000000000003111c2326333333322c201c13080000000000000000000000000000000000000008141c203233333333302d251a0c000000000b161e213233333333322f2220180d000000000000000000000000000000000000010f1a21232f323333333328251e1305000000000000000c21364c61768ba5b49f8a9ea8a7937e68533f2f1c080b20354b6075899eb49f8c9ca4ab96816c5746321e0a0000000000000000000000000000000000000000000000000000000000000000000c181f222c30313124221b10020a19242c2f31312f23211a0f01000000000000000000000000000000000000000000000000101c304354607482949faab4b0a39b958f8c8c9fb49b918f949ca4b2b6b1a59d897a644f39240f000000000000000000000008141c20283236393b3b39363228211a0f01000000000000000000000000000005131e25283031313130221f180c000000000000000000000000000000000000040c171f21273135393c3d3d3c39363228201c13080000000000000000000000000000000000000f1f2d36393b3b3b3b3b39362d200f000000000000000000000000000000000000000000000000000000000000071520282a333333333324211a0f010000000000000000000000090f111d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1b1815110c0a03000000000000000000000000000000000000000000000000000000090f111d1d1d1d160b070000000000000000000000000000000000000000000001080b1d1d1d1d1d1b191208000000000000030a0c1c1d1d1d1d1d190d0b05000000000000000000000000000000000000000000060c0e1a1d1d1d1d1d13110b0100000000000000000f253a4f647a8fa4af9a848a9eb19c86715d4b38230e0e23384d63788da8b29c87879cb29e8976614b36211100000000000000000000000000000000000000000000000000000000000000000000040a0c171b1c1c0f0d07000000071117191c1c190e0c070000000000000000000000000000000000000000000000000000011426364556606e7f8c9ba3b1b5b1aaa4aa9faabbaca6a4aab2b6b4b09f978779645c4a36220d00000000000000000000000001080b161e2123262624201d150a070000000000000000000000000000000000010b11131b1c1c1c1b0c0b04000000000000000000000000000000000000000000040a0c151d20232628282724201d150b070000000000000000000000000000000000000000010f1a2123262626262624211a0f0100000000000000000000000000000000000000000000000000000000000000040d13151d1d1d1d1d0f0d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8ad98828297ada4907b65503c2b1911273c51667c91a6af9a848096aba8937e68533f2e1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182838454b61697b85919ca4aab0b4bab4bbc8bfc7bab4b0aba39b908276635b4a3e2d1b0700000000000000000000000000000003090b0e10110f0b09020000000000000000000000000000000000000000000000050606060500000000000000000000000000000000000000000000000000000001080b0e111213120f0b0902000000000000000000000000000000000000000000000000070c0e11111111110f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c12142020202020200f0d070000000000000000000000000000000000000000070b1f20202020201a171107000000000000000000000000000000000000000000000000020b111320202020201e0c0a030000000000000000000000000000000000000000000000000000000000000b141b1d20202020202020202020202020202020202020202020202020202020202020202020110f09000000000000000000000000000002172c41576c8196acac97827b8fa4ae99836e5a483520152b40556a8095aaad98827b8fa6b19c86715d4b37230d0000000000000000000000000000000000000000000000040d1416202020202020200a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832434f5d65707c868e959b9fa9a4abb0bcb0a99f9b958e857b6d61574a3d2d201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d131520202020201a1811080000000000000000000000071420272a35353535353524221b10020000000000000000000000000000000008131c203435353535352f2c24190b0000000000000000000000000000000000000000000006141f2629353535353533211e160b000000000000000000000000000000000000000000000000000000000e1c282f323535353535353535353535353535353535353535353535353535353535353535353526231c120400000000000000000000000005182b3b5a70859aafab968171869cb19f8c78624d3828162839596e8399aeaa957f72889db3a48f7a65503b2b1805000000000000000000000000000000000000000000081621282b353535353535351f170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d323f4b4f5e66717980858a8d8f969fb09e968a86807970655d4c46392d1f1002000000000000000000000000000000000000000000060c0e11141516151413100d0b05000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e121416161614120e0c0600000000000000000000000000000000000000000000000000000000000000000003090c10131516161513110c0b0400000000000000000000000000000000000000071520282a35353535352f2c25190b000000000000000000031425323b3f4a4a4a4a4a4a3a372e201000000000000000000000000000000008182530354a4a4a4a4a4a4440362919070000000000000000000000000000000000000000021424313a3e4a4a4a4a4a493632291b0b00000000000000000000000000000000000000000000000000000b1c2c3a44474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b382f22120000000000000000000000000b2034485973899eb3aa947f6a7e93a8ab96806b5645321e32465772879cb2a7927c6c8196acae98836e59483420090000000000000000000000000000000000000000041626333d404a4a4a4a4a4a4a332a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215212e37404d515c646b7075787a8196ab968073706b645c504c3f33291b0f0100000000000000000000000000000000000002090b1219202326292a2b2a292825222018130d0b0500000000000000000000000000000000000000000000000000000000000000000608141c2024272a2b2c2b2a2723211a100e08000000000000000000000000000000000000000000000000000000030a0c161e2125282a2b2b2b2926221f180f0d07000000000000000000000000000000031525333c404a4a4a4a4a44413729190800000000000000000c2032434f546060606060604f4b3e2e1b070000000000000000000000000000132536435b5f606060606059544736241100000000000000000000000000000000000000000b1f31424e5360606060605e4b46392916030000000000000000000000000000000000000000000000000014283a4a575d60606060606060606060606060606060606060606060606060606060606060606060504c402f1c0900000000000000000000000d22374d62778ca7b8a7927c67768a9eb39e8975604b3621364b61768b9fb5aa8e7964798ea3b49f8b77624d37271502000000000000000000000000000000000000000d21334450556060606060605e473a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c2330393e4a4f55546063657a8faa98836e54564e4a3e382f1e170b000000000000000000000000000000000000030a151d20272c35383b3e3f40403f3d3b37342b29221f180d0900000000000000000000000000000000000000000000000000000000030e1920263035393d3f4041403f3c38352c25231c11090000000000000000000000000000000000000000000000010b161e212832363b3d3f4141403e3b37342a24211a0f09000000000000000000000000000d203343505560606060605a5447372511000000000000000012273b4f6169757575757575645c4b37220d00000000000000000000000000071c3043546d7475757575756f6554402c17020000000000000000000000000000000000000011263a4e6068757575757573615746321e0b000000000000000000000000000000000000000000000000001b2f4457687275757575757575757575757575757575757575757575757575757575757575757575665e4c38230f000000000000000000000011263b50667b90a5c5a48f79646c8297aca7927d68533f2e3a4f647a8fabb49f8a756070859bb0aa95806a5544311d080000000000000000000000000000000000000014283d50626b757575757575705847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008121d242d363936434b4d60768a9f9c8772574539362d231c11030000000000000000000000000000000000000b161e2731363c3c494d51535555555453504d483b3e37342a231c1209000000000000000000000000000000000000000000000000000b171e2c3536434b4e525456565654514e493d3a372e241d1205000000000000000000000000000000000000000009151d29323639464b50535456565553504c473b39362d231c1104000000000000000000000013283c50616a75757575756f6554412c180300000000000000142a3f54697f8a8a8a8a8a8a7a644f3a240f000000000000000000000000000b20354a60738b8a8a8a8a8a836f59442f1a000000000000000000000000000000000000000013293e53687e8a8a8a8a8a8975614b392816030000000000000000000000000000000000000000000000001d32475d72878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7c66503b26110000000000000000000000142a3f54697f94a9b8a78c766163798ea2b19c86715d4b373e53687d93a8b19c877156687d93a8b39d8874604b36200f00000000000000000000000000000000000000162b40556b808a8a8a8a8a8a76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101b2224263035455671879c9f8b76604b36211b100900000000000000000000000000000000000002121b283238454b51585a6366696a6b6a696865625959534c483b382f231c1105000000000000000000000000000000000000000000000d1b29333c494d54606367696b6b6b6967635b57504b3f382f20180d0000000000000000000000000000000000000e19273139464b54576165686a6b6b6a68666159574e4a3e382f1f170c00000000000000000000152a40556a7f8a8a8a8a8a836f5a442f1a000000000000000012273c51677c919f9f9f9f917c67523c271200000000000000000000000000071c30435472879c9f9f9f9c86715c3a2a1704000000000000000000000000000000000000061a2c3d586e83989f9f9fa7947f695746321e0a0000000000000000000000000000000000000000000000001a2f455a6f849a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f937e69533e29140000000000000000000001142637586d8298adb39e8973585b70859aafa48f7a65503b41576c8196acad98836e586176899eb4a6917c67523d2d1a0700000000000000000000000000000000000013283e53687d939f9f9f9f8e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f141c2838586d8398ab8f7a644f3a250f000000000000000000000000000000000000000a151d2f39464b5660676e73787b7e7f807f7e7d7a77736e686259504c40382f1f180d00000000000000000000000000000000000000000d1d2b39464b5a626c74797c7f8081807f7c78736d655d514c40342b1d12040000000000000000000000000000000e1e2c37444b57616970767b7d7f8080807e7b77726c645c504c40332a1c1103000000000000000012283d52677d929f9f9f9c87715c3a2a1704000000000000000f243a4f64798fa4b5b5a9947f69543f2a1400000000000000000000000000001325365a6f849aafb5b49e89745847331f0a0000000000000000000000000000000000000c2136495b73889eb3b5c5b39e8875614b392816030000000000000000000000000000000000000000000000152b40556a8095a7b9b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ab96816b56412c1601000000000000000000081d31445571869bb1b09b85705b51677c91a6ae98836e59483b5a70859aafaa957f6a55576d8297acb09a85705c4a36210c00000000000000000000000000000000000010263b50657b90a5b5b5a6917c67513c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114293e54697e93a4937e68533e29130000000000000000000000000000000000000b1a2731404c57616a757c83888d90939495959492908c88837e776e665e504c40342a1d120400000000000000000000000000000000000c1c2b3b4857616c7881888e929495969594918d88827a70665e4d483b2f221305000000000000000000000000000e1e2c3c4955606a767e858a90929496969593908c8781796f665e4c473a2e2112040000000000000010253a50657a8fa5b5b49e89745847331f0a000000000000000c22374c61778ca8bac1ac97816c57422c170200000000000000000000000000172d42576c8297acc1b9a88c76614c37210c0000000000000000000000000000000000000e23394e63798ea6b8cbcbb8a6947f695745321e0a00000000000000000000000000000000000000000000000d22374c6277899eb3bdced7c7bab4a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a899836e59442e19040000000000000000000b20354b60758a9fb4ad98826d584b6074889db29f8b78624d485973899eb3a6917c66514f647a8fa4b4a28e79644e3a29170400000000000000000000000000000000000e23384e63788dabbcbea9947e69543f2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c6176868d8d816c57422d1702000000000000000000000000000000000b1b2938454b5e66757f8891989ea6a6a8aaaaaaa9a8a5a79e98938b847b70655e4c473b2f22150700000000000000000000000000000008182a3a48596275818b979ea7a7a9abababa9a6a69e978f857c6f62594c403023130300000000000000000000000b1b2b3c495a62737f89939b9faaa8a9ababaaa8a5a59d968e847b6e61584b3f2f2212020000000000000d23384d62788daabbb9a88c76614c37210c000000000000000b1f34475974899fb4c4ae99846f59442f1a0000000000000000000000000000152a3f556a7f94aabfc6a48e79644f39240f00000000000000000000000000000000000013253653697e93a8c4cdc9c5b39e8875604b38281603000000000000000000000000000000000000000000000b20344859677d919fb1c1cdbaa99f9392929292929292929292929292929292929292929292929286715c47311c070000000000000000000e23394e63788ea9baaa957f6a5544556a7f95a9aa95806b564d62778ca7b8a88d78634d4a5c71869cb1ac97826d5846331f0800000000000000000000000000000000000b21364b60768a9fb5c1ac96816c57412c17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586173787878624d37220d000000000000000000000000000000000b1b29394656606c7c88949ea6adb3b8c5bcb8b7b6b7b8c5b8b3aeaa9f9990857b6e62594c403325160800000000000000000000000000001325364759627886979faab3b8bab4b1afaeb0b3b8b3aca29b908477665e4d413021110000000000000000000003172939485a627885959ea7b0b4b4afa9a7a6a8aaaeb4b2aca29a908376655d4c402f20100000000000000b20354b60758a9fb4c6a48e79644f39240f0000000000000004182a3b5c72879cb1c6b19c87715c3a2a17040000000000000000000000000012283d52677d92a7bcbba6917c66513c27110000000000000000000000000000000000071c3043546e8398aec6b9b4b9b8a6947f695645321e0a0000000000000000000000000000000000000000000005182b3b4d5f6c8197a3b5c6b49f8a7e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d67523d27120000000000000000000012273c52677c91a7c7a7927c6752374c61778a9fb39e88756051667b90a6b49f8975604b3e53697e93a9b49f8a76614c3625130000000000000000000000000000000000091e32455673889db3c3ae99846e59442f19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a475560636362594834200b000000000000000000000000000000031628394657617481919da6b3b8c3b6b2aba6a3a1a1a1a3a6a9afb4bab4aea39b908377665e504334261608000000000000000000000000071c3043546177879ca4b4bbb7b3a99f9c99999b9ea6acb4b4b0a29a897c675f4d3f2f1e0e0000000000000000000a1e3346576278889ba3b3b9b1a99f999492919294999fa8b3b4afa199887b665e4c3e2d1b0a0000000000081d31445573889db2bba6917c66513c271100000000000000001a2f445a6f8499afc4b49e89745847331f0a0000000000000000000000000010253a4f657a8fa4c8bea9947e69543f291400000000000000000000000000000000000b20354a6074889eb3b9a89ea8b9b39d8875604b38281603000000000000000000000000000000000000000000000d1d30414b6074859ba8b9baa997816c6868686868686868686868686868686868686868686868675f4d39251000000000000000000000162b40556b8095aac5a48f79644f3a47596d8298ada7927d68546a7f94a9b09b86715443364c61768a9fb4a8947e695443301c0700000000000000000000000000000000021628385b70869bb0c5b19c86715c3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2937444b4d4e4d483b2b19050000000000000000000000000000000e1e324657617584979fb2b7c1b4b0a59d96918e8c8b8c8d9094999fa9b1b6b5b0a098897c6a6151443426160600000000000000000000011527374a60728499a5b5c0b4a69d938a86848486888f969fa9b4b4a79e8d7d675d4c3c2c19060000000000000006192c3c4c6176869ca6b4bbb49f978a847f7d7c7d7f848a939da6b3b3a69d8b7c665c4a3928160300000000011527375b70859ab0bea9937e69543e29140000000000000002172d42576c8297acc1b9a88c76614c37210c000000000000000000000000000d22384d62778daabbc1ab96816c56412c1701000000000000000000000000000000000e24394e63798ea7b8b49e899ea7b8a6947e695645321e0a0000000000000000000000000000000000000000000000121d32455663788a9eb4bdb19f917d675a535353535353535353535353535353535353535353524d41301e0a00000000000000000003162939596e8399aeb8a78c76614c373b4f647a8fa3b09b86715c6d8398adad97826d58363346586d8298adb29c8773604a35200e0000000000000000000000000000000000192e43596e8398aec3b39e89745847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c19263135383837342b1d0d0000000000000000000000000000000e1e32424b6175849aa2b1bdbab4a39b9087817c79777677787b7f848a939ca4b3b8b2a79e8d7f6c63514434241403000000000000000000081d314455687d92a1b3c1b4a29a887e76716f6e71737a818a9aa2b1b8ab9f8c7b655b49352112000000000000000c2035495a6b8096a4b6bbaa9f9281776f6a6766686a6f757e8899a1b1b7a99f8b7a645745321e0d0000000000182e43586d8398adc1ab96816c56412c170100000000000000152a3f546a7f94a9bfc6a48e79644f39240f000000000000000000000000000b20354b60758a9fb4c3ae99846e59442f19000000000000000000000000000000000013253654697e93a9c5ac9781899eb3b39d8875604b382816020000000000000000000000000000000000000000000002152838495a677d919fb1bdb39e89786356453d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d39302313010000000000000000000a1e32465772879db2b39e8873584733374b5c71869bb0a38f7a6471869cb1a9947e69543f293a50657a8fa4b6a5907b66503c2c190600000000000000000000000000000001162b41566b8096abc0b9a88c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2023232220190d00000000000000000000000000000006192b3c4f606e8298a2b4c0b9a99f93857b736c676362616263666a6f767e86929ea7b4b8ab9f94816c6351433221110000000000000000000b20354b6074879db2bfb5a39a84776861585a595b5c646c7884979fb1bbaa9e8a79634d402f1d090000000000000d23384d62788b9fb4c2b49f8c7d6c625954525153555660687583979fb1baa99d8775604b3b2a180500000001162b40566b8095abc0ae99836e59442e19000000000000000012273d52677c92a7bcbba6917c66513c271100000000000000000000000000081c30435472879db2c6b19b86715c3a291704000000000000000000000000000000071c3043546e8399aec8a8937e8197acb7a6937e695645321e0a00000000000000000000000000000000000000000000000a1a2c3c4d5f6c8197a3b5b9a89b8574604b4030282828282828282828282828282828282827251e1305000000000000000000000c21364b61768b9fb5b09b85705b3a292e3e52687d92a7ad98836d758a9fb4a5907b65503b26374b5d72879cb1ae99846f5a4935200a0000000000000000000000000000000014293e53697e93a8bec6a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e0e0d0b05000000000000000000000000000000000b2035485a697e93a0b2c0b9a89e8b7e72666054514e4c4c4c4e5154576168737d899aa2b1bcb49f96816c614f402f1c0c000000000000000316283952677c91a5b6bbaa9b857561594c463a443e4b4f5a63738197a0b2b9a899846f5e4c382411000000000005182b3b566b8196a9bab6a5947f6a5f4c483b3d3c3d38454b5761728197a3b5b6a595806b5948341f0b0000000013283e53687d93a8bdb09b86715b39281603000000000000000f253a4f647a8fa4c7bea9937e69543e291400000000000000000000000000011426365a70859aafc5b39e89745846331f0a0000000000000000000000000000000b20354a6074899eb3bbaa8f7a7b8fa3b5b39d8875604b3828160200000000000000000000000000000000000000000000000e1e30414b6074859ba8b9b5a396816c5f4d3c2c1a13131313131313131313131313131312100a0100000000000000000000000f243a4f647a8fabbcad98826d58432d21364b6075889eb39f8b77798eaab8a78c77624c37222e3f54697f94a9b49f8c78624d3828160300000000000000000000000000000011263b51667b90a6bbbba6917c66513c2711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4d62788a9eb4bebbaa9e8a7b6960544a433639373637383b39464b5560687784979fb1bdb09f947f695e4c3a2a1704000000000000091e3245576e8399aec3b49f8c796357473a33292f2e373c495560728298a5b7b3a1917c66513f2e1c08000000000b2034485972879db2c7b29d8774604b41342b28272828323946546074859babbcb49f8a77624c37220e0000000011263b50667b90a5bbb39e89735746321e09000000000000000d22374d62778ca9bac1ab96816c56412c170100000000000000000000000000182d42586d8297adc2b9a78b76614c36210c0000000000000000000000000000000f24394e64798ea7b8b49f8a7670859bb0b7a6937e695645321e0a000000000000000000000000000000000000000000000000131e32455663798a9eb4bdb19f917c675a49382715020000000000000000000000000000000000000000000000000000000013283e53687d93a8c9aa957f6a55402a1e3245566b8096aaaa957f7d92a7b39e89735948342022374c61778a9fb4ab96806b5645321e090000000000000000000000000000000e24394e63798ea3c5bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000030a0c0e0e0e0e0d0b0500000000000000060c0e0f0f0f0f0f0f0f0f0f0f0f0c0a0400000000000000000000000000000c21364a5b6e8398a8b9c2b49f8c7b655d4a43363025242221222326293337444b59627381979fb1bdb49f8c7b655847331f110000000000000b21364b60768a9fb4c3ad97826d5b4a392a1f17191b222c3744546176879db2bfb19c86725d4b37230e000000000d22374d62778ca5b7bea9947f695544312018121113161e2936455663798d9fb5baa9957f6a553c2c19060000000e23394e63788ea3c5b8a78b76614b36210c000000000000000b20354a60758a9fb4c3ae99836e59442e190000000000000000000000000000152b40556a8095aabfc5a38e79634e39240e00000000000000000000000000000114263654697e93a9c5b19c8671677c91a4b6b29d8875604b38281502000000000000000000000000000000000000000000000002162838495b677d929fb1bdb39e8978625645311d1200000000000000000000000000000000000000000000000000000002172c41576c8196acbca7927c67523d271628384d62788b9fb29d877f94aaaf9a85705a3b2b181f3447596e8398aeb39e8975604b3621100000000000000000000000000000000c21364b61768ba7b8c1ab96816c56412c1701000000000000000000000000000000000000000000000000000000000000000000000b171e21242424242220180d00000000000e1921232424242424242424242424211f170c000000000000000000000000031629394e63798c9fb5c6b5a395806a5d4b3f30251c130e0d0c0d0e11171e26313b4855606d8197a2b3bbaa9d8876614c3f2e1c08000000000010263b50657b90a9bab6a58e79644f3d2d1b0c0400070e1926364657677c91a5b6b6a48f7a65503a25100000000010253a50657a8fa5c3c8a48e79644f37271505000000020b1827384a5b6e8399aec7b29c87725a4935200c0000000c21364b61768ba7b8c5a38e78634e39230e00000000000000071c30435472879cb2c6b19b86715c392917030000000000000000000000000013283d52687d92a7bdbba6917b66513c26110000000000000000000000000000081c3043546e8499aec1ac97826c6073879cb2b7a6937e695645321d0a0000000000000000000000000000000000000000000000000a1a2c3d4d5f6d8197a4b5b9a79b8574604b40301e0e000000000000000000000000000000000000000000000000000005182b3b5a70859aafc5a48f79644f3a240f2035485a6e8399aea59b869bb1ac96816c57412c17182a3a50657b90a5b6a7927d68523e2e1b0800000000000000000000000000000a1e33465773899eb3c3ae99836e59442e19000000000000000000000000000000000000000000000000000000000000000000000b1b2933363939393937342b1d0d0000000e1e2c3538393939393939393939393937332a1c0c00000000000000000000000a1e3246576d8297abbcc3b19b8674604b3f2e1c1308000000000000000309141d2b37444b6073849aa6b8b7a698826d5d4b3723120000000000152a3f556a7f94aab3b29c87725c4a361f0f0000000000091829394b6073879cb2c2ab96816c563726140100000011273c51667c91a6bbbbaa8b76614b36210c0000000000000a1a2d3d51667b91aabbb6a58d78624d38230d000000091e32465773899eb3bba5907b66503b261100000000000000001325365a6f859aafc4b39e89735746331e0a0000000000000000000000000010253b50657a90a5c9bea9937e69543e291400000000000000000000000000000b20354b6074899eb3c4a7927d6754687d92a5b7b29d8875604b382815020000000000000000000000000000000000000000000000000e1f30414b6074869ca8b9b5a396816c5e4c3c2b1909000000000000000000000000000000000000000000000000000b2034485973889eb3b8a78b76614c36210c192b3c50657b90a4b5a39ba3b5a8937d68533e28130c20354a6073879db2b09b86715c4b37220c0000000000000000000000000000031729395c71869bb1c6b19b86715c39291703000000000000000000000000000000000000000000000000000000000000000003172939464c4e4e4e4e4c483b2b18050006192c3c494d4e4e4e4e4e4e4e4e4e4e4e4c473a2a1704000000000000000000000c21364b6176899eb4c9b6a5907b6655443121110000000000000000000000010d19273144556177889db3c0b2a08f7b6550402f1d0900000000162c41566b808e969da395806a553e2d1b010000000000000b1c3043546a8095aabfb19c86715544311d0800000011273c51667c91a6bbb49f8a755746331e0a000000000000000f21364c61768a9fb4c3a7927c67523d2712000000031628395b71869bb0bda8937d68533e28130000000000000000182d42576d8297acc2b8a78b76614b36210c000000000000000000000000000d23384d62788dabbcc0ab96816b56412c1601000000000000000000000000000f24394f64798ea7b8b7a68d78624d6074879db2b7a6937e695645321d0a00000000000000000000000000000000000000000000000000131e32455663798a9eb4bdb09f917c665a48372715020000000000000000000000000000000000000000000000000d22374c62778ca7b8b39e88735846331f0a0e23384c5d72869cb1b5b1b5c1a48f7a654f3a2510071c3043546a7f94aab5a38f7a644f3b2a18040000000000000000000000000000192f44596e8499aec3b39e89745746331e0a00000000000000000000000000000000000000000000000000000000000000000a1e334657616363636362594834200b000c2135495b636464646464646464646464615847331f0a0000000000000000000012273c51677c91a8b9c7b29c8773604a3727150300000000000000000000000000091527374759667c91a2b4beb09b85705e4c38240f0000000014293d51626b7981888b8576614c37211000000000000000011426364f657a8fa4c6b49f8a75604b35200b00000010253b50657a90a5c8bbaa8b76614b36210c000000000000000a1e33465771869cb1bfaa957f6a55402a1500000000192e44596e8399aec0ab95806b56402b160100000000000000152a40556a7f95aabfc5a38e79634e39240e000000000000000000000000000b20364b60758a9fb4c3ae99836e59442e19000000000000000000000000000114263754697e94a9c5b29d88735a4956697e93a6b8b29d8775604b3827150200000000000000000000000000000000000000000000000002162838495b677d929fb1bdb39e8978625544311d1200000000000000000000000000000000000000000000000010263b50657b90a5c5b09b85705b3a291704091c2f3f53697e93a8b9c6c9b7a58b76614c36210c001325364d62778b9fb4ad98826d5947341f090000000000000000000000000001172c41566c8196abc1b9a78b76614c36210c00000000000000000000000000000000000000000000000000000000000000000c21364c61767979797977624c37220d000e23384d6379797979797979797979797976614c37210c00000000000000000003172939586d8297adc6c5a9947e69544330190900000000000000000000000000000009192a3b4d5e6f849aafc0b4a3907c66513d2c1a060000000e213444515b636c737671615847331f0a00000000000000000b21364b60768ba8b9bbaa8d77624d38220d0000000f24394e64798eaabbc8a28d78624d38230d00000000000000031729395a6f859aafc1ac97816c57422c1702000001172c41566c8196abc1ad98836d58432e18000000000000000012283d52677d92a7bcbba6907b66513b261106060606060606060606060606081d31445573889db2c6b09b86715b39291603000000000000000000000000081d3144556f8499aec3ad98836e583c4b6075889eb3b7a6937e685645311d0a000000000000000000000000000000000000000000000000000a1a2c3d4d5f6d8297a4b5b9a79b8574604b402f1e0e000000000000000000000000000000000000000000000014293f54697e94a9bead98826d58432d1800001121364b6176899eb4c9c7b29d88725846331f0a0008203448596e8399aeb49f8a77614c372614010000000000000000000000000014293f54697e94a9bec5a38e79634e39240e000000000000000000000000000000000000000000000000000000000000000012273c51677c8e8e8e8e816c57412c17001a2f44596f838e8e8e8e8e8e8e8e8e8e8e7f6a55402a150000000000000000000a1e33465772879cb2c7b8a78d78634d36251300000000000000000000000000000000000c1d30404f647a8fa2b4c1af9a846f5b4935210c000000051626343d4a4e565761574c473a2a17040000000000000000091e32455774899eb4c8a38e79634e39240e0000000c21364b61768a9fb4baa48f7a654f3a25110000000000000000192e43596e8398aec2ad97826d58422d180300000014293f54697e94a9beb09a85705b372715020000000000000010253a50657a8fa5c8bea8937e69533e291b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1527375b70859ab0c5b39e88735746321e0a0000000000000000000000000b20354b6074899eb3c6a8937e69533e45576a7f94a7b9b29d8774604b38271502000000000000000000000000000000000000000000000000000f1f30414b6075869ca8b9b4a396806b5e4c3c2b190900000000000000000000000000000000000000000001142637586d8297adbfaa957f6a55402a1500000a1e3346576c8197acc0c4ae99846f593a2917040005182b3b51667b90a6b7a9947f6a5544311d080000000000000000000000000011273c51667c91a6bbbba6917b66513c2611000000000000000000000000000000000000000000000000000000000000000012273c51677c91a3a396816c57412c1700172c41576c8196a3a3a3a3a3a3a3a3a397826d57422d180000000000000000000c21364c61768b9fb5c8b39e88735a493518080000000000000000000000000000000000001222374b5c70859ab0c6b59f8c78634e38230f0000000008161f2d363939464b4639332a1c0c000000000000000000081d31445573889eb3c8a48e79644f39240f000000091e32465771869cb1bfaa95806a553f2f190900000000000003172939596f8499aec1ac97816c57422c170200000011273c51667c91a6bbb29d88735544311d08000000000000000d22384d62778daabbc0ab96806b564131313131313131313131313131313131313143586d8398adc2b8a78b76614b36210c0000000000000000000000000f24394f64798ea7b9b9a88e79644e39394c6176899eb3b7a5937e685645311d090000000000000000000000000000000000000000000000000001131e32455663798a9eb4beb09e917c665a48372715010000000000000000000000000000000000000000081d31445571869bb0b4a7927c67523d27120000031729394e63798ea2b3c2ab96806b56412b160000000d20354b6074879db2b29d8774604b35200b000000000000000000000000000f24394f64798ea4c6bea8937e69533e2914000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c170013283d53687d929c9c9c9c9c9da6b7af9a856f5a3626140100000000000000000f243a4f64798fabbcc4ae99846f593c2c1900000000000000000000000000000000000000081b2e3e52677d92a8b9bcab95806b563d2c1a0600000000010f1a212328323632281f170c000000000000000000050f20354b60758a9fb4bbaa8d78624d38230d00000003162839566c8196abc0b09b86715d4b3726150a0000000000091e33465771869bb0c9aa95806b55402b16000000000f24394f64798ea4c6b49f8a75604b36200b000000000000000b20354b60758a9fb4c3ae98836e594646464646464646464646464646464646464646556b8095aac0c5a38e78634e39230e00000000000000000000000115273754697f94a9c5b49e8975604b353346586b8095a9bab29d8774604b372715020000000000000000000000000000000000000000000000000003162838495b677d92a0b1bcb39e8978625544311d1200000000000000000000000000000000000000000b20354b6075899f9f9f9e8e79644e39240f0000000b2135495b6f849aa5a0a4927d67523d2812000000081d3144556a80959f9f9f917c66513c2711000000000000000000000000000c21374c61778ca8b9c0ab96816b56412c16010000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c17000b20364b6073818787878787879db2b29c87725443301c08000000000000000012273c51677c91a6c9c0ab95806b56402b1600000000000000000000000000000000000000001021364b6176899eb4c9b19c87725b4935210c000000000000070c0e161e211e160b0400000000050b0d0e101219202d3d4f647a8fabbcb49f8a76604b36210b000000000f24394e64798ea2b4b5a3907b65554431271a110e0d0d0f1928384c61768a9fb4bcab917c67523c2712000000000c22374c61778ca8babcab8d78624d38230d00000000000000081d31445572889db2c5b09b86705b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b687d93a8bdbba6907b66513b26110000000000000000000000081d3144556f8499afc4af9a846f554431293a4c61778a9fb4b7a5937e685544311d0900000000000000000000000000000000000000000000000000000a1a2c3d4d5f6d8297a4b6b8a79b8573604b402f1d0d000000000000000000000000000000000000000e23384d63798b8a8a8a89826d5c4a36210d000000061a2c3d4e6379878b8b8b8676614c37210c000000011426374c617683898a8a8a836f59442f1a000000000000000000000000000a1f33475874899eb4c3ae99836e59442e19000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c1700081d314455606c7272727272788dabb49f8a75604b35200b000000000000000014293e54697e93a9bebea9947f69543f2a140000000000000000000000000000000000000000091e3246576e8399aec3b6a48d78634e38230e00000000000000000003090c090300000000000d1920222425272b353d4a5c6c8196acc5b09b85705645321e09000000000d21364a5c70859aaabbb19b8573604b45382f26242222242b374556687d92a9bab59f8b78624d38220d000000000a1f34475974899fb4c9a58f7a65503a251000000000000000011426375a70859aafc5b39e887370707070707070707070707070707070707070707070707b90a5bbbda8937e68533e291300000000000000000000000b20354b6075899eb4c8aa957f6a5537261f3447596c8196aabbb29d8774604b3727150200000000000000000000000000000000000000000000000000000f1f30414b6075869ca8bab4a396806b5e4c3b2b19090000000000000000000000000000000000000c2135495b6374747474746d64523e2d1a07000000000f21364a5b637275767572615847331f0a00000000091f334658616f747474746f6554412c180000000000000000000000000004172a3a5c71879cb1c6b09b86715b392916030000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c170002152737444b575c5d5d5d60758a9fb4a98c77624d37220d0000000000000000152a3f546a7f94a9bfbda8927d68533d281300000000000000000000000000000000000000000316283953687e93a8c7c2a8937e68533e29130000000000000000000000000000000000000d1d2b3437393a3d3c484d5c647a8b9fb4b8a7947e69543828160200000000071a2d3d4e647a8c9fb4b5a397816c60564b3f3c393738393c49556075879db2bdaf9a846f5a4834200b0000000004182a3a5c72879cb1bda7927d68523d28130000000000000000182d43586d8298adc2b8a69b858686868686868686868686868686868686868686868686869cb1c6c0ab96806b56412b1601000000000000000000000f243a4f647a8fa8b9bbaa907a65503b25182a3a4d62788b9fb4b7a5937d685544311d09000000000000000000000000000000000000000000000000000001131e32455763798a9fb4beb59f8d7c66594837261401000000000000000000000000000000000006192c3c494d5f5f5f5f5f58524535200f0000000000071a2d3d4a4e56606060564c473a2a1704000000000417293a464c595f5f5f5f59544737241100000000000000000000000000001a2f445a6f8499afc4b39e89735746321e0a0000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c170000091927313642474747455673889db2a48f7a644f3a250f0000000000000000152b40556a8095aabfbca6917c67513c27120000000000000000000000000000000000000000000e23394e63788ea9bac2ad97826d58362614010000000000000000000000000000000005192b3b484d4e5052555a626b7a889daabbb39e8976614c37210c0000000000000f21364a5c6b8095a0b0b19f968174655d56514e4d4d4f535a62738399a5b7b19f907b65503c2b190500000000001a2f445a6f8499afbfaa957f6a55402a150000000000000000152b40556a8095aabfc4b4a39b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ca4b5c9c3ae98836e59432e190000000000000000000002152737546a7f94a9c6b49f8a76604b36210c2034485a6d8297abbcb29d8774604b37271501000000000000000000000000000000000000000000000000000003162839495b687d92a0b2bcab9e8977625544311d110000000000000000000000000000000000000e1e2c35384a4a4a4a49423f352717010000000000000f1f2d3638454b4b4b4538332a1c0c0000000000000b1b293336444a4a4a4a4441372919070000000000000000000000000002172c42576c8197acc1b8a78b76614b36210c0000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c1700000009151d202c323227385b70859bb0a7927c67523d27120000000000000000152a40556a7f95aabfbba6917c66513c27110000000000000000000000000000000000000000000b20354b6075899fb4c6b19c87715443301c08000000000000000000000000000000000b20344859626365676b7078808b9da6b8b59f937e685847331f0a000000000000071a2d3e4a607281969eb2b09f96867b716b6663626264686e788499a1b3b1a297816d5d4b371d0d000000000002172d42576c8297acc1ac97826d57422d18000000000000000013283d53687d92a8bdd1c1b4b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b1b5c2cdc5b09b86705b38281603000000000000000000081d3144556f8499afc4b09b86705745321e09192b3c4d63788c9fb4b7a5927d685544311d090000000000000000000000000000000000000000000000000000000a1b2c3d4e606d8298a4b6b8a79a8473604b402f1d0d0000000000000000000000000000000000000e19212335353535342d2b23170900000000000000010f1a21283236363632281f170c00000000000000000b171f212f343535352f2c24190b000000000000000000000000000000152a3f546a7f94a9bfc5a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c170000000002080b171d1d2e43586d8398ada9947f6a543f2a15000000000000000014293f54697e94a9bebca7917c67523c2712000000000000000000000000000000000000000000081d31445571869bb0c6b49f8a74604b35200b000000000000000000000000000000000d22374d6278797a7c80858c969faab5ab9f95816c604e3a2a1704000000000000000f1c304354607381919da6b2a39b9086807c797777797d838b9aa2b3b09f978474604b3f2e1c00000000000000152a3f556a7f94aabfaf9a846f5a362513000000000000000010253b50657a90a5c9cfbeb2aea0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0abb0bcc8b39e88735645321e090000000000000000000b20364b6075899eb4c0ab96816b56392816030d2135495b6e8398adbfb29d8774604b372715010000000000000000000000000000000000000000000000000000000f1f31414b6175869ca9bab4a295806b5e4c3b2b1909000000000000000000000000000000000000060c0e1f1f1f1f1f1816100600000000000000000000070a151d2021201d150a0400000000000000000000040a0c1a1f1f1f1f1a1811070000000000000000000000000000000012273c52677c91a7bcbba6907b66513b26110000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000207162b40566b8095abac97826c57422d17020000000000000013293e53687e93a8bdbda8927d68533d281300000000000000000000000000000000000000000001142637596e8399aec3bbaa8d77624d38220d00000000000000000000000000000004192e43596e838e8f92959a9fabb4b0a39b8d8072604b42311c0c0000000000000000001325364455606c7c88949da5b1a49c96918e8c8d8e93999faab4a39b9081746056453121110000000000000012283d52677d92a7bcb29c87725443301c07000000000000000e23384d63788dabbcc6b2a0988b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b969eb0c4b8a68b76604b36210b0000000000000000000f253a4f647a8fa8b9c2a6917c66513c27110006192c3c4e64798ea1b3b6a5927d685544311d0900000000000000000000000000000000000000000000000000000001131e32465763798a9fb4beb59f8d7b6559483726140100000000000000000000000000000000000000000a0a0a0a0a0301000000000000000000000000000002090b0b0b0902000000000000000000000000000000040a0a0a0a04030000000000000000000000000000000000000f253a4f647a8fa4c7bea8937e69533e29140000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000013283e53687d93a8af99846f5a442f1a000000000000000012273c51677c91a6bcbfa9947f6a543f2a1500000000000000000000000000000000000000000000172c41576c8196acc1c8a48f7a654f3a251000000000000000000000000000000001162c41566b8196a5a7aab0b5b5a39b8f857b6b6054433024130000000000000000000008182737444b5e66757f87909da5b1aba6a3a2a2a4a8aeb4aa9f94857b6c605645382715030000000000000010253a4f657a8fa4c8b49f8a75604a35200b000000000000000b20364b60758a9fb4c3ae98837576767676767676767676767676767676767676767676768096abc0c4a38d78634e38230e000000000000000002152737556a7f94aac6b6a48c77614c37220c00000e21364a5c6f8499aec0b29c8774604b37261401000000000000000000000000000000000000000000000000000000031628394a5b687e92a0b2bcab9e8877625544311d11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9bac0ab96806b56412b160100000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000011263b50667b90a5b19c87725c3b2a1805000000000000000f24394f64798ea4c4c1ac96816c57412c1700000000000000000000000000000000000000000000152a40556a7f95aabfbba6917b66513c26110000000000000000000000000000000014293e54697e93a8aaaeb3b7b09b867a70655d4b4336291b0b000000000000000000000009192731404d566069727b889db2c9bcb4b3b1b3b5bcb49f8a7e71655d4b45392a1d0d00000000000000000d22384d62778daabbbaa98c77624c37220d00000000000000091d31455673889db2c5b09b857061616161616161616161616161616161616161616161687e93a8bdbba5907b66503b26110000000000000000081d3144556f849aafc4b19c87725947341f0b0000071a2d3d4f647a8fa2b4b6a5927d685544311d09000000000000000000000000000000000000000000000000000000000b1b2d3d4e606d8298a4b6b8a69a8473604b3f2f1d0d00000000000000000000000000000000000000000000000000000000000000000000000000050b0d20202020200f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c3ae98836e59432e190000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000e23384e63788dabb49f89745947341f0b000000000000000c21374c61778ca6b7c4ae99846f593a2a1804000000000000000000000000000000000000000000142a3f54697f94a9bebca7917c67523c27120000000000000000000000000000000011273c51667c919395999da6aca39b877f7669604b4639291a0a000000000000000000000009151d324350616a7c879da5b5b1ab9f9d9c9e9fabadaa9f94857b6d6057473b2a1a0a000000000000000b20354b60758a9fb4c7a48f79644f3a240f00000000000000021527385b70859bb0c5b29d8873564b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b51667b90a6bbbda8937d68533e281300000000000000000b20364b6075899fb4c2ac97826d573b2a18040000000f22374b5c70859aafc1b29c8773604b37261401000000000000000000000000000000000000000000000000000000000f1f31424b6175869ca9bab4a295806a5d4c3b2a180800000000000000000000000000000000000000000000000000000000000000000000000d192022353535353524221b100200000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c5b09b86705b3928160300000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000b21364b60768a9fb5a98c77624c37220d000000000000000a1f33475873889db3c8b29d88735847331f0a00000000000000000000000000000000000000000014293e53697e93a8bebda8927d68533d2813000000000000000000000000000000000c21364c61767c7d7f83888e979fa59d95897e6e6157463828160200000000000000000000071b2d3e4f616a7f8d9da5b0a39b918b8887898b90989faba39b90827562594738281603000000000000081d31445572889db2bca7917c67523c27120000000000000000182e43586d8398adc2b59f8a75604b363636363636363636363636363636363636394e63788ea3c5c0ab95806b56402b16010000000000000010253a4f657a8fa8bac4a8927d68533d281300000000081b2e3e50657b90a3b5b6a5927d675544311d090000000000000000000000000000000000000000000000000000000001131e32465763798a9fb4beb49f8d7b655948362614010000000000000000000000000000000000000000000000000000000000000000000d1d2b344a4a4a4a4a4a3a372e201000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafc4b39e88735745321e0900000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000091e32455673889db3a48f79644f3a240f0000000000000004172a3a596e8399aec3b7a68c77614c37220c00000000000000000000000000000000000000000014293f54697e94a9bebda8927d68533d2813000000000000000000000000000000000a1f3346586166686a6e7379828a9ba3a79e938375615645321e11000000000000000000000d22364a5c697f949fabb09e96857c76737273757b828c9ca4b0a0988577625645321e10000000000000011426375b70859ab0bea9947f69543f2a140000000000000001162b40566b8095abc0bcab8d78634d382321212121212121212121212121212121364b61768ba7b8c3ad98836e58432e190000000000000002152838556a7f95aac6b8a68d78634e38230e00000000001023384c5e70859bb0c2b29c8773604b3726140100000000000000000000000000000000000000000000000000000000031628394a5b687e93a0b2bcab9d8877625443301c11000000000000000000000000000000000000000000000000000000000000000005192b3c485e60606060604f4b3e2e1b0700000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2b8a68b76604b36210b00000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000021628385b70869bb0a7917c67523c27120000000000000000152a3f546a7f94a9c3c4a6917c6751372715010000000000000000000000000000000000000000162b40556b8095aac0bca7927c67523d2712000000000000000000000000000000000417293a464c515355595c646d788599a1b3a1998474604b3f2e1c08000000000000000005192b3c4f647a8c9fb4b19f9680736761575c5660666d7a869ba3b2a39b8575604b3e2e1b07000000000000182d43586d8298adc1ac96816c57412c17020000000000000013283e53687d93a8bdc9a5907a65503b25100c0c0c0c0c0c0c0c0c0c0c0c0c0c1e32465773899eb3c5b09b85705b38281502000000000000091d3245566f859aafc4b39e88735b4935210c0000000000091c2f4051667c91a4b6b6a4927d675544311d0800000000000000000000000000000000000000000000000000000000000b1b2d3d4e606d8298a4b6b8a69a8472604b3f2e1d0c000000000000000000000000000000000000000000000000000000000000000b2034485a707575757575645c4b37220d00000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfc5a38e78634e39230e00000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000192e43586e8398ada9947f69543f2a1400000000000000000f24394f64798ea5b7c1ac97826c5544311d080000000000000000000000000000000000000002172c42576c8197acc1bba6907b66513b261100000000000000000002080b0e1214100e0c1c2933363c3e403e4a4e5b63748399a4b3a297816c5d4b37230f00000000000000000b2035485a6f8499aabaa897826d60544b4639454b515c6476849ba7b5a397826d5c4b37220e000000000000162b40556b8095aab4ae99846f59442f1a040000000000000011263b50667b90a5bbbda8927d68533d281300000000000000000000000000031629395b71869bb0c6b39d88735645321d090000000000000b20364b60758a9fb4c3ae99836e593d2c1a060000000000001120354a6073869cb1c3b19c8673604b3626140100000000000000000000000000000000000000000000000000000000000f1f31424b6175869ca9bab4a2957f6a5d4b3b2a18080000000000000000000000000000000000000000000000000000000000000d22384d62788a8a8a8a8a7a644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcbba5907b66503b261100000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000001162b41566b8096abac97816c57422c1702000000000000000d22364a5c72879db2c7b39e8874604b35200f0000000000000000000000000000000000000005182a3b596e8398aec3c4a38e79644e39240f000000000000000009151d2024272926231c11171f2127282a2d363c49566175869cb1b59f8d7b65503d2c1a06000000000000000d22384d62788da1b3b49f8a76614c4336332932363e4a586177899eb3b59f8d7a644f3c2b1905000000000013283e53687d939f9f9f9c86715c47311c07000000000000000e23384e63788da3c4bfaa95806a55402b150000000000000000000000000000192e44596e8399aec3b59f8a75604b36200b00000000000010253a50657a8fa9bac6a9947e69543f291400000000000000071c304354677d92a5b6b6a4927d675443301c08000000000000000000000000000000000000000000000000000000000001131e324657647a8b9fb4beb49f8d7b6559473626140100000000000000000000000000000000000000000000000000000000000b20354b60758a9f9f9f917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8bda8937e68533e291300000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000013293e53687e93a8ae99846f59442f1a0000000000000000071b2d3e566c8196abc0b8a6907b66513d2d1a070000000000000000000000000000000000000b1f34475972879db2c7b7a68c76614c37210c000000000000000e19273136393c3e3b382f21150a0c1113151b222c384657667b90a3b5ab9a85705b4936210c0000000000000014293e53697e93a8bfad98826d584733261e171e212d3a4759687d92a6b8ab9a846f5a4835200b000000000010263b50657b8b8a8a8a8a88735e49331e09000000000000000b21364b60768ba6b8c2ad98826d58432d180000000000000000000000000001162c41566b8196abc0bcab8d78634d38230e000000000002162838556a7f95aac7baa88f79644f3a240f00000000000000001325364b6074879db2c2b19c8673604b362614010000000000000000000000000000000000000000000000000000000000031629394a5c687e93a0b2bcab9d8877615443301c110000000000000000000000000000000000000000000000000000000000081c30435472879db2a9947f69543f2a14000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbc0ab95806b56402b1601000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000011263b51667b90a6b19c87715c3a2a170400000000000000001023394e63798ea2b4c4af99846f5b4a3621120000000000000000000000000000000000000d22374c62778ca5b6c8b29d88735847331f0a0000000000000e1e2c37444b4e5254504c3f33251500000000070e1a29394c5e70859bb0b4a28e79634e39230e00000000000002182d42576d8297acbda8937d68533a2917080309101c2a3b4b6075889eb3b49f8b78624d38220d00000000000e23384c5d657474747474736a5945301c0700000000000000091e32455673889eb3c5af9a85705a372715010000000000000000000000000014293e54697e93a9bec9a5907b65503b26100000000000091e32455670859aafc5b49f8975604b35200b0000000000000000081d314455687e93a6b7b6a4927d675443301c080000000000000000000000000000000000000000000000000000000000000b1b2d3d4e606e8298a4b6b7a69a8472604b3f2e1c0c00000000000000000000000000000000000000000000000000000000011426365a70859aafac97816c57422c17020000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c3ad98836e58432e1900000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000e23394e63788ea3b49e89745847331f0a00000000000000000c2136495b6f849aafc0b3a18e79634e402f1c0c0000000000000000000000000000000004182a3b51667c91a6c3c3ae99846e593a2a1704000000000006192c3c495560636769655d5043331e0e00000000000b1b2f40556a7f95aac0a9947f6a543f2a15000000000000051a2f445a6f8499afbaa5907a65503b2510000000000c1d3145566c8197acbcab937e69543e29140000000000081c2f3f4c505f5f5f5f5f5e594c3c29160200000000000000031628385b70869bb0c5b29d88725544311d080000000000000000000000000011263c51667b91a6bbbda8927d68533d281300000000000b21364b60758a9fb4c4af9a856f5544311d080000000000000000011527374b6075889db3c2b19c8673604b362614010000000000000000000000000000000000000000000000000000000000000f1f31424b6175869ca9bab3a2947f6a5d4b3a2a180800000000000000000000000000000000000000000000000000000000182d43586d8298adae99846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000081d31445572889db2c5b09b86705b38281602000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000c21364b61768ba7b8a88c76614c37210c0000000000000000061a2c3d51667b90a2b4bfaf99846f5e4c3a2a19090000000000000000000000000000000b1f3447596e8398adc3c1a9937e69543e29140000000000000c2035495a6374797c7e7b6a61503c2b1906000000000011253a4f657a8fa4baae99846e59442f19000000000000051b30455a70859aafb9a48f7a644f3a250f000000000215273852677c92a7c9ad98826d58432d1800000000000011212f383b4a4a4a4a4a49453c2e1e0c000000000000000000192e43596e8398aec3b49f8a75604b35200b000000000000000000000000000f24394e64798ea3c5c0aa95806b55402b16000000000010253b50657a90a9bac8aa95806a5537271501000000000000000000091d324556697f94a7b8b6a4917c675443301c0800000000000000000000000000000000000101010101010101010101010101141e334657647a8b9fb4beb49f8c7b65584736251300000000000000000000000000000000000000000000000000000000152b40556a8095aab19c87715c3a2a1804000000000000000000000000000000000000000000000000000000000404040404040404011426375a70859aafc5b39d88735645321e09040404040404040404000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000091e32465773889eb3a48e79644f39240f0000000000000000000f24384c5e70859ab0bdb3a1907c6659473727180a0000000000000000000000000005192b3c4c61778a9fb4c9b5a38d78634d38230e0000000000000e23384d63788c8e9193907f6a5a4935200b00000000000d23384d62788da2b7b29d88735d382815020000000000051a2f445a6f8499afbba5907b66503b261100000000000e24394e63798ea3b8b19b86715c46311c00000000000003111c23262630353939353026181204000000000000000001162b41566b8096abc0bbaa8d78624d38230d000000000000000000000000000c21364c61768ba7b9c2ad98826d58432d180000000003162838556a8095aac7bbaa907b65503b261000000000000000000000021528384b6176899eb3c2b19c8673604b362513000000000000000000000000000002090b1717171717171717171717171717171729394a5c687e93a0b2bbaa9d8876615443301c1000000000000000000000000000000000000000000000000000000013283d53687d92a8b49e89745847331f0a0000000000000000000000000000000000000000000000000003090b1a1a1a1a1a1a1a1a1a1a2d43586d8298adc2b59f8a76604b36211a1a1a1a1a1a1a1a1a1a14120c030000000000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000031628395b71869bb0a6917c66513c2711000000000000000000091d2f404f657a8f9fb1bfb39d887761554436281a0e030000000000000000000005162034485a6a7f94a9bac5b19b86715b4935210c0000000000000c2035495a72879ca7a99f8b78624d3a291704000000000c21364b61768ba0b6b49f89745645321d09000000000002182d42576d8297acbda7927d685236251300000000000d22374d62778ca2b7b29d88725d48331d000000000000000312223036434b4e4e4b433630221204000000000000000014293e53697e93a8bec8a58f7a65503a2510000000000000000000000000000a1f33465874899eb3c5b09a85705b37271502000000091e32455670859ab0c5b49f8a76614b36210c00000000000000000000000a1e3246576a7f95a8b9b6a4917c675443301c080000000000000000000000000a151d202c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2d3e4e606e8298a5b6b7a6998372604a3f2e1c0c000000000000000000000000010101010101010101010101010110263b50657b90a5b9a88c77614c37220c0000000000000000000000000000000000000000000000000a161e212f2f2f2f2f2f2f2f2f2f2f40556b8095aac0bcab8d78634e382f2f2f2f2f2f2f2f2f2f2f2a2720150700000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000192e44596e8399aea9947e69543f2914000000000000000000001222374b5d6c8197a5b7b7a69a8473605445382c1e160a05000000000000040d182033434d6278899eb3c7b8a6937e68533c2c190600000000000006192c3c556b8095abbbaa95806b5846331f12020000000c21374c61768ca1b6baa98b75604b36200b00000000000014293f54697e94a9c3ac97826c5443301c09000000000c21374c61768ca1b6b39e89735e49341e00000000000000112130404c5460636360544d40302212000000000000000011263b51667b90a6bbbda7927d68523d2813000000000000000000000000000417293a5c71869bb1c6b29d88735544311d080000000b21364b60758a9fb4c6b19b86715746331e0a0000000000000000000000031629394c6176899eb4c2b19c8673604a36251300000000000000000000000a1a27313641414141414141414141414141414141414141424c6176879ca9bab3a1947f6a5d4b3a2a180800000000000000050b0d1516161616161616161616161616161623384d63788dabbca48e79644f392416160e0c06000000000000000000000000000000000000000a1a28323644444444444444444444444453687d92a8bdc9a5907b66504444444444444444444444443f3b32251503000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000001162c41566b8196abab96816c56412c1701000000000000000000081b2e3f4b6175879da9bab3a29882726056493c3228201813100f0e0f11171f2b344450616f8499a8b9c2b39e8875614b36210e00000000000000000e23394e63798c9fb5b39e8976614c40301d150a07091223394e63788ea3b8b8a78b75604b36200b0000000000000f24394f64798ea5b6b29d8773604a372715080000000e23384e63788da3b8b29d87725d48321d00000000000009192f3f4c5e6673787873675f4d402f1b0b000000000000000e24394e63798ea3c5bfaa957f6a55402a150000000000000000000000000000192f44596e8499aec3b49f8a75604b36200b00000010263b50657b90a9bac1ac96816c57392917030000000000000000000000000b1f3347586b8096a9bab5a4917c675443301c0800000000000000000002152738454b56565656565656565656565656565656565656565657647a8b9fb4bfb49f8c7b6558473625130000000000000d1820222a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c364b60758a9fb5a6917c67513c2c2c2b23211a0f010000000000000000000000000000000003162838454b59595959595959595959595959657b90a5babda8937d6859595959595959595959595959544f4332200c000000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000014293e54697e93a9ae99846e59442f190000000000000000000000101e334657647a8b9fb4bbb2a0988274635a4b4538342b28252423242629333b484d626b7f95a1b3c6b6a4947f695746321e0900000000000000000c2135495b6e8398abb8a796816c5e4c403127211a1d20304153687e93a8bdb39e89735544311d080000000000000b20354a6073879db2b6a5907b6655443125181412131d2d3e52677d92a7bcb09b85705b46301b0000000000011426374b5d667c878e8e877c675e4c392917030000000000000c21364b61768ba7b8c2ad97826d58422d180000000000000000000000000001172c41566c8196abc1bcab8d78624d38230d000003162839556b8095aac7c3a7917c67523c2712000000000000000000000000000417293a4c62778a9fb4c2b19c8673604a362513000000000000000000091d314556606c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c7e93a8b9bbaa9d8776615443301c0e000000000d1d2b3437404141414141414141414141414141414141455673889db3a9947e69544141414038352c1f0f00000000000000000000000000000000091e324556606f6f6f6f6f6f6f6f6f6f6f6f6f6f788da2b8c0ab95806f6f6f6f6f6f6f6f6f6f6f6f6f6f69614f3b2712000000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000011263c51667b91a6b19b86715c3a29170400000000000000000000031729394b5c687d929dafbbb2a09885786a60564c483b3d3a3938393b3a474c59626e80959dafbfbbaa9c8674604b392816030000000000000000061a2c3d4e63798c9fb4b09f917c665e4b4538362d3236404d5f70859bb0c5b19b86715c37271502000000000000071c304354697e94a5b6b09b8574604b43362e2927282f3b4a5c6e8399aec3ac96816c57412c170000000000081d314455657b8d9da6a69d8d7c665746331e0a0000000000000a1e32465773899eb3c4af9a856f5a362614010000000000000000000000000014293f54697e94a9bec9a5907a65503b25100000091e32465770859bb0c5b6a58c77624d37220d00000000000000000000000000000c1f3448596c8197aabbb5a4917c675443301c0800000000000000000b20364b607481818181818181818181818181818181818181818181818181899eb4c8b7a5998372604a3d2c1a06000005182b3b484c555656565656565656565656565656565656565b70869bb0ac96816c57565656554e493d2c1a060000000000000000000000000000000b21364b60758384848484848484848484848484849aafc4c7b29d8784848484848484848484848484847f69543f2a14000000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000f24394e64798ea3b39e89745846331f0a00000000000000000000000b1b2e3e4e5f6a7f949db4bab2a39b8a7f756a625956524f4e4e4f515458616a7782959eafbcbcb49f8c7a645645311b0b000000000000000000000f2136495b6c8197a4b5b49f8b7c6b60564e4a3d454b505e677d92a3b4c0ab96806b56412b1600000000000000001325364b6074879db2b5a396806b60544b3e3e3c3d3f4c59647a8c9fb4b7a5907b65503b261000000000000b20354b6074879dabb7b7ab9e8876614b36210c000000000000031629395c71869bb1c6b29d87725443301c080000000000000000000000000011273c51667c91a6bbbda7927d68523d281300000c21364b61768a9fb4c7b29d8772594834200b000000000000000000000000000005182a3b4d62788b9fb4c2b19c8673604a3625130000000000000000091d31455674899696969696969696969696969696969696969696969696969ea8b9ccc3b3a1947f695b4935210c00000b20344859626a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6e8398aeae99836e6b6b6b6b6b635b49352109000000000000000000000000000000091e3245567489999999999999999999999999999aa1b3c7cbb7a59d999999999999999999999999999985705a372614010000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000c21364c61768ba7b9a78b76614c36210c0000000000000000000000001020314150616a7f929fa9b6b5a89e94887f77716b686564636466696f767f8a98a0afbcbcb09e937e695c4b3827150000000000000000000000061a2c3d4b6075869ca8b9a99f8c80746a635b5d5660656e7c8b9fb4c1b4a28f7a654f3a25100000000000000000081d314556667c919fb0b09e958072645c56535253555d6577869cabbcb29d8774604b36200b00000000000f243a4f64798fa5b6c9c9b8a6917c66513c261100000000000000192e44596e8399aec3b49f8a75604b35200b000000000000000000000000000f24394f64798ea4c6bfaa95806a55402b15000010263b50657b90aabbc2ad98826d583b2b18050000000000000000000000000000000d2035485a6d8298abbcb5a4917c665443301c0700000000000000021527385c71869cabababababababababababababababababababababababb4b9c6c7c7bfb49f8b79634e38230e00000d22374c62777f8181818181818181818181818181818181818180859bb1b39d8880818181818079634e372715010000000000000000000000000000031628385c72879caeaeaeaeaeaeaeaeaeaeaeaeafb3bfc7c7c3b7b2aeaeaeaeaeaeaeaeaeaeaeaeae9d87725544311d080000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000a1e33465774899eb3a38e79644e39240f000000000000000000000000021323334350616a7d8b9da5b4b9b4a69d958c86807d7a7978797b7f848a949ea8b2bebab49e96806b604f3e2e1a0a0000000000000000000000000f1e32455663798a9ea7b8aa9f95887f79747273757b838d9fa9babbaa9a84705d4b37220e0000000000000000021527384d5e6c8196a1b1b09e95857a726b6967686b717b879ca4b6b4a2927d685544311d08000000000010263b50657b90abbccfcfbfa7927d68523d281300000000000001172c41566c8196abb2b2aa8c77624d37220d000000000000000000000000000c21374c61778ca8b2b2ad97826d58422d180002152838566b8095abb2b2a8937d68533e28130000000000000000000000000000000006192b3c4e63798c9fb1b2b19b8673604a35200b0000000000000000192f44596e8499aeb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a996816b56412c1600051a2f445a6f839596969696969696969696969696969696969696969ba3b5b7a69d96969696969586715544311d080000000000000000000000000000001a2f455a6f849aafb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b29f8a75604b35200b0000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000031729395c71869bb1a6917b66513c26110000000000000000000000000005152533434f5f677a87969fabb2b7b2ab9f9b96928f8e8d8e9094999fa9b4b9c0b4a99f92806b6251423220100000000000000000000000000003162838495b647b899ea6b2b4a69d948e8988888a90989fabbabbb49f8c7a644f3f2e1b080000000000000000000a1a30404b60728397a0b4b0a39b8f87817e7c7d8086909ca5b6b4a49a8473604b3727150200000000000d22374c62778c9fb5c0c2b3a18e79644e39240f0000000000000014293e54697e939d9d9d9d8f7a654f3a2510000000000000000000000000000a1f33475874899d9d9d9d9a85705a45301b00091d32455670859b9d9d9d9c8d78634d38230e00000000000000000000000000000000000e2135495b6d82969c9d9d9d917c66513c27110000000000000001172c41566c81969d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9a856f5a45301a00031628395d72889dababababababababababababababababababababb1b5c1c4b7b3ababababab9f8a75604b35200b000000000000000000000000000002182d42576d82979d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d8d77624d38220d0000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000000192f44596e8499aea9937e69543e2914000000000000000000000000000007152532414d5c6475818c99a1acb3b9b5b0aba7a4a3a3a4a6a9aeb4bac1b4b0a29a8a7d6b6251443424140200000000000000000000000000000a1a2c3d4b5c647a8899a1b0b5b2a9a89f9d9d9faaaeb5bcb5aa9f937e685c4a3621100000000000000000000000121c304354607482939fa9b4b0a49c96939192959ba3b2b6b3a29a86766154433019090000000000000b203448596c8197a2afafa499836e5c4a36220d0000000000000011263b50667c8788888888877c66513c26110000000000000000000000000004172a3a5a6f84888888888784705b45301b000b20364b60748788888888867e685a4935200c0000000000000000000000000000000000061a2c3d4b6074808788888887836e59442e19000000000000000013283d53687e87888888888888888888888888888888888888888888888888888888888888888784705b45301b00091e32455774899fb4c0c1b4b0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5b3b8c5bdb1aca5a5a5a5ab8d78624d38230d00000000000000000000000000000014293e54697f8788888888888888888888888888888888888888888888888888888888888888888888877a644f39240f0000000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000001172c41566c8196abab96816b56412c16010000000000000000000000000000071523313e4a57606b79838e979ea7acb1b4bbc8b9b8b9bbc8bbb4b0aaa39b9084786860514434261606000000000000000000000000000000000f1f2e3e4b5c647783919ba3acb1b6b4b2b2b4bbb8b3aea39b8b7e69604e3e2d1b020000000000000000000000011426364556606d7e8a969fa9b0b1aba8a7a8aab1b4b0a79e9484776158463626140000000000000005182b3b4b617584939a9a948677624c3e2d1b07000000000000000f23384c5e66727272727272665e4c38240f00000000000000000000000000000c2d4154666f7272727272706655422d1900091d3245566072727272727168604e3c2c19060000000000000000000000000000000000000f1d324556606b71727272726e6554402c17000000000000000011263a4e6068727272727272727272727272727272727272727272727272727272727272727272706655422d19000b21364b60768ba0b2c1b4a39b909090909090909090909090909090909ea7b8b19f9790909090908f7a65503a251000000000000000000000000000000012273b4f6169727272727272727272727272727272727272727272727272727272727272727272727272645c4a36220d0000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000014293f54697e94a9ae99836e59442e19000000000000000000000000000000000513202d39454b5b636e79818991969c9faaa6a7a8a8a7a6aa9f9b958e857b6f635a4e413426160800000000000000000000000000000000000110202e3e4a59616e7c858f979ca4a4a6a7a7a5a79e9890867a69604f423120100000000000000000000000000008182838454b606877818a949b9faaa6a7a7a6aa9f9a94897f736159473a29180800000000000000000d1e33465761737e84857f756259473420100000000000000000091c2f404c505d5d5d5d5d5d514c402f1d09000000000000000000000000000012253747545a5d5d5d5d5d5b55483825120002152838454b5d5d5d5d5d5c534e42311e0e0000000000000000000000000000000000000002152838454b565c5d5d5d5d59544736241100000000000000000b1e31424e535d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5b554838261200091e3245576d8298a3b5b09b857c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c899eb3ac97817b7b7b7b7b7b77624c37220d0000000000000000000000000000000c1f32424f545d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d4f4a3e2d1b070000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000011273c51667c91a6b09b86715b392916030000000000000000000000000000000002101b28323d4a4e5c646c757c81878a8e9092939392918e8a85807970665e4d493c31231608000000000000000000000000000000000000000210202d3b474c5e66707a81868c8f919292908e89837b71645c4f423224130200000000000000000000000000000a1a2832424e59626c787f858a8e919292918f8a857f766a6055473b2a1c0c00000000000000000003172939465560696f6f6a6157473b2a180200000000000000000011222f383b4848484848483c382f221200000000000000000000000000000008192937414548484848484542382a1a0800000a1a2832364748484848473e3a3124140000000000000000000000000000000000000000000a1a2832364147484848484440362818070000000000000000021324313a3d4848484848484848484848484848484848484848484848484848484848484848484542382a1a0900031628394b6075859ba6b4a3927d686666666666666666666666666670869bb0ab96806b6666666666625947341f0b000000000000000000000000000000021424323b3e48484848484848484848484848484848484848484848484848484848484848484848484839362d2010000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000000f24394f64798ea4b39e88735746321e0a0000000000000000000000000000000000000a161e2d363d4a4e5660666c7175787b7c7d7e7d7c7976706b635b504c40352c1e130500000000000000000000000000000000000000000002101d2a34404d515d646c71777a7b7d7c7b79746e665e4f4a3e32241406000000000000000000000000000000000a161e313b484d59626a7076797c7d7d7b7976706a61584b44372a1d0c00000000000000000000000b1b2937444b535a5a544b46392a1d0d0000000000000000000003111c232633333333333326241d1204000000000000000000000000000000000b19252d2f3333333333302d251a0c000000000a151d2032333333333129261f1406000000000000000000000000000000000000000000000a151d202c32333333332e2c24180a0000000000000000000006131e2628333333333333333333333333333333333333333333333333333333333333333333302d261a0c0000000a1e3245566278889da9b49f8b7a645950505050505050505050596e8398aead98836e58505050504c473b2a18050000000000000000000000000000000006141f272933333333333333333333333333333333333333333333333333333333333333333333333324221b1002000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000000c21374c61768ca8b8a78b76614b36210c00000000000000000000000000000000000000030f1a212d3638454b5157566063666768696866636056554e4a3d382f20190e000000000000000000000000000000000000000000000000000c181f30393f4b4f5759616466686765636054504c40362e20140600000000000000000000000000000000000002141d2b343b484d5457606466686866646158544c463a3126190c000000000000000000000000000b192631353e45453f3632291b0d00000000000000000000000000090f111d1d1d1d1d1d110f09000000000000000000000000000000000000000812181a1d1d1d1d1d1b19120800000000000002090b1d1d1d1d1d1c13110b0200000000000000000000000000000000000000000000000002090b161c1d1d1d1d19171107000000000000000000000000020b11131d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1b19120900000000031628384859647b8b9fb4a99d87776155443b3b3b3b3b3b3b41566b8096abb09b86705b383b3b3b37342a1d0d000000000000000000000000000000000000020c12141d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d0f0d070000000000000000000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000000a1f33475874899eb4a38e78634e39230e000000000000000000000000000000000000000000070f1a212832363c38454b4e5152535352514e4b453839362d231c110600000000000000000000000000000000000000000000000000000004121d242e373a3a474c4f515252504e4b4336382f221b10020000000000000000000000000000000000000000000d18202b343739454b4e515252514f4c463a3633291d140900000000000000000000000000000009141d20292f302a211e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3b4b5d687e929fb1a59a8473604b413026262626293e53697e93a8b39d88735645322626221f180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000004172a3a5c71869cb1a6907b66513b26110000000000000000000000000000000000000000000000070a161e2126273136393b3d3e3e3d3c3936322823211a0f090000000000000000000000000000000000000000000000000000000000000009101b22252a34373a3c3d3d3b39353026231c1107000000000000000000000000000000000000000000000000050d192022283236393c3d3d3c3a363329211f170b01000000000000000000000000000000000001080b141a1a150c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c12142020202020200e0c060000000000000000000000000000000000040d13151e20202020201c0b08010000000000000000000000030c121420202020202020202020202020202020201f1e1c1915100b080100000000000000000000000000000000000000000000000d1d2e3f4e606c8197a2b4a296816c5f4d3e2d1c1111263b51667b90a6b8a68b76604b3621110d0b05000000000000030c12142020202020200e0c060000000000000000000000000000000000000000000000000000000000000000000000030c12142020202020200f0d0700000000000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000000001a2f44596f8499aea8937e68533e29130000000000000000000000000000000000000000000000000003090b11151d202326272829282724211e160e0c070000000000000000000000000000000000000000000000000000000000000000000000080d0f181f22252628272624201c14080900000000000000000000000000000000000000000000000000000000050b0d161e21242728282624211f170c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071420272a3535353535352320190e000000000000000000000000000000071521282b33353535353531201d1409000000000000000000071420272a35353535353535353535353535353535353433312e2a25201d15090700000000000000000000000000000000000000000000102031424b6073849aa5b09f927d675c4a3a2a190e24394e63798ea3c4a38d78634e38230e0000000000000000071420272a3535353535352320190e000000000000000000000000000000000000000000000000000000000000000000071420272a35353535353524221b10020000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000002172c41576c8196acab96806b56412b16010000000000000000000000000000000000000000000000000000000002090b0e1112131413110e0b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0f111312100e0b080100000000000000000000000000000000000000000000000000000000000000000003090b0f111313110f0c0a040000000000000000000000000000000000000000000000000000000000090e1020202020201f0c0a03000000000000000000000000000000000000060f1518202020202019171107000000000000000000000000000000000000000000000000031425323b3f4a4a4a4a4a4a38352c1e0e00000000000000000000000000061525333c40484a4a4a4a4a46353126190900000000000000031425323b3f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4846433f3a353127221b1007000000000000000000000000000000000000000002131d3144556176879da8b49f8a7a64584737261421364b61768ba7b8a5907b66503b261100000000000000031425323b3f4a4a4a4a4a4a38352c1e0e00000000000000000000000000000000000000000000000000000000000000031425323b3f4a4a4a4a4a4a3a372e20100000000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000000142a3f54697f94a9ad98836e58432e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c2326353535353534211e160b000000000000000000000000000000000917232a2d35353535352f2c24190a00000000000000000000000000000000000000000000000c2032434f546060606060605e493c2c19060000000000000000000000001324334350555e60606060605c4b44372614010000000000000c2032434f54606060606060606060606060606060605f5f5e5b5854504b4437362d211a0f000000000000000000000000000000000000000001152737475863798a9eaba99d8776615544311d1e33465773899eb3a8937d68533e2813000000000000000c2032434f546060606060605e493c2c19060000000000000000000000000000000000000000000000000000000000000c2032434f546060606060604f4b3e2e1b0700000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000000012273c51677c91a6b09b86705b38281603000000000000080e10111111110c0a040000000000000000000000000000000000000000000000000000000000000000000000000000070c0e1415120b0902000000000000000000000000000000000000000000000000000001080b0e121416161614120e0b0700000000000000000000000000000000000000000000000000000000090e101515100e080000000000000000000000000000000000000000000000000000000011212f383b4a4a4a4a4a493632291b0b0000000000000000000000000000061727353e424a4a4a4a4a4440362919000000000000000000000000000000000000000000000012273b4f6169757575757575705a4935200c00000000000000000000000d1d314250626a73757575757571605544311d0800000000000012273b4f616975757575757575757575757575757575757473716e6a6560554f4a3e362d1c13080000000000000000000000000000000000000009192a3a4a5b677d8d9fb5a59a8473604b41301f29395c71869bb1ab95806b56402b160100000000000012273b4f6169757575757575705a4935200c00000000000000000000000000000000000000000000000000000000000012273b4f6169757575757575645c4b37220d00000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000000000f243a4f64798fa4b39d88735645321e090000000003111c232526262626211f170c0000000000000000000000000000000000000000000000000000000000000000000000000f1a2123292b27201d150a0000000000000000000000000000000000000000000000070b141c2024272a2b2c2b2a2723201c130b07000000000000000000000000000000000000000000000004111c23262a2a25231c110300000000000000000000000000000000000000000000000000091c2f3f4c5060606060605e4b4639291603000000000000000000000000000f23354552576060606060595447361d0d00000000000000000000000000000000000000000000142a3f54697f8a8a8a8a8a8a78634d38230e0000000000000000000005192b3b4e606a80888a8a8a8a8a8575604b35200b000000000000142a3f54697f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898886837f7a746c645c4e4a3d3025180a000000000000000000000000000000000000000c1c2d3d4d5f6b8095a1b3a296806b5f4d3d2d2e44596e8399aead98836d58432e1800000000000000142a3f54697f8a8a8a8a8a8a78634d38230e000000000000000000000000000000000000000000000000000000000000142a3f54697f8a8a8a8a8a8a7a644f3a240f00000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000000000c22374c61778ca8b8a68b76604b36210b0000000011212e373b3b3b3b3b37332a1c0c0000000000000000060b0d12141513110c0903000000000000000000000000000008131c2d36393f403c3632281a10020000000000000000000000000000000000000008131c20263035393c3f4041403f3c39353025201c130800000000000000000000000000000000000000000c181f2f383b3f3f3a372e1e170b0000000000000000000000000000000000000000000000000e23384c5d65757575757574615746321e0a00000000000000000000000001152a3e52636d75757575756e65543c2b190500000000000000000000000000000000000000000012273c51677c919f9f9f9f907a65503b2510000000000000000000000d20344859687e929d9fab9f9f8c7a645544311d0800000000000012273c51677c919f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9f9d9b98948f89827a6f635b4a4336281a0a000000000000000000000000000000000000000f1f30414a60728399a4b09e927d675b4a3a2a41566c8196abb09b85705b3827150200000000000012273c51677c919f9f9f9f907a65503b251000000000000000000000000000000000000000000000000000000000000012273c51677c919f9f9f9f917c67523c271200000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000000000b1f34475974899fb4a38d78634e38230e000000081c2e3f4b50515151514c473a2a170400000000060c0e19202327292a2826211e160b060000000000000000000000081825303d4a4e5455524b45382d2010000000000000000000000000000000000004121825303536434b4e525455565554514e4a433635302518110500000000000000000000000000000000000c1c2a34404c505555504b3f33291b0b000000000000000000000000000000000000000000000010263b50657b8a8a8a8a8a8975614b36211100000000000000000000000000132536576d818a8a8a8a8a836e5a483420090000000000000000000000000000000000000000000f243a4f64798fa4b5b5a8927d68533d28130000000000000000000d1d31414d6278899eb3b5b6a596806b5c4a372614010000000000000f243a4f64798fa4b5b5b5b5b5b5b5b5b5b5b5b5b5bcb4b4b3b0ada9a79e978e84796a6054453828190900000000000000000000000000000000000001121c3043546175869ca7b49f8a79635847363e54697e93a9b29d88735645311d090000000000000f243a4f64798fa4b5b5a8927d68533d28130000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b5b5a9947f69543f2a1400000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000000004182a3b5c72879cb1a5907b66503b26110000000e23374b5d6566666666615847331f0a0003090e1920232b35383c3e3f3e3b36322821190e00000000000000000000132536434a5b63696a6760564a3e2d1c0c0000000000000000000000000000000c181f3036434a5054606367696b6b6b6967636054504a43362f20180d00000000000000000000000000000004182a3a474c5e656a6a655d4c46392917030000000000000000000000000000000000000000000014293e54697e939f9f9fa8937e68533f2f1c080000000000000000000000071c30435470859b9f9f9f9f8b78624d3727150100000000000000000000000000000000000000000d22374c62778ca9babfaa95806a55402b15000000000000000005182a3b4d5f6f8399a8b9beb29d8775604b3e2d1909000000000000000c22374c61778ca8bacdc2b6b1a5a5a5a5a5a5a5a5a5a5a6a7a9aeb3b9b3aca1998b7f72605645372715010000000000000000000000000000000000000013253646576378899eaaa89d87766154433c51667c91a6b59f8a75604b36200b0000000000000d22374c62778ca9babfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000d22374c62778ca9bac1ac96816c57412c1702000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000000001a2f445a6f8499afa8937d68533e281300000010253b50657b7b7b7b7b76614c37210c0b161e212c35383c484d52545553504b4639352c1e140600000000000000071c304354606b797e807c74645c4a3a2a1704000000000000000000000000010f1c2a33404c5460666e74797c7f8081807f7c79746d6660544b3f342b1d1002000000000000000000000000000a1f344759616f7b7f7f7a6e615746331e0f00000000000000000000000000000000000000000002172d42576c8297acb5c6b19c86715d4b37230e00000000000000000000000b20354a6074899eb4b5bbaa95806a5544311d0800000000000000000000000000000000000000000b1f34475974899fb4c2ad98826d58432d1800000000000000000c1f344859677d92a1b3c5b2a0907b66574532201000000000000000000b1f34475974899fb4c9b6a49c8f8f8f8f8f8f8f8f8f8f919294999ea7b1b6b3aa9f958374605544311d110000000000000000000000000000000000000008182939495a657b8c9fb4a59a8372604b414e64798ea3bcab8d78634d38230e0000000000000b1f34475974899fb4c2ad98826d58432d180000000000000000000000000000000000000000000000000000000000000b1f34475974899fb4c4ae99846f59442f1a00000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000000002172d42576c8297acab95806b56402b160100001c31475c7186909090907c66513b261d202832363c494d555a6267696a686661574d493c312414070000000000011426364a6072808b949591867a645847331f0a00000000000000000000000210202d3a474c5e66737b83898e919495969594918e89837b73655d4d483b2d2012040000000000000000000000071b2d3e4c6177849094948f8275614c3e2d1a07000000000000000000000000000000000000000005182a3b5b70859ab0c5c9b6a4907b65503c2b1905000000000000000000000d23384d62788da8b9cdc8b39d8874604b35200f000000000000000000000000000000000000000005182a3b5c72879cb1c5af9a85705a372715010000000000000c1c30414c6277899eb3bfb8a798826d5e4c39281602000000000000000004182a3b5c72879cb1c7b19c867b7a7a7a7a7a7a7a7a7a7b7d7f8489929ca4b0bbb4a1998373604b3f2f1808000000000000000000000000000000000000000b1b2c3c4c5d697f94a0b2a195806b5f4d4c61768ca8b9a5907a65503b251000000000000005182a3b5c72879cb1c5af9a85705a37261401000000000000000000000000000000000000000000000000000000000005182a3b5c72879cb1c6b19c86715c3a291704000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000000000152a3f546a7f94a9ad98836d58432e180000001b30455a70859aa6a6947f6a544233313539464b535a636a72787c7e7f7d7b766e635b4e423225140200000000081c304354687e939faaaaa49c8876614c37210c000000000000000000000010202e3e4a58616f7c8690989ea7a7a9aaabaaa9a6a79e9890857b6f62594a3e2f221203000000000000000000000d22364a5c6e8399a1aaaaa098826d5c4a36210d00000000000000000000000000000000000000000b1f34485973899eb3c8d3c2ae99836e5a4835200a0000000000000000000011263c51667c91a6c6d6cbb7a6917c67513d2c1a0600000000000000000000000000000000000000001a2f455a6f849aafc4b29d88725544311d08000000000004182a3a4d5f6e8399a7b8c0b39e8977614c402f1b0a000000000000000000001a2f445a6f8499afc4b39d887365656565656565656566686a6f757d86969eaebbb3a196816c5d4c36261401000000000000000000000000000000000000000e1e2f3f4f616d8298a3b09e917d675b4a5874899eb4a8927d68533d2813000000000000001a2f455a6f849aafc4b29d87725544311d080000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4b49e89745847331f0a000000000000000012273c51677c91a6ac96816c57412c17000000000000000000000000000012273d52677c92a7b09b85705b382715020000172c42576c8197acb19c8671604c47444b50576168707880878d91939493908a837969604f43322010000000000b20354b6073889eb3bbc2b6a6947f6a543f2a15000000000000000000000e1e2e3e4b5c647683919ca4adb3b8c5bab7bcb4bcc5b8b3ada39b908477645c4c402f2110000000000000000000000f243a4f647a8fa1b3bfbeb2a08e79644e39240f00000000000000000000000000000000000000000d22374c62778ca7b8ccdfcab49f8b78624d38281502000000000000000000152a3f556a7f94aabfd4d4c4af9a846f5b4935210a0000000000000000000000000000000000000002172d42576c8297acc1b49f8a75604b35200b00000000000c1f334758677d91a1b3c5b3a2927d6759473422110000000000000000000002172d42576c8297acc1b59f8a756050505050505050505152545560677481949daebfb09f907b655443301c080000000000000000000000000000000000000000112132434b6074859ba6b49e8a7963585c71869cb1aa95806a55402b1500000000000002172d42576c8297acc1b49f8a75604b35200b000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1b9a88c76614c37210c000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000000000f253a4f647a8fa4b29d88735645311d09000012273d52677c92a8b5a4937e6b61585560656c757d858d959ca5a7a9aaa8a99f988b7e69614f3e2d1b070000000d22384d62778da7b8ccd3c5ae99836e59442e1900000000000000000006192b3c4b5c647a8899a1b1b6c2b8b3aca5a2ab9faba3a8aeb4b5b0a199887a665e4c3f2e1c0c00000000000000000013283e53687d93a8bfcfcfbea8937d68533e2813000000000000000000000000000000000000000010253b50657a90a5c5d2c9c6bbaa95806b5645321d09000000000000000002152838586e8398adc3cac7c8b4a28d78634e3828160300000000000000000000000000000000000000152a3f556a7f94aabfbbaa8d77624d38220d000000000c1c30404c6177889eb3bfbaa99a846f5f4d3a2a18030000000000000000000000152a3f546a7f94a9bfbcab8d78634d3a3a3a3a3a3a3a3c3d37444b55606c7f94a1b2bdb19c8673604b35200b000000000000000000000000000000000000000003141d3245566277889da9a89c877661546f8499aead98826d58432d1800000000000000152a3f556a7f94aabfbbaa8d77624d38220d000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfc6a38e79644e39240f000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000000000d22374c62778ca9b49f8a75604b36200b00000c21374c61768a9fb4b59f8d80767271757a8189929ba3aab2b6b3b1b1b4b9b4aa9f937f695c4a3622100000000d22374c62778ca4b6cad0c2ad98836e58432e190000000000000000000b2035495a647a899da6b3bfbab4a69e96908d8b8a8c8e93999fabb3b3a69d8a7c665d4b3a2a1804000000000000000013283d52687d92abbccfcebbaa927d68523d2813000000000000000000000000000000000000000014293e53697e93a8bec1b5b1b5b39e8875604b3620100000000000000000091d32455671879cb1c3b6b2b6c0ab96816c5645321e090000000000000000000000000000000000000012283d52677d92a7bcc8a58f7a65503a25100000000417293a4c5e6e8298a6b8c1b49f8a78634d41311c0c00000000000000000000000012273d52677c92a7bcc9a5907b65503b2625252525252628273137444b616e8399aabbb6a4917c6751392916030000000000000000000000000000000000000000021528384859647a8b9fb4a5998372606c8196acaf9a85705a3727150100000000000012283d52677d92a7bcc8a58f7a65503a251000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcbba6917c66513c2711000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000000000000b20354a60758a9fb4ab8d78634d38230e00000a1f3347586c8197a7b8ab9f958b8787898f979ea8b0b4b4aca89e9b9b9ea8b4bab49f8c7a644f3e2d1b0700000b2034485972869cb1b9c0b3a4927d68533d28130000000000000000000d23384d6278889ea7b7c1b5a89f9488817b77767576787e848c99a1b4b7a89f8b7b655847331f1000000000000000000e23384d63788c9fb4bcbbb49f8b78624d38220d0000000000000000000000000000000000000002172c42576c8197acc1b5a39ba3b5a7927d68523e2e1b07000000000000000b20364b60758a9fb4b6a59ca5b6b39e8975604b3621100000000000000000000000000000000000000010253a4f657a8fa4c8bca7927d67523d28120000000b1f334758667c91a0b2c5b5a3947f695a49352313000000000000000000000000000f253a4f647a8fa4c7bda8927d68533d2813101010101113151d2731434d63788c9fb4c2af99846f5746321e0a0000000000000000000000000000000000000000000a1a2b3b4b5c687d929fb0a195806b697f94a9b29d88725544311d0800000000000010253a4f657a8fa4c8bca7927d67523d281200000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8bea9937e69543e2914000000000000000012273c51677c91a6ac96816c57412c170000000000000000000000010a10121c30435472879cb2a5907a65503b251000000417293a4c6277889ea9b9b5aa9f9c9c9ea8acb3b4b0a89e978f89868689939fa9baaa9a85705c4a36220d000005182b3b50657b909ea7a7a29a8674604b36200b0000000000000000000f253a4f647a8b9fb4bfb3a39b8a7f756c656260606163686e7983949fabbaa99d8876614c3e2e1b08000000000000000c2035495a6b81969fabaa9f957f6a5a4835200b0000000000000000000000000000000000000004182a3a5a70859aafc5b19b869ba9b09b85715c4b37220c000000000000000f24394e64798eaab9a89c879cb2b9a7927d68523e2d1b070000000000000000000000000000000000000d22384d62778daabbbfaa957f6a55402a1500000b1b2f404c6176889db3bebbaa9b8573604b3c2c1905000000000000000000000000000d22374d62778ca9bac0aa95806b55402b160000000000000209152035495a6e8398aec3b49f8a76614b36210c000000000000000000000000000000000000000000000d1d2e3e4e5f6c8196a2b59f8d7c677c91a6b49f8a75604b35200b0000000000000d22384d62778daabbbfaa957f6a55402a150000000000000000000000000000000000000000000000000000000000000d22384d62778daabbc0ab96816b56412c16010000000000000012273c51677c91a6ac96816c57412c170000000000000000000005131e25272d25365a6f849aafa8927d68533d28130000000c1f344759667c8b9ea7b3b8b4b2b1b4b6b1aaa39b9389827a757171757e8b9fb4b4a28e79644f39240f0000000d23384c5d687e8990918e8477625645311d090000000000000000000d22374b5d6a7f94a2b1a19985796a6057504d4b4a4c4e535b636e7f8d9fb4b7a698826e5c4b37220e0000000000000006192c3c4b6074818b91918b8073604b3c2b1905000000000000000000000000000000000000000a1f33475873889eb3bea8937e8b9fb4a38f7a644f3b2a180400000000000012283d52677d92a7b39e898096abc4b09b85705c4a36220c0000000000000000000000000000000000000b20354b60758a9fb4c2ac97826d57422d1800031729394c5e6d8298a6b7c3b49f8c7a645544311e0e00000000000000000000000000000b20354a60758a9fb4c2ad98826d58432d18000000000000000006192c3c53687d92a8bdbbaa907b65503b26100000000000000000000000000000000000000000000000102031414b6073849aa5ab9e8a79798eabbbaa8d78624d38230d0000000000000b20354b60758a9fb4c2ac97826d57422d180000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c3ae99836e59442e19000000000000000012273c51677c91a6ac96816c57412c1700000000000000000000132330393d424242576d8297acaa95806a55402b1500000005182a3b4c5e667c89969ea7a7a9a8a6a49c958d857d766c6560555660687c90a1b3aa95806b55402b16000000091c2f3f4e6068767b7c796f62594838271502000000000000000000081b2e3f4b6072849aa0978375635b4b453938363537393d494e616a7f94a1b3b2a08f7a644f3c2b1906000000000000000e1d324556606c777c7c776b605544311e0e00000000000000000000000000000000000000000c22374c61778ca7b8bba6907c8399aead98826d5947341f09000000000001162b41566b8096abb19c867a8fa6b7b5a38e79644f3a2917040000000000000000000000000000000000081d31445572879db2c4af9a856f5a362614010b1e334657667c90a0b2c4b7a596816b5c4a372715000000000000000000000000000000071c30435472879cb2c5b09a85705b3727150100000000000000000e23384e63788da3c7c8a9937e69543e2914000000000000000000000000000000000000000000000002131d3144556176879da8a89c86778a9fb4a58f7a65503a2510000000000000081d31445572879db2c4af9a846f5a362513000909080706030000000000000000000000000000000000000000000000081d31445572879db2c6b09b86715b392816030000000000000012273c51677c91a6ac96816c57412c170000000000000000000c1d30414d52575858586a7f94aaad98826d58432d18000000000d1d2f404c5e657681898f929493918d877f78706861574f4b44454b5e6e8399aeaf9a85705a45301b00000000112131424e57616667635b4c483b2a1a0a0000000000000000000000101c3043546177858b82736157493c322822212021232c35434a6072849aafbeae99846f5a4835200b0000000000000002152838454b5962676661594b4437261400000000000000000000000000000000000000000010253a50657a8fa5c5c8a48f7a7c91a6b49f8a77614c37271501000000000417293a5a6f8499afae998373889db3c1ac97826d5846331f0a0000000000000000000000000000000000011426375a70859aafc5b29c87725443301c0b1b2f3f4c6176879db2bebeb29d8775614b3e2d1909000000000000000000000000000000001325365a6f859aafc4b29d88725544311d0800000000000000000c21364b61768ba9bac0ab96816b56412c1601000000000000000000000000000000000000000000000001142637475863798a9eaba49984869cb1a7927d68523d2813000000000000011426375a70859aafc5b29c87725443301c1e1e1e1d1d1b1916110c0a04000000000000000000000000000000000000011426375a70859aafc5b39e88735746321e090000000000000012273c51677c91a6ac96816c57412c17000000000000000004182a3b4d5f676d6d6d6d6d7d92a7af9a85705a372715010000000012222f404c58616c747a7d7f7e7c77726a635a534b46393531324052677d92a5a59d88735e482513000000000313243139464b50524e4a3d342a1d0d0000000000000000000000000114263647596170766d605546392c1e160d0b0b0c0f1a21304354647a8ea2b4b59f8c78624d38230d00000000000000000a1a28323b484d51514c473b3126190900000000000000000000000000000000000000000013293e53687e93a8bdbbaa8d7873889db2a9947f6a5544311d08000000000a1f33475873889db2ab96806c8196abc1b49f8a76614c362111000000000000000000000000000000000000182d42586d8297adc2b49f8a75604b35201628394b5d6c8197a5b7c5b2a0907c6657463220100000000000000000000000000000000000182d42576d8297acc2b49f8a75604b35200b00000000000000000a1e32465774899fb4c1ac97826c57422d170200000000000000000000000000000000000000000000000009192a3a4a5b667c8d9fb5a1998b9fb4aa957f6a55402a1500000000000000182d42586d8297adc2b49f8a75604a35333333333332302e2b27221f180c0a0300000000000000000000000000000000182d42586d8297adc2b8a78b76614b36210c0000000000000012273c51677c91a6ac96816c57412c1700000000000000000b1f344759677d8282828282849aafb29d88725544311d08000000000412212f3a474c55606567696967625a554d493c363229201d24394e64798e9090908b745443301c070000000006131b2932363b3c39362d1f180d000000000000000000000000000008182a3b474c5761574b4437281b0e030000000000061325364a5c70859ab0bcab947f69543626140100000000000000000a151d2b34373c3c37342a1d140900000000000000000000000000000000000000000002172c41576c8196acc1b49f8a756a7f95a9b29d8874604b35200f000000000c21374c61768ca6b7a7927d67798ea3b4baa8937e69543f2e1c080000000000000000000000000000000000152b40556a8095aabfbaa98c77624d37221e324657657b909fb1c3b8a798826d5e4c392816020000000000000000000000000000000000152a40556a7f95aabfbbaa8d78624d38230d00000000000000000b20354b60758a9fb4c1ac97816c57422c1702000000000000000000000000000000000000000000000000000c1c2d3d4c5e6a8095a1b2a99fa9baad97826d58422d1800000000000000152b40556a8095aabfbaa98c77624d484848484848474643403c37342a211e170b030000000000000000000000000000152b40556a8095aabfc5a38e78634e39230e0000000000000012273c51677c91a6ac96816c57412c1700000000000000000c22374c61778d97979797979aa2b3b49f8a75604b35200b000000000003111c2a3337444b4f525453514d483c38352c211e160b0b21364b60747b7b7b7b7b72604a35200b0000000000000b161e21262723211a0f05000000000000000000000000000000000c1d2a3439464c46393127190b000000000000000008182d3e556a7f94aac9af9a846f5443301c08000000000000000000020d1820222727221f180c01000000000000000000000000000000000000000000000417293a5a6f859aafc4b19c877262778a9fb4a6917c67513d2d1a0700000010253a50657a8fa5bbaa8e796470859bb0c5b19c86725d4b37230d000000000000000000000000000000000013283d53687d92a8bdc7a48f7a654f3a252e3f4b6175879db2bdc0b39e8977614c402f1b0b00000000000000000000000000000000000012283d52677d92a7bcc8a58f7a65503a2510050505050001080b1626374d62778daabbc8aa95806a55402b150000000000000000000000000000000000000000000000000000000f1f30404a60728399a4b5b4bac7af9a856f5a3626140100000000000013283d53687d92a8bdc7a48f7a645e5e5e5e5e5e5d5c5b5855514c473a3633291e160b0000000000000000000000000013283d53687d92a8bdbba5907b66503b26110000000000000012273c51677c91a6ac96816c57412c1700000000000000000c22374c61778ca9a8a8a8a8a8a8a8a8aa8d78624d38230d000000000000000c171f2731353a3d3f3e3c38342b2320190e0a0300091e324556606565656565605443301c0700000000000000030a0c11120e0c07000000000000000000000000000000000000000c181f29333633291d15090000000000000000000010253b50657a90a5bab49e8975604b35200b000000000000000000000c181f2226262625231c11030000000000000000000000000000000000000000000a1f33475873889db3c3ae99846e596d8298adaf9a85705b4a36210c00000014293e53697e93a8b49f8a7560687d92a7b9b6a48f7a65503b2a18050000000000000000000000000000000010253b50657a90a5c9bca7927c67523d28384b5d6c8196a5b6c7b4a2927d6859473422120000000000000000000000000000000000000010253a50657a8fa5c8bca7927d67523d281b1b1b1b1b1b141c2028324455687d92a8c8bbaa917c67513c271200000000000000000000000000000000000000000000000000000001121c3043546175869ca7b8c8c7b29d87725443301c0800000000000010253b50657a90a5c9bca7927d737373737373737272706e6b666159534b463932291b1200000000000000000000000010253b50657a90a5c9bda8937e68533e29130000000000000012273c51677c91a6ac96816c57412c1700000000000000000a1f344759748a929292929292929292928f7a65503a251000000000000000000409151d2025282a29272220190e0c060000000003162838454b50505050504a43362513000000000000000000000000000000000000000000000000000000000000000000000000040b171e211e170b0200000000000000000000000e23394e63788ea3b8b9a88d77624d38220d0000000000000000000c1c2a34373b3b3b3b382f21110000000000000000000000000000000000000000000c21374c61768ca6b8c0ab96806b56647a8fa3b4a28e79634e3a2917040000132536576c8297acb19c8671566075899eb3c2ad98836e5948341f09000000000000000000000000000000000e23384d63788dabbcbfaa947f6a553f324556657b8d9fb5c3baa99a846f5f4e3b2a1804000000000000000000000000000000000000000d22384d62778daabbbfaa957f6a55403030303030303026303538454b6073869cb1c6b49f8b77614c37220c000000000000000000000000000000000000000000000000000000000013253646576278899eaabbc7b49f8a75604b35200b0000000000000e23384d63788dabbcc9b39e898888888888888888878583807c77706961574b46392f1c1308000000000000000000000e23384d63788dabbcc0ab95806b56402b160100000000000012273c51677c91a6a896816c57412c17000000000000000004182a3a52677d7d7d7d7d7d7d7d7d7d7d7d78624d38230d0000000000000000000001080b10121414120d0b0500000000000000000a1a2832363b3b3b3b3b35302518080000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0a03000000000000000000000000000d22374d62778ca2b7c6a48f7a654f3a2510000000000000000004182a3a474c505050504b3f2f1d0d000000000000000000000000000000000000000010253a4f657a8fa4c4bda8927d68535c71869bb0ac97826c5846331f0800071c30435470859bb0ad98836e58576c8197acc1b49f8b77624c372614010000000000000000000000000000000b20364b60758a9fb4c1ac97826c5743414b6075869cabbcc2b49f8b78634d41311d0c00000000000000000000000000000000000000000b20354b60758a9fb4c2ac97826d57454545454545454536434b4e56606c8096a4b6b9a898826d5847331f0a000000000000000000000000000000000000000000000000000000000008182939495a657b8c9fb2b2b2aa8c77624d37220d0000000000000b20364b60758a9fb4cab9a89e9d9d9d9d9d9d9d9d9c9b9895918b857e766a61574c40302518080000000000000000000b20364b60758a9fb4c3ad98836e58432e190000000000000012273c51677d91939393816c57412c170000000000000000000c25394d5f676868686868686868686868625a4935200b0000000000000000000000000000000000000000000000000000000000000a161e212626262626201c130800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1526364f64798ea4b9bba5907b66503b261100000000000000000a1f34475961666666655d4b3b2a18050000000000000000000000000000000000000013283e53687d93a8bdc5a48f7a654f52687d92a7b49f8a76614c362513000b20354a6074899eb3aa947f6a554e64798ea3b5bbaa947f6a5544311d08000000000000000000000000000000091d31455673889db2c4af9a846f5a58595f6b8096a4b6c9b5a3947f6a5a49352313000000000000000000000000000000000000000000081d31445572889db2c4af9a856f5a5a5a5a5a5a5a5a5a5b5460636a7581969eb0b9aa9e8978624d3a2a18040000000000000000000000000000000000000000000000000000000000000b1b2b3c4b5d697e939d9d9d9d8f7a654f3a2510000000000000091d31455673889db2c8c6b9b3b3b3b3b3b3b3b3b2b1b0adaaab9f9b93898075665e4a43362518080000000000000000091d31455673889db2c5b09b85705b382815020000000000000e23384d63787e7e7e7e7a65503a25100000000000000000000a1e30414d5253535353535353535353534d493c2b19060000000000000000000000000000000000000000000000000000000000000003090b10101010100b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000508141c27314354687d93a8bdbba5907b66503b261100000000000000000c22374c61777b7b7b7b655948341f0b00000000000000000000000000000000000001172c41566c8196abc1b8a78c77614c4b6075889eb3a8947e695443301c070d23384d62788da8b9a6917b66514a5c70859bb0c6b29d8774604b35200e000000000000000000000000000000021527385b70859bb0c5b19c86726d6d6e727d8d9fb5c3bcab9b8673604b3c2c1905000000000000000000000000000000000000000000011426375a70859aafc5b29c8772707070707070707070707275787f87969fb0b4a89e8c7d675a49351c0c00000000000000000000000000000000000000000000000000000000000000000e1e2f3f4f606c8187888888877c66513c2611000000000000021527385b70859bb0c5cbbaaea8a7a7a7a7a7a7a7a9abadb3b8b4b0a89e95887c6b6054433625130000000000000000021527385b70859bb0c5b29d88735645321d090000000000000c2035495a6369696969655d4b37230e00000000000000000001132330393c3d3d3d3d3d3d3d3d3d3d3d38352b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090d1820263038454b6073869cb1c6c1a38e79644e39240f000000000000000010253b50657b9090908c77624c37220d0000000000000000000000000000000000000417293a5a6f849aafc4b39e8973584745566b8096abb29c8773604a35200e11263c51667b91a6b9a88d78624d3d53687d92a8b9b7a5917c66513c2c1906000000000000000000000000000000192e43586e8398adc3b49f8b8283838487929fabbcbfb49f8c7a645544311e0e0000000000000000000000000000000000000000000000182d43586d8298adc2b49f8c848585858585858585858687898e949da5b1ab9f988a7c675f4d3c2c19000000000000000000000000000000000000000000000000000000000000000000001121324252636c7272727272665e4c38240f00000000000000192e43586e8398adc3c1ae9c93929292929292929495989ea7adb5b9b3a69d908072605443301c120000000000000000192e43586e8398adc3b59f8a75604b36200b00000000000006192c3c494d53535353504b3f2e1c080000000000000000000005131e252728282828282828282828282320190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e1114151616161513110f0b0902000000000000000000000000000000000000000000000000000000000000000000000000050a161e212b3436434b56606c8096a4b5c9b5a38c77614c37220c00000000000000000f24394f64798ea4a5917c67513c27120000000000000000000000000000000000000a1f33465873889db2c5b09b85705b3a384d62788c9fb4a5907b66503c2c19152a3f556a7f94aab39e89745a48364b6175899eb4c3af99846f5a4935200a000000000000000000000000000001162b40566b8095abc0baa99f989898999ca4b5bcbcb0a196816c5c4a372715000000000000000000000000000000000000000000000000152b40556a8095aabfbbaa9f9a9a9a9a9a9a9a9a9a9a9b9c9ea8a9b2a49c958c8378665e4d40301e0e00000000000000000000000000000000000000000000000000000000000000000000031424344552575d5d5d5d5d514c402f1d0900000000000001162b40566b8095abc0bea8937e7d7d7d7d7d7d7d7e8083888f989fabb6b7b29e958172604a402f1b0b00000000000001162b40566b8095abc0bcab8d78634d38230e000000000000000e1e2c35383e3e3e3e3a372e2111000000000000000000000000010a101213131313131313131313130d0b06000000000000000000000000000000000000000000000000000000000000000000000000000002090b131c202326292b2c2b2b2a282624201d15120c0a04000000000000000000000000000000000000000000000000000000000000060e19202832363b484d5460677481969eb0c2c4b19b86715947341f0b00000000000000000d23384d62788da2ac96816c573a29170400000000000000000000000000000000000c21364c61768ba6b7c2ad97826d584235485a6e8399aeaf99846f5a493520152738586e8398adb09b85705b3c3246576c8197acc1b59f8c78624d38281502000000000000000000000000000013293e53687e93a8bdc7bab4adadadaeb1b6c2c4b09e968374604b3e2d190900000000000000000000000000000000000000000000000013283d53687d92a8bdc8bbb4afafafafafafafafafafb0b1b4b9b8a69c8680786e62594c40302212000000000000000000000000000000000000000000000000000000000000000000000000061727343e4248484848483c382f2212000000000000000013293e53687e93a8bdb9a48e7967676767676768696b6e747a838d9ca4b3bcaf9f95806b5e4c3929160300000000000013293e53687e93a8bdc9a5907a65503b251000000000000000000e1920232929292925231c1103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a151d20253035383c3f404141403f3e3c3936322827211f170b070000000000000000000000000000000000000000000000000000000e19212b3538454b52596269737c87979fb0bcc9b7a6947f6a543b2a180400000000000000000c21364c61768babb19b86715846331f0a00000000000000000000000000000000000f253a4f647a8fa4c4bfa9947f6a543f2b3c50657b90a4b59f8c78634d39281d31455671869cb1ac97826c574228394f64798ea3b5bcab96806b5645321d09000000000000000000000000000011263b50667b90a5bbd1c1b4b0a9a9aaaeb4bac7ab96806f6056453225150600000000000000000000000000000000000000000000000010253b50657a90a5c9cebaa99f9e9e9e9e9e9e9e9e9faaa3a8adb39d887f776d62594d4130251808000000000000000000000000000000000000000000000000000000000000000000000000000917222a2c333333333326241d1204000000000000000011263b50667b90a5bbbca6917c6752525252525254565460646e7a8699a1b3bdb09e917c665746321e0a00000000000011263b50667b90a5bbbda8927d68533d2813000000000000000000060c0e14141414100e08000000000000000000000000000000000000000000000812191b1d1c190f0d0700000000000000000000000000000000000000000000000000000000000000000000000a161e27313636434a4e5154555656555553514e4b45383c363329201c1308010000000000000000000000000000000000000000000001151e2c353c484d5660676f777f87919ca5b1bdcdbcab9d8875614b36210c0000000000000000000b20354a60758a9fb49f8b76614c362114000000000000000000000000000000000013283d53687d92a8bdc8a6917c66513c27384c5d72869cb1ab96816b57453220364b60758a9fb4a8937e69533e29364a5c71869bb0c6b39e8875604b36200f00000000000000000000000000000e23394e63788ea3c5c8b4a39b949495999fa9b7b49f8c7f6b6251433224130400000000000000000000000000000000000000000000000e23384d63788dabbcc9b49f8b89898989898989898a8b8d92989fa69d948b8277675f4a433625130000000000000000000000000000000000000000000000000000000000000000000000000000050f15171d1d1d1d1d110f09000000000000000000000e23394e63788ea3c5bea9947e69543f3d3d3d3d3f36434b4f5c64758399a4b5bcb29d8875614b3928160300000000000e23394e63788ea3c5bfaa95806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a252d3032312e24221b10020000000000000000000000000000000000000000000000000000000000000002121b283238454b5154606366696a6b6b6b6a686664605657524c463a3530251c1408000000000000000000000000000000000000000009141d323c494d5a626b757d848b949da5b2b6c3c7bab49f8d7c665746321e0a000000000000000000071c30435473899eb3ab917c675242321c1308000000000000000000000000000001162c41566b8196abc0bbaa8e78634e39232f3f53697e93a8b39e8975604b3624394e63798eaabba48f7a654f3a252d3e53687e93a8b9b8a7927d67523d2d1a07000000000000000000000000000c21364b61768ba7b8c5b09b857f7f80838b9da5b7aa9f94806b614f4231221203000000000000000000000000000000000000000000000b20364b60758a9fb4c2ad988274747474747474747576787d828a959fa99f978a7d6b605443301c1300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8c1ac96816c57412c282828292630353e4a576174869ca9bab7a695806a5745321e0900000000000c21364b61768ba7b8c2ad98826d58432d18000000000000000000050b0d0f0f0f0f0f0f0f0f0f0f0f0d0b0500000000000000000000000000081a2a3842454747443a362d201001000000000000000000000000000000000000000000000000000000000009151d2f39454b5660666e74787b7e808180807f7d7b7975716c676158514a43363026181103000000000000000000000000000000000009192631434f5b636e788088929a9faab2b6c3cabfb3a99f927f695e4c39291603000000000000000000001325365b70859ab0b09a8570614f423025180c00000000000000000000000000031629395a6f8499afc4b49f8a75604b362021364b6176899eb4a7937d68533f2e3d52677c92a7b7a68c76614c372121364b6176899eb4c5b09a85705b4a36210b00000000000000000000000000091e32465773889eb3c3ae99836e6a6a6e79879da6b7b49e947f6a604e4030211102000000000000000000000000000000000000000000091d31455673889db2c5af9a85705e5e5e5e5e5e54606163686d77808b9da5a89e928072604a42311d0d00000000000000000000000000050b0d12161a1c1d1e1d1c1a18140f0b0801000000000000000000000000000000000000000000000000000000091e32465773889eb3c3ae99846e59442f19121314141c202d39465663798b9fb4c4b39e8975604b36210b0000000000091e32465773889eb3c5af9a85705a37261401000000000000000d19202224242424242424242424242220190d00000000000000000000000012253848555b5c5c594f4a3e2d1f0f000000000000000000000000000000000000000000000000000000000b192731404c576069757c83888d9194959696959493918e8a87827c766e6660544b43362e1e160b00000000000000000000000000000001142637444b616a78838c969ea7afb4bbc8c8bbb4ada1998b7d69614f402f1b0b0000000000000000000000152a3f556a7f94a6b4a2937e69604a43362a1d110300000000000000000000000a1e32465772889db2c7b29c87725544311d1e3346576c8197acb19c86715d4b3740566b8095abb29d88735847331f1e3346576d8297acc1b4a28e79634e39291703000000000000000000000000031628395b71869bb0c6b19b86715c555b6378889da7b9ae9d927e685e4d3f2f2010010000000000000000000000000000000000000000021527385b70859bb0c5b29d8772554449494949434a4c4e5358616a7a879da7b49e96806b604e3b2a180500000000000000000001080d182022272b2f3132333231302d2924201d14090600000000000000000000000000000000000000000000000000031628395b71869bb0c6b19c86715c3a291704000001080f1b2938495b6c8197abbcb8a7927d67523626140100000000031628395b71869bb0c6b29d87725544311d080000000000000d1d2b3437393939393939393939393937342b1d0d0000000000000000000004192d4255667072716e645c4a3d2c1a0600000000000000000000000000000000000000000000000000000b1b2837444b5e66757f8891989ea7a6a9aaababaaaaa8a6aa9f9c97918a837c736860544b3f32281b0b0000000000000000000000000000081d314455606e7f8b999fabb3b8c5cac5b8b3aa9f988f8378675f4f423222120000000000000000000000000c21364b6175889da9b49f8d7e6b6054473b2f211500000000000000000000000c21364b61768b9fb5c4ae99846f593727151729394e63798ea2b4a48f7a65503b3a596f8499aeaf99846f5a3a29171729394f647a8fa3b5c0ac97816c5746331e0a00000000000000000000000000192e44596e8399aec3b39e89745846495a6379899ea9bab49f8c7d665d4b3e2d1f0f000000000000000000000000000000000000000000182e43586d8398adc2b49f8a75604b35343425303536383a474c5c6478899eb3b09e927e685947341f0b000000000000000009141d202b34373d4144464748484645433e39353126211a0f06000000000000000000000000000000000000000000000000192e44596e8399aec3b39e89745846331f0a00000000000b1a2c3d4d62788b9fb4c5ae99846e5443301c080000000000192e44596e8399aec3b49f8a75604b35200b000000000005192b3b484d4e4e4e4e4e4e4e4e4e4e4e4d483b2b1905000000000000000000061b30455b70848786837a645b4935210c000000000000000000000000000000000000000000000000000a1a28394655606c7c87949ea6aeb3b8c5bab4b2b1b1b2b4b5bbb4b1aca99f9991867d73655d4b463928160300000000000000000000000008182f404b607382949fa9b4bcc9c9bcb4afa69e968b837a6f635a4d41322414040000000000000000000000000a1e334657647a8b9ea8ab9f92807261594c3f331c13080000000000000000000f243a4f64798fabbcc0ab96816b56412c160b2135495b6f849aafae98836e5948465872889db2ab95806b56402b160b22364a5c71869bb1c6b49e8976614b36211000000000000000000000000001162c41566b8196abc0b9a78b76614c3c4a5b657b8b9faabbaa9f8b7b655c4a3d2c1d0d0000000000000000000000000000000000000001162b40566b8095abc0bbaa8d77624d38221f131c2021232a333e4a5a667c91a3b5b39e8977624c3929160300000000000311192631353b484c52565a5c5d5e5d5b5a58534e4b4437352c20190e0000000000000000000000000000000000000000000001162c41566b8196abc0b9a88b76614c36210c0000000000000f2035495a71869bb0c6b39e8974604b35200b0000000001162c41566b8196abc0bbaa8d77624d38220d00000000000b2034485962646464646464646464646462594834200b000000000000000000061b31465b70869b9c998a79634e38230e000000000000000000000000000000000000000000000000031628384657617381909da5b3b8c0b4b0a8a99f9d9b9c9d9e9faba8adb3b9b4aea49c92867b6c615746321e090000000000000000000000001325364c5e6c8197a0b4bac7c7bab4ab9f9a918880786e645c4d493c3023140600000000000000000000000000031729394a5c657b8a9da5b49e958477655d504330251808000000000000000013283d52687d92a7c9bda8937d68533e2813061a2c3d51667c91a5b49f8b77624d4c61768ba5b7a7927c67523d2712071b2e3e53687e93a8bab9a8937e68533f2e1b0800000000000000000000000014293e54697e93a9bec5a38e79634e393d4b5d667c8c9fb4baa99e8a7a645b493c2b1c0c0000000000000000000000000000000000000013283e53687d93a8bdc8a48f7a654f3a251000070b0c0e171f2d3c4c5e70859bb0b9a796816c5746321e0a000000000614212f37444b525962676b6f71727372716f6d696460554e493d352c1c130800000000000000000000000000000000000000000014293e54697e93a9bec6a38e79644e39240f00000000000006192b3c566b8096abc0b9a88e78634e39230e000000000014293e54697e93a9bec8a48f7a654f3a251000000000000d22374d6278797979797979797979797978624d37220d00000000000000000004192e43596e8398aea897826d583c2c190600000000000000000000000000000000000000000000000d1e324556617584979fb2b7c0b3afa29a938e8a87868788898b8f93989ea8afb3b6b1a39b8d8175614b36210c0000000000000000000000071c304354667c909fb1becebfb3a99f968c847c756b625a4f4b3e352c1e13050000000000000000000000000000000b1b2e3e4b5d657a8799a1afa19a887b6a614a433625130000000000000001162b41566b8096abc0c5a48f7a654f3a2510000f20354b6074879db2aa95806b564f657a8fa4bbaa8e79634e39240e001021364c61768a9fb4c6b19c86715d4b37220c00000000000000000000000011263c51667b91a6bbbba6917b66513c2e3f4c5e687e929dafb9a89e8979635a483a2a1b0b00000000000000000000000000000000000011263b50667b90a5bbbca7927d67523d2812000000000004101e304053687d92a8c5b49e8976614b36210c000000051424323f4c55606870777d8084868788878685827e79746c635b4d493c30251808000000000000000000000000000000000000000011263c51667b91a6bbbba6917b66513c26110000000000000012273c52677c91a7bcc6a6917c66513c2711000000000011263c51667b91a6bbbca7927d67523d28120000000000162b40556b808e8e8e8e8e8e8e8e8e8e8e836e59432e1904000000000000000001162c41566b8196abb39e88735b4935210c000000000000000000000000000000000000000000000d1d31424b6074849aa2b1bdbab4a29a8e857e78757271717374767a7e8389919aa1afb4b5ab9f927c67523d271200000000000000000000000b20354a6073869cb1bdccbbafa1998a81786f6760564d483c372e20190e00000000000000000000000000000000000010202f3f4b5c647683959eb4a69d8d7f6d605443301c1300000000000003162839596f8499aec4b9a78c77614c37220c00081d3144556a7f94a9b39e88756053687e93a8b49f8a75604b36200b000a1e3346576d8297adc2b5a48f7a644f3a2a180400000000000000000000000f24394e64798ea3c6bea8937e69533e2930404e606a7f949eb0b8a79d877862584739291a0a00000000000000000000000000000000000e23384e63788da3c4bfaa947f6a553f2a15000000000000001222384d62778da6b8b9a8917c67523c2712000000132332434f5d65737d858b9296999b9c9d9d9b9a98938e8981796f635a4a4336251808000000000000000000000000000000000000000f24394e64798ea3c6bea9937e69543e29140000000000000010253b50657a90a5babea8937e69533e291400000000000f24394e64798ea3c6bfaa947f6a553f2a15000000000013283d53687d92a3a3a3a3a3a3a3a3a39b86705b46311b0600000000000000000014293e54697e93a9b8a68d78634d38230e00000000000000000000000000000000000000000005182b3b4e606d8298a2b4c0b9a99f92847970696360555c5c5d576064696d757c848f9aa2b4bca9947f6a543f2a1500000000000000000000000f243a4f647a8fa4b6cabdaf9d9483786c625a514b4538352b221b1006000000000000000000000000000000000000000211212f3e4a58617280929fa9ab9f948172604a41301d0c0000000000091e32455772879db2c7b39e89745947341f0b00011426374c61778a9fb4a6927d67576c8197acb19c86715645311d0900031729394f647a8fa4b5c2ad98826d5847331f0800000000000000000000000c21374c61768ca8b9c0ab96816b56412c2231424f616c8096a0b2b7a59c867661574638281909000000000000000000000000000000000b21364b60768ba6b8c1ac97826c57422d17020000000000000b2034485a73889eb3c6ac96816c57412c1700000d1d30414f61697b86929a9fababafafacababacaeada8a79e968e847869605443362513000000000000000000000000000000000000000c21374c61768ca8b9c0ab96816b56412c16010000000000000e24394e63798ea3b8bfaa947f6a553f2a1500000000000c21374c61768ca8b9c1ac97826c57422d17000000000010263b50657b90a5c9b6a59c9c9c9c9c9c87725c47321d0700000000000000000011263c51667b91a6c5a7927d68523d28130000000000000000000000000000000000000000000b20344859687e93a0b2c0b9a89e8b7e6f645c534e4b44374739454b4f535660666f7a849aafc1ac97826c57422d170000000000000000000000152b40556a8095aac2c6b19f947f6e625a4d493c36312720190e07000000000000000000000000000000000000000000000311202d3a4754606b7d8b9ea7b49f96816c5f4d3b2a1804000000000b21364b60768a9fb4c5b09b85705b3b2a18040000091f3347586d8298adb09b85705c70859ab0ad98836d583827150200000b22374b5c71869cb1c7b49f8a77614c36251300000000000000000000000a1f33475874899eb3c3ae99836e59442e192432434a60728298a1b3b6a49b857561564537261401000000000000000000000000000000091e32455673889eb3c4af9a846f5a452f1a0000000000000005192b3c5c71879cb1c5b09b85705b46301b0005182b3b4d5f697f8c9ca4b0b4aea79e9a97969697999da6abb3aca1998a7f72605443301c130000000000000000000000000000000000000a1f33475874899eb3c3ae99836e59442e19000000000000000f243a4f64798fa4b9bfaa957f6a55402a1500000000000a1f33475874899eb3c4af9a846f5a36251300000000000e23384d63788dabbcb29c8787878787867d67523c2712000000000000000000000f24394e64798ea3c6ac97826c573a29170400000000000000000000000000000000000000061a2c3d4d6277899eb3bebcab9e8a7b68604f4a3e39353126322832363a38454b515c657b90a5c9af99846f5a3625130000000000000000000004192e43596e8398aec3b9a896816c614d483c352c201d150a0500000000000000000000000000000000000000000000000000010f1c2936434b5f677b899ea9b09f927d675947341f0a000000000f24394f64798eabbcc2ad97826d58422d1800000004182a3a4f647a8ea3b4a38e7a6474899eb3a9947f6a543f2a15000000081b2e3e53697e93a9babaa9947f695443301c07000000000000000000000417293a5c71869cb1c6b09b86715b392816151c30435460738399a3b4b5a39a8474605544311d16070000000000000000000000000000031628385b70869bb0c5b19c87725c3b2a1804000000000000031729395b70869bb0c5b29c87725d47321d000b20344859677d929faab6ada1998f88848281808284888d969ea7b1a89f948172604a41311d0d00000000000000000000000000000000000417293a5c71869cb1c6b09b86715b3929170300000000000011263b51667b90a6bbbea8937e69533e291400000000000417293a5c71869cb1c6b19c87725443301c07000000000b20364b60758a9fb5a18b767272727271675f4d392510000000000000000000000c21374c61768ca8b9b19c86715846331f0a000000000000000000000000000000000000000c2135495b6d8297a8b9c2b49f8d7b655d4e42362d23201d141c161e21252832363e4e63788dabbcb19c87725443301c07000000000000000000051b30455a70859aafc5b49e8976614c43352b20190e090200000000000000000000000000000000000000000000000000000000000c182630414d5c647b8a9fb4b39e8977614c3928160300000012283d52677d92a7c9bfa9947f6a543f2a15000000000c22364a5c70859bb0ad97826d778da7b9a6907b66513b2611000000001021364c61768a9fb4c7b29d8773604a35200d00000000000000000000001a2f44596f8499aec4b39e88735746321e0913253644556075859ba4b6b4a2998373604b44342515060000000000000000000000000000192e43596e8398aec3b49f89745947341f0b000000000001091e33465772879cb2c7b39e88735e49331e000d22374c62778a9fb4bbad9c93837a746f6c6b6b6c6e73788089979fb5b49f97816d5f4e3b2b180500000000000000000000000000000000001a2f44596f8499aec4b39e89735746331e0a00000000040e1c2f40556b8095aac0c5a7917c67523c27120000000000001a2f44596f8499aec4b49f8975604a35200b00000000091d31455673889db3a38e79645d5d5d5c524d41301e0a000000000000000000000a1f33475874899eb4b59f8b76614c36210c000000000000000000000000000000000000021628384e63788b9fb4c6b6a496806b5d4b3f31221b100b08010003090b0f161e21364b60758a9fb5b49f8975604a35200b000000000000000000071c31465c71869bb1c3ae99836e58463320190e0600000000000000000000000000000000000000000000000000000000000000000008141c303e4b5c687e93a3b4a795806b5745321e09000001162b40566b8095abc0c8a6917c66513c271100000000071b2d3e52677d92a6b49f8a767b90a6b9a88d78624d38220d000000000a1f3346586d8298adc2b6a5907b66503c2b190500000000000000000002172c41576c8196acc1b8a78b76614b36210c0818273745576176869ca6b7b2a197816d6251433224130400000000000000000000000001162b41566b8096abc0baa98c77614c3722121212121213141c27374b61768a9fb4c7b19c87725c47321d00152b40556a8095a8bab19f937e6e65605457565657595b636b7681939fabb19f927d6859483420090000000000000000000000000000000002172c41576c8196acc1b8a78b76614b36211212121314171f2b3a4c5e71869bb1c6b8a78e79644f39240f000000000002172c41576c8196acc1baa98c77624c37220d00000000021527385b70859bb0a6917b66514747473c3930231301000000000000000000000417293a5c71869cb1bcab907b66503b2611000000000000000000000000000000000000091e3245566c8196aabbc4b19c8674604b3f2f20130700000000000000000002091d32455673889db3baa98c77624c37220d000000000000000000061b31465b70869bb0c0ab96816b563a2917050000000000000000000000070b07000000000000000000000000000000000000000000000113202e3e4a6072859bb0b49e8975604b36210b000002162838596e8499aec3bbaa8e79634e39230e00000000001020364b6075889eb3a9947f7f94a9b39e89745a4835200b000000000417293a4f657a8fa4b6c3ae99836e5a4834200900000000000000000000142a3f54697f94a9bec5a38e78634e39230e000919283947586278879da7b8b19f96806b614f423122120300000000000000000000000014293e53697e93a8bec7a48f79644f3a272727272728292630374455677c91aabbc5af9a85705a45301b001c31465b71869bb0c6ac97816c604f4b43364141423d494e58616c7e8d9fb5b39e8977624d3727150100000000000000000000000000000000142a3f54697f94a9bec5a38e79634e392727272728292a333c4859667b90a3b5c8b39e8974604b35200b000000000000142a3f54697f94a9bec7a48f79644f3a240f0000000000192e43586e8398ada9937e69543e323127251e13050000000000000000000000001a2f44596f8499aec9a9947f6a543f2a150000000000000000000000000000000000000b21364b6075899eb3c8b7a6917c675645322111020000000000000000000000021528385b70859bb0c7a48f79644f3a240f00000000000000000004192f44596e8499aec0ab96816b56412c160000000000000000000508131c201c130800000000000000000000000000070b07000000000002101c304354677d92abb9a8907b66503b26110000091e32455672879cb2c7b49f8a75604b36200b0000000000091d3145566b8095aab19c868196acb09a85705b3c2b190500000000000c22374b5d71869cb1c7b49f8b78624d3727150200000000000000000012273c52677c91a7bcbba6907b66513b261100000a1b2a3a485a6379899ea8bab09e947f69604e4030211102000000000000000000000011263b51667b90a6bbbca6917c67513c3c3c3c3c3c3d3e36434b556074869cb1c8c3ab96816c56412c17001e34495e73899eb3b9a48e79644f423530262c2b2d2c353a474c606b8096a6b8a796816c5544311d080000000000000000000000000000000012273c52677c91a7bcbba6907b66513c3c3c3c3c3d3f3a474c5a6277879db2c1bfad98836e5443301c0800000000000012273c52677c91a7bcbca7917c67523c27120000000001162b40566b8095abab96816b56412c1c12100a0100000000000000000000000002172c42576c8197acc1ac97826c57422d1702000000000000000000000000000000000011263b51667b90a7b9c8b29d8874604b3828150300000000000000000000000200192e43586e8398adbca7917c67523c271200000000000000000001162b41566b8096abc7ad98836d583e2e1b07000000000000000d181f253035302518140600000000000000000308131c201c130800000000001325364b60768b9fb5ab96816b56412c1600000b21364b60768a9fb4c7b29c87725645321d090000000000021527384d62788b9fb4a49c879cb2ac97816c57422c17000000000000081b2e3f54697e93a9babbaa95806a5544311d080000000000000000000f243a4f64798fa4c7bda8937e68533e29130000000c1c2b3c495b647a8a9faabbae9d927e685e4d3f2f201001000000000000000000000e24394e63798ea3c5bea9947f6954525252525252525355546066738298a4b6c9b6a5907b65503b2510001e34495e73899eb3b6a08b76614b36211c141616171a212933424b6074889db3b39e8974604b35200b000000000000000000000000000000000f243a4f64798fa4c7bea8937e6953525252525252545658616a78859ba5b7c5b3a18f7a6550362614010000000000000f243a4f64798fa4c7bea9947f69543f2a14000000000013293e53687e93a8ae99836e59442e190000000000000000000000000000000000142a3f54697f94a9beaf99846f5a442f1a000000000000000000000000000000000003162939576c8197acc5c4aa947f6a5544311a0a000000000000000000030a0c181a1a2b40566b8095abbfa9947f6a543f2a150000000000000000000011273c51667c91a9bab29d88725c4a362213050000000005101d2a3436434a4336312414030000000000000b171e2530353025181205000000081e32455773889eb3ae99846f59442f1a00000f24394e64798eaabbc4ae99846f59382815020000000000000a203448596e8399aeb5a59ca5b6a8937e68533e2913000000000000001021374c61768a9fb4c8b39d8874604b36200f0000000000000000000d22374c62778ca9bac0ab96806b56412b16010000000d1d2c3d4b5c667c8c9fabbcb49f8c7c665d4b3e2d1f0f000000000000000000000c21364b61768ba7b8c1ac96816c6767676767676767686a6e747b8698a0b2c2bdb29c8774604b35200b001c31475c71869cb1b7a18c77624c3a2b1f18120f0d0c0c171f3145566b8096abb8a78f79644f3a240f000000000000000000000000000000000d22374c62778ca9bac0ab96806b67676767676768696b70767f899ba3b5c3b9a79a846f5d4b371808000000000000000d22374c62778ca9bac1ac96816c57412c17020000000011263b50667b90a5b19b86715c392917030000000000000000000000000000000012273c52677c91a7bcb19c87715c3a2a1804000000000000000000000000000000000a1e32465771879cb1c6b7a68d78634e3727150000000000000000000b171e212d2f2f2f3e53687e93a8bdac97816c57422c17020000000000000000000c21364b61768a9fb4b7a58f7a644f423120180f0e0d0f181f2e3b474c5460544e4231211100000000000b1b293336434a43363020180d070006192c3c5c71879cb1b09b85705b46301b000012273d52677c92a7c8c0ab96816b56412c160000000000000005192b3b50657b90a4b5b6b2b6c3a48f7a654f3a2510000000000000000a1f3347586d8298adc2b7a6917c67513d2c1a0600000000000000000b1f34475974899fb4c3ad98836e58432e1900000000000f1f2e3e4c5e677d8d9fb5bbaa9f8b7b655c4a3d2c1d0d0000000000000000000a1e32465773899eb3c5b09b857c7c7c7c7c7c7c7c7d7e7f8388909ca4b2bebdb19f917c665544311d0800172d42576c8297acbfa8927d6858483c342a27242221212122273852677d92a7c5a7927d68523d2813000000000000000000000000000000000b1f34475974899fb4c5b09a847c7c7c7c7c7c7c7d7e80858a949ea7b5c1b9aa9e8979634e3f2e1c00000000000000000b1f34475974899fb4c4ae99846f59442f1a00000000000e23394e63788ea3b39e89735746331e0a000000000000000000000000000000000f253a4f647a8fa4c7b49f89745847331f0a000000000000000000000000000000000c21364b61768a9fb4c8b29d88735b4935190900000000000000000b1b293336424444444450667b90a5bbaf99846f5a442f1a000000000000000000000a1e3346576e8398abbcae99836f604e41342b252323242a343f4b59626f7469604e3f2f1c0c00000003172939464c5460544d41342b201c13172035495a73889db3b19c87715c47321c0000162b40556b8095aac0bda8937d68533e281300000000000000000d23374b5d71869cb1c5c7cab7a58b76614c36210c0000000000000004172a3a50657a8fa4b6c4af9a846f5b4935210a000000000000000005182a3b5c72879cb1c5b09b86705b38281603000000000110202f404d5f697f949eb0baa99e8a7a645b493c2b1c0c0000000000000000031629395c71869bb1c6b5a39b9191919191919191929395989da6b1b5c2b7b39f97816c5e4c37271501000f253a4f647a8fa1b3b29d8876625a4c483b3c3a3837363737393c51677c91a6bca9947e69543f29140000000000000000000000000000000005182a3b5c72879cb1c7b4a29a919191919191919294969a9fa9b3b9bfb3a89e8c7b655b49352111000000000000000005182a3b5c72879cb1c6b19c86715c3a291704000000000b21364b60768ba6b8a78b76614b36210c000000000000000000000000000000000d22374c62778ca9babaa88c77614c37220c000000000000000000000000000000000f24394f64798eabbcc3ae99846e593d2c1a000000000000000003172939464c575a5a5a5a5a63788ea3c8b19c87715c3a2a1804000000000000000000031729394e63798c9fb4b3a1927e685f4d483b3a38383a3b484c5d6577848a7e695d4c3a29170400000a1e334657617174675f4d483b3530252a33404d62788da6b8b09b85705b46301b0002152738596e8399aec3c6a58f7a65503a25100000000000000000081c2e3f53687e93a7b9ccc7b29d88725846331f0a00000000000000000c23374b5d72879cb1c7b4a28d78634e3828160300000000000000001a2f455a6f849aafc4b39e88735645321e09000000000002112230414f616b80959fb1b9a89e8979635a483a2a19090000000000000000192e44596e8399aec3c1b5b0a7a7a7a7a7a7a7a7a7a8aaaeb2b7c1b5b0a69d928172604a402f190900000d22374b5c6e8399a5b6a69b85786a625955524f4d4c4b4c4d4e5054697e93a9c5a8937e68533e291300000000000000000000000000000000001a2f455a6f849aafc4c0b4b0a7a7a7a7a7a7a7a7a9abb0b4bab9b4ada199897c665d4b3d2c1a030000000000000000001a2f455a6f849aafc4b49e89745847331f0a00000000091e32455773889eb3a38e79634e39240e000000000000000000000000000000000b20354a60758a9fb4c6a48e79644f39240f0000000000000000000000000000000012273c51677c91a6c9c0ab95806b56402b1600000000000000000a1e334657616d6f6f6f6f6f6f758baabbb49f89745947341f0a000000000000000000000b21364a5b6d8298a7b8b49f8b7d6c6259534f4d4d4f5259626c7b879a9f8d7b655847331f0a000417293a4c617586887c6e62594e4a43363a474c5e6c8196abc4ad98836e58432e1900091d31455672879cb1c7b9a88c77624c37220d0000000000000000001121364b6175899eb3c9c4ae99846f593a2917040000000000000000081c2e3f54697f94a9bac0ab96816c5645321e090000000000000002172d42576c8297acb2b2a68b76604b36210b000000000000041323324351626d8197a1b0b2a79d87786258473727150100000000000001172c41566c8196abb2b2b2b2b2b2b2b2b2b2b2b2b2b2b1afadaaa6a39b93887d6c605443302212000000081b2e3e4c6177879ca5b1a39b8a8077706b676462616161626466686e8398adb8a78f7a65503a25100000000000000000000000000000000002172d42576c8297acb2b2b2b2b2b2b2b2b2b2b2b2b1b1afada9a89e978f8378665e4c3f2f1f0f00000000000000000002172d42576c8297acb2b2a88c76614c37210c00000000031628395b71869bb0a6917b66513c261100000000000000000000000000000000071c30435472879cb2bba6917c66513c27110000000000000000000000000000000014293e53697e93a8bebea8937e69533e291400000000000000000c21364c617582848484848484848c9fb4baa88c77614c37220c00000000000000000000071a2d3d4d6278899eaabaa99f9181776e6864636264676d77818c9da5ab9d8876614c37210c000a1f3347586a80959d9182776c646054595958616b7c8c9fb4baa9937d68533e2813000b20364b60758a9fb4c7b39e89745948341f0b000000000000000000091e3246576c8196abbcc9ab95806b56402b16000000000000000000001122374c61778a9fb4c9b39e8975604b36210f0000000000000000152a3f556a7f949d9d9d9d8d78634e38230e0000000000000005142433444b607383939a9c9d9d9c8676615544311d080000000000000014293e54697e939d9d9d9d9d9d9d9d9d9d9d9d9d9d9c9c9a9895918c857e75675f4a433625130400000000101f344759627887979faea89e958b85807c797776767677797b7e808a9eb4b39e8875604b36200b0000000000000000000000000000000000152a3f556a7f949d9d9d9d9d9d9d9d9d9d9d9d9d9c9b9a97948f89827a6f625a4c402f21110100000000000000000000152a3f556a7f949d9d9d9d8e79644e39240f0000000000192e43596e8398aea8937e69533e291400000000000000000000000000000000001325365a6f859aafbea9947e69543f291400000000000000000000000000000000152a3f546a7f94a9bfbca7917c67523c2712000000000000000011263c51667b91999999999999999faabbc6a48f79644f3a240f00000000000000000000000f2034485a657b8c9fabb9b49f978a837d7a7878797d838a979fabb7b7a697826d58422d18000c21374c6176899eb3a0988a8179746f6e6e7177808c9faabbb49f8a77624c37220d000e24394e63798eaab2b2b09b86705b3b2a1805000000000000000000031628394e63788c9fb1b2ab927c67523d2712000000000000000000000a1f3347586e8398abb2b2a7927d68533d2c1a060000000000000011273c51667c8788888888877b654f3a2510000000000000000006161d31445560737e8587888888878375604b35200b0000000000000011263b50667c87888888888888888888888888888787868583807c77706861574d4130251808000000000004182a3a485a6276828f999fabab9f9a95918f8d8c8b8c8c8e9093969ea8b9a896806b5645311d09000000000000000000000000000000000011273c51667c8788888888888888888888888887878684827e7a756d645c4d483c2f221203000000000000000000000011273c51667c8788888888877b65503b26100000000001162c41566b8196abab96816b56412c160100000000000000000000000000000000182d42586d8297adc1ab96816c56412c1701000000000000000000000000000000152b40556a8095aabfbba6917c66513c271100000000000000000f253a4f647a8fa4afafafafafafb4bbc8bca6917c67513c2712000000000000000000000005192b3c4b5d687e8d9ea8b5b1a99f98928f8d8d8f92989fa9b4bcb5a89f8b7b65503b2510000e23384d63788799a1b3a99f968e88858383868b959faabbb5a496806b5947341f0b0012273c52677c919d9d9d9d97826c57422d1700000000000000000000000b2135495b6e82969c9d9c8c78624d38230d0000000000000000000004182a3a4f647a8d9a9d9d9d9b86715b4935210c000000000000000f24394d5e66727272727272655d4b37230e00000000000000000001142637445560697072727272726e605544311d08000000000000000f23384c5e667272727272727272727272727272727271706e6b676259534b4639301c1308000000000000000c1c2b3c4858616d7a838b939a9fa8a7a7a4a2a1a0a1a2a3a5a8abb4b9b49e8977624d3827150200000000000000000000000000000000000f24394d5e66727272727272727272727272727272716f6d696560554f4a3e352b1e12040000000000000000000000000f24394d5e66727272727272655d4c38230e000000000014293e53697e93a8ae98836e59432e190000000000000000000000000000000000152a40556a7f95aabfae99836e59442e1900000000000000000000000000000000152a40556a7f95aabfbba6917b66513c261100000000000000000d22374d62778caaa7a7a7a7a7a7a7a7a7a7a7947f69543f2a140000000000000000000000000d1d2f3f4e60687c8a9ba3b2b7b4aea8a4a2a2a4a7adb4bab8b3a49c8a7c665d4b38230e000c2035495a637683939ea7b4aca69e9a98999b9faab4bbb5a59c8676614c3b2a18050014293e54697e87888888878377624d37220d0000000000000000000000061a2c3d4b6074818788867d685a4835200b00000000000000000000000c22374b5c667c85878888888779634e38230e000000000000000a1d30404d515d5d5d5d5d5d4f4b3f2e1c080000000000000000000009192737444b545b5d5d5d5d5d594b443727150100000000000000091c2f404c505d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5a5855514c483b3632281b13000000000000000000000e1e2b3a464c5c646e787e85898e919496979898979693949daec7b4a2937e695948341a0a0000000000000000000000000000000000000a1d30404d515d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5c5a58544f4b4437362d20190e00000000000000000000000000000a1d30404d515d5d5d5d5d5d504c3f2f1c08000000000011263c51667b91a6b09b86715b392816030000000000000000000000000000000013283d52687d92a7bdb19b86715c39291703000000000000000000000000000000142a3f54697f94a9bebca7917c67523c271200000000000000000b20354b60748b92929292929292929292929292816c57412c1702000000000000000000000000112131424e5e667a85929da5adb3b8c4b8b7b9c6b9b4aea79e948679665e4c3f2f1c080006192c3c495861727e89969fa9afb3afaeaeb0b4b7b3ab9f988778625746331d0d000012263b4f606972727272726e62594834200b0000000000000000000000000e1e324556606c727271685f4e3c2b19060000000000000000000000081b2e3e4c5e66707272727272635b4935210c0000000000000000122230393c4848484848483a372e211100000000000000000000000009192731353e45474848484843353127190900000000000000000011222f383b48484848484848484848484848484847474543403c37342b211e160b0000000000000000000000000e1c29333e4b4f5a62696f75797c7f8182828281807e7f94a9baa99a8473604b3b2b180000000000000000000000000000000000000000122230393c4848484848484848484848484848474645423f3a363127221b100600000000000000000000000000000000122230393c4848484848483b382f21110000000000000e24394e63798ea3b39e88735746321e090000000000000000000000000000000010253b50657a90a5c9b39e89735746331e0a00000000000000000000000000000013293e53687e93a8bdbda8927d68533d28130000000000000000081c304354677c7d7d7d7d7d7d7d7d7d7d7d7d7d7b654f3a25100000000000000000000000000003142431404c5c64727d8791989da6a5a6a7a6a5a89e9992887e74635b4c402f21110000000e1e2c3a4754606976818a939a9fa9a5a7a7a5a69d978c8275625a483929170000000c1f32424f545d5d5d5d5d594d483b2b180500000000000000000000000003162838454b575c5d5c524e41311e0e0000000000000000000000000010202f404c515b5d5d5d5d5d4e493d2c1a06000000000000000004121d242733333333333325231c11030000000000000000000000000009151d20293032333333332e201d15090000000000000000000003111c23263333333333333333333333333333323231302e2b272220180d090300000000000000000000000000000c171f2e373c484d5455606467696c6d6d6d6c6b6a7f95aab49f8b78635443301d0d000000000000000000000000000000000000000004121d2427333333333333333333333333333232312f2d2925201d15090700000000000000000000000000000000000004121d242733333333333326231c11030000000000000c21364c61768ba7b8a78b76614b36210c000000000000000000000000000000000d23384d62788dabbcb8a78b76614b36210c00000000000000000000000000000012273c51677c91a6bcbfa9947f6a543f2a150000000000000000011426364d5f6767676767676767676767676767655d4b37230e0000000000000000000000000000061422303e4a546067747c83888c8f919291908d89847d756960564a3d2f221203000000000e1c2a36434b58616b767e848a8e909191908d8882796d6157483c2b1b0b000000021424323b3e48484848484437342b1d0d00000000000000000000000000000a1a283236414748473d3a31231300000000000000000000000000000212222f383b45484848484838352c1f0f00000000000000000000000a0f111d1d1d1d1d1d100e080000000000000000000000000000000001080b141b1d1d1d1d1d190b080100000000000000000000000000090f111d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1b1916120d0b0500000000000000000000000000000000000004101b222b353837444b4e52545657585857596e8399aeac96816c5b4936261400000000000000000000000000000000000000000000000a0f111d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1a1814100b0802000000000000000000000000000000000000000000000a0f111d1d1d1d1d1d100e0800000000000000000a1e33465774899eb3a38e78634e39230e000000000000000000000000000000000b20364b60758a9fb4c5a38e78634e39230e0000000000000000000000000000000f243a4f64798fa4c5c1ac97816c57422c17000000000000000000081830404d51525252525252525252525252524f4b3f2e1c080000000000000000000000000000000412202d36434a5560666e73777a7c7d7c7b78746e6760564b45382d1f12040000000000000c1826303a464c5861696f75787b7c7c7a78736d635b4c46392b1e0e000000000006141f262933333333322f2220180d000000000000000000000000000000000a161e212c32333128251e130500000000000000000000000000000004121c242630323333333323211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e192022263135393c3f43444443455a6f859aafa68d78624d3c2c180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395c71869bb1a6907b66513b261100000000000000000000000000000000081d31445573889db2bba6907b66513b26110000000000000000000000000000000c22374c61778ca6b8c4af99846f5a3b2b1905000000000000000000122230393c3d3d3d3d3d3d3d3d3d3d3d3d3d3a372e21110000000000000000000000000000000000010f18253037444b515859626566676765636054524b453832281a0f01000000000000000008141c29333a474c5355606366676765635b574e4a3d33291b0e00000000000000020c12141d1d1d1d1d190d0b0500000000000000000000000000000000000003090b171d1d1c13110b01000000000000000000000000000000000000090f111b1d1d1d1d1d0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b1c202020201f14120c03000000000000000000000000050b0d1c202020202017140e050000000000000000000000000000000000000000000000000009151d2f36434a4f55585a5a5855586d8398ad9d88735a48351e0e00000000000000000000000000061016192020202020202020202020202020202020202020202020202020202020202020202020100e080000000000000000050b0d0f0b090200000000050b0d0f0b0902000000000000000000000000192f44596e8499aea8937e68533e291300000000000000000000000000000000021527375b70859bb0bda8937e68533e29130000000000000000000000000000000a1f34475973889eb3c8b39d8873594834200b00000000000000000004121d24272828282828282828282828282825231c11030000000000000000000000000000000000000008131c2731363c3b484d50515251504d4b43363632281d150a0000000000000000000000010c171f29333737444b4e505252504e493d39362d1e170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2131353535353429271f1406000000000000000000000d1820223235353535352c29221608000000000000000000000000000000000000000000000009192731404c5460646a6d6f6f6d6a65687e93aa9c87725443301c080000000000000000000000000a18232b2e353535353535353535353535353535353535353535353535353535353535353535353526231c110300000000000d19202224201d150a00000d19202224201d150a0000000000000000000001172c41566c8196abab96806b56412b160100000000000000000000000000000000182e43586d8398adc0ab95806b56402b1601000000000000000000000000000004182a3a596f8499aec4b8a68c77624d37220d00000000000000000000000a101212121212121212121212121212100e08000000000000000000000000000000000000000000000009151d20272b34373a3c3d3c3b38353026211e160a020000000000000000000000000000040c171f21273135393b3c3c3b38352c24211a0f030000000000000000000000030c1214202020202013110b0200000000000000000000000000000000000000000000000000000000000000080e10202020202016140e04000000000000000000000000050b0d1f202020201d12100a0100000000000000000000000000000000000000000000000001080b181f2020202019171107000000000a1a283236474a4a4a4a493f3b3225140500000000000000000d1d2b3437474a4a4a4a4a413e3426160500000000000000000000000000000000000000000002152737444b5e6673797f828484837f7b75778a9f9e8974604b35200e00000000000000000000000618283640434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b382f211100000002101d2b34373a3631271a0a101d2b34373a3631271a0a0000000000000000000014293f54697e94a9ad98836e58432e190000000000000000000000000000000001162b40566b8095abc0ad98836e58432e1900000000000000000000000000000000152a40556a7f95aac4c4a7927d685239291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b11182022252728272623201c140b0902000000000000000000000000000000000000040a0c151d20232627272523211a0e0c07000000000000000000000000071420272a353535353528261f14060000000000000000000000000000000000000000000000000000000003111c232535353535352b28211608000000000000000000000d18202234353535353328251e13050000000000000000000000000000000000000000000009141d202d34353535352f2c24190a000003162838454b5c606060605f544f433223130100000000000005182b3b484c5c606060606056514434220e0000000000000000000000000000000000000000000a1d314455606c7c868e94989999989590887f8398a88f7a644f3c2b1906000000000000000000001023364653586060606060606060606060606060606060606060606060606060606060606060606060504c3f2f1c08000010202d3b484d4f4b4538281b202d3b484d4f4b4538281b0a00000000000000000011273c51667c91a6b09b86705b382816030000000000000000000000000000000013293e53687e93a8bdb09b85705b382815020000000000000000000000000000000f253a4f647a8fa6b7c3ad98836e5746331e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d10111212100e0b080100000000000000000000000000000000000000000000000001080b0e111212100e0c060000000000000000000000000000031425323b3f4a4a4a4a4a3e3a3124140200000000000000000000000000000000000000000000000000000011212e373a4a4a4a4a4a403d3326160400000000000000000d1d2b34374a4a4a4a4a483d3a3123130300000000000000000000000000000000000000000919263135434a4a4a4a4a44403629190700091e3245566071757575757469614f41301f0f0000000000000b20344859627175757575756c62513e291400000000000000000000000000000000000000000a1a30414b607381919ba3aaadaba6a4a6a69d948b9fad98826d5a4835201200000000000000000000162b4053646e7575757575757575757575757575757575757575757575757575757575757575757575655d4c38230e00071b2d3e4a59626460564539282d3e4a5962646056453928160300000000000000000f24394f64798ea4b39e88735645321e090000000000000000000000000000000011263b50667b90a5bbb39d88735645321d090000000000000000000000000000000b20354a6074889db2c8b49f8a76614b362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2032434f546060606060534e42311f0b0000000000000000000000000000000000000000000000000000081c2e3f4b50606060606056514433210e0000000000000005182b3b484c5f606060605d524d413121110000000000000000000000000000000000000001142637444b585f60606060595447362411000b21364b6076868a8a8a8a897f695f4d3d2c1a0a00000000061a2c3d4c6277868a8a8a8a8a816c56412c1701000000000000000000000000000000000000021527384d5f6d81979fb1b2a69e95918f91959ca59fa9b49f8b78624d402f1a0a000000000000000000192e43586e828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7b65503b2610000d22364a5c6478797460574532364a5c64787974605745321e0900000000000000000c21374c61778ca8b8a68b76604b36210b000000000000000000000000000000000e23394e63788ea3c5b59f8a75604b36200b000000000000000000000000000000071c3043546c8197acc0baa8927d685443301c0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141a1d202020202014120c020000000000000000000610161820202020201a17110700000000000012273b4f6169757575757568604e3a261100000000000000000000000000000000000000000000000000000e23374b5d6575757575756b62513d2814000000000000000b2034485962747575757572675f4d3f2e1c08000000000000000000000000000000000000081d314455606d74757575756e6554402c1700091e32455663798a9e9fa89e927d675b49382816030000000c2135495b6e8398a49f9f9f8a77624c37220d00000000000000000000000000000000000000091d314556677d929fb1b2a19988807b7a7c7f87939fa9baaa99836e5e4c382815020000000000000000192e43586e83989f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f907b65503b2610000f24394e647a8b8f8675604b36394e647a8b8f8675604b36210b00000000000000000a1f33475874899eb4a38d78634e38230e000000000000000000000000000000000c21364b61768ba7b8bcab8d78634d38230e000000000000000000000000000000001325364e64798ea2b4c6b19c8673604a3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c272f32353535353529271f1406000000000000000917232b2d35353535352f2c24190b0000000000142a3f54697f8a8a8a8a8a7e68533e2813000000000000000000000000000000000000000000000000000010253a50657b8a8a8a8a8a806b56402b16010000000000000d22374c62778b8a8a8a8a877d675d4b3723100000000000000000000000000000000000000b20354b6073828a8a8a8a8a836e59442f190003162838495b677d929fb1b49e8a79635645321e13010005192b3b4e63798c9fb4baa996816c594834200b000000000000000000000000000000000000000b20364b6074879db2b5a39983756b6665666a737e8b9fa9b2a1917c665645321d0b0000000000000000192e43586e8398adb0aba3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3b2b7a5907b65503b261000162b40556b8095a4937e69533640556b8095a4937e6953362513000000000000000004172a3a5c71879cb1a5907b66503b2611000000000000000000000000000000000a1e32465773899eb3c9a5907a65503b2510000000000000000000000000000000000822364a5c70859bb0c1b5a4917c665645321d11000000000000000000000000000000000000000000000605000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c2c3a43474a4a4a4a4a3e3b322414020000000000061727353f434a4a4a4a4a4440362919070000000012273c51677c919f9f9f95806b56402b1601000000000000000000000000010100000000000000000000000d23384d62788daa9f9f98836e58432e19000000000000000b203448596c8196a99fa59d8d7b65503e2e1b08000000000000000000000000000000000012273c51677c919fa99f9f947e69543f291400000a1a2c3d4d5f6d8197a4b5a89c8675604b41311f0f000b203448596d8297abbcb49f8a77624d3b2b18050000000000000000000000000000000000000012273c51677c91a5b7b19b85746157514f515460697b8b9fb4b29d8774604b3928160300000000000000192e43586e8398ad9e968d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9da5a5907b65503b261000172d42576c8297ac99846f544342576c8297ac99846f5443301c0700000000000000001a2f44596f8499aea8937e68533e291300000000000000000000000000000000031629395c71869bb1bda8927d68533d28131111110f0d0800000000000000000000071b2d3e51677c91a3b5c2b29c8774604b3f2e1e0e0000000000000000000000000000000000000a10121b1b0e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014273a4a575c6060606060544f42321f0c00000000001023354652586060606060595447362411000000000f243a4f64798fa4b5ad98836d58432e1800000000000000000000090f111617130b0802000000000000000b20354b60758a9fb4b09b85705b3828150200000000000005182b3b4d62788b9fb4b7ab9a84705c4b37220f0000000000000000000000000000000003172939576c8297acbab9a88e79644f39240f0000000f1f30414b6075869ca8b5a497826d5f4d3d2c1b0a172a3a4d62788b9fb4baa997816c5948341d0d0000000000000000000000000000000000000002182d42576d8297acbaa9917c665646393a36434a5d687e93a3b4a5947f6a5746321e0900000000000000192e43586e8398ab9680797878787878787878787878787878787878787878787878787879879da5907b65503b261000172c42576c8197ac9e8974604a42576c8197ac9e8974604a35200b0000000000000002172c42576c8197acab95806b56402b160100000000000000000000000000000008132e44596e8399aebfaa95806a55402b2626262625221b10020000000000000000001020354a6072859bb0beb6a4957f6a5d4b3c2c1e1001000000000000000000000000000004121d242731302321190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f43576872757575757569604f3b27120000000001162b3f52646d75757575756f6554402c17020000000c22374c61778ca8bab09a85705b372715020000000000000004121d24262c2c28201d1509000000000000081d31445572889db2b39d88735645321d09000000000000000d2034485a6c8197aabbb4a28f7a644f3d2c1a060000000000000000000000000000000a1e33465771869cb1c6b39e8974604b35200b00000001131e32455663798a9eb4b19f927d675b493928161f3347586b8196a9bab49f8b78624d3b2b180000000000000000000000000000000000000000011426365c72879cb1b49f8a75604b38282525303f4a6072859bb0b39e8975614b36210c00000000000000192e43586e8398a9947f696363636363636363636363636363636363636363636363636372879ca5907b65503b261000172c41566c8196aba78d78634e41566c8196aba78d78634e38230e0000000000000000142a3f54697f94a9ad98836e58432e190000000000000000000000000000081618253041566c8196abc1ad97826d58423b3b3b3b3b3a372e2010000000000000000000071c304354657b90a0b2c3b49f8c7b655a493c2d1d14090000000000000000000000000c171f30393c464538352c1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475c72868a8a8a8a8a7e69543e29140000000003182d43586d828a8a8a8a8a836f59442f1a000000000b1f34475974899fb4b29d88735544311d0800000000000005132230383c41413d36312719090000000000011527375b70859ab0b59f8a75604b36200b0000000000000005192b3c4d62788b9fb4c0ae99836e5b4935210d0000000000000000000000000000000c21364b61768b9fb4c4ae99846f5544311d080000000003162838495b677d929fb1b49e8a79635745321e28394c6176899eb4bbaa97816c5a48341d0d0000000000000000000000000000000000000000081c30435473899eb3b19b86715645311a10131c304354677c91a8b9a8927d685238281602000000000000192e43586e8398a9947f69544e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e5d72879ca5907b65503b261000162b41566b8096aba7927d685241566b8096aba7927d68523d2813000000000000000012273c52677c91a7b09b85705b382815020000000000000000000000000016263436434a54697e94a9beaf9a85705a5151515151514f4b3f2e1b080000000000000000001325364b5d6d8298a6b7bbaa9d8878635a4a3e312619120b050000000000000508131c2933414d515b5a4d493c2c1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849a9f9f9f96816b56412c160100000000162b40556b80959f9f9f9c86715c3929170300000004182a3b5c72879cb1b49f8a75604b36200b000000000001132331404c515656534b44372718080000000000182e43586d8398adbcab8d78634d38230e00000000000000000d2035485a6d8297aabbb59f8c79634e3c2b1905000000000000000000000000000010253b50657b90abbcc6a9947f6a543726140100000000000a1a2c3d4d5f6d8197a4b5a89c8675604b41313245576a7f95a8b9b49f8b78624d3c2b190000000000000000000000000000000000000000000b20354b60758a9fb5af9a85705a38271500001325364b6075899eb4af9a85705645321e09000000000000192e43586e8398a9947f69543f383838383838383838383838383838383838383838475d72879ca5907b65503b261000162b40556b8095aaac97826c5742556b8095aaac97826c57422d1700000000000000000f253a4f647a8fa4b39d88735645321d090000000000000000000000000a1a344451546062667c91a6bbb29d877266666666666666645d4b37220900000000000000000008182e3f4c6176889daabbb8a69d8778645c4b44372f222019161413121415192025303a464c5f677070635b493a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acb5ae99836e59442e19000000000013283e53687d93a8b5b39e89745746331e0a000000001a2f445a6f8499afbcab8d78624d38230d00000000000b1e31414e5e666b6c686055443626140100000000162b40556b8095aac9a5907b65503b2610000000000000000006192b3c4d63788c9fb4bcab97826d5a4834200c0000000000000000000000000000152a3f556a7f94aac9b9a88f7a644f3a250f000000000000000f1f30414b6075869ca8b5a497826d5f4e3d374b6075889eb3bbaa97826d5a48351d0d000000000000000000000000000000000000000000081c30435474899fb4b09b86705b3a2a170400081d3144556f849aafb49f8a75604b36210b000000000000192e43586e8398a9947f69543f2a2323232323232323232323232323232323232332475d72879ca5907b65503b261000152a40556a7f95aab19b86715c3a556a7f95aab19b86715c3a291704000000000000000d22374c62778ca9b59f8a75604b36200b00000000000000000000000215283851626b74777a7f95aabfb49f8b7c7b7b7b7b7b7b7b7a644f37261401000000000000000000111f334758657b8c9fb4bcb7a59d887a6a60554c4038352b2b292828292a2b3436434a58616e7c868579635846331f14020000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfb09b86715b392816030000000011263b50667b90a5bbb9a78b76614b36210c00000002172d42576c8297acc9a58f7a65503a2510000000000010253a4e5f687c81817d74605443301c0d0000000013283e53687d93a8bda8927d68533d28130000000000000000000e2035495a6d8298abbcb49f8b78624d3a2a1704000000000000000000000000061a2c3d596f8499aec4b49e8975604b36200b0000000000000001131e32455663798a9eb4b1a0927d685b494455697e93a7b8b49f8b78624d3c2b1900000000000000000000000000000000000000000000011426365d72889db2b29d87725847331f0a0002152737566c8196abbbaa8e79644e39240f000000000000192e43586e8398a9947f69543f2a140e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e1d32475d72879ca5907b65503b26100013283d52687d92a7b39e8974584752687d92a7b39e89745847331f0a000000000000000b20354a6075899fb4ab8d78634e38230e0000000000000000000000091d3245566b80898c8f959eafc3bbaa9f909090909090909087725544311d080000000000000000000417293a4b5d687e939eafbcb7a69d8b7f73665e544d483c403e3d3d3e3f3b484d5460677682919b9a8776614c42321f0c000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcb39e88735746321e09000000000e23384e63788da3c5c5a38e78634e39230e00000000152a3f546a7f94a9bda7927d68523d281300000000081b2e3e52687d919696928372604b3b2b180500000010263b50657b90a5c9aa95806b55402b1600000000000000000006192c3c4e63798c9fb4bbaa96816c5847331f0a000a0a0a0a0a0a0a0a0a0a0a0c2135495b73899eb3c4af9a846f5544311d08000000000000000003162838495b677d929fb1b49f8a7963574b6074879db2bbaa97826d5a49351e0e00000000000000000000000000000000000000000000001a30455a6f859aafb7a58c77614c3721120000152a40556a7f95aac8a58f7a65503a2510030000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100010253a50657a8fa5b9a88c76614c50657a8fa5b9a88c76614c37210c00000000000000071c30435472879cb1a5907b65503b261000000000000000000000000b20364b60758b9ea8a4aaafbcccc8bbb4a6a6a6a6a6a6a69f8a75604b35200b000000000000000000000c1c2e3f4e606b80959eb4bab7a99f94867c7169625a5955535252535558596269737d8798a0b0a599836e604f3b2612000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8b8a78b76614b36210c000000000b21364b60768ba7b8bba5907b66503b26110000000012273d52677c92a7bcaa957f6a55402a15000000000d22374b5c71869cababa1937e6959483420120000000e23384e63788dabbcad98836d58432e18000000000000000000000e2135495b6e8398abbcb49e8a76614c3928162020202020202020202020202023384e63788da7b8c7aa947f6a55372715020000000000000000000a1a2c3d4d5f6d8197a4b5a89c86756054677d92a5b7b49f8c78634d3c2c19000000000000000000000000000000000000000000000000152a3f546a7f94a9c0a7917c675240301e1009142636556b8095aac7a48f7a654f3a251e160b00000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000d22384d62788daabba38e79644e4d62788daabba38e79644e39240f00000000000000001325365a6f849aafa8937d68533e28130000000000000000000000091d32455674899ea5a5a5aeb3bfcdbdb0aba5a5a5a5a5a5aa8d78624d38220d00000000000000000000001121314250626b80939fa9b7bab4a49c90867e78726e6b696867696a6d71777e86929da6b2beb3a1937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbc5a38e78634e39230e00000000091e32455773899eb3bda8937d68533e2813000000000f253a4f647a8fa4c7ac97826d57422d18000000031628394f647a8fa4b6bfb49e8a77624d402f1b0a00000b21364b60768a9fb5b09a85705b37271502000000000000000000061a2c3d4e63798c9fb5b9a8957f6a5745323535353535353535353535353535353d52687d92a7c5baa98f7a654f3a251000000000000000000000000f1f30414b6074869ca8b6a497826d6073869cb1bbaa98826d5a49351e0e0000000000000000000000000000000000000000000000000e24394e63798ea2b4af9a84705e4c3c2d201d213043546d8298adbaa98e78634e3b3632281b0e000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000b20354b60758a9fb4a6917c66514b60758a9fb4a6917c66513c27110000000000000000182d42576d8297acaa95806b55402b160000000000000000000000021528385c71868f8f8f8f99a1b3c4b09f968f8f8f8f8f8f8f8f7b65503b25100000000000000000000000031424334450616a7e8b9da5b4bbb5b1a49c938d8783807e7d7d7e7f83868c939ca4b2b7bfb2a49c8879634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4bba5907b66503b261100000000031628395c71869bb1c0aa95806b55402b16000000000d22374d62778ca9baaf9a856f5a362513000000091e3245576d8297acc2cab9a898836e5e4c3928160300091e32455673889db3b29d88735544311d08000000000000000000000f21364a5b6e8399aebfb39e8875604b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a39576c8297acc1b49f8a75604b36200b000000000000000000000001131e32455663798a9eb4b1a0927d687c91a4b5b49f8c79634e3c2c19000000000000000000000000000000000000000000000000000c21364a5b70859aafb4a2917c665a4a3e3632353e4b6074879db2b49f8a766054504b46392c1e0e0000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000081d31445572879db2a9937e6954445572879db2a9937e69543e29140000000000000000152a3f556a7f94aaad98836d58432e180000000000000000000000000f24394e647a7a7a7a7b8399aec1ab96817a7a7a7a7a7a7a7b77614c37220c00000000000000000000000006162633435060687a87969faab4bcb5b1a9a59c98959392929394989ca4a9b1b6c2b7b2a0988678635b4935210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572889db2bda8937e68533e29130000000000192e44596e8399aec2ad98826d58432d18000000000b20354a60758a9fb4b29c87725443301c0700000b21364b6075899eb4bcb5bcb2a0907c665745321e0f00021628385b70869bb0b49f8a75604b36200b00000000000000000000071a2d3d4e64798ea1b3b8a7937e69555f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5771869cb1c5af9a85705645321d0900000000000000000000000002162838495b677d929fb1b49f8a77849bb0bcab98826d5b49351e0e00000000000000000000000000000000000000000000000000071a2d3d50657b8fa0b2b39d8878645c4f4b45494e5c677d91a5b7af9a85706d69656157493c2c190600192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000011426375a6f859aafab96816c56375a6f859aafab96816c56412c17010000000000000012283d52677d92a7b09a85705b3827150200000000000000000000000d21364a5c646565656a7f94a9bfaa95806b65656565656565615947341f0a0000000000000000000000000008162533424e5c6475808c989fabb3b8c3b6b2aeaaa8a7a7a8aaadb1b5c2c2b6b1a69d928375625a493d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000011527375b70859ab0c0ab95806b56402b160100000001172c41566c8196abc1af9a85705a36261401000000071c30435472879cb2b49f8a75604a35200b0006192c3c52687d92a8b9ab9fabb5b29d8775604b3d2d180800192e43586e8398adbcab8d78624d38230d00000000000000000000000f22364a5c6f8399aebfb29d877375757575757575757575757575757575757575758c9fb4c8aa95806a5538281502000000000000000000000000000a1a2c3d4d5f6d8197a4b5a89b869ba2b4b49f8c79634e3d2c1a0000000000000000000000000000000000000000000000000000000f23374b5d6d8298a4b6a69d877a6c6460565b636b7a899eb3c3b49f8b85827e7b75625a4935200c00192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100000182d42576d8297acae99836e5944576d8297acae99836e59442e19000000000000000010253a4f657a8fa4b29d88735645311d090000000000000000000000071a2d3e4a4e505052677c92a7c9ad98836d585050505050504c473a2a18040000000000000000000000000000071524313e4b57616b79838c969ea6abb0b4bac7bcbdbcbdbcc8bbb4b0aba49c93887d6e6157493c2c1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adc2ad98836d58432e18000000000014293f54697e94a9beb29d87725443301c08000000001325365a6f859aafbaa98c77624d37220d000c2035495a70859ab0b59f8c9ba3b5a595806b5b4a36251300162b41566b8096abc9a5907a65503b25100000000000000000000000071b2d3e4f647a8fa1b3b7a59d8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b9fabbcbbaa907b65503b25100000000000000000000000000000000f1f30414b6074869ca8b5a39ba3b4bcab98836e5b49351f0e000000000000000000000000000000000000000000000000000000081c2e3f4b6175869ca5b4a59d8c817a75737478808a9ea7b8c2baa99f9b9793908878624d38230d00192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100000152a3f556a7f94aab09b86715c38556a7f94aab09b86715c38281603000000000000000d22384d62778daab49f8a75604b36200b0000000000000000000000000f202d36393a3a4f647a8fabbcb09a85705b3c3a3a3a3a3a37342a1c0c000000000000000000000000000000000613202e39464b5b636e79818890959b9fa9a5a7a8a8a8a7a5aa9f9b958f877e75675f4c46392c1e0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac0b09b85705b382715020000000012273c51677c91a6bcb49f8a75604b35200b00000000182d42576d8297acc7a48f7a644f3a250f011426374d63788da2b4af9a84859bb0b49f8c79635443301c0c13293e53687e93a8bda7927d68523d28130000000000000000000000001022364a5c6f8499afc0b7aa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faabbc9b49f8a76604b36210b00000000000000000000000000000001131e32455663798a9eb4b5b0b5c1b59f8c79634e3d2c1a0000000000000000000000000000000000000000000000000000000000111e3246576378879aa2b3aa9f978f8b898a8e959fa8b7b3adadadadadaca9a695806b55402b1600192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b2610000012273d52677d929b9b9b8973564552677d929b9b9b89735645321e09000000000000000b20354b60758a9fb4ab8d78634d38230e000000000000000000000000010f1a212425364c61768b9fb5b39e89735a483525252525221f180c00000000000000000000000000000000000002101b28323d4a4e5b636b747b80868a8d909192939292908d8a85807a726960564d4133291b0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdb29d88735645311d09000000000f243a4f64798fa4c7bbaa8c77624d37220d00000000152a40556a7f95aabca7917c67523c2712081d3144556b8095abc0a9947f7c91a2b4aa9b8572604a3a2a1811263b51667b90a6bbaa95806a55402b15000000000000000000000000071b2e3e4f647a8fa2b4c8bbb4b4b3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b2b4bbc8c5b09b85705745321e090000000000000000000000000000000002162838495b677d92a5b7c5c9c3ae98836e5b49361f0f000000000000000000000000000000000000000000000000000000000003162839495a637684939ea6b1aca4a79e9fa9aab4b1a69d989898989898989898836e58432e1900192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000f24394e647a858686868575604b4e647a858686868575604b36210b00000000000000081c30435472879db2a5907a65503b25100000000000000000000000000000070d0f1e33465772879cb2b8a78d78624d38221210100c0a040000000000000000000000000000000000000000000b161e2d363d494e5560656b7075787b7c7d7e7d7c7b7875706b655d544b4538301e170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbb59f8a75604b36200b000000000d22374c62778ca9bac8a48f7a644f3a250f0000000012283d52677d92a7bca9947f6a543f2a150b20354b6074889db2b5a48e7970849aaab4a2937e685947341f1123394e63788ea3c5ad97826d58422d18000000000000000000000000001022374b5d6f849aafc0cbb8a69e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9da5b7cac8ab95806b563928160300000000000000000000000000000000000a1a2c3d4d5f72879db2c7c9bfa9947f6a5c4a3a2a180800000000000000000000000000000000000000000000000000000000000b1b2c3c495861737e88949ca4a5a8a9aaa8a6a49c94888383838383838383827f6a553f2a1500192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000d22364a5c6471717171716056454a5c647171717171605645321e0900000000000000011426365a70859aafa8927d68533d28130000000000000000000000000000000003172939586d8298adc4a8937e6953402f1d0f0c0c0c0903000000000000000000000000000000000000000000030f1a212c3537444b505654606265676869686766636055564f4b3f3632281a130300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3c5bcab8d78634d38230e000000000b20354a60758a9fb4bca7917c67523c27120000000010253a50657a8fa5c8ac97816c57422c17182a3a51667b90a6b7b19c867163798b9fb4b39e8977614c3f2f1a21364b61768ba7b8af9a85705a37261401000000000000000000000000081b2e3f50657b8fa2b4c8b39e8887878787878787878787878787878787879db2c7bbaa907b66503b2611000000000000000000000000000000000000081c304354667c91a5b7b9b4b5b49f8b7a6458473625130000000000000000000000000000000000000000000000000000000000000e1e2c3a47556068767f868c9093949493918d867f756d6d6d6d6d6d6d6d6d6a61503c281300192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100000071b2d3e4a4e5b5b5b5b5b4b45383e4a4e5b5b5b5b5b4b45382816030000000000000000182d42586d8297adaa95806b55402b16000000000000000000000000000000000011263b51667b90a6b7b09b85705e4c3b2c232121211e160b00000000000000000000000000000000000000000000070f1a212731353b36434b4d505253535352504d4b44373a372e211e160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba6b8c9a5907a65503b251000000000071c30435472879cb2bea9947f69543f2a14000000000d22384d62778daabbae99846f59442f1a1f3447596e8399aebaa9937e695b6b8095a5b6a798826d5d4b38281e32465773899eb3b29d88725544311d08000000000000000000000000001023374b5d70859ab0c1af9a84727272727272727272727272727272727d92a7bcb49f8b76614b36210c0000000000000000000000000000000000011527374b6073869cb1b9a89e9faba99d8776615443301c110000000000000000000000000000000000000000000000000000000000000e1c2a37444b57616971777b7d7f7f7e7c77716a6157585858585858585855504333200d00192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000010202d363946464646463632282d363946464646463632281a0a000000000000000000152b40556a8095aaad98826d58432d1800000000000000000000000000000000000b20354b6074889db3b4a3907c6659493d3837363632281b1406000000000000000000000000000000000000000000000609151d2026263035383b3c3d3e3d3d3b3835312725221b1009020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889eb3bda7927d68523d281300000000001325365a6f859aafc1ac96816c57412c17020000000b20354b60758a9fb4b19c87715c3a2a1722374c61778b9fb4b49f8a77614c6075879db2b2a0907b655645321d29395b71869bb0b49f8a75604b35200b00000000000000000000000000081c2e3f50657b90a3b4b3a28e79645c5c5c5c5c5c5c5c5c5c5c5c5c6c8197acc1b09b86715746331e0a0000000000000000000000000000000000081d314455677d92a4b5b49e898d9fb5a5998372604a3f2f1d0d0000000000000000000000000000000000000000000000000000000000000c19273139464c5459616568696a6966625a544b4639434343434343433f3c3325150300192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000002101b22243131313131211e161b22243131313131211e160a0000000000000000000013283d52687d92a7b09a85705b3727150200000000000000000000000000000000081d3144556a7f94a5b6b29d8877635b514d4c4c4b463932241402000000000000000000000000000000000000000000000001080b10141c20232627282928272623201d15100e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628385b71869bb0bfaa95806a553726140100000000182d42586d8297adc2ae99846e59442f1900000000081d31445572889db2b49e89745847331f2e3e54697e94aabbae98836e584756657b90a0b2b19c8674604b3c2c2e44596e8399aebbaa8d77624d38220d00000000000000000000000000001123384c5d70859bb0c0ad98836e5a49474747474747474747465771869bb1c9ab96816b563929170300000000000000000000000000000000021528384b6074879cb2b9a8957f8298a6b3a1957f6a5d4c3b2b190900000000000000000000000000000000000000000000000000000000000009151d2933363a474c5053545553514d483c3632282e2e2e2e2e2e2e2a282015070000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b26100000000000070d0f1c1c1c1c1c0b0903070d0f1c1c1c1c1c0b0903000000000000000000000010253b50657a90a5b29d88725544311d0800000000000000000000000000000000011527374b6074879daab7a69c86796d6663616161574f42321f0c00000000000000000000000000000000000000000000000000000001080b0d101213141312110e0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aec2ad97826d5544311d0800000000152b40556a8095aabfb19b86715c39291603000000011426375a70859aafb9a88c76614c3721364a5c71869cb1b7a5907b66503a4c5e6e8298a7b6a4957f6a5b49352c41566b8196abc8a58f7a65503a25100000000000000000000000000000091c2f3f51667b90a3b5b49f8c78634d3b2a323232323232364b61768a9fb4bcab917b66513c26110000000000000000000000000000000000091d324556687d93a5b6b39e897677889dabb49f8d7b65594837271502000000000000000000000000000000000000000000000000000000000000010b171e212a34373b3e3f3f3e3c38342b211e161818181818181815130d03000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788dabb49f8a75604b36200b0000000000000000000000000000000000091d324556657b8c9fb4b6a49c8b827c7876767669604f3b2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8196abc0b29d8774604b3520110000000013283d53687d92a8bdb39e89735746321e0a00000000182d43586d8298adc6a48e79644f3928384f647a8fa4b5b29d8774604b35404c6277899eb3b49f8b79634d41303e54697e93a9bca7927d67523d28120000000000000000000000000000001124384c5e71859bb0bcab97816c5948341f1d1d1d1d253a50657a8faabbb49f8b76614c37210c00000000000000000000000000000000031628394b6074879db2b9a895806b657b8d9fb4ab9e8978625544311d130100000000000000000000000000000000000000000000000000000000000000030a0c181f2226282a2a29272220190d09030003030303030300000000000000192e43586e8398a9947f69543f2a1400000000000000000000000000000000081d32475d72879ca5907b65503b261000000000000000070c0e1415120b0902000000000000000000000000000000000000000000000b20364b60758a9fb4ab8d78624d38230d0000000000000000000000000000000000021528384c5d687e939faab6aa9f98918d8c8b8b7e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e121416161514110d0b05000000000000000000000000000004090b0b0b0b0b00000000000000000014293e54697e93a9beb7a5917c66513f2f180800000010263b50657b90a5bab8a78b76614b36210c00000000152b40556a8095aabba6917c66513c3245566c8297acbcab95806a544330344759687e93a2b4a99a846f5f4d3a3c51667b91a6bbaa957f6a55402a15000000000000000000000000000000091d2f4051667c91a4b5b49f8a77624c3a29170407152a3f546a7f94a9c8b19b86715847331f0a00000000000000000000000000000000091e324557697e93a5b7b49e8a77615d6a7f95a1b3a79b8574604b41301f0f00000000000000000000000000000000000000000000000000000000000000000000040a0c1013141514110d0b050000000000000000000000000000000000192e43586e8398a9947f69543f2a1410101010101010101010101010101010101d32475d72879ca5907b65503b26100000000000000f1a2123292b27201d150a000000000000000000000000000000000000000000081d31445573889db2a5907a65503b25100200000000000000000000000000000000000a1a2f3f4e60697e8b9ca5b1b4ada6a2a1a199846f5a3a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0e19212327292b2b2a2926222019100b070000000000000000070c0e1a1f2020202020110f0900000000000011273c51667c91a6bbc3af9a846f5d4b3625130000000e23384e63788da3c5c5a38e78634e39230e0000000013283d53687d92a8bda9937e69543e364b6075899eb3b59f8c78624d36262a3b4a6072859aaab4a2927d675847394e64798ea3c6ac97826d57422d18000000000000000000000000000000001220354a6073869cb1baa995806b5846331f0a06192c3c596e8499aec1ab96816c563a2917040000000000000000000000000000000417293a4b6075889db3baa996806b584b6072849aa6b4a396816c5f4d3d2c1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a9947f69543f2a2525252525252525252525252525252525252532475d72879ca5907b65503b26100000000008131c2d36393f403c3632281a100200000000000000000000000000000000000000021527375b70859ab0a7927d68523d2818170f0d07000000000000000000000000000000112131424f60697b87929b9faba9abacaa9d88735847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e1920232c35383d3f4041403e3b38342b25201c130802000000010f1a21232f34353535353526241d1204000000000f24394e64798ea3c6c8b4a2907b655443301c0e00000b21364b60768ba7b9bba5907b66503b26110000000010253b50657a90a5c9ab96816c56413c52677d92a8b9af9a846f5a4935181c30435463798b9fb4b39e8876614c3f4c61768ba8b9af9a856f5a36261401000000000000000000000000000000071c304354677c91a4b6b39e8976614c3828150c2035495a73889eb3c2a6917c67513c2712000000000000000000000000000000000a1f3346586a7f94a6b8b49f8a77624c43546177889daab09f917d675b493928160300000000000000030c12142020202020202020202020202020202020202020202020202020202016140e04000000000000000000000000000000000000192e43586e8398a9947f69543f3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a475d72879ca5907b65503b2610000000081825303d4a4e5455524b45382d20100000000000000000000000000000000000000000182e43586d8398adaa95806a55402d2d2c24221b10020000000000000000000000000003142432424f5d65747d868b9194969695928d76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2b35383c494d525455565553504d483c3a3530251d150a00010f1f2d363944494a4a4a4a4a3c38302212000000000c21374c61768ca8b9cdc0b09b8572604a3c2c1b0b00091e32455674899eb3bca7927d67523d2812000000000e23384d63788dabbcae99836e5944495a70859aafb9a7927d67523c2b191325364a5b6b8095a5b6a697816c5d4b465874899eb3b29c87725443301c08000000000000000000000000000000001325364b6073869cb1b9a8947f6a5645321d0d23384d62788da6b8b6a48c77614c37220c00000000000000000000000000000004182a3a4c6176899eb3baa996816c5948364759657b8c9fb4b49e8a79635746321e14020000000000071420272a353535353535353535353535353535353535353535353535353535352b292116080000000000000000000000000000000000192e43586e8398a9947f69544f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f5d72879ca5907b65503b2610000000132536434a5b63696a6760564a3e2d1c0c00000000000000000000000000000000000000162b40556b8095aaad97826d58424242423a372e20100000000000000000000000000000061424323f4b55606871777c7f81817f7c776f5847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b28323c494d575b6367696b6b6a6966625a57504a433631271a120f202d3d4a4e595e6060606060514c40301d090000000a1f33475874899eb4c9c9b5a3937e685a493928190a021628385c72879cb1bea9937e69543e2914000000000b20364b60758a9fb4b09b86715b394d63788c9fb5b39e8975604b36210e08182d3d4b6074879cb2b59f8d7a6455445c71869cb1b49f8a75604b35200b00000000000000000000000000000000081c304354677d92a4b6b39d8875604b372614273d52677d92a7c4b19c86715947341f0a0000000000000000000000000000000a1f3347586a8095a7b8b49f8b78624d3b2a3a4b5d6a7f94a1b3a89c8675614b4231201000000000031425323b3f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a413d3426160400000000000000000000000000000000192e43586e8398a9947f696565656565656565656565656565656565656565656565656572879ca5907b65503b26100000071c304354606b797e807c74645c4a3a2a170400000000000000000000000000000000000013283e53687d93a8af9a85705a585858574f4b3e2e1c0c00000000000000000000000000000614212e37444b525962676a6b6c6a676259473a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c39464b5a626c73787c7e80807f7e7b77726c6560544b453830201c2d3e4a5b636f747575757575665e4c38240f00000004172a3a5c71879cb1c6d2c1b49e8a7863574637281b0f1426375c71879cb1bfaa957f6a55402a1500000000091d31455673889db2b39e89735746546b8095abbcac97816c5645321e09000f1e324556657b90a0b2ab9c8673604b596e8499aebbaa8c77624d37220d00000000000000000000000000000000011426364b6073869cb1b7a6937e685544311d2838576c8196acc1ac97816c573a2a1804000000000000000000000000000005182b3b4c6177899eb4bbaa97816c5948341d2e3f4a60728399a5b6a498826d604e3e2e1c0c0000000c2032434f546060606060606060606060606060606060606060606060606060606056514434210e00000000000000000000000000000000192e43586e8398ac96817a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7b889da5907b65503b261000011426364a6072808b949591867a645847331f0a00000000000000000000000000000000000010263b50657b90a5b29d87726d6d6d6d6c645c4b3a2a180400000000000000000000000000000210192731353b474c5254565755524c473b2a1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2c3d4957616c7881888d929495969593908d87827a736860564d41342b3a4a5c647984898a8a8a8a8d7c66513c2611000000001a2f44596f8499aec4c3b7b2a89b8575615545392d211d31445572879cb2bfaa947f6a553f2a1500000000021527385b70859bb0b8a78b76614b6074879db2b5a38e79644f3828160200021628384c5d6d8298a7b5a4947f695a576c8196acc8a48f7a654f3a25100000000000000000000000000000000000081d314455687d92a5b6b29c8774604b352032455671869bb0c3a7917c67523c27120000000000000000000000000000000b203448596b8096a8b9b49f8b78624d3b2b191c3043546176879daab2a0937e695c4b3a2a1808000012273b4f6169757575757575757575757575757575757575757575757575757575756b62513d291400000000000000000000000000000000192e43586e8398ad9f968f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f9da6a5907b65503b261000081c304354687e939faaaaa49c8876614c37210c0000000000000000000000000000000000000e23384e63788dabb49f8c8282828282817a645847331f0a0000000000000000000000000000000009151d202a34373c3f4141403d37342a1d0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3b495b6375818b969da6a7a9aaabaaa8a5a59d978f877e74675f4d483b4758647a8a999e9faba195806b5e4c38240f00000002172c42576c8197acc1b7a59d9ca399837360574a3d352c354b60758a9fb4bda8937e68533e29130000000000182e43586d8398adc5a38e786350667b90a6b7b19b86715c4a361a0a0000000a1a2f3f4c6177899eb3b49f8a786254697e94a9bca7927c67523d27120000000000000000000000000000000000011426374b6074879db2b6a5917c6752402f364b60768a9fb4b6a58c77624d37220d000000000000000000000000000005192b3c4c62778a9fb4b4ab97826d5a49351d0d1325364758647a8b9fb3b49f8b7a6458473625130000142a3f54697f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a806b56412b1601000000000000000000000000000000192e43586e8398adb3aca4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4b2b3a5907b65503b2610000b20354b6074889eb3bbc2b6a6947f6a543f2a150000000000000000000000000000000000000b21364b60768a9fb5aa9f9797979797978a77614c37220c000000000000000000000000000000000001080d181f22272a2c2c2a27221f180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384859637986979faab2b7b5b1aba9a7a8abafb2aca59c93877c6f62594c546176879da8b3b5a5998372604b40301d0900000000152a3f546a7f94a9bfb29d87869ca1998375635b4e493d474f647a8fa9bac3a6917c67513c27120000000001162b40566b8095abbba5907b66586e8398aebaa9937e69543e2d1b0000000000111f344759687d92a2b4a899836f5e677c91a6bcaa947f6a553f2a15000000000000000000000000000000000000091d314455687d93a5b7b19b86715e4c383a4f657a8faabbb29c8772594834200b00000000000000000000000000000b2034485a6c81979f9f9f9e8c79634e3c2b190008182a3a4a5c697e939e9f9f9d8776615443301c070012273c51677c919f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f98836e59432e1900000000000000000000000000000000192e43586e83989e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e907b65503b2610000d22384d62778da7b8ccd3c5ae99836e59442e19040000000000000000000000000000000000091e32455673889da8a8a8a8a8a8a8a8a8907b65503b26100000000000000000000000000000000000000000050b0d1215161715120d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3145566278889ca4b4bbb5b0a49c9693929395999ea8b0b2a59d918477665e6072849aa5b7baa89d8776615443302212000000000012273d52677c92a7bcb49f8a798a9fa19985796c635b5a58616e8399aec7b7a58d78624d38220d000000000013283e53687d93a8bda8937e6861778a9fb4b49f8a76614c372110000000000004182a3a4a6072849aa9b3a1917c6664798fa4c6ac97826c57422d17000000000000000000000000000000000000011527374b6074879db2b5a3907b65503e3f54697f94a9c8ac97826d573b2b180500000000000000000000000000000d22384d62788a8a8a8a8a89806b5b49351e0e00000c1c2e3e4f606b81898a8a8a8b8375604a35200b000f243a4f64798fa4b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b09b86715b39281603000000000000000000000000000000172d42576c8188898989898989898989898989898989898989898989898989898989898989898989897a65503a2510000d22374c62778ca4b6cad0c2ad98836e58432e19030000000000000000000000000000000000021628385b708592929292929292929292927d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031629394b6074869ca6b6beb2a39b8f86817e7d7e808489919ba3b3b2a199897c696b8095a2b3bdb49f8a796358473626140400000000000f253a4f647a8fa4c7baa88c777d8d9fa39b8b8178727071768197a1b3c7b29d87725a4835200b000000000011263b50667b90a5bbab95806b697e93a9baad98836e5847331f0a0000000000000c1c30435463798b9fb4b29d887561778ca8baaf9a846f5a36251300000000000000000000000000000000000000091d314455687e93a6b7af9a846f5c4a3c596e8399aec3a7927d67523d28120000000000000000000000000000000b2034485a627474747474746b62513d2c1a000000001020324251626b74747474746e605443301c07000c22374c61778ca8bacdc5b8b3a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89e88735746321e09000000000000000000000000000000152a3e52636c7373737373737373737373737373737373737373737373737373737373737373737373655d4b37230e000b2034485972869cb1b9c0b3a4927d68533d28130000000000000000000000000000000000000010263b50657b7d7d7d7d7d7d7d7d7d7d7d79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000060c0e10100d0b06000000000000000000000000000000000000000000000000000000000000000000000a1e324657697e93a4b5c1b2a098857a716c6968696b6f757c85919da6b1a79e8d7f7c8d9fb5c0b09e927d675b4a3a2918080000000000000d22374d62778ca9bac6a48e79697e929faa9f968d8885868a979fb1bfbaa995806b563c2b190500000000000e23384e63788da3c4ad98836e71869cb1b7a5907b65503a2a170400000000000000132536495b6b8095a4b6a696816c74899fb4b19c87725443301c07000000000000000000000000000000000000021527374b6075889db2b4a28f7a644f485a73889db3b7a58d78624d38220d00000000000000000000000000000005192b3c484d5e5f5f5f5f5f565144331f0e00000000021424344451565e5f5f5f5f594a4336251300000b1f34475974899fb4c9b8a69e9292929292929292929292929292929292929292928b76614b36210c0000000000000000000000000000000f22354552575e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e504b3f2e1c080005182b3b50657b909ea7a7a29a8674604b36200b000000000000000000000000000000000000000e23384c5d656868686868686868686868635b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000010f1a212325252320190e0600000000000000000000000000000000000000000000000000000000000000000c21364b6176889eb3c2b5a3988274655d5654525356566067707d88979fb4ab9f948b9fabbcb4a296816c5f4d3d2d1c0c000000000000000b20354b60758a9fb4bca6917c67697e8c9da6aba59d9a9b9fa9b1bdbcb49f8a77624c37220e0000000000000b21364b60768ba6b8b09b8570798ea4b5b29d8774604b35200c000000000000000008182c3d4b6074869cb1b49f8c7a72879cb1b49f8975604a35200b00000000000000000000000000000000000000091d324556697e93a6b8ae99836e5b4d62788da6b7b29d87725a4835200b000000000000000000000000000000000d1d2b3438494a4a4a4a49403d332616000000000000061626343d41494a4a4a4a443530251808000004182a3b5c72879cb1c7b39e887e7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e75614b36210c000000000000000000000000000000051727353e4249494949494949494949494949494949494949494949494949494949494949494949493a372e21110000000d23384c5d687e8990918e8477625645311d0900000000000000000000000000000000000000091c2f3f4c5053535353535353535353534e4a3d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000f1f2c35393a3a38352b211a0f0100000000000000000000000000000000000000000000000000000000000012273c51677c91a7b8c1b09b857460564b3f3e3d3e38454b515f677681939faab4aa9faabbb7a69a8473604b41301f0f0000000000000000081c30435472879db2bea9947e6960687b88979faab2afb0b4bac1b4ab9f937e685948341f0b000000000000091e32455673889eb3b29d88738197acbcab95806a5443301c080000000000000000000f1d324556657b90a0b2aa9b85758499afbaa98c77624c37220d00000000000000000000000000000000000000021528384b6075889db3b49f8c796352677c91a7c4ad98826d583c2b190500000000000000000000000000000000000d1920223435353535342b2821160800000000000000081622292c34353535352f201c1308000000001a2f445a6f8499afc4b49f8974686868686868686868686868686868686868686868615746331e0a000000000000000000000000000000000917222a2d343434343434343434343434343434343434343434343434343434343434343434343425231c1103000000091c2f3f4e6068767b7c796f62594838271502000000000000000000000000000000000000000011212f383b3d3d3d3d3d3d3d3d3d3d3d39362d1f0f0000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e4f4f4d493c352c1f0f000000000000000000000000000000000000000000000000000000000003182d42586d8297adc5b5a38f7a645645382e292829283236414d58616c7e8c9fa9bab4bbbaa99d8777615544312313010000000000000000011426365a6f859aafc1ab96816c565d6576828c979ea7a7a9a9a7a39b8d806b604e3b2a1805000000000000031628385b70869bb0b49f8a75899eb3b59f8c78624d36261401000000000000000000021528384b5d6d8298a7b5a3937e8196abc7a48f7a644f3a250f00000000000000000000000000000000000000000a1e324556697f94a7b8ab97826d596c8196abc4a8927d68533d281300000000000000000000000000000000000000050b0d1f1f1f1f1f1f16140e04000000000000000000050e14161f1f1f1f1f190b07000000000002172d42576c8297acc1baa98c776153535353535353535353535353535353535353534b46392917030000000000000000000000000000000000050f15171e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e100e08000000000000112131424e57616667635b4c483b2a1a0a00000000000000000000000000000000000000000003111c2326282828282828282828282824211a0f0100000000000000000000000000000000000000000000000000000000000000000000000c2135495b636565625a4e493d2c1d0d00000000000000000000000000000000000000000000000000000000011527375c71879cb1c5b09b85705c4b38271a141314161e21303a464c60687c8a9fb4c9c9b49f8b7a6459473727150500000000000000000000182d42586d8297adc2ae99846e594b58616d7981898e929494918d857b6b625042311d0d0000000000000000192e43596e8398aebaa9927d92a7b9af9a846f5a4835180800000000000000000000000a1a2f3f4c6177899eb3b39e8a7f94a9bca7917c67523c27120000000000000000000000000000000000000000031628384b6175889eb3b49f8b776270869bb0b7a68d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfc7a48f79644f3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3633291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000313243139464b50524e4a3d342a1d0d000000000000000000000000000000000000000000000000090e1013131313131313131313130e0c07000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63797a7a7870635b493b2a1805000000000000000000000000000000000000000000000000000000081d31445573899eb3bfaa95806a553e2e1a0a0000000209131b29384859657b8b9fb4cabfa9947f6a5c4b3b2a19090000000000000000000000152b40556a8095aabfb19b86715c3a474c5b636c74797d7f7e7c7870655d5044332414000000000000000001162b41566b8096abc7b19b869bb1b8a7927c67523c2b1900000000000000000000000000111f334758687d92a2b4a89c869cb1bfa9947f6a543f2a150000000000000000000000000000000000000000000a1e3246576a7f94a7b8a995806b758a9fb4b29d88735a4935200c000000000000000000000000030c12142020202020200f0d070000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcbca6917c67513c282828282828282828282828282828282828211e170b00000000000000000000030c12142020202020200e0c06000000000000000000000000000000090f111d20202020201f0d0b05000000000000000000000000000000000006131b2932363b3c39362d1f180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d8f8f8d8579635948341f0e0000000000000000000000000000000000000000000000000000000b20354b60758a9fb5bca7927d67523d28120000000000010f1d3145566278889eaabbcac5b09a8573604a3c2b1905000000000000000000000013283d52687d92a7bdb39e89735746333d494e55606468696967635b504c3f3326150600000000000000000014293e53697e93a8beb5a39ba3b5b39e8975604b36210e0000000000000000000000000004182a3a4e6070849aa9b5a49ca4b5c1ac97816c57422c17020000000000000000000000000000000000000000031628394b6176899eb3b39e8874798ea9baad98836e583c2c19060000000000000000000000071420272a35353535353524221b100200000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7bea9947f69543f2a14131313131313131313131313131313130c0a0300000000000000000000071420272a3535353535352320190e00000000000000000000000004121d2426323535353535342220180d0000000000000000000000000000000000000b161e21262723211a0f050000000000000000000000000000000000000000000000000000030a0c0d0f0f0b07000000000000000000000000000000040a0c141a1d1e1d1b160f0d070000000000000000000000000000000000000b20364b6074879da39b8977624c3c2c190600000000000000000000000000000000000000000000000000000b20354b60758a9fb4bba5907b66503b261100000000000f2031414b6074859ba6b8bbb4b4b4a2937e695a4835200f000000000000000000000010253b50657a90a5c9b8a78b76614b362c3537444b4f525454524d493c382f2115070000000000000000000011263b51667b90a6bbc1b5b1b5c1ac96816c5645321e0900000000000000000000000000000c1c31414e63798b9fb4b5b1b5c2c4af99846f5a442f1a000000000000000000000000000000000000000000000b1e3346576a7f95a7b8a7927d7d92a7c5a8937e68533e29130000000000000000000000031425323b3f4a4a4a4a4a4a3a372e201000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bac1ac96816c57412c1702000000000000000000000000000000000000000000000000000000031425323b3f4a4a4a4a4a4a38352c1e0e000000000000000000000012222f383b474a4a4a4a4a4a37342b1d0d000000000000000000000000000000000000030a0c11120e0c0700000000000000000000000000000000000000000000000000080d0f171e21232424201c13080000000000000000000000000c171f212a30333332302b24221b100700000000000000000000000000000000081d314455687e93a6a797826d5a4935200d0000000000000000000000000000000000000000000000000000081c30435473889eb3bba6917c66513c2711000000000c1c2d3e4e5f6c8197a3b4bbaa9f9faab49e8a78624d3d2d1a07000000000000000000000e23384d63788dabbcc5a38e79634e392421263135393d3f3f3c38352c231c110300000000000000000000000e24394e63798ea3c5d2c9c6c9b5a38e79644f38281602000000000000000000000000000000132135495b6a8095a4b6c6c9d2c6b19c87715c3a2a1804000000000000000000000000000000000000000000031729394c6176899eb3af9a848095aab8a68e78634e39230e00000000000000000000000c2032434f546060606060604f4b3e2e1b07000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c4ae99846f59442f1a000000000000000000000000000000000000000000000000000000000c2032434f546060606060605e493c2c19060000000000000000000d1d2f404c515c5f606060605f4d483b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b22252933363839393530251808000000000000000000000c1c2933373f4548484745403a362d221b10020000000000000000000000000000021527374b6075889db29f8b78624d3c2b190500000000000000000000000000000000000000000000000000011426365c71869bb1bda8937e68533e29130000000818293a4a5c687d929fb1beb49f8b8c9fb4a898836e5b4a36210e000000000000000000000b20364b60758a9fb5bba6907b66513b2611141d2024282a29272321190e08000000000000000000000000000c21364b61768ba7b8ccded7c7b19b86715c4a361a0a00000000000000000000000000000000061a2c3d4b6074869cb1becedec9b49f89745947341f0a000000000000000000000000000000000000000000000b1f3346586b8095a8b4a29a869bb1b39e88735b4935210c000000000000000000000012273b4f6169757575757575645c4b37220d00000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c6b19c86715c3a29170400000000000000000000000000000000000000000000000000000012273b4f6169757575757575705a4935200c000000000000000005182b3b4c5e667275757575757462594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f2e373a39464c4d4e4e4a433625130000000000000000000417293a474c545a5d5e5c5a554f4a3e362d2013050000000000000000000000000000091d324556697e93a6aa97826c5a4834200d0000000000000000000000000000000000000000000000000000172c41576c8196acc5ac97826c573f2e1b0800001325364758647a8a9fb4bdb2a0947f8197a8b59f8c79634e3c2c1906000000000000000000091d31455673889db3bea8937e69533e291401080b0f131414120e0c060000000000000000000000000000000a1e32465773899eb3c8decdbaa9937e69533e2d1b0000000000000000000000000000000000000f1d324556657b8fa0b1c5d5cdbaa88c77614c37220c000000000000000000000000000000000000000000000417293a4c61768a9eb4b4a39ba3b5ae98836e593d2c1a060000000000000000000000142a3f54697f8a8a8a8a8a8a7a644f3a240f00000000000000000000000000000000000000000000000000000000000000001325365a6f859aafc4b39e89745847331f0a000000000000000000000000000000000000000000000000000000142a3f54697f8a8a8a8a8a8a78634d38230e00000000000000000b20344859667c878a8a8a8a8a8a77624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1c29333e4b4f575761626464605443301c0700000000000000000a1f33475861696f727372706b645c4f4a3e3123130500000000000000000000000000021528384b6075889db39f8b78624d3b2b18050000000000000000000000000000000000000000000000000011263c51667b91a7b8b29c87725d4b372211000e1c3043546176879da9bab6a498826e77899eb3ab98826d5b4935210a000000000000000000021527385b70859bb0c0ab96806b56412b160100000000000000000000000000000000000000000000000000031629395c71869bb1c6dbc9b49f8a76614c372110000000000000000000000000000000000000021528384b5d6d8297a7b8ccd7c6a48f79644f3a240f00000000000000000000000000000000000000000000000c1f3347586b8096a8bab5b1b5c1a8937e69533e291400000000000000000000000012273c51677c919f9f9f9f917c67523c27120000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2b9a88c76614c37210c00000000000000000000000000000000000000000000000000000012273c51677c919f9f9f9f907a65503b25100000000000000006192c3c4d62778a9c9fab9fa795806b594834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3a474c5c646d727678797972604a35200b00000000000000000c21374c61767f8588888785807a70645c4e4231231301000000000000000000000000000a1e324556697f94a7a996816c594834200c000000000000000000000000000000000000000000000000000b21364b6075899eb3b6a58f7a654f3f2f1c0e1e2f404a60728399a5b6b9a89c8675616b8095a9b49f8b78634d38271502000000000000000000192e43586e8398adc3ad98836e58432e19000000000000000000000000000000000000000000000000000000192e44596e8399aec3c7c3ad98836e5847331f0a000000000000000000000000000000000000000a1a2e3f4c6176889eb3bfc7bca6917c67513c2712000000000000000000000000000000000000000000000004172a3a4c61778a9fb4c7c6c7b8a78e79644e39240f0000000000000000000000000f243a4f64798fa4b5b5a9947f69543f2a140000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfc6a38e79644e39240f0000000000000000000000000000000000000000000000000000000f243a4f64798fa4b5b5a8927d68533d2813000000000000000c2035495a6c8197a8b4bcb39e8976614c3b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3b4858616e7a82888b8d8e8c77624d37220d00000000000000000e23384e63788d9a9d9d9c9a958f847a68604e41311f0f00000000000000000000000000031628384b6175889eb39f8a77624c3b2a1804000000000000000000000000000000000000000000000000091e3245576a8095a8b9ae99836e5d4c3a2a1b2b3c4c5e6a7f95a1b3bcab9e8a79635762778b9fb4aa96816c5645311d09000000000000000001162b41566b8096abc0b09b86705b382816020000000000000000000000000000000000000000000000000001172c41566c8196abb2b2b2a5907b65503a2a17040000000000000000000000000000000000000000111f334758677d92a1b1b2b2a9947f69543f2a140000000000000000000000000000000000000000000000000c1f3447596b8196a9b2b2b2b29e8974604b35200b0000000000000000000000000c22374c61778ca8bac1ac97816c57422c17020000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcbba6917c66513c27110909090909090909090909090900000000000000000000000000000d22374c62778ca9babfaa95806a55402b15000000000000071a2d3d4d63788b9fb4c6b7a5947f695846331d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263748596276838f979da5a2a38f7a654f3a251000000000000000000b20354a6074899eb2b3b1afaaa29a8b7e685f4e3d2d1a07000000000000000000000000000a1e3246576a7f94a7a996816b5947341f0c000000000000000000000000000000000000000000000000031628394c6177899eb3b3a1907b655947392a38495a667c8d9fb4bfb59f8d7c665b49596d8298adb39e8875604b36200b00000000000000000013293e53687e93a8bdb39d88735645321e09000000000000000000000000000000000000000000000000000014293e54697e939d9d9d9d9a8773604b35200c00000000000000000000000000000000000000000004172a3a4d5f6f83979c9d9d9d96816c57412c1700000000000000000000000000000000000000000000000004182a3a4c62778a9d9d9d9d9d99836e5443301c080000000000000000000000000b1f34475974899fb4c4ae99846f59442f1a000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8bea9937e69543e291e1e1e1e1e1e1e1e1e1e1e1e1e1e0b080200000000000000000000000b1f34475974899fb4c2ad98826d58432d180000000000000c21364a5b6d8298aabbc2b29d8774604b3a2917000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445562778799a1acb2a89f9d917c67523c27120000000000000000071c30435470859b9d9ea7aab4b4aa9f927d685c4a36211000000000000000000000000000031628394b6176899eb39f8a77614c3a2a17040000000000000000000000000000000000000000000000000a1f334758687d92a1b3b29d88776157473a45566278899eabbcb3a195806b5e4c3d50657b90a6b8a7907b66513b261100000000000000000011263b51667b90a6bbb59f8a76604b36210b000000000000000000000000000000000000000000000000000011263b50667c87888888878579635443301c08000000000000000000000000000000000000000000000c1c31414c6176828788888887816d57422d18000000000000000000000000000000000000000000000000000c203448596b808788888888877e68533626140100000000000000000000000004182a3b5c72879cb1c6b19c87715c3a2a1704000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbc1ab96816c5641343434343434343434343434343433201d15090000000000000000000005182a3b5c72879cb1c5af9a85705a3727150100000000081b2e3e4e63798c9fb4c8b5a4927d685645321c0c00000000000000000000000000000000000000000000070c0e1415120b090200000000000000000000000000000b20354b6073849aa5b3a59d9189878477624d37220d00000000000000000013253653687e8788898c949fa9bab49f8b79644e3f2e1b08000000000000000000000000000b1e3346576a7f95a7a895806b5847331f0b00000000000000000000000000000000000000000000000004182a3a4e606e8399a3b5a69b847561584b4b6074859ba7b8b6a5998372604b40354b6074889eb3ac97826c573b2b190500000000000000000e24394e63798ea3c5bcab8d78634e38230e00000000000000000000000000000000000000000000000000000f23384c5e66727272727270635b4a362614010000000000000000000000000000000000000000000000131f334658616d72727272726d63523e2a150000000000000000000000000000000000000000000000000005182b3b51626b72727272727268604e3a180800000000000000000000000000001a2f445a6f8499afc4b49e89745847331f0a000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c3ae99836e59494949494949494949494949494949493631271909000000000000000000001a2f455a6f849aafc4b29d87725544311d08000000000d22374b5c6e8399abbcc0b19c8673604b382815000000000000000000000000000000000000000000000f1a2123292b27201d150a0000000000000000000000000417293a52677d92a2b4a89d877c75727062594834200b00000000000000000008263a4e6068727273777f8b9fb4baa99a846f5d4b37220e00000000000000000000000000031729394c6176899eb39e8a76614c3a2917040000000000000000000000000000000000000000000000000c1c31424b6175859ba4b4a29b8476645c606d8297a3b5baa99d8776615443303144556d8297adb29d8772594834200b00000000000000000c21364b61768ba7b8c9a5907b65503b26100000000000000000000000000000000000000000000000000000091c2f404c505d5d5d5d5d5a4e4a3d2d18080000000000000000000000000000000000000000000000000417293a464c585c5d5d5d5d57524535230f00000000000000000000000000000000000000000000000000000d1d334451565d5d5d5d5d5d534e42311f000000000000000000000000000002172d42576c8297acc1b9a88c76614c37210c00000000000000000000000000000000000000000000000000000000000000081d31445572889db2c6b19b86715e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e4b4437271502000000000000000002172d42576c8297acc1b49f8a75604b35200b000000081c2f3f4f647a8fa1b3c9b4a2907c665443301a0a000000000000000000000000000000000000000008131c2d36393f403c3632281a1002000000000000000000000a1f33475870859bb0b39e89786660555a4d483b2b18050000000000000000000b1f31424e535d5d59626a7c91a1b3b4a28f7a654f3a251000000000000000000000000000000b1f3346586b8095a8a895806a5846331f0b00000000000000000000000000000000000000000000000000131e3346576177869aa2b5a29b877a6c687e93a0b1bdb49f8a7a6458473626263753687d92a8b7a58c77624d37220d00000000000000000a1e33465773899eb3bba8927d68533d281300000000000000000000000000000000000000000000000000000011222f383b48484848484539362d1f0f00000000000000000000000000000000000000000000000000000b1b293336424748484848423e352717060000000000000000000000000000000000000000000000000000001626333d404848484848483e3a312414020000000000000000000000000000152a3f546a7f94a9bfc6a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000011426375a70859aafc5b39e89737373737373737373737373737373737373605544311d08000000000000000000152a3f556a7f94aabfbbaa8d77624d38220d0000000823384c5d6f849aafbfbfaf9a84705e4c3626140000000000000000000000000000000000000000081825303d4a4e5455524b45382d2010000000000000000000000c21374c61768b9fb5aa957f6a5a4b443737342b1d0d00000000000000000000021424313a3e483b484c5e6f8499afc0ac97816c573a2a1704000000000000000000000000000417293a4c6176899eb39e8976614c39291603000000000000000000000000000000000000000000000000031729394759617684969faba59d8c817b8b9fb4beb09f927d675c4a3a291823384d62788da1a1a1917c66513c27110000000000000000031729395c71869ba6a6a695806b55402b1600000000000000000000000000000000000000000000000000000003111c232633333333323024211a0f010000000000000000000000000000000000000000000000000000000b171f212d32333333332d2a23170900000000000000000000000000000000000000000000000000000000081621282b33333333333329261f140600000000000000000000000000000012273d52677c92a7bcbba6917c66513c27110000000000000000000000000000000000000000000000000000000000000000182d43586d8298adc2b8a78f89898989898989898989898989898989898874604b36200b00000000000000000012283d52677d92a7bcc8a58f7a65503a251000000818304050657b90a2b4c8b2a08f7a644f402f18080000000000000000000000000000000000000000132536434a5b63696a6760564a3e2d1c0c00000000000000000010253b50657a90abbcab8e79634e3c31272220180d00000000000000000000000006141f2628332b344052677c91a7c5b29d88725847331f0a00000000000000000000000000000b1f3347586b8095a8a7947f6a5746321e0a000000000000000000000000000000000000000000000000000b1b2a3b47586173818d9ca4ab9f97909fa9bab4a296816c5f4d3e2d1c0c2035495a6e828b8b8b8b7f6a553f2a15000000000000000000192f44596e839090909090826d58432d180300000000000000000000000000000000000000000000000000000000090f111d1d1d1d1d1b0e0c07000000000000000000000000000000000000000000000000000000000000040a0c181d1d1d1d1d18150f06000000000000000000000000000000000000000000000000000000000000040e14161d1d1d1d1d1d13110b02000000000000000000000000000000000f253a4f647a8fa4c7bea9937e69543e29140000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfc5b8a79e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8d78624d38230d00000000000000000010253a4f657a8fa4c8bca7927d67523d281200011426364c5e70859bb0c0bbaa98836e5c4b3722120000000000000000000000000000000000000000071c304354606b797e807c74645c4a3a2a1704000000000000000012273d52677c92a7b59f8a75604b3520150d0b050000000000000000000000000000020b11131d1822374c62778ca7b8b7a58c77614c37210c000000000000000000000000000004172a3a4c61778a9fb39e8975614b39281603000000000000000000000000000000000000000000000000000c1d2a3a4755606c7b86939da5aca5b4bab7a69a8474604b4130200f06192c3c53646e7676767675604b36210b0000000000000000000e24394e63797b7b7b7b7b7a644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bac1ab96816c56412c17010000000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdd5c5b8b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a5907a65503b25100000000000000000000d22384d62778daabbbfaa957f6a55402a1500081c304354667c91a3b5c6b49f8b79634e3e2e1b0400000000000000000000000000000000000000011426364a6072808b949591867a645847331f0a000000000000000013283d53687d92a8b49f89745544311d08000000000000000000000000000000000000000000000b1f34485973889eb3c3a58f7a65503a25100000000000000000000000000000000c1f3447596b8196a9a7947f695745321e0a00000000000000000000000000000000000000000000000000000c1c2a37444b5d65747e879daabbc9bbaa9d887762554431231301000e1e3646535761616161605645321e090000000000000000000c21364a5b636666666666645c4a36220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1e20202020201f170b080100000000000000000000000000000000000000000000070b182020202020200e0c0700000000000000000000000002090b13110b0100000000000000000000000000000000000b20354a60758a9fb4c3ae99836e59442e19000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d1c0b4b0a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6927d68533d28130000000000000000000b20354b60758a9fb4c2ac97826d57422d18021527374b6073869cb1c1b9a897816c5b493520100000000000000000000000000000000000000000081c304354687e939faaaaa49c8876614c37210c000000000000000012273c51677c91a6baa98b75604b36200b0000000000000000000000000000000000000000000005182a3b5b71869bb0bda7927d68523d281300000000000000000000000000000004182a3a4c62778a9fb39e8875604b3828150200000000000000000000000000000000000000000000000000000c1927313f4b566068778a9fb4c0b49f8b7b6459483727150500000018283639464b4c4c4c4b4538281603000000000000000000071a2d3d4a4e51515151514f4a3e2e1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192022343535353535342d201d15090000000000000000000000000000000000000008131c202e35353535353523211a0f010000000000000000000a151d2028251e130000000000000000000000000000000000071c30435472879cb2c6b19b86715c39291703000000000000000000000000000000000000000000000000000000000000000e23384d63788dabbcc8b4a29a9090909090909090909090909090909090806b55402b16000000000000000000081d31445572879db2c4af9a856f5a362614081d314455677d92a4b5c5b49e8a77624c3d2c1a0200000000000000000000000000000000000000000b20354b6074889eb3bbc2b6a6947f6a543f2a15000000000000000010253b50657a90a5c4a18c77624c37220d0000000000000000000000000000000000000000000000192e44596e8399aebfaa957f6a55402a15000000000000000000000000000000000c1f3448596c8196a9a6937e695645321d0900000000000000000000000000000000000000000000000000000009151d2e3847586b8096aabbb4a2947f695d4b3b2a1909000000000a181b2933363636363632281a0a00000000000000000000000f1f2d36393b3b3b3b3b3a362e201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3437494a4a4a4a4a4a42353127190900000000000000000000000000000000000818253035434a4a4a4a4a4a39362d1f0f00000000000000000a1a2832363d3a311c1308000000000000000000000000000000001325365a6f859aafc4b39e89735746331e0a000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4c5b09a847c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b79634e39240e000000000000000000011426375a70859aafc5b29c87725443301c1628384b6074879cb2c2b8a795806b5948341f0e0000000000000000000000000000000000000000000d22384d62778da7b8ccd3c5ae99836e59442e1900000000000000000c22374c61778ca6b7a5907b65503b25100000000000000000000000000000000000000000000001162c41566b8196abc0ad97826d58422d180000000000000000000000000000000005182a3b4d62778a9fb39d8875604b37271502000000000000000000000000000000000000000000000000000000021021374c61778a9fb4baa99a8473604b3f2e1d0d000000000000000b171e21212121211e160a000000000000000000000000010f1a2124262626262624221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b484d5e60606060605f574b443727150100000000000000000000000000000000132536434a585f60606060604e4a3d2d1a0700000000000008182838454b524e4130251808000000000000000000000000000000182d42576d8297acc2b8a78b76614b36210c00000000000000000000000000000000000000000000000000000000000000091d31455673889db2c5b09b857066666666666666666666666666666666635b4a36210c00000000000000000000182d42586d8297adc2b49f8a75604b35201e324556687e93a5b6c3b39e8876614b3b2a18000000000000000000000000000000000000000000000d22374c62778ca4b6cad0c2ad98836e58432e1900000000000000000b1f34475973889db2a9947f6954382816020000000000000000000000000000000000000000000014293e54697e93a9beaf9a856f5a37261401000000000000000000000000000000000d203448596c8197aaa6937e685544311d090000000000000000000000000000000000000000000000000000000417293a53697e93a8bab49f8b78625443302010000000000000000000030a0c0c0c0c0b0903000000000000000000000000000000070c0e11111111110f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485962737575757575746c605544311d11000000000000000000000000000000071c304354606d757575757575635b4a36210c00000000000114263645566068604a43362513000000000000000000000000000000152a40556a7f95aabfc5a38e79634e39240e0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a03000000000000000000000000000000021527385b70859bb0c5b29d8873565151515151515151515151515151514e4a3d2d1a0700000000000000000000152b40556a8095aabfbaa98c77624d372229394b6075889db2c3b6a5937e695746331d0d000000000000000000000000000000000000000000000b2034485972869cb1b9c0b3a4927d68533d2813000000000000000004182a3b586d8297adaf99846f5645321e090000000000000000000000000000000000000000000011263c51667b91a6bbb29d87725544311d080000000000000000000000000000000005182b3b4d62788b9fb29d8774604b3727150100000000000000000000000000000000000000000000000000000a1f33465870859bb0bbaa97816c5a493626140200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d6277898a8a8a8a8a898173604b402f1d0d00000000000000000000000000001325364a6072828a8a8a8a8a8d79634e39230e0000000000081c30435460747d6c605443301c13000000000000000000000000000012283d52677d92a7bcbba6907b66513b262121212121212121212121212121211e170b000000000000000000000000000000182e43586d8398adc2b49f8a75604b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39362d1f0f000000000000000000000013283d53687d92a8bdc7a48f7a654f3a2e334657697f94a6b7c1b29d8774604b392917000000000000000000000000000000000000000000000005182b3b50657b909ea7a7a29a8674604b36200b00000000000000000011273c51667c91a9b49f8a75604b36210b000000000000000000000000000000000000000000000f24394e64798ea3c6b49f8a75604b35200b00000000000000000000000000000000000d2035485a6d8297aaa5927d685544311d0800000000000000000000000000000000000000000000000000000c21364c61768b9fb5b49f8b78624d3c2c180800000000000000000000000000000000000000000000000000000000000000000000000000000007111719202020202016140e0400000000000000000000000000000000000000000001080b0f1315161615130f0b09020000000000000000000000000000000000000b20344859667c8d9f9f9fa89f96806b5e4c3b2a1808000000000000000000000000071c304354677d929faa9fab98836e5b4a36210c00000000000b20354b607383928172604a41301e0e0000000000000000000000000010253a50657a8fa5c8bea8937e69533e3636363636363636363636363636363633291b0b0000000000000000000000000001162b40566b8095abc0bcab8d78634d382626262626262626262626262624211a0f01000000000000000000000010253b50657a90a5c9bca7927c675243433f4c6176899eb3c4b5a3927d675645311b0b0000000000000000000000000000000000000000000000000d23384c5d687e8990918e8477625645311d090000000000000000000c21364b61768a9fb4a9907b66503b2611000000000000000000000000000000000000000000000c21364c61768ba8b9bbaa8d77624d38220d000000000000000000000000000000000005192b3c4d62788b9fb29d8774604b362614010000000000000000000000000000000000000000000000000010263b50657b90abbcaf9a85705a48341e0e000000000001080b0d0b09020000000000000000000000000000000000000000000000000000000a18242b2e35353535352b292116080000000000000000000000000000000000000609151d2024282b2b2b2a2825211e160c090300000000000000000000000000000005192b3b4c5e6b8096a3b4bab49f8d7c6659473625130000000000000000000000000b20354a6073869cb1bbb59f8c79644e3d2d1a0700000000000c22374c61778c9f95806b5f4d3c2b19060000000000000000000000000d22384d62778daabbc0ab96806b564c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b46392917030000000000000000000000000013283e53687d93a8bdc9a5907a65503b251111111111111111111111110e0c07000000000000000000000000000e23384d63788dabbcbfaa947f6a595959595d6a8095a7b8bcab9b8572604a38271500000000000000000000000000000000000000000000000000091c2f3f4e6068767b7c796f625948382715020000000000000000000a1e3246576f8499afab96816c563c2b19060000000000000000000000000000000000000000000a1f33465874899eb3c8a48f7a654f3a25100000000000000000000000000000000000000e2035495a6d8298aba5927d675443301c080000000000000000000000000000000000000000000000000014293e53697e93a8c9a9947e69543c2b19000000000008141c2023201d15110f0900000000000000000000000000000000000000000000000718283640434a4a4a4a4a413d34261604000000000000000000000000000000040f1a212731353a3d404141403d3a363228211e160b0300000000000000000000000000000d1d2f404b6074859ba7b9bcab9d8877625443301c1000000000000000000000081c2e3f51667c91a4b5bfae99836e5c4a361f0f0000000000000b1f3447596c81969e927d675a493520120000000000000000000000000b20354b60758a9fb4c3ae98836e6161616161616161616161616161616161615746331e0b0000000000000000000000000011263b50667b90a5bbbda7927d68523d28130000000000000000000000000000000000000000000000000000000b20364b60758a9fb4c1ac97816e6e6e6e6e707b8b9fb4c2b59f8d7b655443301f180c00000000000000000000000000000000000000000000000000112131424e57616667635b4c483b2a1a0a000000000000000000000316293953697e93a8b19c87725a4935200b0000000000000000000000000000000000000000000417293a5c71869cb1bca7927d67523d281200000000000000000000000000000000000006192c3c4e63798c9fb19c8673604b36251300000000000000000000000000000000000000000000000000152b40556a8095aabaa5907b65503b26100000000008182630353836322826241d1204000000000000000000000000000000000000000000112436465359606060606056514434210e00000000000000000000000000000c181f2c3537444b4f5355565655524f4b45383632281e160a0000000000000000000000000000121d3144556278899eb3bdb8a6998372604a3e2d1b0b0000000000000000000e23374b5d70859bb0c2b3a18e7a644f3d2d1a0100000000000004182a3b4b6073849a9e8978624d402f1c090000000000000000000000081d31445572889db2c6b09b8576767676767676767676767676767676767676614b392916030000000000000000000000000e23384e63788da3c4bfaa95806a55402b15000000000000000000000000000000000000000000000000000000091d31455673889db2c8b29d888383838383868c9fa9bab6a495806a5d4d483c342a1d120400000000000000000000000000000000000000000000000313243139464b50524e4a3d342a1d0d0000000000000000000000000d22384d62788da3b5a48d78624d38230d000000000000000000000000000000000000000000001a2f44596f8499aebfaa947f6a553f2a15000000000000000000000000000000000000000e2135495b6d8298aba4917c675443301c07000000000000000000000000000000000000000000000001162b41566b8096abb8a38e79634e39240e00000001142636434b4d4b45383c382f2212000000000000000000000000000000000000000000172b4053646e75757575756b62513d2914000000000000000000000000000e1c2a333d494e556064686a6b6b6a68646056524b463932281b110000000000000000000000000002152737485a667c919fb0c1b3a1947f695c4a3929160300000000000000071a2d3d4f657a8fa2b4c0af99846f5c4a361f0f00000000000000000c1d3144556277889d99846f5e4c38230f0000000000000000000000011426375a70859aafc5b5a39b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b88735746321e0a0000000000000000000000000b21364b60768ba6b8c2ad97826d58422d18000000000000000000000000000000000000000000000000000000021527385b70859bb0c5b7a69d98989898999b9fabbac7b19c867a726c625a4c473b2f221507000000000000000000000000000000000000000000000006131b2932363b3c39362d1f180d000000000000000000000000000b2034485a71869bb1a8937e68533e291300000000000000000000000000000000000000000002172c41576c8196acc1ac97826d57422d1800000000000000000000000000000000000000061a2c3d4e63798c9fb19c8673604a352012000000000000000000000000000000000000000000000000142a3f54697f94a9b9a38e79644e39240f000000081c3043546062605658514c402f1d090000000000000000000000000000000000000000192e43596e838a8a8a8a8a806b56412b160100000000000000000000010f1f2c3a474c5b636d75797d8080807f7d7a756f6861574b45392f1c130800000000000000000000000009192b3c4d5e6c8196a3b5bfb49f8b7a645746321e13000000000000000c21364a5b6f8499aec0b4a28f7a644f3e2d1b010000000000000000011527374759667c91a1907b66503d2d1a070000000000000000000000182d43586d8298adc2c1b5b0a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a68b76614b36210c000000000000000000000000091e32455673889eb3c5af9a85705a36261401000000000000000000000000000000000000000000000000000000192e43586e8398adc3c4b7b2aeaeaeaeaeb0b4bcc9bcb6a49c8f8881786c61594c40332515070000000000000000000000000000000000000000000000000b161e21262723211a0f05000000000000000000000000000005192b3c556a8095aaae99846e593c2b1905000000000000000000000000000000000000000000142a3f54697f94a9beaf9a846f5a36251300000000000000000000000000000000000000000e2136495b6e8398aba4917c6651402f1d09000000000000000000000000000000000000000000000013283d52687d92a7c5a5907b66503b26110000000b20354b60737875716d665e4c38240f0000000000000000000000000000000000000000162c41566b81969f9f9f98836e59432e1900000000000000000000000f1f2d3d4958616d7982898f9295969695928f8a847d756a60574c40302518090000000000000000000000000e1e30404b6074859ba8b9baa99c8675614b41301e0e000000000005192b3c4e63798c9fb5c0af9a846f5c4b3720100000000000000000000009192a3b4c5e6f849a9a85705b4a36210c0000000000000000000000152b40556a8095aabfd2c9c6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6c5a38e79634e39240e000000000000000000000000031628385b70869bb0c5b29d87725443301c08000000000000000000000000000000000000000000000000000001162b40566b8095abc0cbbbaea9a3a3a3a3a3a3a4a5a7acb2b1a69d968b8177665e504333251506000000000000000000000000000000000000000000000000030a0c11120e0c07000000000000000000000000000000000010253a50657a8faab39e88735a4834200b00000000000000000000000000000000000000000012273c51677c91a6bcb29c87725443301c0700000000000000000000000000000000000000061a2c3d4e64798c9fb19b86715e4c38241100000000000000000000000000000000000000000000000f243a4f647a8fa7b8aa95806a55402f1b0b00081b2e3e566c808d8a86827c66513c2611000000000000000000000000000000000000000014293e54697e93a9b5b09b86705b382816020000000000000000000a1a2d3d4a5b6376828c979ea8a8aaababaaa7a99f9a92897f75665e4a4336261909000000000000000000000000121d32455663788a9eb4bdb6a497826d5f4d3c2c1909000000000b2035485a6d8298abbcb4a28f7b65503e2e1b0200000000000000000000162633424e53667b90a28e79634e39240e000000000000000000000013283d53687d92a8bdd0bfb3afa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6917b66513c261100000000000000000000000000192e43596e8398aec3b49f8a75604b35200b01010101010101010101010101010101010000000000000000000013293e53687e93a8bdc2ae9d948d8d8d8d8d8d8f9092979ca4aeb3a99f97887c6a615043332413000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4a78d77624d38220d0000000000000000000000000000000000000000000f243a4f64798fa4c7b49f8a75604a35200b00000000000000000000000000000000000000000f21364a5c6e8399aea3907c6651402f1c09000000000000000000000000000000000000000000000b20354b6074899eb3b19b86715e4c39291b141522374b5c73889e9f9c96816c57412c17020000000000000000000000000000000000000011263c51667b91a6bbb39d88735645321e090000000000000000031628384a5b637987979faab3b9b4afacabadafb3b4afa79e95877c6b60544437261401000000000000000000000002152838495a677d919fb1c2b1a0927d675a4937271502000004182a3a4d62788b9fb4c1af9a85705d4b372010000000000000000000000e1e334451606871748a9f95806a55362513000000000000000000000010253b50657a90a5c9c7b3a1999191919191919191919191919191919191917e69543e291400000000000000000000000001162b41566b8096abc0bbaa8d77624d38221717171717171717171717171717171717170b09020000000000000011263b50667b90a5bbbea9947f797878787878797b7d81878e999fabb4a69d8d7f6a615042311e0e00000000000000000000000000000000060b0d1114151514120f0b090200000000000000000000000000000000000000091e32465773889db2a48f7a654f3a25100000000000000000000000000000000000000000000c22374c61778ca9babaa98c77624d37220d0000000000000000000000000000000000000000071a2d3d4f647a8ea1b09b85705e4c38231100000000000000000000000000000000000000000000081c3043546d8398adb5a3907b655746392f292731414f647a8fa6b4aa957f6a55402a1500000000000000000000000000000000000000000f24394e64798ea3c6b8a68b76604b36210b0000000000000000091e3245566379899da5b4b8b3a99f99979697999ea7afb3b3a59d8d8072605544311d140100000000000000000000000a1a2c3c4d5f6c8197a4b5beb39e8978625544311d1100000a1f3347586c8196aabbb4a3907b65503f2e1c0200000000000000000005192b3c51626b7e868b92a99a85705443301c07000000000000000000000e23384d63788dabbcc4af99837c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c79634e39240e0000000000000000000000000014293e53697e93a8bec8a48f7a654f3a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c201d150a0000000000000e23394e63788ea3c5bfaa947f6a63636363636466676c7279838d9da6b6ab9f957f6a604e3c2c1906000000000000000000000000030a0e19202327292a2a292724201d150b0802000000000000000000000000000000030c1628395c71869cb1a6907b66513b26110000000000000000000000000000000000000000000b1f34475974899fb4c7a48f7a644f3a250f0000000000000000000000000000000000000000000f22364a5c6f8499afa3907b66503f2e1c08000000000000000000000000000000000000000000011426364f647a8fa1b3b29c877561574b3f3f37444b5f6e8399aebaa9907b66503b261100000000000000000000000000000000000000000c21374c61768ca8b9c4a38d78634e38230e0000000000000005182a3b4b6075869ca7b6b5a69e938a8482808284899099a1b2b7ab9f958273604b42311f0f0000000000000000000000000e1e30414b6074869ca8b9b9a89b8574604b3f2f1c0c031628394c61778a9fb4c1b09b85705d4c382111000000000000000000000b2035485a6b80939c9faab49e8974604a35200b000000000000000000000b20364b60758a9fb4c3ae98836e6767676767676767676767676767676767635b4a36210c0000000000000000000000000011263b51667b90a6bbbca7927c675241414141414141414141414141414141414141413632281a0a00000000000c21364b61768ba7b8c1ac97826c574e4e4e4e4f5052575c646e7b889ca4b6b59d927e685a4935201000000000000000000000000b161e212b35383c3e3f3f3e3c3a363127201d1509000000000000000000000000000715202732455672879cb1a6907b66513b261100000000000000000000000000000000000000000004182a3b5c72879cb1bca7927c67523d2712000000000000000000000000000000000000000000071b2d3e4f647a8fa2b09a85705d4b372310000000000000000000000000000000000000000000000822374b5c6f8499a8b6a59a8475655d5654545560697d92a1b2b49f8a76614b36210c00000000000000000000000000000000000000000a1f33475874899eb4baa5907b65503b2610000000000000000b1f3448596c8196a4b6b5a49c887e756f6c6b6d6f757b84909da6b5b5a097816c604e3d2c1a06000000000000000000000000131e32455663798a9eb4beb5a395806b5d4b3a2a18091e3246576a8095a8bab5a3907b66513f2f1c03000000000000000000000d22384d62788b9fb1b4bbb9a88b76614c36210c00000000000000000000091d31455673889db2c5b09b86705b515151515151515151515151515151514e4a3d2d1a07000000000000000000000000000e24394e63798ea3c5bfaa947f6a5656565656565656565656565656565656565656564b453828150200000000091e32465773889eb3c4af9a846f5a363838383a3b3d3e4a4f5d6577869ca7b9b49e8a78624d3e2e1b07000000000000000005131b2932363c494d5154555554524f4b453836312719120400000000000000000000031525323c404b60758a9fb4a58e79634e39230e000000000000000000000000000000000000000000001a2f445a6f8499afbfa9947f6a543f2a15000000000000000000000000000000000000000000001022374b5c6f849aafa2907b65503f2e1b08000000000000000000000000000000000000000000081b2e3e4e63798a9eabb4a29a867b726c69696c747f8c9fb4baa997826c5746321e0900000000000000000000000000000000000000000417293a5c71869cb1bda8937d68533e2813000000000000000d22374c62778b9fb4b8a69c86776860565756585660666f7c879ca4b5b19f937e695b4936211100000000000000000000000002162838495b687d92a0b2c1b49f8d7b655847331f1527374b6175899eb3c2b09b85715e4c382111000000000000000000000013283d53687d92aabbc9cebbaa8c77624d37220d00000000000000000000021527385b70859bb0c5b39e887356453c3c3c3c3c3c3c3c3c3c3c3c3c3c3c39362d1f0f00000000000000000000000000000c21364b61768ba7b8c1ac97826c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c605645321d0900000000031628395b71869bb0c6b19c877254433023232426282d363f4b596379899eb3b9a89a846f5c4b37220a000000000000000816233039464b555a6266696a6a6967646056524b4437301f170b0000000000000000000c2032434f545f697f94aab29d8774604b35200b00000000000000000000000000000000000000000002172d42576c8297acc1ac97826c57422d1702000000000000000000000000000000000000000000081b2e3e4f657a8fa2af9a846f5d4b37221000000000000000000000000000000000000000000000102135495b667c8d9faab4a49c9087817e7e8187949faabbb49f8a78624d392816030000000000000000000000000000000000000000001a2f44596f8499aec0aa95806b55402b1600000000000006192c3c566b8095a9bab39e887762594b45384138454b505e6678869ca5b7b49f8b79634e402f1c090000000000000000000000000a1a2c3d4e5f6d8298a4b6bcab9d8876614c42321d314455697e93a7b8b5a4917c6651402f1c03000000000000000000000014293f54697e94a9c2d2c9b49f8a75604b36200b0000000000000000000000182e43586d8398adc2b8a68b76604b36272727272727272727272727272724211a0f0100000000000000000000000000000a1e32465773899eb3c7b29d878181818181818181818181818181818181818181818174604b36200b0000000000192e44596e8399aec3b49f8975604a35200e0f11121b222e3b495b687e93a5b7b4a28f7a644f38281602000000000008162634414d57616a72787c7e7f7f7e7c79756f6760554d4033291b0e000000000000000012273c4f616a737c8a9eb3a0937e695443301c0800000000000000000000000000000000000000000000152a3f556a7f94aabfaf99846f5a442f1a00000000000000000000000000000000000000000000001023374b5d70849aafa28f7a654f3e2d1b07000000000000000000000000000000000000000000061a2c3d4d5e697e8c9ea7b4b1a49c969493969da5b4b7ab9f927e685a49351b0b00000000000000000000000000000000000000000002172c41576c8196acc1ad98826d58432d180000000000000c2035495a73889db2b7a5927d6759473b32282b273136404c596276879daabaa99a846f5e4c38230e000000000000000000000000000f1f31414b6175869ca9bab7a699836f604f3e2d364b6074879db2c2b19c8673604a35201200000000000000000000000011263b51667b90a4b5c1b9ab9a846f5645321d090000000000000000000001162b40566b8095abc0c4a38d78634e3823121212121212121212121212120e0c0700000000000000000000000000000000031629395c71869bb1c6b6a59d9696969696969696969696969696969696969696968d78634d38230e0000000001162c41566b8196abc0baa98c77624c37220d00000007111d2c3d4b6074879db2c0ad98836e5645321e09000000000416263444515f67757f878d9193949493918f8a847c74675f4c463a2c1e0f01000000000000152a3f546a7f87919ea79e948272604a362614010000000000000000000000000000000000000000000012273d52677c92a7bcb19c87725c3b2a180500000000000000000000000000000000000000000000081c2e3f50657b90a2af99846f5c4a36220f000000000000000000000000000000000000000000000f1f30404e60697b89969fa9b1b1aba9a9abb2b4b0a59d8d7f6a604e3c2c190000000000000000000000000000000000000000000000142a3f54697f94a9beb09a85705b3727150100000000000e23384d63788da6b7b29d8774604b3a2a1e1616151d202f3b4858647a8c9fb4b4a2907b65503c2b190500000000000000000000000001131e32465763798a9fb4beb3a1937e695c4a394354687d92a5b7b6a4917c675443301c070000000000000000000000000b20354b6073869ba3a7a89e8d7b655038281502000000000000000000000013283e53687d93a8bdbaa5907b65503b26100000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3c3b6b2ababababababababababababababababababababa5907b65503b2610000000000014293e54697e93a9bec7a48f79644f3a240f00000000000e1d3144556a7f95aac8b49f8a75604b36210b000000001122344451626b7d88949ca5a6a9aaaaa9a7a99f9991877c6e6158493c2d200f010000000000152b40556a8095a6b39e897f73605443301c0c000000000000000000000000000000000000000000000010253a4f657a8fa4c8b49f89745947341f0b00000000000000000000000000000000000000000000001123384b5d70859bb0a18f7a644f3e2d1a0700000000000000000000000000000000000000000001122231424e5d6577818b959c9faba6a7a6aa9f9a93877c6a615042311e0e000000000000000000000000000000000000000000000012273c52677c91a7bcb29d88725544311d08000000000013283d52687d92a7c4ab96806b5544311c0d03000209121d2b3a4b5d6d8297aabbaf9a846f5a4835200b00000000000000000000000000031628394a5b687e93a0b2bfb49f8b7a6457454a6073869cb1c3b19c8673604b36251300000000000000000000000000081d3144556278858f9290897d685d4b381a0a00000000000000000000000011263b50667b90a5bbbda8937d68533e28130000000000000000000000000000000000000000000000000000000000000001172c41566c8196abb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a8927d68533d2813000000000011263c51667b91a6bbbca7917c67523c27120000000000021527374f647a8faabbbaa9907a65503b25100000000b1b2f4051626b80929da6b2b6b8b3adabaaacaeb4afa59c918276625a4a3e2d1f0f000000000013283d53687d92a5b09c867d726259483a2a1704000000000000000000000000000000000000000000000d22374d62778caabbbaa98c77624c37220d0000000000000000000000000000000000000000000000081c2f3f50667b90a3ae99836e5c4a36210f00000000000000000000000000000000000000000000041424313f4c59616c7880868b8f9192908f8a857e74665e50433323130000000000000000000000000000000000000000000000000f243a4f64798fa4c7b49f8a75604b35200b0000000000162b41566b8096abbba6917c66513726140000000000000d1c2e3f4d63788b9fb4b59f8c78624d38220d00000000000000000000000000000b1b2d3d4e606e8298a5b6baa99c8675604b51667c91a4b6b6a4927d6754433018080000000000000000000000000001152737485a6272797c7b76685f4e3f2f1c000000000000000000000000000e23384e63788da3c4c0aa95806b55402b16000000000000000000000000000000000000000000000000000000000000000014293e54697e939d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d95806b55402b1600000000000f24394e64798ea3c6bea9947f69543f2a140000000000000b20354b60758a9fb4c7aa957f6a55402a150000031628394c5e6b80969eb2b7b8b3a69e98959596999ea8b1b2a0988678645c4a3d2d1a070000000010253b50657b8b909ba39c928577625847331f10000000000000000000000000000000000000000000000b20354b60758a9fb4c7a48f79644f3a240f0000000000000000000000000000000000000000000000001123384c5e70859bb0a18e79644e3d2d1a07000000000000000000000000000000000000000000000614212f3b474c5a626b71767a7c7c7b7976706860564c40332515050000000000000000000000000000000000000000000000000d22374c62778ca9babbaa8d77624d38220d0000000000182d42576d8297acb8a38e79634e39240e00000000000000102035495a6f849aafbcab947f69543f2a140000000000000000000000000000000f1f31424b6175879ca9bab6a497826d5f5d70859bb0c2b29c8773604b36261400000000000000000000000000000009192b3c48546064676661574e41312111000000000000000000000000000b21364b60768ba6b8c2ad98826d58432d18000000000000000000000000000000000000000000000000000000000000000011263b50667c87888888888888888888888888888888888888888888888888888887806b56412c1600000000000c21374c61768ca8b9c1ac97816c57422c17020000000000081c30435473889db3c2ad97826d58422d180000091e324657667c909eb0bcb7a79e928883807f818489919ca4b4a49c887a645b4a36210c000000000e23374b5d65757b859aa1a39b8676614c3e2d1b07000000000000000000000000000000000000000000081c30435472879db2bca7917c67523c2712000000000000000000000000000000000000000000000000091c2f4051667c91a3ae98836e5b4a36210e000000000000000000000000000000000000000000000003111d2a343c484d55586164666766646158534b453830221507000000000000000000000000000000000000000000000000000b20354a6075899fb4c8a58f7a65503a25100000000000192e44596e8399aeb7a28c77624d37220d0000000000000006192c3c546a7f94a9c9af99846f5a3a2a1704000000000000000000000000000001141e334657647a8b9fb4bfb19f917d67657a8fa3b4b6a5927d685544311808000000000000000000000000000000000e1e2b36434a4f52514c46393123130300000000000000000000000000091e32455673889eb3c5b09a85705b37261401000000000000000000000000000000000000000000000000000000000000000f23384c5e66727272727272727272727272727272727272727272727272727272726b62513d291400000000000a1f33475874899eb3c4af99846f5a442f1a000000000000011426375c71869cb1c4ae99846f59442f1a00000c21364b6175879db2bcb7a59d897d746d6b6a6c6e757c86949fa9a69d8979634e39240e00000000081c2e3f4b57606573839aa9a498826e5c4a36220d000000000000000000000000000000000000000000011426365a6f859aafbea9947f69543f2a14000000000000000000000000000000000000000000000000001124384c5e71869bb19f8c79634e3d2c1a060000000000000000000000000000000000000000000000000c181f2b35383a474c4f5152514f4c463a3632281a12040000000000000000000000000000000000000000000000000000071c30435472879cb2bca7927d67523d281200000000001a2f445a6f8499afb7a28d78624d38230d00000000000000000f243a4f64798fa4b9b39e89735847331f0a000000000000000000000000000000031729394a5c697e93a1b2bdb39e89786f8499aec1b29d8774604b3726140000000000000000000000000000000000000e182530353a3d3b3633291b13050000000000000000000000000000031628385b70869bb0c5b29d88725544311d0800000000000000000000000000000000000000000000000000000000000000091c2f404c505d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d56514434210e00000000000417293a5c71869cb1c6b19c87715c3a2a18040000000000081d31445572879db2c5b09b85705b46301b00061a2c3d53687e93a6b7bbaa9d8778676055565557566067737f8b9da6a79b86715c46311c070000000011212e39454b5562778b9fb4a08e79644e39240f00000000000000000000000000000000000000000000182d42586d8297adc1ac97816c57422c1702000000000000000000000000000000000000000000000000091d2f4051667c91a4ab98826d5b4935210e00000000000000000000000000000000000000000000000000040e1920222a33373a3c3d3b3a363329201d150a00000000000000000000000000000000000000000000000000000000001325365a6f849aafbfaa957f6a55402a150000000000192e43596e8398aeb9a48f79644f3a240f00000000000000000d22374d62778ca2b7b8a78c76614c37210c000000000000000000000000000000000b1b2d3e4f606e8399a5b7b9a79a84798ea1b3b7a5937d6855443119090000000000000000000000000000000000000008131c20242726211e170b0000000000000000000000000000000000192e43596e8398aec3b49f8a75604b35200b010101010101010101010101010101010100000000000000000000000000000011222f383b48484848484848484848484848484848484848484848484848484848413d342616050000000000001a2f44596f8499aec4b49e89745847331f0a00000000061120354b6075899fb4c4af9a846f5a452f1a000c2136495b71869cb1c4b49f8b79635a4b44374038454b5560697a889a9d8b7a644f3a250f000000000003111b28323748596e8398adac96816c5737271501000000000000000000000000000000000000000000152b40556a8095aabfae99846f59442f1a00000000000000000000000000000000000000000000000000001220354a6073869cb19f8c79634e3c2c19060000000000000000000000000000000000000000000000000000050b0d171f212527272624211f170b0902000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2ac97826d57422d180000000000172d42576c8297acbca7917c675236251300000000000000000b20364b60758babbcc5a38e79634e39240e0000000000000000000000000000000000102032424c6176879daabbb4a29a879db2bfb29d8774604b37271500000000000000000000000000000000000000000000070b0f12110c0a03000000000000000000000000000000000001162b41566b8096abc0bbaa8d77624d38221717171717171717171717171717171717170b090200000000000000000000000003111c2326333333333333333333333333333333333333333333333333333333332c2921160800000000000002172c41576c8196acc1b9a88c77614c372212121213141a212e3f4f657a8fa8bac2ad98826d58432d18000e23394e63798ea4b5c2ab96816c5b4a3c31262a273137444b5c647884887d675c4b37220d000000000000000a161e2b3b53687d92a8b19c87725544311d0800000000000000000000000000000000000000000013283d52687d92a7bdb19c87715c3a2a170400000000000000000000000000000000000000000000000000071c304354677c91a4ab97826d5a4935200d0000000000000000000000000000000000000000000000000000000000040a0c0f1112110f0c0a04000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfaf9a846f5a362513000000000014293f54697e94a9c7ac97816c5443301c07000000000000000b20354b60758a9fb4b9a48f7a644f3a250f000000000000000000000000000000000002141f334658647a8b9fb4bfb4a59da5b6b7a6937e69564531190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8bec8a48f7a654f3a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c201d150a00000000000000000000000000090f111d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d16140e050000000000000000142a3f54697f94a9bec6a48e79644f3927272727282a2c353f4b5d6d8297adc6c4aa95806a55402b150013283d53687d92a8c2b6a48d78634e3d2d1d1415151d26313e4b5a626f73675f4d3e2e1b080000000000000000030f243a4f64798fa4b49f8a75604b35200b00000000000000000000000000000000000000000010253b50657a90a5c9b49e89745847331f0a00000000000000000000000000000000000000000000000000001325364b6073869cb19f8b78624d3c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcb29c87725443301c070000000010263b50657b90a9bab29d8773604a352014020000000000000c21374c61768cabbcb9a48f7a644f3a240f0000000000000000000000000000000000000417293a4a5c697f94a1b3c3b6b2b6c3b39d8875604b382715000000000000000000000000000000000000000000050b0d0f0b090200000000000000000000000000000000000000000011263b51667b90a6bbbca7927d675241414141414141414141414141414141414141413632281a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcbca6917c67513c3c3c3c3d3e3f3d494e5d657b8c9fb4cab8a68f7a644f3a250f00182d42576d8297acc2b19c87725b49351f0f01000209141d2e3c484d5a5e514d41302010000000000000000000000c22374c61778ca1bbaa8c77624c37220d0000000000000000000000000000000000000000000d23384d62788dabbcb9a88c77614c37210c0000000000000000000000000000000000000000000000000000081c304354677d92a5aa97826c5a4834200d00000000000000000000000000000000000000000000000000000000000000000000050b0d11141516161514120f0b0903000000000000000000000000000000000000000000000010253a50657a8fa5c8b49f8a75604a35200b000000000b21364b60758a9fb4b7a5917c6651423120100100000000000f24394f64798ea4c9c3a28d78624d38230d000000000000000000000000000000000000000c1c2e3e4a60728399aec4cac7cabea9937e695645321a0a00000000000000000000000000000000000000000d19202224201d150a00000000000000000000000000000000000000000e24394e63798ea3c5bfaa947f6a5656565656565656565656565656565656565656564b453828150200000000000000000000000000000000050f15171b1b1b1b0e0c070000000000000000000000000000000000000000000000000000000f243a4f64798fa4c7bea9947e695452525252525354585b636c7b899eabbcc2b39e8874604b35200b001b30455b70859ab0c2ad98836d583d2c1a010000000001101e2b353845483c3930231202000000000000000000000b21364b60768babbca28d78624d38230d0000000000000000000000000000000000000000000b20364b60758a9fb4c6a48e79644f39240f0000000000000000000000000000000000000000000000000000011426364b6073879cb29f8b78624d3b2b1805000000000000000000000000000000000000000000000000000000000000080d0f19202226292b2b2b2a292724211e160e0c0700000000000000000000000000000000000000000d22384d62778daabbbaa98c77624c37220d00000000091e3245576f849aafc3b09b8570604e3e2e1d15090300050e1c2f4054697f94a9beb6a58b76614b36210c0000000000000000000000000000000000000000101d314455687e93a8bdcdc9cdb8a38d78635544311d1200000000000000000000000000000000000002101d2b34373a3631271a0a000000000000000000000000000000000000000c21364b61768ba7b8c1ac97826c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c605645321d090000000000000000000000000000000917222a2d3131313124211a0f01000000000000000000000000000000000000000000000000000d22374c62778ca9bac1ac96816c67676767676768696d7179818c9ea7b9c4b6a4937e695443301c08001c31475c71869cb1bfaa95806a55402b15000000000000000e1920222f3327241d12040000000000000000000000091e324556758a9fb5a38e78634e39230e000000000000000000000000000000000000000000081d31445573889db2bca6917c67513c2712000000000000000000000000000000000000000000000000000000081d314455687d92a5a996816c594834200c0000000000000000000000000000000000000000000000000000000009101b22252b35383b3e404141403f3c3936322823211a0f070000000000000000000000000000000000000b20354b60758a9fb4c7a48f79644f3a240f000000000316283952677d92a7b9b4a3937e695c4b3f31271e1618181f2b3a4c5e71869bb1c6b29d87725746321e0a00000000000000000000000000000000000000021527374b6074879db2c6b9b4b9c6b09b8573604b40301e0e000000000000000000000000000000000010202d3b484d4f4b4538281b0a0000000000000000000000000000000000000a1e32465773899eb3c7b29d878181818181818181818181818181818181818181818174604b36200b0000000000000000000000000000051727353e424646464639362d1f0f000000000000000000000000000000000000000000000000000b1f34475974899fb4c5b09b857c7c7c7c7c7c7c7d7f82868d979fabb9c3b7a69c8673604b36261401001e33485d73889db2bea9947e69543f29140000000000000000050b0d1a1e12100a000000000000000000000000000b20354b60758aabbca38e79634e39240e000000000000000000000000000000000000000000021527375b70859ab0bea9947e69543f2914000000000000000000000000000000000000000000000000000000011426374b6074879db29f8a77624c3b2a18040000000000000000000000000000000000000000000000000005121c242e373a3c484d50535556565554514e4b453939362d201c130800000000000000000000000000000000081d31445572889db2bca7917c67523c271200000000000b21364b6075899eb3c1b49f8b7a655d4b443732282d2a343c4859667b90a3b5c2ac97816c573929160300000000000000000000000000000000000000081d314455687e93a5b7b9a89ea8b8b4a296806b5e4c3c2b1a0a000000000000000000000000000000071b2d3e4a596264605645392816030000000000000000000000000000000000031629395c71869bb1c6b6a59d9696969696969696969696969696969696969696968d78634d38230e00000000000000000000000000000f22354552575b5b5b5b4e4a3d2d1a0700000000000000000000000000000000000000000000000005182a3b5c72879cb1c7b5a39b919191919191929394979ca4acb4bcbbb4a59d887863554431180800001e34495e73899eb3bea8937e69533e291400000000000000000000000509000000000000000000000000000000000c21364b61768ba0b6a38d78634e38230e00000000000000000000000000000000000000000000182e43586d8398adc1ac96816c57412c1702000000000000000000000000000000000000000000000000000000091d314455687e93a4a996816b5947341f0b0000000000000000000000000000000000000000000000000d18202f383f4b4f575a6266696a6b6b6a6967646057554e4a3d3530251811030000000000000000000000000000011426375a70859aafbea9947f69543f2a140000000000091e3245576b8095a8b9baa99e897b6960554b4639423b484c5a6277889db2c1b5a4907b66513b261100000000000000000000000000000000000000021527384b6074879db2bfb49e899ea6b8b09e917c665a493828150200000000000000000000000000000d22364a5c64787974605745321e09000000000000000000000000000000000000192e44596e8399aec3c3b6b2ababababababababababababababababababababa5907b65503b26100000000000000000000000000000152a3e52636c70707070635b4a36210c000000000000000000000000000000000000000000000000001a2f455a6f849aafc4c1b5b0a7a7a7a7a7a7a7a8a9adb1b5c2b7b2aa9f978779635a493727150000001e33485d73889db2bfaa957f6a55402a1500000000000000000000000000000000000000000000000000000000000d22374d62778ca2b7a28d78634d38230e00000000000000000000000000000000000000000000162b40556b8095aab4ae99846e59442f1904000000000000000000000000000000000000000000000000000000011527374b6074869ca59f8a77614c37220c0000000000000000000000000000000000000000000003101d2b34404c515d646c72787b7e8080807f7e7c7976706b635b514a43362e1e160b0000000000000000000000000000182d43586d8298adc1ac97816c57422c170200000000031628394c61768a9eb4c3b8a79e8a7f7467615758575959626a78869ca6b7beb19c8673604a35200b00000000000000000000000000000000000000091d314556687e93a5b7b3a1907b889eb3bcb39e8978625645321d1300000000000000000000000000000f24394e647a8b8f8675604b36210b000000000000000000000000000000000001172c41566c8196abb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a8927d68533d28130000000000000000000000000002172d42576c818586868579634e39240e00000000000000000000000000000000000000000000000002172d42576c8297acb2b2b2b2b2b2b2b2b2b2b2b2b1b0aeaba8a59d958b8176635b493c2c19090000001c32475c71879cb1c1ab96816c56412c1700000000000000000000000000000000000000000000000000000000000e23384e63788da3b7a28d77624d38220d0000000000000000000000000000000000000000000013283e53687d939f9f9f9c86715c47311c0700000000000000000000000000000000000000000000000000000000091d314556637987929595806b56402b160100000000000000000000000000000000000000000412212e3b484c5e66717a81878d90939596969594918e8a858079706760544b3f32291b0e00000000000000000000000000162b40556b8095aac0ae99846f59442f1a0000000000000a1f3347586a7f94a5b6c5b8a99f94867d76706e6d6e71777f8a9ca4b6c1b1a0917c675443301c07000000000000000000000000000000000000021527384b6074879db2c1af9a846f7c919fb1b9a79b8574604b41301f0e00000000000000000000000000162b40556b8095a4937e695336251300000000000000000000000000000000000014293e54697e939d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d95806b55402b160000000000000000000000000003192e43586e83989b9b917c67523c271200000000000000000000000000000000000000000000000000152a3f556a7f949d9d9d9d9d9d9d9d9d9d9d9d9c9c9b9996928d8780786c6158493d2c1e0e000000001a2f445a6f8499afc2ad98826d5839281603000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b7a28c77624d37220d0000000000000000000000000000000000000000000010263b50657b8b8a8a8a8a88735e49331e090000000000000000000000000000000000000000000000000000000002152738495b63757d80807f6a543f2a1500000000000000000000000000000000000000000312222f3f4b59626f7b868f979da5a5a8aaababaaa9a6aa9f9b958e857c72655d4b46392c1e1002000000000000000000000013283d53687d92a8bdb19c86715c3a291704000000000004172a3a4b6074879cabbcc7bab4a49c928a86838283868c959ea8b6beb2a397826d5f4d36251300000000000000000000000000000000000000091d314556687e93a5b7b4a38f7b656c8197a4b6b5a397816c5f4d3d2c1a0a000000000000000000000000172d42576c8297ac99846f5443301c07000000000000000000000000000000000011263b50667c87888888888888888888888888888888888888888888888888888887806b56412c160000000000000000000000000001162b41566b8096aba9947f6a543f2a150000000000000000000000000000000000000000000000000011273c51667c8788888888888888888888888887878584817d78726b625a4c463a2c1f0f0000000000172c42576c8197acc1b19c86715746321e090000000000000000000000000000000000000000000000000000000010253b50657a90a5b7a18c77624c37220d000000000000000000000000000000000000000000000e23384c5d657474747474736a5945301c0700000000000000000000000000000000000000000000000000000000000a1a2c3d495660676a6b6a614f3c2712000000000000000000000000000000000000000011212f404c5d657783909ba3acb2b7c3bebdb9b8b8b9c8bbb4b0aaa39b91867b6c6157493c2e2010020000000000000000000010263b50657b90a5c9b49e89745847331f0a0000000000000c1d324556657b8d9fb5c2cdbaa99fa99f9b9897999b9fabb4b9b6b2a0988574604b40301808000000000000000000000000000000000000021528384b6074879db2c2b09b85705d6075869ca9bab19f917d675b49382816030000000000000000000000172c42576c8197ac9e8974604a35200b00000000000000000000000000000000000f23384c5e66727272727272727272727272727272727272727272727272727272726b62513d2914000000000000000000000000000013293e53687e93a8ac97816c57422c17020000000000000000000000000000000000000000000000000f24394d5e66727272727272727272727272727271706e6b68635b564d483c33291b0f01000000000013283d53687d92a8c4b49f8a76614b36210c0000000000000000000000000000000000000000000000000000000011263b50667b90a5b7a28c77624d37220d00000000000000000000000000000000000000000000091c2f3f4c505f5f5f5f5f5e594c3c2916020000000000000000000000000000000000000000000000000000000000000f1f2c38454b525555544f4332200c000000000000000000000000000000000000000d1d2e3f4c5e667b8899a1b0b5c1c4b7b2aca7a4a3a3a4a5a8acb2b6b4b0a39b8d8175635a4b3e2e2110000000000000000000000e23384e63788dabbcb9a88c76614c37210c000000000000021528384c5d6c8196a4b6c6b49f8a959ea7acacaeb1b5b4b2aca59c92827460564532221200000000000000000000000000000000000000091d324556687e93a5b7b5a4917c66515663798b9fb4bdb49e8a79635645321e130100000000000000000000172c41566c8196aba78d78634e38230e0000000000000000000000000000000000091c2f404c505d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d56514434210e000000000000000000000000000011263b51667b90a6af99846f5a442f1a000000000000000000000000000000000000000000000000000a1d30404d515d5d5d5d5d5d5d5d5d5d5d5d5d5d5c5b5956534e493d38352b1f170b000000000000000e24394e63798ea6b7bbaa8f7a65503727150200000000000000000000000000000000000000000000000000000010253b50657a90a5b8a28d78634d38230e000000000000000000000000000000000000000000000011212f383b4a4a4a4a4a49453c2e1e0c00000000000000000000000000000000000000000000000000000000000000010f1a2832363d40403f3c3225150300000000000000000000000000000000000005192b3c4b5d667c8b9ea6b3bfc2b5b1a69d97928f8e8d8e9093979da5abb4b5ab9f978678645c4b3f2e1b080000000000000000000b21364b60768a9fb5c6a38e79644e39240f000000000000000a1a2f3f4b6075869ca8b9b09a85808991979c9faaa99f9c9791877d7260564538281604000000000000000000000000000000000000021528384b6075879db2c3b19c8673604a4a5b697e93a1b3b9a89c8675604b41311f0f00000000000000000000162b41566b8096aba7927d68523d281300000000000000000000000000000000000011222f383b48484848484848484848484848484848484848484848484848484848413d3426160500000000000000000000000000000e23394e63788ea3b19c87715c3b2a180400000000000000000000000000000000000000000000000000122230393c4848484848484848484848484847474644413d38352c2220190e0400000000000000000c21364a5b73889db2c8ab96816b5544311d080000000000000000000000000000000000000000000000000000000f24394f64798ea4c8a38e79644e39240f000000000000000000000000000000000000000000000003111c23262832363938352c221b10020000000000000000000000000000000000000000000000000000000000000000000a161e21282b2b2a2720150700000000000000000000000000000000000000092034485a657b8b9fa9b8c5bcb4a49c9188827d7a7878797b7e82878e969ea8b1b5a49c897b655d4b37220e000000000000000000091e32455673889db3bba6917c66513c27110000000000000000111e32455763798a9eb4b4a29681747c82878a8b8b8987827c746760544538281a0a00000000000000000000000000000000000000091d324556697e93a6b7b6a5927d6754433d4f606e8399a6b7b5a497826d5f4e3d2d1b0b000000000000000000162b40556b8095aaac97826c57422d1700000000000000000000000000000000000003111c2326333333333333333333333333333333333333333333333333333333332c292116080000000000000000000000000000000c21364b61768ba7b49f89745947341f0b0000000000000000000000000000000000000000000000000004121d2427333333333333333333333333333232302f2c2823211a0f0b0500000000000000000000071a2d3d576c8197acc2b39e8874604b3626140100000000000000000000000000000000000000000000000000000d23384d62788daabba48f7a654f3a25100000000000000000000000000000000000000000000000000614243138454b4e4d493c372e20100100000000000000000000000000000000000000000000000000000000000000000003090b12151615120c0300000000000000000000000000000000000000091930414d6278899ea9bac7baab9f95867c746c686463636466696d72798189979fb3b6a79e8a7a654f3a2510000000000000000000021628385b70869bb0bea9937e69543e2914000000000000000003162839495b677d929fb0b09e927d686d7274767674726c6660554a4336281a0a00000000000000000000000000000000000000021628384b6075889db2c4b29d8774604b3632424c6176889dabbcb19f927d685b4a392916030000000000000000152a40556a7f95aab19b86715c3a29170400000000000000000000000000000000000000090f111d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d16140e0500000000000000000000000000000000091e32465773889eb3a88c77614c37220c0000000000000000000000000000000000000000000000000000000a0f111d1d1d1d1d1d1d1d1d1d1d1d1d1d1c1b1916130e0c0600000000000000000000000000000f253a4f647a8fa4b5b8a6917c665443301c0d00000000000000050b0d140d0b050000000000000000000000000b21364b60768a9fb4a6917c67513c2712000000000000000000000000000000000000000000000000132431424e566063635a4f4b3e2e1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374d5f6f849aa7b8c7baa99f8d7f73666055524f4e4e4f5053575b636b7682919ea7b19f937d68533e281300000000000000000000192e43586e8398adc0ab96816b56412c160100000000000000000a1b2c3d4d5f6c8196a2b4b49f8b7b655a576161575d57514b44373025180a0000000000000000000000000000000000000000091e324556697e93a6b7b7a6937e685544311f334758657b8d9fb4beb49f8a79635746321e14020000000000000013283d52687d92a7b39e89745847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395b71869bb0a48f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c71869cb1c2b19b8573604b3b2b1b0b00000000000e192022292220190e0000000000000000000000091e32455671869bb1a9947f6a543b2a1805000000000000000000000000000000000000000000000c1c31424e606975797871645c4b3d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0f10100b0902000000000000081d314455677d92a2b4c5bcab9f8b7c6a60554b44373a3938393b3e3d4a4e58616d7c899ba397816c604e3a261100000000000000000001162b41566b8096abc0ae99836e59442e19000000000000000000000f1f30414b6073849aa5b7a99e897863584b4c4639423c3531271c13080000000000000000000000000000000000000000021628384b6075889db2c4b39d8875604b3726172a3a4b5d6b8095a3b4baa89c8675614b423120100000000000000010253a50657a8fa5b9a88c76614c37210c0000000000040a0c0e0e0e0e0e0d0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aea6917c67513c27120000000000000000000000000000000000000000070d0f202020201e180d0b0500000000000000000000000000000000000000000000000000000000000000000000081b2e3e52677d92a4b6b5a3937e68594839291b0f060006111e2b35383f38352b1e0e0000000000000000000002162838576c8197acaf99846f5948341f16160c0a04000000000000000000000000000000000004172a3a4e60697e898e8d867a645b4936210e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21242525211e160a00000000000b20354b6074879db2c0c3b59f8d7c665e4b443731262523232426292d363a474c5e667885908574604b42311e0b0000000000000000000014293e53697e93a8beb09b86715b3928160300000000000000000001131d3144556176879da9b8a79c867661554433292d26201d150900000000000000000000000000000000000000000000091e324556697e93a6b7b8a7947f69564532190c1c2e3f4b6073859ba8b9b6a498826d604e3e2d1b0b0000000000000d22384d62788daabba38e79644e39240f000000000c171f2124242424242320190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1515151515151515162c41566b8196aba9947f69543f2a15151515151515151515110f0900000000000002101b222435353535332e2220180d000000000000000000000000000000000000000000000000000000000000000000001020354b6073869cb1bdb39e8877625746392c2019181a212f3c484d544d483c2b1d0d0000000000000000000011263b50667b90a5b49f8a77624c4032282b211f170c000000000000000000000000000000000a1f334758687e939ea7a49c8b79634e3c2c1906000000000000000000000000000000000000000000000000000000000000000000000000000000000005131b283236393a3a3632281a0a00000006192c3c52687d92a5b7cab6a597816c5e4d4031261d140f0e0e0f11141a212a33404c5a62747b75615645312413020000000000000000000011263b51667b90a6bbb39e88735746321e0900000000000000000000011527374758647a8a9fb4b6a49a8473604b433222120b080100000000000000000000000000000000000000000000031628384b6075889db3c4b39e8976614b38281500111d3144556278899eb3beb2a0937e685c4a3a29170400000000000b20354b60758a9fb4a6917c66513c27110000000c1c293336393939393938352b1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21232a2a2a2a2a2a2a2a2a2a3e54697e93a9ac96816c57412c2a2a2a2a2a2a2a2a2a2a26241d12040000000010202e363a4a4a4a4a494337342b1d0d000000000000000000000000000000000000000000000000000000000000000000081d314455657b909fb1b8a69b85756157493d352b2e2c353f4c5a6269625a483b2b1b0a0000000000000000000b20354a6073879db2a996816c5f4b4538403633291c0c0000000000000000000000000000000c21374c6177899eb3b9b5a99b85715a4935200c000000000000000000000000000000000000000000000000000000000000000000000000000000000013233039454b4f4f4f4b453828160200000c2035495a70859bb0c3c4b29d8775614b40301d140901000000000000070c171f303c495660666157463827150600000000000000000000000e24394e63798ea3c5b8a78b76614b36210c000000000000000000000009192a3a4a5c677d929eb0b4a297826d614f40302010000000000000000000000000000000000000000000000000091e324556697e93a6b7b9a895806a5746321a0a0001152737495a677d91a0b1beb49f8b7a645846331f140200000000081d31445572879db2a9937e69543e291400000417293a464c4e4e4e4e4e4d493c2b19060000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c36393f3f3f3f3f3f3f3f3f3f3f51667b91a6ae99846f59443f3f3f3f3f3f3f3f3f3f3f3c382f2212000000071b2e3e4a4f606060605e584d483b2b1c0c0000000000000000000000000000000000000000000000000000000000000000011426374b5d6d8297a4b6b5a3998375635b4d493c433d494e5d65787e78625948392816030000000000000000071c304354697e93a3b59f8d7d6a605658564c463a291704000000000000000000000000000012273d52677c92a8b9ccc7b5a38d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e30414d5760646565605645321e0900000e23384d63788da3b4c8b7a6917c675746322212010000000000000000000004121e2b38454b514b4639291a0a0000000000000000000000000c21364b61768ba7b8c5a38e78634e39230e0000000000000000000000000c1c2d3e4d5f6b8096a2b3b19f947f6a5f4d3e2d1e0e00000000000000000000000000000000000000000000031628384b6075889db3c4b49e8a77614c39291600000009192b3c4d5f6d8297a4b6baa99d8776614c4332201000000000011426375a6f859aafab96816c56412c1701000a1f334658616363636363625a4935200b0000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e55555555555555555555555564798ea3b19c87715c555555555555555555555555514c402f1d0900000d22364a5c6475757575736d6259483a2a1704000000000000000000000000000000000000000000000000000000000000000009192f3f4b6175869ca6b8b3a19986796b625a5958595b636d7b89948878625745321e090000000000000000001325364b6073859ba7ab9f8c7f756f6d6b615846331f0a000000000000000000000000000013293e53687e93a8c0d0cebaa98e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4d5f6775797a7b74604b36210b000014293e54697e93a9c1c8b29d8874604b39281604000000000000000000000000000e1a2731363b3633291b0b000000000000000000000000000a1e33465773899eb3bba5907b66503b261100000000000000000000000000102030414b6073849aa5b6b59f8d7d675c4a3c2b1b0b000000000000000000000000000000000000000000091e324556697e94a6b7baa996816b5847331b0b000000000e1e30414b6175869ca9bab6a599836e614f3e2e1c0c00000000182d42576d8297acae99836e59442e1900000c21364c6176797979797978624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000c2136495b636a6a6a6a6a6a6a6a6a6a6a6a6a768baab49e89746a6a6a6a6a6a6a6a6a6a6a6a6a665e4c38240f00000f243a4f647a8d8a8a8a888277625847331f10000000000000000000000000000000000000000000000000000000000000000000111e3246576278889da6b6b3a49c8b8078726e6d6f7279828d9ea69b8575604b36210b000000000000000000081d3144556379899da6aa9f958984828076614c36210c000000000000000000000000000010253a4f657a8fa2b3c2c0b49f8a76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a677d898e8f8a75604b36200b0005192b3c5a6f8499afc4c3aa947f6a5544311b0b0000000000000000000000000000000a151d2026211e170b0000000000000000000000000000031729395c71869bb1bda8937e68533e29130000000000000000000000000002131d3144556176879da8baab9f8b7a645a483929190900000000000000000000000000000000000000031628394b6075889db3c4b49f8b77624d3a2a17000000000000131e324657647a8b9fb4bfb2a1947f695c4b3a2a1808000000152a3f556a7f94aab09b86715c382816030011263c51667c8e8e8e8e8e86715c3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63797f7f7f7f7f7f7f7f7f7f7f7f7f7f8c9fb4a895807f7f7f7f7f7f7f7f7f7f7f7f7f7c66513c261100000d22364a5c6d8297a8a79e988776614c3e2e1808000000000000000000000000000000000000000000000000000000000000000003162839495a647a889ca4b2b6a99f968c87848384878e979fabb5a3957f6a55402a1500000000000000000001142637495b63798898a0aca89e9a9895816c56412c1700000000000000000000000000000e22374b5d6f849aa4afafa297816c5746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788c9ea79a85705645311d09000b2034485a73889eb3c8b6a58d78634d372715000000000000000000000000000000000002090b110c0a0300000000000000000000000000000000192f44596e8499aec0ab95806b56402b160100000000000000000000000000011426374758647a8a9fb4baa99d887862574637261401000000000000000000000000000000000000091e324557697e94a6b7bcab97826d5948341c0c000000000000031629394a5c697f94a1b3bfb49f8b7a64584736251300000012273d52677d929b9b9b89735645321e09000f24394e64798ea3a3a39e89745847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90949494949494949494949494949faabbaf9e9594949494949494949494949494846f5a442f1a0000071b2e3e4c6277899eb4b3a598826d5c4b3625130000000000000000000000000000000000000000000000000000000000000000000b1b2b3c4a5c64798698a0b0b5b4ab9f9c9998999da5adb5b4a39b8676614c36210c0000000000000000000009192c3d4a5b6378838f979da6a5a699846f5a442f1a0000000000000000000000000000081b2e3f4d627886959a99938475614b39291703000000000000000000000000000000000000000000000000000000000000000000000000000001152737556a7f94abaa95806a5538271502000d22384d62778da7b8c7b29d87725a4935190900000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1ad98836d58432e1800000000000000000000000000000009192a3a4a5c677d919eb0b7a69c8675615544311d140400000000000000000000000000000000021527374b6075889db2b2b29f8c78634d3b2b1800000000000000000b1b2d3e4a60728399a6b2b2aa9d8776615443301c0700000f24394e647a858686868575604b36210b000c21374c61768ca8b9b9a88c76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788dabaaaaaaaaaaaaaaaaaaaaaaaab4bbc8bcafaaaaaaaaaaaaaaaaaaaaaaaaaa9c87715c3a2a18040000101f344859697f94a4b6b59f8d7a645443301c0a0000000000000000000000000000000000000000000000000000000000000000000e1e2d3d4a5b637582909ba3adb3b5b1aeadaeb2b6b3aa9f968576615746331e0a00000000000000000000000f1f2d3d4a5a626e7a82888d8f919286715c47321c000000000000000000000000000000102035485a62757f85847e73615746321b0b000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556f849aafaa907b65503b2510000010253b50657a90a5c5c3ae98836e593c2c19000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9beb09b85705b382715020000000000000000000000000000000c1c2d3d4d5f6b8096a1b3b5a4998373604b4232221201000000000000000000000000000000081d314455697f949d9d9d9d98826e5b49351d0d000000000000000000101c3043546277889a9d9d9d9d998472604a35200b00000d22364a5c647171717171605645321e09000a1f33475874899eb4c6a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fa2a2a2a2a2a2a2a2a2a2a2a2a8adbac0b3afa2a2a2a2a2a2a2a2a2a2a2a29e89745847331f0a000005182a3b4b6074869cb1bcab9b8572604a392816030000000000000000000000000000000000000000000000000000000000000000000f1f2d3c4957616d7b8590989ea7a6a8a9a8a6a79e978c8174615847392917030000000000000000000000010f1f2d3c484d5d646d74787a7c7d7d67523d271200000000000000000000000000000005192b3c4857606a706f68605546392816000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6075899eb49f8a76604b36210b000012283d52677d92a7bcbfaa95806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcb29d88735645311d09000000000000000000000000000000000f1f30414b6073839aa5b6b3a196816c604f402f1f0f0000000000000000000000000000000b20364b60758587888888878477614c3c2c1900000000000000000000001325364759647a858888888888877d68523d28130000071b2d3e4a4e5b5b5b5b5b4b4538281603000417293a5c71869cb1bba6917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000081d31445573888d8d8d8d8d8d8d8d8d8d8d8d8d929cadb3a29a8d8d8d8d8d8d8d8d8d8d8d8d8d8c77614c37220c0000000d1d314556667b90a1b3b4a3927d675745321e0d000000000000000000000000000000000000000000000000000000000000000000010f1e2c39464b5d65717b82898d91929393918e8882796c6056473a2a1b0b00000000000000000000000000010f1e2b353f4b4f546063656768675f4d392510000000000000000000000000000000000e1e2b39454b555a5a534b4437281b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa8b09b85705745321e09000014293f54697e94a9bebda8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6b49f8a75604b36200b0000000000000000000000000000000001131d3144556176879da8b9b09f937e695e4c3d2d1d0d0000000000000000000000000000081d3144556070727272727270615947341e0e000000000000000000000008182a3b4a5c647072727272727268604e3a251100000010202d363946464646463632281a0a0000001a2f44596f8499aebea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000021527374d6277787878787878787878787878787e92a8af9a84787878787878787878787878787873604b35200b000000021527384c5e6f8499a9bab29d8775604b3c2b1905000000000000000000000000000000000000000000000000000000000000000000000e1b29323f4b505d656d74787c7d7e7d7c79746c635b4b45382a1c0c000000000000000000000000000000000e19202e3736434a4d505153524d41301e0a00000000000000000000000000000000000e1b2832364045443e353127190b000000000000000000000000000000000000000000000000000000000000000000000000000000000114263654697f94a9ab95806b56392816030000152a3f556a7f94aabfbba6917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8babcab8d78634d38230e000000000000000000000000000000000001142637475863798a9eb4bcb49f8c7c665b4a3b2a1b0a0000000000000000000000000002152737444b5b5d5d5d5d5d5a4c473b2a18000000000000000000000000000d1d2d3e4a4f5b5d5d5d5d5d5d524e41311e0b00000002101b22243131313131211e160a00000002172c41576c8196acc1ab96816c56412c170b0f13151513100b09020000000000000000000000000000000000000000000000000000000009203448596262626262626262626262626264798ea3b19b867162626262626262626262626262605544311d08000000000a1a2f404d63788b9fb4b7a695806a5a4834201000000000000000000000000000000000000000000000000000000000000000000000000b161e2e373f4c5054606366686968666360544e493d32281a0c00000000000000000000000000000000000005101b22253035383a3c3d3d39302313010000000000000000000000000000000000000a161e212a302f29201d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546f8499aeaa907b66503b2611000000152b40556a8095aabfbba5907b66503b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475974899fb4c9a5907a65503b25100000000000000000000000000000000000000919293a4a5b677d919eb0bbaa9e8a79635948392818080000000000000000000000000009192731364648484848484537342a1d0c000000000000000000000000000010202d363a454848484848483d3a312313010000000000070d0f1c1c1c1c1c0b09030000000000142a3f54697f94a9beae99836e59442e1c2024282a2a2825211e160a08000000000000000000000000000000000000000000000000000005182b3b484d4d4d4d4d4d4d4d4d4d4d4d4d61768ca8b39e8973574d4d4d4d4d4d4d4d4d4d4d4d4b44372715010000000000122135495b6b8096a6b7b49f8a78624d3e2e1808000000000000000000000000000000000000000000000000000000000000000000000003111c232f3836434b4e51535453514e4b4336352c1d150a0000000000000000000000000000000000000000000808131c202325272827251e1305000000000000000000000000000000000000000003090b151b1a130b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074899eb39f8b76614c36210c000000152a3f556a7f94aabfbba5907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c71879cb1bda7927d68523d2813000000000000000000000000000000000000000c1c2d3d4d5f6b8095a1b3b9a89d8777625745362513000000000000000000000000000009151d2031333333333230221f180c00000000000000000000000000000002101b22243033333333333328251e13050000000000000000000000000000000000000000000012273c52677c91a7bcb09b86715b39283035393d3f3f3d3b363228231c1106000000000000000000000000000000000000000000000000000d1d2b34373838383838383838383838475874899eb3a78b76614b3838383838383838383838353127190900000000000006192c3c4b6176889db3baa898826d5c4b3625130000000000000000000000000000000000000000000000000000000000000000000000000008111c23263035383c3d3e3e3c39353026211a0f0200000000000000000000000000000000000000000000000000070b0e10121312100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea7b09b86715746331e0a00000014293f54697e94a9bebba6917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afbbaa95806a55402b1500000000000000000000000000000000000000000f1f30414b60728399a3afb1a59b8575605443301c07000000000000000000000000000002080b1b1d1d1d1d1d1b0c0b04000000000000000000000000000000000000070d0f1b1d1d1d1d1d1d13110b0100000000000000000000000000000000000000000000000f243a4f64798fa4c7b39e8973574636434a4e52545452504b4538372e211a0f010000000000000000000000000000000000000000000000000d18202223232323232323232323293a5c71869cb1a38e78634e3923232323232323232323201d150900000000000000000e1e334657687d92a3b4b59f8d7a645443301c0a00000000000000000000000000000000000000000000000000000000000000000000000000000808141c2023272829282724201c1408060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f14161616161613110b02000000000000000000000000000000000014293e54697e93a9ab96816b563929170300000013283e53687d93a8bdbca7927c67523d2712000000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297a6a6a697826d58422d18000000000000000000000000000000000000000001121c304354617685939a9c9c9c998372604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9bab8a78b76614b4b546064686a6a68656056504b3f352c1f1305000000000000000000000000000000000000000000000000050b0d0d0d0d0d0d0d0d0d0d1a2f44596f8499aea6907b66513b26110d0d0d0d0d0d0d0d0b0801000000000000000000031729394a6072859babbcab9b8572604a3928160300000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e11131413110e0b08010000000000000000000000000000050b0d0f0e0c0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124292b2c2c2c2c28261e1306000000000000000000000000000000061a2c3d596e8399aeab917c66513c27110000000011263c51667b91a6bbbea9947e69543f2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f9090909090846f5a45301a00000000000000000000000000000000000000000001142636465861747e8487878787867d68533e2813000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0e0e0e0e0c0a040000000000000000000000000000000000000000000000000000000000000000000b20354a6075899fb4c5a38e786357616a73797d7f7f7d7a756e655d4e493d312316080000000000000000000000000000000000000000000000000000000000000000000002172c41576c8196aca8937e68533e29130000000000000000000000000000000000000000000b1c304354647a8d9fb5b5a3927d675745321e0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e192022242321201c130e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2d36393f40414141413d3a3124130200000000000000000000000000000c2136495b73889eb39f8b77614c37210c000000000e24394e63798ea3c3c1ab96816c56412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62787b7b7b7b7b7b65503a2510000000000000000000000000000000000000000000000818293a465660696f717272727268604e3a261100000000000000000000000000000000000000000000000000000000000000000000000000000e1a212324242423211f170b0000000000000000000000000000000000000000000000000000000000000000071c30435472879cb1bba5907b66667580888e929494929089837b6f635b4d413326160800000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9ab95806b56402b16010000000000000000000000000000000000000000001325364a5c6d8297a8b9b29d8875604b3c2b1905000000000000000000000000000000000000000000050f15172020202020202020202020202020202020202020202020201a181208000000000000000000000e1e2b353839383735302524211a0f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091927313d4a4e545656565656534e42311e0b00000000000000000000000000000e23394e63798ea6b19c86715847331f0a000000000c21364b61768ba5b6c3ae99846e593b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a626666666666655d4b37230e00000000000000000000000000000000000000000000000c1c2938454b535a5c5c5c5c5c534e42311e0b000000000000000000000000000000000000000000000000000000000000000000000000000e1f2c3538393939393633291b1305000000000000000000000000000000000000000000000000000000000000001325365a6f849aafbda8937e687c87959da6a7a9a9a7a89e998f8479675f51443426160600000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6ad98836d58432e180000000000000000000000000000000000000000000008182d3e4c6277899eb3b7a695806a5a4834201000000000000000000000000000000000000000000917222a2c3535353535353535353535353535353535353535353535352f2d25190b000000000000000005192b3c484d4e4e4c4a433639362d20190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001152737444b5c64696b6b6b6b6b68604e3a2611000000000000000000000000000013293e53687e93a8ac97816c573a2a1704000000000a1e33465772879db2c7b29d8873594834200b000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d5151515151504b3f2e1c080000000000000000000000000000000000000000000000000c1a2731363e4547474747473e3a31241302000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e4e4e4e4e4c463a30231300000000000000000000000000000000000000000000000000000000000000182d42576d8297acc0ab95807c8c9da5b2acaaa9abafb5b4aea29a8a7d6b6251443424140200000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b09b85705b3827150200000000000000000000000000000000000000000000101f344759697f94a4b6b49f8a78624d3f2e1808000000000000000000000000000000000000051727343e414a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a454137291908000000000000000b2035485a626463616054554e4a3d342b1d1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d314455606d797e80818181807e68533d28130000000000000000000000000006192c3c586d8398ada7917c67523c2712000000000003172939586e8398adc3b7a68c77624c37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34383b3b3b3b3b3a372e211100000000000000000000000000000000000000000000000000000a151d20292f323232323228261e1306000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b636363636361584d41301d0d000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfb29d878c9faaa59c979493969a9fabb5b3a89e92806b62514231201000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8b29d88735645311d090000000000000000000000000000000000000000000005182a3b4b6074869cb1baa998826d5d4b3625130000000000000000000000000000000000000f22344552576060606060606060606060606060606060606060606060605a5447372512000000000000000d22384d627879787674716a635b4d483b2e21110300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2f404b6073818e94959696968979634e39240e000000000000000000000000000c2035495a73889db2a48c77624c37220d00000000000014293e54697e93a9c2c4a7927d68523a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192022262626262625231c110300000000000000000000000000000000000000000000000000000002090b141a1c1d1d1d1d13110b0200000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63797979797876675f4d3b2a1805000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcb6a59d9fa1998e87827f7e80858c989fabb9b49e95806b604e3e2e1b0a000000000000000000000000000000000000000000000000000000000000000a1f34475974899fb49f8a75604b36200b00000000000000000000000000000000000000000000000d1d314455667b90a1b3b2a08f7a645443301c0b0000000000000000000000000000000000152a3e52636c7575757575757575757575757575757575757575757575756f6554412d1803000000000000162b41566b808e8d8c8a867f796d62594b3f2e21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4c5e6b80969fa9ababa0937e685b4a36210c000000000000000000000000000e23384d63788da6b29c8772594834200b0000000000000e23384e63788da4b6c3ae98836e5846331f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1111111111100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b818e8e8e8e8a7d675947341f0e000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8c3b6ab9f948379726c6a696b7078828d9ea8b9b09e937e695c4b3928160300000000000000000000000000000000000000000000000000000000000004182a3a5c71879cb1ab8d78624d38230d0000000000000000000000000000000000000000000000021527374c5e6f8399a9bab09b8572604a3928160300000000000000000000000000000000172c41576c818a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a836f5a452f1a0000000000000013283e53687d93a3aa9f9b958c8278655d4b3f2e1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1f344759657b8d9fb5bdb6a598836e604e3d2d1a070000000000000000000000000013283d52687d92a7ac97826d573b2b18050000000000000c2135495b71869cb1c8b49f8a76614c372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0f131516161615120e0c0600000000000000000000000000000000000000000000000c21374c6176899ea3a99e8a77624c3c2b1905000000000000000000000000000000000000000000000000000000000d22384d62778daabbcab59f8d7f6f645c575554565a626d7c8a9ea7b9b49f8b7a645745321e0e000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499a7a5907a65503b251000000000000000000000000000000000000000000000000009192f404d63788b9fb4b5a3927d675746321e0e00000000000000000000000000000000142a3f54697f949f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c87725c3a29170400000000000010253a4f657a8f9c9ea7aaab9f98897b655d4b3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f32424c6177889dabbcbbaa9d8776614c42311f0f0000000000000000000000000005182b3b586d8297ada7927d67523d281200000000000000061a2c3d556b8095aabbbaa9937e685544311d0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c111415161614120e0b08010000000000000000000000000000000000000000000000000609151d2024282a2b2c2b2a2723211a0f0c0700000000000000000000000000000000000000000a1f3347586a7f94a5b7a896816c5a4835200e000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4bfaa95806a614f4a3e3f3e3c484d5e6679899eaabbaa9d8775604b3c2c1906000000000000000000000000000000000000000000000000000000000002172c42576c81929292927d68523d281300000000000000000000000000000000000000000000000000112035495a6b8095a6b7b29d8875614b3c2b190500000000000000000000000000000011273c51667c91a9bab5b5b5bab4b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39e89745847331f0a0000000000000b20354b60738187888c959fa9a79e8a7b655846331f0d000000000000000000000000000000000000000000000000000000060c0e11141516151513100d0a1a2d3d4f606f8399a6b7bfb49f8b7a64584633241401000000000000000000000000000b2034485972879db2a58d78624d38220d00000000000000000f22384d62788b9fb4c7b29c8774604b392917030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d181f2226292b2c2b2a2724201c140b090200000000000000000000000000000000000000010f1a212731363a3d3f4041403f3c38352c24211a0f0500000000000000000000000000000000000004172a3a4b6075879db2b49f8b78624d3c2c1906000000000000000000000000000000000000000000000000000000081d31445572889db2baa5907a655043362d2a292b35404c5b657b8b9fb4b7a595806b5a4935200e0000000000000000000000000000000000000000000000000000000000000e24394e63797d7d7d7d79634e39230e0000000000000000000000000000000000000000000000000006192c3c4b6175889db2b7a695806b5a483520100000000000000000000000000000000c21374c61768a9fb4c0cdbaa99f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e8c76614c37210c000000000000081d314455606c727377808b9ea8a89d8876614c3b2b18050000000000000000000000000000000000000000000002090b1219202326292a2b2b2a2826222028384a5b697e93a1b3c4b3a1947f695c4b3a29170600000000000000000000000000000d22374d62778ca5b29d87725a4835200b00000000000000000b2035485a6e8399aebfb6a4927d675746331e12010000000000000000000000000000000000000001060000000000000000000000000000000000000000000000000000000000050d181f222a34373b3e4041403f3c39353026201d150a0200000000000000000000000000000000000f1f2c3537444b4f525556565654524e493d39362d20190e0000000000000000000000000000000000000c1e324556687d92a3b5a997826d5b4935210f000000000000000000000000000000000000000000000000000000011426375a70859aafbda8927d68533d281b151419202f3d4b5d6a7f95a4b5b49f8b78634d3c2b190500000000000000000000000000000000000000000000000000000000000c21364a5b6367676767635b4936210c00000000000000000000000000000000000000000000000000000e1e324657677d92a3b4b49f8a78624d3f2e180800000000000000000000000000000a1f3347586a8095a2b4c4b49f8b898989898989898989898989898989898979634e39230e00000000000001142637444b575d59626b7b8a9eb4a697826d594834200b0000000000000000000000000000000000000000030a151d20272c35383b3e3f40403f3d3b373432455663798b9fb4bfb7a6998372604a3e2e1b0b00000000000000000000000000000012273d52677c92a7ad98826d583c2b1905000000000000000005192b3c4f657a8fa1b3c3b29d8875614b4030200f0100000000000000000000000000000002090b161b110f0a000000000000000000000000000000000000000000000000000d181f2a34373b474c505455565554524e4b43363631271d150a000000000000000000000000000000061a2c3d494e556064686a6b6b6b6a67635b574e4a3d352b1e120400000000000000000000000000000000021628384b6073869bb1b49f8b78634d3d2d1a07000000000000000000000000000000000000000000000000000000182d43586d8298adc0aa95806b55402b16000005121f2e3f4b6073869cb1bbaa97826d5a483520080000000000000000000000000000000000000000000000000000000000071a2d3d4a4e525252524e493d2c1a060000000000000000000000000000000000000000000000000000031629394a6072859babbaa998826e5d4b362513000000000000000000000000000004172a3a4b6073849aa6b7b29d887774747474747474747474747474747474635b4a36210c000000000000000919263135423b484d5d687d92a4b49f8b77624d37220d000000000000000000000000000000000000000b161e2731363c3c494d51535555555453504d48404b6074869ca9babcab9d887761544330201000000000000000000000000000000004182a3b576c8297aca8937d68533e2813000000000000000000000e22374b5d6f8499aabbb7a696816c5e4d3e2d1f1102000000000000000000000000000a151d202c3127241d120400000000000000000000000000000000000000000001131d2a343b484c55596166696a6b6b6967636054514b453832281a1101000000000000000000000000000c2135495b637075797d7f8081807f7c78736c635b4d483c30231406000000000000000000000000000000000a1c304354667b90a2b3aa98826d5b4a362110000000000000000000000000000000000000000000000000000000162b40556b8095aac0ad98826d58432d1800000001111d314455667c91a3b5b49f8b78624d3625130000000000000000000000000000000000000000000000000000000000000f1f2d36393d3d3d3d39362c1f0f000000000000000000000000000000000000000000000000000000000b1c304354647a8c9fb4b2a08f7a655443301c0b00000000000000000000000000000c1d3144556177879da9b7a69a8474605e5e5e5e5e5e5e5e5e5e5e5e5e5e4e4a3d2d1a07000000000000000009141d202c2b343f4e5f71869cb1aa957f6a553a2917040000000000000000000000000000000002121b283238454b51585a6366696a6b6a6a68656259595e6c8196a4b5c0b49f8d7b655947362513020000000000000000000000000000000b1f34475972879cb1a68d78634e38230e00000000000000000000081b2e3f4e63798c9fb4c2b09f917c665c4a3d2f1d150900000000000000000000000c1a27313641463c39302212030000000000000000000000000000000000000009141d303b474c59626a71777b7e8081807f7c79746e6760564b45382f1c14080000000000000000000000000e23384e637984898f929495969594918d8881796e625a4d4132241405000000000000000000000000000000011426364c5e6f849aabb59f8c79634e3e2e1b07000000000000000000000000000000000000000000000000000013283d53687d92a8bdb09a85705b37271502000000011527374c5e71859bb0bbaa95806b5443301c070000000000000000000000000000000000000000000000000000000000010f1a21242828282823211a0f0100000000000000000000000000000000000000000000000000000000001325364a5c6d8297a7b9b09b8572604a3928160300000000000000000000000000011527374759647a8b9fb4b4a296816c604e3e494949494949494949494939362d1f0f0000000000000000000001080b171920314154697e94a9b19c87715846331f0a0000000000000000000000000000000a151d2f39464b5660676e73787b7e7f80807f7d7b77736e687c909fb1c2b4a295806a5d4b3a2a1808000000000000000000000000000000000c22374c61778ca4b39d88735b4935210c00000000000000000000001021364a5b6b8096a4b6bdb39e8a7a645b4b3f312719120b0500000000000208121c2a38454b565b514d4030211100000000000000000000000000000000000009192631414d59626c777f868b909395969594918e89837c746960564c403026180a00000000000000000000000e23384e63788d9fa9a7aaabababa9a7a69d978e8378675f4f423223130200000000000000000000000000000008182f404e64798d9fb5ab99836e5c4a362211000000000000000000000000000000000000000000000000000010263b50657b90a5c9b29d88735544311d080000000009192f4053687d92a9bab29d8773604a35200b00000000000000000000000000000000000000000000000000000000000000070c0e121212120e0c060000000000000000000000000000000000000000000000000000000000000008182d3e4c6177899eb3b5a3927d685746321e0e000000000000000000000000000009192a3b4a5c687d929fb1b19f927e685c4a3b2a34343434343434343423211a0f010000000000000000000000000000051324394e64798ea3b59f8b76614c36210c00000000000000000000000000000b1a2731404c57616a757c83888d90939495959492908c88837e889eb3bdb8a79a8473604b3f2e1c0c000000000000000000000000000000000012273c51677c91a6ae98836e593d2c1a060000000000000000000000071a2d3d4b6074869ca8b9b9a89e8879655d4b4437302220191513121213151d20303a4756606b70665e4d3f2f1e0e0000000000000000000000000000000001142637444b5f6777818b949b9faba9aaabaaa9a7a79e9891887f74665e4b4336281a0a000000000000000000000b21364b60768ba6b8c7b8b5b5b6b9c4b8b3aca1998a7d69604f41312010000000000000000000000000000000001121364a5c6d8298a9b3a18f7a644f3f2e1c08000000000000000000000000000000000000000000000000000e23384e63788dabbcb49f8a75604b36200b00000000001221364b60758a9fb4b7a58f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101f344759697e94a4b6b29d8875614b3c2b190500000000000000000000000000000c1d2d3e4e606c8197a2b4b49f8b7a6459473727151f1f1f1f1f1f1f0e0c0700000000000000000000000000000000000b21364b60768ba7b8ab907b65503b2610000000000000000000000000000b1b2938454b5e66757f8891989ea6a6a8aaaaaaa9a8a5a69e99939ea6b8bcab9e897762554431211100000000000000000000000000000000000417293a576c8196aca8937e69533e2914000000000000000000000000000f1e32455663798a9eabbcb8a69e897b6b60554d4038352b2a29282829273136404d58617481867c665d4b3c2c1808000000000000000000000000000000081d314455606c7d89979faab1b5bcb5b1afaeafb1b4b3aea69d94877b6b60544538281909000000000000000000091e32455673889eaaa6a3a0a0a1a3a9b1b5bfb2a89e8d7e695f4e3e2d1909000000000000000000000000000000071a2d3e4d62788b9fb4af9a846f5d4b372312000000000000000000000000000000000000000000000000000b20364b60758a9fb5bcab8d78634d38230e0000000000091e3245576e8499aec3ab96806b563a291704000000000000000000000000010a10122020202020110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b4b6074869cb1b7a695806b5a48352010000000000000000000000000000000102031414b6074849aa6b7a99d8877625544311d130209090909090000000000000000000000000000000000000000091e32455673899eb3a8937e69533e29140000000000000000000000000b1b29394656606c7c88949ea6adb3b8c5bcb8b7b6b7b8c5b8b3aea8b3b8c5b59f8d7c6659483726140700000000000000000000000000000000000a1f33465871869bb1a78e79634e39240e00000000000000000000000000021628384a5b667c8d9fb5bcb8a79e8c8074665e544d483c403e3d3d3e37444b525e667684969b8c7b655a493625130000000000000000000000000000000b20354b607381929ea7b4bbb5b0ab9f9c9a999a9c9faaafb4b2a59d8d807260564537261401000000000000000002162838596f839695918d8b8a8c8e949ba3b4b9b9ab9f927d685c4a372715010000000000000000000000000000000f2035485a6b8096a7b3a28f7b6550402f1808000000000000000000000000000000000000000000000000091d32455673889db3c9a5907b65503b251000000000000316283953687d93a8c6b09b86715846331f0a000000000000000000000005131e2527353535353526241d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d314455667b90a1b3b49f8a78624d3f2e1808000000000000000000000000000002131d3144556277889da9b7a69a8474604b4231201000000000000000000000000000000000000000000000000000021628385d72879db2aa957f6a55402a150000000000000000000000031628394657617481919da6b3b8c3b6b2aba6a3a1a1a1a3a6a9afb4bac7cac7b29c8776655d4f4333251608000000000000000000000000000000000c21364c61768b9fb39e8974604a35200b00000000000000000000000000000a1a2d3d4d5e697e939fabb9b9aa9f95867c7169625a58555352525355556067707c889aa2aa9e8978635443301c070000000000000000000000000000182d42576d82979fb3b8b7b2a39b928b87858484878a919aa2b2b6ab9f968374605544311d120000000000000000000e23384e6379817f7c78767576797e86919ea8b8bcb49f8b7a645544311d0a00000000000000000000000000000005192b3c4c6176899eb3b09b85705e4c362513000000000000000000000000000000000000000000000000021528385b70869bb0bea9947e69543e2d1b0700000000000e23394e63798ea8b9b49f8b76614c36210c0000000000000000000001132330393d4a4a4a4a4a3b382f22120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374c5e6e8399a9baa998836e5d4b362513000000000000000000000000000000021527374759647a8b9fb4b4a297816c604e3e2e1d0d000000000000000000000000000000000000000000000000001c32475c71879cb1ab96816b56412c1601000000000000000000000e1e324657617584979fb2b7c1b4b0a59d96918e8c8b8c8d9094999fa9b1b6c2b6a59c877b696150433326160600000000000000000000000000000011263c51667b91abae99836e5443301c070000000000000000000000000000000f1f30404e60697e8d9ea8b6bbb4a49c91867e78726e6a686767686b6e757c85919da6b4b8a79c8674604a35200b000000000000000000000000000010263b50657b8c9fb4b4a59d91867d7772706f6f72767c84919da5b4b5a1998373604b40301b0b00000000000000000c2135495b636c6a66636060616469737d8a9ea7b8baa99c8673604b382715020000000000000000000000000000000e1f334758697f94a9b4a2907b665443301c09000000000000000000000000000000000000000000000000192e43586e8398adc3b19c86715c4a36220d00000000000b20354a6074899eb4bcab8f7a644f3a250f000000000000000000000a1e30414d526060606060514c402f1d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192f404d63788b9fb4b2a08f7a655443301c0b00000000000000000000000000000009192a3b4a5c687e929fb1b19f927e685c4a3b2a19090000000000000000000000000000000000000000000000061b31465b70869bb0ac97826c57422d17020000000000000000000e1e32424b6175849aa2b1bdbab4a39b9087817c79777677787b7f848a939ca4b3b8b6a59d8c7f6a615144332414020000000000000000000000000003162939566b8096aba9947e69543625130000000000000000000000000000000001122231424e60687d8a9ca4b4bbb6b1a49c948d87837f7e7d7d7e808489919ba2b2b7b9ab9f927d685443301c0700000000000000000000000000000e23384c5e697f949e9f96877c716861585a595a5761676f7c879ba2b4b3a196816c5e4c3929170300000000000000061a2c3d494e5655514e4b4b4c4e54606779899eabbcb5a4937e695645311d090000000000000000000000000000000417293a4f647a8fa4c0b19b8672604a372614010000000000000000000000000000000000000000000001162b41566b8096abc0b5a48e79644f3b2b190500000000071c30435471869cb1c9a7927d68523d2813000000000000000000001025394d5f677575757575665e4c382412000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112035495a6b8095a6b7b09b8572604a392916030000000000000000000000000000000d1d2e3e4e606c8197a2b4b49f8b7a6459473727150200000000000000000000000000000000000000000000061b30465b70859bb0ab96816c56412c1701000000000000000006192b3c4f606e8298a2b4c0b9a99f93857b736c676362616263666a6f767e86929ea7b4b7aa9f94806b625142312010000000000000000000000000000a1e32465770869bb0a88e79644f39240f000000000000000000000000000000000004142431424e5f677986959faab5bcb6b1a9a49c98959392929395999ea7b0b4c0b5a89e8d7e68604e362513000000000000000000000000000000091c2f404f616b808c8b8175665e534c473a4439464b515e6676849aa2b4b09f917c665746331e0b00000000000000000e1f2c353841403c3836353736434a5b667c8d9fb5c2b29d8874604b36200b00000000000000000000000000000003172939556a7f95aabfb5a3917c675544311d09000000000000000000000000000000000000000000000014293e53697e93a8bec2ac97826d594834200e0000000000132536596e8399aec0aa95806b55402b160000000000000000000012273d52677d8a8a8a8a8a7c6651402f1d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4b6175889db2b5a3927d685746321e0e00000000000000000000000000000000102031424b6074849aa6b7a99d8877625544311d1302000000000000000000000000000000000000000000061b31465b70869bb0aa95806b55402b160000000000000000000b2035485a697e93a0b2c0b9a89e8b7e72666054514e4c4c4c4e5154576168737d899aa2b1bbb49e95806b604e3e2e1c0c0000000000000000000000000c21364b61768a9fb49e8974604b35200b00000000000000000000000000000000000006142431414d5b6374808b989fabb3b8c2b6b1adaaa8a7a7a8aaaeb3b9c2b6b1a39b8a7d68604e41311808000000000000000000000000000000001121324351626b77776c61574d4037332a2f293336404c586175849aa7b9b29d8875614b3a29170400000000000000000e1a21232c2a272321202125303d4c5e6d8297aabbb7a6927d67523928160300000000000000000000000000000a1e33465770859ab0c5c1b19c8673604b372715020000000000000000000000000000000000000000000011263b51667b90a6bbc9b49f8b78624d3c2c190600000000182d42586d8297adc1ac97816c57422c1700000000000000000005192b3c576d82979f9f9f9b85715e4c3824120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e324657677d92a2b4b39d8875614b3c2b190600000000000000000000000000000002131d3144556277889da9b7a69a8474604b42312010000000000000000000000000000000000000000000061c31465b71869bb0a9947f69543f2a140000000000000000071a2d3d4d62788a9eb4bebbaa9e8a7b6960544a433639373637383b39464b5560687784979fb1bcaf9e937e685c4b3a2a1704000000000000000000000010263b50657b90aaaf99846f5544311d0800000000000000000000000000000000000000061423303d4a56606b79838c969ea7abb1b4bbc8bcbcbcbdbcc2b6b1aca49c928579675f4e423123130000000000000000000000000000000000031425334451596162594b463930221f181a171e212f3a46576278899eb3b7a695806b5846331f0a000000000000000000060c0e1715110e0b0b0c131c2f404d62788b9fb4c4ae99836e5746321e0900000000000000000000000000000c21364c61768a9fb4cacab6a4927d675544311d0a000000000000000000000000000000000000000000000e24394e63798ea3c5cebaa996816c5b4935211301000002172c41576c8196acc1ad98826d58432d180000000000000000000b2035485a72879db2b5b5a3907c6651402f1d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394d5f70859babb7a695806b5a4835201100000000000000000000000000000000021527374859647a8b9fb4b4a297816c604e3e2e1d0d0000000000000000000000000000000000000000061c31465b71869bb0a8937e68533e291300000000000000000c21364a5b6e8398a8b9c2b49f8c7b655d4a43363025242221222326293337444b59627381979fb1bcb49f8b7a645847331f0f0000000000000000000002162838556b8095aaa9947f6a5437261401000000000000000000000000000000000000000004121f2d38454b5b636e79818991969c9faaa6a7a8a8a7a6a4a49c9690867d72635b4d4031241405000000000000000000000000000000000000061626333b474c4c483b32281b120a0400030a121b29394859687d92a5b7b39e8976614c36210d0000000000000000000000000100000000000000112035485a6e8398adc8b49f8a76614b36210c000000000000000000000000000011273c51667c91aabbc8c5c2b29d8774604b382816030000000000000000000000000000000000000000000c21364b61768ba7b8ccc7b49f8b78634d41301f0f000002172d42576c8297acc1ae98836e59432e190000000000000000000d22384d62788da5b6cac1b09b85715e4c3824120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b30414f647a8c9fb4b49f8a78624d3f2e18080000000000000000000000000000000009192a3b4b5c687e929fb1b19f927e685c4b3b2a190900000000000000000000000000000000000000071c31465c71869bb1a7927d67523d281200000000000000031629394e63798c9fb5c6b5a395806a5d4b3f30251c130e0d0c0d0e11171e26313b4855606d8197a2b3baa99d8776614c3e2d1a07000000000000000000091e32455670859ab0a98f7a654f3a251000000000000000000000000000000000000000000000010f1a28323d494e5b636c757b81868a8e9092939392918e8b87817b72676054493d30221406000000000000000000000000000000000000000008161d2a343737342a1e160b000000000000000b1b2b3b4b6074879db2b9a8937e69543b2a18050000000000000000000000000000000000000006192b3c51667c91aabbbaa9917c67513c27120000000000000000000000000006192c3c576c8197acc0b4afb4b6a5937e685645321e0b0000000000000000000000000000000000000000000a1e33465773899eb3c8c2b5a999846f5f4d3d2c1c0c0001152737586d8398adc2ad97826d58422d1800000000000000000013283d53687d92a8c3b6b2b5a3917c6651402f1d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001322364a5c6d8297a7b9a998836e5d4b36261401000000000000000000000000000000000d1d2e3e4e606c8197a2b4b49f8b7a64594737271502000000000000000000000000000000000000071c31475c71869cb1a6917c67513c2712000000000000000a1e3246576d8297abbcc3b19b8674604b3f2e1c1308000000000000000309141d2b37444b6073849aa6b8b7a697816c5c4a3621110000000000000000000b21364b60758a9fb49f8975604b36200b0000000000000000000000000000000000000000000000000a161e2c353d4a4e5660666c7175787b7c7d7e7d7c7976726c655d524a43362c1f120400000000000000000000000000000000000000000000000c181f22221f180d030000000000000000000d1d314455697f94a9c3b09b85705947341f0b00000000000000000000000000000000000000000e21364b61768a9fb4c7ab96816c56412c17000000000000000000000000000c2135495b72879db2b4a29a9faab29d8875604b392917030000000000000000000000000000000000000000031729395c71869bb1c6b5a49ca1927d675b493a291b0f081d31445570859bb0c1ac96816c57412c170000000000000000061a2c3d586d8298adb6a59ca5b09b85715e4c382412000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4c6177899eb3b2a08f7b655443301c0b0000000000000000000000000000000000102031424b6074849ba6b7a99d8877625544311d13020000000000000000000000000000000000071c31465c71869bb1a6917c66513c2711000000000000000c21364b6176899eb4c9b6a5907b6655443121110000000000000000000000010d19273144556177889db3c0b49f8c79644e3f2e1c08000000000000000010253a50657a8fa9af9a856f5645311d0900000000000000000000000000000000000000000000000000020f1a212d3638454b515656606366676869686764615757504b3f353025180e0000000000000000000000000000000000000000000000000000040b0c0d0b050000000000000000000000011426374d62788da5b7b5a38c77624c37220d00000000000000000000000000000000000000000a1e33465771869cb1c5af9a85705a3c2b19050000000000000000000000000e23384d63788da5b6af9a858c9fb4a6947f695746331e0c000000000000000000000000000000000000000000192f44596e8499aec3b19c869c9e8a796358473a2c1e1620354b6075899eb4bfaa957f6a55402a1500000000000000000c2135495b73889db3b29c879cb2a3917c6651402f1d09000000000000000000000000000000000000000000000000000000000000000000000707070707070707070707070700101f344759697e93a4b6b09b8573604b392917030000000000000000000000000000000002131d3145566277889da9b7a69a8474604b423120100000000000000000000000000000000000061b30465b70859bb0a7917c67523c27120000000000000012273c51677c91a8b9c7b29c8773604a3727150300000000000000000000000000091527374759667c91a2b4bcab9a85705d4b37230d0000000000000001152737556a7f95aaaa95806a5538271502000000000000000000000000000000000000000000000000000000060f1a212832363c38454b4e5152535352514f4b46393b372e201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092035485a72879db2c1a6917c67513c2712000000000000000000000000000000000000000003172939586d8298adc2b39e89745a4835200b00000000000000000000000215273753697e93a8c3aa95808299aeb39e8876614b3a2a17040000000000000000000000000000000000000001172c41566c8196abbca6917c8a9e9c86766158493d3228314150657b90a8b9c3a6917c67513c271200000000000000000e23394e63788ea6b7ab947e94a9b09b85715e4c382412000000000000000000000000000000000000000000000000000000000000030c13151c1c1c1c1c1c1c1c1c1c1c1c1c1c1c182a3a4b6074869cb1b5a3927d685746331e0e0000000000000000000000000000000000021527384859647a8b9fb4b4a297816c604e3e2e1d0d00000000000000000000000000000000051a30455a6f859aafa8927d68533d281300000000000003172939586d8297adc6c5a9947e69544330190900000000000000000000000000000009192a3b4d5e6f849aafc0b4a28f7a654f3c2b1905000000000000081d3144556f849aafa9907a65503b2510000000000000000000000000000000000000000000000000000000000000070a151d2026273136393b3d3e3e3d3c3936332925231c1107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c586d8398adc0aa95806b55402b16000000000000000000000000000000000000000000152a3f556a7f94aabfb9a78d77624d38220d0000000000000000000000081d3144556e8499aec2a6917c7b8fa2b4a7957f6a5847331f0d000000000000000000000000000000000000000014293f54697e94a9bba6907b7e93a09b8576635b4b4639444b5f6f8399aec6b7a58d78634d38230e000000000000000013253653697e93a8b59f8b768a9fb4a3917c66514030180800000000000000000000000000000000000000000000000000000000071520272a3131313131313131313131313131313131314455657b90a0b2b39d8876614b3c2b190600000000000000000000000000000000000a1a2b3b4b5c687e939fb1b19f927e685c4b3b2a190900000000000000000000000000000003192e43586e8398adaa95806a553625130000000000000a1e33465772879cb2c7b8a78d78634d36251300000000000000000000000000000000000c1d30404f647a8fa2b4c0ae98836e5a4834200b0000000000000b20354b6075899eb49f8a76604b36210b000000000000000000000000000000000000000000000000000000000000000002090b11151d202326272829282724211e17100e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b41566b8096abc0ad98836e58432e1903000000000000000000000000000000000000000012283d52677d92a7bcc5a5907a65503b251000000000000000000000000b20364b6075899eb4b6a48c7770859ab0b39e8976614c3b2a18050000000000000000000000000000000000000012273c51677c91a6bca7927d6e8298a39b8679696157575560697d92a1b3c7b29d8774604a35200b00000000000000071c3043546e8399aeb29d88738298adb19b86715e4c362513000000000000000000000000000000000000000000000000000000031525323c3f464646464646464646464646464646464646374c5d6d8298a5b7a695806b5a493520100000000000000000000000000000000000000d1d2e3e4e606c8197a3b4b49f8b7a64594837271502000000000000000000000000000001162b40566b8095abad98836e5443301c0f0c020000000c21364c61768b9fb5c8b39e88735a493518080000000000000000000000000000000000001222374b5c70859ab0c6b49f8b78624d38220d0000000000000f253a4f647a8fa8b09b85705645321e0900000000000000000000000000000000000000000000000000000000000000000000000002090b0e1112131413120f0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfaf9a85705a45301b05000000000000000000000000000000000000000010253a4f657a8fa4c8bda8927d68533d2813000000000000000000000010253a50657a8fa8b9b19c8772657b90a2b4a795806b5948341f0e000000000000000000000000000000000000000f24394f64798ea4c6a9947e6975869ca49c8a7f766f6c6e747e8b9fb4bfbaa995806b5443301c07000000000000000b20354a6074899eb3b09a85707b90a4b5a3917c665443301c0800000000000000000000000000000000000000000000000000000c2032434f545c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c6176879da8b49f8b78624d3e2d1b070000000000000000000001080b0b0b0b0b0b102031424b6074859ba6b7a99d8877625544311d1302000000000000000000000000000010263b50657b90a6b39e8873604a392d271f140600000f243a4f64798fabbcc4ae99846f593c2c1900000000000000000000000000000000000000081b2e3e52677d92a8b9bbaa947f6a553b2a1805000000000114263654697f94a9ab95806b56382816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8bdb09b86715b46311c0600000000000000000000000000000000000000000d22384d62778daabbbfaa95806a55402b150000000000000000000004182a3a556b8095aac6ac97816c5d70859ab0b49f8a77624c3c2b19050000000000000000000000000000000000000c22374c61778ca8b9ab95806b6277879ca49f948984828388939fa9bac0b49f8b78634d36251300000000000000000f24394e64798ea7b8ac97826d73869cb1b19b8673604a362513000000000000000000000000000000000000000000000000000013273c4f616a717171717171717171717171717171717171717171717179899eb4a998836e5c4a36220800000000000000000009141d2020202020202020203145566277889da9b7a69a8474604b4231201000000000000000000000000000000b20354b6074879db2a6917c66574a3d3b322414020012273c51677c91a6c9c0ab95806b56402b1600000000000000000000000000000000000000001021364b6176899eb4c8b09b85705947341f0b00000000081c3043546f8499aeaa907b66503b2611000000000000000000000000000000040a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a04000000000000000000070b121212121212121212121212121212120c0a040000000000000000000000000000000000000000000000000000000000142a3f54697f94a9beb09b86715b46311c0600000000000000000000000000000000000000000b20354b60758a9fb4c2ad98826d58432d18000000000000000000000a1f33475871869bb0bcab917c6752657b90a2b4a896816c5a4835200e0000000000000000000000000000000000000a1f33475874899eb4ac97826d5962788699a1a89e9997989ea6b4bac0b4a295806b5a49351808000000000000000115273754697f94a9c5a8927d68687d92a5b5a3917c665443301c0800000000000000000000000000000000000000000000000000152a3f546a7f868686868686868686868686868686868686868686868686899eb3b2a08e7a644f36251300000000000000000919263135353535353535353535384859647b8b9fb4b4a297816c604e3e2e1d0d00000000000000000000000000081d314455687e93a1b19c8675645c544f42321f0c0014293e54697e93a9bebea9947f69543f2a140000000000000000000000000000000000000000091e3246576e8399aec3b59f8b77624c37220d000000000b20354b6074899eb39f8b76614b36210c00000000000000000000000000000c171f21222222222222222222222222222222222222222222222222211f170b00000000000008131c2027272727272727272727272727272727211f170c00000000000000000000000000000000060600000000000000000005192b3c566c8196abc1af9a846f5a452f1a050000000000000000000000000000000000000000081c30435472879db2c5af9a85705a372715010000000000000000000c22374c61778b9fb5b59f8b77614c5d70859ab0b49f8b78624d3c2c1906000000000000000000000000000000000004182a3a5c71879cb1ae99836e595a627683939ea7aeacaeb3b8c3b6b2a29a8475604b3c2c190000000000000000081d3144556f8499afb8a78e78636074879db2b19b8673604a3625130000000000000000000000000000000000000000000000000a20354a5f758b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ea7b8bfad98836d5443301c0700000000000001142637444b4b4b4b4b4b4b4b4b4b4b4b4b5d687e939fb1b19f927e685c4b3b2a1805000000000000000000000000011527374a60728399a1a49b85797269614f3b271200152a3f546a7f94a9bfbda8927d68533d281300000000000000000000000000000000000000000316283953687e93a8c7bcab927d68523d2813000000000f24394e64798ea7b09b86715746331e0a000000000000000000000000000c1c2a33373737373737373737373737373737373737373737373737373633291b0b0000000008182530353c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c37332a1c0c0000000000000000000000070b0f151c1c16100c0a0400000208122035485a70859bb0c2ad98836d58432e18030000000000000000000000000000000000000000011426365a70859aafc5b29d88725544311d0800000000000000000012273d52677c92abbcb19c8671594750657b90a2b4a997826d5b4935210f0000000000000000000000000000000000001a2f445a6f8499aa9f97826d574858616f7e89949da5a7a9a9a7a49c938475615745321e0e00000000000000000b20354b6075899eb4b39e89746055697e93a6b5a3917c665443301c080000000000000000000000000000000000000000000000091e34495e73899eb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b3b8c5c7b39e8974604a35200b000000000000081d3144556060606060606060606060606060606d8197a3b5b49f8b7a645947341f0d00000000000000000000000000091c304354607583929ca39b8e877f69543e291400152b40556a8095aabfbca6917c67513c27120000000000000000000000000000000000000000000e23394e63788ea9bac9ac97826c57422d170000000014293e54697e93a9ab96816b563929170300000000000000000000000004172a3a474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c463a291704000000132536434a515151515151515151515151515151514c473a2a1704000000000000000008131c20242a31312b25211f171918151d2030404d62788b9fb4c5a9947f6a543f2a1500000000000000000000000000000000000000000000182d42586d8297adc2b49f8a75604b35200b0000000000000000071a2d3d586d8297adc9ab96816c563a4c5d70859ab0b49f8c78634d3d2d1a070000000000000000000000000000000002172d42576c818a8a8a8579634e3a464c6068767f878e929494928e877e726157463928160000000000000000000f253a4f647a8fa8b9ae99846f544b6075889db3b19b8673604a3625130000000000000000000000000000000000000000000000061c31465b71869bb0b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a88d78624d38220d0000000000000b20354b607375757575757575757575757575757575869bb0baa99d8877624c3b2b180500000000000000000000000000132536455760727e879caba599836e59442e1900152a40556a7f95aabfbba6917c66513c27110000000000000000000000000000000000000000000b20354b6075899fb4c5b09b85705b3c2b19050000061a2c3d596e8399aeab917c66513c2611000000000000000000000000000a1f33475861616161616161616161616161616161616161616161616161615846331f080000071c3043546067676767676767676767676767676767615847331f0a00000000000000081825303539404646403b3633292e2d273136414d5e6c8196aabbb8a78f7a644f3a250f00000000000000000000000000000000000000000000152b40556a8095aabfbbaa8d78624d38230d00000000000000000c21364a5b73889db2bcab917c66513c3f50657b90a2b4aa98826d5b4a3621100000000000000000000000000000000000152a3e52636c75757571635b493533424e58616a72797d7f7e7c79726860544639291b0a000000000000000002162838556a7f94aac6a9947f6a544556697f94a7b5a3917c665443301c080000000000000000000000000000000000000000000004192e44596e83999c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c8f7a65503a25100000000000061b31465b70858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b9ba3b5c7b7a698836e594834200b000000000000000000000000000818293a4a5c6478828b9fb09b86715c46311c0014293f54697e94a9bebca7917c67523c2712000000000000000000000000000000000000000000081d31445571869bb0c6b39e89745a4834200b00000c2136495b73889eb39f8b76614c37210c000000000000000000000000000c21374c617677777777777777777777777777777777777777777777777776614c36261401000b20354a60737c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c76614c37210c00000000000000132536434a4f555b5b55504c463a444337444b505f677c8d9fb5c6b39e8874604b35200b0000000000000000000000000000000000000000000013283d52687d92a7bdc8a58f7a65503a251000000000000000000e24394e63798ea6b7b49f8b76614c37384b5d70859ab0b59f8d79634e3e2e1b07000000000000000000000000000000000f223545525760605f5c4e493d2c1f313a464c555b6367696967635b534a4336291b0b000000000000000000091e3245566f859aafbaa98f7a654f384b6176899eb3b19b8673604a3625130000000000000000000000000000000000000000000000152a3f556a7f878787878787878787878787878787878787878787878787878787878787867c66513b2611000000000004192e43596e8398a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0b0b5c1c9c4b2a08c77624d37220d000000000000000000000000000a1f334658647a89979fa29a8f89735e49341e0013293e53687e93a8bdbda8927d68533d281300000000000000000000000000000000000000000001142637596e8399aec3b9a88d77624d38220d00000e23394e63798ea6b19c86715847331f0a000000000000000000000000001e33485d73878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c86725443301c0800071c30435473899191919191919191919191919191917c66513c2611000000000000071c30435460646a71716b6561585b5958595560656f7d8a9fabbcb9a895806a5544311d080000000000000000000000000000000000000000000010253b50657a90a5c9bda7927d68523d2813000000000000000316283854697e94a9c4b09b86715847332f3f50657b90a2b4ab99836e5c4b37221100000000000000000000000000000000051727353e424a4a4a4638352c1f131b2933363d494e525454524e4a3d353025180b000000000000000000000b21364b60758a9fb4b49f8a75604b3646576a7f95a8b5a3917c665443301c080000000000000000000000000000000000000000000013273c50616a72727272727272727272727272727272727272727272727272727272727272665e4c38240f000000000001162c41566b8196abb4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a7927c67523d2712000000000000000000000000000c21364c6176889da7a69a847a73604b35200b0012273c51677c91a6bcbfa9947f6a543f2a1500000000000000000000000000000000000000000000172c41576c8196acc1c6a48f79644f3a240f000013293e53687e93a8ac96816c573a2a1704000000000000000000000000001b30465b70859ba1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a19f8a72604b35200b00001325365c71869ba6a6a6a6a6a6a6a6a6a6a6a6a6937e69533e29140000000000000b20354a60727a7f8686807b7673706e6d6e70757b84919fa8babdb49e8a77614c37271501000000000000000000000000000000000000000000000d23384d62788dabbcbfaa957f6a55402a1500000000000000091e3245566f849aafc8ab96806b563a2923384b5d70859ab0b3a18f7a644f3f2e1c08000000000000000000000000000000000917222a2d3535353123211a0f010b171f212c36393d3f3f3d39362d201c1308000000000000000000000010253b50657b90a9bab09b8570564532394c6176899eb4b19c8673604a362513000000000000000000000000000000000000000000000d20334350555c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c514c402f1d0900000000000014293e53697e939f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f947f6a553f2a1500000000000000000000000000152a40556a7f95a6b29d887564605544311d08000f24394f64798ea4c4c1ac96816c57412c1700000000000000000000000000000000000000000000152a40556a7f95aabfbaa5907b65503b26100003162839586e8398aaa1907b66503b26110000000000000000000000000000192e43586e8398a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a98c77624d37220d0000192e44596e8399aeb2b2b2b2b2b2b2b2b2b2b2ab96816b56412c16000000000001162b41566b808e959b9b95908b888583828485899099a1b4babcaf9f927d67594734190900000000000000000000000000000000000000000000000b20364b60758a9fb4c2ad97826d58422d18000000000000000b21364b60758a9fb4bbaa907b66503b261c2f3f50657b90a2b4af9a846f5d4b3723120000000000000000000000000000000000050f15172020201c0e0c06000000040a0f1a2123282a292724211a0f0700000000000000000000000003172939556b8095aac7ab96816b5638283347586b8095a9b5a4917c665443301c08000000000000000000000000000000000000000000031525333c3f474747474747474747474747474747474747474747474747474747474747473b382f22120000000000000011263b51667c8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816c57422c17000000000000000000000000001325365c71869bb1a9947e69574b4437261401000c21374c61778ca6b7c4ae99846f593a2a1804000000000000000000000000000000000000000000142a3f54697f94a9bebba6917c66513c271100091e32455773889595918372604a35200b0000000000000000000000000000162b40566b808b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7a654f3a25100001172c41566c81969c9c9c9c9c9c9c9c9c9c9c9c9c98836e59432e1900000000000011263c51667c91a9b0b0aaab9f9d9a9998999b9ea8afb3bfb6b19e95816c5f4d3a2a18000000000000000000000000000000000000000000000000081d31445573889db2c4af9a856f5a3626140100000000000011263b50667b90a9bab49f8a76614b36211123374b5d70859aafb3a28f7b6550402f180800000000000000000000000000000000000000020b0b0a07000000000000000000060c0e121414120e0c0700000000000000000000000000000a1e33465770859bb0c3a6917c66513c27293a4c61778a9fb4b19c8673604a36251300000000000000000000000000000000000000000000071520272a3232323232323232323232323232323232323232323232323232323232323226241d1204000000000000000f24384c5e667474747474747474747474747474747474747474747474746c63523e2a15000000000000000000000000071c30435474899fb4a5907a6550393126190900000a1f33475873889db3c8b29d88735847331f0a00000000000000000000000000000000000000000014293e53697e93a8bebda7927d68523d2813000b21364b607580807f7c72605443301c0700000000000000000000000000000b20354b60737576767676767676767676767676767676767676767676767574604b35200b000013283d52687e878787878787878787878787878787826e59442e190000000000000c21364b61768a9fb4c6b9b4b0b2b0aeadaeb0b4b9bbb4afa49c918072604a41301c0c000000000000000000000000000000000000000000000000021527375b70859ab0c5b29d87725443301c08000000000005182b3b566b8196abc7b09b85705746321e0a1c2f3f50657b90a2b4b09b85705e4c3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4b6a58c77624c37221f3447596c8196aab5a4917c675443301c0800000000000000000000000000000000000000000000030d13151d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d110f09000000000000000000091d2f404c515f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f57524535220f0000000000000000000000000b20354a60758a9fb4a48e79644f3924140900000004172a3a596e8399aec3b7a68c77614c37220c00000000000000000000000000000000000000000014293f54697e94a9bebda8927d68533d281300091e324557606b6b6a66605443362513000000000000000000000000000000081d3144556060606060606060606060606060606060606060606060606060605443301c08000011253a4e60687272727272727272727272727272726e6453402c170000000000000a1e3246576f859aafb9a89e9b9fa9a5a7a8a9a9a7aa9f9a92867c6b6054433023130000000000000000000000000000000000000000000000000000182e43586d8398adc2b49f8a75604b35200b00000000000b2034485971869cb1c7aa95806b55392916031123374b5d70859aafb4a2907b665443301c09000000000000000000000000000000000000000000000000000000000000070b0e0e0e0e0d0b05000000000000000000000000000000000011263b51667b90aabbb29c87725947341f182a3b4d62788b9fb4b19c8673604a3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a423e35271705000000000000000000000000071c30435474899eb3a5907a65503b25100000000000152a3f546a7f94a9c3c4a6917c6751372715010000000000000000000000000000000000000000162b40556b8095aac0bca7927c67523d27120003162839454b555555514a433625180800000000000000000000000000000001142637444b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b433626140100000b1e31414e525d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5953463624110000000000000316293954697f94a9b49e8a858a8d9092939494928f8b857d73665e4a43362513050000000000000000000000000000000000000000000000000000162b40556b8095aac0bbaa8c77624d37220d00000000000d22374d62778ca4b5baa9907b65503b251000081c2f3f50657b90a2b4b19b8672604a3726140100000000000000000000000000000000000000000000000000000008131c2023242424221f180d00000000000000000000000000000004172a3a566b8196abc8ad98826d583b2a180c2034485a6d8297aab5a4917c675443301c08000000000000000000060c0d1111111111111111111111111111111111111111111111111111111111110f090000000000000000000000000000000000000000000000000004121d24263535353535353535353535353535353535353535353535352c2a22170900000000000000000000000000001325365c71879cb1a7927d67523d281200000000000f24394f64798ea5b7c1ac97826c5544311d080000000000000000000000000000000000000002172c42576c8197acc1bba6907b66513b261100000a1b2832364040403c353025180800000000000000000000000000000000000919263135363636363636363636363636363636363636363636363636363530261808000000011323313a3d474747474747474747474747474747444036281807000000000000000e24394e63798ea6b49f8a7675787b7c7e7f7e7d7a76706860554c403025180800000000000000000000000000000000000000000000000000000013283e53687d93a8bdc8a48f7a654f3a2510000000000114263652687d92a7c2b49f8a75604b36210b00001123374b5d70859aafb5a3917c675544311d0900000000000000000000000000000000000000000000000000000c182530353839393937342a1d0d00000000000000000000000000000a1f33475871869bb1c5a8937d68533e281305192b3c4d63788b9fb4b19c8673604a36251300000000000000000e192023272727272727272727272727272727272727272727272727272727272726241d120400000000000000000000000000000000000000000000000000090f111f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f17150f05000000000000000000000000000000192e43586e8398adab96816c563b2b1805000000000d22364a5c72879db2c7b39e8874604b35200f0000000000000000000000000000000000000005182a3b596e8398aec3c4a38e79644e39240f0000000a161e212b2b2a26201c13080000000000000000000000000000000000000009141d2021212121212121212121212121212121212121212121212121201c1408000000000005131e25283232323232323232323232323232322e2c24180a00000000000000000c21364a5b73889db2aa917c67636667686a6968656157524b4437301c13080000000000000000000000000000000000000000000000000000000010263b50657b90a5c9bca7927c67523d271200000000081c3043546e8398adc3af9a85705645321e090000081c2f3f50657b90a2b4b19c8673604b372715020000000000000000000000000000000000000000000000000c1c2a36434a4d4e4e4e4c483b2a1805000000000000000000000000000c21374c61778b9fb5b8a78e79634e39230e000d2035495a6d8298abb5a4917c675443301c080000000000000e1e2c35383c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c382f2212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9b09b8671594834200b00000000071b2d3e566c8196abc0b8a6907b66513d2d1a070000000000000000000000000000000000000b1f34475972879db2c7b7a68c76614c37210c0000000003090b161615110b070000000000000000000000000000000000000000000001080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b080100000000000000010b11131d1d1d1d1d1d1d1d1d1d1d1d1d1d1d19171107000000000000000000071a2d3d576d8297acac97826d575052535454524f4b463935312619120000000000000000000000000000000000000000000000000000000000000e23384e63788dabbcbfaa947f6a553f2a15000000000b20354b6074889eb3c6aa957f6a55382816030000001123374b5d70849aafb6a4927d685544311d0a000000000000000000000000000000000000000000000004182a3a47546063636363625948341f0b0000000000000000000000000012273c51677c91abbcb39e8974604a35200b0006192c3c4e63798c9fb5b19c8673604a362513000000000006192c3c494d5151515151515151515151515151515151515151515151515151515151514c402f1c0c000000000000000000000000000000030a0c101315151413100c0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da5b59f8b77624c37220d00000000001023394e63798ea2b4c4af99846f5b4a3621120000000000000000000000000000000000000d22374c62778ca5b6c8b29d88735847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91aab29d88735b4a3d3e3f3f3d3a363229201d1409000000000000000000000000000000000000000000000000000000000000000b21364b60768a9fb5c1ac97826c57422d17000000000f243a4f64798fa7b8baa88f7a654f3a251000000000081c2e3f50657b90a2b4b29d8774604b38281603000000000000000000000000000000000000000000000a1f34475961727879797977624c37220d00000000000000000000000005182b3b576c8197acc9ae99846f5443301c0700000e21364a5b6e8399aeb5a4917c675443301c08000000000c2035495a626666666666666666666666666666666666666666666666666666666666665e4c3a291704000000000000000000000000090b161e2125282a2a292825221f180e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b72879db2ab937d685339281603000000000c2136495b6f849aafc0b3a18e79634e402f1c0c0000000000000000000000000000000004182a3b51667c91a6c3c3ae99846e593a2a170400000000000000000000030c12141a1a1a16130d04000000000000000000070c0e1415120b0902000000000000000000050b0d1315130c0b0400000000000000000002090b1215140e0c07000000000000000000000000000000000000000000000000000000000000000c21364c61768a9fb4a68e79634e39292a292825211e160b08010000000000000000000000000000000000000000000000000000000000000000091e32455673889db3c4af9a846f5a36251300000003172939556a7f94aac5b49f8975604b36200b00000000001123374b5d70849aafb7a5937e685645321e0b000000000000000000000000000000000000000000000c22374c6177878d8e8e8e826d58422d180000000000000000000000000b2034485972879cb1c8aa947f6a55362513000000071a2d3d4f647a8fa2b3b19c8673604a362513000000000d23384d62787c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c665846331f0a0000000000000000000007121d242932363a3e3f3f3f3d3a37342a2320190e0600000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d576c8197acae99846f5745321e0900000000061a2c3d51667b90a2b4bfaf99846f5e4c3a2a19090000000000000000000000000000000b1f3447596e8398adc3c1a9937e69543e29140000000000000000000006141f27292f2f2f2b28211507000000000000000f1a2123292b27201d150a000000000000000d181f22282b28221f180c000000000000000a151d20272b2a23211a0f0100000000000000000000000000000000000000000000000000000000000a1f33465870859ab0a9947f69543929161413100c0a030000000000000000000000000000000000000000000000000000000000000000000000021628385b70869bb0c5b19c87725443301c0700000a1e33465770859ab0b4af9a846f5645311d090000000000081c2e3f50657b90a2b4b29d8875604b3928160300000000000000000000000000000000000000000013283e53687d93a5a3a39a85705a3726140100000000000000000000000d22374d62778ca4b6bbaa8f7a65503a2510000000000f22364a5c6f849aafb5a4917c675443301c0800000012273d52677d91919191919191919191919191919191919191919191919191919191918b76614c36210c000000000000000002101b22303939464b505354555453504c473b38352c20190e0100000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a9b49f8a76604b36210b00000000000f24384c5e70859ab0bdb3a1907c6659473727180a0000000000000000000000000005192b3c4c61778a9fb4c9b5a38d78634d38230e000000000000000000071524323b3f444444403d332615040000000008131c2d36393f403c3632281a100200000005131d2a34373e403e37342a1d1305000000010f1a2832363c403f39362d1f1608000000000000000000000000000000000000000000000000000000000417293a556a7f94aaaf9a856f5746321e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adc3b49f8975604a35200b00000c21364b61768a9f9f9f9f947f6954382715020000000000001123374b5d6f849a9f9f9f947f695746321e0900000000000000000000000000000000000000000014293e54697e93a9c3b29d87725544311d08000000000000000000000012283d52677d92a7c2b49f8a76604b36210b00000000071b2d3e50657b8fa2b4b19c8673604a36261401000010253a4f657a8fa4a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a38e79644e39240f000000000000000513202d36404d51576165686a6a6968656159564d493c352c1d150900000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9fb4a9907b66513b26110000000000091d2f404f657a8f9fb1bfb39d887761554436281a0e030000000000000000000005162034485a6a7f94a9bac5b19b86715b4935210c000000000000000002152532434f54595a5a55504433210d000000081825303d4a4e5455524b45382d20100000011323303b474c5355534c473b3023130300000f1f2d38454b5255544e4a3d33261606000000000000000000000000000000000000000000000000000000000f24394f64798ea6b49f8a76614b36210c0707070707070707070706030000000000000000000000000000000000000000000000000000000001162b41566b8096abc0baa98c77624c37220d000011263b51667c8b8a8a8a898575614b36210c00000000000000081c2e3f4c617785898a8a8a8776614b36210c00000000000000000000000000000000000000000012273c51677c91a6bcb49f8a75604b35200b0000000000000000000006192c3c586d8297adc2b09b86705645321e0900000000001023374b5d70859ab0b5a4917c675443301c0800000d22384d62778daaa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a6917b66513c2611000000000000061323303e4a4f5e666f767a7d7f7f7e7d7a77716b635a4d493c3127190d00000000000000000000000000000000000000000000000000000000000000000000091e3245576f849aafac97816c573d2c1a0600000000001222374b5d6c8197a5b7b7a69a8473605445382c1e160a05000000000000040d182033434d6278899eb3c7b8a6937e68533c2c19060000000000000000102032434f61696f6f6f6b62503d2813000000132536434a5b63696a6760564a3e2d1c0c000f1f30414d5962686a6861594d41302111000a1b2d3d4a5660676a69635b5044332414000000000000000000000000000000000000000000000000000000000b20354a6074889db3aa917c66513c261c1c1c1c1c1c1c1c1c1c1c1b18100e08000000000000000000000000000000000000000000000000000013293e53687e93a8bdc7a48f7a644f3a250f00000f24384c5e66747474747470615746321e0a0000000000000000111f34475961707474747473615746321e090000000000000000000000000000000000000000000f24394f64798ea4c6bbaa8d77624d38220d000000000000000000000c2035495a72879db2b4ab96816b56382816030000000000081c2e3f50667b90a3b4b19c8673604b36251300000b20354b60748c91919191919191919191919191919191919191919191919191919191917e69533e2914000000000001132431414d5c64707c848b8f93949494928f8c8680786e635a4b44372b1d100200000000000000000000000000000000000000000000000000000000000000000316283954697e94a9b29d88725b4935210c0000000000081b2e3f4b6175879da9bab3a29882726056493c3228201813100f0e0f11171f2b344450616f8499a8b9c2b39e8875614b36210e00000000000000000b1b2e3e4f616a7e848484806b55402b160000071c304354606b797e807c74645c4a3a2a17071a2d3d4d5f67777d807d77675f4d3f2e1c081628394a5b63747c807f796b625042311a0a000000000000000000000000000000000000000000000000000000071c3043546d8298adac97816c573d2c3131313131313131313131312e25231c110300000000000000000000000000000000000000000000000011263b51667b90a6bbbca7917c67523c27120000091d2f404c515f5f5f5f5f5b4b4639291603000000000000000004182a3b474c5b5f5f5f5f5d4b46392816030000000000000000000000000000000000000000000c21374c61778ca8b9c8a58f7a65503a2510000000000000000000000e23384d63788d9f9f9f9e917c66513c2711000000000000001123384c5e70859b9f9f9f917c675443301c0700081d314455667c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c79634e39240e00000000000f1f31424e5f677a85919a9faaa8a9aaa9a8a5a49c968c83786a6055483c2e20110300000000000000000000000000000000000000000000000000000000000000000e23394e63798ea8b7a58e78634e39230e000000000000101e334657647a8b9fb4bbb2a0988274635a4b4538342b28252423242629333b484d626b7f95a1b3c6b6a4947f695746321e0900000000000000031729394a5c6a7f949999917c67513c271200011426364a6072808b949591867a645847331f0c21364a5b677d89939593897d675d4b37230e1e3245576379869195948b806b604e3828150200000000000000000000000000000000000000000000000000000013253652677c92abb29d87725b4946464646464646464646464646433a372e21110400000000000000000000000000000000000000000000000e24394e63798ea3c5bfa9947f6a543f2a1500000012222f383b4a4a4a4a4a463632291b0b000000000000000000000c1d2a3437464a4a4a4a483632281b0b000000000000000000000000040a0c111415130f0b080a1f33475874899eb3bca7927d67523d28120000000000000000000013283d52687d8b8a8a8a898374604b36200b00000000000000091c2f404d627886898a8a8a8575604a35200b00011426374c5e666767676767676767676767676767676767676767676767676767676767635b4a36210c0000000008182d3d4e60687d8b9ba2afb4b8b3aeabaaaaadb1b1ab9f998b8073625a4b3e2f211101000000000000000000000000000000000000000000000000000000000000000b20354b6074899eb4a7927d67523d2812000000000000031729394b5c687d929dafbbb2a09885786a60564c483b3d3a3938393b3a474c59626e80959dafbfbbaa9c8674604b39281603000000000000000e1e334657647a8c9fae9c8773604b35200b00081c304354687e939faaaaa49c8876614c37210e24394e63798b9ea7aaa79e8d7b65503a251021364b6075879ca4aaaa9f937e685645321d090000000000000000000000000000000000000000000000000000000c21374c61778b9fb4a58e78635c5c5c5c5c5c5c5c5c5c5c5c5c5b58504b3f2f221100000000000000000000000000000000000000000000000c21364b61768ba7b8c1ac97816c57422c1702000004121d2426353535353431211e160b0000000000000000000000000c181f22303435353533211e160b0000000000000000000000060c181f2227292a2825201d14172a3a5c71869cb1bfaa957f6a55402a150000000000000000000011253a4e5f6874747474746e605544311d080000000000000000112035485a62717474747471605443301c070000091930404c5152525252525252525252525252525252525252525252525252525252524e4a3d2d1a07000000011426364a5b687e8d9fa9b4b6b1a69e98969495979ca4aab3aa9f958578645c4b3f2f1f0f00000000000000000000000000000000000000000000000000000000000000081c30435470869bb0ab96806b56412b16000000000000000b1b2e3e4e5f6a7f949db4bab2a39b8a7f756a625956524f4e4e4f515458616a7782959eafbcbcb49f8c7a645645311b0b000000000000000e1e30414b6175879caaa7937e695443301c08000b20354b6073889eb3bbc2b6a6947f6a543f2a192e44596e8399aab9c5b8ab99846f5a442f1a293e53697e93a5b6c2bbb39e8975604b36200b0000000000000000000000000000000000000000000000000000000a1f33475870859bb0a9947f7171717171717171717171717171706d655d4c402f1c09000000000000000000000000000000000000000000000a1e32465773899eb3c4af99846f5a442f1a0000000000090f111f1f1f1f1f1b0c0a030000000000000000000000000000040b0c1b1f1f1f1f1e0c090300000000000000000000010f1a212a33373c3e3f3d3a353126202f44596e8499aec2ac97826d57422d18000000000000000000000b1e31414e525f5f5f5f5f594b4437271502000000000000000005192b3c484d5c5f5f5f5f5b4a4336251300000000122230393c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c39362d1f1002000000081c30435463798b9fabbab3a49c918883817f8082868d959ea7b4a39b887a655d4b3d2c1a0600000000000000000000000000000000000000000000000000000000000001142636596e8499aead98826d58432d1800000000000000001020314150616a7f929fa9b6b5a89e94887f77716b686564636466696f767f8a98a0afbcbcb09e937e695c4b3827150000000000000009192c3c4d5f6d8298a5b39e8975604b36261401000d22384d62778da7b8ccd3c5ae99836e59442e1d32485d72879db2c8d6c9b39e89735e49341e2d42586d8297adc3d3ccb9a88e79634e39240e00000000000000000000000000000000000000000000000000000004172a3a556a7f95aab39e89868686868686868686868686868686837b665e4c38230a00000000000000000000000000000000000000000000031629395c71869bb1c6b19c87715c3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131f2c353a474c515454534f4b4437342b41566c8196abc1af9a856f5a36261401000000000000000000011323313a3d4a4a4a4a49443631271909000000000000000000000e1e2b3538464a4a4a4a46353025180800000000041425323b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a372e21100000000b20354b6073869ca9bab3a29a867c736e6b6a6b6d7178808998a0b4a69d8a7b655b4935210c00000000000000000000000000000000000000000000000000000000000000182d43586d8298adae99846e59442f190000000000000000021323334350616a7d8b9da5b4b9b4a69d958c86807d7a7978797b7f848a949ea8b2bebab49e96806b604f3e2e1a0a00000000000001152737495a677d92a0b2a995806b574532180800000d22374c62778ca4b6cad0c2ad98836e58432e1d32475c72879cb1c5d3c6b39d88735e48331e2d42576c8297acc0d0cab7a58d78634e38230e000000000000000000000000000000000000000000000000000000000f243a4f647a8fa7b8a79e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b988d7c66503828160200000000000000000000000000000000000000000000192e44596e8399aec3b49e89745847331f0a0000000000000000000001080b10131514120d0b05000000000000000000090b0b0b00000000000000000000000000000000051324313d494e586166696a686460554d483b3e54697e93a9beb29c87725443301c080000000000000000000005131e252835353535342e201d15090000000000000000000000000e192022313435353531201c130800000000000c2032434f5455555555555555555555555555555555555555555555555555555555554f4b3f2e1b080006192b3c51677c91a4b5b7a59a8475666054565555585a626a7782929fa9a89f8a78634e39230e000000000000000000000000000000000000000000000000000000010b1113182a3b586e8398adae98836e59432e1900000000000000000005152533434f5f677a87969fabb2b7b2ab9f9b96928f8e8d8e9094999fa9b4b9c0b4a99f92806b62514232201000000000000000081d31445562788a9eb4b49f8b77624c3928160000000b2034485972869cb1b9c0b3a4927d68533d28172d42576c8297a7b6c3b6a898826d58432d18273c52677c91a2b3bfb9b29d8773604a35200b000000000000000000000000000000000000000000000000000000000b20354b6074889eb3b8b3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b0ab9b85705645321e0900000000000000000000000000000000000000000001172c41566c8196abb2b2a88c77614c37220c00000000000000000109141d2025282a29272220190d0a040000020b11131e20202012100a01000000000000000000000000132331424e5b636f777c7e7f7d7a746b62594b4351667b91a6bbb49f8a75604b35200b0000000000000000000000010b11131f1f1f1f1f190b08020000000000000000000000000000050b0d1c1f1f1f1f1c0b070000000000000012273b4f61696a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a655d4b37220e000b2035485a70859bb0c2b29d877561574a43363f403c484d59626d7d8b9ba3998372604a35200b000000000000000000000000000000000000000000000000000005131e25282734475970859bb0ac97826c57422d170000000000000000000007152532414d5c6475818c99a1acb3b9b5b0aba7a4a3a3a4a6a9aeb4bac1b4b0a29a8a7d6b62514434241402000000000000081c2e3f4b6073859ba8b9ab97826d5948341b0a00000005182b3b50657b909ea7a7a29a8674604b36200d22374c6277899ca5a7a49c8a79634e38230e20354a6072849aa1a7a79e907b655443301c0700000000000000000000000000000000000000000000000000000000081c3043546d8398adb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b19f8b75604b36210b0000000000000000000000000000000000000000000014293e54697e939d9d9d9d8e79644f39240f0000000000000009151d2631353a3d3f3e3c38342b211f170c01141f26293335353527251d1305000000000000000000000e1e31414e606879848b919394928f8981786960544e63798ea3c5baa98c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b654f3a2510000d23384d62788da2b4b8a6917c6757463930252a2b2b353b484c5f6879858d8575615443301c0700000000000000000000000000000000000000000000000000011323313a3d37444c62778b9fb4a8937e68533e29130000000000000000000000071523313e4a57606b79838e979ea7acb1b4bbc8b9b8b9bbc8bbb4b0aaa39b9084786860514434261606000000000000000e23374b5d6b8095a3a9a89f8c79634e3b2a1800000000000d23384c5d687e8990918e8477625645311d0b1f344759647b878f928f877a645b4935210c1c3043546177848e9190897e685e4c36251300000000000000000000000000000000000000000000000000000000000114263652677d929c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c8e78634e39230e0000000000000000000000000000000000000000000011263b50667c8788888888877b66503b26110000000000000c19273137444b4f525454524d483c3633291c1424313a3e484a4a4a3c3930231301000000000000000005192b3c4d5f687e8b999faaa9a9a8a79e968a7f72615761768ba7b8c7a48f7a644f3a250f000000000000000000000000000000000001080b0f12141514120f0b090200000000000000000000000000000000000000000000000000071d32475c72879494949494949494949494949494949494949494949494949494949494816c56412c170012283d52677d92a7c0b39e8875604b39291c13151619202a34414e5b6373787461574636251300000000000000000000000000000000000000000000000000000b1e31414e525855606c8197aab4a28d78634e38230e0000000000000000000000000513202d39454b5b636e79818991969c9faaa6a7a8a8a7a6aa9f9b958e857b6f635a4e4134261608000000000000000010253b50657a8b9393939391816d5b4a361d0d0000000000091c2f3f4e6068767b7c796f62594838271505182a3b4b5c64737a7c7a73645c4b3d2c1a061325364759616f797c7b7668604e402f18080000000000000000000000000000000000000000000000000000000000000c22374c6177868787878787878787878787878787878787878787867b654f3a2510000000000000000000000000000000000000000000000f23384c5e66727272727272665e4c38230f00000000000c1c2a37444b556065686a6967625a544c463a302631424e535e606060524d41301d0a00000000000000000b2035485a677d8d9fa9b4bbc3b7b2b0b1a99f948375615873899eb3bca7927c67523d27120000000000000000000000000000000709151d2024282a2a292824201d150b070000000000000000000000000000000000000000000000051a2f455a6f849aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa99836e59442e1900182d42576d8297acc2ad98826d5544311b0b000000050d181f313d4a54606360554639291808000000000000000000000000000000000000000000000000000011253a4e5f686d6e7480959fb1aa9a846f5b4935210c0000000000000000000000000002101b28323d4a4e5c646c757c81878a8e9092939392918e8a85807970665e4d493c3123160800000000000000000012273c51677d7e7e7e7e7e7b73604b3d2d1a00000000000000112131424e57616667635b4c483b2a1a0a000d1d2e3e4b556065676560554b3e2e1f0e0008182a3b474c5b63676661574e41312111000000000000000000000000000000000000000000000000000000000000000b1f3447596172727272727272727272727272727272727272727272655d4b37230e00000000000000000000000000000000000000000000091c2f404c505d5d5d5d5d5d504c402f1c090000000009192a3a4755606a747a7d7f7e7c77726961584b4336394e606873757575675f4d3925100000000000000005182a3b4d62788a9fabbac1b4b0a59d9b9c9faba19985766171869bb0bfa9947f6a543f2a1500000000000000000000000000050f1a21273135393d3f3f3f3d39363127201c130800000000000000000000000000000000000000000002172d42576c8297a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39b86715b46311c001b30455a70859aafbea8937e695337271514100c0a040005131f2d36434a4d4b4437291b0b00000000000000000000000000000000000000000000000000000013283d52687d828488959eafb49f8c7a644f3d2c1a060000000000000000000000000000000a161e2d363d4a4e5660666c7175787b7c7d7e7d7c7976706b635b504c40352c1e1305000000000000000000001024394d5f67696969696966605544311f0f000000000000000313243139464b50524e4a3d342a1d0d00000010202e37444b4f524f4b44372e20100000000c1d2a343d4a4e52514b4639312313030000000000000000000000000000000000000000000000000000000000000004182a3b474c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4f4b3f2e1c08000000000000000000000000000000000000000000000011222f383b4848484848483b382f22110000000001142637475861737f888f929493918d877f76686054474657687e888a8a8a7d67523c2712000000000000000b1f3447596e8398a8bac1b4a39b8e8785878c969fa39b84756e8398aec1ac97826c57422d170200000000000000000000000d18202d3637444b4f52545554524e4b45383530251812040000000000000000000000000000000000000000152a3f546a7f8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d88735e48331e001c31475c71869cb1bba6917b66513c252c2925211f17130e0c0f1825303538353127190b0000000000000000000000000000000000000000000000000000000a20354a5f758b97999ea6b2a99f927f695c4b371f0e0000000000000000000000000000000000030f1a212d3638454b5157566063666768696866636056554e4a3d382f20190e0000000000000000000000000a1d30414d515454545453514b4437261401000000000000000006131b2932363b3c39362d1f180d000000000210192631353a3d3a353126191002000000000c181f2d36393c3b3632291b13050000000000000000000000000000000000000000000000000000000000000000000c1d2a3437474747474747474747474747474747474747474747473a372e211100000000000000000000000000000000000000000000000003111c232633333333333326231c110300000000081d314455617685949da6a7a9a9a7a49c94887e7361594b61768b9da69f947f69543f2a14000000000000000d22374c62778b9fb4c6b5a39b857972707277818c9ea398826e8096abc0af99846f5a442f1a00000000000000000000010f1d2b343d4a4e55606467696a6967646056514a43362f1f170c000000000000000000000000000000000000000c21364c6176787878787878787878787878787878787878787878787878787878787879634e38230e001e33485d73889db2baa58f7a65504336413e3b37332a292320190e131c2023201d150900000000000000000000000000000000000000000000000000000000091e33485e73889da7a5a69d968a7e69614f3e2e1b0000000000000000000000000000000000000000070f1a212832363c38454b4e5152535352514e4b453839362d231c11060000000000000000000000000001122330393c3e3e3e3e3e3c353126190900000000000000000000000b161e21262723211a0f050000000000000009141d20252725201d140900000000000000040f1a21232726211e160b0000000000000000000000000000000000000000000000000000000000000000000000000c181f223232323232323232323232323232323232323232323225231c11030000000000000000000000000000000000000000000000000000090f111d1d1d1d1d1d110f090000000000011426364b6073849aa3b3b7c4b9b3b0b1b1a79e938477635b62788daab7ac96816c57412c170200000000000014293f54697e94aabbbcab9b8574645c5b59626b7b889da0937e7e93a8beb19c87725c3b2a1805000000000000000002101f2d3b484c5b636d75797d7f7f7e7d79756e6660544c4033291c0f0100000000000000000000000000000000000a1f334658616363636363636363636363636363636363636363636363636363636363635b4935210c001e33495e73889eb3b9a48f796460545a5754504c473a3e38352c23211a0f0e0b08010000000000000000000000000000000000000000000000000000000000061b31465b70859292908d88817768604f4332201000000000000000000000000000000000000000000000070a161e2126273136393b3d3e3e3d3c3936322823211a0f090000000000000000000000000000000005121d2427292929292926201d140900000000000000000000000000030a0c11120e0c070000000000000000000001080b1012100b080100000000000000000000070c0e12110c0a030000000000000000000000000000000000000000000000000000000000000000000000000000040b0c1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354687e93a2b3c1bab4a79e9b9c9ea8afa29a87796361768ba9baae99846f59442f1a00000000000003172939596e8499aec8b59f8c7964564a3e484d5d6578889d9f8b7e93a9beb49f89745947341f0b000000000000000010202e3d4a59626d7982898e92949494928e89837b73665e4c463a2c1f1002000000000000000000000000000000000417293a464c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e493d2c1a06001d32485d72879db2bda7927d7775726f6c6965615858534d493c39362c241d12060000000000000000000000000000000000000000000000000000000000000011263b50667c7d7c7b78736c62594e423225140200000000000000000000000000000000000000000000000003090b11151d202326272829282724211e160e0c0700000000000000000000000000000000000000010a10121414141414110b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073879cb2c0baa99f9289868689919aa2a59d887963748a9fb4b19c86715c3a29170400000000000a1e33465773889db2c5b09a85705c4a382d343f4b5a647a8a9e9d889db2c8baa98c77624c37220d000000000000000c1c2e3e4b5b6377828c989ea8a7a9aaa9a7a89e9890867c6e6158493d2e201001000000000000000000000000000000000c1c293336383838383838383838383838383838383838383838383838383838383838352c1f0e00001c31465c71869bb1c6ad9b928c8a8784817e7a76726d68635a564e493d382f21190e0000000000000000000000000000000000000000000000000000000000000f23384c5e66686766635b564c483b31231406000000000000000000000000000000000000000000000000000000000002090b0e1112131413110e0b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b10131514110c0a04000000000000000000090b0b0b000000000000000000000000000000000006070b0b0a060000000000070b0f13151513100b090200000000000000000000000000000000000000000000080e1020202020201f1a100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa5b6c4b49f8b7e757171747c84929ea69d877673889db2b39e89745846331f0a00000000000c21364c61768ba6b7bfaa947f6a553e2d1a202e3c4a5c687d92a19da6b7cbc7a48f79644f3a240f0000000000000417293a4b5c647987989fabb4b6b1acaaa9abb0b4aea49c908376635b4a3e2e1f0f00000000000000000000000000000000000c171f21232323232323232323232323232323232323232323232323232323232323211a0e000000192f44596e8499aec3baada7a99f9d9a9693908c87837e78726b635b514c40352c1e120400000000000000000000000000000000000000000000000000000000091c2f404c505352504e493d37342b1d130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a151d2026282a2927221f180c07000000040d14161f202020100e080000000000000000000000000a141a1d2020201b0c0a0408131c2024282a2a2825211e160a0800000000000000000000000000000000000003111c23253535353535342f25231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9c3b8a6927e6860555560666f7d899da59a8473869cb1b9a88b76614c36210c00000000000d22384d62778da2c4bba6917b66513c2611111e2d3e4e606e8399a9b7c4d4bca7917c67523c27120000000000000a1f334658647a8a9da6b4b6b1a49c979494969ba3aeb3b1a0988779645c4a3d2c1b0b0000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0600000000162b41566b8096abc0bcab9faba3a6a9aca9a5a59d98938d87807970665e4d493c302212040000000000000000000000000000000000000000000000000000000011222f383b3d3d3b38352c2220180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0f12131415141312100e0b0801000000000000000000000000000000000000000000000000000000000000000c171f2731363b3d3f3e3c37332a201c1308081621282b3435353525231c11030000000000000000000e1c272f3235353530211f171f253035393d3f3f3d3b363228231c11060000000000000000000000000000000011212f373b4a4a4a4a4a49453a372e21120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e8398adc3b39e8874604b44444b515f6779879da2947f849aafc6a38e79634e39240e00000000000e24394e63798ea3b8b8a38e79634e39240e000f2031414d62788a9fb4c6d7bea9947f69543f2a140000000000071a2d3d4c6176879da8b7b5a49c9087817f7f81868e99a1b5b2a59d897a645b49392917030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7c3b59f8d8c8e9194979b9faaa9ada8a49c958e857c70635b4d403022120000000000000000000000000000000000000000000000000000000003111c232628272623211a0f0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c12171f212427292a2a2929272523201d14120c0a040000000000000000000000000000000000000000000000000003111c2a3338454b50535453514c473a353025181626333d40494a4a4a3b382f211100000000000000000a1c2c3a43474a4a4a4637332a3336434a4e52545452504b4538372e211a0f0100000000000000000000000000081c2f3f4b505f606060605f5a504b3f302312010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a30455a6f859aafc3ae99836e5544313135414d5b6378889d9f8b869cb1bba6917b66513c261100000000000f24394f64798ea4b9b7a28d78624d38230d0001132035485a6b8096a8b9cdc1ac97816c57422c1702000000000c21364a5b6e8298a5b7b5a39b867b726c6a6a6c717983949fabb7a79e8979635746331e1100000000000000030c12142020202020202020202020202020202020202020202020202020100e080000000000000000000000000000000d22384d62788da4b6b49f8a76797b7f82868a8f949a9faab0aba29a908479665e4d402f1c0c0000000000000000000000000000000000000000000000000000000000090f111312110e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b161e21272a33373a3c3e3f3f3f3e3d3a3835312627211f170c09030000000000000000000000000000000000000000000211212e3a474c566065686a69666158514a43362d1f334450555e606060504b3f2f1c080000000000000014273a4a575c60605f5b4c473a474c546064686a6a68656056504b3f352c1f13050000000000000000000000000e23374b5d657575757575746f655d4d41301f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869bb1c0ab96806b5637261d20303d4a5a647a8a9f9f9ca4b5bea8937e69533e291400000000000e23384d63788da2c7b7a28c77624d37220d000005192b3c4c61768a9eb4c9c4ae99846f59442f1a00000000031628394e63798c9fb5baa99b8576655d575554565b636f7f8d9fabb8a79c8775614b402f19090000000000071420272a353535353535353535353535353535353535353535353535353525231c1103000000000000000000000000000b2035485a72879cb2baa9907b65666a6d71757a7f848a929ba3b2afa29a8a7c665e4c3a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a212932363d3a474c4f52535454545352504d4b44373c37332a211e160a050000000000000000000000000000000000000010202e3f4b58616c757b7d7f7e7c77706760544a3d323b50626b74757575655d4b38230e000000000000001a2f435768727575757061584d58616b73797d7f7f7d7a756e655d4e493d31231608000000000000000000000010253b50657b8c8a8a8a8a89847b675f4d3d2c1a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869bb1bfaa95806a55402b15131f2d3c4a5c687e93a2b1b5c2c0ab96806b56412b1601000000000c21374c61768ca9bab8a38e78634e39230e0000000e1f3347586c8196abbcc6b19c87715c3a2a1704000000091e3245576d8298abbcb49f8a7862584b3f3f3f3d4a4e616a7d8d9fb4b6a598826d5e4c37261401000000031425323b3f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b382f21110000000000000000000000000005192b3c566b8196abc1ac96816c565458566064696f767d85909da5b4a89f8d7c665947341f0a0000000000000000000000000000000000000000000000050b0d0b090200000000000000000000000000000000000000000000000000050b0d0b080100000000000000000000000000000000000000000000000000000e19202d3639464b52585861646768696a6968676563605557514c473a36322820180d04000000000000000000000000000000000a1a2d3e4b5d6576818990929493918b857c72635b4f4247596b80898a8a8a7b65503b2510000000000000001d32475c72868a8a8a8576615e667680888e929494929089837b6f635b4d4133261608000000000000000000000e23374b5d697e939f9fa89e9a8d7d675b4938281602000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a30455a6f859aafc0ab95806b56402b16010f1e2d3e4e606f849aaabbcec3ad98836e58432e1900000000000b20354b60758a9fb4b9a48f7a644f3a250f0000000417293a4d63788c9fb4c9b49e89745847331f0a0000000b21364b60768a9fb4c3ab95806b5a483a2e2a2a2d36434f5f6a7f95a1b3b2a0907b665544311d080000000c2032434f546060606060606060606060606060606060606060606060606060504b3f2f1c08000000000000000000000000000e24394e63798ea3b5b39e8975604b38454b4f54586168717c879aa2b4ab9e8977614c37220c000000000000000000000000000000000000000000000d182022201d150a00000000000000000000000000000000000000000000000d192022201c1408000000000000000000000000000000000000000000000003141e2b353d4a4e5761676d7277797c7e7f7f7e7e7c7a7875716c676158524b4539342b1f170c0000000000000000000000000000021528384a5c657b88979ea7a8a9a8ab9f9b91857969604a4c61778c9ea79f927d68533d2813000000000000001a2f455a6f849aaa9f95806b697c88959da6a7a9a9a7a89e998f8479675f514434261606000000000000000000081c2f3f4e606c8197a2b4b4ab9e8a79635645321e1301000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aec2ac97826d57422d180200102031424d62788b9fb4c7c5b09b86705b3828150200000000081c30435471869bb0bda7927d68523d2813000000000c2035495a6f849aafc6b9a88c76614c37210c00000010263b50657b90a9bab7a58d78634e3c2b1c15151a2132414a60728399aabbb19c8673604b35201000000012273b4f61697575757575757575757575757575757575757575757575757575655d4b38230e000000000000000000000000000c21364a5b70859bb0b9a7927d68564532363a3a474c535e6676849aa8b8a7947f6a54392816030000000000000000000000000000000000000002131d2b34373631271a0a0000000000000000000000000000000000000000000d1d2b343735302618110100000000000000000000000000000000000000000b161e323c484d5b636d767c82878c8f919394949493928f8d8a86827c766f6760574c483b33291c1305000000000000000000000000091d324556647a8a9ea6b3b9c1b5b1adacb0a39b8b7e6c605463788dabb9aa95806a55402b1500000000000000182d42576d8297acb19b86717e8d9ea7b2acaaa9abafb5b4aea29a8a7d6b62514434241402000000000000000000112131424b6073849aa5b6b9a89c8674604b41301f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c8196acc1ae99846f59442f1a000002142035495a6c8197a9bac8b39d88735645321d090000000001142636576c8297acc8ab96816b563b2a180500000006192c3c52687d92a8bac6a48e79644f39240f000000162b40556b8095aac7b29d87725b49351e0e000007151c30435463798c9fb4b6a4927d67523e2e1b070000142a3f54697f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7b65503b251000000000000000000000000000071a2d3d51667c91a3b5b29d8774604b3e2e25293337404c5862778a9fb4b19c86715746321e090000000000000000000000000000000000000a151d313b484c4b45382715020000000000000000000000000000000000000005192b3b484d4b43362e1c14080000000000000000000000000000000000000c1b2832424f5a626e79828a92989da5a4a7a8a9a9a9a8a7a5a99f9b97918b847d756b62594c463a3023130100000000000000000000001325364b6074879ca8b8c2b6b1a39b98979b9faa9f9380726061768caabbad98826d58432d1800000000000000152a3f556a7f94aab49f8c7d929faba59d979493969a9fabb5b3a89e92806b62514231201000000000000000000003141d3144556176879da8b9b5a497816c5f4d3d2c1a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9beb19c86715c3a291704000006192c3c4c62778a9fb4c9b59f8a75604b36200b000000000013283d52687d92aabbb09b85705947341f0b000000000e21364b6176899fb4bba6917c66513c2711000000192f44596e8499aec3ae99846e593d2c1a0000000000132536495b6d8297acc1b19c86715c4a36220d000012273c51677c919f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927d68533d281300000000000000000000000000000f24394d5e70859babb7a5947f6a5c4a3c2d1d1f212f3a47596e8398adb5a48b76614b36210c00000000000000000000000000000000000a1a2731424e5962605645311d11000000000000000000000000000000000000000b203448596260544b3f30261808000000000000000000000000000000000c1c2939464b606978838e989fa9ada9a99f9c9998979798999b9d9faba9aa9f9a928980776b61584d41301e0a00000000000000000000071c3043546a7f94a5b6c4b6a49c8f868282858c98a09e96816c60758a9fb4af9a85705a3727150100000000000012283d52677d92a7bbaa9f8a9fa1998e87827f7e80858c989fabb9b49e95806b604e3e2e1b0a00000000000000000001152737475863798a9eabbcb19f927d675b49382816020000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7bcb39e89745846331f0a0000000e1f3448596d8298adc4bcab8d78634d38230e00000000000c22374c61778b9fb4b59f8b77624c372211000000000a1e32465770859ab0bea9947e69543f29140000001b30455b70859ab0c0ab96816b56412c16000000000008182c3d4e63788da3b5b5a48f7a644f3a240f00000f243a4f64798fa4b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5aa95806a55402b150000000000000000000000000000091d30404f657b8d9fb5b49f8b7a645a4a3d312724222a3b546a7f94a9c2a38d78634e38230e0000000000000000000000000000000002152738454b60687774604b3f2e1b0b0000000000000000000000000000000000081b2e3f4d627874655d4b433626140100000000000000000000000000000a1b293a4757616e7e8a99a1adada39b948e8a8684838282828485888b8e93999ea8a79e968a8076675f4d392510000000000000000000000b20354a6073879db2c3b7a69c867a716d6d707883929f9f947f6a73889db2b29d88725544311d0800000000000010253a50657a8fa5c8bbaa9f9f948379726c6a696b7078828d9ea8b9b09e937e695c4b3928160300000000000000000009192a3a4a5b667c8d9fb4bdb49e8a79635645321e13000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c8b9a78b76614c36210c00000005182a3b4f647a8fa6b7c9a5907a65503b251000000000000a1f3347586f849aafbcab937e68533f2f180800000003162939586d8398adc1ab96816c56412c170100001c32475c71879cb1bfaa95806a55402b150000000000000f2135495b71869bb1c2ac96816c573c2c1906000c22374c61778ca8bacdc5b8b3acacacacacacacacacacacacacacacacacac98826d58432d180000000000000000000000000000001222374b5d6c8196a4b5a99d8778635b4b453839373643546a7f94a9c1a48e79644f39240f00000000000000000000000000000000091d314556606f7e89806b5d4b39291603000000000000000000000000000000000d22374b5d7085867b6d605443301c0800000000000000000000000000081828394758617583939fa9ab9f988e867f7975716f6d6c6d6d6e707276797e838991999fa99f96887d67523d27120000000000000000000010253a50657a8fa5b7c5b29d8877645c58575a636e7e8b9f9f8d7c71869bb1b49f8a75604b35200b0000000000000d22384d62778daabbc8b59f8d7f6f645c575554565a626d7c8a9ea7b9b49f8b7a645745321e0e000000000000000000000c1c2d3d4c5e6a7f94a0b2b9a89c8674604b41301f0e0000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778caabbc5a38e79634e39240e000000000d22374b5d73889db2bda8927d68533d2813000000000004182a3a52687d92a6b7b19c86715d4c36261401000000162b40556b8095aac0ae99846e59442f190000001e33485d73889db2bfa9947f6a543f2a15000000000000061a2c3d546a7f94a9c7b29d87725a4935200c000b1f34475974899fb4c9b8a79e9797979797979797979797979797979797979785705a45301b000000000000000000000000000000081b2e3f4b6075869ca6b7a59d88796a6056514e4c4e546070859bb0b4a38c77614c37220c000000000000000000000000000000000b20364b607483929e8d7b655746321e1100000000000000000000000000000004182a3a4f647a8f9b8f8172604b35200b00000000000000000000000000132536455761768599a1b4a39b8c8279716a6460555958575758595b576064696e757c848c979fa69e88735e49331e09000000000000000000152b40556a8095aac3b8a6927d67594a3e3c494d60687b8b9f9e89778499afbbaa8d78624d38230d0000000000000b20354b60758a9fb4bfaa95806a614f4a3e3f3e3c484d5e6679899eaabbaa9d8775604b3c2c1906000000000000000000000f1f2f404f616d8298a3b4b5a497816c5f4d3d2c1a0a00000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4bba6907b66513b261100000000081b2e3f5b70859ab0bfaa95806a55402b150000000000000c20364b6074889db2b5a4907b655443301c0f00000013283d53687d92a8bdb19b86715c3a29170400001d32485d72879db2c0aa95806b55402b16000000000000000f24394e64798ea9bab7a58d78634d38230e0004182a3b5c72879cb1c7b39e8982828282828282828282828282828282828282806b55402b1600000000000000000000000000000000101e3245566278889da6b6a69d8a7f746c6663626368738096a3b5b09b85705847331f0a000000000000000000000000000000000f243a4f64798fa1ab9d8775614b3f2e1a0a00000000000000000000000000000a1f3347586e8398ae9f937e68533e2813000000000000000000000000071c3043546075859ba3b59f96857a6d645c544f4b4437434242434439454b4f545660676f78828c9998836e58432e1903000000000000000004192f44596e8399aec3b39e8874604b3b2e2c35424e5d667c8c9f99838298adc8a58f7a65503a2510000000000000081d31445572889db2baa5907a655043362d2a292b35404c5b657b8c9fb4b7a595806b5a4935200e0000000000000000000001122232434b6074859ba6b7b19f927d675b493828160200000000000000000000000000000000000000000000000000000000000000000000000000081c30435472879db2bda8937e68533e29130000000000182e43586d8398adc2ad97826d58422d18000000000000091d314556697f94a5b7b19b8573604b3d2c1c0c000010253b50657a90a5c8b39e89745846331f0a00001c31475c71869cb1c1ac96816c57412c17000000000000000b20364b60758a9fb4c3a7927d67523d271200001a2f445a6f8499afc4b39d88736d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6b62503d28140000000000000000000000000000000003162838485a647a889ca4b5a99f9488817b7977797d85969eb0b3a2917c67523a2a1804000000000000000000000000000000000b20364b6075889db2a596816c5d4b38271502000000000000000000000000000c22374c61778b9fb4aa927d68533d2813000000000000000000000006192c3c4a60728399a3ab9f948174645c4e4a3e393631272e2d2d2d2f2832363938454b515b636d7983867a644e39240f000000000000000000081d32475d72879cb2c2ad98826d5544311d1920313f4c5e6a7f94a199869cb1bda7927d68523d2813000000000000011527375b70859ab0bda8927d68533d281b151419202f3d4b5d6a8095a4b6b49f8b78634d3c2b19050000000000000000000004151d3245566277879da9bab49e8a79635645321e1300000000000000000000000000000000000000000000000000000000000000000000000000011426365a70859aafc0ab95806b56402b160100000001162b40566b8095abc0af9a85705a362614010000000000021527384b6175879db2b5a3937e685b493a2a1b0e000d23384d62788daabbb9a78b76614c36210c00001a2f455a6f849aafc2ad98826d5837271501000000000000081d31445571869bb0c0ab96806b56412b160002172d42576c8297acc1b59f8a7660575757575757575757575757575757575755504433210d00000000000000000000000000000000000a1a2b3c4a5c647886979fabb4a69e96908e8c8e929ba3b0b4a39a8472604a35200c0000000000000000000000000000000000091d324556677d92a2b59f8d7b655645311d0d00000000000000000000000005192b3b53697e93aab49f8b77624c37220d00000000000000000000000c2035495a697e93a1b59f8d7f6c60564a3e362d24201d151817181819161e21242832363d494e5c646e71645c4a36210d000000000000000000021628385e74899eb3bea9947e69543726140613212f404a6072849aa49ca4b6bfaa957f6a55402a1500000000000000182e43586d8398adbfaa95806a55402b15000005121f2e3f4b6074869cb1bbaa97826d5a483520080000000000000000000000021528384859647a8a9fb4b9a89c8674604b41301f0e00000000000000000000000000000000000000000000000000000000000000000000000000182d43586d8298adc2ad98836d58432e18000000000013283e53687d93a8bdb29d87725443301c080000000000000a1e324657667c91a0b2b49f8a79635847392c1c130b20354b60758a9fb4c5a38e79634e39240e0000172d42576c8197acc1b09b86715544311d0800000000000002152737586d8398adc2ad98836e58432e190000152a3f546a7f94a9bfbcab8d78634e42424242424242424242424242424242403d332616040000000000000000000000000000000000000d1d2d3d4a5a6276818d9aa2acb2aca6a3a1a3a8b0b3ab9f978576615443301c070000000000000000000000000000000000021528384d5f70849aaaab9c8674604b3c2b190500000000000000000000000b2034485970859bb0af99846f5947341f0b00000000000000000000071b2d3e4d62788a9fb4a0947f6a614b45382d211a11110e0b080100030003090b0f161e212c353d4a4e595c4e4a3e2d1a07000000000000000000091e324556758a9fb4bba6917c66513c27110003121c30435462788a9fb1b6c2c2ad97826d58422d1800000000000000162b40556b8095aac0ad98826d58432d1800000001111d314455677c91a4b5b49f8b78624d3625130000000000000000000000000a1a2a3b4a5c677d919eafb5a497816c5f4d3d2c1a0a000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aac0b09a85705b372715010000000011263b50667b90a5bbb49f8a75604b35200b000000000000031628394c5e6e8398a4b6a89c86766157493c30251d1d31445572889db2bba6917b66513c2611000014293e53697e93a8c5b49f8a75604b35200b00000000000000172c42576c8197acc1b09a85705b45301b000012273d52677c92a7bcc9a5907b65503b2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2b2821160800000000000000000000000000000000000000000f1f2d3c4958616c7b858e979ca5a5a7a8a8a6a79e978c8174615846362513000000000000000000000000000000000000000a1a30414e63798c9fb4a4947f6a5a4834201000000000000000000000000d22374d62778ca3b4aa927d67523b2a1805000000000000000000000d22364a5c6e8398a8a698826e61504331271d2024262623201c14080600010b161e21262827252d3639444639362d200f000000000000000000000b21364b60768baabbbaa5907b65503b2610000000132536485a6a7f94a6b7cbc4af9a856f5a3626140100000000000013283e53687d93a8bdaf9a85705a37261401000000021527374d5f71869cb1bbaa95806b5443301c070000000000000000000000000d1d2d3e4d5f6b8095a1b2b19f927d675b4938281602000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdb29d88725544311d08000000000e23394e63788ea3c5bbaa8c77624d37220d000000000000000b1b2f404c6176869ca7b6a49b8575635a4a4336312627375a70859aafbea8937e69533e291400000f243a4f647a8fa7b8baa98e79634e39240e00000000000000162b40556b8095aac0b19b86715c46311c00000f253a4f647a8fa4c7bda8937d68533e28181818181818181818181818181816140d04000000000000000000000000000000000000000000010f1e2b3a464c5d65707981878d90929392918e8882796c6056463a29180800000000000000000000000000000000000000001321364a5b6b8196a7b49f8a78624d3e2d1b070000000000000000000115273753687e93a8b49f8b76614c37210d0000000000000000000005182a3b4f647a8ea0b39d8876614c43331e2731363a3b3b39353026211a0f141d2932363b3d3d3b3633292f3124211a0f01000000000000000000000b20354a60758a9fb5baa58f7a65503a251000000008182b3c4b6074889db3c5c7b29d87725443301c0800000000000011263b50667b90a5bbb29d88725544311d08000000000919304153687e93a9bab29d8773604a35200b00000000000000000000000000102030414a60728399a3b5b49e8a79635645321e13000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbb49f8a75604b35200b000000000c21364b61768ba7b8c8a48f7a644f3a250f0000000000000000121f3346586379899ea8b5a39b86786860544b44373b42586d8297adc0ab96816b56412c1601000b20354b6074899eb3c7a9947f69543c2c1906000000000000152a3f546a7f94a9bfb19c87725c47321d00000d22374d62778ca9bac0aa95806b55402b16020202020202020202020202020000000000000000000000000000000000000000000000000000000e1b29333f4b4f5c646c72777b7c7e7d7c79746d635b4b4538291b0b000000000000000000000000000000000000000000071a2d3d4c6176899eb3a898826d5c4a362210000000000000000000081d3144556e8499aeaf9a85705847331f0a000000000000000000000b1f3448596d8398ada4927d68584733283238454b4f51504e4b4336362c1e263139464b505252504c463a3631271911010000000000000000000000071c30435474899eb4bba6917c66513c2711000000000e1d324556697f94a7b8c9b49f8a75604b35200b0000000000000e23384e63788da3c5b49f8a75604b35200b00000000001221364b61768a9fb4b7a58f7a65503a25100000000000000000000000000002131c3043546175859ba6b8a89b8574604b41301f0e000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3c5bbaa8d77624d38220d00000000091e32465773899eb3bca7927c67523d271200000000000000000417293a495b657b8a9ea7b5a49c897d7266605552504e556a7f95aabfae98836e59432e190000081d3144556d8298adc3b09b85705a4935200e000000000000152b40556a8095aabfb09b86705b46311b00000b20354a60758a9fb4c2ad98836d58432e1800000000000000000000000000000000000000000000000000000000000000000000000000000000000b171f2e373e4a4e575a6265676968666460544e493d32281a0b00000000000000000000000000000000000000000000000f1f3346586a7f94a6b59f8d7a644f3e2e1b0800000000000000000b20354b6075899eb4aa957f6a553a291704000000000000000000000d22374c62778b9fb19c8673604b3a2a39454b56606466666360544e493d3237444b5761656767656158534b44372f1d140900000000000000000000001325485d73889db2bda7927d68523d281300000000021528384b6175889eb3c8bbaa8c77624d37220d0000000000000b21364b60768ba6b8bbaa8d77624d38220d00000000000a1e3246576f8499aec3ab96806b563a2917040000000000000000000000070c0e13253646576278889ea9b5a397816c5f4d3d2c1a0a0000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba7b8c8a48f7a654f3a251000000000031628395c71869bb1bfa9947f6a543f2a150000000000000000000b1b2c3d4b5d657a899ca4b1a79e92857c746d68656364687d92a7bdb09b86715b39281603000115273750667b90a5b7b5a38d78624d3c2b19060000000001172c41566c8196abc1af99846f5a442f1a0000071c30435472879cb2c5b09a85705b37271502000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c232d36393c484d50525353514e4a4336362c1e160a0000000000000000000000000000000000000000000000000417293a4b6075889db3ab9a846f5c4b37220f00000000000000000f243a4f64798fa8b9ab907b65503b2610000000000000000000000216283853697e93aaa9937e685443303a4657606b75797b7b78746c635b4b454455606a767b7d7c7a76706860554c4031261909000000000000000000001b30455a70859aafbfa9947f6a543f2a1500000000000a1e3246576b8196abc1c8a48f7a654f3a2510000000000000091e32455673889eb3c8a58f7a65503a251000000000000316293953687e93a8c7b09b86715846331f0a000000000000000000060f1a21242b273139485a657b8b9fb4b19f927d675b49382816020000000000000000000000000000000000000000000000000000000000000000091e32455773899eb3bca7927c67523d27120000000000192e44596e8399aec1ac97816c57422c17020000000000000000000f1f2e3f4b5c647986979fb1b3a39b9188827d7a79797b8096abc0b39e88735746321e0900000b20354b6073879db2c1ac97816c5a4935201404000000061a2c3d596e8499aec2ad98826d58432d180000001325365a6f859aafc4b29d88735544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b22242b34383b3d3e3d3c39353025211a0f0200000000000000000000000000000000000000000000000000000c1e324557687e93a6b3a28f7a644f3d2d1a070000000000000014293f54697e94a9b59f8b76614c36210c00000000000000000000091e3245566f849aaf9f8a76614b36334658617580898f90908e8882796c60564b60738089909292908b857d74665e4b4437271909000000000000000002172d42576c8297acc1ad98836e583a29170400000000031628394e63798ea3b5bca7927c67523d2712000000000000031628385b71869bb0bea9947e69543e2d1b0700000000000f24394e64798ea9bab49f8b76614c36210c00000000000000000e19202d36394037444b4b4b5d687e929eb0b49e8a79635645321e120000000000000000000000000000000000000000000000000000000000000000031628395c71869bb1bfa9947f6a543f2a150000000001172c41566c8196abc1ae99846f59442f1a000000000000000000000110212e3e4a5b637582909ba3b0b0a69d9792908e8e90969eb0c9b8a78b76614b36210c0000081c304354697e93a6b7b49f8b78624d433222140700000c2135495b72879db2c5a9947f69543f2a14000000182d42576d8297acc2b49f8a75604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f192022262729282724201c13080600000000000000000000000000000000000000000000000000000000031628394b6074889db3af99846f5c4a36210d00000000000003162839596e8398aeb19c87715846331f0a000000000000000000000b21364b60758a9fae99846e5746323e4c617685969ea7a6a5a79e978c8175625b6c81959ea8a7a7ab9f9a92877b6b60554437271502000000000000000014293e53697e93a8c4b19c87725846331f0a00000000000b21364a5b71869bb0bfaa947f6a553f2a1500000000000000192e43596e8398aec3b19c86715c4a36220e00000000000b20354b6075899fb4bcab8f7a644f3a250f00000000000003111e2c353d4a4e555b556060555c606c8196a1b3a89b8574604b40301d0d0000000000000000000000000000000000000000000000000000000000000000192f44596e8499aec1ac97826c57422d17020000000014293f54697e94a9beb19c87715c3a291704000000000000000000000310202d3d4957606d7b86929ba3abb0ada7a5a3a3a5abb0b9b4afab8e78634e39230e0000011426364b6075889db2bbaa99836e614f4032211a15161c2c3c4e63798ea5b7b9a78e79644f39240f000000152a40556a7f95aabfbcab8d78624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d10121413110f0b0700000000000000000000000000000000000000000000000000000000000000000a1d3145566a7f94a8b3a18e79644e3b2a18050000000000091e32465772879cb2ad97826d583a291704000000000000000000000f253a4f647a8faaa8937e685339364a5c6e8398a3b3b4a59d9b9da59f96857763798c9fb4a49c9696999fa59d908073605544311d1502000000000000000e24394e63798ea6b8b59f8b76614c36210c0000000000071a2d3d576c8297acc1ac97826c57422d1700000000000001162c41566b8196abc0b5a48e7a644f3c2b190500000000081d31445571879cb1c9a7927d68523d281300000000000412222f3c494d5b636a7073757574716c6673839aa5b5a397816c5f4d3b2b180500000000000000000000000000000000000000000000000000000000000002172c41576c8196acc1af99846f5a442f1a000000000012273c51677c91a6bcb49e89745847331f0a000000000000000000000002101f2c39454b5d65737d858e969b9faaa6a7a9a8a7a5a89e9a948d7a654f3a2510000000081e324556677d91a1b3b2a1947f695e4f42362d2a2b2f3a495a6b8096abc3b39e8974604b35200b00000012283d52677d92a7bcc9a5907a65503b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384c61768a9eb4ad97826d5947341f0b00000000000c21364b61768b9fb5a8937e68533e2913000000000000000000000014293e53697e93a8aa8e79644e39394e64798ea0b2a99f918885878d979f9b87778095aba097868181848b98a09e968373604b43322010000000000000000b20354a6074889eb3bcab927c6752392917030000000000152a3f546a7f94a9bfaf9a846f5a3625130000000000000014293e54697e93a9bec2ad97826d5a4835200f00000000011426375a6f8499afc0aa95806b55402b160000000000122230404c5a626e798086898a8b8986817c7576879da8b19f917c67594834201300000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9beb19c87715c3a291704000000000f243a4f64798fa4c7b9a88c76614c37210c000000000000000000000000010f1b28323f4b546067707980858a8f9192939392908d89847f77655d4b37230e000000021628384d5f6f8399a6b7b49f8c7c69614e4a3d4040404c5963788b9fb4bbaa96816c5443301c0800000010253a50657a8fa5c8bda7927d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141a1d202020202012100a0000000000000000000000000000000000000000000000000000000000000000000a1f3347586c8196acb49f8a77624c37221000000000000f243a4f647a8fabbca5907a65503b25100000000000000000000000172c41566c8196ab9f8a75604b3641566b8096abb49f8b7d7270727882919f9c868399ad9782726c6b6f7782959da198826e614f3e2d1808000000000000071c3043546d8298adc4ae99836e5746331e0b000000000012273d52677c92a7bcb19c87725443301c0700000000000011273c51667c91a6bbc9b49f8b78624d3d2c1a0600000000192e43586e8398adc1ac97816c57422c17000000000e1f30404c5e6678838c959b9e9fa79e9c9791887f7a8a9fb4b39e8977624c41301c0c00000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcb49e89745847331f0a000000000c22374c61778ca9bac6a38e79644e39240f00000000000000000000000000000a161e2f36434b525b636b70757a7b7d7e7e7d7b78756f6962594b3f2e1c08000000000a1a30414c6176879da8b9aa9f8c7e6e635b575556585e6677869ca9bab49f8b78624d362614010000000d22384d62778daabbbfaa95806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c272f32353535353527241d12040000000000000000000000000000000000000000000000000000000000000004172a3a4e63798da3b5a9947f69543e2e1b070000000012273d52677c92a7bbaa8d78624d38230d0000000000000000000000192e44596e8399ae9d8772554431455b70859ab0ab96816b5f5b5a636d7d8c9f9c99a1a38d7863545659626d7f959ea0947f6a5c4a3625130000000000000013253650657b90a6b7b49f8a76614c39291703000000000f253a4f647a8fa4c7b49f8975604a35200b0000000000000f24394e64798ea3c6cebbaa97816c5b4935211301000002182d42576d8297acc2ad98826d58432d18000000061a2c3d4c5e667c89989fabb0b3b5b2afadaca69d95888399aeb8a799846f5f4d3a29170400000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b4b4a88c76614c37210c000000000b1f34475974899fb4b4a6917b66513c26110000000000000000000000000000000311182630353d4a4e56566064666869686765636055544d483b2e2111000000000000131f334758647a8a9ea8b7aa9f938379716c6a6b6d737c879ca4b5b6a497816c5a48351808000000000b20354b60758a9fb4c2ad97826d58422d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c2c3a43474a4a4a4a4a3c3930221200000000000000000000000000000000000000000000000000000000000000000c2135495b70859bb0b19c87725c4a36220d00000000152a40556a7f95aab49f8a75604b35200b00000000000000000000001b30465b70859baf9a85705a3727485d72889db2a98d78634d41494d5f687d92a0afb3a08a75604b3b484c616b8095a29f8c7a645443301c070000000000000b20354b6074889db2baa9947f6a5746331e10000000000d22374c62778ca9babaa98c77624c37220d0000000000000c21374c61768ca8b9cdc8b49f8b79634e41311f0f000003182d43586d8298adc2ae98836e59432e190000000c2135495b667c8c9ea7b5bbb4aca59c9998999b9fa69d99a1b2c5b3a1927d675846331f0c00000000000000000000000000000000000000000000000000000000000d22374c62778c9f9f9f9f8e79644e39240f0000000004182a3b5c72879c9f9f9f937e69543e2914000000000000000000000000000000000008141c202d363938454b4f5152545352504d4b443737342b1d110300000000000004172a3a4a5c657b8a9da6b3b4a1998e86827f808288909da5b5b6a79c8675604b3c2b190000000000081d31445572889db2c5af9a85705a37261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014273a4a575c6060606060514d40301d0a00000000000000000000000000000000000000000000000000000000000000061a2c3d53697e93aab6a48f7a644f3a240f00000000182d42586d8297adb29d87725544311d0800000000000000000000001c31475c71869cae99836e594434495e74899eb39f8a75604a3535414e606d8298a8b9a08b76604b3634434b6073859baa9b8572604a352011000000000000081d3144556a7f95a8b9b39e8976614b3e2d1b0b0000000b20354a6075899fb4c7a48f79644f3a240f0000000000000a1f33475874899eb4c9c9bbaa9a846f604e3d2d1d0c0002152738596e8399aec2ad97826d58422d180000081c2e3f4e6379899eaab9b9aa9f978d87848384868a929ba3b4b9c6bfb39e8876614c3a2a1804000000000000000000000000000000000000000000000000000000000b20354a60728a8a8a8a8a8b7c66513b261100000000001a2f44596f838a8a8a8a8a806b56402b1600000000000000000000000000000000000001080f1a21242832363a3c3d3e3e3d3b383531272220180d0000000000000000000c1c2d3e4b5d657a8899a1b1b3aea49c979595979da6b2b6b4a59c8979635745321e0e0000000000011426375a70859aafc5b29d87725544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f435768727575757575675f4d39241000000000000000000000000000000000000000000000000000000000000000000f22374c61778b9fb4ab96816b563c2c19060000001a2f445a6f8499afaf9a856f5a3727150100000000000000000000001d32475d72879cad98836d584333485e73889db29d88735443302031414c6177899eb4a38e79634e392431445563798c9fa3917c67523f2e1c080000000000011426374c6176899eb3b8a7957f6a5c4a39291b0d0200071c30435472879cb1bca7917c67523c271200000000000004172a3a5c71879cb1c6bcab9fa2927d685b4a3b2a1c0f091d31455671869bb1c1ac96816c57412c1700000e23374b5d6f849aa8b9b9a89e8c8178726f6d6f71767d85939ea8b8c5b8a696806b5947341f0800000000000000000000000000000000000000000000000000000000071c30435460747474747474665e4c38240f0000000003182c4154656f74747474746b62513d2914000000000000000000000000000000000000000000070c0e161e212426282929282623201d150d0b05000000000000000000000010202e3f4b5c647683919ca4aeb4b1acaaabadb2b7b3aa9f978778635b4939281600000000000000182d43586d8298adc2b49f8a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475c72868a8a8a8a8a7c67513c271200000000000000000000000000000000000000000000000000000000000000000a1f3447596f8499aeb29d87725b4935210c0000001b31465b70869bb0ad98836d58432e180000000000000000000000001d32475d72879cad98826d584332475c71879cb19e89745847331f1f3447596a8095aaa7927d685237272637495b6d8298ad9b86715d4b372308000000000000091f3346586b8095a5b7b49f8b7a6457463a2a1d1514161e29385a6f8499afbea9947f69543f2a14000000000000001a2f44596f8499aec4b59f8b9e9f8a796359473a2d1e1720364b6075899fb4bfaa957f6a55402a15000114263750657a8fa2b4bfb49e8a7c6c635a5a585a586167737e8a9ea7b8c4b49e8a77614c3626140100000000000000000000000000000000000000000000000000000000132536434a5e5f5f5f5f5f514c402f1c0900000000001124374754595f5f5f5f5f56514433210e00000000000000000000000000000000000000000000000002090b0f1113141312100e0b080100000000000000000000000000000211212e3e4a58616e7c8691999ea8a7a9aaa9a7a79e978c8176635a493d2c1b0a00000000000000152b40556a8095aabfbbaa8d77624d38220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849a9f9f9f947e69543f2914000000000000000000000000000000000000000000000000000000000000000004182a3a53697e93a8b7a58d78634d38230e0000001d32485d72879db2ac97826c57422d170200000000000000000000001c32475c71879cae98836e59432e44596e8399aea78c76614c3721182a3a4c62778b9fad98836e5544311d2c3d4e63798ea3a38f7a654f3626140100000000000417293a4b6075879db2bbaa9c87756158483b32282a28323946566c8297acc1ac97816c57422c1702000000000002172c42576c8197acc1ae9983899e9c867761584a3e3329314151667b90a9bac3a6917c67513c271200081d3144556e8398aec0b3a1917d675e4d493c433a464c5460687a899ea9bab9a895806a5443301c08000000000000000000000000000000000000000000000000000000000818253035494a4a4a4a4a3b382f22120000000000000719293741444a4a4a4a4a403d3326160400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311202d3a474c5e66737c83898e92949494928e8982796c6158493c2c1f0f000000000000000013283d53687d92a8bdc8a48f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acb5ab96816c56412c170100000000000000000000000000000000000000000000000000000000000000000e23384d63788da5b6a8937e68533626140100001e33495e73889eb3ab96816b56412c160100000000000000000000001b30465b70859baf99846f5a442f40556a7f95aaa5907b65503827151f3448596e8399ae9e8975604b36202136495b71869bac97826d5443301c080000000000000b1e324557667c919fb1b6a59a847662594b45383f38454b576175859bb0c4ae99846f59442f1a00000000000000152a3f546a7f94a9bfae99837d92a09c8676645c4b4639444b5f6f849aafc7b7a58d78634d38230e000b20354b6074899eb3c8af99846f5f4d40352c2e293336434b5c647a8b9fb4c3b29d8774604b35200b000000000000000000000000000000000000000000000000000000000008131c2034353535353526241c1204000000000000000b19242c2f35353535352b29211608000000000a141a1d202020202014120c03000000000000000000050e141620202020201a1812080000000000000000000000000000000002101c2a33404c5460666e75797d7e7f7e7c79746d635b4c473a2c1e0f01000000000000000010253b50657a90a5c9bca7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfae99836e59442e190000000000000000000000000000000000000000000000000000000000000000000c2035495a72879cb2ae99836e5443301c0800001f34495f74899eb4aa95806a55402b15000000000000000000000000192f44596e8499ae9b85705b38283a4f657a8fa6ab96816b5645311d182a3b51667c91a7a7907b665039291a2c3d546a7f94a99e8974604b35200b000000000000031628394c5e6c8197a3b4b4a29a8577686056555456566067758399a3b5c6b19c87715c3a2a180400000000000012273d52677c92a7bcb19c86718298a39c867a6a6157575560697d92a1b3c7b29d8774604a35200b000f243a4f647a8fa7b9bbaa907b66504130201918171f26303e4a5c697f94a5b7b7a5907b65503b251000000000000000000000000000000000000000000000000000000000000000070b1f1f1f1f1f1f110f09000000000000000000000711181a1f1f1f1f1f16140e04000000000e1c272f3235353535352a2720150700000000000000081621292c35353535352f2d25190b00000000000000000000000000000000000c181f3036434b5156606467696a69676460554e493d332a1c0e000000000000000000000e23384d63788dabbcbfaa947f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcb09b86715b39281603000000000000000000000000000000000000000000000000000000000000000006192c3c576c8197acb39e8974604b35200b00001f354a5f748a9fb4a9947f69543f2a14000000000000000000000000172c42576c8197ac9d8873564532354b6074889db39d8875604b38271520364b6074889ead98826d5746331e23384e63788da7a78f7a644f3a240f000000000000000a1b2f404b6074859ba4b5b4a39b897d756e6a696b6e757d8799a1b4bac7b49e89745847331f0a0000000000000f253a4f647a8fa4c7b39e897475859ba49c8b7f766f6c6e747e8b9fb4bfbaa995806b5443301c070012273c52677c91a7c5b49f8a76604b36211206000408141c2e3e4b6073879db2c3ab96816b5637271501000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c2c3a43474a4a4a4a4a3f3c322515030000000000051626343d414a4a4a4a4a454137291908000000000000000000000000000000000004121826303538454b4f52545554524e4b4437352c1f170c00000000000000000000000b20364b60758a9fb4c2ac97826d57422d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8b39e89735746321e0900000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7b8a78e79634e39230e00001f354a5f748a9fb4a8937e68533e291300000000000000000000000014293e54697e93a99f8b76604b363043546b8096aaa6937e685645311d1d3144556c8196ac9f8a76614b36212135495b74899ea9947f69543f2a140000000000000000121d3145566277869ca4b2b5a79e938883807f818489929da59d9fa9bab9a88c77614c37220c0000000000000d22374d62778ca9bab9a88b766277869ca49f948984828388939fa9bac0b49f8a78624d362513000014293e53697e93a8beb19c86715645321e090000000001101d314455697e93abbcb19b86715544311d08000000000000000000000000060c0e11110e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014273a4a575c6060606060544f4332200c00000000000e213444515660606060605a54473725120000000000000000000000000000000000000008141c20283236393d3f3f3f3d39353126211a0f04000000000000000000000000091d31455673889db2c4af9a846f5a36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daabbb8a78b76614b36210c0000000000000000000000000000000000000000000000000000000000000000000e23384e63788da8b9a7917c67523c271200001f34495f74899eb4a9937e69543e291400000000000000000000000010263b50657b90abab8e79644e3926364d62788b9fb29d8774604b3f2f2027374f647a8fa4a8927d68523b2b1a2c3d5a70859aad98836d58432e18000000000000000002152738475962778698a0b2b7b3a79e98959496999ea8a59d888b9fb4c6a48e79644f39240f0000000000000b20354b60758a9fb4c6a38e796462788699a1a89e9997989ea6b4bac0b4a295806b5a493518080000152a3f556a7f94aabfaf9a85705a382816030000000000011426374c61778b9fb5b49f8a74604b35200b00000000000000000000000e192123262623211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f43576872757575757569614f3c2712000000000014293d51626b75757575756f6654412d18030000000000000000000000000000000000000001080b151d202428292a292724201d1409060000000000000000000000000000021527385b70859bb0c5b29c87725443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c5a38e78634e39230e0000000000000000000000000000000000000000000000000000000000000000000b20354b6074899eb4aa95806a55402b1500001e33495e73889eb3a9947f6a543f2a150000000000000000000000000c21364c61768b9fa8937e6853362634485a6c8197a6a596806b5d4b3e2d22364a5c72879caf9a846f594834202c41566c8196ab9b86715c3626140100000000000000000a1a2a3b4759617582929da5b0b5b3aeaaa9abaeb0a1998778879cb2bca6917c67513c2712000000000000081c30435472879db2bba6917b665a627583939ea7afacaeb3b8c2b6b1a29a8474604b3c2c19000000142a3f54697f94a9beaf9a846f5a452f1a00000000000000091f34475971869bb1bbaa8d78634e38230e000000000000000000000e1e2c35383b3b38352c1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475c72868a8a8a8a8a7f69543f2a140000000001162c41566b808a8a8a8a8a846f5a452f1a000000000000000000000000000000000000000000000002090b0f12141514120f0b08010000000000000000000000000000000000182e43586d8398adc2b49f8a75604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889db2bba5907b66503b2611000000000000000000000000000000000000000000000000000000000000000000081c30435470859ab0ae98836e59432e1900001e33485d73889db2aa95806a55402b150000000000000000000000000a1f33465871869cad98826d5443302b3c4c6176889eb39f8d7b655c4a3e312e3e556a7f94ab9f8b77624d37222a3f54697f94a99e88735443301c080000000000000000000d1d2a3a4757616d7d87939b9faba8aaa9a6a39b9183776f859aafbea9947e69543f2914000000000000011426365a6f859aafbea8937e69535761727e89949da5a7a9a9a7a49c928475615645321e0e00000013283d53687d92a8c9b09b86715b3b2a180400000000000004182a3a586d8297adc8a58f7a65503a251000000000000000000006192c3c494d51514e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849a9f9f9f96816c57412c17020000000014293e54697e939f9f9f9c87725c3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc0baa98c77624c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527375b70859ab0bda8937d68533e281300000000000000000000000000000000000000000000000000000000000000000001142636576c8196acb19c87725c39291703001d32475d72879cb2ab96806b56412b160100000000000000000000000417293a566b8095ab9e8874604b3520334758677d919fab9e897a645c4b4437384d62788c9fab947f6a543e2d283e53687d93a89f8a75604b35200b000000000000000000000d1c2a39464b5f67747e858b91939494918c857c6f626d8297acc1ac96816c57412c1702000000000000182d42586d8297adc0ab96816b5646546068767f878e929494928e867d6f6157463828160000000010253a50657a8fabbcb29d88725947341f0b00000000000000162b41566b8096abbba6907b66513b26110000000000000000050c2135495b636666635b4935210c0002000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acb5ae99836e59442e19000000000011273c51667c91a6b5b49f89745947341f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdc7a48f7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adc0ab95806b56402b1601000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9b49f89745746331e0a001c31465b71869bb0ac97816c57422c17020000000000000000000000000f243a4f647a8fa6a68f7a655039292a3a4d5f6c8196a1a79e897a6a60554b43485a70859aaf9c86715c4a36273c52677c91a7ab8b76604b36210b00000000000000000000000c1b2933414d56606870777b7d7f7e7c7770665e556a7f95aabfae99846e59442f1900000000000000152b40556a8095aabfae98836e5936434a58616a72797d7f7e7c797268604b4639291a0a000000000c21374c61768b9fb5b7a58c77614c37220e00000000000000152a40556a7f95aabba6917c66513c27110000000000050b0d1a0e23384d63797b7b79634e38230e0c1712100a010000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfb09b86715b38281502000000000f24394f64798ea4c6baa98c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbbca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc0ad98836d58432e180000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7baa98b76614b36210c001a2f445a6f8499afae98836e59432e19000000000000000000000000000b20354a6073889dac96816c5746321e30414b60738399a1a79e8b7f736660545554687d92a9a48e79644f37273b51667b90a6a18c76614c37210c0000000000000000000000000b171e3038454b53596266686a69666259514c52677d92a7bcb19c86715c3a29170400000000000013283d52687d92a7bdb09b86715b39303a474c555b6367696967635b534e4232291b0b00000000000a1f33475871869cb1c3a7917c67523d2c1a06000000000000132536566b8196abc9a5907a65503b2510000000000e1920222f23293e53687e9090816c57422d1e212d27251e13050000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcb39e88735645321d09000000000c22374c61778ca8bac7a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3c4bfa9947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdb09a85705b372715010000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7a28d78634d38230e00182d42586d8297adb09b86705b38271502000000000000000000000000071c3043546c8196ab9e8976614b38271d314455607483969fa99f94857b746d6a696a76899fab96816c5544313c51677c91a6ab8b76604b36210b0000000000000000000000000003131a2731363b484c51535554514c483b3a50657a8fa5c8b39e89745846331f0a00000000000010253b50657a90a5c9b39e88735745322933373d494e525454524e493d3a311e160b00000000000004172a3a556a8095aabbae98836e5b493521140300000000071c3043546e8399aebcab8e79634e39240e0000000e1e2b35384438353b51667b909a846f5a36293236423d393023130000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8b8a68b75604b36200b000000000a1f33475874899fb4bba6917c66513c2711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba6b8c1ac97816c57422c17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbb29d88725544311d080000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca2c8a48f7a654f3a251000162b41566b8096abb39d88735645311d09000000000000000000000000001325364d63788c9fa8937e685645311d273745566073808d9da5a39b9088837f7e7f81899eb39d8874604b353d52687d92a79f8a755645321e090000000000000000000000000000000a151d202b34373c3e3f3f3c37342b384d62788daabbb9a78b76614c36210c0000000000000e23384d63788dabbcb8a68b76604b36211f212c36393d3f3f3d39362c251e130300000000000000000d23384d62788b9fb4b49f8c79634e42311e160b0601081420354a6074889eb3b59f8b76614c36210c000005192b3c484d5a4e493d4e63788e9c8772544339464b57524d41301d0d0000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daabbc4a28d78634d38230e0000000004182a3a5c72879cb1bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889eb3c4af99846f5a442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3c5b49f8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aaabba6917c66513c27110014293f54697e94a9b59f8a75604b36200b00000000000000000000000000082135495b6e8399ae9d8774604b3a2a1927384555606b7c87949ea6a69d98959394979ea8b8a6907b66503b3f556a7f94aa9d88735d382816020000000000000000000000000000000002090d18202226282a2927222020354b60758a9fb4c5a38e79644e39240f0000000000000b20364b60758a9fb5c5a38d78634e38230e0f1a2123282a292723211a0f0b010000000000000000000c2035495a6d8297a9baab99836e604e4132292019141c20314250657b90a6b8b19b86715846331f0a00000b2035485a626f635b4b4b60768b9f8a75604a4b57616c675f4d3c2b190500000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4baa58f7a65503a251000000000001a2f455a6f849aafc0ab96816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628385b70869bb0c5b19c87715c3a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8bbaa8d78624d38230d000000000000000000000000000000000000000000000000000000000000000000081d314455748a9fb4a7927d67523d28120011263b51667b90a6bcab8d78634d38230e0000000000000000000000000006192c3c4f657a8fa2a5937e695847331f1a2737444b5e66757f8891999ea6a6a7a9a9a8a6a69e97836e58433b586d8297ad9a85705b45301b0000000000000000000000000000000000000000050b0d11131514110d0b1d31445572889db2bba6917b66513c2611000000000000091d31455673889db3bba5907b66503b261100060c0e121414120e0c0600000000000000000000000006192c3c4d62788a9fb4b3a1937e695f4b4639352c263035424e606f849aafc0ab96816c563a29170400000d22384d627884796b61575773889e8c77624d5d6475827d675a4834200b0000000000000000000000000000000000000000000000000000000000000000000000081d31445573889db2bca7927d67523d28120000000002182d42576d8297acc2ae98836e59432e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aec3b49f89745947341f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32465773899eb3c8a5907a65503b2510000000000000000000000000000000000000000000000000000000000000000000011426495e74899eb3a8927d68533d2813000d23384d62788da8b9a6917c67513c271200000000000000000000000000000e22374b5d6f849aa99e8876614c40301f192731404c56606a747c83888d9092939493918d88827a644f39485972879cac97816c57422c170200000000000000000000000000000000000000000000000000000000011426375a70859aafbea9937e69543e2914000000000000021527385b70859bb0bda8937d68533e28130000000000000000000000000000000000000000000000000e203448596b8095a2b3b49f8c7d6b61574d493c36434b4f60687e93a2b4b4a28f7a644f3a240f000001162b41566b80968b8075675f70869b8f7a64606b7a87978978624d38220d0000000000000000000000000000000000000000000000000000000000000000000000011527375b70859ab0bfaa947f6a553f2a150000000000152a40556a7f95aabfb09b86715b3828160200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8096abc0baa88c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395c71869bb1bfaa95806a553c2b19050000000000000000000000000000000000000000000000000000000000000000001e33485e73889db3a8937e69533e2914000b20354a6074899eb4ab95806b56402b160000000000000000000000000000081b2e3f4e63798b9fa798826d5e4d3d2c1d151d2f38454b5560676e73787b7d7e7e7d7b78746d645c4a364d62778b9faa927c67523d2712000000000000000000000000000000000000000000000000000000000000182d43586d8298adc0ab96816b56412c1601000000000000192e43586e8398adc0aa95806b55402b1600000000000000000000000000000000000000000000000005192b3b4b6073849aa5b6aa9f92807569625a5b595460656f7e8c9fb4bcab9a84705c4a36220d0000071c32475c7186969f96887d706d8398927c6774808c9c9f95816c57412c17020000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adc1ac97816c57422c17020000000013283d52687d92a7bdb39e88735645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8bec6a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3b09b86705a4834200b0000000000000000000000000000000000000000000000000000000000000000081d32485d72879db2a9947e69543f291400071c30435470869bb0af9a846f5a3d2c1a060000000000000000000000000000102135495b6b8095a5a0917c665b493b2a1c121a283237444b51595a636667696968666360544f4a3e4354697e93ab9f8b77624c37220d000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfae99836e59442e1900000000000001162b41566b8096abc0ad98836d58432e18000000000000000000000000000000000000000000000000000d1d3144556176879da5b5b49e96887f7872706e70747a84939faabbb59f8d7b65503e2d1b070000000c21364b6175808c9a9d9284787f94937e7885959f9d8c8073604b35200b000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc0ae99846f59442f1a000000000010253b50657a90a5c9b8a68b76604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbbca6917c67513c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1b59f8c78624d3822110000000000000000000000000000000000000000000000000000000000000000081d32485d72879db2a9947f6a543f2a150000132536576c8297acb39e88735b4935210c0000000000000000000000000000061a2c3d4b6075879ca89e8a796359473a2b1e10161e2731363c3c494d5152545453514e4a433636394a6073869caf9a846f5947341f0b00000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdb09b86715b3929160300000000000013293e53687e93a8bdb09a85705b372715020000000000000000000000000000000000000000000000000114263747586379879ba3b4b0a69d948d87858485888f99a1b4bbb1a195806b5d4b372010000000000a1e324657616b7984929d9a8b819797828a9ba097877b6b605544311d0800000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdb19c86715c39281603000000000e23384d63788dabbcc4a28d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3c5bea9947e69543f2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9bebcab947e69543f2e1c0800000000000000000000000000000000000000000000000000000000000000091e33495e73889eb3a9947f69543f2a14000012273c52677c91abb8a78d78634e38230e0000000000000000000000000000000f1e324556647a8a9fa89c86776158483c2e1d150a151d20272c35383b3d3e3f3e3c38353025324557677c91a4a5917c67523b2a180500000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9b39e89735746321e0a00000000000011263b51667b90a6bbb29d88735544311d080000000000000000000000000000000000000000000000000009192a3a495b637885959fa9b4b3a9a59d9b999a9ea6afb3b7b2a0978373604b3f2e1c020000000003162939464b5b63707d88949c979f9f8a9f9b908275655d4b443727150100000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbb39e89735746321e09000000000b20364b60758a9fb4baa5907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8c1ac96816c57412c17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbc9b19c86715d4b37231000000000000000000000000000000000000000000000000000000000000000081c30435474899fb4a8937e69533e291400000c22374c61778b9fb5a9937e6954382815020000000000000000000000000000031628384a5c677d929ea49c8676625a4b3f31271c13080b1219202326282929282623202530434b6075879db29c8773604b35200d000000000000000000000000000000000000000000000000000000000000000e23384d63788dabbcb8a78b76614b36210c0000000000000e24394e63798ea3c5b49f8a75604b36200b00000000000000000000000000000000000000000000000000000c1c2c3d49596274808b989faab0b4b2b0aeb0b3b8b4b0a59d9282736055443121110000000000000b1b29323d4a4e5f67767f868d9fab9f8c857c6d61574b3f31271909000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3c5b8a78b76614b36210c00000000091d31455673889db3bda8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e32465773899eb3c3ae99846e59442f1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6c9b5a48f7a654f3e2e19090000000000000000000000000000000000000000000000000000000000000b20354b60758aa9baa8937d68533e281300000a1f34475971869bb1af99846f5645321d090000000000000000000000000000000a1a2d3d4d5f6b80969fa49c8678655d4b453830251e17100c0c0e111214141319202b36434a616d8297a5a2917c675544311d08000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4c5a38e79634e39240e0000000000000c21364b61768ba7b8bcab8d78624d38230d0000000000000000000000000000000000000000000000000000000e1f2c3b4856606b79828b949b9faaa6a7a8a7aa9f9b93877d6d60554437271503000000000000000b1927313f4b57616d7b83899eab9e89837b6f635a4b4538302217090000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8c5a38d78634e38230e00000000021527385b70869bb0bfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031629395c71869bb1c6b19c86715c3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8bacdc2ae99836f5c4b3726140100000000000000000000000000000000000000000000000000000000000c21364b61768ba0c7a6917c67513c2712000004182a3a566b8196abb49f8a75604b36200b000000000000000000000000000000000f1f30414a607281969ea49c887b6b60564a4336332925211f171d171f21252c353c4854606b7f949fa79a846f5f4d3726140100000000000000000000000000000000000000000000000000000000000000091d31455673889db2bba6907b66513b26110000000000000a1e33465773899eb3c9a58f7a65503a2510000000000000000000000000000000000000000000000000000000000e1d2b38454b5b636d787f858a8e919292918f8a857e75675f4b44372719090000000000000001152737444b5d65758290999e8b9f9e99988f83786b60564d40352717060000000000000000000000000000000000000000000000000000000000000000000000091e32465773899eb3baa5907b65503b26100000000000192e43596e8398aec2ad97826d58422d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3b39e89745846331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475974899fb4c9c0b3a18f7a645544311d1408080b100c0a04000000000000000000000000000000000000000000000d22374d62778ca2b7a58f7a65503a251000000010253b50657a90a6b8a9907b66503929170300000000000000000000000000000001131c304354606c80959fa69d8c80746760544b46393a363329322a33373a3c494d5a627280949da99e8978624d413019090000000000000000000000000000000000000000000000000000000000000000021527385b70859ba6a6a6937e69533e2914000000000000031729395c71869ba6a6a6927d68523d281300000000000000000000000000000000000000000000000000000000000d1a27313d494e59626a7076797c7d7d7c7a76706960564d41312719090000000000000000081d314455606b7b8798a09c8982988884929e998b8075665e524535230f0000000000000000000000000000000000000000000000000000000000000000000000031628395c71869bb1bda7927d68523828150200000001162b41566b8096abc0af9a856f5a3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abb2b2a88b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c72879cb1c7b4a29a9b8573604b4131201d1d2025221f180c0000000000000000000000000000000000000000000f243a4f64798fa4c5a38e78634e39230e0000000b20354b6074889db3ad98826d5746331e0a0000000000000000000000000000000000132536434a626b808d9ea79f96877d73696157544f4c463a473a474c50545a626c7884959eaa9f8b7b65594834231300000000000000000000000000000000000000000000000000000000000000000000182e43586d829090909090806b56412b1600000000000000192f44596e8390909090907f6a55402a150000000000000000000000000000000000000000000000000000000000000a151d2c353b484d5457606466686867646157534b4538301d15090000000000000000000b20354b6073808c9d9f96867881978f7b7d89979f95877c6d63523f2a15000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec1ac96816c5645321d090000000014293e53697e93a8beb29c87725443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e939d9d9d9d8e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4af9a859a957f6a5f4e42353131353b37342a1c0c000000000000000000000000000000000000000012273c51677c91a6b8a78b76614c36210c000000081c3043546c8196acb49f8a76614b3621100000000000000000000000000000000000081825304451616a7c899aa2a59d92867e766f696561585d5d5d5861656a7078818b9aa2a89e8c7d665d4b3b2b1905000000000000000000000000000000000000000000000000000000000000000000000e23394e63797b7b7b7b7b7a644e39240f000000000000000e24394e63797b7b7b7b7b79634e39230e00000000000000000000000000000000000000000000000000000000000000020f1a212b343739454b4e515253524f4c46393632281a1301000000000000000000051a2f445a6f84959f9d8d80746c8196937e6976818c9a9d91826d57422d18000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1b39e8975604b3620120000000011263c51667b91a6bbb49f8a75604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667c8788888888877b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acbca7917c8b9f8d7d6960504b44444b504c473a2a18040000000000000000000000000000000000000014293f54697e94a9b39e89735746331e0a000000011426364e64798ea3b5a8927d68523e2d1b07000000000000000000000000000000000008131c3443505e667884929da5a49c938a847e7a767473727374777a7f858c969fa9a39b8a7b665e4d3f2f1d0d00000000000000000000000000000000000000000000000000000000000000000000000c21364a5b636666666666645c4a36210d000000000000000c21364a5b636666666666635b4a36210c000000000000000000000000000000000000000000000000000000000000000000060d192022283236393c3d3d3c3a363329211e160a00000000000000000000000012273c52677c9198877b6b60697f9496816c616c7a8592937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9beb8a7927c6752402f19090000000f24394e64798ea3c6baa98c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e66727272727272655d4c38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabba6917c80969f8c7e6f656055556065615947341f0a00000000000000000000000000000000000001142636576d8297acb19b86715c39291703000000000822364a5c71869bb0af9a85705c4a36220e00000000000000000000000000000000000000162533404c5962727d87949da6a99f99938f8b89888788898c8f949a9faba69e938578655d4d40302111000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e51515151514e4a3d2d1a0700000000000000071a2d3d4a4e51515151514e4a3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000050b0d161e21242728282725211e170b0902000000000000000000000000001025394d5f6d828276655d51677c9199836e595c64707d8675614b36210c00000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbc5b09b85715e4c3726140100000c21374c61768ca8b9c7a48f79644f3a240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c505d5d5d5d5d5d504c3f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bca7927d75879d9f93847b757172757a77614c37220c000000000000000000000000000000000000081c30435470859ab0ad98836e58432e190000000000071b2d3e53687d92a6b4a28e79644e3c2b19050000000000000000000000000000000000000715222f3b48546067747f8890999faaa9a4a89e9d9c9d9ea8a5a9a9a49c93887e73635a4c3f30221203000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36393b3b3b3b3b39362d1f0f0000000000000000000f1f2d36393b3b3b3b3b39362d1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000003090b0f111313120f0c0a03000000000000000000000000000000000a1d30414b60746d61584b4f64798e9b86715c4a4e5f6774615746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6c9b5a3917c665544311d0f00000a1f33475874899eb4bca6917c67513c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b4848484848483b382f211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8a9947f697b909ea29a908987878a907c66513c27110000000000000000000000000000000000000b20354b6074899eb3aa947f6a553f2a150000000000001020364b6075889eb3ad98826d5a4835200d0000000000000000000000000000000000000004121d2b36434a566069747b838b91969b9ea7a2a3a2aa9f9d99948e867e75686055493c2f2112040000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2123262626262624211a0f01000000000000000000010f1a2124262626262623211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121d31445560554c463a4c61778c9e89745847414d54605446392917030000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8bacdc1b19c8673604b3d2c1b0b0004172a3a5d72879db2bda8937e68533e2913000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232633333333333326231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbab96806b6b8096a1afa89e9c9c9f95806a55402b150000000000000000000000000000000000000e24394e63798ea7b9a6917b66513c2611000000000000091d3245566a7f95a8b49f8b78624d3b2b190500000000000000000000000000000000000000000d18253038454b5560666e767c8185898b8d8d8d8c8a87837f79716861574b44372c1e11030000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e11111111110f0d0700000000000000000000000000070c0e11111111110e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001152737444b44373333475874899e8c76614c3736434b4336291b0b000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475974899fb4c9c9b5a4947f695b493a291a0b001b31465b70869bb0bfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f111d1d1d1d1d1d100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4ac97826d60728399a1b4b4b1b1ae99846e593a2a1704000000000000000000000000000000000013283e53687d93a8b7a58c77624d37220d000000000000021528384c6176899eb3aa96816c594834200f00000000000000000000000000000000000000000008131c283237444b515861676c7073767778787775726e69635b534b46393126190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091927313531271f2a3a5c7186938e79644e392630353026180b000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c72879cb1c7bcab9f9f8b7963584638291b101b30465b70859bb0c0ab96806b56412b16000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572889db2ae99846e54607583959faab3b9b29d88725847331f0a0000000000000000000000000000000004172a3a586d8297adb29d8772594834200b000000000000000a1f3347586b8095a7b49f8a78624d3d2d1a07000000000000000000000000000000000000000000000a151d2631353a474c51575b576162636362605559544e493d3632281d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f12151717171613100c0a0300000000000000000000000000000000000000000000000000000a141a1d20202020202020202020202020202020202020202020202020202020202016140e0400000000000000000000000009151d201d1511263c51667c7e7e78624d38221c201c1408000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4b59f8a9f9c8676615646392d221b2d3e5c71869bb1c0ab95806b56402b160000000711171a20202020202020202020202020202020202020202020202016140e040000000000000000000000000000060b0d13151614120d0b0500000000000000000000000000000000000000000000050b0d111416161614110c0a0400000000000000000000000000000000000000011426375b70859aaa9f97826d57576072808b989ea7a4a58c76614c37210c000000000000000000000000000000000a1f33475872879cb1ad98836d583b2b1905000000000000000417293a4c6176899eb3a997826d5b4a36211200000000000000000000000000000000000000000000000209141d202a33373c4139464b4d4e4d4c4b44373f39352c211e160b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000809141d2024282b2c2d2c2b2825211e170d0b05000000000000000000000000000000000000000000000e1c272f323535353535353535353535353535353535353535353535353535353535352b2821160800000000000000000000000001080b08010f24384c5e666969625a4835200b0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1ad988298a299837461574a3e362d364a5c74899eb4bea9947f69543f2a1400000b19242c2f3535353535353535353535353535353535353535353535352c292116080000000000000000000000060e192023282b2b2a27221f180d08010000000000000000000000000000000002090d182022272a2b2c2b2926211f170c08010000000000000000000000000000000000182e43586d828a8a8a8579634e4554606b7982898e8f8d8779634e38230e000000000000000000000000000000000c21374c61778b9fb5a8937e68533e29130000000000000000000c1f3347586a7f94a5b49f8c79634e402f1a0a00000000000000000000000000000000000000000000000001080c171f21272c293236383838373531272a23211a0f0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111c23263135393d40414241403e3b3633292220180d06000000000000000000000000000000000000000a1c2c3a43474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a403d3326160400000000000000000000000000000000091d2f404c5153534d483c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabaa5907c849aa1998475645c4f4a3e474f64798ea8b9c5a7927d68523d2813000719293640444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a413d342616040000000000000000000e19212b35383d40413f3c37342a201d150900000000000000000000000000000a151d202b34373c3f4041403e3b373329201c140800000000000000000000000000000001162b3f53646d75757571635b4936434b5b636d74797a7872635b4935210c0000000000000000000000000000000215273852677c92abb5a48d78624d38220d00000000000000000004172a3a4b6075879db2ab99836f5e4c382816030000000000000000000000000000000000000000000000000000040a0c1217161e2122232322201d15140e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002111c232f3837444b4f52555657575553504b463937342b20190e02000000000000000000000000000000000014273a4a575c60606060606060606060606060606060606060606060606060606060606056514433210e000000000000000000000000000000000012222f383c3e3e38352b1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bca7917c78899ea29a867a6d645c5c59616e8399aec6b8a78e79634e39230e0011243647545960606060606060606060606060606060606060606060606056514434210e0000000000000002101e2c353c494d52555654524c483b3531271911030000000000000000000001121a2832363b484d515456565553504c473a353026181202000000000000000000000000000010233546535860605f5c4e493d2c303d494e55606364625a4e493d2c1a06000000000000000000000000000000091d3145566d8398adb19c86715a4835200b000000000000000000000c1e324556677c91a2b3a1907c665645321e0f00000000000000000000000000000000000000000000000000000000000000030a0c0d0e0e0d0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2e373f4b50556064676a6c6c6c6b68656157544c483b352c1e160a000000000000000000000000000000001a2f435768727575757575757575757575757575757575757575757575757575757575756b62513d2814000000000000000000000000000000000004121d242629292220190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8a8937e687b8c9fa49c8c827a747172778197a1b2c8b39e8874604a35200b00172c4054656f7575757575757575757575757575757575757575757575756b62513d29140000000000000010202e3c494d5a62686a6b69676259524b44372f211407000000000000000008141c3038454b53596266696b6b6b69666158524b4336301d150a00000000000000000000000000061828353f434a4a4a4638352c1f1c2c3537444b4e4f4d483c352c1f0e000000000000000000000000000000000b20364b6075899eb3ab95806b563c2b190500000000000000000000021628384d5f6f849aa9b29d8775604b3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1927313f4b4f5d656e74797d80818281807d7a76706962594d493c32281a0e0000000000000000000000000000001d32475c72868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a806b56402b1601000000000000000000000000000000000000090f1114140d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbaa957f6a677d8c9fa99f978f8986878b979fb1bfbbaa96816c5443301c07001a2f44596f838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a806b56412c160100000000000b1b2e3e4b5b636f787d80807f7c77716860554b3f3225140300000000000008182630404c56606971777c7f8081807e7b76706760544d4032281a0a000000000000000000000000000a18232b2e3535353123211a0f0e1a21263135393a38352b211a0e000000000000000000000000000000000011273c51667c91a7b5a48e79644e39240f0000000000000000000000000a1a30414e63798b9fb4a595806b5b4935210c0000000000000000000000000000000000000000000000000000000000000002090b13110b010000000000000000000000000000000000000000000000040b0c121415130f0b080100000000000000030a0b0b0b00000000000000000000000000000000000b1b2937444b5d65707b83898e92959697969593908a857f776d635a4b45382c1f1103000000000000000000000000001a2f455a6f849a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f98836d58432e1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4ab96816c5f677d8b9da5aca79e9b9c9faab1bdbcb49f8b78624d3625130000172c41576c81969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f99836e59442e190000000000031629394b5c6479848d92959694918b867d74655d4f4332200c000000000001142636434b5e66747e868c919495969593908b857d73665e4b4538281a0a00000000000000000000000000061016182020201c0e0c0600000609141d2024252220190e06000000000000000000000000000000000004192e43596e8398aeb19c86715c4a36210d00000000000000000000000000122135495b6a7f94a3b49f8b79634e38230e0000000000000000000000000000000000000000000000000000000000000a151d2028251e13000000000000000000000000000000000000000000070c181f2227292a2824201c140805000001080b181f2020200d0b0500000000000000000000000000091929394655606b7b8590989ea7a7aaabacacaaa8aa9f9b948b82786b6056493d2e211103000000000000000000000000172c41566c8196aabbb5b5b5b5bbb4bbb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b09a85705b45301b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572889db2ad98836d585f677a87969faab3b1b1b4bbc1b5b19e937e695a48341808000014293f54697e94a9adadadadadadadaeb3bfb5b5bcb5adadadadadadad9b86715c38281602000000000a1e324657647a8a99a1a7aaaba9ab9f9b92877b69614f3b27120000000000081c304354606c7c87939ba3a6a9ababaaa8ab9f9a92867c6c60564538281808000000000000000000000000000001030b0b0a070000000000000001080b0e0f0d0b0500000000000000000000000000000000000000091e34495e73899eb3a9947f69543d2d1a0700000000000000000000000000061a2c3d4b6073859ba9a998826d58432d1800000000000000000000000000000000000000000000000000000000000a1a2832363d3a311c13080000000000000000000000000000000000010f1a212a34373c3e3f3d3a3530261f180d08141c202e34353535351f180d00000000000000000000000115273746576173818d9ba3adb3b9c5bfbcbababbc8bbb4b0aa9f978b8074635b4b3f2e21110000000000000000000000000f24394e64798c9fb4bcc9cebbaa9faaa9acaeafb0b0b0b0b0b0b0b0b0b0b0b0b0b0b09d88725d48331d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426375b70859aaa9f96816c564d5c6476818b969ea7a7a9a9a7a39b91806b614f3c2b1900000011263c51667c91989898989898989899a1b3c7bcab9f989898989898989889745645321e09000000000c21364b6175889da8b3bfbbb4afadb0b0a59d8d7f69543f291400000000000b20354b607281919ca5b1b4aca5aa9f9fa9a5abb0a49c918174605645362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f83979f9f8a77614c37220f0000000000000000000000000000000f1d31445564798b9fa198836e59432e190000000000000000000000000000000000000000000000000000000008182838454b524e413025180800000000000000000000000000000006141f2d363b474c515454524f4b4336342a1c1826303543494a4a4a4a342a1d0d00000000000000000000081d314455617583969fabb5c1c2b5b1aba7a5a4a5a8acb2b7bbb4a99f958579655d4b3f2e1e0e00000000000000000000000d21364a5c697e939fabbcc9b49f8c8f9396989a9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9986715c47311c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d828a8a8a8578624d3e4a58616c7881888e929494928e867c6b625142321d0d0000000d23384d62788283838383838383838399aec6b59f8d82838383838383838274604b36210b0000000014293f54697e94a6b7c5b9aa9f9a989a9faba7947e69543f29140000000004192e43596e83979fb2b3a99f97908b8a898b8f969fa8b19f978474605443301c0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075818c97826d5947341f0a000000000000000000000000000000011527374a5c697f94928377614c37220c0000000000000000000000000000000000000000000000000000000114263645566068604a433625130000000000000000000000000000051424313d4a4e596167696a686460544c473b302636434b585f6060605e473b2a18050000000000000000081c2e3f4b6073839aa2b5bcc2b5b1a49c9592908f9093979da6b1b6bab4a39b897b655d4b3c2c1b0b00000000000000000000071a2d3d4e60697e8d9fabbbac97827b7e818385868686868686868686868686868686847a644f3a240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b3f53646d75757571625a49353a464c5a636b74797d7e7f7c7971665e5144342414000000000b2035495a626e6e6e6e6e6e6e6e6e768ca8b9bcab8c766e6e6e6e6e6e6e6e605645321e09000000031628385b70859ab0c4b9a79e8c8582858c989e8976614b36210c0000000002172c41576c8196a5b4a29a8b827b767574767a818a9aa2b1a2988272604a392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324557606c798479634e3a2a18040000000000000000000000000000000009192d3d4b6072837d6f615947341f0a000000000000000000000000000000000000000000000000000000081c30435460747d6c605443301c1300000000000000000000000000132331424e5b636f777c7e7f7d79746b62594a43364354606d74757575705947341f0b00000000000000000e23374b5d6b8196a2b3c0bdb1a49c8f86807c7a7a7b7e8288919ca4b4bbb5a79e8b7b655a493a291704000000000000000000000f1f31424e60687e8d9faab19f9781736c6e707070707070707070707070707070706e645c4a36220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010233546535860605f5b4d493c2c29333c494d54606367696967635b514c40342616060000000006192b3c494d58585858585858585874899eb4c9a38e7964585858585858584b4538281602000000091e32455674899eb4c9b39e897a706d7078838f806b5746331e0a00000000000c21364b6175879d9f9584786d6661585761656c77849aa2b2a0927d685745321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839454b5b636f635b4a361c0c0000000000000000000000000000000000000f1c304354606e685f4c473a2a18040000000000000000000000000000000000000000000000000000000b20354b607383928172604a41301e0e00000000000000000000000e1e31424e606879848b919394928f888077696054464b607382898a8a8a77624c37220d00000000000000091c2f404f657b8d9fb5c0beb19f97867a716b67656566686d747c86949faab9b9a99e8978635846331f110000000000000000000001142431424e60687d8c9faab19f97817260545b5b5b5b5b5b5b5b5b5b5b5b5b5b5b594f4a3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061828353f434a4a4a4638352c1e171f2c3536434a4e525454524e4a3d382f2216080000000000000e1e2b3538434343434343433a5c71869cb1bba6917c66514343434343433632281a0a000000000b21364b60768ba8b9bfaa947f6a5c585a636e7975604b3929170300000000000a1e334657647b898b8072625a504c46464b50596274849aa9b29d8875604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b28323d4a4e5a4e4a3d2d1a0000000000000000000000000000000000000001142636434b59524e41342a1c0c000000000000000000000000000000000000000000000000000000000c22374c61778c9f95806b5f4d3c2b190600000000000000000005192b3c4e60687e8b999faaa9a9a7a79e968a7e72615750657a8f9ea89f8f79644f3a240f000000000000000e23384c5e70859babbcc1b2a0978174655d5652504f5053546066747f8c9ea8b9b8a79c8676614c3f2e19090000000000000000000006142431414e5f677d8c9fa9b19f97827260554437464646464646464646464646443a362d201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18232b2e353535312320190e040e1920253035393d3f3f3d39362d241d120400000000000000000e1920232e2e2e2e2e2e2f44596f8499aebea9937e69543e2e2e2e2e2e211e160a00000000000c21364c61768baabbbaa5907b65503e494d5c64605745321b0b000000000000031729394b5d6475776b6054493c363332363b485662788a9fb4a6937e6853392916030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2d36394439362d1f0f00000000000000000000000000000000000000000818263035443d3a311f180c00000000000000000000000000000000000000000000000000000000000b1f3447596c81969e927d675a493520120000000000000000000b2035485a687e8d9faab4bbc3b6b2b0b1a89f9383756158677c91a6b9a7917c67523c27120000000000000216283850657b90a3b5c9b5a398826d60564b3f3d3b3a3b36434b55606a7c8a9ea9bab6a498836e5d4b372614010000000000000000000006142331414d5f677c8b9fa9b1a09782736055443727313131313131313131312f24221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061016182020201c0d0c060000000608131c202428292a2723211a0f090000000000000000000000060b0d1919191919192c41576c8196acc1ab96816c56412c191919190b09020000000000000b20354b60758a9fb4b9a48f79644f3a353e4a4f4b4539281600000000000000000b1b2e3f4b566062594b43362b211f1e212b38485a6d8398adaf9a846f5746321e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a21232f24211a0f0100000000000000000000000000000000000000000008141c202e28251e130400000000000000000000000000000000000000000000000000000000000004182a3b4b6073849a9e8978624d402f1c090000000000000005182a3b4d62788a9fabbbc0b4afa59d9b9c9faba199857661657a8fa5baa9947f69543f2a14000000000000091e3245566e8398aec1c1b19b8574604b45382e27252526263037444b5e657a8b9fb4beb2a0907b655544311d08000000000000000000000005132330414d5e667c8b9fa8b1a098827360554538281a1b1b1b1b1b1b1b1b190f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001030b0b0a06000000000000000000070b0e121414120e0c07000000000000000000000000000000000303030303142a3f54697f94a9beae99836e59442e19000303000000000000000000081c30435472889db2bba6907b66513b262e363a3632281b0a00000000000000000010202e38454b4c473b3026180e0a090d1a2b3c53687d93a8b49f8a76614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e1a0e0c0700000000000000000000000000000000000000000000000001080b1913110b0100000000000000000000000000000000000000000000000000000000000000000c1d3144556277889d99846f5e4c38230f000000000000000b1f3448596e8398a9bac0b4a29a8e8785878c969fa39a847463788da3c7ac97816c57422c170200000000000b21364b60758a9fb4c9b5a3907b66554432281a12101011141c2731404c5c677d92a0b2beb19c8673604b36261401000000000000000000000005132330404c5e667b8a9ea8b2a098837360564538281a0b00060606060604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcb19b86715c392916030000000000000000000000011426365b70859ab0bda8937e68533e291b2224211e160a0000000000000000000002101a28323637342a1c14080002081019263651667c91a6bbaa8e78634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374759667c91a1907b66503d2d1a070000000000000d22374c62778b9fb4c7b4a29a847972707278818c9ea298826e768ba9baae99846f59442f1a00000000000010263b50657b90a9bac6b09b86715e4c3727150a000000000109151d2f3e4d5f6d8298a9bab5a4937e685443301c0800000000000000000000000005122230404c5d657b8a9ea8b2a199837460564538281b0b000000000000000000000000000000000000000002080b0c0c0c0c0b090300000000000000000000000000000003090b0c0c0c0c0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c6b39e89735746321e0a000000000000000000000000182e43586d8398adc0ab95806b56402b160d0f0b0903000000000000000000000000000a151d20221f180d010809151d202d374454687e93a8c8a5907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d12100a01000000000000000000010a10120d0b050000000000000000000000000000000000000000000000000000000000000000000009192a3b4c5e6f849a9a85705b4a36210c00000000000014293f54697e94aabbbcab9a8473635b5b5a626c7b899ea0937e74899fb4b19c87715c3a2a18040000000000152a3f546a7f94a9c7c9aa947f6a55402f19090000000000000002112031414d62788a9fb4c2b29d8773604b35200b000000000000000000000000000412222f3f4c5d657b8a9ea7b2a199837460564639291b0b00000000000000000000000000000000000009151d2021212121211e160a020000000000000000000000000a161e2121212121201c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8bab8a78b76614b36210c000000000000000000000000162b40556b8095aac0ad98836e58432e190000000000000000000000000000000000000002090b0d0b0508101b222731363e4a556072859bb0c5a5907b66503b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d19202227251d13050000000000000005131e25272220180d050000000000000000000000000000000000000000000000000000000000000000162633424e53667b90a28e79634e39240e000000000003172939596e8499aec8b49f8c7963554a3d484d5d6579899e9f8a78879db2b49e89745847331f0a0000000003182d43586d8298adc2bcab8f79644f3a24120000000000000000000213203448596b8196abc1b6a5907b665138271502000000000000000000000000000412212f3f4b5d647a899ea7b3a199837461574639291b0c000000000000000000000000000000000919273136363636363632281d150900000000000000000009171b28323636363636353026180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475974899fb4c5a38e79634e39240e00000000000000000000000013283e53687d93a8bdb09b85705b382815020000000000000000000000000000000000000000000008141c202e3737444b515c64738196a2b4b8a78e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b171e2b34383c3930231301000000000001132330393d37342b20190e0600000000000000000000000000000000000000000000000000000000000e1e334451606871748a9f95806a5536251300000000000a1e33465773889db2c4af9a846f5b49372d343f4c5b647a8a9f9984859bb0b9a88c77614c37220c00000000051a30455a6f859aafc4b59f8b75604b36200b0000000000000000000005192b3b4d62788da3b4c3ad98836d5645311d0900000000000000000000000000000311212e3f4b5c647a899ea6b3a29a847561574639291c0c000000000000000000000000000002152737444b4c4c4c4c4b453931271909000000000000000517273539454b4c4c4c4c4b43362614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b5c72879cb1bba6907b66513b261100000000000000000000000011263b50667b90a5bbb39d88735645321d090000000000000000000000000000000000000000000e182630353f4b4f5560666f7a84969fb1c0b39e8974604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d29333c484d524d41301d0a00000000000a1e30414d524d483b352b20190e06000000000000000000000000000000000000000000000000000005192b3c51626b7e868b92a99a85705443301c07000000000c21364c61768ba6b7bea9947f69543d2c19202f3d4b5c697e93a199899eb3c6a48e79644f39240f00000000071c31465c71869bb1c6b39e89735544311d0800000000000000000000000d2035485a70859bb0c5b49e8975604b36200b0000000000000000000000000000000311202e3e4a5c6479889da6b3a29a84756157463a291c0c00000000000000000000000000081d314455606161616160574b44372715020000000000001323354552576061616161605443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afbda8937e68533e29130000000000000000000000000e23384e63788da3c4b59f8a75604b36200b00000000000000000000000000000000000000010f1e2b36434b525d646c757c848d9aa2b1bdb5a496806b5544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071219273139464c5a62675f4d39251000000000001025394d5f6762594d483c352c211a0f070000000000000000000000000000000000000000000000000b2035485a6b80939c9faab49e8974604a35200b000000000d22384d62778da2c4bba6907b66513b2611111f2e3e4a6072849aa79ea7b9bca6917c67513c271200000000071c32475c71879cb1c6b19c87715c37271502000000000000000000000005192b3c54697e93a9c8b9a88f7a654f3a2510000000000000000000000000000000000210202d3e4a5b6379889da5b4a29a84756158473a2a1c0c0000000000000000000000000b20364b607376767676766f605544311d0d00000000000b1b314252636d767676767672604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc0ab96806b56412b160100000000000000000000000b21364b60768ba6b8bcab8d78634d38230e000000000000000000000000000000000000000f1f2d3c48546067717a828891999fabb4bfb2a59c8675614b3727150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101b222f37444b57616b787d67523c2712000000000012273d52677d776c625a4d493c352c211a0f07000000000000000000000000000000000000000000000d22384d62788b9fb1b4bbb9a88b76614c36210c000000000e24394e63798ea3b8b8a38e78634e39230e01101c30435463788b9fb3b9c5bea9947e69543f291400000000071c31475c71869cb1c6b19c87715c47321c000000000000000000000000000f24394f64798eaabbc6aa947f6a553f2a1500000000000000000000000000000000000210202d3d4a5b6378879da5b4a29b85766158473a2a1c0c00000000000000000000000d22374d62778a8b8b8b8b8373604b3b2b1805000000031628394e606d818b8b8b8b8675604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfad98836e58432e19000000000000000000000000091e32455673889eb3c9a5907b65503b26100000000000000000000000000000000000000c1d2d3d4a5a62737c868f979ea7afb5bcb4b0a19987786257463219090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d19202d36404c55606876808a84705a3828150200000000182d42576d828a81786d635a4e493d362d221b1008000000000000000000000000000000000000000013283d53687d92aabbc9cebbaa8c77624d37220d000000000f24394f64798ea4b9b7a28d78624d38230d0000132536495a6c8196a9bacdc1ac96816c57412c1702000000061b30455b70859ab0c5b29d88735d392816030000000000000000000000000b20364b60758a9fb4c3ae98836e59432e1900000000000000000000000000000000000002101f2d3d495a6378879ca5b4a39b85766158473a291c0c000000000000000000000b203448596a8095a6a1a195806a594834200f000000091e324657687d929fa1a2917c665544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcb09b86705b382816020000000000000000000000031628385b70869bb0bda8927d68533d2813000000000000000000000000000000000004182a3b4a5b637885919ca4acb3b8b9b3aca39b908376625a4839291600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b171e2b343e4a4f5e66747e88959d88735645321d0900000000152a3f556a7f94978b82786d635b4e4a3d362d221b100800000000000000000000000000000000000014293f54697e94a9c2d2c9b49f8a75604b36200b000000000e23384d63788da2c7b7a28c77624d37220d000008182c3c4c61778a9fb4c9c3ae99846e59442f190000000004192e43596e8398aec3b39e89745745321e09000000000000000000000000091d32455671869cb1c6b19c86715c3b2a1804000000000000000000000000000000000000010f1f2c3c495a6278879ca4b5a39b85766158473a291b0b00000000000000000005182b3b4b6175889db3b49e8a77624c3d2c1a060005182b3b4b6175889db3ab9a846f5e4c3727150100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7b39d88735645321e09000000000000000000000000192e43596e8398aebfaa95806a55402b1500000000000000000000000000000000000b1f3447596379899ba3b1b5c0b4b0a79e978e857b6e6158483c2b1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d29333c484d5c646f7c86939ea69f8b75604b36200b0000000012273d52677c92aa9f978c82796e635b4f4a3e372e231c11080000000000000000000000000000000011263b51667b90a4b5c1b9ab9a846f5645321d09000000000c21374c61768ca9bab8a38e78634e39230e0000000e1f3447596c8297acc0c6b19c86715c3a29170400000001172c41566c8196abc1b9a88b76604b36210b00000000000000000000000002152838596e8399aec3b49f89745947341f0b00000000000000000000000000000000000000010f1e2c3c495a6277869ca5b5a39b8576615846392919090000000000000000000d1e324657687d93a4b5a897826c5b49352111000b203448596a8095a6b59f8d7a644f402f19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bab8a68b76604b36210b000000000000000000000001162b41566b8096abc0ad98826d58432d1800000000000000000000000000000000000c22374c6177879da7b4c1b5b1a29a9289817970655d4c463a2b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071219273139464b5a626d7a84919ca4b3b8ab8d78634e38230e000000000f253a4f647a8fa6b4aa9f988c83796e645c4f4b3e372e231c110900000000000000000000000000000b20354b6073869ba3a7a89e8d7b655038281502000000000b20354b60758a9fb4b9a48f7a644f3a250f00000004182a3a4e63798ea2b4c9b39e89745847331f0a0000000014293f54697e94a9bec6a38e78634e39230e00000000000000000000000000162c41566b8196abc0baa98c77614c37220c0000000000000000000000000000000000000000000e1e2b3c48596277879ca5b5a39b8576615746372715020000000000000000031629394b6073869cb1b49f8c79634e3f2e18081a2d3d4c62778a9eb4a998826d5c4a362212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c4a38d78634e38230e00000000000000000000000014293e53697e93a8beaf9a85705a3726140100000000000000000000000000000005192b3c576c8196a6b7bdb1a39b8f857d756c645c504b3f33291c0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101b222f37444b57616b78828d9aa2b1b6b4a89e8c78624d38220d000000000b20364b6074889ba3afb4ab9f988c837a6f645c504b3f382f241c1207000000000000000000000000081d3144556278858f9290897d685d4b381a0a0000000000081c30435471869bb0bda7927d68523d2813000000000c2136495b70859aafc8b9a88c76614c37210c0000000011273c51667c91a6bbbba5907b66503b26110000000000000000000000000014293e54697e93a9bec7a48f79644f3a240f000000000000000000000000000000000000000000000e1d2b3b48596278879da6b5a39b8575615544311d140200000000000000000b1d314455667b90a2b3aa99836e5d4b36251321364a5b6d8297a8b49f8a78624d3e2d1b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2baa5907b65503b261000000000000000000000000011263b51667b90a6bbb29d88725544311d080000000000000000000000000000000b2034485a73889eb3c1b19f97857b706760564e4a3e372f1f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d19202d36404c55606876808a989fabb4b5aa9f978a7e685a4835200b00000000081d314455647a85909aa2aeb4ab9f998e847a6f655d504c3f382f201c13080100000000000000000001152737485a6272797c7b76685f4e3f2f1c00000000000001142636576c8297acc8ab96816b563b2a1805000000061a2c3d53687e93aabbc6a38e79644e39240f000000000f24394f64798ea4c6bda8937e68533e29130000000000000000000000000011263c51667b91a6bbbca6917c67513c271200000000000000000000000000000000000000000000000d1d2b3b48596278889da7b5a3998373604b423220100000000000000000011426374c5e6f849aabb3a18f7b655443301c2f404e63798c9fb4a695806b5a483420100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafbda8937d68533e28130000000000000000000000000e24394e63798ea3c5b49f8a75604b35200b0000000000000000000000000000000d22384d62778da7b8b5a3978174655d524b4538362d231c11040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b171e2b343e4a4f5e66747e88959fa9b5b4ab9f988b817768604e3c2b190500000000021527374a5c64707b848f999fabb4aea1998f847a70655d514c403530251c140801000000000000000009192b3c48546064676661574e413121110000000000000013283d52687d92aabbb09b85705947341f0b000000000f21374c61778a9fb4bba6917c66513c2711000000000c22374c61778ca8b9c0ab95806b56402b16010000000000000000000000000f24394e64798ea3c5bea9947f69543f2a140000000000000000000000000000000000000000000000000d1d2b3b495a6379899eaab3a198826d604f3e2e1a0a000000000000000009192f404e63798c9fb4b09b8572604a3827374c5e6f849aabb39e8876614b3c2b1902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc0aa95806b55402b160000000000000000000000000c21364b61768ba7b8bbaa8d77624d38220d0000000000000000000000000000000f24394e64798ea3c5b19b857260564b3f363228211a0f0a0c15140b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d29333c484d5c646f7c86939ea6b4b5b1a29a8d83786c62594e42311e0e00000000000009192d3e4a4e5d656f7a838c989faab4aea29a8f857b70665e514a433630261d140902000000000000000e1e2b36434a4f52514c463931231303000000000000000c22374c61778b9fb4b59f8b77624c372211000000000a1f33475870859bb0bea9937e69543e2914000000000a1f33475874899eb4c2ad98836d58432e18000000000000000000000000000c21364c61768ba7b9c1ac96816c57412c17020000000000000000000000000000000000000000000000000d1d2c3c495b657b8c9fb4b2a0937e695c4b3828160200000000000000001221364a5b6d8297a8b5a3917c675645314455667b90a2b3a4937e685746331d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfad98836d58432e180000000000000000000000000a1e33465773899eb3c8a58f7a65503a2512121212120d0b0500000000000000000d23384d62788da2c2aa947f6a5445382e211e160a0b171f212a29201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021219273139464b5a626d7a84919ca4b3b6b2a39b90847a6e635a4c473b31241400000000000000000f202d363f4c505c646e79828b979fa9b4afa29a90857b716660544b433631261d1509000000000000000e182530353a3d3b3633291b130500000000000000000a1f3347586f849aafbcab937e68533f2f180800000004172a3a586d8398adc1ab96816c56412c170100000004182a3a5c71879cb1c5b09b85705b382815020000000000000000000000000a1f33465874899eb3c4ae99846f59442f1a00000000000000000000000000000000000000000000000000000e1e2c3d4b5d687e92a0b2b49f8b7a645645321e0d0000000000000000071a2d3d4d62778a9fb4b29d8774604b3a4b6073869cb1b19c8674604b392917000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcb09a85705b3727150200000000000000000008131c2029395c71869bb1bca7927d67523d2827272727272220190e000000000000000b21364b60768ba4b5a9937e695439291a110c0d141c2933363f3e3530251808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2f37444b57616b78828d9aa2b1b6b3a59d92857b6f645c4d493c342a1d14060000000000000000010f1a212f383e4b4f5b636d78818a969ea8b3afa39b90857c736760544b4437312719110300000000000008131c20242726211e170b0000000000000000000004182a3a52687d92a6b7b19c86715d4c36261401000000162b40556b8095aac0ae99836e59442e1900000000001a2f445a6f8499afc4b29d88735645321d090000000000000000000000000417293a5c71869cb1c6b19c86715c3a29170400000000000000000000000000000000000000000000000000000f1f2e3f4e606d8298a6b7aa9c8774604b3c2b190500000000000000000f203448596a8095a6b6a5937e69584657687d93a4b4a2907c665544311b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8b29d88725544311d08000000000000000008182530353b44596e8499aebfaa947f6a553f3c3c3c3c3c3c38352b1e0e000000000000091e32455671869cb1ac97816c5746362923212226303a464c55544a433625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2731404c55606876808a989fabb4b4a69e93877d72655e4f4a3e352c1f180d00000000000000000000000007111c232e373d4a4e5a626c778089959ea7b2b0a39b91867c736760554b44372f21110000000000000000070b0f12110c0a030000000000000000000000000c20364b6074889db2b5a4907b655443301c0f00000013283e53687d93a8bdb19b86715c3929170300000002172d42576c8297acc1b59f8a75604b36200b00000000000000000000000000192f44596e8499aec3b49e89745847331f0a000000000000000000000000000000000000000000000000000001112131424c6176879db2b6a5957f6a5a4834200b000000000000000005182b3b4b6175889db3b39e8976614c6175889db3ab9a846f5e4c372715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b12140c0a0d22384d62778daabbb49f8a75604b36200b0000000000000000132536434a5051566c8196abc1ac97826d57515151515151514d483c2b1905000000000002162838556a8095a9b39e89766154473a38363736434b58616a69605443301c100000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152738454b5e66747e88959fa9b5b4a89e95887e746760544c40362d20190e0500000000000000000000000000000008101b222d363c494d59626b767f89949da6b2b0a49c91867d736860554b3f2f1c08000000000000000000000000000000000000000000000000000000091d314556697f94a5b7b19b8573604b3d2c1c0c000010263b50657b90a5c9b39e89735746331e0a00000000152a3f546a7f94a9bfbcab8d78634d38230e00000000000000000000000002172c41576c8196acc1b9a88c76614c37210c00000000000000000000000000000000000000000000000000000003131f334658677d92a3b5b49f8a78624d3928160300000000000000000d1e324657687d93a4b5a795806b596a8095a6b59f8d7a644e402f19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202829211f1720354b60758a9fb4bcab8d78624d38230d00000000000000071c30435460656767697e94a9beaf9a846f6767676767676767625a4835200b0000000000000d23384d62788b9fb4a79882726158514d4c4d4f546067767f7e72604a3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556606f7c86939ea6b4b0a99f968a80766960564a43362f221b100600000000000000000000000000000000000000070f1a212c353b484c58616a767e88939ca4acb1a49c92877d74655d4b37230e000000000000000000000000000000000000000000000000000000021527384b6175879db2b5a3937e685b493a2a1b0e000e23384d63788dabbcb8a78b76614c36210c0000000012273d52677c92a7bcc9a5907a65503b25100000000000000000000000000014293f54697e94a9bec6a38e79644e39240f00000000000000000000000002090b0f1214100e08000000000000000417293a4a6073859bb0baa996806b5746321e090000000000000000031628394b6073869cb1b49f8a7862778a9fb4a998826d5c4a3622120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182630353d3e3733291d31445572879db2c9a58f7a65503a2510000000000000000b20354a60757b7c7c7c8096abc0b29d877c7c7c7c7c7c7c7c7c78624d38220d0000000000000b2035495a6b8196a4b2a09882766c66626162656a737d8894937f6a5c4a36220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607484919ca4b3b5a39b948a81776a61574b453830251811070000000000000000000000000000000000000000000000070e19202b343a474c576169757e8790979ea7b1a59c92877b65503b2510000000000000000000000000000000000000000000000000000000000a1e324657667c91a1b2b49f8a79635847392c1c130b20364b60758a9fb5c5a38e79634e39240e0000000010253a4f657a8fa4c8bda8927d68533d28130000000000000000000000000012273c51677c91a6bcbba6917c66513c271100000000000000000000000a161e2124282925231c11030000000000000c1c304354677d92a7b8b39e8975614b36210c0000000000000000000b1d314455667b90a1b3a996816c8196a8b49f8a78624d3e2d1b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636434b52534c473a2d26375a70859aafbda7927d68523d28130000000000000011263b50667b90919191969eb0c4b7a69d9191919191919191917f69543f2a1400000000000006192b3c4c6176869ca6b2a09889817b7876777a7f87929da69f8b7a644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb1b6c2b09b867f776c62594b463931271c1308000000000000000000000000000000000000000000000000000000060d18202a3339464b566068727c81889eb3b6b2a596816c56412c1700000000000000000000000000000000000000000000000000000000031628394c5e6e8399a4b6a89c86766157493c30251d1d31455673889db2bba6917b66513c2611000000000d22374d62778caabbbfaa95806a55402b15000000000000000000000000000f24394f64798ea4c6bea9937e69543e291400000000000000000003111a283236393d3e3a372e2114060000000000001325364b6075889eb3b9a7927d67523d2812000000000000000000011426374c5e6f849aabb49f8a788b9fb4a695806b594834201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c30435460676961584a3e3042586d8297adbfaa957f6a55402a150000000000000011263b51667b90a6a6a6abb0bccdc4b7b2a6a6a6a6a6a6a6a696816c57412c17000000000000000e1e3346576278889ba3b4a79e96908d8b8c8f949ca5b3b2a098826d58432d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879ba3b0b5b49f8b847e756a61584d483b352c211a0f07000000000000000000000000000000000000000000000000000006101b223037444b57606a767f859ba7b8b9b3a599846e59442f1900000000000000000000000000000000000000000000000000000000000b1b2f404c6176869ca8b6a49b8575635a4a4336312627385b70859bb0bea8937e69533e2914000000000b20354b60758a9fb4c2ad98826d58432d18000000000000000000000000000c22374c61778ca8bac0ab96816b56412c1601000000000000000011212e38454b4f52544f4b3f312414000000000000081d3245566d8298adc5ad97826d583a29170400000000000000000009192f404e63798c9fb4a99b869ba9b39e8876614b3b2b190200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4b60727d7e76645c4c4040556a8095aabfad97826d58422d18000000000000000e24394e63798e9b9ea7a3acb1bdcebeb1ada5a5a5a5a5a5a599836e59442e190000000000000003172939485a627885959ea8b1aba6a2a1a2a4aab2b1a59d928274604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000013253651667c86909ba3b0a99f9a938980776b62594d493c362d221b100800000000000000000000000000000000000000000000050f1a212e37404c556068757f89949ba3b5b4a79e94877c66513c2711000000000000000000000000000000000000000000000000000000000000121f33465863798a9ea8b5a39b86786860544b44373b43586d8398adc0ab96816b56412c1601000000081c30435472879db2c5af9a85705a372715010000000000000000000000000a1f34475974899fb4c3ae99836e59442e190000000000000000081c2e3f4b5660646769655d4e42311b0b00000000000215283853687d93a8bdb29d88735847331f0a000000000000000000001121364a5b6d8297a8b5a39ba3b5a4937e685746331d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035495a6a809293887a665e4f4352687d92a7bdaf9a856f5a362614010000000000000c21364b61768286888b8e979fb1c5b1a0978f8f8f8f8f8f8f8f85715b46311c00000000000000000b1b2b3c485a6274808a959ba3a6a7a9a9a8a6a39b93877d6d605645321d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000824384c5e66717c85909aa2afafa79e958a81776c625a4e4a3d362d231c1109000000000000000000000000000000000000030d181f2c353f4b4f5e66737d88949ea8b1b2aa9f96897f75665e4d39240f0000000000000000000000000000000000000000000000000000000000000417293a495b657b8a9ea7b5a49c897d7266605552504e566b8095abc0ae98836e59432e1900000000011426365a6f859aafc4b29d88725544311d0800000000000000000000000004182a3a5c71879cb1c6b09b86715b39291603000000000000000e23374b5d6575797d7e7a68604e3a29170400000000000f243a4f64798fa4b9b7a68c76614c37210c00000000000000000000071a2d3d4c62778a9eb4b5b0b5b19c8673604b39291700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788a9fa69d8a7c69614b50657a90a5c9b29d87725443301c080000000000000a1e324657616d707376798197acc7ad97827b7a7a7a7a7a7a7a7a644f3a250f0000000000000000000e1e2b3c4856606b7780868c9092949493908c867e75675f4b453828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c515e66707b858f9aa2afb3a89e968a81786d635b4f4a3e372e241d12080100000000000000000000000000020b171e2a343d494e5d64707c86939da6b3b4b0a1998b81766960564d40301d0a00000000000000000000070c0e1415120b09020000000000000000000000000c1c2c3d4b5d657b899ca4b2a79e92857c746d67656364687d93a8bdb09b86715b3928160300000000182d42586d8297adc2b49f8a75604b35200b000000000000000000000000001a2f445a6f8499afc4b39e89735746321e0a0000000000000010253a50657a8c8e92938f7e685846331f0a00000000000d23384d62788da2b7c4a28d78634d38230e00000000000000000000000f203448596a8095a6b7c9b4a2907c665544311b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398a7b6a89f8d7f6c605562788dabbcb49f8a75604b35200b00000000000003162939464b585b5861657a8fa9baac97826c65656565656565645c4b37220d000000000000000000000e1e2b38454b59616a71777b7d7f7f7e7b77716960564d4132281a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f38404c515e65707b848f99a1aeb4a99f978b82796e645c504b3f382f201c1408000000000000000000000009151d29333b484c5b636e7a85919ca4b2b6b2a39b8f83786c61584b4538302212000000000000000000000f1a2123292b27201d150a0000000000000000000000000f1f2e3f4b5c64798698a0b1b3a39b9188827d7a79797b8196abc1b39e88735746321e0900000000152b40556a8095aabfbbaa8d77624d38220d00000000000000000000000002172d42576c8297acc1b8a78b76614b36210c000000000000000b20364b6075899ea7a99e8976614c38271502000000000c21374c61768ca1b6b9a48f7a644f3a250f000000000000000000000005182b3b4b6175889db2b2ab9a846f5e4c37261400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657b899ca4b3ab9f9481736160758a9fb4bbaa8c77624d37220d000000000000000b1b293236433a464c6075899fb4af9a846f5a5050505050504f4b3e2e1b0800000000000000000000000e1a28323a474c5559626668696a68666259544b4538311d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121c242f38404c505d656f7a848e999fabb4aa9f988c837a6f655d514c40353026180f0100000000000000000d19273139464b59626c79838f9aa2b1b6b3a59d91857a6e635a4c473a32281a1204000000000000000008131c2d36393f403c3632281a1002000000000000000000000111212e3e4b5b637582909ca4b0b0a69d9792908e8e90969fb0c9b8a78b76614b36210c0000000013283d52687d92a7bdc8a58f7a65503a251000000000000000000000000000152a3f546a7f94a9bfc5a38e78634e39230e00000000000000081d3144556d8298adb9a8937e685645311d11010000000d22384d62778da2b7baa58f7a65503a25100000000000000000000000000d1e324657687d929d9d9d8c7a644e402f19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d6578869aa2b1b49f9783756272889db2c8a48f7a654f3a251000000000000000000b161e212e2933455670859aafb19c877254433a3a3a3a3a3a372e2010000000000000000000000000000a161e2a34373b484d5152545453514c473b3632281a13020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121d242f383f4b505d646f7a838c989fabb4ab9f998f847b70665e524b43362c1f0f000000000000000d1d2b37444b57616a77818b99a1b0b4b4a79e94877c70645d4d493c332a1e160a000000000000000000081825303d4a4e5455524b45382d201000000000000000000000000311202e3d4a57616d7b86929ba3abb0aca7a5a3a3a5abb0b9b4afab8e78634e39230e0000000010253b50657a90a5c9bca7927d67523d28120000000000000000000000000012273d52677c92a7bcbba6907b66513b2611000000000000000215273750657b90a2b4b29c8774604b3f2e1d1409060a1527374f647a8fa4b9c3a38e78634e39230e000000000000000000000000031628394b607284888887816c5c4a36221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b5a637684979fb4b1a199857770859ab0bca7927c67523d2712000000000000000000030a0c18172738556a8095aab49f8975604a352525252525221b10020000000000000000000000000000020c181f222b34373b3d3f3f3e3b37342a211e160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c232e373f4b4f5c646e79838c989faab4aea29a90857c71676054493d2c1a06000000000005192b3b4855606976808a979faab2b5a99f96897e74675f4f4b3f352c1f170c0200000000000000000000132536434a5b63696a6760564a3e2d1c0c000000000000000000000002101f2d39464b5e66737d868e969b9faaa6a7a9a8a7a5a89e9a948d7a654f3a2510000000000e23384d63788dabbcbfaa957f6a55402a15000000000000000000000000000f253a4f647a8fa4c7bda8937e68533e291300000000000000000923384c5d70859bb0b6a5947f6a5d4b3f312621191e213144556a7f94aabfb7a58c77614c37220c000000000000000000000000000b1c30435460707272726c63523e2d1b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e3c4958617381939faab3a39b88798297adbfaa947f6a553f2a150000000000000000000000000010253b50657a90a9baa98c77624c37221010100f0d08000000000000000000000000000000000000040a0d18202226282a2a2926221f180d0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c232e373e4a4f5c646e79828c979faab4afa29b90867c73635b4936210c00000000000b2034485962747e88959ea8b4b4ab9f988b80766960564d41372e20190e040000000000000000000000071c304354606b797e807c74645c4a3a2a17040000000000000000000000010f1b2932404c556068717981868a8f9192939392908d89847f77655d4b37230e000000000b20364b60758a9fb4c2ac97826d57422d18000000000000000000000000000d22374d62778ca9bac0ab96806b56412b160100000000000000081c2f3f50657b90a1b3b49f8c7b655d4b4437352c3236434b6074879db2c7b29d87725847331f0a0000000000000000000000000001142636434b5a5d5d5d57524534201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111e2c3a4655606c7e8c9ea8b5a69d89849aafc1ac97826c57422d17020000000000000000000000000b21364b60768a9fb4a48f79644f3a240f0000000000000000000000000000000000000000000000000000050b0d1113141513110d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b222d363d4a4e5b636d78828b979fa9b4b0a39b918679634e39230e00000000000d22374d627886939ea6b4b6b1a29a8d82786b61584b453830221b1006000000000000000000000000011426364a6072808b949591867a645847331f0a000000000000000000000000000b161e2f37444b525c646b70767a7b7d7e7e7d7b78756f6962594b3f2e1c0800000000091d31455673889db2c4af9a856f5a362614010000000000000000000000000b20354a60758a9fb4c3ad98836e58432e190000000000000000001123384c5d6e8399a6b7aa9e8a7b6960554d493c464b51616a8095a5b7bfac96816c573a2a18040000000000000000000000000000081826303545484848413e3427170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c2937444b60697c8a9da5b4a89e9aa1b3c4af9a846f5a452f1a00000000000000000000000000091e32455670859bb0a7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b222d363d494e5b636d78818b969fa9b4b1a49a85705b3a2a170400000000142a3f54697f94a4b3b8b3a49c91857a6e625a4c463a31271a12080000000000000000000000000000081c304354687e939faaaaa49c8876614c37210c00000000000000000000000000000311192631353e4a4e56576064666869686765636055544d483b2e21110000000000021527385b70859bb0c5b29c87725443301c08000000000000000000000000071c30435472879cb2c5b09b86705b382816020000000000000000081c2f3f4c6176889daab9a89e8b7f7369635b5d576166707f8d9fb5c3b3a18f7a654f3a25100000000000000000000000000000000008141c20303333332c2a221709000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c192731424f5e6679879ba3b2b4afb3bfc7b19c87725c3b2a180500000000000000000000000003162838566b8095aba9947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a212c363c494d5a626c78818a969ea8b39e89745847331f0a0000000014293e53697e93a8b4a69e93867c70645c4d493c33291d150a000000000000000000000000000000000b20354b6074889eb3bbc2b6a6947f6a543f2a150000000000000000000000000000000009141d202d363939454b4f5152545352504d4b443737342b1d1103000000000000182e43586d8398adc2b49f8a75604b35200b000000000000000000000000001325365a6f859aafc4b39d88735645321e09000000000000000000111f334758657b8c9fa9b9a99f94877e78747273767c85949fabbcb9a899846f5d4b37220e000000000000000000000000000000000001080b1b1d1d1d17150f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d32404c5b63778598a0b5bcc9d0c9b49f89745947341f0b0000000000000000000000000011263b50667b90aaac97816c57422c17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a212c353c484d59626c77808a959ea88c76614c37210c0000000011263c51667b91a99f95887e74665e4f4a3e352b1f170c0200000000000000000000000000000000000d22384d62778da7b8ccd3c5ae99836e59442e19000000000000000000000000000000000001080f1a21242832363a3c3d3e3e3d3b383531262220180d0000000000000001162b40566b8095abc0baa98c77624d37220d00000000000000000000000000182d42576d8297acc2b59f8a76604b36210b00000000000000000004172a3a4b5d667c8b9ea8b4b4a59d938d8987888a919aa2b5bcb9ab9e8a79634e3f2e1b0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114222f3d4a59617482959fabbac7cdbaa98c77624c37220d000000000000000000000000000c21364b61768b9fad99846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e19212b353b484d59626b778089958e79644e39240f000000000f24394e64798e988a80766960554c40362e20190e04000000000000000000000000000000000000000d22374c62778ca4b6cad0c2ad98836e58432e190000000000000000000000000000000000000000070d0f161e212526282929282623201d140d0b0500000000000000000013293e53687e93a8bdc7a48f7a644f3a250f00000000000000000000000000152a40556a7f95aabfbcab8d78634e38230e000000000000000000000c1c2e3f4c5e667c8a9aa2b1b5b2a9a89e9d9d9faab0b4c0b4a89e8d7c665b4a3621100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121f2d3b4756606d7f8d9fa9b7c4c7a48f79644f3a240f000000000000000000000000000a1e3346576f8497989886715c47311c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e19202b343b484c58616b767f897c66513c2611000000000c21374c61768d82786b61574b443730221b10060000000000000000000000000000000000000000000b2034485972869cb1b9c0b3a4927d68533d2813000000000000000000000000000000000000000000000003090b0f1113141312100e0b080100000000000000000000000011263b50667b90a5bbbca7927c67523d27120000000000000000000000000012283d52677d92a7bcc9a5907b65503b2610000000000000000000000011212f404c5e667884929ca4acb2b6b4b2b3b4bbb7b3ada29a8a7d675e4c3d2d1a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d2a38454b616a7d8b9da6b4b4a6917c67513c271200000000000000000000000000031729394d6278818383816c57422d17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d19202a343a474c58616a7678624d38230d000000000a1f33475864796d625a4c46393127191207000000000000000000000000000000000000000000000005182b3b50657b909ea7a7a29a8674604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3b2b2a9947f6a543f2a150000000000000000000000000010253a50657a8fa5b2b2a8937d68533e281300000000000000000000000312222f404c5a62727d8690979ca5a4a6a7a7a5a69d988f8479675f4d40301f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a283243505f677a889b9f9f9f947f69543f2a1400000000000000000000000000000b2035485a626c6d6d6c63523e2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d181f2a333a474c5761625a4935200b000000000417293a4a5c645c4d483c33291d150900000000000000000000000000000000000000000000000000000d23384c5d687e8990918e8477625645311d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768b9d9d9d9d97826c57422d17020000000000000000000000000d22384d62788d9d9d9d9d95806b55402b160000000000000000000000000412222f3c48546068717b82878c8f919291908d88827a70635b4d41302212010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d33414d5c6478868a8a8a8b816c57412c17020000000000000000000000000006192b3c484d57585857524535220f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c181f293339464c4d493c2b190600000000000c1c2d3d4a4e4a3d342b1e170b01000000000000000000000000000000000000000000000000000000091c2f3f4e6068767b7c796f6259483827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32465771858888888887826d58422d18030000000000000000000000000b20354b6073878888888887806b56412c160000000000000000000000000003111e2b36434a525e656d72777a7b7d7c7b78736d645d4e493d302313040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021523303e4a5a6271757575756c63513e29150000000000000000000000000000000e1e2b3538424343423e35271705000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c171f29333638352b1e0e000000000000000f1f2d3639362d20190d03000000000000000000000000000000000000000000000000000000000000112131424e57616667635b4c483b2a1a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283956677172727272726d63523f2a1601000000000000000000000000081d314455607272727272726b62513d29140000000000000000000000000000000e18253035404c505759626566686765635b584f4b3f352c1f1305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000513202e3c484d5c5f5f5f5f57514534220e000000000000000000000000000000000e1920232d2e2e2d2a221709000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b171e212320190e0000000000000000010f1a2124211a0f0500000000000000000000000000000000000000000000000000000000000000000313243139464b50524e4a3d342a1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b3949565c5d5d5d5d5d5852453523100000000000000000000000000001142637444b5d5d5d5d5d5d56514434210e0000000000000000000000000000000008131c202f383b3b484d4f515252504e493d3a372e211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101d2b3438464a4a4a4a413e342616050000000000000000000000000000000000060b0d17181817150f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0d0b060000000000000000000000070d0f0d07000000000000000000000000000000000000000000000000000000000000000000000006131b2932363b3c39362d1f180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b2b3943464848484848423f3527170600000000000000000000000000000919263135484848484848413d3426160500000000000000000000000000000000000007111c23262b34373a3c3d3c3b38352c25221b1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d19202231353535352c292216080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e21262723211a0f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b272e3133333333332d2a2317090000000000000000000000000000000009141d203233333333332c29211608000000000000000000000000000000000000000000090e10182022252628272623211a0f0d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1c2020202017150e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c11120e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131a1c1d1d1d1d1d1816100600000000000000000000000000000000000001080b1d1d1d1d1d1d16140e0500000000000000000000000000000000000000000000000000050b0d10111312100e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!21 &7050917537736483203 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Italic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 6471949460707905293} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.8333333 + - _ScaleRatioB: 0.6770833 + - _ScaleRatioC: 0.6770833 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} + m_BuildTextureStacks: [] diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Italic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Italic SDF.asset.meta new file mode 100644 index 0000000..63e94ae --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Italic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ba8b0b32b8721048bd7e610207b4ee6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Light SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Light SDF.asset new file mode 100644 index 0000000..2f56143 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Light SDF.asset @@ -0,0 +1,2666 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &-7371932871882357731 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Light SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 4761168720022415635} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Light SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: -7371932871882357731} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: 246d8342c33396a488c19a031f8d655e + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Light + m_PointSize: 74 + m_Scale: 1 + m_LineHeight: 88.8 + m_AscentLine: 73.038 + m_CapLine: 53 + m_MeanLine: 37 + m_Baseline: 0 + m_DescentLine: -15.762 + m_SuperscriptOffset: 73.038 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -15.762 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -18.87 + m_UnderlineThickness: 2.183 + m_StrikethroughOffset: 14.8 + m_StrikethroughThickness: 2.183 + m_TabWidth: 20 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 20.09375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 46.578125 + m_Height: 52.359375 + m_HorizontalBearingX: 0.96875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 48.5 + m_GlyphRect: + m_X: 272 + m_Y: 71 + m_Width: 48 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 34.625 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 46.765625 + m_GlyphRect: + m_X: 338 + m_Y: 312 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 43.296875 + m_Height: 53.546875 + m_HorizontalBearingX: 4.328125 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 50.03125 + m_GlyphRect: + m_X: 157 + m_Y: 415 + m_Width: 44 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 44.109375 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 56.234375 + m_GlyphRect: + m_X: 331 + m_Y: 70 + m_Width: 45 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 31.453125 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 387 + m_Y: 70 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 31.375 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 41.765625 + m_GlyphRect: + m_X: 395 + m_Y: 6 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 45.21875 + m_Height: 53.546875 + m_HorizontalBearingX: 4.328125 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 54.390625 + m_GlyphRect: + m_X: 144 + m_Y: 350 + m_Width: 46 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 40.40625 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 55.875 + m_GlyphRect: + m_X: 236 + m_Y: 321 + m_Width: 42 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 3.8125 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 19.28125 + m_GlyphRect: + m_X: 499 + m_Y: 6 + m_Width: 5 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 22.484375 + m_Height: 52.953125 + m_HorizontalBearingX: 0.96875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 30.671875 + m_GlyphRect: + m_X: 201 + m_Y: 321 + m_Width: 24 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 38.59375 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 46.984375 + m_GlyphRect: + m_X: 251 + m_Y: 250 + m_Width: 40 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 28.59375 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 37.4375 + m_GlyphRect: + m_X: 336 + m_Y: 442 + m_Width: 30 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 51.71875 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 67.1875 + m_GlyphRect: + m_X: 237 + m_Y: 186 + m_Width: 53 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 40.40625 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 55.875 + m_GlyphRect: + m_X: 232 + m_Y: 450 + m_Width: 42 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 49.90625 + m_Height: 53.515625 + m_HorizontalBearingX: 4.328125 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 58.578125 + m_GlyphRect: + m_X: 82 + m_Y: 352 + m_Width: 51 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 32.109375 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.765625 + m_GlyphRect: + m_X: 431 + m_Y: 70 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 52.0625 + m_Height: 64.5 + m_HorizontalBearingX: 4.328125 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 58.578125 + m_GlyphRect: + m_X: 6 + m_Y: 118 + m_Width: 53 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 36.109375 + m_Height: 52.359375 + m_HorizontalBearingX: 7.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 44.921875 + m_GlyphRect: + m_X: 302 + m_Y: 248 + m_Width: 37 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 32.21875 + m_Height: 53.546875 + m_HorizontalBearingX: 3.296875 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 39.59375 + m_GlyphRect: + m_X: 200 + m_Y: 6 + m_Width: 33 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 40.6875 + m_Height: 52.359375 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.84375 + m_GlyphRect: + m_X: 267 + m_Y: 385 + m_Width: 41 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 39.671875 + m_Height: 52.984375 + m_HorizontalBearingX: 7.0625 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 53.796875 + m_GlyphRect: + m_X: 90 + m_Y: 76 + m_Width: 40 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 46.578125 + m_Height: 52.359375 + m_HorizontalBearingX: 0.96875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 48.5 + m_GlyphRect: + m_X: 281 + m_Y: 6 + m_Width: 48 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 71.75 + m_Height: 52.359375 + m_HorizontalBearingX: 1.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 75.265625 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 73 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 43.0625 + m_Height: 52.359375 + m_HorizontalBearingX: 1.484375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 46.109375 + m_GlyphRect: + m_X: 340 + m_Y: 6 + m_Width: 44 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 42.5625 + m_Height: 52.359375 + m_HorizontalBearingX: 0.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 44.03125 + m_GlyphRect: + m_X: 212 + m_Y: 386 + m_Width: 44 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 38.8125 + m_Height: 52.359375 + m_HorizontalBearingX: 2.546875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 44.21875 + m_GlyphRect: + m_X: 301 + m_Y: 184 + m_Width: 40 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 26.984375 + m_Height: 38.03125 + m_HorizontalBearingX: 3.140625 + m_HorizontalBearingY: 37.4375 + m_HorizontalAdvance: 35.8125 + m_GlyphRect: + m_X: 221 + m_Y: 136 + m_Width: 28 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 30.828125 + m_Height: 54.3125 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 40.78125 + m_GlyphRect: + m_X: 89 + m_Y: 192 + m_Width: 31 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.421875 + m_Height: 37.890625 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 37.40625 + m_HorizontalAdvance: 34.890625 + m_GlyphRect: + m_X: 180 + m_Y: 141 + m_Width: 30 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 30.78125 + m_Height: 54.3125 + m_HorizontalBearingX: 3.921875 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 40.78125 + m_GlyphRect: + m_X: 70 + m_Y: 263 + m_Width: 32 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 31.234375 + m_Height: 37.890625 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 37.40625 + m_HorizontalAdvance: 38.59375 + m_GlyphRect: + m_X: 136 + m_Y: 141 + m_Width: 33 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 21.875 + m_Height: 53.015625 + m_HorizontalBearingX: 2.03125 + m_HorizontalBearingY: 53.015625 + m_HorizontalAdvance: 25.203125 + m_GlyphRect: + m_X: 218 + m_Y: 256 + m_Width: 22 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 32.859375 + m_Height: 51.171875 + m_HorizontalBearingX: 2.84375 + m_HorizontalBearingY: 37.4375 + m_HorizontalAdvance: 37.78125 + m_GlyphRect: + m_X: 366 + m_Y: 376 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 28.96875 + m_Height: 53.828125 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 40.703125 + m_GlyphRect: + m_X: 181 + m_Y: 191 + m_Width: 30 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 6.546875 + m_Height: 52.796875 + m_HorizontalBearingX: 4.953125 + m_HorizontalBearingY: 52.796875 + m_HorizontalAdvance: 16.46875 + m_GlyphRect: + m_X: 480 + m_Y: 6 + m_Width: 8 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 13.90625 + m_Height: 66.453125 + m_HorizontalBearingX: -2.40625 + m_HorizontalBearingY: 52.796875 + m_HorizontalAdvance: 16.46875 + m_GlyphRect: + m_X: 33 + m_Y: 436 + m_Width: 15 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 28.28125 + m_Height: 53.828125 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 35.21875 + m_GlyphRect: + m_X: 232 + m_Y: 71 + m_Width: 29 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 47.8125 + m_Height: 37.40625 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 37.40625 + m_HorizontalAdvance: 59.5625 + m_GlyphRect: + m_X: 296 + m_Y: 135 + m_Width: 48 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 28.96875 + m_Height: 37.40625 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 37.40625 + m_HorizontalAdvance: 40.703125 + m_GlyphRect: + m_X: 355 + m_Y: 134 + m_Width: 30 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 33.5625 + m_Height: 37.890625 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 37.40625 + m_HorizontalAdvance: 41.296875 + m_GlyphRect: + m_X: 90 + m_Y: 141 + m_Width: 35 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 30.828125 + m_Height: 50.46875 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 37.4375 + m_HorizontalAdvance: 40.8125 + m_GlyphRect: + m_X: 475 + m_Y: 70 + m_Width: 31 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 30.78125 + m_Height: 50.46875 + m_HorizontalBearingX: 3.921875 + m_HorizontalBearingY: 37.4375 + m_HorizontalAdvance: 40.734375 + m_GlyphRect: + m_X: 385 + m_Y: 312 + m_Width: 32 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 19.140625 + m_Height: 37.4375 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 37.4375 + m_HorizontalAdvance: 26.15625 + m_GlyphRect: + m_X: 437 + m_Y: 196 + m_Width: 20 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 24.640625 + m_Height: 38 + m_HorizontalBearingX: 3.296875 + m_HorizontalBearingY: 37.40625 + m_HorizontalAdvance: 31.453125 + m_GlyphRect: + m_X: 260 + m_Y: 136 + m_Width: 25 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 22.203125 + m_Height: 50.328125 + m_HorizontalBearingX: 2 + m_HorizontalBearingY: 49.734375 + m_HorizontalAdvance: 25.34375 + m_GlyphRect: + m_X: 437 + m_Y: 134 + m_Width: 23 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 28.96875 + m_Height: 37.40625 + m_HorizontalBearingX: 5.65625 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 40.65625 + m_GlyphRect: + m_X: 396 + m_Y: 134 + m_Width: 30 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 34.1875 + m_Height: 36.8125 + m_HorizontalBearingX: 1.4375 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 37.109375 + m_GlyphRect: + m_X: 447 + m_Y: 329 + m_Width: 35 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 52.875 + m_Height: 37 + m_HorizontalBearingX: 1.84375 + m_HorizontalBearingY: 37 + m_HorizontalAdvance: 56.578125 + m_GlyphRect: + m_X: 6 + m_Y: 70 + m_Width: 54 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 31.484375 + m_Height: 36.8125 + m_HorizontalBearingX: 1.59375 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 34.703125 + m_GlyphRect: + m_X: 377 + m_Y: 439 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 34.375 + m_Height: 49.84375 + m_HorizontalBearingX: 1.4375 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 37.109375 + m_GlyphRect: + m_X: 471 + m_Y: 171 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 27.828125 + m_Height: 36.8125 + m_HorizontalBearingX: 2.40625 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 32.8125 + m_GlyphRect: + m_X: 397 + m_Y: 183 + m_Width: 29 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 11.40625 + m_Height: 10 + m_HorizontalBearingX: 7.171875 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 29.59375 + m_GlyphRect: + m_X: 175 + m_Y: 321 + m_Width: 12 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 6.84375 + m_Height: 52.921875 + m_HorizontalBearingX: 5.921875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 18.828125 + m_GlyphRect: + m_X: 71 + m_Y: 70 + m_Width: 8 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 309 + m_Metrics: + m_Width: 24.78125 + m_Height: 53.515625 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 31.96875 + m_GlyphRect: + m_X: 244 + m_Y: 6 + m_Width: 26 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 6.546875 + m_Height: 15.65625 + m_HorizontalBearingX: 4.921875 + m_HorizontalBearingY: 6.296875 + m_HorizontalAdvance: 16.203125 + m_GlyphRect: + m_X: 114 + m_Y: 323 + m_Width: 8 + m_Height: 17 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 7.140625 + m_Height: 44.65625 + m_HorizontalBearingX: 5.921875 + m_HorizontalBearingY: 35.296875 + m_HorizontalAdvance: 18.578125 + m_GlyphRect: + m_X: 70 + m_Y: 135 + m_Width: 9 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 6.84375 + m_Height: 35.859375 + m_HorizontalBearingX: 5.21875 + m_HorizontalBearingY: 35.296875 + m_HorizontalAdvance: 17.765625 + m_GlyphRect: + m_X: 428 + m_Y: 315 + m_Width: 8 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 314 + m_Metrics: + m_Width: 6.84375 + m_Height: 6.859375 + m_HorizontalBearingX: 5.21875 + m_HorizontalBearingY: 6.296875 + m_HorizontalAdvance: 17.28125 + m_GlyphRect: + m_X: 155 + m_Y: 497 + m_Width: 8 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 315 + m_Metrics: + m_Width: 42.84375 + m_Height: 6.859375 + m_HorizontalBearingX: 5.21875 + m_HorizontalBearingY: 6.296875 + m_HorizontalAdvance: 53.578125 + m_GlyphRect: + m_X: 100 + m_Y: 497 + m_Width: 44 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 326 + m_Metrics: + m_Width: 26.53125 + m_Height: 56.9375 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 32.15625 + m_GlyphRect: + m_X: 50 + m_Y: 194 + m_Width: 28 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 2.78125 + m_Height: 69.265625 + m_HorizontalBearingX: 7.4375 + m_HorizontalBearingY: 56.125 + m_HorizontalAdvance: 17.65625 + m_GlyphRect: + m_X: 6 + m_Y: 276 + m_Width: 4 + m_Height: 71 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 329 + m_Metrics: + m_Width: 26.53125 + m_Height: 56.9375 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 32.15625 + m_GlyphRect: + m_X: 59 + m_Y: 432 + m_Width: 28 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 330 + m_Metrics: + m_Width: 17.203125 + m_Height: 2.984375 + m_HorizontalBearingX: 5.109375 + m_HorizontalBearingY: 23.453125 + m_HorizontalAdvance: 27.375 + m_GlyphRect: + m_X: 82 + m_Y: 417 + m_Width: 18 + m_Height: 4 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 333 + m_Metrics: + m_Width: 29.15625 + m_Height: 2.515625 + m_HorizontalBearingX: 2.078125 + m_HorizontalBearingY: -7.578125 + m_HorizontalAdvance: 33.34375 + m_GlyphRect: + m_X: 59 + m_Y: 501 + m_Width: 30 + m_Height: 4 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 12.40625 + m_Height: 66.28125 + m_HorizontalBearingX: 4.0625 + m_HorizontalBearingY: 56.46875 + m_HorizontalAdvance: 19.09375 + m_GlyphRect: + m_X: 34 + m_Y: 354 + m_Width: 13 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 12.390625 + m_Height: 66.28125 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 56.46875 + m_HorizontalAdvance: 19.09375 + m_GlyphRect: + m_X: 21 + m_Y: 276 + m_Width: 14 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 11.765625 + m_Height: 65.890625 + m_HorizontalBearingX: 7.46875 + m_HorizontalBearingY: 56.125 + m_HorizontalAdvance: 21.984375 + m_GlyphRect: + m_X: 46 + m_Y: 276 + m_Width: 13 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 11.734375 + m_Height: 65.890625 + m_HorizontalBearingX: 2.734375 + m_HorizontalBearingY: 56.125 + m_HorizontalAdvance: 21.984375 + m_GlyphRect: + m_X: 58 + m_Y: 354 + m_Width: 13 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 15.953125 + m_Height: 65.890625 + m_HorizontalBearingX: 3.03125 + m_HorizontalBearingY: 56.125 + m_HorizontalAdvance: 21.828125 + m_GlyphRect: + m_X: 6 + m_Y: 436 + m_Width: 16 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 341 + m_Metrics: + m_Width: 15.953125 + m_Height: 65.890625 + m_HorizontalBearingX: 2.84375 + m_HorizontalBearingY: 56.125 + m_HorizontalAdvance: 21.828125 + m_GlyphRect: + m_X: 6 + m_Y: 358 + m_Width: 17 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 342 + m_Metrics: + m_Width: 20.390625 + m_Height: 22.046875 + m_HorizontalBearingX: 5.515625 + m_HorizontalBearingY: 55.234375 + m_HorizontalAdvance: 31.453125 + m_GlyphRect: + m_X: 174 + m_Y: 480 + m_Width: 21 + m_Height: 23 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 30.109375 + m_Height: 25.90625 + m_HorizontalBearingX: 6.40625 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 475 + m_Y: 133 + m_Width: 31 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 32.546875 + m_Height: 11.578125 + m_HorizontalBearingX: 5.296875 + m_HorizontalBearingY: 27.640625 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 70 + m_Y: 329 + m_Width: 33 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 3.0625 + m_Height: 17.796875 + m_HorizontalBearingX: 5.703125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 14.46875 + m_GlyphRect: + m_X: 212 + m_Y: 450 + m_Width: 4 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 14.0625 + m_Height: 17.796875 + m_HorizontalBearingX: 5.703125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 25.203125 + m_GlyphRect: + m_X: 206 + m_Y: 480 + m_Width: 15 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 351 + m_Metrics: + m_Width: 46.546875 + m_Height: 53.546875 + m_HorizontalBearingX: 3.953125 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 51.6875 + m_GlyphRect: + m_X: 98 + m_Y: 432 + m_Width: 48 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 352 + m_Metrics: + m_Width: 52.953125 + m_Height: 58.0625 + m_HorizontalBearingX: 4.4375 + m_HorizontalBearingY: 49.25 + m_HorizontalAdvance: 61.3125 + m_GlyphRect: + m_X: 90 + m_Y: 6 + m_Width: 54 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 362 + m_Metrics: + m_Width: 32.625 + m_Height: 69.75 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 60.234375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 6 + m_Y: 194 + m_Width: 33 + m_Height: 71 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 370 + m_Metrics: + m_Width: 36.96875 + m_Height: 52.359375 + m_HorizontalBearingX: 2.953125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 289 + m_Y: 314 + m_Width: 38 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 37.515625 + m_Height: 53.515625 + m_HorizontalBearingX: 2.703125 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 131 + m_Y: 191 + m_Width: 39 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 29.34375 + m_Height: 52.578125 + m_HorizontalBearingX: 7.546875 + m_HorizontalBearingY: 52.578125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 439 + m_Y: 6 + m_Width: 30 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 33.78125 + m_Height: 52.953125 + m_HorizontalBearingX: 4.25 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 350 + m_Y: 248 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 33.9375 + m_Height: 53.546875 + m_HorizontalBearingX: 4.0625 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 155 + m_Y: 6 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 39.03125 + m_Height: 52.421875 + m_HorizontalBearingX: 1.515625 + m_HorizontalBearingY: 52.421875 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 285 + m_Y: 449 + m_Width: 40 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 31.671875 + m_Height: 52.953125 + m_HorizontalBearingX: 5.296875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 175 + m_Y: 256 + m_Width: 32 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 405 + m_Metrics: + m_Width: 34.859375 + m_Height: 52.359375 + m_HorizontalBearingX: 4.625 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 319 + m_Y: 378 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 406 + m_Metrics: + m_Width: 32.484375 + m_Height: 52.953125 + m_HorizontalBearingX: 4.84375 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 352 + m_Y: 184 + m_Width: 34 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 435 + m_Metrics: + m_Width: 34.734375 + m_Height: 36.140625 + m_HorizontalBearingX: 4.109375 + m_HorizontalBearingY: 42.84375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 468 + m_Y: 281 + m_Width: 35 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 439 + m_Metrics: + m_Width: 30.640625 + m_Height: 14.328125 + m_HorizontalBearingX: 6.140625 + m_HorizontalBearingY: 32.15625 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 133 + m_Y: 323 + m_Width: 31 + m_Height: 16 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 442 + m_Metrics: + m_Width: 27.75 + m_Height: 30.03125 + m_HorizontalBearingX: 6.4375 + m_HorizontalBearingY: 39.84375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 397 + m_Y: 231 + m_Width: 29 + m_Height: 31 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 443 + m_Metrics: + m_Width: 27.75 + m_Height: 30.03125 + m_HorizontalBearingX: 8.734375 + m_HorizontalBearingY: 39.84375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 428 + m_Y: 273 + m_Width: 29 + m_Height: 31 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 3.546875 + m_Height: 53.828125 + m_HorizontalBearingX: 6.40625 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 16.359375 + m_GlyphRect: + m_X: 222 + m_Y: 186 + m_Width: 4 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 33.703125 + m_Height: 52.953125 + m_HorizontalBearingX: 5.03125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 187 + m_Y: 71 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.046875 + m_Height: 53.546875 + m_HorizontalBearingX: 4.4375 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 141 + m_Y: 76 + m_Width: 35 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 50.28125 + m_Height: 53.578125 + m_HorizontalBearingX: 3.703125 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 57.6875 + m_GlyphRect: + m_X: 113 + m_Y: 258 + m_Width: 51 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 36.8125 + m_Height: 36.8125 + m_HorizontalBearingX: 3.78125 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 44.40625 + m_GlyphRect: + m_X: 468 + m_Y: 233 + m_Width: 38 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 4761168720022415635} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 84 + m_Height: 64 + - m_X: 84 + m_Y: 0 + m_Width: 65 + m_Height: 70 + - m_X: 0 + m_Y: 64 + m_Width: 65 + m_Height: 48 + - m_X: 65 + m_Y: 64 + m_Width: 19 + m_Height: 65 + - m_X: 0 + m_Y: 112 + m_Width: 64 + m_Height: 76 + - m_X: 0 + m_Y: 188 + m_Width: 44 + m_Height: 82 + - m_X: 0 + m_Y: 270 + m_Width: 15 + m_Height: 82 + - m_X: 0 + m_Y: 352 + m_Width: 28 + m_Height: 78 + - m_X: 0 + m_Y: 430 + m_Width: 27 + m_Height: 78 + - m_X: 27 + m_Y: 430 + m_Width: 26 + m_Height: 78 + - m_X: 15 + m_Y: 270 + m_Width: 25 + m_Height: 78 + - m_X: 28 + m_Y: 348 + m_Width: 24 + m_Height: 78 + - m_X: 40 + m_Y: 270 + m_Width: 24 + m_Height: 78 + - m_X: 52 + m_Y: 348 + m_Width: 24 + m_Height: 78 + - m_X: 44 + m_Y: 188 + m_Width: 39 + m_Height: 69 + - m_X: 64 + m_Y: 129 + m_Width: 20 + m_Height: 57 + - m_X: 53 + m_Y: 426 + m_Width: 39 + m_Height: 69 + - m_X: 53 + m_Y: 495 + m_Width: 41 + m_Height: 15 + - m_X: 64 + m_Y: 257 + m_Width: 43 + m_Height: 66 + - m_X: 64 + m_Y: 323 + m_Width: 44 + m_Height: 23 + - m_X: 83 + m_Y: 186 + m_Width: 42 + m_Height: 66 + - m_X: 107 + m_Y: 252 + m_Width: 62 + m_Height: 65 + - m_X: 76 + m_Y: 346 + m_Width: 62 + m_Height: 65 + - m_X: 76 + m_Y: 411 + m_Width: 29 + m_Height: 15 + - m_X: 108 + m_Y: 317 + m_Width: 19 + m_Height: 28 + - m_X: 127 + m_Y: 317 + m_Width: 42 + m_Height: 27 + - m_X: 92 + m_Y: 426 + m_Width: 59 + m_Height: 65 + - m_X: 94 + m_Y: 491 + m_Width: 55 + m_Height: 19 + - m_X: 149 + m_Y: 491 + m_Width: 19 + m_Height: 19 + - m_X: 138 + m_Y: 344 + m_Width: 57 + m_Height: 65 + - m_X: 151 + m_Y: 409 + m_Width: 55 + m_Height: 65 + - m_X: 168 + m_Y: 474 + m_Width: 32 + m_Height: 34 + - m_X: 200 + m_Y: 474 + m_Width: 26 + m_Height: 30 + - m_X: 84 + m_Y: 70 + m_Width: 51 + m_Height: 65 + - m_X: 84 + m_Y: 135 + m_Width: 46 + m_Height: 50 + - m_X: 125 + m_Y: 185 + m_Width: 50 + m_Height: 65 + - m_X: 130 + m_Y: 135 + m_Width: 44 + m_Height: 50 + - m_X: 135 + m_Y: 70 + m_Width: 46 + m_Height: 65 + - m_X: 174 + m_Y: 135 + m_Width: 41 + m_Height: 50 + - m_X: 149 + m_Y: 0 + m_Width: 45 + m_Height: 65 + - m_X: 181 + m_Y: 65 + m_Width: 45 + m_Height: 65 + - m_X: 194 + m_Y: 0 + m_Width: 44 + m_Height: 65 + - m_X: 169 + m_Y: 250 + m_Width: 43 + m_Height: 65 + - m_X: 175 + m_Y: 185 + m_Width: 41 + m_Height: 65 + - m_X: 215 + m_Y: 130 + m_Width: 39 + m_Height: 50 + - m_X: 226 + m_Y: 65 + m_Width: 40 + m_Height: 65 + - m_X: 238 + m_Y: 0 + m_Width: 37 + m_Height: 65 + - m_X: 169 + m_Y: 315 + m_Width: 23 + m_Height: 22 + - m_X: 195 + m_Y: 315 + m_Width: 35 + m_Height: 65 + - m_X: 212 + m_Y: 250 + m_Width: 33 + m_Height: 65 + - m_X: 216 + m_Y: 180 + m_Width: 15 + m_Height: 65 + - m_X: 231 + m_Y: 180 + m_Width: 64 + m_Height: 64 + - m_X: 254 + m_Y: 130 + m_Width: 36 + m_Height: 50 + - m_X: 266 + m_Y: 65 + m_Width: 59 + m_Height: 64 + - m_X: 275 + m_Y: 0 + m_Width: 59 + m_Height: 64 + - m_X: 290 + m_Y: 129 + m_Width: 59 + m_Height: 49 + - m_X: 325 + m_Y: 64 + m_Width: 56 + m_Height: 64 + - m_X: 334 + m_Y: 0 + m_Width: 55 + m_Height: 64 + - m_X: 206 + m_Y: 380 + m_Width: 55 + m_Height: 64 + - m_X: 206 + m_Y: 444 + m_Width: 15 + m_Height: 30 + - m_X: 230 + m_Y: 315 + m_Width: 53 + m_Height: 64 + - m_X: 226 + m_Y: 444 + m_Width: 53 + m_Height: 64 + - m_X: 261 + m_Y: 379 + m_Width: 52 + m_Height: 64 + - m_X: 279 + m_Y: 443 + m_Width: 51 + m_Height: 64 + - m_X: 245 + m_Y: 244 + m_Width: 51 + m_Height: 64 + - m_X: 295 + m_Y: 178 + m_Width: 51 + m_Height: 64 + - m_X: 283 + m_Y: 308 + m_Width: 49 + m_Height: 64 + - m_X: 296 + m_Y: 242 + m_Width: 48 + m_Height: 64 + - m_X: 313 + m_Y: 372 + m_Width: 47 + m_Height: 64 + - m_X: 332 + m_Y: 306 + m_Width: 47 + m_Height: 64 + - m_X: 344 + m_Y: 242 + m_Width: 46 + m_Height: 64 + - m_X: 346 + m_Y: 178 + m_Width: 45 + m_Height: 64 + - m_X: 349 + m_Y: 128 + m_Width: 41 + m_Height: 49 + - m_X: 381 + m_Y: 64 + m_Width: 44 + m_Height: 64 + - m_X: 389 + m_Y: 0 + m_Width: 44 + m_Height: 64 + - m_X: 390 + m_Y: 128 + m_Width: 41 + m_Height: 49 + - m_X: 425 + m_Y: 64 + m_Width: 44 + m_Height: 64 + - m_X: 433 + m_Y: 0 + m_Width: 41 + m_Height: 64 + - m_X: 469 + m_Y: 64 + m_Width: 42 + m_Height: 63 + - m_X: 474 + m_Y: 0 + m_Width: 19 + m_Height: 64 + - m_X: 493 + m_Y: 0 + m_Width: 16 + m_Height: 64 + - m_X: 469 + m_Y: 127 + m_Width: 42 + m_Height: 38 + - m_X: 431 + m_Y: 128 + m_Width: 34 + m_Height: 62 + - m_X: 465 + m_Y: 165 + m_Width: 46 + m_Height: 62 + - m_X: 391 + m_Y: 177 + m_Width: 40 + m_Height: 48 + - m_X: 431 + m_Y: 190 + m_Width: 31 + m_Height: 49 + - m_X: 462 + m_Y: 227 + m_Width: 49 + m_Height: 48 + - m_X: 391 + m_Y: 225 + m_Width: 40 + m_Height: 42 + - m_X: 330 + m_Y: 436 + m_Width: 41 + m_Height: 64 + - m_X: 360 + m_Y: 370 + m_Width: 45 + m_Height: 63 + - m_X: 379 + m_Y: 306 + m_Width: 43 + m_Height: 63 + - m_X: 422 + m_Y: 267 + m_Width: 40 + m_Height: 42 + - m_X: 462 + m_Y: 275 + m_Width: 46 + m_Height: 48 + - m_X: 422 + m_Y: 309 + m_Width: 19 + m_Height: 48 + - m_X: 441 + m_Y: 323 + m_Width: 46 + m_Height: 48 + - m_X: 371 + m_Y: 433 + m_Width: 44 + m_Height: 48 + m_FreeGlyphRects: + - m_X: 15 + m_Y: 348 + m_Width: 13 + m_Height: 4 + - m_X: 64 + m_Y: 112 + m_Width: 1 + m_Height: 17 + - m_X: 28 + m_Y: 426 + m_Width: 25 + m_Height: 4 + - m_X: 0 + m_Y: 510 + m_Width: 511 + m_Height: 1 + - m_X: 0 + m_Y: 508 + m_Width: 53 + m_Height: 3 + - m_X: 44 + m_Y: 257 + m_Width: 20 + m_Height: 13 + - m_X: 64 + m_Y: 186 + m_Width: 19 + m_Height: 2 + - m_X: 83 + m_Y: 252 + m_Width: 24 + m_Height: 5 + - m_X: 64 + m_Y: 346 + m_Width: 12 + m_Height: 2 + - m_X: 107 + m_Y: 317 + m_Width: 1 + m_Height: 6 + - m_X: 92 + m_Y: 491 + m_Width: 2 + m_Height: 4 + - m_X: 108 + m_Y: 345 + m_Width: 30 + m_Height: 1 + - m_X: 127 + m_Y: 344 + m_Width: 11 + m_Height: 2 + - m_X: 105 + m_Y: 411 + m_Width: 46 + m_Height: 15 + - m_X: 138 + m_Y: 409 + m_Width: 13 + m_Height: 17 + - m_X: 151 + m_Y: 474 + m_Width: 17 + m_Height: 17 + - m_X: 168 + m_Y: 508 + m_Width: 343 + m_Height: 3 + - m_X: 84 + m_Y: 185 + m_Width: 41 + m_Height: 1 + - m_X: 149 + m_Y: 65 + m_Width: 32 + m_Height: 5 + - m_X: 125 + m_Y: 250 + m_Width: 44 + m_Height: 2 + - m_X: 181 + m_Y: 130 + m_Width: 34 + m_Height: 5 + - m_X: 169 + m_Y: 337 + m_Width: 26 + m_Height: 7 + - m_X: 192 + m_Y: 315 + m_Width: 3 + m_Height: 29 + - m_X: 215 + m_Y: 180 + m_Width: 1 + m_Height: 5 + - m_X: 266 + m_Y: 129 + m_Width: 24 + m_Height: 1 + - m_X: 275 + m_Y: 64 + m_Width: 50 + m_Height: 1 + - m_X: 195 + m_Y: 380 + m_Width: 11 + m_Height: 29 + - m_X: 200 + m_Y: 504 + m_Width: 26 + m_Height: 7 + - m_X: 221 + m_Y: 444 + m_Width: 5 + m_Height: 30 + - m_X: 230 + m_Y: 379 + m_Width: 31 + m_Height: 1 + - m_X: 261 + m_Y: 443 + m_Width: 18 + m_Height: 1 + - m_X: 279 + m_Y: 507 + m_Width: 232 + m_Height: 4 + - m_X: 216 + m_Y: 245 + m_Width: 29 + m_Height: 5 + - m_X: 231 + m_Y: 244 + m_Width: 14 + m_Height: 6 + - m_X: 290 + m_Y: 178 + m_Width: 5 + m_Height: 2 + - m_X: 245 + m_Y: 308 + m_Width: 38 + m_Height: 7 + - m_X: 295 + m_Y: 242 + m_Width: 1 + m_Height: 2 + - m_X: 283 + m_Y: 372 + m_Width: 30 + m_Height: 7 + - m_X: 296 + m_Y: 306 + m_Width: 36 + m_Height: 2 + - m_X: 325 + m_Y: 128 + m_Width: 24 + m_Height: 1 + - m_X: 509 + m_Y: 0 + m_Width: 2 + m_Height: 64 + - m_X: 465 + m_Y: 128 + m_Width: 4 + m_Height: 37 + - m_X: 349 + m_Y: 177 + m_Width: 42 + m_Height: 1 + - m_X: 462 + m_Y: 190 + m_Width: 3 + m_Height: 37 + - m_X: 313 + m_Y: 436 + m_Width: 17 + m_Height: 7 + - m_X: 330 + m_Y: 500 + m_Width: 181 + m_Height: 11 + - m_X: 332 + m_Y: 370 + m_Width: 28 + m_Height: 2 + - m_X: 390 + m_Y: 242 + m_Width: 1 + m_Height: 64 + - m_X: 431 + m_Y: 239 + m_Width: 31 + m_Height: 28 + - m_X: 390 + m_Y: 267 + m_Width: 32 + m_Height: 39 + - m_X: 508 + m_Y: 275 + m_Width: 3 + m_Height: 236 + - m_X: 379 + m_Y: 369 + m_Width: 62 + m_Height: 1 + - m_X: 422 + m_Y: 357 + m_Width: 19 + m_Height: 154 + - m_X: 487 + m_Y: 323 + m_Width: 24 + m_Height: 188 + - m_X: 441 + m_Y: 309 + m_Width: 21 + m_Height: 14 + - m_X: 360 + m_Y: 433 + m_Width: 11 + m_Height: 3 + - m_X: 371 + m_Y: 481 + m_Width: 140 + m_Height: 30 + - m_X: 405 + m_Y: 371 + m_Width: 106 + m_Height: 62 + - m_X: 415 + m_Y: 371 + m_Width: 96 + m_Height: 140 + - m_X: 405 + m_Y: 369 + m_Width: 36 + m_Height: 64 + - m_X: 415 + m_Y: 369 + m_Width: 26 + m_Height: 142 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 246d8342c33396a488c19a031f8d655e + pointSizeSamplingMode: 0 + pointSize: 74 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!28 &4761168720022415635 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Light SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1e20201b19130900000000000000000000000000000000000000000000000000050e14172020200e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d111417191a1b1c1b1b1a181613100c0a040000000000000000000000000000000000000000000000000000000000000000000001080b0e12141617171614110d0b05000000000000000000000000000000000000000000000000000000000003090c0f13151617171614110c0a0400000000000000000000000000000000000000000000000000000000040a0c1316120b070000000000000000000000000000000000000000000000000000000000000000000000000000000000061016182020200e0c0600000000000000000000000000000000000000000000000000000000070d0f1f20201c0c0a0400000000000000000000000000000000000000000000000000000000070d0f1e2020200f0d0700000000000000080e1020202016140e04000000000000000000000000000000000000000000000000000000000000000000000000060b0d20202020202020202020202020202020202020202020202020201e1b150c00000000000000040e14162020201e19100400000000000000080e1020202016140e0400000000000000000000000000000000000000000000000008141c20333535302e261a0c0000000000000000000000000000000000000000000000081622292c35353524211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000003090c12181f2226292c2e30303131302f2d2b2825211f17110b090300000000000000000000000000000000000000000000000000000000070b141c2024272a2b2c2c2b2a272220190e0c060000000000000000000000000000000000000000000000040a0c161e2125282a2b2c2c2b2926211f170c0a040000000000000000000000000000000000000000000000000c171f21282b27201c130800000000000000000000000000000000000000000000000000000000000000000000000000000a18232b2e3535352321190e00000000000000000000000000000000000000000000000000010f1a212435353531211f170c00000000000000000000000000000000000000000000000000010f1a21243335353524221b100200000003111c23263535352c29211608000000000000000000000000000000000000000000000000000000000000000000000e19202335353535353535353535353535353535353535353535353535353330291d0f0000000000081621292b353535332d2214040000000003111c23263535352c29211608000000000000000000000000000000000000000000000818263035494a4a4642382a1a00000000000000000000000000000000000000000000001626343e414a4a4a39362d1f0f00000000000000000000000000000000000000000000000000000000000000000000000000070b161e21272a34373c3f414445464646454442403e3a36332927211e160b0700000000000000000000000000000000000000000000000008131c20263035393c3f414141413f3c38352b23211a0f0700000000000000000000000000000000000000040c171f212832363a3d40414141403e3b37332a221f180c040000000000000000000000000000000000000000010f1c2933373e403c3530251809000000000000000000000000000000000000000000000000000000000000000000000000001828353f434a4a4a38352c1e0e0000000000000000000000000000000000000000000000000f202d36394a4a4a4637332a1c0c0000000000000000000000000000000000000000000000000f202d3639494a4a4a3a362e201000000011212f383b4a4a4a413d3426160400000000000000000000000000000000000000000000000000000000000000000e1e2b354a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a48443b2d1d0c000000041626333d404a4a4a483f3222100000000011212f383b4a4a4a413d34261604000000000000000000000000000000000000000001142636434b5e60605b5548381e0e0000000000000000000000000000000000000000000818344451566060604e4a3d2d1a070000000000000000000000000000000000000000000000000000000000000000000008101b222832363c3b484c515457595a5b5c5b5a5a5855534f4c463a3c363228201c1308020000000000000000000000000000000000000004121825303536434b4e52545657575654514d483c38352c221b1001000000000000000000000000000000000c181f2a333739464b4f52555657565653504c473a37332a1f170c000000000000000000000000000000000000000f1f2c3a474c5356524a433627190900000000000000000000000000000000000000000000000000000000000000000000000c1c354653586060604d493c2c190600000000000000000000000000000000000000000000071a2d3e4a4e5f60605c4c473a2a1704000000000000000000000000000000000000000000000a1a2d3e4a4e5e60605f4f4a3e2e1b0700081c2f3f4c5060606056514434210e0000000000000000000000000000000000000000000000000000000000000006192b3c485e60606060606060606060606060606060606060606060606060605d584c3b29150000000e213344515660605f5c503f2d19050000081c2f3f4c5060606056514434210e0000000000000000000000000000000000000000081c304354607375757067553c2b1905000000000000000000000000000000000000000114263651626c757575705b4a36210c000000000000000000000000000000000000000000000000000000000000000005101b222d3639464b5158596266696c6e6f707170706f6d6b6865615857514b45393530251d150a01000000000000000000000000000000000b171f2f36434a5154606367696b6c6c6b6966625a564e493d362d1d15090000000000000000000000000003131c2a333a474c54576164686a6b6c6c6b69666158554c473a33291c110300000000000000000000000000000000061a2c3d495861686b676054443727150200000000000000000000000000000000000000000000000000000000000000000004182a3a53646d757575635b4935210a000000000000000000000000000000000000000000000d21364a5c6474757571615847331f14000000000000000000000000000000000000000000031628384a5c6473757575645c4a36220d000e23384c5d657575756b62513d2914000000000000000000000000000000000000000000000000000000000000000b2035485a707575757575757575757575757575757575757575757575757575736a5844301b00000014293d51626b7575756e5c48331e0900000e23384c5d657575756b62513d291400000000000000000000000000000000000000000b20354b6073888a8a85705a4835200b00000000000000000000000000000000000000081c3043546c818a8a8a79634e39240e000000000000000000000000000000000000000000000000000000000000000d18202e373e4a4f5761676d72777b7e818385858686858482807d7a76726c666057504a433632281c140800000000000000000000000000000d1b2933404c5460666e74797c7f808181807f7c78726c635b4f4a3e3127190d00000000000000000000000b171e313a474c58616970767a7d7f808181807e7b77716a61584c463a2f2115070000000000000000000000000000000c2135495b63767e807c72605544311d080000000000000000000000000000000000000000000000000000000000000000000a1f3447596d828a8a8d79634d382816030000000000000000000000000000000000000000000f24394e64798b8a8a8676614c42311f0e00000000000000000000000000000000000000000b1e324556647a888a8a8c7a644f3a240f0010263b50657b8a8a8a806b56412c16010000000000000000000000000000000000000000000000000000000000000d23384d62788a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a88735d48331e000001162b40566b808a8a8c755f4a35200a000010263b50657b8a8a8a806b56412c16000000000000000000000000000000000000000010253a4f657a8fa6a38d78624d38220e000000000000000000000000000000000000000b20354b6074889d9f947f6a553c2b19050000000000000000000000000000000000000000000000000000000001131d2b343f4b4f5c646d767c82878c919496999a9999999a999795938f8b87817c756e6660544b4538302618100200000000000000000000000d1d2b3a464c5e66737b83898e91949696969694918d8781796e645c4b44372b1d0d0000000000000000000e1b2933424e58616c767e858a8f92959696969593908c867f776b61584c403225160800000000000000000000000000011426364e6379889395918373604b36200b0000000000000000000000000000000000000000000000000000000000000000011426364c61778a9fab96816b5645321e090000000000000000000000000000000000000000000d21364a5c697f94a299836f604e3d2c19090000000000000000000000000000000000000b1b2e3f4b6075869ca395806a5c4a36220d0010263b50657b909f96816b56412c16010000000000000000000000000000000000000000000000000000000000000d23384d62788d9a9a9a9a9a9a9a9a9a9a9aa29fa49c9a9a9a9a9a9a9a9a9a9a88735d48331e000001162b40566b80959f8a755f4a35200a000010263b50657b909f96816b56412c1600000000000000000000000000000000000000071a2d3d566b8196aba9947f69543c2c190600000000000000000000000000000000000114263750657a8fa6b09b86715a4835200b00000000000000000000000000000000000000000000000000000009151d303b484d5d65707a828a91989994908c898685848384848587898c909499979189837b736960564b43362d2010000000000000000000000a1b2b3b4858616e7c8690989e9f9b9795949394969a9f9d968c837a6b6055483b2b1c0c000000000000000e1e2b39464c606877818a949a9f9f9c99979697999a9ea39b94898076655e4f4333261605000000000000000000000000081c3043546f849aa6aba2947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000081c3043546a7f94a9b29e8975604b362110000000000000000000000000000000000000000000071a2d3e4b6073849aa1937e685b493727150100000000000000000000000000000000031729394b5d6c8196a49b8573604b3e2e1b070010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000d22374c62778485858585858585858585849ab09c8684858585858585858585826e58432e19000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000000000000000d21364a5c72879db2b09b86715b4935210c0000000000000000000000000000000000081d3144556c8197acb0a38d78624d38220d00000000000000000000000000000000000000000000000000000b192731414d59626e7a858e9899918a847f7a767471706f6e6f6f707274777b7e83888f969890877e746860544a3e2d1b070000000000000000031628394859627682919ca39b928a8681807e7e7f81858a919b9f998c80736259483a2a1b0b00000000000d1d2b3c4857616e7e89969f9f9a928b87848281828385898f969f9e95897b696151443323130000000000000000000000000b20354b60758a9fb4c0af9a85705a45301b05000000000000000000000000000000000000000000000000000000000000000b20354b6073879da59da5927d68523e2d1b070000000000000000000000000000000000000000000f1c3043546278899e9f8a79635544311d10000000000000000000000000000000000c1e334657657b8d9f9f8a79635544312010000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000b1f344759626f6f6f6f6f6f6f6f6f6f6f778ca1947f6f6f6f6f6f6f6f6f6f6f6e64533f2b16000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000000000000000f24394e64798ea5a39ba38d78634d38230f00000000000000000000000000000000000b20354b6074889ea39ba3937e69543a2a17040000000000000000000000000000000000000000000000000b1b2937444b5f6777838f9a978c847c766f6a6561585c5a5959595a5b5d596265696e747a8188919b93877e73645c4a36220d00000000000000000a1e32455762778698a09e92857d76706c6a69696a6c70757c86929d9f9585786258473929160300000005192b3b485a627583939ea1998c847d77726e6d6c6c6e70757a818a969f9e8c7f6b625141311e0e0000000000000000000000081c30435473889eb3baae99846f59442f1a0400000000000000000000000000000000000000000000000000000000000006192b3c51667b90a59d879d9b85715c4a36220c00000000000000000000000000000000000000000001142636485a677d91a09b8573604b3f2e1b0b00000000000000000000000000000c1c2f404b6175879da1937e685b4937271502000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000005182a3b474c5a5a5a5a5a5a5a5a5a5a62778ca1947f695a5a5a5a5a5a5a5a5a585346362310000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000000000000000006192b3c556a8095a69b859b947f6a553d2c1a060000000000000000000000000000000215273750657b90a69b869b9a856f5847331f0a00000000000000000000000000000000000000000000000a1a29394655606c7d8999998b81786f67615754504c473a4544444445463b484d50545460656c757c86919c93857a644f39240f000000000000000a1a30414b6075859ba39b887d70686157575554535457566067737d889ba39b8676615746321e0f0000000b2034485962788699a19e9183796f68615959575657595660656c77818d9e9f94806b5f4e3c2b19050000000000000000000001142636576c8196a0a99f907c66503b2611000000000000000000000000000000000000000000000000000000000000000b2035495a6f84999e897e93a38e7a644f3a29170400000000000000000000000000000000000000000008182b3c4d5f6d8298a395806b5d4b3929170300000000000000000000000004172a3a4c5e6d8297a599836f604e3d2c190900000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000d1d2a34374545454545454545454c62778ca1947f69544545454545454545433f36281806000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000000000000000000000b2035495a71869c9d887f949c86715b4936210c000000000000000000000000000000081d3144556d82979e897e939f8b77614c37210c00000000000000000000000000000000000000000000091928384657617381929e9284796c625a514b46393b373329302f2e2f2f302b34373b36434b4f566067717c8694937d68533e2813000000000000021528384d5f6e8399a39b8578675f524b4639403f3e3f38454b54606777859aa29b8575614b3d2d1a0700000d22374d6278879ca49c897c6e635b524c473a42414238454b5059616b7c899e9e927d685a4835200e00000000000000000000000c21364b6175828e908a7e695e4c38230f000000000000000000000000000000000000000000000000000000000000021528384d62788c9f9882788c9f97826d5847331f08000000000000000000000000000000000000000000000d1d30414c6176879d9f8c7a645746331e120000000000000000000000000d1f334758667c909f9e8977624c42311f0e0000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000000000d181f223030303030303030374c62778ca1947f69543f303030303030302e2b23180a00000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000000000000000000000d23384d62788da498837b8fa48e79634e39230f0000000000000000000000000000000b20364b6075899e98837a8fa8927d6852392816030000000000000000000000000000000000000000011527374556617583979d8a7e6f635b4d493c36322825211f171b1a191a1a1b1820222526303538454b525e66747f8475614b36210c000000000000091d324556677c91a19c8677625a4d413632282b29292a283236434a596274849aa396816b5b4a36210e0000152a40556a7f95a1998678675f4e4a3d37342a2d2c2d2731363a474c5e66798a9e9e8a78624d3c2c190600000000000000000000091e324657616e797b7769604f402f1c09000000000000000000000000000000000000000000000000000000000000091d3245566b8095a6907b70859b9f8a76614c3625130000000000000000000000000000000000000000000000131e334657657b8c9f9d8775614b40301d0d000000000000000000000d1d30414c6176889da0917c675948342414000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000000050b0d1a1a1a1a1a1a1a22374c62778ca1947f69543f2a1a1a1a1a1a1a191610060000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000000000004182a3b54697e94a8937e72889e95806a553e2d1a07000000000000000000000000000215273850667b90a7927d73899e99836e5745321e0900000000000000000000000000000000000000000b1d3144556074849a9b877968604e493d352c211e16100c0a04000404040500050b0d10141c20273136404c5560696f615746321e090000000000000b20364b6074879d9f8a796359483c30211e1615141415161e25303b48566176879d9f8b79634e3c2c1906000b21364b607587918375625a4d40362d221f18181717151d202a34404c5b667c8d9f98836e5a4935200c0000000000000000000003162839464b5b636561594f42322212000000000000000000000000000000000000000000000000000000000000000b20364b6075889e9d8874687d92a7947e695443301c0700000000000000000000000000000000000000000000031729394b5d6b8095a397826d5f4d3b2b1808000000000000000005182b3b4d5f6e8298a598826d5f4d3b2b1806000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000505050505050d22374c62778ca1947f69543f2a140505050505030100000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000000000000000b1f34475970859aa38c776c81979c87725c4a36210d00000000000000000000000000091d3145566d82979f8a766e83989f8a76604b36210b000000000000000000000000000000000000000b1b2f404b607383999b8577635b4e42352c20190e0903000000000000000000000000000001080b151d202f37444b54594b46392816030000000000071a2d3d53687d92a5947f6a5b4a3a2b1d130903000000000208131c2b384758657a8fa19a846f5a4935200c00091e32455762787c736157483c30211a0f0a0400010002090c181f2f3d4c5e6e83999f8c78634d38230e00000000000000000000000b1b28323d494e504c473b32241404000000000000000000000000000000000000000000000000000000000000071a2d3d52677d92a695806a6075899e9c8773604a35200d00000000000000000000000000000000000000000000000b1b2e3f4b6074859ba0917c67594836251300000000000000000e20344859677d91a09d8776614c41301d0d00000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000000000000000c22374c61778b9f9b8671657a8fa48e79644e392410000000000000000000000000000b20364b6075899e98836e677c92a9917c66513727150100000000000000000000000000000000000417293a4c5e6b80969c867661594a3d31211a0f06000608070500000000000000000000000002090b0b0912192731363f443632281b0b0000000000000d21364a5c71859b9d8875604b3d2d1c0d000000000000000000000d1a2a3a4b5d6f84999f8c78634d38230e000316283948596267605546392b1e120700000000000000000004121f30404e63798c9f95806b563b2b180500000000000000000000000b161e2c36393b37342a1d1406000000000000000000000000000000000000000000000000000000000000000c21364a5b70859b9f8b7862576c8196a4907b65503b2b19050000000000000000000000000000000000000000000000111d31445563798a9f9e8977625443301c0f0000000000000e1e31424c6277899e9f8c7b6558463323120000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000000000317293953687d92ab957f6a6073889d95806b563e2e1b0700000000000000000000000316283851667c91a7917c6761768a9f98826d5544311d0800000000000000000000000000000000000a1f334658667c8d9d88776258473a2d1f13080b11181b1d1d1a160f0d0700000000040a0c15151d20201c1312151d202a2f211e160b000000000000000f24394e647a8ea3947f6a5645321f0f0000000000000000000000000c1c2e3f50657b90a8947f69543f2a1400000a1b2b3b484d524b4437291b0e00000000000000000000000001122135495b70859a9c8772594834200b000000000000000000000000030f1a212326221f180c0000000000000000000000000000000000000000000000000000000000000000031729394e63798ea299836e594e63798ea299836e5948342009000000000000000000000000000000000000000000000002152737495b687e93a19a8472604a3d2d1a0a0000000008182b3c4e606f8399a496806b5d4b3a2917040000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000000000a1e3346576f8499a58e7964546b81969d87725c4a3622080000000000000000000000091e3245566d83989e897560586f849a9e8974604b35200b00000000000000000000000000000000061a2c3d4c6176889e8c7b6559483a2a1c0f141c20262d3132322f2b24221b1008000c171f212a28323635302527201d15141a0c09030000000000000000162b40556b80959f8b77624c38281501000000000000000000000000001020364b6075899e99846f59442f1a0000000d1d2b34373c353126190b0000000000000000000000000000061a2c3d546a7f94a48c77624c37220d0000000000000000000000000000060c0e100c0b040000000000000000000000000000000000000000000000000000000000000000000a1e3346576c8197a5907b6550495b70859a9f8b78624d37271502000000000000000000000000000000000000000000000009192c3d4e606f8399a2937e695b4a38271502000000132536485a687d92a19c8674604b3f2e1b0b000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000000000c21364b61768a9f9d87725c4f647a8fa58f7a644f36251300000000000000000000000b21364b6075899e98826d5654697e93a7907b65503b2510000000000000000000000000000000000c2136495b6c819695806b5d4b3b2b1c0f182630353c42464847454039362d221b101c2933363f38454b4a43363d3632281c1408000000000000000000001b31465b70859295836f5948341a0a0000000000000000000000000000081d3144556f84999d87725d48321d000000000d19202227201d14090000000000000000000000000000000010253a4f657a8fa4907b66513b261100000000000000000000000000000004050a0402000000000000000000000000000000000000000000000000000000000000000000000c21364c6176899e9c8773604a3d52677c91a695806a5544311d080000000000000000000000000000000000000000000000000f1f31424c6177889e9f8b79635645311d110000091c30435462788a9e9f8b7963564532211100000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000000000000000215273852677c91a996816c574a5c72879c96816b5443301c070000000000000000000316293951677c91a7907b66514d62788da496816c573e2d1b07000000000000000000000000000005192b3c4e63798c9d8775604b3f2e1d0f1f2d36434b51585b5d5c5a554f4a3e372e202c3a464c555b5660605459524b45383026180c0000000000000000000c21364b61757d8078624d3b2b1800000000000000000000000000000002152737576c82979e89745f49341f0000000000050b0d120b080100000000000000000000000000000000000e23384d63788da2937e68533e2913000000000000000000000000000812181b201917110700000000000000000000000000000000000000000000000000000000000000081c2e3f53697e93a8947f695443364b6074889d9d8874604b36200f00000000000000000000000000000000000000000000000001141f344759667c909f9b8574604b3f2e1c0c09192c3d4a6072849aa2947f695b4a3828150300000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000000091d3145566e8398a7907b65503e556b80959d8873604a35200b0000000000000000000a1e3246576e83989e8975604b485a71869c9d87725c4a36220d00000000000000000000000000000b2035485a6d8298917c6757453221111f2d3d4a5460666d7072726f6b645c4f4b3f333d4958616a71747575726e6760564b43362a1d0e0000000000000000091e32465761686b625a48341d0d00000000000000000000000000000000162b41566b80969f8b745f4a351f00000000000000000000000000000000000000000000000000000000000c21364c61768ba1947f6a553f2a150000000000000000000000000c1a252d30352e2c24180a0000000000000000000000000000000000000000000000000000000000000e23374b5d71869c9f8a77614c363144556b8095a6917c67513d2c1a0600000000000000000000000000000000000000000000000004182a3b4c5e6c8197a396806b5d4b3a2917142637495b697e93a29a8473604b3d2d1a0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000000000000000b20364b6075899e9e8975604b394e63798ea48f7a654f3726140100000000000000000c21364b61768a9f97826d55443c556a8095a58e79644f39240f00000000000000000000000000000d22384d62788b9c8673604a3928161a2d3d4a5b63737c8286878784807970645d5044495b63767f868a8b8a88837d75686054473b2b1e0e0000000000000003162839464b53564d483c2b190000000000000000000000000000000001142636576d82979e88735e49331e00000000000000000000000000000000000000000000000000000000000c21374c61768ca195806a55402b150000000000000000000000081a2a3841454a4440362818070000000000000000000000000000000000000000000000000000000005182a3b50657a8fa498826d58473327374d62788c9f9a846f5b4935210b000000000000000000000000000000000000000000000000000c1d2f404b6075869c9f8d7b655846331f1d31445563798a9f9e8978625443301f0f000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000000000013253650667b90a898836d5544364a5b71869c96816c5544311d08000000000000000417293a52677c92a6907b655037394f64798ea695806b553d2c1a06000000000000000000000000071b2d3e556b8095927d675443301b1528384a5c64798591979b979698958e857a6a625256637987949b949191939892887e736159483c2b1c0c000000000000000b1b2832363d4038342b1d0d00000000000000000000000000000000081c3043546f84999c87715c47321c00000000000000000000000000000000000000000000000000000000010f24394e63798ea3947f69543f2a14000000000000000000000012253848555a5f595346362411000000000000000000000000000000000000000000000000000000000b1f3447596e8398a38f7a644f3a2a2035485a6f8499a28e79634e3928160300000000000000000000000000000000000000000000000000121e324557647a8b9f9d8776614c41302d3e4b6073859ba1927d685a4836261401000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000000000000071c3043546c8297aa917c6752372d3d556a7f959d8874604b35200b000000000000000a1f3346586e83999d8874604b35354a6074889d9c86715b4935210c0000000000000000000000000d22364a5c72879c8975604b3625131d324556647a899b9d9086828183878e988c806c636074869c94857f7c7b7e838a98938477625a483a2a1704000000000000000b161e21282b2220190d00000000000000000000000000000000000c20354b6074899e98826d58432e1800000000000000000000000000000000000000000000000000000003111f304153687d93a7917c67523c27120000000000000000000004182d41556670756e6453402c17020000000000000000000000000000000000000000000000000000011426374c62778b9f9b86715c4b371c192b3c51667b90a596816c5746321e0900000000000000000000000000000000000000000000000000031628394a5c6a7f94a298826e5f4d3c384a5c6a7f94a399836e5f4e3c2b180800000000000000000000000010263b50657b90a596816b56412c160a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a000000000000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000000000b20354a6074889d9f8a76614c3623384d63788da3907b6550372715010000000000000c21364c61768a9f96816c5544313043546c8197a48d78634e38230e0000000000000000000000000f243a4f64798f97826d564532180b20364b6074869c9d877b716d6c6d7279829295816c687d93947f706a6766696e7783939a8778625847331f12000000000000000003090c13160d0b0500000000000000000000000000000000040f1d2d3d4f64798ea7937d68533e281300000000000000000000000000000000000000000000000000040b161e2e3d4d5f70859aa58d78634e38230e00000000000000000000051b30455a70848a836e59442e19040000000000000000000000000000000000000000000000000000081d3144556a7f94a8937d68533e2e1b0e20354b6073879d9e8975614b36211000000000000000000000000000000000000000000000000000000a1b2d3e4b6073849aa0927d675a484556647a8b9f9d8876614c41311e0e0000000000000000000000000010263b50657b90a596816b56412c1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f13110b020000000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000000000f253a4f647a8fa69a846f5746332135495b71869b97826c5544311d08000000000004172a3a52687d92a58f7a654f3726253650667b90a8947f69543b2b18050000000000000000000000132536556a7f94907b6651382816182a3a53697e939d8878655d5856585b636d7d8b947f6f84998570615451515359626e7e8c9c8676614c40301b0a0000000000000000000000010000000000000000000000000000000003090c171f2d3b4a5b6c81979f8a77614c37220c0000000000000000000000000000000000000000000002090c171f28323f4b5b677c91a29d87725b4935210c00000000000000000000061c31465b71869a85705a45301b0500000000000000000000000000000000000000000000000000000b20354b6074879d9e8976614b362110081c3043546a7f94a7937d68533e2e1b080000000000000000000000000000000000000000000000000000101c3043546278899e9e897862544b6074869c9f907c665847332313000000000000000000000000000010263b50657b90a596816b5641343434343434343434343434343434343434343428261e130600000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000000071a2d3d566b8096a8937e69533929192c3c54697f949e8874604b35200b00000000000a1f3347586f84999d8773604a352020364b6075899e9b8570594834200b00000000000000000000071c3043546f84998b76614c36210c1f33475871869b927d675a4b3f413d4a4e5f677d8d8d7a88937e6954433c3c3b484c60687e9299836e5e4d39281603000000000000000000000000000000000000000000080e10141416161e2129333d4a5963798c9f97816c5947341f0a0000000000000000000000000000000000000003090b161e21293339464b5d65798a9ea3947e69543d2c1a0600000000000000000000071c32475c71879c86715c47311c000000000000000000000000000000000000000000000000000006192c3c51667c91a596816c5746321e0a011426364c61778a9f9b86715c4b37220c000000000000000000000000000000000000000000000000000001142636485a677d92a09a8473605d6b8095a497816c5e4c3a2a1805000000000000000000000000000010263b50657b90a596816b564949494949494949494949494949494949494949493d3a31241302000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000c21364a5b72879ca38d78624d38220e22384d62788c9f907b665038281502000000000c21374c61768a9f96816b5443301c1d3145566e83989f8b77624c37220d000000000000000000000b20354a6074899c86715846331f0c22374c61778c9d8874604b3c2e2c2d36414d5f6b8095878c907b65503b27262b34424e606b8096917c665745321e090000000000000000000000000000000000000003111c2325292a2b2832363a464c5b6377879c9e8877624c3a2a18040000000000000000000000000000000001080b161e212832363a474c57616a7b889ea89b8674604b36200f0000000000000000000000081d32485d72879d88735d37271502000000000000000000000000000000000000000000000000000c2035495a6f8499a28e79634e3929160300081f3447596e8398a38f7a644f3a2a1804000000000000000000000000000000000000000000000000000008182b3c4d5f6d8298a2947f6a647a8c9f9c8675614b402f1c0c00000000000000000000000000000010263b50657b90a596816b5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f534e42311e0b000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000000000e24394e63798ea59b86715a4834200b2034485a70859b97826d5645321d0900000004182a3b53687d92a58e79644f36251315273852677d92aa937e68533a2917040000000000000000000d22374d62778c97826d583a291710263b50657b9098836e5544311e171a2130404b6074869c9f8e79644e392411182031424b6075879d8875604b3621100000000000000000000000000000000000000011212f383b3e3f4138454b5058616a79869c9f8d7c665948341c0c0000000000000000000000000000000609141d2028323638454b5158616975808b9ea69f8b7a645544311d080000000000000000000000091e33485e73889d89745544311d08000000000000000000000000000000000000000000000000021628384d63788c9f9a85705b4a361b0b000004182a3b50657a8fa498826d5847331f080000000000000000000000000000000000000000000000000000000e1e30414c6176879d9f8b7a75879c9f8c7a6457463222120000000000000000000000000000000010263b50657b90a59680747474747474747474747474747474747474747474747468604e3a2611000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000005192b3c556a7f95aa957f6a553c2b1905192b3c53697e939e8975604b36200b0000000b1f3447596f849a9c87725c4a3618080c21374c61768b9f99846f5846331f0a00000000000000000010253a4f657a8f947f6a553f2a1512283d52677d9295806b553727150007131d324556667c91a48f79644f3a240f05141e324556677c91937d68533e2e1b070000000000000000000000000000000000081c2f3f4b50535456585660656d76808b9c9d8c7d675e4c3b2a180000000000000000000000000000060e192026313539454b515660666d767e88959fa59d8a7b655c4a372715020000000000000000000000091f34495e74899e8b75604b362012000000000000000000000000000000000000000000000000091e3245566b8096a6927c67523d2d1a000000000c23374b5d71869c9f8a77614c36251300000000000000000000000000000000000000000000000000000000131f334658657b8c9f9a848196a395806a5c4b392816040000000000000000000000000000000010263b50657b90a59f8b898989898989898989898989898989898989898989898a7e68533d2813000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000000000b2035485a71869ba58e79644e39240f000d22374c62778b9f917c66513828160300000c22374c61778b9f95806b553e2d1b000a1f33475870859a9f8a76614c36210c00000000000000000012283d52677d92927c67523d271213293e53687e93947f6a543f2a150000021528384a6073879c917c66513c271100031628384a6073879b86715c4b37220d00000000000000000000000000000000000e23384b5d6569696b6d71767b8289959f96887c675f4d402f1d0d000000000000000000000000000e19202c3537444b505760676e757c828a949da69f97877a655d4b3e2d1909000000000000000000000000091f34495e74899e8d78634e3f2f1c1308000000000000000000000000000000000000000000000b21364b6075889e9e8875604b36200f00000000081c2e3f53697e93a8947f695443301c070000000000000000000000000000000000000000000000000000000417293a4b5d6b8096a29a8c9f9b8573604b3e2e1b0b000000000000000000000000000000000010263b50657b90a5aa9f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e937e68533e2913000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000000000d22384d62788da39d87725c4a36220d000b1f3447596f849a98836d5645321e090005182b3b53687e93a48e79634e3924100004172a3a54697e94a9927c675238281502000000000000000014293f54697e94907a65503b251013283d52687d92957f6a55402a150000000a1c3043546a7f94947f6a543f2a1500000a1c3043546a80958f7a644f3a240f000000000000000000000000000000000010253b50657b7e7f8083868a90979a938a8176665e4d4130221200000000000000000000000000131e2b353c494d5560656d757c838991989fa99f978b8175645c4b3f2f201000000000000000000000000000071d32475c72879c95806a5d4c403025180c0000000000000000000000000000000000000000071b2d3e52677d92a795806b5645311d0900000000001121364c61768a9e9d8773604a35200e000000000000000000000000000000000000000000000000000000000c1c2e3f4b6075869cab9f9f8a7863554431201000000000000000000000000000000000000010263b50657b90a5a0988e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e7e68533e2913000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000004172a3a54697e93a996816c573e2d1b070005182a3b53687d939e8975604b36210b000b2034485970859a9c86715b4a36210c00000d23384d62788da498836e5645321d090000000000000000152a40556a7f958f79644f3a240f11263b50667b9097826c57392816030000001325364e63788d98836e593d2c1a0600001325364d63788d95806b563727150100000000000000000000000000000003192e43586e83939496989b9f9d8b857e766c61584c4030231304000000000000000000000008131c313c484d5a636b747b828991989ea8a29b938a82786c61574b3e2f2111020000000000000000000000000000152a3f556a7f949f8b7b665e4a43362a1c11030000000000000000000000000000000000000d22364a5c70859b9f8c78624d3827150200000000000a1e3346576d8297a5907b66503c2b19050000000000000000000000000000000000000000000000000000000a1c3043546277899ea89e9e8877625443301c1000000000000000000000000000000000000010263b50657b90a59882797979797979797979797979797979797979797979797976614c37210c000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000a1f33475870859aa7907b65503b26100000000d21374c61768a9f917c6751392916030d22374d62778b9f947f6a553d2d1a0700000c2035495a71869c9e8975604b36200b0000000000000000162b40566b80958e79634e39240e0d23384d62788d9b85705745321e09000000082135495b72879d88735b4935210c0000082035495a73889b86705544311d0800000000000000000000000000000003192e43586e828f9193989d9d887d766b62594c463a2f221305000000000000000000000008182530424e5a626d78818890989ea8a59c958d857d766d625a4b46392e2011030000000000000000000000000000000b21364b6075859b9e8a7c6a6054473a2e211305000000000000000000000000000000000417293a4e64798ea399846f5a48351a0a000000000000031729394f64798ea399836e5a4835200a00000000000000000000000000000000000000000000000000000a1a2d3e4a6072849a9f978a9e9a8472604a3e2d1b0a000000000000000000000000000000000010263b50657b90a596816b64646464646464646464646464646464646464646464615847331f0a000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000000c21374c61778b9f9e8975604b36200b0000000a1f3347586f849998836e5746321e0a192b3c54697e93a38d78634d38230f00000006192c3c556b8095a8907b66513626140100000000000000162c41566b81968d78634e38230e0b2035485a73889d8a76604b362111000000061a2c3d576c82978d78634e38230e000006192c3c596e84998a74604b35200b000000000000000000000000000000000d22384d62787a7c7e82878d969289807768604b44372618080000000000000000000000132536434a606878828b969da6a59d968e878078706861584d493c33291b100200000000000000000000000000000000091e324557627786999e8d7f7261594b3f312314060000000000000000000000000000000a1f3346586d8297a5907b66513c2b1900000000000000000b22364a5c70859b9f8c78624d38271502000000000000000000000000000000000000000000000000031628384a5c697f94a297817f94a2947f695c4a392816030000000000000000000000000000000010263b50657b90a596816b564e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c473a2a1704000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000316283952687d92aa98836e5544311d0800000004172a3a52677d929f8a76614b36210c2035485a70859b9b86715a4935200c000000000f243a4f647a8fa697826d5443301c0800000000000000162b40556b80958e79644e39240f06192b3c586d8298917c67513f2e180800000012273c52677c91937e6953372614010000152a40556a7f958d78634d38230e000000000000000000000000000000000b2035485a626567696d727880889696897e6d605544362513000000000000000000000b1c304354606c7e8a989fa99f988f878079726b635b534c463a352c1e170b000000000000000000000000000000000000031628394859627683949f948377655d4e413124140400000000000000000000000000000c21364c61768a9f9d8773604b35200e0000000000000000071b2d3e52687d92a795806b5645311d090000000000000000000000000000000000000000000000000c1e324556647a8b9f9d877573859b9f8b7a645745321e120000000000000000000000000000000010263b50657b90a596816b5641393939393939393939393939393939393939393937332a1c0c00000000000000000000000000000000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000000091e3246576e8399aa927c675237271502000000000c21364b61768a9f927c67523a291722384d62788c9f947f69543c2c1906000000000b20354a6074889d9e8874604b35200b00000000000000152a3f546a7f948f7a654f3a25100011263b51667b909a84705d4b3625130000000c22374c61778b99836e5544311d08000013283e53687d938f7a65503a25100000000000000000000000000000000005192b3c484d505154585a636b75808d9e928273605443301c0e00000000000000000b1b30414a607281929ea89f978b827a726b645c554d493c36332920190e0300000000000000000000000000000000000000000a1b2b3b485861727f8c9e99887b68604e4231221200000000000000000000000000081c2e3f54697e93a8947f6a5443301c080000000000000000001021364b6075899e9e8875604b36200f00000000000000000000000000000000000000000000000c1d2f404b6075869c9f8c7b6563798a9e9c8675604b40301d0d00000000000000000000000000000010263b50657b90a596816b56412c24242424242424242424242424242424242424211f170c0000000000000000000000000000030000000000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000000c21364b61768a9f9f8a76614c36210c00000000000a1e3346576e839999836e5846331f2c3c54697f949f8c78624d38220e0000000000071c3043546c8297a68f7a654f3a25100000000000000013283e53687d93917c66513c2711000b20354b6074879d8f7a655443301c1002000b1f34475971869c8974604b35200b000012273c52677c91917c67513c271200000000000000000000000000000000000e1e2b35383a3c3e3c494d57606b7b8a9e988272604a3c2b19050000000000000417293a4d5f6c81979fa59d8c82776d655d564f4a3e38352c211f170b0600000000000000000000000000000000000000000000000d1d2b3a4654606a7b889b9d8b7e68604e40301e0e0000000000000000000000000e23374b5d71869c9f8a77624c36261401000000000000000000091e3245566b8196a6927c67523d2d1a0700000000000000000000000000000000000000000004182a3b4c5e6c8197a395806b5d5b687e93a197816c5e4c3b2b1808000000000000000000000000000010263b50657b90a596816b56412c160f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0c0a04000000000000000000000000060c0e18110f090000000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000215273751677c91a99a846f5846331f0a00000000000317293951677c919f8a76614c362135495a71869b9a85705a4834200b00000000000013253651667b90a896816b563d2d1a0700000000000010263b50657b90947e69543f291400081d314455697e939a8472604a3e2d20110304182a3b566c81968f79644f3a240f000010263b50657b90927d67523d28120000000000000000000000000000000000000e1920222527292c3539454b5d657b8a9f947e695a4835200a0000000000000a1f334658677c919fa29b877a6d62594f4b3f39362d2321190e0a0400000000000000000000000000000000000000000000000000000d1c2936434a5d6578859a9f927e685e4d3c2b19050000000000000000000005182b3b50657b90a498836e594734180800000000000000000000031628384e63788c9f9a85705b4a36210b0000000000000000000000000000000000000000010f1f344759667c909f9b8574604b4e606e83999f917c665948362513000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000010f1a21232e27241d1204000d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c16000000000000000000081d3144556d8298a8937e69533a2917040000000000000b21364b6075899e927d68523a2a384d63788da3937e69533c2b19050000000000000b21364b6075899e9d87725b4a36210c0000000000000d23384d62788d97816c5739291603011426374b6074869c947f695c4a3e2e1e170b11263c51667b91947f6a54382816020010253a50657a8f927d67523d2812000000000003090c111412100a010000000000050b0d101214192028323f4b5d697f949f8b78624d3828150200000000000c21364c6176889da59b8476645c4c483b372e24221b100c060000000000000000000000000000000000000000000000000000000000000c1825303f4b596275849a9f8d7c665a48352010000000000000000000000b203448596e8398a48f7a65503b2a180000000000000000000000000a2135495b6f849aa28e79634e39291703000000000000000000000000000000000000000f1f32424c6177889e9f8b79635544424c6176889d9e8977625443301c100000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000f1f2c3539433c39302215010d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959f8a755f4a35200a000010263b50657b90a596816b56412c160000000000000000000b20364b6075899ea38d78624d38220d00000000000000091e3245566d839899846f5847333d556a7f949f8b77624c37220d00000000000000091e3245566e8399a58e79634e39240e0000000000000b20354b6074899b86705746321e0a00091d314455657b8c9f8b7a645c4b3f33291e1621364c61768b9a846f5645321e090011263b51667b90917c67513c2712000000000b161e21262a27251e130500000000000000000000060a161e2e3f4b6074879c97816c5645321d09000000000316283954697f94a69d877661584a3e342b221b100d070000000000000000000000000000000000000000000000000000000000000000000008131c2e3b48576175859b9e8978624d3e2d1b070000000000000000011426374c62778b9f9c86715d4b371d0d000000000000000000000000061a2c3d51677c91a697816c5746331e0a0000000000000000000000000000000000000a1a2c3d4f606f8399a2947e695b4a37334758667b8d9f9a8472604a3e2d1b0b00000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000b1b2c3d494e58514d40321c140d22374c62778ca1947f69543f2a140000000000000000000000000001162b40566b80959b8a755f4a35200a000010263b50657b90a596816b56412c1600000000000000000013253650657b90a79b86715a4835200b000000000000000316283851667b919f8b77614c37495b71869c9a846f5947341f0b000000000000000216283852687d92aa957f6a553c2b19060000000000081c3043546f84998a76614b36210c00021527374b5d6a7f949e897a655d4b463932282733465870869b8a75604b36210b0012273c52677c91907b66503b26110000000b1b2832363c3f3c3930231303000000000000000000000003111d3144556a7f949f8a75604b36200b00000000091e32455770869ba28f7a6558473a2d20180d08000000000000000000000000000000000000000000000000000000000000000000000000000000111d2b3946576278899e98836e5c4a36220d0000000000000000081d3144556a7f95a8937e69533f2e1c00000000000000000000000000000e20354b6074889d9e8976614b362111000000000000000000000000000000000002152738495b697e93a19a8472604a3d2d2a3a4c5e6c8196a2947f695c4a39281603000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000417293a495b636d665e4f4330261822374c62778ca1947f69543f2a14000000000000000000000000000014293e54697e868685715b46311c06000010263b50657b90a596816b56412c160000000000000000071c3043546c8197aa95806a553c2b190500000000000000000b20364b6075899e937d68533b4e63788da4927d68533b2a180500000000000000000c22374c61778b9f9b86715a4835200b000000000001142636546a7f94907b6651382816030009192e3f50616d81979e8a7b6c61574b46393c3b3a566b8095907a65503b251000142a3f54697f948e79634e39240e000003162839464b5154524d41302111000000000000000000000000021527374e63788da8907a65503b2510000000000b21364b60768b9f9a85705d4b3a2a1c10050000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b2939485a697e939f8c79644e39240f00000000000000000b20354b6074879d9e8a76614c3621110000000000000000000000000000081d3144556a8095a8937e68533f2e1c08000000000000000000000000000000000c1d31455663798a9f9e8978625443301f1c2f404b6074869c9f8b7a645746321e12000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000a1f3346586379837c69614b43362822374c62778ca1947f69543f2a14000000000000000000000000000012263b4f60697171716756422e1905000010263b50657b90a596816b56412c1600000000000000000b20354a6074889da68e79644f39240f000000000000000000081d3144556d82979a846f5948556a7f959f8a76614c37210d0000000000000000000a1f33475870859aa38d78624d38230d0000000000000e24394e63798e98826d5645321e080000102133434b607281939e8c81766861575451504f50657b9095806b553a291704152838576c81978b76604b36210b0000091e324657616669675f4d3f2e1c08000000000000000000000000092135495b748a9f947f6a553f2a15000000000e24394e63798eab947f6a553f2e1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2b3c4b6074879d96816c563a2a170400000000000006192c3c51667c91a697826c5846331f0a0000000000000000000000000000011527374d62788b9f9c86715d4b37230c0000000000000000000000000000000c1c2f3f4b6074859ba0927d675a48362513111e324556647a8b9f9c8675614b40301d0d0000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000c21364c617687988d7f6c6054453829374c62778ca1947f69543f2a1400000000000000000000000000000c1f32424f545c5c5b564938261300000010263b50657b90a596816b56412c1600000000000000000f243a4f647a8fa69d88735c4a36220d0000000000000000000215273750657b909f8b77624c5b71869c99846f5847331f0a00000000000000000004182a3a54697f94a9937e69543a2a180400000000000c21364a5b71869c8975604b362614010002151c304354606d7e8b9b96887e766e6a6665646568758a9b85705846331f0a1d32455670859a88735745321e0900000c21364b61757c7f7d675d4b37230e000000000000000000000000061a2c3d5d72889d96816c57412c170200000010253b50657a90a5917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1d3144556b81969d87725847331f0a0000000000000c2135495b6f849aa38e79644e3a29170400000000000000000000000000000009203448596e8399a48f7a654f3b2a18040000000000000000000000000004172a3a4b5d6b8096a398826e5f4d3c2b1808021628384a5c697f94a297816d5f4d3b2b180800000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000e24394e6379889c9f9481726056473a374c62778ca1947f69543f2a140000000000000000000000000000021424323b3e46464642382b1b0900000010263b50657b90a596816b56412c1600000000000000061a2c3d566b8095ab97816c573e2d1b07000000000000000000000b20354b6074889d937e695363798ea4927d67523a291704000000000000000000000e23384d63788da49a85705847331f0a0000000000071a2d3d546a7f94927d685443301c0a000001142636434b60697985919b9389847f7c7a7a7b7d818a9e8b76614c36210c20364b60758a98836e583928160300000c22374c61778c948f7b65503a2510000000000000000000000000021528385c72879c98836d58432e180300000011263b50667b90a5907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263750657b90a58c77614c37210c0000000000031628384d63788c9f9b85705c4a361b0b0000000000000000000000000000000005192b3b50667b90a598836d5947341f08000000000000000000000000000e1f334758657b8d9f9d8876614c41301d0d00000a1a2d3d4a6072849a9f917c67594836261401000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000c21364a5b6378879b9f9682746158483c4c62778ca1947f69543f2a1400000000000000000000000000000006141f26293131312e261b0d0000000010263b50657b90a596816b56412c16000000000000000c2135495b72879ca8907b66503b26110000000000000000000000081d3144556c81969a8570596b80959f8a76614b36210c00000000000000000000000c2135495b72879c9f8b77614c37220c0000000000000f22374c61778a9c8773604b39281603000008182630424f5b63707c858e94999491908f9092979a958e7b66503b2616283950657b90937d68533e28130000000a1f34475972879d96816b563e2d1b070000000000000000000000091d32455673899e98826d58432d18030000000f24394f64798ea4917c67513c271200000000000000000000000000010a1012160b08010000000000000000000001080b0b090300000000000000000000000e23394e63788ea38e78634e39230e0000000000091e3245566b8196a7927d68523e2d1b0000000000000000000000000000000000000d20354a6073879c9f8a77614c3626140100000000000000000000000e1e31424c6176889d9f8d7b665847332313000000000f1c3043546278899e9e8978625443301c10000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000071a2d3d4a5a63778599a0988476625a4a4c62778ca1947f69543f2a1400000000000000000000000000000000020c12141c1c1c0b0700000000000010263b50657b90a596816b56412c16000000000000000e23394e63798ea49e8975604b36200b0000000000000000000000011426374f657a8f9f8c776272879c98836e5746321e0a000000000000000000000006192c3c566b8095aa927d68523928160300000000000a1f3347586c8196927d675745321e1100000008141c323d4a4e5e6670797f84888b8c8d8d8b8985807a665e4c38231e3246576d82978b77624d37220d00000004182a3a586d83989c86715c4a36221100000000000000000000000b20364b60758ba796816c56412c17010000000d22374c62778ca6947e69543a291704000000000000000000000002131d25272b201d1509000000000000000008141c20211e160a000000000000000000000c22374c61778ca18f7a654f3a251000000000000b21364b6075899e9e8975604b362110000000000000000000000000000000000000071c304354697f94a9947f6a5443301c080000000000000000000009192c3c4e606e8399a496816c5e4c3a2a170500000000001325364859677c91a09a8473604b3e2d1b0b0000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000f1f2d3c4959617583979f9a8678645c4c62778ca1947f69543f2a14000000000000000000000000000000010f1a21242d2e28201c13080000000010263b50657b90a596816b56412c1600000000000005192b3b556a7f94aa98836e5645311d090000000000000000000000000b20354a6073879d947e69798ea5917c6751392916030000000000000000000000000f253a4f647a8fa699846e5746321e09000000000004182a3a4d62788a9d8775604b3f2e1c0c00000001141f2d36404c515b636a6f73767778777673706b645c4c402f1c29394b61758999846f594834200b0000000012273c51677c91a48e79644f402f1d0d00000000000000000005182a3b50657b90a5937e69533e2914000000000b20354a6074889d99846f5847331f10000000000000000000000a151d30393c40353127190900000000000008182630353632281b100000000000000000000e23384e63788da38f7a644f3a250f00000000071b2d3e52687d92a796816b5645321e09000000000000000000000000000000000000001325364c61778a9f9d8773604b35200e00000000000000000001152737495a687d92a19c8675604b402f1c0c00000000000008182b3b4d5f6d8297a2947f6a5c4a3929160300000000000010263b50657b90a596816b56412c16060606060606060606060606060606060606060606060000000000000000010f1e2c3a4757607381949f9c887a655d62778ca1947f69543f2a14000000000000000000000000000003111f2d363942443d353025180800000010263b50657b90a596816b56412c160000000000000b2034485970869baa927d675238271502000000000000000000000000071c3043546b81969b857080969e8975604b36210b000000000000000000000000000b20354b6074889d9f8a76614b36210c0000000000000c2035485a6a809595806b5d4b3a2a1b0a000000010f1a2130393d4a4e545a576062636261585b554f4a3e2f221e3346576a7f94917c66513b2b1805000000000b20364b6074889d98836e5e4c3b2a1d110600000000000008141f3447596c8197a58e79644e39240f00000000071c3043546c82979f8a76614c3e2d1d110700000000000008101a2832414d52554b44372715010000000001142636434b4b45392e1c130800000000000009182b3b51667b90a78d77624d38220d000000000d22364a5c71859b9f8c78634d3828160200000000000000000000000000000000000000081f3347586d8298a5917c66513c2c190600000000000000000b1d31445563788a9e9f8c7a64564532221100000000000000000d1d30414b6175879d9f8b7a645746321e1200000000000010263b50657b90a596816b56412c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0c0b04000000000000000e1c2a394555606c7f8d9f9d8a7b6762778ca1947f69543f2a14000000000000000000000000000011212f3d4a4e5759534a4336251300000010263b50657b90a596816b56412c160000000000000d22374d62778b9f9f8b76614c37210c00000000000000000000000000001325364f64798ea38d78879d98826d5645321e0900000000000000000000000000081c3043546d8297a9917c675137271502000000000005192b3c4b6075879d8c7b65594739281a0b0000000007121d242d36393f39454b4c4d4d4c463a4039362d201e2f3f4c6176889b8572604a35200d0000000000081d3144556b80959f8d7b6559483b2e211a100e0c0d0e11182630424c6277899e9d8773604a35200b000000000013253650657b90a296806b5c4a3c2f211a1311101011131c232e38454b5f676b605544311d0800000000081c3043546060574b3f302518110c0b090b1019273648596d82979e8874604a35200b0000000417293a4f647a8ea39a846f5b49351a0a000000000000000000000000000000000000000004182a3a4f657a8fa499846f5a4935200a000000000000000b1b2e3f4b6073859ba3957f6a5c4a38281603000000000000000000121e334657647a8c9f9c8675614b41301d0d000000000010263b50657b90a596816b5641313131313131313131313131313131313131313131313131221f180c000000000000000c1b2837444b616a7d8b9e9e8c7d6a778ca1947f69543f2a1400000000000000000000000000081c2f3f4c5b636d6e68605443301c12000010263b50657b90a596816b56412c1600000000000417293a53697e93ab9a846f5847331f0a00000000000000000000000000000822364a5c72879c968096a5907b665138281602000000000000000000000000000114263651667c91a898826d5544311d080000000000000e1e324557657b8c9d877761574538291b0f0100000000090f1a21232a2832363738383633292b24221b1d2b3c4b5d6c8197907b655443301c070000000000021527374c6176889d9d887762594b3f352c2523212223262e36434b606d8297a4947f695443301c0700000000000823384c5d70859a9f8b7a645a4b3f362d2826252527282e373e4b56606c7c8073604b35200b000000091c2f404b607376655d4a43362f2521201d20232d37445462788a9e97826d5443301c070000000a1f3346586d8297a6917c66513c2c19000000000000000000000000000000000000000000000c22374b5d71869c9f8c78624d3828160200000000000417293a4b5d6b8095a39b8573604b3e2d1a0a00000000000000000000031729394b5d6a8095a397826d5f4d3c2b18080000000010263b50657b90a596816b564646464646464646464646464646464646464646464646464637342a1d0c000000000000000a192631434f5f677b899d9f8d7f758ba0947f69543f2a14000000000000000000000000000e23384c5d657982837d72604a402f1c090010263b50657b90a596816b56412c1600000000000a1f3347586f849aa9937e69543a2917040000000000000000000000000000071b2d3e556b80959f899f9e8975604b36200b0000000000000000000000000000000b21364b6075899f9e8975604b36200b000000000000031628394b5d6b80959b8575605646392c1f13070000000000070c0e15161e21222322211f17160f131f2c3c495a657b8d98826d5d4c36251300000000000000091e334657667c919f9c8677655d4e493d3a383737393c3f4b5460697e939f9c8674604b362513000000000000081c2f3f4f647a8d9f9d8878655d4e4a3d3d3c3a3a3c3e3f4b505c64748191937e69533e29140000000f24384c5e6e83887b6960544c403a37353236393e4a55607283999f8c79644e362513000000001325364c61768a9f9d8874604b35200e00000000000000000000000000000000000000000000081b2e3f53687e93a896806b5645321e0900000000000e1f334658657b8c9f9f8a796355443120100000000000000000000000000b1b2e3f4b6073859b9f917c675a483626140100000010263b50657b90a596816b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4c473b2a18040000000000000009141d32414d5d6579879c9f948197a9947f69543f2a140000000000000000000000000114263650657b8b979992826e5e4c38230f0010263b50657b90a596816b56412c1600000000000c21374c61768b9fa48d78624d38230d000000000000000000000000000000001023394e63798ea49fa997826d5544311d08000000000000000000000000000000091e3245566e8499a7907b6550362513000000000000000a1b2e3f4b607283999983746157493d31211a0f070000000000000003090b0d0e0d0c0a060e1920303d495a6278899d8876614c3f2f180800000000000000031729394c5e6c81969f9c877b6d635b55504e4c4c4e51565d65737f8d9f9f8d7b655645311808000000000000001122374b5d6a7f94a09d887b6e645c5753514f505153585d656e7a86979f9d87725d48321d08000011263b51667b909e8b7f72655e55504c4b454b4e535c64738298a196816c5c4a361808000000071c304354697e94a9957f6a5544311d0800000000000000000000000000000000000000000000001021364b6176899e9e8875604b36210f000000000e1e30414c6176879da1937e685b493726140200000000000000000000000000101d31445563788a9e9e8978625443301c1000000010263b50657b90a59680717171717171717171717171717171717171717171717171717171615947341f0b0000000000000000011523303f4b5b6378869a9f979fa9947f69543f2a14000000000000000000000000081c30435471869ca9aea0907b66503b26110010263b50657b90a596816b56412c16000000000316283852677d92aa9c86715a4835200b000000000000000000000000000000000c21364a5b71869cb1a6907b6550372715020000000000000000000000000000000316283853687d92ab97816c5443301c0700000000000000111c3043546074859b998475635b4e41362d221b100b06000000000000000000060c0e19212b35414d5b6378879c8b7a6458473321110000000000000000000b1b2f404a607281959f9d8c8279706a6563616263666b717a84949f9f8d7e685d4c3827150000000000000000081b2e3f50616d82959f9e8c8379726c6866656566686d727b838f9ca39b897b644f3a250f0000000b21364b607482959f94857b726a65616056606368707a8598a09c8675614c3d2d1a000000000b20354a6073879c9f8b77624d3727150100000000000000000000000000000000000000000000000a1e3346576c8197a7927d67523e2d1a07000005192b3c4d5f6d8298a599836f604e3c2c1909000000000000000000000000000001152737495a687e92a19a8473604b3e2e1b07000010263b50657b90a59d8886868686868686868686868686868686868686868686868686868577614c37220c0000000000000000000513212f3d4a5962768498a0b0a9947f69543f2a140000000000000000000000000b20354b60748a9fb4bea9947f6a543f2a150010263b50657b90a596816b56412c1600000000091e3245566e8399aa95806b553c2b190600000000000000000000000000000000071a2d3d556a7f94a89d8874604b35200b00000000000000000000000000000000000c22374c61778b9f9d8874604a35200b00000000000000011426364556617684999a867968604e4a3d362d2320191512100f0f101113161921232c353c484d5f6779879c8d7d675c4b3a2a170300000000000000000000121c3043546072808c9d9f978c857f7a787677787c80868f9aa29b8b7e68604e3f2f1a0a000000000000000000102033434a60727f8d9c9f988e87817d7b7a7a7c7d82879099a19e948578645c4b37220d000000091e3245566072808c9b9b90867f7a76757475787e858e9ba0988677625746331f0f0000000010263b50657b90a499836e5948341909000000000000000000000000000000000000000000000000031729394e63798ea19b85705c4a36210d00000b2035485a677d92a09e8977624c42311e0e0000000000000000000000000000000009192c3c4e606e8399a2947f6a5c4b37220d000010263b50657b90a5a69d9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8c77624d37220d0000000000000000000003111f2d3b4858617482959ea9947f69543f2a14000000000000000000000000081c30435472879cabb0a1917b66513c26110010263b50657b90a596816b56412c16000000000b21364b60758a92928c79634e38230e0000000000000000000000000000000000000f22384d62788a92917f6a5544311d0800000000000000000000000000000000000b1f3447596f8391928f79644f3a240f0000000000000000081828384658617583959c8a7d70635b4e4a3e38352b2a272625242526282b2c35383c494d5a626e7d8a9d8c7d675f4d3e2e1c0c0000000000000000000000001325364354606b7b87919b9f9a948f8d8c8c8e91969ca29a91857968604e423121110000000000000000000002151c304354606a7c87929ca49c9792918f8f9193979da59d94897f74625a4b3e2e1b08000000021628384554606a7a85929b9c958f8c8a898b8e939aa19a9082766259473929170100000004192e44596e8392928c7a644f3b2b1800000000000000000000000000000000000000000000000000000b21364a5b6f8391928e79644e39240f00000d22384d62788992928f7c6659483424140000000000000000000000000000000000000e1e31424c61768792928b79644f3a240f000010263b50657b9092929292929292929292929292929292929292929292929292929292928c78624d37220d0000000000000000000000010f1d2b3a46566072809296947f69543f2a140000000000000000000000000114263651667c8d999a94836f5e4c38240f0010263b50657b909292806b56412c16000000000c21374c61767d7d7c79635b4935210c0000000000000000000000000000000000000b2034485a63797c7c73604b37261401000000000000000000000000000000000004182a3b4b61757c7d7d79634e38230e0000000000000000000a1a293a46576073808d9d9284796e645c534d483c403c3b3a393a3b3e403c494d535b636c7883919b897c675f4d413020100000000000000000000000000008182636434b5d65747c858d92979a9c9e9e9c9a97928d857c73635b4e4231241303000000000000000000000000132536434a5e66737d868e94989b9d9e9e9d9b98948e877f76696055493c2e201000000000000a1a2836434a5c64727d858d93989b9d9e9d9b98938d847b6d6158473b2a1b0b000000000012273c52677d7d7c7a645c4b371d0d0000000000000000000000000000000000000000000000000000071a2d3d4b61757c7d7d79634e39230e00000f24394f647a7d7d7d7a665e4d3b2a180600000000000000000000000000000000000000131f33475862777c7d7d7b65503a251000000d22374c62777d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d75604b36210b000000000000000000000000000d1b29384554606b7d81817b65503b2510000000000000000000000000000824384c5e667b83857f73604b402f1d09000d22374c62777d7d7d79644f39240f000000000a1f33475861676767635b4a3d2c1a0600000000000000000000000000000000000005192b3c495b636766605544311909000000000000000000000000000000000000000c1e32465761676767635b4935210c000000000000000000000c1c29394555606b7c87969a8c83797169625a585552504f4f4f505355595b63697078818b99938578665e4d41302313020000000000000000000000000000081826303f4b55606770787d82858788888785827d78706760554a3d312414060000000000000000000000000008182530404c55606772797f83868889898885837e79726a61584b44372b1e10020000000000000a1825303e4a54606770787e838688898886837e786f655d4c463a2a1d0d0000000000001025394d5f676767645c4b3e2e1b000000000000000000000000000000000000000000000000000000000f1e32465761676767635b4a36210c00000d22364a5c64676767655d4d40301d0d000000000000000000000000000000000000000004172a3a485962676767655d4b37230e00000b1f3448596267676767676767676767676767676767676767676767676767676767676767605745321e0900000000000000000000000000000b1a2736434a5f676c6c655d4b38230e00000000000000000000000000091d30404c5d656e706a60554431221200000b1f34485962676767645c4a36220d0000000004172a3a474c5252524e4a3d2d1f0f00000000000000000000000000000000000000000d1d2c3d494e52514b44372614000000000000000000000000000000000000000003162939464b5152524e493d2c1a0600000000000000000000000c1b2837444b5e6675818b97988e867e78726d6a676564646566686b6e73787e858d9795897e73625a4c40302313050000000000000000000000000000000008141c2e37444b525a62686d7071737372706c67625a514b44372d1f140600000000000000000000000000000008131c2f37444b525c64696e7173747372706d69645c554c473a3127190e00000000000000000008131c2d36434a525b63696d71737472716e68635b504c3f33291b0d000000000000000a1d30414d5252524f4a3e2e20100000000000000000000000000000000000000000000000000000000003162939464b5152524e4a3d2d1a070000071b2d3e4a4f525252504b3f302212000000000000000000000000000000000000000000000c1c2b3b484d525252504b3f2e1c08000005182a3b484c525252525252525252525252525252525252525252525252525252525252524b45392816030000000000000000000000000000000a182530414d525757504b3f2f1c0800000000000000000000000000001222303f4b4f595b544b4437271504000005182a3b484c5252524f4a3e2d1b0700000000000c1c2a33373d3d3d39362d1f0f010000000000000000000000000000000000000000000f1f2c35383d3c35312619090000000000000000000000000000000000000000000b1b2932363c3d3d38352c1f0f000000000000000000000000000a192631404c57616b78828b949b938d87827f7c7b7a797a7b7d8084888d939a92898076696054493c2f2213050000000000000000000000000000000000000111192731353c484d52585b5c5e5e5c5b57524d483c353127190f0100000000000000000000000000000000000012192631353e4a4e54595c5d5e5e5d5b58544f4a3e3733291d150900000000000000000000000010182530353c494d54585c5d5e5d5c58534d493c382f1f170b000000000000000001132330393c3d3d3a362d20100200000000000000000000000000000000000000000000000000000000000b1b2932363c3d3d39362d1f0f0000000010202d36393d3d3d3a372e21120400000000000000000000000000000000000000000000000d1d2b34373d3d3d3a372e2111000000000d1d2a34373d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3632281b0a000000000000000000000000000000000008131c313a3d41413b382f21110000000000000000000000000000000412212e373a44453f3631271909000000000d1d2a34373d3d3d39362d2010000000000000000c171f2128282723211a0f0100000000000000000000000000000000000000000000010f1a21232726201d140900000000000000000000000000000000000000000000000b161e2127282823211a0f01000000000000000000000000000009141d2f39464b5a626c777f868d9398989591908f8e8f9093959996918a857d756b61584b43362c1e120400000000000000000000000000000000000000000009151d202b35383d42454749494745423d38352b201d150900000000000000000000000000000000000000000009141d202d36393f43464849494846433f39362d211f170c02000000000000000000000000000008131c202c35383e434648494846433e38352c231c11040000000000000000000005131d2527282724221b1002000000000000000000000000000000000000000000000000000000000000000b161e2127282823211a0f010000000002101b222428282825231c1103000000000000000000000000000000000000000000000000000d18202227282825231c110300000000000d181f2228282828282828282828282828282828282828282828282828282828282828211e160a0000000000000000000000000000000000000000131e25282c2c25231c11030000000000000000000000000000000003101b22252e302a201d15090000000000000d181f2228282824221b10020000000000000000040a0c1212120e0c070000000000000000000000000000000000000000000000000000060c0e12110b080100000000000000000000000000000000000000000000000000030a0c1212120e0c06000000000000000000000000000000000001121b29323c494d59626971787e83878a8c8e8f8f8e8d8b8885817c766f6860574c473a3026180e00000000000000000000000000000000000000000000000001080e192023282d3032333332302d282320190e080100000000000000000000000000000000000000000000000108101b22242a2e3133343433302e2924221b100a04000000000000000000000000000000000000070e192123292e31333433312e292321190e0900000000000000000000000000010a101212120f0d0700000000000000000000000000000000000000000000000000000000000000000000030a0c1212120e0c070000000000000000070d0f121212100e0800000000000000000000000000000000000000000000000000000000050b0d121212100e080000000000000000050b0d121212121212121212121212121212121212121212121212121212121212120b0903000000000000000000000000000000000000000000010a10121717100e080000000000000000000000000000000000000000080e10191b150b08020000000000000000050b0d1212120f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2b353b484c545b63686e71757778797a79787673706b676158524b4539332a1c140800000000000000000000000000000000000000000000000000000000060b0d13181b1c1e1e1d1b17120d0b060000000000000000000000000000000000000000000000000000000000070d0f14191c1e1f1e1d1b18140f0d070000000000000000000000000000000000000000000000060c0e14181c1e1f1d1c19130e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1f201f12100a0100000000000000000000000000000001080b1c202017150f050000000000000000000000000000000000000000040a0c131612100a00000000000000000000000000000000000000000000030e19202b34373d494e5359546062636465646361575b56514c463a3632281f170c0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e10202020202020202020202020202020202020201f1f1d1b1815100b0903000000000000000000000000000000000000000000000000080e10202020202020202020202020202020202020202020202020202020202020200d0b0500000000000000080e1020202016140e040000000000000000000000000000000000000000000000000000000000000000000002090b0b0b0b0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e2135353527251e13050000000000000000000000000009151d203135352d2a2217090000000000000000000000000000000000000c171f21292b27241d120100000000000000000000000000000000000000000000060d1820222c35383e36434b4d4e4f4f4f4e4b4639413c363329211e160a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f121516171615120f0b08010000000000000000000000000000000000010d171c1f2020181610060000000000000000000000000000070d0f1d20201c0c0a04000000000000000a141a1c20201b0b09030000000000000000000000000000000000000000000000000000000000000000010a10121f202012100a010000000003111c232635353535353535353535353535353535353535353433302d2a25211e160b09030000000000000000000000000000000000000003111c2326353535353535353535353535353535353535353535353535353535353535352220190e0000000003111c23263535352c2921160800000000000000000000000000000000000000000000000000000000000000000a151d202121201d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2933364a4a4a3c393023130100000000000000000000000919273135464a4a423e35271700000000000000000000000000000000010f1c2a33373e403c39301d14090000000000000000000000000000000000000000000000050b0e1a21232926303537393a3a39383632282c27211f170b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b141d2024282a2c2c2c2a2824201d150b08010000000000000000000000000001111f2a313435352d2b231709000000000000000000000002101b222432353531211f170c00000000000d1b272f31353531211e160a00000000000000000000000000000000000000000000000000000000000005131e252834353527251d130500000011212f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494845433f3a363228211e160a04000000000000000000000000000000000011212f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a352b1e0e00000011212f383b4a4a4a413d342616040000000000000000000000000000000000000000000000000000000000000a1a2832363636363127190900000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464c5f605f524d41301e0a0000000000000000000001152737444b5c60605752453519090000000000000000000000000000000f1f2d3a474c5356514d403126190900000000000000000000000000000000000000000000000000060c0e13141c20222324252423211e1616120c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20263135393d40414241403d39353127201c14080100000000000000000000000d1f2f3d46494a4a423f352717060000000000000000000110202d363a474a4a473633291c0c0000000a1b2c3943474a4a463632281b0a00000000000000000000000000000000000000000000000000000000001323313a3d4a4a4a3c393023130100081c2f3f4c50606060606060606060606060606060606060605f5e5d5b5854504b45383632281f180c010000000000000000000000000000081c2f3f4c50606060606060606060606060606060606060606060606060606060606060605e483c2b190500081c2f3f4c5060606056514434210e000000000000000000000000000000000000000000000000000000000002152838454b4b4b4b443727150200000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465761747574675f4d39250e00000000000000000000081d314455607175756c63523727150100000000000000000000000000071a2d3d4a5861686b675f4b44372614010000000000000000000000000000000000000000000000000000000001080b0d0e0f100f0e0c090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111825303537444b4e525556575655524f4b44373530261d140900000000000000000000172a3d4d5a5e60605852453523100000000000000000000f1f2d3e4a4f5d60605c4c463a29170400001427394a565c60605b4b45392816030000000000000000000000000000000000000000000000000000000a1a31414d525f6060524d41301d0a000e23384c5d6575757575757575757575757575757575757575747472706d6a656056524b4539342a1d1509000000000000000000000000000e23384c5d6575757575757575757575757575757575757575757575757575757575757575705a4835200b000e23384c5d657575756b62513d29140000000000000000000000000000000000000000000000000000000000091d324556606060605544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b8a8b7d67523c2b19050000000000000000000b20354b6073858a8a816c5544311d08000000000000000000000000000c21364a5b63767e807c6f605544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2f36434a50556064676a6b6c6b6a67646055514b43363126190e0000000000000000001c31465a6b7475756d64523f2b1601000000000000000e1e2c3d4a5c6472757571615846331f0a00051a2f43566871757570605745321e080000000000000000000000000000000000000000000000000000021528384d5f67747575675f4d3925100010263b50657b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898885827f7a756f6760574c473a3127190e00000000000000000000000010263b50657b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78624d38220d0010263b50657b8a8a8a806b56412c1601000000000000000000000000000000000000000000000000000000000b20364b6075767674604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000317293952677d92a99b85705a4835200b00000000000000000215273750657b90a39e8874604b35200b000000000000000000000000021527384e6379889395918373604b35200b00000000000000000000000000000000000002080b0f12151718171615120e0b0700000000000000000000000000000000000000000000000000000000000000000000030a0c1013141617161413100b0903000000000000000000000000000000000000000000000c1b2932404c5460666e74797d7f8181817f7d79756e6760544b44372c1e1204000000000000001f34495e74898a8a826d58422d18030000000000000d1d2b3c495b647a878a8a8676614c36210c00071c31475c71868a8a8575604b3625130000000000000000000000000000000000000000000000000000091d324556677d8a8a8a7c67523c27120010263b50657b909f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa99f9e9d9a98948f8a847d756b61594b44372c1e12040000000000000000000010263b50657b909f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8d78634d38230e0010263b50657b909f96816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74898b8b826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576e84999f9f8c78624d38220e0000000000000000081d3144556d82979fa7907b6550372715010000000000000000000000091d31455670859aa6aba1937e69543e291400000000000000000000000000000003090c151d2024282b2c2d2d2c2a2723201c130b0801000000000000000000000000000000000000000000000000000000060c0e161e2125282a2b2c2b2a2825211e160d0b050000000000000000000000000000000000000c1d2a39464b5e66737b83898e929596979695928e89837c73676055493c2f2213050000000000001f34495e74899e97826d58422d180300000000000c1c2a3b485a6379899c9d8777625846331f0a000014293e53697e93a3947f695443301c07000000000000000000000000000000000000000000000000000b20364b6075899e9d8874604b36200b0010263b50657b90a59f978c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8d8f92959a9e9f9992898077696055493c2f22130500000000000000000010263b50657b90a59f978d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d79634e39230e0010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a9f8a9e947f69543c2c1906000000000000000b20364b6075899e8a9f97826c5544311d0800000000000000000000000b20364b60758a9fb4bfaf9a846f5a452f1a00000000000000000000000000030b161e212731363a3d40414242413f3c39353025201d1409010000000000000000000000000000000000000000000000080f1a21232932363b3d3f4041403f3d3a3632282220190e070000000000000000000000000000000a1a2a3b4757616d7b8690989e9d979593929395979d9f9991867d73625a4c403023130300000000001f34495e74899e97826d58422d1803000000000a1b293a47596278889d9d88786359483a29170400000c21364c6176899e9c8773604a35200c000000000000000000000000000000000000000000000000061a2c3d52677d92a795806b5544311d080010263b50657b90a597817777777777777777777777777777777778797c80848991989f9e95897e73635a4c4030231304000000000000000010263b50657b90a5978178787878787878787878787878787878787878787878787878787875604b36200b0010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000417293a52677d9298838a9b86715b4935210c0000000000000215273850667b9098828c9e8874604b35200b00000000000000000000000b20354a6072899eb4baab98836e59432e190000000000000000000000000b171e28323637444b4f52555657575655524e4a43363531261d1409000000000000000000000000000000000000000003111c232c353839464b5053545657565453504b453838352b221b1002000000000000000000000000021528384759617582909c9f978e88827f7e7c7e7f82878d959e9c928578665e4d4130211100000000001f34495e74899e97826d58422d18030000000a1a283946586277879c9e897a645a493b2a1c0c0000000a1e3346576c8297a4907b65503b2a180400000000000000000000000000000000000000000000000c2136495b70859a9f8c78624d372715020010263b50657b90a596816b6161616161616161616161616161626364676a6f757b838b979f9e948578665e4d41302212020000000000000010263b50657b90a596816b6363636363636363636363636363636363636363636363636363605645311d090010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586f8499937e83998d78634d38230f000000000000091d3145566d8297917c859b907b65503727150100000000000000000000071c3043546d8297a1a99f8d7b65503b25100000000000000000000002121b293339464b52556064676a6c6d6c6b6a67636054514b4437312619100200000000000000000000000000000000000b161e2e373d494e5657616568696b6c6b6968656056554d483c362e1d150a0000000000000000000000081d32455661778598a09a8c8279736d6a6867686a6d72788089969f9b897c675f4d3f2e1c0c000000001f34495e74899e97826d58422d180300000919273845576176869c9f8b7b655c4a3c2c1d0d00000000031729394e64798ea398836e5947341f0800000000000000000000000000000000000000000000031628384e63798ea299846f5a48351909000010263b50657b90a596816b564c4c4c4c4c4c4c4c4c4c4c4c4c4d4d4f52555660666e78828c9ca39b897c675f4d403020100000000000000010263b50657b90a596816b564d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b45382715020010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a9f8e7a7d92947f6a553d2d1a0700000000000b20364b6075899e8a75819697826c5544311d0800000000000000000000001325364c6175838e908a7e685d4b37230e0000000000000000000a151d3039464c5761676f75797d80818282817f7c79746d6660554b44372d2014060000000000000000000000000000000e1b29323f4b505b636b71767b7d7f8081807f7d7a76706b625a4f4a3e31271a0c000000000000000000081830414b6074859ba09884796d645c575553525355575a636a76808d9e9e8d7d675d4b3a2917040000001f34495e74899e97826d58422d1803000114263745566075849b9f8c7c665d4b3d2d1e0e0000000000000b22364a5c70859b9f8b77614c36251300000000000000000000000000000000000000000000091e3245566c8196a5907b66513c2b1900000010263b50657b90a596816b564137373737373737373737373737383a3d38454b515a626c7a8698a09e8c7d675e4d3e2e1b0b00000000000010263b50657b90a596816b56413838383838383838383838383838383838383838383838383631271a0a000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000417293a52677d929d8873768a9c86715b4a36210c000000000215283851667b9099846f7a909e8874604b35200b0000000000000000000000081e334657616e797b7768604e3f2f1c0800000000000000000a1a2731404d57616a757d84898f92959697979694918e88837b746860554a3e32241608000000000000000000000000000e1e2b39464b5d656f7881868a90929495969594928f8a8680786e645c4b45382a1c0c00000000000000011426364d5f6d8197a0988274635b4e4a3d403e3d3e403c494d58616b7c899e9f8c7b655847331f0e0000001f34495e74899e97826d58422d180307151d3144556074839a9f8d7d685e4c3f2e1f0f00000000000000071b2d3e52687d92a7947f6a5443301c070000000000000000000000000000000000000000000b21364b6075899e9d8773604b35200e00000010263b50657b90a596816b56412c2222222222222222222222222324272731363c484d5c647582969e9f8d7d665c4b39291703000000000010263b50657b90a596816b56412c2323232323232323232323232323232323232323232323201d150a00000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586f849996816c6e83998e79634e39231000000000091d3245566d8298927d6874889e907b6550372715010000000000000000000003172939464c5b636561584e4231211100000000000000000a1a2838454b5e66767f8992999fa89f9d9a999a9b9d9fa79e9890877d73645c4f423426160800000000000000000000000d1d2b3c4857616c7b848c969b9e999492908f909294999e9b958c837a6b6056473a2a1c0c000000000000081c304354677c919f98826e6056493d362d2a2927292a2c353a464c5e667a8a9f9d8876614c3c2b190600001f34495e74899e97826d58422d1806152534444b607382989e947f695f4e402f21110100000000000000001021364b6075899e9d8773604a35200d0000000000000000000000000000000000000000071a2d3d52687d92a7947f6a5443301c0800000010263b50657b90a596816b56412c160c0c0c0c0c0c0c0c0c0c0d0e0f12151d202b353e4a57606d80969f9f8b7a645746331e10000000000010263b50657b90a596816b56412c160e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b09020000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d18070b0e1214151413100d0b0500000000000000000000000000000000000000000000000000000c21364c61768a9f907a65677d9295806a553e2d1b070000000b20364b6075899e8a76616d829797826d5544311d0800000000000000000000000b1b29333d4a4e504c473a3124140300000000000000091928384556606c7c88959ea59d958f8a8785848485888b90979ea59c92857a69605144342616050000000000000000000a1a2b3b485a627581909a9f999088837f7c7b7a7b7d7f8489919a9f998c80746158473a29180800000000000b20354b6073869c9c8775614b45382c211a151312131519202933404c5c677d91a097816c5a4935200800001f34495e74899e97826d58422d181424334351626d81979f96806b614f4131221203000000000000000000091e3245566b8196a5907b66503b2b1805000000000000000000000000000000000000000d21364a5c70859b9f8b77624c3626140100000010263b50657b90a596816b56412c16010000000000000000000000000002090e19202d39454b626c8197a29d8776614c3e2e1b080000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d131c202327292a2a2826221f180d0b05000000000000000000000000000000000000000000000417293a52677d929e88746061768a9c87725c4a36220d00000216283851667c9199846f58667b909e8874604b35200b0000000000000000000000000b171e2d36393b37332a1c140600000000000000011527374556607481919da69e9387807a7572706f6f7073767b8189949ea39b8b7e6b6251443423130000000000000000021528384859627887979f9c8d837b736e6967666566676a6f747c84909d9f9585766158463625130000000006192b3c52677c91a3907b65574633271a0f070000000000060c171f2f3e4d5f6e83989f8b78624d36261401001f34495e74899e97826d58422d1823314250616b80969f97816d6251433223130400000000000000000000021628384e63788c9f99836e5948342008000000000000000000000000000000000000031629394e64798ea398836e59473418080000000010263b50657b90a596816b56412c16010000000000000000000000000000000006101b2832444b6073849aa597826d5c4b3722110000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58422d253035393c3e3f3f3e3b37342a2220180d0300000000000000000000000000000000000000000a1f3346586f849997826d55576e83998e79644e3924100000091e3245566d8398927d68526075899e907b655037271501000000000000000000000000030f1a212326221f180c0000000000000000000b1d314455607483979f9f96887e736b6560565b5a5a5b5761666c757e8998a09f93806b625141311e0e00000000000000091d3245566277879ca098867a6f655d595452504f515255546066707b889aa29b8576615443301c0c0000000b2035485a71869b9b85715e4c3929170a00000000000000000004122030414e63798c9f96816b5443301c08001f34495e74899e97826d58422d2230414e606a7f949e998373604b44342514050000000000000000000000000a2135495b6f849a9f8b77624d3626140106060606060606060606060606060606060a1e3246576c8197a48f7a65503b2a18000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000a161e3144556278899ea08f7a644f3f2e1c0800000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58423636434a4e5153545453504c483b37342b1e170b000000000000000000000000000000000000000c21364c61768a9f907b665152677c9296806b563e2e1b08000b21364b6075899e8a76614c566d829897826d5544311d080000000000000000000000000000070c0e100c0a040000000000000000000b1b2f404b6073839aa19f9381766860544f4b4538444539464b505660697783949d9e96806b604e3c2c1906000000000006192c3c4b6074869ca1988275645c504b3f3f3d3b3a3b3d36434b515e6576849aa39a8472604a3a2a180400000d23384d62788da3927d6752402f1b0b000000000000000000000002122135495b6e83999d8874604b35200b001f34495e74899e97826d58422d2f404d5f687e939d9a84746055443126160700000000000000000000000000061a2c3d51677c91a6957f6a5443301c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c21364b6176899e9c86715d4b371d0d000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000003152737485a687e93a59a85705d4b37230d00000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d583d4a4e54606367696a6968656259554c483b33291b1002000000000000000000000000000000000417293a52687d929e8975604b4b61768a9d87725c4b3722080316283951667c9199846f584751667c919e8874604b35200b00000000000000000000000000000004060a0402000000000000000000031629394c5e6c8196a19f8d7e6c61584b43363632282f2f29333638454b59616e7f949d9e927d685a4935201200000000000c2035495a6a7f95a499837360574a3e372f2a2726252628263035404c586175859ba2937e685847331f0a000013283d53687d929f8b77614c37221100000000000000000000000000061a2c3d53687d93a68e7a644f39240f001f34495e74899e97826d58422e3f4c5e677d8d9f9b8575615645372614080000000000000000000000000000000e20354b6074889d9d8773604b3531313131313131313131313131313131313131312d3e53687d93a8937e69543f2e1c00000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000009192b3c4b6074879ca28f7b65503b2a1805000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d584c5b636c74787c7e7f7f7d7b77716a62594b46392d2012040000000000000000000000000000000a1f3346586f849998836e564546576e83998f7a644f362614091e3245576e8398927d68523a4b60758a9f907b6550372715010000000000000000000000000812191b2019171007000000000000000a1e324657667c919f9f8d7d69604c463a3026201d151a1a171e2128323a474c616a7f94a19f8a78634d402f1c09000000011426364d62788a9f9d8875615545392d231c141211101112141c202f3a475762778a9e9e8977614c37220d0000172d42576c81979c86715947341f0b00000000000000000000000000000f22384d62778da9937e69533e2914001f34495e74899e97826d58423e4b5d667c8c9f9c86776157463828190900000000000000000000000000000000081d3144556a8095a5907b66513c4646464646464646464646464646464646464646464a5c71869b9f8a76614c36211100000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000d1d314455687d92a799836e5947341f0b000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000001f34495e74899e97826d58616d7982888e9193949493908c8680776b61574a3e2f22120300000000000000000000000000000c21364c61768a9f917c6752383952677c9196816c5443301c0b21364b6075899e8a76614c3745566e839997826d5544311d0800000000000000000000000c1a262d30352e2b24180a0000000000031628394b6175889da395806b5f4f4233291c140b09020000030a0c161e2a344350616e8399a69a84705e4c382410000000081c3043546c8196a5927d67574637281b10080000000000000108111c2a394859697f94a7947f6a553b2b1905001b30455a70849a98836e583b2a180400000000000000000000000000000b2034485a74899f96816c57412c17001f34495e74899e97826d583d4a5c657b8b9f9d887862594739291a0a0000000000000000000000000000000000011527374d62788b9f99846f5a5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b647a8ea397826d5846331f0a00000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000011527374b6075899e9f8b77624c37220d000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1609090909080807050200000000000000000000000000000000000000001f34495e74899e97826d6476828c979a959291919294989e9c958a8075645c4c402f2111000000000000000000000000000417293a52687d929f8a76614b36364b61768a9d8874604b352016283951677c9199846f5847333852677c929e8874604b35200b00000000000000000000081a2a3842454a43403628180700000000091e3246576a7f95a69b8574604b41321f170b010000000000000000030c181f33434c6176889da2907b66513e2d1b0700000b20354b6073889e9d8773604a3929190a00000000000000000000000c1b2a3b4b6075899e9c8772594834200b001d32485d72879d96816c57412c1700000000000000000000000000000005192b3c5d72889d98836e59432e19001f34495e74899e97826d58495b647a8a9e9e8979635a483b2a1b0b0000000000000000000000000000000000000009203448596e83999f8c78717171717171717171717171717171717171717171717171718197a38e7a644f3a29170400000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000091e3245566c8197aa937e6853372614010010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1e1e1e1e1e1e1d1c1a17130e0c07000000000000000000000000000000001f34495e74899e97826d7a8797958b85807d7c7b7c7f8388919c9f96877a665e4c3f2e1d0d0000000000000000000000000a1f3346586f849999846e5746323246576e83988f7a655037261e3246576e8398927d68523a29364c61768a9f907b65503727150100000000000000000012263848555b5f595346362410000000000c21364b6175899ea28e796455443123140400000000000000000000000004151f334758677c91a59b85705c4a36220d00000f24394f64798ea796816c5443301b0b000000000000000000000000000d1e3245566e8398a48c77624d37220d001e34495e73899e957f6a55402a15000000000000000000000000000000001c31465b71869b99846f5a442f1a001f34495e74899e97826d585a6379899e9f8a7b645b4a3c2b1d0c000000000000000000000000000000000000000005192b3b50667b90a59d87868686868686868686868686868686868686868686868686868b9f9b85715c4a361c0c0000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000316283850667b90a899846f5544311d080010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56413333333333333332312f2c2824211a0f0c07000000000000000000000000001f34495e74899e978279899b8a7f77706b686766676a6e747c86959f9d8b7c665d4b3b2b190500000000000000000000000c21364c61768a9f927d68523929283951677c9197816c55443121364b61768a9f8a76614c37213346576f849997826d5544311d08000000000000000004192d42556670756e6453402b1702000004182a3a53687d93a79a846f5c4a37271505000000000000000000000000000004172a3a4b6074879da38e79644f39240f000013283d52687d92a6917b665136251300000000000000000000000000000216283853687d92a6907b66513b2611001f344a5f74899f96806b56412b160000000000000000000000000000000417293a5d72879c99846f59442f1a001f34495e74899e97826d696c78879d9f8c7c665d4b3d2d1e0e000000000000000000000000000000000000000000000d20354a6073879da59d9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9fa7927d68533e2d1b000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000b20364b6075899f9e8974604b35200b0010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b564848484848484848484744423e39362d23211a0f0700000000000000000000001f34495e74899e9a84889985786a615856535151525555606674808c9f9f8b7b655948342012000000000000000000000417293a52687d929f8b77614c372121364b6075899e8874604b35293952677c9199846f5847331f293953687d929e8874604b35200b0000000000000000061b30455b70848a826e59432e190400000a1f33475870859aa5907b66503e2d1909000000000000000000000000000000000c1d314455697e93aa96816b563b2b180500152a40556a7f95a38e79644e39240f00000000000000000000000000000010263b50657b90a5937e68533e2913001e33495e73889e98826d583c2b190500000000000000000000000000000a1f33465874899e98826d58432e18001f34495e74899e9b857e7e81899d9f8d7d675e4c3f2e1f0f0000000000000000000000000000000000000000000000071c3043546a7f94a9a29a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8f99b39e8975604b362110000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000091d31455670859aa88e79644e39240f0010263b50657b90a596816b56412c160b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b080100000000000000000010263b50657b90a596816b5e5e5e5e5e5e5e5e5d5d5c5a57534e4a3d39362d211a0f010000000000000000001f34495e74899ea29a998374625a4c473a3d3c3c3d37444b56606a7d8c9f9e8978624d40301d0a0000000000000000000a1f3346586f84999a846f5847331f1e3245576e8398907b6550383346576e8399927d68523a291722374c61778b9f907b65503727150100000000000000071c32475c71879a856f5a45301a0500000c22374c61778b9f9d87725e4c38200f0000000000000000000000000000000000011426374c61768a9f9c8772594834200b00162b41566b8096a18c77624c37220d0000000000000000000000000000000e24394e63798ea3947f6a543f2a15001c31475c71869c9b86715a4834200b00000000000000000000000000000c21364c61768ba895806b56402b16001f34495e74899ea39b9393969e9f8a7d685f4d402f2010010000000000000000000000000000000000000000000000001325364c61778a9f9a84737575757575757575757575757575757575757575747b8fa596816c5745321e09000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000002152738566c8196a8927d68533d28130010263b50657b90a596816b56412c212121212121212121212121212121212121201d1409000000000000000010263b50657b90a596807373737373737373737372716f6c68635b564e4a3d362d1d140900000000000000001f34495e74899ea69a84746056483c332a28272627273138454b5f677d92a09a846f5e4d3924110000000000000000000c21364c61768a9f937e69533a2a1716283951677c9197826d5645364b61768a9f8a76614c37210c1f3347586f859a97826d5544311d0800000000000000081e33485d73889b86715b46311c06000011273c51667c91aa96816c57402f1c01000000000000000000000000000000000000091e3346576f859aa58c77624d37220d00162b40556b8095a18c77624c37220d0000000000000000000000000000000e24394e63798ea3937e69543e291400192e43586e8398a38d78624d392816030000000000000000000000000417293a51667c91a6927d67523d2712001f34495e74899ea0988a8b909d9b8677625a493d2d1f1002000000000000000000000000000000000000000000000000081f3447596d82989f8c7863606060606060606060606060606060606060606d8298a28e79634e39281603000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000013283e53687d93a895806b55402b160010263b50657b90a596816b56413636363636363636363636363636363636363635312619090000000000000010263b50657b90a59f8a88888888888888888888878684817d79736c635b4e4a3d3126190c000000000000001f34495e74899e9e8877625645382b1f1813121112151d2832404d5f6d8298a2917c66513f2e1c08000000000000000417293a52687d929f8c77624d37220d0b21364b6075899e8975604b3952677d9299846f5847331f0a182a3a53697e939e8874604b35200b00000000000000081c30435474899c87725d47321d000000162b40566b8095a7917c67523c27120000000000000000000000000000000000000003172939556b8095a6917c66513c27110014293e54697e93a38d78634e38230e00000000000000000000000000000010253a4f657a8fa4927c67523d27120014293e53697e93a8947f695746321e110200000000000000000000000c1f3346586c8197a38d78624d38220d001f34495e74899e988274767b889d9b8778635b4a3d2e201103000000000000000000000000000000000000000000000004182a3a4f657a8fa496806b564b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4c61768a9f9a85705b49351b0a00000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000011263b51667b90a698826d58432d180010263b50657b90a596816b564b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b443726140100000000000010263b50657b90a5a89f9d9d9d9d9d9d9d9d9d9d9d9c9997938e8881796e635b4b4437291c0c0000000000001f34495e74899e97826d594838281a0e0400000000010a151d30414c6277899e9c86715d4b372308000000000000000a1f3347586f84999b8570594834200b091e3245566e8398907b665146576e8399927d68523a2917040d22374d62778c9f907b6550372715010000000000000b20354b60758a9d88735e482614010000192e44596e8399ab8d78634e38230e000000000000000000000000000000000000000011273c51667c91a6947f6a553f2a150012273c52677c91a6907b66513b261100000000000000000000000000000115273752687d92a9907b65503b2510000e23384e63788da39e8875614b402f2012050000000000000000000e1c2c3d4c6176899e9b86715a4834200b001f34495e74899e97826d616678879c9d8779645c4b3e2e21120400000000000000000000000000000000000000000000000c22374b5d71869c9e8875604b36353535353535353535353535353f54697e93a6917c67523d2c1a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000f24394e64798ea39a846f5a452f1a0010263b50657b90a596816b606060606060606060606060606060606060606060605544311d0800000000000010263b50657b90a59f978d8d8d8d8d8d8d8d8d8d8f9092979ca49d968e83796b6055463a291b0b00000000001f34495e74899e97826d583b2b1a0a000000000000000002131f3447596a8095a4907b6550362513000000000000000c21374c61768a9f947f69543b2b18050316283851667c9198826d564c61768a9f8a76614c37210c000b2034485970859b97826d5544311d080000000000000c21364c61768b9e89745443301c0800001c31465c71869b9f8a75604b36200b00000000000000000000000000000000000000000f24394f64798ea497816c57422d17000d22374d62778ca495806a55402f1b0b00000000000000000000000000091d3144556c81979f8a75604b36210b000c2135495b71869ba695806a5e4c3e3020190d07000000000408131c2b3a495b6a8095a4927d68533c2b1905001f34495e74899e97826d585a6378869c9d887a645c4b3f2f22120400000000000000000000000000000000000000000000081b2e3f53697e93a7927d67523d2c2020202020202020202020374b5d71869c9d8874604b36200f0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000e23384d63788da29b85705b46301b0010263b50657b90a596817576767676767676767676767676767676767676767573604b35200b00000000000010263b50657b90a5978178787878787878787878797b7d82878d969ea1998b80736158463a291808000000001f34495e74899e97826d58422d180000000000000000000005182a3b4d62788da297826d5443301c0700000000000417293a52687d92a48d78634d38230e00000b21364b6075899e89756052677d9299846f5847331f0a0005182b3b54697f949e8974604b35200b0000000000000d22384d62778da88a75604b35200b00001d33485d72879d9e89735645321d0900000000000000000000000000000000000000000d22374d62778ca298836e59432e19000b2034485972879c9c86715e4c3929180a00000000000000000000000b192b3b4b6074889d9a85705745321e0900061a2c3d54697e94a89f8d7c665c4d41342b211a16151416171f25303c495863798a9e9c8774604b35200d00001f34495e74899e97826d5849596277869b9e897a655d4c4030231305000000000000000000000000000000000000000000001021364c6176899e9a85705b4935210b0b0b0b0b0b0b0b172a3a50657a8fa495806b5544311d080000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000d22374d62778ca29b86715c46311c0010263b50657b90a59e968b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7f6a553f2a1500000000000010263b50657b90a596816b6262626262626262636466686c72788189979f9f958476615846362614010000001f34495e74899e97826d58422d1803000000000000000000000d2035495a70859a9e8873604a35200b00000000000a1f3347586f84999c86715a4935200c0000091e3245566d8398917c66586f8499927d68523a29170400000d23384d62788da3907b65503727150100000000000e23384e63788da08b76614b36210c00001e33495e73889e9d88735d3828150200000000000000000000000000000000000000000c21364c61768ba199846f5a442f1a0005182b3b546a7f94a4907b66574636271a10080100000000000208111b29374859687d92a5927d67523928160300000e21364c6176899eab9e897a675f4d483b362d2b2a2a2b2a3336434a5a6276879ca0917d675544311d0800001f34495e74899e97826d583b48596176859a9e8a7b665e4d41312314060000000000000000000000000000000000000000000a1e3346576c8297a28e79634e3828160300000000000a1f3347586d82989f8c78624d372715020000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000d22374c62778ca19c87715c47321c0010263b50657b90a5b0aba0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0947f6a553f2a1500000000000010263b50657b90a596816b564d4d4d4d4d4d4d4d4f5052575a626b7681919ea29a8576615443301c0c0000001f34495e74899e97826d58422d18030000000000000000000006192c3c556a7f94a78e79644e39240f00000000000c21374c61768a9f95806a553c2c190600000216283851667c9198836e61768a9f8a76614c37210c0000000b2035495a71869b97826d5544311d0800000000000f24394e64798ea18c76614c37210c00001f34495e74899e9d88725d48331d0000000000000000000000000000000000000000000c21364b61768ba09a846f5a45301a00000d21364b6176899e9d8776615445382d201c141211101112151d202e3946556277899e9d8774604b35200b0000000a1f3346586b8096a7a79e8a7c6d62594e4a3d413f3f413a474c54606778859ba397826d5f4d3727150100001f34495e74899e97826d58423b4758617584999e8b7c675f4e41312415070000000000000000000000000000000000000000031729394e64798ea396816c5645321e0900000000000c21374c61778a9f99846f5a48351909000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000d23384d62788da29b86705b46311b0010263b50657b90a59f968b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7f6a553f2a1500000000000010263b50657b90a596816b5641383838383838383a3b3d3c484d58616c7c8a9ea3998372604b3b2a180400001f34495e74899e97826d58422d1803000000000000000000000011263b50667b90a5937e68533e2813000000000417293a52687d92a58e79634e39240e000000000b20364b6075899e8a76687d9299846f5847331f0a00000006192b3c556a7f949e8974604b35200b00000000000f253a4f647a8fa28c77624d37220d00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000a1e334657687d92a098827260564a3e35302627262526272731363f4b57617383999e917c665544311d080000000417293a4c6176899e9e898a8d82786b635b595654545658586167737d899ba1998474604b413019090000001f34495e74899e97826d58422a3a4757617483989f8c7d685f4e423225160000000000000000000000000000000000000000000b21364a5c70859b9e8975604b36210f00000000081c2e3f54697f94a5907b66513c2b1900000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000e23394e63788ea39a85705a45301b0010263b50657b90a596817576767676767676767676767676767676767676767674604b36200b00000000000010263b50657b90a596816b56412c2323232323232426282b353a464c5e667b8b9fa1947e695947341f0900001f34495e74899e97826d58422d180300000000000000000000000c22374c61778ca796816c57412c17000000000a1f3347586f84999c87725b4a36210c00000000091d3245566d8298927c6f8499927d68523a291704000000000e23394e63798ea4907b6650372715010000000010253a4f657a8fa28d78624d38230d00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000031729394e606d8298a0988274645c504b43363c3b3a3b3d37444b515d657583999f96806b5e4c37271501000000000b1f334758697f949f8a808a978a8179736e6b6a696b6d71777d86919e9f958376615645322313000000001f34495e74899e97826d58422d29394656607482989f8c7d69604f43331c130800000000000000000000000000000000000000071a2d3e52687d92a7927d67523d2d1a070000000e23374b5d72879c9d8773604b35200e00000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000010253a50657a8fa599836e59442e190010263b50657b90a596816b616161616161616161616161616161616161616161605544311d0800000000000010263b50657b90a596816b56412c160d0d0d0d0e0f111319202933404d5d677d91a19e8a77614c37271502001f34495e74899e97826d58422d180300000000000000000000000a1f33475873899e99836f59442f1a000000000c21374c61768a9f96806b563d2d1a07000000000215283851667b919983768b9f8a76614c37210c00000000000c2136495b72879c97826d5544311d080000000010253a50657a8fa28d78634d38230e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000b1b31424b607482969f98857a6d6560545552504f5052555560666e7b86999f948172604b402f1909000000000004172a3a4b6074869c9b867a8692968e8883807f7f8082868b929c9f988c807261584738281505000000001f34495e74899e97826d58422d1b29384556607382979f8d7e6a61504430251808000000000000000000000000000000000000000f21364b6075899e9b85705b4a36210a000004182a3b50657b90a4947f6a5443301c0800000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000012283d52677d92a796816c56412c170010263b50657b90a596816b564b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b443727150200000000000010263b50657b90a596816b56412c160100000000000000050c171f303f4d5f6f8499a896806b5544311d08001f34495e74899e97826d58422d1803000000000000000000000004182a3a5d72879d9b85715b46311c00000004172a3a53687d92a68f7a644f3a250f0000000000000b20364b6075899e897d9299846f5847331f0a0000000000061a2c3d556b80959e8974604b35200b0000000010253b50657a90a38e78634e39230e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000000131d3145566073808c9b9b8c827b746e6a67666566676b6e757b838f9c9a8b7f6c605443302212000000000000000c1d314455657a8d9f9580737d8791989996949496979b9f9b958c83796b6054473a291a0a00000000001f34495e74899e97826d58422d181a28384555607281969f937f6b624a4336261809000000000000000000000000000000000000091e3245566b8196a38e79634e39281603000b1f3447596e83989f8b77614c3626140100000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000152a40556a7f95a9937e69543e29140010263b50657b90a596816b56413636363636363636363636363636363636363636312719090000000000000010263b50657b90a596816b56412c160100000000000000000004122130414e63798c9f9e8874604b36200b001f34495e74899e97826d58422d18030000000000000000000000001c31465c71869b9c86725c47321d0000000a1f3347586f84999d8873604a35200b000000000000091d3145566d82989b869b927d68533a2917040000000000000f24394f64798ea5907b66503727150100000010263b50657b90a38e78634e39230e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000000021527384555606b7a858f98989088837f7c7b7a7b7c8084899099978e84796a614b433626140400000000000000021527374b5d6c81969f8d7b67747c82888c8e90908f8d8a8580796e635b4b4336291c0c0000000000001f34495e74899e97826d58422d180a1a27374454606c80959d94806c6054433627190a0000000000000000000000000000000000021628384e63788c9f96816c5745321e09001325364c61778a9f98836e59473418080000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000071a2d3d596e8499ab907b65503b25100010263b50657b90a596816b56412c212121212121212121212121212121212121201d1509000000000000000010263b50657b90a596816b56412c16010000000000000000000003132135495b6f8499a68f7a65503a2510001f34495e74899e97826d58422d18030000000000000000000000051b30455a70859a9d88725d48331d0000000c21374c61768a9f97816c5443301c070000000000000215273851667b90a39b9f8a76614c37210c000000000000000d22364a5c72879d97826d5544311d0800000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000000000a1a2737444b5c64707a83899a9d999591908f909295999e998882796f635b4f433026180800000000000000000009192e3f4b6074869c9e887762666d7376797a7b7a7875706a635b4e493d3026180c000000000000001f34495e74899e97826d58422d18000a192636434a626b7f939d95817260544437281a0a00000000000000000000000000000000000a2135495b6f849a9e8975604b362110071c3043546a7f94a48f7a65503b2a18000000000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000c21364a5b73889d9f8b76614b36210c0010263b50657b90a596816b56412c160c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b080200000000000000000010263b50657b90a596816b56412c16010000000000000000000000061a2c3d53687e93a895806a55402b15001f34495e74899e97826d58422d18030000000000000000000000061b30455b70859a9d87725d48321d00000316283853687d92a7907b655036251300000000000000000b20364b6075899eaf99846f5847331f0a00000000000000071b2d3e566b81969e8974604b35200b00000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000000000a1926313e4b4f5d657079859aa69e9b99989a9b9ea79984786f645c4e493d321c14080000000000000000000000101d32455663798a9f9a84736058586164656665636056554e493d352c1c140800000000000000001f34495e74899e97826d58422d180300091825304451616a7f939f9681726055453828180800000000000000000000000000000000061a2c3d51677c91a6927d68533e2d1b0b20354a6073879c9c86715d4b371d0c000000000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000e24394e63798ea69c86715746331e0a0010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000f24394e63798ea398836e59432e19001f34495e74899e97826d58422d18030000000000000000000000061b31465b70869b9c86715c47321c0000091e3245566f84999b8974604b35200b0000000000000000091d3145566d8297a4927d68533a291704000000000000000010253a4f647a8f9b907b66503b261100000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000000000b1b2a3b4757616d7a858e9a948e888684838486898f95998c83796b605545382819090000000000000000000000021528384a5b687e93a095806b5e4c4c4f50504f4d4b453838352c211a0f010000000000000000001f34495e74899e97826d58422d1803000008131c34435061697e8d9f97827360564536251300000000000000000000000000000000000e20354b6074889d9b85705c4a3622182a3b50657b90a5937e69543f2e1c00000000000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000081c2e3f546a7f94a995806b55392917030010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000c21364b61768baa9b85705b46301b001f34495e74899e97826d58422d1803000000000000000000000004172a3a5d72879c9b85705b46301b00000b21364b60748586867d675544311d080000000000000000021527384f647a898a8675614b36210c0000000000000000000d22374b5d6b8086867f6a543f2a1500000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000000000317293947596275828f9a94887f7973716f6e6f71747a808996998c80736056453727150200000000000000000000000a1a2d3d4e606e82989f8d7c665a49383b3b3a3836312723211a0f0600000000000000000000001f34495e74899e97826d58422d180300000000162533424f60687d8c99988374605443301c0700000000000000000000000000000000081d3144556a8095a38e79644e39291f3448596e83989f8a76614c36211100000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000923374b5d71869ca48e79644f39240f000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000091e324657758a9f9c86715c47311c001f34495e74899e97826d58422d180300000000000000000000000a1f33475874899e99836e59442f190000091e32455660717171675f4d372715010000000000000000000a22364a5c64747571615746331e0a000000000000000000081b2e3f50626b71716a614f3c271300000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000000000a1e334657627786989e8b7f756a645c5b5a585a5460646b76808d9f958374605544311d0e0000000000000000000000000f1f31424b6175879c9e897862564532262523201d150e0c06000000000000000000000000001f34495e74899e97826d58422d18030000000007152432424e5f677b8486858075604a35200b00000000000000000000000000000000011527374d62788b9f97816c57463326364c62778b9f97826d5846331f0a00000000000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000009192e3f50657a8fa49c86715c4a36220d000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000b20364b60758baa9b86715c46311c001f34495e74899e97826d58422d180300000000000000000000000c21374c61768ca796816c57412c17000003162838454b5b5c5b514d4130190900000000000000000000071b2d3e4a4f5e605c4b4639291703000000000000000000001020334450555c5c544f4332200d00000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000000081b2e3e4b6175859b9e887b6960564e4a3d444336434b4f58616b7c8a9f998373604b3c2c1906000000000000000000000001141e334657647a8b9f9b8574604b41301f0f0b0902000000000000000000000000000000001f34495e74899e97826d58422d1803000000000006142431414d5d656e71716b605443301c07000000000000000000000000000000000009203448596e83999e8976614b363043546a7f94a38e79644f3a29170400000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000021527374b5d6f8399a6937e68533e2d1b07000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000d22374d62778ca29a85705b45301b001f34495e74899e97826d58422d1803000000000000000000000010253a4f657a8fa4937e69543e29140000000a1a2832364646463c3930231200000000000000000000000010202d3639494a473633291b0b0000000000000000000000021626333d4046463f3c3225150300000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000000000d22374b5c6c81979f8b7a655d4b4538362d2f2e2630353a464c5e667c919e957f6a5a49352009000000000000000000000000031729394a5c697e93a197816c5f4d3d2c1b0b0000000000000000000000000000000000001f34495e74899e97826d58422d1803000000000000061323303f4b50595c5c564a4336251300000000000000000000000000000000000005192b3b50667b90a5937e68533e354b6073879d9b85715c4a361c0c0000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000003111d314455647a8fa19e8875604b36211000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000f24394f64798ea498836e58432e19001f34495e74899e97826d58422d18030000000000000000000004172a3a54697e94aa8f7a65503a2510000000000a161e2131313127241d120400000000000000000000000002101b2224343532211e170b00000000000000000000000000081621282b31312a272015070000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000417293a4f647a8d9f937e695c4b3f3228211a1a19141c202933404d5e6c81969f8b78634d372715010000000000000000000000000b1b2d3e4f606e83999f927d675b493929160300000000000000000000000000000000001f34495e74899e97826d58422d1803000000000000000513212e373b444646413530251808000000000000000000000000000000000000000d20354a6073879d9b86715c4a3b50667b90a5927d68533e2d1b000000000000000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000002122130404b6074869ba4937e685745321e0900000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000005192b3c54697e93a995806a55402b15001f34495e74899e97826d5842312111020000000000000000000a1f3347586f84999f8a76604b36210b000000000003090b1c1c1c12100a00000000000000000000000000000000070d0f1f201c0c0a03000000000000000000000000000000040d14161c1c15130d03000000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000a1f3347586e83989d8774604b3e2e1e160a07000001080b171f30404c61778a9e96816c5544311d0800000000000000000000000000102032424c6176879d9e8a79635746321e1402000000000000000000000000000000001f34495e74899e97826d58422d1803000000000000000003111c23252f31312c201c13080000000000000000000000000000000000000000071c304354697f94a38f7a644f48596e83999e8975604b362110000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000009151d303f4d5f6b8095a39c8673604b3928160300000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000002102035485a6f8499a8907b66503b2611001f34495e74899e9a846f604e3f2f211203000000000000000417293a4c61778a9f9a846f5745321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000c21374c61768b9f947f6a5544312010020000000000000004121f3347586c81979e8974604b35200b0000000000000000000000000002141f334658647a8b9f9c8675614b42312010000000000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000080e10191c1c160b0700000000000000000000000000000000000000000000001325364c61778a9f97826d584d62778b9f96816c5745321e09000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000020911192731404c5d677d8d9f9f8b7a645544311b0a0000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000712202f3f4d62788a9f9e8975604b36210b001f34495e74899ea2937e685d4c3f301e170b05000000040b171f334658697f94a8937e68533928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d141616160c0a040000000000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000011263b51667b90a88e79644e3727150200000000000000000004172a3a51667c91a78f79644f3a240f00000000000000000000000000000417293a4b5c697f94a198826e604e3e2e1c0c0000000000000000000000000000001f34495e74899e97826d58422d1803000000000000000000000000000407070100000000000000000000000000000000000000000000000000081f3347586d82989f8a7661546a7f95a28d79634e39281603000000000000000000000000000000000010263b50657b90a596816b56412c16050505050505050505050001080b0e151d202f37444b5e667b8a9f9f947f6a5c4a372715000000000010263b50657b90a596816b56412c16060606060606060606060606060606060606060606060000000000000010263b50657b90a596816b56412c1603030303030002090b0f1a21303e4c5d6d8297a997826d5645321e09001f34495e74899ea1998b7b655d4d4033291f18151415171f2933444c6176889e9e8976614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192022292b2c2b221f180c00000000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000000152b40556a80959e8974604a35200b00000000000000000000000c22374c61778ca9937e69533e29140000000000000000000000000000000c1c2e3e4a60728399a0937e695c4a3a2a180800000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4f657a8fa4937e696074879d9a85705b49351b0a00000000000000000000000000000000000010263b50657b90a596816b56412c1a1a1a1a1a1a1a1a1a1a1a1b141d20232731363f4b55606b7c8b9fa197816d614f3e2d1909000000000010263b50657b90a596816b56412c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0c0b040000000010263b50657b90a596816b56412c1818181818191a151d20242d36414d5c657b8c9f9f8c79634e38281603001f34495e74899e99848c8a7b675f4c4639342a2a292a2a3339464c626d8298a695806b5746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d2b34373e41414137332a1c0c000000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000002172d42576c82979c87725443301c0700000000000000000000000a1f334758748a9f95806a55402b1500000000000000000000000000000000101c3043546176889d9f8b7a64584736251300000000000000000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374b5d71869c9c8671667b90a5917c67523d2c1a0000000000000000000000000000000000000010263b50657b90a596816b56412f2f2f2f2f2f2f2f2f2f2f2f302631353838454b515d6574808d9fa0978373604b4332201000000000000010263b50657b90a596816b5641313131313131313131313131313131313131313131313131221f180c00000010263b50657b90a596816b56412e2e2e2e2e2e2e2f2832363a3d4a4e5f677a8a9ea496816c5b49351a0a00001f34495e74899e927e7f948b7c6c61574c483b3f3e403a474c57616c8096a09d8876614c39291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000312222f3b484d535656564c473a2a18040000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000003192e43586e83989b86705b36251300000000000000000000000004182a3a5e73889e96816c57412c1702000000000000000000000000000000001325364758657b8c9f9d8776615443301c11000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f53697e93a48f7a6e84999d8874604b36200f0000000000000000000000000000000000000010263b50657b90a596816b56444444444444444444444444444537444b4e52566066707b86959f9f9382736055443125150200000000000010263b50657b90a596816b564646464646464646464646464646464646464646464646464637342a1d0c000010263b50657b90a596816b5643434343434343434438454b4f535b636e7d899ea59c8675614b3d2c1a0000001f34495e74899e917c6b809591817669625957555355575861687681969e9f8c7b655746331b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111212f404c5962696b6b6b615847331f0a0000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000003182d43586d82989c87725c3d2d1a0700000000000000000000000a1f334758748a9f96816b56412c16010000000000000000000000000000000008182a3a4b5d6a7f95a2998372604a3f2f1d0d0000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000001021364c6176899e9781778b9f95806b5544311d080000000000000000000000000000000000000010263b50657b90a596816b5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5b556063686d757c85909ca39b8b7e6d605544372715070000000000000010263b50657b90a596816b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4c473b2a18040010263b50657b90a596816b5858585858585858585a5b56606469707983919ea39b8778625746321f0f0000001f34495e74899e907a656b7f8d97887f77706c6a696a6c70767d88979f9f8d7e685d4b39291700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f202e3f4c5e66787e80818077614c37220c0000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000001162b40566b80959e89745c4a36210a00000000000000000000000c21374c61768ca9947e69543f29140000000000000000000000000000000000000c1c2e3f4b6072849aa1947f6a5d4b3b2b190900000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576c82979e887e939f8c78624d372715020000000000000000000000000000000000000010263b50657b90a596806f6f6f6f6f6f6f6f6f6f6f6f6f6f6f70707275787d8289919ba29c92857a69604b4437271909000000000000000010263b50657b90a59680717171717171717171717171717171717171717171717171717171615947341f0b0010263b50657b90a596806d6d6d6d6d6d6d6d6d6e6f707275797e858e98a09f958577625a48392816010000001f34495e74899e8e7964616a7c8897948b86817f7e7f81858b939da29a8b7d68604e3f2f1b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2d3e4b5d667c899396937e685847331f0a0000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000012273d52677c92a88e79644e3928160300000000000000000005182b3b51667c91a8907b65503b251000000000000000000000000000000000000000111c3043546277889d9f8c7b65594837271501000000000000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729394e64798ea39d889d99846f5a48351909000000000000000000000000000000000000000010263b50657b90a59d878484848484848484848484848484848586878a8d92979e9f9991877d72645c4f423126190900000000000000000010263b50657b90a59d8886868686868686868686868686868686868686868686868686868577614c37220c0010263b50657b90a59c86828383838383838383838485878a8f939ba39e968a80746259483c2b1b0b000000001f34495e74899b8d78624d5e6677828b969b97949395979a9f9e98908579675f4e42312111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2c3c4a5c657b8b9e9e947f6a604e3a2a18040000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000d22374c62778b9f947f6a5745321e1305000000000000000614203448596d82979f8975604b36210b00000000000000000000000000000000000000011426364859657b8d9f9e8877625544311d12000000000000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364a5c70859ba69da5907b66513c2b1900000000000000000000000000000000000000000010263b50657b90a5a59d9999999999999999999999999999999a9b9d9f9f9c97928b847c736860544a3e321d14090000000000000000000010263b50657b90a5a69d9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8c77624d37220d0010263b50657b90a5a49c98989898989898989898999b9c9f9e9b96908981786a6056483b2b1e0e00000000001b30455b708486816d5a494c59616d7880878c90929392918e89837b70635b4d41312413030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3b495b647a899e9f96806b614f42311c0c000000000010263b50657b90a38e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000b203448596f849a9d8875604b403020190d0b0500050b0f1a2132424d62778a9f98826d5645321e09000000000000000000000000000000000000000008182a3b4c5d6b8095a29a8473604b40301d090000000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e52687d92a7a79d8773604b35200e00000000000000000000000000000000000000000010263b50657b9092929292929292929292929292929292929291908f8d8a86827d766f6760544a43362d201401000000000000000000000010263b50657b9092929292929292929292929292929292929292929292929292929292928c78624d37220d0010263b50657b909292929292929292929292929291908e8c8985817b746b625a4b45382b1d0e000000000000192d42556670716d63523c3b474c5b636b72777b7d7e7d7c78746e655d4e493d302313060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2a3a48596379889ea097816c62514332241400000000000010263b50657b90928e79634e39240e00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000005182b3b4f657a8fa0957f6a5e4d41342b221f181c1920222c35434f606d82979f8b79634e382816030000000000000000000000000000000000000000000d1d2f3f4b6073849aa296806b5e4c39240f0000000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f21364b6075899292927f6a5443301c080000000000000000000000000000000000000000000d22374c62777d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7b7a7775716c676158514b433630251810020000000000000000000000000d22374c62777d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d75604b36210b000d22374c62777d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7b797774706b6660554d483c31271a0d0000000000000012263848555b5c575245352a343d494e5659626668696866636054504c3f362c1f13050000000000000000000000000000000000000000000000000000000000000000000000000001010000000000000000000a1a293947586277879da1988272604b44342515060000000000000d22374c62777d7d7d76614c36210c00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000000000d22374b5d6e83989f8d7c675f4d483c37342a312b34383d494e61697e939f96816c5b49351a0a0000000000000000000000000000000000000000000000111d3144556278879092917c66513c27110000000000000000001f34495e74899c97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556657b7d7d7d76614c362614010000000000000000000000000000000000000000000b1f344859626767676767676767676767676767676767676767666562605557524c473a3530261c130800000000000000000000000000000b1f3448596267676767676767676767676767676767676767676767676767676767676767605745321e09000b1f34485962676767676767676767676767676766666462605456504b4437342b1d150a0000000000000000081a2a38424546423f3527181f2c35383b484d50525353514e4b4336382f211a0f010000000000000000000000000000000000000000000000000000000000000001080b0e11141516161514130f0c0a04000919283846576176869ca299837360544330261607000000000000000b1f34485962676767615846331f0a00001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a00000000081b2e3f4c6277879d9e8a7d6d625a524c473b473c484d525b636e7f8c9f9c8676614c3d2c1a00000000000000000000000000000000000000000000000001142637485962757b7d7d7c66513b26110000000000000000001b30465b70848786806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384b5d656767676158473318080000000000000000000000000000000000000000000005182a3b484c5252525252525252525252525252525252525251514f4d4b44373d37332a201c14080000000000000000000000000000000005182a3b484c525252525252525252525252525252525252525252525252525252525252524b45392816030005182a3b484c525252525252525252525252525251504f4d4a43363b36312720190d02000000000000000000000c1a262d30312d2a2317040e1a21232b34373b3d3e3d3c39353026231c1106000000000000000000000000000000000000000000000000000000000000060c0e151d202326292a2b2c2b2a2825221f181114263745566175859ba39a847460554436261408000000000000000005182a3b484c5252524c463a29170400001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000000000010203448596379899c9e9182786d6762595d5c5d5a62686e7983949f9b8778625846331f0f0000000000000000000000000000000000000000000000000009192b3b485761666767665e4c38240f000000000000000000192e4255667071716b62503d28140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2e3f4b505252524c473a2a170000000000000000000000000000000000000000000000000d1d2a34373d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3b3a3835312628211f170c08010000000000000000000000000000000000000d1d2a34373d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3632281b0a0000000d1d2a34373d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3b393735302526201d150905000000000000000000000000000812191b1c18160f060000060c0e182022262829282723201c140808000000000000000000000000000000000000000000000000000000000001080e192123273135393c3e404041403f3d3a37332a27213144556074849aa39b857661564537271808000000000000000000000d1d2a34373d3d3d3633291b0b0000001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a000000000005182b3b495b637986979f978b827c777472717274777d838c999f9585786259483a29170100000000000000000000000000000000000000000000000000000d1d2b39464b505252514c402f1d0900000000000000000013263848555b5c5c55504433210d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e373a3d3d3d37332a1c0c000000000000000000000000000000000000000000000000000d181f222828282828282828282828282828282828282727262522201d14120c0a04000000000000000000000000000000000000000000000d181f2228282828282828282828282828282828282828282828282828282828282828211e160a00000000000d181f22282828282828282828282828282727262422201c13110b08020000000000000000000000000000000000040607020100000000000000050b0d11131413110e0b080100000000000000000000000000000000000000000000000000000000000009151d202c353837444b4e51535556565554524f4c473a3c36444b60738399a29c8677615846382819090000000000000000000000000d181f22282828211f170b000000001f34495e74899e9d88725d48331d0800000000000000000000000000000000000000000c21364b61768ba09a856f5a45301a0000000000000d1d2c3d4a5b6375828c979f98928c89878688898d92999e968a8074625a483b2b1b0b000000000000000000000000000000000000000000000000000000000d1b2933363b3d3d3b382f221200000000000000000000091a2a3842464747403d332616040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c2325282828211f170c000000000000000000000000000000000000000000000000000000050b0d121212121212121212121212121212121212121211100d0b0801000000000000000000000000000000000000000000000000000000050b0d121212121212121212121212121212121212121212121212121212121212120b090300000000000000050b0d121212121212121212121212121211110f0d0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000613192731353c494d5555606366696a6b6b6a696864615857514b51626d8197a19d87786259473a291a0a0000000000000000000000000000050b0d1212120c0a0400000000001f34495e7489929287725d48331d0800000000000000000000000000000000000000000c21364b61768b9292846f5a45301a000000000000000f1f2d3d4a57616d78818a91969a9c9d9c9d9c9995908980776b6055483c2b1d0d0000000000000000000000000000000000000000000000000000000000000b171e2126282826241d120400000000000000000000000c1a262e3032322b2821160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e101212120c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e10161613110b020000000000000000000000000000000000010a101216160f0d0700000000000000000000000000000000000e19203037444b525b636a6f75787b7e7f8081807f7d7a77726c6660616b80969f9e8879635a483b2a1b0b000000000000000000000000000000000000000000000000000000000012273c52677c7d7d7c66513c27110000000000000000000000000000000000000000000b20354b60737d7d7d7b65503b251000000000000000010f1f2d39464b5a636c767c8185878889888784807b756b62594b44372b1e0e0000000000000000000000000000000000000000000000000000000000000000030a0c111212110f0900000000000000000000000000000913191b1c1c16140d0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d171c1f202018161006000000000000000000000000000000040d141620202020090200000000000000000000000000000000070b0f1315171715120e0b070000000000000000090b030100000000000000000000000000000000000002090b1014161614110c0a03000000000000000000000000000003111c23252c2c28261f140600000000000000000000000000000005131e25272c2c24221b10020000000000000000000000000004121e2c35414d55606770787f85898e91939595969594928f8c87827c756f7f949e9e897a645b493c2b1d0c0000000000000000000000000000050b0d0b0902000000000000000000001025394d5f676767665e4c39240f000000000000000000000000000000000000000000081d31445560676767655d4b38230e0000000000000000010f1b28323c494d5761676b6f72737473726f6b6660564c483b3127190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d171c1f2020181610060000000000000000000000010d161c1e2020181610060000000000000000000000000610161820201d1b150b00000001111f2a313435352d2b23170900000000000000000000000000081621282b353535351e160a0000000000000000000000000508131c2024282a2c2c2b2824201c1308050000070c0e1e20181610060000000000000000000000000000000a151d20252a2c2c2a27211e160b0700000000000000000000000011212e373a41413e3a312414050000000000000000000000000004132330393d414139362d2010000000000000000000000000061422303c494d5f67747d858d949a9fa89f9d9b9a9a9b9c9ea8a59c97918984949d9f8a7b655c4a3d2c1d0d00000000000000000000000000000d182022201d150a0000000000000000000a1d30414d525252514c40301d0900000000000000000000000000000000000000000001152737444b525252504b3f2f1c08000000000000000000000b161e2c3539464b51565a5d5e5e5e5c5a56514b4538342b1d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c111516171614100c0a0400000000000000000a0b0000000000000000000000000000000000040a0c11141617161513100b080100000000000000000000000001111f2a313435352d2b23170900000000000000000001111e2a313435352e2b23180a000000000000000000000a18232b2e35353330281d0f00000d1f2f3d46494a4a423f352717060000000000000000000000041626333d404a4a4a4a32281a0a000000000000000000000d1820253035393e3f4141403d3935302520190d0f1a212434352d2b23170900000000000000000000000008131c2731363b3f41413f3c363229211a0f02000000000000000000081c2e3f4b505656534e4231231300000000000000000000000000122230414d5256564f4a3e2d1b070000000000000000000007152532404c5a626f7d87929ba39f99938e8b888685858687898c91969ca49e99a19f8b7b665d4b3e2d1f0e00000000000000000000000000000d1d2b34373631271a0a000000000000000001122330393c3d3d3c39302212000000000000000000000000000000000000000000000009192731353d3d3d3b382f2111000000000000000000000000030e19202932363c4145474949494744403b36322820180d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c181f22262a2c2c2b2926211f170c090300010a10121f200d0b06000000000000000000000002090c171f2126292b2c2c2a2825201d150908000000000000000000000d1f2f3d46494a4a423f3527170600000000000000000d1e2f3c45494a4a433f352818060000000000000000061828353f434a4a48443a2d1d0b00172a3d4d5a5e606058524535231000000000000000000000000d21334450556060605e45382816020000000000000000141d2b3436434a4f5355565655524e4a4336342b1e1f2d3639494a423f35271706000000000000000000000818253038454b5054565654514b4639362d1d150a00000000000000000e23374b5d656b6b68604e41311a0a000000000000000000000009192f404d5f676b6b645c4a36220d00000000000000000006152533434f5e667884929da59d938b847e79767371706f707174777b80878f989faa9f8b7e726158483b2c1e0e00000000000000000000000005182b3b484c4b4538271808000000000000000005121d2527282827241d120400000000000000000000000000000000000000000000000009151d2028282825231c11030000000000000000000000000000060b161e21272c3032333433322f2b26201d150a050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101b222a33373c3f4141403e3b37332a211e160a131e252734352320190e0000000000000000010a151d202a33373b3e4041413f3e3a353127231c11060000000000000000172a3d4d5a5e60605852453523100000000000000002162a3c4d595e6060585346352310000000000000000010233546535860605d584b3a2815001c31465a6b7475756d64523f2b16010000000000000000000014283d50626b757575705645321e0900000000000008131c323b484c546064686a6c6c6a676360544d483c332d3d4a4e5e6058524535231000000000000000000008182636434a566065696b6b696661574e4a3d31271a0a0000000000000010253a50657b80817e685f4d38281502000000000000000000011426374c5e677d81807a644f39240f000000000000000003132433435061697c899aa29e93877e766f696460565c5b5a5b5c5962666b727a828b99a19f9383766259493c2c1c0c00000000000000000000000b2034485962605645362513000000000000000000010a10121212110f0900000000000000000000000000000000000000000000000000000001080b121212100e08000000000000000000000000000000000000030a0c12161a1d1e1f1e1d1a16110b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2e373a474c515556575554504c473a3632281d2330393d4a4a4a352b1e0e00000000000008141c2832363a474c515456575655534f4b4437372e21190e000000000000001c31465a6b7475756d64523f2b1601000000000000071c3145596b7375756d64533f2b160100000000000001162b3f53646d757572695844301b001f34495e74898a8a826d58422d180300000000000000000000162b40556b808a8a8a74604b36210b000000000008182530434f59626c74797d7f8181807d79746b625a4b46394a5b6373756d64523f2b1600000000000000000114263643546069757a7f81817f7c766e635b4b4538281b0a0000000000000c22374c61778996927d675645321d0b000000000000000000081d314455667c91968876614b36210c00000000000000001121314250616a7f8d9ea29a897e74696158544f4b45384545463b484c51565c646d7883919ea1998678625a493a291808000000000000000000000d22374c627774605443301c130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081826303e4b4f5861666a6b6c6b69656158534b45393130414d525f605e483c2b1906000000000d18263038454b53586166696b6c6b6a68656055504b3f352c1e120500000000001f34495e74898a8a826d58422d1803000000000000091e34495e73898a8a826d58432e180300000000000003182e43586d828a8a87725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b80959f8b74604b36210b0000000000132536434a61697781888e9394969695928e8781786c61574b4e6379898a826d58422d180000000000000000081c30435460727e889094969694918a83796c6056453928160300000000000a1f3447596a7f959d8774604b3929160300000000000000031628384b6073869c937e685746321e09000000000000000b1b2e3f4e606a7f949f9e9684776960554c473a393632283030312b34373c3e4a4f5a626e7c8a9da49c8778625847362614010000000000000000071c32475c71868272604a41301d0d000000000000000000000000000000000000000000040a0c101214151413100d0b0500000000000000000000000000000000000000000000000000000000000000000003090b0f1214151413100d0b0500000000000000000000000000000000000000000000000000000000000001080b0f1214151413100d0b0500000000000000000000000000000001142636434b5c646e777c7f8181807e7b76706860574b44374d5f677475705a4835200b000003111d2b36434b56606870777b7e8081817f7d7a756e655d4d493c30231204000000001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d87725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00000000071c304354606c7f8a979d9e9993918f9091959a968b8175655d54697e9397826d58422d1800000000000000031729394b607282939da39b949192959c998c8174605745321e09000000000004182a3a4b6175889e937e695746321e0c00000000000000091e324556687d929c8674604b39281603000000000000031729394b5d687e929d9d95807262594b4437332a24211e161b1a1b182022262d363c494d5f6779879ca49d8776615443301c0e000000000000000002172c42576c8195806b5f4d3b2a18050000000000000000000000000000000000060b0d171f212528292a292826222019100e08000000000000000000000000000000000000000000000000000000040a0c161e212427292a292826222019120c0a04000000000000000000000000000000000000000000000000070b141d202427292a292826222019100b070000000000000000000000000a1c304354606b7a838b919496969593908b857d756960554952677d8a8a78624d38230d000011212f3b48546068747e858b909395969694938f89837a70635b4d41302212000000001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b000000071b2d3e4a607281949e9f9689837e7c7a7a7c80858c9696877b69606a809597826d58422d18000000000000000a1e3346576a7f94a09d93857f7c7c8087929e978475604b36210b0000000000000c1e324657697e939e8875614b3a2a170400000000000417293a4b6075889d917c675544311b0b000000000000000a1e334657657b8b9f9f957f6b6054483b31271f170f0b0903000500050b0d111b222c35414d5b6377869ca5998372604b3c2c190600000000000000000b20354b607384917d675947341f0d000000000000000000000000000000050e1920232933363a3d3e3f3f3e3b38352b25221b10080000000000000000000000000000000000000000000000030c171f212832363a3d3e3f3f3d3b38352b28211f170b06000000000000000000000000000000000000000008131c20263135393c3e3f3f3d3b37342b25201c13080000000000000000000a1a31414b6072808c999f98908c8a8a8b8e929893887e73635b596f84998d78624d38230d00081c2f3f4b5962737d87939b9b948f8c8b8b8c8e949a998f8579675f4d402f1e0e0000001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0000000d22364a5c6a80959f9f8b80766e69666565676b7077808a998c7e6a6c819697826d58422d18000000000000000c21364b6176899ea0937f706966676b737d89988574604b35200b000000000000031629394b6074879c957f6a5847331f0d00000000000a1f3347586a7f949b85705f4d37271500000000000000071a2d3d4b6175879da296816c614b43362a1d1509040000000000000000000000070e1920303d49596278899ea1957f6a5a493520110000000000000000081d3144556278898977624c3c2b1905000000000000000000000000000d19202b35383a464c4f5254545453504d483c3a372e231c110200000000000000000000000000000000000000000b161e2a333739454b4f5254545453504d483c3d363329211a0f030000000000000000000000000000000001111825303537444b4e5254545453504d483b3b353025181305000000000000031628384e5f6d81969f9c8b827b77757576797d828993938579665e71869c8d78624d38230d000e23384b5d657885929d998e857f7a77767577797e858f9c9a8a7d675e4c3c2b190600001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0000061a2c3d4e647a8c9f9f8b7c6b615854515050525559626b778393937f6d829797826d58422d180000000000000012273d52677c92a797826d61545152546067788379635443301c08000000000000000b1d314455677d929e8976614c3b2b190500000005192b3b4c6176899e8f7b655040301909000000000000000c21364a5b6c8197a59a8473604b433026180d0200000000000000000000000000000006121f2c3b495a657b8c9f9f8b78634d3f2e1c080000000000000001152737485a697e93816c5a4834200b000000000000000000000000131d2b343c484d5558616567696a696865625a574f4b3f372e1d150a000000000000000000000000000000000003111b29323a474c5357606467696a696865625a59524c463a352c1e160b000000000000000000000000000009151d2e36434a5055606467696a696865625957504a43363020190d0000000000091e324556687d929f9c86796d666160606163676d757e87958a7c6973899e8d78624d38230d0010253b50657b899b9e90837a706a65626060626469707a86999e8c7c665a4935200e00001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00000c2135495b6f849aa1927d675e4c463a3c3a3b3c3b484d59626f7e8c947e839997826d58422d1800000000000002172c41576c8196a68e79634e423c36434a5a626e635b4a3626140100000000000000021527374a6072859b96816b594834200f0000000b203448596b809699836f5d4b37221200000000000000061a2c3d4e63798c9f9e8a78625544311c1408000000000000000000000000000000000000010f1d2b3c4b5d6c8196a699836f5d4b37230e000000000000000009192b3c4b6075888b78624d38220e0000000000000000000008131c313b484d5a626a71767a7d7e7f7e7d7b77736c655d504b3f32281a0c0000000000000000000000000000000513212e39464b58616970767a7c7e7f7e7d7b78736e6761584e493d32291b0f0100000000000000000000000a1927313f4b5460666e74797c7e7f7e7d7b77726d6560544d41342b1d0f010000000b21364b6075889d9d8878635b514c4a4a4c4e5256606875808c8d7f748ba78d78624d38230d0011263c51667c9197887c6e645c544f4d4b4b4c4f545c647583999e8a78624d3c2c1906001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00000e23384e63798da299846f5f4d403329272525272b343b484d61697c8b8d889e97826d58422d1800000000000004192f44596e84999d88735b49362725303c484d584e4a3d2d1808000000000000000000091c304354657b909f8a78624d3d2c1a0600061a2c3d4d62788a9f8c79634e3f2e1c04000000000000000c2135495b6e8399a6947f6a5a49372715010000000000000000000000000000000000000000000e1e2f3f4b6175889da18f7b65503c2b1905000000000000000c1c2a334556697f94806b553c2b1905000000000000000008182530414e59626d787f868b8f9293949493908d88827a70655d4b4538291c0c00000000000000000000000000051323313f4b57616b767e858a8f9293949492908d88837d766d635b4b46392c1f0f000000000000000000000a1a2837444b5d65737b83898e9193949492908c87827b73675f4d483b2d200f00000011273c51667c91a6927d67594a3d373535363938454b57606b7c89948398a28d78624d38230d000f24384c5e697f8277665e4f4a3e3a37363637393e4b566075859b98826d5a4935200c001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0002152738566b8096a5907b655041301f171110101218202b34424f5e667c8c9ea797826d58422d18000000000000051b30455a70859a9b86715b3d2c1a131c2b34384339362d1f0f00000000000000000000001325364c5e6f849a97826d5b49352110000c2135495b6d829797826d5b4a36211100000000000000021527374e63798da19d8875604b3c2c19090000000000000000000000000000000000000000000000111e324657697e93a699836e5a4835200b00000000000004182a3a474c5762788d87725a4835200b0000000000000000132536434a606878828b959b9c979491919193969b9d978f857b6c6056473a291b0b000000000000000000000002132331424e5d65758089939a9e99959391929395999d98928a82796c6157493d2c1c0c0000000000000000081828384555606c7b8690989e9c969391919294989d9790867d6f62594a3e2d1c0c0000182d42576d82979e8975604b3b2d2220202124283239454b5e65798898a0a28d78624d38230d00091d2f404f61696d62594c40362d2522212022242e384556657b8f9f8c78634d38230e001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00091d31455670859b9d8774604a3520130400000000050d182032404c5e697f94a797826d58422d18000000000000061b31465b70869b9a85705b45301b000d1920222e23211a0f01000000000000000000000008182f404f647a8d9f8c79634e3e2d1b081b2e3e4e63798c9f8a78624d3d2d1a0300000000000000081d3144556c8196a9947e695645321e0e000000000000000000000000000000000000000000000000031628394b6075889e9f8b78624d38220d0000000000000a1f334758616f7676888d78624d38220d000000000000000e1c304354606c7d8a989f988e87827e7c7b7c7d81858b959f9b8d81746158473928160300000000000000000000102031414e60687b87959e9b918984807d7c7c7e7f83888e969e978c8175635b493a2a18040000000000000114263645566073818d9ba0988e86817e7c7c7d7e82878f989c928478645c4a3a2a1804001a30455a6f859a99846e5544311d0f0b0b0c0e161e2832404c5b6379879da28d78624d38230d0000122232434f54584d483b2f221b100d0b0b0d101a28384b5d71869c937e69543e2914001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b000b20364b60748a9f98826d5443301c070000000000000005142230404f6173899e97826d58422d18000000000000061b31465b70869b9a85705b45301b0600050b0d190e0c0700000000000000000000000000001122364a5c6e839898836e5c4a36221122374b5c6e839996806b5948341f0f00000000000000000b20364b6075899e9f8a76614c38281600000000000000000000000000000000000000000000000000000b1d3245566b8096aa95806a553b2a180500000000011426364c6176838b8c9e917b66513c26110000000000000e1e31424a607281929e9c908379726c69676667686b7077808a999f978576615746321e130000000000000000000a1a2e3e4e5f687e8c9d9e93857c756f6b686767696a6e73798089959f968679635847331f0a000000000000081c304354607483969f9d8f8279716c68676668696d727a838d9c9a887a645947341f0a001c31475c71869c97826c573727150000000000020a161e2f3d4a5b677c91a28d78624d38230d0000041425323b3f4237342b1d12070000000000000a1a2e3f566b819699846f59442f1a001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b000e23394e63798ea9937e695436251300000000000000000004122232435e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b0600000000030000000000000000000000000000000000071b2d3e4d63788b9f8d7a644f3f2e182f404f647a8f9e8976614c3b2b1901000000000000000010263b50657b90a798836e5847331a0a0000000000000000000000000000000000000000000000000000021528384e63788da59b86715947341f0b00000000081c3043546e82989faba8937e68533e2913000000000006192b3c4e606c81969f9c877b6e645c5754525151535659626a788398a09b8575614b41301b0a00000000000000031628384b5c687d8d9f9d8a7e71676056565352525355595c646b767f8a9a9c8877614c37220c0000000000071a2d3e4b60728399a19c877b6d635b575351515254585d656e7a86989d8877614c37220c001c31475c71869c96816c573c2b180a00000000000003111f2d3d51677c91a28d78624d38230d000000071420272a2d2220180d00000000000000000014293e53697e939c86715c47311c001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0010253a4f657a8fa4917c66513c271100000000000000000000041e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b060000000000000000000000000000000000000000000000102135495b6c81979a846f5d4b3726364c5e70849a947f695846331d0d000000000000000003162839576c8196ab927c67523a2a17000000000000000000000000000000000000000000000000000000000a2135495b72879c9f8b77624c37220d000000000b20354b60758a9fb4bca9937e69543e291400000000000b2035485a687e929f9c8677655d4e4a3d3f3c3c3c3e3b484c5a62728298a098826e5f4d39281603000000000000091e324556647a8b9f9d887a6860524b45383e3c3d3e403e4a4f57616a78848f826d5847331f0a00000000000d21364a5c6a8095a19c8677655d4e493d3e3c3c3d3f3f4b505c6475828f826e5947341f0a00192e44596e83999a856f5a4836271a110a03000000000112273c51677c91a28d78624d38230d00000000030c1214180d0b050000000000000000000815273753687e939d88735e48331e001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0011263b51667b90a5907a65503b251000000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b06000000000000000000000000000000000000000000000006192c3c4c62778a9f8f7b655040304354667b909d8775604b3a2917000000000000000000091e32455771869c9f8b76614c37210c00000000000000000000000000000000000000000000000000000000061a2c3d576c8196ab927d67523d2812000000000b20364b60758a9fb4b8a6917b66513c261100000000071a2d3e4d62788a9f9d877762594c3f362d29272627282a343c495460728298a0917d675745321e0900000000000417293a4b6075879d9e8a79645c4e42363228282727292a2d3639464b5a62727a74604b3a2a180400000000081b2e3f4e647a8c9f9d877762594b3f352c29272728292e373e4a56606e7974604b3a2a18040013283e53687d939f8b78625445382e211e16100c0a040012273c51677c91a28d78624d38230d000000000000000003000000000000000000040a1018263144556b80969c87725d47321d001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b060000000000000000000000000000000000000000000000000e1f3448596b80959b85705e4c384b6073869c927d685645321c0c0000000000000000000b21364b60768a9f9c87725847331f0a000000000000000000000000000000000000000000000000000000000012283d52677d92a796816c56412c1700000000091d3145566f849aa3a89e8875614b36210c000000000d21364a5c6e8399a0907b6559483b2f211a1412111213181f2b3643546176889d9d8875604b36211000000000000a1f3347586a8095a2927d675b4a3e31211e1613121214151b2229323c48546064605544311c0c00000000000e22374b5d70849aa0907c6659483b2e211a13121113141c232e38454b5c64605645311c0c00000c21364b6175889d99837260564b3f36322926211f171916273c51677c91a28d78624d38230d000000000000000000000000000000050b0d171f212e36434b6074879d9a856f5a45301a001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b0600000000000000000000000000000000000000000000000005182a3b4c6176899e917c66544556677d929c8673604b382816000000000000000000000f253a4f647a8faa98836d583a29170400000000000000000000000000000000000000000000000000000000000e23394e63788eab9a846f5a38281603000000021527384d6278858e90897c665746321e09000000021628384e64798ea198826d5d4b3b2a1d11070000000000050e1826364658677d92a5937e69543f2e1b08000000000c21374c6176899e9a846f5f4d3d2d201409020000000000070b161e2b36434a4f4b443727150000000000031628394f657a8fa298826e5e4c3b2b1d1106000000000008101a28323e4b4f4b453827150000000a1e324657677c919d988274655d524b46393b37332a2e2b2a3c51677c91a28d78624d38230d000000000000000000000000040a0d1820222933363e4b54606a7f95a5947e69543f2914001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b06000000000000000000000000000000000000000000000000000d1e334657697e949c8673604b6074879d907b665443301a0a0000000000000000000012273d52677c92a7957f6a55402a150000000000000000000000000000000000000000000000000000000000000b20354b60758a9f9d88735645321e09000000000a2035485a6273797a76665e4c39281603000000091e3245566d8297a28d78634d3f2f1d0d0000000000000000000818293a4d5f72879c9c87725d4b37220e00000006192c3c54697f94a28f7a644f41301f0f01000000000000000000030e182530353a36312719090000000000091e3246576d8298a38e79634e402f1d0d0000000000000000000a161e2e373a3631271a0a000000031629394d5f697f919e98867b7067615755504c473a43413f3d51677c91a28d78624d38230d00000000000000000000080c181f222b34373a464c525c64737f949d9e8977614c37220c001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b0600000000000000000000000000000000000000000000000000031729394b6074879d927d6757697e939a84705e4c3626140000000000000000000000152a3f546a7f94a7927d68523d2813000000000000000000000000000000000000000000000000000000000000081d31445573889da68b76604b36210b0000000005192b3c485560636561584c402f1b0b000000000b21364b6075899e9a85705b4935211100000000000000000000000c1c3041556a7f95a58f7a654f3a25100000000c2135495b71869c9b85705c4a3623130100000000000000000000000008131c2025201d15090000000000000c21364b61768a9f9b85705b4a362212000000000000000000000003101b2224201d150a00000000000b1b30414f61697d89979c8f857d766f6a6561585b5856545251677c91a28d78624d38230d000000000000000005111c232a33373b484d53586168707a84949d9f927d675847331f0a001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b0600000000000000000000000000000000000000000000000000000b1d324556687d929d87746176889e8f7a644f402f18080000000000000000000000172c41566c8196a5907b65503b2610000000000000000000000000000000000000000000000000000000000000011527375b71869ba18c77624c37220d00000000000e1e2b37444b4e504c463a2f2212000000000011263b50667b90a8927d68533c2c19030000000000000000000000001323384d62788da595806b563726140100000e23384d63788da4937e68533e2e1b05000000000000000000000000000000070b0f0b08020000000000000011263b51667b90a9937e68533d2d1a0400000000000000000000000000070d0f0b090200000000000000122332434f5f6777828b969a928a847f7b7773706e6b696866677c91a28d78624d38230d000000000000000e19202e373a474c535962686f767d858f9aa29d8d7f695f4d3a2a1804001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b060000000000000000000000000000000000000000000000000000021528384b6073869c937e6a7f9598836e5c4a362212000000000000000000000000182d42576d8297a48f7a644f3a250f000000000000000000000000000000000000000000000000000000000000001b30455a70859aa28d78634d38230e0000000000000e19263135393b3633291b12040000000001162b41566b8096a88d78634d38230e000000000000000000000000000b2035485a72889d9b85705544311d08000014293e53697e93a58d78624d3822100000000000000000000000000000000000000000000000000000000001162c41566b8196a88e79634e39240f00000000000000000000000000000000000000000000000000000004152532414d59626d7880888f959a94908c888583807f7d7b7b7f94a28d78624d38230d000000000003101e2b353f4b5058616870777e848a929aa29d94887c69614f41301c0c00001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b060000000000000000000000000000000000000000000000000000000a1c304354667c909c8676899e8b78634d3e2e1b04000000000000000000000000182e43586d8398a38e79644e39240f000000000000000000000000000000000000000000000000000000000000051a2f445a6f8499a48e79644f39240f0000000000000009141d202425211f170b000000000000011426375a6f849a9e8974604a35200b0000000000000000000000000006192b3c596e84999f8975604b35200b0003182d43586d82989d87725a4835200b00000000000000000000000000000000000000000000000000000000011527375a6f859a9e8974604b35200b00000000000000000000000000000000000000000000000000000000071523303b484c5a626b747a80858a8e929598989694929190949da28d78624d38230d000000000110212e3c484d5d656e777e858c939a9f9e9890887f76665e4f433223130000001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b06000000000000000000000000000000000000000000000000000000011426364c5e70859a97829797816c5b4935201000000000000000000000000000192e43586e8398a38e79634e39240e000000000000000000000000000000000000000000000000000000000000041a2f44596f8499a48f7a644f3a250f000000000000000001080b0e100c0a0400000000000000081d31445573889d9a85705443301c070000000000000000000000000000152b40556a8095a98d78634d38230e00031628395c71869b99846e593c2b190d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0a030000000000081d31445573889d9a85705443301c08000000000000000000000000000000000000000000000000000000000005131d2b343c484d5460646b7075797c80828587888a8b8c939ca28d78624d38230d000000000f1f2e3f4b5a626f7a838b939a9f9e989189827b746a61574c40322514050000001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b060000000000000000000000000000000000000000000000000000000008182f404f647a8f9f979e8a77624c3c2c190200000000000000000000000000182d42586d8297a48f79644f3a240f000000000000000000000000000000000000000000000000000000000000051a30455a6f859aa38e79644e39240f00000000000000000000000000000000000000000000000b20354b60758a9f98826d5836251300000000000000000000000000000013283d53687d92a58f7a65503a251000091e32455774899e96806b56412b23232323232323232323232323232323232323232323211e170b000000000b20354b60758a9f98836d5836261401000000000000000000000000000000000000000000000000000000000000000d18202b3536434b4f55566064676b6d7072737576777e93a28d78624d38230d00000009192d3d4b5d6578838f999f9e979089837c766d6660554c46392f221407000000001f34495e74899e97826d58422d1803000000000000091e34495e73899e98836d58432e180300000000000003182e43586d83989d88725d48331d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a98b74604b36200b0012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b0600000000000000000000000000000000000000000000000000000000001222374b5c6e8399a695806a5947341e0e0000000000000000000000000000172c42576c8197a58f7a65503a2510000000000000000000000000000000000000000000000000000000000000061b30465b70859ba28d78634d38230e00000000000000000000000000000000000000000000000c22374c61778caa96816c57412c1700000000000000000000000000000012273c51677c91a6917c67523c2712000b21364b60768ba7947e69543f38383838383838383838383838383838383838383838383633291b0b0000000d22374c62778cab97816c57422c17000000000000000000000000000000000000000000000000000000000000000000050e19202630353a38454b4e5255585a5c546060677c91a28d78624d38230d0000011527374a5c657b8999a19e9489827b756e676157514b443733291b120400000000001f34495e74899e97826d58422d1803000000000000021527385e73899e98836d58432e180000000000000003182e43586d83989d87725d48321d001f34495e74899e97826d58422d180300000000000000000002172c41576c81969f89745645311d090012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b060000000000000000000000000000000000000000000000000000000000081b2e3e4e63798c928875614b3b2a18000000000000000000000000000000162b40556b8095a7917c67523c271200000000000000000000000000000000000000000000000000000000000005182a3b5d72879ca88c76614c37210c00000000000000000000000000000000000000000000000d23384d62788da295806b55402b1600000000000000000000000000000010263b50657b90a5927d68523d2813000d22374d62778ca2927d68524d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b463929190900000d23384d62788da295806b56402b1601000000000000000000000000000000000000000000000000000000000000000000000608141c2025273136393d40434536434a51677c91a28d78624d38230d0000081d314455647a8b9ea199887e756d666056524b46393531271e170b000000000000001f34495e74899e97826d58422d1803000000000000091d314556748a9f99846f5a36261401000000000000041a2f44596f84999b85715c46311c001f34495e74899e97826d58422d180200000000000000000001142637586d82989d88735e382715020012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b06000000000000000000000000000000000000000000000000000000000000102135495b667b7d7a645746331d0d00000000000000000000000000000013283e53687d93a8947e69543f29140000000000000000000000000000000000000000000000000000000000000b1f34485974899f9e89745847331f0a00000000000000000000000000000000000000000000000e23384e63788da3947f6a553f2a1500000000000000000000000000000010253a4f657a8fa4937d68533e2813000e23384d63788da2917c676262626262626262626262626262626262626262626262626261574637261401000e23384e63788da3947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000001080b0f151d2024272b2d3025303c51677c91a28d77624d38220d00000b20354b6074869ca0988376696157504b4538363228201d15090300000000000000001f34495e74899e97826d58422d18000000000000000b20364b60758ba99b86705443301c0800000000000004172a3a5a70859a9a84705a45301b001f34495e74899e97826d5840302010020000000000000000081d31445570859b9c86715c47311c000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b06000000000000000000000000000000000000000000000000000000000000061a2c3d4c5e6667645c4a3929170000000000000000000000000000000010263b50657b90a596816c573727150100000000000000000000000000000000000000000000000000000000000d22374c62778ca99c87715c3a2a170400000000000000000000000000000000000000000000000d22384d62778da295806b56402b1601000000000000000000000000000011263b50667b90a5927d67523d2812000e23384d63788da2937e787878787878787878787878787878787878787878787878787876615544311d08000d22384d62778da295806b56402b160100000000000000000000000000000000000000000000000000000000000000040a0c0b080100000002090b0f1216181b13283d52677d92a18c77624c37220d000011263c51667c91a498827361584b4639363127211e160b0801000000000000000000001f34495e74899e97826d583b2b19090000000000000d23384d62788da29e8974604b35200b0000000000000a1f33475872879d98836e59432e19001f34495e74899e98836e5e4c3e2e211305000000000000000b20354b6075899f98826d58432d18030012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000000061b31465b70869b9a85705b45301b06000000000000000000000000000000000000000000000000000000000000000f1f2f404c50524f4a3e2e1b0b000000000000000000000000000000000d22374d62778ca69b85705544311d08000000000000000000000000000000000000000000000000000000000011263b51667b90a698836e59432e190000000000000000000000000000000000000000000000000c22374c61778caa97816c57422c1700000000000000000000000000000012273c52677c91a6917c67513c2712000d22374d62778ca29c938d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8973604b35200b000c22374c61778ca997826c57422d17000000000000000000000000000000000000000000000000000000000000000b171f21201c14080000000000000000030014293e53697e93a98b75604b36200b0003182d43586d82989e89766155473a3228201d150c0903000000000000000000000000001f34495e74899e98826d594837271508000000000013253651667c91a89e8e79644f3a29170400000000000c21374c61768ca5957f6a55402a15001f34495e74899e9f8d7c665c4b3f3120190d07000000020a1a2d3d50657a8fa9937e69533e2914000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18000000000003061b31465b70869b9a85705b45301b0a0a0a0a0a0a00000000000000000000000000000000000000000000000000000111222f383b3d3a362e201000000000000000000000000000000000000b2034485973889d9f8975604b35200b000000000000000000000000000000000000000000000000000000000417293a556a7f95a9947f69543f2a140000000000000000000000000000000000000000000000000b20354a60748a9f98836d5837271501000000000000000000000000000013283e53687d93a48f7a654f3a2510000b21364b60768ba7a0988d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8f99a78b76614c36210c000b20354a60758a9f98836e58382715020000000000000000000000000000000000000000000000000000000004121b293336353026180f010000000000000000132536556a80959f89745645311d0900061b30455b70859a98826d5847372a1e160b09020000000001080b0f0d070000000000001f34495e74899e9e89786255443125180c0300000a1c3043546b80969e8995806b5846331f14070000000a1a2d3d51667c91a9907b65503b2610001f34495e74899ea49c8a7a655d4e42342b211a151414151d28384a5b6d8298a28e79634e39230e000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d180000000812181b1f31465b70869b9a85705b45301f1f1f1f1f1f1f13100b01000000000000000000000000000000000000000000000004111c23262824221b1002000000000000000000000000000000000005182b3b596e8398a98f7a6550362614010000000000000000000000000000000000000000000000000000000a1f33465870859aa78f7a654f3a2510000000000000000000000000000000000000000000000000071c30435472879d9b86705544311d080000000000000000000000000001162b41566b8096a88d77624d38220d00091e32455773899e988278787878787878787878787878787878787878787878787b8fa88b75604b36200b00071c30435472879d9b86715645311d090000000000000000000000000000000000000000000000000000000012222f3a464c4b43362c1f1205000000000000071c3043546e83999b86715c3827150200071c32475c71879c95806a553a2a190c0300000000000009151d2024211a0f01000000001f34495e74899ea79a8473604b43362a1e1614151a29394a6073879d937e938976614c4132221b1514131c28384a5c6e83999f8a76614c36210c001f34495e74899e9c86968a7b68604d483b362d2b292a273139455663798b9f9a85705b4935210c000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d1800000c1a252d303434465b70869b9a85705b45343434343434343428251e1305000000000000000000000000000000000000000000000000090f11120f0d07000000000000000000000000000000000000000013283d53687d92aa96806b5443301c080000000000000000000000000000000000000000000000000000000c21364c61768b9f9e8974604b35200b00000000000000000000000000000000000000000000000000132536596f84999f8a75604b35200b00000000000000000000000000071a2d3d5a6f849a9e8974604a35200b00031628395b70859b9a857062626262626262626262626262626262626262626264798f9f89745645321d090000132536596e83999f8a75604b36200b000000000000000000000000000000000000000000000000000000091c2f404c58616054493d301f180d06000000041120354a6074889d97826c57422d170000051b30455a70859a96816b563e2d1a0c020000000007101927313539362d1f14060000001f34495e74899e9e8897816c6054473a3228292a2e384657677c919b86758896816c5f4f42362e2a29253038455664798c9f97826d5746331e0a001f34495e74899e927d81968b7e6e62594e4a3e403e3f37444b576074859ba2927d67523d2c1a06000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d1800081a2a3741454949495b70869b9a85705b4949494949494949493d3a3123130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778b9f9d8774604b3520110000000000000000000000000000000000000000000000000000081b2e3f53687d92aa98826d5544311d0800000000000000000000000000000000000000000000000000152b40556a8095a98e79634e392410000000000000000000000000000d21364a5c73889e9a85705443301c070000172c41576c81969e8974604d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d50667b909c87725c382815020000152a3f556a7f94a98e79644f3625130000000000000000000000000000000000000000000000000000000f24384c5e667673635b4d40342a2119161414171f304150657b90a6927d67523d2812000002172c42576c81979b85705c4a38291d15111011131b222d37444b4e4a3d3224140200001f34495e74899e937e8596817261584b46393e3f3f4b566175879d937e697e93917d69604f4a3e403e36434a566074859b9f8f7a644f39291703001f34495e74899e917c7381959283786c645c585554545655606775839aa39a8472604a35200f00000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d180012253748555a5f5f5f5f70869b9a85705f5f5f5f5f5f5f5f5f5f524e41311e0b000000000000000000000000000001080b0b0b0b0700000000000000000000000000000000000000000000000000000000000a1f3347586f8499a5907b66513f2f1909000000000000000000000000000000000000000000000000000c22374b5d71859ba5907b6650372715010000000000000000000000000000000000000000000000000010253a4f657a8fa6947f69543e2d1b070000000000000000000000011527374e64798ea7947f6a5536251300000011273c51667c91a78f7a644f38383838383838383838383838383838383954697f9498836e59432e190000000f243a4f647a8fa6947f6a5443301c08000000000000000000000000000000000000000000000000000011263b51667c8b8679665e4c483b352c2b292a29333f4d5f6f84999e8976614b36210c00000010263b50657b90a28e796456473a3127272627282d363e4a5560645c4f42321f0c00001f34495e74899e917c7888968376696157555455575d6574849a9d88766173849a8c7e6f645c57555455546066758399a397826d5c4a361b0b00001f34495e74899e8f7a656c7f8c998b8179726d6a69696b6e757d879aa29d8978625443301c0700000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d1800182d415566707474747474859b9a857474747474747474747474685f4e3a25100000000000000000000000000009141d202121201c130800000000000000000000000000000000000000000000000000000004182a3a51667c91a59a846f5d4b3727150200000000000000000000000000000000000000000000000c1c30404f657a8fa39c8773604a35200b0000000000000000000001080b1216140c0a03000000000000000b20354b6074889e9c86715c4a36221301000000000000000000000a1d3144556b8196a38e79644e39240f0000000c21364b6176899e96816c56453223232323232323232323232323233245576f8499947e69543f29140000000b20354b6074889d9c8773604a3626140100000000000000000000010a101212100a00000000000000061b30465b70859b9c8a7c6d62594d493c403e3f3a464c5d677c91a197816c5746321e090000000b20354b6073869c9b857461584b44373c3b3c3e3e4a4f5c64747969614f3b271200001f34495e74899e907a65798899887e766e6a696a6c727a869a9f927d67576177879c93847a726c6a696a6d737c8699a19c8775614b3e2d1b0000001f34495e74899e8e7964616a7c8896968e8783807e7f808389929da1998879635a483625130000000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d18001b30455a708489898989898d9f9f8d898989898989898989898a7d68523d28130000000000000000000000000919263135363635302518100200000000000000000000000000000000000000000000000000000c20354b6073879ca2907b655544311d110100000000000000000000000000000000000000000009192a3a4d5e6f849aa5937e695443301c0700000000000000000008141c20272b29211e170b000000000000081d3144556c8196a48e7a644f41301f0f0000000000000000000a1b2b3c4b6074889d9b86715c4a36210d0000000a1e3246576c81969d8875604b3b2b1a0d0d0d0d0d0d0d0d0d0d1628394b6075899e8d78634d38230e000000081c3043546b8095a58f7b655443301c1001000000000000000005131d252727241d12040000000000000d23384d6278879a9e9182776c635b575554545658616b7b8a9f9e8977624c39281603000000081d314455657b8f9d9a84766760555351505153575c646e7a868e7e69543e291400001f34495e74899e8e796463788697938984807e7f81878f9c9f95816c5f4d59627886979a8f87827f7e808288909ca09886786257463320100000001f34495e74899b8d78624d5e6676818a949b9895939496999e9d978f8378635b4a3c2b18080000000012273c52677c91a48f7a644f3a250f00000000000000000000091e34495e73899e97826d58422d180020354a60758a92939596989ea6a79e98989898989898989898927d68533d2813000000000000000000000001142637444b4b4b4a43362e20100000000000000000000000000000000000000000000000000000081c304354677d92a39c8674604b402f1f100200000000000000000000000000000000000000081426374758667c91a29d8774604b3625130000000000000000000a182630353c403e3633291b0e0000000000011527374d63788b9f9a846f5f4d3d2c1f1308010000000007101a2839485a697f94a5927d68523d2d1a07000000031629394d63788c9f947f69594838281a0e05000000000009141e324557697e939a85705b4935210c000000011426364d62788b9f9b8573604b3e2e1d15090200000000070d192030393c3c393022120300000000000b2035495a627684949f988a8178726d6b69696b6f76808b9f9f927d675948341b0b00000000011426374b5d697f949f9a887d746d68666566686c727a838d9c9986715c46311c07001f34495e74899b8d78625a6275818c9799959394979c9f998d8072604b41495a6276818c969d97959395989d9e988f8377625a48392917020000001b30455b708486816d5a484c58616c777f868b8f919291908e88827a6e625a4a3d2d1e0e000000000012273c52677d919b8f7a644f3a250f00000000000000000000091e34495e73889b97826d58422d180011263b51667c7d7e808182889e9e8983838383838383838383837b65503b25100000000000000000000000081d31445560606060544b3e2e1b0800000000000000000000000000000000000000000000000000011426364a6072859ba4957f6a5e4c3d2d20130500000000000000000000000000000000000c18253144556176889da2927d67564532180800000000000000000a1a2836434b5255534b46392c1e0e0000000000092035495a6d8297a2927d675b493d31201c14141314151a212d38455762788a9e9c8774604b35200f00000000000b2035495a6e83989e8977625645382b201813111011131c2631424b6075879d907b66503c2c190600000000082034485a6c8196a3937e685c4b3e31271d15141314151a212b34414d52514d40302111000000000006192b3c495861727f8a989e968d8782807e7f80858a969f9d8d7e695f4d3b2b1800000000000009192e3f4f61697f8b9b9d9288827e7c7b7c7d81878f989d928376614c37220c00001b30455b708486816d5a4957616c7982898e9192918f8a837a6b605443303c4958616c7981888d909292908e89837a6e6159483c2b1b0b00000000192d42556670716d63523c3a464c59626a71767a7c7d7c7a78746d655d4d483c2d1f0f00000000000011263b50667c86868579634e39240e00000000000000000000051b30455a70848686806a55402b15000f24384c5e6667696a6c6e83989a85706e6e6e6e6e6e6e6e6e6e655d4b38230e00000000000000000000000b20354b6073757673645c4b3722110000000000000000000000000000000000000000000000000000081c30435464798b9f9f8c7c655b4a3e301f180d040000000000000000000000000008121c2936434b6073839aa69a846f5f4d382815000000000000000002152838455460676b696157493c2c19060000000006192c3c4c6177899e9e8979635b4e413530262928292a2d363e4a566075849a9e907b655544311d08000000000006192c3c4c6277889e9b85746056483c342b28262526253037444b616d82979b85715e4c381e0e000000000005192b3c4c6176889e9e8a7a645c4b443731272928292a2d363c484d5f67675f4d402f1c0900000000000e1e2b3a4754606978828c959b9c97959394969a9f9b94887d69604f41301d0d00000000000000112132434f61697a8590989d989391909193979c9891877d72615847331f0a0000192d42556670716d63523c464b5c646d75797c7d7c7a756e645c4b4336262b3a464c5b636c73787b7d7d7b79746d655d4c473b2b1e0e000000000012263848555b5c5752453529333b474c54576164676867656360544f4b3f352b1e0f010000000000000f23384c5e66717171635b4a36210c0000000000000000000003182d4155667071716a62503c281300091d2f404c51525455576c82979a85705b595959595959595959504b3f2f1c0800000000000000000000000f243a4f647a8b8b897b644f3f2e1c0800000000000000000000000000000000000000000000000000001325364a5c6a7f94a09e8979645c4d41342a1f170c0a0300000000000000060c101b222f3a4654606c8196a19e8978624d41311a0a0000000000000000091d32455660737c807e75625a4935200a00000000000e1f344759667c8d9f9d8879685f504b43363e3d3e403d4a4e5c6474849aa196806b5d4c372715010000000000000e1f344759667c909e998274625a4d483b3d3c3a3c36434a55606b7f939f8a7a644e402f1c000000000000000d1f334658657b8d9f9e897a6960554b45383e3d3e3f3d4a4e5a626e7c7c675e4c38230e0000000000000e1c2a36434b5a626d7880868b8f919393918f8b867f75675f4f42322313000000000000000003142532434f5c64717b83888d909192918f8d88827c74686054473a2a1804000012263848555b5c57524535323d4a4e5560646768676560564f4a3e3026181b29333d4a4e575a62666767666460554f4b3f342a1d0e000000000000081a2a38424546423f3527171f2a343739464b4f515352504e4a4336372e20190e0000000000000000091c2f404c505c5c5c4e4a3d2d1a07000000000000000000000012253748555a5c5c55504433210d000012222f383b3d3e40566b80959a85705b4543434343434343433b382f21110000000000000000000000000d22374b5c70859a9b85715d4b37230e000000000000000000000000000000000000000000000000000008182d3d4a60728298a39e897a675f4c473b332a211e16151312121214161920232e37404c58617281969f9f8c7c6559483423130000000000000000000b20364b6074849195938778624d382815020000000004182a3a4c5e697f949f9d897d706660545653535355585b636c7a859aa1998373604b3f2f19090000000000000005182a3b4c5e6b80959f9985786c62595653514f51535460667380939f927e685c4a362212000000000000000417293a4c5d697e939f9e8a7f746760565654535355585b636c7883918d7b65503b2610000000000000000c1826303c494d5a626a71767a7c7d7e7c7a77706a60574d4132241405000000000000000000061424323e4a4f5d656e73787b7c7d7c7a78736d6760554a43362a1c0c000000081a2a38424546423f35271e2d3637444b4e5153524f4b4538362d1c14080b171f2d36393c484d515252504e4b4437372e1f180c00000000000000000c1a262d30312d2a2317040d181f222932363a3c3d3c3b39353025221b10050000000000000000000011222f383b46464639362d1f0f000000000000000000000000081a2a3741454646403c33251504000004121d2426282a3f54697f949a85705b45302e2e2e2e2e2e2e25231c1103000000000000000000000000071b2e3e51667c91a38f7a654f3c2b190500000000000000000000000000000000000000000000000000000f1c3043546074849aa29e8a7d6d62594c473a3632292a28272728292b2c35383f4b4f5e667683969f9f937e685e4c3b2b1905000000000000000000152a3f546a7f94a2aaa59a846f5645321d0900000000000c1c2f404f61697f8d9d9e92847b746e6b6968696a6d7279818c9b9f9483746055443121110000000000000000000d1d2f4050626b7f8d9e9b8b8177716b68666566686d737c86969f8d7f6a604e3d2d1a0400000000000000000c1c2f3f4f60697e8c9d9e94867c756f6b6968696a6d7279818a999c8a7c67513c2712000000000000000008141c2c353c484d5558616467686867656159544b45393023140600000000000000000000000614202d363f4b50585b636567686665635a58524b44373025180c00000000000c1a262d30312d2a23170f1a21273135393c3d3c3a363228221b10010000040f1a21242b35383b3d3d3b39353126221b1004000000000000000000000812191b1c18160f060000050b0d161e21252728272523201c13080800000000000000000000000003111c232631313124211a0f01000000000000000000000000000c1a252d3031312b282115070000000000090f1113283e53687d939a85705b45301b191919191919100e080000000000000000000000000000001020354b6073879c98836e5a4835200b000000000000000000000000000000000000000000000000000000132536455661758498a09f9282776a6158514b46393f3d3d3c3d3e413c494d545d656f7c8799a19e8d7e68604e402f1d0d000000000000000000051a2f445a6f8499afc0b59f8b75604b36200b000000000000122232434f61697b87959e9a908983807e7d7e7f82878e979f988b7f7260564537271503000000000000000000001222334450616a7c88969f968c86807d7b7a7b7d8288919c988b7d6a615042311f0f00000000000000000000112132424f60697b87959f9c918984807e7d7e7f83878e969d938679675f4d392410000000000000000000010e19202b35383a464c4f52535352504c473b3632281b12050000000000000000000000000002101b222e373b3d494e505253514f4d493c3c3631271c1308000000000000000812191b1c18160f06000709151d202427282725211e160a07000000000000070c0e1920232628282624201d1409080000000000000000000000000000040607020100000000000000030a0c0f121312100e0b070000000000000000000000000000000000090f111c1c1c0e0c07000000000000000000000000000000000812181b1c1c15130d0400000000000000000012273c51677c919a85705b45301b060404040404000000000000000000000000000000000000081c304354697e939f8b78624d392816030000000000000000000000000000000000000000000000000000081828384657617482939fa0988980766d6661575855535251525356595a6269717a84909da49c8a7d68604e423121110000000000000000000003192e43586e8398adbbb49f8974604b35200b00000000000004142532434f5e6575808992999e999593929395989d9b958c83796a6054453828190900000000000000000000000415263343505e6676818a939a9b9592918f9193979d968c8278675f5043332313010000000000000000000003142432424f5d6576808a939a9e999693929394989c9a92887e74635b4d40301d0a0000000000000000000000060e1920222933363a3c3e3e3c3a37342a211e160a000000000000000000000000000000000007111c23252c35383b3c3d3c3a38352c27201d150900000000000000000000000406070201000000000001080b0f121312100b09030000000000000000000000060b0d111212110f0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a909a85705b45301b060000000000000000000000000000000000000000000000011426364b6075899e96806b5746321e080000000000000000000000000000000000000000000000000000000a1a29394656606d7e8a99a19e958a837b76706d6a68676767696b6e73787e868f99a19f948679675f4e4231241403000000000000000000000011263c51667c919faaa096806b5443301c080000000000000007142432404c57616b767d84898d90929292918e8a867f786e635b4a4336281a0a0000000000000000000000000007152533404d58616b777e858a8e91929292908d8881796d635a4d4133251505000000000000000000000000061424323f4c58616b767e84898e90929292908e89847d756960564a3d3022120000000000000000000000000000050b0d171f21242728292725221f180c09030000000000000000000000000000000000000000080e101a21232627282725232019120b0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f15172020202020202020202020202020202020202020202020202020110f0900000000000000000000000f24394e64798e9a85705b45301b06000000000000000000000000000000000000000000000000081e3245576b80959e8975614b362513000000000000000000000000000000000000000000000000000000000b1b2938454b606878838f99a19f98908a86827f7d7c7c7d7e8083888d949ba39e958a7f74635b4d41312414060000000000000000000000000f24384c5e6a7f8b908d8274604b3626140100000000000000000614212f39464b5761686f75787b7c7d7d7c7976706a625a4e493d3025180a000000000000000000000000000000071522303a474c5861697075797b7d7d7c7a77726c635b4d493c3023150700000000000000000000000000000614212f3a464c5861686f75787b7c7d7d7b79756f6860564b45382d1f12040000000000000000000000000000000000040a0c0f12131312100c0b040000000000000000000000000000000000000000000000000000060c0e10121311100e0c0600000000000000000000000000000000000000030c121420202020202020202020202020202020202020202020202020202020202020202020202020200d0b050000000000000000000000000000030c131520201f190c0a03000000000000000000000000000000000000000000000000000917222a2d353535353535353535353535353535353535353535353535353526241d12040000000000000000000d23384d62788d9a85705b45301b06000000000000000000000000000000000000000000000000031628394c62778b9f937e685443301c07000000000000000000000000000000000000000000000000000000000b1a2832424e5a626e7a848d959ca49f9b9794929291929396999da69f9a928980776a6055493d3023140600000000000000000000000000091d2f404f616a777b786d6056453218080000000000000000000003111b293339464c535560636667686766646157554d493c352c1c1308000000000000000000000000000000000004121c2a333a474c545660636667686765625a574e4a3d352c1e13050000000000000000000000000000000003111b29333a474c535660636667686766636055534b453831271a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071420272a35353535353535353535353535353535353535353535353535353535353535353535353535352220190d000000000000000000000000071520272a3535342f211e170b0000000000000000000000000000000000000000000000051727353e424a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b382f22120000000000000000000c21364c61768b9a85705b45301b06000000000000000000000000000000000000000000000000000a1f3448596d82979c8673604a35200f00000000000000000000000000000000000000000000000000000000000a161e313c484d5d656f7880878c9296999b9d9e9e9d9c9a97948f8a847d766b62594b44372c1f1205000000000000000000000000000000122232434f596265635b4b45382816000000000000000000000000000b171e29333637444b4e50525352514e4b463938352c211a0f0000000000000000000000000000000000000000000c171f2a333738454b4e51525352504d483c39362d20190e00000000000000000000000000000000000000000b171f29333738454b4e51525352514e4b44373632281d150a000000000000000000050f151720201f1d170e020000000000080e10202020200a040000000000000000000000000000000000000000000000000000000000000000000000000000000a141a1c202014120c03000000031425323b3f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a342b1d0d00000000000000000000031525323c3f4a4a4a443633291b0b000000000000000000000000000000000000000000000f22354552576060606060606060606060606060606060606060606060606060514c402f1d0900000000000000000a1f334658758a9a85705b45301b060000000000000000000000000000000000000000000000000005182a3b4e63798ea1907b66503d2c1a06000000000000000000000000000000000000000000000000000000000003141e2b353f4b4f5b636a72777d808386878889888785827f7a756f6861574c473b3127190f0100000000000000000000000000000000041525323b484c504e493d32281a0a0000000000000000000000000000030b171e21273135383b3d3d3d3c393632282320190e060000000000000000000000000000000000000000000000040c171f21283236393c3d3d3d3b38342b24211a0f0600000000000000000000000000000000000000000000040c171f21273136393b3d3d3d3b39363127211e160a020000000000000000000917222a2d353534322b201202000003111c2326353535351f170c000000000000000000000000000000000000000000000000000000000000000000000000000e1c272f3235352a2720140700000c2032434f5460606060606060606060606060606060606060606060606060606060606060606060606060605e483b2b19050000000000000000000c2032434f5460605f594c4639291703000000000000000000000000000000000000000000152a3e52636c7575757575757575757575757575757575757575757575757575665e4c38240f00000000000000000417293a5e73899a85705b45301b0600000000000000000000000000000000000000000000000000000d21364a5b6f849a99846f5b4935210c000000000000000000000000000000000000000000000000000000000000000e19202e373d494e555962676b6e717273747372706d6a656056524b4639342a1d15090000000000000000000000000000000000000007151d2b34373b38352c1e160a0000000000000000000000000000000000030a0c151d2023262728282724211e160d0c06000000000000000000000000000000000000000000000000000000040a0c151d202326282827252220190e0c070000000000000000000000000000000000000000000000000000040a0c151d2023262728282623201d150b090300000000000000000000051727353e424a4a49463d30200e000011212f383b4a4a4a4a33291c0c00000000000000000000000000000000000000000000000000000000000000000000000a1c2c3943474a4a3f3b322514030012273b4f6169757575757575757575757575757575757575757575757575757575757575757575757575757570594834200b00000000000000000013273c4f616a7575746e615746331e12000000000000000000000000000000000000000000172d42576c818a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7c66513b26110000000000000000001d32475d72879a85705b45301b060000000000000000000000000000000000000000000000000000071a2d3d50667b909f8c79634e3a2917040000000000000000000000000000000000000000000000000000000000000006101b222c35383b484d5256595c5d5e5e5d5d5b5855504b45383633291f180d02000000000000000000000000000000000000000000000d1820222623211a0f0200000000000000000000000000000000000000000001080b0e11121312110f0c090300000000000000000000000000000000000000000000000000000000000000000002090b0e11121312100d0b05000000000000000000000000000000000000000000000000000000000000000002090b0e11121312110e0b0802000000000000000000000000000f223545525760605f5a4e3d2b1700081c2f3f4c506060605e463a291704000000000000000000000000000000000000000000000000000000000000000000001427394a565c6060544f4332200c00142a3f54697f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78624d37220d000000000000000000152a3f546a7f8a8a898375614c41301d0d0000000000000000000000000000000000000000162c41566b8196aba89e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b907b66513b261100000000000000000013283d53687e84806c56412c17010000000000000000000000000000000000000000000000000000000f23384c5e71869c97816c5846331f09000000000000000000000000000000000000000000000000000000000000000000080e1a21232b34373d414446484949484745423f3a363228211e170b0500000000000000000000000000000000000000000000000000050b0d100e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3e52636c7575746c5a46321d000e23384c5d65757575705846331f0a000000000000000000000000000000000000000000000000000000000000000000051a2f43566871757569614f3b27120014293e53697e93a99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8c77624d37220d0000000000000000000b20354b6072849a9f98826d5f4d3b2a1805000000000000000000000000000000000000000f243a4f647a8c9f9e89858686868686868686868686868686868686868686857b654f3a251000000000000000000011263a4e60686f6c62513e291400000000000000000000000000000000000000000000000000000000091c2f4052687d929e8a76614c3726140100000000000000000000000000000000000000000000000000000000000000000000060c0e192022272b2e313233343332302d2a25211e160c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d111416161514110c0a040000000000000000000000000000000000000000010d171c1f202018161006000000000000000000000000000000040d141620202020090200000000172d42576c818a8a8a745f49341f0010263b50657b8a8a8a76614c36210c000000000000000000000000000000000000000000000000000000000000000000071c32475c71868a8a7f69543f2a14000d23384d62788a9fb4a69d8e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c78624d37220d000000000000000000081c3043546277899ea0917c675947341f13000000000000000000000000000000000000000d22364a5c6b80959f8a7a707070707070707070707070707070707070707070655d4b37220e0000000000000000000b1e31424e535a56514434220e00000000000000000000000000000000000000000000000000000000021527374d62778ca8947f695544311d0800000000000000000000000000000000000000000000000000000000000000000000000000050b0d1216191c1d1e1f1e1d1b1815100b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308090b08000000000000060c0e1113141413110d0b0500000000000000000000000000000000000000000000000000000000000000050b0d19202226292b2c2b2926221f180c0a040000000000000000000000000000000001111f2a313435352d2b23170900000000000000000000000000081621282b353535351e160a000000172d42576c82979e89745f49341f0010263b50657b909f8b76614c36210c000000000000000000000000000000000000000000000000000000000000000000071c32475c71879c947f69543f2a14000b2035495a697e93a19d8879787878787878787878787878787878787878787878787878787878787878787874604b35200b000000000000000000011426364859667c919f9e8977624c41311e0e000000000000000000000000000000000000071b2e3e4b6073849a9d8776615b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4f4b3f2e1b08000000000000000000021324313a3d45413e3426160500000000000000000000000000000000000000000000000000000000081d3144556a7f94aa9d8774604b35201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d171c1f201e0c0a04060b0e19202326292a2a29262220190e0c060000000000000000000000000000000000000000000000000000050e1920222b34373c3f4041403e3b37332a221f180c0400000000000000000000000000000d1f2f3d46494a4a423f352717060000000000000000000000041626333d404a4a4a4a32281a0a0000172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000000000000000000000000000000000000000000000000000000000000071c32475c71879c947f69543f2a140006192b3c4f606f8399a697816c63636363636363636363636363636363636363636363636363636363636363605544311d080000000000000000000008182b3b4d5e6c8197a499836e5f4e3c2b1808000000000000000000000000000000000000101d3144556278899e98826e604e3d464646464646464646464646464646463a372e2110000000000000000000000006131e26282f2c2922160800000000000000000000000000000000000000000000000000000000000b20364b6074889dafa5917c67513e2d1b070000000000000000000000000000000000000000000000000000000000000002090b16140b0802000000000000000000000000000000000000000000000001080b0d0c0a04000000000000000000000000000000000000000000000000000000000001111f2a31343533211f171920232c35383c3e3f3f3e3b38342b2320190e0400000000000000000000000000000000000000000000000d18202b35383b484d515455565554504c473a37332a1f170b00000000000000000000000000172a3d4d5a5e606058524535231000000000000000000000000d21334450556060605e453828160200172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000000000000000000000000000706000000000000000000000000000000071c32475c71879c947f69543f2a1400000e1e32424c6177889d9f917c66594d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b443726140100000000000000000000000d1d30404b6075869ca1927d685a48362513000000000000000000000000000000000000011426374859667c909e937e685c4a3928313131313131313131313131313125221b1002000000000000000000000000020b11131a17140e050000000000000000000000000000000000000000000000000000000000081c2e3f52677d92a1999f9a85705c4a36220d0000000000000000000000000000000000000000000000000000000000000a151d202b29201d150900000000000000000000000000000000000000000009151d2022211f170c020000000000000000000000000000000000000000000000000000000d1f2f3d46494a4837332a2b35383c494d5153545453504d483c38352c1f180c000000000000000000000000000000000000000004121d2b343c484d55596266696b6b6a69666158544c473a33291b110300000000000000000000001c31465a6b7475756d64523f2b16010000000000000000000014283d50626b757575705645321e0900172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000000000000000000010a10121d1c0f0d07000000000000000000000000071c32475c71879c947f69543f2a14000000141f344759667c8d9f9e8977625443383838383838383838383838383838383838383838383838383838353126190900000000000000000000000000121e324557647a8b9f9e8978625443301c0e00000000000000000000000000000000000009192b3b4c5e6c81969f8b7a645746321e1b1b1b1b1b1b1b1b1b1b1b1b1b100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d71859b99848b9f8e79644f3b2a1805000000000000000000000000000000000000000000000000000000000a1a273136403f3631271909000000000000000000000000000000000000000919273135373733291d150a0000000000000000000000000000000000000000000000000000172a3d4d5a5e605d4c473a3c484d565a63666869696866625a564d493c332a1c11030000000000000000000000000000000000071523303b484c5a626b72777b7e8081807e7b77716961584c463a2e211406000000000000000000001f34495e74898a8a826d58422d180300000000000000000000162b40556b808a8a8a74604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000000000000000005131e2528323124221b100200000000000000000000071c32475c71879c947f69543f2a1400000004182a3b4c5e6c8196a49a8472604a3e2d23232323232323232323232323232323232323232323232323201d14090000000000000000000000000000031628394a5c697f94a29a8472604a3c2c19090000000000000000000000000000000000000d1d2f404b6074859b9c8675614b41311f0f0006060606060606060606000000000000000000010d171c1f2020181610060000000000000000000000000000000000000000000000000000000000000000000006192b3c4f657a8fa3927d839998826d5947341f0a00000000000000000000000000000000000000000000000000000002152738454b55544b4437271502000000000000000000000000000000000001152737444b4d4c473a31271a0a000000000000000000000000000000000000000000000000001c31465a6b7475736158474b5a626b72787b7e7f7f7e7b77726b635a4c473a2f21130500000000000000000000000000000008162633414d59626d7880878c919495969593908b867f776b61584b3f312414060000000000000000001f34495e74899e97826d58422d180300000000000000000000162b40556b80959f8b74604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c00000000000000000000011323303a3d47463a362e201000000000000000000000071c32475c71879c947f69543f2a14000000000c1d2f404b6074869ca2947f695c4a3928160e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0801000000000000000000000000000000000a1b2d3e4a6072849aa2937e695b4937261401000000000000000000000000000000000000121d3145566278899e98826d5f4e3d2c1a0a00000000000000000000000000000000000001111f2a313435352d2b2317090000000000000000000000000000000000000000000000000000000000000000000b2035495a6e83999e89757c909f8b77624c382715020000000000000000000000000000000000000000000000000000091d314556606b69605544311d080000000000000000000000000000000000081d314455606261584b45382715020000000000000000000000000000000000000000000000001f34495e74898a88766156606b7881878d9193949493908d8780786d61584b3f30231304000000000000000000000000000616263444505f6777828b959c9f9b97949495979b9f9b948a8076655d4e423224140400000000000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000000000000000f1f30414d525c5b4f4a3e2e1a0a000000000000000000071c32475c71879c947f69543f2a140000000000121d32455663798a9f9f8b7a645746321e12000000000000000000000000000000000000000000000000000000000000000000000000000000000000101c3043546277889e9f8a79635544311d0f00000000000000000000000000000000000002152738495a677d919f927d685b493828160200000000000000000000000000000000000d1f2f3d46494a4a423f3527170600000000000000000000000000000000000000000000000000000000000000031729394d62788b9f96816c73879c95806a5645311d0900000000000000000000000000000000000000000000000000000b20364b6074807f73604b36200b00000000000000000000000000000000000b20354b607378766e605645311d090000000000000000000000000000000000000000000000001f34495e74899e8f7a656274808b969b969291919294989e9c968b8276655d4d41302212000000000000000000000000021424344451626b7c89979f9c938b85817f7e7f82868c949d9f95877b68604f4232221200000000000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000000000000061a2c3d4d5f677271645c4a382816030000000000000000071c32475c71879c947f69543f2a140000000000021528384a5b697e93a19c8675614b40301d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364859667c909f9b8573604b3d2d19090000000000000000000000000000000000000a1a2c3c4d5f6c81979e8a79635645321e120000000000000000000000000000000000172a3d4d5a5e6060585245352310000000000000000000000000000000000000000000000000000000000000000a1e3346576c81969f8c7863697e949d8874604b36201100000000000000000000000000000000000000000000000000000b20354b60758a917c66513c261100000000000000000000000000000000000b20364b6075888c8374604b3620110000000000000000000000000000000000000000000000001f34495e74899e917b66778595958b85807d7c7c7d7f8388919b9f97887b675f4d402f1e0e00000000000000000000001020324251626b80919e9e93867d76706c6a696a6d71777f87959f9d8d7e69604f40301e0e000000000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000000000000092135495b677d87867a645645321e0d0000000000000000071c32475c71879c947f69543f2a140000000000000a1a2d3d4e606e8399a497816d5f4d3b2b1808000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3b4c5e6c8197a3947f6a5b4a372715020000000000000000000000000000000000000e1e30414b6075869c9c8674604b41301e0e000000000000000000000000000000001c31465a6b7475756d64523f2b16010000000000000000000000000000000000000000000000000000000000011426364b6176899e99846f5a61768a9e927d67523f2e1c0800000000000000000000000000000000000000000000000000081d3144557489937e69543e29140000000000000000000000000000000000091d3145566b8095937e69533f2f1c0800000000000000000000000000000000000000000000001f34495e74899e927d77869a8a8077706b686766676a6e747c85949f9d8c7d675e4c3c2b19050000000000000000000a1a2e3e4f616b80959e9d8a7e736861585755545557596269757f8c9e9f937e695e4d3c2b18080000000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000000000009192f404e63798c9c9b8775604b3b2a180500000000000000071c32475c71879c947f69543f2a14000000000000000f1f31424c6176889d9f917c6759483626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f404b6074869c9f8b79635544311d1000000000000000000000000000000000000000121e32455663798a9f97816c5f4d3c2c19090000000000000000000000000000001f34495e74898a8a826d58422d18030000000000000000000000000000000000000000000000000000000000081c304354697e93a4907b6550586c81979b86715d4b37230e00000000000000000000000000000000000000000000000000011426495e7388947f6a553f2a150000000000000000000000000000000000021527384d62788b9c86725d4b37230d00000000000000000000000000000000000000000000001f34495e74899e937e859984786a6259565351515255556066737f8c9f9f8c7c665a483520120000000000000000021628384b5c697e939e9d87796860544c463a3f3f403b484c56606a7b899e9f8d7c665a493625130000000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c00000000000000021527374c5e6f8499aaa5947f6a5948341f0f00000000000000071c32475c71879c947f69543f2a140000000000000001141f334758657b8d9f9e8978625443301c10000000000000000000000000000000000000000000000000000000000000000000000000000000000000121e32455663798b9f9b8574604b3e2e1a0a00000000000000000000000000000000000003162838495b687d929f917d675a493727150200000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000b20354b6073879d9c86715d4c4e63798ea28f7a654f3c2b1905000000000000000000000000000000000000000000000000031d32475d728796806b56412b160400000000000000000000000000000000000a2035485a6e8399907b65503b2b1805000000000000000000000000000000000000000000001f34495e74899e9e8899837462594c483b3d3c3c3d37444b5460697c8b9f9e8978624d402f1d0900000000000000091e324556647a8c9f9d8778635b4b433633292a292a2a3438454b5d657a8a9e9e8a78625443301c0900000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c00000000000000081d314455667c90a1999e9e8a77624c3d2d1a07000000000000071c32475c71879c947f69543f2a14000000000000000004182a3a4c5e6b8196a39a8473604b3e2d1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384a5b697e93a195806b5c4a382816030000000000000000000000000000000000000a1a2c3d4e606d82989e8978625544311d1200000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000071b2d3e51667c91a5937d68533f495b6f849a98836e5a4835200b000000000000000000000000000000000000000000060b0d161e31465c718697816c57422c1f170d0b05000000000000000000000000000005192b3c50667b9098836e5948342009000000000000000000000000000000000000000000001f34495e74899ea69a84746056483b342a28272728273136434b5e677c91a09a846f5e4c3824100000000000000417293a4b6074869c9f8b7a645a493d30261f17151415181f28323f4b5c677c919f9a8472604a37271501000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c00000000000004182a3b4b6074879c9983899e97826d5b4a362112000000000000071c32475c71879c947f69543f2a140000000000000000000c1c2f404b6074859ba2947f6a5c4a3929160300000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2d3d4f606f83999f8c7a645645321e11000000000000000000000000000000000000000f1f31414b6175869c9b8574604b402f1d0d000000000000000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000d22364a5c70859a9e8975604b363d51667c919f8b78624d39281603000000000000000000000000000000000000060e192023293236455b708598836d5843363329221f180d03000000000000000000000000000e20354a6073879c8b77624d372715010000000000000000000000000000000000000000001f34495e74899e9e8877625645382b1f1813121112151d2630404d5f6d8298a2917c66513e2d1b0700000000000a1f3346586a7f94a4947f695c4a3c2c1c140804000000050a161e2e3e4d5f6d8297a2917d675544311d08000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c0000000000000b1f344759697f94a28f7a80959f8c79634e402f19090000000000071c32475c71879c947f69543f2a1400000000000000000000111d31455663798a9f9f8b7a645746321e120000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f32424c6177889d9c8675604b3f2e1b0b00000000000000000000000000000000000001131e324657647a8b9f96816b5e4c3b2b19090000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000005182b3b4e64798ea296806b574532354b6073879d96806b5746321e0800000000000000000000000000000000020f1a212b353839464b4f596f8499846e59504c463a37342a1e170b000000000000000000000000071c304354697f9495806a5544311d080000000000000000000000000000000000000000001f34495e74899e97826d594838281a0d05000000000108141c30404c6277899e9b85705c4a36220d00000000011426364c6176899e9c8673604b3e2d1e0f010000000000000002112030404c6176899e9d8774604b35200e000000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c0000000000071b2d3e4c6177899e9a846f76899e9a846f5e4c3727150100000000071c32475c71879c947f69543f2a140000000000000000000002152738495b687e93a19c8675614b41301d0d00000000000000000000000000000000000000000000000000000000000000000000000001080b0f1417191f344759667b8d9f96816c5d4b39291703000000000000000000000000000000000000031629394a5c697e939e907c6659483726140100000000000000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000000b203448596d82989f8b78624d3928304354697f949e8975614b3625130000000000000000000000000000000a161e2c353c484d55576165686e8398857068656158544c473b33291b120500000000000000000000001325364c61768a9d8874604b35200f0000000000000000000000000000000000000000001f34495e74899e97826d583b2b1a0a000000000000000001121f3448596a8095a38f7a644f3a240f00000000081c304354697f94a4917c6755443120100000000000000000000002121f3347586a7f95a5917c67523c2c19060000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c00000000000a22364a5c6d82979f8c7963697e93a2907c665544311d0c00000000071c32475c71879c947f69543f2a1400000000000000000000000a1a2c3d4e606e8399a497826d5f4d3c2b18080000000000000000000000000000000000000000000000000000000000000000000408141c2024292c2e2f2a3b4c5e6c81969f8d7b655746331e11000000000000000000000000000000000000000b1b2d3e4f606e83999e8978625544311d1100000000000000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000021628384c62778b9f98836e5a48351b26364c61768a9e937e685443301c07000000000000000000000000010f1a28323d494e5a626a70767a7d7f869c88807e7a76706962594c46393023150700000000000000000000081f3347586d8297917c67513d2c1a0600000000000000000000000000000000000000001f34495e74899e97826d58422d180000000000000000000005182a3b4d63788da396816b563c2b19050000000b20354b6074879d9c8773604a37261402000000000000000000000004172a3a4c61768a9f9a85705a4935200c0000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000000a1a30414e647a8c9f97816c5b6074869c9c8674604b3a291704000000071c32475c71879c947f69543f2a140000000000000000000000000f1f31424c6176889d9f917c675a4836261401000000000000000000000000000000000000000000000000000000000000020c171f263035393e4143444442404b6074859b9d8775614b402f1b0b000000000000000000000000000000000000000f2032424c6176879d9a8473604b3f2f1d0d000000000000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000091e3245566b8095a38f7a654f3c2b191f3346586c81979c8673604a35200f000000000000000000000003111f2c38454b5b636e787f868b8f92949ca49d95938f8b867f776b61574d413325170900000000000000000004172a3a4f647a8f9a846f5b4935210b00000000000000000000000000000000000000001f34495e74899e97826d58422d1803000000000000000000000d2135495b71869b9d87725a4835200b00000010253b50657a90a5947f695443301909000000000000000000000000000c1f3346586d8297a28d78634d38230e0000001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000031628384d5f70849a9e8976614c55667c90a2937e695846331f0e000000071c32475c71879c947f69543f2a1400000000000000000000000001141f334758657b8d9f9e8978625443301c1000000000000000000000000000000000000000000000000000000000000a151d2a3336434b4f53575959595855515663798a9f97816d5e4c3929170300000000000000000000000000000000000001141f334658647a8c9f95806b5d4c3b2a18080000000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000b21364b6075889e9b86715d4b371e0e17293a4e63798ea2907b66503d2c1a060000000000000000000412212f3d4956606b79838b949b9f9c989599a19f94979b9f9b948a8076675f5043342717050000000000000000000c22364a5c71859b8e79634e39281603000000000000000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000006192c3c556a7f95a58d77624d38220d000006192c3c576c81979f8c77624d36251300000000000000000000000000000417293a50657b90a7947f6a543929160300001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000000091e324556677c91a2937e6958474c5e6f849a9e8976614c3c2c19060000071c32475c71879c947f69543f2a140000000000000000000000000004172a3a4b5d6b8096a39a8473604b3e2e1b0b0000000000000000000000000000000000000000000000000000000d1a27313a474c546064696c6e6f6e6d6a66615b687e939f907b665746331e10000000000000000000000000000000000000000417293a4b5c6a7f949f8d7b6559473626140100000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000091c2f4053687d93a6927d68523f2e1c000c2136495b6f849a99846f5b4935210c00000000000000000012222f3f4c5b6374808b989f9c948d87828083998b7f82858b929b9f95887d6a615245342313010000000000000000071b2e3e53687d9296816c5746321e09000000000000000000000000000000000000001f34495e74899e97826d58422d1803000000000000000000000011273c51667c91a6917c67523c271200000c2035495a73889d9b867059483418080000000000000000000000000000000b20354b6074899e9b85705746321e0a00001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000005192b3b4b6075879d9c8673604b3a404e63798c9f96806b5a493520110000071c32475c71879c947f69543f2a1400000000000000000000000000000c1c2f3f4b6074859ba2947f6a5c4b39291703000000000000000000000000000000000000000000000000000e1d2b38454b58616b74797e81838483827f7b766e666f83999d8776614c3f2e1909000000000000000000000000000000000000000c1c2e3e4a607283999d8877625443301c1000000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000e23384c5e71869c9e8875604b36201100061a2c3d51667c919f8c79634e3a29170400000000000000091d2f404c5d657986969f9d92877f78726d6b7e938b756d70767d85919d9e8d7f6c635242311f0f0000000000000000001021364b6075899e8975614b362110000000000000000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000d23384d62788da895806a55402b1500000e23384d63788da695806a553b2b1800000000000000000000000000000000081d3144556e83989f8a76614b36210c00001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c000008203448596a7f95a1907b65554431364a5b6c81979f8b78634d3f2e180800071c32475c71879c947f69543f2a14000000000000000000000000000000111d31445563798a9e9f8c7a645746331e130000000000000000000000000000000000000000000000000e1e2c3b4856606a7680888e93969899999794908a837b7177889e97816c5d4b3726140100000000000000000000000000000000000000101c3043546177889d9a8472604b3f2e1c0c000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000061a2c3d50657b90a495806a5645321d0900000f20354b6073879d97816c5847331f09000000000000000f24384c5e667c899ca098877d7369625a58677d928b7660586168707c879a9f95816c604e3d2d1a070000000000000000091e3245566b8196937d68533f2e1b080000000000000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000b20354a6075899e98826d58432e18000013283d52687d92ab907b65503b2610000000000000000000000000000000000115273754697e93aa907b66503b261100001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c0008182e3e4d62788a9f99836e5d4b37262d3d4c6177899e99836e5d4b36251300071c32475c71879c947f69543f2a1400000000000000000000000000000002152737495b687e93a19c8775614b41301e0e000000000000000000000000000000000000000000000b1b2c3c495962748089959d9d97928e8c8b8b8d90949990857a7c919f8d7a645544311d0a00000000000000000000000000000000000000001325364759657b8d9f947f6a5d4b3a2a17040000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000c2135495b6f84999f8b77624c382815020000081c304354697f949e8a76614c3726140100000000000011263b51667c8b9e9f9482766760544d4851667b918c77624c4c525f6776849a9f927d685b4a36210f0000000000000000031628384d63788c9b86715d4b37220c0000000000000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000000071c30435473889d9a84705a45301b0002172c41576c81969f8b76614c36210c00000000000000000000000000000000000f243a4f64798fa4947f6a553f2a1500001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c001325364b5c6d82989f8b78624d3f2f191f3447596a7f94a18f7a655443301c0a001c32475c71879c947f69543f2a140000000000000000000000000000000009192c3d4e606e8399a597826d5f4d3c2b1909000000000000000000000000000000000000000003172939495a637785959e9d9388827d79777676777b7f858e9a8c8083999c8673604b382816020000000000000000000000000000000000000008182a3a4b5d6a80959f8c7b655847331f140200000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000004172a3a4e63798c9f98826d5948341a0a000000011426364c61768a9f947f695544311d080000000000001b30465b70859b9e8c7f6d61574b43363b50657a908d78634d38414d586174839a9f8b79634e3d2d1a0700000000000000000a2135495b6f849a8f7a644f3a2a180400000000000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000000001325365c71879c9c86715c47311c00011426365a6f849a9d88735746331e0a00000000000000000000000000000000000c21364b61768ba698826d58432d1800001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c071c304354647a8fa095806b5a49352111182a3b4b6075879d9b8572604a382816031c32475c71879c947f69543f2a1400000000000000000000000000000000000e1f31424c6176879da0917d675a4837261401000000000000000000000000000000000000000a1e3346576378889ba199887e756d676462606162656a7079849195848a9e937e685645321e0800000000000000000000000000000000000000000c1c2e3f4b6073849a9d8776614c4332201000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000a1f3347586c8197a38f7a644f3b2b180000000000081f3347586c82979d8774604b3520100000000000000e23394e637989897c69614c463930263a4f64798f8e79644e39303a47566176879d99836e5c4a362109000000000000000006192c3c51667c9198826d5947341f0800000000000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000000001b30465b70859b9c87725d47321d00081c30435473889d9a856f5a3929170300000000000000000000000000000000000a1e33465773889d9b86715b37261401001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c1629394a6072859b9d8875614b3c2b19030c1e324556677d91a3927d675645321e0d1c32475c71879c947f69543f2a14000000000000000000000000000000000000131f334758657b8c9f9e8978625544311d10000000000000000000000000000000000000081b2e3f4b6175869ca0978376696056524e4d4b4b4d50555c646f7c899a8b9f9d8875604b362513000000000000000000000a0a0a0a0a0a0a0a0a0a00111d3144556277899e99836f614f3e2d1b0b000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000011527374c61768a9f9b85705c4a361d0d00000000000417293a4e63798ea2917c67513e2d1b0700000000000c21364a5b637777665e4f4333291c23384e63788d8f7a65503a252a384758667c909f8c79644e3727150100000000000000000e20354b6074879d8a77614c36261401000000000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000000051b30455a70859a9d87725d48331d000b20354b60758a9f97826d57422d18000000000000000000000000000000000000031729395b70859b9e88735544311d08001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36210c1e324657687d92a3927d675746321e0e00021628384d5f70859b9d8775604b3b2b181c32475c71879c947f69543f2a1400000000000000000000000000000000000004172a3a4b5d6b8095a39a8473604b3e2e1b0b00000000000000000000000000000000000e22374b5d6e8398a397827261584b453839373636383b3e4a4f5e6679869ca7a6937e695443301c070000000000010a10121f1f1f1f1f1f1f1f1f1f1f1f1426374859667c8d9f947e695c4a3a2917040000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000081d3144556a7f94a6917c67523e2d1b000000000000000c21364a5b6f849a9a85705c4a36220d0000000000071a2d3d4a596262594c40321e170d22374d62778c907b66513b261a2a3a4c5e71859b97826d5544311d080000000000000000081d3144556a7f94947f6a5443301c08000000000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000000061c31465b71869b9c86715c47311c000c22374c61778cab95806b56402b1601000000000000000000000000000000000000192f44596e84999f8a75604b35200b001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a08b76604b36210b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c3621192c3c4b6175889d9b8572604a3928160000000a1a30414f647a8d9f957f6a594834201c32475c71879c947f69543f2a14000000000000000000000000000000000000000c1c2e3f4b6074859ba2957f6a5c4b39291703000000000000000000000000000000071b2d3e4f657a8fa09b85746054463a32282422212122252d36404c5b6378899eab9c8773604a35200b0000000005131e252734343434343434343434343434342b3b4c5e6b80969f8b7a645846331f140000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000b20354b6074889d9d8874604b35201000000000000000071a2d3d51667c91a28e79644f3b2a180500000000000f1f2d3b484c4c483b2f2214030c21364b61768b917c67523c27121c2f4053687d939e8975604b35200b0000000000000000011426374c62778b9d8773604b35200e000000000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000000031629395d72879c9a84705b45301b000e24394e63798ea3947e69543f291400000000000000000000000000000000000002182d42576d8297ab8c77624c37220d001f34495e74899e97826d58422d180300000000000000000000162b40556b8095a98b74604b36200b00172d42576c82979e89745f49341f0010263b50657b90a18b76614c36212035495a6b80959f8d7a645443301b0b000000001322374b5c6d82989e8a77624c3e2d1a32475c71879c947f69543f2a140000000000000000000000000000000000000000111d31445563798a9e9f8c7a645746331e130000000000000000000000000000000d22364a5c70859a9f8c7863564536291d150f0d0b0c0d101b222f3d495a657b8d9fa5907b65503b251000000001132330393d49494949494949494949494949494949404b6074859b9d8776614c42311c0c00001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000081b2e3f52677c92a6947f6a5544311d0800000000000000000f20354b6074879d98826d5947341f0a0000000000010f1d2b343737342a1d1204000b20354a60758a937d68533e28131223384d62788da68e79644f39240f000000000000000000091f3447596e8398907b66513c2c19060000000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000a1e32465773889d99836f59442f1a000f253a4f647a8fa4927d68533d281300000000000000000000000000000000000001162c41566b8196a28d78634d38230e001f34495e74899e97826d58422d180300000000000000000002172c41576c81969f89745645311d0900172d42576c82979e89745f49341f0010263b50657b90a18b76614c36212f3f4d62788b9f97826d5c4a3625130000000000071b2e3e4d62788a9f97826d5c4a362132475c71879c947f69543f2a14000000000000000000000000000000000000000002152737495b687d92a09d8776614c41301e0e00000000000000000000000000000f24394f64798ea298826d5b493828180c0200000000000007121f2c3c4b5d6e8298aa97816c573929170300000a1e30414d525f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f556278899e98826e604e3a291704001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000d22374b5d70859b9f8a77614c372715010000000000000000081d314455697f949f8b77624c382815020000000000000d182022221f180d000000071c3043547489947e69543f29140b2035495a73889d937d68533e281300000000000000000005182a3b50657a8f99846f5a4935200a0000000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000c21364b61768b9f97826d58422d180010253a50657a8fa5927d67523d281200000000000000000000000000000000000001162b40566b8095a38e78634e39230e001f34495e74899e97826d58422d180200000000000000000001142637586d82989d88735e3827150200172d42576c82979e89745f49341f0010263b50657b90a18b76614c3626374b5d6e83999e8977624c3e2d1808000000000000102035485a6b80959f8c79644e402f32475c71879c947f69543f2a1400000000000000000000000000000000000000000009192c3c4e606e8298a598826d5f4d3c2b190900000000000000000000000001162b40566b8095a78e79644f3c2c1a0a000000000000000000000e1e2f3f4d63788b9f9c87725746331e0a00001025394d5f677474747474747474747474747474747474747474747c91a0937e685847331f0a001f34495e74899e97826d58422d1803000000000000000000000000000000000000000005192b3c4f647a8fa397826d5847331909000000000000000000011426374c61768a9f95806a5645321d0900000000000000050b0d0d0b0500000000001325485d7388957f6a55402a1506192b3c5c71869b95806b56402b16000000000000000000000d23374b5d71869c8c78624d3828160200000000000000000000000000001f34495e74899e97826d58422d180300000000000000000000000f253a4f647a8fab937e69543e29140011263b50667b90a5917c67523c271200000000000000000000000000000000000000152b40556a8095a48e79644f39240f001f34495e74899e97826d5840302010020000000000000000081d31445570859b9c86715c47311c0000172d42576c82979e89745f49341f0010263b50657b90a18b76614c36314455657b90a1947f6959473420100000000000000005192b3c4b6175889d9a846f5e4c3727475c71879c947f69543f2a14000000000000000000000000000000000000000000000e1e31414c6176879da0927d675a4937261401000000000000000000000004172a3a5b70859b9e8974604b35200e000000000000000000000000112035495a70859aa58b76614b36210c000012273d52677d8a89898989898989898989898989898989898989898a9eb19e8976614c37210c001f34495e74899e97826d58422d180300000000000000000000000000000000000000000b2035485a6e8398a28e79644e3a2a180000000000000000000000091f3347586d82979d8875604b3620110000000000000000000000000000000000001d32475c728796816b56412c16001a2f455a6f849a97816c57422c1700000000000000000000081c2e3f53687e9396806b5645321e0900000000000000000000000000001f34495e74899e97826d58422d18030000000000000000000004172a3a53687e93aa8f7a654f3a25100011263b50667b90a5917c67513c271200000000000000000000000000000000000000152a40556a7f95a48f79644f3a240f001f34495e74899e98836e5e4c3e2e211305000000000000000b20354b6075899f98826d58432d180300172d42576c82979e89745f49341f0010263b50657b90a18b76614c363a4b6073869c9c8774604b3b2a180200000000000000000e1e324657687d92a2917c66554431475c71879c947f69543f2a140000000000000000000000000000000000000000000000131f334658657b8c9f9e8978625544311d1000000000000000000000000a1f33475874899e99836e5443301c0800000000000000000000000006192c3c54697e94a48e79644f39240f000013283d52687d929b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8f7a644f3a250f001f34495e74899e97826d58422d180000000000000000000000000000000000000000031629394d62788b9f9a84705c4a361c0c000000000000000000000004172a3a4e63798ea2927d67523f2e1c0800000000000000000000000000000000061c31465b718697826c57422d1706192b3c5b70869b97826d57422d1800000000000000000000001121364b6176899e8875604b36211000000000000000000000000000001f34495e74899e97826d5842312111020000000000000000000a1f3347586e83999f8a76604b36210b0010253b50657a90a5927c67523d271200000000000000000000000000000000000000162b40556b8095a38e79634e39240e001f34495e74899e9f8d7c665c4b3f3120190d07000000020a1a2d3d50657a8fa9937e69533e29140000172d42576c82979e89745f49341f0010263b50657b90a18b76614c364758687e93a1907c665645311d0d000000000000000000031629394b6073869c9c8674604b3a475c71879c947f69543f2a1400000000000000000000000000000000000000000000000417293a4b5d6b8095a39b8573604b3f2e1b0b000000000000000000000c21374c61778ca896816b56362614010000000000000000000000000010253a50657a8fa5907b65503b2610000011263c51667c86868686868686868686868686868686868686868686868686857a644e39240f001f34495e74899e98826d583f2e1b08000000000000000000000000000000000000000a1e3246576b8096a5917c66513d2d1a000000000000000000000000000c21364a5b70859a9b86715d4b37230e00000000000000000000000000000000051a30455a6f8598836d58432e180b2035495a72889d96816c56412c1700000000000000000000000a1e3246576c8197927d67523e2d1b07000000000000000000000000001f34495e74899e9a846f604e3f2f2012030000000000000004182a3a4c61778b9f9a85705745321e090010253a4f657a8fa4927d68533d281300000000000000000000000000000000000001162b41566b8096a38d78634e38230e001f34495e74899ea79e8a7a655d4e42342b211a151414151d28384a5b6d8298a28e79634e39230e0000172d42576c82979e89745f49341f0010263b50657b90a18b76614c3d4c6176899e99846f5e4c38271500000000000000000000000b1c304354657b90a1937e695847475c71879c947f69543f2a140000000000000000000000000000000000000000000000000c1c2e3f4b6073859ba395806a5d4b3a2917040000000000000000000d23384d62788da2947f6a553f2a1500000000000000000000000000000e23384e63788da3917c66513c271100000f24384c5e667171717171717171717171717171717171717171717171717171645c4a36210d001f34495e74899e9d87725d4b37220d000000000000000000000000000000000000000c21364b6176899b9b8773604b35200f00000000000000000000000000071a2d3d51667c919b8f7a654f3a25100000000000000000000000000000000004192f44596e8499846f59442f1a1b2b3c4d62788b9f937e69543e29140000000000000000000000031629394e63798e9b85705c4a36220c000000000000000000000000001f34495e74899ea2937e685d4b3e301e160b05000000030b161f344759697e93a8937e695339281603000f24394f64798ea4937e69533e291400000000000000000000000000000000000002172c42576c8197a28d77624d38220d001f34495e74899e9e89968a7b68604d483b362d2b292a273139455663798b9f9a85705b4935210c0000172d42576c82979e89745f49341f0010263b50657b90a18b76614c495b6c81969f8b79634e402f1a0a0000000000000000000000011426364b5d6f83999e8976614c3c5c71879c947f69543f2a1400000000000000000000000000000000000000000000000000111d31445562788a9e9f8c7b655846331f130000000000000000000e23384d63788da2937e69533e291400000000000000000000000000000d22374d62778ca2907b66503b26110000091d2f404c515c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4e4a3e2d1a07001f34495e74899ea58f7a654f3b2b180500000000000000000000000000000000000011273c51667c8586857b655544311d0800000000000000000000000000000f24394d5e6b808686806b55402b160000000000000000000000000000000003182d43586d829885705a45301c2a39485a6a7f95a78f7a65503a25100000000000000000000000000b21364a5b70859a8e79644f3a2917040000000000000000000000001f34495e74899ea59d8b7b655c4c4032291f18151415171e2832444c6177899e9e8976614c36210c00000d22384d62778da295806a55402b1500000000000000000000000000000000000004192e43596e8398a88b76604b36210b001f34495e74899e978281968b7e6e62594e4a3e403e3f37444b576074859ba2927d67523d2c1a060000172d42576c82979e89745f49341f0010263b50657b90a18b76614c4e63798b9f96816c5b493522120000000000000000000000000008182f3f4e63798b9f96816c5b495c71879c947f69543f2a140000000000000000000000000000000000000000000000000001152737495a677d92a09d8776614c41301e0e00000000000000000d22374c62778ca9957f6a55402a1500000000000000000000000000000f24394e64798ea38f7a644f3a250f00000012222f383c464646464646464646464646464646464646464646464646464639362d200f00001f34495e74899ead97826d59483420100000000000000000000000000000000000000f24394c5e66717170655d4b372614010000000000000000000000000000091d304051626b71716b62503d28140000000000000000000000000000000002172c42576c819786715b4631303a47576278899e9e8874604b35200b000000000000000000000000071a2d3d52677c9197826d5846331f080000000000000000000000001f34495e74899e9d878d8a7b665e4b4639342a2a292a293339464b626d8298a695806b5846331f0a00000b21364b60768ba797816c57422c17000000000000000000000000000000000000011527375a6f859a9e89745645321e09001f34495e74899e97827481959283786c645c585554545655606775839aa39a8472604a35200f000000172d42576c82979e89745f49341f0010263b50657b90a18b76614c5e6f84999e8876614c3d2c1a040000000000000000000000000000112135495b6c81969f8b78634d5c71879c947f69543f2a14000000000000000000000000000000000000000000000000000009192c3c4d5f6e8298a598826d5f4d3c2c1909000000000000000b20354b60758a9f97816c573a2917040000000000000000000000000010263b50657b90a78c77624d37220d00000004121d2426313131313131313131313131313131313131313131313131313124211a0f0100001f34495e74899ea29a8a77624d3e2d1c0c0000000000000000000000000000000000091d30404c515c5c5b504b3f2e1909000000000000000000000000000000001222344451565c5c55504433210d0000000000000000000000000000000001162b41566b809687725d4736414d586175849aa4957f6a5544311d08000000000000000000000000000f20364b6074889d8a76614c3625130000000000000000000000001f34495e74899e97827f948b7c6c61574c473b3f3e3f39464c57616c8095a09d8775614b3a2917040000091e32455674899e99846e59372614010000000000000000000000000000000000081d31445572879c9c87725d38281603001f34495e74899e97826d6c7f8d998b8179726d6a69696b6e757d879aa29d8978625443301c07000000172d42576c82979e89745f49341f0010263b50657b90a18b766155667c90a1937e685846331f0f000000000000000000000000000000061a2c3d4c6176899e99836e5d5c71879c947f69543f2a140000000000000000000000000000000000000000000000000000000e1e31414c6176879da0927d675a4937271501000000000000081d31445571869c9a85705847331f0900000000000000000000000005182a3b546a7f949e8974604a35200b0000000000090f111c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0f0d07000000001f34495e74899e9a8596816c5c4a3a2a1c110c0b0c0f1312100a010000000000000000122230393c4646463b372e21110000000000000000000000000000000000041626343d414646403d332616040000000000000000000000000000000000152a3f556a7f9488735e454b525f6776849aa29c8674604b3727150100000000000000000000000000081d3144556b8095937e695443301c0700000000000000000000001f34495e74899e97826d819591817569625957555355575761677581959e9f8c7b655746331b0b000000021628385b71869b9c87715544311d0800000000000000000000000000000000000b20354b60758a9f99846f59442f1a00001f34495e74899e97826d616a7c8896968e8783807e7f808389929da1998879635a4836251300000000172d42576c82979e89745f49341f0010263b50657b90a18b76616074869c9b8573604b3a291701000000000000000000000000000000000f1f334758697e94a18f7b655471879c947f69543f2a1400000000000000000000000000000000000000000000000000000000131f334658657b8c9f9e8a78625544311d1100000000000001142637576c81969f8b76614c3727150200000000000000000000000a1f34485970859a99846f5443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e74899e937e878c7a6458473a2e24222021242927241d12050000000000000004121d242731313025231c1103000000000000000000000000000000000000081621292b31312b2821160800000000000000000000000000000000060813293e54697e93897454566067717d889ba39e8a796356453219090000000000000000000000000000021527374d62788b9c8773604a35200d00000000000000000000001f34495e74899e97826d6c809296887f77706c6a696a6c6f767d87969f9f8d7e685d4b3929170000000000182d43586d82989f8a75604b35200b00000000000000000000000000000000000e23384d63788daa96806b56412b1601001f34495e74899e97826d585e6676818a949b9895939496999e9d978f8378635b4a3c2b180800000000172d42576c82979e89745f49341f0010263b50657b90a18b7661697f94a08f7b655443301c0c000000000000000000000000000000000004172a3a4b6074879c9b85736071879c947f69543f2a14000000000000000000000000000000000000000000000000000000000417293a4b5d6a8095a29b8573604b3f2e1c0c00000000000010253b50657b90a4927d685544311d10010000000000000000000a1a2b3c4c62778b9f937d6853362513000000000000000000000000000000000000000000000000000000000000000001080b0b0902000000001f34495e74899e927d7e93867661584b3f39373536393e3c39302312010000000000000000090f111c1c1b100e08000000000000000000000000000000000000000000040e14161c1c16140d04000000000000000000000000000000070f1a2125303d52687d928a75656d757d86919ea39b897a645b4a38281500000000000000000000000000000000092034485a6e8399907b65503b2b1905000000000000000000001f34495e74899e97826d626b7d8998948b86827f7e7f81848a929da29a8a7d68604e3f2e1b0b0000000000152a3f546a7f94a98e79644e39240f000000000000000000000000000000000012273d52677c92a7927d67523d281200001f34495e74899e97826d584c57616c777f868b8f919291908e88827a6e625a4a3d2d1e0e0000000000172d42576c82979e89745f49341f0010263b50657b90a18b766177899e98836e5d4b362614000000000000000000000000000000000000000c1d314455667c91a2927d6871879c947f69543f2a1400000000000000000606060606060606060606060606060606060606000b1b2e3f4b6073859ba395806b5d4b3a29170400000000000b20354a6073879c9c8774604b3f2e1f1308000000000000030d1a2838485a6c81969e8976614c37210c0000000000000000000000000000000000000000000000000000000000000008141c20201d150a0000001f34495e74899e917c73869b8476655d534e4c4b4c4f53514d41301d0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212c3536434a51677c918b767b8289929ca49e938579645c4b3d2d1a0a0000000000000000000000000000000005192b3c50657b9099836e5948342009000000000000000000001f34495e74899e97826d585f6777828c969b9794939496999f9e988f8479675f4e4131211100000000000010253a4f657a8fa9937e68533828150200000000000000000000000000000006192c3c576c8196a58d78624d38230d00001f34495e74899e97826d5839464c59626a71767a7c7d7c7a78746d655d4d483c2d1f0f000000000000172d42576c82979e89745f49341f0010263b50657b90a18b766d82979f8a78624d3f2e180800000000000000000000000000000000000000021527374c5e6f849a9d887571879c947f69543f2a1400000000010b11131c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1d3144556278899e9f8c7b655846331f130000000000071c304354667c91a2937e695d4b3d30231c110e0c0a0c0e161e2a38455662788b9f95806b5847331f0a00000000000000000000000000000000000000000000000000000000000912182630353631271a0a00001f34495e74899e907b667b8c9b877b7069636160616468675f4d39240c0000000000080d0f20202020202020202020202020202020202020202020202020202020202020202020202017150f0500000000000000000000000009151d2d363d494e5460656c7b909e8890979ea49c93897e73635b4b3e2e1f0f0000000000000000000000000000000000000d20354a6073879c8b78624d372715020000000000000000001f34495e74899e97826d584d59626d7980878c8f919292908d88827a6f635b4d41312313030000000000000b20364b60758a9f98836e5645321d090000000000000000000000000000000c2035495a71869c9d87725a4835200b00001f34495e74899e97826d5842333b474c55576164676867656360544f4b3f352b1e0f01000000000000172d42576c82979e89745f49341f0010263b50657b90a18b767a8c9f957f6a5a48342111000000000000000000000000000000000000000000091930404e64798c9f958071879c947f69543f2a1400000005131e25283131313131313131313131313131313131313131313131312637485a677d92a09d8776614c41311e0e00000000001325364d5e70849a9f8b7b655c4d41372e2623211f212328323b47566074859b9e8a76614c3a29170400000000000000000000000000000000000000000000000000000008121d243036434b4b4538271502001f34495e74899e8f7a656a7f949d90857e79777576797e7d67513a2a1704000002101b22253535353535353535353535353535353535353535353535353535353535353535353535352d2a221709000000000000000000000b1927313d4a4e5b636b737a81899ea79ea59d968e867e75696055493d2e201001000000000000000000000000000000000000071c304354697e9495806a5544311d080000000000000000001f34495e74899e97826d583b484d5b636b72777a7c7d7d7b78746d655d4e493d3023130500000000000000091d3145566f84999e8975604b36200e0000000000000000000000000000001325364d63788da497826c573c2b190600001f34495e74899e97826d58422d2a343739464b4f515352504e4a4336372e20190e0000000000000000172d42576c82979e89745f49341f0010263b50657b90a18b76849a9d8775604b3c2b1903000000000000000000000000000000000000000000001221364a5c6d82979f8a77869c947f69543f2a140000011323313a3d46464646464646464646464646464646464646464646464646463c4d5f6d8298a598826e5f4e3c2c180800000000081830404e6379899e9e887a675f4f4b3f3b383633363839454b59627482989f937e685847331c0c000000000000000000000000000000000000000000000000000008111c232f38404d5460605645311d09001f34495e74899e8f7964616b80929e9a938e8c8a8b8e938a745847331f0a000010202e373a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a423e3527170500000000000000000b1b2937444b5b636e7980888f979ea7a0988f878179726861574b44372c1f100200000000000000000000000000000000000000001325364c61768a9d8874604b36200f0000000000000000001f34495e74899e97826d5842343d494e5658616567686766636054504b3f352c1f130500000000000000000215273853687d92a8917c66513d2c1a0600000000000000000000000000071c3043546a7f94a6907b65503b26100000001f34495e74899e97826d58422d181f222933363a3c3d3c3b39353025221b1005000000000000000000172d42576c82979e89745f49341f0010263b50657b90aa927c92a2917c675645321d0d0000000000000000000000000000000000000000000000071a2d3e4c62778a9e9882859b947f69543f2a1400000b1e31424e535b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b6176879da0927d685a493625130000000000122135495b657b8c9f9e8a7d6f655d56504d4c464c4e5157606a778498a097816d604e3a2a170000000000000000000000000000000000000000000000000007101b222f38404c515e667574604b36200b001f34495e74899b8e79634e626b7d89959da6a1a0a1a4a48c77614c37210c00081b2e3e4b4f60606060606060606060606060606060606060606060606060606060606060606060606057524535220f000000000000000b1b29394655606a79838c969da69e97a098827a736b645c534b46393126190e00000000000000000000000000000000000000000000081f3346586d8297917c67523d2d1a0700000000000000001f34495e74899e97826d58422d2c35383a474c50515352514e4b4336372e211a0f01000000000000000000000c21374c61768a9f99846f5b49352110000000000000000000000000000d20354a6073879c9d8874604b35200b0000001f34495e74899e97826d58422d180b0d171e21252728272523201c1308080000000000000000000000172d42576c82979e89745f49341f0010263b50657b909f8b889d9a84705f4d382816000000000000000000000000000000000000000000000000000f203448596a7f959f8d889d947f69543f2a14000011253a4e6068717171717171717171717171717171717171717171717171717171717171717a8a9f9e8a78635443301c0700000000061a2c3d4b5d677d8a9d9f92847a716b656361586163676d757f899b9f978374604b42311c0c000000000000000000000000000000000000000000000007101b222e373f4b505e66717c867a644e39240f001b30455b7084868273604b505f677780888e919392908d8677624c37220d000d22374b5c647575757575757575757575757575757575757575757575757575757575757575757575756c63523e2a150000000000000316283946576173808b989fa29a92898297907b6560544f4a3e3632281d140900000000000000000000000000000000000000000000000417293a4f64798e9a85705b4a36210b00000000000000001f34495e74899e97826d58422d1a21232a33373a3c3d3d3b38353026231c11060000000000000000000000000a1f3347586d82979f8c78634e3e2e1b0b00000000000000000000000d1d314151667b90a595806a5544311d080000001f34495e74899e97826d58422d180300030a0c0f121312100e0b070000000000000000000000000000172d42576c82979e89745f49341f0010263b50657b90aa9f9d9f8c79644e41301a0a0000000000000000000000000000000000000000000000000005182b3b4b6075879d9f9da6947f69543f2a14000013283d53687e85868686868686868686868686868686868686868686868686868686868686858a9ea89b8572604a35200b00000000000f1f2e3f4d5f677a87969f9a8f86807b78767576787c8288949e9d92817360564532241400000000000000000000000000000000000000000000060f1a212d363f4b4f5d65707b85918e79644e39240f00192d42556670716e605544414d59626b73787c7d7d7b7871625948341f0b000f253a4f647a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816c57422d17000000000000091e324657617584959fa29a8f857d75758b917c67514336362d211e160b01000000000000000000000000000000000000000000000000000c22364a5c70859b8e79634e39291603000000000000001f34495e74899e97826d58422d180c0e181f22252728282623201c14080800000000000000000000000000000417293a4e64798ea198826d5c4b392818080000000000000000000a1a2b3b4e6071859b9f8b77624c372614010000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000172d42576c82979e89745f49341f0010263b50657b90a5b4a797816c5c4a3623120000000000000000000000000000000000000000000000000000000d1e324556677d92a3b3a9947f69543f2a140000152a3f556a7f949b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ea8a7a38f7a65503a2510000000000001112130414d5c6476818a969e9c96908d8b8a8b8d91989e9d94887d6c605545382816060000000000000000000000000000000000000000060f1a212d363e4a4f5d65707b85909b9c8c77624c37220d0012263848555b5c594b4437303b474c565b6366686866635b4c483b2a1805000f253a4f647a8f9d94929292929292929292929292929292929292929292929292929292929292929c97826c57422d170000000000081c2e3f4b6175849aa29f93847a706760758a927d68523d25221b100903000000000000000000000000000000000000000000000000000000071b2d3e52687d9296816c5746321e0a000000000000001f34495e74899e97826d58422d180300040a0c10121312110e0b080100000000000000000000000000000000000c22364a5c6e83999f8c7a6457463626180c030000000000040e1a28384859687d92a396816c5948341909000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000172d42576c82979e89745f49341f0010263b50657b90a5b39e8977614c3d2d1a05000000000000000000000000000000000000000000000000000000031628384a6072859bb0a9947f69543f2a140000152a3f556a7f929292929292929292929292929292929292929292929292929292929292929292929292927d67523d2712000000000000031223303e4a58616c7781899095999c9d9e9d9c99958f887f75685f4b4437281a0a00000000000000000000000000000000000000050e19202c353d4a4e5c646f7a84909b9c92867c665948341f0b00081a2a38424546433531271d2a34373d494e515353514e493d342a1d0d00000f253a4f647a8f947f7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d8697826c57422d1700000000000e23374b5d6c8197a29f8b7e70645c525e7489937e69533e291407000000000000000000000000000000000000000000000000000000000000001021364b6075889e8976614b362110000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000000071b2d3e4e63798b9f9c8675615443362a1e160e0c0b0c0f181f2c3845566278899e9e8976614c3b2b1800000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000172d42576c82979e89745f49341f0010263b50657b90a5a4937e695847331f0f00000000000000000000000000000000000000000000000000000000000a1c304354657a8fa0a7947f69543f2a1400000e24394e63797d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d78624d38230d000000000000000512202d3a464c59626c757b8084878889888784807a746960564e413127190a000000000000000000000000000000000000050d19202c353d494e5b636e7a848f9a9d92867d73665e4c3b2a180500000c1a262d30312e201d150d181f222c36393c3e3d3b38352c1f180d0000000f253a4f647a8f8d786868686868686868686868686868686868686868686868686868686868686f8497826c57422d170000000005182a3b4f657b8d9f9f8b7b68604f4b3e5d7388947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000091e3245566b8096937e68533f2e1b080000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000102135495b6a7f94a29882726054473a322824212122242a343c49566074859ba0927d675847331d0d00000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000172d42576c81979e89745f49341f0010263b50657b9092918673604b3a2a18010000000000000000000000000000000000000000000000000000000000001325364b5d6e829192927f69543f2a1400000c21364a5b6367676767676767676767676767676767676767676767676767676767676767676767676767625a4935200b0000000000000000010f1c29333b484d5660666b6f71737473716f6a6560544b4538311d15090000000000000000000000000000000000040d181f2b343c494d5b636e79838e999d92877d736760544c402f1d0d000000000812191b1c190b080100050b0f1a21232728282623211a0f05000000000f253a4f647a8f8d7863525252525252525252525252525252525252525252525252525252525a6f8597826c57422d17000000000b1f3448596f849aa1917d675d4e4237475c718795806b56402b160100000000000000000000000000000000000000000000000000000000000000021628384d62788c9c86715d4b37220c0000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000061a2c3d4b6073849aa097817261584b463939373637393a474c5a6374849aa298826d5f4d3a2a170000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000172d42576c81979c8a745f49341f000d22374c62777d7d7c77615544311c0c0000000000000000000000000000000000000000000000000000000000000008182e3f4b60757c7d7d79634e39230e0000071a2d3d4a4e525252525252525252525252525252525252525252525252525252525252525252525252524d493c2b1906000000000000000000000c171f2b3438454b5056595c5e5e5e5c5955504b433632281a130100000000000000000000000000000000040c181f2a343c484d5a626d79838c999d93877d746860554b43362f2212000000000000000406070400000000000000060c0e111313110e0c060000000000000f253a4f647a8f8d78634d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d455a6f8597826c57422d17000000000d22374c62778b9f99846f5f4d3f3131465b708696816c57412c170200000000000000000000000000000000000000000000000000000000000000000a2035495a6f84998f7a654f3b2a180400000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000e1d3144556176869c9f978377696157524e4c4b4c4f5359616b78859aa29a8474604b41301c0c0000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000152a40556a7f868786705b46311b000b1f34485962676767615947372715000000000000000000000000000000000000000000000000000000000000000000101e32455660666767635b4935210c0000000f1f2d36393d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d38352b1e0e000000000000000000000000040d18202731363b4044474849484744403a3530261e160a00000000000000000000000000000000030c171f2a333b484c5a626c78828c989d93877e746860554b44373026181204000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d3828282828282828282828282828282828282828282828282830455a6f8597826c57422d170000000012273c51677c91a8907b665041302130455a6f8598826d58432d1803000000000000000000000000000000000000000000000000000000000000000006192c3c51667c9198836d5947341f0900000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000000000001142637475862778699a199897e756d676361606164686e77808b9ba0978475615645322313000000000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000013283c50616a7171706756422e190005182a3b484c5252514c473b2a190900000000000000000000000000000000000000000000000000000000000000000003162838454b5152524e493d2c1a06000000010f1a2124282828282828282828282828282828282828282828282828282828282828282828282828282320190e000000000000000000000000000000050a151d20262b2f32333433322f2b25201c140802000000000000000000000000000000030b161e29333a474c59626c78828b989e94887e756860564b443731261c14080000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d3823131313131313131313131313131313131313131313131a30455a6f8597826c57422d1700000000152a3f556a7f949e8975604b3620192f44596e8499836e59442e19040000000000000000000000000000000000000000000000000000000000000000000e20354b6073879d8a77614c37261401000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000919293a4859627683939e9e9389827c79767677797d838a959f9d91827461574638281505000000000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000d20334350555c5c5b564938261300000d1d2a34373d3d3c37342a1d0c00000000000000000000000000000000000000000000000000000000000000000000000a1a2832363c3d3d39352c1f0f000000000000070c0e121212121212121212121212121212121212121212121212121212121212121212121212120d0b0600000000000000000000000000000000000002090b11161a1c1e1f1e1c1a15100b0801000000000000000000000000000000000a161e29323a464c58616b77818b979e94887e756960564b453831271d140901000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000001162c41566b81969c87725544311d182d43586d8298846f5a452f1a05000000000000000000000000000000000000000000000000000000000000000000081c3043546a7f94947f6a5544311d08000000001f34495e74899e97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000c1c2b3b485861727e89959d9e98928e8c8b8c8e92999f9c93877d6d60564639291a0a00000000000000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000031525333c4047474642382b1b090000000d181f22282827221f180c000000000000000000000000000000000000000000000000000000000000000000000000000a161e2126282823211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a283239464b58616b77808a969e94887f756960564b453831271d1509010000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000002172c41576c81969a85705b372715172c42576c819786705b46311b06000000000000000000000000000000000000000000000000000000000000000000011426364c61778a9d8774604b35200e000000001f34495e74899e97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000d1d2b3a47546069767f888f95999c9d9e9d9c98948e867e75675f4b4538291b0b0000000000000000001f34495e74899c97826d58422d1803000000000000000000000000000000000000000000000000000000071520282a3232312e261b0d0000000000050b0d1212120c0b0400000000000000000000000000000000000000000000000000000000000000000000000000000003090b1112120e0c060000000000000000080e1020202016140e04000000000000000000000000000000000000000000030a0c1a1f202014120c0300000000000812181b202020202020202020202020202020202020202020202020202020202020202020200902000000000003162838454b57616a768089969e95897f756960574b453832281d150a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000000152a40556a7f959b86715c3d2d1a162b41566b809687715c47321c0700050b0d130b08010000000000000000000000000000000000000000000000000000081f3447596d8298917c66513c2c19060000001f34495e74899e97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000d1c2a36434a58616a747a80848788898886837f79716960564d4132281a0b000000000000000000001b30465b70848786806b55402b160000000000000000000000000000000000000000000000000000000000030d13151c1c1b19130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23263535352c29211608000000000000000000000000000000000000000b171e212f34353529271f14060000000c1a252d30353535353535353535353535353535353535353535353535353535353535353535351e160a00000000091e3245566069757f89959e95897f766a61574b453932281d150a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000013283d53687d929e88735b4a3621152a3f556a7f9488725d48331d000e19202228201d15090000000000000000000000000000000000000000000000000004182a3a4f657a8f99846f5a4935200a0000001f34495e74899c97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000c1825303a474c5560646a6e71737473716e69645c544b4538301e160a0000000000000000000000192e4255667071716b62503d28140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1020202016140e040000000000000000000000000000000000000000000000030c12141e20201b0c0a03000000000011212f383b4a4a4a413d3426160400000000000000000000000000000000000b1b293336444a4a4a3f3b3225140300081a2a3741454a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a32281a0a0000000b21364b60747f88949b938980766a61574b463932281e160a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000000e24394e63798ea58e79634e3a2a18293e54697e9389745e382816121e2b35383d3531271909000000000000000000000000000000000000000000000000000c22374b5d71869b8c78634d3828160300001b30465b70848786806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000008131c293337444b4f55595c5e5e5d5c58544e4a3d3632281a130200000000000000000000000013263848555b5c5c55504433210d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23263535352c29211608000000000000000000000000000000000000000000071520272a34353531211e170b000000081c2f3f4c5060606056514434210e0000000000000000000000000000000008182939464b5a5f6060544f43321f0c0012253748555a6060606060606060606060606060606060606060606060606060606060606060605e45382816020000162c41566b81949e9b857e756b61584c463932291e160a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000000c21364a5b72879d95806a58473625283d53687d928a755645321e1f303c484d524b4437271501000000000000000000000000000000000000000000000000081b2e3f53687e9396816b5645321e090000192e4255667071716b62503d281400000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f2631353a40444748494847433f39362d211e160a0000000000000000000000000000091a2a3842464747403d3326160400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f383b4a4a4a413d3426160400000000000000000000000000000000000000071525323b3f494a4a463633291b0b00000e23384c5d657575756b62513d2914000000000000000000000000000000001325364657616f74757569614f3b271200182d41556670757575757575757575757575757575757575757575757575757575757575757575705645321e09000014293e53697e8d989f8b837c726760544c40382f231c110800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000000071a2d3d566b80959e897661544333293c51677c918b76604b362a34414d5a6268605544311d0a000000000000000000000000000000000000000000000000001021364b6175899e8975604b36210e000013263848555b5c5c55504433210d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000409141d20252b2f32333433312e2a24211a0f0902000000000000000000000000000000000c1a262e3032322b28211608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2f3f4c5060606056514434210e00000000000000000000000000000000000006152532434f545e60605b4c46392917030010263b50657b8a8a8a806b56412c160100000000000000000000000000000e1c304354617584898a8a7e69543f2914001b30455a70848a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a74604b36210b000012263b4f606979838c999991867c73665e514c40382f231c11080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000000000f21374c6176899e988272604c46393b50667b908c77614c373b474c5f67787d73604b38281502000000000000000000000000000000000000000000000000091e3246576c8196927d68523c2c190600091a2a3842464747403d33261604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f15191c1e1f1e1c19140f0d0700000000000000000000000000000000000000000913191b1c1c16140d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384c5d657575756b62513d2914000000000000000000000000000000000006142432434f616973757570615746331e0a0010263b50657b909f96816b56412c1601000000000000000000000000000e1e2f404a607283999f98826d614f3b271200192e44596e8399aa9fa59d9fa99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa68b75604b36210b00000c1f32424f5b636e79838f999c91867c71665e504c40382f231c1108000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000000000a1f334758697f94a095806e61574c464f657a8f8d78634d484c59626d7c8992806b5645321d09000000000000000000000000000000000000000000000000031628394e63798c9b86715a4935200c00000c1a262e3032322b28211608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b8a8a8a806b56412c160100000000000000000000000000000006142432424f61697f898a8a8576614c36210c0010263b50657b90a596816b56412c16010000000000000000000000000a1a2b3c4c5e6a7f94a19b8575604b43321f0c0010253a50657b8c9faa9d878a8d8f9091919191919191919191919191919191919191919191918873604a35200b0000021424323d494e5c646e7a848f9a9b91857c70665e504c3f372e221b100800000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000000004172a3a4a607283999e9583766a61585563798e8e79645559626b7782919e9b8775604b36200b000000000000000000000000000000000000000000000000000b2135495b677d858678634d38230e0000000913191b1c1c16140d040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0d11141617171613100c0a04000000000000000000000000000000000000000000000000000812181b20201c19130900000000000000000000000000000010263b50657b909f96816b56412c1601000000000000000000000000000005132431424f61697f949e9c8676615746331e0a0010263b50657b90a596816b56412c1601000000000000000000000003162838495a667c8d9f9e897862574532251403000e23374b5d677d8c9f9c8677787a7b7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c78625443301c0700000006141f2c363d4a4e5c646f7a84909a9b90857b70655d504b3f372e221b10070000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000000000c1c30435461758598a098897f766f6a67788d8f7a676a7077808998a0988577625645321d0900000000000000000000000000000000000000000000000000061a2c3d4d5f677071635a4935200c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b11192023272a2b2c2c2b2926211f170d0b050000000000000000000000000000000000000000000c1a252d303535312e261b0d000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000005132331424e60697f939d9c8677615847392917030010263b50657b90a596816b56412c16010000000000000000000003111e3245566278899e9f8c7b655a49392816060000081c2e3f4d5f677d8c9f9b857664666767676767676767676767676767676767676767676766625a483625130000000000010f1a212d363e4a4f5d656f7b85909b9b90857b70655d4f4b3f372e221b1007000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000000000001325364657617482929d9e948b847f7c7c90937e7c7f858b959e9c8f82756259483828150200000000000000000000000000000000000000000000000000000f1f30414d525b5c4d493c2c19060000000000000000000000000000000000000000000000000000000000000000000001020b0a0200000000000000000000000000000000000000000000000000040a0c1215171715110c09030000000000000000000000000000000000030a151d20262c35383c3f404141403e3b3733292220190e06000000000000000000000000000000000000081a2a3741454a4a4642382b1b090000000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000005132331414e60687e939d9d87776259473a291b0b000010263b50657b90a596816b56412c160100000000000000000000112132424b6075859ba0947f6a5d4c3c2b1b0a00000000112130414d5f677d8d9f9b85756157515151515151515151515151515151515151515151514d483c2b180800000000000000060f1a212d363f4b4f5d65707b85919b9b90857b70655d4f4b3e362d221b100000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000000000000081828394656606d7d87939c9f9a9491909a9d9391949a9f9b92867b6d6057483b2b1a0a00000000000000000000000000000000000000000000000000000001132330393d464738352c1e0e000000000000000000000000000000000000000000000000000000000000000000060f1518201f170b07000000000000000000000000000000000000000000060b171f21272a2c2c2a27211e160b0500000000000000000000000000010b161e2731363b3c494d51545657575653504c473a38352b211a0e020000000000000000000000000000000012253748555a60605b56493826130000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000004122330414e5f687e8d9f9d87786259483b2a1c0c00000010263b50657b90a596816b56412c16010000000000000000000d1d2e3f4f606d8298a398826e614f3f2f1e0e000000000003122330414d5f677d8d9f9b8475615746393c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c38352b1e0e0000000000000000000007101b222e373f4b505e66717c86919c9a8f847a6f645c4f4a3e362d1c1308000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000000000000000b1b2838454b5f68747e878e93979a9c9fa59d9996928b857d74655d4b45392b1d0d000000000000000000000000000000000000000000000000000000000005131e252730322320190e0000000000000000000000000000000000000000000000000000000000000000000917232a2d35352d201c13080000000000000000000000000000000000010f1a212933363c4042413f3c36322820190e000000000000000000000009141d293238454b51575a6266696b6c6c6b68656158554d483c352c1d1509000000000000000000000000000004182d415566707575716756422e190500000000000000000000000010263b50657b90a596816b56412c16010000000000000000000004122230414d5f687d8d9f9d8879635a483b2b1d0c0000000010263b50657b90a596816b56412c160100000000000000000a1a2b3b4b5d697e93a09c8675614b433221110000000000000005132330414d5f687e8d9f9a8475615745382827272727272727272727272727272727272220190e0000000000000000000000000007101b222e37404c505e66737c86929c9a8f847a6f645c4f4a3e302518080000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000000000000000b1a2832414e56606972797e8285868c9d8783807c77706760554b3f32281b0d00000000000000000000000000000000000000000000000000000000000000010a10121b1c0e0c06000000000000000000000000000000000000000000000000000000000000000000061727353e424a4a42353025180800000000000000000000000000000007151f2c353a464c5155575755514b4639352b1e140600000000000000000e19263139464b5660666c72787c7f808181807e7b76716a625a4e493d3127190c00000000000000000000000000051b30455a70848a8a85715b46311c0600000000000000000000000010263b50657b90a596816b56412c160100000000000000000004122230404d5f677d8d9f9e8979635b493c2b1d0d000000000010263b50657b90a596816b56412c160100000000000000021527384859657b8c9f9e897863574632251503000000000000000005132331414e60687e8d9f9a847560564538281a1212121212121212121212121212110d0b050000000000000000000000000000000008111c232f38404c546067737d87929d9a8f847a6f645c4a433625130000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000000000000000000a161e3138454b545b63696d707286947f6e6b676259524b44372e1e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2335455257605f574a433625130000000000000000000000000000091725333d494e5861676a6c6c6a6661574d483c312415070000000000000e1e2c37444b576169757b81878d91949596969593908b867f786e635b4b44372a1d0d000000000000000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c160100000000000000000311222f404d5e677d8c9f9e897a645b4a3d2c1e0e00000000000010263b50657b90a596816b56412c160100000000000002101d3145566277889d9f8d7c665a49392916070000000000000000000005132331414e60687e8d9f9a8474605645382719090000000000000000000000000000000000000000000000000000000000000000000008111c232f36434a546067747d87939d998f847a6d605443301c0700000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000000000000000000002131a2832363d4a4e54575b718696806b56524c483b3631271911030000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1013141513110d0b060000000000000000090b040300000000000000000001152a3e52636d75746c605443301c100000000000000000000000000617273543505b636e767c7f81817f7c766d625a4e42332515040000000006192c3c49556069757e8890969ca59d9997969698999d9f9b958b83796b6055473b2b1d0d0000000000000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c1601000000000000000311212f404c5e667c8c9f9e8a7b655c4a3d2d1f0e0000000000000010263b50657b90a596816b56412c1601000000000000102031424b6074859ba1947f6a5e4c3c2c1b0b00000000000000000000000005132331424e60687e939c998374605645372719090000000000000000000000000000000000000000000000000000000000000000000000091218253036434b556068747e88939d998e8272604a35200b00000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000000000000000000000000a151d202d36393e455a708597816c574237342b201d15090000000000000000000000000000000000000000000000000000000000000000000000000000000003090c171f2125282a2a29272320190e0b050000050b0d1e201a1711070000000000000002182d42576d828a8a8172604a3e2d1b0b00000000000000000000001424354552616a79838a9195979694918a827868605043332212000000000c2035495a63737e89949d9f99928c87838280818284888e949d9f988b80746159483b2b1b0b00000000000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c16010000000000000211212f3f4c5e667c8c9f9f8b7b655d4b3e2d1f0f000000000000000010263b50657b90a596816b56412c160100000000000c1c2d3e4e606c8197a3998372604a402f1e0e000000000000000000000000000005132431424e60697e939d9983746055443726190900000000000000000000000000000000000000000000000000000000000000000000000008131c263037444b566068757e88949e8d78634e38230e00000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000000000000000000000000002090f1a21242f44596f8498826d58432d20180d0802000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e212933363b3d3f3f3e3c38352b2220190d0e19202233352f2c24190b000000000000000b21364b6075869c947f695c4a392916030000000000000000000e1e324252636d7f8c99968e888686898e96988a7e6a615040301c0c0000000e23384d637885949e9f968c847d77726e6c6b6b6d6f73797e87929d9f9585776259483a291704000000000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c160100000000000210212e3f4b5d667c8b9f9f8c7c665d4b3f2e201001000000000000000010263b50657b90a596816b56412c16010000000009192a3a4a5c687e929f9c86756154433022120000000000000000000000000000000006142431424f60697f939d998373605544372618080000000000000000000000000000000000000000000000000000000000000000000000000008141c273138454b566069757f898e79644e39240f00000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000000000000000000000000000000070c192e43586e8398846e59442f1905000000000000000000000000000000000000000000000000000000000000000000000000000000000001131a2832363a464c5053545453514d483c38342b1e1e2b3538484a444037291907000000000000091e324557647a8b9f8b7a645746321e13000000000000000006192c3c4f606d81959d8b80797371717379808b9d93806a5e4d3a2a1804000013283d52687d929f988b81786f68615859575656585a5b6369747d879aa19b8778625846331f13000000000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c1601000000000210202e3f4b5d657b8b9f9f8c7d675e4c3f2f21100200000000000000000010263b50657b90a596816b56412c1601000000011426374759647a8b9f9e8a7963574636251304000000000000000000000000000000000006142432424f61697f949d98827360554436261808000000000000000000000000000000000000000000000000000000000000000000000000000109151d273138454b576069767f79634e38230e00000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0101010101010101010101010101010101010101051a30455a6f8597826c57422d1700000000000000000000000000000000000002182d42576d8297856f5a45301a050000000000000000000000000000000000000000000000000000000000000000000000000000000009151d3038454b5358616568696a6866625a564d483c322b3c484d5e60595447372411000000000000031628394a5c697e939c8675614b41301e0e000000000000000c2035495a697e939d87796b635b5c5c5b636b79879d917c665947341f0a000011253a4e606d818a82786c625a534c473a424141433d4a4e5560677683979f9c8676614c41301a0a0000000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c16010000000110202e3e4b5d657b8a9f9f8d7d675f4d402f2111020000000000000000000010263b50657b90a596816b56412c16010000010f1d3144556177879d9f8d7c665b49392918080000000000000000000000000000000000000006142432424f616a7f949d988273605443362518080000000000000000000000000000000000000000000000000000000000000000000000000000010a151d283239454b57616a635b4935210c00000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d3823161616161616161616161616161616161616161616161a30455a6f8597826c57422d170000000000000000000000000000000000000014293f54697f8f85705b46311b0600000000000000000000000000000000000000000000000000000000000000000000000000000009192731414d56606870767a7d7f7f7e7c78726b625a4b4639485a6273756f6554402c17000000000000000a1b2d3d4f606e839997826d5f4d3c2c1909000000000004172a3a4d63788a9e8978635b4e4a3d3d4a4e5b63788a9e8977614c39281603000b1e314152636d756d625a4d493c37332a2d2b2c2d2d3637444b5861728197a299836e5f4d3828160200000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c16010000010f202d3e4b5c657b8a9e9d937e685f4d4030221203000000000000000000000010263b50657b90a596816b56412c160100000f1f30414b6073849aa195806a5e4c3d2c1b0b00000000000000000000000000000000000000000006142432434f616a7f949d98827260544336251300000000000000000000000000000000000000000000000000000000000000000000000000000000020a161e283239464b554e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d382c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c30455a6f8597826c57422d17000000000000000000000000000000000000000b20354a6072797a644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000008182737444b5f67757e858b9092949493918d8780786c61574b4d6278888a836f59442f1a00000000000000000f1f32424c6176889d927d675a4937271502000000000a1f3347586c8197927d685a493d362d2d363d495a687e9395806b5745321e09000113233545525560554d483c352b221f18171616181a2127313a47546073849aa1927d675645321e0900000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c160100010f1f2d3e4a5c647a8a9e9d937f69604e413022120400000000000000000000000010263b50657b90a596816b56412c1601000c1c2d3d4d5f6b8096a2998372604a40301f0f0000000000000000000000000000000000000000000000061425324350616a7f959e978172605443301c160800000000000000000000000000000000000000000000000000000000000000000000000000000000020a161e2933364038352c1f0e0000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d4141414141414141414141414141414141414141414141414141455a6f8597826c57422d1700000000000000000000000000000000000000071c3043546064645c4a36220d0000000000000000000000000000000000000000000000000000000000000000000000000000001325364455606c7d88939b9f9e9895949394979b958b8175645c52677d9299846f59442f1a000000000000000001141f334758657b8d9e8a78635544311d11000000000c21374c61768a9d8774604b3c2c211a1a212c3c4b6074889d8975604b36210b00000517273537444b4437352b20190e0a04000101000709151d2a3644556176889e9d8875604b36210f00000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c1601000f1f2d3d4a5c647a899e9e947f6a614f42312313040000000000000000000000000010263b50657b90a596816b56412c16000818293a4a5b677d919e9c867661544330221201000000000000000000000000000000000000000000000000071525334350616a80959e978172604a44342616070000000000000000000000000000000000000000000000000000000000000000000000000000000000030b171e212a23211a0e000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d7863565656565656565656565656565656565656565656565656565656565a6f8597826c57422d170000000000000000000000000000000000000000132536434a4f4e4a3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000071c304354607381919da39b908983807e7d7f81868c9596877a675f697e9399846f59442f1a00000000000000000004182a3a4b5d6b80959b8574604b3f2f1d0c00000012273c52677c91957f6a5544311e0f07070f1d3144556b8095907b66503b2611000000091719273135312720190e06000000000000000000010c1827374758697e94a6937e69533d2d1a07000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c16000e1f2c3d4a5b647a899e9f95806b61504232241405000000000000000000000000000010263b50657b90a596816b56412c1611142636465863798a9f9e8a79635846362513040000000000000000000000000000000000000000000000000000071525334350626b80959e96816c62514433251506000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c150e0c0600000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d786b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6f8497826c57422d17000000000000000000000000000000000000000008182530353a39362d20100000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4a607282979f9f93857b746e6b6968696c7178808a998b7d676a7f9599846f59442f1a000000000000000000000c1c2e3f4b6073859b96806b5d4c3b2a18080002172c41576c81968f7a65503726140000000215273750667b9095806b56402b16000000000009151d201d1509060000000000000000000000000009192a3a4b6075889d9c86715b4a36210c000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c160e1e2c3d495b6379899e9f96816c6250433324140600000000000000000000000000000010263b50657b90a596816b56412c2727273043546176879c9e917d675b4a3a29180800000000000000000000000000000000000000000000000000000000071525334350626b80959e96806b6250433324140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f9781818181818181818181818181818181818181818181818181818181818181808797826c57422d1700000000000000000000000000000000000000000008131c202424221b100200000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6a8095a09f8b7e7265605556545354575a626b7783938d7d6c819699846f59442f1a0000000000000000000000111d3144556278899e8d7b65594736251300061b31465b70859b8a76614b36210c000000000c21364c61768b9a85705a45301b00000000000001080b0801000000000000000000000000000000000c1e3245566b8095a48e79634e39240e000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c161e2c3c495b6379889ea097816c625144332515060000000000000000000000000000000010263b50657b90a596816b56413c3c3c3c414b60728399a195806b5f4d3d2d1b0b000000000000000000000000000000000000000000000000000000000000071525334450626b80969e95806b6150423224140400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b090200000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f9b97969696969696969696969696969696969696969696969696969696969696969b97826c57422d170000000000000000000000000000000000000000000000070b0f0f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4f647a8c9f9f8c7c6860544b44373f3e3f3c484d59626e7e8d8c7b829799846f59442f1a000000000000000000000001152737485a677d919d8877615443301c10001d32485d72879d89735746321e09000000000a1f33465874899c87725c47321d000000000000000000000000000000000000000000000000000000021628384f64798ea8937e69543e2914000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c1d2b3c495a6379889da1988272604b4434261607000000000000000000000000000000000010263b50657b90a596816b565151515151535f6a8095a1998372604b41301f100700000000000000000000000000000000000000000000000000000000000000071526334451626c81969e947f6a604f4231221202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e211e160a090000000000000000000000000000000000000000000000000000000000000e24394e63798586868686868686868686868686868686868686868686868686868686868686868686867f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22374b5d70859aa2927d685e4a4336312729282a2b353b474c61697d8c89859b99846f59442f1a00000000000000000000000009192b3c4d5f6d8297998372604a3e2d1b0b1f34495e74899d87725d39281603000000000417293a5d73889d88735e49331e000000000000000000000000000000000000000000000000000000000b20354b6075899e98836d58432e18000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412c2b3b485a6278889da19982736054433026160800000000000000000000000000000000000010263b50657b90a596816b666666666667686d7d8d9f9c877661544437372e211a0f01000000000000000000000000000000000000000000000000000000000000071626344451626c81979d937e69604e403020100000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832363228231c1108000000000000000000000000000000000000000000000000000000000c21364a5b637171717171717171717171717171717171717171717171717171717171717171717171716a61503c28130000000000040a0c0e0e0b09020000000000000000040a0c170c0a0400000000000000000000000000000000020b11131b1b1b1b1b1b1b1b1b1b1b0e0c070000000000011527374f657a8fa29a846f604e4030251d1514131419202a34424f5f687e939ba399846f59442f1a000000000000000000000000000e1e30414b6175869c947f695c4a39291620354a5f758a9c86715c47311c0000000000001d32475c72879c89745f4a341f00000000000000000000000000000000000000000000000000000000081d31445571869b9b86705b46311b000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56412f3b48596278879da2998374605544362614080000000000000000000000000000000000000010263b50657b90a599837c7c7c7c7c7c7c7d828d9f9c8778696560554f4b3e362d1c140800000000000000000000000000000000000000000000000000000000000008162634444a607282989d937e685e4c3e2d1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000002162838454b4538382f231c11080000000000000000000000000000000000000000000000000000071a2d3d4a4e5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c55504333200d000000000c181f222323201d150a0000000000000c181f222c211f170c000000000000000000000000000006141f2629303030303030303030303024211a0f01000000081d3144556d8298a48f7a644f42311c130801000000050d181f32414e606c8197a699846f59442f1a0000000000000000000000000000131e324657647a8b9f8b7a645746321e1e34495e73899d88725d3a2917040000000004182a3b5d73889d88735e48331e0000000000000000000000000000000000000000000000000000000001142637596e84999d88735d48331e000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56453f4b596278879da29a847460564537261808000000000000000000000000000000000000000010263b50657b90a5a1999191919191919192989fab9c87827f7a746c645c4e4a3d3026180b00000000000000000000000000000000000000000000000000000000000008161c304354607383999f8d7c665c4a3a2a1808000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566056504c40372e221b1007000000000000000000000000000000000000000000000000000f1f2d36394646464646464646464646464646464646464646464646464646464646464646464646463f3c332515030000000c1c2a333738383632281a0a000000000d1c2a33374137332a1c0c000000000000000000000000021424313a3e454545454545454545454539362d1f0f0000000b20354b6075899e9c86715c4b372313000000000000000005142331424b6075889d99846f59442f1a0000000000000000000000000000031628394a5c697e939c8675614b41301e32475d72879c89745847331f0a000000000b1f34475974899c87715c47321c0000000000000000000000000000000000000000000000000000000000182e43586d83989e89745e49341f000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b5b5b5b5d6577879ca39b84756156453827190900000000000000000000000000000000000000000010263b50657b90a5a29a9494949494949494959697989b98949088817a6f645c4b4336291b0b0000000000000000000000000000000000000000000000000000000000000013253644556075859b9f8a7a6459473625130000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607470665e504b3f372e221b10070000000000000000000000000000000000000000000000010f1a21243131313131313131313131313131313131313131313131313131313131313131313131312a2820150700000004182a3a474c4d4d4b453828150200000d1d2a3a474c574c473a2a170400000000000000000000000b1f31424e535b5b5b5b5b5b5b5b5b5b5b4e4a3d2d1a0700000f253a4f647a8fa7957f6a553e2e1b0500000000000000000005141e32455671869b99846f59442f1a0000000000000000000000000000000b1b2d3e4f616f839997826d5f4d3c2c30455b70859a8b76614c37210c000000000c22374c61778c9a856f5a45301a0000000000000000000000000000000000000000000000000000000003192e43586e83989e89745f49341f000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a5968070707070737b879ca49b857661574638281a0a0000000000000000000000000000000000000000000010263b50657b90a59a847f7f7f7f7f7f7f7f7f808283868a8f969e978f84796b6054463a2919090000000000000000000000000000000000000000000000000000000000000818273745576277889d9d8877615443301c0c000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b857b70655d4f4b3e362d211a0f060000000000000000000000000000000000000000000000070c0e1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c15130d03000000000a1f334758616363605645321d090005182a3b4758616c615847331f10000000000000000000000011263a4e60687070707070707070707070635b4a36210c0000142a3f54697f94aa8f7a654f3a25100000000000000000000000021628385c71869b99846f59442f1a000000000000000000000000000000000f2032424c6177889d927d675a49372741566b8196907b65503727150200000216283851667b9195806b56402b1600000000000000000000000000000000000000000000000000000000031628395a6f859a9e88735e49331e000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a59d888585858688909d9f97867661584639281a0a000000000000000000000000000000000000000000000010263b50657b90a596816b6a6a6a6a6a6a6a6a6b6c6e71767a8189939e998d807261584637271501000000000000000000000000000000000000000000000000000000000000091928394859647a8b9f998372604a3b2a18040000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b9090857b6f645c4e4a3e362d21190e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c6177787874604b36200b000b1f34475962768176614c3e2e19090000000000000000000013293e53687e858585858585858585858479634e39240e0003182d43586d82989f8a76604b36210b0000000000000000000000001c31465c71869b99846f59442f1a0000000000000000000000000000000001141f344759657b8d9e8a78635544313c51667c9195806b5544311d0f07070f1e3245566c8196907b66503b261100000000000000000000000000000000000000000000000000000000091e32465771869c9b86715c46311c000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a5a69d9a9a9a9b9da69f8b81766158473a291b0b00000000000000000000000000000000000000000000000010263b50657b90a596816b56555555555555555657595760656c757e899a9f958376615544311d10000000000000000000000000000000000000000000000000000000000000000a1b2b3b4a5c6a7f94a1937e695947341f0e000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798e9d9a8f847a6f645c4e4a3d352c20190e050000000000000000000000000000000000000000000000000000000000000000000000090f1111100e08000000000000000000000000000000000000000000000000172c41566c818d8d7a644f3a250f000d22374c62778896816d5c4b37261401000000000000000000162b40566b80959a9a989898989898988f79644f3a240f00061b31465b70869b9d87725645321e090000000000000000000000071c31465c71869b99846f59442f1a000000000000000000000000000000000004182a3a4b5d6b80959b8574604b3f364b6176899d8874604b3c2d211a1a212d3d4b6075899e8975604b36210b000000000000000000000000000000000000000000000000000000000c21364b61768a9f98836e59432e19000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a5a0988e8e8e8f929c9e897e726055443626180800000000000000000000000000000000000000000000000010263b50657b90a596816b56413f3f3f3f3f40414239454b4f576069788499a1998473604b3f2e1b08000000000000000000000000000000000000000000000000000000000000000d1d2e3e4b6073859a9e8977614c3c2b19050000000000000000000000000000000000000000000000000000000000000000000000000c2136495b677d87939d9a8f84796e635b4d493c352b20180d040000000000000000000000000000000000000000000000000000000000000004121c24262626231c110300000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000d22374d62778a9f8d7a645544311d0b000000000000000000162b40566b80959b85828383838383838075604b35200b00021628385d73889d9a856f5a382816030000000000000000000000071c31465c71869b99846f59442f1a0000000000000000000000000000000000000c1c2f3f4b6073859b96806b5d4c3b46576c8196937e695b4a3d362d2d363d4a5b697e9495806b5745321e0900000000000000000000000000000000000000000000000000000005182b3b50667b90aa947f69543f2a14000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a598827979797a7d86999e93827360544336251300000000000000000000000000000000000000000000000010263b50657b90a596816b56412c2a2a2a2a2a2b2d28323639454b5962738399a297816c5d4b3722110000000000000000000000000000000000000000000000000000000000000000101c304354647a8d9f97826d5a48352008000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4d5f67747e88939d998c83796d635b4d483c342b1f180c04000000000000000000000000000000000000000000000000000000000012222f383b3b3b382f211100000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000b203448596c81969b8673604b392816030000000000000000162b40566b8095947f6d6d6d6d6d6d6d6b605544311d0800091e324556748a9f98836e58432e19000000000000000000000000071c31465c71869b99846f59442f1a00000000000000000000000000000000000000111d3144556278899e8d7b655947394d62788a9e8a79635b4e4a3d3d4a4e5c64798a9e8977624c3928160300000000000000000000000000000000000000000000000000000212203448596c8297a58e79644e39240f000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b64646568748399a0988272605443301c16080000000000000000000000000000000000000000000010263b50657b90a596816b56412c16151515151617161e2128323b48556074859b9f8f7a654f3f2e1c0800000000000000000000000000000000000000000000000000000000000000011426364a5c6d82989f8b78624d362614010000000000000000000000000000000000000000000000000000000000000000000000000f1f31414d566069757e88949e998c82786d625a4d483b342a1f170c030000000000000000000000000000000000000000000000000000091c2f404c5151504c3f2f1c08000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0005192b3b4c6176889e937e695746321e0c0000000000000000162b40566b8095947f6a585858585858564b4437271501000b21364b60768ba997816c57422c17020000000000000000000000071c31465c71869b99846f59442f1a00000000000000000000000000040a0c0e100f0d152737495a677d929d8877615443485a687d929d88796c635b5c5c5c646c7a889d917d675948341b0a0000000000000000030a0c1215100b09020000000000000000030a151d30414c62778a9f9c87725c4a36220d000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b564e4f5660748399a0978172604a443426160700000000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000010003090b161e2b37455663798c9f9b85705d4b37230e000000000000000000000000000000000000000000000000000000000000000008182d3e4e63798ea296806b5443301c080000000000000000000000000000000000000000000000000000000000000000000000000113233138454b566069757f88949e988c82786c62594c473b332a1e170b030000000000000000000000000000000000000000000000000f24384c5e6666655d4c38230e000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000d1f334658687e939e8875614b3a29170400000000000000162b40566b8095947f6a54434343434340353127190900000c21364c61768ba196816c56412c17010000000000000000000000071c31465c71869b99846f59442f1a00000000000000000000030a0c171f212425242220192c3c4d5f6d8297998372604a3e4e5f6b80949d8b81797371717379818b9d93806b5f4d3b2b1800000000000000000b161e21272a25201d151412100f0e0f1012171e2832404d5f6c8197a6947e69543e2d1b07000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b56413845566074839a9f97816c62514433251507000000000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000030d1927384a5b6c8297a38f7a65503a251000000000000000000000050b0d1215100e080000000000000000000000000000001021364a5b70859a9e8874604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000005131a273138454b566069757f89949e978b81776c61594c473a33291e160b020000000000000000000000000000000000000000000011263b51667c7b7b65503b2610000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000417293a4b6073869c947f6a5846331f0a00000000000000162b40566b8095947f6a543f2e2e2e2e2b201d15090000000c21374c61768ca196816c56412c17010000000000000000000000071c31465c71869b99846f59442f1a0000000000000000000b171e21293336393b3937342b2330414b6175869c947f695c4a4151626b7f8b98968e888686888e96988b7e6b625041301d0d000000000000000b1b2932363c3f3a3631272a27252423242627293338454b5e677d929f9d8875604b36211000000000000000051b30455a70859a9b86715b46311c0600000000000000000000000010263b50657b90a596816b5641283845566074849a9f96806b625143332515060000000000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000a1a2d3d50657a90a796816c573626140100000000000000000d182022272a25231c110300000000000000000000000000071a2d3d54697e94a78e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000a151d283238454b57616a767f89959e978a81776b61584c463932281e160a02000000000000000000000000000000000000000a20354a5f758c9088735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000c1c304354677c919e8976614c38281603000000000000162b40566b8095947f6a543f2a181818160b0801000000000c21364b61768baa97826d57422d18020000000000000000000000071c31465c71869b99846f59442f1a0000000000000000131b2933363a464c4e504f4d483b3835324657647a8b9f8b7a6457464451616978838a9194969694918a8278696050443323130000000000000008182939464b51544f4b45383f3c3a3938393b3c39464b56606b7c8b9f9e917c665745321e0900000000000000051b30455a70859a9b86715b46311c0a0a0a0a0a0a0201000000000010263b50657b90a596816b56412c283845566175849a9e95806b6150433325140600000000000000000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000f20354b6074889e9c86715443301c08000000000000000d1d2b34373c3f3a372e211100000000000000000000000000000f24394f64798eaa947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000020a161e283239464b57616a767f89959e968a80766a61574b463932281d150a0000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000011426364a6073869c95806b5645321e09000000000000162b40566b8095947f6a543f2a15030301000000000000000b20354a60748a9f99836e59442e19000000000000000000000000071c31465c71869b99846f59442f1a00000000000008131c3139464c5458616365646259574d493c394a5c697f949c8675614b41434f5a626d767b7f81817f7b756d625a4e423326160500000000000000132536465761676a6560565754524f4e4e4f50525557616974808d9f9f96806b5e4d3928160300000000030c13151b30455a70859a9b86715b46311f1f1f1f1f1f1f18150f0600000010263b50657b90a596816b56412c1a283846576175859b9e95806a61504332241406000000000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000081d31445570859b9f8a75604b35200b00000000000005182b3b484c5254504b3f2e1d0d000000000000000000000000000b20354b60758a9f97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000020a161e283239464b57616a768089959e958980766a61574b453831271a0a00000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000081c304354677c919e8975604b362111000000000000162b40566b8095947f6a543f2a1500000000000000000000071c30435473889d9a856f5a3b2a18050000000000000000000000071c31465c71869b99846f59442f1a000000000008182530424e57616a7076797a7977726c635b4b453e4a6072839997826d5f4d3c3c494d5761666a6c6c6a6660574d483c3124160800000000000000071c30435461757c7f7a75706d69676564636465676b70767e88959f9f948172604a40301b0a00000000071520272a2f31455a70859a9b86715b4634343434343434342d2a231709000010263b50657b90a596816b56412c161a283946576176859b9e947f6a614f42322413050000000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000001142637596e8399a98c77624c37220d0000000000000b2034485962676a655d4b3b2b1805000000000000000000000000081c30435473889e99846f59442f1a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b161e293339464c58616a76808a969e95897f756960564b4538271502000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000001325364b6073879d937d68533f2f1c080000000000162b40566b8095947f6a543f2a1500000000000000000000001325365b70859a9d88735947341f0b0000000000000000000000071c31465c71869b99846f59442f1a0000000000132536434a6068767f868b8e908e8c8781786c60564743546177889d927d675a49373539464b5154565654514b4539352b1e140600000000000000000b20354a60738991948f8986827f7c7a7978797b7c80858a949da29a8c7f6d60544330221200000000031525323c3f4546475a70859a9b86715b494949494949494949423f352717060010263b50657b90a596816b56412c160b1b293946586176869c9d947f69604f423123130500000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000182d42586d8297a28d78624d38230d0000000000000d22374c62777c7f7b65594834200b000000000000000000000000011426365c71879c9b86705b46311b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b171e29333a464c58616b77808a969e94887e7568605645311d09000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000081c3043546a7f949c86715d4b37230a0000000000162b40566b8095947f6a543f2a150000000000000000000000172c42576c8197a68c77624c37220d0000000000000000000000071c31465c71869b99846f59442f1a00000000071c304354606b7d88949a938e8c8d9097968b81746158474759657b8d9e8a78635544312832363c3f41413f3c36322820190e00000000000000000000071c30435471869ba49c9d9b9794918f8e8d8e9091959b9f9e988f847a6a614a4336251304000000000c2032434f545a5b5d5e70859a9b86715f5f5f5f5f5f5f5f5f5f57524535230f0010263b50657b90a596816b56412c16000b1b293a47586177869c9d937e69604e4131231304000000000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000002152838596e8499ab8c77624c37220d00000000000011263c51667b91948c77624d37220d00000000000000000000000005182b3b5d72889d9b86705b46311b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b171e29333a474c58616b77818a939b94887e74604b36200b000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000011426364c61778a9f907b65503828150200000000162b40566b8095947f6a543f2a15000000000000000000000013283d52687d92a5907b66503827150200000000000000000000071c31465c71869b99846f59442f1a000000071b2e3e4a607280929e90847d7977787b818a999684766155444c5d6b80969b8574604b3f2f1e21262a2c2c2a26211e160a05000000000000000000000000132536586d82989c86878c909396989a9b9b9a9997948f89837a70645c4f4330251808000000000013273c4f616a6f71727375849a9b8574747474747474747474746d63523f2a150010263b50657b90a596816b56412c1601000c1c2a3a47596277869c9f8d7e685f4e41302312040000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000091d32455670869b9f8a76604b36210b0000000000000c22374c61778ca5937e68533b2a180400000000000000000000000b20344859748a9f9a846f5a452f1a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c171f2a333a474c59626b767e869b9d937f6a543f2a15000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000081f3447596d839897826d5645321d0900000000162b40566b8095947f6a543f2a1500000000000000000000000d22384d62788da296816c5645311d0a00000000000000000000071c31465c71869b99846f59442f1a0000000d22364a5c6a7f949e897b6f68646263666c7783989b8573604b3f4b6074859b96806b5d4c3b2a181115171715110b09030000000000000000000000000000142a3f54697f94978272777b7e81838586868584827f7a756d655d4f4a3e321c1308000000000000152a3f546a7f848687898b9aa29f8d8a89898989898989898989816d57422d180010263b50657b90a596816b56412c160100000c1c2a3a48596278879d9f8d7d685f4d413022120400000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000e20364b6075899e9d88735645321e090000000000000a1f34475972879d99836e5947341f0e00000000000000000000000d22374c62778ca997826c57422d17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c263036434b556067737d848d9f978c7d67523d2712000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000000004182a3a51667b919e8975604b36200b00000000162b40566b8095947f6a543f2a1500000000000000000000000b2035485a70859b9e8875604b38271502000000000000000000001c31465c71869b99846f59442f1a0000071a2d3e4f647a8c9e8979665e534e4d4e51596273829895806b5948445563788a9e8d7b6559473625130001010000000000000000000000000000000000000011263b50667b909b86716265696c6e6f7071706f6c696560564f4b3f362d201500000000000000001f344a5f748a98989898989ea7a69d9898989898989898989898826d58432e180010263b50657b90a596816b56412c16010000000c1c2a3b48596278879d9f8d7d675f4d402f221103000000000000000000000010263b50657b90a596816b56412c160100000000000000000005101e2f3f50667b90a899836e593828160200000000000004182a3a566b80969f8a77614c3d2c1a0a00000000000000000009192e3e53687d92a8937e69533e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c253036434b546067737d87929b988c8278675f4d392510000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000c20364b6075899e917c665136251300000000162b40566b8095947f6a543f2a15000000000000000000000005192b3c52687d92a7917c675645311d110100000000000000000e1e2f3f5c71869b99846f59442f1a00000d21364a5c6f849a917d675b4c403937383b48556175879c8b77624d37495a677d929d8877615443301c100000000000000000000000000000000000000000000d22374d62778c9f897560505356585a5b5b5b5a5754504b4538372e221b10020000000000000000182e43586d828383838383899e9d8883838383838383838383837e69543e29140010263b50657b90a596816b56412c1601000000000d1d2b3b485a6378889d9f8c7d675e4c402f2111030000000000000000000010263b50657b90a596816b56412c1603030303030002090b0e18202d3c4c5d6e8398a8937d68533e281300000000000000000e23384d63788c9f95806a5b4938281a0f040000000000020b1827374b5c6f8499a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091218253036434a546067737d86929c998c82796d625a4d41301e0a000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000000000091d3145566d829898836d5443301c07000000162b40566b8095947f6a543f2a150000000000000000000000000e21364b6075899e9c8674604b3f2e1c1408010000000007111d2b3c4c5d71869c99846f59442f1a00000f24394e64798e9b85705f4d3d2f2422232b374657677c9196806b54433c4d5f6d8298998372604a3e2d1b0b00000000000000000000000000000000000000000b2034485973899e8d78634e3e41434546464544423f3a363228231c110700000000000000000000162b3f53646d6e6e6e6e70859a99836e6e6e6e6e6e6e6e6e6e6e69604f3b26120010263b50657b90a596816b56412c160100000000000d1d2b3c495a6379889d9f8c7c665e4c3f2f21110200000000000000000010263b50657b90a596816b56412c1818181818191a151d20242b343e4a5b657b90a09e8976614c36210c00000000000000000c2135495b6f849a9f8a79635645382c1f180f0e0c0d0f151d29364455647a8d9f9b86715b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009121d242f36434a546067737c86929c998c83796d635b4d493c30231301000000000000000101010101010101010a20354a5f758a9d88735e48331e090101010101010101010000000000000000000000172c41566c81968f7a644f3a250f000000000000000215273851667c919e8874604a35200b000000162b40566b8095947f6a543f2a15000000000000000000000000091e3245566a7f94a4947f6a5d4b3e30261c14131213141b222e3b485a657b8d9f99846f59442f1a0003162839566b8196927d675241301f110d0e1928394b6074889d8874604a35414b6175879c947f695c4a392916030000000000000000000000000000000000000005192b3b5b70859a917c67513c2c2e303131302f2d2a25201d150a080000000000000000000000001023364653585959595a70859a99846e59595959595959595959544f42321f0c0010263b50657b90a596816b56412c16010000000000000e1e2c3c495b6379889e9f8b7c665d4b3f2e201002000000000000000010263b50657b90a596816b56412e2e2e2e2e2e2e2f273136393b484d5c6479879da495806b5846331f0a000000000000000006192c3c4e64798c9f9b85746056493d342a252321222428323946546073859ba2917c66513d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c232f38404c546066737c86919c9a8f84796e635b4e493d352b1e130500000000030d13151616161616161616161620354a5f758a9d88735e48331e1616161616161616161614120c0300000000000000172c41566c81968f7a644f3a250f00000000000000000c21364c61768b9f8e79644e39240f000000162b40566b8095947f6a543f2a15000000000000000000000000031628384b6073869c9f8b7b655c4b433630262827282a2d363f4b596278889dab99846f59442f1a00091e32455770869b8b76614c3621130100000b1d3144556d82978e79634e39324657647a8b9f8b7a645746321e130000000000000000000000000000000000000000172c42576c819795806a55402b191a1b1c1b1a1714100b09020000000000000000000000000000061828363f434343455a70859a99846e594443434343434343433e3b322414020010263b50657b90a596816b56412c1601000000000000000e1e2c3d4a5b647a899e9f8b7b655d4b3e2e2010010000000000000010263b50657b90a596816b5643434343434343434438454b4e5359626d7a889da69c8675604b3a2917040000000000000000000e21364a5c6b8095a29a8474635b4c473b3a3837383938454b5761728298a39a846f5e4d391f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000008111c232f38404c515e66737c86919c9a8f847a6f645c4e4a3d352c20190e0000000000071520282a2c2c2c2c2c2c2c2c2c2c2c354a5f758a9d88735e48332c2c2c2c2c2c2c2c2c2c2c2a27201507000000000000172c41566c81968f7a644f3a250f00000000000000000a1f33465871869b937e69543e2914000000162b40566b8095947f6a543f2a15000000000000000000000000000a1d314455647a8c9f9e8a7a6960544b43363d3c3d3f3e4a4f5d6578869a9ca499846f59442f1a000b21364b60768a9c87725846331f0a0000000215273753687d93937e69533e29394a5c697f949c8675614b41301e0e0000000000000000000000000000000000000013293e53687e9399836e5939291703060606050200000000000000000000000000000000000000000a18232b2e2e30455a70859a99846e59442f2e2e2e2e2e2e2e29261f1406000010263b50657b90a596816b56412c160100000000000000000e1f2d3d4a5c647a899e9f8a7b655c4b3e2d200f0100000000000010263b50657b90a596816b5858585858585858585a5b566063686f77828c9da59d8979635645321c0c00000000000000000000071a2d3d4b6074849aa29a85796b6159544f4d4c4d4e52566067768298a09e8979634e40301d0100000000000000000000000000000000000000000000000000000000000000000000000000000002111c232f38404c505e66717c86919c9b90857a6f645c4e4a3e362d211a0e060000000000031525333c3f4141414141414141414141414a5f758a9d88735e484141414141414141414141413f3c322515030000000000172c41566c81968f7a644f3a250f00000000000000000417293a566b809699846e593a2a17040000162b40566b8095947f6a543f2a1500000000000000000000000000011527374a5c687e939f9e8a7e736660545552525254585c646d7b889a85869c99846f59442f1a000e23384d63788d99836e593a2917040000000010253a4f657a8f96816b56412c2d3e4a6072849a98826d5f4d3c2c190900000000000000000000000000000000000010253a4f657a8f9d87725746331e0a0000000000000000000000000000000000000000000000000000061016181a30455a6f859a99846f59442f1a19191919191914120c0200000010263b50657b90a596816b56412c16010000000000000000000f1f2d3d4a5c647a8a9e9e8a7b645c4a3e2d1f0f01000000000010263b50657b90a596806d6d6d6d6d6d6d6d6d6e6f707175797d848c979f9f978779635b493828160000000000000000000000000f1d32455661758599a19b8a80776e696463616264686d757d8798a09d8a7a645b4935221200000000000000000000000000000000000000000000000000000000000000000000000000000009151d2f373f4c505e66707b85919b9b90857b70655d4f4b3e362d211a0f06000000000000000d2033435055565656565656565656565656565f758a9d88735e56565656565656565656565656544f4332200c0000000000172c41566c81968f7a644f3a250f00000000000000000011263c51667c919d88735847331f0a0000162b40566b8095947f6a543f2a15000000000000000000000000000009192d3e4e60697f8d9e9e93857b746e6a686768696d7279828f998576869b99846f59442f1a000f243a4f64798f97826d58422d1800000000000e24394e63798e97826d58422d1c3043546277889e927d675a493727150200000000000000000000000000000000000c21364c61768b9f8b76614b36210c000000000000000000000000000000000000000000000000000000000104192e43596e83989a85705b3827150204040404040000000000000010263b50657b90a596816b56412c1601000000000000000000010f1f2d3e4b5c657b8a9e9e8a7a645c4a3d2d1f0f000000000010263b50657b90a59c86828383838383838383838485878a8e939a9f9f988c8276635b493d2c1a0a000000000000000000000000021528384657617683929e9f958a837e7a787677797d8288929da098887b655c4b3d2c1a040000000000000000000000000000000000000000000000000000000000000000000000000000091927313f4b505d65707b85909b9c91857b70655d504b3f372e221b100700000000000000000013283c50616a6b6b6b6b6b6b6b6b6b6b6b6b6b6b758b9d88736b6b6b6b6b6b6b6b6b6b6b6b6b6b69614f3c27120000000000172c41566c81968f7a644f3a250f0000000000000000000d23384d62788da68c76614c37210c0000162b40566b8095947f6a543f2a15000000000000000000000000000000102031424f61697c89979f9b9088837f7d7c7d7f82878e9893837671869b99846f59442f1a0010263b50657b9096816c56412c1701000000000d22384d62778d99846e59442f1325364759667c8d9e8a78635544311d1100000000000000000000000000000000000a1e33465772889d8f7a644f3a250f000000000000000000000000000000000000000000000000000000000002172d42576c82979c86715645311d0900000000000000000000000010263b50657b90a596816b56412c1601000000000000000000000110202e3e4b5d657b8b9f9e897a645b4a3d2c1e0e0000000010263b50657b90a5a49c98989898989898989898999a9c9f9f9b97918a82796d6158493d2c1f0e00000000000000000000000000000a1a29394758616e7d89949d9f99938f8d8c8d8e92979e9f988f8276655d4b3e2e1f0e000000000000000000000000000000000000000000000000000000000000000000000000000002152737444b5d65707b85909b9c91867c73665e504c3f372e221b10070000000000000000000000152a3f556a7f8181818181818181818181818181808d9f8a8081818181818181818181818181817f69543f2a140000000000172c41566c81968f7a644f3a250f0000000000000000000b20354a6074899e8f7a65503a25100000162b40566b8095947f6a543f2a1500000000000000000000000000000002142432434f5e6677828c969c9e989592919294979b94897e726171869b99846f59442f1a0010253a50657a8f97816c57422c1700000000000e23384d63788d98836e59432e19182a3b4c5e6b80969b8574604b3f2f1d0c0000000000000000000000000000000003172939596f8499937d68533e2813000000000000000000000000000000000000000000000000000000000000152a40556a7f959f8a75604b36200b00000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000210202e3f4b5d667c8b9f9e8979635b493c2c190600000010263b50657b909292929292929292929292929291908f8d8986827c766d645c4c463a2c1f0f000000000000000000000000000000000b1b293a474c6068767e878e93989b9c9e9d9c9a96918a827a6e61584b3f2e2010000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606e7b85909b9d92867c736660544c40382f231c1107000000000000000000000000001e33485d73889696969696969696969696969696969fa89f96969696969696969696969696969686725c47321d0000000000172c41566c81968f7a644f3a250f000000000000000000071c30435470859b937e68533e29130000162b40566b8095947f6a543f2a150000000000000000000000000000000006142532404d59626d7880878c90929393928f8b867e7669605471869b99846f59442f1a000e24394e63798e98836d5836251300000000000f24394f64798e97826c57422d170d1d2f404b6074859b96806b5d4c3b2a180800000000000000000000000000000000162b40566b809596816c57412c1700090909090909090909090909090804000000000000000000000000000010253b50657b90a98f79644f3a291709040007090301000000000010263b50657b90a596816b56412c16010000000000000000000000000210212f3f4c5e667c8c9f9d8879635a4935200c0000000d22374c62777d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7b797774716c6761574e4a3e33291c0f0100000000000000000000000000000000000c1c2933424e57616973797e83858789888685807b766d645c4c473a2e2111020000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607482909a9d93877d736760544a43362f231c11080000000000000000000000000000001e33485d73888d8d8d8d8d8d8d8d8d8d8d8d8d8d8d9fa79e8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d87725c47321d0000000000172c41566c81968f7a644f3a250f00000000000000000000132536586d829796806b56412b160100162b40566b8095947f6a543f2a150000000000000000000000000000000000071422303b484d5a626b72777a7d7e7e7d7a76716961584a5c71869b99846f59442f1a000d22374d62778c9a856f5443301c070000000011263b51667b9095806b55402b1600111d31455663798a9e8d7b6559473625130000000000000000000000000000000012273d52677c929a85705b3c2b191e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1a0d0b0500000000000000000000000b21364b60768a9f96806b584633271f181b1d1e1916100600000010263b50657b909292806b56412c1601000000000000000000000000000311212f404c5e667c8a90928878634d38230e0000000b1f34485962676767676767676767676767676766666462605457524c4639362d1f170c00000000000000000000000000000000000000000c171f3139464c546064696e70727373716f6b6661584f4a3e332a1c11030000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f9d93877d746860554b4336302518120800000000000000000000000000000000000e23384d63787878787878787878787878787878798c9e8879787878787878787878787878787878624d38230d0000000000172c41566c81968f7a644f3a250f00000000000000000000162b40556b809598826d58432d180300162b40566b8095947f6a543f2a1500000000000000000000000000000000000004121d2b343c494d5659626567686867656158544c473a5c71869b99846f59442f1a000b20354a6074889e8974604a35200b00000005192b3c556a7f95917c67513c27120002152738495b687d929d8877615443301c100000000000000000000000000000000e24394e63798e9e89745a4834333333333333333333333333333333332f221f180d00000000000000000000091e3245576e83989e8976614c4437342a3032342e2b23180a00000d22374c62777d7d7d7a644f39240f0000000000000000000000000000000311222f404c5e66777b7d7d7b65503a251000000005182a3b484c525252525252525252525252525251504f4d4a43363c363329211a0f040000000000000000000000000000000000000000000004131b293336434a4e54595b5d5e5d5c5a56514c473a362d1f170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90887e746860554b443730261c1308000000000000000000000000000000000000000c2035495a636363636363636363636363636363758a9d88736363636363636363636363636363625a4935200b0000000000172c41566c81968f7a644f3a250f0000000000000000000013293e53687e939a846f5a452f1a0500162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000d18202c35383b484c50525353524f4c473a3733465c71869b99846f59442f1a00071c3043546e84998e79634e3a29170600020f2034485a6f849a8c77624c37220d00000a1a2c3c4e5f6d8298998372604a3e2d1b0b00000000000000000000000000000b20364b60758a9f8d77624d48484848484848484848484848484848484437342a1d0d000000000000000000031628394f647a8ea098826e60554c473b464749433f36281806000b1f34485962676767645c4a36220d0000000000000000000000000000000003122230404c5961666767655d4b37230e000000000d1d2a34373d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3b3a3835302527211e170b0700000000000000000000000000000000000000000000000000000b171e253035393e43464749484745413c373329221b1004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f647a7e756960564b443731261c140800000000000000000000000000000000000000000006192c3c494d4e4e4e4e4e4e4e4e4e4e4e4e4e5f758a9d88735e4e4e4e4e4e4e4e4e4e4e4e4e4e4d493c2b19060000000000172c41566c81968f7a644f3a250f0000000000000000000011263c51667b919c87715c47321c0700162b40566b8095947f6a543f2a15000000000000000000000000000000000000000000050e1920232a34373b3d3e3e3d3a3733292131465c71869b99846f59442f1a000013253653697e9396806b584633201915151d2d3e4d62788b9c86715947341f0b0000000e1e31414b6175879c947f695c4a3929160300000000000000000000000000081d31445571869c907b665e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5d594c483b2a18050000000000000000000a22364a5c6d8297a09781746861595b5b5c5e5853463623100005182a3b484c5252524f4a3e2d1b070000000000000000000000000000000000041222303a474c515252504b3f2e1c0800000000000d181f22282828282828282828282828282727262422201c13120c0a0300000000000000000000000000000000000000000000000000000000000308131c2024292e3032343331302b26211f170c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c646960564b453831271d14090100000000000000000000000000000000000000000000000e1e2c35383838383838383838383838384a5f758a9d88735e4838383838383838383838383838352b1e0e000000000000172c41566c81968f7a644f3a250f000000000000000000000f253a4f647a8f9d88735d48331e0800162b40566b8095947f6a543f2a150000000000000000000000000000000000000000000000060c0d181f22252829292825211f171c31465c71869b99846f59442f1a00000c21364c6176899e8976614c43352b2a27313d4a5c6b8096927d68533b2a180500000000131e334657647a8b9f8b7a645746321e130000000000000000000000000002152737586d8398947f737373737373737373737373737373737373736f625948341f0b000000000000000000071b2d3e4b6175869b9f97867d7772717072736e64533f2b1600000d1d2a34373d3d3d39362d20100000000000000000000000000000000000000004121c2a34373b3d3d3a372e211100000000000000050b0d121212121212121212121212121211110f0d0b0700000000000000000000000000000000000000000000000000000000000000000000000000070b0f14191b1d1e1e1c1a16110c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4a4f544b453832281d15090100000000000000000000000000000000000000000000000000000e1920232323232323232323232323354a5f758a9d88735e483323232323232323232323232320190e00000000000000172c41566c81968f7a644f3a250f000000000000000000000f24394e64798e9e89735e49341e0000162b40566b8095947f6a543f2a150000000000000000000000000000000000000000000000000000050b0d1012131312100c0a041c31465c71869b99846f59442f1a00000a1f3346586b819697826d614d483c3f37444b5b647a8c9d8874604b36200d0000000000031729394a5c6a7f949c8675614b41301e0e00000000000000000000000000152a3f546a7f949f8a888888888888888888888888888888888888888377624c37220d00000000000000000000101e324657627785959e9c928c8786858789826e58432e190000000d181f2228282824221b10020000000000000000000000000000000000000000000c181f2226282825231c1103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202d36393f3632281d150a010000000000000000000000000000000000000000000000000000000000060c0e0e0e0e0e0e0e0e0e0e0e20354a5f758a9d88735e48331e0e0e0e0e0e0e0e0e0e0e0d0b060000000000000000172c41566c81968f7a644f3a250f000000000000000000000e23384e63788d9f89745f4a25130000162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a00000417293a4c6176879d947f6e625a56555655606979889d8d7c665645321d090000000000000b1b2d3e4a6072849a98826d5f4d3c2c190900000000000000000000000011263b51667b90a89f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d95806b55402b160000000000000000000003162839475962757f8992989c9d9b9b9c9787725d47321d00000000050b0d1212120f0d07000000000000000000000000000000000000000000000000040a0c111212100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1020202020202020202020202020202020201f1e1c1b17130e0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0b0b0b0802000000000002101b222429211e160a02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000000000d22384d62778d9f8a755443301c0700162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a0000000b1e334657647a8b9e948278706c6a6b6e747e899d95806b5e4c3828150200000000000000101c3043546277889e927d675a493727150200000000000000000000000d22384d62788d92929292929292929292929292929292929292929292816c57422d1702000000000000000000000b1b2a3b4756606a767d8387898a8987827d67513c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23263535353535353535353535353535353535343332302c2823201c1308060000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d202121201d1509000000000000070d0f140b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000000000d22374d62778caa8a75604a35200b00162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a000000031729394b5c647b8997988c85817f808389939b907f6b6251402f1a0a0000000000000000001325364859667c8d9e8a78635544311d0800000000000000000000000b2035485a677d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a644f3a240f0000000000000000000000000d1d2a38454b5861686e72737573716d675f4d39241000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d1315201e0f0d08000000000000060c0e1e2014120c030000000000000000000000000000000000000011212f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49484745423d39353025211a0e050000000000000000000000000000000000000000000000000000000000000000000000000000000a1a273136363636312719090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000000000e23384d63788d9f8a745443301c0700162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a000000000b1b2e3e4b5c6478828c949a969495989690867b6a6151443322120000000000000000000008182a3b4c5e6b808f928675604b36200b000000000000000000000005192b3c4d5f6767676767676767676767676767676767676767676767645c4a36220d000000000000000000000000000d1a28323a474c52585c5e5f5e5c58514d41301d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520282a353325221b10020000000e192023333529272014070000000000000000000000000000000000081c2f3f4c5060606060606060606060606060606060605f5d5c5a57524e4a4336352c20190e0000000000000000000000000000000000000000000000000000000000000000000000000002152738454b4b4b4b4437271502000000000001080b1216140c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000000000e23394e63788e9e89745f4925130000162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a000000000010202e3e4b59626d787e8487898885817b73655d50433326160400000000000000000000000d1d2f4051626b7a7d7d78624d37220d0000000000000000000000000e1e30414d52525252525252525252525252525252525252525252524f4a3e2e1b0700000000000000000000000000000a161e2933373d4347494a4947423c39302312010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525333c404a483a372e201000000e1e2c3538484a3f3b32251403000000000000000000000000000000000e23384c5d657575757575757575757575757575757575747371706c686360544e493d352b1e13050000000000000000000000000000000000000000000000000000000000000000000000091d314556606060605544311d080000000008141c20272b29211e170b00000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000000000f24394f64798e9e88735e49331e0000162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a00000000000210202e3b484d5a63696f727372706c6560544c3f332516080000000000000000000000000012223444515d65676762594834200b00000000000000000000000000132330393d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a362e201000000000000000000000000000000000030c171f21282e32343534322d27241d12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2033435055605d4f4b3e2e1b0806192c3c494d5e60544f4332200c0000000000000000000000000000000010263b50657b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888785817d78746c635b4d483c30231507000000000000000000000000000000000000000000000000000000000000000000000b20364b6074767674604b36200b0000000a182630353c403e3633291b0e000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000000000000010253a50657a8f9d88725d48331d0800162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a00000000000002101d2b343c494d545a5c5e5d5b56504b43362f2115070000000000000000000000000000041626343f4b5052524d483b2b19050000000000000000000000000005131e25272828282828282828282828282828282828282828282824221b1002000000000000000000000000000000000000040a0c13191d1e201e1c1812100a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283c50616a7573645c4b37220d0c2035495a63737569614f3b27120000000000000000000000000000000010263b50657b909f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa89e9d9c9a97928e8881786e625a4d41332515060000000000000000000000000000000000000000000000000000000000000000071c31465c71858b8b836f59442f1a00000a1a2836434b5255534b46392c1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000000000000012273d52677c929b86705b46311b0600162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a00000000000000000d19202c35383f4547494846413b353026181103000000000000000000000000000000000816212e373a3d3d37342b1d0d000000000000000000000000000000010a1012121212121212121212121212121212121212121212120f0d070000000000000000000000000000000000000000000000000307090a0907030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f8a877b644f3a250f0e23384d6378888a7f69543f29140000000000000000000000000000000010263b50657b90a59e968b8b8b8b8b8b8b8b8b8b8b8b8b8c8d8e91959a9f9d968c8378675f50433324140100000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a0002152838455460676b696157493c2c190600000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000000000000014293f54697e9499846e59442f190400162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a000000000000000000050e192023292f323433302c25201c14080000000000000000000000000000000000000003111c232528282220190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9099836e593c2b1911263b50667b9098836e583b2a180400000000000000000000000000000010263b50657b90a59681757676767676767676767676767678797c80848b949d9f988a7d6a615042311f0f00000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a00091d32455660737c807e75625a4935200a00000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9d88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000000000000001162c41566b819697826c57422d170200162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a0000000000000000000000060c0e141a1d1e1d1b17100b080100000000000000000000000000000000000000000000080e1012120d0b05000000000000000000000000000000000000000002090b0c0b090200000000000000000000000000070b0e12141517171613100c0903000000000000000000000000000000000000080e1020202016140e040000000000000000000000000000000000000000000000000000071117192020200e0c060000000000000000000c21374c61768c9d88735a4834200d22374c62778c9d87725947341f0b00000000000000000000000000000010263b50657b90a596816b606060606060606060606060616264676b6f777f88979f9e927f6a604e3d2d1a07000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a000b20364b6074849195938778624d38281502000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a9c88735e48331e090000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000000000000002152838596e839895806a55402b150000162b40566b8095947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e828686816c57422c1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a151d2021201d150a0000000000000000000008131c202327292a2c2c2b2925211e160b08010000000000000000000000000003111c23263535352c292116080000000000000000000000000000000000000000000000000a18242b2e3535352320190e00000000000000000a1f33475872879c8d77624d38220d1f34485972889d8c77614c37220c00000000000000000000000000000010263b50657b90a596816b564b4b4b4b4b4b4b4b4b4b4b4c4d4e51565962697681939d9d937e685b4a362110000000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a00152a3f546a7f94a2aaa59a846f5645321d0900000000000000000000000000000000000000000000000000000000000000000000000000071c32475c71868784705b45301b060000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000000091d32455672879c927c67523d27120000162b40566b8095947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000002172b4053646e71716c63523e2a15000000000000050b0d0b0902000000000000000000000000060c0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0c060000000000000000000000000009151d283236363631271a0a0000000000000008131c253035383c3e404141403e3a363228201d150900000000000000000000000011212f383b4a4a4a413d34261604000000000000000000000000000000000000000000000718283640434a4a4a38352c1e0e000000000000000417293a586d8398917c67513c2712182a3b596e8398907b66513b261100000000000000000000000000000010263b50657b90a596816b5641363636363636363636363738393c3b474c58616d7e939e9f8b79634e3f2e1b080000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a001a2f445a6f8499afc0b59f8b74604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000051a2f4356687172706655422d19040000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000000000000b20364b60758a9f8e79634e39240e0000162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000001124364653595c5c57524534220f00000000000d182022201d150a000000000000000000000e19212324242424242424242424242424242424242424242424242424242424242320190e00000000000000000000000919273138454b4b4b453827150200000000000818253036434a4e51535556575553504b4639353127191202000000000000000000081c2f3f4c5060606056514434210e000000000000000000000000000000000000000000001124364653596060605e493c2c19060000000000000014293e54697e9396806b56362614142a3f54697f9495806b5536251300000000000000000000000000000010263b50657b90a596816b56412c212121212121212121212324272a343a464c606b8095a49a84705d4b37220e0000000000000000000000000000000000000000000000000000000000071c31465c71869b99846f59442f1a00192e43586e8398adbbb49f8973604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000001427394a565c5c5b5548382612000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000000000000f24394f64798e9f8a75604b36200b0000162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000718283640434747423e34271705000000000d1d2b34373631271a0a00000000000000000e1e2c3538393939393939393939393939393939393939393939393939393939393938352c1e0e00000000000000000002152737444b566061605645311d090000000000132536434a54606367696a6c6c6b68656157524b44372f1d150a00000000000000000e23384c5d657575756b62513d291400000000000000000000000000000000000000000002172b4053646e757575705a4935200c000000000000000f253a4f647a8f9a85705443301c10253a50657a8f9a846f5443301c07000000000000000000000000000010263b50657b90a596816b56412c160b0b0b0b0b0b0b0b0c0d0f12181f2933424b6074879ca28f7a654f3a251000000000000000000000000000000000040a0c1013141513110d0b0600071c31465c71869b99846f59442f1a0011263c51667c919faaa096806b5443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000a1c2c394347474542382a1a08000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000000000000013283d53687d929c87715645311d090000162b40566b8095947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000a18242b2e32322c2a2217090000000005182b3b484c4b453827180800000000000006192c3c494d4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d493c2c19060000000000000004121d314455606e757674604b36200b00000000071c304354606e74787c7e7f8181807e7a766f6760554c4031271a0a0000000000000010263b50657b8a8a8a806b56412c1601000000000000000000000000000000000000000004192e43596e828a8a8a78634d38230e000000000000000b20364b60758a9e8974604b35200c21364b61768a9e8974604a35200b000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000050b171f314455677c91a897826d573b2b190500000000000000000000000003090c171f2125282a2a29272320190e0b1c31465c71869b99846f59442f1a000f24384c5e6a7f8b908d8274604b362614010000000000000000000000000000000000000000000000000000000000000000000000000000000e1c272f3232302d261a0c00000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000006192c3c586d829897826c57382715020000162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000071117191c1c17150f0500000000000b20344859626056453625130000000000000c2135495b636363636363636363636363636363636363636363636363636363636363625a4935200c00000000000002122332434b6073838a8d7a644f3a250f000000000b20354a607282898d919395969695938f8a847d74665e4b4538281a0a00000000000010263b50657b909f96816b56412c1601000000000000000000000000000000000000000004192e43596e83989f8d78634d38230e00000000000000091d32455671869b8e79634e39240e1e32465771869c8d78634e38230e000000000000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000041527374b6075899f9d8873594834200b00000000000000000000000a161e212933363b3d3f3f3e3c38352b22201931465c71869b99846f59442f1a00091d2f404f616a777b786d60564532180800000000000000000000000000000000000000000000000000000000000000000000000000000000000a141a1c1d1b1912080000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000000000000c2035495a73889d927c67523d2712000000162b40566b8095947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c627774605443301c1300000000000e23384d6378797979797979797979797979797979797979797979797979797979797978624d38230d000000000000102030414f616d819796816b5c4b37220d00000000071c30435474899ea69d9a9897989a9da69f9a92877c6c60564538281502000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e0000000000000002152838576c8197927d68533d2813162839576d8297927d67523d2812000000000000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000091e3245566f8499a68c77624d37220d00000000000000000001131a2832363a464c5053545453514d483c38342b31465c71869b99846f59442f1a0000122232434f596265635b4b453828160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000000000000e23384d63788da48c77624c37220d000000162b40566b8095947f6a543f2a15000000000000000000000000061016181f1f0e0c07000000000000000000000000000000000000000000000000000000000000000000071c32475c71868272604a41301d0d000000001d32475d72878e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e85705b46311b00000000000e1e2e3e4d5f6a7f949c8775604b3e2e1b0800000000001325365b7085918d888583828385888e949ea59d918174605645321d13000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000013283d52687d9297826c5738281613283e53687d9396816c57382715020202020200000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000002162838566b8096a58f7a65503a2510000000000000000009151d3038454b5358616568696a6866625a564d483c32465c71869b99846f59442f1a0000041525323b484c504e493d32281a0a000000000000000000000000000000000000000000080d0f202020110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000000005182a3b53697e939c8772594834200b000000162b40566b8095947f6a543f2a1500000000000000000000000917232b2d343424211a0f010000000000000000000000000001060809070300000000000000000000000002172c42576c8195806b5f4d3b2a18050000001d32475d7287969696969696969696969696969696969696969696969696969696969685705b46311b000000000b1b2b3c4a5c677d8d9f8d7b6556453220100000000000000e23394e63797c78736f6e6d6e7073797f88959f9f978374604b41311c0c0000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000000020b11131823394e63788e9b86715645321e1824394e64798e9b86705645311d1818181818110f0900000000000010263b50657b90a596816b56412c1601000000000000000000000000000000142a3f54697f94a6917c66513c27110000000000000009192731414d56606870767a7d7f7f7e7c78726b625a4b46395c71869b99846f59442f1a00000007151d2b34373b38352c1e160a000000000000000000000000000000000000000002101b222535353526241d1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000b1f34485970859a95806b563b2b1805000000162b40566b8095947f6a543f2a1500000000000000000000061727353f42494939362d1f0f00000000000000000001080b11171b1d1e1c18110b08010000000000000000000b20354b607384917d675947341f0d000000152a40556a7f81818181818181818181818181818181818181818181818181818181817f69543f291400000009192939485a647a8b9f96816c5d4b382816020000000000000c2135495b6367625a5a5857595a5b636a75808d9fa198826d604e3a29170400000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000006131e26282d2d354a6074899e8a76604b362d2d2d354b6075899e8a75604b362d2d2d2d2d2d27241d12040000000010263b50657b90a596816b56412c160100000000000000000000000000000013283e53687d93a7917c67523c271200000000000008182737444b5f67757e858b9092949493918d8780786c61574a5c71869b99846f59442f1a00000000000d1820222623211a0f0200000000000000000000000000000000000000000010202e373a4a4a4a3c382f2212000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000000d22374c62778b9f8e79644e39240f00000000162b40566b8095947f6a543f2a15000000000000000000001023354552585e5e4e4a3d2d1a070000000000000509151d20262c313333312d26201c14080000000000000000081d3144556278898977624c3c2b1905000013283c50616a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69614f3b271200000115273746576278889d9d8775614b3f2e1a0a00000000000000061a2c3d494e524d483c4342433d4a4e57616b7d8c9fa0927d685847331f0900000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e0000021324313a3d42424243546f859a8f7a654f4242424242445570859a8f79644f424242424242423c393022120000000010263b50657b90a596816b56412c1601000000000000000000000000000000152a40556a7f95a5907a65503b25100000000000001325364455606c7d88939b9f9e9895949394979b958b8175645c5c71869b99846f59442f1a000000000000050b0d100e0c0600000000000000000000000000000000000000000000081b2e3f4b4f606060514c402f1d090000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000000071b2d3e53697e939c87725c4a36210d00000000162b40566b8095947f6a543f2a1500000000000000000000162b3f52646d7474635b4a36210c00000000080d18202731353b4146484846423b35302618100200000000000001152737485a697e93816c5a4834200b00000d20334350555757575757575757575757575757575757575757575757575757575757544f4332200c0000081d3144556175869c9f907b6557463221110000000000000000000f1f2c35393c38352b2e2d2e2d3639464b5f687d92a19e8976614c37271502000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000b1e31424e5357575757576b8095947e6957575757575757576b8096937e695757575757575757514d40301d0900000010263b50657b90a596816b56412c16010000000000000000000000000000071b2e3e576c8297a78e79634e39230e0000000000071c304354607381919da39b908983807e7d7f81868c9596877a675f71869b99846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000d22374b5d64757575665e4c38240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000000000d22364a5c70859b95806a553e2d1a0700000000162b40566b8095947f6a543f2a1500000000000000000000182d42586d82898979634e39240e000309111c232b3437444b50565b5d5e5c58514b43362d20110300000000000009192b3c4b6075888b78624d38220e0000041525333c4041414141414141414141414141414141414141414141414141414141413f3b32251403000b1f31424b60738399a497816c5d4b39281603000000000000000000010f1a2123272320191918191a212932414e5f6e8399a795806a5544311d08000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000011263a4e60686d6d6d6d6d6d7c9198826e6d6d6d6d6d6d6d6d6d7c9198826d6d6d6d6d6d6d6d6d665e4d39240f00000010263b50657b90a596816b56412c160100000000000000000000000000021222374b5c72879d9e8974604b35200b00000000071b2e3e4a607282979f9f93857b746e6b6968696c7178808a998b7d6771869b99846f59442f1a0000000000000000000000000000000000000000000000000000000000000000000005182a3b4f647b8a8a8a7c66513d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000004172a3a4f647a8e9f8b78624d38220f0000000000162b40566b8095947f6a543f2a1500000000000000000000172d42576c8297907b665138281611161e212e373b484d5560666c707273716d6660544a3e2e21110000000000000c1c2a334556697f94806b553c2b19050000071520282a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2927201407000011263a4e606c81979e9b8776614c3f2f1b0b000000000000000000000000060c0e120d0b06000200070b161e31414d62778b9f9e8874604b36200b000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000013283d53687e82828282828282989e898282828282828282828283999e888282828282828282827c66513c271100000010263b50657b90a596816b56412c16010000000000000000000000030a151d31424f647a8fa599836e5544311d08000000000d22364a5c6a8095a09f8b7e7265605556545354575a626b7783938d7d71869b99846f59442f1a000000000000000000000000000000000000000000000000000000000000000000000b1f3448596e83989f9a846f5b4935210b00000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000000000a1f3347586d829798836e5a4835200b0000000000162b40566b8095947f6a543f2a150000000000000000000014293f54697e9496806b56453227272832363f4b5059626a747b8185888886827b73645c4b3f2e1d0d0000000004182a3a474c5762788d87725a4835200b0000071520282a2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2927201407000013283e53687d8a8989867a645746332111000000000000000000000000000000000000000000000000000313203448596e8399a6907b66513b2611000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000a1f34495f748a979797979797989fa79e97979797979797979797999fa69e979797979797979797826d57422d1802000010263b50657b90a596816b56412c160909090909090001080b0c10161e2832414e606f849aa2907b665037271501000000081b2e3f4f647a8c9f9f8c7c6860544b44373f3e3f3c484d59626e7e8d8c7b869b99846f59442f1a000000000000000000000000000000000000000000000000000000000000000000021527374c62778b9f9f9f8c79634e39291603000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000417293a4c61768a9f8f7a654f3c2b19050000000000162b40566b8095947f6a543f2a15000000000000000000000f24394f64798e9e8875604b45383c39454b535d656e77808890969b9d9d9b9790857a655d4b3b2b18050000000a1f334758616f7676888d78624d38220d00041525333c4041414141414141414141414141414141414141414141414141414141413f3b322514030011263a4e606874747471645c4a39291703000000000000000000000000000000000000000000000000000005182b3b50667b90aa97816c57392816030010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00081d32485d72878a8a8a8a8a8a8b8d9f9f8c8a8a8a8a8a8a8a8a8a8b8d9f9f8c8a8a8a8a8a8a8a8a7e69533e291400000010263b50657b90a596816b56412c1e1e1e1e1e1e1e1e151d202125283238454b5f687d92a29a84705e4c381909000000000e22374b5d70859aa2927d685e4a4336312729282a2b353b474c61697d8c89889d99846f59442f1a000000000000000000000000000000000000000000000000000000000000000000081d3144556a7f959f8a9f96816c5746321e0a000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000000000a1f3347586a80959b86715d4b371e0e000000000000162b40566b8095947f6a543f2a15000000000000000000000d22364a5c71869c96816c6056525154576068717b838b959d9a938d8b8b8e969f9b8a7b65594834200d0000011426364c6176838b8c9e917b66513c2611000d20334350555757575757575757575757575757575757575757575757575757575757544f4332200c000b1f31424e535f5f5e5c4f4a3e2d1b0b000000000000000000000000000000000000000000000000000000000d21364b60758a9f9c87725746321e090010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00061b3044576972757575757575758197927d757575757575757575758297917d757575757575757469604f3b261200000010263b50657b90a596816b5641333333333333333333273135373a39464b56606a7d8c9f9e8979634d402f1c00000000011527374f657a8fa29a846f604e4030251d1514131419202a34424f5f687e939da699846f59442f1a0000000000000000000000000000000000000000000000000000000000000000000b20364b6074889d9681969e8976614b362111000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000004182a3a4c6176899e917c67513f2e1c00000000000000162b40566b8095947f6a543f2a1511110e0c070000000000071b2d3e52677d929f9680746b6766696e757d8690999e968c847e78767679808b9d9e8977624d3b2b180500081c3043546e82989faba8937e68533e29130013283c50616a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69614f3b271200021424313a3e4949494639362d20100000000000000000000000000000000000000000000000000000000000091e32455671869b9f8a76614b36210c0010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000115283a4b575d5f5f5f5f5f5f687d9396816c5f5f5f5f5f5f5f5f687e9396816b5f5f5f5f5f5f5f534f42321f0c00000010263b50657b90a596816b564848484848484848484837444b4c4f5457616874808c9f9d8b7b655b4935221100000000081d3144556d8298a48f7a644f42311c130801000000050d181f32414e606c8197a699846f59442f1a0000000000000000000000000000000000000000000000000000000000000000071a2d3d52677c919f8b77899e937e68533f2f1c080000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000000a1f3347586a80959b8672604a35201100000000000000162b40566b8095947f6a543f2a26262624211a0f01000000001025394d5f6e82989e9687807c7c7e8389939c9c938981786f68636060646b79889d98826d594834200b000b20354b60758a9fb4bca9937e69543e291400152a40556a7f81818181818181818181818181818181818181818181818181818181817f69543f2914000006141f26283434343124221b1002000000000000000000000000000000000000000000000000000000000002162838576c8297ab8e79644f39240f0010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000b1d2d3a44484a4a4a4a4a4e64798e9b857055444a4a4a4a4a4f64798e9a857055444a4a4a4a4a3e3b3224140200000010263b50657b90a596816b5e5e5e5e5e5e5e5e5e5e5e5e55606165696e767d86959f96877a655d4b3c2c1904000000000b20354b6075899e9c86715c4b372313000000000000000005142331424b6075889d99846f59442f1a00000000000000000000000000000000000000000000000000000000000000000d21364a5c70859a9b857082979c86715d4b37230d0000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000071b2d3e4c6177899e907b665443301c0700000000000000162b40566b8095947f6a543f3b3b3b3b39362d1f0f000000000a1e30414b607483939e9d95929193989e9890867e766c635b534e4b4b4f5b647a8c9f8b77624d37220d000b20364b60758a9fb4b8a6917b66513c2611001d32475d7287969696969696969696969696969696969696969696969696969696969685705b46311b000000020b11131f1f1f1c0f0d070000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94a6907b66513b26110010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e0000000f1d28303235353535354b6075899f8a75604b36353535364b60758a9f8975604b353535353429261f14060000000010263b50657b90a59680737373737373737373737373737475767a7e8389929c968b8176645c4b3f2f1e0e00000000000f253a4f647a8fa7957f6a553e2e1b0500000000000000000005141e32455671869b99846f59442f1a000000000000000000000000000000000000000000000000000000000000000417293a4e64798ea2937e697a8fa4907b65503c2b190500000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00000d22364a5c6c81979b85705e4c3625130000000000000000162b40566b8095947f6a5450505050504e4a3d2d1f0e00000001131e32455660737e889095979795918a837b726961574e493d3836363d4b5d6e8399937e68533e281300091d3145566f849aa3a89e8875614b36210c001d32475d72878d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d86705b46311b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000b151b1d2020201d31445570859b8e79644f3924201d31445570859b8e79644e392420201f14120c02000000000010263b50657b90a59f8a88888888888888888888888888898a8c8f9398938f8780786c61584a3e2f2111000000000000142a3f54697f94aa8f7a654f3a25100000000000000000000000021628385c71869b99846f59442f1a000000000000000000000000000000000000000000000000000000000000000a1f3347586d82979e89766171869c99836e5a4834200a00000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00071a2d3d4e647a8c9f8d7a644f402f18080000000000000000162b40566b8095947f6a666666666666635b4a3d2c1a060000000216283845556069747b7f81817f7b766e655d544c4639352c2321212e3f51677c9198836d58432e1800021527384d6278858e90897c665746321e09000d23384d6278787878787878787878787878787878787878787878787878787878787878624d38220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7937e69533e29140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000000000106080a0a01152737566c8196937e68533e2913152737566c8196937d68533e2813000a00000000000000000010263b50657b90a5a79e9c9c9c9c9c9c9c9c9c9c9c9d9d9ea8a19e89827e7a736b625a4c473a2d201103000000000003182d43586d82989f8a76604b36210b0000000000000000000000001c31465c71869b99846f59442f1a000000000000000000000000000000000000000000000000000000000000011426364c61768a9f97816c57687d939f8b78624d38281502000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000d21364a5c70859a97826d5d4b372212000000000000000000162b40566b809597817b7b7b7b7b7b7b79635b4935210c000000000a1a2837444b5560666a6c6c6a666157504b3f363329211a0e0b1023384d62788d9885705a45301b00000a2035485a6273797a76665e4c39281603000c2035495a626363636363636363636363636363636363636363636363636363636363625a4835200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6947e69543f29140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000000000012273d52677c9297826d5839291712273d52677d9297826d57392816030000000000000000000010263b50657b90a59e89878787878787878787878788888a8d91979d8780796d625a4d41332a1c1002000000000000061b31465b70869b9d87725645321e090000000000000000000000071c31465c71869b99846f59442f1a000000000001080b1216140c0a0300000000000000000000000000000000081c304354697f94a28e79634e6075899e95806b5645321d09000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000f24394e64798e9e8977614c3f2e1b04000000000000000000162b40566b80959f97909090909090908d79634e38230e00000000000a19263137444b5055575755514b4639372e211e170b0600000b21364b60758283806b56402b16000005192b3c485560636561584c402f1b0b000006192c3c494d4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d483c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1609090909090909090909090909090909090909090909192e43596e8398a28d78634d38230e00000000000000000000000e23384d63788d9c87715746331e0e23384d63788d9c86715745321e090000000000000000000010263b50657b90a596807272727272727272727272727375787c828994968b8278675f4f4332241401000000000000021628385d73889d9a856f5a382816030000000000000000000000071c31465c71869b99846f59442f1a0000000008141c20272b29211e170b0000000000000000000000000000000b20354b6073879d9a85705b4a576c81969e8875604b362010000000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f000b20354b6073828f7e68584733201000000000000000000000162b40566b808d8d8d8d8d8d8d8d8d8d8d7b654f3a251000000000000009141d2731363b404242403c363229231c110a0300000000091e324556606d6d6b62503d28140000000e1e2b37444b4e504c463a2f2212000000000e1e2c3538383838383838383838383838383838383838383838383838383838383838352b1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e2e43596e8398a28d78634d38230e00000000000000000003030c2035495a73889e8b76614b36210c2135495b73899e8a76604b36210b0303010000000000000010263b50657b90a596816b5d5d5d5d5d5d5d5d5d5d5d556063676d767e889898897d69614f42311f0f000000000000091e324556748a9f98836e58432e19000000000000000000000000071c31465c71869b99846f59442f1a0000000a182630353c403e3633291b0e0000000000000000000000000006192c3c51667b90a5917c67513d4d63788c9f927d67523e2e1b070000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f00081d314455606d7a72604a3a2a1802000000000000000000000c21374c6176787878787878787878787875604b36200b000000000000000109151d20262a2c2c2a26211e160b080000000000000003162838454b585856504433210e000000000e19263135393b3633291b120400000000000e19202323232323232323232323232323232323232323232323232323232323232220190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b5641333333333333333333333333333333333333333333333333333343596e8398a28d78634d38230e00000000000002080b181818192c3c5a6f8499907a65503b2518192c3c5a6f849a8f7a654f3a25181818170d0c060000000010263b50657b90a596816b5647474747474747474737444b4d525761697682959e917f69604e3d2d1a0700000000000b21364b60768ba997816c57422c17020000000000000000000000071c31465c71869b99846f59442f1a00000a1a2836434b5255534b46392c1e0e0000000000000000000000000c2135495b6f84999d8874604b35495a6f84999b85705c4a36220c0000000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0001142637444b5d65605443301c0c00000000000000000000000a1f334758616262626262626262626262605645321d0900000000000000000002080b1115171715110c0a03000000000000000000000a1a2832364343403d33261604000000000009141d202425211f170b0000000000000000060c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b5648484848484848484848484848484848484848484848484848484848596e8398a28d78634d38230e000000000009151d202d2d2d2d2d40556a8095947f6a543f2d2d2d2d40556a8095947e69543f2d2d2d2d2c2320190e00000010263b50657b90a596816b564132323232323232322731353839464b58616e7f959d937e685b4a36211100000000000c21364c61768ba196816c56412c17010000000000000000000000071c31465c71869b99846f59442f1a0002152838455460676b696157493c2c190600000000000000000000031628394d63788c9f957f6a5544313c51667b90a38f7a644f3a2a180400000000000000000000000000000000000000000000000000000000000000000000172c41566c81968f7a644f3a250f0000091926313f4b4f4a433625130000000000000000000000000417293a474c4d4d4d4d4d4d4d4d4d4d4d4b453828150200000000000000000000000000000202000000000000000000000000000000000a161e212e2e2b282116080000000000000001080b0e100c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e6e8398a28d78634d38230e00000000091927313642424242424251667b9098836e593b424242424251667b9098836e583a424242424138352c1e0e000010263b50657b90a596816b56412c1d1d1d1d1d1d1d151d202329323a464c616c81979f8b79634e3f2e1c08000000000c21374c61768ca196816c56412c17010000000000000000000000071c31465c71869b99846f59442f1a00091d32455660737c807e75625a4935200a00000000000000000000091e3246576c81969f8b77624c3727354b6073879d98826d5947341f0900000000000000000000000000000000000000000000000000000000000000000000172c41566c818d8d7a644f3a250f00000009141d2e373a3530251808000000000000000000000000000c1c29333738383838383838383838383632281a0a0000000000000000000000000000000000000000000000000000000000000000000003090b181816140e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e101315161717161614120f0b0903000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a5968073737373737373737373737373737373737373737373737373737373737373738398a28d78634d38230e00000002152737444b5858585858585861778c9d8872595858585858585861778c9d8772585858585858564d493c2c19060010263b50657b90a596816b56412c1608080808080001080b0e161e2933434b6075889d9a85705d4b37230e000000000c21364b61768baa97826d57422d18020000000000000000000000071c31465c71869b99846f59442f1a000b20364b6074849195938778624d382815020000000000000000000c21364b6175899e98836e5948341c304354697f949f8a77614c372614010000000000000000000000000000000000000000000000000000000000000000000c21374c6176787875604b36200b0000000001101b2225201c13080000000000000000000000000000000c171f212323232323232323232323201d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e131c202326282a2b2c2c2c2b292724211e16110b09030000000000000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a59f8a88888888888888888888888888888888888888888888888888888888888888888b9fa28d78634d38230e000000081d314455606d6d6d6d6d6d6d6d72879d8c776d6d6d6d6d6d6d6d6d72879d8c766d6d6d6d6d6d6c625a4935200c0010263b50657b90a596816b56412c1601000000000000000000030b171f324557687e93a28f7a65503a2510000000000b20354a60748a9f99836e59442e19000000000000000000000000071c31465c71869b99846f59442f1a00152a3f546a7f94a2aaa59a846f5645321d090000000000000000081c2e3f53687e93a38f7a654f3b2a1826364c61768a9f947f6a5544311d080000000000000000000000000000000000000000000000000000000000000000000a1f334758616262605645321d09000000000000080e100b07000000000000000000000000000000000000040a0c0d0d0d0d0d0d0d0d0d0d0d0b0902000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e1114151616151513100c0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0f1a2124253035383b3e4040414241403e3c3936322826211e160a08000000000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a5a89f9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9fa9a28d78634d38230e0000000b20364b6074828282828282828282889d998382828282828282828282889d99838282828282828178624d38230d0010263b50657b90a596816b56412c16010000000000000000000000041628394c61768b9f97826d583a2a1804000000071c30435473889d9a856f5a3b2a18050000000000000000000000071c31465c71869b99846f59442f1a001a2f445a6f8499afc0b59f8b74604b36200b00000000000000000e23374b5d71869c9b86715d4b371d0d1f3347586d82979d8774604b35200f00000000000000000000000000000000000000000000000000000000000000000004172a3a474c4d4d4b4538281502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e151d202326292a2b2c2b2a2825221f18120b09030000000000000000000000000000000000000000000000000000000000000000000000040c171f212d363936434a4d505355565757565554514f4b45383c363228221b100900000000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a59f8b89898989898989898989898989898989898989898989898989898989898989898b9fa28d78634d38230e000000081d314455738897979797979797979da6a199979797979797979797979da6a19997979797979796836e59432e190010263b50657b90a596816b56412c16010000000000000000000000000a1f33465870859a9d88735947341f0a000000001325365b70859a9d88735947341f0b0000000000000000000000071c31465c71869b99846f59442f1a00192e43586e8398adbbb49f8973604b35200b0000000000000005192b3b50657b90a4937d68533f2e1b04172a3a4f64798ea3917c66513d2c1a060000000000000000000000000000000000000000000000000000000000000000000c1c2a333738383632281a0a00000000000000000000000000000000000000000000000000000003090b170d0b050000000000000000070d0f1b1b1b1b1b1b1b1b1b1b1b12100a010000000000000000000000000000000000000001080e192123273135393c3e404041403f3d3a37342a27211e160a0600000000000000000000000000000000000000000000000000000000000000000c171f2933363d4a4e5554606365686a6b6c6c6b6b696764605657514b4538372e241c12070000000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a5968074747474747474747474747474747474747474747474747474747474747474748398a28d78634d38230e00000002152737546a7f8a8a8a8a8a8a8a8a8e97a39b8a8a8a8a8a8a8a8a8a8a8e97a39b8a8a8a8a8a8a8a86725c47321d0010263b50657b90a596816b56412c16010000000000000000000000000417293a586d8297a68c77614c37220c00000000172c42576c8197a68c77624c37220d0000000000000000000000071c31465c71869b99846f59442f1a0011263c51667c919faaa096806b5443301c08000000000000000b203448596e83999e8975604b362110000c22364a5c70859b9a846f5b4936210b000000000000000000000000000000000000000000000000000000000000000000000c171f212323201d150a0000000000000000000000000000000000000000000000000000000a161e212c2220180d000000000002101b2224303030303030303030303027251e1305000000000000000000000000000000000009151d202c353837444b4e51535556565554524f4c473b3c363228211a0f050000000000000000000000000000000000000000000000000000000008131c29333a464c545b636a6f74787b7d7f80818181807e7c7976716c6660564f4b3e382f221b1003000000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e6e8398a28d78634d38230e0000000009273c4f616a7475757575757575798e9b8575757575757575757575798e9b8575757575757575726857432f1a0010263b50657b90a596816b56412c160100000000000000000000000000162b41566b8096a38e78634e39230e0000000013283d52687d92a5907b66503827150200000000000000000000071c31465c71869b99846f59442f1a000f24384c5e6a7f8b908d8274604b36261401000000000000021528384d62788b9f96816b5745321e0900071b2d3e52677d92a28e79634e3929170300000000000000000000000000000000000000000000000000000000000000000000040a0c0d0d0b09020000000000000000000000000000000000000000000000000000000a1a2832364237342b1d0e0000000010202d363945454545454545454545453d393023130100000000000000000000000000000613192731353c494d5555606366696a6b6b6a6a6865615958524b4538352c20190e01000000000000000000000000000000000000000000000000000d1825303a474c58616972797f84898d909395959697969593918e8a87817b756d645c514c40362d1e160a0000000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b5649494949494949494949494949494949494949494949494949494949596e8398a28d78634d38230e000000000c2032434f545f6060606060606074899e8a7560606060606060606075899e8a756060606060605c574a3a27140010263b50657b90a596816b56412c160100000000000000000000000002172c42576c8197a48e79644f39240f000000000d22384d62788da296816c5645311d0a00000000000000000000071c31465c71869b99846f59442f1a00091d2f404f616a777b786d60564532180800000000000000091d3245566b80959f8c78634d3928160300001020364b6075889e97816c5746331e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162838454b574d483b2c1e0e0000071b2d3e4a4f5b5b5b5b5b5b5b5b5b5b5b524d41301e0a000000000000000000000000000e19203037444b525b636a6f75787b7e7f8081807f7d7a77726d6760564e493d352b1c140800000000000000000000000000000000000000000000010f1d2a36434a58616b767f878e959a9e9f9c99979695959596999b9f9f9c979189827a70665e4f4a3e32281a0a00000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b5641343434343434343434343434343434343434343434343434343443596e8398a28d78634d38230e00000000031525323c3f4a4a4a4a4a4a435470859a8f79644f4a4a4a4a4a445570859a8f79644f4a4a4a4a47433a2c1c0a0010263b50657b90a596816b56412c160100000000000000000000000006192b3c596e8399ab8d78634d38230e000000000b2035485a70859b9e8875604b38271502000000000000000000001c31465c71869b99846f59442f1a0000122232434f596265635b4b4538281600000000000000000b20364b6075889e99846f5b49351b0a000000091d3145566b80959e8976614c36251300000000000000000000000000000000000000000000000000000000000000000000050b0d1b1b1a18150f0d070000000000000000000000000000000000000000000000091e324556606c6259493c2c1906000d22364a5c647070707070707070707070675f4d392510000000000000000000000004121e2c35414d55606770787f85898e91939595969594928f8c87827c756d635b4d483c3026180c000000000000000000000000000000000000000003111f2d3b4754606876818a949ca39b948f8a87848281807f808183868a8f94999f9e978f857b70645c4b4538281603000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f2e43596e8398a28d78634d38230e0000000000071520272a34353535352636566b8096937e69533e3535352637566b8196937e69533e353535322f271c0e000010263b50657b90a596816b56412c16010000000000000000000000000a2035495a72879c9f8b76604b36210b0000000005192b3c52687d92a7917c675645311d110100000000000000000e1e2f3f5c71869b99846f59442f1a0000041525323b484c504e493d32281a0a00000000000000071b2d3e52677d92a5907b66513c2c1900000000021527384d62788b9f937e695443301c0700000000000000000000000000000000000000000000000000000000000000000e19202230302f2d2a24221b10090000000000000000000000000000000000000000061a2c3d4b60748177635a4935200c000f24394f647a84858585858585858585857d67523d271200000000000000000000061422303c494d5f67747d858d949a9fa89f9d9b9a9a9b9c9ea8a59d97918982796e625a4b43362a1c0e0000000000000000000000000000000000000211212e3d4a5962727e89969e9e968d867f7a75716f6c6b6a6a6b6c6e71767a7f848a939ca29a90847a6b605645321e09000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1609090909090909090909090909090909090909090909192e43596e8398a28d78634d38230e000000000000030c12151f20202020273c51677c9198826d583a291720273c52677c9198826d583a2a17201d1a140a00000010263b50657b90a596816b56412c160100000000000000000000010c1a2b3b4d62788da49c87715645321e0900000000000e21364b6075899e9c8674604b3f2e1c1408010000000008111d2b3c4b5d71869c99846f59442f1a00000007151d2b34373b38352c1e160a00000000000000000d22364a5c70859b9d8773604b35200e00000000000a203448596e83999c8773604a35200e000000000000000000000000000000000000000000000000000000000000000e1e2b3538454544433f39362d241d1202000000000000000000000000000000000000092135495b6b80958978634d38230e0010253a50657b8f989898989898989a9a947f6a543f2a1500000000000000000007152532404c5a626f7d87929ba39f99938e8b888685858687898c91969ca49e978c83786a6054473a2c1e0e000000000000000000000000000000000010202e3f4b5c647783939e9f96898178716a6460565957565555565759566065696f767e87929da29a8c8074604b36210b000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000000000a0b0b0b0d22374d62778c9c87725846331f0d23384d62788d9c87725847331f0a0705000000000010263b50657b90a596816b56412c160303030303030400040a0c141d293848596a7f95aa96816c57382816020000000000091e3245566a7f94a4947f6a5d4b3e30261c14131213141b222f3c485a657b8c9f99846f59442f1a00000000000d1820222623211a0f02000000000000000004182a3a4f647a8fa3947f695443301c08000000000005192b3b50657b90a4907b65503c2b1906000000000000000000000000000000000000000000000000000000000005192b3c484d5b5b5a58554e4a3e39301d150a00000000000000000000000000000000091930414e63798b9f8e79644e39240f000b20364b60758083838383838382869c947f6a543f2a15000000000000000006152533434f5e667884929da59d938b847e79767371706f707174777b80878f989f9f988a7f726158493c2c1f0e0000000000000000000000000000000d1d2d3e4b5d657a8899a19c8c81766c635a544f4b453842414040404138454b4f54586169737d87939f9f95806b56402b16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000000000000000000000000000b2034485973889d8b76614c36210c2035495a73889e8c77614c37210c0000000000000010263b50657b90a596816b56412c18181818181818191a171f2126313a465662778a9ea28f7a644f3a250f000000000000031628384b6073869c9f8b7b655c4b433630262827282a2e373f4c5a6278889daa99846f59442f1a000000000000050b0d100e0c06000000000000000000000a1f3447596d82989f8a77614c362614010000000000000d23374b5d71869c99836e5a4835200a00000000000000000000000000000000000000000000000000000000000b2035485a6270706f6d6a645c514d4032281a0a0000000000000000000000000000011527374d5f6f849a98826e5c4a36210d00091d324556606b6d6d6d6d6d6d6d8095947f6a543f2a150000000000000003132433435061697c899aa29e93877e766f696460565c5b5a5b5c5962666b727a828b99a19f948476625a493d2c1c0c0000000000000000000000000008182b3b4a5c657b8a9da199867a6c61584d493c3a3632282d2c2b2a2b2c2832363a3a474c546067747e8b9f96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000000000000000005192b3b596e8399907b65503b2510192b3c596f8499907b66503b26110000000000000010263b50657b90a596816b56412e2e2e2e2e2e2e2e2e2f2a333737444b586174849aa89a84705c4b37220d000000000000000a1d314455647a8c9f9e8a7a6960544b43363d3c3d3f3e4b4f5d6578869a8b9f99846f59442f1a00000000000000000000000000000000000000000000011426374c61778a9f97826d584733180800000000000000081c2f3f53697e939f8c78624d38281603000000000000000000000000000000000000000000000000000000000d22384d6278848584827f7971665e4b453828180800000000000000000000000000081d314455677c919f8a78624d3e2d1a070002152838454b565858585858586b8095947f6a543f2a15000000000000001121314250616a7f8d9ea29a897e74696158544f4b45384545463b484c51565c646d7883919ea29a8778635b493a2a19090000000000000000000000011426364859647a8a9e9f978375645c4c473a352c25211e16171615151617161e2125293336434b556073889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000000000000000000152a3f546a7f94947f6a543f2a15152a40556a7f9595806a55402b150000000000000010263b50657b90a596816b5643434343434343434344453a474c50556067768399a29f8b79634e3e2e1b0800000000000000011527374a5c687e939f9e8a7e736660545552525254585c646e7b889a84819799846f59442f1a00000000000000000000000000000000000000000000081d3144556a7f94a38e7a644f3a2a170000000000000000001121364b6176899e96806b5645321e09000000000000000000000000000000000000000000000000000000000e23384e63788d989998948e867c6d605645362614010000000000000000000000021628384b6074879c947f6a594834200f0000000a1a283236414343434343566b8095947f6a543f2a150000000000000b1b2e3f4e606a7f949f9e9684776960554c473a393632283030312b34373c3e4a4f5a626e7c8a9da59d88796358473726140100000000000000000000081c3043546278889da197817361574a3e332a20190f0b090200010000010003090b10171f263037445d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000000000000000000000000000010253b50657a9099836e593b2b1811263b50667b9099846f5a3c2c190600000000000010263b50657b90a596816b58585858585858585858595a5b5861656b747d8899a19f927e685b4a36201000000000000000000009192d3e4e60697f8d9e9e93857b746e6a686768696d727a8390998576809599846f59442f1a000000000000000000000000000000000000000000000b20354b6074879d9b85705c4a361c0c0000000000000000000a1e3246576c81969e8975604b362110000000000000000000000000000000000000000000000000000000000b20354b6073808383868b959c918274605443301c0d0000000000000000000000091e324556687d939d8775604b3b2b1901000000000a151d202c2e2e2e2e40566b8095947f6a543f2a150000000000031729394b5d687e929d9d95807262594b4437332a24211e161b1a1b182022262d363c494d5f6779879ca49d8776615544311d0f00000000000000000005182b3b4b6073849aa4998372605546392d1f170c0600000000000000000000000000000408141c27485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e0000000000000000000000000000000c21364b61768b9d8873594834200c22374c61778c9e89735b4935210c00000000000010263b50657b90a596806d6d6d6d6d6d6d6d6d6d6d6e6f7073777a8188929da49c8c7e68604e3d2d1a0200000000000000000000102031424f61697c89979f9b9088837f7d7c7d7f82878f99938376697e9499846f59442f1a000000000000000000000000000000000000000000061a2c3d51667c91a5927d67523e2d1b00000000000000000000031629394e63798da2927d68533f2e1b08000000000000000000000000000000000000000000000000000000081d314455606b6d6e7177808b9e988372604b3b2a1805000000000000000000011426374b6075879d937e695645321d0d00000000000002090b161818182b40566b8095947f6a543f2a1500000000000a1e334657657b8b9f9f957f6b6054483b31271f170f0b0903000500050b0d111b222c35414d5b6377869ca59a8473604b3d2d1a0700000000000000000b20344859697f94a29c867560544437281b1004000000000000000000000000000000000000011e33485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e0000000000000000000000000000000a1e33465771879c8c77624d37220d1f33475872879d8d78634d38230e00000000000010263b50657b90a59c868283838383838383838383838486888c90969da39b92867a68604e42311f0f000000000000000000000002142432434f5e6677828c969c9e989592919294979b94897e7261677d9299846f59442f1a0000000000000000000000000000000000000000000c2136495b6f849a9e8875604b36201000000000000000000000000b2135495b6f849a9b86715d4b37220d00000000000000000000000000000000000000000000000000000001152737444b55585958616b7b899e947f6a5947341f0b000000000000000000081d314455697e939d8875604b38281600000000000000000000010303162b40566b8095947f6a543f2a1500000000071a2d3d4b6175879da296816c614b43362a1d1509040000000000000000000000070e1920303d49596278899ea2947f6a5b4a3621110000000000000005182b3b4c62778a9e9f8b796356453626190b0000000000000000000000000000000000000000081e33485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000000000000000000000000000003172939586d8297917c66513c2711182a3a586e8398927d67523d281200000000000010263b50657b90a5a49c9898989898989898989898999a9b9da69d99948e867d74645c4e423124130100000000000000000000000006142532404d59626d7880878c90929393928f8b867f7669605461768486816c57412c170000000000000000000000000000000000000000031729394e63798ea295806b5645321d090000000000000000000000061a2c3d51667c91a38f7a644f3b2a1805000000000000000000000000000000000000000000000000000000091927313540433a474c5d667c919f8a77624c37220d0000000000000000000b20354b6074879d937e695645321a0a00000000000000000000000001162b40566b8095947f6a543f2a15000000000c21364a5b6c8197a59a8473604b433026180d0200000000000000000000000000000006121f2c3b495a657b8c9f9f8b79634e3f2e1c080000000000000b203448596d8297a795806b5b4a38281809000000000000000000000000000000000000000000081e33485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e0000000000000000000000000000000013293e53687e9395806b5636251314293f54697e9496816c57412c1702000000000010263b50657b9092929292929292929292929292929191908e8b88847f79716860554b3e312414060000000000000000000000000000071422303b484d5a626b72777a7d7e7e7c7a76716961584a4758616f716c63513e291500000000000000000000000000000000000000000a1e3346576c81979f8b78624d382815020000000000000000000000000f20354b6074879d98836d5948341f0b0000000000000000000000000000000000000000000000000000000009151d202b2e2a333f4d5e70849a95806b553a29170400000000000000071a2d3d51667c919e8975604b3828150000000000000000000000000001162b40566b8095947f6a543f2a15000000061a2c3d4e63798c9f9e8a78625544311c1408000000000000000000000000000000000000010f1d2b3c4b5d6c8196a699846f5d4b37230e0000000000011426364d62778b9f9e8976614c3d2d1a0a00000000000000000000000000000000000000000000081e33485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000000000000000000000f24394e64798e9a846f5443301c10253a4f657a8f9b86705b46311b0600000000000d22374c62777d7d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7b7a7976736f6a635b534b44372e2014060000000000000000000000000000000004121d2b343c494d5659626567686867656158544c463a3a474c5a5c57514534220e00000000000000000000000000000000000000000c21364c6176899b99836e5a48351a0a00000000000000000000000000081d3144556a7f949b8a77624c37220d000000000000000000000000000000000000000000000000000000000001080b1618181f304051677c919b86715847331f0a000000000000000c21364a5b70849a96816b5645321a0a0000000000000000000000000001162b40566b8095947f6a543f2a150000000c2135495b6e8399a6947f6a5a49372715010000000000000000000000000000000000000000000e1e2f3f4b6175889da18f7b65503c2c190600000000081c3043546b8095aa947f6a5746331f0f0000000000000000000000000000000000000000000000081e33485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000000000000000000000b20354b607387918974604a35200b21364b60758c9286715c46311c0700000000000b1f3448596267676767676767676767676767676767666563615759544e4a3d353127191002000000000000000000000000000000000000000d18202c35383b484c50525353524f4c473a3633292a33374446413e34261605000000000000000000000000000000000000000011273c51667c85868478634d3c2b190000000000000000000000000000011426374b60748286857d67523d281200000000000000000000000000000000000000000000000000000000000000000000041221374c61768b9f8b76614c37210c000000000000000e24394e63798e9f8c78634d382816000000000000000000000000000001162b40566b8095947f6a543f2a150000021527374e63798da19d8875604b3c2c19090000000000000000000000000000000000000000000000111e324657697e93a699846f5a4935200c000000000b20354b6074889d9f8b77624c392917010000000000000000000000000000000002090b0e0e0e0e0e1e33485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000000000000000000000000000000081c30435461767c7d74604b36200b1e324557667c7c78624d38220d00000000000005182a3b484c5252525252525252525252525252525251504e4c46393f39362d201d150900000000000000000000000000000000000000000000050e1920232a34373b3d3e3e3d3a373329211f17171f212f312c292216080000000000000000000000000000000000000000000f24394d5e6671716f635a49351e0e000000000000000000000000000000091e324556606d7171675f4d3a251000000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889e8e79634e39240e000000000000081b2e3e566b80969a846f5b49351a0a000000000000000000000000000001162b40566b8095947f6a543f2a150000081d3144556c8196a9947e695645321e0e000000000000000000000000000000000000000000000000031628394b6075889e9f8c78634d38230e0000000010253a4f657a8fa699836e5947341b0b000000000000000000000000000000000a151d2023242424242433485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e00000000000000000000000000000000011426364758616767605645321d091628394d5e6667625a4835200b000000000000000d1d2a34373d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3c3b393633292a23211a0f080100000000000000000000000000000000000000000000000000060c0d181f22252829292725211f170c0a04040a0c1a1c17150e0500000000000000000000000000000000000000000000091d30404d515c5c5a4d493c2c190000000000000000000000000000000003162838454b585c5c524d41311e0a00000000000000000000000000000000000000000000000000000000000000000000000417293a5c72879c907a65503b25100000000000000d22374b5c72879d927d68523c2c1900000000000000000000000000000001162b40566b8095947f6a543f2a1500000b20364b6075899e9f8a76614c38281600000000000000000000000000000000000000000000000000000b1d3245566b8096ab95806b553c2c1906000002162838566b8196a7927d68523b2a18000000000000000000000000000000000a1a28323639393939393939485d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000000000000000000000008182a3a474c51524b45382815020a1b30404d51524d483c2b190500000000000000000d181f2228282828282828282828282828282727262524211e17150e0c0700000000000000000000000000000000000000000000000000000000000000050b0d1012131312100c0a040000000000000507020000000000000000000000000000000000000000000000000000122230393c46464538352c1e0e00000000000000000000000000000000000a1a2832364346463d3a312313010000000000000000000000000000000000000000000000000000000000000000000000021528385d72879d8f7a65503a25100000000000000f253a4f647a8f9f8a76614c37210e00000000000000000000000000000001162b40566b8095947f6a543f2a15000010263b50657b90a798836e5847331a0a0000000000000000000000000000000000000000000000000000021528384e63788da59c86715a4935200c0000091e32455671869ba58c77614c37220d00000000000000000000000000000002152838454b4e4e4e4e4e4e4e4e5d73889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e0000000000000000000000000000000000000c1c2a33373c3d3632281a0a0000122230393c3d38352b1e0e00000000000000000000050b0d1212121212121212121212121212121211100e0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24273131302320190e000000000000000000000000000000000000000a161e212d313128251e1305000000000000000000000000000000000000000000000000000000000000000000000000091d32455673889e8e79644f39240f000000000005182b3b566c819699846f5847331f0a00000000000000000000000000000001162b40566b8095947f6a543f2a150003162839576c8196ab927c67523a2a17000000000000000000000000000000000000000000000000000000000a2135495b72879ca48d78634d38230e00000b21364b60758a9f9d87725947341f0a000000000000000000000000000000091d3245566063636363636363636373889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e000000000000000000000000000000000000000c171f212728201d150a00000004121d2427272220190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f111c1c1a0e0c0600000000000000000000000000000000000000000003090b181c1c12100a01000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9f8c77624c37220d00000000000b2034485972879c927d68533a29170400000000000000000000000000000001162b40566b8095947f6a543f2a1500091e32455771869c9f8b76614c37210c00000000000000000000000000000000000000000000000000000000061a2c3d576c8196a7927d68523d281300000f243a4f647a8faa98836e583a2a18040000000000000000000000000000000b20364b607479797979797979797979889d96816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000004192e43596e8398a28d78634d38230e0000000000000000000000000000000000000000040a0c12120b0902000000000000090f11120d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c10141718191a191716130f0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788d9e89745948341f0b00000000000d22374c62778ca48d78624d38230d0000000000000000000000000000000001162b40566b8095947f6a543f2a15000b21364b60768a9f9c87725847331f0a000000000000000000000000000000000000000000000000000000000012283d52677d92a797816c57422c17000012273c52677c91a795806a55402b15000000000000000000000000000000061c31465b71858e8e8e8e8e8e8e8e8e8e9da696816b56412c16000000000000000000000000000000000000000011273c51667c91a6947f69543f2a140010263b50657b909292806b56412c1601000000000000000000000000000000000000000004192e43596e8392928d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e181f22262a2c2d2e2f2e2d2b2924201c140b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c919b85705b3b2a1805000000000012273d52677c929d87725a4835200b0000000000000000000000000000000001162b40566b8095947f6a543f2a15000f253a4f647a8faa98836d583a29170400000000000000000000000000000000000000000000000000000000000e23394e63788eab9b85705b3828160200152a3f546a7f94a8927d68533d2813000000000000000000000000000000081e33485d73889a9a9a9a9a9a9a9a9a9a9a9a96816b56412c16000000000000000000000000000000000000000011273c51667c9192927f69543f2a14000d22374c62777d7d7d7a644f39240f0000000000000000000000000000000000000000000010253a4f657b7d7d7d75614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000090f1120201e110f0900000000000000000000000000000000000000000000000000000000000000000000000000070f1a21232a34373b3f414244444342413e39353026201d140901000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b809597816c57422c17000000000001142637576d829797826d573c2b19060000000000000000000000000000000001162b40566b8095947f6a543f2a150012273d52677c92a7957f6a55402a150000000000000000000000000000000000000000000000000000000000000b20354b60758a9f9e88735645321e0900172c41566c8196a5907b66503b261100000000000000000000000000000004192e43596e82858585858585858585858585857e68533e291300000000000000000000000000000000000000000d22374d62787d7d7d79634e39230e000b1f34485962676767645c4a36220d000000000000000000000000000000000000000000000e23374b5d65676767615746321e0a000000000000000000000000000000000000000000000000000000000000000000000000000003111c232635353327241d1204000000000000000000000000000000000000000000000000000000000000000000000f1a212c35393a474c50545758595a595756534e4b43363531261d15090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a596f8499937d68533e28130000000000081d31445571869b927d68533d2813000000000000000000000000000000000001162b40566b8095947f6a543f2a1500152a3f546a7f94a7927d68523d2813000000000000000000000000000000000000000000000000000000000000081d31445573889da68b75604b36210b00182d42576d8297a48f7a654f3a251000000000000000000000000000000002172b4053646e7070707070707070707070707068604e3b261100000000000000000000000000000000000000000b2034485962676767635b4935210c0005182a3b484c5252524f4a3e2d1b0700000000000000000000000000000000000000000000081c2e3f4b4f5252524b4639291603000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b4a4a483c39302212000000000000000000000000000000000000000000000000000000000000000008131c2d363d494e55596165696c6d6e6f6e6c6b68646054514b4437312719100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889d8e79644f39240f00000000000b20354b60758a9f8e79644f39240f000000000000000000000000000000000001162b40566b8095947f6a543f2a1500172c41566c8196a5907b65503b2610000000000000000000000000000000000000000000000000000000000000011527375b71869ba28d78624d38230d00182e43586d8398a48e79644f39240f000000000000000000000000000000001024364653595a5a5a5a5a5a5a5a5a5a5a5a5a534e42311f0b000000000000000000000000000000000000000005192b3b484d5252524e493d2c1a0600000d1d2a34373d3d3d39362d201000000000000000000000000000000000000000000000000011212e373a3d3d3d3632291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c5060605e514d40301e0e000000000000000000000000000000000000000000000000000000000000091825303d4a4e5b636a72777b7f818283848382807e79746e6660554b44372e201406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61778c9f8a75604b36200b00000000000e23394e63788e9f8a76604b36210b000000000000000000000000000000000001162b40566b8095947f6a543f2a1500182d42576d8297a48f7a644f3a250f000000000000000000000000000000000000000000000000000000000000001b30455a70859aa38e79634e39230e00192e43586e8398a38e79634e39240e00000000000000000000000000000000071828364043454545454545454545454545453e3b312414020000000000000000000000000000000000000000000d1d2b34373d3d3d39352c1f0f000000000d181f2228282824221b100200000000000000000000000000000000000000000000000003111c2325282828211e160b0000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e66757573665e4d3c2b19050000000000000000000000000000000000000000000000000000000009192736434a5b636f7980878c909496979999989796938e89847c746960554b3f3224140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657b909b86715645311d09000000000012273c52677c919c87725645321e09000000000000000000000000000000000001162b40566b8095947f6a543f2a1500182e43586d8398a38e79644e39240f000000000000000000000000000000000000000000000000000000000000051a2f445a6f8499a48f79644f3a240f00182d42586d8297a48f79644f3a240f00000000000000000000000000000000000a18242b2e3030303030303030303030303029261f140600000000000000000000000000000000000000000000000d19202228282823211a0f010000000000050b0d1212120f0d0700000000000000000000000000000000000000000000000000000000080e101212120c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b8a8a887c665a4835200e000000000000000000000000000000000000000000000000000000011527374454606b79848e959c9993908c8a8988898a8c90949a9991887e73645d4f42322414030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f9497826c57382715020000000000152a3f546a7f9499846e5938281603000000000000000000000000000000000001162b40566b8095947f6a543f2a1500192e43586e8398a38e79634e39240e000000000000000000000000000000000000000000000000000000000000041a2f44596f8499a48f7a644f3a250f00172c42576c8197a5907a65503b2510000000000000000000000000000000000000071017191b1b1b1b1b1b1b1b1b1b1b1b1b13110b0200000000000000000000000000000000000000000000000000050b0d1212120e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e70859a9d8a78624d3c2b19060000000000000000000000000000000000000000000000000000081d3144556072808c999e948a847e7a777574737475777b7f858b959d94867a69604f423221110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d43586d8298937e68533e2913000000000000172c41566c819697816c57422c1700000000000000000000000000000000000001162b40566b8095947f6a543f2a1500182d42586d8297a48f79644f3a240f000000000000000000000000000000000000000000000000000000000000051a30455a6f859aa38e79644e39240f00162b40556b8095a7917c67523c27120000000000000000000000000000000000000000020405050505050505050505050505000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c121420202013110b02000000000000000000000000000000000000000000000000000000091c2f4050657b8fa297826c5a4935200e00000000000000000000000000000000000000000000000000071b2e3e4b607382959f99897f766f69656260555e556062666a70778089989c8c7e69604f3f2f1909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061b30455b70859a907b65503b2610000000000000192e43586e8398947f6a553f2a1500000000000000000000000000000000000001162b40566b8095947f6a543f2a1500172c42576c8197a58f7a65503a2510000000000000000000000000000000000000000000000000000000000000061b30465b70859ba28d78634d38230e0013283e53687d93a8947f69543f2a140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b151b1d20201e1c160c00000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f262935353528261e13060000000000000000000000000000000000000000000000000000001123374b5d6f849a9f8b78624d3c2c19060000000000000000000000000000000000000000000000000d22364a5c6b8096a09783766a615854504c4b4449444b4d505459626a7682949f937e695d4b372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d8d78634e38230e0000000000001b30455a70859a927d68523d281300000000000000000000000000000000000001162b40566b8095947f6a543f2a1500162b40556b8095a7917c67523c271200000000000000000000000000000000000000000000000000000000000005182a3b5d72879ca88c77614c37210c0010263b50657b90a597826c5738281602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1d28303335353330291e1000000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e4a4a4a3d3a312413020000000000000000000000000000000000000000000000000000081c2e3f4f657a8fa197826d5a4935200e0000000000000000000000000000000000000000000000000f243a4f647a8d9f97827261584c463a3b373531273135373b3b484c58616e7f949f8d7b655544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e34495e73899e8c77624d37220d0000000000001c31475c71869c907b66513b261100000000000000000000000000000000000001162b40566b8095947f6a543f2a150013283e53687d93a8947e69543f29140000000000000000000000000000000000000000000000000000000000000b1f34485974899f9e89745847331f0a000d22374d62778ca69b86715645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1d2d3a44484a4a48453b2e1e0c0000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f53606060534e42311e0b0000000000000000000000000000000000000000000000000000001122374b5d6f849a9f8b78634d3c2c19060000000000000000000000000000000000000000000004182a3a586d82989c86746054463a33292522201d151d2022262b343a474c616c81979c8774604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74899e8c77614c37220c0400000000001d32475d72879c907a65503b251000000000000000000000000000000000000001162b40566b8095947f6a543f2a150010263b50657b90a596816c573727150100000000000000000000000000000000000000000000000000000000000d22374c62778ca99c87715c3a2a1704000b2034485973889d9f8a75604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115283a4b585d60605e594c3b291602000000000000000000000000000000000000000000000000000000000000000000000000000012263b4f606975757568604e3a2611000000000000000000000000000000000000000000000000000000081b2e3f4f647a8fa197826d5a4935200e000000000000000000000000000000000000000000000a1f33475874899e937d68564536291f17100d0b0801080b0d1118202a33434b6074879d927d68523626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d32485d72879d8e78634e38281f180c000000001d33485d72889d8f7a654f3a251000000000000000000000000000000000000001162b40566b8095947f6a543f2a15000d22374d62778ca69b85705544311d08000000000000000000000000000000000000000000000000000000000011263b51667b90a698836e59432e19000005182b3b596e8398aa907b66503828160200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061b30445869727575736a5945301c07000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e8a8a8a7e68533d2813000000000000000000000000000000000000000000000000000000001022364a5c6f83999f8c78634d3d2c1a060000000000000000000000000000000000000000000c22374c61778ca88d78624d3828180b04000000000000000000050c171f3245566a7f949a846f5443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8298937e69564538342a1d1a0c00001e33495e73889e8e79644f39240f00000000000000000000000000000000000001162b40566b8095947f6a543f2a15000b2034485973889d9f8975604b35200b000000000000000000000000000000000000000000000000000000000417293a556a7f95a9947f69543f2a1400000013283d53687d92aa97816c5645321e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d33485d72878a8a88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e939f927d68533d281300000000000000000000000000000000000000000000000000000000071b2e3e4e64798c9f98826d5b4935210f0000000000000000000000000000000000000000000d22384d62778daa8b75604b36200b00000000000000000000000000041528384f657a8f9e8974604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f9c877560564c473b382b1a09001e34495e73899e8e79634e39240e00000000000000000000000000000000000001162b40566b8095947f6a543f2a150005182b3b596e8398a98f7a6550362614010000000000000000000000000000000000000000000000000000000a1f33465870859aa78f7a654f3a25100000000c22374c61778b9f9e8875604b36261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000001022364a5c6e83999f8c79634e3d2c1a0600000000000000000000000000000000000000000b21364b60758a9f8c77624c362513060000010304050001080b0d0e111823394e63788ea88c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22374b5d6d82979982746761595549382613001e33485e73889d8f79644f3a240f00000000000000000000000000000000000001162b40566b8095947f6a543f2a15000013283d53687d92aa96806b5443301c080000000000000000000000000000000000000000000000000000000c21364c61768b9f9e8974604b35200b0000000a1f3347586f8499a7927d685443301c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000071b2d3e4e63798c9f98826d5b4935210f0000000000000000000000000000000000000000091e32455670859a927d67544330211a11141618191a1b141d202224262a344050667b90a98c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b6074829299867d77706755422e19001d32485d72879d8f7a65503a251000000000000000000000000000000000000001162b40566b8095947f6a543f2a1500000c22374c61778b9f9d8774604b3520110000000000000000000000000000000000000000000000000000081b2e3f53687d92aa98826d5544311d0800000004182a3a51667b90a49c8673604b3a2a17040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000001021364a5b6e83989f8c79634e3d2c1a06000000000000000000000000000000000000000216283852677c919b8572604a43352c26292b2d2f303126313537393c3a474c5e6c81979f8975604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d314556606e7d869c928c85705b46311b001d32475c72879c907b65503b261000000000000000000000000000000000000001162b40566b8095947f6a543f2a1500000a1f3347586f8499a5907b66513f2f1909000000000000000000000000000000000000000000000000000c22374b5d71859ba5907b665037271501000000000c20354a6073869ca4927d685847331f1505000000000000000000000000000000000000000000000000060b0d140d0b05000000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000071a2d3d4e63798c9f98826d5b4936210f00000000000000000000000000000000000000000b20354a60728399957f6a614e493d3c3e404344454637444b4c4e515459616b7c8c9f9a846f5443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d30414d5f67777f889a9485715b46311c001c31465b71869b917c66513c271100000000000000000000000000000000000001162b40566b8095947f6a543f2a15000004182a3a51667c91a59a846f5d4b3727150200000000000000000000000000000000000000000000000c1c30404f657a8fa39c8773604a35200b0000000000071c304354677c91a29d8876614c4332231403000000000000000000000000000000000000000000000e1920232a2220190d0000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000f2135495b6d82989f8c79634e3d2d1a0700000000000000000000000000000000000000071c30435461768497947f6f635b5051535658595a5b5c55606263666a6f77808c9f9d907b655036261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4d5f677d89958f847e7c65503b2610001a2f445a6f8499937e69533e291400000000000000000000000000000000000001162b40566b8095947f6a543f2a150000000c20354b6073879ca2907b655544311d110100000000000000000000000000000000000000000009192a3a4d5e6f849aa5937e695443301c070000000000001325364d5f70859aa698826e614f41311e160a0000000000000000000000000000000000000006141e2b35383f38342b1d0d00000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000061a2c3d4d63788b9f98836e5b4a36210f000000000000000000000000000000000000000013253646586174818f9483796e6566696b6d6e6f7072737577797b7f848b969f9e937f6a5e4c3818080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344859677d8d9d877a6f69655e4c38230e00182d42586d829795806b56402b1601000000000000000000000000000000000001162b40566b8095947f6a543f2a15000000081c304354677d92a39c8674604b402f1f100200000000000000000000000000000000000000081426374758667c91a29d8774604b36251300000000000000081830404e63798a9fa0947f695f4e4232281a1209000000000000000000000000000000070e1a21313c484d544d483c2b1808000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000f2035495a6d82979f8c79634e3d2d1a07000000000000000000000000000000000000000818293a4656606c7a84968c837a7b7e808284858687888a8c8e91949a9f9c95897e6a6150402f1c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778a9e8a79645c54504c402f1c0900162b40566b809597826d58422d1800000000000000000000000000000000000001162b40566b8095947f6a543f2a15000000011426364a6072859ba4957f6a5e4c3d2d20130500000000000000000000000000000000000c18253144556176889da2927d6756453218080000000000000000122135495b687e939f9f8d7d68604b45382f231c110b08010000000000000000060c0f1a212c35424e5a6269625a48362614010000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000006192c3c4d62788b9f98836e5b4a36210f00000000000000000000000000000000000000000b1b2938454b5d65758096988f91939598999a9b9c9e9d9b999795918d877f776860504333211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b809596816c5b4b3e3b382f2111000014293e53697e939a856f5a3b2a1805000000000000000000000000000000000001162b40566b8095947f6a543f2a1500000000081c30435464798b9f9f8c7c655b4a3e301f180d040000000000000000000000000008121c2936434b6073839aa69a846f5f4d382815000000000000000000061a2c3d4e606c8197a19f8d7e6d60564c40382f24201d1515131211121314161a21232d363d494e6068787f78625443301c080000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000e2035485a6c81979f8c79634e3d2d1a0700000000000000000000000000000000000000000b21364a5c647986969ea49c9794918f8d8c8b8a8988868482807c78726a61594e4233251503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b8f7a654f3d2e26231c1103000010263b50657b909e88735947341f0b000000000000000000000000000000000001162b40566b8095947f6a543f2a1500000000001325364a5c6a7f94a09e8979645c4d41342a1f170c0a0300000000000000060c101b222f3a4654606c8196a19e8978624d41311a0a000000000000000000000f1f31424b60738398a09f938275665e504c40393531272a2827272728292c2c35393e4a4e5b636f7e8a948573604b35200b0000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000005192b3c4d62778b9f99836e5c4a36211000000000000000000000000000000000000000011426374e647a8a9ca1998e87827e7c7a787776757473716e6c6a67625a554c473b3124150700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e34495e73899e8c77624c3722100e09000000000d22374c62778ca68c77624c37220d000000000000000000000000000000000001162b40566b8095947f6a543f2a15000000000008182d3d4a60728298a39e897a675f4c473b332a211e16151312121214161920232e37404c58617281969f9f8c7c655948342313000000000000000000000001141d314455607382959f9f97867b6f665e554f4b44373f3e3d3c3c3d3f413d494e545c646d7984939f9e917c67513c27120000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000e203448596c81969f8c79644e3e2d1b07000000000000000000000000000000000000081d3144556f84999f968379726c69666563626160555d5b595755514d493c37342a1d140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74899e8c77614c37220c0000000000000b2034485973889e907b65503b2610000000000000000000000000000000000001162b40566b8095947f6a543f2a150000000000000f1c3043546074849aa29e8a7d6d62594c473a3632292a28272728292b2c35383f4b4f5e667683969f9f937e685e4c3b2b190500000000000000000000000001142637445560727f8c9da49c90847b726b646055575553525152525456595b636a7079828b99a19d918072604b35200b0000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000005182b3b4c62778a9f99836e5c4a3622100000000000000000000000000000000000000b20354b60758a9f96816e635b5754514f4e4d4c4b4437464442403c38352b221f180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e33485e73889d8d78624d38230d00000000000005182b3b5a70859a947f6954372715010000000000000000000000000000000001162b40566b8095947f6a543f2a1500000000000000132536455661758498a09f9282776a6158514b46393f3d3d3c3d3e413c494d545d656f7c8799a19e8d7e68604e402f1d0d0000000000000000000000000000091927374454606a7b87959fa29a9087807975706d6a6867666768696b6f73787f858e979f9f97887c6b605443301c080000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000d1f3448596b8096a18e79644e3e2d1b0700000000000000000000000000000000000c21364c61768ba78c77624e4a3d3f3c3a383736353126312f2d2b272320190e0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c31465c71869b8f7a644f3a250f00000000000000162b40556b809599846f5544311d080000000000000000000000000000000001162b40566b8095947f6a543f2a1500000000000000081828384657617482939fa0988980766d6661575855535251525356595a6269717a84909da49c8a7d68604e423121110000000000000000000000000000000009192736434a5d65757f8a959ea49c958e8985827f7d7c7c7c7d7e8184888e949ba39f988c8176665e4b43362614010000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000005182a3b4c61778a9e99836e5c4a36221000000000000000000000000000000000000b20354a6074899e8b75604b362d26303537373631272b25221b15120d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e44596e8399927c67523d27120000000000000010253b50657b909e8975604b35200b0000000000000000000000000000000001162b40566b8095947f6a543f2a1500000000000000000a1a29394656606d7e8a99a19e958a837b76706d6a68676767696b6e73787e868f99a19f948679675f4e42312414030000000000000000000000000000000000091825303f4b56606a77808891989ea79e9a979493929191929496999da69f9a948a82796c61584c4030261808000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000d1f3347586b8095a18e7a644f3e2d1b0700000000000000000000000000000000071c3043546d82978f7a6554433636434b4c4c4b4437403a372e241d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b809595806b56402b16000000000000000b21364b60758a9f8f7a644f3a240f0000000000000000000000000000000001162b40566b8095947f6a543f2a150000000000000000000b1b2938454b606878838f99a19f98908a86827f7d7c7c7d7e8083888d949ba39e958a7f74635b4d41312414060000000000000000000000000000000000000008131c2e38454b59616a757c83898e9396999b9d9d9e9e9d9c9a9794908b857e776d635b4c473a2f1c140800000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000004182a3a4c6176899e99836f5c4a36221000000000000000000000000000000000001325364d62788a9a84736054545a5460616260555b554f4b3f39301f170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c919a846f5a3c2b1906000000000000091e32455670859a957f6a553d2c1a0600000000000000000000000000000001162b40566b8095947f6a543f2a15000000000000000000000b1a2832424e5a626e7a848d959ca49f9b9794929291929396999da69f9a928980776a6055493d3023140600000000000000000000000000000000000000000000111a28323b474c5660666d74797d81838687888988888784827f7b76706962594e493d332a1c12010000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e09000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000c1f3347586a8095a18f7a644f3e2e1b0800000000000000000000000000000000082035485a667c8c97817265696f737577777574706b655d514d4033291c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d9e89735a4935200b0000000000000216283854697e939c86715b4935210800000000000000000000000000000001162b40566b8095947f6a543f2a1500000000000000000000000a161e313c484d5d656f7880878c9296999b9d9e9e9d9c9a97948f8a847d766b62594b44372c1f12050000000000000000000000000000000000000000000000000a161e2a3438454b51546063686c6e717273747372716f6d6a656158544c473b362c1f170c00000000000000000000000000000000000000000000000000000000000000000000000000081d33485d72889d9d88735e48331e00000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c6176899e99846f5c4b3722100000000000000000000000000000000006192b3c4c5e667c8997847a7f84888a8c8c8b8985807a71675f4c463a2a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074899e8d78624d38230d000000000000000d22374d62778c9f8e79634e36251300000000000000000000000000000001162b40566b8095947f6a543f2a1500000000000000000000000003141e2b353f4b4f5b636a72777d808386878889888785827f7a756f6861574c473b3127190f010000000000000000000000000000000000000000000000000000030c181f28323636434b4e5356595c5d5e5e5e5d5c5a5854504c463a37342a211a0f040000000000000000000000000000000000000000000000000000000000000000000000000000011527375d72889d9d88735e38271502000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000c1f3346586a7f94a18f7a644f3e2e1b08000000000000000000000000000000000e1e2f404d5e6677879a90949a9693919192959a958f857c6e6158473a2a1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435470859a917c67513c2712000000000000000b2034485970859a957f6a5443301c07000000000000000000000000000001162b40566b8095947f6a543f2a1500000000000000000000000000000e19202e373d494e555962676b6e717273747372706d6a656056524b4639342a1d1509000000000000000000000000000000000000000000000000000000000000040a161e21263035393e41444648484949484745423f3b363329221f180d0600000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572889d9d88735645311d0e000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b6175889e99846f5c4b37221000000000000000000000000000000001142636465861758298a0988c86817d7c7b7d80858a969b91837661584738281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536576c819695806b55402b160000000000000005182b3b53687e939d8773604a35200e000000000000000000000000000001162b40566b8095947f6a543f2a1500000000000000000000000000000006101b222c35383b484d5256595c5d5e5e5d5d5b5855504b45383633291f180d0200000000000000000000000000000000000000000000000000000000000000000002090b141c2024282c2e313233343333322f2d2a25211f170d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4b6074889e9e8975604b3c2c19060000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000b1e324657697f94a18f7a644f3f2e1b080000000000000000000000000000081c304354617685989e928379716b686766686a7077808b9d988676615645321e0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d9299846f5a39291703000000000000000d21364c61768a9e907b66503c2b19060000000000000000000000000001162b40566b8095947f6a543f2a150000000000000000000000000000000000080e1a21232b34373d414446484949484745423f3a363228211e170b05000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e1317191c1d1e1f1e1d1c1a1815100c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035485a697f94a6a7947f6a5b493521130000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000031629394b6075889d9a846f5d4b37221100000000000000000000000000031729394b6072849a9e8a7d6e635b56535151535559626b7a879d9b8575604b3b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798e9d88735746331e0a000000000000000a1f3346586c819799846f5a4935200e0000000000000000000000000001162b40566b8095947f6a543f2a1500000000000000000000000000000000000000060c0e192022272b2e313233343332302d2a25211e160c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c30414d62788a9f9d9b9f8b79634d41311c0c00000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000b1e324557697e93a28f7a654f3f2e1c080000000000000000000000000a1e334657697f949f8d7c675f4e4a3d3e3c3c3d3b484c5c6478899e957f6a594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca68b76614b36210c000000000000000417293a4e63798e9f8c78624d3c2b190500000000000000000000000001162b40566b8095947f6a543f2a1500000000000000000000000000000000000000000000050b0d1216191c1d1e1f1e1d1b1815100b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0f1315161717161513100d0b050000000000000000000000000000000000000000000000000000000000000000000417293a4d5f6f84999d87869b9a846f5f4e3a2a1804000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000031628394b6074889d9a846f5d4b3723110000000000000000000000000c21364c6176899e96806b5e4d41362d282726282a343e4a5a677c919e8a77624c37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899e8e79634e39240e00000000000000000c2136495b6f849a97816c5a4835200e00000000000000000000000001162b40566b8095947f6a543f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b10171f2125282a2b2c2c2b2a2825222019130c0a0400000000000000000000000000000000000000000000000000000000000a1f334758677d92a1947f7e92a2927d685847331f11000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d324556687e93a28f7a65503f2e1c08000000000000000000000013283e53687d939e8a77614c4030211a13121113181f2d3c4a6073869b947e695436251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5d72889d8f7a654f3a25100000000000000000061a2c3d50657b8f9f8b78624d3c2c190600000000000000070d0f1111162b40566b8095947f6a543f2a15000000030d1315161616161616161616161616161616160e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308131c20252933363a3d3f404141403f3e3b38352b28211f170c0800000000000000000000000000000000000000000000000000000a1a2e3f4c6176889d9d887574879d9e8977614c3f2f1a0a0000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384b6074879d9a84705d4b3723110000000000000000000001152737596f849999836e5847332213070000000005101c304354697f949a85705443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527375c72879c907b65503b26100000000000000000000f23374b5d6f849a97816c5a493520110000000000010f1a21242626262b40566b8095947f6a543f2a150000071520272a2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b23211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b171e2530353a3a464c4f5255565757565553504d483c3e37332a231c11070000000000000000000000000000000000000000000000021527384b5d6d8297a2927d68677d92a298826d5d4c3828160300000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d314556687d92a28f7b65503f2f1c08000000000000000000081d31445573889d937e69533a2a1804000000000000001325364f64798e9f8a74604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889d8e79644f39240f000000000000000000081c2e3f4f647a8f9f8b78624d3f2f1909000000010f202d36393b3b3b3b40566b8095947f6a543f2a1500031525323c3f4040404040404040404040404040404039362c1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d293336434a5057586164686a6b6c6c6b6a6865625a59534c473a372e221b1002000000000000000000000000000000000000000000081d314556657b8d9f9a8472605f6f849aa0907b655645321e0f00000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384b6074879c9a85705d4b3723110000000000000000000b20354b60758aa6917b66513c261100000000000000000c22374c61778caa8c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9f8d77624d38220d000000000000000000001122364a5c6e839999836e5d4c3727150100000f1f2d3e4a4e5050505050566b8095947f6a543f2a15000d2032434f54565656565656565656565656565656564e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021019273139464b5460656c71767a7d7f808181807f7d7a77736e686158504b3f362d1e160a0000000000000000000000000000000000000008182c3d4b6074869c9f8b7963544d63798b9f9c8775604b3d2d1808000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d314455677d92a2907b65503f2f1c0800000000000000000c21364c61768baa8f7a654f3a251000000000000000000b20354b60758aa08e78634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e11121b2b3c4f647a8f9d88735a4835200b00000000000000000000071b2e3e4e63798b9f907b655544311d0800071a2d3d4a5c646666666666666b8095947f6a543f2a150013273c4f616a6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b635b4936210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614202d37444b576169737a81868b8f9294959696959493908d88837e776e655d4f4a3e32281a0d000000000000000000000000000000000000132536495b6a7f95a495806b5b49495b6a7f95a495806b5b4a362614010000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374b6073869c9a85705d4c38231100000000000000000b20354b60758a9f907b66513b261100000000000000000c21374c61768cab8d77624d38220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212426272d39485a6c819698826d583c2b19050000000000000000000000102135495b6b80959c8674604b35200b000c21364a5b70797b7b7b7b7b7b7b8298947f6a543f2a1500152a3f546a7f8080808080808080808080808080808079634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081624313e4a556069767f878f969c9fa89e9b9a9998999a9c9ea69e98938a837b70645c4b45382b1d1002000000000000000000000000000000071c30435463798b9f9c8774604b3d3c4b6074869c9f8b79635443301c0d0000000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314455677c91a2907b6550402f1c0900000000000000081c30435473889d937d685339281603000000000000000e24394e63798e9f8b76614b36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36393b3c3d4a5762788a9f8f7a644f3a250f000000000000000000000000061a2c3d4b6075879d907b65503b2610000e24394e63798e9090909090909098a0947f6a543f2a15001e33485d7388959595959595959595959595959595917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009172634424e5c64747f89949da59f98928d8986848383848587898d91979d9f9990847a6b6056483c2d2010020000000000000000000000000004182a3b4a6072849aa0907b65564532314556657b8fa09b8573604b3b2b180500000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374a6073869c9b85705e4c38231200000000000000011426365a6f859a98826d5745321e100400000000020e1d2f3f53697e939c86715746321e160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2d3d4a4e5051545b6375859b99846f5c4b37220d000000000000000000000000000f1e324557667c8f8374604b36210b0010263b50657b8d8d8d8d8d8d8d8d8d8d8d7f6a543f2a15001e33485d7388949494949494949494949494949494917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007172735445160687a86949ea69d938a837d7874716f6e6e6f6f7174777c8188909aa29a8c8074625a4a3e2e2010000000000000000000000000000a1f344759687d92a298826d5d4c382827384b5d6d8297a3937e68594834201200000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c304354677c91a3907b6650402f1c090000000000000014293e54697e939e8875604b3e2d1f17100f0e10151d2b3b4c5d70859a96816c57393632281b15070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4a5b636667696f79859b9d8877624c3e2e1b0800000000000000000000000000031628394c5e667a6f605645321e09000b21364b6074787878787878787878787876614c36210c0013283e53687e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041525354552626c7e8b9ca49f94877e766e68635a5c5a5959595a5c5a62676c747b84909c9f968578645c4b3e2e1b0700000000000000000000000a1b2f404c6177899e9e8977624c3f2f1a1a2e3f4c6177899e9e8977624d402f1b0b000000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364a6073869b9b85705e4c382312000000000000000d22384d62788b9f947f695c4a3e33292524242528323c4859657b90a18e79644e4d4b4539332515030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a63797b7c7e848c9b98887a6459483420100000000000000000000000000000000a1b30404c5d655d4b453828160200091e324556606262626262626262626262615846331f0a0011263a4e606869696969696969696969696969696969635a4935200c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001222334352636c81939fa39b8a7f74696158534d493c45444344453c484d51546066707b86979f9b887a645c4b37220d00000000000000000000031628394c5e6d8298a2937e685947342111111f334758687d92a298836e5e4c392916030000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000000000080909090909090909090909090909090909090900081c304354667c91a3907b6650402f1d090000000000000b2034485a6b81969f8a7a645c4c473a3b39393a38454b5a6277879d99846e6564626057504333200d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788d90919499968e8377645c4a3b2b1802000000000000000000000000000000001222303f4b4f4b3f32281a0a000002162838454b4d4d4d4d4d4d4d4d4d4d4d4c463a291704000b1f31424e53545454545454545454545454545454544d493c2c1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2f4050616c81969fa09885786a60564c463a38352c2f2e2e2f302b343836434b515e667581929f9e897a644f3a240f00000000000000000000081e324557667b90a09b8572604a3b2a180304182a3a4e6070849aa0917c665746321e100000000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000000060c0e1d1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1325364c5e70859b9b85705e4c38241200000000000005192b3c4c6176879d9d887a6a615853504e4e505256606878859ba595807c7a7977766a61503c28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63798d8d8c8a8781796e62594a3e2d1d0d00000000000000000000000000000000000412212e373a372e1e160a000000000a1a28323638383838383838383838383633291b0b0000021424313a3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f38352c1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4c5e6a7f949f9f978274625a4b453833292320191a19191a1a192022263035404c56606c7d8b9a8979634e39240e00000000000000000008182d3d4b6075879d9f8c79635443301d0d00000c1c31414e63798b9f9d8775614b3e2d190900000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d28130000000000000000000000000000000000000000010f1a21233233333333333333333333333333333333333333333333332f4050667b90a2907b6651402f1d090000000000000d1f3346586379899c9d8b80766e6865646365676d757e899ba3a39e9591908e8d8c7f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b607378777675716b645c4d483b2d20100000000000000000000000000000000000000003111c2325231c11020000000000000a161e212323232323232323232323211f170b0000000006141f26282a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2320190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758667c8d9fa19781726056493c31271f170e0c060004040400050b0d141c202f38454b5f687b857a645b4a36210c0000000000000000011426364a5c6b8096a595806b5b4a36251300000000132135495b6b8095a596816c5c4a37271501000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000000f1f2c353847484848484848484848484848484848484848484848484848484c5e70859a9b85715e4c3824110000000000000417293a495b637986969f9589837e7a79797a7d8288939e978e8e8e8e8e8e8e8e8e836f59442f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606262616054564f4a3e342b1d1002000000000000000000000000000000000000000000080e100e0800000000000000000002090b0d0d0d0d0d0d0d0d0d0d0d0c0a04000000000000020b1113141414141414141414141414141414140e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4c6177889ea4998372605445382c1d150a0400000000000000000000000108121a2832414e5d656f645c4b3d2d1a070000000000000000081c30435464798c9f9d8775604b3d2d180800000000061a2c3d4b6074879c9f8c7a645544311d0e000000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d281300000000000000000000000000000000000000061a2c3d494e5d5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e657a8d9f917c66513f2e1c080000000000000c1c2c3d4a5b6375818a949b9893908e8e8f92979c958b8279797979797979797978624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737444b4d4d4c4a433639362d20180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6d8298a69c867561544336281a0e02000000000000000000000000000000000a161e313f4b505a4f4b3e2e1f0f000000000000000005192b3b4b6073859ba0907b665645321f0f0000000000000f1e324556657b90a09b8573604b3c2b19060000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000c2135495b6372737373737373737373737373737373737373737373737373737373737381969b86715d4b37230e000000000000000f1f2d3d4a56606b767f858a8f91929392908c8780786d646464646464646464625a4935200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091927313638383735302524221b100500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0d0b090200000000000000000000000000000000000000070c0e131516171514110e0b070000000000000000000000000000000000000000090b0b08000000000000000000071a2d3d4f647a8fa09f8c7a6457463625180a000000000000000000000000000000000000000313212e373b453a372e20100100000000000000000b20344859697e93a398836e5e4c38281601000000000000021628384c5d6d8298a3947f695a483520130000000000000000000000000000000000000000000000000014293e53697e93a8927d68533d2813000000000000000000000000000000000000000e23384e6379868888888888888888888888888888888888888888888888888888888888899ea38f7a654f3a251000000000000000010f1f2d38454b58616a70767a7c7d7e7c7a76726a635a4f4e4e4e4e4e4e4e4e4d493c2b1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d20232221201c130f0d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e2122211e160a000000000000000000000000000000070d0f1a2123282a2c2c2b292723201c130c0a03000000000000000000000000030c12151e20201d0d0b050000000000000d21364a5c6f849aa896816b5c4a3928180800000000000000000000000000000000000000000003111c23253025221b100200000000000000000b1b30404d62788a9e9e8977624c402f1a0a00000000000000000a1a2f3f4c6177899e9f8a78624d41301c0c00000000000000000000040608080808080808080808080814293e53697e93a8927d68533d28130808080808080808080808080302000000000013283d52687d929d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea7a7937e69543e29140000000000000000010f1a28323a474c5457616566686867656158554d493c393939393939393938352b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0d0d0c0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009171b293336373632281a0a00000000000000000000000007101b22242d36393d3f4141403f3c38353025211e170b06000000000000000000071520272a333535322220190e00000000021528384e64798ea29e8976614c3e2d1b0b000000000000000000000000000000000000000000000000080e101a0f0d08000000000000000000031729394d5e6e8399a3937e68594834221200000000000000000000111f344759687e93a299846f5f4d3a291704000000000000000913191b1d1d1d1d1d1d1d1d1d1d1d1d1d293e53697e93a8927d68533d281d1d1d1d1d1d1d1d1d1d1d1d1d1916100600000013283d52687d929292929292929292929292929292929292929292929292929292929292929292927f6a553f2a15000000000000000000000a161e2a333739464b4f51535352504c473a38352c24242424242424242320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417273439464b4d4b453828160200000000000000000001101b222d36393d4a4e525456565554514d4a433636332920190e04000000000000001625323c3f484a4a4838352b1e0e000000091d3245566c8297aa95806b58473320100000000000000000000000000000000000000000000000000000000005000000000000000000000000091e334657667c91a19b8573604b3b2b18040000000000000000000004182a3b4a6072859aa1917d675847331f110000000000000d1b262e3132323232323232323232323232323e53697e93a8927d68533d32323232323232323232323232322e2b23180a00000d23384d62787d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d79634e39240e0000000000000000000000030c171f212932363a3c3d3e3d3b3733292320190f0f0f0f0f0f0f0f0d0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1016181a1b1b18120800000000000000070d0f15171816130d0b0600000000000000000000000000000000000000000000000000000000000000000000001122344552576162605645321e09000000000000000009151d2d363e4a4f585b63686a6b6c6a6966636054524b4639352b1f170c0000000008131c34434f545e60605d4d483c2b190500000b20364b6075899e9f8b78624d3a2a17020000000000000000000000000000000000000000000000000000000000000000000000000000000009192e3e4b6175889d9f8c79645443301d0d0000000000000000000000000c1c30435463798b9f9d8876614c3f2e1a0a00000000091b2b38424647474747474747474747474747474753697e93a8927d6853474747474747474747474747474747434036281806000c2035495a6267676767676767676767676767676767676767676767676767676767676767676767635b4a36210c00000000000000000000000000040a0c161e21252728292725211f170e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109151d20252b2e2f30302d251a0c0000000002101b22242a2c2d2c292320190e070000000000000000000000000000000000000000000000000000000000000000091c2f4052636c767874604b36210b00000000000000091927313e4a4f5c646d73797d7f8181807e7c78746e6761574d493c33291c120200081825304451616a73757572625a4835200b000011263b50667b90a899846f5a48341c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000011527374b5c6c8196a596806b5c4a36261400000000000000000000000000001325364a5b6b8095a597816c5d4b3827150200000013263849565b5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d697e93a8927d685d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5853463623100006192c3c494d525252525252525252525252525252525252525252525252525252525252525252524e4a3d2d1a0700000000000000000000000000000000030a0c1011131312100c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2731353a404345454541372a1a0800000513202d36393f4242413e38352b211a0f010000000000000000000000000000000000000000000000000000000000000f23384c5e6c818a8c77624d37220d00000000000009192737444b5c64707a82888e929496969594918d89837c766c625a4c463a301d150a182536434a626c7f888a8a8777624d38220d0003162939576c8197a8937d68533c2b190000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455647a8c9f9d8775614b3d2d1808000000000000000000000000000008182d3d4b6075879d9f8d7b655645311d0f000000192e4256677072727272727272727272727272727272727e93a8927e72727272727272727272727272727272726e6453402b1600000e1e2c35383d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d39362d1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c19273137444b5055585a5b5a554837251200011323303e4a4f55575856534d483c362d1f12040000000000000000000000000000000000000000000000000000000006192b3c50667b9099836e594834200b0000000000091927374455606a7a858e989e9e99949291929395999d98928981786c61584c4031271a26364354606c80949d9c8778625a4835200b000a1e32465771869ca58c77624c37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4b6073869ca0907c665746321f0f000000000000000000000000000000000f1e324556667b90a09c8674604b3d2c180800001b31465b70868787878787878787878787878787878787899eb39e888787878787878787878787878787878787836e58432e190000000e1920232828282828282828282828282828282828282828282828282828282828282828282824211a0f0100000000000000000000000000000000050b0d1f2020180b07000000000000000000000000000000000000080e101f20201a0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a37444b5560656b6d6f70706655412d18000a1e30414d5c646a6c6d6b68625a4e4a3d302312020000000000000000000000000000000000000000000000000000000b2035485a6f8499907b65503b2b18050000000001142637445560737f8c9aa29b9289847f7d7c7c7e8084888f969e968b8176665e4b453829364354607281969e9c8677625a483c2b1905000c21364b61768b9f9d87725948341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a6a7f94a498836e5e4c3928160100000000000000000000000000000000031628384c5e6e8398a4957f6a5b4936251300001e34495e73889c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9ea7a7a69e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9a84705b45301b00000000060c0d121212121212121212121212121212121212121212121212121212121212121212120e0c0700000000000000000000000000000000000d1920223435352d201c1308000000000000000000000000000003111c23253435352f201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2a3a47556068747a8083848584705a45301b001025394d5f677a7f8182817e786f635b4d413020100000000000000000000000000000000000000000000000000000021528384d62788c9c86725d4b381d0d0000000000081d314455607383959f9f93857d756f6a686667686b6f747a8088939d96887c6c6056463a4354607281969f9c86776259483c2b1e0e00000f253a4f647a8fab98836e583b2a1805000000000000000000000000000000000000000000000000000000000000000000000000000000031729394d62788a9f9e8977624d402f1b0b0000000000000000000000000000000000000a1a2f404c6277899e9f8b79635443301c07001e34495e738992929292929292929292929292929292929292929292929292929292929292929292929292929285705b45301b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3438494a4a4235302518080000000000000000000000000011212f373b494a4a443530251808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939475861737e888f959898988a745f4a351f0012273c52677c8e94979796938d8479675f4d3e2e180800000000000000000000000000000000000000000000000000091d3245566b8096937e69543f2f1c0000000000061a2c3d4b60738298a19e8a7e726760555553515253555460646b757e88969e91817461584754607281979f9c86776259483b2b1d0e00000012273d52677c92a795806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576f8492928f7e68594834221200000000000000000000000000000000000000001120344859687e8f92928574604a35200b0012273c51677c7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7b65503b2610000000000000000000000000000000000000000000080e102020202020202020202020202020202020202020202020202020202012100a0000000005192b3c484d5e6060584a433625130000000000000000000000000c1c2f3f4b505e60605a4a4336251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e334657617684939d938a8583837e69543e29140010253b50657b908d8b8c90979f9a8b7d675c4b362614010000000000000000000000000000000000000000000000000b20364b6075889e8a76614c36211100000000000c2135495b6a7f95a09e89796960544b44373d3c3d3e36434a4f56606876818d9e9784766158607282979f9b86776259483b2b1d0d00000000152a3f556a7f94a8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61767d7d7d7a68604e3b2b1804000000000000000000000000000000000000000005182b3b4e60687b7d7d7d76614c36210c001024394d5f67676767676767676767676767676767676767676767676767676767676767676767676767676767655e4c38230e0000000000000000000000000000000000000003111c23263535353535353535353535353535353535353535353535353535353527241d120400000b2034485a627475756d605443301c0f0000000000000000000004172a3a4b5d657475756f605443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4c6175869a9c897e76706e6d69604f3b2612000b20364b60747b7876777b828b9e9f8c7a645443301c080000000000000000000000000000000000000000000000071a2d3e52677d9297826d5846331f0a00000000071a2d3d4e63798b9f9e8979635b4a433631272827272925303538454b57616c7c899d9a867661738297a09b85766159473b2a1d0d0000000000172c41576c8196a5907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465761676767645d4e42311d0d000000000000000000000000000000000000000000000d1d31424e5d65676767615846331f0a000a1d30414d51525252525252525252525252525252525252525252525252525252525252525252525252525252504c402f1c090000000000000000000000000000000000000011212f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c3930231200000d22384d6277898a8b8272604a3d2d1a0a0000000000000000000d1f334758657b898a8a8474604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5d6e83989c87786961575958544f42321f0c00091d3145566065626162656d7b8a9e9c8673604b35200b00000000000000000000000000000000000000000000000d21364a5c70859b8e79644e3a291704000000000c21364a5b6f849aa2927d685b4a3d30251d1513111213131c20283239464c5e6679879d9b85768298a09b85766158473a2a1d0d000000000000182d42576d8297a48f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464c5252524f4b3f3124130000000000000000000000000000000000000000000000001323313f4b505252524c463a2917040000122330393c3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3b382f211100000000000000000000000000000000000000081c2f3f4c5060606060606060606060606060606060606060606060606060606060514d41301d0a000b2034485a677d919f937e695b4a38281602000000000000000d1d30414c6176889d9e8977625443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384f647a8f9f8b79635a4b4639433e3b322414020002152738454b504d4c4d505d687e93a4917b66513c2611000000000000000000000000000000000000000000000417293a4e64798e9b85705c4a361b0b00000000000e24394e63798ea29a8470604e3d2d1c1308020000000000070b161e2933404c5b6378879d9b8998a09b85766158473a2a1c0d00000000000000182e43586d8398a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2933363d3d3d3a372e2013060000000000000000000000000000000000000000000000000513212e373a3d3d3d3633291c0c00000004121d242728282828282828282828282828282828282828282828282828282828282828282828282828282826231c1103000000000000000000000000000000000000000e23384c5d6575757575757575757575757575757575757575757575757575757575675f4d3924100005192b3c4d5f6d82989f8b79635645321e1100000000000005182b3b4d5f6e8298a0917c675948362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d3245566e839996816c5b4a3c32282e29261f14060000000a1a2731363b3836373f4b6075899e97826d57422d18020000000000000000000000000000000000000000000a1f3346586c8297927d67523e2d1b000000000000152b40556a8095a7907b655042311f0f00000000000000000000030b171e2f3d495a6379899e9ea39b84756158473a2a1c0c0000000000000000192e43586e8398a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e2128282825221b1002000000000000000000000000000000000000000000000000000003111c2325282828211f170c0000000000000a1012121212121212121212121212121212121212121212121212121212121212121212121212121212100e0900000000000000000000000000000000000000000010263b50657b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67513c271200000d1d30414b6175879d9c8674604b402f1c0c00000000000e20344859677d92a097826d5f4d3b2b18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9f8d78634d3d2d1e161814120c0200000000000a151d20252321223245566f84999c86715c47321c070000000000000000000000000000000000000000000c21364c61768a9e8875604b3620100000000000001325365b70859a9e8974604b352013010000000000000000000000000b1b283845566075859aaf9b86766157463a291c0c000000000000000000182d42586d8297a48f79644f3a240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1212120f0d08000000000000000000000000000000000000000000000000000000000000080e101212120c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b909f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f917c67513c2712000000121e334657647a8c9f96816c5e4c3a2a18040000000e1e31424d6277899e9d8775614b40301d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f9d88725b49351f0f03000000000000000000000002090b100d0c152838576c81979e89735e49341e090000000000000000000000000000000000000000081c2f3f54697e9396806b5645321d090000000000071c30435473889e9a846f5544311d080000000000000000000000000b1b2839455660748399a29f9d8876614c3d2c1c0c00000000000000000000172c42576c8197a5907a65503b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e20201f1d180f0300000000000000000000000010263b50657b90a5a0988f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f7c67513c2712000000031729394b5c6a7f959f8d7b665847331f14010008182c3c4e606f83999f8c7b655746332212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c929a856f5a3c2c1901000000000000000000000000000000000000162b40566b80959f8a755f4a35200a00000000000000000000000000000000000000000e23374b5d72869c8c78624d3828150200000000000b20354a60758a9f97826c573726140100000000000000000000000b1b2939465760748399a19a8b9f96816c5b4935210e00000000000000000000152b40556a8095a7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e120b0801000000000000000000000000080e10202020200a040000000000000000000000000000000000000000000000000000000003090b1a20200e0c0600000000000000000000000000000000000000000000000000000000000000000e192023353535322c211303000000000000000000000010263b50657b90a598827a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a76614c37210c000000000b1b2e3e4b6073859b9d8876614c42311f0f01142636495a687e93a195806b5d4b39291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e9398836e59432e1900000000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000000000000000000000005182b3b50657b9099846f5a49351a0a0000000000000b20364b60758ba896816c56412c1700000000000000000000000c1b293946576175849aa19a847b909f8b79634e3c2b190600000000000000000013283d53687d92a8947f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212328201d140900000000000000000003111c2326353535351f170c00000000000000000000000000000000000000000000000000000a161e212f35352320190e0000000000000000000000000000000000000000000000000000000000000e1e2c35384a4a4a473e31210f000000000000000000000010263b50657b90a596816b6464646464646464646464646464646464646464646464615847331f0a0000000000101d3144556278899e99836e604e3d2c19091c30435463788a9e9b8574604b3f2e1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e9399846e59442f1900000000000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000000000000000000000000000b203448596e8398907b66513c2b1900000000000000091d31455674899e97826d58362513000000000000000000000c1c293946576175849aa29a84756e839898836e5a4835200800000000000000000010253b50657a90a597826c573828160300000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36393d3531261909000000000000000011212f383b4a4a4a4a33291c0c0000000000000000000000000000000000000000000000000a1b283236444a4a38352c1e0e0000000000000000000000000000000000000000000000000000000006192c3c495e60605f5b4f3e2c18040000000000000000000010263b50657b90a596816b564f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c473a2a1704000000000001142637485a677d92a0937e685b493727192d3d4b6073849a9f8a796355443121100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d929a856f5a36251300000000000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000000000000000000000000011527374d62778b9d8773604b35200e00000000000000021527385d72879c99846f5443301c0700000000000000000c1c293a46576175849aa19983746063788c9f8b78624d3626140100000000000000000c22374c61778ca59b86715645321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e524b4437261401000000000000081c2f3f4c506060605e463a2917040000000000000000000000000000000000000000000003162839454b5a5f605e493c2c19060000000000000000000000000000000000000000000000000000000c2035495a707575746d5b47321d080000000000000000000010263b50657b90a596816b56413a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a37332a1c0c0000000000000009192b3c4d5f6d82989f8a796355443127374a5b697f94a1937e695b49372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b909c87725443301c07000000000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000000000000000000000000081d3144556a8095947f6a5443301c080000000000000000192e43586e83989e8874604a35200c000000000000000c1c2a3a47586175849aa199837460565b6f849995806b5443301c0800000000000000000a1f34475972879d9f8a75604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b6367605544311d080000000000000e23384c5d65757575705846331f0a000000000000000000000000000000000000000000010f1e324557606f7575705a4935200c0000000000000000000000000000000000000000000000000000000e23384d63788a8a8b745f4a351f0a0000000000000000000010263b50657b90a596816b56412c2525252525252525252525252525252525252525211f170c0000000000000000000e1e30414c6176879d9b8574604b3f31445563798b9f99836f604e3d2c190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d9f8974604a35200b000000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000000000000000000000b20354b6074889d8a77614c36261401000000000000000012283d52677d92a78e79644f3a2a180400000000000d1c2a3a47586176859ba199837460564551667c919d8874604b35200b000000000000000004182a3a586d8298aa907b6651392816030000000000000000000000000000000000000000000000000000000000000000000000000000011426364e63797d73604b35200b00000000000010263b50657b8a8a8a76614c36210c0000000000000000000000000000000000000000000f1f31414b6075838a8a78634d38230e0000000000000000000000000000000000000000000000000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0c0a040000000000000000000000131f334658657b8c9f95806b5d4b3e4b6074859b9e8977624c42311f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074899e8d78634d38230e000000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000000000000000000061a2c3d51677c9198826d58473318080000000000000000000c22374c61778a9f97816c5947341f12020000000d1d2a3a47586176859ba0988374605645384b6074889d8f7a644f3a250f00000000000000000012273c52677c91a997826d5745321e090000000000000000000000000000000000000000000000000000000000000000000000000000081c3043547287917c67513c271200000000000010263b50657b909f8b76614c36210c00000000000000000000000000000000000000000a1a2c3d4d5f6d82979f8d78634d38230e0000000000000000000000000000000000000000000000000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000000000417293a4b5d6b80959f8c7b65584b5c6b80959f917c66594834241401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c30435470859b917c67513c2712000000000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000000000000000000c2135495b6f849a8f7a644f3a2a18000000000000000000000a1f3347586c81979f8a77614c4030201002000d1d2b3b47596176859ba0988273605645383144556d829895806a553625130000000000000000000c21364b61768a9f9e8975604b37261401000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60748a947f6a543f2a1500000000000010263b50657b90a18b76614c36210c0000000000000000000000000000000000000003162838495b677d92a0a28d78634d38230e0000000000000000000000000000000000000000000000000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000b1b2e3f4b6073859b9d87766157647a8c9f97826d5e4d3b2a18060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636576c819695806b55402b16000000000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000000000000000031628394e63798d9b86715c4b371c0c0000000000000000000004182a3a4d62788b9f98826d5e4c3e2d20130d1d2b3b48596277869ba09882736055453828263752677c919a85705443301c0700000000000000000a1e3246576d8298a7927d685544311d0c000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b95806b56402b1600000000000010263b50657b90a18b76614c36210c000000000000000000000000000000000000010f1e32455663798a9eb4a28d78634d38230e0000000000000000000000000000000000000000000000000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000000000000111d31445563788a9e98826e6075869c9d8775614b40301d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d9299846f5a3b2a18050000000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000000000000000091e3246576c8196937d68533e2e1b0000000000000000000000000c2034485a697f94a0917c665c4a3e301f1d2b3b48596277869ca098827360554437271a22374c62778c9e8974604a35200b0000000000000000031629394f647a8fa29c8673604b3a2a17040000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788d97816c57422c1700000000000010263b50657b90a18b76614c36210c0000000000000000000000000000000000000f1f30414b6075869ca8b6a28d78634d38230e0000000000000000000000000000000000000000000000000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000001152737495a687d92a0927d6c81969f8c7a645746322212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798e9d88735947341f0b0000000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000000000000000000000c21364b6175899e8975604b36211000000000000000000000000005192b3c4a6072849a9e8a7a645c4d41342b3c48596277869c9f9782726055443727190a1f34485973889e8c77624d37220d0000000000000000000b22374b5c70859aa4927d685847331f140400000000000000000000000000000000000000000000040a0c140e0c070000000000000e24394e63798e98836d58432e1800000000000010263b50657b90a18b76614c36210c00000000000000000000000000000000000a1a2c3d4d5f6d8297a49ca4a28d78634d38230e0000000000000000000000000000000000000000000000000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000009192c3c4e606e83989e897b8d9f95806b5c4b39291604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9f8c77624c37220d0000000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000000000000000000081b2e3e53687d9396816c5745321e09000000000000000000000000000d1c3043546176869c9e887a675f4c473c485a6277869c9f9781726054443727190905182a3b5a70859a8f7a644f3a250f000000000000000000081b2e3e4f657a8fa19d8876614c433222130100000000000000000000000000000000000000000c171f212923211a0f010000000010253a4f657a8f99846f59442f1a00000000000010263b50657b90a18b76614c36210c0000000000000000000000000000000003162838495b677d929f9c879ca28d78634d38230e0000000000000000000000000000000000000000000000000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000e1e31424c6176879d9e8a9f9b8573604b3e2e1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445570869b907b66503b26110000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000000000000000d22374b5c71869b8d79634e3928160300000000000000000000000000001325364758627786999e8b7d6e61594c5a6278879c9f97817260544336261909000014293e54697e8c8a7c66513b2611000000000000000000001022374b5d6e8399a698826e614f40301d1409000000000000000000000000000000000004111c2933363f39362d1f0f0000000011263b50667b909a85705a45301b00000000000010263b50657b90a18b76614c36210c000000000000000000000000000000010f1e32455663798a9e9e897b8fa28d78634d38230e0000000000000000000000000000000000000000000000000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000000131f334758657b90a99f9f8a7863554431201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001152737576c8297947f69543f2a140000000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000000000000000004182a3a4f647a8f9a846f5b49351b0a00000000000000000000000000000008182a3a4859627683959f9182776a616278879c9f9681726054433626180900000012263b4f6069747472604a35200b00000000000000000000081b2e3f4c6277899ea0947f695f4d413126190f0600000000000000000000000000040c171f2e3a464c544e4a3d2d1b0b00000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c0000000000000000000000000000000f1f30414b6075869c9f917d798da28d78634d38230e00000000000000070a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0e23384d63788d9f8a745f4a351f0a0a0a0a0000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000031729394b5d6a7f95a59d9e8977625443301c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f9497816c57422c170200000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000000000000a1f3347586d8298917c67513d2c1a00000000000000000000000000000000000c1c2a3b48586172808b9a98897f7678879d9e96816c60544336261808000000000c1f32424f546060605443301c070000000000000000000000101f344859677c919e9f8d7d675f4b44372d211a0f0b050000000000000002090c171f29333f4b586169635b4a3a291704000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c00000000000000000000000000000a1a2c3d4d5f6d8197a396816c788da28d78634d38230e0000000003090b1c202020202020202020202020202020202020202023384d63788d9f8a745f4a35202020201f12100a0100000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000e1e334657647a8c9f9b879d9a8472604b3e2e1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c9199846f59442f1a0400000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000000000011426364c61778a9d8874604b35200f0000000000000000000000000000000000000d1d2a3a4754606a79848f999489889d9e96806c634a433625180800000000000214243236434b4b4a4336251300000000000000000000000005182a3b4d5f6b8095a09f8c7d6b60554a3e352c22201816131212121315161e212a333a464c5d65767e79635846331f0a000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c0000000000000000000000000002162838495b677d929f9b857463788da28d78634d38230e0000000a161e2131353535353535353535353535353535353535353535384d63788d9f8a745f4a35353535353528251e1305000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000e1e30414c6176879d9b85788a9f947f6a5c4b3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b909a85705a45301b0500000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000000000081c3043546a7f94957f6a5544311d08000000000000000000000000000000000000000d1c2936434b5b636f7b838d9e9d9e96806b6251453025180800000000000000061418263035353530251808000000000000000000000000000d1d30414a607282979f9f8d8073645c4e493d37342b2b29282727282a2832363a474c58616c7b87948776614c36210c000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c000000000000000000000000000e1e32455663798a9e9e89786363788da28d78634d38230e00000a1a283236464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4d63788d9f8a745f4a4a4a4a4a4a4a3d39302313010010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000009192c3c4d5f6d82989f8a79687e939f8c7a645846331f13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000710253a50657a8f9b85705b46301b0600000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000000000000000b20354b6073879d8b77624c3727150100000000000000000000000000000000000000000c1826303d494e5d6576879c9f96806b625144341c13080000000000000000000008141c2020201c1308000000000000000000000000000000121c304354607281959f9f9685796d635b534d483b403e3d3c3c3d3f38454b5158616a76818c9d9e947f69543f2a14000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c0000000000000000000000000e1f30414b6074869c9f917d675a63788da28d78634d38230e0003162838454b5c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f63788d9f8a745f5f5f5f5f5f5f5f524d41301e0a0010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000000000001152737495a677d92a0937e69606e83999d8776614c41311e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202b3c52677c9199846e59442f190400000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000000006192b3c51667b9098836e59483419090000000000000000000000000000000000000000000008141c2c3d4a60728399a096816c6251443426160000000000000000000000000001080b0b0b07000000000000000000000000000000000000132536435460727f8d9da39b8c8279706862595956535251525254575660666e767f89969f9e918073604b35200b000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c00000000000000000000000a1a2c3d4d5f6c8197a397816c5f4e63788da28d78634d38230e00091e3245566071757575757575757575757575757575757575757575757575788d9f8a757575757575757574675f4d3925100010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000c1d3144556278899e99846f604c6177889d98826e5f4e3c2c1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530353b485a6c8197947f69543f2a140000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000000000b2035495a6f84998f7a65503b2b180000000000000000000000000000000000000000000000000c2136495b697f94a1988272604a443426160800000000000000000000000000000000000000000000000000000000000000000000000000081826364354606a7b88969f9f978c857d77726e6b68676767686a6c70757c838a959e9f97887c6b605544311d08000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c0000000000000000000002162838495b677d929f9b8574604b4e63788da28d78634d38230e000b21364b6075858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8c9fa98f8b8a8a8a8a8a8a8a8b7d67523d28120010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000000000c1c2e3f4b6073859b9e8977624d4759667c8d9f927d685b493827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a4d5962788a9f8a77614c37220c0000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000000021528384d62788c9c86715d4b371d0d0000000000000000000000000000000000000000000000091d2f404e63798b9f9b85756054433026160800000000000000000000000000000000000000000000000000000000000000000000000000000008182636434a5e6576818c979f9f9a928c8783807e7d7c7c7d7f81858a91989f9f988c8277665e4b4437261401000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c000000000000000000000e1e32455663798a9e9e89786356454e63788da28d78634d38230e0010263b50657b909f9f9d9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9ca4ab9f9c9c9c9c9c9c9c9c96816b56412c160010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000417293a4b5d6a8095a0917d6759483a4c5e6c81969e8a79635645311d11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435460626977859b937e695947341f0b0000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000000091d3245566b8096937e69533f2e1c0000000000000000000000000000000000000000000000000f24384c5e70849a9e8a7963564536251308000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530404c57616c78818a939a9fa59d9895939291919294979a9fa49c958b83796d61594c403126190900000011263b51667b909a85705b45301b00000000000010263b50657b90a18b76614c36210c0000000000000000000e1e30414b6074859b9f917d675a49384e63788da28d78634d38230e0013283e53687d93a39d88868787878787878787878787878787878787878787869c9f8d8687878787878787867f69543f29140010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000e1f334658657b8c9f98826d5f4d3b2f404b6074869c9b8574604b402f1d0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6072787e889b8d806b604f3b2a18040000000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000000b20364b6075889e8976614c362111000000000000000000000000000000000000000000000005192b3c51667b90a2947e695b49382818080000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2f39464c5a626c777e858b9095989b9c9d9e9e9d9b9996928d867f786e635b4c473a301d14090000000011263b51667c909284705b45301b00000000000010263b50657b90a18b76614c36210c00000000000000000a1a2c3c4d5f6c8197a397816c5f4d3c384e63788da28d78634d38230e000b21364b6074859b9c87767171717171717171717171717171717171717171788d9f8a74717171717171717169614f3b27120010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000e1e31414c6176879d9d8776614c41301e32455663798b9f96806b5e4c3b2a1808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495f748a8d939b857b6b625042321d0c000000000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000000071a2d3e52677d9297816c5746331e0a00000000000000000000000000000000000000000000000b2034485a6f849a9d8774604b3c2c1a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111b29333c494d58616870767b7f828587888988888683817c78716a625a4e4a3d342a1c120100000000000d22374d62777d7d7b65503b261000000000000010263b50657b90a18b76614c36210c0000000000000002152838495a677d919f9b8574604b4130384e63788da28d78634d38230e00091e3245566379899e98826e605c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c63788d9f8a745f5c5c5c5c5c5c5c544f4332200c0010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000009192c3c4e5f6e82989f8d7b65584633231628384a5b697f949f8d7b655947362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f354a5f748b949b877e75645c4a3e2d1909000000000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000000000d21364a5c70859b8e79634e3929170300000000000000000000000000000000000000000000000d22384d62788c9f937e695544311e0e0000000000000000000000000906000000000000000000000000000000000000000000000000000000000000000000000b171e2c353a474c535761666a6d707273747372716e6b67625a554d493c362d1f180c000000000000000b20344859626767655e4c38230e00000000000010263b50657b90a18b76614c36210c000000000000000e1d32455663788a9e9e8a796356453223384e63788da28d78634d38230e0002162838495b677d919f937e685b4a39474747474747474747474747474d63788d9f8a745f4a4747474747473f3b322514030010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000001152737495a687d92a096816c5d4b3a29170a1a2d3d4a6072849a9d8877615443301c1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677d7f859193877a645c4a372715010000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000417293a4e64798e9a85705b4a361b0b00000000000000000000000000000000000000000000000013283d53687d929f8b77614c37271500000000000000000000080e101e1b13110b0100000000000000000000000000000000000000000000000000000000000000030e19202a333739464b5055585b5d5e5e5e5d5c5956524d483c38352b211a0f04000000000000000005182b3b484d5252504c402f1c0900000000000010263b50657b90a18b76614c36210c0000000000000e1e30414b6074859b9f917d675b49382823384e63788da28d78634d38230e00000a1a2c3c4d5f6c81969f8b79635746323232323232323232323232384d63788d9f8a745f4a3532323232322927201407000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000c1d31445563788a9e9c8674604b3f2f1c0c000f1c3043546277899e998372604a3e2d1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f676a717d8a9d8a7a645544311d080000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000a1f3346586d8297927d67523d2d1a00000000000000000000000000000000000000000000000002172c41576c81969b86715947341909000000000000000003111c2325333028251e13050000000000000000000000000000000000000000000000000000000000000000060c171f212933363b40434647484949484644413d38352b2320190e0700000000000000000000000d1d2b34373d3d3b382f21110000000000000010263b50657b90a18b76614c36210c00000000000a1a2c3c4d5f6c8197a397816c5f4d3c2c1a23384e63788da28d78634d38230e0000000e1e30414b6074859b9c8675614b42311f1c1c1c1c1c1c1c1c23384d63788d9f8a745f4a351f1c1c1c1c14120c0300000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000c1c2e3f4b6073859b9f8b7a6456453221110000001325364859667c919f937e695c4a39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d30414d52555f677c919c8674604b35200b0000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000000c21364c61768a9e8875604b36200f000000000000000000000000000000000000000000000000051a2f445a6f849998836d583a2a1800000000000000000011212f383b48463d3a31231301000000000000000000000000000000000000000000000000000000000000000000040a0c171e21262a2d303233343333312e2c272220190e0b0600000000000000000000000000000d182022282826231c11030000000000000010263b50657b90a18b76614c36210c0000000002152838495a677d919f9b8574604b41301e0e23384e63788da28d78634d38230e00000000121d3145566278899e98826d604e3d2d1b0b00070707070e23384d63788d9f8a745f4a351f0a0707070000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000417293a4b5d6b8095a3957f6a5c4a3828160300000008182b3b4d5e6d82979f8b7a645746321e100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001132330393c414d5e6f849a917c67523c27120000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000000081c2f3f54697e9395806b5645311d09000000000000000000000000000000000000000000000000061b30455b70859a96816c57412c170000000000000000081c2f3f4b505e5b524e41311e0b000000000000000000000000000000000000000000000000000000000000000000000000030a0c1115181b1d1e1f1e1d1c1916120d0b05000000000000000000000000000000000000050b0d1212100e0900000000000000000010263b50657b90a18b76614c36210c000000000e1d3245566378899e9e8a796356453223130e23384e63788da28d78634d38230e0000000002152738485a667c919e927e685b4a39281603000000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000a1f334758657b8c9f9b8573604b3e2d1a0a00000000000d1d30404b6175869c9c8675614b3e2e1b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131d2527304053687e9398826d58432d180300000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000000000e23384b5d72869c8c78624d38271502000000000000000000000000000000000000000000000000051a2f455a6f849a97826c5736261401000000000000000e23384b5d65737068604e3a251100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a18b76614c36210c0000000e1e30414b6074859b9f927d675b49382816050e23384e63788da28d78634d38230e00000000000a1a2b3c4c5e6b80969f8a79635746321e13010000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000c21374c6176879b9b8a7963554431201000000000000000121e324657647a8c9b97826d5c4b37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1013263b50657b909a85705a45301b0500000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000005182b3b50657b9099836e5a48351a0a0000000000000000000000000000000000000000000000000003182d43586d829899846e5443301c080000000000000417293a50657b88857e68523d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f1c16140e0400000000000000000000000000000000070c0e120b080100000000070c0e120b08010000000010263b50657b90a18b76614c36210c00000a1a2c3c4d5f6c8196a397816c5f4d3d2c1a0a000e23384e63788da28d78634d38230e0000000000000e1e2f404b6073849b9c8675614b41311f0f0000000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000152a40556a7f8686867c665b493726140200000000000000031628394a5c677d8686857a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a909b85705b46301b0600000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000000b203448596e8398907b66503c2b19000000000000000000000000000000000000000000000000000000152a3f556a7f949e8874604b3520130300000000000e1f3347586e839995806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b2225312b2921160800000000000000000000000000010f1a212328201d140900010f1a212328201d140900000010263b50657b90a18b76614c36210c0002152738495a677c919f9c8675604b41301f0e00000e23384e63788da28d78634d38230e00000000000000121d3144556278899e98826d5f4e3d2c1b0a00000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000013283c50616a717171665e4d3c2c19090000000000000000000b1b2d3e4d5f67717171645c4b37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b919a846f5a452f1a0500000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000011527374d62778b9c8773604a35200e0000000000000000000000000000000000000000000000000000000f24394f64798ea58f7a655041311e160b08040a121e2d3d4c61768a9f917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a46403d332616040000000000000000000000000f1f2d36393d35312619090f1f2d36393d3531261909000010263b50657b90a18b76614c36210c000e1d3145566278899e9e8a796356453223130000000e23384e63788da28d78634d38230e00000000000000011527374859667c8d9f927d685b4939281603000e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000d20334350555c5c5b514d40301e0e0000000000000000000000102030414d525b5c5c4f4b3e2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e9398826d58432d180300000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000000081d3144556a8095947f695443301c070000000000000000000000000000000000000000000000000000000d22364a5c72879d9a846f604e403228201d171f21303c4a5c6b80959e8975604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b4f5c56514433210e0000000000000000000000071a2d3d4a4e524b443726141a2d3d4a4e524b44372614010010263b50657b90a18b76614c36210c0e1e30404b6074859b9f927d675b49382816050000000e23384e63788da28d78634d38230e000000000000000009192b3b4c5e6b80959f8a79635745321e13010e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000031525333c404646463c39302212000000000000000000000000021323303a3d4646463a372e2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b809695806a55402b150000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000000b20354b6074889d8a76614c36251300000000000000000000000000000000000000000000000000000000071b2d3e52687d92a2927d685e4b45393531293336404c5a647a8b9f96816b5645321e09000000000000000000000000000000000000000000000000000000000000000000000000030a0c0a030d22374b5d64716b62513d2914040a0c0b080100000000000c21364a5b6367605544311d21364a5b6367605544311d080010263b50657b90a18b76614c36210c1a2b3c4d5e6c8196a397816d5f4d3d2c1a0a000000000e23384e63788da28d78634d38230e0000000000000000000d1d2f404b6073849a9c8675604b41301f0f0e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000071520282a31313127241d12040000000000000000000000000005131e252831313125221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b5a6f8499917c67523c27120000000000000000000000000000000001162b40566b80959f8a755f4a35200a0000000000061a2c3d51677c9197826d584733180800000000000000000000000000000000000000000000000000000000001020354b6073859b9f8c7c6b60574f4b443a464c525e6678879d9d8775614b3828160300000000000000000000000000000000000000000000000000000000000000000000000b171e211e170f253a4f647a86806b56402b16171f21201d1409000000011426364e63797d73604b352026364e63797d73604b35200b0010263b50657b90a18b76614c3621152738495a667c919f9c8675604b41301f0f00000000000e23384e63788da28d78634d38230e00000000000000000000111d3144556277889d97826d5f4d3d2c1a0e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000030d13151c1c1c110f0900000000000000000000000000000000010a10121c1c1c0f0d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485973889e8d78634e38230e0000000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000000c2135495b6f849a8f7a644f3a2a17000000000000000000000000000000000000000000000000000000000000081c3043546278889d9f8d80756a6460555c586167707c899d9f8b7b655746331a0a00000000000000000000000000000000000000000000000000000000000000000000000b1b293336332920263b50667b90836e58432e1d29333735312619090000081c3043547287917c67513c273043547287917c67513c27120010263b50657b90a18b76614c36211d3145566278899e9e8a796356453223130100000000000e23384e63788da28d78634d38230e00000000000000000000011426374859657b8d9f927d675b4938281623384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778c9e8974604b35200b0000000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000031628394e63798d9b86715c4a361c0c00000000000000000000000000000000000000000000000000000000000001142636485a647a88999f9588807a75737273767d84919e9c8b7c665d4b39291700000000000000000000000000000000000000000000000000000000000000000000000a1a2939464c4639342b3b50667b90836e584326313a474c4b4437261401000b20354b60748a947f6a543f2a354b60758a947f6a543f2a150010263b50657b90a18b76614c362130404b6074859b9f927d675b49382816050000000000000e23384e63788da28d78634d38230e000000000000000000000009192b3b4b5d6a7f959e8a79635645321e23384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b919b85705443301c080000000000000000000000000000000001162b40566b80959f8a755f4a35200a00000000091e3246576c8196927d68533e2e1b000000000000000000000000000000000000000000000000000000000000000008182b3c4a5c647784909b9e958f8a8887898b929a9d938679665e4c3f2e1b0b0000000000000000000000000000000000000000000000000000000000000000000002152838465761574d483b3b50667b90836e584337444b5861605544311d08000c21364c61768b95806b56402b364c61768b95806b56402b160010263b50657b90a18b76614c362b3c4d5e6c8196a397826d5f4d3d2c1a0a000000000000000e23384e63788da28d78634d38230e0000000000000000000000000d1d2f3f4b6072849a9c8675604b413023384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a809597816c57362614010000000000000000000000000000000001162b40566b80959f8a755f4a35200a000000000c21364b6175899e8975604b3621100000000000000000000000000000000000000000000000000000000000000000000d1d2d3e4a59616f7b858d93999b9d9c9c9a9690877e75635b4c402f21110000000000000000000000000000000000000000000000000000000000000000000000091d32455661766d62594b4550667b90836e583f4b5560687673604b35200b000d22384d62788d97816c57422c384d62778d97816c57422c170010263b50657b90a18b76614c3637485a667c919f9c8675604b41301f0f00000000000000000e23384e63788da28d78634d38230e00000000000000000000000000111c3043546177889d97816c5f4d3d2c384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b596f8499927d68533d2813000000000000000000000000000000000001162b40566b80959b8a755f4a35200a000000081b2e3f53687d9396816b5645321e09000000000000000000000000000000000000000000000000000000000000000000000f202d3a474c5e6670787e838688898785817b746960564a3d2f22120300000000000000000000000000000000000000000000000000000000000000000000000b20364b60748783786a605650667b90836e584d5d65737e887e68533e2813000e24394e63798e98836d58432e394e63798e98836d58432e180010263b50657b90a18b76614c3644556278899e9e8a796357453223130100000000000000000e23384e63788da28d78634d38230e00000000000000000000000000011426364759657b8c9f927d675b4938384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475973889d8e79644f39240f00000000000000000000000000000000000014293e54697e868685715b46311c060000000d22374b5d71869b8c78634d3828160300000000000000000000000000000000000000000000000000000000000000000000010f1c2a34404c505b63696e71727372706b6560554b45382d1f12040000000000000000000000000000000000000000000000000000000000000000000000000e23394e637987958a7f75675f667b90836e5a626e7b86938d816b56412c160010253a4f657a8f99846f59442f3a4f657a8f99846f59442f1a0010263b50657b90a18b76614c404b6074859ba0927d685b49392816050000000000000000000e23384e63788da28d78634d38230e000000000000000000000000000008182a3a4b5d6a7f949e8a79635645384d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778c9f8a75604b36200b00000000000000000000000000000000000012263b4f60697171716756422e19050000031628394f647a8f9a846f5b49351a0a000000000000000000000000000000000000000000000000000000000000000000000000000c181f2f383d494e53595b5d5e5d5b56504b443732281a0f01000000000000000000000000000000000000000000000000000000000000000000000000000c2136495b6375808a95877c70667b90836e6b78839092857a6b62513d29140011263b50667b909a85705a45303b50667b909a85705a45301b0010263b50657b90a18b76614c4c5e6c8196a397826d5f4e3d2c1b0a000000000000000000000e23384e63788da28d78634d38230e0000000000000000000000000000000c1c2e3f4a607283999b8574604b414d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f9d88725645321d090000000000000000000000000000000000000c1f32424f545c5c5b5649382613000000091e3245576d8298907c66513c2c1900000000000000000000000000000000000000000000000000000000000000000000000000000004111c232c35383e444648494745413b3631271e160a000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4957616b7883909184797b8f8276808a96887d72645c514434220e0011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b90a18b76614c5a667c919e9c8675604b41311f0f00000000000000000000000e23384e63788da28d78634d38230e00000000000000000000000000000000111c3043546176879d97816c5f4d4d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c929a85705b38281502000000000000000000000000000000000000021424323b3e46464642382b1b090000000b21364b607585867f695e4c381e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000090f1a2123292e31333432302c26201d15090300000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c39464b5a626e7b86938b7f8b8187958b80766860544b3e342616050011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b90a18b7661556278899e9f8a796357453223130100000000000000000000000e23384e63788da28d78634d38230e00000000000000000000000000000000001325364758647a8b9f917d675a4d63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e9399846f59442f1a000000000000000000000000000000000000000006141f26293131312e261b0d00000000091e32455760717169614f402f1d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e14191c1d1e1d1b16100b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1b28323c494d5d65737e878a8a8a8c82796b61574a43362e201608000011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b90a18b76616074859ba0927d685b49392816050000000000000000000000000e23384e63788da28d78634d38230e000000000000000000000000000000000008182a3a4b5c697e949e8978635663788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e9398836e59432e19000000000000000000000000000000000000000000020c12141c1c1c0b0700000000000003162839454b5b5b544f43322212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e2c35404c556069767f879d8c837b6f635b4c46393025181002000011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b90a18b76616b8096a398826d604e3d2c1b0a000000000000000000000000000e23384e63788da28d78634d38230e0000000000000000000000000000000000000c1c2e3e4f616e83999b85746063788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d9299846f5a3929170300000000000000000000000000000000000000010f1a21242d2e28201c130800000000000a1b28323646463f3b322515040000000000000000000000000000000000000000000000000000000000000001080b1216140c0a0300000000000000000001080b1216140c0a0300000000000000000001080b1216140c0a030000000000000000000001080b1216140c0a03000000000000000b1b29333c494d5e66747e89958489838b8f83786b61574a43362e2010000011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b90a18b76667c919e9c8675614b41311f0f00000000000000000000000000000e23384e63788da28d78634d38230e00000000000000000000000000000000000000102032434c6176879d96816c63788d9f8a745f4a351f0a0000000000000000000010263b50657b90a596816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b909b86715746331e0a0000000000000000000000000000000000000412202d363942443d353025180800000000000a161e2131312a272015070000000000000000000000000000000000000000000000000000000000000008141c20272b29211e170b0000000000000008141c20272b29211e170b0000000000000008141c20272b29211e170b000000000000000008141c20272b29211e170b000000000003172939464b5b636f7b86948c817a8f817b88958b80766860544b3f2e1b080011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b90a18b7678899e9f8a796357463223130100000000000000000000000000000e23384e63788da28d78634d38230e0000000000000000000000000000000000000002141f334658647a8b9f917c67788d9f8a745f4a351f0a0000000000000000000010263b50657b909292806b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778b9f8b76614c39281811110d0b060000000000000000000000000012222f3e4a4e5859524a4336251300000000000003090b1c1c14120c03000000000000000000000000000000000000000000000000000000000000000a182630353c403e3633291b0e00000000000a182630353c403e3633291b0e00000000000a182630353c403e3633291b0e0000000000000a182630353c403e3633291b0e000000000a1e334657616b78839091857a6c7b90836d75808a96887d72645d4b37220d0011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b90aa8b76859ba0927d685b4a392816050000000000000000000000000000000e23384e63788da28d78634d38230e00000000000000000000000000000000000000000417293a4a5c687e939e8978788d9f8a745f4a351f0a000000000000000000000d22374c62777d7d7d7a644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475971869b927d685745362b27262320190e0000000000000000000000091d2f404c5c646d6e68605443301c1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2836434b5255534b46392c1e0e0000000a1a2836434b5255534b46392c1e0e0000000a1a2836434b5255534b46392c1e0e000000000a1a2836434b5255534b46392c1e0e0000000c21364b6175808b95877d7064667b90836e616b78839092857b644f3a250f0011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b909f8c8196a398826d604e3d2d1b0b000000000000000000000000000000000e23384e63788da28d78634d38230e0000000000000000000000000000000000000000000b1b2d3e4e606e82989b85788d9f8a745f4a351f0a000000000000000000000b1f34485962676767645c4a36220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b53687e939c87756054483b3c3b38352b1e0e000000000000000000000f24384c5e667a82837d72604a402f1c0900000000040b0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b08020000000002152838455460676b696157493c2c19060002152838455460676b696157493c2c19060002152838455460676b696157493c2c1906000002152838455460676b696157493c2c190600000f243a4f647a8d8a8075675f50667b90836e585a626e7b8693816c56412c170011263b51667b909a85705b45303b51667b909a85705b45301b0010263b50657b909f8d8a9f9c8675614b42311f0f00000000000000000000000000000000000e23384e63788da28d78634d38230e00000000000000000000000000000000000000000000102031424b6175869c97818d9f8a745f4a351f0a0000000000000000000005182a3b484c5252524f4a3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c20364b6074879d98827262595351504d483c2b190600000000000000000215283851667c8b979992826d5e4c38230f0000000c181f2222222222222222222222222222222222222222222222222222222222201d1509000000091d32455660737c807e75625a4935200a00091d32455660737c807e75625a4935200a00091d32455660737c807e75625a4935200a0000091d32455660737c807e75625a4935200a00000d22374b5c697e786a60574d50667b90836e58494d5d65737e76614c37210c0011263b51667c909285705b45303b51667b909284705b45301b0010263b50657b90ab9f9f9f8a796357463223130100000000000000000000000000000000000e23384e63788da28d78634d38230e0000000000000000000000000000000000000000000002141e32465763798a9f978d9f8a745f4a351f0a00000000000000000000000d1d2a34373d3d3d39362d201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d314556647a8b9e9883786e686666625a4835200b0000000000000000091d32455672879caaaea0907b66503b261100000c1d2a343737373737373737373737373737373737373737373737373737373737363127190900000b20364b6074849195938778624d382815020b20364b6074849195938778624d382815020b20364b6074849195938778624d38281502000b20364b6074849195938778624d3828150200071b2e3e4e6069625a4b453950667b90836e58433f4b556068615847331f0a000d22374d62777d7d7c65503b26374d62777d7d7b65503b26100010263b50657b90a5b5a0927e685b4a392816050000000000000000000000000000000000000e23384e63788da28d78634d38230e0000000000000000000000000000000000000000000000031629394a5b687e92a09f9f8a745f4a351f0a0000000000000000000000000d181f2228282824221b100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384a5c667c8a9a998a837e7c7b78624d38230d00000000000000000b20364b60758ba5b6bea9947f6a543f2a150004182a3b474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b443727150200152a3f546a7f94a2aaa59a846f5645321d09152a3f546a7f94a2aaa59a846f5645321d09152a3f546a7f94a2aaa59a846f5645321d0900152a3f546a7f94a2aaa59a846f5645321d090000102031424e534d483c323b50667b90836e58432f37444b534c473a291704000b20344859626767655e4c3823344859626767655e4c38230e0010263b50657b90a5a498826d604e3d2d1b0b000000000000000000000000000000000000000e23384e63788da28d78634d38230e0000000000000000000000000000000000000000000000000b1b2d3d4e606d8297a49f8a745f4a351f0a00000000000000000000000000050b0d1212120f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2d3e4c5e66798590979893919089745e49341f0000000000000000091d32455672879dabafa1917b66513c2611000b1f3447596162626262626262626262626262626262626262626262626262626262605544311d08001a2f445a6f8499afc0b59f8b75604b36200b1a2f445a6f8499afc0b59f8b75604b36200b1a2f445a6f8499afc0b59f8b74604b36200b001a2f445a6f8499afc0b59f8b74604b36200b0000021424313b3e38352b263b50667b90836e58432e2631353e3733291c0c000005182b3b484d5252504c402f1c2b3b484d5252504c402f1c090010263b50657b90a89c8675614b42311f0f00000000000000000000000000000000000000000e23384e63788da28d78634d38230e000000000000000000000000000000000000000000000000000f1f31424b60758693938b745f4a351f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202f404c5b63707b82878a8c8d8c755f4a352000000000000000000215283852677d8d999a94836e5e4c38240f000c22374c61777777777777777777777777777777777777777777777777777777777774604b36200b00192e43586e8398adbbb49f8974604b35200b192e43586e8398adbbb49f8974604b35200b192e43586e8398adbbb49f8973604b35200b00192e43586e8398adbbb49f8973604b35200b00000006141f2629222019263b50667b8f826e58432e141d2029211f170c000000000d1d2b34373d3d3b382f21111d2b34373d3d3b382f2111000010263b50657b90918a796357463224130100000000000000000000000000000000000000000e23384e63788d928d78634d38230e0000000000000000000000000000000000000000000000000001131e32455763787e7e7e68533e2913000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000212222f3d4a4e5d656c7275777878624d38220d0000000000000000000a25394d5f677b84857f73604b402f1d09001e34495e73898c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7b654f3a25100011263c51667c919faaa096806b5443301c0811263c51667c919faaa096806b5443301c0811263c51667c919faaa096806b5443301c080011263c51667c919faaa096806b5443301c0800000000020b11140d0b0c21364c61767a79634e38230e080b130c0a040000000000000d182022282826231c11030d182022282826231c110300000d22374c62777d7c78635b4a392916060000000000000000000000000000000000000000000c21364c61757d7d7d75614b36210c000000000000000000000000000000000000000000000000000003162839495a63696968604e3a2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121f2d363f4c505754606162625a4835200b0000000000000000000a1d30414d5d656e706960554431221200001e34495e73899393939393939393939393939393939393939393939393939393938f7a654f3a2510000f24384c5e6a7f8b908d8274604b362614010f24384c5e6a7f8b908d8274604b362614010f24384c5e6a7f8b908d8274604b36261401000f24384c5e6a7f8b908d8274604b36261401000000000000000000000a1f3346586165635b4935210c00000000000000000000000000050b0d1212100e09000000050b0d1212100e09000000000b1f344859626767635a4a3d2d1b0b000000000000000000000000000000000000000000000a1e33465761676767615746321e0a0000000000000000000000000000000000000000000000000000000a1b2c3c494d5353534e42311f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212f383b36434b4c4d4d483c2b1905000000000000000000011323303f4b50595a544b4437271504000013283d53687d7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e77624c37220d00091d2f404f616a777b786d60564532180800091d2f404f616a777b786d60564532180800091d2f404f616a777b786d6056453218080000091d2f404f616a777b786d60564532180800000000000000000000000417293a464c4f4e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000005182a3b484c52524d493c2d1f0f000000000000000000000000000000000000000000000003172939464c5252524b4639291603000000000000000000000000000000000000000000000000000000000e1e2c35383e3e3e3a31241402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c2326263035373838352b1e0e00000000000000000000000513212e373a44453f353127190900000011263a4e60686969696969696969696969696969696969696969696969696969696962594834200b0000122232434f596265635b4b45382816000000122232434f596265635b4b45382816000000122232434f596265635b4b4538281600000000122232434f596265635b4b45382816000000000000000000000000000c1c2933363a38352c1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000d1d2a34373d3c38352c1e0f010000000000000000000000000000000000000000000000000b1b2933363d3d3d3632291b0b0000000000000000000000000000000000000000000000000000000000000e192023292929261f14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e10141c2022232220190e0000000000000000000000000003111c23252f302a201d1509000000000b1e31424e53535353535353535353535353535353535353535353535353535353534c483b2b18050000041525323b484c504e493d32281a0a000000041525323b484c504e493d32281a0a000000041525323b484c504e493d32281a0a00000000041525323b484c504e493d32281a0a00000000000000000000000000000c171f212523211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000d181f2228272320190e0000000000000000000000000000000000000000000000000000000b171e21282828211e160b0000000000000000000000000000000000000000000000000000000000000000060c0e141413110b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0c0d0d0b0500000000000000000000000000000000080e10191b140b08010000000000021324313a3d3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e37342b1d0d0000000007151d2b34373b38352c1e160a000000000007151d2b34373b38352c1e160a000000000007151d2b34373b38352c1e160a00000000000007151d2b34373b38352c1e160a00000000000000000000000000000000040a0c100e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d12120e0c060000000000000000000000000000000000000000000000000000000000030a0c1212120c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131e2628292929292929292929292929292929292929292929292929292929292220180d000000000000000d1820222623211a0f0200000000000000000d1820222623211a0f0200000000000000000d1820222623211a0f020000000000000000000d1820222623211a0f020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b1113141414141414141414141414141414141414141414141414141414140d0b05000000000000000000050b0d100e0c060000000000000000000000050b0d100e0c060000000000000000000000050b0d100e0c06000000000000000000000000050b0d100e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Light SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Light SDF.asset.meta new file mode 100644 index 0000000..126a2d6 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Light SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a7cf2bc8733f6c0468062c8e95e84690 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-LightItalic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-LightItalic SDF.asset new file mode 100644 index 0000000..6126503 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-LightItalic SDF.asset @@ -0,0 +1,2726 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &-8958199728935286697 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-LightItalic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -6708749334726711433} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!28 &-6708749334726711433 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-LightItalic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b16150b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0d0b050000000000000000000000000000040a0c11131412100b0902000000000000000000070b070500000000000000000000000000000000000000000000000000000000000003090b0f12151616161413100c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c10141617181715120e0b07000000000000000000000000000000000000000000000000000000010a101220201d1b150b00000000000000000000000000000000000000000000000000040a0c1b201f1d170e020000000000000000000000010a1012202020110f0900000000000000000000000000000000000000000000080e101e20201d0c0a0300000000000000000000000000000000000000000000000000000000000000000000090f1120201a17110700000000000000000000000000000000010a1012202020110f0900000000000000000000000000000000000000030c13151e2020191710070000000000010d171d1f202015130d040000000000000000000000010a10122020200d0b050000000000000000000000000711171920201b1812080000000000000000000000000000000000000000000000000000000000000008131c202b2a201d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d181f22221f180d0000000000000000000000060b171f2126282a2825201d150a070000000001080b1c201d1a140a00000000000000000000000000000000000000000000000000040a0c161e2125282a2b2c2b2a2825211f17110b08020000000000000000000000000000000000000000000000000000000000000000000002080b161e2126292b2d2d2c2a2724201c130b07000000000000000000000000000000000000000000000005131e252735353230281d0f00000000000000000000000000000000000000000000000c171f21303534322b20120200000000000000000005131e252735353526241d120400000000000000000000000000000000000003111c232633353532211e170b0000000000000000000000000000000000000000000000000000000000000004121d242635352f2c24190b000000000000000000000000000005131e252735353526241d120400000000000000000000000000000000071520272a3435352e2b24180a00000001111f2a313435352a2820150700000000000000000005121d24273535353520180d000000000000000000000b19242c2f3535302d251a0c00000000000000000000000000000000000000000000000000000000000818253035413f3632281a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000b171f2a343737342a1d0d0000000000000000000e1a212933363b3e3f3d3a363127211a0f040009141d203235322f271c0e00000000000000000000000000000000000000000000050c181f222832363a3d3f4041403f3d3a37332a26201d1509050000000000000000000000000000000000000000000000000000000000000009151d202932363b3e41424241403d39353025201c1308000000000000000000000000000000000000000001132330393c4a4a48443a2d1d000000000000000000000000000000000000000000000c1c293336454a49463d302000000000000000000001132330393c4a4a4a3c3830221200000000000000000000000000000000000011212f383b484a4a473633291b0b00000000000000000000000000000000000000000000000000000000000012222f383b4a4a44403629190700000000000000000000000001132330393c4a4a4a3c38302212000000000000000000000000000000021525323c3f494a4a43403628180700000d1f2f3d46494a4a403c332515040000000000000001122330393c4a4a4a4a342b1d0d00000000000000000719293640444a4a4541372a1a0800000000000000000000000000000000000000000000000000000000132536434a56544b453828150200000000000000000000000000000000000000000000000000000000000000000000000000000b1b29333b474c4c483b2a180500000000000005131f2c353a464c51535452504b4538362d1f170c19263135474a47433a2c1c0a00000000000000000000000000000000000000010e19202a343738454b4f525456565554524f4c473a3c36312720190d0400000000000000000000000000000000000000000000000000000002121927313639464b50535657575655524e4a43363530251812060000000000000000000000000000000000000a1e30414d5260605d584b3a190900000000000000000000000000000000000000000417293a464c5b605f5a4e3d1c0c00000000000000000a1e30414d52606060514c40301d09000000000000000000000000000000000e1e2f3f4c505e60605d4c463929170300000000000000000000000000000000000000000000000000000000091d2f404c5160605954473624110000000000000000000000000a1e30414d52606060514c40301d090000000000000000000000000000102032434f545e60605953463624100000172a3d4d5a5e606055504333200d000000000000000a1d30414d516060605e483b2b18050000000000000011243647545960605a5548372512000000000000000000000000000000000000000000000000000000071c304354606b6a605645321d09000000000000000000000000000000000000000000000000000000000000000000000000000417293a464c5962625948341f0b0000000000051323313d494e5861666869676560564e4a3d332a1c2637444b5c605c574a3a271400000000000000000000000000000000000009141d2b353a474c54566064676a6b6b6b696865615857514b4437342b1f180c000000000000000000000000000000000000000000000000000a151d2f37444b52576165696b6c6d6c6a67636054504a43363020190e00000000000000000000000000000000001025394d5f67757572695837261401000000000000000000000000000000000000000a1f334658617075746c5a3a2a1704000000000000001025394d5f67757575665e4c38240f0000000000000000000000000000000a1a2c3c4c5d6573757572615746331e0a000000000000000000000000000000000000000000000000000000000f24384c5e6675756f6554402c170200000000000000000000001025394d5f67757575665e4c38240f0000000000000000000000000008182d3e4f616a7375756e6453402b1702001d31465a6b7475756a61503c2813000000000000001024394d5f6775757570594834200b00000000000002172c4054656e7575706655412d080000000000000000000000000000000000000000000000000000000b20354a6072807f74604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465861717777624c37220d0000000000132331424e5b636e767b7d7f7d7a756d635b4c473a2d314455607175726857432f0c00000000000000000000000000000000000c1926313c484d59616970767a7d7f8081807f7d7a76726c6660554d483c342a1d1303000000000000000000000000000000000000000000000b1a2832404c5560676f767b7e808282817f7c79746d6560544d40352c1e120500000000000000000000000000000012273c52677d8a8a87725544311d0800000000000000000000000000000000000006192c3c4c6176848a8a745847331f0a0000000000000012273c52677d8a8a8a7c66513c2611000000000000000000000000000002162838495a657b888a8a8776614c36210c0000000000000000000000000000000000000000000000000000000011263b51667c8a8a836f59442f1a00000000000000000000000012273c52677d8a8a8a7c66513c2611000000000000000000000000001325364a5c6a7f898a8a836e59432e1904001f34495e748a8a8a7f6a55402a150000000000000012273c51677c8a8a8a77624d37220d00000000000004192f44596e838a8a84705a362513000000000000000000000000000000000000000000000000000000071c3043547287937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000c21364c6176858c84705a45301b000000000e1e30414e606879838a909394928f8982796d61584a3e354b6073868a86725c3b2a18040000000000000000000000000000000d1c2a37444b5a626c777e858a8f929495969594928f8c87817b746b625a4c473b311e170b00000000000000000000000000000000000000000b1b2938454b5e66747c848a90939697979695928e88827b73665e4d493c3023150700000000000000000000000000000f253a4f647a8f9f8a75604b35200b000000000000000000000000000000000000082135495b6c81969f8c76614c37210c000000000000000f253a4f647a8f9f937e69543e291400000000000000000000000000010f1e3245566378899d9f8b7a645746331e0a000000000000000000000000000000000000000000000000000000000e24394e63798e9c86715c3a29170400000000000000000000000f253a4f647a8f9f937e69543e2914000000000000000000000000071c304354647a8c9e9e8a78624d37220d00001c31475c71869c97826d57422d18020000000000000f243a4f64798f9f8f7a644f3a250f00000000000002172c41576c81969d87725443301c07000000000000000000000000000000000000000000000000000000132536596e8498826d583626140100000000000000000000000000000000000000000000000000000000000000000000000013253653687e93957f6a55402a1500000006192c3c4d5f687e8a989f9f9894939498988c8276645c4c404d62788d9f89745947341f0b00000000000000000000000000000d1d2b3a4755606978828b949a9f9f9c9997969697999d9f9c97918880786c61594d4133291b0e000000000000000000000000000000000000091929394656606c7c87919a9fa79e9a989798999c9f9e9790867c6f635a4d4132251507000000000000000000000000000d22374d62778ca98d77624d38220d000000000000000000000000000000000008182e3f4d63788b9fa48e79644f39240f000000000000000d22374d62778ca996816b56412c16010000000000000000000000000f1f31414b6074859ba0937e685c4a39291703000000000000000000000000000000000000000000000000000000000c21364c61768b9e89745847331f0a00000000000000000000000d22374d62778ca996816b56412c160100000000000000000000031729394a6072859ba4947f6a594834200b00001a2f44596f84999a846f5a452f1a000000000000000d22374c62778ca9917c67523c271200000000000000142a3f54697f949f8a75604a35200b000000000000000000000000000000000000000000000000000000162b40566b809586715443301c080000000000000000000000000000000000000000000000000000000000000000000000071c3043546e83998f7a654f3a25100000000c2035495a677d8d9fa0988a837f7d7e82899397877a665e4d4b61768ba88c77614c37220c000000000000000000000000000c1d2b3b485861737f8a979f9f99928b87848281818284878b90969d9d968a8177675f4b46392c1e0f01000000000000000000000000000000011426374657617481909ca49e968e888583828284878b929aa29b918478675f4f43332515040000000000000000000000000b20354a60758a9f8f7a654f3a251000000000000000000000000000000000001325364b5d6e8399aaa6917c66513c2711000000000000000b20354a60758a9f99836e59442e190000000000000000000000000b1b2d3d4e5f6d8297a398826e604e3e2d1b0b00000000000000000000000000000000000000000000000000000000000a1e33465773899e8c76614c37210c00000000000000000000000b20354a60758a9f99836e59442e1900000000000000000000000a1e334657687d92a39c8674604b3b2b19050000172c41576c81969c87725c3b2a18040000000000000b20354a60758a9f947f69543f2a140000000000000012273c52677c91a98c77624c37220d00000000000000000000000000000000000000000000000000000012273d52677c928975604b35200b05000000000000000000000000000000000000000000000000000000000000000000000b20354a6074899e8975604b36200b000006192c3c4d63788b9f9f9782766e6a68696d757e899a8b7c665e4d5774899e8f79644f3a240f00000000000000000000000009192a3b4859627684949fa1998c847c77726f6d6c6c6d6f72767b8188919b9f96897d6e6157493c2c1f0f000000000000000000000000000000081d314455617584979f9f9789807973706d6d6d6f72777d848f9ca29a8a7d6a615043332212010000000000000000000000071c30435472879c927d67523d281200000000000000000000000000000000071c304354657b8fa1afa9947e69543f291400000000000000071c30435472879c9b86715b3929160300000000000000000000031729394a5b687d929f9c8776614c42312010000000000000000000000000000000000000000000000000000000000000031729395c71869b8e79644e39240f0000000000000000000000071c30435472879c9b86715b39291603000000000000000000061a2c3d4c6176889da0907b655544311d0d000000142a3f54697f949f89745947341f0b000000000000071c30435472879d96816c57412c17020000000000000f253a4f647a8fa48f7a644f3a250f000000000000000000000000000000000000000000000000030a0c1524394e63798e8d78634d382320180f0d08000000000000000000000000000000000000000000000000000000000000000f24394e64798e99846f5544311d0800000c2035495a6e8399a497816d61585553545660697884978c7c665d5c72879c917c67513c271200000000000000000000000115273747596278879aa29e9183796f6761585957565758595761666c747c86929e9e928375635a493d2c1f0e00000000000000000000000000071b2d3e4b60738399a29f9281766b645c5a58575859596167707b86939f9e917f6a615040301f0f0000000000000000000000001325365a6f849a947f6a553f2a15000000000000000000000000000000021628384a6072859ba29aa296816c56412c1701000000000000001325365a6f859a9e89735746321e0a00000000000000000002101e33465763798a9f9f8b7a6457463324140200000000000000000000000000000000000000000000000000000000000000192f44596e8499917b66513c26110000000000000000000000001325365a6f859a9e89735746321e0a0000000000000000000a2136495b6c8196a698836e5d4b3727150000000012273c52677c91a98c77614c37220c000000000000001325365a70859a99846e59442f19000000000000000d22374d62778ca9917c67523c271200000000000000000000000000000000000000000000030b171e212832364b60758a917c66513c37342b25221b1008000000000000000000000000000000000000000000000000000000000114263754697e94947f69543727150200000d23384d62788da19c8673604c473a3e38454b5a627281968c7b655a6f859a947f69543f2a140000000000000000000000081d3144556177869ca59d8a7d6e635b524c473a4241414239464b50556067737d8899a1998678635b493d2c1c0c0000000000000000000000000d22364a5c6b8095a19f8c7d6c61584e4a3d4342433a474c525d65737e8c9e9d947f6a5e4d3d2d1a0a0000000000000000000000182d42576d829797826d57422d18000000000000000000000000000000091e324556677d92a199849a99846e59442f190000000000000000182d42576d8297a78b76614b36210c000000000000000000102032424c6176869ca0937e685c4a392917060000000000000000000000000000000000000000000000000000000000000001172c41566c8196937e69543e2914000000000000000000000000182d42576d8297a78b76614b36210c00000000000000000a1b30414e63798c9f9e8a77624d3f2f1909000000000f253a4f647a8fa48e79644f39240f00000000000000182d43586d82989b86715c392917030000000000000b20354a60758a9f947f69543f2a140000000000000000000000000000000000000000000a161e29333638454b4f567187957f6a55504c483b3a372e231c11060000000000000000000000000000000000000000000000000000081d3144556f84998e79644f39240f000001142636556a7f94a6917c665544332a2828323c4854606c80968978626d829896816c57412c1702000000000000000000071a2d3d4b6073849aa49d8779675f4e4a3d37332a2d2c2c2d28323637444b5460677783959e9c8879635b493a29180800000000000000000000071b2d3e4f647a8c9f9e917d675f4c473a362d2e2d2d2a34373f4b5560697c8a9e9f8d7c665b4a3828160200000000000000000000152a3f556a7f949a846f5a362513000000000000000000000000000004182a3a4b6075879d99837e939b86715c3929170300000000000000152a40556a7f95a38e79634e39240e00000000000000000c1c2e3e4f616e8398a498826e604e3e2d1b0b00000000000000000000000000000000000000000000000000000000000000000014293f54697e9496816b56412c16010000000000000000000000152a40556a7f95a38e79634e39240e00000000000000031628394d5f6f849aa4947f69594834211100000000000d22374c62778ca9917c66513c271100000000000000162b40556b80959e89745746331e0a000000000000071c30435472879d96816c57412c170200000000000000000000000000000000000003111a283239464b53566064686e8398836e69666259574f4b3e372e211a0e000000000000000000000000000000000000000000000000000b20354b6074899e8974604b35200b0000081c30435470859b9e8874604b37261713151d2b36434b626d829885746b809599846e59442f19000000000000000000000c21364a5b6b8095a29d8878635b4d41362d221f1818171718161e21273136434a59617280939d9d8879635847362614010000000000000000000d22364a5c6f849aa796816c5f4d41332a211a181818181f222e37444b5e667a899e9e8a79635645321e0d0000000000000000000012283d52677d929c87725443301c07000000000000000000000000000a1f3447596a7f949f8b797c919e89745746331e0a0000000000000013283d52687d92a6907b66513b26110000000000000008182a3a4b5c697e93a09c8675614b423120100000000000000000000000000000000000000000000000000000000000000000000011273c51667c9199836e59442e1900000000000000000000000013283d52687d92a6907b66513b261100000000000000091e324557677c91a29c8674604b3b2b180300000000000b20354a60758a9f947e69543f29140000000000000013283e53687d93a78b76614b36210c000000000000001325365a70859a99846e59442f190000000000000000000000000000000000000614212e38454b5761686f75797d7f859b88807e7b77726c645c504b3f352c1f120400000000000000000000000000000000000000000000000f253a4f647a8f99836e5443301c0800000b20354b6075899e97826d554431190900020d182630444b607585957f6a7e939c86715c3a2917040000000000000000071b2e3e4e63798b9f9f8c7b645a4a3d30211a0f0a040001020003090c151d25303a4754606b7e939e9d8776615443301c0e0000000000000000000f24394f64798ea29e8976614c41301f170c07000200040a11192631404c5c667c8d9f9d8774604b3b2a180500000000000000000010253a4f657a8f9f8975604a35200b000000000000000000000000061a2c3d4c6177899e96816c798ea78b76614c36210c0000000000000010253a50657a8fa5937e69533e2914000000000000011426364758647a8b9f9f8b7a64574633241402000000000000000000000000000000000008090909090909090909090909090909090f24394f64798e9b86715b39291603090908000000000000000010253a50657a8fa5937e69533e291400000000000006192c3c4b6075879da0907b655544311d0d000000000000071c30435472879c96816c56412c170100000000000011263b50667b90a38e78634e39230e00000000000000182d43586d82989b86715c3929160300000000000000000000000000000000071524323f4b56606a767e848a8f92949ba39d9593908c87817a71655d4e493d2f22150700000000000000000000000000000000000000000002152738556a7f94937e69543626140100000e23384d63788da8937e69543726140000000008141e32455662788a8b797c919e89745846331f0a00000000000000000d22374b5c6f8499a5957f6a5d4b3c2d1f1307000000000000000000000208131c2a36434a606a7f95a0998372604b3c2c190600000000000000071a2d3d576c8197a9947f6a584633231304000000000000000009141d2f3e4c5e6b8095a4947f6a5948341f0d0000000000000000000d22384d62778da98c77624c37220d000000000000000000000000082135495b6c81979e897661768ba78e79634e39240e000000000000000d23384d62788daa96806b56412b160100000000000d1c3043546176879da0937e685c4a39291706000000000000000000000000000000050b0d1d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f21374c61778c9e89735746321e1f1f1f1d0d0b0600000000000d23384d62788daa96806b56412b160100000000000a2035495a6b8095a598836e5d4b37271500000000000000001325365a6f859a99836e59442e19000000000000000e23394e63788ea3907b66513b261100000000000000162b40556b80959e89735746321e0a00000000000000000000000000000006152533424f5d65758089939a9f9c9894929f9f9794979b9c968f857b6f635b4c40322515070000000000000000000000000000000000000000091d3145566f849a8e79634e39240e00000010253a4f657a8fa4907b65503b2610000000000003162838485a697e93847a8fa88b76614c36210c000000000000000417293a4f647a8fa19c8774604b3f2e1e0f0100000000000000000000000000000c1825304250616e8298a1947f695b49352111000000000000000c21364a5b73889d9f8a76614b3a291705000000000000000000000111202f404b6073869c9e8a77624c3b2b180500000000000000000b20354b60758a9f8f79644f3a240f000000000000000000000008182e3f4e63798b9f947f695874899e917b66513c2611000000000000000b20354b60758a9f98836e58432e1900000000000d1d2f404b6072849aa498826e604e3e2d1b0b0000000000000000000000000000000d1920223334343434343434343434343434343434343433475874899e8b76614b3634343434322320190e000000000b20354b60758a9f98836e59432e1900000000000a1a2f404d63788b9f9e8a77624d3f2f19090000000000000000182d42586d82979b86715b382816030000000000000b21364b60768ba7937e68533e29130000000000000013283d53687d92a78b76614b36210c000000000000000000000000000000142433435060697b87959e9e968e87827f7d8b97817f82868b939b9b908479665e4f4332251504000000000000000000000000000000000000000b20364b60758a9e8874604a35200b00000011263b50667b90a48f79644f3a240f0000000000000a1a2b3c4b607385937d93ab8e79644e39240f000000000000000a1f3346586d8298a6927d685645322010000000000000000000000000000000000008131c33434c6176879c9f8a79634d3f2e1c080000000000000e23394e63798ea69a846f5746321b0b00000000000000000000000002121d314455667c90a297826d594834200b0000000000000000081d31445572879d917c67523c271200000000000000000000001325364b5d6e83999d8774605c71869b937e69533e291400000000000000081d31445572889d9b86705b3828160300000009192b3b4c5e6a8095a19c8675614b4231200f0000000000000000000000000000000d1d2b343848494949494949494949494949494949494949493a5c71879c8e78634e49494949494738352b1e0e000000081d31445572889d9b86705b38281603000000021528384c5e6f8399a4947f695948342111000000000000000000152b40556a80959e88735645321e09000000000000091e32455773899e95806b56402b160100000000000010263b50657b90a38e78634e39230e00000000000000000000000000000818324250626a7e8c9da0988a8179726d6a718695806b6d70777e86929d99897c69614f433222120000000000000000000000000000000000000010253a50657a8f98836e5443301c0700000012273c51677c91a38d78634e38230e000000000000000e1c304354647a8f868c9f917b66513c2611000000000000000c21364c61768a9f9d8874604b3828150200000000000000000000000000000000000000151e334657657b90a09a846f5d4b37231000000000000013283d52687d92a7947e69543929160000000000000000000000000000011426374c5e70859a9f8b77624c37220f0000000000000000011426375a70859a947f69543f2a1400000000000000000000071c304354657b8fa1917c6756596e849996816b56412c1601000000000000011527375b70859a9d88735645321e090000021527374859657b8d9f9f8b7963574633241401000000000000000000000000000005192b3c484d5d5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e6f8499907b665e5e5e5e5e5e5d4d483c2b19060000011527375b70859a9e88735645321e09000000091d324556667c90a19c8673604b3b2b180300000000000000000013283d52687d92a68b76604b36210b000000000000031628395c71869b98836d58432e18000000000000000e23384e63788da3907b66503b261100000000000000000000000000001325364f616a80939f9f9382776c635b58586d8398836e59596269737d87999e8d7f69614f402f1c0c000000000000000000000000000000000003162839556a8095937e68533625130000000011263b51667b90a38e78634e39230e00000000000000011426364b5c6f84999fab937e69543e29140000000000000012283d52677d92a996806b5544311a0a0000000000000000000000000000000000000000031729394c5d6e8398a2907b65503e2e1b080000000001162b41566b8096a48f79644f3a240f00000000000000000000000000000009192f4051667b90a7957f6a553d2c1a060000000000000000182d42586d829797816c57422c17020000000000000000031628384a6072859b9b85705f4d566c819698836e59432e190000000000000000182e43586d8398a68b76604b36210b00000e1d3144556278899ea0937e685b4a392917060000000000000000000000000000000b2034485a6272747474747474747474747474747474747474747474748197937e7474747474747472625a4835200b000000182d43586d8298a68b76604b36210b000005192b3c4b6074879ca08f7b655544311d0d0000000000000000000010253b50657a90a38d78634e38230e00000000000000192f44596e84999a85705b372614010000000000000b21364b60768ba7937d68533e281300000000000000000000000000071c304354697e939e9f8c7e6e62594e4a3d546a7f94877256484d5460677583969f947f695e4c3a2a180400000000000000000000000000000000091e32455770859a8d78634d38230e0000000010253a50657a8fa48f79644f3a240f000000000000000008182e3e4f647a8ea1ab96816b56412c1601000000000004182a3b586d8398a78f79644f372715000000000000000000000000000000000000000000000b1b2f3f4d63788c9f9a85705c4b37220b0000000003182e43586d8398a98b76614c36210c000000000000000000000000000000001220364b6075889e9c87725b4936210c0000000000000000152b40556a809599846f59442f1a000000000000000000091e324556677d92a08f7a644f4154697e949b86715b3928160300000000000000162b40556b8095a38d78634e38230e000e1e30414b6074859ba498826d604e3d2d1b0b000000000000000000000000000000000d22384d627887898989898989898989898989898989898989898989898b9f9f8b898989898989898778624d38230d000000162b40556b8095a38d78634e38230e0000092034485a6a7f94a598826d5d4b37271500000000000000000000000e23384d63788dab907b65503b261000000000000002172c41576c81969d88725544311d08000000000000091e32455773889e95806b55402b16000000000000000000000000000b20354a6074869c9e8b7c68604c483b363b51667b908a76604b36434a57617280969f8d7c665847331f0e000000000000000000000000000000000b21364b60768a9d88735b4935210c000000000e24394e63798eab907b66503b26110000000000000000001022364a5c6f8499ae99836e59442e190000000000000b1f34475973889d9e8874604b35200b0000000000000000000000000000000000000000000000112035495a6e8398a28f7a644f3a291704000000051a2f455a6f849a9f8a745846331f0a00000000000000000000000000000000081d3144556c8197a48e79634e39230e000000000000000013283d52687d929c87715c3a2a17040000000000000004182a3b4b6075879d98836e5d4b3c51667c919e88735745321e090000000000000013283e53687d93a5907b66503b26110a1a2c3c4d5f6c8196a39c8675614b42311f0f000000000000000000000000000000000012273d52677c929e9e9d9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9ca4a99f9b9b9b9b9b9b9b927d68533d281300000013283e53687d93a5907b66503b26110009192f3f4d62788a9f9e8a77624c3f2e190900000000000000000000000b20364b60758a9f927d68533d281300000000000000142a3f54697f949f8a75604b35200b000000000000031628395b71869b98826d58432d1800000000000000000000000000071c304354627888897b665e4e42342a22384d62788d8e79644f3930394654606e82989e8877614c3c2b190600000000000000000000000000000010263b50657b9098826d583c2c1906000000000b21364b60768b9f937e68533e2913000000000000000000071b2d3e51667c91a69b86715b3929160300000000000c22374c61778ca699846f5443301c08000000000000000000000000000000000000000000000006192c3c4f647a8fa497826d5846331f0a000000051a30455a6f859a9e89735e3a291704000000000000000000000000000000000215273750657b90a5937e69543e2914000000000000000010253b50657a909e89745847331f0a000000000000000b1f3447596a7f949f8b78634d3f394f64798ea68b76604b36210b0000000000000010263b50657b90a5937d68533e2813162838495b677c919f9f8a7963574632241401000000000000000000000000000000000013283d52687d92a19d8786868686868686868686868686868686868686869c9f8b85868686868686857e68533e281300000010263b50657b90a5937d68533e2813011527374b5d6e8398a4947e695948342111000000000000000000000000091d31455673889d95806a55402b150000000000000012273c52677c91aa8d77624d38220d00000000000000192e44596e83999a85705a3626140100000000000000000000000000132536495a627576655d4c40311f182035485a7489927d68523d282936434b6075869c97816c5a48352008000000000000000000000000000003172939566b8095927d68523d28130000000000091e32455672889d96816b56372715010000000000000000001020354b6074879d9e89735746321e0a000000000010253b50657a90a595806b55362614010000000000000000000000000000000000000000000000000e22364a5c71869c9f8a76614c36210c000000051a30455a6f859a9e89735e3929170300000000000000000000000000000000000c21364c61768ba599836e5939281603000000000000000d23384d62788da88c76614c37210c000000000000061a2c3d4c6177899e96816b5a4935374c61768ca88e78634e39230e000000000000000e23384e63788dab95806b56402b161e3245566379899ea0927e685b4a392916060000000000000000000000000000000000000b20354b607383999b8675717171717171717171717171717171717171778c9e88737171717171717168604e3a26110000000e23384e63788dab95806b56402b16111d314455657b90a09c8673604b3b2b1803000000000000000000000000021527385b70859b97826d583c2b19050000000000000f253a4f647a8fa48f7a654f3a251000000000000001172c41566c81969d87725443301c080000000000000000000000000008182c3c49566061584b3f2f221305192b3c5b708596806b56412b1825324557667c919f8b78624d36261401000000000000000000000000000a1e33465770859b8d77624d38220d000000000003162838596f84999a85705544311d08000000000000000000081d3144556a8095a78b76614b36210c000000000013283d52687d92a7927d68523d281300000000000000000000000000000000000000000000000000071b2d3e54697f94a9917c675236251300000004192e44596e83999f89745746331e0a00000000000000000000000000000000000a1f33465872879d9d87725745321e09000000000000000b20364b60758a9f8e79644e39240f000000000000082136495b6c81979e8976614c3c2c33475874899e907b66503b2611000000000000000b21364b60768a9f98836d58432e2031424b6075869ca498826d604e3d2d1b0b00000000000000000000000000000000000000081c3043546176869c98826d615b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5974899f8b76605b5b5b5b5b5b534e42311e0b0000000b21364b60768a9f98836d58432e26262a3b4b6073869ca08f7b655544311d0d0000000000000000000000000000192e43586e83989a85705a4835200a0000000000000d22374d62778ca9927c67523d27120000000000000014293f54697e949f8a75604b35200b00000000000000000000000000000e1e2c38454b4c473a2e21120400172d42576c8297846f5a3a29171628394c5e70859b96806b5443301c08000000000000000000000000000c21364c61768b9c87725a4834200b000000000000142a3f54697f949f8975604b35200b0000000000000000000114263751667b91a38e78634e39230e0000000000152a3f556a7f94a5907b65503b261000000000000000000000000000000000000000000000000000001023394e63798ea598836d5443301c07000002172d42576c8297a98b76614b36210c00000000000000000000000000000000000417293a596e83999f8b76604b36210b00000000000000081d31445573889d917c66513c2711000000000008182f3f4e63798c9f947e695847331e2a3a5c71869c937e68533e291300000000000000091e32455673889d9b85705b38272d3e4e606d8297a49c8675614b42311f0f00000000000000000000000000000000000000000114263646586379899e947f695d4c3c46464646464646464646463b5c72879c8d78634e46464646463e3a31241302000000091e32455673889d9b85705b383b3b3b364759697e94a498826d5d4b372715000000000000000000000000000001162b41566b80969f8b78624d3828160200000000000b20354a60758a9f947f6a543d2d1a0700000000000012273c51677c91aa8c77624d37220d0000000000000000000000000000000e1a28323637332a1c1103000014293e54697e9388735846331f0a1b2f4053687e939d8874604b35200b0000000000000000000000000011263b51667b9097826c573c2b19050000000000000f243a4f647a8fa78f7a644f3a2511000000000000000000000f24394e64798ea3907b66513b26110000000000162b41566b8096a48e79644f39240f00000000000000000000000000000000000000000000000000000c2136495b72879d9e8974604a35200b000000152a40556a7f95a38d78634e38230e000000000000000000000000000000000000162b40566b8095ab8e79634e39240e00000000000000021527375b70859a937e69543e291400000000011426364b5d6f84999c8774604b3a29172f44596f849995806b56402b1601000000000000021628385b70869b9d88735645313a4a5c687e92a09f8a79635746322413010000000000000000000000000000000000000000000818293a495b657c8c9f8c7b655a493929313131313131313131455a6f849a907b66503b3131313128261e130600000000021628385b70869b9d8873565050505051546277899e9e8977624c3f2e1e160b010000000000000000000000000014293e53697e93aa95806b5645321e0a0000000000071c30435472879d9a85705b4a36210d0000000000000f243a4f64798fa48f7a644f3a250f000000000000000000000000000000000a161e21211f170c0000000010253b50657a908b76614c36210c1222374d62778ca58e79644e39240f00000000000000000000000004172a3a566b8196917c67523c2712000000000000000b20354b6074889e96806b563f2e1c080000000000000000000c21364c61768ba7937e68533e29130000000000172c41576c8196a38e78634e39230e0000000000000000000000000000000000000000000000000000061a2c3d586d8297a78d78634e38230e00000013283d52687d92a5907b66503b261100000000000000000000000000000000000013283e53687d93a6907b66513b26110000000000000000182e43586d839896816c56412c1701000000081c304354657b90a1917c675645311c172c41576c819698836e58432e190000000000000000192e43596e83989f8a75604b3b4858647a8b9fa0927d685b4a3928160600000000000000000000000000000000000000000000000b1b2c3d4c5e697f949e89786357463625131c1c1c1c1c1c2d42576c8297937d68533e281c1c1c13110b02000000000000192e43586e83989f8b7566666666666668728399a1937e6959483b3632281c140800000000000000000000000011263b51667b90a69e8875604b3928160300000000001325365a70859aa28e79634e3c2b190500000000000d22374c62778ca9917c67523c2712000000000000000000000000000000000002090b0c0a0400000000000c22374c61778c8f7a654f3a25100b2034485972879c937e69533e29140000000000000000000000000a1f33475871869b8c77624c37220d00000000000000081d3144556c81979c87725d4b37230e0000000000000000000a1e33465773899e96806b56412b160100000000172c41576c8196a38d78634e38230e00000000000000000000000000000000000000000000000000000014293e54697e93a7927d67523d281200000010253a50657a8fa5937d68533e281300000000000000000000000000000000000011263b50667b90a5937e69533e29140000000000000000162b40556b809599836e59442e19000000031628394b6073869b9a85705f4d382715142a3f54697f949b85705b3828150200000000000001162b41566b8096ab8d78635a5a596276879ca498826d604e3d2d1b0b000000000000000000000000000000000000000000000000000e1f2f404f616d82979c8675615443301c1201060606152a3f556a7f9495806b56402b16060600000000000000000001162b41566b8096ab927d7b7b7b7b7b7b7d8499a1998475676259524b46393026180f01000000000000000000000e24394e63798ea3a7937e695745321e0d0000000000182d43586d8298ac97826d5a4834201000000000000b20354a60758a9f947f69543f2a14000000000000000000000000000000000000000000000000000000000a1f3347587388937d68533e281305192b3b5b70859a96816c57412c170200000000000000000000000c21374c61778b9c86715947341f0b000000000000000114263750657a8fa48f7a65503c2c19060000000000000000031729395c71869b98836e58432e190000000000162b41566b8096a38e79634e39240e00000000000000000000000000000000000000000000000000000010253a50657a8fa596816c56412c170100000d23384d62788daa95806b55402b160000000000000000000000000000000000000e23384e63788da396806b56412b16010000000000000013283e53687d939b86715c392917030000091e324557687d92a08f7a644f41301a0a12273c51677c919d88735645321d090000000000000014293e53697e93a5907b6f6f6f7177849aa59c8675614b42311f0f000000000000000000000000000000000000000000000000000000112132434b6074859b998372604a40301f0f00000012273d52677c9298836d58432e1800000000000000000000000014293e53697e93a89b92909090909090929aa2ac9a84807c776f6761574b43362c1f11030000000000000000000c21364c61768ba7a69d8875604b3b2b190500000001162b40566b8095a99f8a78624d3e2d1a0a00000000071c30435472889d96816b56412c160000000000000000000000000000000000000000000000000000000004182a3a5a6f8496816c57412c1700192e43596e839898836e59432e1904000000000000000000000012273c51677c9196816c573b2a180500000000000000000b20354a6073869c98836e5b49352110000000000000000000192e44596e83999b85705b3828150200000000152b40556a8095a48f79644f3a240f0000000000000000000000000000000000000000000000000000000d22374c62778caa99846e59442f190400000b20354b60758a9f98836d58432e180000000000000000000000000000000000000b21364b60768ba698836e58432e19000000000000000010263b50657b909e89735746331e0a0005182a3b4b6075889d98836e5c4b372312000f243a4f64798f9f8a75604b36200b0000000000000011263b51667b90a69c86858585868b9aa29c8a796357463223130100000000000000000000000000000000000000000000000000000003141d3245566277889d95806a5e4d3d2d1c0c000010253a4f657a8f9b85705b38271502000000000000000000000011263b51667b90a6a29a94949494949494949596989a96918b847d75686054493d2e21120400000000000000000a1e33465774899e9d88947f6959483420130200000014293e53697e939f8a98826d5c4a38281502000000001325365b70869b98826d58432d180000000000000000000000000000000000000000000000000000000000172c41566c819685705a3b2a1805182a3b596e849999846f5a442f1a050000000000000000000005182b3b576c8197917c66513c2711000000000000000000071c304354687e939f8b78634d3f2e1b0a0000000000000001162c41566b81969d88735645321d0900000000142a3f54697f94a5907a65503b25100000000000000000000000000000000000000000000000000000000b20354a60758a9f9b86715c46311c000000081d31445572889d9a85705b372715020000000000000000000000000000000000091e32455673889e9b86705b38281602000000000000000e23384e63788da78b76614b36210c000b1f3448596a7f959f8b78624d3e2e1b04000c22374c61778ca88d78634d38230e000000000000000e24394e63798ea3a49c9a9a9a9b9faa9c867a655b49392816050000000000000000000000000000000000000000000000000000000000021528384859647a8a9f8d7c665b4a3a2a1909000d22384d62778d9d88735645311d0900000000000000000000000e24394e63798ea39a847f7f7f7f7f7f7f7f808183868a90979a92887d73635b4b3f3022120100000000000000031729395c71869c95808a8978624d4130201000000012273d52677c929983878c7a645645321d13040000001a2f455a6f849a99846f5a442f1a000000000000000000000000000000000000000000000000000000000013283d53687d9288735947341f0f1f34475971869b99846e59442f1904000000000000000000000b2034485972879c8b76614c36210c000000000000000000001325364b6075889d98826e5d4b392816030000000000000014293e53697e939f8a75604b36200b0000000012273d52677c92a7927d67523d2812000000000000000000000000000000000000000000000000000000071c30435472889d9e89735e382815020000011527375b70859a9d88735544311d080000000000000000000000000000000000031628385b70869b9d88735645321e09000000000000000b21364b60768a9f8e79634e39240e071a2d3d4c62778a9e96806b5a4935201000000a1f34475974899f907b65503b2610000000000000000c21364c61768ba7a29b8d8d8d8e939d9c867b675f4e413123130600000000000000000000000000000000000000000000000000000000000a1a2a3b4a5c677d929e8a79635847372614010b20354b60758a9f8a75604b36200b00000000000000000000000c21364b61768ba798826d696969696969696a6c6d70767b828a959d928579655d4c40301f0f0000000000000000192f44596e849995808095836e5f4d3e2d1e0f010011263c51667b9199847d928674604b413022130400051a2f445a6f849999846f5a442f1a00000000000000000000000000000000000000000000000000000000000f243a4f647a8f8c77624c37221f2d3d4c62778b9f97826c57422d1702000000000000000000000d22374c62778c9b86715846331f0a00000000000000000000081e324556687d929f8d7a645745321e130800000000000011263b51667b90ab8d78634e38230e0000000010253a4f657a8fa4947f6a543f2a15000000000000000000000000000000000000000000000000000000001325365c71869b9f8a755645321d09000000182e43586d83989f8a75604b36200b000000000000000000000000000000000000192e43586e8398a68b76604b36210b00000000000000091e32455673889d907b66513b26110821364a5b6c82979e8976614c3c2b1902000004182a3a5c71879c927d68533d2813000000000000000a1e33465774899e9b85787878797e879c9c8c7d685f4e413124130600000000000000000000000000000000000000000000000000000000000d1d2d3e4d5f6b80959d8776615544311d13081c30435472879d8d78634d38230e00000000000000000000000a1e33465773899e9a85705a5454545454545557585761656c77808c9d9b897b665e4c3d2c1b0a00000000000002172c41576c819697827587927d675c4a3c2c1f130811263c51667b919a84748596816c5f4d40311f170b051628385a6f859a99846f59442f1a00000000000000000000000000000000000000000000000000000000000c21364b61768b907b65503b25313d4a5b6a7f95aa937d68533e2813000000000000000000000012273d52677c9296806b563a29170400000000000000000000021628384b6073859b9c8675604b433025180d050000020b1827384e63798ea3907b65503b2610000000000d22374d62778ca797826c57372614010000000000000000000000000000000000000000000000000000001b30465b70859bab8b75604b36200b000000162b40556b8095ab8d78624d38230d000000000000000000000000000000000001162b41566b8096a38d78634e38230e00000000000000021628385b70869b937e68533e2913182f404e63798c9f937e695846331e0e000000001a2f445a6f849995806b55402b1600000000000000031729395c71869b9c87726262636877869c9f8d7d68604e42312414060000000000000000000000000000000000000000000000000000000000102030414b607283999a8473604b413120101426365a70859a907a65503b25100000000000000000000000031729395c71869b9d887255443f3f3f3f3f404139464b5059616b7a879c9e8c7c665b4939281603000000000000142a3f54697f9499846f7a8c8a7a645a493d30201d15283d52677d9299836e788a927d675e4e4133291f181e32455671869c99836e59442e1900000000000000000000000000000000000000000000000000000000000a1e3246577287937e69543e35414e5b63798b9f9f8b77624d37220d0000000000000000000005192b3c576d8297907b66503b26110000000000000000000000000a1c304354647a8b9f97826d614a43362a1f181414151d29364556647a8fa4927d68533d2813000000000b2034485973899e9b86705544311d080000000000000000000000000000000000000000000000000000051a30455a6f859aa18c76614c37210c00000013283e53687d93a5907a65503b251000000000000000000000000000000000000013293e53687e93a5907b65503b26100000000000000000192e43586e839896806b56412b1426364c5e6f84999c8774604b3a29170000000002172c42576c819798826d58432d180000000000000000192f44596e84999f8a75604d4e596276869b9f8d7e68604e42312414060000000000000000000000000000000000000000000000000000000002131c3043546175869c96816c5f4e3e2e1d182d42586d8297927d68533d2813000000000000000000000000192e44596e83999f8a75604b352a2a2a2a2b2c2832363b474c5c6476869c9e8a79635745321e0b00000000000012273c52677c919b86716b80958778635b4d413531272e3f556a809597826d687e938c7c68604c463a342a2a364b6075899f96816b56412c16000000000000000000000000000000000000000000000000000000000003162939596e8497826c57434a51606879889da497816c594834200b000000000000000000000b2035485a72879d8a76614b36210c000000000000000000000000011426364a5c697f949f957f6a6054473b342a2a2927313946546074859baa95806b55402b160000000005192b3b5a6f849a9f8a75604b35200b0000000000000000000000000000000000000000000000000000051a2f455a6f849aa18c77614c37220c00000010263b50657b90a5927d68523d281300000000000000000000000000000000000011263b51667b90a6937d68533e28130000000000000001162b41566b809698836e58432e1c304354657b90a1917c665544311c0c0000000000152a3f546a7f949a85705b3727150200000000000001172c41566c8196a98c77624d3b48586176859b9f8d7e68604e4231241406000000000000000000000000000000000000000000000000000000000114263646576378899e927d685c4b3b2b1a2b40556a809595806a55402b15000000000000000000000001172c41566c8196aa8d78624d38231414141517161e212a343e4b586278889d9c8675604b3929160300000000000f243a4f64798f9e8873607283998779675f514b44373f4b5d70859a947f6a606c81978b7d6c61584c473b3a4754667b90a9937d68533e2813000000000000000000000000000000000000000000000000000000000007162b40566b809585705b546066707d899da69c8675614b3b2b1805000000000000000000000d22384d62788d9b85705746321e0a0000000000000000000000000008182d3e4a607283999d95807262594c473b3f3e38454b57617282989ba398826d58432d180000000000162b40556b8095a98f79644f3a240f0000000000000000000000000000000000000000000000000000061b30455b70859aab8b76614b36210c0000000e23384e63788da395806a55402b150000000000000000000000000000000000000e23394e63788ea395806b55402b16000000000000000013293e53687e939b86705b382828394b6073869c9a85705e4d37271500000000000012273c52677c919d88725544311d080000000000000014293f54697e94a48f7a644f3a3a47586176859b9f8d7e68604e42312414060000000000000000000000000000000000000000000000000000000008182939495a657b8c9f8b7a6459483828283d53687d9298826d58432d1800000000000000000000000014293f54697e94a58f7a65503a25100000000003090c181f2e3a4859657b8fa1947f695746321e0a00000000000d22374c62778c9f8a75606175859a897d6f66605558595d657b8fa2907b6550607383989281766962595958596172859b9f8c78624d38220d00000000000000000000000000000000000000000000000000000006101b22283d52677c928974626a737b85929ea49c8879635746321d0d000000000000000000000013283d52687d9295806b55392916030000000000000000000000000000101c304354607483999e9583776a62595654545556606875839888859b9a85705b372715010000000010253a50657a8fa7957f6a553c2c190600000000000000000000000000000000000000000000000000031628385c71869b9f8a75604b35200b0000000b21364b60768ba697826d58422d180000000000000000000000000000000000000c21364b61768ba798826d58432d18000000000000000011263b51667b909d8873564532324657687d929f8d7a644f403019090000000000000f253a4f647a8f9f8a75604b36200b0000000000000012273c51677c91a6927c67523d2a3a47586176859b9f8d7e68604e4232241406000000000000000000000000000000000000000000000000000000000b1b2c3c4c5d697e939d887762564532253b50657a909a85705a37271501000000000000000000000011273c51667c91a6927d68523d28130000000000000004101c2b3b4b5d6f84999e8875614b36210c00000000000b20354a60758a9f8d7762576175849792847b75706d6e717b889e9e8874604b556073829497887e77716e6d6f778298a39a85705a4835200b00000000000000000000000000000000000000000000000000000f1a212d3638454e63798e8d78787f87909ba29f948678635b493929160000000000000000000000061a2c3d586d8298907a65503b2510000000000000000000000000000000001325364556607483949f99897f776f6c69696b6e757d87998c7b81969d88725544311d08000000000b20354b6074889e9b85705a4935200a00000000000000000000000000000000000000000000000000091e32455673889e9e88735443301c08000000091e32455673889e9a85705a372614010000000000000000000000000000000000091e32465773889e9a85705b37271501000000000000000e23394e63788ea68b76604b363b4b6175889d98826d5c4a362212000000000000000d22374c62778ca98d78624d38230d000000000000000f24394f64798ea4947f6a543f2a2a3a47586176859b9f8d7e68604f4232241406000000000000000000000000000000000000000000000000000000000e1e2f3f4f606d81979b8574604b4232384d63788d9d88725544311d0800000000000000000000000f24394f64798ea495806a55402b150000000000000000000d1d2e3f4e64798ea4937e69543929170300000000071c30435472879c8f79644f57617481919a9088858283868f9ea2947f6a55444455606d7f8b9b948b868382858b98a09f8c7a644f3c2b190500000000000000000000000000000000000000000000000008131c2c363e4a4e566067748a9c868b959da59e958a7f74625a493d2c1b0b00000000000000000000000c2135495b73889d8a75604b36200b0000000000000000000000000000000008182738455660727f8c9a9e948b85817f7e808489929c8b7d697e949f8a75604b35200b00000000081d3144556d82979f8c78634d382815020000000000000000000000000000000000000000000000000b21364b60768b9f9b86715b36261401000000031628385b70869b9d87725544311d080000000000000000000000000000000000031628395b71869b9d88725544311d08000000000000000c21364b61768ba78d78634e3848596a80959f8a78624d3e2d1b04000000000000000b20354a6075899f907a65503b2510000000000000000c22374c61778ca897826c57422d1c2a3a47586176859b9f8d7e69604f423224140600000000000000000000000000000000000000000000000000000000112132424b6074849a97826d604f3f364b60758a9f8a75604b35200b00000000000000000000000c21374c61768ca897826d58422d18000000000000000000001121364a5c71869c9b85705746331e0a00000000001325365a6f849a907b66514656606d7c87939b9a98989ca49e958473604b3737444b616a7a8590999b98989a9f9f9a8c7e685c4a361e0e000000000000000000000000000000000000000000000000081825303d494e5c646d757d848d9f9c9f9f99918980776a6056483c2c1f0f0000000000000000000000000e23384e63788d9a856f5645321d0900000000000000000000000000000000000a1a28384554606a7a8490999e9a96949395999a91867a67667c91aa8d78624d38230d000000000114263750657a8fa495806b5645321d0a0000000000000000000000000000000000000000000000000f243a4f64798fab98836e58432e190000000000192e43596e83989f8a75604b35200b000000000000000000000000000000000000192e44596e83999f8a75604b35200b00000000000000091e32465773889e907b65503d4c62778a9e95806b5a483520100000000000000000071c30435472879c927d68523d2813000000000000000a1f33475874899e99846f5a442f1a1c2a3a47586176859b9f937e69604f423224140700000000000000000000000000000000000000000000000000000003141d3145566277879d937e695d4b3c455673889d8d77624d38220d00000000000000000000000a1f33475874899e9a85705a37261401000000000000000000071a2d3e566b81969f8b76614c36210c0000000000172c41576c81888577624c38454b5f67747e858b8f91918f88807360554431273143505c64707b83898e91918f8b847b68604e3e2d1b00000000000000000000000000000000000000000000000008182536434a5b636e798289929a9fa89f938b847c756b62594b45382b1e0f0100000000000000000000000013253653687e93947f6a55382815020000000000000000000000000000000000000a1a2836434a5c64707b83898e9192918f8a847c74645c64798ea48f7a65503a251000000000000923374b5d71869c9d8875604b38281602000000000000000000000000000000000000000000000215283853687d93a8947f69543f2a140000000001162b41566b8096aa8d77624d38220d000000000000000000000000000000000001162c41566b8196aa8d78624d38230d00000000000000031628395b71869b937d68534a5b6d82979e8876614c3c2b19020000000000000000001325365a6f849a957f6a55402a150000000000000004182a3a5c71879c9c87725c3b2a180c1c293a47586176859b9c937e69614f4332251507000000000000000000000000000000000000000000000000000000021527384759647a8a9f8c7b655a49395b70859b8f7a65503a2510000000000000000000000004172a3a5c71879c9d87725544311d080000000000000000000012273d52677c92ab907a65503b2510000000000015293e51636c73716259483432414d56606870777a7c7c79756b6055443726151d333e4a4e5d656e75797b7c7a776f655d4e423120100000000000000000000000000000000000000000000000001325364354606979838e979ea69d989f8a7e776f6760564c483b31271a0e00000000000000000000000000071c3043546e83988f7a644f3a250f00000000000000000000000000000000000000000a1825303e4a4f5e656e75797c7d7c7a766f6760554c61768ca8927d68523d28130000000000081c2e3f53697e93a6937e685645321e0f00000000000000000000000000000000000000000000091d3245566e8398a78f7a654f3a2510000000000014293e53697e93a48f7a654f3a251000000000000000000000000000000000000014293e54697e93a58f7a65503a25100000000000000000192e43596e839895806b554e63798c9f937e695746331e0e00000000000000000000172d42576c829797826d58422d1800000000000000001a2f445a6f84999f89745947341f0b0c1c293a46586176859b9c937f69614f43322515070000000000000000000000000000000000000000000000000000000a1a2a3b4a5c677d919e8978625746586e8398927d67523d28120000000000000000000000001a2f44596f84999f8a75604b35200b000000000000000000000f253a4f647a8fa4927d68533d281300000000000e22344551575e5c4c483b2a1e3038454b5359616567666460554b443727190915202d363f4b505560646667656259504b3f312414020000000000000000000000000000000000000000000000071c30435460727f8b99a1a29a918883988a756159524b4538342a1d150a00000000000000000000000000000b20354a6074889e8975604b35200b00000000000000000000000000000000000000000008131c2d36404c50566064666767646157524b44475874899e957f6a55402a150000000000001120364b6075879d9d8775604b3d2c1a0a0000000000000000000000000000000000000000000b20364b6075899e9e8975604b35200b000000000011263c51667b91a6927d67523d281200000000000000000000000000000000000011263c51667b91a6927d67523d28120000000000000001162c41566b819698826d585e6f849a9c8674604b3929170000000000000000000000152a3f556a7f949a856f5a3626140100000000000002172c42576c8197a98c77624c37220d000c1c293a46586175849b9d937f69614f43322515070000000000000000000000000000000000000000000000000000000d1d2d3e4d5f6b80959c86756154566b8095957f6a55402a15000000000000000000000002172c42576c8197aa8d78624d38220d000000000000000000000e23394e63788ea3947f6a543f2a150000000000051626343e41494637342a1d121a2832363a474c4f51514f4b44373127190900010f1a212f3737444b4f5152504d483b372e2114060000000000000000000000000000000000000000000000081b2e3f4a607281949fa39b8f847c75788d8e79634e3b3632281f180d020000000000000000000000000000000e24394e63798e99846f5544311d080000000000000000000000000000000000000000000000101b222f3838454b4e5152514f4b463935313a5c71869c97826d58422d18000000000000091d324556687e93a395806a5b49382818080000000000000000000000000000000000000008182e3e51677c91a798836e5544311d0800000000000e24394e63798ea3947f6a553f2a150000000000000000000000000000000000000e24394e63798ea3957f6a55402a15000000000000000014293e54697e939a857055667b90a2917c665544311b0b000000000000000000000012273d52677c929d87725443301c0800000000000000152a3f546a7f94a48f79644f3a240f00000c1b293a46576175849a9d947f69614f4333251507000000000000000000000000000000000000000000000000000000102030414a607283999883726053687e9397826d57422d18000000000000000000000000152a3f546a7f94a58f7a65503a2510000000000000000000000e24394e63798ea3957f6a55402a15000000000000081622292c3431221f180d000a151d202a34373a3c3c3a3631271d15090000000007111c23273135393c3c3a37342b231c11030000000000000000000000000000000000000000000000000e22374b5d6b80969f9f96867b6f66607489917c67523c271e160a05000000000000000000000000000000000114263654697e93947f69543727150100000000000000000000000000000000000000000000000007111c23273136393c3d3c3a363228202f44596e84999a856f5a362614010000000000021528384b6073859b9f8b79635645362514080000000000000000000000000000000000011426364b5c6f849aa5907b66503727150100000000000c21364c61768ba797826d57422d180000000000000000000000000000000000000c21364c61768ba797826d57422d18000000000000000011263c51667b919d88726073869c9a84705e4c37271500000000000000000000000010253a4f657a8f9f8a75604b35200b0000000000000012273d52677c92a7917c67523c27120000000b1b293946576175849a9d947f6a61504333251507000000000000000000000000000000000000000000000000000002121c3043546175869c957f6a5e667b909a856f5a36261401000000000000000000000012273c52677c91a7927d68523d28130000000000000000000010263b50657b90a5937e69543e291400000000000000050e15171e1c0d0b0500000002090c181f2225272724201d150901000000000000000809151d20242627252220180d080000000000000000000000000000000000000000000000000006192b3c4f657b8c9f9e958174655d5154708695806b55402b1603000000000000000000000000000000000000081c3043546e84998e79644f39240f000000000000000000000000000000000000000000000000000000090a151d202427282724211e16172c41576c81969c87725443301c080000000000000a1d314455647a8c9f9c86756054433026180b00000000000000000000000000000002101c304354647a8fa29d8773604b35200b0000000000000a1e33465774899e9a846f5a3625130000000000000000000000000000000000000a1e33465774899e9a856f5a36251300000000000000000f24394e64798e9f8a75687e939f8d7a644f402f19090000000000000000000000000d22374d62778ca98d77624d38220d000000000000000f253a4f647a8fa4947f69543f2a14000000000b1b293946576175849a9d947f6a6150433325150700000000000000000000000000000000000000000000000000000013253646576278899e8d7c6663788e9c87725443301c0800000000000000000000000f253a4f647a8fa4957f6a55402a1500000000000000000005192b3c53687e93a7917c67523c271200000000000000000000020907000000000000000000040a0c1012110f0b0802000000000000000000000001080b0f1112100d0b050000000000000000000000000000000000000000000000000000000b2035485a70859ba295806c60564b3f576d8297846e59392816030000000000000000000000000000000000000b20354b6074899e8974604b35200b000000000000000000000000000000000000000000000000000000000002090b0f1112120f0c090314293f54697e949f8a75604b35200b000000000000011527374a5c6a8095a1988272604b4336291b11060000000000000000000000000412202f3f4b6073859ba5937e685443301c08000000000000031729395c71869b9c87725443301c070000000000000000000000000000000000031729395c71869b9c87725443301c07000000000000000c21364c61768ba78d7875889d98826d5c4a362212000000000000000000000000000b20354b60758a9f8f7a654f3a2510000000000000000d22374d62778ca997816c57422c1702000000000b1b293946576175849a9d947f6a61504333251507000000000000000000000000000000000000000000000000000008182939495a657b8c9e8a7963768b9f8a75604b35200b00000000000000000000000d22374c62778ca997826d58422d1800010101020003090e192035485a6e8499a68e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da29a8472604b45383e54697e9387725746321e090000000000000000000000000000000000000f24394f64798e99836e5443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a98c77624d37220d0000000000000009192d3e4b60728399a096806c605446392e211a0f090300000000000000060c181f303e4b5d6a7f94a39c8774604b3626140100000000000000192f44596e84999f8a75604a35200b000000000000000000000000000000000000192f44596e84999f8a75604a35200b000000000000000a1f33465874899e8f7b80959f8a78624d3e2d1b0400000000000000000000000000081c30435472879d927d67523d2812000000000000000b20354a60758a9f99846f59442f1a0000000000000b1b293946576175849a9d947f6a6150433325160800000000000000000000000000000000000000000000000000000b1b2b3c4b5d697e939c877673889e8c77624d37220d00000000000000000000000b20354a60758a9f9a856f5a372614171717171718161e212b35444d62788a9f9d8874604a35200b000000000000000000000912191b202013110b020000000000000000000000000007111719202017150f050000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a58f7a64544331273b50657b908b76614b36210c00000000000000000000000000000000000215273754697f94937e695336261401000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea48f7a654f3a25100000000000000000101c3043546176869c9e96807261574b3f352c211e1612100e0e0e101219202a34414d5c657b8c9f9f907b6556453118080000000000000001172c41566c8196a98c77624c37220d000000000000000000000000000000000001172c41566c8196a98c77624d37220d000000000000000417293a5c71869b947f8a9f95806b5a483420100000000000000000000000000000011426365a6f859a947f6a553f2a1500000000000000071c30435472879c9c87715c3a2a18040000000000000b1b293946576175849a9d947f6a6250443326160800000000000000000000000000000000000000000000000000000e1e2e3f4f606c81979a8374869b8f7a644f3a250f0000000000000000000000071c30435472879c9d87725544312c2c2c2c2c2c2e2832363c484d626e8399a897826c5443301c070000000000000000000c1a262d30353528261f140600000000000000000000000a19242c2f35352c2a221709000000000000000000000000000000000000000000000000000000000000000000000000162b40556b80959d87725c4b362522374c62778c8f79644f3a240f0000000000000000000000000000000000081d3144556f84998e79634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8927c67523d271200000000000000000114263647586277869b9e968376655d4e493d363228282524232425282c353a474c5f677a8a9ea296816c5d4b38271500000000000000000014293f54697e94a48f7a644f3a250f00000000000000000000000000000000000014293f54697e94a48f7a644f3a250f0000000000000000192f44596e84999e899e9e8876614b3c2b1902000000000000000000000000000000182d42576d829797826d57422d1800000000000000001325365a6f859a9e89745847331f0a000000000000000b1b293946576075849a9d95806a625044332616080000000000000000000000000000000000000000000000000000112132424b6073849a96808297927c67523d27120000000000000000000000001325365a6f849a9f8a75604b414141414141424338454b505a626e8096a19f8a78624d362513000000000000000000001a2a3842454a4a3e3a312414000000000000000000000019293640444a4a423e342717000000000000000000000000000000000000000000000000000000000000000000000002182d42576d829799846f5a3e2e181f3448597388927d68523d281300000000000000000000000000000000000b20364b6075899d88735b4a36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899e947f6a543f2a150000000000000000000818293a485962778599a199877b6e635b514b45383d3a3938393a3d3c494d59616d7d8b9ea39a8473604b3f2f1a0a00000000000000000012273c51677c91a6917c67523c271200000000000000000000000000000000000011273c51667c91a6917c67523c27120000000000000001172c41566c8196a89ea4937e685746331d0d00000000000000000000000000000000152a40556a7f959a846f5a3625130000000000000000182d42586d8297a88c77614c37220c00000000000000000b1b283945576074849a9e95806b625044332616080000000000000000000000000000000000000000000000000003141d3144556177879d96859b947f6a543f2a15000000000000000000000000182d42576d8297aa8d7762565656565656565758595660656d7883969e9f947f6a5a4834180800000000000000000008183848555b605f534e423119090000000000000000000919364754596060575245341c0c0000000000000000000000000000000000000000000000000000000000000000000002182d42576d829798826d58432d18182a3b5a708596816b56412c16000000000000000000000000000000000010253a4f657a8f98836e583d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c71869c97826c57422d17020000000000000000000c1c2a3b4859627583939e9d9083796f66605655524f4e4d4e4f52565a636b7782919fa1998575615544312111000000000000000000000f24394f64798ea4947f6a543f2a150000000000000000000000000000000000000f24394f64798ea4947f6a543f2a15000000000000000014293f54697e94a9b19c8673604b392917000000000000000000000000000000000012283d52677d929c87725443301c0700000000000000152a40556a7f95a48e79644f39240f0000000000000000000b1b283945566074849a9e95806b6251443426160000000000000000000000000000000000000000000000000000021527374759647a8a9e9ba397826c57422d17020000000000000000000000152a40556a7f95a58f7b6c6c6c6c6c6c6c6c6c6d6e72767b828a99a19f94816c614f3c2b1900000000000000000000132536556670757568604e37271502000000000000000114263754656e75756c63523a29170400000000000000000000000000000000000000000000000000000000000000000001162b40566b809599846e593a2917172c41576c8196846f5a3a29170400000000000000000000000000000002162838556a7f95937d68533e2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f849999846f5a442f1a00000000000000000000000d1d2b3b485761727e8a99a1998c847c756f6b676563636365676b7178808a98a09f95837661574637271503000000000000000000000c22374c61778ca897816c57422c170200000000000000000000000000000000000c21374c61768ca897816c57422c17020000000000000011273c51667c91a6a2907c665544311b0b000000000000000000000000000000000010253a50657a8f9f8a75604a35200b0000000000000013283d52687d92a6917c67513c2712000000000000000000000a1b28384556607483999e95806b625144341c0c000000000000000000000000000000000000000000000000000009192a3a4a5c677c8d9faf99846f5a442f1a00000000000000000000000012283d52677d92a799838181818181818181818384878a90989f9f998b7f6c635143321d0d000000000000000000071c30435470848a8b7e685544311d0800000000000000081d3144556e838a8a816c5846331f080000000000000000000000000000000000000000000000000000000000000000000013283d53687d929b86715847331f13283e53687d9388735847331f0a0000050b0d0f0d0700000000000000091e3245566f859a8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c81969c87725c3b2a180400000000000000000000000d1d2b394654606978838f999f99918a84807d7a7978797a7d81868d959ea1998b7f726158463929190900000000000000000000000a1f34475974899e99846f59442f1a0000000000000000000000000000000000000a1f33475874899e99846f5a442f1a00000000000000000f24394f64798eaa9a846f5e4c3726140000000000000000000000000000000000000d22384d62788da98c77624c37220d0000000000000010253a50657a8fa5947e69543f291400000000000000000000000a1a28384556607483999e95806b62513a2a180400000000000000000000000000000000000000000000000000000c1c2d3d4d5f6a8095a19c87725c37271502000000000000000000000010253a50657a8fa5a19996969696969696969798999c9f9d99938b83796a615145342515000000000000000000000b20354a6074899e9d8874604b362010000000000000000b20354b60758a9f9e8a76614c362614010000000000000000000000000000000000000000000000000000000000000000000e23384e63788d9f8a76614c362614253a4f657a8f8c76614c37210c000e19202224221b100200000000000b21364b60758a9d87725a4935200c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e949f89745947341f0b0000000000000000000000000d1b2836434a5a626e7a848c959c9f9a95928f8e8d8e8f92969ba39e978f84796a6054463a291b0b00000000000000000000000004182a3a5c71879c9c87715c37261401000000000000000000000000000000000004172a3a5c71869c9c87715c37261401000000000000000c21374c61778c928c7a644e402f19090000000000000000000000000000000000000b20354b60748c928f7a644f3a250f000000000000000d23384d62788d9393816c57412c170200000000000000000000000a1a283845566074838e9192806b5847331f0a0000000000000000000000000000000000000000000000000000000f1f30404a60728292928a745544311d0800000000000000000000000d22384d62788d929292929292929292929292918f8e8c88847e776e635b504334261607000000000000000000000e23384d63788da89f927d67523f2e1b080000000000000e23394e63798ea99f947e695443301c080000000000000000000000000000000000000000000000000000000000000000000c2135495b72879c927d675443301c21364c61768b8f7a654f3a2510121e2b353839362d2012040000000010253b50657a9097826d583c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a98c77614c37220c000000000000000000000000000b1825303c494d5c646f7880878d9296999c9d9e9e9d9b98959089827a6f635b4b4336291b0b00000000000000000000000000001a2f445a6f8492928a745544311d080000000000000000000000000000000000001a2f44596f8392928a745544311d08000000000000000a1f334758677d7c7a645c4a36221200000000000000000000000000000000000000081d314455677c7d7d78624d37220d000000000000000b20354b60737e7e7e7c66503b2611000000000000000000000000000a1a28384556606e797c7d7d77614c37220c00000000000000000000000000000000000000000000000000000001121c30435461757d7d7e74604b36200b00000000000000000000000b20354b60737d7d7d7d7d7d7d7d7d7d7d7d7c7b7a7976726f6961594e493d33251608000000000000000000000011273c51667c919f8a9b86715d4b37220e00000000000012273d52677c929f8a9d8773604b35200f000000000000000000000000000000000000000000000000000000000000000000061a2c3d54697f949c8673604b3e2e1f3346587388937e68533e29151d2f3c484d4f4a3e2f221200000003162939556b8095927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798e9c8f79644f3a240f000000000000000000000000000008131c2b353e4b4f5a626b72777d808486888989888683807a756d645c4e4a3d3026180b0000000000000000000000000000000f253a4f647b7d7d7d73604b35200b0000000000000000000000000000000000000f253a4f647a7d7d7d73604b35200b0000000000000004172a3a4d5f6767645c4a3d2d1a0400000000000000000000000000000000000000011426374d5f67676762594834200b00000000000000081d31445560696969665e4c38230f00000000000000000000000000000a1a2838454b5c64676767615847331f0a0000000000000000000000000000000000000000000000000000000000132536465761686868605544311d080000000000000000000000081d3144556067676767676767676767676767666564615859544c473b352c1f1507000000000000000000000000152b40556a80959883988f7a654f3c2b19050000000001162c41566b8196988398917c66513d2c1a060000000000000000000000000000000000000000000000000000000000000000000f21364b6075879d927e685c4a3e30293a5a6f8497816c57422c2731404c5a62645c4c402f1d0900000a1e32465770859b8c77624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768687867b65503b2610000000000000000000000000000000000e19202e373c494d555a62676b6f7172737372716e6a6560564f4a3e362d1c1408000000000000000000000000000000000d22374b5d64676767605544311d080000000000000000000000000000000000000d22374b5c64676767605544311d0800000000000000000c1c30414d52524f4a3e2d1f0f000000000000000000000000000000000000000000091930414d5152524d483b2b19050000000000000001152737444b535353504c402f1c090000000000000000000000000000000a1a28323e4a4f5252524c473a2a1804000000000000000000000000000000000000000000000000000000000008182839464b5353534b4437271502000000000000000000000001142637444b5252525252525252525252525251504e4c473a3e37342a211a0e000000000000000000000000000417293a596e84998f7a8a98836e5a4835200b0000000005192b3b5a6f849a8f7a8b9a846f5b4936210c000000000000000000000000000000000000000000000000000000000000000000091e324556687d929f8a7a645c4b433641566b809685705b3b3037444b5e667879665e4c38240f00000c21364b61768a9c8772594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475861717171655d4c38230e000000000000000000000000000000000006101b222b35383c484d5256595c5d5e5e5d5c5955504b4538362e211a0f010000000000000000000000000000000000081b2e3f4b4f5252524b4437261401000000000000000000000000000000000000081b2e3e4b4f5252524b4437261401000000000000000000132330393d3d39362d20100100000000000000000000000000000000000000000000122330393c3d3d37342b1d0d00000000000000000009192731353e3e3e3b382f221100000000000000000000000000000000000a161e2d36393c3d3d37332a1c0c000000000000000000000000000000000000000000000000000000000000000b1b2832363d3d3d36312719090000000000000000000000000009192631353d3d3d3d3d3d3d3d3d3d3d3d3d3c3a3937332a29221f180c0600000000000000000000000000000a1f33465872879d8c7782988b78624d392816030000000b2034485973889e8a73849a8e79634e3a2917040000000000000000000000000000000000000000000000000000000000000000031628384a607282989d887a6860544b4452677d9289735948434b55606a7c898c7c66513b2611000011263b50667b9092806b553b2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a474c5c5c5c504c3f2f1c0800000000000000000000000000000000000000070e1920232b34383d414447484949484643403b363228221b1007000000000000000000000000000000000000000010202e373a3d3d3d3531261909000000000000000000000000000000000000000010202e373a3d3d3d35312619090000000000000000000005131e25272724221b1002000000000000000000000000000000000000000000000004121d242728282220190d000000000000000000000009151d2029292926231c110300000000000000000000000000000000000002101b2224272828221f180c0000000000000000000000000000000000000000000000000000000000000000000b161e21282828201d150900000000000000000000000000000009141d2028282828282828282828282827262524211f17140c0b04000000000000000000000000000000000c21364c61768b9e89737a8f96806b5746321e080000000d22374d62778c9b86717c9197816c5846331f080000000000000000000000000000000000000000000000000000000000000000000a1c3043546074859a9d8b7e736660555264798e8c77625154606674808d9e9b86715c46311c07000f253a4f647a7f7d73604b36200d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2933374747473b382f211100000000000000000000000000000000000000000000060b0d192022282b2f3133343433312e2b25211e160a070000000000000000000000000000000000000000000002101b2225282828201d140900000000000000000000000000000000000000000002101b2225282828201d1409000000000000000000000000010a1012120f0d070000000000000000000000000000000000000000000000000000000a101212120d0b050000000000000000000000000001080b141414110f0900000000000000000000000000000000000000000000070d0f1212120c0a04000000000000000000000000000000000000000000000000000000000000000000000003090c1313130b0802000000000000000000000000000000000001080b1212121212121212121212121211100f0c0a04000000000000000000000000000000000000000010253a50657a8f9b867071869b8975614b36251300000011263b51667b9097826d74889d8a76614c362614010000000000000000000000000000000000000000000000000000000000000000001325364556617784979f93867c746d6765768a907b65666c747c86959f9c8879634e38230e00000d22374b5c646a67605544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f2132323226231c110300000000000000000000000000000000000000000000000000050b0d12161a1c1d1e1e1d1c1915100b09020000000000000000000000000000000000000000000000000000080d0f1212120b0801000000000000000000000000000000000000000000000000080d0f1212120b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e9397826d677d92937e695443301c070000152a3f556a7f94937e696a8095947f695443301c08000000000000000000000000000000000000000000000000000000000000000000081828384759617481909b9c9188827d7a7787947f787b8187919c9f968678635b4935210c0000081b2e3e4b4f54524b4437271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1c1c1c100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b11132020202020202020202020202020202020202020202020202020202020202020202020200a0400000000000000000000000000000000000000000000000913191c20201d1b140b0000000000000000000000000000000000000000000000000000000000010a1012202020110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000001152737586d8297947e696074889c8773604a35200f0003172939596e83998f7a6562778b9d8773604b35200f000000000000000000000000000000000000000000000000000000000000000000000a1a2a3b4755606c7b85919a9e98928f8c9c9d948d90969d9e978b8174625a493d2c1a0600000010202e373a3f3d36312719090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b10131617171615120d0b06000000000000000000000000000000000000000000010a101220202012100a0100000000000000000000000000000000000000000000000812181b20201f1d170e020000000000000000000006141f26293535353535353535353535353535353535353535353535353535353535353535353535351f170c0000000000000000000000000000000000000000000d1b262e313535322f281c0e00000000000000000000000000000000000000000000000000000005131e252735353526241d1204000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445571869b907b66566a8095907b66513d2d1a070a1e33465772879d8b7661596e8399917c66513d2d1a07000000000000000000000000000000000000000000000000000000000000000000000c1d2a37444b5d65707c848b9296999c9ea6a49c9995908982796b6056483c2c1f0f0000000002101b22252a28201d15090000000000000000000000000000000000000000040a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a03000000000000000000070b15151515151515151515151515151514120c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090a161e2125282b2c2c2c2a272320190e0c06000000000000000000000000000000000005131e252735353527251d13050000000000000000000000000000000000000000000c1a252d30353534322b2012020000000000000000021424313a3e4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a33291c0c00000000000000000000000000000000000000091b2b3842464a4a47443a2c1c000000000000000000000000000000000000000000000000000001132330393c4a4a4a3c383022120000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9f8c77624d62778b9a846f5b4a36210c0c21364c61768b9d87725850657b909a846f5b4a36210c00000000000000000000000000000000000000000000000000000000000000000000000c1927313f4c505e666f777c818486889e9c8684807b756d635b4b45382b1e0f01000000000000080d0f15120b080200000000000000000000000000000000000000000b171f2121212121212121212121212121212121212121212121212121211e170b00000000000008131c202a2b2b2b2b2b2b2b2b2b2b2b2b2b2b292720140700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006121d242832363a3e404142413f3c38352b23211a0e06000000000000000000000000000001132330393c4a4a4a3c393023130100000000000000000000000000000000000000081a2a3741454a4a49463d30200000000000000000000b1f31424e5360606060606060606060606060606060606060606060606060606060606060606060605e473a29170400000000000000000000000000000000000013263849565b60605d574a3a1808000000000000000000000000000000000000000000000000000a1e30414d52606060514c40301d0900000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798e9e89745948596d82988e79634e3a2a1710253a4f657a8f99846e594b5d71869c8e79634e3a291704000000000000000000000000000000000000000000000000000000000000000000000009151d2f38404d515962676c6f71798e8d796e6b6660564e493d32281a0e00000000000000000000000000000000000000000000000000000000000000000000000b1b293336363636363636363636363636363636363636363636363636363633291b0b0000000008182530354040404040404040404040404040403f3b32251400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212f3839454b50535556575654514d483c38352c20190e010000000000000000000000000a1e30414d52606060524d41301d0a0000000000000000000000000000000000000012253748555a60605f5a4e3d1c0c000000000000000011263a4e60687575757575757575757575757575757575757575757575757575757575757575757575705847331f0a000000000000000000000000000000000005192e425667717575726857362513000000000000000000000000000000000000000000000000001025394d5f67757575665e4c38240f000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c929a85705b3b4f647a8f97826c5847331f14293e53697e9395806a553f54697e9397816c5847331f0800000000000000000000000000000000000000000000000000000000000000000000000002111c2330393b484c52565a60758a917c6655514b4538352c1e160a00000000000000000000000000000000000000000000000000000000000000000000000417293a464c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4639291703000000132536434a555555555555555555555555555555544f43321808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121f2c35404c51576065686b6c6c6b6a67625a564e493d352c1c140800000000000000000000001025394d5f67757575675f4d39251000000000000000000000000000000000000004182d415566707575746c5a3a2a17040000000000000013293e53687e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a76614c37210c0000000000000000000000000000000000061c31465b71858a8a87725443301c0700000000000000000000000000000000000000000000000012273c52677d8a8a8a7c66513c26110000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b809697826c57424a5c70859b8a77614c3727152737586d8297917c66513c4c61768a9e8a76614c362614010000000000000000000000000000000000000000000000000000000000000000000000000008121d242a34373d4145567187957f6a5540363228211a0f020000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586161616161616161616161616161616161616161616161616161615746331e0a0000071c304354606a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69614f362614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000312222f3d494e5e666f767a7d808181817f7c78726b635b4d493c3026180c0000000000000000000012273c52677d8a8a8a7d67523c2712000000000000000000000000000000000000051b30455a70848a8a8a745847331f0a000000000000000e24394e63798e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8e79644f39240f000000000000000000000000000000000004192e44596e83999f8a75604a35200b0000000000000000000000000000000000000000000000000f253a4f647a8f9f937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000005182b3b5a6f849a937e69543e3e52677c91947f6a5544311d31445571869b8d78624d3846586c8297947f695443301c08000000000000000000000000000000000000000000000000000000000000000000000000000000090d181f22272738586e8398836e5938271e160a0600000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61767676767676767676767676767676767676767676767676767676614b39281603000b20354a60727f80808080808080808080808080807f695443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f404c5b63707b848a8f939596979694918d8780786d635a4b43362a1c0c0000000000000000000f253a4f647a8f9f947f69543f2a1400000000000000000000000000000000000003182d43586d8298a88c76614c37210c000000000000000c21364a5b6d8297a4ab9f918b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7c67513c2712000000000000000000000000000000000001162c41566b8196a98c77624d37220d0000000000000000000000000000000000000000000000000d22374d62778ca996816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000b2034485973889e907a65503b354b6074889d8874604b3620354b60758a9e8974604a353a4e63798e9d8773604b35200f0000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d152a40556a7f9587715645311d09000000000000000000000000000000000000000000000000000000000000000000000000000000001e33485e73888b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b88735745321e0900071c304354738895959595959595959595959595958b74604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2f3f4c5e66798590999f9e999593919294979c9d968b82786a6054473a2a1d0c00000000000000000d22374d62778ca997816c57422c1702000000000000000000000000000000000000152b40556a8095a48e79644f39240f00000000000000071a2d3d4b6075869c9f8a7c747676767676767676767676767676767676767676767676767676767573604b35200b00000000000000000000000000000000000014293e54697e93a48f7a644f3a250f0000000000000000000000000000000000000000000000000b20354a60758a9f99836e59442e19000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca68c77624c373144556a7f94927d67523e2e394e63798e9a8570544330364a5b70859a917c66513d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c918a75604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465b7185919191919191919191919191919191919191919191919191918b75604b36210b00001325365b708592929292929292929292929292928c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c5d667c8a9aa29d9389847f7e7c7d7e82878e979f988b80726158473b2a1b0a000000000000000b20354a60758a9f99846f59442f1a0000000000000000000000000000000000000013283d53687d92a6917c66513c271100000000000000000f1e3245566379899e9e897862606060606060606060606060606060606060606060606060606060605544311d0800000000000000000000000000000000000011263c51667b91a6927c67523d2712000000000000000000000000000000000000000000000000071c30435472879c9b86715b3929160300000000000000000000000000000000000000000000000000000000000000000000000011263b50667b909e887359473427374c61778a9b85705c4b373d52677d9296816c5736252d3d52677d929a846f5b4a36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c6176898e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657b7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7d75614b36210c000010253b50657b7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334658657b8c9ea199887e756f6a686767696c7179818c9b9f95847661594739281603000000000000071c30435472879c9c87715c3a2a170400000000000000000000000000000000000010263b50657b90a5947e69543f2914000000000000000003162838495b677c919e9b8574604b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b44372614010000000000000000000000000000000000000f24394e64798ea3947f6a543f2a15000000000000000000000000000000000000000000000000001325365a6f859a9e89735746321e0a000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f949a85705a3b2a1f3347586d82978f7a644f3c41566b8196927d68533d2820364b6075889e8e79634e3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465861777975614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d656767676767676767676767676767676767676767676767676767615746321e0900000e23374b5d65686868686868686868686868686868615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4c6176889da19983776960575553525254575b636c7985979f9a8777615745321e12000000000000001325365a6f849a9e89745847331f0a0000000000000000000000000000000000000e23384d63788dab96816c56412c170100000000000000000a1a2c3c4d5f6b8096a297816c5f4d3d36363636363636363636363636363636363636363636363531261909000000000000000000000000000000000000000c21364c61768ba797826c57422d1702000000000000000000000000000000000000000000000000182d42576d8297a78b76614b36210c000000000000000000000000000000000000000000000000000000000000000000000003162838586e839897816c57422c182a3a4e64798e98836e5a483c5a70859a8f79644f3a241d3145566b809597826c5847331f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a47586164615746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b5052525252525252525252525252525252525252525252525252524b46392816030000081c2f3f4b505353535353535353535353535353534c473a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596d8297a599837361584b45393e3c3d3f3d494e5c647381959e9b8575604b40301a0a000000000000182d42576d8297a88c76614c37210c0000000000000000000000000000000000000b20364b60758a9f99846e59442f19000000000000000000000e1e30404b6073849a9f927d675b493929212121212121212121212121212121212121212121201d140900000000000000000000000000000000000000000a1f33465874899e99846f5a442f1a00000000000000000000000000000000000000000000000000152a40556a7f95a38e78634e39230e0000000000000000000000000000000000000000000000000000000000000000000000091e32455671879c937e68533e291321364a5c70859a8b78624d485a73899e8a76604b36211527384d62788b9f8a76614c372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2a3a474c4f4c4639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e373a3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3632281b0b0000000011212f373b3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3733291c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778b9f9d87766155473a3228292728292c353e4a54606c8095a099836e5e4d382815020000000000152a3f556a7f94a48e79644f39240f000000000000000000000000000000000000091d31455673889d9b86715c3929170300000000000000000000121d3144556277889e9e8a79635746321e140b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b08010000000000000000000000000000000000000000000417293a5c71869b9c87725c3b2a180400000000000000000000000000000000000000000000000013283d52687d92a6907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9f8f7a65503a25101a2d3d51677c9196806b574d62788d9c87715645321e0a2035485a6e8399947f695544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a3337393633291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23252727272727272727272727272727272727272727272727272727211e160b000000000003111c2325282828282828282828282828282828211f170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a556a7f94a5917c675746372a1e16131212141a212d36434b616d8298a1917c665645321d08000000000012283d52677d92a6917c66513c2711000000000000000000000000000000000000021527385b70859b9e89745746331e0a00000000000000000000011527374859657b8d9f9c8675614b4231201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192f44596e84999f89745947341f0b00000000000000000000000000000000000000000000000010253a50657a8fa5937e68533e291300000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa68c77614c37210c0f20354b6074879d89756051667c9198836d5838281605192b3c50667b909d8774604b35200f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f2224211e170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1012121212121212121212121212121212121212121212121212120c09030000000000000000080e101313131313131313131313131313130c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475971869c9d8773604b3929190c0300000000060f182630434b6175869c9d8774604b362513000000000010253a4f657a8fa4947e69543f291400000000000000000000000000000000000000192e43586e8398a78b76614c36210c000000000000000000000009192b3b4b5d6a7f94a198826d604e3e2e1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196a98c77614c37220c0000000000000000000000000000000000000000000000000d23384d62788daa96806b56412b16010000000000000000000000000000000000000000000000000000000000000000000013283d53687d929d88735847331f0a081d314455697f94937e68546a7f95947f6a543f2a15000e20354a6073879c917c66513d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0f0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778b9f95806b5443301b0b000000000000000008141e334657667c91a4947f695443301c07000000000d22384d62778daa96816c56412c1701000000000000000000000000000000000001162b40566b8095a38e79634e39240e0000000000000000000000000d1d2f3f4a60728399a0937e695c4a3a2a1808000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a48f79644f3a240f0000000000000000000000000000000000000000000000000b20354b60758a9f98836e58432e190000000000000000000000000000000000000000000000000000000000000000000000132536576c81969a846f5a3a2a1704011426374c61768a9c8673606e8399907b66503b261100071c304354697e949a84705b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000308090b040200000000040b0c11141514120e0c0600000000000000000000000000000000000000000000000000000000000000000000000000050b0d1114161717161513100d0b0500000000000000000000000000000000000000000011273c51667c91a98f7a654f36261400000000000000000000031729394a6073869c9c8773604a35200b000000000b20354b60758a9f99846e59442f190000000000000000000000000000000000000013293e53687e93a6917b66513c261100000000000000000000000000111c3043546176879d9f8b7a645847362513000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6917c67513c2712000000000000000000000000000000000000000000000000081d31445572889d9b86705b38281602000000000000000000000000000000000000000000000000000000000000000000071c30435470859a96816c56412c170000091f3347586c8297907b6672879d8c77624c37220d00001325364c61768a9f8e79634e3a2a170400000000000000000000000000000000000001080b0b0b0b0801000000000000030c12141a1a1a1a1a1a1a1a1a1a0f0d0700000000000000000000000000000002090b0d0c0a0300000000000000000000000000000000000000000000000000000000000000000000010d171d1f2019171101080c181f2226292a29272321190e0a0300000000000000000000000000000000000000000000000000000000000000070d0f19202226292b2c2c2b2a2825221f18110b08010000000000000000000000000000000000162b40556b80959f8a75604b36200b00000000000000000000000b1c304354687e93a58e79644f39240f00000000081d31445572879d9b86715c3929170300000000000000000000000000000000000011263b51667b90a6937e69533e291400000000000000000000000000001325364758647a8b9f9d8776615443301c11000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4947f69543f2a14000000000000000000000000000000000000000000000000011527375b70859a9d88735645321e090000000000000000000000000000000000000000000000000000000000000000000b20354a6074899e937d68533e281300000417293a4e63798e99846f768b9d88735948341f0b0000081f3347586d829797826c5847331f09000000000000000000000000000000000009141d202121201c140800000000071520272a3030303030303030303024211a0f010000000000000000000000000a161e2122211e160b000000000000000000000000000000000000000000000000000000000000000001111f2a3134352e2c24141d202a34373b3e3f3f3c38352c211e170b01000000000000000000000000000000000000000000000000000000080f1a21242b34373b3e40414140403d3a37342a26201d140903000000000000000000000000000000182e43586d829095846f5544311d080000000000000000000000001325364d62778da4947f69543f2a1400000000011426375a70859a9e89745746331e0a0000000000000000000000000000000000000e23394e63788ea396816b56412c16010000000000000000000000000008182a3a4a5c687e93a0998372604a3f2f1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61778ca896816c57412c1702000000000000000000000000000000000000000000000000182d43586d8298a68b76604b36210b0000000000000000000000000000000000000000000000000000000000000000000d23384d62788da88f7a644f3a250f0000000c2136495b6f849a8c797b8f9a846f5a3b2a180500000417293a4f64798e9f8a76614c372614010000000000000000000000000000000919263135363635302618080000031525323c3f4545454545454545454539362d200f00000000000000000000000a1a283236373632291b17090000000000000000000000000000000000000000000000000000000000000d1f2f3d46494a4440362631353b474c51535454524d493c3633291d140900000000000000000000000000000000000000000000000004111c232d36393b484d5154565657565553504c483b3b3531261e170b01000000000000000000000000000b20354b60727b7f79634e37271502000000000000000000000000082034485a71879c98836d58432e180300000000182d42586d8297a78b76614c36210c0000000000000000000000000000000000000c21364b61768ba798836e59432e190000000000000000000000000000000c1c2d3e4e606d8298a1957f6a5d4c3b2b190900000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899e99846f59442f1a00000000000000000000000000000000000000000000000000162b40556b8095a38d78634e38230e08080808070705020000000000000000000000000000000000000000000000000011273c51667c91a68b76614c36210c000000061a2c3d51667c9197817e9396806b56412b16000000000c22364a5c70859b947f695544311d08000000000000000000000000000001142637444b4b4b4b4336261401000c2032434f545a5a5a5a5a5a5a5a5a5a4e4a3e2d1a0700000000000000000002162838454b4d4b4639342717040000000000000000000000000000000000000000000000000000000000172a3d4d5a5e6059534637444b52596166696a6967635b554c46393126190d000000000000000000000000000000000000000000000c171f2e373e4a4e56596266696b6c6c6b6a6865625957514b443733291d1509000000000000000000000000081c30435460666a635b493519090000000000000000000000000005192b3c596f84999b85705b46301b0600000000152b40556a8095a38e79634e39240e0000000000000000000000000000000000000a1e32465773899e9b86715b39281603000000000000000000000000000000102031424b6175869c9f8d7b655948372715020000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c71879c9c86715c3a2a170400000000000000000000000000000000000000000000000013283e53687d93a5907b65503b261d1d1d1d1d1d1c1a17130f0b07000000000000000000000000000000000000000000152b40556a80959d88735846331f0a000000000f20354b6073879c8a8297927c67523d271200000000071b2d3e52677d929d8774604b35200f0000000000000000000000000000081d314455606060605443301c080012273c4f61696f6f6f6f6f6f6f6f6f6f645c4a36210d000000000000000000091e32455660626157524534231200000000000000000000000000000000000000000000000000000000001d31465a6b74756e64534955606770777b7e7f7e7c78726a61574b44372a1d0f01000000000000000000000000000000000000010f1c29333f4b4f5c646c72777b7e808181807f7d7a77726d6660554c463931271910020000000000000000000001142636434b50554e493d2c1a000000000000000000000000000000172d42576c82979c86715c47311c070000000013283d52687d92a6917b66513c2611000000000000000000000000000000000000031629395b71869b9e88735745321e0900000000000000000000000000000002141e32465763798a9e9e8877625544311d1200000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f84999e89745847331f0a00000000000000000000000000000000000000000000000010263b50657b90a5937d68533e33333333333232312f2c2924201c13080700000000000000000000000000000000000417293a596e839999846f5a3a29170400000000081c304354697e939e899f8e78634e39230e00000000001020364b6075889e917c66513d2d1a07000000000000000000000000000b20354b6075757573604b35200b00142a3f54697f848585858585858585847a644e39240f0000000000000000000b21364b607478766c635241301808000000000000000000000000000000000000000000000000000000001f34495e748a8a826e595b63737d858b90939494918d877f76696055473b2d1f0f010000000000000000000000000000000002101f2d3a474c5d65707981878c90939596969595928f8c87827b746a61574b44372d2014020000000000000000000008182630353b4038352c1f0f000000000000000000000000000002172c42576c81979c87715c47321c070000000010253b50657a90a5937e69533e291400000000000000000000000000000000000000192e44596e8399a68b76604b36210b0000000000000000000000000000000003162839495b677d919f9b8474604b41301f0e00000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197a88c76614c37210c0000000000000000000000000000000000000000000000000e23384e63788dab95806b5548484848484848474644423e39353025211a0f070000000000000000000000000000000a1f33465872879d96816b56412c160000000000011426364c6176899e9f9f8a75604b35200b0000000000091d3245566b80969a84705b4a36210a0000000000000000000000000014293e53697e8b8b7d67523d281200162b40566b80959a9a979797979797927d67523d28120000000000000000000c21374c61778a8a816c5f4d362614010000000000000000000000000000000000000000000000000000001c31475c71869c8c7761657985929b9793919193969d9d95887e7362594a3d2d1f0f0000000000000000000000000000000210212e3d4a58616d7a858e969ca59f9c9997969798999c9f9c9790887f766960554a3e321d15090000000000000000000008141c20262a23211a0f01000000000000000000000000000006192b3c596e83989a85705a45301b05000000000d23384d62788dab96806b56412b1601000000000000000000000000000000000001172c41566c8196a38e78634e39230e00000000000000000000000000000000000b1b2c3d4d5f6c8196a296816c5f4d3d2c1b0a000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a48e79644f39240f0000000000000000000000000000000000000000000000000b21364b60768a9f98836d5d5d5d5d5d5d5d5d5c5c5a57534e4a4336362d211a0f02000000000000000000000000000c21364c61768ba5927d68523d2813000000000000081e3346576c8196ab9b86715544311d080000000000021528384d62788c9f8e79634e3828160200000000000000000000000014293e53697e93927d67523d28120013283e53687d939b858182828282828177624c37220d0000000000000000000a1f3347586b8095917c675443301c080000000000000000000000000000000000000000000000000000001a2f44596f8499907a657b8a9b9288827e7c7c7e81878f9b9e938477635b4a3d2c1d0d000000000000000000000000000010202e3f4b5b6376828f9aa29f99918b87848281818284878a90959d9d95897f73645c4f423127190a0000000000000000000001080b11150e0c06000000000000000000000000000000010f2035495a72879c97826d58422d1803000000000b20364b60758a9f98836e59432e190008080808080808080808080808080808080814293e54697e93a5907b66503b26110000000000000000000000000000000000000f1f30414b6074859b9e917d675b4939281603000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a6917c66513c2711000000000000000000000000000000000000000000000000091e32455673889d9a8572727272727272727272716f6c686460544e4a3d362d1e160a00000000000000000000000010253a50657a8f9b8f7a644f3a240f000000000000031729394d63788c9f97826d57372614010000000000000a2035495a6f839997826d5645321e0900000000000000000000000014293e53697e93927d67523d28120011263b50667b9096816c6c6c6c6c6c6c62594834200b00000000000000000004172a3a4c6176899c8673604b362614010000000000000000000000000000000000000000000000000000172c41576c8196937e798a9a887d746d696767696c727a85939f9a8879635b493b2a18080000000000000000000000000c1c2d3e4b5d65798798a0a1998c847c76726e6c6c6c6d6f72767b80878f999e94867a69614b4437281b0a000000000000000000000000000000000000000000000000000000000000040a131f2d3e4d62788da4937d68533e28130000000000081d31445573889d9b86705b3928161d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d273c51667c91a6937e68533e291300000000000000000000000000000000000001131d3145566278899e9e8979635745321e1302000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4947e69543f2914000000000000000000000000000000000000000000000000021628385b70869b9f8c878888888888888887878684817e79746c635b4e4a3e32281a0d000000000000000000000012273c51677d86868273604b35200b000000000000000b2135495b6c818b8b7c66513c27110000000000000006192b3c4d627884868475604b36210b00000000000000000000000014293e53697e93927d67523d2812000e23384e63788d99846f5957575757564c483b2b1805000000000000000000000c1f3347586b8095917c675443301c080000000000000000000000000000000000000000000000000000142a3f54697f949782859a847668605553515154565d65727e8c9e9d8879635948362513000000000000000000000004172a3a4a5c657b8a9da59e9284796f6761585957565758595660656b727a838f9c9c8b7e6d60554539281603000000000000000000000000000000000000000000000003090b131315171f21313d4a5c6c81979f8b77624c37220d0000000000021527375b70859a9e887357453233333333333333333333333333333333333333333333394e64798ea395806b56402b160100000000000000000000000000000000000002152738485a667c8d9f9c8675604b42312010000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca996816c56412c1701000000000000000000000000000000000000000000000000192e43586e8398aa9f9d9d9d9d9d9d9d9d9d9c9b9997938e8881796f645c4b45382b1d0e000000000000000000001024394d5f6771716d605443301c080000000000000006192c3c52636c7574665e4d39240f00000000000000000e2035495a626f7170605645321e0900000000000000000000000014293e53697e93927d67523d2812000b21364b60768b9c86715c3a4242424137342b1d0d000000000000000000000004172a3a4c6176899c8673604b362614010000000000000000000000000000000000000000000000000012273c52677c919f8b9b847461584b44373c3c3e3f4b5460687b899e9d8877625443301c0d00000000000000000000081f334758647a8a9ea69d8a7d6f635b524c473a4241424338454b50565d656e7a86969f938273605745321e09000000000000000000000000000000000000000000000a161e2128292a293337424e5b647a8b9f98826d594834200b000000000000182e43586d8398a68b76604b4848484848484848484848484848484848484848484848484c61768ca898836e58432e1900000000000000000000000000000000000000000a1a2b3c4c5e6a8095a197826d604e3e2d1c0c0000000000000000000000000000000000000000000000000000000000000000000b1f34475974899f99846e59442f1900000000000000000000000000000000000000000000000001162b41566b8096ab9b918c8c8c8c8c8c8c8c8c8d8f93979d9d978e84796b6056483b2b1e0e0000000000000000000a1d30414d515c5c584b433626140100000000000000000e1e344552575f5f514d40301d09000000000000000006192c3c494d5a5c5b4b453828160200000000000000000000000014293e53697e93927d67523d281200091e32455673889e89745847332d2d2c2220180d000000000000000000000000000c1f3347586a8095917c675443301c08000000000000000000000000000000000000000000000000000f243a4f64798faa9e89776156473a31272727292e36434a5d657b8b9f9a8472604a3c2b1905000000000000000008182f404c6176879da79d887a675f4e4a3d37332a2d2c2c2d2832363b3f4b4f5d657480919f988475604b36210b0000000000000000000000000000000000000000000a1a2832363d3e403a474c53606879889e9e8978624d3b2b1805000000000000162b40556b8095a38d78635d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5874899e9b85705b3828150200000000000000000000000000000000000000000d1d2f404b6072849aa0937e685c4a3a291808000000000000000000000000000000000000000000000000000000000000000005182a3b5c72879c9b86715c3929170300000000000000000000000000000000000000000000000014293e53697e93a7917d777777777777777777787a7d8288909ba19a8c81746259483c2b1c0c000000000000000001122330393c4646423530261808000000000000000000001727343e424a4a3c39302212000000000000000000000e1e2c35384446463632281a0a0000000000000000000000000014293e53697e93927d67523d281200031628385b70869b8c76614c372117170d0b0500000000000000000000000000000417293a4c6176899c8673604b362614010000000000000000000000000000000000000000000000000d22374c62778ca9937e685947382a1d151212141825303f4b5c667c919f947f695a4834201000000000000000001325364c5e6e8398a59e8979645c4d41362d211f1717171718161e21262e373f4b56606b7d8a978574604b36200b000000000000000000000000000000000000000003162838454b52535558586169717e8a9e9f8d7d675a48341d0d0000000000000013283e53687d93a5907c7272727272727272727272727272727272727272727272727272727272869c9d88735645321d09000000000000000000000000000000000000000000111c3043546176879d9f8b7a6458463625130000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849a9e89745746331e0a00000000000000000000000000000000000000000000000011263b51667b90a6927d6862626262626262626365686d747b85909d9f968577625a483a2a1704000000000000000005121d242731312d201c140800000000000000000000000917222a2c353527241d120400000000000000000000000e1920232f3130211e160a000000000000000000000000000014293e53697e93927d67523d28120000192e43596e83988e79644f39240f010000000000000000000000000000000000000c1f3346586a8095927d675443301c090000000000000000000000000000000000000000000000000b20354a6075899f927d68533b2a1a0c0200000008131c2e3e4d5e6d81979f8a78624d3e2d1b07000000000000071c304354667b90a09f8d7c665b4a3e31211a0f0a040001020003090b111c232e38454b5f677a8276615645311d090000000000000000000000000000000000000000091e3245566068686a6d71767e86939e9b8b7d675f4d3c2b19000000000000000010263b50657b90a59e8887888888888888888888888888888888888888888888888888888888878b9f9f8a75604b36200b000000000000000000000000000000000000000000011426364758647a8b9f9d8776615443301c110000000000000000000000000000000000000000000000000000000000000002172d42576c8297a78b76614c36210c0000000000000000000000000000000000000000000000000e24394e63798ea395806a554c4c4c4c4c4c4d4e5053546066707c879aa29b8778625847331f13000000000000000000010a10121c1c180b080100000000000000000000000000050f1517201f110f090000000000000000000000000000060c0d1a1c1b0b090200000000000000000000000000000014293e53697e93927d67523d28120001162b41566b8096917c66513c2711000000000000000000000000000000000000000417293a4c6176899c8673604b372614010000000000000000000000000000000000000000000000071c30435472879c95806b55402b1600000000000000112030404b6175879d98826e5c4a36220e0000000000000b20354a6073869ca696816c5e4c3d2d201307000000000000000000000008101a2731414d5c646d6158473827150200000000000000000000000000000000000000000b21364b60757d7e7f82868b939c99908579675f4d41301d0d00000000000000000e23384e63788daba79e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea7ab8d78634d38230e0000000000000000000000000000000000000000000008182a3a4b5c697e93a0998372604a3f2e1d0d00000000000000000000000000000000000000000000000000000000000000152a3f556a7f94a38e79634e39240e0000000000000000000000000000000000000000000000000c21364b61768ba798826d5843373737373737383a36434b505e66778499a19c8776614c41301a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93927d67523d2812000014293e53697e93947e69543f291400000000000000000000000000000000000000000c1f3346586a7f95927d675544311d090000000000000000000000000000000000000000000000001325365a6f849a98826d58432d180000000000000002121e334657687d92a08e7a644f3c2b19050000000006192b3c51677c91a49d8876614b402f1f100200000000000000000000000000000a151d303e4a4e584c473a2a1a0a0000000000000000000000000000000000000000000b20364b60758c9395979b9f9e8a837b71635b4d413123120000000000000000000b21364b60768a9f9f8b8888888888888888888888888888888888888888888888888888888888899ea5907b65503b261000000000000000000000000000000000000000000000000c1c2e3e4f606e8298a1947f6a5d4b3b2a190900000000000000000000000000000000000000000000000000000000000012273d52677c92a6917b66513c26110000000000000000000000000000000000000000000000000a1e33465773899e9a85705a372622222222222325263035404c5961738399a499836f5f4d382816020000000000080d0f20202020202020202020202020202020202020202020202020202020202020202020202017150f050000000000040e141620201e1c150c000000000000000000000000000014293e53697e93927d67523d2812000011263b51667b9096816c56412c1701000000000000000000000000000000000000000417293a4c6176899c8673604b372614010000000000000000000000000000000000000000000000182d42576d82979a85705b3727150200000000000000031729394b6073869c98836d5a4835200b000000000b2035495a70859aa7937e69574633221101000000000000000000000000000000000212202d36394237332a1c0c00000000000000000000000000000000000000000000091d32455673888f9194999e887e776d635b4b45382b1d0d000000000000000000091e32455673889d9b8673737373737373737373737373737373737373737373737373737373737c91a6927d68533d2813000000000000000000000000000000000000000000000000102032424b6175869c9f8c7b65594837261401000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4937e69533e2914000000000000000000000000000000000000000000000000031729395c71869b9d88725544311d0d0d0d0d0e10141c202f3a47556175869ca1927d675645321e0900000002101b22253535353535353535353535353535353535353535353535353535353535353535353535352d2a221709000000081621292b35353330291e100000000000000000000000000014293e53697e93927d67523d281200000e24394e63798e99846e59442f190000000000000000000000000000000000000000000c1f3346586a7f95927d675544311d090000000000000000000000000000000000000000000000152a40556a7f959d88725544311d0800000000000000000b1d314455687e939f8b78624d38220f000000000d23384d62788c9f9e8975604b3929170400000000000000000000000000000000000002101b22242d211f170c0000000000000000000000000000000000000000000000021528384d62787a7c7e848990938b82796b6056483b2b1d0d0000000000000000021628385b70869b9e8973575d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d63798ea395806b55402b1600000000000000000000000000000000000000000000000002141e33465763798a9f9d8877625544311d1200000000000000000000000000000000000000000000000000000000000d22374d62778ca996816b56412c1601000000000000000000000000000000000000000000000000192e44596e83999f8a75604b35200b00000000000108121c2a37465762788b9f9d8875604b36210f00000010202e373a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a423e3527170500041626333d404a4a48453b2e1e0000000000000000000000000014293e53697e93927d67523d281200000c21364b61768b9b86715c3a29170400000000000000000000000000000000000000000417293a4c6176899c8773604b372614010000000000000000000000000000000000000000000012283d52677d929f8a75604b36200b0000000000000000011426374b6176899e957f6a553d2d1a0700000114263654697e94ab97816c5645321b0b000000000000000000000000000000000000000000070d0f180c0a04000000000000000000000000000000000000000000000000000a2035495a626567696e747b848f988c80746259483c2b1a0a0000000000000000192e43586e8398a78b76614b4848484848484848484848484848484848484848484848484c61768ba798826d58432d1800000000000000000000000000000000000000000000000000031729394a5b677d929f9a8473604b402f1e0e000000000000000000000000000000000000000000000000000000000b20354b60758a9f98836e59432e1900000000000000000000000000000000000000000000000001172c41566c8196aa8d77624d38220d00000000000000000c192839495a6b8196a6937e68533d2c1a0600081b2e3e4b4f60606060606060606060606060606060606060606060606060606060606060606060606057524535220f000e213344515660605e584c3b1a0a00000000000000000000000014293e53697e93927d67523d281200000a1e33465773899e89745846331f0a0000000000000000000000000000000000000000000b1e3346576a7f94927d675544311d090000000000000000000000000000000000000000000010253a50657a8fab8d78624d38230d000000000000000000091e3246576d82979c86715b4a36210c0000081c3043546f849aa88f7a655038281600000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000006192c3c494d4f51545460656f7a8698968677625a483827150200000000000001162b41566b8096a38e79634e393333333333333333333333333333333333333333333333465774899e9a85705b37271502000000000000000000000000000000000000000000000000000b1b2d3d4d5f6c8197a295806b5e4c3c2c1a0a000000000000000000000000000000000000000000000000000000081c30435472879c9b86715b3928160300000000000000000000000000000000000000000000000014293f54697e94a58f7a65503a25100000000000000000000b1b2b3c4c6177899e9b86715b4935210c000d22374b5c647575757575757575757575757575757575757575757575757575757575757575757575756c63523e2a150014293d51626b7575736a5838281502000000000000000000000014293e53697e93927d67523d28120000031729395c71869b8b76614c36210c000000000000000000000000000000000000000000031729394b6176899c8773604b372715010000000000000000000000000000000000000000000d23384d62788daa907a65503b25100000000000000000000316293951667b91a48e79634e39240e00000b20354b6074899e9e8975604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c35383a3c36434b505c647582989c8778625645311d0e0000000000000013293e53687e93a6907b66513b261e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1729395c71869b9d88725544311d0800000000000000000000000000000000000000000000000000000f1f30414b6074859b9f8d7c665a49382816020000000000000000000000000000000000000000000000000000011426365a6f859a9e88735746321e0900000000000000000000000000000000000000000000000011273c51667c91a6927d67523d2812000000000000000000000e1f3347586d8297a38d78634e38230e000f253a4f647a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816c57422d1700162b40566b808a8a88735645321d09000000000000000000000014293e53697e93927d67523d2812000000192e44596e83998e79634e39240e000000000000000000000000000000000000000000000b1e3346576a7f94927d685544311d090000000000000000000000000000000000000000000b20354b60758a9f927d68523d2813000000000000000000000b21364b6075899f947e69543f291400000e23384e63788da89a846f5544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202325272630353e4b57617383999b8574604b3c2b190500000000000011263b51667b90a6937e68533e291308080808080808080808080808080808080800192f44596e84999f8a75604b36200b000000000000000000000000000000000000000000000000000001131d3245566278899e9e8978625645321e13010000000000000000000000000000000000000000000000000000182d42576d8297a78b76614b36210c0000000000000000000000000000000000000000000000000f24394f64798ea4947f6a553f2a150000000000000000000004182a3a51667b91a6937e68533e2913000f253a4f647a8f9d94929292929292929292929292929292929292929292929292929292929292929c97826c57422d170013293e53687e939f8a75604b36200b000000000000000000000014293e53697e93927d67523d2812000001172c41566c8196917b66513c261100000000000000000000000000000000000000000000031729394b6176899c8774604b372715010000000000000000000000000000000000000000081d31445572889d95806a553d2c1a06000000000000000000091e32455670859a99846e593b2b18050011273c51667c91a696806b563727150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1013120b0700000000060c0d1012141c202e3946556075869c96806b5a483520090000000000000e23394e63788ea396806b56412b1601000000000000000000000000000000000001172c41566c8196ab8d78624d38230d00000000000000000000000000000000000000000000000000000002152838485a667c8d9f9b8574604b41311f0f0000000000000000000000000000000000000000000000000000152a40556a7f95a38e78634e39230e0000000000000000000000000000000000000000000000000c21374c61768ca897826d57422d1800000000000000000000000c21374c61768ca698826d58432d18000f253a4f647a8f947f7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d8697826c57422d170011263b51667b90ab8d78634d38230e000000000000000000000014293e53697e93927d67523d281200000014293f54697e94937e69533e291400000000000000000000000000000000000000000000000b1e3346576a7f94927d685544311d090000000000000000000000000000000000000000011527375b70859a9a856f5b4935210a00000000000000000002162838566b80959e8974594834200b0014293e54697e93a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23262927201c1308000000000000000108101b29374557667b909f8b78624d3726140100000000000c21364b61768ba798836e58432e190000000000000000000000000000000000000014293f54697e94a5907a65503b2510000000000000000000000000000000000000000000000000000000000a1a2b3c4c5e6b8095a297816c5f4e3d2d1b0b0000000000000000000000000000000000000000000000000012283d52677d92a5907b66503b26110000000000000000000000000000000000000000000000000a1f33475874899e9a846f5a36251300000000000000000000000a1f33475873889d9b85705b46301b000f253a4f647a8f8d786868686868686868686868686868686868686868686868686868686868686f8497826c57422d17000e23394e63788ea3907b65503b2610000000000000000000000014293e53697e93927d67523d281200000011273c51667c9196816b56412c160100000000000000000000000000000000000000000000031729394b6175899d8774604b372715010000000000000000000000000000000000000000182e43586d8398a28d78634e3928160300000000000000000012273c52677c91a78c77624d37220d00162b41566b8096a5907b66503b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f383b3e3d35302518080000000000000000000b1928394c5e6f849a96816c5544311d080000000000091e32465773889e9b86705b3828160200000000000000000000000000000000000011273c51667c91a6927d68523d281300000000000000000000000000000000000000000000000000000000000e1e2f404b6073849a9f927d685b4a3929170300000000000000000000000000000000000000000000000010253a50657a8fa5937e68533e291300000000000000000000000000000000000000000000000004172a3a5c71879c9c87725443301c07000000000000000000000417293a5b71869b9d88735d48331e000f253a4f647a8f8d7863525252525252525252525252525252525252525252525252525252525a6f8597826c57422d17000c21364b61768ba7927d68533d2813000000000000000000000014293e53697e93927d67523d28120000000f24394f64798e98836e59432e190000000000000000000000000000000000000000000000000b1e3246576a7f94927d685544311d090000000000000000000000000000000000000000162b40556b8095aa96816b5745321e0b0000000000000000000f24394f64798ea4907a65503b251000172c42576c8197a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2f3f4c5053524a43362513000000000000000000000a1b2f4053687d929e8974604b35200b0000000000031628395b71869b9d88735645321e090000000000000000000000000000000000000f24394f64798ea4957f6a55402a15000000000000000000000000000000000000000000000000000000000000121d3144556177889d9f8a79635746331e140200000000000000000000000000000000000000000000000d22384d62788daa95806b56402b16010000000000000000000000000000000000000000000000001a2f44596f84999f8a75604a35200b00000000000000000000001b30455a70859a9e89745e49341f000f253a4f647a8f8d78634d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d455a6f8597826c57422d17000a1e32465773899e95806b55402b16000000000000000000000014293e53697e93927d67523d28120000000c21374c61768c9b86715b392816030000000000000000000000000000000000000000000000031629394b6175889d8774604b372715020000000000000000000000000000000000000013283e53687d93a89e8975604b3929170300000000000000000c21364c61768bab937d68533e281300182d42586d8297a38e78634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384c5d656867605443301c07000000000000000000001122374c62778b9f8f7a644f3a240f000000000000192e43596e83989f8a76604b36210b0000000000000000000000000000000000000c21374c61778ca897826d58422d18000000000000000000000000000000000000000000000000000000000000011426374759657b8c9f9c8676614c4232201000000000000000000000000000000000000000000000000b20354b60758a9f98836e58432e1900000000000000000000000000000000000000000000000002172c42576c8197a98c77624c37220d00000000000000000000031628385b70869b9e89745e49341f000f253a4f647a8f8d78634d3828282828282828282828282828282828282828282828282830455a6f8597826c57422d1700031629395c71869b98826d58432d18000000000000000000000014293e53697e93927d67523d28120000000a1f33475874899e88735746321e090000000000000000000000000000000000000000000000000b1e3246576a7f94927d685544311d090000000000000000000000000000000000000011263b50667b90a5a7947f695746331e0e00000000000000000b20354a60758a9f947f69543f2a1400182d42586d8297a38d78634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b7e7d72604a352010000000000000000000000b1f34485972879d947f6a543f2a15000000000001162c41566b8196ab8d78634e38230e0000000000000000000000000000000000000a1f33475874899e9a856f5a3626140100000000000000000000000000000000000000000000000000000000000009192a3b4b5d697f94a198836e614f3f2e1c0c00000000000000000000000000000000000000000000081d31445572889d9b85705b38281602000000000000000000000000000000000000000000000000152a3f546a7f94a48f7a644f3a250f00000000000000000000091e32455672879d9c87725d47321d000f253a4f647a8f8d78634d3823131313131313131313131313131313131313131313131a30455a6f8597826c57422d170000192e44596e83999a85705a372614010000000000000000000014293e53697e93927d67523d281200000004172a3a5c71879c8b76614b36210c000000000000000000000000000000000000000000000000031629394b6175889d8774604b372715020000000000000000000000000000000000000e23384e63788da3a79e8976614b3c2b190600000000000000071c30435474899e95806b55402b1600172c42576c8197a38e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000061b31465b708593927e69533e2e1b0700000000000000000005182a3b5b70869b96816c57412c1700000000000014293e54697e93a5907b65503b261000000000000000000000000000000000000004172a3a5c71879c9d87725443301c08000000000000000000000000000000000000000000000000000000000000000c1d2e3f4f616e8399a0937e695d4b3a2a1808000000000000000000000000000000000000000000011426375a70859a9d88735645321e0900000000000000000000000000000000000000000000000012273c52677c91a7917c67523c2712000000000000000000000b21364b60768a9f9b85705b46301b000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170001172c41566c81969d88725544311d080000000000000000000014293e53697e93927d67523d2812000000001a2f44596f84998e78634e39230e000000000000000000000000000000000000000000000000000b1e324657697f94927d685544311d0a0000000000000000000000000000000000000b21364b60768ba69e88957f6a5a4835201301000000000000071c30435474899e96816b56412c1600162c41566b8196a48f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f949c86725c4b37221000000000000000000000192f44596e849998836e58432e1900000000000011263c51667b91a6927d68533d2813000000000000000000000000000000000000001a2f44596f84999f8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000102132434c6176879c9f8b7b64594736261401000000000000000000000000000000000000000000182d43586d82989f8a76604b36210b0000000000000000000000000000000000000000000000000f253a4f647a8fa4947f69543f2a140000000000000000000a1a2c3c50667b90a997826d58422d18000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000014293f54697e949f8a75604b35200b0000000000000000000014293e53697e93927d67523d281200000002172c42576c8197907b66513b261100000000000000000000000000000000000000000000000000031628394b6075889d8774604b382715020000000000000000000000000000000000091e32455673889e97818a8a78624d41311f0f0000000000000b20354a60758a9f957f6a55402a1500152a40556a7f95a5907a65503b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da18f7a644f3f2e1b0b000000000000000002152737596f849999846f5a442f1a0000000000000f24394e64798ea395806b55402b1600000000000000000000000000000000000002172c42576c8197aa8d77624d38220d000000000000000000000000000000040404040404040404040404040404040403141e33465763798a9f9d8877615443301c12000000000000000000000105050505050505050505152b40556a8095ab8d78634e38230e0505050505050505050505010000000000000000000000000d22374c62778ca997816c57422c17020101010200040a0f192738495a6d8297aa917c67523c2712000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000011273c51667c91aa8d77624d38220d0000000000000000000014293e53697e93927d67523d281200000000142a3f54697f94937e68533e291300000000000000000000000000000000000000000000000000000b1e324557697f94937e685645311d0a0000000000000000000000000000000000031628385b71869b97827f95846f5f4d3d2d1c0c00000000000c21374c61768cab947e69543f29140013283d53687d92a7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6f849999836e5d4b3928180800000000000000081d31445571869b98836d58432e180000000000000c21364c61768ba798826d58432d1800000000000000000000000000000000000000142a3f54697f94a48f7a654f3a25100000000000000000000000000a1012191919191919191919191919191919191919191729394a5b687d929f9a8472604b402f1e0e000000000000050e14161b1b1b1b1b1b1b1b1b1b1b283d53687d92a5907b65503b261b1b1b1b1b1b1b1b1b1b1b1b17140e050000000000000000000b20354a60758a9f99846f59442f1a171717171718171f212c37455663788b9f9f8b77614c37210c000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000f24394f64798ea48f7a65503a25100000000000000000000014293e53697e93927d67523d28120000000012273c52677c9196806b56412b160100000000000000000000000000000000000000000000000000031628394b6075889d8774604b382715020000000000000000000000000000000000192e43596e83989a857687927d675b4a3a2a1c0d0000000010253a4f657a8fa4917c67523c27120010253b50657a90a5947f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4f647a8ea18f7a6457463626180d0200000000010f20364b6075899e96816b56412c160000000000000a1f33465874899e9a85705b3727150100000000000000000000000000000000000012273c52677c91a7927d67523d28120000000000000000000004121d24272e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d3d4e606d8297a295806a5e4c3c2b1a0a00000000081621292c3030303030303030303030303b50657a90a5937d68533e303030303030303030303030302c292216080000000000000000071c30435472879c9c87715c3a2a2c2c2c2c2c2c2e2933363d49556074849aa897816c5847331f0a000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000c22374c61778ca8927d67523d28120000000000000000000014293e53697e93927d67523d2812000000000f243a4f64798f98836e58432e190000000000000000000000000000000000000000000000000000000a1e324557697e94937e685645311d0a0000000000000000000000000000000001162c41566b81969c87727b8d8a796358473a2a1d12070006192c3c53697e93a88d78634e38230e000d23384d62788da797826d573828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22364a5c6e83999c8675615443362a1e160d0b0b0c141c2f4050657b90a8927d68533d28130000000000000417293a5c71869b9d88725544311d080000000000000000000000000000000000000f253a4f647a8fa4947f6a553f2a1500000000000000000000122230393c4343434343434343434343434343434343434343434343414b6074859b9f8d7c665a48382715020000051626343d41454545454545454545454545454d63788dab95806b554545454545454545454545454545413e3426160500000000000000001325365a6f849a9e8974584741414141414142433a464c515b63748298a29f8a77624c3a2a1704000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000a1f33475874899e947f6a553f2a150000000000000000000014293e53697e93927d67523d2812000000000d22374c62778c9b86705b382816030000000000000000000000000000000000000000000000000000031628394b6075889d8774604b382715020000000000000000000000000000000014293e54697e939f8a756c819687766158483b30211a15172135495b6f849a9e8974604b35200b000b20354a6074899e9b86715645321d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4d6277899e9882726054473b32282221202126303d4c5e6e83999f8c77624c37220d00000000000000192f44596e84999f8a75604b35200b0000000000000000000000000000000000000d22374c62778ca997826d57422d180000000000000000000a1d30404d5159595959595959595959595959595959595959595959595959566378899e9e8978625645311d1100000e21344451565a5a5a5a5a5a5a5a5a5a5a5a5a5a60758a9f98836d5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a56514434220e0000000000000000182d42576d8297a88c7661565656565656565758595861666e798598a09f8d7d675948341c0c00000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000004182a3a5c71879c97826d57422d180000000000000000000014293e53697e93927d67523d2812000000000b1f34485974899d88735645321e090000000000000000000000000000000000000000000000000000000a1e324556697e94937e685645311d0a0000000000000000000000000000000011263c51667b91a98c776274849a857662594c40362d2b2933434d63788b9f98836e5443301c0800071c3043546f849a9f8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001020344859667c919e97817262594b45383836353736434b5c667b90a19a846f5948341f0b00000000000001172c41566c8196aa8d77624d38220d0000000000000000000000000000000000000b20354a6075899f9a846f5a3625130000000000000000001024394d5f676e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e7b91a79b8574604b402f1c090014293d51626b70707070707070707070707070707073889d9a85707070707070707070707070707070706c62513e29140000000000000000152a40556a7f95a48e7a6c6c6c6c6c6c6c6c6c6d6f72767b838c9ba39e917f695f4d3b2b180000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000001a2f445a6f84999a846f5a3625130000000000000000000014293e53697e93927d67523d28120000000005182a3b5c72879c8b76604b36210b000000000000000000000000000000000000000000000000000000031628384b6075889d8774604b382815020000000000000000000000000000000f24394e64798ea38f7a646177879b8677665e4e4a3d403a474c616e8399a4917c6651362614010000132536556a8095aa8f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4d5e6a80959e978377696056514d4b4a4c4f5460687a899e9f8f7a644f3b2a18050000000000000014293f54697e94a58f7a65503a2510000000000000000000000000000000000000071c30435472879c9c87725443301c07000000000000000012273c51677d8383838383838383838383838383838383838383838383838383838383899ea396816c5e4c38230e00162c41566b80858585858585858585858585858585848a9e9f8b84858585858585858585858585858585806c56412c17000000000000000012283d52677d92a799838181818181818181818384878b90999f9e97887c69614f41301d0d0000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000002172c42576c81979c87725443301c0700000000000000000014293e53697e93927d67523d281200000000001a2f455a6f849a8d78634e38230e000000000000000000000000000000000000000000000000000000000a1e324556697e93937e685645321d0a0000000000000000000000000000000c21374c61768ca8927c67596378879c887c6e635b57555658616c7f94a19c8673604b35200b0000000f253a4f647a8fa696806b563e2e1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d304050626a80939f99887e756c6662606061646a737e8a9ea197816c5c4b371d0d000000000000000011273c51667c91a6927d67523d2812000000000000000000000000000000000000001325365a6f849a9f8a75604a35200b000000000000000013283d52687d92989898989898989898989898989898989898989898989898989898989ea7a79f907b65503b261000182d43586d82989a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9ea8a99f9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a87725c372614010000000000000010253a50657a8fa5a19996969696969696969798999c9f9d9893898177665e4f43322313000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000152a3f546a7f949f8a75604a35200b00000000000000000014293e53697e93927d67523d28120000000002172d42576c8297907b66503b261100000000000000000000000000000000000000000000000000000000031628384b6075889d8875604b3828150200000000000000000000000000000a1f33475874899e947f6a545a63788799918379716c6a6c6f7681949d9d907b655544311d080000000b20354a6073889d9c87725c4a36220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001222334350616a7e8a9b9e9388817b777675767a7f87939f9f968373604b3e2e1b0000000000000000000f24394f64798ea4957f6a55402a1500000000000000000000000000000000000000182d42576d8297a98c77624c37220d000000000000000010253a50657a8f929292929292929292929292929292929292929292929292929292929292929292826c57422d1700162b40556b809292929292929292929292929292929292929292929292929292929292929292929292928a745544311d08000000000000000d22384d62788d929292929292929292929292918f8e8c87837d766c62594d4032251405000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000012273d52677c92a98c77624c37220d00000000000000000014293e53697e93927d67523d28120000000000152a3f556a7f94937d68533e281300000000000000000000000000000000000000000000000000000000000a1e324556697e93937e695645321d0a00000000000000000000000000000417293a5c71869c97816c57495a62768392988e86828081848b979f9f947f695d4b37261401000000071c3043546c8197a48f7a644f3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004152533435060687985909a9d96918d8b8a8c8f949da29a8d81746055443120100000000000000000000c21374c61778c9292826d57422d1802000000000000000000000000000000000000152a3f556a7f92928f7a644f3a250f00000000000000000c21364b61757d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7b65503a2510000e23384e63797d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d75604b35200b000000000000000b20354b60737d7d7d7d7d7d7d7d7d7d7d7d7c7b7a7976726e6861574c483b3022140700000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000f253a4f647a8fa48f79644f3a240f00000000000000000014293e53697e93927d67523d2812000000000012283d52677d9295806b56402b160100000000000000000000000000000000000000000000000000000000021628384b6075889d8875604b3828160200000000000000000000000000001a2f44596f849999846f5a3c4858616e7d87939a979596999f9e988b7f69614f3f2f190900000000001325364e64798ea397826d5947341f0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007152533424e5b63707b848c92989b9c9e9d9b99938d847b6c605645372715020000000000000000000a1f334758677d7d7d7b65503a2510000000000000000000000000000000000000000e23384d63787d7d7d78624d37220d00000000000000000a1e3346576167676767676767676767676767676767676767676767676767676767676767676767655d4b37230e000c2135495b6367676767676767676767676767676767676767676767676767676767676767676767676767605544311d0800000000000000081d3144556067676767676767676767676767666563615858534b4639342a1d12040000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000d22374d62778ca9917c67523c271200000000000000000014293e53697e93927d67523d2812000000000010253a4f657a8f98836d58432e180000000000000000000000000000000000000000000000000000000000000a1e324556697e93937e695645321e0a0000000000000000000000000002172c42576c81979c87715c3a3a464c5f68757e858b8f91918e89827969614f433221110000000000000821364a5c70859b9f8a77614c3c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071524313c494d5d656f777d828587898886837e786f655d4b45382819090000000000000000000004172a3a4d5f676767655d4b37230e000000000000000000000000000000000000000c2035495a6367676762594834200b000000000000000003172939464b52525252525252525252525252525252525252525252525252525252525252525252504b3f2e1c0800061a2c3d494e525252525252525252525252525252525252525252525252525252525252525252525252524b44372614010000000000000001142637444b52525252525252525252525252514f4e4c473a3e3632291f180d00000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000b20354b60758a9f947f69543f2a1400000000000000000014293e53697e93927d67523d281200000000000d22384d62778d9b85705b382715020000000000000000000000000000000000000000000000000000000000021628384b6075889d8875604b3828160200000000000000000000000000142a3f54697f949f897458473333414e56606970777a7c7b79766d635b4f4332251503000000000000071a2d3e52677c91a396806b5a48342013010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141e2c353f4b505962676d70727373716e69635b504b3f32281a0a0000000000000000000000000c1c30414d525252504b3f2e1c080000000000000000000000000000000000000006192c3c494d5252524d483b2b19050000000000000000000b1b2933363d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a372e21110000000f1f2c35383d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d353126190900000000000000000009192631353d3d3d3d3d3d3d3d3d3d3d3d3d3c3a3937332a28211e160b050000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000081c30435472879d97816c57422c1702000000000000000014293e53697e93927d67523d281200000000000b20354b60758a9d88735645311d090000000000000000000000000000000000000000000000000000000000000a1d324556697e93937e695645321e0a0000000000000000000000000012273c52677c91a88c77614c37223138454b5359616567666460574e493d3225150700000000000000000f20354a6072869b9f8a78624d41301f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19212f383b484d52585b5d5e5d5c59544e493d372e1d150a0000000000000000000000000000132330393d3d3d3a372e21110000000000000000000000000000000000000000000e1e2c35383d3d3d37342b1d0d00000000000000000000000b171e212828282828282828282828282828282828282828282828282828282828282828282825231c1103000000010f1a212328282828282828282828282828282828282828282828282828282828282828282828282828201d1409000000000000000000000009141d2028282828282828282828282827262524211f17130c0a0300000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d17000000011426365a6f859a99846f59442f1a00000000000000000014293e53697e93927d67523d28120000000000081c30435472879d8a75604b36200b000000000000000000000000000000000000000000000000000000000000021528384b6075879d8875604b382816030000000000000000000000000f253a4f647a8fa48e79644f39241a2832363b474c4f52514f4b4539352c1f1406000000000000000000071c304354667b90a199836e5f4d3d2c1d0c000000000000000000000000000000000000000000050b0d130b0902000000000000000000000000000000000000000006111c232b34373d434647494846443e38352c231c110200000000000000000000000000000005131e2527282825231c1103000000000000000000000000000000000000000000000e1920232828282220190d00000000000000000000000000030a0c12121212121212121212121212121212121212121212121212121212121212121212100e0800000000000000060c0e121212121212121212121212121212121212121212121212121212121212121212121212120b08010000000000000000000000000001080b1212121212121212121212121211100e0c0a040000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000000182d42586d82979c86715c3a291704000000000000000014293e53697e93927d67523d28120000000000011426365a70859a8d78634d38230e000000000000000000000000000000000000000000000000000000000000000a1d324556687e93937e695645321e0a0000000000000000000000000d22374c62778ca9917c67513c2712161e212a34373a3c3c39363228211a0f0100000000000000000000001325364c5e6e8399a1927d675b493b2a1c0e000000000000000000000000000000000000000d19202228201d150a000000000000000000000000000000000000000000080d182022282d30323433312e2923211a0f08000000000000000000000000000000000000010a10121212100e0800000000000000000000000000000000000000000000000000060c0e1212120d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d1700000000152b40556a80959e89745847331f0a000000000000000014293e53697e93927d67523d2812000000000000182d42586d8297907a65503b251000000000000000000000000000000000000000000000000000000000000000021528384b6074879d8875604b3828160300000000000000000000000b20354a60758a9f947e69543f291402090c181f2225272624211e160a060000000000000000000000000008182f404c6277899e9e8a796359473a2c1e110400000000000000000000000000000002101d2b34373d3632281a0a00000000000000000000000000000000000000000000050b0d12181b1d1e1e1c19140e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d20202017140e0500000000000000000000000000000000000000000000000000000000010d161c1e202020202020202020202020202020202020202020202020202020202020100e080000000000000000010d171d1f202015130d04000000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000013283d52687d92a88c76614c37210c000000000000000014293e53697e93927d67523d2812000000000000152b40556a8095927d68533d281300000000000000000000000000000000000000000000000000000000000000000a1d314556687e93947e695645321e0a0000000000000000000000071c30435472879c96816c56412c17010000040b0c1012110f0b0903000000000000000000000000000000001220344859677d919e9c86776158493c2f1f170c030000000000000000000000000412202d3b484d524b45382815020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c20202017150f050000000000000000000000000000000000000000000000000000000000000000000000000000000000000d181f353535352c29221608000000000000000000000000000000000000000000000000000001111e2a313435353535353535353535353535353535353535353535353535353535353525231c1103000000000001111f2a313435352a282015070000000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0000000000000000000000000000000000000000051a30455a6f8597826c57422d170000000010253b50657a90a38e79644e39240f000000000000000014293e53697e93927d67523d281200000000000013283d52687d9295806a55402b150000000000000000000000000000000000000000000000000000000000000000021527384b6074879d8875604b3928160300000000000000000000001325365a6f859a99846e59442f19000000000000000000000000000000000000000000000000000000000005182b3b4d5f6b8096a19c8676635a4c4033291e170b090200000000000000070c181f303e4a596268605645321d1000000000000000000000000000010a10122020202020202020202020202020202020201e1d1b1914100c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000c171f213535352d2a221709000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2a344a4a4a4a413e34261605000000000000000000000000000000000000000000000000000d1e2f3c45494a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3a372e211100000000000d1f2f3d46494a4a403c3325150400000000000000000000000000000000000000000f253a4f647a8f8d78634d38230e0101010101010101010101010101010101010101051a30455a6f8597826c57422d17000000000d23384d62788dab917c66513c2711000000000000000014293e53697e93927d67523d281200000000000010253b50657a9098826d58432d180000000000000000000000000000000000000000000000000000000000000000000a1d314556687e93947e695745321e0b0000000000000000000000182d42576d82979b86715c3929170300000000000000000000000000000000000000000000000000000000000d1d30414b60728399a19c8678665e4c473a3329201d15131110101112151b222a34414d5c64787d74604b3e2e1b07000000000000000000000005131e25273535353535353535353535353535353535353432312e2a25211e170b0903000000000000000000000000000000000000000000000000000000000000000000000c1c2a33494a4a4a423e35271700000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b485e60606056514434220e00000000000000000000000000000000000000000000000000162a3c4d595e606060606060606060606060606060606060606060606060606060606060504b3f2e1c0800000000172a3d4d5a5e606055504333200d00000000000000000000000000000000000000000f253a4f647a8f8d78634d3823161616161616161616161616161616161616161616161a30455a6f8597826c57422d17000000000b20364b60758a9f937e69543e2914000000000000000014293e53697e93927d67523d28120000000000000d23384d62788d9a85705b372715010000000000000000000000000000000000000000000000000000000000000000021527384b6074879d8875604b3928160300000000000000000000152a40556a7f959e89745746331e0a000000000000000000000000000000000000000000000000000000000000131c30435460738398a09c897c6d61584c46393632282927262526272a2d363a474c5f677a8892826e5c4a36220d0000000000000000000001132330393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494746433f3b363329211e160a040000000000000000000000000000000000000000000000000000000000000004172a3a475d606060575245351e0e00000000000000000000000000000000000000000000000000000000000000000000000000000b1f344859707575756c62513e2914000000000000000000000000000000000000000000000000001c3145596b73757575757575757575757575757575757575757575757575757575757575655d4b37230e000000001d31465a6b7475756a61503c281300000000000000000000000000000000000000000f253a4f647a8f8d78634d382c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c30455a6f8597826c57422d1700000000081d31445573889d96816b56412c16010000000000000014293e53697e93927d67523d28120000000000000b20364b60758a9d88725544311d080000000000000000000000000000000000000000000000000000000000000000000a1d314455687d93947f695746321e0b0000000000000000000013283d52687d92a78b76614c36210c000000000000000000000000000000000000000000000000000000000000011426364455607482949f9e9082766a6157504b45383e3c3b3a3b3d403e4a4f59616d7d8a9d9d8f79644f3a240f000000000000000000000a1e30414d5260606060606060606060606060606060605f5e5d5b5854504c46393632281f170c0200000000000000000000000000000000000000000000000000000000000a1f3347586f7575756c63523c2b1905000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778a8a8a816c56412c17010000000000000000000000000000000000000000000000001e34495e73898a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7b65503a2510000000001f34495e748a8a8a7f6a55402a1500000000000000000000000000000000000000000f253a4f647a8f8d78634d4141414141414141414141414141414141414141414141414141455a6f8597826c57422d1700000000021527375b70859b99836e59442e19000000000000000014293e53697e93927d67523d2812000000000000081d31445573889d8a75604b35200b000000000000000000000000000000000000000000000000000000000000000000021527374b6074879d8875614b3928160300000000000000000010253a50657a8fa38e79634e39240e00000000000000000000000000000000000000000000000000000000000000081827374556606d7f8d9c9f97897f766d6560565653515050515255585c646c7782919e9f927f695c4a36220d000000000000000000001025394d5f677575757575757575757575757575757575757372706e69656157524b453933291d150a000000000000000000000000000000000000000000000000000000000c21374c61768d8a8a816c5a4835200e000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6075899f99846e59442f19000000000000000000000000000000000000000000000000001a2f445a6f8499a8ab9f9a9ea79f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927d68533d2813000000001c31475c71869c97826d57422d1800000000000000000000000000000000000000000f253a4f647a8f8d7863565656565656565656565656565656565656565656565656565656565a6f8597826c57422d170000000000182e43586d83989b86715b392816030000000000000014293e53697e93927d67523d2812000000000000021527375b70859a8d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000091d314455687d92947f695746321e0b0000000000000000000d23384d62788dab917b66513c2611000000000000000000000000000000000000000000000000000000000000000009192738454b61697b86959e9e948a827b756f6c6866656566676a6e737a818a979f9d8c7e69614f3e2e1b070000000000000000000012273c52677d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898786837f7a766e6760574c463a31271a0f01000000000000000000000000000000000000000000000000000012273c51677c91ab9f8b78624d3c2b1905000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879c9b86715c3a2917040000000000000000000000000000000000000000000000000f24394f647a8a9e9f8c84888c8d8e8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8e7d67523d2712000000001a2f44596f84999a856f5a36251300000000000000000000000000000000000000000f253a4f647a8f8d786b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6f8497826c57422d170000000001162b40566b80959e89735746321e090000000000000014293e53697e93927d67523d281200000000000000182e43586d83988f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000021527374b6074879d8875614b3929160300000000000000000b20364b60758a9f937e69533e29140000000000000000000000000000000000000000000000000000000000000000000a1a2731434f5d6574808a969e9e97908984817e7c7b7a7b7c7f83888f979f9f97887b68604f4232201000000000000000000000000f253a4f647a8f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9c9b9894908a847c756b61584b45382c1f130500000000000000000000000000000000000000000000000005182b3b576c8197aca997816c5a4835200e000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849a9e89745846331f0a0000000000000000000000000000000000000000000000000d22364a5c657b8a9e9984747678797a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79675f4d39251000000000172c41576c81969c87725443301c07000000000000000000000000000000000000000f253a4f647a8f9781818181818181818181818181818181818181818181818181818181818181808797826c57422d17000000000013293e53687e93a78b76614b36210c0000000000000014293e53697e93927d67523d281200000000000000162b40556b8095927d68523d28130000000000000000000000000000000000000000000000000000000000000000000000091d314455687d92947f695746321e0b0000000000000000081d31445573889d96806b56412b16010000000000000000000000000000000000000000000000000000000000000000000a151d323f4b56606b778189929a9f9f9a969391908f909295989da69e968b8277655d4e423224140200000000000000000000000d22374d62778ca9a1998a8a8a8a8a8a8a8a8a8a8a8a8a8a8b8c8e92959b9f99918980766a6056493d3123150700000000000000000000000000000000000000000000000b2034485972879ca49c9f8b78624d3c2b1905000000000000000000000000000000000000000000000000000000000000000000000000172d42576c8297a78b76614c36210c000000000000000000000000000000000000000000000000071b2d3e4b5d657a899e99837462646464646464646464646464646464646464646464635b4d41301e0a00000000142a3f54697f949f8a75604a35200b000000000000000000000000000000000000000f253a4f647a8f9b97969696969696969696969696969696969696969696969696969696969696969b97826c57422d17000000000011263b50667b909b8e78634e39230e0000000000000014293e53697e93927d67523d28120000000000000013283e53687d93957f6a55402a150000000000000000000000000000000000000000000000000000000000000000000000011527374b6074879d8875614b3929160300000000000000021527375b70859a98836e59432e1904000000000000000000000000000000000000000000000000000000000000000000000215212e38454b59616b757d848a9094989b9c9d9e9d9d9b97948f8881786d61584c3f312414060000000000000000000000000b20354a60758a9f998375757575757575757575757575757677797c80858b939c9e95897f74635b4e4233251608000000000000000000000000000000000000000000000d22374c62778ca49c869c97816c5a4835200e000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a38e79644e39240f0000000000000000000000000000000000000000000000000010202e3f4b5c647a899e9a847561574f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4e4a3d302313010000000012273c52677c91a98c77624c37220d000000000000000000000000000000000000000e24394e63798586868686868686868686868686868686868686868686868686868686868686868686867f6a553f2a1500000000000e23384d63788586857a644f3a250f0000000000000014293e53697e93927d67523d28120000000000000010263b50657b9097826d58422d18000000000000000000000000000000000000000000000000000000000000000000000000091d314455687d92947f6a5746321e0b0000000000000000182e43586d83989b86705b46311b06000000000000000000000000000000000000000000000000000000000000000000000003101a28323b474c5760686f757b7f8286878889888785827f79746b635b4c473a2f21130600000000000000000000000000071c30435472879c9b867160606060606060606060605460616264676b70777e86919c9e948579686050433326160700000000000000000000000000000000000000000012273d52677d929f8c7b919f8b78624d3c2b1906000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a6917c66513c2711000000000000000000000000000000000000000000000000000210212e3e4b5c647a899d9a84756158473a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39362d1f130500000000000f253a4f647a8fa48f79644f3a240f000000000000000000000000000000000000000c21364a5b637171717171717171717171717171717171717171717171717171717171717171717171716a61503c281300000000000c2035495a63717171645c4b37220d0000000000000014293e53697e93927d67523d2812000000000000000e23384e63788d9a856f5a362614010000000000000000000000000000000000000000000000000000000000000000000000011527374b6074879c8975614b392917030000000000000014293f54697f868784705a45301b05000000000000000000000000000000000000000000000000000000000000000000000000000a161e2a3439454b525660656a6d707273747372706d696460554e493d332a1c11030000000000000000000000000000001325365a6f849a9e897357464a4a4a4a4a4a4a4a4a434a4b4c4f5256586169737c86959f9b8a7e6a615044332515030000000000000000000000000000000000000005192b3c576d82979c8675879c97826c5a4835200e00000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4937e69543e291400000000000000000000000000000000000000000000000000000310202e3e4a5c6479889d9a84766158473a2a252525252525252525252525252524211a0f010000000000000d22374c62778ca9917c67513c271200000000000000000000000000000000000000071a2d3d4a4e5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c55504333200d000000000006192c3c494d5c5c5c4f4b3e2e1b080000000000000014293e53697e93927d67523d2812000000000000000b21364b60768a9d87725443301c08000000000000000000000000000000000000000000000000000000000000000000000000091d314455687d92947f6a5746331e0a0000000000000012273b4f61697171706655412d18030000000000000000000000000000000000000000000000000000000000000000000000000000020c181f28323638454b5055585b5d5e5e5e5d5b58544f4b4437352c1f180c0000000000000000000000000000000000182d42576d8297a78b76614c36353535353535352530353637393d3a474c54606774808b9d9f927f6b625043322111000000000000000000000000000000000000000b2035485a72879d97826d7e939f8b78624d3c2b1906000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca996816c56412c170100000000000000000000000000000000000000000000000000000210202d3d4a5b6379889d9b85766158473b2a1d0f0f0f0f0f0f0f0f0f0f0f0f0e0c0700000000000000000b20354a60758a9f947f69543f2a1400000000000000000000000000000000000000000f1f2d36394646464646464646464646464646464646464646464646464646464646464646464646463f3c332515030000000000000e1e2c35384646463a372e2010000000000000000014293e53697e93927d67523d281200000000000000091e32455673889d8a75604b35200b000000000000000000000000000000000000000000000000000000000000000000000000011527374b6073879c8976614b36210c000000000000000c1f32434f545c5c5a55483725120000000000000000000000000000000000000000000000000000000000000000000000000000000000040a161e212832363b3f4346474849484846423f3a353126211a0e04000000000000000000000000000000000000152a3f556a7f94a38e79634e3924202020202020131c20212224272a3336434a55606a7a889c9d94806b614f3f2f1e0e0000000000000000000000000000000000000d22384d62788da5927d6875889d97826d5a4935200e000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9f99846e59442f190000000000000000000000000000000000000000000000000000000002101f2d3d4a5b6378879d9b85766159483b2b1d0e000000000000000000000000000000000000000000071c30435472879c96816c57412c170200000000000000000000000000000000000000010f1a21243131313131313131313131313131313131313131313131313131313131313131313131312a2820150700000000000000000e19202331313125221b1002000000000000000014293e53697e93927d67523d281200000000000000021628385b70869b8d77624d38220d00000000000000000000000000000000000000000000000000000000000000000000000000091d314455667c8d947f6a553f2a1500000000000000031424323b3f47474541372a1a080000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b161e21262a2d313233343332302d2a24201d140906000000000000000000000000000000000000000012283d52677d92a6917b66513c26110b0b0b0b0000070b0c0d0f12181f253037444b5c6478869c9e947f6a5d4c3c2b1906000000000000000000000000000000000013283d53687d92a58d7862697e939f8b78624d3c2c1906000000000000000000000000000000000000000000000000000000000000000000071c30435472879c9b86715c3a29170400000000000000000000000000000000000000000000000000000000010f1f2d3d495a6378879c9b86776259483b2b1e0e0000000000000000000000000000000000000000001325365a6f859a99846e59442f1900000000000000000000000000000000000000000000070c0e1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c15130d0300000000000000000000060c0e1c1c1c180e0c0600000000000000000014293e53697e93927d67523d28120000000000000000192e43596e83988f7a654f3a251000000000000000000000000000000000000000000000000000000000000000000000000000011426374c5e667a7e7e68533e2813000000000000000006141f27293232302d251a0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b1015181b1d1e1f1e1d1b18140f0b08010000000000000000000000000000000000000000000010253a4f657a8fa4937e69533e29140000000000000000000000000408131c27313e4b5a6277879d9f8d7b655a4835201200000000000000000000000000000000061a2c3d586d82989d87725a6075889d97826d5a4935200e000000000000000000000000000000000000000000000000000000000000000000001325365a6f849a9e89745846331f0a0000000000000000000000000000000000000000000000000000000000010f1f2c3c495a6278879c9c86776259483c2b1e0e0000000000000000000000000000000000000000182d42586d82979b86715c39291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24272e2d2321190e000000000000000014293e53697e93927d67523d28120000000000000001162b41566b8096927d67523d28120f0f0c0a0400000000000000000000000000000000000000000000000000000000000000000009192f404c5c646968604e3a2611000000000000000000030c12141c1c1b18120800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daa96816b56412c1601000000000000000000000000000009151d2e3c485963798a9e9e8978624d40301a0a0000000000000000000000000000000c2135495b73889d98826d5856697e949f8b78624d3c2c1906000000000000000000000000000000000000000000000000000000000000000000172d42576c8297a78b76614c36210c000000000000000000000000000000000000000000000000000000000000010f1e2c3c495a6277869c9c8677625a493c2c1e0f01000000000000000000000000000000000000152b40556a80959e89735746331e0a0000000000000000000000000000000000000000000000000000000000000000000000080d0f10100e080000000000000000000000000000000000000000000000000000000000000007152230393c434238352c1e100200000000000014293e53697e93927d67523d2812000000000000000014293e53697e93947f6a553f2a242424221f180c00000000000000000000000000000000000000000000000000000000000000000012222f3e4b4f54534e42311e0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f131517171614110d0b0500000000000000000000000000000000000000000000000b20354b60758a9f98836e59432e190000000000000000000000000000000002101e2b3b495b667c91a09a846f5e4c3828160200000000000000000000000000000e23384e63788da6927d68524b6075889d97826d5a4935200e000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94a38e79644e39240f00000000000000000000000000000000000000000000000000000000000000000e1e2b3c48596277869b9c8778625a493c2c1f0f01000000000000000000000000000000000013283d52687d92a78b76614b36210c00000000000000000000000000000000000000000000000000000000000000000002101b22252625231c11030000000000000000000000000000000000000000000000000000000000152532404d5159574d493c2d201000000000000014293e53697e93927d67523d2812000000000000000011263b51667b9097826d57423939393937342a1c0c00000000000000000000000000000000000000000000000000000000000000000412202e373a3f3e3a3124130200000000000000000000000000000000000000040a0c111416171614110d0b05000000000000000000000000000000000001090b0b03010000000000000000000000000001080b141c2024282b2c2c2b29262220180e0c070000000000000000000000000000000000000000081d31445572879d9b86715b3928160300000000000000000000000000000000000e1d2c3c4d5e6d8298a2917c665645321e08000000000000000000000000000013253653687e93a58d78624d4556697f949f8b78624d3c2c1906000000000000000000000000000000000000000000000000000000000000000012273d52677c92a6917c66513c27110000000000000000000000000000000000000000000000000000000000000000000e1e2b3b48596277859b9c8778635a493d2d1f0f010000000000000000000000000000000010253b50657a90a38e79634e39240e00000000000000000000000000000000000000000000000000000000000000000010202e373a3b3a372e2111000000000000000000000000000000000000000000000000000000000b1b32434f5e666e6d635b4a3e2d1b07000000000014293e53697e93927d67523d281200000000000000000e24394e63798e9a846f5a4f4f4f4f4f4c473a2a1c0c000000000000000000000000000000000000000000000000000000000000000002101b22242928261e1306000000000000000000000000000000000001080c171f2127292b2c2b2a27222019100b08010000000000000000000000070b161f2020181610060000000000000000000008141c20263035393d404141413f3c37342b24211a0f07000000000000000000000000000000000000011426375a70859a9e88735746321e090000000000000000000000000000000000000e1e30404c6177899e9d8775604b36251300000000000000000000000000071c3043546e83989d87725a49384b6075889e97826d5a4935200e000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4947e69543f2914000000000000000000000000000000000000000000000000000000000000000000000e1d2b3b48596176859b9d8778635b4a3d2d1f10020000000000000000000000000000000e23384d63788dab907b66513b26110000000000000000000000000000000000000000000000000000000000000000081b2e3f4b4f50504b3f2e1a0a0000000000000000000000000000000000000000000000000000031628394f61697c838279645c4a36220d000000000014293e53697e93927d67523d281200000000000000000c21364b61768b9c87726464646464646159473a2a1704000000000000000000000000000000000000000000000000000000000000000000070d0f1413110b02000000000000000000000000000000000009141d202a33373c3f4041403f3c38352b26201c1408030000000000000008131c202c3435352e2b23180a0000000000000005131826303536434b4f525556575654514d483b39362d221b10030000000000000000000000000000000000182d42586d8297a78b76614b36210c00000000000000000000000000000000000000121f3447596a7f94a5937e695443301c070000000000000000000000000b20354a6074889e98826d583c3245576a7f949f8b78634d3c2c1906000000000000000000000000000000000000000000000000000000000000000d22374d62778ca996816c56412c1701000000000000000000000000000000000000000000000000000000000000000000000d1d2a3a47586176859a9d8879635b4a3d2d20100200000000000000000000000000000b20364b60758a9f937e68533e291300000000000000000000000000000000000000000000000000000000000000000d22374b5d6465655d4b3828160300000000000000000000000000000000000000000000000000091e324657697f9198978a7a644f3a240f000000000014293e53697e93927d67523d281200000000000000000a1e33465773899e8b7a79797979797977615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000310192631353a474c515456575554514d483c3b3530261e160a0000000000081825303541494a4a433f3628180600000000000e19203036434b50546064686a6c6c6b69666259564e4a3d372e1e170b00000000000000000000000000000000152b40556a8095a38e78634e39230e0000000000000000000000000000000000000004182a3a4b6176899e9c8773604a35200b0000000000000000000000000f24394e64798ea7927d68533d28394b6175899e97826d5a4935200e000000000000000000000000000000000000000000000000000000000000000b20354a60758a9f99846e59442f190000000000000000000000000000000000000000000000000000000000000000000000000d1c2a3a47586175849a9d8879645c4a3e2d20100200000000000000000000000000091d31455673889d95806b5636261401000000000000000000000000000000000000000000000000000000000000000f253a4f647a7b7b655645321e09000000000000000000000000000000000000000000000000000c21364b61768a9faea89b86715b46311c060000000014293e53697e93927d67523d28120000000000000000031729395c71869b9f8e8e8e8e8e8e8e8a76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000714212e37444b52586166696b6c6b6966625a57504b433632281b1305000000132536434a565e606058534636231000000003111e2b35414d5460666c74797d808181807e7b77726b635b4f4b3e33291b0f01000000000000000000000000000013283d52687d92a6907b66513b261100000000000000000000000000000000000000000c1e3346576b8095a4907b655038281603000000000000000000000114263754697e94a58d78624d38233246576a7f949f8c78634d3c2c1906000000000000000000000000000000000000000000000000000000000000071c30435472879c9c86715c3a2917040000000000000000000000000000000000000000000000000000000000000000000000000c1c2a3a46576175849a9d887a645c4a3e2d201002000000000000000000000000021527385b70859b98836e5443301c08000000000000000000000000000000000000000000000000000000000000061b31465b7085908b75604b36210b000000000000000000000000000000000000000000000000000f24394e64798ea9bab49f8a755f4a35200a0000000014293e53697e93927d67523d2812000000000000000000192e44596e838c8c8c8c8c8c8c8c8c8c7a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061425323f4b55606770777c7e8081807f7c78736c6560544b45393020180d02101c304354606b7475756d64533f2b1601000011212e3c484d5f67737b82888e929596969694918c8780796f645c4c46392d1f11030000000000000000000000000010253b50657a90a5937e68533e29130000000000000000000000000000000000000000031729394e63788da399836e5645321e0900000000000000000000081d3144556f84999d88725a49352029394b6176899e97826d5b4935210e000000000000000000000000000000000000000000000000000000000000001325365a6f859a9e89745847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000c1c29394657617483999e897a645c4a3e2d201002000000000000000000000000192e43586e83989d8874604b35200b00000000000000000000000000000000000000000000000000000000000003192e43586e83988d78634e38230e000000000000000000000000000000000000000000000000000c21364b61768a9fafaa9c86715c47321c070000000014293e53697e93927d67523d28120000000000000000000c21364c61767777777777777777777774604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003142432434f5d65737d858b919495969594918d88817b736960574d41342b1d122030414a607280898a8a826d58432e180300081c2e3f4b5a62707d8790979d9f9a9694939495989d9c968e847a6d61574a3d2e2111020000000000000000000000000d23384d62788dab96806b56412b160100000000000000000000000000000000000000000b2135495b70859b9f8a75604b36210b000000000000000000000b20354b6074899e98826d583c2c191e3346576a7f959f8c78634d3c2c1906000000000000000000000000000000000000000000000000000000000001142637576d8297a88c76614c38281502000000000000000000000000000000000000000000000000000000000000000000000000000c1b29394656607483999e897a645c4a3e2d2010010000000000000000000001162b41566b8096a68f7a655038281603000000000000000000000000000000000000000000000000000000000001162b41566b8096907b66503b261100000000000000000000000000000000000000000000000000091e3246576a7f929a998c7b65503b2610000000000014293e53697e93927d67523d28120000000000000000000a1e3346576162626262626262626262605645311d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112131424f61697b87929b9f9b95918f8f9093979c9790877e75675f4d483b2f222d3e4d5f6b80959e9b8575604b36210b00000e23374b5d657884929ca39b928a85817f7e7e8083878e969f9a8d8276645c4b3f2e20100000000000000000000000000b20364b60758a9f98836e59432e19000000000000000000000000000000000000000000061a2c3d556a7f94a9907b66503b2611000000000000000000000f243a4f647a8fa8927d68533d28131729394c6176899e98826d5b4935210e0000000000000000000000000000000000000000000000000000000000081d3144556b8095a58f7a655645321d1100000000000000000000000000000000000000000000000000000000000000000000000000000b1b29384556607483999e897a645c4a3e2d1f0f000000000000000000000014293e53697e93a897826c5645321e0900000000000000000000000000000000000000000000000000000000000013293e53687e93937d68533e2813000000000000000000000000000000000000000000000000000316283950616a7d85837a655d4c38230e000000000014293e53697e93927d67523d281200000000000000000003172939464c4c4c4c4c4c4c4c4c4c4c4b45382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182e3f4e60697f8c9ca29a8e85807b7a7a7b7d82878e969c93877d6f62594c40313a4a5c677d919e9e8878625645321e09000010253a50657b899aa29d91867d76706c6a69696b6e7279808a979f97877a655d4b3e2e1d0d0000000000000000000000081d31445573889d9b86705b392816030000000000000000000000000000000000000000000f24394f64798ea796816c5738281602000000000000000002152738546a7f94a68d78634d38230e0b1f3346586a80959f8c78634d3d2c1a06000000000000000000000000000000000000000000000000000000000b20354b6074879db09c8674604b3f2e1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000b1a28384556607483999e897a645c4a3d2d1e0e0000000000000000000011263b51667b90a69e8975604b36211200000000000000000000000000000000000000000000000000000000000011263b50667b9095806b56402b1601000000000000000000000000000000000000000000000000000b1b3343505f686f6e645c4c3f2f1c08000000000014293e53697e8d8d7d67523d2812000000000000000000000b1b293336373737373737373737373631271a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364b5d687e939f9d94847a706a66646466686d7279818a959d928477665e4e424759647a8a9f9f8c7b655a4838281603000013283d53687d929e96877c716861575655535455585b636b77828c9e9d8a7b655c4b3b2b180800000000000000000000021527375b70859a9e88735745321e090000000000000000000000000000000000000000000b20354a6074899e9c87725645321e090000000000000000091d3145566f849a9d88735a4935200c0417293a4c6176899e98826d5b4935210f000000000000000000000000000000000000000000000000000000081c2e3f52677c91a39b9f96806b5d4b3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000a1a28384556607483999e897a645c4a3c2b1c0c0000000000000000000e24394e63798ea3a7927d6853402f180800000000000000000000000000000000000000000000000000000000000e23394e63788e98836d58432e18000000000000000000000000000000000000000000000000000000152533414e525a594f4b3e2f21110000000000000c21364b6175787876614b36210c00000000000000000000000b171e2122222222222222222222201d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354657b8c9f9d947f72645c55514f4f5153575c646b76808b9b9a897c686050556177879d9f937e685d4b3c2b1a0a00000011253a4e606a7f898175665e524b46393f3e3f403d494e59626d7c8a9d9e8a7a6459483625130000000000000000000000182e43586d8398a68b76604b36210b000000000000000000000000000000000000000000071c30435470859a9f8a75604b36210b00000000000000000b20364b6075899f98826d583c2c1906000b1f3347586b80959f8c79634e3d2c1a0600000000000000000000000000000000000000000000000000000e23374b5d71859b9b858d9f8d7b655846331f130000000000000000000000000000000000000000000000000000000000000000000000000000000a1a273845566074839a9e897a645a493a2a190900000000000000000c21364c61768ba79f8a86715e4c36251300000000000000000000000000000000000000000000000000000000000b21364b60768b9b85705b382815020000000000000000000000000000000000000000000000000000071523313a3d45443a372e2011030000000000000a1e334657616262615746321e09000000000000000000000000030a0c0d0d0d0d0d0d0d0d0d0d0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6072859ba2957f6a60544a3e3c3a3a3b3e3d4a4e58616b7985969e8c7e6b626073849aa297816c604e3f2e1d0d000000000b1e314250616a746c61574d403632292a29292b2c363b484c5e667a889d9e8877625443301c0a00000000000000000000162b40556b8095a38d78634e38230e00000000000000000000000000000000000000000000132536566c8196ab8e79644e39240f000000000000000010253a50657a8fa8927d68533d281300000417293a4c6176899e98826d5b4935210f00000000000000000000000000000000000000000000000000071a2d3d50657b90a3937e82979d8776614c41301d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000a1a273845566075849a9d887862594737261401000000000000000a1e33465774899e9983907b665443301c0c00000000000000000000000000000000000000000000000000000000091e32455773889d88735645321d0900000000000000000000000000000000000000000000000000000005131e2528302f25221b10020000000000000003172939464b4d4d4b46392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215283852677c91a39a846f614a43362d26252526282d363a474c5b637380939f93806b6c8197a29a8473604b423121100000000000011323334350555e564b463930211e16151414161a212b34404c5c647a8b9f9a8472604a3928160300000000000000000013283e53687d93a5907b66503b26110000000000000000000000000000000000000000000013293e53687e93a7917c67523c27120000000000000003162838556a8095a68d78634d38230e0000000c1f3347586b80959f8c79634e3d2c1a060000000000000000000000000000000000000000000000000c21364a5b6f84999f8b7777899e98826d5f4d3c2b18080000000000000000000000000000000000000000000000000000000000000000000000000000000a1a283845576176869c9c8777615544311d1100000000000000031729395c71869c947f878572604a3a2a1808000000000000000000000000000000000000000000000000000000031628395b70869b8a75604b36200b00000000000000000000000000000000000000000000000000000000010b10131a190f0d08000000000000000000000b1b29333638383632281b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f1417191b1b1c1b1a191614100c0a040000000000000000000000000000000000000000000000091d3245566e83999f8c79634e43302518110f0f11131a212a333d4955606b7e8d9f95807e939f9d877661554431241403000000000000051525333c3f49413632281b120a0300000000060d18202f3d4a5c687e93a1927d685745321e0900000000000000000010263b50657b90a5937e68533e29130000000000000000000000000000000000000000000011263c51667b91a695806a55402b1500000000000000091e32455670859a9d88735a4935200c00000004172a3a4c61778a9e98826d5b4935210f000000000000000000000000000000000000000000000005182b3b4e63798ea198836e677d92a0927d675a48362513000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a283946586278889d9a8473604b3f2e1a0a00000000000000192f44596e849995807e927d67584736251305000000000000000000000000000000000000000000000000000000192e43596e83988d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e212323211e160b0000000000000000000000000000000000000000000000000000000000000000000000000000040a0c151d2025292c2e30313130302e2c2926221f18110b0902000000000000000000000000000000000000000b20364b6075899e9a85705b4a361c13080000000000070c171f2c37444b60687e8d9f958c9f9f8a7a645847372715060000000000000000071520282a342c211e160b00000000000000000005121f2d3e4e606f849a9e8875604b3621100000000000000000000e23384e63788dab95806b56402b16010000000000000000000000000000000000000000000f24394f64798ea496816c57412c17000000000000000b21364b60758a9f98826d583c2c1906000000000c1f3347586b80969f8c79634e3d2c1a06000000000000000000000000000000000000000000000b203448596d8298a28f7a645f6e83989e8978625443301c0f000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b293a485a647b8c9f95806b5d4b38271502000000000002172c41576c81969782758788776154433020180d0d0f14110f090000000000000000000000000000000000000001162b41566b8096907b65503b26100000000000000000000000000000000000000000000000050b0d1416100e09000000000000000000000000000000000000030a0c0d0d0c090300000000000000000000000000000000000000000000000000000000000000000000000000050c171f212832363a3e4144454646464543413e3b37342a27211e160a0800000000000000000000000000000000000e24394e63798ea8947f69543d2d1a000000000000000000040f192731424e60687e8d9f9f9f917d675c4a3a2a190900000000000000000000030d13151f170c0903000000000000000000000001102031424f647a8fa2937e69543e2e1b0800000000000000000b21364b60768a9f98836e58432e19000000000000000000000000000000000000000000000e23384d63788da298826d58432d180000000000000010263b50657b90a9927d68533d2813000000000004182a3a4c61778a9f98826d5b4935210f0000000000000000000000000000000000000000000417293a4d62778b9f9b85705c4c6176889d9a8472604a3d2d1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3c4b5d6a7f949f8d7b655645311d0b000000000000142a3f54697f949a846f7c918372604a44342b2222242926241d12040000000000010a101215151515151515151515293e53697e93937d68533e281515151515151515151515150b080100000000000000000d192022292b26231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e192029333638454b4f5356595a5b5b5b5a585654504c473a3c363228221b100900000000000000000000000000000010263b50657b90a5907b66513b2611000000000000000000000009151d32424b6075879cab96816c5f4d3d2d1c0c0000000000000000000000000000000901000000000000000000000000000000021422374b5c6f849a9c87725c4b37220d0000000000000000091e32455673889d9b85705b382815020000000000000000000000000000000000000000000d22374d62778ca299836e59442e1900000000000003172939566b8095a68d78634d38230e0000000000000c1f3447596b81969f8c79634e3d2c1a0600000000000000000000000000000000000000000a1f3346586b8096a5917c66514758667c909f947f695b4a38281502000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2e3f4a6072859a9c8674604b39291603000000000012273c52677c919c86716f8495806b624c483b3837393e3b382f22120000000005121d25272b2b2b2b2b2b2b2b2b2b2b3b51667b9095806b55402b2b2b2b2b2b2b2b2b2b2b2b2b201d1409000000000003111d2b34373e403b382f21170900000000000000000000000000000000070d0f16181816110b09020000000000000000000000000000000000000000000000000000000000000a161e2b353a464c53566064696c6e707071706f6e6b6965615957514b4538372e241d12080000000000000000000000000012273d52677c92a48e79644f39240f00000000000000000000000e1e2e3f4f606d8297a4a89b8674604b3d2d1a07000000000000000000000000000000000000000000000000000000000000000000081b2e3e51667c91a58f7a644f3a250f0000000000000000021628385b70869b9d88735645321d090000000000000000000000000000000000000000000c21374c61768ca19a846f5a452f1a0000000000000a1e33465770859b9d88735a4935200c00000000000004182a3b4c62778a9f98826d5b4935210f00000000000000000000000000000000000000021527384c6176899e9c8773604b3a4c5e6c81979f8b79635645321d110000000000000000000000000000000000000000000000000000000000000000000000000000000000101c30435464798c9f947f6a5746321e0a00000000000f243a4f64798f9e897362788995806e6259504d4c4f53514c402f1d09000001122330393c4040404040404040404040404e63798e98836d58434040404040404040404040404035312619090000000011212e3b484d5456504c40352717040000000000000000000000000002101b22242b2d2d2b26211e160a020000000000000000000000000000000000000000000000000000010f1b28323c484d5861686f757a7e8183858686858583817e7b77726c6660564f4b3e3930231c1104000000000000000000000012273c52677c91a38e78634e39230e000000000000000000000a1b2b3c4b5d697e939f9e929f947f6a5b4a362111000000000000000000000000000000000000000000000000000000000000000000001020364b6075899e95806b55402b16000000000000000000192e43586e83989f8a75604b36200b0000000000000000000000000000000000000000000c21364c61768ba19a85705a45301b0000000000000c21364c61768b9f98836d583c2c1906000000000000000c1f3448596c81969f8c79634e3d2c1a06000000000000000000000000000000000000091d314556697f94a7937e69544330404b6075869c9c8674604b3f2f1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000001325364a5c6c81979e8976614b36211000000000000d22374c62778ca78b7560667c8d9583776c6662626469665e4c38240f00000a1d30414d525555555555555555555555555561768b9a85705b55555555555555555555555555554b44372614010000081c2e3f4b5962696b655e52453523120000000000000000000000000210202d363a404342403b3632281d150a00000000000000000000000000000000000000000000000004121f2d39454b5a626c767d848a8f9396999998989999989693908c87827c756d645c514d40372e1f170c0000000000000000000010253b50657a90a5907a65503b251000000000000000000003162839485a657b8c9f9e8a7d8d9f8b79634e3f2e1c08000000000000000000000000000000000000000000000000000000000000000000091d3245566f859a9a85705b3a2a18040000000000000001162b41566b8096ab8d78634e38230e0000000000000000000000000000000000000000000d22374c62778ca199846f5a442f1a00000000000011263c51667b91aa937d68533e2813000000000000000005182a3b4d62778a9f98836e5b4936210f0000000000000000000000000000000000001325364b6074889d9e8975614b3626324557647a8c9f96806b5d4b3a291704000000000000000000000000000000000000000000090e1013120b0801000000000000000000000008182d3d4d62788c9f937e69543e2d1b07000000000b20354a60758a9f8d77625e697f93998a817b7777797e7c66513b261100001025394d5f676a6a6a6a6a6a6a6a6a6a6a6a6a6a73889d88736a6a6a6a6a6a6a6a6a6a6a6a6a6a6a605544311d0800000e23374b5d65787e807b6d635241301d0a000000000000000000000010202e3e4a4f56585755514b453831271a0c00000000000000000000000000000000000000000000051322303d4a57606b78818a929a97928d8986848383838485888a8e9196979189827a70665e504b3f332a1c0c0000000000000000000d22384d62788da6927d67523d2812000000000000000004121e3245576278899e9f8d7c6d82979a846f5d4b37231100000000000000000000000000000000000000000000000000000000000000000002152838566b80969e89745847331f0a000000000000000013293e53687e93a5907b65503b26100000000000000000000000000000000000000000000e23384e63788da398836e59432e19000000000004172a3a566c8196a68d78634d38230e0000000000000000000d203448596c81979f8c79634e3d2d1a0700000000000000000000000000000000071c304354687d92a695806b5746321828394a5c6a80959f8d7b655847331f130000000000000000000000000000000000000003111c23262928201c140800000000000000000000000f2035495a6e83999d87725c4a36220d00000000071c30435472879c8f79644f61697e8d9d97908d8c8e93826d58422d18030012273c52677d808080808080808080808080808080889e8c8080808080808080808080808080808073604b35200b0005192b3c50657b89939590816d5f4d39241000000000000000000000081b2e3f4b5c646b6d6d6b6660564b45382a1c0c000000000000000000000000000000000000000004132331404d5b6375808a969b9189827c7874716f6e6d6e6f707275787c81868d94978f857c70655d4c473a2a170400000000000000000b2035485a73889d97826c573f2e1c0800000000000001122233434b6075859ba0947f6a6177899e8f7a65503f2e1c0800000000000000000000000000000000000000000000000000000000000000000013293e53687e93a88c77614c37220c000000000000000011263b51667b90a6937d68533e281300000000000000000000000000000000000000000010253a50657a8fa596816c57412c1700000000000a1f33475871869b9d88735b4935210c00000000000000000005182b3b4d62788b9f98836e5b4a36210f000000000000000000000000000000000b20354a6073869c9f8b77624d3928161b2e3e4b6073859b9d8776614c41301e0e00000000000000000000000000000000000011212f383b3e3d35302618080000000000000000000006192c3c51677c91a58f79644f3a240f00000000001325365a6f849a907b66514f60697b88949ca4a1aa9b86715c46311c0700172c42576c819595959595959595959595959595959ea69f9595959595959595959595959595958d78624d38220d000b2035485a72879da8ab9f917c67513c2712000000000000000000000d22374b5d647a808282807b756a6056473a2a1a0a00000000000000000000000000000000000001122231414e5e667986959d91857c756d67625a5c5a595859595b556063676c71787f87909a91857b6d615847331f0a000000000000000005192b3c586d82979d87725d4b3723110000000000000f1f2f4050616e8298a398826e61586a7f959a846f5d4b37230c00000000000000000000000000000000000000000000000000000000000000000011273c51667c91a38e79634e39240e00000000000000000e23394e63788ea395806b55402b1600000000000000000000000000000000000000000013283d52687d92a7947f6a543f2a1500000000000c21374c61778b9f98836d583c2c1906000000000000000000000d203448596c81979f8c79634e3d2d1a070000000000000000000000000000071b2e3e51667b90a498826d5948341b0b101d31445563798a9f98826e5f4d3c2b180800000000000000000000000000000000091c2f3f4c5053524b4336261401000000000000000000000e22374c61778b9f947f6a553f2a150000000000172c41576c81888577624c424f5d65757f868c8e8e8b846f5a452f1a0500152a3f556a7f8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d959e9d948d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7b65503a2510000d22384d62778da5b7beac97826d57422d18020000000000000000000f253a4f647a8f9598979590897f746158473828150200000000000000000000000000000000000f1f2f404e60687c8a9c98877c71676055524d483c444343444437444b4e52575a636a737b848f9b8f8276614c37210c00000000000000000010253b50657b90a2907b65503f2f1b0b000000000b1b2c3d4c5e6a7f94a09b8575604b4c6176899e8f7a654f3a2a1804000000000000000000000000000000000000000000000000000000000000000010263b50657b90a48f7a644f3a250f00000000000000000c21364b61768ba798836d58432e1800000000000000000000000000000000000000000417293a566c8196a6917c66513c2611000000000012273c51677c91ab937d68533e2813000000000000000000000005192b3b4d62788b9f98836e5b4a36210f00000000000000000000000000000d22364a5c70859aa28e79644e3b2b180001152737495b697e93a0927d675a48362614010000000000000000000000000000000e23384c5d656867605443301c08000000000000000000000a1f33475871869c99836e59442e19000000000015293e51636c7371625948343f4c57606971777979766f6654412d1803000c21364b61757878787878787878787878787878788095947f78787878787878787878787878787876604b36210b000c21374c61768ca1b3b9a996816c56412c17010000000000000000000c21364b61758c8d8c8d90999e948476615645321d0e000000000000000000000000000000000a1a2d3d4c5e687e8c9f948275675f524b443738352b2f2e2e2e2f273135393c3c494d5460656f7a85928f7a644f3a250f0000000000000000000e23374b5d70859b99846f5d4b3928180800000818293a495b667c8d9f9e887862564546586b809698836e5847331f0a000000000000000000000000000000000000000000000000000000000000000011263b50667b90a58f7a65503a25100000000000000000091e32465773889e9a85705b38271502000000000000000000000000000000000000000a1f33465870859aa58c77624d37220d0000000005182b3b576c8197a68d78634e38230e0000000000000000000000000d2035485a6d82979f8c79634e3d2d1a0700000000000000000000000006192c3c4f647a8fa29a846f5c4a361d0d000009192c3d4a6072849a9e8978625443301c0f00000000000000000000000000000010263b50657b7e7d72604b3625130000000000000000000004182a3a596f84999c86715c47311c00000000000e22344551575e5c4c483b2a2f39454b54586164636057544737251200000a1e334657616262626262626262626262626262677c91947f6a6262626262626262626262626262605745321e09000a1f3347586f8499a2a79e8b79634e39240e000000000000000000000a1e324657647a7876777b83929f9a8574604b3c2b19060000000000000000000000000000021527384a5b667c8d9f8d7f6d61574d413631272320191a1918191a151d2023272c3536434a505d65737d8172604b35200b000000000000000000081c2e3f50667b90a1907b6557463626150901142636465863798a9e9f8c7b655a48383a4e63788d9f8a77614c37220c000000000000000000000000000000000000000000000000000000000000000012273d52677c92a38e79634e39240e0000000000000000031628395b71869b9d88735645311d09000000000000000000000000000000000000000c21364c61768a9f9d8872594834200b000000000b2034485972879c9d88735b4935210c00000000000000000000000005192b3c4d62788b9f98836e5b4a36210f0000000000000000000000000c2035495a6e8398a4907b66513e2d1b000000000f1c3043546277899e9a8473604b3d2d1a0a00000000000000000000000000071c31475c718693927f695443301c0700000000000000000000182d42586d82979e88735e49331e0000000000051626343e41494637342a1d1b2832363a474c4e4e4b453937291908000003172939464b4d4d4d4d4d4d4d4d4d4d4d4d4d4f64798f97826c574d4d4d4d4d4d4d4d4d4d4d4d4d4b4539281603000417293a4c6277848e90897d675b4a36210c00000000000000000000031629394b5c64636162666e7d8d9f96806b5a4935200b0000000000000000000000000000091d31455663798a9f927e69614b463930201d150d0b06000403040001080b0e1219202530353f4b5460686c605443301c08000000000000000000001123384c5e6e83999d8775615443312719101c3043546176869c9f937e685d4b3c2b35495b70859b937d68533727150200000000000000000000000000000000000000000000000000000000000003162838546a7f94a88c77624c37220d000000000000000000192e43596e83989f8a75604b36200b000000000000000000000000000000000000071a2d3d52677d92aa97826c573b2b1905000000000d22374d62778ca498836d583d2c1a06000000000000000000000000000e2035495a6d82979f8c79634e3d2d1a070000000000000000000004182a3a4d63788c9f9c8673604a35201000000000001325364859677d91a0947f695c4a3828150200000000000000000000000000152a40556a7f959d8773604a35201100000000000000000001172c41566c81969e89745f49341f000000000000081622292c3431221f180d0a161e212a333739393632281b190b000000000b1b293336383838383838383838383838384c61778c9a846f5a363838383838383838383838383632281b0a0000000c203448596272797a76675f4d3d2d1a0700000000000000000000000b1b2e3e4b4f4e4c4d515f6b80959f8b78624d38230d0000000000000000000000000005182b3b4b6074869c947f6a604f4333291b120802000000000000000000000000000608131c202e36434b53574b433626140100000000000000000000091c2f404c6176889d988272604b44372a2030414b60728399a297816c604e3f2e1e2c3d54697e9399846f5544311d08000000000000000000000000000000000000000000000000000000000000081e3245566f84999e8975604b35200b000000000000000001162c41566b8196ab8d78634d38230e0000000000000000000000000000000000000d21364a5b6f849aa5907b66503b2611000000000012283d52677d92a7937d68533e2813000000000000000000000000000006192b3c4d63788c9f98836e5b4a36210f000000000000000000000a1f3347586c8197a6937e685443301c07000000000008182b3b4d5f6d82989f8b7a645645321d11000000000000000000000000000e23394e63798ea28f7a65503f2e1b0b000000000000000001142637586d82989d88735e48331e00000000000000050e15171e1c0d0b05000003090c181f222424211e160a000000000000000b171e2123232323232323232323232334475974899c87725443302323232323232323232323211e160a0000000005182b3b485460646561574d41301f0f0000000000000000000000000010202e373a383738414b6176899e95806b553a2917040000000000000000000000000b203448596a809599836e615042321e170b000006080705000000000000000000000002090b10182630353d413530261808000000000000000000000000111f334758657b8b9f96816d6055483b313e4d5f6b8095a19a8473604b4231211124394e63798e9e8975604b36200b00000000000000000000000000040a0c13120c0a0400000000000000000a18293a4b6075899e99846f5544311d0800000000000000000014293e54697e93a5907a65503b251000000000000000000000000000000000000d1d2f404e63798c9f9d8773604b35200b0000000006192b3c576d8297a68d78634e38230e0000000000000000000000000000000e2035495a6d82989f8c79634e3d2d1a070000000000000000031628394c61778a9f9e8875604b362513000000000000000d1d30414c6176879d9c8674604b3f2f1c0c0000000000000000000000000c2135495b6f849a99846f5d4b3929180800000000000000081d3144556f84999c86715c47311c000000000000000000000209070000000000000000040a0c0f0e0b0903000000000000000000030a0c0d0d0d0d0d0d0d0d0d0d0d182a3b5c71879c8a75604a35200d0d0d0d0d0d0d0d0d0d0b09030000000000000d1d2b36434a4f504c4639302312010000000000000000000000000002101b22252321223246576d82979c87725847331f0a00000000000000000000000417293a4d62778a9e8877614c43332414050b0d161b1d1d1a150e0c0600000002080b14151d201d15141c20282c201c14080000000000000000000000000004172a3a4b5d667c8b9e96817362594e414a5c677d919e9d87776155443124140c21364a5b73889e8f79644f3a240f0000000000000000000000000c181f222827221f1814110f0d0c0d0f131c28364658687e93a7947e69543726140100000000000000000011263c51667b91a6927d68533d2813000000000000000000000000000000000c1b2b3b4c5e6e8398a7947f6a5443301c08000000000b2035485a72879d9d88735b4935210c00000000000000000000000000000006192c3c4e63798c9f98836e5b4a36210f0000000000000000091e3245576a8095a995806a56453218080000000000000000131f334658657b8d9f96816b5d4c3a2917040000000000000000000000061a2c3d4f657a8fa18f7b6557463625180c0200000000021020354b6074899e99846f5a442f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f84998c77624c37220d000000000000000000000000000000000000000d18253035393b3633291b120500000000000000000000000000000000080d0f0e0c16293952687d92a58c76614c37210c00000000000000000000000a1f3347586c8197937e6859473425150e1920222b3032322f2a23211a0f0609151d202928323632282c25221b170b08010000000000000000000000000000000c1c2e3f4c5e667c8a9c978477685f5059647a8a9f9f8a7a64594737271506071a2d3d546a7f89897d67523d281200000000000000000000000d1c2a33373d3c37342a2926242222232425303845546176879d9f8a77614c37210c000000000000000000000f24394e64798ea395806a55402b15000000000000000000000000000006111c2a394859667b90a09e8875614b36261401000000000d23384d62788da598836e583d2c1a06000000000000000000000000000000000e2135495b6d82989f8c79634e3d2d1a07000000000000011426374b6075889e9f8a77614c3828160000000000000000000417293a4b5d6c81969f8d7b655847331f130000000000000000000000000f23374b5d6f849a9c8675615443362a1d150d0b0b0c151d304050657a8fa7947f6a543f2a1500000000000000000000060c0e14161614110b080200000000000000000000000000000000000000000000000000000000000002172c42576c81978f7a644f3a250f000000000000000000000000000000000000000008131c202425211e170b00000000000000000000000000000000000000000000000f24394f64798ea48f7a654f3a251000000000000000000000000c21374c61768a9c8774604b3a2a18131e2b353840464847444038352c211a192731363e38454b4538413a372e221b10010000000000000000000000000000000011212f404c5e667986979a897d70666177879d9e917d675c4a3a2a190900000f273c4f616a7374675f4d3a2510000000000000000000000d1d2b3a474c53524c473a3f3c393837383936434a5660728298a596816c5847331f0a000000000000000000000c21364c61768ba798826d58432d180003030303030303030300050b0e19212e3a47576277889da2937e685746321808000000000013283d53687d92a8937e68533e28130000000000000000000000000000000000061a2c3d4e63798c9f99836e5c4a36210f000000000000081d314455697e93a797826d5947341a0a000000000000000000000c1c2f3f4b6074869c9d8876614c41301e0e0000000000000000000000081c2e3f4d62788a9e9882726054473a32282220202127313e4c5e6f8499a28e79634e39230e0000000000000000050f1a2123292c2c2926201d1509040000000000000000000000000000000000000000000000000000000000152a3f546a7f94917c67523c271200000000000000000000000000000000000000000000070b0f100c0a030000000000000000000000000000000000000000000000000c21374c61768ca8927d67523d28120000000000000000000005182b3b54697e94937e685544311c1323303c484d555b5d5c5a554e493d352c2737444b545c5660565c574f4b3f372e1c14080000000000000000000000000000000312222f404c5b6376818c9b92857b75849aa195806b5f4d3e2d1c0c0000000c2032434f545e5e524d41311e0a00000000000000000005182b3b485861686761595854514e4d4c4d4f51546066758298a09d8776614c3a2a1704000000000000000000000a1f33465874899e9a85705a372715181818181818181818191a1920222c353f4b596175859ba69a8472604a3929160000000000061a2c3d586d8398a68d78634e38230e0000000000000000000000000000000000000e2135495b6e83989f8c79644e3e2d1a0700000000000b20354b6074879d9f8c79634e3b2a18000000000000000000000000111e324556647a8b9f98826e5f4d3c2b18080000000000000000000000112035495a677d929e97817261594b45383836353737444b5c667c91a19a85705b4a36210c000000000000000d181f2c36393e41413f3b3631271f180c0000000000000000000000000000000000000000000000000000000012273c52677c91947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899e957f6a55402a15000000000000000000000b2034485970859b8976614b3727152130414d5a626b7072726f6a635b4e493d364455606971747574716c655d4f4b3e3026180a0000000000000000000000000000000412222f3d4957616c7a85909a90889aa2998372604a4130200f00000000031525323c3f49493d3a312313010000000000000000000b2034485962777d7c77716d69666462616264666c737c8698a09e8c7b655847331c0c00000000000000000000000417293a5c71869b9d88725544312e2e2e2e2e2e2e2e2e2e2e2f2b35383c494d5d6577849ba39d8877625443301b0b00000000000c2135495b73889d9d88735b4935210c000000000000000000000000000000000000061a2c3d4e63798c9f99836e5c4a36211000000000081c2e3f52677c91a599846f5b49361d0c000000000000000000000000021628384a5c6a7f94a0927d675a48362614010000000000000000000006192c3c4d5f6b80969e978377686056514d4b4b4c505560697a8a9e9e8f7a644f3d2d1a070000000000000d1d2a343d494e53565654504b4437342a1d140600000000000000000000000000000000000000000000000000000f253a4f647a8f97826c57422d17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c71879c97826d57422d18000000000000000000000d22374d62778b98836e574632191b2e3f4d5f677880858787847f786e635b4e435460747e868a8b8a86817a70645c4b4336271a0a00000000000000000000000000000004121f2c39464c5c64707b849a9da69c8675615443302312010000000000071520272a343428251e1305000000000000000000000d22374d62778c92918b86827e7b79777778797c8187919ca39b8a7c665d4b3a2a1700000000000000000000000000192f44596e84999f8a75604b434343434343434343434343443c484d525b636d7b879ba39e897a6459483625130000000000000e23394e63788ea698836e583d2c1a06000000000000000000000000000000000000000f21364a5b6e83989f8c79644e3e2d1b070000000e23374b5d71859ba4907b65503d2c1a00000000000000000000000000000a1a2d3e4b6073859b9e8978625443301c0f00000000000000000000000e1e304151626b80939f99887e756c6662606061656a747e8b9ea096816c5c4b371f0f0000000000000c1c2a3b484c5b63696b6b696660554c473b31241608000000000000000000000000000000000000000000000000000d22374c62778c99846f5a442f1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f84999a856f5a3625130000000000000000000012283d52677d92917c675239281622374b5d677d8a959b989595958d837968604b607283939b94919093968f857a6b60544538271808000000000000000000000000000000010f1b29333e4a4f5d6577899e9e89796357463625130500000000000000030c12151e1f12100a0100000000000000000000000b2034485972879ca49c9c9894918e8d8c8d8e91969ca39b918579665e4c3f2e1c0c00000000000000000000000001172c41566c8196aa8d786258585858585858585858585858595b5a62686f78828d9da39b897a645c4a3b2b180800000000000013253653687e93a8937e68533e29130000000000000000000000000000000000000000071a2d3d4e63798c9f99836e5c4a3622100000071a2d3d50657b90a39c86715d4c381f0f000000000000000000000000000000101d31445563788a9e9a8473604b3e2d1a0700000000000000000000001323344451626b7e8a9b9d9388817b777575777a8087939f9f958272604b3e2e1b0100000000000417293a4859626f797e81817e7b756c61594e42342616050000000000000000000000000000000000000000000000000b20354a6075899c87725c3b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c81979c87725443301c07000000000000000002172c41576c81968c77624c37221a2d3d4f657b8c9e9b89827f808489948a7e6a62687d929d877f7b7b7d838b988c807260564536261401000000000000000000000000000000000b171e2d374b5c6d8297a0917d675b4939291808000000000000000000000000090900000000000000000000000000000005182b3b576c81969c86878c909496989a9a9a9996928d867c71635b4c402f2110000000000000000000000000000014293f54697e94a58f7b6d6d6d6d6d6d6d6d6d6d6d6d6d6e6f7073787d848c989f9f948578645c4a3e2d1d0d000000000000071c3043546e8398a68d78634e38230e0000000000000000000000000000000000000000000f21364a5b6e8399a18e79644e3e2d1b07000c21364a5b6f8499a5927d68523f2f1c0100000000000000000000000000000001142637495a687e93a0947f695c4a36210d000000000000000000000005162634445160697985909a9d96908d8b8a8c8f959d9f998c80736054433020100000000000000a1f3347586277838e93969694908981776860514434220e000000000000000000000000000000000000000000000000071c30435472879c89745947341f0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f949f8a75604a35200b0000000000000000021628385b70859b88735948342021364a5c71859b9b85776d6a6b6f767f8b93806a6f849a87766a6666686e788393958374605443301c110000000000000000000000000000000000061a2c3d4f647a8d9f98826d5f4d3d2c1b0b0000000000000000000000000000000000000000000000000000000000000011263b51667b90998372777b7e818384858584817d7871665e4e493d2f221102000000000000000000000000000011273c51667c91a69a8483838383838383838383838383838485888d929a9f9e968a7f74625a4a3e2d2010000000000000000b20354a6073889e9d88735b4935210c000000000000000000000000000000000000000000071a2d3d4e64798ea099836e5c4a36220d000e24394e63798e92918774604b362011000000000000000000000000000000000009192c3c4e606e8291928a79644e39240f00000000000000000000000008162634424f5b63707b848c92989b9c9e9d9b98938c837a6a605544362614020000000000011426374c61768799a19f979291949b96897e6c62513e2914000000000000000000000000000000000000000000000000001325365a6f849a8c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a98c77624d37220d0000000000000000091e324556738899846f593b2b1824394e64798e9e89776259555658616a7a88947f7388947f69585150535a626e7e8c998372604b3f2f1a0a000000000000000000000000000000000c2135495b6e83999e8977624c41301f0e00000000000000000000000000000000000000000000000000000000000000000b21364b60768a9e89756265696c6e6f70706e6c68635a514d40362c1f11030000000000000000000000000000000f24394f64798ea4a29a9898989898989898989898989898999b9ea49c97918980776a6055483c2d201002000000000000000f24394e64798e9291816d573d2c1a06000000000000000000000000000000000000000000000f22364a5c6d8291928e79644f39240f000e24394e63797d7d7c77625645311d090000000000000000000000000000000000000e1e31424b60747c7d7d7b644f3a250f00000000000000000000000000081624323d494e5e666f777d828587898886837e786e645c4b4437261808000000000000081d3144556c8196a59e8b827c7c7f86909d93816c56412c1701000000000000000000000000000000000000000000000000172d42576c82978f79644f3a240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa48f7a644f3a250f00000000000000000b21364b60768a97816c57422c17293e54697e9396816c59483b3a464c5c6479898d7b8a8f7a65503a3b3c484d60687d8d96806b5d4c382816020000000000000000000000000000000e23384e63788c9f947f6a5947342312000000000000000000000000000000000000000000000000000000000000000000091e3245576f849a907a65505456595a5b5a5957534d493c3930211a0f01000000000000000000000000000000000c21374c61778c929292929292929292929292929292929291908e8b87827c756b61594b44372b1e100200000000000000000d23384d62787d7d7c76614c36210f0000000000000000000000000000000000000000000000071b2d3e4b60747c7d7d7a644e39240f000c21364a5b636767676259483827150200000000000000000000000000000000000000141d31455660666767645d4b37220d000000000000000000000000000006141f2c35404c505962686d70727373716e68635a4f4b3e31261909000000000000000b20354b6074899e9e8a7a6c676769717c8797846f59442f1a0400000000000000000000000000000000000000000000000013283e53687e86867b65503b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca9927c67523d271200000000000000000d22384d62778d947f6a543f2a172d42576c8297907b66513b2b29333e4a5b657b8d888b8f7a644f3a262b34424e5f6a7f95907b655645321e0a000000000000000000000000000003172939556b80959e8a76614c3b2a18050000000000000000000000000000000000000000000000000000000000000000000316283954697e9396806b563c414345454544413d38352c241d12060000000000000000000000000000000000000a1f334758677d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7b7976726d6660564c473b3127190e000000000000000000000b2035495a62676767615846331f0a000000000000000000000000000000000000000000000000101d31445560666767645c4a36220d00071a2d3d4a4e5252524d483b2b1a0a000000000000000000000000000000000000000002152738454b5152524f4b3f2e1b08000000000000000000000000000000010f1a212f383b484d52585b5d5e5d5c59534d493c372e1d140900000000000000000f24394e64798ea895806b5c5251545e6676827a644f3a240f0000000000000000000000000000000000000000000000000011263a4e60687171655d4b38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475974899f947f6a543f2a1500000000000000000e23394e63788e937e69533e29192e43596e83988e78634e3923171f2d3d4c5e6b80969f907b65503b26192031414b6073859b8775604b39281603000000000000000000000000000a1e33465770869b98826d5846331d0d00000000000000000000000000000000000000000000000000000000000000000000000e23384e63788d9c86715a48342e2f30302f2c282320190e09000000000000000000000000000000000000000004172a3a4d5f676767676767676767676767676767676767666563605757514b4538342a1d1509000000000000000000000006192b3c494d5252524c463a29170400000000000000000000000000000000000000000000000002152737444b5152524e4a3e2d1b0700000f1f2d36393d3d3c37342b1d0d000000000000000000000000000000000000000000000a1a2731363c3d3d3a372e201000000000000000000000000000000000000006111c232b34373d434647494846433e38352c221b100100000000000000000011263b51667b90a48f7a654f3e3c404c57616d645c4b37220d000000000000000000000000000000000000000000000000000b1e31424e535c5c504b3f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b5c72879c97826c57422d1702000000000000000f24394f64798e927d68533d28182e43586d83988d78634d38230e101f2f404b6075879d937e68533e2913141c30435463798c947f6a5745321e09000000000000000000000000000c21364c61768b9f917c67513a29170000000000000000000000000705000000000000000000000000000000000000000000000c2135495b72879d8d77624d38221a1b1b1917130e0c0600000000000000000000000000000000000000000000000c1c30414d52525252525252525252525252525252525251504e4b45393c3631271f180c02000000000000000000000000000e1e2b35383d3d3c3633291b0b000000000000000000000000000000000000000000000000000009192731363c3d3d39362d2010000000010f1a21242828272220180d0000000000000000000000000000000000000000000000000a151d2027282825221b10020000000000000000000000000000000000000000090d192022282d30323433312e292320190e07000000000000000000000012273c51677c91a28d78624d38272f39464c574f4b3e2e1b0700000000000000000000000000000000000000000000000000021324313a3e46463b382f2111000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000001a2f455a6f849a99846f5a442f1a00000000000000000f243a4f64798f927d67523d28172c41576c81968f79644f3a240f01111e324557687d9298826d583e2d1b071426364a5b6d82988975604b36210e000000000000000000000000000e23394e63788ea98c77624d37220d000000000000000000050b0d1c1b14120c02000000000000000000000000000000000000061a2c3d576c8197937d68533827150205040200000000000000000000000000000000000000000000000000000000132330393d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3b3936322827201d150a04000000000000000000000000000000000e192023282827211f170b0000000000000000000000000000000000000000000000000000000009151d2026282824221b10020000000000070c0e1212120d0b05000000000000000000000000000000000000000000000000000002090b1112120f0d08000000000000000000000000000000000000000000000000050b0d13181b1d1e1e1c19130e0c060000000000000000000000000010263b50657b90a28d78634d38231b293336423a372e201000000000000000000000000000000000000000000000000000000006131e2628313125231c110300000000000000000000000000000000000000000000000000050b0d1416100e0900000000000000000000000000000000000000000002172d42576c82979c87725c3b2a1804000000000000000e24394e63798e927d68533d2814293f54697e94917c66513c271100031628394b6074889d88735c4a36220808182d3d4e63798e937e68533c2c190600000000000000000000000010253b50657a909f8974594834200b00000000000000000e192022323029261f140600000000000000000000000000000000000011263c51667b9199836e5645311d090000000000000000000000000000000000000000000000000000000000000005131e25272828282828282828282828282828282827272624211e16110b090200000000000000000000000000000000000000060b0d1212120c0a0400000000000000000000000000000000000000000000000000000000000002080b1112120f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea38f7a644f3a250f171e212d24221b100200000000000000000000000000000000000000000000000000000000020b11131c1c100e0800000000000000000000000000000000000000000000000000000d192022292b26231c11030000000000000000000000000000000000000000152a3f556a7f949f89745947341f0b000000000000000e23384d63788d937e69533e2914253a50657a8f95806b563c2b1905000a1d3144556a7f958e79644f362513000f21364a5b70859b85705a4935200c00000000000000000000000011263b50667b909e89735e3b2b1905000000000000000e1e2b353847453e3b3224140200000000000000000000000000000000000c21364b61768a9e8975604b36200b0000000000000000000000000000000000000000000000000000000000000000010a1012121212121212121212121212121212121211100e0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a101220202012100a01000000000000000000000000000000000000000000000000000000000000000000000000020c121420201c0e0c0600000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8917c67523c2712030a0c180f0d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111d2b34373e403b382f2117090000000000000000000000000000000000000012273d52677c92a98c77614c37220c000000000000000c21364c61768b95806a55402b1521364b61768a9b85705a4834200a00021527374d62788c95806b5443301c07071a2d3d54697e938d78634d38230e0000000000000000000000000f24394f64798e9f8a745847331f0a00000000000005192b3c484d5c5a534f42321f0c0000000000000000000000000000000000091e3246576f849a907b65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d201f15130d03000000000007111719201b19130900000000000000000000000000000000000000000000000005131e252735353527251d13050000000000000000000000000000000000000000000000000000000000000000000006141f26293535312321190e000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899f947f6a543f2a15000000020000000000000000000000000000080d0f1f201f13110b01000000000000000000000000000000030d13151f20200e0c07000000000000000000000000000000000011212e3b484d5456504c403527170400000000000000000000000000000000000010253a4f657a8fa48f79644f3a240f000000000000000a1e334657748997826c57422d171e3246576e83998c78624d3928160300092035485a70859a8773604a35200b000f22384d62778d937e69543e29140000000000000000000000000d22374d62778ca78c76614c37210c0000000000000b2035485a62717069604f3b261200000000000000000000000000000000000316283954697e9496816b563c2b190500000000000000000000000000000000000000000000000000000000000000000000030d131520201e0f0d070000000000000000000000000000000000000000000000000000000000020b11142020200f0d0700000000000000000d18202235342a282015070000000a19242c2f35302e261a0c0000000000000000000000000000000000000000000001132330393c4a4a4a3c39302313010000000000000000000000000000000000000000000000000000000000000000021424323b3e4a4a4638352c1e0e00000000000000000000000000000000000000000000000000000000000000000004172a3a5c71879c97826c57422d170200000000000000000000000000000002101b222535353428251e130500000000000000000000000000071520282a35353523211a0f010000000000000000000000000000081c2e3f4b5962696b655e52453523120000000000000000000000000000000000000d22374d62778caa917c67513c271200000000000000031729395c71869a856f5a3b2a1816283952677c9195806a5745321e0e0005192b3c53687d928f7a6550382816030b2034485a728799846e593b2a180500000000000000000000000b20354b6074889e907b66503929160300000000000d22384d627886857e69533e29140000000000000000000000000000000000000e23394e63788e9c86715a4835200b060606060606060606060606060400000000000000000000000000000000000000071520282a35353324211a0f01000000000000000000000000000000000000000000000000000006141f262935353524221b100200000000000d1d2b34374a4a403c33251500000719293640444a4642382a1a000000000000000000000000000000000000000000000a1e30414d52606060524d41301d0a00000000000000000000000000000000000000000000000000000000000000000c1f32424f53605f5c4d493c2c1a0a0000000000000000000000000000000000000000000000000000000000000000001a2f44596f849999846f5a442f1a0000000000000000000000000000000010202e373a4a4a493d3a312313030000000000000000000000001525333c404a4a4a39362d1f0f00000000000000000000000000000e23374b5d65787e807b6d635241301d0a00000000000000000000000000000000000b20354b60758a9f947f69543f2a140000000000000000192e43596e839888735947341f0b20364b6074879d8975604b3c2c1a0a000e21364c61768a97826d5645321e0905192b3c586d829888735947341f0b0000000000000000000000081c3043546d839896816b5746321e10010000000114263752677d9298836d58432e180300000000000000000000000000000000000c2135495b72879d8d78624d38221c1c1c1c1c1c1c1c1c1c1c1c1c1b190e0c07000000000000000000000000000000031525333c3f4a4a4839362d200f00000000000000000000000000000000000000000000000000021424313b3e4a4a4a39362d20100000000005182b3b485d605f555043331e0e00112436475459605b5548381d0d0000000000000000000000000000000000000000001025394d5f67757575675f4d392510000000000000000000000000000000000000000000000000000000000000000012263b4f6069757571635b49382816030000000000000000000000000000000000000000000000000000000000000002172c42576c81979c87725c3b2a18040000000000000000000000000000081b2e3e4b4f5f605e524e4131211000000000000000000000000e1e334350555f605f4e4a3d2d1a0700000000000000000000000005192b3c50657b89939590816d5f4d3924100000000000000000000000000000000000081c30435472879d96816c57412c170200000000000000152a3f556a7f948c77614c37220c1d314455697e9395806a5b49382818080a1f3346586e83988975604b36210d00152a3f546a7f948c77624c37220d00000000000000000000000114263652677c919e8876614b3e2e1c140805050e1d3144556c819696816b56412c16010000000000000000000000000000000000061a2c3d576c8197937e6853382731313131313131313131313131312e23211a0f01000000000000000000000000000d203343505560605d4e4a3e2d1a070000000000000000000000000000000000000000000000000b1f31424e535f60604f4a3e2d1b070000000b203448596f75746a61503c2b1906172c4054656e757066553b2b1905000000000000000000000000000000000000000012273c52677d8a8a8a7d67523c2712000000000000000000000000000000000000000000000000000000000000000014293e53697e8a8a8679635645321e0e0000000000000000000000000000000000000000000000000000000000000000152a3f546a7f949f89745947341f0b00000000000000000000000000000d22374b5c6474757468604e3f2e1d0d00000000000000000006192c3c50616a747575635b4a36210c0000000000000000000000000b2035485a72879da8ab9f917c67513c27120000000000000000000000000000000000011426365a6f859a99846f59442f1a000000000000000010253b50657a90917b66513625131527374b6074869c8b796356453625160b17293a51667c91917c67523b2a180512273c51677c918f7a644f3a250f0000000000000000000000000b20354b6074879c957f6a5c4b3e30261f1819202c3b4b6074879d917c67513c27120000000000000000000000000000000000000011263c51667c9199846e56454646464646464646464646464646464339362d1f0f0000000000000000000000000013283c50616a757573645c4a36211200000000000000000000000000000000000000000000000011263b4e6069757575705c4a36220d0000000d22374d62778d897f6a5a4835200b192f44596e838a8470594834200b00000000000000000000000000000000000000000f253a4f647a8f9f947f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000b20354b6073869c9b8775604b3c2b19050000000000000000000000000000000000000000000000000000000000000012273d52677c92a98c77614c37220c00000000000000000000000000000f253a4f647a8b8a897e685d4b3b2a190900000000000000000c2035495a6a7f8a8a8d79634e39230e0000000000000000000000000d22384d62778da5b7beac97826d57422d18000000000000000000000000000000000000182d42586d82979c86715c3a2a1704000000000000000b21364b60758997816c5443301c091d314556657b8d9b857460544332281b1020364b60758999846f5947341f0b10253a4f657a8f917c67513c2712000000000000000000000000081d314455677d929f8b7a645c4b4336342a2b353c4959677d929f8a76614c36210c000000000000000000000000000000000000000c21364b61768a9e8975605b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b594e4a3d2d1a07000000000000000000000000152a3f556a7f8a8a887a644e402f1d090000000000000000000000000000000000000000000005192b3b53697e8b8a8a7a644f39240f0000000b2034485970859a8c78624d38230e1b30465b70859b8c77624d37220d00000000000000000000000000000000000000000d22374d62778ca997816c57422c170200000000000000000000000000000000000000000000000000000000000000081d314455657b8fa0957f6a5a48352011000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa48f79644f3a240f00000000000000000000000000000d22374b5c697e939e8c7b65594737261401000000000000061a2c3d4d63788b9f98826d5b4a36210c0000000000000000000000000c21374c61768ca1b3b9a996816c56412c17000000000000000000000000000000000000152a40556a7f959e89745847331f0a00000000000000091e3245566e83998874604a35200b1527384b5d6b8095988272604b46392e221d3145566c82978b77624c37220f0e23384e63788d937d68533e2813000000000000000000000000011527374a607283999d887a6860544c483b3c484d5a6378899e97816c5846331f0a000000000000000000000000000000000000000a1e3246576f849a907b71717171717171717171717171717171706e635b4a3621090000000000000000000000000c21364c6176899e9b85715e4c382411000000000000000000000000000000000000000000000b2034485972879d9e8974604b35200b00000005182b3b54697e93947f69543c2b19152a3f546a7f94937e69543b2b1805000000000000000000000000000000000000000b20354a60758a9f99846f5a442f1a0000000000000000000000000000000000000000000000000000000000000000011426374b5d6e83989f8a78624d3f2e19090000000000000000000000000000000000000000000000000000000000000d22374d62778caa917c67513c27120000000000000000000000000000081b2e3e4f606d82989d8877625544311d120000000000000c2135495b6d82989f8b78624d3d2d1a070000000000000000000000000a1f3347586f8499a2a79e8b79634e39240e00000000000000000000000000000000000013283d52687d92a88c76614c37210c000000000000000316283852677d928f7a644f3928160a1a2e3f4b6072839997816e61574b3f372e27384f657a8f947e69543d2d1a0d22384d62778d937e69543e291400000000000000000000000000091c3043546176869b9d8a7d736862595c5b5a626a78879c9e8978624d3a291704000000000000000000000000000000000000000316293954697f949d8786868686868686868686868686868686868379634e3727150100000000000000000000000a1e3346576a7f95a3907c6651402f1c090000000000000000000000000000000000000000000d22374d62778ca599846e5443301c08000000000d22374d62778c9b86715a4935200d23384d62788d9a8570594834200b00000000000000000000000000000000000000071c30435472879c9c87715c3a2a1804000000000000000000000000000000000000000000000000000000000000000009192e3f4d62788a9f98836e5d4b3726140100000000000000000000000000000000000000000000000000000000000b20354b60758a9f947f69543f2a14000000000000000000000000000000102032424b6175869c9a8473604b40301e0e00000000071a2d3d4e63798c9f96816c5a49351f0f000000000000000000000000000417293a4c6277848e90897d675b4a36210c00000000000000000000000000000000000010253a50657a8fa48e79644f39240f00000000000000000c21364c61768a96806b5745321e08111c30435461758499978275655d4f4b3f3d3b4a6073879b86715b4a36210d22374d62778c947f69543f2a1400000000000000000000000000001325364658627885989e92867d777371707378808a9c9e8d7c665a48341c0c0000000000000000000000000000000000000000000e24394e63798ea59d9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9885715544311d080000000000000000000000031729394c6176899e9b85705e4c38231100000000000000000000000000000000000000000012273d52677d92a7937e695436261401000000000b2034485970859a8d78624d38230e2035495a71869b8c77624d37220d00000000000000000000000000000000000000001325365a6f849a9e89745847331f0a000000000000000000000000000000000000000000000000000000000000000000112034485a6a7f94a08f7b655544311d0c0000000000000000000000000000000000000000000000000000000000081c30435472879d96816c57412c1702000000000000000000000000000002141e3246576379899e96806b5e4d3c2c1b0a0000000c21364a5b6e83989f8a77624c3c2b190100000000000000000000000000000c203448596272797a76675f4d3d2d1a070000000000000000000000000000000000000d23384d62788daa917c66513c271100000000000000000a1f3346586e83998875604b3626140114263646576175839598867a6e645d5752504f546b80958e79634e36261423384d63788d937e69533e291400000000000000000000000000000818293a48596275828e9a9b938b888686888b959f998a7d675e4c3c2b19000000000000000000000000000000000000000000000c21364a5b728792929292929292929292929292929292929292928c75604b35200b0000000000000000000000000b1e3346576a7f95a3907b66503f2f1c080000000000000000000000000000000000000005182a3b576c8297a78e79644e39240f000000000005182b3b53697e93947f69543c2b19192b3c54697f94937e69543b2b180500000000000000000000000000000000000000182d42576d8297a88c77614c37220c00000000000000000000000000000000000000000000000000000000000000000005192b3c4b6074879d9c8673604b3a2a170400000000000000000000000000000000000000000000000000000000011426365a70859a99846f59442f1a0000000000000000000000000000000003162839495b667c919e917c665b493928160300071b2d3e4e63798c9f95806b5948341e0e00000000000000000000000000000005182b3b485460646561574d41301f0f000000000000000000000000000000000000000b20354b60758a9f947e69543f291400000000000000000417293a50657a8f937e685443301c0b0818283946576072808c9b8f837a726c6765646567788e96806b5443301c24394e64798e927d68523d28130000000000000000000000000000000b1b2b3b4857606d7a848d94999c9b9b9c9a958e8379675f4d402f1d0d00000000000000000000000000000000000000000000071a2d3d50657b7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d74604b36200b000000000000000000000000031729394c6176899e9b85705d4b372311000000000000000000000000000000000000000b1f34475972879c9e8874604a35200b0000000000000d22374c62778b9b86715a4935200e22384d62788d9a8570594834200b00000000000000000000000000000000000000152a3f556a7f94a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000d1d324556667c91a1937e685847331f0f0000000000000000000000000000000000000000000000000000000000182d42586d82979c86715c3a2a1704000000000000000000000000000000000b1b2c3d4d5e6b80969e8979635745321e14020d22364a5c6e83999e8976614c3b2a1800000000000000000000000000000000000d1d2b36434a4f504c46393023120100000000000000000000000000000000000000081d31445572889d96816c56412c170100000000000000000c23374b5d70859b8773604b3a2917040b1b28394554606a7a8591988f87817d7b797a7c808b9d8874604b3520263b51667b90907b65503b2610000000000000000000000000000000000d1d2b39454b5c646f787f8387888987857f796f635b4d403022120000000000000000000000000000000000000000000000000f23374b5d65676767676767676767676767676767676767676767605645321d09000000000000000000000000000b1e3346576a7f95a2907b65503f2e1c080000000000000000000000000000000000000d22374c62778ca499836e5443301c070000000000000b2034485970859a8d78624d38230e2035485a70859b8c77624d37220d0000000000000000000000000000000000000012283d52677d92a6917c67513c271200000000000000000000000000000000000000000000000000000000000000000000021528384c5e6f84999e8976614c3d2d1a0700000000000000000000000000000000000000000000000000000000152b40556a80959e89745847331f0a00000000000000000000000000000000000e1f30404b6073849a9c8675604b423120101b2e3e4f647a8c9f947f6a5847331d0d0000000000000000000000000000000000000d18253035393b3633291b12050000000000000000000000000000000000000000011527375b70859a99846e59442f19000000000000000000081c2e3f51677c91927d675846331f10000b1b2836434b5c64727c858d949792908e8f91959b968f7a65503a25293e53697e938d78634d38230e00000000000000000000000000000000000d1b28323e4a4f5b63696e71737372706a645c4e493d30221204000000000000000000000000000000000000000000000000081c2e3f4b505252525252525252525252525252525252525252524b453828150200000000000000000000000000031729394c6176899e9a84705d4b37231000000000000000000000000000000000000012273c52677c91a7937e69533625130000000000000005182b3b53697e93947f69543c2b19192b3c54697e94937e69533b2b180500000000000000000000000000000000000010253a4f657a8fa4947e69543f291400000000000000000000000000000000000000000000000000000000000000000000000a1a2f404e63798b9f97816c5b4a3621120000000000000000000000000000000000000000000000000000000013283d53687d92a88c76614c37210c000000000000000000000000000000000000121d3144556277889d98826d604e3e2e1c22374b5c6f84999d8875614b3a2917000000000000000000000000000000000000000008131c202425211e170b0000000000000000000000000000000000000000000000182d43586d82989b86715c392917030000000000000000001120354b6073859b8876614c3e2e1d0d000a1826303e4b54606770787e83888a8b8c8b8986817b655d4b37232d3d586d82988975604b35200b0000000000000000000000000000000000000a161e2d363c494d54595c5e5e5d5a554e4a3d352c1f1204000000000000000000000000000000000000000000000000000011212e373a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3632281a0a0000000000000000000000000000000b1e3346576a7f95a28f7a65503e2e1b080000000000000000000000000000000004172a3a576c8196a68e79634e39230e00000000000000000d22374c62778b9b86715a4935200e22384d62788c9a8570594834200b0000000000000000000000000000000000000d22384d62778daa96816c57412c17020000000000000000000000000000000000000000000000000000000000000000000000122135495b6b80969f8c79634e41301a0a00000000000000000000000000000000000000000000000000000010253b50657a90a48e79644f39240f000000000000000000000000000000000000011426374759647b8b9f937e685c4b3a2a2e3f4f647a8fa1937e695746321c0c00000000000000000000000000000000000000000000070b0f100c0a03000000000000000000000000000000000000000000000000162b40556b80959e89745746331e0a000000000000000000081c304354647a8c96816c5c4b3b2a19090008141c2e36434a525b63696e737476777674716c655d4b3f2e21364a5b72879a846f5544311d080000000000000000000000000000000000000003101b222c35383f4447494947454039362d211a0f0100000000000000000000000000000000000000000000000000000003111c2325282828282828282828282828282828282828282828201d150a00000000000000000000000000000000031729394c6176899e9a846f5c4b372210000000000000000000000000000000000a1f33475871869c9e88735b4a36210c00000000000000000b2034485970859a8d78624d38230e2034485a70859b8b77624c37220d0002020202010000000000000000000000000b20354b60758a9f99846e59442f19000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4b6176889d9a84705f4d3828160300000000000000000000000000000000000000000000000000000e23384d63788dab917c66513c27110000000000000000000000000000000000000009192a3b4b5d697e939f8b7a64584736374b5d6f849a9d8774604b39281600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a78b76614c36210c000000000000000000011426364a5c6c81978c7a64594737271809000110182530353d494e54595d57616261575c564f4b3f2e2129394e63798e947f6a5437271501000000000000000000000000000000000000000000070e1921232a2e32333432302a24211a0f0600000000000000000000000000000000000000000000000000000000000000080e101212121212121212121212121212121212121212120b09020000000000000000000000000000000000000b1f3346586a7f95a28f7a644f3e2d1b070505050505050505050505050505050c21374c61778b9f98836e583d2d1a07000000000000070c0e182b3b53697e93947f69543c2b19192b3c54697e94937e69533b2a18181818181816140e04000000000000000000081d31445572879d9c86715c3a2917040000000000000000000000000000000000000000000000000000000000000000000000000e1e334657677d92a2917c675645321e0e00000000000000000000000000000000000000000000000000000b20364b60758a9f947e69543f291400000000000000000000000000000000000000000d1d2e3f4f606e82989d87766154433f4f657a8fa2927d685645311b0b0000000000000000000000010a101220202012100a01000000000000000000000000000000000000000000000000000000000000000010263b50657b90a38e79634e39240e0000000000000000000008182d3e4c6176889d88776255443626190a000008131c202c35383f4439464b4c4b4639413a372e211e3346576b80968c78624d38220d000000000000000000000000000000000000000000000000060c0e14191c1e1e1d1b150f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c6176899e99846f5c4a36221a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a273c51667c91ab937e68533e29130000000000010f1a21242c2d374c62778b9b86715a49352d2d2d374d62778c9a85705948342d2d2d2d2d2d2b282116080000000000000000011426375a70859a9e89745847331f0a000000000000000000000000000000000000000000000000000000000000000000000000031729394a6072859b9d8775604b3c2b190500000000000000000000000000000000000000000000000000091d32455673889d96816c56412c170a0a0a0a0a09070200000000000000000000000000102032424b6175869c9a8472604b4b5d70849a9c8673604b382715000000000000000000000005131e252735353527251d1305000000000000000000000000000000000000000000000000000000000000000e23384d63788dab917b66513c26110000000000000000000000101f334658647a8b9a847360544437271a0e000000070f1a2123292e293336373633292c25221b1a2c3c4b6176899a846f5a4835200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d171d1f202016140e040000000000000000000000000000090f112020200f0d070000000000000000000000000b1f3346586a8095a18f7a644f3e2d2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f293a566c8196a68d78634e38230e00000000000f1f2d3639424242485970859a8d78624d4242424242485970859b8b77624c42424242424242403d332616000000000000000000182d42586d8297a88c76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000b1c304354647a8c9f95806a5a4835201100000000000000000000000000000000000000000000000710171528385b70869b99846e59442f1f1f1f1f1f1f1e1c160c00000000000000000000000002141e32465763798a9e95806b5e50657b90a2917c665443301a0a0000000000000000000001132330393c4a4a4a3c39302313010000000000000000000000000000000000000000000000000000000000000b20364b60758a9f937e69533e291400000000000000000000000417293a4b5c687e92978172605545382c1e1207000000060c0e1419171e2122211e1717100a182738495a6a8095907b65503c2b190500000000000000000000000000000000000000000000000000000000000000000000000000070c0e1315161614110d0b0500000000000000000000000000000000000000000001111f2a313435352b28211608000000000000000000000004121d242635353524211a0f01000000000000000000000417293a4c6176899e99836e5c4a44444444444444444444444444444444444444465871869b9d88735b4935210c00000000071a2d3d4a4e5757575757687e93947f695757575757575757697e93937e685757575757575757565044331c0c0000000000000000152b40556a8095a38e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000001325364a5c6c81979f8a78624d3f2e19090000000000000000000000000000000000000000000a18242b2e3443586e83989b86715c39293434343434343331291e1000000000000000000000000003162839495b677c919f8d7c665e70859b9b85705e4d36261400000000000000000000000a1e30414d52606060524d41301d0a000000000000000000000000000000000000000000000000000000000000091d32455673889d96816b56412c160100000000000000000000000c1c2e3e4e606c81969782736056493c30211a0f06000000000000030a0c0d0c0a03030e1a2836455663788b9a84705d4c381e0e0000000000000000000000000000000000000000000000000000000000000000000000040b0f1a2124282b2c2b29262220180d0b050000000000000000000000000000000000000d1f2f3d46494a4a403d332616040000000000000000000012222f383c4a4a4a39362d1f0f00000000000000000000000b1f3346586a8095a18e79645a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a61768b9f98836d583d2c1a06000000000c21364a5b636c6d6d6d6d6d778a9b85716d6d6d6d6d6d6d6d6d778a9a84706d6d6d6d6d6d6d6d6b62503a2917040000000000000013283d52687d92a6917c66513c2711000000000000000000000000000000000000000000000000000000000000000000000000000008182d3e4c6176899e98836e5d4b37261401000000000000000000000000000000000000000718283640434949566b80969e897457464949494949494949453c2e1e000000000000000000000000000b1b2c3d4d5f6b80969e8978667b90a2907b65504030180800000000000000000000001025394d5f67757575675f4d392510000000000000000000000000000000000000000000000000000000000000021528385b70859b98836e59432e1900000000000000000000000000102031424b60728196988274625a4d41362d211a0f0a040000000000000000070b171e2c3845546074859b8b79634e3f2f1c00000000000000000000000000000000000000000000000000000000000000000000000c181f222d36393d4041403f3b37342b2220180d0500000000000000000000000000000000172a3d4d5a5e606056514433210e000000000000000000091d2f404c516060604e4a3d2d1a07000000000000000000000417293a4c6176899e99836f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7c90ab927d68533d281300000000000e24394e637981828282828282899e9782828282828282828282818a9e8d828282828282828282806b5847331f0a0000000000000010253b50657a90a5937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000101f334758697e93a08f7b655544311d0c000000000000000000000000000000000000001024364653585f5f5f697e93a78b76615f5f5f5f5f5f5f5f5e594c3c1c0c000000000000000000000000000f1f30404b6073849a9b8575859b9a846f5d4c38221200000000000000000000000012273c52677d8a8a8a7d67523c271200000000000000000000000000000000000000000000000000000000000000192e43586e83989b86715b3928160300000000000000000000000002131c30435460728195988578675f4e4a3d362c211f1713110f0e0f1012131c2029333d495660728298947f695b4a36211100000000000000000000000000000000000000000000000000000000000000000002141d2a34373d4a4e5255565554514c483b37342b1f180d0000000000000000000000000000001d31465a6b7475756b62513d28140000000000000000000f24384c5e66757575705c4a36210d00000000000000000000000b1f3346586a80959f8d8484848484848484848484848484848484848484848484869ca68d78634d38230e0000000000152a40556a7f959797979797979ea7a097979797979797979797979ea89f9797979797979797978c76614c37210c000000000000000d23384d62788dab96816c56412c1709090909090909090909090909090909090000000000000000000000000000000000000000000004172a3a4b6073869c9c8673604b3a2a1704000000000000000000000000000000000000172b4053646e747474747c91a38e79747474747474747474736a593a29170400000000000000000000000001121d3144556277889d998499a18f7a644f3f2f1c040000000000000000000000000f253a4f647a8f9f947f69543f2a1400000000000000000000000000000000000000000000000000000000000001162b40566b80959e88735746321e0900000000000000000000000000011426364354606c808d9b897d6f635b4e493d3733292826242324252725303539464c5b6374829898826e614f3d2d1a0300000000000000000000000000000000000000000000000000000000000000000a151d323b474c555b63686a6b6b69666259554c483b342a1d1302000000000000000000000000001f34495e748a8a8a806b56402b1601000000000000000011263c51667c8a8a8a79644e39240f00000000000000000000000417293a4c6176899e9f9a999999999999999999999999999999999999999999999ca49d88735a4935200c000000000011263b50667c8989898989898989909f8c8989898989898989898989909f8c89898989898989898676614c36210c000000000000000b20364b60758a9f99836e59442e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0d0b0500000000000000000000000000000000000000000c1d314455657b8fa0937e695847331f0f000000000000000000000000000000000000192e43586e82898989898a9fb49f8a89898989898989898988735847331f0a00000000000000000000000000011527374759657b8c9f99a199836e5c4b372111000000000000000000000000000d22374d62778ca997816c57422c170200000000000000000000000000000000000000000000000000000000000013293e53687e93a78b76614b36210c000000000000000000000000000008182636434a626b7c899a9184796d635b534c473a3e3b3939393a3c36434a4f57616a798598978373604b43321f0f00000000000000000000000000000000000000000000000000000000000000000a1a2731424f59616b73797d8081807e7b77716a62594c473b311e160a0000000000000000000000001c31475c71869c98836d58432e180000000000000000000f24394e64798e9f917b66513c26110000000000000000000000000c1f3346586a8095a79f8c8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8c9fad98826d583c2c190600000000000f23384c5e667474747474747472879d897574747474747474747473889d88737474747474747472615746331e0a00000000000000081d31445573889d9b86715c39293333333333333333333333333333333333332220180d00000000000000000000000000000000000000011426374b5d6e83989e8976614c3d2d1a0700000000000000000000000000000000001a30455a6f8492939596989ea7a59c9898989898989898988c76614c37210c000000000000000000000000000009192a3b4b5d6a7f95aaa58f7a655544311d13010000000000000000000000000b20354a60758a9f99846f59442f1a0000000000000000000000000000000000000000000000000000000000000011263b50667b909b8e78634e39230e0000000000000000000000000000000818253044505e66788492998c8279706861585753504f4e4e4f52545460646c76808a9b938173605544312514010000000000000000000000000000000000000000000000000000000000000009192738454b60697780888e9295969594908c867f776d62594e4232281a0a00000000000000000000001a2f44596f84999a85705b3727150200000000000000000c21374c61768ca8937e69533e29140000000000000000000000000417293a4c6176899e988275757575757575757575757575757575757575757b90a5927d68523d2813000000000000091c2f404c505e5e5e5e5e5e546b8196917c665e5e5e5e5e5e5e546c8196907b655e5e5e5e5e5e5c4c463929170300000000000000021527375b70859a9e897357464848484848484848484848484848484848484837342b1d0d0000000000000000000000000000000000000009192e3f4d62788a9e97816c5b4a36211200000000000000000000000000000000000f24394e647a7c7e808182899e9c878383838383838383838377624d37220d0000000000000000000000000000000d22374b5d6e8399a59d9a8473604b41301f0f000000000000000000000000071c30435472879c9c87715c3a2a17040000000000000000000000000000000000000000000000000000000000000e23384d63788586857a644f3a250f0000000000000000000000000000000008131c33404c5962727d8794978e857d76706c686664636465676a6e747a818995988a7e6d6055443727150700000000000000000000000000000000000000000000000000000000000000011426374556606e7e89959d9e9894929293979c9c958b827768604b4538281a0a00000000000000000000172c41576c81969d88735544311d0800000000000000000a1f33475874899e96806b56412b16010000000000000000000000000c1f3346586a80959f8c78635f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f6b8095a58d78624d38230d0000000000000012222f383b4949494949494f647a8f98836e574549494949494f657a8f97826d554449494949473633291b0b000000000000000000182e43586d8398a78b76615e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e4c483b2b18050000000000000000000000000000000000000011203448596a7f949f8c79634e41301a0a000000000000000000000000000000000d21364a5c6467696a6c6e839998836e6e6e6e6e6e6e6e6e6e62594834200b0000000000000000000000000000091930404f657a8fa19a889d96806b5f4d3d2d1b0b0000000000000000000000001325365a6f859a9e89745847331f0a0000000000000000000000000000000000000000000000000000000000000c2035495a63717171645c4b37220d00000000000000000000000000000000000016222f3b48546067747f889199928b86817d7b7978797a7c7f83888f96978c827868604b44372719090000000000000000000000000000000000000000000000000000000000000000081d314455607482939e9e9389837e7c7d7e82878e979f97897e6d60564538281909000000000000000000142a3f54697f949f8a75604b36200b00000000000000000417293a5c71879c98836e58432e19000000000000000000000000000417293a4c6176899e97826d5a494a4a4a4a4a4a4a4a4a4a4a4a4a455670859a9d87725a4835200b0000000000000004121c23263434343434374b5c72879d8a75604b36343434354a6073889d8975604b3634343432211e170b00000000000000000000162b40556b8095a38e7973737373737373737373737373737373737373737362594834200b0000000000000000000000000000000000000005192b3b4b6074879c9a84705f4d38281603000000000000000000000000000000071a2d3e4a4e525355576a7f959b85705b59595959595959594d483b2b190500000000000000000000000000011527374d5f70859b9a84798b9f917d675b4a3a2918080000000000000000000000182d42576d8297a88c76614c37210c00000000000000000000000000000000000000000000000000000000000006192c3c494d5c5c5c4f4b3e2e1b0800000000000000000000000000000000000004121d2b36434a566069747c838b91979693908e8e8e8f91949896908981796d625a4e4231271909000000000000000000000000000000000000000000000000000000000000000008182e3f4b60738398a09b897e756d696767696d7279828b9a9e93827460564537271501000000000000000012273c52677c91ab8d78624d38230d0000000000000000001a2f445a6f84999b85705b37271501000000000000000000000000000c1f3346586a80959f8b78624d3c2b35353535353535353535364b60758a9f97826d583c2b1906000000000000000000090f111f1f1f1f1b2e3e566b8096917c67523929161c3043546c8196907b66513828151f1d0c0a03000000000000000000000013283e53687d93a89e8988888888888888888888888888888888888888888877624c37220d00000000000000000000000000000000000000000d1d324556667c91a1917c675645321e0e000000000000000000000000000000000f202d36393d3e4051667c919d887356454343434343434337342b1d0d0000000000000000000000000000081d314455677c91a18f7a697e939e8a796358463625130000000000000000000000152a40556a7f95a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000e1e2c35384646463a372e20100000000000000000000000000000000000000000000d18253038454b5560666e777c8286898b8d8e8e8d8b8985817b756c635b4d483c311d15090000000000000000000000000000000000000000000000000000000000000000011426364b5d6b8096a19b857869605654525254575c646d7984969e978374605544311d1300000000000000000f243a4f64798fa48f7a65503a2510000000000000000002172d42576c82979d88735544311d08000000000000000000000000000417293a4c6176899e97826c5a4834202020202020202020253a50657a8fa9927d67523d2812000000000000000000000000000909090010243a4f647a8f99836e5746321e1325364f657a8f98826d5645321d0907000000000000000000000000000010263b50657b90a5a79e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d8f7a65503a25100000000000000000000000000000000000000000021528384c5e6f84999d8775604b3c2b1905000000000000000000000000000000010f1a21242729384d62788d9f8a75604b362e2e2e2e2e2e2220190d0000000000000000000000000000031629394b6074869c99836e606d82989c8676615443301c110000000000000000000013283d52687d92a6917c66513c271100000000000000000000000000000000000000000000000000000000000000000e19202331313125221b10020000000000000000000000000000000000000000000008131c283237444b515861676c707476787979787674706b6660564e4a3d352b1e1302000000000000000000000000000000000000000000000000000000000000000000081c304354657b8d9f9c867662594b45383d3d3e3d4a4e5b637280949d9a8373604b41301c0c000000000000000d22374c62778ca9927d68523d2813000000000000000000152a3f546a7f949f8a75604b35200b00000000000000000000000000000c1f3347586b80959f8b78624d3b2b18050a0a0a0a01152737556a7f94a58c77624d37220d00000000000000000000000000000000000d22364a5c72879d8a76614b36210c20354a6073889d8975604b36200b0000000000000000000000000000000e23384e63788daba19a8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7d68533d28130000000000000000000000000000000000000000000a1a2f404d63788b9f95806a5a483520110000000000000000000000000000000000070d0f122035485a73899e8d78634d382319191919190d0b050000000000000000000000000000000a1e324657687e939f8c79634e6075869c998372604a402f1e0e00000000000000000010253a50657a8fa5947e69543f2914000000000000000000000000000000000000000000000000000000000000000000060c0e1c1c1c180f0d07000000000000000000000000000000000000000000000000000a151d2731353a474c52575b58616363636361585b56504b4538362d20190e00000000000000000000000000000000000000000000000000000000000000000000000b20354b6073869c9e8a786358483b32282728292d363d4954606b7f949e96816c5f4d3a2a18040000000000000b20354a6075899f957f6a55402a1500000000000000000012273d52677c92aa8d77624d38220d00000000000000000000000000000417293a4c6176899e97816c594834200d00000000081d3144556f849a9c8772594834200b0000000000000000000000000000000000071b2d3e566b8095927c67523929171c3043546c8196917c66513828160200000000000000000000000000000b21364b60768a9f9a8479787878787878787878787878787878787878787876614c37210c00000000000000000000000000000000000000000000122135495b6b80969f8a78624d3f2e19090000000000000000000000000000000000000005192b3c5a70859a907a65503b251004040404000000000000000000000000000000000005182a3b4b6175889d98826d5b4a566378899e947f6a5e4c3c2b1a0a00000000000000000d23384d62788daa96816c56412c1701000000000000000000000000000000000000000000000000000000000000000004111c23262e2d24211a0f010000000000000000000000000000000000000000000000000209151d202a33373c423a464c4d4e4e4d4c463a413b363127211a0f050000000000000000000000000000000000000000000000000000000000000000000000071a2d3d52677c91a4937e695a493a2b1e161212141a212c36434b616c81969f927d675947341f0f000000000000071c30435472879c97826d57422d1800000000000000000010253a4f657a8fa48f7a654f3a25100000000000000000000000000000000c1f3347586b80959f8a77624d3b2a18050000000b20354b6075899e97826c573b2b19050000000000000000000000000000000000001024394f64798e99836e5746331e1325364f657a8f98826d5645321e090202020000000000000000000000091e32455673889d9b86706363636363636363636363636363636363636363615847331f0a0000000000000000000000000000000000000000000006192c3c4b6175889d98836e5d4b3726140100000000000000000000000000000000000000172c41566c8196927d68533d28130000000000000000000000000000000000000000000b1f3447596a80959f8b78624d3d495a667c8d9f8d7c665a4938281603000000000000000b20354b60758a9f99836e59442e1900000000000000000000000000000000000000000000000000000000000000000614222f383b434239362d1f11030000000000000000000000000000000000000000000000000001080c181f22272d293336383939383633292c26201d150a07000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b70859b9d8774604b3c2c1c0d02000000070f182630434b6073859b9e8977614c3d2d1a070000000000001325365a6f849a9a846f5a3625130000000000000000000d22384d62778daa927c67523d27120000000000000000000000000000000417293a4c6176899e96816c5947341f0c0000000f243a4f647a8fa8927c67523d2712000000000000000000000000000000090f11171722364a5c72879c8a76614c36211720354a6073889d8975604b36211717171712100a0000000000000000021628385b70869b9e8873574e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c473a2a170400000000000000000000000000000000000000000000000e1e324657677d92a0907b655544311d0c0000000000000000000000000000000000000013283d52687d9295806a55402b150000000000000000000000000000000000000000061a2c3d4c62778a9e97816c5a49353c4c5e6b80959e8978625645321e1402000000000000081d31445572889d9b86715c3929170300000000000000000000000000000000000000000000000000000000000000142431404c5058584e4a3d2f211100000000000000000000000000000000000000000000000000000000040a0c1217171f2123242423211f1716110b09020000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798ea3947f6a5645311e0e0000000000000008141d31445562788a9f98826d5b4a36210e000000000000182d42576d82979c87725443301c0700000000000000000b20354b60758a9f947f6a543f2a15000000000000000000000000000000000c1f3347586b80959f8a77624c3a2a1804000114263654697f94a48c77624c37220d0000000000000000000000000004121d24262d2d2d2d3e556b8095927d67523a292d2d3043546c8196917c665139282d2d2d2c27241d120400000000000000192e43586e8398a68b76604b38383838383838383838383838383838383837332a1c0c000000000000000000000000000000000000000000000000031629394d5f70859a9c8673604b3a2a17040000000000000000000000000000000000000f24394e64798e98826d58432d1800000000000000000000000000000000000000000c2135495b6c81979f8a77624d3c2c2f404b6072849a9b8575604b42312010000000000000011527375b70859a9e89735746331e0a000000000000000000000000000000000000000000000000000000000000091931424e5e666e6d645c4c3f2f1c080000000000000000000000000000000000000000000000000000000000000000040a0c0e0e0e0e0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839556a7f959f8b77624c38271500000000000000000001152737485a6a7f959f8d79634e3c2c19060000000000152a40556a7f959f8a75604a35200b0000000000000000081d31445572889d97826c57422d17020000000000000000000000000000000417293a4c6176899e96806b5847331f0c00081c3043546f84999c8772594834200b00000000000000000000000000122230383c42424242424e64798e99846f584642424242364f647a8f98836e574542424242413c3930231201000000000001162b41566b8096a38d78634e382323232323232323232323232323232323211f170c00000000000000000000000000000000000000000000000000000b1b30414e647a8c9f937e695847331f0f0000000000000000000000000000000000000b20364b60758a9a85705b37271501000000000000000000000000000000000000081b2e3e4e63798b9f96806b5948341e1c3043546176879d98826d604e3e2e1d0d000000000000182d43586d8298a78b76614b36210c0000000000000000000000000000000000000000000000000000000000011527374e60687b838279655d4c38230a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455770859b9b85705948341a0a0000000000000000000009192b3c4b6075889d99836e5b4935210a000000000012283d52677d92a98c77624c37220d0000000000000000011527375b70859a99846f5a442f1a00000000000000000000000000000000000c1f3347586b80959e8a77614c3a2917040b20354b6074899e97816c573b2b1805000000000000000000000000091d30404c515757575757575c72879c8a7661575757575757576073879d897560575757575757514d41301f0f00000000000013293e53687e93a5907b66503b26110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0a04000000000000000000000000000000000000000000000000000000001322364a5c6c81979e8976614c3d2d1a070000000000000000000000000000000000091d31455671869c88725544311d080000000000000000000000000000000000000922374b5c6e83989e8976614c3b2b181426364758647a8b9f937e685c4b3b2a19090000000000162b40556b8095a38e79634e39240e0000000000000000000000000000000000000000000000000000000000081d314455687e9098978b7b655038281603000000000000000000000000000000000000000000000000000000000000000000070b09000000000000000000000000000000000000000000000001080b1015171715110b0902000000000000000000000000000b21364b60768a9f95806a553b2b180000000000000000000000000e1e3245566a7f949f8c78634d382715020000000010253a50657a8fa48f79644f3a240f000000000000000000182e43586d83989c87715c3a291704000000000000000000000000000000000417293a4c6176899e95806b5847331f0b0f24394e64798ea7917c67523c2712000000000000000000000000000f24384c5e666c6c6c6c6c6c6c6c8095927d6c6c6c6c6c6c6c6c6c6c8196917d6c6c6c6c6c6c6c675f4d3d2d1a07000000000011263b51667b90a6937e68533e291300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4c6176899e97816c5c4a362112000000000000000000000000000000000002152738586d82988a75604b35200b000000000000000000000000000000000009192f404f647a8fa0957f6a5847331d0d08182a3a4a5c687e939f8b7a645947372715010000000013283e53687d93a6907b66513b261100000000000000000000000000000000000000000000000000000000000b20354b6074899eada99c87725645321e0900000000000000000000000000000000000000000000000000000000000003090c1c201e110f0a0000000000000000000000000000000000000008141c20252a2c2c2a26201d150a04000000000000000000000010253a4f657a8faa907b66513b2611000000000000000000000000021628384c61768a9e96806b5645311d09000000000d23384d62788daa917c67523c2712000000000000000001162b40566b80959e89745846331f0a00000000000000000000000000000000000c1f3347586b80959e8976614c39291714293e54697e939f8b77614c37220c0000000000000000000000000011263c51667c818282828282828183999c8681828282828282828281839a9c86818282828282817c675b4a36210c00000000000e23394e63788ea395806b56402b160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101f334758687e939f8c79644e41301b0a000000000000000000000000000000000014293f54697e948d78624d38230d00000000000000000000000000000000011426374c5e70859a9e8875614b3a2a1700000c1c2d3e4e606d82979d8877625544311d100000000010263b50657b90a5937e69533e291400000000000000000000000000000000000000000000000000000000000e23384d63788da8b9b6a58b76604b36210b00000000000000000000000000000000000000000000000000000000000b161e2131353427241d12040000000000000000000000000000000113182630353a3f41413f3b3632281f180c0000000000000000000013283d53687d92a98d77624d38220d000000000000000000000000000a1e3346576d82989e8975604b36200b000000000b20354b60758a9f947f69543f2a1400000000000000000013293e53687e93a88b76614c36210c000000000000000000000000000000000004172a3a4c6176899e95806a5746331e1a2c3d596e83999c86715947341f0b0000000000000000000000000012273c51677c9197979797979797999fa49c979797979797979797979a9fa49c979797979797968e79634e39240e00000000000c21364b61768ba798836e58432e19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4b6073869b9a84705f4d39281603000000000000000000000000000000000c22374c6177838479634e39240e00000000000000000000000000000000081d314455667c91a2947e695746321c0c000000102031424b6074859b9a8473604b3e2e1b080000000e23384e63788dab96806b56412b1601000000000000000000000000000000000000000000000000000000000b20364b60758a9fafab9d87725645321e09000000000000000000000000000000000000000000000000000000000b1b283236474a493c39302212020000000000000000000000000008141c3036434b4f55575754514b4538342a1c13050000000000000000162b40566b80959f8a75604b35200b000000000000000000000000000317293950657b90a7907b665036251300000000081d31445572889d96816c57412c1700000000000000000011263b51667b90a38e79634e39240e0000000000000000000000000000000000000c1f3347586b80959e8976614c39292135495b73889e96816c573b2a1804000000000000000000000000000b21364b60748388898989898989888a9f9e8a888989898989898989888b9f9e8a888989898989897e69543f29140000000000091e32465773889e9b85705b3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d314455657b8fa0917c675745321e0e000000000000000000000000000000000b1f344759616e6f635b4a36210c000000000000000000000000000000000b20354b6074869b9b8774604b3929160000000002131e3245566278899b96816c5c4b37220d0000000b21364b60768a9f98836e59432e190000000000000000000000000000000000000000000000000000000000081d314455697f929a998d7c66513828160300000000000000000000000000000000000000000000000000000003162839464b5c605e514d4030201000000000000000000000000008182630414d5460656a6c6c6a6660564c473a3123150700000000000000182d42586d82979d88725443301c0800000000000000000000000000000b20354b6074899e97826d5443301c07000000011527375b70859a99846f593c2c190600000000000000000e24394e63798ea3907b66513b261100000000000000000000000000000000000004172a3a4c6176899e947f6a57463223394e63788ea6917c66513c27110000000000000000000000000000091e324556606e73737373737373737d919580737373737373737373737e93957f7373737373737369614f3b27120000000000031628395b71869b9d88735645321d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374b5d6d82989d8775604b3c2b190500000000000000000000000000000004182a3b474c595a4e4a3d2d1a070000000000000000000000000000000011263b50667b8586857c665645321b0b000000000002162838485a657b8586857a644f3a250f000000091e32455673889d9b86705b3828160300000000000000000000000000000000000000000000000000000000021527374f61697d85847b665e4c381a0a00000000000000000000000000000000000000000000000000000000091e32465761717573665e4d3e2d1c0c0000000000000000000001142636434b5f67737a7f81817f7b756c61594d41322515060000000000001a2f44596f84999b86715b362614010000000000000000000000000000081d3144556e83989e8874604a35200b00000000182e43586d83989c86715a4935200c00000000000000000c21364c61768ba7937e68533e2913000000000000000000000000000000000000000c1f3347586b80959e8975614b39283e53687e939f8b77614c37210c000000000000000000000000000002162838454b595e5e5e5e5e5e5e60758a9c87725b5e5e5e5e5e5e5e61778b9c86715b5e5e5e5e5e544f43321f0c000000000000192e43596e83989f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192e3f4d62778a9e95806a5a48352011000000000000000000000000000000000c1d2a3437444539362d1f0f00000000000000000000000000000000000f23384c5e66717170665e4c382815000000000000000a1a2b3c4b5d65707171645c4b37220d000000021628385b70869b9d88735645321e090000000000000000000000000000000000000000000000000000000000091932434f5f676f6f655d4c40301d00000000000000000000000000000000000000000000000000000000000c21364b6176868a887c665c4a3a2a1909000000000000000000081c304354606c7d878f9496969490898177675f4f433224140100000000001b30455b70859a9a856f5a45301a0000000000000000000000000000000114263752687d92a68e79634e39230e00000000162b40556b80959f8b78634d3a2a1804000000000000000a1e33465774899e95806b56402b160100000000000000000000000000000000000004172a3a4c61768a9e947f695745323c586d83989b86715847331f0a0000000000000000000000000000000a1a2832364448494949494945576e83988e79634e494949494947586f849a8e79634e494949493f3b32241403000000000001162c41566b8196ab8d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011203448596a7f949f8a78624d3f2e1909000000000000000000000000000000000c181f222f3024211a0f010000000000000000000000000000000000091c2f404c505c5c5b504c402f1a0a00000000000000000e1e2e3f4b505b5c5c4f4b3e2e1b0800000000192e43586e8398a68b76604b36210b000000000000000000000000000000000000000000000000000000000000142432414d525a59504b3f3022120000000000000000000000000000000000000000000000000000000000091e3246576378899e8b7a6458473726140100000000000000071b2d3e4b607281919d92898584878a9397897d69614f42311f0f00000000001b31465b70869b99846f5a442f1a050000000000000000000000000000000e23384e63788da7937d68533e28130000000013283e53687d93ab97816c5847331f0e00000000000000031729395c71869c98836d58432e1803000000000000000000000000000000000000000c1f3347586b80959e8875604b38495a73889d96816c563a2a1704000000000000000000000000000000000a161e212e3334343434283951677c9195806b553e2d34342a3a53687d9395806b553e2d343429271f14060000000000000014293e54697e93a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4b6074879c98836e5d4b3726140100000000000000000000000000000000040b0c191a0e0c07000000000000000000000000000000000000000011222f383b4646463b382f22110000000000000000000011212e373a4646463a372e20100000000001162b41566b8096a38d78634e38230e00000000000000000000000000000000000000000000000000000000000006142330393d45443a372e211204000000000000000000000000000000000000000000000000000000000003162839495a667c8d9d8776615544311d12010000000000000d22364a5c6b80959d887d75706f71777e8899927f69604e3d2c1a06000000001c31465c71869b99846f59442f1a040000000000000000000000000000000c2135495b73899e98826d583625130000000011263b50667b90a59f8a77614c3c2c1906000000000000001a2f44596f84999a85705b45301b000000000000000000000000000000000000000004172a3a4c61768a9e947e6956454d63788da6917b66513c261100000000000000000000000000000000000002090b191e1e1e1e1e21364b6075899c87725c4a36221e21374c61778b9c87725c4a36221e14120c03000000000000000011263c51667b91a6927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d314556667c90a0907b655544311d0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232631313026231c11040000000000000000000003111c232530313125221b1002000000000014293e53697e93a5907b66503b26110000000000000000000000000000000000000000000000000000000000000005131e2527302f25231c1103000000000000000000000000000000000000000000000000000000000000000b1b2c3c4c5e6a7f959a8473604b41301f0f000000000004182a3a4f647a8c9d87786760565a586168768399937e685b49352111000000001b31465b70869b9a846f5a452f1a05000000000000000000000000000000061a2c3d5a6f849a9b86715443301c070000000e23384e63788da3a996806b5a4935201300000000000002172c42576c81979d88725d3828160200000000000000000000000000000000000000000c1f3347586b80959d8875604b52687d929f8b76614c36210c0000000000000000000000000000000000000000000409090909091e3245566e83988e79644e3924101f3347586f849a8e79644e3924100000000000000000000000000f24394e64798ea395806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384c5e6f83999c8673604b3a2a17040000000000000002090b0d0b050000000000000000000000000000000000000000000000000000000000000000090f111c1c1b110f090000000000000000000000000000080e101b1c1c0f0d080000000000000011263b51667b90a6937d68533e28130000000000000000000000000000000000000000000000000000000000000000010a10121a1a100e08000000000000000000000000000000000000000000000000000000000000000000000e1e2f404a6072839996806b5f4d3d2d1c0c000000000a1f3447596e8398907b665a4b453a474c586174849a8a79634e3f2e1c080000001b30455b70859a9a85705a45301b0500000000000000000000000000000000172c41576c81969f8972604a35200b0000000b21364b60768ba6aa9f8b78634d41301e0e000000000000152b40556a80959f89745645321e09000000000000000000000000000000000000000004172a3a4c61768a9e937e6956586d82979b86715846331f0a00000000000000000000000000000000000000000000000000000316283851667c9195806b563e2d1b172a3a53687d9295806b563e2e1b0700000000000000000000000c21364c61768ba798826d58432d180004040404040404040404040404040404040404000000000000000000000000000106060606060606060606060606060606000a1a2f404d63788b9f937e695847331f0f0000000000000a151d202220180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea395806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121c3043546175869c917d675b4a3a2918080000000c22374c61778b9b85705e4c3c312a333a475662788a9b85705d4b37230c0000001a2f455a6f849a9b85705b46301b060000000000000000000000000000000014293e54697e93a88d78624d38220d000000091e32455673889e9f8b99836e5f4d3c2b1a0a000000000014293e54697e93a88b76604b36210b0000000000000000000000000000000000000000000c1f3347586b80959d8774605972879d96806b563a2917040000000000000000000000000000000000000000000000000000000b21364b6075899d87725c4a36220c21374c61768a9d87725c4a36220800000000000000000000000a1f33465874899e9a85705b372715191919191919191919191919191919191919191913110b02000000000000050e14161c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c2035495a6b80959e8976614c3d2d1a07000000000a1a28323637342b1d0d0000000000000000000000000000000002080b0b0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba798836d58432e180000000000000000000000000000000000070d0f1a1a1a1a1a1a1a1a1a1a14120c03000000000000000000000000000000040a0c160c0a03000000000000000000000000000000000000000000132536465763798a9e8a7963584636251300000011273c51667c91937e6954402f1d171f29384859697f948f7a654f3a2a18040000192f44596e84999c86715c47311c000000000000000000000000000000000011263b51667b90a58f7a65503a2510000000031628385b71869b9a8488917d675a48382819090000000013283e53687d93a18c77624c37220d00000000000000000000000000000000000000000004172a3a4c61778a9e937e6862778ca5907b66513b261100000000000000000000000000000000000000000000000000000000091e3245566d83988e79644f3924101f3347586f84998f7a644f36251300000000000000000000000417293a5c71869b9d88725544312e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e28261e130600000000081622292c31313131313131313131313131313131313131312c3c4b6175889d97816c5c4a36211300000002152838454b4c483b2b1c0c000000000000000000000000000009151d2021201d150a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465773899e9a85705b37271502000000000000000000000000000002101b2224303030303030303030302a27201507000000000000000000000000000b171f212b211e160b000000000000000000000000000000000000000008182939495b677c919c8776615443301c120001162b40566b80958f79644f3a2411040c1a2b3b4c61768a99836e5847331f0a0000182d42586d82979d88735e3a291704000000000000000000000000000000000f24394f64798ea4917c67523c271200000000192e43596e83989b857d9289786256453727190b00000014293e54697e93a18c76614c37210c000000000000000000000000000000000000000000000c1f3347586b80959d8774677c929f8b76614b36210c000000000000000000000000000000000000000000000000000000000216283851667c9196806b563e2e1b172a3a53687d9296816b5443301c070000000000000000000000192f44596e84999f8a75604b434343434343434343434343434343434343434343433e3a312413020000051626343d41464646464646464646464646464646464646464646464657677d929f8c79644e413019090000091d324556606259483a291a0a0000000000000000000000000919273136363632281f180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395c71869b9d88735544311d08000000000000000000000000000010202e363a454545454545454545453f3b3225150300000000000000000000000b1b293336413632291b0b00000000000000000000000000000000000000000b1b2c3d4d5f6b8095998372604a402f1f0e00182d43586d82988b76614c36210c00000d1f3347586e83988b77614c37220c0000162b40566b80959f8a745846331f0a000000000000000000000000000000000d22384d62778da2937e69533e291400000001162c41566b81969d8873849a857460554437291b110701142636556a8095a88b75604b36200b0000000000000000000000000000000000000000000004182a3a4c61778a9e927d6c81979b85705746331e0a00000000000000000000000000000000000000000000000000000000000b20364b6075899d87725c4b37220c21374c61768a9d8873604a35200b0000000000000000000001172c41566c8196ab8d78625959595959595959595959595959595959595959595959534e42311e0b00000e22344451565b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5f6f849a9a84705f4d37261401000b20364b607477625847382815020000000000000000000002152737444b4b4b4538342a1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e83999f8a75604b36200b00000000000000000000000000071b2e3e4a4f5a5a5a5a5a5a5a5a5a5a544f4332200c000000000000000000000818293a464c564b463929160300000000000000000000000000000000000000000f1f30404b6072849a95806a5e4c3d2c1b0b192f44596e84998a75604b35200b00000417293a53687d92927d67523d2712000014293f54697e94a98b76614c36210c000000000000000000000000000000000c21364b61768baa95806b55402b160000000014293e54697e93a68b7577889983736055463a2f221b171c3043546e83989e89745645311d0900000000000000000000000000000000000000000000000c1f3347586b80969b8671869b95806b56392917030000000000000000000000000000000000000000000000000000000000091d3245566d82988f7a644f3625131f3347586f84998f7a654f362614010000000000000000000014293f54697e94a5907b6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e68604e3a2611000014293d51626b717171717171717171717171717171717171717171717171717178889e917c675544311d0800172c42576c818776615645321d1100000000000000000000081d314455606060564c483b2a1805000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196ab8d78624d38230d000000000000000000000000000d22364a5c646f6f6f6f6f6f6f6f6f6f69614f3b2712000000000000000000011426364658616b615746321e12000000000000000000000000000000000000000001121c3043546176879d8d7c665b493929161a2f44596f84998a755746321e090000000e24394e63798e96816c56412c17010012273c51677c91a38e79644e39240f000000000000000000000000000000000a1e324657758a9f96816c56412c170000000011263c51667b91a38d78657b8c97827361584c3f362d2c2c384b6074889d9a85705a38271502000000000000000000000000000000000000000000000004182a3a4c61778a9e907a8b9f907b66503b26110000000000000000000000000000000000000000000000000000000000000215283851667b9096816b5443301c17293a52687d9296816c5443301c080000000000000000000011273c51667c91a69b858383838383838383838383838383838383838383838383837e68533e28130001162c41566b80868686868686868686868686868686868686868686868686868685889d9d8774604b35200b0013283d52687d928474604b402f19090000000000000000000b20364b6074757572625948341f0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a5907a65503b2510000000000000000000000000000f243a4f647a848585858585858585847f69543f2a14000000000000000000081c30435461768075614b402f1d0c0000000000000000000000000000000000000000011426364758647a8a9e8a79635746321e182e43586d83988b76614b36210c0000000b20354b60758a9a856f5a45301a05000e24394e63798eab917c67513c271200000000000000000000000000000000031629395f74899f97816c57422c17000000000f24394e64798ea3907b65677d8d978476655d4f4a3e413d4956667b90a696806b56412b16000000000000000000000000000000000000000000000000000c1f3347586b80969b869b9f8a76614b36210c000000000000000000000000000000000000000000000000000000000000000b20364b6075899d8873604a35200c21364c61768a9d8874604b35200b000000000000000000000f24394f64798ea4a39b989898989898989898989898989898989898989898989898846f59442f1a00071d32475c72879b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9da6a58f7a644f3a240f0010253a4e5f6d8297816d5e4c37261401000000000000000012273d52677d8b8b8677624c3d2c1a06000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6927d68523d2813000000000000000000000000000e23384e63788d979797979797979a9a846f5a3625130000000000000000000b20354b60738796816d5e4c3b2a1804000000000000000000000000000000000000000008182a3a4a5c677d929c8675614b4332212c41576c81968c77624c37220d000000081d31445573889c87725c47321d07000b20364b60758a9f947f6a543f2a1500000000000000000000000000000000001e34495e73899e97826d57422d18000000000c21374c61768ca8937d685f697e8d9a877b6e645c5856585b6374869ca28e79644e39240f0000000000000000000000000000000000000000000000000004182a3a4c61778a9e9ba39b85705746321e0900000000000000000000000000000000000000000000000000000000000000091d3145566d82978f7a654f3a25101f3346586f8499907a65503b2510000000000000000000000c21374c61778c92929292929292929292929292929292929292929292929292929286715c47321c00051a30455a6f84929292929292929292929292929292929292929292929292929292929292927d68523d2813000b1e31414b607586907b665544311d0800000000000000000b20354a6072869b97826d5b4935210f00000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea495806a55402b15000000000000000000000000000c2135495b687e818282828282818d9c87725443301c070000000000000000081c30435471869b917c665947341f120000000000000000000000000000000000000000000c1c2d3e4d5f6c819698836e614f402f2b40556a80958e79644e39240f000000011426375d72879c88735e48331e0900091d32455672879c98836e583a2a1804000000000000000000000000000000091e33485e73889d98836d58432e18000000000a1f33475874899e95806b5560697d8b9c90837a726e6c6d7079859ba49a85705c4a36210d00000000000000000000000000000000000000000000000000000c1f3447596b8096a8a795806b553928160300000000000000000000000000000000000000000000000000000000000000021527384f647a8b92816c56412c1717293a52677d92917e69533e2914000000000000000000000a1f334758677d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d67513c2712000010253a4f657b7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d79634e39230e0001131e324557657b8f8673604b35200e0000000000000000071c304354667b909f8c79634e3e2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca897826d58422d1800000000000000000000000000061a2c3d4e60686c6c6c6c6c6c73889d8a75604a35200b0000000000000000011426364f647a8c9e8877614c40301b0b0000000000000000000000000000000000000000000f2030414b6073849a947f6a5e4c3c2b3c51667c91927d68523d2813000000001c31465b71869b89745e49341f090002152838586d82989d87725947341f0a000000000000000000000000000000091e33485e73889d98826d58432d18000000000417293a5c71869c98826d584f5f677a8695988f87838182858d9ba39e8a79634d3e2d1a07000000000000000000000000000000000000000000000000000004182a3a4c61778a9292907b65503b25100000000000000000000000000000000000000000000000000000000000000000000a22364a5c64797c7c66503b26110c21364b61757d7c74604b36200b0000000000000000000004172a3a4d5f67676767676767676767676767676767676767676767676767676767675f4d39241000000e22374b5d6567676767676767676767676767676767676767676767676767676767676767635b4936210c0000031628394b5d6e83927d67523c2b190500000000000000001325364c5e6f849a98836e5c4a362110000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899e9a856f5a36261401000000000000000000000000000f1f31424e5357575757575b70859b8c77624c37220d0000000000000000000822364a5c6b809699836e5e4c39291703000000000000000000000000000000000000000001131d3144556277889d8d7c655a4938374c62778c96816c573f2e1b080000031729395c71879c88735e48331e09000013283e53687d93a58c77614c37220c000000000000000000000000000000031628385e73899e97826d57422d1800000000001a2f44596f84999a85705b414d5c6475808a959c9896989ba39e97897c655b4935200f000000000000000000000000000000000000000000000000000000000c1f344759657b7d7d7d74604b36210b000000000000000000000000000000000000000000000000000000000000000000071b2d3e4a5b6367665e4c38230f0a1e324657616767605645321d0900000000000000000000000c1c30414d52525252525252525252525252525252525252525252525252525252514d41301d0a0000081b2e3f4b4f525252525252525252525252525252525252525252525252525252525252524e493d2c1a060000081825303f4f657a8f85705a4835200b000000000000000008182f404f647a8d9f8d79644e3f2e1b0800000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c71879c9d87725443301c0800000000000000000000000000011424313b3e4242424243586d83988f7a644f3a250f000000000000000000071b2d3e4b6075879c917c665746331e10000000000000000000000000000000000000000000011527374759647a8b9e897862564534475972879c87725d4b37221100000a1e33465773889c87715c47321c0700000e23384e63788da5927c6752372715010000000000000000000000000000091e32455674899f96816c57412c170000000002172c42576c81979d887255443e4b56606b777f868c8f91918e898278655e4c3c2c19010000000000000000000000000000000000000000000000000000000004182a3a4b5d65676767605645321e090000000000000000000000000000000000000000000000000000000000000000000010202d3d494e52504c402f1c0903162939464b52514b4538281502000000000000000000000000132330393d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c393023120100000010212e373a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d39362c1f0f000000132536434a556072878d78624d38220d0000000000000000001122364a5c6e839899846f5d4b372211000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f84999f8a75604b35200b000000000000000000000000000006141f26292c2d2d2d40566b8095917c67523c271200000000000000000000101e324556657b8d9d8875614b3e2d1b0700000000000000000000000000000000000000000009192a3b4b5c687e939b8575604b423b556a80958f7a654f3f2e1d0f060c21364c61768b99846f5a442f1a0500000c2135495b72879d98826d5544311d0800000000000000000000000000000b21364b60768ba9957f6a55402a150000000000142a3f54697f949f8a75604b3538454b58616a71777a7c7b79766d625a4c402f1e0e0000000000000000000000000000000000000000000000000000000000000c1c2e3f4b505252524b45382816020000000000000000000000000000000000000000000000000000000000000000000002101f2c35383d3b382f221200000b1b2932363d3c3632281a0a0000000000000000000000000005131e252728282828282828282828282828282828282828282828282828282827241d12050000000003101b22252828282828282828282828282828282828282828282828282828282828282823211a0f010000071c304354606b757783927d68533d2813000000000000000000071b2d3e4d63788b9f8f7a654f402f1808000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197aa8c77624d37220d000000000000000000000000000000020b1113171717283e53687d93947f6a543f2a1500000000000000000000031628384b5d6d829796816c5c4a362212000000000000000000000000000000000000000000000d1d2e3e4e606d819798826d604f3f4d62778b98836e5d4b3c2c211a1d2d3d50657b90957f6a55402a15000000061a2c3d566b81969e8874604b35200d00000000000000000000000000000d23384d62788da2937e68533e2913000000000012273c52677c91aa8d77624d3828323a474c5559626567666460574d483c2f2111000000000000000000000000000000000000000000000000000000000000000011212e373a3d3d3d3632281a0a000000000000000000000000000000000000000000000000000000000000000000000000000e1a21232726231c12040000000b161e212827201d150a000000000000000000000000000000010a101212121212121212121212121212121212121212121212121212121212100a0100000000000000080e10121212121212121212121212121212121212121212121212121212121212120e0c06000000000b20354a6072808a8c9896816c57412c1702000000000000000000102035495a6c81979a85705e4c362513000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a48f7a654f3a251000000000000000000000000000000000000000020211263b50667b9097816c57422c1702000000000000000000000a1a2e3f4d62778a9e8c7a644e4030190900000000000000000000000000000000000000000000102031424b6074859b937e695d4b48596d8298907b655a493d352c313a4a5b6d82988f7a644f3a250f000000000f253a4f647a8fa4907b66513b2b19050000000000000000000000000010263b50657b90a5907b65503b261000000000000f253a4f647a8fa48f7a65503a251e2a33373b484c5052514f4b4539342b1d1103000000000000000000000000000000000000000000000000000000000000000003111c2325282828211e160a000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e12110f09000000000000030a0c12120b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d929fa9ae99836e59442e190400000000000000000006192c3c4c62778a9e907b665443301c09000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91a7927c67523d27120000000000000000000000000000000000000000000e23394e63788e99846f5a442f1a00000000000000000000000011203448596a7f959a84705e4c3727150200000000000000000000000000000000000000000002141d3245566278889e8c7b6559484c6177889d8778635b4e493d444b5863798b9c86715c4b37220d000000000d22374b5c71869c98836e594834200d0000000000000000000000000014293e53697e93a78d78624d38220d00000000000d22374c62778ca9927d67523d2812171f212a34373a3c3c3936322820190d000000000000000000000000000000000000000000000000000000000000000000000000080e101212120b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1013141413100c0a04000000000000000000000000000000000000000000000000001a2f445a6f8499afbaae99846e59442f1904000000000000000000000e1f3447596a80959b8572604a37261401000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4947f6a553f2a150000000000000000000000000000000000000000000b21364b60768b9c87715c3a2a1804000000000000000000000005182b3b4b6075879d917c665544311d09000000000000000000000000000000000000050b0d0f101528384859657b8c9e887862564758667c8d9c86796b635b5b55606676869c917c67513e2e1b0800000000081b2e3e54697e939f8b78624d3b2b19050000000000000000000000071a2d3d586d82989e8874604a35200b00000000000b20354a60758a9f947f6a553f2a15040a0d181f2225272624211e160a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a101220202020202020202020202020202020202020202020202020202020181610060000000000000000000000000000000000000000070c171f2126282a2a2826221f180c0a04000000000000000000000000000000000000000000001a30455a6f859aafbcac96816c57412c17020000000000000000000005182a3b4b6176889e917c675544311d0a000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca997826c57422d17000000000000000000000000000000000000000000091e32455673889e89745947341f0a0000000000000000000000000d1e324556677d929c8774604b37271501000000000000000000000000000001080d181f22242523212b3b4b5d697e939b8574604b4c5e677d8c9c8b8079737070757c879c98826e5f4d3920100000000000001021364c6176899e96816b594834201200000000000000000000000c21364a5b72879d99846e5443301c070000000000071c30435472879c97826d57422d18000000050b0d1012110f0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1416100e090000000000000000000000000000000000000000000000000000000000000000000000000005131e2527353535353535353535353535353535353535353535353535353535352d2b231709000000000000000000000000000000000008131c202933363b3e3f3f3e3b37332a211f170b020000000000000000000000000000000000000000152a3f546a7f94a0ab9f8f7a644f3a250f0000000000000000000000000d1e334657697e939c8673604b382715020000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9f9a846f5a362513000000000000000000000000000000000000000000031628385b71869b8c77614c37220c000000000000000000000000031628384b6073879c927d685544311d080000000000000000000000000009151d202a34373a3a3836322e3f4f616d829897816d604e4d5f677c8895968e88868689919d938374604b41301d020000000000000a1f3346586a80959f8a78624d40301e0e000000000000000000021628384e63798ea5937e6954362513000000000000001325365a6f859a9a846f5a362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192022292b26231c11030000000000000000000000000000000000000000000000000000000000000000000001132330393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a433f3527170600000000000000000000000000000210182530353a464c5053545453504c473a3633291d150a000000000000000000000000000000000000000b20364b6073828d908c806b5c4b37220d000000000000000000000000031729394b6074879d927d685645311d0a000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879c9c87725443301c07000000000000000000000000000000000000000000192e43596e83988f79644f3a240f000000000000000000000000000a1d314455687d929d8774604b3625130000000000000000000000000e192731353b484c4f504e4b453835424b6075859b937e685c4b4d5e667580888f9395969490897e73605645322312000000000000000417293a4c6176899e98826e5e4c3c2b1c0d00000000000000000a1e3245566b8095a28d78624d38220d00000000000000182d42576d82979c87725443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111d2b34373e403b382f2117090000000000000000000000000000000000000000000000000000000000000000000a1e30414d5260606060606060606060606060606060606060606060606060606060585246352310000000000000000000000000000513212e36434a5258616568696968656158544c463a31271a0f010000000000000000000000000000000000081d314455606e787a786b62503e2e1b08000000000000000000000000000b1d314455677d929d8774604b392816030000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849a9f8975604a35200b000000000000000000000000000000000000000001162c41566b8196917c67513c271200000000000000000000000000011426374b6074879d927d685443301c07000000000000000000000e1e2b37444b5359626465636056524b4445576278899e8b7a6459484c57616b747a7e80817f7b75696055453828150400000000000000000c1e334657687d92a0917c665a483a2b1d110600000000000a1a2b3b4b6075889d9a85705a4835200b00000000000000152a40556a7f959f8975604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e3b484d5456504c403527170400000000000000000000000000000000000000000000000000000000000000001025394d5f67757575757575757575757575757575757575757575757575757575756d64523f2b16010000000000000000000000061423313f4b54606770767b7d7f7f7d7b77716961584b45382d1f12040000000000000000000000000000000002152737444b5a6265625a50443320100000000000000000000000000000021527374a6075899e937e695745321e0b000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297a98c77624c37220d00000000000000000000000000000000000000000014293e53697e93947f69543f2a140000000000000000000000000000091d314455697e939c8773604a35200e0000000000000000000d1d2b3c485560697177797a78766f6860554b495a667c8d9d8877625544464b546065696b6c6a6660564b4437281a0a000000000000000000031729394e606f849a9e89786258483b2e21190f0b090b101a28384859697e93a4927d67523c2b19050000000000000013283d52687d92a98c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b5962696b655e5245352312000000000000000000000000000000000000000000000000000000000000000012273c52677d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a826d58432d18030000000000000000000002142432414e5d65727d858b9093949493908c867f766a60564a3d3022130500000000000000000000000000000000091927313c494d504d483c332616020000000000000000000000000000000e23394e63798ea89d8875604b3a2917040000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95a48f79644f3a240f00000000000000000000000000000000000000000011263c51667b9196816c57412c170200000000000000000000000000021527374b6175899e907b66503c2b19060000000000000005182b3b485a62737e868c8f8f8d8a847d73655d4e4c5e6a7f949a8474604b4136434b4f53565755504b45383126190a00000000000000000000000b1b31424d6277889d9c867662594b3f352c24201d20222d3845566277899e9c8673604b35200e000000000000000010253a50657a8fa48f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d65787e807b6d635241301d0a000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a85705b45301b0600000000000000000000102032424f5f687b85929a9f9994929192959a9b94897f74635b4d40302313040000000000000000000000000000000009151d2b35383b38352b1e16080000000000000000000000000000000316283854697e94a9a6947f6a5846331f0c000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7917c67523c27120000000000000000000000000000000000000000000f24394e64798e99846f59442f1a000000000000000000000000000000091e3246576d829799846f5a4935200b000000000000000b20344859627886939b928d8b8d909792867b685f4e4a6072839996816c5f4d3e30353a3e40413f3b3631271d1409000000000000000000000000001320344859657b8b9f9b8577655d4d493c39363234373e4a566074849aa0917c665544311d0800000000000000000d23384d62788dab917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c50657b89939590816d5f4d392410000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9a19a8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b88735d48331e080000000000000000000a1a2d3e4f60697d8c9b9f948a837f7d7c7d80858c979e948679675f4d413022120000000000000000000000000000000000020e192023252220190e0000000000000000000000000000000000091e3245566f849aa29a9e8976614c3b2a18040000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5947f69543f2a140000000000000000000000000000000000000000000c21364c61768b9c86715c3a2917040000000000000000000000000000031628394f647a8f9f8b78624d38230f000000000000081c2e3f4d6277879c96857d7776777b828a9a8c7d68604e546175869c927d675c4a3a2a25292b2c2a26201d150a01000000000000000000000000000005182b3b4b5d667c8b9e9b877b6d635b534e4b45484d515c64748399a298826d5e4c3726140100000000000000000b20364b60758a9f947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a72879da8ab9f917c67513c2712000000000000000000000000000000000000000000000000000000000000000b20354a60758a9f9a8474767676767676767676767676767676767676767676767674604b36200b000000000000000000021528384a5c697e929f9d8a7f756e696766686b7078828c9d9c8a7d675f4d402f1f0e000000000000000000000000000000000000060b0d100d0b050000000000000000000000000000000000000b21364b60758a9f9a859a95806b5947341f0e000000000000000000000000000000000000000000000000000000000000000000000d22384d62788d9292816c57412c170000000000000000000000000000000000000000000a1f33465874899e89745847331f0a0000000000000000000000000000000b22374b5c71869c947f6a553d2d1a0700000000000e23374b5d6f839996817367626062666d78849a8d7e685b4a5763798a9e8b7a645847372614161715110b090200000000000000000000000000000000000d1d2e3f4c5e667c8a9c9d8d82786f686460565962676e7a8599a19b8575614b402f1909000000000000000000081d31445573889d96816c57412c1702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788da5b7beac97826d57422d1800000000000000000000000000000000000000000000000000000000000000071c30435472879c9c87716060606060606060606060606060606060606060606060605645321d09000000000000000000091d324556647a8c9f9d88796a605654525152565a626c7a879b9e8c7d675e4c3d2c190900000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b909f8c798d9e8a77614c3c2b19050000000000000000000000000000000000000000000000000000000000000000000b20354b60737d7d7d7b654f3a25100000000000000000000000000000000000000000000417293a5c71869c8c76614c37210c000000000000000000000000000000081b2e3e54697f949c86715b4a36210c000000000114263650657b8f99836f60544d4b4d505b6375849a8b796355495b667c8d9d8776615544311d1201000000000000000000000000000000000000000000000010212f404c5e667986959f978c847e79757474777c838c9ba098867761574632221200000000000000000000021527375b70859a99846f59442f1a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca1b3b9a996816c56412c1700000000000000000000000000000000000000000000000000000000000000001325365a6f849a9e8974584b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b45382815020000000000000000000b20364b6074869c9e8979635b4b45383d3c3d3c484d5c6476849b9f8c7c665b49372715010000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c566c81969b8671839996816c5a4835200f000000000000000000000000000000000000000000000000000000000000000000081d31445560676767655d4b37230e00000000000000000000000000000000000000000000192f44596e84998e79644e39240f000000000000000000000000000000001023384e63788da48e79634e39240e00000000081c3043546e83988d79634e433636383c49576176899b8573604b4c5e6b80959a8473604b41301f0f00000000000000000000000000000000000000000000000212222f404c5b6374808b969e9a938e8b898a8c91999f9c918376615947392816040000000000000000000000182e43586d83989c86715c47311c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586f8499a2a79e8b79634e39240e0000000000000000000000000000000000000000000000000000000000000000182d42576d8297a88c77614c3736363636363636363636363636363636363636363632281a0a000000000000000000071b2e3e53687d92a3927d685b493d32282827282b353e4b586175859b9e8979635544311d0c000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a72879c96806b798c9f8b78624d3d2c1a06000000000000000000000000000000000000000000000000000000000000000001142637444b5252524f4b3f2e1c0800000000000000000000000000000000000000000002172c41576c8196917c66513c2711000000000000000000000000000000000c2135495b72879c947f6a55392917030000000b20354b6074899a85705b49352621222c394758687d92917c6752404b6072839996806b5f4d3d2d1c0c00000000000000000000000000000000000000000000000412222f3d4a56606a7780889095999c9d9e9d9a958f867c6e6158473b2a1b0b00000000000000000000000014293f54697f868784705b46301b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c6277848e90897d675b4a36210c0000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94a48e79644f392421212121212121212121212121212121212121201d150a000000000000000000000d22364a5c71869c9b8671604e3d2c1e1612111319202e3a47576277889d9b8573604b3a2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788da4907b656e839897826d5b4935210f00000000000000000000000000000000000000000000000000000000000000000009192631353d3d3d3a372e2111000000000000000000000000000000000000000000000014293f54697e94937e69543e291400000000000000000000000000000000061a2c3d576c81969a85705746331e0a0000000e24394e63798e95806b553d2c1a0b0e1b2a3a4b6074889b85705c4a43546176879c917d675b4a3a291808000000000000000000000000000000000000000000000004121f2d38454b59626b747a80848788898784807a71665e4c463a2a1d0c0000000000000000000000000012273b4f61697171706655422e190400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c203448596272797a76675f4d3d2d1a07000000000000000000000000000000000000000000000000000000000000000012283d52677d92a6917c67513c27120b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090200000000000000000000000f243a4f647a8fa4937e685342311f0f0300000006101c2a394859667c90a1947e695847331f0b00000000000000000000000000000000000000000000000000000000000000000000000000000115273753687e939f8a756063798c9f8c79634e3e2d1a0700000000000000000000000000000000000000000000000000000000000000000009141d2028282825231c1103000000000000000000000000000000000000000000000012273c51677c9196816c56412c17010000000000000000000000000000000011263b50667b909f8a76614b36210c00000012273c51677c91917c67523c271200000c1d3144556b80958e79644f36475863798a9e8a79635846362513000000000000000000000000000000000000000000000000010f1a28323b484d5560656b6f727373726f6b645c514c4033291b0c00000000000000000000000000000c1f32434f545c5c5b554838261200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b485460646561574d41301f0f00000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4947e69543f29140000000000000000000000000000000000000000000000000000000000000000142a3f54697f949f8b76614c372113000000000000000c1b2a3b4c5e6f84999e8977614c3928160300000000000000000000000000000000000000000000000000000000000000000000000000081d3144556e83999a846f565b6d829798836e5c4a3621100000000000000000000000000000000000000000000000000000000000000000000001080b121212100e08000000000000000000000000000000000000000000000000000f243a4f64798f99836e59442e1900000000000000000000000000000000000b21364b60768a9f907b65503b261000000013283d53687d92907b65503b26100000011426374f64798f95806a55403a4a5b677d929c8776615443301c12000000000000000000000000000000000000000000000000000a161e2b3437444b5056595c5e5e5d5a564f4b3e382f1f170b000000000000000000000000000000031424323b3f47474642382a1a09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b36434a4f504c4639302312010000000000000000000000000000000000000000000000000000000000000000000d22384d62778daa96816c57412c170200000000000000000000000000000000000000000000000000000000000004192f44596e84999c87725847331f0a00000000000000000d1d2f404e63798c9f95806b5746321e09000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6075899e947f69544d62788b9f8d79644e3f2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778c9b86715c3929170300000000000000000000000000000000091e32455671869b947f6a553f2a1500000014293e54697e938f7a654f3a25100000000b20364b60758a9a856f5a392d3d4d5f6b8096998372604a402f1f0e00000000000000000000000000000000000000000000000000020d18202731353b40444748494845403a372e241d1204000000000000000000000000000000000006141f27293232302e261a0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18253035393b3633291b1205000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9f99846e59442f1900000000000000000000000000000000000000000000000000000000000000021528385d72889d98836d583a2917040000000000000000001221364a5b6d82989e8975614b36210c0000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa68e79644e485a6c819799846f5d4b372211000000000000000000000000000000000000000000040a0c11131412100b0802000000000000000000070b0705000000000000000000000000000000000000000000000a1f34475974899e89735746331e0a0000000000000000000000000000000003162838576c829799836e5938281502000013283d53687d92907b65503b2610000000091d31455671869b897457463330414b6073849a95806a5e4c3d2c1b0b00000000000000000000000000000000000000000000000000000509151d20252b2f32333432302b25221b10090000000000000000000000000000000000000000030c12141c1c1b191209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202425211e170b000000000000000000000000000000000000000000000000000000000000000000000000081d31445572879d9c86715c3a291704000000000000000000000000000000000000000000000000000000000000091d32455674899f95806b56402b1600000000000000000000071a2d3d50657a8fa5927d68523a291704000000000000000000000000000000000000000000000000000000000000000000000004182a3a556b80959e8874604a3c4d62778a9f8f7a654f402f1808000000000000000000000000000000000000050c171f2126292a2825201d1509080000000002090b1c201d1a140a000000000000000000000000000000000000000004182a3a5c72879c8b76614c36210c000000000000000000000000000000000013283e53687d939d87725645321d09000011273c51667c91917c67513c271200000002152738596e84998b76614c36213144556177879d8d7c665b493929160300000000000000000000000000000000000000000000000000000001080b10161a1d1e1e1d1a160f0d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f100c0a0300000000000000000000000000000000000000000000000000000000000000000000000000011426375a70859a9e89745846331f0a0000000000000000000000000000000000000000000000000000000000000b20364b60758ba9947f6a543f2a1500000000000000000000000f20354a6073879d9a856f5846331f0a00000000000000000000000000000000000000000000000000000000000000000000000a1f34475971869b98836d54433448596b81969a85705e4c36251300000000000000000000000000000000000d19202a33373c3e3f3d3a363127221b1006000a151d203135322f271c0e00000000000000000000000000000000000000001a2f445a6f84998e79634e39240e00000000000000000000000000000000000f24394e64798e9f8a75604b36200b000010253b50657a90937d68533e281300000000182d43586d82988d78634d382327374759647a8b9e8a79635746321e1503000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1416100e0900000000000000000000040a0c1316120b080100000000000000000002090b1216130b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297a78b76614c36210c0000000000000000000000000000000000000000000000000000000000000d22374c62778ca1937e69533e29140000000000000000000000071c3043546b80959f8b76614c36210c00000000000000000000000000000000000000000100000000000000000000000000000c22374c61778b9f927d6852362b3b4c61778a9e907b665443301c09000000000000000000000000000003101d2b343a474c515354524f4b4437372e211a0e1a283236464a47433a2c1c0a00000000000000000000000000000000000002172d42576c8297917b66513c261100000000000000000000000000000000000b21364b60768ba68e79634e39230e00000d22384d62778d96816c5639281603000002172c41576c81968e79634e3924192a3a4a5c687d929c8675614b4332211100000000000000000000000000000000000000050b0d120b090300000000000000000002090b0d0b05000000000000000000000000030a0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b07000000000000000000000d192022292b26231c1103000000000000000c171f21292b27201c1408000000000000000a151d20282b28201d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000c22374c61778ca1937e69543e29140000000000000000000000001325364f657a8fa9917c67513c271200000000000000000000000000000000050b0d1416100e09000000000000000000000013253652677d92a48c77624d37223447596b80959b8572604a372614010000000000000000000000000010212e3b484d5861666869676560554f4b3e352c1f2838454b5c605c574a3a271400000000000000000000000000000000000000152a3f546a7f94937e69533e29140000000000000000000000000000000000091e32455673889e907b66513b261100000b2034485a72889b85705746321e09000002172c41576c81968e79634e39240e1c2d3e4e606c819798836e614f402f1e0e00000000000000000000000000000000000d18202227211e160a000000000000000a151d202220180d000000000000000000000b161e21222222222222222222222222222222222222222222222222222222222222201c130800000000000003111d2b34373e403b382f21170900000000010f1c2933373e403c353026180b00000000000c1a2832363d403e3632281a0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a6917b66513c26110000000000000000000000000000000000000000000000000000000000000b21364b60768ba8947f6a543f2a150000000000000000000000000b20364b60758a9f96816c56412c170000000000000000000000000000000d192022292b26231c11030000000000000000071c3043546d82989c8671594834202a3a4c6176899e917c675544311d0a0000000000000000000000000d1d2e3f4b59626e767b7e7f7d7a756e645c4e493d32324556607175726857432f0c0000000000000000000000000000000000000012273d52677c9296816b56412c160100000000000000000000000000000000031628385b71869b927d68523d2813000005192b3c586e83988a76614b362112000001142636586d82988c77624d37220d102031424b6074859b947f6a5e4c3c2b1a0a0000000000000000000000000000000d1d2b34373d3632281a0a00000000000a1a28323637342b1d0d00000000000000000b1b2932363737373737373737373737373737373737373737373737373737373737373530251808000000000011212e3b484d5456504c40352717040000000f1f2c3a474c5355514b4336291b0b0000000c1c2938454b5256534b45382a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5937e69543e2914000000000000000000000000000000000000000000000000000000000000091e32455774899e96816c56412c17000000000000000000000000091d31455671869b9a85705b3828160200000000000000000000000003111d2b34373e403b382f211709000000000000000b20354a6074889e96816c563b2b181f3347586a7f959c8673604b382715020000000000000000000005182a3b4b5d6578838a919394928f89837a6f635b4f42364b6074858a86725c3a2a180400000000000000000000000000000000000010253a4f657a8f98836e59432e19000000000000000000000000000000000000192e43596e8398947f6a543f2a1500000012273d52677d92927d685240301d0d01081c30435470859a8a76604b36210b02131d3145566277889d8d7c655a49382816030000000000000000000000000005182b3b484d524b453828160300000002152838454b4c483b2b1c0c00000000000003162939464b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4a4336251300000000081c2e3f4b5962696b655e52453523120000061a2c3d495861686b6760544639291603000417293a475660676b686056473a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788dab96816b56412c16010000000000000000000000000000000000000000000000000000000000031628395c72879c99836e5939291603000000000000000000000002152738586d82989e88735645321e0900000000000000000000000011212e3b484d5456504c40352717040000000000000f24394f64798ea6907b66513b261117293a4b6176889e927d685645311d0a000000000000000000000b1f344759657b89989f9f9a96949599988f847969604b444d63788d9f89745847331f0a0000000000000000000000000000000000000d22374d62778c9b86715b392816030000000000000000000000000000000001162c41566b819696806b56412b160000000b20364b6075889a85705e4d3b2a1c141420354b6074899c86715645321e0900021527384859657b8b9e8978625645321e14030000000000000000000000000b203448596267605645321e09000000091d324556606259483a291a0a00000000000a1e32465761626262626262626262626262626262626262626262626262626262626262605443301c070000000e23374b5d65787e807b6d635241301d0a000c2135495b63767e807c73615746321e0a000a1f33475861747d807d74615847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9f99836e59442e19000a0a0a0a0a0a0a0a0a0a0a0a0a0a0a000000000000000000000000000000192e44596e83999c87725746321e0a000000000000000000000000162b40556b8095a68b76604b36210b0000000000000000000000081c2e3f4b5962696b655e5245352312000000000003172939546a7f949f8a76614b36210c0c1e334657697f949d8774604b39281603000000000000000004182a3a4c6277889da39b8c84807f80848a949a8a7e6c60554b61768ba88c77614c37220c0000000000000000000000000000000000000b20354b60758a9e88735745321e090000000000000000000000000000000000152a40556a7f9596816c56412c17000000091d3145566a8095917c6659473a302626304250667b9097816c573828160200000a1a2b3b4b5d697e939b8575604b423221110000000000000000000000000d22374d62777c74604b36210b0000000b20364b60747762584738281502000000000c21364b617577777777777777777777777777777777777777777777777777777777777772604a35200b000005192b3c50657b89939590816d5f4d392410011527374e6379889395918475614b36210c000c21374c6176869295938676614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889d9b86715b3928161f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f12100a010000000000000000000000152a40556a7f959f8a76614b36210c00000000000000000000000014293e53697e93a28d77624d38220d00000000000000000000000e23374b5d65787e807b6d635241301d0a000000000a1e33465770859a9a85705746321e09031729394b6075889d937e695745321e0b00000000000000000a1f3347586d8297a69b85786f6b696b6f767e899893817360555774899e8e79644f39240f000000000000000000000000000000000000081c30435472879d8b76604b36210b000000000000000000000000000000000014293f54697e9497826c57422d17000000021527384b6175879d877762584b433636434b606f84998e7a644f39240f000000000d1d2e3f4f606d829898826d604f3f2e1d0d0000000000000000000000172d42576c81927f6a55402a15000000172c42576c818776615645321d1100000000142a3f54697f8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c78634d38230e00000b2035485a72879da8ab9f917c67513c2712081d31445570849aa6aaa295806b56402b1602172c41576c8196a4aba497826d58422d1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527375b70859a9e8873574632343434343434343434343434343434343427251e13050000000000000000000010263b50657b90a8907b665037271502000000000000000000000013283d53687d92a38d78634e38230e0000000000000000000005192b3c50657b89939590816d5f4d392410000000000c21364b61768a9f947f6a5439281603000b1e324556697e939d8875604b3a291704000000000000000c22374c61778a9f9d8876635a565455576169778294978373605c72879c917c66513c2711000000000000000000000000000000000000011426365a6f859a8e78634e39230e000000000000000000000000000000000013293e53687e9398826d58432d18000000000a1e324657657b8d9c867667605454535460697e929a84705c4a36220d0000000000102132424b6074859b937e695d4b3b2b1a0a00000000000000000000192e44596e839985705b3b2b1805000013283d52687d928474604b402f190900000012273c51677c9195959595959595959595959595959595959595959595959595959595907a65503b251000000d22384d62788da5b7beac97826d57422d180b20354b60758a9fb4c0b09b86705b46311b071c31475c71869cb1c2b39e88735e49331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398a78b76614b4949494949494949494949494949494949493c39302313010000000000000000000b20364b6075899f96816c5544311d08000000000000000000000013283d52687d92a38e78634e39230e000000000000000000000b2035485a72879da8ab9f917c67513c27120000000011273c51667c91a78e79644f39240f0000031628384b6074879d947f6a5846331f0c0000000000000013283d53687d92a9937d6858493c3f39464b59626e7f8d97816d616f859a947e69543f291400000000000000000000000000000000000000182d42586d8297907b66503b2611000000000000000000000000000000000013283d52687d9298836e58432e1900000000031628394b5d687e8d9c887d746c6a696b737e8c9f8a79634e3e2d1b07000000000003141e3245566278899e8c7b65594838281502000000000000000000182d42576d82978973594834200b000010253a4e5f6d8297816d5e4c3726140100000d22384d627880808080808080808080808080808080808080808080808080808080808079634e39240e00000c21374c61768ca1b3b9a996816c56412c17081d31445574899eb3baaf9a846f5a452f1a061b30465b70859bb0bcb29c87725d47321d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095a38e78635f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f524d41301e0a000000000000000000091d3245566e83999e8874604b362010000000000000000000000014293e54697e93a18c77624c37220d000000000000000000000d22384d62778da5b7beac97826d57422d18000000061a2c3d576c81979e8874604b35200b0000000a1d314556687d929e8976614c3b2a1804000000000002172d42576c82979f8a76614c3a2c2a29323b474c616a7d8d947f6a6d829896816c56412c1701000000000000000000000000000000000000152a40556a7f95937e68533e2913000000000000000000000000000000000012273c51677c9199846e59442f1900000000000b1b2e3f4e60687d8a999288827f7e8187939c8b7c665b493520100000000000000002162838485a657b8c9e8878625645321d09000000000000000000162b41566b80968c77624d37220d00000b1e31414b607586907b665544311d0800000b2035485a626b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b635b4a36210c00000a1f3347586f8499a2a79e8b79634e39240e01152737576c8197a0a99f917c66513c27110014293e53697e939fab9f947e69543f2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a6907c7474747474747474747474747474747474747474675f4d3925100000000000000000000215283851667c91a6917c66513f2e180800000000000000000000152a40556a7f95a88b75604b36200b000000000000000000000c21374c61768ca1b3b9a996816c56412c170000000c2135495b72879d98836e5443301c08000000021527384b6074879c95806b5947341f0e0000000000061b30465b70859b9c86715847331c14161e2a34434f5f697e938c7b6b809599836e59442e190000000000000000000000000000000000000013283d52687d9295806b56402b16010000000000000000000000000000000012273c51677c9199846f5a442f1a000000000000112131424e5f6778838d94979493969891867b665e4c3d2c1a0200000000000000000a1a2b3c4c5d697f8e928675604b36200b000000000000000000152a3f556a7f94907b65503b2610000001131e324557657b8f8673604b35200e000005192b3c484d5656565656565656565656565656565656565656565656565656565656564e4a3d2d1a0700000417293a4c6277848e90897d675b4a36210c000c21364b6175828e908a7f695e4d39240f000b20354a6072808c908c8172604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a59f8b898989898989898989898989898989898989898a7d67523c2712000000000000000000000b20364b6074889d99836e5d4b3625130000000000000000000417293a576d82979e89745645321d09000000000000000000000a1f3347586f8499a2a79e8b79634e39240e0000000e23384e63788da5927d685336261401000000000a1d314455677d929e8a77614c3c2b190500000000081d32475d72879c98836e593a291700030d181f32414f606b809687767e939b86715b3929160300000000000000000000000000000000000010253b50657a9098836e58432e19000000000000000000000000000000000012273d52677c9299846e59442f1900000000000003132431414d5a626e787f84868886837c74655d4c40301f0f000000000000000000000e1e2f3f4f61697a7c7d78624d38230d00000000000000000013293e53687e93947e69543f2914000000031628394b5d6e83927d67523c2b190500000e1e2b353840404040404040404040404040404040404040404040404040404040404039362d1f0f000000000c203448596272797a76675f4d3d2d1a0700091e324657616e797b7769614f40301d0900071c304354606b787b786c605443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788daba99f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e957f6a55402a1500000000000000000000091d314556697f94a18f7a655443301c0f00000000000000000a1f33465871869c9a846f5a38281502000000000000000000000417293a4c6277848e90897d675b4a36210c00000215283854697e93a48d78624d38220d0000000000011527374b6073869c96816c5a4835200f00000000091e33485e73889d97826d57422d1800000005152332424b60738597817c919e89735746321e0a0000000000000000000000000000000000000d23384d62788d9b85705b382815020000000000000000000000000000000013283d52687d9298836e58432e1900000000000000061323303c484d5a62696e7172716d6760554b3f302212010000000000000000000000112132434f5c646767625a4835200b00000000000000000012273c52677c9197826d57422d18000000081825303f4f657a8f85705a4835200b0000000e1920222b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b24211a0f010000000005182b3b485460646561574d41301f0f000003162839464b5b636561594f43322212000000132536434a5a6265625a4b433626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9fa39b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a826d58432d1803000000000000000000021527384b6175889d9b8572604a3d2c1d0e000000000000011426364c61768a9f957f6a55402a150000000000000000000000000c203448596272797a76675f4d3d2d1a070000091d3245566f84999c87725a4835200b000000000000091c304354677c919f8b78624d3d2c1a06000000091e33495e73889e97816c57422c170200000005141d31445563798a8c7d92a78b76614b36210c0000000000000000000000000000000000000b20364b60758a9d88735645321d090000000000000000000000000000000014293e54697e9398826d58432d18000000000000000005131e2b353c484d54595b5d5b58524b44372e211204000000000000000000000000031424323e4a4f52524d483c2b19060000000000000000000f253a4f647a8f9a856f5a362614010000132536434a556072878d78624d38220d000000000a151d202c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c26231c1103000000000d1d2b36434a4f504c4639302312010000000b1b28323d494e504c473b32251404000000081825303c484d504d483c30261808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889d9b85737575757575757575757575757575757575757573604b35200b00000000000000000000000a1e324657687d92a1927d685b493b2c1e130801000006111c304354687e93a48f7a654f3a251000000000000000000000000005182b3b485460646561574d41301f0f0000000b20364b6075899f96816c573c2b1905000000000000011426364a6072869b97826d5b4935210f000000071d32475c72879c97826d58422d18030000000001152737495b697e94869ca38e78634e39230e000000000000000000000000000000000000081d31445573889d8a75604b36200b00000000000000000000000000000000152b40556a809596816b56412c16000000000000000000000e19202b35383f44464846433c36312719110300000000000000000000000000000614202d36393d3d38352b1e0e000000000000000000000d22374c62778c9d87725443301c0800071c304354606b757783927d68533d28130000000a1a2731364141414141414141414141414141414141414141414141414141414141413b382f221100000000000d18253035393b3633291b120500000000000b161e2c36393b37342a1d1406000000000008131c2b35383b38352b1c140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628385b70869b9e887360606060606060606060606060606060606060605443301c080000000000000000000000031629394e5f6f83999e8a796359493c30201c14141519202e3e4b6073869c9c86715d4b37220e000000000000000000000000000d1d2b36434a4f504c46393023120100000010263b50657b90a8917b66513c26110000000000000000081c304354667b909f8c79634e3e2d1a070000061b30465b70859b99846e59442f1900000000000009192c3c4b6074879ca4a5907b66503b2611000000000000000000000000000000000000021527375b70859a8d78634e38230e00000000000000000000000000000002172c42576c8197947f6a553f2a150000000000000000000000060e1920232a2f3133312e27201d1509000000000000000000000000000000000002101b222427282320190e00000000000000000000000b1f34475974899f8a75604b35200b000b20354a6073808a8c9896816c57412c17000002152738454b565656565656565656565656565656565656565656565656565656565656504c402f1c09000000000008131c202425211e170b0000000000000000030f1a212326221f180c0000000000000000000e192023262320190e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398a68b76604b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b43362614010000000000000000000000000b1b31414c6277889d9d8777635b4d413530262a2b2b353f4b5c697e93a4927d68533f2e1b0800000000000000000000000000000d18253035393b3633291b120500000005182b3b566b81969f8a76614c36210c0000000000000000001325364c5e70859b98836e5c4a362110000004192f44596e84999b85705b382715020000000000000e1d314455667c91a3a8937e68533e291300000000000000000000000000000000000000182e43586d8398907b65503b261000000000000000000000000000000004192e44596e8399937d68533e281300000000000000000000000000060b0d14191c1d1c18120b08020000000000000000000000000000000000000000070d0f12120d0b0600000000000000000000000005182a3b5c71879c8c77624d37220d0013283d53687d929fa9ae99836e59442e190000091d314556606b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b665e4c38230f00000000000000070b0f100c0a030000000000000000000000060c0e100c0b040000000000000000000000060b0d100d0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8096a38e78634e3935353535353535353535353535353535353026180800000000000000000000000000001320344859647a8b9f9d8779675f504b43363f403c484d5d657a8a9e9c8674604b3620100000000000000000000000000000000008131c202425211e170b00000000000b2034485971869c9a85705746331e0a00000000000000000008182f4050657b909f8d79644e3f2e1b080002172c41576c81969d88735645311d09000000000000021527374c5e71859bab95806b56402b1601000000000000000000000000000000000000162b40556b8095937d68533e281300000000000000000000000000000004182a3a5c71869b907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f84998f7a654f3a2510001a2f445a6f8499afbaae99846e59442f1900000b20364b60748081818181818181818181818181818181818181818181818181818181817c66503b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a5907b66503b26202020202020202020202020202020201c140800000000000000000000000000000005182b3b4a5c657b8a9d9d897d70656054555455575a626d7b899e9f8b7a645645321d09000000000000000000000000000000000000070b0f100c0a030000000000000d22374d62778ca4957f6a5539291703000000000000000000001223384b5d6f849a99846f5d4b37220e0000142a3f54697f949f8a75604b36200b000000000000000919304052677d92a698836d58432e180000000000000000000000000000000000000013283e53687d9395806b55402b160000000000000000000000000000000a1f33475874899e8d78634d38230e0000000812181a1f1f0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0b09030000000002172c41576c8196927c67523d2712001a30455a6f849aafbcac96816c57412c170000091d314556748a9696969696969696969696969696969696969696969696969696969696816c57422d1700000000000000000000000000000000000000000000000000000000060f161820201c191309000000000000000000000000020c12142020201b0c0a040000000000000000000000000000000000000000000000000000050f1517202020110f0900000000000000000000000011263b51667b90a6937e68533e29130b0b0b0b0b0b0b0b0b0b0b0b0b0b0b080100000000000000000000000000000000000d1d2d3e4c5d657b889a9e92857b746e6b696a6c7178828c9e9f8d7e685c4a382815020000000000000000000000000000000000000000000000000000000000000013283d53687d929b8f7a644f3a250f0000000000000000000000081c2f3f4f647a8f9b8f7b654f3a2510000012273c52677c91ab8d78624d38230d00000000000000001220354b6074879d9a85705b3727150200000000000000000000000000000000000011263b50667b9098836d58432e180000000000000000000000000000000c22374c61778c9f8a75604b36200b00000b19252d2f3434221f180d000000000000000000000000000002060808060200000000000000000000000000000000000000000008131c2021211e160a0000000014293f54697e94947f6a553f2a1500152a3f546a7f94a0ab9f8f7a644f3a250f0000021527385c72868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c836f5a442f1a0000000000000000000000000000000000000000000000000000000917232a2d3535312e261b0d0000000000000000000006141f262935353530221f180c0000000000000000000000000000000000000000000000000917222a2c35353526231c1204000000000000000000000e23394e63788ea395806b56402b16010000000000000000000000000000000000000000000000000000000000000000000010202f3f4c5d647784929c9a908883807f8082868d979f9a8b7d68604e3d2d1a0a0000000000000000000000000000000000000000000000000000000000000000162b40556b8086868272604a35200b0000000000000000000000001122374b5d6a7f8686816c57412c1700000f253a4f647a8fa48f7a65503a25100000000000000000081d3144556b81969d88735544311d080000000000000000000000000000000000000e23384e63788d9a85705b37271502000000000000000000000000000010253b50657a909c87725645311d0900081929374145494937342a1d0d00000000000000000002090b11171c1e1e1c17100e0800000000000000000000000000000000000d18253035363632281b0a00000011263c51667b9197826c57422d17000b20364b6073828d908c806b5c4b37220d0000000c21364c6176777777777777777777777777777777777777777777777777777777777776614c36210c0000000000000000000000000000000000000000000000000000061727353f424a4a4642382b1b090000000000000000021424323b3e4a4a4a4537332a1c0c00000000000000000000000000000000000000000000021727343e424a4a4a3b382f2212000000000000000000000c21364b61768ba798836e58432e1900000000000000000000000000000000000000000000000000000000000000000000000211212f3f4b59626f7d8791989d99959495979c9e98908479675f4e41311f0f00000000000000000000000000000000000000000000000000000000000000000014283d50626b71716d605443301c07000000000000000000000000081b2e3f4f616a71716c63513e291500000d22374d62778ca9927d68523d281300000000000000000115273754697e939f8a75604b36200b0000000000000000000000000000000000000b21364b60768b9d88735544311d08000000000000000000000000000014293e54697e9398836e59382715020012253747545a5e5e4c473b2a1805000000000000060a161e21272d313333312d25231c110600000000000000000000000000000d1d2b36434a4b4b453928160300000e24394e63798e9a846f5a452f1a00081d314455606e787a786b62503e2e1b080000000a1f334658616161616161616161616161616161616161616161616161616161616161615846331f0a00000000000000000000000000000000000000000000000000000f233545525760605b564938261300000000000000000c1f32424f536060605a4c473a2a1909000000000000000000000000000000000000000000102034455257606060504c402f1c09000000000000000000091e32465773889e9b85705b3828150200000000000000000000000000000000000000000000000000000000000000000000000311202e3b484d5f67747c83898d909192908e89837b6f635b4d40312313010000000000000000000000000000000000000000000000000000000000000000000d21334450555c5c584a433625130000000000000000000000000000102032434f545c5c57514534220f00000b20354a60758a9f957f6a55402a1500000000000000000011263c51667b91ab8d78624d38230d000000000000000000000000000000000000091e32455673889e8a75604b36200b0000000000000000000000000004182a3a586d8297947f6a553f2a150000182d4154666f7474625947341f0b00000000070e19202832363c4246484846423b382f20190e00000000000000000000000005182b3b48546061605745321e0900000c21364b61768b9286725c47321d0002152737444b5a6265625a5044332010000000000417293a464c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c463a2917040000000000000000000000000000000000000000000000000000162a3f52636d7575716756422e0a000000000000000012263b4f6069757575706158473726140100000000000000000000000000000000000000071b2d3e52636c757575665e4c38230f000000000000000000031628395b71869b9d88735645321d0900000000000000000000000000000000000000000000000000000000000000000000000002101d2b34414d5560676e74787b7c7c7b78746e655d4e4a3d3022130500000000000000000000000000000000000000000000000000000000000000000000041626333d4046464335302518080000000000000000000000000000021525323c3f4646413e342717050000071c30435472879d97826d57422d180200000000000000000f24394e64798ea38f7a65503a2510000000000000000000000000000000000000031628385b70869b8d78624d38230d000000000000000000000000000a1f34475972879c907b65503b261000001a2f455a6f84898977624c37220d000308131c202c3538454b51575b5d5d5b57504b3f352c1e0f01000000000000000000000e2034485962737675604b36210b00000a1e334657677d7d7d67513c27120000091927313c494d504d483c3326160200000000000b1b29333637373737373737373737373737373737373737373737373737373737373633291b0b000000000000000000000000000000000000000000000000000000182d42576d828a8a85715b392816030000000000000014293e53697e8a8a8b8476615544311d12000000000000000000000000000000000000000d22364a5c6c818b8a8a7b66503b261100000000000000000000192e43596e83989f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000d18203037444b5154606366676766636055504c3f362d1f1204000000000000000000000000000000000000000000000000000000000000000000000000081621282b31312d201c130800000000000000000000000000000000071520272a31312c29221708000000001325365a70859a9a846f5a452f1a0000000000000000000c21374c61768ca8927d68523d281300000000000000000000000000000000000000192e43596e8398907a65503b2510000000000000000000000000000c22374c61778c9f8a76614b36210c00001a2f44596f84998e79644f36261412171e2530353c494d5660666c717373716c655d4d493c2d1f0f0000000000000000000e1e31424d6277878b826d58432d180000031729394d5f6767675f4d39241000000009151d2b35383b38352b1e1608000000000000000b171f212222222222222222222222222222222222222222222222222222222222211f170b00000000000000000000000000000000000000000000000000000000152a40556a7f959e88735745321e090000000000000012263b4f606e82989f9a8473604b402f1e0e0000000000000000000000000000000000071b2e3e4f647a8e9f9a85705e4c38230f00000000000000000001162c41566b8196ab8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000005131926313536434a4d505252514e4b4437382f211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000040d14161c1c180b0700000000000000000000000000000000000000030c13151c1c17150f050000000000182d43586d82989c87725c3a2a180400000000000000000a1f33475874899e957f6a55402a1500000000000000000000000000000000000001162b41566b8096927d68523d28130000000000000000000000000011273c51667c919b85705746321e090000162c41566b8196937e695443312627293336434a515a636b757c8286888886817b6f635a4a3d2d1b0b0000000000000008182b3c4e606f83998c79634e38230e0000000b1b30414d5252514d41301d0a00000000020e192023252220190e00000000000000000000040a0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0a04000000000000000000000000000000000000000000000000000000000013283d52687d92a68b76604b36210b000000000000000c1f32424b6175869ca295806b5e4c3c2b1a0a000000000000000000000000000000000d22374b5c6f8499a18f7a6550402f1c090000000000000000000014293e54697e93a5907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d20253035383b3c3d3b39353126231c11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b80959f89745947341f0a000000000000000004172a3a5c71879c97826d57422d180000000000000000000000000000000000000014293e53697e9395806a55402b15000000000000000000000000071a2d3d576c829795806b5639281603000011263c51667c919c8673604b44373c39464c5460666f78808891979b9d9d9b97908478645c4a39291703000000000000132536485a687e9398836e5b4935210c00000000132330393c3d3c3930231201000000000000060b0d100d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa38d78634e38230e0000000000000002141e32465763798a9e9f8d7c665a48382715020000000000000000000000000000081b2e3f4f647a8fa19a846f5d4b372212000000000000000000000011263c51667b91a6927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b131c20232627272623201d140909000000000000000000000000000000000000000000000000050b0d2020200e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a98c77614c37220c0000000000000000001a2f445a6f84999a846f5a3625130000000000000000000000000000000000000011263c51667b9197826d58422d180000000000000000000000000c21364a5b72889d8f7a654f3a25100000000b20364b6075889d947f696055525154576169737b848c969e99928d8b8b8f979f9a887a645746331e0b0000000000091c30435462788a9e8c79634e3d2c1a060000000005131e25272827241d120500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c10141617171615120d0b0600000000000000000000000000000000000000000d23384d62788dab907b66503b2611000000000000000003162839495b677d919f9e8978625645311d1200000000000000000000000000000e22374b5d6f849aa18f7a644f3f2e1c0400000000000000000000000f24394e64798ea395806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e111212110e0b0801000000000000000000000000000000000000000000000000000d18203535353523211a0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a48e79644f39240f000000000000000002172d42576c82979c87725443301c07000000000000000000000000000000070b0e0f24394e63798e9a85705a3726140100000000000000000000000e24394e63798e9e8874604b35200b000000091d324556697f949f8d7f746a6767696e767e8790999e968b847d7875767a818c9e9d8775614b3928160300000009192c3d4a6072849a98836e5b4a361f0f000000000000010a10121212100a01000000000000000000000000000000000000000003090b111415171615120f0b08010000000000000000000000000000000000000000070c171f2126292b2c2c2c2a272320190e0b0500000000000000000000000000000000000b20354b60758a9f937d68533e28130000000000000000000b1b2c3d4d5f6c8196a29b8574604b41301f0e000000000000000000000000081c2e3f4f657a8fa199836e5c4a3621110000000000000000000000000c21364c61768ba798826d58432d180004040404040404040404040404040404040404000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b344a4a4a4a39362d1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3917c66513c2711000000000000000000152a3f556a7f949f8a75604a35200b0000000000000000000000000008131c20242424364c61768b9d87725544311d0800000000000000000000081b2e3e556b809598826d5443301c08000000021528384b6073849a9f94867f7c7c7e848a939c9b928980786f68626061646c7b899e96806b5746321e09000001142637495b697e939f8c79644e3d2d1a01000000000000000000000000000000000000000000000000000000000000000000090a161e2126292b2c2c2a2824201d140b080100000000000000000000000000000002101b222933373b3e404142413f3c38352b2220180d02000000000000000000000000000000081d31445573889d95806b55402b16000000000000000000000f1f30414b6074849ba396816c5f4d3d2c1a0a00000000000000000000000e23374b5d6f849a9f8c79634e3e2d1b030000000000000000000000000a1f33465874899e9a85705b372715191919191919191919191919191919191919191913110b020000000000000000050f151720201e160b08010000000000000000000000000000000000000000000000000000000000000000000000000005182b3b485e60605f4e4a3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba7937e69543e291400000000000000000012283d52677d92a98c77624c37220d000000000000000000000000081825303539393939465774899e8a75604b35200b000000000000000000000d22374b5c72879c907b665036261401000000000a1d314455617685949e9c95919194999f978f867d756b625a524d4b4b4f5d677c919e8976614b36210c0000081d31445563798a9f99836e5c4a361f0f000000000000000000000000000000000000000000000000000000000000000006121c242832363b3e404141403d39353126201d1409000000000000000000000000000010202d363a474c50535556575654524d493c37342b1e160a0000000000000000000000000000011527375b70859a98836d58432e180000000000000000000001121d3144556277889e9f917d675b4938281603000000000000000000081c2f3f50657b8fa298826d5b4a362010000000000000000000000000000417293a5c71869b9d88735544312e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e28261e13060000000000000917222a2c3535342c201c14080000000000000000000000000000000000000000000000000000000000000000000000000b2034485970757575635b4a36210f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455773899e96816c56412c1701000000000000000010253a4f657a8fa48f79644f3a240f000000000000000000000000132536434a4e4f4f4f4f5c71869b8d77624d38220d00000000000000000004172a3a4f647a8f9d8874604b35200b000000000001142637475861747f899195979794908a827a716860574d483c3836363f4d5f70859b907b66513b261100061a2c3d4b6073859ba18e7a644f3d2d1a01000000000000000000000000000000000000000000000000000000000000010f1a212f3839454b505355575655524f4b44373531261c13080000000000000000000000071b2d3e4a4f586165696b6c6c6b6a67625a554d483b32281a0e0000000000000000000000000000182e43586d83989a85705b3727150200000000000000000000021527374859657b8c9f9e8a79635645321e130100000000000000000e23384b5d70849a9f8b78634d3d2d1a020000000000000000000000000000192f44596e84999f8a75604b434343434343434343434343434343434343434343433e3a3124130200000000051727343e414a4a4941353026180800000000000000000000000000000000000000000000000000000000000000000000000d22374d62778a8a8c79634e3e2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395b71869b99836e59442e190000000000000000000d22384d62778daa917c67513c27120000000000000000000000071c304354606364646464646e84998f7a65503a25100000000000000000000a1f3347586d829896806b5544311d080000000000000919293a4756606a757b8082817f7b756d645c534b4539352b232021304154697e9395806b56402b16000c2135495b6a7f949e99836f5c4a361f0f00000000000000000000000000000000000000000000000000000000000003111f2c35404c51576066696a6c6b6a67646055514b44373025180e000000000000000000000d22364a5c6470767b7e808181817f7c78726b62594b45382b1e0e00000000000000000000000001162b40566b80959d88735544311d08000000000000000000000009192b3b4b5d6a7f94a19c8675604b42311f0f00000000000000091c2f4050657b90a297826c5a49351f0f000000000000000000000000000001172c41566c8196ab8d78625959595959595959595959595959595959595959595959534e42311e0b000000000f223445525760605e564b43362614010000000000000000000000000000000000000000000000000000000000000000000013283d52687d92ab98836e5c4a36211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e83999b86715b3828160300000000000000000b20354b60758a9f947f69543f2a1400000000000000000000000b20354a60727979797979797a8298927d67523d28120000000000000000000c21374c61778a9f8c79634e37261401000000000000000c1c2938454b5660666a6c6c6a6560564f4a3e36322820190e0b12253a4f647a8f98836d58432e18000e23384e63788989898679634d3e2d1b0100000000000000000000000000000000000000000000000000000000000311212f3d494e5e666f767b7e8081817f7d79746e6660554a43362c1e120400000000000000000f24394f647a858b90939596979694918d8780776b6056483c2c1e0e00000000000000000000000013283e53687d939f8a75604b36200b0000000000000000000000000d1d2f3f4a60728399a497826d604e3d2d1b0b0000000000000f23384c5e70859a9f8b78624d3c2c190100000000000000000000000000000014293f54697e94a5907b6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e68604e3a261100000000152a3e52636c7575736b605443301c11000000000000000000000000000000000000000000000000000000000000000000071a2d3d586d82989e9f8c79644e3e2e1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c81969e88735645321e090000000000000000081d31445572889d96816c57412c17020000000000000000000012273d52677d8e8e8e8e8e8e8e98a0957f6a55402a1500000000000000000012273c51677c9199846f5b493519090000000000000000000c1a283238454b5155575755504b4538362e211e160a0500000d22374c627782827f69543f2a14000c2135495b6373747471635b4935201000000000000000000000000000000000000000000000000000000000000011212f3f4b5b63707b848a909395969695928e89837c74686054493c2f2213050000000000000010253a50657a8f9f9e9a97959596989ca49c958a8074625a493c2c1c0c000000000000000000000011263b50667b90ab8d78624d38230d00000000000000000000000000111c3043546176879da0927d685b4a3929170300000000091d2f4050667b90a296816c5a48341e0e0000000000000000000000000000000011273c51667c91a69b858383838383838383838383838383838383838383838383837e68533e281300000002172c41576c818a8a898072604b3f2e1d0c00000000000000000000000000000000000000000000000000000000000000000c21364a5b73889d8a8c99836f5c4b37221100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a68b76604b36210b0000000000000000011527375b70859a99846e59442f19000000000000000000000012273c51677c8c8c8c8c8c8c8c8c8c8c826d57422d180000000000000000000b21364b6074828e7c66503d2c1a00000000000000000000000a151d2832363c4042423f3b363228221b100903000000000b1f344759626d6d69614f3b271200061a2c3d494e5e5f5f5c4d493c2c190200000000000000000000000000000000000000000000000000000000000c1c2f3f4b5d65798490999f9b959290909194989e9891877d72635a4c40302313040000000000000c22374c61778c8e898582807f8183878c959e9f958578635a493a2a1704000000000000000000000e23394e63788ea38f7a65503a251000000000000000000000000000001325364658647a8b9f9f8a79635746331e14020000000824384c5e70859b9e8a77624c3c2b1900000000000000000000000000000000000f24394f64798ea4a39b989898989898989898989898989898989898989898989898846f59442f1a000000000b20364b6074849b9e957f6a5d4b3b2a1808000000000000000000000000000000000000000000000000000000000000000e24394e63798e9b85849a8f7a644f3f2e1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a38d78634e38230e000000000000000000182e43586d83989c86715c3a291704000000000000000000000b20364b60747777777777777777777776614c36210c000000000000000000091e324556606d79665e4c381f0f000000000000000000000000020a161e21262b2d2c2a26211e160a070000000000000005182a3b474c5858544f4332200c00000e1f2c35384949494738352c1e0e000000000000000000000000000000000000000000000000000000000004182a3a4b5d657b899aa1998e86807d7b7b7c7f8388919b9c928578665e4d413022120000000000000a1f33475864797975706c6b6a6c6d727780899aa29b8878635847331f12000000000000000000000b21364b60768ba7927d68523d281300000000000000000000000000000818293a4a5c687d929f9c8676614c42322010000008182f4051667b90a395806b5947341d0d00000000000000000000000000000000000c21374c61778c92929292929292929292929292929292929292929292929292929286715c47321c00000000081d3144556277889d9f8d7b6559473625130000000000000000000000000000000000000000000000000000000000000215273854697e9499837e939a846f5d4b37231100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4907b65503b2610000000000000000001162b40566b80959e89745846331f0a00000000000000000000091d3145566062626262626262626262615846331f0a00000000000000000002162838454b5c645c4c402f1c01000000000000000000000000000002090b1115171715100b0902000000000000000000000d1d2a343743433f3b322514030000000e1a2123343434312321190e0000000000000000000000000000000000000000000000000000000000000a1f344759657b8c9e9f928479716a686665676a6e747c86929e9b897c675f4d402f1e0e000000000004182a3a4a5c64646055575555565859626b778498a09c8776614c402f1808000000000000000000091e32455773889e957f6a55402a150000000000000000000000000000000c1c2d3e4e606d8197a398836e604f3e2e1c0c001325364c5e71859b9e8976614c3b2a180000000000000000000000000000000000000a1f334758677d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d67513c271200000000021527374859657b8c9f9d8877615443301c110000000000000000000000000000000000000000000000000000000000091d3145566f8499968175899e8f7a654f3f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778c9b927d68533d281300000000000000000013293e53687e939b8b76614c36210c0000000000000000000002152738454b4c4c4c4c4c4c4c4c4c4c4c463a291704000000000000000000000a1a28323e4a4f4a3e2f221100000000000000000000000000000000000000000202000000000000000000000000000000000d181f222e2e2a272014070000000000060c0e1e1f1f1c0e0c0600000000000000000000000000000000000000000000000000000000000006192c3c4c6177889d9f8c7e6f635b555250505254556066737d889c9e8c7d675e4c3c2b190500000000000c1c2d3d4a4e4e4b44374040413b484d5961738298a298836e5e4c362614010000000000000000031628395b71869b97826d58422d18000000000000000000000000000000000f2031414b6074859ba0937e695c4b3a2a18081c304354667c91a3947f6a5847331d0d00000000000000000000000000000000000004172a3a4d5f67676767676767676767676767676767676767676767676767676767675f4d392410000000000009192b3b4b5d697f94a09a8472604a3f2e1c0c000000000000000000000000000000000000000000000000000000000b20364b6075899f917c6b80959a84705d4b382312000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60728586867e68533e281300000000000000000010253a50657b86868578624d38230d00000000000000000000000a1a273136373737373737373737373633291c0c0000000000000000000000000a161e2d3639362d201103000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d181814120c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a6e83989f917d68604e493d3d3b3b3c37444b54606878869b9f8c7c665a483520120000000000000f1f2d3639393531262b2a2c2b343b47556073849aa0917c665443301c08000000000000000000192e44596e83999a856f5a3626140100000000000000000000000000000001131e3245566278899e9f8b7a64584736251325364a6073869b9e8875614b3a291700000000000000000000000000000000000000000c1c30414d52525252525252525252525252525252525252525252525252525252514d41301d0a0000000000000d1d2e3f4f616e8298a1947f6a5d4b3a2a180800000000000000000000000000000000000000000000000000000010253b50657a909f8b776176899e907b6550402f1c09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546071717168604e3a26110000000000000000000e23374b5d65717171625a4935200c0000000000000000000000000a151d2022222222222222222222211f170c000000000000000000000000000002101b2224221b100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788c9f97816c5f4e42352c28262627273136434b5a6276859b9e8978624d413018080000000000010f1a212424201d1416151718202a37445562788a9e9c8673604b35200d000000000000000001162c41566b81969c87725443301c080000000000000000000000000000000002162838495a667c8d9f9d8776615443301c304354667c91a3947e695746321c0c000000000000000000000000000000000000000000132330393d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c393023120100000000000000112132434b6175869c9f8c7b65584736251300000000000000000000000000000000000000000000000000000417293a566b80959c8671596a80959b85705e4c38231200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a5b5c5c534e42311f0b000000000000000000081c2e3f4b505c5c5c4d493c2c19060000000000000000000000000002090b0d0d0d0d0d0d0d0d0d0d0c0a040000000000000000000000000000000000070d0f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f1215161717161514110f0b0902000000000000000000000000000000000000000006192c3c576c81969e8976614b4131211a13111012151d26303c49586278899e9a846f5f4d36251300000000000000070d0f0f0b0801000000050c192737485a6a8095a4917c67513b2b1805000000000000000014293e54697e939f8a75604b35200b00000000000000000000000000000000000a1a2b3c4c5e6b8095a2998372604a3f2e364a6073869c9d8875604b3929160000000000000000000000000000000000000000000005131e252728282828282828282828282828282828282828282828282828282827241d1205000000000000000003141e32465763798a9e9d8776615443301c10000000000000000000000000000000000000000000000000000a1f33475870869b96816c566176899e907b66504030180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530354646463e3a312414020000000000000000000011212e373a46464638352c1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c141d2024272a2b2c2c2b2b292724201d15120c0a04000000000000000000000000000000000c2135495b73889d96816b574633231306000000000108141c2b3a485a667c90a1917c675443301c0700000000000000000000000000000000000009192b3c4c61768a9e9a846f594834200b000000000000000011273c51667c91a98c77624d37220d0000000000000000000000000000000000000e1e2f404b6072849aa1947f6a5d4b3b4354677c91a4937e685645321b0b0000000000000000000000000000000000000000000000010a101212121212121212121212121212121212121212121212121212121212100a010000000000000000000003162939495b667c919e998372604a3e2e1c0c0000000000000000000000000000000000000000000000000c21374c61768b9f917b6651586a7f959b85715e4c3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2031313128261f1406000000000000000000000003111c23253131312320190e00000000000000050b0d1a1a1917120c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d141616150b07000000000000000000000000000000000000000000040b161e21263135393c3f41414141403e3c3936322827211f170c0801000000000000000000000000000e23384d63788da68e79644e3929170500000000000000010e1c2b3c4c5e6f849a9c8673604a35200b000000000000000000000000000000000000000d1f3347586d82989f8b77624d37220d00000000000000000f24394e64798ea38f7a644f3a250f00000000000000000000000000000000000000121c3043546177879d9f8c7b6559484b6073869c9d8774604b382816000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3d4d5e6b8096a1947f695c4b3a2a1704000000000000000000000000000000000000000000000012273c51677c919f8b76614c4c6176899e917c665443301c090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b1c1c1c13110b020000000000000000000000000000080e101c1c1c0d0c06000000000000000e192022302f2e2c28211f170c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d181f22292b2c2a201c13080000000000000000000000000000000000000c171f28323637444b4e5254565757565553514e4b45383c373329201d140902000000000000000000000013283d52687d929e8974604b35200b000000000000000000000d1d2f4050657a8fa3907b6650372614010000000000000000000000000000000000000417293a51667b90a9927d68533d281300000000000000000c21374c61768ca8917c67523c271200000000000000000000000000000000000000011426364759647a8b9f9d8877625555677d92a4927d675544311a0a00000000000000000000000000000000000000000000000000000000000000000002090b0f1314151413100c0a04000000000000000000000000000000000000000000000000000f1f30404b6073849a9f8c7a645847331f140200000000000000000000000000000000000000000006192c3c576c82979b8670584646576a7f949c8673604a372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b3538454543413d36332920180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1d2a34373e41413f353025180800000000000000000000000000000003131c2a3339464b52556064676a6b6c6c6b6a696664605657514c473a3531261d150900000000000000000000152a40556a7f959a85705443301c0800000000000000000000001223374b5d70859b98836d5544311d08000000000000000000000000000000000000000c21364b60758a9f98836e583a2a1704000000000000000a1f33475874899e947f6a543f2a15000000000000000000000000000000000000000008182a3a4b5c697e93a09a8473606073869c9c8673604b3727150000000000000000000000000000000000000000000000000000000000000000070a151d202528292a292825221f180c0b040000000000000000000000000000000000000000000001121d3144556177879d9d8776614c433220100000000000000000000000000000000000000000000c2035495a72879d95806b563a394b6175899e917c675544311d09000000000000000000000000000c161c1e202017150e050000000000000000000000000000080d0f202020100e080000000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d5a5a5856524c463a342b1d12050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3b474c535656554a4336251300000000000000000000000000000b161e313a474c5761676f75797c7f80818180807e7c7975716c676158514b443731271912050000000000000000172c41576c819698836e59362614010000000000000000000000081c2e3f54697f949e8973604b35200b00000000000000000000000000000000000000091e32455670869b9d87725847331f0a0000000000000004172a3a5c71879c97816c57422c170200000000000000000000000000000000000000000c1c2e3e4f606e8298a295806b677d92a3917c67544330190900000000000000000000000000000000000000000000000000000000000004101b222731363a3d3f3f3f3d3b37332a221f180c03000000000000000000000000000000000000000000011426374759647a8b9f99836e614f3e2d1c0c00000000000000000000000000000000000000000d23384d62788da5907b65503b3246576a7f949c8673604b372715010000000000000000000000101e29303335352c29221608000000000000000000000002101b222535353525231c110300000000000000000000000000000000000000000000000000000000000000000000000b2035485a626f6f6e6c6761584d483b30231305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2c3c495962696b6b6a605443301c070000000000000000000000000c1b2932414e58616b757d84898e9194969696969593918e8a86827c766e6760554b44372f20180d00000000000000182d43586d829897826c57422d170000000000000000000000000011243a4f647a8fa88e7a644f39240f0000000000000000000000000000000000000003162838576c8197a58c76614c37210c00000000000000001a2f44596f849999846f5a442f1a00000000000000000000000000000000000000000000102032424b6175869c9f8d7c74879c9b8572604a3626140000000000000000000000000000000000000000000000000000000000000c171f2d3638454b4f5254545452504c473a37342a1e160a00000000000000000000000000000000000000000009192a3a4a5c687e939f947e695c4a3a2917040000000000000000000000000000000000000114263653687e939f8a75604b3629394b6175889e927d675544311d0a000000000000000000000c1e2e3c45494a4a413e342616050000000000000000000010202e373a4a4a4a3a372e211100000000000000000000000000000000000000000000000000000000000000000000000d22384d6278848483817d766d62594d4130231301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152738495a63777e80817f73604a35200b00000000000000000000000c1c2a39464b5f6876808992999e9f9b98959493939496979a9e9c97918a847c746860554c40342b1d0d000000000000182e43586d839897826d57422d18000000000000000000000000000b20364b60758a9f927d68533d2813000000000000000000000000000000000000000014293e53697e93a48f7a644f3a250f0000000000000002172c42576c81979c87715c3a2a170400000000000000000000000000000000000000000002141e32465763798a9e9e897f94a2907b66544330180800000000000000000000000000000000000000000000000000000000000d1c29333e4a4f56606468696a6968656158544c473b32281a0f0100000000000000000000000000000000000000000c1c2e3e4e606d82979f8b7a645846331f14020000000000000000000000000000000000081c3043546e83989a85705645321e324657697f949c8774604b3827150200000000000000000016293c4c595e606057514534220e000000000000000000081b2e3e4b4f606060504b3f2e1c08000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b979896928a8277675f4d41301f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d3145566378889396917c665443301c07000000000000000000000c1c2a3a4757616e7d89959e9f99918b8682807e7e7e7f808285898d939a9f9991877e74665e4c483b2b18050000000000172c42576c819799836e593a291704000000000000000000000000091d31455673889d95806b56402b16000000000000000000000000000000000000000011263b50667b90a5927d67523d28120000000000000000152a3f546a7f949e89745847331f0a0000000000000000000000000000000000000000000003162939495b677d919f9e949d9a85705e4c36251300000000000000000000000000000000000000000000000000000000000d1d2a3a464c5c646e757a7d7e7f7e7d7a77716a61594b45382d1f13050000000000000000000000000000000000000000102031424b6074859b9d8776614c4232201000000000000000000000000000000000000b20354b6074899e957f6a5538281628394b6075889d927d685645311d0a0000000000000000001c3045596a7375756c63513e29150000000000000000000d22374b5c64757575655d4b37230e00000000000000000000000000000000000000000000000000000000000000000000091e324557687d8282858b95988a7d675f4d3d2d19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f404b6074859ba396816c5e4c3625130000000000000000000009192a3a4759617583929ea1998c847c76716d6a6968696a6b6d7074787e858d959e9d93877c6e62594834200b0000000000152a3f556a7f949c87715847331f0a000000000000000000000000021527385c71869c97826d57422d1800000000000000000000000000000000000000000e23394e63788ea3957f6a55402a15000000000000000012273c52677c91a88c76614c37210c00000000000000000000000000000000000000000000000b1b2c3d4d5f6c8196aba9aa8f7a6550402f1808000000000000000000000000000000000000000000000000000000000c1c2a3b4758616c7a838a8f9294949492908b867f776a60564a3d302314070000000000000000000000000000000000000002141e3245566278899e99836e604f3e2d1b0b000000000000000000000000000000000f243a4f64798fa78f7a654f3a25101e324557697e949d8774604b3828160200000000000000001e33495e73888a8a816c57412c170200000000000000000f253a4f647a8a8a8a7b65503a251000000000000000000000000000000000000000000000000000000000000000000000031628394e60686c6d7077808b9e8c7d675b4a372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182b3b4c5e6b8196a39b8574604b4030180800000000000000000001142637475861778698a09f9284796f67615758555453545456585b5b636870788088959e9c918377624c37220d000000000011273c51667c919f8b76614c372110000000000000000000000000001c31465b71869b98836e58432e1900000000000000000000000000000000000000000b21364b60768ba697826d57422d1800000000000000000f253a4f647a8fa48e79644f39240f0000000000000000000000000000000000000000000000000f1f3347586a7f95ab9f9f8b7964584736261401000000000000000000000000000000000000000000000000000004172a3a47596276818c989f9e9794929293969b9c948a7f75645c4d41322514070000000000000000000000000000000001080b10162838485a667c8d9f937e695c4a39291703000000000000000000000000000003162839556a7f949f8975604b36200b1628394b6075889d937e685645321e0b00000000000000001b31465b70869b99846e59442f190000000000000000000d22374d62778caa927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000a1b31414e52575858616b7b8a9f8b79635544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364859667c8d9f9e897862564531221200000000000000000000081d3144556176869ca49d8a7d6f645c524b4639403f3e3e3f41423d494e535b636b757f8998a09985715b3a291704000000000d22374d62788ca4927d67523f2e1b08000000000000000000000005192b3c5d72879c97826d58422d180000000000000000000000000000000000000000091e32455773889e9a856f5a36251300000000000000000d22374d62778ca9917c66513c2711000000000000000000000000000000000000000000000005192b3b4c6176899e9f8a9f9d8776615443301c1200000000000000000000000000000000000000000000000000000a1f334758627786979f9d9288827f7d7c7e81858b949d95867a675f4f4332251405000000000000000000000000000409151d20252a2c2b3c4c5e6a7f959f8b7a645746331e140100000000000000000000000000091e32455770859a9a846f5645311d090a1e324556697e939d8875604b3928160300000000000000192e43596e83989b86715b3828160300000000000000000b20354b60758a9f947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000001323313a3d423a474c5d677c919b8573604b35200c0000000000000000000000000000000000000000000000000000000000000000010100000000000000000c1c3043546277899e9f917d675a4938271504000000000000000000061a2c3d4b6073849aa49d887a685f4e4a3d3633292b2929292a2b2d2c35383c494d57616a7782989e89745846331f0a000000000b2034485971869c9a846f5d4b37221401000000000000000000000b2035485a74899e96806b56412b160000000000000000000000000000000000000000031628395b71869b9c87725443301c07000000000000000b20354a60758a9f947e69543f291400000000000000000000000000000000000000000000000b203448596b81969f8c7c8c9f9a8472604b40301e0e000000000000000000000000000000000000000000000000081c2e3f4c6176869ca29a887d746d6a6867686c70777f88969c8b7d69614f433223130100000000000000000000000c171f2731353a3f414343404a607283999c8776614c42311f0f000000000000000000000000000b21364b60768a9f947f6a5438271502031628384b6075889d937e695746321e0b00000000000000162c41566b81969e88735645321e090000000000000000081c30435472879d97826c57422d1702000000000000000000000000000000000000000000000000000000000000000000000005131e25282d2a333f4d5f6e8399917c66513a2a17040000000000000000000000000000000000000000000000000003090b0f121516161615130f0c0a040c1c2e3f4b6072849aa397816c5f4d3c2c1a0a000000000000000000000c2135495b6a7f95a29e8979645c4e41362d211e17151413141516181a21232c3539464b59657a8fa78b76614c36210c0000000005192b3b556b8095a28f7a654f42311f0f010000000000000000000d22384d62778da7947f69543f2a14000000000000000000000000000000000000000000192e43596e83989f8a75604a35200b00000000000000071c30435472879c96816c56412c1701000000000000000000000000000000000000000000061a2c3d4d62788a9f97826d7f94a195806b5e4c3c2c1b0b00000000000000000000000000000000000000000000000e23374b5d6d8297a39a8476676055545252535659626a76818d9f8d7f69614f41301e0a00000000000000000005131c2a3337444b50555758585753546176879c98826e604e3d2d1a0a00000000000000000000000011263b50667b90a78f79644f3a240f00000a1e324556697e939e8875614b3929170300000000000014293e54697e93a78b76604b36210b0000000000000000011426365a70859a99846f5a442f1a00000000000000000000000000000000000000000000000000000000000000000000000000010b111317171f30414f657a8f9a846f5847331f0a00000000000000000000000000000000000000000000040a0c161e2125282a2b2c2b2a2825211f17172a3a4b5d6a7f95a29b8574604b41301e0e00000000000000000000071b2d3e4e63798b9f9f8c7b655b4a3e31211a0f0a0300000000000100060c0e192128323a4d62778daa8e79644e39240f00000000000e23384d63788c9f9a846f604e3d2d1f11040000000000000009192d3d52677d92a88f7a65503a2510000000000000000000000000000000000000000001162c41566b8196a98c77624d37220d00000000000000001325365a6f859a99836e59442e19000000000000000000000000000000000000000000000c2135495b6d82979f8b78627283999f8d7c665b493928160300000000000000000000000000000000000000000005192b3c50657b8fa09b857561584b44373d3d3e3b484c57616c7c8b9e947f695f4d3925100000000000000000071523303a474c5560656a6c6e6e6c69646063798a9f937e685b4a382816030000000000000000000005182a3b566b81969e8974604b35200b0000021628384b6075879d947f6a5746331e0c00000000000011273c51667c91a38d78634e38230e000000000000000000182d43586d82989c87715c3a2a17040000000000000000000000000000000000000000000000000000000000000000000000000000000000041223374b5d72879d8b77614c37210c0000000000000000000000000000000000000000050c181f222832363a3d3f4041403f3d3a37332a26334758657b8c9f9e8a7963564532231200000000000000000000000d22364a5c6f8399a596806b5d4c3d2d20130700000000000000000000000000060b1620354b60758a9f917c66513c271100000000000c2035495a6f849aa2937e685c4a3d2e1f170c05000000030a1627374a5b6f84999f8975604b36200b00000000000000000000000000000000000000000014293e53697e93a48f7a644f3a250f0000000000000000182d42586d82979b86715c392917030000000000000000000000000000000000000000071b2d3e4e63798c9f97816c5a6176879d9e8979635746321e140300000000000000000000000000000000000000000b2034485a6f84999f8c7a6457473a31272827292a3439464b5e667a889c927d67523d27120000000000000006152533414d58616b747a7f818383817e79746b687d929f8b79635645321e11000000000000000000000b1f34485971869c99836e5544311d080000000a1d324556687e939e8976614b3a29170400000000000f24394f64798ea4907b65503b2610000000000000000000162b40556b80959e89745847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f586d8298907b66513b2611000000000000000000000000000000000000010e19202a343738454b4f525456565554524f4c473a3b424c6176889d9f927d675b4938281505000000000000000000000417293a4f647a8ea19d8775604b3f2f1f100200000000000000000000000000000000081d31445572879d937e69543e2914000000000006192c3c50657b8fa29f8b7a645b4b3f33292018151415161e2832445563798d9f99836e5645311d0900000000000000000000000000000000000000000011263c51667b91a6927c67523d27120000000000000000152a40556a7f959e89735746331e0a00000000000000000000000000000000000000000d22364a5c6e83989f8a77624d58647a8b9f9c8675614b4232211000000000000000000000000000000000000000000d22384d62788b9f97826d5c4a39291d15131213181f2933404d5c6478868778624d37220d0000000000000114243343505f677681898f9496989896938e8881786d82979c8675604b402f1b0b0000000000000000000d22374c62778ca4937e695437261401000000021528384b6074879d957f6a5847331f0c00000000000c21374c61768ca8927d68523d281300000000000000000013283e53687d93a88c76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e9395806b55402b16000000000000000000000000000000000009141d2b353a474c54566064676a6b6b6b6a6864615857504b616f8399a497816d5f4d3c2c1a0a00000000000000000000000a1f3346586d8298a7937e685745322111010000000000000000000000000000000000011426375a70859a96816c56412c170100000000000e23374b5d70849aa99d8879655d4c463a342b2a292a283238454b6073849aa18f7a644f382715020000000000000000000000000000000000000000000e24394e63798ea3947f6a543f2a15000000000000000013283d52687d92a78b76614b36210c00000000000000000000000000000000000000081c2f3f4f647a8ea096816c59484a5c687e93a098826d604f3f2e1d0d0000000000000000000000000000000000000014293f54697e94a68f7a654f3e2d1b0c01000000050b171e303e4a5a62717462594834200b0000000000000f1f314250616a7d89969e9e96908c8a8a8b8e93968b8177869c96816c5e4c39291603000000000000000012283d52677d92a68e79634e39240e00000000000a1d314556687e939e8976614c3a2a1804000000000a1f33475874899e957f6a55402a1500000000000000000011263b50667b90a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c9298826d58432d18030000000000000000000000000000000c1926313c484d59616970767a7d7f8081807f7d7a76716c6660697e93a19c8675604b41301e0e0000000000000000000000000c21364c61768a9f9e8875604b3928160300000000000000000000000000000000000000182d42586d829799846e59442f19000000000000081c2e3f4e64798c9fa69d897b6c61584c483b3f3e3f39464b56606d8196a299846f5c4b371a0a000000000000000000000000000000000000000000000c21364b61768ba797826c57422d17020000000000000010253b50657a90a38e79634e39240e000000000000000000000000000000000000000923384c5d6f849a9f8a77624c3b3e4e606d8298a0937e695d4b3b2b1909000000000000000000000000000000000002152737596e83989d8874604a352010000000000000000312202e3c494d556055483b2b19050000000000071a2d3d4e606a80929e9f9588817b77757576797e848b97887e899f907c665746321e0f00000000000000061a2c3d586d82979e88735b4a36210c0000000000021527384b6074879d95806b5847331f0d0000000004172a3a5c71879c97826d57422d180200000000000000000e23394e63788ea3917b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9099846f59442f1a0400000000000000000000000000000d1c2a37444b5a626c777e858a8f929495969594928f8c87817b757a8b9f9e8a796356453223130000000000000000000000000012273d52677c92a996816c5645311b0a0000000000000000000000000000000000000000152b40556a80959c86715c3a2a17040000000000001121364a5c6c8196a59f8b8c81766a625957555354565761687482969f9e8877624d3e2e1b00000000000000000000000000000000000000000000000a1e33465773899e99846f5a442f1a00000000000000000d23384d62788dab907b66513b26110000000000000000000000000000000000000919304150657b90a296806b59473431424b6075869c9f8c7b6559483727150100000000000000000000000000000000081d31445572879d99846e5443301c07000000000000000002101e2c3537444b44372b1d0d0000000000000c21364a5b687e939e9f8d80756b656260576164686f7883908a859b9d8775614b3d2c1a060000000000000c2136495b73889d98836e583d2d1a070000000000000a1d314455687d929e8a77614c3b2a1805000000001a2f445a6f84999a846f5a452f1a0000000000000000000c21364b61768ba7937e69533e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b909b85705b46301b06000000000000000000000000000d1d2b3a4755606978828b949a9f9f9c9997969697999d9f9c979088889da0927d685b493828160500000000000000000000000004182a3a586d8298a78f7a644f38271500000000000000000000000000000000000000000013283d52687d929e89745847331f0a000000000000071a2d3e4c6176879d9b848697887f77716d6a696a6b6f767d8798a09e8b7b6559483420100000000000000000000000000000000000000000000000031729395c71869b9c87725c3b2a1804000000000000000b20364b60758a9f937e68533e29130000000000000000000000000000000000011426374d5f71859b9e8976614c3b2a1e32455763798a9e9d8877625544311d13010000000000000000000000000000000b20364b60758ba595806b5536251300000000000000000000000e19202631353126190d000000000000071a2d3d4e63798b9f9f8b7c6b6157504c4b464b4e535a626e7b888d9fa596816c5b4935210f0000000000000e23394e63798ea6937d68533e281300000000000000021527374b6074879d96806b5948341f0d00000002172d42576c82979c87725c3a2a170400000000000000000a1e32465773899e96806b56412b160100000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b909b85705b46301b060000000000000000000000000c1d2b3b485861737f8a979f9f99928b87848281818284878b90969d9e9da698836e604c473a2b1e0f0100000000000000000000000a1f33475872889d9e8974604b35200b00000000000000000000000000000000050b0d0d0d10253b50657a90a88c76614c37210c000000000000000f1e334657657b8c9f937e828c948b86827f7e7f81848a929d9f97887a655d4b3b2b1802000000000000000000000000000000000000000000000000192e44596e83999f89745947341f0b00000000000000081d31445573889d96806b56412b160100000000000000000000000000000000081d314455677c91a395806b5847331d162839495b677d919f9a8473604b41301f0f0000000000000000000000000000000c22374c61778ca1937e69533e29140000000000000000000000000609141d201d1409000000000000000c21364a5b6e8399a1927d685e4b463937353236393c494d5e6578869ca49f8c79634e3d2d1a07000000000215273754697e93a58d78634d38230e0000000000000000091d314455687d929f8a77624c3b2b1905000000152a3f556a7f949f89745847331f0a0000000000000000031629395c71869b98836e59432e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b909a856f5a45301a05000000000000000000000009192a3b4859627684949fa1998c847c77726f6d6c6c6d6f72767b8188919ba39e8a7e6e6159493c2d1f0f01000000000000000000000c22374c61778ca599846f5544311d080000000000000000000000000000000d19202223232323384d62788dab8e79644f39240f00000000000000031729394b5d6b80969e8a7879848e969794939496999f9c958c8277645c4b3f2f1d0d00000000000000000000000000000000000000000000000001172c41566c8196a98c77614c37220c00000000000000021527375b70859b98836e58432e1900000000000000000000000000000000021628384b6073869c9e8976614c3a2a170a1b2c3d4d5f6c8196a296816c5f4d3d2d1b0b00000000000000000000000000000e23384d63788da2927d67523d2812000000000000000000000000000001080b080100000000000000000e23394e63798c9f99836e5f4e40322922201e21242b35404c5a6276869ca999836e5b4a36210a00000000081d3144556f84999d87725a4935200c0000000000000000011527374b6073879c96816c594834200e00000012283d52677d92a88c76614c37210c000000000000000000192f44596e84999b86705b3827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c9199846e59442f1904000000000000000000000115273747596278879aa29e9183796f6761585957565758595761666c747c86929e9e928377625a4a3d2d1f0f0000000000000000000010253b50657a90a595806b56372614010000000000000000000000000007151d2b343738383838384b60758a9f917c66513c271100000000000000000b1b2e3f4b6073849a9c87766f7981868b8e8f8f8d8b8680796d62594b3e2f2111000000000000000000000000000000000000000000000000000014293f54697e94a48f79644f3a240f0000000000000000182e43586d83989b85705b38281502000000000000000000000000000000091e324556687d92a4957f6a5846331c0c000f1f30414b6074859b9f917d675b4a3a291808000000000000000000000000000e23394e63788ea3917c67523c2712000000000000000000000000000000000000000000000000000002152737556b8095a48f7a644f41311e160d0b0a0c0f19202f3c4858647a8b9fa18e79634e382715020000000b20364b6075899e97826d583c2c1906000000000000000000091d314455677d929f8b78624d3c2b1906000010253a4f657a8fa38e79644e39240f000000000000000002172c41576c81969d88735645311d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c9298826d58432d180300000000000000000000081d3144556177869ca59d8a7d6e635b524c473a4241414239464b50556067737d8899a1998778635b4a3d2c1b0b00000000000000000013283d52687d92a7927d68533d281300000000000000000000000000031525333b484d4d4d4d4d4d4d5573889d947e69543f2914000000000000000000111d3144556277889e9a8373646b7176787a7a7876716b635b4d483b2e201103000000000000000000000000000000000000000000000000000011273c51667c91a6917c67513c27120000000000000001162b40566b80959d88735645321d0900000000000000000000000000000417293a4b6075879d9e8976614b3a2917000001131d3145566278899e9e8a79635846362513000000000000000000000000000d22384d62778da2927d68523d28130000000000000000000000000000000000000000000000000000081d31445570859b9c86715c4a36231303000000000006111e2b3a4a5c697e93a597816c5645311d0900000010253a4f657a8fa8927d67523d281200000000000000000000011426374b6073869c97816c5a4935200b00000d22384d62778daa917b66513c2611000000000000000000142a3f54697f949f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d9296816c56412c1701000000000000000000071a2d3d4b6073849aa49d8779675f4e4a3d37332a2d2c2c2d28323637444b5460677783959e9c8879635b49392918080000000000000000152a3f556a7f94a5907b65503b2610000000000000000000000000000d2033435059626262626262626270859a96816c57412c17020000000000000000011527374859657b8c9f96806b605660636564636157554e493d342b1d10020000000000000000000000000000000000000000000000000000000f24394f64798ea4947f69543f2a14000000000000000013293e53687e939f8a75604b36200b00000000000000000000000000000a1f334658697f94a6947f695746331c0c00000002152738485a667c8d9f9c8676615443301c110000000000000000000000000c21374c61768ca9937e69543e291400000000000000000000000000000000000000000000000000000b20364b60748a9f97816c573e2e1b0500000000000000000e1c2d3d4b6074879d9e8975604b36200b000000152b40556a80959b8c77624d37220d0000000000000000000000091d314455677d929b8a78624d38230d00000b20354b60758a9f937e69533e291400000000000000000012273c52677c91ab8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e9395806a55402b15000000000000000000000c21364a5b6b8095a29d8878635b4d41362d221f1818171718161e21273136434a59617280939d9d89796357463625130000000000000000162b41566b8096a48e79644f39240f0000000000000000000000000013283c50616a777878787878787878839999846f59442f1a0000000000000000000009192b3b4b5d697e939e927d685d4b4e4f4f4d4b463939362c20180d00000000000000000000000000000000000000000000000000000000000c21374c61768ca896816c57412c17020000000000000011263b50667b90ab8d78634d38230e0000000000000000000000000005182a3b4c6176899e9d8875604b39291700000000000a1a2b3c4c5e6a8095a2998372604a3f2f1e0e00000000000000000000000b20354b6075899f96806b56412b1600000000000000000000000000000000000000000000000000000d22374d62778caa937d68533e2813000000000000000000000f1d314556687e93a8907b65503b2610000000182d42576d818686806b594834200b0000000000000000000000011426374d5f6b8086867f6a543f2a150000081d31445572889d96806b56412b160000000000000000000f253a4f647a8fa4907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94937e69543e2914000000000000000000071b2e3e4e63798b9f9f8c7b645a4a3d30211a0f0a040001020003090c151d25303a4754606b7e939e9c8675615443301c0d00000000000000172c41576c8196a38e78634e39230e00000000000000000000000000152a3f556a7f8c8d8d8d8d8d8d8d8d99a19c87715c39281603000000000000000000000d1d2e3f4f616d82989f8b7b655a48393a3836322923211a0f050000000000000000000000000000000000000000000000000000000000000a1f33475874899e99846f59442f1a00000000000000000e23394e63788ea3907b65503b2610000000000000000000000000000b1f3447596b8095a6937e695745321b0b0000000000000e1e2f404b6072849aa1947f6a5d4c3c2b1a0a00000000000000000000081c30435471869c99836e593b2a1805000000000000000000000000000000000000000000000000000e24394e63798ea3917c66513c271100000000000000000000021527384c61768b9f95806b56402b16000000152a3f52636d71716b62513b2b18050000000000000000000000000919304151626b71716a614f3c27120000011426375b70859a98836e583e2e1b0700000000000000000d22374d62778caa927d68523d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095927d68523d28130000000000000000000d22374b5c6f8499a5957f6a5d4b3c2d1f1307000000000000000000000208131c2a36434a606a7f95a0998372604a3c2b1905000000000000172c42576c8197a38d78634e38230e00000000000000000000000000142a3f54697f94999999999999999999999989745746321e090000000000000000000000112132424b6074859b9e88786257453625211e160e0c06000000000000000000000000000000000000000000000000000000000000000004172a3a5c71869c9c86715c3a2a1704000000000000000c21364b61768ba7927d68533d281300000000000000000000000006192b3c4c62778a9e9d8875604b3928160000000000000000111c3043546177889d9f8d7b655a483828150200000000000000000001142636586e83989d87725947341f0b000000000000000000000000000000000000000000000000000f253a4f647a8fa4907a65503b251000000000000000000000000a1f33465870859a99846f59442f1a0000000f23354552575c5c565144331d0d00000000000000000000000000001323344451565c5c544f4332200c000000182e43586d83989b86715c4b37220d00000000000000000b20354b60758a9f957f6a55402a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095927c67523d271200000000000000000417293a4f647a8fa19c8774604b3f2e1e0f0100000000000000000000000000000c1825304250616e8298a1947f695a48342011000000000000162c41566b8196a38e79634e39240e0000000000000000000000000010253b50657b8484848484848484848484848375614b36210c000000000000000000000003141e3245566278889e9b8575605443301c12030000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f84999e89745847331f0a00000000000000091e32465773899e95806a55402b150000000000000000000000000b2035495a6c8196a5937e685645321b0a0000000000000000011426364759647b8b9f9e8978625645321d130200000000000000000014293f54697e94a58c77624c37220d000000000000000000000000000000000000000000000000000e24394e63798ea3907b66503b261100000000000000000000000417293a556a80959d87725d48321d000000061727353f424646403d332616000000000000000000000000000000051626343d4146463f3c32251503000001162b40566b8095a38f7a644f3c2b190500000000000000081c30435472889d97826d57422d18020000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095917c67523c271200000000000000000a1f3346586d8298a6927d685645322010000000000000000000000000000000000008131c33434c6176879c9e8a78624d3f2f1c080000000000162b40556b8095a48f79644f3a240f000000000000000000000000000e23384b5d656f6f6f6f6f6f6f6f6f6f6f6f6f615746321e0900000000000000000000000002162838485a657b8b9f988272604a4130200f000000000000000000000000000000000000000000000000000000000000000000000002172c41576c8196a88c76614c37210c00000000000000031628395b71869b98826d58432d180000000000000000000000071a2d3d4d62788b9f9d8774604b3828160000000000000000000008182a3a4b5d697f94a09b8574604b423120100000000000000000000e24394e63798ea6927c67523b2a18050000000000000000000000000000000000000000000000000c22374c61778ca7927d67523d281200000000000000000000000013283d53687d929e89735e49341e000000000917232a2d31312b2821160800000000000000000000000000000000081621292b31312a272015070000000013283e53687d93a898836e5a4834200f00000000000000011426365b70859a9a846f5a452f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095927d68533d281300000000000000000c21364c61768a9f9d8874604b3828150200000000000000000000000000000000000000151e334657657b90a098836e5d4c38230f0000000000152a3f546a7f94a5907a65503b251000000000000000000000000000081c2f3f4b505a5a5a5a5a5a5a5a5a5a5a5a5a4b4639281603000000000000000000000000000a1a2b3c4b5d697e939f957f6a5f4d3e2d1d0c0000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a48e79644f39240f0000000000000000192e44596e83999a85705a37261401000000000000000000000c21364a5b6d8298a5927d685645311a0a00000000000000000000000c1c2e3f4f616e8398a397816d604e3e2d1b0700000000000000000b20354a6074889d99836e5948341f0a0000000000000000000000000000000000000000000000000a1f34475974899e957f6a5538271502000000000000000000000011263b51667b909f8a745f4a351f0000000000060f15181c1c16140e04000000000000000000000000000000000000040e14161c1c15120c03000000000011263b50667b90a59f8b78624d3e2d1a0700000000000000182d43586d82989c87725c38281603000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94947f69543f2a14000000000000000012283d52677d92a996806b5544311a0a0000000000000000000000000000000000000000031729394c5d6e8398a0907b65503d2d1a070000000012283d52677d92a7927d67523d2812000000000000000000000000000011212f383b444444444444444444444444443632281b0b0000000000000000000000000000000d1d2e3f4f606d82979f8d7d675c4a3b2a1a0a0000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6917c66513c27110000000000000001172c41566c81969d87725544311d08000000000000000000021527374e63798c9f9c8774604b38271500000000000000000000000000102032434c6176869c9f927e685c4a36220d0000000000000000071c3043546c81969f8b77624c38271502000000000000000000000000000000000000000000000004182a3a5a6f849a99846e5645311d09000000000000000000000011263b51667b909e89745f49341f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3aa97826d5c4a36211401000000000001162b40566b80959f89745645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c9197826d583e2e180802000000000004182a3b586d8398a78f79644f372715000000000000000000000000000000000000000000000b1b2f3f4d63788c9f9a846f5b4a36210a0000000010253a50657a8fa5947f6a553f2a15000000000000000000000000000003111c23252f2f2f2f2f2f2f2f2f2f2f2f2f211e160b0000000000000000000000000000000000112132424b6074859b9f8a7a645947382715020000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4947e69543f2914000000000000000014293e54697e939f8a75604b35200b000000000000000000081d3144556f849292907d675544311a0a0000000000000000000000000002141e33465763798a92928a79644f39240f0000000000000000001325364e64798ea3947f6a5645311d0d000000000000000000000000000000000000000000000000152a3f546a7f949e8975604b362012000000000000000000000012283d52677d929d87725d48321d00000000000000000000000000000000000000000000000000000002090b0b09020000000000000000000000000000000c21364b61768ba7a29a8c79644e42321f0f00000000000014293f54697e94a88b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778b9c87725c4b36251d1509000000000b1f34475973889d9e8874604b35200b0000000000000000000000000000000000000000000000112035495a6e8398a28e79634e382816030000000d22384d62788da797826d5737271501000000000000000000000000000000080e101a1a1a1a1a1a1a1a1a1a1a1a1a0c090300000000000000000000000000000000000003141d3245566277889d9d8777615645311d140400000000000000000000000000000000000000000000000000000000000000000d22374c62778ca996816c56412c17010000000000000011273c51667c919c8d77624d38220d0000000000000000000b20364b60747d7d7d7b675f4d372715000000000000000000000000000000031729394a5b63787c7d7d7b65503a25100000000000000000000821364a5c70859b9d8774604b3b2b18050000000000000000000001080b0d0b06000000000000000d23384d62788c9f917c6651402f1c0c00000000000000000003162839556a7f949b86715b46311c00000000000000000000000000000000000000000000000000050a161e21211e160a0000000000000000000000000000091e32465773899e9a859a846f604f3d2c1b0b000000000012283d52677d92a28c77624d37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586f849a8f7a64544336312719150700000c22374c61778ca699846f5443301c08000000000000000000000000000000000000000000000006192c3c4f647a8fa497826c5645321e090000000b20354a6074899e9b86715544311d080000000000000000000000000000000000000505050505050505050505050500000000000000000000000000000000000000000000021528384859657b8b9f9b8474604b4332221101000000000000000000000000000000000000000000000000000000000000000b1f34475974899f99846e59442f1900000000000000000e23394e63798687867a644e39240f000000000000000000081d31445560676767665e4d41301909000000000000000000000000000000000b1b2d3d4a5a63676767655d4b37230e000000000000000000071a2d3e51667b90a3947f6a594834201405000000000000000008141c202320190e0000000000000b2035495a6f84999b85715e4c3a29180a0000000000000000091e3246576f849997826d57422d180000000000000000000000000000000000000000000000000e19202832363632281a0c00000000000000000000000000031628395c71869b947f86937e695b493a291a0a0000000012273c51677c91a38e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a50657b909b857260544b4437332515030010253b50657a90a595806b55362614010000000000000000000000000000000000000000000000000e22364a5c71869c9f8a75604b36210b000000071c3043546f859a9f8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3b4b5d687e939f97826d614f402f1f0f0000000000000000000000000000000000000000000000000000000000000005182a3b5c72879c9b86715c3a291704000000000000000c21364a5b63717171645c4a36210d00000000000000000002152737444b525252504c403023130000000000000000000000000000000000000f1f2d3c494d525252504b3f2e1c08000000000000000000000f24384c5e70859b9e8a77624c4332231404000000000000091826303538352b1e13050000000006192b3c4e64798d9f907b66584736271a0d030000000000081729394b6176899e927d67523d281200000000000000000000000000000000000000000000000e1e2b3538454b4b45382a1c0c00000000000000000000000000192f44596e849995807c908a7963584638281a0d00000012273d52677c92a38d78634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000c23374b5d6c8197978172666055504333200d0013283d52687d92a7927d68523d281300000000000000000000000000000000000000000000000000071b2d3e54697f94a8907b66513b261100000000132536566b8095a98f7a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2e3f4e606c81979f947f695e4c3d2c1c0c000000000000000000000000000000000000000000000000000000000000001a2f445a6f84999e89745846331f0a00000000000000071a2d3d4a4e5c5c5c4e4a3e2d1a070000000000000000000009192731363d3d3d3b382f221305000000000000000000000000000000000000010f1e2c35383d3d3d3a372e21110000000000000000000000091d2f404f647a8c9f98836e614f41321f170c050000040d192736434b4d493c31231300000000000e21364a5c6d82989d8776615445382a1e160d0b070a0e1825334657697e939f8b77624d37220d0000000000000000000000000000000000000000000005192b3c484d56606056473a2a1804000000000000000000000002172c41576c819697826d82978676615645382a1d13080114293e53697e93ab8c77624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b6073829297857b746a61503c281300152a3f556a7f94a5907b65503b261000000000000000000000000000000000000000000000000000001023394e63798ea597816c573c2c190600000010263b50657b90a795806a553d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102131424b6074859b9f8c7c665b493a291909000000000000000000000000000000000000000000000000000000000002172d42576c8297a78b76614c36210c00000000000000000f1f2d363947474739362d200f00000000000000000000000009151d2027282826231c11030000000000000000000000000000000000000000000e19202327282825231c11030000000000000000000000001222364a5c6b8095a0947f695f4f42332a20181616171f2b37445460625a4e42311a0a00000000071a2d3e4d6278899e9983726056473b322822201c1f212b36434b6175879d98836e594834200b000000000000000000000000000000000000000000000b2035485a62737675705847331f0a00000000000000000000000014293f54697e949a846f75879a84746056483b30201d141a2e3e576c81979f8a76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d314455606d7d869a908c7f6a55402a1500162b41566b8096a48e79644f39240f00000000000000000000000000000000000000000000000000000c2136495b72879d9d87725b4935210c0000000b20364b6075899e9b86715b4935210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141d3145566277889d9e8979635846372614010000000000000000000000000000000000000000000000000000000000152a3f546a7f94a38e79634e39240e0000000000000000010f1a212332323224211a0f010000000000000000000000000002080b121212110f09000000000000000000000000000000000000000000000000060c0e121212100e080000000000000000000000000000071b2d3e4b6074859b9f8d7d69604c473a342b2b2b29333b485560737868604e38281502000000000f2034485a657b8c9f98827462594b463937353033373c4854606d82989f8f7a644f3b2b1805000000000000000000000000000000000000000000000d22384d6278888b8b77614c37220c00000000000000000000000012273c51677c919c8671647a8a99837462594d413531262c384a5c71869c9c86715645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637475861757e889b93836e58432e1900172c41576c8196a38e78634e39230e0000000000000000000000000000000000000000000000000000061a2c3d586d8297a58d78634d38230e000000081d3144556d8398a38e79634e3929160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384859647a8b9f9c8676615544311d13030000000000000000000000000000000000000000000000000000000012273d52677c92a6917b66513c261100000000000000000000070c0e1c1c1c0f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d3245566177879d9f8d7e6e61584d483b40403a474c596273838b7e685645321d090000000005192b3c4b5d687e939f9884776a6157514d4a43474c505a62728196a097826d5c4a361d0d000000000000000000000000000000000000000000000011273c51667c91a68e79644f39240f0000000000000000000000000f243a4f64798f9e89735c667c8c998577675f504b44373d4956647a8fa497826d583828160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556176859395857e7a644f3a250f00172c41576c8196a38d78634e38230e00000000000000000000000000000000000000000000000000000014293e54697e93a6917c66513c27110000000215273750667b90a596806b5746321e0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3b4b5c687e929f9a8473604b42312110000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000215283847596379879c9f9382766a62595755555758616a7784989d8875604b36200b00000000000d1d2e3f4e60697e8d9e9a8a7f756c666260545861666d7883969f9c8675614b3e2e1b00000000000000000000000000000000000000000000000010253a50657a8fa5917c67513c27120000000000000000000000000d22374c62778ca78b75605e677d8b9b887d6f65605557595b6374859ba38f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073859b95807069645c4b37220d00162b41566b8096a38e79634e39240e00000000000000000000000000000000000000000000000000000010253a50657a8fa5957f6a55402a15000000000b20354a6073879c9e8876614b3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2e3e4e606c8197a296816c604e3f2e1b080000000000000000000000000000000000000000000000000000000d22374d62778ca996816b56412c1600000000000000000000000000000000000000000000010a101220201d1b150b00000000000000000000000000000000000000000000000000000000000000000000000913191c202014110b020000000000000000000000000000000a1a2a3b495b637886979f98897f77716d6b6b6c70767f899a9e8a7a645645321d09000000000000112131424f60697c88979e9589817c77757374767b828a99a19a86786257463220100000000000000000000000000000000000000000000000000d22384d62778daa947e69543f29140000000000000000000000000b20354a6075899f8d77624d5f677b8a9b92847b746f6d6e7179859ba39b85715d4b37230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c919a847062534f4b3e2e1b0800152b40556a8095a48f79644f3a240f0000000000000000000000000000000000000000000000000000000d22374c62778caa98836e58432e1903000000071c304354697e94a6947f6a5847331f11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102031424b6074849a9f927e685d4b37220e0000000000000000000000000000000000000000000000000000000b20354a60738b9292836e59432e1900000000000000000000000000000000000000000005131e252735353230281d0f0000000000000000000000000000000000000000000000000000000000000000000d1b262e31353529261f14060000000000000000000000000000000c1d2c3d49596275818d9b9e948b8682808082858b949e9b8a7c665c4b3828150200000000000003142432424f5e6677828c979e97918c8a89898c90979f9d918476625a48392816020000000000000000000000000000000000000000000000000b20354b60758a9f96816c56412c17010000000000000000000000071c30435472879c8f7a644f4d5d657985949a9088848283868e9ba39e8a79634e3f2e1c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182e43586d8398927d6752443a372e20100000142a3f54697f94a5907a65503b25100000000000000000000000000000000000000000000000000000000b20354a60758a9f9c86715c47311c00000000001325364b6075889d9e8876614c3f2f1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002131d31445562778690928a7a654f3a2510000000000000000000000000000000000000000000000000000000071c304354667c7d7d7b65503b2610000000000000000000000000000000000000000001132330393c4a4a48443a2d1d0000000000000000000000000000000000000000000000000000000000000000091b2b3842464a4a3e3b312414020000000000000000000000000000000f1f2c3b4857616c7b858f979d9b979595979a9f99918579665e4c3e2e1a0a000000000000000006142432404c59616d79828991969a9c9e9e9d9a9690877c706158483c2b1b0b00000000000000000000000000000000000000000000000000081c30435472879d99846e59442f19000000000000000000000000001325365a6f849a907b66513f4c5b63737f89949b9997989ba39f98897c665b4a3621110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061b31465b70869b8e79634e3925221b1002000012273d52677c92a7927d67523d2812000000000000000000000000000000000000000000000000000000071c30435472889d9d88735d4825130000000000081e324557697e93a497816c5d4b3b2b1b0b0000000000000000000000000000000000000000000001080b120f0d0700000000000000000000000000000000000000000000000000000002152737475962757b7d7d7c66503b2611000000000000000000000000000000000000000000000000000000001325364d5e666767655d4c38230e00000000000000000000000000000000000000000a1e30414d5260605d584b3a19090000000000000000000000000000000000000000000000000000000000000013263849565b6060534e42311f0b000000000000000000000000000000010f1d2b39464b5d65707a82888d909292918e8a847c72635b4c402f2010000000000000000000000614222f3a474c5b636d757b81848788898885817b74675f4c473a2b1e0e0000000000000000000000000000000000000000000000000000011426365a6f859a9b86715c3a291704000000000000000000000000172c41576c81888577624c373d4955606a757f858b8f91918f898278665e4c3d2d1a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71869b8e78634e39230e080000000010253a4f657a8fa4947f6a543f2a15000000000000000000000000000000000000000000000000000000001325365c71869b9e89745443301c0700000000031628394b6074869c9f8d7b65594839291b0d000000000000000000000000000000000000000008141c202724221b1002000000000000000000000000000000000000000000000000000009192a3b475660656767665e4c38230f00000000000000000000000000000000000000000000000000000000081830404d515252504c3f2f1c0900000000000000000000000000000000000000001025394d5f67757572695837261401000000000000000000000000000000000000000000000000000000000005192e42566771757569604e3b261100000000000000000000000000000000000d1b29323f4b505d656d73787b7c7d7c79756f6660544a3d2f221102000000000000000000000004121c2a343d494e5760666b6f72737473706c6660554d41332a1c0e00000000000000000000000000000000070d0f121414110d0b050000182d42576d82979e89745846331f0a00000000000000000000000015293e51636c7371625948342c37444b57616970777a7c7c79766d625a4c402f1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f455a6f849a8f7a654f3a251000000000000d22374d62778ca797826c57372614010000000000000000000000000000000000000000000000000000001b30465b70859b9f8a75604a35200b00000000000a1d314455647a8c9f9e8878625746392b1d110400000000000000000000000000000000000c182630353c39362d20100100000000000000000000000000000000000000000000000000000d1d2a38454b505252504c402f1c090000000000000000000000000000000000000000000000000000000000122230393c3d3d3b382f211100000000000000000000000000000000000000000012273c52677d8a8a87725544311d080000000000000000000000000000000000000000000000000000000000061c31465b71858a8a7e69533e29140000000000000000000000000000000000000b161e2f373f4b50585b6365676867646056514a43362d1f110400000000000000000000000000000c181f2c3539454b51565a5d5e5e5d5b56504b4437301f180c0000000000000000000000000000020b0f1a2124272929272220180d08152a40556a7f95a78b76614c36210c0000000000000000000000000e22344551575e5c4c483b2a19273139464b5458616467666461574d493c2f22120100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d42586d8297917c67523c271200000000000b2034485973899e9b86705544311d080000000000000000000000000000000000000000000000000000051a30455a6f859aab8b76614c36210c0000000000021527374a5c6a8095a19b85756157483b2e1f170c040000000000000000000000000005101c2a36434b514e4a3e2d1f0f0000000000000000000000000000000000000000000000000000000d1a2832363b3d3d3b382f221100000000000000000000000000000000000000000000000000000000000004121d2427282826231c11030000000000000000000000000000000000000000000f253a4f647a8f9f8a75604b35200b000000000000000000000000000000000000000000000000000000000004192e44596e839996806b56412b160100000000000000000000000000000000000003111c232e373a3d494e505253514f4b4538353025180f0100000000000000000000000000000000040f1a212832363c41454749494845413b353126191204000000000000000000000000000003131e262d36393d3f3e3c37342b201c14283d52677d92a38e79634e39240e000000000000000000000000051626343e41494637342a1d0d151d2932363a474c4f51514f4b4639352c1e1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e9396806b563b2a18050000000005192b3b5a6f849a9f8a75604b35200b0000000000000000000000000000000000000000000000000000051a2f455a6f849aa18c77614c37220c00000000000009192d3e4a60728399a39b847562594b3f33291f170c0a030000000000000001080d18202d3a47546067645c4a3d2c1a060000000000000000000000000000000000000000000000000000000a161e2126282826231c110300000000000000000000000000000000000000000000000000000000000000000a0f111212100e0900000000000000000000000000000000000000000000000d22374d62778ca98d77624d38220d000000000000000000000000000000000000000000000000000000000001162c41566b819698836e59432e1900000000000000000000000000000000000000000008111c23252c35383b3d3d3c39363228201c13080000000000000000000000000000000000000000060a161e21262c2f32333433302c26201d14090000000000000000000000000000000a161e313a3d4a4e525453514d483b353026253a4f657a8fa4917b66513c261100000000000000000000000000081622292c3431221f180d00010b161e212a33373a3c3c3a36322920190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798e9b85705948341f0b0000000000162b40556b8095a98f79644f3a240f0000000000000000000000000000000000000000000000000000061b30455b70859aab8b76614b36210c00000000000000101c3043546175859ba29b8577655d4c463a3329211e1614121110101113141d202b343e4a5861737c7a645b4935210c0000000000000000000000000000000000000000000000000000000003090b101212110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9f8f7a654f3a251000000000000000000000000000000007060000000000000000000000000014293e54697e939b86705b3828160300000000000000000000000000000000000000000000080e101a21232627282724211e160b0700000000000000000000000000000000000000000000000003090b11161a1d1e1f1e1b17110b08010000000000000000000000000000000a1a2832424e535c64676969666259524b43362e374d62778ca9937e69533e29140000000000000000000000000000050e15171e1c0d0b0500000000030a0c181f2225272724211e160b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074889d8b77624c37220d000000000010253a50657a8fa7957f6a553c2c190600000000000000000000000000000000000000000000000000031628385c71869b9f8a75604b35200b000000000000000013253646576176859aa29b887b6c61584c463a3632292a2726252526282631353b484c5c647684918979634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b1116140c0a04000000000000000000071c30435472879c927d67523d2812000000000000000000000000090f111c1b0f0d070000000000000000000011263c51667b919e88735645321e0900000000000000000000000000000000000000000000000000060c0e101213120f0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192838454b606872797c7e7e7c77706760544b3e354b60758a9f96816b56412c16010000000000000000000000000000000002090700000000000000000000040a0c0f12110f0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546c8196937e68533a2a1804000000000b20354b6074889e9b85705a4935200a00000000000000000000000000000000000000000000000000091e32455673889e9e88735443301c080000000000000000081829394758617684969f9d8d81766a6158514b46393f3c3b3a3b3b3d37444b5059626c7a879aa29a846f5a452f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1f202015120c03000000000000000000000000060c0d1d20201b0b08010000000000000000000008131c20262b29211f170c0000000000000000001325365a6f849a947f6a553f2a150000000000000000000004121d2426313024211a0f0100000000000000000f24394e64798ea68b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f1214151413100c0a04000000000000000000000000000000000000011426374556606f7d868e929493918b857d73645c4f42435472879c98836e59432e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013253650657b909a846f5847331f0a00000000081d3144556d82979f8c78634d382815020000000000000000000000000000000000000000000000000b21364b60768b9f9b86715b362614010000000000000000000b1b2a3a4758617381919d9f97897f766d6661575754525150505152555560656d77818c9da39b8778624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000008141c333535352a27201507000000000000000000000e19202332353530201d1509000000000000000008182530353c403f37332a1c0f0100000000000000182d42576d829797826c57422d1700000000000000000000122230383c464539362d200f00000000000000000c21364c61768ba78d78634e38230e00000000000000000000000000000000070d0f121413110d0b05000000000000000000090b0301000000000000000000000000000000000000000608141c202427292a292825211f170d0b05000000000000000000000000000000081d314455607483929ca49d979494979b92867a696051445a6f849a9b86715b39281603000000000000000a0f1120202020202020202020202020202020202020202020202018160f060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074889e8b77614c37220c000000000114263750657a8fa495806b5645321d0a0000000000000000000000000000000000000000000000000f243a4f64798fab98836e58432e1900000000000000000000000c1c2a3a4755606c7c88969f9e958a837b76706c696766656566686a6e747b828a969f9f968577625a4935200c00000000000000000000000000000000000000000000000000000000000000000000000000000008182630474a4a4a3f3c3225150300000000000000000e1e2c3538474a4a46353127190900000000000008182636434a5155544c473a2d1f0f00000000000000152a3f556a7f949a846f5a362513000000000000000000091930404c515c5b4e4a3e2d1b0b000000000000000a1f33465874899e907b66503b261100000000000000000000000000020b0f1a212427292926221f180d0a01000000050b0d1e2019161006000000000000000000000000000000030e1a21263035393c3e3f3e3d3a37332a221f180d04000000000000000000000000031729394b60738399a19e9287827f7f8287919b8b7e6b6251576d82979e88735745321e09000000000004121d24273535353535353535353535353535353535353535353535352d2a2317090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556d8298927d685339291603000000000923374b5d71869c9d8875604b38281602000000000000000000000000000000000000000000000215283853687d93a8947f69543f2a140000000000000000000000000c1c2937444b5e6676818a969e9f98908a85827f7c7b7a7a7b7d80838890979fa29a8d81756259493c2c1906000000000000000000000000000000000000000000000000000000000000000000000000000001142636435c5f6060544f4332200c0000000000000009192c3c494d5c60605b4b44372715010000000001142636435460666b6961584a3d2d1a0700000000000012283d52677d929c87725443301c0700000000000000011527374c5e667170645c4a392917030000000000000417293a5c71869b937d68533e281300000000000000000000000003141f262d36393d3f3e3c37342a251e1307000e19202233352e2b23180a000000000000000000000000000b171e2c3536434b4e5254545452504c473a37342a1f180c00000000000000000000000a1e334657697e93a19e8a7d746c6a6a6d737c869793806b62556a7f94a68b76604b36210b0000000000122230393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a423f35271706000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115273751667c9199846f5746321e0a00000000081c2e3f53697e93a6937e685645321e0f00000000000000000000000000000000000000000000091d3245566e8398a78f7a654f3a2510000000000000000000000000000c192731404c57616c77818992999e9f9b979491908f90909295999ea79e978f857a6c6056483b2c1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546d7475756a614f3c271200000000000002152737495a6272757570605544311d0800000000081c30435460727c807e76635b4a36210d00000000000010253a4f657a8f9f8975604a35200b00000000000000081d314455667c86857a645746331e1000000000000000192f44596e849995806b56402b1601000000000000000000000b161e313a3e4a4e525453514c483b3930211a0f1e2b3538484a433f3628180600000000000000000000000c1b29333d494e54606467696a6968656158554c483b342a1c13020000000000000000000c21364b6176889e9f8c7b686054555454606675819395806b60677c92a38e78634e39230e000000000a1d30404d5160606060606060606060606060606060606060606060606057524535230f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9f8a76614b36210c00000000001120364b6075879d9d8775604b3d2c1a0a0000000000000000000000000000000000000000000b20364b6075899e9e8975604b35200b000000000000000000000000000009151d3039464c59626c757d84898f94979a9c9d9e9e9d9c9a97938f89827a70645d4b45382b1d0e000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60738c8a8a7f6a543f2a150000000000000d1d3144556278868a8a8575604b35200b000000000b20354b6072839195948879634e3b2b180500000000000d22384d62778da98c77624c37220d000000000000000b20354b6074889b9a8876614c3f2e1a0a000000000001172c41566c819698836d58432e18000000000000000000000b1b2932424e535c64676968666259524d41362d202b3c484d5e60585346362310000000000000000000000c1c2a39464b5b636d74797c7e7f7e7d7a77716a62594c473a311e160a000000000000000114263753687d92a796816b5d4b433636434a57616c7e93927e68647a8fa4907b66503b2611000000000f24394d5e667575757575757575757575757575757575757575757575756d63523f2a160100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576e8499917c67513c27120000000000091d324556687e93a395806a5b49382818080000000000000000000000000000000000000008182e3e51677c91a798836e5544311d0800000000000000000000000000000001121b29333b484d5760676f757a7e818587888989888785827e79756d655d4f4b3f32281a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000081c30435472879d97816c57422c1702000000000d1d2f404b6074859b9e8978625544311d080000000013283d53687d92a1aaa69b8671594834200b00000000000b20354b60758a9f8f79644f3a240f00000000000006192c3c51667c91a6a697816c5d4b38271502000000000014293f54697e949b85705b38271502000000000000000009192939464b606872797c7e7e7b7770675f4e4a3e3135485a6273756e64533f2b160100000000000000000b1b2a3a4757616c7982898e91939493928f8b867f776c61594e4132281a0c000000000000081d3144556f84999f8b77624c3f3026253039464b60697e938b7a64778ca9937e68533e29130000000011273c51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816d57422d1802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283953687e9397826d583828150200000000021528384b6073859b9f8b79635645362514080000000000000000000000000000000000011426364b5c6f849aa5907b66503727150100000000000000000000000000000000000b171e2b3439454b52556064696c6f7172737373726f6d696460554f4b3f372e1e160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426365a6f859a99846f59442f1a0000000008182b3b4c5e6b80969f917d675a483727150100000000182d43586d8298adbfb5a38c77624c37220d0000000000081d31445572879d917c67523c27120000000000000c2035495a6f849aa1999f8d7a645645311d0f000000000011273c51667c919d88735645311d0900000000000000021527374657616f7e878e929493918b857c70645c4e41384d6278888a826e58432e1900000000000000000417293a47596175818b979e9d979492919395999b948b8177685f4b45382a1c0c00000000000b20354b6075899f9a846f5948341c14131c2832424f606c81968775748a9f95806b56402b16010000000e24394e63798ea29fa49c9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b99846f5a442f1a0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798e9c86715645321d0900000000000a1d314455647a8c9f9c86756054433026180b00000000000000000000000000000002101c304354647a8fa29d8773604b35200b00000000000000000000000000000000000000030d182028323637444b4f54575a5c5d5e5e5d5c5a57544f4b4437372e221b10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d82979c86715c3a2a17040000011426364859667c8d9f97826d5f4d3c2b19090000000000172c42576c8197abbab49f8b76614c36210c0000000000011426375a70859a947f69543f2a140000000000021527384d62788c9f9983999c8674604b3d2c1808000000000f24394f64798e9f8a75604b36200b00000000000000081d314455617583939ca49d979494979a91857a6860504451667c919b85705b38281502000000000000000a1f334658617785969f9c9088827f7d7c7d80848a929c97897d6d6056473a2a1d0c000000000e23384e63788da9947f6a543b2b1801000b161e32424b607485968072879c98836d58432e18000000000b20354a6072849aa69c8685868686868686868686868686868686868685826d58432d180300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9f8a75604b36200b0000000000011527374a5c6a8095a1988272604b4336291b11060000000000000000000000000412202f3f4b6073859ba5937e685443301c08000000000000000000000000000000000000000000050a161e212731363a3f424547484949484745423e3a353127221b100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f959e89745847331f0a00000c1c3043546277889e9c8675614b41301e0e00000000000010253a4f657a8d9fa9a197826d5746331e0a000000000000182d42586d829796816c57412c170200000000091d3145566b80959d8876889e957f6a5b49362513000000000c21374c61778ca88d78634d38230e00000000000004172a3a4b60748399a19e9287827f7f8288919b8b7d6b62504f657a8f9d88735645321d09000000000000091d2f404c6176869ba097867b736d696867686b6f757d86939e9282746158473b2a1c0c00000011273c51667c91a6907b66513b261100000003141d31455662788a8c79849a9b85705b38281502000000071c3043546277889d9a85747070707070707070707070707070707070706d64533f2b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889d8c77624d37220d00000000000009192d3e4b60728399a096806c605446392e211a0f090300000000000000060c181f303e4b5d6a7f94a39c8774604b36261401000000000000000000000000000000000000000000000003090b151d2025292c30323334343332302d2924201d15090800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a88c76614c37210c000c1c2e3f4b6072849a9f8b7a645746322313000000000000000e22374b5d687e8a908e8375614c39291703000000000000152b40556a809599846f59442f1a00000000000b20364b6075889e96806b7d929f8b79635443301c0d0000000a1f33475874899e907a65503b25100000000000000a1f334758697f94a19e8a7d736c6a6a6d747c879892806b614d62778d9f8a75604b36200b0000000000000f24384c5e6d8298a09782736660545453525355576067737e8a9c9884766159473a291704000013283d53687d92a38d78634e38230e0000000002152738495a6a7f948381979d88735645321d09000000001325364859647a8b9f96806b5f5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b585346352310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527375c71879c8e78634e39230e00000000000000101c3043546176869c9e96807261574b3f352c211e1612100e0e0e101219202a34414d5c657b8c9f9f907b65564531180800000000000000000000000000000000000000000000000000000002080b0f14171a1c1d1e1e1e1d1a18140f0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa38e79644e39240f04172a3a4b5d6a7f95a1947e695c4a3928160500000000000000081b2e3f4e6068777b796e615746331b0b0000000000000013283d52687d929c86715c3a2a1704000000061a2c3d52677c919f8c78636f84999a8472604a3b2b1805000004172a3a5c71869c927d68533d28130000000000000c21374c6176899e9f8c7b6860545554546066758294947f6a5f60758a9f8d78634d38230e0000000000071a2d3d51667c90a098827260554a43363d3c3e39454b5460687886999a8677615847331f0a000014293f54697e94a18c77624c37220d00000000000a1a2b3c4b6074879a849a9f8a75604b36200b0000000008182a3b4b5c687e939e927d675c4a3a46464646464646464646464646433f3528180600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c5c71879c8e78634e39230e000000000000000114263647586277869b9e968376655d4e493d363228282524232425282c353a474c5f677a8a9ea296816c5d4b38271500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daa917c66513c2711101f334758657b8c9f998372604a3e2d1b0b000000000000000000102131424e586165635b4c46392917000000000000000010253b50657a909e89745847331f0a0000000c2135495b70859a9a846f5a62788a9e937e6859483420120000001a2f44596f849995806a55402b1500000000000216283853697e93a796816b5d4a433636434b57616d7f94927d685b73889d907a65503b251000000000000c21364a5b70859a9e8876615444373025282728283236434b5a637683969c8676614c37210c0000152a3f546a7f94a08b76614b36210c0000000000000e1d314556667c918d9fab8d78634d38230e00000000000d1d2e3e4e606c81979f8a7a645847372631313131313131313131312d2b23180a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0f2034485a73889e8c77624c37220d00000000000000000818293a485962778599a199877b6e635b514b45383d3a3938393a3d3c494d59616d7d8b9ea39a8473604b3f2f1a0a0000000000000000000000000000000000000000050b0d12141617171613100c0a04000000000000000000000000000000000000000000000000000000000000060c0e12151617171513100b090200000000000000000000000000000000000000000b20354b60758a9f937e69543e29142032424c6176879d9d887761544330201000000000000000000000031424313a474c504e4a3d33291b0b00000000000000000d23384d62788da88c76614c37210c0000021628384e63788da2917c67515a697e949e8977624d40301b0b0002172c41576c819698826d58432d180000000000091e32455670859a9f8b77624c3f3025263039464b616a7f948a796370869b927d68533d281300000000000e24394e63798ea2937e69584736261c13131213161e26303c49586173818c8373604b35200b000013293e53687e93a18c76614c37210c000000000000021527384a6073869caba5907a65503b2510000000000000102031424b6074859b9d8776615544311d1b1b1b1b1b1b1b1b1b1b18161006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2123242a3b4d62778d9e88735947341f0b0000000000000000000c1c2a3b4859627583939e9d9083796f66605655524f4e4d4e4f52565a636b7782919fa1998575615544312111000000000000000000000000000000000000050b0d18202227292b2c2c2b2925211f170d0b05000000000000000000000000000000000000000000000000060c0f1a2123272a2b2c2c2b2825211e160b09020000000000000000000000000000000000081d31445572889d96816b56412c1b2d3e4f616e83999f8d7b65594736251302000000000000000000000006141c2a33373b39362d1e170b0000000000000000000b20364b60758a9f8e79644e39240f0000091e3245566b81969d8874604b4b6073859b99836e5e4c3929170300142a3f54697f949a85705a37271501000000000b21364b60758a9f9a846f5948341c13141c2933434f616c819786746e839995806a55402b150000000000152a40556a7f959f8a77614c3a2a1809000000000308141c2c3a4655606c7773605443301c08000012273d52677c92a28d78624d38230d000000000000000a1c304354677c91a4a8927d68533d281300000000000002131d3145566277889d9a8473604b41301f0f000606060606060603010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101f2c35383a3b48596a7f9498836e583b2a1805000000000000000000000d1d2b3b485761727e8a99a1998c847c756f6b676563636365676b7178808a98a09f9583766157463727150300000000000000000000000000000000040d1920222b34373c3e404141403e3b3733292220180d060000000000000000000000000000000000000000040f1a21232c35393c3f414141403d3a363228201d150a00000000000000000000000000000000011527375b70859a99836e59442e29394a5c697e93a196806b5d4c3b2a180800000000000000000000000000000c181f222623211a0f0300000000000000000000081d31445573889d917c66513c271100000b21364b6075899e95806b5544435463798b9f917c665746331e100012273c51677c919d88725544311d08000000000f24394f64798eaa947f6a543b2b1800010b171e32434b60748595806c819698826d58432d1800000000031729395a6f84999a846f5847331c0c00000000000000010e1b2937444b596260554436261401000010263b50657b90a48e79644f39240f00000000000000001325364a6073879caa95806a55402b1500000000000000021527384859657b8b9f96806b5f4d3d2d1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010212e3d494e4f51596277899e907b65503b25100000000000000000000000000d1d2b394654606978838f999f99918a84807d7a7978797a7d81868d959ea1998b7f7261584639291909000000000000000000000000000000000c171f2b34383b484d51545557565553504c473a37342b211a0f0000000000000000000000000000000000000c181f2c35383d494e515456575655534f4b45383631271c1308000000000000000000000000000000182e43586d83989b86715b3928334657647a8b9f9b8574604b3f2f1d0c00000000000000000000000000000000040a0c100e0c07000000000000000000000000021527375b70859a937e69543e291400071a2d3d52677d929f8c78624d37364a5b6b80959d8876614c3f2e1a0a0f243a4f64798f9f8a75604b35200b0000000012273d52677c92a6907b66513b261100000003151d32455663788a8b797f949a85705a372614010000000a1e33465773899e95806b553a2a17000000000000000000000b1926313b484d4b44372618080000000d22374c62778ca6927c67523d27120000000000000000081c304354697f94a998826d58432d1800000000000000000a1a2b3b4b5d687e939e917d675b4a3a2918080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b5b6364666b77859b99846f5d4b37230e000000000000000000000000000d1b2836434a5a626e7a848c959c9f9a95928f8e8d8e8f92969ba39e978f84796a6054463a291b0b00000000000000000000000000000002101c29333c484d56596267696b6c6c6b68656158554c483b352c1c1308000000000000000000000000000003111c2a343d494e575b63676a6b6c6c6a68656056524b45383025180f0100000000000000000000000000162b40556b80959e8873574532424b6175879c9e8a786355443121110000000000000000000000000000000000000000000a0a0000000000000000000000000000182e43586d839896816c56412c17010c21364a5b70859b99846f5a48352d3d4b6074869c97816c5d4b3827150c22374c61778ca88d77624d38220d0000000014293e53697e93a38d78634e38230e0000000002152838495a6a7f95837d929d87725544311d080000000c21364c61768ba7917c67523c2712000000000000000000000009141d2b34373531261909000000000b1f34485973889d96806b563a2a170400000000000000001325364c61778a9f9a85705a3726140100000000000000000d1d2e3f4e606d82979f8a7963584736261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22374b5d6579797b80899b9a8777624c3f2e1c0800000000000000000000000000000b1825303c494d5c646f7880878d9296999c9d9e9e9d9b98959089827a6f635b4b4336291b0b0000000000000000000000000000000210212e3a464c5a626b72777c7e808181807e7b76716a62594e493d3025180c0000000000000000000000000613212f3a474c5b636c73787c7f808181807d7a756f6760564a43362c1f110300000000000000000000000013283e53687d93a78b76604b3d4e606d8298a0927d675a493727150300000000000000000000000000000000000003090c2020110f090000000000000000000000162b40556b809599836e59442e19031628394e63798ea2907b66513c2b1d324556657b8d9f8d7a655645311d0f1f34475974899f8f7a65503a251000000000152a3f546a7f94a18c77624c37220d00000000000a1a2c3c4b607587947f949f8a75604b35200b0000000d22384d62778da2907a65503b25100d0b05000000000000000000010d182022201d1409000000000005182a3b596e84999a85705847331f0a0000000000000000081f3447596e83989d88725544311d08000000000000000000102131424b6074859b9d8776615443301c120100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8d8f9096989184776259483421110000000000000000000000000000000008131c2b353e4b4f5a626b72777d808486888989888683807a756d645c4e4a3d3026180b0000000000000000000000000000000010202e3f4b58616d7880878c91939596969593908c8680776d635b4a43362a1d0d00000000000000000000051324313f4b59616d7981888e919496969695928f8a847d74676054493d2f211305000000000000000000000010263b50657b90a38e78634e495b687d92a098826d5f4d3c2c19090000000000000000000000000000000000000b161e21353526241d120400000000000000000013283e53687d939b86715b392916091e3246576c81969d8773604b35201528384b5d6c81979c8674604b3d2c18182a3b5c72879c927d67523d281200000000152b40556a8095a08b76614b36210c0000000000000e1e324556677c91879daa8d77624d38220d0000000f24394e64798ea38e79644f39282522201817130e0b07000000000000050b0d0b08010000000000000013283e53687d939f8b76614c37210f000000000000000004182a3a54697f949f8a75604b35200b00000000000000000002141d3245566278889e998372604b41301f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798c8c8b89837c706259483b2a18030000000000000000000000000000000000000e19202e373c494d555a62676b6f7172737372716e6a6560564f4a3e362d1c1408000000000000000000000000000000000e1e2e3e4b5d6576828b969c9d9792908e8e9092969c9b958b82796a6054473b2b1d0d000000000000000002132331424e5d6577828c969da69e9a96959596989c9f9a92877d72635b4b3f31231304000000000000000000000e23384e63788dab907b66505663798a9f9d8775614b41311e0e0000000000000000000000000000000000000b1b2832484a4a3b382f221200000000000000000010263b50657b909e89735746321e0c21364b6175899e947f6a5443301c0a1a2e3f4c6176889d957f6a5b493625132f445a6f8499957f6a55402a150000000014293f54697e94a18b76614c36210c000000000000021628384b6073869ca5a48f7a654f3a25100000000f24394f64798ea38e79644e403e3b37342b2c2824201c130d0b050000000000000000000000000000000c22374c61778b9f927d68523e2d1a07000000000000000012273c52677c91aa8d77624d38220d00000000000000000000021528384859657b8c9f95806b5f4d3d2d1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073777775736e665e4c483b2b1d0d000000000000000000000000000000000000000006101b222b35383c484d5256595c5d5e5e5d5c5955504b4538362e211a0f010000000000000000000000000000000006192b3c4b5c657b87979f9c9187827d7a79797a7c81868d979f978b7f726159483b2b1a0a00000000000000102031414e60687b89989f9f988f88848180808083878c949d9d928579655d4d41312211000000000000000000000b21364b60768a9f937d68546074869c9f8b7a64574633231300000000000000000000000000000000000003162839465c5f5f514c402f1d0900000000000000000e23384e63788da78b76614b36211b2d3e53687d929f8b77624c36261401111f334658667c919f8b79635443301c2d42576c829797826d57422d180000000013283d52687d92a28c77624d37220d000000000000000a1c304354677d92a5a7927d67523d28120000000e23384d63788da28f7a65585653504d483b423d393530252220190e0a030000000000000000000000000a1f3447596f849a9a846f5c4a36211000000000000000000f243a4f64798fa48f7a65503a251000000000000000000000000a1a2b3b4b5d697e939e917d675b4a3a29180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606262605659514d40342b1d0d0000000000000000000000000000000000000000000000070e1920232b34383d414447484949484643403b363228221b10070000000000000000000000000000000000000b2035485a647a8a9d9f97867c746d6765636365676b7178818b9a9f948477625948382816020000000000081b2e3e4d5f687e8c9ea39b8b827a746f6c6b6a6b6e72777e88949e9b897b675f4d402f1d0d000000000000000000091e32455673889d95806b696f8197a2947f6a5c4a39291705000000000000000000000000000000000000091e3246576e7575665e4c38240f00000000000000000b21364b60768a9f8e78634e392322364a5c71859b98836e5948341808000417293a4c5e6e83999a8472604a3b2b2a3f546a7f949a856f5a3626140100000011263b51667b90a38e79644e39240f00000000000000011426364b6074879daa947f6a553f2a150000000d22374c62778ca9917c706e6b686562595b57534e4a433638352b211e170b040000000000000000000004182a3a51667c91a28e79644e3e2e1808000000000000000c22374c61778ca8927d67523d28120000000000000000000000000d1d2e3f4f606d82989e8a796358463626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b4c4c4b45383c393020180d0000000000000000000000000000000000000000000000000000060b0d192022282b2f3133343433312e2b25211e160a0700000000000000000000000000000000000000081b2e3f4d6278899e9f96817467605452504e4e5052565a626c7884969f9a8677625645321e1000000000000d22374b5c677d8d9f9f9785796d6560545755555658596269757f8a9d9e8c7d675e4c3b2b18050000000000000000021628385b70869b9b857e7f84979f9a8472604a3e2e1b0b000000000000000000000000000000000000000c21364b61758c8c7c66513b26110000000000000000091e32455673889d907b66513b2629394f64798ea3907b65503b2b180000000b1b30404c6277899e937e68594834273d52677c929c87725443301c080000000d22384d62778da6917c67513c27120000000000000000081d3144556a7f95aa97826d57422d180000000b20354b6075899f9e888583807d7a7774706c68636054534d483c3633291f170c000000000000000000000c20354a6073869c98826d5c4b362614010000000000000b1f34475974899f957f6a55402a1500000000000000000000000000112132424b6074859b9c8776615443301c12010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919263135373736322827241d1205000000000000000000000000000000000000000000000000000000000000050b0d12161a1c1d1e1e1d1c1915100b09020000000000000000000000000000000000000000000d22374b5d6e8398a296816d60564b43363b39393b3d3c484d5a627481969f9b8574604b3e2d1b07000000000f253a4f647a8b9f9f978174635b504b43364040413b484c56606a7a879c9f8c7c665948342011000000000000000000192e43586e8398a39b939499a19c87776254433020100000000000000000000000000000000000000000091e324657748a947f6a553f2a150000000000000000021628385b70869b937e68533e293346576c82979c8773604a35200d000000001220344859687e939e8977624d40303a4f647a8f9f8a75604b35200b0000000b2035485a73889e95806b553929170300000000000000011426374d62778b9f9a846f5a362513000000081c30435471879ca69d97989593908c8985817d79746e69625a534c463933291c12040000000000000000071c304354677d929f8d7a645443301c1101000000000004182a3b5c71879c97826d57422d180000000000000000000000000003141e3245566278899e998372604b40301f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d202222201d15110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364f647a8fa09a8473604b4538302625242425272b353c4855606d8197a296816c5c4a36220e00000000162b41566b80969f9781726055493d3530262b2b2b2b3438454b5c6477869c9e8977624c3f2e1c080000000000000001162b41566b8096ab938b8b909d9883756157473b2b1e0f01000000000000000000000000000000000000031628395e738898836e58382816020000000000000000192e43586e839896806b56412b364c6176899e947f695443301c070000000005182b3b4a6072849a99836e5e4d39374d62778ca98c77624d37220d00000005192b3c5a6f84999a85705746331e0a000000000000000009203448596f84999c87725443301c07000001142636596e83989d888285878a8d91949897928e89847e78706861574c463a3022150700000000000000001325364a6072849a9b8573604b3f2f1f0f0000000000001a2f445a6f84999a856f5a362513000000000000000000000000000002162838485a657b8c9f95806b5e4d3d2c1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d0d0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c100e0c06000000000000000000000000000000000000000000000000081c3043546d8297a28f7a64554432281c14100e0e101219202b37444b6074849a9f8c7a644f3c2c19060000000b20364b607485908172605444372c201c14161516182028323d4a5963798a9e99836e5d4b37230d000000000000000013293e53687e939f8c74767b879c9884756259493c2d1f10030000000000000000000000000000000000001d32475c72879c87715645321e090000000000000001162b41566b809698836e58432e3e53687e939f8a77614c3625130000000000000d1c30435463798b9f917c665746354a60758a9f8f7a654f3a25100000000013293e53687e939f8a76614c36210f000000000000000005182b3b556a7f959f8a75604a35200b00000014293f54697e949f89746f7275787b7f83878c919699938d857d766b61584c403325150700000000000000081c30435463798b9f95806a5d4c3d2d1f110100000002172c42576c81979c87725443301c0700000000000000000000000000000a1a2b3c4b5d697f949f8d7c665b493a291808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f21252320190e00000000000000000000000000000000000000000000000b20354b6074889e9a85705c4a3726160a010000000000050e192731445563798c9f99846f5a4935200c000000091d32455661757b726054433627190f0801000000050a161e2d3b4a5b687d92a18f7a654f3b2b19050000000000000011263b51667b90ab8d78626577869b9a8577625a4a3d2e21120400000000000000000000000000000000061b30465b70859b8a75604b36210b000000000000000013293e53687e939b85705b38374b5c71869c98826d584733180800000000000000132536495b6a7f949d8876614c3f435472879c927c67523d2712000000000d22374c62778b9f927d67523d2d1a07000000000000000012283d52677d92a98c77624c37220d0000000f24394e64798ea68f7a65556063666a6e72777c81878d959b93898076665e504333251401000000000000001325364a5b6a7f949f8d7b655b4a3d2e1c1408000000142a3f54697f949f8a75604a35200b0000000000000000000000000000000e1e2f3f4f616d82989e8a79635846362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1317191a191711070000000000000000000000000000000000000000080e10120b0700000000000000000000000000000c1c2a33373a38352c1e13050000000000000000000000000000000000000000000e23394e63798ea6947f6a543e2e190900000000000000000009152737495b6d8297a18d78634d38230e0000000215283846576166605443362518090000000000000000030f1d2d3d4b6073879c99846f594834200b000000000000000e23394e63788ea3907a65596276859a9b8778635b4b3f2f221305000000000000000000000000000000041a2f44596f84998e79644e39240f000000000000000011263b51667b909d887356453a4f647a8fa48f7a654f3a2a18000000000000000008182c3c4b6073869b97816c5d4b385a6f849a947f6a553f2a15000000000b1f3447596f849a9a846f5b4a362110000000000000000010253a50657a8fa48f79644f3a240f0000000b20354b6074889d95806b544b4e5155595962676c72788087919c95887c6a625043321f0f0000000000000008182d3d4a607283999e8979635b4b3f30261810090212273c52677c91a98c77624d37220d00000000000000000000000000000000112132434b6075859b9c8676615443301c12010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d181f22282d2f302f2c24190b000000000000000000000000000000000003111c232528201c1308000000000000000000000004172a3a474c504d493c31231301000000000000000000000000000000000000000010263b50657b90a5907b65503b2610000000000000000000000009192c3d4e63798da4957f6a55362614010000000a1a2839464b504a433625180800000000000000000000000f1d314455687d929f8c77624d37220d000000000000000c21364b61768ba7927d685258617583989c8879655d4c4031231407000000000000000000000000000003182d43586d8298927d68523d281300000000000000000e23394e63788e9f8a75604b47586d82989c86715d4b371c0c0000000000000000000e1d314455647a8c9f8d7a655645576d829797826c57422d170000000005182a3b51667c91a28e79634e3e2d1909000000000000000d22384d62788daa917c67523c2712000000081c3043546c81969d8773604a383c3f3b474c51575b636a737c86969e91806a614f3d2d1a07000000000000000f1c3043546175869c9e8879655d4b43362d201d1514243a4f64798fa48f7a644f3a250f0000000000000000000000000000000003141e3245576278899e998372604a402f1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2a34373d4244454440362919000000000000000000000000000000000011212f383b3d3530251808000000000000000000000a1f3347586165635a4d41311e0a000000000000000000000000000000000000000012283d52677d92a38e79634e39240e0000000000000000000000000f2135495b71869c9a85705443301c08000000000b1b2832363b3530251808000000000000000000000000011426374c61768b9f937e69543e2914000000000000000a1e32465773899e95806a554757617482979d897b665e4e41322516010000000000000000000000000001162c41566b819696806b56412b1600000000000000000c21364b61768ba78d78634d4c61768a9f937e69533f2e1c00000000000000000000011527374a5c6b81969c8674604b556a7f9499846f5a36251300000000000d20354a6073869c98836e5c4a372614010000000000000b20354b60758a9f947f69543f2a14000000011426364f64798ea2907b65503e2e2a2a34373c3c494d5460677480949d947f695b4a36210c000000000000000013253646576277869c9e897b6960544a3e3631272927374c61778ca8917c67523c2712000000000000000000000000000000000003162839495a657b8c9f95806a5e4c3d2c1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1b28323b474c5357595a595447361b0b000000000000000000000000000000081c2f3f4b50524a43362513000000000000000000000c21374c61767a78675f4d3a2509000000000000000000000000000000000000000013283d52687d92a28d78624d38230d000000000000000000000000061a2c3d576c81969f8a75604b35200b00000000000b161e2126201c13080000000000000000000000000000091e33465770859a99846e593a291704000000000000031629395b71869b97826d58394656607281959e8b7c685f4f43341d140900000000000000000000000000142a3f54697f9499846f593827150200000000000000091e32465773889e907b655054697e939f8a76614c362111000000000000000000000009192d3e4b6075879d957f6a5b52677d929c87725443301c0700000000071c304354687d929f8d7a645544311d11010000000000081d31445572879d97816c57422c17020000000822364a5c70859b99836e5c4b3722181f22272c3536434b56606b7f949f8b79634e39230e0000000000000000081829394859627786989e8b7e73645c514b45383e3d3e475974899f947f6a543f2a150000000000000000000000000000000000000a1b2b3c4c5d6a7f949f8d7c665b49392918080000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a39464b5962686c6e6f6e65543929170300000000000000000000000000000e23384b5d6567605443301c070000000000000000000f243a4f647a8f8d7d6752372715010000000000000000000000000000000000000011263c51667b91a38e79634e39240e0000000000000000000000000013293e53687e93a98d77624d38220d00000000000003090c110b070000000000000000000000000000000003172939566b80959e88735846331f0a00000000000000192e44596e83999a85705a37384554606c80939f8c7d696151443126190a00000000000000000000000012283d52677d929d87725645311d0900000000000000031628395b71869b927d68535d71869c97826d5846331f0a000000000000000000000000101e324557657b909f8b796354657a8f9f8975604a35200b00000000001325364a6072859b9b8573604b3f2e1f0f0000000000011426375a70859a99846f59442f1a00000000071b2d3e50667b90a18f7a644f42311f0f0d121921263038454b616f839997826d573b2a180500000000000000000b1b2a3b4859627583949f94857a6f66605655535253545c71879c97816c57422c17000000000000000000000000000000000000000e1e2f3f4f616e82989e8a79635746362513000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a4757616b777d828485836e5746331e0a00000000000000000000000000071b2d3e50657b7d72604a35200b0000000000000000000c22374c61778c9b86715544311d08000000000000000000000000000000000000000f253a4f647a8fa48f7a65503a25100000000000000000000000000011263c51667b91a48f79644f3a240f000000000000000000000000000000000000000000000000000000000014293e53697e93a68b76614c36210c00000000000001162c41566b81969d877255443136434b626a7e8d9f8d7f6b624b4437281a0b000000000000000000000010253b50657a909f8a75604b36200b0000000000000000192e43596e839895806b55657a8fa38f7a644f3a291704000000000000000000000000031628394c5e6d82989a85726062778da98c77624c37220d0000000000081c304354647a8c9f947f6a5d4b3d2c1e100200000000182d42586d82979c87715c3a2a1704000000001023384c5e70859b9a8470604e3d2d1e0e000608141c28324350657b909e88735947341f0b0000000000000000000d1d2a3b4757616e7f8b999b8f847c756f6b6967686a6c71849999846f5a442f1a0000000000000000000000000000000000000000112132434b6175869c9c8675615443301c120000000000000000000000000000000000000000000000000000000000000000000000000000000013253647586175808a929798978b76614c36210c000000000000000000000000000d22364a5c708492836e59442f190400000000000000000b1f34475974899f8a75604b35200b000000000000000000000000000000000000000d22374c62778ca4937e68533727150100000000000000000000000010263b50657b90a58f7a65503a2510000000000000000000000000000000000000000000000000000000000012273c52677c91a38e78634e39230e0000000000000014293e54697e939f8a75604b352630445060697d8c9f94806d60554538291b0d000000000000000000000e23384e63788dab8d78634e38230e0000000000000001162c41566b819698826d596e83989b86715c4a361b0b00000000000000000000000000000a1b2f404c6176889e937e6860758a9f8f79644f3a240f0000000000001325364a5c6a80959f8c7b655b493c2d201407000000152b40556a80959e89745847331f0a00000000091c2f404e63798c9f937e685c4a3c2c1f130700010a1521364b60768b9f8c77624c37220d000000000000000000000d1d2a39464b616978838f989a918984807e7c7d7f818699a19c87715c47321c0000000000000000000000000a0a0a0a0a0a0a0a03151e3246576378899e998372604a402f1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000071c304354617685969d908783827f73604b35200b000000000000000000000000031629394e64798e9d88735d48331e08000000000000000004182a3b5c72879c8e79634e39240e000000000000000000000000000000000000000b1f34475972879c97826d5544311d0800000000000000000000000012273c51677c91a48e79644f39240f000000000000000000000000000000000000000000000000000000000011273c51667c91a48f79644f3a240f0000000000000011273c51667c91aa8d77624d38221c33424f5f677c8a9e968173605646392a1d0e0000000000000000000c21364b61768ba7907b66513b2611000000000000000014293e54697e939a857061778a9f937d68533e2e1b00000000000000000000000000000000111f334758677d929e89776272879d917c67523c271200000000000008182d3e4b607283999e8879635a4a3e32211a0f080113283d52687d92a88c76614c37210c00000000001221364a5b6b80959f8b7a645a493d31221b131110121e32465774899e8e78634e39230e00000000000000000000000d1b2933434f5a626e7a838b9398999593929394979c9b958e836f5a452f1a00000000000000000003090c1f1f1f1f1f1f1f1f1f1f162839495a667c8d9f957f6a5e4c3c2c1b0b000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607283999d887c726e6c6a605544311d080000000000000000000000000a1e3246576d829795806b55402b16000000000000000000001a2f445a6f8499927c67523d27120000000000000000000000000000000000000005182a3b576c81979e8874604b36251300000000000000000000000013253653697e93a88d78624d38230d000000000000000000000000000000000000000000000000000000000417293a54697e93a38e79634e39240e000000000000000f24394e64798ea38f7a654f3a25152432414d5e667b899d9783746157473b2b1e0f0100000000000000091e32465773899e937e69533e2914000000000000000011263c51667b919d8872697f949e8976614b3621100000000000000000000000000000000004172a3a4d5f6f839999836e6f859a947f69543f2a14000000000000000f1c3043546176869c9d8778645c4f42362d201d1513253b50657a90a48e79644f39240f0000000000071a2d3d4b6073849a9d8778635b4e41362d282626272f3b4b61768b9f8c77624d37220d0000000000000000000000000b171e323c484d5d646e777e83888c8e8f908f8d8a8680796f6554412d1800000000000000000b161e213434343434343434343434342c3c4c5e6a7f949f8d7c665b4939291603000000000000000000000000000000000000000000000000000000000000000000000005182a3b52677d929e8978665e5857554b44372614010000000000000000000000000c21364b61768a9f8b78624d38220d00000000000000000002172d42576c829796806b56412b16000000000000000000000000000000000000000010253a4f657a8fa3917c665443301c1102000000000000000000081c3043546b81969e8975604b36200b0000000000000000000000000000000000000000000000000000000a151f3346586d8297a88c77614c37220c000000000000000c21374c61768ca8927d67523d2812142330404c5d6479889c9984756259493c2d1f0f00000000000000031628395c71869b96816b56412c1601000000000000000f24394e64798e9f8a7573879c97816c5746321e0a00000000000000000000000000000000000c1c30414d62788a9e917c6d829797816c57422c17020000000000000114263647586277869c9d887a69604e4a3d3531272827384d62788daa917c66513c27110000000000000f1d3144556176879c9d8779685f4f4a3e3d3b3b3c3f4c59687d929d8874604a35200b0000000000000000000000000003141e2b353f4b4f5962696e7477797a7b7a7875716b645c5447372512000000000000000b1b2832364949494949494949494949494949404a607283999e8979635746321e1402000000000000000000000000000000000000000000000000000000000000000000000b1f34485971869b937e695a4c404240353126190900000000000000000000000004182a3a52687d9299836e5a4834200b00000000000000000000152a3f556a7f949a846f5a3b2a1805000000000000000000000000000000000000000e22374b5d70859b9b8572604a3e2e1d1509030000000000020a1827384a6073879d9a846f5544311d08000000000000000000000000000000000000000000000000040a121a2731424c61768a9e9e8974604b35200b000000000000000a1f33475874899e947f6a553f2a150513222f3f4b5b6378879b9a8577625a4a3d2d1e0e00000000000000192f44596e849998836e59432e1900000000000000000c21364c61768ba78d787b90a38e79634e39291603000000000000000000000000000000000000132035485a697e939d88767f9599846f59442f1a00000000000000000818293a4859627786999d8b7e70635b504b44373e3c3e4b60758a9f937e69543e29140000000000000115273747586278869b9d897d6f645c5652515052555d6577889d95806b5443301c070000000000000000000000000000000e19202e373b474c5354606263656564636055564e4a3e3729190800000000000003162839464b5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f546175869c9c8675614b42311f0b000000000000000000000000000000000000000000000000000000000000000000000d22374c62778c9e8976614b3c2f2d2a201d1409000000000000000000000000000a1f34475970859a917c67523c2b19050000000000000000000012273d52677c929d88735947341f0b00000000000000000000000000000000000000081b2e3f50657b909f937e685c4b3f31271e17110f0e0f10151d28364556657b8fa5927d68533727150200000000000000000000000000000000000000000001080c171f212f38454b606c8197a898826d5443301c08000000000000000417293a5c71869c97826d57422d18000412202e3d4a5a6277859a9b8778635b4a3c2b1905000000000001172c41566c81969b86715b39281603000000000000000a1f33465874899e8f7b83999b85705b4a361b0b0000000000000000000000000000000000000005192b3c4b6073859b97817d929c87715c3a2a170400000000000000000c1c2b3b4859627683949f9384796e65605555535253545572889d96816c56412c170000000000000009192a3a485a627785959e92847a716b686665676b717b879d9d8876614c362513000000000000000000000000000000000006101b222a343736434a4c4e50504f4d4b443739362d20190b00000000000000091e324657617474747474747474747474747474747474747479899e98836e604e3a26110000000000000000000000000000000000000000000000000000000000000000000011263c51667b919a846f5746321e17150b080100000000000000000000000000000c22374c61778b9f8a76614b36210d000000000000000000000010253a4f657a8fa68c77624c37220d00000000000000000000000000000000000000001023384c5d6c81969f8b7a655d4b44373329272423242527313945546074869c9e8875604b36210b00000000000000000000000000000000000000000408141c20293336404c56606b7e939fa0907b65503626140100000000000000001a2f44596f84999a846f5a362513000002101f2d3c4959627684959b8879635a4835200b00000000000014293f54697e949e88735745321e09000000000000000417293a5c71869b937e8c9f927d68523d2d1a0000000000000000000000000000000000000000000e1c30435463798b9f8d7f949e89745847331f0a0000000000000000000d1d2b3b485861727f8b999a8d837b756e6a6867686a6c71859a99836e59442e1900000000000000000c1c2b3c48596174808b989a8f86817d7b7b7c8086909d9b897a64584733180800000000000000000000000000000000000000080d181f2225303537393a3b3a3835312724211a0f0100000000000000000c21364b61758a8989898989898989898989898989898989898a8c9fa0937e68533e28130000000000000000000000000000000000000000000000000000000000000000000013283e53687d9397826c573928160000000000000000000000000000000000000115273752687d9299836e5746321e0900000000000000000000000d22384d62778daa907b65503b26100000000000000000000000000000000000000000081c2f3f4b6074849a9e897b6a60554b46393c3a38393b38454b57607281979f927d675645321e09000000000000000000000000000000000000060c171f2630353a464c535e667480939ca498836e5d4b371808000000000000000002172c41576c81969c87725443301c070000010f1e2b3b475861748085868478624d38220d00000000000011273c51667c91a68b76604b36210b0000000000000000192f44596e84999c879c9e8975604b36210f000000000000000000000000000000000000000000011426364a5b6a80959d889da88c76614c37210c000000000000000000000d1d2b3a4654606978838f98999088837f7d7c7d7f82869aa29b86715c46311c0000000000000000000e1e2b3b4755606a79838c959b9692909091959b99908578645c4a3a291700000000000000000000000000000000000000000000050b0d131c20222425262523201d150f0d0700000000000000000000091e32465773889b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a846f5a452f1a0000000000000000000000000000000000000000000000000000000000000000000014293e54697e9396816c56412c17000000000000000000000000000000000000081d3144556e8399937d68533928160300000000000000000000000b20354b60758a9f937e68533e2913000000000000000000000000000000000000000000111e324556617584969e8b7f7468615755514f4e4e50535660677582979f97816d5f4d3828160200000000000000000000000000000000030e19212a3336434b50586168717b86959ea59c8677614c3f2e1c00000000000000000000142a3f54697f949f8a75604a35200b000000000e1d2a3a4656606b707170625a4835200b0000000000000f24394f64798ea38e78634e39230e0000000000000001172c41566c8196a49ca496816c5645321e090000000000000000000000000000000000000000000008182d3d4b6074869c9da6a48e79644f39240f00000000000000000000000d1b2936434a5a626e7a838b9398999593919394979c9b958e836e59442f19000000000000000000000e1d2a37444b5c646e7980858b8e8f918f8e89837b70625a4a3e2d1c0c0000000000000000000000000000000000000000000000000000070b0d0e10100f0e0b08010000000000000000000000000003162839586e828686868686868686868686868686868686868686868686836e59442e190000000000000000000000000000000000000000000000000000000000000000000013283d52687d9297826d58422d180000000000000000000000000000000000000b20354b6075899e8d78624d38220d000000000000000000000000081c30435472879d95806b56402b160100000000000000000000000000000000000000000216283846576174808c9a95877d766f6a6664636465696d757d87989e928172604b41301a0a000000000000000000000000000000000a161e2c353a474c5460666e767e86909ca4a09887786259473421110000000000000000000012273c51677c91a98c77624c37220d00000000000d1b2938454b555b5c5a4d483c2b19050000000000000c21374c61768ca8907b66503b2611000000000000000014293f54697e94a9b1a28d79634e3828160200000000000000000000000000000000000000000000000f1d314556657a8d9fb5a6917c66513c27110000000000000000000000000b1825303c494d5d656e777e83888c8e8f908f8d8a8680796e6554402c1700000000000000000000000c1927313e4a4e5b636a7076787a7b7a78756e665e4d483c2d2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2b3f53646e71717171717171717171717171717171717171717171716e6554402c170000000000000000000000000000000000000000000000000000000000000000000011263c51667b9199846e593a2a170400000000000000000000000000000000000f243a4f64798f9c87725a4835200b000000000000000000000000011426365a70859a98836e58432e19000000000000000000000000000000000000000000000a1a29394656606b7a848e97938a847f7c7978797a7e8289929d94897d6d605443302313000000000000000000000000000000000e1a28323c494d586169737b838a939ca4a39b908275625a483b2a1803000000000000000000000f243a4f64798fa48f7a644f3a250f0000000000000b1a2731364046464538352b1e0e000000000000000a1f33475874899e937e68533e2913000000000000000011273c51667c91a6af9a85705b49351a0a000000000000000000000000000000000000000000000000021527384b5d6c8197a6a9947e69543f29140000000000000000000000000008131c2b353f4b4f5962696e7477797a7b7a7875716b635b544736241100000000000000000000000009151d2d363d494e55576163656665636055514c40352b1e1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001023364653585c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c595447362411000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d9d87725847331f0a0000000000000000000000000000000000142a3f54697f9497826d583c2b190500000000000000000000000000182d42586d82979b85705b38281502000000000000000000000000000000000000000000000b1b2938454b5c6470798288989994918f8d8e9093979e9b877f76675f4b43362614050000000000000000000000000000000e1e2c38454b5b636d777f8790989fa99f988f867b6e6157483c2b1d0c00000000000000000000000c22374c61778ca8917c67523c2712000000000000000a151d202b3031302220190e000000000000000004172a3a5c71879c95806b56402b1601000000000000000f24394f64798ea4a6917c67523d2c1a00000000000000000000000000000000000000000000000000000a1a2e3f4b6175879dab96816c56412c170000000000000000000000000000000e19202e373b474c5354606263656564636055564e4a3d3629190700000000000000000000000000020f1a212c353839464c4e5051504e4b4437382f20190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061828363f434646464646464646464646464646464646464646464646444036281807000000000000000000000000000000000000000000000000000000000000000000000c2035495a73899e8c77614c37210c0000000000000000000000000000000004172a3a596e8399937d68533e28130000000000000000000000000000152b40556a80959d88735645321d0900000000000000000000000000000000000000000000000b1a28323e4a4f5c646d778398a69e9a9897989b9e9b857a71665e4c483b2e20100100000000000000000000000000000d1d2c3c4956606c78828a949da5a69d958b837b71655d4c46392b1e0e0000000000000000000000000b1f34475974899f947f6a543f2a15000000000000000002090b161b1c1b0d0b05000000000000000000001a2f44596f849998836e58432e1900000000000000000c21374c61778c92928774604b36200f000000000000000000000000000000000000000000000000000000101e334657667c8c9292836e59442f190000000000000000000000000000000006101b222a343736434a4c4e50504f4d4b443739362d1f190b00000000000000000000000000000000070f1a2123293336393a3c3a39353127241c120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18232b2e31313131313131313131313131313131313131313131312e2c24180a000000000000000000000000000000000000000000000000000000000000000000000006192c3c596e8399917c6751372715020000000000000000000000000000000a1f33475873889d8e79634e39240e000000000000000000000000000013283d53687d929f8a75604b36200b0000000000000000000000000000000000000000000000000a17293a48596274808a98988f888583828385898f988f867c6f62594b3e2e1f0f0000000000000000000000000009192b3c495b6375818b979fa99f99918880786e655d504c3f33291b0e0000000000000000000000000004182a3b5c72879c97816c57422c1702000000000000000000000006070500000000000000000000000002172c42576c81979b85705b38281502000000000000000a1f334758677d7d7c78625645311d09000000000000000000000000000000000000000000000000000000031729394c5e66797c7d7c66503b2611000000000000000000000000000000000000080d181f2225303537393a3b3a3835312724211a0f0100000000000000000000000000000000000000060c0e171e212325262523201d1509090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061016191c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c191711070000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c9298836d5544311d080000000000000000000000000000000c21374c61768c9f8a75604b36200b000000000000000000000000000010253b50657a90ab8d78634d38230e0000000000000000000000000000000000000000000000000a1f334658627785959e8d827a746f6e6d6e70757a838d9b918477645c4b3d2d1c0c000000000000000000000001142637485a637986969fa99f978c847c746b6259504b3f382f1e170b0000000000000000000000000000001a2f445a6f849999846f5a442f1a00000000000000000000000000000000000000000000000000000000142a3f54697f949d88735645321d090000000000000004172a3a4d5f676767625a4838271502000000000000000000000000000000000000000000000000000000000b1b2f404c5c646767665e4c38230f0000000000000000000000000000000000000000050b0d131c20222425262523201d150e0c07000000000000000000000000000000000000000000000000030a0c0e1011100e0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768a9e8975604b36200b00000000000000000000000000000010253b50657a909c86715544311d0800000000000000000000000000000e23384d63788dab907a65503b25100000000000000000000000000000000000000000000000081c2f3f4c6176869b9e887b6d6460545857585560656e7a85999a887a645b4a3a29170400000000000000000000081d3144556278879ca4a29a8b82786f6660554d483b372e231c110300000000000000000000000000000002172d42576c82979c87715c3a2a180400000000000000000000000000000000000000000000000000000012273c52677c919f8a75604b36200b00000000000000000c1c30414d5252524d483c2b1a0a00000000000000000000000000000000000000000000000000000000000012222f3d4a4e5252504c402f1c09000000000000000000000000000000000000000000000000070b0d0e10100f0e0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b101416171715120e0c06000000000000000000000000000000000000000000000002090b0902000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576f8499907b655036251300000000000000000000000000000013293e53687e9398836e593727150200000000000000000000000000000b20364b60758a9f927d68533d281300000000000000000000000000000000000000000000000e23384b5d6e83999e8979655d4f4a43364237444b505c647483999d8979635847331f0f000000000000000000000b20354b6073859ba59f9784796c635a514b4437342b231c1108000000000000000000000000000000000000152a3f546a7f949f89745947341f0a0000000000000000000000000000000000000000000000000000000f243a4f64798fab8d78634d38230e000000000000000000132330393d3d3d38342b1d0d0000000000000000000000000000000000000000000000000000000000000004121f2d36393d3d3b382f221100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111719202020202020202020202020202020202020202020202020100e080000000000000000000000060a161e2125292b2c2c2b2823211a0f0903000000000000000000000000000000000000000a161e211e160a0400000000000000000000000000000000000000000000000000000000000000000000000317293952687d9296816c5443301c070000000000000000000000000001162b41566b809696806b56412b16000000000000000000000000000000091d31455673889d95806a55402b15000000000000000000000000000000000000000000000417293a50657b90a1917c665b4b3f3530252d2731353e4b56607383999d8776614c3d2d1a070000000000000000071a2d3d53687e93a39f978173635b4d493c35312720190d08000000000000000000000000000000000000000012273d52677c92a88c77614c37220c0000000000000000000000000000000000000000000000000000000d22374c62778ca9907a65503b251000000000000000000005131e252728272220190d000000000000000000000000000000000000000000000000000000000000000000010f1a2124272826231c1103000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a10122020202020202020202020202020202020202020202020202020200a0400000000000a18242c2e35353535353535353535353535353535353535353535353525231c110300000000000000020f1a212832363b3e414141403d38352c211e160a00000000000000000000000000000000000a1a28323632281f170c04000000000000000000000000000000000000000000000000000000000000000000000c21374c61768a9d8873604a35200b0000000000000000000000000004192e44596e8399937e68533e2913000000000000000000000000000000021527385b70859b97826d58422d18000000000000000000000000000000000000000000000a1f3347586f84999b85705e4d3c2e201c1318151d202e3845556176879d97816c5b4a36210900000000000000000d21364a5c72879ca497816d6055493d352c201d1509050000000000000000000000000000000000000000000010253a4f657a8fa48e79644f39240f0000000000000000000000000000000000000000000000000000000b20354a6075899f927d68533d281300000000000000000000010a101212120d0b05000000000000000000000000000000000000000000000000000000000000000000000000070d0f1212110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25273535353535353535353535353535353535353535353535353535351f170c0000000718283640444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3a372e211100000000000009151d2c3538454b505356575655524e493d3632281b1302000000000000000000000000000002162838454b453833291f180c0500000000000000000000000000000000000000000000000000000000000000000a1f3347586f849a8f7a644f3a240f00000000000000000000000000061b31465b70869b907b66513b261100000000000000000000000000000000192e43586e83989a85705a372614010000000000000000000000000000000000000000000c21374c61768b9f927d685340301e100700000108101a28374658667c919f8c79634e37271502000000000000000f24394e64798ea59c8675604b44372c20190e08010000000000000000000000000000000000000000000000000d22374d62778ca9917c67513c2712000000000000000000000000000000000000000000000000000000071c30435472879c95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001132330393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a33291c0c0000112436465359606060606060606060606060606060606060606060606060504b3f2e1c08000000000b1927313d494e566065696b6c6c6a67635b544b4539311e160a00000000000000000000000000091e32455660564c463a342a20180d0600000000000000000000000000000000000000000000000000000000000004172a3a53687d9295806b563b2a1805000000000000000000000000081d32485d72879d8f7a644f3a250f00000000000000000000000000000001162b40566b80959d87725544311d0800000000000000000000000000000000000000000011263b50667b90a88d78624d382312000000000000000a19293a4a6073869c97816c5544311d080000000000000013283e53687d93a8937e6956453226190f060000000000000000000000000000000000000000000000000000000b20354b60758a9f947e69543f2914000000000000000000000000000000000000000000000000000000001325365a6f849a98826d58432d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1012202020202020202020202020202020201f1e1c1915110b0903000000000000000000000000000000000a1e30414d5260606060606060606060606060606060606060606060606060605e463a29170400172c4053646e757575757575757575757575757575757575757575757575655d4b37230e0000000c1b2937444b5b636d757a7e808181807d78726960574e4232281a0a0000000000000000000000000b21364b60756a61584c473a342b20190e0600000000000000000000000000000000000000000000000000000000000c21374c61778b9c87725948341f0b000000000000000000000000071c30435474899e8d78634e38230e0000000000000000000000000000000013293e53687e939f8a75604b35200b00000000000000000000000000000000000000000014293e54697e939e89745a4935200c00000000000000000c1c304354697e949e8975604b36200b00000000000000152a40556a7f95a98c77624c382816090000000000000000000000000000000000000000000000000000000000081c30435472879d96816c57412c1702000000000000000000000000000000000000000000000000000000182d42576d82979a85705a45301b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e2527353535353535353535353535353535353433312f2b26211e160a0900000000000000000000000000001025394d5f677575757575757575757575757575757575757575757575757575705846331f0a00192e44596e838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7b65503a251000000c1c2a3a4655606a79828a909396969695928d877f7568604b4538281a0a00000000000000000000001b31465b70857f766b61594d483b352b211a0e070000000000000000000000000000000000000000000000000000000a1f33475871869b8c77624c37220d0000000000000000000000000b20354a60758aa88c77614c37220c0000000000000000000000000000000011263b51667b90aa8d77624d38220d000000000000000000000000000000000000000000152b40556a80959d88725d3c2c19060000000000000000001325364e63798ea78f7a644f3a240f00000000000002172c41576c81969f89745947341a0a000000000000000000000000000000000000000000000000000000000000011426365a6f859a99846e59442f1904000000000000000000000000000000000000000000000000000000152a3f556a7f929287725d48331d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001132330393c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494644403b363228231c110800000000000000000000000012273c52677d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a76614c36210c00162b41566b80969797979797979797979aa29fa0989797979797979797927d68523d28130004172a3a475861747f8b989e96908b8a898b8d939a94887d6d60564538281502000000000000000000001a2f455a6f84958980776c62594d483c352c211a0f070000000000000000000000000000000000000000000000000004172a3a576c8196917b66513c26110000000000000000000000000b21364b60768ba08b76614b36210c000000000000000000000000000000000e23394e63788ea38f7a654f3a2510000000000000000000000000000000000000000000152b40556a80959d88725d3a2a17040000000000000000000b20354a6074899e947e69543f291400000000000001162c41566b81969d88735e3b2a180400000000000000000000000000000000000000000000000000000000000000182d42586d82979c86715c47311c070000000000000000000000000000000000000000000000000000000e23384d63787d7d7d67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e30414d52606060606060606060606060606060605f5e5c5955514b4539382f231c1102000000000000000000000f253a4f647a8f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8e79644e39240f0010253b50657b82828282828282828282849aae98828282828282828282827b66513b2611000a1f334758617684959f9689807a76747475787e848f9c928274605645321d1300000000000000000000152b40556a80949e958a81776c625a4e493d362d221b100800000000000000000000000000000000000000000000000014293e53697e93947f69543f2a140000000000000000000000000c21364c61768ba08b75604b36200b000000000000000000000000000000000c21364b61768ba7927c67523d271200000000000000000000000000000000000000000014293f54697e949f89745847331f0a000000000000000000071c30435471869c96816b56412c1600000000000000152a3f546a7f949f8a745847331f0a0000000000000000000000000000000000000000000000000000000000000014293e53697e868784705b46301b060000000000000000000000000000000000000000000000000000000c2035495a636767675f4d392510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f67757575757575757575757575757575757473716e6a666057504c40372e1e160a0000000000000000000d22374d62778ca9a19a8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d7c66513c2711000e23384b5d656d6d6d6d6d6d6d6d6d6d7b90a48e7a6d6d6d6d6d6d6d6d6d665e4c38240f000c21374c6176869b9e8c80756b656157566063686f7b8699988474604b41301a0a0000000000000000000b20364b60747f88949d968a81786d635b4e4a3d362d231c11090000000000000000000000000000000000000000000012273d52677c9295806b55402b160000000000000000000000000c21374c61768c9f8a75604a35200b000000000000000000000000000000000a1e32465773899e947f6a553f2a1500000000000000000000000000000000000000000011273c51667c91a98c76614c37210c000000000000000000001325365a6f859a97826d58422d180000000000000012273c51677c91a98c76614c37210c00000000000000000000000002090b150f0d0700000000000000000000000011263b4e60697171706655422e190400000000000000000000000000000000000000000000000000000006192c3c494d5252524d41301e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888684807b766e665e504b3f32281a0c00000000000000000b20354a60748a9f9a847878787878787878787878787878787878787878787876614c36210c00081c2f3f4b5058585858585858585862788dab917c665858585858585858514c402f1d09000b21364b60758698897b6b6157504c46454b4d535d6575839998826d5f4d382815020000000000000000091d324556606a757e88939d978b82796e635b4f4a3e372e231c1107000000000000000000000000000000000000000d19273c51667c9196816b56412c160100000000000000000000000b21364b60768ba08b75604b36200b00000000000000000000000000000000031629395c71869b97826c57422d170200000000000000000000000000000000000000000d22384d62778da4917c6651392917030000000000000000031628395a70859a98826d58432d18000000000000000d22374d62778ca4917c66513a2a1704000000000000000000000a151d202a24221b1002000000000000000000000b1f31424e535c5c5b554838261200000000000000000000000000000000000000000000000000000000000e1e2c35383d3d3c3930231301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f9fa99f9e9e9e9e9e9e9e9e9e9e9e9e9f9e9b9995908a837b71655d4b4538291c0c00000000000000071c30435472879c9b8670636363636363636363636363636363636363636363615746331e0a000011212f383b42424242424242424b60758a9f947e6954424242424242423b382f22120000091e3245566379837a655d4b463936333136383f4b576175859b927d675645321d09000000000000000002152838454b576169757e87929c978c83796e645c4f4b3f382f201c13080100000000000000000000000000000d1b1d2b344254697e94947e69543f29140000000000000000000000000b20354b60758aaa8b76614c36210c0000000000000000000000000000000000192e44596e839999846f5a442f1a0000000000000000000000000000000000000000000b2034485a72879c97816c5746331e0f0000000000000000091e32465771869c96816b56412c16000000000000000b2034485971869c97826c5847331f110100000000000000000a1a2832363f39362d201000000000000000000000021424313b3e47474642382a1a090000000000000000000000000000000000000000000000000000000000000e192023282827251e130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca99f8b8889898989898989898989898a8b8c90959a9f9890857b6c6056473a291b0a000000000000001325365a6f849a9e8873574d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4639291703000003111c23252d2d2d2d2d2d2d31445573889d96816c56412d2d2d2d2d2d26241d1204000002162838495b636e645c4b3f3228211e1d20232e39465763798c9d8775604b36200b0000000000000000000a1a283239464b566068747d86919b988c837a6f655d504c403530251c14080100000000000000000000000a1b2c393c484d6070859a8c79634e39230e000000000000000000000000081c304354758a9f8c77624c37220d0000000000000000000000000000000001172c41566c81969c87725c3a2a1804000000000000000000000000000000000000000005192b3c556a7f959e8976614c3d2c1b0e010000000000010f21364b61768a9f937e69543e29140000000000000005192b3b54697f949e8977614c3f2f1f12070000000000040e1b2838454b554f4a3e2d1d0c0000000000000000000006141f26293232302e261a0c0000000000000000000000000000000000000000000000000000000000000000060c0e121212100a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9f99837373737373737373737373737476777b7f848b969e9b90817461584739281603000000000000182d42576d8297a68b76604b383838383838383838383838383838383838383633291b0b0000000000080e101818181818181527375b70859a99836e59442e1918181818110f0900000000000a1a2c3c494d584e4a3e2f1e160c0a090b111b29394a5b6e8398927d67523d2812000000000000000000000a151d283238454b556067737c85909a998f847a70655e514a433630261d1509020000000000000000001427394a565a626b7e9398826e5b4936210c000000000000000000000000011426495f74899e8d78624d38230d000000000000000000000000000000000014293e54697e939f89745947341f0a0000000000000000000000000000000000000000000d21374c6176899e947f6a5b493a2b1d15090700030a121f2f4051667b90a68e79634e39240e00000000000000000d21364b6176899e96806b5d4b3d30211a11100e0e10171f2c394556606a645c4a3b2a180400000000000000000000020b11141c1c1b191209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879c9c86715e5e5e5e5e5e5e5e5e5e5e576062656a6f78808a9b9f978576615745321e12000000000000152a3f556a7f94a38e78634e39232323232323232323232323232323232323211e170b000000000000000000030303030300182e43586d83989b86715c392917030303030000000000000000000e1e2c35384339362d20110300000000000b1b2d3d51667c9199836e593a2a170400000000000000000000020b161e283237444b546066717b858f999a8f857b706660544b433631271d150a03000000000000001a2f4356687178808d998777624d3d2c1a06000000000000000000000000001e34495e73899e8e78634e39230e000000000000000000000000000000000011273c51667c91a98c77614c37220c0000000000000000000000000000000000000000000a1f3347586a7f949e8a796358483c3127211a1b171e212f3d4c5e6f849a9d88735b4a36210c00000000000000000a1e3346576a7f949f8c7b655b4c40362d272523242529333c495760747f7a645947341f0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d20202014120c0300000000000000000000000000000000000000000000040e141620201f0c0a0400000000000000000000000000000000000000000000000000001325365a6f849a9e89745846494949494949494939454b4d50555a626b788598a09b8575604b402f1808000000000012283d52677d92a5907b66503b26110e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0a0300000000000000000000000000000000162b40556b80959e89735746331e0a000000000000000000000000000e1921232e24221b1002000000000000000f21364c61768b9e89745847331f0a000000000000000000000000030a151d273136434a515e65707a848e989a90857c736760544b443731271e160a0000000000001c31475c71868d968c8377625948341f0f00000000000000000000000000081d33485d72889d8f7a644f3a250f00000000000000000000000000000000000f24394f64798ea48e79644f39240f00000000000000000000000000000000000000000004172a3a4b6075869c9c8676625a4b4437362d30293336404c5b667c90a2947e69543d2d1a070000000000000000031729394b6074859b9e8979665e4e4a3e3c3a38393a3a474c5a637584948877614c37220c0000000000000000000000000000000000080e1015140d0c0600000000000000000000000000000000000000000000000000000000000d18203535353529272014070000000000000000000000000000000000000000081621292c353535221f180c00000000000000000000000000000000000000000000000000182d42576d8297a88b76614c3634343434343434283236373b3c484d5a62738298a298826d5e4c362614010000000010253a4f657a8fa4937e68533e2913000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a78b76614b36210c0000000000000000000000000000060c0e190f0d070000000000000000000a1f33465874899f8c76614c37210c00000000000000000000000000000209151d253035404c505d656f79838c979b91867c736860554b453832281a0a00000000001b30455b70849399877e74635b493d2c1a0a000000000000000000000000061c31465b71869b917c67523c271200000000000000000000000000000000000c21374c61768ca8917c67513c2712000000000000000000000000000000000000000000000c1e3245566278889e9c86786860554e4a3d4539464b515e6679899e9d8875604b36210f000000000000000000000b1e3245566278899e9e8a7c6f645c56514f4e4e505358616a78859aa295806a55402b1500000000000000000000000000000003111c23252a292320190e0000000000000000000000000000000000000000000000000000000d1d2b344a4a4a4a3f3b32251400000000000000000000000000000000000000041626343d414a4a4a37332a1c0c000000000000000000000000000000000000000000000000152a3f556a7f94a38e79644e39241e1e1e1e1e1e161e2122262b353c49556074849aa0917c665443301c08000000000d22384d62778daa95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a38e79634e39240e000000000000000000000000000000000003000000000000000000000008132034485a74899f8e78634e39230e000000000000000000000000000000000108131c202f383f4b4f5c646e79828b979c91867d746860564b4538281603000000000f24394f647a7d848d938679635b49382715020000000000000000000000041a2f44596f8499947f69543f2a1400000000000000000000000000000000000a1f33475874899e947e69543f29140000000000000000000000000000000000000000000003162838485a647a899c9c887e746a635b5c5a5b5761666f7c899e9f8b7b655645321e090000000000000000000002162838485a657b899d9e918479716b6665636365686e767f8a9ba29a8575614b36210c00000000000000000000000000000816212e373a403f38352c1e130500000000000000000000000000000000000000000000000005182b3b485e606060544f433219090000000000000000000000000000000000000e213444515660605f4c473a2a1804000000000000000000000000000000000000000000000012283d52677d92a6917b66513c2611090909090003090b0d1019202c37455662778a9f9c8673604b35200b000000000b20354b60758a9f98836e58432e1900000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3907b66513b26110000000000000000000000000000000000000000000000000000050b111c23303f4d62778da88d78624d38230d0000000000000000000000000000000000000007111c232e373e4a4e5b636d78818a969c92877e7469605645321e09000000000d22364a5c64686f7b899c8979635645311d09000000000000000000000002182d42576d829796816c57412c17000000000000000000000000000000000004172a3a5c71879c96816c57412c1709090909090000000000000000000000000000000000000a1a2b3c4b5c647886969e93867f797472707072767c84909e9d8c7d675d4b3828160300000000000000000000000a1a2b3c4b5d657987979f998e86807c7a78797a7d8389959f9f958476615746321e0900000000000000000000000000031626343f4b5055544d493c3023130000000000000000000000000000000000000000000000000b203448597075757569614f37261401000000000000000000000000000000000014293d51626b757574615847331f08000000000000000000000000000000000000000000000010253a4f657a8fa4937e69543e291400000000000000000000050e19283848596b8096a4917c665136261401000000081d31445572879d9b85705b38281502000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba6937e69533e2914000000000000000000000000000000000000000000000002090e1920222e37414d5d6a80959f8a75604b36200b00000000000000000000000000000000000000000009101b222d363d494e5a626c778089929993887e74604b36210b00000000071b2d3e4a4f535d657a8c9c8674604b36200c000000000000000000000000152a3f546a7f9499836e5938281603000000000000000000000000000000080e1a2f445a6f849999846e59442f1e1e1e1e1e1e16140d040000000000000000000000000000000e1e2e3e4b5a6275808a979c948e89878585878a919a9e95887b675f4d3f2e1a0a000000000000000000000000000e1e2e3f4b5b6376818b989f9c96918f8d8e8f93989e9f988c8074615846392816030000000000000000000000000011213445515d656a69625a4d41301c0c00000000000000000000000000000000000000000000000d22374c62778a8a8a7f695544311d080000000000000000000000000000000001162c41566b808a8a8b76614c36251300000000000000000000000000000000000000000000000d22384d62778daa96816b56412c160100000000000000000000000a1a2a3b4c61778b9f98836e5443301c08000000011426375a70859a9d88735645321d0900000000000000000000000000000000000000000000000000000000000000000000091e32455673889e96806b56412b16010000000000000000000000000000000000000000040a161e212b35383f4b505f677b8b9f99846e5645321d09000000000000000000000000000000000000000000000008101b222c353c484d59626b757e84999d93826d58432d18000000000010202d36393f4b5c6c8197937e68533a2a1804000000000000000000000011273c51667c919c86715645321e090000000000000000000000000002101b22252e42576c81979b86715c39293434343434342b2821160800000000000000000000000000000010202e3c4957606b77818991969a9c9a9b9c9a9690897f75655d4d4130211000000000000000000000000000000011212e3d4958616c79838a92979a9d9e9e9d9b98928b83796b6055463a291b0b00000000000000000000000000081c2e3f51636c7b7f7e78675f4d3a2917040000000000000000000000000000000000000000000010263b50657b909f9d8774604b35200f0000000000000000000000000000000005192b3c5a6f859aa9947f695443301c07000000000000000000000000000000000000000000000b20354b60758a9f99836e59442e19000000000000000000000000000d1f33475870869b9e8974604b35200b00000000182d42586d82979f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000031628385b70869b98836e58432e1900000000000000000000000000000000000000000c171f2832363c484d555d656f7d8a9e9f8d7a654f382815020000000000000000000000000000000000000000000000010a151d29333b484d5b636e7a828b9f9c91826d57422d18000000000002101b22242e3e4e63798e9b86715947341f0a00000000000000000000000e23394e63788e9f8a76604b36210b0000000000000000000000000010212e373a4345546a7f949e8974574649494949494949403d33261604000000000000000000000000000002101e2c39454b59626c767c81858788898785817b756a61574b3f3023130200000000000000000000000000000003111f2c3a474c5b636e777d82858789898886827d776e635b4b4437291b0b00000000000000000000000000000e23374b5d6c818f95948a7d675846331f0a0000000000000000000000000000000000000000000014293e54697e93a9a5917c66513e2d1a070000000000000000000000000000000b2034485a73889eb29d8773604a35200e00000000000000000000000000000000000000000000081d31445572879d9b86715b3929160300000000000000000000000004182a3a556b8095a78e79634e39240e00000000152b40556a8095ab8d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000192e43596e83989b86705b38281602000000000000000000000000000000000004121c2a3338454b525a626a727b84919e9f95806b5d4b371a0a000000000000000000000000000000000000000000000008141c28323a464c59626d79838f989d93867c6d63523f2a1600000000000000070d1121364a5b73889d8b77614c37220c00000000000000000000000b20354b6074899e8f7a644f3a250f000000000000000000000000081b2e3f4b4f595a5c677c91a78b76615e5e5e5e5e5e5e5e55504433210d000000000000000000000000000000000e1b28323b484d5761676c6f72737372706c6660564b46392e2113050000000000000000000000000000000000010f1c2a333d494e5861676c7072737472706d6862594e4a3d3127190b00000000000000000000000000000010253a50657b8f9faaa99e8a76614c36210c00000000000000000000000000000000000000000002172d42576c8297ab9f9a85705c4a36210c0000000000000000000000000000000d22384d62778da7afa5907b66503c2b1905000000000000000000000000000000000000000000011426375a70859a9e89735746321e0a0000000000000000000000000012283d52677d92a6917c66513c27110000000013283d52687d92a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000001162b41566b80969d88735645321e0900000000000000000000000000000000061422303a474c5660676f787f86909aa29b8c7f6b62503f2e1b00000000000000000000000000000000000000000000071218263038454b58616b77828c999e95887e73665e524535230f000000000000000000071a2d3d5a6f84998f7a65503a25100000000000000000000000081c30435470859a937e69543e29140000000000000000000000000e22374b5d656e6f71727a8fa38e797373737373737373736b62503d281400000000000000000000000000000000000a161e2b3439464b51565a5d5e5e5c5b57514b453833291b100200000000000000000000000000000000000000000c181f2c353a474c52575a5d5e5e5d5b58534c483b362d1d150900000000000000000000000000000000152a40556a7f95aabdb9a8907b65503b261000000000000000000000000000000000000000000005182b3b5b70859a9f8a9f8e79644e3a2a1804000000000000000000000000000011263c51667b91a29aa299836e5a4835200900000000000000000000000000000000000000000000182d42586d8297a78b76614b36210c0000000000000000000000000011263b51667b90a6937e69533e29140000000010253b50657a90a5927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000014293e53697e939f8a76604b36210b00000000000000000000000000000003142432404d58616b757d848c949c9f9990857b6a615044332110000000000000000000000000000000000000000006101b222f36434b56606976808a979f978a7f756860554c403527170600000000000000000000182d42576d8297917c67513c2712000000000000000000000001142636566b809598826d583d2d1a07000000000000000000000010253a4f657b83858687899eb39e89898989898989898988806b55402b16000000000000000000000000000000000000030d18202832363c41454849494745413b3632281e170b0000000000000000000000000000000000000000000000040f1a212a33373d42454849494846433d37342a211a0f02000000000000000000000000000000000014293f54697e94a8b8b5a38f7a644f3a240f0000000000000000000000000000000000000000000b2034485973899e9a849a97826d5947341f090000000000000000000000000000152a40556a7f959a859a9f8c78624d37271502000000000000000000000000000000000000000000152b40556a8095a38e79634e39240e000000000000000000000000000f243a4f64798fa4947f6a543f2a15000000000d23384d62788dab95806b55402b16000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91ab8d78634e38230e000000000000000000000000000000102132424f5e66768089929a9f9c958b837b72655d504333261602000000000000000000000000000000000000050e19202d36404c546067747e89959f998b81776a61574b4437302217090000000000000000000001162c41566b8196917c67523c271200000000000000000000000010263b50657b909d87725b4a36210c0000000000000000000000172d42576c8297989898989ea8a49c989898989898989898846e59442f190400000000000000000000000000000000000000050b161e21272c3032333432302c26211e160a030000000000000000000000000000000000000000000000000000060c171f21272d3032343433312d28221f180d07000000000000000000000000000000000000000d23384d62788a9ea7a39b8573604b35200b0000000000000000000000000000000000000000000d22374d62778ca7927d899e8a77614c3727150200000000000000000000000003172939596e8399927d8a9e95806b5544311d0800000000000000000000000000000000000000000013283d52687d92a6907b66513b26110000000000000000000000000010253b50657a90a5937e69543e2914000000000b20364b60758a9f98826d58432d1800000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3907b65503b26100000000000000000000000000000081b2e3f4f60697c88959e9f978f877f786e6660544b3f332516080000000000000000000000000000000000030d181f2c353e4a4f5e66737d87949e9b8f83796c62594b46393126191204000000000000000000000001162c41566b8196917c67513c27120000000000000000000000000b21364b60758a9f8e79634e39240e000000000000000000000012273d52677d83838383838a9e9c86838383838383838383806b56412b160100000000000000000000000000000000000000000003090c12171a1d1e1e1d1b17110b0903000000000000000000000000000000000000000000000000000000000000040a0c12171b1d1e1f1d1b18130d0b050000000000000000000000000000000000000000000b2035495a667c89908e8578625443301c0800000000000000000000000000000000000000000010263b50657b90a5907c8196947f6a5544311d080000000000000000000000000a1e33465772879d8e7a83989d8874604b36200f00000000000000000000000000000000000000000010253b50657a90a5937e69533e29140000000000000000000000000215273852677c92a7927c67523d271200000000081d31445573889d9a85705b37271502000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba7927d68533d281300000000000000000000000000000e22374b5d697e919ea0988b827a726a625a504a43362e21150700000000000000000000000000000000000b161e2a343c494d5c646f7b86929d9c91857a6e635b4c473b32281d14090000000000000000000000000002172c41576c8196917b66513c2611000000000000000000000000091e3245566f8499947f6a543b2a1804000000000000000000001025394d5f676e6e6e6e70859a96816e6e6e6e6e6e6e6e6e6b62513d291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4c5e66767a7973625a493626140100000000000000000000000000000000000000000014293e54697e93a98d78798c9d8874604b3620100000000000000000000000000c21364c61768b9f8a757b90a5917c67523d2d1a0700000000000000000000000000000000000000000d23384d62788dab96806b56412b16010000000000000000000004101d3145566c8297a68e79644e39240f00000000021527375b70859a9d88725544311d08000000000000000000000000000000000000000000000000000000000000000000000a1e33465774899e95806b55402b160000000000000000000000000005192b3c4f657b8c9f9f9382786d645c554d483c3530251810030000000000000000000000000000000002101b29323b474c5a636e7a84909c9e93877c70655d4e493d342a1e160b01000000000000000000000000000003182d42586d8297907b65503b26100000000000000000000000000216283853687d939b85705947341f0b000000000000000000000a1e30414d52595959596d829899846f595959595959595956514434210e000000000000000000000000000000000000000000070b0e1215171819181615110c0b040000000000000000000000000000000000000000000000000001080b0b0b0b0902000000000000000000000000000000000000000000000000000000000000000000000000000e1e2f404c576165646054493c2b180800000000000000000000000000000000000000000002172d42576c82979f8a756f8499927d67523e2e1b08000000000000000000000010253a50657a8f9c877173879d9a85705b4a36210b00000000000000000000000000000000000000000b20364b60758a9f98836e59432e190008080808080001080b0e181f2e3e4b6074889d9e8873604a35200b0000000000182e43586d83989f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000031729395c71869b98826d58432d18000000000000000000000000000b2034485a70859b9f8d7e6d62594f4b3e38342b201c130800000000000000000000000000000000000010202d39464b59626c78838d9a9f95887e74675f4f4b3f352c1f180d030000000000000000000000000000000004192f44596e84998f7a644f3a250f000000000000000000000000000c21374c61768a9f8b77614c3722110000000000000000000001132330393d434343556a80959c87715443434343434343413d342616040000000000000000000000000000000000000708131c2023272b2c2d2e2d2c2a27221f180e0c0600000000000000000000000000000000000000000009151d202121201d150a0000000000000000000000000000000000000000000000000000000000000000000000000012222f39464b504f4b43362b1e0e0000000000000000000000000000000000000000000005182b3b5b70859b9c8671667b909b85705c4b37220d000000000000000000000014293e54697e9398836d6a7f94a28e79634e3929160300000000000000000000000000000000000000081d31445573889d9b86705b3828161d1d1d1d1d1d1d141d20232a343f4b5c6a7f94a695806b5443301c070000000000162b40556b8095ab8d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000000192f44596e84999a85705b372715010000000000000000000000000d22384d62778da396806b604d483b372e2220190d0700000000000000000000000000000000000000071b2d3e4a57616a77818b989f978a80766960554d41372e211a0f05000000000000000000000000000000000000061b30465b70859b8e79634e39240e000000000000000000000000000a1f3347586f8499947f69543f2e1c080000000000000000000005131e25272e2e3d52687d929f8974604a352e2e2e2e2e2b292116080000000000000000000000000000000000050f1a21253035383c4042434342413f3c37342a2321190e07000000000000000000000000000000000000091927313536363631271a0a00000000000000000000000000000000000000000000000000000000000000000000000004121b2933363b39353026180e00000000000000000000000000000000000000000000000b2034485974899e98836e6073869c8f7a644f3b2b190500000000000000000002152737586d8297947f6961778a9f96816c5746321e0a00000000000000000000000000000000000000021527375b70859a9e88735645323333333333333333263135393a474c5d657a8a9e9e8977614c36251300000000000013283e53687d93a5907a65503b25100000000000000000000000000000000000000000000000000000000000000000000001172c41566c81969d88725544311d0800000000000000000000000010253b50657a909f8a76614c42342b221b100b050000000000000000000000000000000000000000000d22364a5c6475808a979f998c82776b61574b443730221b10060000000000000000000000000000000000000000081d32475d72879c8d78624d38230d0000000000000000000000000004172a3a51677c919c87725d4b37230e0000000000000000000000010a101219253a4f647a8fa98c77624d37221919191916140e0400000000000000000000000000000000000d19202d3636434a4e5255575859585655514c473b38352c221b100300000000000000000000000000000001152737444b4b4b4b4538271502000000000000000000000000000000000000000000000000000000000000000000000000000b171e212524201c14080000000000000000000000000000000000000000000000000d22374d62778ca795806a54687e9398836e594834200a000000000000000000081d31445571869b907b65596e83989e8976614b3621100000000000000000000000000000000000000000182e43586d8398a68b76604b48484848484848484837444b4e5359616b7b899e9f8d7c66594734180800000000000010263b50657b90a5927d68523d2813000000000000000000000000000000000000000000000000000000000000000000000014293f54697e949f8a75604b35200b00000000000000000000000011273c51667c919c877158473320190d08000000000000040a0c0c0a040000000000000000000000000f24394f647a88959e9b8f83796d62594b4639312719120800000000000000000000000000000000000000000000091e34495e73899e8c77614c37220c00000000000000000000000000000c20354b6074889d8f7a65503c2b190500000000000000000000000000000c21364b61768b9f907b66503b26110004040100000000000000000000000000000000000003101d2b343d4a4e546063676a6c6d6e6d6b6a666159564d493c362d1e160b0000000000000000000000000000081d314455606060605645311d090000000000000000000000000000000000000000000000000000000000000000000000000000030a0c100f0b08010000000000000000000000000000000000000000000000000010263b50657b90a5917c67526175899e8b78624d3828160300000000000000000b20364b60758a9f8c776150657b90a4937d68533e2e1b0800000000000000000000000000000000000000162b40556b8095a38d78635d5d5d5d5d5d5d5d5d5d5d556063686e77818d9e9c8b7e685e4c3a2a18000000000000000e23384e63788dab95806a55402b15000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91aa8d78624d38230d0000000000000000000000000f253a4f647a8f9b86715544311d09000000000000000c181f22211f170c0000000000000000000000152b40556a80959d91857b6f635b4d483b33291d1509000000000000000000000000000000000000000000000000081d314455758a9f8b76614b36210c0000000000000000000000000000081d3144556a7f9598836e5a4835200d00000000000000000000000000000a1e32465772879c947f69543a2a180400000000000000000000000000000000000000000110212e3b484d5b636c74787c8081828382817f7c77726b635b4f4a3e32291b0d000000000000000000000000000b20354b6073757674604b3726140100000000000000000000000000000000000000000000000000000000000000000000000000000000000a0a00000000000000000000000000000000000000000000000000000014293e54697e93ab8e79644e576b809695806b5645321e0900000000000000000e24394e63798e9d8873594b5d72879c9b86715c4b37220c0000000000000000000000000000000000000013283e53687d93a5907c7272727272727272727272737475787d838b969c93867b68604e402f1c0c000000000000000b21364b60768a9f97826d58422d1800000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea48f7a65503a25100000000000000000000000000c22374c61778b9e8974604b372615090000000006121c2a33373733291c0c0000000000000000000013283e53687e93877d72655d4e4a3d342b1e170b02000000000000000000000000000000000000000000000000000b20364b60758bab8b76604b36210b0000000000000000000000000000011527374c61778a9f8b78624d3c2b19050000000000000000000000000003162939576d82979a846f5847331f0d00000000000000000000000000000000000000000f1f2e3f4b59626e7981888d9195979898979694918c8781786f645c4b46392a1d0d000000000000000000000000162b40566b808b8b87725544311d0800000000000000000000000000000000000000000000000000000000000000000000000000020b1113201f0b0902000000000000000000000000000000000000000000000002172d42576c82979f8a76604b4d62788b9e8875604b362111000000000000000013283d52687d9299846f593f54697e94a38f7a644f3a2a180400000000000000000000000000000000000010263b50657b90a59e88878888888888888888888888898a8e9298938e867e74655d4e423122120000000000000000091e32455673889d9a85705a37261401000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8927d67523d28120000000000000000000000000b1f34475970859a907b665544312719121010111a21303a474c4c473a291b0b0000000000000000000f253a4f647b7e746760544b3f362d20180d030000000000000000000000000000000000000000000000000000000b21364b60768baa8b76614b36210c000000000000000000000000000000091f3447596c819697816c5a4834200e000000000000000000000000000010263b50657b909f8b77614c3b2a190b030005080000000000000000000000000000061a2c3d4b5d6578838c969d97918d89888788898b8f949b968c847a6c6157473b2b1d0d000000000000000000000013293e53687e939f8a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000006131e26283534201d150a0000000000000000000000000000000000000000000005182b3b5b70859b9d87725645485a6e8399927d68533f2f1c0800000000000001172c41566c819695806b55404c61768a9f98826d5847331f080000000000000000000000000000000000000e23384e63788daba79e9b9b9b9b9b9b9b9b9b9b9b9c9ea8a39a847e79716960554b3f312413040000000000000000021628385b70869b9d87725544311d08000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899e957f6a55402a1500000000000000000000000004182a3b53687d929b8573604b44372f272525272c35414d58616158473929170300000000000000000d22374b5d646960564a43362e211a0f050000000000000000000000000000000000000000000000000000000000091e324556758a9f8b76614c36210c00000000000000000000000000000004182a3b4c62778a9f8b78624d3c2b1906000000000000000000000000000b20354b6074889d95806a594737291e16191b1d12100a01000000000000000000000c2135495b657b88989f9589827b777473727274767a7f858e989a8c81756259483b2b18080000000000000000000011263b51667b90aa8d77624d38220d0000000000000000000000000000000000000000000000000000000000000000000000021324313a3e4a4a3631271a0a0000000000000000000000000000000000000000000b2034485974899e99846f59383c50657a8f9c86715d4b37230e00000000000005192b3c5a70859a917c67513c47586d82989f8a77614c3625130000000000000000000000000000000000000b21364b60768a9f9e89858686868686868686868687898c91978c837d73675f4c463a2b1e0e00000000000000000000192e43586e83989f8a75604b35200b0000000000000000000000000000000000000000000000000000000000020000000004182a3a5c71879c97826d57422d18000000000000000000000000000c20354b6073859b96806b60554c3f3d3b3b3c3d494e5f677776615746331e0a0000000000000000081b2e3f4b4f544b4538302518110700000000000000000000000000000000000000000000000000000000000000031628385e73889e8c77624d37220d000000000000000000000000000000000c203448596c819697816c5a4935201100000000000000000000000000081d314455697e949e8a776255463932292e303328251e13050000000000000000081c2e3f4e63798a9e9f8c7f766c66625a5d5c5d5660656a707983909d968677625948362614010000000000000000000e23394e63788ea38f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000000b1e31424e535f5f4b453827150200000000000000000000000000000000000000000d22374d62778ca796806b5641374b5d71869b907b65503c2c190600000000000b2035485a73899e8d78634d383a4f657a8fa4947f695443301c070000000000000000000000000000000000091e32455673889d9b8570707070707070707070717274777b82899592877d6e6158483c2b1d0d000000000000000001162b41566b8096aa8d77624d38220d0000000000000000000000000000000000000000000000000000040b0c17110f0900001a2f445a6f84999a856f5a36251300000000000000000000000000081d314455647a8a9f968073655d5652505051555b636e7c898775614b36210c00000000000000000010202e373a3f3631271c1308000000000000000000000000000000000000000000000000000000000000000000001c32475c71879c8e79644e39240f0000000000000000000000000000000005182b3b4c6177899e8b78624d402f1909000000000000000000000000011426374b6074879d9a847361574b46394345483d3a31231301000000000000000e23374b5d71859b9f8b7b6a6157514d483c4738454b4f545c646e7c889d9c8677625443301c0b0000000000000000000c21364b61768ba7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000011263a4e60687574605645311d09000000000000000000000000000000000000000010263b50657b90a5927d68533d2e3f52687d9299836e5a4935200b00000000000d22384d62788d9e8974604a35374b5d71869c9d8773604a35200e0000000000000000000000000000000000021628385b70869b9d8873565b5b5b5b5b5b5b5b5b5c5961666d76808a9b928376625a483b2b1909000000000000000013293e53687e93a48f7a654f3a2510000000000000000000000000000000000000000000000000000c181f222c27241d1204172c42576c81979c87725443301c07000000000000000000000000011426374a5c667c8c9e96857b716b676565666a707883919e937e68533e291300000000000000000002101b222529201d150a000000000000000000000000000000000000000000000000000000000000000000000003182d43586d8298917c675136251300000000000000000000000000000000000d1f3447596a7f9499836e5e4c37271502000000000000000000000000091d314556657b8b9f99837568615759595a5d524d41311e0a0000000000000010253a50657a8fa3937e695d4b463938342b322832363a3e4a4e5e6678879d9a8473604b392916030000000000000000091e32465773899e957f6a55402a15000000000000000000000000000000000000000000000000000000000000000000000013283e53687e8c8b74604b36200b000000000000000000000000000000000000000014293e54697e93a48f7a644f3a25364b6075889d8c78634d392917030000000011263c51667c919a85705443302e3f53697e93a5907b66503c2b19050000000000000000000000000000000000192e43586e83989f8a75604b46464646464646463b474c5158616b778598998778625948372614010000000000000011263b51667b90a6927d67523d28120000000000000000000000000000000000000000000000000c1d2a3437413c39302215152a3f546a7f949f8a75604a35200b0000000000000000000000000009192d3e4c5e667b88989b9086817c7a7a7c7f858c989d91806b604e3b26110000000000000000000000080d0f140b09020000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e9396816c5443301c0a0000000000000000000000000000000004182a3a4b6074879d907b655544311d0e000000000000000000000000021527384b5d687e919f99877d76706e6e7072675f4d3a251000000000000000162b41566b80969e8875604b3f33292220191d161e21252d36404c5a62788a9e947f695746321e0a0000000000000000031628395b71869b97826d57422d18000000000000000000000000000000000000000000000000000000000000000000000011263c51667b918e79644f39240f0000000000000000000000000000000000000002172d42576c8297a68c76614c37213245566a809596816c5746331e0800000000152a40556a7f9596816c57362521364c61768a9f99836e5a483520090000000000000000000000000000000001162b41566b8096ab8d78634d38313131313131312a34373a464c59627482989d8777625544311d0c000000000000000e23394e63788ea3947f6a553f2a15000000000000000000000000000000000000000000000004182a3b474c57514c40331d15273c52677c91a98c77624d37220d000000000000000000000000000010202f404c5d6577828c969c9692909091959a9993877c6b625042311f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788b9c8773604a382718100f0b09020000000000000000000000000c1d324556677c919c8674604b3c2c18080000000000000000000000000a1a2e3f4e60687d8a999d928a86848385877d67523d281200000000000000192e43596e839899846f5645321e170d0b050002090b101b222f3c495a687d929e8976614b36210c000000000000000000192e44596e83999a856f5a362614040a0c11141514120e0c060000000000000000000000000000000000000000000000000f243a4f64798f927d68533d28130000000000000000000000000000000000000005182b3b5b70859b9d88735847331f28384c62778b9e8976614b3625130000000417293a596e8399927d68533d281f3346586d82979f8c78624d372715020000000000000000000000000000000013293e53687e93a5907b65503b261b1b1b1b1b1c181f2229333b48566074859b9b8573604b3a2a17040000000000000c21364b61768ba797826d57422d1800000000000000000000000000000000000000000000000b1f344759616c665e50433127253a4f647a8fa48f7a644f3a250f00000000000000000000000000000212222f3f4c59626d7981878c8f9191908e8a847e74675f504433241402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6f8499907b665645362a2524201d150a0000000000000000000000021528384d5f6f8399947f695a4936251300000000000000000000000000112131424e5f6779838e959a9b99989a98836e59432e1900000000000000192f44596e849997826d5839281603000000000000000007121e2c3c4b6074889d927d68523d2813000000000000000001172c41566c81969c87725443301c181f2226292a292723211a0f0a040000000000000000000000000000000000000000000d22374d62778c97816c57372614010000000000000000000000000000000000000b2034485974899e9a856f5a3a29171f3447596d8298937e695443301c0700000a1f33465872879d8e79644f392417293a4f647a8fa395806b5544311d080000000000000000000000000000000011263b51667b90a6927d68533d28130606060600040b0c171f2b3845566277899e947f6a5847331f0a000000000000091e32465773889e9a846f5a36251300000000000000000000000000000000000000000000011426364c6177817c6a614b443729374d62778ca9917c67523c27120000000000000000000000000000000412212f3b484d5b636c72777a7c7c7a79766f6860564d4033261606000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c50657b909c86746054473a3a393632281a0a00000000000000000000000a1a30404d62788a9e8a78635443301c0e00000000000000000000000003132431414d5b636e797f85888a8987827c66513c261100000000000000172d42576c829799846f5745321e0f010000000000000000000e1d3144556c819798826d58432d1803000000000000000014293e54697e939f8a75604b35202a33373b3e3f3f3c38352c211f170c02000000000000000000000000000000000000000b20354b60758a9b85705544311d080000000000000000000000000000000000000d22374d62778ca797816c57422c17182a3b4f64798e9c8773604a35200f00000c21364c61768b9f8a75604b36200b22364a5c71869b9d8874604b36200f000000000000000000000000000000000e23394e63788ea395806b55402b160000000000000000040d1a283848596a80959f8a76614c37210e000000000000031628395b71869b9c87725443301c07000000000000000000000000000000000000000000081c3043546e8396917f6d60554639354a60758a9f947f6a543f2a150000000000000000000000000000000003111d2b343d494e56596264666765636157534b453830221608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384b5d6d82989781726159524f4f4b45382815020000000000000000000000122035485a697f949a8472604a3c2c1906000000000000000000000000061323303d494e5b636a70737474726d665e4c38240f0000000000000012283d52677d929e8975604b3d2c1d150905000000000000000215273754697e939b86715b46311c06000000000000000011273c51667c91a98c77624d37353a474c50535454524e493d3733291d1509000000000000000000000000000000000000081d31445573889e8975604b35201301000000000000000000000000000000000010263b50657b90a5937e69533e29140d22364a5c70859a907b66513d2d1a070010253a50657a8f9c86715645321d091b2e3e53687d93a6917c67523d2d1a070000000000000000000000000000000c21364b61768ba798826d58432d18000000000000000000000a1a2b3b4c61768a9f947f6a553c2b1906000000000000192e43596e83989f8a75604a35200b0000000000000000000000000000000000000000000b20354b607383969e9581736157483b435472879c97816c57422c170200000000000000000000000000000000000d18202c35383b484d4f5152504e4b46393631271a12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2f3f4c6176869c9782776c676564605645321d09000000000000000000000005192b3c4b6073859b937e695a4935200c0000000000000000000000000005131f2c363d4a4e555b5d5f5f5d58514c402f1d09000000000000000c21364c6176899e937e695b493d31271f1813100e0d0c0c0c0d13283d53687d929c87715c47321c0700000000000000000f24394f64798ea48f7a644f434a51586166696a6967635b554c473a3127190d0000000000000000000000000000000000011527375b70859b8f7a654f41301c14080000000000000000000000000000000014293e54697e93a5907b65503b2510071b2d3e51677c919a846f5b4a36210c0014293e54697e9398826d58382815021021364b6176899e9a85705b4a36210b000000000000000000000000000000091e32465773889e9a85705b37271502000000000000000000000d1f3347586f84999d87725a4835200b000000000001162c41566b8196a98c77624d37220d000000000000000000000000000000000000000000081c304354607381939f97847562594a3d5a6f859a99846f5a442f1a00000000000000000000000000000000000000050f1a21232b34373a3c3c3b39363228201d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111f334758627786969889827c7a7974604b36200b0000000000000000000000000e1d31445563798a9e8a78624d38230d0000000000000000000000000000010f1a212d36394045484a4947433c382f221200000000000000000a1f3346586a80959e8a79635b4b4437342a2826232221212123242b3c546a7f949a85705b45301b0600000000000000000c21374c61768ca8927c675254606770777b7e7f7e7c78726a61584b44372b1d100200000000000000000000000000000000162b41566b809698826d5f4d413026180d000000000000000000000000000002182d42576d8297a88c77624d37220d001020354b6074879d8e79634e3a2a1704152738586d8297947e69543f2914000a1e3246576c8197a28e79634e392916030000000000000000000000000000031628395b71869b9d88725544311d080000000000000000000004172a3a54697e94a58d78624d38230d00000000000014293e54697e93a48f7a644f3a250f000000000000000000000000000000000000000000011426364455606c7e8d9e9a8677635b4c576d82979c87715c3a2a18040000000000000000000000000000000000000000060c0e1920222527272524211e160b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a48596275808b9497918f8e836f5a442f1a00000000000000000000000001142637495b697e9397826d57422d1800000000000000000000000000000000060f1a21242a30333534322e26241d120400000000000000000417293a4b6074859b9d87796960554c473b3e3b383736363738393b485a6f849996816c56412c170100000000000000000a1f33475874899e947f6a5a63727c858b90939494918d878076696055483b2d2010010000000000000000000000000000000d22384d62788a9f927d675f4b43362b1d110100000000000000000000000005182b3b5b70859b9e8974594834200b00081d314455697f9497826c5847331f091d31455671869b907a65503b251000031629394e64798ea396816c5746321e0a000000000000000000000000000000192e43596e83989f8a75604b36200b000000000000000000000010263b50657b90a5927d67523d281200000000000011263c51667b91a6927c67523d27120000000000000000000000000000000000000000000008182637444b60697c8a9d9c8879655d556a7f959e89745847331f0a0000000000000000000000000000000000000000000000050b0d0f1112100e0c0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a3b4857616b787f86898b8c89735e49331e0000000000000000000000000009192c3d4a607284897c66503b2611000000000000000000000000000000000000070c0e151b1e1f1f1d18110f0900000000000000000000000c1d314455617685989d8a7e746962595753504e4c4b4c4c4d4f515362788b9f8f7a644f3a240f00000000000000000004172a3a5c71879c97826c647885919a9894919193969d9d95897f7462594a3e2d1f0f0000000000000000000000000000000b2034485a687e929f8c7d6b6054483b2f1c140800000000000000000000000b2034485974899e9b85705b3b2b180500011426374c61768a9f8a76614c37271520364b60758a9f8c76614c37210c00000b21364a5c70859b9e8976614b362110000000000000000000000000000001162c41566b8196ab8d78624d38230d00000000000000000000000f24394e64798ea3947f6a543f2a150000000000000f24394e64798ea3947f6a543f2a15000000000000000000000000000000000000000000000009192631424f5e667a889b9d8a7b6860677d92a88c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2a39464b5a626a7074767777624c37220d00000000000000000000000000000e1c304354627777665e4c38230f0000000000000000000000000000000000000000000006080a0a08030000000000000000000000000000021527374758617582909c93877e77716c68656362616161626466696d829899846f5c4a36220d000000000000000000001a2f445a6f849999846f7b899b9389837e7c7c7e81878f9a9e948577645c4a3d2d1d0d000000000000000000000000000005192b3c4e60697f8d9f8d807262594c403026180a000000000000000000000d22374d62778ca797826d58422d18000000091f3347586c8197947f6a5544311d24394e64798e9d88725847331f0a0000071a2d3d52687d92a7937e68533e2e1b08000000000000000000000000000014293e54697e93a5907a65503b251000000000000000000000000d23384d62788da296816b56412c160000000000000c21364c61768ba797826c57422d1702000000000000000000000000000000000000000000000009141d32404c5c647885999e8c7e6a657a8fa48e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000002090b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b29323c494d545b566062625947341f0b00000000000000000000000000000013253648596262594c402f1c09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919293a4757606d7c869097948b86817d7b787776767678797b7e81979f8b7a644e3e2d1b0700000000000000000002172c42576c81979c8678899a887d756e696767696c727a84929f9b887a645b4a3c2b190900000000000000000000000000000d1d31424f61697d8a9c958477665e4b4336281a0a00000000000000000010263b50657b90a5947f69543f2a140000000417293a4e63798c9d8774604b3520283d52687d9299846e593a2a17040000000f21364b6075899e9b86715c4b37220c000000000000000000000000000011263c51667b91a6927d68523d281300000000000000000000000f243a4f64798fa496816b56412c160000000000000a1f33465874899e99846f5a442f1a000000000000000000000000000000000000000000000000000114222f3e4a59627583979f92806d778da9917c66513c2711000000000000000000000000000000000000000000000000000000000000000000040a161e211e160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2b35383f38454b4c4c473b2a180500000000000000000000000000000008182b3b484c4c483b2f221200000000000000000000000000000000000000050b0d120b0903000000050b0d120b09030000000000000000000c1c2939454b5e66737b828990949793908d8c8b8b8c8d8e9093979f937e695c4a3620100000000000000000000000152a3f546a7f949f8b869a847668605654525153565c64707d8b9e9d8979635a48372614010000000000000000000000000000132332434f5f677986979a887c6b60544538281a0a000000000000000014293e54697e93a6917b66513c2611000000000c2135495b6f849a917c67513e2d2c41566c819695806a55402b1500000000091e3245566c8196a38f7a644f3a2a1804000000000000000000000000000f24394e64798ea395806a55402b15000000000000000000000316283951677c91a6947f69543f2a140000000000000417293a5c71869b9c87725c3b2a1804000000000000000000000000000000000000000000000000000412202d3b4857617381939f958274899f947e69543f291400000000000000000000000000000000000000000000000000000000000000020c171f28323632281a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e1920232a2832363737342a1d0d00000000000000000000000000000000000d1d2b343737342b1d12040000000000000000000000000000000000000d18202227211e160a000d18202227211e160a0000000000000000000c1b2832404c5460656d757b7f8286898a8b8c8c8b8987869ca498836e614f3e2d1b02000000000000000000000012273c52677c91a99f9a847461584b45383c3c3e3e4b4f5f687a889e9d8878625544311d0e000000000000000000000000000005142532414d5b637581929e8d80726056453827150200000000000002182d42576d8297a98d78634d38230e00000000061a2c3d51667b909a85705c4a362b3c5a70859a917c66513c271100000000031628384e63798ea298826d5847331f08000000000000000000000000000c21364c61768ba797826d58422d1800010101010102000609151e3246576c8197ab927c67523d271200000000000000192f44596e84999f89745947341f0b000000000000000000000000000000000000000000000000000002101d2b394655606c7e8d9f9785869c96816c56412c170100000000000000000000000000000000000000000000000000000000000a151d293338454b453828160200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d15161e2122221f180d000000000000000000000000000000000000000d1820222220180d000000000000000000000000000000000000000d1d2b34373d3632281a0d1d2b34373d3632281a0a0000000000000000000a161e2f36434a505560656a6d71747576767776747281969c8675614b423220100000000000000000000000000f253a4f647a8fa49e89776156463a32282727292e37414e5c647a8a9e9a8473604b3c2c19060000000000000000000000000000071423303d4a57606d7d8b9e958374605645311d1200000000000005182b3b5b70859b9f8a75604b35200b00000000000f20354a6073879c8e7a644f3b35495a74899e8d78624d38230d00000000000a2136495b70859a9f8a77614c362513000000000000000000000000000a1f33465874899e9a85705a372614171717171717181919202731414b6175889d9f8b77624c37220d00000000000001172c41566c8196a98c77614c37220c000000000000000000000000000000000000000000000000000000000d1b2937444b61697c8a9d9a9ca499846e59442f190000000000000000000000000000000000000000000000000000000008131c27313a464c56605645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0d0d0b05000000000000000000000000000000000000000000050b0d0d0b050000000000000000000000000000000000000005182b3b484d524b453828182b3b484d524b453828160300000000000000000003121825303537444b5054585c5f566061626063798b9f8c79635746322414020000000000000000000000000d22374d62778ca9947e69594738291e161212141b22313e4b5c667c8d9f95806a5b4935211000000000000000000000000000000005131f2d39454b5f687a899e998374604b40301a0a00000000000b2034485974899e9c86715544311d080000000000071c304354697e9398826d5948384d62788d9e89745a4935200b0000000000061a2c3d52677d92a7947f695443301c070000000000000000000000000417293a5c71869b9d87725544312c2c2c2c2c2c2c2d2e2c3537444b5f6a8095a69b85705948341f0b0000000000000014293f54697e94a48f79644f3a240f00000000000000000000000000000000000000000000000000000000000b192631424f5e667a889ca4b19b86715c3929170300000000000000000000000000000000000000000000000000061118253038454b58616b75604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20344859626760564532203448596267605645321e09000000000000000000000008131c202731363b3f434638454b4c4c556a7f9596806b5b4a39291606000000000000000000000000000b20354a60758a9f937e69543b2a1a0c020000000813202e3e4c5e6c81969f8b78634d3f2e1b08000000000000000000000000000000010f1b2832414e5c6479899e97816d5f4d38271502000000000d22374d62778ca798836e58372614010000000000001325364b6176899e8b77624c3851667c919a85705a3c2b19060000000000000f20364b6075889e9d8773604a35200e00000000000000000000000000192f44596e84999f8a75604b414141414141414142433c494d55606a7d8d9fa1907c66513b2a18050000000000000011273c51667c91a6917c67513c271200000000000000000000000000000000000000000000000000000000000009141d32404c5c64788699a19e89735746331e0a0000000000000000000000000000000000000000000000050f1a212e36434a5660697680846f5a452f1a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1313120b090200000000000000000000000000000002090b1213130b08010000000000000000000000000000050b0d1b16140e0400000000000000000000000000000d22374d62777c74604b3622374d62777c74604b36210b00000000000000000000000000070b151d20262a2d312832363742586d82978d78624d3d2d1b0b0000000000000000000000000000071c30435472879c96816c56412c170000000000000210202f404b6075879d99836e5d4b37220e00000000000000000000000000000000000a161e313e4a5b657b8c9f917c675645311d090000000010263b50657b90a595806a55402b1500000000000000081e3246576b819695806a5645556a809596816c56412c1700000000000000091d3245566b8096a5907b66503c2b1905000000000000000000000001172c41566c8196aa8d776256565656565656565657595a5a636a74808c9fa399836f5e4c381d0d00000000000000000f24394f64798ea4947f69543f2a1400000000000000000000000000000000000000000000000000000000000000011422303e4a5a62758394968b76614b36210c000000000000000000000000000000000000000000030d181f2c353f4b546067747e899688735e48331e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f21292928201d150a000000000000000000000000000a151d20272928201d15090000000000000000000000000e192022312c2921160800000000000000000000000000172d42576c81927f6a55402d42576c81927f6a55402a1500000000000000000000000000000003121d242b35383d3f414042576c82978a75604b35200f000000000000000000000000000000001325365a6f859a99836e59442e190000000000000002111e324556677d92a18f7a654f3c2c190600000000000000000000000000000000000313202d3d4b5d6b80959d8774604b36200c0000000014293e54697e93a7917c67523c271200000000000000031629394d62788c9e8875604b596e8499927d68523d281300000000000000021528384d63788c9f99836e5a4835200a00000000000000000000000014293f54697e94a58f7b6c6c6c6c6c6c6c6c6c6c6d6e7073787f87959fa0988575614b402f1d0000000000000000000c21374c61778c9292816c57412c1702000000000000000000000000000000000000000000000000000000000000000412202d3c485761737f818177614c37220c00000000000000000000000000000000000000010b161e2a343d494e5d65727d87949e9c88735e49341e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2933363e3e3d3632281a0a00000000000000000000000a1a2731363c3e3e3531271909000000000000000000000e1e2b353846413d34261604000000000000000000000000192e44596e839985705b3b2b44596e839985705b3b2b1805000000000000000000000000000b161e30393c484d525456555354697e938b76614c36210e00000000000000000000000000000000182d42586d82979b86715c3929170300000000000000031628384a6073869c99836e5b4935210c00000000000000000000000000000000000002101f2f3f4b6075879d937e68533a2a1804000002182d42576d8297ab8e79634e39240e00000000000000000b2035485a6e8399927d68525872889d8e79644e39240f00000000000000000a2035495a6f849a9f8c78624d38271502000000000000000000000011273c51667c91a6998381818181818181818181828385898d949da39b9082766157463322120000000000000000000a1f334758677d7d7d7b654f3a251000000000000000000000000000000000000000000000000000000000000000000002101d2b394655606a6c6c615947341f0b00000000000000000000000000000000000009141d28323b474c5b636e7b85919d9d93867b654f3a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a464c5353524b453828150200000000000000000002152738454b5253534b4437271501000000000000000005192b3c484d5b56514434210e000000000000000000000000182d42576d8297897359483442576d82978973594834200b0000000000000000000000000b1b2832404d515a62676a6b6a686463788c8f7a65503c2c1906000000000000000000000000000000152a40556a7f959e89735746331e0a00000000000000000a1c304354687d929f8c78634d3823100000000000000000000000000000000000000001111e3245576a7f949b85705847331f0a000005182b3b5b70859b9f8a76604b36210b000000000000000006192b3c50657a8f9b86715d61768c9f8a75604b36200b000000000000000006192c3c51677c91a695806b5645311d0900000000000000000000000f24394f64798ea4a1999696969696969696969697989a9e9f9b968e867c6e6158463929170400000000000000000004172a3a4d5f676767655d4b37230e00000000000000000000000000000000000000000000000000000000000000000000000d1b2937444b5557574c473b2a180400000000000000000000000000000000071219263139464b59626c79838f9b9e94887d73655d4b37230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465861686867605645321d10000000000000000000091d31455660676868605544311d080000000002090b0b0b2035485a62706b62513d291403090b090300000000000000162b41566b80968c77624d3741566b80968c77624d37220d000000000000000000000009192839464b5e6671787d7f80807e79756f8497826d5b4935211200000000000000000000000000000013283d52687d92a78b76614c36210c0000000000000000001325364b6075899e95806b553e2d1b0700000000000000000000000000000000000000031628394d62788d9f8b77614c37220c00000b2034485974899e9c87725645321e090000000000000000000e23374b5d71869b8f7a65657a909b86715645311d090000000000000000000e20364b6074889d9e8875604b36200f00000000000000000000000c21374c61778c9292929292929292929292929291918f8d8a86817971665e4c463a291b0b00000000000000000000000c1c30414d5252524f4b3f2e1c080000000000000000000000000000000000000000000000000000000000000000000000000b192631353f414137342a1d0c00000000000000000000000000000005101b222f37444b57616a77818c999f96897f756860554b3f2e1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61767e7e7d74604b3e2d1b0700000000000000071a2d3d4b60747c7e7e73604b35200b0000000a161e21201c22384d627885806b56412c16161e211e160a000000000000152a3f556a7f94907b65503b3f556a7f94907b65503b261000000000000000000000011426374657616e7c868d92949695938e88807b8b8b78634d41301d0d000000000000000000000000000010253b50657a90a38e79634e39240e000000000000000000081e3245566c81979d87725c4a36220d00000000000001080b08010000000000000000000a2035495a73889d917b66513c261100000d22374d62778ca799846f5938281602000000000000000000081c2e3f52687d9298836e697e9497826d5838271502000000000000000000081d3144556b8095a6917c67523d2d1a07000000000000000000000a1f334758677d7d7d7d7d7d7d7d7d7d7d7d7d7c7c7c7a7875716b645c514c4033291b0b00000000000000000000000000132330393d3d3d3a372e2111000000000000000000000000000000000000000000000000000000000000000000000000000009141d202a2c2c221f180c0000000000000000000000000000040e19202d36404c556068757f8a979f988b81776a60574b44372e211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33465870859392816d5c4a362212000000000000000821364a5b6c819193826d5544311d0800000a1a283236353025364b61768b86715c39291a28323632281a12040000000013293e53687e93947e69543f3e53687e93947e69543f291400000000000000000000081d314455617582919b988f89868587899095898798836e5f4d3b2a1805000000000000000000000000000d23384d62788dab917b66513c26110000000000000000000316283850657b90a58f79644f3a240f000000000008141c201c1408020000000000000006192c3c5b71869b937d68533e2813000010263b50657b90a596806b56412b1600000000000000000000001120364b6075889e8b786d8298937e69543e291400000000000000000000021527374d62788c9f9a85705b4a36210b0000000000000000000004172a3a4d5f6767676767676767676767676767676665636055564e4a3e382f1f170b000000000000000000000000000005131e2527282825231c110300000000000000000000000000000000000000000000000000000000000000000000000000000001080b1517170c0b0400000000000000000000000000020c171f2b353e4a4f5e66737d88959e9a8d82786c61584b4539312619110300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4f647a8d9f8d7a644e402f1909000000000008182f404e63798c9f8a78624d372715010002162838454b4a4336324657738989735746322f38454b45382f22120000000012273c52677c9197826d57423c52677c9197826d57422d1800000000000000000005182a3b4b607384989f92837a74706f71747b838d9da0917c675947341f12000000000000000000000000000b20364b60758a9f937e69533e2914000000000000000000000b20364b6075899e947f6a55372614010000010f1826303530261d1509000000000000011426365a6f8499947f6a553f2a15000014293f54697e94a7927d68523d28130000000000000000000000091d3245566b8095968071869c8f7a65503a25100000000000000000000000092035485a6f8499a28e79634e39291603000000000000000000000c1c30414d52525252525252525252525252525251504e4b443739362d241d120400000000000000000000000000000000010a10121212100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d29333c484d5c646f7c86939d9b90847a6d625a4c473a32281d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22364a5c6e83989a846f5e4c37261401000000011426364c5e6f849a95806b5a483519090000091e3245566060544a3e395b71868b76614b36404c5660564c402f1d090000000f253a4f647a8f9a856f5a363a4f647a8f9a856f5a3626140100000000000000000b1f3447596a80959f8c7d6e6460545a5460656e7b879c9e8877624c402f1909000000000000000000000000081d31445573889d96816b563d2d1a07000000000000000000081d3144556f84999a846f5544311d0800000f1f2c36434b43363127190e0400000000081c30435470859b957f6a55402a150002182d42576d8297a48f7a644f3a250f0000000000000000000000021528384c62778b9e89768a9f8b76614c36210c000000000000000000000006192b3c51667c91a696816c5746321e0a0000000000000000000000132330393d3d3d3d3d3d3d3d3d3d3d3d3d3d3c3c3a3836312724211a0f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c27313a464c5a626d7a84909c9d92857b6f645c4d493c332a1e160a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4d62788b9f907b665544311d0b000000081c304354667b909e8876614c3c2b190000000b21364b607574645c4c47596e838e78634e454b5e6576665e4c38240f0000000d22374c62778c9d87725443374c62778c9d87725443301c0800000000000000000d22374c62778a9f947f695f4f4a4336434b505d6577879c98836e5e4c372715020000000000000000000000021527375b70859a9b85705b4a36210b00000000000000000002152737556a7f959e8975604b35200b00061a2c3d495460544b44372c1f170c0b070b1420354b6074889e937e68533e29130005182b3b5b70859ba68b76614c36210c0000000000000000000000000a203448596d82989580959d87725846331f0a0000000000000000000000000e20354b6074879d9e8976614b362110000000000000000000000005131e25272828282828282828282828282727272523201d150f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818253038454b58616b78828d9a9e93877d72655d4f4a3e352b1f180c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102035495a6b81969c8673604b3928160300031628394b6073869c937e695746331e0e000000152a40556a7f857a6c6158566c81907b665156606c7b887c66513c26110000000b1f34475974899f8a75604b35475974899f8a75604b35200b0000000000000001152737556a7f959d8774604b4135302630353f4b596278899e907b665544311d08000000000000000000000000182e43586d8398a38e79634e3929170300000000000000000011263c51667b91a88d78624d38230d000c2135495b63746c6055493c332921201c202630424f657a8fa6907a65503b2510000b2034485974899e9d88735846331f0a00000000000000000000000005182b3b4f647a8f9e899e99836e593a291704000000000000000000000000081d3144556a7f95a8937e68533f2e1b080000000000000000000000010a1012121212121212121212121212121211100e0b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a56606976808b989f95897e746760544c3f362d20190e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4c6176899e927d685746321e0d00091e324557687d929c8674604b39291700000000172c41566c818f8c81766860697e937e685c6475818d92826d58422d1803000005182a3b5c71879c8c77624d373b5c71879c8c77624d37220d00000000000000081d31445570859b947f6a554431201c141c202e3b485a687d929d8774604b36200e000000000000000000000001162b40566b8095ab97816c5746331e0c0000000000000000000e23394e63788ea3907b66513b2611000e23384e6379898174635a4c463a3735303536434b606f84999e8974604b35200b000d22374d62778ca79a856f5a3a291704000000000000000000000000000d22364a5c70859b9ea7957f6a55402a1500000000000000000000000000011426374d62778b9f9b86715d4b37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546067747e89969f978a80766960564a43362f221b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f334758697e949d8875614b3b2a1805182a3b4b6075889d917c665544311b0b0000000014293e51626c7b8693897e73667c91806b6a7a86968a7d6d63523f2a16010000001a2f44596f84998f7a654f3a44596f84998f7a654f3a2510000000000000000b20354b60758a9f8f7a6550372614070108111d2b3c4e6071869c927d68523c2b1905000000000000000000000013283e53687d93a89e8976614b3a29170400000000000000000b21364b60768ba9937e69543e291400182d43586d82989685786a6158514c4a434a4d54606a7e93a196816b5544311d080010263b50657b90a597816c57422c170000000000000000000000000000071b2d3e52677c91a5a6917b66513c2611000000000000000000000000000009203448596e8399a38f7a644f3a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60727d87949d958b82776b61584b45383025181107000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b6074879d957f6a5948341f0f1f3447596a7f959a85705e4c37271500000000000e223444515d65737e8993857a798d8275808c9384786860524535230f00000002172c41576c8196927c67523d41576c8196927c67523d2712000000000000000d22374c62778caa8c77624d37220d000000000e1e314253687d939b85705a4835200b000000000000000000000011263b50667b90a5a8947f6a5846331f0e0000000000000000091e32455674899f957f6a55402a15000d22374d627785979b8a80766c66616054606368737f8d9f9e8976614c372715010014293f54697e94a7937e69533e29140000000000000000000000000000001020354b6074879da48d77624d38220d000000000000000000000000000005182b3b50667b90a498826d5847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f9d9d8880786d62594c463a31271c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d314556677c919e8a77624c3d2c1a2c3d4c62778a9e8d7a644f403019090000000000051626343f4b55606977828c8d81878286958a7e72625a4e42352717060000000014293f54697e94947f6a553f3f54697e94947f6a553f2a15000000000000000e23394e63788ea08b76614b36210c00000000001321374c61768b9f8d78624d38220d00000000000000000000000e23394e63788ea3a39b8976614c3c2c180800000000000000021628385e73889e96806b56412b16000b203448596274828f9c9589827c77757375787e86959f9e8b7b6558473319090000182d42576d8292928f7b654f3a2510000000000000000000000000000000081d314455687e909286725a4835200b0000000000000000000000000000000d20354b60738691928a77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d627787929c9c867f776c625a4e493d362d231c11090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384d5f70859b97816c5b49352135495b6c819798826e5c4a362212000000000000000816212e37444b58616d7a838d8a8b998379696054483c31231709000000000011263c51667b9197826c57423c51667b9197826c57422d17000000000000000d22384d62778da18c77624c37220d00000000000a1f33475871869b927c67523d271200000000000000000000000b21364b60768ba79b8695806b5a4936251300000000000000031628395e73889e96816c57412c170005182b3b4856606d7b86939c97918c8a898a8d939c9f98897c665d4b3a291700000010253b50657b7d7d7b665d4b37230e000000000000000000000000000000011527374e60687b7c77624d3c2b1905000000000000000000000000000000081c30435461767c7d7d77624d38220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485962747d87929c958a81786d635b4f4a3e372e241d1208010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a30414f647a8f9f8c79634e3f2e3f4e63798b9f8b78624d3e2e1b04000000000000000003101a27313f4b57616d7a838b9a857d73655d4d483c32281a1204000000000e24394e63798e9a846f5a45394e63798e9a846f5a452f1a000000000000000b20364b60758ba58e79634e39240e00000000000417293a586d829895806b56402b160100000000000000000000091e32455773889e937e898a78635443301c10000000000000091e32455774899f95806b56402b1600000d1d2b38454b5d65747e868e94999c9e9e9c99948b8378665e4c3f2e1c0c0000000e23374b5d656767665e4c3f2e1c0800000000000000000000000000000000091931424e5d6567625948341e0e0000000000000000000000000000000001142636465861676767625a4835200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b48566068747d86919b978b82796e645c504b3f382f201c14080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001222374b5d6e839899836e5d4b364b5d6e839996806b5a483520100000000000000000000f1f2d38454b5d6575828f9283888692867b6e625a4b45382f2212000000000c21364b61768b9286725c47364b61768b9286725c47321d00000000000000091d32455672889d927d6752392816030000000000162c41566b819697826d57422d180200000000000000000000031628395b71869b947f7f948472604a3e2e1d0d00000000000b21364b60768ba9947f6a543f2a150000000d1a28323f4b55606871797f8487888887847f786e625a4c402f211100000000081c2f3f4b505252504c402f21110000000000000000000000000000000000001424313f4b50524d483b2b180000000000000000000000000000000000000818293a464c5152524d483c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b38454b556067737c86909b988c837a6f655d514c403530261d150903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4d63788b9f8f7b65544354657b8f9e8976614c3c2b19020000000000000000071a2d3d4a56606b7b87978a7d7f8f7b818c9083786a60564c402f1c090000000a1e334657677d7d7d67513c334657677d7d7d67513c27120000000000000002152838586d829797826c5745321e0c0000000001162b40566b809598836d58432e18030000000000000000000000192e44596e839996817486937e685c4a3b2a1d0e000000000f24394f64798ea4927d68523d2813000000000a161e2e37444b535c646a6e727373726f69635b4d493c2f221203000000000011212f373b3d3d3b382f2211030000000000000000000000000000000000000614212f373b3d37342b1d0d000000000000000000000000000000000000000c1c2933363c3d3d38352b1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1a273137444b546066717b858f9a998e847b70665e524b433631271e160a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102035495a6c81969b8572604a6072859b937e695846331e0e0000000000000000000c21364a5b6374808c9485786a7f927d6c7985928a7f74665e4c38240f000000031729394d5f6767675f4d3929394d5f6767675f4d392410000000000000000012273c51677c919e8975604b3b2a190a00000004172a3a576c829797826c57422d170b0802000000000000000001162c41566b819698836e7a8c8b7a6459483b2b1e13070005192b3c53687d92aa8e79644f39240f00000000000211192731353e4a4e55595c5e5e5c5a544e493d352b1e120400000000000003111c2325282826231c1103000000000000000000000000000000000000000003111c2325272220180d0000000000000000000000000000000000000000000c171f212728282220190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d263136434a515e66707b848f999a8f857b716760544b443732281f170b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4c6176899e927d6756677d929c8774604b3a2917000000000000000000000e24394e637985958b7f7363677c92806a63707d8894877c66513b2611000000000b1b30414d5252514d41301b30414d5252514d41301d0a00000000000000000b20364b6074879d937e68594737281a110f0f131f33475870859b947e69543f2f2c201d1509000000000000000014293e54697e939a85706a809588776259483c30211a15172035485a6f84999f8a75604b36200b0000000000000009151d202d36393f4447494947443f38352c20190e00000000000000000000080e101212110f09000000000000000000000000000000000000000000000000080e10120d0b050000000000000000000000000000000000000000000000040a0c1212120d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000209141d253035404c505d656f7a838e989a90867c736860554b453833291f180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f334758697f949d87746074879d917c675544311c0c0000000000000000000014293e53697e93867a6a6055647a8f826d585f6775808a87725c47321d0700000000132330393c3d3c393023132330393c3d3c39302312010000000000000000081d314455697e939e8877615545382e26242425303f4c61768b9f8f7a644f46444136312719090000000000000011273c51667c919c8772607283998677625a4d41362d2b2933424d62788b9f99846f5645321d09000000000000000001080f1a21242a2f323333322f2a23211a0e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108131c202f383f4b505c646f79838c989b91877d746960564c463a342a1c14070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4b6074879d947f697f949b85705f4d37271500000000000000000000000b20354a60727e74645c4b4c62778c85705a4d57616b787c66513b2611000000000005131e25272827241d1205131e25272827241d1205000000000000000000021527374b6074859b99837360564b3f3b393936434a5d6b80959d8873605d5b5a564b44372715020000000000000f24394e64798e9e8974576176869c8678675f4e4a3e403a464c606d8298a5927d6752382815020000000000000000000000070d0f15191d1e1e1d1a140e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007121c232e373e4b4f5c646e79828b979c92877e756a61584c473a32251400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d324556677d929d8876889e8f7a644f413019090000000000000000000000071c304354606960564a3e4a60758988725544464b5b63665e4c38240f000000000000010a10121212100a0100010a10121212100a010000000000000000000000091d32455663798a9e998374655d54514e4e505460687b8b9f9580757472716f6c605544311d080000000000000c21374c61768ca88b7661586277869c897d6e645c57555658616c7e93a09c8774604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009111c232e373d4a4e5b636d78818a969d93887f766b61594f43321c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384a6072859b99849998836e5c4b37231200000000000000000000000000132536434a534b453830435472878a75604b353d494e514c402f1c0900000000000000000000000000000000000000000000000000000000000000000000000002152838495b657c8a9d99867b716a666464656a737e8b9faa9e958b898886848174604b36200b0000000000000a1f33475874899e8d78634e5962778698918379716c6a6c6f76818d9f9d907c665645311d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b222d363d494e5a626c77818a959e9489807769614f3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c304354657a8fa1999f8b78634d3e2e1b040000000000000000000000000008182530353e36322825365a6f848d78624d382c35383b382f221200000000000000000000000000000000000000000000000000000000000000000000000000000a1a2c3d4c5d657a88969c8f867f7b79797b7f86929f999595959595959595907b66513b261100000000000004172a3a5c71869c8f7a6550485962758292998e86828081848a969f9f947f6a5e4c38271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a212c353c494d59626c778089959e958a7f695847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364b5d6e8399a796816c5a4935201000000000000000000000000000000008131c2029211e162d42576c818f7a65503a25212326241c12040000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2f3f4c5c6476818b969c94908e8e90959c9890848080808080808080807a644f39240f000000000000001a2f44596f8499917c67513b4857616d7d87939a979596999f9e988b7f6a6150402f1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a212b353b484d59616b767f88949d8c77614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182e3f4e63798c928976614c3c2c19020000000000000000000000000000000000070b140b090d22384d62787a76614c37210c0e110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000111212f3e4a58616c7981878c909192908e8a837b6f6b6b6b6b6b6b6b6b6b645c4a36220d00000000000001162b41566b80888678624d3839464b5f67747e858b8f91918e8982796a615043332212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e19202b343a474c58616a757f888f79644f3a240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112135495b657b7d7a645847331e0e00000000000000000000000000000000000000000000000b2035485a6265615847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311202d3a464c5b636c72777a7c7c7b79756e655d5555555555555555554f4a3e2d1b070000000000000014293d51626b7371625a48342932414d56606870777a7c7b79766d635b4f43332515040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060d18202a343a464c576169757e7b654f3a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4c5d6567645c4b3a2a1700000000000000000000000000000000000000000000000005192b3c484d4f4c473a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101c29333d494e56596265676766636055504b3f404040404040404039362d201000000000000000000e21344451565e5c4d483c2b191e3038454b5359616467666461574e4a3d322515070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050c181f293339464b566069655d4b37220e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f2f3f4c50524f4b3e2e1c0c000000000000000000000000000000000000000000000000000e1e2b35383a37332a1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f2c35383b484d505252514e4b4437372e2b2b2b2b2b2b2b2b24221b10020000000000000000041626343d41494738342b1d0d131a2832363a474c4f51514f4b4639362d1f15070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c171f293238454b534f4b3f2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f383b3d3a372e20100000000000000000000000000000000000000000000000000000000e19202225211f170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a21232b34373b3c3d3b39353127231c16161616161616160f0d070000000000000000000000081621292b34312220190d00000a151d202a34373a3c3c39363228211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b161e2832363e3a372e211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23262825221b100200000000000000000000000000000000000000000000000000000000050b0d100c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1920222527272624201d1509080000000000000000000000000000000000000000000000040e14161e1c0d0b050000000002090c181f2225272624211e160b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a161e212925221b10030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e10120f0d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d101212110e0b08010000000000000000000000000000000000000000000000000000000001090700000000000000000000040a0c0f12110f0c09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b14100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-LightItalic SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: -8958199728935286697} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: 4e4fd698e0090124ea15a7ae5a30b84a + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Light Italic + m_PointSize: 74 + m_Scale: 1 + m_LineHeight: 88.8 + m_AscentLine: 73.038 + m_CapLine: 53 + m_MeanLine: 37 + m_Baseline: 0 + m_DescentLine: -15.762 + m_SuperscriptOffset: 73.038 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -15.762 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -18.87 + m_UnderlineThickness: 2.183 + m_StrikethroughOffset: 14.8 + m_StrikethroughThickness: 2.183 + m_TabWidth: 19 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 18.640625 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 43.0625 + m_Height: 52.359375 + m_HorizontalBearingX: -1.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 45.03125 + m_GlyphRect: + m_X: 211 + m_Y: 200 + m_Width: 44 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 35 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 43.515625 + m_GlyphRect: + m_X: 309 + m_Y: 430 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 42.078125 + m_Height: 53.546875 + m_HorizontalBearingX: 4.359375 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 46.546875 + m_GlyphRect: + m_X: 138 + m_Y: 87 + m_Width: 43 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 44.171875 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 52.28125 + m_GlyphRect: + m_X: 201 + m_Y: 136 + m_Width: 45 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 35.359375 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 39.890625 + m_GlyphRect: + m_X: 312 + m_Y: 263 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 35.359375 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 39.140625 + m_GlyphRect: + m_X: 317 + m_Y: 198 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 43.546875 + m_Height: 53.546875 + m_HorizontalBearingX: 4.40625 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 50.578125 + m_GlyphRect: + m_X: 96 + m_Y: 324 + m_Width: 44 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 43.734375 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 51.90625 + m_GlyphRect: + m_X: 237 + m_Y: 71 + m_Width: 45 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 10.09375 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 18.3125 + m_GlyphRect: + m_X: 486 + m_Y: 215 + m_Width: 11 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 27.15625 + m_Height: 52.953125 + m_HorizontalBearingX: -1.375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 28.890625 + m_GlyphRect: + m_X: 194 + m_Y: 310 + m_Width: 28 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 40.8125 + m_Height: 52.421875 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.421875 + m_HorizontalAdvance: 43.65625 + m_GlyphRect: + m_X: 299 + m_Y: 6 + m_Width: 42 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 26.8125 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 34.515625 + m_GlyphRect: + m_X: 356 + m_Y: 427 + m_Width: 28 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 54.203125 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 62.375 + m_GlyphRect: + m_X: 252 + m_Y: 366 + m_Width: 55 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 43.734375 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 51.90625 + m_GlyphRect: + m_X: 243 + m_Y: 6 + m_Width: 45 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 46.6875 + m_Height: 53.515625 + m_HorizontalBearingX: 4.40625 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 54.5 + m_GlyphRect: + m_X: 130 + m_Y: 6 + m_Width: 48 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 34.375 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 39.890625 + m_GlyphRect: + m_X: 397 + m_Y: 70 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 46.6875 + m_Height: 64.5 + m_HorizontalBearingX: 4.40625 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 54.5 + m_GlyphRect: + m_X: 37 + m_Y: 326 + m_Width: 48 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 33.921875 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 41.734375 + m_GlyphRect: + m_X: 400 + m_Y: 6 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 33.484375 + m_Height: 53.546875 + m_HorizontalBearingX: 1.21875 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 36.859375 + m_GlyphRect: + m_X: 143 + m_Y: 389 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 37.84375 + m_Height: 52.359375 + m_HorizontalBearingX: 4.21875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 39.40625 + m_GlyphRect: + m_X: 347 + m_Y: 70 + m_Width: 39 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 41.140625 + m_Height: 52.984375 + m_HorizontalBearingX: 5.921875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 50.0625 + m_GlyphRect: + m_X: 189 + m_Y: 6 + m_Width: 43 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 43.03125 + m_Height: 52.359375 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 44.84375 + m_GlyphRect: + m_X: 257 + m_Y: 135 + m_Width: 44 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 66.15625 + m_Height: 52.359375 + m_HorizontalBearingX: 5.25 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 69.40625 + m_GlyphRect: + m_X: 231 + m_Y: 440 + m_Width: 67 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 45.65625 + m_Height: 52.359375 + m_HorizontalBearingX: -1.8125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 43.140625 + m_GlyphRect: + m_X: 255 + m_Y: 301 + m_Width: 46 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 39.328125 + m_Height: 52.359375 + m_HorizontalBearingX: 4.4375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 40.8125 + m_GlyphRect: + m_X: 312 + m_Y: 134 + m_Width: 40 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 42.21875 + m_Height: 52.359375 + m_HorizontalBearingX: -0.484375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 293 + m_Y: 70 + m_Width: 43 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 30.453125 + m_Height: 37.78125 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 37.296875 + m_HorizontalAdvance: 36.890625 + m_GlyphRect: + m_X: 318 + m_Y: 377 + m_Width: 31 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 31.5625 + m_Height: 54.3125 + m_HorizontalBearingX: 3 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 38.140625 + m_GlyphRect: + m_X: 95 + m_Y: 87 + m_Width: 32 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.34375 + m_Height: 37.890625 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 37.40625 + m_HorizontalAdvance: 33.703125 + m_GlyphRect: + m_X: 318 + m_Y: 327 + m_Width: 30 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 33.71875 + m_Height: 54.3125 + m_HorizontalBearingX: 2.65625 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 84 + m_Y: 6 + m_Width: 35 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 28.40625 + m_Height: 37.8125 + m_HorizontalBearingX: 2.78125 + m_HorizontalBearingY: 37.328125 + m_HorizontalAdvance: 34.671875 + m_GlyphRect: + m_X: 360 + m_Y: 376 + m_Width: 30 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 22.5 + m_Height: 62.265625 + m_HorizontalBearingX: 3.328125 + m_HorizontalBearingY: 53.015625 + m_HorizontalAdvance: 22.796875 + m_GlyphRect: + m_X: 64 + m_Y: 402 + m_Width: 23 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 36.140625 + m_Height: 51.0625 + m_HorizontalBearingX: -1.734375 + m_HorizontalBearingY: 37.375 + m_HorizontalAdvance: 34.1875 + m_GlyphRect: + m_X: 104 + m_Y: 454 + m_Width: 37 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 30.296875 + m_Height: 53.828125 + m_HorizontalBearingX: 3 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 38.140625 + m_GlyphRect: + m_X: 169 + m_Y: 217 + m_Width: 31 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 10.609375 + m_Height: 52.796875 + m_HorizontalBearingX: 3.40625 + m_HorizontalBearingY: 52.796875 + m_HorizontalAdvance: 15.65625 + m_GlyphRect: + m_X: 492 + m_Y: 103 + m_Width: 12 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 20.390625 + m_Height: 66.453125 + m_HorizontalBearingX: -6.328125 + m_HorizontalBearingY: 52.796875 + m_HorizontalAdvance: 15.609375 + m_GlyphRect: + m_X: 6 + m_Y: 170 + m_Width: 22 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 29.5625 + m_Height: 53.828125 + m_HorizontalBearingX: 2.953125 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 32.75 + m_GlyphRect: + m_X: 188 + m_Y: 376 + m_Width: 31 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49.875 + m_Height: 37.375 + m_HorizontalBearingX: 3 + m_HorizontalBearingY: 37.375 + m_HorizontalAdvance: 57.71875 + m_GlyphRect: + m_X: 446 + m_Y: 6 + m_Width: 50 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 30.34375 + m_Height: 37.375 + m_HorizontalBearingX: 3.03125 + m_HorizontalBearingY: 37.375 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 446 + m_Y: 328 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 31.296875 + m_Height: 37.859375 + m_HorizontalBearingX: 2.890625 + m_HorizontalBearingY: 37.375 + m_HorizontalAdvance: 37.96875 + m_GlyphRect: + m_X: 359 + m_Y: 262 + m_Width: 33 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 33.1875 + m_Height: 50.40625 + m_HorizontalBearingX: 1.40625 + m_HorizontalBearingY: 37.375 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 152 + m_Y: 454 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 30.453125 + m_Height: 50.328125 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 37.296875 + m_HorizontalAdvance: 36.921875 + m_GlyphRect: + m_X: 401 + m_Y: 357 + m_Width: 31 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 22.015625 + m_Height: 37.484375 + m_HorizontalBearingX: 3 + m_HorizontalBearingY: 37.484375 + m_HorizontalAdvance: 24.3125 + m_GlyphRect: + m_X: 409 + m_Y: 134 + m_Width: 23 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 25.9375 + m_Height: 37.96875 + m_HorizontalBearingX: 0.703125 + m_HorizontalBearingY: 37.375 + m_HorizontalAdvance: 29.078125 + m_GlyphRect: + m_X: 432 + m_Y: 425 + m_Width: 27 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 20.09375 + m_Height: 50.328125 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 49.734375 + m_HorizontalAdvance: 25.234375 + m_GlyphRect: + m_X: 409 + m_Y: 183 + m_Width: 21 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 30.734375 + m_Height: 37.296875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 474 + m_Y: 279 + m_Width: 32 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 31.640625 + m_Height: 36.8125 + m_HorizontalBearingX: 3.140625 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 34.296875 + m_GlyphRect: + m_X: 403 + m_Y: 309 + m_Width: 32 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 48.65625 + m_Height: 37 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 37 + m_HorizontalAdvance: 52.171875 + m_GlyphRect: + m_X: 446 + m_Y: 55 + m_Width: 50 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 33.1875 + m_Height: 36.8125 + m_HorizontalBearingX: -1.59375 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 32.265625 + m_GlyphRect: + m_X: 441 + m_Y: 199 + m_Width: 34 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 31.671875 + m_Height: 49.84375 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 34.375 + m_GlyphRect: + m_X: 431 + m_Y: 247 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 30.265625 + m_Height: 36.8125 + m_HorizontalBearingX: -0.375 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 30.59375 + m_GlyphRect: + m_X: 443 + m_Y: 377 + m_Width: 31 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 9.359375 + m_Height: 10 + m_HorizontalBearingX: 12.546875 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 27.234375 + m_GlyphRect: + m_X: 109 + m_Y: 301 + m_Width: 10 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 307 + m_Metrics: + m_Width: 10.6875 + m_Height: 52.921875 + m_HorizontalBearingX: 3.296875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 17.53125 + m_GlyphRect: + m_X: 230 + m_Y: 375 + m_Width: 11 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 22.359375 + m_Height: 53.515625 + m_HorizontalBearingX: 6.171875 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 29.890625 + m_GlyphRect: + m_X: 197 + m_Y: 441 + m_Width: 23 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 310 + m_Metrics: + m_Width: 6.546875 + m_Height: 15.65625 + m_HorizontalBearingX: 2.1875 + m_HorizontalBearingY: 6.296875 + m_HorizontalAdvance: 15.6875 + m_GlyphRect: + m_X: 146 + m_Y: 283 + m_Width: 7 + m_Height: 17 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 10.46875 + m_Height: 44.65625 + m_HorizontalBearingX: 3.1875 + m_HorizontalBearingY: 35.296875 + m_HorizontalAdvance: 18.234375 + m_GlyphRect: + m_X: 409 + m_Y: 245 + m_Width: 11 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 6.84375 + m_Height: 6.859375 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 6.296875 + m_HorizontalAdvance: 16.984375 + m_GlyphRect: + m_X: 263 + m_Y: 264 + m_Width: 8 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 43.140625 + m_Height: 6.859375 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 6.296875 + m_HorizontalAdvance: 53.28125 + m_GlyphRect: + m_X: 208 + m_Y: 282 + m_Width: 44 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 324 + m_Metrics: + m_Width: 31.296875 + m_Height: 56.578125 + m_HorizontalBearingX: -0.328125 + m_HorizontalBearingY: 53.46875 + m_HorizontalAdvance: 29.9375 + m_GlyphRect: + m_X: 52 + m_Y: 88 + m_Width: 32 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 325 + m_Metrics: + m_Width: 2.78125 + m_Height: 69.15625 + m_HorizontalBearingX: 7.578125 + m_HorizontalBearingY: 56.125 + m_HorizontalAdvance: 18.125 + m_GlyphRect: + m_X: 6 + m_Y: 88 + m_Width: 4 + m_Height: 71 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 17.4375 + m_Height: 56.578125 + m_HorizontalBearingX: 6.46875 + m_HorizontalBearingY: 53.46875 + m_HorizontalAdvance: 29.59375 + m_GlyphRect: + m_X: 55 + m_Y: 6 + m_Width: 18 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 328 + m_Metrics: + m_Width: 16.25 + m_Height: 2.890625 + m_HorizontalBearingX: 4.953125 + m_HorizontalBearingY: 23.390625 + m_HorizontalAdvance: 26.34375 + m_GlyphRect: + m_X: 123 + m_Y: 72 + m_Width: 18 + m_Height: 4 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 331 + m_Metrics: + m_Width: 27.125 + m_Height: 2.40625 + m_HorizontalBearingX: -0.96875 + m_HorizontalBearingY: -7.65625 + m_HorizontalAdvance: 32.8125 + m_GlyphRect: + m_X: 84 + m_Y: 72 + m_Width: 28 + m_Height: 4 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 334 + m_Metrics: + m_Width: 15.875 + m_Height: 66.1875 + m_HorizontalBearingX: 3.921875 + m_HorizontalBearingY: 56.421875 + m_HorizontalAdvance: 18.390625 + m_GlyphRect: + m_X: 36 + m_Y: 404 + m_Width: 17 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 335 + m_Metrics: + m_Width: 15.828125 + m_Height: 66.1875 + m_HorizontalBearingX: -1.109375 + m_HorizontalBearingY: 56.421875 + m_HorizontalAdvance: 18.390625 + m_GlyphRect: + m_X: 37 + m_Y: 248 + m_Width: 17 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 18.953125 + m_Height: 65.828125 + m_HorizontalBearingX: 3.328125 + m_HorizontalBearingY: 56.09375 + m_HorizontalAdvance: 20.6875 + m_GlyphRect: + m_X: 21 + m_Y: 88 + m_Width: 20 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 19.015625 + m_Height: 65.828125 + m_HorizontalBearingX: -1.328125 + m_HorizontalBearingY: 56.09375 + m_HorizontalAdvance: 20.796875 + m_GlyphRect: + m_X: 6 + m_Y: 248 + m_Width: 20 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 18.90625 + m_Height: 65.828125 + m_HorizontalBearingX: 3.078125 + m_HorizontalBearingY: 56.09375 + m_HorizontalAdvance: 20.5 + m_GlyphRect: + m_X: 6 + m_Y: 404 + m_Width: 19 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 18.984375 + m_Height: 65.828125 + m_HorizontalBearingX: -1.21875 + m_HorizontalBearingY: 56.09375 + m_HorizontalAdvance: 20.53125 + m_GlyphRect: + m_X: 6 + m_Y: 326 + m_Width: 20 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 19.9375 + m_Height: 22.015625 + m_HorizontalBearingX: 7.109375 + m_HorizontalBearingY: 55.234375 + m_HorizontalAdvance: 29.125 + m_GlyphRect: + m_X: 46 + m_Y: 482 + m_Width: 21 + m_Height: 23 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 345 + m_Metrics: + m_Width: 27.40625 + m_Height: 22.765625 + m_HorizontalBearingX: 9.734375 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 6 + m_Y: 482 + m_Width: 29 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 346 + m_Metrics: + m_Width: 32.546875 + m_Height: 11.578125 + m_HorizontalBearingX: 5.1875 + m_HorizontalBearingY: 27.640625 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 65 + m_Y: 301 + m_Width: 33 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 4.671875 + m_Height: 17.765625 + m_HorizontalBearingX: 7.28125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 13.65625 + m_GlyphRect: + m_X: 130 + m_Y: 283 + m_Width: 5 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 14.671875 + m_Height: 17.765625 + m_HorizontalBearingX: 7.28125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 23.5625 + m_GlyphRect: + m_X: 78 + m_Y: 477 + m_Width: 15 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 41.4375 + m_Height: 53.546875 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 47.625 + m_GlyphRect: + m_X: 101 + m_Y: 153 + m_Width: 43 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 49.6875 + m_Height: 58.015625 + m_HorizontalBearingX: 3.78125 + m_HorizontalBearingY: 49.203125 + m_HorizontalAdvance: 56.53125 + m_GlyphRect: + m_X: 39 + m_Y: 166 + m_Width: 51 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 360 + m_Metrics: + m_Width: 36.109375 + m_Height: 69.75 + m_HorizontalBearingX: 2.921875 + m_HorizontalBearingY: 60.203125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 38 + m_Height: 71 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 368 + m_Metrics: + m_Width: 39.4375 + m_Height: 52.359375 + m_HorizontalBearingX: 2.1875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 266 + m_Y: 199 + m_Width: 40 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 397 + m_Metrics: + m_Width: 35.46875 + m_Height: 53.515625 + m_HorizontalBearingX: 4.1875 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 122 + m_Y: 218 + m_Width: 36 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 398 + m_Metrics: + m_Width: 25.265625 + m_Height: 52.578125 + m_HorizontalBearingX: 8.25 + m_HorizontalBearingY: 52.578125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 395 + m_Y: 426 + m_Width: 26 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 34.96875 + m_Height: 52.953125 + m_HorizontalBearingX: 3 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 363 + m_Y: 134 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 33.484375 + m_Height: 53.546875 + m_HorizontalBearingX: 4.25 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 192 + m_Y: 71 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 36 + m_Height: 52.390625 + m_HorizontalBearingX: 2.546875 + m_HorizontalBearingY: 52.390625 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 352 + m_Y: 6 + m_Width: 37 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 33.890625 + m_Height: 52.953125 + m_HorizontalBearingX: 4.21875 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 155 + m_Y: 152 + m_Width: 35 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 33.203125 + m_Height: 52.359375 + m_HorizontalBearingX: 8.28125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 364 + m_Y: 198 + m_Width: 34 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 30.234375 + m_Height: 52.953125 + m_HorizontalBearingX: 7.765625 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 359 + m_Y: 312 + m_Width: 31 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 433 + m_Metrics: + m_Width: 35.03125 + m_Height: 36.078125 + m_HorizontalBearingX: 4.296875 + m_HorizontalBearingY: 42.8125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 443 + m_Y: 151 + m_Width: 36 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 437 + m_Metrics: + m_Width: 32.3125 + m_Height: 14.171875 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 32.078125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 164 + m_Y: 283 + m_Width: 33 + m_Height: 16 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 440 + m_Metrics: + m_Width: 29.671875 + m_Height: 30.03125 + m_HorizontalBearingX: 6.703125 + m_HorizontalBearingY: 39.84375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 432 + m_Y: 475 + m_Width: 31 + m_Height: 31 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 441 + m_Metrics: + m_Width: 29.71875 + m_Height: 30.03125 + m_HorizontalBearingX: 7.0625 + m_HorizontalBearingY: 39.84375 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 474 + m_Y: 425 + m_Width: 30 + m_Height: 31 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 9.953125 + m_Height: 53.828125 + m_HorizontalBearingX: 3.328125 + m_HorizontalBearingY: 53.828125 + m_HorizontalAdvance: 15.46875 + m_GlyphRect: + m_X: 233 + m_Y: 301 + m_Width: 11 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 31.34375 + m_Height: 52.953125 + m_HorizontalBearingX: 5.328125 + m_HorizontalBearingY: 52.359375 + m_HorizontalAdvance: 39.484375 + m_GlyphRect: + m_X: 151 + m_Y: 311 + m_Width: 32 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 33.078125 + m_Height: 53.546875 + m_HorizontalBearingX: 4.59375 + m_HorizontalBearingY: 52.953125 + m_HorizontalAdvance: 42.921875 + m_GlyphRect: + m_X: 98 + m_Y: 389 + m_Width: 34 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 44.765625 + m_Height: 53.53125 + m_HorizontalBearingX: 4.734375 + m_HorizontalBearingY: 52.90625 + m_HorizontalAdvance: 53.46875 + m_GlyphRect: + m_X: 65 + m_Y: 236 + m_Width: 46 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 36.8125 + m_Height: 36.8125 + m_HorizontalBearingX: 3.78125 + m_HorizontalBearingY: 36.8125 + m_HorizontalAdvance: 44.40625 + m_GlyphRect: + m_X: 443 + m_Y: 103 + m_Width: 38 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 10.84375 + m_Height: 35.859375 + m_HorizontalBearingX: 2.8125 + m_HorizontalBearingY: 35.296875 + m_HorizontalAdvance: 17.5 + m_GlyphRect: + m_X: 490 + m_Y: 167 + m_Width: 12 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -6708749334726711433} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 49 + m_Height: 82 + - m_X: 0 + m_Y: 82 + m_Width: 15 + m_Height: 82 + - m_X: 0 + m_Y: 164 + m_Width: 33 + m_Height: 78 + - m_X: 15 + m_Y: 82 + m_Width: 31 + m_Height: 78 + - m_X: 0 + m_Y: 242 + m_Width: 31 + m_Height: 78 + - m_X: 0 + m_Y: 320 + m_Width: 31 + m_Height: 78 + - m_X: 0 + m_Y: 398 + m_Width: 30 + m_Height: 78 + - m_X: 0 + m_Y: 476 + m_Width: 40 + m_Height: 35 + - m_X: 30 + m_Y: 398 + m_Width: 28 + m_Height: 78 + - m_X: 40 + m_Y: 476 + m_Width: 32 + m_Height: 34 + - m_X: 31 + m_Y: 242 + m_Width: 28 + m_Height: 78 + - m_X: 31 + m_Y: 320 + m_Width: 59 + m_Height: 76 + - m_X: 58 + m_Y: 396 + m_Width: 34 + m_Height: 75 + - m_X: 72 + m_Y: 471 + m_Width: 26 + m_Height: 30 + - m_X: 33 + m_Y: 160 + m_Width: 62 + m_Height: 70 + - m_X: 46 + m_Y: 82 + m_Width: 43 + m_Height: 69 + - m_X: 49 + m_Y: 0 + m_Width: 29 + m_Height: 69 + - m_X: 78 + m_Y: 0 + m_Width: 46 + m_Height: 66 + - m_X: 78 + m_Y: 66 + m_Width: 39 + m_Height: 15 + - m_X: 89 + m_Y: 81 + m_Width: 43 + m_Height: 66 + - m_X: 117 + m_Y: 66 + m_Width: 29 + m_Height: 15 + - m_X: 124 + m_Y: 0 + m_Width: 59 + m_Height: 65 + - m_X: 59 + m_Y: 230 + m_Width: 57 + m_Height: 65 + - m_X: 59 + m_Y: 295 + m_Width: 44 + m_Height: 23 + - m_X: 90 + m_Y: 318 + m_Width: 55 + m_Height: 65 + - m_X: 103 + m_Y: 295 + m_Width: 21 + m_Height: 22 + - m_X: 95 + m_Y: 147 + m_Width: 54 + m_Height: 65 + - m_X: 132 + m_Y: 81 + m_Width: 54 + m_Height: 65 + - m_X: 183 + m_Y: 0 + m_Width: 54 + m_Height: 65 + - m_X: 116 + m_Y: 212 + m_Width: 47 + m_Height: 65 + - m_X: 149 + m_Y: 146 + m_Width: 46 + m_Height: 65 + - m_X: 124 + m_Y: 277 + m_Width: 16 + m_Height: 30 + - m_X: 140 + m_Y: 277 + m_Width: 18 + m_Height: 28 + - m_X: 186 + m_Y: 65 + m_Width: 45 + m_Height: 65 + - m_X: 92 + m_Y: 383 + m_Width: 45 + m_Height: 65 + - m_X: 98 + m_Y: 448 + m_Width: 48 + m_Height: 63 + - m_X: 137 + m_Y: 383 + m_Width: 45 + m_Height: 65 + - m_X: 146 + m_Y: 448 + m_Width: 45 + m_Height: 63 + - m_X: 145 + m_Y: 305 + m_Width: 43 + m_Height: 65 + - m_X: 158 + m_Y: 277 + m_Width: 44 + m_Height: 27 + - m_X: 163 + m_Y: 211 + m_Width: 42 + m_Height: 65 + - m_X: 182 + m_Y: 370 + m_Width: 42 + m_Height: 65 + - m_X: 188 + m_Y: 304 + m_Width: 39 + m_Height: 65 + - m_X: 202 + m_Y: 276 + m_Width: 55 + m_Height: 19 + - m_X: 191 + m_Y: 435 + m_Width: 34 + m_Height: 65 + - m_X: 224 + m_Y: 369 + m_Width: 22 + m_Height: 65 + - m_X: 227 + m_Y: 295 + m_Width: 22 + m_Height: 65 + - m_X: 225 + m_Y: 434 + m_Width: 78 + m_Height: 64 + - m_X: 246 + m_Y: 360 + m_Width: 66 + m_Height: 64 + - m_X: 249 + m_Y: 295 + m_Width: 57 + m_Height: 64 + - m_X: 195 + m_Y: 130 + m_Width: 56 + m_Height: 64 + - m_X: 231 + m_Y: 65 + m_Width: 56 + m_Height: 64 + - m_X: 237 + m_Y: 0 + m_Width: 56 + m_Height: 64 + - m_X: 205 + m_Y: 194 + m_Width: 55 + m_Height: 64 + - m_X: 251 + m_Y: 129 + m_Width: 55 + m_Height: 64 + - m_X: 287 + m_Y: 64 + m_Width: 54 + m_Height: 64 + - m_X: 293 + m_Y: 0 + m_Width: 53 + m_Height: 64 + - m_X: 257 + m_Y: 258 + m_Width: 19 + m_Height: 19 + - m_X: 260 + m_Y: 193 + m_Width: 51 + m_Height: 64 + - m_X: 306 + m_Y: 128 + m_Width: 51 + m_Height: 64 + - m_X: 341 + m_Y: 64 + m_Width: 50 + m_Height: 64 + - m_X: 346 + m_Y: 0 + m_Width: 48 + m_Height: 64 + - m_X: 303 + m_Y: 424 + m_Width: 47 + m_Height: 64 + - m_X: 306 + m_Y: 257 + m_Width: 47 + m_Height: 64 + - m_X: 311 + m_Y: 192 + m_Width: 47 + m_Height: 64 + - m_X: 357 + m_Y: 128 + m_Width: 46 + m_Height: 64 + - m_X: 391 + m_Y: 64 + m_Width: 46 + m_Height: 64 + - m_X: 394 + m_Y: 0 + m_Width: 46 + m_Height: 64 + - m_X: 440 + m_Y: 0 + m_Width: 61 + m_Height: 49 + - m_X: 440 + m_Y: 49 + m_Width: 61 + m_Height: 48 + - m_X: 437 + m_Y: 97 + m_Width: 49 + m_Height: 48 + - m_X: 403 + m_Y: 128 + m_Width: 34 + m_Height: 49 + - m_X: 486 + m_Y: 97 + m_Width: 23 + m_Height: 64 + - m_X: 437 + m_Y: 145 + m_Width: 47 + m_Height: 48 + - m_X: 403 + m_Y: 177 + m_Width: 32 + m_Height: 62 + - m_X: 358 + m_Y: 192 + m_Width: 45 + m_Height: 64 + - m_X: 484 + m_Y: 161 + m_Width: 23 + m_Height: 48 + - m_X: 435 + m_Y: 193 + m_Width: 45 + m_Height: 48 + - m_X: 480 + m_Y: 209 + m_Width: 22 + m_Height: 64 + - m_X: 403 + m_Y: 239 + m_Width: 22 + m_Height: 57 + - m_X: 353 + m_Y: 256 + m_Width: 44 + m_Height: 50 + - m_X: 425 + m_Y: 241 + m_Width: 43 + m_Height: 62 + - m_X: 468 + m_Y: 273 + m_Width: 43 + m_Height: 49 + - m_X: 397 + m_Y: 303 + m_Width: 43 + m_Height: 48 + - m_X: 353 + m_Y: 306 + m_Width: 42 + m_Height: 64 + - m_X: 312 + m_Y: 321 + m_Width: 41 + m_Height: 50 + - m_X: 312 + m_Y: 371 + m_Width: 42 + m_Height: 50 + - m_X: 350 + m_Y: 421 + m_Width: 39 + m_Height: 64 + - m_X: 354 + m_Y: 370 + m_Width: 41 + m_Height: 50 + - m_X: 389 + m_Y: 420 + m_Width: 37 + m_Height: 64 + - m_X: 395 + m_Y: 351 + m_Width: 42 + m_Height: 63 + - m_X: 440 + m_Y: 322 + m_Width: 42 + m_Height: 49 + - m_X: 437 + m_Y: 371 + m_Width: 42 + m_Height: 48 + - m_X: 426 + m_Y: 419 + m_Width: 38 + m_Height: 50 + - m_X: 426 + m_Y: 469 + m_Width: 42 + m_Height: 42 + - m_X: 468 + m_Y: 419 + m_Width: 41 + m_Height: 42 + m_FreeGlyphRects: + - m_X: 31 + m_Y: 396 + m_Width: 27 + m_Height: 2 + - m_X: 58 + m_Y: 471 + m_Width: 14 + m_Height: 5 + - m_X: 15 + m_Y: 160 + m_Width: 18 + m_Height: 4 + - m_X: 49 + m_Y: 69 + m_Width: 29 + m_Height: 13 + - m_X: 49 + m_Y: 81 + m_Width: 40 + m_Height: 1 + - m_X: 33 + m_Y: 230 + m_Width: 26 + m_Height: 12 + - m_X: 59 + m_Y: 318 + m_Width: 31 + m_Height: 2 + - m_X: 46 + m_Y: 151 + m_Width: 49 + m_Height: 9 + - m_X: 89 + m_Y: 147 + m_Width: 6 + m_Height: 13 + - m_X: 95 + m_Y: 212 + m_Width: 21 + m_Height: 18 + - m_X: 132 + m_Y: 146 + m_Width: 17 + m_Height: 1 + - m_X: 116 + m_Y: 277 + m_Width: 8 + m_Height: 18 + - m_X: 124 + m_Y: 65 + m_Width: 62 + m_Height: 1 + - m_X: 146 + m_Y: 65 + m_Width: 40 + m_Height: 16 + - m_X: 90 + m_Y: 383 + m_Width: 2 + m_Height: 13 + - m_X: 40 + m_Y: 510 + m_Width: 58 + m_Height: 1 + - m_X: 72 + m_Y: 501 + m_Width: 26 + m_Height: 10 + - m_X: 92 + m_Y: 448 + m_Width: 6 + m_Height: 23 + - m_X: 103 + m_Y: 317 + m_Width: 42 + m_Height: 1 + - m_X: 124 + m_Y: 307 + m_Width: 21 + m_Height: 11 + - m_X: 140 + m_Y: 305 + m_Width: 5 + m_Height: 13 + - m_X: 149 + m_Y: 211 + m_Width: 14 + m_Height: 1 + - m_X: 145 + m_Y: 370 + m_Width: 37 + m_Height: 13 + - m_X: 158 + m_Y: 304 + m_Width: 30 + m_Height: 1 + - m_X: 163 + m_Y: 276 + m_Width: 39 + m_Height: 1 + - m_X: 182 + m_Y: 435 + m_Width: 9 + m_Height: 13 + - m_X: 188 + m_Y: 369 + m_Width: 36 + m_Height: 1 + - m_X: 202 + m_Y: 295 + m_Width: 25 + m_Height: 9 + - m_X: 224 + m_Y: 434 + m_Width: 1 + m_Height: 1 + - m_X: 227 + m_Y: 360 + m_Width: 19 + m_Height: 9 + - m_X: 186 + m_Y: 130 + m_Width: 9 + m_Height: 16 + - m_X: 195 + m_Y: 194 + m_Width: 10 + m_Height: 17 + - m_X: 231 + m_Y: 129 + m_Width: 20 + m_Height: 1 + - m_X: 237 + m_Y: 64 + m_Width: 50 + m_Height: 1 + - m_X: 205 + m_Y: 258 + m_Width: 52 + m_Height: 18 + - m_X: 251 + m_Y: 193 + m_Width: 9 + m_Height: 1 + - m_X: 287 + m_Y: 128 + m_Width: 19 + m_Height: 1 + - m_X: 246 + m_Y: 424 + m_Width: 57 + m_Height: 10 + - m_X: 257 + m_Y: 277 + m_Width: 49 + m_Height: 18 + - m_X: 260 + m_Y: 257 + m_Width: 46 + m_Height: 1 + - m_X: 276 + m_Y: 257 + m_Width: 30 + m_Height: 38 + - m_X: 306 + m_Y: 192 + m_Width: 5 + m_Height: 1 + - m_X: 437 + m_Y: 64 + m_Width: 3 + m_Height: 33 + - m_X: 501 + m_Y: 0 + m_Width: 10 + m_Height: 97 + - m_X: 484 + m_Y: 145 + m_Width: 2 + m_Height: 16 + - m_X: 435 + m_Y: 177 + m_Width: 2 + m_Height: 16 + - m_X: 480 + m_Y: 193 + m_Width: 4 + m_Height: 16 + - m_X: 311 + m_Y: 256 + m_Width: 42 + m_Height: 1 + - m_X: 425 + m_Y: 239 + m_Width: 10 + m_Height: 2 + - m_X: 509 + m_Y: 0 + m_Width: 2 + m_Height: 273 + - m_X: 507 + m_Y: 161 + m_Width: 4 + m_Height: 112 + - m_X: 502 + m_Y: 209 + m_Width: 9 + m_Height: 64 + - m_X: 468 + m_Y: 241 + m_Width: 12 + m_Height: 32 + - m_X: 397 + m_Y: 256 + m_Width: 6 + m_Height: 47 + - m_X: 397 + m_Y: 296 + m_Width: 28 + m_Height: 7 + - m_X: 249 + m_Y: 359 + m_Width: 63 + m_Height: 1 + - m_X: 306 + m_Y: 321 + m_Width: 6 + m_Height: 39 + - m_X: 312 + m_Y: 421 + m_Width: 38 + m_Height: 3 + - m_X: 353 + m_Y: 370 + m_Width: 1 + m_Height: 1 + - m_X: 354 + m_Y: 420 + m_Width: 35 + m_Height: 1 + - m_X: 395 + m_Y: 306 + m_Width: 2 + m_Height: 45 + - m_X: 440 + m_Y: 303 + m_Width: 28 + m_Height: 19 + - m_X: 437 + m_Y: 351 + m_Width: 3 + m_Height: 20 + - m_X: 395 + m_Y: 414 + m_Width: 42 + m_Height: 5 + - m_X: 395 + m_Y: 414 + m_Width: 31 + m_Height: 6 + - m_X: 191 + m_Y: 500 + m_Width: 235 + m_Height: 11 + - m_X: 225 + m_Y: 498 + m_Width: 201 + m_Height: 13 + - m_X: 303 + m_Y: 488 + m_Width: 123 + m_Height: 23 + - m_X: 350 + m_Y: 485 + m_Width: 76 + m_Height: 26 + - m_X: 389 + m_Y: 484 + m_Width: 37 + m_Height: 27 + - m_X: 482 + m_Y: 322 + m_Width: 29 + m_Height: 97 + - m_X: 509 + m_Y: 322 + m_Width: 2 + m_Height: 189 + - m_X: 479 + m_Y: 371 + m_Width: 32 + m_Height: 48 + - m_X: 464 + m_Y: 461 + m_Width: 47 + m_Height: 8 + - m_X: 464 + m_Y: 419 + m_Width: 4 + m_Height: 50 + - m_X: 468 + m_Y: 461 + m_Width: 43 + m_Height: 50 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 4e4fd698e0090124ea15a7ae5a30b84a + pointSizeSamplingMode: 0 + pointSize: 74 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-LightItalic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-LightItalic SDF.asset.meta new file mode 100644 index 0000000..3bd4cd9 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-LightItalic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c9581b0f074374498fe2166d24a660b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Medium SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Medium SDF.asset new file mode 100644 index 0000000..7a976ef --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Medium SDF.asset @@ -0,0 +1,2694 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &-6263097307693789204 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Medium SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -3555082381982074113} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 0.8333333 + - _ScaleRatioB: 0.6770833 + - _ScaleRatioC: 0.6770833 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!28 &-3555082381982074113 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Medium SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_IsPreProcessed: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e141620202020202015130d03000000000000000000000000000000000000000812181a202020202020110f090000000000000000000000000000000000000000000a131a1c20202020201a181208000000000000000000000000000000000000000000000000000000000000000000030c1315202020202020200a030000000000000000000000000000000000071017192020202020190b07000000000000000000000000050e141620202020201f0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e0f0f0f0f0f0f0c0a0400000000000000070d0f2020202020201816100600000000000000010a101220202020202016140d0400000000000000020c121420202020202014120c02000000000000000000000000000000000000050b0d121416161514120f0b0902000000000000000000000000000000070a0b0b0b0b0b0800000000000000000000000000000000000000000000000000000000061016192020202020201b19120900000000000000000000000000000000000000000000000000000000070d0f1415120b0903000000000000000000070d0f1415120b0903000000000000000000070d0f1415120b0903000000000000000000000000000000000000000000000000081621292b3535353535352a2720150700000000000000000000000000000000000c1a252d3035353535353526241d12040000000000000000000000000000000000000d1b272e313535353535302d25190b00000000000000000000000000000000000000000000000000000000000000071520272a353535353535351e160b0000000000000000000000000000000a18242b2e35353535352f201c1308000000000000000000081621292c353535353534201d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a161e2123242525252525221f180c0000000002101b22243535353535352d2b231709000000000005131e25273535353535352b28211608000000000006141f262935353535353529271f14060000000000000000000000000000060b0d19202227292b2b2b292724201d150e0c060000000000000000010a10121c1f20202020201e0e0c060000000000000000000000000000000000000000000000000a18232b2e353535353535302d261a0c00000000000000000000000000000000000000000000000000010f1a2124292b27211e160a000000000000010f1a2124292b27211e160a000000000000010f1a2124292b27211e160a00000000000000000000000000000000000000000000041626333d404a4a4a4a4a4a3f3c33251503000000000000000000000000000000001a2a3741454a4a4a4a4a4a3b382f221200000000000000000000000000000000000a1b2b3943464a4a4a4a4a4541372919080000000000000000000000000000000000000000000000000000000000031525323c3f4a4a4a4a4a4a4a32291b0b000000000000000000000000000018283640434a4a4a4a4a44353025180800000000000000001626343d414a4a4a4a4a493632281a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1820283236393a3a3a3a3a3a37332a1c0c00000010202d36394a4a4a4a4a4a423f3527170600000001132330393c4a4a4a4a4a4a403d33261604000000021424323b3e4a4a4a4a4a4a3e3b322414020000000000000000000000060e1920232b34373c3e4041403f3c393632282320190e07000000000005131e252732353535353535332320190e000000000000000000000000000000000000000000000618283640434a4a4a4a4a4a4542382a1a09000000000000000000000000000000000000000000000009151d2d36393f403d3632281b100200000009151d2d36393f403d3632281b100200000009151d2d36393f403d3632281b100200000000000000000000000000000000000000000e213344515660606060606055504333200d0000000000000000000000000000000c1c3748555a606060606060514c402f1d090000000000000000000000000000000013273949565c60606060605a544837251200000000000000000000000000000000000000000000000000000000000c2032434f546060606060605e46392916030000000000000000000000000a1a364653586060606060594a43362513000000000000000c1c344451565f606060605f4b4538281502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1d2b3438454b4e4f4f4f4f4f4f4c473a2a180400071b2d3e4a4f6060606060605852453523100000000a1e30414d5260606060606055504433210d0000000c1f32424f53606060606060544f42321f0c000000000000000000000e19202b35383b484d515355565554514e4b453838352c201c1308000007152330393d474a4a4a4a4a4a4838352c1e0e0000000000000000000000000000000000000000001023364653586060606060605b554838261200000000000000000000000000000000000000000000091927313d4a4e5455524b45392e21100000091927313d4a4e5455524b45392e21100000091927313d4a4e5455524b45392e2110000000000000000000000000000000000000000014293d51626b7575757575756a61503c270e000000000000000000000000000004182a3a55666f757575757575665e4c382408000000000000000000000000000000001a2e4356677175757575756f6654412d18030000000000000000000000000000000000000000000000000000000013273c4f616a757575757575705746321e0a00000000000000000000000216283853646e75757575756e605443301c07000000000004172a3a51626b757575757574605645321d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3b484d566063646464646464615847331f0a000d22364a5c707575757575756d64523f2b160100001025394d5f677575757575756b62503d281400000012263b4f606975757575757569614f3b2712000000000000000005131e2b353c484d56596267696b6b6a6967646056554d493c353025181104152533414d525c5f60606060605d4d493c2c19060000000000000000000000000000000000000002162b4053646e757575757575706655422d1904000000000000000000000000000000000000000001152737444b5c64696a6760574b3f2e1d0d01152737444b5c64696a6760574b3f2e1d0d01152737444b5c64696a6760574b3f2e1d0d000000000000000000000000000000000000061a2c3d566b808a8a8a8a8a8a7f6a553c2c1906000000000000000000000000000a1f3447596f848a8a8a8a8a8a7c6651362614010000000000000000000000000000001c31465c71858a8a8a8a8a846f5a45301a0500000000000000000000000000000000000000000000000000000000152a3f546a7f8a8a8a8a8a8a75614b36210c0000000000000000000000091e3245566e828a8a8a8a8b8372604a35200b00000000000a1f3347586b808b8a8a8a8a8a74604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2c3c4959626e7578797a7a7a7a7a76614c37220c000f24394f647a8a8a8a8a8a8a826d58422d1803000012273c52677d8a8a8a8a8a8a806b55402b1600000014293e53697e8a8a8a8a8a8a7f69543e291400000000000000081623313c484d5a626b72777c7e8080807e7c7975706a635a514a43362f1f17253343505f677174757575757573635a4935200c0000000000000000000000000000000000000003192e43586e828a8a8a8a8a8a84705b45301b060000000000000000000000000000000000000000081d314455606d797e807c75655d4b3b2b19081d314455606d797e807c75655d4b3b2b19081d314455606d797e807c75655d4b3b2b190500000000000000000000000000000000000c2135495b72879c9f9f9f9f9b86715a4935200c000000000000000000000000000c22374c61778b9f9f9f9f9f97826d5443301c080000000000000000000000000000001c31465c71869b9f9f9f9a856f5a45301a050000000000000000000000070b0c0b09020000000000000000000000152a3f546a7f949f9f9f9f8b75614b36210c00000000000000000000000b21364b6075899e9f9fab9f8f7b655036261401000000000c21374c61768b9fab9f9fa8907b6651372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3b495b6377838a8e8f8f8f8f8f8575604b36210b000f24394f64798e9f9f9f9f97826d58422d1803000012273c52677c919f9f9f9f95806b55402b1600000014293e53697e939f9f9f9f937e69543e291400000000000008162634414d5a626e7881878c919395969594918e8a857f78706660544b3f332a324350616a7d868a8a8a8a8a8a8878634d38230e0000000000000000000000000000000000000003192e43586e83989f9f9f9f9a85705b45301b06000000000000000000000000000000000000000417293a4b6073828e949592887b655948342017293a4b6073828e949592887b655948342017293a4b6073828e949592887b65594834200b00000000000000000000000000000000000e23384e63788da4b6b5b5b5a38d78634d38230e00000000000000000000000004172a3a53687e93aabbb5b5b39e8874604b35200b0000000000000000000000000000001c31465c71869bb1b5af9a856f5a45301a0500000000000000000008131c2021211e160a06000000000000000000152a3f546a7f94a9b5b5a08b76614b36210c000000000000000000000215273751667c91a8b9b5bcac97816c5443301c080000000317293952687d92aabbb5c6ac97826d5544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b293a4859637987989fa9a4a4a59b8576615645321e09000f24394f64798ea4b5b5ad97826d58422d1803000012273c52677c91a7b5b5aa95806b55402b1600000014293e53697e93a8b5b5a9937e69543e291400000000000516263445515f6778838b969ca4a6a8aaabaaa9a6a99f9a948d857c72655d4c473a434f616a7f929c9fa99fa69d8879635a4935200c0000000000000000000000000000000000000003192e43586e8398adb5b5b09a85705b45301b06000000000000000000000000000000000000000a1f3347586a7f949fa9aaa69d8978624d37221f3347586a7f949fa9aaa69d8978624d37221f3347586a7f949fa9aaa69d8978624d37220d0000000000000000000000000000000005182b3b546a7f94a9c2d3d2c1a9947f6a543c2c190600000000000000000000000a1f3347586f849aafc8d9cbb8a68f7a654f3a25100000000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a050000000000000007151825303536363228211a0f0100000000000000152a3f546a7f94a9bfb6a08b76614b36210c00000000000000000000081d3144556d8298adc6d6c8b39d8874604b35200b0000000a1e3346576e8499aec8d8c8b39e8874604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919283947586277879da6b4bab7a69c877762584638281603000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400000000001323344451636c7d89989faab2b6c3beb8b6b5b6c7bab4b0aaa29a91867b6e61584b4f616a7f949db1b4b8a79e8879635b493c2c19060000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b06000000000000000000000000000000000000000c21374c61768a9fb4bec4b7a796816c56412c21374c61768a9fb4bec4b7a796816c56412c21374c61768a9fb4bec4b7a796816c56412c17000000000000000000000000000000000b2034485970859bb0c5dbdbc6b19b86715a4935200c00000000000000000000000c21374c61778b9fb4cadfd5c4ab96806b563d2c1a0600000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a050000000000000415253236434a4c4b4538352c1f0f00000000000000152a3f546a7f94a9bfb6a08b76614b36210c000000000000000000000b20364b6075899eb3c8c8cab7a68f7a654f3625130000000c21364b61768a9fb4c9c7cab8a7907b65503625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818273745576176869ca5b7c4b8a79d88786259473a291a0a00000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e2914000000000d1d314251626c81929ea8b4bbc0b4afa8a3a1a0a0a2a5aab0b5b4b0a49c908376655d616a7f949dafbbb9a79e8979635b4a3d2c1e0e000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b060000000000000000000000000000000000000010263b50657b90a9bacdd4c5b19b86715c4631263b50657b90a9bacdd4c5b19b86715c4631263b50657b90a9bacdd4c5b19b86715c46311c000000000000000000000000000000000d22374c62778b9fb5cadfddc9b5a38d78634d38230e000000000000000000000417293a53687d92aabbcee2dcc7b29c87725b4936210c00000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a05000000000000122232434f54606160564e493d2c1a0a000000000000152a3f546a7f94a9bfb6a08b76614b36210c0000000000000000000114263650667b90a7b8b7b2b4bbab96816c5443301c07000316283852677c91a9bab6b1b6c2ac96816c5443301c07000000000000000000000000000000000000000000000000000000000000000002080b0e11131415161514120f0b0913253644556075849ba4b5c3b9a89e8979635a493b2a1b0b0000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400000005182a3b4e606b80969fb3b9c2b5b1a29a938e8c8a8b8d90959a9fabb4b5b1a098887b67697f949daebbb9a89e897a645b4a3d2d1f0f00000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b060000000000000000000000000000000000000011263b51667c90abbccfd7c7b19c87715c4732263b51667b90abbccfd7c7b19c87715c4732263b51667b90abbccfd7c7b19c87715c47321c0000000000000000000000000000000317293953687e93abbccfe0ddd2c1a9947f6a543c2c19060000000000000000000a1f3347586f8499afc8d8dedecab6a48e79634e39230e00000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a0500000000000a1a30404f616a74767670635b49382815020000000000152a3f546a7f94a9bfb6a08b76614b36210c000000000000000000081c3043546c8297acb7a69d9faab29d8873604a35200b00091e3245566e8398aeb6a49ca4b6b29d8873604a35200b0000000000000000000000000000000000000000000000000000000000070d0f151d202326292a2b2b2a292724211e1c30435460738399a3b4c2baa99e8a7b645b4a3c2b1d0d000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e29140000000b1f344759687d929eb0bdbfb2a49c8f857e79767576787b7f858c979faab2b2a69d8b7d7e949daebbb9a89e8a7a645c4a3d2d1f0f0100000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b06000000000000000000000000000000000000000d22374c62778c9fb5c0c7baa997826d58422d22374c62778c9fb5c0c7baa997826d58422d22374c62778c9fb5c0c7baa997826d58422d180000000000000000000000000000000a1e3346576f8499afc9d5cbc8cbc6b09b86715a4935200c0000000000000000000c21374c61768a9fb4c9ccc9ccd3c3aa947f6a553b2b1805000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a0500000000021528384d5f6a7f898b8b8579635645321d0c0000000000152a3f546a7f94a9bfb6a08b76614b36210c0000000000000000000b20354b6074889eb3b29d878c9fb4a68f7a644f3a2510000b21364b6075899eb4b19c879cb1b7a68f7a644f3a250f00000000000000000000000000000000000000000000000000000309101b2224273136383b3e3f40403f3e3c39363233434a60728298a1b3c1bcab9f8b7c655c4b3d2d1e0e00000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e2914000005192b3c4c6277899eb3bcc0b2a199867a70696361606162666a7078818b99a1b4b7a99f92949daebbbaa89e8a7b645c4a3e2d1f0f010000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b06000000000000000000000000000000000000000b203448596c8196a2adaea99f8b79634e3923203448596c8196a2adaea99f8b79634e3923203448596c8196a2adaea99f8b79634e39230e0000000000000000000000000000000c21364c61768a9fb4c9c4b8b3b8c4b5a38d78634d38230e00000000000000000317293952687d92aabbc6b9b4b9c6c5b09b8670594834200b000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a0500000000091d324556677c919ea8a39b8674604b3a29170400000000152a3f546a7f94a9bfb6a08b76614b36210c00000000000000000013253650657a8fa6b8ae9882859bb0ab96816b563e2e1b0715273751667c91a8b8a7937e93abbcab96806b563e2d1a070000000000000000000000000000000000000000000000020b161e212d363937444b4e51535455555554514f4b454250616c8196a0b2bfbbb49f8d7d675e4c3e2e1f0f0000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400000b2034485a6d8298a7b8c8b4a2998274645c534e4c4b4b4d50555a626c7983929fa9b8b4a7a9aebbbaa99f8a7b655d4b3e2e201001000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b060000000000000000000000000000000000000005182b3b4b617584919899958a7d675b4a3621182b3b4b617584919899958a7d675b4a3621182b3b4b617584919899958a7d675b4a36210c00000000000000000000000000000215273752677c91a9bacbb8a69da6b8c1a9947f6a543c2c1906000000000000000a1e3346576f8499aec8b9a89ea8b9cab59f8b77624d37220d000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a0500000004172a3a4b6074879db2b9b5a4947f695846331f0e00000000152a3f546a7f94a9bfb6a08b76614b36210c0000000000000000071c3043546c8196acc4aa947f8095aab29d87725c4a36220d1d3144556d8298adb39e89768b9fb4b29d87725c4a36210d000000000000000000000000000000000000000000000a151d2832363e4a4e555560636668696a6b6a696764605656606a7f949fb0bebcaf9d937e685f4d402f2010010000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400000d22384d62788b9fb4c5bbaa9a847460564a3e39373536383b3c494d5b636e7e8b9ea7b8bcbec2baa99f8b7b655d4b3f2e20100200000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b0600000000000000000000000000000000000000000d1e32465761737c82838078675f4d3d2d1a0d1e32465761737c82838078675f4d3d2d1a0d1e32465761737c82838078675f4d3d2d1a070000000000000000000000000000081d3144556e8398adc7c8b39d889db3c6b09b86715a4935200c000000000000000c21364c61768a9fb4c9b49e899eb4c7bcab937e68533a2917040000000000000000000000001c31465c71869bb1c4af9a856f5a45301a050000000a1f334758697f94a5b6cac3b39e8976614c3c2b1905000000152a3f546a7f94a9bfb6a08b76614b36210c00000000000000000b20354a6073889db2bcab907b7a8fa6b7a58f7a644f3a241020364b6075899eb3ae988371869bb1b6a58e79644e39240f000000000000000000000000000000000000000001111a273139464b545c646b7075787b7e7f80807f7e7c7975716b697e939dafbdbeb09e947f6a604e4130211102000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e2914000014293f54697e94aabbc9b49f8b79635645382e2421202123262b353d494e60687a899eb3c8d3c9b49f8b7c665d4b3f2e2010020000000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b06000000000000000000000000000000000000000003162839465460676d6e6b625a4d41301f0f03162839465460676d6e6b625a4d41301f0f03162839465460676d6e6b625a4d41301f0f0000000000000000000000000000000b20364b6075899eb3c9c4aa958095a8b9b5a38d78624d38230e0000000000000316293952677d92a9bac4ac978197a9bac9af9a846f5846331f0a0000000000000000000000001c31465c71869bb1c4af9a856f5a45301a05000006192c3c4c6176899eb3c3d4ccb8a796806b5a4835200f000000152a3f546a7f94a9bfb6a08b76614b36210c00000000000000000f243a4f647a8fa6b7b59f8b7673889eb3ab96806b563e2d1b263750667b90a7b9a8927d6c8196abc3aa95806a553d2c1a0600000000000000000000000000000000000008141c2e38454b576169717980858a8d90939495959493918e8a86807f8d9fb4bbbfb1a096806b6150423123120300000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400051a2f445a6f8499afc8c2ad97826d5b4938281a100c0b0c0d11192030414e5f687d8d9fb5cad1bca6917c675e4c3f2f211102000000000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b060000000000000000000000000000000000000000000b1b2836434b525859554d483c30231201000b1b2836434b525859554d483c30231201000b1b2836434b525859554d483c3023120100000000000000000000000000000013253650667b90a7b9cbb8a68d788a9eb4c1a9947f69543c2c190600000000000a1e3246576e8399aec7b8a68e798a9fb4c9b49f8a76614c36210c0000000000000000000000001c31465c71869bb1c4af9a856f5a45301a0500000c2035495a6c8196a7b9c5c2c8c5b49f8a78624d3d2d1a070000152a3f546a7f94a9bfb6a08b76614b36210c00000000000000071a2d3d566b8096abc4b19c86716d8297adb29d87725c4a36223144556d8297acb5a38c77667c91a9bab19c86715b4935210c00000000000000000000000000000000000a1826303f4b56606a757e868e959a9fa9a6a8a9aaaaaaa9a6aa9f9b96949fabbcc3b3a1978272604a43332414050000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400011527375d72889db2c7c8a6907b66513d2c1a0a0000000005132330414d5f687d8d9fabbccac9bfaa95806a5a493520110300000000000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b06000000000000000000000000000000000000000000000b182630353c43444038352b1e12050000000b182630353c43444038352b1e12050000000b182630353c43444038352b1e1205000000000000000000000000000000071c3043546c8197acc5c8b39e88738499aec9b09b86715a4935200c00000000000c21364b61768a9fb4c8b39d8873859ab0c5bbaa927c67523827150200000000000000000000001c31465c71869bb1c4af9a856f5a45301a0500081b2e3e4d63788b9fb4bdb1acb3b8baa998826d5b4a3621110000152a3f546a7f94a9bfb6a08b76614b36210c000000000000000d21364a5c72879cb2c5ab96806b667c91a8b6a58e79644f3924354b6074889eb3b09b867161768a9fb4b5a48d78634e38230e000000000000000000000000000000000a1a2736434b5d65747f89939ca4aaafb4bac7bdbebfc0bfbec8bbb4b1aba9b4bcc9b6a599837360544330251506000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400081d314455758a9fb4cabbaa8c77614c37220f0000000005132330414d5f677d8d9fabbcbbb4b4bab49f8b78634d3d2c1a0600000000000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b06000000000000000000000000000000000000000000000008141c20272d2e2b2220190e00000000000008141c20272d2e2b2220190e00000000000008141c20272d2e2b2220190e00000000000000000000000000000000000b20354a6074889db2c8c3ae99836e7e93abbcb5a38d78624d38230e000000000316283952677c91a9bac5ad97826d8096abc6c8ad98836e5645311d0900000000000000000000001c31465c71869bb1c4af9a856f5a45301a05000922374b5c6e8398a9bab19f979ea7b8b49f8c79634e3f2f180800152a3f546a7f94a9bfb6a08b76614b36210c000000000000000f24394e64798ea5b6b9a78f7a656075899eb4ab95806b563d2d3650657a8fa6b8aa947f6a576f849aafc2a9947f6a543c2b190500000000000000000000000000000a1a28384554606a7b86949ea7b1b6c2c5c4bec9bcb4b4b3b4bbc8bdc2c6c0becacfc7b29d87766057483b2b1d0d00000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e2914000b20354b60758aa8b9cab49f8a75604b35200b00000005132330414d5f677d8d9fabbcbbaa9f9fa9baa998836e5b4936210b00000000000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b0600000000000000000000000000000000000000000000000001080b121819160d0b05000000000000000001080b121819160d0b05000000000000000001080b121819160d0b050000000000000000000000000000000000000f243a4f647a8fa6b7cbc2a8937e68778b9fb4c1a9947f69543c2b1906000000091e3245576e8398aec7b9a7917c667b90a8b9c9b49e8975604b36200b00000000000000000000001c31465c71869bb1c4af9a856f5a45301a00091930414f647a8fa0b2c0ac9782899eb3bcab99846f5d4b36251300152a3f546a7f94a9bfb6a08b76614b36210c000000000000061a2c3d556a8095aac3b39e897560566e8398adb29c87725c4a3643546c8196acb6a48e796353697e93a8c2b09b86715a4835200b0000000000000000000000000008182838455660727f8c9ca4b3b8c5c7bab4aea9a4ab9f9e9e9faaa4a8adb3b9c5c9d2cab6a59882756259483b2a1c0c000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400081d31445574899eb4c9b49f89745746321e0a000004122330414d5f677d8c9fabbcbcab9f8b8b9fb4b59f8c79634e39291703000000000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d566b8095abc4c9b5a48d786270859aafc8b09b86715a4935200b0000000b21364b60758a9fb4c9b39e89756075899eb4c9b9a8907b665036251300000000000000000000001c31465c71869bb1c4af9a856f5a45301a021527374d5f70859bb0beb4a28e798096aabbb3a1907b655443301c0a152a3f546a7f94a9bfb6a08b76614b36210c0000000000000c2135495b71869cb1c9ad98836e5551677c91a9b6a58e79644e394a6073889db2b19c87725b4d62788da4b6b5a38d78624d38220d000000000000000000000000001325364556607483959fabb6c2c4b7b2a99f99948f8c8a89898a8b8e93989ea7b1b5c2ccc3b2a09886776259483a2918080000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400011527375d72879cb2c7baa98b76614b36210c0004122330414d5f677d8c9faabbbcab9f8d7d8196a9baab97826c5746331e0a000000000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e111315161616151412100c0a04000000000000000000000000000000000000000000000000000000000c2135495b72879cb1c7c6b19c86715a687e93aabbb5a38d78624d38230e00000216283851677c91a8bac5ad98826d566e8399aec9c6ac97816c5443301c07000000000000000000001c31465c71869bb1c4af9a856f5a45301a081d314455677c91a2b4c0af9a846f788b9fb4bfb09b8572604a382715152a3f546a7f94a9bfb6a08b76614b36210c0000000000000e23384e63788da4b5bcab927d67524b61768a9fb4aa95806b553d4f647a8fa6b7ab95806b56485a71869cb1c1a9937e69543b2a180500000000000000000000000a1c30435460748399a1b4bcc8bbb4a69d948a847e7a777574747476797d8289929ba3b3b8c5beb2a49c86776258473625130000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e29140000192e43596e8398aec7c7a48f7a654f38281502122230414d5f677d8c9faabbbcab9f8d7e68788b9fb4b49f8a76614b36210c000000000000000000000000000000000000000000000000000003192e43586e8398adc3c5b09a85705b45301b00000000000000000000000000000000000000000000000000000000000000000000000000000001080b10151d202326292a2b2c2b2b292725211f17130c0b040000000000000000000000000000000000000000000000000e23384e63788da4b6cac5ab95806b5661778b9fb4c1a9947f69543c2b190600091e3245566e8398adc6b9a7907b6653687d92abbcc8b39d8874604a35200b000000000000000000001c31465c71869bb1c4af9a856f5a45301a17293a4b6074879cb2c0b4a2907b656e8398abbcb5a3927d675645311d152a3f546a7f94a9bfb6a08b76614b36210c000000000005192b3c556a7f94aac2b49f8b77614c46576e8399aeb19c87725b4a566b8096abb7a68f7a644f3c566b8095abc5b09a85705947341f0b000000000000000000000a1a2e3f4a60728298a2b2bfc4b7aa9f95887e766f696562595f5e586164686d757c86929ea7b5c1c2b5a49c8676615443301c0e00000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e2914000013283e53687d93a9bac0ab95806b5645321d122230404d5f677d8c9faabbbbb59f8d7e685f6d8298adbaa9927d6852382715020000000000000000000000000000000000000000000000000005182a3b586e8398adc3c5b09a85705b3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000609141d2025273136393b3e3f404141403f3c3a36332928221f180c0801000000000000000000000000000000000000000005182a3b54697f94a9c2ccb8a78f7a654f596f849aafc8b09b85705a4835200b000b21364b6075899eb4c9b39e8975604c62778b9fb5cab7a68f7a644f3a250f000000000000000000001c31465c71869bb1c4af9a856f5a45301a1f334658697e93a5b6bcab9a846f5d64798c9fb4c1b29d8774604b3a29172a3f546a7f94a9bfb6a08b76614b36210c00000000000b2035485a71869bb0c5b09b857058473952677d92aab6a48e79634e5c72879db2b29d8874604a3a4f657a8fa7b8b49f8b77624c37220d000000000000000000021528384b5d6a8095a0b2c0c3b7a69d8b8075696158544f4c483b3a464c4f53566067737d899ba3b4c0c2b6a4998372604a3c2c1906000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400000c22374c61778a9fb4c6b29d8875604b3d2c2230404d5e677d8c9faabbbbae9d937e696050667b90a6b8ae99846f5645311d0900000000000000000000000000000000000000000000000000091f3448596e8398adc3c5b09b85705b4936211300000000000000000000000000000000000000000000000000000000000000000000070e1a212631353b38454b4e5153555556565554524f4c463a3d37342a201d1409010000000000000000000000000000000000000b1f34475970859bb0c5c8b39e8874604b53687e93aabbb5a38d78624d38230e0215283851667c91a8b9c5ad97826d56485971869bb0c6c4ab95806b563d2c1a060000000000000000001c31465c71869bb1c4af9a856f5a4530192b3c4c6176899eb3c3b59f8d7a644e5c6d8298a9bab7a5937e695846331f2a3f546a7f94a9bfb6a08b76614b36210c00000000000d22384d62788da3b5c4aa947f6a553a364c61768a9fb4aa95806a5564798ea5b6ac97816c5443354b6074889eb3bcab937e68533a2917040000000000000000091d324556647a8c9fb4bec5b7a59d887b6b60564c473a3a37342a2933363938454b54606878859aa2b4c2c2b3a1947f6a5b49352111000000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e291400000b1f3447596c8197a8b9b7a6947f695b493b30404d5e667d8c9faabbbcae9d947f69604e4b6074889eb3b49e8975604b36200b00000000000000000000000000000000000000000000000009192e3f4c6277899eb3c9c9b49f8b79634e41301b0b00000000000000000000000000000000000000000000000000000000000000040f1a212c3537444b505656606366686a6b6b6b6a696765615858524c473b3531261d140900000000000000000000000000000000000d22374c62778b9fb4cac8ad98826d54434c61778b9fb4c1a9947f69543c2b19091d3245566d8398adc6b8a7907b66513b556a7f95aac4c7b19c87725b4935210c0000000000000000001c31465c71869bb1c4af9a856f5a45302035485a6b8096a7b8baa897826d5c4a4d62788a9fb4c3b39e8976614c3b2b2a3f546a7f94a9bfb6a08b76614b36210c0000000005182b3b54697e94a9c1b7a68e79644e393346586f8499afb19c86715b6b8095aab8a7907b6550363144556d8298adc8af9a846f5847331f0a000000000000000417293a4b6074879caabbccb9a79d8778655d4b4538332925221f18171f2124283236434a5a6275849aa4b6c7bfb49f8b79634d3f2e1c080000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273c52677c91a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e2914000004182a3b4d62788a9eb4beb49f8a79635949404c5e667c8c9faabbbcaf9d947f6a614f4244556e8398adb9a88f7a644f3a250f0000000000000000000000000000000000000000000000021527374b5d6d8298a7b9cccebbaa9a84705f4d3929170300000000000000000000000000000000000000000000000000000000000c171f2d363d494e5560656b7075787b7e7f808180807e7c7a76726d686159514b4437312619110300000000000000000000000000000317293953687d93abbccebbaa917c67523647586f849aafc8b09b85705a4835200b20364b6075899eb3c8b39e8975604b394f64798ea6b7cab6a48d78634e38230e0000000000000000001c31465c71869bb1c4af9a856f5a45302d3e4d62788b9fb4c4b49f8a77624d3e485a6b8095a7b8b8a795806b5948342a3f546a7f94a9bfb6a08b76614b36210c000000000b2034485970859ab0c5b29d88735c4a36293a53687d92aab5a48d786371869cb1b39e8974604b35263752677c91aabbb49f8a76614c37210c000000000000000a1f3347586a7f94a5b6c8beb39e8979635a4b3f32281f17100d0b05040a0c0f151d25303c48576175869ca9bacdbbaa99836e5d4b37230d0000000000000f24394f64798ea4b9c2ad97826d58422d1803000012273d52677c92a7bcc0aa95806b55402b1600000014293e53697e93a8bebea9937e69543e29140000000c2035485a687e93a0b2baa89c8777635b4e5e667c8c9faabbbcaf9e957f6a614f43323753687d93a8c6a8937e69533e29140000000000000000000000000000000000000000000000081d314455657b8fa0b2c5c8c4c8b4a2927d675746331e0f00000000000000000000000000000000000000000000000000000003111c29333d4a4e5b636c747b81858a8e9093949596969594918f8b88837d776f6760554b44372f1e160b000000000000000000000000000a1e3346576f8499afc9cab49f8b76614c373a53687d92aabbb5a38d78624d382215273751667b91a8b9c5ad97826d5544354a6074889db3c8c2a9947f6a543b2a180500000000000000001c31465c71869bb1c4af9a856f5a4530364a5c6d8298a9bab7a695806b5948343c4c6176899eb3c3b49f8a78624d3d2d3f546a7f94a9bfb6a08b76614b36210c000000000d22374c62778b9fb4c7ac97826c573e2d22374c61778b9fb4aa947f6a788da4b6ad98826d55443121364c61768a9fb4bbaa927d6752392816030000000000011527374c6176899eb3c3c7b2a0907c665b493c2e1e160a0400000000000000000208131c2b39465763798b9fb4c3c8b3a18f7b65503b2b190500000000000f24394f64798ea4b9c2ad97826d58422d1800000013283d53687d92a8bdc1ac96816c57362513000000152a3f546a7f94a9bfbda7927d68523d281300000005192b3c4e606d8298a1b2b6a59c8779685f667c8c9faabbbdb09e95806b6150433224394e63798eabbcac97816c57422c170200000000000000000000000000000000000000000005192b3b4b6074869cb1beb7b3afb3bfb39d8876614c3d2d1808000000000000000000000000000000000000000000000000000614212e3a464c5b636e78818890969b9fa9a6a8aaaaababaaa9a7a4a59d98928b847c746860554c3f32281b0b0000000000000000000000000c21364b61768a9fb4c9c5b09a8570584733374c61768a9fb4c1a9947e69543c2b1d3144556d8298adc6b8a7907b6650373043546d8297acc7c5b09b85705948341f0b00000000000000001c31465c71869bb1c4af9a856f5a4530404f647a8d9fb5c2b39d8875614b3b2b334658697e93a5b6baa997826d5b4a363f546a7f94a9bfb6a08b76614b36210c00000004172a3a53687e93abbcbaa9917c66513c261f3347586f859aafb09b86717f94a9baa9917c665137271f33465870859aafc8ae99836e5746321e090000000000081d3144556a7f94a8b9ccbaa998826d5e4c3d2c1e1003000000000000000000000000000e1b2939495b6a7f94a5b7cbbfae99836e594834200b00000000000f24394f64798ea4b9c2ad97826d583727180b0000142a3f54697f94a9bec3ae99836e5443301c090003162939566b8196abc0c9a6917b66513c2611000000000e1e31424b60738398a0b4b6a59c8a7d707c8b9faabbbdb09f96806b625043332521364b60768b9fb5af99846f5a442f1a050000000000000000000000000000000000000000000a20344859697f94a4b6b7a69d99a1b3b7a696816c5c4a362513000000000000000000000000000000000000000000000000081624313f4b58616c79838c969ea7abb0b4bac7bdbfbfbfbfbfbebcc3b7b2adaa9f9991877d73655d4b4639281603000000000000000000000215273752677c91a9bacdc3a9947f69543a293347586f8499afc7b09b85705a483520364b6075899eb3c8b39e8974604b35253651667c91a9bacab59f8b77624c37220d00000000000000001c31465c71869bb1c4af9a856f5a45374c5e70849aabbcb5a4937d685746321d293a4b6074879cb2c1b49f8c79634e3f3f546a7f94a9bfb6a08b76614b36210c0000000a1f3347586f849aafc9b49f8a76614b3621182a3a53697e93abb49f8b76859bb0b49f8a76604b362117293a54697e94a9c3b49f8a76614b36210c00000000000b20354b6074879db2c6c9b49f8b78624d402f1f0e000000000000000000000000000000000b1b2c3d4b6074879db2c6cab49f8b78624d37220d00000000000f24394f64798ea4b9c2ad97826d554436291b12121a2e3f586d8297adc2c8b39e8874604a37261812131e3246576f849aafc4bcab8f7a654f3a25100000000000141d314455607482949fa9b5a89e92858b9fa9babdb19f96816c6251443325151e32455672889da5a59b86715c46311c0700000000000000000000000000000000000000000a1a2f404d62788a9eb4c2b39d888499afc3b49f8c79645443301c0c0000000000000000000000000000000000000000000007162633424e5d6576818c999fabb3b8c5c7bab4b0adabaaa9aaacadb1b4bbc8c8bbb4afa59d93867b6d615746321e0900000000000000000000081d3144556d8398adc7cab7a58e79634e39232a3a52687d92a9bab5a38d78624d38273751667b90a7b9c5ac97826d55443121364b61768a9fb4c9bcab937d685339291703000000000000001c31465c71869bb1c4af9a856f5a454455667c91a2b4bfb19c8673604b3929161d314556677c91a3b5bcab99846f5d4b36546a7f94a9bfb6a08b76614b36210c0000000c21374c61778b9fb4c4af9a846f5746321e0d22374d62778c9fb5ab917c8c9fb4ae99836e5745321e0e23384e63788da4b6baa9917c6751382815020000000010263b50657b90a6b7cbc2ac97816c59483422120000000000000000000000000000000000000f1d314556697e93a8bacdbbaa957f6a553a2a1804000000000f24394f64798ea4b9c5b09b8574605446392e28272b384b5d72879cb2c7c7b8a6907b655544342b27282e3c4b6176899eb4c9b49f8b76614c36210c0000000000021527374556606d7f8b9ba3b1b4a39b9fa9babeb19f97816c62514434261603162838576c818f90909086725d47321d0800000000000000000000000000000000000000021528384c5e6e8398a8b9baa9957f7c91a5b7bbaa9b8572604a3a291704000000000000000000000000000000000000000005152533445160697b87979faab5bcc3b6b2aba99f9b989695949596989b9faaabb2b7c4c3b6b2a49c908175614b36210c000000000000000000000b20364b6075899eb3c9c7b29d87725b4a362121364c61768a9fb4c1a9947e69543c3144556d8297adc5b8a7907b655037271e3246576f849aafc4c9af99846f5746331e0a000000000000001c31465c71869bb1c4af9a856f5a394b6074869cb1c0b3a1907b665544311b0b1527384d5f70859bb0bfb3a18f7b655443546a7f94a9bfb6a08b76614b36210c00000317293953687d92aabbc2a8937e69533928160b2034485970859bb0b09b869baabbaa927d68523928160c2135495b72879cb2c7ad98836e5645321d0900000005192b3c576c8297acc4cab6a48e79644e3b2b1904000000000000000000000000000000000000021527384c61768a9fb4c9c8b09b85705847331f0a000000000f24394f64798ea4b9c8b4a398827261574b3f3d3c3c4856657b8fa5b6b6b2acb09b8573604c483b3c3d3f4b5a697e93a8b9c9b19c86715746331e0a00000000000009192838454b616a7985919ca4b4b0b4babeb2a0978172604a4434261608000b20354b60737a7b7b7b7b65503a25100000000000000000000000000000000000000000091d324556657b90a0b2c6b49f8a7773879db2c4b4a2927d685847331f1000000000000000000000000000000000000000011323334351626b7e8d9da5b4bbc2b5b1a59d958f898583807f7f808183868a8f969da6b0b4c0c2b6b19f8f7a644f3a250f0000000000000000000013253650657b90a7b9ccc6ac96816c573d2d1a1f3346586f8499aec7b09b85705a48354b6074899eb3c8b39e8874604b352016293954697e93a9c2c9b49f8a76614b36210c000000000000001c31465c71869bb1c4af9a856f5a4657687e93a4b6bbaa99846f5e4c372614000a1a30414f657a8fa1b3bfb09b8572604a546a7f94a9bfb6a08b76614b36210c00000a1e3346576f8499aec8b6a48d78624d38230d05182b3b54697e94a9b5a39ba3b5b49f8b76614c37210c061a2c3d566b8196abc5b49e8975604b36200b0000000b2035485a73889db2c8c6b19c86715c4a361d0d00000000000000000000000000000000000000000a1f3346586e8398aec3cab49f8b77614c37220c000000000f24394f64798ea4b9d1c1b2a0988275655d555252545a6274869cb1b6a59d979fa396806e6259545252555d6578899eb3c6bcab96816b5639291703000000000000000a1a2832434f5b63727d869cb1c5c9bfb2a0988272605443302616080000081d3144556065666666655d4b37230e0000000000000000000000000000000000000006192b3c4b6074879cb2bebaa996816c697e93a6b7c0b39e8876614c3e2d18080000000000000000000000000000000000000f1f314150616b80939fabb7c3bab4a49c9187807a75706d6b6a6a6a6c6d71757a8188919ba2b1bdc9bda48f7a644f3a250f000000000000000000071c3043546c8197acc5cdbaa8907b66503b261117293a52677d92a9bab4a38d78624d3750657b90a7b8c5ac97826c5544311d0d23384d62788da4b6cabaa9917c6752372715020000000000001c31465c71869bb1c4af9a856f5a4c6176889eb3c2b49f8c79634e402f190900001323374b5d6e8399aabbb5a3917c6755546a7f94a9bfb6a08b76614b36210c00000c21364c61768a9fb4c7b19c87725a4935200c000d23384d62788da3b5b5b0b5c1af9a846f5847331f0a0010253b50657b90a7b9b9a8907b66513727150100000d22384d62788da6b7cbc0ab96816b563e2d1a0000000000000000000000000000000000000000000417293a52687d92a7c5cfbcab917c67523c2712000000000f24394f64798ea4b9cebbaa9fa098867b716a6767696e78849aa4b5b29d878297a99e9682776e6967686a707b889da7b9c6b59f8c78634e38230e0000000000000000000a151d323d4a54606e8398aec3c0b3a19882736054433625130800000001152737444b50505050504b3f2e1c08000000000000000000000000000000000000000a2035485a6a7f94a4b6c4b49f8a77626075889db3c1b8a797816c5c4a362614010000000000000000000000000000000009192c3d4e5f6a7f959eb4bcc3b7a99f93867c746b646055585655545557585660646b737c85979fb1c5b9a48f7a644f3a250f0000000000000000000b20354a6074889db2c8c9b49f8975604b36210b0c21364c61768a9fb4c1a9947e695444556c8297acc5b8a6907b65503727150c2035495a72879cb1c7c7ad98836d5544311d080000000000001c31465c71869bb1c4af9a856f5a596b8095a6b8b9a897826c5b4a362211000000081c2e3f4e63798c9fb4c1b29d877460546a7f94a9bfb6a08b76614b36210c000316283952677c92a9bac6ab96816b563c2c1906000b2035485a71869bb0c6c6c9c1a8937e69533a2a1704000b20354b6075899eb3c6ad97826d5544311d08000012273c52677c91a7c4d4c7a6917c66513c2711000000000000000000000000000000000000000000000e23384d63788da7b9ccc9aa95806b55402b16000000000f24394f64798ea4b9c5b49f8a9ea49c8f86807d7c7e838b9aa2b4b8a7947f788a9fb4a0988a837e7c7d7f858f9da6b7c5b9a899846f5b4935210c0000000000000000000002151f334758677d92a0b2c2b4a299837360554436261808000000000009192731353a3b3b3b3a372e2111000000000000000000000000000000000000000a1a2f404d62788a9fb4c3b7a695806b5956687d92a3b5c5b49f8c7a645443301c0c00000000000000000000000000000001142637495b687d929dafbcc3b6a59d8b7e736660544f4b443741403f404138454b4f546066708197acc1b9a48f7a644f3a250f0000000000000000000f243a4f64798fa6b7cbc3ae99846e5645321e090a1e3346576e8399aec7b09b85705a4b6074889eb3c8b39e8874604b35200b06192c3c566b8096abc5c9b39e8975604b36200b0000000000001c31465c71869bb1c4af9a856f5a62788a9fb4c4b49e8a77624c3d2d1a0300000000112135495b6c8197a8b9b6a5937e69576a7f94a9bfb6a08b76614b36210c00091e3245576e8398aec7b9a8907a65503b2510000006192b3c556a7f94aac2d3c9b5a38d78624d38220d0000081d3144556e8398adc9b39e8974604b35200b0000152a40556a7f95aabfcebaa98d78624d38220d000000000000000000000000000000000000000000000b20354a6074899eb3c9c3ae99836e59442e19040000000f24394f64798ea4b9b8a7907b899ea8a39b95929193989fa9b4bcb39e8976687e939eb4a99f99939192959aa2b2b7c4baab9e8978624d3d2c1a06000000000000000000000417293a4c6176889eb3beb6a49a8474605544372618080000000000000009151d202526262625231c1103000000000000000000000000000000000000031628384c5e6e8399a9bac0b29d8875614b4a6072859babbcbcab9b8573604b3a2a18040000000000000000000000000000081d31445563798a9fb4bbc5b6a59c877a6960554b43363531272b2a2a2b2c27313636434a566b8196abc0b9a48f7a644f3a250f000000000000000006192c3c556b8095aac4d2c2a8937e6853382816020317293952677d92a9bab59f8c786250657b90a6b8c4ac97816c5544311d080010253a50657a8fa7b9ccb9a7907b65503625130000000000001c31465c71869bb1c4af9a856f5c6d8298a9bab7a6957f6a5948341f0f0000000000061a2c3d4c62778a9eb4c3b39e8876616a7f94a9bfb6a08b76614b36210c000b21364b60758a9fb4c1b39e8975604b36200b0000000e23384e63788da4b6c3c8b09b86715a4834200b00000115273752677d92abbcb8a7907b65503625130000182d42586d8297adc2c9b49f8a75604a35200b00000000000000000000000000000000000000000000071c30435471869bb0c6c7b19c87725c47321d000000000f24394f64798ea4b9b39e88737b8a9ca4b0aaa7a7a9aeb4babab49e917d67606b80949faab4aea9a7a7aab0b4c0bfb3a99f8d7d675a48351f0e00000000000000000000000a1f3346586b8096a7b8baa99c86766156453727190900000000000000000001080b10111111100e080000000000000000000000000000000000000000091e324556667c91a1b3c7b4a2927d6757464354647a8d9fb5c6b5a3937e685947341f1000000000000000000000000000031729394b6073859ba8baccb8a79c8778645c4b44373026201d151615151517151d20253041566b8196abc0b9a48f7a644f3a250f00000000000000000c2035495a71869cb1c6c9b5a38c77624d37220d00000c21364b61768a9fb4bcab947e69546c8197acc5b8a6907b655037261401000b20354b6075899eb3c9c5ac97816c5443301c0700000000001c31465c71869bb1c4af9a856f647a8c9fb4c1b29d8875604b3b2a18010000000000000f1f3448596a8095a6b7b8a795806b6a7f94a9bfb6a08b76614b36210c0011273c51667c91a8ababab98836e5544311d080000000c2135495b71869caeaeaeaa947f6a553c2b19050000000c21374c61778b9fababab97816c5443301c07001a2f455a6f849aafc4c7b29d87725443301c070000000000000000000000000000000000000000000000132536596e8499aec3c8b39e89735e382815020000000f24394f64798ea4abab9b8570647986979faab1b4bbbcb5b1a99f93806b5f51626b7f8c9aa2abb0b4bac6b9b4b0aaa1998a7c675f4d3c2b190000000000000000000000000c21364c61768a9eb4c5b49f8b7963584638281909000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4b6075879db2bfbcab9a85705f4d39364b5c6d8298a8b9c1b39e8977614c3f2e19090000000000000000000000000a1e334657697e93a3b5c6beb39e8979635a4a3d31261c140b0801000000000002090b132c41566b8196abc0b9a48f7a644f3a250f00000000000000000e23384d63788da4b6c9c6b19b8671594834200b00000a1e3346576e8399aec6b09b85706074889db3c8b39e8874604b35200b0000081d3144556e8398adc9c8b29d8874604a35200b00000000001c31465c71869bb1c4af9a856f6f849aabbcb5a3927d685745321d0d0000000000000005182a3b4b6175889db3c2b49f8a776a7f94a9bfb6a08b76614b36210c00182e43586d839696969696907c665137271502000000061a2c3d546a7f94989898988c78634d38230e000000000a1f3347586e8393969696968872604a35200b001b30465b70859bb0c5c6b09b86715b362513000000000000000000000000000000000000000000000000182d42586d8297adc2c9b49f8a745645321d090000000f24394f64798e96969694806b5b6375818b959c9faaab9f9c968b7e6b62504451616a7a848e959b9fa9a2a89e9b958e8379665e4d41301e0e00000000000000000000000114263653687d93a8b9b9a795806a5b4a3a291a0a000000000000090702000000000000000000000000000000000000000000000000000000000000000b2135495b6b8095a5b7c5b49f8c7a644f41302e3e4d62778a9eb4c3b8a797826d5d4b3727150100000000000000000000011527374c6176899eb3c1c7b2a0917c665b493c2d1d1409010000000000000000000000162c41566b8196abc0b9a48f7a644f3a250f0000000000000004182a3b54697f94a9c2d3c5aa95806b553b2b190500000317293952677c91a8bab59f8c78657a8fa6b8c4ac97816c5544311d0800000115273752677d92abbccbb7a68f79644f3a240f00000000001c31465c71869bb1c4af9a846f7b90a2b4bfb19b8573604b3928160000000000000000000d1e324657687e93a4b6baa897826d7f94a9bfb6a08b76614b36210c00152b40556a8081818181807b665e4c38190900000000000f20354b60737f838383827b655a4935200c0000000004172a3a4b61757e818181818177614c37220c001c31475c71869cb1c6c5b09b85705b46301b000000000000000000000000000000000000000000000002172c42576c8197acc1cebaa98b75604b36200b0000000d22384d6278818181817e74604b56606c7880868a8c8c8b8780786960504434434f5c646f798086898b8c8b898680796e635b4c40302312000000000000000000000000081c3043546e8399aec6b39e8976614b3d2d1c0c000000010a10121e1c18130f0b0801000000000000000000000000000000000000000000000000000b1b30414e63798b9fb4c3b9a797826d5c4a3623203448596a7f95a5b7c5b59f8d7a655544311d0d00000000000000000000081d314455697f94a7b8ccbaa998826d5e4c3c2c1d0f010000000000000000050b0d1010162c41566b8196abc0b9a48f7a644f3a250f000000000000000b1f34475970859bb0c5ccb8a78f7a644f3a250f000000000c21364b61768a9fb4bcab937e6c8196acc4b7a68f7a6550372614010000000c21374c61778b9fb4cac4aa95806b553c2c1906000000001c31465c71869bb1c3ae998475869cb1c0b3a1907b655443301b0a000000000000000000031628394b6073869cb1c0b49f8c797e94a9beb6a08b76614b36210c0013283c50616a6c6c6c6c6b655e4c402f1d000000000000081d314455606a6e6e6e6d655d4c3c2c190600000000000c1e32465761696c6c6c6c6c615947341f0b001c32475c71879cb1c6c5b09a85705b45301b060000000000000000000000000000000000000000000002172c41576c8196acc1d7c7a08b76614b36210c0000000b2034485a626c6c6c6c69605645454b5b636b7175777775716b625a4f423326323e4a4f5c646b707576777674716b645c4e493d302212050000000000000000000000000b20354b6074899eb3c1ac97816c5746321f0f00000005131e252733312d2824201d15090000000000000000000000000000000000000000000000031629394d5f6f849aa9bac2b39e8977614c3e2d1b182b3b4b6075879db2c0bcab9c8673604b3b2b18050000000000000000000b20354b6074879db2c5c9b49f8a78624d402f1e0e0000000000000000000e1920222525252c41566b8196abc0b9a48f7a644f3a250f000000000000000c22374c61778b9fb4cac8b39e8874604b35200b00000000091e3246576e8398aec6b09a8574889db2c8b39d8874604b35200b000000000a1f33475870859bb0c5c6b19c86715a4935200c000000001c31465c71869bb1c2ad98827e93a4b5bbaa99836e5d4b36261400000000000000000000000b1d314455667c91a2b4bbaa99837e93a8bdb6a08b76614b36210c000d21334350555656565656504c402f221200000000000001152737444b5559595958504c3f2f1e0e00000000000003162839464b5456565656564c473b2a1804001b31465b70869bb0c5c6b09b86715b46311c000000000000000000000000000000000000000000000002182d42576d8297acc2cdbaa98a75604a35200b00000005192b3c484d56565656544b4538323d494e56556061626056564d483c322416202d363e4a4f565460616260565b554f4a3e362c1f1204000000000000000000000000000d22374c62778ca7b9bba6917c665139291601000000132330393c4846423e393531271909000000000000000000000000000000000000000000000a1e324657677c91a1b3c7b6a4947e6959473420100d1e324556677c91a2b4c8b5a4937e69594834201100000000000000000011263b50667b90a6b7cbc2ac97816c5a48342212000000000000000004121e2b35383a3a3a3a41566b8196abc0b9a48f7a644f3a250f0000000000000316293953687d92abbccfc8ad98826d5443301c08000000000316283951677c91a8b9b49f8c7b90a6b7c4ac96816c5443301c080000000004172a3a556a7f94aac3c9b5a48d78634d38230e000000001c31465c71869bb1c2ad9882889db3c2b49f8b79634e3f2e18080000000000000000000000011426374c5e70849aafbeb3a1978297acc1b6a08b76614b36210c00041525333c4041414141413b382f2112040000000000000009192731353f434343433b382f211100000000000000000b1b2832363e414141414137342a1d0c00001b30455a70859aafc5c7b19c87725c3a2a18040000000000000000000000000000000000000000000004192e43596e8398aec3c9b49f89745443301c07000000000d1d2b3438414141413f3632281e2c353837444b4c4c4b453838352b1e1406101b222d363936434b4c4d4b45384039362d211a0f0100000000000000000000000000000f24394e64798ea3c5b8a38d78634e38230e0000000a1b30414d525e5c57534f4b44372715010000000000000000000000000000000000000000071a2d3d4b6175889db2bfbfb19c8674604b3b2a1802021628384d5f70849aaabbc2b49e8a77624c3f2f190900000000000000061a2c3d576d8297acc4c9b5a48e79634e3c2b1904000000000000000012222f3c484d4f4f4f4f4f566b8196abc0b9a48f7a644f3a250f0000000000000a1e3246576f8499aec9cebbaa917c67523626140100000000000b21364b6075899eb4bbaa9b859bb0c4b7a68f7a65503626140100000000000e24394e63798ea5b7cac2a9947f69543b2a18040000001c31465c71869bb1c6b49e899da6b7b9a896816c5b4935211100000000000000000000000000091930404f647a8fa0b2bfb49f8a9fb4c9b6a08b76614b36210c0000071521282b2c2c2c2c2b26231c110300000000000000000009151d202a2e2e2e2d26231c11030000000000000000000b161e21292c2c2c2c2c221f180c000000182e43586d8398adc2c9b49e89745947341f0a0000000000000000000000000000000000000000000005182a3b5b70859bb0c5c7b29d87725d4825130000000000000d1920222c2c2c2c29211e160e1a212327313637373631272220190e00000007101b222426303536373632282b24221b10060000000000000000000000000000000010253a4f657a8fa4bab7a28c77624d37220d0000031628394d5f6773716d6864605544311d0800000000000000000000000000000000000000000b21364a5b6b8096a6b7c7b3a1907b665544311d0c00000a1a30414e64798c9fb4c5b9a898826d5d4b372715020000000000000c2135495b73889eb3c8c6b19c86715b4a361d0d0000000000000000091c2f404c5a626565656565656b8196abc0b9a48f7a644f3a250f0000000000000c21364b61768a9fb4c9cab49f8a76614c36210c000000000000091e3245576e8398adc6b4a29ba2b4c8b39d8874604b35200b0000000000000c21364a5b72879db2c7c5b09a85705947341f0b0000001c31465c71869bb1c6b9a89ea8b7c3b39e8977614c3d2c1a0300000000000000000000000000001222364a5c6e8398a9babaa99fa9bacdb6a08b76614b36210c000000040d13151717171716100e0900000000000000000000000001080b1519191918100e0900000000000000000000000003090c1417171717170c0b0400000000162b40556b8095aac0cdb9a88c77614c37220c000000000000000000000000000000000000000000000b1f34485973889db3c8c4af9a856f5a45301a00000000000000050b0d17171717140b090200060c0e151d202222201d150d0b05000000000000070d0f141c202122211e16160f0d070000000000000000000000000000000000000e23394e63788ea3c2b9a38e79644e39241203000a1e324557677d8886827d7a73604b35200b000000000000000000000000000000000000000b1b30414e63798c9fb4c4baa999836f5e4c372715000000001221364a5c6c8197a7b9c6b2a0907b655544311d0e0000000000000e23384e63788da6b8cbc0ab95806b563d2d1a0000000000000000000f23384c5e66787a7a7a7a7a7a7a8298adc3b9a48f7a644f3a250f00000000000115273751677c91a9bacdc5af9a85705846331f0a0000000000000316283951667c91a8b9c0b4b0b4c0c4ac96816c5443301c08000000000000071a2d3d576c8197acc7cab49f8b77614c37220c0000001c31465c71869bb1c6c6b9b4b9c6b7a5947f6a5847331f0f000000000000000000000000000000071b2e3e4d63788b9fb4c5bab4bac7d7b6a08b76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7c5d6c6a5907b65503b2610000000000000000000000000000000000000000000000d22374c62778ca6b7cbc1ac97826c57422d170200000000000000000001010101000000000000000002080b0c0d0b090200000000000000000000000001080b0c0d0b0903000000000000000000000000000000000000000000000c21374c61768ca4b6bda8937d685340301e16151a28394b6075899d9b97938e7a644f3a240f0000000000000000000000000000000000000417293a4d5f70849aaabbc4b49f8b78634d402f190900000000071a2d3d4c6177899eb3c2beb19c8674604b3c2b1905000000000013283d52687d92a7c4d5c6a6907b66513b261100000000000000000011263b50667c8c8f8f8f8f8f8f8f98a0b2c6b9a48f7a644f3a250f0000000000081d3144556d8298adc7d4c3a9947f69543a291704000000000000000b21364b6075899eb4c9c8c5c8cbb7a68f7a654f362614010000000000000011263b51667b90a9bacdbcab927d68533928160300001c31465c71869bb1c6d6cdc9cdc1b29d8775604b3a2a180100000000000000000000000000000000102035495a6c8196a7b9ccc9cdd7cbb6a08b76614b36210c00000000000000000000000000000000000000000000000000000000040a0c0f111213131312110f0d0b0700000000000000000000000000000000000000000000000e23394e63798ea7b9ccbfaa947f6a553b2b190500000000000000000000000000000000000000000215273751667c91a6c4d4c3a8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475872879cb1c9af9a85705e4c3e32282a2d384657687e93a7b1ac9f8b76614b36210c000000000000000000000000000000000000081f334658677d92a2b4c8b8a696806b5b493522120000000000000f1f334758697e93a4b6cab6a4947f6a5a483520110000000000162b40566b8095abc0ccb9a88c77614c37220c000000000000000001162b40566b8095aba4a4a4a4a4a4adb2becfb9a48f7a644f3a250f00000000000b20354b6074899eb3c8cab6a58e78634e39230e0000000000000000091e3245566d8398adc6d6daddc8b29d8873604a35200b00000000000000000b21364b60758a9fb4c9c9ae99846f5746321e0900001c31465c71869bb1c6dbe1dec9b5a3927d675645321c0c000000000000000000000000000000000006192c3c4c6176899eb3c3d4e2eacbb6a08b76614b36210c000000000000000000000000000000000000000000000002090b1116171f2124262728282827262422201c13120d0b050000000000000000000000000000000000000b20354a6074899eb3c9c5b09b8570594834200a0000000000000000000000000000000000000000081d3144556c8297acc1cbb7a58e78634e39230e0000000000000812181a20202020201d12100a01000000000000000000000000000000000000000000000000000002090b171f202020202014120c020000000000000000000000000417293a566b8096abbcb4a2917c665c4b4639403e4a566175879db2c3b09b85705746321e0a000000000000000000000000000000000008182d3e4c6176889db3c0c1b39d8876614c3c2c190400000000000004182a3a4b6074869cb1bfc2b49e8a78624d402f1a0a00000000192e43596e8398aec3c9b49e89745947341f0b000000000000000001162b40566b8095abc9babababababfbfbfbfb9a48f7a644f3a250f000000000010263b50657b90a7b8ccc7b29d87725b4935210c00000000000000000216283851667c91a8b9cce1d4c4ab96816c5443301c070000000000000000091e3245566f8499aec4c9b49f8a76614b36210c00001c31465c71869bb1c6dbe5cfbfb09b8572604a382816000000000000000000000000000000000000000e1f3347586a7f94a5b7cbdfe0cbb6a08b76614b36210c000000000000000000000000000000000000000001080b151d20262b293337393b3c3d3e3d3c3b3937353025282220180d0c06000000000000000000000000000000071c3043546e8398aec6cab49f8b77624d39281603000000000000000000000000000000000000000b20364b6074889db3c8c7b29d8774604a35200b00000000000c1a252d3035353535353327251d13050000000000000000000000000000000000000000000000000a151d202d34353535353529271f14060000000000000000000000000e24394e63798c9fb4c0b39e897a6a61575655565c64748399a5b7b7a5937d68533929160300000000000000000000000000000000001325364a5c6c8196a6b8c9b5a3927d685746331e0e00000000000000000c1d314455667b90a1b3c7b9a899836e5e4c382815020000001b30465b70859bb0c5c6b19c87715c3b2a1804000000000000000001162b40566b8095a9a9a9a9a9a9a9a9a9a9a9a9a48f7a644f3a250f00000000071b2d3e576c8196acc5d6c6ac96816c573d2c1a060000000000000000000b20364b6075899eb3c9decbb7a68f7a654f3625130000000000000000000316283853687e93a8c2cdbaa9917c675137271501001c31465c71869bb1c6dbd8c7b2a08f7a655443301a0a0000000000000000000000000000000000000004172a3a4b6075879db2c2d2e5cbb6a08b76614b36210c0000000000000000000000000000000000000208141c202832363b403a474c4e515252535252514e4c4a43363d37342b2320190e07000000000000000000000000000013253652677c92a8b9cdbcab957f6a5745321e0f0000000000000000000000000000000000000b1b304051667c91a6b8cbc1ab96816c5443301c0700000000081a2a3741454a4a4a4a4a483c3930231301000000000000000000000000000000000000000000000a1a27313642494a4a4a4a4a3e3b3224140200000000000000000000000c21364a5b6d8298a6b8b9a79e8b7f766e6b6a6c717a8599a1b3bcb29d8775604b36210b0000000000000000000000000000000000071c304354647a8c9fb4c4bcab9b8572604a392917000000000000000000011527374c5e6f8399a9bac6b2a1907b665645321d0e0000001c31475c71869cb1c6c5b09a85705b45301b00000000000000000001162b40566b8094949494949494949494949494948f7a644f3a250f000000000d22364a5c72879db2c7cdb9a8907b66503b261100000000000000000000091d3245566d8298adc5d5c8b29d8873604a35200b000000000000000000000d22384d62788da4b5c9c7ad98826d5544311d08001c31465c71869bb1c6d0cebaa998836e5d4b3625130000000000000000000000000000000000000000000c1e324556687d92a3b5c9d0cbb6a08b76614b36210c00000000000000000000000000000000000a161e26303538454b50555a586164666768686867666462605457524d483b38352c201c13080000000000000000000000000c21364b6176899eb4c8c9b39e8875604b3d2c1b0b00000000000000000000000000000000081829394c5e70859bb0c4c9b5a38f7a644f362513000000000012253748555a60606060605d524d4130200f00000000000000000000000000000000000000000002152738454b575f6060606060544f42321f0c0000000000000000000000071a2d3d4d6278889ea9b8b9a99f948984817f81868e9ba3b3bcaf9e917c665745321e090000000000000000000000000000000004172a3a4a6072859baabbc6b59f8d7a645443301b0b0000000000000000000009192f404d63788b9fb4c3bfb29c8774604b3c2c190600001d32485d72879db2c7c4af9a846f5a452f1a0500000000000000000010253a50657b7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f77624d37220d000000000f24394f64798ea5b7bac4b49e8975604b36200b000000000000000000000215283851667b90a6b8c6bcab96816c5443301c07000000000000000000000b2034485a71869cb1c0bab39e8974604b35200b001c31465c71869bb1babac2b49f8b78634d3f2e1808000000000000000000000000000000000000000000021628384b6073869bb1bebabab6a08b76614b36210c00000000000000000000000000000008131c283236434b515660666b6f7376797b7c7d7d7d7c7b797774706d676259554d493c353025181206000000000000000000000a1e3246576c8196aabbcbb8a6947f6a5b4939281a0c0000000000000000000000000000091525364657667c91a3b4c8c2b09b85705c4b3718080000000000182d4155666f757575757572675f4d3e2d1a070000000000000000000000000000000000000000091d314556606c74757575757569614f3b27120000000000000000000000000f20344859647b8b9ea7b4bab4a89e999695969ba3b0b5b8b39e95806a5e4c39281603000000000000000000000000000000000a1f334758687d92a3b4c7b9a898826d5c4b362513000000000000000000000000112135495b6b8096a5b7c5b6a5957f6a5a4935200a00001d33485d72889db2c7c4af99846f5a442f1a050000000000000000000e23374b5d656a6a6a6a6a6a6a6a6a6a6a6a6a6a6a62594834200b00000000132536556b8095a5a5a5a5a698836e5645321d0900000000000000000000000b20364b6074889ea8a5ab9f8e7a644f362513000000000000000000000005192b3c556a7f95a2a5a5a5a7907b65503b2510001c31465c71869ba5a5a5a5a496816b5a4935211000000000000000000000000000000000000000000000000a1c304354657b90a0a5a5a5a5a08b76614b36210c00000000000000000000000000000e18253038454b5460666e757b8084898c8e909192939291908e8c8986827d77716a625a514a43362f211a0f010000000000000000031629394d63788b9fb4c6c4b49f8b79635746382a1c110700000000000000000000050e19273143546176879db2c1c9b5a4927d67523e2e1b0000000000001a30455a6f848a8a8a8a8a877d675c4a36210b00000000000000000000000000000000000000011426374b607481898a8a8a8a8a7f69543e291400000000000000000000000005192b3b4b5d657c899aa2afb4b9b4aeabaaabb0b5b7b3a79e91806b6250402f1b0a00000000000000000000000000000000000c21374c6176889ea5a5a5a99e8a77624d3e2e180800000000000000000000000006192c3c4c6176879da7a5a5a59f8a78624d38271502001d32475c72879cb1c7c5af9a85705a45301b00000000000000000000081c2e3f4b505454545454545454545454545454544d483b2b1805000000071c304354718690909090908f8879634e382815020000000000000000000000091d314556667c8a8f90908c806b5c4a3618080000000000000000000000000d21364c6176848e9090909090816c57412c17001c31465c718590909090908e8675614c3c2c19030000000000000000000000000000000000000000000000011426364c5e6d828e90909090908b76614b36210c00000000000000000000000005121e2b36434a566069737b838990959a9ea7a3a6a7a7a8a7a7a6a3a89e9b97928c867f786f6660544c40352c1f0f0000000000000000000b2035495a6c8297a8b9ccbaa99c86756156473a2e211a0f0c0600030300050b0d18202c37444b60728399a6b7cbbeb19c8673604b35201000000000000012273c52677c91a69f9fa59d8c7a644e39281603000000000000000000000000000000000000081d3144556a7f959ea89f9f9f8a76614c37210c000000000000000000000000000d1d2e3f4c5d657884909a9fababadafb0afada9a69d94887c6b625143332212000000000000000000000000000000000002172d42576c8290909090908f8a7d67594834201000000000000000000000000000000e1e334657647a898f9090909090846f5645311d09001c31465b71869bb0c6c6b19b86715c3a2917040000000000000000000011212e373a3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f37342b1d0d000000000b20354a60727b7b7b7b7b7b7a75635b49351a0a000000000000000000000000021527384c5e66767a7b7a786b62513e2d1b000000000000000000000000000a1f3346586172797a7b7b7b7b7a644f39240f000f243a4f647a7b7b7b7b7a7974615746331e0e0000000000000000000000000000000000000000000000000008182f4052646d797a7b7b7b7b7b73604b35200b0000000000000000000000071523303c48546068757e8791989ea8aaafafaba8a6a4a3a3a3a4a5a7a9acb0aca7a49c948c847b73665e4e493d2c1a06000000000000000006192c3c4c62778a9eb4bfc7b5a499837461584b3f362d23211a191918191920222b343d4955606c8096a1b2c4c3b1a0907b655443301c080000000000000b20364b6075889eb3c3b7ab97826d5746321e090000000000000000000000000000000000000b20354b6074889db2b9c2ad98826d5847331f0a000000000000000000000000000010202f3f4c5a62707b848b9196989a9b9998948e887f75665e51443325150400000000000000000000000000000000000010253b50657b7b7b7b7b7b7a77675f4d3b2b18020000000000000000000000000000031729394a5c64767a7b7b7b7b7b7b74604b36200b001a2f44596f8499aec4c8b39e88735846331f0a0000000000000000000003111c23252a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2220180d0000000000071c30435460656565656565646056493d2c1a00000000000000000000000000000a1a30404c5861656565625a5144332010000000000000000000000000000417293a465460646565656565645c4a36220d000d22374b5c6465656565656460564639291700000000000000000000000000000000000000000000000000000011213546525b63656565656565605544311d080000000000000000000008162533414d5a62727d87949da5adb2aaa79e9a9693908f8e8e8e8f909294979b9fa9aab1ab9f9990867c6f635b4935210c0000000000000000000e1f344759687e93a1b3c2c2b3a1998476655d4e4a3d39352c2f2e2e2f2b34373b484c5b637481969eb0bfc5b6a597826d5d4c36261401000000000000091d3145566b8096abc0c9b49e8976614b36210e000000000000000000000000000000000004182a3a51667b90a6b7cab6a48f7a65503a2a170400000000000000000000000000000211212f3c484d5d656f767c8183858684827f79746961574c4033261607000000000000000000000000000000000000000e23374b5d6565656565656561584d41301d0d000000000000000000000000000000000b1b2d3e4a576165656565656565605645311d0900172c42576c8197acc1ccb8a78b76614c36210c000000000000000000000000080e101515151515151515151515151515150d0b0500000000000000132536434a5050505050504f4b45382c1f0f0000000000000000000000000000001222303a474c4f50504d483c3326160200000000000000000000000000000b1b2936434a4e50505050504f4a3e2d1b0700071b2e3e4b4f50505050504f4b4538291b0b000000000000000000000000000000000000000000000000000000031727353d4a4e5050505050504b44372614010000000000000000000816263443505f677884929da5b2afa59c958f8984807e7b7a797879797b7d7f82858a8f959ca4acafa39b918479634e38230e00000000000000000005182a3b4e606e8399a4b5c3bfb3a29a877b6e635b534e493d444343443b484d5259626b7984979fb0bcc7b9a79d8775614b3f2f180800000000000000021527384e63788da2b4c8b9a8927d68523c2c1906000000000000000000000000000000000a1f3347586e8398aec4c7b19c86725d4b371c0c0000000000000000000000000000000003111e2b353f4b505861676c6e6f706f6d6a6460544b46392f2216080000000000000000000000000000000000000000081c2e3f4b505050505050504c473a30231200000000000000000000000000000000000010202d39464c4f5050505050504b45382715020014293f54697e94a9c8d5c5a5907a65503b25100000000000000000000000000000000000000000000000000000000000000000000000000000000008182530353b3b3b3b3b3b3a3632281a0f0100000000000000000000000000000004121c2933373a3b3b38352b1e1608000000000000000000000000000000000b18253035393b3b3b3b3b39362d201000000010202e373a3b3b3b3b3b393631271a0b000000000000000000000000000000000000000000000000000000000009171f2d36393b3b3b3b3b3b3531261909000000000000000000061626344551616a7d8a9aa2b2b1a29a9087807a746f6b686664646364646567696d70757a80868e969ea8b1a2957f6a55402a15000000000000000000000d1d31424c6175869ca5b6c3c0b4a59d8f83797069635b5c595858595b5962676e77808b9aa2b1bdc6b9a99e89796357463321110000000000000000000a2135495b70859aafc5c6b09a85705b49352109000000000000000000000000000000000c22374c61778a9fb4c9baa9947e69543f2e1c000000000000000000000000000000000000000e19202f373a474c5156585a5b5a58544f4b433632291b12040000000000000000000000000000000000000000000011212e373b3b3b3b3b3b3a37332a1c120400000000000000000000000000000000000002101b2933363a3b3b3b3b3b3b3631271a0a000010253a50657a8faabbcebfaa957f6a553c2c19060000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2025262626262624211e160a000000000000000000000000000000000000000c171f212526252220190e0000000000000000000000000000000000000008131c2024252626262624221b100200000002101b2224262626262524201d150a00000000000000000000000000000000000000000000000000000000000000010f1a2123252626262626201d1409000000000000000000011324334451636c7f8d9ea8b4a49c90847b736b6460545653514f4e4e4e4f505254575660646b71798189959f9f8c78624d38230d0000000000000000000000131e3346576278879ca4b4c0c3b7b2a0988c857e7874716e6e6d6e7073777d838a969fa9b4c0c3b6a89e8b7b655b4939291703000000000000000000061a2c3d52677c92a7b8c8b4a28d78634d372614010000000000000000000000000000071b2d3e54697e93a9bac9b49f8a77614c372111000000000000000000000000000000000000000005111c232933373c4143454644433f393530261e160b00000000000000000000000000000000000000000000000003111c2325262626262625221f180c000000000000000000000000000000000000000000000b171e2125262626262626201d150a0000000b21364b60768a9fb4cac5b09b85705a4935200c000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b1010101010100f0b0902000000000000000000000000000000000000000000040a0c1010100d0b0500000000000000000000000000000000000000000000070b0f10101010100f0d0700000000000000070d0f10101010100f0b090200000000000000000000000000000000000000000000000000000000000000000000070c0e1010101010100b0801000000000000000000000f1f314250626c81959fabab9f95867b6f6560544f4a43363e3b3a3939393a3b3d3f38454b4f555c646c76808a92836f5a4935200b000000000000000000000003172939485a6278869aa2b4bac7beb2ab9f9a938e89868483838485888c92999fa9b4bac7beb2a49c8a7b655d4b3d2c1b0b00000000000000000000000e20364b6075889eb3c8c0ab95806b5544311d0802020202020202020202020202020d22364a5c71869bb1c7c2ad98836d5847331f0a00000000000000000000000000000000000000000000080c171f21272c2e30312f2d2a24201c140803000000000000000000000000000000000000000000000000000000080e101010101010100c0a04000000000000000000000000000000000000000000000000030a0c101010101010100b090200000000091e32455770859ab0c9cab59f8c78634d3b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192d3d4e606b80959fb5a89e8d8074655d504a43363530252926252423242426282a2731363a3d4a4e58616b777d76614c3c2b19060000000000000000000000000b1b2b3c485a627784959fa9b3bfc9bcb5b0a8a79e9b999898999b9da6a7aeb4bac7c2b5b1a0988679655d4b3f2e1f0f000000000000000000000000091d3245566b8196abc0c8b29d8874604b35201717171717171717171717171717171528384f64798ea3b5c9b6a48f7a65503a2a1704000000000000000000000000000000000000000000000000040a0c1217191a1b1a18150f0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283954697e93abbccfbcab96806b5947341f1100000000000000000000000000000000000000000000000808000000000000000000000000000000000000000000010b0b0b0b0a02000000000000000000000000000000000000000000000002090b1014161715120c0a030000000000000000000000000000000000000000000000000000000000000000000002090b0e11131515161514110f0c0903000000000000000000000000000000000000000000000000000000000000050b0d1415130c0a04000000000000000000000000021527374a5b687e929eb0a89e8a7c6b60564b3f353025201c1313110f0f0e0f0f101214151d20252d363a474c596267615847331e0e00000000000000000000000000000e1e2b3c485961727f8b9aa1aeb5bcc9c5c5b9b3b1aeadadaeb0b3b8c4c3c7c1b5b0a49c908275635b4b3f2e211101000000000000000000000000021528384e63788da2b4c8b7a6907b66503a2a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d3245566c8196acc2c7b19c87725d4b371c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131a1c202020202020202020202020202020202020201f1e1c1916110c0a040000000000000000000000000000000000000000000000000d22384d62788b9fb4cac9b49e8a77614c3f2f1e0e00000000000000000000000000000000000002080b141e1e100e08000000000000000000000000000000040e1416202020201f170b0902000000000000000000000000000000000000050a151d2026292b2c2a27211e170b070000000000000000000000000000000000000000000000000000000000070d0f151d202326292a2b2b2a292724211e16100b0801000000000000000000000000000000000000000000000000000e192022292b28221f180c0000000000000000000000081d31445563798b9fb4a99e8a7a665e4b45382e202527292725201d150a0700010a161e21262a2b2a2829333b474c524c473a2a18000000000000000000000000000000000e1e2b3a4754606a79848f999fabb0b4bbc8c1c3c3c3c2c3c4c1bec2b6b1aba39b91867b6d61574a3d2e21110300000000000000000000000000000a2135495b70859aafc5c4ae98836e58474242424242424242424242424242424242424b6075899eb3c8baa9947f69543f2e1c000000000000000000000000000000000000000000000003090b0f12151617171614110e0c0600000000000000000000000000000000000000000000000000000000000d1b272e31353535353535353535353535353535353535353433312e2b26221f180d0b050000000000000000000000000000000000000000000b2034485a6e8399aec0cdb9a897816c5d4b3c2b1d0f0100000000000000000000000000000009151d202a333325231c1103000000000000000000000000081621292b35353535342d201d150a000000000000000000000000000000000d18202731363b3f40413f3c363329211a0f01000000000000000000000000000000000000000000000000030a101b2224283236393c3e3f40403f3e3c3936322825201c14080400000000000000000000000000000000000000000007151e2b35383e403d37342a1c1305000000000000000005182b3b4b6074869ca9b49f8b7b655c4c40312731353a3c3e3d3a363228221b10141c2832363b3f403f3d39352c34373d37332a1c0c00000000000000000000000000000000000e1c2a36434b5b636f7a838c949b9faaa9abaeafb0b0afaeaca9a6a49c958e867c73655d4b46392d1f1103000000000000000000000000000000061a2c3d52677d92a7b8c9b49f8a77615757575757575757575757575757575757575757677c91a7b8c9b49f8a77614c3722110000000000000000000000000000000000000000050b0d161e2125282a2b2c2c2b292723211a110b09020000000000000000000000000000000000000000000000000a1b2b3943464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49484643403c37332a2220180d070000000000000000000000000000000000000005192b3c50657b8fa2b3c8c6b59f8d7b655a483b2c1c14080000000000000000000000000811192731363f48483b372f21110000000000000000000000041626333d404a4a4a4a4a423631271a0a0000000000000000000000000006141d2b3438454b5054565654514c4639362d1d1509000000000000000000000000000000000000000000020b171e212d363a38454b4e51535455555453514e4b46393b3530261f180c04000000000000000000000000000000000000051525323c484d5355534c473a30231303000000000000000b203448596a7f94a4b2a0927d685d4b3e303337444b4f5253524f4b4538372e1e263038454b50545555524e493d363228221f180c000000000000000000000000000000000000000c1826303d494e5d646e777f858a909396999a9b9b9a999794918c878079716760544b3f33291b0f0100000000000000000000000000000000000f20364b6075889eb3c8baa9937e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6f8499afc5c3ad98836e5847331f0a000000000000000000000000000000000000070d1920222832363a3d40414141403f3c38352c27201d150a030000000000000000000000000000000000000000000013273949565c6060606060606060606060606060606060605f5e5e5b5955514c473a37342b211a0f040000000000000000000000000000000000000d23374b5d6f849aaabbcebcab9d88786259493d30261c130b090300030300040a0c111c232f37444b545d5d504b3f2f1c0c000000000000000000000e2133445156606060605f574b45382715020000000000000000000000081624323b484d566065696b6c6a6761574e4a3d3127190b000000000000000000000000000000000000000a161e2933363e4a4f5656606366686a6a6b6a696664615756504b4336342a1f170c0000000000000000000000000000000001132332434f5a62696a6861594d413021110000000000000417293a4c62778a9eb4a798826d604e3f2e39464c5560646768676460564f4b3e3236434b566066696b6a67635b544b46392e211608000000000000000000000000000000000000000008141c2c353f4b4f59626970767b7e81848586868584827f7c77726b635b514b43362e1e170b00000000000000000000000000000000000000091d3245566c8196abc0c7b29d87818282828282828282828282828282828282828282818d9fb4cab6a5907b65503a2a180400000000000000000000000000000000040f1a212b343838454b4f52555657565654514e493d3c3631271e160b0000000000000000000000000000000000000000001a2e43566771757575757575757575757575757575757575757473716e6b666158544c483b362d1f180c0000000000000000000000000000000000081c2e3f4e63798c9fb4c1c9b8a69c8677635b4b43363025211e161918191a171f21262f383f4c5560697373655d4b3a2a180400000000000000000014293d51626b75757575746c605645311d130100000000000000000006162634424f59626d757b7e80817f7c766e635b4b4437281b0b0000000000000000000000000000000001111a283239464b545c646b7075787b7e7f80807f7e7c7976716c6560544c473b33291c130300000000000000000000000000000b1e31414f616a787e807d77675f4d3f2e1c0800000000000a1f3347586b8096a8b39e8977614c42313d4957616b747a7c7e7c7a756e645c4b464354606a757b7f807f7d78726961574b3f332616080000000000000000000000000000000000000000010e1a212e373b484d54576165696c6e6f7070706f6c69666159564e4a3d3530261811030000000000000000000000000000000000000000021528384e63798ea2b4c8b7a59d979797979797979797979797979797979797979797979fabbcc8b29c8773604a35200c000000000000000000000000000000000b171f2d363c484d54566064676a6b6c6c6b6966635b58514b453832281b1203000000000000000000000000000000000000001c31465c71858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888683807b77706962594e4a3d332a1c1200000000000000000000000000000000001121364a5b6b8095a3b4c3c4b6a49c87796860544a43363632282e2d2e2f2933363b3f4b505d65747f88887b655947341f11000000000000000001162b40566b808a8a8a8a898174604b42311f0f000000000000000001142434445160697782899094959694918a83796c60554639281603000000000000000000000000000009141d2f38454b576169727a80858a8e91939495959493918e8a86817b746b61594c463a301e160b0000000000000000000000000011253a4e606a7f8b9395928a7d675d4b37230900000000000c21374c6176899eb4a6937e695947343b495b637681898f9193928f89837a6d61574b60727f8990949594928e877f75655d51443426160700000000000000000000000000000000000000000006101b222b343739464b505456595a5b5b5a595754514c473a39362d201c140800000000000000000000000000000000000000000000000a2135495b70859ab0c5c3b7b2acacacacacacacacacacacacacacacacacacacacacacb4bcc9bbaa947f695443301c07000000000000000000000000000002101b29333d4a4e5a626970767a7d7f808181807e7c78736e6660564b4639301e160a0000000000000000000000000000000000001c31465c71869b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9b9895918c857e776d635b4c473a2f1c1308000000000000000000000000000000071a2d3d4b6073859ba5b7c5c2b6a59c8a7e73666054504b4539444343443a464c51565d656f7b86949d9d8977614c402f1c0900000000000000000b20354b6073849aa7a89f97826d604e3d2d1b0b000000000000000f1f324251636c7e8a979ea8a9ababa9a99f998c8173615746321e14000000000000000000000000000a192631404c56606a767f878f959a9fa9a6a8a9aaaaa9a8a6aa9f9b96908880776c61584d4132281b0c000000000000000000000005192b3c52687d929faaaaa89e8d7b65503726140100000006192c3c54697e93a8b39d8875604b3a344759637987969ea7a7a8a7a89f988f8275625f6d82949ea7a9aaaaa7a59c94877b6b6251443425150200000000000000000000000000000000000000000000080d1920222832363b3e41444546464544423f3c37342a24211a0f0801000000000000000000000000000000000000000000000000061a2c3d52677d92a7b8cccac7bab4afafafafafafafafafafafafafafafafafb0b4c0cacfc9b49f8b77614c36251300000000000000000000000000000412202d3a464c5c646e787f858a8f92959696969594918d88837c756a61574d4132281a0c00000000000000000000000000000000001c31465c71869bb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b3b3b0aeaaa6a39b948b82796c61584c40302518090000000000000000000000000000000f1d3144556277879da7b7c3c3b6a89e93857c736b6560575a595858595b5861666b727b84909ca4b2a798826d5e4c38230e0000000000000000081d3144556278899eabb4a0927e685b4a392916030000000000071a2d3d4f616c81939fa9b4aba99f9ea8a7b2ab9f968375614b42311b0a00000000000000000000000b1a2837444b5e65757f89949ca4abb0b4bac7bdbfbfc0bfbec8bbb4b0aba69d958a8176675f4b46392a1c0d000000000000000000000b2034485a72879db2bbc6b9ab9a85705544311d080000000c2035495a70859bb0ab947f6a5645323c4c6277889da6b3b1aca4a1a2a6ada0978677677d92a0b3b2a69e9c9ea8afa59d8d806b625143332010000000000000000000000000000000000000000000000000050b0d161e2125292c2f303131302f2d2a26221f180e0c07000000000000000000000000000000000000000000000000000000000f21364b6075899eb3c8cdbaa99f99999999999999999999999999999999999aa2b4c8d3c3ae98836e5947341808000000000000000000000000000412222f3e4a58616c79838b949b9faaa7aaabacababa9a6a69e9891887f75675f4b4538291c0c000000000000000000000000000000001c31465c71869bb1c6cad0c7c3b5b5b5b5b5b5b5b5b5b5b5b5b6b8bbbfc0c1b5b0aa9f988c8177665e4a433627190900000000000000000000000000000115273748596379899da5b4c0c6b9b4a39b9187807a76726f6e6d6e6f7073767b80879099a1b1b6c2b2a0907b65503b26100000000000000000011527374859667c8d9fb5b49f8a79635746321e1301000000000c21364a5b697e939fb4a99f968d8a898c929da5b4a298826e604e392816030000000000000000000b1b28384555606b7b87959ea7b2b6c3c5c3bec8bbb4b3b3b4bbc8bdc2c6c4b7b2a99f96887d6d6157473a2b1d0d0000000000000000000d22384d62778da5b7cbd6c9b49f8a75604b35200b0000000e23384d63788da3b49f8b77624d3835495a6e8398a6b7af9f978f8c8d9199a1a49c8676859bb1a59d8f8887898f99a1ab9f95806b61503e2d1909000000000000000000000000000000000000000000000000000003090c101417191a1b1b1b1a1714110c0a0400000000000000000000000000000000000000000000000000000000000000091e3245566c8196abc0c9b49f8b8484848484848484848484848484848484849ab0c5cab6a5907b65503b2a18000000000000000000000000000112222f404c5c6476818c989faab0b4bbc8bfc0c1c1c0bec5b8b3ada69d94877c6d6056463a291b0b0000000000000000000000000000001c31465c71869bb1c6d0bfb3aea0a0a0a0a0a0a0a0a0a0a0a0a1a3a6aaafb4bbc8bbb4aa9f97887c6b60544437271808000000000000000000000000000009192b3b495b6379879aa2b4bac7c1b5b0a59d96908a87858382838485888b90969da5afb3bfc4b7b39e96826c57422d1702000000000000000009192b3b4c5e6b8095a2b4a99c8675614b42311f0f00000006192c3c4e63798b9fb4a99f8b80787474777d879ba3b2a0937e685745321e0900000000000000000919283946566073808d9da5b3b9c5c7bab4aea9a4aa9f9e9e9faaa4a8adb4b9c6c7bab4a69e9282756159483b2b1b0b00000000000000000d23384d62788da7b8ccdacab59f8a75604b36200b00000013293e53687e93a8af9a8570594834384d62788c9fb5af9d94827a77787c83919fa49a859aa3b29d877a7371747a84949fab9e947f6a5c4a372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384e63798ea2b4c8baa98d786f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f7d93a8bdc8b29c8773604a35200c000000000000000000000000000f1f2f404c5e667a87979fabb4bbc8c9c2bcc9bcb5bcb6b9bec5c8c4b7b3a69d9182746158463928180800000000000000000000000000001c31465c71869bb1c6c7b3a1998a8a8a8a8a8a8a8a8a8a8a8b8c8d90949a9faab2b7c3bbb4a69e8d80726055443625130000000000000000000000000000000d1d2c3d495b637784949fa9b2bec9c3b7b2abaa9f9d9a999898999a9da6a6abb2b7c3c7bab4a69d908072604b35200b000000000000000000000d1d2f404b6073849aa7b6a498826d604e3d2d1b0b00000c2035495a6e8398aab49f8b7b6b635b58616876859ba9b39d8875604b36210b00000000000000011426374657617483959fabb6c3c3b7b2a99f99938f8c8a89898a8c8e93989ea8b1b5c2c5b8b3a098857762594839291603000000000000000b20354b6074889eb3bec9bcb19b86715645311d09000003162838586d8398ada9947f69543b2b40556a7f95abb6a5947f6d646162666e7c8b9fa29aa2b4a58f7a645d5c5c646f7f8d9fb49f8c7a645544311d08000000000000000000000000000000000000000000000000000711171920202020202013110b020000000000000000000000000000000000000000000000000000000000000000000000000a2136495b70859bb0c5c7aa95806b555a5a5a5a5a5a5a5a5a5a5a5a5b70859bb0c5bbaa947f6a5443301c070000000000000000000000000a1a2d3d4c5e667c8b9da5b4bcc9c5b9b3aca7a3ab9faba1a4a9afb5bcc9c4b7b29f97847661574636251300000000000000000000000000001c31465c71869bb1c6c3ae998373757575757575757575757676787b7f848a939da5b4bac5b8ab9f958273605443301c120000000000000000000000000000000f1f2c3d495962727f8b98a0acb4bac7c7c8bbb4b2afaeadadaeb0b3b8c4c0c7c5b8b3a99f96887c6b605443301c080000000000000000000000111d3144556277899eabb2a0927e685b4a39291603000e23384d63788b9fb4a8947f6a5d4e49474c5863788a9fb4a6947e69543a2917040000000000000b1d31445561758499a1b5bcc7bab4a59d938a837e7a777574747576797d8389929ca4b3b9c5beb2a39b8677625746321e1400000000000000081d3144556a7f949facaeab9f917c6751382715020000091e32455672879db2aa8f7a654f3a2f44596f8499aeb29d8774604f4c4d515e667c8d9fb0b4b29d88725d4b3f4b4f616b8095a2aa9b8674604b3620110000000000000000000000000000000000000000000000000a19242c2f35353535353528261e13060000000000000000000000000000000000000000000000000000000000000000000000061a2c3d52687d92a7b9c8b29d8874604b444444444444444444374e63798ea3b4c9b49f8b77624c362513000000000000000000000000021528384a5b667c8c9fa9b6c3c6b9b4a79e97918d8b8a8a8c8f949a9fabb3c0cbbeb1a29b8575615443301c0e000000000000000000000000001c31465c71869bb1c6c3ae99846e60606060606060606060606163666a6f767e87949fa8b6c2bcb5a0988272604a402f1c0c0000000000000000000000000000010f1f2c3b4854606a78838e979fa9aeb3b9c5bfc2c4c3c2c3c4c4c2bfc5b8b3ada79e968b8076665e4b43362614010000000000000000000000011527374859667c8d9fb5b49f8a79635746321e130114293e54697e93abb49e8a76614b3f35333a495a6d8297acb09a85705846331f0a00000000000b1b2f3f4b60738399a2b3bfc3b7a99f95877e766e696461595e5e586164686d757d86939ea7b5c2c1b5a49b8575614b42311e0e000000000000011426374b607281909799968d7f6a5f4d391a0a0000000b21364b60768b9fb49f8a75604b3632485d72879db2ab96816b55443738404d5e6b8196a7b9b09a85705b3f2e37434b6073849aafa3937e68533f2e1c08000000000000000000000000000000000000000000000019293640444a4a4a4a4a4a3d3a3124130200000000000000000000000000000000000000000000000000000000000000000000000f21364b6075899eb3c9b7a6907b66503a2a2f2f2f2f2f2f3144556b8096abc1c3ae98836e5947341808000000000000000000000000091d32455663798a9eaabac7c1b5a89e9589827c78767575777a7e858c9aa2b4bac7c0b4a3998372604a3c2b19050000000000000000000000001c31465c71869bb1c6c3ae99846e594b4b4b4b4b4b4b4b4b4b4c4e5155586169747f8a9ca4b5c1beb2a095806b5e4c3a2a18040000000000000000000000000000000e1d2b36434b5a626e79828a92999ea7a7aaadafafb0b0afaeacaaa7a69e98918980786b61584c40302618080000000000000000000000000009192b3b4c5e6b8095a2b4a99c8675614b42311f0f192f44596e8499aeae99836e574633211f2c3c50657b90a5b49f8a76614c36210c00000000031629394c5d6b8096a1b3c0c3b6a59d8b7f74696157544f4c473b3a474c4f53566067737e899ca4b5c1c2b5a399836e604e3c2b1906000000000000091c304354606d7b8284817a6a615041301d000000000e23394e63788eabb29d877256453234495e74899eb3a8927d685337262330404c6176899eb3b09b85705b392922304354647a8fa2b19c86715d4b372308000000000000000000000000000000000000000000000d1d36475459606060606060534e42311e0b0000000000000000000000000000000000000000000000000000000000000000000000091e3245566c8196acc1c4ae98836e5847331f1a1a1a1a20354b6074889db3c8b6a5907b65503b2a1800000000000000000000000005182b3b4b6074869ca8b9c8bfb3a39b8a80756d6763615760616469707984929fa9b9c5c1b3a1937e695a4835200e0000000000000000000000001c31465c71869bb1c6c3ae99846e594435353535353535353637383b3a474c55606979869ba3b5c3beb09e907c665847331f0f000000000000000000000000000000000d1826303c494d5b636d767d83898e929597999a9b9b9a999794928d88837c756b625a4c463a2f1c14080000000000000000000000000000000d1d2f404b6073849aa7b6a498826d604e3d2d1b1628385d72889db2aa947f6a553929170e21374c61768ca8b9aa8f7a654f3a2510000000000a1e324657657b8d9fb5bfc5b6a49c877a6a60564c46393a37342a2a33373938454b54606878869ba3b5c3c1b3a1937e685a4935201000000000000001142636434b5d656c6e6c645c50433323120100000011263b51667b90a6af9a856f5a3828354a5f748a9fb4a7927c67523d27121f3346586b8096abb29c87725746331e26364b5c6f849aafa4907b655036251300000000000000000000000000000000000000000005192b3b54656e75757575757568604e3a26100000000000000000000000000000000000000000000000000000000000000000000000031628384e63798ea3b4c9b49f8a77614c3721100005182a3b51667c91a6b8c8b29d8773604a35200d0000000000000000000000000b203448596a8095a4b5c6c3b3a19985776a6157524e4b464b4c4f545b636f7d8b9ea7b9ccbfb49f8a78624d3c2b190600000000000000000000001c31465c71869bb1c6c3ae99846e59442f20202020202020212123262a3337444b5b6376859ba5b7c8bcb39e8877614c3d2c1a060000000000000000000000000000000008141c2b353d4a4e5761676e74787d7f82848586868584827f7c78736d6660564d483c33291c12010000000000000000000000000000000000111d3144556277899eabb2a0927e685b4a39291e32455674899fb4a7927d68523d28130a1f33475874899eb4a6917c66513c271100000005182a3b4b6175889dabbcc9b8a69c8677645c4b4538332925221f18171f2124283236434b5a6376859ba5b6c8bfb49f8a78624d3e2d1b07000000000000081826303f4b505759564f4a3e332515050000000012283d52677d92a7ad98836d58432e34495e73899eb3a8937e69533e291417293a4f647a8fa6b49f8b76614b3621182e3e52677d92a9ad97826d5443301c0700000000000000000000000000000000000000000b203448596e838a8a8a8a8a8a7e68533e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000a21364a5b70859bb0c5baa9937e69543e2d1b070b1f3447596e8399aec4bbaa947f6a5443301c070000000000000000000000021628384d62778a9fb4c2c8b6a599837562594b463938363235373a3d4a4e5f677b899eb3bdcdbaa998826d5a4835200b00000000000000000000001c31465c71869bb1c6c3ae99846e59442f190b0b0b0b0b0b0b0c0e11171f27313d4a586176879daabbcbb8a697816c5b4936210d0000000000000000000000000000000000010e19202d3639464c52546063676a6d6f707170706f6d6a67635a58514b4538352b1f170c00000000000000000000000000000000000000011426374859667c8d9fb5b49f8a796357463221364b60768ba9baa6917c66513c27110417293a5d73889db2a8937d68533e28130000000b1f3448596b8095a6b7c9bcab9e887862594a3e31271e170f0c0b04040a0c0f161e26303c49586176879caabbcdbaa998836e5c4a36220d0000000000000008141c2f373b42444139362d201507000000000013293e53687e93a8ac97826d57422d31465c71869bb1ab95806b563929170b20354a6074889db3ab907a65503b251021364c61768a9fb39e8873604a35200b00000000000000000000000000000000000000011527374d62788b9f9f9f9f9f9b86715c4a36220b0000000000000000000000000000000000000000000000000000000000000000000000071a2d3d52687d92a7b9c7b19b86715c4a36220a0d22374c62778b9fb4cab49f8b77624c362513000000000000000000000000091e3245566b8096a8bacdbbaa9c87756157483b322823211e2022252d36414d5d667c919fb1c7c7b49f8b78624d38231000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000409151d2d3a4758647a8b9fb4c4c4b49f8c79634e3b2a1805000000000000000000000000000000000000060f1a2129333636434a4e5255585a5a5b5b5a595755524d493c3c36322820190e0400000000000000000000000000000000000000000009192b3b4c5e6b8095a2b4a99c8675614b4231354b60758aa7b9a6917c67513c271205192b3b5e73889eb3a8927d68533d28130000021628384c62778a9fb4c4c6b59f8d7b655a483b2d1d150a0300000000000000000208141c2c3a475863798b9fb4c4c7b2a08f7a644f3b2b19050000000000000001111c23252d2f2c24221b100200000000000014293f54697e94a9ab96816c56412c2d43586d8298adaf9a85705746331e091c3043546d8398adaa957f6a553828161e33465771869bb0a68d78634d38230e00000000000000000000000000000000000000081d3144556a8095aabbb5b5b5a38e7a644f3a29170400000000000000000000000000000000000000000000000000000000000000000000000f21364b6075899eb3c9b5a38e79644f3828151b2e3f54697f94aabbc3ae99836e59483418080000000000000000000000000b21364b6075899eb3c6cab49f8c7a645746392b1e160e0c090b0c0f1a21303f4d5e6c8197a9bacdbbaa96806b563e2d1b07000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000020f1c2a3a4a5c6a8095a6b7cbbbaa97826d5947341f0b0000000000000000000000000000000000000000070b171e21253035393d4042444546464544423f3d38352c27211e160a050000000000000000000000000000000000000000000000000d1d2f404b6073849aa6b6a498826d604e3d31445574899eb3a8927d68533d28130b20344859748a9fb4a6917b66513c26110000091e3245566b8095a9bacdb9a897816c5d4b3c2b1d1002000000000000000000000000010e1c293a4a5b6a8095a6b8cbbead98836e594834200b0000000000000004121d242628282827251e130500000000000014293e54697e93a9ab96816c56412c283e53687d93abb49f8b76614c37271513253653687d93a8af9a85705645321e172939576d8297aca6917c67513c2712000000000000000000000000000000000000000b20354b6074889db2c8d9d2c1ac97826d5846331f0a0000000000000000000000000000000000000000000000000000000000000000000000091e3245576c8197acc1c2ac96816c5645321d22374b5d72869cb1c8b7a5907b66503b2a180000000000000000000000000011263c51667c91a7b8ccc2ad98826d5c4a39291b0d0300000000000007132130404c61778a9fb4c9c8b29d87725c4a36220d000000000000000000001c31465c71869bb1c6c3ae99846e59442f1904000000000000000000000000000c1c2d3d4b6075889db3c7c8b49f8a77624c37220d00000000000000000000000000000000000000000000030a0c131c2023282a2d2f303131302f2d2a27232019110b0903000000000000000000000000000000000000000000000000000000111d3144556277889eabb2a0927e685b4a39375d72879cb2aa95806b553b2a180e22374d62778ca9baaa8f7a644f3a250f00000b21364b6075889eb3c7c9b49e8a77614c3f2f1e0e000000000000000000000000000000000c1c2d3d4b6175889eb3c8cab49f8b78624d37220d0000000000000012222f383c3d3d3d3c3930231301000000000013283d52687d92a7ac97826d57422d22374d62778c9fb5aa937e695544311d1023384d63788da5b49f8a75604b362114293f54697e94a9a9947e69543f291400000000000000000000000000000000000006192c3c51667c91a6b7cbdedec9b49f8a76614c3621110000000000000000000000000000000000000000000000000000000000000000000000031628394e63798ea3b5c8b39e8975604b362028394f647a8fa4b6c8b29d8774604b35200d0000000000000000000000000417293a576d8297acc5c9b5a48e79644f3e2d1b0b00000000000000000003121f3347586c8197acc5cab7a58e79644f39240f000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000f1e324556697e94a9bacdbaa9947e69543a2a180400000000000000000000000000000000000000000000000000070b0e1215181a1b1c1b1b1a1815120e0c0600000000000000000000000000000000000000000000000000000000000000011426374859667c8d9fb5b49f8a7963574643586d8398adaf9a846f59483422212e3e51677c91a6b49f8a76604b36210b000013253651667c91a7b8ccc1ab96806b59473421110000000000000000000000000000000000000f1e3246576a7f94aabbcebbaa947f69543a2a18040000000000091d2f404c51535353524d41301e0a000000000011273c51667c91a6ae98836e59432e203448596f849aafb29d8774604b3e2e202035495a72879db2a9907b65503b2613283d52687d92a7ab96806b56412b160000000000000000000000000000000000000c2035495a6f849aafc4ccc8cacdbaa8937e69533f2e1c0800000000000000000000000000000000000000000000000000000000000000000000000a21364a5b70859bb0c6b8a7917c67523c2b3246576d8297acc2bbaa947f6a5443301c080000000000000000000000000a1f33465872879cb2c7c6b19c86715c4a362010000000000000000000000004182a3a4f64798ea7b9ccc3a9937e69543e2914000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000031628384c61768a9fb4c9c7b09b85705947341f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3b4c5e6b8095a2b4a99c8675614b4253687d92a9b49f8b77624c4137363c4b5c6e8399aeb09a85705745321e0900071c3043546d8398adc5c9b5a38d78634d3b2a1803000000000000000000000000000000000000031628394c61778b9fb4c9c8b09b85705847331f0a00000000000f24384c5e66686868675f4d39250c000000000010253a50657a8fa5b09b86715b3c2c192b3b51667c91a3b4a5947f6a5c4b3e2f202c3c586d8297adab95806b56392917273c51667c91a6ac97816c57422c170000000000000000000000000000000000021527384d63788c9fb5c5b8b3b4bcc6b19c86715d4b37230c0000000000000000000000000000000000000000000000000000000000000000000000071a2d3d53687d92a8b9c5af9a846f5a4834364b6176899eb4c9b49f8b77624d362614010000000000000000000000000c21364c61768ba4b6cac1ac96816c573e2d1b020000000000000000000000000c20354b6074899eb3c9c2ad98836d58432e18030000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000a1f3347586e8399aec3cab59f8b77614c37220c000000000000000000000000000000000000000000000002080b0e1114151616151513100d0b07000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f404b6073849aa6b6a498826d604e4c62778a9fb4aa96816c5f504c4b4e5a647a8c9fb4a7937e695439281603000b20354a6074899eb3c8c5b09b86705b49351d0c00000000000000000000000000000000000000000b1f3447596f8499afc4cab59f8b77614c37220c000000000011263c51667c7d7d7d7d67523a2a1704000000000c22374c61778ca5b39e89745a49352024384c5e70859baab49f8c7a645c4c40342b3d52677d92a7b09b85705746331e263b51667b90a6ac96816c57412c170000000000000000000000000000000000091d3145566b8096abbcb8a79e9fabbcb5a48f7a654f3a2a180400000000000000000000000000000000000000000000000000000000000000000000000f21364b6175899eb3c9b49f8b78624d363c52687d92a8b9c3ae99836e5948341808000000000000000000000000000f24394f64798ea4c3d3bca6917c67513c271200000000000000000000000000081d3144556f8499aec4c5b09b86705b46311b000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000004172a3a53687d92a8c6cfbcab917c66513c26110000000000000000000000000000000000000000060b0d151d202326292a2b2c2b2a282522201c130c0a0400000000000000000000000000000000000000000000000000000000000000000000111d3144556277889eabb2a0927e685b4a596c8297a8b49f8d7d6e656161636a78879daab39e8975614b36210c00000e23394e63788ea7b8ccbfaa95806a553c2c1900000000000000000000000000000000000000000004182a3b53697e93a8c7cfbcab917b66513c26110000000004182a3b5d72879292928a745847331f0a000000000a1f33475872889db2a78d78634d38231d30404f647a8c9fb4aa9e887a665e4d483b3a4d62778ca4b49f8b76614c3621273c52677c91a7aa95806b55402b1600000000000000000000000000000000000b20364b6075889eb3c9b39e898d9fb4c2ad98826d5847331f080000000000000000000000000000000000000000000000000000000000000000000000091e3246576c8197acc1bcab947f6a5443495a70859ab0c6b7a5907b66513b2b18000000000000000000000000000012273c51677c91a6bcceb9a38e79644e39240f0000000000000000000000000001142637566c8196abc1c8b39e88735e372715010000000000000000001c31465c71869bb1c6c3ae99846e59442f1904000000000000000000000000000000000e23384e63788da8b9cdc9ab95806b56402b16010000000000000000000000000000000000090e192023273136393c3e404141403f3d3b38353025221f180c070000000000000000000000000000000000000000000000000000000000000000011426374859657b8d9fb5b49f8a7963574d62788a9eb4ab9f92827b7776797f899da5b3a1947f695746321e0a000013283d53687d92a8c5d6c5a5907b65503b2610000000000000000000000000000000000000000000000f24394e64798ea9bacdc9aa95806b55402b16000000000b1f34475974899fa8a88c76614c37210c0000000004182a3a596e8399aea7927d685239291622364a5c6a7f94a0b2a69e8a7c6e6259534f4d5972879cb2aa917b66513c26283e53687d93a8a9947e69543f291400000000000000000000000000000000071a2d3d52677d92a6b8c9ad9882859bb1c6b49f8a77614c3625130000000000000000000000000000000000000000000000000000000000000000000000031628394e64798ea3b5c9b29d8773604a4d63788da2b4c8b29d8774604b35200d000000000000000000000000000013283d53687d92a8bdccb7a28d77624d38220d0000000000000000000000000000152a40556a7f95aabfc9b49f8a745544311d080000000000000000001c31465c71869bb1c6c3ae99846e59442f1904000000000000000000000000000000000b20354b6075899eb4c9c3ae99846e59442f190400000000000000000000000000000008121d242b353837444b4e5154555656555453504d4a433637332a221b1006000000000000000000000000000000000000000000000000000003090b0f1111192b3b4c5e6b8095a2b4a99c8675614b5a677d929db3b4a098908c8b8e959ea8b5a2998372604a392916030000162b41566b8096abc0ccb9a78c77614c37210c000000000000000000000000000000000000000000000b20354b60758a9fb4c9c3ae99836e59442e19040000000c22374c61778ca9baa38e79644e39240f000000000014293f54697e94abad98836e5746321e1b2d3e4f616d8298a0b4a89e9083786e686463636c8297acab96816c563a2a2b40566b8095aba7927d68523d2813000000000000000000000000000000000c21364a5b70859ab0c5bcab927d8196abc7baa9947f695443301c0700000000000000000000000000000000000000000000000000000000000000000000000b21364a5c71859bb0c6b6a58f7a6550556b8095abc0bbaa957f6a5443301c08000000000000000000000000000014293e53697e93a8becbb6a08b76614b36210c000000000000000000000000000014293e53697e93a8becebaa98a75604b35200b0000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000000081c30435471869cb1c6c6b19c86715c47311c000000000000000000000000000003111c232f383c484d5455606366696a6b6b6a6a6865626054534c473a362d20190e0000000000000000000000000000000000000000000000070b161e2124262725222f404b6073849aa6b6a498826d604e5f6a7f929ea7b2ada5a1a0a3aab3ab9f978476615443301b0b000000192e43596e8398aec3c9b39e89745847331f0a00000000000000000000000000000000000000000000081d31445572879cb1c7c6b09b86715b46311c000000000f24394e64798ea3c7a6907b66513b261100000000000d22384d62788c9fb49f8a76614b3625132032434b607382959fabb3a0988b837d7a78787a8197acb19c86715947342b3c586e8398ada98e79644f39240f000000000000000000000000000000031628394e63798ea2b4cab59f8b777c91a9bac7b29c8773604a35200d0000000000000000000000000000000000000000000000000000000000000000000000071a2d3e53687d93a8b9c3ad98826d576074889db2c8b49f8b77624d36261401000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdd8b5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000001142636596f8499aec4c8b39e89735e492715020000000000000000000000000b161e2e37404c515a626a6f75797b7e7f8081807f7d7a78746e6961584f4a3e352c1e14020000000000000000000000000000000000000008131c20283236393b3c3a37343144556277889eabb2a0927e685b50616a7d89959da5a7a9a9a7a89f998d8274615847362513000000001b30465b70859bb0c5c6b19c86715c3a2a170400000000000000000000000000000000000000000000011527375a6f859aafc4c8b39e88735e4925130000000011263b50667b90a5bba8927d68533d281300000000000b2035485a70859bb0a9927d685443301c151d31445560727f8c9ca4b1aa9f99938f8d8d8f979fb1b59f8b77614c3735495a72889db29f8a75604b36200b000000000000000000000000000000091e3245576c8196acc0c7b09b8570768a9fb4c9b6a5907b65503b2b180500000000000000000000000000000000000000000000000000000000000000000000000f21364b6176899eb4c9b49f8a7661667b90a6b7c3ae99836e594834180800000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000182d43586d8298adc2c9b49f8a745544311d0800000000000000000000010f1b29323f4b505e6670787f84898e9193959696959492908d88837e776e645c4d493c321e160a0000000000000000000000000000000002101825303539454b4e50514f4c473b374859657b8d9fb4b49f8a796357505f677680878e919394929089837a6d6056473a291808000000001c31475c71869cb1c6c5af9a85705a45301b000000000000000000000000000000000000000000000000192e43596e8398aec3c9b49f89745443301c0700000013283d52687d92a7bdaa947f6a553f2a15000000000005192b3c54697e93a7b19c8673604a3828161527374454606a7a86929ca4abaea8a4a2a3a4acb1b4b0ab917c67523c364d62788da5b09b85705544311d080000000000000000000000000000000b21364b6075899eb3c9baa9937e696e8399aec4c3ae99836e594834200900000000000000000000000000000000000000000000000000000000000000000000000a1e3246576c8297acc1baa8927d686e8398aec4b7a5907b66513b2b180000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000002172d42576c8297acc1cebbaa8b75604b36200b00000000000000000002101f2c39464b5d65717c858c949a9fa8a6a9aaababaaa9a8a5a79e99938b837a6e625a4f4232281a0b00000000000000000000000000000412202d36434a525760646666646159544b454c5d6b8095a2b4a99c8675614b4d58616b72797c7e7f7d7b756e645c4b4538291c0c00000000001d32485d72879db2c7c4af9a846f5a452f1a050000000000000000000000000000000000000000000003182d43586d8298adc2cdbaa98a74604a35200b000000142a3f54697f94a9beab96816c56412c170100000000000e21364c6176899eb3a4917c675645321e11192736434a5c64737d868f959b9fa8a3a4a4a3a89f9b958f806b564043546a7f94a9aa957f6a55372715020000000000000000000000000000071b2d3e53687d92a7b9c9b49f8a7761667c91a6b7cab49f8b77624d3726140100000000000000000000000000000000000000000000000000000000000000000000031629394f64798ea3b5c6af9a846f768a9fb4c8b29d8774604b35200d0000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000002172d42576c8297acc1cfbcab8b75604b36200b00000000000000000210202e3d4957616d7b86919a9fabafb4bac6bebfc0c0bfbfbdc5b8b3aeaa9f998f837869604b4538291b0b0000000000000000000000000212222f3e4a5460676f76797b7c7a77716960574d4b6073849aa6b6a498826d604e464c565b6367696a686560564f4a3e32281a0c0000000000001d33485d72889db2c7c4af99846f5a442f1a050000000000000000000000000000000000000000000003182d42586d8297adc2cebaa98a75604b35200b000001162b40566b8095abc0ad98826d58432d180300000000000a1e3346576a8095a8b29d8775604b3f2e1e0e1825303e4b556067717a8086898c8e8f8f8e8c8985807a6b6250374a6073869cb1a28d78624d38230d0000000000000000000000000000000d22364a5c71859bb0c5c3ae98836e596074889db3c9bbaa957f6a5544311d0800000000000000000000000000000000000000000000000000000000000000000000000b22364a5c71869bb0c6b49f8b767d92a9babbaa95806a5544311d080000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000003182d43586d8298adc2cab49f8a755645321d09000000000000000010202e3e4b5b6375828d9ba3afb5bcc9c8c2c7bab4b2b2b2b3b4bbc8c0c8bbb4aea1998a7e6e60564639291a0a000000000000000000000010212f404c5c64727c848a8e90918f8b867f75675f4a556277889eabb2a0927e685b4a393d4a4e52545452504b4538362d1d150a000000000000001c32475c71879cb1c6c5af9a85705a45301b000000000000000000000000000000000000000000000003192e43586e8398adc3c9b49f8a745544311d08000002172d42576c8297acc1ae99846e59442f19040000000000031729394c6176899eb4a595806b5d4b3c2b1c0d131c2e37444b525c646b707477797a7a797774706b645c50444455667c91a4b09a85705a4935200c0000000000000000000000000000031729394f64798ea3b5c9b6a5907b6550556b8095abbcc8b29d8774604b35200e0000000000000000000000000000000000000000000000000000000000000000000000071b2d3e53687e93a8b9bbaa917d8399aec7b49f8b78624d372614010000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000004192e44596e8399aec3c9b49e89745f38281502000000000000000e1e2e3e4b5c647986979fabb5c1cac5b8b3aca7a99f9d9c9d9d9faaa6abb1b5c2bfb3a89e938274615746382816030000000000000000000c1c2e3f4c5e667a8591999fa9a5a6ab9f9b94887d6b605459657b8d9fb4b49f8a796357463236393c3e3f3d3b363228221b100200000000000000001c31465b71869bb0c6c6b09b86715b3928160300000000000000000000000000000000000000000000001325365a6f8499afc4c8b39e89735e49261401000003182e43586d8398adc2af9a856f5a45301a050000000000000b1f334758697e94a2b49f8d7b655a483a2b1d1010192631353e4b4f5654606263646463626054554f4a3e3e4b6074869cb1a3917c67523c2c190600000000000000000000000000000a1e3346576d8297acc1c8b29d8773604a4d62788c9fb5cab7a6917c66513c2b190600000000000000000000000000000000000000000000000000000000000000000000001021364b6176899eb4c8ad98828a9eb3c4ae99846f5a48341909000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000005192b3b5b70869bb0c5c7b19c87725c47321d000000000000000a1a2b3c4b5c647a899ca4b5bcc9c3b6b2a79e97918d8a888787888a8c90959ca4aeb3bfb9b4a0988475615645321e09000000000000000004172a3a4b5d667c8a9ba3afb0a8a4a4a6adb0a69d918072604a5d6b8095a2b4a99c8675614b42312427292a2825211e160a0700000000000000000000192f44596e8499aec3c8b39d88735745321e0900000000000000000000000000000000000000000000071c30435471869cb1c6c6b19c87715c47321c00000004192e43596e8398aec3b09a85705b45301b060000000000000417293a4b6073859ba9ab9d88786258483b2e1d1509141d202e373a36434a4d4e4f4f4e4d4a43363a363d4b5c697f94a4b09b8572604a35200e0000000000000000000000000000000c21364c61768a9eb4c9bbaa947f6a5443495a6f849aafc4c4af99846f5a4935200a00000000000000000000000000000000000000000000000000000000000000000000000a1e3346576d8297acc1b49f8a9ea8b9b7a6917c66513c2b1900000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f1904000000000000000000000000000000000b2034485973889eb3c8c4af99846f5a442f1a05000000000002152738485a647a8a9ea7b6c2c8bbb4a59c9289827c78757372727375777b80868f99a1b2b7beb2a39a8475604b36210b00000000000000000a1f334758657b8c9ea8afa39b938f8e91979faab39e957f6a5e4b6073849aa6b6a498826d604e3d2d1b141513100b0902000000000000000000000000172c41566c8196abc1cab59f8b76604b36210b000000000000000000000000000000000000000000000b20354a6074899eb3c9c4ae99846f59442f1a04000004192f44596e8499aec3b09b86705b46311b06000000000000000c1c30435463798b9faba69c867662594b3e3127191109101b222525303537393a3a3937353025313e4a5b647a8b9fb4a0907b655443301c070000000000000000000000000000081b2e3f53697e93a8b9cab49f8b77624c363c51677c91a6b8cab49f8c78624d3827150200000000000000000000000000000000000000000000000000000000000000000000031729394f647a8fa3b5bbaa9faab9c6b29d8874604b35200d00000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f1904000000000000000000000000000000000d22374d62778ca6b8cbc1ac96816c57412c17020000000000091d3145566278889ea8b9c5c5b8aa9f95877d756d676260545d5d546062666b717a83909da5b4b7a69c8777614c37210c00000000000000031729394c6176889daaaf9e95857e7a797c828b9da6b49f8c7b6655556277889eabb2a0927e685b4a39291603000000000000000000000000000000000014293e53697e93a8c7cfbcab8f7a644f3a250f000000000000000000000000000000000000000000000e23384d63788da8b9ccc1ab96816c56412c17010000041a2f44596f8499aec4b19b86715c46311c070000000000000001142636495b677d8d9fb5a49c8677645c4b44372f211e160e0b0f131c20222425252422202d36424e5c6479889da9a497826d5e4c3625130000000000000000000000000000000e22374b5d71869cb1c6c3ae99836e594834364b6074889eb3c9bcab95806b5645311d0900000000000000000000000000000000000000000000000000000000000000000000000b22364a5c71869bb1c6bbb4bbc8bcab95806a5544311d0800000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000215283851677c91a6c5d3c3a7927d67523d28120000000000061a2c3d4b6074859ba6b8c6c4b7a69e8c7f74686056524d4b433636434b4d51565c646e7b879aa2a79d8878625847331f0a000000000000000a1e3346576b8095a6b2a0958072696564666d7a889dabab9c8673604b59657b8d9fb4b49f8a79635746321e1301000000000000000000000000000000000f243a4f647a8fa9bacdc9a9937e69543a2a170400000000000000000000000000000000000000000316283852677d92a7c6d3c3a7927c67523d2712000000041a2f44596f8499aec4b19b86715c46311c07000000000000000008182c3d4d5f6a7f959fb0a49c877a6a60554c4036322823201d151b1b141d20232630353d4a4e60687a889da6a79c8675614b402f1808000000000000000000000000000004182a3a4f657a8fa4b5c9b7a5907b66503b2a3144556b8096abbcc9b39e8875604b36200f0000000000000000000000000000000000000000000000000000000000000000000000071b2d3e53687e93a8b9cdcacecab49f8b78624d3726140100000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f1904000000000000000000000000000000091d3245566d8297adc2cab6a48d78634d38230e00000000000c2136495b6b8095a3b5c4c7b7a69d887b6a60564b453838353026263035373b3e4a4f5d65768495998979635a483a2a1704000000000000000c21364c6176899eb3ae98836e60544f4f515c657b8c9fb4a4927d67524c5d6b8095a2b4a99c8675614b42311f0f000000000000000000000000000000000b20364b60758a9fb4c9c4af9a846f5847331f0a0000000000000000000000000000000000000000091e3245566d8398adc2cab6a58d78624d38230d000000041a2f44596f8499aec4b19b86715c46311c070000000000000000000f1f304150616c81969eb5a59d8b7f73665e524b45383835312730302631353936434b505b636f7d8a9da6a79e89796357463221110000000000000000000000000000000a1f3347586d8298adc2c8b29d8774604b352027374d63788c9fb5cab8a6917c67523d2c1a0600000000000000000000000000000000000000000000000000000000000000000000001021364c61768a9eb4bababac4af99846f5a483519090000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000001325364b6075889eb3c8c7b29c87725a4935200c00000000071b2d3e4e63798b9fb4c1cdbaa99d8879655d4b4538312723201c14141c2022262e363f4b58617380847a645b4a3c2b1c0c000000000000000012273c52677c91a7b4a38d78634d4336393d4b5d6e8399aeaf9a846f57464b6073849aa6b6a498826d604e3d2d1b0b000000000000000000000000000000091d3145566f8499afc7c9b49f8a77614c38281502000000000000000000000000000000000000001325364b6075899eb3c9c7b29c87725a4935200b000000041a2f44596f8499aec4b19b86715c46311c0700000000000000000001132333434a607280949fabaa9f94867b70676056524d4b4437454537444b4e525460656e7984929fa9a69d897a645b4a392816030000000000000000000000000000001325364c61778a9fb4c9bbaa947f6a5443301c2135495b70859aafc5c4af9a85705b4935210a00000000000000000000000000000000000000000000000000000000000000000000000a1e3346576d8297a5a5a5a5a5a6917c66513c2b19000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000091c304354677c91a7b8ccc0aa95806b553c2c1906000000000d22364a5c6e8399aabbcec0b49f8a7a645b4b3f31271d150d0b080101080b0d111b222f3a4755606a6f645c4a3d2d1e0e000000000000000002172d42576c8297acb09b85705a493525242e3f51667c91a6b49f8a76614b44556277889dabb2a0927e685b4a3929160300000000000000000000000000000215273853687d92a9bacdbaa9947e695645321d0e000000000000000000000000000000000000081c304354677d92a7b9ccc0ab95806b563c2b1906000000041a2f44596f8499aec4b19b86715c46311c070000000000000000000005151c304354606b7f8d9da6b4a49c90857c756d686360555b5a5b5b556063676d747b838d9aa2b4a29a887a645c4a3d2d1b0b000000000000000000000000000000071c304354697f94a9bacab49f8b77624d362614192c3c52677d92a7b8c8b4a28d79634e3828160300000000000000000000000000000000000000000000000000000000000000000000031729394f647a8f9090909090908874604b35200e000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000009192a3a4a6073869bb1c5c7b3a28e79634e39230e0000000004172a3a4f647a8ea1b3c8c9b4a2927e685c4a3d2e1d150a0200000000000000000007111c2937444b555a4f4a3e2d1f0f000000000000000000071c31475c71869cb1ab96816c563c2c191122374c61778ca7b9a98f7a6550374859657b8d9fb4b49f8a79635746321e130100000000000000000000000000000c21374c61778a9fb4c9c7b29d8775604b3c2b1a0a0000000000000000000000000000000008182a3a4a6073869cb1c5c8b4a28e79644e39240f00000000041a2f44596f8499aec4b19b86715c46311c07000000000000000000000000132536434a61697b8798a0b0b1a39b9189827d787572717070717375787d828890999faba99f958477645c4a3e2d1f0f000000000000000000000000000000000b20354a6073879cb2c7c3ae99836e59483418080e20364b6075889eb3c8c0ab96816c5645321e0900000000000000000000000000000000000000000000000000000000000000000000000b22374b5c657b7b7b7b7b7b7b79635544311d08000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000a1826374758677c91a3b5c9bfaf9a846f5b4936210c000000000a1f3347586d8298adbfcfbcab9a846f604e3e2d1f1102000000000000000000000000000c1927313540443a362d201001000000000000000000091e33495e73889eb3a8937e69533e29140b1f34475974899eb3a7927c67523d3b4c5d6a8095a2b4a99c8675614b42311f0f00000000000000000000000000000a1f3347586d8297abbccbb7a5947e695a483828190b00000000000000000000000000000a1826364758677d92a4b5c9c1b09a85705c4a36210d00000000041a2f44596f8499aec4b19b86715c46311c0700000000000000000000000008182530434f5d6576828f9aa2afb0a79e98928d8a8786858586888a8e92979da6aeaca0988a7f7362594a3e2d20100100000000000000000000000000000005182b3b50657b90a5b6cab7a5907b66513b2b1800091d3245566c8196abc0c8b39e8975604b36210f0000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4b5d65656565656565635b4a37271501000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000007101b283644556176889db3c1c8b3a1907b65503d2c1a06000000000c21374c61768a9fb4c9cab59f8d79644e423120100100000000000000000000000000000009151d202b2f24221b100200000000000000000000081c304354758a9fb4a7927d67523d281204182a3b5d72889db2a9937e69543e2f3f4b6072849aa6b6a498826d604e3d2d1b0b0000000000000000000000000004172a3a4e63798c9fb5c7c3b49e8a7862564537291b100600000000000000000000050f1a273643546176889eb3c2c9b5a3917c66513d2d1a0700000000041a2f44596f8499aec4b19b86715c46311c070000000000000000000000000008131c323f4b58616d7b85909a9faab0ada7aa9f9c9b9a9a9b9d9faaa7adada89f978e83786a6055483b2d201002000000000000000000000000000000000b203448596e8399aec3c8b29d8774604b35200d00021528384e63798ea2b4c8b8a7927d68523e2d1a07000000000000000000000000000000000000000000000000000000000000000000000010202e3f4b505050505050504e4a3d2d190900000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f190606060606060003090c101a212e3945546073839aa6b8cbbbaa9a846f5d4c381f0f000000000114263652687d92a9bacdc4ae99836e5c4a36241302000000000000000000000000000000000001080b151a0f0d070000000000000000000000000b20354b60758a9fb4a7927c67523d2712031628395d72879db2a9947e69543f293043546277889dabb2a0927e685b4a39291603000000000000000000000000000c21364a5b6d8298a9bacdb9a89b8574605546392e211a0f0c0600030300050b0d18202c38455460728399a6b8cbbdb09b8572604a35200f0000000000041a2f44596f8499aec4b19b86715c46311c0700000000000000000000000000000014212f3a464c5d65707b848b939b9fa9a8abadaeafafaeadaaa7a79e98928a82796e625a4b44372a1d100200000000000000000000000000000000011426374c62778b9fb4cabbaa957f6a5443301c0800000a2135495b70859ab0c5c5b09b85705c4a36210b00000000000000000000000000000000000000000000000000000000000000000000000211212e373b3b3b3b3b3b3b39362d1f0f0000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59442f1b1b1b1b1b1b1b1b161e21252d363e4b5760728197a1b3c4bfb49f8b79634e3f2f1c0100000000081c3043546e8399aec7cbb7a6907b65503e2d1a060000000000000000000000000000000000000000000005000000000000000000000000000000081c30435473899eb3a8937d68533e2813091e32455773899eb3a7927d68523d2826364859657b8d9fb4b49f8a79635746321e1301000000000000000000000000071a2d3d4d62788a9fb4c0c6b5a399827361574b3f352c23211a191918191920222b343d495660728197a1b3c4c2b19f8f7b655443301c070000000000041a2f44596f8499aec4b19b86715c46311c0700000000000000000000000000000003111c29333f4b505e656f777e858a8f939697999a9a999795918e89837d766c635b4d483c3126190d000000000000000000000000000000000000081d3144556a7f95aabbcab49f8b78624d362614010000061a2c3d52677d92a7b9c8b4a38e79644e39291703000000000000000000000000000000000000000000000000000000000000000000000003111c232526262626262624211a0f010000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e59443030303030303030312832363a3d4a4e5c647582979fb1bfc1b3a1947f695b4a36211100000000000b20354b6074899eb4c9c8b39d8873604a35200f000000000000000000000000000000000000000000000000000000000000000000000000000000011426365d72879cb2aa95806a553929160b21364b60768a9fb4a6917b66513c26182a3b4b5d6a8095a2b4a99c8675614b42311f0f000000000000000000000000000f2035485a697e94a2b3c3c1b2a1998376645d4e493d38352c2f2e2e2f2b35383b484d5b637481979fb1bfc5b6a497816c5d4b362513000000000000041a2f44596f8499aec4b19b86715c46311c0700000000000000000000000000000000000c171f2e37404c505962697075797e81828485858382807c79756e6761584e4a3d352b1d1409000000000000000000000000000000000000000b20354b6074879db2c8c4ae99846f5a48341808000000000f21364b6075899eb3c9c1ac97816c5746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000080e101010101010100e0c0700000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e594545454545454545454639464b50555c646d7a8698a0b1bdc2b5a3998372604a3d2d1a0300000000000e23394e63798ea8b9ccc2ac97826d5443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aeae99846f5746321e192a3a4f657a8fabb7a58d78624d38230d1d2f3f4b6072849aa6b6a498826d604e3d2d1b0b00000000000000000000000005192b3c4a6072849aa4b6c4bfb2a199867a6d635b534e493d444343443c484d5259626c7985979fb1bdc6b8a79c8675604b3f2e1808000000000000041a2f44596f8499aec4b19b86715c46311c0700000000000000000000000000000000000004111c232f383b484c54566064696c6d6e706f6e6d6b67636055524c473a362d20190e010000000000000000000000000000000000000006192b3c51667c91a5b7cbb7a6917c66513c2b190000000000091e3245566c8196acc1c9b49e8976614b3621100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99846e5b5b5b5b5b5b5b5b5b5b5b5c5761656a7179828d9ca4b2bec0b4a49b8575615443301f0f00000000000013283d52687d92a7c6d6c9a7927d6752362513000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93abb49e8976614b3d322d3747586b8096abb29d87725a4935200b111c3043546277889dabb2a0927e685b4a392916030000000000000000000000000e1c3043546176869ca6b7c3bfb3a49c8d82797068635b5b595858595b5a62676f77818b9ba3b1bec5b8a89e897963574532211100000000000000041a2f44596f8499aec4b19b86715c46311c07000000000000000000000000000000000000000008111c232a343738454b4f535658595b5a595855524e4b4437373329211a0f050000000000000000000000000000000000000000000b2035485a6f8499afc3c9b29d8874604b35200d0000000000031628384e63798ea3b4c8b9a8937e68533e2e1b080000000000000000000a131a1c20202020201a1812080000000000000000000000000000000000000000000000080e101c2020202012100a0100000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c3ae99837070707070707070707070707173767a7f868e989fabb5c2bcb5a29a867762574636251301000000000000162b40556b8095aac0cfbcab8e78634e39230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788c9fb5a8947e695b4b453e4a556176899eb3ab97816c573c2b1906011426364859657b8d9fb4b49f8a79635746321e130100000000000000000000000013253647586378889da5b4c0c3b6ab9f988c857e7873716e6e6d6e7073787d848b969faab5c1c2b6a79e8a7b655b493928160300000000000000041a2f44596f8499aec4b19b86715c46311c0700000000000000000000000000000000000000000000090d181f222731363a3e41424445454442403c39353127211f170c0700000000000000000000000000000000000000000000021527374d62788c9fb4cabcab95806b5544311d080000000000000a21364a5b70859bb0c6c6b19c86715c4b37220c00000000000000000d1b272e313535353535302d25190b000000000000000000000000000000000000000003111c2325313535353528251e1305000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6c8b39e8985858585858585858585858686888b8f949ba3adb5bcc2b5ab9f9684766259483929180800000000000000182d43586d8298adc2cab59f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a6e8399abb49e8a796860565b5c64738399a7b49f8c78634d38230e000008182a3b4b5d6a8095a2b4a99c8675614b42311f0f00000000000000000000000008182a3a495a6378879aa2b4bbc8bcb5ab9f9a938d89868483838486888d92999faab4bbc8bdb1a49c897a655d4b3d2c1b0a0000000000000000041a2f44596f8499aec4b19b86715c46311c07000000000000000000000000000000000000000000000000050b0d151d2024292c2d2f30302e2d2b2723201d150c0a04000000000000000000000000000000000000000000000000081d3144556b8095abbccab49f8b78624d37261401000000000000071a2d3d53687d92a8b9c9b5a48f7a644f3a2a17040000000000000a1b2b3943464a4a4a4a4a4541372919080000000000000000000000000000000000000211212e373a464a4a4a4a3d39302313010000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6ccb8a79e9a9a9a9a9a9a9a9a9a9a9a9b9c9ea6a5aab1b5c1c3b6b2a49c8d80746158483b2a1b0b00000000000000001a30455a6f859aafc4c8b39d88735645311d09000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4f647a8c9fb4a89e897d757170737a8499a1b3a598826d5b4935210c0000000d1d2f3f4b6072849aa6b6a498826d604e3d2d1b0b0000000000000000000000000c1c2c3c495a637784959faab4c0c9bcb4afa8a79e9b999898999b9ea6a7aeb4bbc8c2b5b19f978679645c4b3f2e1f0e000000000000000000041a2f44596f8499aec4b19b86715c46311c0700000000000000000000000000000000000000000000000000000002090b0f141718191b1a191816120e0b08010000000000000000000000000000000000000000000000000000000b20364b6074889db3c9c4af99846f5a4835190900000000000000000f21364b6175899eb3c9c2ad98826d5847331f0a00000000000013273949565c60606060605a544837251200000000000000000000000000000000000010202e3f4b4f5c5f606060524d41301e0a0000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1c6d5c5b8b3b0b0b0b0b0b0b0b0b0b0b0b0b1b3b8c4bfc7bab4aea59d93867b6b6055463a2a1d0d0000000000000000001b31465b70869bb0c5c6b19c87715c382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22364a5c6b8095a1b0a79e938a8685888e9aa2b3a79d8776614c3c2c190600000000111c3043546277889dabb2a0927e685b4a392916030000000000000000000000000e1e2c3c49596273808c9aa2afb5bcc9c5c5b8b3b0aeadadaeb0b3b8c5c4c6c1b4b0a49c8f8275635b4b3e2e211000000000000000000000041a2f44596f8499aec4b19b86715c46311c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d52677c91a6b8cbb7a6917c66513c2b19000000000000000000091e3246576c8197acc1c9b49f8a76614c3721110000000000001a2e4356677175757575756f6654412d1803000000000000000000000000000000000c1c2d3e4b5d657175757575675f4d3925100000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869bb1bababababababababababababababababab9c5b8b3b0aba99f9991877e73655d4b4437291c0d000000000000000000001c31475c71869cb1c6c6b09b86715b46311c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4b607383969fb0b3a99f9b9a9da6afb3a59c897a645847331e0e0000000000011426364759657b8d9fb4b49f8a79635746321e0a000000000000000000000000000e1e2c3b4855606b79848f999fabb0b4bbc8c1c3c3c3c2c3c4c1c9bcb5b1aba39b91867b6d6157493d2e20100300000000000000000000041a2f44596f8499aebab19b86715c46311c070000000000060c0e1f20202020201f180b0801000000000000000000000000000000000000000000030d13151f2020202020201c0b0902000000000000000000000000000000000c2135495b70859aafc4c9b39d8874604b35200e000000000000000000031628394e64798ea3b5c9baa9947e69543f2f1c0800000000001c31465c71868a8a8a8a8a846f5a45301a0500000000000000000000000000000008182a3a4a5c657b868a8a8a8a7d67523d28120000000000000000000000000014293e54697e93a9becab5a08a75604b35200b000000000000000000000000000013283d53687d92a8bdcbb5a08b76604b36210b0000000000000000001c31465c71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a3a79e9b96918a847c746860554b3f3127190c00000000000000000000001c32475c71879cb1c6c6b09b86715b46311c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d3144556073818f9ba3a9adafafadaba79e948779645c4a3a29170000000000000008182a3b4b5d6a80959fa5a99c8675614b38281502000000000000000000000000000e1d2b37444b5b636f7b848c949b9faaa9acaeafb0b0afaeaca9ab9f9c958e857c72655d4b46392c1f10020000000000000000000000041a2f44596f8499a5a5a59b86715c46311c07000000010f1a2123353535353535352d201c140800000000000000000000000000000000000000071520282a3435353535353532201d150a0000000000000000000000000000021628384e63788da2b4c8bcab95806b5544311d08000000000000000000000b22364a5c71869bb0c6c7b19c87725d4b37230d00000000001c31465c71869b9f9f9f9a856f5a45301a050000000000000000000000000000011426364758647a8b9b9faa9f927d67523d28120000000000000000000000000014293e54697e93a9babab5a08a75604b35200b000000000000000000000000000013283d53687d92a8babab5a08b76604b36210b0000000000000000001c31465c71869090909090909090909090909090909090908f8e8e8b8985817c766e6760554b44372e1d15090000000000000000000000001c31465b71869bb0c6c6b19c86715c3626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374455606c7a858d9497999a989690897f74635b4a3e2d1c0c00000000000000000d1d2f3f4b6072818d90909090836d5645321d0900000000000000000000000000000d1927313d4a4e5d656f787f868b909396999a9b9b9a999794918b868079706660544b3f32281b0f01000000000000000000000000041a2f44596f83909090909086715c46311c070000000f1f2c36394a4a4a4a4a4a4a4235302618080000000000000000000000000000000000051525333c3f494a4a4a4a4a4a473631271a0a00000000000000000000000000091e3245566c8196abc0cab59f8c78624d3727150100000000000000000000071b2d3e53687e93a8b9cab6a4907b65503b2a1805000000001c31465c71869bb1b5af9a856f5a45301a0500000000000000000000000000000e1c3043546176879da9b4bba7927d67523d28120000000000000000000000000014293e54697e93a5a5a5a5a08a75604b35200b000000000000000000000000000013283d53687d92a5a5a5a5a08b76604b36210b0000000000000000000f243a4f647a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a79787673706c676158514b44373126191102000000000000000000000000001b30455a70859aafc5c7b29d88725443301c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192637444b5d6570787e82848583807b756a6056493d2d201000000000000000000000111c304354606c787a7b7b7b7b74604b36200b00000000000000000000000000000009151d2d363f4b505a626a70767b7e81848586868584827f7b77716b635b514a43362e1e160b0000000000000000000000000000000f24394e647a7b7b7b7b7b7a644f3a240f000000061a2c3d494e5f60606060605f574b4336261401000000000000000000000000000000001323334350555f6060606060605c4b45382715020000000000000000000000000b21364b6075899eb3c8c4af9a846f5a493519090000000000000000000000001021364b61768a9eb4c9c2ae98836e5947341f08000000001c31465c71869bb1c4af9a856f5a45301a05000000000000000000000000000e1e2f404b60728399a5b7c7bca7927d67523d28120000000000000000000000000014293e54697e9090909090908a74604b35200b000000000000000000000000000013283d53687d9090909090908b74604b36210b0000000000000000000d22374b5c6465656565656565656565656565656565656565646361585b56514c463a3531261d1409000000000000000000000000000000192e43586e8398adc3c9b49f8a75604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091926313f4b4f5b63696d6f706e6b6560564b45382c1f10020000000000000000000001142636434b5b636565656565605645321d0900000000000000000000000000000000010f1a212e373c484d54576165696c6e6f7070706f6c69666158564e4a3d353025181103000000000000000000000000000000000d21364a5c646565656565645c4b37220d0000000c2136495b63747575757575746d605443301c100000000000000000000000000000000c1c304150616a7475757575757571605645311d090000000000000000000000071a2d3d52687d92a7b8cbb8a6917c67513c2c19000000000000000000000000000a1e3346576d8297acc2c9b49f8b77624c362614010000001c31465c71869bb1c4af9a856f5a45301a050000000000000000000000000a1a2b3c4c5e6a8095a1b3c3d4bca7927d67523d2812000000000000000000000000000d22384d62787b7b7b7b7b7b7b72604a35200b00000000000000000000000000000d22374d62777b7b7b7b7b7b7b74604b35200b000000000000000000071b2e3e4b4f505050505050505050505050505050505050504f4e4c463a413c363329201d14090100000000000000000000000000000000162b40566b8095abc0cebbaa8d77624d38220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2e373c494d54585a5a5856504b453832281a0e00000000000000000000000000081826303c494d50505050504b453828150200000000000000000000000000000000000007111c232b353839464b505457595a5b5b5a595754514c473a39362d201c1308000000000000000000000000000000000000071a2d3d4a4e50505050504f4b3e2e1b070000000e23394e63798b8a8a8a8a8a8a8272604b3e2e1a0a000000000000000000000000000417293a4d5f6a7f898a8a8a8a8a8a8675604b36200b00000000000000000000000d21364a5c70859bb0c5c9b39e8874604b36200e00000000000000000000000000031729394f647a8fa4b5c9bbaa947f6a5443301c080000001c31465c71869bb1c4af9a856f5a45301a05000000000000000000000002152838485a667c8d9fb4bfd0d2bca7927d67523d2812000000000000000000000000000b2034485a6265656565656565605443301c0700000000000000000000000000000b203448596265656565656565605443301c080000000000000000000010202e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a39393633292c27211f170b080100000000000000000000000000000000000013283e53687d93a8c6d7c8a6917b66513c2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101b222c35383f42444543413b3631271e160a00000000000000000000000000000008141c2c35383b3b3b3b3b3632281a0a000000000000000000000000000000000000000000080e1920222933363b3e41444546464544423f3c37332a23211a0f070000000000000000000000000000000000000000000f1f2d36393b3b3b3b3b3a372e2010000000000c2136495b6a7f94a39f9faa9f95806b5c4b382815020000000000000000000000000a1f334758677d919ea89f9f9f9f8c7a645645311d0900000000000000000000031629394e64798ea3b4c8bcab96806b5544311d0800000000000000000000000000000b22374b5c71869cb1c7c8b29d8773604b35200e0000001c31465c71869bb1c4af9a856f5a45301a0500000000000000000000010f1d3245566278899eabbccfddd2bca7927d67523d28120000000000000000000000000005192b3c484d505050505050504a4336251300000000000000000000000000000005182b3b484d505050505050504b43362614010000000000000000000002101b2224262626262626262626262626262626262626252423211f1717120c0a040000000000000000000000000000000000000000000f24394e64798ea8b9cdc0aa95806b553c2c1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e192123292d2f302e2b26201d150a020000000000000000000000000000000000010e1921232526262626201d150a000000000000000000000000000000000000000000000000050b0d171e2126292c2f303131302f2d2a26211f170e0c070000000000000000000000000000000000000000000000010f1a2124262626262624221b100200000000061a2c3d4b6073859ba9babbb49f8c7a645645321d1000000000000000000000000a1a2e3f4c6176889eb3b9c6b6a596816b5c4b38271502000000000000000000000a1e3246576c8197acc1cab59f8c78634d372715020000000000000000000000000000071b2e3e53697e93a9bacab7a5907b66513c2b190500001c31465c71869bb1c4af9a856f5a45301a05000000000000000000000f1f30414b6074859ba7b8c9d9ebd2bca7927d67523d281200000000000000000000000000000d1d2b34383b3b3b3b3b3b3b3530251808000000000000000000000000000000000d1d2b34373b3b3b3b3b3b3b353026180800000000000000000000000000070d0f101010101010101010101010101010101010100f0e0c0a0400000000000000000000000000000000000000000000000000000b20354b6075899eb4c9c6b09b86715a4935200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e14181a1b1916100b0902000000000000000000000000000000000000000000060c0e10101010100b090200000000000000000000000000000000000000000000000000000000030a0c101417191a1b1b1b1a1714110c0a0400000000000000000000000000000000000000000000000000000000070d0f10101010100f0d07000000000000000f1d31445563798b9fb4c1bbaa9c8674604b3e2d1909000000000000000000021527384b5d6d8297a6b8cbbcab9c8775604b3e2e1a0a00000000000000000000000c21364b6176899eb4c9c5af9a846f5b49351909000000000000000000000000000000001021364c61768a9fb4c9c3ae99846f5a4835200900001c31465c71869bb1c4af9a856f5a45301a050000000000000000000b1b2d3d4d5f6c8197a3b5c5d5dfe2d2bca7927d67523d28120000000000000000000000000000000d19202226262626262626201c13080000000000000000000000000000000000000d18202226262626262626201c140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556f8499aec7cab59f8c78624d39291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374a5b6a7f94a3b5c7b6a495806b5c4a372715020000000000000000091d314556657b8d9fb5c4c4b59f8d7b6557453220100000000000000000000000081b2e3e53687e93a8b9ccb8a7917c67523c2c1900000000000000000000000000000000000a1f3346586d8298adc2cab49f8c78624d37271502001c31465c71869bb1c4af9a856f5a45301a050000000000000000031729394a5b677d929fb1c1c9c6c9ced8bca7927d67523d281200000000000000000000000000000000050b0d101010101010100b07000000000000000000000000000000000000000000050b0d101010101010100b08010000000000000a131a1c202020202020191711070000000000000000000000000000000000000000050b0d2020202020202012100a0100000000000000000000000000000114263752687d92a9bacdbcab95806b5746331e0f0000000000000000000000000000000000000000010802000000000000000000000000000000000000060b0d0f0f0d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0e0f0f0d0b0500000000000000070d0f2020202020201816100600000000000000000000000000000000000000000000000000000b141b1d202020202020201b120600000000000000000000000000000009192d3d4b6073859ba9bac2b49f8c7a645544311d0f00000000000000061a2c3d4b6074869cabbccbb7a697816c5d4b3928160200000000000000000000000d22374b5c71869bb1c6c1b39e8875604b36200e00000000000000000000000000000000000417293a4f657a8fa4b5c5bcab95806b5544311d08001c31465c71869bb1c4af9a856f5a45301a050000000000000003111e33465763798a9fb4bdc2b5b1b4bbc8bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b272e313535353535352f2c24190a0000000000000000000000000000000000000d181f353535353535353528251e130500000000000000000000000000000c21374c61768a9fb4c9c9b39e8976614c3d2d1b0b00000000000000000000000000000000030a0c161d170b080100000000000000000000000000000e192023242423201d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202324242220180d0000000002101b22243535353535352d2b2317090000000000000000000000000000000000000000000000000e1c282f32353535353535352f2416060000000000000000000000000000000f1d31445563798b9fb4c1bbaa9b8674604b3d2d19090000000000000c2135495b6a7f95a4b6c9beb29d8776614c3f2e1b0a0000000000000000000000000f253a4f647a8fa3a5a5a5a395806b5645321d090000000000000000000000000000000000000b22374b5d71869ca7a5a5a59d8874604b36200b001c31465c71869bb1c4af9a856f5a45301a0500000000000000112132434c6176869ca8bac6b5a49c9faabbbca7927d67523d28120000000a131a1c20202020202019161006000000000000000000000000000000000000040a0c181e20202020202017140e05000000000000000000000000000000000a1b2b3943464a4a4a4a4a4a444036291907000000000000000000000000000000000d1d2a344a4a4a4a4a4a4a4a3d3930231301000000000000000000000000000a1f3347586d8297adbfccb8a795806b5b4a39291a0c00000000000000000000000000000b171e212c322d201d15090000000000000000000000000e1e2b3538393938353126191305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141927313638393937342b1d0d00000010202d36394a4a4a4a4a4a423f35271706000000000000000000000000000000000000000000000b1c2c3a44474a4a4a4a4a4a4a42342412000000000000000000000000000000011527374a5b6a7f95a3b5c8b5a3957f6a5b4a37261401000000000c1c31414e63798b9fb4c2c4b2a0907c66574633211100000000000000000000000000182d43586d8290909090908e8575614c38281502000000000000000000000000000000000000081b2e3f4f647a898f90909090907c67513c2712001c31465c71869bb1c4af9a856f5a45301a050000000000000d1d2e3f4f616e8399a4b6c6b9a89c868b9fb4bca7927d67523d281200000d1b272e313535353535352e2b23180a000000000000000000000000000000000b171f212d333535353535352c2922160800000000000000000000000000000013273949565c60606060606059544736241100000000000000000000000000000005182a3b485e60606060606060524d41301e0a0000000000000000000000000004172a3a4e64798ea0b2c7c5b49f8b7963574638291c10060000000000000000000008111b29333641484235312719090000000000000000000006192b3c484d4e4e4d4b4437302313040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614253237444b4e4e4e4d483b2b180500071b2d3e4a4f6060606060605852453523100000000000000000000000000000000000000000000014283a4b575d6060606060605e52422f1b0700000000000000000000000000000009192d3d4b6073859baabbc2b49f8b79635544311d0f00000004182a3a4e5f70849aa9bacbb8a698826d5e4c392917030000000000000000000000000010253a4f657b7b7b7b7b7b7972615746331a0a00000000000000000000000000000000000000001022374b5c64757a7b7b7b7b7b78634e38230e001c31465c71869bb1c4af9a856f5a45301a05000000000009192b3b4b5d697f94a1b2c3bcb39e8a7a8eaabbbca7927d67523d2812000a1b2b3943464a4a4a4a4a4a43403628180600000000000000000000000000000b1b29333642494a4a4a4a4a4a413e3426160500000000000000000000000000001a2e435667717575757575756e6554402c170200000000000000000000000000000b1f3448597075757575757575675f4d39251000000000000000000000000000000c21364a5c6e8398a9bacebaa99c86756156463a2e20190e0b0500030300060c101b222f39464b565d574b44372715010000000000000000000b2035485a6264646260554d41302212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142432434f556063646462594834200b000d22364a5c707575757575756d64523f2b16010000000000000000000000000000000000000000061b2f44576972757575757575705e4a35200a000000000000000000000000000000000f1d31445563798b9fb4c2baa99b8573604b3d2c180800000a1f334758687d92a2b4c7bfb39e8876614c402f1b0b00000000000000000000000000000e22374b5d65656565656564605446392917000000000000000000000000000000000000000000071b2e3e4b5761656565656565635b4935210c001c31465c71869bb1c4af9a856f5a45301a0500000000011527374859657b8c9fb4bfc0b09e917c788da2c8bca7927d67523d28120013273949565c606060606060585346362310000000000000000000000000000919293a464c575e5f606060606056514434220e00000000000000000000000000001c31465c71868a8a8a8a8a8a836e59442f190400000000000000000000000000000d22374c62778a8a8a8a8a8a8a7d67523d28120000000000000000000000000000071a2d3e4d63788b9fb4c0c7b5a499837461584b3f352c222019191818191a21232e37404c57616b726c605544311d110000000000000000000d23384d627879797874675f4d40301808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b32434f61697578797977624d37220d000f24394f647a8a8a8a8a8a8a826d58422d18030000000000000000000000000000000000000000081d32475d72878a8a8a8a8a8a75604a35200b00000000000000000000000000000000011527374a5b6a8095a3b5c7b5a3947f6a5b49362614010a1a2f3f4c6177899eb3c0c5b3a1917c675847332212000000000000000000000000000000081b2e3f4b4f50505050504f4a4336291b0b0000000000000000000000000000000000000000000010202e39464b4f50505050504e493d2c1a06001c31465c71869bb1c4af9a856f5a45301a05000000000e1d3144556277889daabbc4b4a296806b788da2b8bca7927d67523d2812001a2e435667717575757575756e6453402b16020000000000000000000000021527374658616d737575757575756c62513e291400000000000000000000000000001c31465c71869b9f9f9f9f99846e59442f190400000000000000000000000000000d22374c62778c9f9f9f9f9f927d67523d28120000000000000000000000000000000f2035495a6a7f94a2b4c3c2b3a1998476645d4d493c38352b2e2d2e2f2c35383e4b4f5e667581878173604b3f2e1b0b000000000000000014293f54697e8e8e8d887d675f4d362614010000000000000000000000000000000000000000000000000000000000000000000000000000000000031629394f61697f898d8e8e7c67513c2712000f24394f64798e9f9f9f9f97826d58422d18030000000000000000000000000000000000000000081d32475d72879c9f9f9f9f8a75604a35200b000000000000000000000000000000000009192d3d4b6074869baabbc1b49f8b79635443301c0e1628384b5d6d8298a7b8ccb9a799836e5f4d3a2a17040000000000000000000000000000000010212e373a3b3b3b3b3b39353025180b000000000000000000000000000000000000000000000002101b2932363a3b3b3b3b3b38352c1f0f00001c31465c71869bb1c4af9a856f5a45301a050000000e1f30404b6073849aa6b8c8b7a69a847363788da3b8bca7927d67523d2812001c31465c71858a8a8a8a8a8a826e58432e19030000000000000000000004121d314455617682888a8a8a8a8a8a806c56412c1700000000000000000000000000001c31465c71869bb1b5b5ae99846e59442f190400000000000000000000000000000d22374c62778ca1b5b5b5a7927d67523d281200000000000000000000000000000006192c3c4b6073849ba5b7c5bfb3a29a877a6d635a524d483c444343443d494e545c646f7b87969d95806b5d4b3a291704000000000000000c21374c61778a9fa69d917c675443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e324657697f949ea79e8874604b36200b000f24394f64798ea4b5b5ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2b5b59f8a75604a35200b0000000000000000000000000000000000000f1d314455647a8b9fb4c2baa99b8573604b3c2c181e324556657b90a0b2c5c0b39e8977624c41301c0c000000000000000000000000000000000003101b2225262626262624201c130800000000000000000000000000000000000000000000000000000b161e2125262626262623211a0f0100001c31465c71869bb1c4af9a856f5a45301a0500000b1b2c3d4d5f6b8096a2b4c4bbaa9d88776263788da3b8bca7927d67523d2812001c31465c71869b9f9f9f9f98836e58432e190300000000000000000001122232434b607384979e9fab9fa59a8475604b35200b00000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7cabca7927d67523d2812000000000000000000000000000000000e1d3144556277879da7b7c4c0b3a59c8d82786f68625a5b595858595b5b6369717a84909da5b29f8c7b655846331f0a000000000000000a1f3347586d8398adb29c8773604b35200d00000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b6176899eb3ab96806b5544311d08000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b000000000000000000000000000000000000021527374a5c6a8095a4b5c7b4a3937e695a4936252c3d4b6074869cb2bec6b3a2927d6859483423120000000000000000000000000000000000000000080e1010101010100f0b070000000000000000000000000000000000000000000000000000000000030a0c1010101010100e0c06000000001c31465c71869bb1c4af9a856f5a45301a050003162839495b677c919eb0c0beb49f8c7b655963788da3b8bca7927d67523d2812001c31465c71869bb1b5b5ad98836e58432e19030000000000000000000f1f2f404f616c8197a2b3b4b9a89c8776615544311d0800000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000000000000000000000000000000000114263748596379899da6b5c1c3b6ab9f978b847d7873706e6d6d6e7073787f868f99a1b2b7bcab9d8776614c36210c0000000000000004172a3a50657a8fa4b6a5907b66503b2a1805000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d53687d92a7b59f8c78634d37271502000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b0000000000000000000000000000000000000009192d3e4b6074869caabbc1b49f8a786354433036495b6b8095a4b6cab9a89a846f604e3b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a0502101e32465763798a9eb4bcc2b2a0947f695d4e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e190300000000000000000d1d2d3d4c5e697f949fb1c0bcab9e8a796358473726140100000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000000000000000000000000000000000009192b3b4a5b6379889ba3b5bcc9bcb5aa9f99928d88858382838486898d949ba3afb3bfc2b5a99f917c67523c271200000000000000000c23374b5d72879cb1ae99836e5948341f080000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c70859bb0af9a846f5a4935190900000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b00000000000000000000000000000000000000000f1d314455647a8c9fb4c2baa89a8472604a3c435463798b9fb4c3c0b49e8a78624d41311d0d000000000000000000000000000000000000000000000000000000010d161c1e20202020202015130d0400000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a00102031424b6175869ca8b9c6b6a498826e614f4e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e1903000000000000000a1a2a3b4a5c667c8d9fb4bdbeb59f8d7c665b493a2919090000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d28120000000000000000000000000000000000000d1d2d3d4a5b637885979fabb5c1c8bbb4afa7a69d9a999898999b9ea7a9b1b5c1c6b9b3a39b8b7d675f4d3925100000000000000000081c2e3f54697f94a9b49f8b77624c3625130000000000000000000000000000000000000000000000000000000000000000000000000000031628394e64798ea3b5a6917c67523c2c190000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b0000000000000000000000000000000000000000021527374a5c6b8095a4b5c6b4a2937e685a484a6072849aa9bac7b4a2937e695a4835231300000000000000000000000000000000000000000000000000000001111e2a31343535353535352b28211507000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a0c1c2e3e4e606d8298a4b5c6b9a89c8675614b434e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e1903000000000000081828384859647a8a9eabbcc1b2a0947f6a5e4c3d2c1c0c000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000000000000000000000000000000000000000f1f2d3d4a5a6274818d9ba3b0b4c1c6c4c4b8b3b0aeadadaeb0b3b8c5c6c5b9b3a89e948679675f4d41301d0a0000000000000000001122374c61778a9fb4aa947f6a5443301c0700000000000000000000000000000000000000000000000000000000000000000000000000091e3245576c8197acb39e8875604b36200e0000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b00000000000000000000000000000000000000000009192d3e4b6074869caabbc0b49e8a78624d59687e93a2b4c7baa99a8472604a3c2b19050000000000000000000000000000000000000000000000000000000d1e2f3c45494a4a4a4a4a4a403c332515040000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a45301a182a3a4b5c697e93a0b2c2bdb49e8a79635746384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e190300000000000013253645566277879da8b9c5b5a398826e6150402f1f0f00000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d281200000000000000000000000000000000000000010f1f2d3c4956606c7a85919ba3abb1b6c2bfc1c4c3c2c2c3c3c1c7bab4afa79e95897f74635b4d41302312010000000000000000000a1f3347586e8398adb29d8773604a35200c000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075899eb3ab96806b5645311d090000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b00000000000000000000000000000000000000000000101d314556647a8c9fb4c2b9a89a846f606277899eb3c0c1b49f8b79635443301e0e00000000000000000000000000000000000000000000000000000002162a3c4d595e60606060606055504333210d0000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a45301426364758647a8b9fb4bec1b09f917d675b4939384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e19030000000002101c3043546074859ba5b7c6b8a69b8575604b433322120100000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d28120000000000000000000000000000000000000000010f1e2c38454b5c64727c858e959ca4a6a9acaeafb0b0afaeaba8a99f99928980776960564a3d302313050000000000000000000004182a3a50657b90a5b6a5907b65503b2a18040000000000000000000000000000000000000000000000000000000000000000000000071a2d3d52687d92a7b59f8c78634d382715020000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b00000000000000000000000000000000000000000000021527384a5c6b8095a4b5c6b3a2927d686e8298a7b8c8b5a3947f6a5b4936251300000000000000000000000000000000000000000000000000000000071c3145596b737575757575756a61503c28130000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a45301c3043546176879da9bac4b4a396816c5f4d3d2c384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e190300000000102130414a60728298a3b5c3bbaa9e8878625745322515040000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000000000000000000000000000000000000000000000e1a28323e4b546066707980878c919497999a9b9b9a9996938f8a847d756b61584b45382d1f13050000000000000000000000000c20354a6073879cb2ae98836e5947341f0800000000000000000000000000000000000000000000000000000000000000000000000c21364a5b70859bb0af9a846f5b49351a0a000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b00000000000000000000000000000000000000000000000a1a2d3e4b6074869caabbc0b39e89777c90a0b2c5bbaa9b8573604b3d2c180800000000000000000000000000000000000000000000000000000000091e34495e73898a8a8a8a8a8a806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a45302f404b6072849aa5b7c7b8a69b8574604b413023384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e19030000000e1e2e3f4d5f6b8095a0b2c1bdb49f8c7b655a4839281607000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d281200000000000000000000000000000000000000000000000a161e2e36434a515b636b71777c7f82848586868583817e7a756f6761574c473a31271a0f0100000000000000000000000000071c3043546a7f94aab49f8b77614c36251300000000000000000000000000000000000000000000000000000000000000000000021628384e63798ea3b4a7917c67523c2c1900000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b000000000000000000000000000000000000000000000000101d314556647a8c9fb4c2b9a79680879db2bec2b49f8b79645544311f0f0000000000000000000000000000000000000000000000000000000000091e34495e73899e9f9f9f9f95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a452b3c4c5e6b8095a2b3c3bbaa9e8877625544312323384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e190300000b1b2b3c4b5d677d929eafbec0b19f937e685d4b3c2b1b0a00000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d28120000000000000000000000000000000000000000000000000210182530353d4a4e565961666a6c6f7071706f6e6c69646056524b4639332a1d150a000000000000000000000000000000001325364c61778b9fb4aa947f695443301c07000000000000000000000000000000000000000000000000000000000000000000091e3245566c8196acb39e8875604b36200e00000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b000000000000000000000000000000000000000000000000021527384a5c6b8095a4b6c5b09e969da5b6c9b6a495806b5c4a372614010000000000000000000000000000000000000000000000000000000000091e34495e73899eb3b5b5aa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a4538485a667c8d9fb5c0bfb49f8c7b65594837271523384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e1903000919293a495a657b8b9fb4bcc3b4a297816c604e3f2e1e0e0000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000000000000000000000000000000000000000000000000000008131c202d36393a474c515457595a5b5b5a5956534f4b45383632281f180c020000000000000000000000000000000000081f3447596e8398aeb29c8773604a35200c0000000000000000000000000000000000000000000000000000000000000000000b21364b6075899eb3ab96806b5645311d0900000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b000000000000000000000000000000000000000000000000000a1a2d3e4b6074869caabbbcb0abb2b6c3bcab9c8674604b3d2d1909000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a4545566278899eabbcc3b3a1947f6a5d4b3b2b190e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e19030114263746586278889ea9bac6b7a59a8473604b42312111000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d281200000000000000000000000000000000000000000000000000000000070f1a21232a34373c3f42444546464544413e3a363127211e160b040000000000000000000000000000000000000004182a3b50657b90a5b6a4907b65503a2a170400000000000000000000000000000000000000000000000000000000000000061a2c3d52677d92a7b4a28d78634e3827150200000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b0000000000000000000000000000000000000000000000000000101d324556647a8c9fb4cac4c0c7cacab49f8c7a645645311f0f00000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a414b6074859ba7b8c7b6a5998372604a3f2f1d0d0e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e1904121d3144556176869ca6b8c7b9a89d877661554431241403000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000000000000000000000000000000000000000000000000000000000000070c0e181f22262a2d2f303131302e2c2925201d150c0903000000000000000000000000000000000000000000000c20354a6073879cb2ad98836d5847331f0a000000000000000000000000000000000000000000000000000000000000000c2135495b70859ab0af9a85705b49351a0a0000000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b0000000000000000000000000000000000000000000000000000021528384a5c6b8196abc0d6d5dcd6c0ab96816b5c4b3827150100000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a4e5f6d8197a3b5c5baa99c8776615443302111000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e19122232424b60738399a4b6c5bcab9e8a7a6458473727150600000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000040a0c1115171a1b1c1b1a1917140f0b090200000000000000000000000000000000000000000000000000071c3043546a7f94aab49f8a77614c372111000000000000000000000000000000000000000000000000000000000000021528384e63798ea2b4a7927c67523d2c1a000000000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b000000000000000000000000000000000000000000000000000008182b3c4e606f849aafc4d5cbc8cbbca7917c675947341f130000000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f5a5c687d929fb1c1bdb49f8a7a64584636251303000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e191f2f404f606c8196a1b3c2bfb59f8d7d675c4a3a2a19090000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f191212121212121212121212121212121222374c62778ca1b7ccbca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364c62778b9fb4a9947e69543f2e1c080000000000000000000000000000000000000000000000000000000000091d3245566c8196abb39e8875604b36200e000000000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b0000000000000000000000000000000000000000000000000000132536485a687e93a2b3c7c4b7b3b7c4b39e8977624c42311e0e00000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f58647a8a9fb4bdc1b19f927d685c4a3a29180800000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e1d2d3d4c5e697e939fb1bfc2b3a195806a5f4d3d2d1c0c000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f282828282828282828282828282828282828374c62778ca1b7ccbca7927d67523d281200000000000000000000000000000000000000000000000000000000050f1517202020202013110b0200000000000000000000000000040a202020202020201c19130900000000000000000000081f3447596e8399aeb19c86725d4b37230c00000000000000000000000000000000000000000000000000000000000b20364b6075889eb3ab96816b5645321d09000000000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b00000000000000000000000000000000000000000000000000081c30435462788a9eb4c0bdb1a69da6b7b8a799836e604e3c2b1808000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a856f6176879ca9bac5b5a397816c5f4e3d2d1b0b0000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432e2a3b4a5b667c8c9fb4bdc5b5a4998372604a41301f0f00000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59443d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d4c62778ca1b7ccbca7927d67523d28120000000000000000000000000000000000000000000000000000000917222a2d353535353528261e130600000000000000000000000c171f35353535353535312e261b0d00000000000000000005182a3b50667b90a5b6a48f7a654f3a291704000000000000000000000000000000000000000000000000000000061a2c3d52677d92a7b4a28d78634e38281502000000000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b00000000000000000000000000000000000000000000000008182c3c4a6072849aa8b9c4b19f97889db3c2b3a1927d685a48362513000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4af9a846f728399a5b6c7b8a79b8574604b41311f0f000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58432838475963798a9eaabbc8b8a79c86756154433023120100000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e595252525252525252525252525252525252525252525262778ca1b7ccbca7927d67523d28120000000000000000000000000000000000000000000000000000051727353e424a4a4a4a4a3d3a312413020000000000000000000c1c29334a4a4a4a4a4a4a4642382b1b090000000000000000000d20354a6073879db2ad98826d5847331f0a0000000000000000000000000000000000000000000000000000000c2135495b70859aafaf9a85705b49351a0a00000000000000000f24394f64798ea4b9c2ad97826d58422d18000000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b000000000000000000000000000000000000000000000001142636495a697e93a2b4c6b7a697817d92a4b6bfb49e8a78625443301c0f0000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4ae99846f7f94a1b3c3bcab9e897862564532231301000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e58433745566177879da8b9c8bbaa9e8978625746362513040000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99836e676767676767676767676767676767676767676767676767778ca1b7ccbca7927d67523d281200000000000000000000000000000000000000000000000000000f22354552576060606060534e42311e0b00000000000000000417293a465e6060606060605b5649382613000000000000000000071c3043546a7f94aab49f8a76614c3721100000000000000000000000000000000000000000000000000000021527384e63788da2b4a7927d67523d2c1a0000000000000000000f24394f64798ea4b9c2ad97826d583d2c1a060000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b0000000000000000000000000000000000000000000000091c30435463788a9fb4c0bfb39d887673869caabbb9a89a8472604a3d2c190900000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c3ae98837a8c9fb4bfbfb49f8d7c665a483828150500000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e584f50556074859ba5b7c6bdb49f8c7b655a4939291808000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c6b09b857d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e93a8bed2bca7927d67523d28120000000000000000000000000000000000000000000000000000152a3e52636c757575757568604e3a261100000000000000000a1f33465870757575757575716756422e19000000000000000000001325364c62778b9fb4a9937e69543f2e1b0800000000000000000000000000000000000000000000000000091d3145566b8096abb39e8875604b36200f0000000000000000000f24394f64798ea4b9c4af9a856f5b493521100000000000000000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b0000000000000000000000000000000000000000000009192c3d4b6073849aa8bac5b2a0917c66647a8c9fb4c2b4a2947f695b4937271502000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c4ae9983889eaabbc3b3a195806a5e4c3c2b1a0a0000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e64646569738298a3b4c3c1b19f937e695d4b3c2c1b0b00000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c9b5a39b92929292929292929292929292929292929292929292929292939cadc1d2bca7927d67523d28120000000000000000000000000000000000000000000000000002172d42576c818a8a8a8a8a7e68533d281300000000000000000c21364c61768a8a8a8a8a8a85715b46311c0000000000000000000008203448596e8399aeb19c86715d4b37220b000000000000000000000000000000000000000000000000000b20364b6075889eb3ab96816b5645321d090000000000000000000f24394f64798ea4b9cab59f8c79634e3e2d1b0b00020406080000000000000000000000000000081d32475d72879cb2c7b59f8a75604a35200b00000000000000000000000000000000000000000001142637495b697f94a2b4c6b8a798836e5e5c6b8096a4b6c0b49f8b79635544311d10000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6b3a1999ea6b8c7b7a5998372604b402f1e0e000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c4af9a847a7a7a7b7e8598a0b2c1c3b4a397816d604f3f2f1e0e0000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d2c1b5b0a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a8adbacbd2bca7927d67523d28120000000000000000000000000000000000000000000000000002172d42576c82979f9f9f927d68533d281300000000000000000c21364c61768b9f9f9f9f9b86715b46311c0000000000000000000005182b3b50667b90a5b5a48f7a644f3a291704000000000000000000000000000000000000000000000006192c3c52677c91a6b4a28d79634e382815020000000000000000000f24394f64798ea4b9cfbcab97826d5c4a39281b1717191c1d12100a0100000000000000000000081d32475d72879cb2c7b59f8a75604a35200b0a0a0a050300000000000000000000000000000000091d31445563798a9fb4c0c0b39e8977624c4b6074869caabbbaa99b8574604b3e2e1a0a0000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6bfb3aeb3b8c4baa99d877661544330221100000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c7b3a29a8f8f8f90939ba3b2bec1b4a59b8574604b42322111000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6dbd0c7c4b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b8bcc5d3d2bca7927d67523d28120000000000000000000000000000000000000000000000000002172d42576c8297acb5a8927d68533d281300000000000000000c21364c61768ba1b5b5b09b86715b46311c00000000000000000000000d20354b6074879db2ad97826d5846331f0a00000000000000000000000000000000000000000000000c2035495a6f849aafb09a85705b49351a0a000000000000000000000f24394f64798ea4b9dac9b49f8c7a645746392f2c2c2e313327251e13050000000000000000080d1d32475d72879cb2c7b59f8a75604a35201f1f1f1f1a1812080000000000000000000000000009192d3d4b6073859ba9bac6b4a2927d6859484556647a8c9fb4c2b5a395806a5c4a3828160300000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d0c7c4c8cbbeb49f8b7a6458473626140400000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6d0c0b3afa4a4a4a5a8b1b5c1bfb3a39b877762564531241403000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d0bfb3aea1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a3a8b5c5d2bca7927d67523d28120000000000000000000000000000000000000000000000000002172d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000081c3043546a7f95aab49f8a76614c36211000000000000000000000000000000000000000000000021527374d63788c9fb5a7927d67523d2c1a00000000000000000000000f24394f64798ea4b9d8c8bbaa9c867561574c4041424446483d3930231301000000000002101b222532475d72879cb2c7b59f8a75604a353535353535302d251a0c0000000000000000000000011527374a5b6a7f94a3b4c7baa89a846f604e3b384b5c6b8096a4b6c1b49f8c7a645645321e1100000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6dbdbd9d2c2b1a0937e685c4a3a2a18080000000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6dbd0c7c4b9b9b9babec6c9c6b3a19985786259483827150600000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c7b3a1998b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8d97a8bcd2bca7927d67523d28120000000000000000000000000000000000000000000000000002172d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000011426364d62778b9fb4a9937e69533e2e1b07000000000000000000000000000000000000000000081d3144556b8095abb39e8975604b36210f00000000000000000000000f24394f64798ea4b9cebbaa9fa4998375665e585657595b5d524d41301e0a000000000210202e373a41475d72879cb2c7b59f8a75604a4a4a4a4a4a4a4541372a1a0800000000000000000000091d31445563798b9fb4c1c1b49f8a78624d42312e3e4b6074869caabbbbaa9c8675604b3f2f1b0b000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6dbe7d6c5b5a397826d604e3e2d1c0c000000000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6d3c2b6b1abababaeb3b9c5c3ae998375625a483b2a1a0a0000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c4ae998376767676767676767676767676767676767676767676767676798da3b8cdbca7927d67523d28120000000000000000000000000000000000000000000000000002172d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000008203448596e8399aeb19c86715c4b37220b0000000000000000000000000000000000000000000b20364b6074889db3ab96816c5645321e0900000000000000000000000f24394f64798ea4b9c9b49f8a9fa199867b736e6c6c6e7172675f4d3925100000000010202e3f4b4f565a5d72879cb2c7b59f8a75605f5f5f5f5f5f5f5a554837251200000000000000000009192d3d4b6073859ba9bac8b5a3947f695a4935231e324556647a8c9fb4c2b6a496816c5d4b3a2917040000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6dbdac9b9a79b8575604b4231201000000000000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6cab6a49c959596989ea7b4c0b3a1998375615544311d150500000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e616161616161616161616161616161616161616161616162778ca1b7ccbca7927d67523d28120000000000000000000000000000000000000000000000000002172d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000005182b3b51667b90a5b5a48f7a644f392917030000000000000000000000000000000000000006192b3c51677c91a6b4a28e79634e3828160200000000000000000000000f24394f64798ea4b9c9aa958095a2a49c90888381818386877d67523d2712000000071b2d3e4b5d646c6f7274879db2c7b59f8a7574747474747474746f6655412d180300000000000000021527374a5b6a7f94a3b5c7bbaa9b8573604b3c2c191628384b5c6b8096a4b6c2b59f8d7b655846331f120000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6dbcfbcab9e89786356453224140200000000000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c6b19c8680808183899aa2b4bfb3a1998473604b4333231303000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e594c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c62778ca1b7ccbca7927d67523d28120000000000000003090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c172d42576c8297acbda8927d68533d28130b080100000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000d20354b6074879db2ac97826d5746331e0a000000000000000000000000000000000000000b2035485a6f849aafb09a85705b49351a0a0000000000000000000000000f24394f64798ea4b9bcab8c77859ba9b1a69d989697999b9a856f5a45301a0000000d22364a5c647a8184878a8fa5b6cab5a18f8a8a8a8a8a8a8a8a8a846f5a45301a05000000000000000a1d31445563798b9fb4c1c2b49f8b79635544311e0e0a1a2e3e4b6074869cabbcbcab9d8776614c40301d0c00000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d0c0b59f8d7c665a49382816060000000000000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e6b6b6e76849aa3b5bfb3a298826d615041312111010000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e594436363636363636363636363636363636363636374c62778ca1b7ccbca7927d67523d28120000000000050a161e2121212121212121212121212121212121212d42576c8297acbda8927d68533d2821201d1509000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000081c3043546a7f95aab49e8a76614b362110000000000000000000000000000000000000011527374d62788c9fb5a7927d67523d2c1a000000000000000000000000000f24394f64798ea4b9b49f8a73798a9fabb7b2adabacaeb09c87715c3727150200000f243a4f647a8d96999c9fa9b6c3d3cdbaa99f9f9f9f9f9f9f9f9a85705b45301b060000000000000a1a2d3e4b6074859baabbc9b6a495806b5b4a3726140000101e324556647a8c9fb4c2b7a598826d5e4d3b2a1804000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c4b4a295806b5e4c3c2c1a0a000000000000000000000000000e23384e63788da3b8bca7927d67523d2812001c31465c71869bb1c6c3ad98836e5856586175859ba5b7c0b2a095806a5f4e3f2f1f0f0000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f212121212121212121212121212121212122374c62778ca1b7ccbca7927d67523d2812000000000e192028323636363636363636363636363636363636363642576c8297acbda8927d68533d363635312719120400000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000011426364d62778b9fb4a8937e68533e2d1b070000000000000000000000000000000000081d3144556b8095abb39e8975604b36210f000000000000000000000000000f24394f64798ea4b9b39e8873677d8d9fabb8c5c1c1c3b39e89735544311d08000013283d53687d92abafb1b4bac7d3dfd2c7bab4b4b4b4b4b4b4b09a85705b45301b060000000000021527384a5c6a8095a3b5c8bcab9c8674604b3d2d19090000021628384b5c6b8096a4b6c3b2a0917c665947341f13000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c5b7a69a8473604b402f1e0e00000000000000000000000000000e23384e63788da3b8baa7927d67523d2812001c31465c71869bb1c6c3ad98836e583a47576277879da7b9beaf9e927d685d4b3d2d1d0d00000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0d22374c62778ca1b7ccbca7927d67523d28120000000e1e2b3538454b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b576c8297acbda8927d68534b4b4b4b443730221200000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000008203448596f8499aeb19b86715c4a36220b00000000000000000000000000000000000b20354b6074889db3ab96816c5645321e09000000000000000000000000000f24394f64798ea4abab9c86715f687e8d9ea6b1b6c2c4b7a78b75604b36200b000013283d53687d929f9f9f9fa1b6c3d2c1b5b09f9f9f9f9f9f9f9f9a85705b45301b0600000000000a1d314556647a8c9fb4c1c3b59f8d7a655645321f0f000000000a1a2e3e4b6074869cabbcbeb39e8877614c41311e0e0000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71869ba5a5a79d88776155443122120000000000000000000000000000000e23384e63788da3a5a5a5927d67523d2812001c31465c71869bb1c6c3ad98836e58433948596379899eaabbbcb49f8c7b655b4a3b2a1b0b000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000005192b3c484d566061616161616161616161616161616161616161616c8297acbda8927d686161616160554d40301d0a000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000005182b3b51667c91a6b5a38e79644f3929160300000000000000000000000000000005192b3c51667c91a6b4a28e79634e38281602000000000000000000000000000f24394f64798e96969694816c5760687c88949ca4a3a4a69d8c77624d37220d000013283d53687e8a8a8a8a8a8fa5b6c9b5a38f8a8a8a8a8a8a8a8a8a84705b45301b06000000000a1a2e3e4b6074869caabbcbb7a596816c5d4b382815010000000000101e324556647a8c9fb4c2b8a699836e604e3c2b180800000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000001c31465c71859090908f897a645947372614040000000000000000000000000000000e23384e63798d90909090907d67523d2812001c31465c71869bb1c6c3ad98836e58432a3b4a5b657b8c9fb4bcbbaa9e8979635948392819090000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d281200000b2035485a6271767676767676767676767676767676767676767676758197acbea8937e767676767674665e4d39240f000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000000000d20354b6074879db2ac97826c5746321e0a0000000000000000000000000000000b2035485a6f8499afb09a85705b4a361a0a00000000000000000000000000000d22384d6278818181817f75614c4e5e66767f878c8e8e8c888074604b36210b000011263a4e60687575757575879cb2c6b09b85757575757575757575706655422d1904000000021628384a5c6b8095a4b5c8beb29d8775614b3f2e1a0a000000000000021628384b5c6b8096a4b6c5b3a1927d685a4836251300000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000000f243a4f647a7b7b7b7a76645c4a3b2a1909000000000000000000000000000000000b21364b60757b7b7b7b7b7b77624c37220d001c31465c71869bb1c6c3ad98836e58432e2d3d4c5d687e929eb0beb9a79d87776257463726140100000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d281200000d22384d6278868b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b979fb1c1ad9c938b8b8b8b8b8b7c66513c2711000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000081d3144556a8095abb49e8976614b36210f0000000000000000000000000000011426374d62788b9fb4a7927d67523d2d1a0000000000000000000000000000000b2034485a626c6c6c6b69615746404c58616a7176787977736b605645321e0900000b1e31424e536060606072879cb2c6b09b867160606060606060605b554838261200000000091e324556647a8c9fb4c2c5b2a0907c66574633211000000000000000000a1a2e3e4b6074869cabbcbfb39e8978625443301c0f000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000000d22374b5c646565656561574a3e2d1d0c0000000000000000000000000000000000091e32455760656565656565625948341f0b001c31465c71869bb1c6c3ad98836e58432e1f2f3f4e606b8095a0b2c1b7a59b8575615544311d1404000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d28120003162939576d8297a4a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0acb1bdcbbaada8a0a0a0a0a998836e58432e19000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000011426374d62788b9fb4a8927d68533e2d1a0700000000000000000000000000081d3144556a8095abb39e8975604b36210f00000000000000000000000000000005192b3c484d56565656544c46392f3a474c55586163646259564b45382816030000021324313a3d4a4a4a5d72879cb2c6b09b86715b4a4a4a4a4a4a4a4542382a1a09000000081b2e3f4b6074869caabbc8b8a798826d5e4c39291702000000000000000000101e324556647a8c9fb4c2b9a89a8472604a3d2c1a060000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b15000000000000000000000000000000000000000000000000000000000000000000071b2e3e4b4f5050504f4c46392d201000000000000000000000000000000000000003162839454b5050505050504c483b2a1805001c31465c71869bb1c6c3ad98836e58432e192131424a60728298a3b4c3b5a3998373604b43322312020000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000a1e32465772879cb1c2b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6c2c5ced8cbc1beb6b6b6c7ae98836e59432e19000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000092034485a6f8499aeb09b85705c4a36210a000000000000000000000000000b20354b6074879db2ac96816c5645321e09000000000000000000000000000000000d1d2b3438414141413f3633291c2a33373a474c4e4f4d483b3632281a0a0000000006131e26283535475c71879cb1c6b19c86715c38283535353535302d261a0c000000000e22374b5d6b8096a4a5a5a5aa9e8877614c402f1b0b00000000000000000000021628384b5d6b8096a4a5a5a5a2947e695b4935210c0000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000000010202e373a3b3b3b3a3633291b1002000000000000000000000000000000000000000a1b2832363b3b3b3b3b3b37342a1d0d00001c31465c71869bb1c6c3ad98836e58432e19131c3043546074859ba5b6c1b3a196816c614f413020100000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000c21364b61768b9fb4cacdbcb0aba7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7afb3c0cebdb1aca7a7a7a7a798836e59432e19000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000000000005192b3c51667c91a6b5a38e79644e39281603000000000000000000000005182b3b51667c91a6b4a38e79634e3828160300000000000000000000000000000000000d1920222c2c2c2c29211e170c171f21293337393937342b211e160a000000000000020b11132030455b70859ab0c5b29d88725645321e202020201b191209000000000010253a4f657a8c9090909090908c7c6658473322120000000000000000000000000a1a2e3f4b6075868f90909090908a78634e39230e0000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000000000000000000000000000000002101b222426262625211e170b000000000000000000000000000000000000000000000a161e21262626262626221f180d0000001c31465c71869bb1c6c3ad98836e58432e190013253645566177879ca7b8bfb19f947f695f4d3e2e1e0e00000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d28120010253a4f657a8fa5b7c8c4b09e96919191919191919191919191919191919aa2b3c5b19f97919191919191836e59432e19000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000d20354b6074889db2ac97816c5745321e0900000000000000000000000b203448596f8499aeb09b85705b4a361a0a00000000000000000000000000000000000000050b0d17171716140c0a0300040a0c171f2123242220180d09030000000000000000000004192f44596e8499aec3b49f8a76604b362111100f0e0b07000000000000000e23394e63797b7b7b7b7b7b7a78665e4c3a2a180400000000000000000000000000101e32455660757a7b7b7b7b7b7b79634e38230e0000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b15000000000000000000000000000000000000000000000000000000000000000000000000070d0f101010100c0a0300000000000000000000000000000000000000000000000003090b1010101010100d0b05000000001c31465c71869bb1c6c3ad98836e58432e19000818283847596379899ea9babdb59f8d7d675c4b3c2c1c0c000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000c21374c6176879daabbc0ab96807d7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c849aafc1ac97817c7c7c7c7c7c7a654f3a2510000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000000000000081d3144556b8095abb39e8975604b36210f00000000000000000000011426364d62778b9fb4a7927d68523d2d1a0000000000000000000000000000000000000000000000010101010000000000000000040a0c0e0f0d0b050000000000000000000000000001162b41566b8096abc7bbaa8f7a65503f2f26252423201c130800000000000c21364a5b6365656565656565625a4c402f1c0c00000000000000000000000000000316283845566065656565656565635b4935210c0000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e1903000a1a2a3a495b657b8b9fb4bcbcab9f8b7a645a493a2a1a0a0000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000a1f334758647a8b9fb4bfb29d877667676767676767676767676767676c8297acbda8927d686767676767655d4b37220e000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000000000000011426374d62788b9fb4a8927d68523d2d1a07000000000000000000081c3043546a7f95aab39e8975604b36210f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a9bac8ad98826d5d4c403c3a3a38353025180800000000071a2d3d4a4e505050505050504d483c2f2212000000000000000000000000000000000a1a2838454b505050505050504e493d2c1a060000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000000000080e102020202020202020202020202020202020202020202020202020202020202020202020202016140e040000000000000000060c0e1a1c14120c0300000000001c31465c71869bb1c6c3ad98836e58432e190300000c1c2c3d4b5d677d929eafbebaa99e88786358473828180800000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000417293a4a5c697e93a1b3b6a598826e605252525252525252525252576c8297acbda8927d6853525252524f4b3f2e1b08000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000092035485a6f8499afb09b85705b4a36210a0000000000000000000b20354b6074879db2ac96816c5645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4c7b49f8c7b665e55514f4f4d4a4336251300000000000f1f2d36393b3b3b3b3b3b3b38352b1e120400000000000000000000000000000000000a1a2832363a3b3b3b3b3b3b38352c1f0e000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b1500000000000000000000000000000000000003111c2325353535353535353535353535353535353535353535353535353535353535353535353535352c292116080000000000010f1a21232f312a27201507000000001c31465c71869bb1c6c3ad98836e58432e19030000000f1f2e3f4d5f6a8095a0b2c0b8a69c867661564536251300000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d281200000c1c2e3e4f616e8399a5b6b2a0927d685b49383c3c3c3c3c3c3c42576c8297acbda8927d68533d3c3c3c3a372e211000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000005192b3c51667c91a6b4a38e79634e382816030000000000000005182b3b50667b90a5b4a38e79634e38281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3246576c8196a9babbaa9e897c706a66656463605443301c0700000000010f1a2123262626262626252320190e00000000000000000000000000000000000000000a161e212526262626262623211a0e00000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b1500000000000000000000000000000000000011212e373a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a413d34261604000000000f1f2c353845473f3c322515020000001c31465c71869bb1c6c3ad98836e58432e1903000000011121304150616d8298a2b4c2b6a49a8474605443301c14040000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d2812000000102032424c6176879da9bab49e8a796356453227272727272d42576c8297acbda8927d68533d28272725221b100200000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000000e20354b6074889db3ac96816c5645321e09000000000000000b203448596e8399aeb09b85705b4a361a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394d62788b9fb4bdb8a79e90857f7b7a797872604a35200b000000000000070c0e101010101010100d0b060000000000000000000000000000000000000000000003090b101010101010100e0c060000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b150000000000000000000000000000000000081c2e3f4b506060606060606060606060606060606060606060606060606060606060606060606060606056514434210e000000061a2c3d494e5a5c544f433220100000001c31465c71869bb1c6c3ad98836e58432e19030000000003132333434b6074849aa4b6c2b4a2988272604a423122120100000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000d22374c62778ca1b7ccbca7927d67523d281200000002141f334658647a8b9fb4b9a89b8574604b402f1d1212172d42576c8297acbda8927d68533d281312100e08000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000081d3144556b8095abb39e8975604b36210f000000000000001325364c62778b9fb4a7927d68523d2d1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a687e939fb5bcb8b3a39b94918f8f8d836e59442e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b1500000000000000000000000000000000000e23374b5d65757575757575757575757575757575757575757575757575757575757575757575757575756b62513d29140000000c2135495b636f7169614f3e2e1b0800001c31465c71869bb1c6c3ad98836e58432e1903000000000005151d3145566176869ca7b8c0b2a095806b604e402f200f00000000000000000000000000000000001c31465c71869bb1babaae99846e59442f190400000000000000000000000000000d22374c62778ca1b7babaa7927d67523d2812000000000417293a4a5c697e93a1b2b5a396816c5e4c3b2b1808172d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000011527374d62788b9fb4a7927d67523d2c1a060000000000071c3043546a7f94aab39e8975604b36210f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4e606d81949fabb4c0b4b0aaa6a4a49e89735e49261401000000000000000000000000000000000000060b0d20202020202014120c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8bfaa95806a55402b15000000000000000000000000000000000010253a50657b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a806b56412c16010004182a3b4e637984867f695c4b37220d00001c31465c71869bb1c6c3ad98836e58432e19030000000000000215273847586378899ea9babeb09e937e685e4c3e2d1d0d000000000000000000000000000000001c31465c71869ba5a5a5a599846e59442f190400000000000000000000000000000d22374c62778ca1a5a5a5a5927d67523d281200000000000c1c2d3e4f606e8399a5b6b09f917c665948362614172d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000000000000000000092035485a6f849aafb09a85705b4936210a00000000000b20354a6073879db2ac97816c5745321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d31424a60727f8d9aa2aaafb2b4bab4b39f8a745544311d0800000000000000000000000000000000000e192023353535353535292720140700000000000000000000000000000000000000000000000000000000000207090a0a0a0a0a0a0a0a0a0a1e34495e73899eb3c8bfaa95806a55402b150a0a0a0a0a0a0a0a0a0a0000000000000010253a50657a8f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f96816b56412c1601000b1f34475970859a9c8f7a644f3a250f00001c31465c71869bb1babaad98836e58432e1903000000000000000a1a293a495a647a8b9fabb8bcb49f8c7c665c4a3b2b19050000000000000000000000000000001c31465c7185909090909090836e59442f190400000000000000000000000000000d22374c62778c9090909090907d67523d2812000000000000102032424c6176879da9bab39e8978625443301c172d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000000006192b3c51677c91a6b4a28e79634e3828150200000005182a3b50657b90a5b4a38e79634e392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141c304354606a7a848e949a9d9fa99f9e9a8a75604b35200b000000000000000000000000000000000e1e2b35384a4a4a4a4a4a3f3b322514000000000000000000000000000000000000000000000000000000010d161c1e1f1f1f1f1f1f1f1f1f1f1f34495e73899eb3c8bfaa95806a55402b1f1f1f1f1f1f1f1f1f1f1f14120c0200000010253a50657a8fa5c2b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ab96816b56412c1601000c22374c61778ca2aa95806a55402b1500001c31465c71869ba5a5a5a598836e58432e190300000000000000000c1c2c3c4b5c677d8d9ea7a5a5aa9e8a7a64594834200b0000000000000000000000000000000f243a4f647a7b7b7b7b7b7b79634e39240e0000000000000000000000000000000b20364b60747b7b7b7b7b7b7b77624c37220d00000000000002141f334658647a8b9fb4b8a79a8472604b3f2e1c2d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000000000000000000000e20354b6074889db3ab96816c5645321d090000000b1f3447596e8398aeb09b85705b4a361b0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a5d656f797f85888a8b8a88857f73604b35200b00000000000000000000000000000006192b3c494d606060606060544f433218080000000000000000000000000000000000000000000000000001111e2a3134353535353535353535353535495e73899eb3c8bfaa95806a554035353535353535353535353529271f140600000e23384e63788da4b5c9d9cacad3c9c6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6ab96816b56412c16010010253a4f657a8fa4ad98836e58432e1900001c31465c7186909090909090826e58432e19030000000000000000000e1e2e3e4d5f677d888e90909090908877624d37220d0000000000000000000000000000000d22374b5c64656565656565635b4a36210c000000000000000000000000000000091d3145566065656565656565625948341f0b000000000000000417293a4a5c697e93a0b2b4a2957f6a5d4b3a2a2d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000000000081d3144556b8095abb39e8975604b36200f0000001325364c62778b9fb4a8927d68533d2d1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081825303f4b4f5c646a6f73747675736f6a605544311d080000000000000000000000000000000b2035495a6f75757575757569614f362513000000000000000000000000000000000000000000000000000d1e2f3c45494a4a4a4a4a4a4a4a4a4a4a4a4a5e73899eb3c8bfaa95806a554a4a4a4a4a4a4a4a4a4a4a4a4a3e3b32241402000b20354a6073869cabbccfe3d3c2b6b1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a196816b56412c16010012273d52677c92a7b09a85705b37261401000f243a4f647a7b7b7b7b7b7b79634e39240e0000000000000000000000102030414d5f6774797a7b7b7b7b7b79634d38230e000000000000000000000000000000071b2e3e4b4f5050505050504e4a3d2d1a0700000000000000000000000000000002152738454b505050505050504c483b2a180500000000000000000b1b2d3e4f606e8398a5b6b49f8c7b655847332d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000000000011527374d62788c9fb5a7927d67523d2c1a0600071c3043546a7f94aab39e8975604b36210f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2e373e4a4f555a5d576060545a554b44372614010000000000000000000000000000021527384d62788d8a8a8a8a8a7f695443301c07000000000000000000000000000000000000000000000000162a3c4d595e5f5f5f5f5f5f5f5f5f5f5f5f5f5f73899eb3c8bfaa95806a5f5f5f5f5f5f5f5f5f5f5f5f5f5f544f42321f0c00071c304354657b8c9fb4c1d2c9b6a49c8c8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b806b56412c160100152a3f546a7f94a9b29d88725544311d08000d22374b5c64656565656565635b4a36210c000000000000000000000002122330414d556064656565656565635b4935210c0000000000000000000000000000000010202e373a3b3b3b3b3b3b39362d1f0f00000000000000000000000000000000000a1a2731363b3b3b3b3b3b3b37342a1d0d00000000000000000000102032424c6176879da9baaa9d8776614c423142576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000000000092035495a6e8398a5ad9a85705b4935210c000b20354a6073879caca396806b5745321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101b222d36393f4539454b4a4336403531261909000000000000000000000000000000091d3145566b8095ab9f9f9f9c8773604a35200d0000000000000000000000000000000000000000000000001c3145596b73747474747474747474747474747474899eb3c8bfaa958074747474747474747474747474747469614f3b271200001325364b5d6b8096a3b5c6c6b19c8677767676767676767676767676767676767676767676767676767674604b36210b0000172c41576c8196acb49f8a74604b35200b00071b2e3e4b4f5050505050504e4a3d2d1a070000000000000000000000000512233037444b4e5050505050504d493c2c19060000000000000000000000000000000002101b222426262626262624211a0f010000000000000000000000000000000000000a151d2026262626262626221f180d000000000000000000000002141f334658647a8b9fb4b7a599836e604e3d42576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000000000000000000000006192c3c4d6277879397988d78634e38230e0010253b50657a909897928575614c3928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008101b22242a302832363530252a201d1409000000000000000000000000000000000b20364b6075889eb3b5b5b6a4907b65503b2a180500000000000000000000000000000000000000000000001e34495e73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8fa7b8cccab49f8c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b7e69543e2914000008182e3f4b6074859ba8bac9b6a496806b61616161616161616161616161616161616161616161616161605645321e090000192f44596e8499aebbaa8c78624d37220d000010202e373a3b3b3b3b3b3b39362d1f0f0000000000000000000000000000051219273135393b3b3b3b3b3b38352c1e0e00000000000000000000000000000000000000070d0f1010101010100e0c0700000000000000000000000000000000000000000002090b101010101010100d0b05000000000000000000000000000417293a4a5c697e93a0b2b3a1937e685b4a39576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000000000000e2034485962757e8283827c66513c27110013283d53687e8383827d74615746331b0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f151a161e21201c13150b080100000000000000000000000000000000061a2c3d52677c91a6b8cbd3c3ae98836e5948341f0800000000000000000000000000000000000000000000001f34495f74899e9f9f9f9f9f9f9f9f9f9f9f9f9f9fa9b8c5d5cebbaa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f947f69543f2a14000000111d31445563798a9fb4bfc2b49f8c7b65584c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b453828160200001b30455b70859ab0c8a38e79644e39240f000002101b222426262626262624211a0f010000000000000000000000000000000009151d20242526262626262321190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4f606e8398a5b6b49f8b79635745576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000000000000005182b3b485761696d6e6e665e4c39240f0011263a4e60686e6e6d6860564639291700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0b070000000000000000000000000000000000000000000c2135495b70859aafc4c8c5c9b49f8b77624c36261401000000000000000000000000000000000000000000001f34495f74899eb4b4b4b4b4b4b4b4b4b4b4b4b4b4bac7d5d0d9c8bbb4b4b4b4b4b4b4b4b4b4b4b4b4b4a9947f69543f2a1400000002152737495b687e93a1b3c4bcab9d8776614c423636363636363636363636363636363636363636363632281a0a0000001b30455b70859ab0b9a38e79644e39240f00000000070d0f1010101010100e0c070000000000000000000000000000000000000001080b0f1010101010100e0c06000000000000000000000000080e102020201d14120c0200000000080d0f1d202020100e080000000000000000000000000000000000000000060c0e0f0f0f0f0d0b05000000000000000000000000000000102032424c6176879ca9baa99c8675604b576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000000000000000000000000000d1d2b39464b54585858514c40301d09000b1e31424e53585857534b4538291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384e63788da2b4c0b4afb4bbaa947f6a5443301c08000000000000000000000000000000000000000000001f34495f74899eb4babababababababababababababababababababababababababababababababababaa9947f69543f2a140000000009192c3d4e606e8399a6b7c9b7a698836e604e3c2c21212121212121212121212121212121212121211e160a000000001b30455b70859ab0b9a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23253535353229271f14060002101b22253235353526231c110300000000000000000000000000000000010f1a212324242424221f180d000000000000000000000000000002141e334657647a8b9fb4b6a497816d5f576c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000000000000000000d1b2932363e4243433c393022120000021324313a3d4343423d3631271a0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1a1c14120c03000000060c0e1a1c14120c03000000000000000000000000000000000000000000091e3245566b8196abc0b4a29aa2b4b29d8773604b35200d000000000000000000000000000000000000000000001f34495f74899ea5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5947f69543f2a1400000000000f1f31424c6176889dabbcc4b2a0927d685a493727150c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b090200000000001b30455b70859ab0b9a38e79644e39240f000000000000000000000000000000000000050b0d1114151615130f0b090300000000000000000000000000000000000000000000000000000011212f383b4a4a4a483e3b3224140510202e373a474a4a4a3b382f2111000000000000000000000000000000000f1f2c35383939393937342a1d0d0000000000000000000000000000031729394a5c687e93a0b2b19f917d675a6c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000000000000000000b161e21292d2e2e27241d120400000006131e26282e2e2d28201d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21232f312a27201507010f1a21232f312a2720150700000000000000000000000000000000000000000b21364b6075899eb3b7a59a859aafb7a5907b66513c2b19050000000000000000000000000000000000000000001f34495f748a90909090909090909090909090909090909090909090909090909090909090909090909090907f69543f2a14000000000001141f334758657b8d9fb5c2beb49e8a78635544311d110000000000000000000000000000000000000000000000001b30455b70859ab0b9a38e79644e39240f000000000000000000000000000000060c0e19202226292a2b2a2825211e160b09020000000000000000000000000000000000000000000000081c2f3f4b5060605f5d544f423223131b2e3e4b4f5d606060504c3f2f1c080000000000000000000000000000061a2c3d494e4e4e4e4e4c483b2a180500000000000000000000000000000b1b2d3e4e606e8298a5b6b39e8978626c8297acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000000000000000000000030a0c14181919110f09000000000000020b1113191918130b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c353845473f3c3225150f1f2c353845473f3c32251502000000000000000000000000000000000000071a2d3d52677d92a7b8b29d877e93a8c3ae99836e5a4834200900000000000000000000000000000000000000000010253a50657b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b78624d38220d00000000000004182a3a4c5e6c8196a4b5c7b9a89b8573604b3f2e1b0b00000000000000000000000000000000000000000000001b30455b70859ab0b9a38e79644e39240f00000000000000000000000000060f1a21232b35383b3e40403f3d3a363228211e160a010000000000000000000000000000000000000000000e23384b5d657575757269604f41301e22374b5c6472757575655d4c38230e00000000000000000000000000000c2135495b6364646464625948341f0b000000000000000000000000000000102031424c6176879ca9b9a79b85736c8197acbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e5a5c544f4332201a2c3d494e5a5c544f433220100000000000000000000000000000000000000c21364a5b70859bb0c5ad9883798ea5b6b49f8b78624d3727150100000000000000000000000000000000000000000e23374b5d656565656565656565656565656565656565656565656565656565656565656565656565656565625a4835200b000000000000000c1c2f404b6074869ca9bac6b5a395806b5d4b3a291704000000000000000000000000000000000000000000001b30455b70859ab0b9a38e79644e39240f0000000000000000000000000e1a212c35383c484d5154555554524f4b45383632281d1509000000000000000000000000000000000000000010253b50657b8a8a8a877e695f4d3925253a4f647b878a8a8a7b65503b261000000000000000000000000000000e23384e63787979797977624c37220d00000000000000000000000000000002141e334657647a8b9fb4b4a395806c8196abbda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000000000000000000000000000000000000000010a10121b1b1b1b1b160b08010000000000000000000000000002080b171b1b1b1b1b0c0a04000000000000000000000000000000000000040a0c1114161614110c0a04000000000000000000000c2135495b636f7169614f3e2e2135495b636f7169614f3e2e1b0800000000000000000000000000000000031628394e63798ea3b4bcab927d72879db2bbaa95806a5544311d080000000000000000000000000000000000000000081c2e3f4b5050505050505050505050505050505050505050505050505050505050505050505050505050504d483c2b19050000000000000000111d32455663798b9fb4bfc1b49f8c7b655846331f13000000000000000000000000000000000000000000001b30455b70859ab0b9a38e79644e39240f0000000000000000000001141f2c353d494e565a6266696a6b6a68646056524b45383127190e000000000000000000000000000000000000000c21374c61768ca59f9d927d6752372632475c71869ca59f947f69543f2a1400000000000000000000000000001c31465c71868e8e8e8e806b55402b1600000000000000000000000000000000031729394a5c687e93a0b2b59f8d7b8095aabda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000000000000000000000000000000000000005131e252731313131302b201c1408000000000000000000000009151d202c3031313130211f170c000000000000000000000000000000060c171f21272a2b2b2926211f170b080100000000000004182a3b4e637984867f695c4b372a3b4e637984867f695c4b37220d00000000000000000000000000000000091e3246576c8197acc1b49f8b776c8196abc2b29d8874604b35200e00000000000000000000000000000000000000000011212e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b38352b1e0e000000000000000000021528384a5b697e93a1b3c4bcab9d8776614c41301e0e0000000000000000000000000000000000000000001b30455b70859aa5a5a38e79644e39240f00000000000000000009141d323d494e5b636b72777b7e7f807f7d7a756f6760564b44372c1e100200000000000000000000000000000000000a1f33475872879db2af9a857055443134495f74899eb4ad98836e5839291703000000000000000000000000001c31465c71869ba3a395806b55402b1600000000000000000000000000000000000b1b2d3e4e606e8298a4b6ab9d887f95aabda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000000000000000000000000000000000000000000000001132330393d464646464641353026180800000000000000000009192731364146464646453633291c0c000000000000000000000000010f1a212933373c3f40403e3c363329201d140900000000000b1f34475970859a9c8f7a644f3a34475970859a9c8f7a644f3a250f000000000000000000000000000000000c21364b6175899eb3c6b09a8570657a8fa4b6b7a6917c66513c2c1906000000000000000000000000000000000000000003111c232526262626262626262626262626262626262626262626262626262626262626262626262626262220190e00000000000000000000000a1a2d3d4f606f8399a6b8c9b7a598826d5f4d3c2b190900000000000000000000000000000000000000001b30455b7084909090908e79644e39240f000000000000000009192631424f5b636e7980878d9093959594928f8a847d75696055493c2e2110030000000000000000000000000000000004172a3a596e8399aeb49f8975604b3531475c71869cb1b29c87725746331e0a000000000000000000000000001c31465c71869bb1aa95806b55402b16000000000000000000000000000000000000102031424b6175869ca9b7a69d899eb3bda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000000000000000000000000000000000000a1e30414d525b5b5b5b5b564b43362614010000000000000002152737444b575b5b5b5b5b4c463a2917040000000000000000000004121f2c353a474c5154565554514c463a3531261911030000000c22374c61778ca2aa95806a5540374c61778ca2aa95806a55402b15000000000000000000000000000000071b2d3e53687d92a8b9b9a8927d685d72879cb1c4af9a846f5a4935200a00000000000000000000000000000000000000000000080e1010101010101010101010101010101010101010101010101010101010101010101010101010100d0b05000000000000000000000000000f1f32424c6277889eb3bdc3b2a0927d675a4837261401000000000000000000000000000000000000000f24394f647a7b7b7b7b7b76614b36210c0000000000000008182637444b606979838d969ca5a6a9aaaaa9a7a99f9a92887e73635a4b3f2e21100000000000000000000000000000000000152a3f556a7f94aabaa88e78634e392d42586d8297adb59f8b76614b36210c000000000000000000000000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000002141e334657647a8b9fb4b7a79ea7b9bda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c00000000000000000000000000000000000000000000000000000000000000000000001025394d5f6770707070706b605443301c0b00000000000000081d314455606c7070707070615846331f0a000000000000000000021222303d494e586166696b6b69666158524b44372e211306000010253a4f657a8fa4ad98836e58433a4f657a8fa4ad98836e58432e190000000000000000000000000000000d22364a5c71869bb0c6b49e89766154697f94a9bab59f8c78634d3827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001141f344759667c909fb1c2beb39e8978625544311d10000000000000000000000000000000000000000d22364a5c646565656565615746321e0a000000000000001325364455606d7e8b99a1abb2b6c3bebcbbbdc7bab4afa69e938578655d4b3f2e1e0e0000000000000000000000000000000011263b51667b90a6c4a7927d67523d293e53697e93a8bcab8f7a65503a2510000000000000000000000000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000031729394a5c687e93a0b2b9b3b9c5bda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000003090b0c0c0b09020000000000000000000000000012273d52677d85868686858072604b39291703000000000005192b3c4b607381858686858476614c36210c000000000000000000102030404d5b636e767c7f80807e7b76706760554b3f312413020012273d52677c92a7b09a85705b373d52677c92a7b09a85705b3726140100000000000000000000000000031729394f64798ea3b5c2ac97826c574c61778a9fb4bcab95806b5645311d090000000000000000000000000000000000000000000000030a0c101416161514100c0a0300000000000000070a0b0b020000000000000000000000000000000000000000000000000000000000000005182a3b4c5e6c8196a4b5c7b9a89b8573604b3e2e1b0b000000000000000000000000000000000000071b2d3e4a4f50505050504b46392916030000000000000a1c304354607381939fa9b2bfbbb4aea9a6a5a8abb2b6c3b8b3a39b897b655d4b3c2c19090000000000000000000000000000000d22374c62778ca6b7ab96816b5636253a4f647a8faabba9937e69543e2914000000000000000000000000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000000b1b2d3d4e606d8298a4b6c7ccd6bda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000000000a161e212121201d150a0000000000000000000000000c21364c6176899b9b9b9b947f695746331e0b00000000000b2034485a6b80969b9b9b97816c5846331f0a000000000000000008182e3e4d5e6679838b9194959593918b857d73655d4e42311e0b00152a3f546a7f94a9b29d887255443f546a7f94a9b29d88725544311d08000000000000000000000000000a1e3346576d8297acc1b5a48f7a644f47596e8398aec3b39e8875604b36200f000000000000000000000000000000000000000000070b171e2126292b2c2b2926211e170b090200070d0f1d20202017150f0500000000000000000000000000000000000000000000000000000000000d1d2f404b6074869ca9bac6b4a2957f6a5c4b3929170300000000000000000000000000000000000010202d36393b3b3b3b3b3632291b0b0000000000000a1b2f3f4a607282979fb4babbb4aa9f9994919092969da5b0b5c1b5a79e8b7b655a493727150100000000000000000000000000000b1f34475973889db3af9a8570544330364b60768a9fb4ad98826d58382816030000000000000000000000001c31465c71869bb1aa95806b55402b160000000000000000000000000000000000000000000f1f31424b6175869ca9bacdd0bda8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c0000000000000000000000000a1a28323636363631271a0a00000000000000000000000a1f3346586a7f94a6b0b09e8976614c3929170300000006192c3c4d62788b9fb0b09e8a77624c3a29170400000000000000011426364b5c667d8a989faba9abaaa9aa9f9b92877b68604e3a261100172c41576c8196acb49f8a75604b41576c8196acb49f8a74604b35200b000000000000000000000000000c21364c61768a9eb4c7b19c86715c4b3a50657b90a5b6b8a6917c67523d2c1a0600000000000000000000000000000000000001101b222933363b3e4041403e3b363329201d15101b2224323535352d2a2217090000000000000000000000000000000000000000000000000000000000121e32455663798b9fb4c0c0b49f8c7a645746331e1300000000000000000000000000000000000002101b22242626262626211e160b000000000000031628394b5d6b8095a0b1bdb9aa9f958b847e7c7b7d80878f9ba3b2beb8a99e8978635544311d0c000000000000000000000000000005182a3b596f8499aeb39e8974604a3532455771869cb1b19c86715645321e090000000000000000000000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000000001141e32465763798b9fb4bebbbba8927d68533d281300000000000000000c21364c61768ba1b6c6b09b86715b46311c000000000000000000000003162838454b4b4b4b4538271502000000000000000000000417293a4b6075889db3b8a7947f6a5746331e0b0000000c2035495a6c8297a9b8a795806b5948341c0c0000000000000000081c304354647a8c9ea8b4bcc9c0b8b6bbb4b0a59c8c7d68533d281300192f44596e8499aebbaa8c77624d44596e8499aebbaa8c78624d37220d000000000000000000000000081b2e3f53697e93a8b9baa9937e69543e354a6073879db2c5af9a85705b4935210a000000000000000000000000000000000008141c2d3639464b505455565553504c4639363127202d363a474a4a4a423e3527170500000000000000000000000000000000000000000000000000000000021628384a5b697f94a2b3c5bbaa9d8775614b41301d0d00000000000000000000000000000000000000070d0f10101010100c0a0300000000000000091e324557657b8d9fb5beb9a89e8c80776f696766686b727b8598a0b2bfb8a79b8573604b3a2a1804000000000000000000000000040a152b40556a8095aab9a78d78624d382839586d8298adb49f8a76604b3621121212120c0a040000000000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000000000031629394a5b687e93a0a6a6a6a6927d68533d281300000000000000000c21364c61768ba1b6c3b09b86715b46311c0000000000000000000000091e324556606161605645311d0900010000000000000000000b1e324556697e93a5b6b39e8976614b3929160300061a2c3d4d62788b9fb4b39e8976614c3b2a180000000000000000000b20354b6073879caab9c6bdb1aca3a1a3a9b3b49f8b79644f39240f001b30455b70859ab0c8a38e79644e455b70859ab0c8a38e79644e39240f0000000000000000000000000d22374b5d71869cb1c6b49f8a77614c373043546a7f94aabbb4a28d79634e38281603000000000000000000000000000000081826303e4a4f576165696b6b6a69656157524b4538303e4a4f5c5f606057524535220f00000000000000000000000000000000000000000000000000000000000a1a2d3d4a6072849aa7b8c8b6a598826d5f4d3c2b18080000000000000000000000000000000000000000000000000000000000000000000000031729394b6075879dabbcbbaa9e8a7b6b615854515053565d65748298a1b3c4b5a3947f6a5947341f0b00000000000000000000000c171f21273c51667c91a6c5a6917c67513c293e53697e93a8bbaa8f7a644f3a2727272727211f170c00000000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000000000000b1b2d3d4e606d829090909090907d68533d281300000000000000000c21364c61768ba1adadad9b86715b46311c0000000000000a1012130b0b21364b6075767674604b36200b0c170e0c07000000000000031628384b6074879db2b8a7947f6a5746321e0b000c2135495b6d8298aab7a6947f695846331d0d00000000000000000011273c51667c91a4b6c8bcaf9f978e8c8e949ea696816c5c4a36220d001b30455b70859ab0b9a38e79644e455b70859ab0b9a38e79644e39240f000000000000000000000004172a3a4f647a8fa4b5c3ad98836e58473325364d62778b9fb4c0ab96816c5645321e09000000000000000000000000000001142636434b5c646e767b7e8081807e7b76706760564d414a5c64727575756c63523e2a150000000000000000000000000000000000000000000000000000000000000f1c3043546277899eb3bdc3b2a0917d675a4836261401000000000000000000000000000000000000000000000000000000000000000000000a1e3346576a7f94a5b7c2b49f8b7b655d4c473a3c3b3d3f4b5660728399a6b7c1b49e8977614c392816030000000000000000000c1c2933363b3c4d62788da7b8ab95806b56403c3c4f647a8faabba8937e68533e3c3c3c3c3c3733291c0c000000001c31465c71869bb1aa95806b55402b160000000000000000000000000000000000000000000000000f1f31424b61757b7b7b7b7b7b78624d38220d00000000000000000c21364c61768b989898989886715b46311c0000000004121d242729201d31465c71858b8b806b55402b1f212c24211a0f0100000000000a1d314455677d92a4b6b39e8975614b392816071a2d3d4e63798c9fb4b29d8775604b3a291700000000000000000003182d42586d8297adc3c8af9e95817976797f88958876614c3e2d1b07001b30455b70859ab0b9a38e79644e455b70859ab0b9a38e79644e39240f00000000000000000000000a1f3347586d8298adc2b7a5907b65503a2a203448596e8399aec4b39e8975604b36210f00000000000000000000000000000a1c304354606b7a838b909395969593908a857d74675f4c4f647a868a8a8a816c57422d17000000000000000000000000000000000000000000000000000000000000001325364859667c919fb1c2beb39e8978625443301c10000000000000000000000000000000000000000000000000000000000000000000000c21364b6176899eb3c3b6a4947f6a5d4b3f332a2726282e3845546176879db2c2b9a896806b5746321e0900000000000000000919293a464c5151515a73889eb3af99846f5a5151515160768a9fb4ac97826d575151515151514c473a2917040000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000000000000001141e32465761666666666666625a4834200b00000000000000000b21364b6075828383838383806b55402b1600000000122330393c3e353126465c71869b95806b55402933364139362d1f0f0000000000021527374b6073869cb1b8a7947f6a5746321e0a21364a5b6e8398aab6a4927d685645321b0b000000000000000000011426375c72879cb1c7bbaa95806c6361646a767f7a64584633201000001b30455b70859ab0b9a38e79644e455b70859ab0b9a38e79644e39240f00000000000000000000000c21374c61768a9fb4c8b29d8773604a3520182b3b51667b90a6b7b8a7927d68523d2d1a070000000000000000000000000a1a31414b6072808c989faaa9aaabaaa8aa9f9a92877c6e615870859b9faa97826c57422d170000000000000000000000000000000000000000000000000000000000000008182b3b4c5e6c8197a4b6c8b9a79a8473604b3e2d1b0b0000000000000000000000000000000000000000000000000000000000000000071a2d3d53697e93a7b9c5b19c8674604b3f2e1f171211131a27364658677d91a4b6c6b39e8975614b36210c0000000000000002152737465861666767676f849aafb39e887367676767676771879cb1b09b867167676767676767615847331f0a0000001c31465c71869bb1aa95806b55402b160000000000000000000000000000000000000000000000000003162939464b5151515151514d483c2b19050000000000000000091e324557606e6e6e6e6e6e6b62503d28140000000b1b30414d51534b4437465c71869b95806b55403a464c564e4a3d2d1a070000000000091c304354667c91a3b5b39e8875614b39281b2d3e4e63798c9fb5b19c8673604b38281600000000000000000000081d31445574899eb4c9b49f8b76614e4c4e58616a645c4b3a29170200001b30455b70859ab0b9a38e79644e455b70859ab0b9a38e79644e39240f00000000000000000000081c2e3f54697e94a9babbaa957f6a5443301c0d20354b6074879db2c5b09b85705c4a36210b0000000000000000000000021628384d5f6c81959faab4bbb4afa9a5a5a6a9ada59d91837663768b9fb4ac97826c57422d1700000000000000000000000000000000000000000000000000000000000000000d1d30404b6075869caabbc5b4a2947f6a5c4a39281603000000000000000000000000000000000000000000000000000000000000000c21364a5b71869cb1c5b8a7927d675544312111040000000a18293a4a6073869cb1c8b9a7927d68533a2a1804000000000000081d31445561767b7c7c7c7c8399aeb8a6927d7c7c7c7c7c7c7c859bb0b49f8b7c7c7c7c7c7c7c7c76614c37210c0000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000000000000000000b1b2932363b3b3b3b3b3b38342b1d0d00000000000000000003162839454b58585858585855504433210d0000031628394d5f676860554b3f5c71869b95806b55434b58616c635b4a3621120000000000011426364d5e71859bb0b8a7947f6957453222364a5c6e8399abb5a3917c675544311a0a000000000000000000000b20354b60758aa8b9c7b19c87725746373a474c554f4b3e2e1b0b0000001b30455b70859ab0b9a38e79644e455b70859ab0b9a38e79644e39240f000000000000000000000e23374b5d72879cb1c7b49f8b78624d362513081d3144556a8095abbcb4a38e79644e3929160300000000000000000000091e324556677d929fb4bbbab4a29a93908f9093989ea7a19987797c90abbcac97826c57422d17000000000000000000000000000000000000000000000000000000000000000000121e324557647a8b9fb4c0c0b49f8b7a645746321e12000000000000000000000000000000000000000000000000000000000000000e24394e63798ea4b6c8b39e8874604b3727150300000000000c1c304354687e93aabbc5af9a846f5847331f0a0000000000000b20364b607487909191919199a1b3c4ad9c92919191919191919ba2b4baa99f91919191919191917c66513c26110000001c31465c71869bb1aa95806b55402b160000000000000000000000000000000000000000000000000000000b161e212626262626262220190d00000000000000000000000a1b283236434343434343403d332616040000091e324657677c7e73655d4d5c71869b95806b55546068768179634e40301d0900000000000818304050657b90a2b4b39e8875604b382e3f4f647a8ea1b3b09b85705f4d37261400000000000000000000000b21364b60768ba0c6c6b09b86715b3929293337403a372e2010000000001b30455b70859ab0b9a38e79644e455b70859ab0b9a38e79644e39240f00000000000000000004182a3b50657b90a4b6c4ae99846f5948341808011426374d62788b9fb4c1ac97816c5746321e0a000000000000000000000b21364b6075889db2bdbaa99f91847e7b7a7b7e8389929da59d89849aafc9ac97826c57422d17000000000000000000000000000000000000000000000000000000000000000000031628394a5c6a7f94a2b4c5bbaa9c8675614b40301d0d000000000000000000000000000000000000000000000000000000000003162838556a8095aac2c7ac97816c5544311909000000000000001325364c61778b9fb4cab49f8b77614c37220c0000000000000e23384e63788da5a6a6a6a6aeb3bfcabaada7a6a6a6a6a6a6a6b0b4c0c7bab4a6a6a6a6a6a6a6947e69543f29140000001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000000000000000000000030a0c1111111111110d0b05000000000000000000000000000a161e212e2e2e2e2e2e2b282116080000000c21364b61758893867b6e625971869b95806b5c64737e8896846f5e4d39240f0000000000001223384c5e70849aafb8a6947e695645374b5d6f8499afb3a2907b65504030190900000000000000000000000b21364b60768ba0b5c6b09b86715b4631171f212a24221b1002000000001b30455b70859ab0b9a38e79644e455b70859ab0b9a38e79644e39240f0000000000000000000b1f3447596e8398adc2b8a6917c66513b2b190000092035485a6f8499afc4b49e8976614b3621100000000000000000000011263c51667c91a6b7c5b49f8b7c6f69666566696d757d87979f9e9aa2b3c1ac97826c57422d17000000000000000000000000000000000000000000000000000000000000000000000a1b2d3e4b6073849aa7b8c8b6a497816d5e4d3b2b180800000000000000000000000000000000000000000000000000000000091e32455670859bb0c5baa9907b66503727150000000000000000081f33475870859aafc5bbaa917c67513c27120000000000000d22374c62778ca9aeaeaeaeaeb3b8c5c7bab4aeaeaeaeaeaeaeaeb4b9c6c5b9b3aeaeaeaeaeab95806b56402b160100001c31465c71869bb1aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b19191919191916140d0400000000152b40556a8095a39b8f83786a71869b95806b6d7a85939ea1917c66513c2711000000000000091c2f404f647a8fa1b3b39d8875604b3f4f657a8fa1b3ab9a846f5d4b3722120000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c0a0c150f0d070000000000001b30455b70859aa5a5a38e79644e455b70859aa5a5a38e79644e39240f0000000000000000001325364c61778a9fb4c8b39e8874604b36200d000005192b3c51677c91a6b8b9a8937d68533e2e1b07000000000000000000172d42576c8197acc4b9a7937e685e54505051545660687581949dafb3c0c1ac97816c57422d170000000000000000000000000000000000000000000000000000000000000000000000101c3043546278899eb3bec2b19f917c665948362513000000000000000000000000000000000000000000000000000000000b21364b60768a9fb4c9b49f8a75604b36210b000000000000000004182a3a556a7f94aabfc8ac96816c573625130000000000000b20354a60748a9999999999999ea7b8baa99f99999999999999999ea8b9b9a79e999999999999947f69543f2a140000001c31465c71869bb1aa95806b55402b160000000a131a1c2020202020201916100600000000000000000000000000000002090b161e20202020202016140e0400000000000000000000000000000000000000000000000010253a50657b86939ea0988a7f74859a947e77828d9ba39c908378624d38230d000000000000001122374b5c6f8499abb8a6937e69564b5d70849aafb59f8d7a644f3f2f1c040000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c0600000000000000000000001b30455b7084909090908e79644e455b7085909090908e79644e39240f0000000000000000071c3043546a7f94a9bac0ab96806b5544311d080000000e20364b6074889eb3c6b19b86715c4a36220c0000000000000000001a30455a6f849aafc4b39e8975604b403b3a3b38454b57616d7f939cadc1c1ac97816c57422d170000000000000000000000000000000000000000000000000000000000000000000000011426364859677c91a0b1c3bdb39e8977625443301c0f0000000000000000000000000000000000000000000000000000000f253a4f647a8fa9bac6b09b86715645321e0900000000000000000010263b50657b90a5c5c6b09b86715443301c070000000000071c3043546c81848484848484899eb3b49f8b83848484848484848a9eb4b39e898384848484848075614b36210c0000001c31465c71869bb1aa95806b55402b1600000d1b272e313535353535352e2b23180a000000000000000000000000000a151d202c333535353535352b28211608000000000a131a1c2020202020201917110700000000000e23374b5d65737e89979f9f94868298957f88989f9e94867b6e625a4935200b00000000000000081b2e3e4e64798d9fb5b39d88756050657b90a2b4aa98836e5c4a362111000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c0600000000000000000000000f24394f647a7b7b7b7b7b75614b394f647a7b7b7b7b7b76614b36210c00000000000000000b20354a6073879db2c7b4a28d78634e37271502000000081d3144556b8096abc0b5a38f7a644f3a29170400000000000000001c31475c71869cb1c5af9a8570554431262526283239464b616a7e93a8bec1ac97816c57422d1700000000000000000000000000000000000000000000000000000000000000000000000008182b3b4d5f6d8297a5b6c8b8a79a8472604a3e2d1a0a000000000000000000000000000000000000000000000000000013283d53687d92a8c7c2ac97826d57382816030000000000000000000c21364c61768ba7b8c9b49f8973604a35200b00000000000013253652636c6f6f6f6f6f6f8297acb49f8a756f6f6f6f6f6f6f8399aeb39e88736f6f6f6f6e6b615746321e090000001c31465c71869bb1aa95806b55402b16000a1b2b3943464a4a4a4a4a4a43403628180600000000000000000000000a1a28323641494a4a4a4a4a4a403d3326160400000d1b272e313535353535352f2c24190a00000000081c2e3f4b55606977818c999f9b8b9f9e899e9f97897e74655e4d493c2b190600000000000000001021364a5c6e8398aab7a6937e695e70859bb0b49f8b79634e3e2d1b03000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c0600000000000000000000000d22364a5c646565656565615746364a5c646565656565615746321e0a0000000000000005182b3b50667b90a5b6c6b09a85705b4935190900000000021527374d63788da2b4c1ad97826d5846331f0a00000000000000001c31475c71869cb1c4af9a846f5443301f1811151d2832434c62778ca1b7c1ac97826c57422d17000000000000000000000000000000000000000000000000000000000000000000000000000d1d30414b6175879caabbc5b4a2947f695c4a3828160300000000000000000000000000000000000000000000000000162b41566b8096abc0bfa9947f6a543f2a15000000000000000000000a1f33465873889eb3c8baa88d78624d38230d0000000000000818354552575959595959687e93a8bbaa8f7a6459595959596a8095aab8a78d786259595959564b46392816030000001c31465c71869bb1aa95806b55402b160013273949565c6060606060605853463623100000000000000000000002152838454b565e60606060606056514433210e000a1b2b3943464a4a4a4a4a4a4440362919070000000011212e37444b58616c79838d9e9faaa89e9d8b81776960554c40352b1e0e000000000000000000071a2d3d4d63788b9fb4b29d8874667b90a3b4a997826c5b4935201000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c060000000000000000000000071b2d3e4a4f50505050504b46392d3e4a4f50505050504b4639291603000000000000000b203448596e8399aec3b9a8927d68523d2c1a000000000000092135495b70859aafc5b49f8a76614c3621110000000000000000192e44596e8399aec5b29d8874604a3f342a23201c1622374c62778ca1b7c1ac97826c57422d170000000000000000000000000000000000000000000000000000000000000000000000000000121e324657647a8c9fb4c0c0b49f8b7a645645321e1200000000000000000000000000000000000000000000000000192e43596e8398aec3bca7917c67523c2712000000000000000000000417293a5b70869bb0c5c6a58f7b65503a2510000000000000001727353e42444444444f647a8faabba8937e695344444451667b91a6c4a6917c6651444444403632281b0b000000001c31465c71869bb1aa95806b55402b16001a2e435667717575757575756e6453402b16020000000000000000000d1d324556606b737575757575756b62513d28140013273949565c6060606060605954473624110000000006141d2b343f4b546068757f899eb3b29d887d74655d4d493c32291b1103000000000000000000000f2135495b6d8297a9b7a6917c6f849aafb49f8a77624d3d2c1a0200000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c0600000000000000000000000010202d36393b3b3b3b3b363229202d36393b3b3b3b3b3632291b0b00000000000000011426374d62778b9fb4c8b39e8975604b36210f00000000000006192c3c52677d92a7b8baa8937e69533f2e1c080000000000000013283e53687e93a7b8b7a6917c675d4c473b383530252b374c62778ca1b7c1ac97816c57422d170000000000000000000000000000000000000000000000000000000000000000000000000000031629394b5c6a7f95a2b4c5baa99c8675604b402f1d0d0000000000000000000000000000000000000000000000001b30455a70859aafc5baa58f7a65503a25100000000000000000000000192f44596e8499aec3bca7917c67523c2712000000000000000917222a2d2f2f2f364b60768a9fb4ad97826d583828374d62778ca6b8aa95806b55402f2f2b211e160b00000000001c31465c71869bb1aa95806b55402b16001c31465c71858a8a8a8a8a8a826e58432e190300000000000000000d1d30414b607480888a8a8a8a8a8a806b56402b16001a2e435667717575757575756e6554402c17000000021424323b484d5d65737e88949e9da5a69d9d92867b6e625a4b46392e21110000000000000000000006192c3c4d62788b9fb4ae9983798ea2b4a796806b5948341f0e0000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c0600000000000000000000000002101b22242626262626211e16101b22242626262626211e160b0000000000000000081d3144556a7f95aaababaa97816c5745321e09000000000000000e20364b6075899eababab9c86715d4b37230e000000000000000c21364b6175889eb3bcb49e8a7b6c6159534d4a4336403e4c62778ca1b7c1ac97816c57422d170000000000000000000000000000000000000000000002040606060606060606060606060606000b1b2e3e4b6073849aa7b9c7b6a497816c5e4c3b2a180800000000000000000000000000000000000000000000001d32475c72879cb1c7b8a38e79634e39240e0000000000000000000003182d42586d8297adc2bea9937e69543e29140000000000000000050f15171a1a1e32455671869cb1b19b867156453234485973889db3af99846f5a3c2b19160c09030000000000001c31465c71869bb1aa95806b55402b16001c31465c71869b9f9f9f9f98836e58432e19030000000000000008182b3b4d5f6d81969ea69f9fa89b8574604b35200b001c31465c71868a8a8a8a8a8a836e59442f190000000c1f32424f59626d7a85939d9e96879d9d889aa29b9083786b61574b3f2e1c08000000000000000000000e2034485a6c8196a8b49f8c8297adb39e8976614c3b2b18000000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c060000000000000000000000000000070d0f10101010100c0a0300070d0f10101010100c0a030000000000000000000b20354b60758896969696958c79634e3928160300000000000000091d3245566a8092969696968f7a654f3a2510000000000000000a1e324657677d929eb4b9a89e8c81776e686360545855535262778ca1b7c1ac97826c57422d170000000000000000000000000000000000000000071117191c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1d3144556278899eb3bec2b19f907c66594736251300000000000000000000000000000000000000000000001e33485e73889db3c8b7a28d77624d38220d0000000000000000000001172c41566c8196abc1bfaa947f6a553f2a1500000000000000000000070d0f13162838586d8298adb49f8a75604b362b3b596f8499aeb39e88735a48342012100b080100000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1b5b5ad98836e58432e1903000000000000011426364859677c919fb3b8beb49e8a78625544311d08001c31465c71869b9f9f9f9f99836e59442f1900000012263b4f606977828f9ba39c90818298937f84939ea1998b8075655d4b37230e0000000000000000000005192b3c4c61778a9eb4aa9f979fb1a6947f6a5847331d0d000000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788181818181807a645b4a361b0a0000000000000000021528384b60727d81818181817c66513c271100000000000000031629394d5f6b80939fa9b3aa9f968b837d7874706d6b696766778ca1b7c1ac97826c57422d17000000000000000000000000000000000000000a18242b2e3131313131313131313131313131313131312637485a677d92a0b2c3bdb39e8877625443301c0f000000000000000000000000000000000000000000001e34495e73899eb3c8b7a18c77624c37220d0000000000000000000001162b41566b8096abc0c0aa95806b55402b16000000000000000002101b22242828293e54697e93a9bbaa8e79644f392b40556a8095aab8a68d77624d38282725201d1409000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19030000000000000b1c3043546278899eb3bdc3b2a0927d675a4937271501001c31465c71869bb1b5b5ae99846e59442f1900000014293e53697e8a98a09e93867b70859a947f757e88969f9f95887b65503b251000000000000000000000000d1f3447596b8095a7b8b4adb1b39d8875604b3a291700000000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c060000000000000000000000000000000000000000000000040a0c101010100e0c06000000000000000000000000000b2035485a626c6c6c6c6c6b645c4b3d2d1a000000000000000000000a1c30435460686b6c6c6c6c665e4c39240f00000000000000000b1b304150626b7e8b99a1adb4a99f99928d898582807e7c7b7c91a6bbc1ac97826c57422d1700000000000000000000000000000000000007182836404346464646464646464646464646464646464646463c4d5f6d8298a5b7c8b8a6998372604a3d2d1a0a0000000000000000000000000000000000000000001f34495f74899eb4c9b6a18c76614c37210c0000000000000000000000162b40556b8095aac0c0ab96806b56412b16000000000000000010202d36393d3d3d3d4f657a8fabbca8937d68533e3d3d51667c91a6c4a6917c66513d3d3d3a353126190b0000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e190300000000000b1b2d3e4b6073849aa7b8c8b6a598826d5f4d3c2c190900001c31465c71869bb1c6c3ae99846e59442f1900000014293f54697e949f97897e746571869b95806b6876818b999f8a78624d38230d000000000000000000000004182a3a4c6176899eb3c4c2b6a5937e685745321c0c00000000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c06000000000000000000000000000000000000000000000c171f212526262623211a0f01000000000000000000000005192b3c484d5656565656564f4b3e2e1f0f0000000000000000000001142636434b525656565656514c40301d090000000000000000001323334450606879848f989fa9adaea8a79e9b9795939190919aabbfc1ac97826c57422d170000000000000000000000000000000000001124364653595b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b6176879daabbc5b3a1937e695b4a3828150200000000000000000000000000000000000000001f344a5f74899fb4c9b6a18c76614c37210c0000000000000000000000152b40556a8095aabfc0ab96816b56412c1600000000000000071b2d3e4a4f525252525261768b9fb4ac97826c575252525262778ca6b8aa95806b55525252504b4437291b0b00001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e190300000000031628394a5c6a7f94a2b4c5bbaa9c8775614b41301e0e0000001c31465c71869bb1c6c3ae99846e59442f190000000b20364b6074868b817769605571869b95806b58616c798490806b5a4935200c0000000000000000000000000c1f3346586a7f94a6b7c1b29c8774604b3928160000000000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c06000000000000000000000000000000000000000004121c2933373a3b3b3b38352c1f0f0000000000000000000000000e1e2b35384141414141403a372e201001000000000000000000000008182630353d41414141413c393022120000000000000000000005162633424e5b636f7a838a92989da6a6aaadadaaa8a7a5a6abb8c9c1ac97826c57422d17000000000000000000000000000000000002172b4053646e717171717171717171717171717171717171717171717171717a8a9fb4cabfb49f8b79635645321d0900000000000000000000000000000000000000001f34495e74899eb3c9b6a18c77614c37220c0000000000000000000001162b40566b8095abc0c0aa95806b55402b16000000000000000d22364a5c6468686868686872879cb1b09b867168686868686873889eb3af99846f686868676560554639291703001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e1903000000000d1e324657647a8b9fb4c0c0b49f8b7a645746332313000000001c31465c71869bb1c6c3ae99846e59442f19000000081d314455647a796c61584b5c71869b95806b554c5b636f7b75614b3c2c19060000000000000000000000000417293a4b6075889da5a5a3917c675544311b0a0000000000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c06000000000000000000000000000000000000000312222f3a474c505050504e493d2c1a060000000000000000000000000e1920222c2c2c2c2c2b25221b10020000000000000000000000000008141c20282c2c2c2c2c27241d12040000000000000000000000081624313d494e5c646d767d83888d9195979a9c9e9faba3a8b5c6c1ac97826c57422d17000000000000000000000000000000000004192e43596e8286868686868686868686868686868686868686868686868686858a9fb4c9cdbaa99c8674604b36200b00000000000000000000000000000000000000001e33485e73889db3c8b7a28c77624d37220d0000000000000000000001162c41566b8196abc0bfaa957f6a55402a15000000000000000f24394f647a7d7d7d7d7d7d7d859bb1b49f8b7d7d7d7d7d7d7d7d869cb1b39e897d7d7d7d7c7a73615746331e0a001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19030000000d1d30404b6175869caabbc5b4a2947f6a5c4a39291705000000001c31465c71869bb1c6c3ae99846e59442f19000000021527374b5d64645c4c473a5c71869b95806b553d494e5e66615746331e0e00000000000000000000000000000b1e324556697e909090908572604a372715000000000000000000000000000000000000000b21364b60768ba0b5c6b09b86715b46311c0a0a0a0a0706000000000000000000000000000211212f404c586165656565635b4935210c00000000000000000000000000050b0d1717171717160f0d080000000000000000000000000000000001080b131617171717110f09000000000000000000000000000006141f2c353e4b4f5761676d73787c7f828587898a8b8e97a8bcc1ac97826c57422d170000000000000000000000000000000000071d32475c72879b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9fa8bacdd7c7b5a4947f6a5438281502000000000000000000000000000000000000001d32485d72879db2c7b8a38e78634e39230e0000000000000000000002182d42576d8297acc2bea9947f69543f29140000000000000013293e53687e929292929292929ba3b5baa99f92929292929292929ca4b6b8a79e92929292928f8675614b36210c001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e1903000008182b3b4d5e6d8297a4b6c8b8a79a8472604b3e2d1b0b00000000001c31465c71869bb1c6c3ae99846e59442f190000000009192e3f4b4f4f4a3e33465c71869b95806b554035404c504b46392917000000000000000000000000000000031628384b60737b7b7b7b786254433019090000000000000000000000000000000000080d0f21364b60768ba0b5c6b09b86715b46311f1f1f1f1f1d1a140a000000000000000000000010202e3f4c5e66767a7b7b7b79634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a212e3739464c52585a62676a6d7072737576798ea3b8c1ac97826c57422d170000000000000000000000000000000000071d32475c72879cb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b4bac6d7d0d2c2b29d87725645321d09000000000000000000000000000000000000001b30465b70859bb0c5baa48f7a654f3a25100000000000000000000004192e44596e8399aec3bca7927d67523d28120000000000000010253a50657a8faba7a7a7a7a7b1b5c1c7bab4a7a7a7a7a7a7a7a7b1b6c2c5b8b3a7a7a7a7a7a4927d68523d2813001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e190300001325364859667c919fb1c2bdb39e89776254433020100000000000001c31465c71869bb1c6c3ae99846e59442f19000000000010202e373a39362d31465c71869b95806b55402b2f383b3633291b0b000000000000000000000000000000000a1d3144556065656565625a483625130000000000000000000000000000000002101b222533364b60768ba0b5c6b09b86715b46353535353535322f271c0e0000000000000000000e1f2d3e4b5d667c8a8f90908c79644f39240f000000000000000000000000000000000000000000061016181919191913110b010000000000000000000000000000000000000000000000000000000000000000000000000006101b222933363d3c484d5155585a5c5e5662778ca1b7c1ac97826c57422d170000000000000000000000000000000000071d32475c72879cb1bababababababababababababababababababababababababababababababab7a58b75604b36200b00000000000000000000000000000000000000192f44596e8499aec3bba6917c66513c271100000000000000000000021628385b70859ab0c5c8a5907b65503b2610000000000000000c21374c61768b9fadaeaeaeaeaeb4b9c6c5b8b3aeaeaeaeaeaeaeaeb4bac7c4b7b3aeaeaeaeac97826c57422d17001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e1903000a1c3043546277899eb3bdc2b09f917c665948362614020000000000001c31465c71869bb1c6c3ae99846e59442f19000000000002101b222524221b2e43586e8286867e69533e291c2326211e170b000000000000000000000000000000000002152737444b505050504d483c2b18080000000000000000000000000000000010202e373a484a4b60768ba0b5c6b09b86715b4a4a4a4a4a4a4a47433a2c1c0a000000000000000d1d2c3d4a5c657b8b9ea8a697816c5c4a36220d00000000000000000000000000000000000000000917232a2d2e2e2e2e28251e13050000000000000000000002060808060200000000000000000000000000000000000000060c0e1b1d171e21282b35383c40424547384c62778ca1b7c1ac97816c57422c170000000000000000000000000000000000071d32475c72879ca5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a08b76614b36210c00000000000000000000000000000000000000172c42576c8197acc1bea9937e69543e291400000000000000000000091e32455673889db2c8bbaa8e79634e39230e000000000000000a1f3347586e83939798989898989ea8b9b8a79e98989898989898989fa9bab7a69d98989898989885705b46301b001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19000a1b2d3e4a6072849aa7b8c7b5a496816c5e4c3b2b1808000000000000001c31465c71869bb1c6c3ae99846e59442f1900000000000000080d0f0f0d172b4053646e717169604e3b26110f110c0a030000000000000000000000000000000000000009192731363b3b3b3b38352b1e0e00000000000000000000000000000000081b2e3e4b4f5d5f5f60768ba0b5c6b09b86715f5f5f5f5f5f5f5f5c574a3a27140000000000000c1c2b3b495b647a8a9ea9b39e8876614c3e2d1b0700000000000000000000000000000000000000061727353f42434343433d3a312313010000000000040a0c12181b1d1d1b18110b090200000000000000000000000000010f1a212330322b211e16192023272a2d3032384d63788da2b8c0ab95806b56402b160000000000000000000000000000000000071d32475c728690909090909090909090909090909090909090909090909090909090909090909090908b76614b36210c0000000000000000000000000000000000000014293e54697e93a9c9c1ab96816c56362614010000000000000000000b21364b60768a9fb4cab49f8a74604b36200b000000000000000417293a4b61757e8283838383838a9eb4b39e8983838383838383838b9fb4b39d88838383838383816d58422d18001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19031628394a5c697f94a2b4c5baa99c8674604b402f1d0d00000000000000001c31465c71869bb1c6c3ae99846e59442f190000000000000000000000001024364653585c5c534e42311f0b0000000000000000000000000000000000000000000000000009151d20262626262320190e00000000000000000000000000000000000d22374b5c6473747474748ba0b5c6b09b85747474747474747474726857432f1a06000000000b1b2a3a48596379889ea8b4a2927d675846332010000000000000000000000000000000000000000010233545525858585858534e42311e0b000002090c171f21282d313232302d26201d150a0000000000000000000000000f1f2c36394647403632281b110d1215181b243a4f64798fa4b9bea9947f69543f2a140000000000000000000000000000000000000f253a4f647a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b73604b35200b0000000000000000000000000000000000000010263b50657b90abbcc5af9a85705443301c080000000000000000000f243a4f647a8fabbcc7b19c87725544311d0800000000000000000c1e32465761696d6e6e6e6e6f849aafb39e88736e6e6e6e6e6e71859bb0b19c87716e6e6e6e6e6d63523f2a16001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e190d1e324557647a8b9fb4c0bfb49f8a796356453222120000000000000000001c31465c71869bb1c6c3ae99846e59442f1900000000000000000000000007182836404346463e3b31241402000000000000000000000000000000000000000000000000000002080b101010100d0b060000000000000000000000000000000000000f253a4f647a888a8a8a8a92b4c9cab59f8d8a8a8a8a8a8a8a8a8a86725c47321d070000000a1a283947586278879da6b8aa9a84705f4d3a2917020000000000000000000000000000000000000000162a3f52636d6e6e6e6e68604e3a2509070a151d202933363d4246484746423c3632281a12040000000000000000000b1b2c3d494e5b5c554b46392f221b141212182a3b53687d92a8bdc5a7927d68523d28130000000000000000000000000000000000000d22374b5c64656565656565656565656565656565656565656565656565656565656565656565656565605544311d08000000000000000000000000000000000000000c21374c61778b9fb5c9b39e8974604b35200b00000000000000000215283853697e93a8c9c2ad98826d5837271502000000000000000003162839464b5458595959596b8095abb8a68c776259595959596c8297acb49f8b76615959595958524535230f001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e191d30404b6075869ca9bac4b2a1937e685b49382816040000000000000000001c31465c71869bb1c6c3ae99846e59442f19000000000000000000000000000a18242b2e313129261f140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b41566b80969f9f9f9fa9bacdcfbcab9f9f9f9f9f9f9f9f9f9d88725d48331d0800000818273846576176869ca5b7b49f8c79634e41311c0c000000000000000000000000000000000000000000182d42586d82838383837e68533726141a212731363a464c52575b5d5d5b57514b4538302215070000000000000003162939495b6370726b61574c3f372e2928272a3648596d8398adc2b8a78e78634e39230e000000000000000000000000000000000000081b2e3e4b4f5050505050505050505050505050505050505050505050505050505050505050505050504b4437261401000000000000000000000000000000000000000a1f33475871869cb1c6b9a88f7a644f3a24110000000000000000091d3245566e8399aec3c2a8937d68533e2813000000000000000000000b1b2832363e4243434351677c91a6c4a6917b665143434353687e93a8bcab8f7a654f434343423f35271706001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e182b3b4c5e6c8197a4b6c7b7a699836e604e3d2c1a0a000000000000000000001c31465c71869bb1c6c3ae99846e59442f190000000000000000000000000000071017191c1c14110b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c8196abaeb1b4bac6d1dac9bcb5b4b4b4b4b4b4b4b29d88725d48331d08000114263645566175859ba4b6b7a696806b5b4a362313000000000000000000000000000000000000000000001e33485d738898989898836e554431292d3638454b515861676d707272706d6660564d40332615060000000000000a1e324657637985878075655d4f4b3f3e3d3c3b475462778a9fb4c8b39e8874604a35200b0000000000000000000000000000000000000010202e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3531261909000000000000000000000000000000000000000004172a3a576c8196acc5c6aa95806a553f2e1c08000000000000000b20364b6075899eb3c9b5a48d78634d38230e00000000000000000000000b161e21292d2e2e384d62788da7b8aa957f6a55402e3a4f64798faabba9937e69543e2e2e2d2a23170900001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e25364859667c919fb1c2bcab9d8776614c42311f0f00000000000000000000001c31465c71869bb1c6c3ae99846e59442f190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c819396999c9fa8b4c0d1c1b5b09f9f9f9f9f9f9f9f9d88725d48331d0800081c3043546074839aa3b1b1ab9d8875614b3d2d1a05000000000000000000000000000000000000000000001c31465c71869badad9d8874604b3f3e3d4a4e5660676e767d8286878785827c75665e50443325140100000000011527374b6175879b9c95877b6f655d57535252545962728399a9babfac97826d5443301c070000000000000000000000000000000000000002101b2225262626262626262626262626262626262626262626262626262626262626262626262626201d14090000000000000000000000000000000000000000000010263b50657b90a7b8c7b19c87725d4b37231200000000000008182d3e51677c91a8b9c8b19c86715a4935200c00000000000000000000000003090c1418192035495a73899eb3ae99846e593b2a364b60758a9fb4ad98826d5839291618160f060000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58433d3e43546277899eb3bdc0b49f8d7b6558473324140100000000000000000000001c31465c71869bb1c6c3ae99846e59442f1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63797e8184868a9aa2b4c8b5a38f8a8a8a8a8a8a8a8a8a87725d48331d08000b20354b607282989b9b9b9b998d7c665746321f0f0000000000000000000000000000000000000000000000182d42586d8297adb7a6927d675d5454565b636c757c838a92979b9d9c9b9791877c6b625043321f0f00000000081d3144556a8095a5b1a59d90847a726c696767696e778399a1b3c4b3a18e79634e36251300000000000000000000000000000000000000000000080d0f1010101010101010101010101010101010101010101010101010101010101010101010100b080100000000000000000000000000000000000000000000000b20354b6074889eb3c9b6a48f7a6550402f1d0d00000000031426364a5c6f849aafc6bbaa957f6a553c2c1906000000000000000000000000000000000306192b3c5a6f849aafb29d887359473432455671869cb1b19c87725746321e0a0100000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58535353546072849aa7b8c3b4a295806b5d4b3a2a17060000000000000000000000001c31465c71869bb1c6c3ae99846e59442f1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b63686b6e7172849aafc4b09b8575757575757575757572695844301b060013293e53687e858686868686847c665e4c39291601000000000000000000000000000000000000000000000013283d53687d92a8b9b39e897b6f6a696c7179818891999fa9acb0b2b2b0aca59d91806b614f3d2c1a060000000b20354b6075889da6b3b6b2a1998f87827e7d7c7e838a99a1b3bfb8a699836e5b4a361808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556b8096abbcc2af99846f5e4c3b2a1c110b0b0d161e304354647a8ea1b3c9b49f8b78624d38220e00000000000000000000000000000000000000162b40566b8095abb7a68c77614c372838586d8298adb49f8b76614b36210c0000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e686868686a708095a2b3c1b4a59a8473604b3f2e1c0c000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f1900000000000002090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0903000000000000061016181d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d19171007000000000000000000000000071a2d3d4a4e535659546c8197acc1b09b867160606060606060605d584b3a2815010011263a4e60687171717171716f665e4c402f1b0b0000000000000000000000000000000000000000000000000c21364c6176899eb4b9a79e8d847f7e81868e969ea7aeb4bab7b2b0b2b6c3b7b29e947f695b4936210c000000081d31445563798799a1b2b7b3aea49c9793929193989ea8b3bfb8a89e8877624c3d2d1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374d62788c9fb4c7b3a1907c6659483a2e232120222832414b6073859bb0bfbcab98836e5a4834200b0000000000000000000000000000000000000012273c51677c91a6c4a5907b66503b293e54697e93a9bcab8f7a65503a25100000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c5b09b857d7d7d7d7d7f85959eb0c0b4a39b877761554433291c12000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f1900000000000a151d202121212121212121212121212121212121212121212121212121211e160b000000000a18232b2e333333333333333333333333333333332e2b24180a0000000000000000000000000f1f2d36393e413654697e94a9beb09b86715b4a4a4a4a4a4a4a48443a2d1d0b00000b1f31424e535c5c5c5c5c5c59514c402f2212000000000000000000000000000000000000000000000000000a1f3346586c8196a5b6b9ab9f999493969ca4abb3b8b6b2a9a69d9b9ca5afb4bcb49f8b79634e3a2a17040000011527374a5b637783929da6b2b6b6b2aca8a7a7a9adb4b9bbb4a69e8a7b655947341f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092035485a6d8298a9babfb39d887762584b3f3836353739464b5f6a7f94a2b4c4b59f8d79644e3c2b1905000000000000000000000000000000000000000d23384d62788da7b8aa947f6a553f2a3a50657a8fabbca9947e69543f29140000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c9b5a39b9292929293949aa2b0bcc5b09b85776861584c473a2f1c130800000000000000000000001c31465c71869bb1c6c3ae99846e59442f19000000000a1a28323636363636363636363636363636363636363636363636363636363632281b0b0000061828353f43484848484848484848484848484848484340362818070000000000000000000000010f1a2123292c3b51667b90a6c8b09b86715b463535353535353330281d0f000000021424313a3e464646464646443c382f221204000000000000000000000000000000000000000000000000000417293a4b6175879da6b5bcb5afa9a9abb1b5b9b4ada49c948d8886878d9aa2b4baa998826d5847331f0a00000009192d3d4a59616f7d88939ca5aaafb3b9c5b9c8bbb4b0aa9f97887a655d4b3b2a1801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4d62788a9fb4c0b7a69c8676655d534e4b4a4c5057616b7e8d9fb5c0b8a698826d5c4a361d0d00000000000000000000000000000000000000000c2035495a73899eb3ae98836e593a29364c61768b9fb5ad98826d583928160300000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6d2c1b5b0a8a8a8a8a8a9b0b4c0cdc9b49f8c847e766a61584c4030251808000000000000000000001c31465c71869bb1c6c3ae99846e59442f1900000002152838454b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4639281603001023354653585d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d59534636241000000000000000000000000000070c0e1323384e63788daabbb09b86715b463120202020201d1b150b000000000006141f26293131313131312f26241d12040000000000000000000000000000000000000000000000000000000b1e334657647a889ba3afb4bbc8c6b9b4aea89e978f877f7873707278849aa3b5b49f8a77614c37210c000000000f1f2d3a474c5f67757e878f959a9ea7a3a4a3aa9f9b948b8177645c4b3f2f1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2035485a697f94a2b4c2b5a49c877b706863606062656c7580929fabbcbcab9e8877614c3e2d1a00000000000000000000000000000000000000000006192c3c5a6f849aafb29d877258473333465772879cb2b19c87725746321e0900000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6dbcfc6c3b6b6b6b6b6b6b6b7b8bbc0bbaa9f9a93898076665e4a43362518080000000000000000001c31465c71869bb1c6c3ae99846e59442f19000000091d324556606161616161616161616161616161616161616161616161616161615746321e0900162b3f53646d727272727272727272727272727272726e6453402b17000000000000000000000000000000000b20364b60758a9fb4b09b86715b46311c0b0b0b0b08060100000000000000020b11131c1c1c1c1c1c1a110f090000000000000000000000000000000000000000000000000000000000031729394a5c647985929a9faaa5a5a89e999289827a726a635a5b5b6374859bb0baa9917c66513c271100000000010f1c2a34414d57606972798085898c8d8e8e8c8a857f786c62594a3e2f2111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4b6072849aa4b5c2b5a59d8f857e787675777a8188969eb5bcbbb59f8d7c66594734200f00000000000000000000000000000000000000000000162b41566b8096abb7a58c76614c372939596e8398aeb59f8a76614b36210c00000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6cfbfb2aea0a0a0a0a0a0a1a2a3a6aab0b4b4afa79e95887c6b6054433625130000000000000000001c31465c71869bb1c6c3ae99846e59442f190000000b20364b6075767676767676767676767676767676767676767676767676767675614b36210c00182e43586d8387888888888888888888888888888887836e59432e1900000000000000000000000000000000081d31445572879cb2b09b86715b46311c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4a5b63737d858a8e90908e89847c756d655d544d493d4956657b8fa7b8ab96816b56412c160000000000000c181f3039454b535c646b7074767879797775706a635b4c483b2e2011030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c3043546176869ca4b3bfb7b2a29b938d8b8a8c8f979ea7b0bcb9b49d947f695e4c3b2a1801000000000000000000000000000000000000000000000f253a4f647a8f9fa9a5907b65503b2a3f546a7f94a5a59f8c77614c37210c00000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c6b2a0988b8b8b8b8b8b8b8d8e90959aa2acb5b9b3a69e908072605443301c1000000000000000001c31465c71869bb1c6c3ae99846e59442f19000000192e43586e838b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b89735e49341e001a30455a6f849a9d9d9d9d9d9d9d9d9d9d9d9d9d9d9a84705b45301b00000000000000000000000000000000021527375a6f8499afb09b86715b46311c0600000000000000000000000000000000000000000000000001080b0f12141513110d0b0600000000000000050a0b0b0b020000000000000000000f202d3c495460687076797b7a79756f676056504b3f38352c384a6074899ea1a198836e59432e190000000000000004131b2832363e4a4f555a5861636463616054554d493c342a1d10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636475862778699a1b3b8c0b4b0a8a3aa9faaa5acb3b8bfb3a89e927f6a614f402f1d0c00000000000000000000000000000000000000000000000d22374b5c6a7f8a8f90907f69543f2a3b50657b9090908e816d5847331f0a00000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ae98837576767676767677797b80858d979fabb8b8b39e968172604a3e2d1b07000000000000001c31465c71869bb1c6c3ae99846e59442f19000000192e43586e8398a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a09e88735e49341e001a30455a6f859aafb2b2b2b2b2b2b2b2b2b2b2b2b09a85705b45301b0000000000000000000000000000000000172c41566c8196abb09b86715b46311c06000000000000000000000000000000000000000000000709151d202428292a29262320190e0b040003090b1a2020202017150f05000000000000010f1e2c36434b525861646665636055524b4538372e23201c30435471858b8b8b8b846f5a45301a0000000000000000000a161e212d363a403a474c4e4f4e4c4b433638352c1f180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000818293a4859627683939da6b1b5c2bdc8bbb4bbc8c7bab4ada1998a7d6a615043322212000000000000000000000000000000000000000000000000081b2e3e4f616a777a7b7b79634e3823364b60757b7b7a796d63523a2a170400000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e6161616161616263666b7079828d9ea6b8bcb09f947f6a5c4a362210000000000000001c31465c71869bb1c6c3ae99846e59442f19000000192e43586e8298aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9e89735e49341e001a30455a6f859aafb3b3b3b3b3b3b3b3b3b3b3b3b09a85705b45301b000000000000000000000000000000000014293e53697e93a8b09b86715b46311c060000000000000000000000000000000000000000030f1a212731353a3d3f3f3e3c38352b221f180c161e212f353535352c2a221709000000000000000e182630353a464c4e50504e4b4437363228231c110c1325364b61757676767675614b36210c000000000000000000000309101b22242b293337383939373530262321190e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3b4858616f7e88939ca4a8acafb0b0afadaaa99f988f8378675f50433325140400000000000000000000000000000000000000000000000000102032434f5861656565635b49352132455760656565635b5245351c0c0000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e584b4b4b4b4c4d4e51555b636d7b889ea7b9bdb49f8c7a644f3e2e1b080000000000001c31465c71869bb1c6c3ae99846e59442f19000000192e43586e82959595959595959595959595959595959595959595959595959589735e49341e001a30455a6f849a9e9e9e9e9e9e9e9e9e9e9e9e9e9e9a85705b45301b000000000000000000000000000000000010253b50657b909e9e9b86715b46311c06000000000000000000000000000000000000000a161e2d3637444b4f52545453514d483c37342a1d283236454a4a4a4a413e342717050000000000000008141c20293336393b3b39353126211e160a080000081e3246576161616161615746321e0a00000000000000000000000000070d0f16171f2123242422201c140e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3a474c6068757e868d9396999b9b9a9895908a827a6f635a4d41332515060000000000000000000000000000000000000000000000000000021525323a474c5050504e493d2c1a2839454b5050504e493d352717000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58433636363638393b3d494e5d657a899eb3c1bbaa9b85705c4b37220d0000000000001c31465c71869bb1c6c3ae99846e59442f1900000012273c51677c80808080808080808080808080808080808080808080808080807f69543f2a1400192f44596e8389898989898989898989898989898989846f5a442f1a00000000000000000000000000000000000b20354b60738389898984705a45301b050000000000000000000000000000000000000d1b28323d4a4e55606467696a6866625a554c473b3138454b5a5f60606057524534220f000000000000000001080c171f2124262523201d140b09030000000003162939464b4c4c4c4c4b46392916030000000000000000000000000000000000040a0c0e0f0e0c0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1c2a33424e57616971787d818485868583807b756d645c4d493c302315070000000000000000000000000000000000000000000000000000000007151c2a33373a3b3b38352c1f0f1b2832363b3b3b39352c1f1709000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e2121212224262c353f4c5c677d92a3b5c8b4a28f7a644f3a250f0000000000001c31465c71869bb1c6c3ae99846e59442f190000001024394d5f676a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69614f3c271200172c4054656e747474747474747474747474747474746f6554412c180000000000000000000000000000000000081d314455606e737474706655412d180300000000000000000000000000000000000d1d2b39454b5b636d75797d7e7f7e7b78726b61594b454556606f757575756c63523e2a150000000000000000000000040a0c0f11100e0b080100000000000000000b1b293236363636363632291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f3139464b545a63686c6f7071706e6a6660564f4b3e352c1e1305000000000000000000000000000000000000000000000000000000000000000c181f2225262623211a0f010a161e2126262523211a0f0100000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e190c0c0d0e111a212f3e4a6073859bb0c5c0ad97826d583c2b190500000000001c31465c71869bb1c6c3ae99846e59442f190000000a1d30414d515555555555555555555555555555555555555555555555555555544f4332200c001124364754595e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5a5447372511000000000000000000000000000000000001152737444b595e5e5e5a554837251200000000000000000000000000000000000c1c2b3b4857606c7982898f92949493918d8780776a60564b6075848a8a8a8a816c57412c170000000000000000000000000000000000000000000000000000000000000b161e2121212121211e160b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004131b2832363c494d53575a5b5b5a5855504b4538372e20190e00000000000000000000000000000000000000000000000000000000000000000000040a0c1010100e0c0600000003090b1010100e0c06000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19030000000006111c304354697e93a8c9c7b29d87725a4835200b00000000001c31465c71869bb1c6c3ae99846e59442f1900000000122330393c40404040404040404040404040404040404040404040404040403f3c3225150300071929364044494949494949494949494949494949494441372919080000000000000000000000000000000000000919273135444949494541372a1a08000000000000000000000000000000000417293a48596275818c979ea7a7a9a9a8a6a59c958a7f74625a677c919faa9f96816c57412c1700000000000000000000000000000000000000000000000000000000000000030a0c0c0c0c0c0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e212c35383e414446464543403b363228221b10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19030000000000001325364d63788dabbccab7a58d78624d38220d00000000001c31465c71869bb1c6c3ae99846e59442f190000000004121d24272b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a272015070000000a19242c2f343434343434343434343434343434342f2c25190b000000000000000000000000000000000000000009151d202e343434302d251a0c00000000000000000000000000000000000a1f334758627786979fabb3b9c5beb9b7c3b6b2a99f958578646a8095aabbac96816c57412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090e192023282c2f3031302e2b26211e160a0800000000000000000000000000000000000a131a1c2020202020202020202020202020202020201f1e1c1a16110c0a0400000000000000000000000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19030000000000000b20354b60758a9fb5cac3a48f7a654f3a251000000000001c31465c71869bb1c6c3ae99846e59442f190000000000000a1012151515151515151515151515151515151515151515151515151514120c030000000000071117191f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1a1811080000000000000000000000000000000000000000000001080b191e1f1f1b18120800000000000000000000000000000000000a1a30414c6176869ca4b4bcc4b7b2aaa4a1a0a1a3a8b0a39b897b6d8398adc1ac96816c57412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e13171a1b1c1b1915110b09030000000000000000000000000000000000000d1b272e313535353535353535353535353535353535353433312f2b27211f170b080100000000000000000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e1903000000000000081d31445573899eb3c8bba6917c66513c271100000000001c31465c71869bb1c6c3ae99846e59442f19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527384d5f6f8399a4b5c2bdb1a69d958f8c8a8b8e939aa2a79e8a7a859bb0c1ac96816c57412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b2b3943464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494744403c363329201d1409000000000000000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19030000000000000a1f334758748a9fb4c9bca7927c67523d271200000000001c31465c71869bb1c6c3ae99846e59442f19000000000000030a0c111618191816130d0b06000000000000000000000000000000000000000000000000000000050b0d0f1011110f0900000000000000080d0f11100f0d0b070000000000000000000000000000000000000000010a10120b090200000000000000000000000000000000000000091d314556677d92a1b3c2bdb19f9788807a777576797e85909da59e898a9fb4c1ac96816c57412c170000000000000000000000000000000002080b0e12141616161513100c0a0400000000000000000000000000000000000000000000000000000000000000050b0d10131516161614120f0b090200000000000000000000000000000000000000070d0f2020202020201816100600000000000000000000080e101c20202020202012100a010000000000000000020b111320202020202020202020202020202020202020202020202020201b19120900000000000000000000000000000000000000000000000000000000000000000000000301000000000013273949565c6060606060606060606060606060606060605f5e5c5956514c463a35312619120400000000000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e19030000000000010f22374c61778caabbcec8a6917b66513c261100000000001c31465c71869bb1c6c3ae99846e59442f1900000000000b171e21262b2d2e2d2c282320190e0900000000000000000000000000000000000000000000090f1118202224252626231c110300000002101b222526262422201c130b080100000000000000000000000000000005131e2527201d150a0000000000000000000000000000000000000b20364b6074879db2bfc2b19f9681766b646260616468707b8799a19e9fa8bac1ac96816c57412c170000000000000000000000000001080b151d202427292b2c2b2b2926211f170d0b0500000000000000000000000000000000000000000000000000070d0f181f2226282a2b2c2b2a2724201d150c0a03000000000000000000000000000002101b22243535353535352d2b2317090000000000000003111c23253135353535353527251e130500000000000006131e26283535353535353535353535353535353535353535353535353535302d261a0c00000000000000000000000000000000000000000000000000000000000000070b12181610060000001a2e435667717575757575757575757575757575757575757473716f6b666158524b4437301f170c000000000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e1903020300050b131f2e3f51677c91a6c8cebbaa8e79644f39240f00000000001c31465c71869bb1c6c3ae99846e59442f19000000000b1b2933363c40424443413e38352b231c110100000000000000000000000000000000000008121d24262b3437393b3b3b382f221100000010202e373a3b3b3938353025201d14090000000000000000000000000008162330393d3631271a0b0000000000000000000000000000000004182a3a52677d92a5b7cab6a496816c61574f4c4b4c4e535d65758398a0b4bac6c1ac96816c57412c1700000000000000000000000008141c20273136393c3f404141403e3b37332a2220190d07000000000000000000000000000000000000000000090f1a21242a34373b3e404141403f3d39363228211e170b0600000000000000000000000010202d36394a4a4a4a4a4a423f3527170600000000000011212e373a474a4a4a4a4a4a3d393023130100000000021324313a3d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4542382a1a090000000000000000000000000000000000000000000000000000000008131c20272e2b23180a00001c31465c71858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888684807c766f6760554d4133291c0d0000000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e1917171819192022303d4b5d6e8398aec3cab49f8a76614b36210c00000000001c31465c71869bb1c6c3ae99846e59442f1900000003172939464c515558595856534d493c382f1d140900000000000000000000000000000003111c232f383b3b484d4e5051504c402f1c0900081b2e3f4b4f51504e4d4a43363531261912010000000000000000000000162633414d524b4538291b0b0000000000000000000000000000000a1f34475970859aafc3c5b19c8673604b4639373536393f4b5761738298a2b4c8c1ac96816c57412c170000000000000000000005131826303537444b4e52545556565553504c473a38342b221b1002000000000000000000000000000000000005121d242d36393b474c50535556565654524f4b453836332920190e00000000000000000000071b2d3e4a4f60606060606058524535231000000000000e1f2e3f4b4f5c5f6060606060524d41301e0a000000000b1e31424e5360606060606060606060606060606060606060606060606060605b554838261200000000000000000000000000000000000000000000000000000812182530353c433f35281806001c31465c71869b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9f9e9c9995918b847c73675f4c463a2b1d0d00000000000000000000001c31465c71869bb1aa95806b55402b16001c31465c71869bb1c6c3ad98836e58432e2c2c2c2d2e2b3437414d5b657b8fa0b2c6c6b09b85705746321e0a00000000001c31465c71869bb1c6c3ae99846e59442f190000000a1e33465761666b6d6e6d6b68625a504c3f31261909000000000000000000000000000614212e37404c51585962646566665e4c38230f000d22374b5d64666564626054524b4437301c140800000000000000000009193344505f676056463929190900000000000000000000000000000c22374c61778b9fb4cab8a6917c6655443329222021242f3946556074849aafc5c1ac96816c57412c170000000000000000000d181f3136434b5155606367696b6b6b6a68656158554d483c362d1d15090000000000000000000000000000000d181f30393e4a4e57596265686a6b6b6b6967646056534c4639352b1c130800000000000000000d22364a5c707575757575756d64523f2b16010000000a1b2c3d4b5d6571757575757575675f4d3925100000000011263a4e60687575757575757575757575757575757575757575757575757575706655422d1900000000000000000000000000000000000000000000000008111c232f36434a52585346352310001c31465c71869bb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5bcb5b4b3b1aeabaa9f9991877c6e6158483b2b1c0c000000000000000000001c31465c71869bb0aa95806b55402b16001c31465c71869bb1c6c3ad98836e58434141414142443b484d535f6779889db3bfccb9a8947e69543929160300000000001c31465c71869bb1c6c3ae99846e59442f190000000c21364c61757c80828382817d7871655d4b44372614010000000000000000000000051424323f4b4f5e666d7377797a7b7b66503b2611000f253a4f647b7b7b7977746e6760554d4030261808000000000000000215273750626b7c74615746372715010000000000000000000000000011273c51667c91aabbc8b39e8874604b3726170d0b0c111b29374455667b90a5bbc1ac96816c57412c1700000000000000000e1d2a34414e5460666e75797c7e808180807e7b77716b625a4e4a3e3127190c00000000000000000000000003111d2a34404d515c646c72777b7d7f8081807f7c7975706961574d483c3025180b000000000000000f24394f647a8a8a8a8a8a8a826d58422d1803000003162839495b657b868a8a8a8a8a8a7d67523d27120000000013283d53687e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a84705b45301b0000000000000000000000000000000000000000000007101b222f38404c5460676d64533f2b16001c31465c71869bb1c6d8c7bab4b3b3b3b3b3b3b3b3b3b3b3b5bcc9bfc8bbb4afa59d9183766259483a2917040000000000000000001c31465c71869b9b9b95806b55402b16001c31465c71869bb1c6c3ad98836e58575757575758595a596269717d889da6b7cbc0b39e8976614c37210c0000000000001c31465c71869bb1c6c3ae99846e59442f19000000152a3f556a7f919597999896938d857b6c605544311d130000000000000000000000132332424f5d65717b82888c8e909089745e49341f001b30455b708590908e8d88837d73675f4b4336261401000000000000081d3144556b80928475615544311d1300000000000000000000000000152b40556a8095aac8c2ac97826d5544311909000000000b19273750667b90a5bbc1ac96816c57412c17000000000000000e1e2c3b474c6068737c84898e91949596969593908c8680786e645c4b44372a1d0c000000000000000000000211212e3b484c5e66707981878c90939596969594928e8a857e766c625a4a4336291b0b0000000000000f24394f64798e9f9f9f9f97826d58422d18030002101e32455763798a9c9faa9fa397816c5f4d3925100000000013283d53687d929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a85705b45301b0000000000000000000000000000000000000000060f1a212e373f4b505e66727c826d58432e18001c31465c71869bb1c6cebaa99f9e9e9e9e9e9e9e9e9e9e9e9faba5a9b0b5c1c3b6b2a1998677625846331f12000000000000000000182e43586d82868686867e68533e2913001c31465c71869bb1c6c3ad98836e6c6c6c6c6c6c6d6e7073777e85929ea6b7c4c1b4a2947f6a5847331f0a0000000000001c31465c71869bb1c6c3ae99846e59442f1900000013283e53687d93a8adaeadaba8a39b908173604b413018080000000000000000000e1e30414f60697b8690989da6a3a59e89745e49341f001b30455b70859aa5a3a79e9892877c6b605443301c110000000000000b20364b60758a9f998373604b41301c0c000000000000000000000004192f44596e8499aec3bda7927d685237261400000000000011263b50667b90a5bbc1ac96816c57412c170000000000000d1d2c3c4959626f7d8791999ea8a7a9aaababaaa8a5a49c958b837a6b6055473b2a1c0c00000000000000000010202e3f4b59626e7c858e969ca5a5a8aaabababa9a7a99f9a938981786860544639291b0b00000000000f24394f64798ea4b5b5ad97826d58422d180300102031424b6075869ca8b4b8a79b8574604b41301e0a0000000013283d53687d92a8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b09a85705b45301b000000000000000000000000000000000000050f1a212d363e4b4f5d65707c869186715b46311c001c31465c71869bb1c6c9b49f8b88898989898989898989898a8c8f949ba3b1b5c2bfb3a49c8676614c413018080000000000000000162b3f53646d7171717168604e3b2611001c31465c71869bb1c6c7b29c8681818181818181828385888c939ba3b3b8c5bfb2a39a8473604b3a2917040000000000001c31465c71869bb1c6c3ae99846e59442f1900000012273c51677c91a6aaacb1b5c1b5b09f97826d5f4d362614010000000000000006192c3c4d5f697e8c9ba3adb2ada7a59e89735e49341e001b30455b70859aa4a6acb3aea59c918072604b402f1c090000000000081d3144556c8196a197816c5f4d3a2a170400000000000000000000011426365d72879db2c7b9a48f7a644f3a240f00000000000011263b50667b90a5bbc1ac96816c57412c17000000000008182b3b495a627783929ca5aeb4b9c6bebdbbbcbebdc2b5b1aa9f988b80746159473a291a0a000000000000000e1e2e3e4b5d657783919aa2acb2b6c3bbb4b3b2b4b9c6bab4afa89e978a7e7261574639281603000000000f24394f64798ea4b9c2ad97826d58422d18000c1c2d3e4e606d8298a4b5bcab9e8978625645312313010000000013283d53687d92a4a4a4a4a4a4a4a4a4b1b5c1d2c8b8aba5a4a4a4a4a4a4a49a85705b45301b00000000000000000000000000000000050e19202c353d4a4e5c646f7b85919b9b86715b46311c001c31465c71869bb1c6c3ad9882737373737373737373737475767a7f868f9ca4b2bec2b6a499836e5f4d36251300000000000000001023354653585b5b5b5b534e42311f0b001c31465c71869bb1c6cab6a49c9696969696969697999a9ea7a8b0b5c1c4b7b2a1998576615544311c0c000000000000001c31465c71869bb1c6c3ae99846e59442f190000000f253a4f647a8f9494969ba3b4babdb1a0927d675443301c08000000000000000c2035495a677d929faab5ab9f98928f8e826e59432e1900152b40556a808d8f91979fa9b6b29e95806b5e4c3823100000000000021527374b607383999f917d675847331f0c00000000000000000000081c30435474899eb4c9c6a18c76614c37210c00000000000011263b50667b90a5bbc1ac96816c57412c170000000001142636485962788899a1b2b6c3bcb5b0aaa8a6a6a8abb2b6c3bbb4aa9f95857761584738271502000000000006192c3c4b5c657b8999a1b0b4c0b4b0a8aa9f9e9d9ea8a5abb3b8b9b4a89e938375615746321e13000000000f24394f64798ea4b9c2ad97826d58422d1808182a3a4a5c687e93a0b2c0b59f8d7c665a4838271505000000000013283d53687d8f8f8f8f8f8f8f8f8f8f9ba3b5c9beab9a908f8f8f8f8f8f8f8f84705b45301b0000000000000000000000000000040d181f2b353d494e5c646f7a84909ba3b09b86715b46311c001c31465c71869bb1c6c3ad98836e5e5e5e5e5e5e5e5e5e546061656a717a8698a0b2c0c2b3a1917c675443301c0700000000000000061828353f43464646463e3b31241402001c31465c71869bb1c6d3c3b6b2acacacacacacacadaeafb3b8c5c2c1b5b0a69d92837561584737261400000000000000001c31465c71869bb1c6c3ae99846e59442f190000000b20354b60727d7f7f8186919fa9babeb29d8773604b35200b00000000000004172a3a4d63788a9fb4b8a79e8c837d7a7972604a35200b0013283c50616a787a7c818b9ca4b6b59f8d7b65503e2e1b080000000000091d3144556176879d9e8976614c3b2a18040000000000000000000b20354b60758a9fb5cabaa88a75604b35200b00000000000011263b50667b90a5bbc1ac96816c57412c1700000000081c3043546278879da6b3bfbfb2ab9f9b9593919193969ca5afb4c0bbb4a39b8676615645311d0e00000000000c2035495a647a8a9ea7b3bfb7b2a39b938d8a8888898b90959ea7b4bcb9b4a1998575614b41301a0a0000000f24394f64798ea4b9c2ad97826d58422d181325364758647a8b9fb4beb4a295806b5e4c3c2b1a0a0000000000000c22374c61777a7a7a7a7a7a7a7a7a7a859bb1c6bba5907c7a7a7a7a7a7a7a7a79634e39230e000000000000000000000000030c171f2a343c484d5b636e79838f9aa2b0b4b09b86715b46311c001c31465c71869bb1c6c3ad98836e584949494949494949434b4c50545d65748298a2b4c9bfb19c8673604a35200b00000000000000000a18232b2e3131313129261f140600001c31465c71869bb1bababababababababababababab9c7bab4b1ada8a39b92877d6e6157473a29190900000000000000001c31465c71869bb1c6c3ae99846e59442f19000000081c3043546067696a6c717c8b9fb4c9b7a5907b66503b26110000000000000a1f3347586d8297a9bab39e897b6e676564605443301c07000d213343505b6365676c78869ca9baab9b85705c4b37220d0000000000011426374658657b90a196816c5947341f0b0000000000000000000c21364c61768babbcc9b49f89745443301c0800000000000011263b50667b90a5bbc1ac96816c57412c1700000005182a3b4b6073859ba5b7c4bab4a1998c86807d7c7c7e81878f9aa2b4bbc1b5a49b8574604b3c2b1906000000091d30404d6278899ea8b8c1b4a59d90857e7875737274767a8089959fabbabfb3a398836e5f4d3828160200000f24394f64798ea4b9c2ad97826d58422d181c3043546176879da9bab7a69a8473604b402f1e0e000000000000000a1f3447596164646464646464646470859aafc5b6a18c776464646464646464635b4936210c00000000000000000000030b171e2a333b484c5a626d79838d99a1afb4b6b1a398836e59432e19001c31465c71869bb1c6c3ad98836e5843343434343434263035373a3f4b566074849aabbccab6a4907b65503b2510000000000000000000061016181c1c1c1c13110b020000001c31465c71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a3a99f9b98938d857d75675f4b4639291c0c0000000000000000001c31465c71869bb1babaae99846e59442f1900000001142636434b525455575e6a8095aac7c3ab96806b56412b160100000000000c21374c61778a9fb4b4a2907c665d52504e4a433625130000041525333d494e4f515a63798a9fb4b5a38f7a644f3a250f0000000000000919293a4c5d6f84999f8a77614c37220d0000000000000000000d22374d62778ca2b7c8b39e88735e4926140100000000000011263b50667b90a5bbc1ac96816c57412c170000000b1f344759697f94a3b4c3baa99f928378706a686667696c727a84939faabbc2b5a3947f6a5a4835200c0000000f24394d5e6f8399a7b9c4b4a39b877b70686360545d5660656b75808d9fa9bac1b2a0927d675645321e0900000f24394f64798ea4b9c2ad97826d58422d1d2f3f4a60728399a5b7bbaa9d8877625544312212000000000000000004182a3a474c4f4f4f4f4f4f4f4f5a70859aafc5b6a18c77614f4f4f4f4f4f4f4e493d2c1a060000000000000000020a161e29333a474c59626c78828c989fabb3b6b1a49c918578624d38220d001c31465c71869bb1c6c3ad98836e58432e1e1e1e1e1e141c2021252e38455564798c9fb5cac2ac96816c573625130000000000000000000000000000000000000000000000001c31465c718690909090909090909090909090908f8f8e8c8986827d78706860564d4133291b0c000000000000000000001c31465c71869ba5a5a5a599846e59442f190000000008182630353d3f3f404e63788da9bac5af9a85705a45301b05000000000012273c51677c91aabbb09a85705e4c3f3a39353025180800000007151f2c35383a3c495b6c8197acc1aa957f6a55402a150000000000001222303e4b50657a8fa7947f6a553b2a180500000000000000000d22374d62778ca2c7c9b49e89745443301c0700000000000011263b50667b90a5bbc1ac96816c57412c1700000417293a4c62778a9fb4c1bcab9f8b7d6e635a5553515153565c64707e8c9fb4bcc1b49f8a78624d3a29170400061a2c3d51667c91a1b3c5b7a69b8576655d534e4a4338454b5057616b7c8b9fb4c0bfb29d8775604b36210b00000f24394f64798ea4b9c2ad97826d58422d2b3b4c5d6a7f94a1b3bfb49f8c7b655947372614040000000000000000000c1c2a34373a3a3a3a3a3a3a455a70859aafc5b6a18c77614c3a3a3a3a3a3a39362c1f0f000000000000000109151d283239464b58616b77818b979faab5b6b2a49c92867c73625a4835200b001c31465c71869bb1c6c3ad98836e58432e190909090001080b0c101a28374a5c70859aafc5c6b19c86715443301c0700000000000c151b1e20202020201f1c170d01000000000f243a4f647a7b7b7b7b7b7b7b7b7b7b7b7b7b7a7a79787675716d68625a534b4538301e170b00000000000000000000001c31465c7185909090909090846e59442f19000000000008141c20282a2a354a6075899fb4c7b19c87725c47321d070000000001172c41566c8196abc8a9947e6954402f2524201c13080000000000010f1a2123252c3d50667b90a5bbaf9a846f5a452f1a05000000000b1b30404c5c647073899e9b86715948341f0b00000000000000000c21364c61768ba9bacab59f8a75604a35200b00000000000011263b50667b90a5bbc1ac96816c57412c1700000a1f3346586b8096a8bac2b49f8d7c685f4d493c3e3c3c3e3e4b4f60697d919eb0c5baa998826d5846331f0a000c2135495b71869bb0bfc4b29d877761584b3f38353028323639464b5e687d92a2b4c8b7a6927d685238281602000f24394f64798ea4b9c2ad97826d584227374859657b8d9fb4bfb3a1947f695d4b3b2a190900000000000000000000000c181f2225252525252530455a70859aafc5b6a18c77614c37252525252523211a0f0100000000000009141d273138454b57616a76808a969fa9b4b6b2a59c92867d73676054483c2b1905001c31465c71869bb1c6c3ad98836e58432e190300000000000000000a192d3d556a7f94aabfc9b49f8972604a35200b000000000f1d293033353535353534312a1f11010000000d22374b5c64656565656565656565656565656565646361605458534d483c3632281a13030000000000000000000000000f243a4f647a7b7b7b7b7b7b79634e39240e00000000000001080b12141c30435473889db3c8b39e88735e49331e090000000004192e43596e8398aebaa5907b65503b26110f0b07000000000000000000060c0e1022374d62778ca2b7b19c87715c47321c07000000031629394c5e667a858a90a7a38c77624c37220d00000000000000000a1f33465874899fb4c9bcab8b76614c36210c00000000000011263b50667b90a5bbc1ac96816c57412c1700000c21364c6176899eb4c6b6a4957f6a5e4e41352c282727292e37424f5f6b8096a7b8c7b49f8a76614c36210c000e23384e63788da3b5c9b7a6927d6759473a2f23201c161e212832404e5f70859ab0c7c4af9a846f5645321e09000f24394f64798ea4b9c2ad97826d58423144556278889eabbcb6a599836e614f3f2e1d0d00000000000000000000000000040a0c0f0f0f0f0f1b30455a70859aafc5b6a18c77614c37220f0f0f0f0e0c0600000000000008131c263137444b566069767f89969fa8b4b6b2a59c92877d736760544b43362b1e0e00001c31465c71869bb1c6c3ad98836e58432e190300000000000000000012273c52677c91a7bccdbaa98b76614c36210c0000000c1d2d3b44484a4a4a4a4a49463d2f1f0d000000071b2e3e4b4f5050505050505050505050505050504f4e4c4a43363e38352b211e160a00000000000000000000000000000d22374b5c64656565656565635b4a36210c00000000000000000000001325485d73889db2c8b39e89745e49341f0900000000051a30455a6f859aafb9a48f7a644f3a250f0000000000000000000000000000000c21364b61768ba0b6b39e88735e49331e090000000a1e324657667c8c9a9fa9b8a6917b66513c261100000000000000000417293a5d72879cb2c7c9a48f79644f3a240f00000000000011263b50667b90a5bbc1ac96816c57412c17000316283953687e93a8b9c2b19c8674604b40312019131112141b2232414c6176899eb3c8baa9917c67513c27120014293e53697e93a8c1c8b29d8874604b3b2a1c110b0703090b161e314151667c91a9bac9b49f8a75604b36210b000f24394f64798ea4b9c2ad97826d5842414b6074859ba6b8baa99d8776614c43322111000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c00000000000000000000000818253037444b556068757f89959ea8b4b7b2a59d92877d736760554b43363026180e0000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000010263b50657b90a5bad6c5a18c77624c37220d00000115293b4c585d60606060605e5a4d3d2a170300000010202e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a3a3937353025282220190e0902000000000000000000000000000000071b2e3e4b4f5050505050504e4a3d2d1a0700000000000000000000001e33485d73889db2c8b39e89745e49341f0900000000051b30455a70859aafbaa5907a65503b25100000000000000000000000000000000d22374c62778ca1b7b39e89735e49341e090000000c21364b6175889daab4bac7a8937e69533e2914000000000000000000192e44596e8399aec3bda8927d685337271502000000000011263b50667b90a5bbc1ac96816c57412c1700091e32465770859bafb4b5a4917c675645312213060000000007141e3346576b8096abc0c7ab96816c56412c1700172d42576c8297acc1c2ac97826d5443301d0c000000000000031321364b60768a9fb4c9baa98e79644e39240f000f24394f64798ea4b9c2ad97826d583d4d5f6c8196a3b4beb49f8b7a64584633251503000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c0000000000000000000000132536434a556068747e88949ea7b3b7b2a59d92877d746860554b443730261c1408000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000012273c51677c91a6bcccb9a78b75604b36200b0000071b3044586a737575757575746b5a46311c0800000002101b2224262626262626262626262626262525242321201c13130d0b050000000000000000000000000000000000000010202e373a3b3b3b3b3b3b39362d1f0f0000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000004192e43596e8398aebca6917c67513c27120000000000000000000000000000000e23394e63788ea3b8b29d88735d48331e0800000011263c51667c91a6b7c8cdbfaa947f6a553f2a15000000000000000000152a3f556a7f94aac3c1ac97826c5544311d09000000000011263b50667b90a5bbc1ac96816c57412c17000c21364b617587919a9fa69c8673604b382715040000000000000317293950657a8fa5bac4af99846f5a442f1a001a2f445a6f8499afc4bea8937e69533626140000000000000000091e32455771869cb1c6c7a6917c66513c2611000f24394f64798ea4b9c2ad97826d58495b677d919fb0c1b2a0937e685c4a3a29170700000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c00000000000000000000071c3043546067737d87939da6b3b6b1a59d93877d746860554b443731261c14080100000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000050d1b2e3e54697f94a9bec9b39e89745645321d090000081e33485d73888a8a8a8a8a89745e49341f090000000000070d0f1010101010101010101010101010100f0e0c0b0700000000000000000000000000000000000000000000000002101b222426262626262624211a0f010000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000002172d42576c8297acbda8927d68533d281300000000000000000000000000000010253a4f657a8fa4bab09b86715b46311c0600000013293e53687e93a8c3d3d1c1a8937e68533e29130000000000000000000f253a4f647a8fa5b7c8b39e8875604b372715040000000011263b50667b90a5bbc1ac96816c57412c1700091e32465761737c848a8d887a645443301a0a00000000000000000c22374c61778ca1b6c6b19b86715c46311c001b30455b70859ab0c5bca7917c67523c27120000000000000000031628395a6f849aafc4bca7927d67523d2712000f24394f64798ea4b9c2ad97826d585763798a9eb4bdb5a498826d604e3e2d1c0c0000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c000000000000000000000b20354a60727d86929da5b3b6b1a49c93877e746860554b443731261d140901000000000000001c31465c71869bb1c6c3ad98836e58432e19111111111112131418202b394b5c70859aafc5c6af99846f5a382815020000081e33485d73889d9f9f9f9e89745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1010101010100e0c0700000000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000000162b40556b8095aabfa9947f6a543f2a1500000000000000000000000000000011273c51667c91a6bbae98836e59432e190400000011273c51667c91a5b6c4c3b4a38e7a644f39240f0000000000000000000b20354b6074879db2c8b8a7917c665544311f170f0d0e101a273750667b90a5bbc1ac96816c57412c170003162839465460666f767875645c4a3626140000000000000000000b20364b60758ba0b5c7b19c87725c47321d001a30455a6f859aafc4bca7917c67523c27120000000000000000021527385a6f859aafc4bca6917c67513c2712000f24394f64798ea4b9c2ad97826d636675869ca8b9b9a89c8675604b42312010000000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c0000000000000000000013293e53687e919ca4b2b6b6a49c90867e746860554b443731271d1409010000000000000000001c31465c71869bb1c6c3ad98836e58432e2727272727272728292b343b4857647a8d9fb5cab9a8947e69543f2914000000081e33485d73889db2b5b39e89745e49341f0900000000000000000000000000050b0d1e1f1f1f1f1c110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081e33485d73889db2c8b39e89745e49341f09000000000012273d52677c92a7c8ad97826d58422d18000000000000000000000000000000142a3f54697f94a9beaa95806a55402b15000000000b21364b6075879ca6aeada59b85705c4a36220d000000000000000000081c3043546a7f94aabbc5b19c8674604b423329242223252d384555667b90a5bbc1ac96816c57412c1700000b1b2836434b5158616360564a3e2d18080000000000000000000c22374c61778ca1b6c6b09b86715b46311c00192e43596e8398aec3bea8937e69533e29140000000000000000091d31455671869cb1c6c4a5907b65503b2510000f24394f64798ea4b9c3ae998379797b849aa4b6bcb49e8a7963574532241302000000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c0000000000000000000014293e54697e93a9b6c2c7b19c877b716860564b443731271d15090100000000000000000000001c31465c71869bb1c6c3ad98836e58433c3c3c3c3c3c3c3c3d3f3b484c596275869cabbcbfb39e8976614c36210c000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000000d18202234343434343126241c12040000000000000000000000000000000000000000000000000000010a10120b090200000000000000000000000000000000000000081e33485d73889db2c8b39e89745e49341f0900000000000f24394e64798eaabbb09a85705b3a2917040000000000000000000000000002182d42576d8297acc7a7917c67523c271200000000091e324556647a88949998948778634d3e2d1b07000000000000000000011426364c62778b9fb4c4b6a4957f6a604c473a3a38393b3e4a566073849aafc4c1ac96816c57412c170000000b182630353a464c4e4b45382d2010000000000000000000031024394e64798ea3b9c4af99846f5a442f1a00162b41566b8096abc7c1ac96816c573f2f1909000000000000010f20364b6075899eb4c9b8a68d78624d38230d000f24394f64798ea4b9c7b3a1998e8e909aa2b4bdb09e917d675b493928160600000000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c0000000000000000000014293e54697e939ea6b3b9b6a49c8d847b71665e504c40382f231c1108000000000000000000001c31465c71869bb1c6c3ad98836e5851515151515151515153545759626a77849ba4b5bfb3a1947f6a5846331f0a000000081e33485d73889db2c8b39e89745e49341f0900000000000000000000000d1d2b34374949494949473b382f22120000000000000000000000000000000000000000000000000005131e2527201d150a000000000000000000000000000000000000081e33485d73889db2c8b39e89745e49341f0900000000000b20364b60758a9fb4b39e88735847331f0a000000000000000000000000000417293a5a70859aafbaa98e78634e39230e00000000031628384a5c64767f83837e76635a493520100000000000000000000000081f3448596c8197a6b7c2af9d937e6d6158524f4d4e50545c64748298a2b3c7c1ac96816c57412c170000000008141c20293336383632281a1002000000000500050b0d161e2f4053687d93a8bdc4ab96806b56412b160012273c51677c91a9bac7b29d87725d4b3727180e090200050b131f2f4050667b90a8b9c8b39e88735a4935200c000f24394f64798ea4b9cfbfb3aea3a3a5afb4c0b09f96806b5f4d3d2c1b0a0000000000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c000000000000000000000b20364b60747e88949ea7b4b6ab9f9a90857c70665e504c40382f231c110800000000000000001c31465c71869bb1c6c3ad98836e6666666666666666666768696c70777f899ba3b4b9b4a1998372604a3a291704000000081e33485d73889db2c8b39e89745e49341f090000000000000000000005182b3b484d5e5e5e5e5e5c514c402f1d0c000000000000000000000000000000000000000000000008162330393d3631271a0b0000000000000000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000000091d31455671879cb1b8a78c76614c37210c000000000000000000000000000a1f33465873889db3b49f8a75604b35200b00000000000a1a2d3e4a57616a6e6e696157493c2c1902000000000000000000000005182a3b4c6176889db2bcbbb59f8d82766d676462636569707a8598a0b2c0d0c1ac96816c57412c17000000000001080c171f2123201d150a0000020b11131b1b19202228323e4c5e70859ab0c5b8a6917b66513c2611000c21374c61768a9fb4c7b6a5907b655544362b201d151a181f22313d4c5e6e8399aec6bfad97826d583c2c1906000f24394f64798ea4b9d2c1b5b0a9aaafb4c0c1ac968174604a41301f0e000000000000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c00000000000000000000091d3245566069757f89959ea8b4b5afa39b90857b70665e504c3f372f231c11080000000000001c31465c71869bb1c6c5b09a847c7c7c7c7c7c7c7c7c7c7c7d7e82868b949ea8b4b3a89e948375615443301c0c00000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000b2034485962737474747471665e4c3b2a180400000000000000000000000000000000000000000000162633414d524b4538291b0b00000000000000000000000000000000081e33485d73889db2c8b39e89745e49341f09000000000002152738586e8398adc5a48f7a644f3a250f000000000000000000000000000c21364c61768ba6b7b19b86715544311d0800000000000010202d39464c545958544c46392c1e0e000000000000000000000000000d1f334658667c919eafbcbcab9f9789827c7977787a7f858c9ba3adb2becfc1ac96816c57412c170000000000000000040a0c0e0b0902000006141f262930302b343739464b5c667c90a2b4c2b39d8875604b36200b000a1f3347586d8298a9bac3b19c86746054483c3631272f2a3437414d5c667b90a1b3c5b3a18f7a644f3a240f00000f24394f64798ea4b9c9b5a39b94959aa2b0bcb29d877a645b493b2b1c0c0000000000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c0000000000000000000002152838454b57616a76808a969fa9b4b5b0a39b90857b70655d504b3f372e231c1104000000001c31465c71869bb1c6c8b4a29a91919191919191919191919294979b9faab1aba69e968a7f726157463625130000000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000d22374d62778989898989867c665947341f0900000000000000000000000000000000000000000009193344505f6760564639291909000000000000000000000000000000081e33485d73889db2c8b39e89745e49341f09000000000000152a3f546a7f94a9bca7927d67523d2812000000000000000000000000000f243a4f647a8fa4c4ad98826d583727150100000000000002101b2933363f44433f3633291b0e00000000000000000000000000000417293a4c5e6b80959eb4b9bcb5a79e98918f8d8e90949b9faa9f98a0b2c6c1ac96816c57412c1700000000000000000000000000000000021424313a3e45463b484d5157616a7a8a9eb4c0b5a4947f6a5645311d090004172a3a4e63798a9fb4bdb5a4988272625a4f4b4538443b484c535f677a899eb3bfb8a799836e5c4b37220d00000f24394f64798ea4b9c6b09b857f8084969eb0b7a59d89796359483a2a1b0a00000000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c00000000000000000000000a1a283239464b58616b77818b979faab4b5b0a39b90857b70655d504b3f372e1f180c0000001c31465c71869bb1c6d1c0b4b0a6a6a6a6a6a6a6a6a6a6a6a8a9acb0b4a49c969088807769605446392818080000000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000b203448596e83989e9e9e9c8a77614c37271502000000000000000000000000000000000000000215273750626b7c74615746372715010000000000000000000000000000081e33485d73889db2c8b39e89745e49341f0900000000000011263c51667b91a6bbaa95806a55402b150000000000000000000000000012273c52677c91a7bcaa957f6a55402a150000000000000000000b171e212a2e2e29211e170b000000000000000000000000000000000b1b304050626b80929ea8b4bbb9b3ada7a4a2a3a5a9b0a89f8c8398adc3c1ac96816c57412c17000000000000000000000000000000000b1f31424e535a5b5d5962676d757f8b9ea8b9b7a69c8674604b3827150200000c2135495b6a7f949fb5bcb2a09884786d6460565a595b596268707d899ea7b8b7a89e8978624d3e2e1b0700000f24394f64798ea4b9c2ad97826d6a6f80969fb1b7a79d877762584739281909000000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c0000000000000000000000000a151d28323a474c59616c78828b989fabb3b4b0a29b90857b70655d4f4b3f332a1c0c00001c31465c71869bb1c6d9c9bcb4b4b4b4b4b4b4b4b4b4bbc8babec1c5b19c86807c746b62594b4336281b0b000000000000081e33485d73889db2c8b39e89745e49341f090000000000000000000005182b3b4f64798ea2b3b3a8957f6a5544311d0800000000000000000000000000000000000000081d3144556b80928475615544311d130000000000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000000000f24394e64798ea3b9ac96816c57412c170200000000000000000000000013293e53687e93a8bda8937e68533e291300000000000000000000030a0c151919140c0a030000000000000000000000000000000000001222334450626b7d8a989faab0b4bac7b9c3b7b2aca1998a7c7c90a5bbc1ac96816c57412c170000000000000000000000000000000011263a4e606870707274777c8289949fa9b9b5a59d8879635645311a0a000000061a2c3d4f616c81959fabb5b2a29a8a827a75716f6f7072777d85929ea7b8b4a59d8a7b6459483420100000000f24394f64798ea4b9c2ad97826d58626d8197a1b3b7a59c8676615745372718080000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c00000000000000000000000000020b161e29333b474c59626c78828c99a1afb3b4b0a29a90847b70655d4c473a2a1804001c31465c71869bb1c6cfbcab9f9f9f9f9f9f9f9f9f9faaa1a4a8aeb4b39e8981796d61594b3f3026180b00000000000000081e33485d73889db2c8b39e89745e49341f0900000000000000000000000d22364a5c6f849aafc2b39d8874604b362010000000000000000000000000000000000000000b20364b60758a9f998373604b41301c0c00000000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000000000d22374d62778ca2b7ad98836d58432e1803000000000000000000000000152a3f556a7f94aabca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000416263344505f6778828b949b9fa9a3a4a3a59d978f8378667b90a5bbc1ac96816c57412c170000000000000000000000000000000013293e53687e858587898c91979ea8b4b4ab9f988779635b4938271500000000000e1f32434b6072808d9ca4afb5a89f978f8a86858485888c929ba3b3b3aa9f97877a645c4b3b2b19020000000f24394f64798ea4b9c2ad97826d584b60738399a2b4b6a49b84756055443625130000000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c000000000000000000000000000000030c171f2a343b484d5a636d79838f9aa1b0b4b4b0a29a8f847a6f615847331f0a001c31465c71869bb1c6cab49f8c8a8a8a8a8a8a8a8a8a8b8c8f93999faaa79e968b8277655d4d4030201000000000000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000071b2d3e50667b90a3b5b7a6927d67523e2e1b07000000000000000000000000000000000000081d3144556c8196a197816c5f4d3a2a1704000000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000000080c21374c61768ca1b6af99846f5a442f1a05000000000000000000000001162b41566b8096abbaa5907b65503b26100900000000000000000000070d0f1415120b09030000000000000000000000000000000000000008162633414d59626d787f85898d8e8e8d8b87827a6e62667b90a5bbc1ac96816c57412c1700000000000000000000000000000001172c41566c81969b9c9fa8a6acb3b5a99f988c8276635b4a3d2c1a0a000000000000151c304354606b7b86929a9fabb4aca99f9c9a999b9da5a8b0b5a79e978c8276645c4b3e2e1d0d000000000f24394f64798ea4b9c2ad97826d5844556074849ba4b6b4a3998373605443301c1506000000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c0000000000000000000000000000000000040c181f2b343c494d5b636e7a848f9aa2b0b5b4afa29a8f8376614c37220c001c31465c71869bb1c6c3ad988274747474747474747576777a7e848b979fb3aa9f97887b665e4d3f2e1a0a000000000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000001023384c5e71869bb1c3b09b85705c4b37220d000000000000000000000000000000000000021527374b607383999f917d675847331f0c000000000000000000000000081e33485d73889db2c8b39e89745e49341f0900000003101b2225384d62778da2b7ae98836e59432e1904000000000000000000000000152b40556a8095aac7a6917b66513827231c1204000000000000010f1a2124292b27211e160a00000000000000000000000000000000000000081623303b484d5a626a70757779797876726d645d50667b90a5bbc1ac96816c57412c1700000000000000000000000000000001172c41566c8196abb2b4bac6c2b5a39b8a83796d61584a3d2d1f0f0000000000000001142636434b5d65737d848d9fb5c7bab4b1afaeb0b2b7c3bbaa9e8981796d61584b3e2e201000000000000f24394f64798ea4b9c2ad97826d583745566176869ca5b7b3a1988272604a43322413040000000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c00000000000000000000000000000000000000040d19202c353d4a4e5c646f7a85909ba3b1b6b4afa198826d58432d18001c31465c71869bb1c6c3ad98836e5f5f5f5f5f5f5f56606265696f7782919faab4a69d8c7c665d4b382816030000000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000000091c2f4052677d92a5b7b5a38f7a644f3b2b1805000000000000000000000000000000000000091d3144556176879d9e8976614c3b2a18040000000000000000000000081e33485d73889db2c8b39e89745e49341f0900000010212e373a4351667c91a6bfaa95806a55402b150000000000000000000000000012273c52677c91a9baaa957f6a564537382f2212000000000009151d2d36393f403d3632281b100200000000000000000000000000000000000005131d2b343c484d555460626364636157574f4b50667b90a5bbc1ac96816c57412c1700000000000000000000000000000001172c41566c8196a7a9adb1b6c2b09b86786e635b4c463a2d1f0f010000000000000000081826303f4c59626e7a859aafc5c5b8b3b1b0b2b4bac7b49f8a8076686054473a2e20100200000000000f24394f64798ea4b9c2ad97826d58423847586278879da7b8b2a096806c614f423122120300000000000000000000000000000000000000051b30455a70859aafc5b6a18c77614c37220c000000000000000000000000000000000000000000050e19202d363e4a4f5d65707b85919ca4b2b6b09b86715b46311c001c31465c71869bb1c6c3ad98836e584a4a4a4a4a38454b4c4f5359626d7d8c9fb4b7aa9f8b7b645645321e090000000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000000001120354b6074879db2c1ad98826d594834200a000000000000000000000000000000000000011426374658657b90a196816c5947341f0b0000000000000000000000081e33485d73889db2c8b39e89745e49341f090000081b2e3f4b4f54616f849aafb3a18e79644f39240f000000000000000000000000000c21374c61768a9fb4b29d87746055504c402f1c09000000091927313d4a4e5455524b45392e211000000000000000000000000000000000000000000d19202b343836434b4d4e4f4e4b46393a3b50667b90a5bbc1ac96816c57412c1700000000000000000000000000000001172c41566c81919294989ca4aab4a39b8b8278686051453425150100000000000000000c1c2e3e4b5c6477838e9aa2b4b2a9a69e9c9b9d9fa9adb4aa9f95897e726056453727150100000000000f24394f64798ea4b9c2ad97826d5842293a48596379899ea8bab09e947f6a604e40302111020000000000000000000000070d0f120c0b04001b30455a70859aafc5b6a18c77614c37220c0000000000000000000000000000000000000000000000060f1a212d363f4b505e66727c86929da5b09b86715b46311c001c31465c71869bb1c6c3ad98836e584335353535283236373a3b484c5f687e93a2b4baa99c8675604b36210e0000000000081e33485d73889db2c8b39e89745e49341f0900000000000000000000000000081d314455697e94a7b9b49f8b77624c382715020000000000000000000000000000000000000919293a4c5d6f84999f8a77614c37220d0000000000000000000000081e33485d73889db2c8b39e89745e49341f0900000e22374b5d6569707f94a1b3a599836f5c4a36220d000000000000000000000000000a1f3347586b8096a3b3a59781736a665e4c38230f000001152737444b5c64696a6760574b3f2e1d0d0000000000000000000000000000000000000000050d19202226303538393938363229263b50667b90a5bbc1ac96816c57412c17000000000000000000000000000000000e23384e63797c7d7f82868d959ea8aa9f978a7e6c635143321f0f0000000000000004172a3a4b5c647a8998a0afb1a69d938d888786878990979fabb4a89e938374605544311d0f00000000000f24394f64798ea4b9c2ad97826d58422d2b3b495b647b8a9faabbaf9d927e685e4d3f2e201000000000000000000002101b222427221f180c1b30455a70859aafc5b6a18c77614c37220c0000000000000000000000000000000000000000000000000007101b222e37404c546067737d87939d9b86715b46311c001c31465c71869bb1c6c3ad98836e58432e1f1f1f161e2122252a34414a6072859bb0c7b6a4937e69543c2b190500000000081e33485d73889db2c8b39e89745e49341f0900000000000000000000000000011527374b6176899eb3bbaa95806a5645311d090000000000000000000000000000000000001222303e4b50657a8fa7947f6a553b2a180500000000000000000000081e33485d73889db2c8b39e89745e49341f09000010253a4f657b7e85949db2a39b8777624c3e2d1b07000000000000000000000000000417293a4b60758599a1b09f97867f7c66503b26110000081d314455606d797e807c75655d4b3b2b1905000000000000000000000000000000000000000000050b0d141c2022242423211e16263b50667b90a5bbc1ac96816c57412c17000000000000000000000000000000000c2135495b636668696d7178808a99a1b4a99f93816c614f3d2c1a060000000000000a1f334758647a8b9ea7b2b19f97887e7873717072757b828c9da5b7b3a1998473604b3d2d1a07000000000f24394f64798ea4b9c2ad97826d58422d1d2c3d4b5c667c8c9fb4bbb49f8c7c665d4b3e2d1e0e000000000000000614202e363a3c37342a1d1b30455a70859aafc5b6a18c77614c37220c00000000000000000000000000000000000000000000000000000007111c232f36434a546067747e889486715b46311c001c31465c71869bb1c6c3ad98836e58432e190a0003090b0d10181f304354687d92a7c8c3b19c87725a4835200b00000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000000000091e3246576b8095a9bab39d8875604b36201000000000000000000000000000000000000b1b30404c5c647073899e9b86715948341f0b00000000000000000000081e33485d73889db2c8b39e89745e49341f0900001a2f445a6f84939aa2a59d9185786259483420100000000000000000000000000000000c1e324556617683909ba3a49c9487725d47321d000417293a4b6073828e949592887b65594834200b00000000000000000000000000000000000000000000000001080b0d0e0f0e0c0a11263b50667b90a5bbc1ac96816c57412c1700000000000000000001080b0d0c0a03061a2c3d494e515254585a636b778399a1b3b49f947f6a5b4936210c000000000004182a3a4c6176889da9b8b19f97817569625a5c5b5560656d7a879da6b7b3a296806b5b4a36210b000000000f24394f64798ea4b9c2ad97826d58422d181f2e3e4c5e687d929daebbaa9f8b7b655c4a3c2c1d0d0000000000021424323e4a4f524c473b2f2130455a70859aafc5b6a18c77614c37220c0000000000000000000000000000000000000000000000000000000000081218253036434b556068757e836f5a442f1a001c31465c71869bb1c6c3ad98836e58432e1903000000000000051325364c62778caabbcab6a48d78624d38220d00000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000000000031629394c62778a9fb4b8a6927d67523f2e1b08000000000000000000000000000000031629394c5e667a858a90a7a38c77624c37220d00000000000000000000081e33485d73889db2c8b39e89745e49341f0900001a2f445a6f8499afb29d877c73625a483b2a1802000000000000000000000000000000031628384658616e7b869bb0b19c87725d47321d000a1f3347586a7f949fa9aaa69d8978624d37220d00000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c17000000000000090f11141d2022211e160b0e1f2c35383c3d3f3c494d5962748399a7b9b49f8b79634e3a2a1804000000000a1f3447596c8196a6b7b6a497816d61574d493c37444b505c6477889db2c0b49f8c79634e392917030000000f24394f64798ea4b9c2ad97826d58422d1810202f404e5f6a7f949eb0baa99e8a7a645a493b2b180500000000102032434f5c646761594c403130455a70859aafc5b6a18c77614c37220c0000000000000000000000000000000000000000000000000000000000000008131c263037444b56606974604b35200b001c31465c71869bb1c6c3ad98836e58432e1903000000000000000b20354a60758a9fb4cac2a6917c66513c271100000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000000000000b1f3448596d8297abbcb09b85715d4b37220d0000000000000000000000000000000a1e324657667c8c9a9fa9b8a6917b66513c261100000000000000000000081e33485d73889db2c8b39e89745e49341f0900001a2f445a6f8499a7b2a59b857b69614f41301a0a000000000000000000000000000000071b2d3e4d5f677a849aa3b3a89c87725d47321d000c21374c61768a9fb4bec4b7a796816c56412c1700000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c170000000004121d2426263135373632291b140e1a212327282a2c353b48566177899eb3baa998836e5847331f0a000000000c22374c61778b9fb4c4b19c8674604b4639352b2731353e4a59667b90a3b5bbaa98826d5746331e0a0000000f24394f64798ea4b9c2ad97826d58422d1802122231414f616b8096a0ababa89d887863594834200b0000000b1b2e3e4f61697a7c77655e4e4230455a70859aafc5b6a18c77614c37220c00000000000000000000000000000000000000000000000000000000000000000008141c273138454b55605544311d08001c31465c71869bb1c6c3ad98836e58432e190300000000000000091d32455674899eb4c9bda8937e68533e291300000000081e33485d73889db2c8b39e89745e49341f0900000000000000000000000000000005182a3b4e63788c9fb5b5a38f7a644f3b2b180500000000000000000000000000000c21364b6175889daab4bac7a8937e69533e291400000000000000000000081e33485d73889db2c8b39e89745e49341f090000172c42576c8189909ca5a39b8d7f695f4d3828160300000000000000000000000000000d22364a5c677d8b9aa2a79e9189836f5a442f1a0010263b50657b90a9bacdd4c5b19b86715c46311c00000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c170000000012222f383b37444b4c4b4639322414060c0e11131419202b3847586b8095abc7b49f8a77614c37220c0000000014293e53697e93aabbbbaa927d68564532282019151d202d3b4c5e71859bb0c8b49f8a76614b36210c0000000f24394f64798ea4b9c2ad97826d58422d180304132332434a6072829196969696968777624c37220d0000031729394b5c697f8f91897c68604b43365a70859aafc5b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000109151d283237444b4437261401001c31465c71869bb1c6c3ad98836e58432e1903000000000000000b20364b60758ba8b9cdbea9937e69543e291400000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000000000000000d20364b6075899eb3c1ad98836e594834200a000000000000000000000000000011263c51667c91a6b7c8cdbfaa947f6a553f2a1500000000000000000000081e33485d73889db2c8b39e89745e49341f090000152a3e52636c737b879ca7ab9f917d675645321e0900000000000000000000000000071b2d3e4f647a8b9fa9aa9e897c746f6554412c180011263b51667c90abbccfd7c7b19c87715c47321c00000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c17000000091d2f404c515855606261574f42321e0e0000000000060d1a2a3a4f657a8fa4c8bbaa917c66513c271100000004192e44596e8399aec8b49f8a76614b3828160b060108101d2f4054697e93a9bebaa9907b65503b26100000000f24394f64798ea4b9c2ad97826d58422d18030005151c30435460727c8081818181817d68523d281300000a1e334657647a8c9fa79e8c7e6c6054465a70859aafc5b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000020a161e2631353126190900001c31465c71869bb1c6c3ad98836e58432e19030202020300060b1628384e63798ea3c6d6c9a7927d68523d281300000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000000000000081c2e3f52677d92a7b8cab49f8b77624d382815020000000000000000000000000013293e53687e93a8c3d3d1c1a8937e68533e291300000000000000000000081e33485d73889db2c8b39e89745e49341f0900000f2235455254606577899eb3b39e8875604b36210b000000000000000000000000000d22364a5c70859ba9b49f8c7a6760555447372511000d22374c62778c9fb5c0c7baa997826d58422d1800000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c170000000f24384c5e666d7175777669604f3c2c19060000000000000c21364c61768baabbc8ab96806b56412b16010000011527375d72879db2c6b19b86715746321a0a000000000011243a4f64798fa4b9c7a9947f6a543f2a150000000f24394f64798ea4b9c2ad97826d58422d1803000000132536435460676b6c6c6c6c6c68604e3a251100000c21364b6176879daab9aa9f93817261575a70859aafc5b6a18c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000209141d201d14090000001c31465c71869bb1c6c3ad98836e58432e191717171718191a2129324556697f94a9becfbcab907a65503b251000000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000000000000e23374b5d71869bb0c5cebbaa95806b5645321d090000000000000000000000000011273c51667c91a5b6c4c3b4a38e7a644f39240f00000000000000000000081e33485d73889db2c8b39e89745e49341f0900000517273536434a596a7f94aab8a6927d67523d2812000000000000000000000000000f24394f64798ea3b5ad98836e5c4b443737291907000b203448596c8196a2adaea99f8b79634e39230e00000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c1700000011263b51667c82868a8c8a7e695a493520090000000000000a1f334658748a9fb4c2ad98826d58432d18030000081d314455748a9fb4c3ae99846e593929160000000000000c22374c61778ca1b6c0ab96816b56412c160100000f24394f64798ea4b9c2ad97826d58422d180300000008182536434a51565656565656524e41311e0b000011263b50667b8b9ea8b7bbb49f968375625a70859aafc5b6a18c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0801000000001c31465c71869bb1c6c3ad98836e58432e2c2c2c2c2c2d2e2c3539464b6074879db2c7cab59f8b76614c37210c00000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000000000006192b3c50657a8fa3b5c9d8c8b39e8875604b362010000000000000000000000000000b21364b6075879ca6aeada59b85705c4a36220d00000000000000000000081e33485d73889db2c8b39e89745e49341f0900000009171825303b4e64798ea3c5ac97826c57422d170200000000000000000000000014293e54697e93a9c1a7927d68523e312719190b000005182b3b4b617584919899958a7d675b4a36210c00000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c1700000014293f54697e949b9fa99f8b78634d3726140100000000000b20354b60758aaabbc4ae99846f59442f1a0400000b20354b60758aa9bac2ad98836d58432e180000000000000b21364b60768ba0b5c2ac97826d57422d180200000f24394f64798ea4b9c2ad97826d58422d18030000000008182530353c4141414141413d3a3123130100000f23384c5e667c8a9da6b5bdb0a1998678646f859aafc4b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e584341414141414242443d494e57616c8096a5b6cac4b09b86715847331f0a00000000081e33485d73889db2c8b39e89745e49341f0900000000000000000000000000000b2035495a6e8399aec1cdc9cbb8a6927d68523f2e1b08000000000000000000000000091e324556647a88949998948778634d3e2d1b0700000000000000000000081e33485d73889db2c8b39e89745e49341f090000000000081322374c61778ca1b6ae99846f59442f1a04000000000000000000000001162b41566b8096abbaa5907b65503b26150900000000000d1e32465761737c82838078675f4d3d2d1a0700000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5adadac96816c57412c170000000f253a4f647a8fa9b4baaa95806b5544311d0e01000000000d22374d62778ca2c8c4ae99846f59442f1a040000081d314455758a9fb4c4af99846f5a3d2c1a0600000000000d22374d62778ca2b7c1ac96816c57412c170200000f24394f64798ea4b9c2ad97826d58422d1803000000000008131c20272b2c2c2c2c2c28251e1305000000091c2f404c5e667a889ba3b3bfb3a49c887a6f8499aec4b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e585757575757575758595b5b636a7581969eb0c3cbb8a6937e69543a2a170400000000081e33485d73889db2c8b39e89745e49341f0900000000000000000000000000031729394d62788c9fb4c6b9b4b9c5b19b86715d4b37220d000000000000000000000000031628384a5c64767f83837e76635a493520100000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000000000d22374c62778ca1b7ae99836e59442e1904000000000000000000000000162b40556b8095aabba6917b66513c261100000000000003162839465460676d6e6b625a4d41301f0f0000000000000000000000000000000000000000000000000000000000000000000011263b50667b909898989896816c57412c170000000b20364b60758a9fb4c8b29c8774604b3c2b1c140d0c0d111d2d3e52677c91a7bcc2ad98826d58432d18030000011527375d72889db2c7b29d87725b493521110500000009182a3a50667b90a5bbc6a9947f6a543f2a150000000f24394f64798ea4b9c2ad97826d58422d180300000000000000070b1216171717171713110b01000000000011222f404c5c64778599a1b1bdb5a69d8b7c8398aec3b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e6c6c6c6c6c6c6c6c6d6e7074787f88979fb0bccebcb39d8875604b36210c0000000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000000000a1e3346576c8196abbcb9a89ea8b9b5a38f7a654f3b2b19050000000000000000000000000a1a2d3e4a57616a6e6e696157493c2c19020000000000000000000000081e33485d73889db2c8b39e89745e49341f090000000000000e23384d63788da2b8ac97826d57422d1802000000000000000000000000142a3f54697f94a9bda7927d68523d2813000000000000000b1b2836434b525859554d483c30231201000000000000000000000000000000000000000000000000000000000000000000000f24394e647a8383838383837e68523d2813000000091d3145566d8298adc1b6a5927d685a483c3026222122242f3b4a5c6e8399aec3c4aa947f6a553f2a1500000000192f44596e8499aec7b7a58e79634e402f20191514131c273647586c8196abc1baa8907b66503b26110000000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000101010101010000000000000000000412222f3e4a59627583979fb4bcb7a99f8c889eb3c8b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c7b29c86818181818181818181828385898d959da6b1bdc8bbb49e917c675745321e090000000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000000011426364b6176899eb3c9b49e899eabbcae98836e594834200a0000000000000000000000000010202d39464c545958544c46392c1e0e000000000000000000000000081e33485d73889db2c8b39e89745e49341f0900000000000010253a50657a8fa5baab96806b56412b160100000000000000000000000013283d53687d92a8bda9947e69543f291400000000000000000b182630353c43444038352b1e120500000000000000000000000000000000000000000000000000000000000000000000000d21364a5c646e6e6e6e6e6e68604e3a2511000000021527384f647a8fa3b5c3b39e8978625a4b43363836373a3f4c59647a8d9fb5cab7a68f7a654f3a25100000000014293e53697e93a9bac3ad97826d5e4c3f342b2b2a253037445461768a9eb4c7b49f8a75604b36210b0000000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000412202d3b4857617381949fabbabaab9f9ea6b8cbb6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6cab6a49c96969696969696969797999b9ea7aab2b7c4c2b5aa9f94806a5f4d392816030000000000081e33485d73889db2c8b39e89745e49341f09000000000000000000000000081c304354697e93a8b9bcab947f8d9fb5b49f8b78624d3828160200000000000000000000000002101b2933363f44433f3633291b0e00000000000000000000000000081e33485d73889db2c8b39e89745e49341f0900000000000013283d53687d92a8bda9947e69543f29140000000000000000000000000011263b51667b90a6c7ab96816b56412c1600000000000000000008141c20272d2e2b2220190e00000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e585858585858524e41311e0b000000000a22374b5c70859baabbb9a79c8778686054504d4b4c4f545d6577879dabbcc2b29d8874604b35200b000000000c21374c61778a9fb4c3b49f8c7c665d4d483c403f36434a5560728399a8b9baa997826d5745321e090000000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000010f1d2b394655606c7f8d9fa9b8bcb5b3b8c4d5b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d3c3b6b2acacacacacacacacacadaeb0b3b9c5c9bcb4afa49c8c7f6a625040301b0a000000000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000000b20354b6073879cb2c6b49f8b77859ab0bbaa95806b5645321e0900000000000000000000000000000b171e212a2e2e29211e170b0000000000000000000000000000081e33485d73889db2c8b39e89745e49341f09000000000001172c41566c8196abc8a6907b66513b2611000000000000000000000000000e23384d63788da9baaf9a846f5a3a2a170400000000000000000001080b121819160d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36394343434343433d3a3123130100000000081b2e3e4f647a8c9fb4c0b6a59c897d736a656261626469707b889da5b7c7b6a4947f695544311d08000000000a1f3347586b8095a5b7bcab9e897b6c625a57555456546066748197a1b2c0b49f8a78624d392816030000000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000d1b2937444b61697c8b9da6b6c2c8cbd5ccb6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1bababababababababababababababab9c6b9b4b0acab9f9a91867b6961504433221200000000000000081e33485d73889db2c8b39e89745e49341f090000000000000000000000071a2d3d51667c91a5b6c4af9a85707e93a8b9b39e8875604b362111000000000000000000000000000000030a0c151919140c0a03000000000000000000000000000000081e33485d73889db2c1b39e89745e49341f09000000000005182b3b5a6f859aafbbaa8d78634d38230e000000000000000000000000000b20354b60758a9fb4b39d88735847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21242e2e2e2e2e2e28251e13050000000000001022364a5c6b8095a2b3c0b6a79e92877f7a777677797e85909da6b7c3baa99c8674604b372614010000000004172a3a4b6075879da9bab9a79e8c8178716c6a696b6e747b85979fb1bfb4a295806b5a48351b0a000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000b192631434f5e667a889ca4b4c0cee3ccb6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4a3a89e9b97928b857c73655d4f433325150400000000000000081e33485d73889db2c1b39e89745e49341f0900000000000000000000000d21364a5c70849aafc3b8a6927d67768a9eb4b8a7927d68533f2e1c08000000000000000000000000000000000000040300000000000000000000000000000000000000081e33485d73889dababab9e89745e49341f0900000000000b2034485973889eb3b49f8a75604b35200b00000000000000000000000000081d31445571869cb1b7a68c77614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f19191919191913110b0100000000000000071b2d3e4b6074839aa2b1bdb8b3a59d958f8d8b8c8f939ba3b2b7c4b9ab9f8b7b6555443119090000000000000c1e324557647b8b9faab7b9aa9f978c8681807f808388909ba3b1bdb2a39a8474604b3c2b1900000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000009141d32404d5c6478869aa2b1becfdab6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c7186909090909090909090909090909090908f8f8d8c8986827d77706760544b3f322515070000000000000000081e33485d73889dababab9e89745e49341f090000000000000000000004182a3b4e64798ea2b4c8b39e8875606c8297acc1b19b86715d4b37230e000000000000000000000000000000000000000000000000000000000000000000000000000000081e33485d7388969696969689745e49341f0900000000000d22374c62778ca7b8b19c87725544311d080000000000000000000000000001142637596e8399aec4a58f7a65503a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d324556607484979fb2b6c3b6b2aaa5a2a0a1a4a9b0b5c1c0b3a79e8d7d675d4b37271500000000000000031628394b5d667c8c9da5b4bbb4ab9f9b97959496989ea6b1b5b7b2a0988575615645321e0e00000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000011422303e4a5a627684979fb5bcc9b6a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7a79787674716d686259514b43362e211507000000000000000000081e33485d7388969696969689745e49341f09000000000000000000000b1f3447596d8297adc0bbaa95806b5664798ea3b5b5a38f7a65503c2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a808181818181806b56402b1601000000000010263b50657b90a5c5ae99846e59372715010000000000000000000000000000162b40566b8095abbea8937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528384556607481909da5afb4bcc9bab7b6b7b9bec7bab4ada29a897d675f4d3f2e190900000000000000000a1b2e3f4c5e667b87979faab3b8b5b1acaaa9abadb3b8b5b0a69d9282766157463828150000000000000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000412202e3c4858617381949faba7a7a18c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c646565656565656565656565656565656565646361585b57524c473b3530261810020000000000000000000000152b40556a808181818181806b56402b1601000000000000000000021528384c61778a9fb4c9b49f8b78624d5c70859bb0c2ae99836e5a4835200a00000000000000000000000000000000000000000000000000000000000000000000000000000013283c50616a6c6c6c6c6c6b62513d281400000000000014293f54697e94a9beab96806b56412b1600000000000000000000000000000013283d53687d92a8bdac97826c57422d17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a28384556606c7b87919a9fabaaadaeb0b0aeadaaa99f988f8478675f4d413021110000000000000000000010202f404c5d6576828b969ea7a9acafb0b0b0aeaba7a39b92877d6e61584639291a0a0000000000000f24394f64798ea4adadad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000002101e2b3a4655606d7f8c929292928c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4b4f505050505050505050505050505050504f4f4e4c473a423d37342a201c14080000000000000000000000000013283c50616a6c6c6c6c6c6b62513d281400000000000000000000091d3245566a8095a9bac2ae98836e594852687d92a7b8b49f8b78624d3828160300000000000000000000000000000000000000000000000000000000000000000000000000000d2133435055565656565656514433210e000000000001172c41566c8196abbea8937e69533e291400000000000000000000000000000010253b50657a90a5baaf9a856f5a45301a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2838454b5e65737c848b909598999b9b9997948f8a827a6f625a4d4130231203000000000000000000000212222f3f4b58616d7881888f94979a9b9b9a9996928d867d74685f4c463a291b0b000000000000000f24394f64798e9898989897826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000e1c2937444b616a7a7d7d7d7d7d74604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a3a3837332a2d28221f180d080100000000000000000000000000000d2133435055565656565656514433210e000000000000000000000b20364b6075889db3c7b5a48f7a65503b4b6075899eb3bbaa96806b5645321e090000000000000000000000000000000000000000000000000000000000000000000000000000041525333c404141414141403d33261604000000000003182d43586d8298adbca7927c67523d27120000000000000000000000000000000f24394f64798ea4b9b29c87725d47321d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832404c5460666f767b808284858584827f7a756d645c4d483c302312050000000000000000000000000412212e3a464c5a626b747a7e828485868583817d78716760554e4133291b0b00000000000000000d23384d62788283838383837e68533e291300000000000000000000000000000000000000000000000000000000000000000000000000000c19273143505d656767676767605645321d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222426262626262626262626262626262625252423211f1718130d0b050000000000000000000000000000000000041525333c404141414141403d33261604000000000000000000081c2e3f52687d92a6b8c5b19c86715d4b3745566b8196abbcb39e8975604b36211100000000000000000000000000070d0f1415120b090300000000000000000000000000000000000e1e2b3539454b4d4b4538342b1d0d000000000000051a2f445a6f8499afbba6907b66513b26110000000000000000000000000000000d23384d62788da2b7b39e88735e49331e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2f36434b515761666a6d6f70706e6d6a6560564f4a3e352b1e1205000000000000000000000000000003101c29333c484d556064696d6f7071706e6c67625a524b4437311f170b0000000000000000000c2035495a626e6e6e6e6e6e68604e3b261100000000000000000000000000000000000000000000000000000000000000000000000000000009151d333f4b5052525252524b453828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f10101010101010101010101010101010100f0e0c0a0400000000000000000000000000000000000000000000000d1d2b3438454b4d4b4538342b1d0d000000000000000000000e23374b5d71869bb1c4b9a7937d68533f2e384e63788c9fb5b8a7937d68533f2e1c0800000000000000000000010f1a2124292b27211e160a0000000000000000000000000000000e1e2c3c484d57606260564c483b2b1d0d0000000000061b30455b70859ab0baa48f7a654f3a25100000000000000000000000000000000c21364c61768ba1b6b39e89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111826303539464c505558595b5b5958554f4b4538362d20190e0000000000000000000000000000000000000c171f2b3437444b4f54575a5b5b5b5956524d483c3631271913040000000000000000000006192c3c494d585858585858534e42311f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000215212e373a3d3d3d3d3d3632281a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3b484d56606260564d483b2b1c0c000000000000000006192c3c50657b8fa3b5c9b39e8975604b362135495b6f849aafc4b19c86715d4b37230e00000000000000000009151d2d36393f403d3632281b100200000000000000000000000006192c3c495a626e7677756d6259483b2b190500000000041a2f44596f8499aebaa48f7a654f3a25100000000000000000000000000000000c21374c61768ca1b6b29d88725d48331d080000000000000000000b0b0b0b0a000000000002090b0f13141514110e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202933363b404344464644423f3a363228221b10050000000000000000000000000000000000000000040d19202631353a3f424546464544413d38352b201d1509000000000000000000000000000e1e2c35384343434343433e3b31241402000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23252828282828201d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4859626e7677756e6259483a2a1804000000000000000c2035495a6e8399aec1bcab96816b5745321e2c3d51677c91a6b7b5a4907b65503c2b190600000000000000091927313d4a4e5455524b45392e21100000000000000000000000000c2035495a6278838a8d8a827762594834200c0000000003182d43586d8298adbca7917c675239291819100e0800000000000000060c0e191826364e63798ea3b8b09b86715b46311c06000000000000070d0f202020201f14120c080a161e212528292a29262320190e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b171e21262b2d2f30302f2d2a25201d150a070000000000000000000000000000000000000000000000000509141d2025292d2f3031302e2c282220190e08020000000000000000000000000000000e1920232e2e2e2e2e2e29261f14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1012121212120b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a6278838a8d8a8378625847331f0c000000000000031729394d62788c9fb4cab49f8c78634d39281620354b6074889db3c2ae99836e5a4935200b00000000000001152737444b5c64696a6760574b3f2e1d0d0000000000000000000004182a3a4d627888999fa99f988778624d3b2a18040000000014293f54697e94a9c2ac96816c5746362c2e25231c1103000000010f1a21232e2b344354687e93a8c6ad97826d58422d18030000000002101b2224353535353429271f1b222832363a3d3f3f3e3c38352c2320190e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1115181a1b1b191815100b09020000000000000000000000000000000000000000000000000000000001080b0f14181a1b1c1b1917120d0b0500000000000000000000000000000000000000060c0d19191919191913110b020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4d627888989fa99f988876614c3b2a180400000000000a1e3346576c8196abbcc3ae99846f5a49351b0a1d3144556b8095aabbb49f8c78624d392816030000000000081d314455606d797e807c75655d4b3b2b19050000000000000000000a1f3447596f8499a6b4bab4a699836e5947341f0b000000000f24394f64798ea4b6b39e89766154493d443b372f21110000000f1f2c3639433b484c6073869bb1b9a8927d67523d2812000000000010202d36394a4a4a4a493e3b322e3738454b4f52545453514d493c38352c1f170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3346586e8399a6b4bab4a698836e5947341f0b00000000011426364c6176899eb4c9b6a4907b66503c2c19011527374d62788b9fb4bcab96806b5746321e09000000000417293a4b6073828e949592887b65594834200b0000000000000000000c22374c61778b9fb5c5cdc4b49f8b77614c37220c000000000b20354b6073869cb1b8a7988272635b5a59504b3f2f1c0800061a2c3d494e585a59626c7f95a3b5b49e8976614c37210c00000000071b2d3e4a4f606060605f544f423f4b4f56606468696a6966635a564d493c33291c100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d121517191a1a1a191714110c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e101f1f1f1f1f1f16140e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b9fb4c4cdc4b49f8b77614c37220c00000000081c304354697e94a8b9c6b29c8773604a35200e00092034485a6e8399aec3b39e8975614b362111000000000a1f3347586a7f949fa9aaa69d8978624d37220d0000000000000000000f24394f64798eabbccfe2cfbcab8f79644f3a240f00000000081c304354687d92a2b4b2a098837972706e655d4b37230e000c2136495b636e6f717781959eafb6a496806b5847331f0a000000000d22364a5c70757575757469604f4c5d656e757a7d7e7f7e7b78726b635a4c463a2d201103000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f192023272a2c2e2f2f2f2e2c2a26211f170c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000003111c23253434343434342b2921160800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788eaabbcee2cfbcab8f79644f3a240f000000000b20354b6073879db2c6b9a8937e695443301c070005192b3c50667b90a5b6b9a7937e68533f2f1c080000000c21374c61768a9fb4bec4b7a796816c56412c170000000000000000000d22374d62778ca3b4c6d1c5b4a28c77624d37220d00000000011426364b6073849aa5b3b2a1998e8785837b65503b2510000e23394e63798385878c979fafb5a79c8676614c3a2a1704000000000f24394f647a8a8a8a8a897e6957616d7a83898f92949493918d8781786c61584a3e2f21110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007101b22242b35383c3f424344454443413f3b37332a211e160b040000000000000000000000000000000000000000000000000000000000000000000000000011212f383b494949494949413d34261604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61778b9fb5c6d1c6b4a28c77624d37220d000000071b2d3e51667c91a5b6c9b49e8a76614c3625130000000d20354a6073879db2c5b19c86715d4c38230e00000010263b50657b90a9bacdd4c5b19b86715c46311c0000000000000000000b2034485970859ba8b5c0b4a79a8570594834200b0000000000081d31445561778799a1b0b3afa59d9a9987725d48331d001a2f445a6f84989a9c9fabb1b1a39b8979635846331c0c00000000000f24394f64798e9f9fa89e89746275828f989fa8a7a9a9a8a6a59d968b8176645c4b3f2f1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001101b222d36393c484d51545759595a59595754504c473a3632291f170c0000000000000000000000000000000000000000000000000000000000000000000000081c2f3f4b505e5e5e5e5e5e56514434210e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475870859aa8b5c1b5a89a846f594834200b0000000d22364a5c70859aafc3c0ac97816c5846331808000000071c3043546a7f94a9bab6a4907b65503c2c1906000011263b51667c90abbccfd7c7b19c87715c47321c00000000000000000005182b3b4f647a8a9ba3a5a29b8979634e3b2b18050000000000011426374759617684919ba3a8acaeaf9e89745e49341f001b30455b70859aafaeaca8a49c928578635b4a3a29170000000000000f24394f64798ea4c6b9a78b76778698a0aeb4b2b1b2b4bbc3b7b2aa9f97877a655d4b3d2d1b0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2e373e4a4f565a62676a6c6e6f6f6f6e6c69666158534b4639332a1c13020000000000000000000000000000000000000000000000000000000000000000000e23384b5d657474747474746b62513d29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4e63798a9ba3a5a39b8a78624d3b2b1805000005182a3b4e64798ea2b4c8b4a28e79634e3a291700000000001325364c61778a9fb4c2ae99836e5a4935200b00000d22374c62778c9fb5c0c7baa997826d58422d18000000000000000000000d22364a5c647a868d908d8579635b4a361d0d0000000000000009192a3a475861727c868d9397999a9b89745e49341f001b30455b70859a9a9997938e877d74625a4a3d2d1b0b0000000000000f24394f64798ea4b9c5a48f7b869ca4acaa9f9d9c9d9faaacb4babbb4a59d8a7b655b4a39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091926313e4b4f5c646b72787c7f818384848483817f7b76706861574c473a311d1509000000000000000000000000000000000000000000000000000000000000000010253b50657b898989898989806b56412b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b647a858d908d857a645a49351d0d0000000b1f3447596d8298adc0c3af9a846f5b4a361b0b0000000000081f3447596d8398adc2b49f8c78624d39291603000b203448596c8196a2adaea99f8b79634e39230e00000000000000000000071b2d3e4a5c6471787a7870635b4a3d2d1a0000000000000000000c1c2a3a4754606671787d8283858684705a45301b00182d42576d81868584827e7972686055483c2d1f0f000000000000000f24394f64798ea4b9c8b39e889ca49f97908a8886888a8f969fa9b4c0b7a89e8a79635745321e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192737444b5c646f7980878d91949798999a99989694908b857e766c61584d41312719090000000000000000000000000000000000000000000000000000000000000011263b50667b909e9e9e9e96816c57412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a5c6471787a7870645c4a3c2b19000000021528384c62778b9fb4c1b7a5917c66513d2d1a00000000000004182a3a4f657a8fa4b5bcab96816b5746321e0a0005182b3b4b617584919899958a7d675b4a36210c000000000000000000000010202d3e4a4f5b6365625a4e4a3d2d1f0f000000000000000000000c1c2936434a515a63686c6e7071706655412d1800152a3f52636d71706e6d69635b524b44372b1e0f01000000000000000f24394f64798ea4b9cbb8a69ea29a8a827b75737173757a818b9aa2b4c0b9a89c8675604b3c2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374455606c7a848e969da5a6a9acaeaeafaeaeaca9ab9f9b93898176675f4b443727180800000000000000000000000000000000000000000000000000000000000011263b50667b90a5b3b3ac96816c57412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3e4a4e5b6365635a4e4a3e2d1e0e000000091d3245566a8095a9ababab9d8774604b35200f000000000000000c23374b5d71869cababab9e8976614b36210c00000d1e32465761737c82838078675f4d3d2d1a0700000000000000000000000210202d363d494e504d493c362d1f0f0100000000000000000000000c182530353c494d5357595a5b5a5548372512000f23354552575b5b5957534e4a3d363127190e0000000000000000000f24394f64798ea4b9d2c2b3a19984786c6560555c5460656c79849aa2b4c4b6a496806b5a4835200a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556073818f9aa2abb2b6b2ada9a7a5a5a5a6a8abafb4b0a89e96887d6d60554436261401000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f202d363c494d504d493c362d200f000000000b20364b6075889696969696917e685544311d0800000000000000081c2e3f52677d9096969696937e68533e2913000003162839465460676d6e6b625a4d41301f0f0000000000000000000000000002101b222c35383b38352c211a0f010000000000000000000000000008131c202c35383e424445464541372a1a0800061727353f42464544423e39362d201d1509000000000000000000000f24394f64798ea4b9c9b5a4998374625a504b4437434b4f5b6375849aa6b7c2b49f8b78624d3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4b607383969eafb4b3aea69d979491908f909193969a9faab2b4a69e928273605443301c0f000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212c35383b38352c211a0f01000000000e23384e63798181818181817c68604e3726140100000000000000001125394d5f677c81818181817e69533e29140000000b1b2836434b525859554d483c30231201000000000000000000000000000000070f1a2123252320190e070000000000000000000000000000000000070e192023282d2e3031302d251a0c0000000917232a2d31302f2d2923211a0f080200000000000000000000000f24394f64798ea4b9c6b19c86756056483c36312730353c49576176889db3c3baa996816c5645321d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b6b8096a1b0bbaea1998f88827f7c7b7a7b7b7d81858a939da5b2b3a0988272604b3d2c1a060000000000000000000000000000000000000000000000000000000011263b50667b90a5bbc1ac96816c57412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e192123252320190e070000000000000c2135495b636c6c6c6c6c6b675f4e423119090000000000000000000a1e30414d5e666b6c6c6c6c69604f3b2612000000000b182630353c43444038352b1e1205000000000000000000000000000000000000060c0e100d0c06000000000000000000000000000000000000000000060c0e1317191b1c1b1812080000000000060f15181c1b1918140e0c0700000000000000000000000000000f24394f64798ea4b9c2ad97826d5645382b201d151c202c394658677d92a5b7c7b39e8975604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63798c9fb5bdae9c93837a736d6a6766656566686b70767e8798a0b2b2a0957f6a5b4935210b0000000000000000000000000000000001080b0f12141514110d0c0611263b50667b90a5bbc1ac96816c57412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e100e0c060000000000000000061a2c3d494e565656565656524d413124140000000000000000000001132330404c515656565656534f42321f0c000000000008141c20272d2e2b2220190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d5838281a0e0802080e1b293a4a6073879db2c7b9a7917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162c41566b8196abbcb19f937e6f645c585452505050515356576168758298a2b3b49f8b79634e39291603000000000000000000000000000709151d202428292a292623201911263b50667b90a5bbc1ac96816c57412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c35384141414141413c393023140600000000000000000000000513222f383b41414141413e3b3224140200000000000001080b121819160d0b050000000000000000000000070d0f2020202020201816100600000000000000000000050b0d2020202020201b181208000000000000000000000000000002090b1013151615130f0b0801000000000000070b0b0b0b000000000000000f24394f64798ea4b9c2ad97826d58422d1800000000000b1c3043546b8096abc9c5ac97826c57392917030000000913191b202020202020202020202020202020202020202020202020202020202020202020201b1913090000001b31465b70869bb0c9ac97826d604f4b3e3f3c3b3a3b3c3e39464c576173849aafbbaa98826d5746321e0a0000000000000000000000030f1a212731353a3d3f3f3e3c38352c22263b50667b90a5bbc1ac96816c57412c1700000000040a0c1e20202020201c0d0b0500000000000000000000000000090f111e202020202020110f0900000000000000030a2020202020202020202020202020202020202020202020202020201f1c170d010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d131520202020200c0a0400000000000000000000000000000000000000000000000000010f1a21232c2c2c2c2c2c27251d12050000000000000000000000000004121d24262c2c2c2c2c29261f1406000000000000000000000000000000000000000000000000000002101b22243535353535352d2b23170900000000000000000d192022353535353535302d251a0c0000000000000000000000070a161e2126282a2b2b2824201d15090700050b0d1c2020202013110b010000000f24394f64798ea4b9c2ad97826d58422d180300000000001325364f647a8fabbcc7b29c87725746331e0a00000c1a262e3135353535353535353535353535353535353535353535353535353535353535353535312e261a0c00001e33485e73889db3b9a38e79644e42372e2a272625262628293339465563798ea7b8b49f8a76614b36210c000000000000000000000a161e2d3637444b4f52545453514d493c37343b50667b90a5bbc1ac96816c57412c170000000c181f22333535353535312220180d0000000000000000000004121c23263335353535353526231c1103000000000b161e35353535353535353535353535353535353535353535353535353534312a1f1101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520282a3535353535211f170b0000000000000000000000000000000000000000000000000000060c0e17171717171612100a0100000000000000000000000000000000090f11161717171714120c02000000000000000000070d0f1415120b090300000000000000000010202d36394a4a4a4a4a4a423f352717060000000000000d1d2b344a4a4a4a4a4a4a4541372a1a08000000000000000003101b222832363b3e4041403e3a353127211a0f192022313535353528251e130500000f24394f64798ea4b9c2ad97826d58422d180300000000000b21364b60768a9fb4cab59f8b76614b36210c00091a2b3842464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4642382b1a09001d32485d72879db2b5a08b76604b36211b15151718191b151d2029374a5b73889eb3baa9907b65503b26100000000000000000000d1b28323d4a4e55606467696a6966625a554c483b50667b90a5bbc1ac96816c57412c1700000c1c2a3337494a4a4a4a4a4637342b1d0d00000000000000000012222f383b484a4a4a4a4a4a3b382f22110000000b1b29324a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49463d2f1f0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525333c404a4a4a4a4a3633291b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a2124292b27211e160a00000000000000071b2d3e4a4f606060606060585245352310000000000005192b3b485e6060606060605a5548372512000000000000000a161e2d3638454b5053555655534f4b4437362d202b3538474a4a4a4a3d3a31231301000f24394f64798ea4b9c2ad97826d58422d18030000000000091e32455672879cb2c7bcab8f79644f3a240f0013263849555b606060606060606060606060606060606060606060606060606060606060606060605b554938261300192f44596e8399aec0a28d78624d3e2f27292b2c2d2f30273135383c495b73889db2c7a8937e68533e291300000000000000000d1d2b39454b5b636d75797d7e7f7e7b78726b62594b50667b90a5bbc1ac96816c57412c170004182a3a474c5e60606060605b4d483b2b1a0a000000000000000e1e2f404c505e606060606060504c402f1c090003162939465e60606060606060606060606060606060606060606060606060605e5a4d3d2a1703000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20334350555f5f5f5f5f5c463a291704000000000000000000000000000000000000000000000003090b1c20202020201f1b110f090000000000000000000000000000000000000000000000000000000000000000000009151d2d36393f403d3632281b100200000000000d22364a5c707575757575756d64523f2b1601000000000b2034485970757575757575706655412d180000000000000b1b28323e4a4f566065686a6b6a686460554e4a3e353c484d5c60606060524e41311e0b000f24394f64798ea4b9c2ad97826d58422d18030000000000031628385a6f8499afc4c9a6917c67513c271200192e4255677075757575757575757575757575757575757575757575757575757575757575757575706755422e190012273c51677c91a2b4a9947f6a5c4c3f3c3e404143444537444b4e525a63798c9fb5bea9947e69543f2914000000000000000c1c2b3b4857606c7982898f92949493918d878077696054667b90a5bbc1ac96816c57412c17000a1f334758617375757575757162594838271502000000000006192b3c4c5e6673757575757575665e4c38230f000a1e324657707575757575757575757575757575757575757575757575757575746b5a46311c0800000000070c0e190e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283c50616a75757575756e5846331f0a000000000000000000000000000000000000000000000a161e21313535353535343026241d120400000000000000000000000000000000000000000000000000000000000000091927313d4a4e5455524b45392e211000000000000f24394f64798a8a8a8a8a8a826d58422d1803000000000d22374d62788a8a8a8a8a8a84705a45301b00000000000b1b2939454b5c646e757b7d7f80807d79756d645c4d48485a627175757575685f4e3a2511000f24394f64798ea4b9c2ad97826d58422d1803000000000000192e43586e8398adc3bea8937e69533e2914001b31465b70858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a85705b46311b000b20354b6073849aa3b49e8a7a655d505153555758595a5c556063676e78869cabbcc3a8927d68533d28130000000000000417293a48596275818c979ea7a7a9a9a8a6a59d958a7f7362667b90a5bbc1ac96816c57412c17000c22374c6177888a8a8a8a8a8577625645311d1000000000000c2035495a667c888a8a8a8a8a8a7b66503b2611000c21364b61758a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89745e49341f090000010f1a21242e23211a0e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f8b8a8a8a8c76614c36210c0000000000000000000000000000000000000000000a1b283236474a4a4a4a4a49453c3830221406000000000000000000000000000000000000000000000000000000000001152737444b5c64696a6760574b3f2e1d0d000000000f24394f64798e9f9f9f9f97826d58422d1803000000000d22374d62778c9f9f9f9f9a85705a45301b000000000818293a4657606d7a83899093959695938f8982796e625a4d6278868a8a8a8a7d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000002182d42576d8297acc2bea9947f69543f2a14001b31465b70869b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b85705b46311b00081c304354617685979fa89e8a7b6d6567696a6c6d6e70717375787d838b9ca4b5c9b6a58e79644f39240f0000000000000a1f334758627786979fabb3b9c5beb9b7c3b6b2a99f948478667b90a5bbc1ac96816c57412c17000a1f334758667c91a09fab9f9b8574604b3e2e1a0a0000000c1c30414d62788a9da69f9fa697826d5e4c38230f000c21364b61768b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e89745e49341f0900000f1f2d36394338352c20190e0500000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a80959f9f9f8b76614c36210c000000000000000000000000000000000000000003162839454b5c60606060605f5b514c403224140100000000000000000000000000000000000000000000000000000000081d314455606d797e807c75655d4b3b2b19050000000f24394f64798ea4b5b5ad97826d58422d1803000000000d22374d62778ca2b5b5af9a85705a45301b0000000114263646586175818c989ea8a8aaabaaa8a79e978e8378675f6b80969fab9f927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000002172c41576c8196acc1bfaa957f6a55402a15001b31465b70869bb0b5b1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab1b5b09b86705b46311b000114263647586175818c989f9e8d827a7c7e808182848587898a8d92989faab5c2bcab9c8773604a35200b00000000000a1a30414c6176869ca4b4bcc4b7b2aaa4a1a0a1a3a8b0a29a88797b90a5bbc1ac96816c57412c170004182a3a4c5e6d8298a6b7b5a395806b5c4a382816020004172a3a4d5f6f8499a8b7bdb29d8776614c402f1c09000c21364b61768ba6b8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b39e89745e49341f0900071a2d3d4a4e584e493d352b1f180d040000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab4a18b76614c36210c0000000000000000000000000000000000000000091e324557607175757575757470665e4f4232200f0000000000000000000000000000000000000000000000000000000417293a4b6073828e949592887b65594834200b0000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000000081c304354617684979fabb4b9c6bcb4b3b2b3b3aca098897d696f8499aebca7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000003182d42586d8297adc2bea9947e69543f2914001b31465b70869bb0a49c94949494949494949494949494949494949494949494949494949ca4b09b86705b46311b000008182a3a4757606c7a828c9f9f978f9193959698999a9c9e9faba7adb4bbc3b7ab9f8d7c665443301c0700000000021527384d5f6f8399a4b5c2bdb1a69d958f8c8a8b8e939aa2a69d897f94aabfc1ac96816c57412c1700000c1c30404c6176889db2bdb49f8c7a645645321e11000a1f334758677d92a1b3c4b19f907b6657463322110000091e32465773889eb3c3d4ccbcafaaa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79e89745e49341f09000c21364a5b636e635b4d483c342a1f170c03000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c00000000000000000000000000000000000000000b21364b6076868a8a8a8a8a89857c69604f3e2d1a0a00000000000000000000000000000000000000000000000000000a1f3347586a7f949fa9aaa69d8978624d37220d0000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00000417293a4b6072849aa2b4bcc1b4b0ab9f9e9d9ea7a7afa79e8d7e71869cb1bda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000004192e43596e8398aec3bda8927d68533d2813001b31465b70869bb09c867f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f869cb09b86705b46311b0000000c1c2a39495a6378849aabb5ada5a6a8aaacadaeafb1b3b5bcc9c5b8b3aea59d8d7e695e4c3625130000000000091d314556677d92a1b3c2bdb19f9788807a777576797e85909da59e949dafc2c1ac96816c57412c17000000121f334658667c909fb1bbaa9c8674604b3f2e1b0b1a2e3f4c6176889eb3bfb7a697826d5e4c39291703000003162839566b8096a5b7c8c3af9d95929292929292929292929292929292929289745e49341f09000e24394e637983796d625a4c483b332a1e170b0200000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c0000000000000000000000000000000000000000091e3245576379899e9f9fa89e9a917e695c4a38281602000000000000000000000000000000000000000000000000000c21374c61768a9fb4bec4b7a796816c56412c170000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00000a1f334758697f94a2b4c0bcafa39b918b8988898c929aa2ab9f93808b9fb4bda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d180300000000000417293a5a6f859aafc4c9a6917c67513c2712001b31465b70869bae98836e6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6e8398ae9b86705b46311b000000031629394d6378889aa2b4c9c2babcc7bab4b3b2b0afaeadaaa8a5a79e9891877b69604f402f180800000000000b20364b6074879db2bfc2b19f9681766b646260616468707b8799a1aaafbbccc1ac96816c57412c170000000417293a4c5e6d8197a5b7b6a496806b5d4b39281628384b5d6d8297a6b8beb29d8776614c402f1b0b000000000c21364c6176879daabbbfaa957f7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d67523c271200000f24394e64798e8c82786c62594c473a33291e160a020000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c000000000000000000000000000000000000000003162839495b667c919eb0b9b4b09f8b7a645645321e110000000000000000000000000000000000000000000000000010263b50657b90a9bacdd4c5b19b86715c46311c0000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00000c21374c61768a9fb4c0beaf9e95857c76737273777d84909da59e959fa9babda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d180300000000000a1f33465873889db2c8bcab8f7a65503a2510001b31465b70869bae98836e5955555555555555555555555555555555555555555555596e8398ae9b86705b46311b0000000a1e3246576e8398a6b4c0bcb5aea8a3a99f9e9c9b9a99989592908d88837c73655d4f42322212000000000004182a3a52677d92a5b7cab6a496816c61574f4c4b4c4e535d65758398a0b2c0d1c1ac96816c57412c17000000000c1c2f404b6175879dabbcb49f8c7b655746321e324556657b8f9fb1c4b19f907c66584633221100000000000a1f334658647a8b9fb4bfb09b867567676767676767676767676767676767675f4d39251000000f24394e64798e9f978b81776b61584b463932281d150901000000000000000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c0000000000000000000000000000000000000000000a1b2c3c4d5e6b8096a2b4c4baa99c8674604b3f2f1c0c00000000000000000000000000000000000000000000000011263b51667c90abbccfd7c7b19c87715c47321c0000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000417293a54697e94a8bac9b2a09580706661575d5962676f7b8797a0aab4bac7bda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d180000000000000c21364c61768ba6b7cab59f8b76614c36210c001b31465b70869bae98836e59433f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f43596e8398ae9b86705b46311b0000000c21364b61768b9fb5c4baab9f99938e8b89888786858482807d7a78746e6760554b3f3224140400000000000a1f34475970859aafc3c5b19c8673604b4639373536393f4b5761738298a2b4c8c1ac96816c57412c170000000000121e334657657b8d9fb5bcab9d8775614b3f2f3d4b6074869cb1beb7a697826d5e4c3a29170400000000000417293a4b5c697f94a1b3b5a397816c5f5252525252525252525252525252524d41301d0a00000f24394e64798ea3a99f968a80766a61574b453831271c14080000000000000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c000000000000000000000000000000000000000000000e1e30404b6073849aa6b7c7b6a496816c5d4b3a29170400000000000000000000000000000000000000000000000d22374c62778c9fb5c0c7baa997826d58422d180000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000a1f33475871869cb1c6bcab98836e62514c463b474c525d657582959eb0bdcebda7927d68523d2813000f24394f64798ea4b9c2ad97826d5841311c130800000008182c3c51677c91a6c4c7b29c87725846331f0a001b31465b70869bae98836e59432e2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2e43596e8398ae9b86705b46311b0000000e24394e63798eabbcbaa99f8d847d797674737271706e6d6b6865626054514b44372f2114060000000000000c22374c61778b9fb4cab8a6917c6655443329222021242f3946556074849aafc5c1ac96816c57412c170000000000031729394b5d6c8196a5b6b6a597816c5d4c394a5b6b8095a4b6beb29d8876614c402f1b0b000000000000000b1b2e3e4f616e8399a5b7b19f917d675b49383d3d3d3d3d3d3d3d3d3d3d3c393023120100000f24394e64798eaabab4a89f96897f766960564b443730261c1308000000000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c0000000000000000000000000000000000000000000000121d3144556277889daabbc2b59f8d7b655846331f1300000000000000000000000000000000000000000000000b203448596c8196a2adaea99f8b79634e39230e0000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000c21374c61768b9fb5cab49f8c78624d4436332a34373f4b57616d80959fb1c5bda7927d68523d2813000f24394f64798ea4b9c3ae99846e604e41302518131213192536495b6e8398aec3c5ad98826d583a291704001b31465b70869bae98836e59432e1915151515151515151515151515151515192e43596e8398ae9b86705b46311b0000000f24394e64798ea8b9b49f8b7b6f686461585e5d5b5a59585553504d4a43363531261911030000000000000011273c51667c91aabbc8b39e8874604b3726170d0b0c111b29374455667b90a5bbc1ac96816c57412c170000000000000b1b2f3f4b6075879cabbcb59f8d7b6557465463798b9fb4c2b1a0907c665846332212000000000000000000102032434c6176879da9bab49e8a79635645322828282828282828282827251d12050000000c21374c61778b9fa8b4bab4a79e95887f756860554b433630251812080000000000000000000000000000030a0c0d0d0d0d0d0d0d0d152b40556a8095aab6a18b76614c36210d0d0d0d0d0d0d0d0d0b0801000000000000000000000000011527374859657b8c9fb4bfbcab9d8776614c41301d0d0000000000000000000000000000000000000000000005182b3b4b617584919899958a7d675b4a36210c0000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0011263b50667b90abbcc4af9a846f5a4835211e181f222e39464b626c8197acc1bda7927d68523d2813000f24394f64798ea4b9c7b3a1927d685f4a43362d2827282c35435463788b9fb4c9b8a7917c67523c271200001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b0000000b20364b6075899eb4ae99846e5d534e4c463a4746454443403d3b38353025201d1409000000000000000000152b40556a8095aac8c2ac97826d5544311909000000000b19273750667b90a5bbc1ac96816c57412c1700000000000000111e324557657b8c9fb4bcab9d8776614c6072859baabbb7a697826d5e4c3a29170400000000000000000002141f334658647a8b9fb4b9a89c8674604b41301f121212121212121212100a01000000000a1f334758687d8a969fa9b4b9b3a79e94887e746760544a43362f231c110700000000000000000000000b171e212222222222222222222b40556a8095aab6a18b76614c3622222222222222222222201d150900000000000000000000000009192a3b4b5d697f94a1b2c3b7a698826d5f4d3b2b1808000000000000000000000000000000000000000000000d1e32465761737c82838078675f4d3d2d1a070000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0014293e54697e93a9c9bfaa957f6a553c2b190a050b111b29324454697f94a9bebda7927d68523d2813000f24394f64798ea4b9d0bfb49f8c7d6960544a3e3d3c3d3c494d60728399a9bac6b39e8975604b36200b00001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000091d3145566b8096a4b09b85705e5256595a5a595755504b4538362d201c130b080100000000000000000004192f44596e8499aec3bda7927d685237261400000000000011263b50667b90a5bbc1ac96816c57412c1700000000000000031628394b5d6b8096a4b6b7a597826d5e687e93a2b4beb29d8876614c402f1b0b00000000000000000000000417293a4a5c697e93a0b2b5a497816c5f4d3d2c1b0a000000000000000000000000000004172a3a4e5f6877818a969fa9b4b8b3a69d93877d736760544c40372e221b100700000000000000000b1b2933363737373737373737373740556a8095aab6a18b76614c373737373737373737373735312719090000000000000000000000000d1d2e3f4f616e8399a4b6c4b2a0927d6759483625130000000000000000000000000000000000000000000003162839465460676d6e6b625a4d41301f0f000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00152b40556a8095aabfbca7927c67523d2712000000000b162a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9d6c5b9aa9f8d7f72645c56535153555a636f8197a1b3c7b9a896816c5645321d0900001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000021527384b6175869ca4a3917c6a686b6e6f706e6d6a6560564f4a3e33291c0f0100000000000000000000011426365d72879db2c7b9a48f7a644f3a240f00000000000011263b50667b90a5bbc1ac96816c57412c1700000000000000000a1b2e3f4b6074869caabbb19f907c6677899eb3c0b1a0907c665846332212000000000000000000000000000c1c2d3e4f606e8398a5b6b19f927d675b493928160300000000000000000000000000000c1c31414e59626b77818a969fa9b4b7b2a59d92867c72665e504b3f362d211a0f06000000000003172939464c4d4d4d4d4d4d4d4d4d4d4d556a8095aab6a18b76614d4d4d4d4d4d4d4d4d4d4d4d4b4437271501000000000000000000000000112132434c6176869ca8babeb39e8978625443301c0f000000000000000000000000000000000000000000000b1b2836434b525859554d483c30231201000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172c41566c8196abc1bba6907b66513b26110000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9ccb9a79ea79f948479716b6867686a707884979fb1bfc0b49e8a78624d3828150200001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000000a1e32465762788698a09f8b7f7d8183848583827f7a756d645c4c473a2d1f0f01000000000000000000081c30435474899eb4c9c6a18c76614c37210c00000000000011263b50667b90a5bbc1ac96816c57412c17000000000000000000101e324556647a8c9fb4beb29d87758399a7b9b7a697826d5e4c3a2917040000000000000000000000000000102032424c6176879ca9bab49e8a79635745321e130100000000000000000000000000001323313b474c59626c77818a969fa9b4b6b2a49c91857b70655d4f4a3e362d20190e000000000a1e334657616262626262626262626262626a8095aab6a18b7662626262626262626262626262605544311d0800000000000000000000000003151e33465763798a9fb4bdb9a79a8472604a3d2d1a0a000000000000000000000000000000000000000000000b182630353c43444038352b1e120500000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c9b39e89949da29a8e86817d7c7d7f858c9aa2b1bdc2b4a2937e695948341a0a0000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b0000000003162939485a62768298a89f949296989a9a9997948f8a827a6d61584a3d2d1f0f0000000000000000000b20354b60758a9fb5cabaa88a75604b35200b00000000000011263b50667b90a5bbc1ac96816c57412c17000000000000000000021628384a5c6b8095a4b5b6a5978297a1b2beb29d8876614c402f1c0c00000000000000000000000000000002141f334658647a8b9fb4b9a89c8675604b41311f0f000000000000000000000000000005131d2a343b484c59626c77818a979fa9b4b6b1a39b90857a6f645c4e4a3d352c1e0e0000000c21364c6176777777777777777777777777788096abb8a38e797777777777777777777777777873604b35200b00000000000000000000000000031729394a5b677d929fb1c1b4a2937e695b4a382715020000000000000000000000000000000000000000000008141c20272d2e2b2220190e000000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97827f939faba39b96929192959a9fabb3c0c0b3a49a8473604b3b2b19000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000000001325364455606d7d899eb3a9a7abaeafafaeacaaa99f988e8276635b4a3d2c190900000000000000000c21364c61768babbcc9b49f89745443301c0800000000000011263b50667b90a5bbc1ac96816c57412c17000000000000000000000a1a2d3e4b6074869caabbb19f979fb1bfb2a0907c66584633221200000000000000000000000000000000000417293a4a5c687e93a0b2b5a497826d604e3d2d1b0b0000000000000000000000000000000d181f2a343b484c59626c78818b979faab4b5b0a29a8f847a6e635b4d493c2c1a0a0000162b40566b808c8c8c8c8c8c8c8c8c8c8c8c8c969eb0bca8978e8c8c8c8c8c8c8c8c8c8c8c8c8c79634e39240e00000000000000000000000000000b1b2d3d4d5f6c8197a3b5c0b49f8b79635645311d11000000000000000000000000000000000000000000000001080b121819160d0b0500000000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d7e8d9ca4b1aba8a6a8aab0b4bcc4b8b3a29a8676615544311d0d000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000000071c304354607381929ea8b9b4aba69e9b9a9c9fa9aeb4ada0988879635b4937271502000000000000000d22374d62778ca2b7c8b39e88735e4926140100000000000011263b50667b90a5bbc1ac96816c57412c170000000000000000000000101d31455664798b9fb4bdb1acb1bdb7a698826d5e4c3a2917040000000000000000000000000000000000000b1b2d3e4e606e8298a4b6b1a0927d685b4a39291603000000000000000000000000000000050d181f2b343b484d59626c78818b979faab4b4b0a19a8e83796d635a493827150200162b40566b8095a2a2a2a2a2a2a2a2a2a2a2a2abb0bcc6b5a8a3a2a2a2a2a2a2a2a2a2a2a2a28e79634e39240e0000000000000000000000000000000f1f30414b6074859ba7b8baa99b8574604b3f2e1b0b000000000000000000000000000000000000000000000000000003040000000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d697a86959ea8aeb2b7c4c4b7b2aea69d93847661584737261400000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000005192b3b4a607282979fb3b7a89f968d888685878a9099a1b4b2a69d8879635544311d0a000000000000000d22374d62778ca2c7c9b49e89745443301c0700000000000011263b50667b90a5bbc1ac96816c57412c170000000000000000000000021527384a5c6a7f95abbcc5c1c5c8b39d8876614c402f1c0c0000000000000000000000000000000000000000102031424b6175869ca9bab49f8a79635746321e140100000000000000000000000000000000050d18202b343b484d5a626c78828b979ea8b4b3afa1998c8278635645311d0900162b40566b8095abb6b6b6b6b6b6b6b6b6b6b6c0c4cdd2c5bbb7b6b6b6b6b6b6b6b6b6b6b6a38e79634e39240e00000000000000000000000000000001131d3145566278899eabbcb5a395806b5d4b392917030000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d5c6474808993999da6a1a1a69d9892887e726158473a2a190900000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b0000000b20344859697f94a0b1b7a59d8a807873717071757b84929fabb7a69c8674604b382816030000000000000c21364c61768ba9bacab59f8a75604a35200b00000000000011263b50667b90a5bbc1ac96816c57412c170000000000000000000000000a1c30435463788b9fb5cac9c9bda8937d685847331d1200000000000000000000000000000000000000000002141e334657647a8b9fb4baa99c8675614b4231200f000000000000000000000000000000000000050d18202b343c484d5a626d78818a959fa9bab3ab9f988b75604b36200b00162b40566b8095a1a1a1a1a1a1a1a1a1a1a1a1abb0bcc5b4a8a2a1a1a1a1a1a1a1a1a1a1a1a18e79634e39240e000000000000000000000000000001080b152738485a667c8d9fb4bfb49f8c7b655746331e120000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d5856606a767d84888b8c8c8b88837d75686054473a2a1c0c0000000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b0000000d22374d62788a9fb4baa99d87796b635b5c5b5660656f7e8d9fb4b6a4947f6a5645321e090000000000000a1f33465874899fb4c9bcab8b76614c36210c00000000000011263b50667b90a5bbc1ac96816c57412c17000000000000000000000009192d3d4b6073849aabbcb9b3b4bab19b8674604b3f2e1b0b000000000000000000000000000000000000000000031729394a5c687e93a0b2b6a498826d604e3e2d1b0b00000000000000000000000000000000000000050d19202b353c484d5a626c76808a9fb4c9bcb4aa8b76604b36210b00162b40566b808c8c8c8c8c8c8c8c8c8c8c8c8c969eb0bba8968d8c8c8c8c8c8c8c8c8c8c8c8c8c79634e39240e0000000000000000000000000809141d2024282b3c4c5e6a8095a1b3bcab9d8775614b40301d0c00000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58454b5861686e7376777776736e6760564a43362a1c0c000000000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000005192b3c566b8196a9bab49f8a79635b4e493d38454b50606a7f95a6b7b39e8975604b36210b0000000000000417293a5d72879cb2c7c9a48f79644f3a240f00000000000011263b50667b90a5bbc1ac96816c57412c1700000000000000000000021527374a5b697f94a2b4b9a79e9fa9b5a396806b5d4b3a2917040000000000000000000000000000000000000000000b1b2d3d4e606d8298a4b6b2a0937e685c4a3929170300000000000000000000000000000000030b161e293339464c58616a767f87959fa9bab5b0a29a8b75604b36200b000b21364b6075777777777777777777777777778096abb7a28d787777777777777777777777777775604b35200b0000000000000000000007111c232631353a3d3f40404b60728399a5b7b7a597826d5e4d3b2a1804000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58423a464c535956606262605659524b45383025180c00000000000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000b2034485a73889db2c7ab96816b5b4a3d352c273136424b6075889db3b8a7917c66513c271100000000000000192e44596e8399aec3bda8927d685337271502000000000011263b50667b90a5bbc1ac96816c57412c17000000000000000000000b1d31445563798b9fb4c0b39e898b9fb4b49f8c7b655846331f13000000000000000000000000000000000000000000000f1f31424b6175869ca9bab49f8b7a645746331e140200000000000000000000000000030b161e293239464b57616a768089949da6b4b5b1a39b90847b645645321d0900091e324557606161616161616161616161616a8095aab6a18b7661616161616161616161616161605544311d08000000000000000002101b222e3737444b4f5254555453546176879da9bab1a0917c665947341f12000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22384d62778da2b7c4af9a856f5a45301a00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422933363e38454b4c4c4b45383d3632281c13080000000000000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000d22384d62778da6b7c6a48f7a644f3d2d211a151d203245566d8297acc5ab96816b56412c1601000000000000152a3f556a7f94aac3c1ac97826c5544311d09000000000011263b50667b90a5bbc1ac96816c57412c170000000000000000000b1b2e3e4b6074859ba9bab4a2937d8298aabbab9d8776614c41301d0d00000000000000000000000000000000000000000001141e32465763798a9fb4baa99c8776614c423220100000000000000000000000030a161e283239464b57616a767f89959ea7b2b6b2a49c91857b70645d4b382815020003162839454b4c4c4c4c4c4c4c4c4c4c4c556a8095aab6a18b76614c4c4c4c4c4c4c4c4c4c4c4c4b4437261401000000000000000614202d363f4b5055606467696b69686560647a8b9fb4beb39e8977614c40301b0a00000000000000000000000000000000000000070d0f1415120b090300000000000000000f24394f64798ea4b9c2ad97826d58422d1801000000000e23394e63788ea3b8c3ae99846e59442f1900172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1f2128283236373736322827201d150a00000000000000000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000010253b50657a90a5c4baa88b75604b36200f06020916283853687e93a8bdae99846e59442f19040000000000000f253a4f647a8fa5b7c8b39e8875604b372715040000000011263b50667b90a5bbc1ac96816c57412c170000000000000000031628394b5c6b8095a3b5baa89a846f798b9fb4b7a598826d5f4d3c2b1808000000000000000000000000000000000000000000031629394a5b687d92a0b1b6a598826e604f3e2d1c0c0000000000000000000a161e283239464b57616a767f89959ea7b3b7b2a59c92867c70655d4f4b3f2e1a0a0000000a1b2832363737373737373737373740556a8095aab6a18b76614c3737373737373737373737353126190900000000000000081624313e4a4f5d656e747a7d7e807f7d7a7670697e93a1b3b8a799836e5e4c3928160300000000000000000000000000000000010f1a2124292b27211e160a000000000000000f24394f64798ea4b9c2ad97826d583d2e1d140900000010253a50657a8fa5bac2ad97826d58422d1800172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d180c13161e212222211e16120b09020000000000000000000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000011273c51667c91a6bbb49f89745645311d0900000012273d52677c92a7bcaf9a85705a45301b050000000000000b20354b6074879db2c8b8a7917c665544311f170f0d0e101a283750667b90a5bbc1ac96816c57412c1700000000000000000c1e324657647a8c9fb4c1b49f8a78636b8095a4b5b2a0927d675a48362614010000000000000000000000000004060606060606000b1b2d3d4e606d8297a4b6b2a0937e695c4a3a29170400000000000004121a283239454b57616a757f89949ea7b3b8b3a59d92877d73665e504c3f372e201000000000000a161e212222222222222222222b40556a8095aab6a18b76614c3622222222222222222222201d14090000000000000005162633424e5c64707b83898f92949594928f8a857d758499a6b7b2a1917c665745321e0c00000000000000000000000000000009151d2d36393f403d3632281b100200000000000f24394f64798ea4b9c2ad97826d5b4b3e3126191312131b2d3d54697e93a9bec0ab96806b56412b1600172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d18030003090b0d0d0b0903000000000000000000000000000000001b31465b70869bae98836e59432e1909090909090909090909090909090909192e43596e8398ae9b86705b46311b000011263b51667b90a6c7b59f8a75604b35200e04000715273853687e93a8bdaf99846f5a442f1a0c030000000000081c3043546a7f94aabbc5b19c8674604b423329242224262e384555667b90a5bbc1ac96816c57412c17000000000000000c1c2f404b6175879caabbb5a3947f695a6074869caabbb39e8978625443301c0f00000000000000000000000812191b1c1c1c1c1c1c1c1c1f31424b6075869ca8b9b49f8b7a645846331f1402000000000012222f38454b576069757f88949ea7b3b8b3a69e93877d746760544c40382f221b100200000000000003090b0c0c0c0c0c0c0c0c152b40556a8095aab6a18b76614c36210c0c0c0c0c0c0c0c0c0b08010000000000000001132333445060687a8590999ea7a7a9aaa9a8aa9f9a92887e889db2bfb29d8775604b3a29170400000000000000000000000000091927313d4a4e5455524b45392e211000000000000f24394f64798ea4b9c8b39d8879645c4b44372f2927282d394a5c6f849aafc4c2a7917c67523c271200172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000001b31465b70869bae98836e59432e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e2e43596e8398ae9b86705b46311b00000f24394e64798ea9babcab8e79644e3c2b1f18131c203145566c8197acc8ac97826d5742292720140700000000011426364c62778b9fb4c4b6a4957f6a604c473a3a38393b3e4b5660738499afc4c1ac96816c57412c1700000000000004172a3a4c5e6c8197a5b6bbaa9b8573604b5664798b9fb4b9a79a8473604b3d2d1a0a0000000000000000000c1a252d303131313131313131313132455763798a9eb4baa99d8776614c43322010000000000b1b2f404c566069757f88949ea7b3b8b4a79e94887e746860554b433630231c110800000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c0000000000000000000000000000000000000f1f314250626b7e8b9aa2aeb3b9c5b8b3b1afb0b2b0a69e94899eb3c9b7a5947f6a5847331f0800000000000000000000000001152737444b5c64696a6760574b3f2e1d0d000000000f24394f64798ea4b9cbb7a69d897a6a60554c403e3c3d3d4a5764798d9fb5cab6a48d78624d38220d00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000001b31465b70869bae98836e5943343434343434343434343434343434343434343443596e8398ae9b86705b46311b00000b20364b60758a9fb4c9aa95806b5a483b332a253035414b6074879db2bbaa927d685346393b3225140000000000081f3448596c8197a6b7c2af9d937e6d6158524f4d4e50555c64748298a1b3c7c1ac96816c57412c170000000000000d1f334758667c909fb1c2b49f8b796355444a5c6a7f95a3b5b4a2947f695c4a3828160200000000000000081a2a384245464646464646464646464639495b677d929fb1b6a599836e614f3e2e1a0a00000417293a4c5e66757e88949ea6b3b8b4a89e95897f756960564b44373026181208000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c0000000000000000000000000000000000071a2d3d4e606b80939fa9b4c0b9b3aaa79e9b9a9b9c9fa9afa79ea7b9ccc3b39e8976614c362614010000000000000000000000081d314455606d797e807c75655d4b3b2b19050000000f24394f64798ea4b9d5c4b7a79e8b7f73655e57535152545b6375859babbcc4b19c86715a4835200b00172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000001b31465b70869bae98836e5949494949494949494949494949494949494949494949596e8398ae9b86705b46311b0000091d3245566e8399aebeb39e897862594c473a36434a4f5f697f94a5b7b49f8a77646157544f43321c0c0000000005182a3b4c6176889db2bcbbb59f8d82766d67646263656a717a8598a0b3b9c5c1ac96816c57412c1700000000000d1d30414c6176889db2bdb5a495806a5b4a373d4b6073859ba9bab49f8b7a645645321e110000000000000012253848555b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5f6d8297a4b5b3a1947e695c4b38271502000a1f334658667c88949da6b3b8b4a99f968a80766a61574b453831271c14080000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c00000000000000000000000000000000000c21364a5b687e929eb4babfb3a79e958e89868585878a9199a1b2b7c4d2ccb9a8947f6a5443301c08000000000000000000000417293a4b6073828e949592887b65594834200b0000000f24394f64798ea4b9cbb8a69ea69f94857b726c6867686a6f79859ba3b5c9b8a6937e69533c2b190500172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000001b31465b70869bae98836e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e6e8398ae9b86705b46311b00000215283850657b8fa0b2b9a89c86776961585b5a5460646d7d8c9fb4c3b29d877d79767369614f3a291704000000000d1f334658667c919eafbcbcab9f9789827c7977797b7f868f9ba39f9ea7b9c1ac96816c57412c170000000008182b3b4d5f6e8298a6b7bcab9c8674604b3d2d31445563798b9fb4baa99c8674604b402f1c0c000000000004192d425566707171717171717171717171717171717175869cb1bfb49f8b7a645645311d09000c21364c61768a9da6b3b8b4aa9f978b81776b61584b463932281d150901000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c00000000000000000000000000000000081c2e3f4e63798b9fb4bcbeb2a19989807974716f7072767c84909da6b5c2d2c6b29d8774604b35200b000000000000000000000a1f3347586a7f949fa9aaa69d8978624d37220d0000000f24394f64798ea4b9c5b39e889ba3a39b9087817e7c7d7f848c9ba3b5c1bcb39e8876614c36210e0000172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000001b31465b70869bae988373737373737373737373737373737373737373737373737373738398ae9b86705b46311b0000000a23374b5d6d8298a5b6b5a49c887f7772706f70747982919faabbcbb7a69d918e8b887f695847331f0a000000000417293a4c5e6b80959eb4b9bcb5a79e98918f8d8e90949ba3aa9f8b899eb3c1ac96816c57412c17000000001325364859677d92a0b2c3b49f8c7a645645311f27374a5b6a7f94a3b4b5a496816c5e4c3a2a170400000000061b30455b70848686868686868686868686868686868685879db2c7bbaa9c8774604b36200b000f24394e64798ea9b7b2ab9f988b81786c61594c463a32281d150a010000000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c000000000000000000000000000000000e23374b5d6f8399aabbc2b2a09883766b6360545a5b5761666f7b879ba3b5c5cbb7a58f7a65503a2510000000000000000000000c21374c61768a9fb4bec4b7a796816c56412c170000000f24394f64798ea4b9b8a78d78859aa2b0a59d97939192949a9faab5c1bcaf9e917c665746331e0a0000172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000001b31465b70869bb09f8b88898989898989898989898989898989898989898989898989888b9fb09b86705b46311b000000081c2e3f4c6177879da5b3b5a69e948c87858486898e98a0b4bbc8bac4b7b2a7a4a69d8c76614c37210c00000000000b1b304050626b80929ea8b4bbb9b3ada7a4a2a3a5aab1a89e8c7c8298adc9ac96816c57412c17000000071c3043546277899eb3beb6a596816c5c4b382715192d3d4b6073859ba9bab59f8d7b655847331f13000000000a1f34495f74899b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9da5b7cac8b6a4927d68523d2813000f24394e64798ea3afa1998c82786c62594c473a33291e160b0200000000000000000000000000000000000000000000000000000000152b40556a8095aab6a18b76614c36210c000000000000000000000000000000011527374f657a8fa1b3c8b5a498827261584e4a433639464b515d6577859ba7b8ccc3ac96816c573929170300000000000000000010263b50657b90a9bacdd4c5b19b86715c46311c0000000f24394f64798ea4b9b39e88737584959faab2aca8a6a7a9afb4bbc2b5b19e95806b5e4c392917030000172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000001b31465b70869bb0a99f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9fa9b09b86705b46311b00000000111f34475962788799a1b0b5b3a9a59c9a9a9b9ea7adb2b4aca5a4a4a4a4a4a4a4a28c77624d37220d0000000000001222334450626b7d8a989faab0b4bac7c9bcb5b2aca199897d697f94ababab96816c57412c170000061a2c3d4a6072849aa7b8bdb29d8775604b3e2e1a0a0f1d31445563798b9fb4bcab9d8876614c413118080000000a1f34495f74899eb0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b2b7c3c1c1c3ab96816b56412c16000f24394e64798ea19a8e83796d635a4d483b342a1f170c03000000000000000000000000000000000000000000000000000000000000152b40556a8095aab2a18b76614c36210c000000000000000000000000000000081d3144556e8398adbfc4b19c86756054473a3530252932363f4b596278899eb3c3c6b19c86715746331e0a00000000000000000011263b51667c90abbccfd7c7b19c87715c47321c0000000f24394f64798ea4abab9b85706173808b999fabafb3b8c5bab4b2aca49c90806b625140301b0b000000172d42576c8297acc1baa5907b65503b26100000000000142a3f54697f94a9bebda7927d68523d2813000f24394f64798ea4adadad97826d58422d1803000000000000000000000000000000000000000000000000001b31465b70859babababababababababababababababababababababababababababababababab9b86705b46311b0000000004182a3b485a627783919ba3aaafb3b2b0afb0b3b2aea99f978f8f8f8f8f8f8f8f8f8c78624d37220d0000000000000416263344505f6778828b949b9fa9a3a4ab9f9c968e837767647a8d96969696816c57412c1700000c2135495b697e93a2ababab9f907b6557453220100001142637495b697f94a2ababa698836e5f4e3626140100000a1f34495f74899eababababababababababababababababababababababab96816c57412c17000f24394e64798e8f847a6e635b4d493c342b1f180c040000000000000000000000000000000000000000000000000000000000000000152b40556a80959d9d9d8b76614c36210c0000000000000000000000000000000b20354b6074899eb4c9b7a6917c6756453629201c13161e212e3b485a687d92a5b7cab59f8b76614c36210c0000000000000000000d22374c62778c9fb5c0c7baa997826d58422d180000000f24394f64798e96969694806b55606a79838b949a9ea7a2a99f9d9790867b6b62514434221200000000172d42576c8297abababa5907b65503b26100000000000142a3f54697f94a9ababa7927d68523d2813000f24394f64798e9898989897826d58422d1803000000000000000000000000000000000000000000000000001b31465b70859696969696969696969696969696969696969696969696969696969696969696969685705b46311b00000000000c1d2b3c4859626f7c858f959a9ea8a1a2ab9f9d99928a817a7a7a7a7a7a7a7a7a7a74604b36200b0000000000000008162633414d59626d787f85898d8e8e8d8b87817a6e62595c667c818181817d67513c271200000e23384e637889969696969693816c5d4b39281602000009192c3d4b6072849596969696927d685443301c0800000a1f34495f748a96969696969696969696969696969696969696969696969696816c57412c17000f24394e647a857a6f645c4e4a3d352c20190d040000000000000000000000000000000000000000000000000000000000000000000014293e54697e878888888776614c36210c0000000000000000000000000000000f24394f64798ea8b9c8b39d8874604b3828180c0700030a111d2b3c4b6074879db2c7bcab8f79644f3a240f0000000000000000000b203448596c8196a2adaea99f8b79634e39230e0000000d22384d6278818181817e74604b4b5b636e787f85898b8c8b8a87817b73655d50443426160400000000172d42576c819696969696907b65503b26100000000000142a3f54697f9496969696927d68523d2813000d23384d62788283838383837e68533e2913000000000000000000000000000000000000000000000000000014293e54697e818181818181818181818181818181818181818181818181818181818181818181817e69543e29140000000000000e1e2b3b484c5f67707a8084898b8c8d8c8a87837d776c65656565656565656565605645311d090000000000000000081623303b484d5a626a70757779797876726c645c4d484c5e666b6c6c6c675f4d392410000012283d52677d8181818181817e73604b3f2f1b0a000000000f1c30435461767f81818181818073604b35200b000001162b41566b80818181818181818181818181818181818181818181818181817d67513c2712000b20354b607370655d4f4a3e362d20190e0500000000000000000000000000000000000000000000000000000000000000000000000012273b4f61697272727272615746331e0a00000000000000000000000000000012283d52677d92a7c6c3ad98836e5443301a0a0000000000000e1d3144556c8196acc1c9a6917c67513c271200000000000000000005182b3b4b617584919899958a7d675b4a36210c0000000b2034485a626c6c6c6c696056453d494e5a62696f7376777674726c6660554b3f33261608000000000012273c51677d81818181818179634e38230e000000000010253b50657b81818181818179644f3a240f000c2035495a626e6e6e6e6e6e68604e3b2611000000000000000000000000000000000000000000000000000012273b4f61696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69614f3b2712000000000000000e1d2b34414d525c646a6f747577787775726e686158504f4f4f4f4f4f4f4f4f4b453827150200000000000000000005131d2b343c484d555460626364636057574f4a3e34404c5156565656514d40301d0a000010253a4d5f676c6c6c6c6c6c696055443121110000000000011426364758616a6c6c6c6c6c6a605443301c0800000014293d51626b6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c675f4d39241000081d3144556055504b3f362d211a0f0600000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f545d5d5d5d5d4c4639291703000000000000000000000000000000152a3f546a7f94a9bfbfa9947f6a54362614000000000000000115273751667c91a6bbbda8927d68533d2813000000000000000000000d1e32465761737c82838078675f4d3d2d1a0700000005192b3c484d56565656544b45382c353c494d545a57616261585d57504b44372f2115070000000000001024394d5f676c6c6c6c6c6c635b4935210c00000000000e23374b5d656c6c6c6c6c6c645c4a36220d0006192c3c494d585858585858534e42311f0b00000000000000000000000000000000000000000000000000000c1f32424f5456565656565656565656565656565656565656565656565656565656565656565656544f42321f0c00000000000000000d182030393e4a4f555a5660626362605659534c473a3a3a3a3a3a3a3a3a3a3631271a0a0000000000000000000000000d19202b343836434b4d4e4f4e4b453939362d202f383b414141413c393022120000000a1e30414d52565656565656544b44372715030000000000000818293a474c555656565656554b43362614010000000e213444515656565656565656565656565656565656565656565656565656514d40301d0a0001142637444b4437372e221b100700000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e48484848483633291b0b00000000000000000000000000000000162b40556b8095aac0bda8927d68533d281300000000000000000f243a4f64798fa4b9bea8937e69533e29140000000000000000000003162839465460676d6e6b625a4d41301f0f00000000000d1d2b3438414141413f3632281a212b35383f39464b4d4c463a423b353126191103000000000000000a1d30414d515656565656564e493d2c1a060000000000081c2e3f4b505656565656564f4a3e2e1b0700000e1e2c35384343434343433e3b312414020000000000000000000000000000000000000000000000000000021424323b3e414141414141414141414141414141414141414141414141414141414141414141413e3b3224140200000000000000000005131d252d363a4038454b4c4d4c4b45383d37332a252525252525252525201d150a0000000000000000000000000000050d1920222630353839393836322824221b121d24262c2c2c2c27241d1204000000011323303a3d4141414141413e353127190900000000000000000c1c29333740414141414140353026180800000000041626343d41414141414141414141414141414141414141414141414141413c3930221200000009192631353126231c11070000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f27293333333333211e170b0000000000000000000000000000000000152b40556a8095aabfbca7917c67523c271200000000000000000e23394e63788ea3b8bda8927d68533d281300000000000000000000000b1b2836434b525859554d483c302312010000000000000d1920222c2c2c2c29211e160a0e1920232a293236373633292d26201d140900000000000000000001122330393c41414141414138352c1f0e0000000000000011212e373b4141414141413a362e2010000000000e1920232e2e2e2e2e2e29261f14060000000000000000000000000000000000000000000000000000000006141f27292c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c29271f14060000000000000000000000010a101b22242b28323637383736322828221f181010101010101010100b09020000000000000000000000000000000000050b0d141c2022242423211e160f0d0700090f111617171712100a00000000000005131e25282c2c2c2c2c2c29201d1509000000000000000000000c171f212a2c2c2c2c2c2b201c1408000000000000081621292b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c27241d12040000000009141d201d14090800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c12141d1d1d1d1d0c0a0300000000000000000000000000000000000014293f54697e94a9bebda8937e68533e2913000000000000000010253a50657a8fa5bac8a6917c67513c27120000000000000000000000000b182630353c43444038352b1e12050000000000000000050b0d17171717140b09020000060b0d14161e2122211f1717110b0801000000000000000000000005121d24272c2c2c2c2c2c23211a0e000000000000000003111c23252c2c2c2c2c2c24221b10020000000000060c0d19191919191913110b02000000000000000000000000000000000000000000000000000000000000020c12141717171717171717171717171717171717171717171717171717171717171717171714120c02000000000000000000000000000000070d0f15151d20222322201d15130c0a04000000000000000000000000000000000000000000000000000000000000000001080b0d0e0f0e0b0903000000000000000101010100000000000000000000010a1012171717171717140b0801000000000000000000000000040a0c151717171717150b08010000000000000000040e14161717171717171717171717171717171717171717171717171712100a0000000000000001080b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6c3c0ab95806b563c2b19050000000000000215283852677c92a7bcbbaa8e7a644f39240f0000000000000000000000000008141c20272d2e2b2220190e000000000000000000000000000101010100000000000000000000030a0c0d0c0a040000000000000000000000000000000000010a10121717171717170e0c060000000000000000000000080e101717171717170f0d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0d0e0d0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131a1c20202020202020202020202020202020202020202020202020202020202012100a010000000000000d23384d62788da5b7c5b09b85705a483520110100000000000d1d3245566d8297acc2b49f8a75604b36210b000000000000000000000000000001080b121819160d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b272e3135353535353535353535353535353535353535353535353535353535353527251e130500000000000c2035495a72879db2c7b49f8c78624d402f1d150b07050b111d2c3c4b6075889db3c7b09b86705745321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0f0f0c0a040000000000000000000000000000000000000000000000000000000000050b0d0e0c0600000000000000000000000000000000000000000000000000070d0f0c0a0300000000000000000000080d0f1111111111111111111111110d0c0600000000000000090f111111111111111111111111110d0b050000000000000000000000000000000000000002080b0f121516161614110e0c0600000000000000000000000000000000000000000000000000000000000000050b0d10131516161614110d0b06000000000000000000000000000000000000000000000000000000000000080e101515110b0802000000000000000000000000000000000000000000000007101719202020201f1a0e0c07000000000000000000000000000000000000000000000000000000000a141a1d20202020202020202020202020202020202020202020202020202020202020201e1b150c00000000000000000000000000000000000000000000000000000a1b2b3943464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c39302313010000000006192c3c566b8096a9babcab97826d5e4c3e3127201c1820222f3b495a697e93a6b7baa9947f6a553928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1920222424211f170c0000000000000000000000000000000000000000000000000000010d1820222320190e0000000000000000000000000000000000000000000002101b2224211e170b0000000000000002101b22252626262626262626262626262320190e0000000003111c2326262626262626262626262626221f180d00000000000000000000000000000002090b151d2024282a2b2c2b2927232119100e0800000000000000000000000000000000000000000000000001080b1018202225292a2b2c2b29262320190f0d070000000000000000000000000000000000000000000000000003101b22252a2a26201d15090000000000000000000000000000000000000000000a18242b2e35353535342f23211a0f01000000000000000000000000000000000000000000000000000e1c272f3235353535353535353535353535353535353535353535353535353535353535353330291d0f0000000000000000000000000000000000000000000000000013273949565c606060606060606060606060606060606060606060606060606060606060524d41301e0a00000000000e23384d62788b9fb4c5b49f8c7c665c4b443735302b34373f4c596278899eb3c4b49f8b78624d38220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b353839393633291c1103000000000000000000000000000000000000000000000009141d2b343738352c1e0e00000000000000000000000000000000000000000010202d36393633291b1203000000000010202e373a3b3b3b3b3b3b3b3b3b3b3b3b38352c1e0e00000011222f383b3b3b3b3b3b3b3b3b3b3b3b3b37342a1d0d000000000000000000000000010a151d202731363a3d3f4041403f3c38352c25221b100800000000000000000000000000000000000000000409141d20262b34373b3e3f4141403e3c38352b24221b1007000000000000000000000000000000000000000000000b171e2e373a3f403c363127190f010000000000000000000000000000000000000718283640434a4a4a4a494439362d1f0f0000000000000000000000000000000000000000000000000a1c2c3a43474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a48443b2d1d0c0000000000000000000000000000000000000000000000001a2e43566771757575757575757575757575757575757575757575757575757575757575675f4d39251000000000000b2035495a6c8196a7b9bcab9e897a6960554e4a433b484d525d6577869ca7b8baa997816c5a4834200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d4e4e4c463a2f2111000000000000000000000000000000000000000000000e1926313b484d4d493c2c1808000000000000000000000000000000000000000b1b2d3e4a4f4b4639301e170b000000081b2e3f4b4f5151515151515151515151514d493c2c190600091c2f404c505151515151515151515151514c483b2a18050000000000000000000009141d27313637444b4f525556565554514d493c3a372e221b100300000000000000000000000000000000010b171f2631353b3b484c50535556565554514d483c3a362e221b1002000000000000000000000000000000000000000b1b29333f4b4f5455514b44372c1f0f000000000000000000000000000000000000102436465359606060605e594e4a3d2d1e0e000000000000000000000000000000000000000000000014273a4a575c60606060606060606060606060606060606060606060606060606060606060605d584c3b29150000000000000000000000000000000000000000000000001c31465c71868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523c2712000000000006192b3c4c6176899eaabbb9a79e8b7e74696360545d596268707b889ca4b5beb49f8b78624d3c2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a62646461584b3f2f1c0800000000000000000000000000000000000000000e1e2b37444b5962635a49362513000000000000000000000000000000000000031729394a5c6461574d4133291b0b00000d22374b5d64666666666666666666666666625a4935200c000f23384c5e66666666666666666666666666625948341f0b0000000000000000000e19263138454b52556064676a6b6b6b6966635b574f4b3f372e1e170b000000000000000000000000000009141d293337444b5057596265686a6b6b6b6966625a574f4a3e362d1d150a000000000000000000000000000000000003172939464b5d656a6a666055493d2c1b0b0000000000000000000000000000000002172b4053646e75757575746f635b4a3c2c1906000000000000000000000000000000000000000000001a2f435768727575757575757575757575757575757575757575757575757575757575757575736a5844301b0000000000000000000000000000000000000000000000001c31465c71869b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927d67523d27120000000000000e1f334758667c8c9fb4bbb9a99f93877f7974737274777d85909da6b5bfb2a0937e695a48351d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d6278797976655d4b38230e0000000000000000000000000000000000000006192b3c485560697778635443301c0c00000000000000000000000000000000000a1e334657647a76675f4c4639291703000f253a4f647a7b7b7b7b7b7b7b7b7b7b7b7b78624d38230d0011263b50667b7b7b7b7b7b7b7b7b7b7b7b7b77624c37220d0000000000000002101e2c37444b5660676f75797d7f8081807e7c78736d655d4f4b3f33291b0f0100000000000000000000000e1926313a464c5560656c72777a7e7f8081807e7b78736c645c4f4a3e31271a0d000000000000000000000000000000000a1e334657616f7a7f7f7c74635b493929170300000000000000000000000000000004192e43596e838a8a8a8a898479635a49352010000000000000000000000000000000000000000000001d32475c72878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a88735d48331e0000000000000000000000000000000000000000000000001c31465c71869bb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a7927c67523d271200000000000004172a3a4c5e697e939faab8bab4a59d948e8a8888898c929aa2b3b7bcb0a198826d604f3c2b19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d828e8e8a7b65503b2510000000000000000000000000000000000000000b2035485a62737e898472604a3a291704000000000000000000000000000000071a2d3d4b617588887c6f615746331e0a001b30455b70849090909090909090909090907f69543f2a14001f34495e74899090909090909090909090907d67513c27120000000000000110212e3c49556068747d848a8f929495969594918d88827a6f645d4b46392c1f1002000000000000000004121e2c37444b58616a747b82878c90939496969593918d88817a6f645c4b45382b1d0d0000000000000000000000000000061a2c3d4b6175838f9495918679635746331e0a000000000000000000000000000000000e23394e63798c9f9fa79e998978634d3e2e1b080000000000000000000000000000000000000000001d32475c72879c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9d88735d48331e0000000000000000000000000000000000000000000000001c31465c71869bb1c6cad0c7c4b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a7927d67523d2812000000000000000c1c2f404f60697f8c9ea7b4bab6b2a9aa9f9d9d9fa8a7afb4c0b5b19e958374604b42321e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8096a899846f59442f1a040000000000000000000000000000000000000d23384d627885939e927d685846331f0e0000000000000000000000000000000c21364a5b6b81969d918375614c36210c001b30455b70859aa6a6a6a6a6a6a6a6a6a6947f69543f2a14001f34495e74899ea6a6a6a6a6a6a6a6a6a6917d67513c27120000000000000f1f2e3f4b5a62737e8892999fa9a7aaababaaa9a6a69d978f847a6e6157493d2e2010000000000000000513222f3c49556069767f8890979ca5a5a8aaababaaa9a6a69d978f847a6c6056483b2b1d0d000000000000000000000000000c2135495b6e8298a1a9aaa49c8775614b36210c000000000000000000000000000000000c2136495b6e8398aab9b3a799846f5c4b3722100000000000000000000000000000000000000000001c31475c71869cb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b29d88735d48331e0000000000000000000000000000000000000000000000001c31465c71869bb1c6d0bfb3aea1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1927d67523d28120000000000000000122232424f61697b88969fa9b3b8c4bbb4b3b2b4bac6bcb5b0a39b90807260564532241400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a99b86715c46311c040000000000000000000000000000000000051a2f445a6f8499a3b39e8876614c3c2b190500000000000000000000000000091c2f404e63798c9fb2a195806a55402b15001b30455b70859ab0c7bab4a4a4a4a4a4a6937e69533e2914001e33485e73889da4a4a4a4a4abb0bcbba6917c67513c271200000000000b1b2d3d4b5d657885939da6aeb4bac7bbb9b8babcc4b8b3aca29a8f8375635b4b3e2e1e0e000000000001132330404c5b63737e89949da6acb2b6c3bdbfc0c0c0bec4b7b2aca1998f81746259483b2b1a0a0000000000000000000000000e23384e63788da0b2bfc2b6a5947f69543f2a1400000000000000000000000000000000061a2c3d4e63798c9fb4c5b3a18f7a644f3e2d1b070000000000000000000000000000000000000000192e43586e8298aabbc9dadac9bcb5b0b3b8c5bcbebfbfbfbfbfbfbfbfbfbfbfbfbfbfbfb29d88735d48331e0000000000000000000000000000000000000000000000001c31465c71869bb1c6c7b3a1998b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7d67523d2812000000000000000004142432434f5d6577818a969da6a9acafb0b0b0aeabab9f9a91867b6b605445382816060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d13283d53687d92a89d88725d38281f170d0b05000000000000000000000000000004192f44596e8399aeb8a696816c5a4835200e000000000000000000000000000f23384c5e70849aaabaa9947f6a553f2a15001b30455b70859ab0baa99f8f8f8f8f8f8e8877624d37220d00152b40556a808d8f8f8f8f8f969eb0bca6917c67513c2712000000000417293a4a5b657b899ba3b3b7bbb4afa9a5a4a3a5a7acb2b7c0b4afa0988679645c4b3c2c1909000000000a1d30414d5e667985939ea7b3b7c4c6c4b7b2b0aeadafb1b4bbc8bfb3af9f97857762594838281502000000000000000000000013283d52687d92a7becfd3c3ae99846f59442f1a04000000000000000000000000000000000f2135495b6d8298aabbbfaf99846f5c4a36221000000000000000000000000000000000000000000f253a4f647a8c9fabbcc9cfbcab9f9a9ea7a5a7a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a99c86715c47311c0000000000000000000000000000000000000000000000001c31465c71869bb1c6c4ae9983767676767676767676767676767676767676767676767673604b36200b000000000000000000061425323f4b59626c7781888f94979a9b9b9a9996918b857c72665e4b4336281a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000209101b2224293c51667c91a69e897456453633292220190e050000000000000000000000000010263b50657b90a2b4b49f8b78624d3c2b19060000000000000000000000091d2f4050667b90a2b4b49f8a77624d37220d001b30455b70859ab0b49f8b7a7a7a7a7a797562594834200b0013283c50616a787a7a7a7a7a8096abbca6917c67513c2712000000000a1f33465863798a9ea7b5bfb2aa9f9a94908e8e8f92979da6b2b7beb2a49c8a7a645a49372715020000001025394d5f677c8a9ba3b3b9c5c2b6b1a8a69d9b99989a9b9faaafb3bfbdb1a39b8777625645321d0f000000000000000000000013283e53687d93a8c0d1d6c5af99846f5a442f1a0500000000000000000000000000000000061a2c3d4d63788b9fb4c8b3a18f7a644f3e2d1b07000000000000000000000000000000000000000d22374b5c687e8d9fabbcc9b59f8c84898d909294949494949494949494949494949494948f7f69543f29140000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e61616161616161616161616161616161616161616161605544311d08000000000000000000000714212f3b474c59626c747a7e828485868583807c77706760544c403026180a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d202d3639394650657a8fa5a88b7560504c463a38352b20180d0000000000000000000000000e23384c5d70849aafbaa997816c5a4835200c00000000000000000000000f24384c5e70859bb0b9a896806b594834200b001b30455b70859ab0b49f8a7464646464646157483b2b1905000d213343505a6264646464687e93a8bca6917c67513c2712000000081b2e3e4c6176879ca8b9bbb4a1998b857f7b79787a7c8288929da5b3bfb6a89e8978635544311d0b00000012273c52677d8c9ea8b5c1c2b6b1a49c938d8885848384868a919aa1b3b8c1b4a59b8574604b3d2c1a06000000000000000000000f24394f64798ea2b4c2c5b8a795806a55402b150000000000000000000000000000000000000f2035495a6d8297aabbbfae99836f5c4a36220f00000000000000000000000000000000000000081b2e3e4e60687e8d9fabbcbcab9a8475787b7d7e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7e7b69614f3b27120000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e594c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4437271502000000000000000000000003111d2a343b484d556064696c6f7071706e6b676259514a43362f1c1408000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131a2731363e4a4f56576164798ea3a18c7768656158554d483c342b1c130800000000000000000000091c2f3f4f647a8fa1b3b49f8b78624d3a291704000000000000000000081b2e3f51667c91a3b5b39e8976614c3b2b1805001b30455b70859ab0b49f8a745f4f4f4f4f4b46392b1d0d0000041525333c494d4f4f4f53687e93a8bca6917c67513c27120000000d22374b5c6e8398a5b6bbaa9f9383796f6966646365676d747d8799a1b3bfb8a79b8574604b3a2917040000172c41576c8196a6b8c6bbb4a49c91867e7873706e6e6f71767b84909ea6b8c3b5a396806b5b4935210b000000000000000000000d22364a5c70849aa4adaea79e8977624c37220d00000000000000000000000000000000000006192c3c4d62788b9fb4c7b3a18e7a644f3e2d1a0700000000000000000000000000000000000000102031414e60687e8d9fabbcb3a29983746567696a6a6a6a6a6a6a6a6a6a6a6a6a6a6a69655d4f43321f0c0000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59443636363636363636363636363636363636363636363127190900000000000000000000000000000d181f2b3437444b4f54575a5b5b5b5956524d483b35302518110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18203038454b535c646b71767a7e93a8ab96817d7a76716a625a4d483b3025180a000000000000000000001122374b5c6f8499afbbaa97816c5847331f080000000000000000000e22374b5d71869bb0baa995806a5847331d0d00001b30455b70859ab0b49f8a745f4a3a3a393632281b0d0000000007151e2b35383a3a3e53687e93a8bca6917c67513c27120000071a2d3d4f647a8fa0b2bfb49f8c7e6e635b54504f4e5052556068768399a1b3c2b5a3947f695846331f0a00000c21364c6176889eb3b7aa9f95867c7169635a5b59585a5761666f7c889ea7b8c1b49f8b79634e3a291704000000000000000000071b2d3e4d62778692989994897b655948341f0b000000000000000000000000000000000000000e2035485a6c8197a9babfae99836e5c4a36210f0000000000000000000000000000000000000002132331424e60687e8d9fabbcb3a1998373605554545454545454545454545454545454504b3f322514030000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f21212121212121212121212121212121212121201d150900000000000000000000000000000000050d18202631353a3f424546464544413c37342b201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111d2b34414d566068717980868a8f939caeb09f96938f8b867f786d62594a4336281b0b000000000000000000081b2e3e50657b90a3b5b49f8a76614c362513000000000000000005182a3b4f657a8fa3b5b49f8a77614c3a2a170000001b30455b70859ab0b49f8a745f4a352524211e160b000000000000000e19202325293e53687e93a8bca6917c67513c271200000d21364a5c6f8499aebfb3a1937e69604e493d3b39393a37444b5861728399a4b6c1b39e8976614c36210e00000a1f334658687d92a2a59d8c8073665e534d493c444339464b515e6679899eb3c0bbaa97826d5846331f0a00000000000000000000102034485962747d83837f77655d4b3b2a18050000000000000000000000000000000000000006192b3c4d62788b9fb4c7b3a18e79644e3d2d1a070000000000000000000000000000000000000005132331424e60687e8d9fabbcb3a1998273605544363f3f3f3f3f3f3f3f3f3f3f3f3f3a372e211406000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b0802000000000000000000000000000000000000000509141d2024292d2f3031302e2b272220180d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412212e3b484d5f67747d868e959b9faaa8aebabdb0aba8ab9f9b958c82776a60544539291b0b0000000000000000001023384c5d71869bb1baa9947e695443301c07000000000000000b1f3448596e8398adc1ac97826d5947341c0c0000001b30455b70859ab0b49f8a745f4a351f0f0c0903000000000000000000060b0d13293e53687e93a8bca6917c67513c271200000f24394e64798ea1b3c1ae99836f604f42352c2624232527313a46546175869cb1c2b9a8947f6a543c2c1906000417293a4a6072849493877a6a60554c4038352c2f2e293236404c5b667c90a2b4c8b49f8a76614c36210c0000000000000000000005182b3b485660686d6e6a61594b3f2e1d0d0000000000000000000000000000000000000000000e2034485a6c8196a9babfae99836e5b4a36210f000000000000000000000000000000000000000005132331424e60687e8d9fabbcb2a198827360544336252a2a2a2a2a2a2a2a2a2a2925231c110300000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f1904000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f14171a1b1c1b1916120d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001222303f4b59626f7d87929ca4abb0b4bbc8c5c9cdc4c1c9bcb5b0ab9f978a7f72605746392917030000000000000000081c2f3f52687d92a8b9b29c8773604a35200b000000000000000d22374c62778b9fb4b5a38e79634e3b2a18000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120003162939566b8095abbfb5a38e7a644f4232211a110f0e10151d29364657667c91a4b6c6b19c86715a4935200c00000c1c30435460757f7e75645c4b44372f2320191919161e212f3d4c5e70859aafc5baa9927d67523d281200000000000000000000000d1d2b38454b535859554c473a2e21110000000000000000000000000000000000000000000005192b3c4d62778a9fb4c6b59f8c79634e3d2d1a07000000000000000000000000000000000000000005132431424e60687e8d9fabbcb2a0988272605443362513151515151515151514100e08000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d30404d5d657784919da5b1b5c2bab4afabb0b5c0b4afa9adb3b8bcb4a89e948375615746331e140000000000000000001121364b6075899eb4b6a5907b6550372715010000000000061a2c3d556a7f94aabbb09b85705b4a361d0c000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000a1e32465771869cb1c5b09b85705c4a3624140600000000010c1829394d5e72869cb1c7b6a48d78634d38230e000000132536455660696961574b3e312719120c060000030a121f2f4053687d92a8c9c7ac97826d57422d180000000000000000000000000d1a2731363d43443f37342a1c110300000000000000000000000000000000000000000000000d203448596c8196a8babcab98836e5b4a36210f00000000000000000000000000000000000000000006132431424e60687e8d9fabbcb2a0978172605443301c160800000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f1904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a141a1d202020202020202020202020202020202020202020202020202020202014120c0300000000000000000f24394d5e667b8899a1b2b6c3b7b3a99f9a959ba3b4a29a94989ea7b1b5b9b4a1998575614b42321c0c0000000000000000091e3245576d8297adc3ac97826d5544311d0800000000000c2135495b71869cb1baa9937e68533d2d1a00000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000c21364b61758b9fb4c0ab95806b563e2d1b06000000000000000b1b3040566b8095abc0c2a7927d68523d281300000008182838454b54544b46392e1d150900000000000000001222384d62788dabbcc6b19b86715c372715020000000000000000000000000a151d20282e2e2a221f180c0000000000000000000000000000000000000000000000000005182b3b4c62778a9fb4c6b59f8c79634e3d2c1a0600000000000000000000000000000000000000000006132431424e60687e8d9fabbcb1a0978172604a4434261608000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c272f32353535353535353535353535353535353535353535353535353535353529271f14060000000000000011273c51667c8b9ea6b3bfbab4a69d938a8480859baf9a847f8389919ca4afbcb2a398826e614f3a2a1804000000000000000316283950657a8fa6b7b39e8974604b35200b00000000000e23384e63788da4b5b49f8a76614c37210f00000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000f24394f647a8eabbcbba6917c66513c271100000000000000000012263b50667b90a5bbc0ab96806b56412b16000000000a1a2832363f3e3632291b10010000000000000000000b20354b60758a9fb5c9b49e89745544311d0800000000000000000000000008131c202828282825231c1103000000000000000000000000000000000000000000000000000d1f3447596b8096a8b9bcab98836e5b4935210e0000000000000000000000000000000000000000000006132431424e60687e8d9fabbcb19f97816c625144342616070000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190401010101010101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c2c3a43474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3f3b32251403000000000000162b40566b8095a4b6c2b5a99f95887e776f6c8197ac99836e6d747c86959eaebbb2a0937e695847331f0b00000000000000000b20354a6073889db3b8a7907b65503b2610000000000417293a556a7f94aac2ae99846f5847331f0a00000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120011273c51667c91a6c9baa48f7a654f3a25100000000000000000000e24394e63798ea3b8c3ad98836e58432e1900000000000a161e212a29211e160b0000000000000000000000091e32465774899fb4c9b9a88b75604b36200b000000000000000000000008182530353d3d3d3d3b382f21110000000000000000000000000000000000000000000000000005182a3b4c61778a9eb4c6b49f8c79634e3d2c1a060000000000000000000000000000000000000000000006132431424e60687e8d9fabbcb19f96816c6251443325150700000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f191717171717171717171717171713110b020000000000000000000000000000000000000000000000000000000000000000000000000000000014273a4a575c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f544f43321f0c0000000000000b20364b6074869cabb4a39b8b80756961586b8095aa9a85705560667380949daebeb49e8a77614c3929160300000000000000071c3043546d8297acc5ac97826c573b2b18050000000a1f33465871869bb0c2a8937e68533a2a170400000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120013283d53687d92a8bdb8a38e79634e39240e0000000000000000000d22384d62778da2b7c4af99846f5a442f1a00000000000003090b14140c0a0300000000000000000000000a1521364b61768ba8bacdc4a08b76614b36210c0000000000000000000000132536434a53535353504b3f2f1c08000000000000000000000000000000000000000000000000000d1f3347586b8095a8b9bcab98826d5b4935210e000000000000000000000000000000000000000000000006132431424e60687e8d9fabbcb09f96806b62504333251506000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f2c2c2c2c2c2c2c2c2c2c2c2c2c2c28261f14060000000000000000000000000000000000000000000000000000000000000000000000000000001a2f43576872757575757575757575757575757575757575757575757575757575757569614f3b2712000000000000091d324556647a8d9f9f9685796a60574c54697e94a99c86715c4b54606b7f94a1b3b9a895806b5746321e0a000000000000000013253651667b91a9bab29c8772594834200b0000000c21364c61768b9fb4b5a48d78624d38220d0000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120014293e53697e93a8bebaa48f7a654f3a25100000000000000000000e24394e63798ea3b8c4ae99846f59442f1a000000000000000000000000000000000000000000000508131c28324350657b90a5c6cbb8a68a75604b35200b00000000000000000000071c3043546068686868655d4b38230e0000000000000000000000000000000000000000000000000004182a3a4c6176899eb3c5b49f8c79634e3c2c1906000000000000000000000000000000000000000000000006132431424e60687e8d9fabbcb09e95806b615043322414050000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59444141414141414141414141414141413e3a3124140200000000000000000000000000000000000000000000000000000000000000000000000000001d32475c72868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8c7f69543f2914000000000000021528384b5d697e8b8a8074635b4b453952687d92a79d88735e39434b616f8399aec2b49e8976614b36210c00000000000000000b21364b60768a9fb4b6a48c77624d37220d00000011263b51667b90abbcb19c86715a4834200b0000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120013283e53687d93a8bdbca7927c675238281502000000000000000010263b50657b90a5bac3ad98836e58432e1900000000000000000000000000000000000000070c0e1920253038454b616f8499afc4c8b39e88735544311d08000000000000000000000b20354a60727e7d7d7d7b65503b251000000000000000000000000000000000000000000000000000000c1f3347586a8095a7b9bbaa98826d5a4935200e00000000000000000000000000000000000000000000000006142431424e60687e8d9fabbcaf9e95806a614f423223130500000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e5956565656565656565656565656565656534e42311f0b00000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f947f69543f2a14000000000000000a1a2e3f4f606976766b60564a3d323b51667b90a69f8a74574632434e64798ea4b5b9a8917c67523c27120000000000000000091e32455770859bb0c3a7927c67523d2712000001162b41566b8096abc9ac97816c573c2b19050000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120012273c51677c91a6c7c2ac97826d5645321d0d0000000000000008182e3f556a7f95aabfc0ab96816b56412c1600000000000000000000000000000000060b0f1a21232b3536434a56606b7f95a1b3c7c7af9a856f5a37261401000000000000000000000c21374c61778c92929285705b382815020000000000000000000000000000000000000000000000000004172a3a4c6176899eb3c5b49f8c78634d3c2c190600000000000000000000000000000000000000000000000006142431424e60687e8d9fabbcaf9e947f69604f4231231303000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99836e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c68604e3a261100000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879cb2b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a9947f69543f2a140000000000000000102032424f586161574b45382d253a4f647a8fa4a98b76614b36364a5c71869cb1c6ac97826d57422d18000000000000000003162839566b8096abc0ac97816c57422c17000005192b3c5b70859bb0c5a7927c67523d2712000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000f24394e64798ea9bac8b39d8875604b3c2b1b0e0400000000091526364b5d70859bb0c5c2a8937d68533e28130000000000000000000000000003090e1920232d36393c484d5460677480959dafbfcebaa9947f6a543f2a1500000000000000000000000e23394e63788ea3a89d88735645321d0900000000000000000000000000000000000000000000000000000c1f3346586a7f95a7b8bbaa97826d5a4935200e0000000000000000000000000000000000000000000000000006142431424e60687e8d9fb5bbae9d937e69604e41302111000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c7b29d878181818181818181818181818181818181817e68533e281300000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879ca3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3947f69543f2a140000000000000000021424323a474c4c463932281a23384e63788da3a28d77624d382d3e576c8196acc1b19b86715c37271502000000000000000011263c51667c91a6c6b09a85705b3b2a1805000b2035485a74899eb4b8a78d78624d38220d000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000b20364b60758a9fb4c9b8a6937e695a48392c1f17131112131c27314354647a8fa3b4c8b6a48e79634e39230e0000000000000000000000010a161e212b35383d4a4e555a626a737c86969eafbcccc3b49f8b77624d37220d000000000000000000000010253a50657a8fa5b59f8a75604b36200b00000000000000000000000000000000000000000000000000000417293a4b6176899eb3c5b49f8b78624d3c2b19060000000000000000000000000000000000000000000000000006142431424e60687e939daebbb59f8d7e685f4d3f2e1e0e0000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6cab6a59d969696969696969696969696969696969696846f5a442f1a05000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72878e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e7f69543f2a1400000000000000000006141c2a33373633291d150c22374c61778caba38e79644e392a3f546a7f94a9bfb49e89745544311d0800000000000000000d22374d62778ca8b9b39e89735948341f0b000d22384d62778da8b9b39e88735a4835200b000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200091d3245566f859aafc9c4b39e89786257493c3329282627253037444b6073849ab0c1c4b19c87725b4935210c0000000000000000000009141d2832363c484d555b636a71787f86919ca4b0bcccc4b6a595806b594834200b000000000000000000000012273c51677c91a6bcab8d78634e38230e0000000000000000000000000000000000000000000000000000000b1e3346576a7f94a6b8bbaa97826d5a4835200e000000000000000000000000000000000000000000000000000006142431424e60697f949eafbcab9f8d7d675d4b3c2c190900000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d3c3b6b2ababababababababababababababababab99846f5a442f1a05000000000000000000000000000000000000000000000000000000000000000000000000000e23394e6379797979797979797979797979797979797979797979797979797979797977614c37220c00000000000000000000000c171f21211e170b020b20354b60758a9fa5907b65503b293e54697e93a9beb9a88b75604b36200b00000000000000000b2034485974899eb3b8a78c77624c37220d0011263b50667b90a5c6b09a85705b3c2b1905000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000215283854697e93abbcccb8a79b8575625a4c473a3d3c3d36434a55606c8096a2b4c8b7a6947f69543d2c1a060000000000000000000d19263138454b525a626a72797f868d949ca4b1b6c2cdc3b6a69c8775604b3b2b1805000000000000000000000013293e53687e93a8c9a5907b66503c2b1d100200000000000000000000000000000000000000000000000000031729394b6175889eb3c4b49f8b78624d3c2b1905000000000000000000000000000000000000000000000000000006142431424f616a80959fb1bcab9f8b7b655a4937271502000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6dbd1c8c5bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaf99846f5a442f1a05000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b636464646464646464646464646464646464646464646464646464646464615947341f0a000000000000000000000000040a0c0c0a030000081d31445574899ea7917c67523c2f3f566b8095abc0c4a08b76614b36210c000000000000000005182b3b5b70869bb0c5a5907a65503b25100014293f54697e94a9beac97826c57422d1700000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000d22374d62778b9fb4cac5b5a39b86786b615855535152545460667481969eb0c0beb29d8875604b36210f000000000000000002101d2b37444b5660676f787f878e949ba3aab1b6c2c9c8beb2a59c8878635745321d0d000000000000000000000000152a3f546a7f94a9bfaa95806b5a483b2d201403000000000000000000000000000000000000000000000000000b1e324657697f94a6b7bbaa97816c5a4835200d000000000000000000000000000000000000000000000000000000061424324350616c8197a1b3baa99e8978635544311d0f000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d1c1b4b0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a599846f5a442f1a0500000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4c473a2a18040000000000000000000000000000000000000000011426375d72879da8937e68533e3b4b5d71869bb0c6b7a68a75604b35200b000000000000000000182d42586d8297adbca7927d67523d281200162c41566b8196abbea9947e69543f291400000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000b203448596e8399aec0d0c1b5a49c8a80766f6a686667696d737c85969fb0bcc1b2a0927d685645321e09000000000000000010202d3b48556068757d848c959ca4aab0b5c1c7cac8c0b4afa0988779635a493928160000000000000000000000000014293f54697e94a9bfb39e897862594a3e311e170b000000000000000000000000000000000000000000000000031628394b6075889db3c4b49f8b78624d3b2b190500000000000000000000000000000000000000000000000000000006142533434b6072839aa5b6b8a79b8574604b3d2d1a070000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c8b4a39b909090909090909090909090909090909090846f5a442f1a0500000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c3539393939393939393939393939393939393939393939393939393939393937342a1c0c000000000000000000000000000000000000000000001b31465b70869baa947f6a553e4a59657b90a3b5c8b39d88735443301c08000000000000000000162b40556b8095aabea9947f69543f2a1400182e43586d8398adbca6917c67513c271200000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000005182b3b4f657a8fa2b3c9d2c2b5a89f958b847f7d7b7c7e8288919ba3b0bdbfb3a3988272604a38281603000000000000000e1e2d3e4a5962737e88929a9fabb2b6c3c6c9c9c5b8b3aba29a8f8276635b4a3c2c1b0a000000000000000000000000000f24394e64798ea1b2b8a79c8677645c4e4233291b0e0000000000000000000000000000000000000000000000000b1e324556697e93a6b7bbaa97816c594834200d0000000000000000000000000000000000000000000000000000000006151c3043546176879dabbcb5a395806b5b4a3621110000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c5b09b857b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000417293a474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b45382816030000000000000000000000000000000000000000051a2f445a6f8499ab96816c564d5c6478879db2c1c5af99846f5a3626140100000000000000000014293e53697e93a8beab96816b56412c16001a30455a6f859aafbaa48f7a654f3a251000000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000d23374b5d6f849aabbccfd2c6bab4aa9f9a9492919293989da6b1b5c1b9b4a1998474605443301a0a0000000000000005192b3c4a5c647885939da6afb5bcc9cac9c7bab4aea79e968e847a6d61574a3d2d1e0e00000000000000000000000000000d21364a5c6e8399a4b5b6a49c877a68604b46392b1e0e0000000000000000000000000000000000000000000000031628384b6075889db2c3b49f8b78624d3b2b180500000000000000000000000000000000000000000000000000000000011426364758647a8c9fb4c1b49f8c79634e3f2f1c0800000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e6666666666666666666666666666666666645c4a36220d00000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758616161616161616161616161616161616161616161616161616161616161605645321e0900000000000000000000000000000000000000040a182e43586d8398ad98826d5a626c7a879da5b7cab9a7937e69533e29140000000000000000000011273c51667c91a6bbad98836e58432e19001c32475c71879cb1b8a28d78634d38230e00000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000000081c2e3f4f647a8c9fb4c4cebaa99f9fa9afaaa8a6a7a9adb3b7c4b8b3a89e93837661564536251300000000000000000b2035485a647a899ba3b2b7c4cac9c7bab4aea99f999288817970645c4c46392d1f0f000000000000000000000000000000071a2d3d4c6176869ba3b1b6a69d8b7e6e6157483c2b1d0d00000000000000000000000000000000000000000000000a1d324556697e93a5b7baa996816c594834200d000000000000000000000000000000000000000000000000000000000008182a3a4b5d6b8196a7b8bbaa9a846f5d4b37230c00000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59505050505050505050505050505050504f4a3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000000c21374c6176777777777777777777777777777777777777777777777777777777777775604b36210b0000000000000000000000000000000000050c171f212b41576c8196ac99846f6f78818b9da5b6c3beb39e8976614b36210c0000000000000000000010253a4f657a8fa4baae99846f59442f1a001d33485d72889db2b6a18b76614c36210c00000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c2712000000001122364a5c6c8197a6b7c9b49f8b8a979ea8abafb1b3b2b0afaaa79e958a7e6e61584638281808000000000000000a1d30404d6278889da7b4c1cbcac2b5b1a99f99928a847c756b635b4f4b3e33291b0f01000000000000000000000000000000000f1f334758617785979fb4b7a99f938275625a483c2b1b0a00000000000000000000000000000000000000000000021528384b6074879db2c3b49f8a77624d3b2a180500000000000000000000000000000000000000000000000000000000000c1c2e3f4c6176899eb3c7b4a2907b65503b2a1804000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59443b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39362d20100000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7f69543f2a14000000000000000000000000000000000d18202a33373b48556a7f95aa9b857d848c979faab6c3beb2a0927d675746331e0a000000000000000000000f243a4f64798fa4b9af9a856f5a45301a001e33495e73889eb3bcab8b75604b36200b00000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000071b2d3e4c6176889db3bdbaa99580828991969a9c9e9d9b99958f89807669614c463a291a0a00000000000000001024394d5f70849aa6b7c5cec3b6b2a49c938a847d766f6760564e493d372e1e170b0000000000000000000000000000000000000417293a4759617482919fa8b7b4a0988678625a4839281603000000000000000000000000000000000000000000000a1d314556687e93a5b6baa996816c5948341f0c000000000000000000000000000002090b0d0b0802000000000000000000101f3346586a7f94a9bac0ae99836e5947341f0b000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f262626262626262626262626262624221b10020000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879ca1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1947f69543f2a14000000000000000000000000000002131d2b343a474c535962697e93a8a39b929a9fabb4bbc7bab4a098826d5f4d39291703000000000000000000000e24394e63798ea3b8b09a85705b45301b001f34495e74899eb3b59f8a755645321d0900000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000101f334658667c909fb0c1b49f8b79767c81858788888684807a746a61584f4233291c0c0000000000000000071a2d3d51677c91a2b4c4cebdb1a49c91867e766f676158524b4538352c221b100300000000000000000000000000000000000000000c1c2a3b4756606d7d8a9da5b5b2a49c8778625745321e0f00000000000000000000000000000000000000000000021527384b6074879db2c3b49f8a77624c3b2a1804000000000000000000020b1114161e2122201d150900000000000000000417293a4c61778a9fb4c9b49f8b77614c37220c000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19111111111111111111111111110f0d0700000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879cb2b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a9947f69543f2a140000000000000000000000000009151d313b484d58616970777e869cb1b5b1a7afb5bcc9c0b3a99f958273604b41301b0b00000000000000000000000e23384d63788da2b8b09b86715b46311c001f354a5f748a9fb4b49f89745f4a28150200000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000417293a4c5e6c8196a3b5baa99d8777676b70727372716f6a6560554c473a321f170c0000000000000000000c21364a5b71869cb1c0cebdb19f97867c73696158524c463a363228211a0f0800000000000000000000000000000000000000000000000c1d2a38454b5f677a879ba3b5b5a59c8675604b3d2d1a07000000000000000000000000000000000000000000000a1d314455687d92a4b6baa996816b5947341f0c000000000000000006141f262928323637363127191103000000000000000b1f3347586e8399aec3bbaa917c67523c2712000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72879ca1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1947f69543f2a1400000000000000000000000009192731424e59626c777e858c949ca4b5c9c6bcc4c7bab4ada29a8b7f726055443123130000000000000000000000000e23384d63788da2b8b09b86715b46311c001f354a5f748a9fb4b49f89745f4a28150200000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000c1c2f404b6074859ba8b9b7a59a8473605a5c5e5d5b5a554f4b4437332a1c1404000000000000000000000e24394e63798ea4b5c9c2b19f9781756660544c473a363329201d150a0600000000000000000000000000000000000000000000000000000c1a2832414d5c6477859ba5b7b6a497816c5b4a36210a00000000000000000000000000000000000000000000021527374b6073879cb2c2b49f8a77614c3a2a1804000000000000021424313b3e38454b4d4b44372f21110000000000000004182a3a54697e93a9bec8ac97816c57422c17020000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475d72878c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7f69543f2a14000000000000000000000009192737444b606877818a939a9fabb1b5c2cdc7bab4aea99f988e84796a605444372715050000000000000000000000000e24394e63798ea3b8b09a85705b45301b001f34495e74899eb3b59f8a755645321d0900000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000111d32455663798a9eb4bdb4a296816c5f4d3e484644403a3531271f170c00000000000000000000000013293e53687e93a8c2c9b6a497816d60574a4336332a211f170c090200000000000000000000000000000000000000000000000000000000000a161e303e4a596277879dabbcb59f8d79634e3827150200000000000000000000000000000000000000000000091d314455677d92a4b6baa896806b5947341f0c0000000000000b1f31424e535956606260554c3f2f1a0a000000000000000f253a4f647a8fa4b9c5b09a85705b45301b060000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c6177777777777777777777777777777777777777777777777777777777777775604b36210b00000000000000000000011527374455606e7e89969fa8b0b5bcc9cacebcb0a99f99928a82796f635b4a4336271909000000000000000000000000000f243a4f64798fa4b9af9a846f5a452f1a001e33495e73889eb3bcab8b75604b36200b00000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000002152838495b677d919fb1c0b09e927d675c4a3a2a2f2b25201d15090400000000000000000000000002172c41576c8196acc1c6b19c8674604b453930251f170c0a040000000000000000000000000000000000000000000000000000000000000000000213202d3b4759657a8d9fb5bcab98826d5645311d0900000000000000000000000000000000000000000000011426374b6073869cb1c2b49e8a77614c3a2a1704000000000011263b4e60696e72767774655d4c382715020000000000000e23384d63788da2b8c7b19c87725c47321d070000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f190400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758616262626262626262626262626262626262626262626262626262626262605745321e0900000000000000000000081d314455607382929ea8b4bac6c7bab4b4bbb09e958a837c766d645c4e493d30251809000000000000000000000000000010253a4f657a8fa4baae99846f59442f1a001d33485d72889db2b6a18b76614c36210c00000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000a1a2c3c4d5f6c8197a4b5bdb49f8a7a645847372614100b0801000000000000000000000000000004192e44596e8399aec3bea9947e69554432281c1308040000000000000003090b09030000000000000000000000000000000000000000000000000002101d2a3b4b5d6d8298adc8b49e8975604b36200b0000000000000000000000000000000000000000000000091c304354677c91a4b5b9a895806b5847331f0c000000000014293e53697e83878a8c897b655645311d090000000000000c22374c61778ca1b6c8b39e88735e49331e090000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f1906060606060606060606060606060606060600000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a474c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4539281603000000000000000000071a2d3d4b60738398a0b4b9c6c4b7b2a99f9faaab9580766e6761574e4a3e352c1c130800000000000000000000000000000012273c51677c91a6bcad98836d58432e18001c32475c71879cb1b8a28d78634d38230e00000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000000000e1e30414b6074869ca8b9baa99d8776615544311d130100000000000000000000000000000000051a2f445a6f8499afc4baa5907a65503727160a0000000000000000070a161e211e160a01000000000000000000000000000000080700000000000000000d1d2e3f50657a8faabbb9a8907a65503b25100000000000000000000000000000000000000000000000011426364a6073869cb1c1b49e8a76614c3a29170400000004192e43596e83989c9fa79d8774604b36200f0000000000000e23384d63788da2b8c8b39d88735e48331e090000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c100e09000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a333737373737373737373737373737373737373737373737373737373737373632281b0a000000000000000000000c21364a5b6b8095a1b2bec6b9b4a69d958a8c9fa7927c6758524b4639362d211a0f000000000000000000000000000000000014293e53697e93a8beab96816b56412c16001a30455a6f859aafbaa48f7a654f3a251000000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000131e32455663798a9eb4bdb7a59a8473604b41301f0f00000000000000000000000000000000041a2f44596f8499aec4baa48f7a654f3a251000000000000000030f1a2128323632281d15090000000000000000000000070c0e1d1c100e080000000000001020354b60758a9fb4c6a8937e68533e291300000000000003090b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c1c304354677c91a3b5b9a895806b5847331f0c0000000014293f54697e94a9b4b7a5917c66513d2d1a0b000000000215273750657a90a5bac6b19c87715c47321c070000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e5944313131313131313131313131313131313131313126231c11030000000000000000000000000000000000000000000000000000000000000000000000000c181f222222222222222222222222222222222222222222222222222222222222211e160a0000000000000000000005182a3b4e63798b9fb4bfc3b6a89e94887f77869ca8937e69533a363229221b1006000000000000000000000000000000000000162b40556b8095aabea9947f69543f2a1400182e43586d8398adbca7917c67523c271200000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000000000002162838495b677d929fb1c2b4a296806b5f4d3d2d1c0c00000000000000000000000000000003182d42586d8297adc2bca6917c67513929170800000000040a161e2d3638454b4538312719090000000000000000010f1a2124323225231c110500000000081d31445573889db2bfaa957f6a55402a1500000000030a161e21212121212121212121212121212121212125364a6073869bb1c0b49e8976614c3a2917040000000f253a4f647a8fa5b7c3ae98836e5b4a38291b110d0c0d151d3144556b8095aac0c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e594646464646464646464646464646464646464646463b382f211100000000000000000000000000000000000000000000000000000000000000000000000000040a0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b090300000000000000000000000b1f3448596f8499aabbc5b6a59d8a7e746a70859baa95806a55402b1e160b070000000000000000000000000000000000000003182d42586d8297adbca7927d67523d281200162c41566b8196abbea9947e69543f291400000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000a1a2c3d4d5f6d8297a4b5c0b09e917d675b4a3a291808000000000000000000000000000000142a3f54697f94a9c3c1ac96816c574633261814131214181f28323d4a4e5660564b4437271501000000000000000f1f2d363948473b372e20180d0903060e1f33475873889db3c0ab96806b56412b160000000b161e283236363636363636363636363636363636363636364354667c91a2b3b9a895806a5846331f0b0000000b20354b6074879db2c7b49f8c79635646392e2422212227313f4b6074879db2c7c2aa947f6a553f2a15000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b504c402f1c09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778b9fb4c8b9a79d87796960556f8499ac96816c57412c170300000000000000000000000000000000000000000005192b3c5b70869bb0c5a5907a65503b25100014293f54697e94a9beac97826d57422d1800000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000000000000000f1f30414b6075869ca8babcb49f8a796358473626140100000000000000000000000000000f253a4f647a8fa5b7c8b39e8876614c43362f2a2828292a3439454b5b6370766f605544311d0a00000000000009192d3d4a4e5d5c504b3f342b211e161a212c3b4c61768b9fb4c9a9947e69543f291400000b1b293239454b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b5e6f849aa9bab39e8976614c392917030000081c3043546a7f94a9babcab9c867461574b3f3937363837444b5d697e93a5b6c9b5a48e79644f39240f000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99837171717171717171717171717171717171717171717171655e4c38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92abbcc8b39e8978635b4b586d8298ad98836d58432e18030000000000000000000000000000000000000000000b2034485a74899eb4b8a78c77624c37220d0011263b50667b90a5c6b09a85705b3c2b1906000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000001131e32455663798a9fb4bebaa89d8776615443301c1201000000000000000000000000000b20354a6073879db2c3b8a797816c60544b3f3f3d3d3e3b474c57606a79858b8373604b3828160300000000011527374a5b637271655d4c483b3632282c363d4959697e93abbcbcab917c67523c27120003162939464b57606161616161616161616161616161616161616161616163798a9fb4b9a7957f6a5746331e0a0000011426364c61778a9fb4c0b5a49a8475655d544f4c4b4d505560697b8b9fb4c3c0b19c86715c4a36220d000000000000000000000000000000000000000000000000001c31465c71869bb1c6c9b39e8986868686868686868686868686868686868686868686857b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc9bbaa937e695a493d566b8196ab99846f5a442f1a050000000000000000000000000000000000000000000d22384d62778da8b9b39e89735947341f0b000d22384d62778da8b9b39e89735a4935200b000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000000000000000003162838495b687d92a0b1c2b6a5998372604b41301f0f00000000000000000000000000071c304354697f94a5b7c5b19f958073655d58545352545659616975808b9aa1937e695645321e0900000000081d314455637987867b6c6259504b45393d494e5b6377899eb3c9b59f8b77624d37220d000a1e3246576170767676767676767676767676767676767676767676767676757e93a8c5b39e8976614b36210c000000081f334758697f94a2b4c2b4a29a867b706964626162656b747e8b9fa9bac4b3a2907c66513e2d1b07000000000000000000000000000000000000000000000000001c31465c71869bb1c6ccb9a79e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b917d67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d43586d8298adc2b49f8a76614c3c3f556a7f94aa9b86705b46311b0000000000000000000000000000000000000000000011273c51667c91a6c6b09a85705b3b2a1805000b2034485a74899eb4b8a78d78624d38230d000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000000000a1a2c3d4e5f6d8297a4b6c3b3a195806b5f4d3d2d1c0c000000000000000000000000001325364b6074879db2bcbdaf9e95847b726d696867696b70777f88959fa9b39d8875604b36210b0000000417293a4b6073869c9c8d81776d6560575c5c5b636b79869ca7b8c0b09a8570594834200b000c21364b6176858b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b939caec1b9a7937e68533e291300000004182a3a4b6073859ba5b7c0b4a49c8f857e797776777b8087939fa9bac5b7a69a846f5e4c38201000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d6c5b9b3b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aec3b29c87725847333e53687e93a89d87725d372715070d0f16100e08000000000000000000000000000003162839566b8196abc0ac97816c57422c17000005192b3c5b70859bb0c5a7927d67523d2812000000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000000000000000000000f1f31414b6075869ca9babfb09e917d675b4a3a291808000000000000000000000000081d324556667c919eafbdbcafa29a9087827f7d7d7e80858a949da6b4bab7a6947e69543f29140000000a1f334658697f94a4ab9f978a827b767271717379808a9ca4b6c3b3a2917c67513b2b18050011273c51667c91a3a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a8aebacbc5af9a846f5a45301a000000000c1c3043546278879da6b4c0b6b1a39b938e8c8b8d90959da5b4bac2b5a79d8878624d402f1d0200000000000000000000000000000000000000000000000000001c31465c71869bb1babababababababababababababababababababababababababaa7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e8398adc3b09b86705b3b2a3c52677c91a79e89745544311d1b22242b25231c1103000000000000000000000000091e32465770859bb0c2a7917c67523c2712000000162b41566b8096abc9ac97816c573c2b19050000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000000000001131e32455763798a9fb4bebcb49e8a79635846362614010000000000000000000000021528384d5e6a80959fb4bac0b4b0a59d9794929293969b9faab3b7c4bcb5a49c86715c47321c0700000c21364c6176899ea8b6b5a99f97908a888686898e969fa8b6c2b7a59a846f5f4d391d0d000012283d52677d92a7c1b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6bec1cbd0c8b29d88735d48331e0000000001142636485a6278879aa2b3b9c1b4b0a9a4a1a0a2a5aab2b7c3bab4a49c8979635a483522120000000000000000000000000000000000000000000000000000001c31465c71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1b29d87725948343b50657b90a59f8a75604b35202d3639403a372e21110200000000000000000000000c21364b61768a9fb4b6a48c77624c37220d00000011263b51667b90abbcb19c86715a4835200b0000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000000000000031628394a5b687e92a0b2c2b9a89c8776615443301c120000000000000000000000000a1a304050616c81939fa9b3bfc3b6b2ada9a8a7a9abb0b4bbc8c0b4ab9f978678624d38230d0000000a1f334658677d8a9ca4b3b8b4adaa9f9d9b9c9ea7abb4babeb2a59d8777624d40301d00000012283d52677d92a7bababababababababababababababababababababababababababababab39e89745e49341f000000000008182b3c495a627884939ea8b1b6c2beb9b7b6b7bac0c4b8b3a99f968679635b4a3c2b19040000000000000000000000000000000000000000000000000000001c31465c71859090909090909090909090909090909090909090909090909090909090907c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92a8c1b59f8b77624c3d394f64798ea4ab8c77614c37353e4a4f554f4b3f2e2110000000000000000000000013253651667c91aabbb19c87725948341f0b0000000c21364c61768b9fb4b6a48d78624d38220d0000000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000000000000000a1b2d3d4e606d8298a4b4bbb6a5998372604b40301d090000000000000000000000001222334352636c7e8b99a1aeb4bac7c2bebdbcbec0c0c4b7b2aca29a8d8175625a4935200c0000000417293a4d5f677986939ea6b1b6bbb4b2b1b1b3b8c5bbb4aea098877863594834221200000012283d52677d92a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59e89745e49341f0000000000000e1e2c3c495a62727e89939ca4a6abadafb0afaeaca8a69d958b8175635b4a3d2d1e0e000000000000000000000000000000000000000000000000000000000f243a4f647a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da3b5bcab947f6a5b4a3d4d62788da2a38d78634e3c494d5c646b655d4b3f2e1a0a000000000000000000071c3043546d8297acc5ac97816c573b2a18050000000a1f33465871869bb0c2a8937e69533a2a180400000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000000000000000000000000000f1f31424b617586989faaa5a5a195806b5e4c39240f00000000000000000000000004152535455260687a848f999fa9aaadafb0b0afaeaba8a69d968e847a6c6057493c2c1906000000000c1c30414d5b63737e88949ca4a8abaeb0b0afadabaa9f988f8276635a493b2b180400000012283d52677d90909090909090909090909090909090909090909090909090909090909090909089745e49341f000000000000000e1e2c3c48546069757e868c9196989a9b9a9897938e8880776c60564a3d2d1f0f00000000000000000000000000000000000000000000000000000000000d22374b5c64656565656565656565656565656565656565656565656565656565656565625947341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a70859bb0c0b39e8979635b4c4c61768baaa48f7a644f4d5a626d79807b655d4b3828160200000000000000000b20354a6073889db3b8a7907b65503b2610000000000417293a556a7f94aac2af99846f5847331f0a00000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000000000000000001131e3246576177838b8f909090908c7c66513c27110000000000000000000000000007172735424e5c646f7a838a9095989a9b9b9a9996928e8881796f645c4b45392c1e0e0000000000001323303d4a556068767f868d9296999a9b9a9896908b837a6e6158493c2c1d0d000000000d22374c62777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a65503a251000000000000000000e1e2b36434a57616871777c818384868583827e79736b62594b45382d1f0f010000000000000000000000000000000000000000000000000000000000071b2e3e4b4f5050505050505050505050505050505050505050505050505050505050504c473b2a18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c51667c91a2b4b9a79d87796a615857748a9fa6917b665b636c78828c958c7b655645321e09000000000000000316283950657b90a6b8b39e8874604b35200b00000000000e23384d63788da4b5b49f8a77614c37220f00000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000000000000000000031629394759616e777a7b7b7b7b7b7a644f3a240f0000000000000000000000000000091724313e4a4e5c646e767b80838586868583817d79746c635b4f4a3e32281b0e0000000000000005131f2d37444b57616971787d818485868583807b766e645d4c463a2c1e0e00000000000b1f34485962656565656565656565656565656565656565656565656565656565656565656565655d4b37230e0000000000000000000e18253039464b535962676b6d6f70706e6c68635b564c483b32281a0f010000000000000000000000000000000000000000000000000000000000000010202e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b37342a1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394c5e70859ba8b9b6a59d8a80766e6973889ea7927d6a7078818b989faa9c8674604b36210b00000000000000091e3246576d8297adc2ac97826d5544311d0800000000000c2135495b71869cb1bbaa937e69533d2d1a07000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c271200000000000000000000000000000000000000000b1b2a3b474c5861646565656565645c4b37220d0000000000000000000000000000000614202d363e4b4f5861666a6d707071706e6b686360544e4a3d362d1e160a000000000000000000010f19273139464c545a62686c6f70716f6e6b6661584f4b3f33291c0e00000000000005182a3b484c505050505050505050505050505050505050505050505050505050505050505050504b3f2e1c080000000000000000000008131c2932363b484d5156585a5b5a5957534e493d37342b1e160a00000000000000000000000000000000000000000000000000000000000000000002101b2224262626262626262626262626262626262626262626262626262626262626221f180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d30404e63798a9eabbab6a89f958a847e7c879dac97817f858c979faab5b6a496806b56412b16010000000000000c21364b6176899eb4b6a4907b655037271501000000000006192c3c546a7f94a9bab09b86715b4a36210d000000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000013293e53687e93a8bca6917c67513c27120000000000000000000000000000000000000000000c1d2a343a474c4f50505050504f4b3e2e1b0700000000000000000000000000000000010f1a212e373a464c5155585a5b5b5a5956534e4a4336362d221b100300000000000000000000000009151d2933363c494d5356595b5b5a5856514c463a372e1f170c00000000000000000d1d2a34373b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a372e2111000000000000000000000000000b161e212b34373c414345464543423e39362c2220180d03000000000000000000000000000000000000000000000000000000000000000000000000070d0f1010101010101010101010101010101010101010101010101010101010100d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001221364a5b667c8d9fa9b7bab4a99f9993909da5b19f97949a9fabb4bbb4a99f927f6a553f2a15000000000000091c2f3f53687d92a8b9b19c8773604a35200b000000000000000e22374c62778a9fb4b5a38e79634e3b2a18050000001b30455b70859ab0b49f8a745f4a351f0a00000000000000000000000000000313293e53687e93a8bca6917c67513c2712000000000000000000000000000000000000000000000c181f2a33373a3b3b3b3b3b3a372e20100000000000000000000000000000000000000007101b222933363b40434546464544413d39353025211a0f07000000000000000000000000000000010b171e212c35383d414445464543413b363329221b1004000000000000000000000d181f2226262626262626262626262626262626262626262626262626262626262626262625231c11030000000000000000000000000000030a0d182022272c2e2f31302e2d2923211a0f0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c5e677d8b9da6b4b9bab4aea9a5b2b7bdb1aca9b0b5bcb7b2a39b8b7d6a61503c27130000000000000e23384c5d71869cb1baa8937e695443301c07000000000000000b1f3447596d8398adc1ad97826d5947341f0c0000001b30455b70859ab0b49f8a745f4a351f1a14120c0300000000000000060c0e181a293e53687e93a8bca6917c67513c27120000000000000000000000000000000000000000000000040c181f2225262626262624221b1002000000000000000000000000000000000000000000080b171f21262b2e303131302e2c2823201c13080700000000000000000000000000000000000000030a0e192023282c2f3031302e2b26211f170c0800000000000000000000000000050b0d101010101010101010101010101010101010101010101010101010101010101010100e0800000000000000000000000000000000000000050b0d1216181a1b1b1917130e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000a131a1c2020202020202020202020202020202020202020202020202020201f1d180f0300000000000000000000000002090b0f131516161513110c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30404d5f677a87959ea8b2b6c3bebbc6c9cec5c1c7bab4afa59d938579675f504333200d0000000000081b2e3f50657b90a4b5b49f8a76614c362513000000000000000005182a3b4f647a8fa3b5b49f8b77624c3a2a180400001b30455b70859ab0b49f8a745f4a352f2f292720140700000000010f1a21232d2f2f3e53687e93a8bca6917c67513c271200000000000000000000000000000000000000000000000000040a0c0f10101010100f0d0700000000000000000000000000000000000000000000000000040a0c1115181b1b1c1b1916130e0b0700000000000000000000000000000000000000000000000000060c0d13171a1b1c1a1916110c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b272e3135353535353535353535353535353535353535353535353535353535322c211303000000000000000003090b151d2025282a2b2b2a2826211f170c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122231414d5c6475808a959ca5a7aaadb1b5c1b9b4a8a99f9991877e73635b4d413325150300000000000e22374b5d6f8499afbaa997816c58463318080000000000000000000d22374b5d71859bb0baa995806b5847331f0d00001b30455b70859ab0b49f8a745f4a4444443f3b322514040000000f1f2c35384344444453687e93a8bca6917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131a1c2020202020201916100600000000000000000000000000000000000000000000000000000000000000000a131a1c202020202020191711070000000000000000000000000000000000000000000000000000000a1b2b3943464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a473e31210f000000000000030a161e212832363a3d4041413f3e3b363329211f170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041323313e4a57616a777f878d9295989ba3b5a89e938e89847c746860544a3d302315070000000000091c2f3f4f657a8fa1b3b49f8b78624d3a291700000000000000000000081b2e3f51667b90a3b4b49e8977614c3b2b1805001b30455b70859ab0b49f8a745f5a5a5a59544f433222120000061a2c3d494e585a5a5a5a687e93a8bca6917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c10131516161513100c0a04000000000000000000000000000000000000000000070d0f2020202020201816100600000000000000000000050b0d2020202020201b181208000000000000000000050b0d11131416161513100c0a0400000000000000000000000000000000000d1b272e313535353535352e2b23180a0000000000000000000000000000000000000000000000000000000000000d1b272e313535353535352f2c24190a000000000000000000000000000000000000000000000000000013273949565c6060606060606060606060606060606060606060606060606060605f5b4f3e2c1800000000000a161e28323638454b4f525556565453504c463a37332a1d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000513202e39464b59616a72787d8082859bb19e8a7e79756f6660554b43362d1f13050000000000000e23384c5d70849aafbaa997816c5a48351c0c00000000000000000000001024384c5e70859bb0b9a896806b594834200b001b30455b70859ab0b49f8a746f6f6f6f6f69614f402f1d09000c2135495b636d6f6f6f6f6f7e93a8bca6917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f181f2225292a2b2b2a2825211f170e0c060000000000000000000000000000000002101b22243535353535352d2b23170900000000000000000d192022353535353535302d251a0c0000000000050b0e19202226282a2b2b2b2926211f170c0a04000000000000000000000000000a1b2b3943464a4a4a4a4a4a434036281806000000000000000000000000000000000000000000000000000000000a1b2b3943464a4a4a4a4a4a444036291907000000000000000000000000000000000000000000000000001a2e43566771757575757575757575757575757575757575757575757575757575746d5b47321d00000003111b283238454b52566064686a6b6b6a68666158544c473a32281a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b29333a474c555a62676b6d7c91a69f8974646055514b44373026180f010000000000000010263b50657b90a2b4b49f8b78624d3c2b19000000000000000000000000091d2f4050657b90a2b4b49f8a77624d37220d001b30455b70859ab0b49f8d8484848484847f695e4c38240f000e23384e6379828484848484869cb1bca6917c67513c2712000000000000000000000000000000000000000000000000000000000000000000000000000007101b22242a34373b3e404141403e3b37332923211a0e07000000000000000000000000000010202d36394a4a4a4a4a4a423f352717060000000000000d1d2b344a4a4a4a4a4a4a4541372a1a080000000d181f222b35383c3d3f4041403e3b37332a221f180c03000000000000000000000013273949565c6060606060605853463623100000000000000000000000000000000000000000000000000000000013273949565c606060606060595447362411000000000000000000000000000000000000000000000000001c31465c71868a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b745f4a351f00000614212f39454b5660686f757a7d7f80807f7d7b76716a61584b45382c1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e2a34373c494d5255657a90a5a88b75604b44373531261c1408000000000000000004192f44596e8499aeb8a696816c5948341e0e000000000000000000000000001223384c5e70849aaabaa9947f6a553f2a15001b30455b70859ab0bcab9f999999999999917b66513c2611001c31465b71859899999999999ca4b6bca6917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000008131c202d36393b474c50535556565553504c473a38352c221b10030000000000000000000000071b2d3e4a4f606060606060585245352310000000000005192b3b485e6060606060605a554837251200000d1d2a34373c484d51535456565553504c473a37332a1e160a000000000000000000001a2e435667717575757575756e6453402b16020000000000000000000000000000000000000000000000000000001a2e435667717575757575756e6554402c17020000000000000000000000000000000000000000000000001c31465c71869b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8b745f4a351f00031425323f4c57606a757d848a8f929596969493908b867f766b6056493d2c1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c181f222c35383d4e64798ea3a18c77624c3727201d140901000000000000000000041a2f44596f8499a3b39d8876614c3b2b190000000000000000000000000000091c2f404e63798c9fb2a195806a55402b15001b30455b70859ab0b0b0b0afafafafafa9947e69543f2914001f34495e74899eafafafafafb0b0b0b0a6917c67513c2712000000000000000000000000000000000000000000000000000000000000000000000110182530353e4a4e56596165686a6b6b6a68656158554e493d362d1e160b000000000000000000000d22364a5c707575757575756d64523f2b1601000000000b2034485970757575757575706655412d180005182a3b484c5a5a626668696b6b6a68656158544c473a32281a0f0100000000000000001c31465c71858a8a8a8a8a8a826e58432e19030000000000000000000000000000000000000000000000000000001c31465c71858a8a8a8a8a8a836e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b49f8a745f4a351f000c1f32434f5d65757f8892999fa9a7aaababa9a8ab9f9b948a8074635b493c2b1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e192023384d62778daba38e78634e39230e08010000000000000000000000000d22384d627885939e927d675846331d0d0000000000000000000000000000001121364a5b6b80969d918375614c36210c001b30455b70859a9b9b9b9b9b9b9b9b9b9b947f69543f2a14001f34495e74899b9b9b9b9b9b9b9b9b9b9b917d67513c271200000000000000000000000000000000000000000000000000000000000000000009151d2e36434a515c646b71777b7e7f80807f7d7b76716b635b4f4a3e32291b0e0000000000000000000f24394f64798a8a8a8a8a8a826d58422d1803000000000d22374d62788a8a8a8a8a8a84705a45301b000b1f344859626f73787b7d7f8080807e7b76716961584b45382c1f1002000000000000001c31465c71869b9f9f9f9f98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869b9f9f9f9f99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6cad1c8c5babababababababababababababababababab49f8a745f4a351f0012273b4f61697b87949ea7afb4b4aeaaa8a7a8abb0b4b1a89f968679635a48382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b21364b60768b9fa48f7a654f3a251000000000000000000000000000000b2035485a62737e8984705f4d3a291700000000000000000000000000000000071a2d3d4b617587877c6f615746331e0a00182d42576d818686868686868686868686857d67523d2812001b30455a70848686868686868686868686857b65503b251000000000000000000000000000000000000000000000000000000000000000000b1927313e4b546067717980868c90939596969593908b8680786f645c4b46392c1e0f01000000000000000f24394f64798e9f9f9f9f97826d58422d1803000000000d22374d62778c9f9f9f9f9a85705a45301b000d22374c627783888d91929495969593908b867f776b6056493d2e2010000000000000001c31465c71869bb1b5b5ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1b5b5ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71859bb1c6d1c0b4afa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59f8a745f4a351f0014293f54697e8d9da5b3b7b3a89e9995939293959ba3b0b5b4a49c8878625645311d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566f839293917c66513c2611000000000000000000000000000005192b3c485560697778624d41301b0b00000000000000000000000000000000000f1e324657647975675f4c463929170300152a3f52636d717171717171717171717171675f4d39251000182d41556670717171717171717171717171655d4b37230e000000000000000000000000000000000000000000000000000000000000000b1b2937444b5c64727c868e969ca4a5a8aaababaaa8ab9f9c958c847a6c6157493c2d1f0f000000000000000f24394f64798ea4b5b5ad97826d58422d1803000000000d22374d62778ca2b5b5af9a85705a45301b000d22374c62778c9ea7a6a8a9ababaaa8ab9f9b948a8075635b4b3e2e1e0e0000000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c8b4a29a90909090909090909090909090909090909090908a745f4a351f0013283d53687d92a2b4b4a69d9389847f7d7d7e80858e9ba3b4b5a69c8674604b382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384b60747d7e7e79634e38230e0000000000000000000000000000000e1e2b37444b5962625a49352313000000000000000000000000000000000000031629394a5c6461574d4033291b0b00000f23354552575b5b5b5b5b5b5b5b5b5b5b5b524d41301e0a0012253748555a5b5b5b5b5b5b5b5b5b5b5b5b504b3f2f1c080000000000000000000000000000000000000000000000000000000000000417293a4655606b7a85919ba3abb1b5c2bdbebcbcbec9bcb5b1ab9f998d8175635b4a3d2d1e0e0000000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000b20354b60758a9fb4c5bdbec0c0bfc9bcb5b1a89e958679645c4b3c2c190900000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c5af9a847b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b65503b2510000b20354a6072859aa79f96887e766f6a6867686b707a859aa2b4b6a4947e695645311d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e32455660676969635b4935210c000000000000000000000000000000000e1926313b484c4d493c2c1905000000000000000000000000000000000000000b1b2d3d4a4e4b4639301e170b000000061727353f424646464646464646464646463d393023130100081a2a3741454646464646464646464646463b372f2111000000000000000000000000000000000000000000000000000000000000000a1f3346586173808c9ba3b0b5c1bcb5b0aca8a7a7a8aaafb4bbbcb5ab9f978679635b4a3c2b1a0a00000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00081c30435473889db3b4b0aeaeb0b2b7c3c9c6b9b4a49c8a7a645a4937271502000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e65656565656565656565656565656565656565655d4b37230e00071c304354637989928c817669615755535253565c6474849aaabbb39e8975604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002162838454b5254544e493d2c1a06000000000000000000000000000000000009141d2a343738352c1e0e0000000000000000000000000000000000000000000f1f2d36393632281b120300000000000917232a2d31313131313131313131313128251e13050000000c1a252d3031313131313131313131313125231c1103000000000000000000000000000000000000000000000000000000000000000c21364c617684959fabb5c1b8b3ab9f9b9693929193959a9faab3b9bcb5a49c8979635a4838271502000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00011426365c71869ba99f9b99999a9da5aab3b9c5c2b6a89e8978635544311d0b000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58505050505050505050505050505050505050504b3f2e1c080000132536495b63797d796c61574b46393e3d3e3e4a5663788c9fb4b8a7907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832363d3e3e38352c1f0f00000000000000000000000000000000000000010d181f222320190e00000000000000000000000000000000000000000000010f1a2124211e160b0000000000000000060f15181c1c1c1c1c1c1c1c1c1c1c1c12100a0100000000000812181b1c1c1c1c1c1c1c1c1c1c1c1c100e080000000000000000000000000000000000000000000000000000000000000000000b21364b6075869ca9babab4a79e958c86817e7c7c7e80858b949ea8b4c0b6a79e8878625645311d0d000000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0000162b40556b808e8e8986848485888d949ea7b4c0c6b9a79b8574604b392916030000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58433b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b372e211100000008182c3d495b6368635b4b463933292828292d38495a70859ab0c5ab96816c56412c1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2128292923211a0f01000000000000000000000000000000000000000000050b0d0d0c0600000000000000000000000000000000000000000000000000070d0f0c09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455663798b9fafa99f95898078716c696767696b70767f899aa2b3bfb8a69b8574604b3b2b18050000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000013283d50626b797975706f6e7072787f899ba2b4c1c5b5a3947f695746321e0a0000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e2626262626262626262626262626262625231c1103000000000f1f2c3c494d534e4a3d33291e171312131c2c3c576d8297acc2ae99846e59442f1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1214140e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1f1f1f1f1f1f17150f0500000000000000000000000000000000000000000000000000000000031628384a5b697e939a978a80766b625a57535252535558616a778499a1b3c3b5a3957f6a594834200a0000000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00000d213344505c6464605559595b5a636a77849ba3b5c8c1b39e8975614b36210d0000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e19101010101010101010101010101010100e08000000000000010f1e2c35383d39362d1e170b0e192025303947596e8499aec3b09b86705b46311b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f1214151413110f0b0902000000000000000000000000000000000000000000000000000000000002080b0f1214151413110d0c060000000000000000000000000000010f1a21243434343434342c2a221709000000000000000000000000000000000000000000000000000000000a1a2d3d4f60697e8581786b61574d493c3e3d3c3e3a464c5961748399a5b6c1b49f8b77624d3828160200000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0000041526333e4a4f4e4b4437443c494d586175859baabbccb8a7937e69533b2b180500001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000000000e1921232823211a0f1a21242b3536434a576277899eb4c5b09b85705b46301b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f1214151514120f0b0802000000000000000000000000000000000000000000000000000000000000040a0c151d202427292a2a292724211e160f0d07000000000000000000000000000000000000000000000001080b151d202427292a292826232019120b0902000000000000000000000f202d3639494949494949423e34271705000000000000000000000000000000000000000000000000000000000f1f32424f6069706c625a4c4639352c2927272929333a47566176879cb2c1baa996816c5645321e0900000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0000000715202d3639393531272f2c353a475763798b9fb4c9c5b09b8671594834200b00001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000060c0e130e171f212d36393c494d54606675849aa8b9c7ae99836e59442e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d161e212427292a2a292724201d150c0a0300000000000000000000000000000000000000000000000000030b171f21273136393c3e3f3f3e3c3936322824221b1007000000000000000000000000000000000000000008141c20273136393d3e3f3f3d3b38352c27211e160a0200000000000000071a2d3e4a4e5e5e5e5e5e5e57524534220f0000000000000000000000000000000000000000000000000000000001142432424f535a574d493c3329201914121214171f2a384658657b90a3b5c7b39e8975604b36210b00000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0000000002101b222424201d151919202a394a5b6d8298adc7c9b5a38c77624d37220d00001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000000000000000d181f2933373d4a4e555a626a737c879aa2b4c6baa9947e69543f29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d181f22283236393c3e3f3f3e3c39363127211e170b03000000000000000000000000000000000000000000000b161e29333638454b4f5254545453514f4b45383a372e201c13080000000000000000000000000000000003121826303537444b4f5254545453504d493c3c3632281e160a0000000000000d21364a5c647474747474746c63523e2a150000000000000000000000000000000000000000000000000000000000061424323b3e454238352b1e170b0600000000040c1a293a4c5d71859bb0c6b9a8917c67513c271200000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000000000000070d0f0f0b080100060c1b2d3d50657b90a9bacdc1a7927d67523d281200001c31465c71869bb1c6c3ad98836e58432e191515151413120f0c0a040000000000000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000000000005131d2a343a474c535b636a71787f86919da5b4c0bfb49f8a77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d181f2a343738454b4f5253545453514e4b44373633291e160b0000000000000000000000000000000000000003111b29323a464c5356606467696a696866646056564f4b3e353025180f01000000000000000000000000000a161e3036434b5155606467696a696866625a59524b453832281a1003000000000f24394e647a898989898989816c57422c1702000000000000000000000000000000000000000000000000000000000006141f2629302c2320190e0300000000000000000b1b2f3f53697e93a8c6c6ac97816c57422c1700000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000000000000000000000000000000000f20354b6074899fb4c9c1ab96816c56412c1701001c31465c71869bb1c6c3ad98836e58432e2a2a2a2a2a292725211f17120b090200000000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000000061423303b484c58616971797f868d949ca4b2b7c3bdb0a0947f6a594834200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131d2a343b484c5456606467696a6a6967646055534c463932291b1103000000000000000000000000000000000614212f39464b5861686f75797c7e7f7f7e7c7975716b645c524a43362d1f130500000000000000000000000c1b2832404c5460666e75797c7e7f7e7d7b78736e6760564b45382e2114060000000f24394f64798e9e9e9e9e97826d58422d1803000000000000000000000000000000000000000000000000000000000000020c12141b170d0b0600000000000000000000001123394e63798ea8b9c6b19b86715c39291703000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b00000000000000000000000000000000081d31445570859bb0c5c4af9a856f5a45301a05001c31465c71869bb1c6c3ad98836e58433f3f3f3f3f3f3e3c3a36332927211e160a050000000000000000000000001c31465c71869bb1c6c3ae99846e59442f19040404040404040404040404040402000000000000000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000004142432414d59626c767e868e959ba3a9b1b6c2c1b4b09f968273604b3b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c313b474c5962697075797c7e7f7f7e7c79756f6861574b46392f2114060000000000000000000000000000071524323f4c57616b767e848a8e9193949493918e8a86807a716760544a3d312314060000000000000000000c1c2939454b5e66737c83898e9293949492908d88837c756a60564b3f3124140500000f24394f64798ea4b3b3ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000050200000000000000000000000000000c21364a5b74899eb4c9b49e89745746331e0a000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0000000000000000000000000000000001142637576d8297acc2c7b19c87725c47321d00001c31465c71869bb1c6c3ad98836e585555555555555453514f4c463a3c36322820180d02000000000000000000001c31465c71869bb1c6c3ae99846e59442f19191919191919191919191919191917150f05000000000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000000122232424f5f6777818a939ba3aab1b5c2c6b9b4aca39b908173605544311d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530414d59626c777e858a8e9193949493918e89847d766b61574c3f3224140700000000000000000000000005152532434f5d65758089939a9fa9a7a9a9a9a8a6aa9f9b958f867d72635b4e4131241402000000000000000a1a293a4757606d7c8691999ea8a7a9a9a9a8a5a79e9891887f74655d4e4231231301000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d5d72889db2c7b9a88b76614b36210c000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0000000000000000000000000000000000162b41566b8096abc0c9b39e89745e49261401001c31465c71869bb1c6c3ad98836e6a6a6a6a6a6a6a69686764615858514b4538342b1d150a0000000000000000001c31465c71869bb1c6c3ae99846e59442f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2c2a2217090000000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000a1a2f404f61697d89979fa9b1b5c1c7bab4aea89e978f857b6c6055443727150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a5f6777818a949b9faaa7a8a9a9a8a6a99f9a93898075655d4f42322514040000000000000000000000122332434f61697b88959ea8afb4bac7bbb4b3b4babbb4b1aba39b928579685f4e42311f0b000000000000031628384758617582919ca4aeb4b9c5b8b3b1b1b3b8b3aea69e94877b68604e42311e0b000f24394f64798ea4b9c2ad97826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6c6a18c77624c37220d000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b0000000000000000000000000000000000152a3f556a7f94aabfcab49f8a755443301c08001c31465c71869bb1c6c6b19c867f7f7f7f7f7f7f7f7f7e7c7a76726d6760564d483b31271a0d00000000000000001c31465c71869bb1c6c3ae99846e594444444444444444444444444444444444413e3427170500000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000021527384c5e697f919ea8b4bac7bab4aea99f999289827a70655d4b443727190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101c304354606c7d89979fa9b0b4bbb9b4b2b2b4babab4afa89e95887b69614f43322212000000000000000000000d1d30414f616a7f8d9da6b4b9b8b3aba5aa9f9e9fa9a4a9b1b5b5b1a39b8a7d68604e3b2611000000000000091e32455661768598a0b1b6c0b4b0a7a79e9c9c9ea6a8b0b5b3a59c8b7e68604e3a2511000f24394f64798ea4b9c2ad97826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b5c72879cb1c7c6a28c77624d37220d000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000000000000000000000000000000000014293e54697e93a9becebbaa8a75604b35200b001c31465c71869bb1c6c9b5a49c94949494949494949493918f8b87827c756c62594b45382b1d0e000000000000001c31465c71869bb1c6c3ae99846e59595959595959595959595959595959595957524534220f00000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000091d314556667c8d9fb3b9c6bab4a99f99918a837d766d655d504b3f3127190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102032434a607281929ea7b4bab3aea7a89e9d9d9fa9a8b0b4b9b3a69d8d7f69614f402f1d0c000000000000000005182b3b4d5f6a7f949fabb7bbb4a69e96908c8a898a8b8f949ca4aeb3b5a99f927e68533e2913000000000009192f404b6074859ba3b2beb9b3a29a928c898687888c929ba3b3b6aa9f927d68533d2813000f24394f64798ea4b9c2ad97826d58422d180c1013141513110d0b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485973889eb3c8b9a88b76614c36210c000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000000000000000000000000000000000014293e54697e93a9bed8b5a08a75604b35200b001c31465c71869bb1c6d2c2b5b1aaaaaaaaaaaaaaaaa9a8a6a4a59d97918981776a6056483c2c1e0e0000000000001c31465c71869bb1c6c3ae99836e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c63523e2a1500000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000b20364b6074879dabbcc3b6a99f958a837c766e6761574f4b3f372e1d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4f616d81969fb3b9b7b2a199928c898788898c939ba3b4b9b7ab9f937f695e4c3b2a1804000000000000000b20344859677d8d9fb4bcbaaa9f9588817b76747374767a7f868f99a1b0b5a498836d58432e1803000000011426374c5e6d8297a3b5c1b9a79e92857d7673717273777d86919ea6b4a397816c57422c17000f24394f64798ea4b9c2ad97826d58422d1f2126282a2a29262320190e0b0500000000000000000000000000000000000000000000000000030000000000000000000000000e22374d62778ca7b8c9b49e89745746331e0a000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6dbd2c9c5bdbdbdbdbdbdbdbdbebdbcc3b7b2ada79e968a7f74625a493c2c1c0c00000000001c31465c71869bb1c6c8b39d8883848484848484848484848484848484848484816c57412c1702000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000011263c51667c91a5b6c8b6a59d8b80776e676157524b4639372e231c110200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c697f949fb0bdb7a59d90847d7774727274777e85929ea8b9bcb49f8d7c665947341f0e000000000000071a2d3e4d6277899eabbcbaa99f8c80766b6561585e5761656a717a838f9ba39c8675614b36210c00000000081d314455667c90a0b1c1b9a89e897d706861585c5c596268717c889aa29b8574604b36200b000f24394f64798ea4b9c2ad97826d58422933363b3e3f3f3e3b38352b2220190d0300000000000000000000000000000000000000050b0d1319150f0b0902000000000008111f304052687d92a7c5c6b09b86715b39291703000f24394f64798ea4b9c2ad97826d58422d1803000000000d22374d62778ca2b7c5af9a85705a45301b000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6d2c1b5b0a8a8a8a8a8a8a8a8a9abaeb3b8c4c5b9b3a99f958578635a493a2a1704000000001c31465c71869bb1c6cbb7a69d9999999999999999999999999999999999999987725c47321d07000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000002182d42576d8297acc3bbaa9d87796b6259524b4639363229221b120c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d2f404e647a8c9fb4bdb7a59d877b6f6761585d5d596268737d8a9ea9babcab9e8877614c3c2c190600000000000d21364a5c6e8398a7b9beb49f8b7c6b6157504c473a464b4f545d646e7a858d8879635746321e09000000000b20354b6073869cb1bebfb39e8a7a675f524c473a3b484d535f6777848e8778625645311d09000f24394f64798ea4b9c2ad97826d58423a464c5053545453514d483c38342b1e160b000000000000000000000000000000010a0d182022282e2b25201d1516141415161b222f3d4c5e70859bb0c5c4ac96816c57412c1700000f24394f64798ea4b9c2ad97826d58422d1803000000000d22384d62778da2b7c4af9a856f5a45301a000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c9b5a39b92929292929292939495989da6acb4bac7bab4a39b8778635847331f12000000001c31465c71869bb1c6d5c4b7b3aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae9c87725c47321d07000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000051a30455a6f859aafc4b49f8b79635b4c473b363228211e1b222427211f170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24384c5e70859baabbbbaa9d8778655e524c473a3b484d5460687b8b9fb4c1b8a797826d5a4935200800000000031628394e64798c9fb5c5b2a0917d675e4b463937332932363a3f4b4f5d65717876635b4939281603000000061a2c3d52677d92a4b6c6b2a0917c665c4d413733292b3437414d596272787562594838271502000f24394f64798ea4b9c2ad97826d584d5158616568696a6866625a554d483c32281b0f0100000000000000000000000005121d242b34373d43403a3631272b2a292a2b2e373f4b5b667c91a3b5c9b7a6907b65503b261000000f24394f64798ea4b9c2ad97826d58422d1801000000000e23394e63788ea3b8c3ae99846e59442f19000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c5b09b857d7d7d7d7d7d7d7d7f8083888e979fa9b5c1c1b5a69d8776614c413018080000001c31465c71869bb1c6dbd2c9c6bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb19c87725c47321d07000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000071c31475c71869cb1c5b09b85705b493d342a211e161b222d36393d3633291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c51667c91a3b4c8b49f8c7a645a4c4037332a2b3436434a5d687d92a3b4c5b49f8b78634d36261401000000091e3246576d8297abbcbbaa98826d5f4d403329211f171e21252e373f4b4f5b636157493d2c1b0b000000000c2135495b70859bb0c2c1ae98836e5e4c3e30211f17182022303b485460636157483b2b1a0a00000f24394f64798ea4b9c2ad97826d585f6770767b7d7f7f7e7b78726b625a4b46392d1f10020000000000000000000001122330393b484c5358554f4b4538403f3e3f413e4b4f5d6579899eb3c1c3b29d8874604b35200b00000f24394f64798ea4b9c2ad97826d583d2e1d140900000010253a50657a8fa5bac2ad97826d58422d18000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e68686868686868696b6e7379828b9ba3b3bfc4b7a599836f5f4d3626140100001c31465c71869bb1c6d2c1b5b1a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a79c87725c47321d07000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000061b30455b70859ab0c3ae99846e54433022201e21242d363e4a4e524c463a2918080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6f849aafc1bcab96816c5c4a3c2f221f18182025303f4a6072859bb0c5bbaa96816b5443301c080000000c21364b61768a9fb4c9b49f8b78624d41301e170c0a04090c101b222e373d494e4c46392c1f0f00000000000e23384e63788da3b5c9b5a38e79634e402f20130a04050b131d2a36434a4e4b46392b1d0d0000000f24394f64798ea4b9c2ad97826d63707c858b9093949493908d8780786b61574a3d2e2010010000000000000000000a1d30414d515962686e6a646056585554535456595c646e7b889ea7b9c8b6a5947f695544311d0800000f24394f64798ea4b9c2ad97826d5b4b3e3126191312131b2d3d54697e93a9bec0ab96806b56412b16000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e585353535353535456595c646d788599a1b3c2c3b3a1917c675443301c0800001c31465c71869bb1c6c9b5a39b9292929292929292929292929292929292929286725c47321d07000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000003182e43586d8398adc7b29d8773604a4037353236393e4a4f5c64676158463626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788c9fb5cab49f8c77624d3d2d1e110a040508131c304354667c91a7b8c8b39e8874604b35200b00000011273c51667c91a9bac3ad98836e5a483423130300000000000008111c232c35383633291b0f01000000000014293f54697e94a9c1c5b09b85705b4a3622120200000000000d18253035393632281b0d000000000f24394f64798ea4b9c2ad97826d7984919a9faba8a9a9a8a6a59c958b8075635b4b3f2e1f0f0000000000000000001024394d5f6771777d83807a75716d6b69696a6b6e737a838c9ea6b8c5bbaa9d8774604b3727150100000f24394f64798ea4b9c8b39d8879645c4b44372f2927282d394a5c6f849aafc4c2a7917c67523c2712000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58433d3d3d3d3e3f403d4a4e5a63748399a4b6cabfb19c8673604b35200b00001c31465c71869bb1c6c6b19b857d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7c66513c271100000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000013283d52687d92a9bab7a5927d675e524d4a454b4f545c646f797c76615443301c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93abbcc4af9a846f5948341f0f0000000000001325364b6075899eb3c8b8a68f7a644f3a250f000002172c42576c8197acc7c3a6917c66513c2b191515151515151515151515151a2123211e170b07000000000002152838596e8399aec3c9a9947f69543d2d1a040000000000000008131c2023211e160b00000000000f24394f64798ea4b9c2ad97827b8a9aa2afb4b3b1b2b4bac3b6b2a99f968679645d4b3d2c1909000000000000000012273c51677d858b9298958f8a8683807f7e7f8083888f989fabb8c4b9ab9f8c7a6456453219090000000f24394f64798ea4b9cbb7a69d897a6a60554c403e3c3d3d4a5764798d9fb5cab6a48d78624d38220d000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e282828282a2b2d363c49566175869cb1c1cab6a4907b65503b261000001c31465c71869bb1c6c3ae99836e686868686868686868686868686868686868665e4d39240f00000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000c21374c61768a9fb4c2b49f8a7c6f67626056606469707a848e928473604b3a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737596e8398aec9bea8937e69533b2b1801000000000000081d3144556d8298adc2c5a9947f6a543f2a15000004172a3a5b70869bb0c5b6a48c77614c372b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a27201c1308000000091d32455672889db2c7bcab8f7a65503a251000000000000000000000070b0e0c09030000000000000f24394f64798ea4b9c7b29d878b9ea8acaa9f9d9c9d9fa9abb4babab4a49c897b645b493727150100000000000000142a3f54697f949fabadaaa99f9b989594939496999ea6aeb4bcc2b5a89e8d7d675c4b382815000000000f24394f64798ea4b9d5c4b7a79e8b7f73655e57535152545b6375859babbcc4b19c86715a4835200b000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e1913131314161a212c384657667b90a3b5c9c2ad97826d583b2a1805001c31465c71869bb1c6c3ae99846e595252525252525252525252525252525252514d40301d0900000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000a1f3347586a7f95a3b5baa89f91847c77757476797e858f99a1a2937e685847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572879db2c7c6a48f7a654f3a2510000000000000000215273754697f94a9bec3ae98836e59432e1904000a1f33475874899eb4c7b29c8772594740404040404040404040404040404040404040403d353025180800000b20364b60758a9fb5cab59f8b76614b36210c000000000000000000000000000000000000000000000f24394f64798ea4b9cab7a59d9fa99f97908a8886888a8f969fa9b4c0b6a79e8979635544311d0e0000000000000011263b51667b90a6bcc9c7bab4b0adaaa9a8a9abaeb3b8c5c2b6b1a49c8a7c675f4d3e2e1a0a000000000f24394f64798ea4b9d0bfb3aea99f94857b726c6867686a6f79859ba3b5c9b8a6937e69533c2b1905000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e190300000000070e1a29394c5e71869bb0c6c7b29d88725947341f0b001c31465c71869bb1c6c3ae99846e59443d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3c393022120000000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000417293a4b6074859ba5b3bab4a199918c8a8a8b8e939ba3aeb3ab9e8976614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cab9a88b76614c36210c000000000000000010263b50657b90a5bac6b19b86715c46311c00000c21374c61768ca8b9c4af9a856f5a555555555555555555555555555555555555555555524a4336251300000d23384d62788dabbcc9b39e89745746331e0a000000000000000000000000000000000000000000000f24394f64798ea4b9d4c3b7b2a29a8a817b75737172747a818a9aa2b4c0b8a79b8573604b3c2b19060000000000000d22384d62778da7b9ccbeb1adafb3b7c4b9bbbbc9bcb5b1aca49c918679665e4d4131201000000000000f24394f64798ea4b9c7b3a1999ba3a39b9087817e7c7d7f848c9ba3b5c1bcb39e8876614c36210e00000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e19030000000000000b1b2f40556a8095aabfcbb7a58c77624c37220d001c31465c71869bb1c6c3ae99846e59442f28282828282828282828282828282827241d12040000000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000c1e32455662778799a1b0b5b3afa7ab9f9fa9a4a9b0b4b3a69d8d8073604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788dabbcc9b49e89745746331e0a00000000000000000e24394e63798ea3b8c8b39e89735e49271501000e23394e63788ea3c6c2ad98836d6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a67605443301c07000f24394e64798ea3c9c7b29d87725d39291703000000000000000000000000000000000000000000000f24394f64798ea4b9d2c2b3a19984786c6560555c5460646c78849aa2b4c4b5a3947f6a5a4835200a0000000000000b2034485a74899eb3c9b1a0979a9da6a3a4a5a6a5ab9f9c9790867c73635b4c403123130200000000000f24394f64798ea4b9c4ae99838598a0b0a59d97939192949a9faab5c1bcaf9e917c665746331e0a00000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e19030000000000000012253b50657a90a5bad4c3a48f7a644f3a250f001c31465c71869bb1c6c3ae99846e59442f191313131313131313131313131313110f0900000000000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000021628384759627683919ba3aab0b3b9b4b4b9b4b0aca69d93887c6b605443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c9c8b29d88735d3929170300000000000000000d22384d62778da2b7cab49f8a755544311d08000f24394f64798ea4b9c5b09b85808080808080808080808080808080808080808080807f7d72604a35200b000f253a4f647a8fa4b9c6b19c86715c47311c00000000000000000000000000000000000000000000000f24394f64798ea4b9c9b5a4998374625a504b4437434a4f5a6374849aa6b7c1b49f8a78624d38281502000000000005192b3c5b70859bb0c2ad978285888c8d8f9090908e8b87817b73676054493d302213050000000000000f24394f64798ea4b9c2ad97827683939ea8b2aca8a6a7a9afb4bbc2b5b19e95806b5e4c3929170300000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e1903000000000000000e23384e63788da3b8cdbba6917c66513c2611001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000a1a2a3b4758616e7c868f959a9ea7a1a2a89e9b9790887e75665e4b43362614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b9c7b19c87725c47321d0000000000000000000c21364c61768ba1b6cebbaa8a75604b35200b000f253a4f647a8fa4b9c9b5a39b9595959595959595959595959595959595959595959595917c67513c2712000f243a4f64798fa4b9c6b19c87715c47321c00000000000000000000000000000000000000000000000f24394f64798ea4b9c6b19c86756056483c36312730353c49566176889db2c3baa996806b5645321d09000000000000172d42576c8297acbaa48f7a6f737678797b7b7a7876716c6560544b43362c1f1204000000000000000f24394f64798ea4b9c2ad97826d727e8a989fabb0b3b9c5bab4b2aca49c90806b625140301b0b0000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e1903000000000000000c22374c61778ca1b6ccbca7917c67523c2712001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000000000d1d2a3a474c5f67717a8085898a8c8c8b8986817b756960564c4030261808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b9c7b29d87725d4825130000000000000000000c22374c61778ca1b6cdbaa98a75604b35200b000f24394f64798ea4c9d2c1b5b0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa947f6a553f2a15000e24394e63798ea3c7c8b29d88735d3c2b1905000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d5645382b201d151c202c384657677d92a4b6c7b39e8875604b36200b00000000000014293e53697e93a8bda8937e685861636466666563605757504b43363026180f0100000000000000000f24394f64798ea4b9c2ad97826d606977838c949a9ea7a2a99f9d9790867b6b625144342212000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e1903000000000000000e23384d63788da2b8cdbba6917c66513c2711001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000000000d1c2a33414d515d656b70747577777674716c6660564b45382f1c140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3c7c8b39e88735443301c0700000000000000000e23384d63788da2b8c9b49f89745443301c08000e23384d63788dabbcccb9a79e9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9ea6b8bfaa95806a55402b15000c22374c61778ca9bac9b49e89745a4835200b000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d5838281a0d0802070e1a29394d5f72879cb2c7b8a7927c67523d271200000000000010253b50657a90a5c4ac96816c574c4e4f5051504e4b45393b3530261c1408000000000000000000000f24394f64798ea4b9c2ad97826d5859626e787f85898b8c8b8a87817b73655d504434261604000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e1903000000000000000f253a4f647a8fa4b9d6c5a5907b65503b2510001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000000c181f30393f4b4f555b5560616261585b57514b453832281a12010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca9bac9b49f8a75604a35200b00000000000000000f24394f64798ea4b9c7b29d88725d48261401000b20364b60758b9fb5c9b39e89848585858585858585858585858585858584889eb3bea9947f69543f2a14000b20354a6074899fb4c9b9a88d77624d38220d000000000000000000000000000000000000000000000f24394f64798ea4b9c2ad97826d58422d1800000000000b1b3041556a8095aac7c5ad98836e583b2b180500000000000c22374c61778ca6b8af9a85705a3b383a3b3b3b3936322826201c14080100000000000000000000000f24394f64798ea4b9c2ad97826d58484d5a626a707476777674726c6660554b3f3326160800000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e19030000000000000a1a2e3e54697e94a9beccb9a78d78624d38230d001c31465c71869bb1c6c3ae99846e59442f19040000000000000000000000000000000000000000000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000000004121d242e373a4037444b4c4d4c463a423b3631271e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475974899fb4c9baa98d78624d38230d000000000000000012273d52677c92a7bcc5b09a85705b45301b0000091d31455672879cb2c7b29d88736f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f8499afc9a7927d68523d281300071c30435471869bb0c6c6a6917c6651372614010000000000000000000005080000000000000000000f24394f64798ea4b9c2ad97826d58422d180300000000001324394e64798ea9bac8b39e8873594834200b00000000000a1f33475873889db3b39e89735948342426262523211e16100b0801000000000000000000000000000f24394f64798ea4b9c2ad97826d58423c494d555b57616261585d57504b44372f2115070000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e190302020003090e1928384b5c6f849aafc4c9b39e8973604b35200b001c31465c71869bb1c6c3ae99846e59442f19060606060606060606060606060606060606000000000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000000000010a101b22252b27313537373633292c26201d150a0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b5b71869bb0c6c7a6917c66513625130000000000000005192b3b566b8095abc0c1ac97826c57422d17020002152738586d8398adc6b7a68c77625a5a5a5a5a5a5a5a5a5a5a5a5a5a5671869bb0bcab907a65503b25100000132536576c8197acc6c0ab96816b5544311d0a00000000000000060c0e1a1e12100a0000000000000f24394f64798ea4b9c2ad97826d58422d180300000000000b20364b60758a9fb4c9b8a68c77624d37220d000000000004182a3a5a6f849aafb8a78c77624c37221111100e0b090300000000000000000000000000000000000f24394f64798ea4b9c2ad97826d58422c35383f39464c4d4c463a423b353126191103000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e1917171718161e212c374556647a8fa2b4c8c5ae99846f5443301c08001c31465c71869bb1c6c3ae99846e59442f1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c100e09000000001c31465c71869bb1c6c3ad98836e58432e19030000000000000000000000000000000000000000000000000000000000000000080e1016151d202222211f1717110b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000172c42576c8197acc6c0ab96806b5443301c09000000000000082034485970859ab0c5c1a8927d68533d281300000012283d52677d92a8bac4a8937e69534045454545454545454545454b60758a9fb4b59f8b76614c37210c000011273c51667c91a8b9c8b39d8874604b3828160800000000050f1a21232f3327241d1204000000000f24394f64798ea4b9c2ad97826d58422d18030000000000081d31445571869bb1c6c4a5907b65503b2510000000000000172c41566c8196abc5a5907b65503b26100c0c0c0c0c0c0c0c0c0c0b0b07000000000000000000000f24394f64798ea4b9c2ad97826d58422d20232a293336373633292d26201d14090000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e58432e2c2c2c2c2e2832363c49556074859bb0c0ccb9a7927d685336261401001c31465c71869bb1c6c3ae99846e5944313131313131313131313131313131313131313126231c110300001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000001080b0c0d0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a8b9c7b29d8773604a372614060000000008182a3b4d62778c9fb5cab5a38c77624d37220d0000000c21374c61768a9fb4c8b09b85715e4c3a2a303030303030302f3f50657b90a9bab19c86715847331f0a00000c21364b6176899eb4c9b7a6917c665645322518110f0f10181f2c353944483c39302212010000000f24394f64798ea4b9c2ad97826d58422d1803000000000002152737596f8499aec4bca7927d67523d281200000000000013283d53687d92a8c9a9947e69543f29212121212121212121212121201c130808000000000000000f24394f64798ea4b9c2ad97826d58422d180d15171e2122211f1717110b0801000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e584341414141424339454b505a62738298a3b5c9c3b39e8976614c36210c00001c31465c71869bb1c6c3ae99846e594646464646464646464646464646464646464646463b382f211100001c31465c71869bb1c6c3ad98836e58432e1903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075899eb3c7b7a5907b6555443120191210111318263648596a7f95abbcc4b09b8570594834200b0000000a1f3347586c8196aabbb5a3917c665847392c221f181f212e3c4b5d6e8399aebbaa95806b553a2a17040000091e3246576d8297abbcc4b29d8774604b43362d272524252a343d494e5a5d514d40301f0f0000000f24394f64798ea4b9c2ad97826d58422d1803000000000000182e43586d8398adc2bea9947e69543f29140000000000000f253a4f647a8fabbcad97826d583636363636363636363636363636353025221b100200000000000f24394f64798ea4b9c2ad97826d58422d180300030a0c0d0c0a040000000000000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e5857575757575758595760656e788598a0b2c1c6b6a595806a5746331e0a00001c31465c71869bb1c6c3ae99846e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b504c402f1c09001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566c8196a9bac3b19c8673604b42352b282626282d36435462778a9eb4c9b7a6927d68533b2b19050000000417293a4d62788b9fb4c1b29d87766157493d37342a33373f4b5a657b8d9fb5b49f8b78624d38220d000000031628394e63798c9fb4c4b6a597816c60544a3d3c3a393b3b484c5b636f73675f4d3d2d1a0a00000f24394f64798ea4b9c2ad97826d58422d1803000000000002172d42576c8297acc1bfaa947f6a553f2a150000000000000c21364b61768b9fb5b09b8671544b4b4b4b4b4b4b4b4b4b4b4b4b4b4a4336372e201000000000000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c3ad98836e6c6c6c6c6c6c6c6d6f71767b838b9ba3b2bec6b9a89c8775604b3929170300001c31465c71869bb1c6c3ae99837171717171717171717171717171717171717171717171655e4c38230e001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384d62788b9fb4c3b5a4957f6a604d493c3d3b3b3d3e4a5460728399a8b9c0b29d8875604b36210d00000000000c2035485a6c8197a4b6b6a59a8475635b514c473b474c525d6578889dabbaa997826c5a4835200b000000000b2135495b6d8297a6b7c3b19f968072635b54514f4f505459626b7984887d675b4a38281602000f24394f64798ea4b9c2ad97826d58422d1803000000000002172c42576c8197acc1bfaa947f6a553f2a150000000000000a1e32465772879db2b49f897461616161616161616161616161616060544f4b3e2e1d0d000000000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6c7b29c8681818181818181818384868a90989faab4c1c3b6a89e8a79635645321b0b0000001c31465c71869bb1c6c9b39e8986868686868686868686868686868686868686868686857b65503b2610001c31465c71869bb1c6c3ad98836e58432e190300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a2035485a6b8196a5b6c2af9e937e6e625a5552505052555c64738197a1b3c3b3a2927d685645321e09000000000005192b3c4b6075869ca9bab4a29a86796e6761595e5861676e7b889da6b7b49f8a78624d3c2b190500000000061a2c3d4c6176889daabbbdb09e968479706a66646465696e77818b999d8b79635645321e09000f24394f64798ea4b9c2ad97826d58422d1803000000000003182d43586d8298adc2bea9947f69543f2a1400000000000003162939596f8499aebaa88e797676767676767676767676767676767470645c4b3b2a18050000000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6cab6a49c969696969696969798999c9faaadb4bbc7bab4a59c8a7b655b4a382816000000001c31465c71869bb1c6ccb9a79e9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b917d67523c2712001c31465c71869bb1babaad98836e58432e1903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c4b6075879ca8b9bcae9d938378706a676566686b717a85979fb1bfb7a59a846f604e382816020000000000000e1e32455763798b9fa9b8b4a49c8c837c77747374777c838f9da6b7b09f927d685a48351e0e0000000000000f1f334758657b8c9faab8bcb0a29a8e857f7c7a797a7e838b969fa9a99c8675604b36210b000f24394f64798ea4b9c2ad97826d58422d1803000000000004192e44596e8399aec3bda8937e68533e291300000000000000162b40566b8095abc6a9978e8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8a857a645947341f0b0000000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1c6d3c3b6b2acacacacacacacacadaeb1b4bbc8c3b7b2a99f95877a655d4b3d2d1a0a000000001c31465c71869bb1c6d6c5b9b3b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a7917c67523c2712001c31465c71869ba5a5a5a598836e58432e19030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e32455763798a9ea8b7bbaea1998c857f7d7b7b7d80868e9ba3b1bdb5a69d8777614c42311a0a00000000000000031628394a5b667c8b9ea7b3b5ab9f98918c8a88898c9199a1b3b7b49e96816c5f4e3c2b190000000000000004172a3a4b5d667d8c9ea7b3bfb4b0a39b94918f8e9093999faab4b4a89f8b7b66503b2611000f24394f64798ea4b9c2ad97826d58422d1803000000000005182a3b5b70859ab0c5c9a6917c66513c27110000000000000012273d52677c92a7c8b5a9a3a0a0a0a0a0a0a0a0a0a0a0a0a0a0a99f9a8977624c37220d0000000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869bb1babababababababababababababab9c3b7b2aeaaa59d958a8075645c4b3f2e1f0f00000000001c31465c71869bb1babababababababababababababababababababababababababaa7917c67523c2712001c31465c7186909090909090826e58432e1903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394a5b657b8a9da6b2beb3ab9f9b9592909092959ca4b0b5bbb4a49c88796359473423130000000000000000000a1b2d3d4c5e667b8999a1afb5b4ada6aa9f9e9fa9a7aeb3b4a89e928073604b41311e0e00000000000000000c1c2e3f4d5e667c8999a1afb4c0b5b0a9a6a4a4a5a9aeb4b5b1a39b8a7d675e4c38230f000f24394f64798ea4b9c2ad97826d58422d180300000000000b1f34475973889eb3c8bcab8e79644f39240f000000000000000f24394e64798eaabbcebcb8b6b6b6b6b6b6b6b6b6b6b6b6b6c7bab4a7937e68533e29130000000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9becab5a08a75604b35200b001c31465c71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4a2a59d99948f8780776b60574a3d2e21110100000000001c31465c71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5917c67523c2712000f243a4f647a7b7b7b7b7b7b79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b2d3d4b5d657a8898a0aeb4bbb5b0aaa7a5a5a7aab1b5bab4aa9f968678635b493b2a1805000000000000000000000f1f2f404c5d657783909a9fabaeb2b4b4b3b4b4b2ada89e96897d6b60554431231300000000000000000000102130404d5e657884909aa2a9aeb2b4bbc8c4b8b3afaaa39b918579675f4d402f1c09000f24394f64798ea4b9c2ad97826d58422d180000000000000d22374c62778ca7b8cab59f8b76614b36210c000000000000000b20364b60758a9fb4babababababababababababababababababac5ab96806b56412b160100000f24394f64798ea4b9c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9babab5a08a75604b35200b001c31465c71869090909090909090909090909090908f8e8d8b88847f7a736b62594b45392d1f11030000000000001c31465c71859090909090909090909090909090909090909090909090909090909090907c67523c2712000d22374b5c64656565656565635b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2f3f4b5c6477828f999faaadb1b4bac7c6b9b4b1aca99f978c8175635a493d2c1d0c00000000000000000000000112222f3f4b59626e7b848c94999d9faba2aa9f9c98928a807668604b44372614050000000000000000000002122230404c5a626f7b858d94999d9faaa2a1a69e9a958e867c72635b4d4130221200000f24394f64798ea4b9c2ad97826d5841311c1308000000061a2c3d52677d92a7c5c7b19c87725746321e0a00000000000000091d31455671879ca5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a596816b56412c160100000f24394f64798ea4adadad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a5a5a5a5a08a75604b35200b000f243a4f647a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7a797775726f6a6460544c473b32281b0f01000000000000000f243a4f647a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b77624c37220d00071b2e3e4b4f5050505050504e4a3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111212f3e4b59616d7a838b93989c9fa9a2a1a89e9c97928a82796c6057493c2c1f0f000000000000000000000000000412212e3b484d5d656f787e84888a8c8d8c8a87837d766b61584e41312619090000000000000000000000000412212f3c484d5e6570787e84878a8c8c8c8b8885807971676054493d3023130400000f24394f64798ea4b9c3ae99846e604e41302518131213182135495b6e8399aec3c5ac97826d57392916030000000000000002152738596e829090909090909090909090909090909090909090909090806b56412c160100000f24394f64798e9898989897826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e9090909090908a74604b35200b000d22374b5c64656565656565656565656565656565656462605659554f4a4336342a1e160a0000000000000000000d22374b5c64656565656565656565656565656565656565656565656565656565656565625947341f0b000010202e373a3b3b3b3b3b3b39362d1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311202e3a474c5c646e777d8287898b8c8c8b8986827d766d635b4b45392c1e0f01000000000000000000000000000003111d2b343f4b505a62696f727577777775726d6861584c473a311d1409000000000000000000000000000003111e2b35404c505a62696e72757677777673706a645c524a43362c1f13050000000f24394f64798ea4b9c7b3a1927d685f4a43362e2827282b34444e63798b9fb4cab9a7917c66513c26110000000000000000000e23384d63797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b79634d38230e0000000d23384d62788283838383837e68533e2913000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62787b7b7b7b7b7b7b72604a35200b00071b2e3e4b4f5050505050505050505050505050504f4f4d4b45383f3a3530251f180d0300000000000000000000071b2e3e4b4f5050505050505050505050505050505050505050505050505050505050504c473b2a1805000002101b222426262626262624211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101c2a343e4b4f5961686d72757677777674716d6761574e493d32281b0e0000000000000000000000000000000000000d18202f373c494d54595660616261605558524c473a332a1c130100000000000000000000000000000000000e19202f383c494d5459556061626160565a554f4a3e353025180f01000000000f24394f64798ea4b9d0bfb49f8c7d6960544b3e3e3c3d3b484d626f8399aabbc7b39e8975604b36210b0000000000000000000c2135495b636565656565656565656565656565656565656565656565635b4935210c0000000c2035495a626e6e6e6e6e6e68604e3b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a6265656565656565605443301c07000010202e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a39383632282a25201c1308050000000000000000000000000010202e373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b37342a1d0d0000000000070d0f1010101010100e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f2e373b474c5358546061626261575c57524c4639352c1e160a000000000000000000000000000000000000000005111c232c35383f38454b4c4d4c4b44373d3733291f170c000000000000000000000000000000000000000005111c232c35383f37444b4c4d4c4b45384039362d201c13080000000000000f24394f64798ea4b9cfbeb2aa9f8d7f72645c565351525459626e8096a1b3c8baa996816c5645321e0900000000000000000006192c3c494d50505050505050505050505050505050505050505050504d493c2c190600000006192c3c494d585858585858534e42311f0b0000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d505050505050504a4336251300000002101b2224262626262626262626262626262625252422201d15150f0b070000000000000000000000000000000002101b2224262626262626262626262626262626262626262626262626262626262626221f180d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b222a34373e36434a4c4d4c4c4639423d363329211a0f030000000000000000000000000000000000000000000000080e1920232927313637383735312728211f170c040000000000000000000000000000000000000000000000090e192023292731353737373632282b24221b100700000000000000000f24394f64798ea4b9c6b2a098a09f94847a716c6867686a6f7782969eb0bfc1b49f8a78624d38281602000000000000000000000e1e2c35383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b38352c1e0e00000000000e1e2c35384343434343433e3b3124140200000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34383b3b3b3b3b3b3b35302518080000000000070d0f101010101010101010101010101010100f0d0b090200000000000000000000000000000000000000000000070d0f1010101010101010101010101010101010101010101010101010101010100d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c181f22282530353637373633292d27211e170b06000000000000000000000000000000000000000000000000000000060c0d14151d20222222201d15130c0a04000000000000000000000000000000000000000000000000000000060c0d14151d20212222211e16150f0d07000000000000000000000f24394f64798ea4b9c5ae9883959da29a8f86817d7c7d7f848b98a0b0bcc3b5a395806b5a48341a0a0000000000000000000000000e19212326262626262626262626262626262626262626262626262321190e000000000000000e1920232e2e2e2e2e2e29261f1406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d19202226262626262626201c13080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c13131c20212222211e1718120c0a0300000000000000000000000000000000000000000000000000000000000000000002090b0c0d0c0b0801000000000000000000000000000000000000000000000000000000000000000000000001080b0c0d0c0b090300000000000000000000000000000f24394f64798ea4b9b8a78c767f959eafa49c96939192949a9faab2bec2b5a59b8574604b3c2b190000000000000000000000000000060c0e10101010101010101010101010101010101010101010100e0c06000000000000000000060c0d19191919191913110b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d101010101010100b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0d0d0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9b39e88736a7f919ea7b1aba8a6a7a9afb4bbc7bab4a49c8777625645311d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4abab9b8570616a7c89979fa9afb4b9c6c8bbb4b0a99f95867862594838271500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798e96969694806b565f6777818a939a9ea8a3a4aa9f9b948a8074625a483b2b1a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d6278818181817e74604b4d58616c777e85898d8e8e8d8a857f776b6056483c2b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a626c6c6c6c696056453a474c59626970757779797875706a62594b45382b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d56565656544b45382a333b474c545460626364636055544c483b32281a0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3438414141413f3632281a1f2a343736434b4d4e4f4d4b443737342a1e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1920222c2c2c2c29211e160a0d181f2226303538393938353127221f180d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d17171717140b09020000050b0d141c2022242423201d150d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101010100000000000000000001080b0d0e0f0e0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Medium SDF + m_EditorClassIdentifier: + hashCode: 466408471 + material: {fileID: -6263097307693789204} + materialHashCode: 275428951 + m_Version: 1.1.0 + m_SourceFontFileGUID: 53aebb2602873ed4a9807e8a254a7d2f + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FaceIndex: 0 + m_FamilyName: Lato + m_StyleName: Medium + m_PointSize: 70 + m_Scale: 1 + m_LineHeight: 84 + m_AscentLine: 69.090004 + m_CapLine: 50 + m_MeanLine: 35 + m_Baseline: 0 + m_DescentLine: -14.91 + m_SuperscriptOffset: 69.090004 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.91 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.85 + m_UnderlineThickness: 3.22 + m_StrikethroughOffset: 14 + m_StrikethroughThickness: 3.22 + m_TabWidth: 18 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 17.671875 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 47.578125 + m_Height: 50.265625 + m_HorizontalBearingX: 0.0625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 47.703125 + m_GlyphRect: + m_X: 283 + m_Y: 54 + m_Width: 48 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 35.921875 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 45.46875 + m_GlyphRect: + m_X: 378 + m_Y: 254 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 42.171875 + m_Height: 51.375 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 46.65625 + m_GlyphRect: + m_X: 459 + m_Y: 90 + m_Width: 43 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.859375 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 53.234375 + m_GlyphRect: + m_X: 403 + m_Y: 68 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 31.1875 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.390625 + m_GlyphRect: + m_X: 396 + m_Y: 379 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 31.15625 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 39.578125 + m_GlyphRect: + m_X: 351 + m_Y: 443 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 44.109375 + m_Height: 51.375 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 51.0625 + m_GlyphRect: + m_X: 460 + m_Y: 27 + m_Width: 45 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 41.171875 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 53.578125 + m_GlyphRect: + m_X: 395 + m_Y: 130 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 7.5 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 19.875 + m_GlyphRect: + m_X: 497 + m_Y: 216 + m_Width: 8 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 23.203125 + m_Height: 50.828125 + m_HorizontalBearingX: 0.8125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 29.71875 + m_GlyphRect: + m_X: 269 + m_Y: 444 + m_Width: 25 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 40.78125 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 46.796875 + m_GlyphRect: + m_X: 330 + m_Y: 132 + m_Width: 41 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 28.78125 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 36.046875 + m_GlyphRect: + m_X: 394 + m_Y: 441 + m_Width: 29 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 52.859375 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 65.28125 + m_GlyphRect: + m_X: 89 + m_Y: 6 + m_Width: 54 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 41.171875 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 53.578125 + m_GlyphRect: + m_X: 277 + m_Y: 116 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 49.921875 + m_Height: 51.34375 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 56.171875 + m_GlyphRect: + m_X: 69 + m_Y: 68 + m_Width: 51 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 34.171875 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 42.34375 + m_GlyphRect: + m_X: 305 + m_Y: 443 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 52.3125 + m_Height: 61.03125 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 56.171875 + m_GlyphRect: + m_X: 219 + m_Y: 6 + m_Width: 53 + m_Height: 62 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 37.703125 + m_Height: 50.265625 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 44.140625 + m_GlyphRect: + m_X: 448 + m_Y: 215 + m_Width: 38 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 32.921875 + m_Height: 51.375 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 38.078125 + m_GlyphRect: + m_X: 199 + m_Y: 381 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 39.40625 + m_Height: 50.265625 + m_HorizontalBearingX: 1.046875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 41.515625 + m_GlyphRect: + m_X: 210 + m_Y: 141 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 40.46875 + m_Height: 50.859375 + m_HorizontalBearingX: 5.5625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 51.625 + m_GlyphRect: + m_X: 342 + m_Y: 69 + m_Width: 42 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 47.578125 + m_Height: 50.265625 + m_HorizontalBearingX: 0.0625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 47.703125 + m_GlyphRect: + m_X: 218 + m_Y: 79 + m_Width: 48 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 70.875 + m_Height: 50.265625 + m_HorizontalBearingX: 0.9375 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 72.765625 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 72 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 44.65625 + m_Height: 50.265625 + m_HorizontalBearingX: 0.53125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 45.78125 + m_GlyphRect: + m_X: 153 + m_Y: 121 + m_Width: 46 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 44.234375 + m_Height: 50.265625 + m_HorizontalBearingX: -0.0625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 44.09375 + m_GlyphRect: + m_X: 403 + m_Y: 6 + m_Width: 46 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 38.296875 + m_Height: 50.265625 + m_HorizontalBearingX: 1.75 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 42.203125 + m_GlyphRect: + m_X: 261 + m_Y: 178 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 28.453125 + m_Height: 36.78125 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 36.21875 + m_HorizontalAdvance: 34.96875 + m_GlyphRect: + m_X: 206 + m_Y: 203 + m_Width: 29 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 31.703125 + m_Height: 52.140625 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 39.34375 + m_GlyphRect: + m_X: 90 + m_Y: 316 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 29.15625 + m_Height: 36.609375 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 36.125 + m_HorizontalAdvance: 33.5 + m_GlyphRect: + m_X: 97 + m_Y: 458 + m_Width: 30 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 31.703125 + m_Height: 52.140625 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 39.34375 + m_GlyphRect: + m_X: 118 + m_Y: 246 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 31.75 + m_Height: 36.609375 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 36.125 + m_HorizontalAdvance: 37.0625 + m_GlyphRect: + m_X: 53 + m_Y: 458 + m_Width: 33 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 22.4375 + m_Height: 51.0625 + m_HorizontalBearingX: 1.609375 + m_HorizontalBearingY: 51.0625 + m_HorizontalAdvance: 24.671875 + m_GlyphRect: + m_X: 118 + m_Y: 131 + m_Width: 24 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 33.046875 + m_Height: 48.890625 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 36.15625 + m_HorizontalAdvance: 36.546875 + m_GlyphRect: + m_X: 181 + m_Y: 320 + m_Width: 34 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 29.953125 + m_Height: 51.65625 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 39.171875 + m_GlyphRect: + m_X: 227 + m_Y: 444 + m_Width: 31 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 9.421875 + m_Height: 51.28125 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 51.28125 + m_HorizontalAdvance: 17.046875 + m_GlyphRect: + m_X: 426 + m_Y: 270 + m_Width: 11 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 15.75 + m_Height: 63.984375 + m_HorizontalBearingX: -2.515625 + m_HorizontalBearingY: 51.28125 + m_HorizontalAdvance: 17.046875 + m_GlyphRect: + m_X: 6 + m_Y: 257 + m_Width: 17 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 30.9375 + m_Height: 51.65625 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 36.015625 + m_GlyphRect: + m_X: 254 + m_Y: 257 + m_Width: 32 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 48.640625 + m_Height: 36.125 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 36.125 + m_HorizontalAdvance: 57.859375 + m_GlyphRect: + m_X: 283 + m_Y: 6 + m_Width: 50 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 29.953125 + m_Height: 36.125 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 36.125 + m_HorizontalAdvance: 39.171875 + m_GlyphRect: + m_X: 6 + m_Y: 333 + m_Width: 31 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 34.265625 + m_Height: 36.609375 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 36.125 + m_HorizontalAdvance: 39.828125 + m_GlyphRect: + m_X: 6 + m_Y: 459 + m_Width: 36 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 31.703125 + m_Height: 48.15625 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 36.21875 + m_HorizontalAdvance: 39.375 + m_GlyphRect: + m_X: 138 + m_Y: 457 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 31.703125 + m_Height: 48.15625 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 36.21875 + m_HorizontalAdvance: 39.3125 + m_GlyphRect: + m_X: 226 + m_Y: 320 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 20.375 + m_Height: 36.21875 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 36.21875 + m_HorizontalAdvance: 25.65625 + m_GlyphRect: + m_X: 84 + m_Y: 131 + m_Width: 22 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 25.65625 + m_Height: 36.6875 + m_HorizontalBearingX: 2.171875 + m_HorizontalBearingY: 36.125 + m_HorizontalAdvance: 30.421875 + m_GlyphRect: + m_X: 434 + m_Y: 441 + m_Width: 26 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 23.265625 + m_Height: 47.5 + m_HorizontalBearingX: 1.4375 + m_HorizontalBearingY: 46.9375 + m_HorizontalAdvance: 25.34375 + m_GlyphRect: + m_X: 83 + m_Y: 198 + m_Width: 24 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 29.96875 + m_Height: 36.125 + m_HorizontalBearingX: 4.40625 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 39.125 + m_GlyphRect: + m_X: 48 + m_Y: 333 + m_Width: 31 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 35 + m_Height: 35.5625 + m_HorizontalBearingX: 0.671875 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 36.328125 + m_GlyphRect: + m_X: 153 + m_Y: 183 + m_Width: 36 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 53.234375 + m_Height: 35.671875 + m_HorizontalBearingX: 1.015625 + m_HorizontalBearingY: 35.671875 + m_HorizontalAdvance: 55.265625 + m_GlyphRect: + m_X: 154 + m_Y: 6 + m_Width: 54 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 33.9375 + m_Height: 35.5625 + m_HorizontalBearingX: 0.671875 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 35.28125 + m_GlyphRect: + m_X: 270 + m_Y: 333 + m_Width: 35 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 35.28125 + m_Height: 47.5 + m_HorizontalBearingX: 0.59375 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 36.296875 + m_GlyphRect: + m_X: 448 + m_Y: 277 + m_Width: 36 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 27.625 + m_Height: 35.5625 + m_HorizontalBearingX: 1.953125 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 31.78125 + m_GlyphRect: + m_X: 316 + m_Y: 333 + m_Width: 29 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 14.53125 + m_Height: 10.078125 + m_HorizontalBearingX: 4.125 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 28 + m_GlyphRect: + m_X: 118 + m_Y: 224 + m_Width: 15 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 9.234375 + m_Height: 50.796875 + m_HorizontalBearingX: 4.828125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 19.046875 + m_GlyphRect: + m_X: 131 + m_Y: 68 + m_Width: 11 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 309 + m_Metrics: + m_Width: 25.796875 + m_Height: 51.34375 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 31.53125 + m_GlyphRect: + m_X: 244 + m_Y: 381 + m_Width: 27 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 8.9375 + m_Height: 18.3125 + m_HorizontalBearingX: 3.5625 + m_HorizontalBearingY: 8.71875 + m_HorizontalAdvance: 16.03125 + m_GlyphRect: + m_X: 90 + m_Y: 257 + m_Width: 10 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 9.3125 + m_Height: 44.3125 + m_HorizontalBearingX: 4.5625 + m_HorizontalBearingY: 34.71875 + m_HorizontalAdvance: 18.484375 + m_GlyphRect: + m_X: 495 + m_Y: 278 + m_Width: 10 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 9.203125 + m_Height: 35.25 + m_HorizontalBearingX: 4.671875 + m_HorizontalBearingY: 34.71875 + m_HorizontalAdvance: 17.640625 + m_GlyphRect: + m_X: 495 + m_Y: 334 + m_Width: 10 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 314 + m_Metrics: + m_Width: 9.203125 + m_Height: 9.25 + m_HorizontalBearingX: 3.671875 + m_HorizontalBearingY: 8.71875 + m_HorizontalAdvance: 16.515625 + m_GlyphRect: + m_X: 90 + m_Y: 287 + m_Width: 10 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 315 + m_Metrics: + m_Width: 45.203125 + m_Height: 9.25 + m_HorizontalBearingX: 3.671875 + m_HorizontalBearingY: 8.71875 + m_HorizontalAdvance: 52.890625 + m_GlyphRect: + m_X: 460 + m_Y: 6 + m_Width: 46 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 326 + m_Metrics: + m_Width: 27.328125 + m_Height: 54.84375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 31.890625 + m_GlyphRect: + m_X: 6 + m_Y: 131 + m_Width: 28 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 5.328125 + m_Height: 65.984375 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 53.796875 + m_HorizontalAdvance: 17.703125 + m_GlyphRect: + m_X: 431 + m_Y: 192 + m_Width: 6 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 329 + m_Metrics: + m_Width: 27.328125 + m_Height: 54.84375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 31.890625 + m_GlyphRect: + m_X: 45 + m_Y: 131 + m_Width: 28 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 330 + m_Metrics: + m_Width: 17.5 + m_Height: 5.8125 + m_HorizontalBearingX: 4.265625 + m_HorizontalBearingY: 23.9375 + m_HorizontalAdvance: 26.046875 + m_GlyphRect: + m_X: 45 + m_Y: 240 + m_Width: 18 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 333 + m_Metrics: + m_Width: 27.578125 + m_Height: 4.546875 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: -5.5 + m_HorizontalAdvance: 32.265625 + m_GlyphRect: + m_X: 6 + m_Y: 240 + m_Width: 28 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 13.8125 + m_Height: 64.921875 + m_HorizontalBearingX: 3.015625 + m_HorizontalBearingY: 54.453125 + m_HorizontalAdvance: 18.828125 + m_GlyphRect: + m_X: 78 + m_Y: 381 + m_Width: 14 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 13.859375 + m_Height: 64.921875 + m_HorizontalBearingX: 1.953125 + m_HorizontalBearingY: 54.453125 + m_HorizontalAdvance: 18.828125 + m_GlyphRect: + m_X: 52 + m_Y: 381 + m_Width: 15 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 13.21875 + m_Height: 64.09375 + m_HorizontalBearingX: 6.234375 + m_HorizontalBearingY: 53.796875 + m_HorizontalAdvance: 21.5625 + m_GlyphRect: + m_X: 103 + m_Y: 381 + m_Width: 14 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 13.265625 + m_Height: 64.09375 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 53.796875 + m_HorizontalAdvance: 21.5625 + m_GlyphRect: + m_X: 128 + m_Y: 381 + m_Width: 14 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 16.65625 + m_Height: 64.09375 + m_HorizontalBearingX: 2.28125 + m_HorizontalBearingY: 53.796875 + m_HorizontalAdvance: 21.171875 + m_GlyphRect: + m_X: 34 + m_Y: 257 + m_Width: 17 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 341 + m_Metrics: + m_Width: 16.625 + m_Height: 64.09375 + m_HorizontalBearingX: 2.234375 + m_HorizontalBearingY: 53.796875 + m_HorizontalAdvance: 21.171875 + m_GlyphRect: + m_X: 62 + m_Y: 257 + m_Width: 17 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 342 + m_Metrics: + m_Width: 21.5 + m_Height: 22.859375 + m_HorizontalBearingX: 4.125 + m_HorizontalBearingY: 52.8125 + m_HorizontalAdvance: 29.75 + m_GlyphRect: + m_X: 6 + m_Y: 203 + m_Width: 22 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 31.921875 + m_Height: 26.046875 + m_HorizontalBearingX: 4.34375 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 39 + m_Y: 198 + m_Width: 33 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 32.75 + m_Height: 12.71875 + m_HorizontalBearingX: 4.03125 + m_HorizontalBearingY: 27.0625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 162 + m_Y: 230 + m_Width: 33 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 5.953125 + m_Height: 18.140625 + m_HorizontalBearingX: 4.234375 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 14.421875 + m_GlyphRect: + m_X: 312 + m_Y: 178 + m_Width: 7 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 17.953125 + m_Height: 18.140625 + m_HorizontalBearingX: 4.234375 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 26.390625 + m_GlyphRect: + m_X: 118 + m_Y: 194 + m_Width: 19 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 351 + m_Metrics: + m_Width: 46.5625 + m_Height: 51.375 + m_HorizontalBearingX: 2.96875 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 50.046875 + m_GlyphRect: + m_X: 344 + m_Y: 6 + m_Width: 48 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 352 + m_Metrics: + m_Width: 52.078125 + m_Height: 56.1875 + m_HorizontalBearingX: 3.53125 + m_HorizontalBearingY: 47.78125 + m_HorizontalAdvance: 58.6875 + m_GlyphRect: + m_X: 154 + m_Y: 53 + m_Width: 53 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 362 + m_Metrics: + m_Width: 33.90625 + m_Height: 65.625 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 57.4375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 6 + m_Y: 381 + m_Width: 35 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 370 + m_Metrics: + m_Width: 37.34375 + m_Height: 50.265625 + m_HorizontalBearingX: 1.640625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 382 + m_Y: 192 + m_Width: 38 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 36.53125 + m_Height: 51.34375 + m_HorizontalBearingX: 2.03125 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 330 + m_Y: 194 + m_Width: 37 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 30.3125 + m_Height: 50.359375 + m_HorizontalBearingX: 5.453125 + m_HorizontalBearingY: 50.359375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 297 + m_Y: 257 + m_Width: 31 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 33.734375 + m_Height: 50.8125 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 328 + m_Y: 381 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.03125 + m_Height: 51.375 + m_HorizontalBearingX: 2.828125 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 162 + m_Y: 257 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 38 + m_Height: 50.296875 + m_HorizontalBearingX: 0.671875 + m_HorizontalBearingY: 50.296875 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 448 + m_Y: 153 + m_Width: 39 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 32.421875 + m_Height: 50.828125 + m_HorizontalBearingX: 3.703125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 182 + m_Y: 444 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 405 + m_Metrics: + m_Width: 34.296875 + m_Height: 50.265625 + m_HorizontalBearingX: 3.640625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 282 + m_Y: 381 + m_Width: 35 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 406 + m_Metrics: + m_Width: 32.96875 + m_Height: 50.8125 + m_HorizontalBearingX: 3.46875 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 442 + m_Y: 336 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 435 + m_Metrics: + m_Width: 33.703125 + m_Height: 34.859375 + m_HorizontalBearingX: 3.46875 + m_HorizontalBearingY: 40.875 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 396 + m_Y: 333 + m_Width: 35 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 439 + m_Metrics: + m_Width: 30.3125 + m_Height: 17.078125 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 32.09375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 471 + m_Y: 398 + m_Width: 31 + m_Height: 18 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 442 + m_Metrics: + m_Width: 27.234375 + m_Height: 31.140625 + m_HorizontalBearingX: 5.5625 + m_HorizontalBearingY: 39.125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 339 + m_Y: 257 + m_Width: 28 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 443 + m_Metrics: + m_Width: 27.21875 + m_Height: 31.140625 + m_HorizontalBearingX: 7.8125 + m_HorizontalBearingY: 39.125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 356 + m_Y: 336 + m_Width: 29 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 6.859375 + m_Height: 51.65625 + m_HorizontalBearingX: 4.9375 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 16.734375 + m_GlyphRect: + m_X: 498 + m_Y: 153 + m_Width: 8 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 34.171875 + m_Height: 50.828125 + m_HorizontalBearingX: 3.5625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 153 + m_Y: 381 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.15625 + m_Height: 51.375 + m_HorizontalBearingX: 3.21875 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 208 + m_Y: 257 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 50.46875 + m_Height: 51.375 + m_HorizontalBearingX: 2.96875 + m_HorizontalBearingY: 50.78125 + m_HorizontalAdvance: 56.421875 + m_GlyphRect: + m_X: 6 + m_Y: 68 + m_Width: 52 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 35.5625 + m_Height: 35.5625 + m_HorizontalBearingX: 3.21875 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 42 + m_GlyphRect: + m_X: 134 + m_Y: 333 + m_Width: 36 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -3555082381982074113} + m_AtlasTextureIndex: 0 + m_IsMultiAtlasTexturesEnabled: 0 + m_ClearDynamicDataOnBuild: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 83 + m_Height: 62 + - m_X: 83 + m_Y: 0 + m_Width: 65 + m_Height: 62 + - m_X: 148 + m_Y: 0 + m_Width: 65 + m_Height: 47 + - m_X: 213 + m_Y: 0 + m_Width: 64 + m_Height: 73 + - m_X: 148 + m_Y: 47 + m_Width: 64 + m_Height: 68 + - m_X: 0 + m_Y: 62 + m_Width: 63 + m_Height: 63 + - m_X: 63 + m_Y: 62 + m_Width: 62 + m_Height: 63 + - m_X: 125 + m_Y: 62 + m_Width: 22 + m_Height: 63 + - m_X: 277 + m_Y: 0 + m_Width: 61 + m_Height: 48 + - m_X: 338 + m_Y: 0 + m_Width: 59 + m_Height: 63 + - m_X: 277 + m_Y: 48 + m_Width: 59 + m_Height: 62 + - m_X: 212 + m_Y: 73 + m_Width: 59 + m_Height: 62 + - m_X: 147 + m_Y: 115 + m_Width: 57 + m_Height: 62 + - m_X: 397 + m_Y: 0 + m_Width: 57 + m_Height: 62 + - m_X: 454 + m_Y: 0 + m_Width: 57 + m_Height: 21 + - m_X: 454 + m_Y: 21 + m_Width: 56 + m_Height: 63 + - m_X: 397 + m_Y: 62 + m_Width: 56 + m_Height: 62 + - m_X: 453 + m_Y: 84 + m_Width: 54 + m_Height: 63 + - m_X: 336 + m_Y: 63 + m_Width: 53 + m_Height: 63 + - m_X: 389 + m_Y: 124 + m_Width: 53 + m_Height: 62 + - m_X: 271 + m_Y: 110 + m_Width: 53 + m_Height: 62 + - m_X: 324 + m_Y: 126 + m_Width: 52 + m_Height: 62 + - m_X: 204 + m_Y: 135 + m_Width: 51 + m_Height: 62 + - m_X: 255 + m_Y: 172 + m_Width: 51 + m_Height: 62 + - m_X: 306 + m_Y: 172 + m_Width: 18 + m_Height: 30 + - m_X: 442 + m_Y: 147 + m_Width: 50 + m_Height: 62 + - m_X: 492 + m_Y: 147 + m_Width: 19 + m_Height: 63 + - m_X: 376 + m_Y: 186 + m_Width: 49 + m_Height: 62 + - m_X: 425 + m_Y: 186 + m_Width: 17 + m_Height: 78 + - m_X: 442 + m_Y: 209 + m_Width: 49 + m_Height: 62 + - m_X: 491 + m_Y: 210 + m_Width: 19 + m_Height: 62 + - m_X: 324 + m_Y: 188 + m_Width: 48 + m_Height: 63 + - m_X: 372 + m_Y: 248 + m_Width: 48 + m_Height: 62 + - m_X: 420 + m_Y: 264 + m_Width: 22 + m_Height: 63 + - m_X: 442 + m_Y: 271 + m_Width: 47 + m_Height: 59 + - m_X: 489 + m_Y: 272 + m_Width: 21 + m_Height: 56 + - m_X: 489 + m_Y: 328 + m_Width: 21 + m_Height: 47 + - m_X: 0 + m_Y: 375 + m_Width: 46 + m_Height: 78 + - m_X: 0 + m_Y: 327 + m_Width: 42 + m_Height: 48 + - m_X: 0 + m_Y: 251 + m_Width: 28 + m_Height: 76 + - m_X: 0 + m_Y: 234 + m_Width: 39 + m_Height: 17 + - m_X: 28 + m_Y: 251 + m_Width: 28 + m_Height: 76 + - m_X: 39 + m_Y: 234 + m_Width: 29 + m_Height: 17 + - m_X: 42 + m_Y: 327 + m_Width: 42 + m_Height: 48 + - m_X: 56 + m_Y: 251 + m_Width: 28 + m_Height: 76 + - m_X: 0 + m_Y: 197 + m_Width: 33 + m_Height: 35 + - m_X: 0 + m_Y: 125 + m_Width: 39 + m_Height: 67 + - m_X: 33 + m_Y: 192 + m_Width: 44 + m_Height: 38 + - m_X: 39 + m_Y: 125 + m_Width: 39 + m_Height: 67 + - m_X: 77 + m_Y: 192 + m_Width: 35 + m_Height: 59 + - m_X: 112 + m_Y: 125 + m_Width: 35 + m_Height: 63 + - m_X: 78 + m_Y: 125 + m_Width: 33 + m_Height: 48 + - m_X: 0 + m_Y: 453 + m_Width: 47 + m_Height: 49 + - m_X: 46 + m_Y: 375 + m_Width: 26 + m_Height: 77 + - m_X: 147 + m_Y: 177 + m_Width: 47 + m_Height: 47 + - m_X: 112 + m_Y: 188 + m_Width: 30 + m_Height: 30 + - m_X: 112 + m_Y: 218 + m_Width: 26 + m_Height: 22 + - m_X: 47 + m_Y: 452 + m_Width: 44 + m_Height: 49 + - m_X: 72 + m_Y: 375 + m_Width: 25 + m_Height: 77 + - m_X: 84 + m_Y: 310 + m_Width: 44 + m_Height: 64 + - m_X: 112 + m_Y: 240 + m_Width: 44 + m_Height: 64 + - m_X: 84 + m_Y: 251 + m_Width: 21 + m_Height: 30 + - m_X: 84 + m_Y: 281 + m_Width: 21 + m_Height: 21 + - m_X: 91 + m_Y: 452 + m_Width: 41 + m_Height: 49 + - m_X: 97 + m_Y: 375 + m_Width: 25 + m_Height: 76 + - m_X: 122 + m_Y: 375 + m_Width: 25 + m_Height: 76 + - m_X: 132 + m_Y: 451 + m_Width: 44 + m_Height: 60 + - m_X: 128 + m_Y: 327 + m_Width: 47 + m_Height: 47 + - m_X: 156 + m_Y: 251 + m_Width: 46 + m_Height: 63 + - m_X: 156 + m_Y: 224 + m_Width: 44 + m_Height: 25 + - m_X: 200 + m_Y: 197 + m_Width: 40 + m_Height: 49 + - m_X: 147 + m_Y: 375 + m_Width: 46 + m_Height: 63 + - m_X: 175 + m_Y: 314 + m_Width: 45 + m_Height: 61 + - m_X: 202 + m_Y: 251 + m_Width: 46 + m_Height: 63 + - m_X: 176 + m_Y: 438 + m_Width: 45 + m_Height: 63 + - m_X: 193 + m_Y: 375 + m_Width: 45 + m_Height: 63 + - m_X: 220 + m_Y: 314 + m_Width: 44 + m_Height: 60 + - m_X: 248 + m_Y: 251 + m_Width: 43 + m_Height: 63 + - m_X: 221 + m_Y: 438 + m_Width: 42 + m_Height: 63 + - m_X: 238 + m_Y: 375 + m_Width: 38 + m_Height: 63 + - m_X: 264 + m_Y: 327 + m_Width: 46 + m_Height: 47 + - m_X: 263 + m_Y: 438 + m_Width: 36 + m_Height: 63 + - m_X: 276 + m_Y: 375 + m_Width: 46 + m_Height: 62 + - m_X: 310 + m_Y: 327 + m_Width: 40 + m_Height: 47 + - m_X: 299 + m_Y: 437 + m_Width: 46 + m_Height: 62 + - m_X: 322 + m_Y: 375 + m_Width: 45 + m_Height: 62 + - m_X: 350 + m_Y: 330 + m_Width: 40 + m_Height: 44 + - m_X: 390 + m_Y: 327 + m_Width: 46 + m_Height: 46 + - m_X: 436 + m_Y: 330 + m_Width: 45 + m_Height: 62 + - m_X: 390 + m_Y: 373 + m_Width: 43 + m_Height: 62 + - m_X: 345 + m_Y: 437 + m_Width: 43 + m_Height: 62 + - m_X: 291 + m_Y: 251 + m_Width: 42 + m_Height: 62 + - m_X: 333 + m_Y: 251 + m_Width: 39 + m_Height: 44 + - m_X: 388 + m_Y: 435 + m_Width: 40 + m_Height: 62 + - m_X: 428 + m_Y: 435 + m_Width: 37 + m_Height: 49 + - m_X: 465 + m_Y: 392 + m_Width: 42 + m_Height: 29 + m_FreeGlyphRects: + - m_X: 212 + m_Y: 47 + m_Width: 1 + m_Height: 26 + - m_X: 147 + m_Y: 62 + m_Width: 1 + m_Height: 53 + - m_X: 453 + m_Y: 62 + m_Width: 1 + m_Height: 22 + - m_X: 336 + m_Y: 48 + m_Width: 2 + m_Height: 15 + - m_X: 389 + m_Y: 63 + m_Width: 8 + m_Height: 61 + - m_X: 271 + m_Y: 73 + m_Width: 6 + m_Height: 37 + - m_X: 324 + m_Y: 110 + m_Width: 12 + m_Height: 16 + - m_X: 204 + m_Y: 115 + m_Width: 8 + m_Height: 20 + - m_X: 255 + m_Y: 135 + m_Width: 16 + m_Height: 37 + - m_X: 442 + m_Y: 124 + m_Width: 11 + m_Height: 23 + - m_X: 510 + m_Y: 21 + m_Width: 1 + m_Height: 126 + - m_X: 507 + m_Y: 84 + m_Width: 4 + m_Height: 63 + - m_X: 376 + m_Y: 126 + m_Width: 13 + m_Height: 60 + - m_X: 510 + m_Y: 210 + m_Width: 1 + m_Height: 301 + - m_X: 491 + m_Y: 209 + m_Width: 1 + m_Height: 1 + - m_X: 372 + m_Y: 188 + m_Width: 4 + m_Height: 60 + - m_X: 420 + m_Y: 248 + m_Width: 5 + m_Height: 16 + - m_X: 489 + m_Y: 271 + m_Width: 2 + m_Height: 1 + - m_X: 0 + m_Y: 192 + m_Width: 33 + m_Height: 5 + - m_X: 0 + m_Y: 232 + m_Width: 77 + m_Height: 2 + - m_X: 68 + m_Y: 230 + m_Width: 9 + m_Height: 21 + - m_X: 33 + m_Y: 230 + m_Width: 44 + m_Height: 4 + - m_X: 78 + m_Y: 173 + m_Width: 34 + m_Height: 19 + - m_X: 111 + m_Y: 125 + m_Width: 1 + m_Height: 67 + - m_X: 46 + m_Y: 452 + m_Width: 1 + m_Height: 1 + - m_X: 142 + m_Y: 188 + m_Width: 5 + m_Height: 52 + - m_X: 138 + m_Y: 218 + m_Width: 9 + m_Height: 22 + - m_X: 105 + m_Y: 251 + m_Width: 7 + m_Height: 59 + - m_X: 84 + m_Y: 302 + m_Width: 28 + m_Height: 8 + - m_X: 0 + m_Y: 502 + m_Width: 132 + m_Height: 9 + - m_X: 47 + m_Y: 501 + m_Width: 85 + m_Height: 10 + - m_X: 97 + m_Y: 451 + m_Width: 35 + m_Height: 1 + - m_X: 84 + m_Y: 304 + m_Width: 72 + m_Height: 6 + - m_X: 128 + m_Y: 304 + m_Width: 28 + m_Height: 23 + - m_X: 138 + m_Y: 224 + m_Width: 18 + m_Height: 16 + - m_X: 156 + m_Y: 249 + m_Width: 168 + m_Height: 2 + - m_X: 194 + m_Y: 177 + m_Width: 10 + m_Height: 20 + - m_X: 194 + m_Y: 177 + m_Width: 6 + m_Height: 47 + - m_X: 200 + m_Y: 246 + m_Width: 124 + m_Height: 5 + - m_X: 84 + m_Y: 374 + m_Width: 91 + m_Height: 1 + - m_X: 128 + m_Y: 314 + m_Width: 47 + m_Height: 13 + - m_X: 240 + m_Y: 197 + m_Width: 15 + m_Height: 54 + - m_X: 240 + m_Y: 234 + m_Width: 84 + m_Height: 17 + - m_X: 147 + m_Y: 438 + m_Width: 29 + m_Height: 13 + - m_X: 176 + m_Y: 501 + m_Width: 335 + m_Height: 10 + - m_X: 264 + m_Y: 314 + m_Width: 156 + m_Height: 13 + - m_X: 276 + m_Y: 437 + m_Width: 23 + m_Height: 1 + - m_X: 299 + m_Y: 499 + m_Width: 212 + m_Height: 12 + - m_X: 350 + m_Y: 310 + m_Width: 40 + m_Height: 20 + - m_X: 436 + m_Y: 327 + m_Width: 6 + m_Height: 3 + - m_X: 220 + m_Y: 374 + m_Width: 170 + m_Height: 1 + - m_X: 306 + m_Y: 202 + m_Width: 18 + m_Height: 49 + - m_X: 291 + m_Y: 313 + m_Width: 129 + m_Height: 14 + - m_X: 333 + m_Y: 310 + m_Width: 87 + m_Height: 17 + - m_X: 350 + m_Y: 295 + m_Width: 22 + m_Height: 35 + - m_X: 333 + m_Y: 295 + m_Width: 39 + m_Height: 32 + - m_X: 388 + m_Y: 497 + m_Width: 123 + m_Height: 14 + - m_X: 367 + m_Y: 374 + m_Width: 23 + m_Height: 61 + - m_X: 367 + m_Y: 374 + m_Width: 21 + m_Height: 63 + - m_X: 433 + m_Y: 373 + m_Width: 3 + m_Height: 62 + - m_X: 428 + m_Y: 484 + m_Width: 83 + m_Height: 27 + - m_X: 481 + m_Y: 375 + m_Width: 30 + m_Height: 17 + - m_X: 507 + m_Y: 375 + m_Width: 4 + m_Height: 136 + - m_X: 481 + m_Y: 330 + m_Width: 8 + m_Height: 62 + - m_X: 433 + m_Y: 421 + m_Width: 78 + m_Height: 14 + - m_X: 433 + m_Y: 392 + m_Width: 32 + m_Height: 43 + - m_X: 465 + m_Y: 421 + m_Width: 46 + m_Height: 90 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 53aebb2602873ed4a9807e8a254a7d2f + pointSizeSamplingMode: 0 + pointSize: 70 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Medium SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Medium SDF.asset.meta new file mode 100644 index 0000000..a614abb --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Medium SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f490f72b6ed6ae4d8b31cee2cac3de7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-MediumItalic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-MediumItalic SDF.asset new file mode 100644 index 0000000..85808a4 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-MediumItalic SDF.asset @@ -0,0 +1,2710 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &-6159658335563363560 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-MediumItalic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 1130407173323327972} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-MediumItalic SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: -6159658335563363560} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: fd1b3683681c0dd43bafe960491f40db + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Medium Italic + m_PointSize: 70 + m_Scale: 1 + m_LineHeight: 84 + m_AscentLine: 69.090004 + m_CapLine: 50 + m_MeanLine: 36 + m_Baseline: 0 + m_DescentLine: -14.91 + m_SuperscriptOffset: 69.090004 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.91 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.85 + m_UnderlineThickness: 3.22 + m_StrikethroughOffset: 14.4 + m_StrikethroughThickness: 3.22 + m_TabWidth: 16 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 16.09375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 44.109375 + m_Height: 50.265625 + m_HorizontalBearingX: -2.421875 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 44.515625 + m_GlyphRect: + m_X: 279 + m_Y: 132 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 36.546875 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 42.34375 + m_GlyphRect: + m_X: 270 + m_Y: 435 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 41.3125 + m_Height: 51.375 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 43.640625 + m_GlyphRect: + m_X: 116 + m_Y: 6 + m_Width: 42 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.890625 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 49.53125 + m_GlyphRect: + m_X: 289 + m_Y: 69 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 34.96875 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 37.625 + m_GlyphRect: + m_X: 388 + m_Y: 130 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 34.96875 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 37.140625 + m_GlyphRect: + m_X: 396 + m_Y: 68 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 42.90625 + m_Height: 51.375 + m_HorizontalBearingX: 3.296875 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 47.5625 + m_GlyphRect: + m_X: 102 + m_Y: 74 + m_Width: 44 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 44.3125 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 49.84375 + m_GlyphRect: + m_X: 295 + m_Y: 6 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 13.375 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 18.9375 + m_GlyphRect: + m_X: 435 + m_Y: 130 + m_Width: 14 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 27.578125 + m_Height: 50.828125 + m_HorizontalBearingX: -1.265625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 28.171875 + m_GlyphRect: + m_X: 249 + m_Y: 69 + m_Width: 29 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 42.8125 + m_Height: 50.296875 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.296875 + m_HorizontalAdvance: 43.6875 + m_GlyphRect: + m_X: 267 + m_Y: 307 + m_Width: 44 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 27.375 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 33.421875 + m_GlyphRect: + m_X: 369 + m_Y: 304 + m_Width: 28 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 55.125 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 60.6875 + m_GlyphRect: + m_X: 200 + m_Y: 311 + m_Width: 56 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 44.3125 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 49.84375 + m_GlyphRect: + m_X: 214 + m_Y: 436 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 46.71875 + m_Height: 51.34375 + m_HorizontalBearingX: 3.296875 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 52.328125 + m_GlyphRect: + m_X: 78 + m_Y: 140 + m_Width: 48 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 36.125 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 39.65625 + m_GlyphRect: + m_X: 311 + m_Y: 369 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 46.71875 + m_Height: 61.0625 + m_HorizontalBearingX: 3.296875 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 52.328125 + m_GlyphRect: + m_X: 69 + m_Y: 390 + m_Width: 48 + m_Height: 62 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 35.359375 + m_Height: 50.265625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 41.125 + m_GlyphRect: + m_X: 400 + m_Y: 6 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 34.375 + m_Height: 51.34375 + m_HorizontalBearingX: 0.3125 + m_HorizontalBearingY: 50.78125 + m_HorizontalAdvance: 35.703125 + m_GlyphRect: + m_X: 156 + m_Y: 200 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 37.109375 + m_Height: 50.265625 + m_HorizontalBearingX: 3.8125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 38.390625 + m_GlyphRect: + m_X: 351 + m_Y: 6 + m_Width: 38 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 41.765625 + m_Height: 50.859375 + m_HorizontalBearingX: 4.578125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 48.0625 + m_GlyphRect: + m_X: 137 + m_Y: 137 + m_Width: 43 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 44.078125 + m_Height: 50.265625 + m_HorizontalBearingX: 3.703125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 44.421875 + m_GlyphRect: + m_X: 255 + m_Y: 373 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 65.453125 + m_Height: 50.265625 + m_HorizontalBearingX: 4.265625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 67.0625 + m_GlyphRect: + m_X: 178 + m_Y: 374 + m_Width: 66 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 47.203125 + m_Height: 50.265625 + m_HorizontalBearingX: -2.515625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 42.984375 + m_GlyphRect: + m_X: 246 + m_Y: 195 + m_Width: 48 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 41.015625 + m_Height: 50.265625 + m_HorizontalBearingX: 3.640625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 41.1875 + m_GlyphRect: + m_X: 335 + m_Y: 131 + m_Width: 42 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 41.578125 + m_Height: 50.265625 + m_HorizontalBearingX: -1.015625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 38.984375 + m_GlyphRect: + m_X: 305 + m_Y: 194 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 31.609375 + m_Height: 36.5625 + m_HorizontalBearingX: 1.609375 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 35.9375 + m_GlyphRect: + m_X: 6 + m_Y: 467 + m_Width: 33 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 32.625 + m_Height: 52.140625 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 37.171875 + m_GlyphRect: + m_X: 71 + m_Y: 314 + m_Width: 34 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.53125 + m_Height: 36.5625 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 31.78125 + m_GlyphRect: + m_X: 230 + m_Y: 258 + m_Width: 30 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 34.65625 + m_Height: 52.140625 + m_HorizontalBearingX: 1.8125 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 37.203125 + m_GlyphRect: + m_X: 55 + m_Y: 222 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 29.1875 + m_Height: 36.53125 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 36.046875 + m_HorizontalAdvance: 33.640625 + m_GlyphRect: + m_X: 94 + m_Y: 463 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 23.3125 + m_Height: 59.75 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 51.0625 + m_HorizontalAdvance: 22.609375 + m_GlyphRect: + m_X: 35 + m_Y: 84 + m_Width: 25 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 36.71875 + m_Height: 48.78125 + m_HorizontalBearingX: -2.03125 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 34.1875 + m_GlyphRect: + m_X: 447 + m_Y: 53 + m_Width: 38 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 31.703125 + m_Height: 51.65625 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 37.28125 + m_GlyphRect: + m_X: 202 + m_Y: 195 + m_Width: 33 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 13.34375 + m_Height: 51.28125 + m_HorizontalBearingX: 2.234375 + m_HorizontalBearingY: 51.28125 + m_HorizontalAdvance: 16.375 + m_GlyphRect: + m_X: 153 + m_Y: 374 + m_Width: 14 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 21.625 + m_Height: 63.984375 + m_HorizontalBearingX: -6.265625 + m_HorizontalBearingY: 51.28125 + m_HorizontalAdvance: 16.3125 + m_GlyphRect: + m_X: 6 + m_Y: 315 + m_Width: 23 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 32.40625 + m_Height: 51.65625 + m_HorizontalBearingX: 1.859375 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 33.640625 + m_GlyphRect: + m_X: 215 + m_Y: 6 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 50.046875 + m_Height: 36.078125 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 55.1875 + m_GlyphRect: + m_X: 168 + m_Y: 263 + m_Width: 51 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 31.75 + m_Height: 36.078125 + m_HorizontalBearingX: 1.921875 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 37.28125 + m_GlyphRect: + m_X: 310 + m_Y: 256 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 31.640625 + m_Height: 36.5625 + m_HorizontalBearingX: 1.953125 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 36.40625 + m_GlyphRect: + m_X: 50 + m_Y: 467 + m_Width: 33 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 34.09375 + m_Height: 48.015625 + m_HorizontalBearingX: 0.421875 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 37.171875 + m_GlyphRect: + m_X: 443 + m_Y: 208 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 31.609375 + m_Height: 48.015625 + m_HorizontalBearingX: 1.609375 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 35.984375 + m_GlyphRect: + m_X: 408 + m_Y: 314 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 23.28125 + m_Height: 36.046875 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 36.046875 + m_HorizontalAdvance: 24.15625 + m_GlyphRect: + m_X: 398 + m_Y: 255 + m_Width: 25 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 26.953125 + m_Height: 36.640625 + m_HorizontalBearingX: -0.171875 + m_HorizontalBearingY: 36.078125 + m_HorizontalAdvance: 28.109375 + m_GlyphRect: + m_X: 271 + m_Y: 257 + m_Width: 28 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 21.421875 + m_Height: 47.5 + m_HorizontalBearingX: 2.453125 + m_HorizontalBearingY: 46.9375 + m_HorizontalAdvance: 25.03125 + m_GlyphRect: + m_X: 181 + m_Y: 458 + m_Width: 22 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 31.75 + m_Height: 36.046875 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 37.28125 + m_GlyphRect: + m_X: 354 + m_Y: 256 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 32.59375 + m_Height: 35.5625 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 33.734375 + m_GlyphRect: + m_X: 452 + m_Y: 345 + m_Width: 33 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 48.96875 + m_Height: 35.671875 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 35.671875 + m_HorizontalAdvance: 50.859375 + m_GlyphRect: + m_X: 447 + m_Y: 6 + m_Width: 50 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 35.5625 + m_Height: 35.5625 + m_HorizontalBearingX: -2.34375 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 32.90625 + m_GlyphRect: + m_X: 460 + m_Y: 114 + m_Width: 37 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 32.640625 + m_Height: 47.5 + m_HorizontalBearingX: 2.421875 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 33.78125 + m_GlyphRect: + m_X: 136 + m_Y: 458 + m_Width: 34 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 30.140625 + m_Height: 35.5625 + m_HorizontalBearingX: -0.703125 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 29.859375 + m_GlyphRect: + m_X: 402 + m_Y: 374 + m_Width: 31 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 12.21875 + m_Height: 10.078125 + m_HorizontalBearingX: 9.515625 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 25.765625 + m_GlyphRect: + m_X: 144 + m_Y: 283 + m_Width: 13 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 307 + m_Metrics: + m_Width: 12.890625 + m_Height: 50.796875 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 17.890625 + m_GlyphRect: + m_X: 128 + m_Y: 374 + m_Width: 14 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 23.28125 + m_Height: 51.3125 + m_HorizontalBearingX: 5.453125 + m_HorizontalBearingY: 50.78125 + m_HorizontalAdvance: 29.5 + m_GlyphRect: + m_X: 260 + m_Y: 6 + m_Width: 24 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 310 + m_Metrics: + m_Width: 8.921875 + m_Height: 18.3125 + m_HorizontalBearingX: 1.40625 + m_HorizontalBearingY: 8.71875 + m_HorizontalAdvance: 15.921875 + m_GlyphRect: + m_X: 496 + m_Y: 53 + m_Width: 10 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 12.4375 + m_Height: 44.3125 + m_HorizontalBearingX: 2.40625 + m_HorizontalBearingY: 34.71875 + m_HorizontalAdvance: 18.375 + m_GlyphRect: + m_X: 489 + m_Y: 208 + m_Width: 13 + m_Height: 45 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 9.203125 + m_Height: 9.25 + m_HorizontalBearingX: 1.640625 + m_HorizontalBearingY: 8.71875 + m_HorizontalAdvance: 16.453125 + m_GlyphRect: + m_X: 186 + m_Y: 436 + m_Width: 10 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 45.546875 + m_Height: 9.25 + m_HorizontalBearingX: 1.640625 + m_HorizontalBearingY: 8.71875 + m_HorizontalAdvance: 52.8125 + m_GlyphRect: + m_X: 128 + m_Y: 437 + m_Width: 47 + m_Height: 10 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 324 + m_Metrics: + m_Width: 31.6875 + m_Height: 54.03125 + m_HorizontalBearingX: -0.8125 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 29.46875 + m_GlyphRect: + m_X: 35 + m_Y: 156 + m_Width: 32 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 325 + m_Metrics: + m_Width: 5.328125 + m_Height: 65.734375 + m_HorizontalBearingX: 6.4375 + m_HorizontalBearingY: 53.796875 + m_HorizontalAdvance: 18.265625 + m_GlyphRect: + m_X: 6 + m_Y: 238 + m_Width: 6 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 18.40625 + m_Height: 54.03125 + m_HorizontalBearingX: 5.703125 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 29.21875 + m_GlyphRect: + m_X: 71 + m_Y: 74 + m_Width: 20 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 328 + m_Metrics: + m_Width: 16.90625 + m_Height: 5.59375 + m_HorizontalBearingX: 3.75 + m_HorizontalBearingY: 23.796875 + m_HorizontalAdvance: 24.5 + m_GlyphRect: + m_X: 115 + m_Y: 203 + m_Width: 18 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 331 + m_Metrics: + m_Width: 25.921875 + m_Height: 4.421875 + m_HorizontalBearingX: -0.9375 + m_HorizontalBearingY: -5.59375 + m_HorizontalAdvance: 31.078125 + m_GlyphRect: + m_X: 78 + m_Y: 203 + m_Width: 26 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 334 + m_Metrics: + m_Width: 16.90625 + m_Height: 64.78125 + m_HorizontalBearingX: 2.828125 + m_HorizontalBearingY: 54.390625 + m_HorizontalAdvance: 18.234375 + m_GlyphRect: + m_X: 6 + m_Y: 84 + m_Width: 18 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 335 + m_Metrics: + m_Width: 17.015625 + m_Height: 64.78125 + m_HorizontalBearingX: -1.46875 + m_HorizontalBearingY: 54.390625 + m_HorizontalAdvance: 18.203125 + m_GlyphRect: + m_X: 6 + m_Y: 161 + m_Width: 18 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 20.203125 + m_Height: 63.984375 + m_HorizontalBearingX: 2.203125 + m_HorizontalBearingY: 53.765625 + m_HorizontalAdvance: 20.4375 + m_GlyphRect: + m_X: 23 + m_Y: 238 + m_Width: 21 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 20.234375 + m_Height: 63.984375 + m_HorizontalBearingX: -1.859375 + m_HorizontalBearingY: 53.765625 + m_HorizontalAdvance: 20.46875 + m_GlyphRect: + m_X: 6 + m_Y: 391 + m_Width: 21 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 19.609375 + m_Height: 63.984375 + m_HorizontalBearingX: 2.203125 + m_HorizontalBearingY: 53.765625 + m_HorizontalAdvance: 19.984375 + m_GlyphRect: + m_X: 38 + m_Y: 391 + m_Width: 20 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 19.640625 + m_Height: 63.984375 + m_HorizontalBearingX: -1.71875 + m_HorizontalBearingY: 53.765625 + m_HorizontalAdvance: 20.015625 + m_GlyphRect: + m_X: 40 + m_Y: 314 + m_Width: 20 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 20.96875 + m_Height: 22.71875 + m_HorizontalBearingX: 5.703125 + m_HorizontalBearingY: 52.75 + m_HorizontalAdvance: 27.65625 + m_GlyphRect: + m_X: 480 + m_Y: 311 + m_Width: 22 + m_Height: 23 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 345 + m_Metrics: + m_Width: 29.75 + m_Height: 22.828125 + m_HorizontalBearingX: 7.203125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 363 + m_Y: 465 + m_Width: 30 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 346 + m_Metrics: + m_Width: 32.75 + m_Height: 12.71875 + m_HorizontalBearingX: 3.890625 + m_HorizontalBearingY: 27.0625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 99 + m_Y: 286 + m_Width: 34 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 7.046875 + m_Height: 18.046875 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.21875 + m_HorizontalAdvance: 13.75 + m_GlyphRect: + m_X: 496 + m_Y: 83 + m_Width: 8 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 18.046875 + m_Height: 18.046875 + m_HorizontalBearingX: 6.1875 + m_HorizontalBearingY: 50.21875 + m_HorizontalAdvance: 24.75 + m_GlyphRect: + m_X: 486 + m_Y: 392 + m_Width: 19 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 41.546875 + m_Height: 51.34375 + m_HorizontalBearingX: 1.8125 + m_HorizontalBearingY: 50.78125 + m_HorizontalAdvance: 46.203125 + m_GlyphRect: + m_X: 102 + m_Y: 220 + m_Width: 43 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 48.546875 + m_Height: 56.109375 + m_HorizontalBearingX: 2.96875 + m_HorizontalBearingY: 47.703125 + m_HorizontalAdvance: 53.828125 + m_GlyphRect: + m_X: 55 + m_Y: 6 + m_Width: 50 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 360 + m_Metrics: + m_Width: 37.34375 + m_Height: 65.625 + m_HorizontalBearingX: 1.328125 + m_HorizontalBearingY: 57.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 38 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 368 + m_Metrics: + m_Width: 39.625 + m_Height: 50.21875 + m_HorizontalBearingX: 1.078125 + m_HorizontalBearingY: 50.21875 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 345 + m_Y: 68 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 397 + m_Metrics: + m_Width: 34.578125 + m_Height: 51.34375 + m_HorizontalBearingX: 3.46875 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 157 + m_Y: 69 + m_Width: 36 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 398 + m_Metrics: + m_Width: 25.796875 + m_Height: 50.359375 + m_HorizontalBearingX: 7 + m_HorizontalBearingY: 50.359375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 406 + m_Y: 192 + m_Width: 26 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 35.03125 + m_Height: 50.8125 + m_HorizontalBearingX: 1.890625 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 322 + m_Y: 304 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 33.640625 + m_Height: 51.375 + m_HorizontalBearingX: 3.078125 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 191 + m_Y: 132 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 35.109375 + m_Height: 50.265625 + m_HorizontalBearingX: 1.78125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 359 + m_Y: 193 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.125 + m_Height: 50.828125 + m_HorizontalBearingX: 2.828125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 169 + m_Y: 6 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 33.84375 + m_Height: 50.265625 + m_HorizontalBearingX: 6.09375 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 318 + m_Y: 431 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 30.796875 + m_Height: 50.8125 + m_HorizontalBearingX: 6.234375 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 359 + m_Y: 366 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 433 + m_Metrics: + m_Width: 34.265625 + m_Height: 34.75 + m_HorizontalBearingX: 3.46875 + m_HorizontalBearingY: 40.84375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 434 + m_Y: 268 + m_Width: 35 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 437 + m_Metrics: + m_Width: 32.265625 + m_Height: 16.828125 + m_HorizontalBearingX: 4.34375 + m_HorizontalBearingY: 31.984375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 55 + m_Y: 286 + m_Width: 33 + m_Height: 17 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 440 + m_Metrics: + m_Width: 29.296875 + m_Height: 31.140625 + m_HorizontalBearingX: 5.734375 + m_HorizontalBearingY: 39.125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 444 + m_Y: 392 + m_Width: 31 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 441 + m_Metrics: + m_Width: 29.328125 + m_Height: 31.140625 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 39.125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 402 + m_Y: 421 + m_Width: 30 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 12.984375 + m_Height: 51.65625 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 51.65625 + m_HorizontalAdvance: 16 + m_GlyphRect: + m_X: 175 + m_Y: 311 + m_Width: 14 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 31.90625 + m_Height: 50.828125 + m_HorizontalBearingX: 4.03125 + m_HorizontalBearingY: 50.265625 + m_HorizontalAdvance: 37.34375 + m_GlyphRect: + m_X: 236 + m_Y: 132 + m_Width: 32 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 33.140625 + m_Height: 51.375 + m_HorizontalBearingX: 3.4375 + m_HorizontalBearingY: 50.8125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 204 + m_Y: 69 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 47.171875 + m_Height: 51.34375 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.75 + m_HorizontalAdvance: 52.390625 + m_GlyphRect: + m_X: 116 + m_Y: 311 + m_Width: 48 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 35.5625 + m_Height: 35.5625 + m_HorizontalBearingX: 3.21875 + m_HorizontalBearingY: 35.5625 + m_HorizontalAdvance: 42 + m_GlyphRect: + m_X: 460 + m_Y: 161 + m_Width: 36 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 12.203125 + m_Height: 35.25 + m_HorizontalBearingX: 2.640625 + m_HorizontalBearingY: 34.71875 + m_HorizontalAdvance: 17.5625 + m_GlyphRect: + m_X: 489 + m_Y: 264 + m_Width: 13 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 1130407173323327972} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 49 + m_Height: 78 + - m_X: 0 + m_Y: 78 + m_Width: 29 + m_Height: 77 + - m_X: 0 + m_Y: 155 + m_Width: 29 + m_Height: 77 + - m_X: 0 + m_Y: 232 + m_Width: 17 + m_Height: 77 + - m_X: 0 + m_Y: 309 + m_Width: 34 + m_Height: 76 + - m_X: 17 + m_Y: 232 + m_Width: 32 + m_Height: 76 + - m_X: 0 + m_Y: 385 + m_Width: 32 + m_Height: 76 + - m_X: 0 + m_Y: 461 + m_Width: 44 + m_Height: 49 + - m_X: 32 + m_Y: 385 + m_Width: 31 + m_Height: 76 + - m_X: 44 + m_Y: 461 + m_Width: 44 + m_Height: 49 + - m_X: 34 + m_Y: 308 + m_Width: 31 + m_Height: 76 + - m_X: 63 + m_Y: 384 + m_Width: 59 + m_Height: 73 + - m_X: 88 + m_Y: 457 + m_Width: 42 + m_Height: 49 + - m_X: 29 + m_Y: 78 + m_Width: 36 + m_Height: 72 + - m_X: 49 + m_Y: 0 + m_Width: 61 + m_Height: 68 + - m_X: 29 + m_Y: 150 + m_Width: 43 + m_Height: 66 + - m_X: 65 + m_Y: 68 + m_Width: 31 + m_Height: 66 + - m_X: 49 + m_Y: 216 + m_Width: 47 + m_Height: 64 + - m_X: 49 + m_Y: 280 + m_Width: 44 + m_Height: 28 + - m_X: 65 + m_Y: 308 + m_Width: 45 + m_Height: 64 + - m_X: 93 + m_Y: 280 + m_Width: 45 + m_Height: 25 + - m_X: 110 + m_Y: 305 + m_Width: 59 + m_Height: 63 + - m_X: 72 + m_Y: 134 + m_Width: 59 + m_Height: 63 + - m_X: 72 + m_Y: 197 + m_Width: 37 + m_Height: 17 + - m_X: 96 + m_Y: 68 + m_Width: 55 + m_Height: 63 + - m_X: 96 + m_Y: 214 + m_Width: 54 + m_Height: 63 + - m_X: 109 + m_Y: 197 + m_Width: 29 + m_Height: 17 + - m_X: 131 + m_Y: 131 + m_Width: 54 + m_Height: 63 + - m_X: 110 + m_Y: 0 + m_Width: 53 + m_Height: 63 + - m_X: 151 + m_Y: 63 + m_Width: 47 + m_Height: 63 + - m_X: 163 + m_Y: 0 + m_Width: 46 + m_Height: 63 + - m_X: 138 + m_Y: 277 + m_Width: 24 + m_Height: 22 + - m_X: 150 + m_Y: 194 + m_Width: 46 + m_Height: 63 + - m_X: 162 + m_Y: 257 + m_Width: 62 + m_Height: 48 + - m_X: 185 + m_Y: 126 + m_Width: 45 + m_Height: 63 + - m_X: 198 + m_Y: 63 + m_Width: 45 + m_Height: 63 + - m_X: 209 + m_Y: 0 + m_Width: 45 + m_Height: 63 + - m_X: 196 + m_Y: 189 + m_Width: 44 + m_Height: 63 + - m_X: 230 + m_Y: 126 + m_Width: 43 + m_Height: 63 + - m_X: 243 + m_Y: 63 + m_Width: 40 + m_Height: 63 + - m_X: 254 + m_Y: 0 + m_Width: 35 + m_Height: 63 + - m_X: 122 + m_Y: 368 + m_Width: 25 + m_Height: 63 + - m_X: 122 + m_Y: 431 + m_Width: 58 + m_Height: 21 + - m_X: 130 + m_Y: 452 + m_Width: 45 + m_Height: 59 + - m_X: 175 + m_Y: 452 + m_Width: 33 + m_Height: 59 + - m_X: 147 + m_Y: 368 + m_Width: 25 + m_Height: 63 + - m_X: 169 + m_Y: 305 + m_Width: 25 + m_Height: 63 + - m_X: 172 + m_Y: 368 + m_Width: 77 + m_Height: 62 + - m_X: 194 + m_Y: 305 + m_Width: 67 + m_Height: 62 + - m_X: 180 + m_Y: 430 + m_Width: 21 + m_Height: 21 + - m_X: 224 + m_Y: 252 + m_Width: 41 + m_Height: 49 + - m_X: 240 + m_Y: 189 + m_Width: 59 + m_Height: 62 + - m_X: 273 + m_Y: 126 + m_Width: 56 + m_Height: 62 + - m_X: 283 + m_Y: 63 + m_Width: 56 + m_Height: 62 + - m_X: 289 + m_Y: 0 + m_Width: 56 + m_Height: 62 + - m_X: 208 + m_Y: 430 + m_Width: 56 + m_Height: 62 + - m_X: 249 + m_Y: 367 + m_Width: 56 + m_Height: 62 + - m_X: 261 + m_Y: 301 + m_Width: 55 + m_Height: 62 + - m_X: 265 + m_Y: 251 + m_Width: 39 + m_Height: 49 + - m_X: 299 + m_Y: 188 + m_Width: 54 + m_Height: 62 + - m_X: 329 + m_Y: 125 + m_Width: 53 + m_Height: 62 + - m_X: 339 + m_Y: 62 + m_Width: 51 + m_Height: 62 + - m_X: 345 + m_Y: 0 + m_Width: 49 + m_Height: 62 + - m_X: 304 + m_Y: 250 + m_Width: 44 + m_Height: 48 + - m_X: 264 + m_Y: 429 + m_Width: 48 + m_Height: 62 + - m_X: 305 + m_Y: 363 + m_Width: 48 + m_Height: 62 + - m_X: 316 + m_Y: 298 + m_Width: 47 + m_Height: 62 + - m_X: 348 + m_Y: 250 + m_Width: 44 + m_Height: 48 + - m_X: 353 + m_Y: 187 + m_Width: 47 + m_Height: 62 + - m_X: 382 + m_Y: 124 + m_Width: 47 + m_Height: 62 + - m_X: 390 + m_Y: 62 + m_Width: 47 + m_Height: 62 + - m_X: 394 + m_Y: 0 + m_Width: 47 + m_Height: 62 + - m_X: 441 + m_Y: 0 + m_Width: 61 + m_Height: 47 + - m_X: 441 + m_Y: 47 + m_Width: 49 + m_Height: 61 + - m_X: 490 + m_Y: 47 + m_Width: 21 + m_Height: 30 + - m_X: 490 + m_Y: 77 + m_Width: 19 + m_Height: 30 + - m_X: 312 + m_Y: 425 + m_Width: 45 + m_Height: 62 + - m_X: 353 + m_Y: 360 + m_Width: 43 + m_Height: 62 + - m_X: 363 + m_Y: 298 + m_Width: 39 + m_Height: 62 + - m_X: 392 + m_Y: 249 + m_Width: 36 + m_Height: 48 + - m_X: 400 + m_Y: 186 + m_Width: 37 + m_Height: 62 + - m_X: 429 + m_Y: 124 + m_Width: 25 + m_Height: 62 + - m_X: 454 + m_Y: 108 + m_Width: 48 + m_Height: 47 + - m_X: 454 + m_Y: 155 + m_Width: 47 + m_Height: 47 + - m_X: 437 + m_Y: 202 + m_Width: 46 + m_Height: 60 + - m_X: 483 + m_Y: 202 + m_Width: 24 + m_Height: 56 + - m_X: 483 + m_Y: 258 + m_Width: 24 + m_Height: 47 + - m_X: 428 + m_Y: 262 + m_Width: 46 + m_Height: 46 + - m_X: 474 + m_Y: 305 + m_Width: 33 + m_Height: 34 + - m_X: 402 + m_Y: 308 + m_Width: 44 + m_Height: 60 + - m_X: 446 + m_Y: 339 + m_Width: 44 + m_Height: 47 + - m_X: 396 + m_Y: 368 + m_Width: 42 + m_Height: 47 + - m_X: 438 + m_Y: 386 + m_Width: 42 + m_Height: 44 + - m_X: 396 + m_Y: 415 + m_Width: 41 + m_Height: 44 + - m_X: 480 + m_Y: 386 + m_Width: 30 + m_Height: 30 + - m_X: 357 + m_Y: 459 + m_Width: 41 + m_Height: 35 + m_FreeGlyphRects: + - m_X: 17 + m_Y: 308 + m_Width: 17 + m_Height: 1 + - m_X: 34 + m_Y: 384 + m_Width: 29 + m_Height: 1 + - m_X: 63 + m_Y: 457 + m_Width: 25 + m_Height: 4 + - m_X: 49 + m_Y: 68 + m_Width: 16 + m_Height: 10 + - m_X: 29 + m_Y: 216 + m_Width: 20 + m_Height: 16 + - m_X: 93 + m_Y: 305 + m_Width: 17 + m_Height: 3 + - m_X: 65 + m_Y: 134 + m_Width: 7 + m_Height: 16 + - m_X: 72 + m_Y: 214 + m_Width: 24 + m_Height: 2 + - m_X: 96 + m_Y: 131 + m_Width: 35 + m_Height: 3 + - m_X: 110 + m_Y: 63 + m_Width: 41 + m_Height: 5 + - m_X: 96 + m_Y: 277 + m_Width: 42 + m_Height: 3 + - m_X: 131 + m_Y: 194 + m_Width: 19 + m_Height: 3 + - m_X: 138 + m_Y: 194 + m_Width: 12 + m_Height: 20 + - m_X: 138 + m_Y: 299 + m_Width: 24 + m_Height: 6 + - m_X: 150 + m_Y: 257 + m_Width: 12 + m_Height: 20 + - m_X: 151 + m_Y: 126 + m_Width: 34 + m_Height: 5 + - m_X: 185 + m_Y: 189 + m_Width: 11 + m_Height: 5 + - m_X: 65 + m_Y: 372 + m_Width: 57 + m_Height: 12 + - m_X: 110 + m_Y: 368 + m_Width: 12 + m_Height: 16 + - m_X: 0 + m_Y: 510 + m_Width: 130 + m_Height: 1 + - m_X: 88 + m_Y: 506 + m_Width: 42 + m_Height: 5 + - m_X: 122 + m_Y: 452 + m_Width: 8 + m_Height: 5 + - m_X: 172 + m_Y: 430 + m_Width: 8 + m_Height: 1 + - m_X: 196 + m_Y: 252 + m_Width: 28 + m_Height: 5 + - m_X: 180 + m_Y: 451 + m_Width: 28 + m_Height: 1 + - m_X: 201 + m_Y: 430 + m_Width: 7 + m_Height: 22 + - m_X: 194 + m_Y: 367 + m_Width: 55 + m_Height: 1 + - m_X: 224 + m_Y: 301 + m_Width: 37 + m_Height: 4 + - m_X: 240 + m_Y: 251 + m_Width: 25 + m_Height: 1 + - m_X: 273 + m_Y: 188 + m_Width: 26 + m_Height: 1 + - m_X: 283 + m_Y: 125 + m_Width: 46 + m_Height: 1 + - m_X: 289 + m_Y: 62 + m_Width: 50 + m_Height: 1 + - m_X: 299 + m_Y: 250 + m_Width: 5 + m_Height: 1 + - m_X: 249 + m_Y: 429 + m_Width: 15 + m_Height: 1 + - m_X: 261 + m_Y: 363 + m_Width: 44 + m_Height: 4 + - m_X: 265 + m_Y: 300 + m_Width: 51 + m_Height: 1 + - m_X: 304 + m_Y: 298 + m_Width: 12 + m_Height: 3 + - m_X: 329 + m_Y: 187 + m_Width: 24 + m_Height: 1 + - m_X: 339 + m_Y: 124 + m_Width: 43 + m_Height: 1 + - m_X: 502 + m_Y: 0 + m_Width: 9 + m_Height: 47 + - m_X: 305 + m_Y: 425 + m_Width: 7 + m_Height: 4 + - m_X: 316 + m_Y: 360 + m_Width: 37 + m_Height: 3 + - m_X: 353 + m_Y: 249 + m_Width: 39 + m_Height: 1 + - m_X: 382 + m_Y: 186 + m_Width: 18 + m_Height: 1 + - m_X: 437 + m_Y: 62 + m_Width: 4 + m_Height: 62 + - m_X: 490 + m_Y: 107 + m_Width: 21 + m_Height: 1 + - m_X: 437 + m_Y: 108 + m_Width: 17 + m_Height: 16 + - m_X: 400 + m_Y: 248 + m_Width: 37 + m_Height: 1 + - m_X: 437 + m_Y: 186 + m_Width: 17 + m_Height: 16 + - m_X: 502 + m_Y: 107 + m_Width: 9 + m_Height: 95 + - m_X: 501 + m_Y: 155 + m_Width: 10 + m_Height: 47 + - m_X: 428 + m_Y: 248 + m_Width: 9 + m_Height: 14 + - m_X: 392 + m_Y: 297 + m_Width: 36 + m_Height: 1 + - m_X: 474 + m_Y: 262 + m_Width: 9 + m_Height: 43 + - m_X: 402 + m_Y: 297 + m_Width: 26 + m_Height: 11 + - m_X: 446 + m_Y: 308 + m_Width: 28 + m_Height: 31 + - m_X: 396 + m_Y: 360 + m_Width: 6 + m_Height: 8 + - m_X: 438 + m_Y: 368 + m_Width: 8 + m_Height: 18 + - m_X: 353 + m_Y: 422 + m_Width: 43 + m_Height: 3 + - m_X: 437 + m_Y: 430 + m_Width: 74 + m_Height: 81 + - m_X: 437 + m_Y: 415 + m_Width: 1 + m_Height: 96 + - m_X: 509 + m_Y: 77 + m_Width: 2 + m_Height: 309 + - m_X: 510 + m_Y: 77 + m_Width: 1 + m_Height: 434 + - m_X: 507 + m_Y: 107 + m_Width: 4 + m_Height: 279 + - m_X: 490 + m_Y: 339 + m_Width: 21 + m_Height: 47 + - m_X: 480 + m_Y: 416 + m_Width: 31 + m_Height: 95 + - m_X: 208 + m_Y: 494 + m_Width: 303 + m_Height: 17 + - m_X: 208 + m_Y: 492 + m_Width: 149 + m_Height: 19 + - m_X: 264 + m_Y: 491 + m_Width: 93 + m_Height: 20 + - m_X: 312 + m_Y: 487 + m_Width: 45 + m_Height: 24 + - m_X: 398 + m_Y: 459 + m_Width: 113 + m_Height: 52 + - m_X: 357 + m_Y: 422 + m_Width: 39 + m_Height: 37 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: fd1b3683681c0dd43bafe960491f40db + pointSizeSamplingMode: 0 + pointSize: 70 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!28 &1130407173323327972 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-MediumItalic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0f0f0e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c0e111213131211100d0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f12141616161513100d0b07000000000000000000000000000000000000000000000000000000000000000000060c0d111416161614110d0b05000000000000000000000000000000000000000000000000040a2020202020202018161006000000000000000002090b191f202020202014120c03000000000000000000000000000001080b111515100e080000000000000000000000000000000000000000000711171920202020202016140e0400000000000000000000000000000000000a131a1c20202020202014120c020000000000000000000000000000000000000000010d161c1e2020202020200f0d0700000000000000000000000000000000000000000000000000000711171920202020202014120c0300000000000000000000000000060c0d1a1f20202020201e0b090200000000000000000000000000090e1020202020201b0b090300000000000000000000090f111f202020201e0b080200000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e21252523211a0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c12161e21242627282828272523201d15130d0c060000000000000000000000000000000000000000000000000000000000000000000002090b141d2024272a2b2c2b2a292623201c130c09030000000000000000000000000000000000000000000000000000060c0e192023272a2b2c2b29262220190f0d0800000000000000000000000000000000000000000c181f353535353535352d2b23180a0000000000000a151d202e34353535353529271f140600000000000000000000000009141d20262a2a25231c11040000000000000000000000000000000000000a19242c2f3535353535352b282116080000000000000000000000000000000d1b272e3135353535353529271f140600000000000000000000000000000000000001111e2a313435353535353524221b100200000000000000000000000000000000000000000000000a19242c2f353535353535292720140700000000000000000000000e1920233034353535353533211e160a0000000000000000000003111c2326353535353530211e160a0000000000000004121d2426353535353533201d15090000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2933363a3a39352c1c130800000000000000000000000000000000000000000000000000000000000000000000000000000000080b171f2128283236393b3d3d3d3d3c3a38363127292320190e0a040000000000000000000000000000000000000000000000000000000000030a161e21263135393c3f4041403f3e3b38353025211e160b0500000000000000000000000000000000000000000000060f1a21232c35383c3f4041403e3c38352b25221b100900000000000000000000000000000000000c1c2a334a4a4a4a4a4a4a433f35281806000000000a1a283236434a4a4a4a4a4a3f3b32241403000000000000000000000e192631353b403f3a372e1f170c000000000000000000000000000000000719293640444a4a4a4a4a4a403d33261604000000000000000000000000000a1b2b3943464a4a4a4a4a4a3e3b3224140200000000000000000000000000000000000d1e2f3c45494a4a4a4a4a4a3a372e2010000000000000000000000000000000000000000000000719293640444a4a4a4a4a4a3f3b322514030000000000000000000e1e2c3538454a4a4a4a4a4a483632281a0a00000000000000000011212f383b4a4a4a4a4a453632281b0a00000000000012222f383b4a4a4a4a4a4836312719090000000000000000000000000000000000000000000000000000000000000000000000000003172939464b4f4f4e493d302518080000000000000000000000000000000000000000000000000000000000000000000000000007101b222933363d39464b4e5152535352514f4d4b45383e38352c211f170c0800000000000000000000000000000000000000000000000000000a161e28323637444b4e52545556565553504d4a433636322820190e03000000000000000000000000000000000000010f1a212c35383c494d515455565554514d483c3a372e241d1206000000000000000000000000000004182a3a475e60606060606058534635231000000002152838454b585f6060606060544f43321f0c0000000000000000000e1e2b37444b515555504b3f33291c0c00000000000000000000000000000011243647545960606060606056514433210e0000000000000000000000000013273949565c606060606060544f42321f0c0000000000000000000000000000000002162a3c4d595e6060606060604f4b3e2e1b07000000000000000000000000000000000000000000112436475459606060606060544f4332200c000000000000000008182c3c494d5a5f60606060605d4b453828160200000000000000091c2f404c5060606060605b4b453928160300000000091d2f404c515f606060605e4b44372715020000000000000000000000000000000000000000000000000000000000000000000000000a1e334657616464635b4a433625130000000000000000000000000000000000000000000000000000000000000000000000010f1a212e373a464c52585761636667686867666562605658534d493c37332a221b10060000000000000000000000000000000000000000000003111a283238454b5255606467696b6b6b6a6865626054524b4639352b1e170b0000000000000000000000000000000008141c2c353d494e565a6266696b6b6b6966625a574f4b3e393020190e000000000000000000000000000a1f334758707575757575756d64533f2b16010000091d324556606e74757575757569614f3b2712000000000000000009192b3c495560666a6a655d4c473a2917040000000000000000000000000000172c4054656e7575757575756b62513d2814000000000000000000000000051a2e4356677175757575757569604f3b271200000000000000000000000000000000071c3145596b73757575757575645c4b37220d000000000000000000000000000000000000000000172c4054656e75757575757569614f3b27120000000000000000132536495a626f74757575757573605645321e09000000000000000e23384c5e65757575757570605745321e08000000000f24384c5e66747575757573605544311d080000000000000000000000000000000000000000000000000000000000000000000000000c21364b61757a7a786e605443301c0700000000000000000000000000000000000000000000000000000000000000000009151d2d363e4b4f5861676d7276797b7c7d7d7d7c7a7875716d68625a544c473a372e211a0f04000000000000000000000000000000000000000015212e38454b5660676e74797c7f8081807f7e7b78746e6861574d483c33291b1200000000000000000000000000000b1826303d494e5b636b72787c7f8081807e7b78726c645c514d40352c1e130500000000000000000000000c22374c61778a8a8a8a8a8a826d58432d18000005192b3c4b607482898a8a8a8a8a7e69543f29140000000000000001142637495a62737b7f7f7a6f615847331f110000000000000000000000000000192f44596e838a8a8a8a8a8a806b56402b16010000000000000000000000071c31465c71858a8a8a8a8a8a7e69543e291400000000000000000000000000000000091e34495e73898a8a8a8a8a8a7a644f3a240f000000000000000000000000000000000000000000192f44596e838a8a8a8a8a8a7f69543f291400000000000000071c304354627884898a8a8a8a8a8774604b36210b0000000000000010263b50657b8a8a8a8a8a8475604b3626140100000011263b51667c8b8a8a8a8a8874604b36200f0000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788d8f8e8372604a35200b00000000000000000000000000000000000000000000000000000000000000000d1927313d4a4e5c646e767d82878b8e9092929292918f8d8a87837e78716961584f4b3f352c1f180c000000000000000000000000000000000008131c333f4b566069757c84898e91949596959493908d88837d766c625a4c46392f1c130800000000000000000000000b1b2936434b5b636e7981878d919495969593918d87817a71665e4d493c30231507000000000000000000000a1f33475874899e9f9f9f9a85705b37271501000a2035485a6a7f949fa99f9f9c8674604b35200b00000000000000081d3144556278869095948f8476614c3f2e1c0800000000000000000000000000172c41566c81969f9f9f9f98836d58432e1800000000000000000000000004192f44596e84999f9f9f9f96816b56412c1601000000000000000000000000000000061c31465b71869b9f9f9f9f917c67523c2712000000000000000000000000000000000000000000172c41566c81969f9f9f9f96816c57412c17020000000000001325364a6072859a9fa99f9fa4937d685645321e090000000000000014293f54697e949f9f9fa2937e695443301c08000001142636576d8297a99f9fa6917c67523d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000b2035495a73899ea18f7a644f3a240f000000000000000000000000000000000000000000000000000000000000000e1d2b37444b5b636f7a838a92989ca5a3a6a7a8a8a7a6a4aa9f9c98938d867e766d655d4e493d342a1c0c0000000000000000000000000000000818253043505d65757f8892999ea8a7a9aaababaaa8a5a69e98928981786c61574c40302518090000000000000000000a1a29394654606a79838d969da5a6a9aaabaaa9a6a59d978f857c6f635a4d413325150700000000000000000004182a3a5c71879cb1b5b29d88725544311d080a1a2f404d62788a9fb4bab3a1907b655544311d08000000000000000b20354b6073859ba4aaaaa298826e5d4b37230e0000000000000000000000000014293f54697e94a9b5b5b09b85705b38281502000000000000000000000001172c41566c8196abb5b5ae99836e59442e190000000000000000000000000000000004192e44596e8399aeb5b5a9947f69543f2a1400000000000000000000000000000000000000000014293f54697e94a9b5b5ae99846e59442f19000000000000071c304354667c91a3b4bac2b29c8774604b3828160200000000000001142636586d8297adb5c0b29c8773604b35200e0000081c30435471869bb0b5c4b09a85705b4a36210b000000000000000000000000000000000000000000000000000000000000000000000006192b3c5a6f859aa8937e68533e29130600000000000000000000000000000000000000000000000000000000000e1e2c3b4855606b79848f989fa9adb1aca7a4a2a1a0a0a1a2a4a7aaada8a49c938a827a6f635b4c473a2a18040000000000000000000000000000132536434a616a7b87949ea7aeb3b9c6bec0c0c0bfbdc4b8b3ada89e978b8176665e4a433627190a0000000000000002162838465761727f8b99a1abb2b6c3bebab8b7b9c3b7b2aca39b918478675f5043332515050000000000000000001a2f445a6f8499afc4b49f8a75604b35200b1527384c5e6e8399a8babaa999836e5e4c372715010000000000000012283d52677d92a3b5c2c0b2a08f7a65503a25100000000000000000000000000011273c51667c91a6bbc8b39d88735645321d0900000000000000000000000014293f54697e94a9bec6b09b86715b3929170300000000000000000000000000000001172c41566c8196abc1c1ac97816c57422c1702000000000000000000000000000000000000000012273c51677c91a6bcc6b19c86715c3a29170400000000011426364a6073869cb1c1c9b5a3917c675544311a0a00000000000000081c30435471869bb0c6cab6a5907b66513d2c1a06000b20354b6075899fb4c9c8b4a28e79634e3a291704000000000000000000000000000000000000000000000000000000000000000000040a162b41566b8096ab97826d5737272019120b08020000000000000000000000000000000000000000000000000d1d2c3c49596273808c9aa2aeb3aba49c96928f8c8b8b8b8c8d8f9195999ea7aaa99f988f84796c615947341f0a000000000000000000000000000d1c304354606c7f8d9da5b3b8c5c9c8bbb4b1aeadaeafb1b4b9c6b9b4a99f96877c6a60544437271a0a000000000000091e324556617583949fa9b2bfc1b4b0a9a5a3a2a4a6abb2b7b5b0a29a8a7d6a615043332313000000000000000002172d42576c8297acc1bbaa8d78624d38230d1d314556657b90a1b2c4b49f8b78634d402f19090000000000000002172d42576c8297acc1d2cfbeaa95806a55402b15000000000000000000000000000f24394f64798ea4c6cab59f8a75604b36200b00000000000000000000000011273c51667c91a6bbc8b39e89735746331e0a0000000000000000000000000000000014293e54697e93a9bec4af99846f5a442f1a0000000000000000000000000000000000000000000f24394f64798ea4c6c9b39e89745847331f0a00000000081c304354677c91a4b5c9c0b19b8672604a37271500000000000000000b20354b6075899fb4c9c8c3af99846f5b4935210b000e23384e63788da8bacbc8c0ac97826c5846331f0800000000000000000000000000000000000000000000000000000000000000060c181f22263d52677c92a79b8671554438352b27201d1509030000000000000000000000000000000000000000000b1b2b3b495a627785959faab4a79e958d86817d7a7776757676787a7c8083888e959da5ada1998b8177614c37220c0000000000000000000000000d1d30414a607281949fabb6c3cbc0b4b0aa9f9c999898999b9ea8a9b1b5bab4a69d8d80726055453827150200000000000b21364b60758599a1b4bac0b4b0a39b94908e8d8f91969da5b2b6b4a89e927f6a615041301e0e0000000000000000152a3f546a7f94a9bfc8a58f7a65503a25192b3b4b6074869cb1bfb7a695806b5a49352111000000000000000003182d42586d8297adc3d3d1c0aa95806b55402b16000000000000000000000000000c21374c61778ca8b9cdbcab8d78634d38230e0000000000000000000000000f24394f64798ea4c6ccb8a78b76614b36210c0000000000000000000000000000000011273c51667c91a6bbc6b19c87715c3a2a180400000000000000000000000000000000000000000c22374c61778ca8b9ccb9a88c76614c37210c000000011426374b6073869cb1c2c8b4a2907b66544330190900000000000000000e23384d63788da9bab8b3b8b59f8c78634e3929170312273c51677c91a6c4b7b3b7b49e8a76614c3625130000000000000000000000000000000000000000000000000000000000030e1a212a343737444e63788da89f8a7560514d493c3c3631271e170b000000000000000000000000000000000000000316283948596278879ba3b4a99f95898078716c676462616060616264676a6e74798087909aa1aa9f927d68533d2813000000000000000000000005192b3c4d5f6b80969fb5bcc9c4b7b2a29a928b878483838486898e949ba3b0b4b7ab9f958273605645311d090000000000091e3245566d8297a2b4b9b4a29a8f857f7a7878797c8087919da5b2b9b49d947f6a5f4d3c2c19060000000000000012273d52677c92a7bcbda7927d68523d28203448596a7f94a4b6c0b29d8875614b3c2c190300000000000000000014293e53697e93a5b6c5c2b4a2917c66513c2611000000000000000000000000000a1f33475874899eb4c9c9a5907b65503b26100000000000000000000000000c21374c61778ca8b9cdc5a38e79634e39240e000000000000000000000000000000000f24394e64798ea3c6c9b49e89745947341f0a00000000000000000000000000000000000000000a1f34475974899eb4c9c6a38e79644e39240f000000081d314455677d92a4b6c9bfb09a85705e4c36251300000000000000000011273c51667c91a6b8a69da6b5ab96816c5746331e0a152b40556a8095aab7a69da6b7a8937e695443301c070000000000000000000000000000000000000000000000000000000a161e2c353a474c5355606375899ea98e796966625a58514b443733291b13040000000000000000000000000000000000091e3246576277879da5b4a49c8b80766b635b57524f4d4c4b4b4c4d4f52555460646b737b848f9ba18d78634d38230e00000000000000000000000b2034485a677d929eb0bdcfc0b4a69d91857c76726f6e6e6f7174797f868f9ba2b4bab5a0988374604b36200b0000000000021628384b6073849aa4a89e93857a706a65636264666b727c8798a0b1bbaf9d917d675a49352011000000000000000f253a4f647a8fa4c7bfaa957f6a55402a2f3f4d62788a9eb4c2b4a2927d675746321e0e000000000000000000000b21364b6075879ca7aeada49a8472604a35200b0000000000000000000000000004172a3a5c71879cb1c6bda8927d68533d28130000000000000000000000000a1f33475874899eb4c9bba6907b66513b2611000000000000000000000000000000000c21374c61768ca8b9cdb9a88c77614c37220c000000000000000000000000000000000000000004182a3a5c71879cb1c6bba6917c66513c27110000011527374b6073869cb1c2c9b3a18f7a654f402f1808000000000000000000152a40556a7f95aab39d889ca4b39e8976614b362111162839596e8399aeb39d889da9b19c8773604a35200e00000000000000000000000000000000000000000000000000010f1b28323d494e5961686f75797c879dae98827e7b78736d6760554b4639311f170b00000000000000000000000000000009192f404b6175859ba6b4a29a86796b61574e493d3d3a3736363637383a3c36434a4f5460656f7b858c836f5a4935200c00000000000000000000071b2d3e4d62788a9eb4bccdc0b4a29b887c706761585958595a54606469717b85939fa9b6a79c8676614b36210c0000000000000a1d3144556176869495897e70645c54504e4d4f51565e667582979fb1bbb49e8a78624d402f1c090000000000000d22374d62778ca9bac2ad97826d584227374b5d6e8398a8b9bcab9b85705f4d3929160000000000000000000000091e324557647a89949898938678625443301c0700000000000000000000000000001a2f44596f8499aec4c0aa95806b55402b1600000000000000000000000004172a3a5c71879cb1c6bea8937e69533e2914000000000000000000000000000000000a1f33475874899eb4c9c6a48e79644f39240f0000000000000000000000000000000000000000001a2f445a6f8499afc4bea9937e69543e29140000081d314455677d92a4b6cabcab99846f5d4b37221200000000000000000002152838596e8398aeae9983869cb1a8937e69533f2f1c1e32465772879cb2ab96818a9fb4a4907b65503c2b1905000000000000000000000000000000000000000000000003111f2d39454b5b636d777e84898e919da5b2a09893918d88837c746a61574d4133291b0d00000000000000000000000000011527374c5e6c8197a3b4a39a8476645c4b4639352c2825222120212123252725303536434a505d65707673604b3c2c1906000000000000000000000d22364a5c6e8399a8b9cdc4b4a29a8476675f524c463a434336434a4e545d65727e8b9da59e8978635746321e0900000000000002152737475861767f807768604f4b3e3b39383a3c404c5660728197a3b5b9a899836f5e4c38230f0000000000000b20354b60758a9fb4c4af9a856f5a36314455657b90a0b2c5b49f8c7a644f41301b0b0000000000000000000000031628394a5c64767f83837e74625a48362513000000000000000000000000000002172c42576c8197acc1c2ad98826d58432d18000000000000000000000000001a2f44596f8499aec4c0ab96806b56412b160100000000000000000000000000000004172a3a5c71879cb1c6bca6917c67513c2712000000000000000000000000000000000000000002172d42576c8297acc1c1ab96816c56412c1701021527374b6074879cb2c2c8b59f8d7a644f3f2e1c04000000000000000000091d32455672879cb1ad98827f94a9b19c86715d4c382321364b61768a9fb4a8937e8399aeae99836e5a4835200a000000000000000000000000000000000000000000000311212f3d4a57606b79828a93999ea8a6b2b7beb2aea8a6a79e9891887f76675f4c463a2b1d0d000000000000000000000000081d314455667b909fb1a59b847461584a3d3329211a120f0d0c0b0b0c0d0f12131c202530353f4b505861605443301e0e0000000000000000000005182a3b4f647a8ea1b2c6cbb7a69a847561584d413633292e2e253035393f4b5460687a87958c7c665a49392816030000000000000009192a3a4758616a6b62594e42372e25232324272f3845546073859ba9bab3a1907b66503d2d1a070000000000081c30435472879cb2c7b29d877254433b4b6074869cb1beb9a797826d5c4a362313000000000000000000000000000a1b2d3e4a58616a6e6e686056483c2b1808000000000000000000000000000000142a3f54697f94a9bec5b09a85705b37271501000000000000000000000002172c42576c8197acc1c3ae98836e59432e1900000000000000000000000000000000001a2f44596f8499aec4bea9947f69543f2a14000000000000000000000000000000000000000000152a3f546a7f94a9bfc3ae99836e59442e1900081d314455687d92a5b6cabbaa98836e5c4a362111000000000000000000000b20364b60758a9fb4ac9782768a9fb4a4907b65503c2b243a4f64798fabbca6907c7d92aab49f8b78624d3828150200000000000000000000000000000000000000000010212f3f4b5b6375808b979fa9afb4b9c6bbc3c6c6c3bec5b8b3ada69e94887d6e6158483b2b1c0c00000000000000000000000b20354b6074869cb1ab9d87766156463a2d212327282724201d140905000a161e21262a2b292e373a474c4b4336261400000000000000000000000b1f3447596e8399aebfcfbfb29d88766157463a30211f171919131c20242e36434a5c6476807c675e4c3c2c1b0b0000000000000000000c1c2a3a464c54554d483b31221b100e0d0f121a2836445563798b9fb4bfaf9a85705b4a36210c0000000000011426365a6f859aafc4b49f8a75604b4859697f94a4b6c2b39e8977614c3e2d1b05000000000000000000000000000010202d3a474c545958534b45382b1e0e0000000000000000000000000000000012273c52677c91a7bcc7b29d88725544311d08000000000000000000000000142a3f54697f94a9bec5b09b86705b3928160300000000000000000000000000000002172c42576c8197acc1c1ac96816c57412c1702000000000000000000000000000000000000000012273d52677c92a7bcc6b19b86715c392917031527384b6074879db2c3c7b49f8c79634e3e2d1b03000000000000000000000f24394e64798eaabbab96816e8398aeae99836e5a4835283d53687d92a8bcab8e79768b9fb4aa95806b5645321d090000000000000000000000000000000000000000081b2e3f4b5d657986969faab4bac2b6b1aaa6adb2bdb1aca5a9afb4b8b3a69e9283766259483a2a1909000000000000000000081c2f3f53687d93a4b59f8d7b65584738292d36393c3e3d393531262019121a2832363c3f403f3b37333337353026180800000000000000000000000d22374c62778b9fb4cac6b2a1907c66584639291c130a04000000070b111825303e4a58616b675f4d402f1e0e00000000000000000000000c1c2933363f4037342b1d140800000000000a182637495b6d8297adc3b4a28e79634e39240e000000000000182d42586d8297adc2bbaa8c77624d4d62778a9eb4c2b6a4947e69594734201000000000000000000000000000000002101c2a33373f43433e3632281a0e00000000000000000000000000000000000f243a4f64798fa4c7cab49f8a75604b35200b00000000000000000000000012273c52677c91a7bcc8b39e88735745321e0900000000000000000000000000000000142a3f54697f94a9bec4ae99846f59442f1a0000000000000000000000000000000000000000000f253a4f647a8fa4c7c8b39e89735746331e0a1d314556687e93a5b6cabaa997826d5b49352010000000000000000000000012283d52677d92a7c8a9947f6a7b90a4b49f8c78624d382841566c8196abb59f8b766f849aafb39e8875604b36201000000000000000000000000000000000000000000e22374b5d657b8a9ca4b4bbc1b5b0a49c959198a0b19f9790949a9faab4b8b3a19986776259473727150100000000000000000e23384c5d71869cb1a998826d5d4b3a2e373d4a4e5253524e4b4437352b1c3038454b51555554514c473a382f20190e00000000000000000000000215283854697e93aabbcec2ae99836e5e4c3a291b0c00000000000000000008131c2d3a474c55514d40302212000000000000000000000000000c171f212a2b2220180d000000000000000009192c3d4f64798ea5b6c0ab95806b563a2a17040000000000152a40556a7f95aabfc8a48f7a654f5d6d8298a8b9bfb19c8674604b3b2a180200000000000000000000000000000000000c171f212a2e2e28211e160a0000000000000000000000000000000000000d22374c62778ca9bacdbbaa8d78624d38230d0000000000000000000000000f243a4f64798fa4c7cbb8a68b76604b36210b0000000000000000000000000000000012273c52677c91a7bcc6b19c86715c3a2a170400000000000000000000000000000000000000000d22374d62778ca9baccb8a78b76614c36211528384b6074879db2c3c6b49f8b78624d3d2c1a020000000000000000000001162b41566b8096abbca7917c6773869cb1ab96806b5645323b5a6f859aafb29d8772677c91a7b8a6927d67523e2d1b070000000000000000000000000000000000000010253a4f657a8a9ea8b6c2b9b4a39b9087807c8298ac97827b7f848b959fa8b5b2a49c8677615544311d0e000000000000000114263650657b90a4b49f8b78624d3f303f4b4f5b636768676460554d483c30404d5660666a6b69666158504c3f352b1e1103000000000000000000091d3245566f849aafc8c9b5a48f7a6550402f1c0c0000000000000000000000000f1c293337403c39302212040000000000000000000000000000040a0c15160d0b05000000000000000000000f22364a5c72879cb2c6b19c86715847331f0a000000000013283d52687d92a7bdbca7927c6755657b8fa0b2c6b3a1907b655544311d0c00000000000000000000000000000000000003111c23252a2a2a2a211e160a00000000000000000000000000000000000b20354a6075899fb4c9c8a58f7a65503a25100000000000000000000000000d22374c62778ca9bacdc4a38d78634e38230e000000000000000000000000000000000f253a4f647a8fa4c7c9b49e89745847331f0a00000000000000000000000000000000000000000b20354b60758a9fb4c9c5a38e79634e39241d324556687e93a5b7cab9a896816c5a48351f0f00000000000000000000000417293a5a6f8499afc5a48e7964697e93a8b39e8975604b36485973889eb3ae99846e6075889eb3b09b85705c4a36220c0000000000000000000000000000000000000011263b51667b8c9fb5c0b6a89e93857b726b687e93a89a846f696f77808a9ba3b3b5a49b8473604b3c2c1906000000000000081c3043546d8297acad98826d5a4834404d5d6571797c7d7c79746c625a4b434d5e66757b7f807e7b776f655d4d483c2f22120500000000000000000b20364b60758a9fb4c9c6b19c86715d4b37221200000000000000000000000000000c171f212b27241d1204000000000000000000000000000000000000000000000000000000000000000000071b2d3e586d8297adc2b59f8b77614c37210c000000000010253b50657a90a5c9bfaa947f6a6573869cb1bebaa999836e5e4c3727150000000000000000000000000000000000000011212e373a3f3f3f3f3632281a0a00000000000000000000000000000000071c30435472879cb1c7bda7927d68523d28130000000000000000000000000b1f34475974899fb4c9bba5907b66503b2611000000000000000000000000000000000d22374c62778ca9baccb9a88c76614c37210c0000000000000000000000000000000000000000081c30435472879db2c7bba6917b66513c2628384b6075879db2c3c5b49e8a77614c3c2b190100000000000000000000000a1f33465873889db2b8a78c76616176899eb4a7927d68533f4c62778ca7b8ab95806b566c8196abb4a38e79644f3a2a17040000000000000000000000000000000000000f24384c5e6b8095a2b3a49c8a7e72655d55647a8faa9e88735958616b78859aa1b3b4a295806a5b4935210d0000000000000b20354b6074889eb3a68f7a644f3c3b4d5e667b868e9193928e8881786a60545d667c8891949594908b847b6f625a4c4030231203000000000000000f24394f64798ea9bacdc8aa947f6a553f2e1c04000000000000000000000000000000040a0c1612100a00000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdbcab8f7a65503a251000000000000d23384d62788dabbcc3ad9882797a8298a4b5c4b49f8b78634d402f1909000000000000000000000000000000000000081c2e3f4b50545454544b4538281602000000000000000000000000000000001325365a6f849aafc4bfaa957f6a55402a1500000000000000000000000005182a3b5c72879cb1c7bda8937d68533e2813000000000000000000000000000000000b20354a60758a9fb4c9c6a48e79644f39240f0000000000000000000000000000000000000000011426365a6f859aafc4bea8937e69533e29324556697e93a6b7cbb8a795806a5947341e0e0000000000000000000000000c21364c61768ba6b7b39e897358576c8197acb19c86715d4b50657b90a5c5a7927c675263798ea3b5ad97826d5847331f08000000000000000000000000000000000000091d2f404b607284989e9786796860544b4b60758a9fa68c77624d4c5a6274839aa5b6b49f8b78634d3b2b180500000000000f24394e64798ea6b39d8874604a354859667c8c9ca4a7a8a7a79e968a7f7260657b8c9ea6aaaaa9aa9f99908478665e4d413021110000000000000013283d53687d92a8c7cebbaa907a65503b2511000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbc9a8927d68533d281300000000000b20364b60758a9fb4cab2a0988e8f98a0b2c2b7a695806b5a49352111000000000000000000000000000000000000000e23374b5d656a6a6a6a605645321e0900000000000000000000000000000000172d42576c8297acc1c2ad97826d58422d18111111111111111111111111111a2f455a6f849aafc4c0ab95806b56402b1601000000000000000000000000000000071c30435472879cb2c7bba6917c66513c2711000000000000000000000000000000000000000000182d42586d8297adc2c0ab96816b56413a3b4b6075889db3c4c4b39e8976614c3a2a180000000000000000000000000010253a4f657a8fa4c4b09b86715b4e63798ea2b4a48f7a655054697f94a9bbaa8e79644e5b70859bb0b49f8a76614c36261401000000000000000000000000000000000000121c304354617582898275635b4a4336455671869ca6917b66513c48566176879cb2baa998826d594834200b000000000013283e53687d93a8ac97826d5443374d62788a9eaab5b4ab9f9faaa99f94837570859baaaea59c999a9fa8a199897c675f4d3f2f1e0e000000000000162b40556b8095aac0cab49f8a76614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4babfa9947f6a543f2a150000000000081d31445573889db2c8beb2ada3a4adb2bebaa99d8875614b3c2c19030000000000000000000000000000000000000010253a50657b7f7f7f7f74604b36210b00000000000000000000000000000000152a3f556a7f94aabfc4af9a856f5a36262626262626262626262626262626262d42576c8297acc1c2ad98836d58432e1800000000000000000000000000000000001325365a6f849aafc4bea9947e69543f2914000000000000000000000000000000000000000000152a40556a7f95aabfc3ae98836e5950505059697e94a6b7cbb7a6947f695746331c0c0000000000000000000000000013293e53687e93a8bdad98836e584a5b70859aafae98836e59586d8298adb49f8a75604b53687d93a8baa9947f695443301c08000000000000000000000000000000000000011426364657616d736d6157493d302838586d8298aa95806a5540384658677c91a5b6b49f8b77624c37220d0000000002172d42576c8297aca8937d6853363c576c8196a8b9aa9f938b8a8d949ea19984778c9fb59d948784858a959fa79e8c7d675d4b3c2b19050000000000182d42586d8297adc2c7b19c87725746321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3b9c0aa95806b55402b160000000000021527375b70859ab0c5cebdb1acaaafb4c0b49f89796457463727190900000000000000000000000000000000000000152a3f556a7f949494907b65503b25100000000000000000000000000000000012273d52677c92a7bcc7b29d877254433b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3f556a7f94aabfc5b09b85705b3828150200000000000000000000000000000000182d42576d8297acc2c1ab96816c56412c1701000000000000000000000000000000000000000013283d52687d92a7bdc6b09b8671656565656877899eb3c4bbb29d8875604b3929170000000000000000000000000002172c42576c8197acc0aa95806b553d51677c91a6b49f8b78625571869bb1b19c877256454b61768a9fb4b29d8773604b35200e0000000000000000000000000000000000000008182939464b585e574b46392c1c293e54697e93a999846e593b2a3a4a6073879cb2bbaa947e695436261401000000051a30455a6f859aafa48e79644f39485a73889eb3b49f8c7e7674787f889ba29a869caba6947f726e7076808c9fa99f8c7b655a483520120000000000192f44596e8499aec3c5b09a85705b39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5bac0aa95806b55402b16000000000000182e43586d8398adc2c4b19f97949aa2b0baa99882746055443727180800000000000000000000000000000000000014293e53697e93a8a995806a553828150200000000000000000000000000000010253a4f657a8fa4c8c9b49f8a75605050505050505050505050505050505050505052677c92a7bcc8b29d88735645321d0900000000000000000000000000000000152a40556a7f95aabfc3ae99846e59442f1900000000000000000000000000000000000000000010253b50657a90a5c9c8b39e897b7a7a7a7b7e869ca7b8bbaa9f907c665645342b1c1308000000000000000000000005182b3b5a70859aafbda8927d68533d4b6074889db2aa95806b60758a9fb4ae98836e593846576d8297adb6a5907b66513c2c1906000000000000000000000000000000000000000b1b2933364349423633291b10253a50657a8fab9d88735947343043546c8196abc8af9a856f5443301c08000000081d32475d72879cb2a88c76614c384d62788da6b8ac96816c615a626977859ba49ca4b39d8873605957616a7c8b9faa9e8978624d41301909000000001a2f455a6f849aafc4c4ae99846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e14140e0c06000000000005182a3a53687d93a8bdbea9937e69543e2914000000000000162b40556b8095aac0c1ac97817f84969eb0b2a098837360554436261808000000000000000000000000000000000013283d52687d92a7af9a85705645321d090000000000000000000000000000000d22384d62778daabbcebbaa8d78666666666666666666666666666666666666666666667a8fa4bacab59f8a75604b36200b0000000000000000000000000000000012283d52677d92a7bcc6b19b86715c3a29170400000000000000000000000000000000000000000d23384d62788dabbcccb8a79e8f8f8f8f90939ca4b6c5b49f8b7d6861594c483b3025180c000000000000000000000b2034485973899eb3c7a58f7a65503a44556a7f95a9b39e887563788ea9baaa95806a5540394f657a8fa4b6ae99846f5a4935200a00000000000000000000000000000000000000000b171e212e342d211e170b0c21364b61768b9fa68c77614c37253652677c91a7bcb49f8974604b35200b000000091f34495e74899eb39f897458473a4f657a8fa4bcab8e79634e484d596276869ca9b5af9a85705443464c5e667c8d9fa79a846f5f4d372614010000001a30455a6f859aafc4c2ad98826d58432d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e0f1a21232a29232019151311111219203347586d8398adc2c4a7927c67523d271200000000000013283e53687d93a8bdbca6917c6a6f80969fb1b2a1998273605443362513000000000000000000000000000000000011273c51667c91a6b49f8a75604b36200e0000000000000000000000000000000b20354b60758a9fb4c9c8a9937f7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7d92a7bccfbcab8d78634d38230e0000000000000000000000000000000010253a50657a8fa5c8c9b39e89745846331f0a00000000000000000000000000000000000000000b20364b60758a9fb4cac5b8b3a5a5a5a5a5a8b1b6c2cab49f8c847e776c62594a43362a1c0c0000000000000000000d22374d62778ca7b8baa98c77624d37374c62778a9fb4a6927d677c91a7c7a6917c67513c374b5d72879cb1b59f8c78624d382816030000000000000000000000000000000000000000030a0c181e180c0a03000a1e33465772879ca5907b66503b263a50657a8fa5babaa98d78624d38230d000000081d314455758a9fb39d88735e3a3b50667b90a5b49f8a75604b353b475863798b9fb4b09b86705b3c33404c5e6c8196a6a2917c675544311d08000000192e44596e8399aec3c2ad98826d58432d18030000000000000000000000000000000000000000000000000000000000000000000000000000000000081621292c35383f3e38352c2b282626272b34424c61778a9fb4c9b7a68d78634e38230e00000000000011263b50667b90a5bbbea9947e69626c8197a0b2b2a1988272605443301c160700000000000000000000000000000010263b50657b90a5baa98f7a65503c2b1b0c0000000000000000000000000000081c30435472879db2c7c1ae9d9390909090909090909090909090909090909090909090929badc0dac9a5907b65503b2610000000000000000000000000000000000d22384d62778daabbccb9a78b76614c36210c0000000000000000000000000000000000000000081d31445573889db2c8d6c8bbb4b4b4b4b4b4b4bac7b9bcab9f9a938a8177696054473a2a1c0c000000000000000011263b50667b90a5c5b49f8974604a353447596d8298adb09b85708095aabaa98e78634e392e3f54697f94aabbab96806b5645321e0900000000000000000000000000000000000000000000000309020000000003172939586e8398a9947f6a543f2a3a4f647a8fa4b9c7a48f7a654f3a25100000000b20354b60758aaab29d87725d483a4f657a8fa4b49e89745745322a3a4a5b6c8196a9b39e89735a49352f404b6075889db29d8773604b35200e000000182d43586d8298adc2c3ae98836e59432e190400000000000000000000000000000000000000000000000000000000000000000000000000000000041626343d3d494e54544d493c403d3c3b3d3c484d606c8197a9bac9b39d88735b4935210c0000000000000e23384e63788da3c4c1ac96816c5760728298a0b2b2a0978172604a443425150700000000000000000000000000000f24394e64798eabbcac97816c5a4839291c0f01000000000000000000000000011426365a6f859aafc4cbbbaea9a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a7adb9cad2bda8927d68533d2813000000000000000000000000000000000b20354b60758a9fb4cac5a38e79644e39240f0000000000000000000000000000000000000000021527375b70859ab0c5cebbaa9f9f9f9f9f9f9fa9a2a4a9afb4afa99f978a7f726158473a2a1b0b00000000000000142a3f54697f94a9beb19c87715443302a3b4f647a8fa3b5a38f7a8399aeb49f8a75604b3522374c62778b9fb4b39e8975604b36211000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a998836e593a2f4052677c92a7bcbba5907b66503b26110000000b20354b60758aaab29c87725d47394e63788eaab9a88b76604b36212d3d4c61778a9fb4a78d78634d3823324557697f94a7a5917c67523c2b19060000172c41576c8196acc1c4af99846f5a442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000e21344451565b636969635a595552515052545a626d7e939fb1c7bcab97826c573d2c1a060000000000000b21364b60768ba6b8c3ae99846e595460738298a1b3b19f96816c62514333251506000000000000000000000000000b21364b60758b9fb4b49e8a786257473a2d1f1403000000000000000000000000182d42586d8297adc2dac9bcb5b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b4bac7d7c0aa95806b55402b1600000000000000000000000000000000081d31445572889db2c7bba6917b66513c2611000000000000000000000000000000000000000000182e43586d8398adc2cab49f8c8a8a8a8a8a8a8b8c8f949a9fabb2b4a99f94837661584739291603000000000001142636586d8297adc2ae99846f59362522374b5d71869bb1ac9781869cb1b19c86715544311f3447596e8399aeb8a7927d68523e2e1b0800000000000000000000000000000000000000000000000000000000000010263b50657b90a59d87725846404c5e6e8399aec3c6a5907a65503b2510000000081d314455758a9fb39e88735e38364b60758a9fb4a28d78634d38231f3447596d8298ada8937e69533b2a28394b6176899eaf9a85705a4835200b0000152b40556a8095aabfc6b19c86715c3b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000000014293d51626b72787f7e78736e6a686666676a6f7882939caebdc3b59f8c79634e39230f00000000000000091e32455673889eb3c6b19c86715c445560738399a2b4b19f96806b62504332241406000000000000000000000000091e3245566e8399a8b9a89b857561584a3d311e170b0000000000000000000000152a40556a7f95aabfcfbcab9f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9fa9bacdc2ad98826d58432d1800000000000000000000000000000000011426375a70859aafc5bea9937e69543e2914000000000000000000000000000000000000000001162b40566b8095abc0c2ad98827474747474747577797f848c98a0b4bab4a1998676615746321e110000000000081c30435471869bb0c1ab96816c56412c1b2e3f53687d92a7b39e88899eb3ad98836d583727182a3b51667b90a6b7b09b86715c4b37220c0000000000000000000000000000000000000000000000000000000000000c21374c61768ca5a58b76614c4d5e667b90a1b2c6b9a88e78634e39230e000000011426495e73899eb39f8a74564531455671869bb1a7927d68523a29182a3a4f657a8fa5af9a846f5947341f3246576d8297ad9f8c78624d38230d000012273d52677c92a7c8c9b39e8974594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b80878d94938d8883807d7b7b7c7f848b97a0aebbc5b7a598836e5b4935210c00000000000000031628385b70869bb0c5b39e8974584644556074849aa2b4b09e95806a614f42322413050000000000000000000000021628384e63798a9eaab4a39a8476635b4e4233291b0e0000000000000000000013283d52687d92a7bdcab59f8d89898989898989898989898989898989898989898989898a9fb4c9c5b09a85705b3727150100000000000000000000000000000000182d43586d8298adc2c0ab96816b56412c1601000000000000000000000000000000000000000013283e53687d93a8bdc5b09a85705f5f5f5f56606264696f7982919fa8bab3a49b8575614b3f2f1c08000000000b20354b6075899fb4bea8937e69533e291421364b6075899eb3a79e9ea7b9aa947f6a553f2a1520354b6074889db2b5a38f7a644f3a2a180400000000000000000000000000000000000000000000000000000000000a1f33475872889da58f7a6559626d7c8a9eb4bfc7b49e8975604b35200b000000001c32475c71879cb1a98b75604b3638566b8096abad98836e5846331f22374b5d72879db29f8b77614c3722293951667c91a9ab937e69543e291400000e24394e63798eaabbccb9a78c77624d37220d000000000000000000000000000000000000000000000000000000000000000000000000000000061b30455b70859aa5a9a9a69d989592919092949a9fa9b1bec3b6a79d8776614c3d2c1a060000000000000000192e43596e8398aec3b9a88b76614c3745566175849ba3b5af9e947f6a604f423123130400000000000000000000000a2135495b667c8c9fa9b4a29a877968604c46392c1e0e00000000000000000010253a50657a8fa5c8c9b49e8a74747474747474747474747474747474747474747474747d92a7bdc7b29d88725544311d0800000000000000000000000000000000162b40556b8095aac0c3ae99836e59442e1900000000000000000000000000000000000000000011263b50667b90a5bbc8b29d887355444a4a454b4d4f545b636d7d8a9faabbb5a397816c5d4b382311000000000e23384e63788da9bac9a6907b66513b26111e3245566b8096abb8b3b3b9c5a6917b66513c26111d3144556b8095abbcad98826d5947341f09000000000000000000000000000000000000000000000000000000060f1a212a3a596e8399a9947e696e77828d9ea8b9cdbaa998826d5544311d08000000051a2f455a6f849aafa28d78634d383a4f647a8fa4b49e8976614c3a2a1b2e3f556a8095aaaa937e69543d2c21364b60758a9faf99846f5a3c2b1906000b20364b60758a9fb4c9c5a6917b66513c261100000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aac3c4b7b2aeaaa7a6a5a7a9afb4bac6b9b4a59c897a645847331f0f000000000000000001162c41566b8196abc0c6a38e79644e393846576176859ba4b5ae9d937e69604e413023120400000000000000000000061a2c3d4d5e677d8b9da5b4a59c8a7e6e6157493c2c1e0e00000000000000000d23384d62788daabbcdb9a88c77615e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e657a8fa5c8cab49f8a75604b35200b0000000000000000000000000000000013283d53687d92a8bdc6b09b86715b3929160300000000000000000000000000000000000000000e23384e63788da3c4cab49f8a75604b36283236373a3d494e5f677b8c9fb4c1b19f907b65503f2e1c0800000011273c51667c91a6c7bcab8d78634e38230e1628384d62788c9fb4c8c9ccbaa88d78624d38230d1426374d63788c9fb5b49f8a77614c37261401000000000000000000000000000000000000000000000000010f1a212c353643556a7f95aa98827b838b979fabb9c6bdb49f8b79634e3727150100000002172c41576c8196aca6917b66513c374b5c71869cb1a8957f6a5847331f23384d63788da3b09b86715b49352132455671869bb19e89745a4935200b00081d31445571869bb1c6c0ab96806b563d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea6b8cbbdb1acafb3b7c4b8b9c6b9b4afa89e958779645c4a3a2a170100000000000000000014293e53697e93a8bebba6917b66513c283946586176869ca5b6b59f8d7e685f4d4130221203000000000000000000000f1f30404d5f677a879aa2b0a99f938275625a493c2b1b0b000000000000000b20354b60758a9fb4cac6a48f79644f4949494949494949494949494949494949494d62788daabbcebbaa8d78624d38230d0000000000000000000000000000000010263b50657b90a5c9c8b39e89735746321e0a00000000000000000000000000000000000000000b21364b60768ba6b8cbbcab8d78634d38231d2022242c35414d5d697e93a4b6bdb19c86715d4b372308000000152a40556a7f95aabfb49f8a75604b36200b0a2035495a6f8499aec3d3c9b49f8974604a35200b092035495a6f849aafbaa9947f6a5544311d08000000000000000000000000000000000000000000000008141c2c353d494e5460667b90a6a09890989faab5bcc9bcb49f947f695b4a361909000000000013283e53687d93a8aa947f6a55362e3e52677d92a4b39e8976614c42312035495a70859bb0a38e79634e36252838586d8297ada78d78624d38230d0002152737566b8095abc4c6b19c86715b4935210a0000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074889db3c8b19f979a9da6a2a3a4a3a89e9a93897f75635b4a3e2d1c0c0000000000000000000011263c51667b91a6bbbea9937e69543e29293a47586277879ca5b7ab9f8d7d675f4d402f21110000000000000000000001122230414d5c647784969fb4b4a0988678625a4939291703000000000000081d31445572889db2c7bca6917c67513c34343434343434343434343434343434354b60758a9fb4cac8a58f7a65503a2510000000000000000000000000000000000e23384d63788dabbcccb8a78b76614b36210c0000000000000000000000000000000000000000091e32455673889eb3c8c9a5907a65503b25100b0d0f1a21303f4b6073869cb1c9b5a48f7b6550362614010002162838596e8398aec3b29d88725645321d0906192c3c50667b90a5b6cac6b09b86715443301c0706192c3c52677d92a7b9b29d8774604b35200f00000000000000000000000000000000000000000000081826303d494e5b636b737a8298adb2ada5aeb4bbc8c1b5ab9f958172604a3d2d1a0000000000000e24394e63798ea7ad98836e544330354b6074869caba799836e604e41312c3c53687e93a9ab95806b544330293f54697e94a9a5907b65503b261000000f253a4f647a8fa6b8c9b5a48d78634e392816030000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546d8298adc9ac978184888b8d8e8f8e8c89857e776a6157493d2d201000000000000000000000000e24394e63798ea3c5c0ab96816b56412c1b2a3a48596278879da6b7ab9f8c7d675e4c3f2f1a0a00000000000000000000041223303e4a59617381939faab2a49c8878625746331e10000000000000011527375b70859ab0c5bea9947f69543f2a1f1f1f1f1f1f1f1f1f1f1f1f1f1f1d31445572889db2c7bda7927d68523d2813000000000000000000000000000000000b20364b60758a9fb5cac5a38e79634e39240e0000000000000000000000000000000000000000031628385b70869bb0c5bda8927d68533d281300000006131c304354687d92abbcc2ae98836e5443301c0800091e32455672879cb1c1af9a856f5a38281502000e20354a6073879cb2c5c2ad97826d5836251300000e21364b6075899eb3b7a5917c66513d2c1a06000000000000000000000000000000000000000008182636434b5b636e7980878f98a0b2c5c2bac3c9bcb5afa39b8c806d605443301f0f0000000000000b20354b6074899eb39e8874604b35314455657a8d9fb5a1937e68604b4437374c61768a9fb29d8773604a35273d52677c92a7a8927d68533d281300000b20354b6074889eb3c9c2ab96806b5745321e0c00000000000000000000000000000000000000000000000000000000000000000000000000000013253652677c92abbca6917c6f737677797a7977746f6961584b46392c1f100200000000000000000000000c21364c61768ba7b9c3ae99836e59442e191c2a3b485a6378889da7abaa9f8c7c665d4c38281603000000000000000000000412202e3a4755606c7e8c9fa9b6a69c8776614c3e2e1b08000000000000182d43586d8298adc2c1ac96816c57412c17090909090909090909090909011426375a70859aafc5bfaa957f6a55402a1500000000000000000000000000000000091d32455673889db3c8bba6907b66513b2611000000000000000000000000000000000000000000192e43596e8398aec3bfaa95806a55402b1500000000011426364c61768b9fb4c9b39e8974604b35200b000b21364b60758a9fababab97826d57422d180000071c304354697e94a7aeaea9947f69543f2a140000091e3245566c8196a9abab9a846f5b4935210c00000000000000000000000000000000000000011426364354606979838c959da5adb2becfc7c2b6b1ab9f9a90857a6a624a4336251301000000000000081c3043546d8297ada78f7a654f3627374b5d6b8096a2b49f8d7e6a60554a3d47586e8399aea5907b655038283b51667b90a6a9947f69543f2a140000081c3043546c8196abbcc8b39e8875604b3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61778b9fb4ac97816c576162636464626054544c473a32291b0e000000000000000000000000000a1e33465774899eb3c6b09b86715b3929160d1d2b3c495a63798994969696968a7b655645321e09000000000000000000000002101c2a37444b60687c8b9fb4b6a597826d5c4b37220c000000000000162b40556b8095aac0c4ae99846f59442f1a00000000000000000000000000182d43586d8298adc2c2ad97826d58422d1800000000000000000000000000000000021528385b70869bb0c5bea8937e69533e2914000000000000000000000000000000000000000001162c41566b8196abc0c2ad98826d58432d180000000000081f33475871869bb0c6b9a78e79644f39240f000f24394e64798e96969696927d68533d28130000001325364c617689979898988f7b65503a25100000021628384e63798b959696968b78634e38230e00000000000000000000000000000000000000091c30435460727f8b989fabb2b7c3c9c9cdb6aaa49c948c857b72645c504330251808000000000000000114263651667b91a8ab95806b5443302e3f4b6073849aa3ab9f8d7f73635b534e51667c91a7ad97826d5645323a50657a8fa5aa957f6a55402a150000011426364d63788c9fb4cab8a6947e695847331f1201000000000000000000000000000000000000000400000000000000000000000000000000000a1f33475870859bb0b29d87725b4b4d4e4f4e4d4a433637332a1e160b0000000000000000000000000000031729395c71869bb1c6b39e89735746321e0a0e1e2c3c4a5b63777f81818181818075604b36210b000000000000000000000000000c192631424e5e677d92a0b2b1a08f7a644f3a291704000000000013283d53687d92a8bdc6b19c86715c3a2a1704000000000000000000000000152b40556a8095aabfc4af9a856f5a3626140100000000000000000000000000000000192e43586e8398adc3c0ab96806b56412b1601000000000000000000000000000000000000000014293e53697e93a8bec5b09a85705b37271501000000000417293a586e8398adc3c5a8937d68533e2813000f24394e647a81818181817d72604a35200b000000081f334658647a828383837e695d4b37230e0000000a2135495b647a80818181817b65503b261000000000000000000000000000000000000009192f404b607282949fa9b4bcc9c5b9b3b4baaa988f867f78706660544a3e331c13080000000000000000000b20364b6075899eb29d8774604b35203144556176859ba3ab9f9485796f6864626275899eb39e8975604b363a4f647a8fa4aa957f6a55402a15000000082135495b6e8399aebfc5b39e8876614c40301f0f000000000000000000000000000000010a10121913110b010000000000000000000000000004172a3a556a8095aab6a58d78634e38393a3937353025221f180c0300000000000000000000000000000000192f44596e8499aec3b8a78b76614b36210c000e1e2d3d4a5962696c6c6c6c6c6b605645321e09000000000000000000000000000009141d31404d5f6e8298abbcae99836e5847331f0a000000000010263b50657b90a5c9c9b49e89745847331f0a00000000000000000000000013283d53687d92a8bdc7b29d87725443301c0800000000000000000000000000000001162b41566b8096abc0c3ae98836e59432e1900000000000000000000000000000000000000000011263c51667b91a6bbc7b29d88725544311d080000000000172c41576c8196acc1bfaa947f6a553f2a15000d21364a5c646c6c6c6c6b68605443301c070000000417293a4a5c646d6e6e6e69604f3f2e1c08000000061a2c3d4a5c646b6c6c6c6c655d4c38230e0000000000000000000000000000000000011426374c5e6c8197a0b4bac7c3b6b2a79e9fa9a48f7a726a625a514a43362d20150000000000000000000000091d3245566d8297ada5917c66513e2e27374758617685969fb1a39b8d847d79777779849aafa8917c67523b3b50657a90a5a9947f69543f2a1400000006192c3c4f657a8fa0b2c6b8a697816c5e4d3d2c1e100000000000000000000000000001131e25282f28251e1305000000000000000000000000000f253a4f647a8fa7b8a9937e69543828252422201c130c0a04000000000000000000000000000000000002172c41576c8196acc1c5a38e78634e39230e00000f1f2d3b484d545656565656554b453828160300000000000000000406000000000001142230414d62788c9fb4b49f8b76614c37210c00000000000e23384e63788dabbccdb9a88c76614c37210c00000000000000000000000010253b50657a90a5c9c9b49f8a75604b35200b0000000000000000000000000000000013293e53687e93a8bdc5b09b86705b3928160300000000000000000000000000000000000000000e24394e63798ea3c5cab49f8a75604b35200b0000000000172c41576c8196acc1c0ab96816b56412c1600071a2d3d4a4e5656565656524a4336251300000000000b1b2d3d4a4e57595958544f4232211100000000000f1f2d3e4a4f5656565656504c3f2f1c080000000000000000000000000000000000081d314455667c909fb1bec8bbb4a59c93898b9fa38e7963554d493c3530251810020000000000000000000000021528384e63798ea1af9a846f5c4b3625293a4758617481909ca4ab9f99938e8c8c8e9aa2b4ae99846f59473c51677c91a6a8937d68533e2813000000000e23374b5d6e8398a8b9c5b19f917c665b493c2d1c13080000000000000000000009151d30393d443d3a312314060000000000000000000000000b20354b6074889eb3af99846f5645321e0f0d0b070000000000000000000000000000000000000000000014293f54697e94a9bebba6907b66513b26110000010f1d2b34373f4141414141403632281a0a00000000000001080b191b100e080000000313203448596f8499afbcab917c67513c271200000000000b20364b60758a9fb5cac6a48e79644f39240f0000000000000000000000000e23384d63788dabbccebbaa8c77624d37220d0000000000000000060606060606060611263b51667b90a6bbc8b39e88735745321e0906060606060606060600000000000000000000000c21364c61768ba7b9ccbbaa8d78624d38230d000000020a1a2e3f586e8398adc3c1ac96816c57412c1700000f1f2d363941414141413d35302518080000000000000f1f2d3639424343433e3b3224140300000000000110202d363940414141413b382f21110000000000000000000000000000000000000b20354b6073879db2bdc8bbaa9f94877e75849aa7927d68523d352b201c130800000000000000000000000000000a21364a5b6f8499afa28f7a645443301c293a4656606c7c86929ba3a9a8a3a1a1a3afb4b3af9f8b77624c3f54697e94a9a5907b66503b261100000000081c2e3f4d62788a9eb4bfbdb39e8979635a4a3e302518110b050000000000080f192731414d5259524e41312414030000000000000000000000081c3043546e8398adb49f8a75604b36210b0808080808080808080706000000000000000000000000000012273c51677c91a6bcbda8937e68533e2913000000000d1820222a2c2c2c2c2c2b211e160a00000000000009151d202e3025231c1104000005192b3b566b8095abc9ab96806b56412b160000000000091d32455673889db3c8bba6917c66513c27110000000000000000000000000b20364b60758a9fb4cac8a48f7a654f3a25100000000000050b0d1b1b1b1b1b1b1b1b1b24394e63798ea3c5cbb8a68b76604b36211b1b1b1b1b1b1b1b1b1b0e0c0600000000000000000a1f33465874899eb3c9c8a5907a65503b2513131314151d28384b5d72889db2c7bfaa947f6a553f2a150000010f1a21242c2c2c2c2c28201c130800000000000000010f1a21242d2e2e2e29261f14060000000000000002101b22242b2c2c2c2c26231c110300000000000000000000000000000000000011263b51667b90a5b7cabbaa9f8c7f74696c8196ab96816c573626190e0700000000000000000000000000000000071a2d3d50657b90a1b09b8572604a3c2b1c2938454b5e66737d858e94999d9faba2a1a79e9a958e7d67523c586d8297ada78d78634d38230e0000000000112034485a697f94a1b3c3b9a79d8878645c4a43362e221f1816141314161b222d37444b5f676e68604e4231211100000000000000000000000114263652687d92abbaa9907b65503b261d1d1d1d1d1d1d1d1d1d1d1b150c0a03000000000000000000000f24394f64798ea4c6c0ab96806b56412b160100000000050b0d141717171717160b0903000000000000091927313543463a372e1f170c060014293e53697e93a8bead97826d58422d180000000000021528385b70859bb0c5bea9947e69543f2914000000000000000000000000091d31455673889db2c8bca7927c67523d2712000000000d19202230303030303030303030364b61768ba7b8ccc5a38e78634e3930303030303030303030302321190e000000000000000417293a5c71869cb1c6bda7927d68523d28282828292832394556657a8fa5b7cbc3a8927d68533d281300000000070d0f1717171716130b070000000000000000000000070d0f1819191914120c0200000000000000000000070d0f1617171717100e080000000000000000000000000000000000000001172c41566c8196abc3c4b49f8c7c6a6055687d92a79a85705443301c080000000000000000000000000000000000000f23374b5d6f8499a9a3927d685a4837271a2731404c55606870797f83888a8c8d8c8b88857f79675f4d495b72879cb19e8974604a35200b000000000005192b3c4b60728399a5b6c5b7a69d887a6960544b3f37342a2b2a29292b2e373e4a55606c7d847d68604e3f2f1e0e00000000000000000000000d22374c62778b9fb5ab96816b563c2b3232323232323232323232302a211e160b0000000000000000000c22374c61778ca8bac3ad98836e58432e19000000000000000000010101010100000000000000000001152737444b595b504b3f3329211919182a3a54697f94a9beae99846e59442f19000000000000192e43586e8398adc3c1ab96816c56412c17010000000000000000000000021527385b70859bb0c5bfaa947f6a553f2a150000000d1d2b34374545454545454545454545465773899eb3c8bba5907b665045454545454545454545454538352c1e0e00000000000000192f44596e8499aec3bfaa95806a55403d3d3d3d3f38454b576074859bb0c3cab6a48d78634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051a2f455a6f849aafc4b7a6947e695e4b4e63798ea99e8974604b35200b000000000000000000000000000000000000081c2e3f4d62788b9fb39e8978625544311d151d2f37444b535b636a6e73757678777673706a635b4d414d63788da4ae99836e5443301c070000000000000d1c3043546176879da7b8c4b7a69d8b7e72655d534c483b403f3e3f403f4b4f5c6473819299927e685d4b3c2c1906000000000000000000000b1f34475971869bb1b19c86715a4847474747474747474747474745403632291b0b00000000000000000a1f34475974899fb4c5b09b86705b3828160200000000000000000000000000000000000000000000081d314455606e70655d4c463a352c2e2d3647586d8298adc2ae99836e59442e19000000000001162b40566b8095abc0c3ae99846e59442f1900000000000000000000000000182e43586d8398adc2c1ac97826c57422d17000005192b3b484d5b5b5b5b5b5b5b5b5b5b5b5b5c71869bb1c6bda8937e685b5b5b5b5b5b5b5b5b5b5b5b5b4d493c2c1906000000000002172c41576c8196acc1c2ad97826d5852525252535456566067758299a3b5c9c3b29c87725b4935210c00000000000000000000000000070b0e121517181919181614100b09030000000000000000000000000000000000000000000000000001080b12100a0100000000000000000000000000000000061c31465b71869bb0c6b39d8874604b404b60758a9fa88d78634e38230e00000000000000000000000000000000000000112035495a6a7f95a3a79b8574604b44331e16192631353d4a4e5459546061626261575a554e493d47586b8095aba9927d6852362513000000000000000114263647586379899ea7b7c4b8a99f94857b70686259585554535456585d646e7985969fae9f8c7b655a4935200c0000000000000000000005182a3b566b8095abb6a48d77625d5d5d5d5d5d5d5d5d5d5d5d5c5b554b46392919090000000000000004182a3a5c72879cb1c7b39d88735645321e09000000000000000000000000000000000000000000021628384b607383857b6c61584d493c433d4a546176899eb3c9ac97826c57422d1700000000000013293e53687e93a8bdc6b19c86715c3a291704000000000000000000000001162b40566b8095abc0c4af9a846f5a36251300000b203448596270707070707070707070707070708399aec3c0ab95807070707070707070707070707070635b4935210c00000000000014293f54697e94a9bec5af9a8570686868686868696b6f757c8799a1b2c1c7b6a5947e69543d2c1a06000000000000000000000708131c2023272b2c2e2f2e2d2b2925211e160b080200000000000000000000000000000000000000000009151d2028251e1301000000000000000000000000000000071c31465c71869bb1c2ad98826d554431445570869ba7927c67523d27120000000000000000000000000000000000000006192c3c4b6074859ba7a396816c62504432281b141d202d36393f36434b4c4d4c4b46394039353e4c61768a9eb49f8a76614b36210c00000000000000000818293a4a5b647a899da6b4c0bab4a39b8f857d77716e6b6968696b6e727a838c9ba3b0bbaa9e8978634d38230e000000000000000000000010253a50657a8fa7b9a8937e7272727272727272727272727272706a61574637271501000000000000001a2f445a6f8499afc4b59f8a76604b36210b000000000000000000000000000000000000000000091e324556687e939b8c81766b635b5a58595b63728298a8b9bcab937d68533e281300000000000011263b51667b90a6bbc9b39e89745846331f0a00000000000000000000000013283e53687d93a8bdc7b19c87725443301c07000d22374d62788485858585858585858585858585889db3c8c8b39d88858585858585858585858585858479634d38230e00000000000012273c51677c91a6bcc8b39d887d7d7d7d7d7d7d7e808489919ca5b2bfc7baa99d8774604b36200e000000000000000000050f1a21253035383c404243444443413e3a363228201d15090200000000000000000000000000000000000009192731353d39301c14080000000000000000000000000000051b30455a70859aafc0ab96806b56372737576c8297ab96806b56412b1600080e10110f09000000000000000000000000000e1d3145566278899eaa9f95806b624b45392c1f170f1a21232a2630353738373632292a2b3b4b5c6b8095a8a996816c5746331e0a0000000000000000000c1c2d3d4a5c6479889aa2b4bbc1b4b0a39b938b8683807f7e7e8083888f989fabb4c1baaa9f8a7a644f3a250f00000000000000000000000b20354b6075899eb3b39e898787878787878787878787878787857f75615544311d0800000000000002172d42576c8297acc1bcab8d78634e38230e0000000000000000000000000000000000000000000b21364b6075889dab9f96898078726f6e6f72798498a0b2c6b59f8c77624d37220d0000000000000e23394e63788ea3c5ccb9a88b76614c36210c00000000000000000000000011263b50667b90a5c9c9b49f8a75604a35200b000b21364b60768b9a9a9a9a9a9a9a9a9a9a9a9a9a9da6b8cbcbb8a69d9a9a9a9a9a9a9a9a9a9a9a9a9a917b66513c26110000000000000f243a4f64798fa4c6cbb8a69d929292929292929495999ea7b2b6c3c2b6a99f8b7b655645311d0900000000000000000e19202d3636434a4d515557585959585653504b45393631271d150a0000000000000000000000000000000008182737444b524d41302618080000000000000000000000000003182d42586d8297adc1ac97826c573a2a3e53687d93a89a846f5a3c2b19111c232526231c1103000000000000000000000002152738485a657b8c9fb49e95806d6057493d332920190f0e15141c20212322211e212f3b4859647a8b9fb49f8b78624d39291703000000000000000000000f1f2d3e4a5b637884949faab2bfc1b5b0ab9f9c989594939495989da5adb4bcc2b6a99f8c7d665d4b37220d0000000000000000000000081d3144556e8399aeb9a79e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9a958473604b35200b00000000000000152a3f546a7f94a9bfc9a5907b65503b261000000000000000000000000000000000000000000012283d52677d929fabb4a79e958d88848384878e9aa2b2bfb9a898836e594834200b0000000000000c21364b61768ba7b8ccc6a38e79644e39240f0000000000000000000000000e23384e63788dabbccdbaa98c77624c37220d00091e32455773899eb0b0b0b0b0b0b0b0b0b0b0b0b3b8c4d5d5c4b8b3b0b0b0b0b0b0b0b0b0b0b0b0a9937e69543e29140000000000000c22374c61778ca8bacdc4b8b3a7a7a7a7a7a7a8a9abafb3b8c5c3b6b2a49c8b7c665d4b3827150200000000000003111e2b353d4a4e546063676a6c6d6e6e6d6b69656057524b443731271a10020000000000000000000000000001142636445560675f4b43362614010000000000000000000000000014293e53697e93a8c1af9a85705947343a4f64798faa9e89735a483520212f373b3b382f22170900000000000000000000000a1a2b3c4b5d697e939fab9e958275635b4c463a342b24201c141919131c20232c353f4b596278889da9a495806b5a48351b0b00000000000000000000000110202d3d4a5962727f8c99a1aeb4bbc8bcb5b1adaaa9a8a9abadb2b7c3c6b9b4a49c8a7c665e4d3f2e1b0800000000000000000000000115273753687d93a8c2b9b3b2b2b2b2b2b2b2b2b2b2b2b2b2b1b0a2917c67523c27120000000000000012273d52677c92a7bcbda8937d68533e28130000000000000000000000000000000000000000000b20354b6072808d9da6b4b3aaa59d9a98999ca5afb4c0b7aa9e8a78624d3b2b1805000000000000091e32465773889eb3babaa6917c66513c27110000000000000000000000000b21364b60768a9fb5bac7a48f7a644f3a250f00031628395c71869bb1bababababababababababababababababababababababababababababababaab96816c56412c170000000000000b1f34475974899fb4babababababababababababab9c5b8b3afaaa49c93867a665e4c3f2e1a0a0000000000000211212f3c484d5b636b74787c808183848382807e7a766f6760554b45382e201305000000000000000000000000081c30435460737d6d605443301c14020000000000000000000000000e23384e63788da3b5b49f8b77614c40364b60758a9fa78d78624d382c353f4b50504c403527170600000000000000000000000e1e2f3f4e60697e8d9faba09886796b61584d483b393530262e2e253035383d494e5d6577869ca6a89c8675604b3c2b190000000000000000000000000002101f2d3b4854606a79838f999faab0b4bbc8c1c0bebdbec0c3bfc2b5b1a89e948679665e4d40302010000000000000000000000000000d22374d62778ca4b5babababababababababababababababac0ac97826d57422d180000000000000010253a4f657a8fa4c8c0aa95806b55402b16000000000000000000000000000000000000000000081c304354606b7c88959fa9b2b7b2afadaeb2b6c3b9b3a69d8c7c665a49351d0d00000000000000031628395b71869ba5a5a5a5937e69543e2914000000000000000000000000091e32455673889da5a5a5a5917c67523c27120000192f44596e8499a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a599846e59442f1900000000000004182a3b5c72879ca5a5a5a5a5a5a5a5a5a5a5a5a5a4a3a69e9a958f877e74645c4c402f21110000000000000010212f3f4b5a626d7981878d9195979899999896938f8a847c746a60564b3e3123130600000000000000000000000b20354b607383928172604b423220100000000000000000000000000c2135495b70859bb0bbaa96816b5e4c40455671869ca6917c66513c3d494e5d65665e5245352414020000000000000000000000112131424e60687e8d9ea7a49c8b81766a6259534e4b4336434336434a4e535b636d7b889ca4aa9f8a79635645321e0e0000000000000000000000000000010f1d2b36434b5b636e7a838b939b9faaa9acadafb0b0afadaaa7a49c94897f75635b4c4030221202000000000000000000000000000b2034485971869ca5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59a856f5a45301a000000000000000d22374d62778caaadadad98826d58432d1803000000000000000000000000000000000000000001142636434b5e6675808a959da6a8acaeafafadaba89e95887b665e4c3c2c19000000000000000000192e43596e83909090909090816c56412c17010000000000000000000000021628385b70859090909090907f6a543f2a150002172c41576c81909090909090909090909090909090909090909090909090909090909090909090909086715c47311c000000000000001a2f445a6f84909090909090909090909090908f8f8d8b8885807a726860554a3e2f2211030000000000000b1b2e3f4b5d6578828c969da5a6aaacadaeaeadaba8a99f9a91887f74645c4e4131241302000000000000000000000f24394e64798e9f96816c614f3e2d19090000000000000000000000061a2c3d52677d92a3b5b49f8c7c665e4d48586d8298aa95806b55474c5b63707a7b6d635242312010000000000000000000000003142431424e60687c899ba3aa9f96887f786f686460545a595959546063686f79828d9da6a99f8c7c665b4a38281600000000000000000000000000000000000d1826303d494e5c646e777e858a8f9497989a9b9b9a9895928c867e766a60564a3d2f221204000000000000000000000000000005192b3b566b8090909090909090909090909090909090909090909087725d47321d000000000000000b20354b60748b989898989885705b45301b0600000000000000000000000000000000000000000008182630404c57616b7880888e9397999a9a989590898077655d4c402f1e0e0000000000000000000e23384e63797b7b7b7b7b7b79634e39230e000000000000000000000000000f24394e647a7b7b7b7b7b7b79634d38230e00000d23384d62787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b654f3a2510000000000000000e23394e63797b7b7b7b7b7b7b7b7b7b7b7b7a7a797876736f6a645c534b44372e2011040000000000000417293a4b5d657b89989fabb2b6b1aba6a3a2a2a3a5aaafb4afa69d94867a68604e42312010000000000000000000000b20354b6073849a9f937e695c4a3726140100000000000000000000000e20354b6073859ba9baaa9e8a7c6c625a54697e93a999846f5959616b79849090816d604e3e2d1b07000000000000000000000006142431424e5e667885959fa8a79e958b847e797571706e6e6f7174787e848c989faba69d8b7c665e4c3d2d1a0a00000000000000000000000000000000000008141c2c363e4a4f59616970767a7e81838486858483807c77716961584b45382d1f1204000000000000000000000000000000000d22374c62777b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b65503a251000000000000000081c3043546c818383838383816c56412c17010000000000000000000000000000000000000000000008141c2f39464b5a626b73797e8284858583807b756b61584b3f2f2211000000000000000000000c2135495b63656565656565635b4a36210c000000000000000000000000000d21364a5c64656565656565635b4935210c00000c2035495a626565656565656565656565656565656565656565656565656565656565656565656565655d4b37230e000000000000000c21364a5b636565656565656565656565656565646361585a554f4a3e363127191002000000000000000a1f334658657b8c9ea7b5b9b4a49c95918e8d8c8e90949a9fabb2b3a49c8d7e68604e3e2e1a0a000000000000000000081c3043546176879d9f8b7a645544311d090000000000000000000000081c304354647a8b9fb4b9a89e8d81786f68657a8fab9d8873676e77808b9aa29f937e685c4a36220d00000000000000000000000006142431404c5a62747f8a979fabaa9f99938e89868583838486898d939a9fabafa098887b665e4d402f1f0f0000000000000000000000000000000000000000010f1a212d363a474c53566064696c6e6f70706f6e6a676259544c473a32281a0f0100000000000000000000000000000000000b1f34485962656565656565656565656565656565656565656565655d4b37230e000000000000000114263652636c6e6e6e6e6e6c63513e291500000000000000000000000000000000000000000000000001121b29323c484d546064696c6f706f6e6b6660574c473a2e21110300000000000000000000061a2c3d494e5050505050504e4a3d2d1a0700000000000000000000000000071a2d3d4a4e5050505050504d493c2c1906000006192c3c494d50505050505050505050505050505050505050505050505050505050505050505050504f4b3f2e1c0800000000000000071a2d3d4a4e50505050505050505050505050504f4e4c463a403a362e201d15090000000000000000000c21364c6176889daab8b9a89e9286807c797877797b7f858c98a0b4b6ab9f8d7e685c4b382815020000000000000000011426364758647a8b9f9c8673604b3727150100000000000000000000011426364a5c687e939db4b9ab9f978b847d79778c9fa68e7a7c838a969fa9b4b49f8a7a644f39240f000000000000000000000000000613222f3c4855606a77828c969ea7aea8a89e9c9a9898999b9ea7a8afaba29a8f8276655d4d40302212010000000000000000000000000000000000000000000006101b222a343738454b4f5457585a5b5b5a5855524d483b37332a1e160a0000000000000000000000000000000000000005182a3b484c505050505050505050505050505050505050505050504b3f2e1c080000000000000000081834455257585858585856514434220e00000000000000000000000000000000000000000000000000000b161e2b3436434a4e5357595a5a5856504b4539332a1c11030000000000000000000000000f1f2c35383b3b3b3b3b3b39362d1f0f0000000000000000000000000000000f1f2d36393b3b3b3b3b3b38352c1e0e000000000e1e2c35383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a372e21110000000000000000000f1f2d36393b3b3b3b3b3b3b3b3b3b3b3b3b3a3a383633292b24221b1008020000000000000000000014293f54697e94a6b7bcab9e8a7d736b6663626263656a707882909fa8baab9f8c7a645645321d0900000000000000000008182a3a4a5c6a7f95a4937e695544311d08000000000000000000000008182d3e4e606a7f929fa8b6b5a99f99928e8b9faba9988e91989fa9b4bab5a99f8b7c66513c2611000000000000000000000000000004121e2b37444b59626d79818992999ea8a7aaacaeaeadacaaa6a59c968e847a6e61584b3f3022120400000000000000000000000000000000000000000000000000070c181f222832363a3f42434546464543403d37342b211f170c030000000000000000000000000000000000000000000d1d2a34373b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a372e2111000000000000000000001727343e414343434343413e34261605000000000000000000000000000000000000000000000000000000030d1920253035393e4244454543403b3632281f180c0000000000000000000000000000010f1a212326262626262623211a0f01000000000000000000000000000000010f1a21242626262626262321190e0000000000000e192023262626262626262626262626262626262626262626262626262626262626262626262625231c1103000000000000000000010f1a212326262626262626262626262625252423211f17150f0d07000000000000000000000000011426365b71869bb0c4b59f8d7b676054514e4d4d4e50555a636d7c8a9fabbbaa9c8674604b36200e000000000000000000000c1c2d3e4b6074869c9d8774604b35200b0000000000000000000000001020314250616a7d8a9ca4b2b7b4aea8aa9faabbb6a9a4a6adb4babab4a49c8b7c665e4c38240f000000000000000000000000000000000e1927313b484d5b636c757d84898e9295979899989794918c8780796f655d4c473a2e21120400000000000000000000000000000000000000000000000000000000040a0c161e2125292c2e2f31302f2e2b272220180d0a040000000000000000000000000000000000000000000000000d181f2226262626262626262626262626262626262626262625231c1103000000000000000000000917222a2c2e2e2e2e2e2c292216080000000000000000000000000000000000000000000000000000000000000508131c2024292d2f30302e2b26211e160a040000000000000000000000000000000000060c0e1010101010100e0c0700000000000000000000000000000000000000070d0f1010101010100e0c060000000000000000060c0d1010101010101010101010101010101010101010101010101010101010101010101010100e0800000000000000000000000000070c0e10101010101010101010101010100f0e0c0a0400000000000000000000000000000000081c30435474899eb3c5af9a85705e4a4336393837393b3c494d5e667b8d9fb5b6a4937e69533c2b1905000000000000000001152533404d55687d92a5917c67513625130000000000000000000000000214243343505f677a86929da5afb4bbbbb4bbc8ccbdb9bcc2b5b1a89f95867a665e4c40301d09000000000000000000000000000000000009151d2b343d4a4e5660676e75797d8082838483827f7c77726b635b4f4b3f332a1c1002000000000000000000000000000000000000000000000000000000000000000003090b0f1417191a1b1b1a1915120d0b0500000000000000000000000000000000000000000000000000000000050b0d101010101010101010101010101010101010101010100e0800000000000000000000000000050f1517191919191917150e0500000000000000000000000000000000000000000000000000000000000000000000070b0f14171a1b1a1916110b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c0ab96806b5640302524232224262c35404c5d6c8197acc2b19c86715a4835200b00000000000000000f1f3343505e6671778c9f98836e5443301c0700000000000000000000000006152533414d5c64737d87929a9faaa9acaeb3b9beb2ada6a49c948a8074645c4c4030221200000000000000000000000000000000000000020d18202d3638454b52556064686a6d6e6e6e6c6a676259564e4a3d372e1f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000812181a20201f190d0b050000000001080b181f202017150f0500000000000000000000000000000000000000000000000711171920202020202016140e040000000000000000000000000000000000000000000000000000000000000000000000081c30435473889db2c1ab96816c564130201d1513111019202f3f4e63788da7b8b5a48d78624d38220d00000000000000061a2c3d50626a7c868b9fab9e8974604a35200b00000000000000000000000000071523303d4a556068757d848a909497989ea7b2a098918c867f776b60564a3d2f221204000000000000000000000000000000000000000000050f1a2128323637444b4e5255575959585755514d483b39362d221b100400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e1215161513100c0a0400000000000000000000000000000000000000000000000000000000000000000000050b0d111315161615130f0b0903000000000000000000000000000000000000000000000001080b0f121315161614120e0c0600000000000000000000000000000000000000000000000711171920202020202020202020202020202020201f1e1d1a17130e0c060000000000000000000000000000000000000000000000000000000b19252d2f3535342e2220190d000009141d202e3535352d2a2217090000000000000000000000000000000000000000000a19242c2f3535353535352b2821160800000000000000000000000000000000000000000000000000000000000000000000011426365a6f8499afc2b19b86715f4d4135312728262525262735495b73889eb3c2a6917b66513c2611000000000000000c2135495b6a80919c9faab9a78d78634d38230e000000000000000000000000000005131f2d37444b5660686f767b7e8183899ead98827c77716a61594b45382d1f1204000000000000000000000000000000000000000000000000070a161e21273135393d4042434443423f3c37342b24211a0f080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000508131c2024282a2b2a2925211f170c0a0400000000000000000000000000000000000000000000000000000000060b0d181f2227292a2c2b2a2825211e160c0a040000000000000000000000000000000000000609141d202427292a2c2b2a2723211a0e0c07000000000000000000000000000000000000000a19242c2f35353535353535353535353535353535353433322f2c2823211a0f0d0700000000000000000000000000000000000000000000000819293741454a4a494337342b1d0d0919263135434a4a4a423e35271700000000000000000000000000000000000000000719293640444a4a4a4a4a4a403d332616040000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a4b6b5a3927d675f504b44373d3c3b3a3b3c3e3d5c71879cb1bda8927d68533d2813000000000000000e23384e63798c9fb1b4bbc5a5907a65503b2510000000000000000000000000000000010f19263138454b52576165696c6e8398a9947f6a6259544c473b31271a0f0100000000000000000000000000000000000000000000000000000002090b151d2024282b2d2e2f2e2d2a272220190e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1820253035393d3f403f3e3b373329211f170c04000000000000000000000000000000000000000000000000050e1920232a34373c3e3f41403f3d3a363228221f180c060000000000000000000000000000000e1920263135393c3e4041403f3c38352c23211a0f05000000000000000000000000000000000719293640444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494745413e38352c24221b100700000000000000000000000000000000000000000012253747545a60605e594d483b2b1a142637444b585f60605752453518080000000000000000000000000000000000000011243647545960606060606056514433210e000000000000000000000000000000000000000000000000000000000000000000000b20364b6074869ca9b9b49f8b7d6f6660555553515050505154565973889eb3c6a7927d67523d281200000000000000152a3f546a7f94abbcc9cec7a6917c66513c2611000000000000000000000000000000000009141d28323639464b5054576a7f94a998836e58483b37342a1d150a000000000000000000000000000000000000000000000000000000000000000001080b0f1315181919191715120d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2b3436434a4e5255555553504c473a37332a1f170c000000000000000000000000000000000000000000000d181f2b35383b474c515355565655524f4b453937342a21190e010000000000000000000000000e1e2c3537444b4e525355565654514e493d39362d20190e00000000000000000000000000000011243647545960606060606060606060606060606060605f5e5d5a57534e493d39362d201c130800000000000000000000000000000000000003182d4154666f7575746e62594838271d314455606d7475756c635236261401000000000000000000000000000000000000172c4054656e7575757575756b62513d281400000000000000000000000000000000000000000000000000000000000000000000091d324556647a8b9ea8b5a99f91847b756f6b686665656667696b6e778ca6b8baa8907b65503b251000000000000000172c41576c8196acc7d6cebaa98f7a65503a2510000000000000000000000000000000000000010a151d202932363b3f50667b90a59c8772574633221f180c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1825303b484d546063676a6b6a68656158544c473a33291c120100000000000000000000000000000000000004121d2a343c484d56596266686a6b6b6a68646057544c473a352c1c14080000000000000000000006192c3c494d55606467686a6b6b6967635b574e4a3d352b1e120500000000000000000000000000172c4054656e75757575757575757575757575757575757473726f6c68635b564f4a3e35302518100300000000000000000000000000000000051a2f455a6f848a8a8983786256453120354b6073828a8a8a816c5443301c08000000000000000000000000000000000000192f44596e838a8a8a8a8a8a806b56402b1601000000000000000000000000000000000000000000000000000000000000000000021528384a5c657b8a9ba3b1b4a199908984807d7b7a7a7b7c7e8083879cb2c4b49f8a76604b36210b00000000000000152a3f546a7f94a9b9c6c1b49f8a76614c36210c000000000000000000000000000000000000000002090b161e2126374c61778ca59f8b76614b36210c0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0f0f0f0b08010000000000000000000000000000000000000000000002090b0f1215161616151412100d0b050000000000000000000000000000000000000000000000000000000a1a2836434a59626b73797d7f807f7e7a76706961584c463a301c1408000000000000000000000000000000000412222f3b474c5a626b72777c7e7f81807f7d7a76706a61594d493c3026180d0000000000000000000c2035495a637075797c7e7f81807f7c78736c635b4d483c30231406000000000000000000000000192f44596e838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888784817d78736c645c514a43362e1e160a0000000000000000000000000000000013293e53687e93a79e988774604b36253a4f647a8f9faa9d8874604b35200b000000000000000000000000000000000000172c41566c81969f9f9f9f98836d58432e1800000000000000000000000000000000000000000000000000000000000000000000000a1a2d3e4b5d657985929ca4abafa79e99959291908f90919395999ca5b6baa997826d5745321e09000000000000000d23384d62788b9ea8aeada397826d5746331e0a0000000000000000000000000000000000000000000000030a0c1f34475972879dab8f7a654f3a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c181f22242525201d1509000000000000000000000000000000000000040a0c151d2024272a2b2c2b2b2a2826222019150f0b070000000000000000000000000000000000000000000009192838455460697780888e9294959493908b857f766c61584d4130261809000000000000000000000000000002122230404c59626e7880878c919394969594928f8a857f776c635b4b43362b1d0e00000000000000000e23384d637884898e919395969594918d8881796e625a4d41322514060000000000000000000000172c41566c81969f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa99f9e9c9a96938d888179716660544b3e32281a0e0000000000000000000000000000000d22374c62778c9fb3a5927d67523928394f64798ea7b8a68f7a654f3a251000000000000000000000000000000000000014293f54697e94a9b5b5b09b85705b38281502000000000000000000000000000000000000000000000000000000000000000000000010202f3f4b5b63737d868f969da5a5a9aaa8a6a5a5a5a6a9abaeb2b6c3b49f8b78624d39281603000000000000000b2035485a677d8a959998928576614c392917030000000000000000000000000000000000000000000000000004182a3b54697f8f93937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2a34373a3a3a3531271909000000000000000000000000000000050c171f212832363a3d3f404141403f3d3b38352b2a25201c13080600000000000000000000000000000000000001142637455660727f8a969da6a7aaaaaaa8ab9f9b948a8176675f4b433626190900000000000000000000000000102030404c5e6677828b969ca4a6a8aaababaaa7aa9f9b948a81786a6054483b2b1e0e000000000000000d23384d62788d9ea8a7a8aaababa9a6a69d968c8378675f4f43322413020000000000000000000014293f54697e94a9b5b5b5b5b5b5b5b5b5b5b5b5b5b5bab4b3b2afaca8a69d968e857c72645c4b45382c1e1002000000000000000000000000000b2034485970859bb0ae99836e574532354b6075889eb3ab96816b563e2d1a07000000000000000000000000000000000011273c51667c91a6bbc8b29d88735645321d0900000000000000000000000000000000000000000000000000000000000000000000000211212f3d4a546068737a81878c9093969899999998979598a0b2c6b7a696806b5a48351b0a000000000000000006192b3c4d5f67788083837d74615846331b0b0000000000000000000000000000000000000000000000000000000c273b4f61697a7d7e7b654f3a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a28323a474c4f4f4f4b4437271501000000000000000000000000010d19202a333738454b4f5254555656555452504d483c403a35302520190e0600000000000000000000000000000000081d314455607483949ea8b3b7c4bbb7b6c9bcb5b0a89f96887c6b60544437261401000000000000000000000008182e3e4c5e667c88989faab2b6bcb5b1afafb0b3b7b4b0a99f978b7f726259483c2b1b0b0000000000000b20354b60758a9fb4c6bdbfbfc0bec4b7b3ab9f988a7d69614f423120100000000000000000000011273c51667c91a6bbcad3c2b6b1b1b1b1b1b1b1b1b1b1b1b2b3b8c5c4b7b2aba39b91857a6c6056493c2e20110300000000000000000000000005182b3b54697f94a9b49f8a76604b363144556d8297adb29d87725c4a36210d00000000000000000000000000000000000f24394f64798ea4c6cab59f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000003111f2d36434b5460656c72777b7e81838484848382808298adc0b39d8876614c3c2b19000000000000000000000e1e30414d5a626b6e6d686055463a2917000000000000000000000000000000000000000000000000000000000c2032434f5d656868655d4b37220e00000000000000000000000000000000000000000000000000000000000000000000000000000002162838454b5961646464605544311d08000000000000000000000009141d2b343a474c53566064676a6b6b6b6a696765625a5a554f4a4336352b211a0f0400000000000000000000000000081b2e3f4b60738399a1b4b9bcb5aea6a2a1a3a7aeb4bab4a69e918072605544311d1402000000000000000000011426364b5c667c8c9ea6b4bbb7b3ab9f9c9a999b9da6aab3b8b4aa9f948477625a48392916030000000000081d31445572889db2b0acaaa9abadb3b8c5bcb5a89e917f69604e3e2d1a0a0000000000000000000f24394f64798ea4c6d6cab6a49c9b9b9b9b9b9b9b9b9b9c9d9ea7a5aab1b5c1b5b0a39b8c8175635a4b3e2e2111010000000000000000000000000d23384d62788da3b5a9917c665137273751667b90a8b6a58e79644e39240f00000000000000000000000000000000000c21374c61778ca8b9cdbcab8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000010f18263036434a5056596166696b6d6e6f6f6e6d6e8398aeb4a2927d675846331e0e00000000000000000000001223303c484d565958534b4437291c0c00000000000000000000000000000000000000000000000000000000031425323f4b5053534f4b3f2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556606d77797a7a73604b35200b000000000000000000000c1926313b484d5861696f75797c7f808180807f7d7b77746f6a6460544d483c352c1f170c0000000000000000000000000e22374b5d6b8096a1b3bfb8ab9f98918d8c8d92999faab3b8b39e968273604b42322010000000000000000000081c304354647a8b9faab8c0b3a69d938b87858486888e959ea7b1bbb4a29a8778625746321e110000000000011527375a6f859a9f9b97959495989ea6b2b6c3b9b49d927e685c4a3827150200000000000000000c21374c61778ca8b9cdc7b19c868686868686868686868687898c90959ca4aeb3bfb5ab9f978578645c4b3f2e1f0f0000000000000000000000000c2035495a71869bb1ad98826d554431364b6075899eb3aa95806a553c2c1906000000000000000000000000000000000a1f33475874899eb4c9c9a5907a65503b251000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2530353a3b474c50545658595a59595c71879cb1b09a85705f4d3a291700000000000000000000000005121d2b34384044433d363127190c0000000000000000000000000000000000000000000000000000000000000714212e373a3e3e3a372e2110000000000000000000000000000000000000000000000000000000000000000000000000000000011426374b6074828b8f8f8974604a35200b0000000000000000000e1d2a37444b59626c767e858a8f9294959696959492908d89857f7a736b625a4e493d33291c1204000000000000000000091c2f404f657a8c9fb4bfb8a69e8d837b7876787d838c99a1afbcb0a097816d604f3e2d190900000000000000000b20354b6073869ba9bac2b3a29a887e77726f6f7173797f8997a0afbcb4a59c8675614b3f2e1c08000000000012283d52677d8b898582807f808388919da5b4c0bbb49f8c7a645645311d0a00000000000000000a1f33475874899eb4c9baa5907b717171717171717171717273777a80868f99a1b2b6bcb4a39b897a655d4b3d2d1c0c000000000000000000000006192c3c556a7f95aab39e8974604b353245566e8398adb19c86715b4935210c0000000000000000000000000000000004172a3a5c71879cb1c6bda8927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000000000108131c20252a34373b4137444b4449475d72879cb2a7917c675241301b0b00000000000000000000000000000d1920222b2e2e28201d1509000000000000000000000000000000000000000000000000000000000000000003111c2325282925221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556c81969fab99846e5443301c0700000000000000000e1e2c3b4755606978818a939a9fa9a7a9aaababaaa9a7a5a79e9a958f8780786e635b4c463a2f22120000000000000000000f24384c5e70859babbcbaa99e887b6e66626163676e7884959eafbcb19f937e695c4a3727150100000000000004182a3a52687d92a3b5c7b5a49a84766961595a5a5b5b636a7682959eafbeb5a497826d5d4b37231000000000001025394d5f677575706d6b6a6b6e747c879aa2b4c2bbaa9c8674604b382816020000000000000004172a3a5c71879cb1c6bda7927d685c5c5c5c5c5c5c5c5c5d5861656b717a838f9da5b3bfb5a79e8a7b655b4a3a2a180400000000000000000000000e24394e63798ea4b6a7907b655036283851677c91a9b5a48d78634d38230e00000000000000000000000000000000001a2f44596f8499aec4bfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000101d2b343e4a4f565c5560555e5a5a70859aafa28d78624d38231300000000000000000000000000000000050b0d161918130b08020000000000000000000000000000000000000000000000000000000000000000000000080e101313100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074899eb3a9947e695436251300000000000000000e1e2c3c495961737f8a979fa9afb4bac7bfbdbbbabbbcbcc5b9b3afaaa59d968b83796c61584c402f1c090000000000000004182a3a51667b90a3b5c4b49f8b7a655d514d4c4e525a636f7f959eafbdb49f8c7a645544311d0a0000000000000a1f34475970859bb0c2c1b19c867561584c473a443d4a4e58616d7f95a0b2c2b1a0907b65503e2d1b07000000000a1e30414d556060545755545654606776849aa4b6c8b6a4947e695645321e0900000000000000001a2f44596f8499aec4bfaa95806a5546464646464646473a474c50555c646f7b8799a1b1bdb8a89e8a79635847331f1300000000000000000000000c21364a5b72879cb2ac97816c544330364b61768a9fb4a9947f6a543b2b18111111110d0b0500000000000000000002172c42576c8197acc1c2ad98826d58432d1800000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e3b484d5c646b71747575736f6a6b8095aaa18c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea7b9a88f79644f3a240f000000000000000b1b2b3c495a637784949fa9b4bac7c2b5b1aca8a6a5a6a7a8abafb3b9c3b7b2aa9f988b8176665e4c38240f000000000000000a1f3447596f8499aec1b7a6947f695c4c3f3837383c494d616a8095a1b3bbaa9b8673604b3928160300000000000c22374c61778b9fb4cab5a38f7a6556463a342a2f2d363a474c616d8298a7b8beb09b85705c4a36220d000000000113233037444b4a4336403f36434b586175869cabbcc2b39e8875604b36210b0000000000000002172c42576c8197acc1c2ad97826d5842313131313131312a33373b3e4b4f5d657583979fb1beb9a89d8776614c41311c0c000000000000000008131c202d3d566b8096abb29d8874604a353246576e8399aeb09b857059483426262626262220180d000000000000000000142a3f54697f94a9bec5af9a85705a37271501000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2e3e4a59626f7a8186898a8a88858078798ea4a38e79634e3923120000000000000000000000000000050b0d191b13110b0200000000000000000000000000000000000000060c0e0c0600000000000000000000000000000000000003090b191919170e0c07000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9b49e8975604b35200b00000000000003162939495a6378879aa2b4bac7bcb5ada49c96939190909293969a9ea8acb3b8bbb4aa9f96887c66513b2611000000000000000c22374c61778b9fb4c8b39d8875604b3e2f2321232c35434a60728399a7b8b5a3937e695745321e08000000000011273c51667c91abbcc6b09b86715d4b38291f181a1a212933434c6176889eb3c8b4a38e7a644f39240f00000000000513192731363530252b2a26303a4757647a8c9fb4cab8a6927d68523a29170400000000000000142a3f54697f94a9bec5af9a85705a3726141c1c1c1c1c171f21252e373f4b5761728197a0b2c2b6a599836e5f4e3a29170400000000000008182530353a3b4f647a8fa6b7a68f7a644f3b3b3952677d92aab59f8b77624d3b3b3b3b3b3b37342b1d0d000000000000000012273c52677c91a7bcc7b29d88725544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4a5c6478848f969b9ea79f9e9a958d83869ca8937e6853402f19090000000000000000000000000d1820222e3029261f140600000000000000000000000000000000010f1a2123211a0f060000000000000000000000000000000a161e212f2f2e2c24211a0f010000000000000000000000000000000000000000000000000000000000000000061a2c3d596e8399aeaf9a846f5544311d08000000000000091e3246576278889da5b4c0c1b5ab9f978e86817e7b7a7b7c7e8185898f979ea7b2b7bbb4a69c86715c3a2a170400000000000013283d53687d92aabbc4aa957f6a56453220110c0e19203043546277899eb3c2b39d8875604b362513000000000014293e53697e93a8c9c0aa95806b553f2e1a0c0400070c171f3346576a8095aac3c1ab96816c563928160300000000000009151d20201c131615141c2a394a5c6e8398adc3c4af99846f5846331f0a0000000000000012273c52677c91a7bcc7b29d87725544311d0807070700040a0c101b222e39465460728298a4b5c3b3a1927d685846331f0d000000000000132536434a4f51516073889db2ab95806b565151515161768a9fb4ab937e69535151515151514d483b2b1805000000000000000f243a4f64798fa4c7cab49f8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a647a8899a1abb1b3aba6a4a6aaa0989ca4b19c86715e4c37271501000000000000000000000d1d2b343744453e3b312414040000000000000000000000000000000f1f2c3639362c211a0e000000000000000000000000000a1a2832364444444139362d1f1103000000000000000000000000000000000000000000000000000000000000000c2135495b73889eb3aa947f6a5537271501000000000009192f404b6175869ca6b7c3bfb3a39b8d8279716c6866656667686b70747a8188939da6b7c4b49e89745847331f0a000000000003172939586d8398adc8b7a68e79644e382816020000061325364859697f94a6b8b8a6947f695443301c0700000000162b40556b8095aac0bda7927d68523d28130000000000041729394d62778ca5b6c6b19c86715745321e090000000000000002080b0b07000000010c1b2d3e4e64798ea5b6c9b49f8a76614c36210c000000000000000f243a4f64798fa4c7cab49f8a75604b35200b000000000000000007111b293643546074869ca9babfb39e8976614c3b2a180500000000071c30435460646666666c8196acb29c87726666666666666f8499afaf9a846f6666666666666662594834200b000000000000000d22374c62778ca9bacdbbaa8d77624d38220d0000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4d6278889ea6b3b4a79e95908f91959da6b1b6b5a4907b665544311d0c00000000000000000005182b3b484c595b534e4231221200000000000000000000000000000d1d2c3d494e493d352c1c13080000000000000000000003162838454b595959564e4a3d2e2111000000000000000000000000000000000000000000000000000000000000000e23394e63788ea6b8a98f7a65503a25100000000000011426374c5e6d8298a4b5c4beb2a199857a6d635b57535150515253565460656c757e889db2c8b9a88c76614c37210c00000000000a1e33465772889db2c7b29d88735c4a361a0a0000000008182a3b4b6075889db3c4b29d8773604a35200b00000000162b40566b8095abc0bba6917c66513c27110000000000000b2034485972879cb2c7b59f8b76604b36210b00000000000000000000000000000000000f21364a5c72879cb2c7bbaa927d67523d2812000000000000000d22374c62778ca9bacdbbaa8d78624d38220d000000000000000000000b182636455663798b9fb4c5b8a796806b5948341f0a000000000b20354a60727a7b7b7b7b8095aab6a4927d7b7b7b7b7b7b7c8197acb49f8c7c7b7b7b7b7b7b7b77624d37220d000000000000000b20354a6075899fb4c9c8a58f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d6f8499a6b8b4a29a89807b7a7c8088969fafbbb19c8674604b3a2a180400000000000000000b20344859626e7068604e402f1c0900000000000000000000000005192b3b495b635b4e493d30251808000000000000000000091e324556606e6e6e6c635b4b3f2e1c0800000000000000000000000000000000000000000000000000000000000013283e53687d93a8b49f8a75604b36210b0000000000081d314455667b90a0b2c2c3b2a0988374645c4e493d3e3c3b3b3d3e36434b505760697c91a6bbc6a48e79644f39240f00000000000c21364c61768ba5b7c3ae98836e593e2d1a0000000000000d1e3245566b8095aac1b6a5907b655037271502000000152a3f546a7f94a9bfbda7927d68523d281300000000000005182b3b586d8398adc2bcab8e79634e39240e0000000000000000000000000000000000071a2d3d566b8196abc0c8ac97826c57362614010000000000000b20354a6075899fb4c9c8a58f7a65503a2510000000000000000000000008182838495b6b8096a7b9c5b49f8a77624c38271502000000152b40556a808f90909090959eafc3ad9c9290909090909090979fb1bbaa9f9190909090909090806b5639281603000000000000071c30435472879cb1c7bca7927d67523d2812020202020202020202020202020000000000000000000000000000000000000000000000000010253a4f657a8fa1b3b8a69a84766b6664666b7481949dafb5a4947e695947341f0c00000000000000000d22374c627783857e685e4c3823080000000000000000000000000b2034485963796f635b4a433625130000000000000000000b21364b60758384838179655d4b372310000000000000000000000000000000000000000000000000000000000005192b3c586d8298adb09a85705645321e0900000000000b20354b6073869cb1bec9b6a598827360564a3e352c29262526272926303539454e64798ea3c6bba6917c66513c271100000000000f243a4f64798fa4c3c0aa95806b55402b16000000000000021628384d62788da3b5c3ad98826d5544311d0800000013283e53687d93a8c8bea9947e69543f291400000000000000172c41566c8196abc1c9a5907a65503b251000000000000000000000000000000000000012273c51677c91a6c7c5b09b85705443301c08000000000000071c30435472879cb1c7bca7927d67523d28120000000000000000000000000a1a2c3d4b6176899eb3c9baa995806a5645311d09000000192e43596e8398a6a6a6a6aaafbccbbaada7a6a6a6a6a6a6a6acb1bdc8bbb4a6a6a6a6a6a6a69c87725745321e09000000000000001325365a6f849aafc4bfaa957f6a55402a1818181818181818181818181818110f090000000000000000000000000000000000000000000417293a576d8297acbfb39e88766158514f5156606c7f94a1b3b39e8977614c3b2a180400000000000000172c41576c81969a907c66503625130000000000000000000000031628384d62788b84796b605443301c070000000000000000091e32455674899999968c7b65503e2d1b07000000000000000000000000000000000000000000000000000000000b2035485a72879db2aa95806b553828160200000000071b2d3e52687d92a4b6cabcab9c8775615545382d211a131110111213141c2028374c61768ca8b9bea9947e69543f2914000000000012273c51677c91a6bcbda8927d68533d2813000000000000000a2035485a70869bb0c5b39e8975604b36200b0000000f253a4f647a8faabbc1ac97816c573d2d1a07000000000000152a40556a7f95aabfbba6907b66513b26110000000000000000000000000000000000000e23394e63788ea9bac9b49f8975604b35200b000000000000001325365a6f849aafc4bfaa957f6a55402a15000000000000000000000000000f1e3346576b8095abbcc7b39d8875604b36200b000000152b40556a8095aaabababababb3b8c4c3b6b2ababababababababb4b9c6c1b5b0ababababab9f8a76604b36210b00000000000000172d42576c8297acc1c2ac97826d57422d2d2d2d2d2d2d2d2d2d2d2d2d2d2d26241c1204000000000000000000000000000000000000000a1f33465872889db2bfaa957f6a58473a3a38454b616f8399aab9a797816c5947341f0b000000000000001b30465b70859bae99836e5443301c0700000000000000000000091e3245566b8095998b8072604a35200b0000000000000000031628385c71879caeaa9c86715c4a36220d000000000000000000000000000000000000000000000000000000000d22384d62788da5b7aa907b66503b261100000000000d22364a5c71869bb1c2cab49f8c7b65574637281a100600000000000001080b1f33475874899eb4c1ab96816c56412c17010000000013293e53687e93a8bdbba6917c66513c27110000000000000005192b3c546a7f94a9c6b9a7907b66503b26110000000b21364b60758a9fb4c7b29c87725b4a362111000000000000132536566b8096abc0c7a5907a65503b25100000000000000000000000000000000000000b20354b60758a9fb4c9baa88d78634e38230e00000000000000172d42576c8297acc1c2ad97826d58422d1800000000000000000000000000031729394d62788c9fb5cab8a6917c665137261401000010253a4f657a8f9696969696969da6b8b6a49c96969696969696969ea8b9b5a39b9696969696968b76614b36210c00000000000000152a3f556a7f94aabfc4af9a856f5a364242424242424242424242424242423b382f2212000000000000000000000000000000000000000c21364c61768ba5b7b9a48f7a644f3a2a252832434d62788c9fb4b49f8b77614c37220c000000000000001c31465c71869bb19e8974604a35200b000000000000000000000b21364b6075899eaa9f927d68533d28130000000000000000001a2f445a6f8499afb6a48f79644f3a240f0000000000000000000000000000000000000000000000000000000012283d52677d92a7b49f8b76614b36210c00000000000f24394f64798ea3b5c9c1ad98836e5d4b3928190a000000000000000000000417293a5c71869cb1c3ae99836e59442e190000000000152a3f556a7f94aabfbaa5907a65503b251000000000000000000f243a4f647a8fa8b9c5ab96806b56382816030000091e3245566f849aafc3b6a58e79634e3f2e1e12080200030c1c3043546d8398adc2baa98e79634e39240e000000000000000000000000000000000000081d31445572879cb2c7c6a6907b66513b261100000000000000152a3f556a7f94aabfc4af9a856f5a36261401000000000000000000000000000b2035485a70859aafc5c4ad98826d5544311d0800000b20354b607381818181818181889db3b29c8681818181818181818a9eb4b09b858181818181807b655746321e090000000000000012273d52677c92a7bcc7b29c87725457575757575757575757575757575757514c402f1c090000000000000000000000000000000000000e23384d63788da2c3b6a18c76614c37210f152035495a6f8499aebbaa947e6954392816030000000000001c31465b71869bb0a78e78634e39230e00000000000000000004182a3a52677c91a7b8a9947f69543f2a14000000000000000002172c42576c8197acc2a9947e69543f291400000000000000000000000000000000000000000000000000000004182a3a576c8297acb09b86715746331e0a000000000417293a566b8095abc1c9b5a38f7a654f3f2e1b0b000000000000000002080b0d1a2f44596f8499aec4b19b86715c3929170300000000152b40556a8095aabfbaa48f7a654f3a251000000000000000000b20354b6075899eb3c5b09b85705645321e0900000216283852677c91a5b6c3ad98836e5d4b3c2f201d1517161e29394a6073889db3c8b49f8a75604b36200b000000000000000000000000000000000000011426375a6f859aafc4bda8937e68533e29130000000000000012273d52677c92a7bcc7b29d87725443301c080000000000000000000000000005192b3c54697e93a9c5c8b39e8974604b35200b0000081d314455606b6c6c6c6c6c6c8196abb29d88736c6c6c6c6c6c6e8398aeaf9a85706c6c6c6c6b655d4b392816030000000000000010253a4f657a8fa4c8c9b49f8a736d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d665e4c38240f0000000000000000000000000000000000000f24394f64798ea4b9b5a08b76604b36210b06192c3c53687d92a8c8b09b86715746321e090000000000001b31465b70869bb0a8927d68533d28130000000000000000000a1f3347586f8499aeb5a48e79634e39240e000000000000000000152a3f546a7f94a9bfae99836e593c2c190600000000000000000000000000000000000000000000000000000a1f34475972879cb1ab96816b5639291703000000000a1f33465871869cb1c6c6b19b86715d4b372110000000000000000009151d2023232c41576c8196acc1b39e89735746331e0a00000000162b40566b8095abc0b9a48f7a644f3a250f0000000000000000081d31445570859aafc5b49f8a76604b36210b0000000b20364b6074879db2bdb59f8d7b655a4c403631272d28323a4657667b90a6b7c2af9a856f5544311d0800000000000000000000000000000000000000182d42576d8297acc2c0ab96806b56412b160100000000000010253a4f657a8fa4c8c9b49f8a75604b35200b00000000000000000000000000000e23394e63798ea7b8ccb8a78e79644e39240f000001152737444b565656565656657a8fa6b7a68f7a645656565656677d92aab49f8b776156565656504b3f2f1b0b00000000000000000d22384d62778daabbcebaa9988282828282828282828282828282828282827c66513b26110000000000000000000000000000000000000d23384d62788da2c2b7a18c77624c37220d000e23394e63788ea3c8b49f8a76614b36210c0000000000001b31465b70869bb0ac97826d573827150200000000000000000c22374c61778b9fb4b19c86715b4a36210c00000000000000000012273d52677c92a7bcb39e88735b4935210c00000000000000000000000000000000000000000000000000000c22374c61778ca4b6ab917c66513c271100000000000c21364c61768b9fb5cac9aa95806a553f2e1b030000000000000009192731363838383f54697f94a9beb8a78b76614c36210c00000000152b40556a8095aabfbaa48f7a654f3a2510000000000000000001142637566c8196abc1bbaa8e79644f39240f000000091d324556667c909fb1bcab9e8978665e504b44374238454b586175869cb1c4b6a4927d67523727150200000000000000000000000000000000000000152a40556a7f95aabfc3ad98836e58432e19000000000000000d22384d62778daabbcebbaa8c77624d37220d00000000000000000000000000000c2136495b73889eb3c8c5a8937e68533e2913000000091927313541414141414b6074889eb3ab96806b563d41414c61768a9fb4aa927d68533941413b382f21110000000000000000000b20354b60758a9fb4c9c7b2a0989797979797979797979797979797979796816c57412c170000000000000000000000000000000000000b21364b60768ba4b6b9a48f7a644f3a2410000c21364b61768baabbbbaa8e79634e39240e0000000000001b30465b70859bb0b19c86715645311d09000000000000000215273752687d92aabba9947f6a543d2d1a070000000000000000000f253a4f647a8fa4c8b8a68d78634d38230e000000000000000000000000000000000000000000000000000012273c51677c91a6b59f8b77614c37220c000000000010253b50657a90abbccfbcab907b65503b26100000000000000002152737444b4d4d4d4d52677c91a7bcc5a38e79634e39240e00000000152a3f556a7f94aabfbaa5907a65503b251000000000000000000013283d52687d92a7bdc8a7927d67523d2812000000021528384c5e6c8197a1b0b8a79e887c6e65605558575856606876849aa4b6baa99c8674604b35200b000000000000000000000000000000000000000012283d52677d92a7bcc5b09b86705b382816020000000000000b20354b60758a9fb4c9c8a48f7a654f3a25100000000000000000000000000000061a2c3d5a6f859aafc4c2ad97826d58422d180000000009151d202c2c2c2c3043546d8297acb29c87725b4a363346586f8499afae99846f5746322b25231c1103000000000000000000081c30435472879db2c7cfbeb2adacacacacacacacacacacacacacacacac99846f5a362513000000000000000000000000000000000000091e32455672879cb1bea9937e69543f2e1a0a0a1e334657758a9fb4c8a58f7a65503a25100c03000000001a2f445a6f8499afb49f8a75604b36200b00000000000000081d3144556e8398aeb7a58e79634e39230f000000000000000000000d22374d62778caabbc4a7927d68523d28130000000000000000000000000000000000000000000000000003172939566c8196abb19c86715847331f0a000000000013293e53687e93a8c9cab49f8b76614c36210c00000000000000081d31445560626363636364798fa4b9bba6917b66513c261100000000142a3f54697f94a9bebba5907b66503b261100000000000000000010253b50657a90a5bac0aa95806b55402b16000000000a1a2f404b607383969eb1b5a69e8d837b75706e6c6d70757d879aa2b4b6a99f8b7a645544311d08000000000000000000000000000000000000000010253a50657a8fa5c8c8b39d88735645321e09000000000000081c30435472879db2c7bca7927d67523d2812000000000000000000000000000000172c41576c8196acc1c5b09a85705b372614010000000001080b16171714263651667b90a8b6a58e79634e39293a53687e93abb49f8a76614b3621100e080000000000000000000000011426365a6f859aafc4dacfc5c2bababababababababababababababab19c87725443301c07000000000000000000000000000000000002162838566c8196abc0b09b85705d4b38281c1421364b61768baabbc4a48e79644f392a27201407000000172c42576c8197acbcab8d78634d38230e000000000000000b20364b6075899eb3b29d87725b4a36210c000000000000000000000b20354b60758a9fb4c2ac97826d57422d18000000000000000000000000000000000000000000000000000a1e33465771869bb1ac97816c573a2a18040000000000162b40566b8095abc0c7b29d87725746331e0a000000000000000b20364b60747878787878787b8fa4b9bea8937e69533e29140000000014293e53697e93a8bebca7917c67523c27120000000000000000000d23384d62788da2c6c3ad98836e58432e190300000000121d314455607380909ca4afab9f99908985838283858a929da5b4b2a59d8b7d675c4b3727150100000000000000000000000000000000000000000d23384d62788daabbcbb8a68b76604b36210b000000000000011426365a6f859aafc4bfaa947f6a553f2a15000000000000000000000000000000152a3f546a7f94a9bfc8b29d88735544311d0800000000000000040a0c1120364b6075899eb4aa95806a553c2c374c62778b9fb4a9917c6752382715110f0b0902000000000000000000182d42586d8297adc2d5c4b7b3a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49f8a75604a35200b00000000000000000000000000000000000010253a50657a8fa2b4b4a38f7a645645383026313e4f657a8fa4c8b8a68d77624d473a3b322514020000142a3f54697f94a9c9a5907b65503b2610000000000000000f253a4f647a8fa8b9ac97826d573d2d1a0700000000000000000000081c30435472879db2c6b19b86715c392917030000000000000000000000000000000000000000000000000c21364c61768a9fb4a7927c67523d2712000000000000182d42586d8297adc2c6b09b86715b39291703000000000000071c31475c71868d8d8d8d8d8d8f99aabdc0ab96806b56412b160100000012273c52677c91a7bcbda8937d68533e28130000000000000000000b20364b60758ba8b9c4af9a856f5a45301a0500000000011426374455606b7b86929a9fabaea89f9a9897989b9fa9b2b7a59d94877b675f4d3e2e19090000000000000000000000000000000000000000000b20354b60758a9fb4cac4a38d78634e38230e00000000000000182d42586d8297adc2c2ac97826d57422d1800000000000000000000000000000012283d52677d92a7bccab49f8a75604b35200b0000000000000c181f2227273245566e8398adb19c86715b493534475970859ab0ad98836e564531272625201d150a0000000000000000152a40556a7f95aabfcbb7a69d8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8c77624d37220d0000000000000000000000000000000000000e23374b5d70859ab0bcb19c867560564b4337444b5c6c8197acc1b39d8873666158544f43322010000012273c51677c91a6bca8927d68533d281300000000000000152a3f546a7f94a9c6a8937d68533e28130000000000000000000000011426365a70859aafc5b39e89745746331e0a00000000000000000000000000000000000000000000000011263b50667b90aab6a58c77624d37220d000000000000192e43596e8398aec3c4af9a846f5a452f1a000000000000000a1f354a5f748a9fa2a2a2a2a2a4aab7c7c3ae98836e59432e190000000010253b50657a90a5babfa9947f6a543f2a15000000000000000000091d31455674899eb4c6b19c87715c47321c07000000000009192637444b5e66737d848d9fb4bab4b0adacadb0b4babaa99d877f74655d4d4130201000000000000000000000000000000000000000000000081d31445572889db2c7baa5907b65503b261000000000000000152a40556a7f95aabfc4af9a846f5a36251300000000000000000000000000000011263c51667b91a6bbcfbcab8b76614c36210c00000000000c1c2a34373c3c3c3852677c91a9b5a48d78634d3c3c3b54697e94a9b39e8975604b3c3c3c3a3631271a0f0100000000000013283d52687d92a7bdc8b39d887b7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a75614b36210c000000000000000000000000000000000000081c2e3f50657b8f9eb0b5a4998375656054585560687a8b9fb4c8b39d887f7b777269614f3e2e1b07000f24394f64798ea4c6aa95806b55402b1600000000000005182b3b596f8499aeb9a88e79634e39240e000000000000000000000000182d42586d8297adc2b9a78b76614c36210c000000000000000000000000000000000000000000000002162838566b8095abb29d8772594834200b000000000000192f44596e8499aec3c3ad98836e58432e1903000000000000081d33485d72889db2b8b8b8b8b9bcbcbcbcb09b86705b392816030000000e24394e63798ea3c4c1ab96816c56412c17000000000000000000021527385d73889db2c8b39e88735e49331e0000000000000009192631404c546067768196abc0c3b7b2b0afb1b4b9b49f8a7f776a6056483b2c1e0e00000000000000000000000000000000000000000000011527375b70859ab0c5bda8937d68533e28130000000000000013283d52687d92a7bdc7b29c87725443301c07000000000000000000000000000010263b50657b90a5bad9b7a18c77624c37220d0000000004182a3a474c515151515161768a9fb4a9947f6a545151515162788da4b5a8907b66515151514f4b45382d1f0f00000000000010253a50657a8fa5c8c9b49f8a746565656565656565656565656565656565615746321e09000000000000000000000000000000000000001123374b5d6b8196a2b2b3a199867b746f6d6f747d8a9eaabbcbb7a69d94908c877f695c4a36220d000c21374c61778ca8b9ad98836d58432e180000000000000b2034485973889eb3b49e8975604b35200b000000000000000000000000152b40556a8095aabfc5a38e79634e39240e0000000000000000000000000000000000000000000000091e32455670859ab0ad97826d583b2b1905000000000000192e43586e8398adc3c3ad98836e58432e1903000000000000061b30455b70859aa6a6a6a6a6a6a6a6a6a6a69e88735745321e090000000c21364b61768ba6b7c3ae99836e59362614010000000000000000001c31475c71869cb1c6b49f89745f4a26140100000000000000091a2c3d4c5e667a87969eb0b5ada59d9a9a9c9ea8afa99f958a7f746259493c2c1b0b00000000000000000000000000000000000000000000182d43586d8298adc2c0aa95806b55402b160000000000000010253a50657a8fa5c8c9b49f8a75604a35200b000000000000000000000000000010253a50657a8fa5bacdb7a28d78624d38230d000000000a1f344759616666666666666f8499aeb09b857066666666666671869cb1ac97826d666666666460564a3d2d1a0700000000000d23384d62788daabbcebaa98c77624f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4b463928160300000000000000000000000000000000000000081c2e3f4b60738499a1b4b3a49c908884828488929ea8b9c8bbc4b7b3aaa5a59d8f7a644f3a240f000a1f33475874899eb4b09a85705b3827150200000000000d22374c62778ca6b8af9a85705544311d0800000000000000000000000013283d53687d92a8bdbba6907b66513b261100000000000000000000000000000000000000000000000b21364b60758a9fb4a8927d68533d281300000000000000172d42576c8297acc1c3ae99846e59442f190400000000000003192e43586e82919191919191919191919191918b76604b36210b0000000a1e33465773889db3c6b19b86715443301c080000000000000000061c31465b71869bb0c6b49f8a755544311d08000000000000000c2135495b667c8b9ca5b0ab9f978d8785858689909aa2b4a99f958578635a4939291603000000000000000000000000000000000000000000162b40556b8095aac0c2ad98836d58432e18000000000000000d23384d62788daabbcdbaa98c77624d37220d000000000000000000000000000011263c51667b91a6bbd8c8a28c77624d37220d000000000c22374c61777c7c7c7c7c7c7c8197acb5a3927d7c7c7c7c7c7c7c8399aeb39e887c7c7c7c7b7a74635b4a36210c00000000000b20354b60758a9fb4cac7a48f7a644f3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3632281b0b000000000000000000000000000000000000000000111d314455607583959fa9b4b1a69d9998999ea7b4b9b4aaa6a6a6a6a6a6a6a6937e69543e29140004172a3a5c71869cb1b29d88735645311d09000000000011263b50667b90a5c5ab96806b563726140100000000000000000000000010263b50657b90a5c9bea8937e69533e2914000000000000000000000000000000000000000000000010253a50657a8fa9b7a68d78634d38230e00000000000000162c41566b8196abc0c4af9a856f5a45301a00000000000000000f24394e647a7c7c7c7c7c7c7c7c7c7c7c7c7c7c75604b36210b000000031729395a6f859aafc4b49f8975604b35200b0000000000000000061b31465b70869bb0c5bbaa8a75604b35200b000000000000081b2e3f4e63798a9ea9b6ab9f8d827972706f71757b84929fa9b4a39b8878635746321e0f00000000000000000000000000000000000000000013283d53687d92a8bdc5b09a85705b372715020000000000000b20354b60758a9fb4cac7a48f7a644f3a250f000000000000000000000000000013283d52687d92a7bdcebbaa8c76614c37210c000000000c22374c61778c919191919191979fb1c1ac9b929191919191919199a1b3b8a69e91919191918f8879634e3a2a170400000000081d31445572889db2c7bca7917c67523c2725252525252525252525252525211e160b0000000000000000000000000000000000000000000001152737455760727f8a989faaaeb2afadaeb3b2aea89e95909090909090909090816c57412c170000192f44596e8499a4a49f8a75604b36200b000000000014293f54697e94a9bda8937d68533e2813000000000000000000000000000e23384d63788dabbcc0ab96806b56412b160100000000000000000000000000000000000000000001152737556a7f95aab39d88735b4935210c00000000000000152a40556a7f95aabfc7b19c87725c3c2b1905000000000000000d21364a5c646767676767676767676767676767605745321e0900000000172c41576c8196acc1baa88d78634e38230e0000000000000000061b30455b70859ab0c5b5a08b76604b36210b0000000000000e22374b5d70849aa8b9b49f8d7d6d635b5b5a5660666f7d8b9faab5a69c8675614b3d2c1a06000000000000000000000000000000000000000010263b50657b90a5c9c8b29d88735544311d08000000000000081d31445572889db2c7bca7927c67523d2712000000000000000000000000000014293e54697e93a9bec9b49f8a75604b35200b000000000a1f34475970859ba6a6a6a6a6acb1bdcdb9aca7a6a6a6a6a6a6a6aeb3bfc5b8b3a6a6a6a6a6a699846f5847331f0a00000000011527375b70859ab0c5bfa9947f6a543f2a151010101010101010101010100c0903000000000000000000000000000000000000000000000000091928394554606a78828b93999d9faaab9f9d99938a807b7b7b7b7b7b7b7b7b7a644f39240f0001172c41566c818f8f8f8f8d78634d38230e0000000002172c42576c8197acc9a5907b66503b2611000000000000000000000000000b20364b60758a9fb5c3ad98836e58432e1900000000000000000000000000000000000000000000081d3144556f849aafad98836e583c2c19060000000000000012273d52677c92a7c8c9b49e89745a4835200b00000000000000071a2d3e4a4e51515151515151515151515151514b45392816030000000012273c52677c91a7c3c6a7927c67523d27120000000000000000061b30455b70859ab0c5bcab8b75604b36200b00000000000010253a4f657a8fa2b4baa996806b5f4e493d38454b515f677c8c9fb4b5a496816c5b4935210900000000000000000000000000000000000000000e23384e63788dabbccab49f8a75604b36200b000000000000011527375b70859ab0c5bfa9947f6a543f2a150000000000000000000000000003172939576c8297acc1c7b29d87725443301c080000000004182a3a54697f94a5aaabababababb4bac7c0b4b0abababababababacb0bdcbbfb3afabababab9f8b77614c37210c0000000000182d43586d8298adc2c1ac97816c57422c17020000000000000000000000000000000000000000000000000000000000000000000000000000000a1b2836434a5a626d777e83878a8b8b8a88847d776b666666666666666666645c4a36220d00000d22374d62777a7a7a7a7a75614b36210c00000000051a2f445a6f8499afbcab8d78634e38230e00000000000000000000000000091d32455673889db3c5b09b86705b382816020000000000000000000000000000000000000000000b20354b6075899eb4a8937e69533e291400000000000000000f24394e64798eaabbcdb9a88d77624d38220d00000000000000000f202d36393c3c3c3c3c3c3c3c3c3c3c3c3c3c3632281b0a00000000000d22374d62778ca5b6c1ac97826c573d2c1a0600000000000000061b31465b70869bb0c5b59f8a755544311d08000000000002172c41576c8196acc0b49f8a76614c41352c273136414d5e6b8096a7b8b49f8b79634e37261401000000000000000000000000000000000000000b21364b60768a9fb5cabcab8d78624d38230d00000000000000182d43586d8298adc2c1ac97826c57422d17020000000000000000000000000a1e33465771869cb1c6c4af99846f5a3626140100000000000c21364c617687929595959595959fa9bab4a29a95959595959595969fb0c3b3a1999595959595927d68523d28130000000000162b40556b8095aac0c4af99846f5a442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000a1825303c484d5962696e7275767675726e6861585151515151515151514f4a3e2d1b0700000b20344859626464646464615746321e0a00000000011426365c71879cb1b59f8a75604b36200b00000000000000000000000000021528385b70869bb0c5b39d88735645321e090000000000000000000000000000000000000000000f243a4f64798fa8b8a78e79634e39240e00000000000000000b20364b60758a9fb4cac6a6917c66513c26110000000000000000010f1a21242727272727272727272727272727211e160a0000000000000b2034485972879cb2c7b29c87725b4935210800000000000000021528385c71879cb1c6b39e89745e492715020000000000031628385c71869cb1c3ae99846e584633211a151d2030404b6075899eb3bbaa96816c5544311d0800000000000000000000000000000000000000091e32455673889db3c8c9a5907a65503b251000000000000000162b40556b8095aac0c4af99846f5a442f1a000000000000000000000000000c21364b61768b9fb4cac6aa95806b55402b160000000000000a1f33465861757d8080808080808b9fb4b09a84808080808080808196a5b6af99838080808080807d67513c2712000000000013283d53687d92a8bdc6b19c87715c3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2b343b484c545954606161605459534c473a3b3b3b3b3b3b3b3b39362d201000000005182b3b484d4f4f4f4f4f4b463929160300000000081c30435473899eb3b39d88735645321d090000000000000000000000000000192e43586e8398adc3b8a68b76604b36210b00000000000000000000000000000000000000000013253654697e94a9b39e8974604a35200b0000000000000000091d31455671879cb1c6c0ab96806b563c2b1906000000000000000000070d0f12121212121212121212121212120b09030000000000000005192b3b566b8196abc3b6a58e79634e36251300000000000000091d32455673889db3c7b29c87725d47321d000000000000091e324556748a9fb4bfaa95806a553a2917060209131e3245566b8196abc8b39e8874604b35200b00000000000000000000000000000000000000021628385b70869bb0c5bda7927d68523d28130000000000000013283d53687d92a8bdc7b19c87725c3b2a1805000000000000000000000008182c3d52677c91abbccdb9a8907b66503b26110000000000000417293a465761686a6b6b6b6b6e8399aeaf9a846f6b6b6b6b6b6b72879cb2ad97826d6b6b6b6b6b675f4d392410000000000010263b50657b90a5c9c9b49e89745847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d19202b34373e36434a4b4c4a43363e37332a262626262626262624221b1002000000000d1d2b34373a3a3a3a3a3632291b0b00000000000b20354b60758a9fb4b09b86715b382815020000000000000000000000000001162b41566b8096abc0c4a38d78634e38230e0000000000000000000000000000000000000000071c3043546e8499aeae99846e5443301c07000000000000000002152738576c8196acc6c6b19b86715a483520090000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa5b7c3aa947f6a5443301c070000000000000b20364b60758a9fb5c5af9a85705a45301b0500000000000b21364b60768ba9babda8937e68533e29130000000316283850657b90abbcb8a68e79634e39240e0000000000000000000000000000000000000000192e43586e8398adc3bfaa95806a55402b150000000000000010263b50657b90a5c9c9b49f89745947341f0b0000000000000000000000132536495b70859aafc9c9b49e8975604b36200b000000000000000c1c2939464b525556565656687d92aab49f8b766156565656566b8096abb39e89746056565656514d40301d0a00000000000e23384e63788dabbccdb9a88c76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d18202229253035363635302528211f1711111111111111110f0d07000000000000000d1820222525252525211e160b0000000000000c21374c61768cabbcaf9a856f5a45301a00000000000000000000000000000014293e53697e93a8bebaa5907b65503b261000000000000000000000000000000000000000000b20354a6074899eb3a9947f69543625130000000000000000000010263b50657b90a8b9c9b5a38d78624d372715020000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074879db2c8b29c8773604a3520120000000000000e24394e63798eabbcc1ac97826c57422d170200000000000b21364b60768ba9babea9937e69543e2914000000000c21364b61768b9fb5c5a7927d68523d28130000000000000000000000000000000000000001162b41566b8096abc0c2ad97826d58422d18000000000000000e23384e63788dabbccdbaa98c77624c37220d00000000000000000005121c30435463798ea2b4c8c2ad98836e5645321d0900000000000000000c1b2932363d404040404c61768b9fb4aa927d68523940404f647a8fa6b7a7907b65503640403c393022120000000000000b20364b60758a9fb5cac6a48e79644f39240f02020202020202020202020202020202000000000000000000000000000000000000000000000000000000000000050b0d14131c202121201c13130c0a0400000000000000000000000000000000000000050b0d0f0f0f0f0f0c0a03000000000000000d22384d62778da2b7ae99836e59442e1904000000000000000000000000000011263c51667b91a6bbbda8927d68533d281300000000000000000000000000000000000000000e24394e63798ea7b8a88f7a644f3a240f000000000000000000000b20364b6075899eb4c9c2aa957f6a5544311d0a000000000000000000000000000000000000000000000000000000000000000000000000081c3043546a7f95aabbb6a5907b6550402f1c0c000000000115273752677d92a7c9c6a9937e69543e2914000000000000091e324556748a9fb4bfaa95806a55362513000000000a1e32465774899eb3bfaa947f6a553f2a15000000000000000000000000000000000000000014293e53697e93a8bec4af9a856f5a362614010000000000000b20364b60758a9fb5cac7a48f79644f3a240f01010101010100070d181f303f4a6072849aafc0c9b5a4907b6550382815020000000000000000000b161e21282b2b2b3347586f849aafae99846f574633354a6073889db2ac97816c5443302b27241d1204000000000000091d32455673889db3c8bba6917c66513c271717171717171717171717171717171717110f090000000000000000000000000000000000000000000000000000000000000000070b0c0c0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788da2b8ad98836d58432e180300000000000000000000000000000e24394e63798ea3c5c0aa95806b55402b16000000000000000000000000000000000000000013293e53687e93a8b49e8975604b35200b00000000000000000000091d3145566d8298adc1c7b29d8774604b392816030000000000000000000000000000000000000000000000000000000000000000000000011426364d62778b9fb4c3b09a85705e4c3a291909000000081d3144556d8297adc2b9a88f79644f3a240f000000000000031628385c71879cb1c3ae98836e5443301c0800000004182a3a5d72889db2c0ab96806b56412b16000000000000000000000000000000000000000011263b51667b90a6bbc7b29d87725443301c08000000000000091d32455673889db3c8bca7917c67523c2716161616161617181a212a34404d5d687e93a2b4c7c0b19c8673604a35200b0000000000000000000000030a0c13151617293a53687e93abb49f8a76614b363043546c8196acb39d8874604b352012100a0000000000000000021528385b70859bb0c5bea9947e69543f2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c26241d12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea3b8ad97826d58422d180300000000000000000000000000000c21364c61768ba7b9c2ad98826d58432d180000000000000000000000000000000000000006192c3c586e8398adaf9a846f5544311d0800000000000000000000021527384f647a8fa3b4c8b7a5927d685745321e1100000000000000000000000000000000000000000004050000000000000000000000000008203448596c8297a9bab4a2917c6658463727190e08081426374b6074889eb3c8b49e8975604b35200b00000000000000182d42586d8297adc5b39d8874604a3625130400000a1f33475873899eb3c0ab95806b56402b1600000000000000000000000000000000000000000e24394e63798ea3c5c9b49f8a75604b35200b000000000000021528385b70859bb0c5bea9947f69543f2c2c2c2c2c2c2c2c2d2d363b474c5e667c8a9fb4c0c6b3a2917c665443301c0700000000000000000000000000000000000d22374c62778b9fb4a9917c675238283650657a90a7b8a68f7a654f3a25100000000000000000000000192e43586e8398adc3c1ab96816c56414141414141414141414141414141414141413b382f22120000000000000000000000000000000000000000000000040a0c1e20202020201a0c0a030000000000000000000000020b11131f20202020201917110700000000000000000000000000000000000e23384e63788da3b8ac97826d57422d180200000000000000000000000000000a1f33465874899eb3c5af9a85705a372715010000000000000000000000000000000000000c2035495a73889db2aa957f6a553727150100000000000000000000000a22374b5c70859bb0c1c3b29d8775604b3f2e1e0e0000000000000000000000000000000000070d0f191a0f0d070000000000000000000005182b3b4d62788b9fb4c0b29d8876615544372c201d1c23314455677c91a7b8c4ad98836e5544311d080000000000000012273c52677c91a7b9b7a6907b665443301f1813121726364c61778b9fb5c8a9947e69543f291400000000000000000000000000000000000000000c21364b61768ba7b8ccbbaa8d77624d38220d00000000000000192e43586e8398adc3c1ac97816c57424141414141414141423d4a4e59626d7c8b9fa8bac9b9a89a846f5e4c3625130000000000000000000000000000000000000b1f34485970859bb0ae98836e564532354b6074889eb3ab96816c563e2d1b0700000000000000000001162b40566b8095abc0c3ae99836e5957575757575757575757575757575757575757514c402f1d090000000000000000000000000000000000000000000c181f223335353535352f211e170b00000000000000000006141f26283435353535352e2c24180a000000000000000000000000000000000d22384d62778da2b7ad98836d58432e180300000000000000000000000000000417293a5c71869cb1c6b29d88725544311d080000000000000000000000000000000000000d23384d62788da6b7a98f7a65503a2510000000000000000000000000081b2e3e52677c91a3b4c8b7a595806b5d4b3c2b1d0f010000000000000000000000000001101b22242e2f24221b10020000000000000000000d2035485a6b8095a4b6b7a69983736055493c35312e37424b6073869cb1c5b7a6917c665137271501000000000000000b21364b6075899eb3c3af9a8472604a41332a282729334354677d92abbcbbaa917c66513c261100000000000000000000000000000000000000000a1e33465773899eb3c8c8a48f7a654f3a251000000000000001162b40566b8095abc0c4ae99846f59565656565656565656575a5b636b77828d9fa9bac6bcab9e8978624d4030180800000000000000000000000000000000000005182a3b54697e94a9b49e8975604b363144556d8297acb29d87725c4a36220d0000000000000000000013293e53687e93a8bdc6b19b86716c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c665e4c38240f00000000000000000000000000000000000000000c1c2a3337484a4a4a4a4a453633291b0b00000000000000001424313a3e494a4a4a4a4a4440362818070000000000000000000000000000000d22374c62778ca1b7ae99836e59442e19040000000000000000000000000000001a2f44596f8499aec4b49f8a75604b35200b00000000000000000000000000000000000013283d52687d92a7b49f8a75604b36210b000000000000000000000000001020354a6072859baabbc3b49f8c7b655a483b2c1f1308000000000000000000000009151d2d363943443a372e201000000000000000000005192b3c4b6074869ca9bab3a1988273635a4f4b443f4b50606b8095a4b5c3b29d8874604b35200b0000000000000000091e324556697f94a5b6b4a2937e695f4c473a3d3c3a464c6073859bb0c9b49f8a76614c36210c0000000000000000000000000000000000000000031729395c71869bb1c6bca7927c67523d27120000000000000013293e53687e93a8bdc6b19c86716b6b6b6b6b6b6b6b6b6c6d6f73798089979fabbac7baab9f8d7c665a4835221200000000000000000000000000000000000000000d23384d62788da3b5a8917c665137273751667b90a8b7a58f79644f3a240f0000000000000000000011263b51667b90a6bbc9b49e8a8181818181818181818181818181818181818181817c66513b26110000000000000000000000000000000000000004182a3a474c5d606060605f5a4b46392918080000000000000d1d31424e535f60606060605953463624110000000000000000000000000000000c21364c61768ba1c6af99846f5a442f1a05000000000000000000000000000002172c41576c8196acc1bbaa8d77624d38220d000000000000000000000000000000000005182b3b576d8297acb09a85705645321e0900000000000000000000000000071c304354647a8c9fb4c1bbaa9d88786259493d31221b100b050000000000040a111927313e4a4f595a4f4b3e2e1f0e0000000000000000000e1d324556647a8b9fb4bbb2a09884786c6460555c5d656e7e939eb0c2b6a5937e695544311d080000000000000000021628384b6074879caabbb49f8c7d6d61585452515358616c8095a3b5bfaf9a846f5746331e0a000000000000000000000000000000000000000000192e44596e8399aec3bfaa947f6a553f2a150000000000000011263b51667b90a6bbc9b49f8b80818181818181818181818284888e959ea8b5bcc3b7a99f8d7e685e4c3c2b190400000000000000000000000000000000000000000b2035495a71869bb1ad98826d554431364b6075899eb3ab95806b563d2d1a070000000000000000000e23394e63788ea3c5cdb9a89e969696969696969696969696969696969696969696826d58422d18000000000000000000000000000000000000000a1f334758617375757575756f615746362614010000000005192b3c4e60687475757575756e6453402c170200000000000000000000000000000b21364b60768ba8b9af9a85705a45301b00000000000000000000000000000000142a3f54697f94a9bec8a58f7a65503a251000000000000000000000000000000000000b2034485972879cb2ab95806b563828160200000000000000000000000000001325364a5c6c8196a3b5c4b7a69c8677635b4e42372e221f181614141415171f212e37444b5c646e6f645c4b3d2c1b0b0000000000000000021528384a5c687d929db4bcb2a29a8b827a757171747a83939caebcbcab9c8774604b372715010000000000000000000a1d314556657b8c9fb4bbaa9f8d82776f6a6867686d7681959eafc1b3a18f7a654f39291703000000000000000000000000000000000000000001172c41566c8196abc1c1ac97826c57422d17000000000000000e23394e63788ea3c5cdbaa99f9696969696969696969696979a9da6abb3b9c6bab4a59d8b7d68604e402f1e0e00000000000000000000000000000000000000000006192b3c556a7f95aab39e8975604b363145566d8398adb29c87725b4a36210c0000000000000000000c21364b61768ba7b8ccc6b9b4acacacacacacacacacacacacacacacacacacacac9a856f5a372614010000000000000000000000000000000000000c22374c6177888a8a8a8a8a8475615443301c11000000000b2034485a687e898a8a8a8a8a836e59442e19040000000000000000000000000000091e32455674899eb4b19b86715c3928160300000000000000000000000000000012273c52677c91a7bcbca7927d67523d281200000000000000000000000000000000000d22374c62778ca5b6aa907b66503b261100000000000000000000000000000008182d3e4b6075859ba6b8c4b6a49c877968604f4b3e37342a2b2a292a2b2933373f4b55606a7a83847a645b493928160300000000000000000a1a2d3e4e5f6a7f949fabb8b4a99f978f898786898f99a1aebabcb49f8d7b65564531190900000000000000000000021527384c5d687e939fabb8ab9f978b847f7d7c7e8289969fafbcb6a499836e5d4b371b0b0000000000000000000000000000000000000000000014293f54697e94a9bec4af9a846f5a362513000000000000000c21364b61768ba7b8ccc7bab4abababababababababababacafb3b7c4c5b8b3a99f96877a675f4e4231221200000000000000000000000000000000000000000000000e23394e63798ea1b3a7907b665036273851677c91a9b6a58e79634e39240e000000000000000000091e32465773889eb3bababababababababababababababababababababababab29d87725544311d080000000000000000000000000000000000000a1f334758657b8c9f9fab9f9a8472604b3f2e1c0c00000417293a4d62788b9ea89f9fa18e79644e39240f000000000000000000000000000000021628385d72879db2b39e89735745321e090000000000000000000000000000000f243a4f64798fa4c7bfaa947f6a553f2a15000000000000000000000000000000000012273c52677c91a7b49f8b76614c36210c00000000000000000000000000000000101e3245566278889ea9b9c3b6a59d8a7e70645c534c483b403f3e3f403a474c525d65737f8c98998979635746321e0b000000000000000000102031414f616a7f8d9ea7b4bab4aca89e9c9c9ea8aeb3bfb9b39d947f695d4b3827150000000000000000000000000a1a2f3f4e606a7f8d9ea7b4b5a99f9994929193979ea7b1bdb3a59c8676614c3f2e1c000000000000000000000000000000000000000000000011273c51667c91a6bbc7b19c87725443301c07000000000000091e32465773889eb3babababababababababababababababac7bab4b1aca79e968b8075645c4d413124140400000000000000000000000000000000000000000000000c2136495b6f849aa2a497826c544330364b61768a9fa4a6927c67523d2712000000000000000000031628395b71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59f8a75604b35200b00000000000000000000000000000000000004182a3a4b5d6a7f94a1b3b4a2957f6a5d4b3a2a1808000a1f3347586c8196a9b9bfae99836e5c4a36210d000000000000000000000000000000001b30465b70859bb0b8a78b76604b36210b0000000000000000000000000000000d22374c62778ca9bac2ac97826d57422d18000a0a050300000000000000000000000417293a576c8196acb09b86715746331e0a0000000000000000000000000000000003162838485a657b8b9ea8b8c3b6a89e92847a7068625959555453545558586167707b85959faaa79c8675614b39281603000000000000000002132332434f61697b88979fabb3b8b9b4b1b1b3b9c5b9b3a79e917f6a614f3f2e1a0a000000000000000000000000001121314250616a7c89989faab4b4afa9a7a6a8adb3b8b4afa199877863584633211100000000000000000000000000000000000000000000000f24394f64798ea4c6bab49f8975604a35200b000000000000031628395b71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a3a99f9b96918981786b61574b3e31231406000000000000000000000000000000000000000000000000061a2c3d4c6177848d8f8f8874604b353246576e838f8f8e8877624d37220d00000000000000000000192e43596e839090909090909090909090909090909090909090909090909090908d78624d38220d000000000000000000000000000000000000000c1c2e3f4a6072849aa6b7b49f8c7b655947362513021628384c6176899eb4c7b3a18f7a644f3e2d1a0700000000000000000000000000000004192e44596e8399aec5a38d78634e38230e0000000000000000000000000000000b20354a60758a9fb4c4af9a846f5a3625131f1f1f1a1812080000000000000000000a1f33465871869cb1ab96816c563929170300000000000000000000000000000000000a1a2b3c4b5d657b8a9ea7b4c1b9b4a29a8f857d77716e6b6969696a6d71767d858f9ba3b4bbb5a498836e5746321e0900000000000000000005152532434f5e6576818c969ea6a9adafb0b0aeaba79e96897d6a61504332211100000000000000000000000000000314243343505e6678828c979ea8aaadafb0b0aeaca7a29a8f8376635a493a29170300000000000000000000000000000000000000000000000c21374c61768ca8a5a5a5a98c77624c37220d00000000000000192e43596e8390909090909090909090909090909090908f8e8c8a86817c756c62594b46392e20130500000000000000000000000000000000000000000000000000000f1f344759617077797a7a74604b3628394d62777a7a797562594834200b000000000000000000000e23384e63797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b75614b36210c0000000000000000000000000000000000000000111c3043546177889dabbbaa9d8877615443301c111e3245566a7f94a8b9c0af99846f5c4a36200f0000000000000000000000000000000002172c42576c8197acbaa5907b65503b26100000000000000000000000000002101b2230435472879cb2c7b19c8772544330353535352f2d25190b00000000000000000c21364c61768b9fb4a6917c66513c2711000000000000000000000000000000000000000d1d2e3f4b5d657a899ba3b4bbc0b4afa39b928c8783807f7e7f8082868b929aa2b1b5c1bfb2a39b8676614b36210c0000000000000000000007152532404c58616c7881888f94989a9b9b999691898177675f50433324140300000000000000000000000000000006152533404c5a626d7882899095989a9b9a9997928c847b6e6158493c2c1c0c0000000000000000000000000000000000000000000000000a1f334758748a90909090908f7a644f3a240f000000000000000e23384e63797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7a797774716c6660564d483b32281b100200000000000000000000000000000000000000000000000000000004182a3a474c5a626464646056453120344859626464646056483b2b1805000000000000000000000c2135495b6365656565656565656565656565656565656565656565656565656565615746331e0a0000000000000000000000000000000000000000001325364759657b8d9fb4b7a69a8472604a3f2e1c26364b6075889db3c6b4a28f7a644f3e2d1b01000000000000000000000000000000000014293e53697e93a8bea8937e69533e29140000000000000000000000000010202e373a365a6f859aafc4b49f8975604a4a4a4a4a4a4541372919080000000000000011263b51667b90abb6a48c77614c37220c000000000000000000000000000000000000000011212e3f4b5c647885959faab3bfc1b4b0a8a49c989594939495979b9faab0b4c0c6b9b4a0988576615746321e0900000000000000000000000614212f3a474c5a636c747a7f8284868584817b756b61584d413325150600000000000000000000000000000000000715222f3c484d5b636d757b7f8385868583817d776f655d4c463a2c1e0e0000000000000000000000000000000000000000000000000004172a3a4f657b7b7b7b7b7b7b76614c37220c000000000000000c2135495b636565656565656565656565656565656565656462605457514b4538342b1e160b0000000000000000000000000000000000000000000000000000000000000c1c2a343c484d4f4f4f4b453827182b3b484d4f4f4f4b45382b1d0d0000000000000000000000061a2c3d494e505050505050505050505050505050505050505050505050505050504b463929170300000000000000000000000000000000000000000008182a3b4b5d6a7f95a2b4b3a1947f6a5d4b3a2a304354687e93a6b8c0af9a846f5d4b37201000000000000000000000000000000000000010253a50657a8fa5c4ad97826d583828150200000000000000000000000c1c2e3e4b4f575a6d8297acc2baa98c77625f5f5f5f5f5f5a544737251200000000000003162839566b8096abb19c87715947341f0a00000000000000000000000000000000000000000311212e3e4a5a62737f8c99a1aeb4bbc8c2b6b1aeaaa9a8a9aaadb0b4bbc8c7bab4a89e9283756158473928160300000000000000000000000003111c2a333c494d546065696d6f70706f6b6660574c473a302315070000000000000000000000000000000000000004121e2b353c494d5660656a6d7070706e6c676259504b3f33291b0e0000000000000000000000000000000000000000000000000000000c22374b5d65656565656565615847331f0a00000000000000061a2c3d494e50505050505050505050505050505050504f4e4d4a43363c36312720190d0300000000000000000000000000000000000000000000000000000000000000000c181f2b35383a3a3a3631271a0d1d2b34373a3a393632281a0d000000000000000000000000000f1f2c35383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3633291b0b00000000000000000000000000000000000000000000000c1d2e3f4b6072849aa6b8b49f8c7b65584736354b6073879cb2c4b4a28f7b65503f2e1b020000000000000000000000000000000000000c21374c61778ca6b8b19b86715645321d09000000000000000000000417293a4b5c646c6f738095aabfc7a48f7a747474747474746f6554412d09000000000000091e32455770859bb0ac97826c573a2a18040000000000000000000000000000000000000000000311202d3c4955606a79838e999faaafb4bac7c1c0bebebebfc2c1c8bbb4b0a99f96897e6e6057473a2a1b0b0000000000000000000000000000000c171f2c3536434b4f54585a5b5b5956514b4539332a1c1205000000000000000000000000000000000000000000000e19202c3538454b5055585a5b5b5957524c483b372e1f170b00000000000000000000000000000000000000000000000000000000081b2e3f4b4f5050505050504c473a2a180400000000000000000f1f2c35383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a393735302526201d150a050000000000000000000000000000000000000000000000000000000000000000000000040e192022242525201d150a000d182022252524211e160a0000000000000000000000000000010f1a212326262626262626262626262626262626262626262626262626262626211e170b00000000000000000000000000000000000000000000000000111c3043546277889dabbbaa9d88766154433f51677c91a4b6c1af9a85705d4b372010000000000000000000000000000000000000000a1f33475873889db3b49f8a75604b36200b000000000000000000000a1f334758647a8184888d9fb5cac9b49f8b8a8a8a8a8a8a8a836f5a3726140100000000000b21364b60768a9fb4a7927d67523d2712000000000000000000000000000000000000000000000002101e2b37444b5b636e7a838a939a9fa9a8acadaeb0b0afaeaca9aa9f9a938a817768604b45392a1c0c0000000000000000000000000000000000040e19202630353a3f4345464644413c3632281f180c00000000000000000000000000000000000000000000000000050e19212832363b404345464544423d37342a231c110400000000000000000000000000000000000000000000000000000000000010212e373a3b3b3b3b3b3b37332a1c0c000000000000000000010f1a21232626262626262626262626262626262625252422201c13110b0902000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0f0f0f0b0902000000050b0d0f0f0f0b09030000000000000000000000000000000000060c0e101010101010101010101010101010101010101010101010101010100c0a030000000000000000000000000000000000000000000000000000011426364859657b8d9fb4b7a6998372604a4b5d70859bb0c3b4a3907b65503f2e1c020000000000000000000000000000000000000004172a3a596f8499aebbaa8f7a644f3a240f000000000000000000000c21374c61768b969a9d9fabbccfcebbaa9f9f9f9f9f9f9f9d87725544311d08000000000010253b50657b90aab7a58d77624d38220d000000000000000000000000000000000000000000000000000e1926313d4a4e5c646e777e858a8e939698999b9b9a999794908a857e766c62594e4232281b0c00000000000000000000000000000000000000000608141c20252a2d2f31302f2c26211e160a0400000000000000000000000000000000000000000000000000000000060a161e21262a2e3031302e2c28221f180d08000000000000000000000000000000000000000000000000000000000000000002101b2225262626262626221f180c000000000000000000000000060c0e1010101010101010101010101010101010100f0d0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3b4c5d6b8095a2b4b3a1947f695d50657a8fa3b4c1b09b85705d4c38211100000000000000000000000000000000000000000014293f54697e94a9c4aa947f6a55392917030000000000000000000d22374c62778ca9afb2b5bcc9d1d8c8bbb4b4b4b4b4b4b49f8a75604b35200b0000000002152737556a8095aab29d87725a4834200b000000000000000000000000000000000000000000000000000009141d2d363e4a4f5861687075797d81838485868584827e7b76706961584c473b311e160a000000000000000000000000000000000000000000000001080b1014181a1b1b1a16110b0903000000000000000000000000000000000000000000000000000000000000000002090b1015181b1b1b1917120d0b05000000000000000000000000000000000000000000000000000000000000000000000000080e101010101010100c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111719202020202020202020202020202020202020202020202020202020200d0b060000000000000000000000000711171920202020202016140e04000000000000000000000000000000000d1d2f3f4b6073849aa6b8b49f8c7b645b6f8499aec1b5a3907b66503f2f1c030000000000000000000000000000000000000000000e24394e63798ea6b7b09a85705746331e0a0000000000000000000b20354a60758a9f9f9f9fafb4c0d0c0b3af9f9f9f9f9f9faa8d78624d38220d00000000081d3144556f859aafa897826c573c2b1905000000000000000000000000000000000000000000000000000000010f1a212d363a474c53566064686c6d6f7070706f6c69666157534c473a342a1d13030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e1416202020202020181610060000000000000000000000000000000000000000000000000000000a19242c2f353535353535353535353535353535353535353535353535353535352320190e000000000000000000000a19242c2f3535353535352b2821160800000000000000000000000000000000111d3144556277889eabbbaa9d877663798c9fb5c2b09b85715e4c382111000000000000000000000000000000000000000000000c21364a5b73889db3b49f8a76614c36210c000000000000000000071c30435472878a8a8a8a9aa2b4c7b3a29a8a8a8a8a8a8a8a8a7b65503a2510000000000b20364b6075899b9b988a79634e38230e00000000000000000000000000000000000000000000000000000000000007101b222a333738454b4f535758595b5b5a595754504b463937332a1f180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f131516161614110d0b0500000000000000000000000000000000000000000000000000000000000000030a0c101416161615120e0b08010000000000000000000000000000000000000000070c0e20202020201f180c0a030000000000000000000000000000000000000000000000010a10121e202020202017140e05000000000000000000000000000000081621292c3535353535352d2a231709000000000000000000000000000000000000000000000000000719293640444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a352b1e0e00000000000000000719293640444a4a4a4a4a4a403d33261604000000000000000000000000000000011426374859667c8d9fb5b7a599836e8298abbcb5a3917c6651402f1c0300000000000000000000000000000000000000000000071a2d3d586d8298adbbaa917c66513929170300000000000000000013253658697275757575849aafc4af9a847575757575757575655d4b37230e000000000e23394e63798586868279635b4935210c0000000000000000000000000000000000000000000000000000000000000000070c171f21273136393e41434446464544423f3b363329211f170c050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070a151d2024282a2b2c2b29262220180e0c070000000000000000000000000000000000000000000000000000090b171e2125292b2c2b2a2724201c140b0801000000000000000000000000000000010f1a21243535353535342d211e170b00000000000000000000000000000000000000000005121d25273335353535352c2922160800000000000000000000000000041626343d414a4a4a4a4a4a423f35271706000000000000000000000000000000000000000000000000112436475459606060606060606060606060606060606060606060606060606060605e483c2b19060000000000000011243647545960606060606056514433210e0000000000000000000000000000000009192b3b4c5e6b8095a2b4b3a1937d8c9fb4c2b19b8673604a35201200000000000000000000000000000000000000000000000012273c52677c91a8b9ad98836e5746331e0a00000000000000000008183a4b585d6060606d8298adc2b19c877260606060606060504b3f2e1c08000000000c2135495b637171716d635b4a3d2c1a0600000000000000000000000000000000000000000000000000000000000000000000040a0c151d2024282c2e2f3031302f2d2926211e170c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005101b222832363a3d3f4141403e3b37342b24211a0f080000000000000000000000000000000000000000000007111c232933363b3e4041403f3c39353026201c140800000000000000000000000000000f1f2d36394a4a4a4a4a49433633291b0b0000000000000000000000000000000000000000122330393c484a4a4a4a4a413e342616050000000000000000000000000e2134445156606060606060585245352310000000000000000000000000000000000000000000000000172c4054656e75757575757575757575757575757575757575757575757575757575705a4835200b00000000000000172c4054656e7575757575756b62513d281400000000000000000000000000000000000d1d2f404b6073849aa7b8b49f8a9faabbb5a4917c675443301c070000000000000000000000000000000000000000000000000b21364b6075899eb4b49f8a76614b36210f000000000000000000001d2d3a44484a4a556a8095aabfb49e897459484a4a4a4a4a3a372e21110000000000061a2c3d494e5c5c5b584e4a3d2d1f0e000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f1317181a1b1b1b1a1714110c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202d3638454b4f525556565554514d483b39362d221b1004000000000000000000000000000000000000010f1a212f3839464b505355565654524e4b43363530261813060000000000000000000000071a2d3d4a4e60606060605f584b46392917030000000000000000000000000000000000000a1a30414d525d606060606056514434220e00000000000000000000000014293d51626b7575757575756d63523f2a16010000000000000000000000000000000000000000000000192f44596e838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78624d38230d00000000000000192f44596e838a8a8a8a8a8a806b56402b16010000000000000000000000000000000000111d3144556278899eabbcab9fabbbc2b19c8673604a36251300000000000000000000000000000000000000000000000000091e3245566d8298adbaa9927d68523d2c1a060000000000000000000f1d283032353d52677d92a7c6b9a88c77624d373535353525231c11030000000000000f1f2c35394646464339362d1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101e2b353e4a4f566064686a6b6b6b69666259564e4a3d372e1f170b0000000000000000000000000000000004121f2d36404c50576165696b6b6b6a67636054504b43363020190e000000000000000000000c21364a5b637575757575746d615746331e0f0000000000000000000000000000000000031628384d5f677375757575756c62513e2914000000000000000000000001162c41566b808a8a8a8a8a8a826d58422d18000000000000000000000000000000000000000000000000172c41566c81969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8f7a65503a251000000000000000172c41566c81969f9f9f9f98836d58432e18000000000000000000000000000000000000011527374859667c8d9fb5bcb4bcc9b6a4927d675443301808000000000000000000000000000000000000000000000000000316283850657a8fa4b6af9a846f5b4935210c000000000000000000000b151b1d23394e63798ea8b9c6a5907b66503625132020100e080000000000000000010f1a21233131312e24211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b10131517171615120f0b0801000000000000000000000000000000000000000000000000000000000210212e3c484d5c646e757a7d7f8081807e7b77726b635b4f4b3f33291b0f01000000000000000000000000000513222f3d4a4e5e656f767b7e8081807f7c79746d6660544d41352c1e120400000000000000000e24394e63798d8a8a8a8a898275614b3d2d1a0700000000000000000000000000000000091e324556677d888a8a8a8a8a816c56412c1700000000000000000000000014293e53697e939f9f9f9f9a85705a37261401000000000000000000000000000000000000000000000014293f54697e94a9b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a7927d68523d28130000000000000014293f54697e94a9b5b5b09b85705b3827150200000000000000000000000000000000000009192b3b4c5e6b8096abc0cacfc7b19c8774604b3625130100000000000000000000000000000000000000000000000000000a23374b5d72879cb1b59f8c79634e3a2a18040000000000000000000001000b20354b6074899eb4c0ab95806b5443301c0e0b0b070000000000000000000000060c0e1c1c1c180e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b161e2125282b2c2c2b2a2724201d150c0a030000000000000000000000000000000000000000000000000010202e3f4b5a626e7a83898f929496969593908c87817970645d4c463a2c1f0f00000000000000000000000001132330404c5b636f7b848a909395969594918e89837b73675f4d493c30221406000000000000000c21364a5b6e83999f9fa89e98836e5b4a36210e000000000000000000000000000000000b21364b6075899da69f9fab917c66513c271100000000000000000000000011263c51667b91a6b5b5b29d87725544311d08000000000000000000000000000000000000000000000011273c51667c91a6bbcad4c3b7b2b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1aa95806a55402b150000000000000012273c51677c91a6bcc8b29d88735645311d09000000000000000000000000000000000000000d1d2f404f64798fa4b9cecac6b19b8675604b41301f0f0000000000000000000000000000000000000000000000000000081c2e3f53697e93a7b8ab97816c5847331f0b000000000000000000000000081c3043546e8399aec4b29c8773604a3b2c2220201c130808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a161e212832363a3d404142413f3d39353127211e160b04000000000000000000000000000000000000000000000c1c2e3e4b5d6578838e989fa8a7aaababaaa9a6a59c968e847a6d6158493d2c1e0e00000000000000000000000f1f30414d5e66798490999faaa8aaababa9a7a79e9890867d70635a4d4031241405000000000000071a2d3d4f647a8ea1b3b9b4a08e79634e3c2b190500000000000000000000000000000010253a50657a8fa8b7c4b59f8b77614c37220c0000000000000000000000000e24394e63798ea3c5cab49f8a75604b35200b00000000000000000000000000000000000000000000000f24394f64798ea4c6d6cab7a59d9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c97826d58422d18030000000000000f24394f64798ea4c6cab59f8a75604b36200b000000000000000000000000000000000000000d22374b5d6f8499afc8bbb4bbb5a397816c5f4d3d2d1b0b00000000000000000000000000000000000000000000000000001121364b6175899eb3b49f8a77614c3a29170400000000000000000000000114263651667c91a6b7b6a5917d6759493c3736353025231c11030000000000000000000000000000000000000000000000000000000002090b0f121415161514120f0c0a04000000000000000000000000000000000000000000000000000000000000000000000008141c28323638454b4f535556575655524f4b44373632291f170c000000000000000000000000000000000000000004182a3a4b5c657b8899a1adb4bac6beb9b7b8bac3b6b2aba29a8f8276635b493c2c1d0d00000000000000000008182c3d4d5f677c8a9aa2afb4bbc8bcb4b4bac5b8b3ada49c928478665e4e42312313020000000000000f22364a5c6f8499afc0bead98826d5a4835200c000000000000000000000000000000152a3f546a7f94a9c6c6b19c86715847331f0a0000000000000000000000000c21364b61768ba7b8ccbbaa8d78624d38220d00000000000000000000000000000000000000000000000c21374c61778ca8b9cdc7b29d878787878787878787878787878787878787878787826d58422d18030000000000000c22374c61778ca8b9cdbcab8d78634d38230e000000000000000000000000000000000000081c2f3f4f647a8fa1b3bbaa9faab3b19f927d675b4a3929170300000000000000000000000000000000000000000000000000091e3246576b8095a8b9a9957f6a5846331f0d0000000000000000000000000b20354b6074889db2c0b29d8877625a504c4b4a4336372e211100000000000000000000000000000000000000000000000000040a0c151d202427292a2b2a292824211f17110b09020000000000000000000000000000000000000000000000000000000000000d18263038454b52566065686a6c6c6b6a67646055524b463933291c13040000000000000000000000000000000000000a1f334758647a8b9ea6b3bfc1b5b0a8a4a2a2a4a8afb5bcb4afa0978679635a493b2a18080000000000000001142636495b677d8c9ea8b3c0b4b0a7ab9f9fa9a3aab1b5b6b1a29a897c68604e41302010000000000000071b2d3e4f647a8fa2b4cab49f8b78624d3a2917040000000000000000000000000005192b3c596e8399aec3c1ac97816c573a2a18040000000000000000000000000a1e32465773899eb3c8c8a58f7a65503a251000000000000000000000000000000000000000000000000a1f33475874899eb4c9bba5907b72727272727272727272727272727272727272726d64523f2b16010000000000000a1f34475974899eb4c9c9a5907a65503b25100000000000000000000000000000000000000823384b5d70849aafbfb49f8b99a1b3b49f8a79635746331e1403000000000000000000000000000000000000000000000000031628394c61768a9eb4b39e8976614c3b2a18050000000000000000000000081d314455677d92a2b4b7a69c86786c6562606054504b3f2e1c0800000000000000000000000000000000000000000000050c171f21273136393c3f40403f3e3d3a36332927201d150a060000000000000000000000000000000000000000000000000000010f1d2b36434b5660686f757a7d808181807f7c79756f6761574c473a311f170c0000000000000000000000000000000006192c3c4c6176879da9b8c5bab4a39b938f8d8d8f939a9fabb4beb1a49c887863594736261401000000000000081c30435463798a9faab9bbb4a29b928c8a898b8e949ca4b2b7b4a89e8d7e685f4d3e2d1a0a0000000000001022374b5c6f849aafc0bbaa96816c5847331f0a000000000000000000000000000b2035485a73889db3c8c3a7917c67523c271200000000000000000000000000031629395b71869bb0c6bda7927d68523d2813000000000000000000000000000000000000000000000004172a3a5c71879cb1c6bda8937d685c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5852453523100000000000000004182a3a5c71879cb1c6bda8927d68533d2813000000000000000000000000000000000008182f4050657b90a2b4bbaa97818399a7b9a89c8676614c43322111000000000000000000000000000000000000000000000000000b1f3347586b8096a7b8a795806b5947341f0f0000000000000000000000011527374d5f70849aa5b7b5a49c8a817b77757574655d4b37230e0000000000000000000000000000000000000000010d192029333738454b4e515455555554524f4c463a3c36312720190e050000000000000000000000000000000000000000000000000f1f2d3b48546068757d848a8f929596979694928e89847d766b61584e42332a1c0e0000000000000000000000000000000c2035495a6d8297a6b7c7baa99f93857e7a77787a7e858c9ba3b0bcb6a69d8777625443301c0c0000000000000b20354b6073869ba8babbaa9f92857d77757476797f86929da6b4b9ab9f8d7d675c4a382815020000000000081b2e3e50657a8fa2b4c8b49e8976614c382816020000000000000000000000000d22384d62778da6b7cab6a58c77624d37220d0000000000000000000000000000192e44596e8399aec3bfaa957f6a55402a150000000000000000000000000000000000000000000000001a2f44596f8499aec4c0ab95806b56474747474747474747474747474747474747423f3527170600000000000000001a2f445a6f8499afc4bfaa95806a55402b1500000000000000000000000000000000001325364c5e70859bb0c0b49f8b7878899eb3b6a499836e614f3f2e1d0d00000000000000000000000000000000000000000000000004172a3a4c6176899eb3b49e8a77624c3d2d1a070000000000000000000000091930414c6277879da6b4b5a89e96908c8b8a897b65503a25100000000000000000000000000000000000000009141d2b343a474c5356606467696a6b6a696764615857514b4538352c20190e010000000000000000000000000000000000000000000e1e2d3d4a5962737e88929a9fa9a8aaabacabaaa7a89e999289807668604c473a2b1e0e00000000000000000000000000001325364d62788b9fb4c4bbaa9f8b7e71696462636568707985969eb0bcb6a59b8573604b3a2917040000000006192c3c51677c91a3b5beb49f8c7e706862605861646a737d879ba3b4bcab9f8b7a645645321d0b0000000000001023374b5d70859aafc1b9a8947f6a5645321e0800000000000000000000000012273c52677c91a7c4c7b29c8772594834200b0000000000000000000000000001162c41566b8196abc0c2ad97826d58422d18000000000000000000000000000000000000000000000002172c42576c8197acc1c2ad98836d584332323232323232323232323232323232322d2b231709000000000000000002172d42576c8297acc1c2ad98826d58432d1800000000000000000000000000000000071c304354667c90a3b4bcab98826d677c919fb1b2a1947f695d4b3b2a19090000000000000000000000000000000000000000000000000c1f3347586a7f94a5b7a896816c5b4a362113000000000000000000000000131f3448596379889aa2b2b7b4aca5a1a0a796816c56412c170000000000000000000000000000000000000d1926313b484d5861696f75797c7e7f807f7e7d7976726c6660564d493c352b1d1409000000000000000000000000000000000000000a1a2c3c4a5b637884939da6afb4bac7bfc1c1c0bfc6b9b4afa79e95887d6e6158493c2c1e0e000000000000000000000000071c3043546c8196aabbc5b49f8c7c6860534f4d4d4f535b637380969eb0c0b5a3937e685847331f09000000000c2135495b70859bb0c2b19f917d6860524d4b464c4e54606776859ba2b4baa99c8674604b3a2917040000000000081c2e3f50657b90a3b4c6b39e8875604b362614151515151515151515151515152737566b8196abc0c2ac97826d573b2b1805000000000000000000000000000014293e53697e93a8bec4af9a856f5a372614010000000000000000000000000000000000000000000000142a3f54697f94a9bec5b09a85705b3727151d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1816100600000000000000000000152a3f546a7f94a9bfc5af9a85705a372614010000000000000000000000000000011426364a6072869bb1c1b59f8c79635f6c8196a3b5b49f8c7b65594837261401000000000000000000000000000000000000000000000004172a3a4b6075879db2b49f8c79634e41301b0b000000000000000000000005182a3b495b637784939da5acb1b3b5b9af9a856f5a37271501000000000000000000000000000000010f1d2a37444b59626c767e84898e919495959493928f8b87817c756c635a4d483c3126190d000000000000000000000000000000000002152838495a6379889aa2b3b7c4c9c7bab4b1afafb0b3b8c5c5b9b3a79e928376625a493c2c1c0c00000000000000000000000b20354a6073889db2c8b8a695806b5e4e423a38383a3d4a54606b8096a2b4c1b39e8976614c372614010000000e23384d63788da3b4bcab97826d5f4e423735333636434a586174849ba7b8b6a4947f6a5846331f0a0000000000001123384c5d70859bb0c1b8a6937e685443302a2a2a2a2a2a2a2a2a2a2a2a2a2a31445570859bb0c5c3a7927d68523d281300000000000000000000000000000011263c51667b91a6bbc7b29d87725544311d08000000000000000000000000000000000000000000000012273c52677c91a7bcc8b29d88735544311d080707070707070707070707070707030100000000000000000000000012273d52677c92a7bcc7b29d88725544311d080000000000000000000000000000081c304354677c91a3b5c0ae99836e5b4b6074859ba7b9aa9d8877625544311d120000000000000000000000000000000000000000000000000c1e324556667c91a1b3aa9a84705f4d3929170300000000000000000000000d1d2c3d495962737e8791969c9e9fa89e9b88735544311d080000000000000000000000000000000f1f2c3b4855606978818a939a9fa8a6a9aaaaaaa9a7a4a49c97918881786d625a4b44372b1d1002000000000000000000000000000000091d3245566278889da6b4c0cbbfb3aea99f9b9a999b9ea7aab3b7c4b8b3a1998678625a493a2a1808000000000000000000000f253a4f647a8fa6b7c9b39e8875604b4031252223252d36434b6073859babbcb8a795806b5544311d0800000013283d53687d92a8c1b59f8c78634d403122201f2125303a47566278899eb3c2b49e8976614c36210f000000000000081c2f3f51667b90a3b5c4b29c8773604b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f4b60758a9fb4c9b7a58d78624d38230d0000000000000000000000000000000e24394e63798ea3c5cab49f8a75604b35200b00000000000000000000000000000000000000000000000f243a4f64798fa4c7cab49f8a75604b36200b000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7cab49f8a75604b35200b00000000000000000000000000011527374b6073869cb1c1b3a28f7a644f45566278899eb3b7a69a8473604b40301e0e0000000000000000000000000000000000000000000000021628384d5e6f8499a8b4a2927d675746331e0a0000000000000000000000000f1f2c3b48556068747b8186898a8b89868073604b35200b00000000000000000000000000000e1e2c3d495962737f8a979fa9afb4bac6bebfc0bfbebcc3b6b2aca79e968b8278696055483b2e2111030000000000000000000000000005182b3b4b6074869ca6b7c4c5b8b3a199908a86848486898d959da6b4babfb3a49c887862594736261401000000000000000000152a3f556a7f94aac4bcab95806a56453222140d0e10182631445563798d9fb5c5b39d8874604b35200b000000182d42586d8297adc2b09b85705a493522130b0a0c131c2a38485a687e93a5b7b9a8947f69543d2d1a070000000000001124384c5e71859bb0c2b6a5917c6755555555555555555555555555555555555564798ea9bac7b29d88725a4835200b0000000000000000000000000000000c21364b61768ba7b8ccbbaa8d77624d38220d00000000000000000000000000000000000000000000000d22374c62778ca9bacdbcab8d78624d38230d000000000000000000000000000000000000000000000000000000000d22374d62778ca9bacebbaa8d77624d38220d00000000000000000000000000081d314455677d92a4b6c1af9a846f5c4a38495a677c919fb1b4a296806b5e4c3c2c1a0a00000000000000000000000000000000000000000000000a1a30404d62788a9fb4b39d8876614c36210c000000000000000000000000010f1d2b37444b5560666c7173757574706b605544311d08000000000000000000000000000b1b2c3c495b637784949fa9b4bac7c6b9b4afacabaaabadb0b4bac5b8b3aa9f978a7f7362594b3f2f2111030000000000000000000000000b203448596b8095a4b5c4c5b8a79e91847b75716f6f7073787f88959fa9b8c2b6a69c8777615443301c0e000000000000000000192f44596e8499abb3b59f8c78624d3828160400000008142637495b6e8399aec8b7a68f7a644f3a250f0000001b30465b70859bb0c0ab96816b563c2c1904000000000c1a2b3c4b6074879db2c6b19c86715b4a36210c000000000000091c2f4051667c91a4b5c3b09b85716a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7e93a8c7c2ad98826d583c2b19060000000000000000000000000000000a1e32465773899eb3c8c8a58f7a65503a251000000000000000000000000000000000000000000000000b20354a6075899fb4c9c9a5907a65503b2510000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9c8a58f7a65503a2510000000000000000000000000021528384b6074879db2c2b4a3907b65503e2e3c4d5f6c8196a3b5b09e917c665a49382816030000000000000000000000000000000000000000000000122035495a697f94a3b5a6947f69543f2a1400000000000000000000000000000d19273137444b51575c556060565b554b443727150100000000000000000000000003172939495a6379879aa2b4bac7bfb3aea89e9a97959596989b9fa9adb4babbb4a89f948577655d4c3f2f21110100000000000000000000021527374d62778a9fb4c2c8b8a79e897c6f6660565a5a5b5b636a76808b9ea7b7c4b6a59a8472604b3c2c19060000000000000000192e43586e828d969da69a84705a49351a0a000000000009192c3d51667c91aabbc4aa947f6a553f2a150000001d32475d72879cb2bda8937e68533e29130000000000000d1d3144556a7f95aac6b6a48e79634e39230e000000000000001220354a6073869cb1c2b5a396817f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f859bb0c5c4a8937d68533e281300000000000000000000000000000000031629395b71869bb0c6bca7927d67523d28120000000000000000000000000000000000000000000000071c30435472879cb1c7bda7927d68523d281300000000000000000000000000000000000000000000000000000000081c30435472879db2c7bca7927d67523d2812000000000000000000000000091d324556687e93a5b6c2b09b85705d4b372030404b6074859ba7b9b39e8978635645321e13000000000000000000000000000000000000000000000006192c3c4b6073859ba8a597826d57422d1800000000000000000000000000000009151d2731363c4137444b4b453840353127190900000000000000000000000000091e3346576378889da6b4c0c3b6b2a1999089858280808183868a90979fa9b4babab4a39b887b655d4c3f2f1f0f00000000000000000000081d3144556b8096a9bacdbbaa9e8979675f504b4538443d494e57616b7b899da6b7c3b4a2947f6a5a4935200f0000000000000000162b4053646e7881888c887a644f3c2c19000000000000000f21364c61768a9fb4c2ad98836d58432e180300001e34495e73899eb3bca7927c67523d2712000000000000021527374f647a8fa8b9c2a8937e68533e291300000000000000071c304354677c91a4b6c1b09e96949494949494949494949494949494949494949ba3b5c9b8a68d78634e38230e0000000000000000000000000000000000192e44596e8399aec3bfaa957f6a55402a150000000000000000000000000000000000000000000000001325365a6f849aafc4bfaa957f6a55402a1500000000000000000000000000000000000000000000000000000000011426365a6f859aafc4bfaa947f6a553f2a150000000000000000000000031628394b6074879db2c3b5a3907c66513f2e1c1d3145566278899eb3b9a79c8675604b42311a0a00000000000000000000000000000000000000000000000e1d31445563798a9f968779634e38230e000000000000000000000000000000000109151d20262c2731353632282b201d15090000000000000000000000000009192f404c6175869ca6b7c4bfb3a49c90847b75706c6b6b6c6d71757b828a969fa9b5c1b4a69d8b7c655d4c3d2c1c0c0000000000000000000b20364b6075889eb3c7c8b49f8c7b655b4d413631272f2c3539464b5d6479889daabbc0b49f8a78634d3e2d1a070000000000000010233646535b636b737674645c4b371e0e000000000000000a1f33465872879cb2c5b09a85705b45301b0600001f34495f74899eb4bda8927d68533d2813000000000000000b20354b6075899eb4c2ad97826d58422d1800000000000000001325364b6073869cb1c3bdb0abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab0b5c1c8b39d88735b4935210c0000000000000000000000000000000001162c41566b8196abc0c2ac97826d57422d18000000000000000000000000000000000000000000000000172d42576c8297acc1c2ad97826d58422d18141414141414141414141414100e080000000000000000000000000000182d42586d8297adc2c2ac97826d57422d180000000000000000000000091e324557697e93a6ababab9b86715e4c382111152738495a677c919fababa497826d604e382815020000000000000000000000000000000000000000000001142637495b697e8a8075635b4935210c00000000000000000000000000000000000002080b1117151d20201d15160b080100000000000000000000000000011527374c5e6e8298a4b6c4bfb2a199867b6f66605557565556585660666d77818b9ba3b2beb7a99f8b7c655b493a291704000000000000000010253b50657b90a6b8cbbbaa97826d5d4b3d30201d151a1a2129333f4b5b657b8c9fb4c3baa998836e5c4a36210c00000000000000061828363d494e56586160554b3e2e1b00000000000000000417293a5b70859bb0c5b19c86715c47311c0700001e33485e73889db3bfa9947f6a543f2a1500000000000000081d31445572879db2c5b09a84705b45301b0000000000000000081c304354677d92a4b6cac4c5b8b3aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeb4b9c6d1c3ae98836e593d2c1a06000000000000000000000000000000000014293e53697e93a8bec4af9a856f5a372614010000000000000000000000000000000000000000000000152a3f556a7f94aabfc4af9a856f5a36262a2a2a2a2a2a2a2a2a2a2a2a2a25231c1103000000000000000000000000152a40556a7f95aabfc4af9a846f5a36251300000000000000000000000b21364b6076889696969696917c6751402f1d030a1a2c3c4d5f6c819396969696937d685645321d09000000000000000000000000000000000000000000000009192c3d4e6069786b6056493d2c1a06000000000000000000000000000000000000000000000001080b0b09020000000000000000000000000000000000081d314455667c91a0b2c2c2b2a1998375665e504b443740404138454b5058616b798598a0b1bdbaa99e8a79635846331f120000000000000001162b40566b8095abc5cab49f8b78624d3f2e1f12090200060b171e2e3d4b5d6a7f94a5b7c7b59f8c79644e3a2a1704000000000000000a181f2c35383a474c4b44372e2010000000000000000004182a3b5a70859aafc5b19c87715c47321c0700001c31475c71869cb1c2ac97826d573d2c1a06000000000000011426375b70859bb0c5b29d87725d48321d0000000000000000011426364b6073879cb2c3ccb8a79e999999999999999999999999999999999ea8b9ccc5a8937e69533e291400000000000000000000000000000000000011263c51667b91a6bbc7b29d87725544311d0e000000000000000000000000000000000000000000000012273d52677c92a7bcc7b29c877254433f3f3f3f3f3f3f3f3f3f3f3f3f3f3a372e211100000000000000000000000013283d52687d92a7bdc7b29c87725443301c07000000000000000000000f24394f647a8181818181817d685f4d39221200000e1e30404b60737e81818181818075604b36200b0000000000000000000000000000000000000000000000000e1f31424e5b635b4b45382c1f0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074879cb2bec9b6a499837460564c403631272b2b2c2832363a474c5b637482979fb1bfb9a89c8776614c402f1a0a000000000000001325365a6f849aafc4c5b09b85705a4835211001000000000003101f2e3f4b6074879db2c5bcab97826d5847331f0a0000000000000000000e1a21232a3337353127191002000000000400050b131f34475972879cb1c5b09b85705b46301b060000192e43596e8298aec3b29d87725b4935210e000000000000031628395b70859bb0c5b39e88735e49331e000000000000000000081d314455687d92a5b6c8b39e89838484848484848484848484848484838a9eb4c9b8a78e79634e39240e0000000000000000000000000000000000000e24394e63798ea3b8c9b49f8a74604b3c2c18080000000000000000000000000000000000000000000010253a4f657a8fa4c8c9b49f8a7560545454545454545454545454545454504b3f2e1c08000000000000000000000010253b50657a90a5c9c9b49f8a75604a35200b000000000000000000000d22364a5c646c6c6c6c6c6b68604e41301d04000000121d31445560696c6c6c6c6c6b605645321d09000000000000000000000000000000000000000000000000001424313d494e493d32281a0e000000000000060c0e0f0f0e0b07000000000000000000000000000000000000000000000000000000000000000000081b2e3e53687d92a5b6cabcab9c8674605645382f201d15161617161e212a333d495660728197a1b2c3b6a598826d5e4c382715020000000000071c30435473889db2c8bfaa957f6a553c2b19030000000000000001111d314556687d92a7b8c9b49f8a76614c37210c00000000000000000000060c0e171f21201d1509000000040a0c191a192022303e4c61778b9fb5c8ad98826d58432d18030000152a40556a7f95aac5b6a58e79634e3c2c19090000000000091e32455772879cb1c7b29d88735d48331e000000000000000000011426374b6074879db2c3b49f8a776e6e6e6e6e6e6e6e6e6e6e6e6e6e73899fb4c8b39e8974604a35200b0000000000000000000000000000000000091c2f3f53687d93a8bdcebbaa937e695a49362614010000000000000000000000000000000000000000000d22384d62778daabbcebaa98c7769696969696969696969696969696969655d4b37230e00000000000000000000000d23384d62788dabbccdbaa98c77624c37220d00000000000000000000071b2d3e4a4f565656565656524e413123120000000001152737444b545656565656564b45382815020000000000000000000000000000000000000000000000000006141f2c3639362c1e160a0000000000010f1a2123252523201c1308000000000000000000000000000000000000000000000000000000000000000d22374b5c71869cb1c3cab49f8c7a64564538281a11080200000002090c171f2c38455460728399a5b6c3b2a0917c665645311d0a00000000000b20354a60758a9fb4cabba6907b66513b2611000000000000000000021527384b6074889eb3c8baa9927d685337261401000000000000000000000000040a0c0b08010000000c181f222e2f2b3538414d5c6a7f95abbcbbaa937e68533e291300000010253a4f657b8fa7b9c3ac97826d5a493727180a000000000e21364b60768a9fb4c6b19c86715c47311c00000000000000000000091d314455687e93a5b7baa995806b57595959595959595959595964798ea8bac3ae99836e5443301c0700000000000000000000000000000000000e23384c5d71869cb1c6d8c8b49f8a78635443301c0f0000000000000000000000000000000000000000000b20354b60758a9fb4c9c7ab96817f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b65503a251000000000000000000000000b20364b60758a9fb4cac7a48f7a644f3a250f000000000000000000000010202d36394141414141413d3a31231304000000000009192731353e4141414141403632281a0a000000000000000000000000000000000000000000000000000000010f1a2123211a0f030000000000000f1f2c36393a3a3835302518120400000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4b5c9c1ad97826d5c4b38281a0a000000000000000000040f1a273643546175879cabbcbeb29d8774604b38281602000000000c21364c61768baabbceb9a48e79644f39240f000000000000000000000a1d3144556c8197acc8c7ae99846f5544311d0800000000000000000000000000000000000000000c1c2a333743443c484d535f677a8a9eb4c4b49f8b77614c37220c0000000b20354b6073899eb3c9b49f8b7863554436281a12100f121e2f3f50667b90aabbc4af9a846f5a45301a00000000000000000000011527374b6074879db2c4b39e8976614b38444444444444444453687e93a8c6c6a9947e6954362513000000000000000000000000000000000006192c3c50657b90a4b5c9c7c4baa89a8473604b3d2d19090000000000000000000000000000000000000000081c30435472879db2c7c4b09e9694949494949494949494949494949494826d58432d180000000000000000000000081d31445573889db2c8bca7917c67523c2712000000000000000000000002101b22242c2c2c2c2c2c28251e13050000000000000009151d20292c2c2c2c2c2b201d150a000000000000000000000000000000000000000000000000000000000000060c0e0c0600000000000000061a2c3d494e4f4f4d4a43362f2212040000000000000000000000000000000000000000000000000000000417293a566b8096abc2c9b5a38e79644f3e2e1a0a0000000000000000000000000a1826364657647a8d9fb5c8b7a5937e695645321e09000000000c21374c61768ca1b6d8b7a28c77624d37220d000000000000000000000115273750657a8faabbc9b49e8974604b35200b0000000000000000000000000000000000000004182a3a474c59595b5a6269707d899ea8b9b7a697826d5947341f0b000000081d3144556c8197acc0baa99b8573605445382f27252426303c4b5d6e8399aec8c5ab96816b56412c160000000000000000000000091d314556697e93a6b7b9a7947f695645312f2f2f2f2f293a586d8297adc2b9a88e79644f39240f00000000000000000000000000000000000c2135495b6f8499aec2bfb3afb3b4a2947f695b4a3727150100000000000000000000000000000000000000011426365a6f859aafc4cdbdb0aba9a9a9a9a9a9a9a9a9a9a9a9a9a9a99a85705b3828160200000000000000000000021527375b70859ab0c5bfa9947f6a543f2a1500000000000000000000000000070d0f17171717171613110b0100000000000000000001080b141717171717160b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2136495b6364646360544c402f22120000000000000000000000000000000000000000000000000000000a1f33475871869cb1c6c5b09b85705c4a3620100000000000000000000000000000081829394b5c6d8298aabbc3b39e8875604b36210f000000000c21374c61768cabbccfb7a28c77624d37220d00000000000000000000000b20364b60758a9fb4cab9a88e79644f39240f000000000000000000000000000000000000000a1f334758616e6f7073787e85919ea7b8b6a89d8876614c3b2a1804000000011527374f64798ea2b3c7b4a397817260564c403c3a3a3b404d5b657b8d9fb5cab9a7907b65503b26100000000000000000000000021527384b6075889db3c4b29d8874604b36251319191f33465872879cb1c7b49e8974604b35200b000000000000000000000000000000000417293a4d63788c9fb5c4b3a199a1b3b49f8b79635544311d100000000000000000000000000000000000000000182d42586d8297adc2d7cdc4c1b8b8b8b8b8b8b8b8b8b8b8b8b8b8b39d88735645321e090000000000000000000000182e43586d8398adc2c1ac97816c57422c170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0d0b0500000000000000000000000000000000000e23394e63797a7a7873665e4c402f1a0a00000000000000000000000000000000000000000000000000000c21374c61768ca4b6c9c8a9947f69543e2d1b020000000000000000000000000000000b1b2e3e4d62788b9fb4cab8a6927d68533d2d1a070000000b20354b60758a9fb4cab8a38e79634e39240e0000000000000000000000091d32455671869cb1c6c6a7927d68523d2813000000000000000000000000000000000000000c22374c6177828486888d939ba3b3b7b2a49c8a7a645847331d0c00000000000922364a5c6f849aafbfc1b19f978274665e56524f4f51555e6679889dabbcc5b39e8975604b36210b0000000000000000000000000a1e324556697e94a6b8b7a6927d685443301c070c21364c61768b9fb5c4af99846f5544311d08000000000000000000000000000000000a1f3346586c8196abbcb8a6998499a9baa99b8573604b3e2d1a0a00000000000000000000000000000000000000152a40556a7f95aabfd8c8bbb4a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39f8a76604b36210b0000000000000000000001162b40566b8095abc0c4af99846f5a442f1a0000000000000913191b202020202020202020202020202020202020202020202020202020202020202020201b191309000000000000000000000000000000000000000b171f212220190d00000000000000000000000000000000142a3f54697f8f8f8d877c665e4c382816020000000000000000000000000000000000000000000000000010263b50657b90a5c2cebbaa8f7a65503a25100000000000000000000000000000000000102035485a6d8298adc3c5b19b86715b4a36210c000000081c30435473889eb3c8baa48f7a654f3a2510000000000000000000000002152838586d8298adc2c0ab96806b56412b16010000000000000000000000000000000000000b20364b60758b999b9ea7a8b0b5b4a69d938679645c4a3a2a18000000000000071b2d3e4f657a8fa1b2c7bdb1a098877c726b676564666a717c899da6b7c8b8a7957f6a5645321e09000000000000000000000000021628384b6075889eb3c4b19c8673604a35201110263b50657b90abbcc6a9947f6a5437261401000000000000000000000000000000011426364c6176899eb4c9b39e88778a9fb4b5a3957f6a5c4a3828150200000000000000000000000000000000000013283d52687d92a7bdcebbaa9f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e79634e39230e000000000000000000000013283e53687d93a8bdc6b19c87715c3a2a1804000000000c1a262e3135353535353535353535353535353535353535353535353535353535353535353535312e261a0c0000000000000000000000000000000000121b29333637342b1d0d0000000000000000000000000000000c21364b6175899ea49c8d7c665645321e0a0000000000000000000000000000000000000000000000000014293e53697e93a8becab49f8a76614b36210c000000000000000000000000000000000005192b3c4f657a8fa5b7c9b5a38e79634e39240e000000011426365c71869bb1c6bca7917c67523c2712000000000000000000000000152a40556a7f95aabfc3ae99836e59442e1900000000000000000000000000000000000000091d32455673889db0b3b8c5c5b4a29a887e74635b4a3e2d1c0c000000000000001022374b5d6e8399a9bacdbeb2a59d9187807c7a797b7f86919ea7b7c4bbaa9e8976614c38281602000000000000000000000000000a1e3245576a7f94a7b8b6a4917c66513f2e1c152a40556a7f95aac9baa88f7a644f3a250f00000000000000000000000000000000081c304354697e94a8b9c6ad98826d8095a6b8b49f8c7a645645321d1000000000000000000000000000000000000010253a50657a8fa5c8cab49f8b797979797979797979797979797979797975604b36210b000000000000000000000011263b50667b90a5bbc9b49e89745847331f0a000000091a2b3842464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4642382b1a09000000000000000000000000000008131c2f3a464c4d483b2b190900000000000000000000000000000a1e3246576a7f95a7ab9d8875604b38271502000000000000000000000000000000000000000000000000162b41566b8096abc0c7b29c87725746321e090000000000000000000000000000000000000e20354a6073879db2c7c1aa95806a553a291704000000192e44596e8399aec3bea9947f69543f2a1400000000000000000000000013283d52687d92a7bdc6b09b86715b39291603000000000000000000000000000000000000021528385b70869ba6a8adb1b6af9a85786f645c4b45392a1d0c00000000000000081b2e3f4d62788a9fb4c0cfc3b6b2a59d96918f8f90959ba3b3b8c5b9ab9f8c7b655846331a0a0000000000000000000000000000031628394b6175899eb3c2b09b85705d4b3723192c3c596f8499aec4b49f8975604b36200b000000000000000000000000000000000b20354b6073879db2c6b9a8917c6776889eb3bbaa9c8674604b3f2e1b0a00000000000000000000000000000000000d23384d62788daabbcebbaa8c7763636363636363636363636363636363605745321e0900000000000000000000000e23384e63788da3c4cdb9a88c77614c37220c00000013263849555b606060606060606060606060606060606060606060606060606060606060606060605b55493826130000000000000000000000000008182530404c58616259483726140100000000000000000000000000031629394c6176899eb3a6937e695645311d09000000000000000000000000000000000000000000000000182d42586d8297adc2c5b09b86705b39281603000000000000000000000000000000000000071c3043546c8196abc1c6b19b86715846331f0a000001172c41566c8196abc1c1ac97816c57422c1702000000000000000000000010253a50657a8fa5c8c8b39e89735746321e0a00000000000000000000000000000000000000192e43596e838f9093979ca4ada29a8c847a6d6057473b2a1b0b00000000000000102035485a697f94a2b4c5cebbaa9faaaba7a4a4a6aab1b5c1bab4a89e8d7e695d4c3a2917000000000000000000000000000000000a1e3246576a7f95a7b9b4a38f7a65503d2d2035495a73889eb3c4af9a856f5544311d08000000000000000000000000000000071a2d3e51667c91a5b6c9b49e897661687d92a1b3b5a496806b5d4b39281603000000000000000000000000000000000b20354b60758a9fb4cac8a48f7a644f4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b453928160300000000000000000000000b21364b60768ba6b8cbc6a48e79644f39240f000000192e4255677075757575757575757575757575757575757575757575757575757575757575757575706755422e1900000000000000000000000000132536434a5e667678625544311d1000000000000000000000000000000b1f3346586b8095a8b29d8774604b372715010000000000000000000000000000000000000000000000192e43596e8398aec3c4af99846f5a442f1a000000000000000000000000000000000000000013253651667b91a6c4cab59f8b76614c36210c00000014293e54697e93a9bec4ae99846f59442f1a0000000000000000000000000d23384d62788daabbccb8a78b76614b36210c000000000000000000000000000000000000000d22374c62777a7b7e82878f989fab9f998f82756159473929170300000000000005192b3c4b6073849aa7b9c9b49f8c959ca4a9aeb1b2b2b0ada99f978a7c69604e3f2f1b0b00000000000000000000000000000000031629394c6176899eb3c1ae99846f5b4a3623384d63788da7b8c7aa957f6a55372715020000000000000000000000000000000d21364a5c70859aafc3c1ac97816c575f6f8499a8b9b49f8c7a645745321e1100000000000000000000000000000000081d31445572889db2c7bca7917c67523c393939393939393939393939393632281b0a000000000000000000000000091e32455673889eb3c8bca6917c67513c27120000001b31465b70858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a85705b46311b000000000000000000000000071c304354606c7c888573604b3e2d1909000000000000000000000000000417293a4c61768a9eb4a6937e685544311d080000000000000000000000000000000000000000000000192f44596e8499aec3c3ad98836e58432e1903000000000000000000000000000000000000000c21374c61768ca6b7cbbcab907b66503b261100000011273c51667c91a6bbc6b19c87715c3a2a170400000000000000000000000b20354b60758a9fb4cac5a38e79634e39240e000000000000000000000000000000000000000b1f344859626466686d727a828d9ea6af9f978677615746331e10000000000000000e1c3043546278899eabbcb39e897f868e94999b9d9c9a98928a8177665e4e423121110000000000000000000000000000000000000b1f3346586a8095a8b9b3a18e79634e3c2b3d52677d92a7c5baa98f7a65503a251000000000000000000000000000000004182a3b4e64798ea2b4c8b4a38e79644e4d62788a9eb4bcab9c8775604b3f2f1b0b000000000000000000000000000000011527375b70859ab0c5bea9947f69543f2a242424242424242424242424211e160a00000000000000000000000000031628385b70869bb0c5bea9947e69543f29140000001b31465b70869b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9b85705b46311b0000000000000000000000000b20354a607281909d947f6a5c4a37271501000000000000000000000000000b1f3347586b8096a9b29d8774604b3626140100000000000000000000000000000000000000000000192e43586e8398adc3c3ad98836e58432e1903000000000000000000000000000000000000000a1f33475873889db2c8c9aa957f6a55402a150000000f24394f64798ea4c6c9b49e89745847331f0a0000000000000000000000081d31445572889db2c7bba6907b66513b2611000000000000000000000000000000070b0c0b07182a3b484c4f5153585c646d7c889ea8b1a49b8575614b3e2d1b0700000000000001142636485a667c8d9fb5b8a79c8676797f8386878785827d776c62594c40312414030000000000000000000000000000000000000417293a4c6176899eb4bfad98826d5a483538576c8196acc1b49f8a75604b36210b0000000000000000000000000000000b1f3447596d8297adc0c5b09b85705c4a485a687e93a2b4b6a596816c5d4b39291703000000000000000000000000000000182d43586d8298adc2c1ac97816c57422c170e0e0e0e0e0e0e0e0e0e0e0b0903000000000000000000000000000000192e43596e8398aec3c1ab96816c56412c170100001b31465b70869bb0b5b1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab1b5b09b86705b46311b0000000000000000000000000f253a4f647a8f9fb29f8b7a645544311d0e0000000000000000000000000004172a3a4c61778a9fb4a5927d685443301c0800000000000000000000000000000000000000000000172d42576c8297acc1c3ae99846e59442f1904000000000000000000000000000000000000000417293a5a6f8499afc4c2ad98826d58432d180300000c21374c61768ca8b9cdb9a88c76614c37210c0000000000000000000000011527375b70859ab0c5bea8937e69533e29140000000000000000000000080e10131c2021201c131d2a34373a3b3e3e4a4f5e667a8a9eb4b5a397816c5c4a36220b0000000000000008182b3c4c5e6b8095a1b3b6a49a83736a6e717272706d6761594d483b2f22140600000000000000000000000000000000000000000b1f3347586b8095a8bab49f8b78624d3a455670869bb0c5b09a85705645321e090000000000000000000000000000021527384c61778a9fb4c9b9a7927d68523e3c4a6072849aa8bab59f8d7b655746331e12000000000000000000000000000000162b40556b8095aac0c4ae99846f59442f1a0000000000000000000000000000000000000000000000000000000001162c41566b8196abc0c3ae99846e59442f190000001b31465b70869bb0a49c94949494949494949494949494949494949494949494949494949ca4b09b86705b46311b0000000000000000000000000c22374c61778a9fb4aa9b8573604b3c2c1906000000000000000000000000000c1f3447596c8196a9b19c8673604b36251300000000000000000000000000000000000000000000162b41566b8096abc0c4af9a856f5a45301a000000000000000000000000000000000000000000182d42576d8297acc2c5af9a85705a45301b0500000a1f33475874899eb4c9c6a48e79644f39240f000000000000000000000000182e43586d8398adc2c0ab96806b56412b1601000000000000000003111c23252530353635302518181f222526292e36404c5c677d92a3b5b59f8d7a644f39281603000000000000000e1e2f404b6073839aa5b6b3a197816c615c5d5d5b58524c473a342b1d120400000000000000000000000000000000000000000004172a3a4c61778a9fb4bbaa96816c58474b60758a9fb4c8aa95806b55382816020000000000000000000000000000091d3145566a7f95a9bac9b39e8975604b3630435463788a9fb4bcab9d8776614c402f1c0c000000000000000000000000000013283d53687d92a8bdc6b19c87715c3a2a17040000000000000000000000000000000000000000000000000000000014293e53697e93a8bec6b19b86715c3a29170400001b31465b70869bb09c867f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f869cb09b86705b46311b0000000000000000000000000b1f3447596b8096a6b5a3947f6a5a493520120000000000000000000000000004182a3b4d62778a9fb4a4917c675443301c07000000000000000000000000000000000000000000152a3f556a7f94aabfc7b19c87725c3b2b18050000000000000000000000000000000000000000152b40556a8095aabfc7b29d87725d48321d00000004172a3a5c71879cb1c6bba6917c66513c2711000000000000000000000000162b40556b8095aac0c3ae98836e59432e1900000000000000000011212f373b36434a4b4a43362f21110d0f11131b222f3d4a6073869bb1bcab97826d5746321e090000000000000000121d3144556176879da8b9b19f947f695e4c3e45433d37342a20180d0000000000000000000000000000000000000000000000000c1f3447596b8196a9bab49e8a77614c4f647a8fa9babbaa907b66503b26110000000000000000000000000000000b20364b6074889db3c7c0ac96816c5645322536495a697f94a3b4b7a597826d5e4c3a2a17040000000000000000000000000010263b50657b90a5c9c9b49e89745847331f0a0000000000000000000000000000000000000000000000000000000011263c51667b91a6bbc9b39e89745846331f0a00001b31465b70869bae98836e6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6e8398ae9b86705b46311b00000000000000000000000004182a3b4b6175889db2b49f8b78624d402f1909000000000000000000000000000c203448596c8197aab19c8673604a35201200000000000000000000000000000000000000000012273c52677c91a7c7c9b49e8974594834200b000000000000000000000000000000000000000014293f54697e94a9bec8b39e89735e492513000000001a2f445a6f8499afc4bea9947e69543f291400000000000000000000000013283e53687d93a8bdc5b09b86705b3828160300000000000000081c2f3f4b505854606160544c402f1c0c00000007121c304354687e93a8c7b49f8a76614b36210c000000000000000001142637475863798a9eb4bcb49f8d7c665c4a3c2b28221f180c050000000000000000000000000000000000000000000000000004182a3a4c62778a9fb4b9a8957f6a5754697e93a9c7b49f8a76614b36210c0000000000000000000000000000081c2e3f52677d92a6b7c8b4a28e79634e3828182c3c4b6073859ba9bab19f907c665847331f12000000000000000000000000000e23384e63788dabbccdb9a88c76614c37210c000000000000000000000000000000000000000000000000000000000e24394e63798ea3c5ccb9a78b76614c36210c00001b31465b70869bae98836e5955555555555555555555555555555555555555555555596e8398ae9b86705b46311b000000000000000000000000000c1e324657677d92a2b4a999836e5e4c3726140100000000000000000000000005182b3b4d62788b9fb4a4917c6651402f1c0900000000000000000000000000000000000000000e23394e63788ea9baccb9a88c77624d37220d000000000000000000000000000000000000000013293e53687e93a8bdc9b49f89745443301c07000002172c42576c8197acc1c1ab96816c56412c1701000000000000000000000011263b50667b90a5bbc8b39e88735645321e09000000000000000e23374b5d656d71757673655e4c3a2a1804000000001325364d63788da9babaa88f7a65503a251000000000000000000009192a3a4a5b677d919eb0bcab9f8a7a645a483929190904000000000000000000000000000000000000000000000000000000000c1f3448596c8196a9bab39e887560586e8398adc3b09b86705746321e0a00000000000000000000000000000e23374b5d71869bb0c4c5b09a85705b49361a0e1c30435463798b9fb4bdb39d8876614c41301d0d0000000000000000000000000b20364b60758a9fb5cac6a48e79644f39240f020202020202020202020202020202020000000000000000000000000c21364c61768ba7b9ccc5a38e79634e39240e00001b31465b70869bae98836e59433f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f43596e8398ae9b86705b46311b00000000000000000000000000031629394d5f70849aabb3a1907c665544311d0a000000000000000000000000000d2035485a6d8297aab09b85715e4c38231100000000000000000000000000000000000000000b20354b60758a9fb4c9c6a6907b66513b2611000000000000000000000000000000000000000013283d53687d92a8bdcdbaa98a74604a35200b000000152a3f546a7f94a9bfc3ae99846e59442f190000000000000000000000000e23384e63788da3c4cbb8a68b76604b36210b0000000000000010253b50657b8286898b887c655947341f0a00000000082135495b74899fb4c6a9947f6a543f2a15000000000000000000000c1c2d3d4d5f6b8095a1b3baa89d8878625746372614010000000000000000000000000000000000000000000000000000000005182a3b4d62788b9fb4b8a7937e695972879db2c9ab96816b56392916030000000000000000000000000005192b3c4f657a8fa3b5c9b8a7927d67523d2c1a01142636495b6a7f94a3b5b7a698826e5f4d3b2a18050000000000000000000000091d32455673889db3c8bba6917c66513c271717171717171717171717171717171717110f090000000000000000000a1f33465874899eb3c9bba6917b66513c261100001b31465b70869bae98836e59432e2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2e43596e8398ae9b86705b46311b00000000000000000000000000000b1b30414e64798d9fb5b19c8673604b3828160200000000000000000000000005192b3c4d63788c9fb4a3907b66503f2f1c0800000000000000000000000000000000000000081d31445571869bb1c6bfaa95806a553a2a18040000000000000000000000000000000000000014293f54697e94a9becab49f8a755443301c0700000012273d52677c92a7bcc6b19b86715c3a29170400000000000000000000000b21364b60768ba6b8cbc4a38d78634e38230e0000000000000011263c51667b919b9fa69d8977614c3928160300000006192c3c5d73889db2c1ac97816c57422c1700000000000000000000000f1f30414b60728399a5b6b7a69c8675615544311d1404000000000000000000000000000000000000000000000000000000000d203448596c8197aabbb29d877361778ca5b7bcab917b66513c261100000000000000000000000000000b2035485a6e8398aec1c9b39e8875604b36200f0008182c3d4b6073859baabbb2a0917d675947341f130000000000000000000000021528385b70859bb0c5bea9937e69543e2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c26241d1204000000000000000417293a5c71869cb1c6bea8937e69533e291400001b31465b70869bae98836e59432e1915151515151515151515151515151515192e43596e8398ae9b86705b46311b0000000000000000000000000000001321364a5c6e8398aab6a4937e685645321e0a000000000000000000000000000e2035495a6d8298abb09b85705d4b3723100000000000000000000000000000000000000001152737566b8096abc5c5b09b85705947341f0a00000000000000000000000000000000000000162b40556b8095aac0c9b39e89745e492513000000000f253a4f647a8fa4c7c9b39e89745846331f0a0000000000000000000000091e32455673889eb3c8bba5907b66503b2611000000000000000b20364b6075899eb3b7a795806a5745321e1102000006192b3c5d72879cb2c3ad98836e58432e19000000000000000000000001121c3043546176879ca8b9b5a4998373604b423222120200000000000000000000000000000000000000000000000000000005192b3b4d62788b9fb4b7a5917c667b90a5c3b59f8b76614c37210c00000000000000000000000000031628394d62788b9fb4cabcab96806b5645321d0900000f1d31445564798b9fb4beb39e8977624c41311d0d0000000000000000000000192e43586e8398adc3c1ab96816c56414141414141414141414141414141414141413b382f22120000000000000000192f44596e8499aec3c0ab96816b56412c1601001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000000000000000000000000000071a2d3e4e63798c9fb4b39d8875604b3827150200000000000000000000000006192c3c4e63798c9fb4a2907b65503f2e1b080000000000000000000000000000000000000010253a4f657a8fa7b8cab49f8b77614c37221100000000000000000000000000000000000000132536576c8196acc1c7b29d87725d48321d000000000d22374d62778ca9baccb9a78b76614c36210c0000000000000000000000031628385b70869bb0c5bda8937d68533e281300000000000000091d3145566d8298abbcb39d8875604b3f2e20140b050c2035495a73899eb3c3ae99846e59442f1900000000000000000000000001142636475863798a9eb4bcb3a197816c614f402f2010000000000000000000000000000000000000000000000000000000000d2035485a6d8297aabbaf9a846f7f94a9beb19b86715847331f0a00000000000000000000000000091e3246576b8096aabbcab59f8c78634d382815020000011527374a5c6b8095a4b5b8a799836e5f4e3c2b180800000000000000000001162b40566b8095abc0c3ae99836e5957575757575757575757575757575757575757514c402f1d0900000000000002172c41576c8196acc1c3ae98836e59432e1900001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000000000000000000000000000000f2135495b6d8297abb7a6937e695645311d09000000000000000000000000000e2135495b6e8398abaf9a846f5d4b372210000000000000000000000000000000000000000b20354b6074899eb3c8bbaa937e69533f2f1c080000000000000000000000000000000000071c3043546f8499afc4c5af9a85705a45301b050000000b20354a60758a9fb4c9c5a38e79634e39240e000000000000000000000000192e43596e8398aec3c0ab95806b56402b1601000000000000021527384e64798c9fb5b7a695806b5d4b3e31221f18202a3a4d62788da7b8c2ad98826d58432d18000000000000000000000000000818293a4a5b677d919eb0bfb19f937e695e4c3e2d1d0d00000000000000000000000000000000000000000000000000000006192b3c4d63788c9fb4b59f8c788298adc1ac96816c573a291704000000000000000000000000001325364b6175899eb3c8c4af9a846f5b49351a0a0000000009192d3d4b6074869caabbb3a1927d685a483625130000000000000000000013293e53687e93a8bdc6b19b86716c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c665e4c38240f0000000000000014293f54697e94a9bec6b09b86715b39281603001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000000000000000000000000000000061a2c3d4d63788c9fb4b29d8874604b36201100000000000000000000000000061a2c3d4e63798c9fb5a28f7a654f3e2d1b07000000000000000000000000000000000000081d3144556d8297acc0c8b19b86715d4c38231300000000000000000000000000000000000b20354a6074899eb3c9c2ac97826d57422d1802000000071c30435472879cb2c7bba6917b66513c2611000000000000000000000001162c41566b8196abc0c2ad98836d58432e1800000000000000000a21364a5c6e8398aabbb49f8c7b655c4e4237342b343a4759697f94a9c5c8ab96806b56412b1600000000000000000000000000000c1c2d3d4d5f6b8095a1b3bdb49f8d7c665c4a3b2b1b0b0000000000000000000000000000000000000000000000000000000e2035495a6d8298abbcab9580859bb1c2a6917c67513c271200000000000000000000000000071c304354687e93a7b9cbb8a6917c67513c2c190000000000000f1d314556647a8c9fb4bfb39e8978625443301c0e00000000000000000011263b51667b90a6bbc9b49e8a8181818181818181818181818181818181818181817c66513b26110000000000000012273c51677c91a6bcc8b39e88735745321e09001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000000000000000000000000000000000f2035495a6e8399aeb7a6927d68523f2e1c08000000000000000000000000000f21364a5b6e8399aeaf99846f5c4a36220f000000000000000000000000000000000000011426374e63798ea2b4c8b5a3907b655041301d0d000000000000000000000000000000001325364e63798ea7b9ccc4a8937e68533e291300000000001325365a6f859aafc4bea8937e69533e291400000000000000000000000014293e53697e93a8bec5b09b85705b3827150200000000000000071a2d3d4e63798b9fb4bbaa9e897a6860524c483b484d586177889eb3c8bbaa917c67513c27120000000000000000000000000000000f1f30414b60728399a5b6bcab9e8a7a64594839291909000000000000000000000000000000000000000000000000000006192c3c4e63798c9fb4b29d888b9fb4b6a48c77614c37220c000000000000000000000000000b20354a6073869cb1c5c9b39d8874604b36200e000000000000021527384a5c6b8096a4b6b9a79a8472604a3c2c180800000000000000000e23394e63788ea3c5cdb9a89e969696969696969696969696969696969696969696826d58422d18000000000000000f243a4f64798fa4c6cbb8a68b76604b36210b001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000000000000000000000000000000006192c3c50657b8fa3b5b19c86715d4b37230b00000000000000000000000000071a2d3d4f647a8ea1b3a18e7a644f3d2d1a070000000000000000000000000000000000000921364a5b70849aafc0c1b09a85705f4d3b2a19090000000000000000000000000000071c304354697f94a9c5cbb7a68e79644e39240f0000000000182d42586d8297adc2c0ab96816b56412c1601000000000000000000000011263c51667b91a6bbc8b29d88735645311d0900000000000000000f2135495b697f94a1b3b8a79e8a7e716862595d59626976849ba6b8c7b49f8a76614c36210c00000000000000000000000000000001121c3043546176879ca8b9b9a89d88786257463726140100000000000000000000000000000000000000000000000000000e2135495b6e8398abb7a69d9fa9bab19c87725947341f0b000000000000000000000000061a2c3d50667b90a4b6cabcab95806b5544311d08000000000000000a1a2e3e4b6075869cabbcb3a2937e685a4936261401000000000000000c21364b61768ba7b8ccc6b9b4acacacacacacacacacacacacacacacacacacacac9a856f5a372614010000000000000c22374c61778ca8bacdc5a38e78634e39230e001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b0000000000000000000000000000000000000e23374b5d71869bb1b5a48f7a65503a291704000000000000000000000000000f22364a5c6f8499afae99836e5b4a36210f000000000000000000000000000000000000071a2d3d51667c91a2b4c8b4a2917d67594737271509000000000000000000000000011426374a6073879cb2c7c8b39d8874604a35200b0000000000152a40556a7f95aabfc3ae98836e59432e190000000000000000000000000f24394e64798ea3c6cab59f8a75604b36200b0000000000000000061a2c3d4a60728399a3b4b8a89f93867d77737273777e889ba2b4c4baa998826d5746331e0a0000000000000000000000000000000001142636475863798a9eb4bcb7a69b8575615544311d140400000000000000000000000000000000000000000000000000061a2c3d4e63798c9fb5b7b2b4bac7ac97826c573b2a18040000000000000000000000000c2135495b6f8499afc2cab49f8c78624d372715020000000000000000101e324556657b8d9fb5c0b49e8a78635443301c0f00000000000000091e32465773889eb3bababababababababababababababababababababababab29d87725544311d080000000000000b1f34475974899fb4babaa5907b66503b2611001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000000000000000000000000000000000081c2e3f53687d92a9baad98826d5846331f0a00000000000000000000000000071b2d3e4f647a8fa2b59f8c79634e3d2c1a060000000000000000000000000000000000000f24384c5e6f849aaabbc0b39e88776255443126190d0100000000000000000002111d314455657b90a5b6cac1ac97826c5443301c07000000000013283d52687d92a7bdc6b09b86715b3928160300000000000000000000000c21364c61768ba8b9ccbcab8d78634d38230e0000000000000000000f1c3043546176859ba3b1bab4a49c928c8987898c939da6b4c0bcb49f8b78624d3929170300000000000000000000000000000000000818293a4a5b677c919eb0bfb5a3998373604b4232221201000000000000000000000000000000000000000000000000000f21364a5b6e8399aebfc8c9cdc3a7927c67523d27120000000000000000000000000417293a4e63798c9fb5babfaf99846f5a48351909000000000000000000031628384b5d6c8197a5b6b9a89a8473604b3d2c1a06000000000000031628395b71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59f8a75604b35200b00000000000004182a3b5c72879ca5a5a5a5937e68533e2913001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000000000000000000000000000000000001121364c61768a9fb4b49f8a76614c36210c00000000000000000000000000001022374b5c6f849aafab98836e5b4935210e000000000000000000000000000000000000091d2f404e63798b9fb4c1b8a69a8473604b44372b1d14090400000000000109151d2f3f4b6073859bb0c3c9b5a38f7a644f36251300000000000010253b50657a90a5c9c8b39e88735746321e0900000000000000000000000a1f33465874899eb3c9c9a5907a65503b2510000000000000000000001325364758617684979fb2b6b5b1a7a79e9d9ea7a9b2b7c4bab49e937e685a48351b0b000000000000000000000000000000000000000c1c2d3d4d5f6b8095a1b3c2b3a196816c604f402f200f00000000000000000000000000000000000000000000000000071a2d3d4f647a8ea1b3bababab6a58c77624d37220d0000000000000000000000000a1f3347586c8197aba5a5a5a1917c66513c2b1900000000000000000000000a1a2e3f4b6175879da6a5a5a2947f695b4936210c00000000000000192e43596e839090909090909090909090909090909090909090909090909090908d78624d38220d000000000000001a2f445a6f84909090909090806b56402b16001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000000000000000000000000000000000000a1f3346586e8399aebaa9927d68523928160300000000000000000000000000081b2e3e50657b8fa2b49f8c79634e3c2c1906000000000000000000000000000000000000122135495b6b8096a3b4c4b3a297816d6055483b31261f1713110f1011141d27313f4c5d6a7f94a3b5c9c0b19b86715c4b3718080000000000000d23384d62788dabbcccb8a78b76614b36210c00000000000000000000000417293a5c71869cb1c6bda8927d68533d2813000000000000000000000818293a4758617581909da5afb5bcb8b3b2b3b8c5c6b9b4a89f92806b604e3c2b190000000000000000000000000000000000000000000f1f30404b60728399a4b4bbb09f937e695e4c3e2d1a07000000000000000000000000000000000000000000000000000f22364a5c6f8499a5a5a5a5a59d8772594834200b0000000000000000000000000c21374c61768a90909090908e8372604a35200e000000000000000000000000111e3246576379878f909090908a78634e39230e000000000000000e23384e63797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b75614b36210c000000000000000e23394e63797b7b7b7b7b7b79634e39230e001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b000000000000000000000000000000000000000417293a51667c91a8b9ae99846f5745321e0900000000000000000000000000001023374b5d70859ab0ab98826d5a4935200d000000000000000000000000000000000000061a2c3d4b6074859ba6b7c0b19f97817362594b443733292826252526263137444b5d657b8b9fb4c1c7b4a2917c66513e2e1b000000000000000b20364b60758a9fb4cac5a38e78634e39230e000000000000000000000000192f44596e8499aec3bfaa95806a55402b1500000000000000000000000c1c293a4657616c7b87919a9fababadafb0afadaaa89e968a7d6b625142311e0e00000000000000000000000000000000000000000001121c304354617686989faaa5a59f8c7c665c4a36210d00000000000000000000000000000000000000000000000000071b2d3e4f647a8f909090909090826d583b2b19050000000000000000000000000c22374c61767b7b7b7b7b7b796e605443301c07000000000000000000000000031629394a5b63757a7b7b7b7b7b79634e38230e000000000000000c2135495b6365656565656565656565656565656565656565656565656565656565615746331e0a000000000000000c21364a5b63656565656565635b4935210c001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000000000000000000000000000000000000000c20364b6075899eb4b49f8a76604b36210b0000000000000000000000000000081c2e3f50657b90a3b49f8b78624d3c2b19050000000000000000000000000000000000000f1d3145566277889da8b9bdb19f9784776860554c473a3d3b3a3a3b37444b5560697b8a9fa9bacdbaa99b85705e4c39201000000000000000081d31445573889db2c8bba6907b66513b2611000000000000000000000002172c41576c8196acc1c2ad98826d58432d180000000000000000000000000c1b2939464b5e66737c858b9196989a9b9a989590898077675f514434241400000000000000000000000000000000000000000000000114263646586176828a8f909090908979644e39240f00000000000000000000000000000000000000000000000000001022374b5c657a7b7b7b7b7b7b78624d38220d000000000000000000000000000a1f33475861656565656565645c4a4336251300000000000000000000000000000b1b2d3d4a5660646565656565635b4935210c00000000000000061a2c3d494e505050505050505050505050505050505050505050505050505050504b463929170300000000000000071a2d3d4a4e5050505050504e493d2c1a06001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b0000000000000000000000000000000000000000091d3245566e8499aebaa9907b66503b26110000000000000000000000000000001123384c5e70859bb0aa97826c5a4834200d000000000000000000000000000000000000021527384859647b8a9ea7b8bdb1a29a897e736961585652504f4f5153556066747f8b9fa8bac7bdb49f8b79634e40301d0200000000000000021527375b70859ab0c5bda8937e68533e2913000000000000000000000000142a3f54697f94a9bec5af9a85705a372715010000000000000000000000000b1b2832404c54606670767c808384868583807b756b62594d41342616060000000000000000000000000000000000000000000000000818293a4758616d767a7b7b7b7b7b79634e39240e0000000000000000000000000000000000000000000000000000081b2e3e4b5d65656565656565625a4835200b0000000000000000000000000004182a3a474c5050505050504e4a3e302518080000000000000000000000000000000f1f2d38454b4f50505050504e493d2c1a0600000000000000000f1f2c35383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3633291b0b0000000000000000000f1f2d36393b3b3b3b3b3b39352c1f0f00001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b00000000000000000000000000000000000000000215283853697e93a8c3ab96816b563a2a18040000000000000000000000000000091c2f4051667c90a3b49f8b78624d3b2a18050000000000000000000000000000000000000a1a2b3b4b5c657b899ea7b4c0b3a79e93867e76706b6866646566696d747c86949fa9bac6beb19f937e685b49352212000000000000000000182e43586d8398adc2c0ab96806b56412b1601000000000000000000000012273c51677c91a6bcc7b29d88725544311d08000000000000000000000000000b161e2f36434b515861666b6e6f706f6e6b6560564d483b3123160800000000000000000000000000000000000000000000000000000c1c2a3a474c5861646565656565635b4a36210c00000000000000000000000000000000000000000000000000000010202e3f4b4f5050505050504d483c2b190500000000000000000000000000000c1c2a33373b3b3b3b3b3b39362d1c130800000000000000000000000000000000010f1a2832363a3b3b3b3b3b38352c1f0e000000000000000000010f1a212326262626262626262626262626262626262626262626262626262626211e170b00000000000000000000010f1a212326262626262623211a0f0100001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b0000000000000000000000000000000000000000000e23384e63788da5b7b19b86715947341f0a0000000000000000000000000000001124384c5e71869bb1a996816c5948341f0c000000000000000000000000000000000000000d1d2e3e4b5d657a899ba2b4bbb8b3a49c938b85807d7b7a7a7b7e8288919ca4b4bac7bcb5a097816c604e3d2c1a04000000000000000001162b40566b8095abbabaad98836e58432e190300000000000000000000000f243a4f64798fa4c7bab49f8a75604b35200b00000000000000000000000000000311182630353a474c5156585a5b5a5855504b4538342b1d1305000000000000000000000000000000000000000000000000000000000c1c2a333a464c4f50505050504e4a3d2d1a070000000000000000000000000000000000000000000000000000000211212e373a3b3b3b3b3b3b38352b1e0e000000000000000000000000000000000c181f2226262626262624221b1000000000000000000000000000000000000000000a161e2125262626262623211a0e000000000000000000000000060c0e101010101010101010101010101010101010101010101010101010100c0a0300000000000000000000000000070c0e1010101010100e0c06000000001b31465b70869bae98836e59432e1904000000000000000000000000000004192e43596e8398ae9b86705b46311b0000000000000000000000000000000000000000000c2135495b72879db2b59f8b77614c37220c000000000000000000000000000000091d2f4051677c91a4b49f8a77624c3a2a17040000000000000000000000000000000000000010202e3f4b5c647885959faab3bfb6b1aa9f9b9692908f8f9093989da6b1b6c2c3b7ab9f958272604b42311f0f0000000000000000000013283e53687d93a5a5a5a59b86705b46311b0600000000000000000000000d22374c62778ca9a5a5a5aa8d78624d38230d0000000000000000000000000000000008141c202a33373c414345464543403b36322820180d000000000000000000000000000000000000000000000000000000000000000c181f2933363a3b3b3b3b3b39362d1f0f000000000000000000000000000000000000000000000000000000000003111c23252626262626262220190e000000000000000000000000000000000000040a0c1010101010100f0d070000000000000000000000000000000000000000000003090b0f10101010100e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b31465b70869bae98836e59432e1909090909090909090909090909090909192e43596e8398ae9b86705b46311b000000000000000000000000000000000000000000061a2c3d586e8398adbcab907b66503b2611000000000000000000000000000000001220354a6073869cb1a996806b5847331f0c000000000000000000000000000000000000000210212e3e4a5a6273808c99a1afb4bbbbb4b0aba7a5a4a4a6a8adb3b8c4c6b9b3a59d8d8072605443302414010000000000000000000011263b50667b90909090909088735e48331e0900000000000000000000000b1f344759748b90909090908f7a65503a2510000000000000000000000000000000000001080c171f21262b2e2f31302e2b25211e160a05000000000000000000000000000000000000000000000000000000000000000000040c171f2125262626262624211a0f0100000000000000000000000000000000000000000000000000000000000000080e101010101010100d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d171c1f202020202020202020202020202020202020202020202020100e080000000000000000000000000000000000000000001b31465b70869bae98836e59432e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e2e43596e8398ae9b86705b46311b00000000000000000000000000000000000000000000152a3f546a7f94a9c9a9947e69543f291400000000000000000000000000000000071c304354677d92a4b49e8a76614c3a291704000000000000000000000000000000000000000210202d3c4855606a79838f999faab0b4bbc8bdbbb9babbbec2c9bcb5b0a89e95877c6a6054433626140600000000000000000000000c21364b61757b7b7b7b7b7b7b65503b251000000000000000000000000005182a3b4f657b7b7b7b7b7b7b77614c37220c0000000000000000000000000000000000000000040a0c1116191a1b1a1916100b090200000000000000000000000000000000000000000000000000000000000000000000000000040a0c0f10101010100e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f151820202020200d0b0500000000000000000000000001111f2a313435353535353535353535353535353535353535353535353525221b1002000000000000000000000000000000000000001b31465b70869bae98836e5943343434343434343434343434343434343434343443596e8398ae9b86705b46311b0000000000000000000000000000000000000000000010263b50657b90a5c4ad97826d58422d1800000000000000000000000000000000001325364b6073869cb1a895806b5846331f0b000000000000000000000000000000000000000002101e2b37444b5b636f7a848b939b9faaa9acadafb0b0afadaaab9f9b93898075665e4a43362618080000000000000000000000000a1e33465761656565656565655d4b37230e000000000000000000000000000d22374b5d65656565656565615947341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e171d1f2020202020202020202020202020202020202020202020202020202020202020201f1c170d01000000000000000000000000000000000000000000000000000000000000000917232a2d35353535352220190e00000000000000000000000d1f2f3d46494a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3a372e2110000000000000000000000000000000000000001b31465b70869bae98836e5949494949494949494949494949494949494949494949596e8398ae9b86705b46311b000000000000000000000000000000000000000000000c22374c61778ca6b8b09b86715b3929170300000000000000000000000000000000081c304354687d92a5b39e8976614c392916030000000000000000000000000000000000000000000e1926313d4a4e5d656f777e858a8f9397989a9b9b9a9895918b857e766a61574c40302518080000000000000000000000000003172939464b505050505050504b3f2f1c0800000000000000000000000000081b2e3f4b4f5050505050504c473b2a1804000000000000000000000000000000030a202020202020201b191309000000000000000000070d0f20202020202018160f06000000000000000000070c0e1f2020202020201c100e08000000000000000000000000000000000000000000090f111e20202020201f0d0b050000000000000000000212202b323435353535353535353535353535353535353535353535353535353535353535353534312a1f11010000000000000000000000000000000000000000000000000000000000061727353f424a4a4a4a4a4a352b1e0e00000000000000000000172a3d4d5a5e6060606060606060606060606060606060606060606060604f4b3f2e1b080000000000000000000000000000000000001b31465b70869bae98836e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e6e8398ae9b86705b46311b000000000000000000000000000000000000000000000a1f33475873889db3b49e89745746331e0a00000000000000000000000000000000011426364b6074879db2a8957f6a5746321e0a0000000000000000000000000000000000000000000009141d2d363f4b4f59626970767a7e81838486858483807c77706961584b46392f1c13080000000000000000000000000000000b1b2933363b3b3b3b3b3b3b372f211100000000000000000000000000000010212e373a3b3b3b3b3b3b37342a1d0c0000000000000000000000000000000b161e35353535353535302e261a0c00000000000002101b22243535353535352d2a231709000000000000010f1a2124343535353535353125221b1002000000000000000000000000000000000004121d2427343535353535352220180d00000000000000000e20303d46494a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49463d2f1f0000000000000000000000000000000000000000000000000000000000000f233545525760606060605e483c2b19050000000000000000001c31465a6b74757575757575757575757575757575757575757575757575655d4b37220e0000000000000000000000000000000000001b31465b70869bae988373737373737373737373737373737373737373737373737373738398ae9b86705b46311b0000000000000000000000000000000000000000000004182a3a5b71869bb0b9a88b76614c36210c0000000000000000000000000000000000081d314455687e93a5b39e8975614b3828160300000000000000000000000000000000000000000000010f1a212e373b474c54566064696c6e6f70706f6d6a676159534c473a33291b120000000000000000000000000000000000000b171e2126262626262625231c110300000000000000000000000000000003101b2225262626262626221f180c0000000000000000000000000000000b1b29324a4a4a4a4a4a4a4642382a1a09000000000010202d363a4a4a4a4a4a4a423f3527170600000000000f1f2d36394a4a4a4a4a4a4a473a372e21100000000000000000000000000000000000122230393c494a4a4a4a4a4a37342b1d0d00000000000003172b3d4e5a5f6060606060606060606060606060606060606060606060606060606060606060605e5a4d3d1c0c0000000000000000000000000000000000000000000000000000000001152a3f52636d7575757575705a4835200b0000000000000000001f34495e74898a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7b654f3a25100000000000000000000000000000000000001b31465b70869bb09f8b88898989898989898989898989898989898989898989898989888b9fb09b86705b46311b0000000000000000000000000000000000000000000000192e44596e8399aec6a28d78634d38230e0000000000000000000000000000000000011527374b6074879db2a7947f695645321e0a00000000000000000000000000000000000000000000000007101b222a343738454b4f5457585a5b5b5a5855514c473a3733291e170b0000000000000000000000000000000000000000030a0c101010101010100e0800000000000000000000000000000000000000080e101010101010100c0b0400000000000000000000000000000003162939465e6060606060605b554838261300000000071b2d3e4a4f60606060606058524535230f00000000071a2d3d4a4e5f60606060605f5c4f4b3f2e1e0e0000000000000000000000000000000c1c30404d515e60606060605f4c483b2b18050000000000081d32465a6c74757575757575757575757575757575757575757575757575757575757575757575746b5a3a29170400000000000000000000000000000000000000000000000000000002182d42576d818a8a8a8a8a78624d38220d0000000000000000001c31475c71869c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f927d67523d27120000000000000000000000000000000000001b31465b70869bb0a99f9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9fa9b09b86705b46311b0000000000000000000000000000000000000000000001172c41566c8196abbaa48f7a654f3a2510000000000000000000000000000000000000091d314556697e93a6b39e8875604b3827150200000000000000000000000000000000000000000000000000080d181f222832363a3e42434546464543403c37342a211f170c03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e32465770757575757575706755422e0a000000000d22364a5c647575757575756d63523f2a16010000000c21364a5b637475757575757571655d4b3c2c1909000000000000000000000000000417293a4d5e667375757575757462594834200b00000000000a1f34495f748a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89745846331f0a00000000000000000000000000000000000000000000000000000000152a40556a7f959f9f9f8f7a65503a2510000000000000000000192f44596e8499aeb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5aa947f6a553f2a150000000000000000000000000000000000001b31465b70859babababababababababababababababababababababababababababababababab9b86705b46311b000000000000000000000000000000000000000000000014293f54697e94a9bca6917c67513c2712000000000000000000000000000000000000021527384b6075889db3a6937e695645311d09000000000000000000000000000000000000000000000000000000050b0d161e2125292c2e2f31302f2e2b27221f180c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e121416161614110e0c0600000000000000000000000000000000000000000c21364b61768a8a8a8a8a8a85705b382815020000000f243a4f647a8a8a8a8a8a8a816d58422d18000000000e24394e63798b8a8a8a8a8a8a867b655a49372715010000000000000000000000000a1f334658667c898a8a8a8a8a8b77624c37220d0000000000071c32475c71869c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa78b76614c36210c0000000000000000000000000000000000000000000000000000000012283d52677d92a7b5a7927d68523d2813000000000000000000172c41566c8196a0a0a0a0a0a0a0a0acb0bdcdc4b4a7a2a0a0a0a0a0a097826c57422d170000000000000000000000000000000000001b31465b70859696969696969696969696969696969696969696969696969696969696969696969685705b46311b000000000000000000000000000000000000000000000013283d53687d92a8bda8937d68533e2813000000000000000000000000000000000000000a1e324556697e94a6b29d8874604b37271501000000000000000000000000000000000000000000000000000000000003090b0f1417191a1b1b1a1815120c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b141c2023272a2b2c2b292723211a100e0800000000000000000000000000000000000a1e32465773899e9f9f9f9d88735645321d090000000d22374c62778ca99f9f9f9a856f5a362513000000000c21364a5b687e93a09f9fab9f9c8a78635544311d110000000000000000000000021528384c6176899ea79f9faa97816c594834200b000000000003182d43586d8298abbcb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5c5a38e79644e39240f0000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8aa957f6a55402a1500000000000000000014293f54697f8b8b8b8b8b8b8b8b8b969fb0c4bba7968d8b8b8b8b8b8b8b846f5a452f1a00000000000000000000000000000000000014293e54697e818181818181818181818181818181818181818181818181818181818181818181817e69543e2914000000000000000000000000000000000000000000000012273d52677c92a7bca9937e69543e291400000000000000000000000000000000000000021628384b6075889eb3a6937e685544311d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c20263035393c3f4041403f3c38352c25231c1107000000000000000000000000000000031629395c71869bb1b5b59f8a75604b36200b0000000b20354a6075899fb4b5b29c87725443301c07000000071a2d3d4e606e8398a5b7bcb4a89b8573604b3f2e1c0c00000000000000000000091d3245566a7f94a7b8c5b49f8b78624d3b2b18050000000000000f253a4f647a8d9fb5c1d2cad5c5b8b3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a6917c66513c2711000000000000000000000000000000000000000000000000000000000d22384d62778daabbad97826d58422d180000000000000000000b20354b60737676767676767676768196acc1b7a28d787676767676767676604b36210b00000000000000000000000000000000000012273b4f61696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69614f3b2712000000000000000000000000000000000000000000000011273c51667c91a6bba9947f6a543f2a1500000000000000000000000000000000000000000a1e3245576a7f94a7b29d8774604b37261401000000000000000001080b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b070000000000000000060c0e1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b0b08010000000000000000000000000000000000000000000008131c26303536434b4e525455565554514e493d3a372e221b10040000000000000000000000000000192e44596e8399aec3bcab8d78634d38230e000000071c30435472879cb2c7b49f8a75604a35200b000000000f1f31424c6176879daabbc6b5a395806b5d4b3a2917040000000000000000001325364b6075889db3c5bcab97826d5a48351d0d000000000000000d22374b5c6c8196a3b5c6d6ccb8a79e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c937e69543e2914000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4af9a85705a372614010000000000000000081d314455606161616161616161697e93a9beb9a38e7964616161616161605645321e090000000000000000000000000000000000000c1f32424f5456565656565656565656565656565656565656565656565656565656565656565656544f42321f0c000000000000000000000000000000000000000000000011263b50667b90a5bbaa957f6a55402a150000000000000000000000000000000000000000031628394b6176899eb3a5927d685544311d080000000000000009141d20202020202020202020202020202020202020202020202020201c130800000000010f1a212331313131313131313131313131313131201c140800000000000000000000000000000000000000000e18253036434b5054606367696b6b6b6966635b57504b3f362e1f170c00000000000000000000000001172c41566c8196abc1c9a5907a65503b2510000000001325365a6f859aafc4baa98c77624c37220d0000000001141f334658647a8b9fb4bfc1b49f8c7b655847331f130000000000000000071c304354687d92a6b7cab49f8c79634e3c2b190000000000000000081b2e3e4b6074859ba8b9ccc8b39e898687878787878787878787878787878787878787878787867f6a543f2a1500000000000000000000000000000000000000000000000000000000081d31445572879db2b29d87725544311d08000000000000000001152737444b4b4b4b4b4b4b4b51667b91a6bbbba6917c66514b4b4b4b4b4b4538281603000000000000000000000000000000000000021424323b3e414141414141414141414141414141414141414141414141414141414141414141413e3b32241402000000000000000000000000000000000000000000000010253a50657a8fa5baab95806b56402b160000000000000000000000000000000000000000000a1e3346576a7f95a8b29c8773604b362513000000000000091926313535353535353535353535353535353535353535353535353535302518080000000f1f2c3539464646464646464646464646464646463530261808000000000000000000000000000000000004121e2c36434a5460666d74797c7f8081807e7c78736d655d4f4a3e33291c0e00000000000000000000000014293f54697e94a9bebda8927d68533d281300000000182d42586d8297adc2c7a48f79644f3a240f00000000000417293a4b5c697f94a1b3c4bcab9d8776614c41311e0e000000000000000b20354a6073869cb1c4bfad98836e5b49351e0e000000000000000000101d3145566278899eb3bdc7b29c877672727272727272727272727272727272727272727272726a614f3c271200000000000000000000000000000809090909090909090909090909011426375a70859aafb49f8a75604b35200b0600000000000000000919273135363636363636394e64798ea3c6bea9937e69543e363636363632281a0a000000000000000000000000000000000000000006141f27292c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c29271f140600000000000000000000000000000000000000000000000011263b50667b90a5bbab96806b56412b16000000000000000000000000000000000000000000031729394c6176899eb3a4927d675443301c070000000001142637444b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a433625130000061a2c3d494e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b4b43362614010000000000000000000000000000000513222f3c49546067737b82888e919495969594918d88827b70645c4c463a2c1e10020000000000000000000011273c51667c91a6bbbfaa95806a55402b1500000000152b40556a8095aabfbca6917c67513c27120000000000000b1b2e3e4a60728399a6b7c9b7a598836e604e3c2c19090000000000071b2e3e51667c91a4b6c7b3a18e79644e3d2c1a0000000000000000000002152738495a677d919fb1c2b6a598826e605c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c544f4332200c00000000000000000000010a10121e1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f2d42586d8297adbbaa8d77624d38221f1b0c0a0400000000000009151d20212121212121374c61768ca8b9c0ab96816b56412c212121211e160a00000000000000000000000000000000000000000000020c12141717171717171717171717171717171717171717171717171717171717171717171714120c020000000000000000000000000000000000000000000000000012273c51677c91a6bcaa95806a55402b15000000000000000000000000000000000000000000000b1f3346586b8095a8b19c8673604a35201200000000081d31445560606060606060606060606060606060606060606060606060605443301c07000c2135495b6371717171717171717171717171717170605443301c08000000000000000000000000000003132330404c5b63727d8790989ea7a7a9aaabaaa9a6a69d978f857a6e6158493c2e2010000000000000000000000f24394f64798ea4c6c2ad97826d58422d180000000013283d53687d92a8bdbea9947e69543f291400000000000000101c3043546177889dabbcc3b2a0927d685b4937271502000000000d22374b5c70859ab0c2c0ae99836e5c4a361f0f00000000000000000000000a1a2c3c4d5f6c8197a3b5c3b2a0937e685b4a394747474747474747474747474747474747473f3c3225150300000000000000000005131e2528333434343434343434343434343434343440556a8095aac8a58f7a65503a343430211f170c00000000000001080b0c0c0c0c0c1f33475874899eb3c3ae99836e59442e190c0c0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdaa947f6a553f2a15000000000000000000000000000000000000000000000417293a4c61778a9eb4a4917c6651402f1c090000000b20354b607575757575757575757575757575757575757575757575757572604a35200b000e23394e63798586868686868686868686868686868573604b35200b0000000000000000000000000000112130414d5e667985929da5adb3b8c5bec0bebebec4b8b3aca29a8f8376635a4b3e2e1e0e0000000000000000000c22374c61778ca8b9c5af9a85705a3626140100000010263b50657b90a5bac1ab96816c56412c1701000000000000001325364759657b8d9fb4c0beb49e8a79635544311d1100000006192c3c4f647a8fa2b4c7b4a28f7a644f3d2d1a010000000000000000000000000e1e30414b6074859ba8b9beb49f8a796357463232323232323232323232323232323232322a27201507000000000000000000011323313a3d48494949494949494949494949494949494952687d92a7bca7927d67524949494537332a1c0c0000000000000000000000000417293a5c71869cb1c6b09b86715b3929160300000000000000000000030d13151f1f1f1f1f1f0d0b05000000000000000000000000000000000000000000000000000000000000000000000001080b12100a01000000000000000000000000000000000000000000000000000000000014293e53697e93a8bea9937e69543e291400000000000000000000000000000000000000000000000c1f3347586b8096a9b09b85715e4c3824110000001d33485d72888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a806a55402b15000d22374c62778c9b9b9b9b9b9b9b9b9b9b9b9b9b9b8d77624d38220d00000000000000000000000000081c2f3f4d5f677c8a9ba3b2b6c3c7bab4afaba9a9aaadb2b7c0b4afa0988678645c4b3c2c1a0a00000000000000000a1f33475874899eb4c7b29d87725443301c080000000e23384e63788da3c5c3ae99836e59442e19000000000000000008182a3a4b5d6a8095a2b4c5b9a89b8574604b3f2e1c0c00000c2035495a6e8398aec0c0af9a846f5c4b371f0f0000000000000000000000000000121e32455663798a9eb4bdbaa99c8675614b41311f1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d15120c03000000000000000000000a1e31414d525d5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e657a90a5baaa957f6a5e5e5e5e5b4c473a2a17040000000000000000000000001a2f44596f8499aec4b39e89735746321e0a000000000000000000071520282a3434343434342220190d00000000000000000000000000000000000000000000000000000000000000000009151d2028251e130100000000000000000000000000000000000000000000000000000000142a3f54697f94a9bca7927d67523d2812000000000000000000000000000000000000000000000004182a3a4c62778a9fb4a3907b66513f2f1c0800001b30455b70859aa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a097826d58422d18000b1f34475974899fb0b0b0b0b0b0b0b0b0b0b0b0a48f7a654f3a2510000000000000000000000000000e23384b5d677d8c9ea8b5c1c4b7b3a99f9a96949495989da6aeb3beb2a49c897a645b49382715020000000000000004182a3a5c71879cb1c6b49f8a75604b35200b0000000b21364b60768ba7b8c6b09b86715b3828160200000000000000000c1c2e3f4b6073849aa7b8c6b5a395806b5d4b3a29170404182a3a4d63788c9fb4cab4a2907b65503e2e1b01000000000000000000000000000002162838495b677d929fb1c2b6a497826d5f4e3d2c1a0a00070707070707070707070707000000000000000000000000000010253a4d5f677374747474747474747474747474747474747474788da2b7ad9782747474747470615847331f0a000000000000000000000002172c41576c8196acc1b8a78b76614b36210c0000000000000000031525333c4049494949494937342b1d0d0000000000000000000000000000000000000000000000000000000000000009192731353d39301c1408000000000000000000000000000000000000000000000000000001172c41566c8196abbba5907b66503b26110000000000000000000000000000000000000000000000000c1f3448596c8196a9b09b85705d4b3823100000182e43586d8298a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89a85705a45301b0005182a3b5c72879cb0b0b0b0b0b0b0b0b0b0b0b0a7927d67523d28120000000000000000000000000010253b50657b8b9faab9c6beb1a69d938a84807f7e8082888e99a1b4b9b6a79e8979635645311d0d00000000000000001a2f445a6f8499afc4bbaa8c77624d37220d000000091e32455673889eb3c8b39e88735645321e09000000000000000000111d3144556277899eabbcc1b49f8c7b655847331f130a1f3447596c8197abbcc1b09b85705d4b372010000000000000000000000000000000000a1a2c3d4d5f6d8297a4b5c2b1a0927d685b4938281603000000000000000000000000000000000000000000000000000215273752677d8889898989898989898989898989898989898989899eb3c9b49f8b89898989898476614c37210c000000000000000000000000142a3f54697f94a9bec5a38e78634e39230e00000000000000000d20334350555e5e5e5e5e5e4d483b2b1905000000000000000000000000000000000000000000000000000000000008182737444b524d41302618080000000000000000000000000000000000000000000000000004192f44596e8499aec6a38e79644e39240f00000000000000000000000000000000000000000000000005182a3b4d62788b9fb4a3907b65503f2e1b0800162b40566b8093939393939393939393939393939393939393939393939387725d48321d00001a2f455a6f849a9b9b9b9b9b9b9b9b9b9b9b9b9b957f6a55402a150000000000000000000000000012273c51677c919fb1c2bbb4a097887e766f6b69696b6d737a83919ea8b9b8a79b8574604b3b2b180500000000000002172d42576c8297acc1c8a48f7a654f3a2510000000031628385b71869bb0c6b8a68b76604b36210b000000000000000000011426374859667c8d9fb5c1bcab9d8776614c42311f1628394c61778a9fb4c9b5a3907b66513f2e1c0200000000000000000000000000000000000e1f30414b6075869ca8babeb49e8a79635645321e1300000000000000000000000000000000000000000000000000081d31445573889d9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9e9ea8b9ccbbaa9f9e9e9e9e9e937e69533e291400000000000000000000000012273c51677c91a6bcbba6907b66513b2611000000000000000013283c50616a74747474747462594834200b0000000000000000000000000000000000000000000000000000000001142636445560675f4b433626140100000000000000000000000000000000000000000000000004172a3a5c71869cb1b9a88c76614c37210c000000000000000000000000000000000000000000000000000d203448596c8196a3af9a84705d4b37220e000e24394e63797e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d68533d28130000152a40556a7f8686868686868686868686868686867f6a553f2a15000000000000000000000000001024394d5f6c8197a4b5aa9f93827669615756545455585c646e7c8a9ea9bab5a395806a594834200900000000000000152a3f546a7f94a9bfbca7927c67523d271200000000192e44596e8399aec3c4a28d78634d38230e0000000000000000000009192b3b4c5e6b8096a3b5c6b7a698836e604e3d2c1e3245576a8095a9bac2b19b86715e4c38211100000000000000000000000000000000000000131e32455663798a9fb4beb9a89c8675604b41301e0e0000000000000000000000000000000000000000000000000b20364b60748ba6b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b9c6cdc8bbb4b3b3b3b3ab96816c56412c170000000000000000000000000f243a4f64798fa4c6bda8937e68533e29130000000000000000152a40556a7f89898989898978624d37220d00000000000000000000000000000000000000000000000000000000081c30435460737d6d605443301c140200000000000000000000000000000000000000000000000a1f33475874899eb4b49e89745847331f0a0000000000000000000000000000000000000000000000000005192b3b4b607585949a9b8f7a654f3a2510000c21364a5b6368686868686868686868686868686868686868686868686868604e3a2611000013283c50616a7171717171717171717171717171716a61503c2813000000000000000000000000000a1d30414b6075869ca69e8c7e6d61584b46393f3f403e4a4f5e667b8b9fb4c1b49f8a77624d3727150200000000000012273d52677c92a7bcbfa9947f6a543f2a1500000001172c41566c8196abc1baa5907a65503b251000000000000000000000000d1d2f404b6074859ba8b9c4b2a0927d685b493727374b6075889eb3c7b6a4917c6751402f1c030000000000000000000000000000000000000003162838495b687d92a0b2c2b5a497816c5f4d3c2c1a0a00000000000000000000000000000000000000000000000d22374d62778ca2c0c9c7bab4a7a5a5a5a5a5a5a5a5a5a5a5a5a5a5abb0bccdbcb0aba5a5a5a599836e59442e190000000000000000000000000c22374c61778ca8bac0ab95806b56402b16010000000000000013283e53687d939e9e9e9e8f7a654f3a2510000000000000000000000000000000000000000000000000000000000b20354b607383928172604b4232201000000000000000000000000000000000000000000000000c21374c61778ca8b9b19b86715c3a2a170400000000000000000000000000000000000000000000000000000d1e32455760757f848686806b56412c1600071a2d3d4a4e535353535353535353535353535353535353535353535353534e42311e0b00000d20334350555b5b5b5b5b5b5b5b5b5b5b5b5b5b5b55504333200d0000000000000000000000000001121e32455663798891897b68604c473a33292a292b2d36404d5c687e93a4b6baa895806b5544311d0800000000000010253a4f657a8fa4c8c1ac97826c57422d170000000014293f54697e94a9bebda7927d68523d2813000000000000000000000000121d3144556278899eb3bdbfb49e8a79635544314455697e93a7b8c3b19c8673604b3520120000000000000000000000000000000000000000000a1a2c3d4e606d8298a4b6c2b19f917d675a4938281502000000000000000000000000000000000000000000000e24394e63798ea2b3c3baa99f929090909090909090909090909090969eb0c3b09e95909090909085715b46311c0000000000000000000000000b1f34475974899fb4c3ad98836e58432e19000000000000000011263b50667b90a5b3b3a7927c67523d2712000000000000000000000000000000000000000000000000000000000f24394e64798e9f96816c614f3e2d1909000000000000000000000000000000000000000000000f243a4f647a8fa4c6ad98836d58432e1800000000000000000000000000000000000000000000000000000003162839455660696f71716b62513d291400000f1f2d36393e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3a312413020000031525333c404646464646464646464646464646463f3c33251503000000000000000000000000000003162838495b63767c77655d4e4233291e171414161b22303e4b6073879cb2c6b39e8974604b36200b0000000000000d22374d62778caabbc4af99846f5a3726140100000012273c51677c91a6bcbfaa957f6a55402a1500000000000000000000000002152737495a677d919fb1c2b9a89b8574604b3f4b6074879db2c5b6a5927d675443301c08000000000000000000000000000000000000000000000f1f31424b6175869ca9babdb49e8a78635645321d12000000000000000000000000000000000000000000000b20354b6073849aa5b6b49f8a7d7b7b7b7b7b7b7b7b7b7b7b7b7b7b8096abc0ab95807b7b7b7b7b7a654f3a251000000000000000000000000004182a3b5c72879cb1c5b09b85705b38281502000000000000000e23394e63788ea3c5bfaa947f6a553f2a15000000000000000000000000000000000000000000000000000000000b20354b6073849a9f937e695c4a3726140100000000000000000000000000000000000000000014293e53697e93a8c9a9947f6a543f2a15000000000000000000000000000000000000000000000000000000000a1b2838454b545a5c5c56514434210e0000010f1a212429292929292929292929292929292929292929292929292928261e130600000000071520282a3131313131313131313131313131312a28201507000000000000000000000000000000000a1a2c3d4958616762594c3f311f170c0300000007121d314455697e93a9c6b8a7907b66513b26110000000000000b20354b60758a9fb4c6b19c87715544311d080000000f243a4f64798fa4c7c2ac97826d57422d180200000000000000000000000009192c3c4d5f6c8197a4b5c6b5a395806b5d4b51677c91a5b6c4b29d8774604b362614010000000000000000000000000000000000000000000001131e32465763798b9fb4beb9a89b8574604b40301e0e000000000000000000000000000000000000000000081d3144556176879da8b9a99a8474656565656565656565656565667b90a6bba9947f6965656565655d4b37220e000000000000000000000000001a2f445a6f8499afc4b39d88735645321d09000000000000000b21364b60768ba7b8c1ac97826c57422d1700000000000000000000000000000000000000000000000000000000081c3043546176879d9f8b7a645544311d0900000000000000000000000000000000000000000417293a586d8298adbcab907b66503b261100000000000000000000000000000000000000000000000000000000000a1a2832363f454646413d3426160400000000070c0e13131313131313131313131313131313131313131313131313110b02000000000000030d13151c1c1c1c1c1c1c1c1c1c1c1c1c1c1c15130d030000000000000000000000000000000000000f1f2c3a474c524d483b2f211404000000000000011426374e63788da8b9c5ab96816c56412c17000000000000081c30435472879db2c7b49f8974604b35200f0000000d22374c62778ca9bac4af9a846f5a452f1a00000000000000000000000000000e1e30414b6075869ca8bac1b49f8c7b65585d70859bb0c3b7a6937e685544311808000000000000000000000000000000000000000000000000031628394a5b687e93a0b2c3b5a396816c5e4d3c2b1909000000000000000000000000000000000000000001142637475863798a9eabb4a296806b5f5050505050505050505063788ea3c5ac97816c575050504f4b3f2e1b0800000000000000000000000002172d42576c8297acc1b59f8a75604b36200b00000000000000091e32455773889eb3c4af9a846f5a36251300000000000000000000000000000000000000000000000000000000011426364758647a8b9f9c8673604b37271501000000000000000000000000000000000000000a1f33465872879cb1b59f8b77614c37210c0000000000000000000000000000000000000000000000000000000000000a161e212a2f31312c292116080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1c2a33373c37342b1d11030000000000000000092135495b74899eb4c5b09b86705b392916030000000000011426365a70859aafc5baa8917c66513d2d1a0700000b20354a60758a9fb4c7b19c87725c3a2a18040000000000000000000000000000121e32455663798a9fb4bebcab9d887661657a8fa3b5c5b29d8874604b37271500000000000000000000000000000000000000000000000000000b1b2d3d4e606e8298a5b6c1b09f917c665a4837271502000000000000000000000000000000000000000009192a3a4a5b667c8d9fb5b09e927d675c4a3a3b3b3b3b3b3b4b61768ba7b8af99846f5a443b3b3a372e21100000000000000000000000000000152a3f546a7f94a9bfbcab8d78634d38230e00000000000000031628395b71869bb0c6b19c87725443301c0c0e11141412100b09020000000000000000000000000000000000000008182a3a4a5c6a7f95a4937e695544311d08000000000000000000000000000000000000000c21364c61768b9fb5b19c87725847331f0a0000000000000000000000000000000000000000000000000000000000000003090b141a1c1c16140e0400000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f131416161513100d0b050000000000000000000000000003090a0b0b0b0b080000000000000000000000000c171f21272220180d00000000000000000000061a2c3d5d72879db2c7b39e89745746321e0a000000000000182d42586d8297adc2c6af9a846f5b4a3621110000071c30435472879db2c7b49f89745947341f0a000000000000000000000000000003162838495b687e92a0b2c3b7a699836e6f8499aec1b8a6937e6956453119090000000000000000000000000000000000000000000000000000000f1f31424c6176879ca9babdb39e8978625544311d120000000000000000000000000000000000000000000c1c2d3d4d5e6a8095a1b2b49f8a7a645847362626262632465773889eb3b19c87715c3a2a2625221b1002000000000000000000000000000012273d52677c92a7bcc9a5907b65503b26100000000000000000192e44596e8399aec3b49f8975604a352021232729292825201d150a080000000000000000000000000000000000000c1c2d3e4b6074869c9d8774604b35200b0000000000000000000000000000000000000010263b50657b90abbcac97826d573a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000708131c202428292b2b2a2926221f180f0d0700000000000000050b0d181e20202020201d0c0a0400000000000000000000040a0c120d0b05000000000000000000000009182e3e5c71879cb1c6b9a78b76614b36210c000000000000152b40556a8095aabfcab59f8c79634e3f2e1b0a00001325365a70859aafc5baa98c77614c37220c0000000000000000000000000000000a1a2c3d4e606d8298a5b6c4b2a1927e798c9fb5c5b39e8875604b3827150000000000000000000000000000000000000000000000000000000001141e334657647a8b9fb4bfb9a79b8574604b402f1d0d0000000000000000000000000000000000000000000f1f30404a60728399a4b5a89d8776615443301c121628395b71869bb0b49e89745847331f100e080000000000000000000000000000000010253a4f657a8fa4c7bda8927d68533d28130000000000000001162c41566b8196abc0baa98c77624c372c35383c3e3f3d3a363127221b100600000000000000000000000000000001152533404d55687d92a5917c675136251300000000000000000000000000000000000005192b3b566b8095abbbaa927c67523d2712000000000000000000000000000000000000000000000000000000000000000000030a0c11131413100b09030000000000000000060a0b0b0b00000000000000000000000000000000000000000005101b22253035393d3f4041403e3b37342a24221b1008010000000d1920222d33353535353533221f180c00000000000000000000000000000000000000000000000000070f1926364b5c74899eb3c9c5a18c77624c37220d00000000000013283d52687d92a7bdcfbcab99836f5d4b3928160300182d43586d8298adc2c7a48e79644f39240f000000000000000000000000000000000f1f31424b6175879ca9babfb39e898399abbcb9a7947f6a5745321a0a0000000000000000000000000000000000000000000000000000000000031729394a5c697e93a1b2c3b5a396806b5e4c3b2b1909000000000000000000000000000000000000000001121c3043546175869ca7b6a5998372604b40301f192e44596e8399aeb9a88c77614c37220c0000000000000000000000000000000000000d22374d62778ca9babfaa95806a55402b15000000000000000014293e54697e93a9bec7a48f79644f3a3d494e51535452504b4538372e21190e00000000000000000000000000000f1f3343505e6671778c9f98836e5443301c0700000000000000000000000000000000000b2034485971869bb1b49f8b76614c37210c00000000000000000000000000000000000000000000000000000000000000050b161e2126282a2825211e160a07000000060b0d1b1f2020200e0c0600000000000000000000000000000000000d18202d3636434a4e525456565553504c473b3a362e201d1409000e1d2b343743494a4a4a4a4a4837342a1c0c000000000000000000000000000000000000000000050b101b222c374454647a8fa8b9ccbcab8c77614c37220c00000000000010253b50657a90a5c9d9c9b3a18f7b655745321e1402162b41566b8096abc0baa5907b65503b26100000000000000000000000000000000001131e334657647a8b9fb4bfb8a79e99a1b3c6b39e8976614c392816000000000000000000000000000000000000000000000000000000000000000b1b2d3e4f606e8399a5b7c1b59f8d7c6659483727150100000000000000000000000000000000000000000013253646576278899eaab3a195806b5e4d3d2c1b2c41566b8196abc6a48e79644f39240f0000000000000000000000000000000000000b20354b60758a9fb4c2ad98826d58432d18000000000000000011273c51667c91a6bbbca6917c67514b545b63666969676560564f4b3f352c1e13050000000000000000000000061a2c3d50626a7c868b9fab9e8974604a35200b00000000000000000000000000000000000d22374d62778ca3b5b09a85705847331f0a0000000000000000000000000000000000000000000000000000000000000e19202932363b3e3f3d3b363228221b10050e192023313535353523211a0f010000000000000000000000000003111d2b343e4a4f54606468696b6b6a68656259564f4a3e35312619111e2b3b484d585e5f606060605d4c473a2a1804000000000000000000000000000000000000070d1820222d363d49556073849aafc6cab49f8a75604b35200b0000000000000e23384d63788dabbccfd0bfb29c8775604b42321d15152a3f546a7f94a9bfbca6917c67513c27120000000000000000000000000000000000031729394a5c697e93a1b3c4b8b3aeb3bfb9a895806b5746331b0a0000000000000000000000000000000000000000000000000000000000000000102032424c6176879daabbbcab9e8978625544311d1100000000000000000000000000000000000000000008182939495a657b8c9fb4b09e917c665b493a29293e54697e93a9bca6917c67513c2712000000000000000000000000000000000000081c30435472879db2c5af9a85705a37261401000000000000000f24394e64798ea3c6bea9947f6956606971787c7e7e7d7a756e655d4d493c30231507000000000000000000000c2135495b6a80919c9faab9a78d78634d38230e0000000000000000000000000000000004172a3a54697f94a9bcab947e69543a2a17040000000000000000000000000000000000000000000000000000000005131e2b3539464b50535453504b4538372e1f181e2b3538464a4a4a4a38352c1f0f0000000000000000000000000211212f3b484d5c646d74797d7e80807f7e7b77726c645c524b44372f1f2b3c4859626d73757575757572615947341f0a0000000000000000000000000000000308131c202b34373e4a4f5b63738196a2b3c7c7b29d88725443301c080000000000000b20364b60758a9fb4cadfcab6a597816c614f4231271c2a3f556a7f94aabfbda7927d68523d28130000000000000000000000000000000000000b1b2d3e4f606e8399a6b7cbc8c3c6c9b49e8a77614c39291700000000000000000000000000000000000000000000000000000000000000000002141f334658647a8b9fb4bfb8a79a8473604b402f1d0d0000000000000000000000000000000000000000000b1b2c3c4b5d697e93a0b1b49e8a7963584636253c51667b91a6bba9947e69543f291400000000000000000000000000070c0e0d0c061426365a6f859aafc4b29d88725544311d08000000000000000c21374c61768ca8b9c1ac96816c64747f868d919394928f89837a6f635b4d41332616080000000000000000000e23384e63798c9fb1b4bbc5a5907a65503b2510000000000000000000000000000000000a1f33475871869bb0b49f8b77624d37220d00000000000000000000000000000000000000000000000000000000041323303c484d5761666869686560564f4b3e342a2b3c494d5b5f6060605e493d2c1a06000000000000000000000010202f404c59626f7a82898e929495969593908c87817a716760554c403339485a627882888a8a8a8a8a8777614c37220c00000000000000000000000000000a161e2530353b484c545c646d7984969fb1c0d0c0ac97826c5736261401000000000000091d31455673889db2c8d1c1b4b09f937f69604b4437302b3c566b8196abc0bca6917c67513c271200000000000000000000000000000000000000102032424c6176889db3c8ddd8d6c0ab96816b5847331d0d000000000000000000000000000000000000000000000000000000000000000000000417293a4b5c697f94a1b3c4b4a295806b5e4c3b2b18080000000000000000000000000000000000000000000e1e2f3f4f616d8297a3b4a89c867661544330394e64798ea3c5ac96816c57412c170200000000000000000000010f1a2124232019182d42586d8297adc2b49f8a75604b35200b000000000000000a1f33475874899eb4c4ae99846f7b86949ca4a6a8a9a7a89e988f8479675f5044332616060000000000000000152a3f546a7f94abbcc9cec7a6917b66513c2611000000000000000000000000000000000c21374c61768ca3b5af9a846f594834200b00000000000000000000000000000000000000000000000000000000122230414d5a626e767b7d7f7d7b756e645c4c473b35495a627074757575705b4935210c000000000000000000000d1d2e3f4c5e6577848e989ea7a7a9ababaaa8a5a49c968f867d73665e4c474557627888989e9faa9f9f8b7a645947341f0a00000000000000000000000001121a283236434a505962697179828b9aa2b1bdcec5b3a2907b65503b251000000000000000021527385b70859bb0c5c8b4a39ba39f8d7e6b60554a433b485a6f849aafc4c4a5907a65503b25100000000000000000000000000000000000000004172a3a4c6177899eb4c9cdc9cdbfaa95806a5d4b3b2a1909000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4a60728399a6b7c0b59f8d7b65594836261401000000000000000000000000000000000000000000112132424b6074859ba6b6a4998372604a40364c61768ba7b9ae99846f59442f1a0000000000000000000009171f2d363938352c1d2a40556a7f95aabfbbaa8d77624d38220d0000000000000004172a3a5c71879cb1c6b19c867b8b9ca4b1b4b2b1b3b9b9b4aea19a8a7d6b6251443324130200000000000000172c41576c8196acc7d6cebaa98f7a65503a2510000000000000000000000000000000000b21364b6075899da5a6927d67523b2b18050000000000000000000000000000000000000000000000000000000d1d30404d5f6778838a90939492908a837a6e62594b3f4d6278858a8a8a8a79634e38230e00000000000000000005182b3b4b5d657c8999a1adb3b8c5bab4b2b1b2b4b6b1aba49c92867b6e61584b6075869ca6b3b4b1a0937e685c4a3a2a1804000000000000000000000008141c3038454b5460666f777f868e979faab4c0cec6b8a79a846f5d4b38230e0000000000000000192e43586e8398adc3c5b09b859ba39f938074666054575962788b9fb4cab7a68d78634d38230e000000000000000000000000000000000000000a1f3347586b8095a8b9c6b9b4b9c6b49f8d7b6559483726140100000000000000000000000000000000000000000000000000000000000000000000101c3043546176879daabbbcab9e8877625443301c1100000000000000000000000000000000000000000003141d3245566277889da9b3a1957f6a5e4c3c465874899eb3b19c86715c3a2917040000000000000000031727343d4a4e4d493c32283d52687d92a7bdc8a58f7a65503a251000000000000000001a2f44596f8499aec4b49f8b8a9fa9aca99f9d9c9ea7acb4bbb3a89e92806b62514231201000000000000000152a3f546a7f94a9b9c6c1b49f8a76614c36210c00000000000000000000000000000000091e324557657b87949d8874604b36200d00000000000000000000000000000000000000000000000000000005182b3b4d5f677d8a989fa9a8a9a8a99f988f8377655d4e566c81969faa9f907b66503b26110000000000000000000b20344859647b8b9ea7b3bfbcb5aea99f9d9b9c9fa9a9b1b5b1a49c90827664606d8298a4b5c4b5a397826d604e3e2d1c0c000000000000000000000008182630404c566069737b848b949ca4adb4bbc8cec3b7a89e8979634e3f2f1c080000000000000001162b40566b8095abc0bca6917d859ba69e95867b746e6c6e77859baabbc8b39d88735a4935200c00000000000000000000000000000000000004172a3a4c61768a9eb4c6b9a89ea8b9bcab9d8877625544311d1100000000000000000000000000000000000000000000000000000000000000000000001325364758657b8c9fb4bfb8a69a8472604b3f2e1d0c000000000000000000000000000000000000000000021528384859647a8b9fb4b59f8d7c665b493a5c71869cb1b49e89745847331f0a000000000000000010213445525b63625a4b45383a50657a8fa5c8bca7927d67523d28120000000000000002172c42576c8197acc1baa99f9fa99f978f8a8787898e969faab5b9b49e95806b604e3e2e1a0a0000000000000d23384d62788b9ea8aeada397826d5746331e0a00000000000000000000000000000000031628394b5d65757f897f6a5645311d090000000000000000000000000000000000000000000000000000000b20344859677d8c9fa8b4bac7bec7bab4aea098897b685f596e8399aebba8937d68533e28130000000000000000061a2c3d4d6277899ea9b8c5b9ab9f99908a878687898e949ba3b1b6b1a098877a6b7e93a0b2c2b8a79b8574604b42312010000000000000000000000001142636434b5e66757e8790999faab1b5c2caccc7bab4a59d8a7b655b4935211100000000000000000013293e53687e93a8bdbea8937e78879da6a49c90878381848a9ba3b4c8bfad98836d583c2c19060000000000000000000000000000000000000a1f3347586b8095a8b9bbaa9e899ea9bab8a69a8473604b402f1d0d0000000000000000000000000000000000000000000000000000000000000000000008182a3a4b5d6a7f94a1b3c4b4a2957f6a5d4b3b2a18080000000000000000000000000000000000000000000a1a2b3b4b5c687d929fb0ab9e8979635746596e8499aeb9a88c76614c37210c0000000000000009192e3f52636c79786d6056473a4d62788daabbbfaa947f6a553f2a150000000000000000152a3f546a7f94a9bfc7bab4a49c8c817a7572717479818b9ba3b3bcaf9e937e685c4b3828150200000000000b2035485a677d8a959998928576614c3929170300000000000000000000000000000000000a1b2e3f4b56606a7776614c38271502000000000000000000000000000000000000000000000000000004172a3a4c6277899eaabac6beb2aea4ab9fababa79e8c7d685f6d8297acc0ab95806b56402b1601000000000000000c2135495b6d8297a7b8c7b9a89e8d837b7572717275797e86909ca4b4b2a69d8b808b9fb4bebcab9e89786256453224140200000000000000000000000a1c304354606b7c87939ca4aeb4bbc8c9c9c5b8b3a99f96877a655d4b3d2c1a0300000000000000000011263b51667b90a6bbc0ab96806b79889ca4b1a59d9896999fa8b4c1c3b3a18f7a644f3a250f00000000000000000000000000000000000004172a3a4c6176899eb4c6b49f8b7a8b9fb4bfb4a295806b5e4c3b2b1909000000000000000000000000000000000000000000000000000000000000000000000c1c2e3f4a6072849aa6b7c0b49f8d7b655947362513000000000000000000000000000000000000000000000d1d2e3e4e5f6c8196a2b3a79c8675614b576c8196acc6a38e79644e39240f000000000000011426374b5d6c818e8d82746158494b60758a9fb4c2ac97826d57422d18000000000000000012273c52677c91a7bccab6a49c86796c6560555c5c646c798599a1b3bcb49f8b7a645645321d0d000000000006192b3c4d5f67788083837d74615846331b0b0000000000000000000000000000000000000011212e38454b5962615847331a0a0000000000000000000000000000000000000000000000000000000a1f3347586d8298a8b9c8bbafa0988f8b8a8e969fa99f8d7d676b8095aac0ad98836d58432e1800000000000000000e23384e63788b9fb4c5bcab9e8a7c6e6560565c54606369717b86949fa9b7a99f959fa9babfb49f8d7c665a483828160600000000000000000000000a1a30414b607280919da5b2b6c3cacdc9c2b5b1a79e958b8075645c4b3f2e1f0e000000000000000000000e23394e63788ea3c5c3ad98836e63788697a0b0b2adacaeb4bac6c0b4a599836f5c4b37220d0000000000000000000000000000000000000a1f3347586b8095a8b9bcab97826d7e93a1b3c0b59f8d7b6559483727150100000000000000000000000000000000000000000000000000000000000000000000101c3043546177889dabbcbcab9d8877615443301c1000000000000000000000000000000000000000000000102031414b6073849aa5b5a498836e6154697e94a9bba6917c66513c2711000000000000081d314455657b8f9fa0978476635b4b5572889db2c4af9a846f5a36251300000000000000000f253a4f647a8fa4c7c7b19c8677635b4f4b443e4a4f5b63758399a3b5baa99c8674604b3b2b190500000000000e1e30414d5a626b6e6d686055463a2917000000000000000000000000000000000000000003111a28323b484c4c473a2a17000000000000000000000000000000000000000000000000000000000c21374c61768a9fb4c6c0af9d95837a757579818b9ca49f8c7b697e93a9beb09b85705b3827150200000000000000132536556a7f94aabbcab59f8d7c665e504b4538434b4e545e65747f8b9ea6b6b4aab4bac3b3a1957f6a5e4c3c2b1a0a0000000000000000000000021528384d5f6b80969eb2b7c3cacbc6b9b4aca49c938980776b61574a3e2e211100000000000000000000000c21364b61768ba7b8c5b09b86705a627682909ba3abb0b4bab5b3aea29a8776614c3e2e1b0800000000000000000000000000000000000417293a4c6176899eb4c6b59f8c79636f8399a6b8bcab9e8877625544311d1200000000000000000000000000000000000000000000000000000000000000000000001325364759657b8d9fb4c0b7a69a8472604a3f2e1c0c00000000000000000000000000000000000000000002131d3144556176879da8b2a0947f6a5e677c91a6bca9937e69543e29140000000000000b20354b6074869cb1b1a29a8779655d5b70859ab0c5b29c87725443301c07000000000000000d22374d62778ca9bac1ac97816c59493d35312d363d49576175859ba8b9b6a4957f6a594834200c0000000000001223303c484d565958534b4437291c0c000000000000000000000000000000000000000000000a161e2a343737332a1c0c0000000000000000000000000000000000000000000000000000000013283e53687e93a9bac8b4a2957f6e646060646b79869aa29e89787c91a7bcb29d88735645311d09000000000000071c30435470859bb0c8c3ad98826d5e4c40363228303539404c56606a7b889ca4b6c0c9cab6a5998372604a402f1e0e000000000000000000000000091d324556677d919eb0bccacec5b8b3a89e978f867e766b62594b46392d20110300000000000000000000000a1e32465773899eb3c8b39d88735657616d7b858f969b9fa99f9d999184786258473320100000000000000000000000000000000000000a1f3347586b8095a8b9c0ae99836e5b6277889eb3bdb8a69a8473604b402f1e0e0000000000000000000000000000000000000000000000000000000000000000000008182a3b4b5d6a8095a2b4c4b3a1947f6a5d4b3a2a180800000000000000000000000000000000000000000001142637475863798a9eabb49f8d7c6564798fa4c6ab96816c56412c170100000000000e23384d6378899ca5b4b4a59c897b685f6d8298adc2b49f8a75604a35200b000000000000000b20354a60758a9fb4c4ae99846f593b2c201d1b222c39465762788a9eb4c2b49f8b78624d3a2a1804000000000005121d2b34384044433d363127190c000000000000000000000000000000000000000000000000020d181f22211f170c0000000000000000000000000000000000000000000000000000000002152737586e8398adc7c6b09a8570614f4b4b4e5b6375849aa29b857b90a5bab59f8a75604b36200b0000000000000b20354a60748a9fb4c9b7a58e79634e4030201d151c20232f38454b5d6478879cb2c7dcc7b29c8776615443302211000000000000000000000000000b20364b6074879db2bccdcbbdb1a69e9489827a716961574c483b32291b0f01000000000000000000000000031629395c71869bb1c6b59f8a76604b4c5d65707a81868a8b8a88837c73625a483a2a170200000000000000000000000000000000000417293a4c6176899eb3c6b4a28f7a644f59667c909fb1c2b4a295806b5e4c3c2b1909000000000000000000000000000000000000000000000000000000000000000000000c1d2e3f4b6072849aa6b8bfb49f8c7b6558473625130000000000000000000000000000000000000000000009192a3a4a5b667c8d9fb5ab9e897862778ca8b9ae99846e59442f190000000000000c2135495b6379879aa2b1b6a79e8c7d6b6b8095aac0baa98c77624c37220d00000000000000071c30435472879cb2c6b19c87715c3a2a1808070f1b2839495a697e93a5b6baa996816c5847331f0a000000000000000d1920222b2e2e28201d1509000000000000000000000000000000000000000000000000000000050b0d0c0a040000000000000000000000000000000000000000000000000000000000081d31445572879cb1c7baa8907b66514336353d49576175849ba3978297acc2bcab8d78634d38230e0000000000000c21374c61768caabbc7b29d87725b493622120902080b111a273245576378899eb3c9cfbaa5907a655846362513040000000000000000000000000012283d52677d92a5b7cacbbaad9f97887f766c645c534b4639342b1e160b000000000000000000000000000000192e44596e8399aec3bcab8d78634d3f4b505c646c71747675736e666054483c2b1c0c0000000000000000000000000000000000000a1f3347586a8095a8b9c2b09a85705d4b4c5e6c8196a4b5c0b59f8d7c665a483727150200000000000000000000000000000000000000000000000000000000000000000000111c3043546277889eabbcbbaa9d8776615443301c10000000000000000000000000000000000000000000000c1c2d3d4c5e6a8095a1b2a79b857574899eb4b19b86715c39291703000000000006192c3c495b637684979fb4b8aa9f9280737d92a7bdc7a48f7a644f3a250f00000000000000001325365a6f859aafc4b49e89745847331f0a00000b1b2b3c4b6074879cb2c5b49f8a77614c37220f0000000000000000050b0d161918130b08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4c9b49f8975604b3620202c3946576277889d9f8a9fb4cac9a5907a65503b25100000000000000e23384e63788da3c8c4ae99846f593d2c1a0400000000102032424b6075869ca8b9ccd4c2ad98826d5e4c3929170300000000000000000000000003192e43586e8398adc3cebdad9c9381766961584f4a3e36322920180d0300000000000000000000000000000001172c41566c8196abc1c9a5907b65503b373e4a4f565b5761605559514b43362b1e0e0000000000000000000000000000000000000417293a4c6176899eb3c6b5a4907b66513f404b6074869ca9babcab9e8978625544311d1200000000000000000000000000000000000000000000020202020202020202020202011426364859657b8d9fb5c0b7a5998372604a3e2e1c0c000000000000000000000000000000000000000000000f1f30404a60728399a4b5a3988271869bb0b39e89745746331e0a0000000000000e1e2c3d4958617381939fabb9b49e95827b8fa5babca7917c67523c27120000000000000000182d42586d8297adc2b9a88c77614c37220c0000000e1d314455687d92a7b8baa8937e69543d2c1a06000000000000000000000104030000000000000000000000000000000000000000040e14161f1f1f1f1a181108000000000000070c0e0f0f0f0f0f0f0f0f0f0f0f0d0b060000000000000000000000000c22374c61778caabbc6b09b86715645321d0f1b28394759657b8d9f9fabbccfbda8927d68533d28130000000000000d23384d62788da2c6c2ad98826d58432d18000000000c1d2e3e4f606d8298a4b5c6c9bec2b2a0907c665746331e0c000000000000000000000000031629395d72889db2c7c8b19f937e6c61574c463a362e211e160b0500000000000000000000000000000000000014293f54697e94a9bebda8927d68533d282d363a4139464b4b44373c353026180e000000000000000000000000000000000000000a1f3346586a8095a7b9c3b19c8673604a3532455663798b9fb4bfb8a79b8574604b40301e0e000000000000000000000000000000000000050b0d1717171717171717171717171717182b3b4c5e6b8095a2b4c3b3a1947f695c4a3a29170400000000000000000000000000000000000000000001121c3043546175869ca7b2a0937e8297adb9a78b76614c36210c000000000000000f1f2c3a4755606c7e8d9ea8b6afa098869bb1c6bea9947f69543f2a140000000000000000152a40556a7f95aabfc6a48e79644f39240f000000011527374b6075899eb3c6b19b86715b4935210c0000000000000000000000000000000000000000000000000000000000000000081621282b343434342f2c25190b000000010f1a212325252525252525252525252320190e00000000000000000000000d23384d62788da2c8c3ad98836e58382815020b1b2a3b4b5d6d8297a7b8c9d9c0aa95806b55402b160000000000000c21364b61768ba8b9c3ad98836e5836251300000009192a3b4b5c697e93a0b2c2bab4a9aebbb29d8776614c3a29170400000000000000000000000a1e324657748a9fb4c9bbaa97816c604c46393329221b100a03000000000000000000000000000000000000000011273c51667c91a6bbbfaa95806a55402b1b22242c29323636312727201c1408000000000000000000000000000000000000000417293a4c6176899eb3c5b7a5927d6754433028384a5b697e93a1b3c5b4a396816b5e4c3c2b1a0a000000000000000000000000000000000d1820222c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2f404b6073849aa7b8bfb49f8b7a645846331f14020000000000000000000000000000000000000000000013253646576278899eaab49f8c8398adc5a38e79634e39240e00000000000000010f1c2a37444b61697c8a9da5b4b2a39ba3b5c9c1ac97816c57422c17020000000000000013283d52687d92a7bdbca6917c67513c271200000000091e3245566c8197acc7b5a38d78634e38230e00000000000000000000000000000000000000000000000000000000000000041626333d404949494944413729190800000f1f2d36393a3a3a3a3a3a3a3a3a3a3a38352b1e0e000000000000000000000e24394e63798ea3b8c2ac97826d57422d1800000d1d2f3f4c6177899eb3c5d6c2ad98826d58432d180000000000000a1e33465774899eb4c5af9a85705443301c0700011426374759647a8b9fb4bebaa99f949daeb7a695806b5847331f0b00000000000000000000000c21364b61768ba9bacab49f8b77624d4233291f170b0700000000000000000000000000000000000000000000000f24394f64798ea4c6c2ad98826d58432d180d0f17161e21201d15110b080100000000000000000000000000000000000000000a1f3346586a8095a7b9c5b29d8774604b36251a2d3d4a60728399a6b8c1b09e917c665a493827150200000000000000000000000000000d1d2b343741414141414141414141414141414141414144556278899eabbcbbaa9d8776614c423220100000000000000000000000000000000000000000000008182939495a657b8c9fb4aa9f98a0b2bba6917b66513c26110000000000000000000c192731424f5e6679879aa2b1b5b1b5c2d2c4ae99846f59442f1a000000000000000010253b50657a90a5c9bea9947e69543f2914000000000316283850667b90a9bac1a8937e69533e2914000000000000000000000000000000000000000000000000000000000000000e21334451565e5e5e5e5a544737251100071a2d3d4a4e4f4f4f4f4f4f4f4f4f4f4f4d483c2b19060000000000000000000e23384d63788da2b8c1ac97816c57422c17020000111f334758697f94a7b8ccc5b09a85705b37271501000000000003172939596f8499aec7b39e8974604a35200d010f1d3144556177889daabbbeb49f8b7f94a1b3b49e8976614c39291703000000000000000000000c21364b61768baabbc7b19c87725948341e170b04000000000000000000070500000000000000000000000000000c22374c61778ca8b9c5af9a85705a372614010000030a0c0b080200000000000000000000000000000000000000000000000417293a4c6176899eb3c5b8a7937e69554431180f1c3043546277889eb3bdbcb39e8978625645311d120000000000000000000000000005182b3b484d575757575757575757575757575757575757575759667c8d9fb5c8b7a599836e604f3e2d1b0b000000000000000000000000000000000000000000000b1b2c3c4b5d697e93a0b1b4adb2bebea8937e69533e29140000000000000000000009151d32404c5b63768497a0b4bcc9d2dcc6b19c87715c3a2a1704000000000000000d23384d62788dabbcc1ac96816c573e2d1a07000000000b20364b60758a9fb4c3ae99836e593b2a180400000000000000000000000000000000000000000000000000000000000014283d51626b747474746f6554412c18000c21364a5b636464646464646464646464625a4835200b0000000000000000000c22374c61778cabbcc2ad98826d58432d1800000004182a3a4b6176899eb3c9c7b29d88725544311d0800000000000014293e54697e93a9bab9a78f79644f3b2b180f1f30404b6073849aa6b7c2b2a0937e6e8399abb9a895806a5746331e0a000000000000000000000b20354a60758a9fb4c5b09a85705b3b2b18030000000000000000090f111d1b0d0b0600000000000000000000000a1f33475874899eb4c7b29d87725544311d08000000000000000000000000000000000000000000000000000000000000000a1f3346586a7f95a7b9c6b39e8875614b372715001325364859667c909fb1c2b9a79b8574604b41301e0e0000000000000000000000000b20344859626c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c8196aabbc3b2a1937e695c4a39291703000000000000000000000000000000000000000000000e1e2f3f4f616d8297a3b4c4c6cfc0ab96816b56412c1601000000000000000000000214222f3d4a58617482949fabb9c6d4c9b49e89745847331f0a000000000000000b20364b60758a9fb4c6b19b86715c4a36210c00000000091d32455670869bb0c5b39e88735947341f0b000000000000000000000000000000000000000000000000000000000000162b40566b8089898989836f5a442f1a000e23394e63797a7a7a7a7a7a7a7a7a7a7a78624d38230d0000000000000000000b20364b60758a9fb5c3ae99846e59372614010000000c1e3346576a8095abbccab49f8a75604b35200b0000000000000d22374d62778a9fb4c5ac96816c594834201b2c3d4d5e6b8096a2b4c4b5a398826d63798c9fb5b39e8976614b36210d00000000000000000000071c30435472879cb2c6b19c87715645321e0900000000000002121d242632302320190e0000000000000000000004182a3a5c71879cb1c6b49f8a75604b35200b000000000000000000000000000000000000000000000000000000000000031729394c6176899eb3c5baa895806a57463219090008182a3b4c5e6c8197a4b6c5b5a396816c5f4d3c2c1a0a00000000000000000000000d22374d62778181818181818181818181818181818181818181818181818c9fb4cabfb49f8b7a645746331e0c0000000000000000000000000000000000000000000000112132424b6074859ba6b7c7d7c3ae99836e59442e1900000000000000000000000004121f2d3a4756606d7f8d9ea8b7c3cdb9a88c76614c37210c00000000000000081d31445573889db2c8b5a38e79644e3a29170400000002152838576c8197acc1b8a78c77614c37220c00000000000000000000070d0f1415120b09030000000000000000000000172c41566c81969e9e9a85705b45301b001a2f445a6f848f8f8f8f8f8f8f8f8f8f8f826d58432e18030000000000000000091d31455672879db2c6b19c86715544311d08000000031729394d62788b9fb4cabbaa8d78624d38230d0000000000000b203448596d8297a9bab49f8a77624c41312839495b667c919eb0c0b9a79b8575605b6f8499afb8a7937e68533b2b190500000000000000000000132536586e8398adc8b49f8975604b362113040000000009151d2f383b474538352b1e0e000000000000000000001a2f445a6f8499afc4bbaa8d77624d38220d0000000000000000000000000000000000000000000000000000000000000a1e3346576a7f95a7b9c8b49f8a77614c3928160000000d1d2f404b6075869ca9bac1b09f917d675a4938281602000000000000000000000c22374c61778c96969696969696969696969696969696969696969696979faabbcecdbaa99c8775614b3a2a17040000000000000000000000000000000000000000000003141d3245566277889da9bacdc6b09b86715b39281603000000000000000000000000010f1c2a38454b61697c8a9da5b4c1c6a48e79644f39240f00000000000000021527375b70859ab0c5c2ab96816c5846331f0b00000000142a3f54697f94a9bec5a58f7a65503a2510000000000000000002101b22242a2b27211e160a00000000000000000000172c41566c8196abb09a85705b45301b00172c42576c8197a4a4a4a4a4a4a4a4a49a85705b45301b060000000000000000021527385a6f8499afc4b49f8975604b35200b000000000b203448596f849aafc4c8a58f7a65503a251000000000000005182b3b4d63788a9fb4baa998826d5f4e4032465763798a9eb4bcbcab9e8978625650667b90a6b8b09b8570594834200b0000000000000000000013283e53687e93aabbbaa9907b665041311f18110f0f131c2731404c515c5a4d493c2b1909000000000000000002172c42576c8197acc1c8a48f7a654f3a25100000000000000000000000000000000000000000000000000000000000031729394c6176899eb3c5bbaa96816c5847331b0b00000000121e324556647a8b9fb4bfbdb39e8978635645321e13010000000000000000000b1f34475974899facacacacacacacacacacacacacacacacacacacacacacb4bbc8d9d7c7b6a597816c5847331f0a0000000000000000000000000000000000000000000000021528384859647a8b9fb4bdbab39e88735746321e0900000000000000000000000000000c1a2731434f5e667a879ba3a7a7a6917c66513c27110000000000000000182e43586d8398adc2c9b49e8976614c3a29170400000012273c52677c91a7bcbda7927d68523d2813000000000000000a151d2d36393f403c3632281a10020000000000000000172c41566c8196abb09a85705b45301b00152a3f546a7f94a9b9baada8a3a3a3a39c87725d47321d08000000000000000000162b40566b8095abc7baa88e79644e39240f0000000005192b3b52677d92a7bcbda7927d68523d2813000000000000000d2035495a6a7f94a2b4b2a0927d685e4e424b6175869ca8b9bfb59f8d7c665a494b6074889db3b4a38c77624d37220d000000000000000000000c22374c61778b9fb4c7af9a84705f4e40342a262425253037444b5e667270625a49372715020000000000000000152a3f546a7f94a9bfbca7927c67523d271200000000000000000000000000000000000000000000000000000000000a1e3346576a7f94a7b8cab49f8b78624d3a2a180000000000031628384a5c697f94a1b3c5b9a89b8574604b41301f0f00000000000000000004182a3b5c71879cb1bababababababababababababababababababababababababababac3b49f8b77614c37210c0000000000000000000000000000000000000000000000000a1a2b3b4b5c687d929fa5a5a5a78b76614b36210c0000000000000000000000000000000a151d32404c5c64778592929292927e69543e29140000000000000001162b40566b8095abc0ccb9a8957f6a5846331f0f00000011263b51667b90a6bbbea9937e69543e29140000000000000a1a27313e4a4f5455524b45382e20100000000000000000172c41566c8196abb09a85705b45301b0012273c52677c91a7bcad9c928d8d8d8d8d816c56412c170100000000000000000011263b50667b90a9bac6a8937e69533a2a1704000000000f24394f64798ea4c6bfaa957f6a55402a150000000000000006192c3c4b6073849aa4b6b49f8c7c68604c606e8298a4b6c3b3a195806a5e4c3c44556c8197acc1a8937e68533e2913000000000000000000000b1f3447596d8298aabbb4a2927d685e4c473b3b393a36434a55606b7c878578625544311d10000000000000000012273d52677c92a7bcbfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000031729394c6176899eb3c5bead98826d5a48351c0c0000000000000a1a2d3d4a6072849aa7b8c6b5a397816c5f4d3d2c1a060000000000000000001a2f44596f8499a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5aa907b66513b2611000000000000000000000000000000000000000000000000000d1d2e3e4e5f6c8190909090908e79634e39230e000000000000000000000000000000000215222f3d4a5962747c7d7d7d7d7a644e39240f000000000000000013283e53687d93a8bdd6c6b39e8976614c3d2d1a0a000010253b50657a90a5babfaa947f6a553f2a15000000000002152738454b5c64696a6760564a3e2e1d0d00000000000000172c41566c8196abb09a85705b45301b000f253a4f647a8fa4c7a8927e78787878776c63513e2915000000000000000000000b21364b60768a9fb4c4af99846f5847331f09000000000c22374c61778ca8b9c2ad97826d58422d1800000000000000000e1d3144556176869ca5b4aa9f8c7e6d61697e93a0b2c2b6a5998372604b402f3750667b90aabbae98836e593b2b180500000000000000000004182a3b4d62788b9fb4c0b49f8b7c6c615953504f4f5154606674808d9c9a8574604b3e2e1b08000000000000000f253a4f647a8fa4c7c1ac97826c57422d17020000000000000000000000000000000000000000000000000000000a1e3346576a7f94a7a5a5a5a08e79634e3c2b1900000000000000000f1c3043546277899ea9a5a5a59f927d675b4935210c000000000000000002172c42576c819090909090909090909090909090909090909090909090909090909090909090907e69543f29140000000000000000000000000000000000000000000000000000102031414b60737b7b7b7b7b7b76614c36210c000000000000000000000000000000000004121f2d3b4756606767676767645c4a36210d000000000000000011263b50667b90a5bbd0ccb8a796816c5b4a382816030011263c51667b91a6bbbfaa957f6a55402a150000000000091d314556606d797f807c75645c4a3b2a1805000000000000172c41566c8196abb09a85705b45301b000d22374c62778ca9baa8927d68636363625a514434220e00000000000000000000091e3245576f8499afc6b49f8a76614c372715010000000a1f33475874899eb4c4af9a856f5a37261401000000000000000114263747586278879aa2b4aa9f9382767b8b9fb4bebaa99d87766154433021364b61768a9fb4b39d8873594834200b000000000000000000000c2035495a6c8197a3b5baa99f8d81776e68666464666b737c86959faba395806b5c4b37220d000000000000000d22374d62778ca9adadad99846f5a442f1a050000000000000000000000000000000000000000000000000000000c21364b61768990909090908f826d5b4a361e0e0000000000000000001325364859657c8a9090909090908978634e38230e0000000000000000000d23384d62787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b78634d38230e000000000000000000000000000000000000000000000000000002131d31445560656565656565615846331f0a000000000000000000000000000000000000010f1d2a38454b52525252524e4a3e2d1a0700000000000000000e23394e63788ea3c5d5c4b8b39f8c79635645321e140913283d52687d92a7bdbea9937e69543e29140000000005182a3b4b6074828e949591877a645948341f0b000000000000172c41566c8196abb09a85705b45301b000b20354a60758a9fb4aa95806a554e4e4d483c34261605000000000000000000000316283952677d92a8b9baa9947e695544311d0c00000004182a3a5c71879cb1c6b29d87725544311d08000000000000000009192a3a485a627684959faab4a09888889daabbbdb49f8b7a64584736261e32465770859baba2a68c77624d37220d0000000000000000000006192c3c4b6074859ba7b6baab9f968a837e7b797a7b8086909ca4b5bcb49f8b7a644f3a250f000000000000000b20354b60748a989898989887725c47321d070000000000000000000000000000000000000000000000000000000c22374c61767b7b7b7b7b7b7a73604b3d2d1a0000000000000000000008182b3b4c5e65777a7b7b7b7b7b7b79634e38230e0000000000000000000c2035495a62656565656565656565656565656565656565656565656565656565656565656565635a4935200c00000000000000000000000000000000000000000000000000000001142637444b5050505050504c463a29170400000000000000000000000000000000000000000d1a2832363d3d3d3d3d39362d200f0000000000000000000b21364b60768ba7b8cbb8a69ea69c8675604b44312619182c3d566b8095abc0bda8927d68533d2813000000000b1f3447596b8095a0a9aaa59d8977624c37220d000000000000172c41566c8196abb09a85705b45301b00071c30435472879cb2ad98826d58433838342b1d16080000000000000000000000000b21364b6075899eb3c7b29d8774604b3a2a18040000001a2f44596f8499aec4b49f8a75604b35200b0000000000000000000c1c2b3c48586174808c9ba3b1a69e9da6b8c1b19f927d685c4a3a291816293952677d8c8c8c8c8c7b65503b261000000000000000000000000e1e3245566278899da5b4bcb5a89f9993908e8f91959ca4b1b6c2b9b49d927d68523d281300000000000000081c3043546c818383838383816d58422d18030000000000000000000000000000000000000000000000000000000a1f3347586165656565656564605544311f0f00000000000000000000000d1d2f404c596265656565656565635b4935210c00000000000000000006192c3c494d5050505050505050505050505050505050505050505050505050505050505050504d493c2c19060000000000000000000000000000000000000000000000000000000009192631353b3b3b3b3b3b3633291c0c000000000000000000000000000000000000000000000a151d20272828282824211a0f01000000000000000000091e32455773889eb3c8b39e889ca497816d624b44372c2736495b70859bb0c5c4a5907b65503b2610000000000d22374c62778b9fb4bec3b7a795806b56402b16000000000000172c41566c8196abb09a85705b45301b00001325365a6f849aafaf9a85705a37272220190d0000000000000000000000000000091e3245576b8096a9bab6a5937e685847331f13080002172c42576c8197acc1bbaa8d77624d38220d000000000000000000000e1e2b3a4756606b7a85919ca4b3b3b8c4b4a397816c5f4e3e2d1c0c0b25394d5f67767777777875604b36210b000000000000000000000002162838485a6379879aa2b2b7bab4aea8a5a4a4a6abb1b6c2bfb3a89e927f6a604e3a2511000000000000000114263652636c6e6e6e6e6e6d63523f2a160100000000000000000000000000000000000000000000000000000004182a3a474c5050505050504f4b443726140100000000000000000000000011212f3b484c505050505050504e493d2c1a06000000000000000000000e1e2c35383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b38352c1e0e00000000000000000000000000000000000000000000000000000000000009141d20252626262626211f170c00000000000000000000000000000000000000000000000002090b12121212120f0d070000000000000000000000031628395b71869bb0c0ab9680869c9f95806b6055493c38455463788c9fb5cab7a68c77624c37220d0000000011263c51667b91aabbced4c5b09b86705b46311b000000000000172c41566c8196abb09a85705b45301b0000182d42576d8297acb29d88725544311d0b05000000000000000000000000000000031628394c62778a9fb4c3b39e8877614c443025181010142a3f54697f94a9bec8a48f7a654f3a251000000000000000000000000e1c2a38454b5c64717c869cb1c6cbb8a69b8574604b41312010000a1e30414d586162626262605745321e090000000000000000000000000a1a2b3c495b637684929da5b1b5c2bdbbb9b9bbc0c7bab4aea1998a7d6a615041311e0b0000000000000000081834455257585858585858524535230f00000000000000000000000000000000000000000000000000000000000c1c2a33373b3b3b3b3b3b3a35312619090000000000000000000000000003111d2b34373b3b3b3b3b3b3b38352c1f0f0000000000000000000000000e1920232626262626262626262626262626262626262626262626262626262626262626262320190e000000000000000000000000000000000000000000000000000000000000000001080b1010101010100c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec1ac97817a8b9f9e958073635b54535660728399abbcc8b39d88735947341f0b0000000011273c51667c91a6bdced7c7b09b86715b46311c000000000000172c41566c8196abb09a85705b45301b0000152a3f556a7f94aab49f8a75604b35200b00000000000000000000000000000000000a1f3447596b8096a6b7b8a698836e624a43362c2625272f3b52677c91a7bcbca7927d67523d28120000000000000000000000000c1a27313e4a4f5e6e8398adc3beb39e88786256453123130200011323303a464c4d4d4d4d4b4539281603000000000000000000000000000e1e2c3d495861737d87939ca4a7abaeafb0afadaaa99f988f8478675f5043332313010000000000000000001727343e414343434343423f352717060000000000000000000000000000000000000000000000000000000000000c181f2226262626262625201d1409000000000000000000000000000000000d1820222526262626262623211a0f0100000000000000000000000000060c0d1010101010101010101010101010101010101010101010101010101010101010100e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8196abc0ad98836e7e939f9e9684786f69686b748197a1b3c9bfac97816c573b2a1805000000000d23384d62788d9fb1c1c6baa997816c57422c17000000000000172c41566c8196abb09a85705b45301b000012283d52677d92a7bbaa8d78624d38230d000000000000000000000000000000000005182a3b4b6175879db2bdb2a095806b6054493d3b3a3c404c59657b90a5babfaa947f6a553f2a15000000000000000000000000000a151d2d384e63798c9fb5c5b19f907c6659483827150500000005131b293336373737373632281b0a0000000000000000000000000000000f1f2c3a47546068757e868d9296999a9a9a9895918a837a6f635a4d4133251505000000000000000000000917222a2c2e2e2e2e2e2d2a2317090000000000000000000000000000000000000000000000000000000000000000040a0c1010101010100f0b0801000000000000000000000000000000000000050b0d101010101010100e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a20202020202020181610060000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9beaf9a846f6d8197a0a29a8b847f7e8087979fb1bfc6b3a18f7a644f3a250f00000000000b2035485a6d8297a3adaea89f8b79634d38230e000000000000172c41566c8196abb09a85705b45301b000010253a4f657a8fa4c8a58f7a65503a25100000000000000000000000000000000000000d1e324657667c919fb0bfaf9e958072635b53504f52565e6677869cb1c6c2ac97826d57422d180000000000000000000000000000091e3245566d8297abbcb9a797826d5e4c3b2b1a0a0000000000000b171f2122222222211e160a00000000000000000000000000000000010f1c2a36434b56606971787d818385858483807b766e655d4d493c31231507000000000000000000000000050f1517191919191918160f06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002091f2020202020201c1a1309000000000000000000070c0e2020202020201816100600000000000000000000000000000002090b10131413110c0a040000000000000000040a0b0b0b000000000000000000000000000b161e353535353535352d2b23180a00000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbb09b8671607282969faa9f999493969da5b1bdc7baa899846f5c4b37220d000000000006192b3c4c617585929899958a7c665b4935210c000000000000172c41566c8196abb09a85705b45301b00000d22384d62778daabba7927d68523d2813000000000000000000000000000000000000031629394c5e6c8196a2b4bcaf9e9584796f686565676b727c879ca4b5c9c4af9a846f5a36251300000000000000000000000000000b21364b6075899eb4c8b39e8976614c402f1d0d0000000000000000040a0c0d0d0d0d0b0903000000000000000000000000000000000000000c18263038454b545a63686b6e6f706f6d6a6661574f4b3f352c1e13050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0d121516161513100c09030000000000000000000000000000000000000a151d34353535353535312e261b0d000000000000010f1a21243535353535352e2b23180a000000000000000000000000030a151d2026282a2926211f170c08010000040a0c191f202020100e080000000000000000000b1b29324a4a4a4a4a4a4a433f3528180600000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c6b29d887254607381939ea8aea9a8abb2b6c3c2b6a99f8a78634d3e2e1b080000000000000e1e33465761737d82838078665e4c3c2c1906000000000000172c41566c8196abb09a85705b45301b00000b20354b60758a9fb4aa95806a55402b15000000000000000000000000000000000000000b1b30404b6073849aa2b3bcb0a29a8b847d7b7a7c8187909da5b0b5c1c7b29c87725443301c070000000000000000000000000011263c51667c91a8b9bbaa95806a584633221200000000000000000000000000000000000000000000000000000000000000000000000000000008141c2832363c494d5256595a5b5a5855514b4639372e20190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1214151413110e0b080100000000000000000000000000000000000000000000040a0e192023272a2b2c2b2925211e160b090000000000000000000000000000000a1a2731494a4a4a4a4a4a4643392b1b0900000000000f1f2d36394a4a4a4a4a4a433f36281806000000000000000000000b171e2832363b3d3f3e3b363329201d14090c171f212f3435353525231c110300000000000003162939465e60606060606058534635231000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8adac9d88735e55606c7e8a989faab0b4b9b5b3aea49c8b7b655a493520100000000000000003172939465560676d6e6a625a4c40301e0e00000000000000172c41566c8196abb09a85705b45301b0000081d31445572879db2ad97826d58422d180000000000000000000000000000000000000000121d31445561758499a1b4bbb4aa9f9993908f91969ca4a99f9ba3b5c9b49f8a75604a35200b00000000000000000000000001162b40566b8095abc6b49f8b77614c3a29170400000000000005050200000000000000000000000000000000000000000000000000000000000000010a161e212c35383d414445454543403c363229231c1106000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0e1a212327292a2a292623201c140b07000000000000000000000000000000000000010c171f212c35383c3f4041403e3a363228241d120800000000000000000000000002152738455d6060606060605c564939261300000000071a2d3d4a4e6060606060605853463623100000000000000000010f1b293338454b50535453504c463a353126191c29333744494a4a4a3b382f21110000000000000a1e324657707575757575756d64533f2b1601000000000000000000000000000000000000000000000000000000000000000a1f334758748997979794836e59444b606878838b959b9ea89f9e9992867b655d4c3c2c190200000000000000000b1b2937444b525859554d483c3022120000000000000000172c41566c8196abb09a85705b45301b0000011426375a70859aafaf9a85705a3726140100000000000000000000000000000000000000011527374657617583949faab5bbb4afa8a5a4a7abb1a89e8a859bb0c5baa98c77624d37220d000000000000000000000000051a2f455a6f849aafc4af9a856f5847331c0c00000000050b0d1b1b17130f0b09020000000000000000000000000000000000000000000000000000000002090e192023282c2e30302f2e2b26211e160b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c181f222c35383c3e3f3f3e3c39353026201c130800000000000000000000000000000009141d2a33373c494d525456565553504b4639382f231c110100000000000000000000091d3145566f757575757575716756432e0a000000000c21364a5b707575757575756d64533f2b1601000000000000000f1f2c39464b566065686968666158524b44372f293a474c595f606060504b3f2f1c0800000000000c21364b61768a8a8a8a8a8a826d58432d18000000000000000000000000000000000000000000000000000000000000000004172a3a566b808282827f75614c36424e5a626e788085898b8a88847d74645d4c3f2f1e0e000000000000000000000b192631353d43444038342b1d12040000000000000000172c41566c8196abb09a85705b45301b000000182d42586d8297adb29d87725544311d08000000000000000000000000000000000000000009192939465761727f8c989fabb0b3b5b9b3b1aba1998a7a7f94a9bec7a48f7a644f3a250f000000000000000000000000071c31475c71869cb1bfaa947f6a553a2a17000000000d181f2230302c2824201d150a000000000000000000000000000000000000000000000000000000000000060c0e1316191a1b1a1815110c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2a34373d494e5154545453514e4b43363530251810020000000000000000000000000c1926313a474c555a62676a6b6b6a68656157514c40372e1c14080000000000000000000b20364b60748d8a8a8a8a8a85715c382815020000000e24394e63798a8a8a8a8a8a826d58432e18000000000000000c1c2c3d4957616c757b7d7f7e7b76706760554c40334758616e74757575655d4b38230e00000000000a1e32465773899e9f9f9f9a85705a3726140100000000000000000000000000000000000000000000000000000000000000000c293d51626b6d6d6d6a61574633313c484d5a626a70747675736f6860564b3f2f211100000000000000000000000009141d20272d2e2b2220190d00000000000000000000172c41566c8196abb09a85705b45301b000000152b40556a8095aab49f8a75604b35200b0000000000000000000000000000000000000000000b1b29394654606a79838c949b9e9fa79e9c958e8378677c91a6bcbca7927c67523d2712000000000000000000000000081d33485d72889db2bda7927d68523d28130000000d1d2a34374545423d393632281a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1926313a474c565b6367696a696866636054504a43362e1d1509000000000000000000000c1c2a37444b58616a72787c7f8081807e7a766f665e504b3f302618080000000000000000091d31455673889d9f9f9f9e88735645321d090000000c21364c61768ba79f9f9f9a85705b37271501000000000004182a3a495b6375818990929493908b857d73665e4b454c617683898a8a8a7b65503b25100000000000031629395c71869bb1b5b29d88725544311d0800000000000000000000000000000000000000000000000000000000000000000e2133445156585857544c4639291d2b343c494d555b5760605559524b45382e2011030000000000000000000000000001080b121819150d0b050000000000000000000000172c41566c8196abb09a85705b45301b00000013283d52687d92a7bbaa8d78624d38220d000000000000000000000000000000000000000000000b1b2936434a5b636e797f85888a8b898680796e6264798fa4c6bfa9947f6a543f2a15000000000000000000000000081d33485d72889db2bba6917c66513c2711000005182a3b484c5a5a57534f4b45382815020000000000000000000000000000000000000000000000030a202020202020201816100600000000000000060b0d20202020202017150f0500000000000000070d0f20202020202016140e0400000000000000000000000a1a2837444b59616b73787c7e7f7f7e7b79746e6560544b3f3127190b00000000000000000a1a2a3a47556069767f878d9194959695938f8a847b70655d4b433626180800000000000000021527385b70869bb0b5b8a68b75604b36200b0000000a1e33465774899eb3b5b29d88735544311d0800000000000a1f334758637987969ea7a8a9a8ab9f9a92867b6c6056556a80959ea89f927d68533d2813000000000000192f44596e8499aec3b49f8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000041626333d404242423f3633291b0d19202c35384039454b4b44373d3631271a10020000000000000000000000000000000000000000000000000000000000000000000000172c41566c8196abb09a85705b45301b00000010253b50657a90a5c8a58f7a65503a251000000000000000000000000000000000000000000000000b1825303d494e5b636a7073757674716b645c4d61778ca8bac1ac97826c57422d17020000000000000000000000061c31465b71869bb0bda8927d68533d281300000b1f3448596270706c6864605645321d09000000000000000000000000000000000000000000000b161e353535353535352d2b23180a00000000000e1920233535353535352c2a2217090000000002101b22243535353535352b2821160800000000000000000009192838455560697780888d9193949493918e89837b72645d4b4437291b0d00000000000003162838475861737f89959ca5a7a9ababaaa8aa9f9990857b6a6054433625130000000000000000192e43596e8398aec3c5a28d78634d38230e000000031729395c71869cb1c6b49f8a75604b35200b0000000005182b3b4c6176879da5b3b9c5bec9bcb5afa49c90817461576d8398adb9aa95806a55402b15000000000001172c41566c8196abc1bbaa8d77624d38220d000000000000000000000000000000000000000000000000000000000000000000081621292b2d2d2d2a211e170b00050e1920232b28323636312728201d150a0000000000000000000000000000070d0f1415120b09030000000000000000000000000000172c41566c8196abb09a85705b45301b0000000e23384d63788dabbca7927d67523d281200000000000000000000000000000000000000000000000008131c2c363d494e555b556060565c564e4a475974899fb4c4af99846f5a442f1a00000000000000000000000003192e43586e8398adc0ab96816b563f2e1909000d22374c62778485817d7a74604b36200b0000000000000000000000000000000000000000000b1b29324a4a4a4a4a4a4a433f352818060000000e1e2b354a4a4a4a4a4a4a423e3527170500000010202d36394a4a4a4a4a4a403d332616040000000000000001142637455660737f89969da6a6a9a9a9a8a6a79e9890857a6b6055463a2a1d0d0000000000091e324556617684949ea8b2b6b3ada9a7a7a9adb4aea39b8c8072605443301c1200000000000001162b41566b8096abc0baa58f7a65503a2510000000001a2f44596f8499aec4bbaa8d77624d38220d000000000b203448596c8197a5b6c3c2b6b1a8a4a5a8afb19f968475616c8297acc1ad97826d58422d1800000000000014293f54697e94a9bec8a48f7a654f3a251000000000000000000000000000000000000000000000000000000000000000000000040e1416181818150c0a0300000000060c0d15161e21201d15130b09020000000000000000000000000002101b22242a2b27211e160a00000000000000000000000000172c41566c8196abb09a85705b45301b0000000b20364b60758a9fb4aa957f6a55402a1500000000000000000000000000000000000000000000000000000f1a212c35383f37444b4b45384039363a5c71879cb1c6b19c87725c3b2a180500000000000000000000000014293e54697e93a9c0b19c86715d4b372719131a2e3e556b80959a97928e7d67523d2812000000000000000000000000000000000000000003162939465e606060606060585346352310000006192b3c495e60606060606057524535220f0000071b2d3e4a4e60606060606056514433210e00000000000000081d314455607483949ea7b2b7c4c7bab4b3b4b8b3ada39b8c80746158473b2a1c0c000000000b21364b6075869aa2b3b9b4a79e9893929193989ea8b5ab9f958272604a402f190900000000000014293e53697e93a8bebca7927d67523d281200000002172c42576c8197acc1c8a48f7a654f3a2510000000000d22374c62778a9fb4c3c1b5a49c938f8f939aa2b1a29a85756b8095abc0af9a85705a36261401000000000012273c51677c91a6bcbca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000103030200000000000000000000000003090b0b0802000000000000000000000000000000000a151d2d36393f403c3632281a10020000000000000000000000172c41566c8196abb09a85705b45301b000000081d31445573889db2ad97826d58422d18000000000000000000000000000000000000000000000000000000060f1a21232a2731363632282b242f445a6f8499afc4b49f89745947341f0b0000000000000000000000000d23384d62788da2b4b5a48f7a655544372c282a384b5c71869cafaca6907b66513b261100000000000000000000000000000000000000000a1e324657707575757575756d64533f2b1601000b2035495a707575757575756c63523e2a1500000d22364a5c707575757575756b62513d2814000000000000061a2c3d4b60738399a1b3b9c1b5b1a7a99f9e9faaa9b1b5ab9f9584766259473a2a1704000000091e3245566f8499a8b6a99f9589837e7c7c7e8389969fabb4a096806b5e4c37261401000000000011263c51667b91a6bbbfa9947f6a543f2a1500000000152a3f546a7f94a9bfbca7927c67523d27120000000014293e53697e93a9bac9b5a39b867e7a7a7e858f9ca4a39983747f94a9beb29d87725443301c0800000000000f243a4f64798fa4c7bfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a27313e4a4f5455524b45382e20100000000000000000000000172c41566c8196abb09a85705b45301b000000021527375b70859ab0af9a856f5a3626140100000000000000000000000000000000000000000000000000000000060c0e15151d20211e1616172c42576c8197acc1baa98c77624c37220d0000000000000000000000000c2035495a6f849aafbfb09b85746055493c3d3b4856647a8fa4b6b7a58d78634d38230e00000000000000000000000000000000000000000c21364b61768a8a8a8a8a8a826d58432d1800000d23384d62788a8a8a8a8a8a816c57422c1702000f24394e647a8a8a8a8a8a8a806b56402b160100000000000c2135495b6a7f94a1b2bfbcb0a39b928c89898a8e939ca4b3b4a29a8677625847331f0a000000031628384d62788a9ea49c8a7f766d696767696e76808d9fb5b09e907c665544311d0800000000000f24394e64798ea3c6c1ac97816c57422c170200000012273c52677c91a7bcbfa9947f6a543f2a1500000004192e43596e8398aec7c7b09b857568656568707a8698a0a195807d92a7bdb49f8a75604b35200b00000000000c22374c61778ca9bac1ac97826c57422d170200000000000000000000000000000000000000000000000000000000000000070d0f1e1e1e1e1e0e0c0600000000000000000000000000000000000000000000000000000000000002152738454b5c64696a6760564a3e2e1d0d00000000000000000000172c41566c8196abb09a85705b45301b00000000182e43586d8398adb29d87725443301c08000000000000000000000000000000000000000000000000000000000000000002080b0b090300152a3f546a7f94a9bfc7a48f79644f3a240f00000000000000000000000006192c3c4f657a8fa1b3b5a3978173635b555354596274859bb0c2b29d87725b4935210c00000000000000000000000000000000000000000a1e32465773899e9f9f9f9a85705a37261401000b20364b60758a9f9f9f9f99846f59442f1a00000c21374c61768ca89f9f9f98836d58432e1800000000000417293a4e63798b9fb4bfbdb09e96867d77747375787e86929ea7b4a49c8676614c37210c000000000a2035485a687e8f9286796a61575452525458616b7e92a0b2b19c8673604b35200b00000000000c21374c61768ca8b9c3ae99846e59442f19000000000f253a4f647a8fa4c8c1ac97816c57422c17020000011426375d72879cb2c7baa9907b65574f50535c647482979f9f8c8095abc0bbaa8c77624d37220d00000000000b1f34475974899fb4c4af9a846f5a452f1a00000000000000000000000000000000000000000000000000000000000002101b2224333333333323211a0e0000000000000000000000000000000000000000000000000000000000091d314556606d797f807c75645c4a3b2a1805000000000000000000172c41566c8196abb09a85705b45301b00000001162b40566b8095abb49f8a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcbca7917c67523c2712000000000000000000000000000e22374b5d6e8399a5b7b1a09784786f6a68696d77849aa3b5baa895806b563c2c19060000000000000000000000000000000000000000031629395c71869bb1b5b29d88725544311d0800081d31445573889db2b5b19c86715c3a291704000a1f33475874899eb4b5b09a85705b37261401000000000a1f3346586c8197a9bac5b19f96807367615955606369717d899ba3b4a395806a55402b150000000005192b3c4e60687a7d75635b4b46393d3c3a464c606d8298adb6a4917c67513c271200000000000a1f33475874899eb4c6b19b86715c382816020000000d22374d62778caabbc4ae99846f59442f1a000000081d31445574899eb3c9b49f8a75604b393a3e4b5660728197a19f8a9fb4c9c8a48f7a654f3a2510000000000004182a3b5c72879cb1c7b19c87725c3b2a1804000000000000000000000000000000000000000000000000000000000010202d3639484848484838352c1f0e00000000000000000000000000000000000000000000000000000005182a3b4b6074828e949591877a645948341f0b000000000000000000172c41566c8196abb09a85705b45301b0000000013283e53687d93a8bbaa8d77624d38220d0000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7bea9947f69543f2a1400000000000000000000000000081b2e3f4c6176879da8b6b1a29a8c847f7d7e828a9aa2b4bdb49f8a77614c37220e00000000000000000000000000000000000000000000192f44596e8499aec3b49f8a75604b35200b00021527375b70859bb0c5b49e89745846331f0a0004172a3a5c72879cb1c7b29d88725544311d08000000000c21364c6176899eb4c7b8a697816c60554c47444b4e5460687885969f9b8574604b36200b00000000000e1e31424e5d656760564a3d332927272933424e64798ea8baad98836d583a2a17040000000004172a3a5c71879cb1c6b39e88735645321e090000000b20354b60758a9fb4c6b19c86715c3a29170400000b20354b60758a9fb5c7b29c8772554431252e38455460738399a59faabbcebca7927c67523d27120000000000001a2f455a6f849aafc4b49f89745947341f0b00000000000000000000000000000000000000000000000000000000071b2d3e4a4f5e5e5e5e5e4e493d2c1a0600000000000000000000000000000000000000000000000000000b1f3447596b8095a0a9aaa59d8977624c37220d000000000000000000172c41566c8196abb09a85705b45301b0000000011263b50667b90a5c8a48f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bac1ac97816c57422c170200000000000000000000000000101f334758647a8a9da5b4b3aa9f9a959293989ea8b4bcb49f937e685947341f0a00000000000000000000000000000000000000000001172c41566c8196abc1bbaa8d77624d38220d0000192e43586e8398adc3b9a88b76614c36210c00001a2f445a6f8499afc4b49f8a75604b35200b0000000012273d52677d92a8b9c8b39e8876614c443734313539414e596274818a8677625645321d090000000000001424313f4b4f524b45382d1e1712121722364a5c74899fb4b39e89745847331f0a00000000001a2f445a6f8499afc4b8a78b76604b36210b000000081c30435472879db2c7b39e89745846331f0a00000b20354b60758a9fb5c6b19c86715c3726141a283644556176879db2bbc8d8bfa9947f6a543f2a15000000000002172d42576c8297acc1baa98c77614c37220c000000000000000000000000000000000000000000000000000000000d22364a5c647373737373635b4935210c00000000000000000000000000000000000000000000000000000d22374c62778b9fb4bec3b7a795806b56402b16010000000000000000172c41566c8196abb09a85705b45301b000000000e23384e63788da3c4a7927d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c4ae99846f59442f1a000000000000000000000000000004182a3a4a5c647987979fabb4b4afaaa8a9adb4b9b5ab9f94816c604e3a2a18040000000000000000000000000000000000000000000014293f54697e94a9bec8a48f7a654f3a25100001162b41566b8096abc0c6a38e79634e39240e0002172d42576c8297acc1bbaa8d77624d38220d00000002172c41576c8196acc6c7ab95806b584633261f1d2023313b4856606c7671625948382815020000000000000614212e373a3d3632281a0f0609141d2533475873889eb3b9a78c76614c37210c0000000002172d42576c8297acc1c5a28d78634d38230e000000011426365a70859aafc5b9a88b76614c36210c0000081c30435474899eb3c7b19c87725c3828160a1826374657657b90a0b2c8d8c1ac97826c57422d17020000000000152a3f556a7f94aabfc7a48f79644f3a240f000000000000000000000000000000000000000000000000000000000f24394f647a888888888879634e38230e000000000000000000000000000000000000000000000000000011263c51667b91aabbced4c5b09b86705b46311b060000000000000000172c41566c8196abb09a85705b45301b000000000b21364b60768ba6b8aa947f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c6b19c87715c3a2a180400000000000000000000000000000c1c2d3e4a5b6376828c989fa9abaeafb0aeacab9f998c7f6c635242311c0c000000000000000000000000000000000000000000000012273c51677c91a6bcbca7927d67523d2812000014293e53697e93a8bebba6917b66513c26110000152a3f556a7f94aabfc8a48f7a654f3a2510000000011426365b71869bb0c6baa98e79644f3a291709080b131d2b38454b5760574c483b2a1a0a000000000000000002101b222528211e160a0f1a21263136434c61768b9fb5c5a38e79634e39240e0000000000152a3f556a7f94aabfbaa5907a65503b251000000000182d43586d8298adc2c6a38e79634e39240e0000011426365d72879db2c7b39e89735645321e09091929394c5d6d8298aabbcec4af99846f5a442f1a00000000000012283d52677d92a7bcbca6917c67513c2712000000000000000000000000000000000000000000000000000000000d22374d62778c9d9d9d907b66503b2611000000000000000000000000000000000000000000000000000011273c51667c91a6bdced7c7b09b86715b46311c060000000000000000172c41566c8196abb09a85705b45301b00000000091e32455673889eb3ac97826d57422d18000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafc4b49e89745847331f0a00000000000000000000000000000010202d3d4958616d79838a9195989a9a9997928c8379696152453424140000000000000000000000000000000000000000000000000f243a4f64798fa4c7bfaa947f6a553f2a15000011263c51667b91a6bbbea8937e69533e2914000012283d52677d92a7bcbca7927c67523d2712000000081c30435474899eb3c9b49f8a75604b36200b000000000d1a283239454b4539342a1d0d0000000000000000000000080e10120b09151d202c3537444b54606b8096abbcc1a38e78634e39230e000000000012273d52677c92a7bcbca7927d67523d281200000000162b40556b8095aac0bba6907b66513b26110000001b31465b70869bb0c5b8a78b76604b36210b000b1b2f3f4d63788b9fb4cac6b19c87715c3a2a1804000000000010253a50657a8fa5c8bea9947e69543f2914000000000000000000000000000000000000000000000000000000000b20354b60758a9fb3a8937d68533e281300000000000000000000000000000000000000000000000000000d23384d62788d9fb1c1c6baa997816c57422c17020000000000000000172c41566c8196abb09a85705b45301b00000000031628385b70869bb0af9a856f5a36261401000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2b9a88c77614c37220c00000000000000000000000000000002101f2c3a474c5b636e767c8083858583817d776e635b4f43342717060000000000000000000000000000000000000000000000000c22374c61778ca9bac1ac97826c57422d1702000f24394e64798ea3c6c0ab96806b56412b16010010253a50657a8fa5c9bfa9947f6a543f2a150000000b20354b60758a9fb5c7b19c87725544311d0800000000000a151d28323632281f180d00000000000000000000000000000008141c2731363d494e556066727f949eb0c9b5a38c76614c37210c000000000010253a4f657a8fa4c8bfaa947f6a553f2a150000000013283e53687d93a8bdbda8937e68533e2913000003192e43586e8398adc3c5a38d78634e38230e0000112035495a6d8297acc1c9b49f89745847331f0a00000000000d22384d62778daabbc2ad98826d583e2d1b07000000000000000000000000000000000000000000000000000000081c30435472879db2aa95806b55402b1600000000000000000000000000000000000000000000000000000b2035485a6d8297a3adaea89f8b79634d38230e000000000000000000172c41566c8196abb09a85705b45301b0000000000192e43596e8398aeb29c87725443301c08000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aaadada48e79644f39240f00000000000000000000000000000000010f1c2a333d4a4e5861666b6e6f706e6c6862594e493d32251709000000000000000000000000000000000000000000000000000b1f34475974899fb4c4af99846f5a442f1a00000c21374c61768ca8b9c3ad98836e58432e1900000d23384d62788dabbcc1ac97816c57422c170200000c21374c61768cabbcc5b09b86705b37271502000000000000020a161e211e160a050000000000000000000000000000000c18263037444b525b636b747c85949daebcc1b09b86715847331f0a00000000000d22384d62778daabbc1ac97816c573828160200000011263b50667b90a5bbc0ab95806b56402b16010001162b41566b8096abc0baa5907b65503b2610000006192c3c4e64798ea3b5c9baa88c77614c37220c00000000000b20354b60758a9fb4c8b39d88735c4a362208000000000000000000000000000000000000000000000000000000011426365a70859aafad98836d58432e18000000000000000000000000000000000000000000000000000006192b3c4c617585929899958a7c665b4935210c000000000000000000172c41566c8196abb09a85705b45301b0000000001162b41566b8096abb49f8a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d9298989898917c67513c27120000000000000000000000000000000000000c171f2d363a464c5156595a5b5957524c473b362c1f1507000000000000000000000000000000000000000000000000000004182a3b5c72879cb1c7b19c87725c3a2a1804000a1f33475874899eb4c5b09b85705b37271502000b20364b60758a9fb4c4ae99846f59442f1a0000000d22374c62778ca1c8c5b09b85705b46301b00000000000000000003090b0903000000000000000000000000000000000c1c2936434b55606770798087919ba3aebbc2b4a3937d68533a29170400000000000b20354b60758a9fb4c4ae99846f5645321e090000000e23394e63788ea3c5c2ad98836d58432e1800000014293e53697e93a8bebda8927d68533d28130000000e21364a5c70859bb0c5c6a48e79644f39240f0000000000081d31445572889db2c7b7a68e79644f36251300000000000000000000000000000000000000000000000000000000182d42586d8297adb09a85705b3727150200000000000000000000000000000000000000000000000000000e1e33465761737d82838078665e4c3c2c1906000000000000000000172c41566c8196abb09a85705b45301b000000000014293e53697e93a8baa98c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798383838383837c66503b261100000000000000000000000000000000000000040f1a212933363c4043454544423d37342a211a0f01000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4b49f89745947341f0a0004172a3a5c72879cb1c7b29d88735544311d0800081d31445573889db2c6b19c86715c3a29170400000b21364b60768baabbc7b19c87725c37271501000000000000000000000000000000000000000000000000000000000919293a46546068747c858d959da6b0b5c1bcb5a49b8573604b35200c000000000000081d31445572889db2c7b39e8975604b3621100000000b21364b60768ba7b8c5b09a85705b37261401000011263c51667b91a6bbbfaa95806a55402b15000000071a2d3d546a7f94a9bfbba6917c66513c27110000000000011426375b70859ab0c5c4ab95806b5443301c07000000000000000000000000000000000000000000000000000000152b40556a8095aab29d88725544311d08000000000000000000000000000000000000000000000000000003172939465560676d6e6a625a4c40301e0e00000000000000000000172c41566c8196abb09a85705b45301b000000000011263b51667b90a6c7a48f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b636e6e6e6e6e6e665e4c38230f000000000000000000000000000000000000000000070c171f21272b2e30302e2c28221f180d06000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1baa88c77614c37220c00001a2f455a6f849aafc4b49f8a75604b36200b00021527375b70859bb0c5b39e89745846331f0a0000091e324557758a9fb4c8b39d88735544311d0800000000000000000000000000000000000000000000000000000002152737465861737e88929ba2abb2b7c4bbb4ab9f978677615443301c08000000000000011426375b70859ab0c5b9a7917c67523e2e1b070000091e32455773899eb3c7b29d88725544311d0800000f24394e64798ea3c6c2ad97826d58422d180000000012273c52677c91a7bcbea9947e69543f2914000000000000182d43586d8298adc2c7b29d8773604a35201000000000000000000000000000000000000000000000000000000013283d53687d92a8b49f8a75604b36200b0000000000000000000000000000000000000000000000000000000b1b2937444b525859554d483c3022120000000000000000000000172c41566c8196abb09a85705b45301b00000000000e24394e63798ea3c5a7927c67523d2712000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e585858585858504c402f1c090000000000000000000000000000000000000000000000040a0c1116191a1b1917130d0b050000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfc6a48e79644f39240f0002182d42576d8297acc2bcab8d78624d38230d0000192e43586e8398adc3b9a88b76614c36210c0000031628395d72879db2c7b49f8a75604b35200b000000000000000000000000000000000000000000000000000000081d314455617684939da6b0b4c0c3b7b2aa9f988c82756159473626140100000000000000182e43586d8398adc2c5af9a846f5c4a3622120000031628395b71869bb0c6b49f8a75604b35200b00000c21374c61768ca8b9c4af9a856f5a362513000000000f253a4f647a8fa4c7c1ab96816c56412c17010000000000162b40556b8095aac0cab7a5907b65503e2d1b07000000000000000000000000000000000000000000000000000010253b50657a90a5bcab8d78624d38230d000000000000000000000000000000000000000000000000000000000b192631353d43444038342b1d12040000000000000000000000172c41566c8196abb09a85705b45301b00000000000c21364b61768ba7b8aa947f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d36394343434343433b382f22110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcbba6917c66513c27110000152a40556a7f95aabfc9a58f7a65503a25100001162b41566b8096abc0c6a38e79634e39240e0000001a2f44596f8499aec4bbaa8e79644e39240f0000000000000000000000000000000000000000000000000000001325364b6074849aa2b3b7c4bcb5aea59d958b82796d6157473a2a18080000000000000001162b40566b8095abc0c7b3a28f7a644f402f1b0b0000192e44596e8399aec3bbaa8d77624d38220d00000a1f33475874899eb4c7b29c87725443301c070000000d22374d62778ca9bac3ae99836e59442e1900000000000013283e53687d93a8bdd4c3ae99846f5c4a362213020000000000000000000000000000000000000b0b0b0b0b0b0b0e23384d63788dabbca58f7a65503a25100b0b0b0b0b0b0b0b0b000000000000000000000000000000000000000009141d20272d2e2b2220190d00000000000000000000000000172c41566c8196abb09a85705b45301b00000000000a1e33465773899eb3ac97826c57422d1700000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21232e2e2e2e2e2e26231c110300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1010100e0c0700000000000010253a50657a8fa5c8bea9947e69543f2914000013283d52687d92a7bdbca7927d67523d2812000014293e53697e93a8bebba6907b66513b2611000001162b41566b8096abc7c8a8937e68533828160300000000000000000000000000000000000000000000000000071c304354697f94a2b3c0c1b4ab9f99908780786d645c4b46392a1c0c00000000000000000013293e53687e93a8bdd0c0af99846f5e4c3929170301172c41566c8196abc1c8a48f7a644f3a250f00000417293a5c71879cb1c6b49f8a75604a35200b0000000b20354a60758a9fb4c6b19b86715c39291703000000000011263b50667b90a5bbd0cab59f8d7a644f4231201105070b0f0d070000000000000000030d1315202020202020202020364b60758a9fb4a7927d68523d28202020202020202020200e0c0600000000000000000000000000000000000001080b121819150d0b050000000000000000000000000000172c41566c8196abb09a85705b45301b0000000000031729395c71869bb1af9a846f5a362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e191919191919110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202325262624211a0f01000000000d22384d62778daabbc1ab96816c56412c17000010253b50657a90a5c9bfaa947f6a553f2a15000011263c51667b91a6bbbda8937e68533e291300000011263b51667b90a9bac2ad98826d5645321e09000000000000000000000000000000000000000000000000000b20354a6073889db3c0beb2a39b8d847b746a62594e4a3e32291b0c0000000000000000000011263b50667b90a5bbd0c7b3a1907b665746331e1503152a3f556a7f94aabfbba6917b66513c26110000001a2f445a6f8499afc4baa98c77624c37220d000000071c30435472879db2c7b39e89735746331e0a00000000000e23384e63788da3c5d1c0b4ab9a846f604e3e2e20181c2024221b10020000000000071520272a35353535353535353531455673889db2aa957f6a5540353535353535353535353523211a0f0100000000000000000000000000000000000000000304000000000000000000000000000000000000172c41566c8196abb09a85705b45301b000000000000192e44596e8399aeb29c87725443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009171e2c35383b3b3b39362d1f0f000000000b20354b60758a9fb4c3ae99836e593d2c1a06000e23384d63788dabbcc1ac97826c5737271502000f24394e64798ea3c6c0ab95806b56402b160100000b21364b60768a9fb4c9b39e8975604b362112000000000000000000000000000000000000000000000000000f24394f64798ea6b7c5b2a09885796f6660544d483b362d1e160b00000000000000000000000e23394e63788ea3c5d6d0bfb29d8775614b43331e1613283e53687d93a8bdbda7927d68523d2813000002172c42576c8197acc1c7a48f79644f3a240f000000001325365a70859aafc5b8a78b76614b36210c00000000000b21364b60768ba6b8c8b4a29aa2927d685c4b3f342b30353a372e201000000000031525323c3f4a4a4a4a4a4a4a4a4a4a4a5b70859bb0ac97826d574a4a4a4a4a4a4a4a4a4a4a4a38352c1f0f00000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c8196abb09a85705b45301b000000000001172c41566c8196abb49f8a75604a35200b000000000000000000000000040d13151d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d16140e040000000000000000030a0c1919191919110f090000000000000000000000000000000000000000000000000000000000000000000000000000051727353c494d5050504e4a3d2d1a07000000081d31445572889db2c6b19c86715b4935210a000b20364b60758a9fb5c4af9a846f5544311d08000c21374c61768ca8b9c2ad98836d58432e18000000091e3245576f8499afc4b9a8927d675240301a0a00000000000000030a0c0b0902000000000000000000000011273c51667c91a6c4b8a7988273645c504b4336342b211a0f0e0b09030000000000000000000c21364b61768ba7b8ccc0b3afa598826d61504332281d293e53687e93a8bdbea9947e69543f2914000000152a3f546a7f94a9bfbca6917c67513c271200000000182d42586d8297adc2c5a38e79634e39240e0000000000091e32455673889eb3c5af9a859a9f8a7a655d4d483b434a4f4b3e2e1d0d0000000d2032434f546060606060606060606060606e8398adaf9a856f606060606060606060606060605e493d2c1a06000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c8196abb09a85705b45301b00000000000014293e54697e93a9baa98c77624c37220d0000000000000000000000071521282b32323232323232323232323232323232323232323232323232323232322b282116080000000000000b171e212e2e2e2e2e26241d120400000000000000000000030608080602000000000000000000000000000000000000000113233545525a63656565635b4a36210c000000011426375b70859ab0c5b5a48e79634e38281502091d31455673889db3c8b39e8875604b36200e000a1f33475874899eb4c5b09a85705b3727150100000316283951667c91a6b7c6b09a85705f4d3828180800000000000b171e21201d150a0000000000000000000012283d52677d92a7bcb39e887661554a3e3530262019131c2024211e160a00000000000000000a1e32465773899eb3c8b3a29a9fa0947f6a614b4539312a3a546a7f94a9bfbda8937d68533e281300000012273d52677c92a7bcbea9947e69543f291400000000152b40556a8095aabfbba6907b66513b26110000000000031628385b71869bb0c0aa9580849a9e897b6b62595a5460645c4b3b2b1805000013273c4f616a757575757575757575757575758095abb29c877575757575757575757575757575705b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c8196abb09a85705b45301b00000000000011273c51667c91a6c7a48f7a644f3a250f00000000000000000000041525333c404747474747474747474747474747474747474747474747474747474747403d33261604000000000b1b29333643434343433b382f2212000000000000050b0d13181c1d1d1b17110b08010000000000000000000000000000000f1f314152636c787a7b7b79634e39240e00000000182d43586d8298adc2c2ab95806b5645321d09021527385b70869bb0c5b8a7917c66513c2c190604172a3a5c71879cb1c6b29d88735544311d080000000b20354b6074889db2c3b4a2917c6756453625160a000006131b2933363632281a1002000000000000000010263b50657b90a5c3af99846f5746372d201c141018253035393632281b0c00000000000000031629395c71869bb1c4af9a848d9f9d947f6c60574b443a47586e8398adc3c6a6917c67513c271200000010253a4f657a8fa4c8c1ab96816c56412c170100000013283d53687d92a8bdbda8937e68533e2913000000000000192e43596e8398aec1ac97817b8d9f9e8c8177716f70747a64594834200b0000152a3f546a7f8a8a8a8a8a8a8a8a8a8a8a8a8a959eb0b6a58f8a8a8a8a8a8a8a8a8a8a8a8a8a8a79634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c8196abb09a85705b45301b0000000000000f24394e64798ea3c6a7927c67523d2712000000000000000000000d21334450555c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c56514433210e00000003172939464c5858585858514c402f1d090000030a0d181f22282e313332302c26201d1409000000000000000000000000000a1a2c3d4e606c818d9090907d68533d281300000000162b40556b8095aac0c8b39d8875604b37271501192e43596e8398aec3c5ae99836e5b4935210f001a2f445a6f8499afc4b49f8a75604b35200b000000081d314455697e93a5b6c0b29d877460544332281c131519203039464b4b45382e211000000000000000000e23384e63788da5b6af99846f564532201d161e212e36434a4e4b4539291c0c00000000000000192f44596e8499aec0ab96808196a39d948175676055575861778a9eb4c9b9a88f7a644f3a240f0000000d22384d62778daabbc3ae99836e59442e190000000010263b50657b90a5bac0ab96806b56412b16010000000001162c41566b8196abc0ad98836e8197a59f968b868485888c77624d37220d000012273d52677c929f9f9f9f9f9f9f9f9f9f9f9fabb0bcc3b6a19f9f9f9f9f9f9f9f9f9f9f9f9f907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000172c41566c8196abb09a85705b45301b0000000000000c21374c61768ca8b9a9947f6a543f2a150000000000000000000013283c50626a72727272727272727272727272727272727272727272727272727272726b62513d28140000000a1e334657616e6e6e6e6e665e4c38240f080b161e212a34373e4346484745413b3531261911030000000000000000000002162838495b687d929fa59e8875604b36210b0000000013283e53687d93a8bdcbb7a6927d685544311d0d162c41566b8196abc0cab49f8c78634d3e2d1808172d42576c8297acc1bbaa8d77624d38220d000000011527374b6074879cb2bdb6a5988272604b453830252a2b35414d576160564b3f2e1e0e000000000000000c2135495b72879db2b39e8975604b4236312832363e4b5460636057463a291704000000000002172c41576c8196acc1ad978275859ba59f97877c756f6d6f76849aa8b9c9b49e8975604b36200b0000000b20354b60758a9fb4c6b19b86715c392816030000000e23384e63788da3c5c3ad98836e58432e1900000000000014293e54697e93a9beaf9a846f75879ca8ab9f9c999a9e907b66513b2611000010253a4f657a8fa4b5b5b5b5b5b5b5b5b5b5b5b5c5c8d1cac7b5b5b5b5b5b5b5b5b5b5b5b5a8937e68533e291300000000000000000000000000000000000000070d0f1415120b09030000000000000000000000172c41566c8196abb09a85705b45301b0000000000000a1f33475874899eb4ac97826c57422d1700000000000000000000152b40556a808687878787878787878787878787878787878787878787878787878787806b56402b160000000c21364c617682838383837c66513b26141b222932363b484c53585b5d5d5b57504b44372f2114060000000000000000000e1e32455663798a9eb4a9957f6a5645321e090000000011263b50667b90a5bbd5c4b29c8774604b3b2b19142a3f54697f94a9becfbcab97826d5c4a362614152b40556a8095aabfc8a48e79644f39240f00000000091d314455667c909fb1c1b2a095806d60564a43363f3c494d5f677675655d4b3c2b1b0b000000000000061a2c3d566b8096a8b9a7947f6a60504b4538454b515c64737975615846331f13010000000000142a3f54697f94a9beae99846e77879da5a59c91888482848a9aa2b4c6c0af99846f5544311d08000000081d31445572889db2c7b39e89735745321e090000000b21364b60768ba6b8c5b09b85705b38281502000000000011263c51667b91a6bbb19b8671647a8a9eaab4b1afafaa947f6a553f2a1500000d22384d62788daa9f9f9f9f9f9f9f9f9f9f9f9fb0b4c0beb1ad9f9f9f9f9f9f9f9f9f9f9f9f96806b56412b16000000000000000000000000000000000002101b22242a2b27211e160a00000000000000000000172c41566c8196abb09a85705b45301b00000000000004172a3a5c71869cb1af99846f5a36251300000000000000000000152a40556a7f959c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9a846f5a3625130000000b20364b60758b98989895806b563f2e292e3739464b525962686d717272706c6660554b3f31241404000000000000000e1e30404b6074859ba8b49f8a77614c38281602000000000e23384e63788da3c5d5cab6a4947e695948372615283d52677d92a7bcc8bbb49f8c79645443301c14293e53697e93a8bebaa5907b65503b261000000000021527374c5e6c8197a3b5beaf9e9582756660545554565a626e7d89887b655a49392917030000000000000e22374c62778a9eb4b49f8c7e6f6560565b5660666e7a858e8676614c41301e0a000000000012273c52677c91a7bcb09a85706278879ba3b2a69e9997999fa8b4c0c4b4a2907b665037271502000000011426375b70859ab0c5b8a78b76604b36210b000000091e32455673889eb3c8b39d88735645321d0900000000000f24394e64798ea3c6b29d88725c667c8c9ea7b3bfc3ae98836e5939291603000b20354b60738c8a8a8a8a8a8a8a8a8a8a8a8a8a9aa2b4b1a0978a8a8a8a8a8a8a8a8a8a8a8a8a826e59432e19000000000000000000000000000000000a151d2d36393f403c3632281a10020000000000000000172c41566c8196abb09a85705b45301b000000000000001a2f44596f8499aeb19c87725443301c0700000000000000000012283d52677d92a7b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b19c87725443301c070000091d32455674899eadad9b85705d4b3d3f3f4b4f5761686f777e8386888785817b73655d4e4231221200000000000009192b3c4d5e6c8197a3b5ab97826d5947341a0a00000000000b21364b60768ba6b8cbc6b9b39e89776255443127273c51677c91a6bcbbaa9faa9b8573604b413121293e53687e93a8bdbca7917c67523c2712000000000009192f404b6075859ba5b6bcafa097867b736d6a6a6b707882929e9e8978625746331e0a0000000000000b1f3448596a7f94a1b3aa9f92847b75727172767b838d9ba398826e5f4d39251000000000000f243a4f64798fa4c7b19c87725a627885979fabb3afacaeb4bac6c1b5a69b85705e4c3819090000000000182e43586d8398adc2c5a38d78634e38230e000000031628385b71869bb0c6b59f8a75604b36200b00000000000c21374c61768ca8adac9d88735e5e667b8999a1abb0b19c87725746321e0a00081d3144556e7575757575757575757575757575849ab0ad9782757575757575757575757575756e6453402b170000000000000000000000000000000a1a27313e4a4f5455524b45382e20100000000000000000172c41566c8196abb09a85705b45301b00000000000002172c42576c8197acb49f8975604a35200b00000000000000000010253a50657a8fa3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39f8a75604a35200b0000021528385b70859ab0b4a28f7a645b5454575d646d767d848b93989b9d9c9a9690867b68604e40301c0c0000000001152737485a667c919fb1b59f8c79634e3a2a18000000000000091e32455673889eb3c8b9a89ea79a8473604b45382e3c52677c91a7bcb49f8b9da395806b5f4e42362c3654697e93a9bebca6917c67513c2712000000000000121e3245576277879ca4b3beb1a49c9087827f7f80858c98a0b4a79c8676614b36210c00000000000005182a3b4b60728399a2b0b4a19990898786878a90999fabb2a0927d67523d281200000000000d22374c62778ca9adac9d87725d596274818d9aa2abb0b4bab5b3aea39b8877624d402f1c000000000001162b40566b8095abc0bba5907b66503b261100000000192e44596e8399aec1bcab8d78634d38230e00000000000a1f334758748997979794836e594c5d6578838f969b9c998c76614b36210c0001142637445c5f6060606060606060606060606d8398adaf9a856f606060606060606060606060595346362410000000000000000000000000000002152738454b5c64696a6760564a3e2e1d0d00000000000000172c41566c8196abb09a85705b45301b00000000000000142a3f54697f94a9baa98c77624c37220d0000000000000000000d22384d62788d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8c77624c37220d000000162b40566b8095abbcb29d87796e69696c727a8289929a9faaadb0b2b2b0aca49c8d7e685e4d3a2a1804000000081d3144556278899eb3bdaf99846f5b49351c0c000000000000031628385b71869bb0c6b49e899ca297816c60564b3f4154697e94a9bead9882879d9e927d68604e493d43546c8196abc1c8a5907b66503b26110000000000000316283947596278869aa1b3b9b5b1a59d979494969a9fabb2b7a99e8979634e39230e000000000000000d1c304354617584969eafb3afa99f9c9b9c9faaaeb5b3a59d8a7c67513c271200000000000b20354a60748b97979794826d584856606c7a848e969b9fa89f9e9992857963594834221200000000000013283e53687d93a8ababa8937d68533e281300000001172c41566c8196abababa5907a65503b2510000000000004172a3a566b808282827f75614c3f4b5a636f7a808586847f75604b36210b000009192631484a4a4a4a4a4a4a4a4a4a4a4a566b8095abb29d877254434a4a4a4a4a4a4a4a4a4a4340362818070000000000000000000000000000091d314556606d797f807c75645c4a3b2a1805000000000000172c41566c8196abb09a85705b45301b0000000000000012273c52677c91a7c7a48f79644f3a240f0000000000000000000b20354a607279787878787878787878787878787878787878787878787878787878787974604b36200b0000000e23384e63798c9fb5b7a59d8b837f7e81878f979ea8afb4bbb5b2b0b2b7c2b5ab9f917c665947341f080000061a2c3d4b6073859ba7b1b0a3907b65503d2c1a0000000000000000192e43596e8398aec2ad9781879c9f978174655d59575f6f849aafc0ab96807c91a09f8d7e6f635b58586073869cb1c7bbaa8f79644f3a240f000000000000000a1b2a3b485a627684939ea7b3b8b7b2acaaa9abb0b4bbb4a69d8b7c655b4935210c000000000000000114263646576173818f99a1a9afb2b1b0b2b4b2ada89e94877a675f4d3924100000000000071c3043546b808282827f75614b38454b5c6470798085898b8a88847c73635b493b2b180400000000000011263b50667b909696969695806b55402b160000000014293f54697e9496969696927d68533d28130000000000000c293d51626b6d6d6d6a615746333c494d5d646b70716f69605645321e0900000009141d3335353535353535353535353e53687d93a8b49f8a75604b353535353535353535352e2b24180a000000000000000000000000000005182a3b4b6074828e949591877a645948341f0b000000000000172c41566c8196abb09a85705b45301b000000000000000f243a4f64798fa4c7a7917c67523c2712000000000000000000071c30435460636363636363636363636363636363636363636363636363636363636363605645311d090000000c2135495b6f8399a7b9b7aa9f989494979da5adb4b9b5b0ab9f9d9b9da5b0b5bcb39e8877614c36261401000c2135495b6b80959b9b9b9b9885705d4c381f0f0000000000000001162c41566b8196abc0ad98837a8c9f9f97857b726e6d707d92a2b3c4a8937e6d8298a49f938379716d6d728095a4b6cab49f8a76604b36210b00000000000000000d1d2b3c485861727e89969ea7acb1b3b9c4b8b3afaa9f97887b655e4c3d2c1a060000000000000000081829394655606c7a848d949a9d9fa9aa9f9c9892897f75645c4d40301d0a00000000000013253651626b6d6d6d6961574632323e4a4f5b636b70747675736f676055493c2c1d0d000000000000000d22374d62778181818181817d67523c2712000000000f24394f647a8181818181817c65503b26100000000000000e2133445156585857544c4639292c353f4b4f565b5c5a544b45382816030000000001081e20202020202020202020263b50667b90a5bbaa8c77624d37222020202020202020191710070000000000000000000000000000000b1f3447596b8095a0a9aaa59d8977624c37220d000000000000172c41566c8196abb09a85705b45301b000000000000000d22374c62778ca9baa9947f6a543f2a17150d0b05000000000000132536434a4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b4538271502000000061a2c3d4d6278899ea9b6bbb4ada9a9acb2b6b8b3aca39b938b8786888e9ba3b5b8a7957f6a5443301c08000e23384e63798586868686868278624d3f2f1c01000000000000000014293e54697e93a9beaf9a846f7f949fa39b8f87838285929bacc0b7a68f7a6475869ca6a1998e86838287959eafc2c5b19b86715645321e090000000000000000000e1e2b3a4654606877808991979c9ea7a1a69e9a948b8277655d4c402f1f0f000000000000000000000b1b2937444b5c646f797e84888a8b8b8a87837d766a60564a3e30221200000000000000081834445156585857544b4639281e2d363d4a4e565b5760605659524b44372c1e0e00000000000000000b20344859626c6c6c6c6c6c675f4d392510000000000d22364a5c646c6c6c6c6c6c655d4c38230e000000000000041626333d404242423f3633291b19202e373a414647443f3632281a0a00000000000000090a0b0b0b0b0b0b0b0b0e23384e63788da3c5a48f7a654f3a25100b0b0b0b0b0b0b040200000000000000000000000000000000000d22374c62778b9fb4bec3b7a795806b56402b16000000000000172c41566c8196abb09a85705b45301b000000000000000b1f34475974899fb4ac97816c57422c2c2b2220180d000000000008182530353838383838383838383838383838383838383838383838383838383838383631271a0d00000000000f2035485a667c8b9da5b0b5c1bbc5b8b3ada69e968e867e7772707279859ba5b7b39d8874604b35200b000c2135495b637171717171716d625a4835211100000000000000000011263c51667b91a6bbb09b86716c81979fb1a49c98979ba3acb9c3b39d8874606378889da6aea39b98989ca4afbcc9b8a7937e695438281603000000000000000000000e1b2936434b59626b757c8186898b8b8a88857f786d61594b3f2f21110100000000000000000000000b1927313e4a4f5b63696f7274767675726e6861574b45382e20120400000000000000001626343d414242423f3632281b101b222d36394139454b4b45383d353127190e00000000000000000005182b3b484d565656565656524d41301d0a00000000071b2d3e4a4f565656565656504c3f2f1c0900000000000000081621292b2d2d2d2a211e170b06101b22252b30312f29211e160a0000000000000000000000000000000000000b21364b60768ba6b8a7927c67523d2712000000000000000000000000000000000000000000000000000011263c51667b91aabbced4c5b09b86705b46311b000000000000172c41566c8196abb09a85705b45301b0000000000000005182a3b5c72879cb1af99846f5a4441414037342b1d0d00000000000e1e2b37444b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b44372b1d0d0000000005192b3c4c5e667b87949ba3a4a5a5a79e9890888179716962595b5c6476879db2b7a68e79634e39240e00061a2c3d494e5b5c5c5c5c5b584d483c2b19030000000000000000000f24394e64798ea3c6b29d8872607281949faab2aeacb0b5c1c4b7a595806b555a6379889aa2b3b1adadb2b6c3c6b9ab9e8976614c36210c0000000000000000000000000b1826303b484c5660676c717475767573706a625a4c473a2e2111030000000000000000000000000009151d2d363d494e545a5d576161605458524c463932281a1002000000000000000000081621292c2d2d2d2a211e160b00070f1a21242b28323636312727201d150900000000000000000000000d1d2b34374141414141413c3930231301000000000010202d36394141414141413b382f2111000000000000000000040e1416181818150c0a03000000080d0f161b1c1a140b090300000000000000000000000000000000000000091e32455673889eb3aa947f6a553f2a15000000000000000000000000000000000000000000000000000011273c51667c91a6bdced7c7b09b86715b46311c000000000000172c41566c8196abb09a85705b45301b00000000000000001a2f455a6f849aafb19c87715c575757554c483b2b180500000006192b3c485560606060606060606060606060606060606060606060606060606060606055483b2b1805000000000e1e2f404c5d64747e868c8e908f8d88837b746c645c534d483e4a58687d92a7c4a8937e68533e291300000f1f2c35384646464646464338352b1e0e000000000000000000000c21374c61768ca8adac9d887354606d7f8c9aa2acb1b4bbb4b1a69d8775614b4a5b637784939ea6adb2b4bab4b1a89e8d7c665846331f0a0000000000000000000000000008141c2a3438454b51575c55606160555a554d483c342a1c100300000000000000000000000000000001101b222c35383f4539464b4b4a43363d3633291e160a000000000000000000000000050e1416181818140c090300000000070c0e16161e21201d15120b0801000000000000000000000000000d1820222c2c2c2c2c2c27251d130500000000000002101b22242c2c2c2c2c2c26231c11030000000000000000000000000103030200000000000000000000010607050000000000000000000000000000000000000000000000031628385b70869bb0ac97826c57422d1702000000000000000000000000000000000000000000000000000d23384d62788d9fb1c1c6baa997816c57422c17000000000000172c41566c8196abb09a85705b45301b0000000000000002172d42576c8297acb49f8a746c6c6c6c6a62594834200e0000000b2035485a7074757575757575757575757575757575757575757575757575757575757470594834200b000000000011222f3f4b5660697177797b7a78746e6660554e4a3e37342d3a4c61778ca7a1a195806b56402b160000010f1a21233131313131312e2220190e00000000000000000000000a1f334758748997979794836e594a616979858f979c9faa9f9c9587796357463d4a5962737e8892989d9fa99f9c958a7d675e4c3a2917040000000000000000000000000000010d181f2832363c4237444b4c4b44373f38352b1f180c00000000000000000000000000000000000000070f1a2123292f2933363635302528211e170b03000000000000000000000000000000000103030200000000000000000000000003090b0b0902000000000000000000000000000000000000050b0d17171717171712100a01000000000000000000070d0f171717171717100e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aeaf99846f5a442f1a00000000000000000000000000000000000000000000000000000b2035485a6d8297a3adaea89f8b79634d38230e000000000000172c41566c8196abb09a85705b45301b0000000000000000152a3f556a7f94aabaa89781818181818077624c3c2b190500000d23384d62788a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a77624d37220d00000000000411202e38454b545961646665636054514b4437362d22201f33475874898b8b8b8b816c57422d1700000000060c0e1c1c1c1c1c1c180d0b0500000000000000000000000004172a3a566b808282827f75614c434f5c64707a82878a8b8a868075635b49392d3b48546068747d83888a8b89878078675f4d402f1b0b0000000000000000000000000000000000050a161e21272c273136363531272a2220190e0400000000000000000000000000000000000000000000060c0e141a171e2121201c13130c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b8196abb19c87725c3b2a18040000000000000000000000000000000000000000000000000006192b3c4c617585929899958a7c665b4935210c000000000000172c41566c8196abb09a85705b45301b000000000000000012273d52677c92a7c6b19f97969696969586715a4835200b00000b20354b60758a9fa0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a08f79644f3a240f00000000000002101a2832363a474c4f50504d4a4336353127211a0f0b182a3a4c61767676767675604b36210b0000000000000000000000000000000000000000000000000000000000000c293d51626b6d6d6d6a615746333d4a4e5d646c72757675716a6157493d2c1d2a36434b5660676e73757674716b625a4d41302212000000000000000000000000000000000000000003090b1217151d2021201d15150d0b050000000000000000000000000000000000000000000000000000000000030a0c0c0b0700000000000000000000000000000000000000000000000000000000030a20202020202020202020202020202020202020202020202020202020202020200e0c0700000000000000000007111719202020202020202020202020202020202020202020202020201f1d170e0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8b49f89745947341f0b00000000000000000000000000000000000000000000000000000e1e33465761737d82838078665e4c3c2c1906000000000000172c41566c8196abb09a85705b45301b000000000000000010253a4f657a8fa4b0b0b0acacacacaca48d77624d38220d0000081d31445572889db2b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4a6917c67513c271200000000000000000a151d202a3437393b3a38353025201d15090700000c1e3346576161616161605745321e090000000000000000000000000000000000000000000000000000000000000e2133445156585857544c4639292d363f4b4f575460616054554b46392c1f0f18263038454b5258546061575c554d493c302313040000000000000000000000000000000000000000000000000002080b0c0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e353535353535353535353535353535353535353535353535353535353535353523211a0f010000000000000a19242c2f3535353535353535353535353535353535353535353535353534322b201202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6b1a98c77614c37220c000000000000000000000000000000000000000000000000000003172939465560676d6e6a625a4c40301e0e00000000000000172c41566c8196abb09a85705b45301b00000000000000000d22374d62778c9a9a9a9a9a9a9a9a9a9a8f7a65503a25100000011426375a70859a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f937e69543e291400000000000000000002090c181f2224262523201c130b08010000000003172939464c4c4c4c4c4b4539281603000000000000000000000000000000000000000000000000000000000000041626333d404242423f3633291b1a212e373a36434a4c4a43363633291b0f0108141c2731363d36434b4b46394038352b1e130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b29324a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a39362d1f0f00000000000719293640444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49463d30200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798e9c9c9c8f79644f3a240f0000000000000000000000000000000000000000000000000000000b1b2937444b525859554d483c3022120000000000000000172c41566c81969b9b9a85705b45301b00000000000000000b20354b60738485858585858585858585857b65503b2610000000182d42576d818b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b806b56412b16000000000000000000000000040a0c0f11100e0b070000000000000000000b1b293336363636363632281b0a0000000000000000000000000000000000000000000000000000000000000000081621292b2d2d2d2a211e170b07101b222525303536353025211e170b000000010a151d20272630353633292b2320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711171920202020202014120c0300000000000000000000000000000000080e101c1f20202020201b0b070000000000000000000003162939465e606060606060606060606060606060606060606060606060606060606060605e4a3d2d1a0700000000112436475459606060606060606060606060606060606060606060606060605f5a4e3d1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c617686878787867b65503b2610000000000000000000000000000000000000000000000000000000000b192631353d43444038342b1d1204000000000000000014293f54697f86868686826d57422d180000000000000000081c30435460707070707070707070707070655e4c38230e000001162a3f52636d75757575757575757575757575757575757575757575757575757575756b62513d2914000000000000000000000000000000000000000000000000000000000000000b171e2121212121211e160a00000000000000000000000000000000000000000000000000000000000000000000040e1416181818150c0a03000000080d0f131c2021201c130c0a0300000000000002090b12141c20211e17160d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a19242c2f35353535353529272014070000000000000000000000000003111c23263135353535353530201c130800000000000000000a1e3246577075757575757575757575757575757575757575757575757575757575757575705b4a36210c00000000172c4054656e75757575757575757575757575757575757575757575757575746c5a3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e334657617272727272655d4c38230e000000000000000000000000000000000000000000000000000000000009141d20272d2e2b2220190d0000000000000000000012273b4f6169717171716d63523f2a15000000000000000001142636434b5a5b5b5b5b5b5b5b5b5b5b5b504c402f1c090000000f23354552575f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f56514434210e0000000000000000000000000000000000000000000000000000000000000000030a0c0c0c0c0c0b09030000000000000000000000000000000000000000000000000000000000000000000000000000010303020000000000000000000000070b0c0b07000000000000000000000000000001080b0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000719293640444a4a4a4a4a4a3f3b3225140300000000000000000000000011212f383b474a4a4a4a4a4a463530251808000000000000000c21364b61768a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a79634e39230e00000000192f44596e838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a745847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464c5c5c5c5c5c504c3f2f1c0900000000000000000000000000000000000000000000000000000000000001080b121819150d0b0500000000000000000000000c1f32434f545b5b5b5b57524535230f00000000000000000008182630354545454545454545454545453b382f211100000000061727353f424a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a413d3426160400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112436475459606060606060544f4332200c00000000000000000000000e1e2f3f4c505c5f60606060605b4a43362513000000000000000a1e32465773889e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f907b66513b261100000000172c41566c81969f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa88c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b29333647474747473b382f211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031425323b3f46464646423f352717060000000000000000000008141c2030303030303030303030303026231c110300000000000917232a2d35353535353535353535353535353535353535353535353535353535352b29211608000000000000000000000000000000000000000000000000010b0b0b0b0900000000000000000000000000000000000000000000050b0d13161715120d0b0500000000000000000000000000000000000b151b1d20202020201d1a140a0000000000000000000000000711171920202020201816100600000000000000000000000000000000000000000000000000000000000002091e202020202020100e0800000000000000000000172c4054656e75757575757569614f3b27120000000000000000000005192b3c4c5d657174757575757570605443301c07000000000000031629395b70859bb0c1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a8937e68533e29130000000014293f54697e94a9b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5c6a38e79644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e21323232323226231c11030000000000000000000000000000000000000000000000000812191b1f1f14120c020000000000000000000000000000000000000006141f2729313131312d2a23170900000000000000000000000001080b1b1b1b1b1b1b1b1b1b1b1b1b100e090000000000000000060f1618202020202020202020202020202020202020202020202020202020202016140e0400000000000000000000000000000000000000000000040e1416202020201e13110b0200000000000000000000000000000000070d192022282b2c2a28221f180d0900000000000000000000000000000f1d2830333535353535322f271c0e000000000000000000000a19242c2f35353535352d2a231709000000000000000000000000000000000000000000000000000000000a151d3335353535353525231c11030000000000000000192f44596e838a8a8a8a8a8a7f69543f2914000000000000000000000c2035485a657b868a8a8a8a8a8a8574604a35200b0000000000000014293f54697f94a3b5c1d1d4c4b7b3abafb3b9c5b9babababababababababababac6ab95806b56402b160100000011273c51667c91a6bbcacac8bebab6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6a6917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1d1d1d1d1d100e09000000000000000000000000000000000000000000000000000c1a252d30353529261f140600000000000000000000000000000000000000030c12141c1c1c1c18150f0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081621292c353535353329261f140600000000000000000000000000010f1a212b34383d40413f3d37342a231c110400000000000000000000000b1d2d3a44484a4a4a4a4a47433a2c1c0a00000000000000000719293640444a4a4a4a4a423f3527170600000000000000000000000000000000000000000000000000000a1a2731484a4a4a4a4a4a3a372e21110000000000000000172c41566c81969f9f9f9f96816c57412c170200000000000000000c1c30414d62788a9c9fa99f9f9f8c79645443301c07000000000000000b20364b6074859ba3b4c0cbb7a69d959a9ea7a3a4a4a4a4a4a4a4a4a4a4a4a4a4a4a896816c56412c17010000000f24394f64798ea4c6d6c8b8aba5a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081a2a3842454a4a3e3b322414020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0f0e0d0b08010000000000000000000000000000000000000000000000000a0b0b0b0a070000000000070c0e12141412100b0902000000000000000000000000000000000000041626343d414a4a4a4a483e3b31241406000000000000000000000005131f2d363c484d53555655524c483b382f1f180c0000000000000000000015283a4b585d60606060605c574a3a2714000000000000000011243647545960606060605852453523100000000000000000000000000000000000000000000000000002152738455d5f6060606060504b3f2e1c080000000000000014293f54697e94a9b5b5ae99846e59442f1900000000000000000417293a4d5f6f8399a8b4bab7a696816b5c4a3625130000000000000000091d3245566176859ba2b4c0b39d888084898c8e8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8a7a644f3a240f000000000c21374c61778ca8b9cdbeab9a908b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b806b56412c16000000000000000000000000000000000000000000000000080e101d1f1f1f1f15130d0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012253848555b5f5f534f42321f0c0000000000000000000000000000000000000002080b101518191816120c0a0400000000000000000000000000000000000000010f1a2123252422201d150f0d0700000000000000000000000000000000000000030a20202020201d0f0d07090f1a21232729292825201d150a08000000000000000000000000000000000e2134445156606060605e534e4232251403000000000000000000041323303d4a4e5a62686b6c6a676259504c40342a1c0e0000000000000000001b30445869727575757575726857432f0c0000000000000000172c4054656e75757575756d63523f2a1601000000000000000000000000000000000000000000000000091d3145566f757575757575655d4b37230e0000000000000012273c51677c91a6bcc6b19c86715c3a291704000000000000000a1f334758677d92a1b3c6bfb29d8875614b3d2d180800000000000000000215283847586175849aa2b3b7a69983757477797a7a7a7a7a7a7a7a7a7a7a7a7a7a7976645c4a36220d000000000a1f33475874899eb4c9baa5907c76767676767676767676767676767676767675604b36210b0000000000000000000000000000000000000000000003111c232532343434342a2820150700000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e120b2d42556670747469604f3b26120b150b09020000000000000000000000000009151d20252b2e2f2d2c28221f180c0600000000000000000000000000000000000f1f2c35383a393735312724221b1006000000000000000000000000000000000b161e35353535353224221b1e212d36393d3f3f3d3a363127221b1006000000000000000000000000000014293d51626b757575757368604f43322111000000000000000000122230414d5b636f787d80817f7d7770665e4c473a2c1e0e00000000000000001d33485d72878a8a8a8a8a86725c3a2a180400000000000000192f44596e838a8a8a8a8a826d58422d18000000000000000000000000000000000000000000000000000b20364b60748d8a8a8a8a8a7b65503a2510000000000000000f24394f64798ea4c6c9b39e89745846331f0a0000000000000a1a2e3f4c6176889db3bfc7b3a1917c675746331f0f000000000000000000000a1a293a47576175849aa2b3b3a1998374626464656565656565656565656565656461584a3e2e1b070000000004172a3a5c71879cb1c6bca7927c676161616161616161616161616161616161605645321e090000000000000000000000000000000000000000000011212e373b4749494949403c3325150300000000000000000000000000000000000000000000000000000000000000000000000000010f1a2123282030455b70848a8a7e69533e291d202a211e160a000000000000000000000009192731363b40434443413d37332a211a0e000000000000000000000000000000061a2c3d494e4f4e4c4b443739362d20190e00000000000000000000000000000b1b29324a4a4a4a4a4739362d32363d4a4e52545452504b4538372e21190e00000000000000000000000000162c41566b808a8a8a8a887e69614f402f1e0e000000000000000c1c2f404d5f6779848d92959694928b857b6f6159493c2c1d0d000000000000001b30455a70859a9f9f9f9f89745947341f0a00000000000000172c41566c81969f9f9f9a856f5a362614010000000000000000000000070a0904000000000000000000091d31455673889d9f9f9f927d67523d2812000000000000000c22374c61778ca8baccb9a78b76614c36210c0000000000021528384b5d6d8297a6b8cbbaa999846f5f4d3929170100000000000000000000000c1c2939465761748399a1b2b3a199837460574f4f4f4f4f4f4f4f4f4f4f4f4f4f4c463a2e20100000000000001a2f44596f8499aec4bfa9947f6a544c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b4538281603000000000000000000000000000000000000000000081c2e3f4b505c5e5e5e5e55504333200d000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c35383d353043586e839896816c56412832363f3632281a0a00000000000000000002152737444b505558595856524c473a352c1f1306000000000000000000000000000c2135495b636463626055554e4a3e352c1e1103000000000000000000000003162939465e6060605f5c4f4a3e454b555b63676969676560564f4b3f352c1e130500000000000000000000000b20354b60738399a4a69d937f695e4c3c2c1b0b000000000004172a3a4c5e677d8c9aa2a8aaabaaab9f9a908377635a493b2a1808000000000000182d43586d8298adb5baa88c77614c37220c0000000000000014293f54697e94a9b5b29d87725443301c0800000000000000000a10121d1f1e190d0b05000000000000021527385b70859bb0b5aa957f6a55402a15000000000000000a1f34475974899fb4c9c5a38e79644e39240f0000000000081d324556657b8d9fb5c4c2b49f8b78634d41301b0b000000000000000000000000000c1b2939465660748399a1b2b3a19a8475615746393a3a3a3a3a3a3a3a3a3a3a3633291c1002000000000002172c42576c8197acc1c1ac97826c57423636363636363636363636363636363632281a0a000000000000000000000000000000000000000000000e23374b5d6572747474746a61503c2813000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e524a4336566b809599846e594438454b544b45382816020000000000000000081d31445560656a6d6e6d6b6761584e493d312415070000000000000000000000000e23384e63797a797775716b645c4d493c2f211204000000000000000000000a1e324657707575757572645c4b56606a72797c7e7e7d7a756e655d4d493c3023150700000000000000000000081d3144556176869ca7b39f8c7c655b4939291808000000000a1f334758667c8d9faab0a89f9b9b9ea8b0a1998778635947362614010000000000162b40556b8095aac0c6a48e79644f39240f0000000000000011273c51667c91a6bbb49f8a75604b35200b00000000000004121d24273234342e2220180d000000000000182e43586d8398adc2ac97826d57422d180000000000000004182a3a5c71879cb1c6bba6917b66513c26110000000008182c3d4b6074869cabbccab6a4957f6a5a493523120000000000000000000000000000000b1b2938455660748398a0b2b3a29a84756157463929252525252525252524211f170c0000000000000000142a3f54697f94a9bec4af99846f5a442f2121212121212121212121212121211e160a000000000000000000000000000000000000000000000010253b50657b86898989897f6a55402a150000000000000000000000000000000000000000000000000000000000000000000000000c2135495b636760544a53687d939b86715c3d4a56606a605645321e1100000000000000000b20364b60737b80838482817d776e635b4e42322515040000000000000000000000182d42586d828f8e8c8b8680796e625a4c40302212000000000000000000000c21364b61768a8a8a8a867a645c64757f878e929494928f89837a6f635b4d41332616080000000000000000000114263746586379899eabaa9e8979635746362614010000001325364c6176889eabb09e958a868689929da6a59c8877625443301c0a000000000013283d53687d92a8bdbca6917c67513c2712000000000000000f24394f64798ea4c6bbaa8c77624d37220d000000000000122230393c474a494437342b1d0d0000000001162b40566b8095abc0af9a856f5a36261401000000000000001a2f445a6f8499afc4bea8937e69533e291400000000132536495b6b8095a4b6c9beb19c8674604b3c2c1904000000000000000000000000000000000b1a2838455660738298a0b1b4a29a84756157463a291c1010101010100f0c0a0400000000000000000012273c52677c91a7bcc7b19c87725c3b2a180c0c0c0c0c0c0c0c0c0c0c0c0c0b09030000000000000000000000000000000000000000000000081d33485d72879c9e9e9e98836d58432e18000000000000000000000000000000000000000000000000000000000000000000000004182a3a4e63797d72645c50657b909e8974584b5c64747f74604b3f2f1c08000000000000000e23394e63798e9598999896928b837968604f433222120000000000000000000000152a3f556a7f94a3ab9f9b958e8378655e4c40301d0d0000000000000000000a1e32465773899eab9f9a8570667a86949da5a7a9a9a7a89e988f8479675f5044332616060000000000000000000919293a495b667c8d9fb4a79c8675615443301c130200071c3043546a7f95a6b09e9580767071757d889da6a69a8473604b382715020000000010263b50657b90a5c9bea9947e69543f2914000000000000000c21374c61778ca8b9c8a48f7a654f3a251000000000000d1d30404d515c5f5e594c483b2b1a0a0000000013283e53687d93a8bdb29c87725443301c0800000000000002172d42576c8297acc1c0ab96816b56412c16010000071c30435463798b9fb4c2c5b2a0907b655645321e0e0000000000000000000000000000000000000a1a28384555607382979fb0b4a29a84756158473a2a1c0c00000000000000000000000000000000000f243a4f64798fa4c7c9b49f89745947341f0b00000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758aa5b3b3b09b85705b38271502000000000000000000000000000000000000000000000000000000000000000000000a1f3347586c8192857a6c6163788da88c7661606a7a8694816c5d4b38230e000000000000000b20354b6075899fadaeadabab9f988b7e6a614f402f1a0a0000000000000000000012273c51677c91a4a4a9b1aaa0988a7c665e4c3b2b18050000000000000000031629395c71869bb1b49f8c767c8c9ca4b2b4b2b1b3b9b9b4aea19a8a7d6b625144332413020000000000000000000c1c2c3d4c5e6a7f94a0b2a4998372604b41302010000b20354a6073889db3a996806b615756606778879db2a2937e695645311d09000000000e23384e63788dabbcc1ab96816c56412c17010000000000000a1f33475874899eb4bca7927c67523d27120000000005182b3b4d5f677274736e6259483827150200000011263b50667b90a5c9b49f8a75604b35200b00000000000000152a3f546a7f94a9bfc3ae98836e59432e19000005182b3b4a6072859aa9baccb9a798826d5d4b38281500000000000000000000000000000000000000000a1a27374455607281969fb0b4a39b85766158473a2a1c0c000000000000000000000000000000000d22374c62778ca9bacdbaa98c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000091e34495e73899eb3c8b29d88735645311d09000000000000000000000000000000000000000000000000000000000000000000000c22374c6177899f9a8c817668758a9f8e7964737f8b9c9f8b7b65503b251000000000000000081d31445570869ba9aaaeb4bab4aa9f937f6a5e4c382815020000000000000000000c21364c6176868d8f939ca4b2a89e8b7c66594834200f000000000000000000192e44596e8399aebcab95808b9faaaba89f9c9c9ea7acb4bbb3a89e92806b625142312010000000000000000000000f1f2f404f616d8298a3b3a195806b5f4d3e2d1d0d0e24394e63798ea6b49f8a76614c46454b5a657b8fa1b29d8774604b36200b000000000b21364b60768a9fb5c3ae99846e59442f190000000000000004172a3a5c71879cb1bfaa947f6a553f2a15000000000b20344859677d8789898377625645311d0e0000000e23384e63788dabbcbbaa8c77624d37220d0000000000000012273d52677c92a7bcc6b09b86715b39281603000b20344859687e93a2b4c7c1b39e8977624c3f2f1a0a0000000000000000000000000000000000000000000a1927374454607281969eafb4a39b85766158473a2a1d0d0000000000000000000000000000000b20354a6075899fb4c9c7a48f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000061c31465b71869bb0c6b49f8a75604b36200b000000000000000000000000000000000000000000000000000000000000000000000c21364b6175808b9a9f96887d72879c907b7884949f9f958579634e38230e0000000000000001142637576c81939495999fa9b5bbb49f8d7c665645321d090000000000000000000a1f3346586174787a7e8698a0b2a99e8977624d3d2d1a070000000000000001172c41566c8196abc9b09e959fa89e968f898787898e969faab5b9b49e95806b604e3e2e1a0a00000000000000000001122232434b6075859ba6b09e917d675c4a3b2a1a13283e53687d93a8af9a856f584633323c4b5d6f8499aea6937d685339291703000000091e32455673889db3c6b19b86715c39291703000000000000001a2f44596f8499aec1ac97826c57422d17020000000d22374d62778b9c9f9e998574604b3c2c190600000b21364b60768a9fb5c8a48f7a654f3a25100000000000000010253a4f657a8fa4c7c8b39e88735746321e090b1b2f404c6277899eb3c0c9b5a3937e6959483421110000000000000000000000000000000000000000000000091926364354606c80959eafb4a39b85766158473b2a1d0d0000000000000000000000000000071c30435472879cb1c7bca6917c67513c2712000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e8398aec3bcab8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000091e324657616b7984919d9e9285829895808a9aa29d8c8074635b4935210c00000000000000000c22374c61777e7f80838a9ba3b5bcab9d8774604b36200e0000000000000000000417293a465560636469748298a2b4a799836e5b4a36210c000000000000000014293f54697e94a9bebcb0aba39b89807a7572717479818c9ca4b3bcaf9e937e685c4b3828150200000000000000000004151e3245566278889da9b49f8a7a6459473827152a40556a7f95aaac97816c573a291d2e3f52677c91abb09a85705746331e0a000000021628385b70869bb0c5b39e89735746331e0a00000000000002172c42576c8197acc1af99846f5a442f1a000000081b2e3f556a7f94a9b4b3a3947f6a5a493520120000091e32455673889db3bca7927c67523d2712000000000000000d22374d62778ca9baccb8a78b76614b36210c1729394c5e6e8399a7b9ccbcab9b8573604b3b2a180300000000000000000000000000000000000000000000000009182536434a626b80949daeb5a39b86766159483b2a1d0d00000000000000000000000000001325365a6f849aafc4bea9947f69543f2a140000000000000000000000000000000000000000000000000000000000050b0d121414120e0c06162b41566b8096abc0c9a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000003162839464b5b636f7c88959e9a8b9f9f8a9e9f97877b6b6055493d2c1a0600000000000000000a1f34475961696a6b6e77859ba9bab7a5937e69533c2c19060000000000000000000c1c2937444b4d4f566072849ab0b3a18e79634e39230e000000000000000011273c51667c91a6bbc9b5a39b85786b6460545c5c646c79869aa2b3bcb49f8b7a645645321d0d00000000000000000000031628384859647b8b9fb4a99d8777625645311d2c41566c8196abab95806b56402b1621364c61768b9fb49f8b76614b36210c00000000192e43596e8398aec3b8a78b76614b36210c00000000000000142a3f54697f94a9beb19c87725c3b2a180400000e22374b5d72879cb2c7c2b49f8b78634d41301b0b00021628385b70869bb0bfaa947f6a553f2a15000000000000000b20354b60758a9fb4c9c5a38e78634e39230e1e334657667c91a1b2c5c4b49f8c7a645443301d0d0000000000000000000000000000000000000000000000000000081825304451626b7f949db5b5a49c86776259483b2a1d0d00000000000000000000000000172d42576c8297acc1c1ac96816c57412c17020000000000000000000000000000000000000000000000000000080d1920222729292823211a13293e53687e93a8bdbda8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000b1b28323d494e5f677580899a9faaaa9f9d8d8176655d4b44372c1f0f00000000000000000004182a3a474c5454555962778a9fb4c3b19b86715a4935200c000000000000000000000c192731353838455464798ea3b5ab96816c563c2b1905000000000000000f24394f64798ea4c6c6b09b857562594f4b433e4a4f5b6375839aa3b5baa99c8674604b3b2b1905000000000000000000000a1a2b3b4b5d687e929fb0a59a8474604b42322c41566b8196abab96806b56412b161e33465772879db2ab907a65503b251000000001162b41566b8096abc0c5a38e79634e39240e0000000000000012273c52677c91a7bcb49f89745947341f0b00031628394f657a8fa5b6cacdbaa999846f5f4d3929170300192e43586e8398adc1ac97826c57422d1700000000000000081c30435472879db2c7bba5907b66503b26192e3e4b6175879db2bfcbb8a696816c5c4a3626140000000000000000000000000000000000000000000000000000000008131c344450616a7f939fabb5a49c86776259483b2a1d0d000000000000000000000000152a3f556a7f94aabfc4ae99846f59442f1a0000000000000000000000000000000000000000000000000003111c232b34383c3e3f3d39362c21263b51667b90a6bbc0aa95806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000b161e2c35414d57616c79848a9fb39d887e74675f4e4a3d33291b12040000000000000000000c1c2a34373e3f3b48596d8297acc2b5a38d78634d38230e000000000000000000000009151d202327364a5c70869bb0b39d88735a4835200b000000000000000c22374c61778ca8b9c0ab96816b57483b35302d363d49576175859ba8bab6a4957f6a594834200c00000000000000000000000d1d2e3f4e606c8196a2b4a297816d604f3f2f3f556a7f94aaac97826c57422d171729395a6f8499afa8937d68533e28130000000014293e53697e93a8bebba6907b66513b2611000000000000000f243a4f64798fa4c7baa98c77614c37220c00091e3246576d8297acc3c8c5c7b3a1917c675746331e1000162b41566b8096abc0af9a846f5a36251300000000000000011426365a6f859aafc4bda8937e68533e2927374b5c6c8196a6b7cbc0b39d8876614c3e2d1808000000000000000000000000000000000000000000000000000000000000162633435061697e8d9fabb5a49c86776259483b2a1d0d000000000000000000000012273d52677c92a7bcc6b19c87715c3a2a170400000000000000000000000000000000000000000000000816212e373c484d515454524e493d3633394e63788ea3c4c2ad98826d58432d180000000000000000000000000000000000000000000000000000000000000000000000000c1c2a36434b5c6475818c9a9f9ea69e9d93877d70635b4b46392f2212000000000000000000000c181f22292a2b3b51667c91a6c8c1a7927d67523d281200000000000000000000000001080b0e182d3d566b8095abb7a68d77624d38220d000000000000000a1f33475874899eb4c3ae99836e59392b201c1b222c39465763788a9fb4c2b49f8b78624d3a2a18040000000000000000000000102031424b6073849aa5b19f937e695d4b3c3e53687d93a8ae98836e59392816192e43586e8398adaa957f6a55402a150000000011263c51667b91a6bbbda8937e68533e2913000000000000000d22374c62778ca9bac7a48f79644f3a240f000c21364b6176899eb4c0b4afb5bcb39d8876614c3e2d180813293e53687e93a8bdb19c87725443301c0700000000000000182d42586d8297adc2c0ab95806b56402b314455647a8c9fb4c4c7b4a2927d6758463320100000000000000000000000000000000000000000000000000000000000000008162533434f60697e8d9fabb6a49c86776259483b2a1c0c0000000000000000000010253a4f657a8fa4c8c9b49e89745847331f0a00000000000000000000000000000000000000000000081626343f4b505a6267696967635b554c463a4b60768ba6b8c5b09a85705b372715020000000000000000000000000000000000000000000000000000000000000000000004172a3a4754606a7a86969f9f8a889e898a9d9d9284796b61574c402f1c0900000000000000000000040a0c141523384d62788daabbc0ab96816b56412c160100000000000000000000000000000012283d52677d92a7c4a6917c67513c27120000000000000004182a3a5c71879cb1c6b19b86715c39291708070f1b2939495a697f94a5b7baa996816c5847331f0a000000000000000000000002131d3144556176879da8b49f8c7b655a493950657b90aab19c86715745321e182d42576d8297acab95806b56402b16010000000e24394e63798ea3c5c0ab96806b56412b16010000000000000b20354a6075899fb4bca6917c67513c271206192b3c52687d92a8b9b4a29a9fabb7a696816c5c4a36261411263b51667b90a6bbb49f8975604a35200b00000000000000152a40556a7f95aabfc3ad98836e58432c3c4b6073869cabbccebaa99a846f5f4d3a291702000000000000000000000000000000000000000000000000000000000000000007152532424f60687e8d9fabb6a49c86776259483a291a0a0000000000000000000d22384d62778daabbcdb9a88c76614c37210c0000000000000000000000000000000000000000000316263444515d6570777c7e7e7d79726a61584c455673889db3c7b29d88725544311d08000000000000000000000000000000000000000000000000000000000000000000000a1f33475861727f8b9ca49c8b7d889d897c88969f9a8c8175665e4c38240f00000000000000000000000000000b20354b60758a9fb4c3ae99846e59442f190000000000000000000000000000000010253b50657a90a5baaa947f6a553f2a1500000000000000001a2f445a6f8499afc4b39e89735746331e0a00000b1b2c3c4b6074879db2c6b49f8a77614c37220f00000000000000000000000001152737475863798a9eabaa9e89786257464b61768a9fb49f8a76604b3621182d43586d8298adaa95806a55402b15000000000c21364c61768ba7b9c3ad98836e58432e1900000000000000071c30435472879cb1bea9947f69543f2a140b2035495a70859aafc6af9a858d9fb5b49f8c7a645443301c0e23394e63788ea3c5baa98c77624c37220d0000000000000013283d52687d92a7bdc5b09b85705b3836495a6a7f94a4b5c9c3b49f8b79634e41301b0b0000000000000000000000000000000000000000000000000000000000000000000007142432424e60687e8d9fb5b6a49c86776258473828160300000000000000000b20354b60758a9fb4c9c6a48e79644f39240f0000000000000000000000000000000000000000001121344451626b7b858b919394928e877f76665e4a5b70869bb0c5b49f8a75604b36200b000000000000000000000000000000000000000000000000000000000000000000000c21374c617684949f9f96867973889d8f7a76818c9a9f96887c66513b26110000000000000000000000000000081c30435472879db2c6b19c86715c3a2917040000000000000000000000000000000f243a4f64798fa4b9ab96816b56412c160100000000000002172d42576c8297acc1b8a78b76614c36210c0000000e1d324556697e93a8b9baa8937e69543d2c1a0600000000000000000000000009192a3a4a5b667c8d9fb5a79c86756154465770859bb0aa917c6752402f1f2d3e596f8499aea8937e69533e2914000000000a1f33465874899eb3c5b09b85705b38281502000000000000001325365a6f849aafc1ac96816c57412c171325364d62788c9fb5bbaa917d8399aabbab9b8573604b3b2b1821364b61768ba7b8c7a48f79644f3a240f0000000000000010253b50657a90a5c9c8b29d8873564d4e5463788a9fb4c2cab6a595806b5b4935231300000000000000000000000000000000000000000000000000000000000000000000000006142431424e60687e939dafb6a49c8676615645321e140200000000000000081c30435472879db2c7bba6917c66513c2711000000000000000000000000000000000000000008182f3f51626b808d9b9faba9a9a7a59d94887c6b60546e8398adc3bcab8d78624d38230d000000000000000000000000000000000000000000000000000000000000000000000b20354b6074859b9d8d80746371869b937e686c7984929d917c67523c27120000000000000000000000000000011426365a70859aafc5b39e89745846331f0a0000000000000000000000000000000e23394e63788ea3b8ac97826d57422d180200000000000000152a3f546a7f94a9bfc5a38e79634e39240e000000021528384b6176899eb4c6b19b86715b4935210c000000000000000000000000000c1c2d3d4d5e6a7f95a0b2a4998372604a54697e93a7af9a846f5e4c3d34384a5c72879db2ab917b66513c2611000000000417293a5c71869cb1c6b39d88735645321d0900000000000000172d42576c8297acc1ae99846e59442f191c3043546a8095abbcb49f8a76798c9fb4b5a3937e69594834201e32465773889eb3bca7917c67523c2712000000000000000d23384d62788dabbccab59f8b756363636672849aa9bacdbfb29d8775604b3d2c1a050000000000000000000000000000000000000000000000000000000000000000000000000006142331424e606a7f949eb0b6a49a8474604b4332201000000000000000011426365a6f859aafc4bea9947e69543f291400000000000000000000000000000000000000001325364b5d6b80969fabb5bcc9bec3b7b2a69d918072606b8095abc0c9a5907a65503b251000000000000000000000000000000000000000000000000000000000000000000000081d31445562788a877b6b60566e839996806b5b63707d888773604b35200b000000000000000000000000000000182d42586d8297adc2b9a88b76614c36210c0000000000000000000000000000000d22384d62778da2b7ad98836e58432e19030000000000000012273d52677c92a7bcbba6917b66513c2611000000000a1e3346576d8297adc8b5a38d78634e38230e00000000000000000000000000000f1f30404a60728398a4b3a195806a5f4b6176899eb3a2907c665b4c484a56647a8ea5b59f8b76614c37210c0000000000192f44596e8499aec3b59f8a75604b36200b00000000000000152a3f556a7f94aabfb19c86715c3a291720354a6073879db2c5ae99846f6c8197a6b7b39e8977624d402f1a28395b71869bb0bea9947f69543f2a14000000000000000b20364b60758a9fb4cabcab907b7878797b8399a2b4c7c5b2a0907b665645321f0f00000000000000000000000000000000000000000000000000000000000000000000000000000005132431424f616b8096a1b3b4a299836e614f3e2e190900000000000000182d42586d8297adc2c1ab96816c56412c1701000000000000000000000000000000000000071c304354657b909eb5bcc9bfb3aea6a4a5abb39e958172687d93a8bdbda7927d68523d28130000000000000000000000000000000000000000000000000000000000000000000001142637495a657b76655d4b566c819698836e584e5f67767a645544311d08000000000000000000000000000000152b40556a8095aabfc6a38e79644e39240f0000000000000000000000000000000d22384d62778da2b7ad98826d58432d18030000000000000010253a4f657a8fa4c8bea9937e69543e2914000000000317293951667c91aabbc1a8937e69533e2914000000000000000000000000000001121c3043546175869ca7b59f8d7d675c576a8095a3b39e89796a62595c6474849ab0b09b85705847331f0a0000000002172c41576c8196acc1bcab8d78634d38230e0000000000000012273d52677c92a7bcb39e89745846331f293950657b90a5b7b8a7917c676176889db3b9a898836e5e4c38282e44596e8399aec1ac97816c57422c1702000000000000081d31445573889db2c8c9aa99908d8d8e9199a1b3c0c5b8a798836e5e4c382816010000000000000000000000000000000000000000000000000000000000000000000000000000000006142432434b60728399a4b6b2a1947f695c4b37271501000000000000152a40556a7f95aabfc3ae99846e59442f19000000000000000000000000000000000000000b20354a6073869cb1bccfbaada199918f90969ea89f96816c7b90a5c9bfaa95806a55402b15000000000000000000000000000000000000000000000000000000000000000000000009192c3c4b5d6561584b3f54697e949b86705b414d5761645d4b3726140100000000000000000000000000000013283d52687d92a7bdbba6917b66513c26110000000000000000000000000000000d22384d62778da2b7ac97826c57422d1702000000000000000d22374d62778caabbc0ab96816b563d2d1a07000000000c21364b61768b9fb4c3ae99836e593b2a180400000000000000000000000000000013253646576278899eaaab9e8a7a64586074859ba7a79e8a7f77737479849aa2b4a3927d67523a2a17040000000000142a3f54697f94a9bec9a5907b65503b26100000000000000010253a4f657a8fa4c8b9a88b76614c36213346576d8298adc3b39e88756058677d91a1b3b2a0907b665645322c41566b8196abc0ae99846f59442f1a00000000000000021527375b70859ab0c5c8b7aaa5a2a2a3a6afb3bfc7b8a79e8978624d402f1a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000006151c3043546175869caabbb49f8b7a645544311d0b00000000000013283d52687d92a7bdc6b19b86715c3a29170400000000000000000000000000000000000010263b50657b90a4b6cabead9c93837c797b818a9aa29f927e798dabbcc2ad98826d58432d180000000000000000000000000000000000000000000000000000000000000000000000000e1e2e3f4b504c463a3c51667c919d8873564539464b4f4b3f2e19090000000000000000000000000000000010253b50657a90a5c9bea9937e69543e29140000000000000000000000000000000d22384d62778da2b7ab96816c56412c1701000000000000000b20354b60758a9fb4c6b19b86715b4a36210b00000000091e32465771869cb1c6b39e88735947341f0b000000000000000000000000040a0c10182839485a657b8c9fb4a89d877661566379899da6a89f948c89898e9aa2b4a79b8574604b36200c00000000000012273c51677c91a6bcbda8927d68533d2813000000000000000d22384d62778daabbc6a38e79644e3924364c61768a9fb4c1ab96816c564d5f6f8499a9bab29d8775604b3d2c3e54697e93a9beb19c87715c3a2a180400000000000000182e43586d8398adc2d8c8bebab8b8b8bbc4c7cdbaa99e897b6559483422120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364657647a8b9fb4bbaa9c8673604b39281603000000000010253a50657a8fa5c8c9b39e89745846331f0a000000000000000000000000000000000004182a3a586d8298adc2c6b2a0937e6e6764656b778498a09f8b7a8b9fb5c5af9a85705a3727150100000000000000000000000000000000000000000000000000000000000000000000000011212e373b363329394f64798e9a8b76604b3633363a372e201000000000000000000000000000000000000d23384d62788dabbcc0ab96816b56412c160100000000000000000000000000000d23384d62788da2b7aa95806a55402b150000000000000000081c30435472879db2c7b5a38e79634e3929170300000003162839586d8297adc2b8a78c77614c37220c00000000000000000000090c181f222527262b3c4b5d697e939fb1a59a8473605b63798899a1afa9a79e9ea7afb3a69d8979635544311d080000000000000f243a4f64798fa4c7bfaa95806a55402b15000000000000000b20354b60758a9fb4bba6917b66513c2c3d53687d93a9bab5a38e79644e414d62788a9fb4b6a595806b5b49353c51667b91a6bbb49e89745847331f0a00000000000001162b40566b8095abc0d6c5b9b3a8a8a8abb3b7c4b49f8a7a68604e42312212020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081829394a5c6a8095a6b7b5a4937e695746321e0900000000000d23384d62788daabbccb9a78b76614c36210c00000000000000000000000000000000000a1f34475972889db2c7c3ad98826d60514f505962738298a19b86889eb3c7b29d88725544311d0800000000000000000000000000000000000000000000000000000000000000000000000003111c2325211f21374c617684858477624d37222125221b100200000000000000000000000000000000000b20364b60758a9fb4c3ae99836e59442e190000000000000000000000000000000d23384d62788da2b7a9947f69543f2a140000000000000000011426365a70859aafc5c2ab96816b5746331e0b00000000152a40556a7f95aabfc5a58f7a65503a2510000000000000000002111c232a34373a3c3c39363f4e606c8197a2b4a297816c605b637884919a9faaa8a9a8a89e96887a645b49372715020000000000000c22374c61778ca9bac2ad98826d58432d1800000000000000081c30435472879db2bea9937e69543e35495b70859bb0c7b19b86715c4a36495a6a7f94a4b5b49f8b79634e41394e63798ea3c5b9a88c77614c37220c0000000000000013283e53687d93a8bdccb9a79e929293969da6b3baa99f8b7e68604e402f2010010000000000000000000000000000000000000000000000000000000000000001080b0c0a03000000000000000b1b2d3e4b6075889db2c2b39e8975614b36210f00000000000b20354b60758a9fb4cac5a38e79644e39240f00000000000000000000000000000000000c22374c61778ca5b7cab7a58e79634e423a3b485560738399a39b9ea6b8cab49f8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000080e100c0a1f3347586170707062594834200c0f0d0800000000000000000000000000000000000000081d31445573889db2c6b09b86715b3928160300000000000000000000000000000e23384d63788da2b8a9937e69543e2914000000000000000000182d42586d8297adc2c9b39e8976614c3929170300000013283d52687d92a7bdbda7927d68523d28130000000000000009151d2f383a474c5052514f4b45424b6073849aa5b19f937e685d5a626f7c848a9093949390898176645c4a3d2c1909000000000000000b1f34475974899fb4c5af9a85705a37261401000000000000011426365a6f859aafc0ab96816b5641374e63788da3b4baa9937e69533e2d3c4b6074869cabbaa99a84705f4e3a4c61768ba7b9c6a48e79644f39240f0000000000000011263b50667b90a5bbc9b39e897e7d7e818899a1b3baa99f927e685e4c3e2e1f0f000000000000000000000000000000000000000000000000000000000a0f11141c20211e170b07000000000000101e324557687e93a8b9b9a7937e68533d2c1a0600000000081d31445572889db2c7bba6917b66513c2611000000000000000000000000000000000010253a4f657a8fa4c3c7b29d87725b4a36242b3744556175879cabb3b8c4cebbaa8d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a474c5a5a5a4d483b2b180500000000000000000000000000000000000000000000021527375b70859ab0c5b39e88735746321e0900000000000000000000000000000d22384d62778da2b7a9937e69543e2914000000000000000000152b40556a8095aabfccb9a7947f6a5746331e0f00000012273c51677c91a6bcbea9937e69543e291400000000000009192731404c505961656766646056504b556177879da9b49f8c7b655a4d5e666f777b7d7f7d7b756b61584a3e2d1f0f000000000000000004182a3b5c72879cb1c7b29d87725544311d0800000000000000182d42586d8297adc2ae98836e594344556b8095abc1b49f8a76614c3721314455657a8d9fb5b4a2927d685847465774899eb3bca6917c67513c2712000000000000000e23394e63788ea3c5cab49f8a7468696c758399a2b4bab49f8c7c665c4b3d2c1d0d0000000000000000000000000000000000000000000000000004121d2427263035363329221b100200000000031628394b6175899eb4c5b19c86725b4935210c00000000011527375b70859ab0c5bea9937e69543e2914000000000000000000000000000000000011263b51667b90a6bbc3ae99836e593d2d1a1927374657657b8c9fb4c7d5d9c8a58f7a65503a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a333745454537342b1d0d000000000000000000000000000000000000000000000000182e43586d8398adc2b8a78b76614b36210c00000000000000000000000000000c22374c61778ca1c5a9947f6a543f2a1500000000000000000013283d52687d92a7bdd6c5b39e8876614c3d2d1b0a000011263b51667b90a6bbbfaa947f6a553f2a15000000000008182737444b5e6670777a7c7b79756e655d4d59647a8a9fb4aa9e887862574c51586166686a686560564c463a2d200f010000000000000000001a2f455a6f849aafc4b49f8a75604b35200b00000000000000152a40556a7f95aabfb09b86715b394b6074889db2c4ae98836e5847331f27374b5d6d8297a6b8b39e8876614c3f5c71869bb1bea9947e69543f2914000000000000000b21364b60768ba6b8cbbbaa8d776253576174849aa4b6bbaa9f8b7b645b493b2b1c0c000000000000000000000000000000000000000000000000122230393c36434b4b4639362d201000000000000a1e3246576d8297acc2b6a48d78634e38230e0000000000182d43586d8298adc2c0ab96816b56412c16010000000000000000000000000000000012273d52677c92a7bcc0ab96816b56412c16091928394b5d6c8197a9bacdd2bda7927d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f213030302220180d00000000000000000000000000000000000000000000000000162b40556b8095aac0c5a38e78634e39230e00000000000000000000000000000b21364b60768ba7b9ab95806b56402b1600000000000000000010253b50657a90a5c9d9cbb8a696816c5c4a392816030012273c52677c91a7bcbfaa957f6a55402a1500000000001325364455606d7b858b8f91918e89837b6e625a5c677d919eb0a69b8575605443474c51535453504b453833291c0f0100000000000000000002172d42576c8297acc1bbaa8d77624d38220d0000000000000013283d52687d92a7bdb39e8873574650667b90a6b7b7a6907b66503a2a17192e3f4c6176889eb3b8a697826d5d4b596e8499aec1ac96816c57412c1702000000000000091e32455673889eb3c8c8a48f7a654f46566176869ca6b7baa99e89796359483a291a0a000000000000000000000000000000000000000000000a1d30404d5158546061574f4a3e2d1a0a000000000316283952677d92a7bcc2a8937e68533e29130000000000162b40556b8095aac0c3ae99836e59442e19000000000000000000000000000000000012283d52677d92a7bcbfaa95806a55402b15000b1b2e3f4d62778a9fb4c8d9bfaa957f6a55402a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1b1b1b0d0b05000000000000000000000000000000000000000000000000000013283e53687d93a8bdbba5907b66503b26110000000000000000000000000000091e32455774899eb3ad98836e583c2c190b05000000000000000e23384d63788dabbccfd5c5b49f8c79645745321e140913293e53687e93a8bdbea9937e69543e291400000000071c304354607382909a9faba7a6a89e98908378645c5f6b8095a1b3a3988272604a40373b3e3f3e3b3631271f170c000000000000000000000000152a3f556a7f94aabfc8a48f7a654f3a25100000000000000010253a50657a8fa5c8b8a78b76614b586e8398aec4b29d8874604b35200c101f334758677d92a2b4b59f8d7a6455566c8196abc1ae99846e59442f1900000000000000031628385b71869bb0c6bca7927d67523847586278889da7b9b8a79d8778625847382819090000000000000000000000000000000000000000000f24394d5e666d71757672645c4a38281603000000000d23384d62788da2c6c2ad98836d58432e18000000000013283d53687d92a8bdc6b09b86715b392916030000000000000000000000000000000011263c51667b91a6bbbfaa947f6a553f2a15000010203448596b8096aabbcec2ad97826d58422d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5bbbda8937e68533e29130000000000000000000000000000031628395b70859bb0b19c87725a49352220180d0000000000000b20364b60758a9fb4cac5b8b3aa9c8675604b44312619182d3d566c8196abc1bda8927d68533d2813000000031729394a60728398a0afb3a9a2a1a3a9ada199887a645c60728399a4b2a0947f6a5e4c3d2d282a2825201d150a040000000000000000000000000012283d52677d92a7bcbca7927c67523d2712000000000000000d23384d62788daabbc5a38e78634e61768a9fb4c0aa95806b5544311d080417293a4d5f6f849aa9baab9c86736054697e94a9beb19c86715c3a29170400000000000000192e43596e8398aec3bfaa957f6a55403a485a6379899ea9bab7a59c867661564537261401000000000000000000000000000000000000000011273c51667c82868a8b877a645645321e08000000000b20364b60758ba8b9c5af9a85705a45301b000000000010263b50657b90a5c9c8b39e89735746321e0a0000000000000000000000000000000010253a4f657a8fa4c5c0aa95806b55402b16000005182b3b4d62788b9fb4cac5af9a85705a37261401000000000000000000000000000007111719202020202014120c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788da3c4c0ab95806b56402b16010000000000000000000000000000152a40556a7f95a9b6a48d78624d4037342b1d0d0000000000091d31455673889db2c8b8a69e9ca497826d624b44372c27364a5b71869bb1c6c4a5907b65503b26100000000a1e334657697e93a1b2a79e938d8b8e949ea7a69e8a7a64586175869ca7b59f8d7c665b4a3a2a1913100b090200000000000000000000000000000010253a4f657a8fa4c8bfaa947f6a553f2a15000000000000000b20354b60758a9fb4bba5907b6653697e93a9bab4a28d78634d37261401000c1c30414d63798b9fb4b5a4947f695a667c91a6bbb39e89745846331f0a00000000000001162c41566b8196abc0c2ac97826d57422b3c4a5b657b8b9fabbcb5a49a8474605544311d16060000000000000000000000000000000000000014293e53697e939b9fa59d8775604b36261401000000081d31445574899eb4c6b19c87715c47321c00000000000e23384e63788dabbcccb8a78b76614b36210c000000000000000000000000000000000d23384d62788da7b8c1ac97826c57422d170000000d2035485a6e8399aec5c7b29d87725544311d08000000000000000000000000000b19242c2f353535353529271f14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba6b8c3ad98836e58432e190000000000000000000000000000000d22374d62778b9fb4ac96816c5e514d483b2b180500000000021527385b70859bb0c5b39e88879ca095806b6055493c38455463798ea3b5c9b7a68c77624c37220d0000000c21364b6176899eb3a99e897e7876797f899ba3a89d877661576379899eaaab9e8a79635847372715010000000000000000000000000000000000000d22384d62778daabbc1ac97826c57422d1702000000000000081d31445572889db2bda8937e685b71869bb0c6b09a85705b49351909000000132135495b6a7f95a4b6b49f8a786264798ea4c6b9a78b76614c36210c0000000000000014293e53697e93a8bec4af9a856f5a36262d3d4b5d677d8d9fb5bdb4a2998373604b44332414050000000000000000000000000000000000000d22374c62778b9fb4b6a5937e685443301c0f000000091e32455674899eb3c8b39d88735e48331e00000000000b20364b60758a9fb5cac5a38e79634e39240e000000000000000000000000000000000b2035495a73899eb3c4af9a846f5a3d2c1a06000005192b3c50667b90a6b8cab49f8a75604b35200b0000000000000000000000000019293640444a4a4a4a4a3e3b322414000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889eb3c5b09b85705b3828150200000000000000000000000000000b203448596b8095a1b49f8d7c6d6662594834200b0000000000192e43586e8398adc3b49f8b7a8c9f9e958073635b54535660728399afc1c8b39d88735947341f0b00000114263654697e93a7b49f8b7a696261636977859ba7a598836e5c5b657c8c9fb4a89d8776615544311d130200000000000000000000000000000000000b20354b60758a9fb4c4af99846f5a442f1a00000000000000011527375b70859ab0c0ab95806b63798ea3b5b9a8927d68523c2c190000000006192c3c4b6074869cb1baa899836e61768ca8b9c5a38e79644e39240f0000000000000011263c51667b91a6bbc7b29c87725443301c2e3f4d5f697f949eb0beb3a197816d6250423223120300000000000000000000000000000000000b2034485970859ab0c1b19c8673604b3d2c1e120a060f21364b60768ba8b9c7b19c87725c47321d0000000000091d32455673889db3c8bba6907b66513b26110000000000000000000000000000000006192b3c5a6f859aafc4b39e88735b493521080000000e20354b6074889eb3c8bbaa8d77624d38220d0000000000000000000000000818364754596060606060544f42321a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628385b70869bb0c5b39d88735645321d09000000000000000000000000000005182b3b4b607383979fab9f8d827c77624d37220d0000000001162b40566b8095abc0bbaa8d787f94a09e9684786f69686b748197a1b3c7bfac97816c573b2a18050000081c3043546f849aafab96816c5c4d4c4e596277899eb3a08e79644e5e697f94a0b2a59a8473604b423120100000000000000000000000000000000000081d31445572889db2c7b19c87725c3a2a180400000000000000182d43586d8298adc2ad98836d6b8196abc1b49e8976614b36210e00000000000e1d314556657b8fa0b1b3a1917c6674899eb4bba6917b66513c2611000000000000000f24394e64798ea3c6c9b49f8a75604b35202130414f616c8096a0b2bfb19f95806b604f41302111010000000000000000000000000000000005182b3b51667c91a3b5b5a4937e685b493c30211f1a212d3d50657a90a5c6c5b09a85705b45301b0000000000021528385b70859bb0c5bea8937e69533e29140000000000000000000000000000000000152b40556a8095aac2b8a78d78634e362513000000081d3144556c8197acc1c8a48f7a654f3a251000000000000000000000000114263654656e757575757569604f382816020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aec3b59f8a75604b36200b0000000000000000000000000000000d1d3144556074828f9aa29f9791806b56412b16000000000013293e53687e93a8bdc8a58f7a6d8297a0a29a8b847f7e8087979fb1bfc6b3a18f7a644f3a250f0000000b20354b6075899eb4ab8f7a644f3e363a4759697e93a9ae98836e594f616d8298a3b4a296816c604e3f2e1d0d00000000000000000000000000000000011426375a70859aafc5b49f89745947341f0a00000000000000162b40556b8095aac0b09b857074889eb3c3ad97826d5746321e0a0000000000021527384b5d6d8297a7b8b29d877571869cb1bea9937e69543e2914000000000000000c21364c61768ba8b9ccbaa98c77624d3722132332434a60728298a2b4bdaf9e937e695f4d3f2e200f00000000000000000000000000000000000d24394c5e71859bb0bdb49e8a79635b4d4036332c363d4a5c6d8297acc2c8ad98826d58432d18000000000000192e43586e8398adc3c0ab96806b56412b1601000000000000000000000000000000000e24394e63798ea4b6c5a9947f695443301c0700000115273752677d92a7bcbca7927d67523d28120000000000000000000000081c3043546e838a8a8a8a8a7e695645321e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8096abc0bcab8d78634d38230e000000000000000000000000000000021527374556606d7a859aafad98836e58432e19000000000011263b51667b90a6bbbca7927d677382979faa9f999493969da5b1bdc7baa899846f5c4b37220d0000000d22374c62778ca8b49f8a76604b36212a3b4c61768a9fb49f8b77614c4b6074859ba6b09f927e685d4b3b2b1a0a00000000000000000000000000000000182d43586d8298adc2baa98c77614c37220c0000000000000013283d53687d92a8bdb29d88737c91a6b8b6a48f7a654f392916030000000000000a1a2e3f4c6177899eb3b7a596806f8499aec0ab96816b56412c16010000000000000a1f33465874899eb3c9c7a48f7a644f3a250f141c3043546074849aa4b5bcb49f8d7d675d4b3e2d1e0e00000000000000000000000000000000091d304050667b909fb1b9a89d8779665e514c463d494e5b647a8b9fb4c9bbaa927d67523d2812000000000001162b40566b8095abc0c3ae98836e59432e1900000000000000000000000000000000000c21364a5b72879cb1c6b19c8673604a35201200000010253a50657a8fa5c8bfaa957f6a55402a1500000000000000000000000b20354b6074899e9f9f9f9d8875604b382816020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8bec9a5907b65503b261000000000000000000000000000000000091d3145566175818d9fb4a89b85705b46301b00000000000e23394e63788ea3c5bfaa957f6a607381939fa8aea9a8abb2b7c3c2b6a99f8a78634d3e2e1b080000000e23394e63788ea3b39e89745645321e1f3346586f8499afaa927d685245566277889da9b49f8b7b64594838281603000000000000000000000000000000162b40556b8095aac0c7a48e79644f39240f0000000000000010263b50657b90a5c9b49f8a728399aec4b29c87725d4b371b0b0000000000000000111f334758687d92a2b4b49f8c7a8196abc0ae99836e59442e19000000000000000417293a5c71869cb1c6bca7927c67523d27120013253645566176869ca6b7bcab9f8b7b655c4a3c2c1d0c000000000000000000000000000000001223384c5e6c8197a4b5b7a59d897c706761585d5b636b79879daabbc7b49f8b77614c37220c00000000000013293e53687e93a8bdc5b09b86705b3928160300000000000000000000000000000000071a2d3d546a7f94a8b9b6a4907b6651402f1c0c00000d22384d62778daabbc2ac97826d57422d1800000000000000000000000f24394f64798ea7b9b5b7a6937e695645321e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbbda8927d68533d2813000000000000000000000000000000011426374b607484979fab9f978a836f59442f1a00000000000c21364b61768ba7b8c2ac97826d55606d7e8a999fabb0b4bab5b3aea49c8b7b655a49352010000000000e24394e63798ea3b39e89735e38281617293a556b8095aaac97826c57384859647a8b9fb4a99d8878625645321e1504000000000000000000000000000013283d53687d92a8bdbca6917c67513c2712000000000000000e23384e63788dabbcbcab8d788b9fb4bcab947f6a553f2e1c00000000000000000004182a3a4a6072849aa9baaa9b857e92a8bdb09b86715b3929160300000000000000192f44596e8499aec3bfa9947f6a543f2a15000818283846586278879da7b9baa99e8a7a645a493b2a1b0b000000000000000000000000000000091c2f404b6074869ca5b6b7a79e91857c7673727479808a9da5b7c8baa997826d5947341f0a00000000000011263b51667b90a6bbc8b39e88735745321e0900000000000000000000000000000000000f21364c6176899eb3c2af9a84705e4c3a2a1704000b20354b60758a9fb4c4af9a856f5a362614010000000000000000000115273754697f94a9c5cec4b39d8875604b382816020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3c5c0aa95806b55402b16000000000000000000000000000000081d3144556a7f94a2b4a49781756f6554402c1700000000000a1e32465773899eb3c4af9a856f5a4b606878838c959b9fa99f9e9992867b655d4c3c2c1902000000000d22374d62778ca2b49f8a745645321d12273d52677c92a7af9a85705a453b4a5c677d929eb0a69b8575604b43322212010000000000000000000000000010263b50657b90a5c9bea9947e69543f2914000000000000000b20364b60758a9fb5c9ab968196aabbb49f8b77624d372211000000000000000000000c1c30435463798b9fb4b4a3978197acc1b39e89735746321e0a00000000000002172c41576c8196acc1c1ac97826c57422d1700000a1a293a48596379899ea9bab9a89d887862594739291909000000000000000000000000000000111e3245566278879ca5b3b8b3a29a918b8887898e959ea8b7c3bcab9f8a78624d3a2a18040000000000000e23394e63788ea3c5cbb8a68b76604b36210b00000000000000000000000000000000000a1f3346586b8095a6b8b4a2907c665847331f1605081c30435472879cb2c7b29c87725443301c08000000000000000000081d3144556f8499afc8bbb4b7a6937e695645321e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8c2ad98826d58432d180000000000000000000000000000000b20354b6074889db3b19c8673615754473724110000000000031629395c71869bb1c6b29c877254434e5a626e788086898b8a88847d74645d4c3f2f1e0e00000000000b21364b60768ba7b8a98b75604b362011263b50667b90a5b29d87725d482e3e4d5f6b8096a1b3a398826d614f402f1f0f000000000000000000000000000e23384e63788dabbcc1ab96816c56412c1701000000000000091d32455673889db3c8b39e899eb3c5af99846f594834200b0000000000000000000000132536495b6b8095a5b6b49e899eb4c9b8a78b76614b36210c00000000000000142a3f54697f94a9bec4af9a846f5a3625130000000c1c2b3b4a5b657b8b9fabbcb7a69c877761574637271808000000000000000000000000000002162838495a62788799a1b3b8b4b0ab9f9e9d9ea8abb4b9c5b8ab9f8d7d675948341c0c000000000000000c21364b61768ba7b8ccc4a38d78634e38230e00000000000000000000000000000000000417293a4c6176889db3bfb39d8876614c443420190d1426365a6f859aafc4b49f8a75604b35200b0000000000000000000b20354b6075899eb4bbaa9faab39d8875604b3828160200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465773899eb3c5af9a85705a3727150100000000000000000000000000000e24394e63798ea6b8a9947f6a55463937291907000000000000192e44596e8399aec3b49f8a75604a3c484d5b636b70747675736f6860564b3f2f2111000000000000091e32455673899eb3a38e79634e392310253a4f657a8fa4b39e88735e493331414b6073839aa4b2a0947f6a5e4c3d2c1c0c0000000000000000000000000b21364b60768a9fb5c3ae99846e59442f1900000000000000021528385b70859bb0c5b9a89ea8b9b8a7917c67523b2b1805000000000000000000000008182c3d4b6074879cb2b9a89ea8b9ccc5a38e78634e39230e0000000000000012273c51677c91a6bcc7b19c87725443301c070000000d1d2d3d4b5d677d8d9fb5bcb6a59b85756155443625130000000000000000000000000000000a1a2b3c495a627783929ea6b1b5bcb4b3b2b3b9c6c5b8b3a79e8d7f695f4d3b2b190000000000000000091e32465773889eb3babaa5907b66503b26110000000000000000000000000000000000000b1f334658677d91a1b3b7a698826e635144342b1d152d42576d8297acc2baa98c77624d37220d0000000000000000000f253a4f647a8fa8b9b49f8a9fb4a6937e695645321e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729395c71869bb1c6b29d88725544311d08000000000000000000000000000011263b51667b90a6c4a6917c675137281b190b00000000000001172c41566c8196abc1baa98c77624d37353c494d555b5761605559524b45382e20110300000000000002162838596e8499aea7927c6752392917253a4f647a8fa4b39d88735e48331d3144556176869ca8b49f8d7c665b493a2919090000000000000000000000091e32455673889db3c6b19b86715c3929170300000000000000192e43586e8398adc3c6b9b3b9c6b39e8975604b36200d000000000000000000000000000f1e324556657b90a0b2b9b4b9c6d6bba6907b66513b2611000000000000000f243a4f64798fa4c7c9b49f8975604a35200b000000000f1f2e3f4d5f697f939eb0beb5a39a8373605443301c150500000000000000000000000000000e1e2b3c4859616e7d88929ba3a7abadafb0afadaaa69e94897c69614f41301d0d0000000000000000031628395b71869ba5a5a5a5937d68533e28130000000000000000000000000000000000000417293a4d5f6e8399a4b6b2a096816c624d483b31272a3f556a7f94aabfc7a48f7a654f3a2510000000000000000002152838556a7f94aac6ae998399aeb29d8875604b382816020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e8399aec3b49f8a75604b35200b000000000000000000000000000011263b50667b90a5bba6917c67513c271200000000000000000014293f54697e94a9bec7a48f7a644f3a252c35384039464b4b44373d3631271a1002000000000000000014293f54697e94abad98826d5746331e263b51667b90a6b19c87715c4732142637475863798a9eabab9e8a796358463726140100000000000000000000021628385b70869bb0c5b39e89745746331e0a00000000000001162b40566b8095abc0d6ccc9ccc2ac96816c5645321d0900000000000000000000000000021628384c5d6d8298a7b9c9ccd6d3bda8937e68533e2913000000000000000d22374c62778ca9bacdbaa98c77624c37220d0000000001112130414f616b8096a0b2c0b3a2988272604a433223130100000000000000000000000000000e1e2b3b474c5f68757d868c9196989a9b9a98948f887f76665e4f4332231200000000000000000000192e43596e83909090909090806b56402b16010000000000000000000000000000000000000c1c30414c6175869ca7b8b09f96816f62594b4437363d52677c92a7bcbca7927c67523d27120000000000000000091d3245566f859aafbaa9907b90a5b6a6937e695645321e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196abc1bbaa8d77624d38220d00000000000000000000000000000f243a4f64798fa4c4a8927d68533d281300000000000000000011273c51667c91a6bbbca7927c67523d271921232b28323636312728201d150a000000000000000000000e23384e63788c9fb49e8976614b3f312e3e54697e94a9af9a856f5a45301a19293a495b667c8d9fb4a89c8676615544311d130200000000000000000000192e43586e8398adc3b9a78b76614c36210c0000000000000013293e53687e93a8bdd3e1dec9b5a38e79644e3828150200000000000000000000000000000a1a2f3f4c6277899eb3c1d1e6d5c0ab96806b56412b16010000000000000b1f34475974899fb4bbc7a48f79644f3a240f000000000003122332424a60728298a2b5bcb2a096806c614f41311e0b0000000000000000000000000000000e1d2a34414e56606871777c8183858684837f7a746a61584c4032251405000000000000000000000e23384e63797b7b7b7b7b7b79634e39230e0000000000000000000000000000000000000000131e3346576379899ea7b7b09f9683786860554f4b464f647a8fa4c7bfaa947f6a553f2a1500000000000000000b20364b60758a9fb4b49f8a72879db2b29d8875604b382815020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9bec8a58f7a65503a251000000000000000000000000000000c22374c61778ca6b7ab96816b563928160300000000000000000f24394f64798ea4c6bfa9947f6a543f2a150c0e16161e21201d15130b090200000000000000000000000c2135495b6f8499aea895806b5d4b443f4b5c6f849aafaa95806b55402b160c1c2c3d4c5e6a7f94a0b2a4998373604b4130201000000000000000000001162b41566b8096abc0c5a38e79634e39240e0000000000000011263b51667b90a6bbd0ead8c7b19b86715c4a361a0a00000000000000000000000000000000111f344759687e93a3b4c8d8d8c3ad98836e58432e190000000000000005182a3b5c72879ca6a6a6a6917c67523c271200000000000005141c304354607484989faba5a59e947f695f4e3a2510000000000000000000000000000000000c181f3138454b525962676c6e6f706f6d6a6460554c463a2f22140700000000000000000000000c2135495b63656565656565635b4935210c000000000000000000000000000000000000000003172939495b647a899da6b4b0a199897e746b6561575e62778ca9bac2ac97826d57422d18000000000000000010253a50657a8fa9bab19c87727f95abb7a6937e695645321d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbbca7927d67523d281200000000000000000000000000000a1f34475973889db2af9a85705746321e0900000000000000000c22374c61778ca8b9c1ac97826c57422d1702000003090c0b0802000000000000000000000000000000061a2c3d50657b8f9fb49f8b7b686055585d647a8c9fb4a4907b65503b2510000f1f2f4050616e8298a3b3a196806b5f4d3e2e1d0d00000000000000000014293e53697e93a8bebba6907b66513b2611000000000000000e23394e63788ea3c5d5e2cebaa9937e69543e2d1b000000000000000000000000000000000005182a3b4a6072859baabbcedbc5b09b86705b38281603000000000000001a2f455a6f849090909090907f69543f2a14000000000000000013253645566175828b8f90909090907d68523d2813000000000000000000000000000000000004131a2832363b484c5256585a5b5a58554f4b443733291b1104000000000000000000000000061a2c3d494e5050505050504e493d2c1a060000000000000000000000000000000000000000000b1b2c3c4a5c6479889aa2b4b3a79e9387807a76747374758b9fb4c4af9a846f5a3625130000000000000003162839556a8095aac7ae99846f788b9fb4b29d8875604b382815020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c6bfaa957f6a55402a15000000000000000000000000000004182a3a586e8398adb49f8a76614b36210c00000000000000000a1f33475874899eb4c4af99846f5a442f1a000000000000000000000000000000000000000000000000000f23374b5d6d8297a5aa9e8a7e746e6d707a889dabb19c8773604a35200b0001122233434b6075859ba6b09e927d675c4a3b2b1a0a000000000000000011263b51667b90a6bbbea8937e69533e2914000000000000000c21364b61768ba7b8ccd0c9b49f8a77614c3721100000000000000000000000000000000000000d1c30435463798c9fb4c3d4c8b39d88735645321e09000000000000000f24394e647a7b7b7b7b7b7b79634e39230e0000000000000000081827384657616d777a7b7b7b7b7b7b65503a2510000000000000000000000000000000000000000a151d202b34373c4143454645433f3a3531261f170b0000000000000000000000000000000f1f2c35383b3b3b3b3b3b39352c1f0f00000000000000000000000000000000000000000000000e1e2d3e4a5b637784949fa9b4b3a69d958f8b89888a8b9fa9bac7b29c87725443301c07000000000000091e32455770859ab0c0ab96816b6f8499aeb7a6937e695645321d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8b9c2ac97826d57422d1800000000000000000000000000000013283d52687d92abbaa9917b66513c2611000000000000000004182a3a5c71879cb1c6b19c87725c3b2a1804000000000000000000000000000000000000000000000000081c2e3f4b6175879ca4a89e93888482858d9da6b3a1927d685443301c07000004151e3245576278889eaab49f8b7a64594838281502000000000000000e24394e63798ea3c5c0ab96806b56412b1601000000000000091e32465773889eb3bababfae98836e5847331f0a000000000000000000000000000000000000001325364a5b6b8096a5b7c4bab8a68b76604b36210b000000000000000d21364a5c64666666666666635b4935210c0000000000000000000a1a2839464b5861646565656565655d4b37230e000000000000000000000000000000000000000002090d182022272c2e30312f2e2a25201d14090400000000000000000000000000000000010f1a212326262626262623211a0f0100000000000000000000000000000000000000000000000010202d3d4a5962727f8a989fabb3b2aba4a89e9e9fa9b4bac7c8b49f8a75604a35200b0000000000000b21364b60768a9fb4c4a7917c67657a8fa2b4b29d8875604b3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb4c4af9a856f5a3625130000000000000000000000000000000d22374c62778b9fb5ac97826c573d2d1a0700000000000000001a2f445a6f8499afc4b49f89745947341f0b00000000000000000000000000000000000000000000000000111e3246576278869aa2b1a79e99979b9fabb3a199836e5f4e3625130000000003162839485a657b8c9fb4a99d8877625645321d0a000000000000000c21364c61768ba7b9c3ad98836e58432e1900000000000000031628395b71869ba5a5a5a5a1907b66513a2a17040000000000000000000000000000000000000008182d3d4b6075879da6a5a5a5a38d78634e38230e00000000000000071a2d3e4a4e5151515151514e493d2c1a06000000000000000000000b1b28323a474c4f5050505050504b3f2e1c080000000000000000000000000000000000000000000000050b0d1217191a1b1a18150f0b08010000000000000000000000000000000000000000060c0e1010101010100e0c06000000000000000000000000000000000000000000000000000002101f2d3b4854606a78828c959da6a9aeb2b4b3b4bab4b2afabaa9f8c77624d37220d00000000000010263b50657b90a9bab7a68c77625d70859ab0b7a6937e695645321d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c71879cb1c1b29c87725443301c0700000000000000000000000000000b1f34475971869bb0b29d88735c4a36210d0000000000000002172c42576c8197acc1baa98c77614c37220c0000000000000000000000000000000000000000000000000003162939485a627784919ca4aaacadaeaca89e948375604b4131180800000000000a1b2b3c4b5d687e939faaa69b8574604b382815020000000000000a1e33465774899eadadad9b86705b3626140100000000000000192e43596e8390909090908e8373604b35200c0000000000000000000000000000000000000000000f1e324557647a888f90909090907b66503b261100000000000000000f202d36393b3b3b3b3b3b39352c1f0f0000000000000000000000000b161e2a33373a3b3b3b3b3b3a372e21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d2b36434b5a626d7980888f94999d9ea8a1aa9f9d9a96918a8377624c37220d000000000003172939566b8095abc7b29d88735951667b90a3b5b29d8875604b3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499ababab9f8a75604a35200b000000000000000000000000000005182a3b566b8095abb7a68e79644e39240f0000000000000000152a3f546a7f94a9bfc7a48f79644f3a240f00000000000000000000000000000000000000000000000000000b1b2b3c4859616f7c868e949799999791897f74605745322313000000000000000d1d2e3f4e60697f8b8e8f8f8f826d5645321d09000000000000031729395c7186989898989888735443301c08000000000000000e23384e63797b7b7b7b7a7973605443301c08000000000000000000000000000000000000000000031628394a5c64757a7a7b7b7b7b77624c37220d0000000000000000010f1a212426262626262623211a0f0100000000000000000000000000030c181f2225262626262625231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1b20202020201f1a100e08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1826303c484d5b636b747a7f8487898b8b8b8a8785817c766e625947341f0b00000000000a1e33465770859bb0c3ad98836e584c5e71869bb1b7a6937e695645321d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8196969696968c77624d37220d00000000000000000000000000000010253a4f657a8fa7b9a9947f6a543a2917040000000000000012273d52677c92a7bcbca6917c67513c27120000000000000000000000000000000000000000000000000000000e1e2b3a474c5f6772797f828484817c7669605545392816050000000000000000102131424f616976797a7a7a7a74604b36200b00000000000000152a3f546a7f83838383838273604b35200b000000000000000c2135495b6365656565656460544336261401000000000000000000000000000000000000000000000a1b2d3e4a5761646565656565625948341f0b00000000000000000000070d0f1111111111110e0c060000000000000000000000000000000000040a0c0f1010101010100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d20303535353535342f25221b100300000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2b353d494e5560656a6e727475767575726f6b6761584c473b2a180500000000000c21364b61768a9fb4c7a9937e69544052677c91a4b6b29d8875604b382815020000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657c81818181818178624d37220d0000000000000000000000000000000b20354b6075899eb3b09a85705846331f0a000000000000000f253a4f647a8fa4c7bea9947f69543f2a14000000000000000000000000000000000000000000000000000000000e1c2a34414d515b636a6d6f6e6c6761574b4437281b0a00000000000000000003132432434f58616464646464605645321d090000000000000012273c4f616a6e6e6e6e6e6d605443301c0800000000000000061a2c3d494e50505050504e4b433626180800000000000000000000000000000000000000000000000010202d39464b4f50505050504c483b2a1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a273136454a4a4a4a4a49443a372e211305000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e19202c3537444b5054595d55606160565d5a56514c473a342a1d0d00000000000011263b51667b90aabbbaa98f79644f3a4b6073879cb1b7a6937e695645321d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384c5e656c6c6c6c6c6c62594834200b000000000000000000000000000000081d3144556e8398aeb49f8a76614c36210c000000000000000d22374d62778ca9adadac96816c57412c1702000000000000000000000000000000000000000000000000000000000c181f30393d4a4e5557595957524b46393127190a0000000000000000000000061424323a474c4f4f4f4f4f4b4538281502000000000000000c2032434f545858585858584b433626140100000000000000000f1f2c35383b3b3b3b3b3935302618080000000000000000000000000000000000000000000000000002101b2832363a3b3b3b3b3b37342a1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711171920202020202014120c03000000000000000000000000000000000000000000000000000000000000000002152738454b5b60606060605e594f4b3f3123130200000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f1a212631353a3f4437444b4c4b453845413c37332a1f180d00000000000004172a3a566b8196abc8b49f8a75604b364354687d92a5b7b29d8875604b38281502000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c505656565656564d483b2b19050000000000000000000000000000000115273754697e94a9bbaa907b65503b2510000000000000000b20354b60748a9898989898846f59442f1a04000000000000000000000000000000000000000000000000000000000004121d242d36393f424444423c3633291d15090000000000000000000000000006141c2a3337393a3a3a3a3632281a0a0000000000000000031525323c3f4343434343433530261808000000000000000000010f1a2123262626262524201c1408000000000000000000000000000000000000000000000000000000000b161e21252526262626221f180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a19242c2f353535353535292720140700000000000000000000000000000000000000000000000000000000000000091d31455660707575757575746f655d4e413120100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000609141d20252a2f27313636363228302c27211f170c05000000000000000a1f33475871869bb1c5b09a8570554431364b6074879db2b7a6937e695645321d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f383b41414141414137342b1d0d000000000000000000000000000000000010253b50657b90a5c8a9947e69543f291400000000000000081c3043546c818383838383806b56402b1601000000000000000000000000000000000000000000000000000000000000010a0f1a21242a2d2f2f2c27211e170b02000000000000000000000000000000000c171f212425252525201d150a00000000000000000000071520272a2e2e2e2e2e2e201c1408000000000000000000000000060c0e10101010100f0b080100000000000000000000000000000000000000000000000000000000000003090c0f10101010100d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000719293640444a4a4a4a4a4a3f3b322514030000000000000000000000000000000000000000000000000000000000000b20364b6075858a8a8a8a8a89847b685f4e3e2d1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b101519151d2021201d151a16120c0a040000000000000000000c21374c61768b9fb4c0ab96806b563727314455697e93a6b8b29d8775604b38281502000000000000000000000000000000000000000000000000000000000000000000000000000000000000031118253036434b4d4c4639362d1f1002000000000000000000000000000000000d23384d62788da2b7ab96816c56412c17000000000000000114263652636c6e6e6e6e6e6b62503d281400000000000000000000000000000000000000000000000000000000000000000000070c0e15181a1917120c0a0300000000000000000000000000000000000000040a0c0f0f0f0f0f0b0902000000000000000000000000030c12151919191919180b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112436475459606060606060544f4332200c000000000000000000000000000000000000000000000000000000000000091d3145566176879da89fa79e998c7e685c4a3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0c0b090200010000000000000000000000000011273c51667c91abbcc3a6917c66513c2727374b6075889eb3b7a6937e685645321d0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a54606261574e4a3d2d2010000000000000000000000000000000000c21374c61768ca1b6ad97826d58422d180000000000000000081834455257585858585856504433210e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191b20202020201f0d0b0600000000000000000000000000000000000000000000000000000000172c4054656e75757575757569614f3b271200000000000000000000000000000000000000000000000000000000000002152738475863798a9eabb9b3ab9f8b7a645846331f1402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b576c8196acc9b6a58c77614c37221e3245576a7f94a8b9b29d8775604b382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435460697477766f635b4a3e2d1808000000000000000000000000020b111321364c61768ba1b6ad98836d58432e180000000000000000001727343e414343434343403d33261604000000000000000000000000000000000000000000000000000000000000000000000000000000080e101515110b08010000000000000000000000000711181a2020202020201e08020000000000000000000000000000000000000000050e14162020202020200e0c070000000000000000000000000000000000030c121420202020202012100a01000000000000000000000000000000000000000000000000000000000000000000000000000c1a262e313535353535352320190e000000000000000000000000000000000000000000000000000000192f44596e838a8a8a8a8a8a7f69543f2914000000000000000000000000000000000000000000000000000000000000000a1a2a3a4a5b667c8d9fb4bdbaa99c8776614c423220100000000000000000000000000000000000000000000610161820202020202020202020202020202020202020202020202018160f060000000000000000000000000000000000000b1f34475971869cb1c6b29d87725947341f1628394c6176899eb3b7a6937e685645311d0a00000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4a60727e888c8b8479645c4a362513000000000000000000000006131e262829384e63788da3b8ac96816c57412c170000000000000000000917222a2c2e2e2e2e2e2b28211608000000000000000000000000000000000000000000000000000000000000000000000000000004111c23252a2a26201d1409000000000000000000000b19242c2f353535353535331d1509000000000000000000000000000000000000081621292c35353535353524211a0f010000000000000000000000000000071520272a35353535353527251e13050000000000000000000000000000000000000000000000000000000000000000000000001a2b3842464a4a4a4a4a4a38352b1e0e0000000000000000000000000000000000000000000000000000172c41566c81969f9f9f9f96816c57412c1702000000000000000000000000000000000000000000000000000000000000000c1c2d3d4c5e697f949fb1c0b6a598836e604f3e2d1b0b000000000000000000000000000000000000000a18232b2e3535353535353535353535353535353535353535353535352d2a23170900000000000000000000000000000000000c22374c61778ca4b5c2ad98826d583b2a180a1f3346586b8095a9bab29d8774604b382715020000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6b80949ea69f9a8a7a645443301c07000000000000000000001324313a3e394656687e93a8c3a9947f69543f2a1400000000000000000000050f1517191919191916140e0400000000000000000000000000000000000000000000000000000000000000000000000000000b171f2e373a3f403c353126190e00000000000000000719293741444a4a4a4a4a4a483127190900000000000000000000000000000000051626343d414a4a4a4a4a4a39362d1f0f00000000000000000000000000031525323c3f4a4a4a4a4a4a3c3930231301000000000000000000000000000000000000000000000000000000000000000000000b1b3849555b60606060605f4d483c2b19060000000000000000000000000000000000000000000000000014293f54697e94a9b5b5ae99846e59442f190000000000000000000000000000000000000000000000000000000000000000000f1f2f404f616d8197a2b4c3b2a0937e695c4a3a2917040000000000000000000000000000000000061828353f434a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a423f352717060000000000000000000000000000000012273c52677c91a7c2c6a8937e68533e29130417293a4c61778a9fb4b7a6937e685645311d0a0000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a8c9fb3b8b4a89c8673604a35200b0000000000000000000e1e31424e5357576174869cb1b7a58f7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b29333f4b4f5455514b44372c1e0e0000000000000011243747545960606060605f5d44372715020000000000000000000000000000000e21344451566060606060604e4a3d2d1a070000000000000000000000000c2032434f54606060606060524d41301e0a00000000000000000000000000000000000000000000000000000000000000000003172939556770757575757574625a4835200e0000000000000000000000000000000000000000000000000012273c51677c91a6bcc6b19c86715c3a291704000000000000000000000000000000000000000000000000000000000000000001122232434b6073849aa5b6beb49f8b7a645846331f14020000000000000000000000000000000010233546535860606060606060606060606060606060606060606060606058524535230f00000000000000000000000000000005182b3b576c8197acc1b9a88e79644e39240f000b1f3447596c8196aabbb29d8774604b382715020000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197abbccbc6b5a48e79644f39240f000000000000000006192b3c4e60686c6e768298a4b6b29d8774604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a464c5d656a6a666055493c2c1a0a000000000000182c4154656f7575757575756f5544311d0800000000000000000000000000000014293d51626b757575757575705b4a36210b00000000000000000000000012273c4f6169757575757575675f4d39250f0000000000000000000000000000000000000000000000000000000000000000000a1e33465770858a8a8a8a8a8b78624d3c2b19050000000000000000000000000000000000000000000000000f24394f64798ea4c6c9b39e89745846331f0a00000000000000000000000000000000000000000000000000000000000000000004141d3144556176879da8b9baa99d8776614c4232201000000000000000000000000000000000162b3f53646d7575757575757575757575757575757575757575757575756d63523f2a160100000000000000000000000000000b2034485972879cb2c7b49e8975604b35200b0004182a3b4d62788b9fb4b7a5937e685645311d0a00000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8499aec9d9d2c2a6917c67513c271200000000000000000b2035495a687e81838998a0b2b3a1937e685544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334658616f7a7f7f7b73635a493828160300000000001a2f44596f838a8a8a8a8a8d74604b36200b000000000000000000000000000001162c41566b808a8a8a8a8a8a79634e3a2917040000000000000000000000142a3f54697f8a8a8a8a8a8a7d67523d2c1a0600000000000000000000000000000000000000000000000000000000000000000c21364b61768a9f9f9f9faa97816c5a4835200d0000000000000000000000000000000000000000000000000c22374c61778ca8b9ccb9a88b76614c36210c0000000000000000000000000000000000000000000000000000000000000000000002152737475863798a9eaabbb6a599836e604f3e2d1c0c000000000000000000000000000000182e43586d828a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a816d58422d180300000000000000000000000000000d22374d62778ca4b6c4af9a856f5544311d0800000c2035485a6d8297abbcb29d8774604b3827150200000000000000000000000000000000000000000000000000000000000000000000000002182d42576d8297abbccdc8b7a58f7a654f3a251000000000000000000d23384d62788d97999ea7b2b2a1998372604a3726140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4c6176848f9495918678635645321e090000000000172c42576c81979f9f9fab8d78624d38230d0000000000000000000000000000031629395a6f84999f9f9f9f97816c5846331f080000000000000000000001142637586d82989f9f9f9f9a85705b4936210a000000000000000000000000000000000000000000000000000000000000000011263b50667b90aabbb5b5b49f8b78624d3c2b190500000000000000000000000000000000000000000000000a1f34475974899eb4c9c6a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000009192a3a495b667c8c9fb4bdb2a1937e695c4a3a2917040000000000000000000000000000162b40556b80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9a846f5a452f1a00000000000000000000000000000012283d52677d92a7c3c9aa95806b5537261401000005192b3c4e63798c9fb4b7a5937e685645311d0a0000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8d9fb4bab6aa9d8774604b35200b00000000000000000c22374c61778ca9aeadaaa69d93837561544330190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6d8298a2a9aaa49c8775604b36210b0000000000152a3f546a7f94a9b5b5a5907a65503b251000000000000000000000000000000a1e32465772889db2b5b5b49e8a76614c36251300000000000000000000081d31445571869bb1b5b5b4a28e79634e3928160300000000000000000000000000000000000000000000000000000000000003172939566b8096abc8d8cebbaa97816c5a4834200d000000000000000000000000000000000000000000000004182a3a5c71879cb1c6bba6917b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000c1c2c3d4c5e697e939fb1bfb49f8b7a645846331f14020000000000000000000000000013283d53687d92a8bfb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b19c87725c3a2a17040000000000000000000000000006192b3c586d8297adc2bcab907b66513b2611000000000e2135495b6e8398aebfb29d8774604b382715020000000000000000000000000000000000000000000000000000000000000000000000000e22374b5d6c81959fa9a59d8c7c665544311d0800000000000000000b20354a60748a9a9998958f877e726157463625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea0b2c0c2b5a5937e68533e2913000000000012273c52677c91a7bcbda7927d68523d281300000000000000000000000000000c21364b61768b9fb5cacdb9a8937e695443301c070000000000000000000b20354b60758a9fb4c9d1c0ac96816c5745321e090000000000000000000000000000000000000000000000000000000000000a1e33465770869bb0c5dbd8c8b49f8b78624d3b2b190500000000000000000000000000000000000000000000001a2f445a6f8499afc4bea9937e69543e2914000000000000000000000000000000000000000000000000000000000000000000000000000f1f2f404f616c8197a2b4baa99d8776614c42322010000000000000000000000000000f24394e64798ea1b3c5d5cebdb1aca7a7a7a7a7a7a7a7a7a7a7a7a7a79f89745847331f0a000000000000000000000000000b2035495a72879db2c1b59f8b76614c37210c00000000061a2c3d4f64798ea1b3b7a5937e685645311d09000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b6072808a8f8e877c665e4c372614010000000000000000071c3043546e82858483807a75686054463929180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8becfd2c3ad98836e58432e1903000000000f253a4f647a8fa4c7bfaa957f6a55402a1500000000000000000000000000000f243a4f64798fabbccfd7c6b19c8773604a35200e0000000000000000000e23384e63788da9bacddec9b39e8975604b3621100000000000000000000000000000000000000000000000000000000000000c21364c61768b9fb4cac9c6c9baa997816c594834200d0000000000000000000000000000000000000000000002172d42576c8297acc1c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000001112232424b6073849aa5b6b7a599836e614f3e2e1c0c0000000000000000000000000d21364a5c6f8399a6b8c8c5b19f979292929292929292929292929292928c76614c37210c000000000000000000000000000d23384d62788da5ababab9c87725847331f0a00000000000f22364a5c6f8499a8abab9d8774604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000101c304354606b767a7973665e4c402f19090000000000000000000013253653646e706f6d6a6560564b4336291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9c0d0d5c5ae98836e59432e1904000000000d22374d62778ca9bac2ad97826d58422d18000000000000000000000000000013283d52687d92a7c9dadecab6a4907b65503c2b1905000000000000000012273c51677c91a6c7d7e0ccb9a7927d68533e2d1b07000000000000000000000000000000000000000000000000000000000011263b51667b90aabbc2b6b1b6c2b49f8a78624d3b2b180500000000000000000000000000000000000000000000152a3f546a7f94a9bfc3ae99836e59442e19000000000000000000000000000000000000000000000000000000000000000000000000000004141d3144556176879ca7b9b3a1937e695c4a3a2917040000000000000000000000071a2d3e4d6278889eaabbc1ac97817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d75614b36210c0000000000000000000000000013283d53687d929696969694806b563a2917040000000000071b2d3e4e63798a95969696937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000001142636434b5861656460544c402f221100000000000000000000000818364653595b5a5855504b45383026180b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa2b3c2c5b8a7947f69543f2a1400000000000b20354b60758a9fb4c4af9a856f5a3626140100000000000000000000000001162b41566b8096abc0dacfcac2ae99836e5a4835200a0000000000000000152b40556a8095aabfd5dad6c5b09b86715c4a36220c000000000000000000000000000000000000000000000000000000000417293a566b8096abc8b6a49ca4b6baa996816c594834200d0000000000000000000000000000000000000000000012273d52677c92a7bcc6b09b86715b3929160300000000000000000000000000000000000000000000000000000000000000000000000000000215273747586379899eaabbb49f8b7a645847331f140200000000000000000000000f20344859657b8c9fb4beb39e8878676767676767676767676767676767615746331e0a0000000000000000000000000012273c51677c81818181817e74604b36210c000000000000001021364a5b647a80818181817f69543f29140000000000000000000000000000000000000000000000000000000000000000000000000000081826303a464c504e4a43362f2211030000000000000000000000001828364044454443403a3631271c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d6f849aa4adaea79e8876614c37210c0000000000081c30435472879db2c7b29c87725443301c0800000000000000000000000003162839596f8499aec4c9bcb5bcb49f8c78624d3828150200000000000002152838596e8398aec3c8c5c8c9b5a38f7a644f3a2917040000000000000000000000000000000000000000000000000000000a1f33465871869bb0c6b19c879ca4b6b49f8a77624d3b2b18050000000000000000000000000000000000000000000f253a4f647a8fa4c7c8b39e89735746321e0a00000000000000000000000000000000000000000000000000000000000000000000000000000009192a3a495b667c8c9fb4bbaa9d8776614c43322010000000000000000000000005192b3b4b5d697e93a0b2b8a79b857560525252525252525252525252524b4639291703000000000000000000000000001024394d5f676c6c6c6c6c69605645321e0900000000000000071a2d3d4a5c646b6c6c6c6c69614f3b271200000000000000000000000000000000000000000000000000000000000000000000000000000008141c2933363a39353025181103000000000000000000000000000a18242c2e302f2e2b25201d150a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4d62788693989994897b645847331f0a0000000000011426365a6f859aafc4b49f8a75604b35200b000000000000000000000000091e32455772879db2c7bcab9fabbcab95806b5645321d09000000000000091d32455672879cb1c1b4b0b4c1c1ad97826d5846331f0a0000000000000000000000000000000000000000000000000000000c21364c61768b9fb4bfaa957f869cb1baa996816c594834200d0000000000000000000000000000000000000000000d22374d62778ca9baccb8a78b76614b36211414141312110e0b090200000000000000000000000000000000000000000000000000000000090b171e212c3d4c5e697e939fb1b7a599836e614f3e2e1c0c00000000000000000000000d1d2e3f4f606d8298a3b5b5a398826d614f3f3d3d3d3d3d3d3d3d3d3d3633291b0b00000000000000000000000000000a1d30414d515656565656544b453828160300000000000000000f1f2d3e4a4f5656565656544f43321f0c00000000000000000000000000000000000000000000000000000000000000000000000000000000010b171f212524201c130800000000000000000000000000000000071117191b1a1815100b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112034485962747e83837f76645c4b3a291704000000000000182d42586d8297adc2baa98c77624d37220d0000000000000000000000000b21364b60768a9fb4cab59f8a9fb5b39e8875604b3620100000000000000b20364b60758a9fb4b4a39ba3b4c7b49f8a76614c36211100000000000000000000000000000000000000000000000000000011263b51667b90aabbc5a7917d7f95aabbb49f8a77624c3b2a180500000000000000000000000000000000000000000b20354b60758a9fb4c9c5a38e78634e392929292928282623211e16100b08010000000000000000000000000000000000000000000005121d242933363b3d404f606c8197a2b4b3a1947f695c4b3a2917040000000000000000000000112132424b6074859ba6b8b2a0947f695d4b3c2b2828282828282828211e170b00000000000000000000000000000000122330393c41414141413f3632281a0a0000000000000000000110202d363940414141413f3b32251403000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c100f0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b485660686e6e6a61584b3e2e1c0c00000000000000152b40556a8095aabfc7a48f7a644f3a250f0000000000000000000000000f24394f64798eabbcc4af9a849aa5b6a7927d67523e2d1b0700000000000f24394e64798eaabbb09b859ba9babaa9937e69543f2e1c08000000000000000000000000000000000000000000000000000417293a566b8196abc8b9a78e79788b9fb4baa996816c5947341f0c0000000000000000000000000000000000000000081c30435472879db2c7bba6907b66513e3e3e3e3e3e3d3b3936322826201d150904000000000000000000000000000000000000000d19202f3839464c50525452516073849aa4b6b49f8b7a645847331f14000000000000000000000003141e3245566278889eaabbb49f8c7b655a483928161212121212120c0a03000000000000000000000000000000000004121d24272c2c2c2c2c29211e160a000000000000000000000002101b22242b2c2c2c2c29271f140600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d0f10101010100d0b060000000000000000000d1d2b38454b535859544c473a2e2010000000000000000013283d53687d92a8bdbca7917c67523c271200000000000000000000000012283d52677d92a7c9bea9947f879db2b09b85705c4a36220c000000000012283d52677d92a7c8a8937d8b9fb4c7b19c87725d4b37230d000000000000000000000000000000000000000000000000000a1f33465871869bb0c6b39e89746e8398aec0b49f8a77624c3b2a180400000000000000000000000000000000000000011426365a6f859aafc4bda8937e685353535353535352504e4b45383b3531271f170b0000000000000000000000000000000002101d2b34404c5157616567696866626176869ca8b9aa9d8776614c42311f0e000000000000000000000002162838485a657b8c9fb4bbaa9e8978625745321e140300000000000000000000000000000000000000000000000000000a10121717171717140b09030000000000000000000000000000070d0f161717171714120c0300000000000000000000000000000000000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0d0b050000000000000000000000000000000000000000000000070b0c0e0f0f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e1920232525252525252320190e0000000000000000000d1a2832363e43443f37332a1c1002000000000000000010253b50657a90a5c9bfa9947f6a543f2a15000000000000000000000001162b40566b8095abc0bda7927d8095aab5a38e7a644f3a2a170400000001162b41566b8096abc5a48f7b8499afc7b6a4907b65503b2a18050000000000000000000000000000000000000000000000000c21364c61768b9fb4c4af9a846f647a8fa2b4baa996806b5947341f0c0000000000000000000000000000000000000000182d42586d8297adc2c0ab96806b69696969696968676663605657504b443733291c1308000000000000000000000000000010202d3c484d5e666f767b7d7e7d7b77726b798a9eabb7a599836e604e3d2c180800000000000000000000000a1a2b3c4b5d697e93a0b1b8a79b8575604b43322111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a212425252525252525252525252220190d000000000000000000000000000000000000000908131c2022232424221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d242b35383a3a3a3a3a3a38352b1e0e0000000000000000000a161e21282e2e2a211f170c000000000000000000000e23384d63788dabbcc1ac97816c57422c17020000000000000000000002152838596e8499aec3bba6917b788da2b4ad97826d5847331f0800000003172939596f8499aeb9a78c777e93a9bac2ae98836e5948341f0900000000000000000000000000000000000000000000000011263c51667b91abbcc8aa957f6a5c70859ab0c1b49f8a77614c3a2a180400000000000000000000000000000000000000152a40556a7f95aabfc5b09b857e7e7e7e7e7e7e7d7d7b7875716c6560554c463a3025180d0000000000000000000000000d1d2d3e4a5a62707c848a90929392908c8780787b8c9fb4b3a1937e695b493625130000000000000000000000000d1d2e3f4f606d8297a3b5b5a398826d614f3f2f1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000050b0d191b13110b020000050b0d191b13110b02000000000000000000000f1f2d36393a3a3a3a3a3a3a3a3a3a3a37342b1d0d0000000000000000000000000000000006121d2425303537393a3a372e20100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412222f383c494d4f50505050504d483c2b1906000000000000000000021520272a2a2a2a25231c110300000000000000000b20364b60758a9fb5c4ae99846f59442f1a0000000000000000000000091d32455672879cb2c7c4a48f7970859aafb49f8a77614c3626140100000a1e33465772889db2b39e8974778a9fb4c9b49f8b77624c37261401000000000000000000000000000000000000000000000417293a566b8196abc9bbaa907b6550667b90a3b5baa896806b5947341f0c0000000000000000000000000000000000000013283d52687d92a7bdc9b5a39b939393939393939392908e8a86817b746a61584a43362b1d0f0100000000000000000005182b3b4a5c647884919a9faaa7a9a7a6a59c968b838197abbcb49f8a79635443301c0c000000000000000000000000112132424b6074859ba6b8b2a0947f695d4c3c2b1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d18100e09000000000000000000000d1820222e3029261f14060d1820222e3029261f14060000000000000000071a2d3d4a4e4f4f4f4f4f4f4f4f4f4f4f4d483b2b190500000000000000000000000000000e19202f3836434a4c4e4f4f4b3e2e1b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f404c515a62646565656565625a4835200b0000000000000000031525323b3f3f3f3f3b372f21110000000000000000091d31455673889db3c6b19c87715c3a2a1704000000000000000000000b20364b60758a9fb4cab8a68b76677c91a6b7a9947f695443301c0800000c21364c61768ba5b7b09a85706e8398aec3bbaa947f6a5544311d08000000000000000000000000000000000000000000000a1f33475871869bb1c6b49f8a76614b5e71869bb1c3b49e8a77614c3a2a180400000000000000000000000000000000000010253b50657a90a5c9d1c1b5b0a8a8a8a8a8a8a8a8a7a5aa9f9b9690887f76696054483b2c1f0f0000000000000000000b20344859647a889aa2afb4bbbcb5b1aeadafab9f98898d9fb4baa89b8572604a3a291704000000000000000000000003141e3245566278889eaabbb49f8c7b655a493928160300000000000000000000000000000000000000000000000000000000000000000000000000030d1820222d26231c1103000000000000000d1d2b343744453e3b3124141d2b343744453e3b31241404000000000000000d21364a5c64646464646464646464646462594834200b00000000000000000000000002101e2c35404c515460616364645c4b3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f404c5e6672787a7a7a7a7a7b78624d38230d00000000000000000c2032434f54545454504b3f2f1c0800000000000000021527385b70869bb0c5b49e89745847331f0a000000000000000000000f24394e64798eaabbc8b39d88736074889db2b29d8773604b35200e00000f253a4f647a8fa4c3ac97826c657b90a5b6c8b29d8774604b35200e000000000000000000000000000000000000000000000c21374c61768b9fb4c6b19b8671574652677c91a4b6b9a895806b5847331f0c0000000000000000000000000000000000000d23384d62788dabbccfd1c9c5bebbbbbbbbbbbbbbbcc8bbb4b1aca69d94897e726259493d2c1e0e00000000000000091d2f404d6277889da6b4c0bab4ab9f9c99989a9ca4a89e9fabbcc6b4a3937e685846331f0b00000000000000000000000002162838485a657b8c9fb4bbaa9e8978625746321e150300000000000000000000000000000000000000000000000000000000000000000000010b161e2b3437423b382f211100000000000005182b3b484c595b534e4231222b3b484c595b534e42312212000000000000000f24394e647a7a7a7a7a7a7a7a7a7a7a7a78624d37220d00000000000000000000000010202e3c494d5e666e747778797a645846331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000008182b3b4c5e667c878d8f8f8f8f8f8977624d37220d000000000000000012273b4f61696a6a6a655d4b3723080000000000000000192e43586e8398adc3b9a88c76614c37210c0000000000000000000012273d52677c92a7c8c5b09a8570556a7f95aab7a5917c66513c2c19060013283e53687d93a8bda8937e696073879db2c8b7a5917c66513c2b190600000000000000000000000000000000000000000011263c51667c91abbcc1ac96816c57394b6073879cb2c4b49e8a77614c3a2a170400000000000000000000000000000000000b20364b60758a9fb4cacebdb1aca6a6a6a6a6a6a6a8a9adb3b7c4b7b2a79e938477635b493c2c1a0a0000000000000f24384c5e70849aa6b7c4b9a99f958c86848385878d949ea7b2becdc1b39e8976614c392917030000000000000000000000000a1a2b3c4b5d697e93a0b1b8a79c8675614b4332221100000000000000000000000000000000000000000000000000000000000000000009141d28323b484d58504c3f2f1c0900000000000b20344859626e7068604e402f344859626e7068604e402f1c090000000000001b30465b70858f8f8f8f8f8f8f8f8f8f8f816c57422c1702000000000000000000000c1c2e3e4a5a63707b83888c8e8f8b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000001325364859667c8c9da5a4a5a59f917c66594834200b0000000000000000142a3f54697f7f7f7f7b65503626140100000000000001162b41566b8096abc0c6a38e79644e39240f00000000000000000000162b40556b8095aac0c2ac97826d5762778b9fb4af99846f5b4935210a00172c41576c8196acc4a58f7a65546a7f94aabbc3af99846f5a4935200a000000000000000000000000000000000000000004172a3a566c8196abc9c4a7917c67523c4354687d92a6b7b9a895806b5847331f0c0000000000000000000000000000000000081d31445573889db2c8c4b19f97909090909090919294979da6afb3bfb8b3a29a8779635a49382816030000000005182b3b51667b90a2b4c4b9a79e8b8077716e6d6f72787f8998a0b0bdccb8a795806a5746331e0a000000000000000000000000000d1d2e3f4f606d8297a3b5b5a498826e614f402f1e0e000000000000000000000000000000000000000000000000000000000000071119263139464b59626d655d4c38230e00000000000d22374c627783857e685e4c38374c627783857e685e4c382308000000000000192e43586e8398a4a4a4a4a4a4a4a4a499846f59442f1a0000000000000000000004172a3a4a5c64788590989ea7a3a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000a1c3043546277899eaab6c3b5a396816c5e4c3b2b1905000000000000000a1f344a5f748a949494846f5443301c080000000000000014293e53697e93a8bebba6917c66513c271100000000000000000002152738596e8399aec3bea9947f6954596e8398adb59f8c78634d39281604182a3b5a6f859aafb7a68c77614c62778b9fb4cab49f8c78624d38271502000000000000000000000000000000000000000a1f33475871869bb1c6b7a68d78624d38364b6074889db2c5b49e8976614c3a29170400000000000000000000000000000000021527375b70859ab0c5c1ac97817b7b7b7b7b7b7b7d7f82888f99a1b3b8c0b4a59d8878625645321e0f000000000b2034485970859bb0c0c0b39e897b6b625959585a5a636a7782969fb0bfc5b39e8976614c36210d0000000000000000000000000000112132424b6074859ba6b8b2a0947f695e4c3c2c1b0b000000000000000000000000000000000000000000000000000000050f1a212f37444b57616a77827c65503b26100000000000172c41576c81969a907c66503641576c81969a907c6650362513000000000000152b40556a8095a5a3a3a3a3aaafbcb19c87715c3a2a18040000000000000000000a1f334758647a899ba3adb3ada5a8917b66513c26110000000000000000000000000000000000000000000000000000000000000000000000000000000a1b2d3e4a6072849aa7b8c8b9a89b8574604b402f1d0d0000000000000000091f34495e74899ea99e8974604b35200b0000000000000011263b51667b90a6bbbea9937e69543e2914000000000000000000091d31455672879cb1c7c8a6917b66514f657a8fa3b5ab96816b5745321e0b1f34475973889eb3b39d88735848596e8399aec3bcab95806b5645311d09000000000000000000000000000000000000000c21374c61768b9fb5c8b29d88735a4835314556697e94a7b8b9a895806b5847331f0c0000000000000000000000000000000000182e43586d8398adc2c0aa95806b666666666666686a6d747a84909ea7b7c3b7a69c8675604b3d2d1a070000000d22374c62778ca2b4c8b4a2917c675d4c473b433c494d5961728196a1b3c5b9a7937e68533b2b19050000000000000000000000000003141e3245566278889eaabbb49f8d7c665a4939281603000000000000000000000000000000000000000000000000030d18202d36404c55606875808a937e68533e291300000000001b30465b70859bae99836e5443465b70859bae99836e5443301c0700000000000d22374d6277878d8d8d8d8d959eafb49e89745847331f0a0000000000000000021527384c6176879da7b4ab9f98908e8a79634e38230e000000000000000000000000000000000000000000000000000002090b0f121415161514120f0c1628394a5c697f94a2b4c5beb49e8a79635645322212000000000000000000091e33495e73889eb3a78e79634e39240e000000000000000e24394e63798ea3c5c0ab96816b56412c160100000000000000000b20364b60758a9fb4cabbaa8d78634e4b5d71869bb1b39e8975604b36211022374c61778ca6b8af9a846f5a3b51667b90a5b7c9b39e8875604b36200f0000000000000000000000000000000000000011273c51667c91abbcc3ad98836e583c2b27384b6175889eb3c6b39e8976614c3a29170400000000000000000000000000000001162b40566b8095abc0c2ad98836d58515151515153545460646f7b899da5b7c4b5a496816c5b4a36210d00000012283d52677d92a7c0c5b09a85705f4d3f342a2e2c353b4754606e8399a7b8c5b09b8671594834200b0000000000000000000000000000021628384859657b8b9fb4bcab9e8978635746321e1504000000000000000000000000000000000000000000010b161e2b343d4a4e5e66737d88959f96806b56412b1601000000001c31465c71869bb19e8974604a465c71869bb19e8974604a35200b00000000000b20344859627378787878788095aab9a88c77614c37220c0000000000000000091d3145566b8095a5b7b59f8d827b7876635b4935210c0000000000000000000000000000000000000000000000040a0c151d202427292a2b2a292725211e324557647a8b9fb4c0c2b2a0927d675b4938281504000000000000000000081e33485d73889db2a8937d68533e2813000000000000000c21364c61768ba7b9c3ae99836e59442e190000000000000000000e24394e63798eaabbcab49f8a75604b3f53687d93a7b9a7937d68533f2e1b253b50657b90a5c5ab96816b56414b6074879db2c9b8a6927c67523d2d1a07000000000000000000000000000000000004172a3a566c8196abc9c6a8937e69533e291e3246576a7f95a8b9b9a895806a5846331f0b0000000000000000000000000000000013283e53687d93a8bdc5b09a85705b373b3b3b3c3d36434a4f5e6679879da9bac2b49f8c79634e3b2b18050000172c41566c8196abc1c9a7927d685241301f181819202a36434c6177889eb3c7b5a38c77624d37220d0000000000000000000000000000000a1a2b3b4b5d697e939fb1b8a79c8675614b43322212000000000000000000000000000000000000000008141c28323b484c5b636f7b86939da6ae98836e59432e1904000000001c31465b71869bb0a78e78634e465b71869bb0a78e78634e39230e000000000005182b3b48556063636363667b91a6c6a48e79644f39240f00000000000000000b20364b6075899eb3b4a3937e6d66636158493d2c1a06000000000000000000000000000000000000000000050c171f21273136393c3f4040403f3d3a3633404b6075869ca9bac7b6a498826d5f4d3d2c1a0a00000000000000000000081d32485d72879db2ad97826d58392916030000000000000a1f33465874899eb3c6b09b86715b39281603000000000000000012273c52677c91a7c8c7b29c87725544364b6075899eb3b19b86715d4b3722293e54697e93a9c9a8927d68533d43546a7f95abbcc5b09a85705b4a36210b00000000000000000000000000000000000a1f33475871869cb1c6b9a88e79644f39241628394c6176899eb4c6b39e8976614c3a29170400000000000000000000000000000011263b50667b90a5bbc8b29d887355443126262628253035404c5b647a8b9fb4c6bbaa98836e594834200b0000192e43586e8398adc3bcab8d78634d3823120500060c18253347586a7f94a9bac1a8927d68533d2813000000000000000000000000000000000d1d2e3f4f606d8297a3b5b5a498826e614f402f1e0e0000000000000000000000000000000000071118263039464b59626d7984909ca4b3b7b09b86715b46311c06000000001b31465b70869bb0a8927d6853465b70869bb0a8927d68533d28130000000000000d1d2b37444b4d4e4e4e64798ea3c5a6917c67513c2712000000000000000010253a4f657a8fa7b9b09b857060504e4c463a2c1f0f0000000000000000000000000000000000000000010d192029333738454b4e515455555554524f4c464d5e6c8197a4b6c7baa99c8675614b41301f0e0000000000000000000000071c32475c71879cb1b19c87715746321e0a0000000000000417293a5c71869cb1c6b39e88735746321e090000000000000000152b40556a8095aabfc4ae99846f59373245576b8196abb5a38f7a654f3b2a2536576d8297acbcab8f79644f3a364d62788b9fb4cab4a28e79634e39281603000000000000000000000000000000000c21374c61778b9fb5c9b49e8975604b35200b1f3347586b8196a9bab9a795806a5846331f0b0000000000000000000000000000000e23384e63788da3c4cab49f8a75604b3620111113131c202f3c4a5c6a7f94a8b9c8b49f8b77624d37220d00001a2f455a6f849aafc4b59f8a75604b35200b0000000008182a3a4c61768a9fb4c1ac97826c57422d170200000000000000000000040606060600112132424b6074859ba6b8b2a0947f6a5e4c3c2c1b0b0000000000000000000000000000050f1a212f36434b57616a77828c9aa1b1b5bab4a79b85705b46311b06000000001b31465b70869bb0ac97826d57385b70869bb0ac97826d57382715020000000000000d192631353838384c61768ba7b9a9947e69543f2914000000000000000014293e54697e93a9c5a8937e695342393633291b0f010000000000000000000000000000000000000009141d2b343a474c5356606467696a6b6a696764615759667c919fb1c2bfb49f8b7a645746322313000000000000000000000000061b31465b70869bb0b59f8b76614b36210c00000000000000192f44596e8499aec3b8a78b76614b36210c0000000000000001152737596e8398aec3c0ab96816b564128394d63788c9fb5ad98836e59483430435470859bb0b59f8b76614b3634485a6f8499aec4c0ac96816c5746321e090000000000000000000000000000000011273c51667c91abbcc4af9a846f5544311d08172a3a4d62778b9fb4c5b39e8976614c3929170300000000000000000000000000000b21364b60768ba6b8cbbcab8d78624d38230d00000007111e2d3e4c6176899eb3c9bbaa937e695336251300001a30455a6f859aafc4b39e89745443301c0800000000000c1f3346586f859aafc4b09a85705b45301b0000000000000000000912191b1c1c1c1c1c1c1d3245566277889daabbb49f8d7c665a49392918080000000000000000000000030d18202d36404c54606875808a979fabb3bbb4a89f95897b65503a251000000000001b30465b70859bb0b19c867156455b70859bb0b19c86715645311d090000000000000009141d20232333465874899eb3ac96816c57412c170200000000000000162b40556b8095aabaa58f7a65503a25211f170b00000000000000000000000000000000000000000d1926313b484d5861696f75797c7e7f807f7e7c7a76726c77899eb3bdc3b3a1937e695c4a39281605000000000000000000000000051a2f445a6f8499afbcab8f7a644f3a250f00000000000002172c41576c8196acc1c5a38e78634e39230e00000000000000081d31445571869cb1c6bda8937d68533e2835495a6f8499afb49f8b77624c37354a6074899eb4b29d87725746322b3c51667c91a6b7c9b39e8975614b36211000000000000000000000000000000004182a3a576c8196acc9c9aa95806a55372614010c203448596d8297aabbb9a7957f6a5746331e0b0000000000000000000000000000091e32455673889eb3c8c9a58f7a65503a25100000000000101f3346586c8197acc1c8af99846f5443301c0700192f44596e8499aec3b49f8a745746331e0a00000000000417293a556a7f95aabfb39d88735e48261401000000000000000c1a262e303131313131313128384859657b8b9fb4bcab9e8978635746362513000000000000000000010a161e2b343d4a4e5e65737d88959ea8b4bcb2aa9f978a8076655d4b37230e00000000001a2f445a6f8499afb49f8a75604b5a6f8499afb49f8a75604b36200b000000000000000001080b0e17293a5c71869bb1ae99846e59442f190000000000000000172c41566c8196abb9a48e79644f39240f0a0400000000000000000000000000000000000000010f1d2a37444b59626c767e84898e919495959594928f8b8781849aa7b8c8b7a599836e604f3e2d1b0b0000000000000000000000000003192e43586e8398adc9a8937e68533e291300000000000000142a3f54697f94a9bebba5907b66503b2611000000000000000b20354b60758a9fb4c9c6a58f7a65503a252c3c51667b90a5b6aa957f6a5544384d62788da8b9ae99846e59392820354b6074889db3c9b9a8937d68533e2e1b0700000000000000000000000000000a1f33475871869cb1c6bcab907b65503b26100005182b3b4d63788b9fb4c5b39e8976614c3929170300000000000000000000000000031628385b70869bb0c5bda7927d68523d281300000000000417293a51667c91a6c6c9b39e8974604a35200b00172c41576c8196acc1bbaa8b76614c36210c00000000000013283d52687d92a7bdb49f89745544311d08000000000000091a2a3842464646464646464646463b4b5d687e939fb1b9a79c8675615443301c100000000000000008141c28323b484c5b636f7b86929da6b4b9b4afa0988b81776b61584b3f2e1c080000000000172c42576c8197acbcab8d78634d576c8197acbcab8d78634d38230e000000000000000000000000192f44596e8499aeb19c86715c3a29170400000000000000152b40556a8095aabaa58f7a65503a25100000000000000000000000000000000000000000000f1f2c3b4855606978818a939a9fa8a6a9aaaaaaa9a7ab9f9c979aa2b4c5bbaa9d8776614c4232200f000000000000000000000000000002172c41576c8196acc1ac96816c57412c170000000000000012273c52677c91a7bcbda8937e68533e2913000000000000000e23384e63788da9baccb9a88c77624d372220354b6073879db2b29d8874604b3b51667b90a6c6aa95806b55402b1d3144556b8095abbcc6b19b86715c4b37220c00000000000000000000000000000c22374c61778b9fb5cab49f8b76614c36210c00000d2035495a6e8398adbfb8a7947f6a5746331e0b0000000000000000000000000000192e43596e8398aec3bfaa957f6a55402a150000000000000c21374c61768ca8baccb9a78d77624d38220d0014293e53697e93a8c4c8a38e79644e39240f00000000000011263b51667b90a6bbbaa98a75604b35200b00000000000012263848555b5b5b5b5b5b5b5b5b5b5b5b5b606d8197a3b4b6a4998372604a3e2e1b0700000000031118263039454b59626d7984909ca4b3b7b5b1a29a8f83796c62594c463a2e2111000000000000142a3f54697f94a9c9a5907b655054697f94a9c9a5907b65503b2610000000000000000000000002172c41576c8196acb39e89745846331f0a0000000000000014293e54697e93a9bca6917c67513c271200000000000000000000000000000000000000000e1e2c3d495962737f8a979fa9afb4bac6bebfc0bfbec9bcb5b1acb0b4c0cab49f8c7a65584733241403000000000000000000000000000000152a3f546a7f94a9bfaf99846f5a362614010000000000000f243a4f64798fa4c7c0ab95806b56402b160100000000000011273c51667c91a6c7c9b49e8974594834201c304354697f94a9b7a6917c67513d546a7f94a9c8a7917c67523c271527374d62788c9fb5cab5a38f7a644f3a2917040000000000000000000000000012273c51677c91abbcc6b19b86715746331e0a000006192c3c4e64798ea1b3c5b39e8976614b3929160300000000000000000000000001162c41566b8196abc0c2ad97826d58422d180000000000000a1f33475874899fb4c9c5a58f7a65503a2510000f24394f64798ea6b8bea9937e69543d2c1a06000000000011273c51667c91a6bbb49f8a745544311d08000000000004192e42556670717171717171717171717171717175869bb0c2b2a1947f6a5c4a36220b0000000211212f36434b57606a77828c99a1b1b5b6b2a39b90847a6e635b4c483b33291b110300000000000012273c51677c91a6bca8927d685351677c91a6bca8927d68533d281300000000000000000000000014293f54697e94a9b9a88b76614c36210c0000000000000010263b50657b90a5c2aa957f6a55362614010000000000000000000000000000000000000b1b2c3c495b637784949fa9b4bac7c6b9b4afacabaaabadb0b4bac7c5c8d1c4af9a847462594b3f2e211103000000000000000000000000000012273d52677c92a7bcb29c87725443301c080000000000000d22374c62778ca9bac2ad98836d58432e1800000000000000152a3f556a7f94aabfc6b09b86715b3b2b181426364c61768a9fb4af9a85705b4a586d8398adbbaa8e79634e39240e2035495a6f849aafc5c1ad97826d5847331f0800000000000000000000000004182a3a576c8196acc9c1ac97816c57392917030000000e21364a5c6f8499afc0b8a7947f6a5746321e0b0000000000000000000000000014293e53697e93a8bec4af9a856f5a36261401000000000004172a3a5d72889db2c7bba6917c66513c2711000b20354b6074889db3c9af9a846f5b49362113010000000115273753687e93a8bdb39d88735e482614010000000000061b30465b7084868686868686868686868686868686879db2c7bfb49f8c7a644f39281603000010202f3f4c546068757f8a979faab3b8b3a59d92867b6f645c4e493d342b1f170b00000000000000000f24394f64798ea4c6aa95806b554f64798ea4c6aa95806b55402b1600000000000000000000000012273c51677c91a6c6a38e79644e39240f000000000000000c22374c61778ca3b5ae99836e5443301c08000000000000000000000000000000000003172939495a6379879aa2b4bac7bfb3aea89e9a97959596989b9fa9adb4bac7c7b4a29a8477645d4b3f2f2111010000000000000000000000000010253a50657a8fa5c8b49f8a75604b35200b0000000000000b20354a60758a9fb4c5b09b85705b37271502000000000001142636586e8398adc3c2ad98836d58432e18081f3347586d8297acb4a28e79634e5571869bb1b49f8a75604b36200b192b3c51677c91a6b8c9b49f8a76614c3625130000000000000000000000000a1f34475971869cb1c6c4a7927c67523d271200000000071a2d3d4f657a8fa2b4c5b39e8975614b3928160300000000000000000000000011263c51667b91a6bbc7b29d87725443301c08000000000005182b3b5d72879cb2c7bca7927c67523d271200081c3043546c8196abbcb59f8c79634e41301d140904040d1d3144556d8297adc2b19c86715c47311c000000000000081d32485d72879b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9da5b6cacfbcab9a85705746321e0900071b2d3e4c5d65737d88959ea8b4b8b3a69e93877d72665e4f4a3e352c20180d040000000000000000000c21374c61778ca8b9ad98836d584c61778ca8b9ad98836d58432e180000000000000000000000000f24394f64798ea4c6a6917b66513c2611000000000000000a1f33475871869bb1b39e8974604b35200b0000000000000000000000000000000000091e3346576378889da6b4c0c3b6b2a1999089858280808183868a90979fa9b4bac0b4a29a887b655d4c402f1f0f000000000000000000000000000d23384d62788daabbbbaa8c77624d37220d000000000000071c30435472879cb2c1b29d88735544311d080000000000081c30435471869cb1c6bfaa957f6a55402a1504172a3a4e64798ea3b4ac97816c5760758a9fb4b19c86715544311d080e20364b6074889eb3c8baa9947e695443301c0700000000000000000000000c22374c61778ca4b6c9b7a68d78624d38230d00000000000f23374b5d70859ab0c2b8a7947f6a5746321e0a0000000000000000000000000e24394e63798ea3c5c9b49f8a75604b35200b00000000000b2034485974899eb3c9bba6917c66513c271100011426364e63798c9fb5bcab98836e5f4d4031261f17181f2b3b4b6074889db2c8ad97826d58422d18030000000000051a30455a6f859aafb0b0b0b0b0b0b0b0b0b0b0b0b0b2b6c3c1c1c9b59f8b76614b36210c000d22364a5c657b86929da6b4b9b4a69e94887e746760544c40362e211a0e0500000000000000000000000a1f33475874899eb4b09a85705b475874899eb4b09a85705b3827150200000000000000000000000c22374c61778ca8b9a9937e69543e29140000000000000004182a3a556b8095aab8a78f7a644f3a240f0000000000000000000000000000000009192f404c6175869ca6b7c4bfb3a49c90847b75706c6b6b6c6d71757b828a969fa9b5c0b4a69d8a7b655e4c3d2d1b0b0000000000000000000000000b20354b60758a9fb4c8a48f7a654f3a2510000000000000001325365a6f859aababab9f8a75604b36200b00000000000b20354b6075899fb4c9bca7927c67523d2712000c22364a5c70859bb0b49e89766163788ea9baad98836e5837271502081d3144556b8096abc0c7b19c8773604a35200d000000000000000000000012273c51677c91a6c2c8b29d88735a4835200b0000000000081c2e3f51667b90a3b5c5b39e8875614b3928160300000000000000000000000c21364c61768ba7b9ccbbaa8c77624d37220d00000000071325364d62778ca7b9ccc4a48f7a654f3a25100000082135495b6e8398a9bab2a0927d675e4b443733292a333b4859677d92a6b7bbaa927d68523d281300000000000003182d42586d8297abababababababababababababababababababababab8e79634e39240e000f24394f64798e9ca4b2b7b9a89e94887f766960564a43362f221b10060000000000000000000000000004172a3a5c71869cb1b29d887356455c71869cb1b29d88735645311d0900000000000000000000000a1f33475874899eb4ab96816b56412c16010000000000000010253a4f657a8fa7b8aa957f6a553a2917040000000000000000000000000000011527374c5e6e8298a4b6c4bfb2a199867b6f66605557565556585660666d77818b9ba3b2beb8a89e8b7c655b4a392917030000000000000000000000081d31445572889db2bca7927c67523d271200000000000000182d42576d8296969696968d78624d38230d00000000000e23384d63788da9bacdc4a48e79644f39240f00071b2d3e52677d92a6b8a8937e69677c91a6c7aa947f6a553f2a1500021527374e63788da2b4c8b6a4907b65503b2b180500000000000000000005182a3b576c8197acc1c3ae98836e593c2b19060000000000001124384c5e71869bb1c3b8a7947f695745321e0a00000000000000000000000a1f33465874899eb3c9c8a48f7a654f3a2513131313151a21304354687d92a7c5cbb8a68d78634d38230e0000061a2c3d4d62788b9fb4beb49f8a7c6960554c463a3a474c596277889eb3c4b49f8b78624d38220d00000000000000152b40556a809596969696969696969696969696969696969696969696917b66513c2611000d22374d62778ca8b4bbc8b49e897f766a61594d483c352c221b1008000000000000000000000000000000192f44596e8499a4a49f8a75604b596e8499a4a49f8a75604b36200b000000000000000000000004182a3a5c71879cb1ae99836e59442e1900000000000000000b20354b6074889eb3b09a85705846331f0a0000000000000000000000000000081d314455667c91a0b2c2c2b2a1998375665e504b443740404138454b5058616b798598a0b1bdb9a99e8a79635746331e120000000000000000000000011527375b70859ab0bfaa947f6a553f2a150000000000000011263b51667c81818181818178624d38230d000000000011263c51667b91a6c7cbb7a68b76614b36210c00001020364b6075889db3b19c86726a8095aac6a6917b66513c26110000092135495b70859aafc5c2ae98836e59483420090000000000000000000b1f34475971879cb1c6c6a9937e69543e291400000000000000091c2f4052677c91a5b6c5b39e8875604b38281603000000000000000000000417293a5c71869cb1c6bca7927c67523d28282828292a2d36424a6072869cb1c6c8b39d8874604a35200b0000000f2035495a697e93a0b2baa89f8c7e736861585a5a58616977869ca6b8bdae98836e5a4834200b0000000000000010253a4f657b8181818181818181818181818181818181818181818181817a644f3a250f000b20354b60738a989faab4b9a89e94877f776c625a4e493d362d231c110700000000000000000000000001172c41566c818f8f8f8f8d78634d566c818f8f8f8f8d78634d38230e0000000000000000000000001a2f445a6f8499afb09b86715b3929160300000000000000081d3144556d8298adb49f8a76614c36210c00000000000000000000000000000b20354b6074879cb2bec9b6a499837460564c403631272b2b2c2832363a474c5b637482979fb1bfb9a89c8676614c40301a0a0000000000000000000000182d43586d8298adc1ac97826c57422d17020000000000000f24384c5e666c6c6c6c6c6c625a4935200b0000000000152a3f546a7f94a9bfc8b29d88735746321e0a0000091d3145566b8095aab6a4907b6e8399aeb9a88d78624d38230d0000061a2c3d52677d92a7b8cab49f8b77624c3726140100000000000000000d22374c62778ca4b6cabaa88e79644f39240f00000000000000001220354b6074879cb2c4b8a6947f695645321e0a0000000000000000000000192f44596e8499aec3bfa9947f6a543f3d3d3d3d3e3f3d4a4e60697f94a4b5c9c2ad98826d5443301c0700000006192b3c4f616e8298a2b2baaa9f93867d76716f6f71777f899ca4b5c1b09f8f7a644f3c2b1905000000000000000e22374b5d656c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c645c4b37220d00081c3043546379828c979faab4b4a59d948a81786d635b4f4a3e372e201c130801000000000000000000000d22374d62777a7a7a7a7a75614b4d62777a7a7a7a7a75614b36210c000000000000000000000002172c42576c8197acb39e89735746321e0a000000000000000114263752677c91aabbaa917c66513c271100000000000000000000000000081b2e3e53687d92a5b6cabcab9c8674605645382f201d15161617161e212a333d495660728197a1b2c3b6a499836e5e4d3828160200000000000000000000162b40556b8095aac0af99846f5a442f1a00000000000000091c2f404c515656565656564d493c2b19060000000000132536586d8298adc2c4af9a856f5a392916030000021527384d62778b9fb4ae998372879cb1b49e8974604a35200b0000000e21364b6075899eb3c8bbaa957f6a5544311d08000000000000000012273c52677c91a7c2c9b49f8975604b35200b0000000000000000081d314455687e93a6b7c5b39d8875604b3828160200000000000000000002172c41576c8196acc1c1ac97826c5752525252525355575c646e7e8c9fb4c2c9b6a4917c665136251300000000000e1e32424b60748499a1b4bab4a49c928a878584868b949ea7b5c0b4a396816c5c4a361d0d0000000000000000081b2e3f4b4f5656565656565656565656565656565656565656565656564f4b3e2e1b080001142636495b636d78828b979fa9b4b2a99f968b82796e645c504b3f3530251d14090200000000000000000b203448596264646464646157464859626464646464615746321e0a000000000000000000000000152a3f546a7f94a9b8a78b76614b36210c00000000000000000c21364c61768a9fb4ac97816c573a2917040000000000000000000000000d22374b5c71869cb1c3cab49f8c7a64564538281a11080200000002090c171f2c38455460728399a5b6c2b2a1917c665645321e0a0000000000000000000013283d53687d92a8bdb19c87725c3b2a18040000000000000012222f383b41414141414138352b1e0e0000000000071c30435471869bb0c6c1ac97826c57422d17000000000a203448596e8398aeb49f8b778b9fb4b09b86705443301c07000000091e3245566c8196abc1c8b29d8774604b35200e0000000000000005182a3b576c8197acc1c4af9a856f5544311d080000000000000000011426374b6074889db2c5b8a6947e695645321e0a0000000000000000000014293f54697e94a9bec4af99846f686868686868686a6d727983929faabbcebcab9c8673604b35200b000000000000141d324556607483949fa9b3b5b1aa9f9c9a999b9faab3b8bbb4a29a8574604b3e2d1b0000000000000000000010212e373a4141414141414141414141414141414141414141414141413a372e201000000008182c3d494e5a636d78818b969fa9b4b4aa9f978c837a6f655d514a433631261d150a0000000000000005182b3b484d4f4f4f4f4f4b46393b484d4f4f4f4f4f4b463929160300000000000000000000000012273c52677c91a7c5a38e79634e39240e00000000000000000a1f3346586f859aafb29c87725847331f0a0000000000000000000000000f253a4f647a8fa4b5c9c1ad97826d5c4b38281a0a000000000000000000040f1a273643546175879cabbcbfb29d8775604b3828160300000000000000000010263b50657b90a5c9b49f89745947341f0b0000000000000004121c2430393b484c4c473a372f211204000000000b20354a6074899fb4c9bea9947e69543f29140000000005182b3b50657b90a4b5aa968196aabbac97826d5736251300000000021628384e63798ea3b4c8b7a6917c66513c2c19060000000000000b1f34485972879cb1c7c9aa95806b5537271501000000000000000000091d314556697f94a7b8c4b39d8875604b3828160200000000000000000012273c51677c91a6bcc8b29d877d7d7d7d7d7d7d7e7f82878e98a0b4bbc8bcb59f8d7b655443301c0800000000000002152838455660727f8b99a1adb4bab4b1afafb1b4bbbbb4aa9f9784766156453120100000000000000000000002101b22252c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c25221b1002000000000f1f2c353c494d5a626c78818a969fa8b4b4ab9f988e847b706660544b443732281a12050000000000000d1d2b34373a3a3a3a3a3632292b34373a3a3a3a3a3632291b0b000000000000000000000000000f253a4f647a8fa4c7a6907b66513b261100000000000000000417293a556b8095aab6a58c76614c37210c00000000000000000000000417293a566b8096abc2c9b5a38e79644f3e2e1a0a0000000000000000000000000a1826364657647a8d9fb5c8b6a5957f6a5645321e090000000000000000000e23384d63788dabbcbaa98c77614c37220c0000000000000000132330404d5159626158504b3f2f2212000000000d23384d62788da8bacdc8a6907b66513b261100000000000d23374b5d71869cb1b49f899fb4c8a9947e69543f291400000000000a21364a5b70859bb0c5c4af99846f5a4935200a0000000000000d22374c62778ca4b6cabcab907b66503b261100000000000000000000021527384b6176899eb3c6b7a6937e695645321e0a0000000000000000000f243a4f64798fa4c6cbb7a69d929292929292929394979ca4aeb2bec5b8b39e95806a5d4c36261401000000000000000a1a28384554606979848f989fa8aaadafb0b0afacaa9f998c817461584738271502000000000000000000000000080e101717171717171717171717171717171717171717171717170f0d08000000000000010f1a212c353c494d5a626c77818a969ea8b3b4aea19a8f857c736760554b4538302312020000000000000d1820222525252525211e161820222525252525211e160b00000000000000000000000000000d22374c62778ca9baa8937e69533e291400000000000000000011263c51667b91a6c3a58f7a65503a251000000000000000000000000a1f33475871869cb1c6c5b09b85705c4a3620100000000000000000000000000000081829394b5c6d8298aabbc3b39e8875604b3621100000000000000000000b20364b60758a9fb5c7a48f79644f3a240f000000000000000c1c30414d5e6672777771655d4c402f1c0c00000011263b51667b90a6c6cebbaa8d78634d38230e0000000000081c2e3f53687e93a8b9a89fa8bac5a5907b65503b26100000000000071a2d3d52687d92a7b9cab59f8c78624d38281502000000000012273c52677c91a7c2cab49f8b76614c36210c00000000000000000000000a1e3246576a8095a8b9c4b29d8875604b3828150200000000000000000c22374c61778ca8bacdc4b7b2a7a7a7a7a7a7a7a8aaacb1b6c2c5b8b3a69e91806b62503f2f18080000000000000000000a1a2836434a5b636f7a828a9095989a9b9b9997928b83796c6056473a2a1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e19202b353c484d59626b77808a959ea8b3b3afa39b91867d746860564d4130201000000000000000050b0d0f0f0f0f0f0c0a03050b0d0f0f0f0f0f0c0a030000000000000000000000000000000b20354a60758a9fb4ab96806b56412b160100000000000000000f243a4f64798fa4b9a6917c67513c271200000000000000000000000c21374c61768ca4b6c9c8a9947f69543e2d1b020000000000000000000000000000000b1b2e3e4d62788b9fb4cab8a7927d68533e2d1b070000000000000000091d32455673889db3bca6917c67513c271200000000000004172a3a4d5f677c878c8c867b665e4c3a2a17040000142a3f54697f94a9bec9b49f8a75604b35200b0000000000001121364b6176899eb3bab4bac6b8a78c77624c37220d0000000000000f21364b6075899eb3c9bcab96806b5645321d090000000005182b3b576c8297acc1c6b19c86715846331f0a0000000000000000000000031629394c61778a9eb4c7b7a6937e695645321d0a00000000000000000b1f34475974899fb4bababababababababababababac7bab4b1aca79e95887d6b62514333211100000000000000000000000a1825303d494e5c646d757b7f8385868684817d776e635b4b45382a1c0c000000000000000000000204000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e19202b343b484c59616b768089959ea7b3b4b0a49c92877e74675f4d3e2e1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2ae98836e59432e1900000000000000010f1a23384e63788da3b8a8927d68533d2813000000000000000000000010263b50657b90a5c2cebbaa8f7a65503a25100000000000000000000000000000000000102035485a6d8298adc3c5b19b86715c4a36220d0000000000000000021528385b70859bb0bea9947f69543f2a140000000000000a1f334758677d919ca5a39b8c7c665847331f0a0003182d42586d8297adc2c7b19c87725544311d080000000000000a1e3246576c8196abbcc9cdc8b39e88735948341f0b000000000000091e3245576c8197acc1c9b39e8875604b36200f000000000b2034485972879cb1c7c1ac97816c573a2917040000000000000000000000000b1f3347586b8196a9bac4b29d8875604b382715020000000000000004182a3b5c72879ca5a5a5a5a5a5a5a5a5a5a5a5a5a4a4a99f9b9791888076675f51443325150300000000000000000000000008131c2c353e4a4f5660656a6d7071706f6c6862594e4a3d32281a0c00000000000000000007111719110b070000000000000000000000000000000000000000000000000000000000000000000000000000000000060d19202b343b474c58616b767f89949ea7b3b5b1a59c93887d675c4b37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafb09b86705b382816030000000000000f1f2d363a4f657a8fa4c1a7917c67523c2712000000000000000000000014293e53697e93a8becab49f8a76614b36210c000000000000000000000000000000000005192b3c4f657a8fa5b7c9b5a38e79644e39240f000000000000000000192e43586e8398adc1ac96816c57412c170200000000000c21374c6176899eb2b6b5aa9e8876614c37210c0005192b3c5b70869bb0c5c3ae99846e5937261401000000000000031629394e63798c9fb5cadac5af9a85705a3b2a1805000000000000031628394e64798ea3b5c9b8a7927d67523d2d1a070000000d22374c62778ca4b6cac4a7927d67523d28120000000000000000000000000004172a3a4d62778b9fb4c9b7a6937e685645311d0a00000000000000001a2f445a6f8490909090909090909090909090908f8e8c8a86817c756b61584d41332616070000000000000000000000000000000f1a212e3638454b5055585a5b5b5a57524c483b362d1d150a0000000000000000000a18242c2e27201c13080100000000000000000000000000000000000000000000000000000000000000000000000000000000050d18202a343a474c58616a767f88949da6b2b6b2a69d8d7a644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acb39e88735645321e090000000000071a2d3d4a4e58697f94a9b5a38e78634e39230e0000000000000000000000162b41566b8096abc0c7b29c87725746321e090000000000000000000000000000000000000e20354a6073879db2c7c2aa947f6a553a2a17040000000000000001162b41566b8096abc0ae99846f59442f1a00000000000013283d53687d92a7b8cac8b8a6937e68533e2913000b2035485a74899eb4c9c0ab96806b56412b1600000000000000000b2135495b6f849aafc3d4c1ac96816c57412c1700000000000000000a22364a5c71869bb0c6c5b09a85705b4a36210b00000012273d52677c92a7c2cbb7a68d78624d38230d00000000000000000000000000000c203448596d8297abbcc4b29d8774604b38271502000000000000000e23394e63797b7b7b7b7b7b7b7b7b7b7b7b7b7a7a797775716c6660564c473a30231608000000000000000000000000000000000006101b222832363b404345464644423d37342b211a0f020000000000000000000718283640443c3530251c14080100000000000000000000000000000000000000000000000000000000000000000000000000000000050c181f2a333a464c57616a757f88939da6b2b7ab957f6a55402a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aab8a68b76604b36210b00000000000c21364a5b636876889eb3ab9b86715b4935210c0000000000000000000000182d42586d8297adc2c5b09b86705b39281603000000000000000000000000000000000000071c3043546c8196abc1c5b09b85705847331f0a000000000000000013293e53687e93a8bdb19c86715c3a2917040000000000152b40556a8095aac5d5d5c4ab96816b56412c16000d22384d62778da8b9ccbda8927d68533d28130000000000000000061a2c3d51667c91a5b7cac8a8937d68533e28130000000000000000071b2d3e53687e93a8b9c8b4a28e79634e392916030005182b3b576c8297acbac5b39d88735a4935200b000000000000000000000000000005182b3b4d63788c9fb4c0b7a6937e685645311d09000000000000000c21364a5b636565656565656565656565656565656462605557514b453833291c12050000000000000000000000000000000000000000070a161e21262a2e3031312f2c282220180d070000000000000000000000112436465359514a433630261d14090100000000000000000000000000000000000000000000000000000000000000000000000000000000040c171f293339464c576169757e88939da5ac97826d57422d18020000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7c4a38d78634e38230e00000000000e24394e63797d879ca6ab9f8d7b65503d2c1a060000000000000000000000192e43596e8398aec3c4af99846f5a442f1a000000000000000000000000000000000000000013253651667b91a6c4cab49f8b77614c37210c000000000000000011263b51667b90a6bbb39e89745847331f0a000000000013293e53687e93a8b9ccccbbaa947e69543f29140011263b50667b90a5c6babea48f7a654f3a25100000000000000000000f20354b6074879db2bebbaa8f7a654f3a25100000000000000000001021364b6176899eb4c0c0ac97816c5746321e0a000b2034485972879ca5a5a5a798836e583c2b19060000000000000000000000000000000d2135495b6d8298a2a5a5a59d8774604b36200b00000000000000071a2d3d4a4e50505050505050505050505050504f4f4d4b44373c3631271f170c00000000000000000000000000000000000000000000000003090b1015181b1c1b1a17130d0b0500000000000000000000000000172c4053646e6660544b433631261d15090200000000000000000000000000000000000000000000000000000000000000000000000000000000040c171f293339464b566069757e87929d9a846f5a452f1a050000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8a5907b66503b261100000000001a2f445a6f84929ca5a39b8c7e685d4b371f0f000000000000000000000000192f44596e8499aec3c3ad98836e58432e1903000000000000000000000000000000000000000c21374c61768ca6b7cbbcab907b65503b261000000000000000000e23394e63788ea3c5b9a88c76614c37210c00000000000d22374c6277899eb3b8b9b39f8b78624d38230d0014293f54697e94a5a5a5a5a08c77614c37220c000000000000000000081d314455697f94a0a5a59f8b76614c36210c0000000000000000000a1e3346576c8197a2a5a5a59e8975614b36210c000d22374d62778c909090908f897a644f39240f0000000000000000000000000000000006192c3c4c6176848e90909090907d68533e281300000000000000000f1f2d36393b3b3b3b3b3b3b3b3b3b3b3b3b3b3a393735312626201d150a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e837c736760544b443731271d150a0200000000000000000000000000000000000000000000000000000000000000000000000000000000040b171e283238454b566068747d879287725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778daabba8937d68533e28130000000000172c42576c8197acb09b867968604e41312211000000000000000000000000192e43586e8398adc3c3ad98836e58432e1903000000000000000000000000000000000000000a1f33475873889db2c8c9a9937e69543e291400000000000000000c21364b61768ba7a5a5a38e79644e39240f00000000000b20344859687e929ea7a79e937f6a5a4935200b00182d42576d8190909090908e826d5847331f0a000000000000000000011426374b6073828d90908d7f6a5746331e0a000000000000000000031729394c6176848e90909090907d68533e2813000c21374c61767b7b7b7b7b7a76645c4a36220d00000000000000000000000000000000000e1f3347586170797a7b7b7b7b7a644e39240f0000000000000000010f1a21232626262626262626262626262625252422201d14110b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455a708591867c736760554b443731271d150a0300000000000000000000000000000000000000000000000000000000000000000000000000000000030b161e283238454b556068747d85715c46311c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4ab95806b56402b160100000000152a3f546a7f949faba39a847a685f4e402f1b0b0000000000000000000000172d42576c8297acc1c3ae99846e59442f1904000000000000000000000000000000000000000417293a5a6f8499afc4c2ac97826d57422d180200000000000000091e324657738990909090907c66513c2611000000000005182b3b4e60687e898f8f897e6a61503c2b1906000f24394e647a7b7b7b7b7a796d64533a2a180400000000000000000000091d314455606d787a7a786a615039291703000000000000000000000b1f3347586170797a7b7b7b7b79634e39240e000a1f3347586165656565656561584a3e2d1b07000000000000000000000000000000000004172a3a474c5b636565656565645c4a36210d00000000000000000000070c0e1010101010101010101010101010100f0d0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d82989c91867d736860554b453832281e160a0300000000000000000000000000000000000000000000000000000000000000000000000000000000030a161e283237444b55606874604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c30435472879db2ad98836d58432e18000000000011263b50667c868c99a1a29a8b7e685e4c3928160300000000000000000000162b41566b8096abc0c4af9a856f5a45301a000000000000000000000000000000000000000000182d42576d8297acc2c5b09a85705b45301b0600000000000000031628394f647a7b7b7b7b7b77624d37220d0000000000000d1d31424e6068757a7a7569605043331e0e00000d21364a5c646565656565635b5346351c0c000000000000000000000002152737444b5b636565635a5043331b0b000000000000000000000004182a3a474c5b636565656565635b4a36210c0004172a3a474c5050505050504c463a2d2010000000000000000000000000000000000000000c1c2a333d4a4e50505050504e4a3e2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aaa49c92877d746860564b453832281e160b0400000000000000000000000000000000000000000000000000000000000000000000000000000000030a151d273137444b55605544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426365a70859aafb09b85705b38271502000000000f23384c5e6672788399a2aa9f8c7c665746321e0900000000000000000000152a3f556a7f94aabfc7b19c87725c3b2b18050000000000000000000000000000000000000000152b40556a8095aabfc7b19c87725c47321d0000000000000000000b22374b5c64656565656562594834200b00000000000000132431424e5660646460564f42332515000000071a2d3e4a4e50505050504e4a3d35281800000000000000000000000000091927313c494d50504d493c332515000000000000000000000000000c1c2a333d4a4e50505050504e4a3d2d1a0700000c1c2a33373b3b3b3b3b3a3633291c100200000000000000000000000000000000000000000c171f2d36393b3b3b3b3b39362d200f0000000000000000000000060f1618202020201e190e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92abb6b1a49c92877e746960564b453932291f170b04000000000000000000000000000000000000000000000000000000000000000000000000000000000209151d273137444b4437261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adb29d88735645311d0900000000091c2f404c505a6273849bb0aa9d8875614b36210c0000000000000000000012273c52677c91a7c7c9b49e8974594834200b000000000000000000000000000000000000000014293f54697e94a9bec8b29d88735d482513000000000000000000081b2e3e4b4f50505050504d483b2b1805000000000000000613243138454b4f4f4b453832241507000000000f202d36393b3b3b3b3b39362d1f1809000000000000000000000000000009151d2c35383b3b38352c1e150700000000000000000000000000000c181f2d36393b3b3b3b3b39362d1f0f000000000c171f21262626262625211f170c0000000000000000000000000000000000000000000000040f1a2124252626262624211a0f01000000000000000000000917232a2d35353535332e2320190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63798d9ea7b3b6b2a59d93877e756960574b463933291f170c04000000000000000000000000000000000000000000000000000000000000000000000000000000000209151d2631353126190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aab59f8a75604b36200b000000000011222f383c4955657a8fa5b6a6937e6953382816020000000000000000000e23394e63788ea9baccb9a88c77624d37220d000000000000000000000000000000000000000013293e53687e93a8bdc9b49e89745443301c0700000000000000000010202e373a3b3b3b3b3b37342b1d0d00000000000000000006131a2832363a3a3632281a14060000000000010f1a2124262626262523211a0f0100000000000000000000000000000000020e19212325252320190e0000000000000000000000000000000000040f1a2124252626262624211a0f010000000000040a0c1010101010100c0a040000000000000000000000000000000000000000000000000000070c0e10101010100f0d070000000000000000000000061727353f424a4a4a4a494338352c1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b677d89949da6b2b6b2a59d93887e756a61574c463a332a1f180c05000000000000000000000000000000000000000000000000000000000000000000000000000000000109141d201d1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bcab8d78634d38230e000000000004111c232b374b5d72879db2b09b85705645321e090000000000000000000b20354b60758a9fb4c9c6a6907b66513b2611000000000000000000000000000000000000000013283d53687d92a8bdcab59f8a74604a35200b00000000000000000002101b222526262626262220180d0000000000000000000000000a151d202525201d150a000000000000000000070d0f10101010100e0c070000000000000000000000000000000000000000060c0e10100e0c060000000000000000000000000000000000000000070c0e10101010100e0c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2335455257606060605e594d493c2c1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4d5f67757f88939da5b1b5b2a69d94887f756a61584c473a342a1f180d050000000000000000000000000000000000000000000000000000000000000000000000000000000001080b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9a5907a65503b251000000000000000090e192e3f586d8297adb49f8b75604b36210b000000000000000000081d31445571869bb1c6bfaa95806a553a2a18040000000000000000000000000000000000000014293f54697e94a9becab49f8a755443301c070000000000000000000000080d0f10101010100d0b05000000000000000000000000000002090b0f0f0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711171920202020202020202020202020202020201f1d1b18140f0d070000000000000000000000000000000000162a3f52636d75757575736e635a493c2c18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30414d576169757e87929ca4b0b4b3a69e94897f766a61584c473a342a20180d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788dabbca8927d68533d2813000000000000000000152a3f556a7f94aabcab8d78634e38230e00000000000000000001152737566b8096abc5c5b09b85705947341f0a00000000000000000000000000000000000000162b40556b8095aac0c9b39e89745e492513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1415120b0903000000000000000000000000000000071117192020202020181610060000000000000000000000000000000000000000050b0d1a1f20202014120c02000000000000000000000a19242c2f35353535353535353535353535353535353433302d2924211a0f0b060000000000000000000000000000182d42576d828a8a8a8a888378635b493626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000113233039464b566068747d86919ba3afb4b3a79e948980766b61594c483b342b20190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4aa95806a55402b1500000000000000000013283d52687d92a7c9a48f79644f3a240f0000000000000000000010253a4f657a8fa7b8cab49f8b77614c37221100000000000000000000000000000000000000132536576c8196acc1c7b29d87725d48321d0000000000000000070d0f1415120b0903000000000000000000060c0e1415130c0a04000000000000000000050b0d1315130d0b05000000000000000000000002101b22242a2b27211e160a000000000000000000000000000a19242c2f35353535352d2a2317090000000000000000000000000000000000000d181f222f3535353529271f140600000000000000000719293640444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494846433e39362d2320190e050000000000000000000000000d22374c6277899e9fa79e988979635443301c0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131b293238454b556067737c85909aa2aeb5b3a79e958980776b62594d483b352b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573889db2ad98826d58432d1800000000000000000012273c51677c91a6baa58f7a65503a2510000000000000000000000b20354b6074899eb3c8bbaa937e69533f2f1c080000000000000000000000000000000000071c3043546f8499afc4c5af9a85705a45301b05000000000002101b22242a2b27211e160a000000000000000e192023292b28211f170c000000000000000d181f22282b292220190d0000000000000000000a151d2d36393f403c3632281a1002000000000000000000000719293640444a4a4a4a4a423f35271706000000000000000000000000000000000d1d2a3437454a4a4a4a3e3b3224140200000000000000112436475459606060606060606060606060606060605f5f5d5b58544e4a3d38352b1f180d00000000000000000000000b1f344759697f94a4b6b3a79b8573604b39291603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e283237444b546066707b848f999fabb4b3a89e958a81776c62594d483c2b1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527375b70859ab0af9a85705a37271501000000000000000011263c51667b91a6bba5907b66503b261100000000000000000000081d3144556d8297acc0c8b19b86715d4c38231300000000000000000000000000000000000b20354a6074899eb3c9c2ac97826d57422d1802000000000a151d2d36393f403c3632281a100200000007151e2c35383e403d3733291c120400000005131d2a34373e403e38342b1d14060000000000000a1a27313e4a4f5455524b45382e201000000000000000000000112436475459606060606058524535231000000000000000000000000000000008182a3b484c5a5f606060544f42321f0c00000000000000172c4054656e75757575757575757575757575757575757472706d69645c564d483c342a1d130500000000000000000005182a3b4b6074869cb1bfb5a3927d685746321e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a151d263136434a515d656f7a838c989faab3b4a89f968a81776c625a483a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adb29d88725544311d08000000000000000012273c52677c91a7bba5907b66503b261100000000000000000000011426374e63798ea2b4c8b5a3907b655041301d0d000000000000000000000000000000001325364e63798ea7b9ccc4a8937e68533e2913000000000a1a27313e4a4f5455524b45382e20100000051525333c494d5355524c473a3022120200021323313b474c5355534d483c322514040000000002152738454b5c64696a6760564a3e2e1d0d000000000000000000172c4054656e75757575756d63523f2a160100000000000000000000000000001325364859626f7475757569604f3b271200000000000000192f44596e838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898885827e79726b625a4c473b302316080000000000000000000d1d314455667b90a1b3c1b39d8875614b3c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000209141d2530353f4b505c646e79828b969ea7b3b4a99f968b8178625847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095aab49f8a75604b35200b000000000000000013283e53687d93a8baa5907b65503b261000000000000000000000000921364a5b70849aafc0c1b09a85705f4d3b2a19090000000000000000000000000000071c304354697f94a9c5cbb7a68e79644e39240f00000002152738454b5c64696a6760564a3e2e1d0d0013233343505a63696a6861584c4030201000102031414e5962686a68625a4f4332221200000000091d314556606d797f807c75645c4a3b2a18050000000000000000192f44596e838a8a8a8a8a826d58422d180000000000000000000000000000071c3043546277848a8a8a8a7e69543e291400000000000000172c41566c81969f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9b98938e8780786d62594d41332616080000000000000000021527374c5e6f8399a9bab7a695806b5a4835201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108131c202f373e4a4f5b636d788189939ea7b8b4a99f978b76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bbaa8d78624d38230d0000000000000000142a3f54697f94a9baa5907b65503b26100000000000000000000000071a2d3d51667c91a2b4c8b4a2917d67594737271509000000000000000000000000011426374a6073879cb2c7c8b39d8874604a35200b000000091d314556606d797f807c75645c4a3b2a180818304150626a787e807d76665e4c3e2d1b071b2d3e4e5f68777d807e7869614f402f1c09000005182a3b4b6074828e949591877a645948341f0b0000000000000000172c41566c81969f9f9f9a856f5a36261401000000000000000000000000031628384a6072849a9fa99f96816b56412c160100000000000014293f54697e94a9b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b4b2b0ada9a59d958b8277675f514434261605000000000000000009192f404d63788b9fb4c4b49f8a78624d3e2e18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c232e363d4a4e5a626c757e899eb3c7bab4aa8e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5c8a58f7a65503a25100000000000000000152b40556a8095aabaa5907a65503b25100000000000000000000000000f24384c5e6f849aaabbc0b39e88776255443126190d0100000000000000000002111d314455657b90a5b6cac1ac97826c5443301c07000005182a3b4b6074828e949591877a645948341f1325364d5f6a808b939592897c665c4a36220d22364a5c687d8a9395938b7f695e4c38240e00000b1f3447596b8095a0a9aaa59d8977624c37220d000000000000000014293f54697e94a9b5b29d87725443301c08000000000000000000000000091e324556677d92a2b4baae99836e59442e190000000000000011273c51667c91a6bbcad1c0b4afaeaeaeaeaeaeaeaeaeb0b1b4b9c3b7b2aa9f97897d6b625144342313000000000000000000112135495b6b8096a6b7baa998826d5c4b362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d181f2c353e4a4f5e66727c85939ea7b8bab4a79e917c67513c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788dabbca7927d68523d28130000000000000001162b41566b8096abbaa5907a65503b2510000000000000000000000000091d2f404e63798b9fb4c1b8a69a8473604b44372b1d14090400000000000109151d2f3f4b6073859bb0c3c9b5a38f7a644f3625130000000b1f3447596b8095a0a9aaa59d8977624c37221c304354677d919faaaaa79e8b7a644f3a240f24394f647a8c9fa8aaa99f907c66513c2b1906000d22374c62778b9fb4bec3b7a795806b56402b16000000000000000011273c51667c91a6bbb49f8a75604b35200b000000000000000000000005182b3b4b6075879db2c0c6b09b86715b392917030000000000000f24394f64798ea4c6d6c8b4a29a9999999999999999999a9c9ea8aab3b8bbb4a79e92806b625141311e0e000000000000000006192c3c4b6176889db3c1b2a08f7a645443301c0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b171e2a343c494d5c646f7b86919ba3b3b8b2a99f96897f74604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768a9fb5aa957f6a55402a150000000000000001172c41566c8196abbaa58f7a65503a251000000000000000000000000000122135495b6b8096a3b4c4b3a297816d6055483b31261f1713110f1011141d27313f4c5d6a7f94a3b5c9c0b19b86715c4b3718080000000d22374c62778b9fb4bec3b7a795806b56402b20354a6073889db2bbc5b9aa99846f59442f1325365a6f849aaabac6bab29d87725a4835200b0011263c51667b91aabbced4c5b09b85705b46311b00000000000000000f24394f64798ea4c6bbaa8c77624d37220d00000000000000000000000b203448596a7f94a5b7cbc8b39e89735746331e0a0000000000000c21374c61778ca8b9cdc4af9a848484848484848484848587898f959ea7b0bcb8b39e95806b604e3c2b190500000000000000000e1e334657687d92a3b4beb09b8572604a39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d29333b474c5a636e7a84909ba3b0b4b4b0a0988b817669605645311d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889db3ad97826d58422d180000000000000001162c41566b8196abbba5907b66503b261100000000000000000000000000061a2c3d4b6074859ba6b7c0b19f97817362594b443733292826252526263137444b5d657b8b9fb4c1c7b4a2917c66513e2e1b0000000011263c51667b91aabbced4c5b09b86705b463123384d62788da6b7cbd6c8b49e89745f49341c304354748a9fb4c8d7cab7a58d78624d38230d0011273c51667c91a6bdced7c7b09b86715b46311c00000000000000000c21374c61778ca8b9c8a48f7a654f3a251000000000000000000000071b2d3e4c62778a9eb4c3d4ccb8a78b76614b36210c0000000000000a1f33475874899eb4c9b9a48f7a6f6f6f6f6f6f6f6f6f7071757a8089969eb5bcbcb09e927d685a4835200e0000000000000000031729394a6072859babbcb4a3927d675745321e0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c273139464b59626c78838d9aa2b1b5b6b2a39b8f83786b61584b453827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628385b70869bb0af9a856f5a3626140100000000000000152a40556a7f95aabca6917c67513c271200000000000000000000000000000f1d3145566277889da8b9bdb19f9784776860554c473a3d3b3a3a3b37444b5560697b8a9fa9bacdbaa99b85705e4c3920100000000011273c51667c91a6bdced7c7b09b86715b463123384e63788da7b9ccd9c9b49f8a745f4a3520354a60758a9fb4cad9cbb8a68d78634d38230e000d23384d62788d9fb1c1c6baa997816c57422c1700000000000000000a1f33475874899eb4bca7927c67523d2712000000000000000000000a22364a5c6d8297a8b9cde2d5c5a38e79634e39240e00000000000004172a3a5c71879cb1c6bca7917c6759595959595959595b5560646b7581929fabbcbcb49e8a78624d3d2c1a0600000000000000000b1c304354647a8d9fb5c1b29d8775604b3b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e18253038454b57616a77818b989fabb4b8b3a59d91857a6e635a4c473a31271a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adb29d87725443301c080000000000000014293e54697e93a9bda7927d68523d28130000000000000000000000000000021527384859647b8a9ea7b8bdb1a29a897e736961585652504f4f5153556066747f8b9fa8bac7bdb49f8b79634e40301d02000000000d23384d62788d9fb1c1c6baa997816c57422c20354b6074899eb3bec9bcb09a85705b45301c30435471869bb0bcc3bdb39e8873604b35200b000b2035485a6d8297a3adaea89f8b79634d38230e000000000000000004172a3a5c71879cb1bfaa947f6a553f2a150000000000000000000a1a30404e647a8c9fb4c6d7e2d0bba6907b66513b2611000000000000001a2f44596f8499aec4bfa9947f6a544444444444444437444b4f57616b7d8d9fb5c3b9a898836e5b4935210c0000000000000000001325364a5c6d8297a8b9b7a6957f6a594834201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b36434a56606976808a979faab5bab4a79e94877c70645c4d493c33291d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8096abb49f8a75604b35200b0000000000000012273c52677c91a7c5a9947f69543f2a140000000000000000000000000000000a1a2b3b4b5c657b899ea7b4c0b3a79e93867e76706b6866646566696d747c86949fa9bac6beb19f937e685b4935221200000000000b2035485a6d8297a3adaea89f8b79634d38231d314455697e93a0acaeab9f907c66503b2613253650657b909eacaeac9f927d685544311d080006192b3c4c617585929899958a7c665b4935210c0000000000000000001a2f44596f8499aec1ac97826c57422d170200000000000000021527384d5e70849aabbccecaced8bea8937e69533e291400000000000002172c42576c8197acc1c1ac97826c57422f2f2f2f2f2f27313539464b5f6a7f95a5b6c6b49f8c78634e38230e00000000000000000008182e3e4c6277899eb4c3b49f8a77624d3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192b3c49546067747e88959ea8b4bbb2a99f96897e74675f4f4b3e352c1f170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8bbaa8c77624d37220d000000000000000e23384e63788da7b9ab96816c563b2b18050000000000000000000000000000000d1d2e3e4b5d657a899ba2b4bbb8b3a49c938b85807d7b7a7a7b7e8288919ca4b4bac7bcb5a097816c604e3d2c1a04000000000006192b3c4c617585929899958a7c665b4935211527374b607282909799968c7f695e4c38230823384c5e6a808f9699978f816c604e3726140100000e1e33465761737d82838078665e4c3c2c1906000000000000000002172c42576c8197acc1af9a846f5a452f1a0000000000000000091d314556667c91a2b4c8bbb4bbc8c0ab96806b56412b1601000000000000142a3f54697f94a9bec4af99846f5a442f1a1a1a1a1a151d202932414b6074879db2c7bcab95806b563b2a1805000000000000000000101f344859697f94a4b6baa898826d5c4a3622120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035495a62727d87939ea6b4b9b4b0a0988b81766960564d41372e20190e0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a1012263b51667b90a6c8a48f7a654f3a2510000000000000000b20354a6074899eb3b09b85705948342013130b070000000000000000000000000010202e3f4b5c647885959faab3bfb6b1aa9f9b9692908f8f9093989da6b1b6c2c3b7ab9f958272604b42311f0f000000000000000e1e33465761737d82838078665e4c3c2c19091c304354606d7b8284817969614f402f1c091c2f4050626a7a8184817a6c63524231190900000003172939465560676d6e6a625a4c40301e0e00000000000000000000142a3f54697f94a9beb19c87725c3b2a180500000000000004182a3a4b6074879cb2c0bbaa9faabbc3ae98836e59432e190000000000000012273c52677c91a7bcc7b19c87725c3b2a180404040001080b161e314455687e93a8c3c9b19c87725947341f0b00000000000000000005182a3b4b6074879cb2bfb59f8d7a644f41301a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d627885929da5b3b8b6b2a39b8f83786b61584b453830221b1006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25282c394e63798ea3c5a7927c67523d271200000000000000071c3043546e8399aeb49f8b77624d3f302528201c130800000000000000000000000210212e3e4a5a6273808c99a1afb4bbbbb4b0aba7a5a4a4a6a8adb3b8c4c6b9b3a59d8d8072605443302414010000000000000003172939465560676d6e6a625a4c40301e0e01142636434b5e666c6e6b635b4f423222120011213343505c646c6e6c655d524535231300000000000b1b2937444b525859554d483c302212000000000000000000000012273c52677c91a7bcb49f89745947341f0b0000000000000a1f334758697f94a5b6bbaa9f8a9fb4c5b09b86705b392816030000000000000f243a4f64798fa4c7c9b49f89745947341f0b000000000000031527374d62788da5b7cab6a48c77624c37220d000000000000000000000d1d314556667c90a1b3bcab9a85705f4d3828160200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e8398a3b2b6b8b3a59d91857a6e625a4c473a31271a1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021323313a3d41414b61768ba7b8aa947f6a553f2a15000000000000000013253651667b90a5b7aa96806b5d4a43363d353025180800000000000000000000000210202d3c4855606a79838f999faab0b4bbc8bdbbb9babbbec2c9bcb5b0a89e95877c6a605443362614060000000000000000000b1b2937444b525859554d483c302212000008182630404c505759564e4a3d3224140400031525333e4a4f575957504b3f352717050000000000000b192631353d43444038342b1d120400000000000000000000000f243a4f64798fa4c7baa98c77624c37220d0000000000061a2c3d4c6177899eb3c3b49f8c8096abc0b39e88735745321e090000000000000d22374c62778ca9bacdbaa98c77614c37220c00000000000000092035485a72879db2c7c2a58f7a65503a251000000000000000000000021527384c5e6f8499aabbb4a2917c675645321e0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e44596e8399aebab4a79e94877c70645c4d493c33291d150a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102031414d525757575773899eb3ac97826c57422d1700000000000000000b20354b6073879db2b49f8c7b68605457534a4336251300000000000000000000000002101e2b37444b5b636f7a848b939b9faaa9acadafb0b0afadaaab9f9b93898075665e4a433626180800000000000000000000000b192631353d43444038342b1d120400000008141c2f383b42444139362d1f14060000000715202d363a4144423a372e211709000000000000000009141d20272d2e2b2220190d000000000000000000000000000d22374c62778ca9bac7a48f79644f3a240f0000000000092136495b6c8197a7b9b9a897817c90a5bbb8a68b76604b36210b0000000000000b20354a6075899fb4c9c7a48f79644f3a240f0000000000000005192b3c5b70859bb0c5bca7927d67523d281200000000000000000000000a1a2f404e63798b9fb4c0b29d8775604b3b2a1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001172c41566c8196aba99f96897e74675f4f4b3e352c1f170c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4d5f676c6c6c6c71869bb0af9a846f5a3625130000000000000000081c304354667c91a0b2aa9f8a7d736e6c68605443301c07000000000000000000000000000e1926313d4a4e5d656f777e858a8f9397989a9b9b9a9895918b857e766a61574c40302518080000000000000000000000000009141d20272d2e2b2220190d00000000000001111c23262d2f2c24211a0f01000000000002101b22242c2f2c25231c11030000000000000000000001080b121819150d0b0500000000000000000000000000000b20354a6075899fb4bca6917c67513c27120000000009192f404e63798c9fb4c3b39e8977798ea3c5c4a38d78634e38230e000000000000071c30435472879cb1c7bca7917c67523c27120000000000000000192f44596e8499aec3bda8937e68533e2913000000000000000000000000122135495b6b8096a6b8b7a5947f6a5948341f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a0988b81766960564d41372e20190e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5d677d8181818181879db2b19c87725443301c0700000000000000011426364c5e6d8298a1b5a89f928883817d72604a35200b000000000000000000000000000009141d2d363f4b4f59626970767a7e81838486858483807c77706961584b46392f1c130800000000000000000000000000000001080b121819150d0b05000000000000000000090f111719160e0c07000000000000000000070d0f171917100e08000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb1bea9947f69543f2a14000000011527374c5e6f8499aabbb6a5947f69768ca7b9bba5907b66503b2611000000000000001325365a6f849aafc4bea9947f69543f2a1400000000000000061a2c3d5a6f859aafc4bda8927d68533d2813000000000000000000000000061a2c3d4c6176889db3c1b49e8a77624c3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c918f83786b61584b453830221b10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f96969696969da5b7b49f8975604a35200b000000000000000008182f404b607483979fabb4a69d9896927d67523d2712000000000000000000000000000000010f1a212e373b474c54566064696c6e6f70706f6d6a676159534c473a33291b12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f849aafc1ac96816c57412c17020000081d314455667b90a1b3c0b29d87746074899eb3bda8937d68533e281300000000000000172d42576c8297acc1c1ac97816c57422c1710101010101112192136495b72879db2c7c2a6917c66513c2711000000000000000000000000000e1e334657687d92a3b5b9a897826d5c4a36221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f647a857a6e625a4c473a31271a1208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5acacacacb0b0b0b0a98c77624c37220d000000000000000000121e3245566073818d9a9faaabadab96806b56412b16000000000000000000000000000000000007101b222a343738454b4f5457585a5b5b5a5855514c473a3733291e170b0000000000000000000000000000000000000000000000000002090b1d1f1f1f1f1c110f09000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e13151614120d0b050000000000000000000000000000172d42576c8297acc1ae99846f59442f1a00000417293a4b6074869cb1bfb4a2917c675671869cb1c0ab95806b56402b1601000000000000152a3f556a7f94aabfc4ae99846f59442f25252525252526282c35434e63798ea5b6cab6a48d78624d38220d00000000000000000000000000031729394a6072859babbcb49f8c7a644e40301a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607370645c4d493c33291d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63798e9a9a9a9a9a9a9a9a9a9a8f79644f3a240f000000000000000000031628384555606c7a848b9196989998836e58432e1900000000000000000000000000000000000000080d181f222832363a3e42434546464543403c37342a211f170c03000000000000000000000000000000000000000000000000000a161e2132343434343126241d12040000000000000000000000000000000000000000000000000000000000000000000000070e192023282b2b2a272220180d09020000000000000000000000152a3f556a7f94aabfb19c86715c3a291704000a1f334658697e93a4b6bcab9a85705f596e8499aec2ad98836d58432e180000000000000012273d52677c92a7bcc6b19c87715c3a3a3a3a3a3a3a3a3b3d3c494d616e8398adc3c1b19c87725a4835200b00000000000000000000000000000b1c304354647a8d9fb5bcab9a84705e4d38271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445560554f4b3e352c1f170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61758485858585858585858585857b65503a2510000000000000000000000a1a2837444b5c646f767c81828485816c57422c17000000000000000000000000000000000000000000050b0d161e2125292c2e2f31302f2e2b27221f180c0a0400000000000000000000000000000000000000000000000000000a1a2832364749494949473b382f2212000000000000000000000000000000000000000000000000000000000000000000010f1a212c35383d40413f3d37342b201d150a0000000000000000000012273d52677c92a7bcb49e89745847331f0a06192c3c4c6176889eb3c2b59f8d7a644f576c8196acc1b09b85705b3828150200000000000010253a4f657a8fa4c8c9b49e89745850505050505050505152565a636e7f94a0b2c3b4a3937e68533c2b19050000000000000000000000000000001325364b5c6d8298a8b9b4a2917c665645311d0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b4437372e20190e04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e32465761707070707070707070707070655d4b37230e00000000000000000000000a1927313e4a4f5861676b6d6f706c63523e2a1500000000000000000000000000000000000000000000000003090b0f1417191a1b1b1a1815120c0a040000000000000000000000000000000000000000000000000000000002162838454b5c5e5e5e5e5c514c402f1f0e0000000000000000000000000000000000000000000000000000000000000004111f2d363c494d53555654524d483b3631271a1204000000000000000010253a4f657a8fa4c8b9a88c76614c37210c082035495a6b8196a7b8b9a897826d5c4a54697e94a9beb29d88735645321d090000000000000d22384d62778daabbcdb9a88c7765656565656565656566676b707882949daebeb4a59b8573604b35200e0000000000000000000000000000000008182e3e4c62778a9eb4c0b29c8774604b3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192631353126221b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162939464b5b5b5b5b5b5b5b5b5b5b5b5b504b3f2e1c0800000000000000000000000009151d2d363a474c5256585a5b57524534220f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455660727474747471665e4c3d2c1a0600000000000000000000000000000000000000000000000000000000000011222f3d4a4e5a63686a6b69676259534b45382f221507000000000000000d22384d62778daabbc6a38e79644e39240f182e3f4d63788b9fb4c3b49e8a77624d3e51677c91a6bcb59f8a75604b36200b0000000000000b20354b60758a9fb4c9c6a8927e7a7a7a7a7a7a7a7a7a7b7d80858c98a0aeb6b1a29a8778625544311d08000000000000000000000000000000000010203448596a7f94a5b6b6a5947f695947341f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d201d1409080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2932364545454545454545454545453a372e2111000000000000000000000000000002101b222933373c41434445423e34271705000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1013141514120f0c0a0400000000000000000000000000000000000b21364b60758689898989867c665b4935210f00000000000000000000000000000000000000000000000000000000000d1d2f404c5b636f787d80807f7c77716860564c40332515040000000000000b20354b60758a9fb4bba6917c66513c271426364b5d6e8399a9bab7a5957f6a5948394f64798ea4c6bcab8d78634d38230e000000000000081c30435472879db2c7c1ad9c928f8f8f8f8f8f8f8f8f9092959a9fabb3aba49c928477625a4837271501000000000000000000000000000000000005182b3b4b6074879cb2bfb39e8977614c3d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b161e2130303030303030303030303025231c110300000000000000000000000000000000070c171f21272c2d2f302c2a2217090000000000000000000000000000000000000000000000000000000000000000000000000001080b171f2125282a2a292825211f170d0b050000000000000000000000000000091e324556687e939e9e9e9c8b79634e3e2d1a0700000000000000000000000000000000000000000000000000000005192b3b4c5e6679848d92959694928c867d74665e504333210d000000000000081c30435472879db2bea9937e69543e291c304354657b8fa1b3c1b29d8775604b3b374c61778ca8b9c9a5907b65503b2610000000000000011426365a6f859aafc4cabaada8a5a5a5a5a5a5a5a5a5a6a7abb0b5a79e9690867d726259483c2b1909000000000000000000000000000000000000000d1d314556667c91a1b3b9a797816c5b4a36211200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1b1b1b1b1b1b1b1b1b1b1b1b100e080000000000000000000000000000000000000000040a0c1216181a1b17150f050000000000000000000000000000000000000000000000000000000000000000000000000008141c202933363b3d3f3f3e3d3a3733292220190d05000000000000000000000000021628384b6073869cb1b3a998836e5c4a3621100000000000000000000000000000000000000000000000000000000b20344859667c8a9aa2a8aaaba9a7a39b93877c6a62503c2813000000000000011426365a6f859aafc0ab96816b56412c29394b6073859bb1bfb5a3927d6756453233475874899eb4bda8927d68533d281300000000000000182d42586d8297adc2d8c8bbb4b1b1b1b1b1b1b1b1b2b4b9c6c1b39e89807b72686054483b2b1e0e0000000000000000000000000000000000000000021527384c5e6f8499aabbb49f8c79634e402f19090000000000000000000000010a101217171717160f0d08000000000000000000000000030a0c151717171714120c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311182630353a464c5053545453524f4c473a37342b20190e0000000000000000000000000a1d314455667c91a2b4b59f8d79644e3e2e1b0800000000000000000000000000000000000000000000000000000d22374d6278899ea9b4c0bfc0b9c1b5b1a69d91806a55402b1500000000000000182d42586d8297adc2ae99836e59442e324657687d92a3b5beb09b8572604a38282a3a5c71879cb1c0aa95806b55402b1600000000000000152a40556a7f95aabfcebbaa9f9c9c9c9c9c9c9c9c9d9ea8a6acb4a79b857e74675f4b45392a1c0c0000000000000000000000000000000000000000000a1a2f404e63798b9fb4bbaa9a846f5e4c3727150200000000000000000005131e25282c2c2c2c2b25221b10020000000000000000000b161e212a2c2c2c2c29271f1406000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d121414120e0c060000000000000000070a0b0b0a09000000000000000000000000000000000000000000000001080b0f12131514110e0b07000000000000000000000000000000000000000000000000000714212f36434b5258616568696a6967646158554d483b352b1c130800000000000000000000011426374c5e70859ab0bcab99836f5c4b3722110000000000000000000000000000000000000000000000000005192b3b576c8196a8b9c7c0b4afa4a1a4abb4a8947f69543f2a1400000000000000152a40556a7f95aabfb09b86715b392b3c4b6175889db3c1b2a08f7a645443301a2f44596f8499aec2ad98826d58432d180000000000000013283d52687d92a7bdc9b49f8c868787878787878788898c91979fa8a39b92877c6e6057473a2a1a0a000000000000000000000000000000000000000000122135495b6b8196a6b8b3a2907c665544311d0c000000000000000001132330393d41414141413a372e201002000000000000000b1b2932363f414141413f3b32251403000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d1920222729292723211a0f0a030000080d0f1d202020201e0801000000000000000000000000000000000000000809141d202427292a292723201c130807000000000000000000000000000000000000000000081625323f4c54606770767a7d7f7f7e7d7a76716a62594d483c3025180c00000000000000000000091930404f647a8fa0b2b3a18f7a644f3f2f1c080000000000000000000000000000000000000000000000000b2034485973889db3c6c4b4a29a8f8c8f959e9e8a76614c37210c0000000000000013283d52687d92a7bdb39e8973574635485a6b8095a6b7baa998836e5d4b3625132c42576c8197acc1b09a85705b3727150100000000000010253a50657a8fa5c8c9b39e8974717171717171717374777c828a969fb0a59d918275615847382816020000000000000000000000000000000000000000061a2c3d4c6176889eb3c0b19c8674604b3a2a1704000000000000000a1e30414d5256565656564f4b3f2e201000000000000003162939464b5456565656544f43321f0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232b34383c3e3f3d38352c211e160b101b22253235353535331d14090000000000000000000000000000000007111c232631353a3c3e3f3e3c38353025221b100700000000000000000000000000000000000004162633434f5d65737d858b9092949493928f8b8680786d625a4a43362a1c0f010000000000000000001222374b5c6e8398aabbaf9a846f5d4b3723120000000000000000000000000000000000000000000000000d22374d62778ca6b7cbb7a69a847a7779808a95816c5847331f0a0000000000000010253a50657a8fa5c8b8a78b76614b3e4d62788a9fb4c4b49f8a78624d3f2e18142a3f54697f94a9beb29d88725544311d080000000000000d23384d62788daabbccb9a78b76615c5c5c5c5c5c5d5961666c7681919faab2a0988576615645321e100000000000000000000000000000000000000000000f1f334658687d92a3b5b6a4937e695847331f0f000000000000001025394d5f676c6c6c6c6b645d4b3e2d1b070000000000091e324657616a6c6c6c6c69614f3b27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816212e373c484d515454524e493d3632291b202e373a474a4a4a4a483126190900000000000000000000000000010f1a212f3837444b4f51535453514e4a4336362e221b100200000000000000000000000000000000122233445061697b86929a9faba8a9a9a8a7ab9f9b958b8278696054473a2c1f10020000000000000000081b2e3e4d63788b9fb4b4a2907b6550402f180800000000000000000000000000000000000000000000000f24394f64798ea4c4c8b39d88756461646b788077614c3a291704000000000000000d23384d62788daabbc5a38e78634e4b5c6d8298a9bab7a695806b5a4835201012273c52677c91a7bcb49f8a75604b35200b0000000000000b20354b60758a9fb4cac5a38e79644e47474747473b474c5158616c7d8c9fb4b2a39a8474604b3e2d1b0700000000000000000000000000000000000000000417293a4b6073859bb0beb39e8976614c3d2c1a0600000000000012283d52677d81818181807a645c4a3622120000000009192f404b61757f818181817f69543f29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081626343f4b505a6267696967635b544b46392f2e3e4b4f5c5f60605f5c4437261401000000000000000000000004121f2d363f4b5055606467686a69666360544f4a3e362d1d150a00000000000000000000000000000c1c2f4050626b7f8d9ca4b0b4bcc8bbb4b3b4bab5b0aa9f988a7f726158493d2d2010000000000000000000102135495b6c8197a8b9b09b85705e4c36251300000000000000000000000000000000000000000000000f253a4f647a8fa4b9c2ad98826d574c4f5a626b615947341c0c00000000000000000b20354b60758a9fb4bba6907b66514f647a8fa0b2c2b39d8876614b3c2b19020f243a4f64798fa4c6bbaa8d78624d38230d000000000000081d31445572889db2c7bba6917b66513c323232322a34373a474c5f687e93a2b4b4a296816c5c4a36220c0000000000000000000000000000000000000000000b1c304354647a8fa0b2b8a796816c5b493521110000000000000f243a4f647a8a969696968b7a644f413019090000011527374c5e6e8394969696927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316263444515d6570777c7e7e7c78726961574c40374b5c6472757575756e5544311d08000000000000000000000513222f3d4a4e5d656e74797c7e7f7e7c78746d645c4f4a3e31271a0c00000000000000000000000004172a3a4c5e6b80949fabb5c0b4afa7aa9f9e9fa8a5abb3b4a99f948476635b4a3e2d1b0b000000000000000006192c3c4c6177899eb4b4a3907c665443301c09000000000000000000000000000000000000000000000e24394e63798ea3c6c0ab96806b56393c484d554c473b2a18000000000000000000081d31445572889db2bda8937e68535f70859bb0beb5a3927d685746331e0e000c22374c61778ca8bac8a58f7a65503a2510000000000000011527375b70859ab0c5bea9937e69543e291c1c1c181f222a33414e6070849aafc0b49f8c7a644e3a2a17040000000000000000000000000000000000000000011426364b5d6d8298a8b9b49f8b79634e402f190900000000000d22364a5c6e8298a9aba99b85705f4d3727150200081d314455667c91a1abab9b8572604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121344451626b7b858b919394928d877f75665e4a434f647a868a8a8a8c73604b35200b00000000000000000001132330404c5b636f7b83898f91939493918d88827a70645c4b45382a1d0e00000000000000000000000a1f334758667c909eb5bcbbb4a29a928c8a88898c90969ea7b4b4a29a8779645c4a3a29170400000000000000000e1f3447596a7f95a6b7b19b8672604a372614010000000000000000000000000000000000000000000c21374c61768ca8bac2ac97826d57422b35384037342a1d0c000000000000000000011527375b70859ab0c0ab96806b56677d92a3b4bfb19b8673604b39291700000b1f34475974899fb4bda7927d68523d281300000000000000182d43586d8298adc2c0ab96816b56412c160700040b0c171f314250657b90a7b9bbaa98836d5847331f0a00000000000000000000000000000000000000000008182e3f4d62778a9eb4bbaa99846f5e4c3727150100000000071b2e3e4d62788b9fb4b4a3917c675544311d0b031729394b6074869cb1b3a1907b655443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182f3f51626b808d9b9faba9a9a7a59d94887c6b60545a6f849a9fabaa8d77624d38220d0000000000000000000f1f30414d5e66798490989ea7a6a8a9a8a6a69d978f857a6b6056473b2b1e0e000000000000000000021628384c6176889eb3bcbbaa9f92857d77747374767b8188959fa9b4a59d897a645846331f0a000000000000000004182a3b4b6075889db3b5a3917c675544311d090000000000000000000000000000000000000000000a1f33475874899fb4c4af99846f5a362520222b221f180c0000000000000000000000182d43586d8298adc2ad98836e6075879db2c1b3a1907b655443301b0b000004182a3b5c72879cb1bfaa957f6a55402a1500000000000000162b40556b8095aac0c3ae99836e59442e190000000000041420354b6074899eb3c8b49f8a77614c37210c0000000000000000030808080808080808080808080010203448596a7f94a5b6b3a1907b665544311d0c0000000000102035485a6b8096a7b8b29c8774604b3929170a1e334657697e93a4b6aa99836f5d4b362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364b5d6b80969fabb5bcc9bec3b6b2a69d908072605471879cb1bca58f7a65503a2510000000000000000008182c3d4d5f677c8a9aa2aeb3b9bab4b2b2b4b8b3aca29a8c81746159483c2b1c0c0000000000000000091e3245566a7f95a7b8bfb49f8c7d706762595e5861656c75808b9ca4b1a79e8976614c36210c0000000000000000000c1e324557687d93a4b6b19c8673604b37271502000000000000000000000000000000000000000004172a3a5c72879cb1c7b19c87725443301c0d160c0b04000000000000000000000000162b40556b8095aac0b09b86706a7f94a5b7bbaa99836e5d4b362614000000001a2f445a6f8499afc2ad97826d58422d180000000000000013283d53687d92a8bdc6b09b86715b392816030000000000081d3144556e8499aec3baa9917c67513c2712000000000001080b191d1d1d1d1d1d1d1d1d1d1d1d1d1d182b3b4b6074879db2beb19c8674604b3a2917040000000006192b3c4c6176899eb3b6a5937e695746331e192b3c4c6176889eb3b49f8b79634e3f2e1808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354657b909eb5bcc9bfb2aea6a4a5abb29e9682726070859ab0bda7927d68523d28130000000000000001142636495b677d8c9ea8b3beb2ada89f9d9d9fa9aeb2b4ab9f968577625a483a2a1808000000000000000b21364b6075889eb3c5b3a1927d675f524c483b474c5057606b7986979fa0957f6a5846331f0a000000000000000000031628394b6074869cb1b6a4927d685544311d0a0000000000000000000000000000000000000000001a2f445a6f8499afc4b49f8975604a35200b0000000000000000000000000000000013283d53687d92a8bdb39d8873778a9eb4c3b49f8b78634d3f2e180800000002172d42576c8297acc1af9a856f5a3626140100000000000010263b50657b90a5c9c8b39e88735746321e09000000000001142637576c8197acc1c7ab96816c56412c170000000009151d202e32323232323232323232323232323232324556667c91a0b2b6a4937e685846331f0e00000000000e1f334658697e93a5b6b39e8876614c3b2b2035485a6b8095a7b8a897816c5b49352111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073869cb1bccfbaada098918f90969ea8a096816c6e8399aebfaa957f6a55402a1500000000000000081c30435463798a9eaab9bbb4a0988f8987878a9099a1b3b9b4a39b87786258473626140100000000000011263c51667b91a6b8c6af99846f5f4d4137342a333739454b5b6375818e908272604a3a291704000000000000000000000a1d3144556b8095aac2b29d8774604b382816030000000000000000000000000000000000000002172d42576c8297acc1baa98c77624c37220d0000000000000000000000000000000010263b50657b90a5c9b59f8b738297a8b9b8a796816b5b493521110000000000152a3f546a7f94a9bfb29d87725443301c080000000000000e23384e63788dabbcccb8a78b76614b36210c000000000000152b40556a8095aabfc3ae99836e59442e190000000919273135434747474747474747474747474747474747384c5e6e8298a5b7b39e8876614c3c2c1906000000000417293a4b6074879cb2b8a795806b5948342d3e4d62788a9fb4b49e8977614c3d2c1a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a4b6cabdad9c92837c797b818a9aa29f937e6c8297acc1ad97826d58422d18000000000000000b20354b6073869ba8b9bbaa9f91827a747272757b83909ea8b7b5a59c8676615443301c0e000000000001162c41566b8196abc4b9a8907b66514131221f181f2128323d4a57616c797a72605443301b0b00000000000000000000000a1e33465770859ab0c5b7a5937e685645321e0b0000000000000000000000000000000000000000152a3f546a7f94a9bfc7a48f7a644f3a250f000000000000000000000000000000000e23384e63788dabbcbcab907b8c9fb4c2b39e8976614c3c2c1903000000000012273c52677c91a7bcb49f8a75604b35200b0000000000000b20364b60758a9fb5cac5a38e78634e39230e000000000004142637566b8196abc0c5b09a85705b45301b000001152737444b585d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d6176879da8b8a796816b5b4935210e00000000000c1d314455677c91a2b4b49f8a78624d3d364a5c6d8298a9b7a6947f6a5947341f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a586d8298adc2c5b19f927e6e6764666c778498a09f8b7a8095aac0af9a856f5a372614010000000000061a2c3d51677c91a3b5c2b49f8c7c6d6460545660656e7c8a9da6b7b6a49a8472604b3c2c190600000000011426365b70869bb0c5b49e8974604b3520130b050a0c161e2d39464b5b63656054433625130000000000000000000000000c21364b61768a9fb4cac3b29d8875604b392917030000000000000000000000000000000000000012273d52677c92a7bcbca7917c67523c2712000000000000000000000000000000000b20364b60758a9fb5c9b29d879dabbcb6a4937e695846331e0e0000000000000f253a4f647a8fa4c7bbaa8c77624d37220d000000000000091d32455673889db3c8bba6907b66513b26131313131314181f3144556e8398aec3c5af9a85705a45301b0000081d314455606e7272727272727272727272727272727272727272727279899eb3b49f8b78634d3c2b190600000000021527374d5f70859ab0baa997826d5c4a404f647a8d9fb5b29d8775604b3b2a1801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475972889db2c7c2ac97826d5f514f505962738298a19b857f94a9beb29d87725544311d0800000000000c2136495b71859bb0c2b6a4937e695e4f4a43454b505e6679879da9bab4a2947f6a5a4935200f00000000081c30435473899eb3c5b09a85705544311f181814100b090f1b29323d4a4e504a433625180800000000000000000000000011263c51667c91aabbcecbb7a6947f695746331e0c000000000000000000000000000000000000000f253a4f647a8fa4c7bfa9947f6a543f2a1500000000000000000000000000000000091d32455673889db3c8b7a59da5b7bfb19c8674604b3a2917000000000000000d22374c62778ca9bac8a48f7a654f3a2510000000000000021528385b70859bb0c5bda8937e68533e2928282828292a2a343e4b6074889eb3c8c3ad98836e58432e1900000b20354b60738287878787878787878787878787878787878787878787878a9eb4bbaa98836e5a4835200b0000000000091930404f647a8fa0b2b49f8c79644e4d5e70859aabb5a3927d685645321d0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca5b7cab6a48d78634d413a3b48556073839aa39b869bb0c5b49f8a75604b35200b00000000000e23394e63798ea3b5c7b19c8674604b4035303136404c5b647a8b9fb4c0b49f8a78634d3e2d1a070000000b20354b60758a9fb4c2ad98826d583737342a2d2925211e160f161e2d36393b353025180800000000000000000000000006192c3c576c8197acc8cecac4b39e8876614b3a2a17040000000000000000000000000000000000000d22374c62778ca9bac1ac97816c57422c1702000000000000000000000000000000021528385b70859bb0c5c3b7b2b7c3b3a1907b665544311c0c000000000000000b20354a60758a9fb4bca7927c67523d271200000000000000192e43586e8398adc3c0ab96806b56413d3d3d3d3d3e3f3b474c5c687e93a7b8ccc5ab96806b56412b16000010253a4f657a8f9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9ea8b9c8b59f8c78624d38230d0000000000001222374b5c6e8398a9baab9a846f5e55667c91a2b4b19b8673604b38281600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c3c6b19c87715a4935242b3744556176879da39ba3b5c9bbaa8d77624d38220d000000000014293e53697e93a8c1c8a9947f6a554431201c1d202f3d4a5c697e93a4b5baa999836e5c4a36210c0000000c21374c61768cabbcc1ac97816c574f4c473b423f3a36322825201c1a212325201c1308000000000000000000000000000c2035495a72879cb2c8bbb4bbb8a7957f6a5847331f0d0000000000000000000000000000000000000b20354a60758a9fb4c4af99846f5a442f1a0000000000000000000000000000000000192e43586e8398adc3d4cac7cabbaa99846f5e4c3727150000000000000000071c30435472879cb2bfaa947f6a553f2a1500000000000001162b40566b8095abc0c3ad98836e5852525252525253545759616a7b8a9eb4c5ccb8a7907b65503b251000000e24394e63798ea3b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b4b9c6cfbcab937e68533e2913000000000000071b2e3e4d62788b9fb4b3a1907b656074879cb2b3a1907b655443301a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbc2ad98836d583c2c191927374657657b90a0b0b5c1d1c8a58f7a65503a25100000000004192e44596e8399aec3bbaa8e79634e3726140709121f2d3e4a6072869cb1c2b59f8c79644e3a29170400000c22374c61778ca1c8c0ab96816b676462595b5854504b45393a3530262019100b070000000000000000000000000000000d23384d62788da5b6bbaa9faab9b39e8976614c3b2a18050000000000000000000000000000000000071c30435472879cb2c6b19c87715c3a2a180400000000000000000000000000000001162b40566b8095abc0d5dfd6c5b49f8c79634e402f19090000000000000000001325365a6f849aafc1ac97826c57422d170000000000000013293e53687e93a8bdc5b09b85706868686868686868696c7077808b9ea8b9cdc1b39e8974604b36200b00000c21364c61768ba8b9bababababababababababababababababababababababababac9ac97826c57422d1700000000000000102035485a6b8096a7b8b19b8671697e93a4b6aa99846f5d4b3626140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcc0aa95806b55402b16091929394c5d6d8298a9baced2bca7927d67523d281200000000001325365c71879cb1c6b49f8a75604b36200b000001101c304354667c91a4b6bcab97826d5846331f0a00000b21364b60768baabbc6b09b857f7c7a7774716d69656057554f4b4336352b20190e00000000000000000000000000000115273753687e93a8c3b49f8a9ea7b9a795806b5947341f0d0000000000000000000000000000000000001325365a6f849aafc4b49f89745947341f0a0000000000000000000000000000000013293e53687e93a8bdd3e0ccb9a797816c5b4a36221200000000000000000000172d42576c8297acc1af9a846f5a3625130000000000000011263b51667b90a6bbc8b39e897d7d7d7d7d7d7d7d7e7f81858b959fa9b9c6c2b5a3937e695544311d0800000a1f33465874899ea5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a599846f5a442f1a0000000000000006192b3c4c6176899eb3b5a3907c74889db3b49f8c79634e3f2f18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcbfa9947f6a543f2a15000b1b2f3f4d62788b9fb4c9dabfaa957f6a55402a1500000000071c30435473889eb3c7b29d88725645311d09000000001325364d5e72879cb1c9b49f8a76614c36210c0000091e324556748a9fb4c9b5a39b94918f8c8986827e7a76706b6460544d493c352b1e1400000000000000000000000000081d3144556e8399aec3ad9883899eb3b49f8a77624c3c2b19050000000000000000000000000000000000182d42576d8297acc2baa88c77614c37220c0000000000000000000000000000000011263b51667b90a6bbd0d3c3b39e8977614c3d2d1a0400000000000000000000152a3f556a7f94aabfb19c87725443301c070000000000000e23394e63788ea3c5ccb8a79e92929292929292929394969a9faab4bac7beb2a49b8573604b3727150200000417293a5c718690909090909090909090909090909090909090909090909090909090909086725c47321d00000000000000000e1f334658697e93a5b6af9a837e93a6b7a897826c5b4a362111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbbea9947e69543f29140000112035485a6c8197abbccfc2ac97826d57422d18000000000b20354a60758a9fb4c6b19c86715c382715020000000008183040556b8095aac5baa9927d67523d28120000021628385d72879cb2c7c1b5b0a9a7a4a89e9b97948f8a86807a746b625a4d493c321c130800000000000000000000000b20354b6075899eb3c9a9947f8096aabaa896816c5a4834200e0000000000000000000000000000000000152a3f556a7f94aabfc6a48f79644f3a240f000000000000000000000000000000000e23394e63788ea3c5d5cab6a5947f695947341f0f000000000000000000000012273d52677c92a7bcb49f8a75604a35200b0000000000000c21364b61768ba7b8ccc5b8b3a7a7a7a7a7a7a7a7a8a9acb0b4bbc8bcb4afa0988676615544311909000000000f24394f647a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b65503a251000000000000000000417293a4b6074879cb2b49f8c869cb1b49e8a77624c3d2d1a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c5bfaa947f6a553f2a15000006192b3c4d63788c9fb5cac4af9a856f5a362614010000000b21364b60768baabbc6b09b86715b46311c0000000000001224394e64798ea6b8c7ae98836e593c2c19060000192f44596e8499aec3cebbaa9faaa5a8abafada9aa9f9b958f8880786e625a4f42302518080000000000000000000010253a4f657a8fa8b9bcab907b788b9fb4b49f8b78624d3c2c19060000000000000000000000000000000012273d52677c92a7bcbca6917c67513c2712000000000000000000000000000000000c21364b61768ba7b8ccc0b29c8774604b3a2a1801000000000000000000000010253a4f657a8fa4c7baa98c77624c37220d000000000000091e32465773889eb3babababababababababababababac9bcb5b2aeab9f9a90827661584737271500000000000d22364a5c64656565656565656565656565656565656565656565656565656565656565655d4b37230e0000000000000000000c1d314455677c91a2b4aa9f9ca4b6a6957f6a5948341f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788da7b9c1ab96816c56412c170000000e2135495b6f8499afc5c7b29d87725443301c080000000b20354a60758aa8b9c7b19c87725c3626140100000000000d21364a5c73889eb3c8b39e88735a4935200c0000162b40556b8095aac7c9b49f8b8c8f93969a9ea7a8aeb0aaa69d968c837869604a4336251300000000000000000004172a3a556a8095aac6b49f8b766d8297aabaa997826d5a4935200f0000000000000000000000000000000010253a4f657a8fa4c7bea9947f69543f2a140a0a0a0a000000000000000000000000091e32465773889eb3c5b4a2917c665645311c0c0000000000000000000000000d22374d62778ca9bac7a48f7a644f3a250f000000000000031628395b71869ba5a5a5a5a5a5a5a5a5a5a5a5a5a5a4a4ab9f9d99948b847b6d6158473a2a19090000000000071b2d3e4a4f505050505050505050505050505050505050505050505050505050505050504b3f2e1c08000000000000000000021527374d5f70859bb0bbb4b1b6b29d8875604b3b2a18010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074899eb3c3ae99846e593c2b1906000006192c3c51667c91a7b9c9b49f8a75604b35200b000000071c30435474899eb4c8b39d88735443301c080000000000071a2d3d5a6f849aafc4b8a78d78634d38230e000010253b50657b90a9babca7917d777a7d8185898e93999fa8b0b2ab9f988a7e6c605443301c0e00000000000000000a1f33475870859bb0c5b09b867162788b9fb4b49f8b78634d3d2d1a070000000000000000000000000000080d22374d62778ca9bac1ac96816c57412c1f1f1f1f1f12100a010000000000000000031628395b71869ba5a5a79a84705e4d382715000000000000000000000000000b20354b60758a9fa5a5a5917c67523c271200000000000000192e43596e839090909090909090909090909090908f8f8d8a88847e776f655d4c473a2a1c0c0000000000000010202d36393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a372e21110000000000000000000000091930414f647a8fa0b2c7c6b5a4927d685745321d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435470859aafc5b29d88735a4835200b0000000e20364b6075899eb3c9bbaa8c77624d37220d000000001325365c72879cb1c7b49f8a75604b35200b000000000000162b40566b8095abc0c5a6917b66513c261100000b20364b60758a9fb4c2ad97826d65686c7074787e838a929ba3b3b4a99f938172604a3c2b1905000000000000000c21374c61768b9fb4c8ab96806b5a6d8297aabbaa98826d5b4a36211000000000000000000000000002101b2225354b60758a9fb4c4ae99846f594435353535353527251e13050000000000000000192e43596e839090908f8979634e40301a0a00000000000000000000000000081c304354728790909090907f6a543f2a15000000000000000e23384e63797b7b7b7b7b7b7b7b7b7b7b7b7b7b7a7a797876736e696259504b3f332a1c0c000000000000000002101b222426262626262626262626262626262626262626262626262626262626262625231c11030000000000000000000000001222374b5c6e8398a9babfb19c8673604b392816000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536566b8095abc3b7a68d78624d382311000000091d3245566d8297adc2c8a48f7a654f3a2510000000001a2f445a6f8499afc4baa98d78634e38230e00000000000013283d53687d92a8bdbea8937e69533e29140000091d3245566e8399aec3b39e8875605356546063686e757d85919ea7b8b49f947f6a5a4835200b0000000000000012273c52677c91abbcbbaa907b665163788b9fb4b49f8c79634e3e2d1b07000000000000000000000010212e373a49435472879db2c6b19c86715c3a4a4a4a4a4a4a3d3930231301000000000000000e23384e63797b7b7b7a76635b493522120000000000000000000000000000011426364f647a7b7b7b7b7b79634d38230e000000000000000c2135495b63656565656565656565656565656565656462605759544d483b372e1f170c0000000000000000000000070d0f101010101010101010101010101010101010101010101010101010101010100e080000000000000000000000000000081b2e3e4d62788b9fa5a5a1907b655443301b0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea5b6c4a9937e69543f2f1c0800000215283852677c92a7bcbca7927d67523d281200000001162b40566b8095abc7c7a7917c67523c271200000000000012273c51677c91a6bcc0aa95806b55402b1600000215283851667b90a5b7b8a7927c675241434a4e53576067717d899ea7b9b49f8b78624d38220d000000000000061a2c3d576d8297acc9b49f8b76614c5a6d8297aabbab99836e5c4a36221100000000000000000000081b2e3f4b4f5e5f5f6f859aafc4b49e8974585f5f5f5f5f5f5f524d41301e0a000000000000000c2135495b63656565656158493d2c1a040000000000000000000000000000000822364a5c646565656565635b4935210c00000000000000061a2c3d494e5050505050505050505050505050504f4f4d4b45393f37342b231c1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102035495a6b8090909090836f5e4c362614000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c72879db2c6b19b86715d4b3723110000000f253a4f647a8fa4c7bfaa947f6a553f2a150000000011263c51667b91a9bac0ab96806b563e2d1a07000000000010263b50657b90a5bac1ab96816c56412c170000000b20354b6074879db2c2b09b85705f4d3a353939454b525f6779899eb3baa9947f6a553f2a150000000000000c2135495b72889db2c5b09b857057464d63788c9fb4b2a18e7a644f3f2e1c080000000000000000000e22374b5d65737474748297acc2b9a88c767474747474747474675f4d39251000000000000000061a2c3d494e5050504f4c463a2c1f0f00000000000000000000000000000000071b2d3e4a4f50505050504d493c2c190600000000000000000f1f2c35383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3a3a38363228292220180d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4b61757b7b7b7b77624c402f180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e556a7f95a8b9b5a3907b65503f2f1b0b00000d22374d62778ca9bac2ac97826d57422d18000000000c21364b61768a9fb4c7b29c87725c4a36210d000000000010253a4f657a8fa4bac1ac96816c57412c17000000081d314455687e93a4b6b4a3917c6758473627283236414d5b6a7f94aac7b09b86715b3928160300000000000e23394e63788ea5b7c8ab96806b5639495a6d8298aabbaf99846f5d4b37231100000000000000000010253a4f657a898a8a8a8c9fb4cac6b49f8b8a8a8a8a8a8a8a8b7d67523d271200000000000000000f1f2c35383b3b3b3a3633291c0f01000000000000000000000000000000000010202d363a3b3b3b3b3b38352c1e0e000000000000000000010f1a2123262626262626262626262626262625252423211e16140d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e33465761656565656259483421110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001021374c6176899eb4c1af99846f5d4b3a291704000b20354a60758a9fb4c4af9a846f5a362614010000000a1e3346576f8499afc4b6a48e79644e3b2b18050000000011263b50667b90a5bbbfaa95806a55402b15000000011426374b6074869cabbcb29d8776615445382c2021303d4e63798ea3b8b39e89745746321e09000000000215283854697e93a9c3bbaa907b66503b3c4e63798c9fb4b3a18f7a6550402f1c09000000000000000014293e53697e939f9f9f9faabbcecebaa99f9f9f9f9f9f9f9f947f6a553f2a150000000000000000010f1a212326262625211f170c0000000000000000000000000000000000000002101b222426262626262321190e000000000000000000000000060c0e101010101010101010101010101010100f0d0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464b505050504c483b2b18030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586b8196a6b8b3a1907b655846331f1605071c30435472879cb2c7b29c87725443301c080000000317293952677c91a6b8c3ab96816b59483420110000000012273d52677c92a7bcbea8937e69533e291400000000091d314455657b8d9fb5b7a69a83726056493d353031374c61768ca1b6b9a88b76614b36210c00000000091d3245566f8499afc4b49f8a76614b3635495b6d8298abbcb09a85705e4c382312000000000000000012273c51677c91a6adb0b3b9c6ced8c7bab4b4b4b4b4b4b4ac97816c57422c1700000000000000000000060c0e101010100c0a0400000000000000000000000000000000000000000000070d0f10101010100e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2933363b3b3b3b37342b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4c6176889eb3bfb29d8776614c443420180d1325365a6f849aafc4b49f8a75604b35200b000000000b20364b6074889eb3c4b49f8a77624c402f1e1001000417293a556a8095aabfc3a7917c67523c271200000000011527374c5d6c8196a3b5b3a1988274635b4f4a43444b55657a8fa4bab49f8a75604b35200b000000000b20364b6075899fb4c5b09b85705746322c3d4e63798c9fb4b4a2907b665040301808000000000000000f243a4f647a8f95989b9ea8b1bdcec1b5b09f9f9f9f9f9f9f99846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e21262626262220180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f334758677d92a1b3b7a598826d625144342b1d152d42576c8297acc1baa98c77624d37220d00000000091d314556697f94a6b7baa996816c5e4c3c2d1c1410121f3347586f8499aec4b6a58d78624d38220d000000000009192f3f4b6075859ba5b6b2a09884796c65605455606573849ab0c4b09b86715443301c080000000010253b50657b90a8bac8ab95806b5639292135495b6d8298abbcb09b85715e4d362614010000000000000b21364b60757d80838689979fb1c5b5a38f8a8a8a8a8a8a8a8a86715c47311c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c101010100d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4d5f6e8399a4b6b2a096806b624d483b31272a3f556a7f94aabfc7a48f7a654f3a251000000000021527384b6075889db3beb49f8d7b655a4a3e302625272f3e4c61768a9fb4c9b29d87725a4835200b000000000000111e3245576177879ca4b3b2a29a8b817a747272757b859aa2b4b7a6947f69543626140100000005182a3b566b8096abc6bbaa907b65503b261a2c3d4e63798c9fb4b5a3917c665443301c09000000000000091e32455660676a6d71748197acc9b09b857575757575757575716756432e1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c30414c6176869ca7b8b09e96806f62594b4437363d52677c92a7bcbca7927c67523d271200000000000a1e324557677c91a0b2bcab9e8978645c4b43363b3c404c5c6a7f95a9babcab97816c573c2b19050000000000000316283947596278869aa2b3b4a99f978f8a888789909ba3b4b8a99d8875614b36210c000000000b1f34475971869bb1c6b49f8a76614b36210f2135495b6e8398abbcb19c8673604b37271501000000000003162838454b5255585b677c91abbcb39e8873576060606060605c564939271300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f3346586379899ea7b8b09e9683776860554f4b464f647a8fa4c7bfaa947f6a553f2a150000000000031628394d5f6e8398a4b6b8a79d887a686054515051545e667a8b9fb4c6b59f8c79634e39230e00000000000000000a1b2a3b495a627684929ea7b2b4aca99f9d9c9ea8b0b4b4a79e8b7b655746321e09000000000d22374c62778b9fb5c5b09a85705746321e091a2c3d4e63798c9fb4b5a4927d675544311d0a0000000000000a1a2832363d40434c61778b9fb5b8a78b76614b4a4a4a4a4a4743392b1b0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a495b647a899ea6b4b0a199897d746b6561575e62778ca9bac1ac97826c57422d170000000000000a1b30414c6175869ca6b7b7a69d8a7e736b67656669707c899ea9bab9a899836e5b4935210c0000000000000000000c1d2b3c495861727d89959da6abb0b2b2b1b4b2afaa9f98897c665d4b392816030000000013253652677d92abbcc7aa95806b55392816030f2136495b6e8398abbcb29c8774604b382815020000000000000a161e21272b33475871869cb1c5a38e79634e3935353535312e271b0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3d4a5c6479889aa2b4b3a79e9287807a76747374758b9fb4c4af9a846f5a36251300000000000000121e3346576278889da5b4b7a89e9387807c7a7c7f85909ea7b8bcb49e8a79634e3d2c1a06000000000000000000000e1e2b3a46546068777f8890959b9d9fa99f9d9a948b8278665e4c3f2e1b0b00000000071c3043546d8298adc9baa9907b65503b251000061a2c3d4e63798c9fb5b6a5927d685645321d0b0000000000000003090b12182a3a566c8196abc8a6907b66513b262020201c1a130a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3e4a5b637884959fa9b5b3a59d958f8b89888a8b9fa9bac7b29c87725443301c0700000000000003172939495a6379879aa2b4b9b4a59d95919091949aa2b3b8baab9f927d675b49351f0f0000000000000000000000000e1c2936434a58616a747b8085888a8b8988847f786d625a4c402f211100000000000b20354a6074889db3c8b49f8a75604b36210b00000f21364a5b6e8398abbcb29d8774604b392816030000000000000000000011263c51667b91aabba8937e69533e29140b0b0705000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110202d3d4a596273808b989fabb3b2aba4a89e9e9fa9b4bac7c7b49f8a75604a35200b000000000000000b1b2b3c495b637784949ea8b3b6b2aba6a5a6a9b0b4bbb4a99f8d7f6a5f4d3d2c1a01000000000000000000000000000c1825303a474c5560666b7073747574736f69635a4d483c2f22110300000000000f24394e64798ea6b8c5b09a85705645321e090000071a2d3d4e63798c9fb5b7a5937e695746321e0b000000000000000000000c21364c61768b9fb4ab96816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101f2d3b4855606a78828c969da6aaaeb2b4b3b4bab4b2afaba99f8c77624d37220d00000000000000000e1e2c3d495962737f89969ea8adb1b4babab4b2aeaa9f978a7d6a615041301f0f00000000000000000000000000000008131c2a3337444b50565b5d5660565d5a544d493c342b1d110300000000000316283954697f94a9c4c7aa95806a55382816030000000f21364a5b6e8398abbcb39d8875614b3a2917040000000000000000000a1f33465870869bb0ae99836e59442e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d2b37444b5a626d7980888f94999d9ea8a1aa9f9d9a96918a8377624c37220d0000000000000000000f1f2c3b4854606977818991979c9fa9a99f9d99938b8277675f50433323130100000000000000000000000000000000000c181f2731363b404638454b4538453f38352c20190d00000000000000091e3245576f849aafc1baa98f7a65503a251000000000071a2d3d4e63798c9fb5b8a6947f6a5846331f0a0000000000000000000417293a566b8095abb09b86715b3929170300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1926313c494d5b636b747a7f8487898b8b8b8a8785817c766e625947341f0b000000000000000000010f1d2a36434b59626b767c8286898b8b8987847d776c62594d4133251505000000000000000000000000000000000000000409151d20262b3027313631272f2a2320190e0500000000000000000b21364b60768a9fababab9f8a75604b36210b00000000000f21364a5b6e8399a7abab9e8976614c36210c0000000000000000000010263b50657b90a9b39e89735746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2b353d494e5560656a6f727475767574726f6b6761584c473b2a180500000000000000000000000d1826303b484c5761676d7174767674726e6862594d483b302315070000000000000000000000000000000000000000000002080b11161b151d201d151a140e0c060000000000000000000011263b50667b909696969695826d5645321e090000000000071a2d3d4d6378899596969695806a55402b15000000000000000000000b21364b60758a9d9e9e8b76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010e19202c3537444b5055595d55606160565d5a56514c473a342a1d0d0000000000000000000000000008141c2a3439464b51585c566061575d59534d483b342b1d1305000000000000000000000000000000000000000000000000000000010002090b090200000000000000000000000000000011263b50667c81818181817f76614c382816020000000000000f2035495a63798081818181806a55402b1500000000000000000000091e324557697e8889898979634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a212731353a3f4437444b4c4b453845413c3733291f180d000000000000000000000000000000010d181f2932363c4238454b4b4639443e37342b20180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f23384c5e666c6c6c6c6c6a615847331a0a0000000000000006192c3c4a5b636b6c6c6c6c6a62503c281300000000000000000000031628394f606973747474635b4935210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000609151d20252a2f27313636363228302c27211f170c05000000000000000000000000000000000000050b161e21272d2832363633292f282220180d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c505656565656554c473a2a170000000000000000000e1e2d3d4a4e565656565655504433210d00000000000000000000000a1b32424f545e5e5e5e4e493d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b10151a151d2021201d151a16120c0a0400000000000000000000000000000000000000000000030a0c1218161e21211e1719130d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011222f383b41414141414037332a1c0c000000000000000000000f1f2d36394041414141403c332515040000000000000000000000001424323b3e4849494939352c1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0c0b090200010000000000000000000000000000000000000000000000000000000000000002090b0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111c23262c2c2c2c2c2a211f170c0000000000000000000000010f1a21242b2c2c2c2c2b282115070000000000000000000000000006141f26293334343423211a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f111717171717150c0a040000000000000000000000000000070c0e161717171715130d04000000000000000000000000000000020c12141e1f1f1f0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-MediumItalic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-MediumItalic SDF.asset.meta new file mode 100644 index 0000000..3d33594 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-MediumItalic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2ecc4eef08bef7d4083406f284c093d8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Semibold SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Semibold SDF.asset new file mode 100644 index 0000000..0276951 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Semibold SDF.asset @@ -0,0 +1,2714 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Semibold SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: 1562895403856678892} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: 99dec03033cf89c4b936367ceee96b05 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Semibold + m_PointSize: 70 + m_Scale: 1 + m_LineHeight: 84 + m_AscentLine: 69.090004 + m_CapLine: 50 + m_MeanLine: 35 + m_Baseline: 0 + m_DescentLine: -14.91 + m_SuperscriptOffset: 69.090004 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.91 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.85 + m_UnderlineThickness: 3.3600001 + m_StrikethroughOffset: 14 + m_StrikethroughThickness: 3.3600001 + m_TabWidth: 17 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 17.4375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 48.265625 + m_Height: 50.40625 + m_HorizontalBearingX: -0.109375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 48.0625 + m_GlyphRect: + m_X: 287 + m_Y: 6 + m_Width: 50 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 36.5 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 45.703125 + m_GlyphRect: + m_X: 61 + m_Y: 131 + m_Width: 38 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 42.421875 + m_Height: 51.515625 + m_HorizontalBearingX: 2.96875 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 46.515625 + m_GlyphRect: + m_X: 154 + m_Y: 122 + m_Width: 44 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 44.234375 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 53.234375 + m_GlyphRect: + m_X: 403 + m_Y: 117 + m_Width: 46 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 31.46875 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.3125 + m_GlyphRect: + m_X: 473 + m_Y: 377 + m_Width: 33 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 31.4375 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 39.578125 + m_GlyphRect: + m_X: 298 + m_Y: 364 + m_Width: 33 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 44.3125 + m_Height: 51.515625 + m_HorizontalBearingX: 2.9375 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 50.953125 + m_GlyphRect: + m_X: 346 + m_Y: 68 + m_Width: 46 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 41.71875 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 53.71875 + m_GlyphRect: + m_X: 277 + m_Y: 90 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 8.21875 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 20.1875 + m_GlyphRect: + m_X: 230 + m_Y: 325 + m_Width: 10 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 23.515625 + m_Height: 50.96875 + m_HorizontalBearingX: 0.8125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 29.8125 + m_GlyphRect: + m_X: 194 + m_Y: 371 + m_Width: 25 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 41.578125 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 47.21875 + m_GlyphRect: + m_X: 209 + m_Y: 141 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 29.125 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 36.15625 + m_GlyphRect: + m_X: 255 + m_Y: 442 + m_Width: 31 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 53.625 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 65.59375 + m_GlyphRect: + m_X: 90 + m_Y: 6 + m_Width: 55 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 41.71875 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 53.71875 + m_GlyphRect: + m_X: 331 + m_Y: 131 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 50.40625 + m_Height: 51.484375 + m_HorizontalBearingX: 2.9375 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 56.3125 + m_GlyphRect: + m_X: 69 + m_Y: 68 + m_Width: 52 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 34.890625 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 42.734375 + m_GlyphRect: + m_X: 256 + m_Y: 261 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 52.890625 + m_Height: 61.03125 + m_HorizontalBearingX: 2.96875 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 56.3125 + m_GlyphRect: + m_X: 222 + m_Y: 6 + m_Width: 54 + m_Height: 62 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 38.359375 + m_Height: 50.40625 + m_HorizontalBearingX: 5.984375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 44.453125 + m_GlyphRect: + m_X: 455 + m_Y: 209 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 33.421875 + m_Height: 51.515625 + m_HorizontalBearingX: 1.921875 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 38.1875 + m_GlyphRect: + m_X: 97 + m_Y: 453 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 39.625 + m_Height: 50.40625 + m_HorizontalBearingX: 1.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 41.6875 + m_GlyphRect: + m_X: 263 + m_Y: 152 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 41.015625 + m_Height: 51 + m_HorizontalBearingX: 5.359375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 51.765625 + m_GlyphRect: + m_X: 402 + m_Y: 179 + m_Width: 42 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 48.265625 + m_Height: 50.40625 + m_HorizontalBearingX: -0.109375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 48.0625 + m_GlyphRect: + m_X: 348 + m_Y: 6 + m_Width: 50 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 71.421875 + m_Height: 50.40625 + m_HorizontalBearingX: 0.8125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 73.046875 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 73 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 45.390625 + m_Height: 50.40625 + m_HorizontalBearingX: 0.390625 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 46.203125 + m_GlyphRect: + m_X: 460 + m_Y: 147 + m_Width: 46 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 44.96875 + m_Height: 50.40625 + m_HorizontalBearingX: -0.203125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 44.5625 + m_GlyphRect: + m_X: 220 + m_Y: 79 + m_Width: 46 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 38.609375 + m_Height: 50.40625 + m_HorizontalBearingX: 1.609375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 42.28125 + m_GlyphRect: + m_X: 314 + m_Y: 193 + m_Width: 40 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 28.96875 + m_Height: 36.921875 + m_HorizontalBearingX: 2 + m_HorizontalBearingY: 36.359375 + m_HorizontalAdvance: 35.171875 + m_GlyphRect: + m_X: 145 + m_Y: 255 + m_Width: 29 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 32.203125 + m_Height: 52.328125 + m_HorizontalBearingX: 4.578125 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 39.484375 + m_GlyphRect: + m_X: 53 + m_Y: 453 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 29.546875 + m_Height: 36.796875 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 33.59375 + m_GlyphRect: + m_X: 460 + m_Y: 439 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 32.203125 + m_Height: 52.328125 + m_HorizontalBearingX: 2.6875 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 39.484375 + m_GlyphRect: + m_X: 110 + m_Y: 131 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 32.15625 + m_Height: 36.796875 + m_HorizontalBearingX: 2.59375 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 37.171875 + m_GlyphRect: + m_X: 251 + m_Y: 384 + m_Width: 33 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 22.78125 + m_Height: 51.234375 + m_HorizontalBearingX: 1.546875 + m_HorizontalBearingY: 51.234375 + m_HorizontalAdvance: 24.8125 + m_GlyphRect: + m_X: 220 + m_Y: 442 + m_Width: 24 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 33.421875 + m_Height: 49.03125 + m_HorizontalBearingX: 1.921875 + m_HorizontalBearingY: 36.328125 + m_HorizontalAdvance: 36.71875 + m_GlyphRect: + m_X: 252 + m_Y: 323 + m_Width: 35 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 30.453125 + m_Height: 51.796875 + m_HorizontalBearingX: 4.578125 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 39.265625 + m_GlyphRect: + m_X: 143 + m_Y: 304 + m_Width: 32 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 10.046875 + m_Height: 51.515625 + m_HorizontalBearingX: 3.640625 + m_HorizontalBearingY: 51.515625 + m_HorizontalAdvance: 17.328125 + m_GlyphRect: + m_X: 186 + m_Y: 185 + m_Width: 11 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 16.21875 + m_Height: 64.1875 + m_HorizontalBearingX: -2.5625 + m_HorizontalBearingY: 51.515625 + m_HorizontalAdvance: 17.328125 + m_GlyphRect: + m_X: 32 + m_Y: 377 + m_Width: 17 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 31.75 + m_Height: 51.796875 + m_HorizontalBearingX: 4.578125 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 36.546875 + m_GlyphRect: + m_X: 208 + m_Y: 262 + m_Width: 33 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49.328125 + m_Height: 36.265625 + m_HorizontalBearingX: 4.578125 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 58.140625 + m_GlyphRect: + m_X: 409 + m_Y: 6 + m_Width: 50 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 30.453125 + m_Height: 36.265625 + m_HorizontalBearingX: 4.578125 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 39.265625 + m_GlyphRect: + m_X: 85 + m_Y: 329 + m_Width: 32 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 34.71875 + m_Height: 36.796875 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 39.96875 + m_GlyphRect: + m_X: 98 + m_Y: 255 + m_Width: 36 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 32.203125 + m_Height: 48.21875 + m_HorizontalBearingX: 4.578125 + m_HorizontalBearingY: 36.359375 + m_HorizontalAdvance: 39.515625 + m_GlyphRect: + m_X: 98 + m_Y: 195 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 32.203125 + m_Height: 48.21875 + m_HorizontalBearingX: 2.6875 + m_HorizontalBearingY: 36.359375 + m_HorizontalAdvance: 39.484375 + m_GlyphRect: + m_X: 142 + m_Y: 195 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 20.859375 + m_Height: 36.359375 + m_HorizontalBearingX: 4.578125 + m_HorizontalBearingY: 36.359375 + m_HorizontalAdvance: 25.828125 + m_GlyphRect: + m_X: 61 + m_Y: 256 + m_Width: 22 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 26.0625 + m_Height: 36.828125 + m_HorizontalBearingX: 2 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 30.5625 + m_GlyphRect: + m_X: 333 + m_Y: 426 + m_Width: 27 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 23.734375 + m_Height: 47.5 + m_HorizontalBearingX: 1.328125 + m_HorizontalBearingY: 46.9375 + m_HorizontalAdvance: 25.578125 + m_GlyphRect: + m_X: 297 + m_Y: 426 + m_Width: 25 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 30.453125 + m_Height: 36.265625 + m_HorizontalBearingX: 4.234375 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 39.265625 + m_GlyphRect: + m_X: 371 + m_Y: 413 + m_Width: 31 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 35.484375 + m_Height: 35.703125 + m_HorizontalBearingX: 0.53125 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 36.578125 + m_GlyphRect: + m_X: 256 + m_Y: 214 + m_Width: 37 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 53.859375 + m_Height: 35.765625 + m_HorizontalBearingX: 0.875 + m_HorizontalBearingY: 35.765625 + m_HorizontalAdvance: 55.609375 + m_GlyphRect: + m_X: 156 + m_Y: 6 + m_Width: 55 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 34.765625 + m_Height: 35.703125 + m_HorizontalBearingX: 0.484375 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 35.734375 + m_GlyphRect: + m_X: 380 + m_Y: 304 + m_Width: 36 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 35.8125 + m_Height: 47.5625 + m_HorizontalBearingX: 0.453125 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 36.546875 + m_GlyphRect: + m_X: 208 + m_Y: 203 + m_Width: 37 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 27.828125 + m_Height: 35.703125 + m_HorizontalBearingX: 1.921875 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 31.921875 + m_GlyphRect: + m_X: 371 + m_Y: 461 + m_Width: 29 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 15.21875 + m_Height: 10.171875 + m_HorizontalBearingX: 3.640625 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 28 + m_GlyphRect: + m_X: 106 + m_Y: 304 + m_Width: 16 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 9.734375 + m_Height: 50.9375 + m_HorizontalBearingX: 4.6875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 19.28125 + m_GlyphRect: + m_X: 132 + m_Y: 68 + m_Width: 11 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 309 + m_Metrics: + m_Width: 26.25 + m_Height: 51.484375 + m_HorizontalBearingX: 2.65625 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 31.78125 + m_GlyphRect: + m_X: 182 + m_Y: 442 + m_Width: 27 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 9.453125 + m_Height: 18.96875 + m_HorizontalBearingX: 3.359375 + m_HorizontalBearingY: 9.234375 + m_HorizontalAdvance: 16.140625 + m_GlyphRect: + m_X: 350 + m_Y: 358 + m_Width: 10 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 9.796875 + m_Height: 44.96875 + m_HorizontalBearingX: 4.359375 + m_HorizontalBearingY: 35.234375 + m_HorizontalAdvance: 18.65625 + m_GlyphRect: + m_X: 186 + m_Y: 248 + m_Width: 11 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 9.71875 + m_Height: 35.765625 + m_HorizontalBearingX: 4.4375 + m_HorizontalBearingY: 35.234375 + m_HorizontalAdvance: 17.78125 + m_GlyphRect: + m_X: 351 + m_Y: 310 + m_Width: 11 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 314 + m_Metrics: + m_Width: 9.71875 + m_Height: 9.765625 + m_HorizontalBearingX: 3.4375 + m_HorizontalBearingY: 9.234375 + m_HorizontalAdvance: 16.5625 + m_GlyphRect: + m_X: 186 + m_Y: 305 + m_Width: 11 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 315 + m_Metrics: + m_Width: 46.71875 + m_Height: 9.765625 + m_HorizontalBearingX: 3.4375 + m_HorizontalBearingY: 9.234375 + m_HorizontalAdvance: 53.3125 + m_GlyphRect: + m_X: 287 + m_Y: 68 + m_Width: 48 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 326 + m_Metrics: + m_Width: 27.78125 + m_Height: 55.046875 + m_HorizontalBearingX: 2.171875 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 32.171875 + m_GlyphRect: + m_X: 110 + m_Y: 377 + m_Width: 28 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 5.796875 + m_Height: 66.046875 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 53.9375 + m_HorizontalAdvance: 17.921875 + m_GlyphRect: + m_X: 385 + m_Y: 161 + m_Width: 6 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 329 + m_Metrics: + m_Width: 27.78125 + m_Height: 55.046875 + m_HorizontalBearingX: 2.171875 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 32.171875 + m_GlyphRect: + m_X: 143 + m_Y: 444 + m_Width: 28 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 330 + m_Metrics: + m_Width: 17.734375 + m_Height: 6.359375 + m_HorizontalBearingX: 4.171875 + m_HorizontalBearingY: 24.25 + m_HorizontalAdvance: 26.078125 + m_GlyphRect: + m_X: 351 + m_Y: 291 + m_Width: 18 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 333 + m_Metrics: + m_Width: 27.578125 + m_Height: 4.96875 + m_HorizontalBearingX: 2.421875 + m_HorizontalBearingY: -5.1875 + m_HorizontalAdvance: 32.40625 + m_GlyphRect: + m_X: 297 + m_Y: 488 + m_Width: 28 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 14.078125 + m_Height: 65.375 + m_HorizontalBearingX: 2.828125 + m_HorizontalBearingY: 54.671875 + m_HorizontalAdvance: 18.96875 + m_GlyphRect: + m_X: 6 + m_Y: 377 + m_Width: 15 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 14.03125 + m_Height: 65.375 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 54.671875 + m_HorizontalAdvance: 18.96875 + m_GlyphRect: + m_X: 6 + m_Y: 256 + m_Width: 15 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 13.640625 + m_Height: 64.4375 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 53.9375 + m_HorizontalAdvance: 21.703125 + m_GlyphRect: + m_X: 60 + m_Y: 377 + m_Width: 14 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 13.640625 + m_Height: 64.4375 + m_HorizontalBearingX: 2 + m_HorizontalBearingY: 53.9375 + m_HorizontalAdvance: 21.703125 + m_GlyphRect: + m_X: 85 + m_Y: 377 + m_Width: 14 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 16.9375 + m_Height: 64.4375 + m_HorizontalBearingX: 2.171875 + m_HorizontalBearingY: 53.9375 + m_HorizontalAdvance: 21.25 + m_GlyphRect: + m_X: 485 + m_Y: 301 + m_Width: 18 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 341 + m_Metrics: + m_Width: 16.9375 + m_Height: 64.4375 + m_HorizontalBearingX: 2.140625 + m_HorizontalBearingY: 53.9375 + m_HorizontalAdvance: 21.25 + m_GlyphRect: + m_X: 32 + m_Y: 256 + m_Width: 18 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 342 + m_Metrics: + m_Width: 21.90625 + m_Height: 23.203125 + m_HorizontalBearingX: 3.921875 + m_HorizontalBearingY: 52.890625 + m_HorizontalAdvance: 29.75 + m_GlyphRect: + m_X: 351 + m_Y: 256 + m_Width: 23 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 32.546875 + m_Height: 26.328125 + m_HorizontalBearingX: 4.03125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 186 + m_Y: 333 + m_Width: 33 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 33.109375 + m_Height: 13.0625 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 27.234375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 61 + m_Y: 304 + m_Width: 34 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 6.5 + m_Height: 18.375 + m_HorizontalBearingX: 4.03125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 14.5625 + m_GlyphRect: + m_X: 385 + m_Y: 131 + m_Width: 7 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 18.5 + m_Height: 18.375 + m_HorizontalBearingX: 4.03125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 26.84375 + m_GlyphRect: + m_X: 485 + m_Y: 271 + m_Width: 19 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 351 + m_Metrics: + m_Width: 47.078125 + m_Height: 51.515625 + m_HorizontalBearingX: 2.796875 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 50.265625 + m_GlyphRect: + m_X: 409 + m_Y: 54 + m_Width: 48 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 352 + m_Metrics: + m_Width: 52.5 + m_Height: 56.421875 + m_HorizontalBearingX: 3.390625 + m_HorizontalBearingY: 48.015625 + m_HorizontalAdvance: 58.796875 + m_GlyphRect: + m_X: 156 + m_Y: 53 + m_Width: 53 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 362 + m_Metrics: + m_Width: 34.46875 + m_Height: 65.546875 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 57.5 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 470 + m_Y: 6 + m_Width: 36 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 370 + m_Metrics: + m_Width: 37.765625 + m_Height: 50.40625 + m_HorizontalBearingX: 1.4375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 385 + m_Y: 242 + m_Width: 39 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 36.75 + m_Height: 51.484375 + m_HorizontalBearingX: 1.921875 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 468 + m_Y: 84 + m_Width: 38 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 30.796875 + m_Height: 50.5 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 50.5 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 418 + m_Y: 380 + m_Width: 31 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 34.09375 + m_Height: 50.953125 + m_HorizontalBearingX: 2.96875 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 6 + m_Y: 131 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.375 + m_Height: 51.515625 + m_HorizontalBearingX: 2.65625 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 6 + m_Y: 454 + m_Width: 36 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 38.21875 + m_Height: 50.4375 + m_HorizontalBearingX: 0.53125 + m_HorizontalBearingY: 50.4375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 435 + m_Y: 271 + m_Width: 39 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 32.859375 + m_Height: 50.96875 + m_HorizontalBearingX: 3.46875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 149 + m_Y: 377 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 405 + m_Metrics: + m_Width: 34.546875 + m_Height: 50.40625 + m_HorizontalBearingX: 3.5 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 304 + m_Y: 255 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 406 + m_Metrics: + m_Width: 33.390625 + m_Height: 50.953125 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 373 + m_Y: 351 + m_Width: 34 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 435 + m_Metrics: + m_Width: 33.84375 + m_Height: 34.96875 + m_HorizontalBearingX: 3.390625 + m_HorizontalBearingY: 40.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 427 + m_Y: 333 + m_Width: 35 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 439 + m_Metrics: + m_Width: 30.59375 + m_Height: 17.734375 + m_HorizontalBearingX: 5 + m_HorizontalBearingY: 32.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 413 + m_Y: 442 + m_Width: 31 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 442 + m_Metrics: + m_Width: 27.453125 + m_Height: 31.671875 + m_HorizontalBearingX: 5.453125 + m_HorizontalBearingY: 39.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 46 + m_Y: 333 + m_Width: 28 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 443 + m_Metrics: + m_Width: 27.4375 + m_Height: 31.671875 + m_HorizontalBearingX: 7.703125 + m_HorizontalBearingY: 39.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 6 + m_Y: 333 + m_Width: 29 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 7.53125 + m_Height: 51.796875 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 16.96875 + m_GlyphRect: + m_X: 365 + m_Y: 193 + m_Width: 9 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 34.609375 + m_Height: 50.96875 + m_HorizontalBearingX: 3.328125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 6 + m_Y: 193 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.515625 + m_Height: 51.515625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 52 + m_Y: 193 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 51.03125 + m_Height: 51.515625 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 50.921875 + m_HorizontalAdvance: 56.765625 + m_GlyphRect: + m_X: 6 + m_Y: 68 + m_Width: 52 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 35.6875 + m_Height: 35.703125 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 42 + m_GlyphRect: + m_X: 303 + m_Y: 317 + m_Width: 36 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 7451108456284081691} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 84 + m_Height: 62 + - m_X: 84 + m_Y: 0 + m_Width: 66 + m_Height: 62 + - m_X: 150 + m_Y: 0 + m_Width: 66 + m_Height: 47 + - m_X: 216 + m_Y: 0 + m_Width: 65 + m_Height: 73 + - m_X: 150 + m_Y: 47 + m_Width: 64 + m_Height: 69 + - m_X: 0 + m_Y: 62 + m_Width: 63 + m_Height: 63 + - m_X: 63 + m_Y: 62 + m_Width: 63 + m_Height: 63 + - m_X: 126 + m_Y: 62 + m_Width: 22 + m_Height: 63 + - m_X: 281 + m_Y: 0 + m_Width: 61 + m_Height: 62 + - m_X: 342 + m_Y: 0 + m_Width: 61 + m_Height: 62 + - m_X: 403 + m_Y: 0 + m_Width: 61 + m_Height: 48 + - m_X: 464 + m_Y: 0 + m_Width: 47 + m_Height: 78 + - m_X: 403 + m_Y: 48 + m_Width: 59 + m_Height: 63 + - m_X: 462 + m_Y: 78 + m_Width: 49 + m_Height: 63 + - m_X: 281 + m_Y: 62 + m_Width: 59 + m_Height: 22 + - m_X: 340 + m_Y: 62 + m_Width: 57 + m_Height: 63 + - m_X: 397 + m_Y: 111 + m_Width: 57 + m_Height: 62 + - m_X: 454 + m_Y: 141 + m_Width: 57 + m_Height: 62 + - m_X: 214 + m_Y: 73 + m_Width: 57 + m_Height: 62 + - m_X: 148 + m_Y: 116 + m_Width: 55 + m_Height: 63 + - m_X: 271 + m_Y: 84 + m_Width: 54 + m_Height: 62 + - m_X: 203 + m_Y: 135 + m_Width: 54 + m_Height: 62 + - m_X: 325 + m_Y: 125 + m_Width: 54 + m_Height: 62 + - m_X: 379 + m_Y: 125 + m_Width: 18 + m_Height: 30 + - m_X: 379 + m_Y: 155 + m_Width: 17 + m_Height: 78 + - m_X: 396 + m_Y: 173 + m_Width: 53 + m_Height: 63 + - m_X: 449 + m_Y: 203 + m_Width: 51 + m_Height: 62 + - m_X: 257 + m_Y: 146 + m_Width: 51 + m_Height: 62 + - m_X: 308 + m_Y: 187 + m_Width: 51 + m_Height: 62 + - m_X: 359 + m_Y: 187 + m_Width: 20 + m_Height: 63 + - m_X: 379 + m_Y: 236 + m_Width: 50 + m_Height: 62 + - m_X: 429 + m_Y: 265 + m_Width: 50 + m_Height: 62 + - m_X: 479 + m_Y: 265 + m_Width: 30 + m_Height: 30 + - m_X: 479 + m_Y: 295 + m_Width: 29 + m_Height: 76 + - m_X: 0 + m_Y: 371 + m_Width: 26 + m_Height: 77 + - m_X: 0 + m_Y: 327 + m_Width: 40 + m_Height: 44 + - m_X: 0 + m_Y: 250 + m_Width: 26 + m_Height: 77 + - m_X: 0 + m_Y: 448 + m_Width: 47 + m_Height: 63 + - m_X: 26 + m_Y: 250 + m_Width: 29 + m_Height: 76 + - m_X: 26 + m_Y: 371 + m_Width: 28 + m_Height: 76 + - m_X: 40 + m_Y: 327 + m_Width: 39 + m_Height: 44 + - m_X: 47 + m_Y: 447 + m_Width: 44 + m_Height: 64 + - m_X: 54 + m_Y: 371 + m_Width: 25 + m_Height: 76 + - m_X: 79 + m_Y: 371 + m_Width: 25 + m_Height: 76 + - m_X: 104 + m_Y: 125 + m_Width: 44 + m_Height: 64 + - m_X: 55 + m_Y: 125 + m_Width: 49 + m_Height: 62 + - m_X: 0 + m_Y: 187 + m_Width: 46 + m_Height: 63 + - m_X: 0 + m_Y: 125 + m_Width: 47 + m_Height: 62 + - m_X: 46 + m_Y: 187 + m_Width: 46 + m_Height: 63 + - m_X: 91 + m_Y: 447 + m_Width: 46 + m_Height: 63 + - m_X: 55 + m_Y: 298 + m_Width: 45 + m_Height: 25 + - m_X: 92 + m_Y: 249 + m_Width: 47 + m_Height: 49 + - m_X: 55 + m_Y: 250 + m_Width: 33 + m_Height: 48 + - m_X: 92 + m_Y: 189 + m_Width: 44 + m_Height: 60 + - m_X: 136 + m_Y: 189 + m_Width: 44 + m_Height: 60 + - m_X: 79 + m_Y: 323 + m_Width: 43 + m_Height: 48 + - m_X: 180 + m_Y: 179 + m_Width: 22 + m_Height: 63 + - m_X: 100 + m_Y: 298 + m_Width: 27 + m_Height: 22 + - m_X: 202 + m_Y: 197 + m_Width: 48 + m_Height: 59 + - m_X: 180 + m_Y: 242 + m_Width: 22 + m_Height: 57 + - m_X: 137 + m_Y: 298 + m_Width: 43 + m_Height: 63 + - m_X: 139 + m_Y: 249 + m_Width: 40 + m_Height: 49 + - m_X: 104 + m_Y: 371 + m_Width: 39 + m_Height: 67 + - m_X: 137 + m_Y: 438 + m_Width: 39 + m_Height: 67 + - m_X: 143 + m_Y: 371 + m_Width: 45 + m_Height: 63 + - m_X: 180 + m_Y: 327 + m_Width: 44 + m_Height: 38 + - m_X: 180 + m_Y: 299 + m_Width: 22 + m_Height: 22 + - m_X: 202 + m_Y: 256 + m_Width: 44 + m_Height: 63 + - m_X: 250 + m_Y: 208 + m_Width: 48 + m_Height: 47 + - m_X: 298 + m_Y: 249 + m_Width: 47 + m_Height: 62 + - m_X: 345 + m_Y: 250 + m_Width: 34 + m_Height: 35 + - m_X: 250 + m_Y: 255 + m_Width: 47 + m_Height: 62 + - m_X: 345 + m_Y: 285 + m_Width: 29 + m_Height: 19 + - m_X: 374 + m_Y: 298 + m_Width: 47 + m_Height: 47 + - m_X: 345 + m_Y: 304 + m_Width: 22 + m_Height: 48 + - m_X: 297 + m_Y: 311 + m_Width: 47 + m_Height: 47 + - m_X: 246 + m_Y: 317 + m_Width: 46 + m_Height: 61 + - m_X: 224 + m_Y: 319 + m_Width: 21 + m_Height: 62 + - m_X: 188 + m_Y: 365 + m_Width: 36 + m_Height: 63 + - m_X: 421 + m_Y: 327 + m_Width: 46 + m_Height: 47 + - m_X: 467 + m_Y: 371 + m_Width: 44 + m_Height: 62 + - m_X: 367 + m_Y: 345 + m_Width: 45 + m_Height: 62 + - m_X: 344 + m_Y: 352 + m_Width: 21 + m_Height: 31 + - m_X: 292 + m_Y: 358 + m_Width: 44 + m_Height: 62 + - m_X: 245 + m_Y: 378 + m_Width: 44 + m_Height: 49 + - m_X: 412 + m_Y: 374 + m_Width: 42 + m_Height: 62 + - m_X: 176 + m_Y: 436 + m_Width: 38 + m_Height: 63 + - m_X: 214 + m_Y: 436 + m_Width: 35 + m_Height: 63 + - m_X: 249 + m_Y: 436 + m_Width: 42 + m_Height: 62 + - m_X: 454 + m_Y: 433 + m_Width: 42 + m_Height: 49 + - m_X: 291 + m_Y: 482 + m_Width: 39 + m_Height: 17 + - m_X: 291 + m_Y: 420 + m_Width: 36 + m_Height: 59 + - m_X: 327 + m_Y: 420 + m_Width: 38 + m_Height: 49 + - m_X: 365 + m_Y: 407 + m_Width: 42 + m_Height: 48 + - m_X: 407 + m_Y: 436 + m_Width: 42 + m_Height: 30 + - m_X: 365 + m_Y: 455 + m_Width: 40 + m_Height: 47 + m_FreeGlyphRects: + - m_X: 462 + m_Y: 48 + m_Width: 2 + m_Height: 30 + - m_X: 397 + m_Y: 62 + m_Width: 6 + m_Height: 49 + - m_X: 454 + m_Y: 111 + m_Width: 8 + m_Height: 30 + - m_X: 214 + m_Y: 47 + m_Width: 2 + m_Height: 26 + - m_X: 148 + m_Y: 62 + m_Width: 2 + m_Height: 54 + - m_X: 271 + m_Y: 73 + m_Width: 10 + m_Height: 11 + - m_X: 203 + m_Y: 116 + m_Width: 11 + m_Height: 19 + - m_X: 325 + m_Y: 84 + m_Width: 15 + m_Height: 41 + - m_X: 396 + m_Y: 155 + m_Width: 1 + m_Height: 18 + - m_X: 449 + m_Y: 173 + m_Width: 5 + m_Height: 30 + - m_X: 257 + m_Y: 135 + m_Width: 14 + m_Height: 11 + - m_X: 308 + m_Y: 146 + m_Width: 17 + m_Height: 41 + - m_X: 379 + m_Y: 233 + m_Width: 17 + m_Height: 3 + - m_X: 429 + m_Y: 236 + m_Width: 20 + m_Height: 29 + - m_X: 500 + m_Y: 203 + m_Width: 11 + m_Height: 62 + - m_X: 26 + m_Y: 447 + m_Width: 21 + m_Height: 1 + - m_X: 47 + m_Y: 125 + m_Width: 8 + m_Height: 62 + - m_X: 91 + m_Y: 510 + m_Width: 420 + m_Height: 1 + - m_X: 88 + m_Y: 250 + m_Width: 4 + m_Height: 48 + - m_X: 92 + m_Y: 187 + m_Width: 12 + m_Height: 2 + - m_X: 26 + m_Y: 326 + m_Width: 53 + m_Height: 1 + - m_X: 55 + m_Y: 323 + m_Width: 24 + m_Height: 4 + - m_X: 148 + m_Y: 179 + m_Width: 32 + m_Height: 10 + - m_X: 202 + m_Y: 179 + m_Width: 1 + m_Height: 18 + - m_X: 100 + m_Y: 320 + m_Width: 37 + m_Height: 3 + - m_X: 179 + m_Y: 249 + m_Width: 1 + m_Height: 49 + - m_X: 122 + m_Y: 320 + m_Width: 15 + m_Height: 51 + - m_X: 127 + m_Y: 298 + m_Width: 10 + m_Height: 73 + - m_X: 104 + m_Y: 438 + m_Width: 33 + m_Height: 9 + - m_X: 137 + m_Y: 505 + m_Width: 374 + m_Height: 6 + - m_X: 122 + m_Y: 361 + m_Width: 58 + m_Height: 10 + - m_X: 250 + m_Y: 197 + m_Width: 7 + m_Height: 11 + - m_X: 298 + m_Y: 208 + m_Width: 10 + m_Height: 41 + - m_X: 345 + m_Y: 249 + m_Width: 14 + m_Height: 1 + - m_X: 374 + m_Y: 285 + m_Width: 5 + m_Height: 13 + - m_X: 297 + m_Y: 255 + m_Width: 1 + m_Height: 56 + - m_X: 246 + m_Y: 256 + m_Width: 4 + m_Height: 61 + - m_X: 180 + m_Y: 321 + m_Width: 44 + m_Height: 6 + - m_X: 202 + m_Y: 319 + m_Width: 22 + m_Height: 8 + - m_X: 122 + m_Y: 365 + m_Width: 66 + m_Height: 6 + - m_X: 421 + m_Y: 298 + m_Width: 8 + m_Height: 29 + - m_X: 509 + m_Y: 203 + m_Width: 2 + m_Height: 168 + - m_X: 508 + m_Y: 295 + m_Width: 3 + m_Height: 76 + - m_X: 467 + m_Y: 327 + m_Width: 12 + m_Height: 44 + - m_X: 367 + m_Y: 304 + m_Width: 7 + m_Height: 41 + - m_X: 344 + m_Y: 311 + m_Width: 1 + m_Height: 41 + - m_X: 292 + m_Y: 317 + m_Width: 5 + m_Height: 41 + - m_X: 245 + m_Y: 319 + m_Width: 1 + m_Height: 59 + - m_X: 412 + m_Y: 345 + m_Width: 9 + m_Height: 29 + - m_X: 143 + m_Y: 434 + m_Width: 33 + m_Height: 4 + - m_X: 224 + m_Y: 381 + m_Width: 21 + m_Height: 55 + - m_X: 496 + m_Y: 433 + m_Width: 15 + m_Height: 78 + - m_X: 454 + m_Y: 374 + m_Width: 13 + m_Height: 59 + - m_X: 249 + m_Y: 498 + m_Width: 42 + m_Height: 13 + - m_X: 143 + m_Y: 434 + m_Width: 148 + m_Height: 2 + - m_X: 188 + m_Y: 428 + m_Width: 103 + m_Height: 8 + - m_X: 224 + m_Y: 427 + m_Width: 67 + m_Height: 9 + - m_X: 289 + m_Y: 378 + m_Width: 3 + m_Height: 42 + - m_X: 289 + m_Y: 378 + m_Width: 2 + m_Height: 58 + - m_X: 336 + m_Y: 358 + m_Width: 8 + m_Height: 62 + - m_X: 365 + m_Y: 352 + m_Width: 2 + m_Height: 55 + - m_X: 336 + m_Y: 383 + m_Width: 31 + m_Height: 24 + - m_X: 336 + m_Y: 383 + m_Width: 29 + m_Height: 37 + - m_X: 407 + m_Y: 407 + m_Width: 5 + m_Height: 29 + - m_X: 449 + m_Y: 436 + m_Width: 5 + m_Height: 75 + - m_X: 176 + m_Y: 502 + m_Width: 335 + m_Height: 9 + - m_X: 176 + m_Y: 499 + m_Width: 189 + m_Height: 12 + - m_X: 405 + m_Y: 482 + m_Width: 106 + m_Height: 29 + - m_X: 291 + m_Y: 479 + m_Width: 74 + m_Height: 3 + - m_X: 330 + m_Y: 469 + m_Width: 35 + m_Height: 42 + - m_X: 327 + m_Y: 469 + m_Width: 38 + m_Height: 13 + - m_X: 405 + m_Y: 466 + m_Width: 49 + m_Height: 45 + - m_X: 405 + m_Y: 455 + m_Width: 2 + m_Height: 56 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 99dec03033cf89c4b936367ceee96b05 + pointSizeSamplingMode: 0 + pointSize: 70 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!21 &1562895403856678892 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Semibold SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 7451108456284081691} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!28 &7451108456284081691 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Semibold SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071117192020202020201f0c0a040000000000000000000000000000000000000003090b1f2020202020201a18110800000000000000000000000000000000000000000000010820202020202020200f0d07000000000000000000000000000000000000000000000000000000000000000000060f151820202020202018150f0600000000000000000000000000000000000a141a1d20202020201e0f0d0700000000000000000000000610161820202020202014120c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0c0c0c0c0c0c0c0a040000000000000001080b1e20202020201f190c0a040000000000000000000000000000000000000000000000000000040a0c191f20202020201e0b090200000000000000000000000000000000000000000000000000000000070b1d2020202020201e0b08010000000000000000000000000000000000000000000000000000020c1214202020202020200d0b0500000000000000040d141620202020202020201b1206000000000000061016182020202020201e1c160c000000000000000000000000000000000000000003090c0c0c090300000000000000000000000000000000000000000000000000000000000000000000000000000000000a18242b2e35353535353535211f170c00000000000000000000000000000000000a161e21343535353535352f2c25190b000000000000000000000000000000000000000009151d353535353535353524211a0f010000000000000000000000000000000000000000000000000000000000000917232a2d3535353535352d2a2317090000000000000000000000000000000e1c272f3235353535353324221b100200000000000000000a18232b2d3535353535352a272014070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f161e21212222222222211f170c000000000009141d20333535353535342e211f170c0000000000000000000000000000000000000000000000000c171f212e34353535353534201d150a0000000000000000000000000000000000000000000000000008131c203235353535353533201d150900000000000000000000000000000000000000000000000006141f2629353535353535352220190d0000000000081621282b35353535353535352f241606000000000917232b2d3535353535353330291e100000000000000000000000000000000000000b161e2121211e160b0700000000000000000000000000000000000000000000000000000000000000000000000000000018283640434a4a4a4a4a4a4a3633291c0c0000000000000000000000000000000a1a283236494a4a4a4a4a4a444137291900000000000000000000000000000000000000091927314a4a4a4a4a4a4a4a39362d200f0000000000000000000000000000000000000000000000000000000000061727353f424a4a4a4a4a4a423f3527170600000000000000000000000000011c2c3a43474a4a4a4a4a483a372e201000000000000000021828353f434a4a4a4a4a4a3f3b322514030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21242832363737373737373633291c0c0000000919263135484a4a4a4a4a494337332a1c0c000000000000000000000000000000000000000000000c1c2a333744494a4a4a4a4a493632281a0a00000000000000000000000000000000000000000000000818253035484a4a4a4a4a4a48353127190900000000000000000000000000000000000000000000021424323b3e4a4a4a4a4a4a4a4a342b1d0d000000041626333d404a4a4a4a4a4a4a4a42342412000000061727353f424a4a4a4a4a4a48453b2e1e0c000000000000000000000000000000000b1b28323636363228221b10020000000000000000000000000000000000000000000000000000000000000000000000000a1a364653596060606060605f4c463a2917040000000000000000000000000003162838454b5f6060606060605a5447371b0b000000000000000000000000000000000001152737445e606060606060604e4a3e2d1a07000000000000000000000000000000000000000000000000000000000f233545525760606060606057524535230f000000000000000000000000000f1f3a4a575c60606060605e4f4b3e2e1b070000000000001020354653585f6060606060544f4332200c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131f2d363938454b4c4c4c4c4c4c4c463a2917040001142637444b5d60606060605f594c473a2a1704000000000000000000000000000000000000000004172a3a474c595f60606060605e4b453828150200000000000000000000000000000000000000000000132536434a5d6060606060605e4b44372715010000000000000000000000000000000000000000000c1f32424f53606060606060605e483b2b190500000d2133445055606060606060605e52422f1b0700001023354552586060606060605e594c3b291600000000000000000000000000000003162839464b4b4b4639362d201000000000000000000000000000000000000000000000000000000000000000000000000216283853646e757575757575746d5846331f0a00000000000000000000000000091e32455660747575757575756f65543929170300000000000000000000000000000000081d3144557075757575757575705c4a36210d00000000000000000000000000000000000000000000000000000001152a3f52636d7575757575756d63523f2a15000000000000000000000000071a2d3d576872757575757573645c4b37220c0000000000071b2d3e53646d75757575757569614f3b270d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041323303d4a4e585660616161616161615846331f0a00081d31445560737575757575746e615847331f0f00000000000000000000000000000000000000000a1f334758616e74757575757573605645321d09000000000000000000000000000000000000000000071c304354607275757575757573605544311d0800000000000000000000000000000000000000000012263b4f60697575757575757570594834200b000014283d50626b75757575757575705e4a35200a0001162b3f52646d757575757575736a5945301c000000000000000000000000000000091e324657616161574f4a3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000091e3245566e828a8a8a8a8a8a8b76614c36210c000000000000000000000000000b21364b60758a8a8a8a8a8a8a836f5746331e0a000000000000000000000000000000000b20354b60748a8a8a8a8a8a8a7a644e39240f00000000000000000000000000000000000000000000000000000002182d42576d818a8a8a8a8a8a816d57422d180000000000000000000000000c21364a5b72868a8a8a8a8a887a644f3a291704000000000d22364a5c6d828b8a8a8a8a8a7f69543b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003122230414d5c646e737676777777777776614c36210c000b20354b6074888a8a8a8a8a898376614c3d2d1a07000000000000000000000000000000000000071a2d3d4c617683898a8a8a8a8a8975604b36200b0000000000000000000000000000000000000000000b20354a6072878a8a8a8a8a8a8873604b35200e00000000000000000000000000000000000000000014293e53697e8a8a8a8a8a8a8a78624d37220d0000162b40556b808a8a8a8a8a8a8a75604a35200b0003182d42586d828a8a8a8a8a8a88735e48331e0000000000000000000000000000000c21364b6175767672645c4a36220d000000000000000000000000000000000000000000000000000000000000000000000b21364b6075899e9f9f9f9faa927d67523929170300000000000000000000000215283851667c91a89f9f9f9f9f8a76614b36210c000000000000000000000000000000000b20354b60758a9f9f9f9f9f8e79644e39240f00000000000000000001080b1013130f0d0700000000000000000002182d42576d82979f9f9f9f97826d57422d180000000000000000000000000e24394e63798ea49f9f9fa699846f5846331f0a000000000f24394f64798e9fab9f9f9f9b8570594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001112130404d5f677983888b8c8c8c8c8c8c7c67513c271200081d3144556b8095ab9f9fa89e98846f5b4a3621090000000000000000000000000000000000000c21364a5b6f83999ea89f9f9f96816c5645321d09000000000000000000000000000000000000000005182b3b50667b90a59f9f9f9fa6917c67513c2c1906000000000000000000000000000000000000000014293e53697e939f9f9f9f9f8c77624d37220d0000162b40556b80959f9f9f9f9f8a75604a35200b0003182d42586d82979f9f9f9f9d88735e48331e0000000000000000000000000000091e34495e73898b8b877a644f39240f0000000000000000000000000000000000000000000000000000000000000000000114263651667b90a8b9b5b5b5ae99846e5746331e0a0000000000000000000000091d3245566d8398adc6b5b5baa9917c6752372715020000000000000000000000000000000b20354b60758aa0b5b5b5a38e79644e39240f000000000000000008141c2025282824221b10000000000000000002182d42576d8297acb5b5ac97826d57422d18000000000000000000000006192b3c556a7f95aac2b5c4b49f8a76614c36210c000000061a2c3d566b8095abbcb5b5b59f8c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f202e3f4d5e677d8b989ea7a1a1a19d937e685f4d39241000011426374d62788b9fb4c6b9b4a18e79634e3727150200000000000000000000000000000000011527374e63798ea1b4b9c6b4a28e79634e3828150200000000000000000000000000000000000000000b203448596e8399aec3b5b5c4af9a846f5a4935200a000000000000000000000000000000000000000014293e53697e93a8b5b5b5a28c77624d37220d0000162b40556b8095aab5b5b59f8a75604a35200b0003182d42586d8297adb5b5b39d88735e48331e0000000000000000000000000000081d32475d72879ca59a85705a45301b000000000000000000000000000000000000000000000000000000000000000000081c3043546d8297acc6d6cac9b49f8a76614c36210c00000000000000000000000b20364b6075899eb4c9cad8c7ad98836d5544311d080000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f000000000000000b182630353b3d3d3a362e1c130800000000000002182d42576d8297acc2c2ac97826d57422d1800000000000000000000000b2035495a71869bb1c6cacebbaa927d67523929160300000c2136495b72879cb1c7d9cfbcab937e68533a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2d3e4b5d667d8d9fa9b3b8beb09e947f6a604e41301d0a0000092035485a6f849aafc4cdbfab96816c5544311d0800000000000000000000000000000000081d3144556b8096abbfcdc5b09a85705b49361a0a0000000000000000000000000000000000000000011426374d62778b9fb4cacacacab59f8c78634d382815020000000000000000000000000000000000000014293e53697e93a8becab7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e0000000000000000000000000000061b30465b70859bb09d88735e3929170300000000000000000000000000000000000000000000000000000000000000000b20354b6074889db3c8dde2cdbaa9927d6752392917030000000000000000000215273751667b91a8b9cce1dec9b39e8975604b36200b0000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f0000000000000b1b2936434b5053524f4a3e30251808000000000002182d42576d8297acc2c2ac97826d57422d1800000000000000000000000d23384d62788da3b5c9ded8c8ae99836e5746321e0a00000e23394e63798ea4b6cad9dac9af9a846f5847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2c3c4a5c657b8b9fabbac7bfb1a096806b61504231231201000006192b3c51677c91a6b8cbc8b39e8874604b36200c000000000000000000000000000000000b20354b6074889db3c8ccb9a7927d68523d2c1a000000000000000000000000000000000000000000081d3144556a7f95aabbcee2e3cfbcab96806b5645321d090000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e00000000000000000000000000070b192f44596e8499ae9f8a745746331e170e0c0600000000000000000000000000000000000000000000000000000000000f253a4f647a8fa6b8cbe0ead7c7ae99836e5746331e0a000000000000000000081d3144556d8298adc6d6e8e0ccb9a7907b65503b26100000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f000000000003172939465460656868645c4a43362513000000000002182d42576d8297acc2c2ac97826d57422d180000000000000000000005182b3b54697f94a9c2cdc9c6c9b49f8a76614b36210c0005192b3c556a7f94aac2c7c4c7cab49f8b77614c37210c00000000000000000000000000000000000000000000000000000000000000000001080b0e11131415161514120f0c0b1b2a3b495a647a8a9ea9bac9c0b3a1978272604a4333241405000000000e20364b6074889db3c9cbb8a6917c66513b2a1804000000000000000000000000000004182a3a51667b91a6b8cbc9b39e8975604b36210f0000000000000000000000000000000000000000000b20354b6074879db2c8d9dfdddac9b39e8875604b36200f0000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e000000000000000000000308131c20252942586d8297adaa8b76614b3633292320190e060000000000000000000000000000000000000000000000000000061a2c3d566b8096abc4d5e7f3dec9b49f8a76614b36210c0000000000000000000b20364b6075899eb3c8def3e8d6c5ac97816c573e2d1b0700000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f00000000000a1e33465761737b7d7d7a6e605443301c0b0000000002182d42576d8297acc2c2ac97826d57422d18000000000000000000000b2034485970859bb0c7bab4b1b5baa9917c6752382816020b2035485a71869bb0c0b3afb3c0bbaa927d6852392916030000000000000000000000000000000000000000000000000000000000070c0e151d202326292a2b2b2a292724211e293947596278889da8b9c7c1b4a2998373605443302515060000000000081d3144556b8096abbccfc5ae99836e5947341f0b00000000000000000000000000000a1f3347586e8399aec4d1c1ac96816c5645321e09000000000000000000000000000000000000000006192b3c51667c91a6b7cbcecac7caccb8a7927d67523d2c1a0600000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e0000000000000000010b171e2530353a3946566b8096aba28d78624f4b463938352c20190e020000000000000000000000000000000000000000000000000c2135495b72879cb1c7dce0dde0cdbaa9927c675239281603000000000000000114263750667b90a7b8cce0dee1ddc8b29d88735c4a36220d00000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f00000000061a2c3d4b6175859092928f8272604a3929170300000002182d42576d8297acc2c2ac97826d57422d18000000000000000000000d22374c62778c9fb5baa99f9ba3b5ad98836e5645321e090d22384d62788da3b5b3a29aa2b3c7ae99846f5746321e0a000000000000000000000000000000000000000000000000000002090f1a2124273135383b3e3f4040403e3c3a36323846576277879ca6b7c6c3b5a39a847460554436251307000000000000021527374d63788c9fb5cacab49f8b77614c372210000a0a0a0a0a0a0a0a0a0a0a0a0a0c22374c61778b9fb4c9c9b5a38e79634e3828160300000000000000000000000000000000000000000b2035485a6f8499afc4c8bbb4b2b7c3c5b09a85705b4936210a00000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e0000000000000009151d293336434a4f565761697f94a9a48e7a67656157554d493c352c1d150a00000000000000000000000000000000000000000000000e23394e63798ea4b6cad5ccc8ccd5c7ae99836e5746321e0900000000000000081d3144556d8297acc5d6cdc9cdd7cbb7a68e79644f39240f00000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f000000000c2135495b6c8196a3a8a7a0937e685746331e0d00000002182d42576d8297acc2c2ac97826d57422d1800000000000000000004172a3a53687e93abbcb49f8b869bb1b49e8975604b36210b182a3b54697e94a9c1af9a849aa9bab49f8a76614b36210c000000000000000000000000000000000000000000000000010a161e212d363937444b4e51535455555554524f4b4645566175859ba5b6c4c4b6a49b8575615645372718080000000000000000092035495a6f849aafc5cebbaa947e69543e2d1b20202020202020202020202020201b2d3e54697e93aabbcec6b09b85705b4a361a0a0000000000000000000000000000000000000000021527374d62788c9fb4cabbaa9f9da5b7c8b4a28e79634e38281603000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e0000000000021019273139464b5460646b71767a8197acac97817d7a76716a635a4d493c32281a0c00000000000000000000000000000000000000000005182b3b546a7f94a9c2d3c5b8b3b8c5c9b49f8a76614b36210c000000000000000b20354b6074889eb3c8c6bab4bac6d4c4aa95806b553c2c1906000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f000000081b2e3f4e63798b9fb4c1beb39e8876614b3b2a1805000002182d42576d8297acc2c2ac97826d57422d180000000000000000000a1f3347586f849aafc9b09b858095abb9a8917c66513727151f34475970859ab0bbaa917c8b9fb4baa9917c6752382815020000000000000000000000000000000000000000000009151d2832363d4a4e555560636668696a6b6a6967646157546074849aa3b5c3c5b7a69c86776157463828190900000000000000000006192c3c52677c91a7b8ccc8b19c86715c4a3635353535353535353535353535353535364a5c71869bb1c8ccb9a8927d68533d2d1a000000000000000000000000000000000000000000081d3144556b8095abbccab49f8c879db2c7c0ab96816c5645321e09000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e000000000614202d37444b576169737a80868a8f979fb1b19f97928f8b8680786e625a4b45382a1c0e00000000000000000000000000000000000000000b2034485970859bb0c5ccb8a79ea7b7c4baa9917c67523928160300000000000114263650657b90a7b8ccbaa89fa8bacdc6b19c86715a4935200c000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f0000000922374b5d6e8399aabbcecbb8a695806a5947341f0e000002182d42576d8297acc2c2ac97826d57422d180000000000000000000c21374c61768b9fb4c2ad97827b8fa7b9ad98826d5544311d22374c62778b9fb4b49f8a76869bb0c7ad98836e5645321d090000000000000000000000000000000000000000011019273138454b535b636a6f75787b7e7f80807f7e7c7a76726c738298a2b4c1c6b8a79d887862594739291a0a00000000000000000000000e20364b6075889eb3c8c9b5a48e79644f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4e64798ea3b5c9c9b49e8975614b36210f0000000000000000000000000000000000000000000b20364b6074889db3c9c5b09b858197acc1c9b39e8975604b362110000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e000000081624313e4a556069767e878f969b9faaacb1bdbdb1aca7ab9f9b958c83786b6056473a2b1e0e000000000000000000000000000000000000000d22374c62778b9fb5cac8b39e889da6b7c7ae98836e5745321e090000000000081c3043546c8197acc5c9b49f899fb4c5c9b5a48d78634d38230e000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f0000091930404f647a8fa1b2c8d8d5c4b49e8a77624c3c2c19060002182d42576d8297acc2c2ac97826d57422d1800000000000000000316293952687d92aabbc6a8937e73899eb3b39e8975604b3620293a53687e93abbcb09a85708196acc1b49e8975604b36200b0000000000000000000000000000000000000008141c2e37444b56606971798085898d90939495959593918f8b87818298a0b2c0c7b9a89e8979635a483b2a1b0b000000000000000000000000091d3145566b8196abc0d1c2ac97816c565f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f566c8196acc2d2c1ac97816c5746321e090000000000000000000000000000000000000000061a2c3d52677c91a6b8cbc4aa95807d92a7c1ccb9a7927d68523e2d1b070000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e000000162633424e5c64737e88949ca5abb1b4bbc8c5cecec5c1c9bcb5b0ab9f988b80746159493c2b1a0a00000000000000000000000000000000000317293953687e93abbccfc2ad9882889db3c8b49f8a75604b36210b00000000000b20354b6074889db3c8c7ac978297a7b8ccc2a9947e69543a2a18040000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f00021527374d5f70859bb0bfcbc8cacdb9a897816c5b493521100002182d42576d8297acc2c2ac97826d57422d1800000000000000000a1e3246576e8499aec8b9a88e796e8398aeb9a7907b665037263346586f8499afc3aa947f6a7c91a7c2b9a8917b66513727150100000000000000000000000000000000000a1826303f4b556069757e868e959a9fa8a6a8a9aaaaaaa9a7ab9f9c9798a0b2becebaa99e8a7a645b4a3c2b1d0c00000000000000000000000000021527384e63798da2b4c8c8b39e8974757575757575757575757575757575757575757574899eb3c8c9b5a38e79644f3928160300000000000000000000000000000000000000000c2135495b6f849aafc4cbb7a68f7a778ca3b5c9c5b09b85705c4a36220b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e0000091933445060687a86949ea7b2b6c3c6c2bbb6c7cac7bab4b4bbc8c9bcb5a99f968477625a4938281603000000000000000000000000000000000a1e3346576f8499afc9d7c7a9947f8399aec3baa8917c6751382816030000000013253650657a8fa6b8cbbaa9907b899eb3c8c5b09a85705847331f0a0000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f00081d314455677c91a2b4c4b7b3b4bbc6b49f8b78634d3e2e1b0702182d42576d8297acc2c2ac97826d57422d1800000000000000000c21364b61768a9fb4c9b39e8974677d92aabbac97826d554431364c61768a9fb4b7a58e7964778ca4b5c6ad97826d5544311d08000000000000000000000000000000000b1a2836434b5d65737e88939ca4aaafb4bac6bdbebfc0bfbec9bcb5b1acadb2becfc9b49f8b7c655c4b3d2d1e0e0000000000000000000000000000000a2135495b70859ab0c5ccb8a79e8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b9ea7b8ccc6b09b86715c4a361b0b0000000000000000000000000000000000000000021628384e63788da2b4c8c8b39d887471869bb0c6c9b5a38e79644e3929170300000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e000115273750626b7e8b9ba3b3b8c5c6bab4ada6a1b2b6baa99f9faaaab2b6c3bab4a29a8778625645321e11000000000000000000000000000000000c21364b61768a9fb4c9cdbaa98f7a7e93a9c3c6ad98836e5645321e09000000071c3043546c8196acc4c9b49f8a758499afc4cab49f8b77614c37220c0000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f031729394b6074879cb2c0b7a69d9faabbbbaa98836e5c4b37221200182d42576d8297acc2c2ac97826d57422d18000000000000000215283852677c91a9bac3ae99836e61768b9fb4b39e8874604b353952677d92aabbb29d87725c71869cb1c6b39e8874604b35200b0000000000000000000000000000000b1b29384554606a7b86949ea6b1b5c2c4c9cac7c4c2c1c1c1c3c6c9cac7c1c2c6cfd1bca7927c675e4c3e2e201001000000000000000000000000000000061a2c3d52677d92a7b8ccc5b8aa9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faab8c5cdb9a8937e68533e2d1b000000000000000000000000000000000000000000091e3245566b8196abc0d1c2ac96816c6a7f94a9c0d1c1ac97816c5746331e0a00000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e00081d3144556b80939fa9b5c2c6bab4a89f98918c9ca4b49f8b8b8e959ca4b4b9c0b4a59b8575604b3f2e1c0800000000000000000000000000000215273752677c91a9bacec9b49f8a75788da4b6c9b49e8975604b36210b0000000b20354a6073889db2c8c9af9a846f7f94aac5cfbcab927d68523928160300000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f0a1e334657697e93a4b6c8b39d888c9fb4c8b2a08f7a644f402f1808182d42576d8297acc2c2ac97826d57422d1800000000000000091d3245566e8398adc7c2a8927d68586f849aafb8a7907a65503645576e8399aec5ac96816c576b8095abc5b8a7907b6550362513000000000000000000000000000009192939465660727f8c9ca4b3b8c4c9cac4c3b7b2afadacabacaeb1b4bac7c8ccd5e0dac5af9a8477645c4a3e2d1f0f000000000000000000000000000000000f21364b6075899eb3c8d6c8bbb4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4bbc8d5c9b49e8a76614b3621100000000000000000000000000000000000000000000b21364b6075889eb3c8cab6a48f7a6463788da2b4c8c9b49e8976614b36211000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e000b20354b6075869caabac7bfb3a89f958a827c77869cb19b8674797f87929ea8b8c3b5a397826d5d4b3723100000000000000000000000000000081d3144556d8398adc7d8c5af9a857072879cb2c7b9a8917c66513828150200000f253a4f647a8fa6b7cbbcab937e687a8fa7b8ccc9ae99836e5745321e0900000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f182b3b4b6176889eb3c3bbaa957f8399aec2beaf9a84705e4c362614182d42576d8297acc2c2ac97826d57422d18000000000000000b20364b6075899eb4c9b5a48c776253687e93abbcac96816c54434b60758a9fb4b8a7907b6550657a8fa7b8c5ac97816c5443301c07000000000000000000000000011527374657617483959faab5c2cbc9bcb4afa7a59d9a97969697999b9fa9acb3b8c5ccd6c8b4a29a887a645c4a3d2d1b0b000000000000000000000000000000091e3245566c8196acc1d1d9cec6b9b4b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b9c5ced9d2c2ac97826d5746331e0a0000000000000000000000000000000000000000071a2d3d52677d92a7b8ccc7b19c87725d5a70859ab0c5cdb9a8937e68533e2e1b08000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e00081d314455647a8c9fb4b9b4a1998a80766d6670859bb09d8873646a747d8a9da6b8c1b1a08f7b65503e2e1b07000000000000000000000000000b20364b6075899eb3c9d4c3a9947f696b8095aac2c6ad98836d5645321d0900071b2d3e566b8196abc4cab49f8b776274889eb3c8c9b49f8a76604b36210b00000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f203448596b8095a6b8c9b49f8b777c90a4b5c8b4a2907c665443301c182d42576d8297acc2c2ac97826d57422d180000000000000114263751667b90a8b9c6b19c8671594c62778c9fb5b39d8873604a51667c91a8bab39e8974604b6074899eb3c8b29d8873604a35200b0000000000000000000000000c1d31445561758499a1b4bbc8cbbeb2ab9f99928c87848281818283868a8f969ea7b3b9c5d0c0b4a69d897a645b4a3a2917040000000000000000000000000000021628384e63798ea3b4c8ddccb9a89e9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9ea7b9ccdec9b5a48f7a644f3929170300000000000000000000000000000000000000000c21364a5b70859bb0c5cebaa9947f695452677d92a7b9ccc6b19b86715c4b37220c000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e00011527374a5c6b8095a3a89e9283786b6158596e8499ae9f8a745755606879889daabbbeaf9a846f5c4b37220d0000000000000000000000000010263b50657b90a7b9cccab7a58e796364798ea4b6c9b49e8975604b36200b000d22364a5c72879db2c7c9af9a8570596d8398adc8cdbaa9917c665137261401000000000000000000000b20354b60758aa0b5cab9a38e79644e39241a2d3d4d62778a9fb4c5bcab98826d72869cb1c2c0b19c8673604b3828162d42576d8297acc2c2ac97826d57422d18000000000000081d3144556d8297adc6c6ab95806b56485970859bb0b7a68f7a654f556d8298adc6ad98826d5544556d8398adc9b7a68f7a644f3a250f00000000000000000000000c1c30404b60738399a2b3bfcec4b7b3a0988c847d77726f6d6c6c6c6e71757a8188949ea7b3bfcdc4b7a79e8979635846331f130000000000000000000000000000000a21364a5b70859bb0c5d6c9b49e8a88888888888888888888888888888888899eb3c9d7c7b19c86715c4b371b0b0000000000000000000000000000000000000000031628394e63798ea2b4c8c9b49f8a77614c4b6075899eb3c9c9b5a38f7a644f3a2917040000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e000009192d3e4b6074859494897d6f625a4c46586d8297ada98b76614b4b5b657b8c9fb4cab4a28f7a644f3a240f000000000000000000000000071b2d3e576c8196acc5d6c7b29d87725b5c72879cb1c7b9a8917c6651382715020f24394f64798ea5b7cabcab937e6853677c92aabbcec7ad97826d5544311d08000000000000000000000b20354b60758aa0b5cab9a38e79644e392421364a5b6d8297a8bac7b49f8c7963677d92a4b5c9b5a4927d685645321e2d42576d8297acc2c2ac97826d57422d180000000000000b20354b6074889eb3c8b9a88f7a65503b54697f94a9c2ab96816b566075899eb3baa9917c67513752677d92abbcc4ab96806b563d2d1a0700000000000000000004182a3a4d5f6c8197a1b3c0d0c2b5a69d9082796f6762595a58575657595660656c757e8999a1b0bccdc5b8a79d8776614c41301b0a0000000000000000000000000000071a2d3d52687d92a7b9ccc2ad9882737373737373737373737373737373738196acc1cdbaa9937e69533e2e1b000000000000000000000000000000000000000000091e3246576c8196acc0d1c3ad98836e584745566c8196acc1d2c2ad97826d5847331f0a0000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a35200b0003182d42586d8297adc2c8b39d88735e48331e000000101d32455661757f7f7768604d483c41566b8096aba28d78624d3d4b5d6d8298adc6c0ac96816c573a29170400000000000000000000000d22364a5c72879db2c7d7c7ac97816c57556b8095aac2c6ad98826d5645311d091a2d3d566b8095abc3cab49f8b77624c61768b9fb4cac8b39e8874604b35200b000000000000000000000b20354b60758aa0b5cab9a38e79644e39242f3f4e63798c9fb4c6baa997826d5b6073869cb1c0c2b29d8775604b3a292d42576d8297acc2c2ac97826d57422d1800000000000013253650657b90a7b8c9b39e8975604b384d62788da3b5b29d87725c667b90a7b9b49f8a76614b374c61778b9fb4c7b29c87725c4a36210d0000000000000000000a1f344759677c919fb1bfd0c2b5a39b887b6d635b524c483b4241414238454b505760697783959eb0bccdc5b6a598836e5f4d3928160300000000000000000000000000000f21364b6075899eb3c9c9b49e8976615e5e5e5e5e5e5e5e5e5e5e5e6075889eb3c8c9b49f8a76614c3621100000000000000000000000000000000000000000000c21364b6175899eb3c9cab6a5907b65503a384e63798ea3b5c9c9b49f8a76614c3721110000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75604a3520000003182d42586d8297adc2c8b39d88735e48331e00000002152838465761696a62594e42352b3f546a7f94a9a48f79644f3a3f4f647a8fa8b9c7b19c87725847331f0a00000000000000000000000f24394f64798ea5b7cbcdbaa9907b66514e64798ea4b6c9b39e8975604b36200b21364a5c72879cb2c7c9af9a857059475870859bb0c5ccb8a78f7a65503a2510000000000000000000000b20354b60758aa0b5cab9a38e79644e3925364b5d6f8499abbcc4b49f8a77624d54667b90a2b4c9b7a5947f695847332d42576d8297acc2c2ac97826d57422d180000000000071c3043546c8196acc5c3ae98836e554435495a71869bb1b7a58e79646c8297acc5ae99846f574633475870859bb0c5b6a58e79644e39240f0000000000000000061a2c3d4c6177899eb3bdcec5b5a49b8577655d4e493d37342a2d2c2c2d28323639454b59627280959eb0bfd0c3b2a0927d675745321e0a0000000000000000000000000000091e3245576c8197acc1cdb9a8927d68523c48484848484848483b51677c91a7b8ccc2ad98826d5846331f0a0000000000000000000000000000000000000000071b2d3e53687d92a7b9ccc8b29d8773604a35364a5b70859bb0c6cdbaa9937e69543f2e1c0800000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a75603a2917040003182d42586d8297adc2c8b39d88735e48331e000000000a1a2939464b54544c483b3120283d53687d92a8a5907b66503b354b6075899eb4c9b6a48c76614c37210c0000000000000000000006192c3c556b8095aac3d4c9b49f8a75604b4a5c72879cb1c7b9a7907b665137271524394e64798ea5b6cabcab937e68533b556a7f94aac4d4c5ab96816b563d2d1a070000000000000000000b20354b60758aa0b5cab9a38e79644e39304354657b90a1b3c9b8a695806b59484c5e6f849aabbcc3b39e8976614c3c2b42576d8297acc2c2ac97826d57422d1800000000000b20354a6073889db2c8c2a8927d6853372b3c556a7f95aac2ab95806b74889db3bcab927d6853392a3a556a7f94aac4c3aa95806a553c2c1906000000000000000c2135495b6c8197a7b8ccccb8a79c867662594c3f352c221f1818171717161e2128323b4754606b8095a1b3c5cfbeb29d8775604b3828150200000000000000000000000000031628394e64798ea3b5c9c6b09a85705a49353333333333333447596f8499aec5cab6a48f7a654f3a29170400000000000000000000000000000000000000000d22364a5c71869bb0c5cebbaa947f6a5443302d3d53687d93a8b9cdc7b19c86715d4b37230c00000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000162b40556b8095aac0cab59f8a755846331f0a0003182d42586d8297adc2c8b39d88735e48331e00000000000b1b2933363f3f37342a1d13273c51667c91a6a7927d67523d31445572879cb1c7c2a48e79644f39240f000000000000000000000c2035495a71869cb1c6d9c4ae99846f56453d556b8095aac2c5ad97826d5544311d2c3d556b8095aac3cab49f8b77624c394e64798ea6b7cbc7b29d87725b4a36210c0000000000000000000b20354b60758aa0b5cab9a38e79644e39384a6072859bb0bfc2b39e8876614b3b404f647a8d9fb5c7b9a796806b5a483542576d8297acc2c2ac97826d57422d1800000000000f253a4f647a8fa6b7c9b5a38c77624d3724394e63798ea4b6b19c87727a8fa6b8b49f8b77614c3724394e64798ea6b7c6b19c86715b4935210c00000000000004182a3a4e63798c9fb4c5d1c0b39e89786258483b2f211a0f0b050002010002090b161e2a36434a60728399a7b8cccbb7a6957f6a5645321d0900000000000000000000000000000a21364a5c71859bb0c6c8b4a28d78634d3626141e1e1e22374c62778b9fb4cac7b19c86715d4b371c0c0000000000000000000000000000000000000000031729394f64798ea3b5c9cab49f8b77624c362521364b6176899eb4c9cab6a48f7a65503a2a1804000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0001172c41566c8196abc1cbb6a18b76614c36210c0004192e43596e8398aec3c7b29c87725d47321d0000000000000b171e212a2a221f180d10253a4f657a8fa4a9947e69543f2c3d5b70869bb0c5bba6907b66513b2611000000000000000000000d23384d62788da4b5c9d2c2a8937e685338394e63798ea4b6c9b39e8975604b362036495b71869cb1c6c8af9a85705947364a5c73889db2c8cab6a58e79634e39240e0000000000000000000b20354b60758aa0b5cab9a38e79644e394556677d92a3b5c9b6a4937e68574633364a5c6d8298a9bac5b49f8b78624d3d42576d8297acc2c2ac97826d57422d1800000000071a2d3d566b8096abc4c6b19b867159483421364a5b72879cb1b6a48c788095aac4b09a857059473422364a5c73889db2c8b5a48d78634d38230e0000000000000a1f3447596d8297aabbcec8b4a2927d675a493a2b1d110600000000000000000000030d18253043546177899eb3c3d4c4b39e8875604b36200c0000000000000000000000000000071a2d3e53687d93a8b9cdc0aa95806b5443301c08071b2d3e54697f94aabbcdbaa9947e69543f2e1b0000000000000000000000000000000000000000000a1e3346576d8297acc1d2c3ae99836e594834181e3246576d8297acc2d2c2ad98836d5947341f08000000000000000000000014293e53697e93a8beccb7a28c77624d3722140804182a3a586d8298adc2cdb8a38e78634e39231305071b2e3e5a6f859aafc4c5b09b86705b46311b00000000000000030a0c14150d0b05000e23394e63788ea3aa95806b554035495b72889db2c7bca6917c67513c271200000000000000000004182a3a54697e94a9c2d2c9b5a48d78624d38364a5b72879cb1c7b9a7907b66503727394e63798ea4b6cabbaa937e68533b2d3e576c8297acc7d4c3aa957f6a553c2b190500000000000000000b20354b60758aa0b5cab9a38e79644e3a4b6074879db2c1c0b19c8674604b39292d3e4d62788b9fb4c5baa997826d5b4a42576d8297acc2c2ac97826d57422d18000000000c21364a5b72879cb2c7c5ab95806b563b2b1a2d3d566b8095abc2a7927d859bb0c2a9947f69543b2a1b2d3e576d8297acc7c2a9947f6a543b2b190500000000000c22374c61778a9fb4c8d3c2b09a85705f4d3c2b1c0d0000000000000000000000000000081325364759687e93a5b7cbccb8a7927d67523a2a180400000000000000000000000000000f21364b6176899eb4c9c7b29d8774604b35200b0d22364a5c71869cb1c8c9b49f8a77614c3721100000000000000000000000000000000000000000000c21364c61768a9eb4c9cbb7a5907b66513b2b181629394f647a8fa4b5c9c9b49f8a77614c362513000000000000000000000014293e53697e93a8beccb7a28c77624d3f32221b161f33475871869bb0c6d3bda8937e6853413020191922364a5c73889eb3c8c4af99846f5a442f1a000000000000000000000000000000000c22374c61778cabac97826c5742424e63798da5b7cbc8a6907b66513b26110000000000000000000a1f33475870859ab0c5dac6b19c86715a48352d3d556a8095aac2c5ac97826d5544313c556a7f95aac2cab49f8b77624c37273c51667c91a9bacec6b09b86715a4834200b00000000000000000b20354b60758aa0b5cab9a38e79644e4758697f94a5b7c9b4a2917c665544311b2035495a6c8196a7b9c7b49f8c79634e3f576d8297acc2c2ac97826d57422d18000000000e24394e63798ea5b6cab9a78f7a65503a2510243a4f647a8fa5b7ad98828b9fb4b6a48d78634d382311273c51667c91a9bac5b09b8570594834200b000000000417293a53697e93a9bacdc9b6a4907b655041301e0e0000000000000000000000000000000008182a3a4b6074879db2c7d5c5b09b85705947341f0a00000000000000000000000000000a1e3246576d8297acc1cab7a5907b65503929171528384f647a8fa4b5c9c3ad98836d5847331f0a0000000000000000000000000000000000000000081b2e3f53697e93a8b9cdc9b29d8774604b35200d0b22374b5c71869cb1c7cebaa9947f695443301c070000000000000000000014293e53697e93a8bed1bca6917c675d4f42372e28323e4c61778a9fb4c9c8c5b09b85705f4d3f352b2b34424f647a8fa7b8ccc8ab96806b56412b16000000000000000000000000000000000b20354b60758a9fae99836e59454b606d8298adc3cebbaa8e79644f39240f0000000000000000000c22374c61778b9fb4cad6c5ab96806b563c2b24394e63798ea4b6c8b39e8974604b35495b71869cb1c6c8af9a856f59473421364b61768a9fb4c9c9b5a38d78624d38220d00000000000000000b20354b60758aa0b5cab9a38e79644e4c6176899eb3c3bcab9a84705e4c372715192b3c4c6176899eb3c4bcab99846f5d4b576d8297acc2c2ac97826d57422d1800000006192c3c556a8095aac3c9b39e8975604b35200b22364a5c72879db2b49f8a9fa9bab19c86715a4935200c21364b61768a9fb4c9b59f8c77624d37220d000000000a1f33465870859aafc7d7c6b19c86715d4b3723130000000000000000000000000000000000000c1d3145566a7f95aac2d3cab59f8b77614c37220c0000000000000000000000000000031629394f647a8fa3b5c9c3ad98826d5746331e1d3245566c8197acc2cab6a48f7a65503a2a170400000000000000000000000000000000000000000e22374b5d71869cb1c6cfbcab95806a5443301c08071b2e3e53697e93a9bacdc7b29c8773604a35200d0000000000000000000014293e53697e93a8bed3c9b49f8b7b69604f4b3f39464b5c6a7f94aabbc0b4afb4a3927d675d4d483c3b484d606e8398adc5cebbaa917c66513c261100000000000000000000000000000000081d31445574899eb09a85705b56606b7e93a0b2c6cab49f8a76614b36210c00000000000000000316283852687d92aabbceccb9a78f7a65503a2521364a5b71869cb1c6b8a7907b6550374d63788da4b5c9bbaa937e68533b2a1e3246576f849aafc4d2c1a8937e69533a291704000000000000000b20354b60758aa0b5cab9a38e79644e5a6b8196a7b8c7b59f8d7a644f403019090e1f3347586a7f94a6b7c9b3a18f7b6554576d8297acc2c2ac97826d57422d180000000c2035495a71869cb1c6c3ae98836e5544311d081b2e3e576c8196acbaa99fa9bac4aa95806b553c2c190a1e3246576f849aafc4bcab937e69533a2a18040000000c21364c61768b9fb4cad5c4a9947f6a543f2f1c05000000000000000000000000000000000000021527384d62788da4b6c9cfbcab927d67523d28120000000000000000000000000000000b22364a5c71869bb1c6c9b49f8a76614c362120364b6075899eb3c8c8b29c87725d4b371c0c000000000000000000000000000000000000000004172a3a4f657a8fa4b5c9cab49f8b78624d36261401001021374c61768a9fb4c9cab6a5907b65503b2b180500000000000000000014293e53697e93a8bed3cdbaa99f8b7e6f655d5a5a5761697a8b9fb4c3b4a29aa2b49e8a7b6c625a5a5a59626c7e92a0b2c6c9b49f8a76614c37210c000000000000000000000000000002090d1826375d72879cb19c8771616975808d9fb5becfc1b09a85705746331e0a0000000000000000091e3245566e8399aec8d9c9b39e8975604b35201a2d3d556a8095aac2c5ac97826d5544546a7f94a9c2cab49f8b77614c372216293954697e93a9c3d3c4af9a846f5846331f0a000000000000000b20354b60758aa0b5cab9a38e79644e62788b9fb4c5baa998826e5c4a3622120004172a3a4b6075879db2c2bfb09b857260576d8297acc2c2ac97826d57422d180000000e23384d63788da4b5c9c1a8927d68533727150110253a50657a8fa6b8bab4bac7b7a68f79644f3a240f0316293954697e94a9c3c9af9a85705847331f0a00000011263b50667b90abbccfcbb8a68e79634e39231100000000000000000000000000000000000000000a2035485a71869cb1c6dac9ad98826d58372614010000000000000000000000000000071b2d3e53687e93a8bacdbaa9937d68533d2c2b3b52677c91a7b8ccbbaa947f69543f2e1c0000000000000000000000000000000000000000000a1f3347586d8298adc2d2c4af99846f5a4835180800000a1f3347586d8298adc2d3c3ae99836e594834200900000000000000000014293e53697e93a8becfbfb2aea99f93847a736f6f71767e8a9ea9bab7a59a859aa6a89e8c8178726f6f7277818d9fb5becebdad98826d5847331f0a000000000000000000000000010a151d202a34465b70869bb09e8873767e87969fabbccfc6b4a3927d67523929170300000000000000000b21364b6075899fb4c9d9c9ad98836e5544311d0f24394e63798ea4b6c8b39e8874604b5a71869bb0c6c8af9a856f5947341f0e23384d63788da4b6cac9b49f8a76614c36210c000000000000000b20354b60758aa0b5cab9a38e79645c6d8298a9bac5b49f8b78624d3e2d1b0400000c1e324556687d92a4b5c9b5a3917c67556d8297acc2c2ac97826d57422d18000005182b3b54697f94a9c2c9b5a38c77624d37220d000b20354b6074889eb3c8c9cec8b29d8874604a35200b000e23384e63788da5b6cab49f8b77614c37220c000000152b40556a8095aac9d9c8b39e88735b4a36210c000000000000000000000000000000000000000005192b3c576c8196acc1d6c6b19c86715544311d080000000000000000000000000000001021364c61768a9fb4c9c7b09b85705b49353448596f8499afc5c9b49f8b77614c3722110000000000000000000000000000000000000000000c21374c61768a9fb4c9cbb7a6917c66513c2b190000000417293a50657a8fa4b6cacab49f8b77624c37261401000000000000000014293e53697e93a8bec6b2a1999ea6a19a8f888584868a949ea8b9c1b29d8776889eb3aa9f968d878485878c979fabbccfc2b19f8f7a644f3a2a1704000000000000000000000009141d2731363b484c596f8499ae9f8c828a939da6b5bcc9c6b9a89b8573604b35200b00000000000000000114263751667c91a8bacdcfbcab927d67523727150c21364a5b71869cb1c6b8a7907b655062788da3b5c9bbaa937e68533b2a180c2135495b72879cb2c7cebbaa927c6752382815020000000000000b20354b60758aa0b5cab9a38e7964647a8d9fb5c7b8a796806b5a49352010000000031628384b6073869cb1c0c1b29c8774606d8297acc2c2ac97826d57422d1800000b2034485970859bb0c5c6b19b8671594834200b00081d3144556d8297acc6d6d6c5ac97816c5443301c07000c2135495b72879cb2c7bbaa927d6853392917030004192e43596e8398aec3d8c4af99846f5a3d2d1a0700000000000000000000000000000000000000000013283d53687d92a8bdd2c9b49f8a75604b35200b0000000000000000000000000000000a1f3346586d8297adc2c8b4a28d78634e36374d62778b9fb4cac3ae98836e5947341f0b0000000000000000000000000000000000000000081c2f3f54697e94a9bacdc9b39d8874604b35200e000000000c23374b5d72879cb1c8cebbaa957f6a5544311d08000000000000000014293e53697e93a8bec3ae9983889ea6afa69e9a999b9fa9b4b9c3b4a3937e687c919eb4b4aba49c9a9a9ca4acb5bcc9c0b4a497816c5c4b371c0c00000000000000000000010f19263138454b52596269708298adaa9f989fa9b2b7c4cec3b7a89e8a78635544311d080000000000000000081d3144556d8297adc6d7cab49f8b77614c37220c071a2d3d556a8095aac2c5ac97816c55697f94a9c1cab49f8b77614c37220c06192c3c566c8196abc6d6c8ae98836e5645321d090000000000000b20354b60758aa0b5cab9a38e79646f849aabbcc3b39e8976614c3c2b1902000000000a1c304354667b90a2b4c9b6a5937e696d8297acc2c2ac97826d57422d1800000d22374d62778c9fb5c4c3ab95806b563b2b1805000114263751667b90a8b9c5c5b9a7907b65503625130000061a2c3d576c8196acc3c8ae99846f5746331e0a00061c31465b71869bb0c6d6c1ab96816c56412c17000000000000000000000000000000000000000000000f253a4f647a8fa4b9cfcdbaa98d78634d38230e0000000000000000000000000000000417293a4f647a8fa4b5c9c0ab95806b54433e546a7f94aabbcab6a5907b65503b2a180400000000000000000000000000000000000000000e23374b5d72879cb1c7cfbcab95806b5544311d0800000000081c2e3f54697f94aabbcec8b29d8774604b35200e000000000000000014293e53697e93a8bec5a7927d79889ca4b4b3afafb0b4bac7c1b4a59b8573606a7f949faab4b6b1afafb1b6c2c9c6b9b4a29a8675604b3e2e1b0000000000000000000003111f2c37444b5660686f777e858d9fb5bbb4adb4bac7cbc8bbb4a59d8a7b655a493726140100000000000000000b20354b6074889eb3c8dbc5b09b85705947341f0a000f23394e63798ea4b6c8b39e88746070859bb0c5c8af9a856f5947341f0b0010263b50657b90a8b9cdc9b49e8975604b36200b0000000000000b20354b60758aa0b5cab9a38e79667c90a2b4c9b6a5947e695847331e0e0000000000011426364c5e6f849aabbcc3b39e88756d8297acc2c2ac97826d57422d18000215273853697e93abaeaeaea58f7a654f3a25100000000b20364b6075899eb0b0b0af9e8975604b36200b00000011263b50667b90a5aeaeae9f8a76614c36210c00091e33495e73889eb3c8d3bea9947e69543f2914000000000000000000000000000000000000000000000d22384d62778da2b7ccd7c7a48f7a654f3a2510000000000000000000000000000000000b22374b5d71869cb1c7c8b29d8874604b4b5c72869cb1c8c8b29d8773604a35200c000000000000000000000000000000000000000004182a3b50657b90a4b6cacab59f8c78634d3727150100000000001122374c61778b9fb4c9cbb7a5917c66513c2b19050000000000000014293e53697e93a8aeaea78f7a647986969faab2b6c3c8bbb4b0a39b87786255616a7f8c9ba3acb2b7c3bac8bbb4afa89e9584766156453220100000000000000000000211212e3d49556069747d858b939b9fabbccecac2c9c9c6b9b4aa9f96877a655d4b3c2c190900000000000000000010253a50657a8fa7b8ccd4c4aa957f6a553a2a1804000c2136495b71869cb1c6b8a6907a65778c9fb5cabbaa937e68533b2a1804000b20364b6075899eb4c9ccb9a8907b66503625130000000000000b20354b60758aa0b5cab9a38e7973869cb1c0c1b29d8774604b3a29170000000000000008182f404f647a8d9fb5c7b8a695806d8297acc2c2ac97826d57422d1800091d3145566f859999999999978774604b35200b000000091d3145566d82979a9a9a9a96826d5544311d080000000b20364b6074879799999999927c67523d271200071c30435474899fb4c9d2bca7927d67523d2812000000000000000000000000000000000000000000000c21364b61768ba0b6dad0bba5907b66503b261100000000000000000000000000000000081b2e3f54697e93a9bacbb7a6907b66504f647a8fa4b6cabbaa947f6a5443301c0700000000000000000000000000000000000000000b1f3447596e8398adc2d3c5af9a846f5a493519090000000000000b1f3447596e8398aec3d4c3ae99846f5a483520090000000000000014293e53697e93999999988975606375818b969da5a4a5aa9f9b928578625a485061697a858f979da5a3a5a4aa9f9a94897f746158473828160200000000000000000010202e3f4b5b63737e87929a9fabb0b5bcc9d3cac7bab4aea89e968c8175645c4b3f2e1e0e000000000000000000071a2d3d566b8196abc5d5cbb7a68e79644f39240f0000061a2c3d556a7f95aac2c4ac97816c7e93abbccab49f8b77614c37220c0000091d3145566e8399aec3d6c6ac97826c5443301c0700000000000b20354b60758aa0b5cab8a38e797d92a4b5c9b5a3917c675645311c0c00000000000000001222364a5c6e8398a9bac4b49e8a778197acc1c2ac97826d57422d18000b20364b60748384848484848178625544311d08000000021527384c617681858585858175614c37271502000000091d31455663798284848484847e69543e2914000b20354a60758aa9bacdd1bca6917c67513c2712000000000000000000000000000000000000000000000b20354b60758aabbccfd1bca7917c67523c271200000000000000000000000000000000001021374c61768a9fb4c9c4ad98836e58566c8297acc2cab49f8b77624c3625130000000000000000000000000000000000000000011426364c61778b9fb4c9ccb8a7917c67523c2c190000000000000004182a3b50667b90a5b7cacab49f8c78624d3727150200000000000011263b51667c84848484837b645757616b7880878c8e8f8e8a857d73625a483c434f5c64707a81878b8e8f8e8d8a857f776a6056473a291a0a0000000000000000000b1b2e3f4b5d657985939da6afb4bcc9cacfd3c2b6b1a99f99928981786b61574a3e2e2111000000000000000000000c21364a5b72879db2c7dcc8b39d8874604a35200b0000000f23394e63798ea4b5c8b39d8873859aafc9c8af9a856f5947341f0b00000215273853687d93a8c2d2c8b39d8874604a35200b00000000000b20354b60758aa0b5cab8a38e79889db2c2bfb09b8572604a382715000000000000000000071b2d3e4d62788b9fb4c6b9a897818096abc0c2ac97826d57422d1800091d314556606e6f6f6f6f6f6c625a4937271501000000000a1f334658616c707070706c6157463319090000000002152738495b636c6f6f6f6f6f69604f3b2712000b20354b60758aaabbced1bba6917c66513c271100000000000000000000000000000000000000000000091e324556758a9fb5cad2bca7927d67523d281200000000000000000000000000000000000a1f3347586d8298adc2c9b49f8a76616075899eb3c9c3ae99836e59483418080000000000000000000000000000000000000000081c3043546a7f94aabbcec8b39e8875604b36200e00000000000000000c20354b6074879db2c8cfbcab95806b5544311d080000000000000f24384c5e666f6f6f6f6d645d4b464b5a626b7277797a797670686055483c2b323e4a4f5d656c7276797a797775706961584b4538291c0c000000000000000000031629394b5d657b8a9ba3b2b7c4cac9c6bdcacab6a49c928a847d766c625a4b46392d201103000000000000000000000e24394e63798ea5b6cad8c7ac97826d5443301c070000000c2135495b71869cb1c6b7a6907b8c9fb4cabbaa937e68533b2a18040000000d22374d62778ca3b5c9cbb7a68f7a644f3a250f00000000000b20354b60758aa0b5cac0ab968096a6b7c8b3a18f7a655443301a0a00000000000000000000102035495a6c8196a8b9c6b49f8c8297acc2c2ac97826d57422d180002152738454b595959595959574d493c2b190900000000000417293a464c575b5b5b5a564c463929170000000000000a1a2c3c494d575959595959544f42321f0c00081d314455748a9fb4c9d1bca7927c67523d2712000000000000000000000000000000000000000000000b21364b60768babbccfd1bba6917c66513c271100000000000000000000000000000000000417293a50657a8fa4b6cabaa9937e68677c92a7b9cab7a5907b66503b2a180000000000000000000000000000000000000000000b20354b6073879db2c8d1c0ab96816b5645311d090000000000000000081c3043546a7f95aabbcec9b39d8874604b36200e000000000000091d2f404c5159595959584f4b3f323c484d5659616465646157524b44372b1e202d363f4b50575861646564626056544c473a32281a0c000000000000000000000a1e324657647b8a9ea8b5c1cbc9c2b5b1a8b5bcb19c867d766e6761574d493c32281b10020000000000000000000005192b3b556a7f95aac3d3cebaa9917c665136251300000000061a2c3d556a7f95aac2c4b09a859aaabbcab49f8b77614c37220c000000000b2034485971869bb1c6d5c4ab95806b563d2c1a06000000000b20354b60758aa0b5cac9b49e899eb4c4bbaa99836e5d4b362513000000000000000000000006192c3c4c6177899eb3c4bbaa9f899fb4c9c2ac97826d57422d1800000a1a2731364444444444444238352b1e0e000000000000000b1b2933364245454545413633291b0b000000000000000e1e2c35384244444444443e3b3224140200011527495e74899eb3c9d3bda8937e68533e2913000000000000000000000000000000000000000000000c22374c61778ca1b6dad0baa5907b65503b26100000000000000000000000000000000000000c23374b5d72869cb1c7c7b09a85706f8499afc5c8b29d8774604b35200d000000000000000000000000000000000000000005182b3b50667b90a5b6cac8b4a28d79634e382715020000000000000000011426364d62788b9fb4cacbb7a6917c67513c2c190600000000000012222f383b44444444433a372e1e2b35383b474c4f504e4b4639353126190e101b222e373a3a464c4e504f4d4b453837332a1d150a0000000000000000000005182b3b4b6175879da8b9c6ccc1b5b0a39b929fabad97826d6158524b4639352b1e160b0000000000000000000000000b2034485971869bb0c6dbc9b49f8a76614b36210c00000000000f23384e63788da4b5c8b4a29aa2b4c8c8af9a846f5947341f0b0000000005182b3b556b8095aac5d5c7b19c87725b4935210c000000000b20354b60758aa0b5cacdb9a89ea8b9c6b49f8b79634e3f2e18080000000000000000000000000e1f3347586a7f94a6b7c8baa99fa9bacdc2ac97826d57422d180000000a151d202f2f2f2f2f2f2c2320190e0000000000000000000b171f212c303030302c211e170b0000000000000000000e1921232d2f2f2f2f2f29271f14060000001d32475c72879cb1c7d5c0aa95806b55402b16000000000000000000000000000000000000000000000f24394e64798ea3b9ced5c5a38e79644e39240f000000000000000000000000000000000000081c2e3f54697f94a9bacab59f8b77768a9fb4c9bbaa957f6a5443301c0800000000000000000000000000000000000000000b203448596e8399aec3d4c5b09a85705b49351a0a0000000000000000000008203448596f8499aec4d4c4af9a846f5a4935200a00000000000004121d24262f2f2f2f2e25221b101920222a3437393a39363329201d1409000007111c2325293336393a3938363228221f180c0200000000000000000000000b203448596c8196a5b7c6ccbcafa39b90867d8d9fae99846e59463a36322920190e03000000000000000000000000000d22374d62778ca3b5c9d9c4af9a846f5746331e0a00000000000c2135495b71869cb1c6c0b4b0b4c0cebbaa937e68533b2a1804000000000010253a4f657a8fa7b8cccab6a48d78634e38230e000000000b20354b60758aa0b5cad6c6b9b4b9c6b9a897816c5b493521110000000000000000000000000004182a3a4b6075889db2c2c7bab4bac7d7c2ac97826d57422d180000000002090b191a1a1a1a1a170d0b060000000000000000000000040a0c171b1b1b1b170c0a030000000000000000000000060c0e171a1a1a1a1a14120c02000000051a2f445a6f8499afc4d8c2ad98836d583a2a170400000000000000000000000000000000000000000011273c51667c91a6bbd1ccb8a78b76614c36210c000000000000000000000000000000000000001122374c61778a9fb4c9bcab927e7d92aabbcab49f8b78624d3626140100000000000000000000000000000000000000011426374d62778b9fb4caccb9a7927d67523d2c1a000000000000000000000005192b3b51667c91a6b7cbcab59f8c78634d3828150200000000000000090f111a1a1a1a180f0d0800050b0d181f22242524211e170b08010000000000080e10171f2124252422201d150c0a04000000000000000000000000000d22374c62778b9fb4c3ccbcaf9e95857b7173899eb09b85705b4629211e160b0600000000000000000000000000000417293a53697e93a8c1d2d3c3a9937e6954392917030000000000061a2c3d556a7f95aac2d1c8c5c8d1cab49f8b77614c37220c0000000000000b20354b6074889eb3c8d3c2a9947f69543b2a18050000000b20354b60758aa0b5cae4d6cdc9cdc4b39e8977614c3d2c1a0300000000000000000000000000000c1e324556687d92a4b5c9cdc9cdd7d7c2ac97826d57422d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c8196acc1d6c6b19c87715847331f0a000000000000000000000000000000000000000003162839556a8095aabfd5c8b39e88735746331e0a000000000000000000000000000000000000000a1f3347586e8398adc3c9ae98828298adc8c4ae99846f59483418080000000000000000000000000000000000000000081d3144556a8095aabbcec9b39e8975604b36210f0000000000000000000000000d20354b6074889db3c9cfbcab96806b5645321d0900000000000000000000040404040300000000000000040b0c0f100f0c0a030000000000000000000000040a0c0f100f0d0b09020000000000000000000000000000000014293e54697e93aabbcec1af9d958073655d72879cb19c87725c3626140a03000000000000000000000000000000000a1f3346586f849aafc4d9cab6a58d78634e38230e000000000000000f23384e63788da4b5c9dcdadcd9c8af9a846f5947341f0b000000000000081d3144556d8398adc8d9c5b09b85705948341f0b0000000b20354b60758aa0b5cadfe9e1decbb7a6947f6a5947341f0f000000000000000000000000000000031628384b6073869cb1c0d1dee1e9d7c2ac97826d57422d1800000000000000000000000000000000000000000000000000000000030a0c0e111213131312110f0d0b080100000000000000000000000000000000000000000000000013283d52687d92a7c3d4cab49f8b77614c37210d0000000000000000000000000000000000000000091e3246576f849aafc4d9c4ae99846f59392917030000000000000000000000000000000000000004182a3a50657b90a5b6c9b39e89889eb3c8b7a6917c66513b2b190000000000000000000000000000000000000000000b20354b6074889db2c8d1c1ac96816c5645321e09000000000000000000000000081d3144556b8095abbccfc9b39e8875604b36200f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192f44596e8399aec8c9b5a3957f6b60545b70859bb09e89735443301c0800000000000000000000000000000000000c21364c61768a9fb4c9dcc7b29c87725b4935210c000000000000000c2135495b71869cb1c6dbefe2cebbaa937e68533b2a18040000000000000114263752677d92aabbcecab59f8b77624c37220d0000000b20354b60758aa0b5cadff8e5d2c2b29d8775604b3a2a1801000000000000000000000000000000000a1c304354667c90a2b4c9daececd7c2ac97826d57422d18000000000000000000000000000000000000000000000002080b1015171e2124262728282827262422201d15140e0c0600000000000000000000000000000000000000000e23384e63788da5b7cacfbcab927c67523b2b1905000000000000000000000000000000000000000c21364b61768a9fb4c9d4c3aa947f6a553f2a150000000000000000000000000000000000000000000c20354a6073879cb2c8b9a79e9ea6b8c9b29d8874604b35200d000000000000000000000000000000000000000006192b3c51667c91a6b7cbc9b5a38e79634e38281603000000000000000000000000011527374d62788c9fb5caccb8a7927d67523d2c1a06000000000000000000000000000000000000050b0d111415161514120f0b0902000000000000000000000000000003090a0b0b0b0b0b0b0000000000000000000000081d32475d72879cb2c7c6b09b8573604b43596f8499ae9f8a75604b35200b000000000000000000000000000000000215273852677c92aabbced6c6ab96816c563d2c1a0600000000000000061a2c3d556a7f94aac2d2e5dfcab49f8b77614c37220c00000000000000000c21374c61778b9fb4cacfbcab937d68533929160300000b20354b60758aa0b5cadff7dec9b5a3927d685645321c0c0000000000000000000000000000000000011426364c5e70849aabbccfe3ecd7c2ac97826d57422d18000000000000000000000000000000000000000000070b151d20262b293336393b3c3d3e3d3c3c3a373531272923211a0f0d0700000000000000000000000000000000000c2135495b72879db2c7d9c9ae99846e594834200f00000000000000000000000000000000000008182e3f52677d92a9bacdcab7a58f7a644f3a240f000000000000000000000000000000000000000000071c3043546a7f94aabbc5b9b3b3b8c5bcab95806b5544311d0800000000000000000000000000000000000000000b2035495a6f8499afc4d4c6b09b85705b4a361a0a0000000000000000000000000000092035495a6f849aafc5d5c5b09a85705b4936210a000000000000000000000000000000050b0d18202227292b2c2b2a2724211e160e0c060000000000000000040b0c181e2020202020202013110b02000000000000000a1f34495f74899eb4c9bda8927d68544342586d8297adab8c77614c37220c00000601000000000000000000000000091d3145566e8398aec8d8cdb9a8907b65503b26100000000000000000000f23384e63788da4b5c9ded9c8af9a846f5947341f0a00000000000000000a1f33475870859bb0c5dac9ae99846f5746321e0a00000b20354b60758aa0b5cadfe7d0bfb19b8673604b3828160000000000000000000000000000000000000008182f404f647a8d9fb5c8d8ead7c2ac97826d57422d180000000000000000000000000000000000000208131c202731363b4039464b4e505152535252514f4d4b44373e39362c24221b1009020000000000000000000000000000061a2c3d566b8196abc1d1cab49f8b78624d3d2c190900000000000000000000000000000000001325364b5d70859aafc7d7c8b29d87725c4a36220d000000000000000000000000000000000000000000001325364c62778b9fb4c9ccc9c8cbcab49f8b78624d3726140100000000000000000000000000000000000000021527374d62788c9fb4cacdb9a8927d68533d2d1a00000000000000000000000000000006192c3c52677c91a7b8ccc8b4a28e79634e39281603000000000000000000000000060e1920222b34373c3e4041403f3c3936322823211a0f0801000000000c181f222d333535353535353528261e13060000000000000a20354a5f758a9fb4cab8a38e78634e3641566b8196aba38d78634e38230e0c161c160b08020000000000000000000b20364b6075899eb4c9d3c9b49e8975604b36200b0000000000000000000c2135495b71869cb1c8d9cebbaa937e68533a2a1804000000000000000004172a3a556a7f94aac3d4c9b49f8a76614b36210c00000b20354b60758aa0b5cad3d9c9b3a1907b655443301a0a00000000000000000000000000000000000000001222364a5c6e8398aabbced3d3c2ac97826d57422d1800000000000000000000000000000000000a161e25303537444b50555a576163666768686867666462605558534e493d3a362d201d150a02000000000000000000000000000f243a4f647a8fa3b4c8cebbaa96816c5b4937271503000000000000000000000000000002101c304354647a8fa2b4c8cebbaa96806b563e2e1b0700000000000000000000000000000000000000000000081f3447596e8399aec3d4d3d3d5c4af99846f5a483519090000000000000000000000000000000000000000081d3144556b8095abbccfc9b49e8976614b36210f000000000000000000000000000000000e20364b6075889eb3c8d1c0ac96816c5745321e0900000000000000000000000e19202b35383b484c515355565554524f4b453839362c201d150900000d1d2a343742494a4a4a4a4a4a4a3d3a3124130200000000000a1f344a5f74899fb4c9b7a18c77624c373f546a7f94a9a48f7a654f3a251f212b312c201d1509000000000000000013253650667b90a8b9bdbdc0ae99836e5645311d09000000000000000000061a2c3d556a7f94aabbc9c4b49f8b77614c37220c000000000000000000000f24394e64798ea5b7c7bdbaa9917c675137271501000b20354b60758aa0b5bdbdbdbcab99846f5d4c362614000000000000000000000000000000000000000000071b2d3e4d63788b9fb4c4bdbdbdac97826d57422d1800000000000000000000000000000008131c283236434a505560656a6f7376797b7c7d7d7d7c7b797775716d69635b564f4a3e3632281d15090000000000000000000000000d22364a5c70859bb0c1d2c8b49f8b79635544311e160a0000000000000000000000000412202e3f4a6072859bb0c0d1c8b49f8b78624d382310000000000000000000000000000000000000000000000005182a3b50667b90a5b7bdbdbdbdb8a6917c66513c2b190000000000000000000000000000000000000000000b20364b6074889db3c9bdbcab97826c5746321e0a00000000000000000000000000000000091d3245566b8196aabbc9bdb39e8975604b36210b00000000000000000000131e2b353c484d56596266696a6b6a6967646056554e493d35312719130d1d2b3b474c585e5f606060606060534e42311e0b0000000000081d32485d72879db2c7b8a38e79634e363e53687d93a8a6917b66513c2933374046413631271909000000000000071c3043546c8297a8a8a8a8a8a2927d685238271502000000000000000000000e23384d62788c9faba8a8a699846f5947341f0a000000000000000000000d21364a5c72879da9a8a8a8a898826d5544311d08000b20354b60758aa0a8a8a8a8a89f8c79634e3f2f180800000000000000000000000000000000000000000000102035495a6c8196a6a8a8a8a8a897826d57422d1800000000000000000000000000000e18253038454b5460666d757b8084888b8e909192939291918f8c8a86837e79736b645c534b4538312719110300000000000000000000071b2e3e52677c91a3b5c9cebaa99b8573604b4432281a11080200000000000000070c181f303e4b5d697e93a2b4c8cebbaa98836e5a4835200b0000000000000000000000000000000000000000000000000d20354b6074879da8a8a8a8a8a89d8874604b36200e00000000000000000000000000000000000000000114263752677c91a6a8a8a8a89f8d7a644e3929160300000000000000000000000000000000021528384e63798c9faba8a8a8a7927d6853382815020000000000000008131c313c484d5a626b71777c7e8081807f7c7975706a635b524b443730201d2b3b4859616d737575757575757568604e3a2611000000000004192f44596e8399aec8bda8937e6854433c51667c91a6a7927d68523d3a474c555b564b443727150200000000000b20354a607588939393939393908474604b36200b00000000000000000000000c2035495a697f8c929393918878634d3a2a180400000000000000000000071a2d3e51667c8a9293939393938975604b35200b000b20354b60738a9393939393928f806b5b4a362111000000000000000000000000000000000000000000000006192c3c4c61768891939393939393826d57422d1800000000000000000000000005131e2b36434a566069737b83899095999ea7a3a5a6a7a8a7a7a6a4a99f9c98938e88817a716860564b44372f211100000000000000000000001020354b6073859bb1bdcec7b4a397816c624b45382f201d15110f0e0d0e10131a212a34414d5c657b8c9fb4c0d1c3b49f8c79634e3c2b1906000000000000000000000000000000000000000000000000081c3043546a7f9393939393939393806b5544311d080000000000000000000000000000000000000000081d3144556f859393939393928e806b5c4a361b0b0000000000000000000000000000000000000a2135495b697f8c92939393939386705645321d0900000000000008182530414e5a626d7880868c919395969594918e8a858079716760554d41352c3b4859627782888a8a8a8a8a8a8d7d68533d281300000000000014293e54697e93aabbc6b19c8673604b454f657a8fa4a9947f6954454b58616b716b605544311d1000000000000c21364b61757e7e7e7e7e7e7d7b73605645321d09000000000000000000000006192c3c4f6169797d7e7d7c76635a49351c0c0000000000000000000000000f24384c5e66777c7e7e7e7e7e7e76614c37210c000b20354a60727e7e7e7e7e7e7d7a6b62513d2d1a030000000000000000000000000000000000000000000000000e1f33475861767c7d7e7e7e7e7e7b65503a25100000000000000000000000071523303c49546068757e8790989ea7aaafb3b3b0aeacabababacadafb1b4b1ada8a69d968f867d756860554b3f2f1c0800000000000000000000081c304354657b909fb1c3d1c1b19f95806d60564b3f363127262423232325282d363b474c5f677a899eaabbcec9b7a597816c5b4a361e0e00000000000000000000000000000000000000000000000000011426364c61777e7e7e7e7e7e7e7e77624d3727150200000000000000000000000000000000000000000b20354b60737e7e7e7e7e7e7d796b62503e2d1b00000000000000000000000000000000000000061a2c3d4f6169797d7e7e7e7e7e7e74604b36200b000000000000132536434a606878828b969ca4a6a8aaabaaa9a7a99f9b958e867d74675f4d493c4859627786979e9fab9f9f9d937e69604e3a26110000000000000d22374c62778b9fb4c7b6a496806c60564e63788ea3ab95806b5657606a7680868173604b3e2d1909000000000a1e334657616868686868686865605445382815020000000000000000000000000e1e32424f5b63686868676157493c2c1900000000000000000000000000091c2f404c596267686868686868615847331f0a00071c3043546068686868686868655d5144341f0f000000000000000000000000000000000000000000000000000417293a47586167686868686868655d4b37230e0000000000000000000009172533414d5a62727d87939ca5adb3b3ada7a79e9b999796969697989a9c9fa9a7acb2b2aba39b92877e74655d4b38230e00000000000000000000011426364b5d6d8197a4b6c5cebdaf9e958275655d514b44373c393838393a3d3d4a4e59616d7d8a9ea7b9c8cfbcab9d8776614c3d2d1a000000000000000000000000000000000000000000000000000000081f344759616868686868686868625948341909000000000000000000000000000000000000000000081d3144556068686868686868645c504433201000000000000000000000000000000000000000000f1f32434f5b6368686868686868605645321d0900000000000e1c304354606d7d8a989faab1b6c2bebfc0bfbec7bab4b0aaa39b92877c70625a4d596277869ca4b3b4bcaf9d947f69604e42311e0b0000000000000b203448596d8297a9bac2b09e968175696261778cabac97826d636b757f89959b95806b5c4a3727150200000003172939464b53535353535353504b4336281a0a00000000000000000000000000001424323d494e525353514c46392c1e0e000000000000000000000000000012222f3b484d525353535353534c473a2917040000132536434a53535353535353504b3f3426160100000000000000000000000000000000000000000000000000000c1c2a3a474c51535353535353504b3f2e1c080000000000000000000817273544505f677884929da5b2b5aea69e97928d8986838281808181838486898d92979da5abb3b1a69d93867b65503b2510000000000000000000000008182e3f4b6175869ca7b8c6ccbcafa098867b6f66605554514e4d4d4e5053575b636c7782919ea8b9c5cdbdb49f8d7b655846331f0f00000000000000000000000000000000000000000000000000000004182a3a474c53535353535353534d483b2b180000000000000000000000000000000000000000000001142637444b535353535353534e4a3e332615020000000000000000000000000000000000000000011425323d494e525353535353534b4538281502000000000e1e32434a607281929ea8b4bbc8c7bab4afacabacadb0b4bac1b5b0a59d918478675f6277869ca4b6c3bcaf9e947f6a614f423124130200000000000005182b3b4d62778a9fb4bdbcb09f97887f7772738b9fae998372788088949ea7b09f8c7a645544311d08000000000b1b2933363e3e3e3e3e3e3e3b353026180a00000000000000000000000000000006141f2c35383d3e3e3c3633291b0e00000000000000000000000000000004121d2b34373d3e3e3e3e3e3e3733291c0c00000008182530353e3e3e3e3e3e3d3a372e211608000000000000000000000000000000000000000000000000000000000c1c2a33373c3e3e3e3e3e3e3a372e2111000000000000000000061626354552626a7d8a9aa2b2b3ab9f999088827c7874716e6c6c6b6c6c6d6f7175787c81878e969da6b1b2a499846f59442f1a040000000000000000000000111e3246576379899ea8b9c5ccbeb2a49c90847c756e69666463626365686c7179818a98a0b4b9c6cebcb09e937e695d4b3a291701000000000000000000000000000000000000000000000000000000000c1c2a34373e3e3e3e3e3e3e3e37342b1d0d000000000000000000000000000000000000000000000009192631353e3e3e3e3e3e3d39362d2015070000000000000000000000000000000000000000000006141f2c36393d3e3e3e3e3e3e3632281a0a0000000006192c3c4f616c81979fb4b9c6c3b6b2a99f9a979696989b9fa9adb4bab6b2a29a8a7d6c77869ca4b6c3bdb09e95806a614f433224140600000000000000000d20344859697e939fb1bdbdb1a69d948b87838c9fb39e89878d959ea7b3b9bbaa9c8674604b36200b00000000000b171e212929292929292826201c14080000000000000000000000000000000000010f1a212328292827211e170b0000000000000000000000000000000000000d18202227292929292929211f170c000000000008131c202929292929292825231c11030000000000000000000000000000000000000000000000000000000000000c171f212728292929292925231c11030000000000000000021424344452636c80929ea8b4b3a1998c847b746d67625a5b595756565657585a546062676c72798088929ca4a7917c67513c271200000000000000000000000003162839495b657b8a9ea7b6c3cec2b6b1a29a9189837e7b797878787a7d81878e969fa8b2becdc8bbb49e95806c614f3f2e1c0c0000000000000000000000000000000000000000000000000000000000000c181f2229292929292929292220180d0000000000000000000000000000000000000000000000000009141d202829292929292824221b1002000000000000000000000000000000000000000000000000010f1a212328292929292928201d150a00000000000c2035495a697f949fb1bdccbeb1a59d938a8582808183868a90979fa9b4bbb4a89e9281869ca4b6c2bdb09e95806b6150433224140600000000000000000005182b3b4f606c81979fb4bbc4b7b3ab9f9c989faab8a79e9da5abb3b8c5b9b3a1998677614c37220c000000000000030a0c13131313131313100b08010000000000000000000000000000000000000000060c0e131313120c0a030000000000000000000000000000000000000000050b0d121313131313130c0a040000000000000000070b13131313131313100e08000000000000000000000000000000000000000000000000000000000000000000040a0c12131313131313100e08000000000000000000001020324251626c81959eb4b5a79e9184796f666054524d493c4442414141424336434b4d52575c646b747d8692988874604b36200b000000000000000000000000000b1b2c3d4b5d657b899ca4b2becacac0b4afa79e9994918e8d8d8e8f92979ca4abb4bac6cdc3b6aa9f93806c6251423221110000000000000000000000000000000000000000000000000000000000000000040a0c13131313131313130d0b0500000000000000000000000000000000000000000000000000000001080b131313131313130f0d0700000000000000000000000000000000000000000000000000000000060c0e131313131313130b09020000000000071b2e3e4d63788b9fb4bdcebdb19f97877d75706d6b6c6d70757b828a979faab6b9b49f969ca4b5c2bdb19f96806c6251433325150600000000000000000000000d1d32424b607381939faab2bfc9bcb5b1aeb4bbc5b8b3b2b6c3c8bbb4a89e938375615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2e3e4f606b80969fafb3a39b897d6f645c514b433638352c2e2d2c2b2c2c2e263035383d3d4a4e556067737d837c655645311d0900000000000000000000000000000f1f2e3f4b5d65798698a0b1b6c2c9c8c5b8b3aea9a6a3a2a2a3a5a8acb1b6c2c9cdc7bab4a59d8b7e6b625144342414030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6f849aa9bacdc2b19f978275686057575657585660656d78818b9ca4b2bdb0acb1b5c2beb19f97816c6251443325150700000000000000000000000000141d314455606d7e8b99a1adb4bac7c3c3c8cbd5ccc8c3c4b7b3aa9f98897e726157473a2a1804000000000000000000000000060b0b0b0b0a06000000000000000000000000000000000000000000000000070b0f13151715130d0b06000000000000000000000000000000000000000000000000000000000000000000000002080b0e11131415161514120f0c0a03000000000000000000000000000000000000000000000000000000000000050b0d1315140d0c0600000000000000000000000000031628384a5c697e939eb0b3a1998577675f4e4a3e35302623201919171716171718141c2023272d3637444b5560676e655e4c3827150200000000000000000000000000000111212e3f4b5b637582909ca4b1b6c2c8cbc8c3bebbb9b8b7b8babdc1c6cac9c6b9b4a99f95877a696051443426160600000000000000000000000000000000070d0f1415120c0a04000000000000000000070d0f1415120c0a0400000000000000000000070d0f1415120c0a040000000000000000000000000000000000000000000000000000000000000002090b0e1113151616161514120f0c0a0400000000000000000000000000000000000000000000000f243a4f647a8fa2b3c7c9b5a497816d60574b4539414138454b505a626c798698a0b2c4c1c6c9bfb2a0978172604a4434261607000000000000000000000000000001152737444b606879838f989fa9aaadb0b3b7c4beb2ada7a69d958b827768605446392a1c0c0000000000000000000002080b1b20202020201b0d0b060000000000000000000000000000000000000308131c2024292b2c2a282320190e07000000000000000000000000000000000000000000000000000000000000070d0f151d202326292a2b2b2a292724211e17110b0802000000000000000000000000000000000000000000000000000d192022292b292320190e000000000000000000000000091e324556647a8b9fb4b3a199837462594d41362d2528292825211e160b0800010a161e21262a2b2a273137444b5259504c402f1a0a000000000000000000000000000000000311212e3d4a57616d7b86929ca4acb3b8c5c1c4c6c7c8c9c8c7c5c2c7bab4afa89e968a8074645c4f423326160800000000000000000000000000000003101b22242a2b28211f170b00000000000003101b22242a2b28211f170b0000000000000003101b22242a2b28211f170b000000000000000000000000000000000000000000000000000001080b10151d202326292a2b2c2b2b292725211f17130c0a0400000000000000000000000000000000000003162838576c8196acc0d0c4b19c8673604b453932282b2c2832363c484d5b63758398aec3d6dcc6b2a1988272605443302616080000000000000000000000000000000009192731424e5b636e7a838a9095989a9da6b7b2a098928d8880776d62594a4336281b0c0000000000000000000009151d20313535353535302320190e000000000000000000000000000000000b171e253035393e4041403d38352b201c1308000000000000000000000000000000000000000000000000000309101b2224273136383b3e3f40403f3e3c3936332926201d15090500000000000000000000000000000000000000000007151d2b34373e403e38352c1c130800000000000000000006192c3c4b6075879da9b6a49a83746056483b3032363b3d3e3d3a363229231c11141d2832363b3f403f3d393631353d433b382f211100000000000000000000000000000000000002101f2d39464b5d65747d868f979ea6a8abaeb1b2b3b3b2b1afada9a99f9a928980776a60564a3e322416080000000000000000000000000000000b161e2d36393f403d3633291b12040000000b161e2d36393f403d3633291b1204000000000b161e2d36393f403d3633291b1204000000000000000000000000000000000000000000000609141d2025273136393b3e3f404141403f3c3a36332928221f180c0801000000000000000000000000000000091e32455672879cb1c7cbb8a6907b66554432281e161617151d202b3846576175859bb0c5dad8c3ae9983746054433625130800000000000000000000000000000000000009151d313d494e5c646d757b7f8385889db3ad98827d78736b62594d483b3025180b000000000000000000000919273136464a4a4a4a4a4538352b1e0e0000000000000000000000000004121b293336434a4f53555755534d493c353025180e00000000000000000000000000000000000000000000020b161e212d363937444b4e51535455555454514f4c46393b36312720190e05000000000000000000000000000000000000061525323b484d5355534d493c3025180800000000000000000c2035495a6b8095a5b6a99c8675615645383338454b50525453504b4639372e1f263138454b50545555524e4a3d37332a26231c110300000000000000000000000000000000000000010f1b29333f4c556067737a81888e9396999c9d9e9e9d9c9a97948f8a847d766b62594b45382e2014060000000000000000000000000000000b1b28323e4a4f5455524c463a30221202000b1b28323e4a4f5455524c463a3022120200000b1b28323e4a4f5455524c463a3022120200000000000000000000000000000000000000070e1a212631353b38454b4e5153555556565554524f4c463a3d37342a201d140902000000000000000000000000000b21364b60768a9fb4cac8b39d8874604b3727160a0300000a1a283845566175849aa2b4c8dadac4af9a856f5f4d38271808000000000000000000000000000000000000000001141f2c353e4a4f5660656a6e707d92a7a6907b67625a554d483b342b1c13080000000000000000000002152737444b5b606060605f5b4d483c2b1c0c00000000000000000000000614222f39464b546064686a6c6a68625a524a43362b1e1002000000000000000000000000000000000000000a151d2832363e4a4e555560636668696a6b6a696764615757514b4437352b20180d0100000000000000000000000000000000142432434f5962686a69625a4a433625130000000000000005192b3b4d63788b9fb4b49f8a79635746383a474c566065686968656157504b3f3337444b566066696b6a68635b554c473a301d150a000000000000000000000000000000000000000000000b171e2f37444b5460656c73787d818486888989888785827f7a756f6861574d483b32281a100200000000000000000000000000000003162839464b5c64696a6761584c4030211003162839464b5c64696a6761584c403021100003162839464b5c64696a6761584c403021100000000000000000000000000000000000040f1a212c3537444b505656606366686a6b6b6b6a696764615858524c473a3531261d15090000000000000000000000000e23384d63788dabbccfc2ad98836d54433019090000000a1a283845566074849aa2b4c0c8c5c7c8b4a2927d675645311d08000000000000000000000000000000000000000000010f1a212e3638454b505558667b90a6a7927d6852493c37342b20180d000000000000000000000000081d3144556070757575757570625a483a2a180800000000000000000003142431404c57616a73797e80817f7d7871676054493c2e2010000000000000000000000000000000000001111a273139464b545c646b7075787b7e7f80807f7e7c7976716c6660554d483c342b1c140800000000000000000000000000000a1a31424f616a787e807e786b605443301c0c0000000000000b203448596d8297a9b6a4947f6a5b4a393e4a58616c757b7d7e7d7a766e655d4c464455606a757b7f807f7d79736a61584d4132281a0a00000000000000000000000000000000000000000000031119273136434a4f575b63686c6f717273747372706d6a656056524c4639342b1e160a0000000000000000000000000000000000091e324657616e797f807d76665e4c3f2e1b091e324657616e797f807d76665e4c3f2e1b08091e324657616e797f807d76665e4c3f2e1b080000000000000000000000000000000c171f2d363d494e5560656b7075787b7e7f808180807e7c7a76726d686159524b44373127191203000000000000000000000f24394e64798ea3c9d9c0ab96806b563626140000000919273845566074849aa2b4c0c0b4b0b2b7c0b29d8774604b362513000000000000000000000000000000000000000000000006101b222832363b404f647a8fa4a9947f69543f2c2220180d05000000000000000000000000000b20364b6075858a8a8a8a8a8578625947362614010000000000000000112231424e5e667580888e93959695928d867d72625a4b3e2e1e0e00000000000000000000000000000009141d2e38454b576169717980858a8d90939495959493918e8b86817b746c625a4d483b3026180c000000000000000000000000021527384e606a7f8b9395938b8072604a3a2a170400000000001325364d62788b9fb4b19c8674604b3d3c4a5c64768189909293928f8a837b6e61585460737f8990949594928e888077675f4b4538281a0a000000000000000000000000000000000000000000000009151d2530353a3d494e5356595c5d5e5e5d5c5a5854504b453836332920180d020000000000000000000000000000000000071b2d3e4b6175838e949592897c665d4b37221b2d3e4b6175838e949592897c665d4b37220c1b2d3e4b6175838e949592897c665d4b37220c0000000000000000000000000003111c2a333d4a4e5b636c747b81858a8e9093949596969594918f8b87827d776f6760554b44372f1e170b0000000000000000000e23384d63788da2c3d4bfaa947f6a553f2a15000009192737455660748399a2b3c0c1b4a29a9da5b7b7a5937e685443301c07000000000000000000000000000000000000000000000000070a161e2126384d63788da2ab95806b56402b160b05000000000000000000000000000000081d3144556278899eabaa9f9a8777615443301c11000000000000000c1c2f404e60687c88959da6a8aaacaaa8a49c928578645c4b3c2b1808000000000000000000000000000a1926313f4b56606a757e868e959a9fa9a6a8a9aaaaa9a9a6ab9f9c97908881786d62594b43362a1d0f0100000000000000000000091d314556687e939fa9aaaa9f947f6a5847331f0a00000000071c3043546b8095aab7a5927d67564535495a647a88979ea8a7a9a8a99f998f837662607282949ea7a9aaaaa7a69d95887d6e6056453827180800000000000000000000000000000000000000000000000108131c20252c35393e414447484949484745423f3a363228211e170b05000000000000000000000000000000000000000d22364a5c6e8298a0a9aaa79e8c7b654f3a2922364a5c6e8298a0a9aaa79e8c7b654f3a291722364a5c6e8298a0a9aaa79e8c7b654f3a29170400000000000000000000000015212f3a474c5b636f78818890969b9fa9a6a8aaaaababaaa9a7a4a59d98928b847c746960554c4033291b0b00000000000000000c21364b61768ba5b7cac0ab96816b563828160309192737445560748399a1b3c0c1b4a39a85879db2c3b19c8673604a35200b000000000000000000000000000000000000000000000000000003090c21364c61768ba2aa97826d57422d18020000000000000000000000000000000002152737485a667c8d9fb5b4a69a8472604b3f2e1d0d000000000004172a3a4c5e687e8c9ea6b3b4aea9a7a9aeb5b1a39b897b645a483626140100000000000000000000000b1b2837444b5d65747f89939ca4aaafb4bac7bdbebfc0bfbec9bcb5b1aca79e968b8277696054473b2c1f10020000000000000000000b20364b6074899eb3bac7bbb49f8a76614c37210c000000000b20354a6073879db2b29d8774604b383e4d6278899ea6b4b9b4ada9aaadaea0988678687e93a1b3b3afa7a4a6acb2a79e9182746056453625130000000000000000000000000000000000000000000000000000070b101a2123282c2f313334343332302d2a25211e160c0a030000000000000000000000000000000000000000000f24394f647a8ea0b2bfc5b8aa9b857058463324394f647a8ea0b2bfc5b8aa9b85705846331f24394f647a8ea0b2bfc5b8aa9b85705846331f0a0000000000000000000008131c323f4c58616d79838c969ea6abb0b4bac7bdbfc0c0c0bfbebcc3b7b2adaa9f9991877e74665e4c4639291703000000000000000a1e33465772889db2c7c4af99846f5645321e0a192637445560738399a1b3bfc2b5a39b85767e93a6b8b6a4907b6550372715010000000000000000000000000000000000000000000000000000000a1e3346576f84939595836e59442f1904000000000000000000000000000000000009192b3c4c5e6b8096a2b4b3a1947f6a5d4b3b2a1808000000000a1f334758667c8d9faab7aa9f98939294999fabb5a79e8978625443301c08000000000000000000000b1b29394555606b7b86949ea7b1b6c2c5c9cac7c4c2c1c1c1c3c6c9cac6c5b8b3aa9f978a7f726159493d2d20100000000000000000000f253a4f647a8fa7b8ccd8cdbaa9917c67513c2712000000000f253a4f647a8fa5b7aa957f6a5544364a5c6f849aa7b8b8a99f989494989fa8a49c8777879cb2b2a29a928f91979fa9b3a0988374605443301c0d00000000000000000000000000000000000000000000000000000000060c0e13171a1c1d1e1f1e1d1b1815100b0903000000000000000000000000000000000000000000000000152a3f556a7f94aabecfd6c8b4a28b76614c362a3f556a7f94aabecfd6c8b4a28b76614c36212a3f556a7f94aabecfd6c8b4a28b76614c36210c00000000000000000008182530434f5d6576828c999fabb3b8c5c5c7c2bdbab8b7b6b7b8babec2c7c7c8bbb4afa59d93877c6d615746331e0a0000000000000003172939586d8297adc2c9b49e8975604b3827182637445560738299a1b3bfc2b5a49b85766175889eb3c2ad97826d5544311d08000000000000000000000000000000000000000000000000000000031729394b60757e80807d68523d2813000000000000000000000000000000000000000e1e2f404b6073849aa7b8b49f8c7b655947362614010000031628394c6176889eabb7a69d8c837e7d7e848d9ea6b8a79b8573604b3625130000000000000000000a1a293a46576073808c9ca4b3b8c5cacac4c3b6b2afadacabacaeb1b4bbc8c8ccc8bbb4a89e948477635b4a3e2d1e0e000000000000000011263b50667b90a5c1d2e4d4c3a8927d68533d281300000002152737556b8095aab6a48d78634e37394f64798ea2b3b8a79e8b837f7f838a98a0a59c879ca5b2a199847c7a7c818a9ba3b2a1998372604a3c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162b41566b8096abc7d7e1cdbaa98d78624d382b41566b8096abc7d7e1cdbaa98d78624d38232b41566b8096abc7d7e1cdbaa98d78624d38230d000000000000000000132536434a616a7b88979fabb5bcc9c9c3b6b2aca8a5a3a2a1a2a3a5a8acb2b6c3c8cac3b7b2a49c908276614c36210c000000000000000011263b51667b90a4b6c9b9a8927d675645312636445560738298a1b2bfc3b6a49c867661586c8196acc4b39e8974604b35200b000000000000000000000000000000000000000000000000000000000b1e32455760686a6a685f4e3a25100000000000000000000000000000000000000000121d3144556278899eabbbaa9d8877625443301c110000091e3246576b8095a7b8aa9d87796e6967696e7a889eabb5a3927d675443301c0700000000000000021527384658617583959fabb6c2ccc8bbb4aea7a59d9a97969697999c9faaacb3b8c5ccc6b9b4a29a8779645c4a3c2c1b0b000000000000000e23394e63798ea3b5c6d1c7b6a5907b65503b2510000000081d31445570859aafb19c87725b493541566c8196abc0b39e89796d6a6a6e7682969fa59ca5b6ae99836f6764676c78859ba3b3a1937e685a4834200d0000000000000000000000000000000000000000000000000913191c2020202020202012100a010000000000000000000000000000000000000000000000000000000000000013293e53687e93a9bacacec3b49f8a75604b36293e53687e93a9bacacec3b49f8a75604b3620293e53687e93a9bacacec3b49f8a74604b36200b0000000000000002101c304354606c7f8d9da6b4bcc9c6b9b4aba59c9793908d8c8c8d8e8f93979ca5abb3b8c5cac3b6b2a08f7a65503a251000000000000000000b20354a6073869cb1bfc6b29c8774604b4236435460738298a0b2bfc3b6a49c867761584f647a8fa6b7b9a78f7a654f3a25100000000000000000000000000000000000000000000000000000000003162839454b535555524e41311e0b0000000000000000000000000000000000000000011527374859667c8d9fb5b7a69a8472604b3f2f1d0d000c21364b6176899eb3b49f8c7a645b5452545c657b8c9fb4b29c8773604a35200b000000000000000d1d31455661768499a1b4bcc9cbbeb2aa9f99928c87848281818283868a90979ea7b4b9c6ccc0b3a69d897a645a49392917030000000000000c2135495b71869ba8b4c0b5a99d8773604b35200b0000000b20364b6075899fb4ac97826d573d2c395b70869bb0baa8927d675b545558616d8196a3b2b6c3a48f7a65524f51596275859ba7b39e8978624d3b2a1805000000000000000000000000000000000000000000000d1b262e313535353535353528251e13050000000000000000000000000000000000000000000000000000000000000d22374c62778a9fb2b7bbb4a597826d56453222374c62778a9fb2b7bbb4a597826d5645321d22374c62778a9fb2b7bbb4a597826d5645321d0900000000000000102032434a607281949fabb7c4c8bbb4a89e968e87827d7b78777677787a7e82878e969ea7aebbcccabea58f7a65503a25100000000000000000071c304354677c91a1b2c3b6a596806b604f435460728298a0b2bec3b6a59c86776259474b5c73889db3c5aa957f6a55402a1500000000000000000000000000000000000000000000000000000000000a1b2832363e40403d3a3123130100000000000000000000000000000000000000000009192b3b4c5e6b8095a2b4b4a295806a5d4c3b2b190911263b51667b90a7b9ad98836e5c4a3d3d3e4b5d6e8399aeb6a58e79644f39240f0000000000000d1d30414b6074849aa3b3bfcfc4b7b2a0988b847c77726f6d6c6c6c6e71767b8189949ea8b4c0cdc4b7a79e8978635746331e12000000000000061a2c3d4f647a8a9aa2a4a39b8b7b655544311d080000000e23384e63788da9baa8927d68533d32455774899fb4b49f8975604b3d3a474c6073859bb0c0b6a18c77614c3a3b48576278899eb3a898826d5948341f0b000000000000000000000000000000000000000000091b2b3842464a4a4a4a4a4a4a3d393023130100000000000000000000000000000000000000000000000000000000000b20344859697e919da5aa9f988777614c382820344859697e919da5aa9f988777614c38281520344859697e919da5aa9f988777614c382815020000000000000b1b2e3f4f616c81969fb5bcc9c3b7aa9f96898179726d6865636261626365696d72798089949daec2cfbaa58f7a65503a25100000000000000000001325364d5f6e8399a5b6c3b09e937e69615460728197a0b2bec4b7a59d87786259483a3e596e8398aec3ae99846e593727150100000000000000000000000000000000000000000000000000000000000a161e21292b2b28251e130500000000000000000000000000000000000000000000000d1d2f404b6073849aa6b8b49f8d7b655948372614162c41566b8196abc5a6917c66513e2d282e3f51667c91a6c3aa957f6a55402a15000000000005182b3b4d5f6d8297a2b4c1d0c1b5a69d8f82786f6762595a58575657595660656c767f8a9aa2b0bdcdc5b8a79c8676614c40301a0a0000000000000f22364a5c647a858c8f8d857b655d4b3727150100000011263b50667b90a5c7a48f7a654f3a364b60768ba9bab09b86705645322a334455647a8fa2b4b6a18c76614c372b39485a6a7f94a7b49f8a77624c37220f00000000000000000000000000000000000000000013263849565b60606060606060524d41301e0a000000000000000000000000000000000000000000000000000000000005182b3b4e60697d878d8e8a8377625947341a182b3b4e60697d878d8e8a8377625947341a0a182b3b4e60697d878d8e8a8377625947341a0a000000000000031628394b5d697f949fb0bdcfc1b5a59d8c81766c635b5753504e4d4c4d4e5053575c646b757f94a9bfcfbaa58f7a65503a2510000000000000000000081830414c6177879da7b7bcb49f8d7f6e627281979fb1bec4b7a69d87786259483b2a3e53697e93a8beb29d88725544311d0800000000000000000000000000000000000000000000000000000000000003090b13151513100b0100000000000000000000000000000000000000000000000000111d3144556277889dabbcab9e8877625544311d1a30455a6f859aafbcab8c77624d37221222374d62778caabbae99846f59442f1a00000000000b20344859677d92a0b1c0d1c1b5a39b887b6d635a524c473b4241414238454b505761697784969fb0bdcdc5b6a498826d5e4d382815020000000000071b2d3e4a5c647077797771645d4b3f2f19090000000014293e53697e93a8bcab8c77624d37374c61778ca1c5af9a856f5a38281726374b5c70859ab0b8a38d78634e38232b3c4b6175889eb3a9957f6a553d2d1a070000000000000000000000000000000000000005192e4256677175757575757575675f4d3925100000000000000000000000000000000000000000000000000000000000000d1d31424e5f67727879766e6259483b2a180d1d31424e5f67727879766e6259483b2a18000d1d31424e5f67727879766e6259483b2a1800000000000000091e324657647a8c9fb4bdcdc2b5a39b877a6c61584e4a3d3e3b38373738393a3e3e4a4e5763788da2b8cdbaa58f7a65503a251000000000000000000000121f3447596379899da5b4bcab9f94837781979fb1bec5b8a69d8878635a483b2b263b50657b90a5c5b49f8a75604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374859657b8d9fb4b8a69a8473604b402f1d31475c71869cb1b49f8a75604a35200b20344859758a9fb4b09b86705b46311b00000000071a2d3d4d6277899eb3becec5b5a39b8577655d4d493c37342a2d2c2c2d28323639464b59627281969fb0c0d0c3b2a0917c665645321d0900000000000010202d3d4a4e596264625a4f4b3f2f21110000000000152b40556a8095aab59f8a75604a35364b60758ba7b9b09b86715b3c2b19192e3e53697e93a8c3a6917c66513c271e3246576c8197acb29d87725b4a36210c00000000000000000000000000000000000000061c31465b71858a8a8a8a8a8a8a7d67523d281200000000000000000000000000000000000000000000000000000000000000142431414d525b636461584c483b2a1d0c00142431414d525b636461584c483b2a1d0c0000142431414d525b636461584c483b2a1d0c00000000000006192b3c4b6175879daabbcec5b6a49b8577645c4c473a362d2826232221222325292d36394d63788da2b8cdbaa58f7a65503a25100000000000000000000004182a3a495b6379879aa2b4bab4a1998a979fb1bdc5b8a79d8879635a493c2b1d23384d62788da7b0b0ab8d77624d38220d000000000000000000000000000000000000000000000000060b0d1114151615130f0b0903000000000000000000000000000000000000000000000000000000000009192a3b4b5d6a7f95a2b3b4a295806b5e4c3b2b33485d73889db2b39e89745443301c07182b3b5e73899eb3b29d87725d48321d000000000d21364a5c6d8297a7b9cccbb8a69b857661594b3f352c221f1818171717161e2129323b4854606c8196a2b3c6cfbeb29d8774604b37271502000000000002101f2d363b484c4f4d483c372e2011030000000000162b41566b8096abb49e897454433031455674899eb3b29d88735a4834201022374d62778ca4b6ab95806b56392816283950657b90aab7a58e79634e39230e00000000000000000000000000000000000000061c31465b71869b9f9f9f9f9f927d67523d28120000000000000000000000000000000000000000000000000000000000000006142330393d494e4f4c473a342a1d0d000006142330393d494e4f4c473a342a1d0d00000006142330393d494e4f4c473a342a1d0d000000000000000b2035495a6b8095a5b7c8ccb9a79c867661594b3e3329211a13100e0d0c0d0e10141a23384d63788da2b8cdbaa58f7a65503a251000000000000000000000000c1c2c3d495b637784939fa8b4b2a99fa9b1bdc6b8a79e8979635b493c2c1e0e20354b6074899a9b9b9b8e79634e39240e000000000000000000000000000000000000000000070c0e19202326292a2b2a2825211e160c09030000000000000000000000000000000000000000000000000000000d1d2f3f4b6072849aa6b7b59f8d7c6659483727485d72889db2b49e89745544311d081c30435474899eb3b29c87725d47321d00000005182b3b4e64798c9fb5c5d0c0b39e88786258473b2e20190e0b050002010003090b161e2b36434b6073849aa8b9cccab6a5947f695544311d08000000000000010f1a212b34373a38342b221b1002000000000000172c42576c8197acb39e88735e492527385b70859ab0b7a68d77624d3822112034485972879cb2b09a85705745321e21364b60758a9fb4a8937e68533e281300000000000000000000000000000000000000061c31465b71869bb0b5b5b5a7927d67523d2812000000000000000000000000000000000000000000000000000000000000000005131e252c3538393733291f180d0000000005131e252c3538393733291f180d000000000005131e252c3538393733291f180d0000000000000004172a3a4d62788b9fb4c3d1c0b39e89786258473a2e1f170c070000000000000000000e23384d63788da2b8cdbaa58f7a65503a25100000000000000000000000000e1f2c3d495962737e8a969fa9bab4bac7c6b9a89e897a645b4a3d2c1e0e081c304354667c858686868579634e39230e00000000000000000000000000000000000000070f1a21242b35383c3e40403f3d3a363228211e160b020000000000000000000000000000000000000000000000000000111c3043546177889daabbab9e897762554431465b71869bb0b9a88a75604b35200b20354a60758a9fb5b09b85705b46301b0000000b203448596d8298abbccfc7b3a2917c675a483a2a1d110600000000000000000000030d18263144556278899eb3c5d4c3b29d8874604b36200c0000000000000004121c232627272727221f180c00000000000000172c42576c8197acb39d88735e48262c41566b8196abc4a8927d68533f2e1a192b3b576c8197acb49f8a76604b36211e32455671869cb1ac97816c57422d1700000000000000000000000000000000000000061c31465b71869bb0c6cabca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000010a0e1a212324211f170c05000000000000010a0e1a212324211f170c0500000000000000010a0e1a212324211f170c0500000000000000000a1f3347586c8196a9bacec8b4a2927d675a483a2a1c1004000000000000030a0c12141423384d63788da2b8cdbaa58f7a65503a2510000000000000000000000000000f1f2c3b4854606977818b9fb4c9cdc7b9a89e8a7a645c4a3d2d1f0f00011426364c5e667070707070635b4a36210c0000000000000000000000000000000000010f1a212d36393c494d5154555554534f4b45393632281d150a00000000000000000000000000000000000000000000000000011426364759657b8c9fb4b8a79a8473604b40445a6f8499afc6a38d78634e38231323384e63788dabbcae99846e59442f190000000d22374d62778b9fb4c9d2c1af9a846f5f4d3c2b1b0c0000000000000000000000000000081426374859697f94a6b8cbcbb7a6927c67523a2a170400000000000012222f383b3c3c3c3c37332a1c0c000000000000162b40566b8095abb49e8974544330253a50657a8fa6b7b09a85705d4b382815273c52677c91abbbaa907b65503b26162838596e8398aeaf99846f5a442f1a00000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000060c0e0f0c0a040000000000000000000000060c0e0f0c0a04000000000000000000000000060c0e0f0c0a04000000000000000000000c21374c61778a9fb4c7d2c2b09b85705f4d3c2b1c0c000000000000000b171e2128292929384d63788da2b8cdbaa58f7a65503a251000000000000000000000000000010f1d2a36434b596276889db2c8c8baa99e8a7b655c4a3e2d1f0f010000081830404c515a5b5b5b5b4e4a3d2d1a070000000000000000000000000000000008141c2d363d4a4e575a6266696a6b6a68646057534b463932281a0f0100000000000000000000000000000000000000000000000008182a3a4b5d6a7f94a1b3b4a295806b5e4c3c556a8095aac4a7927d6752402f28304052687d92a7c3a9947f6a543f2a15000005182a3b54697f94aabbcec9b5a38f7a644f41301d0d0000000000000000000000000000000009192b3b4b6075889eb3c8d4c4af99846f5847331f0a0000000000091c2f404c50515151514c473a2a18040000000000142a3f54697f94a9b49f8a75604b3520354b6074889db2b4a28f7b655645321e22374c61778b9fb5ab95806b563929172d42576c8297acb19c86715c47311c00000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a53687e93a8bacdc9b5a48f7b655041311e0e000000000000000b1b2933363d3e3e3e3e4d63788da2b8cdbaa58f7a65503a25100000000000000000000000000000000d1826374b5d6d8298a6b7cbbbaa9f8b7b655d4b3e2e20100100000000122230393c454646464639362d1f0f000000000000000000000000000000000a1826303d4a4e5b636c72787b7e7f807f7d7a766f6861574b45382d1f11040000000000000000000000000000000000000000000000000c1c2e3f4a60728399a5b7b59f8d7c665a4850657a8fa6b7af9a846f5e4c3f3d404c5e6f849aafb6a58f7a644f3a240f00000b1f34475970859bb0c8d8c6b09b85715c4b3723120000000000000000000000000000000000000d1e3245576b8096abc3d4cab49f8b76614c37210c00000000000f23384c5e6667676767615847331f0a000000000013283e53687e93a8bcab8d78624d3822304354697f94a6b8b19b8674604b44332934475971869cb1b09b85705746331e2b41566b8096abb29d87725d48321d00000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d28120000000000000000000000000000000000000000000001082020202020202020200f0d0700000000000000000000000000000000000000030d1315202020202020201a171107000000000000000000000000000000000000000a1f33475870859aafc6d7c6b19c86715d4b3723130000000000000003172939464b52535353535363788da2b8cdbaa58f7a65503a2510000000000000000000000000000000081c2e3f50657b90a0b2c4beb49f8c7c665d4b3f2e201002000000000004121d2427303131313123211a0f010000000000000000000000000000000a1a2836434b5b636f7981878d9193959594928f8a857d756960564a3d2f221204000000000000000000000000000000000000000000000000111c3043546176879daabbab9e897862554b6074889db2b3a2907b655d5453545e667c91a2b4b29d8774604b35200b00000d22374c62778b9fb5cad3c3a8937e69533e2e1b05000000000000000000000000000000000000031628394e63798ea5b7cacebbaa927c67523d27120000000005182a3b50667c7c7c7c7c76614c37220c000000000010253a50657b8fabbca5907b65503b2526364c6176889db3b5a396816c624c4639313a566c8196abb49f8b76614c36212b40556b8095aab29d87725d48321d00000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d281200000000000000000000000000000000000000000009151d35353535353535353524221b100200000000000000000000000000000000071520282a353535353535352f2c24190b0000000000000000000000000000000000000c21374c61768b9fb4cad4c3a9947e69543f2e1c05000000000000000a1e3346576167696969696969788da2b8cdbaa58f7a65503a25100000000000000000000000000000000e23374b5d70859bb0bec5b2a0937e685e4c3f2e2110020000000000000000090f111b1b1b1b1b0e0c0700000000000000000000000000000000091928384554606a79848e969da5a6a9aaaaa9a8a99f9a92897f74635b4c402f2212020000000000000000000000000000000000000000000000001325364758647a8b9fb4b8a79b8574604b55697f94a5b7b39e897b6f69686a6f7c8a9eb4b6a4937e685544311d08000011273c51667c91abbccfcab6a58d78624d38221000000000000000000000000000000000000000000a21364a5b72879db2c7d8c8ac97816c57362513000000000b1f344859748a919191917c66513c271100000000000c21364b61758b9fb5a9947f695438281e334657677d92a0b2b09f95806d61574b443751667c91aabbaa907b66513b262c41566b8196abb09b86715b46311c00000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d28120000000000000000000000000000000000000000091927314a4a4a4a4a4a4a4a4a39362d2010000000000000000000000000000000031525333c3f4a4a4a4a4a4a4a444037291907000000000000000000000000000000000011263b51667b90abbccfcab7a58d78624d38231100000000000000000c21364b61757d7e7e7e7e7e7e8095aabfcfbaa58f7a65503a251000000000000000000000000000000010253a50657a8fa3b5c9b8a698826d604e402f211102000000000000000000000000050606060600000000000000000000000000000000000001152737455660727f8b99a1acb2b7c3bebfc0bfc7bab4afa79e948679665e4c402f201000000000000000000000000000000000000000000000000008182a3a4b5c697f94a1b3b4a396806b5e4b6175879daab8a79e8d847f7d7f84909ea8b9a99c8674604b372614010001162b41566b8096abc9dac7b29d87725a4835200b0000000000000000000000000000000000000000071a2d3d586d8297adc2d7c6b19b86715443301c070000000d22374c62778ca9a6a6937e69543e291400000000000a1e33465772879cb1ae99846f5645321e29394d5f6e8398a4b5af9e958276676055545361768b9fb4ab96816b563a2a2d42576d8297acaf9a846f5a45301a00000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d28120000000000000000000000000000000000000001152737445e60606060606060604f4a3e2d1b0700000000000000000000000000000d2033435055606060606060605954473724110000000000000000000000000000000001162b40566b8095abc9d9c7b29d87725a4935200c00000000000000041a2f44596f8392939393939393959eafc3cfbaa58f7a65503a2510000000000000000000000000000006192c3c576d8297acc1c7b39e8876614c4231221203000000030a0c0a03000000000000000000000000000000000000000000000000000000000c1d314455607482949faab3bfc7c7bab4b2b1b3b8c5c7c5b8b3a49c8a7c665e4c3e2d1b0a0000000000000000000000000000000000000001080b0d0f101c2e3e4f616e8399a5b6b09e917c665a57647b8c9faab7ab9f999492949aa2b4b7a99f8b7a6456453219090000041a2f44596f8499aec4d8c3ae98836e593c2b190500000000000000000000000000000000000000000014293e54697e93a9bed3c9b49f8a74604a35200b0000000f253a4f647a8fa4c7ab96816c56412c17010000000003172939586d8297adb49e8975604b36211b30414b6175869ba3b3af9f97887d746d6a686871869bb0b19b86715847332a3b5a6f849aafae98836e59432e1900000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d281200000000000000000000000000000000000000081d314455707575757575757575705c4a36220d000000000000000000000000000013283c50616a757575757575756f6554402c170000000000000000000000000000000004192f44596e8499aec3d8c3ae99836e593c2c190600000000000000081e33485d73889da8a8a8a8a8a8aaafbccccfbaa58f7a65503a251000000000000000000000000000000c2035495a72879db2c7baa9937e695846332414040000000b161e211e1615110c0a04000000000000000000000000000000000000000000000c1c30414b60738398a0b4bbc8bbb4ada99f9d9b9ea7a9b2b6c3c2b5a89e8c7c665c4a39281603000000000000000000000000000000000909141d20222425232132434c6176879da9bab39e897862565d677d8c9da6b2b5afa9a8a9afb4b1a59d8b7c665c4a382815000000071c32475c71879cb1c6d5c0aa95806b55402b160000000000000000000000000000000000000000000010263b50657b90a5bad0cdbaa98c77624d37220d00000012273c51677c91a6bcae98836e59432e1904000000000011263c51667b91a7b8a8917c67513d2d1a1e3246576177859aa1b4b1a69d9288837f7d7e7f869cb1b49f8b76614c3734475972879db2aa95806a55402b1500000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000b20354b60758a8a8a8a8a8a8a8a7a644f39240f0000000000000000000000000000152a3f556a7f8a8a8a8a8a8a8a836f59442f1a00000000000000000000000000000000071c31475c71869cb1c6d5c0aa95806b55402b160000000000000000081e33485d73889db2bebebebebebfc6c6c6c6baa58f7a65503a251000000000000000000000000000000e23384d63788da5b7c9b49f8a76614b3a29170600000a181b29323632292b26211f170c000000000000000000000000000000000000000004182a3a4d5f6c8197a1b2bfc3b7aa9f98908a8786888c949ca4b0bcc6b9aa9e8a7a645745321e0e000000000000000000000000000006111c23263135383a3b393633334658647a8b9fb4b8a79b8574604b5f677b88949da5a8a9aba9a7a49c93877a665e4c3d2d1a0a000000031628385e74899eb3c9d2bda8937d68533e2813000000000000000000000000000000000000000000000e23394e63788ea3b8cdd7c7a48f79644f3a240f00000014293e54697e93a9beb09b85705b46301b0000000000000b20364b6075899eb3ae99846f5b4a36211628394759617684939ea8b4b2a79e98949393949ca4b6bcab917c66513c374c61778ca5b6a6907b66513b261100000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000b20354b60758a9f9f9f9f9f9f8e79644f39240f0000000000000000000000000000152a3f556a7f949f9f9f9f9f99846f59442f1a00000000000000000000000000000000031628385e74899eb3c9d2bda8937d68533e28130000000000000000081e33485d73889db1b1b1b1b1b1b1b1b1b1b1b1a58f7a65503a2510000000000000000000000000000011263b50667b90a5c3c5b09b85705746331c0c00000418283639464b4639403b37332a1c0c000000000000000000000000000000000000000a1f334758677d919fb1bfc3b7a59d8c827b75727173777f87959eaebbc8b9a89c8675604b3c2c19060000000000000000000000010f1a212f3837444b4d4f504e4b46393a4a5c697e93a0b2b5a396816c5f4d5d65757f878e92949694928d877e74645c4c40301f0f00000000091e324556758a9fb4cad1bba6917c66513c2711000000000000000000000000000000000000000000000d22374c62778ca1b7ccd0baa5907b65503b2610000001162b41566b8096abc0b29d88725d392816030000000000091d3145566d8297abb59f8c79634e3f2e1a1b2a3b475861727e8a969ea8aeb3ada9a8a8aab1b6bab4ac96816c57413a51677c91a6b5a38c77614c37220c00000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000b20354b60758aa0b5b5b5b5a48e79644f39240f0000000000000000000000000000152a3f556a7f94aab5b5b5ae99846f59442f1a00000000000000000000000000000000091e324556758a9fb4cad1bca6917c67513c27120000000000000000081e33485d73889b9b9b9b9b9b9b9b9b9b9b9b9b9b8f7a65503a2510000000000000000000000000000012283d52677d92a7bcc3ad98836e5839291700000011223646535761575955514c473a2a1704000000000000000000000000000000000005182b3b4c6177899eb3bdc7b7a59d877a6d6560555c5962697480949daebec6b6a496816b5a4935200d0000000000000000000003111f2c35404c505560626465636157544b464f606e8298a5b6b09f917c675a4b56606a72797d7f807f7d78726960564b3e30221201000000000b21364b60768babbccfd0bba5907b66503b2611000000000000000000000000000000000000000000000c21364c61768ba1b6cbd0bba6917b66513c2611000003182d43586d8298adc2b49f8a745745321e090000000000021527384e63798c9fb5ab98836e5d4b3828151d2a3a4754606977808a92999da6a5a6a8a8a7a6a99f9a9486715c4747586e8398aeb19b86715847331f0a00000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000b20354b60758aa0b5cacab9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfcac4ae99846f59442f1a000000000000000000000000000000000b21364b60768babbccfd0bba5907b66503b26110000000000000000051a2f455a6f838686868686868686868686868686867a644f39240f000000000000000000000000000013293e53687e93a8bdc1ac97816c57422c170000091c2f4053646e76736f6a66615847331f0a00000000000000000000000000000000000b203448596c8196a7b8ccbaa99d8777645c504b443b484d55606b7f94a0b2c5c2b49f8b78634d3b2a180500000000000000000211212f3d494e5e666d7578797a7876706961574e4c6176879ca9bab39e89786356454b545b63686a6b6a68635b544b45382e20120400000000000c21364b61768ba0c7d7d0baa5907b65503b2610000000000000000000000000000000000000000000000c21364b61768ba0b6cbd1bca6917c67513c2712000004192f44596e8499aec3baa98b76604b36210b0000000000000a21364a5b6e8399aeb2a08f7a645645321d131c2936434a59616b757c83888c9091929392908e8a857f77624c3b4c61778a9fb4aa947e69543a2a180400000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000c21364b61768ba0c7d7d0baa5907b65503b2610000000000000000003182d4154656f717171717171717171717171717171645c4a36220d000000000000000000000000000012273c51677c91a6c7c3ad98836e583f2f1b0b061123384c5e6e828b8884807b76614c37210c00000000000000000000000000000000011527374d62778b9fb4c5c6b49f8b7a64594a3e35312b3437444b616d8298a7b8ccbbaa98826d5948341f0b000000000000000010202f3f4c5b63707b83898d8f908e8b857e75685f4b57647a8b9fb4b9a79b8574604b413d4a4e53545654524d493c3631271a10020000000000000b20354b60758aa9bacdd0bba6917b66513c2611000000000000000000000000000000000000000000000c22374c61778ca1b6ccd0bba5907b66503b26110000061b30455b70859ab0c5c7a28c77624d37220d000000000000071a2d3d4f647a8ea0b2b19c8674604b413122121825303a474c5760676e73777a7c7d7d7d7b7875706962594848596b8095a9b49f8b77624c37220d0000000000000000000000000000000000000000061c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000b20354b60758aa9bacdd0bba6917b66513c261100000000000000000012253747545a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4f4a3e2d1b07000000000000000000000000000010253a4f657a8fa9bac7b29d87725d4c3929201a21304050667b90a09e999590806a55402b1500000000000000000000000000000000081d3144556b8095a9baccb9a895806b5c4a3b2d201d18202731434c6176899eb3c7c8b49f8b77624c37220f000000000000000c1c2e3e4c5d65798490989ea7a4a5ab9f9a94887d6c60555c687e93a0b2b5a397816c5f4d3c36393d3f413f3d38352c201d150a0000000000000000081c30435474899fb4c9d2bca7927d67523d2812000000000000000000000000000000000000000000000d23384d62788da2b7cddac9a58f7a65503a25100000071c31465c71869bb1c6b8a38e78634e39230e000000000000000f22364a5c6d8298a6b5a496816c5f4d40301c13131c2a3439454b52595962656768686766636056544c48424d6277899eb4aa98836e5947341f0b0000000000000000000000000000000000000000001c31465b71869bb0c6d2bca7927d67523d2812000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000081c304354748a9fb4c9d2bca7927d67523d281200000000000000000008192937414546464646464646464646464646464639362d20100000000000000000000000000000000b21364b60768a9fb4c9b7a5907b6557463a342c363f4c5e6f849aafb3aeaa917c67513c2712000000000000000000000000000000000b20354b6074889eb3c7c9b49e8976614c3e2d1d10080509151f3347586a7f94a9bacdbbaa947f6a553d2c1a0600000000000417293a4b5c657b899aa2adb3b3afafb1b4b0a69d928173604b606d8298a4b6b19f917d675b493828282a2b2a282321190e0902000000000000000000011426485d72889db2c7d4bfa9947f6a543f2a150000000000000000000000000000000000000000000010253a4f657a8fa4bacfcfbcab8d78634e38230e0000071c32475c71879cb1c6b9a38e79644e39240f00000000000000071b2d3e4c6176889db3b09e927d675e4d403025180e181f2832363d3b484d5051535352514e4b453837404f606e8398a8b49f8b78634d3b2a1805000000000000000000000000000000000000000009192f3f5b71869bb0c6d2bca7927d6752362614010000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000011426485d73889db2c8d4bfaa947f6a553f2a15000000000000000000000b19252d2f31313131313131313131313131313124221b1002000000000000000000000000000000091e3245576f8499afc1c3b19c867561584d483d494e5d667c91a2b4c9b49f8a77614c37220c0000000000000000000000000000000010263b50657b90a6b8cbc4ac96816c57463320100000000004172a3a4c61768a9fb4c9c8b19c86715b4935210c00000000000a1f334658647a8b9ea7b4b4a89e9a999c9fabb3b39f96816c604b6175869ca8bab49e8a79635645321e151615130e0c06000000000000000000000000001b30455a70859aafc5d7c1ac97826c573928160300000000000000000000000000000000000000000012283d52677d92a7bcd2cab59f8b76604b36210b0000081d32475d72879cb2c7b9a48f79644f3a240f0000000000000000101f334758667c919fb0b49f8c7c675f4a43362c1f170c161e21272b34373b3c3d3e3d3b39363132414d5e697e93a0b2a596816c5a49351d0d0000000000000000000000000000000000000000021527374b5d71869cb1c6d2bda7927d685443301c0c0000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000001b30455b70859ab0c5d7c2ad97826d583a291704000000000000000000000812181a1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0f0d0700000000000000000000000000000000000316283952677c91a3b5c8b5a49a83766962595d5b636c7b8a9eb4c0bcab99836e5947341f0a00000000000000000000000000000005192b3b576c8297acc4cbb7a68f7a644f3929170200000000000c1f3347586e8399aec9c9b5a48e78634e39230e000000000417293a4c6176879da9b9a89f93898584868c99a1b2b09f927d68575763798a9fb4b9a89b8574604b41301f0f000000000000000000000000000000000002182d42576d8297acc2d7c5b09b86705746321e09000000000000000000000000000000000000000004172a3a566b8196abc0d6c8b29d88735645321e090000081d32485d72879db2c7baa48f7a654f3a251000000000000000000417293a4d5e6c8196a1b3aa9f8b7d6a6054493c332a211a120f12192022252728282826253039454b5f677c8c9fb4aa9d8776614c3c2c19000000000000000000000000000000000000000000081d314455657b90a4b5c9dbc6b19b8673604b3a2a180400000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a0000000000000000000000000000000003182d42586d8297adc2d7c6b19c86715847331f0a00000000000000000000000003050707070707070707070707070707070000000000000000000000000000000000000000000b20354a6072869baabbc2b3a29a887e7773727479818c9ea8b9c1b49f8c7a644f3a2a18040000000000000000000000000000000b2034485972879db2c7c8b29d88735c4a361b0b0000000000000417293a52677d92abbccfc2a9937e69543e2914000000000a1f3346586b8095a5b7ab9f8a7e74706f71788399a1b2b39e8976614c5b687d92a0b1b5a397816c5f4d3d2c1a0a000000000000000000000000000000000013283e53687d93a8c4d5c9b49f8a76614b36210c00000000000000000000000000000000000000000a1f33475870859bb0c5d8c3ae99836e59382816020000081d33485d72889db2c7baa48f7a654f3a25100000000000000000000c1c30404b60728399a3b4a99f8d7f72635a4c473a362d2724211e17171f2124272a3336434a57606c7d8c9faab49f8b7a645846331e0e000000000000000000000000000000000000000005182b3b4b6074869cb1c2d2ddc9b5a3937e695947341f1000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000014293e53697e93a8c5d6cab49f8b76614c37210e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354657b8c9fb4bbc0b3a69d938c8987898e979faab9c1b4a397816c5c4a361c0c000000000000000000000000000000000d22374d62778ca5b7cac2ad97826d583e2d1b00000000000000000c22374c61778b9fb5cac3ae99836e593a2917040000000c21364c6176899eb3b59f8d7b6860555a5a62728399a9b8a7957f6a554e5f6d8297a4b5b19f927d675b4938281603000000000000000000000000000000000e24394e63798ea6b7cbcebaa9917c66513a2a1804000000000000000000000000000000000000000c21374c61768b9fb4cad3c2a9947e69543f2914000000081d33485d72889db2c7baa48f7a654f3a251000000000000000000000121c3043546175859aa2b3ab9f9584786b61584e4a3d3c39363329293336393c3a474c5460677581929faab59d937e695c4b3a29170000000000000000000000000000000000000000000920344859697f94a4b6cacbc8cbc1b39e8977614c3e2e1808000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000000f24394f64798ea7b8cccebbaa927c67523c2c190600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364b5d687e939faab7c3b7b3a9a79e9d9ea7acb4bbbdb0a39b8575604b3e2e1b000000000000000000000000000000000012273c51677c91a6c3d4bda8937e68533e291300000000000000000b1f34475972879cb2c7c8b39d88735847331f0a00000013283d53687d92a8b9ad98826d5d4b443c485461778a9fb4b29d88735b4a4b6075869ca8b9b49e8a79635645321e13010000000000000000000000000000000b20354b6074889db3c8d8c7ad98836d5947341f0e00000000000000000000000000000000000009192f4053687d93aabbcecab6a48e79634e39240e000000081d33485d72889db2c7baa48f7a654f3a25100000000000000000000001142636465761768499a1b4b4a29a8b80766c645c57524e4b46393a464c4e5256586169737c87969fb4ab9f947f6a604f3e2e1c0c000000000000000000000000000000000000000009192f3f4d62778a9eb4c2c4b7b2b7c4b9a797826d5c4b362614010000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000000b20354b6075899eb3c8d9c8af99846f5a49352010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182e3f4e60697f8c9da5b2b7c3c5b8b3b2b3b9c5bcb5ae9f9685766157453220100000000000000000000000000000000000152a40556a7f95aabfd6c6a48f79644f3a240f000000000000000004182a3b596e8398aec3cbb7a68c76614c37210c000000132536586e8398adbbaa8f7a65503f312b3647596d8398adb7a68e79634e455663798a9eb4b9a89c8675604b41311f0f000000000000000000000000000000081c3043546c8197acc2d2c9b49f8a77614c3c2c190900000000000000000000000000000000011527374c5e71859bb0c8d8c8b19c87725b4a36210c000000081d33485d72889db2c7baa48f7a654f3a25100000000000000000000000081829394658617483959faab4a99f95898179726c676461575e5f586163676b70777e86919ca5b0a79e8d7f6a614f423220100000000000000000000000000000000000000000021527374b5d6e8398a8b9c4b7a69da6b7c5b59f8d7a645443301c0c0000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a0000000000000000000000000000000000081d3144556d8297adc3d3cab49f8c78634d3e2e1b0b0000000000000000000000000000000000000003090c120f0d08000000000000000000000000000000000000000000000000112131424f61697b87939da5a9aeb0b2b3b2b0adab9f998e8174615847392816020000000000000000000000000000000003182e43586d8398adc2ccb9a88c76614c37210c000000000000000000162b40556b8095aac0d5c4a48f7a644f3a250f0000071c30435473889db2b49f8a75604b3620182a3b53687d93a8c4a9937e695438495b677d929fb1b5a497826d5f4e3d2c1b0b00000000000000000000000000000114263650657a8fa3b5c9cdbaa996806b5a4937261402000000000000000000000000000003111d314455657b90a3b5c9cebbaa95806a553d2d1a07000000081d33485d72889db2c7baa48f7a654f3a25100000000000000000000000000b1b293a465660737f8c9ca4b3b4a89e968e87817c79767574747576797c80858b939ca4b2b3a39b897c6a614f43322414020000000000000000000000000000000000000000081d314455657b90a0b2c6b7a69d889db2c2bcab9b8573604b3a2a180400000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000000115273751667b90a5b6cacfbcab98826d5c4b3929190900000000000000000000000000000000010b161e212725221b10020000000000000000000000000000000000000000000003142432434f5d65747e878e94999b9d9e9d9b98928c837a6c6056473a291b0a0000000000000000000000000000000000061b30465b70859bb0c5c9b39e89745847331f0a00000000000000000013283d53687d92a8bdd1bca7927c67523d271200000b20354a60758a9fb4b19c87725645321d0f253a4f647a8fa4b9ab96806b56413d4d5f6c8197a3b5b19f927d685b493928160300000000000000000000000000000823374b5d71869bb1c2d3c7b49f8a78635544311d150a0000000000000000000000000513212f404b6073859bb1c1d2c8b49f8b77624d37220f00000000081d33485d72889db2c7baa48f7a654f3a2510000000000000000000000000000b1b29384555606a7a86949ea7b3b4aba49c97918e8b8a89898a8b8e91959b9fabb1b2a69d928578665e4f4332251506000000000000000000000000000000000000000005182b3b4b6074869cb1bec6b39d887b90a4b6c9b5a3937e695947341f1000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a0000000000000000000000000000000000000b20354b6073879cb2c3d4c9b49f8c7a6457463727190d010000000000000000000000000009141d2832363c3a372e20150700000000000000000000000000000000000000000000061424323f4b56606873797f848687898786837d786e645c4b4538291c0c000000000000000000000000000000000000081d32475d72879cb2c7c7b19c87725c3a29170400000000000000000011263b50667b90a5bbd0bea9947e69543f291400000c21374c61768caabbb09b86705b3828150e23394e63788ea3b8ad97826d584230414b6074859ba8b9b49f8a79635746321e130100000000000000000000000000081c2e3f52687d92a4b6c9cdbaa99a8473604b4332281a11080100000000000000070d1820303f4c5e6a7f94a3b5c9cebbaa98826d594834200b00000000081d33485d72889db2c7baa48f7a654f3a251000000000000000000000000000000b1a2837444b5c64757f89959ea7adb4b1aca7a3aa9f9e9e9faaa3a7abb0b3ada59d94887d72635a4c40322515070000000000000000000000000000000000000000000920344859697f94a4b6cab9a8957f72869cb1c4c1b39e8977614c3e2e1909000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0101010101010101010101010101152a3f556a7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000000081c304354697e93a5b7cacfbcab9c8675615544372b1d1409040000000000000000040a1219263139464b514f4b3f32251501000000000000000000000000000000000000000000000614212e38454b5460646a6f71727372706d68625a4f4a3e31271a0c00000000000000000000000000000000000000071c30435474899eb4c9c5b09b85705b46301b000000000000000000000f253a4f647a8fa4b9cfc0ab96806b56412b1600000d22374c62778ca1c6b09a85705b45301b0e23384d63788da2b8ad98836e58432e3245566378899eb3baa89c8675614b42311f0f00000000000000000000000000001120354b6073869cb1becfc7b4a296806b614b45382e201d15110f0e0d0e10131a212b34414d5d657c8c9fb4c1d2c3b49f8b78634d3b2b180500000000081d33485d72889db2c7baa48f7a654f3a25100000000000000000000000000000000a1926313e4a566069767f8890989fa9aaadb1b3b4b3b4b3b2b0aca8a69e9891877e76686054493c3022150700000000000000000000000000000000000000000009192f3f4d62778a9eb4c2c6b49e8977687e93a6b7cbb9a797826d5c4b372614010000000000000000000000000b20354b60758aa0b5caceb9a48e79644f3924171717171717171717171717171717172a3f556a7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000000011426364b6075879db2bfd0c9b6a49983736055483b31261f18120f0e0d0e0e1013171f212f37444b576167645d4f43321f0f000000000000000000000000000000000000000000000003101a273136434a4f54595b5d5e5d5b58534d483c362d1d150a00000000000000000000000000000000000000000b20354a60748aa8b9cdc4af99846f5a442f1a050000000000000000000e23384e63788da3b8cdc1ac97826c57422d1700000b20364b60758ba8b9b19c86715c3b2b180f24394f64798ea4b9ac97816c57422c2838495a677c919fb0b6a498826d604e3d2d1b0b00000000000000000000000000081d314455667b90a0b2c3d1c0b09e957f6d60564b3f353127262423232325282d363b484d5f677b8a9eaabbcec8b6a596816c5b49351d0d0000000000081d33485d72889db2c7baa48f7a654f3a25100000000000000000000000000000000009141d2d38454b57616a747b838a9094989b9d9fa99f9e9d9a97938f88827b736961574a43362c1e1204000000000000000000000000000000000000000000021527374b5d6e8398a8b9cdb9a896806b6074879db2c2c5b59f8d7a645544311d0c0000000000000000000000000b20354b60758aa0b5caceb9a48e79644f392c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c3f556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000000000081e324556677d92a1b3c4d3c2b3a198827362594b4437332a27252322232425282a3337404c556068757c7a6a614f3d2d18080000000000000000000000000000000000000000000000000a151d253035393f444648494846433d38342b221b10020000000000000000000000000000000000000000000b21364b60768ba0c6d6c3ae99846e59442f19040000000000000000000d23384d62788da2b7cdc2ad97826d58422d180000091d32455674899eb4b39e88735948342011263b51667b90a6c9aa95806a55402b1a2c3c4d5f6c8196a3b5b2a0927e685b4a39291603000000000000000000000000011426374c5e6d8298a5b7c6cdbcaf9d958174655d514b44373b393838393b3d3d4a4e59626e7d8b9ea8b9c8cebbaa9d8775614b3c2c19000000000000081d33485d72889db2c7baa48f7a654f3a2510000000000000000000000000000000000001101a283239464c5560666e757a7f838688898a8a898785817e79746d6660544b46393025180e0000000000000000000000000000000000000000000000081d314455657b90a0b2c6c3b49e8a776256697e93a4b6cabcab9b8573604b3a2a180400000000000000000000000b20354b60758aa0b5caceb9a48e79644f4141414141414141414141414141414141414141556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000000000021628384d5f6f8399a6b8c7d0bfb2a09884776860554c473a3d3a393838393b3d3a474c535e66737e88918f7f6a5c4a362614010000000000000000000000000000000000000000000000000208131c20242a2f31323432312e282220190d0700000000000000000000000000000000000000000000000c21364c61768ba1b6cbc3ae98836e59432e19040000000000000000000d22374d62778ca2b7ccc2ad98836d58432e180000021528385b70869bb0b8a68c77624d3827212f40556a7f95aabcab917c67523c27121e30414b6074859ba7b8b49f8a79635746321e140100000000000000000000000009192f404c6176879da8b9c7ccbcaf9f97867a6f66605554514e4d4d4e5053575b636c7783929fa9b9c6ccbcb49f8c7b655746331e0e000000000000081d33485d72889db2c7baa48f7a654f3a2510000000000000000000000000000000000000000a161e293337444b515660656a6e71737475747372706c69646054514b433633291c1308000000000000000000000000000000000000000000000005182b3b4b6074869cb1becab7a5947f6a594b6074869cb1bfc9b5a3937e695947341f1000000000000000000000000b20354b60758aa0b5caceb9a48e7964565656565656565656565656565656565656565656566a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000000000000a1a30414c6177889da9bac8cfbeb2a29a897e7369615856524f4e4d4d4e505356586168717b86939ea79f8c79645443301c08000000000000000000000000000000000000000000000000000000070b0f151a1c1d1e1d1b18130d0b05000000000000000000000000000000000000000000000000000c21374c61768ca1b6cbc3ad98836e58432e19030000000000000000000d22374d62778ca2b7ccc3ad98836e58432e19000000162b40566b8095abc1a8937e68564537363c4c5e71869bb1b59f8b77614c37220c121d3145566278899eb3baa99c8675614b4231200f00000000000000000000000000111e33465763798a9ea9b9c6ccbdb1a49c8f847b746e69666463626365686c7279818a98a0b4bac7cdbcaf9e937e685d4b39291700000000000000081d33485d72889db2c7baa48f7a654f3a25100000000000000000000000000000000000000000030b171e27313638454b5055585c5e5460545e5d5b57534f4a43363530261e170b000000000000000000000000000000000000000000000000000920344859697f94a4b6cac0b29d8775604b4455667c90a1b3c8c1b39e8977614c3e2e1909000000000000000000000b20354b60758aa0b5caceb9a48e7a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000000000000131f344759647a8b9faabac6cfc0b4a79e93877e77706b67646362636365686b70777d86909ca4b3b8aa9b8573604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768ba0b6d8c3ae99836e59442e19040000000000000000000d23384d62788da2b7cdc2ad98826d58432d1800000010253a4f657a8fa3b5b19c867460514c4b4e5a667b90a3b5b09b86715947341f0b02152738485a667c919eb0b6a498826d604e3e2d1b0b000000000000000000000000031729394a5b657b8b9ea8b6c3cec2b5b1a29a9088837e7b797878787a7d82878e969fa9b2becdc7bab49e95806b604e3f2e1b0b00000000000000081d33485d72889db2c7baa48f7a654f3a2510000000000000000000000000000000000000000000000309151d202832363b3f434648434a43494845423e3a353025201c1408030000000000000000000000000000000000000000000000000009192f3f4d62778a9eb4c2c9b4a2917c675645374c5e6f849aaabbccb9a797826d5c4b372614010000000000000000000b20354b60758aa0b5cad8c2ad9882818181818181818181818181818181818181818181818181849bb0c5d9c4ae99846f59442f1a00000000000000000000000000000000000000000004182a3b4b5c667c8c9fa8b7c3cfc5b8b3a59d938b85807c7a787778797a7d81858b939ba3b1b5c2c8b5a3937e69533e2914000000000001082020202020202020202020202020202020202020201f1e1c1916110c0a040000000000000000000000000000000000000000000000000000000000000b20354b60758aaabbcec4ae99846f59442f1a040000000000000000000e23384d63788da2b8cdc2ac97826d57422d180000000e23374b5d71859bb0b6a4978170666161636a78879db2b6a5927d67523b2a1804000a1a2b3c4c5e6b8096a2b4b2a0937e685c4a392917030000000000000000000000000b1b2d3d4b5d657b8a9da5b2becac9c0b3afa79e9894908e8d8d8e9092979ca4acb4bac7cdc2b6a99f92806b6251423121100000000000000000081d33485d72889db2c7baa48f7a654f3a251000000000000000000000000000000000000000000000000002080b161e21252a2e31253035302532302c2924201c130b08010000000000000000000000000000000000000000000000000000021527374b5d6e8398a8b9cdbcab9a85705f4d382f404e63798c9fb4c5c5b59f8d7a645544311d0c0000000000000000000b20354b60758aa0b5cadac6b2a0989696969696969696969696969696969696969696969696969ba3b4c8d9c4ae99846f59442f1a000000000000000000000000000000000000000000000c1d2e3e4c5e667c8a9da5b2bec9ccc3b6b2aa9f9a95928f8e8d8d8e9092969b9faab1b5c1c9c8bbb4a29a86715c46311c0700000009151d3535353535353535353535353535353535353535353433312e2b26211f170d0b05000000000000000000000000000000000000000000000000000000081d314455748a9fb4c9c5af9a85705a45301b000000000000000000000f24394f64798ea4b9cec1ab96816c56412c17000000081c2e3f51667c91a0b2b19f97847b7776787f899da6b7aa9c8773604b35200c0000000e1e2f404b6073849ba7b8b49f8b7a645746331e14020000000000000000000000000f1f2f3f4b5d657a8798a0b2b6c3cac7c5b8b3aea9a6a3a2a2a3a5a8acb1b6c2c9ccc6bab4a49c8b7e6a615144332414020000000000000000081d33485d72889db2c7baa48f7a654f3a251000000000000000000000000000000000000000000000000000000003090b1015191c131c201c131d1b17140f0b07000000000000000000000000000000000000000000000000000000000000081d314455657b90a0b2c6c6b59f8d7a644f413021364a5b6c8197a7b9ccbcab9b8573604b3a2a180400000000000000000b20354b60758aa0b5cae1cfbeb2adababababababababababababababababababababababababb0b4c1d1d9c4ae99846f59442f1a0000000000000000000000000000000000000000000000102030404c5e667a8798a0b1b6c2c9cac8bbb4b0aba7a4a3a2a2a3a5a8abb0b4bbc8c9cac0b4aa9f958476614c37220c000000091927314a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49484643403c37332a2220180d0700000000000000000000000000000000000000000000000000011527375d73889db2c8c6b19c86715c3827150200000000000000000010253b50657a90a5bacfbfaa947f6a553f2a15000000001124394d5e6d8298a3b3b1a29a918c8b8e949ea7b7ab9f8b7a645544311d0800000000121d3144556278899eabbaa99c8776614c423120100000000000000000000000000111212f3f4b5c647683909da5b1b6c2c8ccc8c3bebbb9b8b7b8babdc1c7cac9c5b9b3a89f94867a6860504333261606000000000000000000081d33485d72889db2c7baa48f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000030000070b070000060200000000000000000000000000000000000000000000000000000000000000000005182b3b4b6074869cb1becdb9a897826d5c4a36231a2d3d4c6177899eb3c3c9b5a3937e695947341f1000000000000000000b20354b60758aa0b5cadfd9ccc2bfbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcc3c6cfdcd9c4ae99846f59442f1a000000000000000000000000000000000000000000000002122230404c5c647683909ca4b0b5c1c7cacac5c0bcb9b8b7b8b8babdc0c5cacac9bcb5afa29a8c8073615847331f0a000001152737445e606060606060606060606060606060606060605f5e5d5b5955514c473a37342b211a0f050000000000000000000000000000000000000000000000001c31465c71869bb1c6c8b39d88735645311d0900000000000000000012273c52677c91a7bcd1bda8927d68533d281300000000091d30404b61758599a1b2b4afa6a1a0a3a9b3b2a99f8d7e685c4b3726140100000000011527374859667c8d9fb5b6a598826e604e3e2d1b070000000000000000000000000311212e3e4a58616e7c87929ca4acb3b8c5c1c4c6c7c8c9c8c7c5c2c7bab4afa79e958a7f74645c4e423325160800000000000000000000081d33485d72889db2bdbaa48f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000920344859697f94a4b6cac3b49e8a77624c3e2d1b0f1f334758697f94a5b6cac1b39e8977614c3e2e1909000000000000000b20354b60758aa0b5cadeccbbafaaa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7adb2becfd9c4ae99846f59442f1a0000000000000000000000000000000000000000000000000412222f3e4a58616e7b86919ba3aab1b6c2c0c2c5c7c8c9c8c8c7c5c2c9bcb5b0ab9f9990847a6a6055473a2a18040000081d3144557075757575757575757575757575757575757575757473716e6b666158544d483b362d1f180d00000000000000000000000000000000000000000000041a2f44596f8499aec4cab59f8a75604b36200b000000000000000000152a3f546a7f94a9bfd7c7a5907b66503b26110000000000121e324657617583929da5acafb1b2b1aea9a0988b7d68604e3e2e190900000000000009192b3b4c5e6b8095a0a8a8a0937e695c4a36220d000000000000000000000000000311202d3a464c5e66747d8790979ea7a8acaeb1b2b3b3b2b1afaca9a99f99928980776a60564a3e312415070000000000000000000000081d33485d72889da8a8a8a48f7a654f3a251000000000000000000000000000000000000000000000000002090b0e1114151616151513100d0b050000000000000000000000000000000000000000000000000000000000000000000009192f3f4d62778a9eb4c2cab7a5947f6a594834201004182a3a4b6074879cb2c0ccb9a797826d5c4b372614010000000000000b20354b60758aa0b5cad7c2af9d9491919191919191919191919191919191919191919191919198a0b2c6d9c4ae99846f59442f1a000000000000000000000000000000000000000000000000000412202e3a464c5e65737c858e959ca4a6aaadb0b2b2b3b3b2b1afadaaab9f9b948c847b6f645c4b44372a1c0c0000000b20354b60748a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888683807b77706962594e4a3d342a1d1201000000000000000000000000000000000000000001162c41566b8196abc0cfbcab8d78634e38230e000000000000000002152738576c8297acc1cdbaa98d78624d38230d000000000003162939465761727d8790969a9c9d9b99948d8378675f4e4231201000000000000000000d1d2f404b6073828f939393938a79644f39240f000000000000000000000000000002101c2933404c566068737b82888e9396999c9d9e9e9d9c9a97948f8a847d766b61594b45382d201306000000000000000000000000081d33485d728793939393938f7a654f3a2510000000000000000000000000000000000000000000060c0e151d202427292a2b2c2b2a2825222019130c0a040000000000000000000000000000000000000000000000000000000000021527374b5d6e8398a8b9cdc0b29d8775604b3b2b1802000c1d314556667c91a2b4c9c5b59f8d7a645544311d0c0000000000000b20354b60758aa0b5cad4bfaa947f7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c8298adc3d8c4ae99846f59442f1a000000000000000000000000000000000000000000000000000002101c2933404c556067707980878c9195989a9c9d9e9e9d9c9a9794908b867f786f655d4e4a3e3127190c000000000b20354b60758a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9faa9f9e9d9b9895918c857f776d645c4c473b301d1409000000000000000000000000000000000000000013283e53687d93a8c6d6c9a6917c67513c27120000000000000000091d31455670869bb0c5c9b49f8975604b35200b0000000000000b1b293946546067747b8185878886847e786e635a4d4131241402000000000000000000121d31445560727a7d7e7e7e7e7c66503b2611000000000000000000000000000000000c171f2f38454b5460656d74797e818487888989888785827f7a756f6761574c473b31271a0f01000000000000000000000000000012273d52677d7e7e7e7e7e7e77624c37220d00000000000000000000000000000000000001080f1a2123283236393c3e404141403f3d3a38342b29211f170c07000000000000000000000000000000000000000000000000000000081d314455657b90a0b2c6c9b4a2917c675645321d0d0000021527384d5e6f849aabbccfbcab9b8573604b3b2a180400000000000b20354b60758aa0b5caceb9a48e7967676767676767676767676767676767676767676767676a7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000000000000000000000000000c171f2f37444b525c646b72777c80838587888989888785827f7b76716a635a504c3f362d1d150900000000000b20354b60758aa0b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbb4b3b2b0aeaaa6a39b948b82796d62594d403126190a000000000000000000000000000000000000000f24394f64798ea8b9cdc0ab96806b563b2a1805000000000000000b20364b60758a9fb4c9c5b09b85705443301c08000000000000000b1b2936434a5560656c707273716f69635a4d493c302314060000000000000000000001142637445460656868686868665e4c38230f000000000000000000000000000000000004121a273136434b50546063686c6f717273747372706d6a656056524b4639342a1d150a000000000000000000000000000000001025394d5f67686868686868625948341f0b000000000000000000000000000000000009141d202c353838454b4e5154555656555453504d483c3e37332a221b100600000000000000000000000000000000000000000000000005182b3b4b6074869cb1becfbcab9a84705f4d382816000000000a1a30404e64798c9fb4c6c9b5a3937e695947341f1000000000000b20354b60758aa0b5caceb9a48e7964525252525252525252525252525252525252525252556a7f94aabfd4c4ae99846f59442f1a00000000000000000000000000000000000000000000000000000000000411192631353e4a4e555962666b6d70727374737372706d6a666158544d493c382f211a0f010000000000000b20354b60758aa0b5cacacacfc7c3c2c2c2c2c2c2c2c2c2c2c2c3c5c6c3c0c1b5b0aa9f988c8277675f4b4437281a0a0000000000000000000000000000000000000b20354b6074899eb4c9c6b09b86715947341f0b0000000000000013253650657a90a9bacdc5ab95806b563626140100000000000000000b18253037444b50575a5c5d5c59544d493c352c1e120500000000000000000000000009192636434a505353535353504c402f1c09000000000000000000000000000000000000000a151d26303536434a4e5357595c5d5e5e5d5c5a5754504b45383632291f180c0200000000000000000000000000000000000a1e30414d525353535353534c483b2a18050000000000000000000000000000000512192631353d494e5556606366696a6b6b6a6a6865625a59534c473a362d20190e00000000000000000000000000000000000000000000000920344859697f94a4b6cac6b49f8c7a644f41301a0a00000000001221364a5c6d8297a8b9ccc1b39e8977614c3e2e1909000000000b20354b60758aa0b5caceb9a48e79644f3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3f556a7f94aabfd4c4ae99846f59442f1a0000000000000000000000000000000000000000000000000000000000000009141d202d36393b474c5155585b5d5d5e5e5d5c5a5855504c463a38352c231c110700000000000000000b20354b60758aa0b5cae2cfbfb3aeacacacacacacacacacacadaeb0b3b7c4c3cac8bbb4ab9f97897c6c605545382819090000000000000000000000000000000000081d3144556f8499afc8cab49f8b77624c372212000000000000071c3043546b8096abc7ccb9a7907b66503b26110000000000000000000008131c2731363b4145474846443f38352c20190e00000000000000000000000000000009182530353a3e3e3e3e3e3b382f22120000000000000000000000000000000000000000000208141c20253035393e414447484949484745423f3a363228211e160b040000000000000000000000000000000000000001132330393d3e3e3e3e3e3e37342a1d0d0000000000000000000000000000000d181f3037444b525b636a7075797c7e7f8081807f7d7a77736e6861584f4a3e352b1e1402000000000000000000000000000000000000000009192f3f4d62778a9eb4c2cdb9a897826d5c4a362312000000000000071a2d3e4c6277899eb4c3ccb9a797826d5c4b372614010000000b20354b60758aa0b5caceb9a48e79644f3927272727272727272727272727272727272a3f556a7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000000000000000000000000000000000001080f1a21242a34373c40434547484949484745423f3b3633292320190e09000000000000000000000b20354b60758aa0b5cadbc7b3a1999797979797979797979797989a9da6a7aeb4bbc8c9bcb5a79e91817360564537261401000000000000000000000000000000000114263753687e93aabbcebcab937e695340301b0b00000000010f20354a6073879db2c7c9b39e8975604b36200b00000000000000000000000009151d20262c303233312f292320190e06000000000000000000000000000000000008131c2025282929292926231c1204000000000000000000000000000000000000000000000001080b131c2023292c2f323334343332302d2a25211e160c0a030000000000000000000000000000000000000000000005131e2527292929292929221f180d000000000000000000000000000002101d2a34404c556067707880858a8e91939596969594928f8d88837e766e645c4d493c311d150a000000000000000000000000000000000000021527374b5d6e8398a8b9cdc3b49e8a77624c3e2d1b05000000000000000f1f3447596a7f94a5b7cac5b59f8d7a645544311d0c0000000b20354b60758aa0b5caceb9a48e79644f3924121212121212121212121212121212152a3f556a7f94aabfd4c4ae99846f59442f1a0000000000000000000000000000000000000000000000000000000000000000000000070d0f181f22272b2e30323334343332302d2a26211f170e0c060000000000000000000000000b20354b60758aa0b5cad9c3ae998382828282828282828282828385888c92999faab4bbc8c5b9b39f968374605544311d1300000000000000000000000000000000000c22374c61778b9fb4cac9b19c86715e4c392816090000040f1f314151667c91a5b7cbc2ad98826d5645311d090000000000000000000000000002080b10171b1d1e1c1a140e0c06000000000000000000000000000000000000000000070b101313131313110f090000000000000000000000000000000000000000000000000000000000070b0e13171a1c1d1e1f1e1d1b1815100b09020000000000000000000000000000000000000000000000000000010a10121313131313130d0b0500000000000000000000000000000412212e3b474c5e66737d858d959a9fa9a6a9aaababaaa9a8a5a69e98938a837a6e625a4e4232281a0b0000000000000000000000000000000000081d314455657b90a0b2c6cab7a5947f6a5948342010000000000000000005182a3b4b6075879db2c0cfbcab9b8573604b3b2a180400000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a0000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1116181b1d1e1f1e1e1d1b1815110c0a040000000000000000000000000000000b20354b60758aa0b5caceb9a48e7a6d6d6d6d6d6d6d6d6d6d6d6e7073777d848b979faab6c2ccbdb1a1998373604b41311e0e000000000000000000000000000000000b1f3447596e8399aec1c9b5a4917c66574632261c1313171f2d3d4e5f70859bb0c3c9b5a48f7a655038271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041222303f4b59626e7c87929ba3aaafb4bac7bebfc0c0bfbfbdc5b8b3aea99f988e837869604b4538291b0b00000000000000000000000000000005182b3b4b6074869cb1becfc0b29d8774604b3b2a18020000000000000000000d1e324556677c91a2b4c9c9b5a3937e695947341f1000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e796457575757575757575758595b5962676e78818c9ca4b3bfcebfb2a197816c5f4e3c2c190600000000000000000000000000000004182a3b50657b90a3b5c9c2b29c8775614b44373025292a333d4a5b687d92a3b4c8c1b19c86715d4b371a0a0000000000000002092020202020202020202020202020202020202020202020202020202020202020202020200a04000000000000000000000000000000010820202020202020202020202020202020202020201f1e1d1a16120d0b0500000000000000000000000000000000000000000000000000000000040a0c1114151514110d0b0600000000000000070b0b0b0b080701000000000000000000000002122330404d5d657783919ca4b0b5c1c5c9cdc9c5c2c0bfbfc0c2c4c8c8c7bab4aea1998a7e6d60564639291a0a00000000000000000000000000000b20344859697f94a4b6bdc4b4a2917c675645321d0d00000000000000000000021628384d5f70859aabbcc9c1b39e8977614c3e2e1b08000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00000000010820202020202020200f0d0700000000000000000000000000000000000000000000010a10121d202020201a17110700000000000000070d0f1c1e180b090300000000000b20354b60758aa0b5caceb9a48e79644f424242424242424242433b484d525a626c7a8699a1b3bfcfbfb19f927d685a49352011000000000000000000000000000000000c23384c5d70859bb0becab6a598826d60554a43363e3a474c5b63798a9eb4c1c8b5a3917c67523f2e1c000000000000000a161e3535353535353535353535353535353535353535353535353535353535353535353535351f170c0000000000000000000000000009151d35353535353535353535353535353535353535353534322f2c27221f180d09030000000000000000000000000000000000000000000000090b171f2126292b2b29272320190e0a0400050b0d1c202020201e1b150c00000000000000000000102030414d5e667b8899a1b2b6c3c9cec9c7bab4b0acaaaaaaabacafb3b8c4c7c9bfb2a89e93827461574638281502000000000000000000000000021628384d62778a9ea8a8a8a8a69a84705f4d3828150000000000000000000000000a1a30414f647a8c9faba8a8a8a797826d5c4b37220d000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00000009151d353535353535353524211a0f010000000000000000000000000000000000000005131e252832353535352f2c24190b0000000002101b222431332d211e160a000000000b20354b60758aa0b5caceb9a48e79644f392d2d2d2d2d2d2d2d2e2b34373c484d5c64758399a1b3c2cebdb49e8a78624d3f2f1c08000000000000000000000000000000091c2f3f50657b8fa0b1c3c3b2a096817365605454535658616a79889da8b9ccbbaa9b8572604a3520110000000000000a1a28324a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a33291c0c0000000000000000000000091927314a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494745413d37342a211e160a010000000000000000000000000000000000000004111c232933363b3e40403f3c38352b211f170d19202231353535353330291d0f00000000000000000c1c2e3e4d5f677d8b9da6b3bfcacec7bab4ada99f9a9795949595979a9da6a9b2b6c3c6b9b4a0988475615645321d09000000000000000000000000091e3245566e83939393939393918778624d41301a0a000000000000000000000000001222364a5c6a7f8c9293939393938c7a644f3a250f000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a0000091927314a4a4a4a4a4a4a4a39362d200f00000000000000000000000000000000000005132330393d474a4a4a4a44403729190700000010202d36394649433632281a0a0000000b20354b60758aa0b5caceb9a48e79644f392418181818181818191820222b353e4a5761738399a4b6c8cdb9a899836e5d4b37230f000000000000000000000000000000001123374b5d6d8297a5b6c5beb19f96857a736c6a686b6f777f8a9da6b7c6beb49f8b7a645443301c07000000000002162838455e606060606060606060606060606060606060606060606060606060606060606060605e463a29170400000000000000000001152737445e606060606060606060606060606060606060605f5e5c5a56524c483b3632281d150900000000000000000000000000000000000c181f2f383a464c5054555554514d493c3633291c2b3438464a4a4a4a48443b2d1d0c00000000000004182a3a4b5c677d8c9fa9b7c4cfccbeb1a99f98908a8582807f7f808284888d949ca5b3b7c4beb2a29a8474604b36200b0000000000000000000000000b21364b60747e7e7e7e7e7e7d7c75625a493523120000000000000000000000000000071b2d3e4f616a797d7e7e7e7e7e7e7b65503b2510000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a0001152737445e606060606060604e4a3e2d1a070000000000000000000000000000000002132331414d525c5f606060595447372411000008182d3e4a4f5c5e584b453828160300000b20354b60758aa0b5caceb9a48e79644f39240f02020202020300050b0e19202d3946556175869caabbcec6b3a1907b65503e2d1a07000000000000000000000000000000081c2e3f4c6176879da7b8c5bdb1a39b8f87817f7e80848b949fa8b7c4beb2a0947f6a5c4a362513000000000000091e3245567075757575757575757575757575757575757575757575757575757575757575757575705846331f0a000000000000000000081d31445570757575757575757575757575757575757575757473726f6b676259534b45393127190f0100000000000000000000000000010f1d2a34404c50586166696a6a6966625a544c463a303c484d5c606060605d584c3b2915000000000000091f344759647a8b9faabac7d3c5b8b3a0978b827b75706d6b6a6a6b6d6f73787f87929da6b3bfb9a89e8878624d38230d000000000000000000000000091e3245566068686868686868676157493c2b1905000000000000000000000000000000102032434f5b6368686868686868655d4b37230e000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a00081d3144557075757575757575705c4a36210d00000000000000000000000000000000102031414d5f6772757575756f6554402c1700011426364a5c6471736d605645321e0900000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000050f1b29374657647a8c9fb4c7cfbfaf9a846f5c4a36210800000000000000000000000000000000111e3346576379899ea7b6c2c1b4b0a59d97949395999faab4bac6bcb5a098826d614f3e2d18080000000000000b21364b60758a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a76614c36210c0000000000000000000b20354b60748a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898784817d77706860574b44372c1f11030000000000000000000000000f1f2c3b474c5e666f767b7e80807e7c78726a61584a43485a627175757575736a5844301b000000000009192f404c6177889da9bac8d3c3b6a79e9082786d6560565755555556575a5b6369737d8899a1b4a99e8a7a645a4935200c00000000000000000000000002162838454b53535353535353514b46392b1e0e00000000000000000000000000000000021525323d4a4e52535353535353504b3f2f1c08000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000b20354b60758a8a8a8a8a8a8a7a644e39240f0000000000000000000000000000000c1c2d3e4d5f677d878a8a8a8a836f59442f1a00081c304354647a86888274604b36210b00000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000b1929394a5c6c8197a9bacec8b4a28e79644e3626140100000000000000000000000000000003172939495b647a899ca4b4bbc8c3b6b2aca9a8abaeb4bbc8c2b6ab9f968273604b43322010000000000000000b21364b60768b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8b76614c36210c0000000000000000000b20354b60758a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9f9e9c9a96928c857e75696055493d2e211102000000000000000000000e1e2c3d4959616f7b848a9093959594918d877f766860544d6278858a8a8a8a88735d48331e00000000011426374c5e6e8398a6b7c7d4c3b6a59c897b6d625a504b4538403f4040423d494e5460677683959f9f8b7c655c4a3c2c1906000000000000000000000000000a1a2832363e3e3e3e3e3e3e3c3633291b0e00000000000000000000000000000000000007151f2d36393d3e3e3e3e3e3e3b372f211100000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000b20354b60758a9f9f9f9f9f8e79644e39240f00000000000000000000000000000818293a4a5c677d929c9faa9f99846f59442f1a000b20354b6073879b9e947f69543f2a1400000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000b1b2d3e4d62778b9fb4c9d0c0ac96816c5443301c08000000000000000000000000000000000b1b2c3d4b5c647986969faab3b9c5c4c1bfbdc0c4c2c1b5b0a49c8d807260554431251502000000000000000b20364b60758ba6b7b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a18b76614c36210c0000000000000000000b20354b60758aa0b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bcb5b4b3b1afaba7a39b93887e73635b4b3f2e201000000000000000000009192b3c495b63778390999faaa9aaaaa9a6a49c94897e7261586c81969fab9f9d88735d48331e00000000081d314455667c91a0b2c4d4c7b7a59c8778655d4d483c3632282b2a2a2b2d2c3536434b586172808b8a7d675d4c3e2e1e0e0000000000000000000000000000000a161e212829292929292827211e170b0000000000000000000000000000000000000000010f1a21242829292929292925231c110300000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000b20354b60758aa0b5b5b5a38e79644e39240f00000000000000000000000000001325364758647a8b9fb1b4bbae99846f59442f1a000f243a4f64798fa4b09b85705b3a2a1704000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000010203448596e8398adc6d7c8b39d8874604b35200b00000000000000000000000000000000000f1f2e3e4b5b6375818b979ea7abafb2b3b3b2b0ada9a39b92867b6b605444372715070000000000000000081d31445573889db2c1d2cacacad7cdc9bfc1c6c8cacfdacacacacacacacacacacacacad3c3a18b76614c36210c0000000000000000000b20354b60758aa0b5cacacacdc4c1bfbfbfbfbfbfbfbfbfbfc0c1c5c4c0c1b4b0a79e948679655d4b3e2e1c0c0000000000000002152737485a63798899a1afb4bbc8bfbfbec2b6b1a79e9383766270859ab0bcb29d88735d48331e000000000b20354b6073869cb1becfcdbaa99d8777625a4c3f342b201d1516151516181a2126303a4754606b7877675f4d3f2f2010000000000000000000000000000000000002090b13131313131313120c0a030000000000000000000000000000000000000000000000070c0e13131313131313100e08000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000b20354b60758aa0b5cab9a38e79644e39240f000000000000000000000000000e1c3043546176879da9bacac4ae99846f59442f1a0013283d53687d92a8b49e89745847331f0a000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000005182b3b50667b90a8bacdcbb7a68f7a644f3a250f00000000000000000000000000000000000110202e3d4957606c7881899096999c9e9e9d9b98938d857d73655d4b433627190900000000000000000002152737566b8096a3b5c2d2e0d7c7bab4aaacb0b3b5bcb7b7b7b7b7b7b7b7b7b7b7b7b7c3b6a48b76614b36210c0000000000000000000b20354b60758aa0b5cae0cdbdb0aba9a9a9a9a9a9a9a9a9aaabacb0b4bac7c8c5b8b3a39b8a7b655c4a3a2a1704000000000000081d3144556278889da6b3bfcac9bcb4b0adabacaeb3b3a199867874899eb3c8b29d88735d48331e000000071b2d3e52677d92a4b6cad3c2b49f8b7a6459483c2f20190d090200000001000608141c2a36434b5a6262594d413021110200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd4c4ae99846f59442f1a000b20354b60758aa0b5cab9a38e79644e39240f0000000000000000000000000e1e2f404a60728399a5b6c7d7c4ae99846f59442f1a00162b40556b8095aab9a88c76614c37210c000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000d21364b6075899fb4c9d4c4a9947f69543f2a1400000000000000000000000000000000000002101f2c39454b5a626c757b80848788898886837e78716860554b3f3026180900000000000000000000000c21364b6175859ba4b5c2d2cdbaa99f95979b9e9faba2a2a2a2a2a2a2a2a2a2a2a2a2a2a59c87725746321e090000000000000000000b20354b60758aa0b5cad8c4b09e969494949494949494949496979b9fa9b0b5c1ccc2b5a89e8b7a645847331f0f000000000004172a3a4b6074859ba6b7c4c9bcb5ab9f9b979697999ea7b0a49c877a8fa7b9c8b29d88735d48331e0000000d22364a5c71859bb0c2d3cab6a4947f695c4a3b2b1e110500000000000000000000010c1826303c484d4d483b302312030000000000000001082020202020202020200e0c07000000000000000000000000000000000000060c0e1a1f2020202020201f0f0d070000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabfd3c4ae99846f59442f1a000b20354b60758aa0b5cab9a38e79644e39240f00000000000000000000000a1a2b3c4c5e6a7f95a1b3c3d4d9c4ae99846f59442f1a00182d43586d8298adc6a38e79644e39240f000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000091e3245566f849aafc4d8c3ae99836e5936251300000000000000000000000000000000000000010f1b28323c494d5660666b6f72737473716d69635b524b44372f1c1408000000000000000000000000091e3246576176869ca4b5c2c9b49f8a7f8186898a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c877b654f392816030000000000000000000b20354b60758aa0b5cad6c1ab96817f7f7f7f7f7f7f7f7f7f8082858a919ba3b4bbc8c6b9a99d8876614c3d2c1a06000000000a1f3347586a7f94a3b5c4c9bcab9f978c858281818488909ba3a59d899eb4c5c8b29d88735d48331e0000000f24394f64798ea3b5c9d4c4b19c8673604b3e2d1d0e000000000000000000000000000008141c2b353837342b1d12050000000000000009151d35353535353535353524211a0f010000000000000000000000000000000e1921232f343535353535353424221b1002000000000000000000000000000000000b20354b60758aa0b5bdbdb9a48e79644f39240f0000000000000000000000000000152a3f556a7f94aabdbdbdae99846f59442f1a000b20354b60758aa0b5cab9a38e79644e39240f0000000000000000000002152838485a667c8d9fb4bfd0e1d9c4ae99846f59442f1a001b30455a70859aafbba6917c66513c2611000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000000000002162838566b8096abc0d5c7b19c87725443301c0700000000000000000000000000000000000000000a161e2c3538454b50565a5d5e5e5d5b58544e493d353126191101000000000000000000000000000316283947586176869ca4b5c2baa99d87787173757777777777777777777777777777777772655d4b371b0b000000000000000000000b20354b60758aa0b5caceb8a38e796a6a6a6a6a6a6a6a6a6a6b6c70757c85949faabbcec7b7a697826d5b4936210c000000000c21374c6176899eb4c1cfbcab9f8d8177706d6b6c6f747b85949fa89ea8b9ccc8b29d88735d48331e000006192b3c566b8096abc1d2cbb7a6917c67554431200f00000000000000000000000000000000010e1920222220180d0000000000000000091927314a4a4a4a4a4a4a4a4a39362d1f0f00000000000000000000000000000e1e2c353844494a4a4a4a4a4a4a39362d2010000000000000000000000000000000000b20354b60748aa0a8a8a8a8a48e79644f39240f0000000000000000000000000000152a3f556a7f94a8a8a8a8a899846f59442f1a000b20354b60758aa0b5cab9a38e79644e39240f00000000000000000002101d3245566278899eabbccfddedd9c4ae99846f59442f1a001d32485d72879db2bea9937e69543e2914000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000013283d53687d92a8bdd2c9b49f8a75604a35200b000000000000000000000000000000000000000000030e19202832363b41444749494846433e38352c201d1409000000000000000000000000000000000b1b2a3a47586176869ca4b5c2b7a59d8778626062626262626262626262626262626261594f4b3f2e1b00000000000000000000000b20354b60758aa0b5caceb8a38e79635454545454545454555657566067727f8c9fb4becfc4b49f8c79634e39230f000000071b2d3e556a7f94a8b9ccc4b59f8d7d6c6259585657556066737f8c9fa9b9c6d6c8b29d88735d48331e00000b2035495a72879cb2c7dcc8b29d8874604b37261401000000000000000000000000000000000000050b0d0d0b05000000000000000001152737445e60606060606060604e4a3d2d1a070000000000000000000000000c1c2c3c494d595e6060606060605f4f4a3e2d1b070000000000000000000000000000000b20354b60738a9393939393938e79644f39240f0000000000000000000000000000152a3f556a7f93939393939393846f59442f1a000b20354b60758aa0b5cab9a38e79644e39240f000000000000000000102031424b6074859ba7b8c9d9ebeed9c4ae99846f59442f1a001f344a5f74899fb4c0ab95806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000011263b50667b90a5bbd0cdbaa98c77624c37220d0000000000000000000000000000000000000000000000060a161e21262b2f32333433312e2923211a0f08010000000000000000000000000000000000000c1c2a3a47586176869ca4b5c2b6a59c867762594d4d4d4d4d4d4d4d4d4d4d4d4d4d4c473a372e211000000000000000000000000b20354b60758aa0b5caceb8a38e79634e3f3f3f3f3f3f3f3f4138454b5460697d92a0b2c6cfbcab96816c573d2c1a0600000d22364a5c72879db2c6cbb7a695806b5f4c473b4137444b5460697c8b9fabbccfc8b29d88735d48331e00000d23384d62788da4b6cad6c6ab95806b5544311909000000000000000000000000000000000000000000000000000000000000000000081d314455707575757575757575705b4a36210c000000000000000000000009192a3a495b636f7475757575757574645c4a36220d0000000000000000000000000000000b20354a60727e7e7e7e7e7e7e7e77614c37220c00000000000000000000000000000f24394f647a7e7e7e7e7e7e7e7c66503b2611000b20354b60758aa0b5cab9a38e79644e39240f00000000000000000c1c2d3e4e606d8197a3b5c5d5dddfe6d9c4ae99846f59442f1a001f354a5f748a9fb4c0ab95806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000f24394f64798ea4b9ced7c7a28d78634d38230e0000000000000000000000000000000000000000000000000003090b11161a1d1e1f1e1c18140e0c06000000000000000000000000000000000000000000000c1c2a3a47586176869ca4b5c2b6a49c86776258473a373737373737373737373737342a221b100200000000000000000000000b20354b60758aa0b5caceb8a38e79634e392a2a2a2a2a2a2a2b273136434a5f6e8398adc4d4c9b39d88735b4935210c00000f243a4f64798fa5b7cac8b39d8875614b41342a2c263136434b5e667c8d9fb4cac8b29d88735d48331e000012273c52677c91a7c3d3ccb9a88f7a644f372715000000000000000000000000000000000000000000000000000000000000000000000b20354b60748a8a8a8a8a8a8a8a79634e39240e00000000000000000000021527374759637984898a8a8a8a8a8a8b79644f39240f000000000000000000000000000000071c304354606868686868686868615947341f0a00000000000000000000000000000d22364a5c6468686868686868665e4c38230f000b20354b60758aa0b5cab9a38e79644e39240f0000000000000008182a3a4a5c687d929fb1c1d2cbc8cbd4d9c4ae99846f59442f1a001f354a5f748a9fb4c0ab95806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000e23394e63788ea3b8cdceb9a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a3a47586177869ca4b5c2b6a49c86766158473a29222222222222222222221f180c08000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e392415151515151516151d2530414e64798ea6b7cbcbb7a68d78634e38230e0000152a3f556a7f94aac3d4c5aa95806a5746321f1816141d2630404c5e6e8398adc3c8b29d88735d48331e0001162c41566b8196abc0d6c9b49e8974604b35200b000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9f9f9f9f9f9f8e79634e39240e00000000000000000003111d314455617787999e9fab9f9f9f927d685c4a36220d00000000000000000000000000000000132536434a53535353535353534c473a2a18040000000000000000000000000000071b2d3e4a4f53535353535353504c402f1c09000b20354b60758aa0b5cab9a38e79644e39240f000000000000001325364758647a8b9fb4bdcec4b7b2b7c4d4c4ae99846f59442f1a001f354a5f748a9fb4c0ab95806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000e23384e63788da3b8cdceb9a48e79644f39240f00000000090f11202020202020201e110f0900000000000000000000000000000000000000000002090b191f2020202020202014120c03000000000000000000000c1c2a3a47596177869ca4b5c2b5a49b857661584639291b0d0d0d0d0d0d0d0c0a040000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000002081321364a5c73889db2c8d5c4a6917c67513c271200031729395a6f8499afc4ccb8a78e79644e39281605000108141c3040586d8297adc2c8b29d88735d48331e0004192f44596e8499aec3d9c5af9a85705443301c08000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5b5b5b5a38e79634e39240e000000000000000000112131424b6073849aa6b3b5bcb4a397816c604e3e2d1b070000000000000000000000000000000008182530353e3e3e3e3e3e3e3e37342a1c0c0000000000000000000000000000000010202d36393e3e3e3e3e3e3e3b382f221200000b20354b60758aa0b5cab9a38e79644e39240f0000000000000e1c3043546176879da9bacdc2b6a69da6b7cbc4ae99846f59442f1a001f354a5f748a9fb4c0ab95806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000f24394e64798ea3b9cedac9a38e78634e39230e000004111c2326353535353535353326231c11040000000000000000000000000000000000000a151d202e35353535353535352a27201507000000000000000000000c1c2a3a47596177869ca4b5c2b5a39b857661574639291b0a00000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000071a2d3d596f8499aec4d3bea8937e69533e2914000a1e33465773889db3c8c8b39e88735c4a361b0b0000000001182d42586d8297adc2c8b29d88735d48331e00071c31475c71869cb1c6d7c1ac97826c5736261401000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cacab8a38e79634e39240e00000000000000000e1e2e3f4e606c8197a2b4c4c8b8a69b8574604b4131201000000000000000000000000000000000000008131c202929292929292929221f180c000000000000000000000000000000000002101b22242929292929292926231c120400000b20354b60758aa0b5cab9a38e79644e39240f00000000000e1e2f404a60728399a5b7c7c6b6a49c889db2c8c4ae99846f59442f1a001f354a5f748a9fb4c0ab95806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000010253a4f657a8fa4bacfcfbcab8d77624d38220d000011222f383b4a4a4a4a4a4a4a483b382f221101000000000000000000000000000000000a1a273136434a4a4a4a4a4a4a4a3f3b32251503000000000000000000000c1c2a3a47596177869ca4b5c2b5a39b857561574639281a0a000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000182d42586d8297adc2d4bfa9947f6a543f2a15000c21364b61758ba6b7cbc5b09a85705b3d2d1a000000000003182d42586d8297adc2c8b29d88735d48331e00091e33495e73889eb3c8d4bfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000b1b2b3c4b5d697e939fb1c0cebbaa9e8877625645312313020000000000000000000000000000000000000000070b13131313131313130c0a040000000000000000000000000000000000000000070d0f13131313131313110f09000000000b20354b60758aa0b5cab9a38e79644e39240f000000000a1a2b3c4c5e6a8095a1b3c3cdb9a89c867e93a8bdc4ae99846f59442f1a001f354a5f748a9fb4c0ab95806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000012273c52677c91a7bcd1cab59f8a76604b36210b00091c2f404c50606060606060605e504c402f1f0f00000000000000000000000000000002152738454b585f60606060606060544f4332200c00000000000000000000000c1c2a3a47596177869ca4b6c1b5a39b847561574538281a0a0000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000417293a586e8398adc3d3bda8937e68533e2913000e23384e63798da3c4d4c2ac97826d57422d18000000000003182d42586d8297adc2c8b29d88735d48331e00081c304354748a9fb4c9d2bda8937d68533e281300000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000008182939495a657b8c9fb4bdcebeb49f8c7b6559483827150500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f00000002162838485a667c8d9fb4bfcdbdb49e8a797e93a8bdc4ae99846f59442f1a001f354a5f748a9fb4bdab95806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000000000000152a3f546a7f94a9bfd4c8b29d88735645321e09000f23384c5e667575757575757573665e4c3d2c18080000000000000000000000000000091d314556606e747575757575757569614f3b27120000000000000000000000000c1c2a3b47596177869ca4b6c1b4a29a84756056453828190900000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0101010101000108111f33475870859bb0c5d4c3a6917c67513c27120010253a4f657a8fa4bacfc0ab96806b56412b16010000000003182d42586d8297adc2c8b29d88735d48331e000b20354b60758aa9bacdd2bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000013253646576278899eaabbcec2b2a0947f695d4b3b2b1a0a00000000000000000000000000000000000000000000070d0f202020202020201f1d170e0200000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f000002101e3245566278899eabbccfc0b09f927d697e94a9bec4ae99846f59442f1a001f354a5f748a9fa8a8a895806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000071a2d3d596e8398aec3d8c5b09a85705b382816020011263b50667b8a8a8a8a8a8a8a887c665b493626140100000000000000000000000009192e3e4b6074828a8a8a8a8a8a8a8a7f69543f2a14000000000000000000000000000c1d2a3b47596177869ca4b6c0b4a29a847460564537271808000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e392416161616161617151d202f3e4c61768b9fb4cacab6a58d78624d38230d0011263b50667b90a5bbd0bfaa957f6a55402a15000000000003182d42586d8297adc2c8b29d88735d48331e000b20354b60758aaabbced1bca7927c67523d271200000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000010f1c3043546175869ca7b8c8c5b5a498826e614f3f2e1d0d00000000000000000000000000000000000000000002101b22243535353535353534322b201202000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f0000102031424b6074859ba7b8c9c4b4a296816c6a7f94a9bfc4ae99846f59442f1a001f354a5f748b9393939393806b56402b16000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000c21364a5b72889db2c7d8c7ab96806b56412b1600000f23384c5e6d8298a69f9f9fa69d8a79635443301c0e0000000000000000000000011527374b5c6c81969fa99f9f9faa9b8573604b35200b00000000000000000000000000000c1d2a3b47596277869ca4b6c0b4a2998374605544362614010000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e392b2b2b2b2b2b2b2d273135404c5c6a8095aabbcec4b29d87725a4935200c0011263c51667b91a6bbd0bea9947e69543f2914000000000003182d42586d8297adc2c8b29d88735d48331e00081d314455758a9fb4cad2bda8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000f2030414a60728399a4b5c5c9b9a79c8675614b433221110000000000000000000000000000000000000000000010202d36394a4a4a4a4a4a4a49463d30200e000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f000c1c2d3e4e606d8297a3b5c5c8b8a69b8474606a7f94a9bfc4ae99846f59442f1a0013283d53687d7e7e7e7e7e7a644f3a240f000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000011527374e63798ea5b7cbcebaa9917c66513c27110000091c2f404c6176889db3bec4b7a89b8573604b3c2b190500000000000000000000081d314455647a8d9fb4bab5c2b49f8b79635544311d080000000000000000000000000000000c1d2a3b47596277869ca4b6c0b3a1998373605443301c160600000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e40404040404040414237444b515e667a8a9fb4c8c8b7a6947f69543c2c19060011263b51667b90a6bbd0bfa9947f6a543f2a15000000000003182d42586d8297adc2c8b29d88735d48331e00011527495e74899eb3c9d3bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000c1c2d3e4d5f6a8095a1b3c2cfbcab9e897863574632241403000000000000000000000000000000000000000000071b2d3e4a4f606060606060605f5a4e3d2b17030000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f08182a3a4a5c687e929fb1c1cebbaa9d887762556a7f94a9bfc4ae99846f59442f1a0011263a4e60686868686868645c4b37220d000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000081d3144556a8095aac3d4c9b49f8a76614c36210c000000111f334758667c91a0b2c5c6b4a2937e695a4835201300000000000000000005192b3c4b6073869cabbccdc9b6a495806b5b4a37261401000000000000000000000000000000000c1d2a3b47596277869ca4b6bfb3a1988272604b4434241404000000000000000000000000000000000b20354b60758aa0b5caceb8a38e796356565656565656565657585560666e7c899ea9bac6b9aa9d8775614b36210e000010253a50657b8fa5bacfc0ab95806b56402b16010000000003182d42586d8297adc2c8b29d88735d48331e00001d32475d72879cb2c7d5c0ab96806b56412b1600000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000009192a3a4a5c677d8d9fb5bfcfbfb59f8d7c665a4939281606000000000000000000000000000000000000000000000d22364a5c7075757575757575746c5a46321d080000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f1426364758647a8b9fb4bdcebfb49f8c7b6559546a7f94a9bfc4ae99846f59442f1a000b1e31424e5353535353534f4b3e2e1b07000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000000031729394b6074879db2c8d4c4ae99846f5846331f0a0000000417293a4c5e6e8398a7b8ccc0b49e8a78624d41311d0d00000000000000000b2035485a697f94a4b5c9cfbcab9c8674604b3d2d19090000000000000000000000000000000000000d1d2a3b48596277869ca5b6bfb2a097816c625142322211000000000000000000000000000000000b20354b60758aa0b5caceb8a38e796b6b6b6b6b6b6b6b6b6b6c6d71757b83909ea7b8c1b5a89e8c7a645746321e0900000e23394e63798ea3c3d4c1ac97816c57422c17000000000003182d42586d8297adc2c8b29d88735d48331e00051a2f455a6f849aafc4d8c3ae98836e593b2a1804000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00021527374759647a8a9fabbccfc3b3a195806a5e4c3c2c1b0b00000000000000000000000000000000000000000000000f24394f647a8a8a8a8a8a8a8a8a745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39240f1c3043546176879da9bacdc2b2a0947f695d4b546a7f94a9bfc4ae99846f59442f1a00021324313a3d3e3e3e3e3e3a372e201000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000001131e334657687d92a6b7cbcbb7a6927c67523a291704000000000c1c30404c6177889eb3bfcdb9a89a846f5f4e3b2a18050000000000000b1b30404d62788a9fb4c2d2c3b59f8d7a655645321f0f00000000000000000000000000000000000000000d1d2a3b48596277879da6b7beb19f96806b604f402f1d0d0000000000000000000000000000000b20354b60758aa0b5cad7c2ac9781808080808080808080808283868a9099a1b3b8b5b1a39b8a7c665c4b3928160300000c21364b61758ba5b7cac4af9a846f5a3c2c19060000000003182d42586d8297adc2c8b29d88735d48331e0002172d42576c8297acc1d7c7b29d87725947341f0b000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e03111d3144556177879da8bac9c6b6a5998372604b402f1e0e0000000000000000000000000000000000000000000000000f24394f64798e9f9f9f9f9f9e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39241e2f404b60728399a5b7c7c6b6a498836e614f3f546a7f94a9bfc4ae99846f59442f1a000006131e2628292929292924221b100200000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000008141c31424b6175879db2c4d4c3b29d8874604b36200c000000000000121f344759677d92a1b3c5c6b3a1927d685947341f120000000000031629394d5e6f8399a8bacdcab7a596816c5d4b382815010000000000000000000000000000000000000000000d1d2a3b48596278889da8b9bdb09e937e695e4c3b2b180800000000000000000000000000000b20354b60758aa0b5cad9c5b19f979595959595959595959697989b9fa9aeb5b0aba49c92857a665e4c3e2e1b0b0000000a1e33465772889db2c7c8b39e88735a493520090000000003182d42586d8297adc2c8b29d88735d48331e000013283e53687d93a8c4d5cab6a58c77614c37220e000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e112131424b6073849aa5b7c6cdbaa89d8776615443302212000000000000000000000000000000000000000000000000000f24394f64798ea4b5b5b5b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39242b3c4c5e6a8095a1b3c3cdb9a89c8675614b433f546a7f94a9bfc4ae99846f59442f1a000000020b111313131313130f0d07000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000020910182630414e606c8197a6b7cbcab7a5947f695544311d0800000000000004182a3a4d5f6e8399a7b9ccbfb39e8977624c40301c0c00000000081e324657667c91a1b3c6cfbeb29d8775614b3f2e1a0a00000000000000000000000000000000000000000000000d1d2b3b485a63798a9eaabbbcb49f8c7c66594836251300000000000000000000000000000b20354b60758aa0b5cae1cebdb1acababababababababababacadb0b4baab9f9b958f867d73645c4c402f20100000000003172939596e8399aec8cbb8a68d78624d3726140100000003182d42586d8297adc2c8b29d88735d48331e00000e24394e63798ea6b8cbd3c3a7927d68523c2b19050000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e1e2e3f4e606c8197a2b4c3cdbdb49f8a7a64584736261404000000000000000000000000000000000000000000000000000f24394f64798ea4b9cac9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e392838495a667c8d9fb5bfcdbdb49e8a79635746333f546a7f94a9bfc4ae99846f59442f1a000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0f0f0f0f0f101113161e212e36434b5f687e929fb1c4cfbeb29d8775604b37271502000000000000000c1c30414c6277899eb3bfccb8a798836e5e4d3a291704000008182d3e4b6175879db2bfd0c5b2a0907c665746322110000000000000000000000000000000000000000000000000000d1d2b3c4a5b657b8c9fb4bfbbaa9e8977625443301c0b000000000000000000000000000b20354b60758aa0b5cadfd8cac0bdbababababababababbbcbfc2c6c9b59f8d85807a716860544a3e2f221202000000000014293e53697e93aabbcec4aa947f6a5544311d0f04000006182d42586d8297adc2c8b29d88735d48331e00000b20354b6074889eb3c8d9c4af99846f5a4835200f0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39241b2b3c4b5d697e939fb1c0d1c0b09f927d675c4a3a29180800000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e393245566278899eabbccfc0b09e917d675b4939293f546a7f94a9bfc4ae99846f59442f1a00000000050b0d0d0d0d0d0d0b0500000000000b20354b60758aa0b5caceb9a48e79644f39252525252525252526282832363e4a54606a7d8c9fb4bdcec3b2a0917c6756453219090000000000000000001320344859687d92a1b3c6c5b2a0917c665847331f1100011426364a5c6c8196a6b7cbcbb8a698826d5e4c3929160200000000000000000000000000000000000000000000000000000e1e2d3d4c5d6a7f94a1b3c6b8a79a8472604a392916030000000000000000000000000b20354b60758aa0b5cadccabaada7a5a5a5a5a5a5a5a5a6a7aaaeb3b8b49f8c847c72655d4b44372d2012040000000000000d22374d62778b9fb4cac7b19c8774604b3d2d1f17151519202e3d586d8297adc2c8b29d88735d48331e0000081c3043546c8297acc2d3cab49f8c78624d3d2c19090000000000000000000000000000000000050b0d100b080200000000000000000b20354b60758aa0b5caceb8a38e79634e39242939495a657b8c9fb4bdcec4b4a296816c5f4d3d2d1c0c0000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e39424b6074859ba7b8c9c4b4a296816c5f4d3d2c2a3f546a7f94a9bfc4ae99846f59442f1a0000000d18202222222222221f180d000000000b20354b60758aa0b5caceb9a48e79644f3a3a3a3a3a3a3a3a3a3b3d38454b515c6473808d9faabbcec5b6a598826e5f4d3828160000000000000000000005182b3b4e606f8499a8b9ccbfb39d8876614c3f2f1b0b081c304354647a8c9fb4c4d0bfb39e8876614c402f1b0b000000000000000000000000000000000000000000000000000000000f1f2f3f4f616f849aa8b9c5b4a2927d685746321e080000000000000000000000000b20354b60758aa0b5cad5c0ad9c928f8f8f8f8f8f8f90919295999ea7b1ab9f9991867b6c605544372715020000000000000b203448596e8399aec1cab6a4937e695b4a3d33292a2b2b353f4b5c6d8297adc2c8b29d88735d48331e00000114263650657b90a4b6cacfbcab97816c5b49372614010000000000000000000000000000020d18202225201d1509000000000000000b20354b60758aa0b5caceb8a38e79634e39253646576278899eaabbcec8b7a69a8474604b41301f0f000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e3e4e606d8297a3b5c5c8b7a69a8473604b41301f2a3f546a7f94a9bfc4ae99846f59442f1a00000d1d2b34373737373737342a1d0d0000000b20354b60758aa0b5caceb9a48e79644f4f4f4f4f4f4f4f4f4f5052555660666f7a85959fabbbc8c5b8a69d8776614c41301a0a00000000000000000000000d1d31414d62788a9eb4c0cbb7a697826d5d4c392816182b3b4b6073859baabbcec6b3a1917d675847332212000000000000000000000000000000000000000000000000000000000001112132434d62788a9eb4c4c0b39d8875614b3626140100000000000000000000000b20354b60758aa0b5cad2bda7927e7a7a7a7a7a7a7a7a7b7d7f8389919ca4b4afa49c908173605544311d1200000000000005182b3b50667b90a3b5c8c2b39e8a79635b4c473a3f403c484d5d657a8a9eb4c9c8b29d88735d48331e0000000b20354a6073869cb1c3d4c9b49f8b79635544311d15090000000000000000000000000a151d2b34373a363127190a0000000000000b20354b60758aa0b5caceb8a38e79634e393043546175869ca7b8c8cebbaa9d887762554431231301000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e4a5c687e939fb1c1cebbaa9d88776255443123152a3f546a7f94a9bfc4ae99846f59442f1a0005182b3b484d4d4d4d4d4c483b2a180500000b20354b60758aa0b5caceb9a48e79646464646464646464646566686b6f757c848f9ba3b5bcc9c3b7a79e887963584633231200000000000000000000000000132034485a687e93a2b4c6c4b19f907b655746321e20344859697e93a3b5c8ccb9a899836e5f4d3a2a170400000000000000000000000000000000000000000000000000000000000003152035485a6a7f94a6b8cbb7a6947f6a5443301c0800000000000000000000000b20354b60758aa0b5caceb8a38e79656565656565656566676a6e757c86969fb1b5b19f968373604b403018080000000000000d20354a6072859baabbccb9a89d88796a6158565455575a626c7b899ea8b9ccc8b29d88735d48331e000000071c304354687e93a5b7cacebbaa9b8573604b433127190f08000000000000000209121a28323b484c4f4b4437281a0a00000000000b20354b60758aa0b5caceb8a38e79634e3f424a60728399a4b5c5cebeb49f8b7b6459483727150500000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79644e58647a8b9fb4becebeb49f8c7b655948372715152a3f546a7f94a9bfc4ae99846f59442f1a000b203448596262626262625948341f0b00000b20354b60758aa0b5cad2bda7927e7a7a7a7a7a7a7a7a7a7a7a7b7d808489919aa2b0b5c1ccbfb3a59d897a645b493a2917050000000000000000000000000005192b3c4a6072849aa8bacdbeb29d8775614b3e2e2f404c6277899eb3c1d1c0b39e8977624d41301c0c0000000000000000000000000000000000050b0d0f0e0c06000000000000000005192b3c4b6075889db3c8c4b29d8773604b35200b00000000000000000000000b20354b60758aa0b5caceb8a38e796350505050505050515255566066748196a0b2bdb0a198826d5f4d362614010000000000071c304354647a8c9fb4c0c6b8a69d8b7f766f6c6a6a6c7178818c9ea7b8c6d6c8b29d88735d48331e000000001325364b6074879db2bfd0c8b4a296806b614b44372d221b13100e0d0d0e10161e212f38454b59626560554538281502000000000b20354b60758aa0b5caceb8a38e7963535456606a8095a1b3c2d2c1b2a0937e695d4b3b2a19090000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e7964546176879da9bacdc2b2a0947f695d4b3b2b1909152a3f546a7f94a9bfc4ae99846f59442f1a000d22374d62777777777777624c37220d00000b20354b60758aa0b5cad5c0ad9c928f8f8f8f8f8f8f8f8f8f8f9092959a9ea8afb3c0c9c5b8b3a1998779645c4a3c2c1b0b0000000000000000000000000000000d1c30435462788a9fb4c0cab7a596816c5c4b38384c5e6e8398a8b9ccc7b4a2937e685948342313000000000000000000000000000002090b17181f222423211a0f01000000000000000e1e3245576b8095abc4cab7a5907b66503b261100000000000000000000000b20354b60758aa0b5caceb8a38e79634e3a3a3a3a3a3b3c3d38454b55606d8298a7b9bfb2a0917c675443301c080000000000001325364a5c6b8095a2b4c0c4b8a99f958b84817f8082868d969faab3b7c4d4c8b29d88735d48331e00000000081d324556677d92a1b3c5d1c0b09e947f6c60554a3d372e28252322232426283236404c56606b777a74605645321d11000000000b20354b60758aa0b5caceb8a38e796969696b707e939eafbfcfc5b5a398826d604e3f2e1d0d000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79646072849aa5b7c7c6b6a498826e614f3f2e1d0d00152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74898c8c8c8c87725d47321d00000b20354b60758aa0b5cadccabaada7a4a4a4a4a4a4a4a4a4a4a4a5a7aaafb4b9c6c7c6b9b4a79e938377635b4a3e2d1e0e0000000000000000000000000000000000132536495a697e94a2b4c7c3b49f8c7a6456454556667b90a0b2c6cdbaa99a8472604a3b2b1805000000000000000000000000000a151d202c2a34373938352c1c1408000000000000031628394e63798ea6b8cbc3ab96816c56412c1700000000000000000000000b20354b60758aa0b5caceb8a38e79634e3925252525252628273137444c6177899eb3c9beb29d8773604b35200b00000000000008182d3e4b6074849aa2b1bdc7bab4aa9f9a969495979ca4abab9f9da6b7cbc8b29d88735d48331e00000000021528384a6072849aa7b8c8cdbcae9d948173645c4f4b3f3e3b393838393b38454b515e6674808b8f8474604b3f2f1c0c0000000b20354b60758aa0b5cad5c0aa95807e7e7e8085939caebcccc7b8a79b8575604b4231201000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab9a38e79646b8095a1b3c3cdb9a89c8675614b433221110000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899ea2a29c87725d47321d00000b20354b60758aa0b5cad3d3cac0bdb9b9b9b9b9b9b9b9b9b9babbbdc0c4c8c3c2b6b1a89e96897e726159493d2d201000000000000000000000000000000000000008182c3c4b6073859ba9bacdbcab9c8674604b4b6075879db2becfc1b49f8b79635443301d0d000000000000000000000000000a1a283236413b484c4f4e493d302618080000000000000a2136495b73889eb3c8c6b19b86715c3a291704000000000000000000000b20354b60758aa0b5caceb8a38e79634e3924101010101112151d273347586d8297adc2cab6a5907b66513b261100000000000000101d314556617584979fb1b5c2c8bbb4afaba9aaacb1b4a99f8c889db3c8c8b29d88735d48331e00000000000a1c3043546277899eaabbc9ccbbae9e9685796e655d5753504e4d4d4e5054566067707b86959fa296806b5d4b3a29170400000b20354b60758aa0b5cad8c3af9e95939394959ba3aebacbc5b8a99e89786256453224140200000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab8a38e79667c8d9fb5bfcdbcb49e8a79635746322514030000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000b20354b60758aa0b5bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbcbbc5b8b3aea9a49c948a8176686054473a2c1f1002000000000000000000000000000000000000000e1c30435463798b9fb4c1c9b6a495806b5c5b6b8095a5b6cac8b5a3947f6a5b493625130000000000000000000000000002152838454b565a596264635b4b43362614010000000000061a2c3d596f8499aec4c9b49f8a745846331f0a000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000209182a3a52677d92a7bcd4c3ac96816c57412c1702000000000000021527384657617481909ca4adb3b8c5bcbbc5b8b3ada29a8a7c8297adc2c8b29d88735d48331e0000000000001325364859657b8c9fabbbc8ccbdb0a39b8c837a726d68656362626365696e757c85909ca4b4b59f8d7b655847331f0a00000b20354b60758aa0b5cadfccbcafaaa8a8a9abb0b5c1cbc0b4a79e8b7b655a49382816060000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab8a38d7878899eabbccfc0b09e917d675b4939291606000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000b20354b60758aa0a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a6a4a79e99948e877f766c61584a43362a1c0f01000000000000000000000000000000000000000001142636495b6a7f94a3b5c8c2b49f8b796463798b9fb4c3cebbaa9b8573604b3c2c180800000000000000000000000000091d324556606c6f737779786e605443301c08000000000000182d42586d8297adc2cebbaa8b76614c36210c000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000010253b50657a90a5bacfc5b09b86705b46311b06000000000000000a1a29394656606c7b8690989ea7a5a6a6a4a79e989084796d8297adc2c8b29d88735d48331e00000000000008182b3b4c5d687e8d9faab9c6cdc1b5ab9f988f87827d7a787778797b7e8389919ba3b1b6c2bcab9d8876614c37210c00000b20354b60758aa0b5cadfdaccc3c0bebebec0c5c9d2c8b4a29a897c665d4b3c2b1a0a000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cab7a28d78859ba7b9c9c4b4a296806b5f4d3d2c1b0b00000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000b20354b60758a9393939393939393939393939393939393939291908e8b88847f79726a61584c473a3025180c000000000000000000000000000000000000000000000008182c3d4b6073859baabbcebbaa9b857372849aaabbcec2b49f8c7a645544311e0e00000000000000000000000000000b20364b60748185888c8e8d8272604b35200e000000000001172c41566c8196abc1d8c8a28d78624d38230d000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000010253a4f657a8fa4bacfc7b29d88725d48331d0800000000000000000b1b2938454b5e65737b83898d9091918f8d89827b6f636d8297adc2c8b29d88735d48331e000000000000000d1d2f3f4e60687e8c9ea8b5c1ccc9bcb4aea59d9793908e8d8d8e9093989ea8b0b4c1cac4b7ab9f937e69533e291400000b20354b60758aa0b5cae6d4c3b6b2b1b2b3b8c5c7d0c5af9a8577665e4c3f2f1e0e00000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cac2ad988398a3b5c5c8b7a69a8473604b41301f0f0000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000b20354a60727e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7c7b7976736e6a635b554c473a332a1c1308000000000000000000000000000000000000000000000000000f1d31445563798b9fb4c2c8b5a3937e7e92a2b4c8c9b6a495806b5c4a372715000000000000000000000000000000091d32455673889a9ea7a4a0917c67523c2c19060000000003162839586d8298adc2d5c5a28d77624d38220d000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000011273c51667c91a6bbd1c8b39d88735e48331e090000000000000000000b1a2832404c5460666e74787b7c7c7a78756d665e586d8297adc2c8b29d88735d48331e0000000000000000112131424e60687c899ba3b3b9c6cccac3b7b2aca8a5a3a2a2a3a5a9adb3b9c6c8c9bcb4a69d8d7f6a604e3b261100000b20354b60758aa0b5cadfcab6a59d9c9c9ea7afb3bfc8b4a2978174605544311d1403000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cac6b2a098a0b2c2cebbaa9d8877625544312312010000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d0000071c304354606868686868686868686868686868686868686868676664615859544e4a3d37332a1f170c000000000000000000000000000000000000000000000000000000011426374a5b6a8095a4b5c8c1b29c87899eb3c0cfbcab9c8674604b3e2d190900000000000000000000000000000002152838596e8398aeb8bfaf9a85705a49352013080000010c1e32455770859aafc5ccb8a78b76614c36210c000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0003090b0c0e131c2f3f556a7f94aabfd4c7b19c87725c47321d07000000000000000000000a151d2f36434a5054606265676665636055504c586d8297adc2c8b29d88735d48331e000000000000000003132331424e5e667885939ea8b3b8c5c9cac7c2bdbab8b7b7b8babec3c9cac9bcb4ab9f97887b6a615042311f0b00000b20354b60758aa0b5cadcc7b29d878787888e9aa1b3bfc0b1a0978373604b42312111010000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cacfbeb2adb2becfbeb49f8b7b65594837271505000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d000000132536434a535353535353535353535353535353535353535352514f4c463a3f39362d211f170c04000000000000000000000000000000000000000000000000000000000009192d3d4b6074869caabbcab6a49c9ea7b8ccc4b59f8d7b65564532200f000000000000000000000000000000000014293f54697e94aabbcab49f8c78624d4131221b1514151d2a3b4b60758a9fb4c9c8b39e88735746331e0a000000000000000000000b20354b60758aa0b5caceb8a38e79634e39242020161e21222425303c4b5d70859ab0c5d9c4af9a846f5a452f1a05000000000000000000000002111825303536434b4d5051514f4e4b443742586d8297adc2c8b29d88735d48331e00000000000000000005132331404c5a63737e89959ea7aeb4bac7c2c5c7c8c9c8c7c6c3c1c3b6b2ab9f988c8176655e50433324140200000b20354b60758aa0b5caceb8a38e79727273798499a1b3c2beb1a196816c604e402f1f0f0000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cadccfc6c2c6cfc2b2a0937e695d4b3b2a190900000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000008182530353e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3c3b393633292a24211a0f0a0400000000000000000000000000000000000000000000000000000000000000000f1d314455647a8c9fb4c2c3b6b2b3b8c5cbb7a697816c5d4b3828160100000000000000000000000000000000000d22384d62788b9fb4cabcab98826d5f4e42372e2b2a27313a4759687e93a9bacdc7ae99846f5939291703000000000000000000000b20354b60758aa0b5caceb8a38e79634e39353535283236373936434a5a657b90a2b4c8d4c4ab96806b56412b16010000000000000000000000000008131c20263035383b3c3c3a3835312742586d8297adc2c8b29d88735d48331e00000000000000000000051322303c4955606976808992999fa9a9acafb1b2b3b3b2b1aeaba7a49c958c83796c61584c40332515060000000b20354b60758aa0b5caceb8a38e79635d5b63738399a4b5c4bfb09f937e685e4c3d2c1c0c00000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cadfe1dad8d6c6b6a498826e604f3f2e1d0d0000000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d0000000008131c202929292929292929292929292929292929292928272624211f17150e0c070000000000000000000000000000000000000000000000000000000000000000000000021527374a5c6b8096a4b6cacac7c8ccd5c6b29d8775614b3f2e1a0a0000000000000000000000000000000000000b2035485a6e8399aebfc9b2a0927d68604f4b3e403f37444b586177889db3c7cdbaa9937e69533e291400000000000000000000000b20354b60758aa0b5caceb8a38e79634e4a4a4a4a4a454b4c4e5254606778879db2c0d1cbb7a6907b66503b261100000000000000000000000000000000070b141c20232627272523201d2d42586d8297adc2c8b29d88735d48331e000000000000000000000004121e2c37444b58616a757c848a8f94979a9c9d9e9e9d9c9996928d8780786e635b4c473a2f211507000000000b20354b60758aa0b5caceb8a38e79634e49556175869ca6b8c7bdb49f8c7c655b493a2a1a0a000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cadff5eee1ccb9a89c8675614b42322110000000000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d000000000000070b131313131313131313131313131313131313131312110f0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000009192d3e4b6075879cb1c7dcdcdee0ccb9a8907b6657463321110000000000000000000000000000000000000005192b3c50657b90a0b2c5beb49f8c7e6f645c5855545655606776859ba6b7cbc4b49f8a77614c37220c00000000000000000000000b20354b60758aa0b5caceb8a38e796360606060606057606163676b737d889da5b7cad2c1b39d8874604b35200b00000000000000000000000000000000000001080b0d101211100e0b182d42586d8297adc2c8b29d88735d48331e000000000000000000000000000e1926313a474c5760676f757a7f828587888988888684817d78726a635a4e4a3d332a1c110300000000000b20354b60758aa0b5caceb8a38e79634e3746576278889da9bacdbbaa9e8979635947382815020000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cadfeedecdbcb49e8a7963574632241403000000000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c30414c6177889eb3c8dddfd6dec9b49e8977614c41301d0d00000000000000000000000000000000000000000e23374b5d6e8398a7b8c7bbaa9f93847a726d6a696b6e747d879ba3b4c4c8b8a695806b5947341f0a00000000000000000000000b20354b60758aa0b5caceb8a38e7975757575757575757677797c8187929da6b7c3d3c4b5a3947e695544311d0800000000000000000000000000000000000000000000000000000003182d42586d8297adc2c8b29d88735d48331e000000000000000000000000000009141d2a3339454b525660656a6d707273747372716e6c67625a554d493c362d1f170c000000000000000b20354b60758aa0b5caceb8a38e79634e3939485a647a8b9fb4bcc8b9a79d8777615645321d150500000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cadfe2d1c0b09e917c675b493928160600000000000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d0000000000000000000000000000000000000003090b0f12151617171614120e0b0801000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4d5f6e8398a7b8cccecac1c4ccb9a898836e5f4d3b2b180500000000000000000000000000000000000000081c2f3f4c6177899ea9bac7bbb4a1998f8782807f808388929da6b4c1c9bbaa9d8875614b3a2a180400000000000000000000000b20354b60758aa0b5cad0bca9978e8a8a8a8a8a8a8a8a8b8c8e91969da5b3b7c4cec3b6a69b8574604b3726140100000000000000000000000000000000000000000000000000000003182d42586d8297adc2c8b29d88735d48331e000000000000000000000000000000010c171f28323638454b4f54575a5c5d5e5e5d5c5956524d483c38352c211a0f0400000000000000000b20354b60758aa0b5caceb8a38e79634e392b3c4b5c677d929eafbec5b6a59b8474604b4333231302000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cae6d4c4b4a296806b5f4d3d2c1b0b0000000000000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000000000000000000000000000000050b0d161e2125282a2b2c2c2b2a2724201c140c0a0300000000000000000000000000000000000000000000000000000000000000000000000c1f344759677c91a0b2c5c8bbb4acb1bdc6b2a0917d6759483420130000000000000000000000000000000000000000111f344759667c8b9fa9b7c4bfb3afa59c97959495999ea7b2b7c4c5b9ab9f8c7c655746331c0c0000000000000000000000000b20354b60758aa0b5cad8c6b5a9a39f9f9f9f9f9f9f9fa0a1a3a7abb2b7c3cbc8bbb4a59c88786255443119090000000000000000000000000000000000000000000000000000000003182d42586d8297adc2c8b29d88735d48331e0000000000000000000000000000000000040a161e212832363a3f424547484949484744413d38352b2320190e07000000000000000000000b20354b60758aa0b5caceb8a38e79634e39242e3e4d5f6b8095a0b2c1c3b4a298826d615041302010000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cad8c8b7a69a8473604b40301f0f000000000000000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d0000000000000000000000000000070e1920222832363a3d3f414141403f3c39353026211e170b0500000000000000000000000000000000000000000000000000000000000000000c1c30414c6177889eb3bfcebbaa9f979fb1c3beb39e8977624c42311e0e0000000000000000000000000000000000000004182a3b4c5e667c8b9da6b5bcc9c3b6b2adaaa9abaeb3b8c5cac0b4a79e8d7d675e4c392917000000000000000000000000000b20354b60758aa0b5cad3d3c6bcb8b5b5b5b5b5b5b5b5b5b6b8bcc0c7c6c6b9b4aa9f978779635a49372715000000000000000000000000000000000000000000000000000000000003182d42586d8297adc2c8b29d88735d48331e0000000000000000000000000000000000000003090b151d20252a2d303233343333312f2c282320190e0c060000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39242030414a60728298a3b5c4c0b2a0957f6a5f4d3e2e1e0e0000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cacebbaa9d887762554431221201000000000000000000000000152a3f546a7f94a9bfc4ae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000000000000000000000004101b222b353838454b4f52555657575654514e4b43363633291f180d01000000000000000000000000000000000000000000000000000000000004182a3a4d5f6e8398a7b8ccc3b49f8c8197a5b7cab8a799836f604e3c2b1808000000000000000000000000000000000000000c1d2f404c5e667b88979fabb4b9c6c3c2bfbec0c3c4c9bcb4aea29a897d675f4d402f1b0b000000000000000000000000000b20354b60758aa0b5bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbcbbc7bab4b1aca89e978c8175635b493c2b1909000000000000000000000000000000000000000000000000000000000003182d42586d8297adc2c8b29d88735d48331e0000000000000000000000000000000000000000000002090b1015181b1d1e1f1e1d1c1917120d0b060000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e3924131c3043546075859ba6b7c6beb59f8d7d675c4b3c2b1b0b00000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5bdbdb49f8b7b6459473726140400000000000000000000000000152a3f546a7f94a9bdbdae99846f59442f1a001f34495e74899eb3b29c87725d47321d00000000000000000000000c171f2d363c484d54566064676a6b6c6c6b6967636054524b4639342a1d1409000000000000000000000000000000000000000000000000000000000c1f344759677c91a0b2c5cab7a5968075879db2bec5b3a1927d685a48362513000000000000000000000000000000000000000012222f404c5d6576828c969ea8aaaeb0b2b3b2b1afabab9f998f8478675f4d4130211100000000000000000000000000000b20354b60758aa0a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a6a4a99f9b96918982796c6157493c2c1e0e00000000000000000000000000000000000000000000000000000000000003182d42586d8297adc2c8b29d88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e13253645576277889da8bac9bcab9f8b7a645a4839291909000000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60748aa0a8a8a89f937e695d4b3b2a19090000000000000000000000000000152a3f546a7f94a8a8a8a899846f59442f1a001f34495e74899eb3b29c87725d47321d00000000000000000003101c2a333e4a4e5a626970767a7d7f808181807f7c79746f6761574c473b3126190d00000000000000000000000000000000000000000000000000000c1c30414c6177889eb3becfbeb29d8775667c90a0b2c4bfb39e8978625443301c0e000000000000000000000000000000000000000412222f3f4c58616d7981898f94999b9c9e9d9c9a96918b837a70625a4d413023130300000000000000000000000000000b20354b60758a939393939393939393939393939393939292918f8d8a86817c756c635b4b46392c1e0e0000000000000000000000000000000000000000000000000000000000000003182d42586d8297adc2c6b29d88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000000050b0d2020202020202014120c0200000000000b20354b60758aa0b5caceb8a38e79634e39240e081828394859647a8a9fabbcc9baa99d8878625746372614010000000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354b60738a939393928f816c604f3f2e1d0d000000000000000000000000000000152a3f546a7f939393939393846f59442f1a001f34495e74899eb3b29c87725d47321d00000000000000000513212e3a474c5c646e787f858a8f92949696969594918e89847d766b62594b44372b1d0f01000000000000000000000000000000000000000000000004182a3a4d5f6e8398a6b8cbc5b2a0907b665e6d8298a6b8cbb9a89a8472604a3c2c1909000000000000000000000000000000000000000412212f3a464c5b636c757a7f84868789888685817c766e655d4d483c302313050000000000000000000000000000000b20354a60727e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7d7d7b7a7875716c6660574e493d33291b0e000000000000000000000000000000000000000000000000000000000000000003182d42586d8297adb0b0b09d88735d48331e0000000000000000000000000000000000000000000000000000000000000000000000000d181f353535353535353529261f1406000000000b20354b60758aa0b5caceb8a38e79634e39240e000a1b2b3b4a5c677d8d9fb5bec7b8a69c8675615544311d140300000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000b20354a60727e7e7e7e7d7a6c635242322010000000000000000000000000000000000f24394e647a7e7e7e7e7e7e7c66503b2611001f34495e74899eb3b29c87725d47321d00000000000000051323303f4b58616d7a838b949b9faaa7aaabacacaba9a6a79e9992898077696055483b2c1f0f00000000000000000000000000000000000000000000000c1f344759677c91a0b2c5ccb8a798826d5e4c6176889eb3bfc6b4a2937e695b49372614010000000000000000000000000000000000000003111c29333d494e5660656a6e70727373716f6c6661584f4b3f352b1e120500000000000000000000000000000000071c3043546068686868686868686868686868686868686867666462605457514b4539352c1e170b00000000000000000000000000000000000000000000000000000000000000000003182d42586d82979b9b9b9b9b88735d48331e00000000000000000000000000000000000000000000000000000000000000000000000d1d2a344a4a4a4a4a4a4a4a3e3b322414020000000b20354b60758aa0b5caceb8a38e79634e39240e00000d1d2d3e4d5f6a7f94a0b2c1c4b5a4998373604b4231221101000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a000000000000000000000000000000000000000000000000000000000000000000071c304354606868686868655d524535241402000000000000000000000000000000000d21364a5c64686868686868665e4c38230f001f34495e74899eb3b29c87725d47321d00000000000003132330414d5d6576828d989fabb0b4bbc8bfc0c1c1c0bec5b9b3aea89e96897f736259493d2c1f0e0000000000000000000000000000000000000000000c1c30414c6177889eb3becfc0b39e8977614c4758677c91a0b2c5c0b49f8a79635544311d0f0000000000000000000000000000000000000000000c171f2c3538454b5055595b5d5e5d5c5a56514c473a372e20190e00000000000000000000000000000000000000132536434a53535353535353535353535353535353535352514f4d4b43363c363228211a0f030000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f868686868686836f59442f1a0000000000000000000000000000000000000000000000000000000000000000000005182a3b485e60606060606060534f42321f0c0000000b20354b60758aa0b5caceb8a38e79634e39240e0000001020304050616d8298a3b4c3c2b3a196816c604e402f1f0f000000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a00000000000000000000000000000000000000000000000000000000000000000000132536434a53535353534f4b3f352717060000000000000000000000000000000000071a2d3e4a4e535353535353504c402f1c09001f34495e74899eb3b29c87725d47321d000000000000112130414d5f677b88979fabb4bcc9c9cec9c6c4c2c3c5c7caccc9c6b9b4a89e948477635b493d2c1c0c0000000000000000000000000000000000000004182a3a4d5f6e8398a6b8cbc7b4a2927d6859473a4d5f6e8398a7b8ccbaa89b8573604b3d2d1909000000000000000000000000000000000000000000040f1a212832363a3f44464749484745413c373329221b1006000000000000000000000000000000000000000008182530353e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3d3c3a3835302627211e160a060000000000000000000000000000000000000000000000000000000000000000000000000013283c50616a7171717171716f6554412c18000000000000000000000000000000000000000000000000000000000000000000000b1f344859707575757575757569604f3b26120000000b20354b60758aa0b5caceb8a38e79634e39240e00000002122233434b6074859ba5b7c6bfb09f937e695e4c3d2d1c0c0000000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000008182530353e3e3e3e3d3a372e211709000000000000000000000000000000000000000f202d36393e3e3e3e3e3e3b382f221200001f34495e74899eb3b29c87725d47321d00000000000c1c2e3f4d5f677d8c9da6b5bcc9cfc7c8bbb4b1afadaeafb2b6c3c6c9ccc6b9b3a29a8779635b493a2a18040000000000000000000000000000000000000c1f334758677c91a0b2c5cdbaa99a846f5f4e3a30414c6177899eb3bfc6b4a3947f6a5b4a3727150200000000000000000000000000000000000000000000060a161e21252a2f3132343331302c27211f170c08000000000000000000000000000000000000000000000008131c2029292929292929292929292929292929282828262523201c14110b09030000000000000000000000000000000000000000000000000000000000000000000000000000000d20334350555b5b5b5b5b5b595447372411000000000000000000000000000000000000000000000000000000000000000000000d22374c62778a8a8a8a8a8a8a7e69533e29140000000b20354b60758aa0b5caceb8a38e79634e39240e0000000004151d3245566177879da8b9c9bdb49f8c7c665b4a3a2a1a0a00000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a000000000000000000000000000000000000000000000000000000000000000000000008131c20292929292825221b10030000000000000000000000000000000000000000010f1a212429292929292926231c120400001f34495e74899eb3b29c87725d47321d0000000004172a3a4b5d677d8d9faab7c4cfc9bfb3aeaa9f9c9a98989a9ca5a8b1b5c2ccccc0b4a69d8979635847331f1300000000000000000000000000000000000c1c30404c6177889eb3becfc1b49f8a78634d41311f344759677d92a1b3c5c1b49f8b79635544311d1000000000000000000000000000000000000000000000000002090b1015191b1d1e1e1c1a17110c0a04000000000000000000000000000000000000000000000000000000070b13131313131313131313131313131313131312110f0d0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000041525333c40464646464646444137291907000000000000000000000000000000000000000000000000000000000000000000000d22374c62778c9f9f9f9f9f937e69533e29140000000b20354b60758aa0b5caceb8a38e79634e39240e000000000002152838475963798a9eabbccebbaa9e8a7963594738281502000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a00000000000000000000000000000000000000000000000000000000000000000000000000070b1313131313100e08000000000000000000000000000000000000000000000000070d0f131313131313110f09000000001f34495e74899eb3b29c87725d47321d000000000a1f334758657b8c9fabbbc8d0c1b5b1a199918a8684838385878d939ca4b3b8c5d1c4b7a79d8776614c41301a0a00000000000000000000000000000004182a3a4d5f6e8398a6b8cbc8b5a3947f6a5a493523182a3b4d5f6f8399a7b9ccbaa99b8574604b3e2d1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520282a3131313131312f2c24190b00000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1b5b5b5a8937e69533e29140000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000a1a2a3b4a5b667c8d9fb4bdc8b9a89d8777615645321d15000000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e74899eb3b29c87725d47321d000000071b2d3e4c6176889daabbc9d0bfb3a39b8f837c76716f6d6e7072787e86929ea7b6c3d3c5b6a599836e5f4d3828150200000000000000000000000000000c1f334758677c91a0b2c5cebbaa9b8573604b3c2c190c1d30414d6277899eb3c0c7b5a395806a5c4a382816020000000000000000000000000000000000000000000002090b0f121516161614110e0c060000000000000000000000000000000000000000000000000000000000000000050b0d11131516161615120f0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d13151c1c1c1c1c1c1a1811070000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1b7cabea8937e69533e29140000000b20354b60758aa0b5bdbdb8a38e79634e39240e000000000000000c1d2d3d4c5e697f949fb5bcc6b7a59b8574604b43331b0a0000000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a000000000000000000000000000000000000020b1113202020202020202020202020202020202020202020202020202020202020202020202020201917110700000000000000090f1120202020202020100e08000000001f34495e74899eb3b29c87725d47321d0000000d22364a5c6d8297a6b7c8d0bfb3a199857b6e6761585a58595a5a6269737d899ca4b6c3d3c3b3a1927d675645321d09000000000000000000000000000c1c30404c6177889eb3becfc3b49f8c7a645544311e0e001320344859687e92a2b3c6c1b49f8c7a645645321e110000000000000000000000000000000000000002090b151d2024282a2b2c2b2927232119100e080000000000000000000000000000000000000000000000000000070d0f18202226282a2b2c2b2a2724211e160c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e29140000000b20354b60758aa0a8a8a8a8a38e79634e39240e00000000000000000f1f2f404f616c81969faba8a8a8a398826d61503928160300000000000000000000000000000000000f24394f64798ea4b9cec9b49e89745f49341f0a000000000000000000000000000000000006131e2628353535353535353535353535353535353535353535353535353535353535353535353535352f2c24190a0000000004111c23263535353535353525231c110300001f34495e74899eb3b29c87725d47321d000005192b3c4f647a8d9fb5c4d4c4b3a1998375655d524c463a43433c484d55606878869ca5b6c8cfbfb29d8774604b36200f00000000000000000000000004182a3a4d5f6e8398a6b8cbcab7a596816b5c4a372715000005182b3b4e606f849aa8b9cdbbaa9c8674604b3f2e1b0b00000000000000000000000000000000020a161e212731363a3d3f4041403f3c38352c25231c1108000000000000000000000000000000000000000000010a101b22242b34373b3e404141403f3d3a363228211f170c0600000000000000000000000000010a10121d1d1d1d1d1d1d0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e14161d1d1d1d1d1d1b191208000000000d22374c62778ca1b7ccbea8937e69533e29140000000b20354b60758a9393939393938e79634e39240e000000000000000001122232434b6072818c919393939393937f6a5745321e0900000000020b11131414141414141414141424394f64798ea4b9cec9b49e89745f49341f14141414141414141414110f0900000000021324313a3d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a44403629190700000011222f383b4a4a4a4a4a4a4a3a372e211100001f34495e74899eb3b29c87725d47321d00000b2035485a6e8399abbccfcbb7a699837360574b3f3633292e2e2b3537444b5a6276879daabbcecab7a5937d68533d2d1a0700000000000000000000000c1f334758677c91a0b2c4cfbeb29d8775614b3e2d19090000000d1d31424d62788a9eb4c0c8b6a496806b5d4b39281603000000000000000000000000000009151d28323638454b4f525556565554514d493c3a372e221b100400000000000000000000000000000000000005131e252d36393b484c50535556565654524f4b453837332921190e010000000000000000000005131e252832323232323232221f180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081621292b323232323232302d261a0c0000000d22374c62778ca1b7ccbea8937e69533e29140000000b20354a60727e7e7e7e7e7e7e7e76614c37210c00000000000000000004141c304354606c787c7d7e7e7e7e7e7e75604b36210b00000006141f26282929292929292929292929394f64798ea4b9cec9b49e89745f4934292929292929292929292926231c110400000b1e31424e53606060606060606060606060606060606060606060606060606060606060606060606060605954473624110000091c2f404c5060606060606060504b3f2e1c08001f34495e74899eb3b29c87725d47321d00000d22384d62788b9fb4c9d3c2b29d8876615545392e211f171819192026313c4958647a8b9fb4c8d4c3b19c86715b4a36210c000000000000000000000c1c30404c6177889eb3becfc5b2a0907b6657463220100000000000132035485a697e93a2b4c7c2b49f8c7b655746321e11000000000000000000000000010f19273138454b52566064676a6b6b6b6966635b57504b3f372e1f170c000000000000000000000000000000000d192030393e4a4f57596266686a6b6b6b6a67646056544c473a352c1c1408000000000000000001132330393d4747474747474737342a1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041626343d414747474747474542382a1a0800000d22374c62778ca1b7ccbea8937e69533e2914000000071c304354606868686868686868615847331f0a0000000000000000000001142636434b5a626768686868686868605745321e090000021424313a3e3e3e3e3e3e3e3e3e3e3e3e3e4f64798ea4b9cec9b49e89745f493e3e3e3e3e3e3e3e3e3e3e3e3b382f2211000011263a4e6068757575757575757575757575757575757575757575757575757575757575757575757575756e6554402c1702000f23384c5e6675757575757575655d4b37230e001f34495e74899eb3b29c87725d47321d000316283854697f94aabbcecab6a4917c66584737281b110a0400000509141d2c3a4b5c6b8096aabbcec9b5a48e79634e39240e00000000000000000004172a3a4d5e6e8298a6b8cbccb8a798826d5e4c39281602000000000005192b3c4a6072849aa9bacdbcab9d8775614b402f1c0c0000000000000000000004121f2d37444b5660686f75797d7f8081807e7c78736d655d4f4b3f332a1c0f0100000000000000000000000004121d2b34414d525c646c72777b7d7f8081807f7c7976706961584d493c3026180c000000000000000a1e30414d525d5d5d5d5d5d5d4c483b2a180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e21344451565d5d5d5d5d5d5b554838261200000d22374c62778ca1b7ccbea8937e69533e291400000000132536434a53535353535353534c473a2917040000000000000000000000081826303c484d52535353535353534b453928160300000b1f31424e535353535353535353535353535364798ea4b9cec9b49e89745f53535353535353535353535353504c402f1c090013283d53687e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a836e59442f19040011263b50667c8a8a8a8a8a8a8a7b65503a2510001f34495e74899eb3b29c87725d47321d00091e32455670859bb0c8d9c7b19c8773604a3a2a190a00000000000000010e1c2e3e4d62788b9fb4cad2c2aa957f6a553626140100000000000000000a1f334758667c91a0b2c4d0c0b39e8977614c402f1b0b000000000000000e1c30435463788a9fb4c1c9b6a597816c5e4c3a29170400000000000000000412222f3d4a556069757d848a8f929495969594918d88827a70655d4c473a2d1f1103000000000000000000000312222f3c484d5f67707981878c90939596969594928f8a857e766d635b4b43362a1c0c0000000000001025394d5f6772727272727272625948341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293d51626b727272727272706655422d1900000d22374c62778ca1b7ccbea8937e69533e29140000000008182530353e3e3e3e3e3e3e3e3733291c0c0000000000000000000000000008141c2b35383c3e3e3e3e3e3e3e3632281b0a00000011263a4e60686969696969696969696969696969798ea4b9cec9b49e89746969696969696969696969696969665e4c38230f0013283d53687d929f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f99846e59442f19040011263b50667b909f9f9f9f9f8f7a65503a2510001f34495e74899eb3b29c87725d47321d000b21364b60758a9fb4cad5c4a8937e695443301c0c0000000000000000000010203448596e8398aec3d8c4af9a856f5443301c0800000000000000091d30404c6176889eb3bebdc5b4a2927d685947342211000000000000000000132536495a697f94a3b4c6c3b19f907b655846331f0b000000000000000112222f404c5b63747e8892999fa9a7aaababaaa9a6a69d978f847a6e61584a3d2f21110200000000000000000211212f404c5a626f7c858e979da5a5a8aaabababa9a7aa9f9a948a8278696054473a2a1c0c000000000012283d52677d8787878787878777624c37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8087878787878784705b45301b00000d22374c62778ca1b7ccbea8937e69533e2914000000000008131c202929292929292929211f170c000000000000000000000000000000010e1920222728292929292928211e160a0000000013283e53687d7e7e7e7e7e7e7e7e7e7e7e7e7e7e8096abc0d5c9b49f8b7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7b66503b26110013283d53687d92a8b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ae99846e59442f19040011263b50667b90a5b5b5b5a58f7a65503a2510001f34495e74899eb3b29c87725d47321d0010253a4f657a8faabbcecbb8a68d78634e362513000000000000000000000005192b3b53687d93a8c7d7c9b49e8974604b35200b000000000000000f24394d5e6e8298a6a8a8a8a8a79a846f5f4e3a2a180400000000000000000008182c3c4b6073859ba8a8a8a8a89d8776614c392816030000000000000f1f2f404c5e667986949ea6afb4bac7bfc0c0c0bec4b8b3aca29a8f8376645c4c402f2010000000000000000010202f404c5e667884919ba3acb2b7c3bdbfbebdbfbfc8bbb4b0a99f978a7f726158473a2a19090000000014293e53697e939c9c9c9c9c8c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d42586d82979c9c9c9c9c88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000070b13131313131313130c0a04000000000000000000000000000000000000050b0d12131313131313130b090300000000001f34495f748a9393939393939393939393939393969eb0c4d8cebaa99f939393939393939393939393939393836e59432e190012273c52677c91abbccfcacacacad1c8c5c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2ae99846e59442f19040011263b50667b90a5bbcabaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d0013283d53687d92a8c8d8c8b39e88735b493518080000000000000000000000000e23384e63788da9bacdcdb9a88d78624d38220d0000000000000011273c51667c91939393939393928978624d41311c0c00000000000000000000000e1c30435463798a92939393939393826d5746321e0900000000000a1a2d3d4c5e667c8a9ca4b3b8c4c7bab4b1afaeb0b3b7c4c8c0b4afa199877a655e4c3e2d1b0b00000000000008182d3e4c5e667c899aa2b0b4c1c6b9b4afaba9a8aaacb1b5bcc7bab4a99f9484766158473726140100000014293e53697e93a8b2b2b2a28c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d42586d8297adb2b2b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495f74899ea8a8a8a8a8a8a8a8a8a8a8a8a8abb0bccddfd8c7bab4a8a8a8a8a8a8a8a8a8a8a8a8a8a898826e59432e19000e23384d63788c9fb5c4d4e7e4d1c1b4b0acacacacacacacacacacacacacacacacacacacacacacacacac99846e59442f19040011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00152b40556a8095aabfd5c4af9a846f5a3d2c1a000000000000000000000000000c2135495b74899fb4c9d6c6a48f7a654f3a25100000000000000011273c51667c7e7e7e7e7e7e7e7d78625a4935231300000000000000000000000001142636495b63787d7e7e7e7e7e7e7e75614b36210c00000000021527384a5b667c8c9fa9b5c2bfb3afa99f9b9a999b9da6aab3b8c5bfb3a59d8a7c655c4a3929170300000000011426364a5c657c8b9ea8b3c0c3b6b2a89e9995949394969b9fabb4bbc7bab4a29a8676615544311d0d00000014293e53697e93a8bec7b7a28c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d42586d8297adc2c7b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000000000090f111d1d1d1d1d1c14120c03000000000000000000000000000000000000000000000000000000000000001f34495f74899eb4bebebebebebebebebebebebec0c4cdd3d3d3d8cec9bebebebebebebebebebebebebeae98836e59432e19000c2035495a6d8298a6b7c9d9ddc8b4a39b9797979797979797979797979797979797979797979797979797836e59442f19040011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00172c42576c8197acc1d6c3ad98836e58432e1900000000000000000000000000061a2c3d5d73889db2c8d0bba6917c66513c2611000000000000000f24394d5e666868686868686868625a493c2c19050000000000000000000000000008182c3d495a636868686868686868615746321e0900000000091d31455663798a9faabac5b8b3a199908a86848485888e959ea7b1bdc3b6a89e8a7a645746331e0e00000000081c304354647a8a9fa9b9c6beb2a59d928984807e7e7f81868c969faab7c4c0b4a49a8473604b3b2a1805000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d42586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e2914000000000000000000000004121d242732323232323129272014070000000000000000000000000000000000000000000000000000000000001f34495f74899eb4bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdae98836e59432e190006192c3c4c6176879dabbccfdbc5b09b8582828282828282828282828282828282828282828282828282827e69533e2914000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182d42586d8297adc2d6c1ac97816c57422c1702000000000000000000000000001c31475c71869cb1c6d1bca7927c67523d271200000000000000091d30404d5153535353535353524d483c2c1e0e0000000000000000000000000000000f1f2c3c494d53535353535353534b4639281603000000021628384b6074869ca8bac4b8a79e90847b76716f6e7073797f89979faebac6b9a89d8776614c3c2c19060000011426374b6073859ba9bac7bfb2a098877d756f6b69686a6c7178818b9da6b7c6c2b4a2947f6a5947341f0b000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003182d42586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e29140000000000000000000000122230393c4747474747463f3b3225140500000000000000000000000000000000000000000000000000000000001f34495f74899ea8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898836e59432e1900000e1f334758657b8c9fb4c1d2c7b29d88766d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69604e3b2611000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d28130000000000000000122230393c3e3e3e3e3e3e3e3d38352b1e0e00000000000000000000000000000000010f1e2c35383d3e3e3e3e3e3e3e3632281b0b00000000091e324556697e93a4b5c6b8a69e897b6f6660565a595b5b636a7681939caebcc6b6a596816c5a4935200a0000081d314455687e93a3b5c7c5b3a198827568605556545355575a626c7b889da8b9ccc0b49e8a77624c37220f000014293e53697e93a8beccb7a28c77624d37220d1013151615130f0b090200000000000000000000000000000000000000000000000000000000040a0c1114151514120d0b06182d42586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000091d30404c515d5d5d5d5d5b544f4332231300000000000000000000000000000000000000000000000000000000001f34495f748a9393939393939393939393939393939393939393939393939393939393939393939393939393836e59432e1900000417293a4b5d6b8096a3b5c6cab7a598826e5f5757575757575757575757575757575757575757575757534e42311f0b000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000000000000000004121d242729292929292929282220190e000000000000000000000000000000000000000e1920232829292929292928211e160b00000000000b21364b6075889eb3c2bcab9e8878655d504b4538443d4a4e57616c7e939eb0c3c3b49f8c78634d38281602000b20354b6073889db2c1ccb9a799837261574b44373f3e3f3c484d5d64798a9eb4c3cdb9a895806a553d2c1a060014293e53697e93a8beccb7a28c77624d37222125292a2b2a2825201d150a08000000000000000000000000000000000000000000000000090b171f2126292b2b2a27232019182d42586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e2914000000000000000000000f24394c5e6672727272727169614f413118080000000000000000000000000000000000000000000000000000000013283d53687d7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7b65503b26100000000c1c2e3f4b6074859ba8bacdc3b2a0927d675a483742424242424242424242424242424242424242423e3b31241402000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d281300000000000000000000090f1113131313131313130d0b05000000000000000000000000000000000000000000060c0e13131313131313130c090300000000000316283852677d92a6b8cab59f8d7b655a4c3f3632282f2d3639464c606b8096a5b6cabbaa97816c5645321e090011263b50667b90a6b7cbc9b39e897661544639312729292a2b353f4b5b687e93a5b7cac6b29d87725b4935210c0014293e53697e93a8beccb7a28c77624d3732363b3e40403f3d3a363127231c1106000000000000000000000000000000000000000004111c232933363b3e40403f3c38352b212d42586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e29140000000000000000000011273c51667c8787878787867f69604e3626140100000000000000000000000000000000000000000000000000000011263a4e60686868686868686868686868686868686868686868686868686868686868686868686868686868655d4c38230e00000000111d31445563798a9fb4bfcfbeb39e8978625544312d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d29261f140600000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566f8499afc5c6ae99836e5e4c3c2f211e16191a212933424b6074879cb2c8c8b39e8975604b36210b00162c41566b8196abc4d4c5aa957f6a584736291d1514131519202e3d4b6074879db2c7cab7a58d79634e38230e0014293e53697e93a8beccb7a28c77624d39464b5053555555534f4b4538372e21190e0000000000000000000000000000000000000c181f2f383a464c5054555554514d493c363342586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e2914000000000000000000000b20364b6075889c9c9c9c9b927d685443301c080000000000000000000000000000000000000000000000000000000b1e31424e535353535353535353535353535353535353535353535353535353535353535353535353535353504c3f2f1c090000000002152737495b687e93a1b3c4ccb9a89b8573604b3e2e1b181818181818181818181818181818181814110b020000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d28130000000001082020202020202020200e0c07000000000000000000000000000000060c0e1a1f2020202020201e0c0a04000000000000000000000000000000000b21364b60758a9fb4c9b9a88f7a6550402f1e11090300070b171e314455687d92aabbccb9a7907b66513b2611001a30455a6f849aafc4ccb8a78e79634e3a29180b0200000005101d3144556c8196acc1d4c3a7917d67523c27120014293e53697e93a8beccb7a28c77624d4e576165686a6b6a686460564f4b3f352c1e13050000000000000000000000000000010f1d2a34404c50586166696a6a6967625a544c463a586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000091d3245566a7f94a8b2b2b09d8773604b35200f000000000000000000000000000000000000000000000000000000021324313a3d3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3b382f211100000000000009192c3d4e606e8399a6b7c9c6b4a2957f6a5c4b39291603020202020202020202020202020202000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d281300000009151d35353535353535353524211a0f010000000000000000000000000e1921232f3435353535353533221f180c00000000000000000000000000000010253a4f657b8fa9bac9b49e8975604b352011000000000000031527374c61768a9fb4c9c5ab96806b56412b16001d32485d72879db2c7c8b39e89735b49361c0c0000000000000215273752677c91a7bcd1bfaa947f6a553f2a150014293e53697e93a8beccb7a28c77625c646e767b7e7f807f7d7a756e655d4d493c30231406000000000000000000000000000f1f2c3b474c5e666f767b7e80807f7c78726a61584d586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000021528384c6176899eb4c8b6a5917c66513d2c1a0600000000000000000000000000000000000000000000000000000006131e2628292929292929292929292929292929292929292929292929292929292929292929292929292926231c1103000000000000000f1f31424c6176889dabbccfc0b49f8c7a645746321e12000000000000000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d28130000091927314a4a4a4a4a4a4a4a4a39362d1f0f00000000000000000000000e1e2c353844494a4a4a4a4a4a4837342a1c0c000000000000000000000000000013293e53687e93a8c7c5af9a85705544311d0800000000000000091e33465770859ab0c5c4af99846f5a442f1a001e34495e73899eb3c8c6b19c87715c3d2c1a000000000000000010253a50657a8fa5bacfc0ab96806b56412b160014293e53697e93a8beccb7a28c77626c7a838a9093959594928f89837a6f635b4d413225140500000000000000000000000e1e2c3d4959616f7b848a9093959594918d877f76675f586d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000000a1f3346586b8196aabbc3af9a846f5b4936210c00000000000000000000000000000000000000000000000000000000020b11131313131313131313131313131313131313131313131313131313131313131313131313131313100e0900000000000000000001141f334758657b8d9fb5c2cebbaa9c8775614b41301d0d0000000000000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d28130001152737445e60606060606060604e4a3d2d1a070000000000000000000c1c2c3c494d595f6060606060605e4c473a2a180400000000000000000000000000162b41566b8096abc0c2ad98836d58372715010000000000000003172939586d8398adc2c7b19c87725c47321d001e34495e73889eb3c8c6b19b86715c39291603000000000000000f253a4f647a8fa4b9cfc0ab95806b56402b160014293e53697e93a8beccb7a28c7876818c999faaa8aaaaaaa8a89e988f8479675f4f433223130000000000000000000009192b3c495b63778390999faaa9aaaaa9a6a49c94887c6e616d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000000417293a4d62788b9fb4c9b3a28e79634e3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4c5e6c8196a4b5c7c8b6a597826d5f4d3b2b180800000000000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d281300081d314455707575757575757575705b4a36210c000000000000000004182a3a495b636f7475757575757573615947341f0a00000000000000000000000000182d42576d8297acc2c1ac97816c57422c17000000000000000000172c41576c8196acc1c8b39d88735e48331e001d32475d72879cb2c7c8b29d88735746321e0a0000000000000011263c51667b91a6bbd0bea9947f69543f2a140014293e53697e93a8becfbaa48f7b86979fabb4bbc8bcbebfc6b9b4ada1998a7d69614f41311e0e000000000000000002152737485a63798899a1afb4bbc8bfbfbec2b6b1a69e9183766d8297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e29140000000000000000000000000c2034485a6d8298adbfc0ac97816c5846331f0800000000000000000000000000000000000000000000000000000000000000000000000a10122020202020201d0b070000000000000000000000000000000000000000000000000000000000000000000000000c1c2f404b6074869ca9bacdc3b1a0917c67594836261401000000000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60748a8a8a8a8a8a8a8a79634e39240e00000000000000000e1f344759637984898a8a8a8a8a8a8877614c37220c00000000000000000000000000192e43586e8398adc3c2ad98826d58382815020000000000000000132536586d8297adc2c8b39e88735e49331e001a30455a6f859aafc4cab49f8a76614b36211101000000000006192c3c54697e93a9bed4c3a7927d67523d27120014293e53697e93a8bed3c9b49e899ca4b4b1aaa8a6a7a9afb4bbc8bfb3a89e927f695f4e3c2c180800000000000000081d3144556278889da6b3bfcac9bcb4b0adabacaeb3b3a09886778297adc2c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000000005192b3c4e63798ea1b3c9b49e8a76614c36261401000000000000000000000000000000000000000000000000000000000000000004121d242735353535353532201c13080000000000000000000000000000000000000000000000000000000000000000000000111d32455663798b9fb4bfcebeb39e8978625443301c10000000000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758a9f9f9f9f9f9f8e79634e39240e000000000000000e1e31414c617788999ea89f9f9f9f8d7c665947341f0a00000000000000000000000000182e43586d8298adc2c4af9a846f5645321d0900000000000000071c3043546f8499aec4c7b29d87725d48331d00162b40566b8095abc3cebbaa917c6651402f1c140b09070b0d182035495a6f849aafc4cab6a58d78634d38230e0014293e53697e93a8bed3ccb9a89ea8aea39b9593919294999faab2bec6b9b49d927d685a4936251300000000000004172a3a4b6074859ba6b7c4c9bcb5ab9f9b979697999ea7b0a49c87849aafc4c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e2914000000000000000000000000000d21364a5b6f8499afc1b9a8947e695443301c080000000000000000000000000000000000000000000000000000000000000000122230393c4a4a4a4a4a4a48353025180800000000000000000000000000000000000000000000000000000000000000000000021528384a5b697e93a1b3c4ccb8a79a8473604b3e2d1b0a0000000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5b5b5b5a38e79634e39240e00000000000008182b3c4e606e8399a6b4b9c6b5a496816c5e4c3a2a180400000000000000000000000000172c42576c8197acc1c9b49e8975604b362013030000000000000d20354a6074889eb3c8c5b09b85705b46311b0010263b50657b90a5b6cac8ae99846f5e4c3d3026211e1c20222a34444d63788b9fb4c9c5b29d87725a4935200c0014293e53697e93a8bed3d6c6b9b4a1998e86807d7b7c7f848b98a0b5bcc9bbb49f8a78635443301c0700000000000a1f3347586a7f94a3b5c4c9bcab9f978c858281818488909ba3a59c9aa2b4c8c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000000000071a2d3d50657b90a3b5c6b29d8773604b35200f000000000000000000000000000000000000000000000000000000000000000a1d30404d516060606060605d4a4336251300000000000000000000000000000000000000000000000000000000000000000000000a1a2d3d4f606f8399a6b8cbc5b4a2947f695c4a3928160300000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5cacab8a38e79634e39240e000000000001142636485a687d92a1b3c4ccbaa99c8674604b402f1c0c0000000000000000000000000000142a3f54697f94a9c8cdb9a8907b6651423121130802000007111d2e3e4f64798ea6b8cbc9ad98826d58432d18000b20354a6073879db2c0c7b3a1907c665b4b433636323035373b474c626e8399aabbccb8a7947f6a553c2c19060014293e53697e93a8bed3ccbcaf9d948379716b686667696f7782929fabbccdbaa99a8472604a35201000000000000c21374c6176899eb4c1cfbcab9f8d8177706d6b6c6f747b85949faaafb4c0d1c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e291400000000000000000000000000000f23374b5d70859bb0c3b6a5917c66513d2d1a070000000000000000000000000000000000000000000000000000000000001024394d5f6775757575757572605443301c0700000000000000000000000000000000000000000000000000000000000000000000000f1f32424c6277889eb3bdcec0b49f8b7a645745321e1200000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e00000000000a1c30435462788a9eb4bfcfc0b49f8b7963564532221100000000000000000000000000000011263b50667b90aabbcec6b09b8570604e3f31201d1516131c202e3c4b5c6d8298adc5cfbcab937e68533e291300071c304354687d92a2b4c3bfb39e89796860544f4b45434a4d5159616e8095a1b2c8bcb39e8876614c37210e000014293e53697e93a8bed3c3af9e947f6f635b555351525459616d7e8d9fb5c1c7b4a2927d67523e2e1b08000000071b2d3e556a7f94a8b9ccc4b59f8d7d6c6259585657556066737f8c9fa9bac9d9c8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e29140000000000000000000000000000081c2e3f51677c91a5b6c3af9a846f5b4a36210c000000000000000000000000000000000000000000000000000000000006192c3c51677d8a8a8a8a8a8a8772604a35200d000000000000000000000000000000000000000000000000000000000000000000000001141f344759667c909fb1c2cebbaa9c8675604b402f1d0d000000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e000000000a1a2d3d4b6073849aa8b9ccc5b3a2947f695b4a382816040000000000000000000000000000000c21364c61768b9fb4cac8b4a3927d685d4e413631272b2530353f4b5a647a8c9fb4cacab59f8c78624d38230d00001325364a6072849aa4b5c1b9a79e8a7e736a656057546062676d7783959eafbfbcb59e927d675847331f0a000014293e53697e93a8bed3bfaa95806a614e493d3e3c3d3b474c606a7f94a3b5c9c0b19b86715c4b3722080000000d22364a5c72879db2c6cbb7a695806b5f4c473b4137444b5460697c8b9fabbccfc8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e29140000000000000000000000000000001120354b6073879cb2c7b4a28e79634e3a291704000000000000000000000000000000000000000000000000000000000c2035495a6f849a9f9f9f9fa5907b65503b2a1805000000000000000000000000000000000000000000000000000000000000000000000005182a3b4c5e6c8197a4b6c7c8b6a497816c5e4c3b2a18080000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e000000021527384a5b697f94a2b4c6ccb8a79a8472604a3d2d1a0a000000000000000000000000000000000a1e33465770859ab0c6d1c1b49f8b7b6860504b44374136434a4f5d6578889dabbccfbfaf9a84705a4935200b0000081c3043546177869ba3b4bab9a89e93877f7a76747375777c828a98a0afbcb6ab9f95806b5f4d3a2a1704000014293e53697e93a8beccb7a28c77624d43352c2826272a34424b6073869bb1c4c9b5a38f7a644f3625130000000f243a4f64798fa5b7cac8b39d8875614b41342a2c263136434b5e667c8d9fb4cac8b29d88735d48331e00000d22374c62778ca1b7ccbea8937e69533e2914000000000000000000000000000000081c304354687e93a8bdc0ac97816c5846331f08000000000000000000000000000000000000000000000000000000021527374d63788c9fb5b5b5c3ae98836e5948341f080000000000000000000000000000000000000000000000000000000000000000000000000d1d2f404b6075869ca9bacec2b19f917c6659483625130000000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e0000000b1d31455663798b9fb4c0cebdb39e8977625443301f0f00000000000000000000000000000000000317293953687e93a8bacdcdbaa99f8b7d706660555756575460646e7b889da6b7c9c5b3a18f7a654f3c2b19060000001325364759627885959fa9b3b8b4a59d948f8b89898a8c91989fa9b2b5b1a49c8d8072604a41311c0c00000014293e53697e93a8beccb7a28c77624d37221a131112181f314455667b90a6b8cbc2ad97826d5443301c070000152a3f556a7f94aac3d4c5aa95806a5746321f1816141d2630404c5e6e8398adc3c8b29d88735d48331e00000d22374c62778ca1b7c4bea8937e69533e2914000000000000000000000000000000011426374c62778ca1b7c9b49e8a76614c362614010000000000000000000000000000000000000000000000000000081d3144556b8095abbccfcacab49f8b77624c36261401000000000000000000000000000000000000000000000000000000000000000000000000121e324556647a8b9fb4c0cebdb39e8877625443301c0f00000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e00000b1b2e3f4b6074869ca9bacdc3b19f917c665948362513010000000000000000000000000000000000000c21374c61768a9fb4c7d7c7baa99f92857b756f6d6b6c6e747a838c9da6b7c4c7b8a799836e5d4b371e0e0000000008182a3a48596274808a969ea7b8b6b2aaa4a99f9e9faaa6adb4bab4a39b93877c6a6054433023130000000014293e53697e93a8beccb7a28c77624d37220d000000041426374b6074889eb3c8c8b39e8873604a35200b00031729395a6f8499afc4ccb8a78e79644e39281605000108141c3040586d8297adc2c8b29d88735d48331e00000d22374c62778ca1aeaeaea8937e69533e2914000000000000000000000000000000081d314455697f94a9becdb9a8947f695443301c0800000000000000000000000000000000000000000000000000000b20364b6074889eb3c9cdc9cdbbaa947f6a5443301c08000000000000000000000000000000000000000000000000000000000000000000000000031628384a5c697f94a2b3c5cbb8a6998372604a3d2d1a0a000000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e00031729394b5d6b8096a4b5c7c8b6a597826d5e4d3b2b1808000000000000000000000000000000000000000a1f3347586c8197a9baced7c7bab4a29b90898482808284888f989fabb7c4c6b9a99e8978624d3f2e1c0000000000000c1c2b3b4856606b7881899ea8b9c7bfc7bab4b3b4bbc8c2c9b4a29a857e74665e4a43362513050000000014293e53697e93a8beccb7a28c77624d37220d00000000091d3144556c8197acc1ccb8a78e79634e39240e000a1e33465773889db3c8c8b39e88735c4a361b0b0000000001182d42586d8297adc2c8b29d88735d48331e00000d22374c62778c9999999999937e69533e29140000000000000000000000000000000b20354b6074879db2c7d7c6b29d8773604b35200f0000000000000000000000000000000000000000000000000006192c3c52677c91a6b8c7bab4bac7b29d8773604b35200d000000000000000000000000000000000000000000000000000000000000000000000000000a1a2d3e4a6072849aa7b8ccc5b3a1937e695b4a382815020000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e000c1e334657657b8c9fb4c2cebbaa9c8775614b40301d0d000000000000000000000000000000000000000004172a3a4d62788b9fb4c5d5d7cdc0b4b0a89e99979697999ea6aeb4bcc9c2b5a89e8b7b655a49352111000000000000000d1d2b38454b5c64747c899eb3c9c5bebab8b7b8bbc1c8c5b09a85786c60574c4030251808000000000014293e53697e93a8beccb7a28c77624d37220d000000000114263753687d93a8bdd5c5a7927d68523d2813000c21364b61758ba6b7cbc5b09a85705b3d2d1a000000000003182d42586d8297adc2c8b29d88735d48331e00000c21364c6176838484848484847c66513b26110000000000000000000000000000071b2d3e51677c91a5b7cadfcab6a5917c66513d2d1a070000000000000000000000000000000000000000000000000c2035495a6f849aafc4baa99fa9bab7a5907b66503b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000f1c3043546277899eb3bdcebfb49f8b79635645321d110000000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e0c1c2f404b6175879dabbccfc0b49f8c7a645746322212000000000000000000000000000000000000000000000c2035495a6c8196a7b8cce0d3c3b6b2b0b3aeacabacaeb3b8c5c6c3b6b2a39b8a7c665d4b3c2b190300000000000000102031424e60687a85919ea8b9b5b0a9a4a2a2a3a6acb3b8b4a29a8c8175625a483b2b1909000000000014293e53697e93a8beccb7a28c77624d37220d00000000000f253a4f647a8fa4b9cfc0ab96806b56412b16000e23384e63798da3c4d4c2ac97826d57422d18000000000003182d42586d8297adc2c8b29d88735d48331e00000a1f334658616f6f6f6f6f6f6f665e4c38240f00000000000000000000000000000d22364a5c70859bb0c3d4ddd4c3af9a846f5b4a36210c0000000000000000000000000000000000000000000000021527384d63788c9fb5c5b49f899fb4c3ae99836e594834200800000000000000000000000000000000000000000000000000000000000000000000000000001325364859667c919fb1c3cdbaa99c8674604b402f1c0c00000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e182a3a4c5e6d8297a5b6c9c6b4a2957f6a5c4b392916040000000000000000000000000000000000000000000006192b3c4c6176889eb3bfd0cab6a59c9ba3abb0b4bac7c9bcb5b1aba59c938679665e4c3f2e1e0e0000000000000008182e3e4e60687e8b9ba3b3b8b3a39b948f8d8c8e91979ea7b1b4aa9f968678625948372614010000000014293e53697e93a8beccb7a28c77624d37220d00000000000c22374c61778ca1c8d8c2ad98836d58432e180010253a4f657a8fa4bacfc0ab96806b56412b16010000000003182d42586d8297adc2c8b29d88735d48331e00000417293a464c59595959595959514c402f1d090000000000000000000000000005182b3b4f647a8fa2b4c8cbc8cbc7b4a28e79634e3a29170400000000000000000000000000000000000000000000091d3145566b8096abbcb9a7978297acc5b49f8b77624d362614010000000000000000000000000000000000000000000000000000000000000000000000000008182b3b4d5e6d8297a4b6c8c7b5a496816c5e4c3a2a1804000000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39240e1f344759667c919fb1c3ccb9a89a8473604b3e2e1b0b0000000000000000000000000000000000000000000000000e1f334758687d92a1b3c4c7b29c87858f969b9fa9a3a3ab9f9c9690877e74635b4c402f211000000000000000001325364a5c687e929faab5b8a79e91857f7a7877797b8189979fafbbb4a49c8877625544311d080000000014293e53697e93a8beccb7a28c77624d37220d00000000000b21364b60768baabbcec4af9a846f5a452f1a0011263b50667b90a5bbd0bfaa957f6a55402a15000000000003182d42586d8297adc2c8b29d88735d48331e0000000c1c293336444444444444443b382f221200000000000000000000000000000b203448596d8298adc0c5b8b3b8c5c0ac97816c5847331f08000000000000000000000000000000000000000000000b20364b6075889eb3c9b39e89798ea7b9bbaa947f6a5443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000d1d30404b6175869caabbcec2b59f8d7b655847331f14010000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39241e31424c6177889eb3bdcebeb39e89786255443120100000000000000000000000000000000000000000000000000004172a3a4e5f6f8399a6b8c9b6a5927d7a80868a8d8e8e8c8b86817b73686056493d2f22120200000000000000071c304354647a8b9fb4bbb8a79e897c706965636263666c7681959eafc0b6a69b8573604b3625130000000014293e53697e93a8beccb7a28c77624d37220d0000000000091e324556758a9fb4cac5b09a85705b45301b0011263c51667b91a6bbd0bea9947e69543f2914000000000003182d42586d8297adc2c8b29d88735d48331e000000041323313a474c5255534d493c3127190900000000000000000000000000031628384d62778b9fb4c9b8a69ea6b7c3b49f8a76614c362614010000000000000000000000000000000000000000061a2c3d52677c91a6b8c4ae998473899eb3c8b29d8773604b35200d000000000000000000000000000000000000000000000000000000000000000000000000000000121e324657647a8b9fb4c0cfbcab9d8876614c42311f0f0000000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e39242b3c4e606e8399a6b8cbc3b2a0927d675a493726140200000000000000000000000000000000000000000000000000000c1c31414c6177889eabbcc3b49f8b7a6b71757779797775716c6660544b45382c1f120400000000000000000b20354a6072859baabbc2b39e8979675f544f4d4d4e5158616c8095a2b4c4b4a3937e685443301c0700000014293e53697e93a8beccb7a28c77624d37220d0000000000081d314455748a9fb4c9c5af9a85705a45301b0011263b51667b90a6bbd0bfa9947f6a543f2a15000000000003182d42586d8297adc2c8b29d88735d48331e000000122331414d5861686a69625a4b4437271502000000000000000000000000091e3245566b8095aabbc8b39e889da5b7baa8947f695443301c0800000000000000000000000000000000000000000c2135495b70859aafc5c1a8937e6d8398adc7b7a5907b66513b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000031628394a5c6a7f94a2b4c5c9b7a699836e604e3d2c190900000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899eb3b29c87725d47321d00182e43586d8398adc2d6c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e392837485a687d92a1b3c4c9b7a598826e5f4d3c2b190900000000000000000000000000000000000000000000000000000000131f344759667c8d9fb5c0baa99d8877626062646362605556504b433632281a0e0000000000000000000011263b50667b90a3b5c8b6a4927d675b4d413a3837393a464c6072849aafc3c1b29d8773604a35200b00000014293e53697e93a8beccb7a28c77624d37220d00000000000b20354b60758aa9bacec3ae99846e59442f190010253a50657b8fa5bacfc0ab95806b56402b16010000000003182d42586d8297adc2c8b29d88735d48331e0000091930414d5f67767d807e786c605544311d100000000000000000000000000b21364b6075889eb3c8c3aa957f879db2c6b29d8773604b35200f00000000000000000000000000000000000000021528384e63788da2b4c8b5a38c77677c91a9bac3ae99836e59483420090000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4b6073849aa7b9ccc4b3a1937e685b4937271502000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001f34495e74899e9e9e9c87725d47321d00182e43586d8398adc2d3c0ab96816b56412c1601000000000000000000000000061b31465b70869bb0c5d2bda7927d68523d2813000b20354b60758aa0b5caceb8a38e79634e4439455562788a9eb4bfcfbcab9d8776614c41301e0e000000000000000000000000000000000000000000000000000000000004182a3b4c5e6b8095a2b4c5b7a69b8574604d4e4e4c4b44373b3530261d150a0000000000000000000004182a3a586d8298adc1c7b19c86725f4d3d302523222429334354657a8fa5b7cab7a58f7a65503a251000000014293e53697e93a8beccb7a28c77624d37220d00000000000c21374c61768ca1c7d8c2ad98826d58432d18000e23394e63798ea3c3d4c1ac97816c57422c17000000000003182d42586d8297adc2c8b29d88735d48331e00011527374d5f677d899295938b8173604b3f2e1b0800000000000000000000091c2f3f53687d93a7b8cab6a58e7a8096abc2b7a5917c66513d2d1a07000000000000000000000000000000000000091d3245566b8196abc0c7b09b867161768a9fb4c9b49f8b77624d37261401000000000000000000000000000000000000000000000000000000000000000000000000000000101c3043546278899eb3becfbfb49f8a79635544311d11000000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001d33485d72878989898986715c46311c00182e43586d8398adbdbdbdab96816b56412c1601000000000000000000000000061b31465b70869bb0bdbdbda7927d68523d2813000b20354b60758aa0b5caceb8a38e7963595959576073849aa8b9ccbeb49f8d7b655846332313000000000000000000000000000000000000000000000000000000000000000c1d2f404b6073849aa7b8c4b4a397816d604e3f3735312726201c14080200000000000000000000000a1f34475973889db2c8bfaa947f6a5541301f120e0d0e1725364b5d72879db2c7c3aa95806a55402b1500000014293e53697e93a8beccb7a28c77624d37220d00000000000e23384e63788da3b8cdc1ac96816c57412c17000c21364b61758ba5b7cac4af9a846f5a3c2c19060000000003182d42586d8297adc2c8b29d88735d48331e00081d314455677d919ea8aaaa9f96826d5d4b37220e000000000000000000000e23384c5d71869cb1c5c7b29c8772798ea3b5c3af9a846f5b4a36210c0000000000000000000000000000000000000b20364b6075889eb3c8baa9937e69576d8298adc3bbaa957f6a5544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000001142636485a677d91a0b2c3cdbaa89b8574604b3f2e1c0c0000000000000011263b50667b90a5bbcfbaa58f7a65503a2510001b304458697274747474716756432e1a00182e43586d8398a8a8a8a8a896816b56412c1601000000000000000000000000061b31465b70869ba8a8a8a8a7927d68523d2813000b20354b60758aa0b5caceb8a38e796f6f6f6f70758298a2b4c6bdb1a0957f6a5d4b3a2917050000000000000000000000000000000000000000000000000000000000000000111d3144556278899eabbcc1b19f937e685d4b3b2b1d15110b0801000000000000000000000000000c22374c61778ca6b7cbbaa5907b65503b25130100000008182e3f586e8398adc3c3ae99846e59442f1904000014293e53697e93a8beccb7a28c77624d37220d000000000011273c51667c91a6bbd1bfaa947f6a553f2a15000a1e33465772889db2c7c8b39e88735a493520090000000003182d42586d8297adc2c8b29d88735d48331e000b20354b6073889db3b9c6bbb4a08f7a654f3a2510000000000000000000061a2c3d50657b90a4b5c9baa9947f6a71869bb1c6b4a28e79634e3a29170400000000000000000000000000000000061a2c3d52677d92a7b8c9b49f8a766150657a8fa5b6c8b29d8774604b35200d0000000000000000000000000000000000000000000000000000000000000000000000000000000008182b3c4d5f6d8298a5b6c8c6b5a395806b5d4b3a29170400000000000011263b50667b90a5bbcfbaa58f7a65503a25100015283b4b585d5e5e5e5e5c564939261300182e43586d8293939393939393806b56412c1601000000000000000000000000061b31465b7085939393939393927d68523d2813000b20354b60758aa0b5cadac5af9a8484848484858998a0b2c0c4b19f978272604a3f3126190d0000000000000000000000000000000000000000000000000000000000000000011527374859667c8d9fb5c1bdb49f8b7b65594838281602000000000000000000000000000000000e24394e63798ea3c4d4b8a28d78634d38230e0000000000162b41566b8096abc0c5b09b85705b46301b06000014293e53697e93a8beccb7a28c77624d37220d0000000005182a3b556a7f94aabfd4c4a5907b66503b26110003172939596e8399aec8cbb8a68d78624d3726140100000003182d42586d8297adc2c8b29d88735d48331e0010253a4f657a8fa6b7cbd6cebeab96816c56412c170000000000000000000c2135495b6f8499aec2c9b49f8a7761687e93a8b9c0ac97826c5847331f08000000000000000000000000000000000c2135495b70859aafc5c4ad98836e584a6073879cb2c8b7a5907b66513c2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d30414b6175879daabbcec1b49f8c7b655846331f1300000000000011263b50667b90a5bbcfbaa58f7a65503a2510000b1d2d3b4448494949494643392b1b090010253b50657b7e7e7e7e7e7e7e7a644f3a250f000000000000000000000000000011273c51667c7e7e7e7e7e7e7e78634e38230e000b20354b60758aa0b5cadcc8b4a29a999999999a9ea8b2becfc1ac9781746860564b44372b1d10020000000000000000000000000000000000000000000000000000000000000009192b3b4c5e6b8096a3b4c5bbaa9d8878625645321e14030000000000000000000000000000000f253a4f647a8fa4b9ccb7a18c77624c37220d0000000000152a40556a7f95aabfc6b19c87715c47321c07000014293e53697e93a8beccb7a28c77624d3a2b1d110801050e1f34485970859ab0c5cbb7a68c77624c37220d000014293e53697e93aabbcec4aa947f6a5544311d0f04000006182d42586d8297adc2c8b29d88735d48331e0012273c52677c91a7c4d4e7d8c3ad98836e58432e1900000000000000000417293a4e63788c9fb5cac1ad98826d5961768a9eb4c9b49f8a76614c362614010000000000000000000000000000021628384e63798da2b4c8b7a6907b665043546a7f94aabbc3ae99846f5a483420090000000000000000000000000000000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f131e334657647a8c9fb4c0cfbcab9d8776614c41311e0e000000000011263b50667b90a5bbcfbaa58f7a65503a251000000f1d28303334343434312e261b0d00000e23374b5d6568686868686868645c4b37220d00000000000000000000000000000f24394d5e6668686868686868635b4935210c000b20354b60758aa0b5cae3d1c0b4afaeaeaeaeb0b4b9c6cfd9cab59f8d847d75686055483b2e201002000000000000000000000000000000000000000000000000000000000000000d1d2f404b6074859ba7b8c8b8a69b8574604b423221110000000000000000000000000000000f24394e64798ea3c4d4b8a38e78634e39230e0000000004172a3a566c8196abc1c6b09b86715b46311c06000014293e53697e93a8beceb9a48e7a6459483b2f201c1418202d3d4c62778b9fb4cac8b29d88735947341f0b00000d22374d62778b9fb4cac7b19c8774604b3d2d1f17151519202e3e586d8297adc2c8b29d88735d48331e0010253a4f657a8fa6b7c9d6cebdab96816b56412c1600000000000000000a1f3346586c8197abbcc9b5a38f7a644f576d8297acc1baa8947f695443301c080000000000000000000000000000091e3245566c8196abc0c8b29d8874604b364d62778b9fb4cab49f8b78624d37261401000000000000000000000000000000000000000002101b2224252525252525252525252525252525252529394b5c6a8095a2b4c6c9b7a598826e5f4d3c2c19090000000011263b50667b90a5bbcfbaa58f7a65503a25100000000b151b1d1f1f1f1f1c1a1309000000081c2f3f4b50535353535353534f4b3e2e1b080000000000000000000000000000091d30404d51535353535353534e493d2c1a06000b20354b60758aa0b5cadfd8cac0bdbababababababbbcbfc3c8bcab9f9a93877e7362594b3e2e20100000000000000000000000000000000000000000000000000000000000000000121d3144556278899eb3bdc4b5a398826d604f3f2e1e0e00000000000000000000000000000c22374c61778ca6b7cbbca7917c67523c2c1a0d08040a131f33475870859aafc5c3ae99836e59442e1904000014293e53697e93a8bed3c7b29c877762594b3f3530262b343c4a5b6c8196abbccfc3ad97826d583b2a180500000b203448596e8399aec1cab6a4937e695b4a3d33292a2b2c353f4b5c6d8297adc2c8b29d88735d48331e000b20354b6074889dabb9c5bbb49f8f7a644f3a250f00000000000000011426374c61768a9eb4c9c5b09b86715c4b4f647a8ea3b5c6b29d8773604b35200f00000000000000000000000000000b21364b6075899eb3c8c0aa95806b54433448596f8499aec4bcab95806a5544311d08000000000000000000000000000000000000000010202d36393a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3e4b6073859ba8b9ccc3b2a0927d675a493726140100000011263b50667b90a5bbcfbaa58f7a65503a25100000000000000000000000000000000000000011212f373b3e3e3e3e3e3e3e3a372e201000000000000000000000000000000000122230393c3e3e3e3e3e3e3e38352c1f0f00000b20354b60758aa0b5cadccabaada7a5a5a5a5a5a5a6a7aaaeb3b8bcb5afa69d938478645c4b3e2d1c0c0000000000000000000000000000000000000000000000000000000000000002152737485a667c919fb0c1c1b2a0937e695d4b3c2b1b0a000000000000000000000000000a1f34475973889db3c8c2ad98826d5a49382b201c171f21303f4c61778a9fb4c9c2aa957f6a55402a1500000014293e53697e93a8bed3cab6a59c8677655d504b43363b484d5b63798b9fb4c9cab7a5907b66503b261100000005182b3b50667b90a3b5c8c2b39e8a79635b4c473a3f403c494d5d657a8a9eb4c9c8b29d88735d48331e00081d314455667c8d9ea7aaaa9f96816d5c4b37220d00000000000000081d314455697f94a8b9ccb8a7927d68523e4a5c71869bb0c6b7a5917c66513d2d1a07000000000000000000000000061a2c3d52677d92a7b8c8b4a28d78634d362b3b51667c91a6b8c9b29d8874604b35200e00000000000000000000000000000000000000071b2d3e4a4e4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f556278899eb3c1cfbeb49e8a78625544311d1000000011263b50667b90a5bbcfbaa58f7a65503a25100000000000000000000000000000000000000003111c23252929292929292925221b10020000000000000000000000000000000004121d24272929292929292923211a0f0100000b20354b60758aa0b5cad5c0ad9c928f8f8f8f8f90919294999ea7b0b5c1b7b2a29a897b645c4a3a2a17040000000000000000000000000000000000000000000000000000000000000009192b3c4c5e6c8196a3b5c5beb49f8c7b655a483928160300000000000000000000000004182a3a586d8298adc0cab49f8b786256483b3530293337414d5d6b8095a9bac9b6a48f7a644f3a240f00000014293e53697e93a8bed4c3b7b2a49c887b6e6560545a5a59626a79889daabbcec2b29d8773604b35200b000000000d20354a6072859baabbccb9a89d88796a6158565455575a636c7b899ea8b9ccc8b29d88735d48331e00011527374d5e677d899295938b8073604b3e2e1b08000000000000000b20354b6074879db2c6c9b39e8975604b363e53687d93a8b9c3af9a846f5b4a36210c0000000000000000000000000c2136495b70859ab0c5c6b09a85705b493520354b6074889db3c8b7a6917c66513c2b19050000000000000000000000000000000000000d22364a5c646464646464646464646464646464646464646464646464677d92a3b5c9ccb9a89b8573604b3e2e1b07000011263b50667b90a5bbcfbaa58f7a65503a2510000000000000000000000000000000000000000000080e10131313131313130f0d080000000000000000000000000000000000000000090f11131313131313130e0c06000000000b20354b60758aa0b5cad2bda7927e7a7a7a7a7a7a7b7d7f8488919ba3b4bbc0b4a79e897a645847331f1000000000000000000000000000000000000000000000000000000000000000000e1e30404b6074859ba7b9ccbbaa9e8978625745321e150300000000000000000000000010253b50657b90a2b4c8bbaa9b857462594f4b433a474c525f677b8c9fb4c7bfb19c86715c4a36220d00000014293e53697e93a8becbb7a59d9fa69d8d837a74706f6f72777f8a9da6b7c8c8b6a4937e695443301c0800000000071c304354647a8c9fb4c0c6b8a69d8b7f766f6c6a6a6c7178818c9ea7b8c6d5c8b29d88735d48331e0000091930404d5f67767d7f7d786b60554431201000000000000000071b2d3e52677c91a5b7cabcab96806b564532364b6176899eb4c9b4a28e79634e3a29170400000000000000000000031628384e63798ea2b4c8b9a8927d68523c2c1d3144556b8096abc0c4ae99846f5a483520090000000000000000000000000000000000000f24394e647a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a859bb0c5d6c6b4a3957f6a5c4b37220c000011263b50667b90a5bbcfbaa58f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e7965656565656566676a6e747c85949faabbc5b8a79d8876614c3e2e1b080000000000000000000000000000000000000000000000000000000000000000121d3145566278899eb3bdc8b8a79b8575604b433221110000000000000000000000000e23374b5d6f849aaabbc8b5a39b85776b6460545c586167707d8a9faabbc3b3a1917c66513e2e1b0700000014293e53697e93a8bec7b29d878c9fab9f998f89868485878b959fa9b7c4c9bbaa9c8674604b3626140100000000001325364a5c6b8095a2b4c0c4b8a99f958b84817f8082868d979faba7b3b8c5c8b29d88735d48331e000000122230414d5861676a68625a4b4437271502000000000000000d22364a5c70859bb0c3cab49f8c78624d38283246576c8197acc1c0ac97826c5847331f0900000000000000000000091e3245566c8196abc0c9b49e8976614b36211527374e63788da2b4cab49f8c78624d3727150100000000000000000000000000000000081e33485d73888f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f9ba3b5c9ddd1c1b49f8c7a644f3a2a17040011263b50667b90a5bbcfbaa58f7a65503a251000000000000000040e14162020201d160b080100000000080d0f1c20202019171107000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79635050505050515255556067737f8c9fb4bdc5b8a698826d5c4b37220c000000000000000000000000000000000000000000000000000000000000000002152738495a677c919fb1c1c5b5a398826d614f402f1e0e0000000000000000000000081c2f3f4e63798c9fb4bcc1b4a39b8a817a75727173767c85929fa8bac5b7a599836f5e4c3820100000000014293e53697e93a8bec0ab96807d8d9fa9aea89e9b999a9c9fabb4bac7c7baab9f8b7a64554431180800000000000008182d3e4b6074849aa2b1bdc7bab4aa9f9a969495979ca4acab9f929ea7b8c8b29d88735d48331e000000041323303a464c5255534d483c312719090000000000000005182b3b4f647a8fa3b4c8c3ae99846f5a49351a29394e64798ea3b5c9b49f8a76614c372614010000000000000000000b21364b6075899eb3c8c3ad97826d5746321e092135495b70859ab0c6bcab95806b5544311d0800000000000000000000000000000000081e33485d73889da4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4b0b5c1d2e4e2cebbaa9a84705847331f0a0011263b50667b90a5bbcfbaa58f7a65503a2510000000000000081621292b353535332b201d15090002101b2225323535352e2b24180a0000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e3a3a3a3b3c3d37444b55606a7d929fb1c6c4b2a08f7a644f3a2a170400000000000000000000000000000000000000000000000000000000000000000a1a2c3c4d5f6c8197a3b5c6c1b2a0947f695e4c3c2c1b0b0000000000000000000000112135495b697e939eb4bac1b4a99f968f898887888b919aa2b4bac1b5a69d8778624d40301d020000000014293e53697e93a8bec5a8927d687d8b9da5b4b4b0afafb1b5bcc9c9c1b5a99f8d7d685c4a3727150000000000000000101d314556617584979fb1b5c2c8bbb4afaba9aaacb1b4a99f8d7d899eb3c4b29d88735d48331e0000000005131c2933363d403e38352b1d150900000000000000000b203448596d8398adc1cab6a5907b66503c2b1921364a5c70859bb0c5baa8947f695544311d080000000000000000071a2d3d52687d92a7b8cab6a58f7a654f392916061a2c3d52687d92a8b9c9b39d8874604b35200e00000000000000000000000000000000081e33485d73889db2b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9c5c9d2d3d3d3d9c8b4a28c76614c37210c0011263b50667b90a5bbcfbaa58f7a65503a25100000000000041626343d414a4a4a4840353127190910202e373a474a4a4a43403628180700000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e392525252628273137444b5f6c8197a8b9cdbeae98836e5847331f0a0000000000000000000000000000000000000000000000000000000000000000000e1e30414b6074859ba8b9c9beb49f8c7c655a493929180800000000000000000000061a2c3d4f606a80939fa9b4c1bab4aba99f9d9c9e9fabb0b4c0bab4a39b8879635948342212000000000014293e53697e93a8aeaea78f7a64677a87969fa9b1b5c2bbbcc7bab4afa39b8b7d685f4e3e2e19090000000000000000021527384657617481909ca4adb3b8c5bcbcc6b9b4aea29a8b7d6f849aaeaeae9d88735d48331e0000000000000c171f21282a282220190e010000000000000000031628384d62778b9fb4c9c6b29c8773604a35200e1a2d3e52687d92a7b9c6b29d8774604b35200f00000000000000000c21364a5b70859bb0c5c9b29c87725d4b371b0b000f21364b6176899eb4c9b7a6917c66513c2b1906000000000000000000000000000000081e33485d73889db2bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc0a48f79644f3a240f0011263b50667b90a5bbcfbaa58f7a65503a251000000000000e21344451566060605d554b44372715182e3e4b4f5c60606059534636241100000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e392410101112151d2631414c6177899eb4c9cab49f8b76614c37210c00000000000000000000000000000000000000000000000000000000000000000000121d32455663798a9eabb7c4bbaa9e897863574636251300000000000000000000000f1f324250626a7e8a9ba3afb5bcc7bab4b2b1b3b4bcc5b8b3a99f958579635b493b2b1904000000000014293e53697e93999999988975605c6475808a959ca4a4a6a7a6a99f9991857a685f4e41312010000000000000000000000a1a29394656606c7b8690989ea7a5a6a7a6a89e9991847967697f949999999988735d48331e00000000000000040a0c1215130d0b0500000000000000000000091e3245566b8095aabbcdbaa8947e695443301c070f21364b6075899eb3c9b7a5917c66513d2d1a07000000000000031628394e63798ea3b4c8bcab947f6a553f2e1c0000091e3246576d8297acc2c4af99846f5a48352009000000000000000000000000000000081e33485d73889da8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a48f7a644f3a250f0011263b50667b90a5bbc6baa58f7a65503a2510000000000014293d51626b757575726b605544311d26364b5c64717575756e6453402b0c00000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000109141f3447596e8398aec3cebbaa917c66513c27110000000000000000000000000000000000000000000000000000000000000000000002152838495b677d8d9da6a7a8a8a79c8675615443301c0700000000000000000000011424334350606879858f999fabacafb2b3b3b3b1aeaaa79e958a8074635b493d2c1d0d00000000000011263b51667c84848484837b64574a57616b7780868b8f9191918e8a847c73645c4e413123130200000000000000000000000b1b2938454b5e65737b83898d909191908e89847c70635b60738084848484826d58422d1800000000000000000000000000000000000000000000000000000b21364b6075889eb3c8c9b49f8a76614c36251300091e3245576c8196acc0c3af9a84705b4a36210c000000000000091e3245576c8196acc1cab49f8b77624d3722110000031628394f647a8fa4b5cab49f8c78624d372715020000000000000000000000000000081e33485d738893939393939393939393939393939393939393939393939393939393939393939393938f7a644f3a250f0011263b50667b90a5b0b0b0a58f7a65503a25100000000001162b41566b808a8a8a888073604b3928304354647a868a8a8a826e593a291704000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000004182a3a53687d93a8bdd9c8ab96816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000a1a2c3c4d5f677c888f9293939393938373604a35200b000000000000000000000006152533424e5b63707b848c92979a9d9e9e9d9c9995908880776b6055493c2c1f0e000000000000000f24384c5e666f6f6f6f6d645d4b39464b59626a71767a7b7c7b79756f6660544a3e31231305000000000000000000000000000b1a2832404c5460666e74787b7c7c7b78756e665e4e4955606a6e6f6f6f6d64523f2b16000000000001080b150c0a0400000000000000000000000000091c2f4053687e93a7b8ccc0ac97826d584633180800031628394e63798ea2b4c8b4a28e79634e3a2a170400000000000b21364b6075899eb3c9c5af99846f594834200b0000000b22374b5c71869cb1c8bcab95806b5544311d0800000000000000000000000000000012283d52677d7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e77614c37220c0011263b50667b909b9b9b9b9b8f7a65503a2510000000000012273d52677c92ab9f9d95816c574532354b6073879ca49f9d87725846331f0a000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000011263b50667b90a5bbd0c3ae98836e59432e190400000000000000000000000000000000000000000000000000000000000000000000000e1e30414d5e66747a7d7e7e7e7e7e7e77624c37220d000000000000000000000000071524313d494e5d656f777d8285878989888684807b746a61594b44372c1e0e0000000000000000091d2f404c5159595959584f4b3f2e323b484d55586164666766646056514b43362d2013050000000000000000000000000000000a151d2f36434a5054606265676766636055514c4037444b55595959595852453523100000000009151d202a211f170c0000000000000000000000000e23384c5e71869cb1c5c8b4a28e79644e3a29170000000a21364a5b70859bb0c5c0ac97826c5847331f0900000000071a2d3d52687d92a7b9ccb8a7917c67523b2b1905000000081b2e3e54697e94aabbc9b39d8874604b36200e0000000000000000000000000000001025394d5f67686868686868686868686868686868686868686868686868686868686868686868686868615947341f0b000f253a4f647a858686868686857a644f39240f00000000000e23394e63788ea8b5b29f8a75604b36374c62778ca5b6b6a58b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000f243a4f64798fa4b9cec4af9a856f5a45301a05000000000000000000000000000000000000000000000000000000000000000000000000122330404c5560656868686868686862594834200b0000000000000000000000000006141f2c363f4b505962686c7072737473716f6a6560554c473a3127190e0000000000000000000012222f383b44444444433a372e201e2b34373a464c4f5152514e4b4538353026181002000000000000000000000000000000000002111825303536434b4d505152514e4b4437382f2731364044444444423f3527170600000009192731354037332a1c0d00000000000000000000061a2c3d50657b90a4b5c9c4b09a85705c4a361c0c000000071a2d3d52677d92a7b8c9b49f8a76614c372614010000000d21364a5c70859bb0c5c8b39e8975604b36200d00000000001022374c61778b9fb4c9b7a6917c67513c2c190600000000000000000000000000000a1e30414d525353535353535353535353535353535353535353535353535353535353535353535353534c473b2a1804000d22374b5c6471717171717171645c4a36220d00000000000b20354b6074899eb4baa88f7a654f3a354b6075899fb4c3a5907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000010263b50657b90a5bad0c5b09b85705b46301b060000000000000000000000000000000000000000000000000000000000000000000000000512223037444b50525353535353534c483b2b18050000000000000000000000000000010f1a212e373b484c52575a5d5e5e5e5c5955504b4437342a1d1509000000000000000000000004121d24262f2f2f2f2e25221b100d1820222933363a3c3c3c39363228201c140800000000000000000000000000000000000000000008131c20263035383b3c3c3b39363127241d151d202b2f2f2f2f2d2b23170900000008182737444b554c473a2b1d0d0000000000000000000c2135495b6f8499afc2cbb7a6927c67523e2d1a00000000000f21364b6075899eb3c8baa9947f695544311d080000031628394e64798ea3b4c4c1ac96816c5645321d0900000000000a1f3447596e8398aec2c4af9a846f5a4935200c000000000000000000000000000001132330393d3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e37342a1d0c0000081b2e3e4b4f5b5b5b5b5b5b5b4f4a3e2d1b070000000000081c30435470859bb0c6a9937e69543e31445570869bb0bea9947e69543f2914000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000009182b3b53687d92a8bdd2c4af9a846f5a452f1a05000000000000000000000000000000000000000000000000000000000000000000000000000412192631353a3d3e3e3e3e3e3e37342b1d0d000000000000000000000000000000000006111c232a34373d4245484949484744403b3531271f180c020000000000000000000000000000090f111a1a1a1a180f0d080000050b0d171f212526272624211e160b0801000000000000000000000000000000000000000000000000070b141c20232627272623201d15090902080b15191a1a1a18161006000000001325364455606a6158483b2b1c0c000000000000000417293a4e63798c9fb5c4c6b39d8874604b36200f0000000000091e3245566c8196abbfc7b29d8774604b35200c0000091e3246576c8197acaeaeaea38e79644f38281502000000000004182a3a50667b90a4aeaeae9f8c78624d38230d00000000000000000000000000000005131e2528292929292929292929292929292929292929292929292929292929292929292929292929221f180c0000000010202e373a4646464646464639362d201000000000000001142636576c8196acc1ad97826d58382837576c8197acc1ad98836d58392816030000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e090b0d0e1219263648596e8398aec3d7c2ad97826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000000009141d2025282929292929292220180d0000000000000000000000000000000000000000080d181f22282d3032343433312f2b25201d1509040000000000000000000000000000000000000004040404030000000000000000040a0c0f1112110f0b0902000000000000000000000000000000000000000000000000000000000001080b0d101212110e0b08020000000000000404040403010000000000071c30435460737f766259483a2919090000000000000a1f3346586c8197abaeaeaea895806a5544311d080000000000021628384e63798da1aeaeaea5917c66513a2a1804000c21364b61768999999999999685705c4a361a0a000000000000000c20354b607386979999999995806b56402b1601000000000000000000000000000000010a10121313131313131313131313131313131313131313131313131313131313131313131313130c0b04000000000002101b22253131313131313124221b10020000000000000013283d53687d92a8c7b19b86715645323d53687d92a8c7b19c87715746321e090000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e3924161e212223272e37445462788a9fb4c9d3c3a9947e69543f2914000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b10131313131313130d0b050000000000000000000000000000000000000000000000050b0d13171b1d1e1f1e1c1a15100b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6072839586776258473726140100000000000c21364c6176899999999999988a77624c372715020000000000000a2135495b6e8395999999999985705947341f0a0010253a4f657a8384848484848177614c3e2d1b0000000000000000081c3043546278818484848484816d57422d18020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f1c1c1c1c1c1c1c0f0d070000000000000000000f24394e64798ea9bab49f8a75604b36394f64798ea9bab49f8b76614b36210c0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e393528323637393c3f4b5560728399a8bacdcab6a58e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c10131516161513100c0a030000000000000000000000000000000000000000000000000000030a0c101416161514100c0a0400000000000000070a0b0b0a080400000000000e23394e63788ea19c8676615544311d0f000000000011263b50667b838484848484827a64594834190900000000000000061a2c3d4b61758084848484848377614c37220c000e22374b5d656f6f6f6f6f6e6b615947342010000000000000000001142636485a626c6f6f6f6f6f6d63523f2a16010000000000000000040a0c1f202020201f1b12100a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4bbaa8e79644f39364b60758a9fb4bcab8f7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e4a4a4a454b4c4e52565d65738197a1b2c6d3c3b29c87725c4a36220d000000000000000000000000000000000000000000000000050b0d14120c02000000000000000000000000000000020c1214151513110e0c06000000000000000000000000000000000000020c1214202020202020200d0b0500000000000000000000000000000000000000000000000000000000000000000000050b0d171e2125282a2b2b2a2825211e170d0b05000000000000000000000000000000000000000000080b171e2126292b2c2b2926211f170b080200080e101d2020201f1d180f030000000b20364b6074859ba49a8473604b3d2d1a07000000000f23384c5e666f6f6f6f6f6f6d645c4a3b2a180000000000000000000f1e334657616b6e6f6f6f6f6f615947341f0a00081b2e3f4b4f595959595959564c473b2a180200000000000000000008182b3c484d57595959595957524535230f00000000000000000c171f213435353535343127241d12040000000000000000000000000000000000000000000000000000000000000000000000000000090f1111110f0d070000000000000000000000000000000000070d1d31455671869bb1c8a8927d68533d31445571869bb0c9a8937e69533e29161616160f0d070000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e79636060606056606263676b727a85979fb1bfcfc8b6a5937e69543e2d1b0700000000000000000000000000000000000000000000020e19202229261f14060000000000000000000000000006141f26292b2a28272320190e0c06000000000000000000000000000006141f2629353535353535352220190d00000000000000000000000000000000000000000000000000000000000000050d1820222933363a3d3f40403f3d3a3633292220180d05000000000000000000000000000000000002101b222933363b3e4041403e3b363329201d15111c23253235353535322c2113030000081d3144556177879ca295806a5c4a36211100000000091c2f404c50595959595959584f4a3e2d1d0d00000000000000000003172939464b565959595959594c473a2a1804000010212e373a4444444444444137342a1d0c00000000000000000000000e1e2b3538424444444444423f35271706000000000000000c1c293337494a4a4a4a49463c3930221406000000000000000000000000000000000000000000000000000000000000000000000004121d2426272724221b10020000000000000000000000000002101b22242738576d8297acc1ac96816c57362737576c8297acc1ac97826d5738272b2b2b2b24211a0f01000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e797575757575757677787c80878f9ba3b1bdcec8bbaa9d8775604b3621100000000000000000000000000000000000000000000009151d2b35383e3b322414030000000000000000000000021424323b3e403f3e3c38352c2320190e030000000000000000000000021424323b3e4a4a4a4a4a4a4a4a342b1d0d00000000000000000000000000000000000000000000000000000000000d18202b343739464b4f525455555452504b463937342b20180d0000000000000000000000000000000a151d2e3739464c505455565553504c463a363127212e373a474a4a4a4a473e31210f000002152737475963798a9e9f8c79644e3f2e1c080000000011222f383b4444444444444339362d201000000000000000000000000b1b2933364044444444444437342a1c0c00000002101b22252f2f2f2f2f2f2c221f180c000000000000000000000000000e1920222c2f2f2f2f2f2d2a231709000000000000000417293a474c5e606060605f5b514d40312414000000000000000000000000000000000000000000000000000000000000000000000012222f383b3c3c3a372e20100000000000000000000000000010202d36393f4053697e93a8c9b09b85705443404053687d93a8c8b19b86715645404040404039362d200f000000000000000000000000000000000000000000000000000b20354b60758aa0b5cad0bca9978e8a8a8a8a8a8a8b8c8e91959ca4b0b5c1cec5b9aa9f8c7b655645321e090000000000000000000000000000000000000000010f1927313c484d534f4232211000000000000000000000000c1f32424f54555453514d493c38352c1e160a000000000000000000000c1f32424f53606060606060605e483b2b1905000000000000000000000000000000000000000000000000000001131d2b343b484d54576165686a6b6b6a68656157544d483b342b1d13010000000000000000000000000a1a28323f4b4f576165696b6b6a69656158524b4437303f4b505c5f60605f5b4f3e2c1800000009192a3a4a5b687e93a49a84705d4b37230c0000000003111c23262f2f2f2f2f2f2d24221b10020000000000000000000000000b171e212b2f2f2f2f2f2f221f180c000000000000080e101a1a1a1a1a19160c0b04000000000000000000000000000000050b0d171a1a1a1a1a18160f0600000000000000000a1f3347586174757575757470675f4e42311e0e000000000000000000000000000000000000000000000000000000000000000000091d2f404c5151514f4b3e2e1b0700000000000000000000000e1e2d3e4a4f555555647a8fabbcb49e8974605555555564798faabbb49f8a75605555555555554e4a3e2d1a070000000000000000000000000000000000000000000000000b20354b60758aa0b5cad8c6b5a9a39f9f9f9f9f9fa0a1a3a7abb1b6c2c9c9bfb3a79e8c7d675d4b3828160300000000000000000000000000000000000000000f1f2c37444b5a6269604f3f2e19090000000000000000000012263b4f60696a6a6866635a574d493c32281a0d00000000000000000012263b4f60697575757575757570594834200b0000000000000000000000000000000000000000000000000009141d313b484d59626a71767a7d7f80807f7d7a76716a62594c483b311c14080000000000000000000008182838454b5d656e767b7e8081807e7b76706760554d404b5d6572757575746d5b47321d000000000c1c2d3d4b6073869ca2907b65503a2a17040000000000090f111a1a1a1a1a1a180f0d07000000000000000000000000000000030a0c16191a1a1a1a1a0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c6176898a8a8a8a89867c69604e3c2c190600000000000000000000000000000000000000000000000000000000070b07000f24384c5e666666645c4b37220d080b0b0801000000000006192c3c4a5c646a6b6b6b768a9fb4b9a88d796b6b6b6b6b6b758a9fb4bbaa8e7a6b6b6b6b6b6b6b645c4a36210d0000000000000000000000000000000000000000000000000b20354b60758aa0b5cad3d3c6bcb8b5b5b5b5b5b5b5b7b8bcc0c7c6c7bab4ada199897c675f4d3f2e1a0a0000000000000000000000000000000000000000061a2c3d4955606a787e695d4b3726140100000000000000000014293e54697e807f7d7c78726c625a4b45382b1d0d000000000000000014293e53697e8a8a8a8a8a8a8a78624d37220d00000000000000000000000000000000000000000000000009192631424e59626d777f868a8f9294959594928f8a867f776d62594e42302618080000000000000000011426364556606c7a838b909395969593908b857d74665e4b54657b868a8a8a8b745f4a351f000000001424313f4c55687d92aa99846f5847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001082020202020202020200e0c0700000000000000000000000000000000000000000000000000000000000000000000000a1f3347586a8095a79fa89e9b917e695a4935200e000000000000000000000000000000000000000000000000000008131c201c1311263b51667c7c7c7a644f3a24141c20201c1408000000000c2135495b647a7f808080808a9eb4c6ad988280808080808080899eb3c8ae9983808080808080807a644e39240f0000000000000000000000000000000000000000000000000b20354b60758aa0b5bdbdbdbdbdbdbdbdbdbdbdbdbdbcbbc7bab4b1aca99f988f8378665e4d413021100000000000000000000000000000000000000000000c2136495b63747f8a8f7b655544311d0c0000000000000000001d32475d7287959493918d8881786c6056483b2b1a0a0000000000000014293e53697e939f9f9f9f9f8c77624d37220d000000000000000000000000000000000000000000000008182637444b606877828b949b9faaa7a9aaaaa9a7aa9f9b948b827768604b433626180800000000000000081c3043546074818f999faaa9aaabaaa8aa9f9a92877c6e616073879c9faa9f8a745f4a351f0000000e1e31424e5d656f768a9f9f8b76614c37210c00000000020c1214202020202020200d0b0500000000000000000000090f111c2020202020201d0c0a040000000000000000000009151d35353535353535353524211a0f010000000000000000000000000000000000000000000000000000000000000000000417293a4c6176899eb3b9b4b09f8a78624d3c2b1906000000000000000000000000000000000000000000000000081825303530252034495e74899191836e59442f26303535302618080000000e23384d63788c94959595959ea8b9c6b2a098959595959595959ea7b8c6b2a199959595959595947f6a553f2a150000000000000000000000000000000000000000000000000b20354b60758aa0a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a6a4a99f9c97918a837a6e625a4c40302313030000000000000000000000000000000000000000000e23394e637986949f9b8673604b3a29170400000000000000001d32475d72879ca9a8a6a59d978c81756259483828160300000000000014293e53697e93a8b5b5b5a28c77624d37220d00000000000000000000000000000000000000000000011426364455606d7e8a979faab0b4bbc8bfbdbdbfc8bbb4b0a99f978a7d6c60544336251300000000000004182a3a4b607282969faeb4bbc5b8b3afaeafb1afa59d91827563798ea5b4b49f8a745f4a351f000005192b3c4e60687b84899eaaaa927c67523d271200000006141f2629353535353535352220190d0000000000000004121d24263235353535353533211f170c0000000000000000091927314a4a4a4a4a4a4a4a4a39362d1f0f000000000000000000000000000000000000000000000000000000000000000000000c1f3346586a7f94a7b8c9baa997826d5a4835200d000000000000000000000000000000000000000000000000132536434a4336342b495e74899e99846e59442e36434b4b4336261401000012273d52677c92aaaaaaaaaab4b9c6cfbeb2adaaaaaaaaaaaaaab3b8c5cfbfb2aeaaaaaaaaaaaa97826d58422d180300000000000000000000000000000000000000000000000b20354b60758a93939393939393939393939393939292918f8d8a86827c766d645c4d483c2f221305000000000000000000000000000000000000000000001b30465b70859ba4b4a3937e695846331f0c00000000000000001d32475d72879caaacb2b6b2aa9f978578625645321e0d00000000000014293e53697e93a8becab7a28c77624d37220d00000000000000000000000000000000000000000000091c304354607381939ea8b4bbc5b8b3adaaa8a8aaadb3b8c5bab4a89e928172605443301c1000000000000a1f3447596a7f94a0b1bdc3b7b2a79e9a999a9c9faab0a09886787e93a9c3b49f8a745f4a351f00000b2035485a687e8d9a9ea7b8ab96816c56412c170100021424323b3e4a4a4a4a4a4a4a4a342b1d0d00000000000112222f383b474a4a4a4a4a4a4837332a1c0c00000000000001152737445e60606060606060604e4a3d2d1a070000000000000000000000000000000000000000000000000000000000000000000417293a4b6176899eb3c4c7b49f8b78624d3c2b190500000000000000000000000000000000000000000000071c30435460544d483b495e74899e99846e59443f4b5460605443301c0b000011263c51667b91a6b5b5b5b5b5c9ccd6cfc6c3bab5b5b5b5b5b5b5c8cbd5cfc6c3bbb5b5b5c3af9a856f5a45301a0500000000000000000000000000000000000000000000000b20354a60727e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7d7c7c7a7875716c6761574f4b3e352b1e120400000000000000000000000000000000000000000000001b31465b70859bb0c2b39e8976614c3a29170400000000000000192e43596e839294979da5b4bbb4a39b8575604b3b2b1905000000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000009192f3f4b607282979fb4b9c3b7b2a79e9895939395989ea7b2b7c4b9b49f978272604a3f2e1808000000000c22374c6177899eb4bec5b7a59d9188858485878a919ba3a49c89869cb1c6b49f8a745f4a351f00000d22384d62788b9fabb3b8c5af99846f5a442f1a05000c1f32424f53606060606060605e483b2b1905000000000f1f2f404c515c5f60606060605d4c473a2a17040000000000081d314455707575757575757575705b4a36210c000000000000000000000000000000000000000000000000000000000000000000000b1e3346576a7f94a6b8cbbbaa97816c5a4834200d000000000000000000000000000000000000000000071a2d3d4a60736d62594b455e74899e99846e59484d5d657573604b39291703000e24394e63798eaba0a0a0a0a0b4b9c6c7b7aaa4a0a0a0a0a0a0a0b3b7c4c8b8aba6a0a0a0a0a599846f59442f1a040000000000000000000000000000000000000000000000071c304354606868686868686868686868686868686867666562605557524b4639372e20190e0000000000000000000000000000000000000000000000000014293e53697e93a6b7b9a795806a5847331f0b000000000000000b21364b60757d7f8187939faabbb5a396816c594834200b000000000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000000021527374b5d6b8096a0b1bec0b4a59d9188827f7d7d7f8289919da6b4c1bdb1a095806a5d4b3626140100000014293e53697e93a8b9ccb9a79d877c74706f6f72767c85939ea79e9ca4b5c9b49f8a745f4a351f0000142a3f54697f94a9bac9ccc5b09b86705b46311b060012263b4f60697575757575757570594834200b0000000b1b2d3d4c5e667175757575757572615847331f0a00000000000b20354b60748a8a8a8a8a8a8a8a79634e39240e00000000000000000000000000000000000000000000000000000000000000000000031729394b6175889eb3c4c8b49f8b78624d3b2b180500000000000000000000000000000000000000000c21364a5b6c8182776a60565e74899e99846e595a626e7a867e685746331e0a000b20364b60748d8a8a8a8a8a8b92a8b9bdaa998f8a8a8a8a8a8a8a9da6b7beab9a908a8a8a8a8a877b644f3a250f00000000000000000000000000000000000000000000000000132536434a5353535353535353535353535353535352514f4d4b44373c363329221b100500000000000000000000000000000000000000000000000000000b20364b6075889db2c3b39e8976614c39291603000000000000091e32455760686a6c737e8c9fb4c1b49f8b78624d37220d000000000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000000081d314455657b8d9fb5bec1b4a29a877c746d6a68686a6d747c889ba3b4c2beb49f8c7a645443301c080000001a2f445a6f8499afc6c9b39e8978666054595a576167727e899ca4b1b5c2c9b49f8a745f4a351f0000182d42576d8297acc7d8dac5af9a85705a45301b050014293e53697e8a8a8a8a8a8a8a78624d37220d0000031628394a5b667c868a8a8a8a8a8a8776614c37210c00000000000b20354b60758a9f9f9f9f9f9f8e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000b1e324657697f94a6b7cbbaa996816c594834200d00000000000000000000000000000000000000000e24394e63798d988a7f75675f74899e99846e606a78838f9b8876614c36210c00091d3245566f747575757575748a9eb4baa48f7b74757575757573889db3bba6907c747575757572645c4b37220d0000000000000000000000000000000000000000000000000008182530353e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3d3c3a3835312627211e170b0700000000000000000000000000000000000000000000000000000000091d324556687e93a5b7b9a795806a5746321e0a00000000000003162839454b53555460697f94a5b7baa995806b55382816020000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000b20364b6074879cabbcc9b5a39a84756760555553535555606776859ba4b6cabcab9c8673604b35200f0000001d32485d72879db2c7bfaa95806a5a4b433639464c54606878869ba3b5c9c9b49f8a745f4a351f0000172c41576c8196acc0cdcdbeac97816c57422c17020014293e53697e939f9f9f9f9f8c77624d37220d00000e1e32465763798b9c9faa9f9f9f8c7b655847331f0a00000000000b20354b60758aa0b5b5b5b5a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000031628394b6075889db3c4c7b49f8a77624d3b2a1805000000000000000000000000000000000000051a30455a6f859aa69f95877d7073889e98836e75808a98a0a296806b56412b160002152838455560606060606070859ab0bda8937e6860606060606f8499afbfa9947f6a60606060554f4b3e2e1b08000000000000000000000000000000000000000000000000000008131c202929292929292929292929292929282827272523201d14120c0a03000000000000000000000000000000000000000000000000000000000000021528384b6074879db2c5b39e8976614b362111000000000000000a1b2832363d36434b6074879db2c7b09b85705645321e090000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000081b2e3f53687e93a5b6c9bcab9b857561574b44373e3e37444b576176869cb1c0c9b5a4927d67523d2d1a0700001f344a5f748a9fb4c9baa5907a65503c3026293336434a5a6277859bb0c6c9b49f8b745f4a351f000011273c51667c91a2b4bab9b4a08f7b65503a2510000014293e53697e93a8b5b5b5a28c77624d37220d000e1f30414b6175869ca9b4bbb4a2957f6a5d4b3a2a170400000000000b20354b60758aa0b5cacab8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000b1e324556697e93a6b7cbbaa996816c5947341f0c0000000000000000000000000000000000000012273c52677d87959fa59d928478869c96817b87959fa69d92847a644f39240f00000a1a2837444b4b4b4b4b576c8196acc1ac97826d574b4b4b556b8095aac0ad98836e584b4b4b4437372e20100000000000000000000000000000000000000000000000000000000000070b131313131313131313131313131313131211100d0b080100000000000000000000000000000000000000000000000000000000000000000000000a1d314455697f94a8b9b9a8937e68533f2e1c08000000000000000a161e2128263144556c8196abc1b49f8a76604b36210b0000000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000000d22374b5d72869cb1c3cab59f8d7a64574639312628282631394758657b90a2b4c7c2b09b86715b4a36210c00001f354a5f748b9fb4c9b9a48e79644f36271c171e25303c4859677c91a7bcc9b49f8b745f4a351f00000b20354a607284979fa9a89e95826d5d4b37230e000014293e53697e93a8becab7a28c77624d37220d0a1a2c3d4d5f6d8297a4b6c7b8a69a8472604b3f2e1c0c0000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000031628384b6074879db2c3c7b49f8a77624c3a2a18040000000000000000000000000000000000001025394d5f6775808a98a0a29a89869c9a848c9da59f95887d70645c4a36220d0000000a192631353535353d52687d92a7c7b09b86715544353c51677c91a6c5b29c8772574635353126221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374c61768a9eb4c6b19c86715d4b37230a000000000000000003090b1314263753687d92a8bdbbaa8d77624d38220d0000000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000000f253a4f647a8fa4b6cac6ae98836e5c4a39281d141313141d293a4c5d6f849aafc8c9b5a38e79634e39240e00001d32475c72879cb1c9bca7927d67544437302622201c2b3a52677c91a7bcc9b49f8b745f4a351f0000071c3043546175818a8e8e898073604b3f2e1c08000014293e53697e93a8beccb7a28c77624d37220d152838495b677d92a0b1c2bcab9e8877625443302110000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000a1d324556687e93a5b7cabaa996806b5847331f0c0000000000000000000000000000000000000a1e30414d57606a78838f9aa29e9ca4a19a9f9f988b8075675f4f4a3e2d1b070000000009141d20202024394e64798ea9bab49f8a75604b36384d62788da7b8b59f8b76614b36211d140908000000000000000000000000000000000000000000000000000000000000000000000912191b20202020201b1913090000000000000000000000000000070d0f1c1e180b0903000000070d0f1c1e180b090300000000000000000000091f3346586c8197acc2b5a48f7a655038271502000000000000000000000012273c51677c91a6bcc8a38e79644e39240f0000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000002152737566b8096abc2cdb9a8917c66513e2e1b0b010000010c1c2f3f52687d92aabbcec1aa957f6a553626140100172c41576c8196abbcc5b09b857360554b433638352b2e3c52677c91a7bcc9b49f8b745f4a351f0000001325364657616c767979756b60554431211100000014293e53697e93a8beccb7a28c77624d37220e1d32455663798a9eb4bec1b59f8d7c66594836261403000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000021528384b6074879db2c3c7b49e8a77614c3a2a170400000000000000000000000000000000000113233039454b5a626e7b84989fabb5b3a99f8c82786b61574d41362d201000000000000001080b131620364b60758a9fb4baa98e79644e3935495a73899eb3bcab8f7a654f3a2516130d0b0500000000000000000000000000000000000000000000000000000000000000000c1a262d303535353535312e261a0c000000000000000000000002101b222431332d211e160a02101b222431332d211e160a0000000000000000000417293a4f64798ea4b6c2ad98826d5645311d09000000000000000000000013283d52687d92a7bdb9a48f79644f3a240f0000000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000081d31445570869bb0c5c9b49e8975604b3620100000000000001121364c61768b9fb4cac5af9a85705443301c08000e24394e63798c9fb5c0b4a3978174666054524d483c444252677c91a7bcc9b49f8a745f4a351f00000008182839464b5760646360564b443727150300000014293e53697e93a8beccb7a28c77624d37221e30404b6074859ba8b9c6b5a396806b5e4c3b2b180800000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000a1d314556687d93a5b6cab9a895806b5847331f0b00000000000000000000000000000000000008131c3038454b59626d79838a9fb4b49f8a80776a60564d41362d201507000000000006141f26292c2c31445571869bb1c7a8927d68533d2b3c5a6f859aafc9a8937e69533e2c2b29221f180d000000000000000000000000000000000000000000000000000000000000091a2a3842454a4a4a4a4a4642382b1a090000000000000000000010202d36394649433632281a10202d36394649433632281a0a0000000000000000000c22364a5c71869cb1c6b39e8975604b36200b000000000000000000000014293e54697e93a9bec6a38e79634e39240e0000000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000b20364b60758a9fb4c9c5b09b85705645311d090000000000000a1e33465772879cb1c7c9b49e8975604b35200b000c21364a5b6c8197a2b3bfb19f97867c746c67625a5b595755677c91a7bcc9b49f8a745f4a351f000000000b1b283239454b4e4e4b4538312719090000000014293e53697e93a8beccb7a28c77624d37222b3c4d5e6c8196a3b5c6b9a89b8574604b402f1d0d0000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000021527384b6074879db2c2c6b49e8976614c3a2917040000000000000000000000000000000008182530404c56606a77828c989f9fa9a99f9f968a7f75675f4f4a3e33251503000000021424313b3e41414137576d8297acc1ac96816c57364141566b8196abc0ad97826d583841403e37342a1d0e000000000000000000000000000000000000000000000000000000000012263848555b60606060605b554938261300000000000000000008182d3e4a4f5c5e584b453828182d3e4a4f5c5e584b45382816030000000000000000071b2d3e556a7f94aac3b9a7907b66513626140100000000000000000000152b40556a8095aabfb9a88c77614c37220c0000000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000e23384e63788da9bacec1ac97826c573827150200000000000003172939596e8398aec3cdb9a88c77624d37220d00071a2d3d4b60758499a1b3b8b1a49c9188817c7874716e6c6a697c91a7bcc9b49f8a745f4a351f00000000000b161e28323639393632281d1509000000000014293e53697e93a8beccb7a28c77624d372737485a667c919fb0c1bdb39e8978625544312212000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000a1d314455687d92a4b6cab9a895806a5846331f0b00000000000000000000000000000000132536434a5e66747f8a989fa0978a9f9f8a9ca49e95877d70645c504333200d0000000b1f31424e535656565656697e93a8beb09b85705456565656677c92a7bcb19b867156565656534c483b2c1e0e00000000000000000000000000000000000000000000000000000004192d425566707575757575706755422e190400000000000000011426364a5c6471736d6056453226364a5c6471736d605645321e090000000000000000001023384d63788da4b6c5ad97826d5443301c0800000000000000000002172c42576c8197acc1b49e89745847331f0a0000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000010253b50657b90a5c7d8bfaa947f6a553f2a150000000000000000162b41566b8096abc0d6c6a48f7a644f3a250f00000f1e324557617583939ea7b2b6b1a69d97918d89868381807e8197acc2c9b49f8a745f4a351f000000000000030a161e212424211e160a0100000000000014293e53697e93a8beccb7a28c77624d373144556278899eb3bdc2b19f917d675a4937271504000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000000011527374b6073869cb1c2c6b39e8976614c392917030000000000000000000000000000071c304354606f7c87949ea69d9282849a968186959fa59d91857a6a61503c271300000011263b4e60686b6b6b6b6b6b7a8fa4bab49f8a736b6b6b6b6b6b798da3b8b49f8b746b6b6b6b686259493c2c19060000000000000000000000000000000000000000000000000000061b30455b70848a8a8a8a8a85705b46311b0600000000000000081c304354647a86888274604b36304354647a86888274604b36210b0000000000000000000c2035495a72879cb2c7b39e8974604b35200b000000000000000000021527375a6f849aafc4b09b86715b3a2a18040000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000012273c51677c91a6bcd1bea8937e69533e29140000000000000000152a40556a7f95aabfd0bba6907b66513b26110000031628394657616e7e88949da6acb2b2aca7a89e9b99979594979fb1c5c9b49f8a745f4a351f000000000000000003090b0f0e0b0903000000000000000014293e53697e93a8beccb7a28c77624d373f4b6073859ba7b8c7b6a497816d5f4d3c2c190900000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000091d314455677d92a4b6cab9a7957f6a5746331e0b00000000000000000000000000000b20354a607483919da59f95887d72879d988275808a98a0a29a8d7f6a553f2a1500000013293e53687e8181818181818197acc1baa897818181818181818096abc0bbaa9781818181807e77635a4935200c0000000000000000000000000000000000000000000000000000061b30455b70859a9f9f9f9b86705b46311b06000000000000000b20354b6073879b9e947f69543f354b6073879b9e947f69543f2a1400000000000000000006192c3c566c8196abc8b8a78e79644e39240f000000000000000000081d31445572879db2c2ad98826d58432d18000000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000012283d52677d92a7bcd2bda7927d68523d2813000000000000000014293f54697e94a9bed1bca6917c67513c27120000000a1b2939464b6068767f8890979da5a7abafb2b0aeacaaa9acb1bdcec9b49f8a745f4a351f00000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d3b4c5d6b8095a2b4c5baa99c8675604b41301e0e0000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e06060504030100000000000000000000000000000000000000000000000000000000000000000000011426374b6073869cb1c2c5b39e8976614b3928160300000000000000000000000000071c3043546c8196a1998b80756774899e99836e6a78838f9ba1907b65503b2510000003182d42586d82969696969696979fb1c4c6b19f97969696969696969eb0c4c8b19f9796969695938978634d38230e0000000000000000000000000000000000000000000000000000061b30455b70859ab0b5b09b86705b46311b06000000000000000f243a4f64798fa4b09b85705b3a3a4f64798fa4b09b85705b3a2a170400000000000000000010263b50657b90aabbc5a8937e69533e29140000000000000000000b20364b60758a9fb4bfa9947f6a543f2a15000000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000012273d52677c92a7bcd1bda8927d68533d28130000000000000000142a3f54697f94a9bed1bba6917c66513c2711000000000b1b2932424e57616a747b82888d9296999c9fa9a3a4a5abb0bccdc9b49f8a745f4a351f00000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d4759657b8d9fb5c0beb49f8a79635645322313000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e39241b1b1b1a1a1816130f0b0902000000000000000000000000000000000000000000000000000000000000091c304354677c91a4b5c9b8a7947f6a5746321e0a00000000000000000000000000001325364c6176899083786b615774899e99846e5a626e7b8592836e5d4b37230e00000014293f54697e94a9ababababacb1bdcecebdb1acabababababababb0bccdcebdb1acababababa796806b56412b160000000000000000000000000000000000000000000000000000061b30455b70859ab0c5b09b86705b46311b060000000000000013283d53687d92a8b49e897458473d53687d92a8b49e89745847331f0a0000000000000000000c21364b61768a9fb4c3ae98836e593a2a170400000000000000000e23384e63788daabbc7a6917b66513c2611000000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000011273c51667c91a6bbd1bea9947e69543f29140000000000000000152b40556a8095aabfd0bba5907b66503b261100000000000b161e3139464c5560656c72787d8184878a8b8d8e8f959eb0c3c9b49f8a745f4a351f00000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d546277889dabbcc3b2a0937e685b4a38281605000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e3930303030302f2d2b2824201d150b0903000000000000000000000000000000000000000000000000000000011426364a6073869cb1c1c5b39e8875614b3828160300000000000000000000000000081f334758677c7b6e625a4b5e74899e99846e594d5d65737d79634d3f2f1c0800000010253b50657a90a6b2b3b3b3b3b4b9c6d6c9bcb5b3b3b3b3b3b3b3b4b9c6d6cec5b9b3b3b3b3b09a85705b3b2b190500000000000000000000000000000000000000000000000000061b30455b70859ab0c5b09b86705b46311b0600000000000000162b40556b8095aab9a88c76614c40556b8095aab9a88c76614c37210c0000000000000000000a1e32465771869bb1c6b39d88735847331f0a000000000000000011263c51667b91a6c8baa98d78634d38230e000000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000010253a4f657a8fa4c6d6bfaa95806a55402b150000000000000001172c41566c8196abc1d5c4a48e79644f39240f00000000000003131b293337444b50575b63676c6f72747678797a8095abc0c9b49f8a745f4a351f00000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c7762526072849aa6b8c8b6a598826e604e3d2d1a0a00000000000000000000000000000b20354b60758aa0b5caceb8a38e79634e4545454545454443403e3a363228211e160a040000000000000000000000000000000000000000000000000000081c304354667c91a3b5c9b8a7947f695645321e0a000000000000000000000000000417293a4d5f67655d4d493c5e74899e99846e593f4b546068635b49352111000000000b20364b607488999d9e9e9e9e9ea8b9cdbcab9f9e9e9e9e9e9e9e9ea8b9cdccb9a79e9e9e9e9e9e8974594834200b00000000000000000000000000000000000000000000000000061b30455b70859ab0c5b09b86705b46311b0600000000000000182d43586d8298adc6a38e79644e43586d8298adc6a38e79644e39240f00000000000000000003162939576c8197acc1b7a68c76614c37210c0000000000000000142a3f54697f94a9beb49f8975604b35200b000000000014293e53697e93a8beccb7a28c77624d37220f0000000000000000000000000000000000000d22384d62778da8b9ccc3ad98836e583a2a180400000000000006192b3c5a6f8499afc4cbb8a68c77614c37220c00000000000000000b171e2631353b3d494e52565a5d58616364677c91a7bcc9b49f8a745f4a351f00000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c7767686d7f95a2b3c4bbaa9d8776614c42311f0f0000000000000000000000000000000b20354b60758aa0b5caceb8a38e79635b5b5b5b5b5b5a595856534f4b45383632281f170c00000000000000000000000000000000000000000000000000001325364a6073859bb0c1c5b39d8875604b38281602000000000000000000000000000c1c30414d52504b3f35495e74899e99846e594436434b534d493c2c190300000000081d314455647a8488898989898a9eb4c5b59f8d898989898989898a9eb4c4c9b39e8989898989898978624d37220d00000000000000000000000000000000000000000000000000061b30455b70859ab0c5b09b86705b46311b06000000000000001b30455a70859aafbba6917b6651455a70859aafbba6917c66513c26110000000000000000000013283d52687d92a7bdc4a48f7a654f3a25100000000000000002172c41576c8196acc1b19c86715443301c08000000000014293e53697e93a8becfbaa58f7a65503d2d180800000000000000000000000000000000000b20354a6074899eb3c9c6b19c86715847331f080000000000000b2035495a73889db2c8c8b39e88735947341f0a000000000000000a151d20221f20262c35383d41443a464c4e52677c91a7bcc9b49f89745f4a341f0000000000000000070d0f1415120c0a040000000000000014293e53697e93a8bed3bda8937e7c7d828d9fb5c0bfb49f8b7a645846332414010000000000000000000000000000000b20354b60758aa0b5caceb8a38e79707070707070706f6f6d6b68646056524b453933291c1302000000000000000000000000000000000000000000000000081c304354667c91a3b5c9b8a6937e695645321e0a0000000000000000000000000000122330393c3b372f34495e74899d99846e59442630353d38352c1e0e0000000000021527374a5c646f7274747474788da7b8b49f8b75747474747474778ca6b7b7a18c7774747474747462594834200b000000000000040a0c10101010101010101010101010101010101b30455b70859ab0c5b09b86705b46311b0f0d0700000000001d32485d72879db2bea9937e6954485d72879db2bea9937e69543e2914000000000000000000000f253a4f647a8fa4c4bda8937d68533e28130000000000000003182e43586d8398adc2ae99846f5936261401000000000014293e53697e93a8bed3c3ae99836e5c4a3626150c0c0e10130e0c06000000000000000000071c3043546f859aafc4cab49f8b77614c3625130000000000011527374d62788da6b7cbc9ae99846f593a2a1804000000000003111a27313637332a241d2123282c2f2933363d53687d92a8bdc8b39d88735e48331e00000000000003101b22242a2b28211f170b00000000000014293e53697e93a8bed3c1ad9c939192979fabbcbfb3a1947f695c4b3a291706000000000000000000000000000000000b20354b60758aa0b5cadbc6b19b8585858585858585858482807d79756f6860574c473a301d150a0000000000000000000000000000000000000000000000001325364c5e70859bb0c0c4b39d8875604b382715020000000000000000000000000005121d252725231c32475c71868888816d57422d1c20282321190e0000000000000009192d3e4a4e595d5e5e5e5a73899eb3bcab8f7a645e5e5e5e5973889db3bba6907b665e5e5e5e5e4d483b2b190500000000000c171f2125262626262626262626262626262626262630455b70859ab0c5b09b86705b46312624221b10020000001f344a5f74899fb4c0ab95806b564a5f74899fb4c0ab95806b56402b16000000000000000000000c21364c61768ba6b7c0ab96816b56412c1601000000000000051a2f445a6f8499afc2ad98826d58432d1800000000000014293e53697e93a8bed3cab59f8d79645443312721212326282320190e000000000000000000132536546a7f94a9c0cebbaa937e685443301c0f07000007101d3144556a7f94a9c4cfbcab937e69533e291400000000000011212e38454b4c473a3830211a12171a171f2737546a7f94a9bfc6b19c87715c47321c00000000000b161e2d36393f403d3633291b12040000000014293e53697e93a8bed3cbbaada8a7a7acb5bcc9b3a1998372604a3e2e1b0b00000000000000000000000000000000000b20354b60758aa0b5caddc9b5a39b9a9a9a9a9a9a9a9a999895938f89847d756b61584d4131271a0a000000000000000000000000000000000000000000000008182f4050667b90a2b4c8b7a6937e695645311d090000000000000000000000000000010a1012100e1a2f4357687173736d63523f2a150b130e0c060000000000000000000f202d3639444849493c5a6f859aafc9a8937e685349493b596f8499aebfaa947f6a554949494937342b1d0d0000000002101c2a33373a3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b455b70859ab0c5b09b86705b463b3b39362d20150700001f354a5f748a9fb4c0ab95806b564a5f748a9fb4c0ab95806b56402b16000000000000000000000a1f33465873889db3c3ad98836e58432e1903000000000000061b30455b70859ab0c1ac97826c57422d1709030000000014293e53697e93a8bed3cfbcab9a8473604b45383736383b3d38352c1e0e00000000000000000e23384e63788da2b4c8c8b09b8573604a3d2d211a18181a212e3e4b6074879cb1c7cab49f8b77624d37220d00000000000d1d2e3f4b56606158514c40352c201d15161e3144556d8398adc2c4af9a856f5a45301a000000000b1b28323e4a4f5455524c463a3022120200000014293e53697e93a8bed3d2c1b5b0b0b2b6c3cfc4ae9984756054433020100000000000000000000000000000000000000b20354b60758aa0b5cae4d2c1b5b1b0b0b0b0b0b0b0afaeadaba8a89f9992898076675f4b4538271a0a00000000000000000000000000000000000000000000001223384c5e70859bb0c0c4b29d8774604b37271502000000000000000000000000000000000000001427394a575c5d5d57524535230f0000000000000000000000000000010f1a21242f33343441566b8096abc0ac97826d57372740556b8095aac0ae99836e593a2a34342220190d000000000010202e3a474c50505050505050505050505050505050505050505b70859ab0c5b09b86705b5050504f4a3e33251503001f354a5f748a9fb4c0ab95806b564a5f748a9fb4c0ab95806b56402b16000000000000000000000417293a5b70869bb0c5af9a85705a45301b05000000000000041a2f44596f8499aec3ae98836e59402f211e160a00000014293e53697e93a8bed3d1c9b4a295806c60564e4c4c4e50524d493c2c1906000000000000000c2135495b70849aafc0c9b5a3927d675b4a3d362d2d2d2d363e4a5c697e93a4b6cabfae99846f594834200b0000000005182a3b4b5d65757771665e4e493d36322829323d4b6074889eb3c8c5ab95806b56402b1600000003162839464b5c64696a6761584c4030211000000014293e53697e93a8bed3c9b5a39b9a9ca5b4bcc9b19b86786259483a291a0a00000000000000000000000000000000000b20354b60758aa0b5cadfded1c8c5c4c4c4c4c4c4c4c4c4c2c0c6bab4aea79e95887d6d6056453827150200000000000000000000000000000000000000000000091c2f4050657b90a2b4c8b7a5937e685544311d09000000000000000000000000000000000000000a1c2c3943474848423f3527170600000000000000000000000000000000070d0f1a1d1f273d52677c92a7c6b09b86715544313c51667c91a6c5b29d88725847331f1f0d0b050000000000081b2e3f4b586165656565656565656565656565656565656565656570859ab0c5b09b867065656565645c504333200d001f354a5f748a9fb4c0ab95806b564a5f748a9fb4c0ab95806b56402b160000000000000000000000192f44596e8499aec3b19c87725c47321d0000000000000000162b40556b8095aabeb29d87725e4c3e3632281b0a000014293e53697e93a8bed1c0b4b0b49e95817469646161636568635a4935200800000000000000061a2c3d50667b90a2b4c6c1b39e8979645c4e4a3d42423d4a4e5c647a8a9eb3c2c5b3a18f7a65503b2b1905000000000b1f344859657b898c867c6f635b504b453839464b5b687d92a6b8cbb9a7907b66503b2611000000091e324657616e797f807d76665e4c3f2e1b08000014293e53697e93a8bed3c5b09b858587929fabbcb5a39b877862584638281808000000000000000000000000000000000b20354b60758aa0b5cae3d1c0b4afaeaeaeaeaeaeaeb0b1b3b9c5c7c9c5b9b3a69e928174605645311d1300000000000000000000000000000000000000000000001123384b5d70849aafc0c3b29d8774604b37261401000000000000000000000000000000000000000e1c272f3233332d2a231709000000000000000000000000000000000000000004080e23384e63788da8b9b49f8a75604b36384d62788da7b8b7a58c77614c37220c00000000000000000d22374b5d64767a7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b869cb1c6b19c867b7b7b7b7b796a61503c2813001f354a5f748a9fb4c0ab95806b564a5f748a9fb4c0ab95806b56402b160000000000000000000002172d42576c8297acc1b39e89745e49271501000000000000000e24394e63798ea0b2b6a5907c665c564b45392816030014293e53697e93a8bec8b4a29a9fa99f96877f797676787b7d78634d36261401000000000000000e23384c5e6f849aa8b9c9b8a79d877a6c635b5a58585a5b636c7a889ea8b9c9b9a799836f5d4b371d0d0000000005192b3c4c6277899ea49c9183796e6560565a5a57616979899eb3c4c6b39e8975604b36210b0000071b2d3e4b6175838e949592897c665d4b37220c000014293e53697e93a8beccb7a28c7870727d8d9fb4bdb5a69c8676615645362513000000000000000000000000000000000b20354b60758aa0b5cadcc8b4a29a999999999999999a9c9ea7a9b2b6c3ccc5b8b39f978374604b41301b0b00000000000000000000000000000000000000000000081c2f3f50657a8fa2b4c7b7a5927d685544311d0800000000000000000000000000000000000000000a141a1c1e1e18150f0600000000000000000000000000000000000000000000000b20354b6074899eb4baa98e79644e3935495a73899eb3c3a5907b65503b261000000000000000000f253a4f647b8a8f9090909090909090909090909090909090909090909ca4b5c9b6a49c90909090908e7f6a55402a15001f354a5f748a9fb4c0ab95806b564a5f748a9fb4c0ab95806b56402b160000000000000000000000162b40556b8095aac0b49f8a755544311d08000000000000000c21364a5b6e8398a4b4b39d887a6f6b605745321e090014293e53697e93a8bec5b09a858b9fb4a59d948e8c8b8d909286725443301c0800000000000000091c2f404d62788a9eabbcc5b7a69d8c8179726f6d6d6f7279818c9ea6b8c6bcab9e8978624d3f2e1c00000000000b2034485a6d8297a7b6b1a1998c837b75716f6f71767e899ea7b9ccb9a896806b5745321e0900000d22364a5c6e8298a0a9aaa79e8c7b654f3a2917040014293e53697e93a8beccb7a28c77625f697f949fb0bfb5a49a8474605443301c140400000000000000000000000000000b20354b60758aa0b5cadac5af9a84848484848484848586898e949ca4b3b9c5cbbdb1a197816d5f4d39281603000000000000000000000000000000000000000000001123374b5d6f849aafbfc3b29c8773604b3626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c30435470859bb0c7a7927d68523d2b3c5a6f859aafbfa9947f6a543f2a150000000000000006192b3c596f8499a8a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5b1b5c2d2c2b6b1a5a5a5a5a59a856f5a45301a001f354a5f748a9fb4c0ab95806b564a5f748a9fb4c0ab95806b56402b160000000000000000000000152a40556a7f95aabfbbaa8a75604b35200b00000000000000071a2d3d4c6176869aa2b2a69d8c848075604b36210b0014293e53697e93a8bec0ab96808095a4b6b2a9a3a1a1a3a59f8a74604b35200b0000000000000000112035495a677d8d9fabbac4b7aa9f968e8784828284878e969fabb8c5b9ab9f8d7c66594834211100000000000d22384d62778a9faab7bfb3aa9f98908a868584868a939ea7b9c5bdb49e8a77624d3928160300000f24394f647a8ea0b2bfc5b8aa9b85705846331f0a0014293e53697e93a8beccb7a28c77624d616c8196a1b2c1b4a2988272604a4232231203000000000000000000000000000b20354b60758aa0b5caceb8a38e796f6f6f6f6f6f6f707174797e87929ea7b7c3cebfb19f917d675746321e0900000000000000000000000000000000000000000000081c2e3f4f647a8fa1b3c7b6a5927d675443301c0800000000000000000000050b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b05000000000000000000000000000000000000000001142636576c8196acc1ac96816c57362641566b8196abc0ae98836e593a2917040000000000000b2035485a73889eb3c6babababababababababababababababababababac6c9d2e0d3cac6babababaaf9a85705a45301b001f354a5f748a9fb4bdab95806b564a5f748a9fb4bdab95806b56402b160000000000000000000000142a3f54697f94a9beb6a08b76614b36210c00000000000000000f1f334758617784919da5ab9f9a8c77614c37220c0014293e53697e93a8bebea9947e75869ca8b9c6b9b6b6b8bcab8c77614c37220c000000000000000006192c3c4d5f697e8d9fa8b4c1bbb4aba59d999797999da5acb4bcc0b4a89e8d7e685e4c3b2b190300000000000b2034485a687e8c9da5b4babbb4aea99f9b9a999b9faab3b9c5bcb09f927d685948341b0a000000152a3f556a7f94aabecfd6c8b4a28b76614c36210c0014293e53697e93a8beccb7a28c77624d4b60728399a3b4c0b2a096806b614f41302111010000000000000000000000000b20354b60758aa0b5caceb8a38e79635959595959595b54606369737d899da5b7c6cebdb39d8875614b36210f00000000000000000000000000000000000000000000001122374b5c6f8499afbfc3b19c8673604b3625130000000000000000000d181f22222222222222222222222222222222222220180d000000000000000000000000000000000000000013283d53687d92a8c7b09a85705443303d52677c92a7c6b29c87725846331f0a0000000000000d23384d62788da7b8ccd5c4b7b3adadadadadadadadadadadadadadadadb3b8c4d5c5b8b3adadadadad9a85705a45301b001f354a5f748a9fa8a8a895806b564a5f748a9fa8a8a895806b56402b16000000000000000000000014293e53697e93a8beb6a18c77614c37220c000000000000000004172a3a4759616f7b879db2b4a18c77614c37220c0014293e53697e93a8bec7a7927c67798a9ea8b7c3cbd4d9c9a38e79634e39240e0000000000000000000e1e30404e60697d8a9ba3b1b5c2c3b6b2afadadafb2b6c3c1b5b1a29b8a7d68604e402f1d0d00000000000005192b3c4e60687b87969fa9b4b9c6bab4b1afafb0b4bbc8c2b6b19e96816d604e3b2b1800000000162b41566b8096abc7d7e1cdbaa98d78624d38230d0014293e53697e93a8beccb7a28c77624d43546074859ba5b6beb09e937f695f4d3f2e1f0f0000000000000000000000000b20354b60758aa0b5caceb8a38e79634e444444444436434a4e54606778879da8b9cccbb7a6947e69543d2d1a0700000000000000000000000000000000000000000000081b2e3e4f647a8fa1b3c9b6a4927d675443301c08000000000000000d1d2a34373737373737373737373737373737373737342b1d0d000000000000000000000000000000000000000f24394e64798ea9bab49e8974604b35394e63788ea8bab6a58b76614c36210c00000000000012273c51677c91abbccfcbb7a69d979797979797979797979797979797979ea6b8cbb8a79e97979797979785705a45301b001f354a5f748b9393939393806b564a5f748b9393939393806b56402b16000000000000000000000014293e53697e93a8beb6a18c76614c37210c00000000000000000b1b314150626a7c869ca5b1acaa8c77614c37220c0014293e53697e93a8aeaea98f7a65657b8a9da5b2b7c4bcc1a5907b65503b261000000000000000000000122231424e5f677985919ba3abb0b4bac7babac7bab4b0aba39b918579675f4e4231221200000000000000000d1d31424e5d6576808b969ea8adb2b6c3bbbcbcc6b9b4aea49c918072604a42311d0d0000000013293e53687e93a9bacacec3b49f8a74604b36200b0014293e53697e93a8beccb7a28c77624d3645566177879ca7b8bcb49f8d7d675d4b3d2c1d0d00000000000000000000000b20354b60758aa0b5caceb8a38e79634e392f2f2f2f25303536434b5a63798a9eb4c6d5c4b19c87725b4a36210c00000000000000000000000000000000000000000000001022364a5c6f8399abbcc2b19c8673604a36251300000000000005182a3b474c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c483b2b18050000000000000000000000000000000000000b20364b60758a9fb4b9a88d78634e38354b6074899fb4c1a58f7a65503a251000000000000010253a50657b8c9fb5c0c8b39d8882828282828282828282828282828282889eb3c8b39e898282828282827f6a543f2a150013283d53687d7e7e7e7e7e7a644f3d53687e7e7e7e7e7e7a644f3a240f0000000000000000000000142a3f54697f94a9beb6a08b76614b36210c00000000000000031628394e606a80919ca4b09f978e8c76614c37210c0014293e53697e93999999988a76615d657a87959da6a5a7a5a3927d67523d28120000000000000000000004142431414d5b63727c868e959b9fa9a4a5a5a4a99f9b958e867c72635b4d41312413040000000000000000001424313f4b57616b78818991989da5a3a5a6a6a4a89e9992867c6b60544330231300000000000d22374c62778a9fb2b7bbb4a597826d5645321d090014293e53697e93a8beccb7a28c77624d373847596379899ea9babcab9f8b7b655b493b2b1b0b000000000000000000000b20354b60758aa0b5caceb8a38e79634e39241a1a1a131c2026303c4a5b6a7f95a8b9cdcab6a48e79634e39240e0000000000000000000000000000000000000000000000071b2d3e4e64798c9fb5c9b6a4917c675443301c0700000000000b1f344759626262626262626262626262626262626262594834200b000000000000000000000000000000000000081d3144556e8398a4a8a7927c67523d30435470859ba8a8a3907b65503b26100000000000000e23374b5d6b8095a2b4c5b49f8b7a6d6d6d6d6d6d6d6d6d6d6d6d6d6d70859ab0c5b09b85706d6d6d6d6d6a614f3c27130011263a4e60686868686868645c4b3a4e60686868686868645c4b37220d0000000000000000000000152a40556a7f95aabfbbaa8a75604b35200b00000000000000091e324657687d929eb2b09f96827974615847331f0a0011263b51667c84848484827c66574c5c64767f888d9091908c8579634e39240e0000000000000000000000061423303d4a546067717980858a8c8e8f8f8e8c8a85807971676054493d30231306000000000000000000000614212e39464c5a626c767c82878b8e9091918f8d89837d74665e4a433625130500000000000b20344859697e919da5aa9f988777614c382815020014293e53697e93a8beccb7a28c77624d372a3a495b647b8b9fabbcbaa99e8979635948392919090000000000000000000b20354b60748aa0b5caceb8a38e79634e39240e040000070b141c2d3d4b6176899eb4c9d3c2a8937e69533e29140000000000000000000000000000000000000000000000001022364a5c6e8399abbcc2b19c8673604a35201200000000000d22374c62777777777777777777777777777777777777624c37220d000000000000000000000000000000000000021527374c62778690939393806b56412636576c81939393918574604b36200b000000000000081c2e3f4b6073849aa6b8bcab9d88766158585858585858585858585b70859ab0c5b09b86705b58585858544f4332200c000b1e31424e5353535353534f4b3e31424e5353535353534f4b3e2e1b070000000000000000000001162b40566b8095abc0b49f8a755544311d08000000000000000c21364b6175899eb3baa896816d635b4c473a2a1704000f24384c5e666f6f6f6f6d665e4c3e4b57616a73787b7c7b7770635b4a36210c00000000000000000000000005131f2d36434a525c646b707477797a7a797774706b645c524a43362c1f120500000000000000000000000003101b29333c494d5761676d7276797b7c7c7a78756e6760554d403025180800000000000005182b3b4e60697d878d8e8a8377625947341a0a000014293e53697e93a8beccb7a28c77624d37222c3c4b5d677d8d9fb4bdb8a79d87776257463727180800000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000010f1e3346576f8499aec4d7c2ad97826d58422d18000000000000000000000000000000000000000000000000071b2d3e4e63798c9fb5c9b5a4917c6651402f1d09000000001c32475c71868c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c88735e48331e00000000000000000000000000000000000000092034485962737b7d7e7e7c65503b26394e63797e7e7d7b74605645311d0900000000000000111d3144556277889eabbcb7a699836f604f3e42424242424242455b70859ab0c5b09b86705b464242423f3c3225150300021324313a3d3e3e3e3e3e3a372e24313a3d3e3e3e3e3e3a372e2010000000000000000000000002182d42576d8297acc2b39e89735e492614010000000000000013283d52687d92a7b8b49f8a76614e493d332a1c0c0000091d2f404c515959595958504c402f39464c555b6366676662594e4a3d2d1a0700000000000000000000000000010f182530353e4a4f5654606264656564626054564f4a3e353025180f010000000000000000000000000000000b171e2b3539464b525858616466676765636056524b4437301c130800000000000000000d1d31424e5f67727879766e6259483b2a1800000014293e53697e93a8beccb7a28c77624d37221e2e3f4d5f697f949fb0bfb7a59b857561554436251300000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000003172939546a7f94a9bfd4c5af9a85705a45301b000000000000080e10151515151515151515151515151515151521364a5b6e8398abbcc2b09b85715e4c382411000000001c32475c71879ca2a2a2a2a2a2a2a2a2a2a2a2a2a29d88735e48331e0000000000000000000000000000000000000005182b3b48556065686868655e4c3823364a5b63686868666056453827150200000000000000011426374859657b8d9fb5c0b3a1937e695c4a39282d2d2d2d30455b70859ab0c5b09b86705b46312d2d2a2720150700000006131e2628292929292924221b131e2628292929292924221b10020000000000000000000000041a2f44596f8499aec4b19c87725c47321d0000000000000003182d43586d8298adc5af9a846f5846352c1f170c0000000012222f383b44444444433b382f222933363d494e5052504d483b362d1f0f0000000000000000000000000000000008131c202d363936434a4d4f50504f4d4a433639362d201c1308000000000000000000000000000000000000030e19202832363c3a464c4e5051514f4e4b453835312719120000000000000000000000142431414d525b636461584c483b2a1d0c00000014293e53697e93a8beccb7a28c77624d3722102030404f616c8196a1b3c1b5a39a8473605443301c10000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000012283d52677d92a7bcd2c6b19c86715c47311c0000000003111c23252a2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2d3d4e63798c9fb4c5b5a3907c6651402f1c090000001c32475c71879cb1b7b7b7b7b7b7b7b7b7b7b7b7b39d88735e48331e00000000000000000000000000000000000000000d1d2b37444b50535353504c402f1c2d3d4a4e535353514b4538281a0a00000000000000000009192b3b4c5e6b8095a2b4bfb49f8b7a645746321e18181b30455b70859ab0c5b09b86705b46311b1815130c030000000000020b111313131313130f0d07020b111313131313130f0d07000000000000000000000000000417293a5b71869bb0c4af9a856f5a45301a05000000000000051b30455a70859aafc2ad97826d583a291a0f04000000000004121d24262f2f2f2f2e26231c11171e212c35383b3c3b37342b211a0f0100000000000000000000000000000000000007101b222425303537393a3a393735302524221b100700000000000000000000000000000000000000000000060b161e2127293336393b3c3c3a38363127201d150900000000000000000000000006142330393d494e4f4c473a342a1d0d0000000014293e53697e93a8beccb7a28c77624d37220d122232434b60728399a3aeaeaea2988272604a3e2d1b070000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000011263c51667b91a6bbd0c7b29c87725d47321d0000000311212f373b4040404040404040404040404040404040404040495b6d8297a7b9c1b09b85705e4c3823110000001c32475c71879cb1babababababababababababab39d88735e48331e0000000000000000000000000000000000000000000d192731353b3e3e3e3b382f21111f2d36393e3e3e3c3632281a0a00000000000000000000000d1d2f404b6073849aa6b8baa99c8675614b41301e0e1b30455b70859ab0c5b09b86705b46311b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475873889db3c2ad98836d58432e1803000000000000051a30455a6f859aafc2ad97826d58422d18000000000000000000090f111a1a1a1a18110f0900030a0e1a21232627262220180d0700000000000000000000000000000000000000000000070d0f131c20222425252422201c130f0d07000000000000000000000000000000000000000000000000000003090c12171f21242627272523201d150b0801000000000000000000000000000005131e252c3538393733291f180d000000000014293e53697e93a8beccb7a28c77624d37220d04141c30435460748594989999999995806b5c4a36220d0000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000012283d52677d92a7bcd2c6b19c87715c47321c00000011212f3f4b50555555555555555555555555555555555555555555556177899eb3c3b5a3907b66503f2e1c0800001c32475c71869ca5a5a5a5a5a5a5a5a5a5a5a5a5a59d88735e48331e0000000000000000000000000000000000000000000009151d202628292926231c11030f1a212429292826211e160a00000000000000000000000000111d3144556277889eabbcb6a497826d5f4d3c2c191b30455b70859ab0c5b09b86705b46311b06000000000000000000000000000000000000000000040a0c11131415150c0a0300000000000000000000000000000c21374c61768ca6b8c0ab96806b56412b160100000000000004192e43596e8398aec3ae98836e59432e19000000000000000000000000040404040300000000000000060c0e1112110d0b0500000000000000000000000000000000000000000000000000000000070b0d0f10100f0d0b0700000000000000000000000000000000000000000000000000000000000000000000040a0c0f111212100e0b0902000000000000000000000000000000000000010a0e1a212324211f170c0500000000000014293e53697e93a8beccb7a28c77624d37220d0001142636455660757f8384848484848379644f39240f0000000000000b20354b60748aa0b5caceb8a38e79634e39240e0000000000000317293954697f94a9bed4c5b09a85705b45301b0000081c2e3f4b5d656a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a7c91a5b7c1b09b85705d4b37230e00001c32475c71868f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f88735e48331e000000000000000000000000000000000000000000000001080b10131313100e09000000070c0e131313110b09020000000000000000000000000000011426374859657b8d9fb4c0b19f927d675a4937271530455b70859ab0c5b09b86705b46311b06000000000000000000000000000000000000040a0c181f222628292a2b211e170b000000000000000000000000000f253a4f647a8fa4c4bda8927d68533d28130000000000000002172d42576c8297acc1b09b85705b3a2a17040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0f0c0a04000000000000000014293e53697e93a8beccb7a28c77624d37220d0000081828384556606a6e6f6f6f6f6f6f645c4a36220d0000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000004101e3346576e8499aec3d7c2ad98826d58432d1800000e23374b5d657b7f808080808080808080808080808080808080808080808080879db2c7b4a28f7b65503a251000000f243a4f647a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3b4c5d6b8095a2b4beb39e8978625544311d30455b70859ab0c5b09b86705b46311b0600000000000000000000000000000000000c171f212a33373b3d3f40403633291b0b00000000000000000000000013283d53687d92a8bdc3a48f7a644f3a250f0000000000000000162b40556b8095aac0b39d88735847331f0a0000000000000000050b0d1c1c1c1c1c1b19130900000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0f0f0f0f0e0c0700000000000000000000000000000000020c1214202020202020200d0b05000000000000000000030c121420202020202020200902000000000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000000a1a2838454b54595959595959594f4a3e2d1b070000000000000b20354b60758aa0b5caceb8a38e79634e39240e030a0c0d0f181f2d3e4b6176899eb4c9d4c3a9947e69543f2914000010253b50657b90959595959595959595959595959595959595959595959595959da5b7cbc0ad98836e5837261401000d22364a5c6465656565656565656565656565656565645d4b37220d00000000070d0f2020202020201f14120c020000000000000000000000010a10121e2020202020201d0c0a030000000000000000000000000000000000000d1d2f3f4b6073849aa6b8b9a89b8574604b3f2f30455b70859ab0c5b09b86705b46311b0600000000000000000000000000000002141c2933363a474c51525455554c46392917030000000000000000000003172939576c8297acc1b7a58b76614c36210c000000000000000012283d52677d92a7bcb7a68c76614c37210c000000000000000d1820223232323232302e261a0c00000000000000000001080b0c0c0a03000000000000000000000000000000000000000000000000000c181f222425252524211a0f010000000000000000000000000006141f2629353535353535352220190d00000000000000071420272a35353535353535351e160a000000000000000000070d0f1415120c0a040000000000000014293e53697e93a8beccb7a28c77624d37220d000000000a1a2832363f4344444444444439362d2010000000000000000b20354b60758aa0b5caceb8a38e79634e392420171e2122242a343e4a5c6a7f95a8b9cdcab7a58f79644f3a240f0000152a40556a7f95aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab2b7c3d4c8b39d88735544311d0800071b2d3e4a4f505050505050505050505050505050504f4b3f2e1b08000002101b22243535353535353429271f140600000000000000000005131e25273335353535353532211e160b000000000000000000000000000000000000111d3144556277889eabbcb5a396806b5d4c3b2a455b70859ab0c5b09b86705b46311b0600000000000000000000000000000a151d323a464c5558616668696a6a615746331e0a000000000000000000000a1e33465771869cb1c6b29d88725746331e0a00000000000000000f253a4f647a8fa4c5c4a48f7a654f3a25100000000000000d1d2b343747474747474642382a1a000000000002090b11151d2022211e17150d0b050000000000000000000000000000000000000007151c2a3337393a3a3a39362d1f0f000000000000000000000000021424323b3e4a4a4a4a4a4a4a4a342b1d0d0000000000031425323b3f4a4a4a4a4a4a4a4a32281a0a00000000000003101b22242a2b28211f170b00000000000014293e53697e93a8beccb7a28c77624d37220d00000000000a161e212a2e2f2f2f2f2f2f24221b1002000000000000000b20354b60758aa0b5caceb8a38e79634e393535293336383a3a474c5c647a8a9eb4c6d5c5b29d8773604a35200b0000152b40556a8095aabfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbfc7cbd4d3cbb8a68a74604b35200b000010202d363a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a372e201000000010202d36394a4a4a4a4a4a493e3b322414040000000000000002132330393d494a4a4a4a4a4a483632291b0b0000000000000000000000000000000000011426374859657b8d9fb4c0b59f8d7b65594736455b70859ab0c5b09b86705b46311b06000000000000000000000000000a1a2731424f58616a71777b7d7e7f8076614c36210c000000000000000000000c21364c61768b9fb4c3ad98836e583929170300000000000000000c21374c61768ca7b8bda8937d68533e2813000000000005182b3b484d5c5c5c5c5c5b5548381b0b0000070b151d2027273135373633292a2220190d0100000000000000000000000000000000071525333a474c4f4f4f4f4e4a3d2d1a0700000000000000000000000c1f32424f53606060606060605e483b2b1905000000000c2032434f54606060606060605e4538281602000000000b161e2d36393f403d3633291b12040000000014293e53697e93a8beccb7a28c77624d37220d00000000000003090b15191a1a1a1a1a1a0f0d070000000000000000000b20354b60758aa0b5caceb8a38e79634e4a4a4a39464c4d4f5459616b7a889ea8b9cdccb8a7947f6a5443301c070000152b40556a8095aabdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc4a08b76614b36210c000002101b22242525252525252525252525252525252525221b10020000071b2d3e4a4f5f60606060605f544f4232221200000000000000102030414d525e6060606060605d4b4639291603000000000000000000000000000000000009192b3b4c5d6b8095a2b4bcab9d8877615443455b70859ab0c5b09b86705b46311b0600000000000000000000000002152738454b6169767f868b909294958c77624d37220d0000000000000000000011263b51667b90abbcc4a8937e68533e29130000000000000000000a1f33475873899eb3c1ab96816c56412c1700000000000b2034485962717171717170665539291708131c202832363c37444b4c4c46394038342b1d15090000000000000000000000000000061525334350586164646464635b4a36210c000000000000000000000012263b4f60697575757575757570594834200b0000000012273b4f616975757575757575705645321e090000000b1b28323e4a4f5455524c463a3022120200000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000040404040404040000000000000000000000000b20354b60758aa0b5caceb8a38e7963606060606057616264696e77808c9ea6b8c6cebeb39e8976614c362513000000152b40556a8095a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a08b76614b36210c00000000070d0f101010101010101010101010101010100f0d08000000000d22364a5c647575757575757469614f40301c0c000000000009192d3e4d5f677375757575757572615746321e0a0000000000000000000000000000000000000d1d2f3f4b6073849aa6b8b8a6998372604a3e5b70859ab0c5b09b86705b46311b06000000000000000000000000081d314556606e7e89949c9faba7a9a28c77624d37220d000000000000000000061a2c3d576c8196acc9b8a68e79634e39230e00000000000000000004172a3a5b70859bb0c4af9a846f5a38281602000000000d22374d6277868787878784705746331e2025303538454b515855606161575b554d483c3127190a000000000000000000000000051424334350616a77797a7a7a79634e39240e000000000000000000000014293e53697e8a8a8a8a8a8a8a78624d37220d00000000142a3f54697f8a8a8a8a8a8a8a74604b36210b000003162839464b5c64696a6761584c4030211000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb8a38e797575757575757576777a7e838a959faab8c4cdbfb1a0927d685847331808000000152b40556a809393939393939393939393939393939393939393939393939393939393939393938b75614b36210c0000000000000000000000000000000000000000000000000000000000000f24394f64798c8a8a8a8a8a897e695e4d3a2a1804000000011426374a5c677d888a8a8a8a8a8a8776614b36210c00000000000000000000000000000000000000111d3144556277889eabbcb3a1947f695c4a5b70859ab0c5b09b86705b46311b060000000000000000000000081830414b607482939ea8b1b5b3adaaa68c77624d37220d0000000000000000000c2135495b72879db2c7b39e88735b4936210c00000000000000000000182e43586d8398adc2b29d88735645321e09000000000c21374c61768c9c9c9c9c8c76614b382c3536434a505660666d7275777674716a625a4b4437281a0a00000000000000000000041323324250616a7f8b8e8f8f8f7e69533e2914000000000000000000000014293e53697e939f9f9f9f9f8c77624d37220d00000000142a3f54697f949f9f9f9f9f8b75604b36210b0000091e324657616e797f807d76665e4c3f2e1b08000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cad0bca9978e8a8a8a8a8a8a8a8b8d8f93989fa9b4bbc8cabcb0a197826d604e3a2917000000000f24394f647a7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e75604b35200b00000000000000070d0f1415120c0a0400000000000000000000000000000d22364a5c6b8095a39f9fa89e8d7c665947341f13000000081d314455647a8b9ea69f9f9f9f8d7b655746321e0a00000000000000000000000000000000000000011426374859657b8d9fb4bfb49f8b7a64575b70859ab0c5b09b86705b46311b0600000000000000000000011426364d5f6d8197a0b3b9b1a79e9895948874604b35200b0000000000000000000e23394e63798ea5b6c5ac97826c573d2c1a0600000000000000000001162b40566b8095abc0b7a68b76604b36210b000000000b20354a60748a9fb1b1ab917c6756493c494d5460656d757c82878a8c8b89867f786a60554538281603000000000000000003122230414f606a7f959faaab9b8573604b35200b000000000000000000000014293e53697e93a8b5b5b5a28c77624d37220d00000000142a3f54697f94a9b5b5b5a08b76604b36210b00071b2d3e4b6175838e949592897c665d4b37220c000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cad8c6b5a9a39f9f9f9f9f9f9fa1a2a4a9aeb4bac7c8c2b6b19e968373604b41311c0c000000000d22364a5c6468686868686868686868686868686868686868686868686868686868686868686868605544311d08000000000003101b22242a2b28211f170b00000000000000000000000000071b2d3e4b6074869baabbb9ab9e8977614c41301d0d0005192b3b4b6073859ba9b8c4b7a597816c5d4b39291603000000000000000000000000000000000000000009192b3b4c5d6b8095a2b4bbaa9c8775615b70859ab0c5b09b86705b46311b0600000000000000000000081c304354677d919fb1beb1a0978983807e78625544311d080000000000000000081b2e3f556a8095aac3b8a7907b65503b26100000000000000000000000152a3f546a7f94a9bfc4a28d78634d38230e00000000071c30435470859bb0c9b19c8674635a5b5a636a737a828991989c9faba99f9b958a8073605645321e12000000000000000211212f404d5f697e939db4b59f8d7a645544311d08000000000000000000000014293e53697e93a8becab7a28c77624d37220d00000000142a3f54697f94a9becab5a08b76604b36210b000d22364a5c6e8298a0a9aaa79e8c7b654f3a2917040014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5cad3d3c6bcb8b5b5b5b5b5b5b5b6b7b9bec3c8c4c1b4b0a49c9080736055443123130000000000071b2d3e4a4f535353535353535353535353535353535353535353535353535353535353535353534b4437271501000000000b161e2d36393f403d3633291b1204000000000000000000000000101d314455647a8b9fb4c1b8a798836e5f4d3b2a18050b20344859697e93a3b5c7bdb29d8775614b3f2f1b0b000000000000000000000000000000000000000000000d1d2f3f4b6073849aa6b8b6a598826d5f70859ab0c5b09b86705b46311b06000000000000000000000b20354b6073869cb1bdb3a19782766d6a69625a483727150100000000000000000d22374b5d72879cb2c7b39e8974604b35200b000000000000000000000013283e53687d93a8bdb9a48e79644f39240f0000000000132536566b8096abbfb5a49a8478727072787f878f979ea7adb2b5bcbab4b0a99f958374604b40301d0900000000000110202e3f4c5e677d8d9fb5b8a797826d5c4b37261401000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b000f24394f647a8ea0b2bfc5b8aa9b85705846331f0a0014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5bdbdbdbdbdbdbdbdbdbdbdbdbdbdbcbbc4b7b2aea9a39b92867b6b6055443727150500000000000010202d36393e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3531271909000000000b1b28323e4a4f5455524c463a302212020000000000000000000000021527374a5c6a7f95a3b5c5b2a0917d675947341f131b2f404d62788a9eb4c1c4b19f907b665746332111000000000000000000000000000000000000000000000000111d3144556277889dabbcb2a0927d6770859aafc5b09b86705b46311b060000000000000000000011263b50667b90a4b6bcab99836f615755544d483c2b1909000000000000000004182a3a4f647a8fa5b6c1ac97826d5544311d08000000000000000000000012273c52677c91a7bcb9a48f79644f3a240f00000000000e24394e63798ea1b3c2b4a29a8c8785888d949ca5adb3b9c5bfbab8bbc2c7bab4a198826d5e4c38241000000000000f1f2d3e4b5d667c8c9fabbcb39e8977614c3e2e190900000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b00152a3f556a7f94aabecfd6c8b4a28b76614c36210c0014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000b20354b60758aa0a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a7a5a3a69d99938d857d73655d4b44372719090000000000000002101b222429292929292929292929292929292929292929292929292929292929292929292929201d15090000000003162839464b5c64696a6761584c4030211000000000000000000000000009192d3e4b6073859ba9babfb39e8977624c41301d28394c5e6e8399a8b9cbb7a697826d5e4c39291703000000000000000000000000000000000000000000000000011426374859657b8d9fb4beb49e8a796f8499afc4b09b86705b46311b0600000000000000000001162c41566b8196abc2b59f8c78634e46393f38352b1e0e0000000000000000000a1f3347586d8297acc3b5a38f7a644f37271501000000000000000000020812273d52677c92a7bcc3a38d78634e38230e00000000000c21364a5b6f849aa8b9c0b4ab9f9c9b9da5aab2b6c3c1b5b0a9a5a3a5acb4bcbfb2a0917c66513e2d1b070000000e1e2c3d4a5c657b8b9faabbb5a3937e6858473320100000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b00162b41566b8096abc7d7e1cdbaa98d78624d38230d0014293e53697e93a8bec6b7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000b20354b60758a9393939393939393939393939393939292908e8c88847e78706760554b3f3127190900000000000000000000070d0f131313131313131313131313131313131313131313131313131313131313131313130b08010000000000091e324657616e797f807d76665e4c3f2e1b080000000000000000000000000f1d31445563798b9fb4c1b8a799836e5f4d3b2a324657667c91a1b3c6beb29d8876614c402f1b0b000000000000000000000000000000000000000000000000000009192b3b4c5d6a8095a2b4b9a89b85758398aec3b09b86705b46311b06000000000000000000061b30465b70859bb0c5b19c86715b493529292220190e000000000000000000021528384c61778a9fb4c5b09b86715c4b37190900000000000000010a09151d202d3d546a7f94a9bfb7a58c76614c37210c0000000000071a2d3d4d63788a9eaab8c5bcb5b1b0b2b7c3c4b8b3aba39b948f8e90979fabbcbeb09b85715c4a36220d00000c1c2b3c495b647a8a9ea9babcab9b8573604b3a2a18020000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0013293e53687e93a9bacacec3b49f8a74604b36200b0014293e53697e93a8b0b0b0a28c77624d37220d00000000000000000000000000000000000000000000000000000000000b20354a60727e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7d7c7b7976736f69635b524b44372f1d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4b6175838e949592897c665d4b37220c000000000000000000000000011527374a5b6a7f94a3b5c5b2a1927d675948343e4b6175879db2bfc4b2a0907c665846332211000000000000000000000000000000000000000000000000000000000d1d2f3f4b6072849aa6b8b5a396808197acc1b09b86705b46311b06000000000000000000081e33485d73889db2c2ad98836d583d2c1a140d0b0500000000000000000000091d3245566a7f94a9bab8a7927d68533e2e1b0000000000000005131e252731363b4a5b6f849aafc4b29d88725847331f0a0000000000000f2035495a677d8c9ea7b3b8c4bebec5b8b3aca69e968e857f7a797b828d9fb4bfb5a38f7a644f3a240f000417293a485a6379899ea8b4b4b29f8c7a645443301c0c000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b000d22374c62778a9fb2b7bbb4a597826d5645321d090014293e53697e939b9b9b9b9b8c77624d37220d0000000000000000000000000000000000000000000000000000000000071c304354606868686868686868686868686868686868676664615859544d493c353126191101000000000000000000000a141a1d202020202020202020202020202020202020202020202020202020202020202020201d1a140a000000000d22364a5c6e8298a0a9aaa79e8c7b654f3a29170400000000000000000000000009192d3d4b6073859ba9babfb39e8977624c414a5c6b8096a5b7cab7a698826d5e4c3a2917030000000000000000000000000000000000000000000000000000000000111c3043546277889dabbcb59f8d859bb0c5b09b86705b46311b060000000000000000000a1f344a5f74899fb4c1ac97826c57422d1700000000000000000000000000031628384b6075889db2c5b39e8975604b362110000000000000011323313a37444b4d5963798d9fb5c1ad98826d583a2a170400000000000006192c3c4d5f677c89969ea6a7a9a9a7a79e9790888179706a6563666d7d92a1b2c1aa947f6a553f2a15000a1f3347586278879d9e9e9e9e9d96816c5c4a36261400000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b000b20344859697e919da5aa9f988777614c382815020012273c52677d8586868686868577614c37220c000000000000000000000000000000000000000000000000000000000000132536434a535353535353535353535353535353535252504e4c473a3e38352c201d140900000000000000000000000e1c272f3235353535353535353535353535353535353535353535353535353535353535353535322f271c0e0000000f24394f647a8ea0b2bfc5b8aa9b85705846331f0a000000000000000000000000000f1d31445563798b9fb4c1b8a799836e5f4d54647a8c9fb4c3beb39d8876614c402f1b0b000000000000000000000000000000000000000000000000000000000000011426364859657b8d9fb4bcab9f9ba2b4c5b09b86705b46311b060000000000000000000a20354a5f758a9fb4c2ad98826d58432d1803000000000000000000000000091e324556697e93a6b7b8a7947f6a5645321e090000000000000a1e31414d525560626977869cabbcb5a3907b66503b261100000000000000000e1e30414d5e667681888f929493928e89827b746b635b54504e505f6e8399aebaae99846f59442f1a000c21374c6176858a8989898989878074604b3e2d180800000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0005182b3b4e60697d878d8e8a8377625947341a0a00001025394d5f6771717171717171615947341f0b00000000000000000000000000000000000000000000000000000000000008182530353e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3d3b3937332a292321190e080100000000000000000000000a1c2c3a43474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a47433a2c1c0a0000152a3f556a7f94aabecfd6c8b4a28b76614c36210c0000000000000000000000000001142637495b6a7f94a3b4c5b3a1927d67596073859baabbc5b2a0917c665847332212000000000000000000000000000000000000000000000000000000000000000008182a3b4b5d6a8095a2b4bcb5b0b4c0c5b09b86705b46311b06000000000000000000091f34495e74899eb3c4ae99846f59442f1a000000000000000000000000000b21364b6075889db3c4b39e8976614b3828160300000000000010253a4d5f677375787e889ca4b6baa99b85715e4c38230f000000000000000000122330404c58616c747a7c7e7e7d79746d6560554e4a3d3a394151667c91a4a4a49c87715c47321c000a1f3347586171747474747474726b6056453120100000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b00000d1d31424e5f67727879766e6259483b2a180000000a1d30414d525b5b5b5b5b5b5b4c473b2a18040000000000000000000000000000000000000000000000000000000000000008131c202929292929292929292929292929292828272624211f17140e0c06000000000000000000000000000014273a4a575c606060606060606060606060606060606060606060606060606060606060606060605c574a3a27140000162b41566b8096abc7d7e1cdbaa98d78624d38230d000000000000000000000000000009192c3d4b6073859ba9babfb39e897762697e93a3b5c8b8a698826e5e4c3a2a17040000000000000000000000000000000000000000000000000000000000000000000d1d2f3f4b6072849aa6b8c9c5c8d1c5b09b86705b46311b06000000000000000000071d32475c72879cb1c5b09a85705b3626140100000000000000000000000014293e54697e93a6b7b8a7947f6a5746331a0a0000000000000012283d52677d898b8d939da6b6b8ab9f8b7a644f402f1c090000000000000000000512222f3a474c54606467696967636054504b4437362d2524384e63798d8f8f8f8f88735e48331e000417293a474c5b5f5f5f5f5f5f5d564b45382715020000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b000000142431414d525b636461584c483b2a1d0c00000001122330393c4646464646464637342a1d0c00000000000000000000000000000000000000000000000000000000000000000000070b131313131313131313131313131313131312110f0c0a040000000000000000000000000000000000001a2f4357687275757575757575757575757575757575757575757575757575757575757575757575726857432f1a000013293e53687e93a9bacacec3b49f8a74604b36200b0000000000000000000000000000000f1d31445563798b9fb4c0b8a799836e77899eb3c1bfb39e8877614c40301c0c0000000000000000000000000000000000000000000000000000000000000000000000111c3043546277889dabbccfdddbc5b09b86705b46311b06000000000000000000051a2f445a6f8499afc4b19c87725443301c080000000000000000000000001b31465b70869bb0c1b39e8876614b39291700000000000000001c32475c71869ca7a2a8b2b7b4a79e8d7d675c4a362211000000000000000000000004121c2a3336434b4f525454524e4b4336353126211a1020364b60747a7a7a7a7a7a644f3a250f00000c1c2933374649494949494948413631271a0a000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b00000006142330393d494e4f4c473a342a1d0d000000000005121d252731313131313131221f180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001d32475c72878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86725c47321d00000d22374c62778a9fb2b7bbb4a597826d5645321d0900000000000000000000000000000001142637495b697f94a2b4c5b3a18e7a8298a7b9c5b2a0917c675847332212000000000000000000000000000000000000000000000000000000000000000000000000011426364859657b8d9fb4c0d0d3c5b09b86705b46311b0600000000000000000001172c41566c8196abc1b49f8a75604b35200b0000000000000000000000001b30455a70859aa3b3a3937e685746331b0b00000000000000001d32475d72879cb2b1afaca89f96897c675f4d3e2d1b03000000000000000000000000000c171f2630353a3d3f3e3d39353026201d140907091d314556606565656565645c4b37220d0000000c171f2131343434343434322b201d150a00000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000005131e252c3538393733291f180d00000000000000010a10121c1c1c1c1c1c1c0c0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d11141618191919181614100c0a040000000000000000000000000000000000000000001d32475c72879c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c86725c47321d00000b20344859697e919da5aa9f988777614c382815020000000000000000000000000000000009192c3d4b6073849aa9babfb09b8598a0b2c5b8a798836e5f4d3a2a18040000000000000000000000000000000000000000000000000000000000000000000000000008182a3b4b5d6a8095a2b4c4bebeb09b86705b46311b060000000000000000000013283e53687d93a8bdbaa98d77624d38220d0000000000000000000000000e23384d637885939e9b8573604b3929170000000000000000001d32475d72879c9d9c9a96918a8177665e4d413120100000000000000000000000000000000408141c20242729292824201c140b0801000002152738454b4f4f4f4f4f4f4b3e2e1b0800000000040a0c1c1f1f1f1f1f1f1d160b09020000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000010a0e1a212324211f170c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f18202226292c2d2e2f2e2e2c2925211f170c0a030000000000000000000000000000000000001d32475c72879cb1c4b8b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b8c4b19c87725c47321d000005182b3b4e60697d878d8e8a8377625947341a0a0000000000000000000000000000000000000f1c30435463798a9fb4c0b5a39ba3b2bebfb39e8977624c41301c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f3f4b6072849aa6a9a9a9a99b86705b46311b06000000000000000000000f253a4f647a8fa4c4c7a5907a65503b25100000000000000000000000000c2035495a63737e898d7a645443301b0b0000000000000000001c31465c718589888785817c766b62594c4031231302000000000000000000000000000000000001080b0f121414120e0b08010000000000000a1a2731363a3a3a3a3a3a372e201000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000060c0e0f0c0a0400000000000000000000000000000000000000000000000000000000000000000001082020202020202020200f0d0700000000000000000000000000070f1a21242b34373b3f414344444443413e3b363329211e170b04000000000000000000000000000000001d32475c72879cb1b8a69d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9da6b8b19c87725c47321d0000000d1d31424e5f67727879766e6259483b2a180000000000000000000000000000000000000001142636495b697e93a2b4c1b5b0b5c1c8b3a1927d6759473423120000000000000000000000000000000000000000000000000000000000000000000000000000000000111c30435462778893939393939385705b46311b06000000000000000000000c21364c61768ba6b7bda8937d68533e281300000000000000000000000006192c3c49556069777d685c4b362614000000000000000000001a2e43566771747371706c6661584c483b2f221305000000000000000000000000000000000000000000000000000000000000000000000000000a151d20252525252525221b100200000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d35353535353535353524221b100200000000000000000003101b222d36393b484c51545658595959585654504c463a3633291f180c0000000000000000000000000000001d32475c72879cb1b39d88888888888888888888888888888888888888888888888888889db3b19c87725c47321d00000000142431414d525b636461584c483b2a1d0c000000000000000000000000000000000000000008182c3c4a6072849aafc5c9c5c9cebbaa99836e5f4d3b2a18050000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364859647a7e7e7e7e7e7e7d67523c271200000000000000000000000a1f33465873889db2c0ab96806b56412b16010000000000000000000000000e1e2c37444b596268604e3e2e18080000000000000000000013263949565c5e5e5c5a57514c463a342b1d110400000000000000000000000000000000000000000000000000000000000000000000000000000002090b10101010100f0d08000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091927314a4a4a4a4a4a4a4a4a39362d201000000000000000000a161e2e373d4a4e55596266696b6d6e6e6e6d6b69656158534b4639342a1d1303000000000000000000000000001d32475c72879cb1a08a73737373737373737373737373737373737373737373737373738aa0b19c87725c47321d0000000006142330393d494e4f4c473a342a1d0d000000000000000000000000000000000000000000000e1e324657677c91a6bcd1dbd8cab49f8a77624d41301d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3b4a5c64696969696969675f4d39251000000000000000000000000417293a5a6f849aafc3ae99846e59442f1904000000000000000000000000000e1926313b484d534e423120100000000000000000000000091b2b39434649484745413c36332920180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001152737445e60606060606060604f4a3e2d1b070000000000000b1b28323e4b4f5c646b72777b7e818283848383817e7b76706861574c473b311e160a0000000000000000000000001d32475c72879cb1a08a75605e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e60758aa0b19c87725c47321d000000000005131e252c3538393733291f180d000000000000000000000000000000000000000000000c1c2f404b6175879cb2c7cbc8c2c6bbaa937e695b4938271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2d3e4a4f545454545454524d41301d0a000000000000000000000000172c41576c8196acc1b19b86715c46311c07000000000000000000000000000009141d2b34373e3a312413020000000000000000000000000d1b262e31343332302c27211f170c050000000000000000000000000000000000000000000000000000000000000000000000000000020c1214202020202020200d0b05000000000000000000030c1214202020202020202009020000000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455707575757575757575705c4a36220d00000000000b1b2939454b5c646f7980878c90949698999999989693908b857e766c61594e4132281a0a00000000000000000000001d32475c72879cb1a08a75604b48484848484848484848484848484848484848484b60758aa0b19c87725c47321d000000000000010a0e1a212324211f170c05000000000000000000000000000000000000000000000417293a4c5e6c8197a5b6c4b8b3adb2beb49f8b79635645311d11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202d36393e3e3e3e3e3e3c3930231301000000000000000000000000142a3f54697f94a9beb29d88725d48331d08000000000000000000000000000000010d18202228261e1306000000000000000000000000000009131a1c1f1e1c1b17110c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000006141f2629353535353535352220190d00000000000000071420272a35353535353535351e160a00000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60738a8a8a8a8a8a8a8a7a644f39240f00000000031629394657606d7a848e959ca4a6a9abadaeaeaeadaba9aa9f9b9389817768604b4538281a0a000000000000000000001d32475c72879cb1a08a75604b35333333333333333333333333333333333333354b60758aa0b19c87725c47321d000000000000000000060c0e0f0c0a040000000000000000000000000000000000000000000000000d1f334758667c909fb1c3b8a69d98a0b2baa99b8574604b3f2e1b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222429292929292927251d13050000000000000000000000000013283d53687d92a8bdb49e89745f49341f0a0000000000000000000000000000000000050b0d13110b02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e4a4a4a4a4a4a4a4a342b1d0d0000000000031425323b3f4a4a4a4a4a4a4a4a32281a0a000000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becebbaa8b75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9f9f9f9f9f9f8e79644f39240f000000000a1e3246576175828f9aa2aab1b6c2bbb4b2b1b0b0b1b2b5bbb4b0a89e97897d6e605645382715020000000000000000001d32475c72879cb1a08a75604b35201e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e20354b60758aa0b19c87725c47321d0000000000000000000000000000000000000000000000000000000000000000000000000000000d1d30414c6176889db2bdbfb39d888298aabbb5a395806b5d4b392917030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f14141414141412100a01000000000000000000000000030c12273d52677c92a7bcb59f8a75604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f53606060606060605e483b2b1905000000000c2032434f54606060606060605e45382816020000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000152b40556a8095aabfc9b49f8a745645321d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5b5b5b5a48e79644f39240f000000081c2e3f4b617584979fafb4c0b5b1a9aa9f9d9b9a9b9b9d9fabaab2b7b4a79e928274605645311d110000000000000000001d32475c72879cb1a08a75604b35200b09090909090909090909090909090b20354b60758aa0b19c87725c47321d000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4d5f6d8298a6b7c6b3a1917d798c9fb4c1b49f8c7b655746331e12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f272b3b53697e93a8beb39e89745e49341f090000000000000000000000000000030a0c0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0a040000000012263b4f60697575757575757570594834200b0000000012273b4f616975757575757575705645321e090000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37291b11080105192b3c576c8197acc1c8b39e88735e38281502000000071117191e1e1e1e1e1b0f0d0700000000000000000000000000070c0e1c1e1e1e1e1e110f09000000000b20354b60758aa0b5cacab9a48e79644f39240f0000000e23374b5d6e8398a3b1beb9b3a39b948e8a8786858586888b8f959da5b4b8b3a0988374604b3f2f1c0800000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000000000000000000000000000000000000000000000000000000000000000000000000000e1f344859677c91a0b2c4b9a899836e6c8196a5b7bcab9d8775614b40301d0d0000000000000000000000000000000000000000000000000001080b0b0b0b0b0b0b0700000000000000000000000000000000000000000000000000000000000000031424323b3b48596d8298adc3af9a85705a45301b05000000000000000000000000000b171e21201d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c171f211f170c00000014293e53697e8a8a8a8a8a8a8a78624d37220d00000000142a3f54697f8a8a8a8a8a8a8a74604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77625546392f201d15192035485a70859bb0c5c6b19c87715c47321c0000000a18242b2e34343434333124221b1002000000000000000000010f1a212331333434343426241d120400000b20354b60758aa0b5caceb9a48e79644f39240f00000010253b50657b90a0b2c1b9a79e91867e7975727170707173767a7f87949faabbb2a197816c5d4b38230f00000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d000000000000000000000000000000000000000000000000000000000000000000000000000e1e31424c6277899eb3bec0b39e8977626175879dabbcb7a597826d5e4d3b2b1805000000000000000000000000000000000000000000000009141d202020202020201c130800000000000000000000000000000000000000000000000000000000000c1f32434f545962778a9eb4b6a5937e68533e2913000000000000000000000000000b1b2933363531261c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c171f29333733291c0c000014293e53697e939f9f9f9f9f8c77624d37220d00000000142a3f54697f949f9f9f9f9f8b75604b36210b0000000000000000000000000000000014293e53697e93a8bed3c2ad98827361574c403531272b35414d62788b9fb4cac9ad98826d58432e18030007182836404349494949494639362d20100000000000000000000f1f2d36394649494949493c382f221200000b20354b60758aa0b5caceb9a48e79644f39240f000003162839596e8398aebfbcab9e897d71696360555c5b5b5c5660646a747f8c9fabbcb19f907b65503e2d1a07000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000000000000000000000000000000000000000000000000000000000000000000000008182b3c4e606f8399a7b8c7b4a2937e685957657b8d9fb5c3b1a0917c665948342014010000000000000000000000000000000000000000000919263135353535353535302518080000000000000000000000000000000000000000000000000000000012273b4f61696e77859ba8b6a89d8775604b36210b00000000000000000000000003172939464c4b443730251812080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b171e2a333a474c473a2917040014293e53697e93a8b5b5b5a28c77624d37220d00000000142a3f54697f94a9b5b5b5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8bed3c6b2a0988375655e504b44373c484d5f6c8197abbccfbcab937e69533e291400001124364653595e5e5e5e5e5b4f4a3e2d19090000000000000009192d3d4a4e5b5e5e5e5e5e514c402f1d09000b20354b60758aa0b5caceb9a48e79644f39240f0000091e32455773889eb3c8b49f8c7b675f544e4b4437454638454b4f5560697c8d9fb4bdb09b85705c4a36210d000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000000000000000070d0f1415120c0a0400000000000000000000000000000000000001142636495a687e92a1b3c5baa99a8472604a4b5d6c8197a5b7beb39e8977624c42311f0f000000000000000000000000000000000000000001142637444b4b4b4b4b4b4a433625130000000000000000000000000000000000000000000000000000000014293f54697f838a9ba3b4a59d8a7a645645321e090000000000000000000000000a1e3346576160554a43362f231c110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a161e29333a474c58615847331f0a0014293e53697e93a8becab7a28c77624d37220d00000000142a3f54697f94a9becab5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8bed3cfbeb2a199877b6e656055595a5a626c7d8d9fb5c9cab59f8c78634e38230e0000172b4053646e737373737370645c4a372614010000000000021527374a5b63717373737373665e4c38240f000b20354b60758aa0b5caceb9a48e79644f39240f00000b21364b60768ba6b8c4ae99846f5d4d4139363127303028323637444b5e6d8297adc2b5a38e79644e39240f000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000000000003101b22242a2b28211f170b0000000000000000000000000000000000091c30435462788a9eb4bfc2b49f8b796354433f4b6175879dabbcb8a799836f604e3d2c190900000000000000000000000000000000000000081d314455606060606060605443301c070000000000000000000000000000000000000000000000000000001c32475c7186989ea8a89e93877a645c4a382816030000000000000000000000000c21364c6176756760544c40372e221b10070000000000000000000000000000000000000000000000000000000000000000000000000000000000000109151d283239464b58616b76614c37210c0014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8bed3d3c2b6b1a59d90837b75706f6f7278818d9fabbccfbeaf9a846f5b4935210c0000192e43596e838989898988857a645544311d080000000000081d31445563798588898989897c66513c2611000b20354b60758aa0b5caceb9a48e79644f39240f00000b20364b60758ba4b6bfaa95806a553f3024201d151b1c161e2127314051667b91a6bbc1a9947f6a543f2a15000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000000000b161e2d36393f403d3633291b1204000000000000000000000000000009192c3d4b6073849aa8b9c9b5a4957f6a5b4936324657657b8d9fb5c3b3a1937e685b49372715020000000000000000000000000000000000000b20354b6073757575757472604a35200b0000000000000000000000000000000000000000000000000000001c32475c71879cb1b49e897e75645c4a3e2d1a0a0000000000000000000000000011263b51667c867c72665e504b3f362d211a0f0600000000000000000000000000000000000000000000000000000000000000000000000000000009141d273138454b57616a768087725d48321d0014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8bed3c9b6a49ca4b2a1999089868485878d969fabbcc9c3b2a0907c66513d2c1a0600000f253a4f647a8f9e9e9e9e9b8673604b36261401000000021528384b6074869b9e9e9e9b8672604a35200b000b20354b60758aa0b5caceb9a48e79644f39240f0000081d31445571879cb1c2ab96816b554431272c2e2f303128323638364350657a8fa5bac2ad98836d58432e18030000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d000000000b1b28323e4a4f5455524c463a3022120200000000000000000000000002152737495b697f94a2b4c6bcab9c8674604b3d2c29394b5d6c8197a5b7bfb49f8a79635544311d100000000000000000000000000000000000061b31465b70858a8a8a8a8a7d67523c27120000000000000000000000000000000000000000000000000000001c32475c71879ca9b4a89e897f73605645321d100000000000000000000000000011263b51667b9091867b70655d4f4a3e362d20190e05000000000000000000000000000000000000000000000000000000000000000000000008131c263137444b566069767f899688735e48331e0014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8bed3c6b19c8698a0b4aea89e9b999a9ca4acb4bcc9c2b5a598826e5e4c381f0e0000000d22374b5d6f8499abb3b3a4927d675443301c08000000091d324556687e93a4b3b3a2907b665443301c07000b20354b60758aa0b5caceb9a48e79644f39240f000002152737556a7f94a4b6b29c8773604b4437414344454739454b4d5054606a8095aabfc4ae99846f59442f1a040000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000003162839464b5c64696a6761584c40302110000000000000000000000000081d31445563798b9fb4c0c3b49f8c7a645544311f1b2f3f4b6175879db2bdbaa99b8574604b3e2e1b0b00000000000000000000000000000000061b31465b70869ba0a0a0917c67523c27120000000000000000000000000000000000000000000000000000001c31465b71858c949fa9a79e948374604b3e2d1b0700000000000000000000000011263b51667b90a39b90857b6f645c4e4a3d352c20190d0400000000000000000000000000000000000000000000000000000000000000081218253037444b556068757f88959e9d88735e48331e0014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8becdb8a28d7882949fa8b3b4b0aeafb2b6c3cac7bab4a49c8776614c402f1d00000000081b2e3f4e64798d9fb5c2b19c8673604b3625130000031628384b6074879db2bfb09a85705e4c36251300000b20354b60758aa0b5caceb9a48e79644f39240f0000000c21364b6175869ca5b2a595806b60555456585a5b5c5d576062666a737d8b9fb4c9c3ad98836e58432e19030000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d000000091e324657616e797f807d76665e4c3f2e1b0800000000000000000000071b2d3e4b6074859ba9bac9b7a596816c5c4b372715111e334657657b909fb1c3b5a395806b5c4b39291603000000000000000000000000000000061b31465b70869bb0b5a7917c67523c2712000000000000000000000000000000000000000000000000000000192e42566771777f8b9fb4b3a197826d5c4a36220d00000000000000000000000011263b51667b90a6b1a29a8f847a6e635b4d493c342b1f180c0400000000000000000000000000000000000000000000000000000007111c232f36434a556068747e88949ea7b39d88735e48331e0014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c776d7f8a99a1acb2b6c3bab9c1b5b1a99f96867762584733221200000000001022364a5c6e8398aabbb6a4917c675443301c0700091e324556697e93a6b7b3a18f7a654f402f180800000b20354b60758aa0b5caceb9a48e79644f39240f000000091e32465763788799a1af9e95807468696b6d6f7071727476787b8086929fa9bacdc0aa95806b55402b16000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000071b2d3e4b6175838e949592897c665d4b37220c000000000000000000000d22364a5c6a8095a3aeaeaeab9d8775614b3e2e1909031729394c5d6c8197a5aeaeae9f8c7a645746321e0a000000000000000000000000000000061b31465b70869bb0bca7917c67523c2712000000000000000000000000000000000000000000000000000000132639495659626a7d91a3b4b19f8f7a644f3a240f00000000000000000000000011263b51667b90a6c0b4b0a29a8f83796d635a4d483c342a1f170c03000000000000000000000000000000000000000000000007101b222e37404c546067737d87939da6b3b8b39d88735e48331e0014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77626978838e969ca5a3a4a4a2a39b958b80756259483a2a17040000000000071b2d3e4e63798c9fb4c2b19c8673604a352011031628394b6075889db3bcab99836f5d4b3722120000000b20354b60758aa0b5caceb9a48e79644f39240f00000003162839495a6376838f9aa29e96867d7f818384858688898b8d90959ca4b4bac7c3b4a28f7a644f3a250f000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000d22364a5c6e8298a0a9aaa79e8c7b654f3a2917040000000000000000000f243a4f647a8a9999999999988d7c66574632201000000b1b2f3f4b6175879899999999998775614b36210c000000000000000000000000000000061b31465b70869bb0bca7917c67523c2712000000000000000000000000000000000000000000000000000000091b2b393b484c5f70859bb0bdac97826d57422d1802000000000000000000000010253a4f657a8fa2b2b7c0b3afa1998c82786d625a4c473b33291e160b0200000000000000000000000000000000000000060f1a212e363f4b505e66727c86929da5b3b7bfb3ab9c87725c47321d0014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77625a626e7981878b8e8f8f8d8b8680786b6157483b2a1c0c00000000000000102135495b6d8297a9bab5a4917c6651402f1c091e324657697f94a6b7b49f8c79634e3f2e1b040000000b20354b60758aa0b5caceb9a48e79644f39240f000000000b1b2c3c4958616e7b849aafa49c92949698999a9c9d9fa8a2a5aab1b5c2c8c0b4a59a846f5c4b37220d000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000f24394f647a8ea0b2bfc5b8aa9b85705846331f0a000000000000000001162b41566b80848484848484837c675e4c39291602000000111e3346576379828484848484837d67523d2712000000000000000000000000000000061b31465b70869bb0bca7917c67523c2712000000000000000000000000000000000000000000000000000000000d1b1d2b3441556a7f95aabfb29d87725d48321d0800000000000000000000000b20354b607384939da6b3b7bfb3ab9f988b82786c61594c473a32291e160a01000000000000000000000000000000050e19212d363e4a4f5d65707b86919ca4b2b6c0b3afa1998d7e68533d28130014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d4d5c646c7276797a7a7876716a635a4b46392a1d0d0000000000000000061a2c3d4d62788b9fb4c2b09b85715e4c38231729394b6175889eb3bbaa98826d5b4a362110000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000e1e2c3a4c5e667c879db2b5b1a8a9abadafb0b1b2b4bac6bbbfc3c0c1b4b0a29a8777614c3e2e1b08000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000152a3f556a7f94aabecfd6c8b4a28b76614c36210c00000000000000000014293d51626b6f6f6f6f6f6f6e675f4d402f1b0b0000000003172939495b636d6f6f6f6f6f6f675f4d392510000000000000000000000000000000061b31465b70869bb0bca7917c67523c27120000000000000000000000000000000000000000000000000000000000000d18283d52677d92a7bcb49f8a745f4a351f0a0000000000000000000000081d31445560747e88939da6b3b8bcb4aa9f978b81776b61584b463932281d1509010000000000000000000000050e19202c353d4a4e5c646f7b85909ba3b1b6c0b4afa29a8f847a68604e3a26110014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d3e4a4e575761636564626157554d493c33291b0d000000000000000000000f2035485a6c8197a9bab5a3907b66503f2f1e3346576a7f94a6b8b49f8b78624d3d2d1a02000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000081d314455667c8c9da6b7c9c6bdbec0bfbdbbbab9b8c5b9b3b0aeaba7a39b91847862594734201000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000162b41566b8096abc7d7e1cdbaa98d78624d38230d0000000000000000000e213444515659595959595959514d413022110000000000000b1b2c3c494d58595959595959524d41301e0a000000000000000000000000000000061b31465b70869bb0bca7917c67523c27120000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdb49f8a745f4a351f0a00000000000000000000000115273744556069757e88949da6b3b8bbb4a99f968a80766a61574b453831271c14080000000000000000040d181f2b353c494d5b636e7a848f9ba2b1b5c0b4afa29a8f847a6f645c4e42311e0b0014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37363939464b4e4f4f4d4b463938352c1e170b000000000000000000000006192b3c4c62778a9fb4c1b09b85705d4b37293a4c6176899eb3b9a896816c5a49351f0f00000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000b20354b6074879daab7c4c9c2b6b1adaaa7a6a5a4a2a1a79e9b9895928c857c736259483a2a180200000000000000001d32475c72879cb1a08a75604b35200f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f20354b60758aa0b19c87725c47321d000013293e53687e93a9bacacec3b49f8a74604b36200b000000000000000000041626343d41444444444444433c3930231203000000000000000e1e2c3538434444444444443d3930231301000000000000000000000000000000061b31465b70869bb0bca7917c67523c27120000000000000000000000000000000000000000000000000000000000000013293e53687e93a8bdb39d88735e48331e0900000000000000000000000009192737444b566069757e88949ea6b3b8bab4a89e95897f756960564b4437302618120400000000000c171f2a343c484d5b636e79838f9aa2b0b4c0b4b0a29a8f847a6f645d4f4a3e312413020014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d372224293336393a3a383632282320190e03000000000000000000000000000e203448596b8096a8b9b4a2907b65503f3347586a7f95a7b8b49e8a77624c3c2b190100000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000010253a4f657a8fa5b6c8c1b5b0a49c979492918f8e8d8c8b898683807d7770676054483b2b1c0c0000000000000000001d32475c72879cb1a08a75604b35242424242424242424242424242424242424354b60758aa0b19c87725c47321d00000d22374c62778a9fb2b7bbb4a597826d5645321d0900000000000000000000081621292b2f2f2f2f2f2f2e27241d12050000000000000000000e1921232d2f2f2f2f2f2f27251e1305000000000000070d0f12121212121212121b31465b70869bb0bca7917c67523c271212121212121212120c0a040000000000000000000000000000000000000001162b40566b8095abc0b19c87715c47321c07000000000000000000000000000919273138454b566069757f88949ea7b3b8b9b4a79e94887e756860554b4336302212000000000c1c29333b474c5a626d78838c99a1afb3c0b4b0a29a90847b6f655d4f4b3f362d201306000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220f171e2124252523211e160e0c0600000000000000000000000000000005182b3b4c6176899eb3c0af9a84705d4b3a4c6176899eb3b8a795806b5947341e0e0000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000012283d52677d92a7c3c9b5a39b8e87827f7d7b7a7978777674716e6b676259524b43362b1d0d000000000000000000001d32475c72879cb1a08a75604b39393939393939393939393939393939393939394b60758aa0b19c87725c47321d00000b20344859697e919da5aa9f988777614c382815020000000000000000000000040e14161a1a1a1a1a1a1912100a010000000000000000000000060c0e181a1a1a1a1a1a12100a01000000000002101b222427272727272727272731465b70869bb0bca7917c67523c27272727272727272727221f180c00000000000000000000000000000000000001152737586e8398adc3af9a85705a45301b05000000000000000000000000000009151d283238454b576069757f88949ea7b3b8b9b3a69e94877e746760544d40301e0e00000417293a474c59626c78828b989fabb3bfb4b0a29b90857b70655d4f4b3f372e221b100200000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d030a0c0e100f0d0c0903000000000000000000000000000000000000000d1f3347586a7f95a7b8b4a28f7a654f47586b8095a7b9b39e8976614c3b2a18000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000013283d52687d92a7bfc6b09b857a726d6a68666564636260565b5956524c483b353026180d00000000000000000000001d32475c72879cb1a08a75604f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f60758aa0b19c87725c47321d000005182b3b4e60697d878d8e8a8377625947341a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202d363a3c3c3c3c3c3c3c3c3c3c465b70869bb0bca7917c67523c3c3c3c3c3c3c3c3c3c3c37332a1c0c0000000000000000000000000000000000081d31445571869cb1c1ac97826c57422d1702000000000000000000000000000000020a161e283239454b576169757f89949ea7b2b7b8b3a69d93877d73665e4d3c2c1906000a1f334758616b77818b979faab5bcb3afa39b90857b70655d504b3f372e221b1007000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000000000000000000000000004172a3a4b6176889eb3c0af99846f5c4c61778a9eb4b7a6947f695846331d0d000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000e23384e63788da1b3c6a38e79645c58555251504f4d4c4b453843403d37342b201c14080000000000000000000000001d32475c72879cb1a08a75646464646464646464646464646464646464646464646464758aa0b19c87725c47321d0000000d1d31424e5f67727879766e6259483b2a1800000000000000000000020b11132020202020201f1c140b090200000000000000000000000000000000000000000000000000000000000000071b2d3e4a4f52525252525252525252525b70869bb0bca7917c675252525252525252525252524c473a2a1804000000000000000000000000000000000b20354b60758a9fb4bea9947f69543f2a14000000000000000000000000000000000000020a161e283239464b57616a767f89949da6b2b7b7b2a59c92867c665a4935200c000c21374c6176808a969fa9b4bbb3aea29a90857b70655d504b3f372e221b10080000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000000000c1e334657697f94a6b7b3a18f7a64596b8096a8b9b29d8875604b3a291700000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000c2135495b6f8499a8b9a28d7863525558595a5857544f4b4538372e282220180d0801000000000000000000000000001d32475c72879cb1a48f7a7979797979797979797979797979797979797979797979797a8fa4b19c87725c47321d00000000142431414d525b636461584c483b2a1d0c00000000000000000006131e262835353535353534312a201d150a0000000000000000000000000000000000000000000000000000000000000d22364a5c6467676767676767676767676770859bb0bca7917c67676767676767676767676767615847331f0a000000000000000000000000000000000e23384e63788da9babba6917c66513c27110000000000000000000000000000000000000000030a161e283239464b57616a767f87929da6b7c3b6b2a49c8d78634d38230e00162b41566b80959fa8b4bac7b3a1998e847b70655e504c3f372e231c110800000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000000000000000000000000000031729394b6075889db2bfae99836e62778a9fb4b6a4937d685645321b0b00000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000061a2c3d4d6378899ea8ad98826e676b6d6e6f6e6c696560564f4b3e342b1d11030000000000000000000000000000001d32475c72879cb1aa988f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8f98aab19c87725c47321d0000000006142330393d494e4f4c473a342a1d0d000000000000000000021324313a3d4a4a4a4a4a4a4a473f3631271a0a00000000000000000000000000000000000000000000000000000000000f243a4f647a7c7c7c7c7c7c7c7c7c7c7c7c7d879cb2c1ab96817c7c7c7c7c7c7c7c7c7c7c7c7c76614c37220c0000000000000000000000000000000012273c51677c91a6c7c4a38e79634e39240e00000000000000000000000000000000000000000000030b161e293239464b57616a757d889db2c8cac2b5a28d78634d38230e00162c41566b8196abbac6cec4ae9984786f665e504c40382f231c1108000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000000000000000000000000000000b1e324556687e93a5b6b59f8c786b8095a8bab19c8673604b3828160000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000e2035495a657b8a9ba3a098837c8082848483817f7a756d645c4d483b2f21110300000000000000000000000000001d32475c72879cb1b6aaa4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4aab6b19c87725c47321d000000000005131e252c3538393733291f180d000000000000000000000b1e31424e536060606060605f5c544b453827190900000000000000000000000000000000000000000000000000000000182d42576d82919191919191919191919191919ca5b6c4b09f969191919191919191919191918f7b654f3a251000000000000000000000000000000000152a40556a7f95aabfb7a68b76614b36210c00000000000000000000000000000000000000000008131c263036434b556068747d85929da6b7c6b9b3a79e8d78634d38230e00162c41566b80969fabb3bfc7b3a1998a82796e635b4e493d352c20190e0600000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becbb5a08b76604b36210b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000000031628384b6074879db2bcab958075899eb3b5a3917c675544311a0a0000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000006192c3c4b5d6579859ba9a09892959899999897948f8a827a6f62594c3f2f211100000000000000000000000000001d32475c72879caeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae9c87725c47321d000000000000010a0e1a212324211f170c05000000000000000000000011263a4e606875757575757574716960564537271502000000000000000000000000000000000000000000000000000000182d42576d8297a7a7a7a7a7a7a7a7a7a7a7a7b2b6c3cdbdb0aba7a7a7a7a7a7a7a7a7a7a7a48f7a654f3a251000000000000000000000000000000003192e43586e8398adc3b39d88735746321e0900000000000000000000000000000000000000091218253036434b546067737d87929ba3b2b7bab4a89e95897f74604b36200b000e23384d6379828d99a1afb4bfb3a89f978c83796e635b4e493d352c20190e050000000000000014293e53697e93a8beccb7a28c77624d37220d00000000142a3f54697f94a9becebbaa8b75604b36200b0000000000000000000000000000000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000000000a1d314455687d92a4b6b29d877d92a7b8b09b8572604a372614000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000000021527384556606e7d8a9fb4aea7aaadaeafadaca9a99f988f8377655d4c3f2e1d0d000000000000000000000000001d32475c72869999999999999999999999999999999999999999999999999999999999999999999986725c47321d000000000000000000060c0e0f0c0a040000000000000000000000000013283d53687d8a8a8a8a8a8a89867f74605544311d10000000000000000000000000000000000000000000000000000000182d42576d8297acbbbbbbbbbbbbbbbbbbbbbbc7cad3dacdc4c0bbbbbbbbbbbbbbbbbbbbbaa48f7a654f3a2510000000000000000000000000000000061c31465b71869bb0c5b09b86705b39281603000000000000000000000000000000000009121d243036434a546067737d86929ca5b0b4bab4a89f96897f7669605544311d08000c2135495b636e79848f9aa2b0b5bab4ab9f988c83796d635b4d493c352b20190e05000000000014293e53697e93a8beccb7a28c77624d37220d00000000152b40556a8095aabfc9b49f8a745645321d090000000000000000000000000000000014293e53697e93a8bec6b7a28c77624d37220d0000000000000000000000000000000000000000000000000000000000000000021527374b6073869cb1b7a59d879db2b4a2907b655443301909000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000000091d314556607482929fa9bab9b4aca7a4a3a5a8aeb4b4ada199897c655d4b3b2a1805000000000000000000000000172c42576c8184848484848484848484848484848484848484848484848484848484848484848484816c57422c17000000000000000000000000000000000000000000000000000000000011263a4e606d8197a39f9fa99f9c948473604b3f2e1b0b0000000000000000000000000000000000000000000000000000182d42576d8297a6a6a6a6a6a6a6a6a6a6a6a6b1b6c2cdbcb0aba6a6a6a6a6a6a6a6a6a6a6a48f7a654f3a2510000000000000000000000000000000091e33485e73889db3c4af9a846f5a452f1a0000000000000000000000000000000000111c232f38404d546067737c86929ca4b2b6bbb4a99f968a80766a61574b44372715020006192c3c494d5c646f7a84909ba3b1b5bcb5ab9f988c82796d635a4d483c352b20180d0000000014293e53697e93a8beccb7a28c77624d37291b11080105192b3c576c8197acc1c8b39e88735e382815020000000000000000000000000000000014293e53697e93a8b0b0b0a28c77624d37220d000000000000000000000000000000000000000000000000000000000000000000091c304354677c91a3b5b7a59da5b7af9a846f5d4c36251300000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000071b2e3e4b60748398a0b4bab2a89e97928f8e8f93999fabb6b3a79e8b7b655947341f0f000000000000000000000000152a3e52636c6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6c63523e2a15000000000001080b150c0a0400000000000000000000000000000000000b1e31424b6074859ba7b8bab4b1a295806b5d4b3929170300000000000000000000000000000000000000000000000000182d42576d82919191919191919191919191919ca4b6c4b09e969191919191919191919191918f7b654f3a25100000000000000000000000000000000a1f344a5f74899fb4c3ae98836e59432e1904000000000000000000000000000008131c2f38404c515e66737c86919ca4b1b6bcb5aa9f978b81776b61584b4639312719090000000e1e2c353e4a4e5d65707b85919ca4b2b6bcb5ab9f988c82786d625a4d483c342b1d1204000014293e53697e93a8beccb7a28c77625546392f201d15192035485a70859bb0c5c6b19c87715c47321c000000000000000000000000000000000014293e53697e939b9b9b9b9b8c77624d37220d000000000000000000000000000000000000000000000000000000000000000000011426364a6072859bb0c0b7b2b7b2a18f7a644f3f2f180800000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000d22374b5c6c8196a1b2beb2a09889827c7a797a7d838c9ca4b6b9a99e8977624c3d2d1a0700000000000000000000000f22354552575959595959595959595959595959595959595959595959595959595959595959595957524535220f0000000009151d202a211f170c0000000000000000000000000000000002131d3245566278899eabbcc9c0b49f8c7b655746331e12000000000000000000000000000000000000000000000000000f24394e647a7c7c7c7c7c7c7c7c7c7c7c7c7c869cb1c0ab96807c7c7c7c7c7c7c7c7c7c7c7c7c76614c37210c0000000000000000000000000000000a20354a5f758a9fb4c1ac97826c57422d17000000000000000000000000000008182530404c505e66717c86919ca4b1b6bfb3ab9f988c82786c62594c473a33291d150900000000000e19212d363f4b4f5d65707c86929ca4b2b7bcb4aa9f988b82786c625a4d483b2f2212000014293e53697e93a8bed3c2ad98827361574c403531272b35414d62788b9fb4cac9ad98826d58432e18030000000000000000000000000000000012273c52677d8586868686868577614c37220c00000000000000000000000000000000000000000000000000000000000000000000081c304354667b90a2b4c8c7bbaa99836e5c4a3621110000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000004182a3a4f647a8f9fb0bfb2a09882766c67656465686e79869ca6b7b9a798826d5b4a36210c0000000000000000000000051727353e4244444444444444444444444444444444444444444444444444444444444444444444423e3527170500000009192731354037332a1c0d0000000000000000000000000000000002152838485a657b8d9fb4bfcfbcab9d8775614b40301d0d0000000000000000000000000000000000000000000000000d21364a5c6466666666666666666666666670859bb0bca7917c67666666666666666666666666615847331f0a000000000000000000000000000000091e33495e73889eb3c2ad97826d583828160903000000000000000000000000132536434a5e66707c85919ca4b1b5c0b4afa1998d83796d625a4c483b332a1e170b020000000000000006101b222e373f4c505e66737d87929da5b3b8bbb4aa9f978b82786c62594c402f1c090014293e53697e93a8bed3c6b2a0988375655e504b44373c484d5f6c8197abbccfbcab937e69533e291400000000000000000000000000000000001025394d5f6771717171717171615947341f0b00000000000000000000000000000000000000000000000000000000000000000000001325364c5e70859ab0bfc7b49f8c79634e3e2e1b030000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000a1f3347586f8499aebdb9a89882726158524f4e50535b6377889db2c5b2a08e79634e39230e0000000000000000000000000917222a2c2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2c2a22170900000008182737444b554c473a2b1d0d000000000000000000000000000000000a1a2b3c4c5d6a7f94a1b3c3c9b6a597826d5e4c3b2a18050000000000000000000000000000000000000000000000071a2d3e4a4e51515151515151515151515b70869bb0bca7917c675251515151515151515151514c473a2a1704000000000000000000000000000000071c32475c71879cb1c4af9a846f564532211e160a0f050000000000000000071c304354606d7b85919ba3b1b5c1b4b0a29a8f83796e635b4d483c342b1f170c03000000000000000000000007101b222f38404c546067747d87939da6b3b8bbb4aa9f978b8177665e4c38240f0014293e53697e93a8bed3cebeb2a199877b6e656055595a5a626c7d8d9fb5c9cab59f8c78634e38230e00000000000000000000000000000000000a1d30414d525b5b5b5b5b5b5b4c473b2a1804000000000000000000000000000000000000000000000000000000000000000000000008182f4050657a8fa1a8a8a997826d5b49352010000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000c22374c61778b9fb4c9b49e8a776154473a3a393a3d4959677d92a8b9beab95806b56402b1601000000000000000000000000050f15171a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a17150f05000000001325364455606a6158483b2b1c0c000000000000000000000000000000000e1e2f3f4a60728399a5b6c6c3b19f917c665947341f140000000000000000000000000000000000000000000000000f202d36393c3c3c3c3c3c3c3c3c3c465b70869bb0bca7917c67523c3c3c3c3c3c3c3c3c3c3c37332a1c0c0000000000000000000000000000000003182e43586d8398adc6b49e8975604b3e3632282a221709000000000000000b20354a607282909ba3b0b5c1b5b1a39b90847a6f645c4e493d352b20180d0400000000000000000000000000000008111c233036434b556068747e88949ea7b4b9bbb4a99f978a7c66513b26110014293e53697e93a8becebdb1acafa59d90837b75706f6f7278818d9fabbccfbeaf9a846f5b4935210c000000000000000000000000000000000001122330393c4646464646464637342a1d0c000000000000000000000000000000000000000000000000000000000000000000000000001223374b5d6f83939393938b78624d3d2c1a02000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000011263c51667b91aabbc2ad98836d594736292524252c3b4b6075899eb4c5b09b85705b46311b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435460737f766259483a29190900000000000000000000000000000000111c3043546176879ca8bacdbdb39e8977624c42311f0e0000000000000000000000000000000000000000000000010f1a212427272727272727272731465b70869bb0bca7917c67523c27272727272727272727211f170c00000000000000000000000000000000000013283e53687d93a8bab9a8937e695c4e4b45393e342717000000000000000f243a4f647a8fa0b0b5c1b6b1a49c91857b6f645c4e4a3e352c20190e0500000000000000000000000000000000000000081218263037444b566069757f89959ea8b4babab4a89c86715c47311c0014293e53697e93a8bec4b19f979aa2b2a1999089868485878d969fabbcc9c3b2a0907c66513d2c1a0600000000000000000000000000000000000005121d252731313131313131221f180c0000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4d63797e7e7e7e7c665a48351f0f00000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000142a3f54697f94a9c8bea8937e69533a2a18100f101d31445570859ab0c5b39e89745e49341f09000000000000000001082020202020202020200f0d0700000000000000000000000000000000000000000000000000000000000000000000000b20354a6072839586776258473726140100000000000000000000000000000000132536465863798a9fb4bdccb8a799836f604e3d2c1909000000000000000000000000000000000000000000000000070d0f11111111111111111b31465b70869bb0bca7917c67523c271211111111111111110c0a04000000000000000000000000000000000000000c22374c61778a9fb4c3b49e8a7a6b646057575245341c0c00000000000011263b51667b90a6beb7b2a49c91867c70655d4f4b3e362d211a0f05000000000000000000000000000000000000000000000008141c273138454b57616a76808a969fa9b4bbb39d88735e48331e0014293e53697e93a8bec1ac97818498a0b4aea89e9b999a9ca4acb4bcc9c2b5a598826e5e4c381f0e0000000000000000000000000000000000000000010a10121c1c1c1c1c1c1c0c0b0400000000000000000000000000000000000000000000000000000000000000000000000000000000112135495b6368686868665e4c3c2b190100000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000162b40556b8095aac0bca7927c67523d2712000002152737596e8499aec3b59f8a75604a3520000000000000000009151d35353535353535353524221b10020000000000000000000000000000000000000000000000000000000000000000000e23394e63788ea19c8676615544311d0f000000000000000000000000000000000818293a4a5b677d929fb0c0c5b3a1937e685b4937271501000000000000000000000000000000000000000000000000000000000000000000061b31465b70869bb0bca7917c67523c27120000000000000000000000000000000000000000000000000000000000000a1f3447596c8196a5b6b9a89e8b807976746c63523a2a1804000000000011263b51667b90a6b3a59d92867c73665e504b3f372e211a0f0600000000000000000000000000000000000000000000000000000109151d283239464b58616a77818a979faab39d88735e48331e0014293e53697e93a8bec5a7927d7582949fa9b5b4b0aeafb2b6c3cac7bab4a49c8776614c402f1d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c494d53535353514c402f1e0e0000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000152a40556a7f95aabfbda8937d68533827150c0c0d1c3043546f859aafc4b39e89745e4934190e030000000000091927314a4a4a4a4a4a4a4a4a39362d20100000000000000000000000000000000000000000000000000000000000000000000b20364b6074859ba49a8473604b3d2d1a07000000000000000000000000000000000b1b2d3d4d5f6c8196a2b4c4bfb49f8a79635544311d10000000000000000000000000000000000000000000000000000000000000000000061b31465b70869bb0bca7917c67523c271200000000000000000000000000000000000000000000000000000000000004182a3a4c6176879da7b6b9a99f958e8b8a816c5847331f0a000000000011263b51667b90a69d93877d736760544c40382f221b1007000000000000000000000000000000000000000000000000000000000000010a151d28323a464c59616b77818b989f9d88735e48331e0014293e53697e93a8aeaea78f7a64727f8b999fabb1b4bcc9b9c1b5b1a99f968677625847332212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c35383e3e3e3e3b382f2212000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000013283e53687d93a8c4c1ac96816c5645312422212229384a6074889db3c7b19c87725c47352b1e170b00000001152737445e60606060606060604f4a3e2d1b070000000000000000000000000000000000000000000000000000000000000000081d3144556177879ca295806a5c4a36211100000000000000000000000000000000000f1f30414b6074849aa6b7c8baa89b8573604b3e2e1b0b0000000000000000000000000000000000000000000000000000000000000000061b31465b70869bb0bca7917c67523c2712000000000000000000000000000000000000000000000000000000000000000c1f3347586379899ca4b2b7b4aba3a99f8c77614c37220c000000000011263b51667b9094887e746860554a43362f231c110800000000000000000000000000000000000000000000000000000000000000000000020b161e29333a474c59626c78828c9888735e48331e0014293e53697e9399999998897560606979838c959c9faba4a4a2a39b958b80756259483a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1921232929292926241c1204000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000f243a4f64798fa6b8c7b29d8774604b43393736373a4656657a8fa6b8c3ae98836e594d493c33291b0b0000081d314455707575757575757575705c4a36220d000000000000000000000000000000000000000000000000000000000000000002152737475963798a9e9f8c79644e3f2e1c080000000000000000000000000000000001131d3144556277889daabbc6b5a395806a5c4b3928160300000000000000000000000000000000000000000000000000000000000000061b31465b70869bb0bca7917c67523c27120000000000000000000000000000000000000000000000000000000000000004172a3a4a5b637986949da6aaafb1b2a28c77624d37220d000000000011263b51667c897f756960564b443730251812080000000000000000000000000000000000000000000000000000000000000000000000000000030b171f2a343b484d5a626d798388735e48331e0011263b51667c84848484837b64574a5b636e7880868a8e8f8f8d8b8680786b6157483b2a1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e13131313110f090000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000b20354b6074889eb3c3b7a5947f6a61534e4c4b4d50586174859bb0c4bca7927c6a66625a4b4639291703000b20354b60748a8a8a8a8a8a8a8a7a644f39240f00000000000000000000000000000000000000000000000000000000000000000009192a3a4a5b687e93a49a84705d4b37230c0000000000000000000000000000000000021527374859657b8c9fb4bec1b49f8c7a645746321e1200000000000000000000000000000000000000000000000000000000000000061b31465b70869bb0bca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000c1c2d3d4a5b63757e8890959a9b9d9e8c77624d37220d00000000000d22374c6277766a60574b453831261c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000040c181f2b343c494d5b636e79634e38230e000f24384c5e666f6f6f6f6d645d4b3d494e5b636b7176797a7a7876716a635a4b46392a1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000081d3144556a8095a5b7c3b49f8d7f716964616162656b768399a3b5c9c3ae99827f7b7870615746331e0a000b20354b60758a9f9f9f9f9f9f8e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000c1c2d3d4b6073869ca2907b65503a2a1704000000000000000000000000000000000009192b3b4b5d697f94a0b2c2bbaa9c8675614b402f1c0c000000000000000000000000000000000000000000000000000000000000061b31465b70869bb0bca7917c67523c27120000000000000000000000000000000000000000000000000000000000000000000f1f2d3d49566069757b80848688898977624d37220d00000000000b1f3448596261584b453931271d140900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d18202c353d494e5b635b4935210c00091d2f404c5159595959584f4b3f2e353d494e565760636564626157554d493c33291b0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e12131516161514110d0b05000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000011426374b6075879daabbbcab9f94867e797776777b808899a1b3c1d2c6b2a19994918d8575614b36210c000b20354b60758aa0b5b5b5b5a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000000001424313f4c55687d92aa99846f5847331f0a00000000000000000000000000000000050b0d1d2e3f4f616e8298a4b6c6b6a497816c5e4c3a2a18040000000000000000000000000000000000000000000000000000000000061b31465b70869bb0b4a7917c67523c2712000000000000000000000000000000000000000000000000000000000000000000010f1f2c38454b5660656a6f7172747462594834200b000000000005182a3b484c4c463a32281d150a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050e19202c363d494e493d2c1a06000012222f383b44444444433a372e20212c353839454b4e4f4f4d4b463938352c1e170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a151d202427292a2b2c2b2926221f180d0b05000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000091e324557657b8c9faab7bcb4a39b938e8c8b8c90959ea7b3bfbebdbdbfb2aea9a6a3917c66513c2711000b20354b60758aa0b5cacab9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000e1e31424e5d656f768a9f9f8b76614c37210c0000000000000000000000000003090d182022272a32434b6175869ca8b9c3b19f907c665947341f130000000000000000000000000000000000000000000000000000000000061b31465b70869b9e9e9e917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000e1a283238454b50555a5c5d5e5e4d483b2b18050000000000000d1d2a34373633291e160a020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a212c3538352c1f0f00000004121d24262f2f2f2f2e25221b100e1a2123283236393a3a383632282320190e0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1820273136393c3e3f4041403e3b37342a2220190e0400000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000031628394c5d677d8c9da6b3b9b5b1a8a3a1a0a2a5abb3b8b5b1a9a8a8a8a8a8a8a8a7917c67523c2712000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000005192b3c4e60687b84899eaaaa927c67523d27120000000000000000000000000b161e212b34373d3f4142465763798a9eb3bcbdb39d8877614c41311d0d00000000000000000000000000000000000000000000000000000000051a30455a6f84898989898a7c67513c27120000000000000000000000000000000000000000000000000000000000000000000000000a161e2731363b40454648494937342b1d0d00000000000000000d181f22211f170b03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f1a2123211a0f010000000000090f111a1a1a1a180f0d080000060c0e161e2124252523211e160e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3438454b4e51535456565553514c483b38352b1f180c000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000a1b2f3f4d5f677c87969ea8aeb3b8c4b6b6b7bcb5b2aca39b939393939393939393917c67523c2712000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000000b2035485a687e8d9a9ea7b8ab96816c56412c170000000000000000000003141b2832363b484c5254565756545b667c919eb0c0b8a699836e5f4d3b2b180500000000000000000000000000000000000000000000000000000003182d4155666f7474747474675f4d39241000000000000000000000000000000000000000000000000000000000000000000000000000030a151d20252b2f313334342220180d00000000000000000000050b0d0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e0c06000000000000000000000404040403000000000000000003090b0e100f0d0c0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b484d56606367686a6b6b6a69666259554d483c332a1c110300000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000112130414d5e6576818993999ea6a4a5a6a5ab9f9c9690867e7e7e7e7e7e7e7e7e7e78634d38230e000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000000d22384d62778b9fabb3b8c5af99846f5a442f1a0000000000000000000b171e3139464b545962676a6c6c6b6a66616b8095a2b4c4b3a1927d6759483420110000000000000000000000000000000000000000000000000000000012253748555a5f5f5f5f5f514d40301d0a00000000000000000000000000000000000000000000000000000000000000000000000000000002090b10151a1c1d1f1f0d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20344859627075797c7e7f8081807e7b77726b625a4c473a2f221305000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000003122330404c57616c767d83888d8e9091908e8b87817b7169686868686868686868635a4935200c000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9bac9ccc5b09b86705b46311b00000000000000000b1b2933424e57616971777c7f8182807f7b777074849aa6b7bfb39e8977624d3f2f1808000000000000000000000000000000000000000000000000000000081a2a37414549494949493c3930221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c12140d0b050000000000000000000003090b101517181816130d0c060000000000000000000000000000030c131515151515151515151515151512100a010000000000040d1315151515151515151515151515110f0a00000000000000070d0f10100f0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d10141516161513100c0a040000000000000000000000000000000000000d22374d6277848a8e91939495969593908c8780786d61584c40312313040000000000000b20354b60758aa0b5bdbdb9a48e79644f39240f00000000000000000512212f39464c5761686e7377797b7b7a7976726c655d545353535353535353534d493c2c1906000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc7d8dac5af9a85705a45301b000000000000000a1a2939464b6069757f868c929496979694908c857d78889dabbcb9a798836e5d4b362513000000000000000000000000000000000000000000000000000000000c1a252d30343434343427241d1204000000000000000000000000000000000000000108202020202020202020202020202020202020202020202020202020202020202014120c0200000000000000000000000000000006141f27292220180d01000000000000000a161e21262a2c2e2d2b282320190e070000000000000000000000071520272a2b2b2b2b2b2b2b2b2b2b2b2b27251e1305000000071521282b2b2b2b2b2b2b2b2b2b2b2b2b27241d120400000002101b2224252525211f170c030000000000000000000000000000000000000000000000000000000000000000000000070d0f18202226292a2b2b2a2826211f170e0c070000000000000000000000000000000d22374c62778c9fa9a6a8a9ababaaa8a6a49c958b8277665e4e423122120000000000000b20354b60758aa0a8a8a8a8a48e79644f39240f00000000000000000003111b293339464b53595a626465666564615757504b3f3e3e3e3e3e3e3e3e3e38352c1e0e00000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000172c41576c8196acc0cdcdbeac97816c57422c17000000000000081828384657616e7e88949ca4a7a9abacaba9a6a39b9288818b9fb5c5b2a0907b655443301c07000000000000000000000000000000000000000000000000000000000812181a1f1f1f1f1f12100a000000000000000000000000000000000000000009151d353535353535353535353535353535353535353535353535353535353535353529261f140600000000000000000000000000031424323b3f37342b1d140900000000000a1b2832363b40424342403e38352c201c13080000000000000000031525323c3f4040404040404040404040403d393023130100041525333c404040404040404040404040403c3930221200000010202d36393a3a3a3633291e160a000000000000000000000000000000000000000000000000000000000000000108101b22242b34373b3e404141403e3b37332a24211a0f08000000000000000000000000000b20354b60758a9fb5c7bdbfc0c0bfbec2b6b1aa9f97887c68604e40301e0e00000000000b20354b60748a9393939393938e79644f39240f00000000000000000000000b171e2932363e3c484d4f5051504f4b46393b372e2929292929292929292320190e0000000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000011273c51667c91a2b4bab9b4a08f7b65503a25100000000000001325364556617582939ea7b1b5c2bfc1bdbab8c1b4b0a59d979fabbccfbeb09b8572604a35200f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091927314a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3e3b32241402000000000000000000000000112232434f544d483b3126190e00000003162839454b505557585756534d493c353025180c000000000000000c2032434f54555555555555555555555555524d41301e0a000d2133435055555555555555555555555555514d40301d0a00071b2d3e4a4e50504f4c463a32281a0a000000000000000000000000000000000000000000000000000000000008141c202e373a3b484c50535556565553504c473a39362d231c11040000000000000000000000081d31445573899eb3c1bebcbbbdc0c5cacac8bbb4a79e8c7e685e4d3c2c1906000000000b20354a60727e7e7e7e7e7e7e7e77614c37220c000000000000000000000000030b161e21282b3438393b3c3b3936322925231c1313131313131313130e0c06000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000000b20354a607284979fa9a89e95826d5d4b37230e0000000000071c30435460748598a0b3b8c5c5b9b3ada7a4a3a3a5a9afb2acb5bcc9dac9b5a3917c66513d2c1a0600000000000000040e141620202020202020202020202020202020202020202020202020201f1c170d0100000000000000000000000000000001152737445e60606060606060606060606060606060606060606060606060606060606060534f42321f0c00000000000000000000000a1a2f404f616962594b44372b1e0e0000091e32455760656a6c6d6d6b68625a524a4336291c0c00000000000013273c4f616a6a6a6a6a6a6a6a6a6a6a6a6a675f4d3925100013283c50616a6a6a6a6a6a6a6a6a6a6a6a6a665e4d39240f000d22364a5c6465656461584b453828160300000000000000000000000000000000000000000000000000000110182630353e4b4f57596265696a6b6b6a68656158564e4a3d372e1f180c00000000000000000000011527375c72879cb0aca8a6a6a8aab0b4bbc8cec5b8aa9f8d7c665a4935201100000000071c304354606868686868686868615947341f0a0000000000000000000000000000030a0c131920222426262524211e16100e08000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000071c3043546175818a8e8e898073604b3f2e1c0800000000031729394a60728398a3b2bec9bcb4a79e97928f8e8e90949a9fabb3bfccd9d2c1af9a85705b4936210c000000000000081621292b353535353535353535353535353535353535353535353535353534312a1f11010000000000000000000000000000081d314455707575757575757575757575757575757575757575757575757575757575757569604f3b261200000000000000000000021528384c5e697e77696055493c2b1906000b21364b60757b7f818382807d7871676054473a291c0c0000000000152a3f546a7f8080808080808080808080807d67523d271200152b40556a808080808080808080808080807c66513c2711000f24394e647a7a7a7a766d605645321e120000000000000000000000000000000000000000000000000009151d2e36434b525c646c72777b7e7f80807f7d7b76716b635b4f4b3f332a1c10020000000000000000001a2f44596f84999b9793919192959a9faab3bfcdc8bbab9e8a78634d3f2f1c0800000000132536434a53535353535353534c473a2a1804000000000000000000000000000000000000050b0d0f1011100f0c0a03000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000001325364657616c767979756b60554431211100000000000a1e334657687e93a0b2c1c7baab9f9589827d7a78797b7f858c99a1afbbccdcc8b4a28e79634e39230e0000000000041626333d404a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49463d2f1f0d00000000000000000000000000000b20354b60738a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7e69533e291400000000000000000000091d324556667c90897e73625a4935200b00162b40566b80909597989795938d867c726158473a291704000000001f34495e7489959595959595959595959595836f59442f1a0020354a60758a959595959595959595959595826d58432e1800162b40566b808f8f8f8a8274604b402f1d0900000000000000000000000000000000000000000000000c1927313e4b546067717a81878c90939596969593908c87807970655d4c473a2e20110400000000000000000e23394e63798486827e7c7c7d80858b99a1b0bdcdc9b9a899846f5d4b37230d0000000008182530353e3e3e3e3e3e3e3e37342a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000000008182839464b5760646360564b443727150300000000011426364c6176889eb3bfcebaa99f8d80766d6865636465696f7983949dafbccdd1c0aa95806b553a2a1704000000000e213344515660606060606060606060606060606060606060606060606060605e5a4d3d2a1700000000000000000000000000000b20354b60758a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f937e69533e291400000000000000000005182b3b4b6074879c9e938578624d38230d00142a3f54697f94a9acadacaba8a49c918476615846331f10000000001f34495e74899eaaaaaaaaaaaaaaaaaaaa99836f59442f1a0020354a60758aa9aaaaaaaaaaaaaaaaaaaa98826d58432e18000e23384d63788c9faa9f97846f5e4c38240e000000000000000000000000000000000000000000000c1c2937444b5c64737d868f969ca4a5a8aaababaaa8a5a49c958e847a6e61584b3e2f221102000000000000000c21364a5b636f706c696766686b707983969eb0c0d0c6b3a1907b65503b2a18050000000008131c202929292929292929221f180c00000000000000000000000000000000000000030a0c10131516161513100d0b0500000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0a0a0a0a0a0a0a0a0a0a0a0a0a0807010000000000000000000000000000000000000b1b283239454b4e4e4b4538312719090000000000081c3043546a8095a6b8cbc2b49f8b7c6b6158524f4e4e50545b636f7f949eb0c2d2c6b19c86715847331f0a0000000014293d51626b7575757575757575757575757575757575757575757575757575746b5a46311c00000000000000000000000000000b20354b60758aa0b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a9937e69543e29140000000000000000000b203448596a7f95a4b4a399846f5a442f1a0013283d53687d92a8bbc8bcc0c2b6b1a29a8676614c3f2e1b080000001f34495e74899eb3bfbeb2ada9a9a9a9a999836e59442e19001f354a5f748b9fa9a9a9a9a9b1b5c2bfad98826d58432e18000c2035495a6f849aafb4a2917c66513c2b190600000000000000000000000000000000000000000417293a4755606b7a85929ca4acb2b6c3bebfc0c0bfbdc2b6b1aba29a8f8376645c4c402f201000000000000000071a2d3d4a4e5a5b5753515153555b63728096a2b4c9d0bfaf99846f5948341f0b000000000000070b13131313131313130c0a040000000000000000000000000000000000040b0c161e2125282a2b2b2a2826221f18110b0801000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39241f1f1f1f1f1f1f1f1f1f1f1f1f1f1e1b150c0000000000000000000000000000000000000b161e28323639393632281d15090000000000000b20354b6073889db2c5c9b5a4937e685e4c463a3a39393b3d4a4e616b8096a4b5c9cab59f8b77614c37210c00000001162b40566b808a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89745e49341f00000000000000000000000000000b20354b60758aa0b5cacacacfc7c3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2bea9937e69543e2914000000000000000005192b3c4d62778a9fb4c1af9a846f5a45301a0012273c51677c919faaa2a7b2b6c3c0b4a498826d5d4b3722080000001f34495e74899eb3c9b2a09894949494948f7d67523d281200192e43596e839294949494949ca4b5c2ad98826d58432e180006192c3c52677c91a7b8af9a846f5a4835200900000000000000000000000000000000000000000a1f3347586173808c9ba3b1b5c2c7c4c7bab4b2b2b3b9c6c1c6c0b4afa098887a665e4c3f2e1d0c000000000000000f1f2d36394546423e3c3c3d3d4954606f849aabbccfcab49f8b77624c37220d00000000000000000000000000000000000000000000000000000000000000000000040c181f222932363a3d3f40403f3d3b37342a26201d15090200000000000000000000000b20354b60758aa0b5caceb9a48e79644f393535353535353535353535353535353330291d0f000000000000000000000000000000000000030a161e212424211e160a01000000000000000f243a4f647a8fa6b7cbc6b19c8671604e403329252324262d36434b6073869cb1c7cfbcab907b66503b261100000001162b40566b80959f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e89745e49341f00000000000000000000000000000b20354b60758aa0b5cae2cfbfb3aeacacacacacacacacacacacacacacacacacacacaca9947e69543f291400000000000000000b2035485a6c8197a9bab6a5927d68533d2813000d23384d6278888a8b8d929ca4b6c4c2b2a08f7a654f3626140100001f34495e74899eb3c3ad98827f7f7f7f7f7b675f4d3a2510000b20364b60757d7f7f7f7f7f869cb1c2ad98826d58432e1800000e20364b6075889eb3b59f8c78624d37261401000000000000000000000000000000000000000c21374c617684959fabb5c1c9bcb5afa8a99f9d9d9ea8a5acb4b9c6beb2a69d8b7c665d4b3b2a1804000000000000010f1a21232f312d292727282c36434d63788c9fb4cacebbaa937d68533e28130000000000000000000000000000000000000000000000000000000000000000000c171f2a343739464b4f525455555453504c483b3c3531271e160a000000000000000000000b20354b60758aa0b5caceb9a48e79644f4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a48443b2d1d0c0000000000000000000000000000000000000003090b0f0e0b090300000000000000000014293e54697e93a9c4d4c5a8927d685342311f17100e0f101a21314455677c91a9bacdc9a8937e69533e291400000001162b40566b8095abb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b39e89745e49341f00000000000000000000000000000b20354b60758aa0b5cadbc7b3a199979797979797979797979797979797979797979797947e69543f29140000000000000005182b3b4d62788b9fb4c2b29d8774604b36200b000b2035485a62737575777d869ca6b7cbbead98836d5443301c0800001f34495e74899eb3bca7927d6a6a6a6a69655d4d41301e0a00091d31455660676a6a6a6a6e8398adc2ad98826d58432e180000091d3145566b8196abbcab95806b5544311d080000000000000000000000000000000000000010253a50657a8a9fb4bcc9bcb4ab9f9a928d898887898b90969ea8b1bec4b7a99f8b7b645947341f110000000000000000070c0e1a1b1714121113182535495a6f849aafc4d9c8ad98836e583928160300000000000000000000000000000000000000000000000000000000000004121c2a333b474c54576165686a6b6b6a6865625958514b443732281a120000000000000000000b20354b60758aa0b5caceb9a48e79645f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5d584c3b2915010000000000000000000000000000000000000000000000000000000000000000000000172c42576c8197acc1ccb8a78d78624d3823140400000000071426374b60758a9fb4c9c0ab96806b56412b1600000001162b40566b8095abaeaeaeaeaeaeaeafb3bfd0cad3c2b6b1aeaeaeaeaeaeae9e89745e49341f00000000000000000000000000000b20354b60758aa0b5cad9c3ae9983828282828282828282828282828282828282828282827c65503b2610000000000000000b203448596c8297a9bab6a4927d675544311d080006192b3c484d5d5560626776879db2c8c9b39e8974604b35200b00001f34495e74899eb3bca7927d6754545454504b3f302313010002152738454b52545454586e8398adc2ad98836d58432e180000021527384e63798da2b4b29d8874604b35200d000000000000000000000000000000000000000e23374b5d6b8096a3b5b4ab9f988c847d7874737274767b818a979fb4bcc7baa99d8877614c3f2e1c08000000000000000000000506020000000008192c3c53687d92a8c8d9c7b29c87725745321e090000000000000000000000000000000000000000000000000000000000071522303a474c59616970767a7d7f80807f7d7b77736d6660554b45382f1c1308000000000000000b20354b60758aa0b5caceb9a48e7a747474747474747474747474747474747474736a5844301b070000000000000000000000000000000000000000000000000000000000000000000000192f44596e8499aec3c8b39e88735a4835200b000000000000091e3245566f859aafc4c1ac97816c57422d1700000001162b40566b8095999999999999999999a1b3c7dccab6a49c999999999999999989745e49341f00000000000000000000000000000b20354b60758aa0b5caceb9a48e7a6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d655e4c38230e000000000000011527374d62778b9fb4c5b19c8673604b3727150200000e1e2b353837444b4d586a7f94a9bfccb9a88e79634e39230e00001f34495e74899eb3bca7927d67523f3f3f3a372e2113050000000a1a2731363d3f3f43586e8398adc2ad98836d58432e180000000a2135495b70859ab0b7a6917b66513b2b1805000000000000000000000000000000000000081c2e3f4b6074859ba6a29a8c82796f68635a5d5d5760666c7782939fabbcc7b7a698826e5d4b37230e0000000000000000000000000000000000000f24394f64798eaabbcecab59f8b76604b36210b0000000000000000000000000000000000000000000000000000000008162633404d58616c777f858a8f929495959492908c88827b746960564c40302518080000000000000b20354b60758aa0b5cadfc9b49f8b8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a88735d48331e0800000000000000000000000000000000000000000000000000000000000000000000001a30455a6f859aafc4c7b19c87725c3c2b190600000000000002162838586d8298adc2c2ad98826d58432d180000000013283d52687d8484848484848484848399afc4d9c6b19c868484848484848484826e58432e1900000000000000000000000000000b20354b60758aa0b5caceb9a48e7964575757575757575757575757575757575757575757504c402f1c09000000000000081d3144556a8095aabbb8a7937e685443301909000000000e1920232731363a4f647a8fa4b9d6c6a6917b66513c261100001f34495e74899eb3bca7927d67523d2a2a25231c110300000000000a151d20282a2e43586e8398adc2ad98836d58432e18000000061a2c3d52677d92a7b9ae99846e594834200800000000000000000000000000000000000000111d314455637888918e847a6d635b534d493c39454b5059626d7e8d9fb4c1c4b2a08f7b65503c2c190600000000000000000000000000000000000b20364b60758a9fb4cacfbcab8d78634e38230e0000000000000000000000000000000000000000000000000000000616263444505e6676818a949b9faaa7a9aaaaa9a8a5a69d9791877f75665e4a433625130000000000000b20354b60758aa0b5cae2cebaa99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9e89735e49341e0900000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aafc4c6b09b86715b3827150200000000000000172c42576c8197acc1c1ac97826c57422d170000000010253a4e5f686f6f6f6f6f6f6f6f6f748ba0b5cbbea9947f6f6f6f6f6f6f6f6f6e6453402b1600000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f42424242424242424242424242424242424242423b382f2111000000000000000b20354b6074889db2c8b39e8875604b362614000000000000060b0d151d23384d62788da2b7cdbda7927d68523d281300001f34495e74899eb3bca7927d67523d2814100e08000000000000000002090b12192e43586e8398adc2ad98836d58432e18000000000f21364b6075899eb3b49f8b77624d3625130000000000000000000000000000000000000002152737495a63767c7970645c4e493d38352c2832363b474c606b8095a3b4c8beaf9a846f5a4935200c0000000000000000000000000000000000091d32455674899eb3c9dac9a58f7a65503a25100000000000000000000000000000000000000000000000000000011424344451626b7c89979fa9b0b4bbc8bfbfbdbebdc4b7b2ada69d94877c6b605443301c0c00000000000b20354b60758aa0b5caead8c7bab4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b39e89735e49341e090000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adc3c7b29d87725645311d090000000000000417293a586e8398adc3c0ab95806b56402b16000000000b1e31414e52595959595959595960768ba0b5cbbea9947f695959595959595958534636231000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f392d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d26231c110300000000000004172a3a51677c91a6b7c0ab95806b5645321808000000000000000000020d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000091e3245566c8196acbbaa947f6a5443301c070000000000000000000000000000000000000009192c3c49586167645c4e4a3e352c232019161e212a34424b6073859bb0c3c7b3a28d78634d38230e0000000000000000000000000000000000021528385d72889db2c7d0bba5907b66503b261100000000000000000000000000000000000000000000000000000f1f314251626b80919ea7b4bac7bcb4b0aba9a8a9aaaeb3b8c4b7b2a59d8d8072604a3a2a1704000000000b20354b60758aa0b5cadfded0c7c4c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3b39e89735e49341e090000000000000000000000000000000000000000000000000000000000000000000000162b40566b8095abc9c9b49f8a75604b36200f0000000000000a1f33465870859bb0c5c7a8937e68533e291300000000011323313a3d444444444444444b60768ba0b5cbbea9947f695444444444444443403628180600000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f3924181818181818181818181818181818181818100e0900000000000000000a1f3347586f8499afc4b4a28d78634d38281600000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000031628384e63798ea3b5b29d8773604a35200c00000000000000000000000000000000000000000e1e2c3a474c514f4a3e362d211a0f0c0603090d181f314455667c91a5b7cac0aa957f6a553726140100000000000000000000000000000000001c32475c71879cb1c6d1bba6917c66513c271100000000000000000000000000000000000000000000000000061a2c3d4e606b80959eb3b8c5bab4ab9f9b9694939495999ea7afb3bfb7ab9f95816c5847331f0a000000000b20354b60758aa0b5cae3d0bfb3afadadadadadadadadadadadadadadadadad9e89735e49341e09000000000000000000000000000000000000000000000000000000000000000000000012273c52677c91abbccdbaa9907b65503d2c1b0c01000000091527384c61768b9fb4cabaa98f7a644f3a250f000000000005131e25282f2f2f2f2f2f364b60768ba0b5cbbea9947f69543f2f2f2f2f2f2e2b23180a0000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f020202020202020202020202020202020200000000000000000000000c21374c61768b9fb4c9b09b85705a49351a0a00000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000a21364a5b70859bb0b7a5907b65503a2a180400000000000000000000000000000000000000000e1c2a33373c39362d221b1006000000000000051426374a6073879db2c7c5b09a85705544311d0800000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000000000c2135495b687e939eafbcc3b7a99f968b86817f7e7e8084899099a1afb4bbaa9e8877614c37210c000000000b20354b60758aa0b5cadcc7b3a19a98989898989898989898989898989898989888735e49341e0900000000000000000000000000000000000000000000000000000000000000000000000d22374c62778b9fb4cac7ad97826d5b49392a1c141111131926314556687d92aabbc9b49f8a74604b36200b000000000000010b10131a1a1a1a1a21364b60768ba0b5cbbea9947f69543f2a1a1a1a1a19161006000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000316283952687d92aabbbcab937e68533c2c190000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000071a2d3d53687d92a8b9ae98836e5947341f0a0000000000000000000000000000000000000000000c171f212724221b1007000000000000000000091c3043546d8297adc2c9b49f8a75604b35200b00000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000000091c2f404e63798b9fb4bcc4b7a59d8b8177716c6a68696b6f757b848e9aa2ac9f8c7b655847331f0a000000000b20354b60758aa0b5cad9c4af9a84838383838383838383838383838383838383816c57422d170200000000000000000000000000000000000000000000000000000000000000000000000b1f3447596f849aafc0cab49f8c796357473a30262726282e37444b6074879db2c8c1ae99836e5645321d0900000000000000000000040404040b21364b60768ba0b5cbbea9947f69543f2a1404040403020000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000000000000000000000000091e3245576f8499aec8b49f8b77614c37220e0000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000f21364b6176899eb4b49f8b77614c37221100000000000000000000000000000000000000000000040a0c120f0d0700000000000000000000000013253653687d92a8bdcdbaa98d78624d38230d00000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000000000f23384c5e70849aa9bac9b7a69d87796b625956545354555560666f7a849097937f695d4b3a2a1704000000000b20354b60758aa0b5caceb9a48e7a6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6c63523e2a1500000000000000000000000000000000000000000000000000000000000000000000000005182a3b51667c91a2b4c9bbaa9c867561594b43363c3b3d3f4b55606d8197a5b7c9b5a3917c66513828150200000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000b21364b60768a9fb4c5b09b85705847331f0a0000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000091e3246576c8297acbbaa947f69543f2e1c080000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbd7c7a58f7a65503a251000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000006192c3c50667b90a2b4c7bcab9d8877635b4c483b3f3e3f37444b515c646f7b817e69614f3f2e1c0c00000000000b20354b60758aa0b5caceb9a48e7964585858585858585858585858585858585857524535220f000000000000000000000000000000000000000000000000000000000000000000000000000d24384c5e70859aabbcc8b5a49a847768605453515153565d657380969fb1c3beb09b85715e4c381a0a0000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f07070707070707070707070703010000000000000000000000000010253b50657b90a9bac6aa947f6a553a2a18040000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000031628394f64798ea3b5b19c87725d4b37230c000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4b9cebba6907b66513b261100000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c271200000000000000000000000000000000000000000000000c2035495a6f849aafc0cab59f8d7b65594a3d342a2a29292731363e4a4f5d656c68604f433221110000000000000b20354b60758aa0b5caceb9a48e79644f43434343434343434343434343434343423e3527170500000000000000000000000000000000000000000000000000000000000000000000000000091d30404f647a8d9fb5bec2b4a29a877d746d686666686b717a84969eb0bdc2b2a0917c6651402f1d000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39241c1c1c1c1c1c1c1c1c1c1c1c1c181610060000000000000000000001142637556a8095aac7b9a88e79644e39240f000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000b22364a5c71869bb1b6a48f7a65503a29170400000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5bacfbba6917c66513c271100000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c271200000000000000000000000000000000000000000000000d23384d62788da2b4c7c2ae98836e5d4c3b2d1f18151314151d202d363f4c5057534e42322515030000000000000b20354b60758aa0b5caceb9a48e79644f392e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2d2a2217090000000000000000000000000000000000000000000000000000000000000000000000000000001222374b5c6a7f95a0b2bec0b4a69d9288827e7c7b7d81868f9aa2b0bcc3b5a498826d5e4c382212000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f3931313131313131313131313131312d2a231709000000000000000000081d31445570859aafc5b39e8974604b35200b000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000071b2d3e53687e93a8b9ad98826d5847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbd9c8a5907b65503b261000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000014293f54697e94a9c0cab6a48f7a644f3f2f1d0f050005000208101b222f383b423e3a31241507000000000000000b20354b60758aa0b5caceb9a48e79644f3924191919191919191919191919191917150f0500000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3e50616e8298a0b4bbc4b7b2a69d9793919092969ca4b0b4c0c0b3a59c8675604b40301d04000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f464646464646464646464646464646423f3527170600000000000000000b20354b6075899fb4c4af9a846f5443301c08000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000001021364c61768a9eb4b49f8a76614c372110000000000000000000000000000000000000000000000000000309070100000000000000000008182d3e556a8095aabfcebbaa8e79634e39240e00000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000005192b3b5a6f849aafc4c7b19c87725c4a36211b1b1b1b1b1b1b1b1b1b1b1c23262c28261f140b05000000000000000b20354b60758aa0b5caceb9a48e79644f39240f03030303030303030303030303020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102033434b607482949faab4c0c4b7b3aca8a6a6a8abb1b5c2c5b8b3a29a877862574532221200000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79645c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c58524535231000000000000000000e23384d63788da9babfaa95806a5536261401000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000a1e3346576d8297adbaa9937e69533e2e1b070000000000000000000000000000000000000000040a0c12181e1c16110d0b05000003090c1726364a5c70859bb0c5cab49f8a76614b36210c00000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000b2034485973899eb3c8c1ac97816c573e2d3030303030303030303030303030303030302e2220190d0000000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002151e324556606e7f8c9aa2afb4bcc9c2bdbbbbbdc0c3c4b8b3a79e948476625a493928160400000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e7a71717171717171717171717171717171716d63523f2a16010000000000000011273c51667c91a6c7c7a6917b66513c261100000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000031729394f647a8fa4b5b19c86715c4b37220b000000000000000000000000000000000000000c181f22272d33312b26221f181b1a161e212a334354647a8ea2b4c8c6b19b86715746321e0900000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000d22374d62778ca7b8ccbca7927c675245454545454545454545454545454545454545454338342b1d0d00000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002162838454b61697a84909a9fabacafb2b3b3b2b1aeaaa69d95897f736158493c2b1b0a0000000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cadcc7b19c868686868686868686868686868686868686816d58422d180300000000000000152a3f556a7f94aabfbaa98d78634d38230e00000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000b22374b5c71869cb1b5a48f7a644f39291703000000000000000000000000000000000a181c2a33373d434947403b37342a302f2832363a474c6073849aafc0d1c0ab95806b563928160300000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000010253a4f657a8fa4c5d6baa48f7a655a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a584d483c2b1905000000000b20354b60758aa0b5caceb9a48e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2832434f5c64707b848b92979a9d9e9e9d9c99958f8880766a6055473a2b1e0e000000000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cadecab6a49c9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a85705b45301b0600000000000003182d43586d8298adc2b49f8a75604b35200b00000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000081b2e3e54697e93a9baac97826d5746331e0a000000000000000000000000000000061828353a474c52585e5c56514c473b454538454b5058616e8096a2b4c7c9b4a28e79644e39240f0000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000012273c51677c91a6bccdb7a28d78707070707070707070707070707070707070707070706d625a4834200b000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e323e4b4f5d656f777d82858788898886847f7a746a61574b4437291c0e00000000000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cae5d3c2b6b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b09a85705b45301b06000000000000051a30455a6f859aafc4b19c86715544311d0800000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000001021374c61768a9fb4b49e8976614b36210f00000000000000000000000000000010233546535861676d73716b6662595c5b5a5b5660656c7683969eb0c0cfbcab9a84705c4a36210d0000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000012283d52677d92a7bcd2c5b09a84858585858585858585858585858585858585858585858278624d38220d000000000b20354b60758aa0b5caceb9a48e79644f39240f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000215202e373f4b505962686c7072737473716e6a6560544c46393127190c0000000000000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cadfddcfc6c3c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b09a85705b45301b06000000000000021527375c71879cb1c4af99846f5a3726140100000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000a1f3347586d8298adb9a8937d68533e2d1a070000000000000000000000000001162b3f53646d777c828886807b777471706f7072767a818a99a1b0bccdc0b59f8d7a644f3d2d1a070000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000013283e53687d93a8bdd2c8b4a29a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a97816c57422c17000000000b20354b60758aa0b5caceb9a48e79644f3925252525252525252525252525252525252525221f180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222f373b484c52575a5d5e5e5d5c5955504b433633291d1509000000000000000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cae2cfbfb2aeacacacacacacacacacacacacacacacac9a85705b45301b06000000000000081d31445573899eb3c2ad97826d58422d180000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000417293a50657a8fa4b6b09b85715c4a36210a0000000000000000000000000003182e43586d828c92989e9c95908c8986858486878a8f979fa8b3bfcfbfb2a296806b5c4b371f0f000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000013283d52687d92a7bdd2d1c0b4b0afafafafafafafafafafafafafafafafafafafafafaf99846f5a442f1a000000000b20354b60758aa0b5caceb9a48e79644f3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a37342a1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111c232b34373d4245484949484744403a3530261e170b0100000000000000000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cadbc6b2a199979797979797979797979797979797979785705b45301b060000000000000b20364b60758ba7b8c0ab95806b56402b160100000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000000000c23374b5d72879cb1b5a38e79644e3828160300000000000000000000000003182e43586d8398abadb3b1aba6a89e9c9a9a9b9c9fa9acb4bac6c9bcb4a1998473604b3e2e1b01000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000011273c51667c91a6c9d9cbb8a69d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9da5b7c5c4af9a856f5a45301a000000000b20354b60758aa0b5caceb9a48e79644f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c473b2a18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d182022282d3032333433312f2a25201c140803000000000000000000000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cad8c3ae998382828282828282828282828282828282827f69543f2a14000000000000000c21374c61768ca1c5bea9947f69543f2a140000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000081c2e3f54697f94a9baac96816c5645321e0900000000000000000000000000152a3f546a7f94a9c9c8c6c0c6b9b4b1b0afb0b2b4bac7c9c9bcb4ab9f94837561554431201000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000f24394f647a8eabbccfc8b39d8887888888888888888888888888888888879db2c7c3ae99846e59442f19000000000b20354b60758aa0b5caceb9a48e7964646464646464646464646464646464646464646464625947341f0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d13171b1d1e1f1e1c1915100b08010000000000000000000000000000000000000000000000000000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e7a6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c69614f3b2712000000000000000d22374c62778ca1b7bea8937e69533e29140000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000001122374c61778a9fb4b39e8975604b36210f0000000000000000000000000011263b51667b90a6c6d5c4b8b3b3b9c6bdbebfbfbebdc3b6b2ab9f988c7f726157463727150200000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000c21364b61768b9fb4cabda7927d72727272727272727272727272727272758ba0b6c2ad97826d58422d18000000000b20354b60758aa0b5cad2bda7927e7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a77624c37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001040000000b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e796457575757575757575757575757575757544f4332200c000000000000000d23384d62788da2b7bda8927d68533d28130000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000a1f3447596e8398adb9a7927d67523d2c1a060000000000000000000000000d23384d62788da8b9cbb8a69d9ea8a5a7a8aaaaa9a8a5a59c968c83796a605446392919090000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000a1e33465771869cb1c6c1ac97816c545d5d5d5d5d5d5d5d5d5d5d5d5d62788da2b7c9aa957f6a55402a15000000000b20354b60758aa0b5cad5c0ad9c928f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f7e69533e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1113151615130f0b0801000000000000080b0b0b0b0402000000000000000000000000000000030a0c1619130b070b21364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f4242424242424242424242424242423f3b32251403000000000000000e23384e63788da3b8bca7927c67523d27120000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000000000004182a3a50657b90a5b6b09a85705b4935210a0000000000000000000000000b20354a6074899eb4c8b39d88898c90929394959492908c8781796e635b4a4336291b0b000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000003172939566b8196abc2c8b29d8874604b484848484848484848483a51677c91a6bcbcab917c66513c2711000000000b20354b60758aa0b5cadccabaada7a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000080b161e2126292a2b2a2824201c14080600080e101d20202020191711070000000000000000000000000b171e212b2e29201c1321364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f392d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2720140700000000000000000e23384e63788da3b8bca7927d67523d28120000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000000000c20354a6073879db2b4a28e79634e382715020000000000000000000000071c30435470859bb0c1ac978174777b7d7e7f7f7f7d7b77726b635b4e4a3d3025180b00000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c271200000000000000000000000000000000000000000000000f253a4f647a8fa4b5c9b7a6907b66544330333333333333333347586d8297acc2b59f8b77614c37220c000000000b20354b60758aa0b5cad3d3cac0bdb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a8937e69533e29140000000000000000000000000000000000000000000000000000000000000000000000000004111c232932363b3e4041403d3a353026211a111c232533353535352f2c24190a000000000000000000000b1b29333640443e35302521364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39241717171717171717171717171714120c030000000000000000000d23384d62788da2b7bda8927d68533d28130000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000000000000071c3043546a7f94aabbab96816b5645311d09000000000000000000000000132536576d8297acc2b09a8570626568696a6a6968656159564e4a3d362d1c13080000000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c271200000000000000000000000000000000000000000000000d22374b5d71869cb1c1c4b09b8572604a41342a2625262a34434c61768a9fb4c3b09a85705947341f0b000000000b20354b60758aa0b5bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda8937e69533e29140000000000000000000000000000000000000000000000000000000000000000000000000c181f2f3839464b5153555655534f4b4336352c1f2e373a484a4a4a4a444036291907000000000000000008182939464b5659534a433628364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f020202020202020202020202000000000000000000000000000d22374c62778ca1b7bea8937e69533e29140000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000000000000001325364c62778b9fb4b39e8875604b36200e00000000000000000000000014293e54697e93a9beb39e89745950525355555453504c473b39362d211a0f00000000000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000000081b2e3f52677d92a3b5c7b5a3947f695f4c473a3b3a3b3b474c616d8298a8bab6a5927d67523b2a1804000000000b20354b60758aa0a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8937e69533e291400000000000000000000000000000000000000000000000000000000000000000000000e1d2a343f4b50576166686a6b6a686460544e493d333f4b505d6060606059544736241100000000000000011426364657616b6e6860544539364b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000000000000000000000c21364c61768babbcbea9947f69543f2a140000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000000081f3448596e8399aeb8a7917c67523c2c1906000000000000000000000010263b50657b90a5c5b9a78c77624d3d3e3f403f3d3b37342a23211a0f070000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000000001020354a6072859ba9bac1b49f8c7d6c615953514f505359616d7f94a0b2bfb29c8773604b35200c00000000000b20354b60748a9393939393939393939393939393939393939393939393939393939393937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000e1e2b3b474c5d656f767b7e7f807f7d79746c635b4c474b5d6572757575756e6554402c1700000000000000081c304354617580837e726057483b4b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f000000000000000000000000000000000000000000000000000b20354b60758a9fb5c0ab96806b56412b160100000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000000000005182a3b50667b90a5b7af9a846f5a4935200900000000000000000000000d22374c62778ca7b8c5a5907b66503b292a2a2a2826221f180e0c0700000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000000071c30435463798b9fb4bbbbaa9f9281776e68666466686e7782949daebeb2a0927d685544311d0800000000000b20354a60727e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e79634e39230e0000000000000000000000000000000000000000000000000000000000000000000b1b2b3c4859616e7b848a9093959695928f8881796d615850657b878a8a8a8a836e59442f19000000000000071b2d3e4b607284959993837562594a4b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f00000000000000000000000000000000000000000000000000081d31445573899eb3c2ad98826d58432d180000000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000000000d20354b6074879db2b59f8c78634d37271501000000000000000000000b1f34485973889eb3bea9947f69543f2a15151413100c0b0400000000000000000000000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000000001325364a5b687d929db4bbbbb49f968a837e7b7a7b7d8389979faebbb5a498836e5f4e372614010000000000071c3043546068686868686868686868686868686868686868686868686868686868686868635b4a36210c000000000000000000000000000000000000000000000000000000000000000003162939485a62778390999fa9a8aaabaaa8a79e978c8276655d70859ba59f9f99846e59442f190000000000000d22364a5c6a7f94a2aea1998577645c4b60768ba0b5cbbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f39240f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0d0b050000000000011527375c71869cb1c4af9a846f5a3727150100000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000000000000081c3043546a7f95aabbab95806b5544311d080000000000000000000005182a3b5a70859aafc2ad98826d583726141515151515151515151515130e0c060000000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c27120000000000000000000000000000000000000000000000000008182d3d4e606a7f939faab5bdb0a89f9893908f9092989ea8b1bdb2a39b8675614b4131190900000000000000132536434a535353535353535353535353535353535353535353535353535353535353534e4a3d2d1a0700000000000000000000000000000000000000000000000000000000000000000a1e32465762788699a1afb4bac7bfc0bec5b8b3ab9f97887b6674899fb4c3ae99846e59442f190000000000000f24394f647a8b9fb4bfb2a39b887a665e60768ba0b5d9bea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f3925252525252525252525252525252525252525221f180d00000000001a2f455a6f849aafc4b19c87715544311d0800000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000000000000011426364d62788b9fb4b39d8874604b35200d0000000000000000000000172c41576c8196acc1b19b86715544312b2b2b2b2b2b2b2b2b2b2b2a2823211a0f01000000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c271200000000000000000000000000000000000000000000000000000f1f31414f616a7e8b9ca4b2b7bab4aea8a6a4a5a8adb4b9b4afa0988578625746332313000000000000000008182530353e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e39362d1f0f0000000000000000000000000000000000000000000000000000000000000000071a2d3d4b6175879ca4b3bfc9c4b7b3ada9a8a9acb2b4a69d8b7c788da9bac3ae99846e59442f19000000000000182d42576d82979fb5bcc1b5a69d8a7c6a60758babbccfbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a37342a1d0d00000003182d42586d8297adc2b49f8a75604b35200b00000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000000000008203448596f8499aeb7a6917c66513c2b19050000000000000000000013293e53687e93a8bdb49f8a75604b4040404040404040404040403f3e39352c1f17090000000000000000000000000000000000000000071c32475c71879cb1c6d1bca6917c67513c2712000000000000000000000000000000000000000000000000000001132332434f60687a86939da5acb1b4bcc9b9c8bbb4b1aba29a8f82756259483929170500000000000000000008131c202929292929292929292929292929292929292929292929292929292929292923211a0f0100000000000000000000000000000000000000000000000000000000000000000c21364a5b6c8197a5b6c2c8bbb4a69d97949394979da5b0a99f8c8298adc7c3ae99846e59442f190000000000000b20364b607381949fabbac4b7a89f8d7f6d758a9fb4cabea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e79644f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4c473b2a1805000000152a3f546a7f94a9bfbbaa8d78634e38230e00000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000000000005192b3b51667c91a6b7ae99846f5a483420080000000000000000000010253a4f657a8fa4c4baa98d78635555555555555555555555555555534e493d3427170400000000000000000000000000000000000000071c32475c71879cb1bdbdbca6917c67513c271200000000000000000000000000000000000000000000000000000005152532424e5c64747e8790979c9faba4a5a4aa9f9b968f847a6d6056483b2b1b0b000000000000000000000000070b131313131313131313131313131313131313131313131313131313131313130e0c07000000000000000000000000000000000000000000000000000000000000000000021628384e63798e9fb1c3cebbaa9f9488827f7d7f82878f9ba3aa9f98a0b2c6c3ae99846e59442f19000000000000081d314455606d7f8d9fa9b8c5baab9f9482748a9fb4c9bea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5caceb9a48e7964646464646464646464646464646464646464646464625947341f0b00000011263b51667b90a6c6c8a6917c66513c271100000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000000000000000000000d20354b6074889db2b49f8b78624d362614010000000000000000000c21364c61768ba6b7c7a6917c6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a68635b524534221200000000000000000000000000000000000000071c32475c71879ca8a8a8a8a6917c67513c271200000000000000000000000000000000000000000000000000000000071524313e4a556068737b81878a8d8f8f8f8d8a86817a6f655d4b45382b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566c8297acbdcebfb49f8c7f756d6968696c727b85939ea8adb2becfc3ae99846e59442f1900000000000002152737444b616a7d8b9ea7b6c2bcb5a097858a9eb4c9bea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cad2bda7927e7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a77624c37220d0000000d23384d62788da8b9c0aa95806b5537261401000000000000000000000000000d22374c62778ca1b7ccbea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000000000000081d3144556b8095abbcab957f6a5443301c080000000000000000000a1f33465873889db2c4af9a8380808080808080808080808080807f7d796c635240301d0a000000000000000000000000000000000000071c32475c7186939393939393917c67513c271200000000000000000000000000000000000000000000000000000000000614202e37444b5460656c727578797a7a7875716b645c4f4b3f32281a0d0000000000000000000000000000000000000000000000030a0c1114161614120d0b05000000000000000000000000000000000000000001080b0f121516161513110c0a0400000000000000000000000000000b21364b6074899eb4c9c7b3a1927d696056545354575d65737e8a9ea6b8c5d6c3ae99846e59442f19000000000000000919273143505f677b899ca4b4c0beb1a29a9ea8b9cdbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cad5c0ad9c928f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f8f7e69533e29140000000b20354a6074899eb4c4af9a856f5544311d08000000000000000000000000000d22374c62778ca1b7c4bea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000000000000011426374d62788c9fb5b29d8774604b35200d0000000000000000000417293a5a6f8499afc4b3a29a959595959595959595959595959594938e816c5f4d3924100000000000000000000000000000000000000012273c52677d7e7e7e7e7e7e7e78624d38230d000000000000000000000000000000000000000000000000000000000000021019273136434b5057566063646564636056564f4a3e372e1e160a00000000000000000000000000000000000000000000060b171e2126292b2b29272220190d0a04000000000000000000000000000002090b141c2024282a2b2b2a2826211f170d0b0500000000000000000000000f253a4f647a8fa8b9cdc8af99846f5f4b45383e3f3f4b5460697a889ea7b9ccc3ae99846e59442f19000000000000000009151d33414d5d6478869aa2b2bec0b4b0b4b9c6d7bea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cadccabaada7a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4937e69533e2914000000071c3043546f849aafc4b49e8975604b35200b000000000000000000000000000d22374c62778ca1aeaeaea8937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000000000000000000092035485a6f849aafb7a5907b66503b2a1805000000000000000000162c41566b8196abc0c0b3afaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa89f917c67513c2712000000000000000000000000000000000000001025394d5f6768686868686868625a4935200c000000000000000000000000000000000000000000000000000000000000000009151d2630353b38454b4e4f504f4d4b45383a362d231c1103000000000000000000000000000000000000000000000e1a212933363b3f40403f3c37342b211f170c0100000000000000000000030a161e21263035393d3f41413f3e3b37332a2220190d0400000000000000000014293f54697e94a9c6cebbaa907b6651413127282a2e36434b5c6479899eb3c9c3ae99836e59442f19000000000000000000021523303f4b5a63768498a0afbcc8c5c9cdd7d4bea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5cad3d3cac0bdb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a8937e69533e291400000000132536556a7f94aac7b9a88f79644f3a240f000000000000000000000000000d22374c62778c9999999999937e69533e291400001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000000000000000000000006192b3c51677c91a6b8ae99836e5947341f0800000000000000000013283d52687d92a7c9d0c7c4bfbfbfbfbfbfbfbfbfbfbfbfbfbfbfbdad97826d58422d18030000000000000000000000000000000000000a1d30414d52535353535353534d493c2c19060000000000000000000000000000000000000000000000000000000000000000000208141c2026283236383a3a3a3836312724221b10080000000000000000000000000000000000000000000004121f2c3539464c5154565654524d483b37332a1d140900000000000000000b171e28323636434b4f525556565453514c473a37342b1f170c0000000000000000172d42576c8297acc1cab49f8a76604b36211513141826303e4a5b72879cb1c7c3ae99836e59442f19000000000000000000000513202e3c4958617482959db4bac7d5e1e9d4bea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0b5bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda8937e69533e29140000000010253a50657a8fa9bac6aa95806a553b2a18050000000000000000000000000c21364c6176838484848484847c66513b261100001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000000000000000000000e20364b6074889eb3b49f8b77624c3625130000000000000000000f24394f64798eabbcbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdae99836e59442e190400000000000000000000000000000000000001122330393c3e3e3e3e3e3e3e38352c1e0e00000000000000000000000000000000000000000000000000000000000000000000000001080b10151d202324252523201d150f0d070000000000000000000000000000000000000000000000031222303d494e576166696b6b69676259554c473a31261909000000000005131b293338454b52546064676a6b6b6a68666158564d483b33291c1002000000000000192e43596e8398aec3c7b29c87725745321e09000008141c2d3c5c72879cb1c7c3ae99836e59442f19000000000000000000000002101e2c3a4756606d7f929fa9b8c5d3e1d4bea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60758aa0a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8937e69533e2914000000000b20364b60758a9fb4c6b09b86715948341f0b0000000000000000000000000a1f334658616f6f6f6f6f6f6f665e4c38240f00001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000000000000000000000000081d3144556b8096abbbaa947f6a5443301c0700000000000000000b21364b60768a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a899846e59442f19040000000000000000000000000000000000000005121d2527292929292929292320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e0f100f0e0b09020000000000000000000000000000000000000000000000000000112130404d5b636d767b7e80807e7c77726a61584b44372618080000000917233039464b5660676e74797d7f80807f7d7b77726b62594c463a2e21100200000000001a30455a6f849aafc4c5b09b86705b39281603000000011d32475c72879cb1c7c3ae99846e59442f19000000000000000000000000000e1c2938454b616a7d8b9ea7b6c3d1d4bea9947f69543f2a1400000000000000000000000000000000000000000000000b20354b60748a9393939393939393939393939393939393939393939393939393939393937e69533e291400000000091d3245566e8399aec7b59f8b77624c37220f0000000000000000000000000417293a464c59595959595959514c402f1d0900001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e1800000000000000000000000000000000000000021527374d63788c9fb5b29c8773604a35200c0000000000000000091e32455772879393939393939393939393939393939393939393939393836e59442f19040000000000000000000000000000000000000000010a1012131313131313130d0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2e3f4d5f6779828b9094959594918c877f766a605544362513000005172734414d576169757d83888e929496969493908b8780786d61584b3f2e201000000000001b30455b70859ab0c5c5b09a85705b45301b00000000071d32475c72879cb1c7c3ae99846e59442f1900000000000000000000000000000c1a273143505f677b899ca5b4c0bfbea9947f69543f2a1400000000000000000000000000000000000000000000000b20354a60727e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e79634e39230e000000000215283852677d92a9babcab937e69543d2c1a060000000000000000000000000c1c293336444444444444443b382f22120000001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000000000000000000092135495b70859aafb6a5907b65503a2a1704000000000000000316283951667c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7c66503b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384b5d677d8a989faaa9ababa9a7a59c958a7f73605443301c07000f223445525f67767f8892989ea7a7aaababa9a8ab9f9c958b8276655d4b3e2d1d0d000000001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f190000000000000000000000000000000a151d33414d5d6579879aa2aaaaaaa9947f69543f2a140000000000000000000000000000000000000000000000071c3043546068686868686868686868686868686868686868686868686868686868686868635b4a36210c00000000000c21364c61768a9fb4c9b09b86715b4935210b000000000000000000000000051323313a474c5255534d483c312619090000001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e18000000000000000000000000000000000000000006192c3c52677d92a5b7ad98836d5847331f0a00000000000000000a24384c5e666868686868686868686868686868686868686868686868665e4c38230f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556657b8c9fa8b4bbc8c0c0bec3b6b2a89f958473604a35200b00152a3e52636c7d88949da6adb3b8b9b4b2b1b2b4bab5b1aa9f97877b655c4a3b2a18050000001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f1900000000000000000000000000000000021523303f4b5b6376849495959595947f69543f2a14000000000000000000000000000000000000000000000000132536434a535353535353535353535353535353535353535353535353535353535353534e4a3d2d1a0700000000000a1e3346576e8499aec3b5a38e79634e392916030000000000000000000000132331414e5861686a69625a4b443726140100001f34495e74899eb3bca7927d67523d2812000000000000000000000000000003192e43586e8398adc2ad98836d58432e180000000000000000000000000000000000000000000e20364b6074879da8af9f8a77614c37210c0000000000000000091d2f404c515353535353535353535353535353535353535353535353504c402f1c09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075889daabac6cec1b5b0acaeb2b7b7a595806b5443301c0700172c41576c81919ea7b3b7b8b3aaa89e9d9b9c9fa9adb2bbb4a59d8a7a645948341f0e0000001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f1900000000000000000000000000000000000513212e3c495861747f80808080807b644f3a250f00000000000000000000000000000000000000000000000008182530353e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e39362d1f0f0000000000000317293951667c91a5b7c1ab96816b5746321e09000000000000000000000a1a30414e5f68767d807e786b605544311d1000001f34495e74899eb3bca7927d67523d2812060000000000000000000000000009192e43586e8398adc2ad98836d58432e18000000000000000000000000000000000000000000091d314556657b8a969a9b937e69543e291400000000000000000012222f383b3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3b382f2211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000115273753687d93a6b7c8cabaada39b97989da5b29d8775604b3625130000172c42576c8197a6b8bab4a69e958e89878687898f98a0b4bcb7a89e8877624c3c2c190600001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f1900000000000000000000000000000000000003111e2c3a475660696a6a6a6a6a645d4b37220d0000000000000000000000000000000000000000000000000008131c202929292929292929292929292929292929292929292929292929292929292923211a0f01000000000000000b20354b6073879db2c7b39e8976614b372715010000000000000000021527384d5f687d899295938b8073604b3e2d1b07001f34495e74899eb3bca7927d67523d28201b0d0b0500000000000000090f111e202e43586e8398adc2ad98836d58432e18000000000000000000000000000000000000000000021527384b5d657881858686826d58432d1800000000000000000004121d2426292929292929292929292929292929292929292929292926231c110300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556f849aafc4d0c0ad9c9385818387929d907c66564532180800000c21364c6176889eb0a99f9588807975727172757a83929fabbcb8a697826d5b4935210c00001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f1900000000000000000000000000000000000000000e1c2a38454b5455555555554f4b3f2e1b08000000000000000000000000000000000000000000000000000000070b131313131313131313131313131313131313131313131313131313131313130e0c07000000000000000000081c3043546a7f94a9bab9a7937e695544311d0a0000000000000000091d314556677d919ea8aaaa9f96816c5c4a36220d001f34495e74899eb3bca7927d67523d3535312220190e0000000004121d242733353543586e8398adc2ad98836d58432e18000000000000000000000000000000000000000000000a1a2e3f4b5a636c7071716d64533f2b160000000000000000000000090f111313131313131313131313131313131313131313131313110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6075899eb4c9c7b4a2937e706c6e747d87816c5e4c3828160000000a1f334658677d929b978b7f756b6460545c5560646e7d8d9fb4c5b49f8c78634d38230e00001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f190000000000000000000000000000000000000000000c1a2832363f40404040403a372e201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364c61778a9fb4c5b29c8774604b38271502000000000000000b20364b6074889db3b9c6bbb49f8e7a644f39240f001f34495e74899eb3bca7927d67524a4a4a4638352b1e0e000000122230393c484a4a4a586e8398adc2ad98836d58432e18000000000000000000000000000000000000000000000011212e3c494d575a5b5b585346352310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca8b9cdc4af9a846f6057556067726c6352402f1a0a0000000417293a4d5f687e8582786a60574e4b4337444b4f5f6b8196abc7bcab947f6a543f2a1500001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f19000000000000000000000000000000000000000000000a151d202a2b2b2b2b2b25221b1002000000000000000000000000000000000000000000000000000003090c101315161514120f0b080200000000000000000000000000000000000000000000000000000000000000000000081f3447596c8196a9bab6a5927d685645311d090000000000000010253a50657a8fa6b8cbd6cebdab95806b56402b16001f34495e74899eb3bca7927d676060605f5b4d483c2b190500091d30404d515e606060606e8398adc2ad98836d58432e18000000000000000000000000000000000000000000000003111e2c353841454646433f35281806000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea3c6d7bea9947e695442444b525d57524535221200000000000c1c30414e6068706d635b4b45393530273135414d63788da9bac9b09a85705b37261401001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f19000000000000000000000000000000000000000000000002090b1415151515150f0d080000000000000000000000000000000000000000000000000002080b161e2125282a2b2a292724201d150c0a040000000000000000000000000000000000000000000000000000000000000004182a3b4c62778a9fb4c3b29d8774604b36200b0000000000000012273c52677c91a7c4d5e7dac9ad98826d58432d18001f34495e74899eb3bca7927d757575757570625a4835200b000f24394d5e667375757575758298adc2ad98836d58432e18000000000000000000000000000000000000000000000000000e1920232c3031312d2b23180900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b9cebca6917c67513c31353d48423e35271704000000000000132331424e535b584d493c3228201c151d2035495a748a9fb4c8b39e88735544311d08001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202832363a3e4040403f3c39363127211f170b040000000000000000000000000000000000000000000000000000000000000c203448596c8196a8b9b7a5937e68533e28130000000000000010253a4f657a8fa6b7cbd6cebcab95806b56402b16001f34495e74899eb3c9ac9b928a8a8a8a8a8578624d38220d0011273c51667c888a8a8a8a8a98a0b2c2ad98836d58432e180000000000000000000000000000000000000000000000000000060c0e171b1c1c1816100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d0f1415120c0a03000000000000000000000000000000000000000000000006121b202020202020202016140e040000000000000000000000000000000001082020202020202020202020202020202020202020202020202020202020200d0b050000000000000000000f24394f64798ea4b9cebba6917c66513c272028322d2a22170900000000000000051424313a3e464238352c1e16181f222c353f4b61768ba9bacab49f8a75604b35200b001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f19000000000a101212121212121212121212121212121212121212121212121212121212120f0d0700000000000000000000000000000000000003131927313639464b505355555554514e4b44373633291f170b000000000000000000000000000000000000000000000000000000000005182b3b4c62778a9eb4c0af9a85705a45301b000000000000000b20364b6074889db3b9c5bbb49f8c79644f39240f001f34495e74899eb3c9b9aca79f9f9fab9f97826d57422d18001e33485e73889da69f9f9f9fadb2bec2ad98826d58432e1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004101b22252a2b27211e160b0000000000000000000000000000000000000000000616242f35353535353535352b29211608000000000000000000000000000009151d3535353535353535353535353535353535353535353535353535353535352220190d00000000000000000f24394f64798ea4b9cebba6917c66513c2711121d17150f0500000000000000000006141f2628302d2321191f222a34373c494d5d687d92a8c7ccb8a78b75604b36200b001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f19000004121d2427272727272727272727272727272727272727272727272727272727272724221b10020000000000000000000000000000000b171e3037444b52576165686a6b6a6967646055534c463a33291b1204000000000000000000000000000000000000000000000000000000000d1f344759697f94a4b3a299846f59442f1a00000000000000081d314455677d919ea7aaaa9f95816c5c4a36220d001f34495e74899eb3b3b3b3b3b3b3b3b3ae99836f59442f1a0020354a60758aa6b3b3b3b3b3b3b3b3b3ad98826d58432e1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c0f10100f0d0800000000000000000000000000000c171f2e373a3f403d3632291b110300000000000000000000000000000000000000122434424a4a4a4a4a4a4a4a403d33261604000000000000000000000000091927314a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a342b1d0d000000000000000f24394f64798ea4b9cebba6917c66513c271100080200000000000000000000000000020b11131b141c202a34373a474c535a636d7b8a9eb4c9c8b39e89735645321d09001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f190000122330393c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c39362d201000000000000000000000000000000c1b2933414d5560676f767a7d7f807f7e7c79756f6861584c463a3022150700000000000000000000000000000000000000000000000000000005182a3b4b6074869c9e938477624d37220d00000000000000021527374d5f677d899295938b8073604b3e2d1b07001f34495e74899e9e9e9e9e9e9e9e9e9e9e99836f59442f1a0020354a60758a9e9e9e9e9e9e9e9e9e9e9e98826d58432e1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b161e2124252525221b100200000000000000000000000c1c29333e4b4f5455524b46392f2211020000000000000000000000000000000000071b2f42525e6060606060606056514433210e000000000000000000000001152737445e60606060606060606060606060606060606060606060606060606060605e483b2b19050000000000000f24394f64798ea4b9cebba6917c66513c27110000000000000000000000000000000000000312182630353b474c545961686f78828c9ea8b9ccc2af9a856f5a38281502001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f19000a1d30414d5151515151515151515151515151515151515151515151515151515151514e4a3e2d1b070000000000000000000000000c1d2a39464b5f67747d848a8f9395959594918e8a847e766b61584c40332516080000000000000000000000000000000000000000000000000000000d1d314455657b90897e7262594834200b0000000000000000091930414d5f67767d7f7d786b60554431201000001d33485d7287898989898989898989898989836e58432e19001f34495e7489898989898989898989898989816c57422d1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d283236393a3a3a372e2010000000000000000000000417293a464c5c64696a6761574c402f201000000000000000000000000000000000000a20354a5e70757575757575756b62513d29140000000000000000000000081d31445570757575757575757575757575757575757575757575757575757575757570594834200b0000000000000f24394f64798ea4b9cebba6917c66513c271100000000000000000000000000000000000a161e3036434b5059626970777d848c979fabb9c6c5b6a4937d68533e281300001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f19001024394d5f676767676767676767676767676767676767676767676767676767676767645c4a36220d00000000000000000000000b1b2a3b4757616e7d87929a9faaa8aaaaaaa9a6a99f9a93898076665e5044332616000000000000000000000000000000000000000000000000000000021527374b5d687e77686054483b2b1805000000000000000000122330414d5861676a68625a4b443726140200001b30445869727474747474747474747474746e6453402b16001c31465a6b747474747474747474747474746c63523e2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919263139464b4f50504f4b3e2e1b080000000000000000000a1f334658616f7a7f807c75665e4c3e2d1b07000000000000000000000000000000000b20354a60758a8a8a8a8a8a8a806b56402b1601000000000000000000000b20354b60748a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78624d37220d0000000000000f24394f64798ea4b9cebba6917c66513c2711000000000000000000000000000000000a1b2832404c5460666e777e858b939a9fabb4bcc9c4b7a79c8674604b36200b00001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f190012273c51677c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7a644e39240f00000000000000000000031729394759617583919da5afb4bbc8bfbebbbbc7bab4afa89e96887c6a625044331a0a00000000000000000000000000000000000000000000000000000009192e3f4e606861594a43362b1d0d00000000000000000000051323303a464c5255534d483c3126190900000015283b4b585d5e5e5e5e5e5e5e5e5e5e5e5e58534636231000172a3d4d5a5e5e5e5e5e5e5e5e5e5e5e5e5e57524535220f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b5761646565645c4b37220d0000000000000000081c2f3f4c6176838f949592887c665c4a36220a000000000000000000000000000000000b20354a60758a9f9f9f9f9f95806b56402b1601000000000000000000000b20354b60758a9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8c77624d37220d0000000000000f24394f64798ea4b9cebba6917c66513c271100000000000000000000000000000009192839454b5e66737b838b939a9fabafb4bcc9c9bcb4a69d897a645645311d0900001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f190020354a60758a9191919191919191919191919191919191919191919191919191919191816c57422d17000000000000000000000b1e33465761778699a1b2b7c3c4b8b3aca8a6a6a8acb1b6b9b4a69d8d806b625038281602000000000000000000000000000000000000000000000000000000112131424e534c473b3025180d00000000000000000000000005131c2933363d403e38342b1d1409000000000b1d2d3b4448494949494949494949494949434036281806000d1f2f3d4649494949494949494949494949423e3527170500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606b76797a7a7a644f3a250f00000000000000000e23384c5d6f8499a1a9aaa69e8b7a644f382815020000000000000000000000000000000b20354a60758a9fb5b5b5ab95806b56402b1601000000000000000000000b20354b60758aa0b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a28c77624d37220d0000000000000f24394f64798ea4b9cebba6917c66513c27110000000000000000000000000000021527374557606d7c8690999faaafb4bcc9c9c5b8b3ab9f97887a645c4a3827150200001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f190020354a60758a9fa6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a697816c57422d170000000000000000000b1b31414b6175869ca4b2bfc5b8b3a69e9793919192969ca4b1b5b7ab9f95806b5645321e09000000000000000000000000000000000000000000000000000000031424313b3e37342a1c13080000000000000000000000000000000c171f21282a282220190d010000000000000f1d2830333434343434343434343434342e2b23180a000001111f2a31343434343434343434343434342d2a22170900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4b607380898e8f8f836e58432e19000000000000000010263b50657b90a1b3bfc4b8a99a846f5645321d090000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5cacacad4cbc7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7b7a28c77624d37220d0000000000000f24394f64798ea4b9cebba6917c66513c27110000000000000000000000000000081d314455607582919ca4aeb4bbc8c9c7bab4aea79e968c8276645c4a3e2d1a0a0000001b30455b70859ab0c5c5b09a85705b45301b06000000071d32475c72879cb1c7c3ae99846e59442f190020354a60758a9fb5bcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcac97826c57422d170000000000000000031629394e5f6e8399a4b5c2c2b6a79e9288817e7c7c7d8187909ca4b0baa99c8775604b36210b0000000000000000000000000000000000000000000000000000000006141f2629221f180c000000000000000000000000000000000000040a0c1215130d0b050000000000000000000b151b1d1f1f1f1f1f1f1f1f1f1f1f1f1916100600000000010d171c1f1f1f1f1f1f1f1f1f1f1f1f1f17150f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c6d81959ea8a5907b65503b25100000000000000001162b41566b8096abbfd0d5c7b49f8a75604b36200b0000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5cae6d4c3b7b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2a28c77624d37220d0000000000000f24394f64798ea4b9cebba6917c66513c27110000000000000000000000000006192c3c4b60738398a0b1b6c2cac6b9b4ada99f99918981796d61584a3e2e2010000000001b30455b70859ab0c4c4b09a85705b45301b06000000071d32475c72879cb1c4c3ae99846e59442f190020354a60758a9fa7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a797826c57422d1700000000000000000a1e324657687d92a1b3c2c4b6a49c897d746c696666686c737b86969eac9f8a7a645645321e090000000000000000000000000000000000000000000000000000000000020b11130c0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031629394e64798c9fb4b29c8773604a35200b0000000000000002172d42576c8297acc8d8e0ccb9a78c77614c37220c0000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5cadfcbb7a59d9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c8c77624d37220d0000000000000f24394f64798ea4b9cebba6917c66513c2711000000000000000000000000000c2035495a6b8096a1b2becac3b7b2a89e98918a837c756c635b4c473a2e201002000000001b30455b70859aaeaeaeae9a85705b45301b06000000071d32475c72879caeaeaeae99846e59442f190020354a60758a9292929292929292929292929292929292929292929292929292929292816c57422d1700000000000000011426374b6175889eb3bfcbb7a69c86776860555351515354606674809097917d675c4a38281602000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0b0b0b0a050000000001080b0f1315161513100b0902000000000000000000000000000000000000000000000000000000000000050b0d10131516161614110e0c060000000000000000000000000000000000000000000000000000000000000000000000000a1e3246576c8297abbbaa947f6a5443301c070000000000000000152a3f546a7f94aabbcbcec2b39e8974604b35200b0000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caddc7b29d87878787878787878787878787878787878787878777624c37220d0000000000000f24394f64798ea4b9cebba6917c66513c2711000000000000000000000000000e23384d63788b9fb4bfcebdb1a59d9389837c766e6760564e493d332a1c100200000000001b30455b708499999999999985705b45301b06000000071d32475c7287999999999999836e59442f190013283d52687d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7a644f3a250f00000000000000081d3144556a7f94a6b8cbc0b29d887762594b44373c3c36434a55606b7b817d675f4d3d2d1a0a00000000000000000000000000000000000000000000000000000000000000000002080b0e12141616161513100c0a0400000000000000000000000000000000000000020c121420202020201a0b090509141d2024282a2b2a2825211e160a0900000000000000000000000000000000000000000000000001080b10181f2225282a2b2c2b292723211a110b070000000000000000000000000000000000000000000000000000000000000000000c21364b6176899eb4b49f8b77624c3625130000000000000000000e23384d63788b9fb2b7bab4a496816c5443301c080000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e797272727272727272727272727272727272727272625948341f0b0000000000000f24394f64798ea4b9cebba6917c66513c271100000000000000000000000000152a40556a7f95aabbcebfb19f97877e766e676157524b4538362c1f180c00000000000000162b41566b80848484848484806b56412b160100000002172c42576c818484848484847f6a553f2a150011253a4e5f686868686868686868686868686868686868686868686868686868686868645c4b37220d000000000000000b20354b6074879db2c4c8b4a2917c6759483b31262727253037444b5d656c675f4d41311f0f0000000000000000000000000000000000000000000000000000000000000001080b151d202427292b2c2b2b2926221f180d0b0600000000000000000000000000000006141f2629353535353530211e18202631353a3d3f403f3e3a363228231c110700000000000000000000000000000000000000000409141d20262a34373b3e3f4041403f3c38352c26201c1308000000000000000000000000000000000000000000000000000000000000071a2d3d53687d92a8b9ae99836e59473418080000000000000000000c2035495a6a7f929da6a99f988676614c362614010000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79635d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d4c483b2a18050000000000000f24394f64798ea4b9cebba6917c66513c2711000000000000000000000000061b30465b70859bb0c8c7b3a1978175686157514b4639363228211a100e080000000000000014293d51626b6f6f6f6f6f6f6b62513d29140000000000152a3e52636c6f6f6f6f6f6f6a61503c2813000b1e31414e5252525252525252525252525252525252525252525252525252525252524f4b3e2e1b080000000000000010263b50657b90a5b7cbc7b09a85705f4d3b2b1d141111131c27313f4b5057524d413123130100000000000000000000000000000000000000000000000000000000000008141c20273136393c3f404141403e3b37332a2320190e07000000000000000000000000021424323b3e4a4a4a4a4a4536322b3437444b4f53555555534f4b4538382f211a0f0100000000000000000000000000000000020c171f2631353b3b474c50535556565554514e493d3b353025181305000000000000000000000000000000000000000000000000000000000c21364a5b70859bb0b7a5907b66503b2a180000000000000000000006192c3c50616a7d888d8e8a8276615847331808000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e47474747474747474747474747474747474737342a1d0d000000000000060f24394f64798ea4b9cebba6917c66513c27110f0f0f0f0c0a030000000000081e33485d73889db2c8c3ae99836e60564b4639363228201f212a2d26231c110300000000000e213444515659595959595956514434210e00000000000f223545525759595959595955504333200d00011323313a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3a372e20100000000000000002152838576c8196acc3cdbaa9927d685240301d0d0100000009151d2f383b423c3930231305000000000000000000000000000000000000000000000000000000000008131c26303537444b4e52545556565553504c473a38352b221b1002000000000000000000000c1f32424f53606060605f5a4b453b484d556064686a6b6a68656056504c40362d1f140600000000000000000000000000000a151d2a3337444b5057596265686a6b6b6b6966635b58504a43363020190d0000000000000000000000000000000000000000000000000000021628384e63798ea3b5b29d8774604b35200d00000000000000000000000e1e3343506068737879766d6158473a291700000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e393232323232323232323232323232323232221f180d0000000000000e192024394f64798ea4b9cebba6917c66513c272525252525211e160b000000000a1f344a5f74899fb4c9baa5907b655045383228211e202a33373f433b382f21110000000000041626343d41444444444444413d342616040000000000051727353e424444444444443f3c3325150300081c2f3f4c5050505050505050505050505050505050505050505050505050505050504e493d2c1a06000000000000091d32455671869bb1c6c9b49f8a76614b36211200000000000002111c23252c27251e130500000000000000000000000000000000000000000000000000000000000d18253036434b5155606367696b6b6b6a68656158564d483c372e1e160a00000000000000000012263b4f606975757575756f60574d59626c747a7d7f807f7d7a756e665e4e4a3d31241507000000000000000000000002101a28323a474c5560656c72777a7d7f8081807e7c78736d6660544d41342b1d1002000000000000000000000000000000000000000000000000091e3245566c8196acbbaa957f6a5443301c08000000000000000000000000152533414e5460636461574c473a2a1c0c00000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39241d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d0d0b05000000000006131e2c35383a4f64798ea4b9cebba6917c66513c3a3a3a3a3a3a3632291b0b000000091e33485e73889db3c8b9a38e79644e392c2827282b343a474c5558504c3f2f1e0e0000000000081621292b2f2f2f2f2f2f2b29211608000000000000000917222a2c2f2f2f2f2f2f2a2820150700000e23384c5d656565656565656565656565656565656565656565656565656565656565635b4935210c0000000000000b20364b60758a9fb4cac6b09b86715746321e090000000000000000080e101712100a0100000000000000000000000000000000000000000000000000000000010f1d2b36434a5460666f75797c7e808180807e7b77716b625a4f4b3e32281a0e000000000000000014293e53697e8a8a8a8a8a8475605f677781888f92949594938f8a837b70645c4e42332515060000000000000000000614202d38454b58616a747b81878c90939495969594918d88827b73675f4d483b2e20100200000000000000000000000000000000000000000000000b21364b6075899eb3b49f8b77624d362614010000000000000000000000000715233136434a4e4f4c4639332a1c0c0000000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e08080808080808080808080808080800000000000000021324313c494d4f4f64798ea4b9cebba6917c66514f4f4f4f4f4f4f4b46392916030000061b31465b70869bb0c5bda8927d6857493d3d3c3d3c484d58616a6d655d4c3c2b19050000000000040e14161a1a1a1a1a1a16140e04000000000000000000050f15171a1a1a1a1a1a15130d0300000010263b50657b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b79634e38230e0000000000000e23384e63788daabbcec1ac97826c573928160300000000000000000000000200000000000000000000000000000000000000000000000000000000000000010f1f2d3c48546068737c84898e91949596969593908c8780786e645c4b45382b1e0e0000000000000014293e53697e939f9faa9f917c676c7d89969ea7a8aaaaaaa8a99f99908579686050433324140000000000000000071524313e4a56606a767f8890979ca4a5a8aaababaaa9a6a79e9890867c6f62594b3e2e201000000000000000000000000000000000000000000000061a2c3d52677d92a7b9ae99846e5948341808000000000000000000000000000005131825303538393633291f170c000000000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000b1e31424e5a63646464798ea4b9cebba6917c666464646464646464615746321e0a000000162b40556b8095aabec7b29c8775635b55525153565a626b777f827b655a4835201200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020354a60758a9090909090909090909090909090909090909090909090909090909090816c57422d1700000000000010263b50657b90a5c8d8bea9947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3d4a5a62727e8791999ea8a7a9aaababaaa8a5a49c958c837a6b6056483c2b1d0d00000000000014293e53697e93a8b5bbaa947f7481929ea7b3b8c5bcbfbfc7bab4aea29a8b7e6a625042311f0e00000000000000152533424e5c64747f8a959da6acb2b6c3bdbfc0c0c0bec5b8b3ada49c918478645c4b3e2e1d0d0000000000000000000000000000000000000000000c2135495b70859ab0b7a6917b66513b2b18000000000000000000000000000000000a161e212727272727201d1409000000000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000011263a4e6068787a7a7a7e92a7bdd2bea9947f7a7a7a7a7a7a7a7a7a75614b36210c0000000f24394e64798ea0b2c5b6a59b85796f6a6767686b7078808994988a78624d402f1d090000000000040a202020202020202020202020202020202020202020202020202020200e0c0600000000000020354a60758a9fa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a597816c57422d1700000000000012273c51677c91a6bcd1bda8937e68533e2913000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2c3d4a5b637884939da5aeb4b9c6bec0c0c0bfbdc2b6b1ab9f998c8074625a483b2b1b0b000000000014293e53697e93a8bec1ac978181969fb3b1aaa8a6a7a9afb4bbc8c0b4a99f93806a604e3d2c1a060000000000081833435060687a86949ea8b3b7c4c7cac5bfbcbbbabbbdc1c7c8c2b6b1a29a897a645c4b3c2b190500000000000000000000000000000000000000021527384e63788da2b4b29d8874604b35200d0000000000000000000000000000000a1a2832363c3c3c3c3c35312619090000000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000013283d53687e8d8f8f8f929cadc0d5c2ae9d948f8f8f8f8f8f8f8f8f7a644f3a250f0000000d21364a5c6e8398a7b8c3b5a39b8c847f7d7c7d80858c959ea8a899836e5e4c38240f000000000c181f3535353535353535353535353535353535353535353535353535353523211a0f010000000020354a60758a9fb5bababababababababababababababababababababababababaac97826c57422d1700000000000012283d52677d92a7bcd1bca7927c67523d271200000000000000000000000000000000000000000000000000000000000000000000000000000000000002162838495b6379889aa2b2b6c3c9c5c6b9b4b2b2b4bbc8c6c9bcb4ab9f9686786259483a2917040000000014293e53697e93a8bec9b49f8a969faea39b95929192949a9faab2bec7bab49e937e685b49352113010000000114263650616a7e8b9ca4b4b9c6cbc8bbb4b0aaa7a6a5a6a8acb2b6c3c9c0b4a79e8a7b645a4834201300000000000000000000000000000000000000091d3145566b8096abbcab95806a5544311d08000000000000000000000000000003162838454b51515151514b443726140100000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000192e43586e8398a4a4a4a7adbacadccbbbaea9a4a4a4a4a4a4a4a48f7a644f3a250f000000071a2d3d4d6278899ea8b6c1b5ab9f9a94929192969b9fabb4b9b5a1907b66513b26110000000c1c2a334a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a38352c1f0f0000000020354a60758a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a897826c57422d1700000000000012273d52677c92a7bcd1bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566379889da6b3c0cac0b4b0a7a89e9d9d9faaa9b1b6c2c9bcb4a49c8777625846331f100000000014293e53697e93a8becdbaa99fa9a1998e86807d7b7d7f848b98a0adbacdbcb49f8b79634e41301e0a000000081c3043546a7f939fa9b6c3cdc5b8b3aa9f9a9592908f9192979ca5b1b5c2c5b8a89e8978624d413018080000000000000000000000000000000000000b20364b6075889eb3b49f8b78624d372614010000000000000000000000000000091e324556606767676767605544311d0800000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000192e43596e8398aeb3b7c4c7cad4e1d9cbc2beb9b9b9b9b9b9b9a48f7a644f3a250f000000000f2034485a647a8a9ca4b3b8bcb4afaaa7a6a8abb0b5bcb5ab9f978577624d37220d000004182a3a475e6060606060606060606060606060606060606060606060606060605e493d2c1a0600000020354a60758a9393939393939393939393939393939393939393939393939393939393816c57422d1700000000000011273c51667c91a6bbd1bda8937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4b6074869ca6b8c5c5b8b3a29a928c8988888a8d949ca4b4bac6c2b6a59c8676614c3e2d1b0700000014293e53697e93a8bed7c7bab49d948379716b6866676a6f7782939cadbbcdbaa99a84705f4d39250f0000000b20354b6074869babbac7c8bbb4a69e958b85807d7b7a7b7d8187909ca4b2bec6b8a79a84705f4d362513000000000000000000000000000000000006192b3c51677c91a6b8af99846f5a483519090000000000000000000000000000000b21364b60747c7c7c7c7c73604b35200b00000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000192e43596e83979a9da6a3b2b7c3d4cbbbaea9a4a4a4a4a4a4a4a48f7a644f3a250f0000000005192b3c4a5c647a86959ea7adb3b7c4b9bac7bab4afab9f988d817462594834200b00000a1f33475870757575757575757575757575757575757575757575757575757575705b4935210c00000013293e53687e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7b654f3a251000000000000010253a4f657a8fa4c5d6bfaa947f6a553f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b6b8196a4b6c4c4b7a79e91857d7774727374787e86939fa8b8c4c3b6a496816c5c4a36220f00000014293e53697e93a8bed3c3af9e947f6f635b555351525459626e7e939dafc2c7b4a2927d67523d2d1a070000081c304354647a8c9fb4c2b6aa9f95887f77706a67666566686c737b8698a0b2c0c5b4a2927d675443301c07000000000000000000000000000000000b2035495a6f849aafb8a6917c66513c2b19000000000000000000000000000000000e24394e63798e9191918d78624d38230d00000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000012273c51677d8285888b8e9da5b7cac2ae9d948e8e8e8e8e8e8e8e8e7a644f3a250f00000000000d1d2d3e4a5c6475808892989da6a3a4a5a4a99f9a948c83796c6056483b2b180500000c22374c61778a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a79634e38230e00000011263a4e60686868686868686868686868686868686868686868686868686868686868655d4b37230e0000000000000d22384d62778da7b9ccc2ad98826d583b2a1805000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4e63798c9fb4c2c7b7a69d897c706861595d5d5b6369747e8a9ea6b8c8c2b49f8c7a644f3d2c1a06000014293e53697e93a8bed3bfaa95806a614e493d3d3c3d3b484c606a7f94a4b5c9c0b09b85705b4a36210c0000011426364a5c6c8197a6b4a49c8c80766a6159555251505153546065748298a2b4c9c0b19c8673604a35200b000000000000000000000000000000011426374d62788c9fb5b39d8874604b36200e0000000000000000000000000000000010253b50657a90a5a6a5907b65503b261000000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000001024394d5f676d7073767a879db2c7bea9947f79797979797979797a75614b36210c00000000000010202d3e4a56606a757d83888c8d8f8f8e8c89857f786e635b4b45382b1d0d0000000c22374c61778c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8d78634e38230e0000000b1f31424e5353535353535353535353535353535353535353535353535353535353534f4b3f2e1c080000000000000b20354a6074899eb3c9c6b19c86715947341f090000000000000000040a0c0f0b07000000000000000000000000000000000000000000000000000c2135495b6e8398abbccdbaa99d8778665e524c473b3c494d5560687a889eaabbcebcab9a84705b4936210c000014293e53697e93a8beccb7a28c77624d43352c2826282b34424b6073869cb1c5c9b5a38e79634e39240e00000008182d3e4c6176889d9e96867a6b61574c473b3d3b3a3c36434a566074849aabbccab6a4907b65503b2510000000000000000000000000000000081d3144556b8095abbcab95806b5544311d080000000000000000000000000000000012273d52677c92a7bca8937e68533e291300000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000a1d30404d51575a57616f8499aec4bba6917c666464646464646464615746321e090000000000000210202d38454b5760686e7376787a7a797774706a635b4e4a3d32281a0d000000000c22374c61778caabbb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a38d78634e38230e000000021424313a3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3a372e211100000000000000071c3043546f859aafc4cab49f8b77624c372715010000000000030c181f2224201c130800000000000000000000000000000000000000000000011426364e63788c9fb4c9c3b49f8b79635a4d4037342a2c3537444b5c657b8b9fb4c9c9b4a28e79634e39230e000014293e53697e93a8beccb7a28c77624d37221a1311121820314455667c91a7b8ccc1ac96816c573c2b1906000000101f334658647a87898175645c4c4639342a28262526253038455564798c9fb5cac2ac97826c573a2a170400000000000000000000000000000b20354b6074889db2b59f8c78634d372715020000000000000000000000000000000014293f54697e94a9beab96816b5637271501000000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000122230393c423946566b8096abc0bba6917c66514f4f4f4f4f4f4f4b463928160300000000000000010f1a283239454b5358586163646564626054554e493d362d1d150a00000000000b20364b60758a9fb4c9cad6c6b9b4b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1a38d78634e38230e0000000006141f2629292929292929292929292929292929292929292929292929292929292925231c11030000000000000000132536546a7f94a9c1cebbaa937e695544311d12070000040b161e2a3437393530251808000000000000000000000000000000000000000000081c3043546b8096abbccbb7a5947f6a5b4a3c30221f18192126313e4b5d6c8196abbccfc0a9947f6a543f2a15000014293e53697e93a8beccb7a28c77624d37220d000000051527374b6075899eb3c8c7b29d87725a4935200b0000000417293a4a5c6472746b60574a3e33291f1812111011131c28374a5c70859bb0c5c7b29c87725847331f0a0000000000000000000000000005182b3b51667c91a6b7af9a846f5a493519090000000000000000000000000000000001162b41566b8096abc0ae99836e5544311d14080000000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b1601000000000000000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000004121d24272d293d52687d92a7bdbba6917c66513c3939393939393632281b0b000000000000000000000a161e2832363d3a474c4e4f504f4d4a433638352c211a0f02000000000000091d31455670859aafbdcdcdb9a89e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c8d78634e38230e0000000000020b11131313131313131313131313131313131313131313131313131313131313100e08000000000000000000000e23384e63788da3b4c8c8b19c8674604b3f2f221b1817171f28323a474c4f4a433625130000000000000000000000000000000000000000000b20354b6074889db2b7c0b29d8774604b3d2d1e120b040609141d2e3f4d62778b9fb4cac4af99846f5a442f1a000014293e53697e93a8beccb7a28c77624d37220d00000000091d3144556d8297adc2cab7a58d78624d38230d000000000c1c2d3e4a4f5460544b45392d1e170b0400000000000a192d3e556a8095aabfcab6a58c76614c37210c000000000000000000000000000b203448596f8499aeb8a7917c67523c2c19000000000000000000000000000000000002182d42576d8297acc2b39e8874604b413026180d00000000000000000000000000000b20354a60758a9fb5cac0ab95806b56402b160f0f0f0f0b0801000000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000a101218253a4f647a8fa4c4bba6917c66513c272424242424211e160b000000000000000000000000030a161e21282a3337383a3a393735302523211a0e0700000000000000000215273850657b909fb0c1c9b49e8a86878787878787878787878787878787878678624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b70859bb0c1cab6a4947e695d4c40372e2d2c2a3339464b596164605443301c1301000000000000000000000000000000000000000e24394e63798b949da5a8a2927d685645321f0f000000000001112034485970869bb0c5c7b29d87725d372715010014293e53697e93a8beccb7a28c77624d37220d000000000215273753697e93a8bed4c3a6917c66513c2711000000000010202d3636434a433632281b1003000000000000000013283d53687d92a8bdd3c3a48f79644f3a240f000000000000000000000000011426364d62778b9fb4b39e8875604b36200e000000000000000000000000000000000002172d42576c8297acc4b8a7947f6a604b43362a1d110300000000000000000000020b1120354a60758a9fb5cac0ab95806b56402b2525252525201c14080000000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000c21364c61768ba6b7bba6917c66513c27110f0f0f0f0c090300000000000000000000000000000003090b13171f212325252422201c130e0c0600000000000000000000000a23374b5d6c8196a3b5c5b49f89797272727272727272727272727272727272625a4935200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d51667c91a3b4c8c2b49f8a7b665e4f4b3e42413a474c57616b777972604a42311f0f000000000000000000000000000000000000000c21364a5b63777f878f93908473604b3828150100000000000005182b3b576c8297acc1c9b49f8a745544311d080014293e53697e93a8beccb7a28c77624d37220d000000000010253a50657a8fa5bacfbfaa957f6a55402a15000000000002101b2225303530251e160a0000000000000000000012273c51677c91a6bcd0bba6907b66513b2611000000000000000000000000081c3043546a7f95aabbab96816b5645321d0900000000000000000000000000000000000013283e53687d93a6b7c5b49f8d7e6b6054473b2e211306000000000000000006141f26292a4a60758a9fb5cac0ab95806b56403a3a3a3a3a3a353026180800000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000a1f33465873889db3bba6917c66513c27110000000000000000000000000000000000000000000000000000040a0c0e0f100f0d0b07000000000000000000000000000000081c2e3f4b6074859ba7b8baa99c8675615c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4d493c2b1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f20354a6072859baabbcdbaa89e8a7c6e645c5957575858616975808a8e816d604e3d2c1a06000000000000000000000000000000000000071a2d3d4a59616a747a7d7b73605544311a0a0000000000000000162b40556b8095aac0cdbaa98a75604b35200b0014293e53697e93a8beccb7a28c77624d37220d00000000000d22374d62778ca2b7dac1ac97826c57422d17000000000000000708131c201c13080300000000000000000007101d2c3c53687e93a8bdd1bca6917c67513c27120000000000000000000000000b20354b6074879db2b4a28e79634e382815020000000000000000000000000000000000000c21364b6175879da9b9bcab9f92807262594b3f31241406000000000000041424313b3e3a4760758a9fb5cac0ab95806b564f4f4f4f4f4f4f4b4336261401000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000417293a5a70859aafbba6917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111d3145566278899eabbcb6a498826e604e3e47474747474747474747474738352b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435463798b9fb4bcc6b9a89e90837a726f6d6c6d70767e88959f9f927e685b4936210c000000000000000000000000000000000000000f1f2d3a474c5460646866605544372614000000000000000000172c41566c8196abc1c9b49f8a745544311d080014293e53697e93a8beccb7a28c77624d37220d00000000000c21364b61768babbccfc3ae99846e59442f1900000000000000000000070b07000000000000000000060b0f1a212e3b495a6d8398adc2dac9a6917b66513c2611000000000000000000000004182a3b50667b90a5b7b09a85705b49351a0a000000000000000000000000000000000000000a1e334657657b8b9ea7b5bcb49e958477655d4e42312414040000000000122231424e535b5861758a9fb5cac0ab95806b6464646464646464605443301c08000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000172c42576c8197acbba6917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152738485a667c8d9fb5c0b2a0937e685c4a3a29323232323232323232322320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364a5b697e939eb4bcc6b9b4a0988f8784828182868a949da6b4b49f8a79634e39230e00000000000000000000000000000000000000010f1c2a3436434b4f53514b4437261909000000000000000008182d3e586e8398adc3c8b39d88735e372715010014293e53697e93a8beccb7a28c77624d37220d00000000000b20354a60758a9fb5cac4af9a856f5a45301a00000000000000000000000000000000000000070d0f1920232d363f4b5963788b9fb4c9cfbcab8f79644f3a240f00000000000000000000000b1f3447596e8398aeb9a7927d67523d2c1a0000000000000000000000000000000000000000031729394b5d657c899ca4b2bcb0a29a887b68604e4231221200000000091d2f404e60687074777a8fa4b9cec2ad98827a7a7a7a7a7a7a7a7a72604b35200b000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000014293e53697e93a8b3a6917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3c4c5e6b8096a2b4beb49f8b7a645846331f1d1d1d1d1d1d1d1d1d0d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182d3d4e606b80949fabb6c3beb2ada59d999796989b9faab3b7b8b39f96816c56412c170100000000000000000000000000000000000000000c181f2630353a3e3b353126190900000100030a0c0e111826364a5c72879cb2c7c5af9a85705a45301b000014293e53697e93a8beccb7a28c77624d37220d0000000000071c30435474899fb4c9c5b09a85705b45301b00000000000000000000000000000000050b0f1a21242b35383d4a4e5d6577869ca9bacdcab59f8b76614c37210c00000000000000000000000c22374c61778b9fb4b39e8975604b36210f0000000000000000000000000000000000000000000b1b2e3f4c5d65798698a0b4bcb4a69d8c7e68604e402f1c0c0000000f24384c5e687e85898c8f98aabdd1c5b2a0988f8f8f8f8f8f8f8f8b76614b36210c000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000010253a4f657a8f9e9e9e917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2f404b6073849aa6b8baa99d8776614c43322010000707070707070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f314251626b7f8d9da5b3b7c4c3b7b2aeacacadb0b4bbb9b4a69e918173604b35200b000000000000000000000000000000000000000000000408141c20252826201d14090006101618161e2123272e36435464798ea5b6cac0ab95806b56402b16010014293e53697e93a8beccb7a28c77624d37220d00000000000b20354a60758a9fb5cac4af9a856f5a45301a0000000000000000000000000000090d181f222d36393c494d545b636d7a879ca4b6c7d4c4b19c86715847331f0a00000000000000000000081c2e3f54697f94aabbac96816c5645321e090000000000000000000000000000000000000000000010212f3f4c5b637582949fabb9b7aa9f927e685e4c3a2a1804000011263c51667c919b9ea7a4aab6c7d9cfbeb2ada4a4a4a4a4a4a4a08b76614b36210c000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000000000000000000e22374b5d6c81888989897c66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121d3144556277889eabbcb6a599836e614f3f2e1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011424344451616a7b87949da6acb1b4bcc9bab9c4b8b3aea89e95887d6c605544311d0800000000000000000000000000000000000000000000000001080b0f13110b0801000a18232b2e293236393c3f4b5460728399aec3c8b4a28e79634e39240e000014293e53697e93a8beccb7a28c77624d37220d00000000000c21364b61768babbccfc3ae98836e59432e1900000000000000000000000007121c232a34373e4a4e555a62697179828c9ca5b6c2d3cbb7a6947f69543a291704000000000000000000000e23374b5d72879cb2b4a38e79634e38281603000000000000000000000000000000000000000000000311212f3c4957606d7f8d9ea8b9bbb49f8d7c665947341f0c000014293f54697e94a9b3b9c5bdc7d4e4d9cbc1beb9b9b9b9b9b9b6a08b76614b36210c000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000081b2e3f52636c73747474665e4c38240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374859657b8d9fb4c0b3a1947f695d4b3a2a18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000616263443505d65757e8890979c9faba4a5a4a3a69d9892898076675f4b4437271501000000000000000000000000000000000000000000000000000000000000000000061828353f4339464b4e51565d65738196a1b3c7bbaa9a85705b4a36210c000014293e53697e93a8beccb7a28c77624d37220d00000000000d22384d62778da2b7dac2ac97826d57422d180000000000000000000002101b222f383b484c545c646a71787e868e989fabb6c3d3cdbdb39d8875614b36210c000000000000000000000417293a50657a8fa4b6b09b85705b4a361a0a00000000000000000000000000000000000000000000000003111e2c39454b61697c8a9eaabbbcab9d8877614c3a2a170400142a3f54697f94a4a4a4a4a9b6c7d9cbbaaea8a4a4a4a4a4a4a4a08b76614b36210c000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000001021344552575e5e5e5e514c402f1d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3b4c5d6a8095a2b4bfb49f8c7b64584736251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081625333f4c566069747b82878a8d8f8f8f8e8b88837d766b61584d4131271909000000000000000000000000000000000000000000000000000000000000000000001023354653585e576163666b727a84969fb0bfbcb49f8b79634e3d2d1a07000014293e53697e93a8beccb7a28c77624d37220d000000000011263b50667b90a5bbd0c0ab96806b56412b160000000000000000000614202d36404c50596269727980868d949ba3adb4bcc9d3cebeb09f927d675746321e0a000000000000000000000a1f3347586d8298adb9a8927d68533d2d1a0000000000000000000000000000000000000000000000000000000e1b2832434f5e667c8c9fb4c3b8a696816c5847331f0a00142a3f54697f8e8e8e8e8e98a9bdd1c1ae9c938e8e8e8e8e8e8e8e8b75614b36210c000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000000021727343e42494949493b382f2212000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f3f4b6072849aa6b7bbaa9d8776615443301c11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000715212f38454b5560666c727578797a7a7976736e6861574c473a301d15090000000000000000000000000000000000000000000000000000000000000000000001162b3f53646d747476787c80878f9aa2b0bdb7ab9f937e695b4a361f0f00000014293e53697e93a8beccb7a28c77624d37220d0000000004172a3a54697e94a9bed6c5a7927d67523d27120000000000000000081624313e4a4f5e666e777f878e959ca4a9b0b5c1cacfcfc7bab4a096816c5f4d39291603000000000000000000000c21374c61768a9fb4b49e8975614b36210f000000000000000000000000000000000000000000000000000000000a161e32404c5e6a8095a5b7c4b49f8a76614c37210c000d22374c6277797979797a8ea4b9cebea8937e79797979797979797a75604b35200b000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000000000917222a2c3334343426241d12040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111c3043546277889daabbb7a6998372604a3f2e1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111a283237444b515756606364656463615859524b463933291c1301000000000000000000000000000000000000000000000000000000000000000000000003182e43586d82898a8b8e91969ca4b0b4b8b3a69d8d7f6a604f3d2d1a0100000014293e53697e93a8beccb7a28c77624d3a2a1d11070006101f3347586f849aafc4ccb9a78d78634d38230e0000000000000006162633424e5c64707b838b949ca4aab1b5c2c6c9d2ccc8beb2a99f938272604b41301b0b00000000000000000000081b2e3e54697e93a9baac97816c5746321e0900000000000000000000000000000000000000000000000000000000000315222f404b6074879db2c7baa8927c67523d2712000b1f3447596264646464758a9fb5d8bba5907b666464646464646464605443301c08000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000050f15171e1f1f1f110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364759657b8c9fb4bfb3a1947f6a5d4b3b2a190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2731353b38454b4d4f504f4e4c463a3d3633291f170c00000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f84999fa9a3a6abb1b6b9b4a69e94887c6a614f42321f0f0000000014293e53697e93a8beceb9a48e7a6459483b2e201c1319212d3e4c61778b9fb4cac9b39e8973604a35200b00000000000000132433445160687a8490999faab1b6c2c6c9d2cfcac5b8b3aba0988b7e6d60544330231300000000000000000000000d22374b5c71869cb1b5a38e79644f3928160300000000000000000000000000000000000000040a0c0e0c06000000000004121d3144556a7f94aabfc6ad97826d58422d180005182a3b474c4f4f4f60758aaabbcebba5907b66504f4f4f4f4f4f4f4b4336261401000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3b4b5d6a7f94a1b3bfb49f8c7b6559483726140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000309151d2026273136383a3a3a3936332928211e170b040000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8499aebac7bbc0c7b9a89e92887f75665e4f43322414010000000014293e53697e93a8bed3c7b29c877762594b3f3530252c353e4a5c6b8196aabbcec3ad98836e5443301c070000000000000e1e314251626b7e8b9aa2aeb4bbc8cad3cfcac9bcb5afa79e968e837869604b433626140500000000000000000000031729394f647a8fa4b5b09b86715c4a361b0b000000000000000000000000000000000000000c171f2123211a0f05000000000215273750657a8fa5bac5b09a85705b45301b00000d1d2a343739394a5f748a9fb4c9bba6917b66513c393939393939353026180800000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2e3f4a60728399a5b7bbaa9d8877625544311d120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b11151d202324252524211f17130c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8499adb0b4b9c6c7b49e897d746a61574c4032251506000000000014293e53697e93a8bed3cab6a59c8677655d4f4a43363c494d5c647a8b9fb4c8cbb7a5907b655036251300000000000005192b3c4e606b80939faab4c0caced2c9c9bcb5b0ab9f9a928981796e635a4f423026180800000000000000000000000a1e3346576d8297acbaa8937e68533e2d1b00000000000000000000000000000000000002101c2a333739352c1f180d040000000e23384d63788da2b8c7b19c87725c47321d0000000d181f222433485e73889db3c8bda7927d68523d282424242424201c14080000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111c3043546176879daabbb8a69a8473604b402f1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e0f100f0e0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f8497989a9ea8aab2b6a89e8c83796b60554538281602000000000014293e53697e93a8bed3d3c3b5a49c877b6d646054595b5b636b7a899eaabbcec1b29d8773604b35200b0000000000000b2035485a687e929eb4bbc8d1d1c8c2b5b1ab9f9a938c857d756c635b4d493c321c14080000000000000000000000000c21364b6176899eb4b49f8a76614c36211000000000000000000000000000000000000010202e3a474c4e493d342a1f17100f0f1523384e63788da3b8c7b29d88725d48331d00000000050b0d1c31475c71869cb1c6c0aa95806b553d2d1a1716140f0b0801000000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364758647a8b9fb4bfb4a295806b5e4c3c2b1909000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687e828385898d949ca4b4aa9f988c8073605645321e12000000000014293e53697e93a8bed3cbbbaea9a69d8d827a74706f707278808c9ea7b8c8c7b4a3937e685443301c08000000000005192b3c4d62788b9fb4bcced6ccc0b4afa49c948c857e77706760564e493d352c1e1401000000000000000000000000071b2d3e53687e93a8b9ad97826d5746331e0a00000000000000000000000000000000000a1a2e3e4a5861635b4c483b332926242427314252677c91a7bcc5b09b86705b46311b00000000000004192e43596e8398aec3c5b09a85705b4a382e2c2b2a24221b10020000000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000000000050b0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a4b5c697e94a1b2c0b59f8d7c665a48372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263a4e60686c6e7074787f87939ea8b4aa9f968474604b413018080000000014293e53697e93a8bed3c2ae9d949faa9f988f89858485878d969faab8c5c8baa99b8573604b3626140100000000000b2035485a6d8298a9bacdd6c6b9b4a29a90867f7770696259524b4538352c20190e00000000000000000000000000000d22364a5c71869bb0b5a48f7a644f3929170300000000000000000000000000000000021527384a5c6476786e62594c463a3b393a38454b606f849aafc4c3ae99846e59442f190000000000000013293e53687e93a8bfc8b4a28e7963564b3f41403f3a362d20100000000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000000000d181f22232323232323232323232323232323232323232323232323232323211a0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4f616e8399a5b6bcab9e8978625544311d12000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0f0f0b080b1e31424e5357585460636a747e8a9ea9bab4a298826e5f4d3625130000000014293e53697e93a8bed3bea9947f8c9fa8ada79e9b999a9da5abb4bbc8c6b9aa9f8b7a6454433018080000000000000d22384d62788c9fb5c7d6c6b9a89e92847b71696259544d483b363228211a0f060000000000000000000000000000031628394e64798ea3b5b19c86715c4b371b0b0000000000000000000000000000000000091d314556647a8a8e83776a615853504f4f5156606a7e93a2b4c7bfa9947e69543f2914000000000000000e23384d63788da1b3c7c0b09b8574645d585755544f4a3e2d1d0d00000b20354b60758aa0b5caceb8a38e79634e39240e00000000000000000000000000000000000000000000000d1d2a3437383838383838383838383838383838383838383838383838383838352c1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e0e0e0e0e0e0e102032434c6176879da9bab8a79b8574604b40301e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1214171e212424201d141324313a3d4236434a4e5560697b8b9fb4c0b2a0917c675443301c0700000014293e53697e93a8beccb7a28c787c8a9ba3b4b3b0aeb0b2b6c3cac7bfb3a89e8c7d675c4a3626140000000000000014293f54697e94abbccfccb9a89e8a7d70655d544d483b37342b211e160a0600000000000000000000000000000000091e3245576c8197acbaa9937e69543e2e1b000000000000000000000000000000000006192b3c4b6074869ca098897f766e69656464666b74808d9fb5c0c7b3a18d78624d38220d000000000000000c2135495b6f8499afbdc9b5a39b857a726e6c6b69645c4a3b2a1805000b20354b60758aa0b5caceb8a38e79634e39240e0000000000000000000000000000000000000000000005182a3b474c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e493d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000008131c2023232323232323232323334658647a8b9fb4beb4a396816b5e4d3c2c1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f2729293336393935312619131e26282d25303537444b5d697f94a7b8beb29c8773604a35200b00000014293e53697e93a8beccb7a28c77667a85949fa8b0b4bac7bac3b7b2aca199897c675f4d3d2d180800000000000004192e43596e8398aec9d5c4b39e8a7a685f504b3f37342b2220180d09020000000000000000000000000000000000000b21364b6075899eb3b49f8a76614c37211000000000000000000000000000000000000b2035485a6a7f95a4b2a89e948a837e7b79797c8188959fabbccdbaa999836e5a4835200b0000000000000006192c3c4f647a8f9fb0c0c1b5a39b8f878381807f7a645948341f0b000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000b1f344759626363636363636363636363636363636363636363636363636363635b4935210c0000000000000000000000000000000000000000000000000000000000000000000000000000081825303538383838383838383838383a4a5c687e93a0b2c1b09e917c665a4938281502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031424323b3f39464c4e4f4b44372a1d0c111317131c2026313f4b6075889eb3c8b6a48f7a65503a251000000014293e53697e93a8beccb7a28c776264737f8a949a9fa9a4a5a4a59d978e8378665e4d41301f0f00000000000000071c31475c71869cb1c6cbb7a6927d675c4e41372f2220180d0b050000000000000000000000000000000000000000061a2c3d52687d92a7b9ad98826d5847331f0a00000000000000000000000000000000000d23384d6278899fb3b9b9b3a99f9893908e8f91969da6b5bcc9bcb49f8b78624d3c2b190500000000000000000e22374b5c6c8196a2b1bec2b5b1a59d989695948d77624c37220d000b20354b60758aa0b5caceb8a38e79634e39240e000000000000000000000000000000000000000000000d22374c6277787878787878787878787878787878787878787878787878787879705e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000132536434a4d4d4d4d4d4d4d4d4d4d4d4d4d4d606d8298a4b6bcb39e8978625645321d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32434f5459576164646055473b2a1804000000070b141d3245566e8398adc3c3aa95806b55402b1600000014293e53697e93a8beccb7a28c776255606a767f858a8d8f8f8e8c88817a6f625a4c403023120100000000000000091e33495e73889eb3c8c8b39d8874604b3e31231c110b050000000000060c0e130e0c0600000000000000000000000c2136495b70859bb0b6a48f7a65503a29170400000000000000000000000000000000000b20354b607380919ea7b4babab4aea8a5a4a4a6abb3b8c4c4b7ab9f927e685a49351e0e000000000000000000081b2e3e4b607384979fb1b6c2c3b6b2adacaaab8f79644f3a240f000b20354b60758aa0b5bdbdb8a38e79634e39240e00000000000000000000000000000000000000000000172c41576c818d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8a75604a352000000000000000000000000000000000000000000000000000000000000000000000000000071c304354606363636363636363636363636363636375869caabbb9a79b8574604b3e2e1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273b4f61696f7276797973615947341f0a000000000002152838556a7f94aabfc4af9a846f5a45301a05000014293e53697e93a8beccb7a28c77624d4b5861697075787a7a7977726c645c4d493c2f22120400000000000000000a1f344a5f74899fb4c9c4ae99846f544330201308000000000000030f1a21232823211a0e000000000000000000021528384e63798ea2b4b19c87725d4b371c0c000000000000000000000000000000000000081d314455606b7c89969fa9b3b8c5bebab9b9bbc0c4c3b7b2a69d8d7f69604e3c2c190000000000000000000000101d314455607482919ca4acb2b7c3b9c7baa58f7a65503a2510000b20354b60758aa0a8a8a8a8a38e79634e39240e00000000000000000000000000000000000000000000172c41576c8196a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39f8a75604a3520000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607278787878787878787878787878787878787c8a9fb4c5b5a397816c5c4b37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697f84878b8e8e8677614c38271502000000000013283e53687d93a8bdc7b19c87725c47321d07000014293e53697e93a8beccb7a28c77624d3a474c545560636465646158574f4a3e352c1e1204000000000000000000091f34495e74899eb3c9c3ae99836e593a2917040000000000020b161e2c35383e38352c1f0f0100000000000000091d3245566c8196abbaa9947f69543f2e1c0000000000000000000000000000000000000001152737444b5f6777818b979ea7aaaeb1b2b3b2b1afaaa59d94887b69614f42311e0e0000000000000000000000011527374556606d7d8691979da5a2a4a3a99f907b66503b2611000b20354b60758a9393939393938e79634e39240e00000000000000000000000000000000000000000000172c41576c8196acb1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b19f8a75604a3520000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60758b8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d919faabbcec1b59f8d7a644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e83989da5a3a496816c5645311d0a000000000014293e54697e93a9bec8b39d88735e48331e09000014293e53697e93a8beccb7a28c77624d37333737444b4e4f504f4c473a39362d20190e0000000000000000000000071d32475c72879cb1c7c5b09b86705846331f120b0502090b151d29323d494e534e493d2c1f0f000000000000000b20364b6075889eb3b49f8a77614c372211000000000000000000000000000000000000000009192731404d58616c7881899095999c9d9e9d9b99948f877f76655d4f433223130000000000000000000000000009192838454b5f67737c82878b8d8e8e8c89847a644e39240f000b20354a60727e7e7e7e7e7e7e7e76614c37210c00000000000000000000000000000000000000000000172c41576c81969b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b8a75604a3520000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba0a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a6b4bbc8d9cfbcab97826d57422d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9b7c2b39e8975604b3828150a01000009182d3d566b8096abc0c8b39e88735e49331e09000014293e53697e93a8beccb7a28c77624d372221273135383a3a3937332a24221b100600000000000000000000000004192e44596e8399aec9cab49f8b76614c3e30222018151d20273139464b5b6368635b493d2c1a06000000000006192c3c52677c92a7b8ad98836e5847331f0a00000000000000000000000000000000000000000009151d303a474c5a626c757b80848788898886847f7a746961584b3f3224140500000000000000000000000000000a1a2832414d5460666d727678797977756f645c4a36210d00071c304354606868686868686868615847331f0a00000000000000000000000000000000000000000000152a3f546a7f868686868686868686868686868686868686868686868686868686715c46311c000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba0b5b8b8b8b8b8b8b8b8b8b8b8b8b8b8bbc4c4c4c4c4c9af9a856f5a45301a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4b6cab9a8917c67564532271d1414151926364a5b71869bb0c6c7b19c87725c47321d07000014293e53697e93a8beccb7a28c77624d37220d151d2023252524211f170f0d0700000000000000000000000000000014293e54697e93abbccebbaa947f6a5c4d4037342b27313638454b57616c797d79635b4935211000000000000c2035495a6f849aafb6a5907b65503a2a18040000000000000000000000000000000000000000000001121c2a333c494d5660656b6e71737473716f6a6560554c463a2f211406000000000000000000000000000000000a151d3036434b515757616264646260554e4a3d2d1a070000132536434a53535353535353534c473a2917040000000000000000000000000000000000000000000013273c4f616a7171717171717171717171717171717171717171717171717171716756432e1a000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba0aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae9a85705a45301b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073879cb2c6c6b19c8674604b453831262a2b2e37445463798c9fb5cac4ae99846f59442f1a04000014293e53697e93a8beccb7a28c77624d37220d01080b0e0f100f0c0a040000000000000000000000000000000000000d22384d62788c9fb5c8c8b49f8a7a665e524c483b38454b4f56606875818b938a79634e3e2d1b07000000011527374d63788c9fb5b29d8773604a35200c000000000000000000000000000000000000000000000000000c181f2b3538454b5055595c5d5e5d5c5a55504b443733291b11030000000000000000000000000000000000000213182630353c39464b4d4f4e4d4b4437362d1f0f00000008182530353e3e3e3e3e3e3e3e3733291c0c00000000000000000000000000000000000000000000000c2032434f545c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5649392713000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b9999999999999999999999999999999999999999999999999985705a45301b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354697e93a8b9cab6a497816c60564b44373f403f4b556072849aabbccfbfa9947f6a543f2a1500000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000000000000000000000000b2035485a6e8398aabbcdbaa89e897c706762595c5c5660656b747e88969fa899836f5c4a36220f000000081d3144556b8095abb9a8947f6a5443301c070000000000000000000000000000000000000000000000000000040e19202832363b40444748494846443f3a3531271f170b0000000000000000000000000000000000000000000008141c202729323638393937363127211a0f010000000008131c202929292929292929211f170c000000000000000000000000000000000000000000000000031525323c3f46464646464646464646464646464646464646464646464646464643392b1b0a000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60748384848484848484848484848484848484848484848484848484806b56402b160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364c61768a9eb4c0c2b19f978174666055555455585d65738197a2b4c9c8b3a18d78634e38230e00000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000005192b3c4d63788b9fb4bfc6b8a79e91857c7773727173757a8088939da6b4b3a18f7a644f3d2c1a0600000b20354b6074889db0aa9e8977614c3625130000000000000000000000000000000000000000000000000000000000060a151d20252b2f32333433312f2a25201d15090400000000000000000000000000000000000000000000000001080b11161e2123242422201d1509070000000000000000070b13131313131313130c0a040000000000000000000000000000000000000000000000000000071520272a3131313131313131313131313131313131313131313131313131312e271b0d0000000000000000000000000000000000000000000000000000000000000000000000000000081d314455606f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6b62513d2814000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081f334658697e93a2b4c4bdb19f97867c746e6b696a6d727a84979fb1c0cebbaa99846f5b4935210c00000014293e53697e93a8beccb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000e2135495b6b8096a1b3c1c5b8b3a29a928c888786888a8f959da6b3b7c4bfaf99846f5b4935210c000011273c51667c919b9b978c7d6758473318080000000000000000000000000000000000000000000000000000000000000002090b1016191c1e1f1e1c1a15100b0801000000000000000000000000000000000000000000000000000000000000030a0c0d0f0f0d0b08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c13151c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1a130a00000000000000000000000000000000000000000000000000000000000000000000000000000002152737444b595959595959595959595959595959595959595959595959595956514433210e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4a6072849aa6b7c4bdb1a49c918883807f8082878f9aa2b1bdcfbdb49f8b79634e3d2c1a0600000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000000000000000000000000006192c3c4b60738399a3b1bdcac0b4afa7a69e9c9c9d9fa9abb3b7c4cbc3b6aa9f8d78634e38230e0000162b41566b80858685827a675f4d3a2a1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192731364444444444444444444444444444444444444444444444444444403d33261604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1c3043546278879da6b4c1c2b6b1a69e98959495979ca5b0b4c0c9bcb49f957f6a5b49351f0e0000000014293e53697e93a8beccb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000000000e1d314455617585979fb2b6c3c8c5c5b8b3b1b1b2b4bac7c8cac5b9b3a59c8c7e695b4935210c000014293d51626b7171706d645c4d41301c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2b28211608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536485a6378879ba3b4bac7c5b8b3aeaaa9aaadb2b6c3c8c3b7ab9f96816c61503d2c1a000000000014293e53697e93a8beccb7a28c77624d37220d000000000000000000000000000000000000000000000000000000000000011426374657617481929da5b1b6c2c2c5c7c7c6c8c6c4c9bcb5b0a79e94877a69604e3d2c1a0600000e21344451565b5b5b584f4a3e30231300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a16140e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182b3c495a637885949fa9b2b7c3c2c3c0bebfc2c5c2c1b5b1a59d8c8072604a43331f0e000000000014293e53697e93a8bec6b7a28c77624d37220d00000000000000000000000000000000000000000000000000000000000000091929394656606c7d87929ca4a9adb0b2b3b3b2b1afabab9f9b93897f74645c4e42311f0f000000041626343d414646464239362d20130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3c495a62737f8a949da5a8adb0b1b3b3b1b0ada8a39b92877b6b60544330251500000000000014293e53697e93a8b0b0b0a28c77624d37220d00000000000000000000000000000000000000000000000000000000000000000b1b2938454b5f67747d868e93989b9d9e9e9d9c9996918b857e756a60564b3e3124140100000000081621292b3131302d24221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c3c49556069777f878e93989b9c9e9e9c9a98928d867d74655d4a433625130700000000000014293e53697e939b9b9b9b9b8c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000b1a2832414d55606871797e8386888989888784817c77706861574b45382e201406000000000000040e14161c1c1b180f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b37444b58616a74797e83858788888785827d78716760554b3f302518080000000000000012273c52677d8586868686868577614c37220c000000000000000000000000000000000000000000000000000000000000000000000a151d3037444b525b63696d7072737473716f6c676259534b463932281a100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1926313a474c546064696d7072737371706d68635a524b44372e1c130800000000000000001025394d5f6771717171717171615947341f0b00000000000000000000000000000000000000000000000000000000000000000000000213192731353d4a4e54585b5d5e5e5d5c5a56524d483b3632281e160a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2a3336434b4e53585b5c5e5e5c5b58534d493c3631271911000000000000000000000a1d30414d525b5b5b5b5b5b5b4c473b2a18040000000000000000000000000000000000000000000000000000000000000000000000000009151d202d36393e4346484949484744413c37342b211e160b0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c181f263035393e43464749494745433d38352c201d1509000000000000000000000001122330393c4646464646464637342a1d0c00000000000000000000000000000000000000000000000000000000000000000000000000000001080f1a2124292e3133343433322f2c272220180d090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408141c2024292e3032333332302d282320190e08020000000000000000000000000005121d252731313131313131221f180c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e14181b1d1e1f1e1c1a17120d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f14181b1d1e1e1c1b18130e0c060000000000000000000000000000000000010a10121c1c1c1c1c1c1c0c0b04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Semibold SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Semibold SDF.asset.meta new file mode 100644 index 0000000..fde18b2 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Semibold SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e48c6b5155ab684092ac6890f8f3af4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-SemiboldItalic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-SemiboldItalic SDF.asset new file mode 100644 index 0000000..f0f73f5 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-SemiboldItalic SDF.asset @@ -0,0 +1,2698 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-SemiboldItalic SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: 9199864149694275698} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: 8bb3a26eeba4ea9419ea6d5b9a4805f4 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Semibold Italic + m_PointSize: 70 + m_Scale: 1 + m_LineHeight: 84 + m_AscentLine: 69.090004 + m_CapLine: 50 + m_MeanLine: 36 + m_Baseline: 0 + m_DescentLine: -14.91 + m_SuperscriptOffset: 69.090004 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -14.91 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -17.85 + m_UnderlineThickness: 3.3600001 + m_StrikethroughOffset: 14.4 + m_StrikethroughThickness: 3.3600001 + m_TabWidth: 16 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 15.8125 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 44.734375 + m_Height: 50.40625 + m_HorizontalBearingX: -2.5625 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 44.875 + m_GlyphRect: + m_X: 395 + m_Y: 6 + m_Width: 46 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 37.171875 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 42.59375 + m_GlyphRect: + m_X: 6 + m_Y: 266 + m_Width: 38 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 41.546875 + m_Height: 51.515625 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 43.578125 + m_GlyphRect: + m_X: 6 + m_Y: 141 + m_Width: 42 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 44.265625 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 49.5625 + m_GlyphRect: + m_X: 274 + m_Y: 74 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 35.25 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 37.59375 + m_GlyphRect: + m_X: 378 + m_Y: 420 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 35.25 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 37.140625 + m_GlyphRect: + m_X: 409 + m_Y: 355 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 43.234375 + m_Height: 51.515625 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 47.53125 + m_GlyphRect: + m_X: 330 + m_Y: 90 + m_Width: 44 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 44.875 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 49.984375 + m_GlyphRect: + m_X: 452 + m_Y: 6 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 14.0625 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 19.21875 + m_GlyphRect: + m_X: 403 + m_Y: 130 + m_Width: 15 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 27.96875 + m_Height: 50.96875 + m_HorizontalBearingX: -1.265625 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 28.34375 + m_GlyphRect: + m_X: 366 + m_Y: 294 + m_Width: 29 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 43.578125 + m_Height: 50.4375 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.4375 + m_HorizontalAdvance: 44.140625 + m_GlyphRect: + m_X: 450 + m_Y: 68 + m_Width: 44 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 27.75 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 33.5625 + m_GlyphRect: + m_X: 111 + m_Y: 207 + m_Width: 28 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 55.859375 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 61 + m_GlyphRect: + m_X: 84 + m_Y: 6 + m_Width: 56 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 44.875 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 49.984375 + m_GlyphRect: + m_X: 394 + m_Y: 68 + m_Width: 45 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 47.21875 + m_Height: 51.484375 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 52.46875 + m_GlyphRect: + m_X: 65 + m_Y: 68 + m_Width: 48 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 36.8125 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.046875 + m_GlyphRect: + m_X: 200 + m_Y: 179 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 47.21875 + m_Height: 61.109375 + m_HorizontalBearingX: 3.109375 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 52.46875 + m_GlyphRect: + m_X: 6 + m_Y: 68 + m_Width: 48 + m_Height: 62 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 35.984375 + m_Height: 50.40625 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 41.4375 + m_GlyphRect: + m_X: 150 + m_Y: 240 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 34.859375 + m_Height: 51.484375 + m_HorizontalBearingX: 0.171875 + m_HorizontalBearingY: 50.921875 + m_HorizontalAdvance: 35.84375 + m_GlyphRect: + m_X: 6 + m_Y: 390 + m_Width: 36 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 37.34375 + m_Height: 50.40625 + m_HorizontalBearingX: 3.78125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 38.609375 + m_GlyphRect: + m_X: 6 + m_Y: 204 + m_Width: 39 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 42.28125 + m_Height: 51 + m_HorizontalBearingX: 4.375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 48.1875 + m_GlyphRect: + m_X: 204 + m_Y: 116 + m_Width: 43 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 44.734375 + m_Height: 50.40625 + m_HorizontalBearingX: 3.5625 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 44.796875 + m_GlyphRect: + m_X: 337 + m_Y: 28 + m_Width: 46 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 66.015625 + m_Height: 50.40625 + m_HorizontalBearingX: 4.125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 67.34375 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 67 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 47.984375 + m_Height: 50.40625 + m_HorizontalBearingX: -2.6875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 43.40625 + m_GlyphRect: + m_X: 151 + m_Y: 54 + m_Width: 49 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 41.765625 + m_Height: 50.40625 + m_HorizontalBearingX: 3.53125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 41.6875 + m_GlyphRect: + m_X: 258 + m_Y: 136 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 41.859375 + m_Height: 50.40625 + m_HorizontalBearingX: -1.125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 39.09375 + m_GlyphRect: + m_X: 65 + m_Y: 131 + m_Width: 43 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 32.125 + m_Height: 36.75 + m_HorizontalBearingX: 1.46875 + m_HorizontalBearingY: 36.21875 + m_HorizontalAdvance: 36.15625 + m_GlyphRect: + m_X: 78 + m_Y: 396 + m_Width: 33 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 33.140625 + m_Height: 52.328125 + m_HorizontalBearingX: 1.71875 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 37.375 + m_GlyphRect: + m_X: 105 + m_Y: 269 + m_Width: 34 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.84375 + m_Height: 36.75 + m_HorizontalBearingX: 1.75 + m_HorizontalBearingY: 36.21875 + m_HorizontalAdvance: 31.78125 + m_GlyphRect: + m_X: 292 + m_Y: 466 + m_Width: 30 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 35.203125 + m_Height: 52.328125 + m_HorizontalBearingX: 1.6875 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 37.421875 + m_GlyphRect: + m_X: 198 + m_Y: 241 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 29.609375 + m_Height: 36.71875 + m_HorizontalBearingX: 1.75 + m_HorizontalBearingY: 36.1875 + m_HorizontalAdvance: 33.8125 + m_GlyphRect: + m_X: 166 + m_Y: 395 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 23.703125 + m_Height: 59.921875 + m_HorizontalBearingX: 2.6875 + m_HorizontalBearingY: 51.234375 + m_HorizontalAdvance: 22.8125 + m_GlyphRect: + m_X: 97 + m_Y: 445 + m_Width: 25 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 37.15625 + m_Height: 48.90625 + m_HorizontalBearingX: -2.09375 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 34.546875 + m_GlyphRect: + m_X: 150 + m_Y: 179 + m_Width: 39 + m_Height: 50 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 32.296875 + m_Height: 51.796875 + m_HorizontalBearingX: 1.71875 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 37.484375 + m_GlyphRect: + m_X: 333 + m_Y: 450 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 13.9375 + m_Height: 51.515625 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 51.515625 + m_HorizontalAdvance: 16.65625 + m_GlyphRect: + m_X: 378 + m_Y: 153 + m_Width: 14 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 22.078125 + m_Height: 64.1875 + m_HorizontalBearingX: -6.296875 + m_HorizontalBearingY: 51.515625 + m_HorizontalAdvance: 16.59375 + m_GlyphRect: + m_X: 266 + m_Y: 390 + m_Width: 23 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 33.296875 + m_Height: 51.796875 + m_HorizontalBearingX: 1.640625 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 34.15625 + m_GlyphRect: + m_X: 364 + m_Y: 357 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 50.5 + m_Height: 36.265625 + m_HorizontalBearingX: 1.71875 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 55.328125 + m_GlyphRect: + m_X: 151 + m_Y: 6 + m_Width: 52 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 32.3125 + m_Height: 36.265625 + m_HorizontalBearingX: 1.75 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 37.515625 + m_GlyphRect: + m_X: 413 + m_Y: 240 + m_Width: 34 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 32.0625 + m_Height: 36.796875 + m_HorizontalBearingX: 1.78125 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 36.46875 + m_GlyphRect: + m_X: 122 + m_Y: 395 + m_Width: 33 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 34.609375 + m_Height: 48.125 + m_HorizontalBearingX: 0.25 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 37.375 + m_GlyphRect: + m_X: 197 + m_Y: 305 + m_Width: 35 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 32.125 + m_Height: 48.078125 + m_HorizontalBearingX: 1.46875 + m_HorizontalBearingY: 36.21875 + m_HorizontalAdvance: 36.1875 + m_GlyphRect: + m_X: 243 + m_Y: 305 + m_Width: 33 + m_Height: 49 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 23.765625 + m_Height: 36.125 + m_HorizontalBearingX: 1.71875 + m_HorizontalBearingY: 36.125 + m_HorizontalAdvance: 24.359375 + m_GlyphRect: + m_X: 431 + m_Y: 130 + m_Width: 25 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 27.40625 + m_Height: 36.828125 + m_HorizontalBearingX: -0.34375 + m_HorizontalBearingY: 36.265625 + m_HorizontalAdvance: 28.203125 + m_GlyphRect: + m_X: 290 + m_Y: 245 + m_Width: 29 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 21.90625 + m_Height: 47.5 + m_HorizontalBearingX: 2.34375 + m_HorizontalBearingY: 46.9375 + m_HorizontalAdvance: 25.234375 + m_GlyphRect: + m_X: 287 + m_Y: 304 + m_Width: 23 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 32.296875 + m_Height: 36.234375 + m_HorizontalBearingX: 2.59375 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 37.484375 + m_GlyphRect: + m_X: 468 + m_Y: 270 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 33.078125 + m_Height: 35.703125 + m_HorizontalBearingX: 2.234375 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 33.984375 + m_GlyphRect: + m_X: 468 + m_Y: 223 + m_Width: 34 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 49.53125 + m_Height: 35.765625 + m_HorizontalBearingX: 2.484375 + m_HorizontalBearingY: 35.765625 + m_HorizontalAdvance: 51.171875 + m_GlyphRect: + m_X: 214 + m_Y: 6 + m_Width: 51 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 36.328125 + m_Height: 35.703125 + m_HorizontalBearingX: -2.515625 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 33.359375 + m_GlyphRect: + m_X: 248 + m_Y: 198 + m_Width: 37 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 33.140625 + m_Height: 47.5625 + m_HorizontalBearingX: 2.3125 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 34.015625 + m_GlyphRect: + m_X: 245 + m_Y: 245 + m_Width: 34 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 30.453125 + m_Height: 35.703125 + m_HorizontalBearingX: -0.765625 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 30.03125 + m_GlyphRect: + m_X: 468 + m_Y: 318 + m_Width: 31 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 12.84375 + m_Height: 10.171875 + m_HorizontalBearingX: 9.09375 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 25.765625 + m_GlyphRect: + m_X: 286 + m_Y: 365 + m_Width: 13 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 307 + m_Metrics: + m_Width: 13.4375 + m_Height: 50.9375 + m_HorizontalBearingX: 2.375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 18.125 + m_GlyphRect: + m_X: 406 + m_Y: 292 + m_Width: 14 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 23.71875 + m_Height: 51.453125 + m_HorizontalBearingX: 5.359375 + m_HorizontalBearingY: 50.921875 + m_HorizontalAdvance: 29.75 + m_GlyphRect: + m_X: 377 + m_Y: 229 + m_Width: 25 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 310 + m_Metrics: + m_Width: 9.453125 + m_Height: 18.96875 + m_HorizontalBearingX: 1.296875 + m_HorizontalBearingY: 9.234375 + m_HorizontalAdvance: 16.09375 + m_GlyphRect: + m_X: 296 + m_Y: 213 + m_Width: 10 + m_Height: 20 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 12.875 + m_Height: 44.96875 + m_HorizontalBearingX: 2.296875 + m_HorizontalBearingY: 35.234375 + m_HorizontalAdvance: 18.578125 + m_GlyphRect: + m_X: 53 + m_Y: 396 + m_Width: 14 + m_Height: 46 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 9.734375 + m_Height: 9.765625 + m_HorizontalBearingX: 1.4375 + m_HorizontalBearingY: 9.234375 + m_HorizontalAdvance: 16.515625 + m_GlyphRect: + m_X: 310 + m_Y: 363 + m_Width: 11 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 46.4375 + m_Height: 9.765625 + m_HorizontalBearingX: 1.4375 + m_HorizontalBearingY: 9.234375 + m_HorizontalAdvance: 53.265625 + m_GlyphRect: + m_X: 337 + m_Y: 6 + m_Width: 47 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 324 + m_Metrics: + m_Width: 32.0625 + m_Height: 54.15625 + m_HorizontalBearingX: -0.90625 + m_HorizontalBearingY: 50.859375 + m_HorizontalAdvance: 29.6875 + m_GlyphRect: + m_X: 133 + m_Y: 444 + m_Width: 33 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 325 + m_Metrics: + m_Width: 5.8125 + m_Height: 65.796875 + m_HorizontalBearingX: 6.296875 + m_HorizontalBearingY: 53.9375 + m_HorizontalAdvance: 18.484375 + m_GlyphRect: + m_X: 312 + m_Y: 136 + m_Width: 7 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 18.75 + m_Height: 54.15625 + m_HorizontalBearingX: 5.640625 + m_HorizontalBearingY: 50.859375 + m_HorizontalAdvance: 29.4375 + m_GlyphRect: + m_X: 177 + m_Y: 444 + m_Width: 20 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 328 + m_Metrics: + m_Width: 17.1875 + m_Height: 6.125 + m_HorizontalBearingX: 3.5625 + m_HorizontalBearingY: 24.109375 + m_HorizontalAdvance: 24.4375 + m_GlyphRect: + m_X: 317 + m_Y: 213 + m_Width: 18 + m_Height: 8 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 331 + m_Metrics: + m_Width: 26.015625 + m_Height: 4.796875 + m_HorizontalBearingX: -0.984375 + m_HorizontalBearingY: -5.3125 + m_HorizontalAdvance: 31.109375 + m_GlyphRect: + m_X: 332 + m_Y: 433 + m_Width: 27 + m_Height: 6 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 334 + m_Metrics: + m_Width: 17.265625 + m_Height: 65.171875 + m_HorizontalBearingX: 2.65625 + m_HorizontalBearingY: 54.5625 + m_HorizontalAdvance: 18.375 + m_GlyphRect: + m_X: 208 + m_Y: 395 + m_Width: 18 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 335 + m_Metrics: + m_Width: 17.265625 + m_Height: 65.171875 + m_HorizontalBearingX: -1.40625 + m_HorizontalBearingY: 54.5625 + m_HorizontalAdvance: 18.375 + m_GlyphRect: + m_X: 237 + m_Y: 395 + m_Width: 18 + m_Height: 66 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 20.609375 + m_Height: 64.296875 + m_HorizontalBearingX: 2.03125 + m_HorizontalBearingY: 53.90625 + m_HorizontalAdvance: 20.609375 + m_GlyphRect: + m_X: 300 + m_Y: 387 + m_Width: 21 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 20.6875 + m_Height: 64.296875 + m_HorizontalBearingX: -2 + m_HorizontalBearingY: 53.90625 + m_HorizontalAdvance: 20.65625 + m_GlyphRect: + m_X: 346 + m_Y: 153 + m_Width: 21 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 19.921875 + m_Height: 64.296875 + m_HorizontalBearingX: 2.0625 + m_HorizontalBearingY: 53.90625 + m_HorizontalAdvance: 20.125 + m_GlyphRect: + m_X: 119 + m_Y: 131 + m_Width: 20 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 19.9375 + m_Height: 64.296875 + m_HorizontalBearingX: -1.8125 + m_HorizontalBearingY: 53.90625 + m_HorizontalAdvance: 20.125 + m_GlyphRect: + m_X: 332 + m_Y: 357 + m_Width: 21 + m_Height: 65 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 21.375 + m_Height: 23.0625 + m_HorizontalBearingX: 5.5 + m_HorizontalBearingY: 52.84375 + m_HorizontalAdvance: 27.6875 + m_GlyphRect: + m_X: 421 + m_Y: 482 + m_Width: 22 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 345 + m_Metrics: + m_Width: 30.453125 + m_Height: 23.078125 + m_HorizontalBearingX: 6.828125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 378 + m_Y: 482 + m_Width: 32 + m_Height: 24 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 346 + m_Metrics: + m_Width: 33.109375 + m_Height: 13.0625 + m_HorizontalBearingX: 3.703125 + m_HorizontalBearingY: 27.234375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 241 + m_Y: 365 + m_Width: 34 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 7.546875 + m_Height: 18.265625 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 50.359375 + m_HorizontalAdvance: 13.890625 + m_GlyphRect: + m_X: 222 + m_Y: 365 + m_Width: 8 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 18.546875 + m_Height: 18.265625 + m_HorizontalBearingX: 6.0625 + m_HorizontalBearingY: 50.359375 + m_HorizontalAdvance: 25.203125 + m_GlyphRect: + m_X: 192 + m_Y: 365 + m_Width: 19 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 42 + m_Height: 51.484375 + m_HorizontalBearingX: 1.6875 + m_HorizontalBearingY: 50.921875 + m_HorizontalAdvance: 46.40625 + m_GlyphRect: + m_X: 150 + m_Y: 116 + m_Width: 43 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 48.8125 + m_Height: 56.328125 + m_HorizontalBearingX: 2.875 + m_HorizontalBearingY: 47.921875 + m_HorizontalAdvance: 53.90625 + m_GlyphRect: + m_X: 276 + m_Y: 6 + m_Width: 50 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 360 + m_Metrics: + m_Width: 37.9375 + m_Height: 65.546875 + m_HorizontalBearingX: 1.046875 + m_HorizontalBearingY: 57.46875 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 56 + m_Y: 255 + m_Width: 38 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 368 + m_Metrics: + m_Width: 40.109375 + m_Height: 50.359375 + m_HorizontalBearingX: 0.84375 + m_HorizontalBearingY: 50.359375 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 59 + m_Y: 193 + m_Width: 41 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 397 + m_Metrics: + m_Width: 34.796875 + m_Height: 51.484375 + m_HorizontalBearingX: 3.359375 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 150 + m_Y: 302 + m_Width: 36 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 398 + m_Metrics: + m_Width: 26.140625 + m_Height: 50.46875 + m_HorizontalBearingX: 6.859375 + m_HorizontalBearingY: 50.46875 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 429 + m_Y: 178 + m_Width: 27 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 35.375 + m_Height: 50.953125 + m_HorizontalBearingX: 1.71875 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 6 + m_Y: 328 + m_Width: 37 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 34.015625 + m_Height: 51.515625 + m_HorizontalBearingX: 2.90625 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 6 + m_Y: 453 + m_Width: 35 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 35.265625 + m_Height: 50.40625 + m_HorizontalBearingX: 1.6875 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 101 + m_Y: 333 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.515625 + m_Height: 50.96875 + m_HorizontalBearingX: 2.625 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 54 + m_Y: 333 + m_Width: 36 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 34.296875 + m_Height: 50.40625 + m_HorizontalBearingX: 5.78125 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 330 + m_Y: 232 + m_Width: 36 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 31.1875 + m_Height: 50.953125 + m_HorizontalBearingX: 6.015625 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 425 + m_Y: 417 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 433 + m_Metrics: + m_Width: 34.5 + m_Height: 34.90625 + m_HorizontalBearingX: 3.328125 + m_HorizontalBearingY: 40.921875 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 468 + m_Y: 177 + m_Width: 35 + m_Height: 35 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 437 + m_Metrics: + m_Width: 32.609375 + m_Height: 17.421875 + m_HorizontalBearingX: 4.171875 + m_HorizontalBearingY: 32.265625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 148 + m_Y: 365 + m_Width: 33 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 440 + m_Metrics: + m_Width: 29.53125 + m_Height: 31.671875 + m_HorizontalBearingX: 5.640625 + m_HorizontalBearingY: 39.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 208 + m_Y: 472 + m_Width: 31 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 441 + m_Metrics: + m_Width: 29.5625 + m_Height: 31.671875 + m_HorizontalBearingX: 5.921875 + m_HorizontalBearingY: 39.40625 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 250 + m_Y: 472 + m_Width: 31 + m_Height: 33 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 13.6875 + m_Height: 51.796875 + m_HorizontalBearingX: 1.859375 + m_HorizontalBearingY: 51.796875 + m_HorizontalAdvance: 16.28125 + m_GlyphRect: + m_X: 124 + m_Y: 68 + m_Width: 15 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 32.3125 + m_Height: 50.96875 + m_HorizontalBearingX: 3.84375 + m_HorizontalBearingY: 50.40625 + m_HorizontalAdvance: 37.34375 + m_GlyphRect: + m_X: 52 + m_Y: 453 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 33.53125 + m_Height: 51.515625 + m_HorizontalBearingX: 3.25 + m_HorizontalBearingY: 50.953125 + m_HorizontalAdvance: 40.59375 + m_GlyphRect: + m_X: 321 + m_Y: 294 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 48.09375 + m_Height: 51.484375 + m_HorizontalBearingX: 2.765625 + m_HorizontalBearingY: 50.890625 + m_HorizontalAdvance: 52.703125 + m_GlyphRect: + m_X: 214 + m_Y: 53 + m_Width: 49 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 35.6875 + m_Height: 35.703125 + m_HorizontalBearingX: 3.15625 + m_HorizontalBearingY: 35.703125 + m_HorizontalAdvance: 42 + m_GlyphRect: + m_X: 468 + m_Y: 130 + m_Width: 36 + m_Height: 36 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 12.734375 + m_Height: 35.765625 + m_HorizontalBearingX: 2.4375 + m_HorizontalBearingY: 35.234375 + m_HorizontalAdvance: 17.78125 + m_GlyphRect: + m_X: 456 + m_Y: 365 + m_Width: 14 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 7756098031741986397} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 78 + m_Height: 62 + - m_X: 78 + m_Y: 0 + m_Width: 67 + m_Height: 62 + - m_X: 145 + m_Y: 0 + m_Width: 63 + m_Height: 48 + - m_X: 208 + m_Y: 0 + m_Width: 62 + m_Height: 47 + - m_X: 270 + m_Y: 0 + m_Width: 61 + m_Height: 68 + - m_X: 208 + m_Y: 47 + m_Width: 60 + m_Height: 63 + - m_X: 145 + m_Y: 48 + m_Width: 60 + m_Height: 62 + - m_X: 0 + m_Y: 62 + m_Width: 59 + m_Height: 73 + - m_X: 59 + m_Y: 62 + m_Width: 59 + m_Height: 63 + - m_X: 118 + m_Y: 62 + m_Width: 26 + m_Height: 63 + - m_X: 331 + m_Y: 0 + m_Width: 58 + m_Height: 22 + - m_X: 389 + m_Y: 0 + m_Width: 57 + m_Height: 62 + - m_X: 331 + m_Y: 22 + m_Width: 57 + m_Height: 62 + - m_X: 268 + m_Y: 68 + m_Width: 56 + m_Height: 62 + - m_X: 446 + m_Y: 0 + m_Width: 56 + m_Height: 62 + - m_X: 388 + m_Y: 62 + m_Width: 56 + m_Height: 62 + - m_X: 324 + m_Y: 84 + m_Width: 55 + m_Height: 63 + - m_X: 444 + m_Y: 62 + m_Width: 55 + m_Height: 62 + - m_X: 144 + m_Y: 110 + m_Width: 54 + m_Height: 63 + - m_X: 198 + m_Y: 110 + m_Width: 54 + m_Height: 63 + - m_X: 252 + m_Y: 130 + m_Width: 54 + m_Height: 62 + - m_X: 306 + m_Y: 130 + m_Width: 18 + m_Height: 77 + - m_X: 59 + m_Y: 125 + m_Width: 54 + m_Height: 62 + - m_X: 113 + m_Y: 125 + m_Width: 31 + m_Height: 76 + - m_X: 0 + m_Y: 135 + m_Width: 53 + m_Height: 63 + - m_X: 53 + m_Y: 187 + m_Width: 52 + m_Height: 62 + - m_X: 0 + m_Y: 198 + m_Width: 50 + m_Height: 62 + - m_X: 144 + m_Y: 173 + m_Width: 50 + m_Height: 61 + - m_X: 105 + m_Y: 201 + m_Width: 39 + m_Height: 62 + - m_X: 50 + m_Y: 249 + m_Width: 49 + m_Height: 78 + - m_X: 0 + m_Y: 260 + m_Width: 49 + m_Height: 62 + - m_X: 0 + m_Y: 322 + m_Width: 48 + m_Height: 62 + - m_X: 194 + m_Y: 173 + m_Width: 48 + m_Height: 62 + - m_X: 144 + m_Y: 234 + m_Width: 48 + m_Height: 62 + - m_X: 99 + m_Y: 263 + m_Width: 45 + m_Height: 64 + - m_X: 242 + m_Y: 192 + m_Width: 48 + m_Height: 47 + - m_X: 192 + m_Y: 235 + m_Width: 47 + m_Height: 64 + - m_X: 144 + m_Y: 296 + m_Width: 47 + m_Height: 63 + - m_X: 48 + m_Y: 327 + m_Width: 47 + m_Height: 63 + - m_X: 0 + m_Y: 384 + m_Width: 47 + m_Height: 63 + - m_X: 0 + m_Y: 447 + m_Width: 46 + m_Height: 63 + - m_X: 46 + m_Y: 447 + m_Width: 45 + m_Height: 63 + - m_X: 47 + m_Y: 390 + m_Width: 25 + m_Height: 57 + - m_X: 95 + m_Y: 327 + m_Width: 47 + m_Height: 62 + - m_X: 72 + m_Y: 390 + m_Width: 44 + m_Height: 49 + - m_X: 91 + m_Y: 439 + m_Width: 36 + m_Height: 72 + - m_X: 116 + m_Y: 389 + m_Width: 44 + m_Height: 49 + - m_X: 142 + m_Y: 359 + m_Width: 44 + m_Height: 30 + - m_X: 127 + m_Y: 438 + m_Width: 44 + m_Height: 66 + - m_X: 160 + m_Y: 389 + m_Width: 42 + m_Height: 49 + - m_X: 186 + m_Y: 359 + m_Width: 30 + m_Height: 30 + - m_X: 191 + m_Y: 299 + m_Width: 46 + m_Height: 60 + - m_X: 171 + m_Y: 438 + m_Width: 31 + m_Height: 66 + - m_X: 202 + m_Y: 389 + m_Width: 29 + m_Height: 77 + - m_X: 216 + m_Y: 359 + m_Width: 19 + m_Height: 30 + - m_X: 202 + m_Y: 466 + m_Width: 42 + m_Height: 44 + - m_X: 231 + m_Y: 389 + m_Width: 29 + m_Height: 77 + - m_X: 244 + m_Y: 466 + m_Width: 42 + m_Height: 44 + - m_X: 235 + m_Y: 359 + m_Width: 45 + m_Height: 25 + - m_X: 237 + m_Y: 299 + m_Width: 44 + m_Height: 60 + - m_X: 239 + m_Y: 239 + m_Width: 45 + m_Height: 59 + - m_X: 260 + m_Y: 384 + m_Width: 34 + m_Height: 76 + - m_X: 286 + m_Y: 460 + m_Width: 41 + m_Height: 49 + - m_X: 280 + m_Y: 359 + m_Width: 24 + m_Height: 22 + - m_X: 281 + m_Y: 298 + m_Width: 34 + m_Height: 59 + - m_X: 294 + m_Y: 381 + m_Width: 32 + m_Height: 76 + - m_X: 304 + m_Y: 357 + m_Width: 22 + m_Height: 22 + - m_X: 284 + m_Y: 239 + m_Width: 40 + m_Height: 49 + - m_X: 290 + m_Y: 207 + m_Width: 21 + m_Height: 31 + - m_X: 315 + m_Y: 288 + m_Width: 45 + m_Height: 63 + - m_X: 311 + m_Y: 207 + m_Width: 29 + m_Height: 19 + - m_X: 324 + m_Y: 226 + m_Width: 47 + m_Height: 62 + - m_X: 340 + m_Y: 147 + m_Width: 32 + m_Height: 76 + - m_X: 326 + m_Y: 351 + m_Width: 32 + m_Height: 76 + - m_X: 326 + m_Y: 427 + m_Width: 38 + m_Height: 17 + - m_X: 327 + m_Y: 444 + m_Width: 45 + m_Height: 63 + - m_X: 358 + m_Y: 351 + m_Width: 45 + m_Height: 63 + - m_X: 360 + m_Y: 288 + m_Width: 40 + m_Height: 63 + - m_X: 371 + m_Y: 223 + m_Width: 36 + m_Height: 63 + - m_X: 400 + m_Y: 286 + m_Width: 25 + m_Height: 63 + - m_X: 372 + m_Y: 147 + m_Width: 25 + m_Height: 63 + - m_X: 372 + m_Y: 414 + m_Width: 47 + m_Height: 62 + - m_X: 372 + m_Y: 476 + m_Width: 43 + m_Height: 35 + - m_X: 415 + m_Y: 476 + m_Width: 33 + m_Height: 35 + - m_X: 403 + m_Y: 349 + m_Width: 47 + m_Height: 62 + - m_X: 419 + m_Y: 411 + m_Width: 43 + m_Height: 62 + - m_X: 462 + m_Y: 124 + m_Width: 47 + m_Height: 47 + - m_X: 425 + m_Y: 124 + m_Width: 36 + m_Height: 48 + - m_X: 397 + m_Y: 124 + m_Width: 26 + m_Height: 62 + - m_X: 462 + m_Y: 171 + m_Width: 46 + m_Height: 46 + - m_X: 423 + m_Y: 172 + m_Width: 38 + m_Height: 62 + - m_X: 407 + m_Y: 234 + m_Width: 45 + m_Height: 48 + - m_X: 462 + m_Y: 217 + m_Width: 45 + m_Height: 47 + - m_X: 462 + m_Y: 264 + m_Width: 44 + m_Height: 48 + - m_X: 462 + m_Y: 312 + m_Width: 42 + m_Height: 47 + - m_X: 450 + m_Y: 359 + m_Width: 25 + m_Height: 48 + m_FreeGlyphRects: + - m_X: 268 + m_Y: 47 + m_Width: 2 + m_Height: 21 + - m_X: 388 + m_Y: 22 + m_Width: 1 + m_Height: 40 + - m_X: 324 + m_Y: 68 + m_Width: 7 + m_Height: 16 + - m_X: 144 + m_Y: 62 + m_Width: 1 + m_Height: 48 + - m_X: 205 + m_Y: 48 + m_Width: 3 + m_Height: 62 + - m_X: 252 + m_Y: 110 + m_Width: 16 + m_Height: 20 + - m_X: 53 + m_Y: 135 + m_Width: 6 + m_Height: 52 + - m_X: 105 + m_Y: 187 + m_Width: 8 + m_Height: 14 + - m_X: 50 + m_Y: 198 + m_Width: 3 + m_Height: 51 + - m_X: 99 + m_Y: 249 + m_Width: 6 + m_Height: 14 + - m_X: 242 + m_Y: 173 + m_Width: 10 + m_Height: 19 + - m_X: 192 + m_Y: 234 + m_Width: 2 + m_Height: 1 + - m_X: 49 + m_Y: 260 + m_Width: 1 + m_Height: 67 + - m_X: 48 + m_Y: 322 + m_Width: 2 + m_Height: 5 + - m_X: 47 + m_Y: 384 + m_Width: 1 + m_Height: 6 + - m_X: 0 + m_Y: 510 + m_Width: 91 + m_Height: 1 + - m_X: 72 + m_Y: 439 + m_Width: 19 + m_Height: 8 + - m_X: 95 + m_Y: 389 + m_Width: 21 + m_Height: 1 + - m_X: 142 + m_Y: 327 + m_Width: 2 + m_Height: 32 + - m_X: 116 + m_Y: 438 + m_Width: 11 + m_Height: 1 + - m_X: 191 + m_Y: 296 + m_Width: 1 + m_Height: 3 + - m_X: 127 + m_Y: 504 + m_Width: 75 + m_Height: 7 + - m_X: 239 + m_Y: 235 + m_Width: 3 + m_Height: 4 + - m_X: 235 + m_Y: 384 + m_Width: 25 + m_Height: 5 + - m_X: 260 + m_Y: 460 + m_Width: 26 + m_Height: 6 + - m_X: 239 + m_Y: 298 + m_Width: 42 + m_Height: 1 + - m_X: 280 + m_Y: 381 + m_Width: 14 + m_Height: 3 + - m_X: 281 + m_Y: 357 + m_Width: 23 + m_Height: 2 + - m_X: 290 + m_Y: 192 + m_Width: 16 + m_Height: 15 + - m_X: 284 + m_Y: 288 + m_Width: 31 + m_Height: 10 + - m_X: 290 + m_Y: 238 + m_Width: 34 + m_Height: 1 + - m_X: 311 + m_Y: 226 + m_Width: 13 + m_Height: 13 + - m_X: 324 + m_Y: 147 + m_Width: 16 + m_Height: 60 + - m_X: 304 + m_Y: 379 + m_Width: 22 + m_Height: 2 + - m_X: 315 + m_Y: 351 + m_Width: 11 + m_Height: 6 + - m_X: 294 + m_Y: 457 + m_Width: 33 + m_Height: 3 + - m_X: 326 + m_Y: 444 + m_Width: 1 + m_Height: 16 + - m_X: 340 + m_Y: 223 + m_Width: 31 + m_Height: 3 + - m_X: 371 + m_Y: 286 + m_Width: 29 + m_Height: 2 + - m_X: 379 + m_Y: 84 + m_Width: 9 + m_Height: 63 + - m_X: 358 + m_Y: 414 + m_Width: 14 + m_Height: 13 + - m_X: 364 + m_Y: 414 + m_Width: 8 + m_Height: 30 + - m_X: 127 + m_Y: 510 + m_Width: 245 + m_Height: 1 + - m_X: 286 + m_Y: 509 + m_Width: 86 + m_Height: 2 + - m_X: 327 + m_Y: 507 + m_Width: 45 + m_Height: 4 + - m_X: 400 + m_Y: 349 + m_Width: 3 + m_Height: 2 + - m_X: 403 + m_Y: 411 + m_Width: 16 + m_Height: 3 + - m_X: 448 + m_Y: 473 + m_Width: 63 + m_Height: 38 + - m_X: 419 + m_Y: 473 + m_Width: 92 + m_Height: 3 + - m_X: 502 + m_Y: 0 + m_Width: 9 + m_Height: 124 + - m_X: 509 + m_Y: 0 + m_Width: 2 + m_Height: 511 + - m_X: 499 + m_Y: 62 + m_Width: 12 + m_Height: 62 + - m_X: 379 + m_Y: 124 + m_Width: 18 + m_Height: 23 + - m_X: 508 + m_Y: 171 + m_Width: 3 + m_Height: 340 + - m_X: 423 + m_Y: 124 + m_Width: 2 + m_Height: 48 + - m_X: 372 + m_Y: 210 + m_Width: 51 + m_Height: 13 + - m_X: 397 + m_Y: 186 + m_Width: 26 + m_Height: 37 + - m_X: 407 + m_Y: 186 + m_Width: 16 + m_Height: 48 + - m_X: 507 + m_Y: 217 + m_Width: 4 + m_Height: 294 + - m_X: 425 + m_Y: 282 + m_Width: 37 + m_Height: 67 + - m_X: 407 + m_Y: 282 + m_Width: 55 + m_Height: 4 + - m_X: 506 + m_Y: 264 + m_Width: 5 + m_Height: 247 + - m_X: 504 + m_Y: 312 + m_Width: 7 + m_Height: 199 + - m_X: 461 + m_Y: 124 + m_Width: 1 + m_Height: 235 + - m_X: 452 + m_Y: 234 + m_Width: 10 + m_Height: 125 + - m_X: 450 + m_Y: 282 + m_Width: 12 + m_Height: 77 + - m_X: 450 + m_Y: 407 + m_Width: 61 + m_Height: 4 + - m_X: 462 + m_Y: 407 + m_Width: 49 + m_Height: 104 + - m_X: 475 + m_Y: 359 + m_Width: 36 + m_Height: 152 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 8bb3a26eeba4ea9419ea6d5b9a4805f4 + pointSizeSamplingMode: 0 + pointSize: 70 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!28 &7756098031741986397 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-SemiboldItalic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071117192020202020201a18110700000000000000000000000000000000071117192020202020201a18120800000000000000000000000000000000000000000000000000000c151b1e2020202020201f0902000000000000000000000000000000000000000000000000000000000000060b0d2020202020201b191208000000000000000000000000080d0f202020202020200d0b05000000000000020b11132020202020201f1d180e020000000000050e15172020202020201c1a130a000000000000000000000000000000030c121420202020201e110f09000000000000000000020c121420202020202013110b010000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0e111213131212100e0b0903000000000000000000000000000000000000000000000000000000000000070d0f1415120c0a04000000000000000000040a0c1315140e0c0600000000000000000001080b111515110b08010000000000000000000a0f112020202020201c100e090000000000000000000000000000000000000000000000030c12141e2020202020200c0a040000000000000c151b1e202020202020201e08020000000000000000000000000000000000060c0e202020202020201b181208000000000000000000000000000000000000000000000000000000000b19242c2f3535353535352f2c24190b00000000000000000000000000000b19242c2f353535353535302d25190b0000000000000000000000000000000000000000000000000f1d293033353535353535341e160a000000000000000000000000000000000000000000000000000000000e192023353535353535302d261a0c00000000000000000002101b2225353535353535352220190e0000000006141f262935353535353534322b201202000000081622292c353535353535312e261b0d0000000000000000000000000006141f272935353535353426231c110400000000000006141f272935353535353528251e13050000000000000000000000000000000000000000000000000000000000000000000000030a0c12161e21232627282828272523211e16140e0c0700000000000000000000000000000000000000000000000003101b2224292b28211f170c000000000000000c181f22282b2923211a0f0200000000000009141d20262a2a26201d150900000000000004121d24273535353535353126231c11030000000000000000000000000000000000000000071520272a33353535353535211f170b000000000f1d29303335353535353535331d15090000000000000000000000000000010f1a212335353535353535302d251a0c00000000000000000000000000000000000000000000000000000719293640444a4a4a4a4a4a4441372919000000000000000000000000000719293640444a4a4a4a4a4a454137291900000000000000000000000000000000000000000000000c1d2d3b44484a4a4a4a4a4a4932281a0a00000000000000000000000000000000000000000000000000000e1e2b354a4a4a4a4a4a4a4542382a1a08000000000000000010202e373a4a4a4a4a4a4a4a4a352b1e0e0000021424313b3e4a4a4a4a4a4a4a473e3020000000051626343e414a4a4a4a4a4a4643392b1b0a0000000000000000000000031425323b3f4a4a4a4a4a493b382f22110000000000021424323b3e4a4a4a4a4a4a3d3a312313010000000000000000000000000000000000000000000000000000000000000000070b171e2127283236393b3c3d3d3d3c3a383632282924211a0f0b0500000000000000000000000000000000000000000a161e2d36393f403d3733291c120400000005131c2a34373d403e39362c1d1509000000000e192631353b3f403b353127190e0000000000122230393c4a4a4a4a4a4a473b382f211102000000000000000000000000000000000000021525323b3f494a4a4a4a4a4a4833291b0b00000c1d2d3b44484a4a4a4a4a4a4a4831271909000000000000000000000000000f1f2c35384a4a4a4a4a4a4a4541372a1a0800000000000000000000000000000000000000000000000000112436475459606060606060595447371e0e0000000000000000000000001124364754596060606060605a5448371f0e0000000000000000000000000000000000000000000015293b4c585d6060606060605d453828160200000000000000000000000000000000000000000000000006192b3c485e6060606060605b554838261200000000000000081b2e3e4b4f606060606060605e483c2b1905000b1f31424e536060606060605f5b4e3e1c0c00000e22344451566060606060605c564939261300000000000000000000000c1f32434f5460606060605e504c402f1808000000000c1f32424f545f6060606060524e41311e0b00000000000000000000000000000000000000000000000000000000000007101b222933363d38454b4e505253535251504d4b45383f39362d2220180d0900000000000000000000000000000000000a1b28323e4a4e5455524c473a3022120300041323313a474c5355544e493d3127190900000e1e2c37444b515555514b44372c1f0e0000000a1d30404d5160606060605f5c504c402f2010000000000000000000000000000000000000102032434f545e60606060605f5d463a2917040015293b4c585d6060606060605f5d44372715020000000000000000000000061a2c3d495e606060606060605a554837251200000000000000000000000000000000000000000000000002172c4054656e7575757575756f65543c2b19060000000000000000000002172c4054656e7575757575756f66543d2c1a060000000000000000000000000000000000000000001b3044586a737575757575756f5645321e090000000000000000000000000000000000000000000000000b2035485a70757575757575706655422d09000000000000000d22374b5c6475757575757575705a4835200b0011263b4e6068757575757575746c5b3a2a18040015293e51636c757575757575716756432e0b000000000000000000000012273b4f6169757575757573665e4c3626140100000012273b4f606975757575757568604e3a251000000000000000000000000000000000000000000000000000000000020f1a212e3639464b52585660636667686867676563605659544e4a3d37342b241d1208000000000000000000000000000003162839454b5c64696a6761584d4030211100122231414e5961686a69635b4b44372715020b1b2c3c495560666a6a666055493d2c1b0b00000f24394d5e6675757575757571655e4c3e2e1b0700000000000000000000000000000000071b2d3e4f6169737575757575756f5846331f0a001b3044586a73757575757575756f5544311d0800000000000000000000000c2135495b7075757575757575706655412d0900000000000000000000000000000000000000000000000002162838596e838a8a8a8a8a8a836f5a4935200a0000000000000000000003162839596e838a8a8a8a8a8a846f5b4935210a0000000000000000000000000000000000000000001e33485d73888a8a8a8a8a8d75604b36210b0000000000000000000000000000000000000000000000000d23384d62788a8a8a8a8a8a84705b372715020000000000000f253a4f647a8a8a8a8a8a8a8a78624d38220d0013293e53687e8a8a8a8a8a8a8b745947341f0a01172c41566c818a8a8a8a8a8a85715c392916030000000000000000000014293f54697f8a8a8a8a8a897c665443301c0800000115273754697e8b8a8a8a8a8a7e68523e2d1b07000000000000000000000000000000000000000000000000000009151d2d363e4a4f5761676d7276787b7c7d7d7d7c7a7876726e69635b554d483b382f221b1006000000000000000000000000091e324557606e797e807d76675f4d3f2e1c091d2f404e6068777d807e796c605544311d0f17293a495b63737b7f7f7b74635b493a2917040011273c51667c8a8a8a8a8a8a867c655c4a362210000000000000000000000000000000000d22364a5c697f888a8a8a8a8a8d76614c36210c001e33485d73888a8a8a8a8a8a8d74604b36200b00000000000000000000000e23384e63798a8a8a8a8a8a8a84705a372614010000000000000000000000000000000000000000000000091e32455672879c9f9f9f9f9f8c78624d38281602000000000000000000091e32455772879d9f9f9f9f9f8c78634e3828160200000000000000000000000000000000000000001b30465b70859b9f9f9fab8d78634e38230e000000000000000000050b0d100f0c0a04000000000000000b20354b60758a9f9f9f9f9d88725544311d080000000000000d22374d62778ca99f9f9f9f8f7a654f3a25100011263b51667b909f9f9f9fa98c77614c37220c00142a3f54697f949f9f9f9f9e89735746321e0a00000000000000000000132536586d82979f9f9fa79c8773604b35200e0000081d31445571869baa9f9f9f9b85715c4a36220c000000000000000000000000000000000000000000000000000d1927313d4a4e5c646e767c82878b8e9091929292918f8d8b87837e79726a6259514c40372e20190e00000000000000000000071b2d3e4b6075828e949592897d675d4b37230c24384c5e687e8a9295938c8173604b3d2c1a1f334658637986909495908679635846331f0a000b20354a6073869c9f9fab9f9c8c7a644f3e2d1b070000000000000000000000000000000f24394f647a8e9ea79f9f9f9b86715846331f0a001b30465b70859b9f9f9f9fab8d78634d38230e00000000000000000000000b21364b60768ba69f9f9f9f9d87725544311d0800000000000000000000000000000000000000000000000b21364b60768a9fb4b5b5bcab96806b5645321e090000000000000000000b21364b60768b9fb5b5b5bcab96816b5645321e090000000000000000000000000000000000000000182e43586d8398adb5b5a5907b65503b261000000000000000000e1920222525211f170c000000000000081d31445572889db2b5b49f8a75604b36200b0000000000000b20354a60758a9fb4b5b5a7927c67523d2712000e24394e63798ea3c5b5b5a48e79644f39240f0012273c52677c91a7b5b5b8a78b76614b36210c000000000000000000071c30435471869bb0b5c5b6a5907b66513c2c1906000b20354b60758a9fb4b5b5b5a38f7a644f3a2a170400000000000000000000000000000000000000000000000e1d2b37444b5b636f7a838a92979c9faba5a7a8a8a7a6a5ab9f9c99948e877f776f665e4f4b3e352b1e0e0000000000000000000d22364a5c6e8298a0a9aaa79e8c7b654f3a2a182b3b51667c8d9ea8aaab9f97816c5b49362121364c6176879ca4aaaaa49c8776614c36210c00071c304354677d92a4b6bcb4aa9a846f5c4a36220e000000000000000000000000000000152a40556a7f95aab8c5b5ab96816c563a29170400182e43586d8398adb5b5b5a5907a65503b25100000000000000000000000091e32455673889eb3b5b5b49f8a75604b35200b00000000000000000000000000000000000000000000000f24394e64798eaabbced9c9b39e8875604b3621100000000000000000000f243a4f64798fabbccfdac9b39e8975604b36210f0000000000000000000000000000000000000000162b40566b8095abc0bda8937d68533e281300000000000008131c2b35383a3a3733291c150700000000011527375b70859ab0c5bcab8d78624d38230d000000000000071c30435472879cb2c7bfaa947f6a553f2a15000c21364c61768ba7b9ccbba6917c66513c2711000f253a4f647a8fa4c7d5c5a38e78634e39230e0000000000000000000b20354a6074899eb4c9d3c3af99846f5a4935200a000e23394e63798ea9baced2c1ad97826d5847331f08000000000000000000000000000000000000000000000e1f2c3b4855606b79848f989fa9adb1b4b0acaaa9a8a8a9aaacafb2aea9a59d958b847b70645c4d493c2b190600000000000000000f24394f647a8ea0b2bec5b9aa9b85705847332034485971869cabb9c6bcb59f8c79634e39232a3f556a7f94a5b5c2c2b6a5957f6a55402a1500001325364b6073869cb1c3c8b3a28e79644e3c2b19050000000000000000000000000006192c3c596f8499aec4d3c2a6917c67513c27120000162b40566b8095abc0cabda8927d68533d28130000000000000000000000031628385b70869bb0c5cebbaa8d77624d38220d000000000000000000000000000000000000000000000012273d52677c92a7c8d9e0ccb8a7927d67523e2d1b07000000000000000013283d52687d92a7c9dae0ccb8a7927d67523e2d1a070000000000000000000000000000000000000013283e53687d93a8bdc0aa95806b55402b160000000000081825303c484d504f4c473a3325150500000000182d43586d8298adc2c9a5907a65503b2510000000000000001325365a6f859aafc4c1ac97826c57422d17020a1e33465774899eb3c9bea9937e69543e2914000d22374d62778ca9bacebba5907b66503b26110000000000000000000e23384d63788da8b9cddecab59f8c78634d3928160312273c52677c91a7c7d8dcc9b49f8a77614c3626140100000000000000000000000000000000000000000e1e2c3d49596274808c9aa2adb4b3aba89f9a97949393939495979a9da6a6abb1aa9f9990857a6e625a4935200b0000000000000000152a3f556a7f94aabecfd6c8b4a38c77614c3722374c62778ca4b5c9d7cfbcab947e69543f2930455b70859ab0c3d2d3c3b09b85705b46301b0000081c304354687d92a5b6cac0ad98836d5a4835200c000000000000000000000000000c2035495a73889eb3c8cab6a48c77614c37220c000013283e53687d93a8bdd2bfaa95806a55402b15000000000000000000000000192e43596e8398aec3d8c8a58f7a65503a25100000000000000000000000000000000000000000000000162b40556b8095aac0d5e7d5c5b09b85705c4a36220c0000000000000001162c41566b8196abc0d6e8d5c5b09b85705c4a36210b0000000000000000000000000000000000000011263b50667b90a5bbc2ad98836d58432e180000000000132536434a5a6265646158504333231300000000162b40556b8095aac0bda7927d68523d281300000000000000182d42586d8297adc2c4af99846f5a442f1a00031729395c71869cb1c6c0ab96816b56412c16010b20354a60758a9fb4c9bda8937d68533e281300000000000000000011263c51667b91a6c6cdc9c7bcab96816b5745321e09162b40556b8095aac0cac7c9baa9947f695443301c08000000000000000000000000000000000000000b1b2b3c495b637885969faab4b3a79e968f8985827f7e7d7e7e808284888c90969ca4acaea39b8f8278624d38230d0000000000000000162b41566b8096abc7d7e2cdbaa98d78634d3823394e63788eaabbcee2d6c5aa95806b55402b31475c71869cb1c6dbdcc7b19c87725c47321d0000011426364b6074879db2c3cab49f8b78624d3a2a17040000000000000000000000000d23384d62788da6b8cbc7b19c87725947341f0b000011263b50667b90a5bbd0c2ad98826d58432d18000000000000000000000001162c41566b8196abc0d2bca7927d67523d28120000000000000000000000000000000000000000000002152737596e8399aec3d8e3dfc8b4a38e79644f3a2917040000000000000417293a5a6f8499afc4d9eeddc8b4a38e79644e392917030000000000000000000000000000000000000e23384e63788da3c4c5b09a85705b37271502000000071c304354606d787a7a766a615041301c0c00000013283d53687d92a8bdbfaa95806a55402b1500000000000000152b40556a8095aabfc6b19c87715c3a291704001a2f44596f8499aec4c3ae98836e59432e1900071c30435472879db2c7c0aa95806b55402b16000000000000000000152a3f556a7f94aac7bab4b2b6b39e8975604b362111162839596e8499aec3b6b2b4b9b29d8773604b35200e00000000000000000000000000000000000003172939485a6379879ba3b4b2a79e9388817a75706d6a696869696b6d6f73767b80878e969ea8b0a095806b56402b16010000000000000013293e53687e93a9bacacec3b49f8a76604b3621364b61768a9fb4c5cfc9b9a7927d68523d282f44596e8499aebfccccbfae99846f59442f1a000000081d314455687e93a5b7cbbbaa96816c5847331f0a00000000000000000000000012273c52677c91a7c5d5c1ac97826c573b2a180400000e23384e63788da3c4d5c5b09a85705b37271501000000000000000000000014293e53697e93a8bed3bfaa957f6a55402a1500000000000000000000000000000000000000000000081d31445572879cb1c7dacfcacfc1ac97826d5847331f080000000000000a1f33465873889db2c8dddbddd1c1ac97816c5746331e0a0000000000000000000000000000000000000b21364b60768ba6b8c7b29d88725544311d080000000b20354a6072828d8f8f8a7f6a5f4d3a291704000010263b50657b90a5c9c2ad97826d58422d180000000000000013283d52687d92a7bdc9b49e89745847331f0a02172c42576c8197acc1c5b09b86705b38281502001325365a70859aafc5c2ad98836d58432e18000000000000000002152737586e8398adbaa99f9ca5b6a7937d68533f2e1c1e32455772879cb2b6a59d9ea8b6a5907b66513c2b19060000000000000000000000000000000000091e3346576278889da5b5b4a098887e756c65605557555453535455575a5861666b7279818a969fa5907b66503b261100000000000000000d22374c62778a9fb2b6bbb4a598826d5645321e3346576e8399a6b4bcb6ab9e8976614c3721273c52677c91a1b3b9b9b4a1917d67523c2712000000011527374b6074879db2c4c8b49e8a76614c382816020707070707070707070701152737566b8196abc0d4c3a7927d67523d28120000000b21364b60768ba6b8cbc7b29d88725544311d08000000000000000000000011263c51667b91a6bbd0c2ac97826d57422d18000000000000000000000000000000000000000000000b20364b60758a9fb4cac9bcb5bcc9b49f8a76614c3625130000000000000c21364c61768ba6b7cbc9c5c9d1c9b49e8976614c362110000000000000000000000000000000000000091e32455673889eb3c8b49f8a75604b36200b000005182b3b51677c91a0a5a99f927d675847331f1000000e23384d63788dabbcc5af9a85705a3726140100000000000010253b50657a90a5c9cdb9a88c76614c37210c00152a3f546a7f94a9bfc8b39d88735645321d0900182d43586d8298adc2c5b09a85705b3726140100000000000000081d31445571869cb1b49f8b879cb2b19c86715d4b372321364b60768a9fb4b29d878a9eb4ae99846f5a4935200a0000000000000000000000000000000009192f404c6175869ca6b7aa9f9382766960564f4b44373f3e3e3e3f40423a474c51565c646c76808a918775604b36210b00000000000000000b20344859687e919da5aa9f998777624c38281729394d627888999faba49c8d7d675847331f20354a607283959ea8a89e958372604a35200b00000000091d314556697e93a6b7cbb9a8947f6a5645321e1d1d1d1d1d1d1d1d1d1d1d1d1d31445570859ab0c5cab7a58d78624d38220d000000091e32455673889eb3c8cab49f8a75604b35200b00000000000000000000000e24394e63798ea3c5d6c4af9a856f5a362614010000000000000000000000000000000000000000000e23394e63798eaabbcebcab9fabb5baa9947e695443301c0700000000000f253a4f647a8fa4c4c1b5b0b5c1cdb9a8937e68533f2e1b080000000000000000000000000000000000031628385b70869bb0c5bcab8d78624d38230d00000b203448596f8499afbebab39e8876614c3e2e1909000b20364b60758a9fb5c7b29d87725544311d080000000000000e23384d63788dabbccfc6a38e79644e39240f0012273d52677c92a7bccab59f8a75604b36200b00162b40556b8095aac0c7b29d88725544311d08000000000000000b20364b60758a9fb4b39e897f95abb5a48f7a65503b2b243a4f64798fabbcaf9a848399aeb49f8c78624d382816020000000000000000000000000000021527374c5e6d8298a4b5ab9f8c7e6d61584b45383531272a292829292b2d2a33373b3d4a4e58616b777c77625645321e09000000000000000005182b3b4e60687c878d8e8b8377625947341a0b2035485a6278848b8e8d867c675f4d3a2a171c304354607380898e8e898073605443301c0700000000021527384b6075889db3c5c6b39e8875604b362632323232323232323232323232354b6075899fb4c9c7b29d87725a4835200b000000031628385b70869bb0c5cebbaa8d78624d38230d00000000000000000000000c21364c61768ba7b8ccc7b29c87725443301c0800000000000000000000000000000000000000000012273c51677c91a6c8cab59f8d9ca4b5b29c8773604a35200e000000000013283e53687d93a8bdb5a39ba3b5c4c6b19c86715d4b37220c000000000000000000000000000000000000192e43596e8398aec3c9a5907a65503b251000000d22374c62778b9fb4cacbb8a697816c5c4b37261401091d32455673889db3c8b49f8a75604b35200b0000000000000b20364b60758a9fb5cabba6917b66513c2611000f253a4f647a8fa4c8cfbcab8d78634d38230e0013283e53687d93a8bdcab49f8a75604b35200b000000000000000e24394e63798eaabbb29d87788c9fb5ae98836e594834283d52687d92a7c9ac97827e92aabbab96806b5645321e090000000000000000000000000000081d314455667c91a0b2b49f8d7d68604c463a3228201d1515141314141618171f21262d363a474c596266625948382816020000000000000000000d1d31424e5f67727879766e6259483b2a1806192b3c495a626f77797871665e4d41301c0c1325364455606a757979756b6055443625130000000000000a1e324556697f94a7b8cbb8a6937e6854434747474747474747474747474747474e64798ea8bacdc2ad98826d583c2b190500000000192e43596e8398aec3d9c8a5907a65503b251000000000000000000000000a1e33465773899eb3c8c9b49f8a75604b35200b000000000000000000000000000000000000000000152a40556a7f95aabfc8b39d88869cb1b6a4907b65503c2b190500000001172c41566c8196abc1b09b869ba6b8c9b5a48f7a654f3a2a18040000000000000000000000000000000001162b41566b8096abc0bda7927d68523d281300071b2d3e54697f94aabbced5c5b59f8d7a645544311d0d021528385b70859bb0c5bbaa8d77624d38220d000000000000091d31455673889db3c8bea8937e69533e2914000d22374d62778caabbcec9a5907a65503b25100011263b50667b90a5bbcebbaa8d77624d38220d0000000000000012273c52677c91a7c8b19c8671859aafb49f8b77624d382741566b8196abbfaa957f768b9fb4b39e8875604b36211000000000000000000000000000011426364b6074879cb2b3a1937e695f4e4233292528292825201d150a06000a161e21262a2b2a333b484d514d483b2b1a0a0000000000000000000000142431404d515b636461584d483b2b1d0d000e1e2c3c494d586164625a504c403023130008182737444b5660636460564b4437271808000000000000021628384b6175889eb3c5c4b29c8773605c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c687d93a8c6d5c4a8927d68533d28130000000001162b41566b8096abc0d2bda7927d68523d28130000000000000000000000031729395c71869bb1c6cebaa98c77624d37220d000000000000000000000000000000000000000001142637586e8398adc3c7b19c867f95aac0ae99836e5a4835200a00000004182a3a5a6f859aafbfaa957f889db3c8c2ad98826d5847331f08000000000000000000000000000000000014293e53697e93a8bebfaa957f6a55402a15000d22364a5c71869cb1c8cdc9cdbcab9b8573604b3b2b1805192e43586e8398adc3c8a48f7a654f3a2510000000000000021527385b70869bb0c5c0ab96806b56412b16010b20354b60758a9fb4cabda7927d68523d2813000e23394e63788ea3c5d6c8a48f7a654f3a251000000000000000162b40556b8095aac0b09a85707d92a7b8aa95806a5645313a5a6f849aafbca7927c6f849aafb8a7927d67523e2d1b07000000000000000000000000081c304354697e93a5b6a899836e604f413130353a3d3e3d3a363127211a131a2832363c3f403f3c3734373c37342b1d0d00000000000000000000000006142230393c494d4f4c473a342b1d0d0000000e1e2c353a474c4f4d493c382f22130500000919273138454b4e4e4b45383127190900000000000000000a1e3246576a7f94a7b8cab6a4917d727272727272727272727272727272727272728297acc2cbb8a68d78634e38230e000000000014293e53697e93a8bed3bfaa95806a55402b15000000000000000000000000192f44596e8499aec3d8c7a48f7a654f3a25100000000000000000000000000000000000000000081d31445571869cb1c6c5b09b85798da2b4b49f8b78624d3827150200000a1f33475873889db3bda8927e8297acc5c9b49f8a77614c362513000000000000000000000000000000000011263b51667b90a6bbc2ad97826d58422d18021527384f64798ea4b6c6b9b4b9c6b5a3937e695948342011162b41566b8096abc0bca7927d67523d281200000000000000192e43586e8398adc3c3ad98836e58432e1900081c30435472889db2c7bfaa957f6a55402a15000c21364b61768ba7b8ccbca7927c67523d271200000000000003162839596e8499aec3ae99846e75889eb3b39d8875604b36475873889db3c4a48f7a687d92a9bab09b85705c4a36220c0000000000000000000000000b20354b6073879db2b49e8a77614c423236434a4f5254534f4b4538352c1d3038454b51545554514c473b353025180f010000000000000000000000000004121d242c35383937332a20180d00000000000e19202a33373938352b231c11030000000009151d28323639393632281d1509000000000000000000031628394c6176899eb3c6c3b39e89878787878787878787878787878787878787878a9fb4c9c8b39d88735b4935210c000000000011263b51667b90a6bbd0c2ad97826d58422d18000000000000000000000001172c41566c8196abc1d1bca7927c67523d271200000000000000000000000000000000000000000b20354b60758a9fb4c9c3ae998470859ab0bbaa95806b5645311d0900000c22374c61778ca6b8c5a58f7a7b90a7b8ccbaa9947f695443301c07000000000000000000000000000000000e24394e63798ea3c5c4af9a856f5a362614091d3145566c8196acc2b9a89ea8b4c0b39e8977624c3f2f1a13293e53687e93a8bdbfaa947f6a553f2a1500000000000001162b41566b8096abc0c5b09b85705b38271502011426365a70859aafc5c2ac97826d57422d18020a1e32465773899eb3c8bfa9947f6a543f2a15000000000000091e32455772879db2c1ab96816c6b8096abb8a6927c67523e4c61768ca6b7b7a68b7661768a9fb4b4a38e79644f3a291704000000000000000000000215273851667b90a5b6a8957f6a594734414d5460646869686460564e493d31414d5660666a6b69666159514a43362d1f130500000000000000000000000000000a0e19212324211f170c0500000000000000060c181f22242320190e0900000000000000010a151d202424201d150a0100000000000000000000000b1e3346576a8095a8b9ccb9a79e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9fa8bacdc3ae98836e593d2c1a0600000000000e24394e63798ea3c5d6c5af9a85705a37261401000000000000000000000014293f54697e94a9bed3bfaa947f6a553f2a1500000000000000000000000000000000000000000e23384e63788da9bacec1ac97826c7d92a7b8b39e8875604b36200f000010253a50657a8fa5c4b8a78c7774899eb3c8c7b29c8773604a35200d000000000000000000000000000000000c21364b61768ba7b8c7b29d87725443301c0b20364b6075889eb3c8b49e899aa2b4b9a898826e5d4c382815263b51667b90a6bbc2ac97826d57422d180000000000000014293e53697e93a8bec8b39d88735645311d0900182d43586d8298adc2c4af9a846f5a452f1a00031629395c71869cb1c6c1ac97816c57422c170200000000000b21364b60768a9fb4bea9937e6962788c9fb4b09b85705c4a50657a8fa5c4b29d8873586d8298adc1ac97826d5847331f0800000000000000000000091d3145566e8398adb49e8a76614c3b434f5f67737a7d7e7d7a756d635b4b444d5f67757b7f807f7b77706660544a3d31231407000000000000000000000000000000060c0e0f0c0a040000000000000000000000040a0c0f0d0b06000000000000000000000002090b0e0f0b090200000000000000000000000000031729394c6176899eb4c6c5b9b3b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b4bac6d6c5a8937e69533e29140000000000000c21364b61768ba7b8ccc7b29d88725544311d08000000000000000000000011273c51667c91a6bbd1c1ac97826c57422d17000000000000000000000000000000000000000011273c51667c91a6c7d8bfa9947f6a75899eb3b8a6927d67523d2d1a070014293e53697e93a8beb39e89736c8196abc1cab6a5907b65503b2b18050000000000000000000000000000000a1e33465773899eb3c8b49f8a75604b3520182a3a51667c91a7b8c9ad9782849aafbfb2a0907b655645321d23394e63788ea3c5c4af9a846f5a3625130000000000000011263c51667b91a6bbcab59f8a75604b36200b00162b40556b8095aac0c7b29c87725d3b2a1804001a2f44596f8499aec4c4af99846f5a442f1a0000000000000f243a4f64798fabbcbba6917b665a6f8499aeb4a28e79644e53687e93a8bdaf9a846f5a657b90a5b7b49f8a76614c362513000000000000000000000b20364b6075899eb3ac97826d58463e4f61697c878f9293928f8982796b60555e677d8891949594918b857c72635b4d41322514060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3347586b8095a8bacdccc9c3b7b2b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b5bcc9d7ccb9a78e79644e39240f0000000000000a1e33465773899eb3c8cab49f8a75604b35200b00000000000000000000000f24394f64798ea4c6d6c4af9a846f5a3625130000000000000000000000000000000000000000152a3f556a7f94aabfd9c9a6917c666b8196abbcb09a85705c4a36210b00172c42576c8197acc1b09a857063798ea3b4c8c3ae99836e5948342009000000000000000000000000000000031729395c71869bb1c6bbaa8c77624d37221f3447596e8399aec5bcab927d7b90a1b3beb29c8774604b3c2c21364b61768ba7b8c7b29c87725443301c070000000000000e24394e63798ea3c5cfbcab8d78634d38230e0013283e53687d93a8bdc9b49f89745947341f0b02172c42576c8197acc1c6b19c87715c3a291704000000000013283d52687d92a7c9c5a38e796351667b90a5b6ac97826d58576c8197acc1ab96816c566073879db2baa9947e695443301c0700000000000000000010253a50657a8fa8b9a8907b65503a4a5c697f919da5a7a9a8a89e978b807361667c8d9ea7a9aaa9ab9f9a918579675f4f433224130200000000000000000000000000000000000000000000070b1e20202020202017150f050000000000000000000000000000000000000000000000000000000000000000000000000417293a4c61778a9fb4c7d7cab7a59d9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9fabbccfc9b39e8974604b35200b000000000000031729395c71869bb1c6cebbaa8d77624d38221414141414141414141414141421374c61768ca8b9cdc7b19c87725443301c0700000000000000000000000000000000000001142636586d8398adc2cfbcab8e796363788c9fb5b4a28e79644e3a291705182b3b5b70859ab0c1ac97816c5b70859bb0c6cab49f8b77624d37271501000000000000000000000000000000192e44596e8399aec3c8a48f7a654f3a2522374c61778b9fb4c9b59f8b776f8499a9bab6a4957f6a5a49352032465773889eb3c8b49f8a75604a35200b0000000000000c21364c61768ba7b9ccc9a5907b65503727150211263b50667b90a5bbcdbaa98c77614c37220c00152a3f546a7f94a9bfc9b49e89745847331f0a0000000001162c41566b8196abc0b8a78b76614c6073879db2b49f8a76615b70859ab0bda8927d6853546a7f95abbcb29c8773604a35200e000000000000000000152a3f546a7f94a9b49e8975604b3a4f647a8c9fb2b7b7b2a9a6a9aa9f95847572879cabb7b2a6a1a2a7afa39b8b7d69614f42312010000000000000000000000000000000000000000008131c20333535353535352c2a2217090000000000000000000000000000000000000000000000000000000000000000000000000c1f3447596b8196a9bacdc7b29d878687878787878787878787878787868d9fb5cac4ae99846f5443301c0800000000000000192e44596e8399aec3d9c8a58f7a65503a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a33475874899eb4c9c9b49f8a75604a35200b000000000000000000000000000000000000081c30435471869bb1c6cab49f8a75605a6f8499afc0ac97826c5846331f0b2034485973899eb3bda8937e6853687d92a8b9ccbbaa95806a5544311d08000000000000000000000000000001172c41566c8196abc1bca7927c67523d272d3d54697e93aabbc6af9a857063798b9fb4c3b49f8b78624d403028395b71869bb0c6baa98c77624d37220d0000000000000a1f33465874899eb3c9c1ac97816c5544311d080e23394e63788ea3c5d5c7a6917c66513a2a170412273d52677c92a7bccdb9a88c76614c37210c000000000417293a5a6f849aafc4b39e8973574654697f94a9baa9947f695973899eb3c4a48f7a644f4d62788c9fb5b6a5907b66503c2b19050000000000000004192e43596e8398aeaf9a856f554446586f8499abbcb7a59d9491949aa2a29a857a8fa5b6a59d908c8d929ca4a99f927f69604e3e2e1a0a0000000000000000000000000000000000000818253035494a4a4a4a4a4a423e35271700000000000000000000000000000000000000000000000000000000000000000000000004182a3a4c62778a9fb4c8c0ab96817171717171717171717171717171778cabbccfc6a9947f69543626140100000000000001172c41566c8196abc1d2bda7927d68523f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a5c71879cb1c6cdbaa98c77624c37220d0000000000000000000000000000000000000b20354b6075899fb4c9c7b29d87725651667c91a5b7b49e8a76614c36211122374c62778ca7b8c4a58f7a65506176899eb3c9c8b29d8874604b35200e00000000000000000000000000000014293e54697e93a9bebfaa947f6a553f2a364a5b71869bb1c8b9a8927d685b6b8095a5b6baa999846f5f4d392944596e8399aec3c7a48f7a644f3a250f0000000000000417293a5c71869cb1c6c8b39e8974604b3620110c21364b61768ba7b8ccc3ae98836e5847331f0b10253a4f657a8fa4c8d6c6a38e79644e39240f000000000a1f33475873889db2c6b09b86715b394c61768a9fb4b29d877362778ca7b8b7a68b76614c485a6f849aafc3ae99836e5a4835200a00000000000000021528385c71869bb1ab96806b56374c61768a9fb4b9a89d877e7c7e85919ea39b889eb3b29d877c77787d8698a0b49d927e685c4b382816030000000000000000000000000000000000132536434a5e606060606060575245351d0d0000000000000000000000000000000000000000000000000000000000000000000000000c203448596c8197aabbc9b49e8976615c5c5c5c5c5c5c5c5c5c5c667b90a6c9cdbaa88f7a644f3a250f000000000000000014293e54697e93a9bed3bfaa957f6a55545454545454545454545454545454545454596f8499aec4d7c7a48f7a644f3a250f0000000000000000000000000000000000000e23384d63788da9bacdc4af9a846f5a4b6073879db2b9a8937e69533f2f1c263b50657b90a5c5b7a68c77614c576c8297acc1cbb7a6917c66513c2c1906000000000000000000000000000011273c51667c91a6bbc1ac97826c574226374e63798ea3b5c9b49e8976614b6074879cb2beb3a1917c6757463241566b8196abc0bca7927c67523d2712000000000000001a2f44596f8499aec4ccb8a7917c6752402f19091e32465773899eb3c8c9b49f8a77614c3929170d22384d62778daabbcebba6917b66513c2611000000000c21374c61768ca6b7c3ae98836e594347586d8297adb6a5917c667b90a5c5b29d887358463c52677d92a7b9b49f8c78624d38271502000000000000091d32455673899eb3a8937d68533e50657a8faabbb49e8a77696769707c8a9ea69ea6b8a5907b66626268748298a0b49f8b7a645645321e0c00000000000000000000000000000000071c30435460737575757575756c63523b2b1905000000000000000000000000000000000000000000000000000000000000000000000005182b3b4d62788b9fb4c8b9a8947f6a56454747474747474747556a8095aabfc9b49f8975604b36200b000000000000000011273c51667c91a6bbd1c2ad97826d69696969696969696969696969696969696969696c8197acc1d1bca7917c67523c271200000000000000000000000000000000000011263c51667b91a6c7d7c1ac96816c5743546a7f94a9bab19c86725d4b3723293e54697e93a9beb39d887358474f647a8ea3b5c9c4af9a846f5b4935210a00000000000000000000000000000f24394e64798ea3c6c4af9a846f5a363144556b8096abc1c3ad97826d574656657b90a0b2bfb29d8775614b3d3e54697e93a9bebfa9947f6a543f2a1500000000000002172c41576c8196acc1d5c5b09b85715e4c3726141628395c71869bb1c6cdbaa995806a5746331e1020354b60758a9fb4cabea8937e69533e29140000000010253a50657a8fa5c4c0ab96806b56413a4f64798ea3b5af9a846f7f94a9beaf9a846f5a3a364b6075899eb3bcab95806b5645311d090000000000000b20364b60758ba7b8a6907b66513d52687d92a7c8ac96816c5951545f677b8b9fb3b8c4a08b76614c4d5660728298a4aa9c8675604b3a2a18040000000000000000000000000000000b20354a6072888a8a8a8a8a8a816c594834200d0000000000000000000000000000000000000000000000000000000000000000000000000d2034485a6d8297aabbc6b39d8875604b3625323232322c3c5a6f8499afc4c4af9a846f5544311d0800000000000000000f24394e64798ea3c6d6c7b19c867f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f8399afc4d4bfa9947f6a543f2a15000000000000000000000000000000000000152a3f546a7f94a9bfd3bea8937e6953364c61778a9fb4b6a4907b65503b2b2d42576d8297acc2af9a846f5a3a4a5c71869bb1c7cab59f8c78634d38281602000000000000000000000000000c21374c61768ca8b9c7b19c87725443354b6074889db3c8b7a58f7a6550394c5e6e8398a8b9b7a696806b5b4a3651667b91a6bbc1ac97826c57422d1702000000000000142a3f54697f94a9bed4c9b5a3907b655544311d1a2f44596f8499aec4d7c7b39e8976614b3e2d1c1d31445573889db2c8bfaa95806a55402b150000000013293e53687e93a8bdbda8937e68533e364a5c70859bb0b59f8c798297adc1ab96816c56413245566c8297acc2b39e8875604b36200f0000000000000c21374c61768ca1c5a48f79644f3e53697e93a8bda7927d68523b404d5d697e93a3b5b6a08b76614b3845546075869cb1a4957f6a5947341f090000000000000000000000000000000e24394e63798ea69f9f9f9f9f8b78624d3b2b1805000000000000000000000000000000000000000000000000000000000000000000000005192b3c4d62788b9fb4c9b7a6927d685443301c1c1c2035495a73889eb3c8c7aa957f6a553727150200000000000000000c21374c61768ca8b9cccab6a49c9494949494949494949494949494949494949494949499a1b3c7d6c1ac97816c57422c17020000000000000000000000000000000000132536586d8298adc2d7c7a5907b66503b47586d8298adc1ae98836e5948342b3c5b70859bb0c1ab96816c56413e53687e93a9bacdbcab96806b5645321e09000000000000000000000000000a1f33475874899eb4c9b49f8975604a3a51667b90a6b7c9b29d8773604a35404c6277899eb3c1b49f8c796354434e64798ea3c5c4af99846f5a442f1a0000000000000012273c52677c91a7bcd1d2c1b19c8673604b3e2e1f2d42576d8297acc2d6ccb8a796816b5c4a3a291b26375c71869bb1c6c1ab96816c56412c1701000002172c42576c8197acc1bba5907b66503b2d3e52677d92a7b8ab9580849aafbda8937d68533e28384f647a8fa4b6b8a6927d67523e2d1a0700000000000d22374d62778ca2b7a38e79634e3d53687d92a8bba6907b66513b303f4a6072859bb0c3a38e79634e39364556647a8fa1b49e8a77614c37271501000000000000000000000000000013253653697e93a8c5b5b5baa996816c594834200d0000000000000000000000000000000000000000000000000000000000000000000000000d2035495a6d8298abbcc4b19c8673604a3520100e23384d63788da7b8ccbaa9907a65503b25100000000000000000000a1f33475874899eb4c9d3c2b6b1a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9a9afb3bfd0d9c4af99846f5a442f1a0000000000000000000000000000000000071c30435471869bb0c6cdbaa98d78624d383a4f647a8fa3b5b49f8b77624d3735485a74899eb3c9a8927d68533d364c61768a9fb4c9c9b39e8875604b36210f0000000000000000000000000004172a3a5c71869cb1c6baa98c77624c46586e8398aec4bcab95806a544330344859697e93a3b5bbaa9a8572604a4c61768ba7b9c7b19c87725c3b2a18040000000000000f253a4f647a8fa4c7d7dec9b5a4947f695c4b3d2f2c42576c8197acc1c5b8b3b29f8c7a645847392c28385b70869bb0c5c2ad98826d58432d1803000005182b3b5b70859ab0c5c4a38e78634e3923364b6075889eb3b29d87879db2c4a48f7a654f3a25374b5c71869cb1c5b09b85705c4a36210b00000000000d22374d62778ca2b7a38e78634e3c51667c91a6c6a7927d67523d28304354667b90a5b6a7927d68523728384b5d6f849aafa895806a5544311d0800000000000000000000000000071c3043546e8399aec3cad8c7b49f8a77624d3b2b1805000000000000000000000000000000000000000000000000000000000000000000000006192c3c4e63798c9fb4c9b6a4917c66513e2e1b12273d52677c92a7c5c9b49f8a76604b36210b00000000000000000004172a3a5c71869cb1c6dbd3cac7beb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9c5c8d1dcc7b19c87725c3b2a1804000000000000000000000000000000000b20354a6074899eb4c9c9b49f8a75604b35374b5c71869bb1bbaa95806a5544384d62788da8b9bcab8f7a644f3a3346586d8298adc2ccb8a7927d67523d2d1a07000000000000000000000000001a2f44596f8499aec4c7a48f79644f4c61768a9fb4c9b59f8c78624d36252b3b4b6073859babbcb4a2927d6858475874899eb3c9b49f89745947341f0b0000000000000d22374c62778ca9bacdd2c1b5b09f8b7a645b4c40373c586d8297adc2b8a79e9da59d87766157493d36455671879cb1c6c2ac97826d57422d180200000b2034485973899eb3c8b7a68b76604b36213245566b8095abb7a59d9da5b6b7a68b76614c36212e3e54697f94aabbb4a28e79644e3a291704000000000c22374c61778ca1c6a48f7a644f3a4e63788ea8b9a9947f6954382725364a6073879cb2ad98836d5544312e3f50657b90a5b39e8874604b35200b000000000000000000000000000b20354a6074889eb3c8dde2cdbaa996816c594834200d0000000000000000000000000000000000000000000000000000000000000000000000000e2135495b6e8398abbcc2b09a85705c4b3722152737566c8196abc1c5b09b85705645321e09000000000000000000001a2f44596f8499aec4d9cebdb1aca4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4b0b4c1d1c9b49f89745947341f0b000000000000000000000000000000000d22384d62788da8b9cdc6b19c86715443302e3e53687d92a7b9b39d8874604b3b51667b90a6c6b59f8b76614b36293a4f657a8fa4b6cac5b09b85705c4a36210b00000000000000000000000002172c41576c8196acc1bca7917c675253687e93a9bac6af9a85705a4935181c304354647a8c9fb4c0b39e8976614c5c71869cb1c6baa98c77614c37220c0000000000000b20354a60758a9fb4c9c9b5a39ba39e8879665e504c4b5a70859ab0c5b39e89879da59a8475635b4f4b4c6075899fb4c9c1ab96816c56412c170100000d22374d62778ca7b8c8b39d88735645321e28384d62788c9fb4b7b2b2b6c3b29d88735846331f22374c62778b9fb4c0ac97826c5846331f08000000000b21364b60768ba8b9a5907b65503b4b6074899eb4ae99836e5645311d3043546a7f94abb39e8974604b3520384b5d72879db2a6907b66513b2611000000000000000000000000000e24394e63798ea7b8ccdfddd7c7b49f8a77624c3b2a18050000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4e63798c9fb5cab4a28f7a644f3c2c1d31445570859bb0c5c9ab95806b563828160300000000000000000002172c41576c8196acc1d6c5b19f978e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e9ba3b4c8cdbaa98c77614c37220c0000000000000000000000000000000011263b50667b90a5c6d6c3ae99836e59362621364b6075899eb3b7a6917c67523d54697f94a9beb29d877257463322374b5d71869cb1c7c8b4a38e79644e39291703000000000000000000000000142a3f54697f94a9bebea9947f69545b70859bb0c7baa8927d68523c2c191426364a5c6c8196a6b7b8a797826d5c596e8499aec3c7a48f79644f3a240f000000000000071c30435472879cb2c7c6b09b869ba69e887c6e65616065788b9fb4c6b19c867b90a0a29a85796c646161677d92a8bacdc9aa947f6a553f2a1500000011263b50667b90a5c5c5b09b85705b3828162035485a6f8499aec3c7c7cac4af9a846f5a3a29171f3448596e8499aec5b49f8a76614c36251300000000091e32455674899eb4a6917c67513c43546f8499aeb49e8975604b362025364d62788c9fb5a7907b665039292f3f576c8197acac97826d573b2b180500000000000000000000000013253654697e93a9c5d4cbc8c7cabaa996816c5947341f0c0000000000000000000000000000000000000000000000000000000000000000000000000f21364a5b6e8399aebfc0ae99836e5b493520354b6075899fb4c9bcab907b66513b26110000000000000000000000142a3f54697f94a9bed4c1ac97817a79797979797979797979797979797979797979797a859bb0c5d7c7a48f79644f3a240f0000000000000000000000000000000014293f54697e94a9bed3c0ab95806b56402b1e3245576c8196abbcaf9a85705b4a586d8298adc2ae99846f5939291b2e3f54697f94a9bacec1ac97816c5746331e0a00000000000000000000000012273c51677c91a6bcc1ac97816c5763788da3b4c9b49f8a76614b36210e08182d3e4c6176889db2bfb59f8d7a64556c8196acc1bca6917c67513c2712000000000000001325365a6f859aafc4b9a48f7a8a9fa69e90837b77767a869caabbc4af99846f8298a4a39b8a817976767d899eb3c6cfbcab907b66503b261100000014293f54697e94a9bec2ad98836d58432e18192b3c50667b90a5b6cadcd6c1ab96816c56412c17182a3b51667c91a6b8baa8937e695443301c07000000021628385c71879cb1a9937e69543e3653687d92a8b9a8917c665140302034485a6f849aafad98826d574632263b50667b90a5b29d8872594834200b0000000000000000000000071c3043546e8399aec3c4b7b2b1b6c2b49f8a77624c3b2a18040000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4f647a8ea1b3cab49f8c78634d3b2a394f64798ea9bacab49f8b76614c36210c000000000000000000000012273c51677c91a6bcd1c2ac97826d64646464646464646464646464646464646464646d8297acc2d1bca6917c67513c271200000000000000000000000000000002182d42576d8297acc2d2bda8927d68533d281628394d63788c9fb5b4a28e79634e5471869bb0c0ab96806b56412b1622374c61778a9fb4c9c9b49e8976614b3621100000000000000000000000000f243a4f64798fa4c7c4ae99846f546b8095aac1c3ad98826d5746331e0a00101e334657677c91a1b3bcab9c867360697e94a9bebea9947f69543f2a1400000000000000182d42586d8297adc2b8a28d787d929eb3a098908c8b8f9ca4b5c8c2aa95806a75869ca7a99f968e8b8c929ea7b9cccab49f8b76614c37210c000000132536586d8297adc2c0aa95806b55402b160e20354a6073879cb2c7d7d2bda8937d68533e28130d20364b6074889eb3c6b19c8673604a35200d00000000192f44596e8499aeac97826c5736364c6176899eb4b09b85715e4c3a2a2b3c52687d92a9b49f8a76614b3621374c61768ca6b7a58c77624d37220d00000000000000000000000b20354a6074889eb3c8b7a69d9ca4b6baa996806b5947341f0c0000000000000000000000000000000000000000000000000000000000000000000000000f22364a5c6f8499afc0bcab97816c5947343e53687e93a8c7c6b19b86715846331f0a00000000000000000000000f243a4f64798fa4c7d7c4af9a856f5a4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f556a7f94aabfd4bea9947f69543f2a1400000000000000000000000000000005182b3b5b70859bb0c5d6c5a48f7a654f3a25102135495b6f849aafc0ac97816c576075899fb4c9a7927d67523d28121f3347586e8398adc3cdb9a8937e68533f2e1b0800000000000000000000000c22374c61778ca9bac6b19c86716074879db2c7b7a5907b65503929170300031729394d5f6f8499a9bab5a4947e69677c91a6bcc1ac96816c57412c1702000000000000152a40556a7f95aabfb9a48e796b80969fb4aea5a1a0a4b1b5c2c9b5a48f7a646379899ea7b4aba4a0a1a7b3b9c5cdbcae99836e5847331f0a0000071c30435471869bb0c6bda8937d68533e2813071c304354697e94a9bacdd4c4a48f7a654f3a2510081d3144556b8196abc1b6a4907b65503b2b1905000000162b40556b8095aab09b857054433346586c8196a8b5a3917c6659473727364b61768a9fb4a8927d68523b2b33475873889db2a6907b66513b261100000000000000000000000e24394e63798ea7b8c8b29d88869cb1c7b49f8a77614c3a2a18040000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4f647a8fa2b4c9b49f8a77614c3939586d8297adc2c1ab96816c563a29170400000000000000000000000c22374c61778ca9bacdc7b29c87725443393939393939393939393939393939393d52677d92a7bcd2c1ac97816c57422c170200000000000000000000000000000b2034485974899eb3c9ccb9a78c77614c37220c192c3c51667c91a5b7b49e89766163788da9babcab8e79644f39240f182a3a50657b90a5b6cac6b19c86715d4b37220c00000000000000000000000b1f34475974899fb4c9b49e8974657b90a5b7c7b29d8773604a35200b0000000b1b30414d62788a9fb4c2b49e8a7764798ea4c6c4ae99846f59442f1a0000000000000013283d52687d92a7bdc6a5907b657281949fabb5c2b5bac6c9c9bcab9c86715c5b647a899ca4b4bbb6b6bcc9cccabdb09e8f7a654f3a29170400000b20354a6074899eb4c4c5a5907b65503b2610001325364c61768a9fb4c9c5b7a68c76614c37210c021527374e63798ea3b5c2ae99836e594834200b00000011263c51667b91abb39e8974604b353a4d62778a9eb4b39d8877615544373346576e8398adaf9a846f5948342a3a5a6f849aafa9947e69543f2914000000000000000000000013253654697e93a9c5c4af9a847f95abbcbaa896806b5847331f0c0000000000000000000000000000000000000000000000000000000000000000000000001022374b5c6f849aafc0baa995806a5745465771869cb1c6c2a6917c66513c27110000000000000000000000000b1f34475974899fb4c9c9b49f8a75604a352424242424242424242424242424253a4f657a8fa4c8d8c4ae99846f59442f1a0000000000000000000000000000000d22374d62778ca7b9ccc9b39e89745947341f0b0e20354b6074879db2b9a8937e68667c91a6c7b49f8a76604b36210b0c20354a6073879db2c8c9b5a48f7a644f3a2a17040000000000000000000004182a3b5c72879cb1c7b9a88c766d8298adc3c0aa95806a5443301c0700000000122035495a6a7f94a4b6b9a898836e778ca8b9c6b19c86715c3a2a170400000000000010253b50657a90a5b0b0a8907b65606c7f8c9ca4afb4bac7bbb4ab9f8d7b65504a5c647986969faab1b5bcc9bcb4af9f96806b5d4b371c0c0000000e23384d63788da8aeaeaea78d78634d38230e00081f3347586d8297abb0b0b09d88735847331f0a000921364a5b71869baeaeae9f8b78624d37220d0000000c22374c61778b9fb4a78f7a644f3a344859697f94a3b4a69983736055483b3951667b90a6b49f8b77624d372d43586d8298adab96816b56412c1600000000000000000000071c3043546e8399aec3c1ac9681788c9fb5c6b49e8a77614c3a2a17040000000000000000000000000000000000000000000000000000000000000000000000081b2e3e50657b8fa2b4c7b39e8975604b4b61768b9fb4cab6a48c77614c37220c00000000000000000000000004182a3b5c72879cb1c7cebaa98c77624d37220f0f0f0f0f0f0f0f0f0f0f0f0f22384d62778daabbcec6b19c87715c3a2a1704000000000000000000000000000010263b50657b90a5c5d6c5b09b86705b3b2a1804081d3144556a7f94a9bab19c86716a7f94aabfb29c87725645321e09071c3043546a7f94aabbcec2ad98826d5847331f0800000000000000000000001a2f445a6f8499afc4c6a38e79768a9fb4c9b4a28d78634d362513000000000006192c3c4b6074869cb1beb2a0907b74899eb4c9b49e89745847331f0a0000000000000e23384d63788d9a9a9a988a77614c616a7b86919a9fa9a4aa9f9a8d7e685d4b3e4a5b6375808b959c9faba5ab9f9a918173604b3f2e1c0000000011263c51667b9199999999988974604b35200b000417293a4e63798d999a9a9a98836f593a29170400071a2d3d52677d929999999995806b55402b160000000a1f33475870859ab0aa95806a553d2c3b4b6073859ba6b3a198827362594b444b6074889eb3ab947f6a543e2d41576c8196acad97826d58422d18000000000000000000000b20354a6074899eb3c8c6a8937e6f849aafc2b9a895806b5847331f0c0000000000000000000000000000000000000000000000000000000000000000000000001023374b5d70859ab0c1b8a7937e695550657a8fabbcc7b19c87725947341f0a000000000000000000000000001a2f445a6f8499afc4d8c7a48f7a644f3a250f00000000000000000000000b20354b60758a9fb4c9c9b49e89745847331f0a000000000000000000000000000014293e54697e93a9bed3c2ad98836d58432e1800011426374c61778a9fb4b5a48f7a6e8398adc3ae99836e5938281603001325364d62778b9fb4cac9b49f8a77614c3625130000000000000000000002172d42576c8297acc1bba5907b7d92a8bac6b09a85705a493518080000000000000e1d314556657b8fa0b2beb29c8775869bb1c6b9a88c76614c37210c0000000000000b20364b607484858585837b655947505d65747c848a8e8f8e8a857b68604e3f2e3d4957616b7880868b8e8f8e8b847c6d6055443121110000000011273c51667c8384848484837a645544311d0800000c21364a5b667c848585858378634d38230e0000000f253a4d5f687d8384848484816d57422d1802000004182a3a54697e94a9b09b86715b49353144556277889da7b2a098847768605552556c8196abb19c86715c4a3640566b8095abad98836e58432e19000000000000000000000f24394e64798ea7b8ccbaa88e79667c91a4b6c6b49e8a76614c3a2917040000000000000000000000000000000000000000000000000000000000000000000000081c2e3f50667b90a3b5c5b29d87746054697f94a9c9c1ac97826c573a2a180400000000000000000000000002172d42576c8297acc1d1bca7927c67523d27120000000000000000000000081c30435472879db2c7cdb9a88c77614c37210c0000000000000000000000000002172d42576c8297acc1d4bfaa957f6a55402a150000091f3447596d8398adc2ad988371869cb1bfaa95806a55402b15000008203448596e8499aec4cdbaa9947f695443301c0700000000000000000000152a3f546a7f94a9bfbca7917d849aafc6baa8927d68533c2c1900000000000000021527384b5d6d8298a7b8b6a595808298adc2c6a38e79644e39240f000000000000091d31455660707070706e655d4b3a3f4b5560676f75787a797670655d4e4231212c39464b59626a7176797a78766f665e4b4437271503000000000f24394d5e666f6f6f6f6f6d645c4b372715010000071a2d3d4c5e666f7070706e635a4935200c0000000a1e30414e60686e6f6f6f6f6d63523f2a15010000000d23384d62788da3b5a38e79634e3929374859647a899ea7b2a29a897d746c686666798ea9b5a48e79644f3740556a7f95aaae98836e59432e190000000000000000000013253654697e93a9c5c9b49f89756073879cb1c4b9a895806b5847331f0c0000000000000000000000000000000000000000000000000000000000000000000000001123384c5e70859bb0c1b7a5917c67596e8398aec3c3a7927d67523d27120000000000000000000000000000152a3f546a7f94a9bfd4bfa9947f6a543f2a150000000000000000000000011426365a70859aafc5d6c6a48e79644f39240f0000000000000000000000000005182a3b5b70859ab0c5d1bca7917c67523c2712000004182a3b4f657a8fa4b5b49f8b778a9fb4c8a7917c67523c2712000005182b3b51667b91a6b7cbc7b29c8773604a35200d0000000000000000000012273d52677c92a7bcc0ab95808d9fb5c9b49f8a76614b36210e00000000000000000a1a2e3f4c6177899eb3c0b49f8b8196acc1bba6917c66513c271100000000000002152738454b5b5b5b5b58504b3f2e2e37444b52566063656461584f4b3f3124141b29323b484d5558616465636157514c403127190900000000000a1d30404d515959595959584f4b3e2e1909000000000f1f2f404c515a5b5b5b584d493c2c190600000001132331424e53595959595957524535230f000000000b2035485a70859bb0ac97816c5746332b3b4a5c647a899ba3b4a79e9388817d7b7b7e8a9fb4ab96816c554441566b8096abad98826d58432d18000000000000000000071c3043546e8399aec3c5b09a857055687e93a6b7c6b49e8976614c3a2917040000000000000000000000000000000000000000000000000000000000000000000000091c2f4051667c91a3b5c3b09b85715d72889db2c7b7a58d77624d38220d000000000000000000000000000012273d52677c92a7bcd1c1ac97826c57422d17020000000000000000000000182d42586d8297adc2d1bca6917c67513c2712000000000000000000000000000b1f34475973889eb3c8d4c4a48e79644f39240f0000000c22374b5d71869cb1baa9958095a9babbaa8e79634e39230e0000000d20354b6074889db2c9cab6a5907b65503b2b18050000000000000000000f253a4f647a8fa4c7c8b39e889eabbcc3ad98826d5746331e0a000000000000000000111f344759687e93a2b4baa99e889eb3c8bea9937e69543e2914000000000000000a1a27313645454545433a372e211927313538454b4e4f4e4c473a372e2114060b161e2b34373a474c4e504e4b463939301d150900000000000000122230393c4444444444433a372e201000000000000112222f383b444545454338352c1e0e0000000000051323313a3d4444444444423f352717060000000006192b3c52677c91a5b49e8976614c3b2b2e3e4a5c647885959fa9b3a69d97929091939fa9bab39d8874604b42576c8297acac96816c57412c170000000000000000000b20354a6074899eb3c8c0ab95806b566075889db3c5b9a895806a5846331f0b0000000000000000000000000000000000000000000000000000000000000000000000001124384c5e71869bb1c2b5a38f7a65768ba5b7c7b29d87725a4834200b00000000000000000000000000000f253a4f647a8fa4c7d8c4af99846f5a442f1a000000000000000000000000152b40556a8095aabfd3bea9947e69543f2914000000000000000000000000000d22374c62778ca7b8cccbb7a68b76614b36210c000000081b2e3f53687e93a8b9b39e899eb3c7b49f8a75604b36200b000000081d3144556b8095abbccfc3ae99836e59483420090000000000000000000d22374d62778ca9bacbb8a69ea6b8c9b7a5907b65503929170300000000000000000004182a3a4a6072859baabbb8a79ea7b8ccc1ab96816c56412c1701000000000000000a151d20303030302e25231c1109151d20273136393a39373329221b10030000030d192022293337393a39363329241d1201000000000000000004121d24272f2f2f2f2f2e25221b100200000000000004121d24262f3030302e2320190e0000000000000005131e25282e2f2f2f2f2d2a2317090000000000000e20354b6074879db2a8957f6a594834202e3e4a5a6274808a979ea8adaca7a5a6a8b4bab9b3a6907b66513c5a6f849aafa9947f69543f2a140000000000000000000f24394e64798ea7b8ccc3a6917b6651566a7f94a7b9c6b39e8976614c3a2917040000000000000000000000000000000000000000000000000000000000000000000000091d2f4051677c91a4b6c1ad98836e7a8fa4c3c2ad98826d583c2b190500000000000000000000000000000d22374d62778ca9bacec7b19c87725c3b2a1804000000000000000000000013283d52687d92a7bdd2c1ac96816c57412c170200000000000000000000000010253b50657a90a5c5d5c8b39d88735746321e0a000000001021364b6175899eb3b8a79ea7b8c6b19c86715544311d08000000011426374d62788c9fb5cacab49f8b77624d3726140100000000000000000b20354b60758a9fb4c9c5b8b3b8c5c7b29d8774604b35200b00000000000000000000000c1c30435463798c9fb4c3b8b3b8c5d5c3ae99836e59442e1900000000000000000002090b1b1b1b1b19100e08000001080b151d20232524211f170c08000000000000050b0d171f21242523211e170b090000000000000000000000000a0f111a1a1a1a1a180f0d0800000000000000000000090f111a1b1b1b190e0c06000000000000000000010b1113191a1a1a1a18150f0600000000000000081d314455697e93a5b49e8a77624d4030202d3c4956606b78828992989da5a3a4a6a5a4a79e9992826d58485a73889db3a6917c66513c271100000000000000000114263654697e93a9c5cab6a48c77614c4c6176899eb3c7b9a795806a5846331f0b0000000000000000000000000000000000000000000000000000000000000000000000001220354a6073869cb1c3b49f8b777e93a8bec4a8927d68533d28130000000000000000000000000000000b20354b60758a9fb4c9c9b49f89745947341f0b000000000000000000000010253b50657a90a5c8d9c3ae99846e59442f190000000000000000000000000014293e53697e93a8bed3c5af9a85705a3929160300000000091e3246576c8196acc0b8b3b8c5c3ad98836e583727150200000000092035485a6f849aafc5cebbaa957f6a5544311d080000000000000000081c30435472879cb2c7d5cbc8cbd1c0aa95806b5443301c080000000000000000000000001325364a5b6b8096a5b7cac8ccd5dbc6b19b86715c3929170300000000000000000000000606060603000000000000000002090b0e100f0c0a040000000000000000000000040a0c0f100e0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374b6075879db2a898826d5e4c3c2b1e2c38454b5a626d767d83878c8e8f90908f8c89837d74604b4d62788da6b7a58d77624d38220d0000000000000000081c3043546e8399aec3c7b29c8772584746576b8095a9bac5b39e8976614c392917030000000000000000000000000000000000000000000000000000000000000000000000071c304354677d92a4b6bbaa947f8197acc1b7a68d78634e38230e000000000000000000000000000000081c30435472879cb2c7cdbaa98c77614c37220c00000000000000000000000d23384d62788daabbcec6b19c86715c3a291704000000000000000000000002172c42576c8197acc1d6c1ac97826c57422d170000000000031628394e63798da2b4c8c8ccd6bfaa947f6a553f2a15000000000006192b3c51677c91a6b8cbc8b29d8874604b35200e0000000000000000011426365a6f859aafc4dae0ddddc8b4a28d78634d3626140100000000000000000000000008182d3d4b6175879db2bfd0e0e7dec8b39e89735746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0b0b0b0a03000000000000000000000000000000000000000000040a0c12151715130e0c07000000000000000000000000000000000000000000091e324556667c90a1b2a0917c665a4939291a28323c484d5761686e7277797a7b7b7a77746e6760564554697e93a8b29d87725a4834200b00000000000000000b20354b6074899eb3c8c2ad97826d583a394c62778a9fb4c8b9a7957f6a5746331e0b0000000000000000000000000000000000000000000000000000000000000000000000001325364b6073879cb2c3b19c86849ab0c5b39d88735b4935210c000000000000000000000000000000011426365a6f859aafc4d7c7a48f79644f3a240f00000000000000000000000b20354b60758a9fb4cac9b39e89745847331f0a000000000000000000000004172a3a5a70859aafc5d4bea9947f69543f2a140000000000000b2135495b6f849aafc4d4e0d7c7a6917c66513c27110000000000000e20364b6075889eb3c8cbb7a6917c66513c2c19060000000000000000182d42576d8297acc2d7ece9d7c7b09b85705b4935180800000000000000000000000000000f1e324657667c91a1b3c6d7e9e0ccb8a78b76614c36210c000000000a0f11202020202020201f190c0a0400000000000000000000000000000000000000020b11141f20202020202018161006000000000000000000000000000002090b1b202020201f180c0a0300000000000000000000000000000000050b171f21272a2c2b2824211a0f0802000000000000000000000000000000000000031628384c5e6e8399a7b39e897862574638281b1d2b3439464b525859616365666564625959524b454a6073869bb1ac96816c573c2b190500000000000000000f24394e64798ea7b8ccc5a8937d68533e3447596c8197aabbc5b39e8976614c392917030000000000000000000000000000000000000000000000000000000000000000000000081d314455687d92a5b7b6a49c8b9fb4c3ae98836e593d2c1a0600000000000000000000000000000000182d42576d8297acc2d1bca7917c67523c27120000000000000000000000081d31445572889db2c7ccb9a88c76614c37210c00000000000000000000000a1f33475873889eb3c8d8c8a6917b66513c2611000000000000061a2c3d51677c91a6b7cbdfcdbaa98d78634d38230e000000000000091d3145566b8096abc0d1c4af9a846f5a4935200a0000000000000000152a40556a7f95aabfd4eae1cdbaa9937d68533c2c19000000000000000000000000000000031628394c5e6e8399a8b9cde1e8d6c5a38e79634e39240e000004121d242735353535353535342e211f170c000000000000000000000000000000000006141f2629343535353535352d2b23180a0000000000000000000000000a161e213135353535342d211e160b00000000000000000000000000000d181f2933363c3f41403e39362d201d15090000000000000000000000000000000000000a1a2f404d6278899eaba79b8575615645392c1e19202932363d3a474c4e4f51504f4c483b3d364354667c91a3b5a38f7a644f3a240f00000000000000000114263654697e94a9c5ccb9a78e79634e392a3b4d62788b9fb4cab8a7947f6a5746331e0b0000000000000000000000000000000000000000000000000000000000000000000000011426374b6074879db2c2b6aa9faabbc5a8937e69533e29140000000000000000000000000000000000152a40556a7f95aabfd4bea9947f69543f2a140000000000000000000000011527375b70859ab0c5d6c6a38e79644e39240f00000000000000000000000c21374c61768ca6b8cbcebbaa8d78634e38230e000000000000000f20354b6074889db2c8d8c9b49f8975604b35200b000000000000021527384e63788da2b4c8cab59f8c78634d382815020000000000000012283d52677d92a7bcd2e7dec9b49f8a76614c36210e000000000000000000000000000000000b1b2f404d62788a9eb4c2d2e7d0bba6917b66513c26110000122230393c4a4a4a4a4a4a4a4a433733291c0c000000000000000000000000000000011424313b3e494a4a4a4a4a4a433f35281806000000000000000000000a1a283236464a4a4a4a4a433632291b0b000000000000000000000002101d2a343a464c52555655534e4a3d3631271911030000000000000000000000000000000000122034485a657c8d9fb4a39a84746057493c30211a161e21282a3437393a3b3b3a37342b30404a6072859bb0b09b85705c4b37220d0000000000000000081c3043546e8499aec3c9b39e8974604b352035495a6e8398adbfc5b39e8976614b392816030000000000000000000000000000000000000000000000000000000000000000000000091d314455687e93a6b7c8bbb4bbc8b9a78e79644e39240f000000000000000000000000000000000012283d52677d92a7bcd2c1ac97816c57422c17020000000000000000000000182d43586d8298adc2d1bba6917c66513c2711000000000000000000000010253a4f657a8fa4c4d5cab49f8a75604b36200b00000000000000081d3144556a7f95aabbcec6b09b86715443301c08000000000000000a2135495b70859ab0c5cfbcab96806b5645321d090000000000000010253a50657a8fa5c8d9d3d4c4ad98826d5746331e0a0000000000000000000000000000000000122035485a697f94a4b5c9d9d3bea8937e69533e2914000a1d30404d51606060606060605f594c473a29180800000000000000000000000000000f1f31424e535f60606060606058534635231000000000000000000002162838454b5b606060605f584b4639291a0a0000000000000000000110202e3b484c5861676a6c6a68635b544b44372e2113050000000000000000000000000000000005192b3c4c5e6a7f94a0b2a29a8475635a4d40362d201c1313181f222425262625222731414d5e6a7f95a3b4a2917c66513e2e1b0700000000000000000b20354b6074899eb3c8c4af99846f5443301c2c3c4e64798ea1b3c7b8a7947f6a5746321e0a0000000000000000000000000000000000000000000000000000000000000000000000011527374b6074889db2c4cecacec9b39e8974604b35200b000000000000000000000000000000000010253a50657a8fa5c8d9c4ae99846f59442f1a000000000000000000000000162b40556b8095aac0d3bea9937e69543e2914000000000000000000000013283e53687d93a8bdbdc8b29c87725544311d0800000000000000011527374c62778b9fb4c2c3ad98826d583626140100000000000000061a2c3d52677d92a7b8c6c9b39e8875604b36200b000000000000000d23384d62788daabbbdbdc9b7a6907b655039291703000000000000000000000000000000000005192b3c4b6073869cabbcc9bdbdab96816b56412c16000f24394d5e6675757575757575746e61584736251300000000000000000000000000071a2d3d4e6069747575757575756d64533f2b16010000000000000000091e324556607075757575746d6157463828150200000000000000000f1f2e3e4b59626d767c7f81807d79726960554b3f30231305000000000000000000000000000000000d1d2f404f616d8298a0b1a29a8678665e4e4a3d35302522201c13131c2023283237444b5f677c8d9fb5a99a84705e4d3920100000000000000000000f24394e64798ea7b8ccc9aa957f6a5536261421364a5c6f8499afc1c5b39e8875614b392816030000000000000000000000000000000000000000000000000000000000000000000000091d314556697e93a6b8bdbdbdbdae99846f5443301c0800000000000000000000000000000000000d23384d62788daabbbdbdb19c87715c3a2a1704000000000000000000000013283d53687d92a8bdbdbdab96816c56412c170000000000000000000000172c41566c8196a8a8a8a8aa99846e59372715020000000000000000091f3448596d8298a3a8a8a5937e69543e29140000000000000000000f21364b6075889ea8a8a8a8a7927d6752382715020000000000000b20354b60758a9fa8a8a8a8ab9d8773604b35200b000000000000000000000000000000000000000e1d314455647a8d9faba8a8a8a898836e59432e190011273c51667c8a8a8a8a8a8a8a898376615443301c0f0000000000000000000000000c21364a5b697e898a8a8a8a8a8a826d58432d180300000000000000000b21364b6076858a8a8a8a898275615645321d140300000000000009192d3d4b5c6477828a91949695938e877e74655d4d413023120000000000000000000000000000000000112132434b607382979fb4a49c897c6f635b504a4336383530252530353838454b55606b7d8a9eabb49f8b79634e40301d0200000000000000000114263654697e94a9c5cfbcab907b65503b26101a2d3d50657a8fa3b4c8b8a7947f695745321e0a0000000000000000000000000000000000000000000000000000000000000000000000021527384b6075889da8a8a8a8a8a8947f69543626140100000000000000000000000000000000000b20354b60758a9fa8a8a8a89e89745847331f0a000000000000000000000010263b50657b90a5a8a8a8a899836e59442e1900000000000000000000001a2f455a6f849393939393928c7c66503b261100000000000000000005182a3b4c617785909393918776614c37210c000000000000000000091e324556667c8a91939393939385705645311d09000000000000081d31445572879393939393928c7d675443301c0800000000000000000000000000000000000000011527374b5d697e8c92939393939385715b46311c000f24394d5e6c8197a49f9f9fa99f988472604a3d2d1a0a0000000000000000000005182b3b4e63798c9ea89f9f9f9f8c79634e39230e000000000000000000091e3245566277889da9a89f988474604b433222110000000000021527374a5b647a89979faaaaabaaa8a49c94867b675f4d41301f0e0000000000000000000000000000000003151d314455607281959faba79e9184796e656054524d4a433636434a4d515660697480919ea8b09e937e685b4a362212000000000000000000081c3043546e8499aec3cab49f8b76614b36210c0f23374b5d70859bb0c2c5b39e8875604b3828160300000000000000000000000000000000000000000000000000000000000000000000000a1e324556697f939393939393938f7a644f3a240f000000000000000000000000000000000000081d31445572879393939393938c77614c37210c00000000000000000000000e23384d63788d93939393939386715c46311c000000000000000000000012273c52677d7e7e7e7e7e7d78665e4c38230f000000000000000000000d1f34475961737b7d7e7c75615847331f0a000000000000000000031628384c5e66777c7e7e7e7e7e7e74604b36200b0000000000000114263751667c7e7e7e7e7e7d79675f4d36261401000000000000000000000000000000000000000009192e3f4f6069797d7e7e7e7e7e7d67523d2712000a1d30404b6074869ca8bab5bab4a2947f695c4a382816020000000000000000000b203448596d8298aab9c6c0ae99836e5b4a36210c000000000000000000021628384859647a8b9fb4b4a397826d614f402f1f0e00000000081d31445563798a9ea7b4b4aba5a4a7aeb1a49c8b7d675f4d3d2c1a06000000000000000000000000000000000114263744546072808d9ea6b3a29a8c837b736c676260545c5c546062676d757e87969eb4b49f96806b604e3d2d1a040000000000000000000b20354b6074899eb3c9c6b19c86715746331e0a081c2e3f51667c91a4b6c9b8a6947f695645321e0a0000000000000000000000000000000000000000000000000000000000000000000000031628384b61757e7e7e7e7e7e7e7e73604b36200b0000000000000000000000000000000000000114263751667c7e7e7e7e7e7e7e76614c36210c00000000000000000000000b20364b60747e7e7e7e7e7e7e7d67523d281200000000000000000000001025394d5f67686868686868635a4c402f1c090000000000000000000004182a3a475560666868676157473a291704000000000000000000000a1a2f404c586167686868686868605645311d09000000000000000924394d5e66686868686868635b4d4130180800000000000000000000000000000000000000000000102032424f5b63686868686868675f4d3925100000121e32455663798a9fb4becdc0b49f8b7a645645321e110000000000000000031628394d62778b9fb4c8c8b4a28f7a644f3d2d1a07000000000000000000000a1a2b3b4b5c677d929eb0b1a0947f695e4c3d2c1b0b0000000b20364b6074869ca8b8a99f968f8e9199a1b4a99f8d7d675b493521120000000000000000000000000000000000091926364354606a7b8899a1b1aa9f989087817c78757372717275787c8288939da5b0aa9f948172604a42311f0f000000000000000000000f24394f64798ea7b9ccc1ac97816c5739291703001120354a6073869cb1c3c5b39d8875604b3828160200000000000000000000000000000000000000000000000000000000000000000000000a1e324657616868686868686868605544311d08000000000000000000000000000000000000000924394d5e6668686868686868615846331f0a0000000000000000000000081d3144556068686868686868675f4d3a251000000000000000000000000a1d30414d525353535353524d493c2f22110000000000000000000000000c1c2a37444b515353514b4639291c0c00000000000000000000000012222f3a474c525353535353534b4538271502000000000000000a1d30404d515353535353524e4a3d3023130000000000000000000000000000000000000000000000021424323d494e525353535353524d41301e0a000002162838495b687e93a0b2c3cebaa99c8674604b402f1c0c00000000000000091e3246576b8095aabbcec1af9a846f5c4a361f0f0000000000000000000000000d1d2e3e4d5f6b8096a1b3b49f8c7c665b493a291808000417293a52677d92a4b5b49f8b817a797c83919faaab9e8a79634e402f1c09000000000000000000000000000000000009182636434a5e657783909ca4b0ada59d96928d8a888787888a8d91979ea6b2b3a59d8c7f6c605443302414010000000000000000000114263654697e94a9c5d5c4a7927d67523d28120000071c304354687d92a5b7cab8a6937e695645321e0a000000000000000000000000000000000000000000000000000000000000000000000003162839464b53535353535353534b4437271502000000000000000000000000000000000000000a1d30404d51535353535353534c463a291704000000000000000000000002152737444b53535353535353524d41301e0a000000000000000000000001132330393c3e3e3e3e3e3d38352c1e1104000000000000000000000000000c192731353b3e3e3c3632291b0c0000000000000000000000000004121c2a33373c3e3e3e3e3e3e3631271a0a000000000000000000122230393c3e3e3e3e3e3d39362d1f130500000000000000000000000000000000000000000000000006141f2c35383d3e3e3e3e3e3d39302313010000000a1a2c3d4e606e8298a5b6c8c7b6a496816c5e4c3a2a18040000000000011426364b6175899eb3c8c9b5a3907b65503e2e1b0100000000000000000000000000102030414b60728399a4b6aa9e8979635846362614010a1f33465870859bb0b3a1917c6b6564676e7c8c9fb4a89b85705e4c38230f00000000000000000000000000000000000008182530404c59626f7b86929ba3acb2aca7aa9f9e9c9c9d9fa9a6acb3b0a79e94877b6a614a433625130600000000000000000000081c3043546f8499aec4cbb8a68d78634d38230e0000001325364b6074879db2c5c4b39d8875604b3828150200000000000000000000000000000000000000000000000000000000000000000000000b1b2832363e3e3e3e3e3e3e3e3631271909000000000000000000000000000000000000000000122230393c3e3e3e3e3e3e3e3633291c0c0000000000000000000000000009192731363e3e3e3e3e3e3e3d3a3023130100000000000000000000000005131d25272929292929282320190e0000000000000000000000000000000009151d2026282927211e160b000000000000000000000000000000000c181f2227292929292928201d150a0000000000000000000004121d242729292929292823211a0f010000000000000000000000000000000000000000000000000000010f1a212328292929292927251e130500000000000f1f31424c6176879daabbcec2b59f8d7c665847331f130000000000081c304354697e93a7b8ccc2b09b85705d4b382010000000000000000000000000000002131c3043546176869ca7b9a79c8676615443301c130c21364c61768b9fb4af9a846f5e504f525e687e93a4b4a3907b66503d2c1a0600000000000000000000000000000000000008131c2f3b484d5e66737d868e979ea6a8acafb1b1b1b2b1aeabab9f9a93887f74655d4f433025180800000000000000000000000b20354b6074899eb3c9c8b39d88735a4935200c000000081d314455697e93a7b8cbb7a6937e695645321d0a0000000000000000000000000000000000000000000000000000000000000000000000000b161e212929292929292929201d15090000000000000000000000000000000000000000000004121d242729292929292929211f170c00000000000000000000000000000009151d202929292929292928251e13050000000000000000000000000000010a10121313131313130e0c0600000000000000000000000000000000000001080b111313120c0a03000000000000000000000000000000000000040a0c121313131313130b0902000000000000000000000000000a0f111313131313130e0c07000000000000000000000000000000000000000000000000000000000000060c0e13131313131312100a0100000000000001131f334658647a8c9fb4c0cfbcab9d8876614c42311e0e000000000b20354b6073879cb2c5c9b6a4917c66513f2f1c020000000000000000000000000000000114263646586379899eaab6a4998372604b41302011263b50667b90abbca8927d68534039404b6073869cb1b09b85705b4935210c0000000000000000000000000000000000000000111d2b34404c556068717981888e93979a9c9d9e9d9c9996918b857e756a60564b3f321c13080000000000000000000000000f24394f64798ea7b9ccc3ae99836e593c2c1906000000011527374b6075889eb3c6c4b29d8875604b3828150200000000000000000000000000000000000000000000000000000000000000000000000003090c13131313131313130b0802000000000000000000000000000000000000000000000000000a0f11131313131313130c0a04000000000000000000000000000000000002080b1313131313131312100a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b5c6a7f94a2b3c4c9b7a699836e604e3c2c19090000071b2d3e51667c91a5b6cac3b19c8673604a35201100000000000000000000000000000000000818293a495b667c8c9fb4b3a196806b5f4d3e2e1d283d53687d92a8c9a48e79644f3924304354697e93a9b4a38d78634e38230e0000000000000000000000000000000000000000000d18202f37444b535c646c74797e8284878888888684817c77706860574b45382e2115000000000000000000000000000114263754697e94a9c5d6c7a9947f69543f2a140000000000091e3245576a7f95a8b9cbb7a6937e695645321d0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0e0e0e0e0e0e0e0c060000000000000000000000000000000000000000000000000001080b0e11141516151312100c09030000000000000000000000000000000000000000000000000000000000040a2020202020202020110f09000000000000000000000000000000000b1b2e3e4a6072849aa6b8c9c4b3a1927e685b4937271501000d22364a5c70859ab0c3cab7a5927d675443301c070000000000000000000000000000000000000b1b2c3d4c5e697f94a0b1b09e927d675c4b3b2b2a3f54697f94a9b7a28d78624d382326364d62788da8b9a9947e69543f2914000000000000000000000000000000000000000000000511192631353e4a4f546064686c6f71727372716f6b676259534b453932281a100200000000000000000000000000081d3144556f8499aec4cebaa98f7a654f3a25100000000000031628394c61768a9eb4c8c4b29d8775604b382715020000000000000000000c151b1e2020202020201f09020000000000000000000000000000000000000000070d0f1b1f2020201b18120800000000000000000000000c151b1e2020202020201f1d170e020000000000000000000000000000020b11131d1f20202020202012100a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c171f2123232323232323211a0e000000000000000000000000000000000000000000040a0c151d202427292a2b2a282725211e16110b08020000000000000000000000000000000000000000000000000c181f353535353535353526241d1204000000000000000000000000000000101c3043546277889eabbccfbfb49e8a79635544311d1005192b3c4f647a8fa2b4c8c4b29d8774604b36251300000000000000000000000000000000000000000e1f2f404f616d8297a3b4b49f8b7a64594838283f54697e94a9b7a28d78624d38232035485a74899eb3ae98836e59432e1904000000000000000000000000000000000000000000000009141d202d3636434a4e53575a5c5d5e5d5c5956524c483b3632281d150a0000000000000000000000000000000b20354b6074899eb3c9c9b49f8a75604b36200b0000000000000a1f3347586c8196aabbcbb7a6937e685645311d0900000000000000000f1d293033353535353535341e160a0000000000000000000000000000000000010f1a21243135353535302d251a0c0000000000000000000f1d29303335353535353534322b20120200000000000000000000000006131e2628323535353535353528251e1305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c2029333738383838383838352c1f0e000000000000000000000000000000000000050c171f21273135393c3e3f403f3e3c3a36322826201d1509070000000000000000000000000000000000000000000c1c2a344a4a4a4a4a4a4a4a3b382f2212000000000000000000000000000000001325364759667c8d9fb5c1cdb9a89b8573604b3f2e1b0b2035485a6e8398adc0cbb8a6937e685544311808000000000000000000000000000000000000000000112232434b6074859ba6b7a99d8877625645323d52677d92a7b9a38e79644e3924192b3c5b71869bb0b19b86715c46311c070000000000000000000000000000000000000000000000000108101b22253035393e4245474849484744413c37342b211e160a02000000000000000000000000000000000f24394f64798ea7b9ccc5b09b85705645321d0900000000000004172a3a4d62788b9fb4c9c4b29d8774604b372715020000000000000c1d2d3b44484a4a4a4a4a4a4932281a0a000000000000000000000000000000000f1f2d3639464a4a4a4a4541372a1a08000000000000000c1d2d3b44484a4a4a4a4a4a49463d3020000000000000000000000000031324313a3e474a4a4a4a4a4a4a3d393023130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182530353a474c4d4e4e4e4e4e4e493d2c1a06000000000000000000000000000000020d192029333737444b4e515455555453524f4b46393c363127211a0f0600000000000000000000000000000000000004182a3a475e60606060606060514c402f1d0900000000000000000000000000000008182a3b4c5e6b8096a3b5c6c6b5a395806a5d4b39291729394d62788b9fb4cac5b39d8875604b3727150000000000000000000000000000000000000000000003141d3245566277879da9b7a69b8574604b433b51667b90a6c4a5907a65503b251a30455a6f859aafb39e88735e49331e090000000000000000000000000000000000000000000000000000000708131c2024292d2f32333333312f2c272220180d090300000000000000000000000000000000000114263754697f94a9c5d6c0ab96816b5638281502000000000000000c203448596d8297abbccbb7a5937e685544311d0900000000000015293b4c585d6060606060605d453828160200000000000000000000000000000c1c2d3d4a4e5b5f6060605a55483725120000000000000015293b4c585d6060606060605f5a4e3d1c0c0000000000000000000000112231424e535d5f606060606060524d41301e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536434a535861636363636363635b4935210c000000000000000000000000000009151d2b343a474c5355606366696a6b6a686765615757514b4437362d20190e02000000000000000000000000000000000a1f3447597075757575757575665e4c38240f000000000000000000000000000000000d1d2f404b6074859ba8b9ccc1b49f8c7b655746331e3346576b8196aabbccb9a7947f6a56453219090000000000000000000000000000000000000000000000021528384859647a8a9fb4b5a398826d614f404e63788ea6b8a8937e68533726142f44596e8499aeb49e89745f49341f0a000000000000000000000000000000000000000000000000000000000000070b0f13171a1c1d1e1d1c1a16120d0b050000000000000000000000000000000000000000081d3144556f8499aec4d4c3a6917c67513c2712000000000000000005192b3b4e63798c9fb4cac3b29d8774604b3727150100000000001b3044586a737575757575756f5645321e090000000000000000000000000004172a3a4a5c647074757575706655412d09000000000000001b3044586a73757575757575746c5a3a2a17040000000000000000000a1a2f404e60687274757575757575675f4d39251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c3043546069727678787878787879634e38230e000000000000000000000000000e1927313c484d5861686f75797c7e7f807f7d7c7a76716d6660554e4a3d352c1d150a0000000000000000000000000000000c22374c61778a8a8a8a8a8a8a7c66513b26110000000000000000000000000000000000111d3144556278899eb3bdcebbaa9d8776614c4130374c6176899eb3c8c6b39e8976614c382816000000000000000000000000000000000000000000000000000a1a2a3b4a5c677d929eb0b2a0947f695e4c495b73889eb3ac97826d5544311d2737596f8499aeb39e89735e49341e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074899eb3c9cab7a58c77624d37220d0000000000000000000d2135495b6e8399aec0cab7a5927d685544311d0900000000001e33485d73888a8a8a8a8a8d75604b36210b000000000000000000000000000a1f334758647a858a8a8a8a84705a372614010000000000001e33485d73888a8a8a8a8a8a8a745847331f0a0000000000000000021628384c5e687e878a8a8a8a8a8a8a7d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e31424a60727e878c8d8d8d8d8d8d806b56402b16010000000000000000000002101e2b37444b5a626c767e84898e919394959493918f8a86827b746c635b4d493c32281a0f01000000000000000000000000000a1f34475974899f9f9f9f9f937e68533e2913000000000000000000000000000000000002152737495a677d919fb1c2c8b6a598826d5f4d3b4455697e94a8b9ccbaa895806b5746331a0a00000000000000000000000000000000000000000000000000000d1d2d3e4d5f6b8095a1b3b49f8d7c665b49596e8398aeb39e8874604b392a31445570869bb0b19c87725c47321d07000000000c151b1e20202020202020202020202020202020201f1d1c1a16120e0c060000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa7b9ccc7b29d8772594834200b000000000000000000061a2c3d4f647a8fa2b4c8c3b29d8774604b37271501000000001b30465b70859b9f9f9fab8d78634e38230e000000000000000000000000061a2c3d4c6176889b9faa9f9d87725544311d080000000000001b30465b70859b9f9f9f9fa88c76614c37210c0000000000000000091e324556667c909c9faa9f9fab9b85705f4d39251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192c3c4e606d81939ca5a2a3a3a79b8573604b35200b000000000000000000000210202d3c4855606a78818a939a9ea8a6a9aaaaa9a8a7aa9f9c97918881796d635a4b45382c1f120500000000000000000000000004182a3a5c72879cb1b5b5ab96806b56412b1601000000000000000000000000000000000009192c3c4d5f6d8297a4b6c7c3b2a0917d6759484b6074879db2c6c8b49f8a77614c39291700000000000000000000000000000000000000000000000000000000102030414b60728399a4b6ab9e8a79635851677c91a5b6a6917c6757473a3b4b6075899eb4af9a846f5a452f1a050000000f1d29303335353535353535353535353535353535353433312f2c2723211a0f0d0700000000000000000000000000000000000000000000000000000000000114263754697f94a9c5d6c2ad98836d583b2b1805000000000000000000000f22364a5c6f849aafc1cab6a5927d685544311d0900000000182e43586d8398adb5b5a5907b65503b2610000000000000000000000000092135495b6c8196a6b4bbb49f8a75604b35200b000000000000182e43586d8398adb5b5c6a38e79644e39240f0000000000000006192c3c4b6074879db2b4bbc5b49f8c7a644f41301e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001152737495a687e929fb2b6c3bdb39e8978625544311d080000000000000000000010202d3e4a5a62747f8b979fa9afb4b9c6bebfc0bfbdc8bbb4b1aca79e968c82786b6056493d302313050000000000000000000000001a2f445a6f8499afc4c3ad98836e58432e19000000000000000000000000000000000000000e1e30414b6075869ca9bacdbeb39e8978625452677c91a5b7cabbaa96816c5947341b0b0000000000000000000000000000000000000000000000000000000002131c3043546175869ca7b8a89c877661556073879cb2b29c87766158515059677c91a8b9aa957f6a55402a150000000c1d2d3b44484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49484745413d38352c24211a0f09000000000000000000000000000000000000000000000000000000081d3144556f8499aec4d7c6a8937e69533e29140000000000000000000000071b2d3e50657b90a3b5c9c3b29c8774604b37261401000000162b40566b8095abc0bda8937d68533e2813000000000000000000000009192f404e63798b9fb4c4cebbaa8d77624d38220d000000000000162b40566b8095abc0cabba6917c66513c2711000000000000000a2035495a6a8095a5b6c9ccb8a797816c5c4a3623130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1d31445563788a9eb4bdcac2b19f917d675a49372715010000000000000000000d1d2d3e4a5c647885949fa9b4bac7c9c8c1bcb9b7b6b7b9bcc0c6c5b8b3ab9f988b8074635b4d41312314060000000000000000000002172d42576c8297acc1c5b09b85705b3828150200000000000000000000000000000000000000131e32455763798b9fb4bfccb8a79a8472605d70859bb0c3c9b49f8b78624d3a2a180000000000000000000000000000000000000000000000000000000000000114263646576378899eaab6a59a84736054687d92a1b3a59a84766b66656977879db2b4a38e79644f39240f00000015293b4c585d60606060606060606060606060606060605f5d5c5a56524e493d39362d241d1208000000000000000000000000000000000000000000000000000b20354b6074899eb3c9cdb9a88e79644f39240f0000000000000000000000001023384c5e71869bb0c3cab6a5927d685544311d0800000013283e53687d93a8bdc0aa95806b55402b1600000000000000000000011426374c5e6f8399aabbced8c8a58f7a65503a251000000000000013293e53687e93a8bdd3bea9937e69543e29140000000000000a1b30404d63788a9fb4c3d2c2b39e8977614c3e2d1b05000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e11141516151412100c1b2e3f4b6073859ba8b9cdc7b6a497826d5f4d3c2b190900000000000000000008182a3b4a5c647a889ba3b4bac7ccc4b8b3aca7a3a2a1a2a3a7abb1b5c1c9bcb4aa9f968579675f4e413124140400000000000000000000152a3f556a7f94aabfc8b39d88735645321d0900000000000000000000000000000000000000031628394a5b697e93a1b2c3c5b4a2947f69657a8fa3b5c9bcab97826d5a48341c0c0000000000000000000000000000000000000000000000000000000000000008182939495a657b8c9fb4b3a296816c60606f8399a6b4a29a88807b7a7f889da5b7ab9b85705c4a36220d0000001b3044586a7375757575757575757575757575757575757472716f6b67635b564e4a3d382f231c110300000000000000000000000000000000000000000000000f243a4f64798fa8b9ccc9b49e8975604b35200b000000000000000000000000091c2f4052677c91a4b6cac3b29c8773604b36261401000011263b50667b90a5bbc2ad98836d58432e1800000000000000000000081d314455657b90a1b3c8d8d2bca7927d67523d281200000000000011263b50667b90a5bbd0c1ab96816c56412c170100000000031628394d5e6f8499a9bacdc9b5a4937e695847332010000000000000000000000000000000000000000000000000000000000000000000000000040a0c151d202427292a2b2b2a282521293a4b5d6b8095a3b5c6cdbaa99c8675604b41301e0e000000000000000000001325364759647a899ea6b5c1cdc5b8b3a69d97928e8c8c8d8e91959ba3abb4bac7bbb4a39b8a7d68604e423122120100000000000000000012273d52677c92a7bccab59f8a75604b36200b00000000000000000000000000000000000000000a1b2d3d4e606e8399a5b7c8c0b49f8b7a6e8399aec1cab49f8c79634e3c2b1900000000000000000000000000000000000000000000000000000000000003090b0f1b2c3c4b5d697e939fb1b09e927d685d6277879ca4b2a69d959090949ea6b7b49f8c7b65503e2d1b070000001e33485d73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888684817c78726b645c514c40372e1e160a0000000000000000000000000000000000000000000114263754697f94a9c6d6c4af9a856f5544311d08000000000000000000000000001120354b6073879cb2c3cab6a4927d675443301c0800000e23384e63788da3c4c5b09a85705b372715020000000000000000031729394b6073869cb1bfd0e6d4bfaa957f6a55402a150000000000000e23394e63788ea3c5d5c3ae99836e59442e190000000000091e324557667c91a1b3c7cfbeb19c8673604b3a2a180200000000000000000000000000000000000000000000000000000000000000000000050c171f21273135393c3e3f40403f3d3a37334658657b8c9fb4c1cfbfb49f8b7963574532231300000000000000000000071c3043546277889da7b8c5cebeb2a79e9288817c79777677797c80868d969fa9b3bfc2b5a99f8c7e69604e402f1f0f00000000000000000010253a4f657a8fa4c8cfbcab8d78634d38230e0000000000000000000000000000000000000000000f1f31424c6176879daabbcebaa99c86798c9fb4cabfae98836e5b49351d0d00000000000000000000000000000000000000000000000000000000080a161e212426252f3f4f606d8197a2b4b49f8b7b645a62788698a0afb3aaa6a5a9b3b5b09e95806b5d4b372010000000001b30465b70859b9f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9e9d9c9a96928d87807971665e504b3f32281a0f0100000000000000000000000000000000000000081d3144556f8499afbdbdc1aa95806b553726140100000000000000000000000000081c304354687e93a5b7c5c3b19c8673604b36261401000b21364b60768ba6b8c8b29d88735544311d0800000000000000000a1e334657687e93a4b5c9ddecd7c2ac97826d57422d180000000000000b21364b60768ba7b8ccc6b09b86715b39291603000000061a2c3d4b6075879db2bfd0c6b2a08f7b655544311c0c000000000000000000000000000000000000000000000000000000000000000000020d192029333737444b4e51545555555452504c474c6176879dabbccfc3b3a1937e685b4a392816050000000000000000000417293a4a6072849aa6b7c5cebdb1a098887d746c676462616264676b7178818b99a1b4bbc7baaa9f8d7e695e4c3d2c1b0a00000000000000000d22384d62778daabbcec9a5907b65503b261000000000000000000000000000000000000000000001141f334758657b8c9fb4c0c7b5a49c889dabbcc7b3a18e79644f3d2c1a00000000000000000000000000000000000000000000000000000001101b22283236393b3a3835424b6074849aa5b7a99d8878625a6276828f9a9fabaaabaaa8a39b8f806b62503f2e1c0200000000182e43586d8398adb5b5b5b5b5b5b5b5b5b5b5b5b5bcb5b4b2b1afaba7a59d958e857c70655d4b45382d1f10020000000000000000000000000000000000000b20354b6074899ea8a8a8a8a3907b66503b26110000000000000000000000000000011426364b6074879da7a8a8a8a4927d675443301c0800091e32455673889eb3c8b49f8a75604b36200b0000000000000006192c3c4c6176889eb3c2d2dfe3dac4af9a856f5a362614010000000000091e32455773889eb3c8c8b39e89735746321e0a0000000b2135495b6b8095a5b7cacdbaa898836e5d4b37261400000000000000000000000000000000000000000000000000000000000000000009151d2b343a474c5355606366696a6b6a69676561585f6e8298a5b7c9c8b7a599836e604e3d2d1b0a000000000000000000000a1f334658687e93a2b4c4cfbeb19f978276686055524e4d4c4d4e52565b636c7883939faab9c6bbab9f8d7c665b4939281603000000000000000b20354b60758a9fb4cabda8927d68533d2813000000000000000000000000000000000000000000000417293a4b5d6a7f95a2b4c5c2b5a59da5b7c9c0af9a846f5c4a361f0f000000000000000000000000000000000000000000000000000009151d2e3739454b4e50504d4b4445566177879da8b8a69b85756058616e7b848b91949695928d857b6b6250443321110000000000162b40566b8095abc0cacad3cac7bdbdbdbdbdbdbdbdbdbdbebfc2c0c3b7b2aba39b91857b6c60564a3d2e20110300000000000000000000000000000000000f243a4f64798f9393939393918574604b36200b000000000000000000000000000000081d324556657b899193939393938774604b35200b00031628385b70869bb0c5bcab8d78624d38230d00000000000000082035495a6b8096a6b8cbcfcacfdac7b29c87725443301c080000000000031628395b71869bb0c6ccb8a78b76614b36210c00000b1b30414e63798b9fb4c3d4c3b49f8a78624d3f2e190900000000000000000000000000000000000000000000000000000000000000000e1927313c484d5861686f75797c7e7f80807f7d7a76726d7d92a0b2c3cebbaa9d8776614c42311f0f00000000000000000000021527384c6176899eb3c0d1c4b2a097817261584b443739373738393c3d494e5a626e7e8c9ea8b9c8bcab9e8a79635745321e0f00000000000000081c30435472879db2c7c0aa95806b55402b1600000000000000000000000000000000000000000000000c1c2e3f4b6072849aa7b8ccc3b7b2b7c3c8b4a28f7a65503e2d1b0100000000000000000000000000000000000000000000000000091927313f4b4f57606466656360554f4b59647a8a9fabb5a398826e614c5d656f777c7f807f7d7870655d504433261603000000000013283e53687d93a8bdd2d3c2b6b1a7a7a7a7a7a7a7a7a7a8a8aaadb1b6c2c6c1b5b0a39b8d8175635b4b3e2f211102000000000000000000000000000000000e23384e63797e7e7e7e7e7d7c74605544311d08000000000000000000000000000000021528384b5d65767c7e7e7e7e7e7e76614c37220c0000192e43596e8398aec3c9a5907a65503b251000000000000008182e3f4d62788b9fb4c5c9bcb5bcc9c9b49f8a75604b35200b000000000000192e43596e8398aec3d5c5a38e78634e39230e00031629394d5f6f849aa9bacecab6a5957f6a5a483421110000000000000000000000000000000000000000000000000000000000000002101e2b37444b5a626c767e84898e919394959594928f8c87828a9eb3becfc0b49f8c7b6558473324140100000000000000000000091d3145566a8095a7b8cccbb8a69882726054473a31272422212224272c353c484d60687c8a9eaabbc9b9a89c8675604b3d2c1a06000000000000011426365a70859aafc5c2ad98826d58432d18000000000000000000000000000000000000000000000000101c3043546277899eb3c8d4cbc7cbd4c9b09b85705d4b3720100000000000000000000000000000000000000000000000000008182737444b5d656e76797b7a78756d655d4d5c677d8d9fb5b2a0947f6a5e4c505962676a6b6a68625a504b3f3326160800000000000011263b50667b90a5bbd0cab6a49c929292929292929292929395989ca4a9b1b5c2c1b5ab9f968679645c4c402f2010000000000000000000000000000000000c2135495b636868686868686660564537271502000000000000000000000000000000000a1a2e3f4b586167686868686868615847331f0a0001162b41566b8096abc0bda7927d68523d28130000000000001325364b5d6e8398a9bac6b9ab9fabbccebaa98c77624d37220d000000000001162c41566b8196abc0d0bba6907b66513b2611000a1e324657677c91a2b3c7d0c0b29d8775604b3c2b19030000000000000000000000000000000000000000000000000000000000000210202d3c4855606a78818a939a9ea8a6a9aaaaaaa9a7a5a59d979ea8b9ccc9b4a2957f6a5d4b3a29170600000000000000000000000b20364b6075889eb3c5d3c3b39d8876615443362a1d150f0d0c0d0f121a212b35424e5e667c8c9fb4bfc6b6a495806b5b4936211000000000000000182d43586d8298adc2c5af9a85705a372614010000000000000000000000000000000000000000000000011426364859667b90a6bbd0dfdddfcfbcab907b66513f2e1c03000000000000000000000000000000000000000000000000011426364455606c7a848a8e908f8d89827a6e625a5f6b8095a1b2b59f8d7c665b4a474c51555655534d493c372e211608000000000000000e23384e63788da3c4d5c7b19c867d7d7d7d7d7d7d7d7d7d7e7f83878c939ca4b2b6c3bcb5a49c897b655e4c3e2d1d0d000000000000000000000000000000061a2c3d494e535353535353514b453827190900000000000000000000000000000000000011212e3a464c515353535353534c473a2a1804000014293e53697e93a8bebfaa95806a55402b150000000000071c304354657a8fa0b2c7b9a89e8a9fb5cac7a48f7a654f3a251000000000000014293e54697e93a9bed3bda8937e68533e2913071a2d3d4b6175889db2c0d0c8b3a2917c665645321d0d0000000000000000000000000000000000000000000000000000000000000010202d3e4a5a62747f8b979fa9afb4b9c6bebfc0bfbebcc3b7b2adb3b9c6cfbcab9a8473604b3f2e1c0c00000000000000000000000215273852677c91a7b8cccab6a5917c6758473626180c01000000000000060e192031404c5e697f94a1b3c7c2b49f8b79634e3e2e1b07000000000000152b40556a8095aabfc7b29d88725544311d0800000000000000000000000000000000000000000000000008182e3f50657b90a5bad0dbd9dfcab59f8c78635645321e13010000000000000000000000000000000000000000000000081c3043546073818f999fa9a5a5a79e978f8378655d60728399a4b5ab9e8a79635847373c3f41403d38352c231c110300000000000000000b21364b60768ba6b8cbc7b29c8772686868686868686868696a6d71777e86919da5b1bdc2b6a79e8a7c655c4a3b2a19090000000000000000000000000000000f1f2c35383e3e3e3e3e3e3c3631271a0a0000000000000000000000000000000000000003111c2933363c3e3e3e3e3e3e37332a1c0c00000011263b51667b90a6bbc2ad97826d58422d1800000000031628394a6072859bb0bfc4b49e8a8297adc2bca7927c67523d271200000000000011263c51667b91a6bbd0c0ab95806b56402b160b21364a5b6b8096a6b7cbcebbaa9a846f5e4c382816000000000000000000000000000000000000000000000000000000000000000d1d2d3e4a5c647885949fa9b4bac7c9c8c1bcb9b7b6b7b9bcc0c6c2c9ccd6cab49f8a78635b4d413124140600000000000000000000091d3145566e8399aec5d5c7b29d8773604a3a2a1808000000000000000000000514212f404a6072849aa9bacebbaa9a846f5c4b37220e00000000000013283d53687d92a8bdcab49f8a75604b35200b0000000000000000000000000000000000000000000000000e23374b5d70859ab0c5cfc7c3c9cebcab9c8675604b41301f0f0000000000000000000000000000000000000000000004182a3a4b607283979faeb4b3acaaacb2ada199897b665e6175869ca7b8a89d8776615544312a2b2a282320190e0800000000000000000000091e32455673889eb3c8c9b49f8a75605252525252525253535558596269737c87979fb4bcc5b8a89e8b7a645948372715010000000000000000000000000000010f1a212329292929292826201d150a000000000000000000000000000000000000000000000c171f2127292929292929221f180c000000000e24394e63798ea3c5c5af9a85705a37261401000000091e324657687d92a3b5c9b7a6957f7e93a9bebfaa947f6a553f2a150000000000000f24394e64798ea3c5d6c3ad98836e58432e191b30414e63798c9fb4c4d4c4b49f8b79634e40301a0a00000000000000000000000000000000000000000000000000000000000008182a3b4a5c647a889ba3b4bac7ccc4b8b3aca7a3a2a1a2a3a7abb1b5c1c9cdcfbcab9c8679675f4e42322414050000000000000000000b20364b6075899eb4c9d3c3a9947f6a5443301c0c00000000000000000000000003121c30435463788b9fb4c8c8b4a28f7a644f3c2b1905000000000010263b50657b90a5c9cebbaa8d77624d38220d0000000000000000000000000000000000000000000000081c2e3f50657b90a2b4c8bfb3aeb4bac7b5a497826d5f4d3d2c1a0a0000000000000000000000000000000000000000000a1f334758697f94a1b1b4a79e9795979da6b4a79e8b7c665a6278899eaab6a59a8473604b42312115130d0c06000000000000000000000000031628385b70869bb0c5cebaa98c77624d3d3d3d3d3d3d3d3e403b484d5460677581939fabbcc6b9a99d8777625544311d0d00000000000000000000000000000000060c0e131313131313110b0902000000000000000000000000000000000000000000000000040a0c121313131313130c0a0400000000000c21364b61768ba7b8c7b29d87725544311d08000005192b3c4b6175889db2c1c1b29d87757c91a7bcc1ac97826c57422d170000000000000c21364c61768ba7b9ccc5b09b85705b382817293a4d5f70849aaabbcecbb8a696816b5b49352212000000000000000000000000000000000000000000000000000000000000001325364759647a899ea6b5c1cdc5b8b3a69d97928e8c8c8d8e91959ba3abb4bac7c9b6a49c8a7d68604f423223130100000000000000000f253a4f647a8fa8b9cdcab6a58c77624c362513000000000000000000000000000000132536495b6c8196aabbcec0ad98836e5a4835200b00000000000e23384d63788dabbccfc8a58f7a65503a251000000000000000000000000000000000000000000000000e23374b5d70849aafc0c8b3a1999fa9bac2b19f927d675b493828160300000000000000000000000000000000000000000c22374c61778a9fb4b4a29a8982808287949faba99e8978625a657b8c9fb4b4a296816c604e3f2e1e0e00000000000000000000000000000000192e43596e8398aec3d8c7a48f7a654f3a282828282828292a2b3436434a57616d7e8d9fb4bcc7b7a69b8573604b3b2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465773899eb3c8b49f8a75604b35200b00000b2034485a6a8095a6b7c8b4a3927d677a8fa4c7c4af9a846f5a3625130000000000000a1f33465874899eb3c9c8b39d88735645321f334658677d92a2b4c8d1c1b39d8876614c3d2c1a04000000000000000000000000000000000000000000000000000000000000071c3043546277889da7b8c5cebeb2a79e9288817c79777677797c80868d969fa9b3bfc2b6a89f8d7e69604f41301f0f000000000000000014293e53697e93a8c6d6c7b29c8772594834180800000000000000000000000000000008182c3c4d62788b9fb4cacab49f8b78624d38220d00000000000b20364b60758a9fb5cabca7927d67523d281200000000000000000000000000000000000000000000081b2e3e4f657a8fa2b4c8bbaa99838b9fb4c1bdb49e8a79635645321e130100000000000000000000000000000000000003172939556a7f95a9b9a89a84766d6a6d747f8d9fb4a79b8572605d687e939fb1b19f937e685d4b3c2b1b0b000000000000000000000000000001162b41566b8096abc0d1bca7927c67523d27131313131314151820253039464b60697e939eb0c1c4b4a3947f69594834200f000000000000000000000000000000000000000000000002090b0f1215161616151412100d0b0500000000000000000000000000000000000000000000000000000000000000031729395c71869bb1c6bbaa8d77624d38220d00071b2e3e4d62788a9fb4c4beb09b857262778ca9bac7b19c87725443301c0700000000000417293a5c71869cb1c6cab59f8a75604b362d3d4c6176889db3c0d1c9b4a3927d685746331f0f0000000000000000000000000000000000000000000000000000000000000417293a4a6072849aa6b7c5cebdb1a098887d746c676462616264676b7178818b99a1b4bbc6baab9f937e695f4d3d2d1b0b00000000000000172c42576c8197acc1d6c2ad98826d583b2a1800000000000000000000000000000000000e2035485a6e8399aec7cebbaa947f6a543b2a180400000000091d32455673889db3c8bfaa947f6a553f2a15000000000000000000000000000000000000000000000d22374b5c6f849aafc0cab49f8c788095a3b5c7b9a89c8675604b41301f0f0000000000000000000000000000000000000a1e33465771869bb1b49e8a776258555560697f94a3b4a3917c6654606c8197a2b4b49f8c7b655a4839281808000000000000000000000000000014293e53697e93a8bed3bfaa947f6a553f2a150000000000000508131c2932424f606b8096a3b4c8c1b49e8a78624d3d2c1a0600000000000000000000000000000000000000040a0c161e2124282a2b2c2b2b2a2825222019150f0b0700000000000000000000000000000000000000000000000000000000192e44596e8399aec3c8a48f7a654f3a2510000a22364a5c6d8298a9bac7b2a08f7a6460758a9fb4c9b49f8a75604a35200b000000000000192f44596e8499aec3cfbcab8d78634d38364a5c6c8196a6b7cbcfbcab9b8572604a392917010000000000000000000000000000000000000000000000000000000000000a1f334658687e93a2b4c4cfbeb19f978276686055524e4d4c4d4e52565b636c7883939faab9c6bcb59c927d675b4a392917030000000000001a2f44596f8499aec4d3bea9947e69543f2914000000000000000000000000000000000005192b3c51677c91a9bacdc8b09b85705947341f0b00000000021528385b70869bb0c5c2ac97826d57422d18000000000000000000000000000000000000000000071b2e3e4f647a8fa2b4c7c0ad98836e74859ba9bac6b5a497826d5f4d3d2c1a0a00000000000000000000000000000000000c21364b61768a9fb4ad98836d59483a444b6072859bb0b19b8673604b6073849aa5b7aa9e8878625746362513000000000000000000000000000011263b51667b90a6bbd0c2ac97826d57422d180000000000000000000b161e32424b6073859baabbcdb9a898836e5b4936210c0000000000000000000000000000000000050c181f222832363a3d3f404140403f3d3b38352b2a25201c13080600000000000000000000000000000000000000000000000001172c41566c8196abc1bca7927d67523d28120a1a30414f647a8d9fb5c7baa998826d5c5472879cb2c7baa98c77624c37220d000000000002172c41576c8196acc1dac9a5907b65503c435464798c9fb4c4d5c5b59f8d7a645443301b0b000000000000000000000000000000000000000000000000000000000000021527384c6176899eb3c0d1c4b2a097817261584b443739373738393c3d494e5a626e7e8c9ea8b9c8bbb49e8a79635746331e0f0000000000001c31465c71869bb1c6d2bca7927d67523d28120000000000000000000000000000000000000e21364b60758a9fb4c9cab49f8b77614c37220c0000000000192e43586e8398adc3c4af9a846f5a3625130000000000000000000000000000000000000000000d22364a5c6f8499afc0c8b4a28e7a6463798a9fb4bfc2b19f927d675b4938281603000000000000000000000000000000000f24394e64798eaabba9937e69543b2a314354677d92a9b5a38f7a654f556176879da8b8a69b8575615443301c12010000000000000000000000000e24394e63798ea3c5d6c4af9a846f5a3626140100000000000000000003141d31445563798c9fb4c8c6b59f8c79634e3b2a18040000000000000000000000000000020e19202a343738454b4f5254555656555452504d483c403a35302520190e06000000000000000000000000000000000000000000000014293e54697e93a9bebfaa947f6a553f2a151628384d5f70859babbcc4b49f8a78624d5a6f849aafc4c7a48f7a644f3a250f000000000000142a3f54697f94a9bed2bda8927d685351536072859baabbceccb9a797826d5c4a36251300000000000000000000000000000000000000000000000000000000000000091d3145566a8095a7b8cccbb8a69882726054473a31272422212224272c353c484d60687c8a9eaabbcdb9a89c8675614b3d2c1a0600000000001d32475c72879cb1c7d0bba6907b66513b2611000000000000000000000000000000000000091e3245566f859aafc4cfbcab927d67523d28120000000001162b41566b8096abc0c7b29c87725443301c0700000000000000000000000000000000000000071b2d3e4f647a8fa1b3c7c2af9a846f5c5b697e93a1b3c5bdb49e8a79635645321e130100000000000000000000000000000010253b50657a90a5c8a6917c67513c2725364b61768a9fb4ab96816b56475863798a9eabb5a3988272604a40301f0f0000000000000000000000000c21364b61768ba7b8ccc7b29c87725443301c0800000000000000000000011527374a5b6c8297aabbcebcab97826d5947341f0b0000000000000000000000000009151d2b353a474c54566064676a6b6b6b6a696765625a5a554f4a4336352b211a0f0400000000000000000000000000000000000000000011273c51667c91a6bbc2ac97826d57422d181e324556677c91a2b4c9b7a695806b5a48576d8297acc2bca7917c67523c271200000000000012273c51677c91a6bcd1bfaa95806a6667686e7f94a2b4c8d3c2b39e8977614c3e2d1808000000000000000000000000000000000000000000000000000000000000000b20364b6075889eb3c5d3c3b39d8876615443362a1d150f0d0c0d0f121a212b35424e5e667c8c9fb4bfc6b6a496816c5b4936211000000000001d33485d72889db2c7cfb9a48f7a644f3a250f00000000000000000000000000000000000003162838556a7f95aabfd9c9ab96816c56412c17000000000014293e53697e93a8bec9b49f8a75604a35200b000000000000000000000000000000000000000d22364a5c6f8499aebfc9b5a4907b66504e606f8399a6b8cbb9a89c8675604b41301f0f00000000000000000000000000000011263b51667b90a6bba6917b66513c261e33465771869cb1b09b85705b3a4a5b667c8d9fb5b2a0957f6a5e4d3d2d1c0c00000000000000000000000a1e33465773899eb3c8c9b49f8a75604b35200b000000000000000000000009192d3d4d63788b9fb4cac9b49f8a77614c37220c0000000000000000000000000d1927313c484d5961697075797d7f808180807f7d7a77746f6a6460544d483c352c1f170c00000000000000000000000000000000000000000f24394e64798ea3c6c4af9a846f5a3625182a3b4b6075879db2c0c1b39d8875614b3c556a7f94aabfbfa9947f6a543f2a150000000000000f243a4f64798fa4c6d7c4af9a847c7c7c7d83949daec0d1c9b6a4947e695947342010000000000000000000000000000000000000000000000000000000000000000215273852677c91a7b8cccab6a5917c6758473626180c01000000000000060e192031404c5e697f94a1b3c7c2b49f8b79634e3e2e1b08000000001d32475c72879cb1c7cfb9a48f7a644f3a250f0000000000000000000000000000000000000011273c51667c91a6bbd1c4af9a856f5a3a2a18040000000011263b51667b90a6bbcdbaa98c77624c37220d000000000000000000000000000000000000071a2d3d4f647a8ea1b3c7c4b19c86715e4c424c6277889eb3bdc6b5a497826d5f4d3d2c1a0a00000000000000000000000000000f253a4f647a8fa4c9a7927c67523d27172939586d8398adb49e897458463d4c5e6a7f95a0b2b59f8d7c665c4a3a2a190900000000000000000000031729395c71869bb1c6cebaa98c77624d37220d0000000000000000000000000f2035495a6e8399aec6cdbaa9937e69543a291704000000000000000000010f1d2b37444b5a626d777e858a8f9294959695959492908d89857f7a736b625a4e493d332a1c12040000000000000000000000000000000000000c21374c61768ca8b9c7b29c87725443301f3448596a7f94a5b7c9b5a3927d6857463d52677d92a7bcc1ac97816c57422c170200000000000c22374c61778ca8bacdc7b3a29a9191919398a0aebbcbc8bbab9c8673604b3b2a180200000000000000000000000000000000000000000000000000000000000000091d3145566e8399aec5d5c7b29d8773604a3a2a1808000000000000000000000514212f404a6072849aa9bacebbaa9a846f5c4b37220d000000001b31465b70869bb0c5cfbaa58f7a65503a2510000000000000000000000000000000000000000e23384d63788da2c5d5c8b39e88735847331f0a000000000e24394e63798ea3c5d6c7a48f79644f3a240f0000000000000000000000000000000000000d21364a5c6e8399aebfcbb7a6927d675240344759667c919fb1c3c2b19f927d675b4938281603000000000000000000000000000e23384e63788dabbca8937d68533e28172c41566c8196abb9a88b76614c36404a60728298a3b5ab9e8a7a6459473727150200000000000000000000192e44596e8399aec3d8c7a48f7a654f3a251000000000000000000000000006192c3c51677c91a8bacdc7af9a856f5846331f0a0000000000000000010f1f2d3b4855606a78828b939a9fa9a7a9aaababaaa9a7a5a79e9a958f8780786e635b4c473a3022120000000000000000000000000000000000000a1f33475874899eb4c9b49f8a75604a352d3d4c6277899eb4c3beb09b8572604a393a4f657a8fa4c8c4af99846f5a442f1a0000000000000b1f34475974899fb4c9d0c0b3afa6a6a6a8aeb2becbc8bbaa9f8d7b655544311d0c00000000000000000000000000000000000000000000000000000000000000000b20364b6075899eb4c9d3c3a9947f6a5443301c0c00000000000000000000000003121c30435463788b9fb4c8c8b3a28f7a644f3b2b18050000001a30455a6f859aafc4d0bba6907b66513b2611000000000000000000000000000000000000000b21364b60768ba7b8cccbb8a68c77614c37220c000000000c21364c61768ba7b9ccbca7917c67523c27120000000000000000000000000000000000071a2d3d4e64798c9fb5cac5b29d8774604b362a3b4c5e6d8197a5b6c8bdb49e8a79635645321e13010000000000000000000000000c21364c61768b9fb5ab96806b563828162b40556b8095aac6a28d77624d383043546075859ba6b8a89d8777615544311d1403000000000000000001172c41566c8196abc1d1bca7927c67523d2712000000000000000000000000000e20364b6075899fb4c9cab49f8b76614c36210c00000000000000000f1f2d3d4a5962747f8b979faaafb4bac7bfc0c0c0bfbebcc5b9b3afaaa59d968b83796c61584d40301d09000000000000000000000000000000000004172a3a5c71869cb1c6baa98c77624d37364a5c6d8297a8b9c7b2a08f7a65544330384d62778daabbc7b19c87725c3b2a1804000000000004182a3b5c72879cb1c7dcd0c7c4bbbbbcbdc3c6cfcebbaa9f8c7e685d4b3727150000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa8b9cdcab6a58c77624c362513000000000000000000000000000000132536495b6c8196aabbcec0ad98836d594834200b000000192e44596e8399aec3d2bda8937d68533e281300000000000000000000000000000000000000091e32455673899eb3c8d5c5a38d78634e38230e000000000a1e33465774899eb3c9bea9947f69543f2a1400000000000000000000000000000000000c21364a5b6e8398abbcccb9a7947f695544311d2f404b6175879caabbcdb9a89c8675604b41301f0f0000000000000000000000000a1f33465871869cb1af99846f5645321e2b40556a8095aac6a28c77624d37253645576278889ea9b7a59a8473604b4231211100000000000000000014293e54697e93a9bed3bfaa947f6a553f2a1500000000000000000000000000091d3245566f8499afc4cebbaa917c67523c2712000000000000000c1c2d3d4a5c647885949fa9b4bbc8c9c6c8bbb4b2b1b1b3b4bac6bfc4c3b7b2aa9f988c8176665e4d3924090000000000000000000000000000000000001a2f44596f8499aec4c7a48f7a644f3a404e64798c9fb4c6baa998836e5d4b3625354b60758a9fb4c9b49f89745947341f0b0000000000001a2f445a6f8499afc4d9d2c2b5b1aeafb0b4bbc8cab49f8a7b68604e402f201000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8c6d6c7b29c8772594834180800000000000000000000000000000008182c3c4d62788b9fb4cac9b49f8b77624c37220d000000162b41566b8096abc0d5bfaa95806a55402b1500000000000000000000000000000000000000021628385d72879db2c7ceb9a48f79644f3a240f00000000031729395c71869bb1c6c1ac97816c57422c1702000000000000000000000000000000061a2c3d4e63798c9fb5c9c7b39e8976614c3727151e324657647a8c9fb4c1c6b5a497826d5f4d3d2c1a0a00000000000000000000000417293a576c8196acb49e8975604b37272939566c8196abb9a88b76614b36212839485a657b8b9fb4b4a297816c604e3f2e1e0e000000000000000011273c51667c91a6bbd1c2ac97826d57422d180000000000000000000000000002152838546a7f94a9bfd8c8ab96816b56412c1600000000000004182a3a4a5b647a889ba3b4bac7cac1b5b1a9aa9f9d9c9c9d9fa8a6aab1b5c2c8bbb4aa9f97887c6651372614010000000000000000000000000000000002172c41576c8196acc1bca7927c6752374c5e6f849aabbcc4b49f8b78624d3f2e1d31445572879db2c7baa98c77614c37220c000000000002172d42576c8297acc1d7c9b5a49c99999b9faab3bfbbaa9e8a7c665e4c3e2e1e0e0000000000000000000000000000000000000000000000000000000000000000172c42576c8197acc1d6c2ad98826d583b2a1800000000000000000000000000000000000e2035485a6e8399aec7cebbaa947f6a543a2a1704000012283d52677d92a7c8d8c3ad98836e583a2a1704000000000000000000000000000000000000001c32475c71879cb1c6cfbaa5907a65503b25100000000000192f44596e8499aec3c4ae99846f59442f1a000000000000000000000000000000000c2135495b6e8398abbccebaa996806b57463319091628394b5c6a7f95a3b4c6c2b19f927d675b4938281603000000000000000000000011263b50667b90a4b6a8917c675544363346576f8499afb49e89745746321e1b2b3c4b5d687e929fb0b19f937e685d4b3c2b1b0b000000000000000f24394e64798ea3c6d6c4af9a846f5a362513000000000000000000000000000011263b50667b90a5c8d9c4af9a846f5a3a29170400000000000b1f3347586379899da6b5c1cdc3b7b2a39b948e8a87868788898c90959ca4abb4b9c6bbb4a69d87725544311d080000000000000000000000000000000000142a3f54697f94a9bebfa9947f6a544455667c91a2b4c9b8a695806b5a4935211426375a70859aafc5c7a48f79644f3a240f000000000000152a3f556a7f94aabfd4c6b19c868484868b99a1b2beb9a89e8c7c665c4a3c2c1c0c000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aec4d3bea9947e69543f2914000000000000000000000000000000000005192b3c51677c91a9bacdc8b09a85705847331f0a00000f24394e64798eaabbcec7b19c87725847331f0a000000000000000000000000000000000000071c31465c71869bb1c6d0bba6917b66513c26110000000002172c41576c8196acc1c6b19c86715c3a2a1704000000000000000000000000000006192c3c4e63798c9fb4c9c9b49f8b77624d392917000b1b2e3e4b6073859ba8b9cdbdb49e8a79635645321e1301000000000000000000000b20354a6073869cb1b19c867360544a474c61768a9fb4af9a846f5a3928160e1e2e3f4e606c8196a2b4b49f8c7b655a49392918080000000000000c21374c61768ca8b9ccc7b29c87725443301c07000000000000000000000000000d22374d62778caabbcec8b39d88735846331f0a000000000b1b31414c6176879da7b8c4cdbeb1a59d91867e79757271727374777b80868d969ea8b7c4c4b49f8a75604b35200b000000000000000000000000000000000012273c51677c91a6bcc1ac97826c574b6074879cb2c0c2b39d8876614b3c2b19182d42586d8297adc2bca6917c67513c271200000000000012273d52677c92a7bcd1bfaa957f6f6f71778398a0b2c1b9aa9f8a7a645a493a2a1b0a0000000000000000000000000000000000000000000000000000000000001c31465c71869bb1c6d2bca7927d67523d28120000000000000000000000000000000000000e21364b60758a9fb4c9cab49f8b77614c37210c00000b20364b60758a9fb4c9cab49f8b76614c37210c000000000000000000000000000000000000081d32485d72879db2c7d0bba6907b66513b26110000000000142a3f54697f94a9bec9b49e89745847331f0a00000000000000000000000000000c2135495b6d8298abbccfbcab97826d5948341b0b0000101d31445563788a9eb4bfcdb9a89c8675604b41301f0f00000000000000000000071c304354687d92a2b4a4978172656058616b8096a8baaa947f6a553f2a1500102131424b6073849aa5b6aa9e89786257463625130000000000000a1f33475874899eb4c9c9b49f8a75604a35200b000000000000000000000000000b20354b60758a9fb4cacbb7a68b76614c36210c000000031629394e606f8499a5b7c5cdbdb0a097877c71696360555c5c5e5962666a7179818a9da6b7cbbbaa8d77624d38220d00000000000000000000000000000000000f243a4f64798fa4c7c4af99846f5a58697e94a4b6c9b5a3937e685746331e0e152b40556a8095aabfbea9947f69543f2a1400000000000010253a4f657a8fa4c8d8c2ac97826d5a5962728298a3b4c3baa89e88786359473928190900000000000000000000000000000000000000000000000000000000001d32475c72879cb1c7d0bba6907b66513b2611000000000000000000000000000000000000091e3245566f859aafc4cebbaa927d67523d27120000091d3145566f849aafc4cfbcab917c6751382816030000000000000000000000000000000000071c30435473899eb3c8cfbaa5907a65503b2510000000000012273c51677c91a6bcccb9a88c76614c37210c0000000000000000000000000006192c3c4d63788c9fb4c9cab59f8c79634e3b2b1800000001142637495a687d92a1b2c4c6b5a497826d5f4d3d2c1a0a000000000000000000001325364b6073849aa7b19f97847a74737780969eb0b49f8b77624d37220d0003131d3144556176879ca8b8a79c8675615443301c12020000000004172a3a5c71869cb1c6cebaa98c77624d37220d00000000000000000000000000081c30435473889db2c8d4c4a28d78634d38230e0000000a1e324657687d92a1b3c3cfbeb09f968275675f544e4b4437473b484d51555b636c76889db2c8c8a58f7a65503a251000000000000000000000000000000000000c22374c61778ca9bac6b19c87715c6176899eb3c3bfb19b8673604b3929170013283d52687d92a7bdc1ac97816c57422c170200000000000d22374d62778caabbcec4af9a856f5a47546074859ba5b6c5b8a69c877761574537261401000000000000000000000000000000000000000000000000000000001d33485d72889db2c7cfb9a48f7a644f3a250f00000000000000000000000000000000000003162838556a7f95aabfd9c8ac96816c57412c1700000215273853697e93a8c1d2c9ad98826d5645321e0800000000000000000000000000000000000b20354a60758a9fb4cad5c5a38e79634e39240e00000000000f243a4f64798fa4c7d6c6a38e79644e39240f000000000000000000000000000c2035495a6d8297aabbcec1ae99846f5b4a361d0d0000000009192c3c4e606e8399a6b7c9c2b19f927d675b4938281603000000000000000000081c3043546278899ea7b1a29a8f89888b969eb0b7a597826d594834200b000001152737475863798a9eabb5a4998372604a4130201000000000001a2f44596f8499aec4d8c7a48f7a654f3a251000000000000000000000000000011426365c71879cb1c6ceb9a38e79644e39240f0000011527374b6175889eb3bfd0c4b2a096817260564d4039353126322b34373b3d494e5870859aafc5bca7927d67523d281200000000000000000000000000000000000b1f34475974899fb4c9b49f89745b6c8196a7b9c7b3a1907b655443301b0b0010253b50657a90a5c8c4ae99846f59442f1a0000000000000b20354b60758a9fb4c9c7b29c8772544345566177879ca7b8c5b6a59b8575605544311d15050000000000000000000000000000000000000000000000000000001d32475c72879cb1c7cfb9a48f7a644f3a250f0000000000000000000000000000000000000011273c51667c91a6bbd1c4af9a856f5a3a2a170400000d22384d62788da3b5c9c9b49e8975604b36251300000000000000000000000000000000000e23384e63788dabbccfccb8a78b76614c36210c00000000000d22374c62778ca9bacdbba6917c66513c271100000000000000000000000005192b3c4d62788b9fb4c8bdb5a38f7a65503d2d1a0000000000000e1e31424c6176889dabbcbdbdb49e8a79635645321e0b00000000000000000001142636485a647a899ca4b4afa99f9d9faab0b2a59d8776614c3b2b180500000009192a3a495b667c8d9fb4b3a195806b5f4d3e2d1b0700000002172c41576c8196acc1d1bca7927c67523d271200000000000000000000000000001c31465b71869bb0c6cfbaa58f7a65503a25100000081d3144556a7f94a6b8cbcbb7a698826d605445383024201d141d182022262c353a586d8297adc2bfaa957f6a55402a15000000000000000000000000000000000004182a3b5c72879cb1c7baa88c7763798b9fb4c5baa999836e5d4b36261400000d23384d62788daabbc6b19c87715c3a2a17040000000000081c30435472879db2c7c9b49f8a75604b3847596379899ea9bac3b4a3998373604b433223130300000000000000000000000000000000000000000000000000001b31465b70869bb0c5cfbaa58f7a65503a2510000000000000000000000000000000000000000e23384d63788da2c5d5c8b39e88735847331f0a00000b2035485a70859bb0c4ccb9a8927d685443301c0b0000000000000000000000000000000114263752687d92a7c9d9c8b39e88735846331f0a00000000000b1f34475974899fb4c9bea9937e69543e29140000000000000000000000000b2035485a6d8297aaa8a8a8a89b85705d4b371f0f00000000000000131f334758667b8d9fa8a8a8a8a89c8675604b3a29170400000000000000000008182b3c4b5c647986949ea8adb0b2b1afaaa0988779635846331d0d00000000000c1c2c3d4c5e6a7f949faba79e917d675c4a36220d00000000142a3f54697f94a9bed4bfaa947f6a553f2a1500000000000000000000000000061b30465b70859bb0c5d0bba6907b66513b261100000b20354b6074889db3c5d4c3b29d8876614c4336281a120b080100050b0d111a2b40556a8095aabfc2ac97826d57422d180000000000000000000000000000000000001a2f445a6f8499afc4c6a48f796f8499aabbc5b49f8b78634d3f2e180800000b20354b60758a9fb4c9b49e89745847331f0a0000000000011426365a6f859aafc4cebaa98c77624d373a495b657b8b9fabbcc1b3a197816c614f4130211101000000000000000000000000000000000000000000000000001a30455a6f859aafc4d0bba6907b66513b2611000000000000000000000000000000000000000b21364b60768ba7b8cccbb8a68c77614c37210c000005192b3c52677d92a6b7cbc6b19c8673604a392816030000000000000000000000000000081d3144556c8197acc1d6c4af99846f5a3a291704000000000005182a3b5c72879cb1c7c1ab96816c56412c170100000000000000000000000d22384d62778a9393939393938f7c66513f2e1c010000000000000004172a3a4c5e6b809093939393939393826d5846331f0a000000000000000000000e1e2e3e4b5b63747f8992979b9d9c9a958e8277635b493a2917000000000000000f1f2f404f616a808c919292928979644e39240f0000000012273c51677c91a6bcd1c2ac97826d57422d1800000000000000000000000000071c32475c71879cb1c6d0bba5907b66503b2611000215273751667c91a6b7cbcab6a5917c6758473325180a00000000000000000013283d53687d92a8bdc4af9a856f5a362513000000000000000000000000000000000002172d42576c8297acc1bba6917c7c90a1b3c8b8a796816b5a49352111000000081d31445572889db2c7b9a88c77614c37210c000000000000182d42586d8297adc2d8c7a48f7a644f3a2c3d4b5d677d8d9fb5bdbfb19f947f6a5f4d3f2e1f0f00000000000000000000000000000000000000000000000000192e44596e8399aec3d2bda8937d68533e281300000000000000000000000000000000000000091e32455673899eb3c8d5c5a38d78634e38230e0000000e20364b6074889db3c3c9b5a4927d675746321e1304000000000000000000000000000c20354b6074889db2c8d4c4aa95806a55402b15000000000000001a2f455a6f849aafc4c3ae99836e59442e190000000000000000000000000e24394e63797e7e7e7e7e7e7d7a665e4c3821110000000000000000000c1c2f4051626b7b7d7e7e7e7e7e7e7e76614c36210c000000000000000000000010202e3d4956606a767d828687878480796e6259493d2c1b0b00000000000000011222324350616a787c7d7d7d7d7b65503b2510000000000f243a4f64798fa4c7d7c4af9a846f5a3625130000000000000000000000000006192c3c5e73889db3c8cfbaa48f7a654f3a251000081d3144556e8398adc4d4c7b29d8773604b3a29170800000000000000070c0e11263b50657b90a5c9c7b29c87725443301c070000000000000000000000000000000000152a3f546a7f94a9bfbda8937e869cb1bfc2b39e8876614c3c2c1903000000011527375b70859ab0c5c6a48e79644f39240f000000000000152b40556a8095aabfd1bca7927c67523d272e3f4d5f6a7f949fb1bfbdb59f8d7d675d4b3d2d1d0d000000000000000000000000000000000000000000000000162b41566b8096abc0d5bfaa95806a55402b1500000000000000000000000000000000000000021628385d72879db2c7ceb9a48f79644f3a240f000000081d3144556a7f94a5b7cbc2b29d8775614b413022130300000000000000000000000c1c304051667c91a6b7cbcbb7a68f7a644f3a240f00000000000002182d42576d8297acc2c6b09b86715b3929160300000000000000000000000c21364a5b6368686868686868655d4c402f1d030000000000000000000011223444515e666868686868686868615846331f0a000000000000000000000002101f2c38454b5761676d7072716f6a635b4c483b2c1f0f0000000000000000000415253343505b636767676767655d4b37230e000000000c22374c61778ca9bacdc7b29c87725443301c070000000000000000000000000c2035495a74899fb4c9d4c4a38d78634e38230e000b20364b6075899eb3c9d3c3a9947f695443301c0c000000000000010f1a21242627384d63788dabbcc9b49f8a75604a35200b000000000000000000000000000000000012273d52677c92a7bcc7b19c879ca4b5c9b5a4937e685846331e0e0000000000182d43586d8298adc2bca6917c67513c271200000000000013283d52687d92a7bdd2bfaa947f6a553f2a21304150616d8197a1b3c2bcab9f8b7b655b4a3b2b1b0b000000000000000000000000000000000000000000000012283d52677d92a7c8d8c3ad98836e583a2a1704000000000000000000000000000000000000001c32475c71879cb1c6cfbaa5907a65503b2510000000021527374b6175879db2bfcab7a597816c5f4d40301e160a0200000000000000000c1b2a3a4d5f6f849aafc4d4c8b29d8873604a35200b00000000000000152a3f556a7f94aabfc8b39e89735746321e0a0000000000000000000000071a2d3d4a4e535353535353534f4b3f2f2212000000000000000000000003162634404c5053535353535353534c463a291704000000000000000000000000010f1a273139464b52585b5d5c5a554e4a3d342b1d0f0100000000000000000000071525333c494d5252525252504b3f2e1c08000000000b1f34475974899fb4c9c9b49f8a75604a35200b0000000000000000000000000d23384d62788da9bacdcbb7a68b76604b36210b000f24394f64798ea8b9cccab6a58c77624c36261400000000000002101f2d36393c3c3c4b60758a9fb5cabaa98c77624d37220d00000000000000000000000000000000000f253a4f647a8fa4c7cab6a49ca4b5c2bfb19c8673604b3a2917000000000000162b40556b8095aac0bea9947e69543f291400000000000010253b50657a90a5c9d9c1ac97826c57422d172333434b6073839aa4b5c4baa99e89796359483a291a0a000000000000000000000000000000000000000000000f24394e64798eaabbcec7b19c87725847331f0a000000000000000000000000000000000000071c31465c71869bb1c6d0bba6917b66513c261100000000091e324657677c91a1b3c4c3b19f927d675e4d4132281d150b080200000508131c2a394758677c91a2b3c7cebbaa95806b5443301c070000000000000012283d52677d92a7bcccb8a78b76614b36210c0000000000000000000000000f1f2d36393e3e3e3e3e3e3e3a372e2112040000000000000000000000000816222f383b3e3e3e3e3e3e3e3e3633291b0b0000000000000000000000000000000a151d2932363d42464847454039362d20180d0000000000000000000000000007151e2c35383c3d3d3d3d3b372e2111000000000004182a3b5c72879cb1c7cebaa98c77624d37220d00000000000000000000000114263752677c92a7c7d7c8b29d88735745321e090013293e53687e93a8c6d6c7b29d8772594834180800000000000010212e3d4a4e515151515673889db3c8c7a48f7a644f3a250f00000000000000000000000000000000000d22374d62778ca9bacec2b6b1b6c2c8b3a1907b655544311b0b00000000000013283d53687d92a8bdc1ac96816c57412c170200000000000d23384d62788dabbccfc4af9a846f5a362513151d3144556175869ca6b7c6b9a79d8778625846382718080000000000000000000000000000000000000000000b20364b60758a9fb4c9cab49f8b76614c37210c000000000000000000000000000000000000081d32485d72879db2c7d0bba6907b66513b261100000000031628394d5f6f8499a6b7c7bdb49f8c7c675f4b45383127201d151919182025303a47576176889eb3c0d0c6b49f8b78624d362513000000000000000010253a50657a8fa5c8d5c5a38e78634e39230e000000000000000000000000010f1a21242929292929292825221b1003000000000000000000000000000004111c23262829292929292928211f170b0000000000000000000000000000000000020b161e21272d313232302b24211a0f05000000000000000000000000000000000e192123272828282825231c11030000000000001a2f445a6f8499afc4d8c7a48f7a654f3a25100000000000000000000000081d3144556c8196abc1d6c3ae99836e593928160300172c41576c8196acc1d6c2ad98826d583b2a18000000000000081b2e3f4b5b63666666666670869bb0c5bca7927c67523d271200000000000000000000000000000000000b20354b60758a9fb4c9d3cac7cacebbaa99846f5e4c3726140000000000000010263b50657b90a5c9c3ae99846e59442f190000000000000b20364b60758a9fb4cac7b19c87725443301c0715273746576278889da8b9c5b7a69c8676615645362513000000000000000000000000000000000000000000091d3145566f849aafc4cfbcab917c6751382816030000000000000000000000000000000000071c30435473899eb3c8cfbaa5907a65503b251000000000000b1b30414c6277889da9bacebbaa9f8b7d6c60564b44373631272e2e2b3436434a586175849ba6b8cbcdb9a897826d5a4835180800000000000000000d22384d62778daabbcebba6907b66513b26110000000000000000000000000000070c0e13131313131313100e08000000000000000000000000000000000000090f1113131313131313130c0a040000000000000000000000000000000000000000030a0c12181b1d1c1a150e0c0700000000000000000000000000000000000000060c0e1212121212100e080000000000000002172d42576c8297acc1d1bca7927c67523d271200000000000000000000000d20354b6074879db2c7d2c2a9947f69543f2a1400001a2f44596f8499aec4d3bea9947e69543f29140000000000000e22374b5d65797b7c7c7c7c7c859bb0c5bfa9947f6a543f2a150000000000000000000000000000000000081c30435472879cb2c7dcdedcd5c5b49f8b79634e402f1909000000000000000e23384d63788dabbcc6b19c86715c3a2917040000000000081d31445573889db2c8c9b49f8975604a35200b09192939485a647a8a9eaabbc4b5a49a8474605443301c1404000000000000000000000000000000000000000215273853697e93a8c1d2c9ad98826d5645321e0800000000000000000000000000000000000b20354a60758a9fb4cad5c5a38e79634e39240e0000000000001220344859647b8b9fb4bcc8baa99f928175676055504b443744443b484d54606876859ba2b4c4d0bfb49e8a78624d3c2b190000000000000000000b20354b60758a9fb4cabda8937e68533e291300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9bfd4bfaa947f6a553f2a15000000000000000000000d1d304151667c91a5b7cbc9b5a48d78634e38230e00001c31465b71869bb0c6d2bca7927d67523d281200000000000010253a4f657a8d9191919191919ba3b4c8c1ac97826c57422d170200000000000000000000000000000000011426365a6f859aafc4daefe0ccb8a796816c5b4935211100000000000000000b20364b60758a9fb5c9b39e89745847331f0a0000000000021527375b70859ab0c5cdbaa98c77624c37220d000b1b2b3c4a5c667c8c9fb4bcc2b4a2988272604a4231221202000000000000000000000000000000000000000d22384d62788da3b5c9c9b49e8975604b36251300000000000000000000000000000000000e23384e63788dabbccfccb8a78b76614c36210c00000000000005182b3b4b5d687e929fabbbc7bab49f97877d746b6560555a59595a596268737d889ba3b4c0d1c2b3a1937e695a48341e0e000000000000000000081d31445572889db2c7c0ab95806b56402b16010000000000000000000000000000070b0e121416161514110d0b0500000000000000000000000000060a0b0b0b0b0b0b0000000000000000000000000000000000000000000003090b10131516171615120f0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1c2ac97826d57422d180000000000000000040f1d2b3b4d5f6f849aafc3d4c5b19c86715b4935210c00001d32475c72879cb1c7d0bba6907b66513b261100000000000012273c51677c91aba6a6a6a6a6b0b4c1d1c4af99846f5a442f1a000000000000000000000000000000000000182d42576d8297acc2d7e5d3c2b39e8976614c3d2c1a030000000000000000091d32455673889db3c8b9a88c76614c37210c000000000000182e43586d8398adc2d7c7a48f7a644f3a250f00000d1d2d3e4c5e687e939eb0bec0b2a095806b604e402f2010000000000000000000000000000000000000000b2035485a70859bb0c4ccb9a8927d685443301c0b0000000000000000000000000000000114263752687d92a7c9d9c8b39e88735846331f0a000000000000000d1d2e3f4e60687e8d9faab7c4bdb1a69d9288807a75726f6e6e7072777e86929ea6b5c1d1c2b5a4998372604a3c2b1900000000000000000000011426375b70859ab0c5c3ad98836e58432e190000000000000000000000000708131c202428292b2b2b2926222018100b07000000000000000a10121b1f202020202020110f090000000000000000000000000000000003090c161e2125282b2c2c2c2a2824201d150c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8fa4c7d8c4af9a846f5a362513000a0a0003090c0e171f2d3b4859677d92a2b4c8ccb9a7937e69533d2c1a0600001d33485d72889db2c7cfbaa48f7a654f3a25100000000000000f253a4f647a8fa4c7bbbbbbbbc3c3c3c3c3b19c87725c3b2a18040000000000000000000000000000000000152a40556a7f95aabfd4decab6a4937e695847331f0f000000000000000000021528385b70859bb0c5c6a38e79644e39240f000000000001162b40566b8095abc0d1bca7917c67523c271200000010202f404e606b8096a0b2c1beb09e937e685e4c3e2e1e0e00000000000000000000000000000000000005192b3c52677d92a6b7cbc6b19c8673604a392816030000000000000000000000000000081d3144556c8197acc1d6c4af99846f5a3a2917040000000000000000102031424e60687d8c9da6b2bfc4b7b2a69d958f8a8784838385888c939ba3b3b8c5cec0b4a49c8675615443301d0d0000000000000000000000182d43586d8298adc2c5b09b85705b3828150200000000000000000006101b22253035393d3f4041403e3b37342b25201c130802000004121d2427303435353535353526241d1204000000000000000000000000010b161e212832363a3d40414241403d3a363228211f170c050000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bacec7b29c87725443301c1f1f1f1f161e21242a333d4a596277899eb3c0d0c3b39e8976614c36210f0000001d32475d72879cb2c7cfb9a48f7a644f3a250f0000000000000d22374d62778ca9aeaeaeaeaeaeaeaeaeaeae9f89745947341f0b000000000000000000000000000000000012283d52677d92a7bcd2d0bfb19c8674604b3a2a170100000000000000000000192e43586e8398adc3bba6917c66513c271100000000000013283e53687d93a8bdd2bfa9947f6a543f2a1500000002122231424a60728298a3b4c3bcb49f8c7c665c4b3c2c1c0c0000000000000000000000000000000000000e20364b6074889db3c3c9b5a4927d675746321e1304000000000000000000000000000c20354b6074889db2c8d4c4aa95806a55402b1500000000000000000002132431424e5f677b8798a0b1b6c2c4b7b3abaa9f9c9a99999a9da5a8b1b5c1cbc8bbb4a29a8677625746362513000000000000000000000000162b40556b8095aac0c8b39d88735645321d0900000000000000000e19202d3636434a4e525455565553504d483b3a3530251e160a00152230393c464a4a4a4a4a4a4a3c382f2212000000000000000000000009151d28323639454b50535556575655524f4b453837332a20190d02000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9c9b49f8a75604a353535353535283236393a474c5b6378869ca7b8ccc9b6a5947f6a5846331f0a0000001c31475c71869cb1c6cfbaa58f7a65503a25100000000000000b20354a60748a989898989898989898989898988c77614c37220c000000000000000000000000000000000010253a50657a8fa5c8d9c8b3a1907c665544311c0c0000000000000000000001162b40566b8095abc0bea9937e69543e291400000000000011263b50667b90a5bbd0c1ac97816c57422c170200000004141c3043546074859ba5b6c5bbaa9f8a7a645a493a2a1b0a0000000000000000000000000000000000081d3144556a7f94a5b7cbc2b29d8775614b413022130300000000000000000000000c1c304051667c91a6b7cbcbb7a68f7a644f3a240f0000000000000000000006142431414d5d657683919ca4b1b6c2c8c8bbb4b1afaeaeafb2b7c3c6c9c9bfb3aa9f9584766259473929180800000000000000000000000013283e53687d93a8bdcab59f8a75604b36200b00000000000004121e2c353e4a4f54606367696b6b6a6966625957504a433632281c132532404d515b5f606060606060514c402f1d090000000000000000000e19273139464b53576065686a6b6c6b6a67646056534c473a342b1d1509000000000000000000000000000000000000000000000000000000000000000000000000081c30435472879cb2c7cebaa98c77624d4a4a4a4a4a4a39464b4e5258616c79879ca4b6c5cfbcab9c8775604b3a2917040000001b30465b70859bb0c5d0bba6907b66513b2611000000000000071c3043546c81838383838383838383838383838378624d38230d00000000000000000000000000000000000d23384d62788daabbbdbbaa9a846f5e4c37271500000000000000000000000013293e53687e93a8bdbdab96816c56412c170000000000000e23384e63788da3c4bebeaf99846f5a442f1a00000000000013253645566177879ca7b6c3baa89e88786359473928160300000000000000000000000000000000021527374b6175879db2bfcab7a597816c5f4d40301e160a0200000000000000000c1b2a3a4d5f6f849aafc4d4c8b29d8873604a35200b0000000000000000000000061423303f4b58616e7c86929ca4abb3b8c4c1c4c4c3c3c5c7c6c3c6b9b3aca1998b80736158473b2a1b0b0000000000000000000000000010263b50657b90a5bac6bcab8d78634d38230e0000000000041222303c494d5c646d74797d7e8080807e7b77726c6560544b4538302532434f5f677074757575757575665e4c38240f0000000000000002101e2c37444b57616870767a7d808181817f7d7a756f6861584d483b3127190e0000000000000000000000000000000000000000000000000000000000000000000000011426365a6f859aafc4d8c7a48f7a655f5f5f5f5f5f5f5f576163686e77818c9da5b6c2cdbdb49f8d7b655745321b0b00000000192e44596e8399aec3d2bda8937d68533e28130000000000000013253652636c6e6e6e6e6e6e6e6e6e6e6e6e6e6e625a4835200b00000000000000000000000000000000000b20354b60758a9fa8a8a89f8c79634e402f190900000000000000000000000011263b50667b90a5a8a8a899836e59442e190000000000000b21364b60768ba6a9a9a9a99c87715c3727150200000000000818283847596379899ca5a7a8a8a69c8777615745321e090000000000000000000000000000000000091e324657677c91a1b3c4c3b19f927d675e4d4132281d150b080200000508131c2a394758677c91a2b3c7cebbaa95806b5443301c070000000000000000000000000513212e3a474c5e66737d868f969da6a7abafb0b2b3b3b2b0adaaa89e978e83796a6055473a2a1d0d00000000000000000000000000000e23384e63788da3b0b0b0a5907a65503b25100000000001122230404d5a626f7a82888e929495969593908c87817a736860564a4336404f616a7c85898a8a8a8a8a8d7b66513c26110000000000000110202e3c49556069757d858a8f929596979695928f8a857e766c62594b44372c1e100200000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2d1bca7927d7474747474747474747576797d838a979faab7c3cdbdb09f947f6a5d4b3928160000000000162c41566b8196abc0d5bfaa95806a55402b150000000000000008183545525759595959595959595959595959594d483c2b19060000000000000000000000000000000000081d31445572879393939290806b5b4a362212000000000000000000000000000e23394e63798e939393939386715c46311c000000000000091e32455673889393939393938a745544311d080000000000000a1a2a3a495b647a878f9293939393938675604b36210b0000000000000000000000000000000000031628394d5f6f8499a6b7c7bdb49f8c7c675f4b45383127201d151919182025303a47576176889eb3c0d0c6b49f8b78624d362513000000000000000000000000000003111c2a33404d546067727a81888d92969a9b9c9e9e9d9b98958f89827a6f635b4b44372a1c0d0000000000000000000000000000000b21364b60768b9b9b9b9b9b927d68533d2813000000000f1f2f404d5e6678848e989ea7a7a9aaabaaa8a5a59d978f877e75676054494c5e6a7f919b9fa89f9fa295806b5e4c38240f0000000000000f1f2e3e4b5a63737e88929a9fa9a8aaabacabaaa7a99f9a938a81786a6055493c2e201103000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfd4cab49f8b8a8a8a8a8a8a8a8a8a8a8b8e92989fa9b4bbc8c7bab49e96816c614f3f2e1b0a000000000014293e53697e93a8c8d8c3ae98836e593b2a1805000000000000001727353e42434343434343434343434343434338352b1e0e0000000000000000000000000000000000000114263751667c7e7e7e7d7b6b62513d2d1a04000000000000000000000000000b20364b60747e7e7e7e7e7e7d67523d28120000000000000316283852677d7e7e7e7e7e7e7e74604b36200b000000000000000c1c2c3d4a5c64747a7d7e7e7e7e7e7e79634e39240e0000000000000000000000000000000000000b1b30414c6277889da9bacebbaa9f8b7d6c60564b44373631272e2e2b3436434a586175849ba6b8cbcdb9a897826d5a48351808000000000000000000000000000000000c171f3036434b525c646c74787d8184868789898886837f7a756c645c4e4a3d3127190c00000000000000000000000000000000091e3245566f848686868686857e68533e2813000000061a2c3d4c5e667c899aa2adb3b8c5bec0bcbbbcc3b6b2aca49c93877d72635a5a667c8d9fb0b4bab7a59a8472604b402f1d0900000000000c1c2d3d4b5c647885939ea7afb4bac7bfc0c1c0bfc7bab4afa99f968a7f74625a4b3f2f211102000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2cebbaa9f9f9f9f9f9f9f9f9f9f9faaa3a7adb4bac7cabfb3a99f928072604a4332211100000000000010253a50657a8faabbcec7b29c87725948341f0b000000000000000917222a2d2e2e2e2e2e2e2e2e2e2e2e2e2e2e2320190e00000000000000000000000000000000000000000924394d5e6668686868655d5144341f0f0000000000000000000000000000091d32455660686868686868675f4d3a2510000000000000000a25394d5f6769696969696969605544311d0800000000000000000e1f2d3e4a55606568686868686868635b4a36210c000000000000000000000000000000000000001220344859647b8b9fb4bcc8baa99f928175676055504b443744443b484d54606876859ba2b4c4d0bfb49e8a78624d3c2b190000000000000000000000000000000000000412182630353e4a4f546063676c6f7072737372716e6a6560564f4a3e362d1d150900000000000000000000000000000000000316283854666f71717171717168604e3a26110000000c2135495b667c8c9ea7b4c0c8c2b6b1aba7a6a6a8acb2b7b6b2a59d928478676378899eabbcc9baa99d877661544330221200000000000417293a4a5c647a899ba3b3b8c5c9cdc9c3bfbdbcbec1c6c9c7bab4a89f948578645d4b3f2f2010000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8d9d8c8bbb4b4b4b4b4b4b4b4b4b4b4bbc8bdc3c9c9bcb5afa1998a7d6c605443302515030000000000000b21364b60768a9fb4cacab6a58c77624c37220d0000000000000000050f151719191919191919191919191919190d0b060000000000000000000000000000000000000000000a1d30404d5153535353504c3f34261601000000000000000000000000000002152838454b535353535353524d41301e0a000000000000000a1e30414d52545454545454544b443727150200000000000000000010202d37444b4f525353535353534e4a3d2d1a070000000000000000000000000000000000000005182b3b4b5d687e929fabbbc7bab49f97877d746b6560555a59595a596268737d889ba3b4c0d1c2b3a1937e695a48341e0e000000000000000000000000000000000000000008141c202d3636434a4d52565a5b5d5e5e5d5b5855504b4538362d211a0f01000000000000000000000000000000000000000a1a3748545a5b5b5b5b5b5b534e42311e0b0000081b2e3f4e63798a9eaab9c5c5b8b3a49c9692909193979da5aeb3b7b2a29a8a7d75869ca7b9c9beb49f8b7a6458473626140400000000000a1f334658647a8a9ea7b5c1cccdc7bab4aeaaa8a7a9abb1b5c2cac6bab4a39b897b655d4b3e2d1c0c000000000000000000000000000000000000000000000000000000000000000d23384d62788daabbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbcc6b9b4afab9f998f8478685f4a433625130700000000000000091e32455771869bb0c6d3c3a7927d67523a2a18040000000000000000000002040404040404040404040404040400000000000000000000000000000000000000000000000000122230393c3e3e3e3d3b382f211608000000000000000000000000000000000a1a2832363e3e3e3e3e3e3d3a302313010000000000000001132330393d3e3e3e3e3e3e3e3631271909000000000000000000000210192731353a3d3e3e3e3e3e3e39362d1f0f0000000000000000000000000000000000000000000d1d2e3f4e60687e8d9faab7c4bdb1a69d9288807a75726f6e6e7072777e86929ea6b5c1d1c2b5a4998372604a3c2b19000000000000000000000000000000000000000000000108101b22253035383d414546474949484643403a363127221b10070000000000000000000000000000000000000000000019293741454646464646463e3a3124130200000d22374b5d6f8499a8b9c8c5b8a79e9187817d7b7c7e82878f99a1b1b5b4a89e92879ca4b5c5c2b2a0937e685c4a3a2a18080000000000071b2d3e4c6176879da8b8c5d1c7bab4a99f9995939294969ca4acb4bcc9c1b5a79e8b7b655c4a3a2a18040000000000000000000000000000000000000000000000000000000000000b20354b60758a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a6a5a89e99948c847a6f625a4e4130251808000000000000000003162839556a8095aac2d3c3ae99836e5847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24272929292826231c11030000000000000000000000000000000000000a151d2029292929292928251e130500000000000000000005131e252829292929292929201d15090000000000000000000000000009151d20252829292929292924211a0f0100000000000000000000000000000000000000000000102031424e60687d8c9da6b2bfc4b7b2a69d958f8a8784838385888c939ba3b3b8c5cec0b4a49c8675615443301d0d000000000000000000000000000000000000000000000000000708131c2023272c2f3132343433312e2a25201d150a070000000000000000000000000000000000000000000000000b19252d3031313131313128261e13060000000f253a4f647a8fa1b3c6ccb8a79e897d736b676667696d727a83909ca4b1b9b4a49ca4b5c2c5b5a398826d604e3e2e1c0c0000000000000d22364a5c6d8298a5b7c6d3c2b6a99f948a83807d7c7f81868d979fabb6c2c5b8a99e8a7a645847331f13000000000000000000000000000000000000000000000000000000000000081d3144557287939393939393939393939393939393939392918f8d89847f776f655d4d493c311c1308000000000000000000000e24394e63798ea4b6cac9b49f8b77614c382816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0f1113131313100e0900000000000000000000000000000000000000000002090b13131313131312100a010000000000000000000000010a1012141414141414140b080200000000000000000000000000000001080b10131313131313130e0c0700000000000000000000000000000000000000000000000002132431424e5f677b8798a0b1b6c2c4b7b3abaa9f9c9a99999a9da5a8b1b5c1cbc8bbb4a29a86776257463625130000000000000000000000000000000000000000000000000000000000070b0e12171a1b1d1e1e1d1c1915100b09020000000000000000000000000000000000000000000000000000000812181a1c1c1c1c1c1c13110b0200000005182a3b576c8197acbfd0c1b39e897967605452515153575d656e7b86979fadbab6b1b6c2c9b9a79b8575604b4231201000000000000005182a3b4f647a8d9fb5c3d4c4b6a49c8a7f766e6a6867696c7178818c9ca4b4c0c7b9a89d8776614c41301a0a00000000000000000000000000000000000000000000000000000000000114263751667c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7d7c7a77746f696259504b3f352c1e130000000000000000000000000c21364a5b71869cb1c5cebbaa947f6a5645321e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006142431414d5d657683919ca4b1b6c2c8c8bbb4b1afaeaeafb2b7c3c6c9c9bfb3aa9f95847662594739291808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34485972879db2c7c9b5a3917c665b4a43363b3c3e3f4b4f5d657481939cadc1c7cacfbcab9e8978635645322414020000000000000b1f3448596e8399abbccfcbb8a69c867969615855535254565b636c7a869aa2b4c1c6b7a599836f5f4d3828160200000000000000000000000000000000000000000000000000000000000924394d5e666868686868686868686868686868686868686765626054544d483b372e20190e00000000000000000000000000071a2d3d53697e93a7b9ccc8b39e8875604b3c2c1a0a000000000000000000000000000000000000050b0d0c0a04000000000000000000000000000000000000000000000000000000000c151b1e202020202020201e0802000000000000000000000000000000080d0f202020202020200d0b0500000000000000000000000000000000000000000000000a141a1d202020202020202020202020202020202020202020202020202020202020202020201d1a140a000000000000000000000000000000061423303f4b58616e7c86929ca4abb3b8c4c1c4c4c3c3c5c7c6c3c6b9b3aca1998b80736158473b2a1b0b00000000000000000000040a202020202020202020202020202020202020202020202020202020202020202020202020200a040000000000000000000000000000000000000000050b0d101213130c0a0400000000000000000000000d22374c62778ca5b6cac6b19b86715e4c3d30252627292e373f4c56606d7e93a8bed3dfcab59f8d7c665a4938281606000000000000000d22374c62778b9fb4c9d2c1b39e8878635b4c463a3e3d3f3d494e5c6476849aa3b5c5c3b3a1917c675645321e0900000000000000000000000000000000000000000000000000000000000a1d30404d5153535353535353535353535353535353535251504d4b433637342b231c11060000000000000000000000000000000f21364b6176899eb3c4cbb8a695806a5b4938281809000000000000000000000000000000050d192022211f170c00000000000000000000000000000000000000000000000000000f1d29303335353535353535331d150900000000000000000000000002101b2225353535353535352220190e0000000000000000000000000000000000000000000e1c272f3235353535353535353535353535353535353535353535353535353535353535353535322f271c0e0000000000000000000000000000000513212e3a474c5e66737d868f969da6a7abafb0b2b3b3b2b0adaaa89e978e83796a6055473a2a1d0d000000000000000000000b171f353535353535353535353535353535353535353535353535353535353535353535353535351f180c00000000000000000000000000000000030a0d181f2225272828211f170c000000000000000000000f24394e64798ea3c3d4bfaa957f6a5540301c131112141b222f3c4c5e6a8095aabfd5d7c1ac97826c5e4c3c2c1a0a000000000000000013293e53687e93aabbcec9b5a3917c665a493d332928272a2c353e4a586174859ba7b9ccbfb29d8775604b372614010000000000000000000000000000000000000000000000000000000000122230393c3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3c3a383530262220190d0800000000000000000000000000000000000a1e3246576b8095a6b8cbc4b49f8b796356453626190c000000000000000000000000010e19202b343737332a1c130500000000000000000000000000000000000000000000000c1d2d3b44484a4a4a4a4a4a4a4831271909000000000000000000000010202e373a4a4a4a4a4a4a4a4a352b1e0e000000000000000000000000000000000000000a1c2c3a43474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a47433a2c1c0a00000000000000000000000000000003111c2a33404d546067727a81888d92969a9b9c9e9e9d9b98958f89827a6f635b4b44372a1c0d000000000000000000000b1b29334a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a332a1c0c00000000000000000000000000000b171e212a34373a3c3d3d3633291c0c00000000000000000010263b50657b90a5bad0bba5907b66503b261200000002152738485a667c8d9fb4cadfddc7b29d8775614b3e2e1b07000000000000000417293a596e8399aec8d8c5b09b85705e4c3c2c1f171312141a212d3a46566278899eb3c3cbb7a6947e695544311d08000000000000000000000000000000000000000000000000000000000004121d2427292929292929292929292929292929292828272522201c140d0b0500000000000000000000000000000000000000031629394b6176889eb3c0cdbaa99b857460544437291c120700000000000000000008141c2b353b484d4c473a312313030000000000000000000000000000000000000000000015293b4c585d6060606060605f5d4437271502000000000000000000081b2e3e4b4f606060606060605e483c2b190500000000000000000000000000000000000014273a4a575c606060606060606060606060606060606060606060606060606060606060606060605c574a3a271400000000000000000000000000000000000c171f3036434b525c646c74787d8184868789898886837f7a756c645c4e4a3d3127190c000000000000000000000417293a465e60606060606060606060606060606060606060606060606060606060606060606060605e473a2a1804000000000000000000000004121b2933363b474c505153534c463a291704000000000000000010263b50657b90a5baceb9a48e79644f39240f0000010f1d3145566278899eabbccfcbc8cab7a596816c5c4a362211000000000000000a1f33475873889db2c8d3c3a7927d685240301e0f0400000006101c2938495a687e93a5b6cac4b29d8774604b35200b000000000000000000000000000000000000000000000000000000000000000a0f1113131313131313131313131313131313131312100d0b080100000000000000000000000000000000000000000000000b1e334657687e93a2b4c5c7b5a39882726055463a2f201c130d0b0700050b0d131c26303c484d596261584e42312111000000000000000000000000000000000000000000001b3044586a73757575757575756f5544311d080000000000000000000d22374b5c6475757575757575705a4835200b0000000000000000000000000000000000001a2f4357687275757575757575757575757575757575757575757575757575757575757575757575726857432f1a0000000000000000000000000000000000000412182630353e4a4f546063676c6f7072737372716e6a6560564f4a3e362d1d150900000000000000000000000a1f334658707575757575757575757575757575757575757575757575757575757575757575757575705847331f0a000000000000000000000614223039464c55596265676868615846331f0a00000000000000000f24394e64798ea3c3d4b9a48e79644f39240f00000f1f30414b6074859ba7b8c9c4b7b3b7c3b49f8c7a644f402f1c090000000000000c21374c61768ca6b7cbcab6a48c77624d372212000000000000000c1a2c3c4b6074879db2c8cbb7a5917c6651392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729394a6072849aa7b9c8c1b2a097817361584c4035302522201c13182022253036434b5a626f777768604e3f2e1d0d0000000000000000000000000000000000000000001e33485d73888a8a8a8a8a8a8d74604b36200b0000000000000000000f253a4f647a8a8a8a8a8a8a8a78624d38220d0000000000000000000000000000000000001d32475c72878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a86725c47321d000000000000000000000000000000000000000008141c202d3636434a4d52565a5b5d5e5e5d5b5855504b4538362d211a0f010000000000000000000000000c21364c61768a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a77614c37220c00000000000000000002142431404c57616a71777a7c7d7d76614c36210c00000000000000000d22374c62778ca5b6cabba5907b66503b2611000b1b2d3d4d5f6c8197a3b5c5c1b5a69da6b7bcab9b85715e4c3823100000000000000e24394e63798ea3c4d4c7b29c8772594834200b00000000000000000e1d314455687e93aabbcec3ae99836e5745321e0900000000000000000000000000000000000007111719202020202020200f0d070000000000000000000000000000000000000000000000000000000000050f15171d1d1d1d1d0d0b0500000000000000000b1c3043546278899eaabbcebeb19f978376665e504a4336383530252b343736434a54606978848c8a7e685d4b3b2b190900000000000000000000000000000000000000001b30465b70859b9f9f9f9fab8d78624d38230d0000000000000000000d22374d62778ca99f9f9f9f8f7a654f3a25100000000000000000000000000000000000001d32475c72879c9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9c86725c47321d0000000000000000000000000000000000000000000108101b22253035383d414546474949484643403a363127221b100700000000000000000000000000000a1f33465874899e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8e79644f39240f000000000000000000102031424e5e66767f868c8f91928f7a65503a251000000000000000000b1f34475972879db2c7bea9947f69543a2a17041729394a5b677d929fb1c1c5b5a39b889da7b8b5a3907b66503f2e1b08000000000010253a50657a8fa5bacfc4af9a856f5a3b2b18050000000000000000021527374c61768a9fb4c9c9b49f8a76604b36210b00000000000000000000000000000000000a19242c2f3535353535353524211a0f0100000000000000000000000000000000000000000000000000000917222a2d3232323232221f180d0000000000000000132536485a667c8c9fb4bbcebdb1a199877b6f656054504d4a43483b484c50546066737e8a99a19f8c7b6559483727150100000000000000000000000000000000000000182e43586d8398adb5b5b5a5907a65503b25100000000000000000000b20354a60758a9fb4b5b5a7927c67523d27120000000000000000000000000000000000001d32475c72879cb1c4b8b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b8c4b19c87725c47321d0000000000000000000000000000000000000000000000000708131c2023272c2f3132343433312e2a25201d150a07000000000000000000000000000000000417293a5b70859bb0c2b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a6917c67513c27120000000000000000071b2e3e4e60687c89949ca4a5a6a7927d67523d2812000000000000000005182a3b576c8297acc1c4ae99846f5847331f101e33465763798a9fb4bdc9b8a79b8577899eb3c1af9a85705d4b37220c000000000010263b50657b90a5bad0c3ad98836e58432e1900000000000000000000091f3347586f8499aec4cdbaa9907b65503b2610000000000000000000000000000000000719293640444a4a4a4a4a4a4a39362d200f00000000000000000000000000000000000000000000000000051727353e42474747474737342a1d0d0000000000000008182b3c4c5e697e939db4bbc8bfb3a69d90847b736b666260545d5e5962656b737b85939ea8b3aa9d8877625544311d0800000000000000000000000000000000000000162b40566b8095abc0cabda7927d68523d2813000000000000000000071c30435472879cb2c7bfaa947f6a553f2a150000000000000000000000000000000000001d32475c72879cb1b8a69d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9d9da6b8b19c87725c47321d000000000000000000000000000000000000000000000000000000070b0e12171a1b1d1e1e1d1c1915100b09020000000000000000000000000000000000000014293f54697f94a4b5c6d7cacacad0c7c4bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbda9947f69543f2a1400000000000000000d22374b5c687e8d9ea7b1b6b3aba7947f6a553f2a1500000000000000000010253b50657b90a3b5c9b49f8b77614c3c2b2132434b6175869ca8bacdbcab9e8978697f94a8b9b4a28f7a654f3a2917040000000010253b50657a90a5bacfc2ad97826d58422d18030000000000000000000417293a54697e93a9c9d7c7aa95806b55402b1600000000000000000000000000000000112436475459606060606060604e4a3e2d1a070000000000000000000000000000000000000000000000000f22354552575d5d5d5d5d4c483b2a1805000000000000000e1e2f404f60697f939faab8c5c4b7b2a29a9087817b777573727374777b8087909ba3b4b9c6b7a69a8574604b35200b0000000000000000000000000000000000000013283e53687d93a8bdd2bfaa95806a55402b15000000000000000000001325365a6f859aafc4c1ac97826c57422d170200000000000000000000000000000000001d32475c72879cb1b39d88888888888888888888888888888888888888888888888888889db3b19c87725c47321d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6074869ca8bacde1e3d0c0b3afa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a897816c57422c1702000000000000071a2d3d4f647a8b9fabb8b5a69d9592907d68533d28130000000000000000000e23384b5d71869bb1bfbbaa95806b5a48382e3f4f616e8298a4b6c6bfb59f8d7c666176899eb4c0ae98836e5847331f0a000000000f24394f64798ea4c8d8c3ae99846e59442f19040000000000000000000010253a50657a8fabbccfc4ae99846f5937271501000000000000000000000000000002172c4054656e75757575757575705c4a36210d000000000000000000000000000000000000000000000000152a3e52636c7272727272625948341f0b0000000000000000112232424f61697e8c9ea7b3bfcac0b3afa59c96908d89888788898c90969da5b0b5c1cdc1b5a69d8878624d38220d0000000000000000000000000000000000000011263b50667b90a5bbd0c2ad97826d58422d1800000000000000000000182d42586d8297adc2c4af99846f5a442f1a0000000000000000000000000000000000001d32475c72879cb1a08a73737373737373737373737373737373737373737373737373738aa0b19c87725c47321d00000000000000000000000000000000000000000002090b0f12151616161513100d0b0500000000000000000000000000000000000000000000000000000000091d32455663798a9fb4becfdcc7b3a29a9393939393939393939393939393939393939393939393846f5a442f1a050000000000000c21364a5b6f849aaabbb5a39b88807d7b68604e3a2511000000000000000000081c2f3f51677c91a1b3c5b49e8a786256453b4b5d697f94a0b2c2c3b3a195806a5e576c8196acc3b49f8a76614c37210c000000000d22374d62778caabbcec5af9a85705a45301b00000000000000000000000c21364c61768b9fb5cac7b29c87725544311d08000000000000000000000000000004192f44596e838a8a8a8a8a8a8a7a644e39240f000000000000000000000000000000000000000000000000172d42576c81878787878777624c37220d000000000000000003142432434f60697b8999a1b2b7c3c7c3b6b2aba5a99f9e9d9d9fa8a5abb2b6c3c9c8bbb4a39b8879635a4835200b000000000000000000000000000000000000000e23394e63788ea3c5d5c4af9a856f5a36261401000000000000000000152b40556a8095aabfc6b19c87715c3a2a170400000000000000000000000000000000001d32475c72879cb1a08a75605e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e60758aa0b19c87725c47321d00000000000000000000000000000000000003090c151d2024272a2b2c2b2a2825222019120b0903000000000000000000000000000000000000000000000000021528384a5b687e92a0b2c3d3c4af9a847e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d67513c2712000000000000000e24394e63798ea2b4c1b09b85766b68655d4e42311e0b000000000000000000001124394d5f6e8399a7b8b9a89a847460554759657b8c9fb4bec7b7a5998372604b4e63798ea4b6baa9927d6853372715010000000b20354b60758a9fb4cac7b19c87725c3b2a1804000000000000000000000a1f33465873889db3c8cab49f8a75604b35200b000000000000000000000000000001172c41566c81969f9f9f9f9f917c66513c27110000000000000000000000000000000000000000000000001a2f44596f84999c9c9c8c78624d37220d00000000000000000006142532424e5d657883919da5b2b6c3c8c7c0c7bab4b3b2b3b4bac6c0c7cac8bfb3aa9f958577635b493c2b1905000000000000000000000000000000000000000b21364b60768ba6b8cbc7b29d87725443301c0800000000000000000013283d52687d92a7bdc9b49e89745847331f0a00000000000000000000000000000000001d32475c72879cb1a08a75604b48484848484848484848484848484848484848484b60758aa0b19c87725c47321d00000000000000000000000000000000030b161e21273136393d3f4041403f3e3b38342b27211e160a0500000000000000000000000000000000000000000000000a1a2d3d4e606e8298a5b6c7c9b49f8a7968686868686868686868686868686868686868686868675f4d3924100000000000000014293e54697e93a9c0b5a38e79635852504b3f31231301000000000000000000000a1d30414d6277899ea8bab4a298827361586177889daabbcdbaa99d87766154434a5b72879cb2c7ae99836e5544311d08000000081d31445572889db2c7c9b49f89745947341f0b000000000000000000000417293a5b70859bb0c5cebbaa8d77624d38220d00000000000000000000000000000014293e54697e93a9b5b5b5a9937e69543e29140000000000000000000000000000000000000000000000001a2f44596f8499aeb2a28c77624d37220d00000000000000000000071424313f4b5a626f7c87929ca5acb3b8c4c1c4c6c7c7c8c7c6c4c1c4b7b2aba1998c80746259493d2c1e0e0000000000000000000000000000000000000000091e32455773889eb3c8c9b49f8a75604b35200b00000000000000000010253b50657a90a5c9cdb9a88c76614c37210c00000000000000000000000000000000001d32475c72879cb1a08a75604b35333333333333333333333333333333333333354b60758aa0b19c87725c47321d0000000000000000000000000000000b171e28323638454b4f52545556555453504d483c3d36322820190d03000000000000000000000000000000000000000000000f1f31424b6175879ca9bacdbaa99c8675605353535353535353535353535353535353535353514d40301d0a00000000000000182d42586d8297adc2b09b86705b4a3a3b372e2113050000000000000000000000001220344859647a8a9fa9b8b2a09883766573849aa6b7c8bdb49f8b7a645847363d566b8096abc9b49e8975604b35200b000000011426375a70859aafc5cdbaa98c77614c37220c0000000000000000000000192e43586e8398adc3d9c8a58f7a65503a251000000000000000000000000000000011273c51667c91a6bbcac1ab96816c56412c170100000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000614212f3c484d5f67747d878f979da6a8abafb1b2b3b3b2b1afaca8a69d968d83796b6056483b2c1f0f000000000000000000000000000000000000000000031628395b71869bb0c6cebbaa8c77624d37220d0000000000000000000e23384d63788dabbccfc6a38e79644e39240f00000000000000000000000000000000001d32475c72879cb1a08a75604b35201e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e20354b60758aa0b19c87725c47321d0000000000000000000000000001121b293339464b52566064676a6b6b6b6a6865625a58524b4538342b1e170b00000000000000000000000000000000000000000001131e334657647a8b9fb4bfc7b6a497816d5f4d3c3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3c3930221200000000000000001a2f44596f8499aec2ac97826d573d2d25231c11030000000000000000000000000005182b3b4a5c667c8b9ea6b4b2a19a877b8095a2b4c4c1b19f927e685c4a3a2a3b50667b90abbcb9a88f79644f3a240f00000000182d43586d8298adc2d7c7a48f79644f3a240f0000000000000000000001162b40566b8095abc0d2bca7927d67523d28120000000000000000000000000000000f24394e64798ea3c5d6c3ae99846e59442f190000000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000003111d2b34414d556068727a82888e9396999c9d9e9e9d9c9a96938d8880796e635b4b45382b1d0f0100000000000000000000000000000000000000000000192e43596e8398aec3d8c8a48f7a654f3a25100000000000000000000b20364b60758a9fb5cabba6917b66513c261100000000000000000000000000000000001d32475c72879cb1a08a75604b35200b09090909090909090909090909090b20354b60758aa0b19c87725c47321d00000000000000000000000008141c2f39464b5761686f75797c7f8081807f7d7a77736d6760564d483c33291b11000000000000000000000000000000000000000000031729394a5c697e93a1b3c3c2b19f917d675a49382729292929292929292929292929292927241d120400000000000000001b30455a70859aafc1ab96816c56412c170e08000000000000000000000000000000000d1d2e3e4c5e667a889aa2b3b3a59d908d9fb5c0c5b5a397816d604e3e2d21364c61768b9facaca9937e69543e291400000000162b40556b8095aac0d1bca6917c67513c2712000000000000000000000013293e53687e93a8bdd3bfaa957f6a55402a150000000000000000000000000000000c21364c61768ba7b9ccc6b19b86715c3a29170400000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000d19203037444b535d656d73797e818486888989888784817d78736b635b4e4a3d31271a0d000000000000000000000000000000000000000000000001162c41566b8196abc0d1bca7927c67523d2712000000000000000000091d31455673889db3c8bea8937e69533e291400000000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d000000000000000000000009182630404c57616a757d84898e92949596959493908d88837d756c625a4c46392f1c130800000000000000000000000000000000000000000b1b2d3e4f606e8399a5b7c8bdb49e8a78635645311d131313131313131313131313131312100a00000000000000000000192f44596e8499aec2ac97826d57422d180000000000000000000000000000000000000010202f404c5c647884939ea8b4b2ab9fabbcc9b8a79b8574604b4231201f3346586f839697979797826d57422d180200000013283e53687d93a8bdd2bea9947f69543f2a14000000000000000000000011263b50667b90a5bbd0c2ac97826d57422d180000000000000000000000000000000a1f33465874899eb3c9c9b39e89745846331f0a00000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000513192731363f4b4f575b63686c6f7172737372716f6c68635b564e493d362d1d150a0000000000000000000000000000000000000000000000000014293e53697e93a8bed3bfaa947f6a553f2a15000000000000000000021527385b70869bb0c5c0ab96806b56412b1601000000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000000000000000000009192636434b5e66758089929a9fa8a7a9aaabaaa9a8a5a69d98928981786c61574c40302518090000000000000000000000000000000000000000102032424c6176879daabbccb9a89b8574604b402f1d0d00000000000000000000000000000000000000000000000000182d42586d8297adc2ae99836e59392816030000000000000000000000000000000000000212222f3e4b5a62727e89969fa9bab5bcc9bcab9e897862564532241317293a4d627880828282827f69543f29140000000010263b50657b90a5bad0c1ac96816c57412c1702000000000000000000000e23394e63788ea3c5d5c4af9a856f5a3625130000000000000000000000000000000417293a5c71869bb1c6ccb9a78b76614c36210c00000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000009151d202e373a3d494e53565a5c5d5e5e5d5c5a57534e493d38352c211a0f02000000000000000000000000000000000000000000000000000011263c51667b91a6bbd0c1ac97826c57422d1702000000000000000000192e43586e8398adc3c3ae98836e59432e1900000000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d000000000000000000011426374454606b7c88959ea8afb4bac6bfc0c0c0bfbdc4b7b3ada79e968b8176665e4a43362719090000000000000000000000000000000000000002141f334758657b8c9fb4c0c6b5a396816c5e4c3b2b1909000000000000000000000000000000000000000000000000142a3f54697f94a9c6b19c87725745321e09000000000000000000000000000000000000000412202e3c4854606976808a9fb4c9cfc0b59f8d7c665a48382816060b2035495a626b6c6c6c6c69614f3b2712000000000e23384e63788da3c4d5c3ae99846e59442f1900000000000000000000000b21364b60768ba7b8ccc7b29c87725443301c07000000000000000000000000000000192f44596e8499aec3d6c5a38e79644e39240f00000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000208111c23252c36393e414447484949484745413e38352c23211a0f07000000000000000000000000000000000000000000000000000000000f24394e64798ea3c5d6c4af99846f5a442f1a00000000000000000001162b41566b8096abc0c5b09b86705b3b2b1905000000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000000000000000010f1d314455607280909da6b3b9c6c9cdc9c3bebbbababbbdc0c5c5b9b3a99f96877c6a605444372719090000000000000000000000000000000000000004172a3a4b5d6a7f94a2b3c4c1b09e917c66594837261401000000000000000000000000000000000000000000000010253b50657a90a8bab49f8a76604b36210b000000000000000000000000000000000000000002101e2b36434a586176889db3c8c6b3a295806a5e4c3c2b1a0a0006192c3c494d5657575757544f43321f0c000000000b21364b60768ba6b8cbc6b19c86715c3a29170400000000000000000000091e32455773889eb3c8c9b49f8a75604a35200b000000000000000000000000000001172c41566c8196abc1d1bba6917c66513c271100000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000080e101a2123292c2f3133343433322f2c2823211a0f0c060000000000000000000000000000000000000000000000000000000000000c21364c61768ba7b9ccc7b19c87725c3b2a180400000000000000000014293e53697e93a8bec8b39d8873594834200b000000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000000000000000f1f32434b607382969eb3b7c4cccdc6b9b4aea9a6a5a5a6a8abb0b4bbc7bab4a59d8d807260554437261401000000000000000000000000000000000000000c1c2e3f4b6072849aa6b8c9bdb39e8978625544311d1100000000000000000000000000000000000000000000000b21364b6075899fb4bbaa907b66503b2611000000000000000000000000000000000000000000000e1825303e53697e93a6b7cbb9a89a8472604b402f1e0e0000000e1e2c353841424242423f3b3224140300000000091e32455673889eb3c8c9b39e89745846331f0a00000000000000000000031628395b71869bb0c6cebaa98c77624d37220d00000000000000000000000000000014293e54697e93a9bed3bea9937e69543e291400000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000060c0e13171a1c1d1e1e1d1c1a17130e0c060000000000000000000000000000000000000000000000000000000000000000000a1f33465874899eb3c9c9b49f89745947341f0b00000000000000000011263c51667b91a6bbcbb7a68c77624d37220d000000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000000000000071a2d3d4f616d8298a0b0bccbd0c6b9b4a89e9994918f909193969b9faab1b6c2b7ab9f958273605544311d080000000000000000000000000000000000000000101c3043546277889dabbcccb8a79a8473604b3f2f1d0c00000000000000000000000000000000000000000000091e3245566f8499aec8ab96816b563b2b1805000000000000000000000000000000000000000000000822364a5c72879cb2c4c4b49e8a7862544330221200000000000e1920232c2d2d2d2d29271f14060000000000031628385b71869bb0c6ccb9a78b76614c36210c0000000000000000000000192e43596e8398aec3d8c7a48f7a644f3a250f00000000000000000000000000000011273c51667c91a6bbd1c1ab96816c56412c1701000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5c71869cb1c6cdbaa98c77614c37220c0000000000000000000e24394e63798ea3c5d4c4a7927d6852392816030000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d000000000000000c21364a5b697f94a0b2becdcfbfb3a89e9489837e7b7a7a7b7d81858a939ca4b4babcb5a0988373604b35200b0000000000000000000000000000000000000000011426364759657b8d9fb4c0c5b4a295806b5d4b3b2a18080000000000000000000000000000000000000000000216283853697e93a8c2b19c8671594834200b000000000000000000000000000000000000000000000f24394f64798ea4b6cab7a6937e695a4836261404000000000000060c0d161717171714120c0300000000000000192e43596e8398aec3d6c5a38e79644e39240f0000000000000000000001162c41566b8196abc0d1bca7917c67523c27120000000000000000000000000000000f24394e64798ea3c5d6c3ae99846e59442f1900000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000010b11131313131313131313131313110f0900000000000000000000000000000b151b1d20202020202016130d040000000000000000000000192f44596e8499aec3d7c7a48f79644f3a240f0000000000000000000c21364c61768ba7b9ccc3ae99836e5746321e090000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d000000000000091d2f404e63798c9fb4becfcfbeb2a19a8a7f766e6966656566686b70767e86939fa9b6baa99d8776614c37210c00000000000000000000000000000000000000000008182a3b4c5d6b8095a2b4c5c0b49f8d7b655947362513000000000000000000000000000000000000000000000e23384d63788da4b6b5a48c77624c37220d00000000000000000000000000000000000000000000152b40556a8095aac3c8b39d8875604b3c2b18080000000000000000000001020202020000000000000000000001162c41566b8196abc0d0bba6917b66513c2611000000000000000000000014293e53697e93a8bed3bfa9947f6a543f2a150000000000000000000000000000000c21364c61768ba7b9ccc6b19b86715c3a291704000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000005131e2528282828282828282828282827241d120400000000000000000000000f1d2830333535353535352b2821150700000000000000000002172c41576c8196acc1d1bca6917c67513c27120000000000000000000a1f33465874899eb3c9c9b49f8a76614b3621100000000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000000000000f24384c5e70859aaabbced0bfb2a098837869615754515050515356586168737e8a9ca4b49f8b7a645847331f0a000000000000000000000000000000000000000000000d1d2f3f4b6073849aa7b8ccbcab9d8877615443301c100000000000000000000000000000000000000000000c2035495a72879cb1c2a7927d6752362513000000000000000000000000000000000000000000001325365a6f8499afc4c4a9947f6a5645321e0e00000000000009080400000000000000000000000000000000000014293e54697e93a9bed3bea8937e69533e2914000000000000000000000011263c51667b91a6bbd0c1ac97816c57422c170200000000000000000000000000000a1f33465874899eb3c9c9b39e89745846331f0a000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000011323313a3d3d3d3d3d3d3d3d3d3d3d3d3c39302212000000000000000000000b1d2d3b44484a4a4a4a4a4a403d3326150400000000000000000014293f54697e94a9bed3bea9947f69543f2a140000000000000000000417293a5c71869cb1c6cdbaa8927d67523e2d1b0700000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000000000071a2d3d51667c91a2b4c8d5c5b3a1988273625a4b46393c3a3b3c3e3a474c5560697986989f927d675c4a3a2a17040000000000000000000000000000000000000000000000111d3144556278899eb3bdc9b7a6998372604a3e2e1c0c000000000000000000000000000000000000000006192c3c566b8196abc6ad98836d5443301c070000000000000000000000000000000000000000071c30435473889db3c8b7a68d78634e38281500000000090f111e1d1915110d0b050000000000000000000000000011263c51667b91a6bbd0c0ab96816b56412c1601000000000000000000000e24394e63798ea3c5d6c4af99846f5a442f1a0000000000000000000000000000000417293a5c71869bb1c6ccb9a78b76614c36210c000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000b1e31414e525353535353535353535353514c40301d0900000000000000000015283b4b585d60606060606055504433210d00000000000000000012273c51677c91a6bcd1c1ac96816c57412c17020000000000000000001a2f44596f8499aec4d7c6b09a85705c4a36221200000000000000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000000000c21364a5b70859bb0c0d1ccb8a79983736055483c33292625252628293337444b5b6375828a806b5f4d3e2d1c0c00000000000000000000000000000000000000000000000001142637485a667c919fb0c1c4b3a1947f695c4b3a291704000000000000000000000000000000000000000010263b50657b90a8b9b39e8874604a35200b00000000000000000000000000000000000000000b20354a60758a9fb4c8b29d88735b49351a0a000004121d242634332f2b26221f180d0000000000000000000000000f24394e64798ea3c6d6c3ae98836e59432e1900000000000000000000000c21364c61768ba7b9ccc6b19c87715c3a2a1804000000000000000000000000000000192f44596e8499aec3d6c5a38e79644e39240f000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000011253a4e60686868686868686868686868665e4c3924090000000000000000001b30445869727575757575756b62503d28130000000000000000000f243a4f64798fa4c6d7c4ae99846f59442f1a00000000000000000002172c41576c8196acc1d6c8b4a28e7a644f402f1d0d000000040000000000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d00000000000e24394e63798ea3b5c9d4c3b39e8977625544372b1e171110101113171f26313d4a57616d756b625141302010000000000000000000000000000000000000000000000000000009192b3c4c5e6c8196a3b5c6bfb49f8c7a645846331f1401000000000000000000000000000000000000000b20364b6075899eb4b8a68e79634e39240e00000000000000000000000000000000000000000c21364c61768babbcc5b09b85705b3d2c1a00000012222f383c494844403c37342a1d0d00000000000000000000000c21374c61768ca8b9ccc5b09b86705b38281603000000000000000000000a1e33465774899eb3c9c9b49e89745847331f0a000000000000000000000000000001172c41566c8196abc1d1bba6917c66513c2711000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000013283d52687d7d7d7d7d7d7d7d7d7d7d7d7c66513727150200000000000000001d33485d72878a8a8a8a8a8a806b55402b160000000000000000000c22374c61778ca8bacdc6b19c86715c3a291704000000000000000000142a3f54697f94a9bed4d1c0af99846f5e4c3b2a1c101013190e0c070000000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d0000000005192b3c566b8196abc1d1cbb7a5927d6859473727190d0300000000000409141d2d39464b5560555144332313020000000000000000000000000000000000000000000000000000000d1d2f404b6074859ba8b9ccbbaa9d8776614c42311f0f00000000000000000000000000000000000000091d31455670859ab0c5a7927d68523d281300000000000000000000000000000000000000000c21364b61768ba9bac4af9a846f5a3727150200091d2f404c515e5d5955514c483b2a1805000000000000000000000a1f33475874899eb4c9c8b39e88735645321e0900000000000000000000031729395c71869bb1c6cdb9a88c77614c37220c00000000000000000000000000000014293e54697e93a9bed3bea9937e69543c2b19050000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000001d33485d7287929292929292929292929287735544311d0800000000000000001b30455b70859a9f9f9f9f98826d58432d180000000000000000000a1f34475974899fb4c9c9b39e89745846331f0a00000000000000000012273c52677c91a7bcd8c8bbb4a1907c6659483a2d2525292e23211a0f01000000001d32475c72879cb1a08a75604b35200b00000000000000000000000000000b20354b60758aa0b19c87725c47321d000000000b2034485a72879cb1c7dcc7b29d8774604b3b2a1909000000000000000000010f1b293337444b4437332616050000000000000000000000000000000000000000000000000000000000121d31455663788a9eb4bdc8b7a599836e604e3d2d1b0b00000000000000000000000000000000000002152738576c8196acc0ab96816b56412c1601000000000000000000000000000000000000000b20354a6075899fb4c6b09b86715544311d08000f24384c5e6673726e6a66625948341f0b000000000000000000000417293a5c71879cb1c6cbb8a68b76604b36210b0000000000000000000000192f44596e8499aec3d7c6a48e79644f39240f00000000000000000000000000000316283951667c91a6bbd1c1ac96816c5a483420140000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000001a30455a6f859aa8a8a8a8a8a8a8a8a89f8a75604b36200b0000000000000000182e43586d8398adb5b5af9a85705a37261401000000000000000004182a3a5c72879cb1c7ccb9a88b76614c36210c0000000000000000000f253a4f647a8fa4c7cebbaa9f9f9d887762584a3e3a3b3e4439362d1f0f000000001d32475c72879cb1a08a75604b35200f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f20354b60758aa0b19c87725c47321d000000000d22384d62778da4b6cad3c3aa947f6a5544311d0d0000000000000000000000000b171e273135312719160800000000000000000000000000000000000000000000000000000000000002152738495a677d919fb1c2c3b2a1937e685c4a39281603000000000000000000000000000000000002152a3f556a7f94aabfad97826d58422d180300000000000000000000000000000000000000071c30435471869cb1c6b49f8975604b36201206192b3c51667c898884807c77624c37220d00000000000000000000001a2f44596f8499aec4d5c4a38d78634e38230e0000000000000000000001172c41566c8196abc1d1bba6917c66513c27110000000000000000000000000000091e3246576b8196abc0d6c9b39e8978624d42311e0e00000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000172c41576c8196a8a7a7a7a7b0b4c1bcab8d78624d38230d0000000000000000162b40556b8095aac0c7b29d87725544311d080000000000000000001a2f445a6f8499afc4d6c6a38e79644e39240f0000000000000000000d22374c62778ca9bac9b49f8c899f9b8576645c53505053594e4a3d2d1a070000001d32475c72879cb1a08a75604b35242424242424242424242424242424242424354b60758aa0b19c87725c47321d0000000011273c51667c91a6c2d3cab6a58c77624c37261400000000000000000000000000000309151d201d15090000000000000000000000000000000000000000000000000000000000000000000a1a2c3c4d5f6d8197a4b5c6bfb49f8b7a645746321e130000000000000000000000000000000006141f293e54697e93a9beae98836e59432e19040000000000000000000000000000000000000000132536576c8297acc4baa8907a6550403020192035495a70859b9d999591836e59432e190400000000000000000002172c42576c8197acc1d0bba5907b66503b2611000000000000000000000014293f54697e94a9bed3bea9947e69543f291400000000000000000000000000001325364b6175899eb3c9deccb9a79a846f604e3c2b1808000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000f24394e647a8a91929292929ba3b4c9a5907a65503b2510000000000000000013283e53687d93a8bdcab49f8a75604b35200b000000000000000002172d42576c8297acc1d0bba6917b66513c26110000000000000000000b20354a60758a9fb4c9b49f8c8095a39b867a6e686565686e635b4a36210c0000001d32475c72879cb1a08a75604b39393939393939393939393939393939393939394b60758aa0b19c87725c47321d00000000152b40556a8095aabfd5c7b29c877259483419090000000000000000000000000000000001080b080100000000000000000000000000000000000000000000000000000000000000000000000e1e30414b6075869ca8bacdbaa99c8675614b41311f0e0000000000000000000000000000021424313a41566b8095abc6ac97826d57422d1802000000000000000000000000000000000000000011263c51667c91a6b7c6ae99836e5e4c3f352b32404d62788da3b2aeaa97826c57422d170200000000000000000000152a3f546a7f94a9bfd2bda8937d68533e2813000000000000000000000011273c51667c91a6bbd1c1ab96816c56412c1701000000000000000000000000071c304354687e93a7b9ccccc8c5b3a2937e685a49362513000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000d21364a5c64777c7d7d7d7d849bb0bda7927d68523d2813000000000000000011263b50667b90a5bbcebbaa8d77624d38220d000000000000000000152a3f546a7f94a9bfd3bea9937e69543e2914000000000000000000071c30435472879cb2c7bcab8c77899ea49c8d837d7a7a7e8379634e39230e0000001d32475c72879cb1a08a75604f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f60758aa0b19c87725c47321d00000000182e43586d8398adc2d7c2ad98826d583b2b1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131e32455663798a9fb4bec7b6a497826d5f4d3d2c1a0a000000000000000000000000000b1f31424e535f70859bb0baa8937e68533e29130000000000000000000000000000000000000000000b20364b6074879db2c3b3a1917c665d4d483c454b5e6c8197acc1c2a9947f69543f2a14000000000000000000000012273c52677c91a7bcd1c0aa95806b55402b1600000000000000000000000f24394e64798ea3c6d6c3ae99846e59442f19000000000000000000000000000b20354a6073869cb1c5c5b8b3b8c0b49e8a78625443301c0e0000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000071a2d3e4a5962676767676b8196abbfaa95806a55402b1500000000000000000e23394e63788ea3c5d5c8a48f7a654f3a251000000000000000000012273d52677c92a7bcd1c0ab96816b56412c16010000000000000000001325365a6f859aafc4b7a28c777d92a1ab9f99928f9093927d68523d28130000001d32475c72879cb1a08a75646464646464646464646464646464646464646464646464758aa0b19c87725c47321d000000001b30455a70859aafc5d3bea8937e69533e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384a5b687e92a0b2c3c2b1a0927d675b493828150200000000000000000000000011263a4e60686e7d92a3b5b49f8a77614c37220c000000000000000000000000000000000000000000091d314556687e93a5b6bfb49e8a7b6c625a5a5660697c909fb1c5b6a48e79644e39240f00000000000000000000000f253a4f647a8fa4c7d8c2ad98836d58432e1800000000000000000000000c21374c61768ca8b9ccc6b19b86715c392917030000000000000000000000061a2c3d50667b90a4b6cab8a79ea7b8b9a89a8472604a3d2c190900000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000f202d3b484c51525253697e93a8bead97826d58422d1800000000000000000b21364b60768ba7b8ccbca7927c67523d271200000000000000000010253a4f657a8fa4c7d8c3ae99836e59442e1900000000000000000000182d42586d8297adc2b8a38d786f8399a5b5aea8a5a5a896816c563625130000001d32475c72879cb1a48f7a7979797979797979797979797979797979797979797979797a8fa4b19c87725c47321d000000001c31475c71869cb1c6d1bca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2d3d4e606d8298a5b6c7beb49e8a79635645321d1200000000000000000000000013293e53687e838d9fb5b39f947f6a5947341f0a000000000000000000000000000000000000000000021527384b6074879ca8bab9a89e8c8178726f70757e8b9fb4bdc0b19c8673604a35200b00000000000000000000000d22374d62778ca9bacec5b09a85705b37271501000000000000000000000a1f33475874899eb4c9c8b39e89735746331e0a00000000000000000000000c2135495b6f8499afc2c8b39e899ea6b8b4a2937e695b4937261401000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000010f1d2b34373c3d3d51667b91a6bbaf9a85705a3726140100000000000000091e32455773899eb3c8bfa9947f6a543f2a150000000000000000000d22374d62778ca9bacec6b09b86715b39281603000000000000000000152a40556a7f95aabfb9a48f796477879da7b7c3babaaf9a85705443301c0700001d32475c72879cb1aa988f8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8f98aab19c87725c47321d000000001d32475d72879cb2c7d0baa5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f31424b6175879ca9bacdb9a89b8574604b40301e0e00000000000000000000001c32475c7186989faba69e908172604a3a2a1804000000000000000000000000000000000000000000000a1d31445563798a9fabb9b9aa9f968c87858589949fa9bac3b3a2927d675443301c0700000000000000000000000b20354a60758a9fb4c9c7b29d88725544311d080000000000000000000004172a3a5c71869cb1c6ccb8a78b76614c36210c00000000000000000000031729394e63788c9fb5cac1a7927d889eb3c0b49f8a79635544311d0f000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000d1820222728394e63798ea3c5b29d87725544311d0800000000000000031628395c71869bb1c6c1ac97826c57422d170200000000000000000b20354b60758a9fb4c9c8b39e88735746321e0900000000000000000013283d52687d92a7bdc6a5907b656379899da5b3bfc6b39e8974604a35200b00001d32475c72879cb1b6aaa4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4aab6b19c87725c47321d000000001d33485d72889db2c7ceb9a48e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001131e334657647a8b9fb4bfc6b5a396816c5e4d3c2b1909000000000000000000001a2f44596f8499aeb39e887b6c6054433626140100000000000000000000000000000000000000000000021527374a5b677d8d9ea8b4bbb4ab9f9c9a9b9ea8b4bac0b4a59a8473604b362513000000000000000000000000071c30435472879db2c7cab49f8a75604b35200b00000000000000000000001a2f44596f8499aec4d6c5a38e79634e39240e000000000000000000000a1e3346576c8196abbcc9b5a38c777f94a5b6baa99b8573604b3d2d19090000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000050b0d1221364c61768ba7b9b49f8a75604b35200b0000000000000000192e44596e8399aec3c4af99846f5a442f1a000000000000000000081c30435472879db2c7ccb8a78b76614b36210c00000000000000000010253b50657a90a5b0b0a8907b655b647a8799a1acb1b3a88d78624d38230d00001d32475c72879caeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae9c87725c47321d000000001d32475c72879cb1c7ceb9a38e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031729394a5c697e93a1b3c3c2b19f917c665a4837271501000000000000000000172c42576c8197abb2a69d887d6d605443301c10000000000000000000000000000000000000000000000009192d3d4d5f677c8a9ba3b1b5bcb5b1afb0b4b9c3b7b2a29a8776615544311808000000000000000000000000001325365a6f859aafbdbdbcab8d78624d38230d0000000000000000000002172c41576c8196acbdbdbba6907b66513b2611000000000000000000011426364c6176899eb4c9c6b19b867174879db2bfb4a3947f6a5b4a3727150100000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000a1e33465774899eb3bbaa8d77624d38220d0000000000000001172c41566c8196abc1c6b19c87715c3a2a17040000000000000000011426365a6f859aafc4d5c5a38e78634e39230e0000000000000000000e23384d63788d9a9a9a988a77614c5c6477838f979c9e9d917c67513c271200001d32475c72869999999999999999999999999999999999999999999999999999999999999999999986725c47321d000000001c31465c71869bb1c6cfb9a48f7a644f3a250f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4f606e8399a5b7c8bdb39e8978625544311d1100000000000000000014293e53697e8c919da5a69d928172604b3f2e1b0800000000000000000000000000000000000000000000000f1f30414d5e667985919ba3a9aeb1b2b3b1afaba59d9284766158473726140000000000000000000000000000182d42586d8297a8a8a8a8a58f7a65503a25100000000000000000000000142a3f54697f94a8a8a8a8a8937e69533e2914000000000000000000081c304354697e93a8b9cdc0aa95806a677c91a1b3c1b49f8b79635544311d1000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000031729395c71869bb1c8a58f7a65503a2510000000000000000014293f54697e94a9bec9b49e89745847331f0a000000000000000000182d42586d8297adc2d0bba5907b66503b26110000000000000000000b20364b607484858585837b6559474a59616e7a81878987827a644e39240f0000172c42576c8184848484848484848484848484848484848484848484848484848484848484848484816c57422c17000000001b30455a70859aafc5d0baa5907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102032424c6176879daabbccb9a79b8573604b402f1d0d000000000000000012263b4f6069747c879da7b39f96806b5d4b37220c000000000000000000000000000000000000000000000001132330404c5b63707c868e94989b9d9d9c9a9690877d736158473a2a19090000000000000000000000000000152b40556a80939393939393927d68523d2813000000000000000000000012273c51677c91939393939393806b56412b160000000000000000000b20354b6073879cb2c6c8b4a28d78635f6f8499a8b9baa99b8573604b3e2d1a0a000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000192f44596e8499aebca7927d67523d2812000000000000000012273c51677c91a6bccdb9a88c76614c37210c000000000000000000152a40556a7f95aabfd3bda8937e68533e2913000000000000000000091d31455660707070706e655d4b3a3a474c5c646c7173726d645c4a36210d0000152a3e52636c6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6c63523e2a1500000000182e43586d8398adc2d2bca7927d67523d281200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002141f334758657b8c9fb4c0c5b4a395806b5e4c3b2a1808000000000000000c1f32424f55606678899eb3b59f8d7a654f3a2a170400000000000000000000000000000000000000000000000513222f3d4a4e5e6671797f838688888785817b74686055473a2a1c0c0000000000000000000000000000000e23394e63797e7e7e7e7e7e7e7a644e39240f00000000000000000000000d22374c62777e7e7e7e7e7e7e7b65503b25100000000000000000071a2d3d51667c91a5b6cac5af9a85705b4d62788a9eb4c1b5a3957f6a5c4a382715020000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000001172c41566c8196abbfaa947f6a553f2a1500000000000000000f243a4f64798fa4c7d7c6a48e79644f39240f00000000000000000013283d52687d92a7bdd2c0ab95806b56402b1601000000000000000002152738454b5b5b5b5b58504b3f2e2a343e4b4f575c5e5d584e4a3d2d1a0700000f22354552575959595959595959595959595959595959595959595959595959595959595959595957524535220f00000000162b40556b8095aac0d4bfaa947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4b5d6a7f94a2b3c4c1b59f8d7b655948362614010000000000000214243237444b5a6a7f94aabcab99846f5847331f0a00000000000000000000000000000000000000000000000004121f2d36404c515c64696e717273716f6b6560554b44372a1c0c000000000000000000000000000000000c21364a5b6368686868686868645c4a36210d00000000000000000000000b203448596268686868686868655d4b37230e00000000000000000c21364a5b6f849aafc3ccb8a7927d6752485a697e93a3b4c1b49f8b7a645645311d100000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000014293f54697e94a9beac97826d57422d1800000000000000000c22374c61778ca9bacdbba6917c66513c271100000000000000000010253a50657a8fa5c9d9c3ad98836e58432e19000000000000000000000a1a27313645454545433a372e21181f2e373a424749484339362d1f0f000000051727353e4244444444444444444444444444444444444444444444444444444444444444444444423e352717050000000013283d53687d92a8c6d6c2ad98836d583a2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b0b0b0b0b0b0b0b0b0b0b000c1c2e3f4a6072849aa6b8c9bcab9e8877625443301c100000000000000006141927313c4d62778ca5b6b49f8b76614c37210c00000000000000000000000000000000000000000000000000010f1a2130393d4a4e54595c5d5e5c5a56504b44373126190c0000000000000000000000000000000000071a2d3d4a4e535353535353534e4a3d2d1a07000000000000000000000005182b3b484c53535353535353504b3f2e1c08000000000000000417293a4e63798ea2b4c7c8b39e8975604b3c4b6073859ba9babbaa9c8674604b3e2e1a0a00000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000011273c51667c91a6bbaf9a846f5a36251300000000000000000b1f34475974899fb4c9bea9937e69543e29140000000000000000000d23384d62788dabbccfc5b09b85705b38281502000000000000000000000a151d20303030302e25231c1104101b22242c3234322e24211a0f01000000000917222a2c2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2c2a22170900000000000e24394e63798ea8b9ccc7b19c87725947341f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e1020202020202020202020202020201c3043546277889dabbcc9b8a69a8472604b3f2e1c0c000000000000000009152034485972879db2bcab907b66513b261100000000000000000000000000000000000000000000000000000007121d242d36393f434648484745413b3631271d1409000000000000000000000000000000000000000f1f2d36393e3e3e3e3e3e3e39362d1f0f000000000000000000000000000d1d2b34373e3e3e3e3e3e3e3b372e211100000000000000000a1f3347586c8297acc0d0c0ab96816c564532435463798b9fb4c2b5a495806b5c4b38281603000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000f24394f64798ea4c6b29c87725443301c070000000000000004182a3b5c72879cb1c7c0ab96816b56412c160100000000000000000b20354b60758a9fb4cac8b29d88735645321d09000000000000000000000002090b1b1b1b1b19100e08000000070d0f171c1e1d180f0d0700000000000000050f15171a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a17150f050000000000000b20354b6074899eb4c9cab49f8b77614c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101b222535353535353535353535353535353525364759657b8d9fb4c0c4b4a2947f6a5d4b3a2a1704000000000000000005192b3b5a6f8499afc9a9937e69543e29140000000000000000000000000000000000000000000000000000000000090f1a21242a2e31333332302c25201d1509010000000000000000000000000000000000000000010f1a21232929292929292924211a0f0100000000000000000000000000000d1820222929292929292925231c110300000000000000011426374c61768a9fb4c9c8b4a28e79634e382836495b6a7f95a4b5c2b49f8c7a645645321e11000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000c21374c61768ca8b9b49f8a75604a35200b00000000000000001a2f455a6f849aafc4c3ae99836e59442e19000000000000000000081d31445573889db2c8cab59f8a75604b36200b00000000000000000000000000000606060603000000000000000000020709080300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546f849aafc9cfbcab927d67523b2a18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010212e373a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b4c5d6b8095a2b4c5c0b49f8c7b655847331f14020000000000000000172d42576c8297acbfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000070d0f14191c1d1e1c1a16100b0802000000000000000000000000000000000000000000000000070c0e131313131313130f0d070000000000000000000000000000000000050b0d13131313131313100e08000000000000000000081d314455697f94a8bacdc5b09a85705b49361a2c3d4b6074869cabbcbbaa9c8675604b3f2e1b0b0000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000a1f33475874899eb4baa98c77624d37220d0000000000000002182d42576d8297acc2c6b09b86715b392816030000000000000000011527375b70859ab0c5cfbcab8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d1315202020202013110b0200000000000000000000000000000000000000000000000114263653697e93abbccfc9ae99836e5947341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b4f60606060606060606060606060606060606060606073849aa7b8ccbbaa9d8776614c423220100000000000000001162c41566b8196abc0ab96806b56412b1601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074879db2c6ccb9a7927d68523d2c1a1d314556647a8c9fb4c3b6a496816c5d4b3929160300000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000004172a3a5c71879cb1c7a48f7a644f3a250f0000000000000000152a40556a7f95aabfc8b39e88735745321e09000000000000000000182e43586d8398adc2dac9a5907a65503b25100000000000040a202020202020202020202020202020202020202020202020202013100b010000000000000000000000000000000000071520282a353535353528261e130600000000000000000000000000000000000000000000000d22374d62778c9fb5cacab49f8b77624c3929170300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22374b5d657575757575757575757575757575757575757575757578899eb3c8c8b7a699836e604f3e2d190900000000000001162b40566b8095abc0ac97816c57422c17020000000000000000000000000000000000000000040a0c1013161718181715130f0b09030000000000000000000000000000000000000000000000000c151b1e2020202020201f1d170e02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e51677c91a5b7cac9b39e8975604b36210f1527384b5c6c8196a5b7c2b59f8d7b655746321e1100000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000001a2f44596f8499aebca7927c67523d2712000000000000000013283d52687d92a7bdccb8a78b76604b36210b000000000000000000162b40556b8095aac0d2bda8927d68533d2813000000000c181f353535353535353535353535353535353535353535353535353528251e1305000000000000000000000000000000031525333c404a4a4a4a4a3e3a31241302000000000000000000000000000000000000000000000b2034485970859aafc3cebbaa957f6a5746331e0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8d9ea7b8ccd4c4b3a1937e695c4a37261401000000000001162c41566b8196abc0ac97826c57422d17020000000000000000000000000000000000050b0d171f2125292b2c2d2d2c2b2825211e160b090200000000000000000000000000000000000000000f1d29303335353535353534322b20120200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c70859ab0c3d1c1ac96816c5645321e090a1a2e3e4b6175879db2bebcab9d8775614b3f2f1b0b000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000002172c42576c8197acbfa9947f6a543f2a15000000000000000010253a50657a8fa5c9d5c5a38d78634e38230e00000000000000000013283e53687d93a8bdd2bfaa95806a55402b150000000c1c2a334a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3d3a3123130100000000000000000000000000000d20334350555f5f5f5f5f534e42311e0b0000000000000000000000000000000000000000000005182b3b51677c91a5b7cac8b39e8976614c3e2d1b0b0000000000000000000000000000000001080b0c0a030000000000000000000000000000000000000000000d22374d62778ca99f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9fa2b3b8c5d5e2d0bfb49f8b7a645544311d08000000000002172d42576c8297acc1ac97826c57422d1702000000000000000000000000000000040d1820222933363a3e4041424242403d3a363228211e160a0400000000000000000000000000000000000c1d2d3b44484a4a4a4a4a4a49463d3020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4e64798ea2b4c8c9b5a38e79634e3828160300101e324657657b90a0b2c4b6a597816c5d4c3a2917040000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000000142a3f54697f94a9beac97826c57422d1702000000000000000d23384d62788dabbccfbba5907b66503b261100000000000000000010263b50657b90a5c9dac2ad98826d58432d18000004182a3a475e60606060606060606060606060606060606060606060606060524e41311e0b000000000000000000000000000013283c50616a757575757568604e3a261100000000000000000000000000000000000000000000000d20354b6074879db2c2ccb8a796806b5c4a3929190a000000000000000000000000000008141c20211e160b00000000000000000000000000000000000000000b20354b60758a9fb4b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b7c8ccd5d3d3d3cebaa99c8673604b35200b000000000003192e43586e8398adc1ac97826c57422d170200000000000000000000000000000c181f2b34373a464c4f53555758585755534f4b45383632281f170b0000000000000000000000000000000015293b4c585d6060606060605f5a4e3d1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3447596d8297adc0d1c6b09b85705b4a361a0a0000031628394c5e6d8298a6b8c3b19f907b655846331f120000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000012273c52677c91a7bcaf99846f5a442f1a00000000000000000b20364b60758a9fb4cabda8937d68533e28130000000000000000000e23384e63788dabbcbdbdaf9a85705a37261401000a1f3347587075757575757575757575757575757575757575757575757575685f4e3a25100000000000000000000000000000152a40556a7f8c8a8a8a8c7e68533e28130000000000000000000000000000000000000000000000081d314455687e93a4b6cac5b49f8c7a64574637281a0c00000000000000000000000210182630353632291c1308000000000000000000000000000000000000081c30435472879cb2bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc7b5a4907a65503b25100000000000051a2f445a6f8499afc1ac97826c57422d170200000000000000000000000002101c2a333b484d54586165686b6c6d6d6c6a68646056524b453833291b120100000000000000000000000000001b3044586a73757575757575746c5a3a2a17040000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374c61778a9fb4c9ccb9a8927d68533d2d1a000000000b1b2f404c6176889db3bfbdb29d8776614c402f1c0c00000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000f243a4f64798fa4c7b19c87725c3b2a180400000000000000081d31445573889db2c8c0aa95806b55402b160000000000000000000b21364b60768a9fa8a8a8a89d88725544311d08000c22374c61778a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d68523d2813000000000000000000000000000013283d53687d929f9f9f95806b56402b160100000000000000000000000000000000000000000000011426374b6074869cb1becebbaa9c8675615545382a1d120801000000000000000614202e36434b4b4639302518080000000000000000000000000000000000011426365a6f849aa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8947f6a543f2a150000000000061b30455b70859ab0c1ac97826c57422d170200000000000000000000000210202d3a474c59626970767a7e8081828281807d7a766f6860564c463a301d1409000000000000000000000000001e33485d73888a8a8a8a8a8a8a745847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556a7f94a9bacdc9b49e8975614b36210f0000000000111f334758677c91a1b3c5b7a597826d5e4c3a2a1704000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000d22374c62778ca9bab49f89745947341f0b00000000000000021527375b70859bb0c5c2ad98836d58432e18000000000000000000091e32455673889393939393938b75604b35200b000a1f33475874899e9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f957f6a55402a15000000000000000000000000000010253b50657a90a5b4ad98836d58432e18000000000000000000000000000000000000000000000000091d314455667c90a0b2c3c8b6a49983736056473b30201c140d0b0502080b0f1a21323e4b546061574a43362513000000000000000000000000000000000000172d42576c81939393939393939393939393939393939393939393939393939393939393939393826d57422d180000000000061b31465b70869bb0c1ac97826c57422d1702000000000000000000000010202d3e4a58616c777f868b8f93959697979795928f8a847d756b61584c40312619090000000000000000000000001b30465b70859b9f9f9f9fa88c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b6074889db2c7d2c1ac97826c5746321e09000000000004172a3a4d5f6e8399a7b9c3b19f917c665847331f12000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000b1f34475974899fb4baa98c77614c37220c0000000000000000192e43586e8398adc3c5b09a85705b3727150100000000000000000216283851677d7e7e7e7e7e7e7e74604b36210b0004182a3a5c71869cb1b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ad97826d58422d1800000000000000000000000000000e23384d63788dabbcb09b85705b382815020000000000000000000000000000000000000000000000011527374c5e6d8298a5b7c6c2b3a198827461594d41353026222019151d20232c35424f5c6473766c605443301c1201000000000000000000000000000000000f243a4f647a7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7c66503b26110000000000061b30455b70859ab0c2ad98826d58432d1803000000000000000000000b1b2d3e4a5c6476818a949ba3a4a8aaacadadacaaa8a99f9a92888076665e4b44372618080000000000000000000000182e43586d8398adb5b5c6a38e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e52677d92a6b7cbc9b5a38e79644f392816030000000000000c1c30414d6277899eb3c0beb39d8876614c41301d0c0000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000005182a3b5c72879cb1c7a48f79644f3a240f0000000000000001162b41566b8096abc0c7b29d88725544311d080000000000000000000a24394d5f6768686868686868605645321e090000192f44596e8499aaaaaaaaaaaaaaaab3b8c5d6d0bfb3aeaaaaaaaaaaaa9a85705a45301b00000000000000000000000000000b20364b60758a9fb4b39d88735645321d0900000000000000000000000000000000000000000000000009192f404c6176879da8bac9bfb2a0988477675f504b433637342b273136393d494e60697a878b8172604a40301f0f000000000000000000000000000000000d22364a5c64686868686868686868686868686868686868686868686868686868686868686868665e4c38230f0000000000041a2f44596f8499aec3ae99846e59442f19000000000000000000000417293a4a5c647a88969fa9b0b5c1b7b2afadadaeb0b4b9b4afa79e95887c6c6055443626140100000000000000000000162b40566b8095abc0cabba6917c66513c2711000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c70859bb0c4d4c6b19b86715c4a361b0b00000000000000001220344859687e93a2b4c6b7a698826d5f4d3b2a180400001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000000001a2f455a6f849aafbca6917c67513c2712000000000000000013293e53687e93a8bdcab49f8a75604b35200b0000000000000000000a1d30414d51535353535353534b45382816020001172c41566c819595959595959595959ea7b8ccc7b3a1999595959595959587725d48321d0000000000000000000000000000081d31445573889db2b59f8a75604b36200b00000000000000000000000000000000000000000000000000121f334658647a8a9fabbbc8beb2a29a887c70666054514d483b37444b4e535b636f7e8b9d9f95806a5e4d3d2d1a07000000000000000000000000000000071b2d3e4a4f535353535353535353535353535353535353535353535353535353535353535353504c402f1c09000000000003182e43586d8398adc2b09a85705b362513000000000000000000000a1f334658647a8b9da6b4babab4aaa59d9a9897989a9ea8acb4b8b3a69d918173605443301c100000000000000000000013283e53687d93a8bdd2bea9937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b4f647a8fa3b4bdbdb9a8937e68533e2d1b00000000000000000005182b3b4a6072849aa8bac4b2a0917c675947341f0c00001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000002172d42576c8297acbea9947f69543f2a14000000000000000011263b51667b90a6bbcebbaa8d77624d38220d00000000000000000001122330393c3e3e3e3e3e3e3e3632281a0a00000010253a4f657b808080808080808080899eb3c8c4ae9983808080808080807f6a553f2a150000000000000000000000000000021527375b70859ab0bcab8d78634d38230e000000000000000000000000000000000000000000000000000417293a4a5c677d8d9faabac7c0b4a69e91857b746c6662595e5d556063686f7983939fa9b59f8d7c665b4a36210c0000000000000000000000000000000010202d363a3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3b382f221200000000000001162b41566b8096abc0b19c87725443301c070000000000000000000c21364c6176879da9b7c4b9a89f958d878483828385898f979fa9b4b7b29f978272604b3e2d1b0700000000000000000011263b50667b90a5bbd0c1ab96816c56412c170100000000000000000000000000000000000000000000000000000000000000000000000000000b203448596d8298a8a8a8a8a89e8976614c362110000000000000000000000d1c30435463798a9fa9a8a8a89e8877614c3a291704001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfac96816c57412c1702000000000000000e24394e63798ea3c5d6c8a58f7a65503a25100000000000000000000005121d242729292929292929211e160a000000000e22374b5d656a6a6a6a6a6a6a6a70859bb0c5c0aa95806b6a6a6a6a6a6a6a61503c2813000000000000000000000000000000182e43586d8398adc9a5907b65503b261000000000000000000000000000000000000000000000000000000c1c2d3e4d5f677d8c9fa9b7c3c5b8b3a29b9087817b777473727375787e848c99a1b4babcab9e8a79634e39240e0000000000000000000000000000000002101b222429292929292929292929292929292929292929292929292929292929292929292926231c12040000000000000012273c52677c91a7c3b49e8974604a35200c01000000000000000114263654697f94a5b7c7b9a89e8a8078726f6d6d6e70747a828a9aa2b3bdb1a095806b5c4a36220f0000000000000000000e23394e63788ea3c5d5c3ae99836e59442e190000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778b9393939393928e7f695746331e0a0000000000000000000000132536495b667d8b929393939393836e5846331f0a001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000012273d52677c92a7bcae99846f59442f1a00000000000000000c21364c61768ba7b9c4bca7927d67523d28120000000000000000000000010a1012131313131313130b09020000000000081b2e3f4b4f55555555555555586d8398adc2c2ad98826d58555555555555504333200d000000000000000000000000000000162b40556b8095aabda8937d68533e2813000000000000000000000000000000000000000000000000000000102030404d5f677d8b9da5b2becac0b4b0a59d96908c898887888a8e939a9fabb3bfc9bcb59f8c7c67513c2712000000000000000000000000000000000000070d0f131313131313131313131313131313131313131313131313131313131313131313110f090000000000000000000d23384d62788da5b6b9a88e79634e3a291c140d0b0500000000081c30435471869cb1c3c9b39e8a7a6b625a5a5858595460646c788499a1b3beb49f8c7a644f3d2c1a0600000000000000000b21364b60768ba6b8cbc6b09b86715b3929160300000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63797e7e7e7e7e7e7d7a69614f39291703000000000000000000000008182c3c4d5e66787d7e7e7e7e7e7e76614c36210c001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000010253a4f657a8fa4c7b19c86715c3a2a1704000000000000000a1e33465774899eaeaeaeaa947f6a553f2a150000000000000000000000000000000000000000000000000000000000000010212e373a40404040404040556b8095aac0c5b09a85705b37404040403f3c332515030000000000060c0e1010101010101013283e53687d93a8bdaa95806b55402b161010101010101010100b090300000000000000000000000000000002122230414d5f677a8798a0b2b6c3c8c3b7b2aba6a99f9d9d9e9faaa8afb4bcc9c5b8ab9f937f695f4d3924100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a72879db2c6aa957f6a58473730262220180d0000000b20354b60758a9fb4c9bea9937e695c4d483c434236434b4f5a63748399a5b7bcab9a846f5b4935210c0000000000000000091e32455773889eb3c8c8b39e89735746321e0a00000000000000000000000000000000000000000000000000000000000000000000000000000c2135495b6368686868686868645c4f43321b0b000000000000000000000000000e1e30404d5a6267686868686868615846331f0a001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000d22374d62778ca9bab49e89745847331f0a00000000000000031729395c7186999999999997826c57422d170200000000000000000000000000000000000000000000000000000000000003101b22252b2b2b2b2b2b3e53687d93a8bdc7b29d88725544312b2b2b2a2820150700000000010f1a21232525252525252525263b50657b90a5c9ad98836d58432e25252525252525252525211e160a00000000000000000000000000000004132330414d5c647782919ca4b1b6c2c8c7c1c7bab4b3b2b3b4bbc8c4cac9bcb4a79e8d7e69614f41301d0a00000000000003090c1f20201f1a0f0d070000000001080b181f20201f0b09020000000000000000000000000000000000000000000000000000000000000000000006192c3c556a7f94aabbb39e887661554b433637342b1d0d00000c21364c61768ba9bacdb7a28d78624d3d352b2e2d2630353c49566176879db2c9b4a28e79634e39230e0000000000000000031628395b71869bb0c6ccb8a78b76614b36210c0000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e535353535353534f4a3e3224140000000000000000000000000000001222303c484d525353535353534c463a291704001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000b20354b60758a9fb4b9a88c76614c37210c0000000000000000152b40556a808484848484847f6a55402a15000000000000000000000000000000000000000000000000000000000000000000080e101515151515263b50657b90a5c9cab49f8a75604b3520151515130d0300000000000f1f2c36393a3a3a3a3a3a3a3a3a3a4e63788dabbcb09a85705b383a3a3a3a3a3a3a3a3a3a3a3632281a0a000000000000000000000000000000051323303e4a59616e7c87929ca4adb3b8c5c1c4c7c8c7c8c7c6c2c5b9b3ab9f97887c69604f433223120000000000000b161e21343535342f24221b10020009141d202d35353534201d150a000000000000000000000000000000000000000000000000000000000000000000000e22374c62778b9fb4b8a6998374656054594d483b2b1805000a1f33465874899fb4c9b7a18c77624c3729201918141c202c384658697e94a9bec0aa947f6a553f2a15000000000000000000192e43596e8398aec3d5c5a38e78634e39230e0000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c35383e3e3e3e3e3e3d39362d20140600000000000000000000000000000004121d2b34383d3e3e3e3e3e3e3633291c0c00001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000000081c30435472879cb2c6a38e79644e39240f000000000000000013283c50616a6f6f6f6f6f6f6a61503c2813000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788dabbccebbaa8d78624d38230d000000000000000000061a2c3d494e505050505050505050505060768a9fb5b29d8873565050505050505050505050504b45382816030000000000000000000000000000000512202d3a474c5e66737d878f979ea6a8acafb1b2b3b3b2b0adaaa79e968c8277665e4f423225140400000000000b1b2832364a4a4a494439362d20100919263135424a4a4a493631271a0a0000000000000000000000000000000000000000000000000000000000000000000b203448596a8095a4b5b3a199857a74726e62594834200b000417293a5c71869cb1c6bba6907b66554639352b2c2a29292a293a4e63788da3b8c3ae99836e59442e19040000000000000001162c41566b8196abc0d0bba6907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21232929292929292824221b10020000000000000000000000000000000000000d19202228292929292929211f170c0000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000000011426365a6f859aafbba6917c66513c271100000000000000000d213343505559595959595955504333200d000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb5cac8a58f7a65503a25100000000000000000000c2136495b6365656565656565656565656573889db3b49f8b7565656565656565656565656565605645321e090000000000000000000000000000000002101c2a34404c556068727a82888e93979a9c9d9e9e9d9b98948f8981796d62594c4032241407000000000003162839464b5f60605e5a4f4a3e2d1e142637444b585f60605e4b4538271502000000000000000000000000000000000000000000000000000000000000000005182b3b4b6074869ca4b4b3a39b8f89878377624d37220d0000152a3f556a7f94a8b9c6b09b857361574d483c413f3e3e3f40424b60768ba0b5c6b09b86715b46311c06000000000000000014293e53697e93a8bed3bda8937e68533e29130303030201000000000000000000000000000000000000000000000000000000000000000000000000060c0e131313131313130f0d07000000000000000000000000000000000000000000050b0d121313131313130c0a04000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000182d42576d8297acbea9937e69543e29140000000000000000041525333c40444444444444403c3325150000000000000000000000000000000000000000000000000000000000000000000000000000000000091d32455673889db3c8bda7927d68523d28130000000000000000000e23394e63797a7a7a7a7a7a7a7a7a7a7a7a7b869cb1bcab917d7a7a7a7a7a7a7a7a7a7a7a7a7b75604b36210b0000000000000000000000000000000000000c181f2f37444b525d656d74797e8185878889888786837f7a746c635b4c473b2f221406000000000000091e32465761747575746f645c4a3c2c1d314455606d74757574605645311d090000000000000000000000000000000000000000000000000000000000000000000d1d3144556278869ba2b2b4b0a89f9d96816c57412c1700000d22374d6277899eb4bcb5a39882766a625a59565554545456585a61778ca1b6c6b19b86715c46311c07000000000000000011263c51667b91a6bbd0c0ab95806b56402b19191918171614110d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000152a40556a7f95aabfab96816c56412c1701000000000000000007151b28323e4a4f5455504b3f342b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000021528385b70859bb0c5bfaa957f6a55402a15000000000000000000172c41576c818f8f8f8f8f8f8f8f8f8f8f8f8f9ca4b6c9ac9b918f8f8f8f8f8f8f8f8f8f8f8f8f7b654f3a2510000000000000000000000000000000000000000412192631353f4b50546064696c6f7273747372716d6a6560554e493d342a1d1103000000000000000c21364b61758b8a8a89847a645b493520354b6073828a8a8a8a74604b36200b00000000000000000000000000000000000000000000000000000000000000000002152737485a627785919ca5a9aeb0af99846f5a442f1a00000b20344859687d929eb4b9b2a098887f78726e6b6a69696a6b6d6f727b8fa5bac4af99846f5a442f1a0500000000000000000f24394e64798ea3c5d6c3ad98836e58432e2e2e2e2d2d2b2926222019110b08010000000000000000000000000000000000070c0e1f20202020201e12100a0100000000000000000000030d13151f202020202020100e0900000000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000012283d52677d92a7bcae99836e59442e1900000000000000000003162839454b5c646a6a655d4d483b2b1b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adc2c2ad97826d58422d1800000000000000000014293f54697e94a5a5a5a5a5a5a5a5a5a5a5a5b1b6c2c9b9aca7a5a5a5a5a5a5a5a5a5a5a5a5927d67523d271200000000000000000000000000000000000000000009141d202e3736434a4e53575a5c5d5e5e5d5b58554f4b4437352c1f180d000000000000000000091e3246576e8499a89e998a79634d36263b50657b909fa9a8907b66503626140100000000000000000000000000000000000000000000000000000000000000000009192b3c485961727c878e94989a9c9c87715c47321c000005182b3b4e5f6a80929ea8b4b2a69d948d8783817f7e7e7f808285878c9fb4cabfaa95806a55402b150000000000000000000c21364c61768ba7b9ccc5b09b85705b38434343434342413e3c37342b26201c14080200000000000000000000000000010f1a21243435353535353327241d12050000000000000000071520272a3435353535353526231c11030000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d0000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8b19b86715c392917030000000000000000091e324557606e7a7f7f7a7062594839291703000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc0c4af9a856f5a36261401000000000000000011273c51667c91a6bababababababababababababec8d6c9c0bcbababababababababababaaa947f6a553f2a15000000000000000000000000000000000000000000000108111c23253035393e4245474849494846433f3a353127211a0f05000000000000000000000316283952687d92aab3a896816c5443303c52677c91abbaac97826c5443301c08000000000000000000000000000000000000000000000000000000000000000000000d1d2b3a4754606772797f8385878886725c47321d0000000d1d314150616a7d8a989faab0b3a9a59c98969493939495979a9d9fabbcc9b2a18e79634e39240e0000000000000000000a1f33465874899eb3c9c8b39d887356585858585858575654514d483b3b3530261d15090000000000000000000000000f1f2d36394a4a4a4a4a4a493c3930231203000000000000021525323c3f494a4a4a4a4a4a3b382f21110000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000000000d22384d62788daabbb39e89735746331e0a00000000000000081b2e3f4b6075828e94948f8477625746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d93a8bdc7b29d87725443301c0800000000000000000f24394e647a8ea3a5a5a5a5a5a5a5a5a5a5a5a5abb8c8c4b7b3a5a5a5a5a5a5a5a5a5a5a5a597826d57422d18000000000000000000000000000000000000000000000000000808131c2024292c303233343332312e2a25201d150906000000000000000000000000000c21374c61778b9fb4b39e8874604b35374c62778b9fb4b39d8874604b35200b00000000000000000000000000000000000000000000000000000000000000000000000d1c2a36434a525b63696e707273726857432f1a000000001323334350606877828b949b9fabaaadaeabaaa9a9a9abadaeb2b4bcc9bcab99836e5b4a36210c0000000000000000000417293a5c71869cb1c6cab59f8c746e6e6e6e6e6e6d6c6b6966625957504b43363127191101000000000000000000071a2d3d4a4e5f60606060605e514d41302110000000000000102032434f545f606060606060504c402f1c0900000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4b8a78b76614b36210c000000000000000e22374b5d6d8197a0a9aaa29a8676614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5c9c9b49f8a75604b35200b00000000000000000c21374c61768c8f8f8f8f8f8f8f8f8f8f8f8f909aabc5b7a69d8f8f8f8f8f8f8f8f8f8f8f8f8f846f5a452f1a00000000000000000000000000000000000000000000000000000000070b0f14171a1d1e1f1e1d1c1815100b08010000000000000000000000000000000a1f3347586f859aafb8a68f7a654f3a34475970859ab0b8a68f7a654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000c182530353d4a4e54595b5c5e5c574a3a27140000000005152533424e59626d777f868b9195989a9c9d9d9d9c9b9899a1b3c7c6b49f8c79634e3d2d1a0700000000000000000000192f44596e8499aec3cfbcab99838383838383838282807e7b77736c6660544b44372f1c140800000000000000000c21364a5b6374757575757573675f4d3f2e1c0c00000000071b2d3e4f616a74757575757575655e4c38230e00000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000081d31445572889db2c5a38e79634e39240e0000000000000010253a4f657a8f9fb1bec0b4a495806b56402b160000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788dabbccebbaa8c77624d37220d00000000000000000a1f334758657b7a7a7a7a7a7a7a7a7a7a7a7a7c90a7b8b39d887b7a7a7a7a7a7a7a7a7a7a7a7a7a644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a53697e93abbcab96816b563d2d3b54697e94a9c1ab96806b563d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000008131c202d36393f4345474847433a2c1c0a0000000000071523313b484d59626a71777b7f8385878888888785838399aec4b9a897826d5b49361f0f0000000000000000000002172c41576c8196acc1dac9b3a19998989898989898979693918c88827b736960554b3f30261809000000000000000e24394e63798b8a8a8a8a8a887d675d4b3a2a17040000000d22364a5c6a7f898a8a8a8a8a8a7b65503b261000000000000000000000000000000000000000001a2f44596f8499aeb7a28c77624d37220d00000000000000000000000000000000000000000000000000000000011426375a70859aafbba6907b66513b261100000000000002172c41576c8196acbdced1c2b29d87725d48321d0000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb5cac8a48f7a654f3a251000000000000000000417293a4b5d6565656565656565656565656573899eb3b49f8a74656565656565656565656565645c4a36220d0000000000000000000000000000000000060c0e2020202020202019171007000000000000000000000000000000000000000000000000000000000000000d22374d62778b9fb5b29d87725c4a36384d62788da3b5b29c87725b4a36210c0000000000000000000000000000000000000000000000000000000000000000000000000000070f1a21242a2e303233322f271c0e0000000000000005131d2b343b484c555962666a6d707272737271706e8096abc7b49e8977624c3d2c1a01000000000000000000000014293f54697e94a9bed3d0bfb3aeadadadadadadadacaba9a6a69d9790877e74655d4b43362719090000000000000c21364a5b687e93a09f9fa69e8b7b655847331f14020006192c3c4f647a8c9ea89f9f9f9b85705e4c38230e00000000000000000000000000000000000000001a2f44596f8499aeb3a28c77624d37220d0000000000000000000000000000000000000000000000000000000000182d43586d8298adbea8937e69533e291400000000000004192e44596e8399aec9dadfc9b49f8a745f4a351f000000000000000000000000000000000000000000000000000000000000000000000000000000091d32455673889db3c8bca7927c67523d27120000000000000000000c1c2e3f4b5050505050505050505050505b71869bb0baa98c776250505050505050505050504f4a3e2d1b07000000000000000000000000000000010f1a2123353535353535352e2b24180a0000000000000000000000000000000000000000000000000000000000000b2034485970869bb0b6a58e79644e3935485a71869bb1b6a58e79634e39240e00000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e14191b1d1e1d1a140a000000000000000000000d18202b34373b474c5155585a5c5d5d5d5c5b6e8499aebaa9947f6a5948341f0f00000000000000000000000012273c51677c91a6bcd1ddd0c7c3c1c1c1c1c1c1c1c1c0bec4b7b2aca59c93877b6b605444372718080000000000071a2d3d4e606e8298a5b6b8a99d8776614c42322010000c2035495a6e8398abb9c6b5a4917c6651402f1c0900000000000000000000000000000000000000001a2f44596f84999e9e9e8c77624d37220d0000000000000000000000000000000000000000000000000000000000152b40556a8095aabfab96806b56412b1601000000000001172c41566c8196abbccfd1c3b29d87725d48321d000000000000000000000000000000000000000000000000000000000000000000000000000000021528385b70859bb0c5bfaa947f6a553f2a150000000000000000000011212e373a3a3a3a3a3a3a3a3a3a3a44596e8399aec7a48f7a644f3a3a3a3a3a3a3a3a3a3a39362d2010000000000000000000000000000000000f1f2c35384a4a4a4a4a4a4a434036281807000000000000000000000000000000000000000000000000000000000005192b3b546a7f94a9c2aa957f6a553c2b3c556a7f95aac2aa957f6a553c2b19060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d1820222a34373c36434b4c4e4d4c465a6f8499afb49f8a76614c3b2a18010000000000000000000000000f243a4f64798fa4c6d7d7c7bab4abababababababadaeb1b6c2c7c3b6b2a59c8d80726055443625130000000000000f1f31424c6176879da9bab7a699836e614f3e2d1b0b172a3a4d62788c9fb4c9c2b19c8673604a352011000000000000000000000000000000000000000000192e43586e82898989898977624d37220d000000000000000000000000000000000000000000000000000000000013283d53687d92a8bdae98836e59432e19000000000000000f253a4f647a8c9fb5bcc1b4a596806b56412b1600000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e8398adc3c1ac97826c57422d170000000000000000000003111c23252525252525252525252c41566b8196abbca7917c67523c27252525252525252524221b1002000000000000000000000000000000061a2c3d495e606060606060605953463624100000000000000000000000000000000000000000000000000000000000040e23384e63788da4b6b19b86715a4935394e63798ea4b6b19b86715a483520141414140f0d0700000000000000000000000c151b1e2020202020202020202020202020202020202020202020202020200a0400000000000000000000000000000513212f37444b5354606163626157596c8297acb09b85705846331d0d000000000000000000000000000c22374c61778ca8bacdcdbaa99f9696969696969697999ca4a8b2b7c3c3b6ab9f968373605443301c0f000000000001141e334657647a8b9fb4bfb3a1937e695c4a3929171f3347586c8196abbccab6a4917c675443301c07000000000000000000000000000000000000000000162b4053646e747474747462594834200b000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9b09b86705b392816030000000000000d22374b5c6c81979faba9a39b8776614c36210c00000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b8095abc0c4af9a846f5a362513000000000000000000000000080e10101010101010101014293e54697e93a9bea9947f6a543f2a15101010101010100f0d0700000000000000000000000000000000000c2135495b70757575757575756e6453402b17020000000000000000000000000000000000000000000000000000000c171f2135495b71869cb1b5a38d78624d38364a5b72879cb1b5a38d78624d38292929292924221b100200000000000000000f1d2930333535353535353535353535353535353535353535353535353535351f170b000000000000000000000000031324313f4b5560686f7577787776736e677d92a8ae99846e593a291701000000000000000000000000000a1f34475974899fb4c9c9b49f8a818181818181818284878d939da5b4bbc8bcb5a1988272604a3d2c1a060000000000031729394a5c697e94a1b3bfb49f8b7a645746331e28384c61768a9fb4c9c3b19c8673604b362513000000000000000000000000000000000000000000001023364653585e5e5e5e5e4d483b2b180500000000000000000000000000000000000000000000000000000000000e23384d63788dabbcb39e88735745321e09000000000000081b2e3e4b6074828c9494908578625846331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93a8bdc7b19c87725443301c070000000000000000000000000000000000000000000011263c51667b91a6bbac97816c57422c170200000000000000000000000000000000000000000000000000000e23384e63798a8a8a8a8a8a8a826e59432e190000000000000000000000000000000000000000000000000000000c1c2a33373d3d556b8095aac2a9947e69543a3e3d566b8095abc1a9937e69543a3e3e3e3e3e3a362e2010000000000000000c1d2d3b44484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a33291b0b0000000000000000000000112131424e5d65747d84898c8d8d8b88837c76899fb09a85705544311d080000000000000000000000000004182a3a5c72879cb1c7cab49f8a746c6c6c6c6c6c6d6f71787e87949faabac6bfb2a0947f695b493621100000000000000b1b2d3e4f616e8399a6b7baa99c8776614c42313245566a7f94a8bacab6a5927d67544330180800000000000000000000000000000000000000000000061828364043494949494937342b1d0d0000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4b8a68b76604b36210b00000000000000101d324556606d797e7f7a72625a483a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90a5c9c9b49f8975604a35200b000000000000000000000000000000000000000000000f24394e64798ea3c5af99846f5a442f1a0000000000000000000000000000000000000000000000000000000b21364b60768ba69f9f9f9f9b86705b392816030000000000000000000000000000000000000000000000000004172a3a474c52545464798ea5b7af9a8570595454545464798fa5b7af9a8570595454545454544f4a3e2e1b0700000000000015293b4c585d60606060606060606060606060606060606060606060606060605e463a2917040000000000000000000a1a2f3f4e60687b8792999ea8a3a2a69d989187869cb19e8975604b35201200000000000000000000000000001a2f445a6f8499afc4cebbaa8d7862565656565658595a6268747f8c9fa8bacdbeb49f8b79634e3e2d1b07000000000000102032434c6176879daabbb6a598826e604e3d364b6075889db3c6c4b29d8774604b3626140000000000000000000000000000000000000000000000000a18232b2e34343434342220180d00000000000000000000000000000000000000000000000000000000000000091d31455673889db2c5a38e78634e39230e0000000000000002152838454b5b63696a656054483c2b1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63788dabbccdbaa98c77624c37220d000000000000000000000000000000000000000000000c21364c61768ba7b9b19c87715c3a2a18040000000000000000000000000000000000000000000000000000091e32455673889eb3b5b5b39e88735745321e09000000000000000000000000000000000000000000000000000a1f334758616869696972889db2b49f8c7769696969696972889db2b49f8b7769696969696969645c4a36220b0000000000001b3044586a737575757575757575757575757575757575757575757575757575705846331f0a0000000000000000021527384b5d687e8c9da5afb4b6b2acaaabaea49c9ca4b5a8917c6751402f1a0a00000000000000000000000002172d42576c8297acc1d9c8a58f7a655041414141423c484d5660697c8a9fb4bfcebbaa99846f5c4a36220900000000000002141f334758657b8c9fb4c0b2a0927e685b4a4354687d92a6b8cbb7a6937e68554431180800000000000000000000000000000000000000000000000000061016191f1f1f1f1f0d0b050000000000000000000000000000000000000000000000000000000000000000021527385b70859bb0bba5907b66503b261100000000000000000a1a28323d494e5454504a43362b1e0e000000000000000000000000000000000000000000000000000000000000000000000000050b0d15150c0b21364b60768a9fb5cac7a48f79644f3a240f000000000000000000000000000000000000000000000a1f33465874899eb3b49f89745947341f0a0000000000000000000000000000000000000000000000000000031628385b71869bb0c6cbb8a68b76604b36210b000000000000000000000000000000000000000000000000000c21374c61767d7e7e7e7e859bb0bcab97817e7e7e7e7e7e7e859bb0bbaa97817e7e7e7e7e7e7e7a644f3928160300000000001e33485d73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a76614c36210c0000000000000000091d314556657b8c9faab7bcb4a49c9694969a9fabb1b5c2b09a85705e4c38271502000000000000000000000000152a3f546a7f94a9bfd2bda7927d68523d2c2c2c2d2b3438454b5e687d92a1b2c6c8b3a18e79644e3726140100000000000004172a3a4b5d6a7f94a2b3beb49f8a7963574a6073869cb1c4c4b29d8874604b3727150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d8398adbda8937e68533e29130000000000000000000a151d2c36393f3f3b353025180e0000000000000000000000000000000000000000000000000000000000000000000000000d1920222a2a221f1e32455673889db3c8bca7917c67523c2712000000000000000000000000000000000000000000000417293a5c71869bb1baa88c77614c37220c000000000000000000000000000000000000000000000000000000192e43596e8398aec3d5c5a38e78634e39230e000000000000000000000000000000000000000000000000051b30455a708492939393939ba3b5c9b19f97939393939393939ba3b5c8b19f9793939393939393836f5746321e0900000000001b30465b70859b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8e79634e39240e00000000000000000b20364b6074879daabbbcab9f9387817f80848c9aa2b3bfb4a2907b665645311d0c00000000000000000000000012273d52677c92a7bcd1bfaa957f6a55402a17171819202731404e5f6e8399aec1d0bfac97826d5544311d08000000000000000c1c2e3f4b6072849aa6b8baa99c86756051667b90a4b6cab8a6937e69564531190900000000000000000000000002090b150c0a030000000000000000000000000000070b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0801000000000000000000000000000000030a0c192b40566b8095abc0ab95806b56402b1601000000000000000000020f1a2123292a25201c13080000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34373f3f37342a28385b70869bb0c5bea9947f69543f2a140000000000000000000000000000000000000000000000192f44596e8499aec6a48e79644f39240f000000000000000000000000000000000000000000000000000001162c41566b8196abc0d0bba5907b66503b2611000000000000000000000000000000000000000000000000081d32485d72879da9a9a9a9b0b5c1cebdb1aca9a9a9a9a9a9a9b0b5c1cebdb1aca9a9a9a9a9a99f8a76614b36210c0000000000182e43586d8398adb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a6907b66513b2611000000000000000317293953687e93a5b7c6b49f8d7e736c6a6b6f788499a1b3c0b19c8674604b3a2a1704000000000000000000000010253a4f657a8fa4c7d8c2ad97826d58422d180000050a151d31414f647a8ea3b5c9c8b39e8874604b35200b0000000000000000101c3043546277889dabbcb6a497816d5f70859aafc2c5b39e8875604b3827150000000000000000000000000a161e212b211e170b000000000000000000000008131c20202020202020202020202020202020201d1409000000000000000000000000000b171e212e323e53687d93a8bdad98836e58432e19000000000000000000000000060c0e1415100b07000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3b484d55544c473a2d43586e8398adc3c1ac97816c57422c170200000000000000000000000000000000000000000001172c41566c8196abb3a6917c67513c271200000000000000000000000000000000000000000000000000000014293e53697e93a8bed3bda8937e68533e291300000000000000000000000000000000000000000000000004192f44596e8499aeb2b2b2b2b2b7c3cec8bbb4b2b2b2b2b2b2b2b2b7c3cec8bbb4b2b2b2b2b2a98f7a65503a25100000000000162b40566b8095abc0cacad4cbc8c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2bea8937e69533e2914000000000000000a1e33465770859ab0c3b9a895806a605455565a62738399a5b6b6a4947e695847331f0800000000000000000000000d22374d62778ca9bacec4af9a856f5a36261401000000021322364a5c70859bb0c5ccb8a78f7a644f3a250f0000000000000000011426364759657b8d9fb4c0b19f917d677a8ea2b4c8b8a7947f6a5645321a0a00000000000000000000000a1a283236403633291b0c0000000000000000000818253035353535353535353535353535353535353126190b00000000000000000000000b1b29333643474750667b90a5bbb09b85705b3828150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384859626a6a61594a3e41566b8096abc0c4ae99846f59442f1a000000000000000000000000000000000000000000000014293f54697e949e9e9e947e69543f291400000000000000000000000000000000000000000000000000000011263c51667b91a6bbd0c0ab95806b56402b160100000000000000000000000000000000000000000000000014293e54697e939d9d9d9d9d9da5b7c4bbaa9f9d9d9d9d9d9d9d9da5b7c4bbaa9f9d9d9d9d9d9c907b66513b2611000000000013283e53687e93a8bdd2d4c4b7b3acacacacacacacacacacacacacacacacab96806b56412b16000000000000000c21364b61768a9fb4c9b49e8976614b43363c49556075879db2c2b39e8976614c36251300000000000000000000000b20354b60758a9fb4c9c7b29d87725443301c0800000000071b2d3e566b8095abc0d5c5a9947e69543f291400000000000000000008182a3b4b5d6b8095a2b4bdb39e89778298adc0c6b39e8976614b382816000000000000000000000009192838454b554b46392a1c0c0000000000000000132536434a4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4437291b0b00000000000000000003172939464c585d5d5d63788da3c9b39d88735645321d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455662787f7f77645c4c4053687e93a8bdc6b19c87715c3a2a18040000000000000000000000000000000000000000000011263b51667c8989898988806b56402b160100000000000000000000000000000000000000000000000000000f24394e64798ea3c5d6c3ad98836e58432e19000000000000000000000000000000000000000000000000000e23384e63798788888888888790a6b7b49f8c878888888888888790a6b7b49f8c8788888888878275604b36210b000000000011263b50667b90a5bbd0cbb7a69d979797979797979797979797979797979797836e58432e19000000000000000f243a4f64798faabbc4ae99846f574632262c374557677c91a6b7b8a7957f6a5443301c0700000000000000000000081c30435472879db2c7c9b49f8a75604b35200b000000000011263c51667b91a6bbd0c2ac97826d57422d18000000000000000000000d1d2f3f4b6073849aa7b8b9a899848c9fb4cab9a895806a5746331a0a00000000000000000000021527374556606a6157473a2a1b0b000000000000071c304354606060606060606060606060606060606055463929160300000000000000000a1e334657616e72727272758babbcb59f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c4b6074869494887a665e4f50667b90a5bbc9b49e89745847331f0a000000000000000000000000000000000000000000000f24384c5e6673737373736b62503d28140000000000000000000000000000000000000000000000000000000c21364c61768ba7b9ccc5b09b85705b382815020000000000000000000000000000000000000000000000000c2135495b6372727272727272889db3b49f8a7672727272727272889db3b49f8a7672727272726d605645321e0900000000000e23384e63788da3c4d5c8b39d888282828282828282828282828282828282827f69543f2a140000000000000011263b50667b90a5c8c0ab96816b563929161928394b6074889db3c5b29d8773604a35200b00000000000000000000011426365a6f859aafc4cebbaa8d77624d38220d00000000000f24394f64798ea4b9cec4af9a856f5a45301a0000000000000000000000111d3144556278899eabbcb3a1999faabbc7b49e8976614c3929170000000000000000000000081d314455607480756159473928160300000000000b20354a607375757575757575757575757575757574705746321e0a00000000000000000c21364c61758287878787878d9fb5bcab8d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a6a8095a4a69d8a7c69614e63788ea3c4cdb9a88c77614c37220c00000000000000000000000000000000000000000000091d2f404c515e5e5e5e5e56504433210e0000000000000000000000000000000000000000000000000000000a1f33465874899eb3c9c8b39d88735645321d09000000000000000000000000000000000000000000000000061a2c3d494e5d5d5d5d5d546c8297acbbaa927d675d5d5d5d546c8297acbbaa927c675d5d5d5d584b453828160300000000000b21364b60768ba6b8cbc6b19c86716d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d69614f3c27120000000000000012273c52677c91a7bcc0aa95806b55402b160a1d3144556c8197acc1b7a58f7a65503a25100000000000000000000000182d42586d8297adc2d8c8a48f7a654f3a251000000000000d22384d62778da2b7ccc6b09b86715b46311c0000000000000000000000011426374859667c8d9fb5bfb3aeb4bbc8baa995806b5847331b0b00000000000000000000000b20364b607484958577615746321e14000000000013283d52687d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a75614b36210c000000000000000013283e53687d939c9c9c9c9c9fabbcc9a5907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788a9fb4b7a89f8d7f6c6060768ba6b8cbc6a48e79644f39240f000000000000000000000000000000000000000000000012222f383b4949494949403d332616040000000000000000000000000000000000000000000000000000000417293a5c71869cb1c6cab59f8a75604b36200b000000000000000000000000000000000000000000000000000e1f2c3538484848484850667b90a7b9ae99836e5745484850667b90a7b9ae98836e56454847423632281a0a000000000000091e32455673889eb3c8c9b49e89745857575757575757575757575757575757544f4332200c0000000000000010263b50657b90a5c7c1ac96816c573626140114263752687d92a7bdc3aa947f6a553f2a150000000000000000000000152a40556a7f95aabfd2bca7927d67523d281200000000000d22374d62778ca2b7ccc7b19c87725c47321d00000000000000000000000009192b3b4c5e6b8196a3b5c7c4cacec9b49f8a77614c3a291700000000000000000000000010253a50657a8fa29b8575614b42321e0e0000000010253b50657a90a0a0a0a0a0a0a0a0a0a0a0a0a0a08e79634e39240e000000000000000013283d52687d92a7b2b2b2b2b3b3b3b3a8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e939faab9baab9f9481736173889eb3c8bca6917c67513c2712000000000000000000000000000000000000000000000004121d242634343434342b282116080000000000000000000000000000000000000000000000000000000000192f44596e8499aec3cfbcab8d78634d38230e00000000000000000000000000000000000000000000000000000e1a212333333333364b6075899eb3b49f8a75604b36364b6075899eb3b49e8975604b36322d211e160a00000000000000031628385b70869bb0c5cdb9a88c76614c4242424242424242424242424242423f3c32251503000000000000000e24394e63798ea9bac4ae99846f5443301c0810253b50657a90a5bac2ad97826d58422d18010000000000000000000013283d52687d92a7bdd2bfaa947f6a553f2a1500000000000f24394e64798ea3b9cec6b09b86715b46311c000000000000000000000000000d1d2f404b6074859bb0c5d9dfd6c1ab96816c5947341c0c0000000000000000000000000c21364b6175879ca399836e604f3c2b19060000000d23384d62788dabbcb5b5b5b5b5b5b5b5b5b5b5a6907b66513b2611000000000000000010253b50657a909d9d9d9d9d9d9d9d9d9d95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012263b4f60697e8c9ea7b6bcb49f97837570859bb0c5bea9947e69543f291400000000000000000000000000000000000000000000000000090f111e1e1e1e1e16140e04000000000000000000000000000000000000000000000000000000000002172c41576c8196acc1dac9a5907b65503b2610000000000000000000000000000000000000000000000000000000060c0e1d1d1d1d3145566d8398adbaa8917c6651373145566d8398adb9a8917b66513726140b0903000000000000000000192e43596e8398aec3d6c6a48e79644f392d2d2d2d2d2d2d2d2d2d2d2d2d2d2a2720150700000000000000000b21364b6075899fb4c8b39e8874604b3520130f243a4f64798fa4b9c3ae98836e59432e1d140900000000000000000010253a50657a8fa5c9d9c2ac97826d57422d18000002090d1b2d3d53687d92a8bdd2c4af99846f5a442f1a0000000000000000000000000000121d314455687d93a8bdd2dfd3bea9937e695c4a3a2917040000000000000000000000091e32465763798a9ea1937e695a4835200f0000000b20354b60758a9fb4b7b7b7b7b7b7b7b7b7b7b7a8937e69533e291400000000000000000d22384d6278888888888888888888888888816c57412c170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f60697c899ca4b4bdb1a19986778298adc2c1ac96816c57412c170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293f54697e94a9bed2bda8927d68533d2813000000000000000000000000000000000000000000000000000000000000080e1015273851677c91a9baad98826d5544313851677c91a9baad97826d5544311d15130d0b0500000000000001162b41566b8096abc0d1bba6917c66513c271818181818181818181818181814120c03000000000000000000091e3245566f8499afc4b8a6907b65504231211e263750667b90a5bbc2ad97826d5842353126190e00000000000000000d23384d62788dabbccfc4af9a846f5a3625131c1c161e212b394a5b6e8399aec3d7c2ad97826d58422d1800000000000000000000000000011527374b6073869cb1c7cfcac5c9b49f8b7a645846331f150300000000000000000000031628394a5b677c919f9f8b78624d3d2d1a070000081d31445573889da2a2a2a2a2a2a2a2a2a2a2a2a296816b56412c1600000000000000000b2035485a627373737373737373737373736c63513e291500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002142432424f5e6579869aa2b1bdb3a49c888398aec3c3ae99846e59442f1900000000000000000000000000000000000a131a1c20202020201d0b08010000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a6bcd1c0aa95806b55402b160000000000000000000000000000000000000000000000000000000003111c23252a2a364b61768a9fb4b39e8975604b36364b61768a9fb4b39e8874604b352a2a282220180d00000000000014293e53697e93a8bed3bea9947e69543f2914020202020202020202020202000000000000000000000000000216283853687e93a6b7c5af9a846f604e4136323544556a7f94a9bfc0ab95806b564f4b44372c1e0e000000000000000b20354b60758a9fb4cac7b29c87725443303131312832363b485763798c9fb4cad2c1a8927d68533d281300000000000000000000000000081d314455687d92a4b6c9bcb5b0b4baa99d8776614c4332211100000000000000000000000b1b2d3d4d5f6d8297a699836e5c4a36210a0000011527375b70848c8c8c8c8c8c8c8c8c8c8c8c8c8c8c836e59432e19000000000000000005192b3c484d5e5e5e5e5e5e5e5e5e5e5e5e57514534220e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006142432404c5b637684979fb4bbb5a69d98a0b2c6c6b19c86715c3a2917040000000000000000000000000000000d1b272e31353535353532201c14080000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c6d7c2ad98826d58432d180000000000000000000000000000000000000000000000000000000011212e373a3f3f3f46576f8499aeb9a7907b6550363f46576f8499aeb8a78f7a65503f3f3f3d37342b1d11040000000011263b51667b90a6bbd0c1ab96816c56412c1701000000000000000000000000000000000000000000000000000b21364b6075889db3c0b3a2927e685f504b454b4f6073869cb1c7bca7917c6d69646055493c2c1906000000000000081d31445573889db2c8c9b49f8a75604a4646464638454b4f596275859babbccfc9b5a38d78624d38220d000000000000000000000000021527384b6074879db2c2bcab9f9aa2b4b6a599836e614f3f2e1d0d00000000000000000000000f1f30404b6176889da18e79644e3828160200000c21374c617677777777777777777777777777777777614c37220c0000000000000000000e1e2b3538484848484848484848484848413e3426160500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000614212f3d4958617381939faab9b7b3aeb2bfcfc9b39e89745846331f0a0000000000000000000000000000001b2b3943474a4a4a4a4a47353026180800000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8bacdc5b09a85705b372715010000000000000000000000000000000000000000000000000000081c2e3f4b505555555555687d92aabbac97816c5455555555687d92aabbab96816c56555554534d483b2f2211000000000e24394e63798ea3c5d6c3ae99846e59442f190000000000000000000000000000000000000000000000000000091e324556697e93a2b4c0b49f8c7d6e65605660656e8096a4b6cac7b29d87827e7973635a4935200c000000000000011527375b70859ab0c5cdbaa98c77625b5b5b5b5b5c5660656c78859ba3b5c9d1c0b19b86715a4835200b000000000000000000000000091d314556687d93a5b6cab59f8d859aa8b9b3a1947f695d4b3b2a190900000000000000000001152533404d57697f94a998826d5645321e0900000a1f33475861626262626262626262626262626262615847331f0a000000000000000000000e1920223333333333333333333333332c292216080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111f2c3a4755606c7e8c9ea7b6c2c3c6cfe0ccb9a78b76614c36210c00000000000000000000000000000c1c3949565c60606060605c4b4336261401000000000000000000000000000000000000000000000000000000000000000000000b1f34475974899fb4c9c7b29d88725544311d0800000000000000000000000000000000000000000000000000000e23374b5d656a6a6a6a6a6a778a9fb4b39d88726a6a6a6a6a6a778a9fb4b29d87726a6a6a6a6862594c402f1c090000000c21364b61768ba7b8ccc6b19b86715c3929170300000000000000000000000000000000000000000000000000031628384b6073849aa5b5bbaa9f92837a7674757a83969eb0c2d3cab7a59d98938e8778634d38230e00000000000000182e43586d8398adc2d7c7a48f7a7171717171717173757a818a9ba3b4c2d2c4b4a2927d67523c2b19050000000000000000000000021628384b6074879db2c3c0ae998377899eb3beb49f8c7b6559473726140100000000000000000f1f3343505f6770788da29e8975604b36210b000004172a3a474c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c473a2a18040000000000000000000000050b0d1e1e1e1e1e1e1e1e1e1e1e1e17150e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1c2937444b60697b899ca4b3c0cee2e8d6c5a38e79644e39240f0000000000000000000000000004172a3a566771757575757572605443301c080000000000000000000000000000000000000000000000000000000000000000000004182a3b5c72879cb1c7cab49f8a75604b35200b000000000000000000000000000000000000000000000000000010253a50657b7f7f7f7f7f7f7f889eb3b7a696817f7f7f7f7f7f7f889eb3b7a596807f7f7f7f7d77665e4c3823100000000a1e33465773899eb3c8c9b39e89745746331e0a00000000000000000000000000000000000000000000000000000a1d3144556176879ba3b2bbb4a0988f8b898a8f99a1b0bcc6bebec3b7b2ada8a597826d58422d1800000000000000162b40556b8095aac0d5c7b29c8786868686868686888a8f969fa8b4c1d0c4b7a69a8472604a35200e000000000000000000000000091e324556697e93a5b7c8b4a28f7a677d92a0b1bbaa9d8877625544311d1200000000000000071a2d3d50616a7c85899eb3a8907b66513b26110000000c1c2a333737373737373737373737373737373737332a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c192731424e5d6579869aa2b1bdced8d0bba6917b66513c2611000000000000000000000000000a1f33475871868a8a8a8a8a8673604b36261401000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afc4cebbaa8d78624d38230d000000000000000000000000000000000000000000000000000011263c51667b919494949494949ea6b8c4b09e96949494949494949ea6b8c3b09e9694949494928b7c66503e2d1b070000031729395c71869bb1c6ccb9a78b76614c36210c000000000000000000000000000000000000000000000000000001142637475862788598a0b0b4b2aea5a89e9fabaeb3bfb5b0a9a9a9a9a9a9a9a99c86715c3726140100000000000013283e53687d93a8bdd2cab6a59c9b9b9b9b9b9b9c9d9faaacb4bac6c9bfb3a69d8877625443301c070000000000000000000000031628394b6075889db2c3c1af9a846f5f6d8297a4b6b7a69a8473604b402f1e0e0000000000000c21364a5b6a7f919a9ea7b9aa95806a55402b15000000000c171f21222222222222222222222222222222221f180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b101515110b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d313f4c5b637684969fb4bbc8d6bea9937e69543e2914000000000000000000000000000c21374c61778b9f9f9f9fa4927d675443301c0800000000000000000000000000000000000000000000000000000000000000000002172d42576c8297acc1d9c8a58f7a65503a251000000000000000000000000000000000000000000000000000000b21364b60758a9faaaaaaaaaab3b8c4cdbdb0abaaaaaaaaaaaaaab3b8c4cdbcb0abaaaaaaa9a99c86715c4a36220d000000192e44596e8399aec3d6c5a38e79634e39240e00000000000000000000000000000000000000000000000000000009192a3a485a6275828f9ba3acb1b5b9b4b4bcb7b3ada39b94939393939393939389745544311d0800000000000010263b50657b90a5c9dad3c3b6b2b0b0b0b0b0b0b1b2b4bbc8c9c6c1b5b1a19a8879635948362513000000000000000000000000091e324657697e94a6b7c9b5a3907b65506175869ca9bab4a295806b5e4c3c2b1a0a00000000000e23394e63798c9fb0b3b9c5ad98836e58432e190000000000040a0c0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c20262a2a27201d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114212f3d4958617381939faab8c5bfab96816b56412c160100000000000000000000000012273c51677c91abbcb5c2b19c8673604b36251300000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94aabfd2bda7927d68523d28130000000000000000000000000000000000000000000000000000091e3245566e8399aab0b1b1b1b1b2b6c3cdc5b9b3b1b1b1b1b1b1b1b2b7c3cdc5b9b3b1b1b1b1a48e79644f39240f000001172c41566c8196abc1d0bba6917b66513c2611000000000000000000000000000000000000000000000000000000000c1c2b3c4857616e7a858f979c9faba4a5a3a69d9890867e7e7e7e7e7e7e7e7e7e73604b35200b0000000000000e23384e63788dabbcbdbdbdbdbdbdbdbdbdbdbdbdbdbcc8bbb4b1aba39b918477635b493b2b18080000000000000000000000031729394b6175889eb3c4c2b09b85715d4c5763798b9fb4beb59f8d7c665a483828150200000000162b40566b8095abbcc9ccc4af9a846f5a452f1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e182530353b3f403c3631271a0f010000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111f2c3a4755606c7e8c9ea7a9a9a999836e59442e1904000000000000000000000005182a3b576c8196acc9dacab6a4917c675443301c0800000000000000000000000000000000000000000000000000000000000000000012273d52677c92a7bcd1bfaa957f6a55402a150000000000000000000000000000000000000000000000000000031628384f647a8c989b9b9b9b9b9da5b6c9b9a79e9b9b9b9b9b9b9b9da5b7cab9a79e9b9b9b9b9b95806b56402b1600000014293e54697e93a9bed3bea8937e69533e291400000000000000000000000000000000000000000000000000000000000e1e2b39464b5d65707a81878b8e8f8f8e8c88827b7369696969696969696969605544311d080000000000000b21364b60768a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a5aa9f9b968f867c6f6259493d2c1d0d0000000000000000000000000a1e3346576a7f94a6b8cab6a4917c66513f4a5b687e93a0b2bcab9e8978625645321d1301000000192e43596e8398aec9dad9c3ae99846e59442f19000000000000000000000000000000000003090b1e202020201f1b100e0800000000000000000000000000000000000000000000000000000000000000000000000e1e2b36434a505555514b45382d1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c2937444b60687b89949494949486715b46311c0600000000000000000000000b1f34475971869cb1c6cbc8c2b19c8673604a36251300000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8d8c2ad97826d58422d180000000000000000000000000000000000000000000000000000000a22374b5c657b828586868686879dabbcb39e8986868686868686879db2c1b39e89868686868686826e59432e1900000011273c51667c91a6bbd1c0ab96816b56412c160100000000000000000000000000000000000000000000000000000000000e1b28323f4b4f5d656c7276787a7a7977736d6660545454545454545454544b4437261401000000000000091e324556738893939393939393939393939393939292908e8a86807a71665e4c483b2c1f0f0000000000000000000000000417293a4b6176899eb3c4c3b19c8673604b353d4e606e8398a5b6b8a79b8574604b41301f0f000000182e43586d8298adc1ceccbdab95806b56402b16000000000000000000000000000000000a161e213335353535343025231c110300000000000000000000000000000000000000000000000000000000000000000a1b2b3c485460656a6a6660564a3d2d1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c192731424e5d65797f7f7f7f7f7e69533e29140000000000000000000000000d22374c62778ca4b6c4b7b3b7b5a4917c675443301c0800000000000000000000000000000000000000000000000000000000000000000d22374d62778caabbcec4af9a856f5a362614010000000000000000000000000000000000000000000000000000081b2e3e4b5d656d7071717171778d9fb5b29c8772717171717171788da3b5b29c877271717171716e6453402b170000000f24394e64798ea3c6d6c3ae98836e59432e19000000000000000000000000000000000000000000000000000000000000000b161e2e373f4b4f57576063646564625958504a43363e3e3e3e3e3e3e3e3531261909000000000000000216283851677d7e7e7e7e7e7e7e7e7e7e7e7e7e7d7d7c7b7975716b645c514d40342a1d0f010000000000000000000000000a1f3346586a7f95a7b8cbb7a5927d6854433031424c6176879daabbb5a397816c5f4d3d2c1b0b000013283d53687d92a3b4bbb9b39f8e7a644e39240f0000000000000000000000000000000a1b283236484a4a4a4a49453b382f21130600000000000000000000000000000000000000000000000000000000000003162839485a62727b7f7f7c74645c4a3b2a180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d313f4b5b636a6a6a6a6a69604e3b261100000000000000000000000012273c52677c91a7c2b7a69da6b7b19c8673604a36251300000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9c7b29d87725443301c0800000000000000000000000000000000000000000000000000000010202e3f4b4f585b5c5c5c5970859bb0b6a58e79635c5c5c5c5a71869bb1b6a58e79635c5c5c5c5953463624100000000c21374c61768ca8b9ccc6b09b86715b392816030000000000000000000000000000000000000000000000000000000000000003101b222e373a39454b4e4f504e4c473b3b3530252929292929292929201d14090000000000000000000a24394d5f676868686868686868686868686868686765636056564f4a3e39301f180d0000000000000000000000000004172a3a4c6176899eb3c5c5b29d8774604b36261f334658647a8b9fb4bfb19f927d675b4939291603000b20364b607485989faaa79e95816c5c4a36210d000000000000000000000000000003162839454b5d606060605e5a504b3f312413010000000000000000000000000000000000000000000000000000000000091e32455762788590949591877a645947341f0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114212f3c494d5454545454534e42311f0b000000000000000000000005182b3b576c8197acc1b39d889db3b5a4917c675443301c0800000000000000000000000000000000000000000000000000000000000000081c30435472879db2c7cab49f8a75604b35200b0000000000000000000000000000000000000000000000000000000210212e373a434646463b54697f94a9c2aa95806a553c463c556a7f95aac3aa957f6a553c46464340362818070000000a1f33475874899eb4c9c8b39e88735746321e0900000000000000000000000000000000000000000000000000000000000000000008111c2325283236393a3a3937342a26201c1314141414141414140b0801000000000000000000000a1d30414d5153535353535353535353535353535352504e4b45383a362d241d120500000000000000000000000000000a1f3347586b8095a7aeaeaea6937e695544311817293a4a5c697f94a1aeaeae9e8a79635746321e0a00091d3145566176828b8e8e897f72604b3e2d1a070000000000000000000000000000091e3245576073757575757470655d4e42311f0f00000000000000000000000000000000000000000000000000000000000b21364b6075869ba3aaaaa59c8877624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111e2c35383f3f3f3f3f3e3b3124140200000000000000000000000b2034485972879cb1bfaa958095a5b6b19c8673604a36251300000000000000000000000000000000000000000000000000000000000000011426365a6f859aafc4cebbaa8d77624d38220d0000000000000000000000000000000000000000000000000000000002101b22252e303131384d63788da4b5b19c86715a4935394e63798ea5b6b19c86715a4935312e2b24180a0000000004172a3a5c71869cb1c6ccb8a78b76614b36210c0000000000000000000000000000000000000000000000000000000000000000000000080e10161e2123252524221f18110b070000000000000000000000000000000000000000000001122330393c3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3d3b3936312724221b100a000000000000000000000000000000000c21374c6177899999999999988875604b3727150b1b2e3e4a6072839699999999998675614b36210c00021527384758616d767979756a60544330200f0000000000000000000000000000000b21364b6076878a8a8a8a89857b68604e3d2d1a070000000000000000000000000000000000000000000000000000000014293e54697e93a4b5c1c3b6a696816b56412c16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1921232a2a2a2a2a29261f14060000000000000000000000000d22374d62778ca4b6c8a48f7a879cb2b5a4917c665443301c0700000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2d8c8a48f7a654f3a2510000000000000000000000000000000000000000000000000000000000000080e10181b1c2135495b71869cb1b5a48d78634d38364a5b72879cb2b5a48d78634d3823191710070000000000001a2f44596f8499aec4d5c5a38e78634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000003090b0e0f100f0d0b05000000000000000000000000000000000000000000000000000005121d2427292929292929292929292929292828272623201d150f0d0700000000000000000000000000000000000011273c51667c838484848484837b65574532190900101c3043546176818484848484837d68523d281300000a1a293a474c5761646360564b4336261401000000000000000000000000000000091e324557677d92a29fa79e9a8c7e685b4a362112000000000000000000000000000000000000000000000000000000051a2f445a6f8499afc2d2d3c4b19c87725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e151515151514110b020000000000000000000000000012283d52677d92a7c2bbaa8d788095abbcb19b8673604a35201200000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfd2bca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000030606192c3c556b8095aac2a9947f69543b2d3d566b8096abc2a9947f69543b2b18050000000000000002172c41576c8196acc1d0bba5907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a101213131313131313131313131313131312100e0b09020000000000000000000000000000000000000000000f24394d5e666f6f6f6f6f6f6e655d4b3928160000001325364658616c6f6f6f6f6f6f68604e3a25110000000c1c293339464c4f4e4b45383026180800000000000000000000000000000000031628394d5f70859aabb9b3ab9f8b79634e403019090000000000000000000000000000000000000000000000000000061b30465b70859bb0c5daddc8b39d88735e48331e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c576d8297acc2b49f8a74788c9fb5b5a3917c6651402f1d0900000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdd2bfaa947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea5b7b09b85705948343a4f647a8fa6b7b09b8570594834200b0000000000000000142a3f54697f94a9bed3bda8937e68533e2913000000000000000000000000000000000000000c151b1e2020202020201f1d170e020000000000000000000000000a0f111c2020202020202012100a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d30404d5159595959595959504b3f2f1b0a0000000818293a464c57595959595959524e41311e0b000000000c171f29333639393632281c14080000000000000000000000000000000000000a1b30414e647a8c9fb4c5baa99a846f5e4c372715020000000000000000000000000000000000000000000000000003182e43586d8398adbecccdc0b09b85705b46301b0600000000000000000000000000000000070d0f20202020202020110f090000000000000000030c1214202020202020201f0902000000000000000000000000000000000000000000000b2035485a72879db2c7b29c877270859aafc1b09b85715e4c38241200000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d9c2ac97826d57422d180000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c72879db2b59f8c77624d37354a6074889db3b59f8c77624d37220d000000000000000012273c51677c91a6bcd1c0ab95806b56402b160100000000000000000000000000000000000f1d29303335353535353534322b20120200000000000000000004121d2427323535353535353527251e130500000000000000000000000000040b0c12141514110c0a040000000000000000070a0b0b0b0100000000000000000000000000000000000000000000122230393c444444444444433b382f211100000000000c1c293336414444444444443d3a312313010000000000040b171e212424201d150a0100000000000000000000000000000000000000001322364a5c6c8197a7b9c7b4a2917c665544311d0c000000000000000000000000000000000000000000000000000011263b51667b90a0b3b8bab4a2937e68533e281300000000000000000000000000000002101b22243535353535353526241c12040000000000071520272a35353535353535341e160a0000000000000000000000000000000000000000000d22384d62788da5b6c4af99846f677d92a5b7b5a3917c6651402f1d0900000000000000000000000000000000000000000000000000000000000d23384d62788dabbccfc4af9a846f5a362513000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e566c8196abbcab937e69533a3043546c8197acbcab937e69533a2a1704000000000000000f243a4f64798fa4c7d7c3ad98836e58432e1900000000000000000000000000000000000c1d2d3b44484a4a4a4a4a4a49463d302000000000000000000001122230393c474a4a4a4a4a4a4a3d393023130100000000000000000000070c181f2227292b2926211f170b08000000070d0f1c1f20202016140e040000000000000000000000000000000000000004121d24272f2f2f2f2f2f2e25231c11030000000000000c171f212c2f2f2f2f2f2f28251e13050000000000000000030a0c0f0e0b090200000000000000000000000000000000000000000000071b2d3e4c6177899eb3c2c0b29c8774604b3a2a1704000000000000000000000000000000000000000000000000000f24384c5e6d82949ea7a89f968473604b35200b00000000000000000000000000000010202d36394a4a4a4a4a4a4a3b382f221200000000031525323b3f4a4a4a4a4a4a4a4932281a0a000000000000000000000000000000000000000013283d52687d92a7c3bfaa95806a6074879db2c1b09b85715e4c38241100000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cac7b29c87725443301c0700000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa6b8af9a846f5847333650657b90a7b9af9a846f5847331f0a000000000000000c22374c61778ca9bacdc5b09b85705b382816020000000000000000000000000000000015293b4c585d6060606060605f5a4e3d1c0c00000000000000000f1f30404d515c5f606060606060524d41301e0a0000000000000000010f1a212a34373c3f403e3c363329231c1105101b222431353535352b2921160800000000000000000000000000000000000000000a0f111a1a1a1a1a1a19100e08000000000000000000040a0c171a1a1a1a1a1a13110b0100000000000000000000000000000000000000000000000000000000000000000000000000000000101f344759697e93a4b6cab6a5947e695847331f0f00000000000000000000000000000000000000000000000000091d2f404b60727f898e8e8a8174605544311d080000000000000000000000000000071b2d3e4a4e60606060606060514c402f1c090000000c2032434f54606060606060605d453828160200000000000000000000000000000000000006192c3c586d8298adc2c3a5907b6655697e93a7b8b5a3907b6651402f1c0900000000000000000000000000000000000000000000000000000000081d31445573889db2c8c9b49f8a75604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074889eb3b49f8b77614c37364b6075899eb3b49f8b76614c37210c000000000000000b1f34475974899fb4c9c8b39d88735645321e09000000000000000000000000000000001b3044586a73757575757575746c5a3a2a1704000000000000061a2c3d4d5e667175757575757575675f4d3925100000000000000006141f2d363b474c52545554514c463a372e2018202d3639464a4a4a4a413d34261604000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4b6074869cb1bfc3b39e8976614c3d2c1a0600000000000000000000000000000000000000000000000000121c304354606a747979756b6056453727150100000000000000000000000000000d22364a5c7075757575757575665e4c38240f00000012273b4f6169757575757575756f5645321e090000000000000000000000000000000000000c2035495a72889db2c7b6a58c77614c6075889eb3c1b09b85705e4c38231100000000000000000000000000000000000000000000000000000000021527375b70859ab0c5cdbaa98c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000081c3043546d8297abb9aa927d6852393144556d8298adbbaa927d67523d28120000000000000004182a3b5c72879cb1c7cab59f8a76604b36210b000000000000000000000000000000001e33485d73888a8a8a8a8a8a8a745847331f0a0000000000000c2135495b667c868a8a8a8a8a8a8a7d67523d2712000000000000061425323d4a4e596167696a69666158504b3f342b2d3e4a4e5c5f60606056514434210e0000000000000000000000070c0e1d1d1d1d1d1c14120c030000000000000000000000000000000000000000000000000000000000000000000000000000060c0e121516161513100c0a030000000000000000000000000000000000000000000c1d314455657b90a1b3c7b9a796816c5b493521110000000000000000000000000000000000000000000000000001142636434b5560636460564b45382819090000000000000000000000000000000f24394e647a8a8a8a8a8a8a8a7c66513b2611000000142a3f54697f8a8a8a8a8a8a8d75604b36210b0000000000000000000000000000000000000e23384d63788da5b7c7b29c87725847576a8095a8b9b5a3907b6650402f1c0900000000000000000000000000000000000000000000000000000000182e43586d8398adc2d7c7a48f7a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000000011426364e63798c9ea8a799846f5746333751677c91a9a7a996806b56412b1601000000000000001a2f445a6f8499afc4cfbcab8d78634e38230e000000000000000000000000000000001b30465b70859b9f9f9f9fa88c76614c37210c0000000000061a2c3d4e63798c9c9faa9f9f9f9c8673604b35200b000000000001142432434f5b636f777c7e807e7b766f655d4d483b364a5c6471747575756b62513d2914000000000000000000010f1a2124323232323231292720140700000000000000000000000000000000000000000000000000000000000000000000050b0e192023272a2b2c2b2925211e160b0700000000000000000000000000000000000000011527374c5e6e8399a9bac5b49f8b79634e402f1909000000000000000000000000000000000000000000000000000818263037444b4e4e4b453832281a0a000000000000000000000000000000000c21374c61768ca89f9f9f9f937d68533e281300000012273c52677c919f9f9f9fab8d78634d38230e00000000000000000000000000000000000013283d53687d92a8c3c2ad98826d583a4c61778a9eb4c1b09b85705e4c382311000000000000000000000000000000000003090b0f0f0f0f0f0f0f0f162b40566b8095abc0d1bca7917c67523c27120f0f0f0f0f0f0f0f0f0c0a03000000000000000000000000000000000000000000000000000821364a5b677d899092928a76614b36364b61758b9292918b7b654f3a25100000000000000002172d42576c8297acc1dac9a5907b65503b261000000000000000000000000000000000182e43586d8398adb5b5c6a48e79644f39240f00000000000c2135495b6e8398aab4bbb5b5a4917c675443301c0800000000000f1f32424f616979848b91949593918b847b6e62594b3f4e647a868a8a8a8a806b56412b160100000000000000000f1f2d36394747474747463f3b3225140600000000000000000000000000000000000000000000000000000000000000020d181f222c35383c3f4041403e3b363229201c130800000000000000000000000000000000000009192f404d63788b9fb4c4bbaa99846f5e4c372614010000000000000000000000000000000000000000000000000008141c27313539393632281e160a00000000000000000000000000000000000a1f33475874899eb4b5b5aa95806a55402b150000000f253a4f647a8fa4b5b5b5a5907a65503b25100000000000000000000000000000000000061a2c3d586d8398adc2c7a8937e69533e47586c8196aabbb4a3907b65503f2f1c080000000000000000000000000000000a161e21242424242424242424283e53687d93a8bdd2bfa9947f6a543f2a24242424242424242424211e170b000000000000000000000000000000000000000000000000071a2d3d4d5f67767b7d7d7d77614c37324657667c7d7d7c78655d4b37230e0000000000000000152a3f546a7f94a9bfd2bda8937d68533e281300000000000000000000000000000000162b40566b8095abc0cabba6917c66513c27110000000006192b3c4e63798c9fb4c8cec1b19c8673604a3626140100000000071a2d3d4f60697f8c9a9faaa9aaa9aa9f998f8377655d4d5a6f849a9faa9f98836e59432e190000000000000000071a2d3d4a4e5d5d5d5d5d5c544f433224140000000000000000000000000000000000000000000000000000000000000a151d2a34373c494d525456565553504b46393530251812020000000000000000000000000000000000112035495a6b8095a6b7c8b3a1907b655544311d0b000000000000000000000000000000000000000000000000000001101b2224282828282321190e000000000000000000000000000000000004172a3a5c71879cb1c6c2ad97826d58422d180300000d22374d62778ca9bacebda8927d68533d281300000000000000000000000000000000000c2135495b73889db3c8baa98f79644f3a3a4d62788b9fb4c1b09b85705d4c38231100000000000000000000000000000a1b283236393939393939393939393b50667b90a5bbd0c1ac97816c574239393939393939393939393633291b0b0000000000000000000000000000000000000000000000000f1f30414d5861666767676159473428394c5e66676767625a4b3f2e1c08000000000000000012273d52677c92a7bcd1c0aa95806b55402b160000000000000000000000000000000013283e53687d93a8bdd2bea9947e69543f2914000000000b2035495a6d8298abbccfc9b5a3917c66544330180800000000000c21364a5b697e939faab4bbc8bfc8bbb4aea199897b675f5d73889db2bbb09b86705b39281603000000000000000c21364a5b6372727272727169614f42321c0c000000000000000000000000000000000000000000000000000000000e1a28323b474c555a63676a6b6b6a68656157514a4336301d150a0000000000000000000000000000000006192c3c4b6175889db3c1bfb19c8673604b3a2917040000000000000000000000000000000000000000000000000010202e373a3d3d3d3d38352c1e0e00000000000000000000000000000000001a2f445a6f8499afc4c4af9a846f5a452f1a0000000b20354a60758a9fb4c9bfaa95806a55402b1500000000000000000000000000000000000e23384e63788da6b7c9b49f8a75604b3635485a6d8298abbcb4a2907b65503f2f1c0800000000000000000000000003162839454b4e4e4e4e4e4e4e4e4e4e4e4e63788da3c5d6c4af99846f5a4e4e4e4e4e4e4e4e4e4e4e4e4c46392917030000000000000000000000000000000000000000000000011323303a474c515252524c473a2a1b2f404c505252524d493c2e21110000000000000000000f253a4f647a8fa4c7d8c2ad98836d58432e180000000000000000000000000000000011263b50667b90a5bbd0c1ab96816c56412c1701000005192b3c4d62788b9fb4c9d1c1b09b85715e4d3625130000000000061a2c3d4e63798c9fb4bbc8cec2b6b1acabaeb4a79e8c7d675f72879cb2c7b39e88735745321e09000000000000000e24394e63798787878787867f69604f3a29170400000000000000000000000000000000000000000000000000000e1e2b38454b59626a72787c7f8081807e7a766f6660544c4032281a0a000000000000000000000000000000000e1e324657677d92a3b4c9b5a4937e685846331f0e000000000000000000000000000000000000000000000000071b2e3e4b4f525252524d493c2c190600000000000000000000000000000002172d42576c8297acc1c7b19c87725c3a2917040000071c30435472879db2c7c2ad97826d58422d18000000000000000000000000000000000013253653687e93a8c4c5b09b85705645312b3c4e63798c9fb5c0b09a85705d4b372311000000000000000000000000091e3245576064646464646464646464646464768ba7b9ccc6b19c877164646464646464646464646464615746331e0a00000000000000000000000000000000000000000000000005131c2933373b3d3d3d37342a1c11222f383b3d3d3c38352b1e11030000000000000000000d22374d62778ca9bacec5b09a85705b372715020000000000000000000000000000000e23394e63788ea3c5d5c3ae99846e59442f190000000b2034485a6c8297aabbcec9b5a3907c66514030180800000000000c2135495b70849aaabbcec9bcb4a49c9795989fa8aa9f8c7d6770859bb0c5b8a68b76604b36210b000000000000000c21364a5b6e83999c9c9c9b937e695846331f0c000000000000000000000000000000000000000000000000000d1d2b3c4956606a7780878d919495969593908a847c73665e4b4538281b0a000000000000000000000000000000031629394a6072859babbcc2b39e8876614c3c2c190600000000000000000000000000000000000000000000000d22374b5c6467676767635b4935210c00000000000000000000000000000000152a3f556a7f94aabfc9b49e89745846331f0a0000001325365a6f859aafc4c4af9a856f5a36251300000000000000000000000000000000071c3043546e8398aec3c1ab96816c56382721364a5b6f8499aec0b4a2907b65503f2e1c0800000000000000000000000b21364b6075797979797979797979797979797a899eb3c9c9b49f8a7a7979797979797979797979797975614c36210c00000000000000000000000000000000000000000000000000000c171f2126282828221f180c04111c23262828272320190e00000000000000000000000b20354b60758a9fb4c9c8b29d88735544311d080000000000000000000000000000000b21364b60768ba6b8cbc6b19b86715c3a2917040005182a3b4d62788b9fb4c8d1c0b09b85705e4c3822120000000000000e23394e63798ea2b4c8cfbcab9f93868180838a979faa9f8b7b6f8499aec4c5a38e78634e39230e00000000000000071a2d3d4e63798c9fb2b2b19e8976614c3a2a1804000000000000000000000000000000000000000000000005192b3c495a6274808a959da5a7a9ababaaa8aa9f9a91867c6c605645392819090000000000000000000000000000000b1c304354647a8d9fb5c6b8a696806b5a4935201100000000000000000000000000000000000000000000000f243a4f647a7d7d7d7d79634d38230e0000000000000000000000000000000012273d52677c92a7bccdb9a88b76614c36210c000000182d42586d8297adc2c7b29c87725443301c070000000000000000000000000000000b20354a6074889eb3c8c5a7917c67523c271a2d3d4f657a8fa2b4c0af9a85705d4b37231100000000000000000000000e23384d63788d8e8e8e8e8e8e8e8e8e8e8e8e8e9ea7b9cccdbaa89f8e8e8e8e8e8e8e8e8e8e8e8e8e8e7d67523d2812000000000000000000000000000000000000000000000000000000040a0c111212120c0a04000000090f111212120d0b06000000000000000000000000081c30435472879cb2c7cab49f8a75604b36200b000000000000000000000000000000091e32455773889eb3c8c9b39e89745846331f0a000b1f3448596c8196a9bacec8b4a2907b6650402f1d04000000000000132536556b8095aac0d1c4b49f8d7e726c6b6e7681919fa99e88778298adc2bba5907b66503b261100000000000000000f2135495b6c8297a8b9b9a795806b5947341f0d00000000000000000000000000000000000000000000000b2034485a627886959fa8b2b6c3b7b2b1b0b2b7b4afa49c918174605745372614010000000000000000000000000000001325364a5c6d8297a8b9c5b49f8b78624d3f2e180800000000000000000000000000000000000000000002172c41576c8192929292816c573b2b180500000000000000000000000000000010253a4f657a8fa4c8d7c6a38e79634e39240e000000152b40556a8095aabfc9b49f8a75604a35200b0000000000000000000000000000000e24394e63798ea6b8cbb8a68d78624d38230f23374b5d70859bb0c2b4a28f7b65503f2e1c08000000000000000000000b20364b60758a9fa3a3a3a3a3a3a3a3a3a3a3a3b3b9c5d6d7c6bab4a3a3a3a3a3a3a3a3a3a3a3a3a3957f6a55402a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426365a6f859aafc4cfbcab8d78624d38230d000000000000000000000000000000031628395b71869bb0c6ccb9a78b76614c36210c04182a3a4c62778a9fb4c7d1c0b09b85705e4c382212000000000000071c30435470859bb0c5cbb7a6947f6a60575658616c7d8b9fa69a848096abc1bda8937e68533e29130000000000000000061a2c3d4c62778a9eb4c4b49e8a77614c3b2b1805000000000000000000000000000000000000000000000d22384d6278889ca4b4bab8b3aaa69d9b9b9da5a9b3b5b19f978475605544311d0c00000000000000000000000000000008182d3e4c6277899eb4c3baa998836e5d4b36251300000000000000000000000000000000000000000001162b40566b8095a7a79c8772594834200b0000000000000000000000000000000d22384d62778daabbcebba5907b66503b261100000013283d53687d92a8bdcebaa98c77624c37220d00000000000000000000000000000013253653697e93a8c5c8b39e88735a4935200b1c2e3f51667c91a4b6c0af9a84705d4b37231000000000000000000000091d32455673889db3b9b9b9b9b9b9b9b9b9b9b9c9ccd6d3d3d7cdc9b9b9b9b9b9b9b9b9b9b9b9b9ad97826d58422d180000000000000000000000000000000003090b0c0c0b09020000000000000000000000000000000000000000000000000000000000000000000000000000182d42576d8297acc2d9c9a5907a65503b251000000000000000000000000000000000192e43596e8398aec3d6c5a38e79634e39240e0a1f3447596b8196a9bacdc8b4a2907b6550402f1c040000000000000b20354a6074899eb4c9c8b39d8875604b423a474c5f677c8b9fa29a879db2c7c0ab95806b56402b160100000000000000000f203448596a8095a6b8b9a896816b594834200e000000000000000000000000000000000000000000000b21364b6075879db2bdb3a79e958d888686878c949ea7b5b1a3998373604b3a2a1804000000000000000000000000000000101f344859697f94a4b6c7b2a08f7b655443301c0b000000000000000000000000000000000000000000152a3f556a7f94aab6a48c77624d37220d0000000000000000000000000000000b20354b60758a9fb4cabda8937d68533e281300000010263b50657b90a5bad8c7a48f79644f3a240f0000000000000000000000000000071c3043546e8399aec3c4ae99846f593c2b19061120354a6073869cb1c3b4a28f7a65503f2e1b08000000000000000000021528385b71869bb0bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdaf9a85705a3727150200000000000000000000000000000a161e212222201d150a00000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfd2bda7927d68523d281300000000000000000000000000000001162c41566b8196abc0d0bba6917b66513c261117293a4c61778a9fb4c7d0c0af9a84705d4b372211000000000000000d23384d62788da8b9ccc1ac96816c5645322a33414d5e677d92a0a59da5b7cac3ad98836e58432e1900000000000000000005182b3b4b6175889eb3c2b49f8a77624d3c2b1906000000000000000000000000000000000000000000091e324557657b909fb0a199897f7873717072777f899ca4b5b3a1947f695947341f0a00000000000000000000000000000005182a3b4b6074879cb2bfbfb09b8572604a39281603000000000000000000000000000000000000000014293f54697e94a9c2a7927d6752382816030000000000000000000000000000081d31445572889db2c7bfaa95806a55402b150000000e23384e63788da3c4d5bca7917c67523c271200000000000000000000000000000b20354a6074899eb3c8c9aa947f6a553f2a1500071c304354687d92a5b7c0af9a846f5d4b37221000000000000000000000192e44596e8399a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89d88725544311d08000000000000000000000000000a1b28323637373632281a1608000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2bfaa95806a55402b150000000000000000000000000000000014293e53697e93a8bed3bea8937e69533e29141f3347586b8095a8bacdc7b3a28f7a65503f2f1c03000000000000000f24394f64798ea4c6d6bca7917c67523828171f30404d5f6d8297a6b2b7c3d4c5b09b86705b382816020000000000000000000d1e324657687e93a4b6baa997816c5a4935200f000000000000000000000000000000000000000000031628394b5d6c81969a9383776a625a5c5b59626977869ca8bab39e8977614c37220f000000000000000000000000000000000d1d314556667c90a1b3c8b5a3927d685746321e0d000000000000000000000000000000000000000013283e53687d93a8bdad97826d5645321e110300000000000000000000000000011426375b70859ab0c5c2ad97826d58422d180300000b21364b60768ba6b8cbbea9947f69543f2a1400000000000000000000000000000f24394e64798ea7b8ccbcab907b65503b261000001325364b6074879db2c5b4a28f7a654f3f2e1b08000000000000000001172c41566c8193939393939393939393939393939393939393939393939393939393939393939393938c75604b36200b00000000000000000000000003162839454b4c4c4b4538342616030000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8d9c2ad97826d58422d180000000000000000000000000000000011263c51667b91a6bbd0c0ab96816b56412c1729394c6176899eb4c6d0bfaf9a846f5d4b372111000000000000000010253b50657a90a5baceb9a48e79644f39240f122230414b6175879db2c1d1ddc8b39d88735645321e09000000000000000000031629394b6074869cb1c0b49f8b78624d3d2c1a060000000000000000000000000000000000000000000a1b2f3f4b607381857e6e61594d483c3b474c5962788a9fb4b9a895806b563d2c1a06000000000000000000000000000000021527384c5e6f8499aabbc1b29d8875614b3c2b19050000000000000000000000000000000000000012273c52677c91a7c3b39e8975604b3f2e21140300000000000000000000000000182e43586d8398adc2c4af9a846f5a452f1a000000091e32455673889eb3c8c1ac96816c57412c17020000000000000000000000000114263754697e94a9c5cab59f8b76614c36210c0000081d314455697e94a7b8c0af9a846f5d4b3722100000000000000000000f24394e647a7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e75604b36210b000000000000000000000000091e32455760616160565144342111000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daabbbdbdaf9a85705a372614010000000000000000000000000000000f24394e64798ea3c5d6c3ae98836e59432e1e3346576a8095a8b9ccc7b3a18f7a644f3f2e1c03000000000000000011263b51667b90a6bbcdb7a28d78624d38230d03131e324657677d92a3b4c8dfcab59f8a76604b36210b000000000000000000000b1d314455667c91a2b4bbaa97826d5b4935211000000000000000000000000000000000000000000000111d314455606b7068604c473a352b2a343b485a6c8196acc6b29c87725b4935210c000000000000000000000000000000000a1a2f404e63798b9fb4c4b7a695806a5a48342010000000000000000000000000000000000000000e24394e63798ea4b6b8a7947f695d4b3f311e170b000000000000000000000001162b40566b8095abc0c6b19c87715c3a2917040000021628385b71869bb0c6c3ae99846e59442f1900000000000000000000000000081d3144556e8499aec3c6b19c87715846331f0a0000021527374b6176899eb3c7b3a28f7a644f3e2e1b0800000000000000000d22364a5c64686868686868686868686868686868686868686868686868686868686868686868686868605745321e090000000000000000000000000b21364b60757777756b62513f2f1c080000000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fa8a8a8a89d87725544311d080000000000000000000000000000000c21364c61768ba7b9ccc6b09b86715b392828394c6176899eb3c6d0bfaf99846f5c4b37211100000000000000000010263b50657b90a5baccb7a28c77624d37220d00031628394d5f70859bb0c2d3cfbcab8d78634e38230e00000000000000000000011527374d5e70859bb0bfb49f8c79634e3e2d1b0700000000000000000000000000000000000000000001152737444b565b534e42342a2019181f2b3c51667b91a6bbb6a48d78634e38230e0000000000000000000000000000000000122135495b6b8196a6b8c4b49f8a78624d3e2e1b070000000000000000000000000000000000000b20354b6073879cb2bdb49f8b7b655d4e4233291b10020000000000000000000013283e53687d93a8bdc9b49e89745846331f0a000000192e43596e8398aec3c6b19b86715c392917030000000000000000000000000b20354b6074899eb3c4c9ad97826d583a291704000000091e3246576b8095a9bac0af99846f5c4b37220d0000000000000000071b2d3e4a4e5353535353535353535353535353535353535353535353535353535353535353535353534b453928160300000000000000000000000014293e54697e8c8c8b806b5d4b37230e000000000000000000000000000000000000000000000000000000000000000000081d31445572879393939393938b75604b35200b0000000000000000000000000000000a1f33465874899eb3c9c8b39e88735746323246576a7f94a7b8ccc9b3a18f7a644f3e2e1b030000000000000000000f253a4f647a8fa4c9d9b8a38e78634e39230e00000b1b304151667c91a4b6cadac9a5907b65503b26100000000000000000000000091930404f647a8fa1b2bbaa98836e5c4a36221000000000000000000000000000000000000000000000091927313541453e3b311f180c0f1a212c3a50657a90a5bac3a6917b66513c26110000000000000000000000000000000000061a2c3d4c6176889eb3c1baa998826d5c4a362213000000000000000000000000000000000000081c304354677d919fb1baa99e8a7b68604b46392d20120400000000000000000011263b50667b90a5bbcdb9a88b76614c36210c000001162c41566b8196abc0c8b39e89735746331e0a0000000000000000000000000f243a4f64798fa7aeaeaeab937e68533e291300000000031629394c61778a9faeaeaea18f7a644f3b2b1805000000000000000010202d36393e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3632281b0a0000000000000000000000000010253a4f657a8faa9f907b65503b25100000000000000000000000000000000000000000000000000000000000000000000114263751667c7e7e7e7e7e7e7e74604b36210b0000000000000000000000000000000417293a5c71869cb1c6ccb8a78b76614b413d4b6175889eb3c5cfbcab99836e5c4a362010000000000000000000000e23394e63788eabbccfb9a48f7a644f3a250f0000001320354a6073869cb1c8d8bda8937d68533e28130000000000000000000000001222374b5d6e8399aabbb59f8d79644e3e2e1b080000000000000000000000000000000000000000000009151d202c3029261f14181f222c363c4958697e93a8bebda8937e68533e29130000000000000000000000000000000000000f1e334657687d92a3b5c7b59f8d7a644f41301a0a0000000000000000000000000000000000011426364d5f6c8197a0b5b9a89e8c7e6d61574a3e3023130500000000000000000e23394e63788ea3c5d5c6a38e79634e39241000000014293e54697e93a9beccb8a78b76614b36210c000000000000000000000000142a3f54697f9499999999988c79634e38230e00000000000b1f3447596b80949999999999846f594834200b000000000000000002101b2224292929292929292929292929292929292929292929292929292929292929292929292929211e160a00000000000000000000000000000b21364b60768a9faa95806a55402b15080100000000000000000000000000000000000000000000000000000000000000000924394d5e6668686868686868605645321e0900000000000000000000000000000000192f44596e8499aec3d5c5a38e78635656575b697f94a7b8ccc4b59f8d79644e3e2d1b02000000000000000000000b21364b60768a9fb4cabba6917b66513c2611000000071c304354697e93aabbcec0ab95806b56402b16010000000000000000000000081b2e3f4e63798b9fb4bcab99846f5c4b372211000000000000000000000000000000000000000000000001080b161b13101b222a33373d494e5b6376879db2c7bea9937e69543e2914000000000000000000000000000000000000031729394b6073859bb0bebcab9b85705f4d382816020000000000000000000000000000000000081830414b607282959fabb9aa9f938275645c4d4131231303000000000000000c21364b61768ba7b8ccbea9947f69543e2d1b07000011273c51667c91a6bbd6c5a38e78634e39230e000000000000000000000000152a3f546a7f8484848484837c675b4935210c000000000004182a3a4b60727e84848484848377624c37220d00000000000000000000070d0f1313131313131313131313131313131313131313131313131313131313131313131313130b09030000000000000000000000000000040a1e32455771869cae99846f593b2a201c140c090300000000000000000000000000000000000000000000000000000000000a1d30404d51535353535353534b453828160200000000000000000000000000000002172c41576c8196acc1d0bba6907b6c6c6c6c6e798a9eb3c5c3b6a698826d5c4a3620100000000000000000000000091e32455672879db2c7bfaa957f6a55362513000000001325364c61778a9fb4c9c2ad98836d58432e1800000000000000000000000000102135495b6e8499aec9b3a18f7a644f3f2f1c0800000000000000000000000000000000000000000000000000000e19202e363a474c535b636c79859ba5b6cac0a7917c67523c2712000000000000000000000000000000000000000b1c304354647a8fa0b2c6b4a2917c675645321e0d000000000000000000000000000000000000131c30435460727f8d9ea7b6b4a098867a675f4e4131211100000000000000091e32465773899eb3c8c6b19c86715c4a36220f00000f24394f64798ea4c6d7bba5907b66503b261100000000000000000000000013273c4f616a6f6f6f6f6f6e675f4d3d2c1a060000000000000c1c30435460696e6f6f6f6f6f62594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c171f212839586d8297ad9d8873594838353026211e160b0500000000000000000000000000000000000000000000000000000000122230393c3e3e3e3e3e3e3e3632281a0a000000000000000000000000000000000014293f54697e94a9bed3c4af9a8481818181838a9ea8b9cab6a59d8876614c3e32281b110300000000000000000002162838596f8499aec4c3ae99836e5443301c07000000081f3347586e8499aec3c5b09b85705b382715020000000000000000000000000c2135495b72879db2c7bfaf9a846f5d4b37231200000000000000000000000000000000000000000000000003101e2b353e4a4f5861697079818b9ba3b5c3c8b4a28d78624d38220d00000000000000000000000000000000000000011426364b5d6d8298a8b9c0b29d8775604b3b2a18050000000000000000000000000000000000011426364354606a7c899ca4b3b2a49c8a7d685f4e3f2f1c0c000000000000031628395c71869bb1c6c9b5a48f7a644f3e2d1808000c22374c61778ca8b9cdbda8937e68533e29130000000000000000000000000d2032434f54595959595959514d40301f0e0000000000000001142636434b545959595959594c483b2b180500000000000000000c151b1e20202020202020202020202020202020201f1e1c1915100b0801000000000000000000000000000000000000000000000000040f1a21293337364353697e93a8a68c7762514e4b43363632281f180d01000000000000000000000000000000000000000000000000000004121d242729292929292929211e160a00000000000000000000000000000000000012273c51677c91a6bcd1c7b3a29a96969696999fa9b9c6c7b29d87786961584b45392e211407000000000000000000142a3f54697f94a9c4c8b29d8874604a35200b00000004172a3a556a7f94aabfc8b29d88735645311d090000000000000000000000000e23384e63788da5b7cac8b4a2907b6550402f1808000000000000000000000000000000000000000000000010212e3c484d5c646d777e858e979fa9b5c1c9bbaa9a84705a4834200b000000000000000000000000000000000000000008182e3f4d62778a9eb4c3b7a5947f6a5947341f0f00000000000000000000000000000000000008182636434a5e66798699a1b1b6a99f8d7d685d4c3a291704000000000000192f44596e8499aec3d2c2ae99836e5c4a362513000a1f33475874899eb4c9c0ab95806b56402b16010000000000000000000000031525323c3f4444444444433c3930221200000000000000000008182630353f44444444444437342b1d0d00000000000000000f1d29303335353535353535353535353535353535353433312e2a25201d1509070000000000000000000000000000000000000000000c171f2c353a474c535460647a8fa4a6907b6966636054524b4639342a1d15090000000000000000000000000000000000000000000000000000000a0f11131313131313130b0902000000000000000000000000000000000000000f243a4f64798fa4c6d7d0c0b3afabababacaeb4bac7d6cab6a59b857e766a60574b3f3225150700000000000000000f24394f64798ea6b8cbb7a68f7a644f3827150200000012283d52677d92a7bccab59f8a75604b36200b00000000000000000000000215273753697e93a8c3d4d1c0b09b85705e4c362513000000000000000000000000000000000000000000000e1e2e3f4b5a626f7a828a939ba3acb4bac7c4b7ab9f8b7a644f3c2b190500000000000000000000000000000000000000000010203448596a7f94a5b6c3b49e8977624c3d2d1a0700000000000000000000000000000000000008182530404c5b637683979fb1baab9f8c7b655846331f0c000000000001172c41566c8196abc1d6cab59f8d79645443301c1004182a3a5c72879cb1c7c2ad98836d58432e1803000000000000000000000000071520272a2f2f2f2f2f2e27241d12040000000000000000000008141c20292f2f2f2f2f2f2220180d00000000000000000c1d2d3b44484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4846433f3a353127221b1007000000000000000000000000000000000003111c29333d494e5861686e74787d92a7af9a837e7c78746e6861574c473b3127190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca8bacde1d0c7c4bbb8b8b8b8b8b9babcc1c3b4a39b93897f75655d4f4333251506000000000000000b20354b6074889db3c8c4ab96816b5645311d0a00000010253a4f657a8fa4c8cfbcab8d78634d38230e0000000000000000000000081d3144556e8499aec3d9dfc8b4a3907c665443301c09000000000000000000000000000000000000000006192c3c4b5d6578848f989fa9b0b5c1c9c5b8b3a69d8d7d685c4a361d0d0000000000000000000000000000000000000000000005182b3b4b6074879db2c0b9a897826d5c4a3621120000000000000000000000000000000000000008131c2f3c495861738197a1b2bbaa9d8876614c3a2a1704000000000014293f54697e94a9bed3cfbcab9b8572604a3e2d1d0e1b30455a70859aafc5c4af99846f5a442f1a0500000000000000000000000000030d13151a1a1a1a1a1912100a0000000000000000000000000001080b14191a1a1a1a1a0d0b0500000000000000000015293b4c585d606060606060606060606060606060605f5f5e5b5854504b4437362d211a0f0100000000000000000000000000000614212f3a474c5b636d767d84898d929bacb3a19a93918d89837d756b62594b44372b1e0f010000000000000000000000000000000b0b0b0b090000000000060c0e12151614120d0b0500000000000000000000000000000000000000000a1f34475974899fb4c9dec8b8aba5a2a2a2a2a2a3a5a7acb2b7b4b0a89e94887b6961504333241401000000000000081c3043546c8196abc1c8b29d8874604b3827150200000d22384d62778daabbcec9a5907b65503b261000000000000000000000000b20364b6075899eb4c9cec9cac1b19b8672604a37261401000000000000000000000000000000000000000c2035495a657b8999a1adb4bac7c9c2b5b1a79e95887c685f4e3e2d1b0000000000000000000000000000000000000000000000000d1d324556667c91a2b3c6b49f8c79644e402f19090000000000000000000000000000000000000000121e2c3a465560728399a6b7b7a696816b5847331f0a000000000012273c51677c91a6bcd1dac9b4a2937e695c4a3b2c1e192e43596e8398aec3c5b09b85705b46301b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b3044586a7375757575757575757575757575757575757473716e6a6560554f4a3e362d1c1408000000000000000000000000061424313f4b58616c79828a92999ea7a7acb9bfb3afa9a6a89e9992898177696055483c2d200f010000000000000000000000080d0f202020201e14110b0a0e192023272a2b29272220180d0802000000000000000000000000000000000004182a3a5c72879cb1c7dcbeab9a908d8d8d8d8d8e9092979da5b0b5b9b3a69d8c7f6a615042311f0f000000000000011426364f64798ea3b4c8b7a6937e685645311d1102000b20354b60758a9fb4c9bda8927d68533d2813000000000000000000000010253a50657a8fa8b9c7bab4b5bcb5a3917c675544311d0900000000000000000000000000000000000005192b3c4d6378899ea7b3bfc9c6bab4aca49c93888076665e4e41312010000000000000000000000000000000000000000000000000021528384d5e6f849aaabbbcab9a846f5e4c3727150200000000000000000000000000000000000000000e1b293744546176879db2c4b49e8976614c37210c00000000000f243a4f64798fa4c7d7c9bcb5b49f8a7a6459493c30232838596e8399aec3c6b19c87715c47321c070000000000000000000000000000000000000000040a0c11141514120d0b050000000000000000050a0b0b0b03010000000000000000000000000000001e33485d73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898886837f7a746c645c4e4a3d3026180b0000000000000000000002142431424e5d6576818c979fa9aeb3b9c5c7c9ccc7c4bec6b9b3aea89e968a7f73625a4a3e2d1f0f00000000000000000002101b2225353535353329261f1e252c35383d3f403e3c37342b201d150900000000000000000000000000000000001a2f445a6f8499afc4d0bba5907c7878787878797b7d8287909ba3b5bcb7aa9f947f6a604e3d2c18080000000000000822364a5c70859bb0c1c4b29d8774604b3f2f201105081c30435472879db2c7c0aa95806b55402b160000000000000000000004172a3a556b8095aac6baa99f9fabbcb19c8673604b3727150200000000000000000000000000000000000b2034485a6f8499a7b8c5c8bbb4a89f978f867e756a61584c4031231302000000000000000000000000000000000000000000000000000a1a30404e63798b9fb4c5b4a2917c665544311d0c00000000000000000000000001080b0c0a040000000b1926364658687d92a7b9b9a8927d68533d281300000000000d22374c62778ca9bacdbcab9f9fa89d8777635b4d413836455670859ab0c5c6b09b86715b46311c06000000000000000000000000000000000000040b171f2127292b2a272220190d09020000050b0d1a1f20202019161006000000000000000000000000001b30465b70859b9f9f9f9f9f9f9f9f9f9f9f9f9f9fab9f9f9d9b98948f89827a6f635b4b4336281b0b0000000000000000000b1f31424e60687b88979faab4bac7c9bcb5b1b3b9c4b8b3b0b3b9c5b9b4a89e948578645c4a3d2d1d0c000000000000000010202e373a4a4a4a4a483e3b31303a3c494d52555554514d483b363127191203000000000000000000000000000002172d42576c8297acc1d0baa5907b65636363636465676c727b85959fabbcbbb49e937e685b49362513000000000000071b2d3e50667b90a3b4c8b7a595806b5d4c3e2f2018131c26365a6f859aafc4c2ad98826d58432d18000000000000000000000a1f33475870869bb0c5b49f8b8c9fb5b6a4927d685544311d0a00000000000000000000000000000000000d22384d62788da1b3c5c6b9aa9f968a827a716960574c463a2f2213050000000000000000000000000000000000000000000000000000001221364a5b6c8196a7b8c0b29c8774604b3a2a17040000000000000000000008141c20211f170c0400000918293a4b6075899eb3c6ad98836e58432e1900000000000b1f34475974899fb4c9b59f8d899fa69d8779675f524d4b4d6075899eb4c9c4af99846f5a442f1a0500000000000000000000000000000000000c181f2933363c3e403f3c37342b201d150a0e1920222f343535352e2b23180a000000000000000000000000182e43586d8398adb5b5b5b5b5b5b5b5b5b5b5b5b5bcb4b4b3b0ada9a79e978e84796a60544639281a0a000000000000000011263b4e60697e8c9da6b4bbc8c2b5b1ab9f9c9ea7b8a69e9b9ea7abb3b8b9b4a39b887a645b4a3b2a1804000000000000081b2e3e4b4f606060605e534e42414d525a63676a6b69676259534b4437301e160b0000000000000000000000000000152a3f546a7f94a9bfd2bda8937d68534d4d4d4e5052575e6672808d9fb5bebcb49f8b79635443301c070000000000001023384c5e70859baabbc3b59f8d7b655c4b3f342b25303541576d8297acc2c5b09a85705b372715020000000000000000000c21374c61768b9fb4c6b19c868499afc2b29d8774604b382816030000000000000000000000000000000013283d52687d92a7bfcdb9a89e8c80776c645c534b453933291b120400000000000000000000000000000000000000000000000000000000071a2d3d4c6176889eb3c2b6a4937e695847331f0f0000000000000000000a1826303537332a1f170c02000b1e32455670859bb0c5b29d88725d382816030000000005182a3b5d72879cb2c7bcab937e93a1a59d897d70676260636b7f94a8b9ccc2ac97826d57422d180200000000000000000000000000000002101d2a343a464c51545554514d483b3632281a1e2b353845494a4a4a433f362818060000000000000000000000162b40566b8095abc0cacad2c9c6babababababababababbbcbfc3c5b9b3aca1998b8072615746382816030000000000000014293e53697e939faab7c4c5b8b3a49c938b87899eb39e8885898e959ea7b5bcb4a69d8979635947341f130000000000000d22374b5c64757575757369604e4d5f6771787c7f807e7c77716860554d4132281b0c0000000000000000000000000012273d52677c92a7bcd1c0aa95806b55403838393b3d404c54606a7e93a0b1c7baa99b8572604a35200e000000000000091c2f404e647a8c9fb4c1bcab9e897a655d4d483b36434a4f5f6c8196abc1c7b29d88725544311d0800000000000000000012273c52677c91abbcc3ae99837c90a4b5b6a5937e685645321e0b00000000000000000000000000000000152a3f546a7f94a9bfc9b49e8a7b6b61584f4a3e3632281f17140f0d07000000000000000000000000000000000000000000000000000000000f1f334758687e93a3b5c3b39e8976614c3d2c1a06000000000000000a1a2736434b4c473a33291d150d0c162838596e8398aec3b49f89745645321e0900000000001a30455a6f859aafc4b6a18c778399a4a79e92857d787578808c9fb4c6d0bfa7927d68523d28130000000000000000000000000000000010202e3b474c586166696a69676259534b4538302b3c484d5a5f606060585346362310000000000000000000000013283e53687d93a8bdd2d2c1b5b0a4a4a4a4a4a4a4a4a4a5a7a9aeb4b9c6bfb3aa9f958375615645321e1300000000000000182d42576d8297a3b5c5bfb3a79e92867e76728298ad9d877274798089969fabbab8a79d8877614c4130190900000000000f253a4f647a8a8a8a8a887e695b626f7d868d92949593918b867e74675f4b4639291c0c00000000000000000000000010253a4f657a8fa4c7d8c2ad98826d58432d232426282f36434a606d8297a9bac7b4a2917c66513c2c19060000000000001221364a5c6b8095a3b4c4b8a79e8a7b6c625958575460646f7d8c9fb4cacab49f8a75604b36200b0000000000000000061a2c3d576d8297acc9c9aa958071869cb1c3b29d8875604b39291603000000000000000000000000000000152a40556a7f95aabfbea9937e695d4c473a362d211e1920222924221b10020000000000000000000000060c0e1111111111111111111111111117293a4b6073869bb1beb8a796816c5b493521110000000000000215273845546061584c463a31272221223043546f8499afc4baa98b76604b36210b0000000002182d42576d8297acc2b8a28d7875869ca5b3a29b928d8b8d959faabbcec9b3a18d78624d38220d0000000000000000000000000000000e1e2e3e4b59616d767c7e807f7c77716860564d4135485a626f747575756e64533f2b16010000000000000000000011263b50667b90a5bbd0c9b5a39b8f8f8f8f8f8f8f8f8f909294999ea8b3b8c5bbb4a1998474604b41301b0a0000000000000b20364b6074859ba7b8b4a199897d736861697f94a9a58c7661646b76808d9fa9bab7a699836f5f4d37261401000000000d22374d62778ca99fa69d8c78637884929ca4a7aaaaa9ab9f9b93877c6d6157463a291c0c00000000000000000000000d22374d62778ca9bacec5b09a85705b3727150f1012182530424c61778a9fb4c9c0af9a846f5a4935200c000000000000071a2d3e4b6074859ba6b7c4b8a89e8c8177706d6d6f747a83929faabbcecfbcab8d78624d38230d00000000000000000c2135495b72889db2c7bcab917b677d92a5b6b7a6947f695746321e0c00000000000000000000000000000013283e53687d93a8c6b8a28d78634d3f332a221b171f2b35383e39362d2010020000000000000000000e192023262626262626262626262626262626304354657b8f9fb1c3b49f8b79634e402f19090000000000091d3145566073766d61584b44373836373e4a6073889eb3c8b9a88b76604b36210b0000000000152a40556a7f95aabfb9a48e796478879ca4b2b0a7a2a0a2aab4bbc8cebcab99846f5a4835200b000000000000000000000000000006192b3c4b5c6477828a91939594918c867e74675f4b454d627884898a8a8a826e58432e1900000000000000000000000e23384e63788da3c4d5c6b09b857b7a7a7a7a7a7a7a7a7b7c7f8489949ea7b5c2bfb3a298826d5f4d392816030000000000091d3245566278899ea79f94837768605450657a90aba5907b655058616b7d8b9fb4bfb3a1917c675544311d08000000000b20354a60758a9fb4b7ab947f788899a1b1b5c2bbbdc9bcb5b0a59d9182756158473a291909000000000000000000000b20354b60758a9fb4c9c7b29d88725544311d08000008131f3447596c8197acc9c7b4a28d78634d38230e000000000000000f1d3145566277889da6b7c3b9aa9f968b86828284888f99a1b4b4b9c6d6c9a5907a65503b251000000000000000000e23394e63788ea5b7cab49f8b766173879cb2c3b39e8875614b3a291704000000000000000000000000000010263b50657b90a8b9b7a28d78624d392b23222329333c484d534f4a3e2d20100000000000000002101e2c35383b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b364b5d6d8297a5b6bbaa99836f5e4c37261401000000031628394b6074868c8276686055504d4b4c4f5c677d92a6b8c9b39e89745645321e09000000000013283d52687d92a7bdc6a5907b6562778698a0b1b5c2b5b8c0caccc7bab49f8c7a644f3c2b190500000000000000000000000000000b2035495a647a88989fa9a9aaa9a6a39b93877d6d6057596e83989ea89f9b85705b37271502000000000000000000000b21364b60768ba6b8cbc7b19c8772656565656565656566676a6f767f899ca4b5c4c0b2a0927d675745321e09000000000002152838485a657b89928b7f7261594b434c61768b9fa9947f6a54464c5f687d92a1b3bfb29c8773604b35200b00000000071c30435472879cb2c9b09b85879ca6b4afaaa7a6a8adb4b9c3b7b29f97857661584737261401000000000000000000081c30435472879db2c7cab49f8a75604b35200b00000004182a3b51667b90abbccfc0a8937d68533e2813000000000000000215273848596379889da5b2bfbbb4aa9f9b9897999da6aeaa9f9ea8b9cdbda7927d68523d2813000000000000000215273854697e93a9c3c6b19b867158687d92a5b6b8a7947f6a5847331f0d00000000000000000000000000000b21364b6075899eb4c9a7927d6857483c3937393a464c5a6269645c4a3e2d1a0a00000000000010202e3c494d505050505050505050505050505050505050506175879ca8b9b3a1907b655544311d09000000091e324657697e93a098887d746b66626161656c7a899eb3c4c6b09a85705b38281602000000000010253b50657a90a5b0b0a8907b6559627582909ca4adb3b8c5c6b9b4a99f947f695c4a361e0e0000000000000000000000000000071b2d3e4d6278889ea6b4bac7bfbec1b5b0a59d918275615872879cb2b9b29d88735544311d0800000000000000000000091e32455673889eb3c8c9b49f8974594f4f4f4f4f4f4f50525457616a78869ca6b7cbbeb39d8875604b36210f0000000000000a1a2b3c4b5d65777c786a6054473b33465872879dae98836e593a404e606f8399aec3b6a5917c675138281603000000001325365a6f859aafc4b4a39b9ca5aa9f9a94929193989ea8b1bdbdb1a39b8576615544311d10000000000000000000011426365a6f859aafc4cebbaa8d78624d38230d000000000c21364b61768a9fb4cac2ad98826d58432d1803000000000000000a1a2b3b4a5b63798799a1b1b6c2bbb4b0adacaeb3b5a99f8a8a9eb4c9bfaa95806a55402b1500000000000000091d3145566f8499aec4c9ab96816b566074879db2c3b39e8976614c3b2a180500000000000000000000000000091e3245566e8398abbcb29c8775625a514e4d4e5158616b787e7a645c4a3828160300000000081b2e3e4b5a63666666666666666666666666666666666666666666798a9eb4bfb19c8673604b3727150200000c21364b6175889db3a69d9388807b7776777a818b9ea7b9ccb9a8947f6a543f2a150000000000000e23384d63788d9a9a9a988a77614c57616d7c8690989ea6a4a4a89e978b7f69614f3e2d1b0000000000000000000000000000000d22364a5c6f8399a6b8c4cdc7bab4b0afb2b7b2a09885766171879cb1c6b49f8a75604b36200b00000000000000000000031628385b70869bb0c5cdbaa98c77614c3a3a3a3a3a3a3b3d39464b5a6277889db2c1cbb8a6947e69543d2d1a070000000000000e1e2e3f4b596267635a4a43362a293a596e8398ae9d8772584633424f647a8fa5b7c3ae99846f5645321e0900000000182d42586d8297adc2c1b4b0b2a29a8c857f7c7b7e838a979fb4bac1b4a39a8473604b3f2e1a0a000000000000000000182d42586d8297adc2d9c8a58f7a65503a2510000000000a1e32465773899eb3c8c6b19c86715c47321c0000000000000000000d1d2d3d4a5b637683919ca4aeb4b9c6c7bab4aea39b8a7b849aafc4c2ad97826d58422d18000000000000000b20364b6075899eb4c9bcab917b665155687d93a5b7b9a795806b5947341f0d00000000000000000000000000021628384e64798c9fb5b6a59b85786d67636263676c76808a938b7a645645321e08000000000d22374b5c64787b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c8196abc1b5a4927d685544311d08000014293f54697e94a1b4b8b3a69d96908d8b8c8f969fa9b9c5beb49e8977614c37220c0000000000000b20364b607484858585837b655947464b5e66737b83888d8f8f8d89827969614f433220100000000000000000000000000000000f24394e64798ea1b3c5cfbfb2a99f9b9a9da5aeb2a39b857570859ab0c5bcab8d78624d38230d0000000000000000000000192e43596e8398aec3d7c7a48f79644f3a2525252525262729333c4959667b90a3b5c9c4b19c86725b4a36210c0000000000000011212e3b484d524d493c3025182a3f546a7f94a9a58b76614c36364a5c72889db2c7b49f8a75604b36210b00000000152a40556a7f95aabfd1c9b1a0978479706a6766686d7781919fa9bac1b3a296806b5d4b382715020000000000000000152a40556a7f95aabfd2bda7927d68523d281300000000031629395c72879cb1c7c8b39d88735e482614010000000000000000000f1f2d3d4958616e7d8691989ea8a4a4a99f9991857a6d8297adc2c5af9a85705a3726140100000000000010253b50657a90a8b9cab49f8b76614c4b6074879db2c4b49e8a77624c3b2b1905000000000000000000000000000a22364a5c6d8298a4b5b4a39b8a827c7877787c8289959fa99c8675604b362513000000000f253a4f647a8c90909090909090909090909090909090909090909090969eb0c4c2b29d8774604b36200b00000c21364c617683949fa9b5b7b3aba5a2a0a1a4abb4bac7bdb0a0947f6a5947341f0a000000000000091d31455660707070706e655d4b3a32404c5460666e7377797a78756d635b4f4332251402000000000000000000000000000001142637566b8096abbfd0c3b2a1998a8585888e98a0b3a39a84758499aec3c9a5907a65503b25100000000000000000000001162b41566b8096abc0d1bca6917c67513c27121010101112171e2c3b4c5e71859bb0c6cab6a48e79634e39240e0000000000000003111d2b34373d38352c1c1310263b50657b90a5a5907a65503b2e3e586e8398adc3baa98f7a65503a25100000000013283d52687d92a7bdcfbcab978272635b5552515358616c7d8b9fabbcc0b59f8d7b655645311d0a000000000000000013283d52687d92a7bdd2bfaa957f6a55402a1500000000081d31445572879db2c7cab49f8a755443301c08000000000000000000010f1f2c3a474c5f67737c83898c8f8f8d89837c72646a7f95aabfc7b29d87725544311d08000000000004182a3a566b8095abc6c6b19b867158474455687e93a6b7b9a896816c594834200e00000000000000000000000000071b2d3e4b6175869ca5b3b4a99f97918e8c8e91979ea8b4b6a497816c5443301c0700000013293e53687e93aaa5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5abb0bdcdcab7a5917c66513c261100000a1f334658616e7f8b989fabb4bac7b7b6b6bac1c4c1b4b09f968272604a3a2a180400000000000002152738454b5b5b5b5b58504b3f2e1e2f36434b50585a6264646260554e4a3d32251506000000000000000000000000000000081d31445571869bb0c6cab7a5998376706f727a83919ea7a295808297adc2bda7927d68523d2813000000000000000000000014293e53697e93a8bed3bea9947e69543f29140000000000030e1d2f4054697e94a9bed3c2a8937e69533e29140000000000000000000d182022272320190e000c21374c61768ca5a9947f69543f2c41566c8196abc1c7a8937e68533e29130000000010253b50657a90a5c9cab59f8b7560544a3d3d3c3a474c5f677c8d9fb4c1bcab9c8674604b382816020000000000000010253a50657a8fa5c9d9c2ac97826d57422d180000060c1320354b6075899fb4c9cab49f8a75604b35200b00000000000000000000000e1c2a33414d5560676e7577797a77756e676054677d92a7bccab49f8a75604b35200b00000000000a1f33475871869bb0c6c9ab96816c563a374b6074879db2c4b49f8b78624d3c2c190600000000000000000000000000101e3346576278879aa2b2b6b4aca6a3a2a3a6acb3b9b3aa9f948273604a35200b00000011273c51667c91a6c8bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc1c4cdd3d4c3ab96816c56412c1701000417293a464c616978828c989fa9abafb1b2b2b1afaaa39b908173605443301c0c00000000000000000a1a27313645454545433a372e2112182630353b3c484d4f4f4d4b4437362d1f1507000000000000000000000000000000000b20354b60758a9fb4cac7b29d877561585a5c646e7c899da69f8c859bb0c6bfaa957f6a55402a15000000000000000000000011263b51667b90a6bbd0c1ac96816c57412c17020000000000001124394f64798ea4c8d8c1ac97826c57422d1702000000000000000000050b0d120e0c0600000a1f33475872879dad98836e583a2a3a566b8096abc0c0ab96806b56412b16010000000d23384d62788dabbccfbcab8d78624d362d27262a33414d5e6a7f95a3b5c9b6a4947e695645321e09000000000000000d23384d62788dabbccfc4af9a856f5a3625131c1c19202331404f647a8fa8bacdc8b39d88735443301c080000000000000000000000000c171f3037444b525560626464626055514a50657a8fa5c8cebbaa8d77624d38220d00000000000c22374c61778b9fb5cabcab917c66513c314556697e93a6b7baa997816c5a4935200f0000000000000000000000000003172939485a627684929da5aeb3b8c5b7b8c3b6b2aca1998c7f6d605443301c070000000f24394e64798ea3c6bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdaf9a846f5a452f1a0000000b1b2933434f5a626d7a828a9196999c9d9d9b99948f857b6c605544362513000000000000000000000a151d20303030302e25231c110308141c20262b35383a3a38363127211a0f0100000000000000000000000000000000000d22374c62778caabbcec0ab95806b56473e4a4f5e6679879da79f9ba3b5c9c2ac97826d57422d1800000000000000000000000e24394e63798ea3c5d6c3ae99846e59442f19000000000000000c21364c61768baabbcec4af9a846f5a452f1a050000000000000000000000000000000000000417293a596e8398ae9c877258463647586e8399aec3c1ac97816c57422c17020000000b20364b60758a9fb4cac9a5907a65503b251211181f30404b6073859bb1c0c2b39d8875604b362110000000000000000b20354b60758a9fb4cac7b29c87725443303131312c3538414e5e6d8298adc6d7c6b19b86715c362614010000000000000000000000000004131926313537444b4d4f4f4d4b4437384d62778daabbcec8a58f7a65503a2510000000000012273d52677c92abbccab59f8b76614c3727384b6075889db2c4b49f8b78634d3d2d1a07000000000000000000000000000b1b2b3c485861737d8792999ea7a4a5a4a3a59c978f84796a614a43362513000000000c21374c61768ca8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89c87725c372715020000000b171f323c484d5c646d767b808487888886847f7a70665e4b4437271808000000000000000000000002090b1b1b1b1b19100e0800000001080b11192022242523201d150907000000000000000000000000000000000000000e24394e63798ea3c8d9bca7927d6752382d36404c5b6379899eabb0b5c1d2c4af9a856f5a36251300000000000000000000000c21364b61768ba7b8ccc6b19c86715c3a2917040000000000000b20354a60758a9fb4cac5b09b86705b46311b0600000000000000000000000000000000000000152a3f546a7f94a99f8b76614c465461768a9fb4c9c1ac96816c57412c1702000000081d31445573889db2c8bda8927d68533d28130004131d314455657b90a2b4c8b7a6937e69533e2d1b07000000000000081d31445573889db2c8c9b49f8a75604a464646463c494d5360687c8d9fb5cad4c3ac96816c57412c170000000000000000000000000000000009141d20273135373a3a38363127354b60758a9fb4c9bca7927d67523d281200000000071a2d3d586d8297adc9c6b19b86715847331f324556697e93a6b8bbaa98826d5b4a36211000000000000000000000000000000e1e2b3a47546067747c83888c8e8f8f8e8b87817a6f635b504330251808000000000a1f334758748a9393939393939393939393939393939393939393939393939393939393938a745544311d080000000004141e2b353e4a4f5761666b6f717373716f6a645c504c4031271909000000000000000000000000000000060606060300000000000000000000050b0d0f0f0d0b08020000000000000000000000000000000000000000000e24394e63798ea3b8cebba6917c66513c27222f3d4a5b667c8d9fb5c4d2dcc7b29c87725443301c07000000000000000000000a1e33465773899eb3c8c9b39e89745846331f0a0000000000000b20354b60758a9fb4cac5b09b85705b46301b060000000000000000000000000000000000000010263b50657b90a5ab8f7a65505761728298a8bacdc7aa957f6a55402a1500000000021527375b70859bb0c5bfaa95806a55402b150000011527374b5d70859aafc5c4b19c86715c4a36220d000000000000011527375b70859ab0c5cebaa98c77625b5b5b5b5c5d5a6368707d8b9fabbccfcbb7a5907b66503b2611000000000000000000000000000000000001080b151d2022242522201d1c30435472879db2c7bfaa957f6a55402a15000000000c21364a5b73889db2c8c9ab96816c563a2a1728384b6075889db3c5b49f8c79634e3e2d1b0700000000000000000000000000000e1c2a36434b5560676e7377797a7a7976726c645c4e493d331c1308000000000004172a3a52677d7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e74604b36200b0000000000000e19202d3639464b51565a5c5d5d5c5a554f4a3e382f1d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778da2c7d7bca6917c67513c27121f2d3d4c5e6c8197a6b7cbdfc9b49f8a75604a35200b00000000000000000000031729395c71869bb1c6ccb9a88b76614c3621141414141414131c28384d62788dabbccfc4ae99846f59442f1a04000000000000000000000000000000000000040c21374c61778ca5a9947e696068758298a0b2c6cdbaa9917c66513c27110000000000182e43586d8398adc2c2ad98826d58432d1800000009192e3f51677c91a7b8c9b5a48e79644e39240f00000000000000182e43586d8398adc2d8c7a48f7a7171717171717274787d85929fa9bac9cfbeb29d8774604b36200b000000000000000000000000000000000000000001080b0d0f0f0d0b081426365a6f859aafc4c2ac97826d57422d18000000000e24394e63798ea6b7cbbcab917c66513c27111e324556697f94a6b8bcab99836e5c4a3622100000000000000000000000000000000c18263037444b52595962646565636157574f4a3e362c1f1500000000000000000c25394d5f6768686868686868686868686868686868686868686868686868686868686868605544311d080000000000000005101b222933363c414447484846443f3a362d231c110200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba9bacdbea8937e69533e29140f1f2f404b6175889db2c3d4cdbaa98c77624c37220d0000000000000000000000192e44596e8399aec3d6c6a38e79644e392929292929292a2530374556687e93a8c9d3c2ab96806b56412b160100000000000000000000000000000000030c171f2133475872889dad98826d757d8798a0b2becfc3b49f8a76614c36210c0000000001162b40566b8095abc0c5b09a85705b372715020000001120354b6074889eb3c8c2ab96806b563a2a1704000000000000162b40556b8095aac0d5c7b29c8786868686868687898d929ba3b4bac7cebfb2a0927d685544311d080000000000000000000000000000000000000000000000000000000000182d42586d8297adc2c4af9a856f5a3626140100000215283854697e94a9c4cab59f8b76614c37210c1628384b6075889eb3c5b2a18e7a644f3f2e1b0800000000000000000000000000000008141c2731363d3b474c4f504f4e4b46393a362e211a0f0100000000000000000a1e30414d52535353535353535353535353535353535353535353535353535353535353534b4437271502000000000000000000070b171e21262b2f323333312f2a24221b1009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c9c0ab95806b56402b1601111e324657687e93a5b7cad7c7a48f79644f3a240f0000000000000000000001172c41566c8196abc1d0bba6917b66513e3e3e3e3e3e3e3f36434a556074879db2c7cab6a4907b65503b2610000000000000000000000000000000000a161e2a33373e4a596e8399ae9d878189929da5b2becfc5b6a596816c5746331e0a000000000013293e53687e93a8bdc7b29d88725544311d08000000081d3144556d8297adc2c6b19b86715847331f0a00000000000013283e53687d93a8bdd2cab6a59c9b9b9b9b9b9b9d9ea8a8b0b5c1cdc8bbb4a198826e5f4e372715020000000000000000000000000000000000000000000000000000000000152a40556a7f95aabfc7b29d87725443301c080000091d3245566f8499afc4c6b19c86715847331f0a0a1e3245576a7f94a7b8bfaf99846f5d4b372211000000000000000000000000000000000109151d20272a3437393a3a3936332924221b10060000000000000000000001132330393d3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3631271909000000000000000000000000030a0c11161a1c1e1e1c1a150f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435472879cb2c7c2ad98836d58432e1800031629394b6074879db2c8d9bca7917c67523c2712000000000000000000000014293e54697e93a9bed3bea9937e6954535353535353535455546065748299a5b7cabcb19c8673604a35200b000000000000000000000000000002101a28323a474c555c646c7f94aaa59d969ea7b2b7c3cec4b7a79c8775614b39291703000000000011263b50667b90a5bbcab49f8b75604b36200b0000000115273752677c91a7c5cab59f8b77614c37210c00000000000010263b50657b90a5c9dad3c3b6b2b0b0b0b0b0b1b2b4b9c6c5c8c8bbb4aa9f958374604b4131190900000000000000000000000000000000000000000000000000000000000012283d52677d92a7bcc9b49f8a75604b35200b00000b20364b60758a9fb4c9c9ab96816c563a2a1704031628394b6175899eb3c5b3a18f7a654f3f2f1c09000000000000000000000000000000000002080b12181f2224252524211e170f0d070000000000000000000000000005131e252729292929292929292929292929292929292929292929292929292929292929201d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325365a6f859aafc4c5b09a85705b37261401000b1d3144556a7f94aabbcebea9947f69543f2a14000000000000000000000011273c51667c91a6bbd1c0ab96816b6969696969696969696b6e747b8599a1b2c3bbb49e907c665443301c07000000000000000000000000000310202d38454b58616a727a81889eb3b7b2abb3b8c5cbcabeb1a69d897a645746321b0b0000000000000e23394e63788ea3c5cfbcab907b6650392917030000000d22384d62788da7b8ccbcab907b66513b26110000000000000e23384e63788dabbcbdbdbdbdbdbdbdbdbdbdbdbdbcbbc4b8b3aeaa9f988b80736056453223130000000000000000000000000000000000000000000000000000000000000010253a50657a8fa5c8cebbaa8c77624d37220d000010263b50657b90a9bacdbcab917c66513c271100000a1e3246576a7f94a7b8bfaf9a84705d4c382312000000000000000000000000000000000000000000050b0d0f10100e0c0a030000000000000000000000000000000000010a1012131313131313131313131313131313131313131313131313131313131313130b0802000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1415120c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d8297adc2c7b29d88725544311d0800021527374d62778b9fb4cac1ac96816c57412c1702000000000000000000000f24394e64798ea3c6d6c6b09b857e7e7e7e7e7e7e7e7e7f808387909ba3b2bfb3aa9f94806b5e4c362513000000000000000000000000000010212e3e4a56606b767f878f969ea6b8cac7c0c8c9c8bbb4ae9f978879645c4a392916000000000000000c21364b61768ba7b8ccc9ad98826d5746331e0a0000000b2035485a73899eb3c8c9a9947f69543f2a140000000000000b21364b60768a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a7a6a4a69d99938b82796a60554538281605000000000000000000000000000000000000000000000000000000000000000d22384d62778daabbcec8a48f7a654f3a25100005182a3b566b8096abc7cab59f8b77614c37210c0000031629394c6176899eb3c5b4a2907b6550402f1808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101b22242a2b27211e170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095aabfcab49f8a75604b35200b0000092034485970859bb0c5c3ae99846e59442f1900000000000000000000000c21374c61768ca8b9ccc9b5a39b9393939393939393939495989da5b1b5b1aba29a8c7f6b6251402f1808000000000000000000000000000e1e2e3f4b5c6475808a959ca4abb3b8c4d5cec5c2b5b1aa9f988e8276635b4a3e2d1b0b00000000000000091e32465773899eb3c8c9b49f8a76614c38281502000005192b3c5b71869bb0c6c2ac97826d57422d18000000000000091e3245567388939393939393939393939393939292918f8c88837d776d635b4b4437281a0a00000000000000000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9bca7927c67523d2712000b1f34475971869bb1c4c4b19c86715847331f0a0000000b1e3346576a7f95a7b9c0b09b85705e4c36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d11131516161513100c09030000000000000000000000000000000000000000000000030a0c10121415161615120e0b080100000000000000000000000000000000000000000000000b171e2e373a3f403d3633291b120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdcebbaa8d77624d38220d000005182b3b586d8398adc2c6b19c86715c3a291704000000000000000000000a1f33475874899eb4c9d2c1b5b0a8a8a8a8a8a8a8a8a8a9aaaeb2b7b6a49c958e847a6a6151443322120000000000000000000000000006192c3c4b5d657a86959ea8b2b6c3c8cbd5cebeb2ada49c948b837a6d61584a3d2d20100000000000000000031628395b71869bb0c6cdbaa8947f695645321d0c000000192e44596e8399aec3c4af9a846f5a452f1a0000000000000216283851677d7e7e7e7e7e7e7e7e7e7e7e7e7e7d7d7b7977736e6861584e493d3126190a000000000000000000000000000000000000000000000000000000000000000000081c30435472879db2c6bfaa947f6a553f2a15000d22374c62778b9faeaeaeac96816c573a2a1704000000031729394c6176899eaeaeaea3917c665443301c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e18202227292a2c2b2a2825211e160d0b05000000000000000000000000000000000000060b171e212528292a2c2b2a2724201c14080800000000000000000000000000000000000000000b1b29333e4b4f5455524c46392f221202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d9c8a48f7a654f3a2510000000162b40566b8095abc0c9b39e89745846331f0a0000000000000000000004172a3a5c71869cb1c6dbd2c9c6beb7b7b7b7b7b7b7b8b9bcc0c6c7b19c8680796f645c4f4333261604000000000000000000000000000c2035495a657b8a9ca4b4b9c6cac8c5bbc8c5b2a0988e867f786e645c4c473a2d1f1002000000000000000000192e44596e8399aec3d7c6b39d8875604b3a2a18040003182d43586d8298adc2c5b09b85705b46301b000000000000000a24394d5f676868686868686868686868686868676664615859534c473a352c1d140900000000000000000000000000000000000000000000000000000000000000000000011426365a6f859aafb0b0ac97826d57422d180012283d52677d929999999999907b66503b261100000000000b1f334658697f9399999999998672604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000050e1920232b34373c3e3f41403f3d3a363228221f180d060000000000000000000000000000000e1a212933363a3d3e4041403f3d39353026231c1107000000000000000000000000000000000003172939464c5c64696a6761574c402f201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788dabbccfbca7927c67523d271200000013293e53687e93a8bdccb9a78b76614c36210c00000000000000000000001a2f44596f8499aec4d9ccbcafaaa2a2a2a2a2a2a2a3a4a7abb1b5b39d8880786b61574a3e2f221202000000000000000000000000091d2f404d63788a9ea8b6c2cdc9c0b4afa6b3b7ad988279716962594f4a3e332a1c0f0100000000000000000001172c41566c8196abc1d6cbb7a6937e695847331f120102182d42576d8297acc2c6b19c87715c47321c000000000000000a1d30414d51535353535353535353535353535352514f4c473a3e37332a211a0f01000000000000000000000000000000000000000000000000000000000000000000000000182d42586d82979b9b9b9b9a846f5a452f1a0013293e53687e8484848484847e695e4c38230f00000000000417293a4f61697e8384848484837a644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000d18202c35383b484c515355565655524f4b463937342a211a0f010000000000000000000000000e1f2c3539464c4f525455565654524e4b4336372e211a0f000000000000000000000000000000000a1e334657616e7a7f807d76665e4c3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb5cabfa9947f6a543f2a1500000011263b51667b90a6bbd6c5a38e79634e39240e0000000000000000000002172c41576c8196acc1d6c3af9e958c8c8c8c8c8c8c8d8f91969ca4b0a69d958b8075645c4c402f20100000000000000000000000000f24384c5e6f849aa8b9c6cfc2b5b1a29a909da6a8937e695b544d483b362d1f170c00000000000000000000000014293e54697e93a9bed3d4c4b39e8977614c41301f0f00182e43586d8398adc2c6b19c87715c47321c0000000000000001122330393c3e3e3e3e3e3e3e3e3e3e3e3e3e3d3d3c3a37332a28221f180c06000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687e868686868686826e59432e190011263b4e60686f6f6f6f6f6e69614f402f1c090000000000000c1c32434f60686e6f6f6f6f6f645c4a36210d0000000000000000000000000000000000000000000000000000000000000000000000000004121d2b343c494d56596266686a6b6b6a68656157554c483b362c1d150900000000000000000000061a2c3d494e57616567696a6b6b6a676360544f4b3f362d1c130800000000000000000000000000081c2f3f4c6175838f949592897c665c4a36220a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d32455673889db3c8c1ac97816c57422c170200000e24394e63798ea3c5d6bba6907b66513b26110000000000000000000000142a3f54697f94a9bed4bfaa958078777777777777787a7c81868f9ba3b3a99f96877a665e4c3e2e1b0b000000000000000000000011263b51667b90a2b4c6cfbeb2a49c8f857b889dad97826d583d37342b221b10040000000000000000000000000011273c51667c91a6bbd1e0ccb8a797826d5f4d3d2c1e111a2c3d5a6f849aafc4c5b09b85705b46301b000000000000000005121d24272929292929292929292929292928282624221f18130c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000011263a4e60687171717171716e6453402b17000b1f31424e53595959595959544f423222110000000000000000152532424e535959595959594e4a3e2d1a07000000000000000000000000000000000000000000000000000000000000000000000000051322303b484d5a636c72777c7e7f81807f7d7a76706a62594e493d3127190e0000000000000000000c2135495b6371767a7d7e7f81807f7c79746d655d4e4a3e302518080000000000000000000000000e23384c5d6f8399a1a9aaa79e8b7a644f38281502000000000000000000000000000000000000000000000000000000000000000000000000000000000000021528385b70869bb0c5c4ae99846f59442f1a0000000c21364b61768ba7b9ccbea8937e69533e2914000000000000000000000012273c51677c91a6bcd1c0ab96816b6262626262626364676b717b85969fb0b4a59d8b7c665c4b3a29170400000000000000000003172939586e8398adc0d0c1b2a098867a706f8499ae9c867156453220190d070000000000000000000000000000000f24394f64798ea4c6d7d8c8bbb49f917c675b493c2e202136495b73889db2c8c4af9a846f5a452f1a000000000000000000010a1012131313131313131313131313131312110f0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f31424e535b5b5b5b5b5b59534636241000021424313b3e4444444444443e3b322414030000000000000000071524313a3e44444444444439362d200f00000000000000000000000000000000000000000000000000000000000000000000000004132331404d59626e7881878c919394969594928f8b857f776d635b4b44372b1e0f01000000000000000e23384e6379858b8f929395969594928e89827a70645c4a4336261808000000000000000000000010263b50657b90a1b3bfc5b8a99a846f5645321d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8398aec3c6b19c87715c3a29170400000a1e33465774899eb3c9c0ab96806b56412b1601000000000000000000000f243a4f64798fa4c7d7c3ae99836e594d4d4d4d4d4e4f52565d65748196a0b2b7a99f8b7a645846331f0c0000000000000000000a1e33465773889db3c8c9b5a3988274655d6a8095aa9f8a76604b36210b00000000000000000000000000000000000c21374c61768ca8b9cdcebbaa9faa9e8979635a4b3f34313e4e63798ea6b7cbc2ad97826d58422d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021424313a3e464646464646434036281807000006141f26292f2f2f2f2f2f29271f14060000000000000000000006141f26282e2f2f2f2f2f24211a0f01000000000000000000000000000000000000000000000000000000000000000000000000112231414e5e6677838c969ca5a6a8aaababaaa7ab9f9b948a82796b6055483c2c1f0f000000000000000d23384d62788d9faba7a9aaababa9a7a79e978f857a6a6054433626140100000000000000000000162b41566b8096abbfd0d5c7b49f8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8096abc0c9b49e89745846331f0a0000031729395c71869bb1c6c3ad98836e58432e1900000000000000000000000c22374c61778ca9bacdc6b09b86715b3937373737383a3c3f4b55606d8298a7b8baa99d8876614c3b2a180400000000000000000c21364b61768ba6b8cbc6b09b8574605651667c91a6aa8f7a644f3a240f00000000000000000000000000000000000a1f33475874899eb4c9cab49f8a9ea79d8878655d4d48444b5c6c8196abc4d4c4a8937e69533e2914000000000000000000000000000000070b0e1215161513100c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f26283131313131312e2b24180a00000000020b11131a1a1a1a1a1914120c02000000000000000000000000020b1113191a1a1a1a1a0f0d07000000000000000000000000000000000000000000000000000000000000000000000000000a1b2f404e5f687c89989fabb2b6c3bdbcbab9bbc9bcb4b0a99f978c8073625a493d2c1c0c0000000000000b20354b60758a9fb4c9bebfc0c0bfc5b8b3ada29a8c7f72605443301c1200000000000000000000172d42576c8297acc8d8e0ccb9a78c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93a8beccb9a88b76614c36210c000000192f44596e8499aec3c5b09b85705b38281502000000000000000000000b1f34475974899fb4c9c8b39e88735746322222222325272e37444c6176899eb3c7b7a696816c5947341f0b00000000000000000d22384d62778da2c4ccb9a8907b6556454d62778ca6a8937e68533e2913000000000000000000000000000000000004172a3a5c71879cb1c6c2ac9781899ea69d887b6b62595560677a8b9fb4c9cbb8a68f7a654f3a25100000000000000000000000000508131c2024282a2b2a2925211f170c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020b11131c1c1c1c1c1c191710070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394c5e687d919ea7b4bcc5b9b3aca7a5a4a6a8aeb4babab4ab9f958578635b493a2a18040000000000081d31445572879db2bdb9b7b6b7bac0c8c8c0b4aa9f948172604b41301e0e000000000000000000152a3f546a7f94aabbcbcec3b39e8974604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91a6bbd6c6a38e79644e39240f000002172c41576c8196acc1c8b39d88735645321d090000000000000000000004182a3b5c72879cb1c7ccb8a78b76614b36210d0d0e0f1219273346586a8095aac6c4b49f8b77614c37220c00000000000000000d22384d62778da2c5c9b49e8974604b38485973889eac97826d573828150200000202000000000000000000000000001a2f445a6f8499afc4c1ac97827c919da69d8c80777271757d899ea9bacec7b39e8874604b35200b00000000000000000000010d1920253035393d3f403f3e3b37332a221f180c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d12151615130e0c070000000000000000000000000000091e324557667c8c9fb3b8c5bdb1a79e97928f8f9093999fa9b4bbbcb4a39b8879635847331f130000000000011426375a70859aaba7a4a2a1a2a5aab3b7c4c8bbb4a096816c5f4d3c2b190600000000000000000e23384d63788b9fb2b7bbb4a496816c5443301c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c6d6bba6917b66513c2611000000142a3f54697f94a9becab59f8a75604b36200b00000000000000000000001a2f445a6f8499afc4d5c5a38e78634e39230e000000000917293a4f64798ea8b9ccbbaa947f695437271501000000000000000c21364c61768ba6b8c7b29c87725443303b5a6f8499af9b86715645321d090c0e17170d0b0500000000000000000002172d42576c8297acc1c4af9a846f7f959faa9f968c878689929ea7b9c7cdbaa996816c5544311d0800000000000000000008141c2b3436434a4e5255555553504c473a37342a1f180c0000000000000000000000000000000000050f15171d1d1d1d1d1d16140e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f111b1d1d1d1d1b1913090000000000000000000000000000000000060d192022282a2b2a2824211a0f0b0500000000000000000000021527384b6075879daabbccbcb09f9789827c7a797b7e848a979faabac1b4a69d8776614c413019090000000000162b41566b809495928f8c8c8d8f959da6b0bdcebeb09e917c675a4935200f00000000000000000c2035495a6a7f929da5aa9f988676614c36261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768ca8b9ccbea8937e69533e291400000012273c52677c91a7bccfbcab8d78634d38230e0000000000000000000002172d42576c8297acc1d0bba5907b66503b261100000000000b20354b6075899eb4c9c8af9a85705544311d08000000000000000a1e33465773889eb3c8b39d887358473340556b8095aa9f8a75604b36201921232c2d2220190e000000000000000000152a3f546a7f94a9bfc7b19c87726c81969eb4ab9f9c9b9ea7b3b9c5cfbfb49f8a78634d3727150100000000000000000b1826303b484d546063676a6b6a68656158544c473a332a1c130200000000000000000000000000000917222a2d3232323232322b28211608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d24263032323232312e261a0c0000000000000000000000000000010f1a212b34383d40413f3d39362d2220190d020000000000000000091d3145566a7f95a6b7c8c1b09e9681766c67656466686e77818c9fa9bac4b7a599836f5f4d37271501000000000c21364b61757f807d797776787a8088969fafbbccbdb49e8a78624d3d2c1a060000000000000006192c3c4f616a7d878d8e8a827761584733180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb4c9c0ab96806b56412b160100000f243a4f64798fa4c7d7c9a5907a65503b25100000000000000000000000152a3f546a7f94a9bfd3bda8937e68533e29130000000000081c30435472879cb2c7c9b49f8975604b35200b0000000000000003172939596f8499aec8b49f8b76614c383c51667c91a6aa8f79644f3a242c3538424238352b1e0e000000000000000012273d52677c92a7bcc9b49f8975606c80929fa8b5b1b0b3b9c5ccc9bcb5a195806a5a4935190900000000000000000b1b2936434b59626b74797d7f807f7e7a77706a61594c473a311d1509000000000000000000000000051727353e42474747474747403d3326160400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122230383c45474747474642382b1a0000000000000000000000000003111f2c353c484d52555655534e4a3d38342b1e160a000000000000000b20364b6075889eb3c4c9b5a396806d615852504f515359616c7c8b9fb4bdc3b3a1927d675544311d08000000000a1e334657616a6b6864626162656b7581959dafbfccb9a898826d5b4935210b00000000000000000e1e32434f5f67737879766e6159473a291700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a5c71879cb1c6c3ad98836e58432e190000000d22374c62778ca9bacdbda8927d68533d2813000000000000000000000012273d52677c92a7bcd1c0ab95806b56402b160100000000011527375b70869bb0c5cdbaa88c77624d37220d000000000000000014293e53697e93aabbbcab927d685645364d62788da7a8937e68533e333c494d57574d483c2b1c0c0000000000000010253a4f657a8fa4c8cdbaa98c7762626b7d8a99a1acb2b7c4c6b9b4ab9f978373604b3c2c1900000000000000000a1a29394654606a7880888e9294959493908b867f776c61584d413127190900000000000000000000000f22354552575d5d5d5d5d5d56504433210e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d30404c515a5d5d5d5d5b5549381a0a00000000000000000000000011212f3d494e5a62676a6b6a68635b564d483c32281a0b00000000000010263b50657b90a7b8ccc9b19b8573604c463a3a3a3b3a474c5e667c919fb1c8bfb29c8774604b35200b0000000003172939464b5556524f4d4c4d5057606c7f95a1b3c8c6b49f8c79634e392816030000000000000000152532414d5460636461584c473a2a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499afc4c4b09b85705b3727150200000b20354a60758a9fb4c4bfaa95806a55402b1500000000000000000000000f253a4f647a8fa4c7d8c2ad98836d58432e1800060001080b1d31445571879cb1c6d7c6a38e79634e39240e00000000000000000c22374c61778b9fb4c7b29d8774605447485a73889eac97826d5739464c5b636c6c625a483a2a18080000000000000d22374d62778caabbcec7a48f79644f5f6778838e979da6a4a4a89e988d8174605544311e0e0000000000000002152838465761727f8a969da6a7aaaaaaa8ab9f9b948a8177675f4b443727190900000000000000000000152a3e52636c7272727272726b62503d2814000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3b4c5e66707272727270675538281502000000000000000000000e1e2f404c5b636f787d7f807f7d79736c625a4b4538291b0b0000000000152a40556a7f95aac5cfbcab917c67554433292524262a34404c5e6c8197aabbcab6a5917c665137271501000000000b1b2933363f403d3a37373839454b60728399aabbcebcab98826d5746321e0900000000000000000715233136434a4e4f4c463a342a1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c42576c8197acaeaeae9d88735544311d080000071c30435472879caeaeaead97826d58422d1800000000000000000000000d22374d62778ca9bacec5b09b85705b3827151c1c1c141d2028374b6075899eb4c9d7c6a38e79634e39240e00000000000000000b1f3447596d8297a9bab6a598827261594d5a6f849aaf9b8671564c57616b788182786258473625130000000000000b20354b60758a9fb4c9bca6917c67514d5a626f7982888d8f8f8d89837a6c6056453727150000000000000000091d324556617583949fa9b3b7c4bfc0bfc9bcb5b0a99f97897d6c60554437271808000000000000000000172d42576c81878787878787806b56402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344759667c858787878785705645321d0900000000000000000006192b3c4c5e6579848c92959694928e8881786c6056463a29170400000000182e43586d8398adc2cab49f8b76614c372617100f11181f30404d62778b9fb4c9c3ae99836e5544311d0800000000000b171e212a2b28242221232832435462788c9fb4cac9b49f8a76614b36210c00000000000000000005131825303538393633291f180c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f9499999999998b75604b36200b0000001325365a6f84999999999999856f5a45301a00000000000000000000000b20354b60758a9fb4c9c8b29d887356453131313131263135394655657b90a8b9cdcdbaa88c77614c37220c000000000000000004182a3b4d62788a9fb4bfb2a09883776a625a6b8095ab9f8a7560626a76808b97978776615443301c070000000000081c30435472879db2c7bea9947f69543c494d5c646d7377797a78756e655d4b453827190900000000000000091930404b6074849aa1b4bac7c2b6b1adacaeb2b7c3bab4a79e928173605544362513000000000000000000172c42576c81979c9c9c9c9a846f5a36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778b9a9c9c9c9c8b75604b36200b0000000000000000000b2035485a657c8a999fabaaabaaa8a69d968b8174615846331f0a000000001a2f445a6f8499afc4c7b29d877258463319090000000412203448596e8398aec3c9b49e8975604b35200b000000000000030a0c1516130f0d0c0d162536495a6d8298adc6cdbaa9917c67513c2712000000000000000000000009151d202828282827241d1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657b8484848484848377614c37220c00000014293f54697f848484848484816c57422d170000000000000000000000081c30435472879cb2c7cab49f8a75604b464646464637444b4e576173849ab0c6d6c9b49f8975604b35200b0000000000000000000c2035495a697f94a1b3beb2a1998a8078716d7c91a6aa8e7a70777f89959fa9a5998372604a35200b0000000000011426365a70859aafc5c1ac96816c5741353e4a4e575a6264646260564f4b3f31271a0a00000000000000021527374c5e6d8297a2b3bfc3b6b2a49c9897989da5aeb3bfb8b39f978373605443301c110000000000000000142a3f54697f94a9b2b2b19c87725443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90aab2b2b2ab8d78634e38230e0000000000000000021527384d6278899ea8b5bcc9c0bfc4b8b3aa9f968676614c36210c000000001a2f455a6f849aafc4c6b09b86715b3a2917000000000005182b3b53687d93a8bdccb9a88e79644e39240f0000000000000000000001000000000008182c3c50667b90a8b9ccc7ad98836e583c2b190500000000000000000009192731353d3d3d3d3c3930221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d656f6f6f6f6f6f6f615847331f0a00000012273b4f61696f6f6f6f6f6f6c63523e2a150000000000000000000000011426365a6f859aafc4cfbcab8d78625b5b5b5b5b5b5c5560636a758298a2b4c8d3c3ae99846f5443301c0800000000000000000006192b3c4a60728399a2b1bdb3a89e958d86828096abae9983858b959ea7b4bab3a1947f6a543f2a15000000000000182d42586d8297adc2c4ae99846f59442f2d36393c484d4f4f4d4b4538372e1d150a0000000000000000081d314455667c91a0b1c0c2b5a59c8f87838183888f99a1b4babdb1a1988272604a3f2e1b0a0000000000000012273c52677c91a7bcc7b49f8975604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8fa4c7c7c9a5907b65503b26100000000000000000091d3145566d8297a8b9c6cfc3b7b2adadb2b7b19b86715846331f0a00000000192e43596e8398aec3c7b19c87725c3929160300000000000e24394e63798ea3c9d6c6a6917c67513c271200000000000000000000000000000000000e20364b6075899eb4c9c8b39e89735a4835200b000000000000000001152737444b52525252514d40301b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2f3f4b50595959595959594c473a2a18040000000c1f32434f5459595959595957524535220f000000000000000000000000182d42576d8297acc2d9c9a5907b71717171717171717275787f8798a0b2c0d1c9b6a5927d685336261401000000000000000000000e1c304354607484979fb4b9b9b4aaa39b97969eb0b3a1999a9faab3b8c5bab49f97826d58422d18000000000000152b40556a8095aabfc6b19c86715c3a291b22242b34383a3a38363127221b10020000000000000000000b20364b6074879db2bec6b5a49c877b726e6c6e727a84929fa8babfb2a0957f6a5d4b392816030000000000000f253a4f647a8fa4c7cdbaa98c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778ca9bacdbda8937d68533e281300000000000000000b20364b6075899eb4c6d1c0b4a59d97989da5a6927d68523a29170400000000172d42576c8297acc1c8b39e88735746321e0a00000000000c21374c61768cabbccfbea8937e69533e29140000000000000000000000000000000000091d3145566f8499aec4ccb8a78d77624d38220d0000000000000000081d3144556067676767665e4d3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f373b4444444444444437332a1c0c00000000031425323b3f444444444444423e35271705000000000000000000000000152a40556a7f95aabfd4c7b29d87868686868686868687898e949da5b2becfc9bcab9c8774604b36200b0000000000000000000000001325364556607481929ea8b4bac1b5b1acabb0bcbfb3aeafb4bbc8c0b4a99f938172604b35200b00000000000013283d53687d92a8bdc9b49e89745847331f0d0f192022242523201d150a0800000000000000000000071a2d3d53687d92a5b6cabaa89c8675655d5857595d656f7d8a9fa8babfb59f8d7b655745321e0c0000000000000d22374c62778ca9bacdc7a48f79644f3a240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a9fb4c9c0aa95806b55402b1600000000000000000f243a4f64798fa8b9cdc8b4a29a87828387939d8875604b36200b000000000014293f54697e94a9c5cab49f8a76614b36210d00000000000b20354a60758a9fb4cabfa9947f6a543f2a15000000000000000000000000000000000002152738566b8095abc0d6c5a6917b66513c261100000000000000000b20354b60737d7d7d7d7c665846331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23252f2f2f2f2f2f2f221f180c00000000000006141f27292f2f2f2f2f2f2d2a2217090000000000000000000000000012283d52677d92a7bcd2cab6a59d9b9b9b9b9b9b9b9c9d9fa9a9b2b7c3cdc5b9ab9f8d7c665645311d09000000000000000000000000081828384556606c7d8a969fa9b2b7c3c1c0c6c9cec7c4c5c7bab4aea29a8a7e72605443301c0800000000000010253b50657a90a5c9ccb9a88c76614c37210c00050b0d0f0f0d0b09020000000000000000000000000c21364a5b71869bb1c3c9b49f8a7863574b3f423f4b4f5f677b8a9fb4bebcab9d8775604b3a2a180400000000000b20354a60758a9fb4c9bca6917c67513c27120d12141514120d0b0500000000000000000000000000000000000000000000000000000000070c0e131515130f0b081c30435472879cb2c7c2ad98836d58432e18000000000000000012273c51677c91a6c6d6c5af9a84756d6e747d887e695645321d09000000000010253a4f657a8fa7b9ccbcab907b66513b2b1905000000000b20364b60758babbccfbea9937e69543e291400000000000000000000000000000000000012273c52677c91a7bcd1bfaa947f6a553f2a1500000000000000000c21364b61768b9292928d76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e101a1a1a1a1a1a1a0c0a040000000000000000030c12141a1a1a1a1a1a17150f05000000000000000000000000000010253a50657a8fa5c8d9d3c3b6b2b0b0b0b0b0b0b0b1b2b4bac7c7c8c6b9b4a79e8d7e685e4c38271502000000000000000000000000000a1a2838454b606877818a959da5a8acafb0b4bac2b6b1a9a99f9990857969605443362614010000000000000e23384d63788dabbccfc6a38e79644e39240f000000000000000000000000000000000000000000000e24394e63798ea3b5c9bcab96816b5a49392e2c2e37414d5d677d91a0b1c6b6a595806b5847331f0a0000000000071c30435472879cb2c7bea9947f69543f2a202227292b29272220180d08020000000000000000000000000000000000000000000000090f1a2124282a2a2924201d1525365a6f849aafc4c5b09a85705b372715020000000000000012283d52677d92a7bcd0baa5907b65565560687369604f3828150200000000000b21364b6075899eb3c8c9ac97816c59483420160b0802091222384d62778da2b7d6c5a7927d67523d28120000000000000000000000000000000000000f24394f64798ea4c6d7c2ad98836d58432e1800000000000000000b21364b60768ba0a7ab907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788daabbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbcbbc4b7b2ada89e97897d68604e402f1a0a0000000000000000000000000000000a1a2731424e59616c7880878e9396999b9fa9b6a49c94908a837b70635b4a4336261808000000000000000b20364b60758a9fb5cabba6917c66513c271100000000000000000000000000000000000000000002152737556a7f95aac1cab49f8b77624d3c2c1b171b22303f4d5f6d8297a8b9c3b49e8a77614c3828160200000000001325365a6f849aafc4c1ac96816c57412b35383c3e403e3c37342b201d1509000000000000000000000000000000000000000001121d242d36393d3f403e3a3531272d42576c8297acc1c8b29d88735544311d080000000000000011263b51667b90a6bbccb7a28d77624d444b535d544f42321a0a000000000000091e3245566c8197aabbc9b49f8b78624d433228201d161e21304152677d92a7bcccb9a78e79644e39240f0000000000000000000000000000000000000c21374c61778ca8b9cdc5b09b85705b38281502000000000000000b21364b60768ba0b5ab95806b5637271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000711181a2020202020202020202020202020202020202020202020201d1b150b0000000000000000000000000000000000000000000b20354b60758a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a6a4a69d98928a8177675f4e4231221200000000000000000000000000000000000a151d313a474c5a626b72797e8184858b9fb19c867f7b756e655d4e493d302518080000000000000000091d31455673889db3c8bea9937e69543e2914000000000000000000000000000000000000000000081d31445570859aafc5c5b09b85705948341e0e0008132130414c6176899eb3c7b9a896806b5645321e090000000000182d42576d8297acc2c3ae99846e59443c484d52545554514d483b363127191203000000000000000000000000000000000009141d30393d4a4e535555534f4b4437333f546a7f94a9bfcab49f8a75604b36200b000000000000000f243a4f64798fa4c8d8b8a28d78634d38353e483e3b32241400000000000000021628384e63798c9fb4c2baa998836e614b46393531283236404d5f70849aafc5c7b39e8975604b36200b0000000000000000000000000000000000000a1f33475874899eb4c9c8b29d88735645321d09000000000000000b20364b60758babbcb09a85705544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000b19242c2f3535353535353535353535353535353535353535353535353230281d0f0000000000000000000000000000000000000000081d31445572879393939393939393939393939393939292908e8b88837d766c62594d413123130400000000000000000000000000000000000002131c2a343c484d565b63686c6f71849aaf9a8570656056504c3f352c1c1308000000000000000000021527385b70859bb0c5c0ab96816b56412c160100000000000000000000000000000000000000000b20364b6075899fb4c9bfaa947f6a553b2b1800000002121f3347586a8095a9bac6b39e8975604b36210c0000000000152a3f556a7f94aabfc6b19c86715c4d525a6267696a69676259534b4437301e160b00000000000000000000000000000009192631404d515b63686a6a686460554c473a52677c92a7bccfbcab8d78634d38230e000000000000000d22374d62778caabbcebaa58f7a65503a25283329271f140600000000000000000a21364a5b6c8196a4b6c4b2a0957f6d61574f4b4438454b505e677d92a2b4c8baa997816c5544311d0800000000000000000000000000000000000004172a3a5c71879cb1c6cab59f8a75604b36200b00000000000000081d314455758a9fb5b49f8975604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000719293741444a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a48443a2d1d00000000000000000000000000000000000000000114263751667c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d7d7d7b7976736e6761584c483b302313050000000000000000000000000000000000000000000c181f2b35383d494e53575a6b8095ab9e8974604b4538382f211a0f000000000000000000000000192e43586e8398adc3c3ae99836e59442e190000000000000000000000000000000000000000000e23394e63788ea9bacdc6a58f7a65503a25100000000004172a3a4c61778a9fb4c9b8a7927d67523a2a17040000000012283d52677d92a7bcc9b39e8974585f6771787c7e807e7c77716860554d4132281b0c0000000000000000000000000001142637444b5e6671797d7f7f7e79746b61584d4f647a8fa4c7d7c9a5907a65503b2510000000000000000b20354b60758a9fb4cabca7927d67523d28131e14120c02000000000000000000071a2d3d4c6176869ca6b5beaf9d9582756b6460555c5660656e7c8b9fb4c0beb49f8b78624d37271502000000000000000000000000000000000000001a2f445a6f8499afc4cfbcab8d78634d38230e000000000000000215274a5f748a9fb4baa98f79644f3a240f00000000000000000000000000000000000000000000000000000000000000000000000000000000001124374754596060606060606060606060606060606060606060606060605d574b3a180800000000000000000000000000000000000000000924394d5e6668686868686868686868686868686868676664615858524c463a342a1d13050000000000000000000000000000000000000000000000040e1920222c36393e4152677c91a7a88e78634e3928231c110600000000000000000000000001162b41566b8096abc0c6b09b86715b39291603000000000000000000000000000000000000000011273c51667c91a6c7cdbaa88c77614c37220c00000000000c1f3447596e8398aec7c5af9a846f5847331f0a0000000010253a50657a8fa5c8ccb9a88b7662707d868d91939593918b867e74675f4b4639291c0c0000000000000000000000000a1d314455606d7c868e929495938f888076675f4c62778ca9bacdbda8927d68533d281300000000000000081d31445572879db2c7bfaa947f6a553f2a150800000000000000000000000000000f1e3346576278889ba3b4baafa09789807a75727172757b83919fa9babbb49f947f6a5a493519090000000000000000000000000000000000000002172c42576c8197acc1dac9a5907b65503b261000000000000000001e34495e73899eb3c7a8937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000000000000182c4154656f75757575757575757575757575757575757575757575757572695736251300000000000000000000000000000000000000000a1d30404d515353535353535353535353535353535352514f4c463a3d3633291f180d000000000000000000000000000000000000000000000000000000050b0f1a212329384d63788da7a7927d67523d28120900000000000000000000000000000013293e53687e93a8bdc6b39e89735746321e0a000000000000000000000000000000000000000014293e54697e93a9bec9b49f89745847331f0a000000000004182a3b51677c91a9bacab49f8b76614c37210c000000000d22384d62778daabbcec6a38e7a7884929ba3a7a9aaa9ab9f9b93877c6d6157463a291c0c000000000000000000000a1a30414b607382919ca4a8aaaaa8a69e95887d6c605974899fb4c9bfaa95806a55402b1500000000000000011426375a70859aafc5c2ac97826d57422d1800000000000000000000000000000003172939485a627885959fa8b3b1a79e958f898886878a9098a0b4bab4aa9f94816d61503c2c19000000000000000000000000000000000000000000152a3f546a7f94a9bfd2bda8927d68533d281300000000000000081d32485d72879db2c1ac97826c57422d1700000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f838a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a87725443301c070000000000000000000000000000000000000000122230393c3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3d3b3936332928211f170b0500000000000000000000000000000000000000000000000000000000000000060c0e20354a6073889ea996816c56412c170100000000000000000000000000000011263b51667b90a6b0b0b0a78b76614b36210c0000000000000000000000000000000000000000162b40556b8095aac0c7b29d88725d3a2a18040000000000000c21364b61768a9fb4c9bbaa927d68523d2813000000000b20354b60758a9fb4cabea9947f879aa2b0b5c1bbbdc9bcb5b0a59d9182756158473a2919090000000000000000021628384d5f6d8298a0b1b6c2bfbfc5b8b3a79e9281726072879cb1c7c2ad98826d58432d180000000000000000182d42586d8297adc2c4af9a846f5a362513000000000000000000000000000000000b1b2b3c485a6274808a969da6b5b3aaa99f9d9c9d9fa9aeb2bbaa9f988b7f6d635243331e0e00000000000000000000000000000000000000000012273d52677c92a7bcd1c0aa95806b55402b1600000000000000061c31465b71869bb0c5b09b85705b3b2b180500000000000000000000000000000000000000000000000000000000000000000000000000000000172c42576c81979f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8a75604a35200b000000000000000000000000000000000000000004121d242729292929292929292929292929292828282624211f17120c0a040000000000000000000000000000000000000000000000000000000000000000000000071c3043546a7f90949485705b45301b060000000000000000000000000000000e24394e63798e9b9b9b9b9b8e78634e39230e0000000000000000000000000000000000000000172c42576c8197acc1c6b19c86715c47311c000000000000000a1e32465770859aafc5c8ad98826d583c2b1905000000081d31445572889db2c7c2ae9d949da5b4b0aaa7a6a8adb4b9c3b7b29f9785766158473726140100000000000000091e324556677d92a0b2becacdc5b8b3afb0b4b39f9682736f8499afc4c5af9a85705a3727150100000000000000152b40556a8095aabfc7b19c87725443301c07000000000000000000000000000000000e1e2b3c4856606b7781889ba3b5c7bab4b2b1b2b4bac7cab49f8c82796a615245352515000000000000000000000000000000000000000000000f253a4f647a8fa4c7d8c2ad98826d58432d1800000000000000051a2f445a6f8499afc4b49e8974594834200b00000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94a9c4b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5bbaa8c77624c37220d000000000000000000000000000000000000000000000a0f111313131313131313131313131313131312110f0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000001325364f616a7b7f7f7e69533e2914000000000000000000000000000000000c21364b6175858686868686857a644f3a250f0000000000000000000000000000000000000000182d42576d8297acc2c6b09b86715b46311c0600000000000003162939556a8095aabfc7b29d87725a4834200b000000011426375a70859aafc5cbbbaea9b2ab9f9a95929193989ea8b5bcbdb1a39b8576615544311d10000000000000000b21364b6075889db3becfc7bab4a69e9a9a9ea8b4a097816c8197acc1c7b29d88725544311d080000000000000013283d52687d92a7bdc9b49f8975604a35200b00000000000000000000000000000000000e1d2b38454b59626b77869bb0c5c8bfb8b6b5b7bac1c3ae9984796d61584b3e2f2211000000000000000000000000000000000000000000000d22374d62778ca9bacec5b09a85705b3727150100000000000003182d42586d8297adc2b9a88c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667c91a6b7cbcadac9bcb5b1b1b1b1b1b1b1b1b1b1b1b1b1b1a48f79644f3a240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081832434f5d65696a69604f3b2612000000000000000000000000000000000a1e3346576171717171717171645c4b37220d0000000000000000000000000000000000000000182d43586d8298adc2c5b09b86705b46311b060000000000000011263b50667b90a5c5cab7a58d77624d38220d00000000182d43586d8298adc2d7cbbeb2a29a8c857f7c7b7d8289969fabbac1b4a39a8473604b3f2e1a0a00000000000215273752677d92a6b7cbcdbaa99f9388858589949fa99f937e7f94a9becab49f8a75604b35200b0000000000000010253b50657a90a5c9cdbaa98c77624c37220d0000000000000000000000000000000000000d1a2f404f61697d899ba3b5b8b3aaa3a0a0a2a5acb4b3a1998d8276645c4c402f1e0e0000000000000000000000000000000000000000000b20354b60758a9fb4c9c7b29d88725544311d0800000000000000162b40556b8095aac0c6a58f7a65503a2510000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075889db2bdcdcfbcab9f9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c917c67513c271200000000000000000000000000000000080d0f2020202020202020202020202020202020202020202020202020202020202012100a01000000000000000000000000000000000000000000000000000000000000000000001525323f4b505454534f42321f0c0000000000000000000000000000000003172939464b5b5b5b5b5b5b5b4f4b3e2e1b080000000000000000000000000000000000000000182d42586d8297adc2c6b09b86715b46311c06000000000000000d22374d62778ca7b8ccc3a6917c66513c261100000000162b40556b8095aac0d5c5b2a0988479706a6766686d76818d9fa9bac1b3a296806b5d4b3827150200000000081d3144556f849aafc4d2c2b49f8b7e746f70757f8b9da69f8b8095aac0cebbaa8d78624d38230d000000000000000d23384d62788dabbccfc7a48f79644f3a240f0000000000000000000000000000000000031628384c5e697f919ea7b5b4a79e948e8b8a8c90979fa9b3ab9f97887a665e4c3c2c19060000000000000000000000000000000000000000081c30435472879db2c7cab49f8a75604b35200b0000000000000013283e53687d93a8bdbda8927d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556667c919fb0c0cab59f8d868787878787878787878787878787867d67523d2812000000000000000000000000000002101b22253535353535353535353535353535353535353535353535353535353535353527251d13050000000000000000000000000000000000000000000000000000000000000000000715212f383b3f3f3e3b3224140200000000000000000000000000000000000b1b293336464646464646463a372e2010000000000000000000000000000000000000000000172d42576c8297acc1c6b19c86715c47311c07000000000000000b2034485973899eb3c8bfa9947f6a543f2a150000000013283d53687d92a8bdd2c2ad988273635b5552515358616c7d8b9fabbcc0b59f8d7b655645311d0a000000000b20364b60758a9fb4c9c9b5a3927d6860555760697a889da79e899eb4c9d9c8a58f7a65503a2510000000000000000b20364b60758a9fb4cabca7917c67523c27120000000000000000000000000000000000091e324556667c919db3b9b4a39b897f797675777b828a9aa2b3b5a69e8b7c665b493521120100000000000000000000000000000000000000011426365a6f859aafc4cebbaa8d78624d38230d0000000000000011263b50667b90a5bbc0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000021628384d5e6c8196a2b4c3bcab937e727272727272727272727272727272675f4d3a2510000000000000000000000000000010202e373a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c393023130100000000000000000000000000000000000000000000000000000000000000000003111c23252a2a29261f1406000000000000000000000000000000000000000b171e213131313131313125221b1002000000000000000000000000000000000000000000172c41566c8196abc1c7b19c87725c47321d000000000000000005192b3b5c71869bb1c6c2ad97826d58422d180300000010263b50657b90a5c9dab6a18c7661554a3d3d3c3a464c5f677c8d9fb4c1bcab9c8674604b382816020000000f24394f64798ea9bacdc6b19b8673604b44454b5c6479899ea89ea8b9cdd2bda7927d68523d281300000000000000081d31445573889db2c8bea9947f69543f2a1400000000000000000000000000000000000b21364b6075889db3bbb8a69b85776a63616062656c78849aa1b3b8a99e8979634d41301d0a0000000000000000000000000000000000000000182d42586d8297adc2d9c8a58f7a65503a2510000000000000000e23394e63788ea3c5c2ad98826d58432d1800000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a30404b6073849aa5b7c7b49f8b7b65595c5c5c5c5c5c5c5c5c5c5c5c524d41311e0a00000000000000000000000000081b2e3e4b4f60606060606060606060606060606060606060606060606060606060606060524d41301d0a0000000000000000000000000000000000000000000000000000000000000000000000080e10141514120c02000000000000000000000000000000000000000000030a0c1c1c1c1c1c1c1c0f0d080000000000000000000000000000000000000000000000162b40566b8095abc0c8b39d88735e382815020000000000000000192f44596e8499aec3c5b09a85705b45301b000000000e23384d63788dabbccfb8a38e79634e372d27262933404d5e6a7f94a3b5c9b6a4947e695645321e0900000012283d52677d92a7c7d7bfa9947f6a544331323e4a5b657b8d9fb4b9c6d7d4bfaa957f6a55402a1500000000000000021527375b70859ab0c5c1ac97816c57422c17020000000000000000000000000000000115273753687e93a6b7c8b39d887661584e4b4b4d505a6274839aa6b8b9a79b85705f4d39250e0000000000000000000000000000000000000000152b40556a8095aabfd2bda7927d68523d2813000000000000000b21364b60768ba6b8c5af9a85705a372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000121d3144556177879da9babbaa9d8878625645474747474747474747473d3a31231301000000000000000000000000000d22374b5c6475757575757575757575757575757575757575757575757575757575757575675f4d3925100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94a9bec9b49f89745645321d090000000000000002172c42576c8197acc1c7b19c87725c372715020000000b20364b60758a9fb5cabba6917b66513c261211171f30404b6073859bb0c0c2b39d8875604b36211000000014293e54697e93a9becfbaa58f7a655036251e2d3d4c5e6c8196a5b7cbdfd7c2ad97826d58422d180000000000000000182e43586d8398adc2c4ae99846f59442f1a00000000000000000000000000000000081d31445570859aafc4c5a9937e6958473a3635373c49566176889eb3c5b4a3917c67523c2b19060000000000000000000000000000000000000013283d52687d92a7bdd2bfaa957f6a55402a1500000000000000091e32455673889eb3c7b29d88725544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374759647a8b9fb4bdb8a69b8574604b4232323232323232323228251e130500000000000000000000000000000f253a4f647a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523c27120000000000000000000000000000000000060c0e111416161614110d0b060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191b202020202016130d040000000000000000000000000013283d52687d92a7bdcdbaa98b75604b36200b0000000000000000162b40556b8095aac0c9b39e89745544311d08000000091d32455673889db3c8bea8937e69533e29140004121d314455657a8fa2b3c7b7a6937e69533e2d1b070000152a40556a7f95aabfccb7a28c77624d3722101f2f404b6175879db2c2d3dac4af9a856f5a3626140100000000000000162b40556b8095aac0c6b19c86715c3a2917040000000000000000000000000000000b20354b60758a9fb4c9b8a78c77624d3a2a2120222c384758687e93a8b9c1b09b85705a4935200b0000000000000000000000000000000000000010253b50657a90a5c9d9c2ad97826d58422d1800000000000000031628385b71869bb0c6b49f8a75604b35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3b4a5c687d929fb0c0b5a397826d604f3f2e1d1d1d1d1d1d1d12100a010000000000000000000000000000000d22374c62778ca89f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f947f69543f2a140000000000000000000000000000060c0e192023272a2b2c2b2926232019100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a262e3135353535352b2821150700000000000000000000000011263b50667b90a5c8d7c7a28d78624d38230d0000000000000000142a3f54697f94a9beccb9a78b75604b36200b000000021528385b70859bb0c5c0ab96806b56412b160100011426374b5d6f849aafc4c4b19c86715c4a36220d0000162b40556b8095aac0cbb5a08b76604b36210b111e324657687d92a4b6cadcc7b29d87725443301c080000000000000013283e53687d93a8bdc9b49e89745847331f0f0f0f0f0e0c060000000000000000000e23384d63788da9bac8b39e88735948341c0c0b0e1a2a3a4b6176899eb4c9b4a28d78624d38230d000000000000000000000000000000000000000d23384d62788dabbccfc4af9a856f5a3626140100000000000000192e43596e8398aec3bbaa8d77624d38220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d2d3e4e5f6c8196a2b4c1b1a0937e695d4b3c2b1a0a00070707000000000000000000000000000000000000000b1f34475974899eb4b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5ac97816c57422c17020000000000000000000000060f1a21232c35383c3f4041403e3c38352b25231c11070000000000000000000000000000000000000000000000000000000000000000000000000000091a2b3842464a4a4a4a4a403d3326150400000000000000000000000e23394e63788eaabbcebaa58f7a65503a2510000000000000000013283d53687d92a8bdd6c5a18c76614c37210c00000000192e43586e8398adc3c3ae98836e59432e1900000009192e3f51667c91a6b8c9b5a48e79644e39240f0000152a3f546a7f94a9bfcab5a08a75604b35200b031628394b6073869cb1c5d6c9b49f8a75604b35200b0000000000010f1a263b50667b90a5c9ccb9a88c76614c3725252525252320190e00000000000000000f243a4f64798fa4c7c6b19c87715c3b2b180000000c1e3346576f8499afc4c0a7927d68523d2813000000000000000000000000000000000000000b20364b60758a9fb4cac7b29d87725443301c0800000000000001162c41566b8196abc0c8a58f7a65503a25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102031414b6073849aa5b7beb49f8c7b655a48382816020000000000000000000000000000000000000000000005182a3b596f8499aabbc9d8cad7c6bab4bac6c1c4c6c7c7c7c7c7c7c7c7c7c7c7c7c4ae99846f59442f1a04000000000000000000010f1a212c35383c494d515455565554514d493c3a372e201c130800000000000000000000000000000000000000000000000000000000000000000000000013263849555b606060606055504433210d00000000000000000000000b20364b60758a9fb4cabca7927d67523d2812000000000000000012283d52677d92a7bcccb7a18c77624c37220d00000001162b41566b8096abc0c5b09b86705b382816020000001120354b6074889eb3c8c2ab96806b563a2a17040013293e53687e93a8bdcbb5a08b76604b36210b000b1d314455687e93a7b9cccebbaa8d77624d38220d0000000006141f2d36394e63788dabbccfc6a38e79644e3a3a3a3a3a3a38352c1e0e000000000000000f243a4f64798fa4c8c7b29c87725d3b2b1805000003172939556a7f95aabfc1ac96816c57412c1700000000000000000000000000000000000000081d31445573889db2c8c9b49f8a75604b35200b0000000000000014293e53697e93a8bebca7927d67523d2812000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002131d3144556177879da9babbaa9e8878625645321e1403000000000000000000000000000000000000000000000f243a4f647a8c9fabbbc8d8cdbaa89fa8a7acafb1b2b2b2b2b2b2b2b2b2b2b2b2b2b09b86705b46311b06000000000000000008141c2c353d494e565a6366696b6b6b6966625a57504b3f353025180f0100000000000000000000000000000000000000000000000000000000000000000004192e4255677075757575756b62503d28130000000000000000000000091d32455672879db2c7c0ab95806b56402b16000000000000000012273c52677c91a7bcccb7a28d77624d38220d0000000013293e53687e93a8bdc8b39d88735645321e09000000081d3144556d8297adc2c6b19b86715847331f0a0011263b50667b90a5c5d5b7a28c77624d37220d00011426374b6075899eb3c9d8c8a48f7a654f3a2510000000021424313d4a4e4f60768a9fb5cabba6917c66514f4f4f4f4f4f4d493c2c19060000000000000e23384e63788daabbc8b39e8973594834200b00000013283d53687d92a8bdc3ae99836e59442e1900000000000000000000000000000000000000021527375b70859bb0c5cebbaa8c77624d37220d0000000000000011263c51667b91a6bbbfaa947f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374759647a8b9fb4bdb8a69b8574604b42322111000000000000000000000000000000000000000000000d22364a5c677d8d9faabbc8c9b49f8a8f9296999b9c9c9c9c9c9c9c9c9c9c9c9c9c9c98836e58432e1903000000000000000b1826303d494e5b636b72787c7f8081807e7b78726c655d524a43362d1f14010000000000000000000000000000000000000000000000000000000000000000061b31465b70858a8a8a8a8a806b55402b16000000000000000000000002152838596e8499aec3c4ae99846f593d2c1a060000000000000012273c51677c91a6bccdb8a28d78634d38230e0000000011263b51667b90a6bbcbb8a68b75604b36210b0000000114263751677c91a6c5cab59f8b77614c37210c000d23384d62788da7b8ccb9a48f7a644f3a250f0000091e3245576c8196acc4d4bca7927d67523d28120000000b1f31424e5b63646473889db3c8bea9937e6964646464646464635a4935200c0000000000000b20364b60758a9fb4cab8a78c77624d37221000000012273c51677c91a6bcc5af9a85705a45301b0000000000000000000000000000000000000000182e43586d8398adc2d8c8a48f7a654f3a2510000000000000000e24394e63798ea3c5c2ac97826d57422d180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3b4a5c687d929fb0c0b5a397826d604f3f2e1e0e000000000000000000000000000000000000000000071b2d3e4d5f677d8c9faabac7b19c877a7c81848687878787878787878787878787878377624d37220d000000000000000b1b2936434b5b636e7981878d919495969593918d88817a716760544a3d321c14080000000000000000000000000000000000000000000000000000000000000003192e43586e83989f9f9f98826d58432d18000000000000000000000000152a3f546a7f94a9c7c8b39d88735b4935210c0000000000000011273c51667c91a6bbcdb7a28d78624d38230d000000000e23394e63788ea3c5d5c4a5907b6550392917030000000d22384d62788da7b8ccbcab907b66513b2611000b20354a6074889eb3c8bda8937e68533626140100031628394f657a8fa6b7cbbfaa947f6a553f2a1500000011263b4e6069797a7a7a869cb1c7c2ad98827a7a7a7a7a7a7a7a78634d38230e000000000000091d31455671869bb0c6c5a7917c67523f2e1c0d050313283d52687d92a7bdc4af9a856f5a45301a0000000000000000000000000000000000000001162b40566b8095abc0d2bca7927d67523d2812000000000000000c21364c61768ba7b9c4af9a846f5a36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d2d3e4e5f6c8196a2b4c1b1a0937e695d4b3c2b1a0a000000000000000000000000000000000000000000102030414d5f677d8c9fa9bab5a49c86776c6f7172727272727272727272727272726e62594834200b0000000000000b1b29394654606a79838d969da5a6a9aaabaaa9a6a59d978f867d72645c4f423026180800000000000000000000000000000000000000000000000000000000000001162b41566b8096abb5b09a85705b37271501000000000000000000000010253a4f657a8fa9bacbb7a68d78634e38230e0000000000000012273c52677c91a7bcd7c7a28c77624d37220d000000000c21364b61768ba7b8ccc2ad98826d5746331e0a0000000b2035485a73899eb3c8c9a9947f69543f2a1400071c3043546e8399aec7c2ad98826d5443301c0800000b20354a6074889db2c8c2ac97826d57422d1800000014293e53697e8e8f8f8f9ca4b6cac6b2a0988f8f8f8f8f8f8f8f836f59442f1a00000000000002152738566b8095abbec4af9a846f5d4b3a2b1f18161e2f40566b8096abc0c2ad98836d58432e18000000000000000000000000000000000000000013293e53687e93a8bdd3bfaa947f6a553f2a15000000000000000a1f33465874899eb3c7b19c87725443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102031414b6073849aa5b7beb49f8c7b655a4838281602000000000000000000000000000000000000000002132330414d5e667c8b9fa9b9b5a49c8678625a5d5d5d5d5d5d5d5d5d5d5d5d5d5c584d483b2b1805000000000003172939465761727f8b99a1abb2b6c3bec0c0c0bec3b7b2aca49c92857969604b433626140100000000000000000000000000000000000000000000000000000000000013293e53687e93a8bdb29d88725544311d0800000000000000000000000b21364b60758a9fb4c9c4a8937e68533929170300000000000013283e53687d93a8bdcdbaa98b76614b36210c000000000a1e32465773899eb3c8c9b49f8a76614b38281602000005192b3c5b71869bb0c6c2ac97826d57422d18000013253653687d93a9bac8b39e8874604b3520100000071c3043546d8398adc2c4af9a846f5a362513000000162b40566b8095a4a4a4b1b6c2d3cfbeb2ada4a4a4a4a4a4a49c86715c392917030000000000000e23384e63798da0b2c6b59f8d7a6458483b342a28323d4c5e71869cb1c6c5aa95806b55402b16000000000000000000000000000000000000000011263b50667b90a5bbd0c2ac97826d57422d18000000000000000417293a5c71869bb1c6b49f8975604a35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002131d3144556177879da9babbaa9e8878625645321e1403000000000000000000000000000000000000000005132330404d5e667c8b9ea8b9b6a49c8778625a493c47474747474747474747474337342b1d0d0000000000000a1e334657617583949fa9b3bfc7c8bbb4b1aeadafb1b4bbc2b5b1a39b8b7e6c605443301c1502000000000000000000000000000000000000000000000000000000000011263b51667b90a6bbb49f8a75604b35200b0000000000000000000000091e3245566e8399aec7c4ae99846f5746331e0a000000000000152a3f546a7f94a9bfc9b49f89745746331e0a00000000031629395b71869bb0c6cdbaa8947f695645321e0d000000192e44596e8399aec3c4af9a846f5a452f1a00000c21374c61768a9fb4c9b8a6907b66513e2d18080000132536566b8095abc0c7b29c87725443301c07000014293e53697e93a8b2b4bbc8c8d1dccfc6c2b9b9b9b9b9b9b39e89745746331e0a0000000000000c2135495b6d8298a8babcab9c867662594c473b39454b5b667c91a4b5c9b8a68f7a654f3a251000000000000000000000000000000000000000000e23394e63788ea3c5d5c4af9a846f5a3625130000000000000000192f44596e8499aec3baa98c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011527374759647a8b9fb4bdb8a69b8574604b4232211100000000000000000000000000000000000000000005132230404c5e667b8a9ea8b9b6a59d8778635a493d2c3232323232323232322e2220180d000000000000000c21364c61768599a1b4bac7c2b5b1aa9f9b99989a9c9faab1b5c1b4a99f938172604b4332201000000000000000000000000000000000000000000000000000000000000e23394e63788ea3c5bbaa8d78624d38230d00000000000000000000000216283852687d92a9bac9b49f8a76614c362112000000000001142636576c8197acc1c7b29d87725d392917030000000000192e44596e8399aec3d7c6b39d8875604b3b2a18050003182d43586d8298adc2c5b09b85705b46301b00000a1f3347586e8398aec0c5af9a846f5c4a362513000013283e53687d93a8bdc9b49f8a75604a35200b000011263c51667c91999c9faab0b4c0d1cbbbaea9a4a4a4a4a4a4a78b76614b36210c000000000000061a2c3d4d62788a9fb4bdb6a49b85776962595a5957606879889eb3c2c3b39e8874604b35200b00000000000000000000000000000000000000000c21364b61768ba7b8ccc7b29c87725443301c0700000000000002172c41576c8196acc1c7a48f79644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192a3a4a5c677d929fb0c0b5a398826d604f3f2e1e0e0000000000000000000000000000000000000000000412222f404c5d657b8a9ea7b8b6a59d8778635b493d2d1f1d1d1d1d1d1d1d190d0b0500000000000000000d22374c6277889da8bac6b9b4a49c928b86848385878a929ca4b4babab49f96816c614f3e2e1909000000000000000000000000000000000000000000000000000000000c21364b61768ba7b8c8a58f7a65503a25100000000000000000000000000c21374c61768a9fb4c9baa9937e6853402f190900000000081c3043546f849aafc4c4af99846f5a442f1a000000000001172c41566c8196abc1d6cbb7a6947e695948341f130102182d42576d8297acc2c6b19c87715c47321c00000417293a4f647a8fa2b4c9b4a28e79645443301c0f0110263b50657b90a5c9cdbaa98c77624c37220d00000d22374d62778084878a8e9aa2b4c8c2ae9d948e8e8e8e8e8e8e8e79634e39230e000000000000000f2034485a697f949fb1bfb5a39b897f77716f6e70757e899ea6b8c6b6a5947f695544311d080000000000000000000000000000000000000000091e32465773889eb3c8c9b49f8a75604a35200b0000000000000014293f54697e94a9bebca7917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3e4d5f6c8196a2b4c1b2a0937e695d4b3c2b1a0a0000000000000000000000000000000000000000000412222f3f4b5d657a899ea7b8b7a59d8879635b4a3d2d201002080808070300000000000000000000000b20344859647a8a9fabb3a89e93867d76716f6e6f71777d86949fa9babdb19f947f695c4b372715010000000000000000000000060b0d0f0f0f0f0f0f0f0f0f0f0f0f0f0f1e32465773889eb3bda7927d68523d28130c0a030000000000000000000a1f3347586d8298adc0c7b19b86715e4c372715020000000b20354b6074899eb3c8c9ab96816b56412c1601000000000014293e54697e93a9bed3d5c4b39e8977624c41301f0f00182e43586d8398adc2c6b19c87715c47321c0000000c22374b5c6f849aabbcc0af9a8472604a3d2c1f0f0e23384d63788dabbccfc7a48f7a644f3a250f00000b20344859626b6f727579849ab0c5bea9947f797979797979797a75614b36210c0000000000000005192b3c4f616c8197a0b4bbb5a89e948b868483858a939ea7b8c4b9a89d8774604b372614010000000000000000000000000000000000000000031628395b71869bb0c6cdbaa98c77624c37220d0000000000000012273c51677c91a6bcbda9947f69543f2a14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102031414b6073849aa5b7beb49f8c7b655a48382816030000000000000000000000000000000000000000000311212e3f4b5c647a899ea6b7b7a69d8879635b4a3e2d20100200000000000000000000000000000005182b3b4a5c677d8d9ea19a8a7e7368615759585a586168747f8b9fa9babdb49f8c7a645544311d09000000000000000000000e19202324242424242424242424242424242428395b71869bb0bfaa957f6a55402a24211e160b00000000000000000417293a4f657a8fa2b4c8b5a3907c665544311d120400031628394f647a8fa7b8ccbcab917c67513c271200000000000011273c51667c91a6bbd1daccb9a898826d5f4d3d2d1e111a2c3d5a6f849aafc4c5b09b85705b46301b000000071b2e3e4e64798c9fb4c3b4a2937e695b493d2c1c1420364b60758a9fb4cabca7927c67523d2712000005182b3b484d56595660697f94a9c4bea8937e6964646464646464615746321e0a00000000000000000d1d32434b607382949faab5b9b3ab9f9b99989a9fa9b3b8c2b6a89e8a7963564532190900000000000000000000000000000000000000000000192e44596e8399aec3d7c7a48f7a644f3a250f000000000000000f24394f64798ea4a8a8a896816c57412c1700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002131d3144556177879da9babbaa9e8978625645321e14030000000000000000000000000000000000000000000311212e3e4b5c6479889da6b7b7a69d8879645c4a3e2e2010030000000000000000000000000000000d1d2d3e4d5f677d898c84786860544c4639433a474c5560697c8b9fb4bfbbaa9c8673604b372715010000000000000009171e2b35383939393939393939393939393939393944596e8399aec2ad97826d584239393632291b0e00000000000000000c22374b5d70859ab0bfc1b19c8674604b402f1f170f111e3245576b8095abc5cab59f8b77624c37220d0000000000000f24394e64798ea3c6d6c9bcb5afa0927d675b4a3c2e202135495b73889db2c8c4af9a846f5a452f1a000000001021364a5c6c8197a4b6c0b49f8a79635b493d30261d31455673889db2c8bfa9947f6a543f2a150000000d1d2b34374138454e63798ea6b7c0ab96816b564f4f4f4f4f4f4b4639291603000000000000000000141d31445560727f8c9ba3b0b4bcb4b1afaeb0b4bac3b7b2a49c8a7c655b4a3828150000000000000000000000000000000000000000000001162c41566b8196abbdbdbca7917c67523c2712000000000000000c22374c61778c9393939393846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0e0e0e0e0e1527374759647a8b9fb4bdb8a79b8575604b43322111000000000000000000000000000000000000000000000310202e3e4a5b6379889da6b7b8a69e897a645c4b3e2e211002000000000000000000000000000000102030414d5f6774776f625a4b433633292e2a3337444b5e677d92a1b3c8b5a4937e685544311d08000000000000001727343c494d4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e566b8196abc0af9a856f5a4e4e4e4b46392c1e0e00000000000000081b2e3f50657b8fa1b3c6b5a4957f6a5e4c40332a25252f3e4b6075889eb3c8c7b09b85705947341f0b0000000000000c21374c61768ca8b9ccbcab9f9aa29e8a79635a4b3f35313e4e63798ea6b7cbc2ad97826d58422d1800000000071a2d3e4b6175869ca8babaa89d8879635b4b43362f27385b70859ab0c5c1ac97826c57422d17020000000d1820222b27364a5b73889db3c3ae99836e594439393939393632291b0b00000000000000000000011426374454606a7b85909ba3a8adb0b2b3b3b1afaaa59d938679655e4c3d2d1a0a000000000000000000000000000000000000000000000014293e54697e93a8a8a8a8a8947f6a543f2a15000000000000000a1f344759687e7e7e7e7e7e7c66513c2711000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d20232323232323232a3a4a5c677d929fb0c0b5a398826d614f3f2f1e0e000000000000000000000000000000000000000000000210202d3d4a5b6379879da5b6b8a79e897a645c4b3f2e211002000000000000000000000000000002122331414d556061584d493c30261e1719171f2731404d5f6e8399aabbc2b29d8774604b35200b0000000000000a1b3445525a62646464646464646464646464646464646464697e93a9beb29d8772646464636157493c2c1906000000000000001023374b5d6e8399a8b9c2b49f8d7c665e4c473a3a3a3f4b5c697f94a6b8cbbaa9937e69543b2a18050000000000000a1f33475874899eb4c9b59f8d859aa89d8878655d4d48444b5c6b8196abc4d4c4a8937e69533e291400000000000f1e324657647a8a9fabbcb7a69d88796960544c3f3d43586d8298adc2c4af99846f5a442f1a0000000000050b0d161a2d3d586d8298adc9b09b86715b392924242424211e160b00000000000000000000000009192636434a5d65717c858d93989b9d9e9d9c9a958f877d74635b4c402f1f0f00000000000000000000000000000000000000000000000011273c51667c91939393939393816c57422c170000000000000004182a3a4e60686868686868665e4d39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192731363838383838383838383e4d5f6c8196a2b4c1b2a0947f695d4b3c2b1a0a0000000000000000000000000000000000000000000002101f2d3d495b6378879ca5b6b8a79e897a655d4b3f2e20100200000000000000000000000000000513233137444b4c473a352b1c140803000409151d30414d62788c9fb4cab7a5917c675138271502000000000316283952636c78797979797979797979797979797979797979797f94a9beb49f8b7a7979797975635b4935210c00000000000000081c2e3f4d6278899eb3bdbcab9f8b7c6c6158524f4f525d657a8b9fb4c4c5b49f8a76614c37210d0000000000000004172a3a5c71869cb1c6bcab8e798a9ea69d887b6c625a5560677a8b9fb4c9cbb8a68f7a654f3a25100000000000031628394a5c667c8d9fabbab7a69d8a7f73655d565250556a8095aabfc7b19c87725c3b2a1804000000000000000012283d52677d92abbcb39e89735746331e0f0f0f0c0a030000000000000000000000000000091825303f4b505e6670787e82868889888684807a74686055493d2f2111010000000000000000000000000000000000000000000000000d22374c62777e7e7e7e7e7e7e7c65503b261000000000000000000c1c31424e535353535353514d40301d0900000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737444b4d4d4d4d4d4d4d4d4d4d4d4d6073849aa5b7beb49f8c7b655a483828150200000000000000000000000000000000000000000000010f1f2c3c495a6278879ca4b5b8a79e8a7b655d4b3f2e201002000000000000000000000000000005131926313537332a20190e01000000000001132035485a6e8399aec9c3ae99836e5645311d0900000000091e3245576c818d8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e949daec2bbaa9f8e8e8e8e8e8979634d38230e00000000000000001120344859677d929fb0bebaa99f8d81776d676464676f7b889ea9baccb9a796816c5847331f0a00000000000000001a2f44596f8499aec4b7a28d787d919ea69d8c81787271757d899ea9bacdc7b39e8874604b35200b0000000000000b1b2d3e4d5e687e8d9fa9b7b7a99f94857b726c676564687d92a8bdc9b49f89745947341f0b00000000000000000d22374c62778b9fb5b8a78b76614b36210c000000000000000000000000000000000000000008131c2e37404c515a62686d70737373716f6a6460554b44372c1f1103000000000000000000000000000000000000000000000000000b1f3447596268686868686868655e4c38230e0000000000000000001424313a3e3e3e3e3e3e3c3930221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445560636363636363636363636363636377879dabbcbbaa9e8978625645321d0b0000000000000000000000000000000000000000000000010f1e2c3c495a6277869ca4b5b9a89e8a7b655d4b3e2e20100100000000000000000000000000000009141d20221f180c06000000000000000005192b3c51667c91abbcc9b49f8a75604b36200b000000000b21364b60758b9fa3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a9aebbcbc8bbb4a3a3a3a3a7947f6a553f2a15000000000000000005192b3b4d5f6c8196a0b2bebaab9f9689827d7a7a7d848c9ea6b8c7bdb39e8977614c3a2917040000000000000002172c42576c8197acc1b9a38e796b80959faa9f968c888689929ea7b8c7cdbaa996816c5544311d0800000000000000102030404e60687d8b9da6b2bab4a39b9087817d7a797a7f95aabfcdbaa98c77614c37220c00000000000000000b1f34475971869cb1c5a38e79634e39240e00000000000000000000000000000000000000000000111c232f383c494d53585b5d5e5e5c5a554f4b44373127190f01000000000000000000000000000000000000000000000000000005182a3b474c53535353535353504c402f1c0900000000000000000006141f2628292929292927241d1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60737878787878787878787878787878787c8a9fb4c8b8a79b8574604b392916030000000000000000000000000000000000000000000000000e1e2b3c48596277869ba3b5b9a89e8a7b645c4b3e2e1f0f0000000000000000000000000000000001080b0c0a0400000000000000000000000e21374c61778b9fb5cabaa98f7a654f3a2510000000000d23384d62788dabbcb9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9bec5c9d2d8cec9b9b9b9c5ac97826c57422d170000000000000000000d1d30414b60738298a0b4bbbcb5a89e97928f8f92999fabb8c4beb19f927d685947341c0c000000000000000000142a3f54697f94a9bebaa58f7a656c81969eb4ab9f9d9b9ea7b3b8c5cfbfb49f8a78634d372715010000000000000002122231424e5f677a8898a0b0b5b4b0a59d9692908f8f959eafc3d7c7a48f79644f3a240f000000000000000005182a3b566b8096abc5a6917b66513c2611000000000000000000000000000000000000000000000008121d242c35383e43464849484745403a3531261d150900000000000000000000000000000000000000000000000000000000000d1d2a34373e3e3e3e3e3e3e3b382f21110000000000000000000000020b11131313131313110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778c8d8d8d8d8d8d8d8d8d8d8d8d8d8d919fabbccfc5b5a395806a5746321e0a000000000000000000000000000000000000000000000000000e1d2b3b48596276859ba4b5b9a89e8a7b645c4b3d2d1e0e00000000000000000000000000000000000000000000000000000000000000000a1f33475872879cb1c7c7a9937e69543e2914000000000f24394f64798ea4c5d5d1c1b4b0ababababababababababababababb0b5c1d2c4b7b2abababab99846f5a442f1a00000000000000000000131d314455607382949faab4c0b9b4ada7a4a4a7aeb4bcc9bcb4a097816d604e3b2a180000000000000000000012273c52677c91a7bcc7a6917b66636c80929fa8b5b2b0b3b9c5ccc9bcb5a195806a5a4935190900000000000000000004132331414d5c647682909ba3afb4b6b2aba7a5a4a4aaafbcc8c5c5a7917c67523c271200000000000000000010263b50657b90a7b3a8937e69533e291400000000000000000000000000000000000000000000000000090e192023292d31333433312f2b25201d140902000000000000000000000000000000000000000000000000000000000000000d181f222929292929292926231c110300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899fa2a2a2a2a2a2a2a2a2a2a2a2a2a7b4bcc9d9d2c1b49f8a76614b36210c00000000000000000000000000000000000000000000000000000d1d2b3b47586176869ca4b5b9a89e8a7a645b4a3c2b1b0b0000000000000000000000000000000000000000000000000000000000000004172a3a5a6f849aafc4c1ab96816c56412c170100000010263b50657b90a7b8c8c8b4a39b96969696969696969696969696969ba3b5c9b7a69d969696969686715c47321c00000000000000000000011426374455606d7f8c9aa2afb4bcc9bcb9b9bcc4c9bcb5ab9f958273604b41311d0c000000000000000000000f243a4f64798fa4b0b0a9917c6651626b7d8a99a1acb2b7c4c6b9b4ab9f978373604b3c2c190000000000000000000000051323303e4b58616d7b8591999fabadb1b4bbc8b9b8c5b8b3afaba7947f69543f2a140000000000000000000b21364b6075899d9e9e96816b56412c16010000000000000000000000000000000000000000000000000000060c0d13181b1e1e1e1c1a150f0b080100000000000000000000000000000000000000000000000000000000000000000000050b0d13131313131313100e090000000000000000000c151b1e202020202020201e0802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c72879cb1b8b8b8b8b8b8b8b8b8b8b8b8bcc4c4c4c4c4c4baa88f7a65503a25100000000000000000000000000000000000000000000000000000000d1d2a3a47586176869ca5b6b9a89e8979635a483929160300000000000000000000000000000000000000000000000000000000000000192e43586e8398adc3c3ae98836e59432e19040000000d22374d6278889eaabbc5b09b858081818181818181818181818181859bb0c5b29d888081818181806a55402b15000000000000000000000009192637444b6169798590999fabacb0b2b3b3b1aeab9f998c807360554431231300000000000000000000000d22374c62778c9a9a9a988b78624d515f6778838e979da6a4a4a89e988d8174605544311e0e0000000000000000000000000513202e3a474c5d65727c848b92989c9faaa3a4a3a2a69e9a9690897d68523d2813000000000000000000091e324556667d88898989826d58432d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1d29303335353535353535331d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f8499aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaea8927d68533d2813000000000000000000000000000000000000000000000000000000000d1c2a3a47586277879da6b8b9a79d8878625746321e1300000000000000000000000000000000000000000000000000000000000002182d42576d8297acc2c4af99846f5a442f1a050000000b20344859657b8c9fb4bdb39e89786b6b6b6b6b6b6b6b6b6b6b6b6b7e94a9beb19c87726b6b6b6b6a61503c281300000000000000000000000009192631434f5b63707b848b92979b9d9e9e9c99948c847a6b6055443727150500000000000000000000000b20354a607284858585837b655948414d5a626f7982888d8f8f8d89837a6c605645372715000000000000000000000000000002101c2a333f4c5460666f777d83878a8d8e8f8e8d8b8885807b7468604e3a2511000000000000000000021628384d5e66737474746d64523f2b160100000000000000000000000000000000000000000000090f111312100f0b090300000000000000000000000000000000000000000000090f11202020202020200d0b050000000000000000030a0c191f20202020201f0d0b05000000000000000c1d2d3b44484a4a4a4a4a4a4a483127190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c82979999999999999999999999999999999999999999999995806b56402b1600000000000000000000000000000000000000000000000000000000000c1c2a3a48596278889da9bab7a69c8675614b42311d0c000000000000000000000000000000000000000405000000000000000004182a3a596e8399aec3c4af9a846f5a452f1a0500000005192b3b4b5d697e939fb1b9a89c86756156565656565656565656677c91a6bcb49f89756056565655504333210d0000000000000000000000000009141d323d4a4e5e666f777d828587898887847f786f645c4b4437271909000000000000000000000000071c30435460707070706e655d4b3b313c484d5c646d7377797a78756e655d4b4538271909000000000000000000000000000000000c171f2f36434a515962686e727577787979787673706b6660564e41311e0b000000000000000000000a1a30404d515d5e5e5e58524635231000000000000000000000000000000000000000000004121d242628272624211e160b0903000000000000000000000000000000000004121d2426353535353535352220190e0000000000000b171e212f34353535353534221f180d00000000000015293b4c585d6060606060605f5d443727150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677d8484848484848484848484848484848484848484848484847f69543f29140000000000000000000000000000000000000000000000000000000000000c1c2b3b495a647a8b9fb4beb6a498826d604e3b2a18040000000000000000000000000000050b0d13191b140e0b08010000040e1f33475871869cb1c6c3ad98836e58432e1903000000000d1d2e3f4f606d8197a3b4b6a498836e614f3f4141414141414f64798ea4c6baa98c77624c4141403c33251504000000000000000000000000000001141f2d36404c505961686c70727373726e69635a4f4a3e312619090000000000000000000000000000132536434a5a5b5b5b59504b3f2f1e2b353e4a4e575a6264646260564f4b3f31271a0a0000000000000000000000000000000000000411182530353b484d53585660626364636260575a56514b4538312313010000000000000000000000122230393c48494949433f3527170600000000000000000000000000000000000000000012222f383c3d3d3b39363228211e160a0000000000000000000000000000000012222f383b4a4a4a4a4a4a4a4a352b1e0e000000000b1b293336444a4a4a4a4a4a4937342a1d0d00000000001b3044586a73757575757575756f5544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f676f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f69614f3b2712000000000000000000000000000000000000000000000000000000000000000d1d2c3c4b5c677d92a0b2c2b2a0927d685947341f0f000000000000000000000000050d182022282f302924201c141817171f2c3c4c61778c9fb5cac1ac96816c57412c17020000000000112132424b6074859ba6b7b2a0947f6a5d4c3c2b2c2c2c374c61778ca8bac7a48f7a644f3a2c2b2821150700000000000000000000000000000000010f1a212f383a474c52575b5d5e5e5c59544d493c362d1d1409000000000000000000000000000000081825303545454545433b372f211119202d36393c484d4f4f4d4b4538372e1d150a00000000000000000000000000000000000000000008131c202b34373d38454b4d4e4f4e4d4b4539413b3631271a130500000000000000000000000004121d2427333434342d2b231709000000000000000000000000000000000000000000091d2f404c515352504e4b45383632281a130000000000000000000000000000091d2f404c51606060606060605e483c2b1905000003172939464b595f60606060605f4c483b2a1805000000001e33485d73888a8a8a8a8a8a8d74604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e30414d52595959595959595959595959595959595959595959595959544f43321f0c00000000000000000000000000000000000000000000000000000000000000000e1e2e3e4d5f6d8298a6b7beb39e8977614c3d2c1a06000000000000000000000d181f2b34373e44453f393530262d2d29333c495a6a7f95abbccfc3a8937d68533e281300000000000003141d3145566277889da9bab49f8c7b655a483828161f34475974899fb4bca7917c67523c2715130d040000000000000000000000000000000000000007111c232a34373d424648494947443f38352c221b1001000000000000000000000000000000000008131c20303030302e25231c110306101b22242b34383a3a38363127221b1002000000000000000000000000000000000000000000000000070d1820222827313638393a39383632282b26201d150a000000000000000000000000000000000a0f111e1f1f1f18161006000000000000000000000000000000000000000000000f24384c5e66686765646056534b4538311c13080000000000000000000000000f24384c5e6675757575757575705a4835200b00000a1e334657616e74757575757574625948341f0b000000001b30465b70859b9f9f9f9fab8d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001132330393d4444444444444444444444444444444444444444444444443f3b32251403000000000000000000000000000000000000000000000000000000000000000000102031414c6176889db3c2b9a797826d5b4935210b0000000000000000000d1d2a343b484c53595a544e4b433642423a464c5a6378899eb3c9cab7a58d78634e38230e00000000000000021527384859647a8b9fb4bbaa9e8978625645321e182a3a5c72879cb1bfa9947f6a543f2a15000000000000000000000000000000000000000000000000090c181f22282d30323433322f2a2320190e07000000000000000000000000000000000000000000070b1b1b1b1b19100e0800000000070d0f192022242523201d150a0800000000000000000000000000000000000000000000000000000000050b0d13151d202223242423211e1616110b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667c7d7c7b79766f6960564e4130251808000000000000000000000011263b51667c8a8a8a8a8a8a8a78624d38220d0006192c3c4b617583898a8a8a8a8a8a77624c37220d00000000182e43586d8398adb5b5b5a5907a65503b25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25272f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f29271f14060000000000000000000000000000000000000000000003090c0e0c0a04000000000002131f334658687d92a4b6c5b59f8c79634e3a2917040000000000000005182a3b484c5962686e70696360545958575958616978869ca8b9ccc5b29d87725b4935210c00000000000000000a1a2a3b4a5c677d929eb0b8a79b8575604b4231212f445a6f8499afc1ac97816c57422c170200000000000000000000000000000000000000000000000000040a0c13171b1d1e1e1d19140e0c0600000000000000000000000000000000000000000000000000050606060400000000000000000000050b0d0f0f0d0b09020000000000000000000000000000000000000000000000000000000000000000000002090b0d0e0f0e0d0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1415120c0a0400000000000000192f44596e839292908e8a847e75685f4a4336251300000000000000000000000e24394e63798e9f9f9f9f9f8f7a65503a251000082135495b6b80969fa99f9fa6957f6a5948341f0b00000000162b40566b8095abc0cabda8927d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a10121a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a14120c0300000000000000000000000000000000000000030c1215161e2123211f170c00000000000417293a4b6074879cb1c9bcab97816c5846331f0a000000000000000b1f3448596271777d84857e7974716e6d6c6e71767f899ca4b6c6c9b8a6937e69543d2c1a060000000000000000000d1d2e3e4d5f6c8196a2b3b5a398826d604e3f2e2d42576c8297acc1af99846f5a442f1a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003101b2224292b28211f170c000000000000162c41566b8196a7a5a99f9a93877d6c605443301c12000000000000000000000c21364b61768ba7b8b5b5a7927d67523d281208182e3f4d63788b9fb4bac2b29d8875604b3b2a18050000000013283e53687d93a8bdd2bfaa95806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520272a2832363837332a1c1608000000000c1d314455697f94abbcc9b49e8976614c36210c000000000000000d22374c6277858c93999a948e898683828283868b949ea7b6c2cfbcab9e8875614b36210f0000000000000000000000102031414b6073849aa5b6b2a0937e695d4b3b2b3f546a7f94a9bfb19c87715c3a2a18040000000000000000060b0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0d0b05000000000000000000060c0e1b1d160b09020000060c0e1b1d160b090200000000000000000000060c0e1b1d160b090200000000000000000000080d0f1c1c1c1c1c191610060000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e0f0f0f0f0d07000000000000000a161e2d36393f403d3733291c12040000000013283e53687d93a8a9adb4afa69d928172604a40301b0b0000000000000000000a1e33465773899eb3c8bfaa947f6a553f2a151426364b5d6e8399aabbc9b5a3927d685745321d0d000000000011263b50667b90a5bbd0c2ad98826d58432d1800000000000000000000000000000000000000000000000000000000000000000000070d0f1415120c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525323c3f39464b4d4c473a34261605000000011426374c61778b9fb4cab9a8917c67513c2712000000000000000b20354b6075899eabaeafa9a89e9b989797989b9faab3b8c5c9bcb49f8d7c665746321e0a000000000000000000000002131d3144556176879da8b9b49f8b7b655948373d52677c92a7bcb49e89745847331f0a000000000000000e19202323232323232323232323232323232323232323232323232323232323232220180d000000000000000e19212330322c201d150a0e19212330322c201d150a00000000000000000e19212330322c201d150a0000000000000002101b222532323232322e2b23180a00000000000000000002090b0c0b09030000000000000000000000000000000000000000000008131c202325252524221b1002000000000a1b28323e4a4e5455524c473a302212030000000d23384d62788a9293989fa9b6b29f96816c5e4c392917030000000000000000031729395c71869bb1c6c2ac97826d57422d181c304354657b90a1b3c8bfb19b8673604b3928160000000000000e23384e63788da3c4d5c5b09a85705b372715020000000000000000000000000000000000000000000000000000000000000003101b2224292b28211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2032434f54595761636158514434231201000000091f34475971869cb1c6c6ac96816c57412c1700000000000000081c3043546d8398adc9c5c6b9b4b0aeadacaeb0b4bbc8c9c1b5ab9f93806a5e4c3929160300000000000000000000000001142637475863798a9eabbbaa9d88776255443a4f657a8fa4c8b9a88c77614c37220c0000000000000e1e2b3538383838383838383838383838383838383838383838383838383838383837342b1d0d00000000000e1e2c35384547413631271a1e2c35384547413631271a0a0000000000000e1e2c35384547413631271a0a00000000000010202e373a474747474743403628180600000000030a0c12151d2022211e16140c0a0400000000000000000000000000000000000b18253035393a3a3a39362d201000000003162839454b5c64696a6761584d403021110000000b2035495a62787c7e838b9ca5b6b09f917c665746331e0a000000000000000000192e44596e8399aec3c4af9a846f5a36251729394b6073869bb1bfc8b3a1907b655443301b0a0000000000000b21364b60768ba6b8cbc7b29d88725544311d080000000000000000000000000000000000000000000000000000000000000a161e2d36393f403d3733291c1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c4f616a6e727678776b625141301d0a00000004182a3b576d8297acc2c6b19c86715c372614010000000000000114263652677d92abbccfc4b7b2b3b8c5bcbdbebdc7bab4aea39b8c7e6a6150402f1b0b000000000000000000000000000009192a3a4a5b667c8d9fb5b7a69a8474604b414d62778caabbc6a48e79644f39240f000000000006192b3c484d4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d483b2b180500000006192c3c494d5a5c564b4538272c3c494d5a5c564b45382715020000000006192c3c494d5a5c564b453827150200000000081b2e3e4b4f5c5c5c5c5c5853463623100001080b171e21282731363736322829211f170c0000000000000000000000000000000b1b2836434a4e4f4f4f4e4a3e2d1b070000091e324557606e797e807d76675f4d3f2e1c08000006192b3c49596267696e79879ca8b9b39d8876614c36210f000000000000000001172c41566c8196abc1c7b29c87725443301e334657687d92a3b5c9bbaa99846f5d4c36261400000000000000091e32455673889eb3c8cab49f8a75604b36200b00000000000000000000000000000000000000000000000000000000000a1b28323e4a4e5455524c473a3022120300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f83878b8d8b806b5f4d39241100000000152a40556a7f95aabfc8b39e89735544311d08000000000000000d22374c62778b9fb5cab7a69d9ea7a5a6a7a8a8a6a99f9991857b69605043332212000000000000000000000000000000000c1c2d3d4d5e6a8095a1b3b4a296816c5f4e4b60758a9fb4bca6917c67513c271200000000000b2035485a62636363636363636363636363636363636363636363636363636363636362594834200b0000000c2135495b6370726b6056453135495b6370726b605645311d09000000000c2135495b6370726b605645311d09000000000d22374b5c6471717171716e6453402b0f09151d202933363d38454b4c4b45393f37332a1c14010000000000000000000000000316283946546063646464645c4a36220d00071b2d3e4b6075828e949592897d675d4b37230c0000000e1e2b3b484d52545b6378899eb3b7a6937e69533d2d1a07000000000000000014293e54697e93a9bec9b49f8a75604a352b3c4b6176889db3c2c6b49f8c79634e3f2f180800000000000000031628385b70869bb0c5cebbaa8d78624d38230d0000000000000000000000000000000000000000000000000000000003162839454b5c64696a6761584d4030211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e83989d9fab9f917c6751402f1a0a00000014293e53697e93a8becab59f8a75604b35200b000000000000000b1f34475971869bb1c6b29d87898c8f91929393918e8a847c70655d4f423325150400000000000000000000000000000000000f1f30404a60728399a4b5b19f927d685c4a5472879db2bea9947e69543f291400000000000d23384d6278787878787878787878787878787878787878787878787878787878787877624d37220d0000000e23384d637985878174604b37384d637985878174604b372614010000000e23384d637985878174604b372614010000000f253a4f647a8687878787826e583d2d182127313539464b525956606160575a544c473a311c140800000000000000000000010f1e3246576172787a7a7a7a644e39240f000d22364a5c6e8298a0a9aaa79e8c7b654f3a2a18040000000e1d2b34373d3d495a6a7f94abbcb19c86715b4a36210c000000000000000011273c51667c91a6bbcdbaa98c77624c3735485a6b8095a6b7cbb9a897826d5b4a362111000000000000000000192e43596e8398aec3d9c8a5907a65503b251000000000000000000000000000000000000000000000000000000000091e324557606e797e807d76675f4d3f2e1c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c51677c91a8b5bcb19c86725e4c38271508000014293e54697e93a9becfbcab8c76614c37210c0000000000000005182a3b556b8095aac5ad978273777a7c7d7e7d7c79756f665e504b3f3224150700000000000000000000000000000000000001121c3043546175869ca7b8b49f8b7a64585a6f859aafc1ac96816c57412c1702000000001b30455a70848d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d8d846f5a362513000000192e43596e83989c957f6a554443596e83989c957f6a5544311d08000000192e43596e83989c957f6a5544311d080000000f243a4f64798f9c9c9c9c88735c4a362d3637444b515761676e7375777674706961584e42302618080000000000000000000f1f31424b6175848e8f8f8f826d58422d18000f24394f647a8ea0b2bec5b9aa9b85705847331f0a000000000d192022272c3c4c61778c9fb5b5a48e79634e39230e00000000000000000f24394e64798ea3c6d6c7a48f7a644f3a3f4d62788a9fb4c4c4b49e8a77624c3d2d1a03000000000000000001162b41566b8096abc0d2bda7927d68523d2813000000000000000000000000000000000000000000000000000000071b2d3e4b6075828e949592897d675d4b37230c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075899eb4c6b6a4907b6656453125181211182b3c556b8095aac0ccb9a78b75604b36200b000000000000000010253a4f657a8fa7b9b29d887362656768696867646055514c40372e21140600000000000000000000000000000000000000000013253646576378899eaabaa99d877661556d8297adc2ae99846e59442f190000000000182d42586d8297a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a39c87725443301c0700001d33485d72889db19d8874604b485d72889db19d8874604b35200b0000001d33485d72889db19d8874604b35200b0000000d22384d62788da6b1b1a68e796454473d4a4e5560666e767d83888b8c8b89857e7668604b4336261401000000000000000a1a2c3d4e606d8298a2a4a28e79644e39240f00152a3f556a7f94aabecfd6c8b4a38c77614c37220c0000000000050b0d121f34475971869cb1c2a8927d68533d281300000000000000000c21374c61768ca8b9ccbca7917c6752364b5d6e8398a9bacbb7a6957f6a5948341f0f0000000000000000000014293e53697e93a8bed3bfaa95806a55402b150000000000000000000000000000000000000000000000000000000d22364a5c6e8298a0a9aaa79e8c7b654f3a2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245576b8196a8b9c2b19c8674604b43362d27262a36485a6f849aafc4c9b39e89745645311d0900000000000000000b20354b6075899eb3b7a68e79645051525353514e4b44373830231c11030000000000000000000000000000000000000000000008182939495a657c8c9fb4b7a59a8473606a8095aabfb19c86715c3a29170400000000152a40556a7f95aab8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b49f8a75604a35200b00001f34495e74899eb3a68e79644f495e74899eb3a68e79644f39240f0000001f34495e74899eb3a68e79644f39240f0000000b2035485a73889eb3c4ae99837262595b5b636b747c838a92989da6a1a89e9a94897e6c605443301c0f00000000000003162838495b687d92a0b2af9a84705c4a36210d00162b41566b8096abc7d7e2cdbaa98d78634d38230e000000000000000004182a3a596e8398aec1ac97816c57422c1702000000000000000a1f33475874899eb3c9bea9947f69544354647a8fa0b2c7c2b29d8875604b3b2a18010000000000000000000011263b51667b90a6bbd0c2ad98826d58432d180000000000000000000000000000000000000000000000000000000f24394f647a8ea0b2bec5b9aa9b85705847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394c61778a9eb4c1b5a497816c60544a3d3c3b3a475462788b9fb4cac6b19b86715c382715020000000000000000081d3144556e8399aec4a9947f6a54393d3e3e3c39363127241d1208000000000000000000000000000000000000000000000000000b1b2c3c4c5e697f94a0b2b3a295806b687d92a7bdb39e89745847331f0a0000000012283d52677d92a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a98c77624c37220d00001f34495e74899eb3a9947e6954495e74899eb3a9947e69543625130000001f34495e74899eb3a9947e695436251300000005192b3c596e8399aec3b3a198827771707379808891989fa9aeb2b7c4b9b4afa79e938172604b3e2d1a0700000000000e1e32455663798a9fb4b6a5917c66513d2d1a070013293e53687e93a9bacacec3b49f8a75604b36210b000000000000000000172c41566c8196abc1af9a85705a45301b05000000000000000417293a5c71869cb1c6c1ac97816c574a6072859bb0bec9b5a4927d685745321d0d00000000000000000000000e24394e63798ea3c5d6c5af9a85705a372715010000000000000000000000000000000000000000000000000000152a3f556a7f94aabecfd6c8b4a38c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586a8095a3b5c2b19f968072635b545151525861728399aabbcec1ab96806b56412b160000000000000000000115273753687d93a8c2af9a857057463329282724201d150909000000000000000000000000000000000000000000000000000000000e1e2f404f616d8298a3b5b09e917d677a8fa5c5b9a88c76614c37210c0000000010253a50657a8f909090909090909090909090909090909090909090909090909090908f7a644f3a240f00001f34495e74899eb3ae99836e54435e74899eb3ae99836e5443301c0700001f34495e74899eb3ae99836e5443301c0700000011273c51667c91a5b6bfb2a0988b8686888e969da6aeb4bac7bebab8bbc3c5b8b39f957f6a5c4a36210c000000000e1e30414b6075869ca8bab29c8773604b35200f00000d22374c62778a9fb2b6bbb4a598826d5645321e09000000000000000000152b40556a8095aabfb19c86715c47311c0700000000000000001a2f44596f8499aec4c4ae99846f5956677d92a3b5c9bfb19c8673604b3928160000000000000000000000000c21364b61768ba7b8ccc7b29d87725544311d080808080808080808080808080000000000000000000000000000162b41566b8096abc7d7e2cdbaa98d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a4b6074859ba8b9bdb09e968479706a6766686d768399a1b3c8c9b5a38f7a65503a2510000000000000000000000d22374d62778ca4b5b49f8a76614c362113120f0b080200000000000000000000000000000000000000000000000000000000000000112132434b6074859ba6b8b49e8a79778ca7b9c6a38e79644e39240f000000000c21364b61757c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7c77614c37220c00001f34495e74899eb3b39e8974604a5e74899eb3b39e8974604a35200b00001f34495e74899eb3b39e8974604a35200b0000000b20354b6073879cabbcbeb2aa9f9c9b9da6abb3b7c4bcb5afa9a4a3a6aeb3bfbdb49f8b79644e3b2a180400000a1a2c3c4d5f6d8197a4b5b9a8937e695443301c0800000b20344859687e919da5aa9f998777624c38281603000000000000000000142a3f54697f94a9beb29d88725d48331d080000000000000002172c41576c8196acc1c6b19c87715c6075879db2c1c8b3a1907b655443301b0a0000000000000000000000000a1e33465773899eb3c8cab49f8a75604b35201d1d1d1d1d1d1d1d1d1d1d1d1d14120c030000000000000000000013293e53687e93a9bacacec3b49f8a76604b36210b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1d32455663798a9ea9babcb0a29a8e857f7c7b7d828a99a1b3bfcdbcb09b85715d4b37230e000000000000000000000b2034485971869cb1bbaa917c66513c2711111111111111111111100e0b07000000000000000000000000000000000000000000000003141e3245566278889da9b9a89c8676899eb3bba6917c66513c2711000000000a1e32465761666666666666666666666666666666666666666666666666666666666666615947341f0b00001f34495e74899eb3b8a78e79634e5e74899eb3b8a78e79634e39240e00001f34495e74899eb3b8a78e79634e39240e000000081c304354657b8d9fb4bac7bbb4b1b0b3b8c4c3b6b2ab9f9a938f8e9199a1afbbbbaa98836e5947341f0b0002152838495a677d929fb1c2b39e8976614b36261401000005182b3b4e60687c878d8e8b8377625947341a0a0000000000000000000013283e53687d93a8bdb39e89745e49341f090000000000000000142a3f54697f94a9bec9b49e8974676b8095a5b7cbbbaa99846f5d4c36261400000000000000000000000000031729395c71869bb1c6cebbaa8d78624d38323232323232323232323232323229272014070000000000000000000d22374c62778a9fb2b6bbb4a598826d5645321e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152838495b667c8b9fa9b6c0b4afa29a94919092979ea8b3bfcebeb09e907b65503f2e1c080000000000000000000005192b3b566b8196abc6ac97826c573d2c262626262626262626262523201c130800000000000000000000000000000000000000000000021628384859647b8b9fb4b6a49983849aafbea9937e69543e29140000000003162939464b5151515151515151515151515151515151515151515151515151515151514c473b2a180400001e33485e73889db3c5a8927d68535e73889db3c5a8927d68533d281300001e33485e73889db3c5a8927d68533d2813000000011426364b5d697f939fa9b3b9c6bebec4b7b2aba59d958c847e7a797c83949dafc2b49f8a77614c37220c00091d32455663788a9eb4b4b3a996816c5746331808000000000d1d31424e5f67727879766e6259483b2a18000000000000000000000013283d52687d92a7bdb39e89735e49341e09000000000000000012273c51677c91a6bccdb9a8927d7d808c9fb4c3c5b49f8c79634e3f2f18080000000000000000000000000000192e44596e8399aec3d9c8a58f7a65504747474747474747474747474747473f3b3225140300000000000000000b20344859687e919da5aa9f998777624c3828160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2c3c4c5e667c8b9ca5b4bbc0b4afa9a6a6a7acb4b9c6c8bbb4a096806b5d4c38211100000000000000000000000010263b50657b90a8b9b29d88725b493b3b3b3b3b3b3b3b3b3b3b3b383530251811030000000000000000000000000000000000000000000a1a2b3b4b5d687e929fb1b3a199899eb3c1ab96816c56412c1701000000000b1b2932363b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b393632281a0a00001b31465b70869bb0c0aa95806b555b70869bb0c0aa95806b55402b1600001b31465b70869bb0c0aa95806b55402b160000000008182e3f4f61697e8a979ea8a7a9a9a7a69d968f8780786f696563666e7f94a3b5bbaa917c67523c2712000b20364b6074859b9e9e9e9e9c8b78624d392917000000000000142431404d515b636461584d483b2b1d0d000000000000000000000012283d52677d92a7bcb29d88735d48331e0800000000000000000f243a4f64798fa4c6d6c6ad9c9292969faabbc7b9a797816c5b4a362111000000000000000000000000000001172c41566c8196abc1d2bda7927d685d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d544f4332200c000000000000000005182b3b4e60687c878d8e8b8377625947341a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2f404c5e657a87969faab3b8c5bfbcbbbdc2c5c8bbb4aa9f948272604b3f2f1c030000000000000000000000000b20364b6075899eb4b7a58e7963505050505050505050505050504e4a43362f2111000000000000000000000000000000000000000000000d1d2e3f4e606c8197a2b4b3a89ea8b9c3ae99836e59442e1900000000000417293a464c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4b453828150200192e43586e8398adc2ad98826d58586e8398adc2ad98826d58432d180000192e43586e8398adc2ad98826d58432d180000000000112132434f60687882898f929493918d88817a726a625a544f4e516073869bb1c8ab96816c56412c1700162b40566b808a8989898989867c665a48351b0b00000000000006142230393c494d4f4c473a342b1d0d00000000000000000000000012273d52677c92a7bcb29c87725d47321d0800000000000000000c22374c61778ca8bacdcabaada7a7abb4bbc8baa99e8977614c3d2d1a0300000000000000000000000000000014293e54697e93a9bed3bfaa957f727272727272727272727272727272727269614f3b27120000000000000000000d1d31424e5f67727879766e6259483b2a1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f404c5c6475818b969ea7aaaeb0b2b3b2b0adaa9f988c7f7260544330211100000000000000000000000000091d3145566f8499aec3a9947f69666666666666666666666666656360544b3f2f1e0e00000000000000000000000000000000000000000000102031424b6073849aa5b7b9b3b9c6c6b19b86715c39291703000000000a1f33465861646464646464646464646464646464646464646464646464646464646464605645321d0900162b41566b8096abc0b09a85705b566b8096abc0b09a85705b3727150200162b41566b8096abc0b09a85705b372715020000000003152532424e5a626d757a7d7f7e7c78736c645c554d483c3a394354697f94a4a4a499846e59442f190014283d51626b74747474747471665e4c3c2b19000000000000000004121d242c35383937332a20180d0000000000000000000000000012273c52677c91a7bcb19b86715c46311c0700000000000000000a1f34475974899fb4c9d6c5b9b3b0b2b6c3c9b49f8a7a655947341c160700000000000000000000000000000011273c51667c91a6bbd1c9b39e8987878787878787878787878787878787877f69543f291400000000000000000000142431404d515b636461584d483b2b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412212f3e4b57606c7880898f94999b9d9e9d9b98928b82796a60544336261403000000000000000000000000000215273853697e93a8c3b09b857b7b7b7b7b7b7b7b7b7b7b7b7b7a7873655d4b3c2c190600000000000000000000000000000000000000000002131d3144556177879da8bac9ccd6c8b39e89735746331e0a000000000c21364c617679797979797979797979797979797979797979797979797979797979797974604b36200b0013293e53687e93a8bdb29d88725553687e93a8bdb29d88725544311d080013293e53687e93a8bdb29d88725544311d080000000000071524313c484d55606567696967635b564f4b3e38352b25253651667c8f8f8f8f8f84705b45301b000e21334451565f5f5f5f5f5e5c514c40301e0e000000000000000000000a0e19212324211f170c05000000000000000000000000000012273c52677c91a7bcb09a85705b45301b06000000000000000004182a3a5c71879cb1c6ccb9a79e9a9da5b5bcb49f8c7f72604a443425150600000000000000000000000000000f24394e64798ea3c6d6ccb9a79e9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c9c98836d58432e180000000000000000000006142230393c494d4f4c473a342b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311202e39454b5a626b757a7f848688898786827d776d635b4a43362618080000000000000000000000000000000d23384d62788da5b6b4a39b90909090909090909090909090908d877b655a4935200c00000000000000000000000000000000000000000000021527374759647a8a9fb4bccde0ccb8a78b76614b36210c0000000010253a50657a8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e7a654f3a25100011263b51667b90a6bbb49f8a756051667b90a6bbb49f8a75604b36200b0011263b51667b90a6bbb49f8a75604b36200b00000000000006141e2b3537444b50525454524d493c3a372e2320191021364c61757a7a7a7a7a7a644e39240f00041626333d40494949494949473c3930221200000000000000000000000000060c0e0f0c0a040000000000000000000000000000000012273c52677c91a7bcaf9a856f5a45301a050000000000000000001a2f445a6f8499afc4c9b39e898587939fabbbaa9f94816c62514333241405000000000000000000000000000c21374c61768ca8b9ccd6c5b9b3b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b09b85705b392816030000000000000000000004121d242c35383937332a20180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b28323c484d5660656a6f71727372706d6862594e493d30251808000000000000000000000000000000000c2035495a72879cb2c1b4b0a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59c8978634d38230e000000000000000000000000000000000000000000000009192a3a4a5c677d919eb0bfd0d5c5a38e79634e39240e000000000d23384d62788daaa3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3927c67523d2712000e23394e63788ea3c5bbaa8d78624e63788ea3c5bbaa8d78624d38230d000e23394e63788ea3c5bbaa8d78624d38230d00000000000000000e19202731363a3d3f3e3c38352c25221b100b060a1e334657616565656565645c4a36210d0000081621282b3434343434343227241d120400000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91a6bbaf9a85705a45301b00000000000000000002172c42576c8197acc1c6b19b8671727e8d9fb5bbb49f96806b615042312313040000000000000000000000000a1f33475874899eb4c9ded6ccc9c3c0c0c0c0c0c0c0c0c0c0c0c0c0c0b39e88735746321e090000000000000000000000000a0e19212324211f170c05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2b3538454b5055595b5d5e5d5b58524d483b362c1c1308000000000000000000000000000000000006192c3c576c8196acc7c8c5bbbbbbbbbbbbbbbbbbbbbbbbbbc3b6a896806b56412b160000000000000000000000000000000000000000000000000c1c2d3e4d5f6b8095a1b3c2bdbba6907b66513b2611000000000b20354b60758a9fb4b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9b9a9947f69543f2a14000c21364b61768ba7b8c8a5907a655061768ba7b8c8a5907a65503b2510000c21364b61768ba7b8c8a5907a65503b25100000000000000000000509151d2025282a29272321190f0d0800000003172939464c4f4f4f4f4f4e4a3e2d1a07000000040e14161f1f1f1f1f1f1c110f09000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bab09b86705b37261401000000000000000000152a3f546a7f94a9bfc8b39e897360697e939eafbdb09e947f6a604e4130221203000000000000000000000004172a3a5c71869cb1c6dbd0bfb3aeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa68b76614b36210c0000000000000000000000000000060c0e0f0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030e19202832363a3f444648494846433d37342b211a0f000000000000000000000000000000000000000011263b51667b90a9babdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdc6b09b85705b382816020000000000000000000000000000000000000000000000000f2030414b60728399a4a8a8a8a8937e69533e291400000000081d31445572889da5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a596816c57412c1700091e32465773889ea7a7a7927d68525773889ea7a7a7927d68523d281300091e32465773889ea7a7a7927d68523d2813000000000000000000000002080b10121414120e0c06000000000000000b1b2933363a3a3a3a3a39362d200f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798fa4c5b29d87725544311d0800000000000000000012273c52677c91a7bcccb8a78b7661606a80959fb0bcaf9d937e695f4d403021110200000000000000000000001a2f44596f8499aec4d9c7b3a199959595959595959595959595959595958e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a151d20252a2f31333432312d282220180d060000000000000000000000000000000000000000000b21364b60758a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89d88735645321e0900000000000000000000000000000000000000000000000001131c304354617686939393939393806b56412b1601000000011527375b70849090909090909090909090909090909090909090909090909090909090836e59442f1900031628395b71859292929292806a555b71859292929292806a55402b1500031628395b71859292929292806a55402b150000000000000000000000000000000000000000000000000000000000000b171e21252525252524211a0f01000000000000000000000000000000000000010a10121313131313131313131313110f0900000000000000000000000000000000000000000d22374d62778ca7b8b49f8a75604b35200b0900000000000000000f253a4f647a8fa4c7d6c5a38e79634e616c8196a0b2bbb59f8d7d675e4c3f2f20100100000000000000000002172c41576c8196acc1d6c3ae9983808080808080808080808080808080808078634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b10151a1c1d1e1d1b18130d0b050000000000000000000000000000000000000000000000091e3245566f849393939393939393939393939393939393939393938c75604b36210b0000000000000000000000000000000000000000000000000001142636465863787e7e7e7e7e7e7b65503b251000000000000e24394e63797b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7a644f39240f000010253b50657b7d7d7d7d7d7a644f50657b7d7d7d7d7d7a644f3a240f000010253b50657b7d7d7d7d7d7a644f3a240f00000000000000000000000000000000000000000000000000000000000000030a0c10101010100f0d070000000000000000000000000000000000000005131e2528282828282828282828282826241d12040000000000000000000000000000000000000b20354b6074899eb3bbaa8e79644f3929241c12040000000000000d22374c62778ca9bacdbba6907b66514a60728298a1b3bcab9f8c7c665d4b3e2e1f0f00000000000000000000142a3f54697f94a9bed4bea9947f6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b635a4935200c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384f647a7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e75614b36210c00000000000000000000000000000000000000000000000000000818293a495a63686868686868655d4b37230e00000000000c21364a5b636565656565656565656565656565656565656565656565656565656565645c4a36220d00000e23374b5d656767676767645c4a4b5d656767676767645c4a36220d00000e23374b5d656767676767645c4a36220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011323313a3d3d3d3d3d3d3d3d3d3d3d3d3c382f2212000000000000000000000000000000000000081c3043546e8398adbeaa957f6a574639382f22120000000000000b20354a60758a9fb4c9bea8937e6953435460738399a2b4bbaa9f8b7b655c4b3d2d1e0e00000000000000000012273c51677c91a6bcd1c1ac97816c575555555555555555555555555555554d493c2c190600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e121416161614120e0b07000000000000000000000000000000000000000000000000000000000000000000000a22364a5c6468686868686868686868686868686868686868686868615746321e090000000000000000000000000000000000000000000000000000000b1b2c3c494d535353535353504b3f2e1c080000000000071a2d3d4a4e50505050505050505050505050505050505050505050505050505050504f4a3e2d1b070000081c2e3f4b5052525252524f4a3e3f4b5052525252524f4a3e2d1b070000081c2e3f4b5052525252524f4a3e2d1b07000000000000000000000000000000000000000000000000000000000001080b0f1518191816120c0b040000000000000000000000000000000000000a1e31414d525353535353535353535353514c402f1d090000000000000000000000000000000000011426364f657a8fa0b2b39d88766157514c402f1c090000000000071c30435472879cb2c7c0ab96806b563644556074849aa4b5baa99e8a7a645b4a3c2c1d0d00000000000000000f243a4f64798fa4c7d7c4ae99846f5944404040404040404040404040404038352c1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b131c2023272a2b2c2b2a2723201c130b0801000000000000000000000000000000000000000000000000000000000000071b2e3e4a4f535353535353535353535353535353535353535353534b4639281603000000000000000000000000000000000000000000000000000000000e1e2c35383e3e3e3e3e3e3b372e2111000000000000000f1f2d36393b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b39362d20100000000011212e373b3d3d3d3d3d3a362d2e373b3d3d3d3d3d3a362d20100000000011212e373b3d3d3d3d3d3a362d2010000000000000000000000000000000000000000000000000000000000009141d20252a2d2e2d2b28221f180c070000000000000000000000000000000010253a4d5f676868686868686868686868665e4c3824090000000000000000000000000000000000000822374b5d6e8298a3b2a69983756c665e4c38240f0000000000001325365a6f849aafc4c3ae98836e59433745566176869ca5b6b9a89e8979635b493b2b1c0c000000000000000c22374c61778ca9bacdc6b19c87715c3a2a2b2b2b2b2b2b2b2b2b2b2b2b2b2320190e000000000000000000000000000000000000070d0f1415120c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108131c20253035383c3f4041403f3c39353025201c140800000000000000000000000000000000000000000000000000000000000010202e363a3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3632281b0b0000000000000000000000000000000000000000000000000000000000000e19202329292929292925231c110300000000000000010f1a2124262626262626262626262626262626262626262626262626262626262624221b10020000000003111c2325282828282824221b1c2325282828282824221b10020000000003111c2325282828282824221b10020000000000000000000000000000000000000000000000000000000009192631353a3f424342403d37342a221b1001000000000000000000000000000012283d52677d7d7d7d7d7d7d7d7d7d7d7d7c6651372715010000000000000000000000000000000000081b2e3f4c61758598a0b1a19988817c66513b2611000000000000182d42576d8297acc2c5b09b86705b39283846586277879da6b7b8a79d88796359483a2a1b0b0000000000000b1f34475974899fb4c9c9b49e89745847331f1616161616161616161616160e0c06000000000000000000000000000000000003101b2224292b28211f170c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c25303536434a4e515455565554514e4a43363530261c13080000000000000000000000000000000000000000000000000000000002101b222429292929292929292929292929292929292929292929211e160b0000000000000000000000000000000000000000000000000000000000000000060c0e131313131313100e080000000000000000000000070c0e10101010101010101010101010101010101010101010101010101010100f0d070000000000000000080e1012121212120f0d07080e1012121212120f0d070000000000000000080e1012121212120f0d07000000000000000000000000000000000000000000000000000000000001142637444b4f5457585756524c473b362d1d1409000000000000000000000000001d32475d7287929292929292929292929287725544311d08000000000000000000000000000000000000101e334657617583909ba3a69d96846f5a45301a000000000000152a3f556a7f94aabfc8b39e8873574532293a48596278889da7b9b8a69d87786259473a291b0a000000000004182a3b5c72879cb1c7cdb9a88c77614c37220c0000000000000000000000000000000000000000000000000000000000000a161e2d36393f403d3733291c1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f18263036434a5054606367696b6b6b6967636054514b43363025180e0000000000000000000000000000000000000000000000000000000000070d0f131313131313131313131313131313131313131313130c090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445560646a6d6e6d6b6761594f4a3e312619090000000000000000000000001a30455a6f859aa8a8a8a8a8a8a8a8a89f8a75604b35200b000000000000000000000000000000000000031729394657616e7b869bb1b29c87725d3a291704000000000012283d52677d92a7bccbb8a68b76604b36212a3b495a6379899ea8bab7a59c86776158463928160300000000001a2f445a6f8499afc4d7c6a48e79644f39240f00000000000000000000000000000000000000000000000000000000000a1b28323e4a4e5455524c473a302212030000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131f2d36434b5460666d74787c7f8081807f7c79746e6660544a43362c1f120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1013141514120e0b070000000000000000000000000000000000000000000000000000000000000000040a0c111415161513110d0b0500000000000000000000000000000000000000000000000003090b120b07000000000000000000000000000000000000000000040a0c12100a01000000000000000000000000000000000b20354b60737a7f828382807d776f645c4b44372719090000000000000000000000182d42586d8297adbdc1b5b0a7a7a7a7a58c77624c37220d000000000000000000000000000000000000000b203448596278849aa3b5b29f89745846331f0a000000000010253a4f657a8fa4c8d5c4a38d78634e38231d2c3c4a5b647b8a9fa9aeaea49b8576615745321e090000000002172d42576c8297acc1d1bca6917c67513c27120000000000000000000000000000000000000000000000000000000003162839454b5c64696a6761584d40302111000000000000000000000000000000000000000000000000000000000000000000000000000000000000061423303d4a546068737b82888d919495969594918e89837b73676054493d30221305000000000000000000000000000002090b150c0a03000000000000000000000000000000000000000000000000070c0e131515130f0b070000000000000000080a0b0b0b00000000000000000000000000000000000000000000090a161e2125282a2b292824201c130808000000000000000000000000000000000000000000000000000001080c181f2226292b2b2a29262220190f0d0700000000000000000000000000000000000000000a161e2128201c13080000000000000000000000000000000000000c171f2127251d12050000000000000000000000000000000f243a4f647a8f9497989795928b847a6c6055443727150100000000000000000000152a40556a7f95aabfb5a39b92929292918774604b36200b00000000000000000000000000000000000005182b3b4c6277889aa2b4a59d8f8a76614c36210c00000000000d22384d62778daabbcebba5907b66503b26111e2d3d4b5d667c8b9799999999998575604b36210b0000000000152a3f546a7f94a9bfd3bea9947e69543f291400000000000000000000000000000000000000000000000000000000091e324557606e797e807d76675f4d3f2e1c080000000000000000000000000000000000000000000000000000000000000000000000000000000005142432414d5b63737d8790989ea6a6a9aaabaaa9a6a79e9890877d72635b4d40312313040000000000000000000000000a161e212b211e170b000000000000000000000000000000000000000000090f1a2124282a2a2824201c1308040000090f111d2020202013110b020000000000000000000000000000000008121d242832363b3d3f403f3d39353025231c1108000000000000000000000000000000000000000000000009141d202a34373b3e40403f3e3b38342b24211a0f0700000000000000000000000000000000000a1b2832363d353025181003000000000000000000000000000001121c2a33373c393023120300000000000000000000000000000b21364b60768a9facadacabab9f9a8f8173605544311d110000000000000000000013283d52687d92a7bdb09b857d7d7d7d7c76615544311d080000000000000000000000000000000000000b203448596e8398a6b4b29d877b72615846331f0a00000000000b20354b60758a9fb4c9bda8937d68533e28130f1f2e3f4c5e667a828484848484837e69533e2914000000000012273d52677c92a7bcd1c1ac96816c57412c17020000000000000000000000000000000000000000000000000000071b2d3e4b6075828e949592897d675d4b37230c00000000000000000000000000000000000000000000000000000000000000000000000000000001132332424f5f677985929da5adb3b8c4bec0c0c0bec5b8b3ada49c928579665e4e4131221200000000000000000000000a1a283236403633291b0c00000000000000000000000000000000000001121d242d36393d3f403e393530251f170b121d2426323535353528261e13060000000000000000000000000002101b22303938454b5052545554524e4a4336372e231c1103000000000000000000000000000000000000000311192631353a474c515455555553504d483c39362d221b1003000000000000000000000000000003162839454b524a43362e1e160b00000000000000000000000009141d303a474c524d413021100000000000000000000000000000091e32455772879cb2bcc9c9bcb4af9f968373604b3f2e1c0800000000000000000010253a50657a8fa5c8b09b857067676767615847372715020000000000000000000000000000000000000d22374d62778b9fb4b5a48f7a656054463a2917040000000000081c30435472879db2c7c0ab95806b56402b160110202f404c5c646c6f6f6f6f6f6f69604f3b261200000000000f253a4f647a8fa4c7d8c3ae99846e59442f19000b0b0b0b0b0b0b0b0b0b0b0b0b0b0b01000000000000000000000d22364a5c6e8298a0a9aaa79e8c7b654f3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000a1e30414f60697d8b9ba3b2b6c3c8cac3bcb8b6b5b6b8bdc4c3b6b2a29b8a7c685f4e402f1e0e00000000000000000009192838454b554b46392a1c0c0000000000000000000000000000000009141d30393d4a4e535555534e4a433633291b222f383c474a4a4a4a3d3a3124130200000000000000000000000513202e37404d5156606568696a69676360544f4b3f372e1e160b00000000000000000000000000000000000715222f37444b53596166696a6b6a6866625a574e4a3d372e1e170b00000000000000000000000000091e324557606760544b3f32291b0b0000000000000000000009192631404d5861675f4d3f2e1b0b0000000000000000000000000003162839596e83989faba4acb1bdbdb0a196816c5d4b3723100000000000000000000d23384d62788daabbb39d8873565252514c473a2a19090000000000000000000000000000000000000012273d52677c92abbcb19c86715d4a4336291c0c000000000000011426365a70859aafc5c2ad98836d58432e18000211222f3e4a4e57595959595959534f42321f0c00000000000d22374d62778ca9bacec6b19c86715c3a29172020202020202020202020202020202016140e04000000000000000f24394f647a8ea0b2bec5b9aa9b85705847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f697e8d9fa9b5c1cac8bbb4aea7a2a19fa1a3a8afb3bfc0b4a89e8c7e685e4c3c2b190500000000000000021527374556606a6157473a2a1b0b000000000000000000000000000009192631404d515b63686a6a686460544c463a302f404c515d5f606060534e42311e0b00000000000000000000071423313e4b4f5e666f757a7d7f807e7d79746d655d4f4b3f32291b0e00000000000000000000000000000008162532404c55606870777b7e80807f7e7b77726c645c4f4b3e33291b100200000000000000000000001325364b60757d72645d4b4639291603000000000000000001142637444b5e66767c675d4b392917030000000000000000000000000011273c51667c898a8b8f979fafbbbfb09e8f7b65503e2e1b0700000000000000000b20354b60758a9fb4b59f8a76604b3d3c37332a1c0c0000000000000000000000000000000000000000152a3f546a7f94a9c9ae98836e593f3025180c0000000000000000182d42586d8297adc2c5b09b85705b38271502000411202d3639424444444444443e3b3224140200000000000b20354b60758a9fb4c9c9b39e897458463335353535353535353535353535353535352c29211608000000000000152a3f556a7f94aabecfd6c8b4a38c77614c37220c000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677d8d9fabbac7cdbfb2aa9f98928d8b8a8c8e939aa1b1b5c2b9aa9f8c7c665a4835201200000000000000081d314455607480756159473928160300000000000000000000000001142637444b5e6671797d7f7f7d79736a61584c40364c5e66727575757568604e3a261100000000000000000003142532414e5c64707c84899092949594928e89837a71655d4b46392c1e0f0100000000000000000000000005162634434f5e66737d858c909395959493908d87817970645c4c46392d201204000000000000000000071c304354687e92857a6d615746321e0a0000000000000000081d314455606d7c888c7b655746331e11000000000000000000000000000f24394c5e667375767982949dafc3bdb09b85705c4a36220d0000000000000000081d31445572889db2bcab8d78634e3827211f170c000000000000000000000000000000000000000000152a3f546a7f94a9bfae98836e59432e1308000000000000000000152b40556a8095aabfc8b29d88735645311d09000002101b22242d2f2f2f2f2f2f29261f1406000000000000081c30435472879cb2c7ccb9a88b76614c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a413d342616040000000001162b41566b8096abc7d7e2cdbaa98d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095a2b4c5c7bab4a1998b837d78767576797e848f9ca4b3bfbbaa9e8978624d402f1d090000000000000b20364b607484958577615746321e140000000000000000000000000a1d314455606d7c868e929495938e887f76665e4a4354667c878a8a8a8a7e68533d2813000000000000000000112132434f60687a8591999fa8a7a9aaa9a7a79e988f857b6d6157493c2d1f0f0100000000000000000000001323344451616a7b86929ba3a6a9aaaaaaa8a5a59d968e847a6d61574a3e3023140600000000000000000b20354a6073869c9b8f8275614b36210c00000000000000000b20354b607382919d9d8775614b3f2e1a0a000000000000000000000000091d30404c515e5761646d7f94a5b7c9b5a38f7a644f3a240f0000000000000000011527375b70859ab0c9a5907b65503b26100a040000000000000000000000000000000000000000000013293e53687e93a8bdaf9a856f5a3b2b180500000000000000000013283d52687d92a7bdcab59f8a75604b36200b00000000070d0f171a1a1a1a1a1a14120c0200000000000000011426365a6f859aafc4d6c6a38e79646060606060606060606060606060606060606056514434210e000000000013293e53687e93a9bacacec3b49f8a76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073849aa7b8b8a99f9283786e676361606163686f7a8699a1b3c3b9a79a846f5e4c38241000000000000010253a50657a8fa29b8575614b42321e0e000000000000000000000a1a30414b607382919ca4a8aaaaa8a69d94887c6b60546073889c9fab9f95806b55402b1600000000000000000b1b2e3f4f61697e8b9ba3aeb4bac6bebdbdc5b8b3ada39b8f8275635b4a3d2d1f0f000000000000000000000e1e304151626b7f8d9ca4b0b5c1bebfbfbdbdc3b6b2aca29a8f8276645c4d41312414040000000000000316283950657b90a4b0a096816c57412c17020000000000000010263b50657b90a0b3a597816c5d4b38281603000000000000000000000000122230393c39464b4f6074879db2c7c1ab96816b56382816020000000000000000182d43586d8298adbda8937d68533e281300000000000000000000000000000000000000000000000011263b50667b90a5c3b29d8873594834200b00000000000000000010253b50657a90a5c8cfbcab8d78634d38230e0000000000000002040404040404000000000000000000000000182d42576d8297acc2d0bba6917c75757575757575757575757575757575757575756b62513d291400000000000d22374c62778a9fb2b6bbb4a598826d5645321e090000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556278899eaba69d8a7d6e635a524d4c4a4c4e535c64758399a4b6c5b3a2907c66513e2d1b0700000000000c21364b6175879ca399836e604f3c2b19060000000000000000021628384d5f6d8298a0b1b6c2bfbfc4b7b3a69d9180726061778ca6b4bcad98826d58432d1800000000000000031729394b5d697f929faab4c1c1b5b0aaa8a8aab0b5c1b5b0a0988679635b4a3d2c1b0b000000000000000005192b3c4d5f6b80949fabb6c2c4b8b3adaaa8a9aaaeb4b9b4af9f97877a675f4e42312212000000000000091e3246576d8298adbeae99846f59442f1a04000000000000000e23384e63788c9fb5b59f8d7b655645321e0e00000000000000000000000004121d242728323644556b8196abc0c6b19c86715645321e090000000000000000162b40556b8095aac0aa95806b55402b160000000000000000000000000000000000000000000000000d22374d62778ca5b6b7a68c77624c37220d0000000000000000000d23384d62788daabbcec9a5907a65503b25100000000000000000000000000000000000000000000000000000152a40556a7f95aabfd4bfab9a918a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a806b56412c1601000000000b20344859687e919da5aa9f998777624c382816030000000000000000000000000000000000000000000000000000000000000000000000000000011426374859667c8d9b98887a675f4d493c38363537393e4a576176869cb2c2c0b09b85705c4a36220d0000000000091e32465763798a9ea1937e695a4835200f0000000000000000091e324556677d92a0b2becacdc4b8b3afb0b4b39e95817260768ba8bac5b09a85705b372715010000000000000a1e334657657b8c9fb4bbc4b8b3a39b959393959ba3b1b5beb2a49c8979635b4939291703000000000000000b2035485a677d929eb5bcc6b9b4a69e9894939495999ea8b2b6b1a59d8a7d68604e40301d0900000000000c21364b6176899eb4bcab947f69543f2a1400000000000000000c2135495b6d8298a8baab9c8775604b3c2c190600000000000000000000000000090f11161e273751677c91a6bccab49f8a75604b36210b000000000000000013283d53687d92a8bdad98836d58432e180000000000000000000000000000000000000000000000000b2034485972879db2c4a7927d67523726140100000000000000000b20354b60758a9fb4cabda8927d68533d2813000000000000000000000000000000000000000000000000000012283d52677d92a7bcd2c9b8aba69f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f98836e59432e19000000000005182b3b4e60687c878d8e8b8377625947341a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000009192b3b4c5e667c858378645c4d41352c23212021232e394657667c91a4b6c8b4a38e79644f39240f0000000000031628394a5b677c919f9f8b78624d3d2d1a07000000000000000b21364b6075889db3becfc7bab4a69d9a9a9fa8b4a096816c74899fb4c7b29d88725544311d080000000000021628384c6176889daabbc6b8a69d9085807d7d80868f9ca4b3bfb6a79e8879635746331e1200000000000004182a3a4d62788a9eb4bcc5b9a89e9388837f7e7e808489939da5b4b7a89f8d7e685e4c38240f000000000114263752677c92a8b9b59f8c78624d38220d0000000000000000061a2c3d4d62788a9fb4b6a595806a5a4935201100000000000000000000000000000000030e24394e63798ea3c5cebbaa8e79634e39240e000000000000000010263b50657b90a5c9b09a85705b38271502000000000000000000000000000000000000000000000005182b3b576c8197acc7ad98836d5544311d080000000000000000081d31445572889db2c7bfaa95806a55402b15000000000000000000000000000000000000000000000000000010253a50657a8fa5c8d9d3c9bfbbb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b09b86715b3929170300000000000d1d31424e5f67727879766e6259483b2a180000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2f404c5e66706e625a4a3e3020190e0c0b0c101b29394a6073879cb1c7c1ab96806b563a29170400000000000b1b2d3d4d5f6d8297a699836e5c4a36210a0000000000000215273752677d92a6b7cbcdbaa99f928885858a949fa99f927d72889db2c7b49f8a75604b35200b0000000000091e3245566a7f94a6b7c8b9a89d887b706b68686b717a8699a1b3c0b8a69c8675614b402f190900000000000a1f3347586c8196a8b9ccb9a79e8a7e746d6a68696b6f757d87959faab7ab9f917c66513c261100000000081d3144556e8398adc6b09a85705a4834200b0000000000000000000f203448596a7f95a5b7b49f8b78634d3f2e1c08000000000000000000000000000000000c21364b61768ba7b8ccc8a6917b66513c261100000000000000000e23384d63788dabbcb29d88735645311d0900000000000000000000000000000000000000000000000011263c51667c91a9bab39e8974604b35200b0000000000000000011527375b70859ab0c5c2ad98826d58432d1800000000000000000000000000000000000000000000000000000d23384d62788daabbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb39e89735746331e0a000000000000142431404d515b636461584d483b2b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000012222f404c515b584d483c2d20130600000000000b1c3043546c8196abc1c6b19c86715846331f0a0000000000000f1f30404b6176889da18e79644e382816020000000000081d3144556f849aafc4d1c1b49f8b7d746f70767f8b9ea69f8b78869bb0c6bbaa8d78624d38230d00000000000b21364b6075889db3c4c8b49e8a79665e555353555d65758399a2b3c4b6a498826e5e4c37271502000000000c22374c61778a9fb4c6c3b39e897a6860555553545556606875808c9da5a69b8575604b36210b000000000b20354b6074899eb3c5a9947f69543c2b190500000000000000000005192b3b4b6075879db2baa999836e5d4b372312000000000000000000000000000000000a1e33465773899eb3c8bea8937e69533e291400000000000000000b20364b60758a9fb5b49f8a75604b36200b0000000000000000000000000000000000000000000000000c21364b61768a9fb4b8a78f7a644f3a250f000000000000000000182d43586d8298adc2c5af9a85705a37271501000000000000000000000000000000000000000000000000000b20354b60758a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78b76614c36210c00000000000006142230393c494d4f4c473a342b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000412222f383b464338342b1d10020000000000000013253652677c91a7bccab59f8b76614c36210c000000000001152533404d57697f94a998826d5645321e0900000000000b20364b60758a9fb4c9c8b4a3927d68605557616a7b889ea89b85849aafc4c8a58f7a65503a2510000000000012273c52677c91a6b8cbbbaa947f6a5b4c403e3e3f4b576173849aa6b7c3b2a0917c665544311d080000000013293e53687e93a8bacab7a5927d685c4b44373e3f38454b56606b7a8794968878625645321e090000000010253a4f657a8fa7b8b8a78e79634e39240e00000000000000000000000d1e324556677d92a4b6b3a18f7b6550402f1d09000000000000000000000000000000031729395c71869bb1c6c0ab96816b56412c160100000000000000091d32455673889db3bcab8d78634d38230e0000000000000000000000000000000000000000000000000a1e32465770859aafc5aa95806a553a2917040000000000000000162b40556b8095aac0c7b29d88725544311d0800000000000000000000000000000000000000000000000000081d31445572879393939393939393939393939393939393939393939393939393938e79634e39240e0000000000000004121d242c35383937332a20180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d2426302e2220190d00000000000000000010253b50657a90a5bacfbcab8f7a644f3a250f00000000000f1f3343505f6770788da29e8975604b36210b00000000000f24394f64798ea9bacdc5b09b85705f4b44464b5d657a8a9ea39b8a9fb4c9bda7927d68523d28130000000002152838586d8298adc4cab49f8b76614c3d2f28282e3946556177889db3c1beb29c8774604b36201100000003172939586e8398adc6c7b29d8773604a3e31272929283238454b5d64757e81786259483828160300000000132536556a7f94aac5b39e88735b4a36210c0000000000000000000000031628384b6073869cb1bfb09b85705e4c38241100000000000000000000000000000000192f44596e8499aec3c3ae98836e59432e190000000000000000021528385b70859bb0c9a5907a65503b251000000000000000000000000000000000000000000000000003162939556a7f94aac5b09b85705847331f0a000000000000000013283d53687d92a8bdc6b49f8a75604b35200b000000000000000000000000000000000000000000000000000114263751667c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e78624d37220d0000000000000000000a0e19212324211f170c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f111b190d0b050000000000000000000310253a4f647a8fa4b9dac9a7917c67523c271200000000071a2d3d50616a7c85899eb3a8907b66513b2611000000000012283d52677d92a7c7d7bea9937e69544131323f4b5c667c909fa99fa9bacdbfaa957f6a55402a1500000000091d32455672879cb2c7c4af9a856f5847331f13131b29374759667c91a3b5c9b6a4937e68533f2e1c0800000a1e33465773889db3c8c0aa95806b5443301d151314151d28323f4b5761696b625a493b2b1a0a00000000071c3043546f8499aec4af99846f5a3d2d1a070000000000000000000000000a1c304354677c91a4b5b5a3917c6651402f1c09000000000000000000000000000001172c41566c8196abc1c5b09b86705b392816030000000000000000192e43586e8398adbda8927d68533d2813000000000000000000000000000000000000000000000000000f24394f64798ea7b8b49f8b76614c37210c000000000000000010263b50657b90a5b0b0b0aa8d77624d38220d00000000000000000000000000000000000000000000000000000924394d5e666868686868686868686868686868686868686868686868686868686862594834200b0000000000000000000000060c0e0f0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060300000000000000000000060b161e2e3e52677c91a7bcd1bda8937d68533e2813000000000c21364a5b6a7f919a9ea7b9aa95806a55402b15000000000014293e54697e93a9bed9c9a48e79644f39241e2e3d4c5e6c8197a6b4bac7d7c2ad97826d58422d18000000000b20364b60758b9fb5cac0ab96816b563a2a1701000b192a3b4c5e71859bb0c5c3b19c86715d4b37230e00000c21364c61768ba6b7cbbba6907b66513625211e1615110c161e2e39464b54564d493c2b1d0d00000000000b20354a6074899eb3c0aa95806b55402b1600000000000000000000000000011426364a6073869cb1c1b09b85715e4c38230f00000000000000000000000000000014293f54697e94a9bec8b39e88735745321e090000000000000001162b41566b8096abbfaa95806a55402b15000000000000000000000000000000000000000000000000000b20354a6074889eb3bcab917c67513c271200000000000000000e23384d63788d9b9b9b9b9b8f7a65503a251000000000000000000000000000000000000000000000000000000a1d30404d51535353535353535353535353535353535353535353535353535353534d483b2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040b0e1a2129323e4b5c6d8398adc2d3bda8937e68533e2913000000000e23394e63798c9fb0b3b9c5ad98836e58432e190300000000152a40556a7f95aabfcfbcab8b76614c3621101f2f404b6175889db2c3d3dac4af9a856f5a372614010000000d23384d62788dabbccfbda8937e68533e29130000000c1d304051667c91a7b9c9b5a48f7a65503a251000000d23384d62788da2c4d4b8a28d78634d3c393632282b26211e171b2932363f4138352b1e0e0000000000000e23384d63788da7b8c4a6917c66513c26110000000000000000000000000000081c304354677c91a6b7b5a3907b66503d2d1a07000000000000000000000000000011273c51667c91a6bbcbb8a68b76604b36210b000000000000000013293e53687e93a8bdad98826d58432d1800000000000000000000000000000000000000000000000000071c3043546f8499aec9ab96816b56412c1601000000000000000b20364b6074858686868686857c66503b2611000000000000000000000000000000000000000000000000000000122230393c3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e37342b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080c181f222c3539464b5c647a8c9fb4cad7c6a6917c67513c271200000000162b40566b8095abbcc9ccc4af9a846f5a452f1a0500000000152b40556a8095aabfcab49f8a755846331f0a121e334657687e93a5b6cadcc7b29d87725544311d080000000f24394e64798ea3c9dabca7927c67523d2712000000001220364b6075899eb3c9c2ac96816c573d2c1a06000f24394f64798ea4b9cbb6a18c766154514e4b4539403b36332924211e21292c2320190e0000000000000011273c51667c91a6c5b8a68c77624d37220d0000000000000000000000000000001325364b6074889db2c1af9a846f5b4a36210a00000000000000000000000000000f24394f64798ea4c6d5c4a38d78634e38230e000000000000000011263b51667b90a6bbaf9a85705a3727150100000000000000000000000000000000000000000000000000132536566b8095abc0af9a856f5a45301a0500000000000000091d3245566071717171717171665e4c38230f00000000000000000000000000000000000000000000000000000004121d2427292929292929292929292929292929292929292929292929292929292220190d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101b222a34373d494e57616a7a889eaabbcecdbaa88f7a654f3a251000000000192e43596e8398aec9dad9c3ae99846e59442f19040000000014293f54697e94a9bec9b49f89745f3a291704031729394b6074879cb2c6d6cab49f8a75604b35200b0000000f243a4f64798fa4b9cebca6917c67513c271200000000081d3144556d8298adc2c7b29d87725b4935210c0010253a4f657a8fa4bacbb5a08b756c69676460575955504c463939362d211e160d0b060000000000000000152a40556a7f95aabfb39e8873594834200b000000000000000000000000000000081d3144556a7f94a9bab3a28e79634e38281603000000000000000000000000000c21374c61778ca8b9cdbba5907b66503b261100000000000000000e23394e63788ea3c5b29d88725544311d080000000000000000000000000000000000000000000000000013293e53687e93a8bdb29c87725d47321d080000000000000002152838454b5b5b5b5b5b5b5b504c402f1c0900000000000000000000000000000000000000000000000000000000000a0f11131313131313131313131313131313131313131313131313131313130d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d242e373b474c545b636b75808b9ea6b8c8d8c9b49f8975604b36210b00000000182e43586d8398adc1ceccbdab95806b56402b16010000000013283d53687d92a8bdcab49f8a755846331f0a000b1d314455697e93a8b9cccebbaa8d77624d38220d0000000e24394e63798ea3c9dabda7927d68523d2813000000000215273752677c91a7c6cab6a58d78634e38230e000e24394e63798ea3c8d9c3ae9983817f7c7976726e6a666157554e4a3d3632281c14080000000000000003182e43586d8398adc2b09b85705b3b2b1805000000000000000000000000000000011527374c61778a9fb4c0ac97816c5645321e09000000000000000000000000000a1f33475874899eb4c9bda8937d68533e281300000000000000000c21364b61768ba7b8b49f8a75604b35200b0000000000000000000000000000000000000000000000000012273d52677c92a7bcb39e88735e49331e0900000000000000000a1a283236464646464646463b382f22110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f2f383e4b4f59616970788088959faab8c5d5cfbcab99836e5645321e090000000013283d53687d92a3b4bbb9b39f8e79644e39240f000000000011263b50667b90a5c4cfbcab8b76614c36210c00011527374b6176899eb4c9d8c8a48f7a654f3a25100000000d23384d62788dabbccfbea9937e69543e291400000000000e23384e63788da8b9cdc3a7917c67523c2712000d23384d62788daabbcec7b3a1999694918e8b8784807b76706a635b534b45393026180d000000000000021528385b70859bb0c3ad98836e58432e190000000000000000000000000000000000091f3347586d8298adc4b39e8975604b36210c0000000000000000000000000004172a3a5c71879cb1c6c0aa95806b55402b160000000000000000091e32465773889eb3bbaa8d78624d38230d0000000000000000000000000000000000000000000003090b15273c52677c91a7bcb39e89735e49341e090000000000000000000a151d203131313131313126231c110400000000000000000000000000000000000000000000000000000000000000000000000000000000090f112020202020201f1b12100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1c2a34404c515c646e777e858d969ea7b4bbc8d5d0c0b59f8d7a644f38281602000000000b20364b607485989faaa79e95816c5c4a36210d00000000000d22374c62778ca6b7cbc9a38e79644e39240f0000091e3346576c8197acc4d5bca7927d67523d28120000000b20364b60758a9fb5cabfaa95806a55402b1500000000000b20354b6075899eb4c9c0aa95806b55402b16000b20364b60758a9fb4cad0bfb3aeaca9a6ab9f9d9995908b857f79716860574b43362b1d0e0000000000091d32455673889db3c0ab95806b56402b16010000000000000000000000000000000004182a3a50667b90a6b8b9a7927d67523a291704000000000000000000000000001a2f44596f8499aec4c2ad98836d58432e180000000000000000031628395b71869bb0c8a58f7a65503a25100000000000000000000000000000000000000000000a161e2127313f54697e94a9beb29c87725d47321d080000000000000000000002090b1c1c1c1c1c1c1c110f090000000000000000000000000000000000000000000000000000000000000000000000000000000004121d2427353535353535343027251e130100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c3a474c5e66707a838b939ba3abb3b8c5ced6ccbfb3a297826d5c4a361a0a0000000000091d3145566176828b8e8e897f72604b3e2d1a0700000000000b1f34485973889db3c8bca7927d67523d281200000317293950657a90a6b8cbbfaa947f6a553f2a15000000091d32455673889db2c8c3ae98836e593a29170400000000081c30435471869bb1c6c3ae98836e59432e1900091d31455672879cb2c7d4c3b7b2a6a9acb0b3b2aeaaaa9f9b958e867e75686054483b2b1e0e000000000b20364b60758a9fb5bda8937e68533e29130000000000000000000000000000000000000c20354b6074889eb3c5ae99846e5846331f0a00000000000000000000000002172c42576c8197acc1c5b09a85705b372715020000000000000000192e44596e8399aebda7927d68523d281300000000000000000000000000000000000000000a1b28323637444b5d6f8499afc9af9a846f5a452f1a05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122230393c4a4a4a4a4a4a49453c39301c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2c3d4959616f7c858f989faab0b5c1c8ccd5ccc6b9b3a1998474604b3e2d1b000000000000021527384758616d767979756a60544330200f00000000000005182a3b596e8399aec7c1ac97816c573f2f1c0800000b20354b6074889db3c8c2ac97826d57422d18000000021528385a6f8499afc4c7b29c87725846331f0a00000000011426365a70859aafc5c4af9a856f5a45301a0002152738596e8399aec3cab7a59d9093979a9ea7a7acb2b4b0aaa39b93887e736259483c2b19090000000d22374d62778cabbcbba5907b66503b2611000000000000000000000000000000000000081d3144556c8196acc5b49f8a76614c36210c00000000000000000000000000152a3f546a7f94a9bfc8b29d88735544311d080000000000000001162c41566b8196abbfaa957f6a55402a150000000000000000000000000000000000000003162839454b595560677b8d9fb5bcab947f6a553f2a150000000000000000000000000000000000000c151b1e202020202020202020202020202020202020202020202020202020200f0d0700000000000000000000091d30404d516060606060605f5a524d41302618080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a495b637783909ba3adb4bbc8c9d2d3cac5b8b3a89e938375615645322010000000000000000a1a293a474c5761646360564b43362614010000000000000012273d52677d92a9bac8b29d88735d4b37230f0000081c3043546e8398adc3c4af9a846f5a36251300000000152a40556a7f95aac4cab49f8b76614c36210c0000000000192f44596e8499aec3c6b09b86715b46311c000014293e54697e93a9c3c7b29d877c7e8185898d92979da5abb3b5b1a69e938477625a483727150200000e24394e63798ea3c9b9a38e79644e39240f000000000000000000000000000000000000011426374f657a8fa7b9baa9917c67513c27120000000000000000000000000012273c52677c91a7bccab49f8a75604b36200b000000000000000014293e54697e93a9bead97826d58422d1800000000000000000000000000000000000000091e324557606e72757c899eabbcb59f8c79634e38230e00000000000000000000000000000000000f1d2930333535353535353535353535353535353535353535353535353535353524211a0f0100000000000000000f24394d5e667575757575757470675f4b43362614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475963798799a1b0b4c1caced7cdc9c2b6b1a79e95897e726157463828150200000000000000000c1c293339464c4f4e4b45383026180800000000000000000c21364b61768a9fb4c9b7a6907b65503d2c1a060001142636566b8096abc0c7b29c87725443301c070000000f253a4f647a8fa6b7cbbcab927c67523b2a180400000003192e43586e8398adc3c6b19c87715c47321c00000e23384e63788da4b6cab7a58c77696c7074787d82878e969ea7b1b8b3a29a8778625544311d08000010253a50657a8fa5bab7a28d78624d38230d000000000000000000000000000000000000000b20354b6074899eb3c7ac97816c573c2c19060000000000000000000000000f253a4f647a8fa4c7cfbcab8d78624d38230d000000000000000011263c51667b91a6bbaf9a856f5a362614010000000000000000000000000000000000000b21364b6075838789919ea7b8b7a699836e5b4935210c000000000000000000000000000000000c1d2d3b44484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a39362d200f000000000000000011273c51667c8d8a8a8a8a8a89857d6d605443301c110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4c6177879da5b3bfc8d1d4cac6b9b4ada49c938980776960544639291a0a000000000000000000000c171f29333639393632281c14080000000000000000000a1e3346576e8398adbfc4ae99846f5b49362113000013293e53687e93a8bdc9b49f8a75604a35200b0000000b20354a6073889db3c9c9ae99836e5947341f0d000000041a2f44596f8499aec4c6b09b86715b46311c00000c2135495b72879cb2c7c3a8937e68575b5a62676c72798189979faebab4a59c8674604b36200d000011263b51667b90a6bbb6a18c76614c37210c00000000000000000000000000000000000000081d3144556e8399aec3b29d87725a4935200c0000000000000000000000000d22374c62778ca9bacdc9a5907a65503b251000000000000000000f24394e64798ea3c6b29d87725443301c0800000000000000000000000000000000000010253a4f657a8f9d9fa8b3b8b4a59d8877624c3d2c1a060000000000000000000000000000000015293b4c585d606060606060606060606060606060606060606060606060606060604e4a3e2d1a07000000000000000f24394d5e6a7f94a09f9fa89e9a918272604b3f2e1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22374b5d6e8399a5b7c3d0d7cdc3b6b2a89e978f877e756b62594b4336291b0b000000000000000000000000040b171e212424201d150a0100000000000000000000031729394e64798ea1b3c8b59f8c79634e42311e0e0011263b51667b90a6bbcebaa98c77624d37220d000000071c3043546b8096abbcc9b49f8a77614c3b2b1909000006192c3c5b70859ab0c5c4af9a846f5a452f1a0000061a2c3d54697f94a9bac6b19c86715d4b494d52575c646b7681939caec1b5a4937e68533b2b18050011273c51667c91a6bbb5a08b76604b36210b000000000000000000000000000000000000000114263753687e93a8c4b6a58d78624d38230d0000000000000000000000000b20354a60758a9fb4c9bda7927d68523d281300000000000000000c21364c61768ba8b9b49f8a75604b35200b0000000000000000000000000000000000000e24394e63798ea3b2b0ada99f978779635947341f0f00000000000000000000000000000000001b3044586a7375757575757575757575757575757575757575757575757575757575705c4a36210d00000000000000091d30404f616d8297a2b4b9b4afa0947f6a5d4b3b2a18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364f657a8fa1b3c3d4d4c6b9b4a59d938a827a726960574c473b3026180b000000000000000000000000000000030a0c0f0e0b0902000000000000000000000000000b22364a5c6f8499aabbbcab99846f604e3c2c1e0e0e23394e63788ea3c5d5c7a48f7a644f3a250f000000001325364d63788c9fb5c8baa996806b59483726150a01092035495a73889eb3c8c2ac97826d57422d180000000f22374c61778b9fb4c6b5a4907b655443383d3e4a4e58616c7e93a3b5c2b09b8570594834200b0012273c52677c91a7bcb5a08a75604b35200b00000000000000000000000000000000000000000d23384d62788da6b8c3a8937d68533e2813000000000000000000000000071c30435472879cb2c7bfaa957f6a55402a1500000000000000000a1f33465874899eb3bbaa8d77624d38220d0000000000000000000000000000000000000c21364c61768b9d9c9b98928a8176635b4a3b2a180100000000000000000000000000000000001e33485d73888a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a644e39240f0000000000000000122232434b6074849aa5b6c5beb49f8c7b6559473626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546d8298adbfcfd4c3b7a89e93877e766d655d534b4539342a1c140800000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4e64798c9fb4c3b3a1927d685b493c2c1c1321364b61768ba7b8ccbca7927c67523d271200000000082035495a6e8398aabbc7b49f8a7762554432281c141929394d62788da7b8ccc3a8937e69533e29140000000a1f3447596c8196a8b9c2b19b8573604b3f2f2d363a464c6070859bb0c5b5a38c77624d37220d0011273c51667c91a6bbb5a08a75604b35200b00000000000000000000000000000000000000000b2035495a73889eb3c1ac97816c57422c17000000000000000000000000001325365a6f849aafc4c2ad97826d58422d1800000000000000000417293a5c71869cb1c8a48f7a654f3a25100000000000000000000000000000000000000a1f3346587287888785837d776c61584a3d2d1d0d0000000000000000000000000000000000001b30465b70859b9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f917c66513c2711000000000000000004151d3145566176879ca7b9c8bbaa9d8877625443301c11000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074889eb3c8d7c7b7a59d8a7e746961574f4b3f3632281f180d010000000000000000000000000000000000000000000000000000000000000000000000000000001021364a5c6b8096a5b6bfb49e8a79635a493c30251e32465773889eb3c8bfa9947f6a543f2a150000000006192c3c4e63798b9fb4c2baa89a8473604b453830262d3746576a7f94a9c5cab6a58e79634e39240e00000004182a3a4c61778a9eb4c0b5a3947f695d4c403228293342556a7f94aabfc1a48f7a654f3a25100011263b51667b90a6bbb5a08b76604b36210b000000000000000000000000000000000000000006192b3c5a6f8499afc4b09a85705b3b2b1805000000000000000000000000182d42576d8297acc2c4af9a856f5a362614010000000000000000192f44596e8499aebca7927d67523d28120000000000000000000000000000000000000417293a5769727372706d6862594c473a2d1f0f00000000000000000000000000000000000000182e43586d8398adb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5a9937e69543e29140000000000000000000215273847586379899eaabbc8b7a69a8472604b3f2f1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788da6b8cbcdbaa99d87796960554c4639372e211e160a050000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e4b6075879ca8b9b9a89d8778635a4a43362e28395b71869bb0c6c1ac97826c57422d1702000000000e2135495b6b8096a4b6c6b4a296806d60564b43363e4a556175889db3c8c5b29d87725b4a36210c000000000c1f344759697f94a2b4c1b49f8c7b655e4b453939383f53687e93a8bdc8a6917c67513c27120010253b50657a90a5bab6a18c76614c37210c000000000000000000000000000000000000000000162b40566b8095abc0b39e8974594834200b000000000000000000000000152a3f556a7f94aabfc7b29d87725443301c080000000000000002172c41576c8196acbfaa947f6a553f2a15000000000000000000000000000000000000000c1c3a4b575d5e5d5b58534d483b332a1c0f0100000000000000000000000000000000000000162b40566b8095abc0cacad4cac7bdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdab96816c56412c17010000000000000000000a1a2a3a495b657b8c9fb4bcc4b4a2957f6a5d4b3b2b190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798ea4c4d5c9b49f8a79635b4b44373329231c11090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1e32455763798a9eabbbb7a59d87786960544b3f3d43596e8398aec3c4af99846f5a442f1a0000000000061a2c3d4b6075869ca8b9c0b09e96827466605458595c64738298a6b7cbb8a7937e69543d2d1a070000000004182a3b4b6073849aa6b8bbaa9e8a7c6b6057514e4e515d6d8297adc2bbaa907a65503b25100010253a4f657a8fa4bab7a28c77624d37220d00000000000000000000000000000000000000000012273c52677c91a7bcb9a78c77624d37220d00000000000000000000000012283d52677d92a7bcc9b49f8a75604b35200b0000000000000000142a3f54697f94a9beac97826d57422d1800000000000000000000000000000000000000001d2d3a4448484746433d37342b1f180c00000000000000000000000000000000000000000013283e53687d93a8bdd2d4c3b7b2a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a899846e59442f1904000000000000000000000c1c2c3d4b5d687e939eb0bfc0b49f8d7b655948372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90a5bad0c1ac96816c5b493d31271e170b080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394a5b667c8d9faabbb7a59d8a7e72655d565250566b8196abc0c7b19c87725c3b2a180400000000000f1e32455663798a9ea9b9bdb0a098867b746f6d6f72798498a0b2c4beb39e8975604b36210f0000000000000c1c3043546278889da8b9b9a89e8b80756c666463666d7b8b9fb4c9b49f8b77614c37220c000f24394f64798ea4b9b8a28d78634d38230e0000000000000000000000000000000000000000000e23394e63788ea3c5c5a5907b65503b261000000000000000000000000010253a50657a8fa5c8cebbaa8c77624d37220d000000000000000012273c51677c91a6bcaf9a846f5a36251300000000000000000000000000000000000000000f1d282f323332302e282220180d040000000000000000000000000000000000000000000011263b50667b90a5bbd0cab7a59d939393939393939393939393939393939393939386715c47311c0700000000000000000000000f1f2f3f4e606b8096a1b3c2bcab9d8877625544311d110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5bacfbba6917c66513d2c1d150903000000000000070d0f0e0c060000000000000000000000000000000000070d0f1415120c0a040000000000000000000000000a1b2d3d4c5e687e8c9faab7b7a89e93847b726c676564697e93a8bec9b49f89745947341f0b000000000003162838495b657b8b9ea8b7beb2a49c9088848384878e9aa2b2bfc1b2a0937e685745321e0900000000000001142636485a647a8a9ea7b6b9aa9f9588817b79787b828c9fa9babcab99846f5847331f0a000d22384d62778da2c5b9a48e79644f39240f0000000000000000000000000000000000000000000c21364b61768ba7b9bca7927d67523d28120000000000000000000000000d22384d62778daabbcec8a48f7a644f3a250f00000000000000000f243a4f64798fa4c6b29c87725443301c0700000000000000000000000000000000000000000b141b1d1e1d1b18130d0b050000000000000000000000000000000000000000000000000e23384e63788da3c4d5c7b29d877e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7d67523d281200000000000000000000000001112131424b60728399a3b5c4b8a69a8473604b402f1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea3c3d3b9a48f79644f3a240f0200000000000004101b22242321190e000000000000000000000000000003101b2224292b28211f170c0000000000000000000000000f1f30404e5f687d8c9da5b2b9b4a29a9087817d7a797a8095abc0cdbaa98c77614c37220c0000000000000a1a2c3d4c5d667c8a9da5b5bcb5b1a79e9a98999ca5afb4c0beb2a398826e604e392816030000000000000008182b3c4a5c657b899ca5b4bbb4a69e96918e8d90979faababbb49f8c7a644e3a2a1804000b20364b60758ba7b9bba6917c66513c27110000000000000000000000000000000000000000000a1e32465774899eb3bea9947f69543f2a140000000000000000000000000b20354b60758a9fb4cabca7927c67523d271200000000000000000c22374c61778ca8bab49f8a75604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768ba6b8cbc8b39d887368686868686868686868686868686868686868675f4d3a25100000000000000000000000000003131c3043546175859ba6b7c4b4a295806b5e4c3b2b190900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768ba4b6cabba5907b66503b26110000000000000c181f2e363a38352c1e130500000000000000000000000a161e2d36393f403d3733291c12040000000000000000000001122231414e5f677b8798a0b0b5b4afa59c9692908f8f959eb0c3d7c7a48f79644f3a240f000000000000000f1f2f3f4c5e667a87989fabb3c0b8b3afadaeb2b6c3c3b6b2a0988576614c42311b0a0000000000000000000e1e2d3e4b5d657987969faab4b8b3aca6a3a3a6adb4bbb5aa9f947f695c4a361c0c0000091d32455674899eb3bea8937e69533e2914000000000000000000000000000000000000000000031629395c71869cb1c0ab96816b56412c16000000000000000000000000081d31445572889db2c7bfa9947f6a543f2a1500000000000000000a1f34475974899fb4baa98c77624d37220d00000000000000000000000000050b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0a0300000000000000000000000000091e32455673889eb3c8cab59f8a7560535353535353535353535353535353535353524d41311e0a00000000000000000000000000000114263646576278889da9bac0b59f8d7b65594837261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e33465772879cb2c7bea9947e69543f2e1c0e05000108121c2a333e4a4f4d493c312313010000000000000000000a1b28323e4a4e5455524c473a302212030000000000000000000004132331414d5d657683909ba3aeb4b6b2aba7a5a4a4abb0bcc8c5c5a7917c67523c2712000000000000000111212f404c5c6476828d9aa2aab0b4bac7bac4b8b3ada59c918274615846332414000000000000000000000010202e3f4b5b6375808b989fa9aeb3b8c4b8c3b7b2aca39b8c7f6a614f3e2d1a000000021528385c72879cb1c0ab95806b56402b16000000000000000000000000000000000000000000001a2f44596f8499aec2ad98826d58432d18000000000000000000000000011426375a70859aafc5c1ac97826c57422d17020000000000000004182a3a5c72879cb1c7a48f7a644f3a250f0000000000000000000000000d182022222222222222222222222222222222222222222222222222211e160b000000000000000000000000031628385b70869bb0c5cfbcab8d78634d3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3a3123130100000000000000000000000000000008182939485a647a8b9fabbcbcab9e8877625544311d120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939576c8197acc2c5af9a85705d4b3a2c201918141c202f3a474c5c64635b4e41311f0f000000000000000003162839454b5c64696a6761584d403021110000000000000000000000051323303f4b58616e7b8590999faaacb1b4bcc9b9b8c4b8b3afaba7947f69543f2a1400000000000000000312222f3e4a58616d7a848e959b9fa9a4a4a3a69e9891877d726056463a29170600000000000000000000000211212e3d4957616b79828a93989da6a2a3a2a59d9790867b6a614f4332200f000000001a30455a6f859aafc2ad98836d5838271502000000000000000000000000000000000000000003182d43586d8298adc2af99846f5a442f1a00000000000000000000000000182d43586d8298adc2c4af99846f5a442f1a0000000000000000001a2f445a6f8499afbca7927c67523d271200000000000000000000000d1d2b34373737373737373737373737373737373737373737373737373632291b0b000000000000000000000000192e43596e8398aec3dac9a5907b65503b2929292929292929292929292929292928251e130500000000000000000000000000000000000b1b2b3c4a5c677d8d9fb5beb8a69a8473604b402f1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8fa4b6c8b4a28f7a6558493c342b2d263035404c58616f7978685f4e3d2d190900000000000000091e324557606e797e807d76675f4d3f2e1c0800000000000000000000000512212e3a474c5d65707b838a92979c9faba3a4a3a2a69e9a9590897d68523d28130000000000000000000412202d3a464c5c646f7980868a8d8f8f8e8c88827c746760544538291b0b0000000000000000000000000003111f2c39464b5b636d777e83888b8c8e8c8b87827b71655d4f433225140100000002172c42576c8197acc1b19b86715645311d09000000000000000000000000000000000000000002172d42576c8297acc1af9a85705a45301b00000000000000000000000000152b40556a8095aabfc6b19c87715c3a2a18040000000000000002172d42576c8297acbfa9947f6a543f2a150000000000000000000005182b3b484d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b46392916030000000000000000000001162b41566b8096abc0d2bda8927d68533d2813131313131313131313131313131312100a01000000000000000000000000000000000000000d1d2d3e4d5f6a7f94a0b2c0b4a295806b5e4c3b2b19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6073869cb1c0c0b29c8776625a4d483c4236434b505e6676838f8c7d685b4a372715020000000000071b2d3e4b6075828e949592897d675d4b37230c00000000000000000000000003101c29333f4b505e666e777d82868a8c8d8e8e8d8b8885807b7468604e3a25110000000000000000000002101b29333e4b4f5b636a717578797a7876746d6760554a4336281a0b000000000000000000000000000000010f1b29323d4a4e5961686e737677787776726d665e504b3f32251507000000000013293e53687e93a8bdb49f8a75604b36200b000000000000000000000000000000000000000001172c41566c8196abc1b09b85705b46301b0000000000000000000000000013283d53687d92a8bdc9b49f89745947341f0a0000000000000000152a3f546a7f94a9bfac97826c57422d17020000000000000000000b2034485962626262626262626262626262626262626262626262626262615746321e0a000000000000000000000014293e53697e93a8bed3c0aa95806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000001020304150616d8298a2b4c0b59f8d7c665948372715010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354677d92a2b4c5b6a59b85786b625a5957585460656f7c8899a19f8b79635544311d0800000000000d22364a5c6e8298a0a9aaa79e8c7b654f3a2a1804000000000000000000000000000c171f2e37404c515861686d717577787979787673706b6660554e41311e0b0000000000000000000000000b171f2e373d494e55556063646563616054514b44373025180a0000000000000000000000000000000000000b161e2d363a474c53595660626362605657504c40372e21150700000000000010253a50657a8fa5c3baa98e79644e39240f000000000000000000000000000000000000000001162b40566b8095abc0b19b86715c46311c0000000000000000000000000010253b50657a90a5c9cdbaa88c77614c37220c000000000000000012273d52677c92a7bcaf99846f5a442f1a000000000000000000000d22374d627777777777777777777777777777777777777777777777777775614b36210c000000000000000000000011263b51667b90a6bbd0c2ad98826d58432d180000000000000000000000000000000000000000000000000000000000000000000000030a101b222433434b6074849aa5b6bcab9e8978625544311d120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364d5f70849aa7b9c3b5a39b8a8078716e6d6d6f747b84909da6b3a99b8574604b36200b00000000000f24394f647a8ea0b2bec5b9aa9b85705847331f0a000000000000000000000000000004111c232f383a474c53575560616364636260565a56514b4437312313010000000000000000000000000004101b222c363937444b4d4f4f4e4c4a43363531271c13080000000000000000000000000000000000000000030f1a212a34373e38454b4d4e4d4b45383b382f231c1103000000000000000c21374c61768ca5b7c7a8927d68533d2813000000000000000000000000000000000000000000152a40556a7f95aabfb19c87715c47321c000000000000000000000000000e23384d63788dabbccfc6a48e79644f39240f00000000000000000f253a4f647a8fa4c7b19c87725c3b2a18050000000000000000001e33495e73888c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c806b55402b1600000000000000000000000e24394e63798ea3c5d6c5af9a85705a372715010000000000000000000000000000000000000000000000000000000000000000000b161e212d36393e4045566177879da7b9b8a79b8473604b402f1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081830414d6278899ea9b8c2b5a89e958d8783828284899099a1b2b7c4b5a395806b55402b160000000000152a3f556a7f94aabecfd6c8b4a38c77614c37220c0000000000000000000000000000000008121d242a33373d37444b4c4e4f4e4d4b4538403b36312719130500000000000000000000000000000000080f1a2123273135383a3a3937353025201d1509000000000000000000000000000000000000000000000000070c181f222928323637393736322826231c11080000000000000000000a1f33475872879db2c1ac97816c573c2c19060000000000000000000000000000000000000001162b40566b8095abc0b19c87725c47321d000000000000000000000000000b20364b60758a9fb5c4bca6917c67513c271200000000000000000d22374d62778ca9bab49f89745947341f0b0000000000000000001b31465b70869ba2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a298826d58432d1800000000000000000000000c21364b61768ba7b8ccc7b29d88725544311d080000000000000000000000000000000000000000000000000000000000000003111b2932363e4a4e53555655596379899eaabbb4a296806b5e4c3b2a18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132035485a657b8b9ea7b6c2b9b4aba49c999798999ea7afb3bfcbbfb3a39a85705a45301b0500000001162b41566b8096abc7d7e2cdbaa98d78634d38230e000000000000000000000000000000000000090c181f222827313537383939383632282b26201d15090000000000000000000000000000000000000000060c0e151d202324252321201c130b0801000000000000000000000000000000000000000000000000000000040a0c13161e21222322211e16110f09000000000000000000000004172a3a586d8297adc9b29c87725a4935200c0000000000000000000000000000000000000001172c41566c8196abc1b19c86715c47311c00000000000000000000000000091d31455673889daeaeaea9947e69543f291400000000000000000b20354a60758a9fb4baa98c77624c37220d000000000000000000192e43596e8398aeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeae9a85705b36251300000000000000000000000a1e33465773899eb3c8cab49f8a75604b35200b0404040404040404040404000000000000000000000000000000000000000614222f39464b555c64686a6b6a6863657c8c9fb4bdb59f8d7c665948341f14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4b5d657b899ca4b4b9c6c2b6b1aeacadafb3b8c5c7c5b8b3a1998576614c37210c000000000013293e53687e93a9bacacec3b49f8a76604b36210b0000000000000000000000000000000000000000040a0c13151d202223242423211e1616110b080200000000000000000000000000000000000000000000000001080b0e0f100e0c0b07000000000000000000000000000000000000000000000000000000000000000000000002090b0d0e0d0b090200000000000000000000000000000012273d52677c92abbcb6a58d78634d38230e0000000000000000000000000000000000000002182d42576d8297acc2b09b86715b46311c00000000000000000000000000021527385b7085999999999996816c56412c170100000000000000071c30435472879cb2c7a48f79644f3a240f000000000000000000162b41566b8096999999999999999999999999999999999999999999999988725443301c0700000000000000000000031729395c71869bb1c6cebbaa8d78624d382319191919191919191919191913110b01000000000000000000000000000004142431404c57616a73797d7f807f7d79746c7e939fb1bcab9e8877624c42311d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2e3f4b5d657886949ea8b3b8c5c3c3c2c2c4c6c3c3b6b2a79e938375615847331f0a00000000000d22374c62778a9fb2b6bbb4a598826d5645321e0900000000000000000000000000000000000000000000000001080b0c0e0f0e0d0b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778b9fb5c3a8937e68533a29170400000000000000000000000000000000000003192e43586e8398adc3b09a85705b45301b0000000000000000000000000000152a3f546a7f8484848484847f6a543f2a150000000000000000001325365a6f859aafbca7917c67523c271200000000000000000011263b51667c8384848484848484848484848484848484848484848484848275604a35200b0000000000000000000000192e44596e8399aec3d9c8a58f7a65503a2e2e2e2e2e2e2e2e2e2e2e2e2e28251e130500000000000000000000000000122231424e5e66757f888e93959694928e8981798297a6b7b8a699846f604e3b2b1905000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e3f4b5a63757f89969ea7aaaeb1b2b3b2b0ada9a59d94887e6e6157473a29170400000000000b20344859687e919da5aa9f998777624c382816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e101111100c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e1111110d0b050000000000000b1f34475971869cb1c3ae99836e5846331f0a000000000000000000000000000000000000041a2f44596f8499aec3ae99836e59442e19000000000000000000000000000013273c4f616a6f6f6f6f6f6f6a614f3c2713000000000000000000182d42576d8297acbea9947f69543f2a140000000000000000000f24384c5e666e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e605443301c070000000000000000000001172c41566c8196abc1d2bca7927d675243434343434343434343434343433d3a3123130100000000000000000000000c1d2f404e60687c88959da6a8aaabaaa8a79e978b83889db2c5b3a1937e68594834201100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311212e3c4957606a7781889095999b9d9d9d9b98948e877f7668604b4639291c0c00000000000005182b3b4e60687c878d8e8b8377625947341a0a000000000000000000000000000000000000000000000000060c0d19191917110f0900000000000000000000000000000000000000000000000003111c2325262625211f170b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040f1a21232626262220180d000000000004182a3b556b8095aac2b49f8a76614c36210e000000000000000000000000000000000000031628395b71869bb0c2ac97826d57422d1800000000000000000000000000000c2032434f54595959595959544f4332200d000000000000000000152a40556a7f95aabfac97816c57422c17020000000000000000091d2f404c51595959595959595959595959595959595959595959595959594a4336251300000000000000000000000014293e54697e93a9bed3bfaa957f6a595959595959595959595959595959524e41311e0b0000000000000000000004182a3b4c5e687e8c9ea6b2b7c4bfc0b9c5b8b3ab9f989da6b7cbbfb49e8a78624d3f2e1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111e2c39454b59616b757b80838687888786837f79736a61574e4232291b0c00000000000000000d1d31424e5f67727879766e6259483b2a180000000000000000000000000000000000000000000000000e1920232f2f2e2c26241d12040000000000000000000000000000000000000000000011212e373a3b3b3a3633291d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c181f2c35383b3b3b37342b1d0d00000000000e24394e63798ea4b6baa9927d68533c2b19050000000000000000000000000000000000091e32455773889eb3c0aa95806b55402b160000000000000000000000000000031525323c3f4444444444443f3c3225150000000000000000000012283d52677d92a7bcae99846f59442f1a0000000000000000000012222f383b44444444444444444444444444444444444444444444444443353025180800000000000000000000000011273c51667c91a6bbd1c2ac97826e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e685f4e3a2511000000000000000000000b1f344759667c8d9faab8c4c5b8b3aaa4a1a0a1a4aaadb2b7c4d4cdb9a898836e5d4b372310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1b28323a474c5560656a6e71727372716e6a6460544b4639311e160b00000000000000000000142431404d515b636461584d483b2b1d0d00000000000000000000000000000000000000000000000e1e2c3538444444423b382f2216080000000000000000000000000000000000000000081c2e3f4b505151504c463a312719090000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a343d494e5051514d483b2b1805000000000c21364a5b71869cb1c7af9a85705a4835200b00000000000000000000000000000000000b21364b60768ba6b8bda8937d68533e281300000000000000000000000000000007151e2b36434b5055544e4a3d32281a0a00000000000000000010253a50657a8fa5c8b19c87715c3a2a181c12100a01000000000004121d24262f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2e201c1308000000000000000000000000000f24394e64798ea3c6d6c8b39d88838383838383838383838383838383837e68523d28130000000000000000000417293a4c6177899eabbbc8c0b4a79e958f8c8b8c8f959ca4b3b9c5d5c6b2a08f7b65503f2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e2a3437444b5055595c5d5e5d5b58544f4a433633291b1303000000000000000000000006142230393c494d4f4c473a342b1d0d000000000000000000000000000000000000000000000006192c3c494d59595957514c4034261602000000000000000000000000000000000000000e23374b5d6566666561584b44372715010000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a474c5b6366666662594834200b00000000071a2d3d54697f94a9bab59f8c78624d39281603000000000000000000000000000000000e23394e63788ea3c5c7a5907b66503b26110000000000000000000000000000000a1a2b3c485460666a69635b4b453828160200000000000000000d23384d62788daabbb49e8974584733323127251d1305000000000000090f11191919191919191919191919191919191919191919191919190b070000000000000000000000000000000c21374c61768ca8b9cccbb7a69d98989898989898989898989898989898836e59432e190000000000000000000a1f3347586b8196a7b8c9c2b4a29a89807a7675777a8087939ea7b7c4cfbeaf9a84705d4b37220b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c181f2731363b40444648484846433f393530251e170b000000000000000000000000000004121d242c35383937332a20180d0000000000000000000000000000000000000000000000000c2035495a626e6e6e6c665e51443420100000000000000000000000000000000000000010253a50657b7b7b7a766b605544311d13000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3447596170787b7b7c77624d37220d00000000000f22374c61778a9fb4bcab95806b5746321e080000000000000000000000000000000011263b50667b90a5bbbaa98d78634e38230e000000000000000000000000000002152738485a62737b7f7e796d605645321e1200000000000000000b20354b60758a9fb4b9a88c77614c4747463c393023130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874899eb4c9d4c4b7b3aeaeaeaeaeaeaeaeaeaeaeaeaeaeae9b86715b3a29170400000000000000000c21374c61768a9fb4c5c9b5a49a84766b64616062646a747e899da6b7c7c8b4a28f7a654f392916030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000409151d20252b2e31323332312e2a24201c13080300000000000000000000000000000000000a0e19212324211f170c05000000000000000000000000000000000000000000000000000d23384d6278838483817c6b62513e2d1b07000000000000000000000000000000000000162b40566b8090908f8a8073604b413019090000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c6177848d90908e79644f39240f00000000000a1f3347586d8298adc0b39e8975614b3626140100000000000000000000000000000014293e53697e93a8beb49f8a75604b35200b0000000000000000000000000000091d3145566278859095948c8274604b402f1d0900000000000000081d31445572889db2c6a48e79645d5d5d5b524d41301e0e000000000000080d0f20202020202020100e080000000000000000030d1315202020202020200b080100000000000000000004172a3a5c71869cb1c6dbd4cbc8c3bfbfbfbfbfbfbfbfbfbfbfbfbfb39e89745846331f0a000000000000000012273c52677c91a9bacdc2b19c867561584f4c4b4c4f55606979889da9bacdc0ad98826d5746321e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b1015191c1d1e1d1c19150f0b0700000000000000000000000000000000000000000000060c0e0f0c0a040000000000000000000000000000000000000000000000000000000d22374c62778c99999790806b5c4a36220d0000000000000000000000000000000000000c22374c61778a9ea89f96836e5f4d37261401000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b70849aa2a59e8975604b35200b000000000004182a3a4e64798ea2b4b8a7937e685443301c09000000000000000000000000000003172939586d8297adc2b19c86715544311d0800000000000000000000000000000b20364b6074869ba3aaab9f97836e5e4c38240f00000000000000011527375b70859ab0bca6917c7272727271675f4d3c2c190600000002101b22253535353535353525231c11030000000000071520282a35353535353535331d14090000000000000000001a2f44596f8499aec4d9d1c0b4afaaaaaaaaaaaaaaaaaaaaaaaaaaaaa78b76614c36210c0000000000000000182d42576d8297acc7cab6a48f7b6556473a37363737444b5b63798a9fb4c3c9b49f8a76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475974899faeac9e8e7a644f39240f0000000000000000000000000000000000000a1f3347586b8196a9b4a1927d675544311d08000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798ea2b4af99846f5544311d080000000000000c22364a5c6f849aafc0b29c8773604b37271501000000000000000000000000000a1e33465771879cb1c2ad98836d58372715010000000000000000000000000000152a3f556a7f94a4b5c1bcb5a1917c66513c26110000000000000000182d43586d8298adc2b39e8887878787867d675a4935200c00000010202e373a4a4a4a4a4a4a4a3b382f211100000000031525333c404a4a4a4a4a4a4a48312619090000000000000002172c41576c8196acc1d6c8b4a29a9494949494949494949494949494948e79644f39240f00000000000000001c31465b71869bb0c6c7b19c87725d4b382a21202226313d4a5b687e93a5b6cabaa8917b66513c2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b0f131516161614110d0b050000000000000000000000000000000000000000000000000000000000000000030a0c101316161615120f0b080100000000000000000000000000000000000005182a3b5c72879cb1bcac97826d573c2c1906000000000000000000000000000000000004182a3a4c62778a9fb4b29c8773604b3625130000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93a9c0aa947f6a5537261401000000000000071b2d3e50657b90a2b4b6a4927d675544311d0a000000000000000000000000000c21364b61768b9fb4c7a9937e69543e29140000000000000000000000000000071c31465c71869bb1c2d2cfbfad98836d58432e180000000000000000162b40556b8095aac0b8a69e9c9c9c9c9b8c78634d38230e0000081b2e3e4b4f60606060606060504b3f2f1c080000000d20334350556060606060605f5c443726140100000000000000142a3f54697f94a9bed4c5af9a847f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f78634d38230e00000000000000001d33485d72889db2c7c1ac97826c573f2e1a0c0b0d141d2d3d4b6074879db2c7c6ac96816c57412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080a161e2125282a2b2c2b29262220180f0d07000000000000000000000000000000000000000000000000000000090b161e2125292b2c2b2a2724201d140b0801000000000000000000000000000000001a2f455a6f849aafc4b29d88725a4935200c0000000000000000000000000000000000000c203448596c8197aab6a5927d675443301c07000000000000000000000000000000000000000000000000000000000000000000000006192c3c596e8398aebaa98f7a65503a251000000000000000001023374b5d70859ab0bfb29c8774604b3827150200000000000000000000000010253a50657a8fabbcbaa98f79644f3a240f0000000000000000000000000000091e33495e73889eb3c8dddac5af9a85705a45301b000000000000000013283d53687d92a8b3b3b3b3b2b2b2b2aa927c67523d271200000d22374b5c6475757575757575655d4b38230e00000013283c50616a757575757575756e5544311d080000000000000012273c51677c91a6bcd1c2ac97826d6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a635a4935200c00000000000000001f34495f74899eb4c9bea9947f69543f2a14000000010f1d314455697e94a9c4c5b09b86705b3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006111c232832363a3d3f4141403e3c37342b24221b1008000000000000000000000000000000000000000000000007121d242932363b3e4041403f3d39353126201d1509010000000000000000000000000002182d42576d8297acc2b7a58d78624d38230d00000000000000000000000000000000000005182b3b4d62788b9fb4b19c8673604a35201100000000000000000000000000000000000000000000000000000000000000000000000c2135495b73889db3b49f8a75604b36210b0000000000000000081c2f3f50657b8fa1b3b6a5927d685645311d0d00000000000000000000000216283854697f94a9c9b49f8975604b36200b0000000000000000000000000000071c31465c71869bb1c2d1cebfad98836d58432e18000000000000000010263b50657b909d9d9d9d9d9d9d9d9d9d947f6a543f2a1500000f253a4f647a8a8a8a8a8a8a8a7b65503b2510000000152a40556a7f8a8a8a8a8a8a8c73604b35200b000000000000000f243a4f64798fa4c7d7c4af9a846f5a55555555555555555555555555554d493c2c190600000000000000001f344a5f74899fb4c9bda8937d68533e281300000000011426374e63788da6b7c9b49e89745847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a212e3738454b4f525556565554514d483b39362d231c11040000000000000000000000000000000000000002101b222f3839464b505355565654524e4b44373531271c140800000000000000000000000000152a3f556a7f94aabfc3a8927d68533d2813000000000000000000000000000000000000000d2035485a6d8297aab5a4917c6651402f1c09000000000000000000000000000000000000000000000000000000000000000000000e23384d63788da6b7b09a85705645321e090000000000000000001123374b5d6f8399aabbb29d8774604b3b2b180500000000000000000000091e3245566f8499afc4af9a846f5544311d08000000000000000000000000000000152a3f556a7f94a4b4c0beb1a1907c66513b261100000000000000000d23384d6278888888888888888888888888806b56402b1600000d22374d62778ca99f9f9f9f927d68523d281300000013283d52687d929f9f9f9faa8c77624d37220d000000000000000c22374c61778ca9bacdc7b19c877254433f3f3f3f3f3f3f3f3f3f3f3f3f38352c1e0e0000000000000000001e33485e73889db3c8bea9937e69543e29140000000000092135495b73889db3c8b9a88c76614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004111f2c353f4b4f566064686a6b6b6b69666259564e4a3e372e1f180c00000000000000000000000000000000000512202d36404c51576165686b6b6b6a67646055514b44373026180f01000000000000000000000012283d52677d92a7bcc2ad98826d583c2c190600000000000000000000000000000000000005192b3c4d63788b9fb4b09b85715e4c3823110000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7c4ab95806b5638281602000000000000000000081c2e3f4e63798b9fb4b7a5947f6a5948342010000000000000000000000b21364b60758a9fb4c2a9937e6954372715020000000000000000000000000000000c21364b6175869aa2a9a9a097836e5e4c38240f00000000000000000c2035495a627373737373737373737373736b62513d281400000b20354a60758a9fb4b5b5aa95806a55402b1500000010253b50657a90a5b5b5b5a48f7a644f3a250f000000000000000b1f34475974899fb4c9c9b49f8975604a352a2a2a2a2a2a2a2a2a2a2a2a2320190e000000000000000000001b31465b70869bb0c5bfaa95806a55402b150000000000061a2c3d5b71869bb0c6c6a28d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000311222f3d494e5d656e757a7d7f8081807e7b77726c645c504b3f342a1c10020000000000000000000000000000061423303e4a4e5e666f767a7e8081807f7c79746e6660554b43362d1f13050000000000000000000010253a50657a8fa5c8c7b29d88725a4935200c000000000000000000000000000000000000000e2035495a6d8298abb5a3907b66503f2e1c08000000000000000000000000000000000000000000000000000000000000000005182a3b586d8297adbcab907b66513b261100000000000000000000001121364a5b6c8196a6b8b49e8a77624c3e2e1b0700000000000000000115273750667b90a9bab6a48d78634d38230e00000000000000000000000000000000091e3246576277859094948e8274604b402f1d09000000000000000006192c3c494d5e5e5e5e5e5e5e5e5e5e5e5e56514433210e0000071c30435472879cb2c7c2ad97826d58422d180000000e23384d63788dabbccfbca7917c67523c27120000000000000004182a3b5c72879cb1c7cdbaa98c77624c372215151515151515151515150e0c060000000000000000000000182d43586d8298adc2c3ad98836e583e2d1b0700000000001a2f445a6f8499afc4b9a38e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f404c5b636f7a838a8f929496969593918c87817970655d4c473a2d20100200000000000000000000000002142431414d5c64707b848a909395969594928e89837c746860544a3d312315070000000000000000000d22384d62778daabbcbb7a58d78624d38230d0000000000000000000000000000000000000006192c3c4e63798c9fb5b09a85705d4b37231000000000000000000000000000000000000000000000000000000000000000000b1f34475972879cb2b49f8b76614c36210c0000000000000000000000071a2d3d4c6176889db3b9a898826d5c4b37220d0000000000000000081d3144556d8297adc7b19c86715a4935200c0000000000000000000000000000000003162839485962707a7f7e796d605645322212000000000000000000000e1e2c3538484848484848484848484848403d332616040000001325365a6f859aafc4c4af9a856f5a3625130000000b20364b60758a9fb5cabea9947f69543f2a1400000000000000001a2f445a6f8499afc4d7c7a48f79644f3a240f00000000000000000000000000000000000000000000000013283e53687e93a8c0c8b39d88735c4a362210000000000417293a5a6f859aafc4c8a38d79634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2f3f4c5e6679848f999fa9a7aaababaaa9a6a59d968e857b6e61594a3e2d2010000000000000000000000000102031424e5f677a8490999faaa8aaababa9a7a79e9891877d73635b4e413225150600000000000000000b20354b60758a9fb4cac3a7927c67523d271200000000000000000000000000000000000000000e21364a5b6e8399aeb4a28f7b65503e2e1b07000000000000000000000000000000000000000000000000000000000000000d22374c62778ca5b6b19b86715846331f0a0000000000000000000000000f1f334658677d92a1b3b59f8d7a644f3a240f00000000000000000b20354b6075899eb3bcab947f6a553c2c190600000000000000000000000000000000000b1b2b3b484d5d656a69635b4b453828160400000000000000000000000e1920233333333333333333333333332b2821160800000000182d42586d8297adc2c7b29c87725443301c070000091d32455673889db3c8c1ac96816c57412c170200000000000002172d42576c8297acc1d1bca7917c67523c27120000000000000000000000000000000000000000000000000d23384d62788da2b4c8b7a68f7a644f3e2d1b0c0000000a1f33475871879cb1c6bbaa8c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4c5d667c899aa2aeb4bac7bfc0c0c0bec3b6b2aba29b908377645c4a3e2d1f0e000000000000000000000b1b2e3e4e60687d8b9aa2afb4bbc8c0c0bfbfc5b9b3aea59d938579685f4f433224140300000000000000081d31445572889db2c7bfaa947f6a553f2a150000000000000000000000000000000000000000071a2d3d4f647a8ea1b3af9a846f5c4a36220f0000000000000000000000000000000000000000000000000000000000000012273c51677c91a6c3ac96816c573a2917040000000000000000000000000417293a4d5f6f8399a8b9ab99846f59442f1a00000000000000000f24394e64798ea7b6b59f8c78624d38230e000000000000000000000000000000000000000d1d2b343f4b5054544e4a3d32281a0a00000000000000000000000000060c0d1e1e1e1e1e1e1e1e1e1e1e1e16140e040000000000152a40556a7f95aabfc9b49f8a75604a35200b0000021528385b70869bb0c5c3ae99846e59442f190000000000000000152a3f546a7f94a9bfd4bea9947f69543f2a140000000000000000000000000000000000000000000000000b2035485a70859bb0c1c4ad98826d5c4a39291c120e0e1627374c61768b9fb4cab49f8a74604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a657b8c9ea7b4c0c9c7bab4b0aeaeb0b4b9c6c0b4b0a098887a645c4a3d2c1b0b0000000000000000031628394a5c687e8d9fa9b4c0c5b8b3adabaaacaeb4bac3b7b2a39b8b7d6a614f4232211100000000000000011527375b70859ab0c5c1ac97826c57422d170200000000000000000000000000000000000000000f22364a5c6f8499afb3a28f7a644f3d2d1a07000000000000000000000000000000000000000000000000000000000003172939566c8196abc3a7917c67523c271200000000000000000000000000000b1b30414d6278899eb3a69b85705b46311b00000000000000000c22374c61778a9da5af9a85705a4835200b00000000000000000000000000000000000000000d18202e373b3f3f39362d1e160a000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92a7bdcebaa98c77624c37220d000000192e43596e8398aec3c6b19b86715c392916030000000000000012273d52677c92a7bcd1c1ac96816c57412c1702000000000000000000000000000000000000000000000006192b3c51667c91a3b5cab49f8c7a6457473a2f25232328324455687d92abbcc6b09b86715443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4d6278899eaab9c5c7bab4a99f9b99999b9ea8b0b4c1beb2a69d8a7a645b493928160300000000000000091e324657647a8b9fabbac5b8b3a79e98959496999fa9b2b7c1b5a99f927f6a604f3f2f1c0c00000000000000182d43586d8298adc2c4af9a846f5a452f1a000000000000000000000000000000000000000000071b2d3e4f647a8fa2b4ae99836e5b4a36210e00000000000000000000000000000000000000000000000000000000000a1e33465771869bb0b6a58c77624d37220d0000000000000000000000000000001320344859687d92a098887b644f3a250f00000000000000000b1f344759657b87949e917c67513c2b190600000000000000000000000000000000000000000005111c23252a2923211a0f0200000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90a5c9d8c7a48f7a644f3a250f000001162c41566b8196abc0c8b39e89735746321e0a000000000000000f253a4f647a8fa4c7d8c4ae99846f59442f1a000b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0100000000000000000e24394d5e70859bb0bdbbaa9c867561584c403a383839464b6074869cb1c9c2ab96806b563626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c6e8399a7b8c8c5b8a99f948a8683848689919ba3b4bac4b7a89e8879635746321e0e000000000000011527374b6175879daabbc3b7a79e928883807f81848a929da6b1bdbab49d937e695d4b3a291704000000000000162b40556b8095aac0c7b19c87725c3a2a18040000000000000000000000000000000000000000001022374b5c6f849aafb59f8c79634e3d2c1a06000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4b29c8772594834200b00000000000000000000000000000005192b3b4e5f6e82908276645d4b37220d000000000000000004182a3b4b5d65747f898773604b35200e000000000000000000000000000000000000000000000000080e1015140e0c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788dabbccfbca7917c67523c271200000014293e54697e93a9beccb8a78b76614b36210c000000000000000d22374d62778ca9bacec6b19c86715c3a29172020202020202020202020202020202016140e040000000000091d304050657b909fb1c1b6a49b8576665e54504e4d5057616c8096a4b6c9b6a4907b65503b26100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031629394f647a8fa1b3c5c8b8a69e8a7f76706e6e71757c85939fa9bac6b8a69d8775614b3c2c19060000000000081d314455697e93a5b6c8b7a59d897d746d6b6a6c6f767d87979fafbcbbb49f8d7b655847331f0e00000000000013283e53687d93a8bdc9b49f89745947341f0a000000000000000000000000000000000000000000081b2e3e50657b90a2b4ab98836e5b4935210e0000000000000000000000000000000000000000000000000000000010263b50657b90aabbad97826d583b2b1805000000000000000000000000000000000d1d31414c61767b6d61584b3f2e1b080000000000000000000c1d2e3f4b566069777b655544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a9fb4cabea9947f69543f2a1400000011273c51667c91a6bbd6c5a38e78634e39230e000000000000000b20354b60758a9fb4c9c9b49e897458473335353535353535353535353535353535352c2921160800000000001223384c5d6c8197a3b4c2b4a39b877c716a656363656b7581969eb0c2c0b19c8673604a35200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3246576e8398aebfcebbaa9e88796961585959566067727e8b9fa8bac5b6a595806b5b4935210c00000000000b20354b6074879db2c3bcab9d87786860555655575761687581959dafbebcab9d8876614c3c2c1906000000000010263b50657b90a5bacdbaa98c77614c37220c000000000000000000000000000000000000000000001023374b5d70859bb0b49f8c79634e3c2b1905000000000000000000000000000000000000000000000000000002152737556b8095aac4a8927d68533d2813000000000000000000000000000000000000131f33475861655e4c473a2e2010000000000000000000000011212e38454b5961655d4b372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f1215161514120f0b090200000000000000000000000000000000081d31445573889db2c8c1ac96816c57412c170200000f24394f64798ea4c7d7bba5907b66503b261100000000000000081c30435472879cb2c7ccb9a88c76614c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a413d3426160400000000081c2f3f4b6074859ba6b6c1b4a59d91867f7a78787a8088979fb0bcc5b4a2927d685443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a9fb4c9c7b49f8c7a645b4c473a38454b5460687b8a9fb4bfc3b49f8b78634d3a2a18040000000011263b50667b90a5b7cab49f8c7a645a4b44373f39464b57606c7f95a0b2c3b7a696816c5a4935200a00000000000e23384e63788da3c4d5c7a48e79644f39240f00000000000000000000000000000000000000000000081c2f3f51667b90a3b5ab97826d5a4835200d0000000000000000000000000000000000000000000000000000081d31445570859aafb8a68d78634d38230e00000000000000000000000000000000000004182a3a474c504c40332a1c1002000000000000000000000003111a28323b474c504b3f2f19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000508141c2024282a2b2b2a2725201d150b080100000000000000000000000000021527375b70859bb0c5c4ae99846f59442f1a0000000c22374c61778ca9bacdbda8937d68533e281300000000000000011426365a6f859aafc4d6c6a38e79646060606060606060606060606060606060606056514434210e0000000000111d3145566277889ca4b2bfb6b2a39b948f8d8d8f959da6b1bdc4b7a79a8473604b36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92a9bacdbaa996816c5c4b3d3329283236434a5d687d92a1b3c7baa998836e5847331f0a00000001162b40566b8095abc3c8ad98836e5c4b3c31262a283239454b616d8298a5b7c4b49f8b78624d38281602000000000b21364b60768ba6b8cbbba6917c66513c271100000000000000000000000000000000000000000000001124384c5e71859bb0b49f8b78624d3b2b1805000000000000000000000000000000000000000000000000000b20364b6075899fb4b39d88735b4935210c000000000000000000000000000000000000000c1c2a33373b382f1f170c0000000000000000000000000000000a151d2a34373b372f21110000000000000000000000000000000000000000000000000000000000000000000000000000000000020d1820263035393d3f40403f3d3a363228201d140900000000000000000000000000182e43586d8398adc2c6b19c86715c3a29170400000b1f34475974899fb4c9c0aa95806b55402b160000000000000000182d42576d8297acc2d0bba6917c75757575757575757575757575757575757575756b62513d2914000000000002152738485962788699a1b2b7c1b5b1a9a5a3a2a5aab2b7c4c1b4a69d8977625544311808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737576d8297acc7c9b49f8b77624c3e2e1f17161e25303f4e5f6f8499aec2c7b49f8a77614c37220c000000021527385b70859bb0c5bbaa907b65503e2e1d1415161e2832434b6175879db2c5bbaa97816c5645321e0900000000091e32455673889eb3c8bea9947e69543f29140000000000000000000000000000000000000000000000091c2f4051667c91a4b5aa97816c594834200c000000000000000000000000000000000000000000000000000f253a4f647a8fa9baae98836e593c2c190600000000000000000000000000000000000000000c181f2226231c11040000000000000000000000000000000000020c181f2225231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000009151d2b3436434b4e5254555554524f4b45383531261911030000000000000000000001162b40566b8095abc0c9b39e89745846331f0a000004182a3b5d72879cb2c7c2ad98826d58432d180000000000000000152a40556a7f95aabfd4bfab9a918a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a806b56412c160100000000000a1a2b3b485a627683919da5b0b5c1bfbab8b8bac0c4c3b6b2a39b887a645948372614000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445571879caeb4bcae98836e5948342010040208131c31414f647a8fa4b5c9baa9927d67523d2812000000091d31455674899eb4c9b49f8a76604b3621100100030a161e324657697e93a7b9c8b39e8975604b36210b00000000031628385b70869bb0c5c1ab96816c56412c170100000000000000000000000000000000000000000000001220354a6073869cb1b49f8a77624c3a2a180400000000000000000000000000000000000000000000000013253654697f94a9c6a9937e69543e291400000000000000000000000000000000000000000000040a0c100e09000000000000000000000000000000000000000000040b0c100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000a1927313b484d546064676a6b6a6967646056514b44372f1e160b0000000000000000000013293e53687e93a8bdccb9a78b76614c36210c0000001a30455a6f859aafc4c5af9a85705a362513000000000000000012283d52677d92a7bcd2c9b8aba69f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f98836e59432e19000000000000000d1d2b3c4858616e7c87929ba3a8adb0b2b3b3b2afaba59c918578645c4a3b2b19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60748790999faba1907b65503b2a1802000000001322374b5d71869cb1c6c7ad97826d58422d180300000b20364b60758ba8b9c7b19c87725645321e0900000000031629394b6075899eb3c9b9a8917c66513c27110000000000192e43596e8398aec3c3ae99836e59442e19000000000000000000000000000000000000000000000000071c304354677d92a5b6a996816b5847331f0b0000000000000000000000000000000000000000000000071c3043546e8499aeb9a88e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2837444b59626c74797d7f80807f7c7a756f6660554c4032281b0d00000000000000000011263b50667b90a5bbd6c5a38e79634e39240e000003182d42586d8297adc2c7b29d87725443301c070000000000000010253a50657a8fa5c8d9d3c9bfbbb5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b09b86715b39291703000000000000000e1e2b3a464c5f67747d868d93989b9d9e9e9c9a958f877c7262594a3d2d1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445560737b848b90908372604a35200d0000000000081b2e3f566b8196abc0c6b09b86715b46311c0000000d22374c62778ca1c6c5b09b85705b3828160300000000000b1e3245566e8399aec3c6ac96816c57412c170000000001162c41566b8196abc0c6b09b86715b392816030000000000000000000000000000000000000000000000001325364b6074879cb2b49e8a77614c3a291704000000000000000000000000000000000000000000000b20354a6074899eb3b39e8975604b35200b0000000000000000000000000000000000000000000000000000000000000000000001080b0c0a04000000000000000000000001080b0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000091928384555606a7781888e9294959594928f8a847c73665e4b46392b1d0f01000000000000000e23394e63788ea3c5d5bba6917b66513c2611000000152b40556a8095aabfc9b49f8a75604a35200b000000000000000d23384d62788daabbbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdbdb39e89735746331e0a00000000000000000e1b2933414d55606871787e83868889898784807a73676054483b2d1f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737445460666e777b7a73605443301c0700000000000012273c51677c91a6bcc8b39e89735e4926140100000e23384d63788da2b8c5b09b86705b3827150200000000000216283853687e93a8bdc6b19b86715c3a2a17040000000014293e53697e93a8bec8b39e89735746321e09000000000000000000000000000000000000000000000000081d314455687d92a5b7a895806b5846331f0b000000000000000000000000000000000000000000000e23394e63798ea7b8af99846f5544311d0800000000000000000000000000000000000000000000000000000000000000000008141c20211f170b00000000000000000009141d20211e170b040000000000000000000000000000000000000000000000000000000000000000000002152737455660747f8a969ea7a7a9aaaaa9a7a99f9991867b6d6157483b2c1f0f000000000000000c21364b61768ba7b8ccbea9937e69543d2d1a07000013283d53687d92a8bdcebaa98c77624c37220d000000000000000b20354b60758a9fa8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78b76614c36210c0000000000000000000b171f3037444b535b63696d71737473726f6b6560544a43362b1d0f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192736434b51586166656054433625130000000000000010253a50657a8fa5bacab49f8a755544311d0800000d22374c62778cabbcc7b29d87725645311d0900000000000011263b51667b90a6bbc9b49e89745847331f0a0000000011263c51667b91a6bbccb8a78b76614b36210c000000000000000000000000000000000000000000000000011426374b6074879db2b39e8976614c3928160300000000000000000000000000000000000000000013293e53687e93a8c5aa947f6a5537261401000000000000000000000000000000000000000000000000000000000000000611182630353633291b0b0000000000000009192631353633291f170c040000000000000000000000000000000000000000000000000000000000000000081d314455607483949ea8b3b8c5bfc0bebdc7bab4aea49c9082756259493d2c1e0e000000000000091e32465773899eb3c8c5b09b85705b4a36210f000010263b50657b90a5bad8c7a48f79644f3a240f00000000000000081d31445572879393939393939393939393939393939393939393939393939393938e79634e39240e000000000000000000000412192731363d494e53585b5d5e5e5d5a56504a43363025180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009182630353a474c51504b4336261808000000000000000f24394f64798ea4b9cdb9a88a75604b35200b00000b21364b60768a9fb5c9b49f8a75604b36200b0000000000000f243a4f64798fa4b9cdb9a88c76614c37210c000000000f24394e64798ea3c6d5c5a38e78634e39230e00000000000000000000000000000000000000000000000000091d314455697e93a6b7a7947f6a5746321e0a000000000000000000000000000000000000000005192b3c586d8398adbaa98f7a654f3a2510000000000000000000000000000000000000000000000000000000000000050f1a212f36434b4c463a291704000000000001142637444b4b463933291f170c040000000000000000000000000000000000000000000000000000000000071a2d3d4b60748499a1b4b9c6c4b8b3aca9a8aaacb2b7b6b19f978678635b493c2c19060000000000031628395b71869bb0c6c8b4a38e79634e3d2d1a07000e23384e63788da3c5d5bca6917c67513c2712000000000000000114263751667c7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e78624d37220d00000000000000000000000009151d202c35383e43464849494745403a3530251c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202a33373b3b35302618080000000001080b0e18283850667b90a5bbc9b49e89745544311d080000091e32455673889db2c8baa98f7a65503928160300000000000f24394e64798ea3b9d6c6a28d77624d38220d000000000c21364c61768ba8b9ccbba5907b66503b261100000000000000000000000000000000000000000000000000021527374b6075889db3b39e8875614b38281502000000000000000000000000000000000000000b2035485a72879db2b49f8a75604b36200b00000000000000000000000000000000000000000000000000000000030d181f2c363f4c5460615846331f0a0000000000081d3144556061574c463a332a1f180c050000000000000000000000000000000000000000000000000000000d21364a5c6a8095a2b3bfc8bbb4a69e97949394979da6b1b5b1a49c8879635a4935200c000000000000192e44596e8399aec3d1c1ad98826d5b4a362113010b21364b60768ba7b8ccbea9947e69543f291400000000000000000924394d5e666868686868686868686868686868686868686868686868686868686862594834200b0000000000000000000000000002080f1a2123292e31333434322f2b25201c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080c171f212625201c14080000080e10141d20232b3445566a8095aabfc7b19c87725c372614010000021628385a6f849aafc4c7ab95806b5745321e0f000000000010253b50657a90a5bad7c7a28d78624d38230d000000000a1f33465874899eb3c9bda8937d68533e28130000000000000000000000000000000000000000000000000000091d324556697f94a7b8a7947e695645321d09000000000000000000000000000000000000000d22384d62788da5b7b09a85705645321d090000000000000000000000000000000000000000000000000000000a161e2a343d494e5d657576614c36210c00000000000b20354b6073766a61584c473a342a20180d0500000000000000000000000000000000000000000000000005182a3b4e64798b9fb4c0cebbaa9f9488827f7e7f8288919ca4b4b5a69d8878634d38230e000000000001172c41566c8196abc1d6cab49f8c79634e42311f0f091e32455673889eb3c8c1ab96816c56412c1701000000000000000a1d30404d51535353535353535353535353535353535353535353535353535353534d483b2b190500000000000000000000000000000000060c0e14181c1e1f1e1d1a16100b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c11100b08010003111c2325263135383b484c6074879db2c7c2ad98826d58432d1800000000152a3f556a7f94aac3c8b39e8875604b3d2d1d0f05000006192b3c54697e93a9becdbaa98b76614b36210c000000000417293a5c71869cb1c6c0ab95806b56402b160100000000000000000000000000000000000000000000000000021528384b6175889eb3b29d8875604b3727150100000000000000000000000000000000000012273d52677d92a7c3ab95806b56382815020000000000000000000000000000000000000000000000000008131c28323b474c5b636f7b867e68533d281300000000000b20354b6073887f766b61584c473b342b20190d06000000000000000000000000000000000000000000000b1f3448596e8398aabbcebeb49f8c7f746d69686a6d737c86959fabb7a598836d58432e1803000000000014293e54697e93a9bed3cfbcab9a846f604e3d2c1c0d1628385c71869cb1c6c2ad98836d58432e18030000000000000000122230393c3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e37342b1d0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f373b37444b4e5259626e8197a5b7c9b6a4907b66513b2611000000000f24394f64798ea4b6cab8a7947f695b4a3c2d20181414192035485a6e8399aec3c9b49f89745746321e0a00000000001a2f44596f8499aec4c2ad98836d58432e180000000000000000000000000000000000000000000000000000000a1e3246576a7f94a7b7a6937e685544311d08000000000000000000000000000000000004172a3a576c8197acbcab907b66503b2611000000000000000000000000000000000000000000000000061118253038454b59626c79849095806a55402b150000000000081c3043547287958980766b61594c483b342b20190e0600000000000000000000000000000000000000000d22374c62778b9fb4c8c9b2a0927d6a605654535554606674808d9ea79d8776614c37220c00000000000011273c51667c91a6bbd1d9c9b3a1927e685b493a2b1d1b30455a70859aafc5c4af99846f5a442f1a05000000000000000004121d2427292929292929292929292929292929292929292929292929292929292220190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2f3f4b505d556063676e7782979fb1c3bcab9c8673604b35200b000000000d22364a5c72879cb2c6c5b49f8b79635a4a3e342b29292c35434d62788b9fb4cac6b19b86715c392916030000000002172c41576c8196acc1c5b09a85705b372715010000000000000000000000000000000000000000000000000000031628394c6176899eb3b29d8774604b36261401000000000000000000000000000000000a1f33475871869cb1b49f8b76614c36210c00000000000000000000000000000000000000000000040f1a212e36434a56606a77818c99a198826d58432d180300000000011426365a6f849a9e958a80776c62594d483c352b21190e0600000000000000000000000000000000000014293e54697e93aabbcebcab98826d5f4b45383e36434a55606b7c89918979635847331f0a0000000000000f24394f64798ea4c6d7e6d0bfb49e8a796359483c2f21293a5a70859aafc5c5b09b85705b46301b06000000000000000000000a0f11131313131313131313131313131313131313131313131313131313130d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d65727375787c838a98a0b1bdbbb49f8d7b655544311d0800000000071b2d3e546a7f94a8b9cdbaa99c8678645c4d483b3e3e3c494d616e8398aabbcec1ab96806b56412b16000000000000142a3f54697f94a9bec7b29d88725544311d080000000000000000000000000000000000000000000000000000000b1e3346576b8095a8b7a5927d685443301c08000000000000000000000000000000000c21374c61768b9fb5b19b86715846331f0a0000000000000000000000000000000000000000020c181f2c353f4b546068757f89979faaaf9a85705a45301b050000000000172d42576c8297aca89e968a81776c625a4d493c352c211a0f0700000000000000000000000000000003172939596e8398aec8cab59f8c78624d41312729253037444b5e66777c77635b4a3a2a18040000000000000c21374c61768ca8b9cdd9c8bbb4a89d8777625a4c403634465871869cb1c6c5af9a85705a45301b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657b87888a8d91989fa8b2beb3aa9f937f695d4c3726140100000000001022374c61778a9eb4c5c7b6a49c877a6b6259565453555a626e8095a0b2c8c9b5a38f7a65503a251000000000000012273c52677c91a7bccab49f8a75604b35200b000000000000000000000000000000000000000000000000000000031729394c61768a9eb4b19c8673604b3520120000000000000000000000000000000011263c51667b91abbcac96816c573a291704000000000000000000000000000000000000000a161e2a343d494e5d65727d87949ea8b4bbb29d88725d48331d080000000000152a3f546a7f94a9b9b4a89f968a81786c625a4d493c352c211a0f07000000000000000000000000000a1e33465773889db2c8c5b09a85705a49351d1513131c2731404c58616662594a3d2d1c0c000000000000000a1f33475874899eb4c9cebbaa9faaa59c8678665e504c474c61768a9fb4c9c3ae98836e59432e19040000000002090b18191919191914120c020000000000000000000000070c0e1819191919190c0a04000000000000000000000000000000070d0f0f0f0d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394f64798e9e9fa9a7adb4bab9b4a1998b7e69614f3f2f19090000000000000a1f3347586b8096a7b9ccc3b6a59d8c81776f6b69696b707883959eafbecebeb09b85715d4b37230e0000000000000f243a4f64798fa4c7cebbaa8d78624d38230f0f0f0e0c0700000000000000000000000000000000000000000000000b1f3347586b8096a9b6a4917c6752402f1d09000000000000000000000000000003162838566b8096abc3a6917c67513c271200000000000000000000000000000000000008131c28323a474c5b636f7b85929da6b4b9c4b7b29e89745e49341f09000000000011263b51667b90a1b0b5bab4a99f968b82786d635b4e493d362d221b100800000000000000000000000c21364c61768ba6b7cbc0ab96806b563c2b1902000009151d2f3a474c514d483b2d1f0f000000000000000004172a3a5c71879cb1c6cab49f8c9aa2a49c887b6e666159626a7f94a9bacec9ab96816c56412c17010000000a151d202d2e2e2e2e2e29271f14060000000000000000010f1a21232d2e2e2e2e2e211f170c00000000000000000000000002101b222425252220190d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778ca9b4bac7c3c9b9a89e91837968604f433221110000000000000004182a3a4c6177899eb3c1d2c3b7aa9f968c85807e7e80858b98a0afbcccc1b19f907c66513f2e1c080000000000010d22374c62778ca9bacdc8a58f7a65503a2524242424211a0f0100000000000000000000000000000000000000000004172a3a4c62778a9fb4b19b86715e4c3824110000000000000000000000000000091e32455670859bb0b6a58c77624c37220d00000000000000000000000000000000061118253038454b59616c7983909ba3b2b7c4b9b3a69d92816c57422c170200000000000b20354b607383919ba3b0b4bab4a99f978b82786d635b4e4a3d362d221b10080000000000000000000d23384d62788da2c4d4bda8927d68533d28130000000002121c2a33373c37342b1d0f010000000000000000001a2f445a6f8499afc4c6b09b85849aa5a69d90837b7674777f8c9fb4c7cfbcab917c67523c27120000000a1a2731364343434343433e3b32241507000000000000000f1f2d363942434343434337332a1c0c000000000000000000000010202e363a3a3a38342b1d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475974899fabaeb3b7c4b49e897c71665e4d483c2e201001000000000000000c1f334758697e93a3b5c7d4c8bbb4ab9f9a969393959a9faab2bfcbbfb2a397826d5e4c382111000000000005131e20354a6075899fb4c9bca7927d67523d3939393939362d1f0f000000000000000000000000000000000000000000000c1f3447596c8196a9b5a3917c66513f2f1c08000000000000000000000000000b21364b60768a9fb4b29c87725948341f0b0000000000000000000000000000040f1a212e36434a56606a77818b99a1b1b5c1bab4a79e94887d72604a35200b000000000000081c304354606f7c86909aa2afb3bab4aa9f978c82796e635b4f4a3e372e231c1108000000000000000f24394f64798ea4b9cebba6917c66513c27110000000000000c181f22272220180d0000000000000000000002172d42576c8297acc1c8b39d8877879ca5b2a199908b898c959faabbcec8b59f8c77614c37220c000002152738454b585959595958544f423225150000000000000c1d2d3d4a4e5759595959584c473a2a1704000000000000000000071b2e3e4a4f4f4f4d483c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5c72869596999da6abb3a89e91867c70625a4b3e2e1f0f0000000000000004182a3a4b6073859ba9bacdd9cec1b5b1afaba9a8aab0b4bbc8c4b7b2a1998574604b402f1c0300000000001323313a3d435472879cb2c7bfaa947f6a554e4e4e4e4e4e4a3d2d190900000000000000000000000000000000000000000005182a3b4d62788b9fb4b09b85705d4c3823100000000000000000000000000010253a50657a8fa9baad97826d583b2a1805000000000000000000000000020c181f2c353f4b546067757f89979faab3bfbbb4a99f96897f7568605443301c0700000000000001142636434b5f67717b858f99a1aeb4bbb4aa9f988c83796e645c4f4b3e372e231c1109000000000010253a4f657a8fa4bacfbba6917b66513c261100000000000000040a0c110d0b05000000000000000000000000152a3f546a7f94a9bfcab59f8a7578879ca4b2aea5a99fa9aab4bbc8cdbbaa98836e5947341f0b0000091d314556606d6e6e6e6e6e69604f43321d0d0000000004182a3b4a5b636d6e6e6e6e6e615847331f0a0000000000000000020d22364a5c646464625a4834200b0005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677d808184888d959ea6b4a39b918478645c4b3d2d1909000000000000000c1d31445563798b9fb4bfcfc9b5a39b9ea7adb2b7c3c5b8b3ada69d93837561564532221200000000000e1e31424e535b596f849aafc4c2ac97826d646464646464635b4a372715020000000000000000000000000000000000000000000d203448596d8297aab4a3907b65503f2e1b08000000000000000000000001142637556a7f94aac4a7927d68523d28130000000000000000000000000a151d2a333d494e5d65727d87949ea8b4bbbfb3aa9f978a80766a60564a43362513000000000000000008182630404d515e66707a848e989fabb4bbb4ab9f988c837a6f645c4f4b3f382f231c11040000000f24394e64798ea3c9d9bca7927d67523d2812000000000000000000000000000000000000000000000000000012273d52677c92a7bccfbcab8d7863788698a0b1b6bab4bac7caccc7bab49f8c79634e3b2a180400000b20364b60758283838383837e6a614f3b2b19050000000b1f344759637982838383838276614c37210c00000000010a1012180f243a4f647a7a7a78624d38220d0e1a0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001025394d5f676a6c6e7378808898a0b0b1a29a897b645b4a3727150100000000000001142637495b697e94a1b2c3c6b19b858891989da5a2a2a79e9892887e72615746382815040000000006192c3c4e60687074788399aec4c5b09a847a79797979797979635544311d0800000000000000000000000000000000000000000005192b3b4d62788b9fb4af9a84705d4b3722100000000000000000000000081d3144556f849aafb7a68d78634d38230e00000000000000000000000a1a28323a474c5b636e7b85929da5b3b9c0b4b0a1998c82786b61584b45383025180800000000000000000008141c3039404c505d656f79838c979faab4bab4ab9f998e847a6f655d504b3f382f22110100000d23384d62788dabbccfbea9937e69543e2914000000000000000000000000000000000000000000000000000010253a4f657a8fa4c8d8c9a5907a65627682919ca4aeb3b9c5c5b8b3a99f937e685b4a361d0c000000091d3145566b809598989898937f6a594834200f0000071a2d3d4c6177889798989898826d5847331f0a00000005131e25272d2233485d73888f8f816d57422d2123302320190e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e0d0b1d30414d525556595a636b7682969eb0b4a79e8979635544311d080000000000000009192c3d4f616e8399a5b6c6b49f8a7b7c83878b8d8d8b88837d756860544639281a0a00000000000c2035495a687e85898c99a1b3c7c8b4a29a8e8e8e8e8e8e8e8d74604b36200b000000000000000000000000000000000000000000000d2035495a6d8298abb4a28f7a654f3e2d1b07000000000000000000000b20354b6075899eb4b39d88735a4935200c0000000000000000000002152838454b58616c79838f9ba3b2b7c2b5b1a29a8f83796d62594c473a32281c1308000000000000000000000001121d242f383f4b4f5c646e79828b969fa9b3b9b5aea1998f847a70655d504c402f1f0f00000b21364b60768a9fb4cac0aa95806b55402b1600000000000000000000000000000000000000000000000000000d22374d62778caabbcebda8927d6858616e7c8691999ea7a4a4a79e978a7e69604e3d2d1a00000000021527384b6176889eaeaead9f8a78624d3d2d1a07000821364a5b6c8197a6aeae9f8a78624d3a2a1704000001132330393d423733465b70859b9a846f5a362c35384538352c1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b1113161e2123221f182330393c40413c494d58616d8096a2b4b8a79c8673604b36251300000000000000000f1f32434c6176879ca8b9baa99d88786e7276777776736e6860564a4336281b0b0000000000000e23384d63788d9b9ea8aeb3bfd0d1c0b4b0a3a3a3a3a3a3ab8d78634d38230e0000000000000000000000000000000000000000000006192c3c4e63798c9fb4af99846f5c4a36220f000000000000000000000f24394f64798ea8b9ae98836e593c2c190600000000000000000000091d324556606a77818b99a1b0b5c1b5b1a49c91857a6e635b4d483b33291e160a0000000000000000000000000000000a111c232e373e4a4e5b636d78818a959ea8b2b7b3aea29a8f847b70665e4c3d2d1a0700091e32455672879db2c7c4ae99846f593c2c1906000000000000000000000000000000000000000000000000000b20354b60758a9fb4c9bfaa95806a554c5e66737c83898d8f8f8d89827969604f42311f0f00000000000a1e334657687e93a4b6baa997826d5b4a36211108182f3f4e63798c9fb4b8a695806b5948341c0c0000000a1e30414d52574c473a586d83989c877254433d494e5a4d493c2c19090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005131e25282832363837342a1d1d25272b2c2c353a464c6072849aafc2b5a4937e695443301c070000000000000001141f33465863798a9eb4bcb7a69c867561616262605658524b45383025180b000000000000000e23384e63788dabb4b9c6c8cbd4ded1c8c5b9b9b9b9b9c9a5907b65503b261000000000000000000000000000000000000000000000000e2135495b6e8398aeb3a18e79644f3d2c1a0600000000000000000014293e54697e93a9c5a8937e69533e291400000000000000000000000b20364b60747f89969faab3bfb6b2a49c92867c70645d4e493d342b1f170c0300000000000000000000000000000000000009111c232d363d494e5a626c778089949da5b1b5b3afa29a90857c665b4a36210c0003162838596e8499aec3c8b39e88735a4935200c00000000000000000000000000000000000000000000000000081c30435472879db2c7c2ad97826d58404d5560666e74787a7a77756c635b4f42322414010000000000031729394b6074869cb1c0b49f8c79634e3f2f181426364c5d6f8499aabbb39e8876614b3b2b19000000001025394d5f676d61584b556b80959f8a75604a4a5b636f635a49372614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011323313a3d38454b4d4c473b312619121517192029334354647a8fa4b5c2b29c8773604a35200b00000000000000000417293a4a5b677d919eb0bfb5a4998373604d4d4b45383d3632281c130800000000000000000b21364b60768a9fa4a4a4b2b7c4d4cabaada8a4a4a4a4a4a4937d68533e28130000000000000000000000000000000000000000000000061a2c3d4e64798ea1b3ae99836e5b4936210e000000000000000006192c3c596e8398aeb9a78e79644e39240f000000000000000000000011263c51667b919ea7b4bbc8b6a59c91867d73665e4f4b3f362c20190d040000000000000000000000000000000000000000000008101b222c353c484d59626b767f87909ca4b5c0b4afa29b8e79634e39230e0000142a3f54697f94a9c3cbb8a68d78634d38231100000000000000000000000000000000000000000000000000011426365a70859aafc5c5af9a85705a3637444b5154606264646260554e493d32241406000000000000000b1d314455667c91a2b4bcab99846f5d4b36251c304354657b90a1b3b6a4937e685746331d0d000000081c2f3f52677d8277686054687d92a98c7762546069798578635544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1e31424e535956606362594b443726140100060c1725364b5c71869cb1c6b6a58f7a654f3a25100000000000000000000b1b2d3d4d5f6b8095a1b3c2b3a197816c614f40322828211e160a00000000000000000000091e32455673888e8e8e8e9da6b7cbc1ad9c928e8e8e8e8e8e8e806b56402b160100000000000000000000000000000000000000000000000f21364a5c6f8399aeb59f8c79634e3c2c1906000000000000000c2135495b73889db3b39e8974604b35200b00000000000000000000000e24394e63798ea3b6c2c9c7b29c877b756860564b4639332a20180d0600000000000000000000000000000000000000000000000000070f1a212b353b474c58616a747b869cb1c6c8c0b4a5907b66503b261100000e24394e63798ea5b7cac5aa957f6a55402f190900000000000000000000000000000000000000000000000000182d42586d8297adc2c7b29d8772544330313536434a4d4f4f4d4b4437352c1f14060000000000000000011527374c5e6f849aabbcb3a1907b6554433028394b6073869cb1bfb19c8673604b392917000000000e23384b5d718597897e7364657a90a48f7a6562727e8a9a8573604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011253a4e60686e727678776d605544311d0a00000008182e3e576c8196acc1c3aa947f6a553f2a15000000000000000000000f1f30414b60728399a5b6bfb19f947f695e4d3e2e1e0e09020000000000000000000000031628384e63797979797a889db2c8bda8927e7979797979797978624d38220d000000000000000000000000000000000000000000000000071a2d3d4f647a8fa2b3ab98826d5a4935200d000000000000000e23384d63788da6b7af99846f5443301c0800000000000000000000000c21364c61768b9ca4b1b5c2b6a59c8d857d756961574c473a342b20190e0600000000000000000000000000000000000000000000000a151d29333b484c5b636e7a838c9ca4b5c9c1b4b0a0937e68533e291300000c21364a5b72879db2c8c7b29c87725e4c37261401000000000000070b100d0b06000000000000000000000000152b40556a8095aabfc9b49f8a75604b352020253035383a3a38353127211a0f010000000000000000000009192f404f647a8d9fb5bfb09b8572604a38324657687d92a4b5b4a2907c665544311b0b0000000010253b50657a909f9e93857a6d788da7927c677784939fa3947f6a553f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687e83878a8d8b8273604b3828150200000013293e53687e93a8bdc3ae99836e59442e190000000000000000000001121c3043546176879ca8b9bdb49f8d7c665c4a3c2b1b0b000000000000000000000000000a2136495b6364646470859aafc5bca7927c67646464646464625a4835200b000000000000000000000000000000000000000000000000000f22374b5c6f849aafb49f8b78634d3b2b190500000000000013283d52687d92a7c4a9947f6a543626140100000000000000000000000a1e334657677d86919ca4b1b5b6ab9f9b92887f766a61584c483b352b211a0f070000000000000000000000000000000000000008131c273139464c59626c79838f989faab5c2b6b2a39b8f8278624d38220d0000071a2d3d556a7f95aabbcab6a5907b665544311d110100000008131c20252320190e000000000000000000000013283d53687d92a8bdcebbaa8c77624d37220d131c2023252522201d150906000000000000000000000000001222364a5c6d8298a9bab5a3927d6756453b4b6175889db2bcab9a846f5e4c37261400000000000c22374c6177828d9ba39b8d8276899e927e7c899aa1a098877b654f3a25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b80959c9faa9f937e695645321d0b00000012273c51677c91a6bcc6b09b86715b46311c000000000000000000000001142636465863798a9eabbcbcab9f8b7a645a483a291909000000000000000000000000061a2c3d494e4f4f586d8297adc2bfaa947f6a554f4f4f4f4f4d483c2b190500000000000000000000000000000000000000000000000000071b2e3e50657b8fa2b4aa97826d594834200c000000000005182a3b586d8297adbaa98f7a654f3a2510000000000000000000000000031729394d5f67737c86919ba3b0b5b5b0a69d948980766b62594d493c362c221b1008000000000000000000000000000000071118253038454b57616b77818b99a1aeb4bbb8b3a59d91857a6e625a4835200b0000000f22374d62778b9fb4c7c3b19c8673604b3f2e1f1309060d182530353b38352b1e120400000000000000000010253b50657a90a5c9d8c8a48f7a644f3a250f00070b0d0f0f0d0b0801000000000000000000000000000000071b2d3e4d62788a9fb4c1b29d8774604b48596a7f95a6b7b59f8d7a644e402f190900000000000b1f344759616d7a85939e9f9788859b9983919ea79e918276655d4b37230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798ea4b4bbb39e8875604b3a29180a000011263c51667b91a6bbc7b29c87725d47321d0000000000000000000000000818293a4a5b677c8d9fb5bfbaa99d8878625846372715020000000000000000000000000f1f2c3639393f546a7f94a9bfc2ad98826d583a3939393938352b1e0e0000000000000000000000000000000000000000000000000000001023374b5d70859ab0b49f8b78624d3b2a1804000000000b1f34475972879cb2b49f8a75604b36200b000000000000000000000000000b1b30414d546067737c86909ba3b0b4b7b3a79e958981776c625a4e493d362d231c1101000000000000000000000002101b222f36434a56606976808a979faab2bfbbb4a79e94877c70645d4d483c2b19050000000b203448596d8298a9bac9b5a4937e695d4b3d31211e19212b36434a504d493c2f22120100000000000000000e23384d63788dabbccfbca7927c67523d27120000000000000000000000000000000000000000000000000000102034485a6b8095a6b8b7a5947e69584c62778a9eb4baa998826d5c4a36221200000000000004182a3b474c5d64737e89969f9d9ba3a199a1a098897c6d61574b3f2e1c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d21364a5c72879cb2c3b8a7927d68584636271a121116283853687d92a8bdc8b39d88735e48331e000000000000000000000000000c1c2d3d4d5f6b8095a1b3c3b8a69c8676615544311d15050000000000000000000000010f1a2123263b50657b90a5c1c6b09b86715847332424242220190e00000000000000000000000000000000000000000000000000000000081c2e3f50667b90a3b5a996816c5947341f0c000000000d22374c62778ca5b6b09a85705645321d09000000000000000000000000000013233036434b546066717c85909ba2afb4b8b3a89e968a81786d635b4f4a3e372e1d15090000000000000000000513202d363f4c546067747e88959fa8b4bbbfb2aa9f96897f74675f4f4b3f352b1e0e0000000005182b3b4d62788a9fb4c1c2b49f8b7b655c4e4136322c353b48546065625a4c402f1f0f00000000000000000b20364b60758a9fb5cabfa9947f6a543f2a15000000000000000000000000000000000000000000000000000005192b3c4c6176889eb3c2b39e8976615b6d8297a8b9b49f8a78624d3e2d1b04000000000000000c1d2a343f4b55606977818a9da5b5b3a99f978277675f4c46392e2111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3e53687e93a5b6c5b39d8876615445382e2726283245566c8197acc1c6b19c87715c47321c00000000000000000000000000000f1f30404b60728399a4b6c4b6a49a8473604b4332231302000000000000000000000000060c0e21374c61768ca3b5cab49f8a77614c3828171111100b0801000000000000000000000000000000000000000000000000000000001123384c5e71859bb0b49f8a77614c3a29170400000012273c51677c91a6c3aa95806b55382815020000000000000000000000000000051318263036434a515e66707b85909aa2afb3b9b4a99f978b82796e645c504b3f3127190900000000000000011323313e4a4e5d65727d87939ea7b4bac1b4b0a0988b81766960564d41372e20190e0000000000000d2034485a6a8095a3b5c5baa99e897a685f514b453c494d5962727a78665e4c3d2d1d0c00000000000000091d31455673889db3c8c1ac97816c57422c170200000000000000000000000000000000000000000000000000000d1e334657697e93a4b6b8a796806b63798c9fb4b8a695806b5a483420100000000000000000000c181f2e37444b5b63747d889db2b49f8a81776c61584a43362e2016080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f20364b6074879db2bfb7a699837260564b3f3d3b38454b6075889eb3c8c4af9a856f5a45301a000000000000000000000000000001121c3043546176869ca8b9c2b4a297816d614f4130201000000000000000000000000000000a1f33475870859bb0c6bbaa937d6856453329272625201d1509000000000000000000000000000000000000000000000000000000091c2f4051667c91a2b4a995806b5847331f0a000003172939566c8196abb9a8907b66503b2611000000000000000000000000000000000008141c253035404c515e66707b848f9aa2aeb3bab4aa9f988c837a6f655d4b44372715010000000000000b1e31414e5c646f7b85929da5b3b8c3b6b2a39b8f83786c61584b453830221b10050000000000000005192b3c4b6074859ba7b9c6b8a79e8a7d6f6660565d5b636b7784908a7c665b4a3b2a1804000000000000021527385b70859bb0c5c4ae99846f59442f1a000000000000000000000000000000000000000000000000000000031729394b6074869cb1c0b49f8a776e8399abbcb39e8876614b3c2b190200000000000000000010202e3b485460697985929d9f9fa99f9f978b81766860544a3e332616040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455677d92a1b3c3b3a1988274655d5552505256606b8096a6b8cbc2ab96806b56412b1600000000000000000000000000000001142636465863798a9eabbcc0b19f947f6a5f4d3f2e1e0e000000000000000000000000000417293a53687e93a8b9c8b29d8774604c473a3c3b3a35312719090000000000000000000000000000000000000000000000000000001120354a6072859aa5b09e8976614c38271502000a1e33465771869bb0af9e8975614b36210c0000000000000000000000000000000000000108131c202f38404c505d65707a848f99a1aeb5bbb4ab9f998e847b6e605544311d0800000000000011253a4e5f687a84909ba3b2b6c3b9b3a59d91857a6e635a4c473a31271a1208000000000000000000000d1d3144556379899ea8b9c5b8a99f92847c7672727378808a9aa29e8a79635947341f0b00000000000000192e43586e8398adc3c6b19c87715c3a2a17040000000000000000000000000000000000000000000000000000000b1d314455667c91a2b4baa89580798ea1b3b6a4937e685746331d0d000000000000000000071b2e3e4a5962727e8b9ba39f8a8b9f8b8a9e9f96887d72645c514433210e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527374d5f6e8399a5b7bfb2a098867a716a6766676b7580969eb0c4cab6a48f7a65503a2510000000000000000000000000000000000818293a495b667c8d9fb5bfbdb59f8d7d675d4b3c2c1c0c000000000000000000000000000c21364c6176899eb4c2b7a597816d61585351514f4b44372715010000000000000000000000000000000000000000000000000000071c304354627887959b9c957f6a5645311d09000c21364b61768a9c9c9a927f6a5746321e0900000000000000000000000000000000000000000007121d242f383f4b505d656f7a848e999fabb4bcb5aea29a8f8273604b35200b00000000000013283d52687d8c9aa2b1b5c1bbb4a79e94877c70655d4d493c332a1d150a00000000000000000000000002152737495b647b8a9ea8b6c3bab4a29a918a8787898d959ea8b4a89d8777614c37220c00000000000001162b41566b8096abc0c9b49e89745847331f0a000000000000000000000000000000000000000000000000000000011527374c5e70849aabbcb29d878197acbfb19c8674604b392917000000000000000000000d22364a5c647884949fa59d8c7e8a9f8c7e89979f9e92857a6b62513d2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091931414c6176879da7b8beb2a49c8f86807c7b7c8188969eb0bccdbeb19c8674604b35200b00000000000000000000000000000000000c1c2c3d4d5e6b8095a1b3c2bcab9f8b7b645a493a2a1a0a0000000000000000000000000a1f334658697f94a4b6c3b19f9782766d68666665605544311d08000000000000000000000000000000000000000000000000000000132536495a6276808587878575604b36200b000f253a4f647a878787857d6a614f39281603000000000000000000000000000000000000000000000009111c232f373f4b4f5c646f7a838c989fabb4bbb3afa0927d67523d28120000000000061c31465b71869baab3c0bfb2aa9f96897f74675f4f4b3f352c1f170c02000000000000000000000000000009192c3c4b5d657c8a9da5b4bcc0b4afaa9f9d9c9ea7aab4b9bbb49e917c67513c27120000000000000013293e53687e93a8bdc6b9a88c76614c37210c0000000000000000000000000000000000000000000000000000000009192f404f647a8d9fb5b7a69d8b9fb4b4a2917c665544311b0b000000000000000000000f243a4f647a899aa2a098877b728aa7927d77828d9ba39b8d806b56402b1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f334758647a899ea6b5c1b5b1a39b95929092969da6b0bccdc0b2a0917c675544311d080000000000000000000000000000000000000f1f30404a60728399a4b6c6baa99e89786358473827150200000000000000000000000417293a4b6074869ca7b8bdb1a0988a827e7c7b7a73604b35200b00000000000000000000000000000000000000000000000000000008182b3c4958616b70727270605645311d09000d22374b5c647272726f675f4f43321b0b000000000000000000000000000000000000000000000000000009111c232e373e4b4f5c646e79838c989faab4bbac96816c57412c170200000000061b30465b70859bb0c1b5b0a1998b81766960564d41372e20190e0400000000000000000000000000000000000e1e2e3f4c5d657987979fabb4bbc8bbb4b2b2b3b8c5c2b5aa9f94806a5f4d3924100000000000000011263b51667b90a6b0b0b0a38e79644e39240f00000000000000000000000000000000000000000000000000000000001222364a5c6d8298a9bab7ab9fabbcab9a846f5e4c37271500000000000000000000000b21364b6075879c9e9282766574899e96816b6d7a85939e947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a4a5c6479889ba3b4bac1b5b1aaa7a5a7abb3b7c4c8bdb1a298826e5f4d3726140100000000000000000000000000000000000001121c3043546176869ca8b9c7b8a79c8676615645311d150000000000000000000000000b1d3144556379899ea8b5beb2a89e989391908f816c57382816030000000000000000000000000000000000000000000000000000000e1e2b3a474c555b5d5d5b4b453827150200081b2e3e4b4f5d5d5d5a524d41322515000000000000000000000000000000000000000000000000000000000008111c232e373e4a4f5b636e79828c979faaae99846e59442f19000000000003192e43586e8398adb2a39b8f83786c61584b453830221b1006000000000000000000000000000000000000000010202f3f4c5b6376818c999faaafb4b9c6b9c4b7b3ada39b8c7f6a625041301d0a000000000000000e24394e63798e9b9b9b9b9b917b66513c26110000000000000000000000000000000000000000000000000000000000071b2d3e4d62788a9fb4c5bcb4bcb59f8d7a644f402f19090000000000000000000000091e324557647a8c897d6d615771869b99836e5c64737e888a76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3e4a5b637985949fa9b2b7c4bfbcbbbcc0c6c3c0b4af9f978474604b41301909000000000000000000000000000000000000000000132536465863798a9eaab6c3b6a49a8474604b43331b0b000000000000000000000002152737495b647b8a9ca4b3b8b9b4ada8a6a69c87725645321e09000000000000000000000000000000000000000000000000000000000e1c2a333740464747463631271a0a00000010202e373a474747453d3a312315070000000000000000000000000000000000000000000000000000000000000008101b222d363d4a4e5b636d79828b979f9c86715c3a2917040000000001162b41566b8096a59d91857a6e635a4c473a32281a1308000000000000000000000000000000000000000000000211212f3d4a58616c7a838b94999ea8a3a4a3a69d9890867a6961504333231200000000000000000c21364b6175858686868686857d67513c2712000000000000000000000000000000000000000000000000000000000000102035485a6b8095a6b8cbcabaa998826d5c4a362212000000000000000000000000031628394b5c687d78675f4c596e84999b86715c546068767c675847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202d3d4a5b63737f8a949da6a9aeb0b2b3b2b0aea8a29a908174605645322312000000000000000000000000000000000000000000000818293a495b667c8c9ca4a7a8a8a298826d615039281603000000000000000000000009192c3d4b5c647986959ea7aeb3b9c6c8b49f8a76604b36210b00000000000000000000000000000000000000000000000000000000000c171f212b30323231201d150a0000000002101b22253232323028251e13050000000000000000000000000000000000000000000000000000000000000000000008101b222d363d494e5b636d78828b9789745846331f0a000000000014293e53697e9394877d72655d4d493c332a1d150a0000000000000000000000000000000000000000000000000003111f2d3a464c5c646e787f84898c8d8e8e8b88837b72645d4f433325150400000000000000000a1e3346576171717171717171675f4d39241000000000000000000000000000000000000000000000000000000000000005192b3c4c6176889eb3c2c5b49f8a78624d3e2d1b04000000000000000000000000000a1b2e3e4e5f68625a4d41566c81969e897358464b5861675f4d3a2a170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101f2d3d4955606a777f888f94999b9d9e9d9b99938e847b6c6056453828160400000000000000000000000000000000000000000000000b1b2c3d4c5e667b878f929393939393806a5746321e090000000000000000000000000f1f2e3e4b5b63757f8993999ea8a3a4aa9f8e79644f39240f000000000000000000000000000000000000000000000000000000000000040a0c161b1d1d1b0b090200000000000000080d0f1d1d1d1a12100a0100000000000000000000000000000000000000000000000000000000000000000000000000070f1a212c363d494e5a626d78818b76614c36210c000000000011263c51667c897f746760544b3f352c1f170c02000000000000000000000000000000000000000000000000000000010f1c29333e4a4f5a62696f757678797876736d6660544b3f3225150700000000000000000003172939464b5b5b5b5b5b5b5b514d41301d0a000000000000000000000000000000000000000000000000000000000000000e1e334657697e93a4a8a8a695806b5a48342010000000000000000000000000000000102031414e524d483c3e54697e93a78b76614c3a474c514d40301c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1f2c37444b58616a74797f838687898886837e796f655d4b4538281a0a000000000000000000000000000000000000000000000000000f1f2f404c5d6573797d7e7e7e7e7e7e75614b36210c0000000000000000000000000110202e3d4957606a767e83898c8e8f8d8a857a644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a212c353c494d5a626c7775614b36210c00000000000c22374c6176766960564a43362e20190e04000000000000000000000000000000000000000000000000000000000000000c171f2d363c484d54546061636463615858514a43362e20140700000000000000000000000b1b293336464646464646463c393023120100000000000000000000000000000000000000000000000000000000000000031729394b607386939393938876614c3c2b1902000000000000000000000000000000021323313a3d38352b3c51667c919c8e79644e3933373c3930221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1926313a474c556064696e70727372716e69635b504c3f32281a0a00000000000000000000000000000000000000000000000000000112222f3f4c54606467686868686868615746321e090000000000000000000000000002101f2c39454b5761686e74777879787670645c4a36220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e1a212c353c484d5962615746331e0a00000000000a1f3347586161584b453830251810060000000000000000000000000000000000000000000000000000000000000000000004101b222b343836434b4c4e4f4e4c463a3b353025181002000000000000000000000000000b171e213131313131313127241d12050000000000000000000000000000000000000000000000000000000000000000000b1d314455647a7e7e7e7e7b655746331d0d000000000000000000000000000000000005131e2528222023394e63798687867b65503b252127241d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2a3337444b4f54595b5d5e5d5b59534e493d382f1d150a000000000000000000000000000000000000000000000000000000000412212f36434a4f525353535353534b46392816030000000000000000000000000000010f1b283239464b5354606163646260574f4a3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e19202b353b484d4b4639291703000000000004182a3a474c4c473a32281c13080000000000000000000000000000000000000000000000000000000000000000000000000000070d1920222630353738393936332926201c130800000000000000000000000000000000030a0c1c1c1c1c1c1c1c12100a0100000000000000000000000000000000000000000000000000000000000000000000011527374a5c6468686868655d4b39291700000000000000000000000000000000000000010b11130d0c2136495b63727272655d4b37230c12100a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c181f2631353a3f444648494846443e39352c231c11020000000000000000000000000000000000000000000000000000000000000311182530353a3d3e3e3e3e3e3e3632281b0b00000000000000000000000000000000000a161e29333636434a4c4e4f4d4b4539362d2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060e19202b34373633291b0b000000000000000c1c2a333737332a1d150a000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d141c2021232423211f17110b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192d3e4a4e535353534f4b3f2e1b0b000000000000000000000000000000000000000000000000061a2c3d494e5c5c5c504b3f2e1c0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000409141d20242a2e31323433312e2923211a0f080000000000000000000000000000000000000000000000000000000000000000000008131c202428292929292928211e160b00000000000000000000000000000000000000030b171e2125303537393a38363228221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d182022211e170b0000000000000000000c181f22211f170c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0c0e0f0e0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202d36393e3e3e3e3a372e211000000000000000000000000000000000000000000000000000000f1f2c36394747473b372e2111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f14191b1d1e1d1c19140e0c060000000000000000000000000000000000000000000000000000000000000000000000000000070b0f121313131313130c090300000000000000000000000000000000000000000000030a0c131c2022232423211e160a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0c0a030000000000000000000000040a0c0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b22242929292925221b10030000000000000000000000000000000000000000000000000000010f1a212332323225231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0c0e0f0d0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f13131313100e08000000000000000000000000000000000000000000000000000000000000060c0e1d1d1d100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!21 &9199864149694275698 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-SemiboldItalic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 7756098031741986397} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-SemiboldItalic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-SemiboldItalic SDF.asset.meta new file mode 100644 index 0000000..5a739ba --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-SemiboldItalic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c954dac1de116b478a8154de93b2b6c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Thin SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Thin SDF.asset new file mode 100644 index 0000000..84929c3 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Thin SDF.asset @@ -0,0 +1,2702 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-Thin SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: 1676728505900478140} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: aff9bd28005f2c848854b890b7962407 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Thin + m_PointSize: 78 + m_Scale: 1 + m_LineHeight: 93.6 + m_AscentLine: 76.986 + m_CapLine: 55 + m_MeanLine: 38 + m_Baseline: 0 + m_DescentLine: -16.614 + m_SuperscriptOffset: 76.986 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -16.614 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -19.89 + m_UnderlineThickness: 1.404 + m_StrikethroughOffset: 15.2 + m_StrikethroughThickness: 1.404 + m_TabWidth: 22 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 21.796875 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 47.453125 + m_Height: 54.828125 + m_HorizontalBearingX: 1.40625 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 50.265625 + m_GlyphRect: + m_X: 277 + m_Y: 259 + m_Width: 48 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 34.984375 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 48.71875 + m_GlyphRect: + m_X: 395 + m_Y: 191 + m_Width: 36 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 45.09375 + m_Height: 56.078125 + m_HorizontalBearingX: 4.984375 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 53.046875 + m_GlyphRect: + m_X: 157 + m_Y: 268 + m_Width: 47 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 45.421875 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 59.234375 + m_GlyphRect: + m_X: 294 + m_Y: 125 + m_Width: 47 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 32.4375 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 45.359375 + m_GlyphRect: + m_X: 438 + m_Y: 6 + m_Width: 34 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 32.359375 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 43.984375 + m_GlyphRect: + m_X: 465 + m_Y: 185 + m_Width: 34 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 47.078125 + m_Height: 56.078125 + m_HorizontalBearingX: 5.03125 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 57.5625 + m_GlyphRect: + m_X: 114 + m_Y: 131 + m_Width: 48 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 41.171875 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 58.578125 + m_GlyphRect: + m_X: 342 + m_Y: 191 + m_Width: 42 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 2.140625 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 19.53125 + m_GlyphRect: + m_X: 451 + m_Y: 122 + m_Width: 3 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 22.859375 + m_Height: 55.453125 + m_HorizontalBearingX: 1.046875 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 32.015625 + m_GlyphRect: + m_X: 260 + m_Y: 125 + m_Width: 23 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 38.640625 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 48.40625 + m_GlyphRect: + m_X: 306 + m_Y: 444 + m_Width: 40 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 29.328125 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 39.1875 + m_GlyphRect: + m_X: 437 + m_Y: 316 + m_Width: 31 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 52.640625 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 70.046875 + m_GlyphRect: + m_X: 269 + m_Y: 328 + m_Width: 54 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 41.171875 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 58.578125 + m_GlyphRect: + m_X: 352 + m_Y: 125 + m_Width: 42 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 51.328125 + m_Height: 56 + m_HorizontalBearingX: 5.03125 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 61.390625 + m_GlyphRect: + m_X: 94 + m_Y: 272 + m_Width: 52 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 32.015625 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 44.1875 + m_GlyphRect: + m_X: 407 + m_Y: 441 + m_Width: 33 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 53.390625 + m_Height: 67.9375 + m_HorizontalBearingX: 5.03125 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 61.390625 + m_GlyphRect: + m_X: 6 + m_Y: 122 + m_Width: 54 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 36.375 + m_Height: 54.828125 + m_HorizontalBearingX: 8.703125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 46.5625 + m_GlyphRect: + m_X: 388 + m_Y: 324 + m_Width: 38 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 32.75 + m_Height: 56.078125 + m_HorizontalBearingX: 3.984375 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 41.453125 + m_GlyphRect: + m_X: 206 + m_Y: 6 + m_Width: 34 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 42.4375 + m_Height: 54.828125 + m_HorizontalBearingX: 1.125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 44.6875 + m_GlyphRect: + m_X: 334 + m_Y: 325 + m_Width: 43 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 40.40625 + m_Height: 55.53125 + m_HorizontalBearingX: 8 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 56.390625 + m_GlyphRect: + m_X: 136 + m_Y: 358 + m_Width: 41 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 47.453125 + m_Height: 54.828125 + m_HorizontalBearingX: 1.40625 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 50.265625 + m_GlyphRect: + m_X: 283 + m_Y: 192 + m_Width: 48 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 74.21875 + m_Height: 54.828125 + m_HorizontalBearingX: 2.1875 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 78.578125 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 75 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 43.53125 + m_Height: 54.828125 + m_HorizontalBearingX: 1.984375 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 47.546875 + m_GlyphRect: + m_X: 330 + m_Y: 6 + m_Width: 45 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 42.890625 + m_Height: 54.828125 + m_HorizontalBearingX: 1.171875 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 251 + m_Y: 444 + m_Width: 44 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 40.140625 + m_Height: 54.828125 + m_HorizontalBearingX: 3 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 46.453125 + m_GlyphRect: + m_X: 386 + m_Y: 6 + m_Width: 41 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 27.0625 + m_Height: 39.703125 + m_HorizontalBearingX: 3.703125 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 37.25 + m_GlyphRect: + m_X: 176 + m_Y: 74 + m_Width: 28 + m_Height: 41 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 31.25 + m_Height: 56.859375 + m_HorizontalBearingX: 6.859375 + m_HorizontalBearingY: 56.390625 + m_HorizontalAdvance: 42.625 + m_GlyphRect: + m_X: 52 + m_Y: 448 + m_Width: 33 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 28.859375 + m_Height: 39.546875 + m_HorizontalBearingX: 4.484375 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 36.546875 + m_GlyphRect: + m_X: 135 + m_Y: 79 + m_Width: 30 + m_Height: 41 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 31.234375 + m_Height: 56.859375 + m_HorizontalBearingX: 4.53125 + m_HorizontalBearingY: 56.390625 + m_HorizontalAdvance: 42.625 + m_GlyphRect: + m_X: 71 + m_Y: 131 + m_Width: 32 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 31.90625 + m_Height: 39.546875 + m_HorizontalBearingX: 4.484375 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 40.40625 + m_GlyphRect: + m_X: 91 + m_Y: 79 + m_Width: 33 + m_Height: 41 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 22.21875 + m_Height: 55.421875 + m_HorizontalBearingX: 2.265625 + m_HorizontalBearingY: 55.421875 + m_HorizontalAdvance: 26.171875 + m_GlyphRect: + m_X: 235 + m_Y: 334 + m_Width: 23 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 33.703125 + m_Height: 53.671875 + m_HorizontalBearingX: 3.3125 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 39.421875 + m_GlyphRect: + m_X: 405 + m_Y: 123 + m_Width: 35 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 29.296875 + m_Height: 56.390625 + m_HorizontalBearingX: 6.859375 + m_HorizontalBearingY: 56.390625 + m_HorizontalAdvance: 42.59375 + m_GlyphRect: + m_X: 251 + m_Y: 6 + m_Width: 31 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 5.375 + m_Height: 55.03125 + m_HorizontalBearingX: 5.65625 + m_HorizontalBearingY: 55.03125 + m_HorizontalAdvance: 16.6875 + m_GlyphRect: + m_X: 265 + m_Y: 192 + m_Width: 7 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 13.421875 + m_Height: 69.546875 + m_HorizontalBearingX: -2.421875 + m_HorizontalBearingY: 55.03125 + m_HorizontalAdvance: 16.6875 + m_GlyphRect: + m_X: 6 + m_Y: 372 + m_Width: 14 + m_Height: 71 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 27.8125 + m_Height: 56.390625 + m_HorizontalBearingX: 6.859375 + m_HorizontalBearingY: 56.390625 + m_HorizontalAdvance: 35.84375 + m_GlyphRect: + m_X: 220 + m_Y: 126 + m_Width: 29 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 48.75 + m_Height: 39.078125 + m_HorizontalBearingX: 6.859375 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 62.046875 + m_GlyphRect: + m_X: 252 + m_Y: 74 + m_Width: 50 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 29.296875 + m_Height: 39.078125 + m_HorizontalBearingX: 6.859375 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 42.59375 + m_GlyphRect: + m_X: 313 + m_Y: 74 + m_Width: 31 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 34.171875 + m_Height: 39.546875 + m_HorizontalBearingX: 4.484375 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 43.171875 + m_GlyphRect: + m_X: 6 + m_Y: 454 + m_Width: 35 + m_Height: 41 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 31.25 + m_Height: 53 + m_HorizontalBearingX: 6.859375 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 42.625 + m_GlyphRect: + m_X: 465 + m_Y: 251 + m_Width: 33 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 31.234375 + m_Height: 53 + m_HorizontalBearingX: 4.53125 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 42.546875 + m_GlyphRect: + m_X: 465 + m_Y: 408 + m_Width: 32 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 19.078125 + m_Height: 39.078125 + m_HorizontalBearingX: 6.859375 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 27.109375 + m_GlyphRect: + m_X: 396 + m_Y: 72 + m_Width: 20 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 24.875 + m_Height: 39.703125 + m_HorizontalBearingX: 3.90625 + m_HorizontalBearingY: 39.078125 + m_HorizontalAdvance: 32.84375 + m_GlyphRect: + m_X: 215 + m_Y: 74 + m_Width: 26 + m_Height: 41 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 22.34375 + m_Height: 53.078125 + m_HorizontalBearingX: 2.296875 + m_HorizontalBearingY: 52.453125 + m_HorizontalAdvance: 26.046875 + m_GlyphRect: + m_X: 483 + m_Y: 6 + m_Width: 23 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 29.28125 + m_Height: 39.078125 + m_HorizontalBearingX: 6.4375 + m_HorizontalBearingY: 38.453125 + m_HorizontalAdvance: 42.515625 + m_GlyphRect: + m_X: 355 + m_Y: 72 + m_Width: 30 + m_Height: 40 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 34.78125 + m_Height: 38.453125 + m_HorizontalBearingX: 1.875 + m_HorizontalBearingY: 38.453125 + m_HorizontalAdvance: 38.53125 + m_GlyphRect: + m_X: 335 + m_Y: 391 + m_Width: 36 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 54.21875 + m_Height: 38.65625 + m_HorizontalBearingX: 2.296875 + m_HorizontalBearingY: 38.65625 + m_HorizontalAdvance: 58.8125 + m_GlyphRect: + m_X: 6 + m_Y: 72 + m_Width: 55 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 31.203125 + m_Height: 38.453125 + m_HorizontalBearingX: 2.109375 + m_HorizontalBearingY: 38.453125 + m_HorizontalAdvance: 35.40625 + m_GlyphRect: + m_X: 382 + m_Y: 391 + m_Width: 32 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 34.875 + m_Height: 52.375 + m_HorizontalBearingX: 1.90625 + m_HorizontalBearingY: 38.453125 + m_HorizontalAdvance: 38.578125 + m_GlyphRect: + m_X: 468 + m_Y: 121 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 28.75 + m_Height: 38.453125 + m_HorizontalBearingX: 2.6875 + m_HorizontalBearingY: 38.453125 + m_HorizontalAdvance: 34.234375 + m_GlyphRect: + m_X: 427 + m_Y: 72 + m_Width: 30 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 10.265625 + m_Height: 10.25 + m_HorizontalBearingX: 8.8125 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 31.203125 + m_GlyphRect: + m_X: 94 + m_Y: 340 + m_Width: 12 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 5.921875 + m_Height: 55.453125 + m_HorizontalBearingX: 6.59375 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 19.265625 + m_GlyphRect: + m_X: 259 + m_Y: 261 + m_Width: 7 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 309 + m_Metrics: + m_Width: 25 + m_Height: 56.078125 + m_HorizontalBearingX: 3.9375 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 33.078125 + m_GlyphRect: + m_X: 293 + m_Y: 6 + m_Width: 26 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 5.625 + m_Height: 14.8125 + m_HorizontalBearingX: 5.6875 + m_HorizontalBearingY: 5.296875 + m_HorizontalAdvance: 16.765625 + m_GlyphRect: + m_X: 226 + m_Y: 416 + m_Width: 7 + m_Height: 16 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 6.359375 + m_Height: 46.8125 + m_HorizontalBearingX: 6.6875 + m_HorizontalBearingY: 37.296875 + m_HorizontalAdvance: 19.109375 + m_GlyphRect: + m_X: 72 + m_Y: 72 + m_Width: 8 + m_Height: 48 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 5.921875 + m_Height: 37.921875 + m_HorizontalBearingX: 6.125 + m_HorizontalBearingY: 37.296875 + m_HorizontalAdvance: 18.375 + m_GlyphRect: + m_X: 442 + m_Y: 189 + m_Width: 7 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 314 + m_Metrics: + m_Width: 5.921875 + m_Height: 5.921875 + m_HorizontalBearingX: 6.125 + m_HorizontalBearingY: 5.296875 + m_HorizontalAdvance: 18.140625 + m_GlyphRect: + m_X: 125 + m_Y: 426 + m_Width: 7 + m_Height: 7 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 315 + m_Metrics: + m_Width: 42.921875 + m_Height: 5.921875 + m_HorizontalBearingX: 6.125 + m_HorizontalBearingY: 5.296875 + m_HorizontalAdvance: 55.453125 + m_GlyphRect: + m_X: 117 + m_Y: 340 + m_Width: 44 + m_Height: 7 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 326 + m_Metrics: + m_Width: 26.828125 + m_Height: 59.515625 + m_HorizontalBearingX: 3.203125 + m_HorizontalBearingY: 56.390625 + m_HorizontalAdvance: 33.234375 + m_GlyphRect: + m_X: 73 + m_Y: 200 + m_Width: 28 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 1.625 + m_Height: 72.8125 + m_HorizontalBearingX: 8.234375 + m_HorizontalBearingY: 58.8125 + m_HorizontalAdvance: 18.09375 + m_GlyphRect: + m_X: 6 + m_Y: 288 + m_Width: 2 + m_Height: 73 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 329 + m_Metrics: + m_Width: 26.828125 + m_Height: 59.515625 + m_HorizontalBearingX: 3.203125 + m_HorizontalBearingY: 56.390625 + m_HorizontalAdvance: 33.234375 + m_GlyphRect: + m_X: 83 + m_Y: 362 + m_Width: 28 + m_Height: 61 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 330 + m_Metrics: + m_Width: 17.5625 + m_Height: 1.71875 + m_HorizontalBearingX: 5.609375 + m_HorizontalBearingY: 23.875 + m_HorizontalAdvance: 28.828125 + m_GlyphRect: + m_X: 172 + m_Y: 336 + m_Width: 19 + m_Height: 2 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 333 + m_Metrics: + m_Width: 30.734375 + m_Height: 1.5625 + m_HorizontalBearingX: 2.03125 + m_HorizontalBearingY: -8.8125 + m_HorizontalAdvance: 34.78125 + m_GlyphRect: + m_X: 83 + m_Y: 434 + m_Width: 31 + m_Height: 3 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 12.015625 + m_Height: 68.75 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 59 + m_HorizontalAdvance: 19.765625 + m_GlyphRect: + m_X: 47 + m_Y: 288 + m_Width: 13 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 12 + m_Height: 68.75 + m_HorizontalBearingX: 3.046875 + m_HorizontalBearingY: 59 + m_HorizontalAdvance: 19.765625 + m_GlyphRect: + m_X: 59 + m_Y: 368 + m_Width: 13 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 11.34375 + m_Height: 68.59375 + m_HorizontalBearingX: 8.3125 + m_HorizontalBearingY: 58.8125 + m_HorizontalAdvance: 22.78125 + m_GlyphRect: + m_X: 50 + m_Y: 202 + m_Width: 12 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 11.34375 + m_Height: 68.59375 + m_HorizontalBearingX: 3.125 + m_HorizontalBearingY: 58.8125 + m_HorizontalAdvance: 22.78125 + m_GlyphRect: + m_X: 71 + m_Y: 282 + m_Width: 12 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 16.109375 + m_Height: 68.59375 + m_HorizontalBearingX: 3.46875 + m_HorizontalBearingY: 58.8125 + m_HorizontalAdvance: 22.78125 + m_GlyphRect: + m_X: 19 + m_Y: 288 + m_Width: 17 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 341 + m_Metrics: + m_Width: 16.109375 + m_Height: 68.59375 + m_HorizontalBearingX: 3.203125 + m_HorizontalBearingY: 58.8125 + m_HorizontalAdvance: 22.78125 + m_GlyphRect: + m_X: 31 + m_Y: 368 + m_Width: 17 + m_Height: 69 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 342 + m_Metrics: + m_Width: 20.4375 + m_Height: 22.3125 + m_HorizontalBearingX: 6.359375 + m_HorizontalBearingY: 57.953125 + m_HorizontalAdvance: 33.15625 + m_GlyphRect: + m_X: 479 + m_Y: 316 + m_Width: 21 + m_Height: 23 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 30.109375 + m_Height: 26.546875 + m_HorizontalBearingX: 7.5625 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 451 + m_Y: 473 + m_Width: 31 + m_Height: 27 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 33.375 + m_Height: 11.3125 + m_HorizontalBearingX: 6.046875 + m_HorizontalBearingY: 28.671875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 143 + m_Y: 425 + m_Width: 34 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 1.75 + m_Height: 18.125 + m_HorizontalBearingX: 6.59375 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 14.890625 + m_GlyphRect: + m_X: 212 + m_Y: 416 + m_Width: 3 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 11.75 + m_Height: 18.125 + m_HorizontalBearingX: 6.59375 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 25.390625 + m_GlyphRect: + m_X: 188 + m_Y: 416 + m_Width: 13 + m_Height: 19 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 351 + m_Metrics: + m_Width: 47.8125 + m_Height: 56.078125 + m_HorizontalBearingX: 4.5625 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 53.9375 + m_GlyphRect: + m_X: 112 + m_Y: 200 + m_Width: 49 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 352 + m_Metrics: + m_Width: 54.875 + m_Height: 60.578125 + m_HorizontalBearingX: 4.984375 + m_HorizontalBearingY: 51.328125 + m_HorizontalAdvance: 64.3125 + m_GlyphRect: + m_X: 92 + m_Y: 6 + m_Width: 56 + m_Height: 62 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 362 + m_Metrics: + m_Width: 32.96875 + m_Height: 73.671875 + m_HorizontalBearingX: 6 + m_HorizontalBearingY: 63.265625 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 6 + m_Y: 202 + m_Width: 33 + m_Height: 75 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 370 + m_Metrics: + m_Width: 37.90625 + m_Height: 54.828125 + m_HorizontalBearingX: 3.625 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 357 + m_Y: 441 + m_Width: 39 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 39 + m_Height: 56 + m_HorizontalBearingX: 3.125 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 172 + m_Y: 199 + m_Width: 40 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 29.671875 + m_Height: 55.109375 + m_HorizontalBearingX: 8.78125 + m_HorizontalBearingY: 55.109375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 223 + m_Y: 194 + m_Width: 31 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 34.703125 + m_Height: 55.453125 + m_HorizontalBearingX: 4.953125 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 159 + m_Y: 448 + m_Width: 36 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 34.828125 + m_Height: 56.078125 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 173 + m_Y: 131 + m_Width: 36 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 40.640625 + m_Height: 54.90625 + m_HorizontalBearingX: 1.953125 + m_HorizontalBearingY: 54.90625 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 336 + m_Y: 258 + m_Width: 42 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 32.21875 + m_Height: 55.453125 + m_HorizontalBearingX: 6.203125 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 215 + m_Y: 267 + m_Width: 33 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 405 + m_Metrics: + m_Width: 36.078125 + m_Height: 54.828125 + m_HorizontalBearingX: 5.265625 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 389 + m_Y: 257 + m_Width: 37 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 406 + m_Metrics: + m_Width: 33.15625 + m_Height: 55.453125 + m_HorizontalBearingX: 5.65625 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 206 + m_Y: 446 + m_Width: 34 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 435 + m_Metrics: + m_Width: 36.21875 + m_Height: 37.75 + m_HorizontalBearingX: 4.53125 + m_HorizontalBearingY: 44.96875 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 468 + m_Y: 72 + m_Width: 37 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 439 + m_Metrics: + m_Width: 31.640625 + m_Height: 13.390625 + m_HorizontalBearingX: 6.78125 + m_HorizontalBearingY: 33.078125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 465 + m_Y: 382 + m_Width: 33 + m_Height: 15 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 442 + m_Metrics: + m_Width: 28.78125 + m_Height: 30.390625 + m_HorizontalBearingX: 7.0625 + m_HorizontalBearingY: 41.34375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 425 + m_Y: 390 + m_Width: 29 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 443 + m_Metrics: + m_Width: 28.78125 + m_Height: 30.390625 + m_HorizontalBearingX: 9.40625 + m_HorizontalBearingY: 41.34375 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 244 + m_Y: 401 + m_Width: 30 + m_Height: 32 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 2.03125 + m_Height: 56.390625 + m_HorizontalBearingX: 7.296875 + m_HorizontalBearingY: 56.390625 + m_HorizontalAdvance: 16.609375 + m_GlyphRect: + m_X: 122 + m_Y: 358 + m_Width: 3 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 34.4375 + m_Height: 55.453125 + m_HorizontalBearingX: 5.890625 + m_HorizontalBearingY: 54.828125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 188 + m_Y: 349 + m_Width: 36 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1142 + m_Metrics: + m_Width: 34.953125 + m_Height: 56.078125 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 45.234375 + m_GlyphRect: + m_X: 159 + m_Y: 6 + m_Width: 36 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1143 + m_Metrics: + m_Width: 51.59375 + m_Height: 56.078125 + m_HorizontalBearingX: 4.171875 + m_HorizontalBearingY: 55.453125 + m_HorizontalAdvance: 59.9375 + m_GlyphRect: + m_X: 96 + m_Y: 448 + m_Width: 52 + m_Height: 57 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1330 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1403 + m_Metrics: + m_Width: 38.453125 + m_Height: 38.453125 + m_HorizontalBearingX: 4.171875 + m_HorizontalBearingY: 38.453125 + m_HorizontalAdvance: 46.796875 + m_GlyphRect: + m_X: 285 + m_Y: 394 + m_Width: 39 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 370 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 362 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1143 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 351 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 342 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 435 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 314 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 326 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 405 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1142 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 406 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 442 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 439 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 443 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 309 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 352 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 329 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 333 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 341 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1330 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 315 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1403 + m_Scale: 1 + m_AtlasTextures: + - {fileID: 5097974353820375052} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 86 + m_Height: 66 + - m_X: 86 + m_Y: 0 + m_Width: 67 + m_Height: 73 + - m_X: 0 + m_Y: 66 + m_Width: 66 + m_Height: 50 + - m_X: 66 + m_Y: 66 + m_Width: 19 + m_Height: 59 + - m_X: 0 + m_Y: 116 + m_Width: 65 + m_Height: 80 + - m_X: 0 + m_Y: 196 + m_Width: 44 + m_Height: 86 + - m_X: 0 + m_Y: 282 + m_Width: 13 + m_Height: 84 + - m_X: 0 + m_Y: 366 + m_Width: 25 + m_Height: 82 + - m_X: 13 + m_Y: 282 + m_Width: 28 + m_Height: 80 + - m_X: 0 + m_Y: 448 + m_Width: 46 + m_Height: 52 + - m_X: 25 + m_Y: 362 + m_Width: 28 + m_Height: 80 + - m_X: 46 + m_Y: 442 + m_Width: 44 + m_Height: 69 + - m_X: 41 + m_Y: 282 + m_Width: 24 + m_Height: 80 + - m_X: 53 + m_Y: 362 + m_Width: 24 + m_Height: 80 + - m_X: 44 + m_Y: 196 + m_Width: 23 + m_Height: 80 + - m_X: 65 + m_Y: 125 + m_Width: 43 + m_Height: 69 + - m_X: 85 + m_Y: 73 + m_Width: 44 + m_Height: 52 + - m_X: 65 + m_Y: 276 + m_Width: 23 + m_Height: 80 + - m_X: 67 + m_Y: 194 + m_Width: 39 + m_Height: 72 + - m_X: 77 + m_Y: 356 + m_Width: 39 + m_Height: 72 + - m_X: 77 + m_Y: 428 + m_Width: 42 + m_Height: 14 + - m_X: 90 + m_Y: 442 + m_Width: 63 + m_Height: 68 + - m_X: 88 + m_Y: 266 + m_Width: 63 + m_Height: 68 + - m_X: 88 + m_Y: 334 + m_Width: 23 + m_Height: 22 + - m_X: 106 + m_Y: 194 + m_Width: 60 + m_Height: 68 + - m_X: 108 + m_Y: 125 + m_Width: 59 + m_Height: 68 + - m_X: 129 + m_Y: 73 + m_Width: 41 + m_Height: 52 + - m_X: 111 + m_Y: 334 + m_Width: 55 + m_Height: 18 + - m_X: 151 + m_Y: 262 + m_Width: 58 + m_Height: 68 + - m_X: 166 + m_Y: 193 + m_Width: 51 + m_Height: 68 + - m_X: 167 + m_Y: 125 + m_Width: 47 + m_Height: 68 + - m_X: 153 + m_Y: 0 + m_Width: 47 + m_Height: 68 + - m_X: 170 + m_Y: 68 + m_Width: 39 + m_Height: 52 + - m_X: 200 + m_Y: 0 + m_Width: 45 + m_Height: 68 + - m_X: 209 + m_Y: 68 + m_Width: 37 + m_Height: 52 + - m_X: 245 + m_Y: 0 + m_Width: 42 + m_Height: 68 + - m_X: 214 + m_Y: 120 + m_Width: 40 + m_Height: 68 + - m_X: 246 + m_Y: 68 + m_Width: 61 + m_Height: 51 + - m_X: 287 + m_Y: 0 + m_Width: 37 + m_Height: 68 + - m_X: 116 + m_Y: 352 + m_Width: 14 + m_Height: 68 + - m_X: 119 + m_Y: 420 + m_Width: 18 + m_Height: 18 + - m_X: 130 + m_Y: 352 + m_Width: 52 + m_Height: 67 + - m_X: 137 + m_Y: 419 + m_Width: 45 + m_Height: 23 + - m_X: 153 + m_Y: 442 + m_Width: 47 + m_Height: 67 + - m_X: 166 + m_Y: 330 + m_Width: 30 + m_Height: 13 + - m_X: 182 + m_Y: 343 + m_Width: 47 + m_Height: 67 + - m_X: 182 + m_Y: 410 + m_Width: 24 + m_Height: 30 + - m_X: 200 + m_Y: 440 + m_Width: 45 + m_Height: 67 + - m_X: 206 + m_Y: 410 + m_Width: 14 + m_Height: 30 + - m_X: 220 + m_Y: 410 + m_Width: 18 + m_Height: 27 + - m_X: 209 + m_Y: 261 + m_Width: 44 + m_Height: 67 + - m_X: 217 + m_Y: 188 + m_Width: 42 + m_Height: 67 + - m_X: 254 + m_Y: 119 + m_Width: 34 + m_Height: 67 + - m_X: 229 + m_Y: 328 + m_Width: 34 + m_Height: 67 + - m_X: 238 + m_Y: 395 + m_Width: 41 + m_Height: 43 + - m_X: 253 + m_Y: 255 + m_Width: 18 + m_Height: 67 + - m_X: 259 + m_Y: 186 + m_Width: 18 + m_Height: 67 + - m_X: 263 + m_Y: 322 + m_Width: 65 + m_Height: 66 + - m_X: 271 + m_Y: 253 + m_Width: 59 + m_Height: 66 + - m_X: 277 + m_Y: 186 + m_Width: 59 + m_Height: 66 + - m_X: 288 + m_Y: 119 + m_Width: 58 + m_Height: 66 + - m_X: 307 + m_Y: 68 + m_Width: 42 + m_Height: 51 + - m_X: 324 + m_Y: 0 + m_Width: 56 + m_Height: 66 + - m_X: 245 + m_Y: 438 + m_Width: 55 + m_Height: 66 + - m_X: 279 + m_Y: 388 + m_Width: 50 + m_Height: 50 + - m_X: 328 + m_Y: 319 + m_Width: 54 + m_Height: 66 + - m_X: 330 + m_Y: 252 + m_Width: 53 + m_Height: 66 + - m_X: 336 + m_Y: 185 + m_Width: 53 + m_Height: 66 + - m_X: 346 + m_Y: 119 + m_Width: 53 + m_Height: 66 + - m_X: 349 + m_Y: 66 + m_Width: 41 + m_Height: 51 + - m_X: 380 + m_Y: 0 + m_Width: 52 + m_Height: 66 + - m_X: 390 + m_Y: 66 + m_Width: 31 + m_Height: 51 + - m_X: 300 + m_Y: 438 + m_Width: 51 + m_Height: 66 + - m_X: 329 + m_Y: 385 + m_Width: 47 + m_Height: 50 + - m_X: 351 + m_Y: 435 + m_Width: 50 + m_Height: 66 + - m_X: 376 + m_Y: 385 + m_Width: 43 + m_Height: 50 + - m_X: 382 + m_Y: 318 + m_Width: 49 + m_Height: 66 + - m_X: 383 + m_Y: 251 + m_Width: 48 + m_Height: 66 + - m_X: 389 + m_Y: 185 + m_Width: 47 + m_Height: 66 + - m_X: 399 + m_Y: 117 + m_Width: 46 + m_Height: 66 + - m_X: 421 + m_Y: 66 + m_Width: 41 + m_Height: 50 + - m_X: 432 + m_Y: 0 + m_Width: 45 + m_Height: 66 + - m_X: 477 + m_Y: 0 + m_Width: 34 + m_Height: 65 + - m_X: 462 + m_Y: 66 + m_Width: 48 + m_Height: 49 + - m_X: 462 + m_Y: 115 + m_Width: 47 + m_Height: 64 + - m_X: 445 + m_Y: 116 + m_Width: 14 + m_Height: 66 + - m_X: 459 + m_Y: 179 + m_Width: 45 + m_Height: 66 + - m_X: 436 + m_Y: 183 + m_Width: 18 + m_Height: 50 + - m_X: 401 + m_Y: 435 + m_Width: 44 + m_Height: 66 + - m_X: 419 + m_Y: 384 + m_Width: 40 + m_Height: 43 + - m_X: 459 + m_Y: 245 + m_Width: 44 + m_Height: 65 + - m_X: 431 + m_Y: 310 + m_Width: 42 + m_Height: 66 + - m_X: 473 + m_Y: 310 + m_Width: 32 + m_Height: 34 + - m_X: 459 + m_Y: 376 + m_Width: 44 + m_Height: 26 + - m_X: 459 + m_Y: 402 + m_Width: 43 + m_Height: 65 + - m_X: 445 + m_Y: 467 + m_Width: 42 + m_Height: 38 + m_FreeGlyphRects: + - m_X: 13 + m_Y: 362 + m_Width: 12 + m_Height: 4 + - m_X: 0 + m_Y: 500 + m_Width: 46 + m_Height: 11 + - m_X: 25 + m_Y: 442 + m_Width: 21 + m_Height: 6 + - m_X: 65 + m_Y: 116 + m_Width: 1 + m_Height: 9 + - m_X: 85 + m_Y: 66 + m_Width: 1 + m_Height: 7 + - m_X: 44 + m_Y: 276 + m_Width: 21 + m_Height: 6 + - m_X: 65 + m_Y: 194 + m_Width: 2 + m_Height: 2 + - m_X: 65 + m_Y: 356 + m_Width: 12 + m_Height: 6 + - m_X: 90 + m_Y: 510 + m_Width: 421 + m_Height: 1 + - m_X: 67 + m_Y: 266 + m_Width: 21 + m_Height: 10 + - m_X: 106 + m_Y: 262 + m_Width: 45 + m_Height: 4 + - m_X: 108 + m_Y: 193 + m_Width: 58 + m_Height: 1 + - m_X: 153 + m_Y: 68 + m_Width: 17 + m_Height: 5 + - m_X: 170 + m_Y: 120 + m_Width: 44 + m_Height: 5 + - m_X: 111 + m_Y: 352 + m_Width: 5 + m_Height: 4 + - m_X: 116 + m_Y: 420 + m_Width: 3 + m_Height: 8 + - m_X: 119 + m_Y: 438 + m_Width: 18 + m_Height: 4 + - m_X: 130 + m_Y: 419 + m_Width: 7 + m_Height: 1 + - m_X: 153 + m_Y: 509 + m_Width: 358 + m_Height: 2 + - m_X: 151 + m_Y: 330 + m_Width: 15 + m_Height: 4 + - m_X: 166 + m_Y: 343 + m_Width: 16 + m_Height: 9 + - m_X: 200 + m_Y: 507 + m_Width: 311 + m_Height: 4 + - m_X: 182 + m_Y: 440 + m_Width: 18 + m_Height: 2 + - m_X: 166 + m_Y: 261 + m_Width: 43 + m_Height: 1 + - m_X: 214 + m_Y: 188 + m_Width: 3 + m_Height: 5 + - m_X: 246 + m_Y: 119 + m_Width: 8 + m_Height: 1 + - m_X: 196 + m_Y: 330 + m_Width: 33 + m_Height: 13 + - m_X: 209 + m_Y: 328 + m_Width: 20 + m_Height: 15 + - m_X: 220 + m_Y: 437 + m_Width: 18 + m_Height: 3 + - m_X: 229 + m_Y: 395 + m_Width: 9 + m_Height: 15 + - m_X: 217 + m_Y: 255 + m_Width: 36 + m_Height: 6 + - m_X: 254 + m_Y: 186 + m_Width: 5 + m_Height: 2 + - m_X: 253 + m_Y: 322 + m_Width: 10 + m_Height: 6 + - m_X: 259 + m_Y: 253 + m_Width: 12 + m_Height: 2 + - m_X: 220 + m_Y: 438 + m_Width: 25 + m_Height: 2 + - m_X: 263 + m_Y: 388 + m_Width: 16 + m_Height: 7 + - m_X: 271 + m_Y: 319 + m_Width: 57 + m_Height: 3 + - m_X: 277 + m_Y: 252 + m_Width: 53 + m_Height: 1 + - m_X: 288 + m_Y: 185 + m_Width: 48 + m_Height: 1 + - m_X: 324 + m_Y: 66 + m_Width: 25 + m_Height: 2 + - m_X: 328 + m_Y: 385 + m_Width: 1 + m_Height: 3 + - m_X: 329 + m_Y: 435 + m_Width: 22 + m_Height: 3 + - m_X: 330 + m_Y: 318 + m_Width: 52 + m_Height: 1 + - m_X: 336 + m_Y: 251 + m_Width: 47 + m_Height: 1 + - m_X: 349 + m_Y: 117 + m_Width: 50 + m_Height: 2 + - m_X: 477 + m_Y: 65 + m_Width: 34 + m_Height: 1 + - m_X: 510 + m_Y: 65 + m_Width: 1 + m_Height: 446 + - m_X: 509 + m_Y: 115 + m_Width: 2 + m_Height: 396 + - m_X: 421 + m_Y: 116 + m_Width: 24 + m_Height: 1 + - m_X: 459 + m_Y: 116 + m_Width: 3 + m_Height: 63 + - m_X: 399 + m_Y: 183 + m_Width: 37 + m_Height: 2 + - m_X: 445 + m_Y: 182 + m_Width: 14 + m_Height: 1 + - m_X: 382 + m_Y: 384 + m_Width: 37 + m_Height: 1 + - m_X: 383 + m_Y: 317 + m_Width: 48 + m_Height: 1 + - m_X: 454 + m_Y: 182 + m_Width: 5 + m_Height: 128 + - m_X: 436 + m_Y: 233 + m_Width: 23 + m_Height: 77 + - m_X: 431 + m_Y: 251 + m_Width: 28 + m_Height: 59 + - m_X: 504 + m_Y: 179 + m_Width: 7 + m_Height: 131 + - m_X: 505 + m_Y: 179 + m_Width: 6 + m_Height: 332 + - m_X: 503 + m_Y: 245 + m_Width: 8 + m_Height: 65 + - m_X: 431 + m_Y: 376 + m_Width: 28 + m_Height: 8 + - m_X: 473 + m_Y: 344 + m_Width: 38 + m_Height: 32 + - m_X: 503 + m_Y: 344 + m_Width: 8 + m_Height: 167 + - m_X: 419 + m_Y: 427 + m_Width: 40 + m_Height: 8 + - m_X: 502 + m_Y: 402 + m_Width: 9 + m_Height: 109 + - m_X: 245 + m_Y: 505 + m_Width: 266 + m_Height: 6 + - m_X: 245 + m_Y: 504 + m_Width: 200 + m_Height: 7 + - m_X: 351 + m_Y: 501 + m_Width: 94 + m_Height: 10 + - m_X: 487 + m_Y: 467 + m_Width: 24 + m_Height: 44 + - m_X: 445 + m_Y: 427 + m_Width: 14 + m_Height: 40 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: aff9bd28005f2c848854b890b7962407 + pointSizeSamplingMode: 0 + pointSize: 78 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 +--- !u!21 &1676728505900478140 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Thin SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 5097974353820375052} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!28 &5097974353820375052 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-Thin SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061016182017150f050000000000000000000000000000000000000000000000000000000000040a0c1f200f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0e0f10100f0e0d0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1114161718171614120e0b0700000000000000000000000000000000000000000000000000000000000000050b0d1114161718171614110c0a0400000000000000000000000000000000000000060c0e201f1c170d010000000000000000000000000000000000000c161c1e200e0c060000000000000000000000000000000000080e1016160e0c06000000000000000000000000000000000000000610161920190b080100000000000000000000000000000000000000000000000000000000000000010b11131f1f0f0d0700000000000510191e202020202020202020202020202020202020202020202020202020202020202020202020202020201e191004000000000000090f112020202020202020202020202020202020202020202020202020202020202020200a04000000000000000000000000000000000000050b0d13161817140e0c07000000000000000000000000000000000000000000000000000000000917232b2d352c2a2217090000000000000000000000000000000000000000000000000000000b171f21353524221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b101419171f2123242525242422201d1517140f0b0801000000000000000000000000000000000000000000000000000000000000060c0e18202226292b2c2d2d2c2a2723201c13080800000000000000000000000000000000000000000000000000060c0e18202226292b2c2d2c2b2926211f170c0a040000000000000000000000000000000e1920233534312a1f110100000000000000000000000000000000101e2930333523211a0f010000000000000000000000000003111c23252c2b23211a0f01000000000000000000000000000000000a18232b2e352f201d1509000000000000000000000000000000000000000000000000000000000005131e2528343524211a0f0100000514222d3335353535353535353535353535353535353535353535353535353535353535353535353535353535332d22140400000004121d24263535353535353535353535353535353535353535353535353535353535353535351f180c000000000000000000000000000000050e192022282b2d2c2924211a0f0801000000000000000000000000000000000000000000000000001727353f424a413e34271700000000000000000000000000000000000000000000000000000b1b2933364a4a39362d20100000000000000000000000000000000000000000000000000000000000000000000000000000000002090b151d2025292e2a333738393a3a3a39373531272d2924201c140c0a0300000000000000000000000000000000000000000000000000090f1a21232b34373b3e41424242413f3c38353025231c1108010000000000000000000000000000000000000000070f1a21232b34373b3e40414242413e3b37332a211f170c040000000000000000000000000e1e2c35384a49463d2f1f0d0000000000000000000000000000000c1e2e3b45484a38352c1f0f0000000000000000000000000513212e373a414038352c1f10030000000000000000000000000000061828363f434a443531271909000000000000000000000000000000000000000000000000000000011323313a3d4a4a39362d1f0f000010223240484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a483f32221000000012222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a342a1c0c000000000000000000000000000d181f2b35383d4142413f39362d201c14080000000000000000000000000000000000000000000000091935455258605752453419090000000000000000000000000000000000000000000000000417293a464c5f604f4a3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000050a151d202731363a3f433a474c4e4e4f4f4f4e4d4b4437423e39353026211e160b0700000000000000000000000000000000000000000004111c232c35383b484c5054565757575654514e4a4336372e201c1408000000000000000000000000000000000002101b222c35393b484d5054565757575654504c473a37332a1f170c0000000000000000000006192c3c495e605e5a4d3d2a1703000000000000000000000000000216293b4c595e605e493d2c1a0600000000000000000000011323313f4b4f56554e493d2e2110000000000000000000000000000010233646535860594b443727150100000000000000000000000000000000000000000000000000000f1f31414e525f5f4e4a3d2d1a0700192d40515d5f60606060606060606060606060606060606060606060606060606060606060606060606060605f5c503f2d190500091d2f404c5160606060606060606060606060606060606060606060606060606060606060605e473a2a180400000000000000000000000e1d2a343c484d53565757544e4a3d353026180f0100000000000000000000000000000000000000000115273752646d756c63523726140100000000000000000000000000000000000000000000000a1f334658617475705c4a36220d0000000000000000000000000000000000000000000000000000000000000000000000040d182027313637444b4f54585c58616364656564636260555b57534f4b4336363229221b10090000000000000000000000000000000000000c171f2f383d494e56596266696b6c6d6c6b6967636054504b3f353026180e0000000000000000000000000000000a161e2d363d494e56596266696b6c6d6c6b69666158544c473a33291c120000000000000000000c2035495a7075746b5a46311c0800000000000000000000000000071c3045596a7375705b4935210c000000000000000000000b1e31414e5d656b6b635b4b3f2e1b0800000000000000000000000001162b3f53646e756e605544311d11000000000000000000000000000000000000000000000000000a1a2c3d4e5f687474645c4a36210d001e33485d6f757575757575757575757575757575757575757575757575757575757575757575757575757575756e5c48331e09000f24384c5e667575757575757575757575757575757575757575757575757575757575757575705947341f0a000000000000000000000e1e2b3b474c5a62686b6d6c69635b534b43362c1f0f0100000000000000000000000000000000000000081d3144556d828a816c5544311d0800000000000000000000000000000000000000000000000c21364c61768b8a7a644f39240f000000000000000000000000000000000000000000000000000000000000000000000b171f2b3438454b51556065696e71747678797a7a7979777573706c69646054524b4639372e231c1207000000000000000000000000000002101c29333f4c505b636b72777b7e80818282817f7c78746d655d534b43362c1f13050000000000000000000000000e1a28323e4a4f5b636b72777b7e80818281807e7b77716a61584c473a2f1c1308000000000000000e23384d63788a89745e49341f0900000000000000000000000000091e33485e73888a79634e38230e0000000000000000000010253a4e5f687b818079655d4b37220e00000000000000000000000003192e43586e838a8373604b3f2e1c0c000000000000000000000000000000000000000000000002152738495b687d898b79644e39240f0020354a5f758d8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8c755f4a35200a0011263b51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a77614c37220c00000000000000000005192b3c4859626e787d8082817e7971686054493d2d1f0f000000000000000000000000000000000000000b20354b6074899e8874604b35200b0000000000000000000000000000000000000000000004182a3a52687d9295806b553d2c1a060000000000000000000000000000000000000000000000000000000000000004131b29333b484d5660676d757a7e8386898c8d8e8f8f8f8e8c8a8885827e79746e6761574f4b3e382f221b100100000000000000000000000210202e3a474c5d656f7881878c908f8e8c8b8c8d8f918d88827a71686054493d31231406000000000000000000010f1e2b38454b5c646f7981878c9093908f8e8e9092908c867f776b61584c40302518080000000000000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000013253652687d8d96958b7b654f3a2510000000000000000000000000000c21364c61768795806b5d4b3a2a1704000000000000000000000000000000000000000000000c1d31455663798a937e695c4a36210d001a2f445a6f84998d86868787878787878787878787878787878787878787878787878787878787878787878785715c46311c070011263b51667b908b86878787878787878787878787878787878787878787878787878787878677624c37220d0000000000000000000b2035485a6277838b928f8c8c8e8e867e73635b4a3d2d1a0700000000000000000000000000000000000013253650657b908a907b6550382715020000000000000000000000000000000000000000000a1f3347586f849a8a87715b4935210c0000000000000000000000000000000000000000000000000000000000000c171f303a464c59626b757c83898f8e898582807e7d7c7c7c7d7f8183868a8e8e89837c766d645c504c40362d1c14080000000000000000000010202e3e4a58616d7b848b9189847f7a78777676787a7d82878f8f867d73635b4d413124140300000000000000010f1f2d3c4956606c7a848e968d87827e7b7a79797a7d81868b94898076665e4a433625130000000000000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000000000000000000071c30435472879daba99a856f5a45301a050000000000000000000000000a1f334658647a8c8c7b655847331f130100000000000000000000000000000000000000000c1c2f3f4b607485998472604a3d2d1a07000d22374d627789937d7171717171717171717171717171717171717171717171717171717171717171717171716756432e1a050011263b51667b908672717171717171717171717171717171717171717171717171717171717162594834200b0000000000000000081c2f3f4d6278889889807a7777797f87938579635b4a36210c0000000000000000000000000000000000071c3043546c81968297826d5645311d090000000000000000000000000000000000000000000c22374c61778a88858d78634e38230e00000000000000000000000000000000000000000000000000000000000e1c2933414d58616b778088918a847e7974706d6a6868676767686a6c6e7175797e83899189827a70665e4f4a3e3026180800000000000000000d1d2e3e4b5c6476829090857c746e6965636260616364686d727a838b928579675f4e42312111000000000000000f1f2d3d4a5a6274818c95888078726c696664646465686b7077808995897c6a605443301c1401000000000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000b20354a60758a9fb4b19c87725c47321d070000000000000000000000000417293a4b5c6a7f958776614c42311f0f000000000000000000000000000000000000000417293a4b5d6b80968877625443301f0f00000b20344859667c918a7963565c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5649392713000011263b51667b9087725c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4c483b2b180500000000000000000e23384b5d70859b87786b646161646a747f8b8879634e39230e00000000000000000000000000000000000b20354a6074888e79898975604b36200b000000000000000000000000000000000000000005182b3b53687e938280947f6a543b2b1805000000000000000000000000000000000000000000000000000002101e2c3a464c5f6776808a8f867d766f686360545855535251515253545659556064696e757c838a8f857b70645c4b433626140100000000000005192b3b4b5c647a8898877b7067605554504e4c4b4c4e4f53585d656e7885948a7d68604e3f2f1b0b0000000000061a2c3d4a5b637886978b80766b635b5753504f4e4f50525659626b77818d8d7f72604a42321f0f000000000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000000000000000000071c3043546f849aa5a297816c57422d1702000000000000000000000000000b1b2e3e4b60728499836e604e3d2c1a0a0000000000000000000000000000000000000e1f334758657b8d907c66594836251301000005182b3b4c5e6c81978574604b404747474747474747474747474747474747474747474747474747474747474643392b1b0a000011263b51667b9087725c4747474747474747474747474747474747474747474747474747474737342b1d0d00000000000000000010253b50657b908c7a645a4f4c4c4f5560697a877c66513c271100000000000000000000000000000000000f243a4f64798f887383917c665139281603000000000000000000000000000000000000000b203448597085927d7b8f8570594834200b000000000000000000000000000000000000000000000000000210202e3c4958616e7d8891857a71686157534e4b4336403e3d3c3c3d3d3f4137444b4e545660666e77808990857a6c605443301c080000000000000b20344859647a8a988276655e524b44373a39373637383a3e3f4b4f5b63737f948d7e685d4c3a291704000000000c2135495b6379889a877a6b61574e493d3e3b3a39393b3d3b484d58616c7c8a94816c614f3d2d1a070000000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000000000000000000001325364e6379878f8e8476614c37210c000000000000000000000000000000101c304354627889937e685b4938271502000000000000000000000000000000000e1e31414c61768796816c5e4c3b2a1808000000000d1d30404b60758696816c5e4c3b2a32323232323232323232323232323232323232323232323232323232312e271b0d00000011263b51667b9087725c473232323232323232323232323232323232323232323232323232322220180d00000000000000000002172c41576c8196836e5c4a3c373737444b5c6472665e4d39240f00000000000000000000000000000000061a2c3d566b8095816c7c91836d5745321e09000000000000000000000000000000000000000d22374d62778b8a7674898b77624d37220d0000000000000000000000000000000000000000000000000010202e3e4b5a63768291887c70655d534b4639393530262b2928272727282a2c2731353938454b5159626a76808a8d8173604b35200b0000000000091d2f404d62788898827361584c4035312725232221212325282e373c4955606a7f948c7b655846331f0b000000000e23384e637989988476645c4c4639352c292625242425282b343a474c5e66798a937e695b4a3621100000000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00000000000000000000082135495b63747a7973615847331f0a00000000000000000000000000000001142636485a667c918a79635645311d1100000000000000000000000000000009192c3c4e5f6e83988674604b402f1d0d000000000000121e324556647a8b8d7c6659473625131c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1a130a0000000011263b51667b9087725c47321d1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0d0b0500000000000000000000061b31465b7086927d68523e2d222227313e4a4f5d514d40301d0a000000000000000000000000000000000c2135495b7287907b6675898975604b36210b00000000000000000000000000000000000006192b3c54697e94836e6d82937e69533a2a170400000000000000000000000000000000000000000000000e1e2d3e4b5c647886938276665e504b3f36322923201c14151313121212131517151d20242832363b484c58616b7884826e5443301c0800000000000f24384c5e6f849a84736055463a2f201d15100e0d0b0c0e0f131b222c37444b616b80968876614c392816030000071c31475c718695827461584a3e3329211a14110f0f0f101319202a33404d5b667c8d8b79634e3e2e1b0800000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00000000000000000000061a2c3d49566064636054473a2917040000000000000000000000000000000008182b3c4d5e6c81978574604b402f1c0c0000000000000000000000000001142637495a687d928b7963564532221200000000000000031628384a5c697e938877615443301c0f00070707070707070707070707070707070707070707070707070500000000000011263b51667b9087725c47321d0707070707070707070707070707070707070707070707070700000000000000000000000000081d33485d72888e79644f3924100c151d2d3639473c3930221200000000000000000000000000000000000e23384e63788d8975606d83917c67523a29170400000000000000000000000000000000000b2035495a7085917c66667c91846f5847331f0a000000000000000000000000000000000000000000000a1a2c3c4a5c647a898c7e6d61584d40372e211e160e0b080100000000000000000001080b0f161e212b343a464c5a636f6e6453362614010000000006192c3c51667c918b7963554437291b1108010000000000000000080e192631434b60758795806b5746321e0900000011263b50667c80736056463a2d1e170b0600000000000000050c181f303d4c5e6b8095846f5c4b37220a00000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00000000000000000000000e1f2c38454b4f4e4b4336291c0c0000000000000000000000000000000000000d1d30404b60758696806b5e4c3a2a18040000000000000000000000000b1d31445562788a937e695b4a3828160400000000000000000a1a2d3d4a607283998372604a3d2d1a0a000000000000000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000091f34495e74898d78624d38230d0002101b22243227241d12040000000000000000000000000000000005192b3b546a7f94836e56667b91836e5846331f0a00000000000000000000000000000000000d23384d62788d89756061768a8a76614c37210c00000000000000000000000000000000000000000003162838495b647a898a7c68604c463a30231c110a03000000000000000000000000000000000002090d182029333c494d5959534636180800000000000c2135495b708596806b5b493727190b0000000000000000000000000009141e324556667c918975614b36210c0000000f23384c5e666b60554538291c0f03000000000000000000000004121f2f404c6176898f7a644f38281502000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000000e1a2832363a39353026180c0000000000000000000000000000000000000000121e32455763798b8d7b655947341f1401000000000000000000000b1b2e3e4b607385998372604a3d2d1a0a000000000000000000000f1c304354627788937e695b4a382816030000000000000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d000000070d0f1d110f0a0000000000000000000000000000000000000b203448597086927c67526075898a76614c36210c00000000000000000000000000000000061a2c3d546a7f94826d56576f84927d67523928160300000000000000000000000000000000000000000a1e3245566379898b7b655e4e4233291c12080000000000000000000000000000000000000000000000050c171f2c35384443403628180000000000000e23384d63788d8b77624d3d2c1909000000000000000000000000000000031628384a607387927d67523d2812000000091c2f404c50554b4437271a0c000000000000000000000000000001121f3346586a7f94826d5645321d09000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000000000000000000000000000a151d202524201c1408000000000000000000000000000000000000000000031628394a5b697e938877614c42321f0f000000000000000000031629394b5c6a7f958877625443301f0f0000000000000000000000001325364759667c908b79635645321e120000000000000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d000000000000080000000000000000000000000000000000000000000d22374d62778b8a76614c556d82927d68523a2a18040000000000000000000000000000000c2135495b7186907b655053687d92836e5745321e09000000000000000000000000000000000000000a1a2f404b6075868d7c665d4c40311f170c000000000000000000000000000000000000000000000002020000040e1920232f2e2b24180a00000000000014293e53697e9385705948341f0f00000000000000000000000000000000000a1c3043546b8096836d583626140100000011222f383b40353126190a000000000000000000000000000000000417293a4c62778b8975604b36200b000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000000000000000000000000000002090b0f0e0b080100000000000000000000000000000000000000000000000a1b2d3d4f606f8399836f604f3d2d1a0a00000000000000000d1e324657647a8c907c6659473625130100000000000000000000000008182a3b4c5e6c81968675604b40301d0d00000000000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d00000000000000000000000000000000000000000000000000000004172a3a53697e93846f584650657b90846f5947341f0a0000000000000000000000000000000e23384e63788d8874604b4c61778b8a76604b36210b000000000000000000000000000000000000021528384c5e6d8295806a5e4c3f2f2114040000030a0c101212110d0b0500000000000000030a0c1116171715110c0a060c0e1a1917100700000000000000182d42586d8295806b553b2b180100000000000000000000000000000000000013253651667b9087725443301c0800000004111c23262b201d14090000000000000000000000000000000000000b1f34485970868f7a654f3a2510000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f32424c617788937e695b4a382816020000000000000d1d30414b61758796816c5e4c3b2a180800000000000000000000000000000d1d2f404b60748697816c5e4c3b2b1808000000000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d0000000000000000000000000000000000000000000000000000000a1f3347586f84937e69533a4b6074888a77614c37220d0000000000000000000000000000071b2d3e556a8095816c554447597085917c6651372715020000000000000000000000000000000000091d324556667b908472604b402f21110300060b171e21252728262220180d0a030000000b171e21272b2d2c2a27211e170b070004020000000000000000001b30455b7085927d67523d2812000000000000000000000000000000000000000d23384d62788d8a73604b35200b0000000000090f11160b08010000000000000000000000000000000000000005182a3b566c81947e69543f2914000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001141f344759657b8d8b79635645321e12000000000008182b3b4d5f6d82978674604b402f1d0d00000000000000000000000000000000121d32455663798a917c665948362614010000000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d0000000000000000000000000000000000000000000000000000000c21374c61768a8d78624d3843546c81937e68533b2b1905000000000000000000000000000d22364a5c72878f7a654f373b54697f94826d5544311d0800000000000000000000000000000000021628384b6074878a7862544330221203010f1a212933363a3c3d3b37342b211e170b06131b2933363c404242403c363329211a0f02000000000000000000001c32475c7187907b66503b2611000000000000000000000000000000000000000c21364c61768b8b76614c36210c000000000000000000000000000000000000000000000000000000000000000013293e53687e93816c57422c17000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000000000000000000000000000000070d0f0e0c07000000000000000000000000000000000000000000000000000004182a3a4c5d6b80968674604b402f1d0d000000001325364859677c918b796356453222120000000000000000000000000000000000021528384a5b697e938977625443301c100000000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d00000000000000000000000000000000000000000000000000000316283952687d9286715a4834364f647a8f8570594834200b000000000000000000000000000f24394e64798e8773604a35384d63788d8975604b36200b00000000000000000000000000000000091e324556697f947f6a5a493626140405131f2c3539464c505252504d483b3633291b13243139464b5155575755514c4639362d1d15090000000000000000001c32475c7187907b65503b2610000000000000000000000000000000000000000b21364b60768b8b76614c36210c000000000000000000000000000000000000000000000000000000000000000012273c52677c91836e59442e19000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000000002101b222423211a0f01000000000000000000000000000000000000000000000000000c1c2f3f4b60748596816c5e4c3b2b180800000a1c304354627789937e695b4a382816040000000000000000000000000000000000000a1a2d3d4e606e83998472604b3e2d1b0b00000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d0000000000000000000000000000000000000000000000000000091e3245576e83957f6a553c2b374b5c72878b77624d37220e000000000000000000000000081b2e3e566b8096806b54433035495b7187907b6550362513000000000000000000000000000000000b21364b6075888875604b3c2c1808031323303d494e5761656767666259544b4639302431424e5761666b6c6c6a6661574e4a3d3127190c00000000000000001b30455a7085917c67523c2712000000000000000000000000000000000000000d22374d62778c8a72604a35200b000000000000000000000000000000000000000000000000000000000000000011273c51667c91846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000000010202e373a39362d1f0f0000000000000000000000000000000000000000000000000000111d31445563798a917c665948362513000a1a2d3d4a60728499836f604f3d2d1a0a00000000000000000000000000000000000000000f1f31424c617688947f695c4a39291603000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d00000000000000000000000000000000000000000000000000000b21364b60768a8e79634e39242e3e566b80947e69543c2c190600000000000000000000000d22374b5c72878e79644f36252c3c566b8095816c5443301c070000000000000000000000000000071a2d3d53687e937f6a5645321e0e00112130414d5b636e767a7c7d7b77726a61574d4133424e6068767c8082817f7c766d635b4b4437291c0c00000000000000192e43596e83937e68533e2913000000000000000000000000000000000000000e24394e63798e88735443301c07000000000000000000000000000000000000000000000000000000000000000012283d52677d92846e59442f19000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000000000000000000000000071b2e3e4b4f4e4a3d2d1a070000000000000000000000000000000000000000000000000002152737495b687d928877625443301c101628384a5c697f948877614c42321f0f00000000000000000000000000000000000000000001141f334758657b8d8b7a645746321e12000000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d000000000000000000000000000000000000000000000000000215273751667c9187725b4a362124394e63798e86715a4935200c00000000000000000000011426364f647a8f87725c4a3618243a4f647a8f8874604a35200b00000000000000000000000000000d21364a5c71868976614b382816000a1a2f3f4d5f6779838a8f8e8d8e8c877f76675f51444e60687e89908a8787898d8a83796b6055473a291b0b000000000000162b41566b8096826d573e2d1b0700000000000000000000000000000000000316283852687d9285705b362513000000000000000000000000000000000000000000000000000000000000000004172a3a556a7f95826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000000d22374b5c64635b4a36210c000000000000000000000000000000000000000000000000000009192c3c4e5f6d82988472604a3e2d1b1e324556647a8b8d7b665947342414010000000000000000000000000000000000000000000004182a3a4c5d6b80968675614b41301e0e0000000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d00000000000000000000000000000000000000000000000000081d3144556d8296816c563d2d1a21364a5b71868d78634d38230f00000000000000000000081c3043546c8195806a553e2d1b20354a6074888f7a644f3a250f00000000000000000000000000000f24394e64798e826d5746331a0a021628384c5d677d8b91847d7977797c8289887c6b625158687e92857b75727173787f888a807461584739291703000000000010263b50657b9087725c4a3622100000000000000000000000000000000000081e3245566d82957f6a55402a150000000000000000000000000000000000000000000000000000000000000002101f3347586f84947f69543f2a14000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000000f243a4f647a79634e39230e0000000000000000000000000000000000000000000000000000000e1e31414c617687947f695c4a39282f404b60748696816c5e4c3a2a18060000000000000000000000000000000000000000000000000c1c2f3f4b60748597826d5f4d3c2b190900000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d000000000000000000000000000000000000000000000000000b20364b6075898f7a65503a25101a2d3d556a7f947f6a553d2d1a070000000000000000000b20354b6074888d78634e3823101c3043546c8196806b563d2d1a070000000000000000000000000417293a566b80907b655039291700091e324556657b8c8b7c6f67636263676c76818d806b6261768984736560565c5b636a75808d8476615746331e1300000000000b20364b6075898e79644f3e2e1b0b0000000000000000000000000000000818293a4b6075888f7a644f3a240f0000000000000000000000000000000000000000000000000000000000000512202f404c61778a8e79644f39240f000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000061b31465b7085826d58432d1803000000000000000000000000000000000000000000000000000000131f334658647a8c8b7a645746323a4c5e6c81968674604b402f1c0c0000000000000000000000000000000000000000000000000000111d31455663798a917d675a4837261401000000000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000a1f34495f74898c77624d37220d0000000000000000000000000000000000000000000000000013253650657b908874604b35200b0f23384d63788d86715b4a36210c00000000000000000115273750657a9086715b4935210c13253650667b9087725b4a36210c0000000000000000000000000a1f33465871868874604b35200b000b21364b607587907c665e524e4d4e5258616b7c8b806b687e8d7863554b453c494d56606b7c8b8575614b41301c0c00000000091d3145566c8196826d5c4a39291a0e030000000000000000000000000b1725364758687d9385715c4b37220d00000000000000000000000000000000000000000000000000000000060d18202f3e4c5e6b80968673604a35200b000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000061c31465b7186836e59442e19040000000000000000000000000000000000000000000000000000000417293a4b5c6a7f948675614b404759667c908a7963564532221100000000000000000000000000000000000000000000000000000002152738495b687e938978625544311d10000000000000000000000000000000000000000000000011263b51667b9087725c47321d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b09020000000000000000000000000000000a1f34495f74898c77624d37220d000000000000000000000000000000000000000000000000071c3043546c8197826d5544311d080c2035495a71868e79634e3924100000000000000000081d3144556c82947f69543d2c1a060b20364b6075898e79634e39230e0000000000000000000000000c21364c61768a836e5443301c080012283d52677d92826d5e4d403938393a464c5e677d8c7d6e8386715a4937312c3538454b5e667c8c836e5f4d3a291704000000021527384c62778a8c7a645746382c1e160a07000000000000000608131c29334354617688907c66513e2e1b0700000000000000000000000000000000000000000000000000040a0f1a212b34404c5c667c8d917c675443301c07000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000071c31465c7186846f5a452f1a05000000000000000000000000000000000000000000000000000000000b1b2e3e4b60728497816d5f4d4c617788937e685b4938281503000000000000000000000000000000000000000000000000000000000a1a2c3d4e606e83998473604b3f2e1b0b0000000000000000000000000000000000000000000011263b51667b9087725c4732222222222222222222222222222222222222222222201d150a00000000000000000000000000000a1f34495f74898c77624d37220d0000000000000000000000000000000000000000000000000b20354a607488917c66513726140106192c3c54697e94806b553e2e1b07000000000000000b20354b6074888b78624d38220f00091d3145566e83947f6a553c2b1905000000000000000000000011263b51667b907e6954362614010417293a596f848f7a644f40302422242933404d5f6b80897785826d583c2c1d19212832404c5e697f927d675846331f0a000000000a1f344859697f9486756156493c3228221b161311101112151920253039464b60728298836e5e4c3820100000000000000000000000000000000000000000000000040a0c181f222c353b484d5e667a8998826e5f4d36251300000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000000000000000000000071c32475c718785705b46301b060000000000000000000000000000000000000000000000000000000000101c304354627889917c675a606e8399836e604e3d2c1a0a0000000000000000000000000000000000000000000000000000000000000f1f31424c617687957f6a5d4b3a29170400000000000000000000000000000000000000000011263b51667b9087725c47373737373737373737373737373737373737373737373632281a0a000000000000000000000000000a1f34495f74898c77624d37220d0000000000000000000000000000000000000000000000000f253a4f647a8f8a76604b36210b00000e22374d62778b87725c4a3622080000000000000215283850667b9085705a4835200b000215273852677c9286715a4835200b0000000000000000000000152a3f556a7f8f7a654f3a2510000a1f334658738888735c4a3622120d0e171f30414b6074868287816b56412c16060a161e2f404b6073868876614c3827150200000005182a3b4f616e82988474625a4b4538362d2b28272626282a2b3536434a57616e80968675614c402f1d02000000000000000000000000000000000000000003090c171f212a34373d494e59626d7c8a9b8676614c4130180800000e23384d63788d89745e49341f0900000000000000000000000000021527375e73888d78634e38230e0000000000000000000000071d32475c728786715c47311c000000000000000000000000000000000000000000000000000000000000011426364859667c91897862687e938876614c42311f0f0000000000000000000000000000000000000000000000000000000000000001131f334758657b8c8c7a645846331f1300000000000000000000000000000000000000000011263b51667b9087725c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b45382815020000000000000000000000000a1f34495f74898c77624d37220d0000000000000000000000000000000000000000000000071a2d3d566b8096846e5745321e0900000b2034485970858f7a644f362614010000000000091d3245566d82937e69533c2b190500000c21364c61768a8d78624d38220d0000000000000000000002182d42576d828c77624c37220d000c21364c61768b85705a3e2e1b04000004121d324556657b908a816b56412c16010003121d314455657a8c806b5645311d09000000000d1d32434b6075839685786a60564e4a3e403e3c3b3c3d3f3c484d546067758296867862574633221200000000000000000000000000000000000000080a161e212933373a474c535b636c7782919685766158473323120000000e23384d63788d89745e49341f0900000000000000000000000000081d31445574898c77624c37220d0000000000000000000000081d32475d728787725d3e2d190900000000000000000000000000000000000000000000000000000000000008182b3b4d5e6c81978473798a8d7b65584733241401000000000000000000000000000000000000000000000000000000000000000004172a3a4b5d6b80958776614c41311e0e000000000000000000000000000000000000000011263b51667b908772626262626262626262626262626262626262626262626262605645321d090000000000000000000000000a1f34495f74898c77624d37220d00000000000000000000000000000000000000000000000c21364a5b7287927d685339281603000005182b3b53687e93816b5443301c0800000000000b20364b6075898a77624c37220e0000000a1f3346586f84937e69543a2a1804000000000000000000051b30455a708589745947341f0b000d23384d62788d836e59432e1900000000021528384c5d708598826d58432d18000000011426374b5d6f848875604b36200b0000000000151e3245576072808c8a7f756b645c5955535150515255585a6269737d87918376625a4839291704000000000000000000000000000000000007111c232832363a474c535961687079818a988c80756158473a2a17040000000e23384d63788d89745e49341f00000000000000000000000000000b20364b60758b8b76604b36210b0000000000000000000000081d32475d728789745c4a3726190c0000000000000000000000000000000000000000000000000000000000000d1d30404b607586947f8596806b5e4c3a2a1806000000000000000000000000000000000000000000000000000000000000000000000c1c2e3f4b60738598826d5f4d3c2c19090000000000000000000000000000000000000011263b51667b90877777777777777777777777777777777777777777777777777774604b36200b0000000000000000000000000a1f34495f74898c77624d37220d00000000000000000000000000000000000000000000000e23394e63798e8b77614c37220c000000000d22374c61778a8874604b35200b000000000316283951667c91846f5947341f0b0000000417293a53697e9385705847331f0a000000000000000000081d32485d728787715c3b2a1805000d23384d62788d836e58432e1900000000000a1a2f3f52677d9285705a3c2c190600000009192e3f52677c917c67523928160300000000031628394554606b7a858f888079736e6b68666566676a6d72787e8791877c6f6158483c2b1b0b0000000000000000000000000000000008131c202f3738454b525861686f777e858c968e847a6b6056473a2a1c0c000000000e23384d63788d89745e3f2e1d0d000000000000000000000000000d22374c62778c8a745645321e090000000000000000000000051a30455a6f848e79645544372a1c10020000000000000000000000000000000000000000000000000000000000121e32455663798a8b9b8674604b402f1c0c000000000000000000000000000000000000000000000000000000000000000000000000111d31445563788a927d675a493727150100000000000000000000000000000000000011263b51667b909c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7c66513c27110000000000000000000000000a1f34495f74898c77624d37220d0000000000000000000000000000000000000000000005192b3c556a7f9485705947341f0b000000000a1f3347586f848f7a655037271501000000091e3246576e83927d68533b2a1805000000000d22384d62788d8b77614c37220c000000000000000000091e33495e738885705b46301b00000c22374c61778c846f5a3929170300000000001121364b60758989735a4935200c000000001020364b607588846f5746321e0900000000000a1b2836434b5c64707a82898e8884807d7c7b7b7d7f83878d8a847c74675f4c463a2b1e0e000000000000000000000000000000000e182530353f4b505660676e767d848b93928982796f645c4b4538291c0c00000000000e23384d63788d89745d4b3b2a1b0b00000000000000000000000011263b50667b9086715c3828160300000000000000000000000013283d52687d9284736055473a2d201402000000000000000000000000000000000000000000000000000000000b1c3043546277899796806b5d4b3a29170400000000000000000000000000000000000000000000000000000000000000000000000001152737495a687d928a78635544311d1100000000000000000000000000000000000011263b51667b908a838484848484848484848484848484848484848484848484837a644f3a250f0000000000000000000000000a1f34495f74898c77624d37220d000000000000000000000000000000000000000000000b2035485a7186947f69543b2a18040000000004182a3a52677d92816c5544311d080000000c21364b6176898a76614c36210d00000000000b2034485a7186927d68533929160300000000000000000a1f344a5f7489846f5a452f1a05000a1f334758748987725746331e0a0000000000091e3245566e838d78634d38230e00000000091d3145566e838a76614b36210c0000000000000a1826303e4a4f5d656d757b85999593919091929498877d766f6760564d4133291b0e00000000000000000000000000000004121e2b36434a515d656d757c838a92948b847d756d645c4f4a3e32281a0c0000000000000e23384d63788d8c7a65594839291b0d00000000000000000000061a2c3d556a7f94826c57422d17000000000000000000000000000b20354b60738498827361584a3e321e160a00000000000000000000000000000000000000000000000000000b1b2e3f4b6072849782898c7b655847331f140100000000000000000000000000000000000000000000000000000000000000000000000009192c3c4e5f6e82988573604b3f2e1c0c000000000000000000000000000000000011263b51667b9087726f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f645c4b37220d0000000000000000000000000a1f34495f74898c77624d37220d000000000000000000000000000000000000000000000d22384d62788d8d78634d38230e0000000000000c21364b61768a8874604b35200b00000417293a52677c92836e5846331f0a000000000005192b3c556a7f95846f5746321e0a0000000000000000071c304354758a846e59442f19040004182a3a5b70868a76614b36210c00000000000316283852677d927d68523d2813000000000215273854697e907b65503b26100000000000000111212e3e4b58616d7881888d8783807e7e7e8082868a8a837a6f635b4d413224140500000000000000000000000000000412222f3c48546067717b828991958d867e776f6760574f4a3e362d1e160a000000000000000e23384d63788d9d8877625746392b1d12060000000000000002102135495b7085927d68523d281300000000000000000000000000081c304354617584988476645c4f4232281a0c0000000000000000000000000000000000000000000000000417293a4b5d6a7f9586757d928776614c42311f0f000000000000000000000000000000000000000000000000000000000000000000000000000e1e31414c61768795806b5d4b3a2a17040000000000000000000000000000000011263b51667b9087725c59595959595959595959595959595959595959595959594f4b3e2e1b080000000000000000000000000a1f34495f74898c77624d37220d02020202020200000000000000000000000000000004182a3a54697e9386715b4935210c0000000000000a1e3346576e83907b665038281602000a1f3346586e83917c67523a2917040000000000000e24394e63798e8a76614b36210c00000000000000000b20354a60748a836e59442e19040000172c41566c81907b66503a29170400000000000d22374c62778c826d583c2c1906000000000f243a4f647a8f7f69543f2a140000000000000f1f2e3f4b5c6476828a898078726e6b6968696a6d71777e878f8479675f4f423223130000000000000000000000000001122230404c5a62727c8590978e877f7871696259524b4539362d221b100300000000000000000e23384d63788d8a8485756157483b2f20190e09020000030a12202f404e63798d8a76614c36210c0000000000000000000000000001142636465761748293877a69604b4538291c0c00000000000000000000000000000000000000000000010f1f334658647a8c8b79636d8298836e604e3d2d1a0a00000000000000000000000000000000000000000000000000000000000000000000000000131f334658657b8c8c7b655847331f140100000000000000000000000000000011263b51667b9087725c47444444444444444444444444444444444444444444443a372e201000000000000000000000090f11171f34495f74898c77624d37221717171717171715130d0300000000000000000000000a1f334758708595806b563c2c19060000000000000317293951677c91826d5645321e09000c21364c61768a8975604b36210c000000000000000c21364a5b7287917c67513827150200000000000000071c304354748a846f5a442f1a00000010263b50657b90826c5846331f0b00000000000b1f344859718788725b4935210c000000000b20364b60758b826d57422d18000000000009192d3d4b5d657a878d81766b635b58565453545558596169747e8a8a7d69604f41301d0d0000000000000000000000000f1f30404c5e66788491978b827a726a635b544c483b363228221b1007000000000000000000000e23384d63788d897687847562594c40352c201d151717161e21303e4c5e6d8297826d5846331f0a0000000000000000000000000000081829394656606d7e8b8b7e6e6056473a2a1d0c0000000000000000000000000000000000000000000f1f31424c617687937e695b617687937e685b4a382816020000000000000000000000000000000000000000000000000000000000000000000000000417293a4b5d6a80958776614c42311f0f00000000000000000000000000000011263b51667b9087725c47322f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f25221b1002000000000000000004121d24262c2d34495f74898c77624d372d2d2d2d2d2d2d2d2a28201507000000000000000000000c22374c61778b8f7a644f3a240f00000000000000000b21364b6075898975604b36210b04182a3a52687d92836d5745321e0900000000000000071a2d3d566c8196836d5645311d0900000000000000001325495e738985705b3626140100000b20354b6074888976614c392916030000000005182a3b576c818d78634d38230e00000000091d3145567489846f5a442f1a00000000011527374a5b657b8a8a7c6b61584e493d403f3e3e403a474c5660697987927e695f4d3b2b18050000000000000000000009192c3d4c5e667c8a9a8c82776d645c554d493c37342a211e160a070000000000000000000000000e23384d63788d897478878677665e4d493c3632282d2d293236414d5c667c908b79634e3a2917040000000000000000000000000000000b1b2938454b60687a869382746158473b2a1b0a000000000000000000000000000000000000000a1a2c3d4e606e8298836f604f57647a8c8a79635645321e12000000000000000000000000000000000000000000000000000000000000000000000000000b1b2e3f4b60738599836e604e3d2c1a0a000000000000000000000000000011263b51667b9087725c47321d1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0f0d080000000000000000000012222f383c424242495f74898c77624d424242424242424242403c3325150300000000000000000316293953687d928874604a35200b0000000000000000091e3245566d82917c66513929160a1f3447596f84917b665139281603000000000000000010253a50657a8f8975604b36200b00000000000000001c32475c718787725443301c080000081d3144556b80947f6a5746321e12010000000011273c51667c917e685336251300000000021527385d728886715b46311c00000000081d31445563798a8b7a665e4c473a352c2b2929292b2a3438454b5b637687917d67594834200d00000000000000000001142637495b667c8b9a867a6c62594f4a3e38352c221f180d090300000000000000000000000000000e23384d63788d8974627886887c6d635a514b4538424239464b515f677a89947f695b49351b0b00000000000000000000000000000000000b1a2832424e5c64768397847661594739281603000000000000000000000000000000000002152738495b687d928877614c424b5c6a7f948674604b40301d0d00000000000000000000000000000000000000000000000000000000000000000000000000101d314455627889937e685b49382715020000000000000000000000000011263b51667b9087725c47321d0704040404040404040404040404040404040404000000000000000000000000091d2f404c51575757575f74898c77625757575757575757575755504333200d00000000000000000a1e3246576f8497816c5443301c0700000000000000000216283850667b90836e5746321e0c22374c61778a8975604b36200b0000000000000000000b20354b607488907b665036261401000000000000051a2f445a6f848a75604b35200b0000011426374c6177898875614b41301f10020000000c21364c61768a836e5443301c07000000001c31475c718687715c47321c000000000b20354b607385927d685c4c40332a211a1614131415181f27313d4a58647a8a8977624d3b2a18050000000000000000081d31445563798b9a8476645c4c483b362d2321190e0b0500000000000000000000000000000000000e23384d63788d89745a6275839082786e66605659575759576166707c8a968273604b3d2c1a000000000000000000000000000000000000000a151d313d4a58617281968677615745321e1000000000000000000000000000000000000d1d31455663798a8d7c665947343e4b60728497816c5e4c3b2b180800000000000000000000000000000000000000000000000000000000000000000000000001142637485a677d928a79635645311d110000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000f24384c5e666c6c6c6c6c74898c786c6c6c6c6c6c6c6c6c6c6c6a61503c281300000000000000000c21364b61768a907b6650362513000000000000000000000b20354b6074888976614b3621182b3b53687e93826d5645311d09000000000000000000081d3144556d8297826c5443301c0800000000000002172c41576c818d78634d38230e000000091f3447596a7f94816c5f4d3d2d20110400000a1f33465871868974604a35200b000000061b31465b708687715c47321c000000071b2d3e53687e93846f5f4e3e2f1f170c060000000000040a151d2d3a4a5c6b8095826d5948341f0b00000000000000000b20354b6073859b857461584a3e342a221b100c0600000000000000000000000000000000000000000e23384d63788d89745e57616e7d888a837b75716e6c6c6e70767c85918f8172605544311f0f000000000000000000000000000000000000000002131f2d3a4654606c81968575604b3f2e1b080000000000000000000000000000000d1d2f404b60748596816c5e4c3b2a304354627889917c6659483626140100000000000000000000000000000000000000000000000000000000000000000000000009192b3c4d5f6d82988574604b402f1d0c00000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000011263c51667c8182828282818c988282828282828282828282827f6a55402a15000000000000000215273851677c918975604b36200b00000000000000000000081d3144556c81927d67523a29203448597085907b6550382715020000000000000000000114263751667c918874604b35200b0000000000000013283e53687d917c67513c271200000004182a3b4b607486917c675b4a3e2f1f170c030417293a566b808e79644e39240f000000071c31475c718685705b46301b0000000d22364a5c71868f7b65504131201204000000000000000000020f1c2d3e4c6176898a77624c37220d000000000000000417293a52687d9289786256463a2d1f180d0700000000000000000000000000000000000000000000000e23384d63788d89745e464b5f67767f89908a8683828283858a918f857b6c60544437261401000000000000000000000000000000000000000000010f1b2936434b60728497816c5d4b37220f000000000000000000000000000008182a3b4c5e6c81968674604b402f1d26364859667c918978625443301c10000000000000000000000000000000000000000000000000000000000000000000000000000e1e30414b61758796816b5e4c3b2a1804000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000152b40556a8084868787888a8f9f8b8a8a8a8a8a8a8a8a8a8a8a85715b46311c06000000000000091d3145566d8398836e5645311d09000000000000000000000115273750657a8f846f58473322374d62778b8874604b35200b00000000000000000000000b21364b60768a8f7a654f3a2510000000000000000e24394e63798e816c563d2c1a060000000c1d31455663798a8979645c4c3f332a1e160e11263b50667b907e695437271502000004182a3a5d7287846f5a442f1a0000000f243a4f64798f87725d4b372313020000000000000000000000000f1f3347586d82937e69543e2914000000000000000a1f3346587085947f6a5a4938291c1005000000000000000000000000000000000000000000000000000e23384d63788d89745e49414d58616a747b8186898b8b8a8885807a73655d4b43362619090000000000000000000000000000000000000000000000000b18263043546176898f7a644f3d2c1a06000000000000000000000000001325364859667c8d8b79635645322212182b3b4d5e6c81978472604b3f2e1c0c00000000000000000000000000000000000000000000000000000000000000000000000000131e334657647a8c8d7b665947341f14010000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000013283c50626a707071727374898c787474747474747474747474716756422e19050000000000000b20364b607589927c67523827150200000000000000000000000b20354a6073888a76614c372b3c54697e94816c5544311d080000000000000000000000091e3245576e8496816b563d2d1a070000000000000b20354b60748887715b4936210c000000021527384a5b667c8c897a655d4c473a3228232021364b60768a846f5544311d0800000a1f3347587489836e58432e1900000014293f54697e94816c573f2e1c050000000000000000000000000004172a3a52677c92836e59442e19000000000000000c21364c61768a8b77614c3c2b1a0c0000000000000000000000000000000000000000000000000000000e23384d63788d89745e49303a464c5560666c707475767573706a6460544b3f302618090000000000000000000000000000000000000000000000000000081426364758697e9385705b4935210c0000000000000000000000000b1c304354627788937e695b4a382816040d1d30404b607586947f6a5d4b3a291704000000000000000000000000000000000000000000000000000000000000000000000000031729394b5c6a7f948877614c42321f0f0000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000d21334350555a5b5c5d5e73888c77625f5f5f5f5f5f5f5f5f5f5b56493926130000000000000114263650667b908a76614c36210c000000000000000000000000071c3043546b81927d68533b35495a70858f7a644f3726140100000000000000000000000316283953687d9287725c4a36210d000000000000081c3043546d828e79634e392311000000000a1a2d3d4c5e677d8c8a7b6d61584b453838353132455770858975604b36200b00000c22374c61778c816b56412c16000003192e43586e83927d67523d28120000000000000000000000000000000d22384d62788d88735d3928160300000000000010253a4f657a8f86715947341e0e000000000000000000000000000000000000000000000000000000000e23384d63788d89745e4934293337444b51575b55606160545b554f4a43362e1c14080000000000000000000000000000000000000000000000000000000008182a3a4b6074888d78634e38230e00000000000000000000000b1b2d3e4a60728499836f604f3d2d1a0a0000121e324557647a8b8c7a645846331f13010000000000000000000000000000000000000000000000000000000000000000000000000b1b2e3e4b60728499836f604f3d2d1a0a00000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000041525333c40454647485d72878c77624d4a4a4a4a4a4a4a4a4a4642392b1b09000000000000081c3043546c8297846f5846331f0a000000000000000000000000001325364f647a8f846f5948384d62788d87725c4b371909000000000000000000000000000c22374c61778b8e79644e39240f0000000000000114263650657b907f6a55402f1c09000000000f1f2f404d5f677b888d8276686056524e4b443845556a7f8f7a654f3a251000000f243a4f647a8f7c67523d27120000051a30455a6f85907b65503b26100000000000000000000000000000000b20364b60758b8a745745321e0900000000000012273c52677c91836e583b2a1800000000000000000000000000000000000000000000000000000000000e23384d63788d89745e4934171f2731363b4237444b4c4a4336403a3530251811010000000000000000000000000000000000000000000000000000000000000c1d3144556c82947f6a543f2a1500000000000000000000031629394a5c697f948877614c42321f0f000000031628394a5c697e948776614c42311f0f00000000000000000000000000000000000000000000000000000000000000000000000000101c304354627889937e695b4a38281603000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000071521282b303132465c71868c77624d373535353535353535312e261b0d000000000000000b20354b607488937e69533a291704000000000000000000000000000822364a5c72878b77624c3d546a7f94806b563e2e1b00000000000000000000000000000a1f344759708595806a553c2c19060000000000000b20354b60748986715e4c3823100000000001122230414d5d65778390887e756d676360555e5660657a8f7f6a55402a15000215273753697e8d78634d38230e0000071c31465c71868e79644e39240f000000000000000000000000000000091d31455674898b76604b36210b00000000000013283d53687d92826c57422d1700000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f09151d20262c273136363530252b24201c130800000000000000000000000000000000000000000000000000000000000000000215273751667b91836e59442f19000000000000000000000e1e324657647a8b8d7c66594734241401000000000a1b2d3e4a60728398826e604e3d2c1a0a00000000000000000000000000000000000000000000000000000000000000000000000001142636485a677c918b79635645321e12000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000040d13151b1b30465b70858c77624d37221f1f1f1f1f1f1f1c191309000000000000000010253a4f657a8f8c77624d37220d0000000000000000000000000000071b2d3e556b80937e6953495b71868e79634e392410000000000000000000000000000004182a3a54697f9486715a4935200c000000000000081d3144556c81907b66503f2e180800000000041223303f4b59626e7c869089827c787574737475797f9485705a45301b05081d3144556e838974604a35200b0000061c31465b71868f7a65503a25100000000000000000000000000000000b20354b60758a8b75604b36200b00000000000013283d52687d92826d58432d1800000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0002080b1117151d2021201c13150f0b0700000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e87715c47321c0000000000000000000e1e30414b61758796816c5e4c3b2a18060000000000000f1c304354627788927d685b493828150200000000000000000000000000000000000000000000000000000000000000000000000008182b3c4d5f6d82978675604b402f1d0d0000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000051a30455a6f858c77624d37220d0a0a0a0a0a0a0605000000000000000000071a2d3d566b81968671594834200b0000000000000000000000000000001023394e63798e85705a4e63798e87715b4a36210c0000000000000000000000000000000e23384d63788d8d78634d38230e000000000000011527374d62788a85705d4b36261401000000000412212e3b484c5e66717b82888e8d8a8988898b8e8d877f6a543f2a15000b20364b607589836d5443301c070000041a2f44596f84917c67523c27120000000000000000000000000000000d22374c62778c89745645311d0900000000000011263b51667b90846f5a3d2d1a0700000000000000000000000000000000050b0d0c0a040000000000000e23384d63788d89745e49341f09000000000002080b0c0b07000000000000000000000000000000000000000000000103030000000000000000000000000000000d22374c62778c88735d48331e000000000000000009192c3c4d5f6d82988674604b402f1d0c00000000000000001325364759667c8d8a79635645321d12000000000000000000000000000000000000000000000000000000000000000000000000000d1d30414b61758697816c5e4c3b2b180800000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000004192f44596e848c77624d37220d00000000000000000000000000000000000c21364a5b7287947f6a553b2b19050000000000000000000000000000000c2136495b71868b7862556a80957f6a553d2d1a070000000000000000000000000000000c2035495a7186947e69543b2a180500000000000009203448596d828f7a655443301c0e000000000003111d2b34404c515d656d74797c7f8081807e7b77726a614f3c2713071a2d3d51667c907b665136251300000001162b41566b80957f6a553c2b1905000000000000000000000000000114263750657a9085705b382715020000000000000d23384d62788d88735c4a36210d0000000000000000000000000000000d182022211f170c00000000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000006101618180b08010000000000000000000000000d22374c62778c88735e49331e0000000000000001152737495a677d928b7963564532221100000000000000000008182a3b4c5e6c81968574604b402f1d0d00000000000000000000000000000000000000000000000000000000000000000000000000121e324657647a8b917c66594836251300000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000003192e43586e838c77624d37220d00000000000000000000000000000000000e24394e63798e8e79634e39240e00000000000000000000000000000000061a2c3d546a7f947f6a5c72878d78634d38230f0000000000000000000000000000000006192c3c566b809585705947341f0b00000000000005192b3b4d63788b8573604b3c2b1a0a0000000000000d18202f383f4b5054606367696b6b6b6966625a544f4332200d0b21364a5c6f848874604b35200b0000000011263c51667b9185705a48352010000000000000000000000000000a1d3144556b8195806b56402b16000000000000000b2035485a72888e79644e3b2a180500000000000000000000000000121d2b343737332a1c0c000000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000a18232b2e2d201d150900000000000000000000000f24394f64798e87725c47321d000000000000000c1d314455627889937e695b4a38281504000000000000000000000d1d2f404b60748596816c5e4c3b2b1808000000000000000000000000000000000000000000000000000000000000000000000000031628394a5c697f948977625443301c10000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d828c77624d37220d0000000000000000000000000000000006192b3c556a7f9587725b4a36210c00000000000000000000000000000000000f23384d62788d867164798e86715b4935210c00000000000000000000000000000000000f243a4f647a8f8b77624c37220d000000000000000d2035495a6b80937e695a493828180800000000000005121d242e3736434a4e515455565554514d483c3c3225150b1b2f404e64798b806b5544311d08000000000b21364b6075898b78624d3e2d1d0e00000000000000000000000b1a293a4b6074878e79644f39240f0000000000000006192b3c566b8195806b5947341f13080000000000000000000008131c2f3b484c4c473a2a17040000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000001828353f4342353127190c0000000000000000000a1a2e3e53687d92836e59442e190000000000000c1c2f3f4b60738599836f604f3d2d1a0a000000000000000000000000111d31455663798a907c6659483626140100000000000000000000000b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b000b1b2d3e4a6072849a8472604a3e2d1b0b0000000011263b51667b9087725c47321d0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a00000000000000000000000002172c41576c818c77624d37220d000000000000000000000000000000000b2035495a718696816b563d2d1a0700000000000000000000000000000000000b2035495a70858d786b80947e69543c2c190600000000000000000000000000000000000b20354a607488937d68533a29170400000000000006192c3c4b6074868a78625645362513080000000000000009111c23253035393c3f4041403f3c38352b272015081829394c5e6e838976614c3727150100000000091e3245566b8095826d5c4a3b2c1e12080200000000000008101b29384758687d9385705c4a36220d00000000000000000e22384d62788a8a77624c433025180e07000000000001080f182530404c5962615847331f0a0000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000081835465358584b44372a1c12080100000000040d1927384a5c6f84937e68533e2913000000000004182a3a4b5d6b80958877614c42321f0f0000000000000000000000000002152738495b687e938877625443301c100000000000000000070c0e2020202020202020202020202020202020202020202020202020201c304354627789947f695c4a3928160300000011263b51667b9087725c47322020202020202020202020202020202020202020202020202020200a040000000000000000000001162b40566b808c77624d37220d000000000000000000000000000000000d23384d62788d8f7a65503a251000000000000000000000000000000000000006192b3c54697e938072878b77624d37220e000000000000000000000000000000000000071c3043546c8197846f5846331f0a000000000000000e1d324556647a8c85756054433025180a00000000000000000808131c2023272a2b2c2b29262220190e0d031325364657667b907f6a58473319090000000000021628384c6176898c7a6459493c30201d1512110f1012141b222d3946566176888f7a644f3e2d1b0700000000000000000b2035485a6c8196826d614a43362b201c1314121213141c202d36434a5e667776614c37210c0000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000013253653646d6d6055473a30201d1412101012181f2b374556647a8c8a76614c37210c00000000010f1f334758657b8c8d7c6659473424140100000000000000000000000000000a1a2c3d4e606e83998472604b3e2e1b0b0000000000010f1a21243535353535353535353535353535353535353535353535353535353525364859667c918b7a645746321e1200000011263b51667b9087725c47353535353535353535353535353535353535353535353535353535351f170c00000000000000000000152a40556a7f8c77624d37220d00000000000000000000000000000004182a3b54697e948874604b35200b000000000000000000000000000000000000000e22374c62778b867a8f8570594834200b0000000000000000000000000000000000000013253650667b908a76614c36210c00000000000000021528384b5d697f948372604a4336271a0e00000000000000000000070b0e121416161614110d0b05000a161e3043546175878675604b3a2917000000000000000a1f334658687d928878635a4d413631272726242527292e373e4a5761748497816d5c4a36201000000000000000000005192b3c4c617687947f6a6054483c353025292828292630353d4a5460697c8985705b46311b0600000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000071c3043546d82827361584d41353126272525272a343c4855607486947f6a5847331f0a000000000f1f32424c61768896816c5e4c3b2a1806000000000000000000000000000000000f1f31424c617687947f6a5c4a39291703000000000f1f2d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b4c5e6c81978675614b41301a0a000011263b51667b9087725c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a33291c0c000000000000000000142a3f54697f8c77624d37220d0000000000000000000000000000000b1f344759708597826d5544311d08000000000000000000000000000000000000000b1f3448596f849882937e68533b2b1905000000000000000000000000000000000000000b20364b607589927c675238281602000000000000000a1a2e3f4f616c8196806c605445382c1e14080000000000000000000000000000010000000000040f1a2832444a6072838b79635645321c0c000000000000000417293a4e606b80968678675f514b44373d3b3a3b3c3e3f4b4f5c647583998474604b3e2e1b02000000000000000000000e1f33475863798a8d7f72625a4f4a43363f3d3d3e36434b505b63727f8c93806b55402b160000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000b20354a607382968476675f514b44373c3b3b3c3b474c5a627383998573604b3a29170400000008182d3d4f606e83998674604b402f1d0c000000000000000000000000000000000001141f334758657b8c8b7a645746331e11000000071a2d3d4a4e60606060606060606060606060606060606060606060606060606060606060606060758697826d5f4d382715020011263b51667b90877260606060606060606060606060606060606060606060606060606060605e463a291704000000000000000013293e53687e8c77624d37220d0000000000000000000000000000000c22374c61778b917c6651372614010000000000000000000000000000000000000005182a3b53687d938d8a77614c37220d0000000000000000000000000000000000000000091d3145566e8398836e5645321e090000000000000000102032434b6073839681726056493c31231c110700000000000000000000000000000000050c171f2d38454b626b80937e685b4a3828160000000000000000000b1b31414a60728192897c716760555452504f505153585d646e7a86968476615645312010000000000000000000000004172a3a4a5b657b899483786d6460545654525253555460656e7984948b7e6b62503d28140000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000071c30435460728091887c7067605553515050525559616a7884998677625544311c0c000000011426364a5b697e938b79635645322211000000000000000000000000000000000000000417293a4b5d6b80958776614c3f2e1c0800000c21364a5b707575757575757575757575757575757575757575757575757575757575757575757575798b917c675645311d090011263b51667b9086757575757575757575757575757575757575757575757575757575757575705846331f0a000000000000000012283d52677d8c77624d37220d00000000000000000000000000000013283e53687d938a75604b36210b0000000000000000000000000000000000000000000d21374c61768b99846f5847331f0a00000000000000000000000000000000000000000215273852677d928975604b36210b000000000000000002141d314455607482968274635a4e42372e201c130b0700000000000000000000060c0e192029333d4a56606d80947f6a604e3d2d1a0a00000000000000000000131c304354606c7d8a91867c756f6a6766646567696d737a838c8f8073615847382715020000000000000000000000000c1c2d3d4b5d657885938b8279746e6b696767686b6e747b838b94867a6960504433210d0000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000001325364354606b7c8991857c746e69676565676a6f777f8994857762594837271500000000081c30435463798a937e695b4a3828150400000000000000000000000000000000000000000c1c2e3f4b60738598826d5d4b37230e00000e24394e63798a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8e9c9c8875604b36200b0011263b51667b908f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a76614c36210c00000000000000000c21364c61767e75614b36210c000000000000000000000000000000172c41566c81867f6a5745321e090000000000000000000000000000000000000000000a1f3347586a7f867b65503a2a18040000000000000000000000000000000000000000000c21364b617583867a644f3a250f0000000000000000000115273745566072819385786860504b3f353025201c131311100e0f0f1113161920232b343a464c5b637582927f6a615042311f0f000000000000000000000000132536434a5f6778818a9189847f7c7b797a7c7e83888f8e847a6b6055473a291a0a00000000000000000000000000000f1f2e3f4b5a62747e87928e8883807e7d7d7e8083889091887f74645c4e42332616040000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000008182636434b5f6777818a9188837e7c7a7a7c7f858a93897f736259483b2b1909000000000b20354b60748286816b604f3d2d1a0a00000000000000000000000000000000000000000000111d314455627885867b65503b251000000e23384d637886878787878787878787878787878787878787878787878787878787878787878787878787878678624d37220d0010253a50657b868787878787878787878787878787878787878787878787878787878787878675614b36210c00000000000000000a1f3346586169615746321e0a00000000000000000000000000000014293e51626c716a6150392816030000000000000000000000000000000000000000000417293a50616a71655d4b371c0c00000000000000000000000000000000000000000000091e324657616f71645c4b37220d00000000000000000000091928384554606c7e8a8a7e70655d504a433635302528262524242526282b2c35383c484d58616b79858a7d6a6150433324140100000000000000000000000008182530414d5a626c777f868a8f91908f90918f8c8781796f645d4b4437291c0c0000000000000000000000000000000111212e3c48566068757d84898e9193929292908d88837c756960564b3e31241608000000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000008182630414d58616c777f868a8f919090918f8a857e766a6055483b2b1d0d0000000000081c304354606e716b625142321f0f000000000000000000000000000000000000000000000001152737485a627071655d4b37230e00000c2035495a6371717171717171717171717171717171717171717171717171717171717171717171717171717162594834200b000e23374b5d657171717171717171717171717171717171717171717171717171717171717171615746331e0a00000000000000000417293a464c544b46392916030000000000000000000000000000000e22344451565c555043331b0a00000000000000000000000000000000000000000000000c1c334350555b504b3f2e1c000000000000000000000000000000000000000000000003162839464b5a5c4f4b3e2e1b0800000000000000000000000a1a2836434b6069798593857a6f6560544f4a43363d3c3a39393a3b3e403c494d535a626b76808c8679685f504333251506000000000000000000000000000008131c313c484d59626a71767a7c7e7e7e7d7a77726c645c4f4b3f3127190c000000000000000000000000000000000003111e2b38454b5660686f75797c7d7e7e7d7b78746e6760564b45382e20140600000000000c21364c61757d7d67523d2812000000000000000000000000000000000000000000000000000000000000000008141c303a474c59616a70767a7d7e7e7c7a76706961574b44372b1d0d00000000000001142636434b585c5651443424140100000000000000000000000000000000000000000000000009192b3c484d5a5c504b3f2e1c08000006192c3c494d5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4d483b2b190500081c2e3f4b505c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4b46392917030000000000000000000b1b2933363e3632291b0b00000000000000000000000000000000051626343e4147403c332515000000000000000000000000000000000000000000000000001525333c40463a372e21110000000000000000000000000000000000000000000000000b1b28323644473a372e2010000000000000000000000000000a182630424f5b63737f888f847b736b6460545652514f4e4e4f505355595a63686f788089897f74635b4e41332515070000000000000000000000000000000000131e2b353b484d555761646768696867656159564e4a3e372e1d150900000000000000000000000000000000000000000e1a273138454b52556064666869696865636054524b453831271a10020000000000000a1e3346576168675f4d3a251000000000000000000000000000000000000000000000000000000000000000000001121c2a333b474c5457616567696967656157544b46393126190d000000000000000008182630354347413d3426160600000000000000000000000000000000000000000000000000000e1e2b353845473b372e2111000000000e1e2c353847474747474747474747474747474747474747474747474747474747474747474747474747474737342b1d0d00000011212e373a47474747474747474747474747474747474747474747474747474747474747473633291b0b00000000000000000000000b171f2129211e160b000000000000000000000000000000000000081622292c312a2820150700000000000000000000000000000000000000000000000000071520282a3125231c1103000000000000000000000000000000000000000000000000000b161e212f3225221b1002000000000000000000000000000008141c323d49556069757f8990888079746f6b68666563646466686b6f73787e848a898076696056493d31231507000000000000000000000000000000000000000e19202b343739464b4f5253545352504c473b39362d221b1001000000000000000000000000000000000000000000000a151d28323637444b4e5153545352504d4a43363632281d150a000000000000000003172939464c53524d41301e0a00000000000000000000000000000000000000000000000000000000000000000000000c181f2a343739464c4f52535352504b46393633291d14090000000000000000000008141c202e312c29221608000000000000000000000000000000000000000000000000000000000e192022303225231c110300000000000e1920233232323232323232323232323232323232323232323232323232323232323232323232323232322220190d0000000003111c23253232323232323232323232323232323232323232323232323232323232323232211e170b00000000000000000000000000040a0c140c0a030000000000000000000000000000000000000000050e14171c15130d03000000000000000000000000000000000000000000000000000000040d13151c100e080000000000000000000000000000000000000000000000000000000003090c1a1c0f0d08000000000000000000000000000000000001141f2c37444b57616a757c848a8e8985807d7b7a79797a7b7d8084888d8a857d756b61584b45382c1f1305000000000000000000000000000000000000000000060d1820222932363a3c3e3f3e3d3a37342a24211a0f0800000000000000000000000000000000000000000000000000020a151d20273136393c3e3e3e3d3b38353025211e160a02000000000000000000000b1b2933363d3d3a30231301000000000000000000000000000000000000000000000000000000000000000000000000040c181f222933363a3d3e3e3c3a363229211e170b0100000000000000000000000001080b191c16140e05000000000000000000000000000000000000000000000000000000000000050b0d1b1c100e080000000000000000060c0e1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0d0b0500000000000000080e101c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f19273139464b5760676f777d82868a8d8f8f8e8e8f8e8c8985817c76706860564c473a32281a0f01000000000000000000000000000000000000000000000000050b0d161e2124272929292825221f180f0d07000000000000000000000000000000000000000000000000000000000002090b151d202427282929282623201c130b0902000000000000000000000000000b171e212828251e1305000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c171e21252829292725211e160c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a131a1c1f0f0d07000000000000000000000000000000000000020c121420191610060000000000000000000000000000000000000003090b0f0d0700000000000000000000000000000000000000000000000000000009151d293239454b525861676d7175787a7b7c7b7a797773706c666158524b4538332a1d150a0000000000000000000000000000000000000000000000000000000000030a0c0f1213141312100c0b04000000000000000000000000000000000000000000000000000000000000000000000002080b0f1113141413100e0b07000000000000000000000000000000000000030a0c1312100a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1012141412100c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f131517171614100c0a0400000000000000000705030000000000000000060c0e201f1c170d0100000000000000000000000000000000000000000000090f1120202020202020202020202020202020202020202020202020202012100a01000000000000000000000000000000000000000000000000070c0e1b12100a010000000000000000000000000000000000000000000000000000000000000000000000000d1b262e313524211a0f0100000000000000000000000000000006141f2629352e2b23180a00000000000000000000000000000000000a161e2124221b10020000000000000000000000000000000000000000000000000000010b161e2832363a474c525755606264666666656361595b57514c463a3632281f170c02000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0f1a2124282a2c2d2b2926211f170c0801000001080b1d1a18110800000000000e1920233534312a1f11010000000000000000000000000000000000000004121d242635353535353535353535353535353535353535353535353535353527251e1305000000000000000000000000000000000000000000010f1a21243127251d130500000000000000000000000000000000000000000000000000000000000000000000001b2b3943464a39362d200f0000000000000000000000000000021424323b3e4a433f362818000000000000000000000000000000000a1a28323639362d201000000000000000000000000000000000000000000000000000000000030a161e212a33373d37444b4d4f5051504f4e4c473b423c363329211e160a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e131617171614100c0a04000000000000000103060400000000000000000000000000000000060c0e121517181715140f0b0801000000000000000000000000000000060c0e201f1c170d0100000000000000000000000000030f181d1f200d0b05000000000000000000000000000000030c12142018150f06000000000000060c0e201f1c170d010000000000000000000000000000000000000c161c1e200e0c060000000000000000000000000d181f222d36393e404142413f3b363329201c140808141c20322f2c25190b0000000e1e2c35384a49463d2f1f0d0000000000000000000000000000000000000012222f383c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c393023130100000000000000000000000000000000000000000f1f2d3639463c39302313010000000000000000000000000000000000000000000000000000000000000000000e1f3949565c5f4e4a3e2d1a07000000000000000000000000000c1f32424f5360585346361a0a000000000000000000000000000003162838454b4f4a3e2d1e0e000000000000000000000000000000000000000000000000000000000003090c171f2128273136383a3b3c3b3a3937342a2c27211f170b090300000000000000000000000000000000000000000000000000000000000000000000000000000000000000070f1a2123282b2d2c2b2926211f170c0a030000061016181b1912080000000000000000000000050b0e192123272a2c2d2c2b2924201d1409070000000000000000000000000e1920233534312a1f110100000000000000000000000313212c323535351f180d00000000000000000000000000071420272a352d2a231709000000000e1920233534312a1f110100000000000000000000000000000000101e2930333523211a0f01000000000000000001151d2a34373e4a4e535557575654504c463a3530261818263035474441372919080006192c3c495e605e5a4d3d2a17030000000000000000000000000000000000091d2f404c51606060606060606060606060606060606060606060606060606060524d41301e0a00000000000000000000000000000000000000071a2d3d4a4e5b524d41301d0a0000000000000000000000000000000000000000000000000000000000000000061a2c3d56677174645c4a3621080000000000000000000000000012263b4f6069756e64533828160300000000000000000000000000091e32455660645c4a3c2c1c0c00000000000000000000000000000000000000000000000000000000000000040a0c12151d2023252627262524221f1817110c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c202c35383d404242413e3b37332a211e170b0317232b2d302d261a0c0000000000000000040e1920222c35383d3f414241403e3a353126211a0f040000000000000000000e1e2c35384a49463d2f1f0d00000000000000000000000f21313e474a4a4a342a1d0d0000000000000000000000031425323b3f4a423f3527170600000e1e2c35384a49463d2f1f0d0000000000000000000000000000000c1e2e3b45484a38352c1f0f0000000000000009141d323b484c575c64686a6c6c6b69656158524b43362f2636434b5c5a5447372511000c2035495a7075746b5a46311c0800000000000000000000000000000000000f24384c5e66757575757575757575757575757575757575757575757575757575675f4d392510000000000000000000000000000000000000000c21364a5b6370675f4d39251000000000000000000000000000000000000000000000000000000000000000000c2135495b71858b7a644e362614010000000000000000000000061a2c3d53697e8a826e5645321e09000000000000000000000000000b21364b607479645a493a2917040000000000000000000000000000000000000000000000000000000000000000000002080b0d0f111111100e0c0b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d182530353d494e535657575654504c473a3633291e1627353f424542382a1a080000000000000c171f2b35383c494d525557575755534f4b4437362d1f170c0000000000000006192c3c495e605e5a4d3d2a170300000000000000000004182c3e4f5b5f605e483b2a1805000000000000000000000c2032434f546057524535230f0006192c3c495e605e5a4d3d2a1703000000000000000000000000000216293b4c595e605e493d2c1a06000000000009192631434f59626c73797d7f8182807e7b766f6760544c4033435460726f6554412c18000e23384d63788a89745e49341f09000000000000000000000000000000000011263c51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523c2712000000000000000000000000000000000000000e24394e6379857d67523c271200000000000000000000000000000000000000000000000000000000000000000e23384e63788d96816c5443301c0800000000000000000000000c2136495b71869b8975604b36210b000000000000000000000000000e23384d63788878635846331f10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b36434a525b63686b6c6c6b69656158534c46393228354552585b55483826120000000003111c29333c484d565b63676a6c6d6c6a696460554e4a3d33291c100200000000000c2035495a7075746b5a46311c08000000000000000000081d32475b6d7475705948341f0b0000000000000000000012273b4f6169756d63523f2a15000c2035495a7075746b5a46311c0800000000000000000000000000071c3045596a7375705b4935210c0000000001142637444b61697781888e928e8c8b8c8d908a847c73665e4c474b607386836f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000c21374c6176889b858283838383838383838383838383838383838383838383827a644f3a250f0000000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000000000000000000000000071a2d3d556a7f95858874604b35200b00000000000000000000000e23394e63798e86917c6751392816030000000000000000000000000c2135495b687e8676614c3e2d1b07000000000000000000000000000000000000000003090b0f1214141413100d0b0500000000000000000000000000000000000000000000000000000000000001080b0e1113141413100d0b05000000000000000000000000000000000d1d2b3b4854606871787d808281807e7b77706961574b46393f52646d706655422d190000000715212f3a464c5a626b72787c7f818281807e7a746d635b4c473a2d201000000000000e23384d63788a89745e49341f090000000000000000000a1f354a5f748b8a77624c37220d00000000000000000000142a3f54697f8a816d57422d18000e23384d63788a89745e49341f0900000000000000000000000000091e33485e73888a79634e38230e00000000081d314455606d7f899689837d79777676787c818890867c6d61584b61768b846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000a1f334758667c8d87766d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d645c4b37220d0000000000000000000000000000000000000010253a4f657a8f7e69543e2914000000000000000000000000000000000000000000000000000000000000000c21364a5b7186897c907a655037271502000000000000000000071b2d3e556a80907a8c836e5746321e0900000000000000000000000006192c3c4e606e83826d5c4a3622100000000000000000000000000000000000040a0c161e212427292a292826222019120c0a03000000000000000000000000000000000000000000000001080b141c202327292a292826222019100b0700000000000000000000000005182a3b485962727d868d908b8988898b8f8a857e766b61574c3f586d8284705b45301b0000001525323f4b58616b7880888d918c8b898a8b8d8f8983796e61584a3e2d1e0e000000000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00000008182f3f4b607381948b80766d676462606163676b747b85918276635b61778c846f5a442f1a000e23384d63788d89745e49341f09000000000000000000000000000000000004172a3a4c5e6c8196826d5f5858585858585858585858585858585858585858584f4b3e2e1b080000000000000000000000000000000000000010253a4f657a8f7e69543e2914000000000000000000000000000000000000000000000000000000000000000e23394e63798e83758a826c5544311d080000000000000000000d22364a5c72878772858976614b36210c000000000000000000000000000e1e31424c61778879644f3e2e1b070000000000000000000000000000040c181f222832363a3c3e3f3e3d3b38342b28211e170b06000000000000000000000000000000000000000008141c20263035393c3e3f3e3d3b37342b26201c1308010000000000000000000b1f344859627784928a827b76747374767a7e848a898075655d4a5d728785705b45301b0000081832434f5d6576808a9188807b7775747476787d838a8b8376645c4a3c2b19090000000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000001325364b5d6c81968a7b6b6158524e4d4b4c4e51546065707d8986796462778c846f5a442f1a000e23384d63788d89745e49341f090000000000000000000000000000000000000c1c2f404b607485927d675b49384343434343434343434343434343434343433a372e2010000000000000000000000000000000000000000010253a4f657a8f7e69543e2914000000000000000000000000000000000000000000000000000000000000071a2d3e556a80917c6e838975604b36200b0000000000000000000f24394e64798e806b7e917c67523929170300000000000000000000000000131f3447596a7f85705c4b37220d000000000000000000000000000c171f2a343739454b4f5253545452504d483c3d363329211a0f040000000000000000000000000000000003121826303536434b4e5153545453504d483b3b3530251d140900000000000000091d30404c6277869a84786d6561575e576064686f778089877b6a6055748985705b45301b00001325364f61697b8894867c746b66626056576163686e788291877a645a493727150200000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0000071c304354657b8d8b7a655d4c463a393736373836434b505f677785897a64788d846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000121d31455663788a8a79635645322e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e25221b1002000000000000000000000000000000000000000010253a4f657a8f7e69543e29140000000000000000000000000000000000000000000000000000000000000d21364a5c72878976677c907b66513828160300000000000000071b2e3e566b808f7a64788d836e5746331e0a0000000000000000000000000004182a3a4c6176897a644f3a240f000000000000000000000004121c2a333a474c54576064676969696865625a58524b4639352c1f170c00000000000000000000000000000a161e2f36434b51546063666869696865625957504a43363126190e0000000000000f24384c5e6f849a8474625a504b4639454b4f5359616a76828c807260758a85705b45301b00071c304354697f8c8c7f73666054514d4b45464b4e535a626d7d8a8878625544311d0900000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00000b20354a607386957f6a5c4b3f33292422212123263035414d59627482897a798e846f5a442f1a000e23384d63788d89745e49341f090000000000000000000000000000000000000002152738495a677d928574604b402f1d1818181818181818181818181818180f0d080000000000000000000000000000000000000000000010253a4f657a8f7e69543e29140000000000000000000000000000000000000000000000000000000000000f24394e64798e836e617689826d5645321e09000000000000000d22374b5c728787725c70868a76614c36210c000000000000000000000000001525333b48576d82816c573b2a18040000000000000000000715222f3a474c5961697076797c7e7f7e7d7b77736e6761574e493d33291c100200000000000000000000000c1b2832404c5460666e74797c7e7f7e7d7b77736d6560544b44372c1f11030000000316283851667c9189766156493c36322832363a3a474c58616d7b898274778c85705b45301b000b20354a607383887b6a60554b43363736313336383c484d5f677c8d8674604b37261401000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000010263b50657b908874604b3e2e1f170f0d0b0c0e141c20303b4856607382877c90846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000000a1a2c3c4d5f6d8296816c5e4c3b2b1909000303030303030303030303030000000000000000000000000000000000000000000000000010253a4f657a8f7e69543e29140000000000000000000000000000000000000000000000000000000000071b2d3e566b80927c67576e838975604b36210b000000000000001325364f647a8f806b56697f927d67523a29170400000000000000000000000e1e3343505962677d88725947341f0b000000000000000007152532404c58616c777e858a8f918f8e8f90908d88837d766d635b4c473a2d2010000000000000000000000c1c2a39454b5e66737c83898e918e8d8d8f908c88827b73686055493d2f2111000000091e3245566e84937e695847382b211e161e21242a343a474c5e66788783798e85705b45301b00071c304354606f74655d4b4437302622201d1e21232b34414d5e6c81937e695544311d08000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0006192b3c586e8395806b55443120110400000000000108131d2b3845556073848899846f5a442f1a000e23384d63788d89745e49341f090000000000000000000000000000000000000000000e1e30414b617586917c665948372614010000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000000000000000000000d22364a5c72878a766151667c917c6751392917030000000000071c3043546b818e79644e62788d846f5846331f0a0000000000000000000005192b3c50616a777a7b8c77614c37220c0000000000000004152532434f5e6676818a9389847f7c7a79797b7c808489918982796c61584a3e2d1e0e00000000000000000b1b2a3a4757606d7c86918e86807c797878797b7f848990877d73635b4b3f2f1e0e00000b21364b60748a8b77624c3a2a1a0e0903090b0f181f2933404c5a627786879a85705b45301b0000132536434a5560554b3f31261c140d0b090a0c0e192030404c6177898874604b35200b000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000b2035495a73888e79634e372715020000000000000000000d1a2837445561768799846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000131e32465763798b8978625544311d110000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000000000000000000001325364f647a8f836e574b607589836e5746331e0a00000000000b20354a60738887725c4a5a71868a76614c36210c000000000000000000000b2035485a6a7f8b8f8b8f7a644f3a250f00000000000000122232434f61697c8895877e766f6a6764646465676a6f757c838c8b8176645c4a3c2c1906000000000000031628394758617582918c8279716b6764636364666a6f767e87928579655d4b3c2b1906000e23384e63798d87725948341c0c000000000000040c171f2f3c49596276859a85705b45301b00000818253037444b44372e1d14090100000000000005121f3347586d838f7a654f3a2510000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e000d23384d62788d8974604a35200b00000000000000000000000a1927374758677c91846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000031628394a5b697e938473604b3f2e1c0c00000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000000000000000000071c3043546b81927d675245566d828976614c36210c00000000011426374f657a8f806b553e546a7f927d68523a2a17040000000000000000000d22384d62788c9fa99f907b66513b26110000000000000d1d30404f616a7f8d8b807468615755514f4e4f5052555660666e798390877a645a4935200c0000000000000a1e32465761768598867a6d635b56514f4e4e4f5054576168747f8b897b655a4935200b0010253a50657a8f85705a3b2a1800000000000000000004111e2b3b4858657a9085705b45301b00000008131c263135312619110100000000000000000004182a3a52677d92806b55402b16000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0012273c51677c9185705443301c0700000000000000000000000009192a3a51667b90846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000b1b2d3d4e606e8395806a5d4b3a2a1808000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f7e69543e2914000000000000000000000000000000000000000000000000000000000b20354a6073888a76614c3851667b907d67523a2a1804000000081d3144556c818e79634e394d63788d846f5847331f0a00000000000000000010263b50657b90aab8a78f7a644f3a250f000000000005182b3b4d5e6a7f94897b6a60554c46393c3a393a3b3c38454b515b636e7c888978634d38230e00000000000a1a30404b6175859a8476645c4e493d3c3938383a3b39464c55606979878978624d38230d0010263b50657b90846f5a3b2b1905000000000000000000000e1d2b3a50657a8f85705b45301b000000000009141d201d140900000000000000000000000010253a4f657a8f836d58432e18000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e0014293e53697e93826d58362513000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000f1f31424c6176878c7b655847362513000000000000000000000000000000000000000000000000030303030303030303030310253a4f657a8f7e69543e2914030303030303030303030300000000000000000000000000000000011426364f647a8f846f5746364b607589846f5847331f0a0000000b20354b60748887725b4a36495a71868a77614c37210c0000000000000000000d22384d62788b9fa99e8976614b36210c00000000000b20344859667c918a7a655d4b443733292725242426272832363d494e5e66777e72604b35200b00000000021527384d5e6d8298857561584b3e362c272423232426293337444b5b63777e72604b35200b000e23394e63798e86715948342013050000000000000000000010253a50657a8f85705b45301b00000000000001080b0801000000000000000000000000000e23384e63788d856f5a45301a000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00152a3f556a7f94816c57412c17000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000001141f334758647a8c8876615443301c100000000000000000000000000000000000000000090f11191919191919191919191919253a4f657a8f7e69543e2919191919191919191919191915130d03000000000000000000000000081c3043546c81927d6852393145566d828a77614c37220d00000215273750657b90806a553d2d3c556a7f937d68533b2a180400000000000000000b2034485a697f8b8f8a7d675746331e0a00000000071a2d3d4c627789917c665c4b3f31271e17120f0f0f1012151d202c35404c596268605443301c0800000000091d314556667c9189776257463a2e211a120f0e0e0f11171e27313d4a596168605443301c08000b20354a6073888b77624d403020180d07000000000000000010253a50657a8f85705b45301b00000000000000000000000000000000000000000000000412253a4f657a8f846f5a442f1a000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00162b41566b8095806b55402b16000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000417293a4b5d6a7f948372604a3e2d1b0b000000000000000000000000000000000004121d24262e2e2e2e2e2e2e2e2e2e2e2e2e3a4f657a8f7e69543e2e2e2e2e2e2e2e2e2e2e2e2e2e2a2820150700000000000000000000000b20354b6074888a76614c36273850657b907e68533b2b180500081d3144556d828e79634e3923384e63788d846f5947341f0b000000000000000005192b3c4f6169777a77675f4d39291703000000000c21364a5b6d8297826d5e4d3e2e1d15090300000000000002090f1a212f3b484c534b4336261401000000000b20364b607487927d67594839291c10060000000000000309151d2d3b474c534b433626140100071c3043546b8095816c5e4d41342b221b110c0a030000000010253a50657a8f85705b45301b000000000000000000000000000000000000000000060c171f314253687d92826d57422d18000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000c1c2e3f4b607284947f695c4a392917030000000000000000000000000000000012222f383c43434343434343434343434343434f657a8f7e69544343434343434343434343434343403c332515030000000000000000000114263750657a8f846f58463320354b6074888570594834200b000b20364b60758986715b4a362135495b71868a77614c37220d0000000000000000000d1d32434f59626561594d41301b0b00000000031729394e63798c8977614c4030201102000000000000000000000006121d2a34373e353026180800000000071a2d3e53687d928573604a3b2b1b0c00000000000000000000020f1d2a34373e35302618080000001325364c6176888d7c675f4d483b362d26211e171613100e10253a50657a8f85705b45301b000000000000000000000000000000000000060b0e19202a33414e607185927d68533d2813000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000101c3043546277888b7a645746331e13010000000000000000000000000000091d2f404c51585858585858585858585858585858657a8f7e6958585858585858585858585858585855504333200d000000000000000000081d3144556c81927d68533a291d3144556c818a77624d37220e0215283850667b907f6a553d2d1a2c3d556a7f937e68533b2b18050000000000000000001424323b484d504c473a30231300000000000a1e3346576d8296806b59473422120200000000000000000000000000000d181f2228201c140800000000000d21364a5c7186917c675443301d0d000000000000000000000000000c181f2228201c140800000000081f334658647b8a8b7d6d62594e4a3e3b3633292b28252321253a50657a8f85705b45301b000000000000000000000000000000060c0e1920232c353a474c5f687e928975604b36210b000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000011426364859667c8d8775614b42311f0f00000000000000000000000000000f24384c5e666e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e7a8f7e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6a61503c28130000000000000000000b20354b6074888a76614c372115273750657a8f7e69543c2c19091d3245566d828d78634e38230f23394e63798e8570594834200b00000000000000000006141d2b34373a37342a1c130500000000000c21364b6176898b78624d3a2a180400000000000000000000000000000000050b0d130b08010000000000000f24394e64798e8874604b362513000000000000000000000000000000040b0c130b080100000000000417293a4b5c647a889282776c645c56514c4639403d3b3836323a50657a8f85705b45301b000000000000000000000000060c0e1a21232b35383c494d58616c7d8c927d685745321e09000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000008182a3b4c5e6b8096826d604e3d2c1a0a0000000000000000000000000011263c51667c83838383838383838383838383838383849a85838383838383838383838383838383837f6a55402a1500000000000000000215273750657b90846f5847331f0b20354b60748886705a4935200b20364b60758986715b4935210c21364a5b71878a77624d37220d00000000000000000000000d18202225221f180c0000000000000012273d52677c9285705a48341c0c000000000000000000000000000000000000000000000000000000000001142637556a8095816c5544311808000000000000000000000000000000000000000000000000000000000c1c2e3e4b5c6476828b8a8179726b666157595552504e4b463950657a8f85705b45301b00000000000000000000080e1920232c35383c484d545a626b76819193806b5f4e39281603000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000d1d2f404b607485927d685b493828160200000000000000000000000014293f54697f8a8989898989898989898989898989898b9f8b89898989898989898989898989898989836f5a442f1a0000000000000000081d3144556d82937d68533a2a17081c3043546c818d78634d382316283951667c917f6a553d2c1a071a2d3d556a80937e69543c2b19050000000000000000000000050b0d100c0a04000000000000000417293a586d82947e69543c2b19000000000000000000000000000000000000000000000000000000000000081d3144557085917c665137271500000000000000000000000000000000000000000000000000000000000010202e3e4b58616d79828a8e87807b76726e6b68656361575e5c657a8f85705b45301b000000000000000003101b222c35383d494e555a626970788089978a7e6b625141311b0a00000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000111d3144556278898a79635645321e1200000000000000000000000012273b4f6169747474747474747474747474747474747b8f7e747474747474747474747474747474746f6554412c1800000000000000000b20364b6075898a77614c37220c011426364f647a8f7f6a553d2d1e3245576e838d78634d38230f000f24394e63798e85705a4834200b000000000000000000000000000000000000000000000000000a1f33465872878e79644e39240f0000000000000000000000000000000000000000000000000000000000000b20354b6075898c77614c37220c0000000000000000000000000000000000000000000000000000000000000210202e3a474c5c646d777d84898f8a8783807d7a7876747372717b8f85705b45301b000000000000000b161e2e373c494d555b636a71787e858b958b8278686051443423130000000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000002152737495a677d918674604b40301e0e00000000000000000000000c1f32434f545f5f5f5f5f5f5f5f5f5f5f5f5f5f5f657a8f7e695f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a5447372511000000000000000215273850667b90846f5847331f0a000b20354a60738886715b4a3621364b60758986715a4935200c000c21364a5b72878b78624d38220e000000000000000000000000000000000000000000000000000c21364c61768b8a75604b35200b0000000000000000000000000000000000000000000000000000000000000e23394e63788e88735947341f0b0000000000000000000000000000000000000000000000000000000000000002101c2a333d4a4e5861686f757a7f83868a8d8f8d8b8a888786859a85705b45301b0000000000000d1b28323e4b4f5a636a71787f868d948e8780786d625a4e42342616050000000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e49341f000000000000000000000000000000000000000000000000000000000000000009192b3c4d5f6d8197816c5f4d3c2b190900000000000000000000031425323b3f49494949494949494949494949494f657a8f7e6954494949494949494949494949494944413729190800000000000000091d3145566d82937e68533a2a180400071c3043546b818e79634e39293952677c917f6a543c2c190600071a2d3d566b80947e69543c2b19060000000000000000000000000000000000000000000000000f253a4f647a8f86715544311d0800000000000000000000000000000000000000000000000000000000000011263b51667b9085705b3b2a18040000000000000000000000000000000000000000000000000000000000000000000c171f2d363a474c53566065696e7175777a7c7e7f818283849a85705b45301b00000000000d1d2b39464b5c646f787f868d948e878079726a62594d483c31241608000000000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745e3a29170400000000000000000000000000000000000000000000000000000000000000000e1e30414b607586917c675a48372715010000000000000000000006141f2729343434343434343434343434343a4f657a8f7e69543e343434343434343434343434342f2c25190b00000000000000000b20364b6075898b77624c37220d0000001325364f64798e806b553e3346576e838d78624d38230e0000000f24394e64798e85705a4835200b00000000000000000000000000000000000000000000000012273c51677c91846f593727151414141414141414141414141414141414141414141414140c0a040000000013283e53687d93836e59432e190000000000000000000000000000000000000000000000000000000000000000000000040f1a212a333738454b5054585560626567696a6c6d6e7b8f85705b45301b0000000009192b3b4857616d7a848b958d867f79726b645c554d483b352b1e140600000000000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d89745846331f0a000000000000000000000000000000000000000000000000000000000000000000121e32455663798a8978625544311d110000000000000000000000030c12141f1f1f1f1f1f1f1f1f1f1f1f253a4f657a8f7e69543e291f1f1f1f1f1f1f1f1f1f1f1f1a18110800000000000000000216283851667c9185705947341f0b0000000822364a5c728787725c4a364b61768986705a4935200b0000000d22364a5c72878d78624d38230e00000000000000000000000000000000000000000000000014293e53697e93826d57422d29292929292929292929292929292929292929292929292929211f170c000000152a3f546a7f94826c57422d1702000000000000000000000000000000000000000000000000000000000000000000000000070c171f212832363a3f37444b4d4f5253555657657a8f85705b45301b0000000215273748596275828c93888078716a635b564e4a3d37342b20190e000000000000000e23384d63788d89745e49341f090000000000000000000a1f354a5f748a8c77624c37220d00000000000000000000142a3f54697f94826d57422d18000e23384d63788d89745e49341f0900000000000000000000000000091e33485e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d8a76614c36210e000000000000000000000000000000000000000000000000000000000000000000031628384a5b687e938573604b3f2f1d0d00000000000000000000000000000a0a0a0a0a0a0a0a0a0a0a10253a4f657a8f7e69543e29140a0a0a0a0a0a0a0a0a0a0a050300000000000000000000091e3245566d83937e69533b2a1805000000071b2d3e566b808f7a644f3a52677d927e69543c2b1906000000071b2d3e566b80947f69543c2c19060000000000000000000000000000000000000000000000152a3f546a7f94816c56413e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3633291c0c0000152a40556a7f95816c56412c17010000000000000000000000000000000000000000000000000000000000000000000000000000040a0c151d20252a263135383a3c3e404150657a8f85705b45301b000000081d31445562778597897e756b635b554e4a3d39362d2220190d0500000000000000000e23384d63788d89745e49341f09000000000000000000081d314455748a8c77624c37220d00000000000000000000142a3f54697f94826c57422d17000e23384d63788d89745e49341f0900000000000000000000000000021527375e73888d78634e38230e00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d927d68523c2c19060000000000000000000000000000000000000000000000000000000000000000000a1a2d3d4e606e8395806b5d4c3b2a180800000000000000000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000000000b21364b6075898b77624c37220d00000000001024394e64798e816b5447586f848a78624d38220e00000000001024394f64798e86715a4935200c0000000000000000000000000000000000000000000000152b40556a8095806b565454545454545454545454545454545454545454545454545454534c463a29170400152b40556a8095816b56412c1601000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1014141d20222527292a3a50657a8f85705b45301b0000001325364b6074859b85786960564e493d39362d24211a0f0b05000000000000000000000e23384d63788d89745e49341f090000000000000000000b20354b60758a8e78634e39230e00000000000000000000152b40556a8095816b56412c16000e23384d63788d89745e49341f0900000000000000000000000000081d31445574898c77624c37220d00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d9a846f5a4935200d000000000000000000000000000000000000000000000000000000000000000000000f1f31424c6176878d7b65594736251300000000000000000000000000000000000000000000000010253a4f657a8f7e69543e2914000000000000000000000000000000000000000000000316283951677c918570594834200b00000000000d21364a5c72878874604c61768a85705a4835200b00000000000d22364a5c72878d78634d38230f0000000000000000000000000000000000000000000000152b40556a8095806b69696969696969696969696969696969696969696969696969696969615846331f0a00152a3f556a7f94816c57422c17020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d101214263b50657b9085705a45301b0000071c304354697f948676625a4b4538352c24211a0f0d07000000000000000000000000000e23384d63788d89745e49341f000000000000000000000c21374c61768c8f7a654f3a251000000000000000000001172c41566c81947f6a553f2a15000e23384d63788d89745e49341f00000000000000000000000000000b20364b60758b8b76604b36210b00172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d888978624d3b2a180500000000000000000000000000000000000000000000000000000000000000000001141f334658647a8b8877625443301c10000000000000000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000000091e3246576e83937e69543b2b18050000000000071a2d3d556a808f7a6553687d927e69543c2b19050000000000071b2d3e566b81947f6a553d2c1a0600000000000000000000000000000000000000000000152a3f546a7f94847e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e76614c36210c0014293e54697e93826d58432d18000000000000000000000000000000000000000000000000000000000000000000000000070200000000000000000000000000000011273c51667c91846e59442f1900000b20354a607387907b6658493c3228211a0e0c07000000000000000000000000000000000e23384d63788d89745e3c2c19060000000000000000000e23384d63788d917c67513c271200000000000000000002152738586d82937e69533e2914000e23384d63788d89745e3f2e1d0d000000000000000000000000000d22374c62778c8a745645321e0900172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d8682816c5947341f11000000000000000000000000000000000000000000000000000000000000000000000417293a4b5c6a7f948472604a3e2e1b0b0000000000000000000000000000000000000000000010253a4f657a8f7e69543e2914000000000000000000000000000000000000000000000c21364b6176898b77624d37220d000000000000000f23384e63788d816c596f848b77624d37220e0000000000000010243a4f647a8f86715b4935210c0000000000000000000000000000000000000000000013283e53687d938a8989898989898989898989898989898989898989898989898989898a927d67523d28120012273c51677c91846f5a382816020000000000000000000000000000000000000000000000000000000000000000030a0c1c170b080100000000000000000000000013283d52687d92826d58432d1800000d22374d62778c87725e4c3a2b1e160a06000000000000000000000000000000000000000e23384d63788d89745a4935201403000000000000000011263c51667b9196816c563d2d1a070000000000000000091d3145567186907b65503b2610000e23384d63788d89745d4b3b2a1b0b00000000000000000000000011263b50667b9086715c3828160300172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d867a8a77624c3f2f1e0f010000000000000000000000000000000000000000000000000000000000000000000b1b2e3e4a607284947f6a5c4b3a29170400000000000000000000000000000000000000000010253a4f657a8f7e69543e29140000000000000000000000000000000000000000000317293952677c918570594834200b000000000000000c2135495b7186887461778a8570594834200b000000000000000d22374b5c72878d78634e38230f0000000000000000000000000000000000000000000011263b51667b908574747474747474747474747474747474747474747474747474747480927c67523d2712000f243a4f647a8f87725645321e09000000000000000000000000000000000000000000000000000000000000000b171e21312c201d15090000000000000000000001142637556a8095806b56412b1600000f243a4f64798f846f5a402f1c0e020000000000000000000000000500000000000000000e23384d63788d8b78624d423221100200000000000005182a3b556a7f948387715b4a36211000000000000000000b20364b60758a8b76614c36210c000e23384d63788d8c7a65594839291b0d00000000000000000000061a2c3d556a7f94826c57422d170000172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d857085826d5d4c3c2c1d150b09050b0d12100e08000000000000000000070d0f0f0f0f0f0f0f0f0f0f0f0f0f0f101c3043546177888c7a645846331f1401000000000000000000000000000000000000000010253a4f657a8f7e69543e29140000000000000000000000000000000000000000000a1e3346576e83947e69543b2b190500000000000000061a2c3d556a7f907b687e937e69533b2b180500000000000000071b2e3e566c81957f6a553d2d1a070000000000000000000000000000000000000000000e23384d63788d89745a5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e6d82907b66513b2611000c21364b61768a8a75604b36210b0000000000000000000000000000000000000000000000000000000000000b1b2933364742353127190b000000000000000000081d3144556f84927c67523d2712000010253a4f657a8f836e593a2a180400000000000000000000070d0f1a100e0900000000000e23384d63788d9a846f604f3f2e20110200000000000a1f3447596f84897a8e79634e3e2e1c0c00000000000005192b3c50657b9086715846331f0a000e23384d63788d9c8877625746392b1d12060000000000000002102135495b7085927d68523d28130000172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d85707b8d7b655a493d3127201d1820222725231c11030000000000010f1a212424242424242424242424242424242425364759657b8c8776614c42311f0f000000000000000000000000000000000000000010253a4f657a8f7e69543e29140000000000000000000000000000000000000000000c21364b61768a8d78624d38220d0000000000000000000f23384d63788d8270858a77624c37220d00000000000000000010253a4f657a8f86715b4a36210c0000000000000000000000000000000000000000000b20354a6074898d77624d4949494949494949494949494949494949494949493a596e838e79634e39240e000a1e33465772878f7a654f3a2511000000000000000000000000000000000000000000000000000000000003172939464c5c574b4437291b0f03000000000000000e20354b6074888e78634e39230e00000d22384d62788d85705947341f0e0000000000000000030f1a21243026231c11030000000e23384d63788d87887e695d4b3e2e1d15090300040c1a2b3b4c62778a837488836e5c4b3a2a1c10080100040a152035485a6d83947f6a553a291704000e23384d63788d868485756157483b2f20190e09020000030a12202f404e63798d8a76614c36210c0000172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d846f6e838978635b4b443736312b34373c3a372e211100000000000f1f2d363939393939393939393939393939393939393b4c5d6b8095836e604e3d2d1a0a0000000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000417293a52677d9285705a4835200b0000000000000000000c2035495a718689778b85705948341f0b0000000000000000000b20354a6073888e79634e39240f000000000000000000000000000000000000000000071c3043546f84927c6752392934343434343434343434343434343434343433475871868a76614b36210c0003172939576c82957f6a553f2e1c08000000000000000000000000000000000000000000000000000000000a1e33465761716c605546392d1e170b08010000070f1e2f4051667b908773604a35200b00000b20354a6074888a77614c3c2c1e120903000100070b171e2d3639453b382f21110000000e23384d63788d867b8a7b655c4b3f31271e1617171f293848596a7f917c687e8d7a6458473a2d201d1417171f2832434d62788a8a77624c37220d00000e23384d63788d867687847562594c40352c201d151717161e21303e4c5e6d8297826d5846331f0a0000172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d846f61768887796860554f4b453b484d52504b3f2e1c08000000071a2d3d4a4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e607385937e685b4a3828160300000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000a1f3346586f84947f69543c2b190500000000000000000006192c3c54697f9483937e68533b2a1805000000000000000000071c3043546c8195806b553e2d1a0700000000000000000001010000000000000000000013253653697e93836e5746331e1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f21374c61778a86715746321e09000011263c51667c9187725d4b372310000000000000000000000000000000000000000000000000000000000c21364c617686817361574a3d3329201c1417181a212d3c4c5e6f8395806a5443301c070000071c3043546b80947f6a5b493c30211e161616181a2129333d4a4e5a504c3f2f1c0900000e23384d63788d85707f897a655d4b443732282c29333a465662778a8774607486877661584a3e3531262c293338454b616f8397816c5948341f0b00000e23384d63788d857078878677665e4d493c3632282d2d293236414d5c667c908b79634e3a2917040000172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d836e586379898a7e746a6460565d596267655d4b37230e0000000d21364a5c646464646464646464646464646464646464646464646478898a79635645321e0900000000000000000000000000000000000010253a4f657a8f7e69543e291400000000000000000000000000000000000000000c21364c61768a8d78624d38230e00000000000000000000000e22384d62788b988a77614c37220d000000000000000000000013253650657a8f87725c4a36210d000000000000070c0e16160f0d08000000000000000d22374c62778a8a76614c3a2a170409090909090909090909090906192c3c51677c91816b563928160300000b20364b6075898f7a65503e2d1909000000000000000000000000000001080b080100000000000000000b21364b607583978375635b4c46393530262c2d2d363d4a5a667c908a78624d362513000000001325364c6177898a79635a4d403632282c2c2d2d3639464b5c646f655d4c38230e00000e23384d63788d856f6c81897b6a60554b4639423a464c58617484927d675663798a8476645c4f4b4437423a464c56606b7f958775614b3b2a180500000e23384d63788d856f627886887c6d635a514b4538424239464b515f677a89947f695b49351b0b000000172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d836d585b647a8793877f7975747374777c7b65503a25100000000f24394e6479797979797979797979797979797979797979797979797a80958675604b36210b00000000000000000000000000000000000010253a4f657a8f7e69543e2914000000000000000000000000000000000000000013283d52687d9285705a4935200b00000000000000000000000b2035485a708598846f5947341f0b00000000000000000000000b20354b6073878e79644e39240f00000000010f1a21242b2b25221b100200000000000b1f3447596e83947f6a5847331f130300000000000000000000000e2135495b6e838f7a644f3a250f000000091d3145566b8096826d5c4a3727150200000000000000000000000009141d201d140900000000000000091e3245566073829486796b61574f4b433642423d4a4e5b637888947f695a4834180800000000081f334758677d928778665e514b45384141423d4a4e57616a79847b65503b261000000e23384d63788d846f6072818b7f74686157585758586168768398826e5f4d5b657c8a867a6e6460555857595861677480958a7b645746331d0d0000000e23384d63788d846f5a6275839082786e66605659575759576166707c8a968273604b3d2c1a00000000172c41566c8195806a55402b15000000000000000000000000000011263b51667b90846f5a442f1a000e23384d63788d816c574a5c6476818a948e8b8988898c9186715b46311c00000a20354a5f758b8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e9494927d68533d28130000000000000000000000000000000000000f253a4f647a8a7e69533e2914000000000000000000000000000000000000000011263b50667c7e78624d3c2b1906000000000000000000000005192b3c50657b837b654f3b2a18040000000000000000000000081c30435463797e7a644f39240f00000003111f2d363940413a372e2013050000000005182a3b4e64798e8976614c4130211306000000000000000002101e30404d63788b85705c4b37220d000000021527384c62778a8c7a645544311d140900000000000000000006131926313531261914060000000000021628384555606d7e8b8b80766b6460545957585a5b636c7987998373604b3c2b19000000000004182a3a4d5f697f92887c70666056585656575a5c646b76808a8a7c67513c271200000e23384d63788d836e54606c7e8b867d76706d6c6e70767d88968475604b414c5d657a878c837a746f6d6c6e70767d8796887a645c4b392917000000000e23384d63788d836e5957616f7d898a837b75716e6c6c6e70767c85918f8172605544311f0f00000000172c41566c8194806a55402b15000000000000000000000000000011263b51667b90836f5a442f1a000c21364c61767e78624d3e4a58616c777f84888a8b8a89847d67523d281200000014293f54697f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7a644f39240f0000000000000000000000000000000000000d22374b5d647469604f3b261200000000000000000000000000000000000000000f23384c5e6669625a49351e0e000000000000000000000000000e23374b5d656d655d4b371d0c000000000000000000000000011426364a5b6369645c4a36220d00000011212e3d4a4e56564f4b3e30231301000000000d22364a5c6d8297816c5f4d3f3120190e0801000000050a151d2e3c4d5e6d82907b66513e2e1b08000000000a203448596a80958674604b42312619100a0400020003090e1a213137444b44373224140200000000000a1a2837444b616979859289817a746f6e6c6d6f7279818c928374605544311d0d0000000000000c1c30414f61697d8991857c75706d6b6b6d6f73798089928679675f4d39241000000e23384d63788d826d574a606879848e8a85838183858a928a8073605745323f4c5c6476818a8f8984828183868a928b8177645c4b3e2e1b0b000000000e23384d63788d826d57464c6068768089908a8683828283858a918f857b6c605444372614010000000010253b50657b7f7b644f3a250f00000000000000000000000000000d23384d62787f7c67513c2712000a1f3346586169625a49353a464c59626a6f73757675736f675f4d3a251000000012273b4f61696969696969696969696969696969696969696969696969696969645c4a36220d000000000000000000000000000000000000081b2e3f4b4f5f534f42321f0c0000000000000000000000000000000000000000091c2f404c50544d493c2c190000000000000000000000000000081c2e3f4b50584f4b3f2e1b000000000000000000000000000008182d3d4a4e544f4a3e2d1b070000081c2e3f4b5b636b6b645c4d41301e0a00000000071b2d3e4c617688927d675d4e42352c201c14161517192028323e4b5b667c9185705e4c382010000000000005182b3b4b60748695806b604b44372d211f17181718161e212c35414d5560554f42321f0c0000000000000a192731434f5b63727d868f8f898583818284878e91887d726056453726140000000000000000132332434f5f6778828a918a858281818284888e8f877d73635b4d41301d0a00000c21364c61767e79634d424e5b636f798186898b8b898580786b60554539282f3e4b57616c767e83888a8b8a88857e786c61594a3e2e201000000000000c21364c61767e79634d38414e58616a757b8286898b8b8a8885807a73655d4b433626190900000000000e23374b5d6569645d4b37220d00000000000000000000000000000c2035495a6269675f4d392410000417293a464c544d493c2b29333b484d545a54606160545a524d41311e0a0000000c1f32434f5454545454545454545454545454545454545454545454545454544f4a3e2d1b070000000000000000000000000000000000000010202e373a4a3e3b3224140200000000000000000000000000000000000000000011222f383b3f38352c1e0e00000000000000000000000000000011212e373b433a372e21100000000000000000000000000000000f1f2d36393f39362d20100000000e23374b5d657980807a675f4d3a25080000000000101f334758657b8b8b7b68604d493c3530262b2b2c2b3538454b5c6479898877624d402f1c020000000000000d1e324556637989937e6b60554a3e37332a2d2c2d2832363d494e5f677569604f3b27120000000000000009151d323d4a546067717a8085888a8b8b8987827c766860544538281909000000000000000005152532414d5a626c777e8388898b8b8988857f7a736860554a3d3023120100000a1f3346586169635b49353c494d5b636b7174767674706b625a4b4437281b202e39464c5861696e73757675736f69625a4c473a2d20100200000000000a1f3346586169635b4935313a474c5660666c717475767573706a6460544b3f30261809000000000000081c2e3f4b50544f4b3f2e1b08000000000000000000000000000006192c3c494d54514d40301d0a00000c1c2933363f38352b1e171f2b34373f36434b4c4b43363d3a31231301000000031425323b3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f39362d2010000000000000000000000000000000000000000002101b22253529261f14060000000000000000000000000000000000000000000004111c2326292320190e0000000000000000000000000000000003111c23252e25221b1002000000000000000000000000000000010f1a21242924221b100200000010253a50657b8b95968d7d6752362614010000000004182a3a4b5d667c8c8b7d6d635a4f4b43364040413c484d5660697a888c7b6559483422120000000000000002162838495b647b8a938073645c524c473a42414238454b515b636e7d897e69543e2914000000000000000002141f2d36434a525c646a6f7375767674726d6761574b4336281a0a00000000000000000000071523303c484d5962686e7274767674726f6a6460544b44372d1f12050000000417293a464c544d493c2c2c353d4a4e565b576160565b554d483c3127190a101b29333a474c545954606160545a544d493c342a1c10020000000000000417293a464c544d493c2c1c293338454b51575b55606160545b554f4a43362e1c1408000000000000000011212e373b3f3a372e2010000000000000000000000000000000000e1e2c35383f3c39302212000000000c171f21292320190e040d1820222a2630353635302628251e1305000000000006141f27292a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a24221b100200000000000000000000000000000000000000000000080d0f1f14120c0200000000000000000000000000000000000000000000000000090f11140d0c0600000000000000000000000000000000000000080e1018100e0800000000000000000000000000000000000000070c0e140f0d0700000000051a2f455a6f849aaaab9d88735443301c0800000000000c1c2e3f4c5e667b899282786d65605457565557595a6269747f8b8a7c665d4c3b2b180400000000000000000a1a2c3d4b5c647a8795857a6f67615859585757595660666e7983928679634e38230e000000000000000000010f182530353e4a4f555a54606160565d58524b46393026180a00000000000000000000000005131e2b353b474c53595d576160565d5a554f4a43363126190f0100000000000c1c2933363f38352c1e19212d36394139464b4b45384038352b1d150900000b171e2a33373e36434b4c4a43363f38352b1f180c0000000000000000000c1c2933363f38352c1e0e171f2731363c4237444b4c4a4336403a35302518110100000000000000000003111c23252a25221b100200000000000000000000000000000000000e1920232a27241d12040000000000040a0c140d0b06000000050b0d15141c2021201c1412100a0100000000000000030c121414141414141414141414141414141414141414141414141414140f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c31475c71869cb1b49f8a75604b35200b000000000000102130404c5d657783908b827a746f6d6b6a6c6e71787e87938679665e4c3f2f1d0d000000000000000000000f1f2e3e4b5c6476828e8f847c76726e6d6c6d6e71757c838b8b8175635b4935210c000000000000000000000008131c202d363a4036434b4b4b4538433c3632291c14080000000000000000000000000000000e19202a34373e4339464b4b4538453f3a3530251d140900000000000000000c171f21292321190e060f1a21242c2832363632282b2220190e0200000000030c171f212926303536353025292320190e0400000000000000000000000c171f21292321190e00040a151d20262d273136363530252b24201c130800000000000000000000000000080e10140f0d080000000000000000000000000000000000000000060c0d1412100a00000000000000000000000000000000000000000001080b0c0b080100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1e1b0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f14150d0b05000000000002172c42576c8197a3a49a846f5443301c08000000000000021222303f4b59626f7b848a8f89858280808183868d90877e73635b4c4030211100000000000000000000000110202e3d4a58616d7a838a918a878482818283868a918a82786c6057493d2c1a060000000000000000000000000007101b22242b263035363632282d27211e160b010000000000000000000000000000000000050d181f22282e283236363228302a25201c13080100000000000000000000040a0c140e0c06000000070c0e16161e21211e16160d0b050000000000000000040a0c14141c2021201c13140d0b060000000000000000000000000000040a0c140e0c060000000002090b1117151d2021201c13150f0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f11201d1a140a0000000000000000000000000000000000000c181f223331211f170c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21242a2a221f180d00000000000c22374c6176858e8f8678634d36261401000000000000000412212f3b484d5d656f787e83878a8b8b8b8986817b746960554a3d3022120300000000000000000000000002101f2d3a474c5c646e777d8387898b8b8b8987837d776d635a4b45392c1f0f00000000000000000000000000000000070d0f15141c2021211e1618120c0a03000000000000000000000000000000000000000000050b0d1319161e21211e161a150f0b0700000000000000000000000000000000000000000000000000000003090c0b09020000000000000000000000000000000001080b0c0b07000000000000000000000000000000000000000000000000000000000000000000000002080b0c0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e1214151617161413100c0a0300000000000000000000000000000000000004121d242635322f271c0e000000000000000000000000000000000c1c2a333748463633291c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121f2d36393f3f37342a1d0d000000000a1f3347586173797974635a4935180800000000000000000003111d2b343f4b505a62696e727476767574706c6560554b44372d1f12040000000000000000000000000000010f1c29333e4a4f5962686e717475767674726d6861594d493c32281b0f01000000000000000000000000000000000000000001080b0c0b09030000000000000000000000000000000000000000000000000000000000000003090c0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d141c202327292a2b2c2b2a2825211e160e0c0700000000000000000000000000000012222f383b4a47433a2c1c0a000000000000000000000000000004182a3a474c5d5b4c463a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031222303d4a4e54554c483b2a180500000004182a3a47556064646056493c2c190000000000000000000000000d18202e373c484d53595c56606160565b56504b44373127190f0100000000000000000000000000000000000c171f2d363b484c53585c56606160565c58534c473a352c1e160a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d11141718181714110c0b04000000000000000000000000000000000000090f1120202020202020202020202020202020202020201f1e1d1a17130e0b070000000000000000000000000000000000000000000000000000090f112017140e0500000000000000000000000000000000000000000000000000000000000000030a0c1b1d1b150b0000000000000000000000060d181f22263035393c3e404141403f3d3b36322924211a0f0a010000000000000000000000091d2f404c51605c574a3a271400000000000000000000000000000a1f334758617370615846331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002112130404c5c64696a625948341f0b000000000c1c2a37444b4e4f4b45382c1e0e0000000000000000000000000005111c232b35383e4338454b4c4b4538413b3531261d1509000000000000000000000000000000000000000004101b222b34373e4338454b4c4b4538433e37342a20190e030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e201f1c170d01000000000000000000000000000000010a10121e1f0f0d08000000000000040e0d18202226292c2d2d2c2a26221f180c0a030000000000000000000000000004121d242635353535353535353535353535353535353535353433322f2c2823201c130b0700000000000000000000000000000000000000000004121d2426352c2922160800000000000000000000000000000000000000000000000000000000000b161e21313330281d0f0000000000000000020e1a212a343736434b4e5254555657565453504b463939362d251d1307000000000000000000000f24384c5e6675726857432f1a00000000000000000000000000000c22374c6177888576614c392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110202f3f4c5e66797f7f77624c37220d00000000000c19263135393a3631271a0e00000000000000000000000000000000080e192023292e283236363632282c25201d1409010000000000000000000000000000000000000000000000070d182022282e283236363632282e28221f180c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1920233534312a1f11010000000000000000000000000005131d2527343425221b1002000000081621292b34373c3f414242413f3c37342a211e170b01000000000000000000000012222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494744423e39353025201c13080200000000000000000000000000000000000012222f383b4a413e342616050000000000000000000000000000000000000000000000000000000b1b2932364648443a2d1d0b0000000000000a151d2c353b474c5454606367696a6b6c6b6968656157564e4a3d3930211a0f01000000000000000011263b51667b8a86725c47321d00000000000000000000000000000a1f3347586d8295806b5745321e080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2e3e4b5d667c8b947f6a5948341f0b00000000000009141d202424201d150a00000000000000000000000000000000000000060b0d1419161e2121201d1517100b0801000000000000000000000000000000000000000000000000000000050b0d1319151d2021211e1618130c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c35384a49463d2f1f0d00000000000000000000000005132330393c49493a372e20100000041626343d3b484d51545657575654514c473b3633291d1509000000000000000000091d2f404c5160606060606060606060606060606060606060605f5e5c5a57534e4a43363530251d150a00000000000000000000000000000000091d2f404c516056514434220e000000000000000000000000000000000000000000000000000003162939464b5b5d584b3a281500000000000b1a28323d494e5962697074787c7e7f8081807f7d7b76716c635b524d41362d1f14060000000000000011263b51667b9087725c47321d000000000000000000000000000004182a3a4e64798e8975604b36251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2d3d4a5c657b8b96806b61503b2a18050000000000000001080b0f0f0b09020000000000000000000000000000000000000000000000000002090b0c0b09020000000000000000000000000000000000000000000000000000000000000000000000000002090b0c0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c495e605e5a4d3d2a17030000000000000000000004122330414d525e5f4f4b3f2e1b08000e2134445156596266696c6d6d6c69666159544c46393127190d00000000000000000f24384c5e6675757575757575757575757575757575757575757473726f6c68636054504a433631271a120400000000000000000000000000000f24384c5e66756c62513e291400000000000000000000000000000000000000000000000000010f1e324657617072695844301b000000000b1b2938454b5b636e777e85898e908d8c8b8a8b8c8e908a86817970675f4e4a3d3124150700000000000011263b51667b9087725c47321d0000000000000000000000000000000c21364a5c6f84937e685443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3c4a5b647a8a97816c625143331d0d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a7075746b5a46311c0800000000000000000004122330414d5f677374645d4b37220d0014293d51626b72777b7e818282817f7b77716961574b44372b1d0e0000000000000011263b51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888784817d79746c6560544b45382f1f170b0000000000000000000000000011263b51667c8a816c56412c17010000000000000000000000000000000000000000000000000f1f31414b61758587725d48331d0000000919293a4656606b79838a9189837f7b787775757577797c81868d8e857c70635b4e4233251505000000000011263b51667b9087725c47321d000000000000000000000000000000071a2d3d51667b908673604a35200f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2b3b495a637989988272604b44342515000000000000000000000000000000000002080b0f12141414120f0b090200000000000000050706040000000000000000000000000000000000000000000000000000000000050b0d10121516171817171614110f0b0902000000000000000000000000000000000000000000000000000000000000000001080b0e12151617181715130f0b0801000000000000000000000000000000000e23384d63788a89745e49341f09000000000000000004122230414d5f677d898a7a644f3a250f00162c41566b80878c91928f8e8e9092918c867e76696055483b2b1e0e00000000000011263b51667b908b8485858585858585858585858585858585858687888b8e938e88817a736860564c4033291b0f01000000000000000000000011263b51667b90816c56412c170100000000000000000000000000000000000000000000000a1a2c3d4e606d829887725d48331d00000215273746586174818b90857c766e6a6663616056606263676b70787f8891847968605043332313000000000011263b51667b9087725c47321d000000000000000000000000000000000f20354a607386907b66503d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b293a485962788899837360544330261607000000000000000000000000000001080b151d202427292a292724201d150b080200000a131a1c1b1912090000000000000000000000000000000000000000000000050b0d13181f2225282a2b2c2d2d2c2b292724201d15100b09020000000000000000000000000000000000000000000000000001080b141c2023272a2b2c2d2c2b2824201d15090900000000000000000000000000000e23384d63788d89745e49341f090000000000000004122230404d5f677d8c8a7b655d4b37220d001b30465b70858a85817c7a79797a7d81868e94897f736259483c2b1b0b000000000011263b51667b908672707070707070707070707070707070707070717376797e8389918f867d74665e4c463a2d1f10030000000000000000000011263b51667b90816c56412c17010000000000000000000000000000000000000000000003162838495b687d929d88725d48331d0000081d31445561768496877c7067615755514d4c4b454b4c4e52565a636a757f8a8b7e6a615041301d0c0000000011263b51667b9087725c47321d00000000000000000000000000000000071c304354687e93846f5b4935210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000a1a283947586277879a847460554436261408000000000000000000000000000009151d20273136393c3e3f3e3d3a363228201d15090d1b272f31302d261a0c0000000000000000000000000000000000000001080d181f22282a34373a3d3f4141424241403e3c3936322826201d150a070000000000000000000000000000000000000000000008141c20263035383c3f40424241403d39353127241d12070000000000000000000000000e23384d63788d89745e49341f0900000000000004122230404d5e677d8c8a7b655d4b3f2e1b08000c21364c617676706b6765636465686c7179828c948577625a48392917030000000011263b51667b9087725c5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5b5c576164696e757c848e92877c6e61584a3d2e21100200000000000000000011263b51667b90816c56412c1701000000000000000000000000000000000000000000000e1e32455663798a8b8a88725d48331d00031729394b6074849a8476665e524b46393b383736323637393d3c494d57616a7a87937f6a5f4d3b2a180400000011263b51667b9087725c47321d00000000000000000000000000000000001325364b6075888b79634e3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1013141516151413110d0b070000000919283846576176869b8575615645372718080000000000000000000000000002121927313537444b4e51535453524f4b4538363127191b2b3943474542382a1a09000000000000000000000000000000000209151d202a34373e3b474c4f525556575757565654514e4b45383b363127221b100900000000000000000000000000000000000008131c26303536434b4e51545657575755534f4b4437382f201c1308000000000000000000000e23384d63788d89745e49341f0900000000000412222f404c5e667d8c8b7b655d4b3f2e201000000a1e33465761605756524f4e4f5052575b636d7a869b8778625746331e110000000011263b51667b9087725c474545454545454545454545454545454639464c4f535660666f798390908376645c4b3f2e211000000000000000000011263b51667b90816c56412c17010000000000000000000000000000000000000000000e1e30414b607586947f8b88725d48331d000a1e3346576a7f94857461584c40363228262322201d202224272c3539464b5c647686917d675947341f0900000011263b51667b9087725c47321d0000000000000000000000000000000000081e3245566a8095816c5847331f090000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c13181f2225282a2a2b2b2a282622201c130e0818263745566175859b8676615746382819090000000000000000000000000009151d3037444b525560646769696967646056524b4437301f3949565c5b554838261200000000000000000000000000000009151d2731353b474c5358596265676a6b6c6d6c6c6b696664605656504b4538362d231c12080000000000000000000000000000000d18253036434b51546063676a6b6c6d6c6a68646055514c40353025180d0000000000000000000e23384d63788d89745e49341f09000000000412222f404c5e667c8c8b7b655d4b3f2e211002000003172939464c4b45393d3a39393b3d3d4a4e5c6476849b8675614c402f1c0900000011263b51667b9087725c47323030303030303030303030303030312933363938454b515b636e7c8798877a655d4b3f2e1e0e000000000000000011263b51667b90816c56412c170100000000000000000000000000000000000000000a1a2c3c4d5f6c819784728a88725d48331d000c21364c6176898b796356473a2f211e16110e0c0b090b0d0e12192029323d4a586379898977614c37271501000011263b51667b9087725c47321d0000000000000000000000000000000000021628384c61778a8a76614c372715010000000000000000000000000000000000000000000000000000000000000000000000000000080b171e21282a34373a3d3f4041403f3e3b383530252321253644556074849a877762584739291a0a0000000000000000000000000009192731404d5560676f75797c7e7f7e7c79756f6760554d413436566871706655422d1900000000000000000000000000031219273137444b525962686e72777a7d7f8081828281807e7c7975716c6560564e4a3e382f221b10040000000000000000000000010f1d2b36434a5460666d74787c7f80818281807d79756e665e514a43362b1d1103000000000000000e23384d63788d89745e49341f090000000311222f404c5e667c8c8b7c655d4b3f2e211103000000000b1b2933363632282725242425282d363e4a5861758698826e5e4c38231100000011263b51667b9087725c47321d1b1b1b1b1b1b1b1b1b1b1b1b1b1b171e21242832363d4a4e5e66768397897b655d4b3c2c1a0a0000000000000011263b51667b90816c56412c17010000000000000000000000000000000000000002152738495a677d918877758a88725d48331d0012273d52677d92836e5b49382a1c120903000000000000000000060b161e2d3a495b687d92806b5544311d08000011263b51667b9087725c47321d0000000000000000000000000000000000000a1f3447596d82947f6a5544311d0800000000000000000000000000000000000000000000000000000000000000000000000007101b222933363d3b484c4f52545556555453504d4a433638353043546073829987786259483a2a1b0b0000000000000000000000000009192737444b5e66747c84898e91908e8e908f8a847d74675f4c484354718684705b45301b0000000000000000000000000a161e2f37444b55606770777e83888c8f92908f8e8d8d8e8f91918e8a86817b756c645c504c40372e1f180c000000000000000000000f1f2d3c48546068737c82898d91908f8d8c8d8f928e89837b71676054483b2f2213050000000000000e23384d63788d89745e49341f0900000311222f404c5e667c8b8b7c665e4c3f2f2111030000000000000b171e21211e1612100e0f10131a212d3a465763798b907b66503f2e1c08000011263b51667b9087725c47321d0705050505050505050505050500030a0c0f151d202d36404c58617381978b7b655a493827150200000000000011263b51667b90816c56412c1701000000000000000000000000000000000000000d1d3145566378898c7b65758a88725d48331d00172c41576c81927d68523d2c1a0c0000000000000000000000000000030f1c2c3c4b6074888874604b35200b000011263b51667b9087725c47321d00000000000000000000000000000000000004182a3b4e63798b8774604b3520100000000000000000000000000000000000000000000000000000000000000000000003101b222e3739464c525859626568696a6b6a696866626054544e49434a607281978879635a483b2a1c0c00000000000000000000000000021527374455606d7c87928f87817d7a79797a7d828890877d6f62594b60758a85705b45301b00000000000000000000000d1a2832404c556069747c858a938d8984807d7b79797878797a7c7e82868a919089817970665e4f4b3f342a1c0c00000000000000000e1e2d3d4a5a62727d87919289837f7b797877787a7c81868e90867c7262594c403023130300000000000e23384d63788d89745e49341f09000311212f404c5e667c8b8b7c665e4c402f2111030000000000000000030a0c0b090300000000000007101b29394a5b6b809685715d4b372308000011263b51667b9087725c47321d07000000000000000000000000000000000002090f1a212f3a4755607281978978635645311d0f00000000000011263b51667b90816c56412c17010000000000000000000000000000000000000d1d2f404b60748595806b5d758a88725d48331d00192e43596e838f7a654f3a251000000000000000000000000000000000000e1d3144556d838f79644f3a240f000011263b51667b9087725c47321d000000000000000000000000000000000000000c2136495b6f84917c67523e2e1b0700000000000000000000000000000000000000000000000000000000000000000b171e2e363e4b4f5761686d72777a7d7f7f80807f7d7b77746f69635b52616b8096897a645b493c2b1d0d00000000000000000000000000000a1d3144556073829191837a726c6865646465686c737b84918377645c61768b85705b45301b000000000000000000010f1d2b38454b5e66747e88928e857f78736f6b686664636263636467696d71767b8289928e857b70655d4c473a2a1c0c0000000000000a1a2b3c4a5b6378849291857c756e69666463626364676c7179828c918477665e4d4130211100000000000e23384d63788d89745e49341f090311212f3f4c5e667c8b8c7c665e4c402f21110300000000000000000000000000000000000000000000000b1b2d3d4c61778a8f7a6550362614010011263b51667b9087725c47321d07000000000000000000000000000000000000000007121c2a3744546073839a8674604b3d2d1a07000000000011263b51667b90816c56412c1701000000000000000000000000000000000009192b3c4c5e6c81968473605f758a88725d48331d00182d42586d828f7a65503a2510000000000000000000000000000000000002152737556a7f927d67523d2812000011263b51667b9087725c47321d00000000000000000000000000000000000000061a2c3d50657b9085705c4a36220d000000000000000000000000000000000000000000000000000000000000010f1b29333e4a4f5c646e767d83888c8f92929190919293908d89847e7870686a7f958a7b655c4a3d2c1e0e00000000000000000000000000000a1a30414b60738397897c6e645c5752504f4e50535460656f7c88887a6461778c85705b45301b0000000000000000000f1f2c3b4856606c7c86938a8279706a635b595653504f4e4d4d4e4f5154575761666d757d869090857a6d6159473a2a17040000000002152838485a6379889a887c7067605654504f4d4d4d4f52565b636d7a8496887c675f4d3f2e1c0c000000000e23384d63788d89745e49341f0311212f3f4c5d667c8b8c7c665e4c402f221203000000000000000000000000000000000000000000000000000f1f3447596d8297826d5443301c080011263b51667b9087725c47321d07000000000000000000000000000000000000000000000c192636445561768796806b5c4a362110000000000011263b51667b90816c56412c17010000000000000000000000000000000001142637485a667c91897862555f758a88725d48331d00152a3f556a7f927d68533e2e1c0d000000000000000000000000010003090d182838556a7f937d68533e2813000011263b51667b9087725c47321d00000000000000000000000000000000000000000f23384c5d71868f7a644f3b2b18050000000000000000000000000000000000000000000000000000000004121f2d39464c5c64707a838a92908a85827f7d7c7b7c7c7e8184898e948d857d7e948b7c655d4b3e2d1f0f0000000000000000000000000000031628384d5f6d82978879665e4f4a3e3d3b39393b36434a505e6677848a7a64778d85705b45301b00000000000000000e1e2c3d4959627581909083786d635b544e493d403e3b3a393838393a3c3e39464b51566067717b85918f8277615847331f0a00000000091d3245566278889a8477675f524b45383b3a3837383a3d3d4a4e5c647380938c7d675d4b3a2a18040000000e23384d63788d89745e49341f11212e3f4b5d657c8b8c7d675e4d402f221204000000000000000000000000000000000000000000000000000004182a3b51667b908974604b35200b0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000091827374658667b908c79644e3f2e1b080000000011263b51667b90816c56412c1701000000000000000000000000000000000d1d314455627889917c665a485f758a88725d48331d000f24394f64798e846f5c4b3a2a1d120702090b0d0e0f101112141618161e212b3645566d82917c67513c2712000011263b51667b9087725c47321d00000000000000000000000000000000000000000b20354b60748798826d594834200a0000000000000000000000000000000000000000000000000000000512222f3d4a57616c7a848f9389827b76706d6a6867666667696c6f74797f868f9294917c675e4f42302518090000000000000000000000000000091e324556677d918b7a645b4c40362e2825242425253035404c596174828979788d85705b45301b000000000000000c1c2b3c495b63788697887c6e625a4e4a3d38352c2b2826242423232425272929333638454b525e66717c87988976614c37210c00000006192b3c4b6074859a847461594d41363127262423222325272d363e4a54606b7e938c7b655847331f0f0000000e23384d63788d89745e49341f212e3f4b5d657b8b8c7d675f4d4030221204000000000000000000000000000000000000000000000000000000000c21364b60768a8f79644f3a240f0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000919293a4c5e6e8398846f5d4b37220d0000000011263b51667b90816c56412c17010000000000000000000000000000000d1d2f3f4b60738496816c5e4c3c5f758a88725d48331d000d22364a5c70848f7a6458483b2f221b161e212223242526282a2b2d2832363b48546075888d78624d38230d000011263b51667b9087725c47321d00000000000000000000000000000000000000071b2d3e51667c91998a77624d382816030000000000000000000000000000000000000000000000000003122330404c5b6376818c94877e756d6560575855525151515254565460636a717a848f9b857969604a4336271909000000000000000000000000000b21364b607587947e695c4a3d2f221b13100f0f10131c202f3b4756607283877b8f85705b45301b0000000000000417293a485a637987998477665e4d493c362d23211a1613110f0e0d0e0e0f1214171e21283236404c505f6775888c77624d37220d0000000b2035485a6b809587766156473a30201d15110f0e0d0e0f121a212d36434b606b80958876614c3d2d1a0700000e23384d63788d89745e4934212e3f4b5d657b8b8c7d675f4d41302212040000000000000000000000000000000000000000000000000000000000091e3245577085937e68533e29130011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000c1c2f404e63798b8f7a654f3b2b180500000011263b51667b90816c56412c1701000000000000000000000000000008182a3b4c5d6b80958574604b404a5f758a88725d48331d00071b2d3e4e63798a877662594c40372e28323637393a3b3c3d3f414238454b50596272829784705a4935200c000011263b51667b9087725c47321d000000000000000000000000000000000000000d22364a5c7085998395806b5645321e0900000000000000000000000000000000000000000000000000112130414d5e667987978a7e74686056504b45393f3d3c3b3c3d3e36434a4e545d646f7a86958a7e6c605444372715010000000000000000000000071a2d3d53697e938774604b3e2d1f120700000000000007121d2a384554607485879a85705b45301b0000000000000c1f33475862788899837462594c40352b211a0f0c060000000000000000000000030a0c161e212f38414d5773888c77624d37220d00000417293a4d62788b8d7b655846382a1c130902000000000000000710182630424b60728498826d5b4a36210900000e23384d63788d89745e49342e3f4b5d657b8a8d7d675f4d413023120400000000000000000000000000000000000000000000000000000000000003162839576d8297816c57422c170011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000112135495b6d8398836e594834200b00000011263b51667b90816c56412c170100000000000000000000000000011426364759657b8c8978635645314a5f758a88725d48331d0000102135495b657c8a8577665e4f4b3e38454b4d4e4f505152545658595660666c7783978979634e3c2c1906000011263b51667b9087725c47321d00000000000000000000000000000000000005182a3b4e64798e89778a8875604b3621110000000000000000000000000000000000000000000000000e1f2f3f4d5f677c8a9784786960554b45383632282a282726272729253035393f4b4f5c6473808d938072605544311d1302000000000000000000000c21364a5b7286937d685544312010010000000000000000000c1a273645566278899a85705b45301b00000000000c1c31414c6176869983736056483b2f20190e0700000000000000000000000000000000000209111c2330395d73888c77624d37220d00000a1f3346586d8297826e5d4b3a291a0c00000000000000000000000008141c30435463798b8c79634e37271502000e23384d63788d89745e492e3f4b5d657b8a8d7d685f4d41302312040000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94846f59442f1a0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000061a2c3d50657a8f8b77624d37220d00000011263b51667b90816c56412c1701000000000000000000000000000c1c304354627788917d675a4938274a5f758a88725d48331d0000061a2c3d4c5e657a87887c6f645c595c5660626364656667696b6d6f72767b828a948779635b49351e0e00000011263b51667b9087725c47321d0000000000000000000000000000000000000b1f3448596d8296816d82927d68533f2f1c080000000000000000000000000000000000000000000009192c3d4c5d677d8c958174625a4b44373228211e1615131211111214131c20242e373e4b55606a7c8a968273604b42312010000000000000000000000e24394e63798e8976614b3727150200000000000000000000000a182838485a687e9385705b45301b0000000004172a3a4e606e83998575615545382b1d120600000000000000000000000000000000000000000000091e33485d73888c77624d37220d00000c21364c61768a8c78634e3f2e1c0c000000000000000000000000000001142636495b6d8297826d5544311d08000e23384d63788d89745e493e4b5d657b8a8d7e685f4e413023130500000000000000000000000000000000000000000000000000000000000000000013283d52687d9286715c46311c0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000f23374b5d7287937e69543a291704000011263b51667b90816c56412c17010000000000000000000000000c1c2e3f4b60728497816c5f4d3c2c354a5f758a88725d48331d0000000f1f2f404c5c6476808a847a716e7174767778797a7b7d7f808284878a9090887f75635b4a3d2c1a0000000011263b51667b9087725c47321d0000000000000000000000000000000000021628384c62778a8b78647a8e86715d4c38230e00000000000000000000000000000000000000000001152737495b657b8c95806c6055483c31271d150b09030000000000000000070b101b222e37444b5e667a8997816c604e3e2e1909000000000000000000152a3f556a7f94836e5746321909000000000000000000000000000a1a2b3c51667b9085705b45301b000000000a1f334758687d928a7863574637281a0d000000000000000000000000000000000000000000000000081e33485d73888c77624d37220d000215283853687d92846f5b493521110000000000000000000000000000000008182c3d4f647a8f8975604b36200b000e23384d63788d89745e3e4b5c657b8a8d7e68604e41312313050000000000000000000000000000000000000000000000000000000000000000000012273c51677c9187725d47321d0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000081c2e3f566b809585705846331f0a000011263b51667b90816c56412c1701000000000000000000000004172a3a4b5d6a7f948675604b41301e354a5f758a88725d48331d0000000111212f3e4b57616b777f89868386898b8c8e8f9091908f8d8b898784807a746a60564a3d2d1f0f0000000011263b51667b9087725c47321d0000000000000000000000000000000000091e3245566a8095836e5c7085907b65503c2c19060000000000000000000000000000000000000000081d31445563798996806b624b44372b1d15090200000000000000000000000000000810192731404c5c647a8b937e685c4a372614010000000000000004182a3a5a6f84937e695339281600000000000000000000000000000011263b51667b9085705b45301b00000005182b3b4c617689937e685a493929190a00000000000000000000000000000000000000000000000000081e33485d73888c77624d37220d00091d3245566e83927d68523d2c1a0300000000000000000000000000000000000f20354a6074888f7a65503a2510000e23384d63788d89745e4d5c647b8a937e68604e4231231305000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9088735d48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000011253a4f657a8f8b76614c36210c000011263b51667b90816c56412c17010000000000000000000002101f334758657b8c8a79635645322320354a5f758a88725d48331d0000000003111f34475961737f8797908b878482807f7e7d7c7b79787674726f6b6560544b45382d1f0f010000000011263b51667b9087725c47321d00000000000000000000000000000000000b21364b6075888f7a6552677c91846f5b4935210b0000000000000000000000000000000000000005192b3c4b607385998372604b443127190e0100000000000000000000000000000000000009151d2f3e4a5c677d928b7a645544311d0c000000000000000a1f33475873888e79644f39240f00000000000000000000000000000011263b51667b9085705b45301b0000000b203448596c81968572604a3c2c1b0b0000000000000000000000000000000000000000000000000000081e33485d73888c77624d37220d000b20364b6075898c77614c37220e000000000000000000000000000000000000071c3043546d83937e69543e2914000e23384d63788d89746062687a8a937e69604e423124130500000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000b20354b60758a907b65503b2610000011263b51667b90816c56412c170100000000000000000000102032434c617687927d685b4938281620354a5f758a88725d48331d0000000005192b3c4c617784948a827b76726f6d6b6a69686766646261575d5955504b433632281a0f01000000000011263b51667b9087725c47321d00000000000000000000000000000000081c2f3f53687d9286715d4b6074878b78634d3a2917040000000000000000000000000000000000000b2035485a6a7f958876615443301d15090000000000000000000000000000000000000000000111202e3e4d5f6d82978673604b3a2917040000000000000c22374c61778c8a76604b36210b00000000000000000000000000000011263b51667b9085705b45301b0000021527384d62778a907b655443301e0e000000000000000000000000000000000000000000000000000000081e33485d73888c77624d37220d000c21364b6176807e685947341f0a00000000000000000000000000000000000000132536566b8095816b56412c16000e23384d63788d897476777e8a8d7e69604f42312413060000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000081d3144557085947f6a553f2a15000011263b51667b90816c56412c17010000000000000000000b1b2d3e4f616e8398826d604e3d2c1a0a20354a5f758a88725d48331d000000000b2034485a6f839984786c6560575a585655545352504f4d4b463944403b3530261e160a0000000000000011263b51667b9087725c47321d000000000000000000000000000000000e23384b5d7186927d685244556a7f94816c5846331f09000000000000000000000000000000000006192c3c4d62788b917c67584736261402000000000000000000000000000000000000000000000002102030414c617688937e695847331f090000000000000f243a4f647a8f88735645321e0900000000000000000000000000000011263b51667b9085705b45301b0000091d3145566b809585705d4b36251300000000000000000000000000000000000000000000000000000000081e33485d73888c77624d37220d000a1e334657616b68604e3a2a18040000000000000000000000000000000000000014293e54697e93826d57422d18000e23384d63788d9e8b8b8c93887c69604f4232241406000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000001152737576c8197836e59432e19000011263b51667b90816c56412c17010000000000000000031729394a5c697e948675614b41311f0f0020354a5f758a88725d48331d000000000d22384d62778d8875625a504b453942413f3e3d3c3b3a383632282f2b25201c140803000000000000000011263b51667b9087725c47321d000000000000000000000000000000061a2c3d50657b908875604b374c61768a8976614c37261401000000000000000000000000000000000c2035495a6d8298846f5f4d3a2a18080000000000000000000000000000000000000000000000000002131f334658687d928976614c37271501000000000011263c51667c9186705b3828160200000000000000000000000000000011263b51667b9085705b45301b00000b20364b607588927d67523f2f180800000000000000000000000000000000000000000000000000000000081e33485d73888c77624d37220d0003172939464b56534e42311c0c0000000000000000000000000000000000000000152a3f556a7f94816c56412c17000e23384d63788d8a7e7e80898b7e6b624b4437281a0c000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000142a3f54697f9486715b372614010011263b51667b90816c56412c170100000000000000010f1e334657647a8b8b7a645746322313010a20354a5f758a88725d48331d0000000011263b50667b90816c57483c3632282d2b2a292827262423211e161a16100b08010000000000000000000011263b51667b9087725c47321d0000000000000000000000000000000c2135495b6f8495806a56453347586c82947f695544311d08000000000000000000000000000000021628384d63788c8f7a644f40301c0c0000000000000000000000000000000000000000000000000000000417293a4b607386947f6a5544311d08000000000013283d53687d92846f59442f1a0000000000000000000000000000000011263b51667b9085705b45301b000011263b50667b908975604b3620110000000000000000000000000000000000000000000000010202020202081e33485d73888c77624d37220d00000b1b293336413e3a312414000000000000000000000000000000000000000002152838566c81947f6a553f2a15000e23384d63788d8974686b788693806d60554538291c0d0000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000012273c52677c9188735544311d080011263b51667b90816c56412c1701000000000000000f1f31424c617687937e695c4a39291605000a20354a5f758a88725d48331d0000000011263b50667b907f6a553c2b212022262829292725221f180d0b050000000000000000000000000000000011263b51667b9087725c47321d00000000000000000000000000000417293a4e63788c8a77624c382a3a4e63798e8774604b352010000000000000000000000000000000091e3245566b8196846f5c4b37221200000000000000000000000000000000000000000000000000000000000b1d314455687d928774604b35200b000000000014293e54697e93836e58432e190300000000000000000000000000000011263b51667b9085705b45301b0005192b3c576c8297836d5645321d09000000000000000000000000000000000000000001080b161818181818181e33485d73888c77624d37220d0000000b171e212b29261f14060000000000000000000000000000000000000000091d3245566f84927d67523d2812000e23384d63788d89745e5a6277859581736056473a2b1d0f01000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000010253a4f657a8f8a75604b35200b0011263b51667b90816c56412c17010000000000000b1b2d3d4e606e8298836e604e3e2d1b0b00000a20354a5f758a88725d48331d000000000c21374c61778a836e5a48382b34373b3d3e3e3c3b37332a2220190d04000000000000000000000000000011263b51667b9087725c47321d00000000000000000000000000000a1f3346586c8197826d59473421364a5b6f84917c66513e2d1b0700000000000000000000000000000b21364b607589917c67513e2e1b040000000000000000000000000000000000000000000000000000000000011426374b607589917c67513727150100000000142a3f54697f94826d58432d180300000000000000000000000000000011263b51667b9085705b45301b000b2035485a7388917c6752382815020000000000000000000000000000000000000009151d202c2d2d2d2d2d2d2d33485d73888c77624d37220d00000000030a0c1613110b020000000000000000000000000000000000000000000e20364b6075898d77624d38220d000e23384d63788d89745e49596175839783746158483b2c1f10020000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000f24394f64798e8b76614b36210c0011263b51667b90816c56412c17010000000000031628394a5b687e938776614c4231200f0000000a20354a5f758a88725d48331d000000000a1f3347586d828a786256453b484d5053545352504c473a37342b1f170c0000000000000000000000000011263b51667b9087725c47321d00000000000000000000000000011426374c6176898e79644e3b2a1a2d3d51667b9085705c4a36220d000000000000000000000000000011263c51667c918875604b36201000000000000000000000000000000000000000000000000000000000000000091e3245576c8297836e5544311d0800000000142a3f54697f94836d58432e180300000000000000000000000000000011263b51667b9085705b45301b000d22384d62788d8c77624c37220d000000000000000000000000000000000000000919273135414242424242424242485d73888c77624d37220d00000000000000010000000000000000000000000000000000000000000000000e1e2f4050667b9087725a4834200b000e23384d63788d89745e3a47576173829684766259493d2e21120400000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000e23394e63788e8c77614c37220c0011263b51667b90816c56412c170100000000000e1e32465763798b8b7a645846332414010000000a20354a5f758a88725d48331d0000000004172a3a4c627787847460575659626568696867656158564d483b33291c1002000000000000000000000011263b51667b9087725c47321d00000000000000000000000000081d314455697f9485705c4a361d0f20354a6073878e79644f3b2a180500000000000000000000000006192b3c576d8297826d5544311d08000000000000000000000000000000000000000000000000000000000000000316283951667b908975604b35200b0000000014293e53697e93846f59442f1a0000000000000000000000000000000011263b51667b9085705b45301b0012273c51677c9188735947341f0b00000000000000000000000000000000000001152737444b565757575757575757575d73888c77624d37220d00000000000000000000000000000000000000000000000000000000000007131e2c3c4c5e6f83937e69543c2b1905000e23384d63788d89745e49394655607280948678635b4b3f2f221306000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000d23384d62788d8d77624d38220d0011263b51667b90816c56412c1701000000000e1f30414b617586947f695c4b3a291706000000000a20354a5f758a88725d48331d00000000000c1f3447596379898375666b72777b7d7e7e7c7a77716b62594c473a2e2010020000000000000000000011263b51667b9087725c47321d000000000000000000000000000b20354b607487917c66513e2d1b071c304354697e93826d5948341f0a0000000000000000000000000b2035485a7388917c67513727150200000000000000000000000000000000000000000000000000000000000000000b21364b60758a8f7a65503a25100000000013283d52687d9285705b3726140100000000000000000000000000000011263b51667b9085705b45301b00162b40556b8095846e593b2a1805000000000000000000000000000000000000081d314455606b6d6d6d6d6d6d6d6d6d6d73888c77624d37220d0000000000000000000000000000000000000000000000020200040a0c131c20303c495a657b908875604b36210d00000e23384d63788d89745e4928374454606b7f8d8779655d4c40312415010000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000e23394e63788e8c77614c37220c0011263b51667b90816c56412c17010000000a1a2c3d4d5f6d82978372604a3e2e1c0c00000000000a20354a5f758a88725d48331d000000000005182a3b4a5b637985877b81878c8f8d8c8c8d8f8a8680786d61584b3e2e20100000000000000000000011263b51667b9087725c47321d000000000000000000000000071b2e3e52677c918774604b352010001325364b6176898a77624c3828150200000000000000000000000d23384d62788d8c77614c37220c000000000000000000000000000000000000000000000000000000000000000000091e324556708595806b55402b160000000011263b50667b9087715544311d0800000000000000000000000000000011263b51667b9085705b45301b00182d43586d8296816b56412c16000000000000000000000000000000000000000b20354b60738082828282828282828282828a8c77624d37220d0000000000000000000000000000000000000000050b0d171819171f21253035414d5a627888917c675745321e0900000e23384d63788d89745e49342736434a61697d8c897b665e4e42331c140800000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000f24394f64798e8b76614b36210c0011263b51667b90816c56412c1701000002152838495b677d9288776154433020100000000000000a20354a5f758a88725d48331d0000000000000e1e2f3f4c5d657789918c857f7a787676787a7f848b8a8276645c4b3e2d1d0d00000000000000000011263b51667b9087725c47321d0000000000000000000000000d22364a5c7085947e695544311d0800081e3346576c8195806a5645321d09000000000000000000000012273c52677c9187725847331f0a00000000000000000000000000000000000000000000000000000000000000000003162838566b8196846e59382816020000000e23384e63798d8975604b35200b00000000000000000000000000000011263b51667b9085705b45301b001b30455b7085937e69543e2914000000000000000000000000000000000000000d22384d62788c8c8c8c8c8c8c8c8c8c8c8c8c8c78624d37220d000000000000000000000000000000000000000d181f222c2d2e29333736434a505f67788796806b5f4d3928160300000e23384d63788d89745e4934182530434f5f677c8a8b7c686050433026180a000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000010253a50657a8f8a75604b35200b0011263b51667b90816c56412c170100000e1d32455663798a8c7b655947362513020000000000000a20354a5f758a88725d48331d000000000006192b3c4c5d657b89928379706a6563616163656a6f798291877a645c4a3b2b1805000000000000000011263b51667b9087725c47321d000000000000000000000005192b3b4f647a8f8976614c3726140100031729394d63788b8875604b3620110000000000000000000000162b40556b8095836e593a2a18040000000000000000000000000000000000000000000000000000000000000000000012283d52677d9287725645321e090000000b20354b60738a8e79634e39230e00000000000000000000000000000011263b51667b9085705b45301b001d32475d7287917c67513c2712000000000000000000000000000000000000000b20354b6073787777777777777777777777777873604b35200b0000000000000000000000000000000000000d1d2a34374142433a474c51546066707d89928072604a40301b0a0000000e23384d63788d89745e49341f131c32414d5e667a898c7e6a614b4336281a0b0000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000012283d52677d9288735443301c080011263b51667b90816c56412c1701000e1e30404b60748595806a5d4b3a2a1808000000000000000a20354a5f758a88725d48331d00000000000b2035485a657b8b8a7d6e635b55504d4c4c4d4f545b636d7c8a8a7a64594834200f000000000000000011263b51667b9087725c47321d00000000000000000000000b203448596e8396816c58463319090000000b2035495a6e83927d68523f2e1c0800000000000000000000182e43586d8396816b56412c16000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f8a76604b36210b000000081d3144557085927d685238281502000000000000000000000000000011263b51667b9085705b45301b001e33485e7388907b66503b261100000000000000000000000000000000000000081d314455606262626262626262626262626262605544311d08000000000000000000000000000000000005182a3b484c5757595b5861666b737b8591897e6b605443302212000000000e23384d63788d89745e49341f00142330404c5c647987927f6c60544538291b0d00000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000152a3f546a7f9485705b362614010011263b51667b90816c56412c170009192b3c4d5e6c81978472604b3f2e1c0c00000000000000000a20354a5f758a88725d48331d00000000081b2e3e4d6278898c7c675f4e4a3d3a383737383a3d494e5f677b8b8877624c3d2d1a070000000000000011263b51667b9087725c47321d00000000000000000000031628394d62788b8c78634d3a29170000000006192c3c50657b9086715d4b37230e000000000000000000001b30455b7085937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000d22384d62778d8d78634e38230e00000001142637566b8095826c5645321d09000000000000000000000000000011263b51667b9085705b45301b001f34495e74898f7a65503a25100000000000000000000000000000000000000001142637444b4d4d4d4d4d4d4d4d4d4d4d4d4d4d4b443726140100000000000000000000000000000000000b1f344859626c6d6e7073767b8188908a827768604a4336251304000000000e23384d63788d89745e49341f090513222f3e4a5b6377869481726056463a2b1d0e000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000003162838576d8297836d58432e18000011263b51667b90816c56412c1702152737485a667c9188776254433021110000000000000000000a20354a5f758a88725d48331d000000000d22374b5c6f84947f695d4d41362d2523212123252c35404d5d687e93826d5b4a36210c0000000000000011263b51667b9087725c47321d00000000000000000000091e3245576b8095846f5b49351b0b00000000000e23374b5d71868f7b65503c2c19060000000000000000001d32475d7287917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000b20364b60758b8f79644f3a240f0000000010253a4f657a8f8975604b362012000000000000000000000000000011263b51667b9085705b45301b001f344a5f74898f7a644f3a250f00000000000000000000000000000000000000000919263135373737373737373737373737373735312619090000000000000000000000000000000000000d22374c627781828385888c908a867e776d61594e423025180800000000000e23384d63788d89745e49341f09000411202e3d49596276849682746158483b2c1f100200000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000091e3245567186947e69543f2914000011263b51667b90816c56412c170d1d3144556278898d7c665948362614030000000000000000000a20354a5f758a88725d48331d000000000f253a4f647a8f8774604b3f30211a100e0c0c0e101a21303f4b6073868b79634e39240e0000000000000011263b51667b9087725c47321d000000000000000000001325364b607589907b65503c2c19000000000000081c2f3f53687d92836e5a4935200b0000000000000000001e33485e7388907b66503b26110000000000000000000000000000000000000000000000000000000000000000000000081d314455748a907a65503b2510000000000b20354a607387917c6751402f1b0a0000000000000000000000000011263b51667b9085705b45301b001e34495e7389907a65503b251000000000000000000000000000000000000000000009141d202222222222222222222222222222201d1409000000000000000000000000000000000000000e23384e63798b8b8d9095898076706961584c473a311c13080000000000000e23384d63788d89745e49341f09000002101f2c3b48586174839784766259493d2e201000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000b21364b60768a8f7a654f3a2510000011263b51667b90816c56412c171d2f404b60748596806b5e4c3b2b1808000000000000000000000a20354a5f758a88725d48331d00000005192b3c586d82937e6855443121130700000000000006121c304354687d92806b563a2a180400000000000011263b51667b9087725c47321d000000000000000000071c304354687e9386715d4b381e0e000000000000001121364b6075888b78624d3929170300000000000000001f34495e74898f7a65503a25100000000000000000000000000000000000000000000000000000000000000000000000021527495e7489917b66513c261100000000071c304354697f94846f5e4c3928160300000000000000000000000316283951667b9085705b45301b001e33485d7388907b66513b26110000000000000000000000000000000000000000000001080b0d0d0d0d0d0d0d0d0d0d0d0d0d0d0b080100000000000000000000000000000000000000000c2135495b637476787b80858a8981796d61584b3f302212020000000000000e23384d63788d89745e49341f09000000000e1d2b3a4656607281958577635b4a3e2e1909000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000114263750667b908a76604b36210b000011263b51667b90816c56412c192b3b4c5e6b80968573604b402f1d0d00000000000000000000000a20354a5f758a88725d48331d0000000b2034485a73888d77624d372715030000000000000000011426364c62778a87725847331f0a00000000000011263b51667b9087725c47321d0000000000000000000b20354a607386927d68533f2f1c0000000000000000091e3245566b8095816c5746331e0800000000000000001f344a5f74898f7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000000001e33495e7388927c67523d271200000000001325364c617689917c665745321e150900000000000000000009151e324657677c9185705b45301b001d32475c7287917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e586163666b70777f888a8276655d4d403020100000000000000e23384d63788d89745e49341f0900000000000d1b29384554606c7f938779645c4a372715010000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000081d3144556c8197846e5745321e09000011263b51667b90816c56412c26374859667c8d89786255443122110000000000000000000000000a20354a5f758a88725d48331d0000000d22384d62778d87725a4834190900000000000000000000081f34485971878c77614c37220c00000000000011263b51667b9087725c47321d0000000000000000071a2d3d51667b908875604b3621110000000000000000021628384d62778b8976614b36261401000000000000001e34495e7389907a65503b25100000000000000000000000000000000000000000000000000000000000000000000000021628385f7489917c66513c27110000000000081f334658697e938775604b43312719100a0300010002090f192731444b6175869a85705b45301b001a30455a6f85947f69543f2a140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c353a464c4e515659616a747f8b887b665e4d3e2d1c0c00000000000e23384d63788d89745e49341f090000000000000b1a2836434b616a7e8a887a645544311d080000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000b20354b607488927d685339281603000011263b51667b90816c56412c314455627789917c665a48372715040000000000000000000000000a20354a5f758a88725d48331d00000010253a4f657a8f85705a3c2b19000000000000000000000005182a3b5a6f858e79634e39240e00000000000011263b51667b9087725c47321d00000000000000000c21364a5b6f8495806b5645321e090000000000000000000a203448596e83937e695443301c08000000000000001e33485d7388907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000091e324556758a907b66503b261100000000000417293a4b60738497816c614b44372e211e16171617161e212d37444b626d828a9a85705b45301b00182d42586d8296816c57412c17000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21293336383b3b474c55606a79878b7c665c4a3a291704000000000e23384d63788d89745e49341f09000000000000000a18263043506068797e7e74604b35200b0000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000081b2e3f51667c918976614c36210c00000011263b51667b90816c56412e3f4b60738496816c5e4d3c2b1909000000000000000000000000000a20354a5f758a88725d48331d00000011263b51667b90836e59432e19000000000000000000000000192e43586e83907a65503b251000000000000011263b51667b9087725c47321d0000000000000004182a3a4e63798e8b77624d3828160200000000000000000005182b3b4f647a8f8773604b35200f000000000000001d32475c7287917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b8f7a654f3a25100000000000000b1c304354627888947f6c60554b3e3632292c2b2c2832363d4a55606c808a7f9485705b45301b00152a40556a7f95846f5a3c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b171f2123262a3437444b5b6378878b7a645847331f0d000000000e23384d63788d89745e49341f09000000000000000008141c33424e5c646968605544311d080000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000e22374b5d6f8497816c5846331f0a00000011263b51667b90816c56413a4b5d6a80958574604b40301e0e00000000000000000000000000000a20354a5f758a88725d48331d00000010253b50657a90846f59372715010000000000000000000001142637596e848f7a654f3a251000000000000011263b51667b9087725c47321d000000000000000a1f3347586d8297826d5948341a0a00000000000000000000000d22374b5c7085917c66513d2d1a070000000000001a30455a6f85947e69543f291400000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d8d78624d38230d00000000000001142636485a647a89948174645c514b463941404138454b515b6373818c7c7c9085705b45301b0011263b51667b9088735a4835200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c0e11181f27313d4a5a63798a8776614c3b2a18050000000e23384d63788d89745e49341f09000000000000000000011524313d4a4e53534b44372715010000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000e1e31424f657a8f8c79634e3a29170400000011263b51667b90816c56364759657b8c8a796356453222120000000000000000000000000000000a20354a5f758a88725d48331d0000000e23394e63788e86705544311d0800000000000000000000081d31445570858d78634e38230e00000000000011263b51667b9087725c47321d000000000000021527374c61778a8f7a644f3b2b18000000000000000000000000081b2e3e52677d92846f5b4a36210c000000000000182d42586d8296816c56412c17000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f8a75604b36200b0000000000000008182b3c4a5c64798796857a6f66615758575656585660666e79858b7d677b9085705b45301b000c22374c61778c8d78624d38220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d0b080200000000000000000000000000000409151d2d3c495b6a8095806b5948341f0b0000000e23384d63788d89745e49341f090000000000000000000006141f2d36393e3e3531271909000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000b1b2c3c4e60708597826d5b49351b0b0000000011263b51667b90816c564354617788927d675b49382815040000000000000000000000000000000a20354a5f758a88725d48331d0000000c21364b61768a8975604b35200e000000000000000000000b20354b6075898a76604b36210b00000000000011263b51667b9087725c47321d000000000000081d3144556a7f9485705c4a361d0d000000000000000000000000001020364b6074888e79634e3b2a18040000000000152a40556a7f95846f593b2b19050000000000000000000000000000000000000000000000000000000000000000000013283d53687d9288725544311d0800000000000000000d1d2d3e4a5b6376828f8c847c76716e6c6b6c6d70757b838b867a67667b9085705b45301b000b1f3447597287927d68533929170300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2022201d1509000000000000000000000000000000010f1e2c3d4b6075888a77624c37220d0000000e23384d63788d89745e49341f090000000000000000000000010f1a21242929201d150900000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000b1b293a495a687e938a78624d3d2c1a000000000011263b51667b90816c564a60728397826d5f4d3d2c1a0a000000000000000000000000000000000a20354a5f758a88725d48331d0000000a1e33465770858f7a654f3c2b1a0a000000000000000009192b3c4f647a8f856f5645321e140e040000000011263b51667b9087725c47321d0000000000000b20364b607488917c67523e2e1b0000000000000000000000000000081d3144556a7f94826d5947341f0a000000000011263b51667b908873594834200b0000000000000000000000000000000000000000000000000000000000000000000417293a576c8197836e593727150200000000000000000010202d3d4958616d7a848a918a868381808182868990887f74645c667b9085705b45301b0004182a3b566b8196846e5746331e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919263135373631271909000000000000000000000000000000000f1e3245566b80937e69533e29140000000e23384d63788d89745e49341f0900000000000000000000000000070d0f14130b08010000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d07000000000000000000000000000000000000000000020f1b2939465863788a937e685a48341f0f000000000011263b51667b90816c565c6a7f948675604b41301f0e00000000000000000000000000000000000a20354a5f758a88725d48331d0000000317293954697f94826c5a4938271a0e0801000001080e192737485a6c81937e695338282b2921160800000011263b51667b9087725c47321d0000000000081c2e3f52677d928774604b3520100000000000000000000000000000021527374c61778a8a77614c38271502000000000c22374c61778c8c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000a1f3347587086947f6a553f2a150000000000000000000002101f2c3a464c5c646f787e83878a8b8b8a8986817b756a605651667b9085705b45301b000010253a4f657a8f8a76614c3625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637444b4d4b44372715020000000000000000000000000000000216283850657a8f846f5a3828160200000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000000010a151d2d3a4657617686998372604a3c2b1901000000000011263b51667b90816c58647a8c8a796357453223130000000000000000000000000000000000000a20354a5f758a88725d48331d000000000c21364c6176898b78625645382b201c141616141c202b37445562788b8875604b4645413d34261600000011263b51667b9087725c47321d00000000000e23374b5d7186947f6a5544311d08000000000000000000000000000000091f3447596d82957f6a5645311d09000000000b1f3447597287927d68523929160300000000000000000000000000000000000000000000000000000000000000000c21374c61768a907a65503b25100000000000000000000000010f1b29333e4b4f5a62696e727576767574706c6660564b4551667b9085705b45301b00000b20354b607487937e695443301c0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144556062605544311d08000000000000000000000000000000000c21364b61768b89745645321e0900000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d0700000000000000000000000000000000000609141d27313d4a586175849a8676615443301d0d00000000000011263b51667b90816c617687937e685b4a392816050000000000000000000000000000000000000a20354a5f758a88725d48331d000000000a1f334658697f9484746056493c3530262b2b2630353c4855607384937e68575c5b5a565144341808000011263b51667b9087725c47321d00000000011426364f657a8f8a76614c3727150100000000000000000000000000000004182a3a4e64798e8874604b36200b0000000004182a3b566b8196836e5746321e0a0000000000000000000000000000000000000000000000000000000000000004182a3a52677c928974604b35200b000000000000000000000000000b171f2e373c484d53595d56606160555b57514b45383b51667b9085705b45301b0000081c304354697f948673604a3827150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60737774604b36200e000000000000000000000000000000000a1e33465774898b76604b36210b00000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321d09090909090909090909090001080b0d10131920263138454b5c6476849a88786258463625130000000000000011263b51667b90816c6e8398826e604e3d2d1b0a000000000000000000000000000000000000000a20354a5f758a88725d48331d000000000417293a4b607283988274625a4f4b4336404036434b4f5a627382988374737271706f6b6251362614010011263b51667b9087725c47321d00000000081c3043546e8393816c584733190900000000000000000000000000000000000c21364a5c6f84927d67523d2812000000000010253a50657a8f8976614b362112000000000000000000000000000000000000000000000000000000000000000a1f3347586e8398836d5544311d08000000000000000000000000000004101b222b35383e4438454b4c4b4437423c3631273b51667b9085705b45301b0000011426364c617689927d675645311d10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b8c816c573c2c1906000000000000000000000000000000031729395e73888d77624d38220d00000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c47321e1e1e1e1e1e1e1e1e1e1e1e1e141c202225282c3537444b56606a7a869a8778625a493a2918080000000000000011263b51667b90816c7e938776614c42311f0f00000000000000000000000000000000000000000a20354a5f758a88725d48331d00000000000c1c3043546075849685786d646054575656575460646d788598988a898887868584806b5443301c080011263b51667b9087725c47321d000000000b20354b60727e7e75614c3a2917000000000000000000000000000000000000071a2d3d4c62777e7c66513c261100000000000b20354b607487937e6853402f18080000000000000000000000000000000000000000000000000000000000031628384c61778a907b66513727150100000000000000000000000000000000080e192023292e283236363531272c26201d263b51667b9085705b45301b000000081f3347586a7f958774604b3e2e1d0d000000000000000000000000000000000000000000000000000000000003090b09030000000000000000000c21364c61768a88735b49352108000000000000000000000000000000091e32455674898c77624d37220d00000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c473434343434343434343434343434263035373a3d3c494d556067747f8b958477625a493c2c1c0c000000000000000011263b51667b90817a8b8b7a6457463324140100000000000000000000000000000000000000000a20354a5f758a88725d48331d00000000000114263645576073818f8b8279746f6c6b6b6c6f7479828b8b8483838383838383838273604b35200b0011263b51667b9087725c47321d00000000081c304354606968615746331c0c000000000000000000000000000000000000000f1f3448596269665e4c38240f0000000000081c3043546a7f9486715e4c3626140100000000000000000000000000000000000000000000000000000000091e324556697f948773604b35200b00000000000000000000000000000000000000060b0d1419161e2121201d1517110b11263b51667b9085705b45301b00000004172a3a4b60758895806b5c4b3b2b1b0c0000000000000000000000000000000000000000000000000000010a161e211e160a00000000000000000a1e33465771878d78634d3626140100000000000000000000000000000b21364b60768a8b76604b36210b00000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725c49494949494949494949494949494949434b4c4f52575a636a747d86948b80726259493c2c1e0e00000000000000000011263b51667b908186937e695c4a392917060000000000000000000000000000000000000000000a20354a5f758a88725d48331d000000000000081828394555606c7a848d8e89848280808284898e8a847a6f6e6e6e6e6e6e6e6e6e605443301c080011263b51667c9087725c47321d0000000001142636434b54534c46392917000000000000000000000000000000000000000005182a3b484c54514c40301d090000000000011426364c61778a917c665443301c0e00000000000000000000000000000000000000000000000000000005192b3c4b607588947e695443301c0800000000000000000000000000000000000000000000000003090b0c0b080100000011263b51667b9085705b45301b000000000c1e324557667c908c7a645948392a1d0f01000000000000000000000000000000000000000000000009151d28323632281a130500000000000003172939566b81947e695443301c0c00000000000000000000000000000f24394e64798e88735745321e0900000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b9087725e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e54606265686c71787f87928f84796a6054473b2b1e0e0000000000000000000011263b51667b908a99836e614f3e2d1b0b000000000000000000000000000000000000000000000a20354a5f758a88725d48331d000000000000000a1b2837444b5d646f787e8488898b8b8a88847f786f645c5858585858585858584b43362614010010253a50657b86836e59442f19000000000008182630353e3e3633291b0b0000000000000000000000000000000000000000000d1d2a34373e3c3830221200000000000000081f3447596b80958673604b3c2b1b0a0000000000000000000000000000000000000000000000000004122034485a697f948875604b362614010000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b00000000031628394c5e6c819787776257473b2d1d14090000000000000000000000000000000000000000030e19273138454b4538302313010000000000000e23384e63798d8773604b3a2917040000000000000000000000000a1a2f4054697e94846e593928160300000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b90867373737373737373737373737373737373737475777a7d82878d938a837a6f635b4b43362a1d0e000000000000000000000011263b51667b909d8776614c4232201000000000000000000000000000000000000000000000000a20354a5f758a88725d48331d00000000000000000a1927313f4b4f5b63696e7274767674736e6a625a4f4a3e4343434343434343353026180800000e23374b5d65716e6554402c1700000000000008141c202928211e170b00000000000000000000000000000000000000000000000d181f222926241d12040000000000000004182a3b4c617689937e695a4939281809000000000000000000000000000000000000000000000004122232434d627889937e685645321808000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b00000000000a1b2f404b6074859b857561594a3e312619110902000000000000000000000000000000050b161e2b37444b5660564d41301e0a0000000000000c2135495b7085917c675846331f150a00000000000000000000081828384c5e7185937e68533e29130000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0011263b51667b908c898989898989898989898989898989898989898a8c8f928f89857e776e645c4e493d3026180d00000000000000000000000011263b51667c908c7b6558473324140200000000000000000000000000000000000000000000000a20354a5f758a87725d48331d00000000000000000009151d2e373d494e54595d566061575d59544d493c362d2e2e2e2e2e2e2e2e201c1408000000081c2e3f4b505c5954473624110000000000000001080b14130c0a0300000000000000000000000000000000000000000000000000050b0d14110f09000000000000000000000c1f334658687d928a786257453626190b00000000000000000000000000000000000000000003132230404f616f83998573604b38281600000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000121e3245566176879b8577645c4b44372e201d150d0b05000000000000000001080b0e192028323c4855606b76675f4d392510000000000000061a2c3d50657b8c8876614c4431271a0f08010000000000070f1826364556667b908a76614c36210c0000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9088735e48331e0010253a50657b8687878787878787878787878787878787878786868583807e7a756f6862594f4a3e352c1c14080000000000000000000000000010253a50657b867e685d4b3a2a1706000000000000000000000000000000000000000000000000071c31465c7185846f5a452f1a0000000000000000000002101b222c35383e4438454b4b4639443f38352c221b19191919191919190b0801000000000011212e373a474440362919070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4e5f6f8399857560544437291b0f030000000000000000000000000000000000000b161e31404c5e6a7f948a79635443301a0a00000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b0000000000000216283847586277869a877a6960554b3f3631272220181815141313131416141c20242b3539464b5a6273818b7d67523c2712000000000000000f23374b5d6d8297826d624b45382d201c1413111113141b222c364354607487947f6a5846331f0a0000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657b8684705a45301b000e23374b5d657171717171717171717171717171717171717171706f6e6b68646056534c473b362e211a0e0100000000000000000000000000000e23374b5d657168604e3f2e1c0c00000000000000000000000000000000000000000000000000051a2e435667716f6554412d18000000000000000000000000080f1a2123292f2832363632282f2a2320190e070003030303030303000000000000000003111c2325322f2c24190b0000000000090f11201d1a140a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c31414c617687988272605546392d1e170b04000000000000000000000000000108121b2932424e5e667c8d927d675b493626140000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000a1a2a3a4859627684958b7e73655d514b453837342b2d2a29292829292b263035393c484d57616a788596897b65503b251000000000000000081c2e3f4c61768796806c60564a3d353026282626282a2e373d4954607282978674604b3a2917040000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e22374b5d6571706655412d1800081c2e3f4b505c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5a5956534f4b453837342a221b100600000000000000000000000000000000081c2e3f4b505c534e4231211000000000000000000000000000000000000000000000000000000013273949565c5a54473725120000000000000000000000000000060c0e1419161e21211e1619150d0c060000000000000000000000000000000000000000080e101c191711070000000004121d242635322f271c0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000131f33475863798998827361574a3e33291f180d0b0500000000000000030a0c151d203039464b60687c8b95806b5f4d3c2c18080000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b00000000000000000c1c2b3b48586173808c93867b70676056514d483b42403f3e3d3e3f4036434b4e545a626a75808a948578655d4b37230e0000000000000000111f334658627888968174635b504b43363d3c3c3d3f3e4b4f5b63728197897a645544311b0b000000000c21364c61757d7d67523d28120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081b2e3f4b4f5c5a5548372512000011212e373a4747474747474747474747474747474747474747464543413e3a363127221f180d070000000000000000000000000000000000000011212e373a473e3a312414030000000000000000000000000000000000000000000000000000000a1b2b3943464541372919080000000000000000000000000000000000000003090b0c09030000000000000000000000000000000000000000000000000000000000000000000000000012222f383b4a47433a2c1c0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a495b647a89988375645c4b4639342a22201917151413131416161e21273135404d57616d7e8c95806b625041301e0e000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b0000000000000000000d1d2b3a4755606b7a859290857c756d6762595a5755545353535456585460636970788088958a7f73625a4b3f2f1c0800000000000000000417293a495a6379879685796e656054545351515254595c646d798597897a645c4a37271500000000000a1e3346576168675f4d3a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010212e373a474541372a1a08000003111c2325323232323232323232323232323232323232323131302e2b2925201d150d0b0500000000000000000000000000000000000000000003111c23253128261f140600000000000000000000000000000000000000000000000000000000000d1b272e312f2d25190b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091d2f404c51605c574a3a2714000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2c3d4a5c647a8899867a6b61574c473a38352b2c2a2928292a2b29323637444b515e667582938d806b62514433231300000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000000000d1c2a37444b5c64727d86909189827c77726f6d6a69686868696b6d7074797f858b958c82786a6055483c2f2111000000000000000000000c1c2c3c495b637683918c837a746e6a68666668696e737a828a948579645c4a3e2d1909000000000003172939464c53524d41301e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222532302d251a0c0000000000080e101c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1a1916130f0b09020000000000000000000000000000000000000000000000000000080e101c13110b02000000000000000000000000000000000000000000000000000000000000000a131a1c1a1812080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e16160f0d0800000000000000000000000f24384c5e6675726857432f1a06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3e4a5c647784938c81766a6159524d483c413f3e3d3e3f4039464b50556067717c8797897c6a6151443426150500000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b00000000000000000000000c1926313e4b546067737b838991918c8884827f7e7e7d7e7e808285898e948f8881786d625a4b44372b1e110300000000000000000000000e1e2c3d4958616e7c858f8f89837f7d7b7b7d7f83888f91887e73635b4a3e2d200f000000000000000b1b2933363d3d3a302313010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e101c1b181208000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21242b2b25221b100200000000000000000011263b51667c8a86725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110202d3d4a5961737e8a968980776f67625a5a57545453535456595761656c747c8691918378665e5043342616070000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b00000000000000000000000009141d2e36434a5460666e757c81858a8d8f919293929392918f8c8985807a746b635b4d483c3126190e00000000000000000000000000000f1f2c3a464c5e66707a81878c8f91919192908d88837c74696055493d2d20100100000000000000000b171e212828251e13050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f11201d1a140a00000000000000000000000000000000000000000000000000000000000000090f11201d1b150b000000000000090f1120202020202020202020202020202020201f1e1c1b17130f0b080100000000000000000000000000000003111f2d363940413a372e201305000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101f2d3b4755606978828a958a847d78726f6c6a696868696b6e71767b81889190867c6f625a4c4033251608000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b00000000000000000000000000011018253036434a505760666c7075777a7c7d7e7e7e7d7c797774706b6560554d493c352b1d1409000000000000000000000000000000010f1c2933404d515d656c72777a7c7e7e7c7b78736e6660554b44372c1f100200000000000000000000030a0c1312100a010000000000000000000000000000000000000000000000000000000000000000000000000000071117192012100a01000000000000000000000000000000000000000000000000000000000000040a0c1f20110f0900000000000000000000000000000000000000000000000000000004121d242635322f271c0e0000000000000000000000000000000000000000000000000000000004121d2426353330281d0f00000004121d24263535353535353535353535353535353535343332302d2824201d1509070000000000000000000000000011212e3d4a4e56564f4b3e302313010000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d2a37444b59626d78808890928d8884817f7e7d7e7f8083868a90928a847b71665e4d483c302215070000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62787d7c66513b261100000000000000000000000000000008131c25303539454b515654606265676869696868666462605456504b4437352c20190e010000000000000000000000000000000000000c171f30393f4b50575962656768696766625a59514b44373126190f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18242b2e3528251e1305000000000000000000000000000000000000000000000000000000000c171f21343526241d12040000000000000000000000000000000000000000000000000012222f383b4a47433a2c1c0a00000000000000000000000000000000000000000000000000000012222f383b4a48443a2d1d0b000012222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49484745423d39353127221b100700000000000000000000081c2e3f4b5b636b6b645c4d41301e0a0000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1926313b484d5a626b747a80858a8d909293929392918e8b87827d776e665e514c40352b1e1204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a6268665e4c38240f000000000000000000000000000000000008131c202832363c36434b4d4f525253545352514f4d4a43363a35312621190e0600000000000000000000000000000000000000000004121d242e373a3b484d5051535352504d493c3c3531271d1409000000000000000000000000000000000000070d0f20202020202020202020202020202020202020202020202020202014120c0300000000000718283640434a3d393023130100000000000000000000000000000000000000000000000000000c1c2933364a4a3c382f2212000000000000000000000000000000000000000000000000091d2f404c51605c574a3a27140000000000000000000000000000000000000000000000000000091d2f404c51605d584b3a281500091d2f404c5160606060606060606060606060606060605f5d5c5b57534e4b4437362d221b100100000000000000000e23374b5d657980807a675f4d3a25080000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d2b343c484d5460656b7075787b7c7d7e7e7d7b7976726d686158514c40383020190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d53514c402f1d0900000000000000000000000000000000000000070b161e2127263035383a3c3d3e3f3e3d3c3a3735302525201d1409060000000000000000000000000000000000000000000000000009111c23252b34373a3c3e3e3d3b38352b27201d150901000000000000000000000000000000000002101b22243535353535353535353535353535353535353535353535353535352a272014070000000011243646535960524d41301e0a000000000000000000000000000000000000000000000000000417293a464c5f60514c402f1d0900000000000000000000000000000000000000000000000f24384c5e6675726857432f1a06000000000000000000000000000000000000000000000000000f24384c5e667572695844301b000f24384c5e667575757575757575757575757575757575747371706c686460554f4a3e362d1c14080000000000000010253a50657b8b95968d7d67523626140100000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010d19202b3436434b50565560626567686968676663615758524c473a382f241d120600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34383d3b382f22120000000000000000000000000000000000000000000003090b11141c202225272829292928272422201c13100b08010000000000000000000000000000000000000000000000000000000000080e10182022252729292726232019110b08010000000000000000000000000000000000000010202d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3f3b32251403000002172b4053646e75675f4d392510000000000000000000000000000000000000000000000000000a1f334658617475665e4c38240e000000000000000000000000000000000000000000000011263b51667c8a86725c47321d070000000000000000000000000000000000000000000000000011263b51667c8a87725d48331d0011263b51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888785827d79756d645c4e4a3e3026180a0000000000001a2f455a6f849aaaab9d88735443301c0800000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050d19202630353b37444b4d505253545352514e4b46393d37332a241d120900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1920222826241d1204000000000000000000000000000000000000000000000000000001080b0d10121314141313110f0d0b0700000000000000000000000000000000000000000000000000000000000000000000000000050b0d1012131412110d0b0600000000000000000000000000000000000000000000071b2d3e4a4f606060606060606060606060606060606060606060606060606060544f4332200c000004192e43596e828a7d67523d2812000000000000000000000000000000000000000000000000001325364c61768a8a7c66513c2c19060000000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9087725d48331d0011263b51667b908b8485858585858585858585858585858687888a8e928e89827a6f645c4b4336271a0a00000000001c31475c71869cb1b49f8a73604b35200b00000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000508141c2025263135383b3d3e3e3e3d3c3936322928211f170c090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d13110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22364a5c7075757575757575757575757575757575757575757575757575757569614f3b2712000004192e43596e83927d67523d2812000000000000000000000000000000000000000000000000071c304354697e9399846f5a4935200a0000000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b908672707070707070707070707070707071727375797d8289928f847a6a6054453827150200000000172c42576c8197a3a49a846f5443301c0800000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b10141d20232627282929282624211e16130c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c101315161514110d0b05000000000000000000000000000000000000000000000f24394f647a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7f69543f2a14000004192e43596e83927d67523d28120000000000000000000000000000000000000000000000000b20354a6073879c888b78634d3828160200000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c5a5a5a5a5a5a5a5a5a5a5a5a5a5b5d566064686d757d86948c8072605645311d13000000000c22374c6176858e8f8678634d3626140100000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d101213141312110e0c0a030000000000000000000000000000000000000000000000000000000000000000050b0d0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b0f141517171615120e0b0700000000000000000000000000000000000000000000050a0600000000000000000000000000000000000000000000040b0c171f2125292a2b2b29262220190e0c06000000000000000000000000000000000000000d22384d627881828282828282828282828282988a8182828282828282828282817b65503b2610000004192e43596e83927d67523d2812000000000000000000000000000000000000000000000005192b3c50657b90868095806b5645321e0900000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c474545454545454545454545454638454b4f53566067747f8a958274604b42311c0c0000000a1f3347586173797974635a493518080000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d181f22211e160a0000000000000000000000000000000000000000000000000000000000000000000000000000000000070b151d2025292b2c2d2b2a2723201c130c0903000000000000000000000000000000040a0c1a201b0c0a040000000000000000000000000000000000040c181f222a33373b3e4040403f3c38352b23211a0f0600000000000000000000000000000000000b2035485a626c6c6c6c6c6c6c6c6c6c6c6c798e87726c6c6c6c6c6c6c6c6c6c6c655d4c38230e000004192e43596e83927d67523d281200000000000000000000000000000000000000000000000b2034485a6e83957f7a8f8975604b36211000000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47323030303030303030303030312731363938454b556069798898826d604e3a291704000004182a3a47556064646056493c2c19000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d120b080200000000000000000000000000000000000000000000040e14161b1b1b1b1b1b1b1b1b1b15130d04000000000d1d2a34373632281a10020000000000000000000000000000000000000000000000000000000000000000000000000008131c202731363a3e404242403f3c38353025211e160b060000000000000000000000000c171f212f3531211f170c0000000000000000000000000000000c181f2a34373a474c505355565554514d483c38352c211a0f0100000000000000000000000000000005192b3c484d575757575757575757575763798e87725d57575757575757575757504c3f2f1c08000004192e43596e83927d67523d281200000000000000000000000000000000000000000000021527374d62788b8b787287927d68523e2d1b07000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d1b1b1b1b1b1b1b1b1b1b1c151d2024283237444b5b637989937e685847331f080000000c1c2a37444b4e4f4b45382c1e0e000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18202228201d15090000000000000000000000000000000000000000081621292b313131313131313131312b28211507000005182a3b484c4b45382e2010000000000000000000000000000000000000000000000000000000000000000000000004131825303537444b4f535557575654524d4a433636322820190e040000000000000000000c1c293337454a463733291c0c00000000000000000000000000121c2a333b474c54586165686a6b6a6966625a564e493d352c1c14080000000000000000000000000000000e1e2b3538424242424242424242424e63798e87725d474242424242424242423b382f211100000004192e43596e83927d67523d281200000000000000000000000000000000000000000000081d3144556b8095846f697e9385705c4a36220c000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d070505050505050505050002090b0f161e27313d4a5b687d928976614c362513000000000c19263135393a3631271a0e00000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b34373d3631271909000000000000000000000000000000000000041626343d4146464646464646464646403c33251504000b1f3448596260564b3e2e1b080000000000000000000000000000000000000000000000000000000000000000000c171f3036434a51556064696a6c6c6b6a67636054524b4639352b1f180c000000000000000d1c2a3a474c5a5f5b4c473a2917040000000000000000000008131c303a474c59616a70767a7e7f80807e7b77726b635b4e493d3026180b0000000000000000000000000000000e1920222d2d2d2d2d2d2d2d2d394e63798e87725d47322d2d2d2d2d2d2d2d26231c110300000004192e43596e83927d67523d2812000000000000000000000000000000000000000000000b20364b607488907b6661768a8f7a644f3a2a17040000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000309151d2d3d4e5f7185957f6a5443301c070000000009141d202424201d150a0000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b484c524b443727150200000000000000000000000000000000000e21344451565b5b5b5b5b5b5b5b5b5b55504433210d000d22374c627775645c4b37220e00000000000000000000000000000000000000000000000000000000000000000e1c2a33414d5460666f757a7e808182807f7c78746e6761574d483c332a1c1302000000000d1d2a3a4758616f7570615847331f0a00000000000000000008182530404d58616c777f868a90918f8e8f90918d8781796f635b4b4336291b0b000000000000000000000000000000050b0d171717171717171724394e63798e87725d47321d17171717171717100e08000000000004192e43596e83927d67523d2812000000000000000000000000000000000000000000071a2d3d52677c92877360586d8297826d5847331f080000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000000010f1f314152677d928773604a35200b000000000001080b0f0f0b0902000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596267605544311d08000000000000000000000000000000000014293d51626b707070707070707070706a62503c281300162b41566b80897a644f3c2b19060000000000000000000000000000000000000000000000000000000000000e1e2b3a474c5f67737c84898f918e8c8c8d8e908d89837c766c625a4c473a311e160a00000e1d2b3b47586176848b8576614c37210c000000000000000008182536434a5e6677818a948a857f7c7a797a7b7f8389928d84796a60544639291b0b0000000000000000000000000000000000020202020202020e24394e63798e87725d47321d08020202020202000000000000000004192e43596e83927d67523d28120000000000000000000000000000000000000000000c21364a5b7085947f69544e64798e8a76614c3625130000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d070000000000000000000000000000000000011321364b61768a8e79634e39240e00000000000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62777d73604b36200b0000000000000000000000000000000000162b41566b8085858686868686868685806a55402b15000d23384d62788a846e5a4835200a00000000000000000000000000000000000000000000000000000000000d1d2b3c4858616e7c87919087817c79777678797b7f8389918981786d61584e4132281a0d0e1e2b3b48596276859a8475615847331f0a00000000000000001325364354606b7c8995877e766f6a6765646466696e757d86928b7f726157463929190900000000000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000000000000000000031729394e63798e8a76614c4a5c7085947f695443301c0700000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000000000000000091e3246577085937e68533e281300000000000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a8f7a65503a25100000000000000000000000000000000000192f44596e84998383838383838383837b66503b2611000b2035485a6e848b78624d3828160200000000000000000000000000000000000000000000000000000008182b3b485a6276839190847b726c676462616264666a6e757c838b8a8277685f4b45382a1d1e2b3c48596277869984756157473a291704000000000000000d1c304354607280918c7f7569615855514f4e4f5154566067737d8995837561574637271501000000000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000000000000000000000a1e3346576c8197826d58473e52677d928773604a35200e00000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000000000003162839586d8296816b56412c1600000000000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798e7b66513c26110000000000000000000000000000000000192f44596e848c776e6e6e6e6e6e6e6e665e4c38230f0006192b3c50657b90806b5645321e09000000000000000000000000000000000000000000000000000001142636485962788798887c6f655d57524e4d4c4d4e51555660666e78828c897d6d6056483b2b2c3c495a62778699837461574639291c0c000000000000000d1d30414a60728196887b6a60564c473a3c3a393a3b38454b54606878859a8575615544311d11000000000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000000000000000000000c21364c6176898f7a644f3a364b607588907b66503c2b1905000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000000000000162b40556b8095826d58432d1800000000000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d7c67523d27120000000000000000000000000000000000192f44596e848c776258585858585858504c402f1c0900000e20354a6073878875604b3621100000000000000000000000000000000000000000000000000000081c3043546277879a8576665e504c3f3c39373738393b38454b515b636d7a869282746259483b3c495a62788798837460564639291b0c0000000000000005182b3b4d5f6b80958779645d4b453833292725242526283236434a5a6276849a8373604b3f2e19090000000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000000000000000000081c2e3f53697e9386715c4a363245566b8096836e5a4835200a000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000000000000152a3f556a7f94836e59432e1900000000000000000000000000000000000000000000000011263b51667b9087725c47321d0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0000000000000000000000000000000000000000000000000000000000000000000d22374c62778c7d68533d28130000000000000000000000000000000000192f44596e848c77624c4343434343433b382f2212000000071c304354697e927d68523e2e1b0700000000000000000000000000000000000000000000000005182a3b4b6073859a847561584c40382f272422212324262731363c494d5c647481928577625948495b63788798827360564538281b0b00000000000000000b20344859677d918a79635b4b3f32281f1712100f0f11151d25303c495861768696806b5d4b3727150100000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000000000000000000000e23374b5d7186927d68533e2e28384d62788b8b78624d382815020000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000000000000162b40556b8095826d57422d1800000000000000000000000000000000000000000000000011263b51667b9087725c47321f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0e0c060000000000000000000000000000000000000000000000000000000000040c21364c61768b7e69533e29140600000000000000000000000000000000192f44596e848c77624c372e2e2e2e2e26231c1204000000001325364c61768986715c4b37220c0000000000000000000000000000000000000000000000000b1f344759697e9388766157473a2f231c120f0d0c0d0f11151d202c353e4b56606c7e8c867762595b63798797827360554538281a0b0000000000000000071b2d3e4c627789917c665b4a3c2e1e160a0400000000000208131c2b3a465863798a8d7b655544311d0900000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000000000000000005182b3b50657b908975604b36212035495a6f8495806b5645321d090000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000000000004182a3b576d8295806b55402b1600000000000000000000000000000000000000000000000011263b51667b9087725c47343434343434343434343434343434343434343434343423211a0f01000000000000000000000000000000000000000000000000050b0d181f22354b60758a7f6a543f2a20190e0c0700000000000000000000000000192f44596e848c77624c372219191919110f09000000000000081f3346586c818f7a644f3b2a180400000000000000000000000000000000000000000000000d22374c62778a917c67584739291c12080000000000000002090e19212e38454b60687c8c87776263798896817260554437271a0a0000000000000000000d22364a5c6d8298826d5e4c3d2d1e1002000000000000000000000e1b293a495b697e938674604b37271501000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000000000000000b203448596e8396816b5645321e192c3c51667c918875604b36200f0000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d070000000000000000000000000000000000000b1f3447597186927d68523d281300000000000000000000000000000000000000000000000011263b51667b9087725c49494949494949494949494949494949494949494949494939352c1f0f00000000000000000000000000000000000000000000060e1920222a34373b4455748a806a554038352b24211a0f060000000000000000000000192f44596e848c77624c37220d0303030000000000000000000417293a4e63798e826d5947341f090000000000000000000000000000000000000000000005182b3b556a8095846f5f4d3a2a1b0c00000000000000000000000006101a2731424e5e677d8c857579889681726054443727190a00000000000000000005192b3c4e64798c8977614c40301f0f000000000000000000000000000c1c2c3d4b607386937e685544311d08000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000000000000011527374d62778b8c78634d3828160e20354b607387927d67523e2d1a0700000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000000000000008182b3b4c61778b8b77624c37220d00000000000000000000000000000000000000000000000011263b51667b9087725f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f4e493d2c1a0600000000000000000000000000000000000000020f1a212b35383a474c50545e7489816b56514d493c39362d20190e00000000000000000000192f44596e848c77624c37220d000000000000000000000000000b21364a5b70858a77614c372614010000000000000000000000000000000000000000000b203448597287917c665140301c0c0000000000000000000000000000000a151d31404d5f697f94858995806c60544336261909000000000000000000000b2035485a6e8395806a58473322120100000000000000000000000000000f1c304354667c918874604b35200d000000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000000000000081d3144556a8095846f5b49351a0a081c3043546a7f9485705c4a36210b00000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000000000000a18253448596a7f9485705948341f0b00000000000000000000000000000000000000000000000011263b51667b90867474747474747474747474747474747474747474747474747474635b4935210c00000000000000000000000000000000000009151d2c353c484d55596165696b7388816c6a66625a564e4a3d352c1c13080000000000000000192f44596e848c77624c37220d00000000000000000000000000071a2d3d52677c917f6a5544311d080000000000000000000000000000000000000000000d22374d62778c8a76614b362112000000000000000000000000000000000002132230414f616e839995806b624a433625180900000000000000000000000d22384d62788b8a76614c3a2a1804000000000000000000000000000000011426364c5e7287917c67523b2b18050000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000000000000000b20354b607488917c66513c2c1900011426364c61778a8e79644e3a291704000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000030a111a2836434d627789917c66513b2a180500000000000000000000000000000000000000000000000011263b51667b908d8a8989898989898989898989898989898989898989898989898a79634e39230e00000000000000000000000000000000000d1927313d494e5a626a71777b7e80818a86817f7c78726c635b4d493c3025180a00000000000000192f44596e848c77624c37220d00000000000000000000000000000f20354b6074888874604b35200f00000000000000000000000000000000000000000011263b50667b9086715746321e09000000000000000000000000000000000412222f404c5d657b8a988a78634e44302518080000000000000000000000071b2d3e566b8095826d5847331c0c00000000000000000000000000000000000818304054697e948570594834200b0000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000000000000061a2c3d51677c918774604b35200e0000081f3447596d8297826c5846331f08000000000000000000000000000011263b51667b9087725c47321d0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c11263b51667b9088725d48331d0011263b51667b9087725c47321d0c0c0c0c0c0c0c0c0c0c0d0e0f12161e212f384554606e839984705e4c381d0d0000000000000000000000000000000000000000000000000011263b51667b908c888888888888888888888888888888888888888888888888888879634e38230e000000000000000000000000000000010f1d2b37444b5b636e787f868c90918e8d9b9a8e90918d8781796e625a4a4336281a0a000000000000192f44596e848c77624c37220d0000000000000000000000000000081d3144556a7f917c66513d2c1a06000000000000000000000000000000000000000013283d52687d92846e593928160300000000000000000000000000000005132230404c5e667b8a94829884705f4d3726140100000000000000000000000d22364a5c72878f7a65503a2a17000000000000000000000000000000000000001222374c61778b8b77624d37220d0000000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000000000000000c2136495b7085947f6a5544311d08000004182a3a4f657a8f8a76614c362513000000000000000000000000000011263b51667b9087725c473221212121212121212121212121212121212121212121212121212121263b51667b9088725d48331d0011263b51667b9087725c4732212121212121212121212122232527293236404c56607281968878624d402f1d000000000000000000000000000000000000000000000000000011263b51667b90867373737373737373737373737373737373737373737373737373635b4935210c0000000000000000000000000000000f1f2c3b4855606b79838b948b85807c797885847a7b7f8389928b83786a60544538281a0a0000000000192f44596e848c77624c37220d0000000000000000000000000000011527374c62778a846f5b4936210b000000000000000000000000000000000000000014293e53697e93836d58432e1800000000000000000000000000000005132330404d5e667c8b937f6e83917c675544311d0800000000000000000000000f24394f64798e8874604b35200c000000000000000000000000000000000000000a1f3347587085937e69543726140100000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000000000000031629394e63798e8a77624c372614010000000c22374b5d7186937e695443301c070000000000000000000000000011263b51667b9087725c473636363636363636363636363636363636363636363636363636363636363b51667b9088725d48331d0011263b51667b9087725c4736363636363636363636363637393a3c39464b535e65758196897a645a48352212000000000000000000000000000000000000000000000000000011263b51667b9087725d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d4e493d2c1a0600000000000000000000000000000e1e2c3d49596274808b94887f77706b66646f84857066696e757d86938b80726056453827150200000000192f44596e848c77624c37220d000000000000000000000000000000091f3448596e838e79634e392917030000000000000000000000000000000000000013283e53687d93846e59362513000000000000000000000000000006142331414d5f677c8b8d7e6963788a8773604b3520100000000000000000000001142637556a7f94826d5443301c080000000000000000000000000000000000000004182a3a54697e94846f5544311d0800000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000000000a1e3246576c8196836e594734190900000000081b2e3f53687e938773604a35200d0000000000000000000000000011263b51667b9087725c4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b51667b9088725d48331d0011263b51667b9087725c4b4b4b4b4b4b4b4b4b4b4b4b4b4d4e4f5256576168707b87958578645c4a3c2b1904000000000000000000000101000000000000000000000000000011263b51667b9087725c48484848484848484848484848484848484848484848484838352c1f0f000000000000000000000000000006192c3c495b637885958b7f756a62595551596e8386715b54566067737e88958274605645311d1300000000192f44596e848c77624c37220d00000000000000000000000000000005182a3b4f657a8f816c5746331e0a0000000000000000000000000000000000000011273c51667c9186705443301c0700000000000000000000000006142431414e5f677d8c8d7e68605a6c81927d67523e2d1b07000000000000000000081d3144556f84927d67523626140100000000000000000000000000000000000000000f24394f64798e8974604b35200b00000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000000000c21364b6176898f7a654f3b2a180000000000001021364b617589907b65503b2b190500000000000000000000000011263b51667b90877261616161616161616161616161616161616161616161616161616161616161616161667b9088725d48331d0011263b51667b9087726161616161616161616161616161626364676b70767d8590898074635a4a3e2d1e0e0000000000000000070c0e16160f0d08000000000000000000000011263b51667b9087725c47333333333333333333333333333333333333333333333323211a0f0100000000000000000000000000000c2135495b6379879986796a60564c473b43586d8387725c38454b5560687886988474604b41301a0a000000192f44596e848c77624c37220d000000000000000000000000000000000d22374b5d71868976614b362111000000000000000000000000000000000000000e23394e63788e8874604a35200b000000000000000000000007152432424e5f687d8c8c7d68604e4e63798d86715c4a36220d0000000000000000000b20354b6075898d78624d38230d0000000000000000000000000000000000000000000b20354b6075898e79644f39240f00000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000000081c2e3f53687e9386715d4b371d0d000000000000091e3246576c8196836e594834200900000000000000000000000011263b51667b90867576767676767676767676767676767676767676767676767676767676767676767676767d9188725d48331d0011263b51667b908675767676767676767676767676767677787a7c8085898e8780766a6056493c2d200f00000000000000010f1a21242b2b25221b100200000000000000000011263b51667b9087725c47321e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e0e0c06000000000000000000000000000000000e23384d637988988375635b4b4538342a42576c8288725d483237444b5a62758497816c5f4d382715020000192f44596e848c77624c37220d00000000000000000000000000000000081b2e3f53687d937e69533f2f1c080000000000000000000000000000000000000b20354a6074898e79644f3828160300000000000000000007152532424f60687e8d8c7d675f4e42495b6f848e79644e39240f0000000000000000000e23384d63788d88735a4835200b000000000000000000000000000000000000000000081d3144557085927d68533d281300000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000000000e23374b5d7186937e68533f2e1c00000000000000031628394e63798e8b78624d37271502000000000000000000000011263b51667b909c8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b919d88725d48331d0011263b51667b909c8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c8e8f8985827f79726a61584b45382c1e0f0100000000000003111f2d363940413a372e201305000000000000000011263b51667b9087725c47321d080808080808080808080808080808080808080808000000000000000000000000000000000000001b31465b70869482736157493d32281f2c41566b8189735e492626313c4857617687927d675645311d080000192f44596e848c77624c37220d00000000000000000000000000000000001021364b60758987715d4b38230e000000000000000000000000000000000000071c3043546d8295806a5645321e0d000000000000000008162533434f60697e8d8b7c675f4d41313d52677c91816c563c2c1906000000000000000011263c51667b9185705b3c2b190600000000000000000000000000000000000000000001142637576d8296806b56412b1601000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000005182a3b50657a8f8976614b36211100000000000000000b2135495b708595806a5544311d08000000000000000000000011263b51667b908a838383838383838383838383838383838383838383838383838383838383838383838383849a88725d48331d0011263b51667b908981828282828282828282828282828385878a89837e776c625a4c473a32281a0e000000000000000011212e3d4a4e56564f4b3e302313010000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a7f73605546392c1e16162b40556b8089745443301c1d2b394758647a8c8774604b3625130000192f44596e848c77624c37220d0000000000000000000000000000000000091e3245576b81907b65503c2b19050000000000000000000000000000000000001325364f647a8f8875604b3b2b180800000000000000162633435061697e938b7c665e4d413021364c61768a87725b4935210c0000000000000000142a3f54697f94826d57422d180000000000000000000000000000000000000000000000142a3f54697f94846f59442f1a00000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000000000b1f3448596e8396816c5746321e0a0000000000000000061a2c3d51677c918874604b36200f000000000000000000000011263b51667b9087726e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e7c9088725d48331d0011263b51667b9087726c6c6c6c6c6c6c6c6c6c6c6c6d6d6f72767b8189898278696054443727190900000000000000081c2e3f4b5b636b6b645c4d41301e0a0000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c646960554437291b0f03152a3f546a7f8a75604b35200e1b2a3a4a5c6d82937e685443301c0700192f44596e848c77624c37220d0000000000000000000000000000000000031628394d63788b836e5a4835200a0000000000000000000000000000000000000822374b5d6f84937e695948362513020000000008131c344450616a7f938a7b665e4c4030231e3346576f858d78634d38230e0000000000000000172c41566c81957f6a55402a15000000000000000000000000000000000000000000000012273c52677c9186715c36251300000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000000011426374c62778a8e79634e392916030000000000000000000f20354b607488917c67523d2d1a070000000000000000000011263b51667b9087725c595959595959595959595959595959595959595959595959595959595959595959667b9088725d48331d0011263b51667b9087725c575757575757575757575757585a5761656c757e88897e72605544372715020000000000000e23374b5d657980807a675f4d3a25080000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4b4f544b443727190b000014293e54697e8b76614b36210c0c1c2d3e4e63788b8773604a35200b00192f44596e848c77624c37220d0000000000000000000000000000000000000a2035495a6f848a78624d382815020000000000000000000000000000000000081b2e3f4f647a8d8977625443301d150a0000081825304451626b7f948a7b655d4c402f2212172939546a7f927d68523d28130000000000000000192e43586e83937e68533e2913000000000000000000000000000000000000000000000010253b50657a9088735443301c07000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000000081d3144556a7f9585705b49361b0b00000000000000000000081d3144556a809585705b4a36210b0000000000000000000011263b51667b9087725c474343434343434343434343434343434343434343434343434343434343434351667b9088725d48331d0011263b51667b9087725c4742424242424242424242424339464b505760697682938273605544311d1100000000000010253a50657b8b95968d7d67523626140100000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a3f353126190900000013283d53687d8c77614c37220c00102135495b70858f7a644f3a240f00192f44596e848c77624c37220d00000000000000000000000000000000000006192c3c51667b90806b5645321d090000000000000000000000000000000000001022374b5c6b80958472604a4432281a0e09182536434a626b8095897a655d4b3f2f22120411263b50667b90816c56412c1701000000000000001a30455a6f85917c66513c271100000000000000000000000000000000000000000000000e24394e63798e8a73604a35200b000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000000b20354b607487917c67523d2c1a0000000000000000000000011527374d62778b8e79634e3929170300000000000000000011263b51667b9087725c47322e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e3b51667b9088725d48331d0011263b51667b9087725c47322d2d2d2d2d2d2d2d2d2d2e29333639454b58616d7f948373604b402f180800000000001a2f455a6f849aaaab9d88735443301c0800000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000002101b22242a201d14090000000012273d52677c8d78624d38230d00061a2c3d556a7f947f6a553f2a1500192f44596e848c77624c37220d000000000000000000000000000000000000000e20354b6073878875604b362010000000000000000000000000000000000000071b2e3e4b60738596806b624b45382c1e1926364354606c8095897a645c4b3f2f211103000d22374d62778c846f59442f1a04000000000000001c31465b7186907a65503b251000000000000000000000000000000000000000000000000d22374d62778c8b75604b36210b000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000061a2c3d51667c918874604b36200f00000000000000000000000009203448596e8397816c5746331e0a00000000000000000011263b51667b9087725c47321d191919191919191919191919191919191919191919191919191919263b51667b9088725d48331d0011263b51667b9087725c47321d17171717171717171818171e2128323a474c616b8095816b5e4c36251300000000001c31475c71869cb1b49f8a73604b35200b00000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f140b0801000000000011263c51667b8e79634e39240e00000f253a4f647a8f846e59442f1900192f44596e848c77624c37220d00000000000000000000000000000000000000081c304354697f927d67523e2d1b07000000000000000000000000000000000000101d31445561778695806c6056493c3228374454607281968879645c4a3e2e21110300000b20344859728785705b46311b06000000000000001c31475c71868f7a654f3a251000000000000000000000000000000000000000000000000c22374c61778c8c76614c37210c000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000c2135495b6f8495806a5544311d0800000000000000000000000005182b3b50657b908976614b36211100000000000000000011263b51667b9087725c47321d070404040404040404040404040404040404040404040404040411263b51667b9088725d48331d0011263b51667b9087725c47321d07020202020202020200030a0c161e2933434b607384907b665443301c0700000000172c42576c8197a3a49a846f5443301c0800000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b8f79644f3a240f00000d22384d62778d86715c47311c00192f44596e848c77624c37220d00000000000000000000000000000000000000011426364c61768a85705c4a36220c000000000000000000000000000000000000011527374759627786958174625a4b45384455607281968879635b4a3e2e20100300000005192b3b4b607476614c36210c00000000000000001d32475d72878f79644f3a240f00000000000000000000000000000000000000000000000c21364c61768b8c77624c37220d000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000031628394e63788c8b77624d37271502000000000000000000000000000d23384b5d7286937e69533f2e1c08000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000030c171f30435463798c8673604a35200b000000000c22374c6176858e8f8678634d3626140100000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f7a65503b251000000b20364b60758b88735e49331e00192f44596e848c77624c37220d0000000000000000000000000000000000000000081f3347586d828e7a644f3a2a170400000000000000000000000000000000000009192a3b47596276839485786a60564c55607382978778635b4a3d2d20100200000000000d1d31455660615846331f0a00000000000000001d32485d72878e79644e39240f00000000000000000000000000000000000000000000000b21364b60768b8d77624d38220d000000000000000000000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d281200000000000000000000091e3245576c8196836e59483419090000000000000000000000000000081c2f3f54697e9386715d4b37230d000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d070000000000000000000000000000041426364a5b6f84917c6651372614010000000a1f3347586173797974635a493518080000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798e7b66513b26110000091d324556748a89745f49341f00192f44596e848c77624c37220d000000000000000000000000000000000000000004172a3a4e64798e826d5847331f08000000000000000000000000000000000000000c1d2a3b475861727f8b8a80756961607382988778635a493d2d1f100200000000000002152738454b4c463a29170400000000000000001d32475c72878f79644f3a240f00000000000000000000000000000000000000000000000c21364c61768b8c77624c37220d000000000000000304000000000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000b21364b607589907b65503b2b18000000000000000000000000000000001121364c61768a8f7a65503b2b18050000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000008182d3d53697e93836e5544311d0800000004182a3a47556064646056493c2c19000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d7c67523c271200000b20354b60758a89735e49341e00192f44596e848c77624c37220d0000000000000000000000000000000000000000000c22364a5c70858a77614c36261401000000000000000000000000000000000000000d1d2a3a4754606978838f877f767483988677625a493c2c1f0f0100000000000000000a1a2731363633291c0c0000000000000000001c31475c71868f7a654f3a251000000000000000000000000000000000000000000000000c22374c61778c8b76614c36210c0000000000070b181a0c0a03000000000e24394e63798e87725d47321d08000000000000000000000000000004192e43596e83927d67523d2812000000000000000000081b2e3f53687d9387725d4b381d0d000000000000000000000000000000000a1f3346586d8297836e59483420090000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000000000000f23384d62788d8975604b35200b000000000c1c2a37444b4e4f4b45382c1e0e000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778c7d68523d281300000e23384d63788d87725c47321d00192f44596e848c77624c37220d000000000000000000000000000000000000000000071b2d3e52677d927f6a5443301c0800000000000000000000000000000000000000000d1c2936434a5a636e7a838c89869986776259483c2c1e0f01000000000000000000000a151d20211f170c000000000000000000001b31465b7086907b65503b261000000000000000000000000000000000000000000000000d22384d62778d8b75604b36210b00000008131c202d2f211e170b0000000e24394e63798e87725d47321d0800000000000000000000000000000011263c51667c7f79634e39230e0000000000000000000d22374b5d7186937e69543f2f1c00000000000000000000000000000000000417293a4e64798e8a77624c3727150100000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000000000000b20354a60758a8d77624d38220d00000000000c19263135393a3631271a0e00000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b7e69533e2914000b1b2e3f52677d92836e59442e1900192f44596e848c77624c37220d000000000000000000000000000000000000000000001020364b6075888773604b35200e0000000000000000000000000000000000000000000c1825303c494d5d656e78889c86776259483b2b1e0e0000000000000000000000000002090b0c0a0400000000000000000000001a2f455a6f84917c67523c271200000000000000000000000000000000000000000000000f24394e64798e8a745645321e090000081825303542443633291b0d00000e24394e63798e87725d47321d080000000000000000000000000000000f24384c5e6669635b4935210c000000000000000004182a3a4f647a8f8976614c3621110000000000000000000000000000000000000b21364a5c7085957f6a5544311d0800000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000000071c30435472888f79644f3a240f00000000000009141d202424201d150a0000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a7f69543f2a140e1b29394b5d6f84937e69533e291400192f44596e848c77624c37220d00000000000000000000000000000000000000000000091d3145566b80917c66513d2c1a0600000000000000000000000000000000000000000008131c2c353f4f606c819686776159473b2b1d0e00000000000000000000000000000000000000000000000000000000000000182d43586d82937e69533e2914000000000000000000000000000000000000000000000010263b50657b9088725d382816030000132536434a58594c46392b1d0f010e24394e63798e87725d47321d08000000000000000000000000000000091d2f404c51544e493d2c1a0600000000000000000a1f3447596d8297826c5846331f0a000000000000000000000000000000000000071a2d3e52677d928874604b35200f00000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000000071c30435473888f7a65503a25100000000000000001080b0f0f0b0902000000000000000000000011263b51667b9087725c47321d0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0a0000000000000000000000000000000000000000000000000000000000081d314455748a806a55402b161e2c394657657a8d8a77624c37220d00192f44596e848c77624c37220d00000000000000000000000000000000000000000000021527384d62778a846f5b4935210b00000000000000000000000000000000000000000000031729394b5d697e9388786259473a2a1d0d0000000000000000000000000000000000000000000000000000000000000000162c41566b8195806a55402b15000000000000000000000000000000000000000000000012273d52677c9286705b46311b0000071c304354606d6f6157483b2c1f100e24394e63798e87725d47321d080000000000000000000000000000000012222f383c3f39352c1f0f0000000000000000011426364c61778a8e79644e3a291704000000000000000000000000000000000000000f20364b607588917c67513d2c1a06000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000000000000b20354a60758a8e79644f39240f000000000000000000000000000000000000000000000000000011263b51667b9087725c47322020202020202020202020202020202020202020202020202020200a04000000000000000000000000000000000000000000000000000000011426495e7389806b56412b28323c495761758796806b5947341f0b00192f44596e848c77624c37220d00000000000000000000000000000000000000000000000a203448596e838b78634e392816030000000000000000000000000000000000000000000a1e334657657b8c8b7a645a483a2a1c0d00000000000000000000000000000000000000000000000000000000000000000014293e54697e93826d583625130000000000000000000000000000000000000000000000152a3f556a7f94836e59432e1904000b20354a60728284756259493d2e201224394e63798e87725d47321d080000000000000000000000000000000004121d24262a23211a0f010000000000000000081c3043546a7f9485705c4a361b0b0000000000000000000000000000000000000000091d3245566b8096846f5b4935210b000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000000000000c22374c61778c8c77614c37220c000000000000000000000000000000000000000000000000000011263b51667b9087725c47353535353535353535353535353535353535353535353535353535351f170c0000000000000000000000000000000000000000000000000000001e33485d7388816c57423438454b5a6275849a8574604b3b2a180500192f44596e848c77624c37220d000000000000000000000000000000000000000000000005182b3b50657b90816c5746321e090000000000000000000000000000000000000000061a2c3d4b617587937e685c4a3c2b1c0c0000000000000000000000000000000000000000000000000000000000000000000010263b50657b9086715443301c0700000000000000000000000000000000000000000002162838586d8295806b55402b1600000c21364b617685998577635b4b3e2f2224394e63798e87725d47321d08000000000000000000000000000000000000090f11140e0c06000000000000000000000b20354b607387927d67523e2d1a000000000000000000000000000000000000000000021528384d62788b8d79634e392816030000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d0700000000000000000000000000000004182a3b51677c9188735847331f0a000000000000000000000000000000000000000000000000000011263b51667b9087725c4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a33291c0c00000000000000000000000000000000000000000000000000001d32475c7287826d583b484c56606a78859a8878635645311d0d0000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000d23374b5d71868975614b36211100000000000000000000000000000000000000000c2135495b6c8196836f604e3e2d1e0e00000000000000000000000000000000000000000000000000000000000000000000000d22384d62778d8974604a35200b000000000000000000000000000000000000000000091e3245567186927c67523d271200000a1e324657617583978779645c4c403124394e63798e87725d47321d08000000000000000000000000000000000000060b0d100c0a0300000000000000000006192c3c51667c918875604b36200f000000000000000000000000000000000000000000000a2035495a6f8496816c5746321e090000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d07000000000000000000000000000001111f3447596d8297836e583a2a1804000000000000000000000000000000000000000000000000000011263b51667b90877260606060606060606060606060606060606060606060606060606060605e463a291704000000000000000000000000000000000000000000000008091531465c7186836e595259626a757f8b978678635a49382715000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000081c2e3f53687e937e68533f2e1c08000000000000000000000000000000000000021628384e63798b8a78624d423120100000000000000000000000000000000000000000000000000000000000000000000000000b2034485a73888e79634e39230e0000000000000000000000000000000000000000000b21364b60758a8d78634e38230e000003162939465760738195897a665e4e4233394e63798e87725d47321d0800000000000000000000000000000000000e19202325211e170b00000000000000000c2035495a6f8495806b5645321d090000000000000000000000000000000000000000000006192b3c51667b908975614b3621100000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d070000000000000000000000000309151d30404c617789917c66513c271100000000000000000000000000000000000000000000000000000011263b51667b9086757575757575757575757575757575757575757575757575757575757575705846331f0a00000000000000000000000000000000000000000009101b222731455b7085846f61686f778088948c8276625a493c2c1a0a000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000001121364b61768986715d4b37230d000000000000000000000000000000000000091e3245566c8296816b5a483424140200000000000000000000000000000000000000000000000000000000000000000000000005192b3c596e83937e685338281602000000000000000000000000000000000000000010253a50657a8f88735b4935210c0000000b1b29394555606d80938a7c68605043394e63798e87725d47321d0800000000000000000000000000000007151e2b35383b3633291b10020000000000031628384d63788c8b78624d3828150200000000000000000000000000000000000000000000000e20354b607387937d68533f2e1b0800000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d080808080808080001080b0d10161e2731404c5e6d82978773604b35200b00000000000000000000000000000000000000000000000000000011263b51667b908f8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a76614c36210c0000000000000000000000000000000000000005121d242e3737444b5a6f848470767d848b958e857a6d6158483c2c1e0e00000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000a1e3246576c818f7a65503b2b180500000000000000000000000000000000000b21364b6075898b78624d3c2b1906000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93836e5645321e090000000000000000000000000000000000000006192b3c556a7f95836e593d2c1a06000000000b1b2837444b626a7e8c8c7e6a614b434e63798e87725d47321d080000000000000000000000000000011525333c494d504c46392d20100000000000091e3245566b8196846f5a48351a0a000000000000000000000000000000000000000000000000081c3043546a7f9486715d4b37220c00000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c47321d1d1d1d1d1d1d1d1d151d202225283237444b5e667c8c917c665544311d0800000000000000000000000000000000000000000000000000000010253a50657b868787878787878787878787878787878787878787878787878787878787878675614b36210c0000000000000000000000000000000000000e19202f383f4b4f5560666e8387838a929189827970645c4c463a2b1e0e0000000000192f44596e848c77624c37220d00000000000000000000000000000000000000000000000000031629394e63798b836e594834200a000000000000000000000000000000000011263b50667b9085705a48351d0d00000000000000000000000000060c0e0f0d0700000000000000000000000000000000000000000e23384d63788d8975604b36210e000000000000000000000000000000000000000b2035495a7186927d67523d28120000000000000a192731435060687c8b927f6c60544e63798e87725d47321d0800000000000000000000000000000f1f3343505a626561574a3e2d1b07000000000b21364b607589907b66503c2b1900000000000000000000000000000000000000000000000000011426364c61778a8f7a654f3b2a1804000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c4733333333333333333333273135383b39464b55606a7c8b97816c5e4c372614010000000000000000000000000000000000000000000000000000000e23374b5d657171717171717171717171717171717171717171717171717171717171717171615746331e0a0000000000000000000000000000000004121e2b35404c515d656c757b828b9d9289837c756d645c4f4b3e33291c0e000000000000192f44596e848c77624c37220d00000000000000000000000000000000000000000000000000000b2135495b6f848a77624d3827150200000000000000000000000000000000152a40556a7f95806b553c2b19000000000000000000000000010f1a212324221b10020000000000000000000000000000000000000c2035495a7186917c66513c2b19050000000000000000000000000000000000011527374d62788d8a76614c36210c0000000000000009151d33424e5e667b89948172605663798e87725d47321d0800000000000000000000000000061a2c3d50616a787a76645c4a362208000000071b2e3e53687d928773604a35200e0000000000000000000000000000000000000000000000000000081f3347586d8298826d5947341f09000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725c484848484848484848484837444b4d5054576168747f8b958273604b402f190900000000000000000000000000000000000000000000000000000000081c2e3f4b505c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4b46392917030000000000000000000000000000000412222f3c484d5e66707a81899192978a7d766e6660564e4a3e372e1f170c00000000000000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000000061a2c3d51667c91806a5645311d0900000000000000000000000000000003182e43586d83917c67513c27120000000000000000000000000f1f2c35393a362d201000000000000000000000000000000000000006192c3c54697f94846e5a4835200e0000000000000000000000000000000000081d3144556b8095836e5846331f0a000000000000000001152431404c5c6479879782746163798e87725d47321d08000000000000000000000000000c2135495b6a7f8b90887a644f3625130000000d22364a5c7186947f695443301c07000000000000000000000000000000000000000000000000000004182a3a4f647a8f8a77614c372614010011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b9087725d5d5d5d5d5d5d5d5d5d5d5d5e55606265696e767d86948c807260554431221200000000000000000000000000000000000000000000000000000000000011212e373a47474747474747474747474747474747474747474747474747474747474747473633291b0b00000000000000000000000000000001122230404c5a626f7c858f958d857d8188736157514b4538362d221b10040000000000000000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000000000f20354b6074878875604b362010000000000000000000000000000000051a2f445a6f848f7a65503a2510000000000000000000000009192c3d494e4f4a3e2d1b070000000000000000000000000000000000000e21374c61768a8b78624d3c2c1906000000000000000000000000000000021628384b607488907b65503a2917040000000000000000000614222f3e4b5b63778598847663798e87725d47321d08000000000000000000000000000e23384e63788c9fa69b86715443301c070004172a3a4f647a8f8a77614c362513000000000000000000000000000000000000000000000000000000000c22374b5d7186947f6a5544311d080011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9088725d48331d0011263b51667b908672727272727272727272727272737475777b7f8489928e847a6b6054443726140400000000000000000000000000000000000000000000000000000000000003111c23253232323232323232323232323232323232323232323232323232323232323232211e170b000000000000000000000000000000000f1f30404c5e6678849194888078706b8089745f4639363228211a0f0800000000000000000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000000081d3144556a7f927c67523e2d1b070000000000000000000000000000051a2f445a6f848f7a654f3a25100000000000000000000002152737495b63645c4a36220d0000000000000000000000000000000000000a1f3347586d8297816c5a493520140300000000000000000000000000000d1e324556687e9386715d4b381b0b00000000000000000000000412202e3d4959627584988677798d87725d47321d080000000000000000000000000011263b51667b90a7b49f8975604a35200b000a1f3347586d8298826d584733180800000000000000000000000000000000000000000000000000000000081b2e3f53687d938774604b35200b0011263b51667c9087725c47321d070000000000000000000000000000000000000000000000000011263b51667b9087725d48331d0011263b51667b908b8788888888888888888888888888898a8d90918d88817970645c4b4336261909000000000000000000000000000000000000000000000000000000000000000000080e101c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0c0a030000000000000000000000000000000009192d3d4c5e667c899a897f756b635b6a7f8a75564532201d150a07000000000000000000000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000000011426374c61778a85705c4a36220c000000000000000000000000000003182d43586d82917c66513c271100000000000000000000081d31445563797a644f3a240f00000000000000000000000000000000000004172a3a4d62788a8b78624d42312110020000000000000000000000000d1d2e3e4b607587917c66513f2f1c0000000000000000000000000002101f2c3b485761738296877b9087725d47321d08000000000000000000000000000c22374c6177899c9f98836e5443301c07000c21374c6177898f7a644f3a2a170000000000000000000000000000000000000000000000000000000000001021364b617589917c66513c26110010253a50657b86836e59442f19040000000000000000000000000000000000000000000000000010253a50657b86846f5a452f1a0010253a50657b868787878787878787878787878786868584827f7c78726c645c4f4a3e30261809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374a5b667c8b9784776a61574d54697e8b76604b36210b020000000000000000000000000000192f44596e848c77624c37220d00000000000000000000000000000000000000000000000000000000091f3347586d828e79644e3a2a17040000000000000000000000000001162b40566b80947e69543b2a18040000000000000000000b20364b60748a86715c47311c070000000000000000000000000000000000000c2035485a6b8196846f604e3f2e201204000000000000000000020f1d2b3b4b5c6b809585705e4d3921110000000000000000000000000000010f1d2a39465560728093899c87725d47321d08000000000000000000000000000a1f334758657b86898376614c362513000012273d52677d86816d5c4b371c0c000000000000000000000000000000000000000000000000000000000000091e324657687e86816c56412c17000e23374b5d65716e6554402c1702000000000000000000000000000000000000000000000000000e23374b5d65716f6554412d18000e23374b5d6571717171717171717171717171717171706f6d6a67625a574e4a3e362d1c14080000000000000000000000000000000000000000000000000000000000000000000000060b0d1e1d1b140b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445563798b97817262594b463953687d8c77614c37220c000000000000000000000000000000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000000000004182a3a4f647a8f826d5847331f08000000000000000000000000000011263b50667b90846f5947341f10000000000000000009192c3c4f647a8f836e59442e190400000000000000000000000000000000000005192b3c4b617587937e685d4b3e301f170c060000000000040a151d2d3b4859647a8c8b79634e40301d03000000000000000000000000000000000d1b29374454606b7e8d9c87725d47321d080000000000000000000000000004182a3a4b5d6571756e61584733180800001025394d5f67716d63523e2e1b00000000000000000000000000000000000000000000000000000000000000031628394e6068716c63513e291500081c2e3f4b505c5954473624110000000000000000000000000000000000000000000000000000081c2e3f4b505c5a544737251200081c2e3f4b505c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5b595855514d483c39362d221b100100000000000000000000000000000000000000000000000000000000000000000000000e19202334322f281d0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6073859882726054483b323d52677c8d77624d38220d000000000000000000000000000000192f44596e848c77624c37220d00000000000000000000000000000000000000000000000000000000000c22364a5c70868a76614c36261401000000000000000000000000000b20364b6075898a77614c3f2e1e120700000000010a182637495a6c81937e68533e291300000000000000000000000000000000000000000e1e324657657b8c8b7b655c4c40332a20191412111113181f28323e4a59627788947f695b4a3622120000000000000000000000000000000000000b192736434a60697d8a87725d47321d0800000000000000000000000000000c1c2e3f4b505460544c473a29170000000a1e30414d525c57524535201000000000000000000000000000000000000000000000000000000000000000000b1b31424e535c56514434220e000011212e373a4744403629190700000000000000000000000000000000000000000000000000000011212e373a47454137291908000011212e373a47474747474747474747474747474746464442403c38352b24221b10070000000000000000000000000000000000000000000000000000000000000000000000000e1e2b35384948443a2d1d0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000317293952687d928876615443362b263c51667b8e78634e39230e000000000000000000000000000000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000000000000071b2e3e52687d927f695443301c0800000000000000000000000000091d3145566b8196816c5d4b3c2f221b12110f10141c2836445563788a8a76614c36210c0000000000000000000000000000000000000000031629394b5d687e93897a665e4c473a352c29272627282a3438454b5c64778698826d614f3d2d1a040000000000000000000000000000000000000009182530424f5f677777624c37220d0000000000000000000000000000000011212e3736434a433633291c0c00000001132330393d47423f352717020000000000000000000000000000000000000000000000000000000000000000001424313b3e47413e34261605000003111c2325322f2c24190b0000000000000000000000000000000000000000000000000000000003111c2325322f2d25190b00000003111c232532323232323232323232323232323131302f2d2a272320190f0d070000000000000000000000000000000000000000000000000000000000000000000000000006192b3c494d5e5d574b3a28140100000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346577085937e685847362518263b50657b8e79644f39240f000000000000000000000000000000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000000000000001020364b6075888773604b35200e00000000000000000000000000021527384c6176898c7a645b4c40362d282624262630384554607384947f6a5746331e0a0000000000000000000000000000000000000000000b1b2e3f4e606a80938a7c6c61584d493c3e3c3b3c3e3a474c56606a7a87988374604b43321f0f00000000000000000000000000000000000000000008131c32414d5861625948341f0b0000000000000000000000000000000003111c2325303530251f170c000000000005131e2527322d2a2317090000000000000000000000000000000000000000000000000000000000000000000006141f2629312c292216080000000000080e101c1917110700000000000000000000000000000000000000000000000000000000000000080e101c1a181208000000000000080e101c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1a1815120d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035495a6273726957442f1b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a8a77614c3a29180f253a4f647a8f7a65503a2510000000000000000000000000000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000000000000091d3245566b80907b66513c2c1906000000000000000000000000000a1f334658677d8d8979665e4f4a3e3d3b3a3b36434b56607281978573604b39291703000000000000000000000000000000000000000000001121314250616a7e8c9181766b635a57535150515356596169757f8b9282736056453125140100000000000000000000000000000000000000000000001423303a474c4c483b2a18050000000000000000000000000000000000000808131c201c13080400000000000000010a10121c18150f06000000000000000000000000000000000000000000000000000000000000000000000000020b11131c17150e050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788987725d48321d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798f85705847331c0c0f24394e64798e7b66503b2611000000000000000000000000000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000000000000021528384d62788a846f5a4935200a000000000000000000000000000417293a4d5f6a7f93897c6e645c5752504f50525460677582978576615544311b0b000000000000000000000000000000000000000000000003142433435061697b8794898078726c69676666686b70777f87948a7e6d6055453827150600000000000000000000000000000000000000000000000005121c2a333737342a1d0d00000000000000000000000000000000000000000000070b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191c1e12100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000011273c51667c91836e583a2a17000e23384d63788d7c67513c2712000000000000000000000000000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000000000000000a2035485a6e838b78634d39281603000000000000000000000000000c1c30414f616a7e8a8d8379716c67666465676c747c879384766158473726140000000000000000000000000000000000000000000000000006152533424f5d65757f89928d87817e7c7b7c7d81858a948a827768604b4437271a0a0000000000000000000000000000000000000000000000000000000c171f21221f180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f2018161006000000000000000000000000000000000000000000000d1b262e313427251d13050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92816c56412c17000d22374d62778c7d67523d2812000000000000000000000000000000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000000000000000005192b3c50657b90816b5745321e090000000000000000000000000000122332434f606879848f8e87817d7b797b7d818891897e726158473a2a19090000000000000000000000000000000000000000000000000000071524323f4b56606a757d84898e91919091918e8a857f776c62594e423127190a0000000000000000000000000000000000000000000000000000000000040a0c0d0b0500000000000000000000000000000000000000000000000000000000000000020b1113201a181208000000000000000000000000000000000000000000000000000000000000000000000000040d14162019161006000000000000000000000000000000000000000000000000000000000000000002101b2224352d2b2317090000000000000000000000000000000000000000091b2b394246493c393023130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91816c57422c17000c21364c61768b7e68533e2913000000000000000000000000000000192f44596e848c77624c37220d00000000000000000000000000000000000000000000000000000000000000000e20354a6073878975604b362110000000000000000000000000000005152532424e5c646f7a82888d90908f90908a867f76696054473a2a1c0c000000000000000000000000000000000000000000000000000000000614212e38454b5660676e75787c7d7e7d7c7976706961594c483b311d150900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006131e262835302d251a0c00000000000000000000000000000000000000000000000000000000000000000000081621282b352e2b23180a0000000000000000000000000000000000000000000000000000000000000010202d36394a423f352717060000000000000000000000000000000000000013263949565b5e524d41301b0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798f836e593c2c19060b20354b60758a7e69543f291400000002090b0d0b05000000000000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000000000000000000071c304354697e937d68533f2e1b080000000000000000000000000000071524313d4a4e5c646d73787b7d7e7d7b77716a61574a43362a1c0c00000000000000000000000000000000000000000000000000000000000003111a283238454b525560636668696867646057544c473a342b1d13010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1317140b09020000000000021324313a3d4a4541372a1a030000000000000000000000000000000000000000000000000000000000000000001626333d404a433f362818060000000000000000000000000000000000000000000000000000000000071b2d3e4a4f6058524535231000000000000000000000000000000000000005192e4256677173675f4d39291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61778a87725a4935200c081d314455748a7f6a55402a1500000a151d202220180d0000000000192f44596e848c77624c37220d0000000000000000000000000000000000000000000000000000000000000000001325364c61768986715d4b37220e00000000000000000000000000000006131f2d363e4b4f585b6366676968666259544b46393025180c0000000000000000000000000000000000000000000000000000000000000000000a161e28323637444b4e51535453524f4b453937342a20180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d20292c29211e160a000000000b1e31424e53605a554837211100000000000000000000000000000000000000000000000000000000000000000b1b334450556058534636231000000000000000000000000000000000000000000000000000000000000d22364a5c70756d64523f2b16010000000000000000000000000000000000061c31465b7185897d675746331e0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475870858d78634d3a2917041527495e7489806b56412b16000e1a28323637342b1d0d00000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000000000000000000081e3346576c818f7a654f3a251000000000000000000000000000000000010f1a212e373a3c494d50525452504c483b3633291c13080000000000000000000000000000000000000000000000000000000000000000000000030a161e21273135393c3d3e3e3c39363228221f180c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2731363e413e3632281a0a00000011263a4e6068756f66553f2e1c080000000000000000000000000000000000000000000000000000000000000417293a50626b756e64533f2b1600000000000000000000000000000000000000000000000000000000000f24394f647a8a826d58422d180300000000000000000000000000000000000011263b51667c908976614b3a2917040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a556a7f947f6a5847331f131e33485d7388816c57412c17111e2b38454b4c483b2b1c0c000000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000000000000000000031729394e63798a836e58432e1903000000000000000000000000000000000007101b22242c35383b3d3e3d3b37342a211e170b00000000000000000000000000000000000000000000000000000000000000000000000000000002090b151d2023272829282724211e160c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182738454b5357534b4538281a0a000013283d53687d8a846f5d4b37230d0000000000000000000000000000000000000000000000000000000000000a1f3346586b808b826e58432e1900000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d18030000000000000000000000000000000000000f24384c5e7085947f6a5846331f0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f00040a0c1013141413120f0b090200000000000000000000000000000000000000000000000000000000000c22374c6177898976614c4230251832475d7287826d58422d181f2f3c4856606259483a2a17040000192f44596e848c77624c37220d000000000000000000000000000000000000000000000000000000000000000000000b2135495b63797d67523d28120000000000000000000000000000000000000000070d0f1921232628292826221f180d0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e11131413120f0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636455660686c6960564538271502000b21364b6075898f7b65503b2a180500000000000000000000000000000000000000000000000000000000000c21364c61768a8f7a654f3a251000000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d1803000000000000000000000000000000000000091d2f4050657b908976614c3a29170400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0c171f212528292a292724201d150b090300000000000000000000000000000000000000000000000000000a1f3347586b8095826d604a43362c31465c7186836e58432e2a343f4b5a627577625847331f0a0000192f44596e848c77624c37220d00000000000000000000000000000000000000000000000000000000000000000000061a2c3d4a5b63675f4d3a25100000000000000000000000000000000000000000000000060c0e11121413110d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c30435460747e817e74605645311d0900091e3245576c8196836e5948341f0900000000000000000000000000000000000000000000000000000000081c2e3f54697e9386715d4b37230e00000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d1803000000000000000000000000000000000000001223384c5e7085957f6a5847331f0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f212a33373a3d3e3f3e3c39363228211e160a0100000000000000000000000000000000000000000000000004182a3a4b617585937e6a6054493d35465b7085846f5944363a474c5d6578868977614c37210c0000192f44596e848c77624c37220d00000000000000000000000000000000000000000000000000000000000000000000000f1f2d3d4a4e524d41301e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f13151718171614110d0b050000000000000000000000000000000000000b20354b6073849396938574604b36200b00031628394e63788c8a77624c372614010000000000000000000000000000000000000000000000000000000e23374b5d7186937e68533f2e1c0800000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d180300000000000000000000000000000000000000091c2f4050657b8f8976614c3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e492a33373a474c4f52545453524e4b45383632281d14090000000000000000000000000000000000000000000000000c1e3246576278888d8072635b504b445a6f84856f5a3d4a4e59616c7b8894816c5847331f0a0000192f44596e848c77624c37220d0303030000000000000000000000000000000000000000000000000000000000000000010f1f2d36393d3a302313010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e111416171817161513100d0b050000000000000000000000000000000000000000000000000000050b0d141c2024282a2c2d2d2c2a272220190f0d0700000000000000000000000000000010253b50657b90a2aca3927d67523d271200000a2135495b6f84947f6a5544311d08000000000000000000000000000000000000000000000000000005182b3b50657b908976614b3621110000000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d180300000000000000000000000000000000000000001123374b5d6f8495806b5847331f0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e493a474c545861656869696867646056524b45383126190e000000000000000000000000000000000000000000000003162839485a6379879583796d656055596e8386705b585b636c77818c8c7f6c62513a2a17040000192f44596e848c77624c372218181818100e09000000000000000000000000000000000000000000000000000000000000010f1a212328251e13050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d141d2023272a2b2c2d2c2b2a2825222018130c0a040000000000000000000000000000000000000000070d181f22263035393d40414242413f3c38342b24211a0f080000000000000000000000000012273d52677c92aabbab947f69543f2a140000061a2c3d51667c918774604b35200e00000000000000000000000000000000000000000000000000000b203448596e8397816c5746321e0a0000000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d18030000000000000000000000000000000000000000081c2e3f4f657a8f8976614c3a2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e454b58616971767a7d7e7f7e7c79756f6860564b44372b1e1002000000000000000000000000000000000000000000000b1b2b3c4a5b637683908b827a756e6c6d8386716b6d7379818994877b69615144341c0c000000192f44596e848c77624c372d2d2d2d2d26231c1103000000000000000000000000000000000000000000000000000000000000070c0e12100a0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090d182022263135393c3f4141424241403d3a37342b28211f170b080000000000000000000000000000000006101b222a343736434b4f52555657575654514d483c39362d231c110400000000000000000000000e23384d63788b9faa9f8c7a644f3a240f0000000e20354b607487917c66513c2b1906000000000000000000000000000000000000000000000000011426374c62778a8e79634e392916030000000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d18030000000000000000000000000000000000000000001122374b5d6f8495806b5947341f0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e56606a767f868a8f8e8d8d8e918e89847d75686055483c2d201001000000000000000000000000000000000000000000000e1e2d3d4a58616f7b8590908983817e84887e8082888e91887f75655d4f4334261600000000192f44596e848c77624c4242424242423b382f211100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008111c232b343737444b4e515456575757565553504d483b3d363329231c1108000000000000000000000000000e19202e363b484c53546064686a6c6d6c6b6966625a564e4a3e372e1f170c000000000000000000000c2035495a687e8b8f8b7f6a5c4b37220d000000081d3144556a7f95846f5a4935200a000000000000000000000000000000000000000000000000081d3144556a7f9585705b4a361b0b000000000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d1803000000000000000000000000000000000000000000081b2e3f4f647a8f8a77614c3b2a180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745a62747f898a85807c797878797c7f858a92887e73625a4a3e2d1f0f00000000000000000000000000000000000000000000000f1f2d3a474c5e65717b82878c8f91999d918f8c88837c746960564b3f3225160800000000192f44596e848c776258585858585858504c3f2f1c09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1013141516161513110e0b0801000000000000000000000000000000000000000000000000000000000000000000000000000004111c232f383b484c5455606366696b6c6d6c6b6a6865625958524c463a372e221b100400000000000000000005131e2b353e4a4f5962686e74797d7f818282817f7c77726c645c4f4b3f33291c0f01000000000000000006192c3c4e6068777a776a614f3e2e1b07000000011426374c62778a8b78624d3828150200000000000000000000000000000000000000000000000b20354b607487917c67523d2d1a00000000000000000000000000000000000000000000000000000000000000000f24394f64798e826d58422d1803000000000000000000000000000000000000000000001022364a5c6e8396806b5948341f0d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89746378868b8178706a6664636364666a6f77808a938578645c4a3d2d1c0c00000000000000000000000000000000000000000000010f1c2933404c505d656d72777a7c838b7d7a77736d6760564b45382e2114070000000000192f44596e838c776d6d6d6d6d6d6d6d655d4c38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c13181f2225282a2a2b2b2a292623201d150e0c06000000000000000000000000000000000000000000000000000000000000000000000c171f2e37404c505962696f75797c7f80818281807f7d7a77736d6861584f4b3f372e1f170b00000000000000011323313c494d5c646e777e83898e92929190909193918d87817970655d4c473a2d1f110300000000000000000e1e31424e59626562594f433220100000000000091f3448596e8395806b5645321d090000000000000000000000000000000000000000000006192c3c51667c918874604b36200f00000000000000000000000101010101010101010101010101010101010101010f24394f64798e826d58422d180301010101000000000000000000000000000000000000071b2d3e4e64798c8a77624c3b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d8974798885796b625a55514f4d4e4f515559626a778395887a645b4a3a2a170400000000000000000000000000000000000000000000000c171f2f383f4b50575961646a7f8c7565615958514b453832281a1103000000000000192f44596e83988282828282828282827b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000080b171e21282a34373a3d3f4041403f3e3b3835312723211a0f0902000000000000000000000000000000000000000000000000000000000002101c2a333f4b505e666f777e84898e919391908f8f9091928f8c88827d766e655d4f4b3f33291b100200000000000b1e31414e5a626e7a838a93908984817d7c7b7b7c7e81858a938e857a6d61584a3d2e21110100000000000000001424313b474c504c483b32251502000000000005182a3b50657a8f8875604b36200f000000000000000000000000000000000000000000000c2035495a6f8495806b5544311d0800000000000000010a10121616161616161616161616161616161616161616161624394f64798e826d58422d1816161616160f0d07000000000000000000000000000000001021364a5c6e8396816c594834200d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d8977888375635b4d483c3c393838393c3b474c59626f80958a79635847331f1100000000000000000000000000000000000000000000000004111c232e373b3a474c54697e8b76604c473b3c3631271e160a0000000000000000172c41566c8186868686868686868686806b56402b160000000000000000000000000000000000000000000000000000000000000000000000000007101b222933363d3b484c4f52545556555453504d4b443739352c201d150a0100000000000000000000000000000000000000000000000000000412202d3a474c5d65717b848b948f8984817e7b7a797a7a7b7d8083888d928a837a70645d4c463a2d2013050000000011253a4e5f6878838f948a827b756f6b6867656566696c70777e87928f8276645c4b3f2e200f000000000000000006141d2a34373a37342b1d1507000000000000000d23374b5d7186927d67523d2d1a070000000000000000000000000000000000000000021628384d63788c8b78624d3727150200000000000005121d25272b2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c394f64798e826d58422d2c2c2c2c2c2b24221b10020000000000000000000000000000071a2d3e4e63798c8a77624d3c2b19050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d8a8585746157493d352b2724232324272a343b484c626a7f958776614c402f1c090000000000000000000000000000000000000000000000000009111c23252a343e53687d8c76614c372a27201d150a0300000000000000000014293e51626c717171717171717171716b62513d2814000000000000000000000000000000000000000000000000000000000000000000000003101b222e3739464c525859626568696a6b6b6a6866636055554e493d3632281d1409000000000000000000000000000000000000000000000000051322303e4a58616d7b85909388817a756f6b68666564646566686b6e73787e858e8f857a6c61584a3e3023140600000013283d52687d8a96897f766d6660565653515050515357586168747d8798877a655d4b3e2d1c0c0000000000000000000d181f22252220180d000000000000000000081c2e3f53697e9385705b4a36210b000a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a091e3245566b8096836e594834190900000000000000122330393c4141414141414141414141414141414141414141414141414f64798e826d58424141414141414139362d20100000000000000000000000000000000f21364a5b6e8396816c5a4834200e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d9d8877615646392c2019110f0e0e0f11181f2a344350616e8398836e5e4c382311000000000000000000000000000000000000000000000000000000080e1018283d52677d8d77624d3822120b090200000000000000000000000e22344451565c5c5c5c5c5c5c5c5c5c56514433210e000000000000000000000000000000000000000000000000000000000000000000000b171e2e363e4b4f5761686d72777a7d7f7f80807f7e7b78756f6a635b534b4538312619100200000000000000000000000000000000000000000003132330404d5c6476828f94877e756c656055565351504f4f50515356595a62697079838c8c8176645c4d4132241400000010253b50657b8781766a6158514b45383d3c3b3b3c3e3a474c5560677683958a7b655c4a3a291704000000000000000000050b0d100d0b0500000000000000000000001121364b6176898e79634e39291720202020202020202020202020202020202020202021364b607588907b65503b2b1900000000000000081830414d525656565656565656565656565656565656565656565656565664798e826d5856565656565656564f4a3e2d1b070000000000000000000000000000071a2d3d4e63798b8b78624d3c2b190600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d907b66594738291b0f05000000000000050d181f33434d627789907b65503f2f1c08000000000000000000000000000000000000000000000000000000000012273c51677c8d78634e38230e0000000000000000000000000000051626343e4146464646464646464646403d332616040000000000000000000000000000000000000000000000000000000000000000010f1b29333e4a4f5c646e767d83888c8f92929190919293908d89847f79716860564b44372e2014010000000000000000000000000000000000000001112130414d5e667a87988b7f746860564f4b44373e3c3b3a3a3b3c3e403c484d545c646e7a8696877a675f4f4232180800000e23384b5d65736b61584c473a3632282827262627292a3337444b58617280958a7a645847331f100000000000000000000000000000000000000000000000000000000a1e3346576c8197816c574633353535353535353535353535353535353535353535352d3e52677d928773604a35200d000000000000001325364d5f676b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b7a8e826d6b6b6b6b6b6b6b6b6b645c4a36220d0000000000000000000000000000000f2135495b6d8297816c5a4835200e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e4c3a2a1a0b00000000000000000000051520344859697e9386715d4b37230a000000000000000000000000000000000000000000000000000000000011263b50667b8e79644f39240f000000000000000000000000000000081622292c313131313131313131312b28211608000000000000000000000000000000000000000000000000000000000000000004121f2d39464c5c64707a838a92908a85827f7d7c7b7c7c7e8184898e948e867e756960554b3e321d15090000000000000000000000000000000000000f1f2f3f4d5f677c8b9886796a60564b453836312729262524252526282b2b35383e4a4f5d657481918b7d69604f3625130000081c2f3f4b505d564c463a3329211e16131210101114171f26313a4754606d81978776614c3e2e1b080000000000000000000000000000000000000000000000000000031729394e63798e8976614b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a5c7085947e695443301c07000000000000071c304354677d8081818181818181818181818181818181818181818181818181829886808181818181818181807a644f39240f000000000000000000000000000000061a2c3d4d62788b8b78624d3c2c1906000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e402f1c0c00000000000000000000000005182b3b4b607488907b655038281502000000000000000000000000000000000000000000000000000000000f24394f647a8e7a654f3a251000000000000000000000000000000000050e14171c1c1c1c1c1c1c1c1c1c16140e0400000000000000000000000000000000000000000000000000000000000000000512222f3d4a57616c7a848f9389827b76706d6a6867666667696c6f74797f868f93887e73645c4f43312719090000000000000000000000000000000009192c3d4c5d677d8c978275635b4b45383228201d151311100f0f101113161920222d363f4b56606c7d8a8d7e695443301c07000011212f383b48413633291f170c09020000000000000409141d2a36434b60748497826d5c4b37220e000000000000000001080b110d0b050000000000000000000000000b21364a5b7085937e685f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f64798e8a76614c362513000000000000000b20354a60748996968c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c909a988c8c8c8c8c8c8c8c8c8c816c57422c17000000000000000000000000000000000f2035495a6d8297826d5a4935200e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f00000000000000000000000000000d1d3144556c8196826d5645321d09000000000000000000000000000000000000000000000000000000000b20354a60727a76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003122330404c5b6376818c94877e756d6560575855525151515254565460636a717a848f93867a69614b4437271909000000000000000000000000000001152737495b657b8c9781726056493c31271d150b0802000000000000000000050b101b222e38454b5f677a888373604a35200b000003111c2325332c211f170c040000000000000000000000010c182531445563798b8f7a644f3c2c190600000000000008141c20262220180d0000000000000000000000071a2d3d52677c9286757575757575757575757575757575757575757575757575757575758197826d584733180800000000000000071c3043546e8398827777777777777777777777777777777777777777777777777c90827777777777777777777776614c36210c0000000000000000000000000000000006192c3c4d62788a8b78634d3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000021527374e64798e8975604b36200b00000000000000000000000000000000000000000000000000000000071c3043546064615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000071117191b1b1b1b1b1b1b1b1b1b12100a0100000000000000000000112130414d5e667987978a7e74686056504b45393f3d3c3b3c3d3e36434a4e545d646f7a86958c7f6d6055443727150200000000000000000000000000081d314455637989988272605445382c1d150a0200000000000000000000000000000007101a2731414d5c647672605443301c0700000000080e101e160c0a0400000000000000000000000000000008152737495b6c8197846f5b4935210c000000000008182630353b37342b1d0d00000000000000000000000f20364b6075888f8c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b978e7a644f3a29170000000000000000001325364b617586917c6662626262626262626262626262626262626262626264798e826d626262626262626262615746331e0a00000000000000000000000000000000000e2035485a6c8197826d5b4935210f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000921364a5c72878f7a65503a25100000000000000000000000000000000000000000000000000000000000132536434a4f4c473a2917040000000000000000000000000000000000000000000000000000000000000000000000000a18242c2e3131313131313131313128251e130500000000000000000e1f2f3f4d5f677c8a9784786960554b45383632282a282726272729253035393f4b4f5c6473808d948273605544311d1502000000000000000000000005192b3c4b6073859b857460544336281a0e02000000000000000000000000000000000000000a151d303e4a5761605443362513000000000000000008010000000000000000000000000000000000000009192c3d4c62778a8d78634d38230e0000000001142636434b504d483b2b180500000000000000000000091d3145566b8095898283838383838383838383838383838383838383838383838383869b85705c4a361c0c000000000000000000081e32465763798a897862564c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4f64798e826d584c4c4c4c4c4c4c4c4c4639291703000000000000000000000000000000000005192b3c4d62778a8b79634e3d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000071a2d3d596e83957f6a55402a15000000000000000000000000000000000000000000000000000000000008182530353a3733291c0c000000000000000000000000000000000000000000000000000000000000000000000000071828364044464646464646464646463d3a3023130100000000000009192c3d4c5d677d8c958174625a4b44373228211e1615131211111214131c20242e373e4b55606a7c8a988273604b4332201000000000000000000000000b2035485a6a7f9589786256453626180a000000000000000000000000000000000000000000000212202d39464b4a43362518080000000000000000000000000000000000000000000000000000000000000e1f3448596e8395806a5539281603000000081c304354606662594834200b00000000000000000000021527384d62788b8a776e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e7287927d68523e2d1b00000000000000000000031629394a5b687d928574604b41373737373737373737373737373737394f64798e826d5842373737373737373633291b0b000000000000000000000000000000000000000e203448596c8196826d5b4936210f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000152a3f546a7f94836e59442e1900000000000000000000000000000000000000000000000000000000000008131c2025211f170c000000000000000000000000000000000000000000000000000000000000000000000000001124364653595b5b5b5b5b5b5b5b5b5b524d41301e0a000000000001152737495b657b8c95806c6055483c31271d150b09030000000000000000070b101b222e37444b5e667a8998826d614f3e2e1a0a000000000000000000061a2c3d4d62788b927d685a483828180800000000000000000000000000000000000000000000000002101b29333635302518080000000000000000000000000000000000000000000000000000000000000005182a3b52677c9285705745321e090000000b20354b60727b77624d37220d00000000000000000000000a2035485a6e83957f6a55585858585858585858585858585858585858585858657b908975604b36211000000000000000000000000b1b2d3d4e5f6d8296816c5f4d3c2c22222222222222222222222224394f64798e826d58422d222222222222211e170b000000000000000000000000000000000000000005182b3b4c62778a8c79634e3d2d1a07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000010263b50657b9087725c3828160300000000000000000000000000000000000000000000000000000000000000070b0f0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000172c4053646e70707070707070707070675f4d3a25100000000000081d31445563798996806b624b44372b1d15090200000000000000000000000000000810192731404c5c647a8b947f6a5c4b3828160200000000000000000c2135495b6d82988570604e3c2b1a0a0000000000000000000000000000000000000000000000000000000b171e21201c13080000000000000000000000000000000000000000000000000000000000000000000d22374d62778c8a76604b36210b0000000c21364c61768b7e68533e2813000000000000000000000005192b3c50667b908874604b43434343434343434343434343434343434348596e8396806b5645321e090000000000000000000000000f1f31414b607586917d675a493828160d0d0d0d0d0d0d0d0d0f24394f64798e826d58422d180d0d0d0d0d0c0a03000000000000000000000000000000000000000000000d1f3447596b8096836e5b4a362110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000f24394e64798e89745645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e44596e83858686868686868685857d67523d28120000000005192b3c4b607385998372604b443127190e0100000000000000000000000000000000000009151d2f3e4a5c677d928c7a645645321e0c00000000000000031628394e63788c907b655042311d0d0000000000000000000000000000000000000000000000000000000000030a0c0b0700000000000000000000000000000000000000000000000000000000000000000000000b2034485974898e79634e39240e0000000d22374c62778c7e69543e29140000000000000000000000000e20354a607387917c66513c2c2e2e2e2e2e2e2e2e2e2e2e2e2e2e26374c62778b8c78634d3828160200000000000000000000000001131e32455663798a8978635645321e1301000000000000000f24394f64798e826d58422d1803000000000000000000000000000000000000000000000000000000000005182a3b4c6177898c79634e3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000d22384d62778d8b76604b36210b0000000000000000000000000912191b1d1b140b00000000000000000000000000000000040a0c12171a1b1b14120c0300000000000000000000000000000000030d13150d0c060000000014293e53697e838383838383838384947f6a543f2a15000000000b2035485a6a7f958876615443301d15090000000000000000000000000000000000000000000111202e3e4d5f6d82978674604b3a2a1704000000000000091e3246576c819685705d4b3724130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3b5c7186917b66513c26110000000e23384d63788d7f6a553f2a15000000000000000000000000071c304354697f94846f5a4935201919191919191919191919191d3144556a7f95846f5a49351a0a000000000000000000000000000003162838495b677d918574604b41301f0f000000000000000f24394f64798e826d58422d18030000000000000000000000000000000000000000000000000000000000000d1f3347586b8095836e5c4a3622100000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000c21364c61768b8c76614c37210c00000000000000000000000c1a262d30322f281c0e00000000000000000000000000040c171f21282d2f303129272014070000000000000000000000000000071520272a2320190e00000012263b4f60696e6e6e6e6e6e6e6e7b907f6a543f2a1500000006192c3c4d62788b917c67584736261402000000000000000000000000000000000000000000000002102030414c617688947f6a5847331f0a0000000000000c21364b617689927d67523f2f1c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a30455a6f85927d67523d28120000000e24394e63798e806b55402b16000000000000000000000000001325364c61768a8b78634d382816020303030303030303030b20354b607487917c66513c2c19000000000000000000000000000000000a1a2c3d4d5f6c8197816c5f4d3d2c1b0a0000000000000f24394f64798e826d58422d180300000000000000000000000000000000000000000000000000000000000004182a3a4c6176898c79644e3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000b20354b60758a8c77624c37220d00000000000000000000091a2a38424547443a2c1c0b00000000000000000000000c171f2a33373d424446463f3b32251403000000000000000000000000041525333c3f38352c1e0e00000c1f32424f5358585858585858667b907f6a543f2a150000000c2035495a6d8298846f5f4d3a2a18080000000000000000000000000000000000000000000000000002131f334658687d928976614c38271502000000000114263651677c918975604b3620110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041a2f44596f84937e68533e29130000000f243a4f64798f816b56412c1601000000000000000000000000081f3347586d8296806b5645321e09000000000000000006192c3c51667c918774604b35200e00000000000000000000000000000000000e1f30414b607485927d675b493928160300000000000f24394f64798e826d58422d1803000000000000000000000000000000000000000000000000000000000000000c1f3347586a7f95836e5c4a36221000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000b20364b60758b8c77614c37220c0000000000000000000012263848555b5d574b3a2814000000000000000000010f1c2a333a474c5257595b5b544f4332200c0000000000000000000000001222334350554d493c2c190600021424323b3e43434343434350667b907f6a543f2a150000021628384d63788c8f7a644f40301c0c0000000000000000000000000000000000000000000000000000000417293a4b60738695806b5645311d0900000000081c3043546d8398826d5645311d090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051b30455a7085927d68533d281300000010253b50657a90816c57422c170200000000000000000000000004172a3a4f647a8e8975604b36211000000000000000000c2135495b6f84947f6a5544311d08000000000000000000000000000000000000131d3145566278898a79635745321e1301000000000f24394f64798e826d58422d1803000000000000000000000000000000000000000000000000000000000000000417293a4c6176898f7a644f3e2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000c21364b61768b8b76614b36210c00000000000000000000192d42556670726957442f1b0000000000000000000f1f2d3a474c5861676c6f707069614f3b271200000000000000000000000a1a2f4050616a625a4935200c000006141f26292e2e2e2e2e3b50667b907f6a543f2a150000091e3245566b8196846f5c4b37221200000000000000000000000000000000000000000000000000000000000b1d314455687d928875604b36200b000000000b20354b607489917c675138271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c5c7187917c67513c271200000011263b51667b90826d58422d1803000000000000000000000000000c22364a5c7185927d68523e2d1b07000000000000021628384d63788c8a77614c3726140100000000000000000000000000000000000002152738495a667c918675604b41311f0f000000000f24394f64798e826d58422d180300000000000000000000000000000000000000000000000000000000000000000c1e3346576a7f94846f5c4b372211000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000d22384d62778d8a75604a35200b000000000000000000001b30455b708587725d47321d00000000000000000e1e2d3d4a58616c777d828485857f69543f291400000000000000000000031628384c5e6a7f78624d38230d000000020c121419191919263b50667b907f6a543f2a1500000b21364b607589917c67513e2e1b040000000000000000000000000000000000000000000000000000000000011426374b607589927c6752392816030000000e23394e63788e8c77614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a73888f79644f3a240f00000011273c51667c91836d58432e180300000000000000000000000000071b2d3e52687d9285705c4a36220b000000000000091e3245566b8196836d594734190900000000000000000000000000000000000000000a1a2b3c4c5e6b8096826d5f4e3d2d1b0b0000000f24394f64798e826d58422d18030000000000000000000000000000000000000000000000000000000000000000031729394b6175888f7a644f3f2e1c080000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000f24394f64798e88735443301c07000000000000000000001b30455b708587725d47321d0000000000000009192c3c4a5b6376818a8e878583837b65503b261000000000000000000000091e324556667c90816c56412c170000000000000003030311263b50667b907f6a543f2a15000011263c51667c918875604b36201000000000000000000000000000000000000000000000000000000000000000091e3245576c8297836e5745321e0900000013283d52687d9288725947341f0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778d8b76614c36210c00000012273c52677c91836e59432e190400000000000000000000000000001021364b6075898e79644f3a29170400000000000b21364b6075898f7a654f3b2a18000000000000000000000000000000000000000000000e1e30404b607384927d685b4a3929160300000f24394f64798e826d58422d18030000000000000000000000000000000000000000000000000000000000000000000b1e324657697f94846f5d4b3723110000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000012273c51677c9186715b36251300000000000000000000001b30455b708587725d47321d00000000000002152737495a6379878d8279726f6e6e655d4c38230e000000000000000000061a2c3d4b6075878977624d37220d0000000000000000000011263b50667b907f6a543f2a150006192b3c576d8297826d5544311d08000000000000000000000000000000000000000000000000000000000000000316283951667b908a76604b36210b000001172c41566c8196836e593b2a1804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b52677d9286715846331f0a00000012273d52677c92836e59442e19040000000000000000000000000000091e3245566b8196826d5846331f0a00000000071b2d3e52687d9286715d4b371d0c0000000000000000000000000000000000000000000000121d3144556277888a79635746321e1401000f24394f64798e826d58422d1803000000000000000000000000000000000000000000000000000000000000000000031628394b6075888f7a654f3f2e1c0800000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000152a3f546a7f94836d58432e1800000000000000000000001b30455b708587725d47321d000000000000081d314455637889897b6d635b5a5858504c3f2f1c080000000000000000000c2135495b6b80947e69594834200b0000000000000000000011263b50667b907f6a543f2a15000b2035485a7388917c67513727150200000000000000000000000000000000000000000000000000000000000000000b21364b60758a907b66513b2611000004192e44596e8396816b56412c160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c203448596d8295806b563a29170400000012283d52677d92846f59442f1a040000000000000000000000000000031628384d63788b8a76614c362111000000000d22364a5c7085937e68533f2e1c000000000000000000000000000000000000000000000000011527374859657b8c8675614b4231200f000f24394f64798e826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000b1e324556697e9384705d4b37231100000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f000000000000000000000000000000071b2d3e596e83947f6a553f2a1500000000000000000000001b30455b708587725d47321d0000000000000b20364b6074858c7b655d4e493d43433b382f2111000000000000000000081b2e3e4e63798b8673604b3b2b18050000000000000000000011263b50667b907f6a543f2a15000d23384d62788d8c77614c37220c000000000000000000000000000000000000000000000000000000000000000000091e324556708595806b55402b160000071c31465c7186937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3e4d62778a8e79634e39240e0000000012283d52677d92846f59442f1a040000000000000000000000000000000a2035495a6f84937e69533f2e1c0800000417293a4f64798e8976614b3621110000000000000000000000000000000000000000000000000009192b3b4c5e6b8095826d604e3e2d1b0b0f24394f64798e826d58422d180300000000000000000000000000000000000000000000000000000000000000000000031628384b607487907b65503f2f1c09000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e3f2f1c0c00000000000000000000000000000d22364a5c7388907a65503b251000000000000000000000001b30455b708587725d47321d000000000006192c3c53687d92806b5d4b3f362c2e2e26231c11030000000000000000000d22374b5c6e838f7a655544311d0d000000000000000000000011263b50667b907f6a543f2a150012273c52677c9187725847331f0a00000000000000000000000000000000000000000000000000000000000000000003162838566b8196846f5a3828160200091e33485e7388917c67513c2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e0b080100000000000000000000000006101c2a3a4a5c6b8196846f5b4a36210c0000000013283d52687d92846f5a442f1a0500000000000000000000000000000006192c3c51667c9186715d4b37230d00000a1f3346586d8297816c5746321e0a00000000000000000000000000000000000000000000000000000d1d2f404b607284937e685c4a3929170f24394f64798e826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000a1d324556687e9385705d4c382312000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745d4b3a2a1a0a000000000000000000000000031628384e64798e8975604b36210b00000000000000000000001b30455b708587725d47321d00000000000c2035495a72878976614c3f2f211a1919100e0800000000000000000000091c2f404f647a8f836e5d4b37261400000000000000000000000011263b50667b907f6a543f2a1500162b40556b8095836e593a2a18040000000000000000000000000000000000000000000000000000000000000000000012283d52677d9288735645321e09000a1f34495f7489907b66503b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d2023201c14120e0b090200050001080b0e19202d3a4758647a8b8d7a644f3d2d1a070000000013283d52687d92846f5a442f1a05000000000000000000000000000000000e20354b6074878f7a65503b2a1805000c21364c61768a8e79634e39291603000000000000000000000000000000000000000000000000000000111c3043546277888b7a645746331e1424394f64798e826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000021528384b607487907b6550402f1c090000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d8c7b6558473828190a00000000000000000000000b1e3245566b8096836e5645321e0900000000000000000000001b30455b708587725d47321d00000000000e23384d63788d836e5847332111060003000000000000000000000000000e23384c5e70848c79634e3f2e190900000000000000000000000011263b50667b907f6a543f2a1500182e43586d8396816b56412c16000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f8b75604b36210b00071c304354758a8f7a65503a25100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a273136393530262723201d151b1a1a141d20242c353e4a5861768796816c5c4a361f0f000000000013283d52687d92846f5a442f1a0500000000000000000000000000000000081d3144556a7f94836e5948341f09081c2e3f54697e9385705b4a361b0b00000000000000000000000000000000000000000000000000000000011426364759657b8c8776614c42322024394f64798e826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000a1d314455687d9285705e4c3823120000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d9c887661564537281a0f0300000000000000000c1b2c3c4b607588907b66513828160300000000000000000000001b30455b708587725d47321d000000000013283d53687d927e69543a2a1703000000000000000000000000000000071b2d3e50657b90836e5b4a3621100000000000000000000000000011263b50667b907f6a543f2a15001b30455b7085937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000d22384d62778d8d79634e38230e000b20354a60758a8f7a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192738454b4e4b43363c39363127302f2f263135393c494d5c6476849a8474604b3e2e1b01000000000013283d52687d92846f5a442f1a0500000000000000000000000000000000011426374c61778a8a77624c3726140e23374b5d7186917c67523d2d1a00000000000000000000000000000000000000000000000000000000000008182a3b4b5d6a7f94836e604f3e2d24394f64798e826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000021527374b607487907b6650402f180800000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d86848474605545382c1e160a06000200040a121d2a3a495b6a7f948773604b35200b0000000000000000000000001b30455b708587725d47321d0000000000152a40556a7f917c67513c2712000000000000000000000000000000000d22364a5c70858b78634e3d2d1a020000000000000000000000000011263b50667b907f6a543f2a15001d32475d7287917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000b20364b60758b8f7b65503a251000071c304354748a907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263745566063605455524e4b453845444537444b4e535a636d7a8698857661564532201000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000091f3447596e83947f6a5544311d182b3b50657b908874604b36200f000000000000000000000000000000000000000000000000000000000000000d1d2e3f4a607283937e695c4a3a29394f64798e826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000091d314455677d9285705e4c36251300000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d86778882736056493d3228211a181718171f21303b475863798a917c665443301c080000000000000000000000001b30455b708587725d47321d0000000002172c41576c81907b65503b261000000000000000000000000000000005182a3b4f64798e846e5b49351f0f000000000000000000000000000011263b50667b907f6a543f2a15001e33485e7388907b66503b26110000000000000000000000000000000000000000000000000000000000000000000000081d314455748a907b66503b261100001325495e7489907b66513b261100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455607478746f6b676360565c5b5a5a5b556063696f78828c9182756158473828150200000000000013283d52687d92846f5a442f1a05000000000000000000000000000000000004182a3b4f657a8f8774604b3520203448596e8395806b5544311d080000000000000000000000000000000000000000000000000000000000000000111c3043546176878b7a64584633394f64798e826d58422d180300000000000000000000000000000000000000000000000000000000000000000000000000011527374b607386917c665443301c08000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d857079898375635b4b4538352c2d2c2d2a3337404c5961768698836e5e4d362614010000000000000000000000001b30455b708587725d47321d0000000001172c41566c81907b66503b26110000000000000000000000000000000b1f3447596d82907b65503d2c1a01000000000000000000000000000011263b50667b907f6a543f2a15001f34495e74898f7a65503a25100000000000000000000000000000000000000000000000000000000000000000000000021527495e7489917c66513c271100001e33485d7388927c67523d2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074898e8984807c78757371706f6f707275797e848b92877c6e6157473a291a0a0000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000000c23374b5d7186917c66513c2c26374c62778a8b78624d372715020000000000000000000000000000000000000000000000000000000000000000001325364758647a8b8776614c43394f64798e826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000091c304354677c918673604a362513000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d846f647a8985796a60564e493d4341423a474c525e6677859b8676614c40301808000000000000000000000000001b30455b708587725d47321d0000000000162b40556b80917c67513c27120000000000000000000000000000000d22374c62778a86715d4b381f0e00000000000000000000000000000011263b50667b907f6a543f2a15001f344a5f74898f7a644f3a250f0000000000000000000000000000000000000000000000000000000000000000000000001e33495e7388927c67523d271200061b30465b7085947f69543f2a1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572879983888d918e8a888685848485878a8e928a857d74675f4b4639291c0c000000000000000013283d52687d92846f5a442f1a05000000000000000000000000000000000000081c2e3f53687e93846f5a49353144556a7f95836e59483419090000000000000000000000000000000000000000000000000000000000000000000008182a3a4b5c697e93836e614f3e4f64798e826d58422d18030000000000000000000000000000000000000000000000000000000000000000000000000000011426364a607386917c665443301c080000000000000000000000000000000000000000000000000000000000000000000e23384d63788d846e5c6478868a7f756b635b5a58575759586168707c8898867762584633221200000000000000000000000000001b30455b708587725d47321d000000000014293e53697e937e69543e29140000000000000000000000000000071a2d3e556a7f937e68533f2f1c0000000000000000000000000000000011263b50667b907f6a543f2a15001e34495e7389907a65503b25100000000000000000000000000000000000000000000000000000000000000000000000021628385f7489917c66513c27110003192e43586e8396816c573625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637596e838e7973787c80838587888989888784817d77706760564d4132281b0c00000000000000000013283d52687d92846f5a442f1a05000000000000000000000000000000000000001121364b6176898b78634d38354b607488907b65503b2b190000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3e4f616e83947f695c4b4f64798e826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354667c918673604a3626140100000000000000000000000000000000000000000000000000000000000000000e23384d63788d836e585a6375818c888078736f6d6c6d6e72767d85919082756259483a29170400000000000000000000000000001b30455b708587725d47321d000000000011263b50667b90816c56412c1700000000000000000000000000000d21364a5c72878a77614c3721110000000000000000000000000000000011263b50667b907f6a543f2a15001e33485d7388907b66513b26110000000000000000000000000000000000000000000000000000000000000000000000091e324556758a907c66503b26110000162b40556b8095846f5443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f917c6763676a6e707273747473726f6c676259524b4538301e160b0000000000000000000013283d52687d92846f5a442f1a05000000000000000000000000000000000000000a1e3246576c8196806b56453c51667c918773604a35200d00000000000000000000000000000000000000000000000000000000000000000000000000102032424c6176878b7a64584f64798e826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000001325364d5e7186917c675443301c0900000000000000000000000000000000000000000000000000000000000000000e23384d63788d826d574957606c79838a8d888482818284878b928e857b6d6157483b2b1c0c0000000000000000000000000000001b30455b708587725d47321d00000000000d22374d62778c846f5a3c2c1906000000000000000000000000000f24394e64798e846f5847331f0a0000000000000000000000000000000011263b50667b907f6a543f2a15001d32475c7287917c67523c271200000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b8f7b654f3a2510000011263c51667c918974604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667c91806b565155585a5d5e5f5f5e5c5a57524c483b3631271a1203000000000000000000000013283d52687d92846f5a442f1a0500000000000000000000000000000000000000031629394e63798e8875604b495a6f84947e695443301c070000000000000000000000000000000000000000000000000000000000000000000000000002141e334657647a8b8776615464798e826d58422d1803000000000000000000000000000000000000000000000000000000000000000000000000000000000818304051667b908673604b37261401000000000000000000000000000000000000000000000000000000000000000c21364c61767e79634d39454b5b636e777e83888a8b8b8a88847f7970665e4c46392b1d0d000000000000000000000000000000001b30455b708587725d47321d00000000000b20344859738889735a4935200c000000000000000000000000061a2c3d566b80927d67523a2a17040000000000000000000000000000000011263b50667b907f6a543f2a15001a30455a6f85947e69543f291400000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d8d78624d38230d00000d22374c62778c8d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788d846f593a40434547494949494745413d37342b201d150a0000000000000000000000000013283d52687d92846f5a442f1a0500000000000000000000000000000000000000000b21364a5b7085927d67524d63788b8a76614c362513000000000000000000000000000000000000000000000000000000000000000000000000000000031729394a5c687e9383726064798e826d58422d180300000000000000000000000000000002090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b1224384c5e7085927d675544311d09000000000000000000000000000000000000000000000000000000000000000a1f3346586169635b4935323d4a4e5962696e7275767675726f6a635b504c4033291b0d00000000000000000000000000000000001b30455b708587725d47321d000000000005192b3b596e848d78624d38230d0000000000000000000000000c2135495b72878a76614b36210c000000000000000000000000000000000011263b50667b907f6a543f2a1500182d42586d8296816c56412c17000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f8a74604b36200b00000b1f3448597287937e69533b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a60748988725846332e303233343433322f2c282220180d0902000000000000000000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000000000071a2d3d52677c9185705c566b8096826d5847331808000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4e606d82947f6a64798e826d58422d180300000000000000000000000000000a161e21212121212121212121212121212121212121212121212121212f4050657b908773604b372715010000000000000000000000000000000000000000000000000000000000000417293a464c544d493c2c1e2d363b484d54595d57616160545a554e4a3d382f1e170b0000000000000000000000000000000000001b30455b708587725d47321d000000000000152a3f556a7f917c67513c27120000000000000000000000000e23384e63788d85705746331e0a000000000000000000000000000000000011263b50667b907f6a543f2a1500152a40556a7f95846f593b2b19050000000000000000000000000000000000000000000000000000000000000000000013283d53687d9288725544311d08000005182a3b566b8096846f5947341f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c30435470858b76614c36211b1d1e1f1f1e1d1a17120d0b05000000000000000000000000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000000000000f20364b6074888e79646075898e7a644f3a29170000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2031424b6175868c7b65798e826d58422d180300000000000000000000000009181a2832363636363636363636363636363636363636363636363636363636364c5e7085927d685544311d09000000000000000000000000000000000000000000000000000000000000000c1c2933363f38352c1e0f1a212b34373f4439464b4b4b43363f39362d231c1103000000000000000000000000000000000000001b30455b708587725d47321d00000000000010263b50657b90806b5636251300000000000000000000000013253653687e937f6a5539291703000000000000000000000000000000000011263b50667b907f6a543f2a150011263b51667b908873594834200b0000000000000000000000000000000000000000000000000000000000000000000417293a576c8197836e59372715020000000f253a4f647a8f8a77614c37271502000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536576c828f7a65503a251008090a0a0907050200000000000000000000000000000000000000000013283d52687d92846f5a442f1a05000000000000000000000000000000000000000000081d3144556b8095826c677d9285705c4a361c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000001141e32465763798a8877798e826d58422d180300000000000000000000000618283538454b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b50657b8f8774604b37271502000000000000000000000000000000000000000000000000000000000000000c171f21292321190e00070d182022292e293336363530262a24211a0f090000000000000000000000000000000000000000001b30455b708587725d47321d0000000000000c21374c61768a856f5443301c0700000000000000000000071c3043546e838f7a644f3a250f00000000000000000000000000000000000011263b50667b907f6a543f2a15000c22374c61778c8c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000a1f3347587086947f6a553f2a15000000000d22374b5c7186947f6a5544311d0b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e937e69533e2914000000000000000000000000000000000000000000000000000000000013283d52687d92846f5a442f1a05000000000000000000000000000000000000000000021527374d62788b89767085927d68523e2d1b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839495b677d92847a8e826d58422d18030000000000000000000000102335465356606060606060606060606060606060606060606060606060606060606060606f84927d685544311d080000000000000000000000000000000000000000000000000000000000000000040a0c140e0c0600000000050b0d1419171e2121201c14150e0c0700000000000000000000000000000000000000000000001b30455b708587725d47321d0000000000000a1f33475872878974604a35200b000000000000000000000b20354a6074898975604b35200b00000000000000000000000000000000000011263b50667b907f6a543f2a15000b1f3447597287927d68523929160300000000000000000000000000000000000000000000000000000000000000000c21374c61768a907a65503b251000000000081b2e3e53687e938774604b39291603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f826c57362513000000000000000000000000000000000000000000000000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000000000000009203448596e83937e798e8975604b3621100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3d4d5f6c81978297826d58422d18030000000000000000000000162b3f53646d75767676767676767676767676767676767676767676767676767676767676757a8c8774604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0c0b08010000000000000000000000000000000000000000000000000000001b30455b708587725d47321d0000000000000417293a586d838d78634d38230e000000000000000000000d23384d62788d85705544311d0800000000000000000000000000000000000011263b50667b907f6a543f2a150004182a3b566b8196836e5746321e0a0000000000000000000000000000000000000000000000000000000000000004182a3a52677c928974604b35200b00000000001021364b617588937e685746321e1100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768c85705443301c070000000000000000000000000000000000000000000000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000000000000005192b3b50657b90848095806b5645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30414b6074859797826d58422d18030000000000000000000000182d43586d828b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8e9c907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d0000000000000014293f54697e917c67523c27120000000000000000000011263c51667b91816c573727150100000000000000000000000000000000000011263b50667b907f6a543f2a15000010253a50657a8f8976614b362112000000000000000000000000000000000000000000000000000000000000000a1f3347586e8398836d5544311d0800000000000a1e324657697e938875614b3f2f1e0e000000000000000000000000000000000000000000000000000000040a0c0b0903000000000000000000000a1f33475873888974604a35200b0000000000000000000000000000000000000000000000000000000013283d52687d92846f5a442f1a0500000000000000000000000000000000000000000000000d20354a6073878c888b78634d382816020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001131e32455663788a97826d58422d18030000000000000000000000182d42576d8186878787878787878787878787878787878787878787878787878787878787878787867c66503b261100000000090f1120202020202020202020202020202020202020202020202020202020202009020000000000000000000000000000000002090b120c0a0300000000000000000000000000000000000000001b30455b708587725d47321d0000000000000011263c51667b917f6a553f2a1500000000000000000000152a3f556a7f937d68533e28130000000000000000000000000000000000000011263b50667b907f6a543f2a1500000b20354b607487937e6853402f18080000000000000000000000000000000000000000000000000000000000031628384c61778a907b6651372715010000000000031629394b60748797816c5d4c3c2c1c0d000000000000000000000000000000000000000000000000000c181f22211e160a00000000000000000004172a3a5a6f848d78634d38230e0000000000000000000000000000000000000000000000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000000000000000071c304354697e9499846f5a49351a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002162838495a677d88816c56412c17010000000000000000000000152a3e52636d7171717171717171717171717171717171717171717171717171717171717171717171665e4c38230f000004121d24263535353535353535353535353535353535353535353535353535353535351e160a00000000000000000000000000000a161e2128211e170b000000000000000000000000000000000000001b30455b708587725d47321d000000000000000e24394e63798e826d57422d1802000000000000000003192e43586e838f7a644f3a250f0000000000000000000000000000000000000011263b50667b907f6a543f2a150000081c3043546a7f9486715e4c3626140100000000000000000000000000000000000000000000000000000000091e324556697f948773604b35200b000000000000000b1d314455657b8c8d7b655a493a2b1d100100000000000000000000000000000000000000000004131c2a33373632281a0a000000000000000000162b41566b80917c66513c27110000000000000000000000000000000000000000000000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000000000000000001325364c617686867c66503c2c1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2c3c4d5f67736c63513e29150000000000000000000000000f23354552575c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c504c402f1c09000012222f383b4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a32281a0a0000000000000000000000000a1a2832363d3633291b0b0000000000000000000000000000000000001b30455b708587725d47321d000000000000000d22384d62778d836e59442e19040000000000000000061b31465b70868c77624c37220d0000000000000000000000000000000000000011263b50667b907f6a543f2a150000011426364c61778a917c665443301c0e00000000000000000000000000000000000000000000000000000005192b3c4b607588947e695443301c0800000000000000021527374b5d6b809689786258483b2d1c1408000000000000000000000000000000000000010c181f313a474c4b4538281603000000000000000012283d52677d927f6a55402a150000000000000000000000000000000000000000000000000000000013283d52687d92846f5a442f1a05000000000000000000000000000000000000000000000000081f334658617171665e4c381e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e30404d515e56514434220e000000000000000000000000061727353e4247474747474747474747474747474747474747474747474747474747474747474747473b382f22110000091d2f404c5160606060606060606060606060606060606060606060606060606060605e45382816020000000000000000000002162838454b524c463929170300000000000000000000000000000000001b30455b708587725d47321d000000000000000c22374c61778c846f5a442f1a05000000000000000004172a3a5d72888a75604a35200b0000000000000000000000000000000000000011263b50667b907f6a543f2a15000000081f3447596b80958673604b3c2b1b0a0000000000000000000000000000000000000000000000000004122034485a697f948875604b36261401000000000000000009192e3f4b60738399867662594a3e302618100801000000000000000000000000000309151d2a34424e5861605645321e0900000000000000000f24394e64798e836e593928160b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b090200000000000000000013283d52687d92846f5a442f1a050000000000000000000000000000000000000000000000000417293a464c5c5c504c402f1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122230393c48413e34261605000000000000000000000000000917232a2d323232323232323232323232323232323232323232323232323232323232323232323226231c110400000f24384c5e667575757575757575757575757575757575757575757575757575757575705645321e0900000000000000000000091e3245566067615746331e0a00000000000000000000000000000000001b30455b708587725d47321d00000000050b0d1323384d63788d836e58432e190300000000000000000a1f334758748a88725443301c070000000000000000000000000000000000000011263b50667b907f6a543f2a1500000004182a3b4c617689937e695a4939281809000000000000000000000000000000000000000000000004122232434d627889937e68564532180800000000000000000000101d3144556175869b8677645c4b43362e201c140b090300000000000000050b0d161e27313b474c60687775604b36210b00000000000000000b20364b60758a87725745322121212121212121212121212121212121201d150a020000000000000011263c51667c86816c57422d1702000000000000000000000000000000000000000000000000000c1c29333646473b382f2211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d2427332c29221608000000000000000000000000000000060f15181c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c110f090000000011263b51667c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a74604b36210b0000000002090b0f0d070b21364b60747d75614c36210c060b0d0e0c0600000000000000000000001b30455b708587725d47321d0000000d18202225304151677c917f6a553f2a150000000000000000000c21374c61768c85705b362513000000000000000000000000000000000000000011263b50667b907f6a543f2a15000000000c1f334658687d928a786257453626190b00000000000000000000000000000000000000000003132230404f616f83998573604b38281600000000000000000000000114263746576176859a877a6960544b3e353026211e1616141313141517181f22283237444b59616e7d89836f59442f1a0400000000000000091d32455671878a76604b3636363636363636363636363636363636363632281d150a0000000000000f24384c5e66716c63523e2a150000000000000000000000000000000000000000000000000000000c171f21313226231c1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a10121e17150e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b908c87888888888888888888888888888888888888888888888888888774604b36200b0000000a161e2124211a0f22374c62778c78634e38230e1920232320190e000000000000000000001b30455b708587725d47321d00000d1d2b343736434a5f6f848b78634d38230e0000000000000000000e23384e63788d846e59442f19000000000000000000000000000000000000000011263b50667b907f6a543f2a15000000000417293a4e5f6f8399857560544437291b0f030000000000000000000000000000000000000b161e31404c5e6a7f948a79635443301a0a000000000000000000000000091929394758617684958b7e73645c504b43363632282b2a2928292a2c2a343739454b5560687783928a7d67523d2712000000000000000002152838586e838f79644f4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b453831271a0a0000000000091d30404c515c57524535220f00000000000000000000000000000000000000000000000000000000040a0c1c1c110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9086727272727272727272727272727272727272727272727272727272605645321d0900000a1a28323639362d1f22374c62778c78634e38231e2b353838352c1e0e0000000000000000001b30455b708587725d47321d0005182b3b484d505460697d92816c5a4935200c0000000000000000000f24394e64798e836d58432e18030000000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000c1c31414c617687988272605546392d1e170b04000000000000000000000000000108121b2932424e5e667c8d927d675b4936261400000000000000000000000000000b1b2a3a47586172808c93857a6f656054504b4539403f3e3d3e3f413b484c51576068747e8996867a675f4d392510000000000000000000152a3f556a7f927d686060606060606060606060606060606060606060564b45382715020000000000122230383c47423e35271705000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090f11201d1a140a00000000000000000000000000000000000000000000000000040a0c1c20191710070000000011263b51667b9087725d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d4b45382815020002162838454b4e4a3e342a374c62778c78634e3828323c484d4d493c2c190600000000000000001b30455b708587725d47321d000b2034485962656a737e8b8374604b3c2c19060000000000000000000f253a4f647a8f826d58422d18030000000000000000000000000000000000000011263b50667b907f6a543f2a15000000000000131f33475863798998827361574a3e33291f180d0b0500000000000000030a0c151d203039464b60687c8b95806b5f4d3c2c18080000000000000000000000000000000c1c2a3a4654606a7a85938f847b746b6560575956545353535456595962676d757d87938b8074645c4d41301e0a00000000000000000011263c51667b918175767676767676767676767676767676767676767572605645311d09000000000004121d2426322d2a2217090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071117192015130d0300000000000000000000000000000000000000000000000004121d242635322f271c0e00000000000000000000000000000000000000000000000c181f2231352e2b24180a00000011263b51667b9087725c484848484848484848484848484848484848484848484848483632281a0a0000091e32455660645c4c473a374c62778c78634e3839464b5a62635a4935200c00000000000000001b30455b708587725d47321d000d22374d62777b7f868a8073605645321e0e0000000000000000000010253a50657a8f816c57422c17020000000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000004172a3a495b647a89988375645c4b4639342a22201917151413131416161e21273135404d57616d7e8c95806b625041301e0e00000000000000000000000000000000000c1b2936434b5c64737d87919088807b76716e6b696868696a6c6f72777c8289928c83786b60564a3d302313010000000000000000000d23384d62788d968b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8774604b36200b00000000000000090f111c17150f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18242b2e352a28201507000000000000000000000000000000000000000000000012222f383b4a47433a2c1c0a0000000000000000000000000000000000000000000c1c2a3337464a434036281807000011263b51667b9087725c47333333333333333333333333333333333333333333333333201d150a0000000b21364b6075796c61594b444c62778c78634e414d57616b7878634d38230e00000000000000001b30455b708587725d47321d00162b40566b80909484776a605545382815020000000000000000000010263b50657b90816b56412c16010000000000000000000000000000000000000011263b50667b907f6a543f2a15000000000000000c1c2c3d4a5c647a8899867a6b61574c473a38352b2c2a2928292a2b29323637444b515e667582938d806b625144332313000000000000000000000000000000000000000b1826303e4b556068747c848a93908a8683807f7e7d7e7f8184878c91918982796e635b4b45382d1f1305000000000000000000000b20354a607285878787878787878787878787878787878787878787878676614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000718283640434a3f3c33251503000000000000000000000000000000000000000000091d2f404c51605c574a3a2714000000000000000000000000000000000000000009192a3a474c5b60585346362410000011263b51667b9087725c47321d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d0b09020000000012273c52677c8d82776960554c62778c78634e4f5f6775808b816c57412c1700000000000000001b30455b708587725d47321d000d23384d62787c8087897f73605544311d0e0000000000000000000010253b50657a90816c57412c17020000000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000000f1f2d3e4a5c647784938c81766a6159524d483c413f3e3d3e3f4039464b50556067717c8797897c6a61514434261505000000000000000000000000000000000000000008141c2e37444b5560676f777d82888b8e919293929392908e8a86827c756d635b4d493c32281a0f010000000000000000000000071c30435460717171717171717171717171717171717171717171717171615847331f0a000000000000000000000000000000090f112017140e05000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e14162012100a0100000000000000000000000000000000000000000000001124364653596055504333200d0000000000000000000000000000000000000000000f24384c5e6675726857432f1a060000000000000000000000000000000000000115273747586171756e6453402b17020011263b51667b9087725c47321d08080808080808080808080808080808080808080808000000000000001025394d5f677c87897e74665e62778c78635c64707d88887e73604b35200b00000000000000001b30455b708587725d47321d000c2035495a62666b747f8a8373604b3c2c19060000000000000000000f253a4f647a8f826d57422d18020000000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000000110202d3d4a5961737e8a968980776f67625a5a57545453535456595761656c747c8691918378665e50433426160700000000000000000000000000000000000000000000011019263137444b525962686d7276797b7d7e7e7e7d7b7876716c6660564e493d352c1d150a0000000000000000000000000000132536434a5b5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4c473a2a17040000000000000000000000000004121d2426352c2922160800000000000000000000000000000000000000000000000000000000000000000000000000000000081621292b3527251e130500000000000000000000000000000000000000000002172b4053646e756a61503c281300000000000000000000000000000000000000000011263b51667c8a86725c47321d07000000000000000000000000000000000003111d3144556176858d836e58432e19030011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000a1d30414d5e66747f89867b6f63778c78636d7a858b817668605544311d0800000000000000001b30455b708587725d47321d0006192c3c494d515560697e93816c5a4935200c0000000000000000000f24394e64798e836d58432e18030000000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000000002101f2d3b4755606978828a958a847d78726f6c6a696868696b6e71767b81889190867c6f625a4c40332516080000000000000000000000000000000000000000000000000009141d2631353b484c53585761646667686968676663605757514b4538362c21190e02000000000000000000000000000000081825303546474747474747474747474747474747474747474747474737332a1c0c000000000000000000000000000012222f383b4a413e342616050000000000000000000000000000000000000000000000000000000000000000000000000000041626333d404a3c3930231301000000000000000000000000000000000000000004192e43596e828a7f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000112131424b6073849a8575604b36210b000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000001122330404c55606977828c8478768c7877828b84796c61584b443726140100000000000000001b30455b708587725d47321d00000e1e2c353837444b606f848b78634d38230e0000000000000000000e23384e63788d836e59442e19040000000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000000000010f1d2a37444b59626d78808890928d8884817f7e7d7e7f8083868a90928a847b71665e4d483c302215070000000000000000000000000000000000000000000000000000000109141d202a34373e39464b4e515253545352504e4b45393c363228211a0f0600000000000000000000000000000000000008131c20313232323232323232323232323232323232323232323232211f170c0000000000000000000000000000091d2f404c516056514434220e00000000000000000000000000000000000000000000000000000000000000000000000000000e213344515660524d41301e0a000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000e1e2e3f4e606c81978878625745321e09000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000512222f37444b59626d7a868b7e887d89877c6f635b4c473a312619090000000000000000001b30455b708587725d47321d0000000e19202327314252677c917f6a553f2a150000000000000000000d22374c62778c85705a45301b000000000000000000000000000000000000000011263b50667b907f6a543f2a150000000000000000000000000c1926313b484d5a626b747a80858a8d909293929392918e8b87827d776e665e514c40352b1e120400000000000000000000000000000000000000000000000000000000000001080d181f2228293236393c3d3e3e3e3d3b3936322827211e160a0600000000000000000000000000000000000000000000070b1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c0c0a040000000000000000000000000000000f24384c5e66756c62513e2914000000000000000000000000000000000000000000000000000000000000000000000000000014293d51626b75675f4d392510000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000a1b2b3c4b5d687e938b7a64594839281603000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000003111927313b484c5c64727c8489867e74665e4e4a3d33291d1409000000000000000000001b30455b708587725d47321d00000000060c0d1523384d63788d836e58432e190300000000000000000b20354b60758a87725d3a2a17040000000000000000000000000000000000000011263b50667b907f6a543f2a150000000000000000000000000009141d2b343c484d5460656b7075787b7c7d7e7e7d7b7976726d686158514c40383020190e0000000000000000000000000000000000000000000000000000000000000000000000050b0d13161e21242628292929282623211e16110b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667c8a816c56412c170100000000000000000000000000000000000000000000000000000000000000000000000001162b40566b808a7d67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000003162839485a657b8b927d675c4b3b2b1b0a00000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000e19202f37444b58616c7983878786857b6e625a4b453830211a0f010000000000000000001b30455b708587725d47321d000000000000000c22374c61778c846f5a442f1a050000000000000000081d314455738889745847331f0a0000000000000000000000000000000000000011263b50667b907f6a543f2a150000000000000000000000000000010d19202b3436434b50565560626567686968676663615758524c473a382f241d120600000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c0f111213141312110e0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410191e2020200a04000000000000000000000000000000000011263b51667b90816c56412c170100000000000000000000000000000000000000000000000000000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000004121e32455762788896806b5f4d3e2e1d0d0000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000e1e2b353f4b55606976818a84788a79838f83786a60564d40352c1f0f0000000000000000001b30455b708587725d47321d000000000000000d22384d62778d836e59442e19040000000000000000011426375c71868c76614c37210c0000000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000000000000000000000050d19202630353b37444b4d505253545352514e4b46393d37332a241d12090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000414222d333535351f180c0000000000000000000000000000000011263b51667b90816c56412c170100000000000000000000000000000000000000000000000000000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000001122233434b607585998372604b41312010000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000006192b3c494d5d65737e89877c70778c786e7b868a7f75665e4e493d2c1a0600000000000000001b30455b708587725d47321d000000000000000e24394e63798e826d57422d1802000000000000000000192f44596e848e79644f39240f0000000000000000000000000000000000000011263b50667b907f6a543f2a150000000000000000000000000000000000000508141c2025263135383b3d3e3e3e3d3c3936322928211f170c09000000000000000000000000000000000000000000000000000000000000000000000000000a10121d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000001022323f484a4a4a332a1c0c00000000000000000000000000000011263b51667b90816c56412c170100000000000000000000000000000000000000000000000000000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000f1f304050616e8298867661544330231302000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000b2035495a626e7b86897f756762778c786365737e88877c6f635b4935210c00000000000000001b30455b708587725d47321d0000000000000011263c51667b917f6a553f2a1500000000000000000000162b40556b80927d68523d28130000000000000000000000000000000000000011263b50667b907f6a543f2a15000000000000000000000000000000000000000001080b10141d20232627282929282624211e16130c0a040000000000000000000000000000000000000000000000000000000000000000000000000004121d242732323232323232323232323232323232322321190e00000000000000000000000000000000000000000000000000000000000000000000000000000000000005192d3f505c5f605e473a2a1804000000000000000000000000000011263b51667b90816c56412c170100000000000000000000000000000000000002000000000000000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000c1c2d3d4c5e6a7f9489796358463626140500000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000d23384d6278838b82776a605662778c786355606876818a8379634e39230e00000000000000001b30455b708587725d47321d0000000000000014293f54697e917c67523c27120000000000000000000012273c52677c91816b563625130000000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000000000000000000000000000000000000001080b0d101213141312110e0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000122330393c474747474747474747474747474747474738352c1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000091e33485c6e7575705847331f0a000000000000000000000000000011263b51667b90816c56412c1701000000000000000000000000000000090f11170d0b06000000000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000009192a3a4a5b667c8d8c7b655b493a2918080000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000012273d52677d857a6d62594b4c62778c78634e4b58616c79847e69533e291400000000000000001b30455b708587725d47321d0000000000000417293a586d838d78634e38230e000000000000000000000e24394e63798e856f5443301c0700000000000000000000000000000000000011263b50667b907f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1d30414d515c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c4d493c2c1906000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758c8a77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000000000000000000000003111c23262c2320190e0000000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000001152737475863798a937e695d4c3c2c1b0b000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000001025394d5f6770645c4d483b4c62778c78634e3a474c5b636f75604a35200b00000000000000001b30455b708587725d47321d0000000000000a1f33475872878974604a35200b000000000000000000000b20364b6075898874604a35200b00000000000000000000000000000000000011263b50667b907f6a543f2a15000000000000000000000000040a0c19180b07000000000000000000070c0e16160f0d080000000000000000000000070c0e16160f0d0800000000000000000000070c0e16160f0d080000000000001024394d5f677272727272727272727272727272727272635b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000000000000000000000011222f383b4238352b1e0e00000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000002101d31445561768797816d604f3f2f1e0e00000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000a1e30414d525b4f4a3e34374c62778c78634e38333d4a4e54605443301c0700000000000000001b30455b708587725d47321d0000000000000c21374c61768c856f5443301c0700000000000000000000081d3144556f848e79634e39240e00000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000000000000c171f212e2d201c13080000000000010f1a21242b2b25221b100200000000000000010f1a21242b2b25221b1002000000000000010f1a21242b2b25221b10020000000012273c51677d868787878787878787878787878787878679634d38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000000000000000000000d1d2f404c50574d483c2b1906000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000102031424b6073849a8473604b423221110000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000001132330393d463a362e22374c62778c78634e38232d3636434a433625130000000000000000001b30455b708587725d47321d00000000000010263b50657b90806b56362513000000000000000000000002152737546a7f947e695438271502000000000000000000000000000000000011263b50667b907f6a543f2a15000000000000000000000c1c2a33374343353025180800000003111f2d363940413a372e201305000000000003111f2d363940413a372e2013050000000003111f2d363940413a372e20130500000012273c52677d878888888888888888888888888888888779634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c1701000000000000000000000005192b3c4c5e666c625a48352012000000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000d1d2e3f4e606c81968777615544312414030000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000005131e25273024221b22374c62778c78634e38231a21253035302518080000000000000000001b30455b708587725d47321d000000000000152a3f556a7f917c67523c27120000000000000000000000000f243a4f647a8f846f5645311d09000000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000000009192a3a474c59584a4336251300000011212e3d4a4e56564f4b3e302313010000000011212e3d4a4e56564f4b3e3023130100000011212e3d4a4e56564f4b3e3023130100001025394d5f677272727272727272727272727272727272635b4935210c000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000000000000000000092034485a667c8178624d41301a0a0000000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000a1a2b3b4b5d687e928a7a64594737271506000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000010a10121b0f0d0c22374c61778979634e38230e08131c201c1308000000000000000000001b30455b708587725d47321d000000000005192b3b596e848d78624d38230d0000000000000000000000000b20354b6074898975604b36200b000000000000000000000000000000000011263b50667b907f6a543f2a150000000000000000021527374758616e6d605443301c0700081c2e3f4b5b636b6b645c4d41301e0a000000081c2e3f4b5b636b6b645c4d41301e0a0000081c2e3f4b5b636b6b645c4d41301e0a00000a1d30414d525d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d4e493d2c1a06000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000000000000000009192e3f4d62788a9784705f4d3828160200000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000031628384859647b8b8d7c665c4a3a2a190900000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000600000b1f3447596174635b4935210c0000070b070000000000000000000000001b30455b708587725d47321d00000000000b20344859738889735a4935200c000000000000000000000000081d3144556d82917b6651392816030000000000000000000000000000000011263b50667b907f6a543f2a150000000000000003111d3144556176838274604a35200b000e23374b5d657980807a675f4d3a25080000000e23374b5d657980807a675f4d3a250800000e23374b5d657980807a675f4d3a2508000001132330393c484848484848484848484848484848484838352c1f0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c1701000000000000000000011426374b5d6e839888917c675645321e0d00000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000004121e324556627888957f6a5e4d3d2d1c0c0000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000004182a3b474c5f4e493d2c1a0600000000000000000000000000000000001b30455b708587725d47321d00000000000d22374d62778c846f5a3c2c19060000000000000000000000000114263750657b90836d5745321e090000000000000000000000000000000011263b50667b907f6a543f2a1500000000000000112132424b6073848a7a645443301c070010253a50657b8b95968d7d675236261401000010253a50657b8b95968d7d6752362614010010253a50657b8b95968d7d675236261401000005131d2527333333333333333333333333333333333323211a0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c1701000000000000000000081d314455657b8f87798e8775604b3b2a1805000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000001122232434b60758598826e615040301f0f000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000c1d2a34374938352c1f0e0000000000000000000000000000000000001b30455b708587725d47321d000000000011263b50667b90816c56412c1700000000000000000000000000000b20354b6074888975604b36210f0000000000000000000000000000000011263b50667b907f6a543f2a150000000000000e1f2f3f4f606c8195806b5c4a36251300001a2f455a6f849aaaab9d88735443301c0800051a2f455a6f849aaaab9d88735443301c08051a2f455a6f849aaaab9d88735443301c08000000010a10121d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d1d0e0c06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c1701000000000000000004172a3a4b607386927d6e83947f6a5948341f10000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000f1f2f404f616d82988575604b4333221201000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000c181f223423211a0e000000000000000000000000000000000000001b30455b708587725d47321d000000000013293e53687e937e69543e29140000000000000000000000000000081d3144556c81917c67523d2d1a0700000000000000000000000003030311263b50667b907f6a543f2a1500000000000c1c2c3d4c5d697e938574604b3e2d180800001c31475c71869cb1b49f8a75604b35200b00071c31475c71869cb1b49f8a75604b35200b071c31475c71869cb1b49f8a73604b35200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c170100000000000000000a1f334758697e93857062788a8a77624c3e2d1b070000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000c1c2c3d4c5e6a7f9488786257453225150400000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000040b0c1f0e0c0600000000000000000000000000000000000000001b30455b708587725d47321d0000000000162b40556b80917c67513c27120000000000000000000000000000011426374e63798e85705c4a36210c0000000000000000020b111318181818263b50667b907f6a543f2a15000000000919293a495b657b8c8b79635544312010000000172c42576c8197a3a49a846f5443301c080002172c42576c8197a3a49a846f5443301c0802172c42576c8197a3a49a846f5443301c08000000000000000000000000000000000000000000000000000000000000000002080b0f13161718171614110c0a0400000000000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c170100000000000000071a2d3e4c6176898c7a645a6b8095826d5c4a3622120000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d0f0f0f19293a495b667c8d8b7a645a48392816070000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d0000000001172c41566c81907b66503b26110000000000000000000000000000000921364a5b6f848e79644e3a2a180400000000000006141f26292d2d2d2d2d3b50667b907f6a543f2a15000000011426374658637989947f6a5b4a372715020000000c22374c6176858e8f8678634d3626140100000c22374c6176858e8f8678634d36261401000c22374c6176858e8f8678634d36261401000000000000000000000000000000000000000000000000000000000000070b151d2024282b2c2d2c2b2926211f170c0a0400000000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c1701000000000000000b21364a5c6c8197816c5c4b6175888c7a644e40301a0a00000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47322424242426374658637989927d685c4b3c2b1b0a000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d0000000002172c41576c81907b65503b2610000000000000000000000000000000071a2d3d51667c91826d5947341f0d0000000000021424313a3e42424242424250667b907f6a543f2a15000000091d3144556176869b8573604b3d2d1909000000000a1f3347586173797974635a493518080000000a1f3347586173797974635a4935180800000a1f3347586173797974635a49351808000000000000000000000000000000000000000000000000000000000008131c202731363a3d40424242413e3b373329221f180c050000000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000000000b1b30414e64798c8976614c4657687d9284705f4d38281502000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c4739393939393a445561768696806b5f4e3e2e1d0d00000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d0000000000152a40556a7f917c67513c2712000000000000000000000000000000000f20354b6073878a77614c3b2b1805000000000b1f31424e5358585858585858667b907f6a543f2a150000091931424b6073849a8a79635544311f0f000000000004182a3a47556064646056493c2c190000000004182a3a47556064646056493c2c1900000004182a3a47556064646056493c2c190000000000000000000000000000000000000000000000000000000003121825303537444b4f53555757575653504c473a37332a1f180d00000000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000000031628394d5f7085937e695847394a607285917c675645321d0d000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c4e4e4e4e4e4e4f52607383998373604b41312220190d050000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d000000000013283d53687d927e69543a2a1804000000000000000000000000000000081c304354687d93806b594834200e0000000011263a4e60686d6d6d6d6d6d6d6d7b907f6a543f2a1500021527374e606c8196937e695b49372614010000000000000c1c2a37444b4e4f4b45382c1e0e00000000000c1c2a37444b4e4f4b45382c1e0e000000000c1c2a37444b4e4f4b45382c1e0e0000000000000000000000000000000000000000000000000000000b161e2f36434a51556064686b6c6d6c6b69666158554c473a342a1d13030000000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000000091e324657677d928673604b3a304354657a8f8774604b3b2a18050000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087726464646464646464676f8196867661554e4a3d37342b20190e00000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d00000000000e23384d63788d846e5947341f11060003000000000000000000000000011426364b6074878a77624c3c2b190600000013293e53687e828282828282828284947f6a543f2a1500081d314455687d93928472604a3d2c190900000000000000000c19263135393a3631271a0e000000000000000c19263135393a3631271a0e0000000000000c19263135393a3631271a0e0000000000000000000000000000000000000000000000000000000c1b2932404c5460666e75797d80818281807e7b76716a61584c483b311e160a00000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000000006192c3c4b6175888f7b6555443125364b5d6e83947f6a5947341f0f0000000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b90877a797979797979797a7c84968677706e69635b564d483b352b1e13000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d00000000000c2135495b72878a77614c3f2f211a1818100e0800000000000000000000081d314455677c91816c5a483520120000001a2f44596f83868686868686868686867e68523d2813000b20364b60747e7e7d75605443301f0e0000000000000000000009141d202424201d150a00000000000000000009141d202424201d150a000000000000000009141d202424201d150a0000000000000000000000000000000000000000000000000000000c1d2a39464b5e66737b83898f928f8d8c8d8e91908a867f776b62594e4132281a0b000000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c170100000000092035495a6b8095826e5d4b3726182e3f4d62788a8977624c3d2d1a0700000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b909d8e8e8e8e8e8e8e8e8f919495978886837e79736b62594d483c301c130800000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d000000000006192c3c53687d93806b5d4c40352c2d2d25231c11030000000000000000011527374a6072868b78624d402f1a0a0000182c4154656f7171717171717171717168604e3a251100081d3144556069696860574536251300000000000000000000000001080b0f0f0b0902000000000000000000000001080b0f0f0b09020000000000000000000001080b0f0f0b09020000000000000000000000000000000000000000000000000000000b1b2a3b4757616d7c86909087817d7a787778797b7f83899289817768604b4538281b0b0000000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c170100000009192f404d63788a8a78624d3f2e19102035485a6b8095826d5c4a36211200000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b90887f7f7f7f7f7f7f7f7f7f7f808183868a8e8e8881786d625a4d4130251808000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d0000000000000e20364b6074868c7b665e4e493d43423a372e2111000000000000000000091c304354657b90836e5e4c38281603001124374754595c5c5c5c5c5c5c5c5c5c524e41311e0b0002152737444b5454524b453928180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000317293947596175829091857b736c67646362626366696e757d87928a7d6d6056463928180800000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000021527374c5e6e83947f6a594834211105192b3c4b6175888c79644e40301a0a000001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087726969696969696969696a6b6c6d7075797f878f8a8278675f4a43362513000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d000000000000091d3145566379898a7c6d635b595858504b3f2e1c080000000000000000001325364c5e6e83907c665645321e0900071929374144464646464646464646463d3a31231301000009192731363e3f3d3632281b0a000000000000000000000000000000000711171a2012100a00000000000000000000000000000000000000000002080b0f1316181919181714110c0a0400000000000000000000000000000000000000000000000b1e33465761778598887c70656054524f4d4d4d4e5154566068737d8992827461574636251300000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010000081d314455667b908774604b3b2b1903000e1e324657687d9284705e4d382715020001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c54545454545454545456575856606469727a8492897d6c605443301c140000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d00000000000002152738495b647a888d8279726f6d6d655d4b37230e00000000000000000008182f404d6277898775604b36210b00000b19242c2f3131313131313131313128251e13050000000009151d20292928211e160a000000000000000000000000000000000b19242c2f3527241d12040000000000000000000000000000000002090b151d2025282b2d2e2f2e2c2a26211f170d0b05000000000000000000000000000000000000000b1b31414c6175869b8678675f504a43363a383738393c38454b5560677885978475615443301c0e000000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17010005182a3b4b607486907c665645321d0d0000031628394a607285917c665645311d0c0001162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c473f3f3f3f3f3f3f3f404238454b4f545d656f7d89928172604a42321d0d00000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d000000000000000a1a2c3d4a5c6477818a8d878482827b65503a2510000000000000000000001120344859697e937f6a553f2a150000000711181a1c1c1c1c1c1c1c1c1c1c13110b0100000000000002080b1414130b0903000000000000000000000000000000000719293740444a3c393023120000000000000000000000000000020a151d202731363a3e4143434443423f3c37332a221f180d0500000000000000000000000000000000031628394e5f6e83998575625a4d41353025252322232426283237444b5a627484998372604a3c2b19060000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c170100081f344859697f94846f5e4c382815000000000b1c304354657a8f8774604b3b2a180401162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47322a2a2a2a2a2a2a2b2c273136393f4b4f5f67788696806b604f3b2b1805000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d00000000000000000e1f2d3d4a59616c777d828486867f6a543f2a150000000000000000000005182b3b4b6073847c66513b26110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011243747545960514d41301d0a00000000000000000000000009151d27313637444b4f5356585959585754514c473a37342a20190d010000000000000000000000000000091e324657687d9289786257483c30201c130f0e0d0d0e11161e26313c4856617687947f6a5a4935200d0000000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c170008182e3e4c6277898b78634d402f1a0a00000000001325364b5d6e83947f695947341f0f00162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d1414141414151617151d20242e37414d59627787937e69594834200e000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708587725d47321d0000000000000000000f1f2d3a474c5962686d6f71716a614f3c271300000000000000000000000d1d314455606f665e4c38240f000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0d0b050000000000172c4054656f75675f4d39241000000000000000000000021019273138454b51556064686b6d6e6e6d6c69666158544c483b342b1c1408000000000000000000000000000c21364b617588907c665a48392b1e1207000000000000000309141d2b38475863798b8a78624d3b2a180500000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17001325364b5c6d8295806b5b4935221200000000000008182e3f4d62788a8977614c3d2d1a07162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000010002090b111c23303b4859647a8b8a77624d3c2c19060000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708487725d47321d000000000000000000010f1c2a343b484c53585a5c5c544f4332200c000000000000000000000001142637444b5a514c402f1d090000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202220190e000000001a2f44596f838a7d67513c27120000000000000000000014202e37444b5660676e757a7d8082838483817f7b77716962594d483b3026180c0000000000000000000000071a2d3d54697e9384705e4c3c2b1b0e0000000000000000000000010e1a2a3a4a5b6c8197826d5948341f0b00000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c17071c304354647a8c8875614b3c2c190400000000000000102035485a6b8095816c5b4a362112162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000008131d2b3b4a5c6c8196826d5a4935200c0000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b30455b708487725d47321d00000000000000000000000c181f2a34373e434546463f3c322515030000000000000000000000000919263135453b382f2212000000000000000000000000000000000000000000000000000000000000000000000000000000000c1826303538352b1e0e0000001a2f44596f84917c67513c2712000000000000000008131c323e4b556068747c83898f9393919090919294918b867f776c62594b4336291c0d000000000000000000000c21364a5b7287907b6550402f1e0e00000000000000000000000000000c1c2d3d4d62788a8b77624c37220d00000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c1717293a4a607285927d675746321e0e000000000000000005192b3c4b6175888b79634e402f19162b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000d1d2d3e4c61778a8c78634d38230e0000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d82836e59442f19000000000000000000000000040d181f22282d2f31312a27201507000000000000000000000000000009141d202f26241d12040000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2a36434b4d483c2b190500001a2f44596f84917c67513c27120000000000000008182530434f5c64747e8791938a86817e7c7b7a7b7d80848990948a8178696054473a2b1d0d0000000000000000000e24394e63798e86715d4b382212000000000000000000000000000000000f203448596d83947e695437261401000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c171f334658687d9285705f4d392916000000000000000000000e1e324657677d92846f5e4c3727152b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000101f3447596e83957f6a55402a150000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162a3f52636d6e6554402c170000000000000000000000000000050b0d13181a1c1c15130c030000000000000000000000000000000001080b1a110f090000000000000000000000000000000000000000000000000000000000000000000000000000000004172a3a475460625a4835200b00001a2f44596f84917c67513c271200000000000000132536434a61697a869391867e76716c6967666566686b6e747b828b978a7e726158483b2b1c0c0000000000000000152a3f546a7f94806a553f2f1c040000000000000000000000000000000005192b3b51677c91846f5544311d08000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c1a2c3d4c6176888c79644e41301b0b00000000000000000000031628394a607285917c665544311d2b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000004182a3b53687d9385705a3929170300000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010233545525859544736241100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f334758617378624d38220d00001a2f44596f84917c67513c27120000000000010f1c304354606c7f8c96867c7168615857545150505152555560656d7882909383766259483a2a190900000000000000132536596e83907b65503b26110000000000000000000000000000000000000d22374c62778c8975604b35200b000000000000000a20354a5f758a8c77614c37220c000000000000000000000000000011263b51667b90816c56412c2135495b6c8196816c5c4a3623130000000000000000000000000b1c304354647a8f8774604b3a2a2b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000f24394f64798e89745746331e0a00000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061727353f42444036291907000000000000000000000000000000061016181b1b1917110b09020000000000000000000000000000000000080e1012100a0100000000000000000000000000000000000000000000000000000000000000000000000000011426374c61768784705b45301b06001a2f44596f84917c67513c271200000000000f1f31424a60728194918074665e534c473a3e3c3b3b3c3d37444b505a626d7c89998677625847372715020000000000071c30435472878c77624c37220d0000000000000000000000000000000000000b1f34485973888d78624d38230d000000000000000a20354a5f758a8c77614c37220c020202020202020000000000000011263b51667b90816c56412c30404e63798b8976614c3e2d1a05000000000000000000000000001325364b5c6d82947e695847332b40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000c22374c61778c8b76614c36210c00000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000917232a2d2f2c24190b0000000000000000000000000000000917232a2d31302e2c26201d150a010000000000000000000000000003111c232528251e1305000000000000000000000000000000000000000000000000000000000000000000000000081d3144556a7f917c67523c271200001a2f44596f84917c67513c27120000000008182d3d4e606c81968b7d6b60564c403733292927262526282631353c494d5e6678869c8676615544311d1000000000000b20354a60748989745947341f0b00000000000000000000000000000000000005182a3b5c71868f7a65503a251000000000070c0e1320354a5f758a8c77614c372217171717171717170d0b060000000011263b51667b90816c564128384d5e6f84937e68584733200f000000000000000000000000000008182e3e4d62788a8977614c3d2d40566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000b21364b60768b8c77624d37220d00000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000610161819171107000000000000000000000000000000061727353f42464544413b3632281d150900000000000000000000000011212e373a3d3a3123130000000000000000000000000000000000000000000000000000000000000000000000000b20354b6074888874604b36200b00001a2f44596f84917c67513c2712000000011426364a5b687e938c7c675f4b45382f211f17141211101113141d202c35404c5a6277869a8474604b3e2d1b07000000000c21364b61768b88735e3b2a1805000000000000000000000000000000000000001b30455a7085907b66513b26110000010f1a21242929354a5f758a8c77614c372d2d2d2d2d2d2d2d2d2320190e00000011263b51667b90816c5641324556667c918673604b3a2a1701000000000000000000000000000000102034485a6a8095816c5b4a3640566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000c21364b61768b8c77624c37220d00000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001023354552585b5b5956514b45383127190c00000000000000000000081c2e3f4b50524d41311d0d00000000000000000000000000000000000000000000000000000000000000000000061a2c3d51667c91806a5544311d0800001a2f44596f84917c67513c2712000000081c30435463798b937e685e4d4132281a120a0400000000000001080e19202f3c485962788995806b5c4a362211000000000d22374c62778c88735d3a2a1704000000000000000000000000000000000000061b30455b7085917b66513c261100000f1f2d36393e3f404a5f758a8c77614c4242424242424242424238352b1e0e000011263b51667b90816c56413c4b6075878f7b655544311c0c0000000000000000000000000000000005192b3c4b6075888b79634e4040566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000d22384d62778d8b76604b36210b00000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c121515130f0d070000000000000000000000162a3f52636d70706e6c6660564b4437291c0c0000000000000000000e23374b5d65675f4d3b2b19050000000000000000000000000000000000000000000000000000000000000000000c2135495b6f848a77624d3727150200001a2f44596f84917c67513c27120000011426364b60738598826e604e40301d150a00000000000000000000000006121e2b3a485a667c908c7a644f3f2e1c080000000c22374c61778c89745847331f0a00000000000000000000000000000000000004172a3a5c7186907b65503b261000071a2d3d4a4e535455565f758a8c776157575757575757575757574d493c2b19060011263b51667b90816c5641485a6a7f95826d5d4b3726140000000000000000000000000000000000000d1e324557677d92846f5e4c37566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000010253a50657a8f88735745321e0900000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f21282a2a2824221b1007000000000000000000182d42586d82858583817b75696055463a291a0a000000000000000010253a50657b7d6759483420120000000000000000000000000000000000000000000000000000000000000000031729394e63798e836e59483419090000001a2f44596f84917c67513c27120000081c304354677d928977614c42312212020000000000000000000000000000000e1c2b3c4c5e6e8298846f5d4b37230c0000000b20354b60758a8c77614c37210c0000000000000000000000000000000000000a1f33475873888e79634e39230e000c21364a5b6368696a6b6c758b8c776c6c6c6c6c6c6c6c6c6c6c6c625a4935200b0011263b51667b90816c563f4d62788a8a77624d3f2e1909000000000000000000000000000000000000031628394a607285907c665544566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000071a2d3d546a7f94856f5a3928160300000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c2a33373d3f3f3d39362d201c13080000000000000013293e53687e838385888f887e7361584638281602000000000000001b31465b70868a78624d402f1a0a000000000000000000000000000000000000000000000000000000000000000a1e3346576c818f7a65503b2b18000000001a2f44596f84917c67513c271200000b20354b607387947f6a59473424140400000000000000000000000000000000000e1e2f404d62788b907b65503a2a18040000081d3144557287907b66513929160300000000000000000000000000000000000c21374c61768c8a76604b36210b000e24394e63797e7e7f8081818d978282828282828282828282828178624d38230d0011263b51667b90816c564b5d6e83947f6a594834211100000000000000000000000000000000000000000a1c304354647a8c8674604b566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000061421364a5b7085947f6a553f2a150000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f3a474c525555534e4a3e353025180a00000000000011263b4e60686e6e70747a84938476615645321e0f0000000000000011263b50667b90836e5e4c382816030000000000000000000000000000000000000000000000000000000000000c21364b61768986715d4b371d0d000000001a2f44596f84917c67513c2712000216283851667b908976614b3b2a180600000000000000000000000000000000000000122035485a6d8297836e5947341f0a000001152737586e8397816c5746321e0c0000000000000000000000000000000004172a3a51667b9186715745321e09001a2f44596f838b8a8a8a8a8b8f928b8a8a8a8a8a8a8a8a8a8a8a8b79644f3a240f0011263b51667b90816c5655657b8f8774604b3b2b18030000000000000000000000000000000000000000001325364b5c6d82937e6958566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000070e192032434e63798e8d78634d38230e0000000000000010253a50657b86836e59442f190400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c5861676a6a68645c524a4336281a0a00000000000b1f31424e5358595460656f7e8d8574604b3d2c1a060000000000000f23384c5e6e83907c665645321e0b0000000000000000000000000000000000000000000000000000000000081c2f3f53697e937d68533f2e1c00000000001a2f44596f84917c67513c271200091e3245566e8397816c5746321d0c000000000000000000000000000000000000000006192b3c4f647a8f8b77614c37220c00000013283d52687d928976614b3b2a19090000000000000000000000000000000a1f3347586d8296806b563928160300172c4054656f7474747474758b8b74747474747474747474747474645c4a36220d0011263b51667b90816c56607386907c665645311d0d0000000000000000000000000000000000000000000008182e3e4d62788a897661566b80917c67523c2712000000000000000000000000000000000000000004192e43596e83947f6a553f2a1500000000000000000000000000000000000000000011263b51667b9087725c47321d08080808080001080b0c0f131b222c35434f616f8499836e5b4935210c000000000000000e23374b5d65716e6554402c1702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384c5e65767d7f7f7d7972686054453828160300000000021424313b3e4336434b5060697e93816c5b4935210c000000000000091c2f404d62788a8775604b3a291704000000000000000000000000000000000000000000000000000000000e23384b5d71878975604b36211100000000001a2f44596f84917c67513c2712000b21364b6075898f7a644f392916000000000000000000000000000000000000000000000e22374b5c7287927d68533d28130000000c22374c61778b957f6a594737261408000000000000000000000000000a1a2b3b4c6176898e7a644f39240f00001124374754595f5f5f5f5f758a8b76605f5f5f5f5f5f5f5f5f5f5f4f4a3e2e1b070011263b51667b90816c58697e93836f5e4c38271500000000000000000000000000000000000000000000000010203448596a8095816c5b6b80917c67523c27120000000002090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b192e43596e83947f6a553f2a150b0b0b0b0b0b0b0b0b0b0b0b0b0b0b08010000000011263b51667b9087725c47321d1d1d1d1d1d1d141d202125282e373c494d61697f948b79634e3c2c190600000000000000081c2e3f4b505c595447362411000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b8a908d8d908e877d72605645321e12000000000006141f26292e263035424f616f848c79634e38230e000000000000001220344859697f947f695846331f0c00000000000000000000000000000000000000000000000000000005192b3c50657b90816c5745321e0900000000001a2f44596f84917c67513c27120010263b50657b908874604b35200b00000000000000000000000000000000000000000000081b2e3e566c8196836e593a2a170400000a1f3447596e84998a776155443126180b01000000000000000000000b18283848596b8095846f5c4a36220d00000719293740444a4a4a4a5f758a8b76604b4a4a4a4a4a4a4a4a4a4a3a362e2010000011263b51667b90816c6176898b78634d402f1a0a00000000000000000000000000000000000000000000000005192b3b4b6075878b79636b80917c67523c27120000000a151d202121212121212121212121212121212e43596e83947f6a553f2a212121212121212121212121212121201d150900000011263b51667b9087725c473333333333333333263135373a3e3e4b4f5a636e7f8d937e685b49351e0e00000000000000000011212e373a4744403629190700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d6277807b78787a8089928274604b402f1d090000000000020b111319141c20324250657b90826c573d2c1a0600000000000005192b3b4b6074878976614c3b2a180400000000000000000000000000000000000000000000000000000b2034485a6e838b78634d3928160300000000001a2f44596f84917c67513c271200152a40556a7f95846e5443301c08000000000000000000000000000000000000000000000012273c51677c9188725847331f0a000004182a3a51667b909a8473604b4336291d14090300000000000108111b2936455662778a8f7a644f3e2d1b070000000b19242c2f3535354a5f758a8b76604b3635353535353535353524221b1002000011263b51667b90816c6c8195806b5a4935221200000000000000000000000000000000000000000000000000000d1e324557677d92846f6b80917c67523c271200000a1a2832363636363636363636363636363636363643596e83947f6a553f363636363636363636363636363636363531271909000011263b51667b9087725c48484848484848484848444b4c4f53575c646c7883948d7f6a604e3d2c1a0000000000000000000003111c2325322f2c24190b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20344859626b656263656b768498826d5e4c38240b0000000000000000000001081420354a60748888735b4935210c000000000000000d1d324556687e93806b5947341f0a00000000000000000000000000000000000000000000000000021527384d62788a846f5a49351b0a0000000000001a2f44596f84917c67513c271200192e44596e83957f6a553626140100000000000000000000000000000000000000000000000d23384d62788d8c76614c37210c0000000c20354a6073869c8a816c6054463931261e161311111112151d202f3a465460748598836e5c4b37201000000000000711171a1f20354a5f758a8b76604b36211f1f1f1f1f1f1f1f0f0d070000000011263b51667b90816c7a8c8875614b3c2c19040000000000000000000000000000000000000000000000000000031628394a607285907b6b80917c67523c27120002152838454b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b596e83947f6a554b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b44372715010011263b51667b9087725d5d5d5d5d5d5d5d5d5d5e55606164686c727a818b96887c6a614f42311f0f000000000000000000000000080e101c191711070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182b3b484d56504d4d5058617687907c6651392917030000000000000000000000071c3043546e838d78634e38230e00000000000000021528384b6074878977614c38281603000000000000000000000000000000000000000000000000091d3145566b80907b66513c2c19000000000000001a2f44596f84917c67513c2712001c31465c7186927c67523d27120000000000000000000000000000000000000000000000000b20354b60758a8e7a644f39240f000000071c304354677d928589807261574b4437322928272626282731353f4c58617282988675614b3e2e1b020000000000000003040a1f354a5f748a8b76604b36210b0a0a0a0a0a0a0a0000000000000011263b51667b90817085927d675746321e0e000000000000000000000000000000000000000000000000000000000a1c304354647a8c867480917c67523c271200091d324556606060606060606060606060606060606060606e83947f6a606060606060606060606060606060606060605544311d080011263b51667b90867272727272727272727272737475767a7d81878f938a8177675f4f4332241401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3437403b38383a4757677d9285705746331e0a000000000000000000000000132536566c81907a65503b251000000000000000000a1d314455677d92806b5645321e090000000000000000000000000000000000000000000000000b20364b6075888773604b35200e000000000000001a2f44596f84917c67513c2712001e33495e73888f7a654f3a2510000000000000000000000000000000000000000000000000081c3043547288917c66513c2711000000001325364a6072858a7e8983766860554b46393e3c3b3c3d37444b505d65768398897963574633201000000000000000000000091e33495e73888c77624c37220d000000000000000000000000000011263b51667b90817d9285705f4d3928160000000000000000000000000000000000000000000000000000000000001325364b5c6d82937e80917c67523c2712000b20364b6075767676767676767676767676767676767676748395807576767676767676767676767676767676767574604b35200b0011263b51667b908b878888888888888888888888898a8c8f938f8a857e766c61594d40322515060000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c111111111111111111111111111111111111111111111111111111111111110d0b060000000000000000000000000000000d1820222b2623232a394b60758a8a76614b36210c000000000000000000000000152a40556a7f917c67523c27120000000000000000011527374b6074888975604b3621110000000000000000000000000000000000000000000000071b2d3e52677d927f695443301c08000000000000001a2f44596f84917c67513c2712001f344a5f74898e79634e39240e000000000000000000000000000000000000000000000000011426365c7186927d67523d281200000000081c304354657b8f867a87887d7368615756535150515255556066707b86988678635b493929170200000000000000000000081d32475d72878d78634e38230e000000000000000000000000000011263b51667b9081888c79644e41301b0b00000000000000000000000000000000000000000000000000000000000008182e3e4d62778a8981917c67523c2712001d33485d72878b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b999c958b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b816c56412c170010253a50657b8687878787878787878787878686868583817e7a766f6961584c473a3022150700000000000000000000000000000000000000000000000000000000000000000000000000000000000c171f21272727272727272727272727272727272727272727272727272727272727272320190e000000000000000000000000000000050b0d16100d0e1e32455671868f7a654f3a2510000000000000000000000000152b40556a80917c66513c2711000000000000000000091d3144556a7f937d68533f2e1c08000000000000000000000000000000000000000000000d22364a5c70858a76614c36261401000000000000001a2f44596f84917c67513c27120020354a60758a8d78634e38230e000000000000000000000000000000000000000000000000001b31465b7086937e68533e281300000000001325364b5d6d82958076828b867d76706b68666666676a6e747b85908f8375635a493c2c1b0b0000000000000000000000061b30465b7085907a65503b2510000000000000000000000000000011263b51667b908997816c5c4a362313000000000000000000000000000000000000000000000000000000000000000010203448596a7f958a917c67523c2712001a2f455a6f8487878787878787878787878787878787878787878787878787878787878787878787878787878787867f6a543f2a15000e23374b5d657171717171717171717171717171706f6e6b68656056534c463a342a1c120400000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2933373c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c38352b1e0e000000000000000000000000000000000001000002162838596f84917c66513c2711000000000000000000000001162c41566b81907b66503b2611000000000000000000021527374c61778a86715d4b37230900000000000000000000000000000000000000000004172a3a4f64798e826d584733180800000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e2913000000000008182e3f4c6177898c7a6d79838a8a85807d7c7b7b7d7f8489908e847a6e6157493c2c1e0e00000000000000000000000002172c41576c81947f6a543b2a18050000000000000000000000000011263b51667b909e8976614c3d2d1a05000000000000000000000000000000000000000000000000000000000000000005182b3b4b6075879d917c67523c271200182d4154656f71717171717171717171717171717171717171717171717171717171717171717171717171717171716a614f3c271200081c2e3f4b505c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5a5856534f4b45383633291f180c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a474c515151515151515151515151515151515151515151515151515151515151514d493c2b19060000000000000000000000000000000000000000192e43596e83927d67523d2812000000000000000000000001142636586e838e79634e39240e00000000000000000000091f3447596d828f7a65503727150200000000000000000000000000000000000000000a1f3347586d828e79644e3a29170000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e2913000000000000111f334758677c918775646e787e85898d8f9091908e8a8680796f645c4b46392c1e0e000000000000000000000000000012273c52677c91846e5948341f0f0000000000010000000000000011263b51667b90937e685847331f0f000000000000000000000000000000000000000000000000000000000000000000000d1e324556677d92917c67523c27120012253747545a5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c544f4332200c000011212e373a4747474747474747474747474746464543413e3a363228211f170c04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f3347586166666666666666666666666666666666666666666666666666666666666666625a4935200b0000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000081c30435471868b76614b36210c0000000000000000000004182a3b50667b90826c5544311d0800000000000000000000000000000000000000011426364c61778a85705c4a361c0c0000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000004182a3a4d5f6d8298826d5f62697074787a7b7b7a7876716b645c4f4b3e33291b0e0000000000000000000000000000000c22374c61778a8a77624c3d2d1c13100f1013170f0d070000000010253a50657b868272604b3a2a170100000000000000000000000000000000000000000000000000000000000000000000031628384d5f6d81867c66503b26110008192937414547474747474747474747474747474747474747474747474747474747474747474747474747474747473f3c32251503000003111c2325323232323232323232323232313131302e2c2925211e160c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61767c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c78624d38230d0000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000b20354b60748988725746321e0a00000000000000000000000c20354b6074888975604b36200b00000000000000000000000000000000000000081c304354697f927c67523e2d1b000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e2913000000000000000c1c30414c617687927d675b5454606365666665636056564e4a3e372e1e170b000000000000000000000000000000000a1f3347586d8295806a5b4a3c3025252425282c24221b100200000e23374b5d65716d605443301c0c0000000000000000000000000000000000000000000000000000000000000000000000000a1a304152636d71665e4c38230f00000b19252d2f32323232323232323232323232323232323232323232323232323232323232323232323232323232322a272015070000000000080e101c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1a191613100b09030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f253a4f647a8f9090909090909090909090909090909090909090909090909090909090907e69533e29140000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000e23394e63798e836e59392916030000000000000000000000081d3144556c81907b6651362513000000000000000000000000000000000000000b20354b6073878874604b362010000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000121f334658647a8b8a796356454a4d4f5151504e4b453839362d221b1003000000000000000000000000000000000004182a3a4e63798b8b79635a4a43363a393b3e413a362e20100000081c2e3f4b505c584b4336261400000000000000000000000000000000000000000000000000000000000000000000000000001323354552575c504c402f1c090000000812181a1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c15120c0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61767c7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b7b78624d38230d0000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000013283d52687d927f69543f2a140000000000000000000000000114263750657a8f826d5443301c07000000000000000000000000000000000006192c3c51667c91806a5544311d08000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000417293a4a5c697f948675604b41383a3b3c3b3936322824221b100700000000000000000000000000000000000000000c21364a5b697f94867867605452504f5053564f4a3e2e1b07000011212e373a474335302618080000000000000000000000000000000000000000000000000000000000000000000000000000051727353e42473b382f2211000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040200000000000a1f3346586166666666666666666666666666666666666666666666666666666666666666625a4835200b0000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000001142637576c818f7a65503a2510000000000000000000000000000b20354b6075898874604a35200b00000000000000000000000000000000000c2135495b6f848a77624d37271502000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000b1b2e3e4a60728397826d5f4d3d2c26262523211e160f0d0700000000000000000000000000000000000000000000071a2d3d4a60728194887c736b67656465686c645c4a36220d000003111c2325312d201c1408000000000000000000000000000000000000000000000000000000000000000000000000000000000917232a2d3126231c1104000000000000000000000000000000000000000000000a131a1c2012100a01000000000000000000000000000000000000000000040e141620190b080100000000000000000000000000000000000000020b11131f1d0c0a0400000000000000000000000000000000000000000000000000000000000000000001080b121a1711070000000417293a464c515151515151515151515151515151515151515151515151515151515151514d483c2b19060000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000000081d31445570858a76614b36210c00000000000000000000000000081d3144556f848e79634e39240e00000000000000000000000000000000031628394d63788b836e594834190900000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000101c304354617687927d675b49382816100e0b090300000000000000000000000000000000000000000000000000000f1c304354606d7f8a9187817c7a797a7d817a644f3a240f00000000080e101c180b0801000000000000000000000000000000000000000000000000000000000000000000000000000000000000060f15181c110f0900000000000000000000000000000000000000000000000d1b262e313527251d130500000000000000000000000000000000000000081621282b352e201c1408000000000000000000000000000000000006141f26283533211f170c0000000000000000000000000000000000000000000000000000000000000008141c20282f2c24190b0000000c1c2933363b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b38352b1e0e000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000b20354b60758986715746321e0a000000000000000000000000000115273754697e937e69543f291400000000000000000000000000000000091e3246576c818f7a65503b2b180000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000001325364758657b8c8a79635645321e1301000000000000000000000000000000000000000000000000000000000000132536434a616a7881888e908f8e908e897c66513c2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031b2b3943464a3c39302313010000000000000000000000000000000000041626333d404a433530261808000000000000000000000000000000011424313a3e4a483733291c0c0000000000000000000000000000000000000000000000000000000008131c2630353d4440362919070000000c171f21262626262626262626262626262626262626262626262626262626262626262320190e00000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000e24394e63798e826d583929160300000000000000000000000000000e24394e63798e846f593a2a17040000000000000000000000000000000c21364b61758986715d4b371d0d0000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e2913000000000000000000000008182a3a4b5d6a7f948675604b41301f0f0000000000000000000000000000000000000000000000000000000000000818253043505a626c73787b7d7d7b7974665e4c38240f000000000000000000000000000000000000000a141a1c2020202020202020202020202020202020202020202020202020202020202020202020202018161006000000000000000000000000000000000000000011213949565c60524d41301d0a00000000000000000000000000000000000e213344515660594b433626140100000000000000000000000000000f1f31424e535f5d4c473a29170400000000000000000000000000000000000000000000000000091218253036434b5259544736241100000000050b0d161616161616161616161616161616161616161616161616161616161616160f0d080000000000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000013283d53687d927e68533e29130000000000000000000000000000000b20354b60758988735847331f0a0000000000000000000000000000081c2e3f53687e937e68533f2e1c000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000c1c2e3f4b60728497826d5f4d3d2c1a0a00000000000000000000000000000000000000000000000000000000000008131c333c484d575b63666868666360554c40301d090000000000000000000000000000000000000e1c272f32353535353535353535353535353535353535353535353535353535353535353535353535352d2b231709000000000000000000000000000000000000081c2e3f56677175675f4d392510000000000000000000000000000000000014283d51626b756e605443301c10000000000000000000000000000a1a2d3d4e60687472615847331f0a000000000000000000000000000000000000000000000008121c233036434a5460676f6554402c170000000d1920222b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b25221b1002000000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000002172c41576c818f79644f3a240f000000000000000000000000000000081d31445571868c77614c37210c00000000000000000000000000000e23374b5d71868975614b362111000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000000000111c304354627788927d675b493828160300000000000000000000000000000000000000000000000000000000000000151d2b34383d494e515252514e4b44373022120000000000000000000000000000000000000a1c2c3943474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a423f3527170600000000000000000000000000000000000e23374b5d71858a7d67523e2d1b0700000000000000000000000000000000162b40566b808a8372604b3e2e1b0b0000000000000000000000021528384a5b687e8a8776614c37210c00000000000000000000000000000000000000000008111c232f38404c546067737d836f59442f1a00000d1d2b3438404040404040404040404040404040404040404040404040404040404040403a372e2010000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000051a2f445a6f848c76614c37210c00000000000000000000000000000001142637576d828f7a65503a25100000000000000000000000000005182b3b50657a8f816c5746321e09000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000000000011426364759657b8c8a79635645321e1301000000000000000000000000000000000000000000000000000000000000000d1920222c36393b3d3d3b393531261912040000000000000000000000000000000000001427394a565c606060606060606060606060606060606060606060606060606060606060606060606060605852453523100000000000000000000000000000000005192b3c50657a8f9b85705c4a36220c000000000000000000000000000000000b20354b607385947f6a5c4b39291703000000000000000000000c1d32455663798b8c7b655847331f0a0000000000000000000000000000000000000007101b222f37404c505e66737c8692846f5a442f1a0005192b3c484d565656565656565656565656565656565656565656565656565656565656564f4b3e2e1b080000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000071d32475c728789745847331f0a0000000000000000000000000000000014293e53697e937e69533e2914000000000000000000000000000b203448596e838b78634d39281603000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e2913000000000000000000000000000008182a3b4c5d6b80958675604b41301f0f0000000000000000000000000000000000000000000000000000000000000000050b0f1a21232628282624201d140900000000000000000000000000000000000000001a2f43566871757575757575757575757575757575757575757575757575757575757575757575757575756d64523f2b16000000000000000000000000000000000b2034485a6e8398878e79644f3b2a1804000000000000000000000000000000081d31445562788a8c7a645746331e130000000000000000000c1c2f3f4b60748695806b5d4b3a291704000000000000000000000000000000000007101b222e373f4b505e66717c8691898075614b36210c000b2034485a626b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b645c4b37220d0000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000091e33495e738888725d3a2917040000000000000000000000000000000011263b51667b90816b56412c16010000000000000000000000021527374d62778a846f5b49351b0b00000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000d1d2f3f4b60738497826d5f4d3d2c1a0a00000000000000000000000000000000000000000000000000000000000000000000060c0e111313110e0b08010000000000000000000000000000000000000000001c32475c71878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a826d58422d18000000000000000000000000000000031628384d62788b897d92826d5947341f0900000000000000000000000000000001152737495a677d928775614b41301e0e0000000000000004172a3a4c5d6c81968573604b3f2e1c0c00000000000000000000000000000000070f1a212e363f4b4f5d65707b85918980766a615746321e09000d22384d6278808080808080808080808080808080808080808080808080808080808080807b644f3a250f0000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000a1f34495f748987725c3b2b1805000000000000000000000000000000000e24394e63798e836d58432e18030000000000000000000000081d3144556a80907b66513c2c190000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000000000000000111d314455627889927d675b493828160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001c32475c7186847e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e87826d58422d18000000000000000000000000000000091e3245566b80958176898a77614c3727150200000000000000000000000000000009192c3c4d5f6d8298826d5f4d3c2c19090000000000000e1f334758657b8d8978625544312111000000000000000000000000000000060f1a212d363e4a4f5d65707b85908980766b61584b4639281603000f253a4f647a8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c7e69533e29140000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000091e33485e7388887359483420110c0a03000000000000000000000000000c21374c61768c856f5a45301a0500000000000000000000000b20364b6074888773604b35200e0000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000000000000000011426374859667c8d8a79635645321e1301000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000001c32475c7187816c6868686868686868686868686868686868686868686868686868686868686868687085826d58422d180000000000000000000000000000000b21364b6075888e796c82957f6a5544311d08000000000000000000000000000000000e1e30414b617587927d675a4937271501000000000e1e31424c617688927d675a493727150300000000000000000000000000060e1a212d363e4a4e5c646f7a85908a80776b61584c473a32281b0b00000b20354b60737777777777777777777777777777777777777777777777777777777777777775604b36210b0000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000051a2f455a6f848a77624d3d2f25211e170b0000000000000000000000000a1f334758748987715c47321c0700000000000000000000071a2d3d52677c917f695443301c080000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e2913000000000000000000000000000000000009192b3b4c5e6b80968675604b41301f0f00000000000000000000000000000000000000000000000000040e1416150c0a03000000000000000000000000000000000000000000000000000000000000001c32475c7187816c57535353535353535353535353535353535353535353535353535353535353535b7086826d58422d180000000000000000000000000000081c2e3f53687d92846f63798e8874604b3620100000000000000000000000000000000000131e334657647a8b8a78625544311d1100000009192c3c4e606e8398826d5f4d3c2c1909000000000000000000000000050e19202c353d4a4e5c646e7a848f8a81776b61594c473a332a1e160b000000081d3144556061616161616161616161616161616161616161616161616161616161616161605645321e090000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000013283d52687d927f6a5c4b3f3a3633291b0b000000000000000000000004172a3a5d728888735e49331e00000000000000000000000d21364a5c70858976614c362614010000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000000000d1d2f404b60748597826d5f4d3d2c1a0a0000000000000000000000000000000000000000000000081621282b2a211e170b0300000000000000000000000000000000000000000000000000000000001c32475c7187816c57413e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e465b7086826d58422d1800000000000000000000000000000e23374b5d7186917c665b6f84927c67523e2d1b0700000000000000000000000000000000031729394a5c6a7f948573604b3f2e1c0c0001152737495a687e928776614c41301e0e0000000000000000000000050d19202b353d494e5b636e79838f8a81776b62594c473a332a1f170c030000000001152737444b4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4b45382816020000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000b20354b6073858a7a655d53504c463929170300000000000000000000001d32475c728789745f492614010000000000000000000417293a4e64798e826d5847331808000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000000000000000000000121d314455627889927d675b4938281603000000000000000000000000000000000000000000041626333d40403633291e160a020000000000000000000000000000000000000000000000000000001c32475c7187816c57412c29292929292929292929292929292929292929292929292929292931465b7086826d58422d180000000000000000000000000005192b3c50657b8f87736051667c9185705c4a36220d00000000000000000000000000000000000b1b2d3e4a60728495806b5d4b3a2a17040b1d31445563788a8c7a64574633231300000000000000000000040d181f2b343c494d5b636d79838c8a81776c62594c473b342a1f170c04000000000000000919273135373737373737373737373737373737373737373737373737373737373737373632281a0a000000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000000081d314455627887887b6f6865615746331e0a00000000000000000000071c31465c71868a755544311d080000000000000000000a1f3346586c828e79644e3a2a1700000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000000000002152737485a677c918a79635645321e130000000000000000000000000000000000000000000e2133445156554b463932281e160a02000000000000000000000000000000000000000000000000001c32475c7187816c57412c17131313131313131313131313131313131313131313131313131b31465b7086826d58422d18000000000000000000000000000b2035485a6e83947f69544b6073878f7a644f3b2a18050000000000000000000000000000000000101c3043546277888c7b655847331f131b2e3f4b607385947f6a5c4b392917050000000000000000000c181f2a343b484d5a626d79828b8a81786c62594c483b342a1f180c040000000000000000000009151d2022222222222222222222222222222222222222222222222222222222222222211e160a00000000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000001142637485a6277828c847e7a75614c36210c00000000000000000000061b30465b70858a75604b35200b0000000000000000001325364c61768985705c4a361c0c00000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e2913000000000000000000000000000000000000000009192b3c4d5f6c81978675604b41301d0c000000000000000000000000000000000000000014283d51626b6a61574b453932281d150a0100000000000000000000000000000000000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000000000000000000000031628394d62788b8a76614c4354697f94826d5947341f0a0000000000000000000000000000000000001325364859667c908776614c42311f29394b5d6b80958473604b3e2e1b0b000000000000000007151c2a343b484c59626c78828b8a82786c625a4d483b342b1f180d040000000000000000000000000001080b0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0b09020000000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000009192b3c4859616d7a86938f7c66513c271100000000000000000000051a30455a6f858b76604b36210b0000000000000000071c304354697e927d67523e2d1b0000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000000000000000e1e30404b60748597826d5f4d3b2a180400000000000000000000000000000000000000162b40566b807f766960574b453831271d1509010000000000000000000000000000000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000000000000000000000091e3245576b8096816c5847364c6176898a77624c38271502000000000000000000000000000000000008182b3b4c5e6c8196836e604e3d2c334657657b8c89786254433020100000000000000000041525333a474c59626c78828a8b82786c625a4d483c342b20180d05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000114263748596276828c857f7c76614c37210c00000000000000000000061b30455b70858a75604b35200b00000000000000000b20354a6073878875604b3620100000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000000000000000000000000000121d32455663798a927d675947341f0b00000000000000000000000000000000000000142a3f54697f92887f756960564b453831271c140800000000000000000000000000000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000000000000000000b21364b6075898e79634e3a3346586c81957f6a5645311d090000000000000000000000000000000000000d1d2f404b607486937e685b4938414c617687917c675a483626140200000000000000000d2133435059616b77818a8b82786d625a4d483c342b20180d0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090e101e1a1711070000000000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000000081d314455627886897c706966615847331f0a00000000000000000000061c31465b71868a755544311d080000000000000006192b3c50667b90806a5645311d090000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000000000000000002152838495b667c868577614c37220c000000000000000000000000000000000000000b20354a60727d8793887e756860564b443730261c13080000000000000000000000000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000000000000000081c2f3f53687d93846f5b4a36293a4e63798e8875604b36201000000000000000000000000000000000000000121d32455663798a8a796356454d5f6d8297826d5f4d3c2b180800000000000000000013283c50616a77808a8b82786d635a4d493c352b20190d050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c2326342f2c24190b00000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000b20354b6073858a7a665e54514c473a2a170400000000000000000000071c32475c718789745f49271501000000000000000b2035495a6f848a77624d382715020000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000000000000000000000000000000000000000000000a1a2c3d4c5e667170615947341f0b00000000000000000000000000000000000000071c3043546068747e8793887e746860554b43363025181209000000000000000000000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d1800000000000000000000000e23374b5d7186917c66513d2d21364a5b6f84927d67523e2e1b0700000000000000000000000000000000000002152838495b687e938574604b5a677d918675614b41301d0d00000000000000000000152b40556a808a8a82796d635b4d493c352b20190e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212f383b49444037291907000000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000013283d52687d92806a5c4c403b37332a1c0c0000000000000000000000031729395d728789735e49341e00000000000000031628384d62788b836e5948341a0a000000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000000000000000000000e1f2f404c515b5b4c473b2a18040000000000000000000000000000000000000000132536434a556068747e8893877d746760544a433630231c120800000000000000000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000000000000006192b3c50657b908773604b35201a2d3d51667c9185705c4b37220d000000000000000000000000000000000000000a1a2c3d4e606e8396816b5e6278898b7a64574632231200000000000000000000001b30465b708591837c726760544a433630251c1308000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091c2f404c505e595447372411000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000051a2f455a6f848a77624d3e2f26211f170c0000000000000000000000000a1e334657748987725d47321d08000000000000091e3245566b808f7a65503b2b1800000000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000000000000000000000012222f383b464637342a1d0c0000000000000000000000000000000000000000000818253037444b566068757e8892877d736760544c40382f231c11080000000000000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000000000000000000b2035495a6e83947f695443301c0f20354b6073878f7a644f3b2b1805000000000000000000000000000000000000000f1f31424c6176878d7c667284947f695c4a3928160400000000000000000000000b20354a60727c8691877d736760544a43363025181209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384c5e65736f6554402c17000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000091e33485e7388887359483420120c0a04000000000000000000000000000c21364b61768b85705b45301b060000000000000b21364b60758986715d4b371d0d00000000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000000000000000000000004121d24263131221f180c000000000000000000000000000000000000000000000008131c273138454b566069757e8892867c73665e504c40382f231c1107000000000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000000000000000031628394d62788b8976614c362614081c304354697f94826d594834200a0000000000000000000000000000000000000001141f334758657b8c88777f948472604a3e2d1b0b000000000000000000000000071c3043546067737d8792867c736760544a433630241d1209000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b89836f59442f1a000000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000a1f34495f748987725c3b2b1902000000000000000000000000000000000e23394e63788e836e59432e19040000000000081b2e3e53687d927e68533f2e1c0000000000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e2913000000000000000000000000000000000000000000000000000000090f111c1b0c0b04000000000000000000000000000000000000000000000000000009151d273138454b566069757f8891867c71665e504b3f372e221b100700000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000000000000000091e3246576b8196816c5846331808011426364c6176898a77624c38281502000000000000000000000000000000000000000417293a4b5d6a8095848b88776254433020100000000000000000000000000000132536434a546067737d8791867c736660544c40382f241c120900000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000091e33495e738888725d3a2917040000000000000000000000000000000010263b50657b90816c57412c170200000000000d22374b5c71868975614b3621110000000000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020a151d283238454b566069757f8891857b70655d4f4b3f362e221b10070000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000000000000c21364b6175898e79634e3a29170000081f3346586c8195806a5645321d0900000000000000000000000000000000000000000c1c2e3f4b60758899917c6759483625130200000000000000000000000000000818253036434b556068747e8891867c73665e514c40382f231c11090000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000081d32475d728789745847331f0a0000000000000000000000000000000013283d53687d927f69543f2a14000000000004182a3b4f647a8f816c5746321e090000000000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e29130000000000070b0f0d070000000000070b0f0d07000000000000000000070b0f0d07000000000000000003090b0f0d0700000000000000000000000000000000020a151d283238454b576169757f8990857b70655d4f4a3e362d211a0f04000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000000000091c2f3f53687e93846f5b49361c0c00000417293a4e63798e8875604b3620100000000000000000000000000000000000000001152737495a677d928898826d5f4e3d2c1a0a00000000000000000000000000000008131c263037444b556068747e8891867c71665e514c40382f231c1108000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000051a2f455a6f848c76614c37210c00000000000000000000000000000000132536576c81907b66503b261100000000000b1f3447596d838b78634d392816030000000000000000000000000000000000000000001a2f44596f84917c67513c27120020354a60758a8d78634d38230e000000000000000000000000000000000000000000000000061b31465b7086937e68533e291300000008131c2024221b10020008131c2024221b1002000000000008131c2024221b100200000000000a161e2124221b100200000000000000000000000000000000020a161e283239464b57616a767f8990857a6f645c4e4a3e362d1f170c0000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d1800000000000000000e23384c5d7186917c66513d2c1a000000000c2136495b6f84927d67523f2e1b080000000000000000000000000000000000000c1d3144556278898a7883927d685b49382815020000000000000000000000000000000008141c263137444b566069757f8891867c70665e504c40382f231c110800000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000002172c41576c818f79644f3a240f000000000000000000000000000000071c30435470858d77624d38220d00000000011426374c61778a846f5b49351b0b000000000000000000000000000000000000000000001a2f44596f83917c67513c2712001c32475c71868678624d38220d00000000000000000000000000000000000000000000000003182e43586d82867d67523c27120000081825303539362d2010081825303539362d201000000000081825303539362d2010000000000a1a28323639362d2010000000000000000000000000000000000000020a161e283239464b57616a767f898f847a6f645c4e4a3d33291c0c00001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000000006192c3c50657b908773604b35200f00000000061a2c3d51667c9186715d4b37220d00000000000000000000000000000000000c1c2e3f4b607385927e6877888a79635645321d1200000000000000000000000000000000000109141d273138454b566069757f8991857b70665e504c40382f231c11080000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000013283d53687d927e68533e29130000000000000000000000000000000b20354a60748989745a4834200b00000000081d3144556a7f917c66513c2c19000000000000000000000000000000000000000000000010263b50657b7d78624d38230d001a2f4356687171625a4834200b00000000000000000000000000000000000000000000000001162b3f53646d71675f4d3925100000132536434a4f4a3e2d1e132536434a4f4a3e2d1e0e000000132536434a4f4a3e2d1e0e000003162838454b4f4a3e2d1e0e00000000000000000000000000000000000000030b161e293239464b58616a7680898f84796e635b4c463a291704001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000000000000c2035495a6f84947e695443301c0800000000000f20354b6073878f7a644f3b2b180500000000000000000000000000000004172a3a4b5d6b8095836e60667c918574604b402f1d0d0000000000000000000000000000000000000109151d283238454b57616a76808990857b70655e504b3f372e231c1103000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000f24394e64798e826d583929170300000000000000000000000000000e23384d63788d85705a3c2b1905000000000b20354b6074888773604b35200e00000000000000000000000000000000000000000000000e23384c5e6568625a4835200b001427394a565c5c4d483c2b1905000000000000000000000000000000000000000000000000001023354653585c524d41301d0a00071c30435460645c4a3c2b1c30435460645c4a3c2b190500071c30435460645c4a3c2b190500091e32455660645c4a3c2c1c0c0000000000000000000000000000000000000000030b161e29333a464c58616a7680898c83796d615846331f0a001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000000000031629394d63788b8976614c362614010000000000081c304354697f94836e594834200a0000000000000000000000000000010f1f334758657b8c8876614c5e6c8196816c5e4c3b2b180800000000000000000000000000000000000000020a151d283239464b58616a76808990857b70655d504b3f372e2116080000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000b20354b60758986715746331e0a000000000000000000000000000013253653687d93806a55402b1500000000061a2c3d51677c917f695443301c080000000000000000000000000000000000000000000000091c2f404c50534d483c2b1906000a1c2c3943474738342b1d0d0000000000000000000000000000000000000000000000000000061828353f43473c3930231201000b20354a607279705a483520354a607279705a4835200b000b20354a607279705a4835200b000b21364b607479645a493a291704000000000000000000000000000000000000000000030b171e29333a464c58616b777f888c8276614c36210c001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000000a1e3246576c8196816c5846331808000000000000011426364c6176898b77624d38281502000000000000000000000000000f1f31424c6176888d7b6558474b607486917c665948362614010000000000000000000000000000000000000000020a161e29323a464c58616b77818a90857b70655d504b3f3326160400000000000000000000000000000002080b0f12141414120f0b0902000011263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000000081d31445570858a76614b36210c00000000000000000000000000071c3043546e838f7a654f3a2510000000000c2136495b6f858a77614c3626140100000000000000000000000000000000000000000000000011212f383b3d38352b1e0e0000000e1c272f32322220190d000000000000000000000000000000000000000000000000000000000a18232b2e3227251d120500000f243a4f647a8d78624d38243a4f647a8d78624d38220d000f243a4f647a8d78624d38220d000e23384d63788878635846331f100000000000000000000000000000000000000000000007101b222e363e4b4f5d646f7a828b8878624d38220d001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000001325364b6176898e79634e3a29170000000000000000081f3346586c8195806b5645321d090000000000000000000000000a1a2d3d4e606e8396806b5d4c3a455663798b8977625443301c1000000000000000000000000000000000000000000000030b161e29333a474c59616b77818a90857b70655d504433210d00000000000000000000000001080b151d202427292a292724201d150b0811263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000001152737576c818f7a65503a2510000000000000000000000000000b20354a6074888975604b36200b000000031729394e63798e826d58473318080000000000000000000000000000000000000000000000000003111c2326282320190e00000000000a141a1c1c0d0b05000000000000000000000000000000000000000000000000000000000000061016181c12100a0100000011263b50667b8e79644e39263b50667b8e79644e39240f0011263b50667b8e79644e39240f000c2135495b687e8676614c3e2d1b070000000000000000000000000000000000000007101b222d363e4a4f5c646f7a848f887f75625a4835200b001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000000071c304354697e93846f5b49351b0b00000000000000000417293a4e63798e8875604b3620100000000000000000000000031628384a5b687e938674604b3f2f384a5b697e938472604b3f2e1c0c0000000000000000000000000000000000000000000000030b171f2a333b474c59626c78828b90857b6b62503d2814000000000000000000000009151d20273136393c3e3f3e3d39363127201d15263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000013283d52687d927f69543f2a14000000000000000000000000000f24394e64798e846f5544311d080000000a1e3346576c818e79644f3a2a1700000000000000000000000000000000000000000000000000000000090e10130d0b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b8f7a644f3a263c51667b8f7a644f3a250f0011263c51667b8f7a644f3a250f0006192c3c4e606e83826d5c4a3622100000000000000000000000000000000000070f1a212d363e4a4f5c646f7a848f897f75696057483c2b1905001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d1800000000000b20354a607386907b66513d2c1a000000000000000000000c2136495b6f84927d68523f2e1b08000000000000000000000d1e32455663798b8a7963564531212d3d4f606f83957f6a5d4b3a291704000000000000000000000000000000000000000000000000040c171f2a343b484c5a626c78828b8f806b55402b1600000000000000000002121927313537444b4e51535453524f4b4538363127263b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000e24394e63798e836e59392816030000000000000000000000081b2e3e566b80927d6853372715020000000c21364b61768985705c4a361c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050f151715130d03000000000000000000000000000000000000000000000000000000000000000000000012273c51677c8f7a65503a273c51677c8f7a65503a25100012273c51677c8f7a65503a251000000e1e31424c61778879644f3e2e1b070000000000000000000000000000070f1a212d363e4a4f5c646f7a848f8980766a61574b45392b1e0e00001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000006192c3c50667b908773604b35200f00000000000000000000061a2c3d51667c9186715d4b37220d0000000000000000000d1d30404b607586937e695b493827151f32424c6176888c7b655847331f140100000000000000000000000000000000000000000000000000040c181f2b343c484d5a626d798386715c47321c000000000000000009151d3037444b525560646769696967646056524b4437303b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d281200000000000000000000000b20354b60748987725746321e0900000000000000000000000d22374b5c72878a76614c36210c0000000014293e53697e907c66513e2d1b000000000000000000000000000000000000000000000000000000000000000000070c0e16160f0d08000000000000000917222a2d2a282015070000000000000000000000000000000000000000000000000000000000000000000012273d52677c907b66503b273d52677c907b66503b26110012273d52677c907b66503b2611000000131f3447596a7f85705c4b37220d000000000000000000000000060f1a212d363e4a4e5c646e7a848f8980766a61584b463932281b0e0000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000000c2035495a6f84937e695443301c0800000000000000000000000f20354b6073878f7a654f3b2b19050000000000000008182b3b4c5e6c8197836f604e3d2c1a0a141f334758657b8d8776614c42311f0f000000000000000000000000000000000000000000000000000000040d18202b353c494d5b636e78624d38220d0000000000000009192731404d5560676f75797c7e7f7e7c79756f6760554d413b51667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d28120000000000000000000000081c30435471868b76614b36210c00000000000000000000031629394f647a8f836e5846331f0a0000000011263b50667c7a665e4d39201000000000000000000000000000000000000000000000000000000000000000010f1a21242b2b25221b100200000000051727353e423f3c3325150300000000000000000000000000060c0e121414120d0b050000000000000000000013283d53687d917c66513c283d53687d917c66513c27110013283d53687d917c66513c271100000004182a3a4c6176897a644f3a240f00000000000000000000060f1a212d363d4a4e5c646e7a838e8a81776b61584c463a32291e160a000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d18000000031729394d63788c8976614c362614010000000000000000000000081c304354697f94836e594834200a000000000000011426364859667c918877614c42311f0f0004182a3a4c5d6b8096836e604e3d2d1b0a00000000000000000000000000000000000000000000000000000000050e19202c353d494e5a625a4834200b00000000000009192737444b5e66747c84898e91908e8e908e8a847d74675f4c4751667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000001142636586e838e79634e39240e000000000000000000000a1e3246576c81917c67523a291704000000000f23384c5e66655d4d40301d0200000000000000000000000000000000000000000000000000000000000003111f2d363940413a372e2013050000000f223545525755504333200d00000000000000000000050b0f1a2123272929272220190d07000000000000000013283e53687d917c67523c283e53687d917c67523c27120013283e53687d917c67523c27120000001525333b48576d82816c573b2a180400000000000000060f1a212c363d4a4e5b636e79838e8a81776b61594c473a33291e160b0300000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000000a1e3346576c8196816c5746331808000000000000000000000000011426364c6176898b78624d3828160200000000000b1c304354627889907c6659473424140100000c1c2f3f4b607485937e685b4a392816030000000000000000000000000000000000000000000000000000000000050e19202c353c484d483c2b19050000000000021527374455606d7c87928f87817d7a79797a7d828890877d6e615951667b9085705b45301b000000000000000000000000000000000000000004192e43596e83927d67523d2812000000000000000000000000162c41566b81907b66503b2611000000000000000000001325364b6176898875604b36200c0000000000091c2f404c50504b3f3022120000000000000000000000000000000000000000000000000000000000000011212e3d4a4e56564f4b3e302313010000152a3e52636c6a61503c280b0000000000000000080d1920222c36393d3f3f3d38342b221b100200000000000013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c271200000e1e3343505962677d88725947341f0b0000000000060e1a212c353d494e5b636e79838c8b82786c62594c473b332a1f170b03000000000000001c32475c7187816c57412c17020000000000000000000000000000000000000000000000061b31465b7086826d58422d180000001325364b6176898c79634e3929170000000000000000000000000000081f3346586c8195806b5645321e09000000000b1b2e3e4b60728496816c5e4c3b2a180600000000111d31455663798a8b79635745321e1200000000000000000000000000000000000000000000000000000000000000060f1a212b3438342b1d0d0000000000000a1d3144556073829191837a726c6865646465686c737b84918377635b667b9085705b45301b00000000000000000000000000000000000000000011263c51667c7f79634e39230e000000000000000000000000152b40556a80917c66513c2711000000000000000000071c304354697e93806a5645321d0900000000000011222f383b3b372e211204000000000000000000000000000000000000000000000000000000000000081c2e3f4b5b636b6b645c4d41301e0a0000172d42576c817f6a5539291703000000000208101b222b34383d494e525454524d483c362d201406000000000013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c27120005192b3c50616a777a7b8c77614c37220c000000000e19202c353d494e5b636e79838b8b82786d625a4d483b342a1f170c040000000000000000001c32475c7187816c57412c170a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a1b31465b7086826d58422d180000071c304354697e93846f5b49351b0b00000000000000000000000000000417293a4e63798e8875604b3621110000000417293a4b5c6a7f948674604b402f1d0c000000000002152738495b687e928675604b41301e0e0000000000000000000000000000000000000000000000000000000000000000060d19202220190d0000000000000a1a30414b60738397897c6e645c5752504f4e50535460656f7c88877964667b9085705b45301b0000000000000000000000000000000000000000000f24384c5e6669635b4935210c000000000000000000000000152a3f556a7f917c67523c27120000000000000000000b20354a6073878a77624c3828150200000000000003111c232625231c1103000000000000000000000000000000000000000000000000000000000000000e23374b5d657980807a675f4d3a250800001d32485d728786715746331e0800000409151d202e373c484d565b6367696967625a4f4a3e312414050000000013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c2712000b2035485a6a7f8b8f8b8f7a644f3a250f000004121e2c353d494e5b636d79838c8c83796d635a4d483c342b1f180c0400000000000000000000001c32475c7187816c57412c1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f31465b7086826d58422d1800000b20354a607387907b66513d2c1a000000000000000000000000000000000c2135495b6f84927d68533f2e1c0800000a1f334658647a8c8b79635645322212000000000000000a1a2c3d4e606e8397816d5f4d3c2b1906000000000000000000000000000000000000000000000000000000000000000000050b0d0b05000000000000031628384d5f6d82978879665e4f4a3e3d3b39393b36434a505e667784897a667b9085705b45301b000000000000000000000000000000000000000000091d2f404c51544e493d2c1a06000000000000000000000000132536566c81907a65503b2510000000000000000008182f4050667b90826d5947341a0a000000000000000000090f11100e0800000000000000000000000000000000000000000000000000000000000000000010253a50657b8b95968d7d675236261401001a2f455a6f848a76614b3626150e10181f2731363f4b4f5a626b72797c7e7e7c7870645c4e423123130000000013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c2712000d22384d62788c9fa99f907b66513b2611000012222f3c494d5b636d79838b8e83796e635b4d493c352b20180d04000000000000000000000000001c32475c7187816c57413434343434343434343434343434343434343434343434343434343434465b7086826d58422d18000115273751667b908773604a35200f00000000000000000000000000000000061a2c3d51667c9186715d4b37230e0004182a3a4c617687947e695b4a3828160400000000000000000e1f31424c617687917d675a4935200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556677d918b7a645b4c40362e2825242425253035404c5961748289797b9085705b45301b0000000000000000000000000000000000000000000012222f383c3f39352c1f0f000000000000000000000000071c3043546e838d78634e38230e00000000000000001325364c5e70858b79634e3b2a18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f849aaaab9d88735443301c0800152a3f556a7f917c675443312724252a3337444b525d656e7880878e928f90928a857a69604e42311e0e00000013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c27120010263b50657b90aab8a78f7a644f3a250f00091d2f404c5a636d79828b8f847a6e635b4e493d352c20190e050000000000000000000000000000001c32475c7187816c57494949494949494949494949494949494949494949494949494949494949495b7086826d58422d1800081d3144556f84927e695443301c0700000000000000000000000000000000000f20354b6073868f7a65503a2510000a1f3447596e83938372604a3d2d1a0a00000000000000000000131f334658657b8c8978624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607587947e695c4a3d2f221b13100f0f10131c202f3b4756607283867d9185705b45301b0000000000000000000000000000000000000000000004121d24262a23211a0f010000000000000000000001081325364a60748888735b4935210c00000000000000071c304354667c90826d5b4a361d0d000000000000000000010a10121313131313131313131313131313131313131313131313131313131313110f09000000001c31475c71869cb1b49f8a73604b35200b000d23384d62788b8573604b4437393b3a474c556067717a838a9088817c7a7b7e848f8c7e69604e3c2b1906000013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c2712000d22384d62788b9fa99e8976614b36210c000f24384c5e6678828b8f847a6f645c4e4a3d352c20190e0500000000000000000000000000000000001c32475c7187816c5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f7086826d58422d18000b20354b60737f7d73604b362513000000000000000000000000000000000000081c30435463787e7b65503a2510000c22374c61777f7e76615443301f0f00000000000000000000000417293a4b5d657b7f7b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d53697e938774604b3e2d1f120700000000000007121d2a384554607585889a85705b45301b000000000000000000000000000000000000000000000000090f11140e0c0600000000000000020b111318141c20304354657b90826d573d2c1a06000000000000031628394a6072868b78624d3d2d1a00000000000000000005131e2528282828282828282828282828282828282828282828282828282828282826231c12040000172c42576c8197a3a49a846f5443301c08000b2035495a6d82947f6a6055504e505358616a747d868f8b837b746c676565686f7b88927e685a48352008000013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c2712000b2034485a697f8b8f8a7d675746331e0a0011263b51667c8b90857a6f645c4f4a3e362d211a0f06000000000000000000000000000000000000001c32475c718781747474747474747474747474747474747474747474747474747474747474747474747485826d58422d1800081d31445560696860554431180800000000000000000000000000000000000001142636495a6369655d4b37230e000a1f344759616969615846362513010000000000000000000000000c1c2e3f4b5d6569655d4c38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b7286937d685544312010010000000000000000000c1a273645566278899a85705b45301b000000000000000000000000000000000000000000000000060c0e100c0a0300000000000006131e26282d263035434a6072858c79634e39230f00000000000000091e324657677c91816c5a49351f0f0000000000000000011323303a3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3b382f221200000c22374c6176858e8f8678634d362614010006192b3c4c617687947f746a656365686f777f88928a81786e666055525050535d6578898a78624d362614010013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c27120005192b3c4f6169777a77675f4d3929170300172c42576c81857b70655d4f4b3e362d211a0f060000000000000000000000000000000000000000001c32475c71868b8a8989898989898989898989898989898989898989898989898989898989898989898a8a826d58422d180001152737444b54534b44372715000000000000000000000000000000000000000008182c3c494d54504b3f2e1c080004182a3a474c54534c463a291808000000000000000000000000000011212e3f4b5054504c3f2f1c09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798e8976614b3727150200000000000000000000000a182838485a687e9385705b45301b00000000000000000000000000000000000000000000000e19202325211e160b00000000021324313a3d4236434b5061697f94826d5b4936210c000000000000061a2c3d4b6175878977624c3c2b190100000000000000000a1e30414d525252525252525252525252525252525252525252525252525252525252504c402f1c09000a1f3347586173797974635a493518080000000e1f33475863788795877f7a797a7e848a91887f776c635a504b44373a3b3f4b5a677d92816c5443301c080013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c271200000d1d32434f59626561594d41301b0b00000d22384d627870655d504b3f372e221b1007000000000000000000000000000000000000000000000013283d52687d7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b66503b2611000009192731353f3d35312719090000000000000000000000000000000000000000000e1e2c35383f3a372e21110000000c1c2a34373f3e3633291c0c0000000000000000000000000000000311212e373b3f3b382f21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94836e5746321909000000000000000000000000000a1a2b3c51667b9085705b45301b00000000000000000000000000000000000000000008161e2c35383b3632291b0f0100000b1e31424e535858546065707f8d8675604b3d2c1a060000000000000c2135495b6b80937e695948341e0e00000000000000000010253a4d5f676868686868686868686868686868686868686868686868686868686868665e4c38230f0004182a3a47556064646056493c2c190000000004172a3a495a6376818990908e90908a837c756a61584d493c35312625262e3c4b6074878974604b35200b0013293e53687e917c67523c293e53687e917c67523c27120013293e53687e917c67523c27120000001424323b484d504c473a3023130000000b2034485a625a504c3f372e221b10070000000000000000000000000000000000000000000000000011253a4e5f6869696969696969696969696969696969696969696969696969696969696969696969696969665e4c38230f00000009151d202928201d150900000000000000000000000000000000000000000000000e1920232925231c1103000000000c181f222a29211f170c000000000000000000000000000000000003111c23252a26231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a5a6f84937e695339281600000000000000000000000000000011263b51667b9085705b45301b0000000000000000000000000000000000000000021626333c494d504b46392d1f0f000011263a4e60686d6d6f747a84948476615645321f0f000000000000000e23394e63798b8673604b3b2a180000000000000000000012283d52677d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7b66503b261100000c1c2a37444b4e4f4b45382c1e0e00000000000c1c2c3c4958616b757b7e7f7e7b766e6760564c473a352c201d1410111d3144556c818e79644e39240f0012273c52677d877c66503b273c52677d877b66503b26110012273c52677d877b66503b261100000006141d2b34373a37342a1c130500000005192b3c484d483c382f231c11080000000000000000000000000000000000000000000000000000000b1e31414e5254545454545454545454545454545454545454545454545454545454545454545454545454504c402f1c090000000001080b14130b080100000000000000000000000000000000000000000000000000060c0e14100e0800000000000000040a0c14140c0a040000000000000000000000000000000000000000080e1014100e090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475873888e79644f39240f00000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000010203344505a636561574a3d2d1a070013283d53687e828384888f897f7461584738281601000000000000001a2f44596f848c7a645544311d0d000000000000000000001f354a5f748b8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e84705b45301b0000000c19263135393a3631271a0e000000000000000e1e2c3a464c566066696a69666157514b4538332a20190e0801000114263752677d917c67513c2712001025394d5f6771665e4c3825394d5f6771665e4c38230f001025394d5f6771665e4c38230f00000000000d18202225221f180c0000000000000d1d2b3438342b231c11080000000000000000000000000000000000000000000000000000000000011323313a3d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3b382f22110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778c8a76604b36210b00000000000000000000000000000011263b51667b9085705b45301b00000000000000000000000000000000000000071b2d3e50626b787a75645c4a36210d00182e43586d82868684817c75696056473a2a1a0a0000000000000000152a3f546a7f816c5c4b37261400000000000000000000000e24394e6379797979797979797979797979797979797979797979797979797979797978634d38230e0000000009141d202424201d150a0000000000000000000e1b293338454b50535554504c46393632281f180c0600000000000f24394e647a837b65503b2510000a1d30414d525c504c402f1d30414d525c504c402f1c09000a1d30414d525c504c402f1c09000000000000050b0d100c0a0400000000000000000d19202220190d08000000000000000000000000000000000000000000000000000000000000000005131e25282a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a26231c110400000000000000000000000000000000000000000000000000000000000000020b11131f100e08000000000000000912191b1b1812080000000000000000000000000000000000000000000000090f11201d1a140a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a8f88735645321e0900000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000d22364a5c6b808c90887a644e39240f00162b3f53646d71716f6c6661574b45382a1c0c00000000000000000012273c4f616a6c63513e2e190900000000000000000000000c21364a5b636464646464646464646464646464646464646464646464646464646464635a4935200c000000000001080b0f0f0b090200000000000000000000000b171f2832363b3e403e3b363329201d150a04000000000000000d21364a5c646e655d4b38230e0001122330393c473b382f22122330393c473b382f2211000001122330393c473b382f22110000000000000000000000000000000000000000000000050b0d0b050000000000000000000000000000000000000000000000000000000000000000000000010b111314141414141414141414141414141414141414141414141414141414141414141414141414110f09000000000000000000000000000000000000000000000000000000000000000006131e26283425231c1103000000000c1a262e30302d251a0c000000000000000000000000000000000000000004121d242635322f271c0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667c9186705b3828160200000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000f24394e64798e9fa69b85705b46301b001023354653585c5b5957514b463931271a0c000000000000000000000c2032434f54575145342010000000000000000000000000071a2d3d4a4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4d493c2c190600000000000000000000000000000000000000000000000000040a161e2126292a2926211e170b0902000000000000000000071a2d3e4a4e59504b3f2f1c08000005121d25273226231c1105121d25273226231c110400000005121d25273226231c1104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021324313a3d493a372e2111000000091a2a3842464541372a1a000000000000000000000000000000000000000012222f383b4a47433a2c1c0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92846f59442f1a0000000000000000000000000000000011263b51667b9085705b45301b0000000000000000000000000000000000000012273c52677c91a8b39e89745e49341f00061828353f43464644423c3632281d150a0000000000000000000000031525323c3f413e34261602000000000000000000000000000f1f2d3639393939393939393939393939393939393939393939393939393939393938352c1e0e0000000000000000000000000000000000000000000000000000000002090b11141514110c0a03000000000000000000000000000f202d3639433b382f211100000000010a10121c110f090000010a10121c110f09000000000000010a10121c110f09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c1315201a181108000000000000000000000000000000000000000000000000000000090f11201d1a140a00000000000000000000000000000000000000000000000000000002090b181f1b0c0a030000000000000000000b1e31424e535e504b3f2e1c08000012263848555b5a5548371909000000000000000000000000000000000000091d2f404c51605c574a3a271400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93836e58432e190300000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000d22374d62788a9c9f98826d58432d1800000a18232b2e31312f2c27211e160b0200000000000000000000000000071520272a2c292216080000000000000000000000000000010f1a212424242424242424242424242424242424242424242424242424242424242320190e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21242e25231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520272a352f2c25190b00000000000000000000000000000000000000000000000004121d242635322f271c0e000000000000000000000000000000000000000000000000000a151d202d3530211e170b000000000000000011263a4e606874655d4b37230e0004192e425566707066553726140100000000000000000000000000000000000f24384c5e6675726857432f1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94826d58432d180300000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000b20344859657c87898276614c36210c000000061016181c1c1a17110c090300000000000000000000000000000000030c121517150e050000000000000000000000000000000000070c0e0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0e0c060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f19100e08000000000000000000000000000000000000000000000000000000000000000000040d1315201d0d0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525323c3f4a444137291908000000000000000000000000000000000000000000000012222f383b4a47433a2c1c0a00000000000000000000000000000000000000000000000a1a283236434a463633291b0b0000000000000013283d53687d897b65503a251000061b30465b708484705544311d08000000000000000000000000000000000011263b51667c8a86725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f94836d58432e180300000000000000000000000000000011263b51667b9085705b45301b0000000000000000000000000000000000000005192b3b4c5e6572756d615846331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520282a35322220180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2032434f54605a544737251100000000000000000000000000000000000000000000091d2f404c51605c574a3a2714000000000000000000000000000000000000000000000a1a2838454b585f5b4c46392917030000000000000e24394e63798e816c5739281603061b30465b70858975604b35200b000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e93846f59442f1a0000000000000000000000000000000011263b51667b9085705b45301b00000000000000000000000000000000000000000d1d2f404c505460544c463a291704000000000000000000000000000000000000000000000000000000000b01000000000000040a0c1012141413120f0b0902000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000070c0e14161716140f0b070000000000000000000000000000000309202020202020202020202020202020202020202020202020202020202020202020202019161006000000000000000000000000041525333c404a4737342b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000013273c4f616a756f6554412c18030000000000000000000000000000000000000000000f24384c5e6675726857432f1a0600000000000000000000000000000000000000000b1b28384556606d7470615746331e0a0000000000000b20354b60748986715745321e0901172c41566c818e79644e39240f000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d9285705b3726140100000000000000000000000000000011263b51667b9085705b45301b00000000000000000000000000000000000000000011212f3836434a433633291b0b0000000000000000000000000000000000000000000000000000060c0e2016140e04030a0c171f212528292a292724211e160b0903000000000000000000000000000000000000000000030c13151f14120c0300000000000000000000000000000000000000000001080f1a2124292b2d2b2924201c13080200000000000000000000000a161e35353535353535353535353535353535353535353535353535353535353535353535352e2b23180a00000000000000000000000d2033435055605c4d483b2b1805000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f8a836f5a442f1a0500000000000000000000000000000000000000000011263b51667c8a86725c47321d07000000000000000000000000000000000000000b1b293945566074828b8576614c36210c000000000000081c3043546f858a76604b36210b0012273c52677c917e68533e2913000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b9087715544311d0800000000000000000000000000000011263b51667b9085705b45301b00000000000000000000000000000000000000000003111c2325303530251f170b00000000000000000000000000000000000000000000000000000e192023352b282116171e212933363a3d3e3f3e3c39363228211e160a01000000000000000000000000000000000000071520272a3529271f14060000000000000000000000000000000000000009141d202d36393e4042413e393530251d150a0000000000000000000a1b28324a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4340362818060000000000000000000013283c50616a7572625948342013000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000c1b29394657607483988475615746331e0a00000000000001142636556b808f7a65503a2510000d23384d62788d826d583a2917040000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384e63798d8975604b35200b00000000000000000000000000000011263b51667b9085705b45301b00000000000000000000000000000000000000000000000908131c201c13080400000000000000000000000000000000000000000000000000000e1e2c35384a403d331d2933363a464c4f52535453524e4b45383632281d140900000000000000000000000000000000031525323c3f4a3f3b3225140200000000000000000000000000000000000d192631353d4a4e53565756544f4a433631271a0f0100000000000003162839455e6060606060606060606060606060606060606060606060606060606060606060606058534636231000000000000000000000152a40556a7f8a8677624d42311e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000c1c293a4657617584998475615746392917030000000000000011263c51667b917f69543f2a14000b2035485a738887725847331f0a0000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60738a8e79634e39230e00000000000000000000000000000011263b51667b9085705b45301b0000000000000000000000000000000000000000000000000000070b070000000000000000000000000000000000000000000000000000000006192c3c495e605650443139464c545861656769696867646056524b45383126190e0000000000000000000000000000000c2032434f545f544f43322010000000000000000000000000000000010f1d2b37444b535b63696b6c6b696460544b45382c1f10020000000000091e32455770757575757575757575757575757575757575757575757575757575757575757575756e6453402b16000000000000000000000b20354b60738599846f604e3c2b180800000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000c1c2a3a475861758499847561574639291b0b00000000000000000c22374c61778c836e593c2b190506192b3c596e848a76614c37210c0000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144557085927d685238281502000000000000000000000000000011263b51667b9085705b45301b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a70756b6250444b57616970767a7d7e7f7e7c79756f6860564b44372b1e10020000000000000000000000000013273c4f616a7469614f3e2e1b0b00000000000000000000000000000f1f2c3c4855606872797e8082807e7973696056493d2d201000000000000b21364b60768a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a826e58432e1900000000000000000000081d31445563798a927e685a4836251300000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000d1d2a3a475861768499837460574639291b0b0000000000000000000a1f344759728788735a4835200b00152a3f546a7f907b66503b26110000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637566b8095826c5645321d09000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000000000000000000040a0c101214141413100d0b0500000000000000000000000000000000000e23384d63788a806b56556069767e858a8f8e8d8d8e918e89847d75696055493c2d201001000000000000000000000000152a3f546a7f8b7f695c4b392917030000000000000000000000000a1a2c3d495a62737d878e8a888687898e887e74635b4a3e2d1c0c00000000091e3245576f849a8b828587878888888888888888888888888888888888888888888888888888887f69543f2a140000000000000000000001152737495b697e938a78625443301c0e000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000d1d2b3b475861768599837460564539281b0b0000000000000000000004182a3a586d838d77624d38220d0010253a50657a8f806a553625130000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f8975604b362012000000000000000000000000000011263b51667b9085705b45301b000000000000000000000000000000000000000000000000070c0e171f212528292a292825221f180f0d0700000000000000000000000000000e23384d63788d836e5962737f898a86807c797878797b7f848a92887e73625a4a3e2d1f0f0000000000000000000000000b20354b6073848c7a645746331e13000000000000000000000003162838495b63788690847c76727172757a828d8779645c4a3a2a1704000000031628394c617585988273717273737373737373737373737373737373737373737373737373737369614f3b2712000000000000000000000009192c3d4e606f84998472604a3c2c18080000000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000e1d2b3b485961768599837460564538281b0b00000000000000000000000014293e53697e917c67523c2712000c21364b61768a846f5443301c0700000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a607387917c6751402f1b0a0000000000000000000000000011263b51667b9085705b45301b00000000000000000000000000000000000000000000070f1a21232a33373a3d3e3f3e3d3b37342a24221b10080000000000000000000000000e23384d63788d846f6277858b8178706a6764636364666a6f777f89938578645c4a3d2d1c0c0000000000000000000000081c3043546278898776614c41301e0e00000000000000000000091e324556637988897c6f6660575b5560656d7987897a645847331f0f000000000a1e334657617685978172605e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e544f4332200c0000000000000000000000000e1f31424d627789937e685a493626140100000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000000000000e1e2b3b485962778698827360564538281a0a000000000000000000000000000f243a4f64798f816b5638271502091e32465771868974604a35200b00000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c304354697f94846f5e4c3928160300000000000000000000000216283851667b9085705b45301b0000000000000000000000000000000000000000000f1a212d36393a474c4f5253545452504c483b3a362e221b1002000000000000000000000e23384d63788d8570788785796c625a55514f4d4e4f515458616a768294887a645b4a3a29170400000000000000000000011426364859667c91826d5f4d3c2b1909000000000000000005182a3b4b607586897a665e514b4539444b505c6477868776614c3d2d1a0700000003172939465861768597816c6351444848484848484848484848484848484848484848484848483f3b32251503000000000000000000000000001420344859677c918a78635443301c0f00000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000000000000010f1e2c3c485962778698827360554538281a0a00000000000000000000000000000b20364b60758985705645311d0903162839576c828e78634e39230e00000000000000000000000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364c617689917c665745321e150900000000000000000008141e324556677c9185705b45301b0000000000000000000000000000000000000008131c2d363d4a4e565861656769696968656259574f4a3e372e1d150a0000000000000000000e23384d63788d8676878375635b4d493c3c393838393c3a474c58616e7f948979635847331f11000000000000000000000008182b3b4d5e6d81927d675a4937271501000000000000000b1f3448596c81927d675c4c4036322831363d4a59647a8b836e5b4a362109000000000b1b293a465861768596816c62514433333333333333333333333333333333333333333333332a27201507000000000000000000000000000005182b3b4d5f6d82988473604b3d2c1909000000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000000000000010f1f2c3c495a62788798827360554437271a0a000000000000000000000002090b11121d31445570858a75604b3620121213283d52687d927d68523d28131212121212120c0a0400000000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081f334658697e938775604b43312719100a0300010002090f182630434b6074869a85705b45301b0000000000000000000000000000000000000a1825303d4a4e5b636b71777a7d7e7f7e7d7a77726c645c4f4b3f31271a0c00000000000000000e23384d63788d8683857461574a3d352c2724232324262a333a474c61697f948776614c3f2e1c0800000000000000000000000d1d30404b6075868978625544311d10000000000000000d22374c62778a846f5f4d3e2f211e161d202d3b4a5c6b808e79634e37271502000000000b1b293a475861768596806b62514433251e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e14120c03000000000000000000000000000000000d1d30414c617687937e695b49372614010000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000000010f1f2d3d495a6378879782726055443727190a00000000000000000000000a151d202627272737566b818f79644f3a2727272727394e63788e826c57392927272727272727211f170c000000000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b60738497816c614b44372e211e16171617161e212d36434b616c81899a85705b45301b00000000000000000000000000000000000a1a2836434a5b636f7980878c8f908f8e8f90908c87817a70645d4b45382a1c0c000000000000000e23384d63788d8b8877615646392d2019120f0e0e0f11181f2a33434f616e8298826d5d4b372310000000000000000000000000121e324557647a8b8573604b3f2e1b0b000000000004182a3b556a80907b6650413020120903080f1d2d3e4d62788a826d5544311d0800000000000c1c293a475861768695806b625043332515070909090909090909090909090909090909000000000000000000000000000000000000000000121f334658657b8d8a79635544311d0f0000000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000002101f2d3d4a5b6378879781726054443727190900000000000000000000000a1a2731363b3c3c3c3c52677c917e69543e3c3c3c3c3c3c4a607489867157463c3c3c3c3c3c3c3c3633291c0c0000000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1c304354627888947f6c60554b3e3632292c2b2c2832363d4a54606b7f8a7d9285705b45301b00000000000000000000000000000000091928384554606a79848e9088827e7b7979797b7e82878f8f857a6c6056473a2a1b0b0000000000000e23384d63788d907b66594738291b0f06000000000000040c171f32434c6277898f7b65503e2d1b070000000000000000000000031628394a5c697f94806a5d4b3a291704000000000b1f34475972878773604a35201302000000000f203448596e848975604b36200b0000000000000c1c2a3a475861778695806a61504332251406000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b5d6c81968573604b3d2d190900000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000000000210202d3d4a5b63798897817260544336261909000000000000000000000002152738454b51515151515162778d836d585151515151515151546f848a76615151515151515151514c463a29170400000011263b51667b9087725c47321d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636485a647a89948174645c514b463941404138454b515b6373808c7c788d85705b45301b00000000000000000000000000000001152737455660727f8b90847b736d696664636465686c727a838d8c81746158473929170300000000000e23384d63788d89745e4c3a2a1a0b00000000000000000000041520344859697f9485705c4a3622080000000000000000000000000a1b2d3e4a6072848c7b655846331f13000000000c22374c61778c826d5443301c07000000000005192b3b54697e8f7a644f3a250f000000000000000c1c2a3a4759617786957f6a614f4332241406000000000000000000000000000000000000000000000000000000000000000000000000000c1c2f3f4b607486947f695b4a37271501000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000000000310202e3e4a5b63798896817260544336261809000000000000000000000000091d314556606667676767676773888772676767676767676767676a80907b67676767676767676767615846331f0a00000011263b51667b9087725c47321d0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182b3c4a5c64798796857a6f66615758575656585660666e79858b7d67778c85705b45301b000000000000000000000000000000091d31445560748395887c6f65605453504f4e4f5053575c646e7a86968476615746331e1300000000000e23384d63788d89745e402f1c0c00000000000000000000000005182b3b4b6075898f7a644f36261401000000000000000000000000101c3043546277888776614c41311e0e00000011273c51667c917e6853362513000000000000000f253a4f647a8f7f69543f2a1400000000000000000c1c2a3a4759627786947f6a614f423224140600000000000000000000000000000000000000000000000000000000000000000000000000111e324556647a8b8b79635544311d0f000000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d07000000000311212e3e4b5c64798896816c60544336261808000000000000000000000000000b20364b60747b7c7c7c7c7c7c7c85927d7c7c7c7c7c7c7c7c7c7c7c8096817c7c7c7c7c7c7c7c7c7c76614c36210c00000011263b51667b9087725c47321d0c0c0c0c0c0c0b0b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2d3e4a5b6376828f8c847c76716e6c6b6c6d70757b838b867a6760768b85705b45301b000000000000000000000000000009192f3f4b607383998577665e504a43363b3a393a3b3e3e4b4f5c647583998575614b42311c0c000000000e23384d63788d89745e49341f00000000000000000000000000000d1d3145566c8197816c5443301c08000000000000000000000000001325364859667c91826e5f4e3c2c1909000014293e54697e907a65503b2510000000000000000c21374c61768c816c57422c170000000000000000000c1c2a3b4759627786947f69604f4231241305000000000000000000000000000000000000000000000000000000000000000000000000021628384a5c6a7f948573604b3d2d19090000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d070000000311212e3f4b5c647a8995806c624a4336251808000000000000000000000000000011263b50667b8e8e8e8e8e8e8e8e949b928e8e8e8e8e8e8e8e8e8e8e8e9e978e8e8e8e8e8e8e8e8e8d79634e39240e00000011263b51667b9087725c47322121212121212121201c1318140e0c0700000000000000000000000000000000000000000000000000000000000000000000000010202d3d4958616d7a848a918a868381808182868990887f74645c57748b85705b45301b00000000000000000000000000011527374b5d6b8096857562594c403530252624242426292e373e4b5761738398836e604e3a2917040000000e23384d63788d89745e49341f0900000000000000000000000000021527384f657a8f8874604b35200b0000000000000000000000000008182b3b4c5e6c81927d685a493727150100152b40556a808e79644e39240f000000000000000b20354b60758a836e58432e19000000000000000000000c1d2a3b4859627786937e69604e42312313050000000000000000000000000000000000000000000000000000000000000000000000000a1a2d3e4b607385947f6a5c4a3727150200000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d0700000412212f3f4b5d657a8995806b625144302518080000000000000000000000000000000c21364b617579797979797979797f948079797979797979797979797a89877a797979797979797978705b4a36210c00000011263b51667b9087725c473636363636363636363530252e2924211a0f0a0400000000000000000000000000000000000000000000000000000000000000000002101f2c3a464c5c646f787e83878a8b8b8a8986817b746960564a51667c7d67523c271200000000000000000000000000081d314455657b908a786257473b2f201c13110f0e0f10131b222e394655617688927d685847331f090000000e23384d63788d89745e49341f0900000000000000000000000000000b20354a6074888e79644e39240f00000000000000000000000000000d1d2f404b6075868a78635544311d1100172c41576c818d78624d38230d00000000000000081c3043547489846f5a452f1a00000000000000000000000d1d2a3b4859627787937e68604e4131231305000000000000000000000000000000000000000000000000000000000000000000000000101d31445563788a8b79645544311d1000000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d07000412222f3f4c5d657b8a95806b625144341c1308000000000000000000000000000000000a1e324657616464646464646464788d836d646464646464646464646f848a766464646464646464625a4a3d2d1a0700000011263b51667b9087725c4c4c4c4c4c4c4c4c4c4b4a4336433e39362d211f170b040000000000000000000000000000000000000000000000000000000000000000010f1b29333e4b4f5a62696e727576767574706c6660554b45384c5e66675f4d392510000000000000000000000000000b20354b607486947e695a48392a1d12070000000000000007101b29374657667c918876614c3727150200000e23384d63788d89745e49341f090000000000000000000000000000071c3043546f84937e69533e2914000000000000000000000000000000121e324556647a8b8573604b3f2e1c0c172c41576c818d77624d38220d00000000000000071c3043547489846f5a452f1a0000000000000000000000000d1d2b3b48596278878d7e685f4e4130231204000000000000000000000000000000000000000000000000000000000000000000000001142637495a687e938674604b3e2d1a0a000000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d0705122230404c5d657b8a947f6a62514434261600000000000000000000000000000000000003162939464b4e4e4e4e4e4e4e5a73888772584e4e4e4e4e4e4e4e556b808f7a65504e4e4e4e4e4e4d493c2d1f0f0000000011263b51667b908772616161616161616161616060545c58544e4a3d3633291f170c0000000000000000000000000000000000000000000000000000000000000000000b171f2e373c484d53595d56606160555b57514b4437312f404c51524d41301e0a000000000000000000000000071a2d3d52677d928573604b3c2b1b0d00000000000000000000000b1929394d5e6e83957f6a5544311d0800000e23384d63788d89745e49341f09000000000000000000000000000000132536566b8095826d57422d18000000000000000000000000000000031628384a5c697e93806b5d4b3a2917162b40556b808e79644e39240f000000000000000b20354a60758a836e59432e19000000000000000000000000000d1d2b3b485a6278878d7e685f4d4130221204000000000000000000000000000000000000000000000000000000000000000000000009192c3c4e606f8395806a5c4a382815020000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0500000000000000000000000000000000000000000011263b51667b9087725c47321d05132330404c5e667c8b947f6a61504433261608000000000000000000000000000000000000000b1b2932363939393939393c596e848c77614c3939393939393b51667b907f6a543f393939393938352c1e0f010000000011263b51667b90877676767676767676767676767573716d69635b544c463a33291c1100000000000000000000000000000000000000000000000000000000000000000004101b222b35383e4438454b4c4b4437423b3631271d222f383c3c39302313010000000000000000000000000c21364a5b7186927d675544311e0e000000000000000000000000000b1b304050657a8f8874604b36200b00000e23384d63788d89745e49341f0900000000000000000000000000000012273c52677c9185705b362513000000000000000000000000000000000a1a2d3d4a6072848c7b655847331f14293f54697e8f7a65503a2510000000000000000c21364c61768b826c57422d1700000000000000000000000000000d1d2b3c485a6278878d7d675f4d40302212040000000000000000000000000000000000000000000000000000000000000003090b0e0f1e31424c6277888c7a645645321d100000000000000000000000000000000000000000000000000000000000152a3f546a7f94846f5a442f1a0000000000000000000000000000000000000000000011263b51667b9087725c47321d132330414d5e667c8b937f6a615043332516080000000000000000000000000000000000000000000b161e2124242424242a3f556a7f907b66503b2624242424374c61778c836e593c2b242424242320190e00000000000011263b51667b909c8b8b8b8b8b8b8b8b8b8b8b8b8a8886837e79726961584c473a2f1c1308000000000000000000000000000000000000000000000000000000000000000000080e192023292e283236363531272c26201d1509121d242627251e1305000000000000000000000000000e24394e63798e8975604b3726140000000000000000000000000000001223374b5d7287917b66513c261100000e23384d63788d89745e49341f090000000000000000000000000000000f243a4f64798f88735443301c07000000000000000000000000000000000f1c3043546277888776614c42311f273c52677c917d68523d2813000000000000000f24394e64798e7f6a55402a150000000000000000000000000000000d1d2b3c485a6278878c7d675e4d402f221203000000000000000000000000000000000000000000000000000002080b11161e2123252524344759667c918674604b3e2e1a0a00000000000000000000000000000000000000000000000000000000132536546a7f94846f5a3a2a180400000000000000000000000000000000000000000011263b51667b9087725c47321d2331414d5f677c8b937f69614f43332515070000000000000000000000000000000000000000000000030a0c0f0f0f0f10253b50657b90806a553625130f0f1f334758728788735a4835200f0f0f0d0c060000000000000011263b51667b908a8384848484848484848484848587898e938e877f766c61584c403025180800000000000000000000000000000000000000000000000000000000000000000000060b0d1419161e2121201d1517110b08020000090f1112100a010000000000000000000000000001142637556a7f95826d5745321909000000000000000000000000000000081c2e3f556a7f94826d583b2b1805000e23384d63788d89745e49341f090000000000000000000000000000000e23384e63788d8a75604a35200b00000000000000000000000000000000001325364759667c90836e604e3d2c23384d62788d826c573e2e1b0700000000000417293a53697e907a65503b2510000000000000000000000000000000000e1e2b3c495a6378878c7d665e4c402f21110300000000000000000000000000000000000000000000000109151d2026283236383a3a39373b4d5e6d8295806b5c4b382816030000000000000000000000000000000000000000000000000000071c3043546a7f94846f5947341f1200000000000000000000000000000000000000000011263b51667b9087725c47322131414e5f677d8c8d7e69614f4332251507000000000000000000000000000000000000000000000000000000000000000c21364c61768a846f5443301c0704172a3a586d828d78624d38220d00000000000000000000000011263b51667b9087726e6e6e6e6e6e6e6e6e6e6f707275797e848b94898176655e4a4336251808000000000000000000000000000000000000000000000000000000000000000000000000000003090b0c0b0801000000000000000000000000000000000000000000000000000000081d3144557085917c6752392816000000000000000000000000000000000011253a4f647a8f8873594834200b000e23384d63788d89745e49341f090000000000000000000000000000000d22374c62778c8b76614b36210c000000000000000000000000000000000008182a3b4c5e6c81927d685b49372735485a738887725c4b37221100000000000a1f3347586e838a76604b36210b00000000000000000000000000000000000e1e2b3c495a6378888c7c665e4c3f2f21110200000000000000000000000000000000000000000009141d2731363c38454b4e4f4f4e4d48404c6176878c7a645645321e110000000000000000000000000000000000000000000000000005182b3b4a6073859a8877614c402f1b0b000000000000000000000000000000000000000011263b51667b9087725c472c35424e5f687d8c8d7e69604f423225150700000000000000000000000000000000000000000000000000000000000000000a1e33465771878974604a35200b0014293e53697e917c67523c271200000000000000000000000011263b51667b9087725c595959595959595959595a546063686f78818a96887b6b6054433625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60748a8d78634d38230e00000000000000000000000000000000000b21364b60768a8c77624d37220d000e23384d63788d89745e49341f090000000000000000000000000000000b21364b60768b8c77614c37220c0000000000000000000000000000000000000d1d2f404b6074868a79635544312b3c576c818f7a644f3f2e1d0e0500040c1a2b3b4c617689846f5745321e090000000000000000000000000000000000000e1e2c3c495a6379888b7c665d4c3f2e201002000000000000000000000000000000000000010f19263137444b515856606364656462595a5457657b8c8675604b3f2e1a0a0000000000000000000000000000000000000000000000000c20344859687e938898826d5e4c392916030000000000000000000000000000000000000011263b51667b9087725c483c494d60687e8d8d7e68604e423224140700000000000000000000000000000000000000000000000000000000000000000003172939576d828d78634e38230e000f24394f64798e816b5637271502000000000000000000000011263b51667b9087725c4744444444444444444436434b4e535a626c778393908072605443301c1100000000000000070c0e1a15120c030000000000000000000000000000000000000000090f111a12100a01000000000000000000000000000000000000000000000000000000000e23384e63798d8974604a35200b0000000000000000000000000000000000091e3245567186907b66503b2611000e23384d63788d89745e49341f090000000000000000000000000000000b20354b60758a8c77624c37220d00000000000000000000000000000000000000121e32455663798b8574604b3f2f384e63798b826d5d4b3b2c201917181f29384859697f907b655039281603000000000000000000000000000000000000000e1e2c3c495b6379888b7b655d4b3e2e2010010000000000000000000000000000000004121f2d37444b5560666d7276787a7a7977746f69625d6b8096816b5d4b38281602000000000000000000000000000000000000000000000c1c30404d6277898c7987907c665746321e100000000000000000000000000000000000000011263b51667b9087725d5d5d5b636c7e8d8d7d68604e4231241406000000000000000000000000000000000000000000000000000000000000000000000013283e53687d927d67523d2812000b20354b60758985705544311d08000000000000000000000011263b51667b9087725c47322f2f2f2f2f2f2f2f263035393c494d59616f7e8b968272604a3f2e190900000000010f1a21242f2a27201507000000000000000000000000000000000003111c23262f27251d130500000000000000000000000000000000000000000000000000000011263b51667b9085705443301c07000000000000000000000000000000000003162838586e83937e69533e2914000e23384d63788d89745e49341f090000000000000000000000000000000b21364b60768b8b76604b36210b00000000000000000000000000000000000000021628384a5b697e93806b5d4b3a35495b6e838c7b6559493c352b2d2a333a475662788985715d4c381b0a0000000000000000000000000000000000000000000e1e2c3d495b6379898a7b655c4b3e2d1f0f000000000000000000000000000000051323303d4a556068747c82878b8d8f8f8e8c89857e786e6474868c7b655645321e0f0000000000000000000000000000000000000000000417293a4d5f6e8397816c7d928775614b3e2e190900000000000000000000000000000000000011263b51667b908673737373747881938c7d685f4e42312414060000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e816c5738281602081d31445570858a75604b36200b000000000000000000000011263b51667b9087725c47321d1919191919191a141c20232b353b474c60687d8d95806a5d4b372614010000000f1f2d3639443f3c322515030000000000000000000000000000000011222f383b443c3930231301000000000000000000000000000000000000000000000000000013283e53687d93846f5936251300000000000000000000000000000000000000172c42576c8195806b56402b16000e23384d63788d89745e49341f090000000000000000000000000000000c21374c61768c8a745645321e0900000000000000000000000000000001080b08010a1a2d3d4f606f838d7b655847333d4c6277888777635a4d483c423a474c586174848a79634e3f2f1c00000000000000000000000000000000000000000000000e1f2c3d4a5b647a8a8a7b645c4a3d2c1c0c0000000000000000000000000001132330414d5b63737d87918f8984817f7e7e7f82868a8a847a6d7a8b8774604b3d2c1a0600000000000000000000000000000000000000000a1f334658677c918877616f8496816c5c4b37271502000000000000000000000000000000000011263b51667b908c88888888898d97867c675f4e413124140600000000000000000000000000000000000000000000000000000000000000040a0c1212121220354b60758986715645321e1212152737566b818f79644f3a2412121212110b09020000000011263b51667b9087725c47321d0704040404040001080b0e19202a34424e5f687e938d7b655544311d080000071a2d3d4a4e5a544f433221110000000000000000000000000000000b1b2f404c5059524d41301d0a0000000000000000000000000000000000000000000000000000142a3f54697f94836d58432e1800000000000000000000000000000000000001162b40566b8095826c57422d17000e23384d63788d89745e49341f090000000000000000000000000000000e23394e63788e88735e382816030000000000000000000003090b1218141c201c1416101f32424c6177888876614c42344859667c8b87786b625a59575958616976848d7d675b493621110000000000000000000000000000000000000000000000000f1f2d3d4a5c657b8b897a645b493a2a1a0a0000000000000000000000000f1f30414d5f677986928b827a746e6c6a68696a6d71767e878b82767f95806b5b49352111000000000000000000000000000000000000000a1a2e3f4c617688927d675863798a8c7a645544311d0f000000000000000000000000000000000011263b51667b908b86878787878b8b8177635b4a3d2d1f0f010000000000000000000000000000000000000000000000000000000000000b171f21282828282831445570858a75604b3628282828283c51677c917e69533e292828282826201d150a00000011263b51667b9087725c47321d0700000000000000000000060c181f31414e606e83998673604b35200d00000c21364a5b636f6a614f3f2f1808000000000000000000000000000417293a4c5e666f675f4d3925100000000000000000000000000000000000000000000000000000152a40556a7f95816c57422c1702000000000000000000000000000000000000152a3f546a7f94826d58432d18000e23384d63788d89745e49341f0900000000000000000000000000000010253b50657a9087725c47321d000000000000000000000a161e21272e26303530262c25221f344759667b8d836e604e3d3b4c5e667b898b8078716e6c6e70777e898a7c675f4d3d2c1a03000000000000000000000000000000000000000000000000010f1f2d3e4b5d667c8c897963594738271502000000000000000000000a1a2d3d4d5f677d8a9382786c646055565553535558586168737e88887b868b79634e3f2e1c080000000000000000000000000000000000021628384b5d6d8297846f5f4d5b6a7f948674604b3d2c18080000000000000000000000000000000011263b51667b908672717171727781948779635b4a3d2d1f1002000000000000000000000000000000000000000000000000000000000b1b2933363d3d3d3d3d3d37566b808f7a644f3d3d3d3d3d3d3d4d62778c836d583a3d3d3d3d3d3c3632281a0a000011263b51667b9087725c47321d0700000000000000000000000004142331424d62788b927d67523b2a1805000e24394e6379837f6a5d4b362513000000000000000000000000000a1f334658667c847d67523c27120000000000000000000000000000000000000000000000000000152b40556a8095816c56412c170100000000000000000000000000000000000014293f54697e94836d58432e18000e23384d63788d89745e49341f0900000000000000000000000000000013293e53687e93836e59432e19040000000000000001131a2832363d4336434b4336413a372e2a3a4c5e6b81937e685b4938404c5d6577818a8d86838283868b8a8378665e4d41311f0f00000000000000000000000000000000000000000000000000000110202e3f4c5e687e938777615645311d12000000000000000000021528384a5c677d8d8c7e6e625a4f4b44373f3e3e3f3a474c55606876848a7f8b846f5d4b3723100000000000000000000000000000000000091e324556657b8d8a78624d414b607386957f6a5b493625130000000000000000000000000000000011263b51667b9087725c5c5c58616c7f948879635b4a3d2d20100200000000000000000000000000000000000000000000000000000417293a464c5252525252525252667c917e69545252525252525252597388877258525252525252514b45382815020011263b51667b9087725c47321d070000000000000000000000000004142035495a6c819685705948341f0b000c21364a5b7085907b655443301c09000000000000000000000005182b3b4c6176898976614c37210c0000000000000000000000000000000000000000000000000000152a3f556a7f94826d58422d1803000000000000000000000000000000000000152b40556a8095826d57422d18000e23384d63788d89745e49341f00000000000000000000000000000005192b3c576c82947f6a543f2a150000000000000009151d3138454b52585d5460545c564f4b3f362f404b6074868a79635645313f4b59616c777d82848685837e776e625a4d403123130100000000000000000000000000000000000000000000000000000002112130404e606c81978574604b402f1b0b0000000000000000091d324556647a8a8d7d69604d483c3531262a29292a2a3337444b586173818a858f7b65503e2e1b0700000000000000000000000000000009192d3d4b607487947e695a48354455647a8c8b79635443301c0d00000000000000000000000000000011263b51667b9087725c473a474c616a7f938879645c4a3e2d201002000000000000000000000000000000000000000000000000000a1f33465861676767676767676767778c836e676767676767676767676e838c776767676767676766605645321d090011263b51667b9087725c47321d07000000000000000000000000000006192c3c4e64798e8c77624c37220d00071a2d3d4f657a8f8572604a37271502000000000000000000000b203448596b80947f695847331f0a000000000000000000000000000000000000000000000000000014293e54697e93836e59442e1900000000000000000000000000000000000001172c41566c8196816c56412c17000e23384d63788d89745e3f2e1c0c00000000000000000000000000000b2035485a7186907b65503b251000000000000009192731414e5660676d72747573716b655d4e4a3d31455663798a8574604b402f3b474c5861676d6f716f6d6862594d493c30221305000000000000000000000000000000000000000000000000000000000003122231424b60738496816c5e4c39291703000000000000031628384b60748795806a5f4f42352b201d1415131415171f26313a4655606d828a9a85705c4a36220a0000000000000000000000000000011426374a5c6b80958573604b3c2b374a5c6c81968472604a3b2b1805000000000000000000000000000011263b51667b9087725c472a33434f61697f93897a645c4a3e2e2010020000000000000000000000000000000000000000000000000c21364c61767d7d7d7d7d7d7d7d7d7d8a887d7d7d7d7d7d7d7d7d7d7d7d8295807d7d7d7d7d7d7d7c74604b36200b0011263b51667b9087725c47321d070000000000000000000000000000000e21364a5c7388927c67523d271200000f22374b5d6e83917c675544311d0b000000000000000000061a2c3d4d62778a8775604b3a2a1704000000000000000000000000000000000000000000000000000012273c52677c91856f5a39291703000000000000000000000000000000000003182d42586d82947f6a543f2a15000e23384d63788d89745d4b3a2a1a0a000000000000000000000000011527374d62788d8a76614c36210c000000000001152737444b5f68757c8387898a8986817a6f635b4c4038495b687e93806b5e4c3a2a343a474c52585a5b5a58534d483b352b1e12040000000000000000000000000000000000000000000000000000000000000004141d314455627889917c665746331e0e000000000000091e324556697e938572604a403220190e0801000000000409141d2937444b6074859b8f7a644f3828150200000000000000000000000000081d31445564798b8b79645544311e2e3e4b617587937e685948342012000000000000000000000000000011263b51667b9087725c47321f32434f61697e93897a645c4b3e2e20100300000000000000000000000000000000000000000000000c21364c61768a8e8e8e8e8e8e8e8e8e979d928e8e8e8e8e8e8e8e8e8e8e9099958e8e8e8e8e8e8e8e7d68533e28130011263b51667b9087725c47321d07000000000000000000000000000000071a2d3e596e8495806b55402b160000081b2e3f4e63798b8774604b3929160300000000000000000c2135495b6d82927d685645321c0c0000000000000000000000000000000000000000000000000000000f253a4f647a8f87725746331e0a000000000000000000000000000000000006192b3c5a6f84927d67523d2812000e23384d63788d8c7b6558473827190a00000000000000000000000a1d314455697f94846f5746331e0a00000000000c1d314455606d7d888f87827f7e8083898f8479665e4c403d4e606e838d7b665947341f2a33373d42454645433e37342b20190e00000000000000000000000000000000000000000000000000000000000000000000011527374859677c918875614b3c2c190600000000000b21364b607588907b66544330221405000000000000000000010c192632455663798c97826d5645321d0900000000000000000000000006192b3c4b60738595806b5c4a3726141e324657667c908977624d41301c0c0000000000000000000000000011263b51667b9087725c47321d2532424f60697e8d897a645c4b3e2e211103000000000000000000000000000000000000000000000a1f334658617679797979797979797981927d79797979797979797979797b9083797979797979797977614c37220c0011263b51667b9087725c47321d0700000000000000000000000000000000162c41566b8196836d58432e18000000102135495b6c82937e695746321e0c00000000000000081b2e3f4e63798b8673604b382816000000000000000000000000000000000000000000000000000000000c21364c61768b8b76614c36210c00000000000000000000000000000000000b2035485a73898e79644e39240f000e23384d63788d9d887661564537271a0e0200000000000000000b1b2b3b4b607487917c665139291703000000000c1c31424b60738292847a726c6a696b6e747d888a7c665e4c3b424c6176888877614c42311f1f21282d2f31302e292220180d0600000000000000000000000000000000000000000000000000000000000000000000000009192b3b4d5f6f8496806b5a4935200b000000000013253652677d9285715e4c3625130400000000000000000000000009152838495b6d82978975604b36200b0000000000000000000000000c2035495a697f948775604b3d2d19091628394c5e6e8298836e5f4d3a29170400000000000000000000000011263b51667b9087725c47321d142432424f60687e8d897a645c4b3f2e2111030000000000000000000000000000000000000000000417293a4758616363636363636363677c917e69636363636363636363637388877263636363636363615947341f0b0011263b51667b9087725c47321d0700000000000000000000000000000000152a40556a7f95846e59442f19000000061a2c3d4c62778a8875614b3b2a18040000000000000922374b5d6e83907b665443301a0a000000000000000000000000000000000000000000000000000000000a1f33465872878f7a65503a251000000000000000000000000000000000000d23384d62788d8a75604b36200b000e23384d63788d89848474605545382b1d150a060002000309111b29394859687e938773604b35200b0000000004172a3a4e606e82958070645c5755545555606876848c7c665948344758657b8d836f604e3d2d1a0c12181a1c1a18130d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000d1d30414e63798b8b78634d39291703000000071c3043546e84937e6954402f180800000000000000000000000000000a1a2c3d4d62788c907b66503b261100000000000000000000000c1c31414d62788a907b655645321f0f000b1b2f404c617789917c675846331f1100000000000000000000000011263b51667b9087725c47321d06142432424e60687e8d8a7b655d4b3f2f2111030000000000000000000000000000000000000000000c1c2a3a474c4e4e4e4e4e4e4e4e62788d836d584e4e4e4e4e4e4e4e596e838c77614e4e4e4e4e4e4c473b2a18040011263b51667b9087725c47321d0700000000000000000000000000000000152a40556a7f95846e59442f19000000000f203448596b8095806a5947341f0e0000000000091930404f657a8f846f5e4c36261400000000000000000000000000000000000000000000000000000000000417293a586d82947f69543d2d1a0700000000000000000000000000000004172a3a51677c91856f5645311d09000e23384d63788d89778882736056483c3127211a181717161e212e3a4657627789917c665443301c08000000000a1f334758687d92806b624f4b3e3f3e37444b586174858977624d3c3a4b5d6b80937e695b4a3828160203050605030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000122135495b6d8296816c5746331e0a0000000b20354a6072898e78634e392312000000000000000000000000000000000f2035495a7085957f6a55402a150000000000000000000004182a3a4e5f6f8497826d5d4b382816010000121f344759687d928876614c3f2e1a0a000000000000000000000011263b51667b9087725c47321d0706142431424e60687d8d8a7b655d4b3f2f2111030000000000000000000000000000000000000000000c1c2a333739393939393939485a7388877259473939393939393f546a7f907b66513b3939393937342a1d0c000011263b51667b9087725c47321d0700000000000000000000000000000001162b41566b8096836d58432e180000000005182b3b4b6176888977614c3c2c1906000000011426374c5e70858c7a644f402f180800000000000000000000000000000000000000000000000000000000000012273c52677c9186715b4a36210e0000000000000000000000000000000a1f3347586e83947f695438271502000e23384d63788d897479898274625a4b4538352c2e2c2d2832363f4b5861758599836e5e4d36261401000000001325364c6176898674604b44372e2a2927313a465663798a836e5a48353f4b6074858b79635645321e1200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4e63798e8976614c36210c0000000d22384d62788d8974604a35200b0000000000000000000000000000000006192b3c556a7f95836e59432e19000000000000000000000b1f344759687d928876614c3f2f1a0a00000004182a3b4e5f6f8497826d5d4b382816020000000000000000000011263b51667b9087725c47321d070006142431424e5f687d8c8a7b655d4c3f2f2212040000000000000000000000000000000000000000000c171f212424242424242b3c596e838c77614c3724242424253b50657a90806a553626242424221f180c00000011263b51667b9087725c47321d0700000000000000000000000000000003162939586d8396816b56412c1600000000000d1e334657697e93816c5a49352010000000081d314455667c91826d5c4a362211000000000000000000000000000000000000000000000000000000000000000b21364b6075898e79634e3c2c1906000000000000000000000000000417293a4c61778a8b78624d38220d00000e23384d63788d8974647a8985786960564e493d43424239454b515d6576849a8676614c4030180800000000071c3043546a7f907b66554431221b1514151d29384a5b6c818a78624d3831445563798a8674604b402f1d0d00000000000000000000000000000000000000000000000002090b0d0b05000000000000000000000000000000000000000f21364a5b7085927d68523d281300000010253a50657a8f87715443301c07000000000000000000000000000000000011273c51667c9185705a45301b0000000000000000000b1b2f404c617789917d67584733211100000000000c1d31414d63788a907b655645321e0f0000000000000000000011263b51667b9087725c47321d07000006132331414e5f677d8c8a7b655d4c402f221204000000000000000000000000000000000000000000040a0c0e0e0e0e0e152a3f546a7f917b66513c26110e0e21364b61768a846f5443301c0e0e0c0b040000000011263b51667b9087725c47321d070000000000000000000000000000000a1e3246577186937e69533e29140000000000031729394b6074878b78634d3e2d1b0700031628394b6073868a78624d3e2d1b0400000000000000000000000000000000000000000000000000000000000000091e3245566c8196816b5a4935201404000000000000000000000002101f334758697e93846f5a4835200b00000e23384d63788d89745c647886897e746a635b5a585757585760666f7b8799867862584733221200000000000b20354a6073888773604a372715070000010c1a2d3d4e63798e806b563a2a37495b687e92816c5e4c3b2a1808000000000000000000000000000000000000000000000a151d202220180d000000000000000000000000000000000000071a2d3d546a7f94826d583a291704000011263c51667b9185705a3625130000000000000000000000000000000000000f253a4f647a8f86715b46311c0000000000000000031629394c5e6e8298836f5f4d3a2a1703000000000000132035495a6a7f948774604b3e2d190900000000000000000011263b51667b9087725c47321d0700000005132331414d5f677d8c8b7c665e4c402f2212040000000000000000000000000000000000000000000000000000000010253a50657a8f806b56362614010a1e32465771868974604b35200b000000000000000011263b51667b9087725c47321d070000000000000000000000000000000c21364b61768a8f7a644f3a250f0000000000000b1d314455677c91836e5c4a36221100091e324557687d93816b5a483520100000000000000000000000000000000000000000000000000000000000000000031628384d62788b8a78634d42312214060000000000000000000512202f404c6176888f7b65503c2b190500000e23384d63788d89745e5a6375818c878078736f6d6c6c6e71767c848f918376625a483a29170400000000000e23394e63798e806b544330190900000000000f21364a5b718786715847332c3d4e606e83907c6659473625130000000000000000000000000000000000000000000a1a28323637342b1d140600000000000000000000000000000000000f243a4f64798f88735846331f0a000012273c51677c91846f5a452f1a0000000000000000000000000000000000000f24394f64798e85705b46301b00000000000000000a1e324657667c908a78624d41301c0c0000000000000006192c3c4b60738595806b5c4a37261401000000000000000011263b51667b9087725c47321d070000000005132330414d5f677d8c8b7c665e4c40302212040000000000000000000000000000000000000000000000000000000c21364b61768a856f5443301c0803162939576d828e79634e39230e000000000000000011263b51667b9087725c47321d0700000000000000000000000000000a1a2e3f52677c918975604b36200b000000000000021527374d5f70858c7a644f402f1808172a3a4b6075888976614c3c2b19020000000000000000000000000000000000000000000000000000000000000000000a2035495a6c8196846f604e4032211a0f0a0300020002090d1920303e4c5e6d8297836e5d4b371e0e0000000e23384d63788d89745e4957606c79848a8d898583818283868a918f867c6e6158483c2b1c0c00000000000013283e53687d907b6651362513000000000000071a2d3d576d828a76614c372131424c6176878877625443301c0f0000000000000000000000000000000000000002152838454b4d483b32241403000000000000000000000000000000000b20354b60758a8b76614c36210c000011263b51667b9085705b38271502000000000000000000000000000000000010253a50657a8f846f5a442f1a000000000000000a1a2e3e4b617587937e695a483423130000000000000000000e1d314455647a8c8b7a645544311d0e000000000000000011263b51667b9087725c47321d07000000000005132330414d5f677c8c8b7c665e4c403022120500000000000000000000000000000000000000000000000000000a1e32465771868974604b35200b0013283d53687d927d68533d2813000000000000000011263b51667b9087725c47321d07000000000000000000000000000a1828384b5d6f8498826d5645311d09000000000000000919304150657b8f846f5e4c3625131f3347586a7f947f6a5847331e0e0000000000000000000000000000000000000000000000000000000000000000000006192c3c4c617687937e685e4f42352c211e17181718161e212b34404d5c667c8d8978624d3f2e1c000000000e23384d63788d89745e39454b5c646e777e83878a8b8b8b8885807a71665e4c473a2b1d0d00000000000000172d42576c828c77614c37210c0000000000000013283d53687d907b66503b261f334758657b8c8472604a3d2d1a0a000000000000000000000000000000000000091d3245566062594f43321f0c00000000000000000000000000000000081d31445573898d78634d38230e00000f24394f647a8e87725645311d09000000000000000000000000000000000012283d52677d92816c57422c17000000000000021527384b5c6c81968573604b3c2b1905000000000000000000011527374a5c6b81968573604b3c2b19060000000000000011263b51667b9087725c47321d0700000000000005132330404d5e667c8b8b7c665e4d40302313050000000000000000000000000000000000000000000000000003162939576c828e79634e39240e000e24394e63798e826d57392917030000000000000011263b51667b9087725c47321d07000000000000000000000108101a28364556657a8f8f7a644f3827150200000000000000001223374b5d6f84907b665443301c2b3c4c6176898775604b3a2a170000000000000000000000000000000000000000000000000000000000000000000000000e1e334657647a8a8c7c69604e493d3633292d2c2d2832363c484d5f677a8a8d7c665a48352111000000000e23384d63788d89745e49323e4a4e5962696e727476767573706b645c514c40332a1c0d0000000000000000192e44596e838a745847331f0a0000000000000011263b51667b907d67523d2817293a4b5d6b80937e695c4a3828160300000000000000000000000000000000000b20364b60747769614f3b270a00000000000000000000000000000000011527375c72878f7a644f3a250f00000c21364b61768b8a75604b36200b0000000000000000000000000000000005182a3b566b80937e69543e2914000000000000081d314556647a8c8b79635443301d0d000000000000000000000009192d3e4b617587947f695a493520130000000000000011263b51667b9087725c47321d070000000000000005122230404c5e667c8b8c7c675f4d41302313050000000000000000000000000000000000000000000000000013283d53687d927d68533e2813000b20354b60748986715746331e0a0000000000000011263b51667b9087725c47321d08080808080001080b0c10141c202e38455460758699836e5c4a361a0a000000000000000000081c2e3f4e63798c8672604a382735485a6c81927d685645321c0c000000000000000000000000000000000000000000000000000000000000000000000000031729394a5c667c8b8c7e6f635b514b463942414238454b505a626d7c8a8d7e685e4c3c2b1903000000000e23384d63788d89745e49342d363b484d54595d56606160555b564f4b3e38301f170c0000000000000000001b30455a708588735e3a2a17040000000000000010253a4f657a8f7e69543e29141c2e3f4b6073858b7a645645321e120000000000000000000000000000000000142a3f54697f8c7f695439281603000000000000000000000000000000021528385c72878f7a654f3a251000000a1e33465771868f7a654f392816030000000000000000000000000000000b1f34485970858e79644f39240f000000000008182c3d4b60748695806b5b4a36261400000000000000000000000000101e324657667b908a78624d41311c0c00000000000011263b51667b9087725c47321d07000000000000000004122230404c5e667c8b8c7d675f4d41302313050000000000000000000000000000000000000000000000000e23394e63788e826d573a291704081c3043546f858a76614b36210c0000000000000011263b51667b9087725c47321d1d1d1d1d1d1d141c2022252630353e4b56607282988978624d3e2e1b00000000000000000000001121364a5b6d82927d675645313e4d62788a8673604b38281600000000000000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4c5e667b899384796e66615759575757595660656d7882918a7d68604e402f1e0e00000000000e23384d63788d89745e49341a212b34373e4338454b4c4b4437403a372e241d1204000000000000000000001c31465c718687725d47321d00000000000000000e24394e63798e7f6a55402a15111d31445563788a8675604b402f1d0d0000000000000000000000000000000010253a4f657a8f85705745321e09000000000000000000000000000000091d32455673888e79644e39240f000003172939566b8095806b5746321e0d00000000000000000000000000000417293a4c62778b8874604b35200b0000000000132536495b6a7f958674604b3d2d180800000000000000000000000000031628394c5e6d8298846f5f4e3a2a1804000000000011263b51667b9087725c47321d070000000000000000000412222f404c5e667c8b8c7d675f4d413123130600000000000000000000000000000000000000000000000b20354a60748987715846331f0a01142636566b80907b65503b25100000000000000011263b51667b9087725c473333333333333333263035373a36434b505c647582988c7c655a483520100000000000000000000000071a2d3d4d62788a8774604b394a5c6d82907b665443301a0a00000000000000000000000000000000000000000000000000000000000000000000000000000010202f404c5d6577838f8b837c76716e6d6c6d6e71757b828a918579675f4e423122120000000000000e23384d63788d89745e49341f0d182022292e283236363631272b24221b10090000000000000000000000001b30465b708588735d38281602000000000000000f243a4f64798f7f69543f2a1401152737495a687d92816c5e4c3b2b18080000000000000000000000000000000b21364b60768a8a76604b3621100000000000000000000000000000000b20364b60758a8c77614c37210c0000000e23394e63798c8875614b3b2a1a0a000000000000000000000000010f1f3346586a8095816c5443301c0800000000071c30435463798b8d7b655645321f0f0000000000000000000000000000000b1b2f404c617789927d685947341f12000000000011263b51667b9087725c47321d07000000000000000000000412222f404c5d657b8a8c7d675f4e413124140600000000000000000000000000000000000000000000071c3043546f848a76614c36210c0011263c51667c917f6a553f2a150000000000000011263b51667b9087725c48484848484848484848434b4c4f535460656e7a86988a7c665d4c3c2b19020000000000000000000000000f203448596b80937e6957464e64798c846f5e4c362614000000000000000000000000000000000000000000000000000000000000000000000000000000000212222f3f4b59626e7b848a918a8683828182838689908d857c70635b4d40312413040000000000000e23384d63788d89745e49341f00050b0d1419161e2121201d15160f0d0700000000000000000000000000001a2f44596f8489745645321e090000000000000010263b50657b907d68533d28130009192c3c4e5f6e82917c665948362513000000000000000000000000000000091e3245566f85917c66513e2d190900000000000000000000000000011426374f647a8f88735847331f0a0000000c2135495b6d82947f6a59473828190c0100000000000000000003121f2f404c6176898a77624d3626140100000005192b3b4a60728597816c5d4b3828150100000000000000000000000000000000111f334758677d928977614c402f1b0b0000000011263b51667b9087725c47321d0700000000000000000000000412222f3f4c5d657b8a8d7d68604e423124140600000000000000000000000000000000000000000000132536556b80907b65503b2610000d22374c62778c846f593c2c190600000000000011263b51667b9087725d5d5d5d5d5d5d5d5d5d5d54606165686d747b838c938679665e4c3f2f1e0e0000000000000000000000000005192b3b4c6176888876614c5d6f848c7a644f402f180800000000000000000000000000000000000000000000000000000000000000000000000000000000000412212e3b484d5d656f787e8387898b8b8b8a87847e7870665e4e493d30221306000000000000000e23384d63788d89745e49341f09000000000002090b0c0b0802000000000000000000000000000000000000182d43586d828b76604b36210b0000000000000012273d52677c917c66513c271100000e1e31414c6176878877625443301c1000000000000000000000000000000316283852677c91846f5c4a372614010000000000000000000000000b1d3144556a7f95836e583a2a1704000000061a2c3d4d62788a8977625645372a1c1408030000000000040b171e2f3d4c5e6b8096816c5948341808000000000c20344859697e938876614c3f2e1a0a000000000000000000000000000000000004182a3a4d5f6f8498826d5e4c3929160300000011263b51667b9087725c47321d070000000000000000000000000311212f3f4b5d657b8a8d7e68604e423124140600000000000000000000000000000000000000000011263b51667b907f6a55402a15000b1f344859728888735a4935200c00000000000011263b51667b90867272727272727272727272737375777a7d82889091877e73635b4c402f21110000000000000000000000000000000d1f334658697e94806b59657b90826d5c4a3622120000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111d2b343f4b505a62696e717475767674726e69635b514c40352c1f120400000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000152a3f556a7f8f7a644f3a250f00000000000004172a3a566b808e78634e39230e000000131f334658657b8c8472604a3e2d1b0a00000000000000000000000000000b20364b6074888e7a645544311d1308000000000000000000000b1b2a3b4b607487917c67523c271200000000000f2035485a6a7f9584746055473b30261e171311111113171f2933404c5b667c8d8977624d3b2b18000000000c1c30414d62788a917c675846332111000000000000000000000000000000000000000c1c31414d62788a907c665746321e1000000011263b51667b9087725c47321d07000000000000000000000000000311212f3f4b5d657b8a8d7e68604e423224140400000000000000000000000000000000000000000c22374c61778c846f59442f1a0405182a3b596e838d78634d38230e00000000000011263b51667b908b878888888888888888888888898a8c8f928e89837c74686055493d2f2212030000000000000000000000000000000417293a4b6074878a776272858a78624d3e2d1b040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d18202e373c484d53595c56606160565d59544e493d3830211a0e000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000010253a50657a8f7e69543d2c1a0600000000000a1f33475870858974604a35200b0000000417293a4b5d6a80947f695c4a3928160300000000000000000000000000091d314556697e938573604b423025180d0700000000000108111b29394759697e938774604b36200b000000000005192b3c4a60728298827361594b4336332929272626282a3339464c5e6679898d7b655948341d0d0000000417293a4d5f6e8399836e5f4d3a2917030000000000000000000000000000000000000000132035495a697f948775614b3e2e1b08000011263b51667b9087725c47321d0700000000000000000000000000000311212e3f4b5d647a898d7e69604f4232221200000000000000000000000000000000000000000a1f3347586b8084705a45301b050013283d53687e8578624d38220d00000000000010253a50657b8687878787878787878787878686858482807d79746d6660554b44372c1f120400000000000000000000000000000000000b1d314556677d92816c7d91816c5a49352010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005111c232b35383e4338454b4c4b4538443f38352c241d120600000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000b21364b60758a846f5b4935211100000000041628394c61778a836e5443301c07000000000b1b2e3f4b6073858b7a645745321e1200000000000000000000000000021527384b607385947f6a604a43362b211a1413111113141c202f3a4657617789917c675645311d090000000000000e1c3043546074849784776760544c46393e3c3b3c3d3a474c57616b7c8a947f6a5d4c3b2b18000000000a1f334758677d918977624d40301c0c00000000000000000000000000000000000000000006192c3c4b60738596816c5c4b37220d000011263b51667b9087725c47321d070000000000000000000000000000000311212e3f4b5c647a898d7e69604f402f1d090000000000000000000000000000000000000004182a3a50626b706655412d18030011253a4e606871625a4835200b0000000000000e23374b5d657171717171717171717171717171706f6d6b67636054514b44373126190f01000000000000000000000000000000000000021527384a6072868b77868976614c3c2b190200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e192022292e283236363632282f2923211a0f09000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000091e3245566d828b78634e402f1c130c0b0d171f324657697f917c6651362513000000000000101d3144556278898675604b40301d0d000000000000000000000000000a1c30435463798a8d7e696054483b362d29282627282630353f4b586175859a846f5f4d3827150200000000000000132536455660748292887c736861575653515051525658616976808d917f6a614f3f2f1d0d000000000c21374c617688937e68594834221200000000000000000000000000000000000000000000000e1d314455647a8c8b7a644f3a250f000011263b51667b9087725c47321d07000000000000000000000000000000000311202e3e4b5c647a89937e695e4c38240f00000000000000000000000000000000000000000c1c334450555a554837251200000b1e31424e535b4d483c2b1905000000000000081c2e3f4b505c5c5c5c5c5c5c5c5c5c5c5c5c5c5b5a5855524e4a43363531261d14090000000000000000000000000000000000000000000a1c304354657b9084947f6a5847331e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d1419151d2021211e1619140e0c060000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000031628384e64798e826d5e4c3e30252120222933424b6175878773604b35200b00000000000001152737495a677d92816c5e4d3b2b1808000000000000000000000000011426364a5b657b8b8d7e7262594e4a3d3f3d3b3c3d36434b515d6576849a8677614c41301a0a0000000000000000081828384556606d7e8a91877d76706b68666666686b70777f8895897c6a6150433221110000000000152a3f546a7f868272604a3b2b18040000000000000000000000000000000000000000000000011426374a5c697e86826e58432e19030010253a50657b86836e59442f190400000000000000000000000000000000000210202e3e4a5c647983867b66513b26110000000000000000000000000000000000000000001526333d404541372a1a080000011323313a3d4638352b1e0e000000000000000011212e373a4747474747474747474747474746464543403d39353025201d14090100000000000000000000000000000000000000000000001325364c5d6f849a8775604b3a2a170000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0c0b090200000000000000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000000a22364a5c6e82907c665c4a43363735373a464c616c81917c675443301c080000000000000009192b3c4d5f6d82917c6659483626140100000000000000000000000008182d3d4b5d667c8a9384786d635b585452515153555460666f7b87988777625947342312000000000000000000000a1a2838454b6068778089928a85817e7c7b7b7d80858a948a8177675f504333251503000000000012273c4f616a716d605443301d0d0000000000000000000000000000000000000000000000000009192d3e4f6069716e6453402b1602000e23374b5d65716e6554402c17020000000000000000000000000000000000000210202e3e4a5b636e71665e4c38240f000000000000000000000000000000000000000000071521282b302d251a0c0000000005131e2528312220190e00000000000000000003111c23253232323232323232323232323131302f2d2b2824201c130b08010000000000000000000000000000000000000000000000000008182f3f4e647a867d675645321c0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000000071b2d3e4c617687897a6760544e4c4b4c5058616c7f93826d5f4d3626140100000000000000000e1e30414c6176878978625443301c0e000000000000000000000000000f1f2e3f4c5e667885938b8279726d69686666686a6f747b848d9182766259483b2a180400000000000000000000000a1a2832424e58616b777e85898e91919091928f8a867f776c61594d40332515070000000000000c2032434f545c574a43362513000000000000000000000000000000000000000000000000000000102032424f545c5853463623100000081c2e3f4b505c59544736241100000000000000000000000000000000000000000210202d3d494e595c514c402f1d0900000000000000000000000000000000000000000000040d13161b181208000000000000010b11131c0d0b05000000000000000000000000080e101c1c1c1c1c1c1c1c1c1c1c1c1c1c1b1a1816120e0b070000000000000000000000000000000000000000000000000000000000001121364a5c6471675f4d38281600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000101f3347586379888a7d736964616062656b7681938375604b4130180800000000000000000000131e334657647a8c8473604b3c2b19050000000000000000000000000111212f404c5a62737e87918e88827e7d7b7c7d7f8489918f867c6d6158483b2b1d0c000000000000000000000000000a161e313a474c5861697075797c7d7e7e7c7a76716a62594c473a3022150700000000000000031525323c3f47423530251808000000000000000000000000000000000000000000000000000000021424323b3e4743403628180600000011212e373a4744403629190700000000000000000000000000000000000000000002101f2c363944473b382f221200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4a4e5c524d41301a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f0900000000000000000000000000000000000000000000000000000000000000000417293a4a5b63788591867f797675777a81888b81736057453223120000000000000000000000031729394b5c6a7f947f6a5a4835200b000000000000000000000000000312222f3c49556068737c82888d9091909191908c87827a71665e4c473a2b1d0d00000000000000000000000000000003131c2a333a474c535560646668696867646158544d483b342a1c1204000000000000000000071520272a322d201c1308000000000000000000000000000000000000000000000000000000000006141f2629312e2b23180a0000000003111c2325322f2c24190b0000000000000000000000000000000000000000000000010f1a21232e3126241d120400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2d3639473d393023130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f090000000000000000000000000000000000000000000000000000000000000000000c1c2d3d4a5a62707c858a8e8c8a8c8f8983796c605545392816050000000000000000000000000b1b2e3e4b6073828578624d38220d000000000000000000000000000004121e2c37444b5460676d73787a7c7e7e7c7a77726d645c514d40332a1c0d0000000000000000000000000000000000000c181f2a333737444b4e51535453524f4c463a37342b1f180c000000000000000000000000030c12151c180b070000000000000000000000000000000000000000000000000000000000000000020c12141c1916100600000000000000080e101c191711070000000000000000000000000000000000000000000000000000060c0e191c110f0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21243227251e13050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d89745e49341f09000000000000000000000000000000000000000000000000000000000000000000000f1f2d3c484d5f6770767b7d7e7c7a756e635b4b4437281b0a0000000000000000000000000000101d314455606d71625a4835200b000000000000000000000000000000000e19273136434b51585a636567696867656158574f4b3e39301f170c0000000000000000000000000000000000000000040c171f21273136393c3e3e3e3d3a3633292220180d04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1c12100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61757d7d67523d28120000000000000000000000000000000000000000000000000000000000000000000000010f1e2b35414d515861656869676560554e4a3d3127190a00000000000000000000000000000001142637444b575c4d483c2b1905000000000000000000000000000000000009151d2630353c3c494d5052535351504c473a3a372e241d12040000000000000000000000000000000000000000000000040a0c151d2024272829292725211f170d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3346576168675f4d3a2510000000000000000000000000000000000000000000000000000000000000000000000000000e192030393a474c505253524f4b4437362d1d150900000000000000000000000000000000000919263135424638352b1e0e000000000000000000000000000000000000000108141c20272c35383b3c3e3e3c3b37332a25221b10090000000000000000000000000000000000000000000000000000000002080b0f11131413120f0c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003172939464c53524d41301e0a000000000000000000000000000000000000000000000000000000000000000000000000000005121d242a33373b3d3e3c3a363127211a0f010000000000000000000000000000000000000009141d202d312220190e0000000000000000000000000000000000000000000001080b12192023252729292725221f180f0d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2933363d3d3a30231301000000000000000000000000000000000000000000000000000000000000000000000000000000000a0c171f212628292725201d1509070000000000000000000000000000000000000000000001080b181c0d0b05000000000000000000000000000000000000000000000000000000060c0e1012141312100c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e212828251e130500000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c10131412100b08020000000000000000000000000000000000000000000000000000000207000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c1312100a01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Thin SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Thin SDF.asset.meta new file mode 100644 index 0000000..7d74aa5 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-Thin SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ca4d2f306ccea545b06ae7c31441886 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-ThinItalic SDF.asset b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-ThinItalic SDF.asset new file mode 100644 index 0000000..edf373e --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-ThinItalic SDF.asset @@ -0,0 +1,2714 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-4421300039095632540 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-ThinItalic SDF Atlas + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + serializedVersion: 2 + m_Width: 512 + m_Height: 512 + m_CompleteImageSize: 262144 + m_TextureFormat: 1 + m_MipCount: 1 + m_IsReadable: 1 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_AlphaIsTransparency: 0 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 0 + m_WrapV: 0 + m_WrapW: 0 + m_LightmapFormat: 0 + m_ColorSpace: 0 + image data: 262144 + _typelessdata: 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0b0902000000000000000000000000000000000000000000000000000000000002090b131313131313131313130b090300000000000000000000000000000000000009000000000000060c0e12131413100b090300000000000000000000000000000000000000000000030920201c19130900000000000000000000000000000000000000000000000002090b1014171819181613100b090200000000000000000000000000000000000000000000000000000000000000000000070c0e121516171615120e0c06000000000000000000000000000000000000000000000000000000030a0c10131617171614120c0b04000000000000000000000000000000000000000000000913191c200f0d070000000000000000000000000000000000000000000000000000010a101220191711070000000000000000000000000913191c200f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000030c12142014110b0200000000000000000000000000010a10122016140e040000000000000000000000000000060b0d201b18120800000000000000000000000000000000080d0f2018160f0600000000000000000000000000000000070b1e1f0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c20201d150a0000000000000000000000000000000000000000000000000000000a151d2028282828282828282828211e160a00000000000000000000000000030c12141e0b0902050b0e1a21232729292825211e160a08000000000000000000000000000000000000000a161e3535312e261b0d000000000000000000000000000000000000000000080a151d2025292c2d2e2d2c2925201d150b080100000000000000000000000000000000000000000000000000000000070b101a2123272a2c2c2c2a272320190f0d0700000000000000000000000000000000000000000000070b171e2125292b2c2c2b2927221f180c0a040000000000000000000000000000000000000d1b262e313524221b1002000000000000000000000000000000000000000000000005131e2527352e2c24180a000000000000000000000d1b262e313524221b1002000000000000000000000000000000000000000000000000000000000000000000000000071520272a3529261f1406000000000000000000000005121d2427352b292116080000000000000000000000000e19202335302d251a0c0000000000000000000000000002101b2225352d2a2317090000000000000000000000000008131c203334211f170c000000000000000000000000000000000000000000000000000000000000000000000000000000000008182630353632281a10020000000000000000000000000000000000000000000000000a1a2731363d3d3d3d3d3d3d3d3d3d3632281a0a0000000000000000000000071520272a33201d15181f222c35383c3e3e3d3a363228231c1107000000000000000000000000000000000a1a28324a4a4642382b1b0900000000000000000000000000000000000006111c232832363b3e41434342413e3a363127201c14080000000000000000000000000000000000000000000000000008131c20262d36393d404142413f3c38352c24221b100800000000000000000000000000000000000002101b222933363b3e404141403f3c37342a211f170c00000000000000000000000000000000091b2b3842464a3a372e20100000000000000000000000000000000000000000000001132330393c4a4440362818070000000000000000091b2b3842464a3a372e20100000000000000000000000000000000000000000000000000000000000000000000000031525323b3f4a3e3b3124140200000000000000000001122330393c4a413d34261604000000000000000000000e1e2b354a4a4541372a1a0800000000000000000000000010202e373a4a423f3527170000000000000000000000000818253035484a3733291c0c00000000000000000000000000000000000000000000000000000000000000000000000000000001142636434b4b45382e2110000000000000000000000000000000000000000000000002152738454b525252525252525252524b4538281603000000000000000000031525323b3f493631272a34373d494e515354524f4b4538382f211a0f010000000000000000000000000003162838455e605b564938261300000000000000000000000000000000000e19212e3738454b50545758585856534f4b45383530261812060000000000000000000000000000000000000000000512182530353b3d4a4e525556575654514d493c3a362e231c11040000000000000000000000000000000010202e3639464b50535556575554514c473b3733291c1402000000000000000000000000000013263849565b604f4b3e2e1b070000000000000000000000000000000000000000000a1e30414d5260595447362411000000000000000013263849565b604f4b3e2e1b07000000000000000000000000000000000000000000000000000000000000000000000c2032434f5460534e42311f0b0000000000000000000a1d30414d516056514434210e00000000000000000006192b3c495e605a55483725120000000000000000000000081b2e3e4b4f60575245351d0d0000000000000000000000132536434a5d5f4c473a2917040000000000000000000000000000000000000000000000000000000000000000000000000000081c3043546060564b3f2e1b0800000000000000000000000000000000000000000000091d3145566068686868686868686868605645321e090000000000000000000c2032434f545e4b45383b474c565b6367686968656056504c3f362d1f1300000000000000000000000000091e3245567075716756422e0a00000000000000000000000000000005131e2c353f4b4f566065696c6d6e6d6b68656056514b43363020190e000000000000000000000000000000000000000d181f3036434a50575b63676a6b6c6b6a67635a574f4a3e372f1f170c0000000000000000000000000000071b2e3e4a4f576165686b6c6c6b69676159554c473a311d150a00000000000000000000000000192e4256677175645c4b37220d0000000000000000000000000000000000000000001025394d5f67756e6554402c170200000000000000192e4256677175645c4b37220d0000000000000000000000000000000000000000000000000000000000000000000012273b4f61697569604e3b26110000000000000000001024394d5f67756b62513d29140000000000000000000b2035495a7075706655412d0800000000000000000000000d22374b5c64756d63523c2b1905000000000000000000071c304354607374615847331f0900000000000000000000000000000000000000000000000000000000000000000000000000000b20354b607275655d4b37220e000000000000000000000000000000000000000000000b20364b60747d7d7d7d7d7d7d7d7d7d74604b36210b00000000000000000012273b4f6169736056454b59626b72787c7e7e7d7a756e655d4e4a3d311c130800000000000000000000000b21364b60758a85715b3928160300000000000000000000000000061423303c494d5d656e757a7e81828382817e7a756e6660544d41352b1e1204000000000000000000000000000000000d1d2a34404d5460656c72797c7f8181817f7c78736c645c504b3f332a1c10020000000000000000000000000d22364a5c6470767a7e808181807e7c77716a61584e4231271a0a0000000000000000000000001c31465b71858a7a644f3a240f00000000000000000000000000000000000000000012273c52677d8a836e59442e1900000000000000001c31465b71858a7a644f3a240f00000000000000000000000000000000000000000000000000000000000000000000142a3f54697f8a7e69533e291400000000000000000012273c51677c8a806b56412b160100000000000000000d23384d62788a84705a36251300000000000000000000000f253a4f647a8a816d5a4834200b0000000000000000000b20354a6072878a76614c37261401000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788b7b654f3a2510000000000000000000000000000000000000000000000b20354b607485898989898989898a8e79644e39240f000000000000000000142a3f54697f8874605460697780888d8e8d8d8e8f8a847b6f635b4e423025180800000000000000000000091e324556738888735745321e0900000000000000000000000005142432414d5b636f7a83899093908e8d8e8f928f89837b73675f4d483c2f22140600000000000000000000000000000a1b2a3b474c5e66737b81888e92918f8e8e90918d88817a70655d4c473a2e20120400000000000000000000000f243a4f647a848a90918e8d8c8e90918a867f7668604b45382719090000000000000000000000192e44596e83917c67523c27120000000000000000000000000000000000000000000f253a4f647a8f86715c3929170300000000000000192e44596e83917c67523c27120000000000000000000000000000000000000000000000000000000000000000000012273c52677c91806b56412b160100000000000000000f243a4f64798f836e58432e190000000000000000000b20364b60758a87725443301c070000000000000000000013293e53687e938b78624d3928160300000000000000000e23384d63788d947f695544311d08000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074897f6a553f2a1500000000000000000000000000000000000000000000081c3043546070747474747474747e917b66513c261100000000000000000012273c52677c8e796360727e8a89837d797777797d828990847968604a4336251300000000000000000000031628385b71868b76604b36210b000000000000000000000001132332424f5f6779848f9389837e7b7978787a7d81878e90867c6f625a4c4031241406000000000000000000000000031628394759626f7c8690938a847f7b7a79797a7d82878e8f857b6e61584b3e2f221203000000000000000000000f243a4f647a8a86807c797777797a7f848a94897e6e6056453727150100000000000000000000162c41566b81947f69543f2a140000000000000000000000000000000000000000000d22374d62778c89735746331e0a00000000000000162c41566b81947f69543f2a14000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798f836e58432e190000000000000000000d22374c62778c85705b382715020000000000000000081d31445573888a75604a35200b00000000000000000001142637576c828888806b5746321e08000000000000000012273c51677c91858774604b35201000000000000000000000000000000000000000000000000000000000000000000000000000071c3043547186836d583626140100000000000000000000000000000000000000000001142636434b5b5e5e5e5e5e5e667b907e69533e29140000000000000000000f243a4f64798f7c6773828c81776d6864626264676d76808b8b7e6c605443301c1503000000000000000000192e43596e838d78634e38230e00000000000000000000000f1f30414f61697d8a97887e756e696563636365686c7179818b918478665e4e42312413020000000000000000000000091e3245576277839192867e766f6a6664636465686c7279828a908376645c4c402f2111000000000000000000000d22374b5c6474706b666462626365696e77808a938274605544311d120000000000000000000014293e54697e93816c57422c170200000000000000000000000000000000000000000b20354a60758a8b76614b36210c0000000000000014293e54697e93816c57422c17020000000000000000000000000000000000000000000000000000000000000000000d22374c62778c85705b3827150200000000000000000b20354a60758a88735645311d090000000000000000021527375b70858c77624c37220d000000000000000000081d314455708685808975614b3626140100000000000001162b40566b80907b907c67513e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000132536586d8386715443301c080000000000000000000000000000000000000000000008182630354649494949494e63788d816b56412c160100000000000000000d22374c62778c806d82897b6c6158524f4d4d4e5258616b7985928172604a43332111000000000000000001162c41566b81907b66503b261100000000000000000000061a2c3d4d5f697f9293827568605754504e4d4e4f52565b636c788392897c68604e4231201000000000000000000000000b21364b60768896887d7368615855514f4e4e5053575c646c788392887a665e4c3f2f1e0e000000000000000000071b2e3e4b4f5f5b55514e4d4d4e505459626b7a87988373604b402f1a0a00000000000000000011263c51667b91846f59442f1a000000000000000000000000000000000000000000071c30435472878e79634e39240e0000000000000011263c51667b91846f59442f1a000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a88735645311d090000000000000000071c30435472878a75604b36200b000000000000000000192e43586e838f79644f3a240f0000000000000000000b20354b60758984788a7e695443301c0800000000000005182b3b5a6f8488738785705c4a36220c00000000000000000000000000000000000000000000000000000000000000000000000002152a3f556a7f8975604b35200b070000000000000000000000000000000000000000000008141c203134343434364b60768a836e59432e190000000000000000000b20354a607589837d8a7a655d4c473a393838393a464c5b63758397816c6250402f1c0c000000000000000014293e54697e937d68533e2813000000000000000000000c2135495b677d928d7e6d61574b45393b3938393a3d3d4a4e5a626e7d8b8d7e68604e3e2e1d0d00000000000000000000091e324557677d81766860544c463a3c3a39393b3e3e4a4e5a626e7d8a8b7c665d4b3c2b180800000000000000000010202e373a4a46403c393837393b3b484c5c64768597816c5e4c3828150200000000000000000f24394e64798e87715c3a2a17040000000000000000000000000000000000000000001325365a6f84907b66513b2611000000000000000f24394e64798e87715c3a2a1704000000000000000000000000000000000000000000000000000000000000000000071c30435472878a75604b36200b0000000000000000001325365a70858d78624d38230d000000000000000001162b41566b80917c67513c27120000000000000000000e23394e63788e806e838773604b35200f0000000000000b203448597388846f7e8e79644f3b2a1804000000000000000000000000000000000000000000000000000000000000000000070b151d273c51667c8d78634d3823201c130b08010000000000000000000000000000000000000001080b1b1f1f1f1e324556738886715b392816030000000000000000071c304354728787887d685c4b3f332a2422222429333c495761738395806a5e4c3a2a18040000000000000011263c51667b91806b56402b16010000000000000000091c2f404e63798a947f69604b463932282624232325282d363c484d5f687a89927e685c4b3b2b1805000000000000000000031628394d5f676c61584b433633292625242425282d363c484d5f687b898b7b655a4936261401000000000000000002101b222434312b2724222224252a343d4a58627788907c665645321d0800000000000000000c21364c61768b89745847331f0a000000000000000000000000000000000000000000182d42576d82937e69533e2914000000000000000c21364c61768b89745847331f0a000000000000000000000000000000000000000000000000000000000000000000001325365a6f858d78624d38230d000000000000000000182d43586d828f7a65503a251000000000000000000014293e53697e937e69543f291400000000000000000012273d52677c917c677a8f7b66513e2d1a0700000000000d22374d62778c806b7689826d5947341f0a0000000000000000000000000000000000000000000000000000000000000008131c20273136394e63788d7b66513c38353025201c1408000000000000000000000000000000000000000000060909021628385b708688735745321e090000000000000000001325365a6f849a846f5f4e3e2f1f180f0d0d0f171f2c3946556074848d7b655947341f10000000000000000f24394e64798e836d58432e180000000000000000000f23384c5e708498836e614f4233291e16100e0e0e10131a212b35414e5c6479898b7a645948342012000000000000000000000a1b30414d52574c473a30261f17110f0e0f10131b222b35414e5d657b8b8978625443301c0b00000000000000000000070d0f1f1b16110f0d0d0e10181f2d3a4859667c918774604b36251300000000000000000a1f33465874898c76614c37210c000000000000000000000000000000000000000000152a3f556a7f94806b56412b16010000000000000a1f33465874898c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000182d42576d82907a65503b2510000000000000000000162b40556b80927d67523d281200000000000000000011263c51667b91816c56412c17010000000000000001162b41566b808d78637085856f5c4a36210d000000000011263b51667b907c676c818a77614c382715020000000000000000000000000000000000000000000000000000000003121825303538454b4e5260758a7f6a54514e4a43363530261812060000000000000000000000000000000000000000000000192e43586e838b76604b36210b000000000000000000182d42576d82907b6651413120110400000000040e1b283745566278898877614c3e2d1b070000000000000c21374c61768c85705b372715020000000000000005192b3c50667b908977624c43321e170b03000000000000070e1920313e4a5b667c8d8877624d40301909000000000000000000001323303a3d4137332a1c140804000000000000070e1920313f4b5d687e938573604b392916030000000000000000000000000a0600000000000000050f1c2b3b4c5e6f84937e685443301c07000000000000000417293a5c71868e79644f39240f00000000000000000000000000000000000000000012283d52677d92836e59432e19000000000000000417293a5c71868e79644f39240f00000000000000000000000000000000000000000000000000000000000000000000152a40556a7f927d68523d281300000000000000000013283e53687d937f6a553f2a150000000000000000000f24394e64798e836e59442e19000000000000000005182b3b5a6f84897560677d8e79644e3b2a180500000000152a40556a7f8d786363788b7f6a5645311d090000000000000000000000000000000000000000000000000000000a161e2f36434a51566064676a7186826d6967636054504b43362f211a0f01000000000000000000000000000000000000000001162b41566b808e78634e39230e000000000000000000152a40556a7f927c67523d271302000000000000000b1928384859677d92826d5c4a3622100000000000000a1f334758748988735544311d08000000000000000b2035485a6f8495806b594734251403000000000000000000000613202d3d4c5e6b809584705e4c3727150200000000000000000005131e25282c211f170c01000000000000000000000513212e3f4e606f84937e685746321e0a00000000000000000000000000000000000000000000000d1d30404f657a8f8773604a35200b0000000000000000192f44596e84917c66513c271100000000000000000000000000000000000000000010253a50657a8f86705b3928160300000000000000192f44596e84917c66513c27110000000000000000000000000000000000000000000000000000000000000000000013283d52687d927f6a55402a1500000000000000000011263b50667b90826d57422d180200000000000000000c21374c61768c86715b39281603000000000000000b203448597388867155607488826d5948341f0a00000004172a3a596e838974605b6f848874604b36201000000000000000000000000000000000000000000000000000000c1b2832404c5460666e75797d7f808788807f7c78746d6660544c40362c1f1204000000000000000000000000000000000000000013293e53687e907b66503b261100000000000000000012283d52677d927f6a543f2a150000000000000000000a1a2b3b4d5f70848c7a644f3e2d1b0700000000000417293a5c71868a75604b36200b000000000000000d22384d62788b8b77624c3b2a180700000000000000000000000002101f2f404b607385917c665544311d0800000000000000000000010a1012170c0a040000000000000000000000000003112131424e63798b8975614b3621100000000000000000000000000000000000000000000000001223374b5d71868f7a65503a25100000000000000002172c41576c81947e69543f29140000000000000000000000000000000000000000000d22384d62778d88735745321e0900000000000002172c41576c81947e69543f29140000000000000000000000000000000000000000000000000000000000000000000010253b50657a90826d57422d180000000000000000000e23384e63788d846f5a452f1a0000000000000000000a1f334758748988735745321e09000000000000000d22374d62778c826d58556a7f8a77624c3828160200000a1f334758728885705451667b907d67523e2e1b080000000000000000000000000000000000000000000000000c1d2a39454b5e66737b83898e918e8c929d8e8e918d88827b73665e4e493d2f2215070000000000000000000000000000000000000011263b51667b907e68533e291300000000000000000010253a50657a8f826c57422d17000000000000000000000d1d31414f647a8f846f5c4a36220c0000000000001a2f44596f848d78624d38230d0000000000000014293e53697e93846f5947341d0d000000000000000000000000000001121c304354657b8f8774604b362614010000000000000000000000000002000000000000000000000000000000000003142135495b6d82947f69543e2e1b080000000000000000000000000000000000000000000000081c2e3f54697f94816c573b2b19050000000000000014293f54697e94816c56412c170100000000000000000000000000000000000000000b20354b60758a8b76604b36210b0000000000000014293f54697e94816c56412c17010000000000000000000000000000000000000000000000000000000000000000000d23384d62788d846f5a3625130000000000000000000b21364b60768b87725c3a2a1804000000000000000004172a3a5c71878b76604b36210b0000000000000011263b51667b907e69544c61778a806a5645321e0900000c21374c61768c816c574a60738786705c4b37220d00000000000000000000000000000000000000000000000c1c2a3b4757606d7c86909087817c78777d8e7a787b7f858a90867c70635b4c40322515060000000000000000000000000000000000000e23394e63788e806b56402b160100000000000000000d23384d62788d846f5a36251300000000000000000000001322374b5c6f848e7a644f3a2a18040000000002172c42576c81907a65503b251000000000000003162839596e83947e69543b2a1800000000000000000000000000000000011426364b5d6f83937e695443301c080000000000000000000000000000000000000000000000000000000000000000061a2c3d4e64798e87725c4b37220d0000000000000000000000000000000000000000000000001123394e63798e8772594834200b0000000000000012273c51677c91846e59442f19000000000000000000000000000000000000000000081d31445572878e78634e39230e0000000000000012273c51677c91846e59442f19000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a87725443301c070000000000000000091e324557738989745847331f0a0000000000000000001a2f445a6f848d78634e38230e00000000000000152a3f556a7f907a655047586d828875604b362111000010253b50657b907d68534354697e8f7a644f3b2b190500000000000000000000000000000000000000000009192a3a47596175829091847b726b676363788e7b66666a70777f89918479665e4f433224140300000000000000000000000000000000000c21364b61768b836d58432e180000000000000000000b20354b60758a87725443301c0700000000000000000000081b2e3e50657b90836d5947341f0a0000000000142a3f54697f927d68523d2813000000000000091e32465772888f7a644f3a240f000000000000000000000000000000000008182e3f4e63798e8773604b35200b0000000000000000000000000000000000000000000000000000000000000000000e21364a5c71868f7a644f3a250f0000000000000000000000000000000000000000000000000c2136495b73888c77624d37220d000000000000000f24394f64798e86715c3a2917040000000000000000000000000000000000000000011426375a7085907b66503b2611000000000000000f24394f64798e86715c39291703000000000000000000000000000000000000000000000000000000000000000000081d31445573888975604a35200b0000000000000000031628395c71868c77614c37220c000000000000000002172d42576c82907b65503b261000000000000003172939596e838c77614c3a4e63798e7d6853402f1c0900142a3f54697f8e79644f364c617689836e594834200a000000000000000000000000000000000000000001142637475861778598897c6f655d56524e60758a7e69545559616a76808b8a7c69614f423221110000000000000000000000000000000000091e324657738885705b382715020000000000000000081d31445572888975604a35200b00000000000000000000001020354a6073878a77614c37220c000000000012273c52677c91806a55402b150000000000000c21364b61768b8b76614c36210c0000000000000000000000000000000000001121364a5b7085907b6650372715010000000000000000000000000000000000000000000000000000000000000000071a2d3e556b8095806a55402b15000000000000000000000000000000000000000000000000061a2c3d596f84917c66513c2711000000000000000c22374c61778c89745846331f0a000000000000000000000000000000000000000000182d42586d82937e68533e2913000000000000000c22374c61778c89735746331e0a000000000000000000000000000000000000000000000000000000000000000000021527375b70858c77624c37220d000000000000000000192f44596e848e79644f39240f000000000000000000152a3f556a7f927d68533d28130000000000000a1e334657728788735847364a5b6f8586715e4c38230f03162839586d838a75604b3646586c818a78624d3828160300000000000000000000000000000000000000081d3144556176869b8678665e504b3f3c44557187826d573b474c58616b7a888d7f69614f3f2e1b0b00000000000000000000000000000000031628395b718688735645311d090000000000000000011527375b70858c77624c37220d0000000000000000000000071c3043546a7f937e685339291703000000000f253a4f647a8f826d58422d180000000000000e23384d63788d89735746331e0a000000000000000000000000000000000000071a2d3d53687d92826d5544311d0800000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705a39291703000000000000000000000000000000000000000000000000162b41566b80957f6a55402a15000000000000000a1f33475874898b76614c36210c000000000000000000000000000000000000000000152b40556a8095806b56402b16010000000000000a1f33475874898b76614c36210c00000000000000000000000000000000000000000000000000000000000000000000182e43586d838f79644f3a240f000000000000000002172c41576c81917c66513c271100000000000000000012283d52677d92806a55402b150000000000000c21364b61768a846f5a3a2d3d51667c907b65503d2c1a091e324657728786715645323a4e63798e806b5645321e09000000000000000000000000000000000000000b20354b6073849a8576625a4d40372f2737596e8385705b3b343a464c5c647785937f695d4b3929160300000000000000000000000000000000192e43596e838a75604b36200b000000000000000000182e43586d838f79644f3a240f0000000000000000000000001325364e63798e85705746331e0a000000000d22374c62778c856f5a3626140100000000000f243a4f64798f87725d39291703000000000000000000000000000000000000000f22374c61778a8975604b35200b0000000000000000000000000000000000000000000000000000000000000000000d22374c62778c88735746331e0a00000000000000000000000000000000000000000000000013283d53687d92836d58432e180000000000000004182a3a5c71878e79634e39240e00000000000000000000000000000000000000000013283d52687d92836e58432e190000000000000004182a3a5c71878e79634e39240e00000000000000000000000000000000000000000000000000000000000000000001162b40566b80917c67513c2712000000000000000000142a3f54697f937e69543e291400000000000000000010253a50657a8f826d58422d1800000000000010253a4f657a8f806b56412b354b607387846f5b4935210c21364b61768a826d58382836495b6f848875604b362111000000000000000000000000000000000000000e23384d63788a86776158483c30231c2b40556a80897459483429333e4a596277878c7b655746321e0c00000000000000000000000000000001162c41566b818d78634d38230e000000000000000000162b40556b80917c67523c2712000000000000000000000000082136495b72878a76614c36210c000000000b20354a60758a87725443301c0800000000000f253a4f647a8f86715c47311c00000000000000000000000000000000000000000a1f33475870868f7a644f3a240f0000000000000000000000000000000000000000000000000000000000000000000b20354a6075898b76614c36210c00000000000000000000000000000000000000000000000010253a50657a8f85705b38281502000000000000001a2f44596f84917b66513c261100000000000000000000000000000000000000000010253b50657a9085705b38281502000000000000001a2f44596f84917b66513c26110000000000000000000000000000000000000000000000000000000000000000000013293e53687e937e69543f291400000000000000000012273c52677c91816b56412c160100000000000000000d23384d62788d856f5a36251300000000000014293e53697e927c67523d27304354697e8b79634e3a2a17253a4f647a8f7e69543e292c3d51667c917d68533f2f1c080000000000000000000000000000000000000c2035495a6378766159473a2b1d1212273c52677c8c77624c37221f2e3b4859647a8a8775614b3a29170400000000000000000000000000000014293e53697e907a65503b251000000000000000000013283e53687d937f6a543a2a17040000000000000000000000061a2c3d576d82907b66503b261100000000071c30435472878a75604b35200b00000000000f243a4f64798f87715c47321c000000000000000000000000000000000000000004182a3a566b81947f69543f2a14000000000000000000000000000000000000000000000000000000000000000000071c30435472888d78634d38230e0000000000000000000000000000000000000000000000000d23384d62788d88735645321d0900000000000002172c42576c81937e69533e29140000000000000000000000000000000000000000000e23384d63788d88735645321d0900000000000002172c42576c81937e69533e29140000000000000000000000000000000000000000000000000000000000000000000011263b51667b90816c563827150200000000000000000f253a4f647a8f836e59432e190000000000000000000b20364b60758a87725443301c070000000001152737576d828e79634e392426364c617689816c5847331f293e53697e8f7a65503a2520354b60738786715d4b37230e00000000000000000000000000000000000006192c3c495a626158473a2a1c0d000e24394e63798e7b65503b25101d2b3b4a5c6b8095806b5846331f0a00000000000000000000000000000011263c51667b917d68533d281300000000000000000011263b50667b90826d5847331f0800000000000000000000000013283d53687d92806b56402b1600000000001325365a6f858c77624d37220d00000000000e23384d63788d88735d3a2a1804000000000000000000000000000000000000000012283d52677d92836d58432e18000000000000000000000000000000000000000000000000000000000000000000001325365c72878e79644e39240f0000000000000000000000000000000000000000000000000b20354b60758a8a75604b36200b00000000000000142a3f54697f94816b56412c160100000000000000000000000000000000000000000b20364b60758a8a75604b36200b00000000000000142a3f54697f94816b56412c16090909090909090909090909090909090909000000000000000000000000000000000e23394e63788e836e5645311d0900000000000000000d22374d62778c86705b3a2917040000000000000000081d31445573888a75604a35200b00000000081d31445571868a75604b36201e3346576c818977614c37272737576d828b76614c36211c304354697f907b65503c2c19060000000000000000000000000000000000000e1e2c3c494d4c473a2a1c0c00000b20364b60758a7e69533e29140d1d2d3e4c6176898976614c36210c0000000000000000000000000000000e24394e63798e806a55402b150000000000000000000e23384e63788d8a76614c3625130000000000000000000000000f24394e64798e846f5a3727150200000000182d42576d828f7a654f3a251000000000000c21364b61768b8a745847331f0a00000000000000000000000000000000000000000f24394f64798e86715c3a2a17040000000000000000000000000000000000000000000000000000000000000000011426375c71878e79644e39240f000000000000000000000000000000000000000000000000081d31445572888d78634e38230e0000000000000012273c52677c91836e59432e190c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c1d31445573888d78634d38230e0000000000000012273c52677c91836e59432e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e1e14120c020000000000000000000000000c21364b61768b8875604b36201100000000000000000b20354a60758a88735846331f090000000000000000021527375b70858c77624c37220d000000000b20354b60758a86715544311d1729394d63788a7f6a554431314455718687725846331f1426364c617689836e5a4935200b000000000000000000000000000000000000000e1e2b35383733291c0c000000091d3245567287816c57422c1700101f3346586a7f937e69533929170300000000000000000000000000000c21364b61768b826d58432d180000000000000000000b21364b60768b947f695443301c0800000000000000000000000c21364b61768b87725544311d0800000000152a40556a7f927c67523d271200000000000a1e33465774898c77614c37220c00000000000000000000000000000000000000000c21374c61768c89745847331f0a0000000000000000000000000000000000000000000000000000000000000000081d31445573888d77624d38220d000000000000000000000000000000000000000000000000011527375b7085907b65503b2610000000000000000f243a4f64798f86715b392821212121212121212121212121212121212121212121212127375b7085907b65503b2610000000000000000f243a4f64798f86705b39283333333333333333333333333333333333333329261f140600000000000000000000000a1e3246577389927d68523f2f1c0900000000000000071c30435472878b76614c372715020000000000000000192e43586e838f79644f3a240f000000000e24394e63798e826d583727150b2035495a6e848874604b36364b60758a836e593a2917081f3347586d828b78624d39291603000000000000000000000000000000000000000e192023211f170c0000000002152838596e8485705a3a2a18040417293a4d62788d85705746331e0a00000000000000000000000000000a1e334657738985705a372614010000000000000000091e32455673889c8773604a3626140100000000000000000000091e32465773888a75604b36200b0000000013283d52687d927f6a543f2a150000000000031729395c71868e79644f39240f00000000000000000000000000000000000000000a1f33475874898c76614c37210c00000000000000000000000000000000000000000000000000000000000000000b20354b60758a8b76614b36210c00000000000000000000000000000000000000000000000000182d43586d82937d68533e2813000000000000000d22374c62778c88735746363636363636363636363636363636363636363636363636363643586d83927d68533d2813000000000000000d22374c62778c8873574548484848484848484848484848484848484848483e3b3224140200000000000000000000031629395c71869b86715d4c38231200000000000000001325365a7085947f695544311d0a0000000000000001162b41566b80917c67513c27120000000012283d52677d927f69543f2a1406192c3c50657b907d67523f394e64798e7f6a553f2a1504172a3a4e64798e816b5746321e080000000000000000000000000000000000000000060b0d0c0a04000000000000162b40566b8088735847331f0a000b2035485a71878a76614c36210c0000000000000000000000000000031729395c718687725544311d080000000000000000031628385b71869b897c665443301c0a00000000000000000000031628395c71868c77624c37220d0000000010253a50657a8f826c57422d17020000000000192f44596e84917c67513c271200000000000000000000000000000000000000000417293a5c71868e79644e39240f00000000000000000000000000000000000000000000000000000000000000000f24394f64798e88735746321e0a00000000000000000000000000000000000000000000000000162b40556b8095806b55402b16000000000000000b1f34485974898b76614b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b556b8095806b55402b16000000000000000b1f34485974898b76605e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e544f42321f0c0000000000000000000000192f44596e8499897b65504130190900000000000000182d43586d82988774604b382715020000000000000014293e53697e937e69543f291400000001162c41566b81907b65503b2610000e23384b5d718686715d4b3d53687d907b66513b2611000c21364a5c70858976614b362513000000000000000000000000000000000000000000000000000000000000000012283d52677d8c77614c37220c0005192b3c586d82907a65503b2510000000000000000000000000000000192e44596e838a75604b35200b000000000000000000192e43596e8397828673604b38281502000000000000000000001b30465b70858d78634d38230e000000000d23384d62788d846f5a442f1a000000000002172c41576c81947e69543f29140000000000000000000000000000000000000000001a2f44596f84917c66513c2711000000000000000000000000000000000000000000000000000000000000000a1a2e3f54697e93836d58392916030000000000000000000000000000000000000000000000000013283d53687d92836d58432e180000000000000005182a3b5c72878e78636161616161616161616161616161616161616161616161616161616161687d93826d58432d180000000000000005182a3b5c72878e797373737373737373737373737373737373737373737369604f3b26120000000000000000000001172c41566c81968285705f4d37271502000000000001162b40566b8095897d675645311d0d0000000000000012273c52677c91806b56412b1600000005192b3c5a70858c77624c37220d00081c2f3f53687d8f7a65503c576c818c77624d37220d00071a2d3d51677c917e695443301c07000000000000000000000000000000000000000000000000000000000000000f24394f64798e7a65503a25100000152a3f556a7f937d68533e2813000000000000000000000000000001172c41566c818d77624d38220d000000000000000001162c41566b81917d887d675645321d0f000000000000000000051a2f455a6f848e79644e39240f000000000b20364b60758a87725c3a2a1804000000000014293f54697e94816c57412c17020000000000000000000000000000000000000002172c42576c81937e69543e29140000000000000000000000000002090b110f0b08010000000000000000010a1828384b5d7085927d68533d2813000000000000000000000000000000000000000000000000000010253b50657a9085705b38281502000000000000001a2f455a6f84917c767676767676767676767676767676767676767676767676767676767676767c9185705b37271501000000000000001a2f455a6f849a89888888888888888888888888888888888888888888887e69543e2914000000000000000000000014293f54697e917d887c675544311d0f00000000000014293f54697e94828774604b3b2b180800000000000010253a50657a8f826d58432d180000000b2035485a738988735948341f0b00001121364b607588836e5a495470858873594834200b00000f20354b6074888773604a35200f000000000000000000000000000000000000000000000000000000000000000b21364b60768a7e68533e2913000014293e53697e937f6a553f2a1500000000000000000000000000000014293e54697e8f7a654f3a251000000000000000000014293e54697e937e7e8774604b3d2d1a0a0000000000000000061b30465b70858d78634e38230e00000000081d314455738889745947341f0a000000000012273c51677c91846e59442f19000000000000000000000000000000000000000000142a3f54697f94816c56412c170100000000000000000000000a151d202624201d14120f0d0b090a0c0e141c28364556657a8f8875604b36210b00000000000000000000000000000000000000000000000000000e23384d63788d88735645321d0900000000000002172d42576c8297918b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b919d88725544311d0800000000000002172d42576c829788868686868686868686868686868686868686868686867f6a55402a15000000000000000000000012273c51677c917e7e8774604b3d2d1a0a000000000012273d52677c927d877f6a59483626140100000000000e24394e63798e846f5a442f1a0000000d22384d62788d846f5a3b2a18050000091e3245566b808b78634d607489846f5a3b2b18050000081d3144556a7f907b66513d2c1a06000000000000000000000000000000000000000000000000000000000000091e3245577287816c56412c17000014293e54697e93806b55402b1600000000000000000000000000000011273c51667c917d67523d281200000000000000000011263c51667b91817486806b5c4a382715020000000000000005192b3c5c71868c77624c37220d00000000021527375b70858c77614c37220c00000000000f24394f64798e86715c3a291704000000000000000000000000000000000000000012273c52677c91836e59442e1900000000000000000000000a1a2731363c39353126282522201d1f21232630394554607486957f6a5745321e0900000000000000000000000000000000000000000000000000000b20364b60758a8a75604b36200b00000000000000152a3f556a7f94858181818181818181818181818181818181818181818181818181818181818181968a75604b35200b00000000000000152a3f556a7f9481717171717171717171717171717171717171717171716a61503c281300000000000000000000000f243a4f64798f8074867f6a5c4a382816020000000011263c51667b917e7d8a77625443301c1203000000000e23384e63788d85705a45301b00000011273c51667c91816b56412c16000000021628384d62778a816c5863788d806b56412b16000000011527374c61778a846f5b4935210c00000000000000000000000000000000000000000000000000000000000003162839596f84846f5a3a29170404182a3b566b80947f6a543f2a150000000000000000000000000000000f24394e64798e7f6a553f2a150000000000000000000f24394e64798e836e7a8b79645645311d14050000000000000b2034485a73898a75604b36200b0000000000182e43586d838e79644f39240f00000000000c22374c61778c89745846331f0a00000000000000000000000000000000000000000f253a4f647a8f86715c3929170300000000000000000002152738454b514f4b44373d3a37363133363836434b57607281978675604b392816030000000000000000000000000000000000000000000000000000091d31455673888d78634d38230e0000000000000012273d52677c92836d6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c73888d78624d38230d0000000000000012273d52677c92836e5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c5c55504333200d00000000000000000000000c22374c61778c826d7a8b79645645321e150300000010263b50657b907e6f848472604b402f2112010000000d23384d62788d85705b45301b000000152b40556a80927d68523d2813000000000a203448596e83897661677c917c67523c271200000000091f3447596d828e79634e3a291704000000000000000000000000000000000000000000000000000000000000162b41566b8088735846331f0a121f3447596f84927c67523d27120000000000000000000000000000000c21374c61768c826d57422d180000000000000000000c21374c61768c86716c818574604b433223130200000000000d22384d62778d87725645321d090000000001162b40566b80917c67513c271200000000000a1f33475874898b76614c36210c00000000000000000000000000000000000000000d22374c62778c89735746331e0a000000000000000000091d314556606664605556524f4d4b45464c4d515460677582978a79635645321b0a000000000000000000000000000000000000000000000000000000021527385b7085907b65503b26100000000000000010253a4f657a8f85705b565656565656565656565656565656565656565656565656565656565b71868f7a65503a25100000000000000010253a4f657a8f86715b3946464646464646464646464646464646464646403c3325150300000000000000000000000b1f3447597489856f6c818574604b43331e160b000011263b50667b907e6978897f6a5e4c40301d150900000e24394e63798e85705a45301b00000417293a596e838e79644e39240f0000000005182b3b4f647a8f7f696b808d78634e38230e0000000004182a3a4f647a8e816c5847331f0900000000000000000000000000000000000000000000000000000000000013283d52687d8b76614c3621161e2f404c61778a8d78624d38220d0000000000000000000000000000000a1f3347587489846f5a3625130000000000000000000a1f33475874898873607586826d614f41311d150a00000005182b3b51677c91836e5838281502000000000013283e53687d937e69543f2914000000000004182a3a5c71878e79644e39240f00000000000000000000000000000000000000000b20354a60758a8b76614b36210c0000000000000000000b20364b60747c79756f6b6764626056586163666c747d87988779635b493828160000000000000000000000000000000000000000000000000000000000182e43586d83927d68533d2813000000000000000d22374d62778c88735645414141414141414141414141414141414141414141414141414143596e83927d68523d2813000000000000000d22374d62778c88735745323131313131313131313131313131313131312a2820150700000000000000000000000004182a3b5c72878772607485826e62504332281c130e12273c51677c917d68677d8c7c665e4c40312719120f10253b50657a90836d58432e1800000a1f33475872878a75604b36200b00000000000d22374b5c708587746f858974604b35200b00000000000c22364a5c70858976614c3726140100000000000000000000000000000000000000000000000000000000000f243a4f647a8f7a644f3a252932404c5e6b809685705a4835200b0000000000000000000000000000000417293a5c718687725443301c0700000000000000000417293a5c71868b766163798a7f695f4e4232281a120d0d14203448596e83927d67523d281200000000000011263b50667b90816c57412c170200000000001a2f445a6f84917b66513c26110000000000000000000000000000000000000000071c30435472878e79634e39240e00000000000000000013283e53687e918e8984807d7a7775757476787b8187928c8377635b4a3d2c1a0a0000000000000000000000000000000000000000000000000000000001162b40566b8095806b55402b16000000000000000b20354b60758a8a75604b362c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c41566b80957f6a55402a15000000000000000b20354b60758a8b76604b36211c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c15130d0300000000000000000000000000001a2f455a6f84897458627889806a614b4639302523232c3d546a7f907b655f6b808b7c665e4b4437302624232d3e54697e93806b56402b1600000c21374c61768c87715645321d090000000000071b2e3e52677c917c738985705443301c080000000000071b2d3e52677d927f695544311d0800000000000000000000000000000000000000000000000000000000000c21364b61768b7d68533d3339464b5e667c8d8b7a644f3c2b190500000000000000000000000000000000192f44596e848a75604a35200b0000000000000000001a2f44596f848e78635b667c8b7d68604b45382f2522222631424c62778a8a76614c36210c0000000000000e23394e63788e846e59442f19000000000002172c42576c81937e69543e29140000000000000000000000000000000000000000001325365a6f84907b66513b26110000000000000000000d23384d62788d8581868a8e8f8c8b8a8a8b8d918f8983796e61594a3d2d1f0e00000000000000000000000000000000000000000000000000000000000013283e53687d93836d58432e1800000000000000081c30435472878d78634d38231717171717171717171717171717171717171717171717293e53697e93826d58422d1800000000000000081c30435472878e78634e39230e07070707070707070707070707070707000000000000000000000000000000000002182d42576d828c76615a647a897f6d61574a433638383a495b6f848d77624d6072828b7c6b60554d413b39383b4a5c6f84907b66513b2611000010253b50657a90836e58382815020000000000001020354b60748885788d816c57362614010000000000001020364b6075888774604b35201000000000000000000000000000000000000000000000000000000000000a1e3346577388816b5639464b57616c7c8b947f6a5c4b371e0e0000000000000000000000000000000002172c41576c818c77624c37220d000000000000000002172c42576c81907b66505e677d8c7e6c60564c403a383837444b606d8297816c5846331f0a0000000000000b21364b60768b86715c3a2917040000000000142a3f54697f94816b56412c16010000000000000000000000000000000000000000182d42576d82937e69533e29140000000000000000000b2035485a728787727175797c7f81828381807e79746d645c4c473b2d1f0f0000000000000000000000000000000000000000000000000000000000000011263b50667b9085705b37271502000000000000011426365a6f85907b65503b261001010101010101010101010101010101010101010111263b51667b90856f5a36261401000000000000011426365a6f85907b66503b261100000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f8e79634e5c647a898275676054514e4d505863798c86715a48546072808b8073675f56514e4e5059647a8c8975604b36210b000014293f54697e947f6a543f2a1500000000000000081d3144556a7f9480927d68533d281300000000000000091d3145566a80917c66513e2d1b0700000000000000000000000000000000000000000000000000000000091729395a6f84846f5a5057616975818c938072604a3e2e1b00000000000000000000000000000000000014293f54697e8f7a644f3a250f000000000000000000142a3f54697f937d68534d5f687d8b8174665e554f4d4d4f55606a7e928977614c3a291704000000000000091e324557738889745846331f0a000000000012273c52677c91836e59442e19000000000000000000000000000000000000000000152a40556a7f95806b56412b1601000000000000000006192b3c566b818d78636064676a6c6d6d6c6a696460544e4a3d342a1d0f01000000000000000000000000000000000000000000000000000000000000000e23384e63788d88735544311d0800000000000000182d42586d82927d68533d28130000000000000000000000000000000000000000000e24394e63798e87725443301c0800000000000000182d42586d82937d68533e28130000000000000000000000000000000000000000000000000000000000000000000012283d52677d907b66514a5c647885877c736b666363656a7685937e68533c4354606b7e8a867c726b666463656b7886947f6a5645321e090002152738586d82907b66513b261100000000000000011527374c61778a898e79644f39240f00000000000000021527384c62778a85705c4a36220d000000000000000000000000000000000000000000000000000009121d242a41566c81887260656d767f88968a7e6b60544330201000000000000000000000000000000000000012273c51677c917c67523c271200000000000000000012273c52677c91806b56414e5f687a88877b716a656262646a737f8c8c7c665947341b0b00000000000000031628395b71868b76614c36210c00000000000f243a4f64798f86715b39291603000000000000000000000000000000000000000012283d52677d92836e59432e190000000000000000000010263b50657b907e69544e52545657585755534f4b4336362d1f180c0000000000000000000000000000000000000000000000000000000000000000000b21364b60768a8a75604b36200b00000000000000152a40556a7f95806b55402b160000000000000000000000000000000000000000000c21364b61768b8a75604b35200b00000000000000152a40556a7f95806b56402b160100000000000000000000000000000000000000000000000000000000000000000010253a50657a8f7d68533e4a5a6275808a87807b78787a7f88978472604b3536434a606879848f87817b79787b8089968474604b3828160200091d31455671868c77624d37220d0000000000000000091f3347586d82978a75604b36200b00000000000000000a203448596e838e79644e39240f00000000000000000000000000000000000000000000000003111c232f383b4753687d8d75747a8289948c837868604a43362513020000000000000000000000000000000000000f24394f64798e7f69543f2a140000000000000000000f253a4f647a8f836d5843414e5c6477828c867f7a77777a7f86948a7d675e4c3b2a18000000000000000000192e44596e838e79634e39240e00000000000d22374c62778c89735746321e0a000000000000000000000000000000000000000010253a50657a8f86705b392816030000000000000000000b20364b607589846f57463d3f41424342403e3a353026211a0f0400000000000000000000000000000000000000000000000000000000000000000000091e32455673888d78634d38230e0000000000000013283d52687d92836d58432e180000000000000000000000000000000000000000000a1e32465773898d77624d38220d0000000000000013283d52687d92836d58432e18000000000000000000000000000000000000000000000000000000000000000000000d22384d62788d7d68533d3c4956606b7881888f8d8d8f918a8174605443302530424e5b636f7a83898f8e8d9090898174605645311a0a00000b20364b60748a8470594834200b000000000000000004172a3a4e63798c85715645321d09000000000000000005182b3b4e637988816c57422d1700000000000000000000000000000000000000000000000a161e2f38404c515962697a8f82878f928982796e625a4e4230251808000000000000000000000000000000000000000c22374c61778c816c57422c170200000000000000000d22374c62778c85705b37313e4b59616d7a838a8f8d8d8f90898378675f4d402f1d0c000000000000000001162c41566b81917b66513c261100000000000b1f34485974898b76614b36210c00000000000000000000000000000000000000000d23384d62788d88735745321e09000000000000000000091d3145566e848a76614b362a2c2d2e2c2b2924201c140807000000000000000000000000000000000000000000000000000000000000000000000000021628385b7086907a65503b25100000000000000010253a50657a8f85705b372715020000000000000000000000000000000000000000031629395b71868f7a654f3a25100000000000000010253a50657a8f85705b382715020000000000000000000000000000000000000000000000000000000000000000000b20354a60727772604a352c38454b5a626c747a7d7f7e7c766c6056453626141c313c494d5d646e757a7d7f7e7b766c605645382715000000091d31455660747066553b2b19050000000000000000000c21364a5b637776614c382815020000000000000000000d21364a5b63736c63523e2a15000000000000000000000000000000000000000000000b1b28323f4c505e666f777f869c978c847d766d635b4d483c311c130800000000000000000000000000000000000000000a1f3347587489846f59442f1a0000000000000000000b20354a60758a88735544312e3b474c5c646e767b7e7f7d7b766e625a4d413022120000000000000000000014293e54697e937e69533e2914000000000005182a3b5c72878e79634e39240e00000000000000000000000000000000000000000b20354b60758a8b76604b36210b0000000000000000000215273853687e917c66513c271718181715140f0b0801000000000000000000000000000000000000000000000000000000000000000000000000000000192e43586e83927d68533d2813000000000000000d23384d62788d88735544311d08000000000000000000000000000000000000000000192e44596e83927d67523d2812000000000000000d23384d62788d88735645311d09000000000000000000000000000000000000000000000000000000000000000000071c3043546062605443301c28323c484d5460646769696661584b4538281808141e2c353f4b4f566065686a686661574b4538271a0a00000002152738454b5f5b5548381d0d00000000000000000000071a2d3d4a5962615847331a0a00000000000000000000071a2d3d4a4e5e57524535220f0000000000000000000000000000000000000000000b1b2939454b5d65717c848a948f9983786f6861574e493d352b1e140000000000000000000000000000000000000000000004182a3a5c718787715c3a2a17040000000000000000071c30435472878a75604b36202a343e4a4f576166696a686661574d483c302313040000000000000000000011273c51667c91816b56412c160100000000001a2f455a6f84907b66513b26110000000000000000000000000000000000000000081d31445572888d78634e38230e000000000000000000000d22384d62788d826c573d2d1a070302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b8095806b55402b16000000000000000b20354b60758a8a75604b36200b000000000000000000000000000000000000000001162c41566b81947f6a553f2a15000000000000000b20354b60758a8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000132536434a4d4a43362513161e2b3536434b4f525453514c473a32281a0a00000e19212e3738454b50535453514b463931271a0a00000000000a1a273136494642382a1a0000000000000000000000000f1f2d3b484d4c473a2a170000000000000000000000000f1f2d363948423e352717050000000000000000000000000000000000000000081829394657606c7b85919389827a84836e5a524b4639362c20190e0000000000000000000000000000000000000000000000001a2f44596f8489745847331f0a0000000000000000001325365a6f858d78624d3823181f2d3639464b50545553514b4639352b1e130500000000000000000000000f24394e64798e836e59432e19000000000002172d42576c82937e69533e29140000000000000000000000000000000000000000011527375b7085907b66503b2611000000000000000000000b2035485a718788735c4a36210d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013293e53687e93826d58432d1800000000000000081d31445572888d78634d38230e00000000000000000000000000000000000000000014293e53697e93826c57422d1700000000000000081d31445572888d78634d38230e000000000000000000000000000000000000000000000000000000000000000000000818253035383530251808030e19202630353a3d3f3e3c37332a1d150a0000000006101b222731363a3d3f3e3b3633291d150a000000000000000a151d2034302e261a0c000000000000000000000000010f1d2b343737332a1c0c000000000000000000000000010f1a2124332d2a22170900000000000000000000000000000000000000000013253646576175819094877e766d6c8187725645363229211a0f0500000000000000000000000000000000000000000000000002172c42576c818c76614c37210c000000000000000000182d42576d82907a65503b2510101b222933363b3e3f3e3b36332920190e000000000000000000000000000c21374c61768c86705b392816030000000000152a3f556a7f94806b56412b16010000000000000000000000000000000000000000182e43586d83937d68533e28130000000000000000000005192b3c566b818e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b9085705b37271502000000000000011527375b7085907a65503b251000000000000000000000000000000000000000000011263c51667b91846f5a36251300000000000000011527375b7085907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000008131c2022201c13080000000508141c2025282a2927211f170c0200000000000000080a151d2025282a2926211e170b0200000000000000000002090b1f1b1913090000000000000000000000000000000d182022211f170c000000000000000000000000000000070c0e1e17150f05000000000000000000000000000000000000000000071c304354617584978b7f75696157697e8a75604b3620160b06000000000000000000000000000000000000000000000000000000142a3f54697f8e79644f39240f000000000000000000152a40556a7f927d68523d281300070b171e2126292a2826211e170b0500000000000000000000000000000a1f334758748988735745321e09000000000012273d52677c92836e59432e19000000000000000000000000000000000000000000162b40556b8095806b56402b16010000000000000000000010253b50657b907f6a543a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788e88725544311d0800000000000000182d43586d82927d68533d28130000000000000000000000000000000000000000000e24394e63798e87725443301c0700000000000000182d43586d82927d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000070b0d0b070000000000000001080b0f121414110c0a04000000000000000000000002090b10131513110c0a0300000000000000000000000000000a0604000000000000000000000000000000000000050b0d0c0a040000000000000000000000000000000000000009020000000000000000000000000000000000000000000000021527374a6072849a887a6a60564c50657b8e79634e39240e000000000000000000000000000000000000000000000000000000000012273c52677c917c66513c271100000000000000000013283d52687d927f6a55402a15000000030a0c11141513110c0a030000000000000000000000000000000004172a3a5c71878b76604b36210b000000000010253a4f657a8f86705b38281603000000000000000000000000000000000000000013283e53687d93836d58432e1800000000000000000000000b20364b60758985705847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768b8a75604b36200b00000000000000162b40556b8095806a55402b150000000000000000000000000000000000000000000c21364b61768b8975604a35200b00000000000000162b40556b8095806a55402b150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d314455697e938979645c4b45384c62778c7c67513c271200000000000000000000000000000000000000000000000000000000000f243a4f64798f7e69543f291400000000000000000010253a50657a8f826d58422d18000000000000000000000000000000000000000000000000000000000000001a2f44596f848d78634e38230e00000000000d22374d62778c88735645321e09000000000000000000000000000000000000000011263b50667b9085705b3827150200000000000000000000091d3145566e838a76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32465773888d78624d38230d0000000000000013283d53687d92826d58432d180000000000000000000000000000000000000000000a1e33465773898c77624c37220d0000000000000013283d53687d92826d58422d180000000000000000000000000000000000000000000000000000000000000410191e202020202020202020202020202020202020202020202020202020202020202020202020201e19100400000000000000000000000000000001050001080b080100020000000000000000000000000000000000000000000000000000030c12142014110b0200000000000000000000000000000000000000000000000000000000000000000b20364b607488917c675b4a3e3234485973897f6a55402a1500000000000000000000000000000000000000000000000000000000000d22374c62778c816c56412c170100000000000000000d23384d62788d856f5a36261401000000000000000000000000000000000000000000000000000000000002172c42576c81907b66503b261100000000000b20354b60758a8b76604b36210b00000000000000000000000000000000000000000e23384e63788d88735645311d09000000000000000000000215273853687e917c675236261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395b7186907a65503b25100000000000000010263b50657b9085705b372715010000000000000000000000000000000000000000031729395c71868f7a644f3a250f0000000000000010263b50657b9085705a372614010b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b000000000000000414222d3335353535353535353535353535353535353535353535353535353535353535353535353535332d2214040000000000000000000002090b11161a1d141d201d141b17120d0b05000000000000000000000000000000000000000000071520272a3529261f14060000000000000000000000000000000000000000000000000000000000000011263b51667b9085705f4d3d2d1e2a3b5b7085836e5837261401000000000000000000000000000000000000000000000000000000000b1f3447597489836e59442e190000000000000000000b20364b60758a87725443301c08000000000000000000000000000000000000000000000000000000000000152a3f546a7f937d68533e28130000000000081c30435472878d78634e38230e00000000000000000000000000000000000000000b21364b60768b8a75604b36200b00000000000000000000000d22384d62778d826d5443301c0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0902000000000000000000000000000000000000000000000000000000000000192e43596e83927d68533d2813000000000000000e23384d63788d88725544311d08000000000000000000000000000000000000000000192e44596e83917c67523c2712000000000000000e23384d63788d87725544311d202020202020202020202020202020202020202020200d0b05000000001022323f484a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a483f3222100000000000000000040a151d20262b2f322631353126312d282220190e08010000000000000000000000000000000000031525323b3f4a3e3b31241402000000000000000000000000000000000000000000000000000000000001162c41566b81937e695441301f172d42576c8286715544311d080000000000000000000000000000000000000000000000000000000005182a3b5c728786715c392917030000000000000000081d31445573888a75604b35200b00000000000000000000000000000000000000000000000000000000000012273c52677c91806b55402b160000000000011426365a6f85907b66503b26110000000000000000000000000000000000000000091e32455673888d78634d38230e00000000000000000000000b2034485a71868874604b35212121212121212121212121212121201d150a0200000000000000000000000000000000000000000000000000000001162c41566b8195806a55402b15000000000000000b20364b60758a8a75604b35200b000000000000000000000000000000000000000001162c41566b81947f6a543f2a15000000000000000b20364b60758a8a75604b3535353535353535353535353535353535353535353535352220190e000000192d3f505c5f60606060606060606060606060606060606060606060606060606060606060606060605f5c503f2d19000000000000000c181f2731363b41444849444b443746423d38352b201d1509000000000000000000000000000000000c2032434f5460534e42311f0b000000000000000000000000000000000000000000000000000000000003192e43586e838f7a644f3a251214293e54697e8a75604b35200b00000000000000000000000000000000000000000000000000000000001a2f445a6f8489735746331e0a0000000000000000021527375b70858c77624d37220d0000000000000000000000000000000000000000000000000000000000000f253a4f647a8f836d58432e18000000000000182d42576d82937d68533e28130000000000000000000000000000000000000000031628385b7086907a65503b2510000000000000000000000005192b3c566b808f7a644f3a3636363636363636363636363636363632281d150a00000000000000000000000000000000000000000000000000000014293e53697e93826d58432d1800000000000000091d31455673888d78624d38230d00000000000000000000000000000000000000000014293e54697e93816c57422c1702000000000000091d31455673888d77624d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a352b1e0e00001e33485c6e757575757575757575757575757575757575757575757575757575757575757575757575756e5c48331e000000000005131d2a3438454b50565a5d5e5560555d5b57524d483c353127191103000000000000000000000000000012273b4f61697569604e3b26110000000000000000000000000000000000000000000000000000000000051a30455a6f858d78624d38230d10263b50657b8d78634e38230e0000000000000000000000000000000000000000000000000000000002172d42576c828b76614b36210c000000000000000000182e43586d838f7a644f3a250f0000000000000000000000000000000000000000000000000000000000000d22374d62778c85705b372715020000000000152a40556a7f95806b56402b16010000000000000000000000000000000000000000192e43596e83927d68533d281300000000000000000000000010253b50657b90806a554b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b453831271a0a000000000000000000000000000000000000000000000000000011263c51667b9185705a37271501000000000000021527385b7085907a65503b251000000000000000000000000000000000000000000011263c51667b91846f5a442f1a00000000000000021527385b70858f7a65606060606060606060606060606060606060606060606060605e483c2b19050020354a5f758c8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b755f4a352000000000071523303b474c5660666b6f727475757472706c67625a514b44372f1e160a00000000000000000000000000142a3f54697f8a7e69533e29140000000000000000000000000000000000000000000000000000000000051a2f455a6f848d77624d38220d0d22374d62778c7c66513c27110000000000000000000000000000000000000000000000000000000000152a3f546a7f8e79634e39240e000000000000000001162b40566b80917c67523c27120000000000000000000000000000000000000000000000000000000000000b20354a60758a88735544311d08000000000012283d52677d92836d58432e18000000000000000000000000000000000000000001162c41566b8195806a55402b150000000000000000000000000b20364b6075898670606060606060606060606060606060606060564b4538271502000000000000000000000000000000000000000000000000000e24394e63798e88725544311d0800000000000000182e43586d83927d68523d28130000000000000000000000000000000000000000000f24394e64798e87715c3928160300000000000000182e43586d83927d7575757575757575757575757575757575757575757575757575705a4835200b0020354a5f758c817c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c7c818c755f4a352000000004152533414d59616c757b808487898a8a898786827d78706760554c4032281b0c00000000000000000000000012273c52677c91806b56412b16010000000000000000000000000000000000000000000000000000000003182d43586d828f79644f3a240f0b2034485974897f6a543f2a15000000000000000000000000000000000000000000000000000000000012273d52677c907b66513b261100000000000000000013283e53687d937f6a543f2a15000000000000000000000000000000000000000000000000000000000000071c30435472878a75604b36200b000000000010253a50657a8f85705b36261401000000000000000000000000000000000000000014293e53697e93826d58432d18000000000000000000000000081d3144556e838d7876767676767676767676767676767676767571605645311d09000000000000000000000000000000000000000000000000000c21364c61768b8a75604b35200b00000000000001162b40566b8095806a55402b150000000000000000000000000000000000000000000c21364c61768b89745746321e0900000000000001162b40566b8095928a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78624d38220d0020354a5f758a7d6767676767676767676767676767676767676767676767676767676767676767677d8a755f4a352000000012223343505f67778189908b878381807f808284898e8d857c74665e4b4539291c0c00000000000000000000000f243a4f64798f836e58432e19000000000000000000000000000000000000000000000000000000000000152a3f546a7f917c675237271505182b3b5b7085826d5836251300000000000009000000000000000000000000000000000000000000000f253a4f647a8f7e69533e291400000000000000000011263b50667b90816c57422c17020000000000000000000000000000000000000000000000000000000000001325365a6f858d78624d38230d00000000000d22384d62788d88735443301c08000000000000000000000000000000000000000011263c51667b9185705a45301b0000000000000000000000000215273753687d938d8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8574604b36200b000000000000000000000000000000000000000000000000000a1e33465774898d78624d38230d0000000000000011263c51667c847f69543e29140000000000000000000000000000000000000000000a1e3346576e838375614b36210c0000000000000011263c51667c8484848484848484848484848484848484848484848484848484848379644e39240f0020354a5f758a7d6752525252525252525252525252525252525252525252525252525252525252677d8a755f4a3520000008182f4050616a7d8a91867d77726e6c6b6a6b6d6f74797f8791877b6d6057463a291a0a000000000000000000000d22374c62778c85705b3827150200000000000000000000000000000000000000000000000000000000000f243a4f647a8f826d5544311d0b182d42576d8286715443301c070000080e101e12100a010000000000000000000000000000000000000d22374d62778c806b56412b160100000000000000000e23394e63788e846f5a442f1a05000000000000000000000000000000000000000000000000000000000000182d42586d828f7b65503b251000000000000b20354b6073838373604b35200b00000000000000000000000000000000000000000e23384d637984816d58422d18000000000000000000000000000d22374d627784848484848484848484848484848484848484848378624d38220d0000000000000000000000000000000000000000000000000003172939576c818479634e39230e000000000000000f24384c5e666f69614f3b27120000000000000000000000000000000000000000000317293954656e6f615746321e09000000000000000f24384c5e666f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f645c4a36210d0020354a5f758a7d67523d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3d52677d8a755f4a352000001325364c5e6a7f92897c716861595956555556575460636a737c87908275615846382715020000000000000000000b20354a60758a88735645311d0900000000000000000000000000000000000000000000000000000000000b20354a6073878874604b39291814293f54697e8974604a35200b03111c23253328251e130500000000000000000000000000000000000b20354a60758a836e59432e190000000000000000000b21364b60758b86715c47321c070000000000000000000000000000000000000000000000000000000000000d22384d62787a76614c37210c0000000000081d314455606f6f605443301c0800000000000000000000000000000000000000000c2135495b636f6d63523f2a16000000000000000000000000000b20344859626f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f625a4834200b00000000000000000000000000000000000000000000000000000b2a3e52636c6f635b4a36210c00000000000000091d2f404c515a544f42321f0c000000000000000000000000000000000000000000000b1b364754595a4b463928160300000000000000091d2f404c515a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4e4a3d2d1a070020354a5f758a7d67523d2827272727272727272727272727272727272727272727272727283d52677d8a755f4a352000071c304354667c8d8878665e534c473a41403f4136434a4e5460667581948476615645311d10000000000000000000071c30435472878a75604b36200b0000000000000000000000000000000000000000000000000000000000071c304354697e937e685746362516263b50667b8d78624d38230d12212e373a493d3a3023130100000000000000000000000000000000071c304354728786705b382816030000000000000000091e324557647a7a644f39240f000000000000000000000000000000000000000000000000000000000000000b2035485a6264615847331f0a000000000001142637444b5a5a4b4336261401000000000000000000000000000000000000000006192c3c494d5a58524535230f0000000000000000000000000005182b3b484d5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4d483c2b190500000000000000000000000000000000000000000000000000000f22354552575a4e4a3d2d1a07000000000000000012222f383c443e3b3224140200000000000000000000000000000000000000000000001828364044443632281b0b00000000000000000012222f383c4444444444444444444444444444444444444444444444444444444439362d1f0f000020354a5f758a7d67523d2812121212121212121212121212121212121212121212121212283d52677d8a755f4a3520000b20354a6073878c7a645a4c4037342a2c2b2a2b25303536434b57616c7f8d8574604b3e2d1b070000000000000000001325365a6f858d78634d38230e0000000000000000000000000000000000000000000000000000000000001325364b6074878875615443322822384d62778d7b66513b26161e2f3f4b505e524d41301e0a00000000000000000000000000000000001325365a6f8488735645321e090000000000000000031628394a5c64645c4a36220d0000000000000000000000000000000000000000000000000000000000000005192b3c484d4f4c473a2a1704000000000000091926313544443530261808000000000000000000000000000000000000000000000e1e2c353844423f3527170600000000000000000000000000000d1d2b343744444444444444444444444444444444444444444438342b1d0d000000000000000000000000000000000000000000000000000000051727353e424439362d1f0f00000000000000000004121d24262f29271f14060000000000000000000000000000000000000000000000000a18242c2e2f211e160b0000000000000000000004121d24262f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f24211a0f01000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200010253b50657b90846f5c4b3c30221f1817161516131c20263039464b616a7f95806b5c4a36220a000000000000000000182d42576d82907a65503b2510000000000000000000000000000000000000000000000000000000000000081d324556677c918372604b45392f34485a74897f69543f2a2832404c5d6573675f4d3a25100000000000000000000000000000000000182d42576d828b76604b36210b0000000000000000000a1b2e3e4a4f4f4a3e2d1b0700000000000000000000000000000000000000000000000000000000000000000e1e2b35383a37332a1c0c000000000000000009141d202f2f201c14080000000000000000000000000000000000000000000000000e1921232f2d2a231709000000000000000000000000000000000d1820222f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2220190d00000000000000000000000000000000000000000000000000000000000917222a2d2f23211a0f010000000000000000000000090f111a14120c020000000000000000000000000000000000000000000000000000071117191a0c090300000000000000000000000000090f111a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0f0d070000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200014293f54697e937e69533e2e1e120a040000000000070b141c2832434b6073858c7a644f382815020000000000000000152a40556a7f927d68523d2813000000000000000000000000000000000000000000000000000000000000021528384d5f6b8096806e60574c40373c5b7086826d57423339454b5e667b887d67523d28120000000000000000000000000000000000152a3f556a7f8d78634e38230e0000000000000000000010202e363a39362d2010000000000000000000000000000000000000000000000000000000000000000000000e19202225211f170c0000000000000000000001080b1a1a0b08010000000000000000000000000000000000000000000000000000060c0e1a18160f06000000000000000000000000000000000000050b0d1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0d0b0500000000000000000000000000000000000000000000000000000000000000050f15171a0e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a352000162c41566b81917b66513c261100000000000000000000010b161e314455657b90836e5645321d09000000000000000013283d52687d92806a55402b15000000000000000000000000000000000000000000000000000000000000000a1a30414b607283968275665e524c47586d8285705b3b474c57606b7c8b8a7b66503b2611000000000000000000000000000000050612283d52677d907b66503b26110000000000000000000002101b222424221b10020000000000000000000000000000000000000000000000000000000000000000000000050b0d0f0c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191c2020202020202020202020202020202020202020202020202020201e1c160d01000000000000000000000000030920201d1a140a0000000000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a352000152b40556a80917c67513c2712000000000000000000000000031426374b5d72878975604b36200b000000000000000010253b50657a90826d58422d180000000000000000000000000000000000000000000000000000000000000000121c30435460738192867c7067615857697f8974595658616975808d8a7c665e4c38230f00000000000000000000000001080b1a1c1c253a4f657a8f7d68533e2813000000000000000000000000070d0f0f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c121420202020202020202020202020202020202020202020202020202020202012100a0100000000000000000000000000080e10201e0f0d070000000000000000000000000000000000000000000000000000000000000913191c20202020202020202020202020202020201f1e1d1a17120d0b050000000000000000000000000000000000000000000000000d1b262e3135353535353535353535353535353535353535353535353535353534312a1f1101000000000000000000000a161e3535322f271c0e00000000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200012273c52677c91806a5541301d0e00000000000000000000000009192f3f586d838e79644e39240f00000000000000000d23384d62788d856f5a3626140100000000000000000000000000000000000000000000000000000000000000011426364455606c7d8891857d77706c6a7b8c77696c70777f8895877a665e4c402f1c09000000000000000000000009151d2030313131384d62778d806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f262935353535353535353535353535353535353535353535353535353535353527251e13050000000000000000000002101b2225353324221b10020000000000000000000000000000000000000000000000000000000d1b262e3135353535353535353535353535353535353433322f2c282220190e0c060000000000000000000000000000000000000000091b2b3842464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49453c2f1f000000000000000000000a1a28324a4a47433a2c1c0a000000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000c22374c61778a87715f4d3c2b1e12070000000000000000000000162b40566b80907b65503b261000000000000000000b20364b60758a87725443301c08000000000000000000000000000000000000000000000000000000000000000008182737444b5f67757f89928a85827f7f94807f81858a93898075645c4c402f22120000000000000000000000091927313545464646464b60758a836d58432e1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d13152013110b0200000000000000000000000000040e14161f1a0b080100000000000000021424323b3e4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c393023130100000000000000000010212e373a4a4839362d20100000000000000000000000000000000000000000000000000000091b2b3842464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a494744413d38342b2320190e0700000000000000000000000000000000000013263849565b6060606060606060606060606060606060606060606060606060605e594d3c1a0a000000000000000003162838455e605c574a3a2714000000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000a1f3347586d82917c675a483c30201c130c0a0400010000010205192b3c586d828f7a644f3a250f0000000000000000081d31445573888a75604b35200b00000000000000000000000000000000000000000000000000000000000000000009192731414d57616a767d83888c8f909c958f8d89847e766b61574a3e2f2212040000000000000000000001152737444b5a5b5b5b5b5b54728785705b372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071520282a3528261e13060000000000000000000000081621292b352f201c14080000000000000c1f32424f53606060606060606060606060606060606060606060606060606060606060524d41301e0a0000000000000000081b2e3f4b4f5f5e4e4a3e2d1b0b0000000000000000000000000000000000000000000000000013263849565b60606060606060606060606060606060605f5e5c5a56524d483c38352c221b100500000000000000000000000000000000192e42566771757575757575757575757575757575757575757575757575757575736b593828160200000000000000091e3245567075726857432f0c000000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200004182a3a4c6277898878625a4d40353025211f17181716161617182035485a70858a77614c37210c0000000000000000021527375b70858c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000009151d3039464b5761676e7377797c86847b78746f6961584b46392d2012040000000000000000000000081d314455606f717171717171718488735544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000031525333c3f4a3d3a31241302000000000000000000051626343d414a443530261808000000000012263b4f6069757575757575757575757575757575757575757575757575757575757575675f4d39251000000000000000000e22374b5d657573645c4a39291703000000000000000000000000000000000000000000000000192e4256677175757575757575757575757575757575757473726f6c67625a554d493c362e20190d0000000000000000000000000000001c31465b71858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89735645321e09000000000000000b21364b60758a86725c3b2a18040000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a352000000c1f344859657b8c8678665e504a43363633292d2c2b2b2b2c2d2e3e4d62788b85705847331f0a000000000000000000182e43586d838f7a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000001131b293239464b52595961646d828570626054534c463a32281b10020000000000000000000000000b20354b60748486868686868685898b75604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d203343505560534e42311e0b0000000000000000011323344451565f5a4b43362614010000000014293e53697e8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523c2712000000000000000010253a4f657a8c887a645746331e140100000000000000000000000000000000000000000000001c31465b71858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a89888784817d77726a635a4f4a3e342b1d140200000000000000000000000000192e44596e839986848484848484848484848484848484848484848484848484848375604b36210b00000000000000091e324556738889745947341f0b0000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000005182a3b4b5d667c8a897c70656054504c463a434140404041433b4a5c6c81917c67523a2a1704000000000000000001162b40566b80917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000000000b161e2933363d3b474c546a7f8873594a43363633291e160b00000000000000000000000000000b20354b60738081818181818181818076614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283c50616a7568604e3a261100000000000000000f20314151626b746f605443301c08000000000c22374c6176879a848284858686868686868686868686868686868686868686868686857b65503a251000000000000000000e22374b5d697f948776614c42311f0f0000000000000000000000000000000000000000000000192e44596e839985838383838383838383838383838383848586898c918d8780786f645c4d483b311d150a000000000000000000000000162c41566b81947f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f605645321e0900000000000000031628385b70868c77614c37220c0000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200000000d1d2f3f4c5e66798591857b736b6661585a585655555657585a59647a8c8572604a35200c0000000000000000000013293e53687e937f69543f2a140000000000000000000000000000000000000000000000000000000000000000000000000000030b171e21282a343c51667b8c77614c3725211f170b03000000000000000000000000000000081c304354606b6b6b6b6b6b6b6b6b6b615746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f8a7e68533d2813000000000000000c1c2d3e4d5f6b808a8475604b35200b000000000a1f3347586278878b7b6f70707171717171717171717171717171717171717171717170655d4b37230e0000000000000000081b2e3f4f616e8398826e604e3d2d1b0b00000000000000000000000000000000000000000000162c41566b81947e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6f7174777c8188908d847a6e62594e4232281a0b000000000000000000000014293e54697e93826d5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4b45382816020000000000000000192e43596e838f79644f3a240f0000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200000000011212f404c5b63727c868f87817b76736f6d6c6b6b6b6c6d6f7177878878625443301c070000000000000000000011263b51667b90816c5737271502000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c121823384d63788d7a65503a25100a04000000000000000000000000000000000001142636434b565656565656565656564c46392917030000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92806a55402b150000000000000818293a4a5c677d928776615443301c080000000004182a3a485a6277868b7c665e5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b504b3f2e1c08000000000000000000102132434c617687937e685b4a3928160300000000000000000000000000000000000000000014293e54697e93816c5858585858585858585858585858595a5c5962676c737b838c8f837868604b4538291b0b0000000000000000000011263c51667b91846f5a3644444444444444444444444444444444444444444444443632281a0a000000000000000001162c41566b81917c67513c27120000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000000000311222f3c49546067717a81888c8b8885828180808081828486898b7b65594836251300000000000000000000000e23394e63788e846f5544311d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b6075897e68533e291300000000000000000000000000000000000000000818263035414141414141414141413633291b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f826d58432d180000000000011426364758647a8a8a7a6458473626140100000000000c1c2b3c48596277868c7c675f4d4146464646464646464646464646464646464646463a372e21110000000000000000000002141f334658647a8b8b79635746321e1301000000000000000000000000000000000000000011263c51667b91846e594443434343434343434343434344453b484c515460656e798391897e6d60564639291b0b0000000000000000000f24394e64798e87725443302f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f211e160a0000000000000000000014293e53697e937f69543f2a140000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000000000004111e2c36434a525d656c72777c7f8284858686858482808a8d7d675d4b3b2b180800000000000000000000000c21364b61768b8875604b36200c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d3144557186816c57412c1702000000000000000000000000000000000000000008141c202b2c2c2c2c2c2c2c2c2c211e170b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778d85705a37261401000000000e1c304354617687927d675c4a3a2a1808000000000000000e1e2b3b48596276858c7d675f4e413131313131313131313131313131313131313125231c110300000000000000000000000417293a4a5c687e938675614b41311f0f00000000000000000000000000000000000000000f24394e64798e86715c3a292e2e2e2e2e2e2e2e2e2e2e2f302b343736434a505b636e7c889382746157463929190900000000000000000c21364c61768b8975604a35201a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0b0902000000000000000000000011263c51667b91816c57412c170200000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000000000000000e182530353f4b4f575962666a6d6f707171706f6d81947f6a5f4d3f2e1d0d0000000000000000000000000a1e3246577389907b66513b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000114263753697e816c57422d170200000000000000000000000000000000000000000001080b161616161616161616160c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a87725544311d080000000e1e2f404b60728396816c5f4d3e2d1c0c0000000000000000000e1d2b3b47586176858c7d68604e4232241c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1b100e0800000000000000000000000000000c1c2d3e4e606e8297826d5f4d3d2c1a0a000000000000000000000000000000000000000c21364c61768b89745847331f19191919191919191919191a1820222530353d4a4e5f67778597847561574637261401000000000000000a1f33465874898c77624c37220d050505050505050505050505050505050505050500000000000000000000000000000e24394e63798e846e59442f190000000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000000000000000008131c202e373a3b484d515557595b5b5b5b64798b8573604b4130211100000000000000000000000000031629395c718698836e5947341f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000009263b4f60696c63523e2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572888a75604b35200b00000a1b2c3c4c5e6a80958474604b4131200f00000000000000000000000d1d2a3a47586176848d7e68604f423224150706060606060606060606060606000000000000000000000000000000000000102031424b617586927d675b49382816020000000000000000000000000000000000000a1f33465874898c76614c37210c0303030303030303030400050b0d131c202d36414d59627483998475615544311d12000000000000000417293a5c71868f79644f3a240f000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b86715c3a29170400000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200000000000000000000007101b22252b34373c3f4244464646566c818e79635443302313030000000000000000000000000000192f44596e84998977614c382815020000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f32424f5357524535220f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0f121413110c0a04000000000000000000000a00000000000000000000000000011426375a70858d77624d38220d0003162839495a667c8d8877625544312313010000000000000000000000000d1c2a3a47586175848d7e69604f433225150700000000000000000000000000000000000000000000000000000000000002141e32465763798a8a79635645321e120000000000000000000000000000000000000417293a5c71868e79644e39240f000000000000000000000000000000070f1a21303b4856607383998473604b402f1b0b00000000000000192f44596e84917c67523c2712000000000000000000000000000000000000000000000000000000000000000000000a1f334658748989745847331f0a00000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000000000000000000000000080e10192022272a2d2f3031445a6f8487725b4a36261405000000000000000000000000000001172c41566c8196857f6a5645321d0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000021424323b3e423e3527170500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208131c202427292926211f170c090000000000070d0f1f12100a0100000000000000000000182d43586d828f7a654f3a251003111e3245576378898c7b6559483727150500000000000000000000000000000c1c293a46576175848d7e69614f4333251608000000000000000000000000000000000000000000000000000000000000031629394a5b687d928674604b41301e0e000000000000000000000000000000000000192f44596e84917c66513c2711000000000000000000000000000000000007121d2b38455560748596806b5e4c39291703000000000002172c41576c81947f69543f2a14000000000000000000000000000000000000000000000000000000000000000000000417293a5c71868c76614c37210c00000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200000000000000000000000000000040f1a21232b27313535445a6f8486715c3d2d18080000000000000000000000000000000014293f54697e947e8875604b3928160300000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f26292d2a22170900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d253035393c3e3e3b373329241c12060002101b22243527251d1305000000000000000000152b40556a80927c67523d2712112132424b607586937e695d4b3b2b1909000000000000000000000000000000000c1b29394657607483937f6a615043332616080000000000000000000000000000000000000000000000000000000000000b1b2d3d4e5f6d8297816c5f4d3c2c1a0a0000000000000000000000000000000002172c41576c81937e69543e2914000000000000000000000000000000000000000d1a28374556627889917c665746331e0e00000000000014293f54697e94816c57422c170200000000000000000000000000000000000000000000000000000000000000000000192f44596e848e79644e39240f00000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000000000000000000000000000b171f2c35384037444b4b43576c8188735c4a36210f0000000000000000000000000000000012273c51677c917e827e695745321e0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c121417150f0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1a273136434a4f515353504c473a382f211a0f10202d363a4a3c3930231301000000000000000013283d53687d927f6a553f2a151d2e3f4f606d8298826d604f3f2e1d0d0000000000000000000000000000000000000b1b29394556607483947f6a615044342616000000000000000000000000000000000000000000000000000000000000000f1f31414b607586917d675a49382715020000000000000000000000000000000014293f54697e94816c56412c1701000000000000000000000000000000000000000a192838485a667c918876614c3c2b1906000000000012273c51677c91846f59442f1a0000000000000000000000000000000000000000000000000000000000000000000002172c41576c81917b66513c261100000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a35200000000000000000000000000e1b29333d494e555b556060545a667b8e79644e3d2d19090000000000000000000000000000000f243a4f64798f81798875604b3d2c1a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2c38454b546064676968666158514c40352c1f1b2d3e4a4f5f524d41301d0a000000000000000010253b50657a90826c57422d192b3b4b5d697e938675604b4232211100000000000000000000000000000000000000000b1b28384556607382947f6b625144341c1308000000000000000000000000000000000000000000000000000000000001131e32455663798a8978635645311d120000000000000000000000000000000012273c51677c91836e59442e190000000000000000000000000000000000000000000a1a2b3c4c5e6e8396816c5a4935200d00000000000f24394f64798e86715c3a2a17040000000000000000000000000000000000000000000000000000000000000000000014293f54697e937e69543e291400000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a352000000000000000000000000e1e2b3a464c5b636b70747575736f697386826d5b4a3727150100000000000000000000000000000c22374c61778c836e83806b5b49382715020000000000000000000000000000000000010a1012100e0800000000000000040a0c161d1f1d1a140c0a040000000000000000000000000000000000000000030a0c13131313131313131312100a010000000000000000000000000000000d1d2c3c4956606a73797c7e7e7b766f665e4e493d3022364a5c6474675f4d39251000000000000000000e23384d63788d846f5a442f27374859657b8c8978635745322414030000000000000000000000000000000000000000000a1a2838455560738295806b62514430251808000000000000000000000000000000000000000000000000000000000003162838495b677d918574604b40301e0e0000000000000000000000000000000f24394f64798e86715c3a2917040000000000000000000000000000000000000000000d1d2f404d62788a8b78624d3b2b1805000000000c22374c61778c89745847331f0a0000000000000000000000000000000000000000000000000000000000000000000012273c51677c91816b56412c1601000000000000000000000000000020354a5f758a7d67523d2812000000000000000000000000000000000000000000000012283d52677d8a755f4a3520000000000000000000000a1a2b3c4858616d798086898a8a88847e777b8c79635544311d1000000000000000000000000000000b1f34475974898570788979635645311d150900000004000000000000000000000005131e252825231c1103000000000c171f212b3234333029211f170c0000000000000000000000000000000000000b171e2128282828282828282827251e13050000000000000000000000000005182a3b495a63747f878e918e8d8f8a847b6f635b4d41303a4f647a8a7d67523c271200000000000000000b20364b60758a87725c3a2a3144556277888d7c665a493928160600000000000000000000000000000000000000000000000a1a2737445560728295806c624a433626180800000000000000000000000000000000000000000000000000000000000a1a2c3c4d5f6c8196816c5e4c3c2b190900000000000000000000000000000c22374c61778c89745846331f0a0000000000000000000000000000000000000000000012203448596c8196826d5948342008000000000a1f33475874898c76614c37210c000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798f836e59442e1900000000000000000000000000000020354a5f758a7d67523d2813131313131313131313131313131313131313131313131313283d52677d8a755f4a352000000000000000000002162838485a6276828a8a847f7d7d7e81878b81838573604b3f2e1a0a0000000000000000000000000004182a3b5c728787726a7f8574604b443127191312151912100a01000000000000011323303a3d3a372e21110000000c1c29333640474948453f3633291c13050000000000000000000000000000000b1b2933363d3d3d3d3d3d3d3d3d3d39302313000000000000000000000000000b1f3448596378859489817b79787a7f868f8479675f4a433650657a907f69543f2a140000000000000000091d31455673888974594734414b607484957f6a5e4c3c2c1b0a000000000000000000000000000000000000000000000000000a192737445460728196816c6054433626180900000000000000000000000000000000000000000000000000000000000e1e30414b607485917c665a4837271501000000000000000000000000000a1f33475874898b76614c36210c0000000000000000000000000000000000000000000005192b3b4d62788a8b77624c3625130000000004182a3a5c71878e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000c22374c61778c86715b39291603000000000000000000000000000020354a5f758a7d67523d2828282828282828282828282828282828282828282828282828283d52677d8a755f4a3520000000000000000000091e3245566278868d81776f6a6867696c727a858995806a5d4b38271502000000000000000000000000001a2f455a6f848a74607385816d624b44372e28282a2f27251e130500000000000a1e30414d52504b3f2e1c08000417293a464c555c5e5d5a544c463a302314070000000000000000000000000003172939464c525252525252525252524d413018080000000000000000000000091d30404c6277879883766c6664636569707a858a7d6b6054434d63788d816c57422c170200000000000000021527385b70858c77614c3d4d5f6c81968372604a402f1e0e000000000000000000000000000000000000000000000000000000091927364354607281968172605443362619090000000000000000000000000000000000000000000000000000000000121d3145566278898978625544311d110000000000000000000000000004182a3a5c71878e79634e39240e00000000000000000000000000000000000000000000000d203448596e83947f6a5443301c07000000001a2f44596f84917c66513c2711000000000000000000000000000000000000000000000000000000000000000000000b1f344759748989735746321e0a000000000000000000000000000020354a5f758a7d67523d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d52677d8a755f4a35200000000000000000031628384b6074858c7d6c615955535253575d64737f8c8c7a645645311d0e00000000000000000000000002182d42576d828c7761627889806c60554b3f3d3d3f443d39302313010000000010253a4d5f67655d4b37230e000a1f334658616b7274726f6961584d41322514030000000000000000000000000a1e33465761686868686868686868675f4d36251300000000000000000000000f24394c5e6f849882726158514e4d50545d65727f8b8072604a4b60768b846f59442f1a000000000000000000182e43586d838e79644f4a5c677d9287766154433022120000000000000000000000000000000000000000000000000000000000091826364354606c80958172605444372719090000000000000000000000000000000000000000000000000000000004152738485a667c8d8573604b402f1d0d000000000000000000000000001a2f44596f84917b66513c2611000000000000000000000000000000000000000000000005192b3b51667b908773604a35200b00000002172c42576c81937e69543e29140000000000000000000000000000000000000000000000000000000000000000000004182a3b5c72878b76614b36210c000000000000000000000000000020354a5f758a7d6752525252525252525252525252525252525252525252525252525252525252677d8a755f4a35200000000000000000091e3245566a7f947f695e4c473b3e3d3e3f4b5460697d8c8674604b3c2c1906000000000000000000000000152a3f556a7f8e79645a657b8b8174655d5652525459524d41301e0a0000000012283d52677d7b65503a2510000c21364c617680878988857e76675f4f433222110000000000000000000000000c21364c61767d7d7d7d7d7d7d7d7d7d675443301c0700000000000000000006192b3c51667c9187746054473a39383a3f4b5460697b89806c615056738887715c3a2a17040000000000000001162b40566b80917c675158647a8a8a796358463625130400000000000000000000000000000000000000000000000000000000000008182536434a626b809582726055443727190a0000000000000000000000000000000000000000000000070c0e15171f212b3c4c5e6b8095806b5e4c3b2b1808000000000000000000000002172c42576c81937e69543e29140000000000000000000000000000000000000000000000000d20354b6074888f79644f3a240f00000000142a3f54697f94816c56412c1701000000000000000000000000000000000000000000000000000000000000000000001a2f445a6f848e78634e39230e000000000000000000000000000020354a5f758a7d6868686868686868686868686868686868686868686868686868686868686868687d8a755f4a352000000000000000000b21364b6075888774604b40342a2828292e36434b5f697e937f6a5a4935200b00000000000000000000000012283d52677d907b66515d657b8a867b716b68676a6e675f4d392510000000001f34495e7489826d58432e18000e23384d63788c858283878f897d69614f402f190900000000000000000000000c21374c61768c8b898989898989898774604a35200b0000000000000000000b2035485a7085917c675645362a2423252e36434a5d657a897f6a5f5c718689745847331f0a000000000000000013293e53687e937e6958617687927d675b4a3a2918080000000000000000000000000000000000000000000000000000000000000000081825304451626b7f94827360554437271a0a0000000000000000000000000000000000000000050f1a21232a2933363837404b6073848d7c665948362614010000000000000000000000142a3f54697f94816b56412c16010000000000000000000000000000000000000000000000081c3043546d8295806a553828160200000012273c52677c91836e59442e190d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0c0a04000000000000000000000000000002172d42576c82907b66513b2611000000000000000000000000000020354a5f758b817d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d818c755f4a3520000000000000000011263b50667b90806a5544311f18131214182630414a6072848a78624d39291703000000000000000000000010253a50657a8f7d68534c5d6579869086807d7d7f847d67523d2712000000001f34495e7489826d58432e18000c2035495a6375706d6e727a86927f695e4c37271501000000000000000000000a1f3347587489827474747474747472605443301c070000000000000000000d23384d62788d8874604b3828180f0e101825303f4b5c657b8c7c675a6e848c76614c37210c000000000000000011263b50667b90817171778496816c5f4d3d2d1c0c0000000000000000000000000000000000000000000000000000000000000000000008131c344450616a7f94827360554538271a0a0000000000000000000000000000000000000e19202d3639403a464c4d4c4b45556277888877625443301c11000000000000000000000012273c52677c91836e59442e190000000000000000000000000000000000000000000000000114263652677c9286715645321e090000000f243a4f64798f86715b3929222222222222222222222222222222222222211f170c0000000000000000000000000000152a3f556a7f937e68533e291300000000000000000000000000001f34495f748a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a745f49341f0000000000000001162b41566b80907b65503727150400000008141c30435463798c826c5746331e0a00000000000000000000000d22384d62788d7d68533f4c5b63737e878d9192918d806a55402b15000000001f34495e7489836d58432e180006192c3c4956605658595d6576858c7b665544311d08000000000000000000000417293a5c718686705e5e5e5e5e5e5d4a433625130000000000000000000014293e53697e93816c5443301a0a00000008131c2e3e4b5d687e8978626c818e79644f39240f00000000000000000e23394e63788e8985868b988273604b41301f0f000000000000000000000000000000000000000000000000000000000000000000000000001626334350616a7f9483736056453827190900000000000000000000000000000003111e2b353d4a4e555b5861636260565759657b8c8472604b3f2e1c0c000000000000000000000f243a4f64798f86715b392916030000000000000000000000000000000000000000000000000d22374c62778c8a75604b36210b0000000d22374c62778c897357463737373737373737373737373737373737373737332a1c0c0000000000000000000000000012273d52677c92806b56412b1601000000000000000000000000001d32465a6c747474747474747474747474747474747474747474747474747474747474747474747474746c5a46321d0000000000000004192e43596e838d77624d38220d000000000001132536495b6f848a76614c36210c00000000000000000000000b20354a60727772604a353d4a55606872787c7d7c786a61503c2813000000001f34495e7489836d58432e1800000e1e2c38454b45383f4b5863788b8674604b35200b0000000000000000000000192f44596e84887357454949494947353025180800000000000000000000182d42576d82917c675236261400000000000011202e3f4e606d8285736a7f917c66513c271100000000000000000b21364b60768b898182868b7f6d6055463a2b1d0f01000000000000000000000000000000000000000000000000000000000000000000000008162533434f61697f94837460564537271808000000000000000000000000000412212f3c484d5b636a717476787775716d66606a7f957f6a5d4b3a2a17040000000000000000000d22374c62778c89735746321e0a0000000000000000000000000000000000000000000000000b2034485973888f7a644f3a240f0000000b1f34485974898b76614c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c473a2a170400000000000000000000000010253a4f657a8f836e58432e190000000000000000000000000000172b3d4e5a5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5a4e3d2b1700000000000000051b30455a70858b76614b36210c00000000000008182c3d52677c917d68523d28130000000000000000000000071c3043546062605443302d37444b535b63676866625a504333210d000000001f34495e7489836d58432e180000000e1a28323632282e3a495a6c81917c66513c27110000000000000000000002172c41576c818b76604b3634343432201c130800000000000000000000001b30465b70858e79634e39240e00000000000002112131424c6176887e697c927e69543f29140000000000000000091e324557738889746d73819382736158483c2d201103000000000000000000000000000000000000000000000000000000000000000000000007152532434f61697f948374605544362513000000000000000000000000001222303f4b5a626d797f868a8b8d8c8a87827b746973848c7b655847331f130000000000000000000b1f34485974898b76614b36210c00000000000000000000000000000000000000000000000005182b3b596f84937e68533e291300000005182a3b5c72878e79636262626262626262626262626262626262626262615847331f0a0000000000000000000000000d22384d62778d86705b38281602000000000000000000000000000e20303d46494a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a49463d30200e00000000000000051a30455a6f858b76614c36210c000000000000000f22374c62778c826d58432d18000000000000000000000000132536434a4d4a433625192731353d494e5153514d483c33251504000000001f34495e7489836d58432e18000000000a161e211e161b2c3c4f657a8f836e583a29170400000000000000000000142a3f54697f8e78634e39231f1f1d0b07000000000000000000000000001d32485d72878b76614c36210c0000000000000003141f334658667c89777a8f816c56412c170100000000000000031628395b71868c7661606c7e8d8476625a4a3e2f221306000000000000000000000000000000000000000000000000000000000000000000000007152532434f616a7f948373605443301c1402000000000000000000000e1e30404c5d6578828b918983807e7d7e81858a887f7577888876614c42311e0e000000000000000005182a3b5c72878e79634e39240e00000000000000000000000000000000000000000000000000172c41566c8196816b56412c16000000001a2f455a6f84927d77777777777777777777777777777777777777777776614c37210c0000000000000000000000000b20354b60758a88735645321e09000000000000000000000000000212202b3234353535353535353535353535353535353535353535353535353535353535353535353534322b2012020000000000000003192e43586e838d78624d38230d000000000000000b1f344759728787725c3827150200000000000000000000000818253035383530251809151d202c35383c3d3c38352b1e150700000000001f34495e7489836d58432e18000000000002090b09020e20364b60758a88725846331f0a0000000000000000000012273c51677c907b66503b261109080000000000000000000000000000001e34495e73898a75604b35200b00000000000000000417293a4c5e6e8382788d846e59442f19000000000000000000192e43596e838e79644f61697d8b8678645c4c40312416020000000000000000000000000000000000000000000000000000000000000000000000071525324350616b80958272604a4232201000000000000000000006192b3c4c5e667b8994867c746e6b6968696c6f767d86877b7a8a836e604e3c2b190500000000000000001a2f455a6f84907b66513b261100000000000000000000000000000000000000000000000000142a3f54697f94836e59432e1900000002172d42576c8297928c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c87725d47321d080000000000000000000000081c30435472878a76604b36210b0000000000000000000000000000020e171d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1d170e02000000000000000001162c41566b81907a65503b25100000000000000005182a3b5b708589745645311d0900000000000000000000000008131c2022201c13080001080f1a21232728272320190e000000000000001f34495e7489836d58432e1800000000000000000000081d31445571868b76614c36210c000000000000000000000f243a4f64798f7e68533e291300000000000000000000000000000000001f34495f748989745443301c080000000000000000000b1b2f404e63798a798b86715c392917030000000000000001162c41566b81917c66514f5f677b89887a665e4e42331d15090000000000000000000000000000000000000000000000000000000000000000000000071525334350626d8196816c604f3f2e1c0c00000000000000000b2035495a667c8c8d7f736660555554535456576067737e888180927e685a483520120000000000000002172d42576c82937e69533e29140000000000000000000000000000000000000000000000000012273c52677c9186705b46311b00000000152a3f556a7f9486818282828282828282828282828282828282828282816c57412c17020000000000000000000000011426365a70858d78634e38230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667c917f6a553e2d1b0700000000000000192f44596e848b75604b36200b0000000000000000000000000000070b0d0b07000000000000060c0e1213110d0b0600000000000000001f34495e7489836d58432e180000000000000000000002152737596e848e79644e39240f000000000000000000000c22374c61778c806b56402b1601000000000000000000000000000000001e33495e73888a75604a35200b00000000000000000000122135495b6d82828889735746331e0a000000000000000014293e53697e937e6954404d5d6479878a7c686050443127190b000000000000000000000000000000000000000000000000000000000000000000000007152533444b607383937e695d4b3a2a1704000000000000081c2e3f4d6278898d7d6a60544b44373e3d3f39454b546068768483858a78624d402f190900000000000000152a3f556a7f94806b56412b160100000000000000000000000000000000000000000000000010253b50657a9087725d47321d0000000012273d52677c92836e6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c63513e291500000000000000000000000000182d42586d82907b65503b261000000000000000000000000000000000000000000000000000000000000002090b0b080200000000000000000000000000000000000000000000000000000000000000000c21364c61768a85705c4a3622120100000000000417293a5a6f858a75604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000172c41566c81917b66513c2611000000000000000000000a1f3447597489836e58432e1900000000000000000000000000000000001d32485d72878b76614b36210c00000000000000000000061a2c3d4d627889888b76614c36210c000000000000000011263c51667b91816c56413f4b5b6377858c7e6b624b4437291b0e000000000000000000000000000000000000000000000000000000000000000000000007151d3144556175868b7b645847331f110000000000000e23374b5d708495806b5f4b43363127292829283236434b58617482868b846f5e4c3726140100000000000012273d52677c92836e59432e19000000000000000000000000000000000000000000000000000f253a4f647a8f88735d48331e0000000010253a4f657a8f86715c5757575757575757575757575757575757575757514534220e00000000000000000000000000152b40556a80937d68533e281300000000000000000000000000000000000000000000000000000000000a151d20201d1509000000000000000000000000000000000000000000000000000000000000000a1f3346586e838e79644e40301f0f02000000000a1f334758718688735443301c12100a01000000000000000000000000070d0f141716130e0c0600000000000000000000000000000000001f34495e7489836d58432e18000000000000000000000014293f54697e937e69543e29140000000000000000000004182a3a5c718786705b38281603000000000000000000000000000000001b31465b70868d77624d38220d00000000000000000000000f2035495a6e83988e79634e39240e00000000000000000e24394e63798e846e59442e3d495961758392806d6055463a2b1e100200000000000000000000000000000000000000000000000000000000000000000000011426374657647a8b8876614c3f2e1c0800000000021527374f657a8f8773604b4130261d15141314161e26303a47566072838c917c665544311d0800000000000010253a4f657a8f86715b392816030000000000000000000000000000000000000000000000000f24394e64798e89735e49341e000000000d22374d62778c89735746424242424242424242424242424242424242413e342616050000000000000000000000000013283d53687d92806b55402b16000000000000000000000000000000000000000000000000000000000a1a28323636312719090000000000000000000000000000000000000000000000000000000000000417293a4f647a8f836e5e4c3d2d1d150c0b0b0c1727374c61768a846f5a36252d28251e130500000000000000000005101b22242a2c2b2923211a0f0a0000000000000000000000000000001f34495e7489836d58432e18000000000000000000000011273c51667c91816c56412c1701000000000000000000001a2f445a6f8488735645321e0900000000000000000000000000000000182e43586d83907a65503b2510000000000000000000000006192b3c50657a8f907b66513b261100000000000000000c21364c61768b86715c39292c3b47576072819482736158483c2d20110400000000000000000000000000000000000000000000000000000000000000000000091929394a5c697e93826d5d4b37231100000000081d3144556e83937d685544311c1408010000000308141c2a3845546176879c8673604b35200e0000000000000d22374d62778c88735745321e090000000000000000000000000000000000000000000000000e23394e63788e89745f4a341f000000000b20354b60758a8b76614b362d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2c29221608000000000000000000000000000010253b50657a90836d58432e1800000000000000000000000000000000000000000000000000000002152838454b4b44372715020000000000000000000000000000000000000000000000000000000000000b22364a5c6e83917c665b4a3d32282120202229334455687d927f69544443433d3a30231301000000000000000d18202d363a3f41403e39352c241d1204000000000000000000000000001f34495e7489836d58432e1800000000000000000000000f24394f64798e836e59442e190000000000000000000002172d42576c828b76604b36210b00000000000000000000000000000000152a40556a7f937d68533e28130000000000000000000000000e23374b5d7186937e69533e291400000000000000000a1e334657748989745746331e2a394554606c7f8d8476625a4a3e2f221306000000000000000000000000000000000000000000000000000000000000000000000b1b2d3d4b6073868f7b65503f2f1c080000000b20364b6075898a75604b3726140100000000000000010c1a27364658647a8d917c67513c2b190600000000000b20354b60758a8b76604b36210b0000000000000000000000000000000000000000000000000f24394e64798e89735e49341e00000000081c30435472878e79634e39241717171717171717171717171717171717150e050000000000000000000000000000000e23384d63788d85705b372715020000000000000000000000000000000000000000000000000000091d32455660605544311d08000000000000000000000000000000000000000000000000000000000000071b2e3e4c6176878879635b4b45383735353739464c6074868a76615a595858524d41301e0a0000000000000d1d2b343e4a4f545656534e493d39301f170c0000000000000000000000001f34495e7489836d58432e1800000000000000000000000c21374c61768c86715c3929170300000000000000000000152a3f546a7f8d78634e38230e0000000000000000000000000000000011273c51667c91826c573a2917040000000000000000000000081c2e3f54697e93806b56412b160100000000000000031729395c71868b76614c36211b2836434b61697d8b8678645c4c4031241602000000000000000000000000000000000000000000000000000000000000000000000f1d314455657a8f86715d4c38230d00000010253a4f657a8f85705645321909000000000000000000000a18293a4a5c6e839985705a4835200b0000000000081c30435472878e78634e39230e0000000000000000000000000000000000000000000000000f253a4f647a8f88735d48331e00000000011426365a6f85907b66513b2611020202020202020202020202020202020000000000000000000000000000000000000b20364b60758a88725544311d0800000000000000000000000000000000000000000000000000000b20364b607574604b36200b00000000000000000000000000000000000000000000000000000000000000101f334758647a8988796a6056504c4a4b4c5057616d81947f71706f6e6e6d675f4d3a251000000000000a1a2b3b484d5c64696c6b68635b514d40332a1c0d00000000000000000000001f34495e7489836d58432e1800000000000000000000000a1f334758748989735746331e0a0000000000000000000012273d52677c907b66503b2611000000000000000000000000000000000c21374c61778a86715846331f0a00000000000000000000000011263b50667b90836e59432e19000000000000000000192f44596e848e79634e39240e182630434f5f677b89887a665e4e42331d150a000000000000000000000000000000000400000000000000000000000000000000011426374b5d6f84907b65503b2b1905000013293e53687e93806b563828160000000000000000000000000b1b2d3e4e63798c8d78624d38230d0000000000011426365a6f85907b66513b261100000000000000000000000000000000000000000000000011273c51667c9186715c47311c0000000000182d42586d82937e68533e291300000000000000000000000000000000000000000000000000000000000000000000091d31455673888a75604b36200b00000000000000000000000000000000000000000000000000081e33485d7388836e59442f190000000000000000000000000000000000000000000000000000000000000004172a3a4a5c6479888b80756b6561606061666c76829799868685848483827d67523d28120000000003162838485962707a7f81807e7871675f4c473a2b1d0d000000000000000000001f34495e7489836d58432e18000000000000000000000004172a3a5c71878b76614b36210c000000000000000000000f253a4f647a8f7d68533e2813000000000000000000000000000000000a1f33475871868a76614c36210c0000000000000000000000000e23384e63788d86705b392816030000000000000001172c41566c81917b66513c261108141c32414d5d6579878a7c6860504431271a0b000000000000000000000000060c0e19110f09000000000000000000000000000009192e3f51667b90846f594834200b0000152a40556a7f947e69543f2914000000000000000000000000001021364a5b6f84937e69543e2914000000000000182d42586d82937e68533e291300000000000000000000000000000000000000000000000014293e53697e93846f5a442f1a0000000000152a40556a7f95806b56412b1601000000000000000000000000000000000000000000000000000000000000000000021527385b70858d78624d38230d00000000000000000000000000000000000000000000000000061b30455b708586715c39291703000000000000000000000000000000000000000000000000000000000000000c1c2d3e4a5b6376828b88807a777575777b81898f858484848484848484826d58422d1800000000091e3245566277848f928c8b8d8e867c6f6158483b2b18050000000000000000001f34495e7489836d58432e180000000000000000000000001a2f44596f848e79634e39240e000000000000000000000d22374d62778c806b56402b160100000000000000000000000000000004172a3a566b80927d67523a2a180400000000000000000000000b20364b60758a88735745321e09000000000000000014293f54697e937e69533e291400011523303f4b5b6377858c7e6b624b4538291b0b000000000000000000010f1a21232e26231c1103000000000000000000000000001020354a6073878b77624d37220d0000172c41566c81927d68523d281300000000000000000000000000071a2d3d53687e93836e58432e19000000000000152a40556a7f95806b56412b16010000000000000000000000000000000000000000000002152737566c8196816c57422c17000000000013283d52687d92836e58432e190000000000000000000000000000000000000000000000000000000000000000000000182d43586d828b7b65503a25100000000000000000000000000000000000000000000000000003182e43586d8389745746331e0a000000000000000000000000000000000000000000000000000000000000000010202d3d4a58616d7a83898f8c8a8a8c908a847a706f6f6f6f6f6f6f6f6d63523f2a16000000000b21364b6075869a877d7776787d8591847662594834200b0000000000000000001f34495e7489836d58432e18000000000000000000000002172c42576c81907b66513b2611000000000000000000000b20354a60758a836e58432e1900000000000000000000000000000000000f24394f64798e836e5847331f090000000000000000000000091d32455673888b76604b36210b000000000000000012273c51677c91816b56412c1601000513212e3d495962758392806d6056463929170300000000000000000f1f2c3639433b382f221100000000000000000000000000071c3043546d82937e68533e29130000172c41566c81927d67523d281200000000000000000000000000000f23384e63788d87725c37271501000000000013283d52687d92836e58432e190000000000000000000000000000000000000000000000081d3144557085937d68533e2813000000000010253a50657a8f85705b3828150200000000000000000000000000000000000000000000000000000000000000000001162b3f53646d74655d4b37230e0000000000000000000000000000000000000000000000000000162b40556b808b76614c36210c000000000000000000000000000000000000000000000000000000000000000002101f2d3a474c5c646e757a7d7f7f7e7b766f655d595959595959595958524535230f0000000013293e53687e9386766762606268707d898677624c37220d0000000000000000001f34495e7489836d58432e18000000000000000000000000142a3f54697f937e69533e291400000000000000000000071c304354728785705b38281602000000000000000000000000000000000d22364a5c72878a77614c3727150200000000000000000000021528385b70858d78634e38230e00000000000000000f24394f64798e836e59432e1900000003111f2c3b4857617381948274615746331e0a00000000000000061a2c3d494e59504c402f1c090000000000000000000000000013253652677c91836d58432e180300162b40556b80937e68533e291300000000000000000000000000000b20354b60758a89745544311d08000000000010253a50657a8f86705b38281603000000000000000000000000000000000000000000000b20364b6075898e79644f39240f00000000000d23384d62788d88735645321d09000000000000000000000000000000000000000000000000000000000000000000001023354653585f504b3f2e1c08000000000000000000000000000000000000000000000000000013283e53687d8e79634e39240e000000000000000000000000000000000000000000000000000000000000000000010f1c2a333e4b4f566065686a6a68656158504b3f44444444444444423f35271706000000051a2f455a6f84917c67584c4b4d525f67788478624d38230d0000000000000000001f34495e7489836d58432e1800000000000000000000000012273c52677c91816b56412c1601000000000000000000001325365a6f8588735645321e0900000000000000000000000000000000071b2d3e54697e947f6a5544311d0a0000000000000000000000182e43586d83907b66503b261100000000000000000c22374c61778c86715b39281603000000010f1d2a394655606c7f888476614b36210c000000000000000c2136495b636e665e4c382310000000000000000000000000000e23384d63788d86715c47311c000013283d53687d92806b56402b160000000000000000000000000000081c30435472878a75604b35200b00000000000d23384d62788d88735645321e090000000000000000000000000000000000000000000215273850657a908874604b35200b00000000000b20354b60758a8a75604b36200b00000000000000000000000000000000000000000000000000000000000000000000061828353f434a3a372e211100000000000000000000000000000000000000000000000000000010263b50657b907b66513c261100000000000000000000000000000000000000000000000000000000000000000000000c181f2e3738454b4f53545453504c473a372e2f2f2f2f2f2f2f2d2a23170900000000091e33485e73888a76614c3a3638414d5a626f625a4835200b0000000000000000001f34495e7489836d58432e180000000000000000000000000f243a4f64798f836e59432e190000000000000000000000182d42576d828a76604b36210b00000000000000000000000000000000001021364b6176898774604b3928160300000000000000000000162b40556b80937d68533e281300000000000000000a1f334758748988735745321e0900000000000d1b2837444b6169736f615746331e0a000000000000000e23394e6379837c66503e2d1b070000000000000000000000000c21364c61768b89745e492614010010253a4f657a8f836e593e2d1b0700000000000000000000000000011426365c71878b76604b36210b00000000000b20354b60758a8b76604b36210b000000000000000000000000000000000000000000091d3145566c8196836d5443301c080000000000081d31445572888d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000918232b2d3525231c11030000000000000000000000000000000000000000000000000000000e23384e63788d7e69533e291400000000000000000000000000000000000000000000000000000000000000000000000004101b222832363a3d3f3f3e3b37332a231c1a1a1a1a1a1a1a18160f0600000000000a1f354a5f748a89745746332122303c494d5a4d483c2b19060000000000000000001f34495e7489836d58432e180000000000000000000000000d22374c62778c86715b3928160300000000000000000000152a40556a7f8d78634e38230e00000000000000000000000000000000000a1e3346576b80937e685745321e110000000000000000000013283e53687d93806b56402b16010000000000000004182a3a5c71878b76604b36210b0000000000000b192631434f545e5a4b4639291703000000000000000c21364b61768a87725c4a36220d0000000000000000000000000a1f334658748a8a755544311d08000b20364b60758988735c4a36220d0000000000000000000000000005192b3b5d73888a745745321e090000000000081d31445572888d78634e38230e0000000000000000000000000000000000000000021527374b607588907b6650362614010000000000011527375b7085907b65503b2610000000000000000000000000000000000000000000000000000000000000000000000000061016181f100e0800000000000000000000000000000000000000000000000000000000000b21364b60768a816b56412c160100000000000000000000000000000000000000000000000000000000000000000000000000070a161e2125282a2a2926211f170c08000404040404040301000000000000000a1f354a5f748a89735443301c131e2b35384438352b1e0e000000000000000000001f34495e7489836d58432e180000000000000000000000000b1f344759748988735746321e090000000000000000000012283d52677d907b65503b26100000000000000000000000000000000000031729394c6176888875604b3f2e1d0d00000000000000000010263b50657b90836d58432e180000000000000000001a2f445a6f848e78634e39230e0000000000000009141d323b3f48443633291b0b00000000000000000a1e3246576f848f7a644f3b2b19050000000000000000000000091e32455674898a75604b35200b00091d3245566f848e79644f3b2b18050000000000000000000000000b20344859748988735d392816030000000000011527375b7085907b66503b261100000000000000000000000000000000000000000c1d314455687d928773604b35200b00000000000000182d43586d82927d68533d2813000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e0c0a0300000000000000000000000000000000000000000000000000000000091e3245567388836e59432e190000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1013151513100c0a04000000000000000000000000000000000000081e33485d73888a75604b35200b0e1920232f2320190e00000000000000000000001f34495e7489836d58432e1800000000000000000000000005182a3b5c72878b76614b36210c0000000000000000000010253a50657a8f7d68533e28130000000000000000000000000000000000000b1f334658697e93806b5d4b3b2b1b0d00000000000000000e23384d63788d85705b382715020000000000000002172c42576c81907b66503b26110000000000000000011420272a332f211e170b0000000000000000000316293952677d92816c594834201100000000000000000000000b21364b60768b89735544311d08000215283852677c91816c59483420100000000000000000000000000d22374d62778c85705b46311b00000000000000182d43586d82937d68533e2813000000000000000000000000000000000000000c1d2d3e4b607487937e695443301c0800000000000000162b40556b8095806a55402b150000000000000000000000000000000000000000000000000000000000000000000000000008141c2023211e170b000000000000000000000000000000000000000000000000000000021628385b708686715b39281603000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061b30465b70858c77624c37220d00060b0d1a0d0b060000000000000000000000001f34495e7489836d58432e18000000000000000000000000001a2f455a6f848e78634e39230e000000000000000000000d22384d62778d806b56402b160100000000000000000000000000000000000417293a4b6073858c7b655948392b1d100500000000010d1b2b3c4b60768b88735645311d090000000000000000152a3f546a7f937e68533e2913000000000000000000030c12141e1a0c0a0300000000000000000000000b20354b6074878a78624d402f1d0d000000000000000000000d23384d62788d87725c3726140100000b20354b6073868a77624c3e2e1d0d0000000000000000000005182a3b52677d92806b56412b1601000000000000162b40556b8095806b56402b160100000000000000000000000000000000020f1c2a3b4a5c6a7f948775604b362614010000000000000013283d53687d92826d58432d180000000000000000000000000000000000000000000000000000000000000000000000000c18263035383633291b12040000000000000000000000000000000000000000000000000000192e43586e8388735746321e0900000000000000000000000000000000000000000913191c2020202020202020202020202020201f1e1c1915100b090200000000000000000000000000000000000000000003192e43586e838f79644f3a240f00000000050000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000002172d42576c82907b66503b2611000000000000000000000b20354b60758a836d58432e18000000000000000000000000000000000000000c1d31445562788987776257483b2e20190f0d0d0e151d2b39485a697e938a75604b36200b000000000000000012273c52677c91806b56402b160100000000000000000000000009050000000000000000000000000000081d314455687d93826d5e4c3b2b1d0f0100000000000000061a2c3d52687d92836e59442e19000000081d314455667c91816c5c4b3b2a1c0f0300000000000000010f1f3448596d82907b66513b26110000000000000013283d53687d92836e58432e19000000000000000000000000000000040a151d2d3a4759647a8b917c665645321808000000000000000010263b50657b9085705a372614010b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b000000000000000000000000000c1c2936434b4e4b46392f22120000000000000000000000000000000003030303030303030303162b41566b808b76614b36210c030303030303030303030300000000000000000d1b262e313535353535353535353535353535353433312e2a25201d150a060000000000000000000000000000000000000001162c41566b81917c67523c271200000000000000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000152a3f556a7f937e68533e291300000000000000000000081d314455728885705b3828150200000000000000000000000000000000000001142637495a677d8d867562594b3f342b2422222327313b4857627889898d78634d38230e00000000000000000f253a4f647a8f836e58432e190000000000000000000000000000000000000000000000000000000000011527374b6074868d7b6659483b2c1c140803000000020a152135495b6e83927d68533d2813000000011426374d5e70858b7a6459483a2d1e160a040000000005101f2e3f4c62778a8875604b36210b0000000000000010263b50657b9085705b3828150209090909090909090900050b0d10171f27313d4a5961778797826d5e4c3828160000000000000000000e23384d63788d87725544311d202020202020202020202020202020202020202020200d0b050000000000000000000417293a4754606361574c402f1909000000000000000000000000080d0f1818181818181818181818293e53687e8e78634e3923181818181818181818181818110f0900000000091b2b3842464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a484643403b363127211a0f0600000000000000000000000000000000000014293e54697e937f6a553f2a1500000000000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000012273d52677c92806b56412b1601000000000000000000011426375a708588735645321d090000000000000000000000000000000000000009192b3c4d5f687e938577655d4d483b3a38373937444b596275858382907a65503b251000000000000000000d22374c62778c85705b382815020000000000000000000000000000000000000000000000000000000000091d31445563798a88776259493d30261e16141213151d2832444e63798b8a77614c37220c00000000091930404d627888887762584a3d32281f181312111319202e3d4b5d6b80957f6a5645321e09000000000000000e23384d63788d88735645321d1e1e1e1e1e1e1e1e1e1e1e181f2225293338454b5b6377869b8574604b402f1a0a0000000000000000000b20364b60758a8a75604b3535353535353535353535353535353535353535353535352220190e00000000000000000a1f33475861737876665e4c3727150200000000000000000002101b22252d2d2d2d2d2d2d2d2d2d2d2d3b51667b907b66503b2d2d2d2d2d2d2d2d2d2d2d2d2d26241d1204000013263849565b60606060606060606060606060605f5f5e5c5955504b4538352c20190e000000000000000000000000000000000011263c51667b91826d57422d1800000000000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000010253a4f657a8f836e58432e190000000000000000000000182d43586d828a75604b36200b00000000000000000000000000000000000000000e1e30404e60697e8c887b6d6259534f4d4c4e515560687785877780927d68523d281300000000000000000b20354a60758a88735645321d09000000000000000000000000000000000000000000000000000000000002152737495b687e928677635b4b43363228292728273138454b626f8396816b5947341f0b0000000000122035485a657b8c8576635b4b4539332a282726282b343f4b5b657b8c8977614c38281602000000000000000b20364b60758a8a75604b363434343434343434343434342a34373a3a464c56606a798799857661564532221200000000000000000000091d31455673888d77624d4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a352b1e0e000000000000000c21374c6176858d897c665544311d0800000000000000000010202e373a424242424242424242424242424e63788e7e685342424242424242424242424242423b382f22120000192e425667717575757575757575757575757575757473716e6a6560564e493d352c1e13010000000000000000000000000000000f24394e64798e846f5a36251300000000000000000000000000000000000000001f34495e7489836d58432e18000000000000000000000000000d22374d62778c86705b3828160200000000000000000000152b40556a808d78634e38230e000000000000000000000000000000000000000000122231424f60697b898d82786e6864626263666c747d898779687e93806a55402b150000000000000000071c30435472878a75604b36200b00000000000000000000000000000000000000000000000000000000000009192c3d4e60697f9386796860544b46393e3d3e37444b56606c80958876614c3b2a1804000000000005192b3c4b5d677d8c87796a60574c473a3e3c3c3d3b484d5d657988917c665847331a0a0000000000000000091d31455673888d78634e494949494949494949494949493b484c4f54586169747f8b9483766158473828150400000000000000000000021527385b70858f7a65606060606060606060606060606060606060606060606060605e483c2b1905000000000001162b40566b8095a39e8974604b36200b0000000000000000081b2e3e4b4f585858585858585858585858585861768b806b585858585858585858585858585858514c402f1d09001c31465b71858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a898886837f7a756c635b4d493c311c140800000000000000000000000000000c21374c61768c87725443301c07000000000000000000000000000000000000001f34495e7489836d58432e18000000000000000000000000000b20354b60758a88735645321e090000000000000000000013283d53687d907b65503b261000000000000000000000000000000000000000000004142432424f5d6577828b8b847d797777787c81888f837763667b90826d58422d180000000000000000001325365a6f848d78634d38230e000000000000000000000000000000000000000000000000000000000000000f1f31424f61697e8c8a7e7368615756545253555560677481958a7a645846331d0c000000000000000e1e2e3f4d5f677c898a7f7569615856535151535559626d7b8994806b5e4c3a2a18000000000000000000021527385b7085907b655e5e5e5e5e5e5e5e5e5e5e5e5e5e5f596265696f767e87948a7f726158473a291a0a000000000000000000000000182e43586d83927d7575757575757575757575757575757575757575757575757575705a4835200b000000000004192e43596e8398aea38c77624c37220d00000000000000000d22374b5c646d6d6d6d6d6d6d6d6d6d6d6d6d6d6d7389836e6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d665e4c38240f00192e44596e839985838383838383838383838383838486878a8f908981796f625a4e4230261808000000000000000000000000000a1f33475874898a75604a35200b000000000000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000081c30435472878b76604b36210b0000000000000000000010253b50657a907d68533e281300000000000000000000000000000000000000000000061424323f4c59626d7a82898f8f8d8c8e8f89837a6e615963788e85705a372614010000000000000000182d42576d82907b65503b26100000000000000000000000000000000000000000000000000000000000000001132432424f60697a8693877d76706b6967686a6e757d8696887b655c4a3a2917000000000000000000112130414d5e66788491887e77706b686766686a7078828d907f6b625140301c0c00000000000000000000182e43586d83937e7373737373737373737373737373737475777a7e848a938a82786a6054463a291c0c00000000000000000000000001162b40566b8095928a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a78624d38220d00000000000013283d53687d929c998671594834200b00000000000000000f253a4f647a828282828282828282828282828282828988828282828282828282828282828282827c66513b261100162c41566b81947e6e6e6e6e6e6e6e6e6e6e6e6e6e6f7172767a7f858e8b847868604b43362614010000000000000000000000000417293a5c71868c77624c37220d000000000000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000011426365a6f858d78634e38230e000000000000000000000e23384d63788d806b55402b1600000000000000000000000000000000000000000000000614212f3b484d5c646d757a7d7f7f7d7a766e655d4c4b60768b87725544311d080000000000000000152a3f556a7f927d68533d2813000000000000000000000000000000000000000000000000000000000000000006142432424f5c64757f88928a85807e7c7d7f8489928e8377655d4b3e2d1c0c00000000000000000003132330404c5a626f7c868f8a85817d7c7b7d80858b92867b6a6151443322120000000000000000000001162b40566b80958a888989898989898989898989898989898a8c8f918c867f786d625a4b4336291c0c000000000000000000000000000011263c51667c8484848484848484848484848484848484848484848484848484848379644e39240f0000000000000b20354a60727f878378624d3b2b180500000000000000000f253a4f647b878888888888888888888888888888878a8d878888888888888888888888888888877f6a553f2a150014293e54697e93816c5858585858585858585858595a5b56606569707a82908a7e6d605443301c13000000000000000000000000001a2f44596f848f79644f3a240f000000000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000182d42586d82907b65503b2610000000000000000000000b20364b60758a836d58432e1800000000000000000000000000000000000000000000000003111d2b343e4a4f566065686a6a686561574f4b3f455673888a75604b35200b000000000000000012283d52677d92806a55402b15000000000000000000000000000000000000000000000000000000000000000000061424323e4a576069747d82888d8e90908f8c8781796e62594b3f2e201000000000000000000000000513222f3c484d5e66717a81868a8e9091908e8a857d74665e504333261604000000000000000000000011263c51667c84848484848484848484848484848484848483817f7c77716a625a4d493c3026180c0000000000000000000000000000000f24384c5e666f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f645c4a36210d000000000000071c304354606a726e625a48351d0d0000000000000000000d22374b5d6472727272727272727272727272727272808d747272727272727272727272727272726a61503c28130011263c51667b91846e5944434343434343434343434538454b4f545c646d7b88928172604b41311c0c000000000000000000000002172c42576c81917c67523c2712000000000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000152a40556a7f937d68533e281300000000000000000000091d314556738885705b38271502000000000000000000000000000000000000000000000000000d18202d3638454b4f53545453504b4639372e385b70868d77624d38220d000000000000000010253a50657a8f826d58432d18030000000000000000000000000000000000000000000000000000000000000000000614202d39454b5660676d7477797b7b7977726c635b4c483b2e21110200000000000000000000000004121e2b35404c515c646c7176797b7c7b7976706860554c40332516080000000000000000000000000f24384c5e666f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6e6c69666159554d483c352c1c140800000000000000000000000000000000091d2f404c515a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4e4a3d2d1a0700000000000000132536434a555c594d483c2b1900000000000000000000081b2e3f4b4f5d5d5d5d5d5d5d5d5d5d5d5d5d5d5d697e8d78635d5d5d5d5d5d5d5d5d5d5d5d5d5d55504333200d000f24394e64798e86715c3a292e2e2e2e2e2e2e2e2e2f2832363a3e4a4f5e66768697816c5f4e3a2a18040000000000000000000000152a3f546a7f947f69543f2a14000000000000000000000000000000000000001f34495e7489836d58432e18000000000000000000000000000013283d52687d92806b56402b1601000000000000000000021527385b708588735645311d09000000000000000000000000000000000000000000000000000005101b222731363a3d3f3f3e3a363228232e43586e838f7a654f3a251000000000000000000d22384d62778d85705a45301b050000000000000000000000000000000000000000000000000000000000000000000002101b283238454b52546062646666646259574e4a3d342b1d11030000000000000000000000000000000e192030383e4a4f56576164656666646056524b44372f22150700000000000000000000000000091d2f404c515a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a59585754514c473a38352b20190e0100000000000000000000000000000000000012222f383c4444444444444444444444444444444444444444444444444444444439362d1f0f000000000000000008182530353f474438352b1e0e000000000000000000000010202e373a484848484848484848484848484851667b907b6550484848484848484848484848483f3c33251503000c21364c61768b89745846331f19191919191919191a161e21252d36404c58627787927d685947341f0a000000000000000000000012273c52677c91816c57412c17020000000000000000000000000000000000001f34495e7489836d58432e18000000000000000000000000000010253a50657a8f836d58432e180000000000000000000000182e43586d838a75604b36200b00000000000000000000000000000000000000000000000000000000070a151d2025282a2a2825211e16162b41566b80927d67523d281200000000000000000b20354b60748c87725d48331d080000000000000000000000000000000000000000000000000000000000000000000000000a161e27313636434a4d4f50504f4c483b39362d20180d00000000000000000000000000000000000005121d242e363a39464b4e5051504e4b453835312719110300000000000000000000000000000012222f383c44444444444444444444444444444444444443423f3c37342a2220190e06000000000000000000000000000000000000000004121d24262f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f24211a0f0100000000000000000008131c202a322f2220190e00000000000000000000000002101b222533333333333333333333333333394e63798e7d68533e3333333333333333333333332a2820150700000a1f33465874898b76614c36210c030303030303040003090b101b222f3a4859647a8c8977614c38281603000000000000000000000f253a4f647a8f846e59442f19000000000000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000000d23384d62788d85705b3827150200000000000000000001162b40566b808d78634d38230e00000000000000000000000000000000000000000000000000000000000002090b1013151513100c090313293e53687e937f6a553f2a150000000000000000081d314455647a7a644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000030a151d2025303538393b3b3a37342a24211a0f0500000000000000000000000000000000000000000009101b2224293236393b3c3b39363228201d1509000000000000000000000000000000000004121d24262f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2e2c2a26221f180d0b05000000000000000000000000000000000000000000000000090f111a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0f0d0700000000000000000000000000070b151d190d0b05000000000000000000000000000000080d0f1d1d1d1d1d1d1d1d1d1d1d1d21364c61768b806b55402b1d1d1d1d1d1d1d1d1d1d1d15130d030000000417293a5c71868e79644e39240f00000000000000000000000007111c2b3b4a5c6d8296806b5645321e09000000000000000000000d22374d62778c86715c3a2917040000000000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000000b20354b60758a88735645311d090000000000000000000013283e53687d907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90826d57422d180000000000000000011426374a5c64645c4a36220d0000000000000000000000000000000000000000000000000000000000000000000000000000000002090b131c202224262624221f180e0c0700000000000000000000000000000000000000000000000000070d0f161e212426272624211e160b08010000000000000000000000000000000000000000090f111a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a191714110c0a040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008080808080808080808080a1e3346577489836d58432e18000808080808080808080000000000000000192f44596e84917b66513c261100000000000000000000000000000d1d2d3e4d62788b8975604b36210b000000000000000000000b20354a60758a89745846331f0a0000000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000081d31445572888a75604b36200b0000000000000000000011263b50667b907d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788e846f5a36251300000000000000000009192d3e4a4f4f4a3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0d0f11110f0d0b0500000000000000000000000000000000000000000000000000000000000000030a0c0f1011110f0b0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191c200f0d07000000000000000000000000000000050b0d15160f0d0800000000000000000000000000000000000000000000000000000000000000000000000000031729395c718685705b382715020000000000000000000000000000000002172c41576c81937e69543e2914000000000000000000000000000000102035485a6f84917c67513c271200000000000000000000071c30435472878b76614c36210c0000000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000011527375b70858d78634d38230e000000000000000000000e23384e63788d806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b87725443301c0700000000000000000010202d36393a362d201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040d1416200e0c07000000000000000000000000000000000d1b262e313524221b10020000000000000000000000000d1820222a2b25221b1002000000000000000000000000000000000000000000000000000000000000000000000000192f44596e8488735645311d09000000000000000000000000000000000014293f54697e94816b56412c1601000000000000000000000000000005192b3c54697e93816c57422c1700000000000000000000001325365a6f858e79634e39240e0000000000000000000000000000000000001f34495e7489836d58432e18000000000000000000000000000000182d43586d82907a65503b2510000000000000000000000b21364b60768b836d58432e18000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455773888a75604a35200b00000000000000000002101b222424221b100200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f131517171613100b09020000000000000000000000000000000000000000060c0e1f1f12100a010000000000000000000000000000000000000000000000000000000000070b1a2015130d0400000000000000000000000000000000000000000000000000000000000000081621282b3523211a0f0100000000000000000000000000091b2b3842464a3a372e201000000000000000000000000d1d2b34373f403a372e2013050000000000000000000000000000000000000000000000000000000000000000000001172c41566c818a75604b36200b000000000000000000000000000000000012273c51677c91836e59442e19000000000000000000000000000000000f253a4f647a8f86715b3726140100000000000000000000182d42586d82917b66513c26110000000000000000000000000000000000001f34495e7489836d58432e18000000000000000000000000000000162b40556b80927d68533d281300000000000000000000091e324556738885705b382715020000000000000000000000000000000000000000000000000000000000000000000000000000000000031628395b70868c77624c37220d0000000000000000000000070d0f0f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608141c2024282a2c2c2b2825201d150b0902000000000000000000000000000000000e192023343428251e1305000000000000000000000000000000000000000000000000000008131c202f352b282115070000000000000000000000000000000000000000000000000000000000041626333d404a39362d1f0f0000000000000000000000000013263849565b604f4b3e2e1b070000000000000000000d1d2b3b484c54564f4b3f312313010000000000000000000000000000000000000000000000000000000000000000000014293e54697e8d78634d38230e00000000000000000000000000000000000f24394f64798e86715c392917030000000000000000000000000000000d22374c62778c89745544311d0800000000000000000000152a40556a7f937e69533e29140000000000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000000013283d53687d92806b55402b1600000000000000000000021628385b708688735645311d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e838f7a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020e19202630353a3e3f4141403d3a363228211e160a02000000000000000000000000000e1e2c3538494a3d39302313020000000000000000000000000000000000000000000000000818253035454a403c33251504000000000000000000000000000000000000000000000000000000000d2133445055605e4a3d2d1a07000000000000000000000000192e4256677175645c4b37220d000000000000000005192b3b4859626a6b645d4e41311e0b0000000000000000000000000000000000000000000000000000000000000000000011273c51667c907a65503b251000000000000000000000000000000000000c22374c61778c89735746331e0a0000000000000000000000000000000b20354b60758a8a75604b35200b0000000000000000000013283d52687d92806b56412b160a0a0a0a0a0a0000000000000000000000001f34495e7489836d58432e1800000000000000000000000000000010263b50657b90826d58432d180000000000000000000000192e43596e838a75604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b41566b80917c67523c2712000000000002090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0801000000000000000000000000000000000000000000000000000000000a151d2c3536434b4f5355565655534f4b45383632281d1509000000000000000000000006192c3c494d5e5f524d41302010000000000000000000000000000000000000000000000000132536434a5a6055504433210d0000000000000000000000000000000000000000000000000000000014283d50626b75705b4a36210c0000000000000000000000001c31465b71858a7a644f3a240f00000000000000000b2034485962777f807a68604e3a2508000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e7d68533d281300000000000000000000000000000000000a1f33475874898b76614b36210c0000000000000000000000000000000a1f334658758a8b76614b36210c00000000000000030d1315253b50657a90836e59432e1f1f1f1f1f1f1f14120c0300000000000000001f34495e7489836d58432e180000000000000000000000000000000e23384d63788d85705b3727150100000000000000000001162b41566b808d78634d38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e53697e937f69543f2a14000000000a161e212121212121212121212121212121212121212121212121212121212121201d140900000000000000000000000000000000000000000000000000000c1a28323c494d546064686a6c6c6b68656056524b453831271910020000000000000000000c2035495a637474675f4d3e2d1c0c00000000000000000000000000000000000000000000071c304354606f756a62503c281300000000000000000000000000000000000000000000000000000000162b40556b808a79634e39230e000000000000000000000000192e44596e83917c67523c271200000000000000000d22374d62788994958d7d6852362513000000000000000000000000000000000000000000000000000000000000000000000c21374c61768c806a55402b15000000000000000000000000000000000004182a3a5c71878e79634e39240e0000000000000000000000000000000c21364c61768b8a75604a35200b000000000000071520272a34384d62788d86705b3828343434343434342a27201507000000000000001f34495e7489836d58432e180000000000000000000000000000000b20364b60758a88725544311d080000000000000000000014293e53697e907a65503b251000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90816c57422c170000000a1a283236363636363636363636363636363636363636363636363636363636363635312619090000000000000000000000000000000000000000000000000c1c2938454b5a626d74797d7f8181807d7a756f6760564b44372d20130600000000000000000e23384d637889897d675c4a3a2a18080000000000000000000000000000000000000000011426374a6072848a806a55402b150000000000000000000000000000000000000000000000000000000013283e53687d907b66513b2611000000000000000000000000162c41566b81947f69543f2a140000000000000000162b40566b8095a7ab9d88735443301c070000000000000000000000000000000000000000000000000000000000000000000a1f3347587489826d58432d180000000000000000000000000000000000001a2f44596f84907b66513b26110000000000000000000000000000000e23384e63788d88735443301c070000000000031525323c3f49494b60758a8873564549494949494949493f3b322515030000000000001f34495e7489836d58432e18000000000000000000000000000000091d31455673888a75604b35200b0000000000000000000011263b51667b907d68533d28130000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788e846f59442f1a000002162838454b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4437261401000000000000000000000000000000000000000000000a1a293a4756606c7882888f908d8b8b8c8e8f8a847d756960554a3e31241406000000000000000c2035495a667c8d8b7a6458473626140100000000000000000000000000000000000000081d314455677c918876614b36210c0000000000000000000000000000000000000000000000000000000010263b50657b907e68533e291300000000000000000000000014293e54697e93816c57422c170200000000000000172d42576c8297acb49f8975604a35200b00000000000000000000000000000000000000000000000000000000000000000004172a3a5c718685705a372715010000000000000000000000000000000002172c42576c81937e69533e291400000000000000000000000000000a1a2e3e53687e93846f5a3625130000000000000d2032434f545f5f5f5573888b76605f5f5f5f5f5f5f5f5f544f4332200c0000000000001f34495e7489836d58432e18000000000000000000000000000000021527385b70858d78624d38230d000000000000000000000e24394e63798e806b55402b160000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61758b86715c47321c0000091e324556606060606060606060606060606060606060606060606060606060606060605544311d080000000000000000000000000000000000000000000215283847586174818b9287817b78767677797d828891887f74645c4e423225140500000000000006192c3c4c5e6a80958776615443301c12000000000000000000000000000000000000021628384b607386937e695746331e0a000000000000000000000000000000000000000000000000000000000e23384e63788d806b56412b1601000000000000000000000011263c51667b91846f59442f1a000000000000000011273c51667c919f9f98836e5443301c07000000000000000000000000000000000000000000000000000000000000000000001a2f44596f8488725544311d080000000000000000000000000000000000142a3f54697f94806b56412b16010000000000000000000000050e1927384b5c6f84947e69543f291400000000000013273c4f616a7474747474858d797474747474747474747469614f3b27120000000000001f34495e7489836d58432e1800000000000000000000000000000000182d43586d828b7b65503a2510000000000000000000000c21364b61768b826d58432d18000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324657647a7a644f39240f00000b21364b6075767676767676767676767676767676767676767676767676767676767573604b35200b000000000000000000000000000000000000000000091d32455661768496887d736b656361606164676d747c8692867a68604f43322313010000000000000e1e2f404a607283998472604b40301e0e0000000000000000000000000000000000091e324556687d928774604b39291703000000000000000000000000000000000000000000000000000000000b20364b60758a836e58432e190000000000000000000000000f24394e64798e87715c3a2a1804000000000000000f24394d5e6a7f898a8376614c3625130000000000000000000000000000000000000000000000000000000000000000000002172c41576c818c74604b35200b000000000000000000000000000000000012273c52677c91836e59432e190c0c0c0c0c0c0c0c0c0d0f1118202b374556647a8c8a77614c37220c000000000000152a3f546a7f8a8989898a8b9f8b8989898989898989898a7f69543f2a140000000000001f34495e7489836d58432e1800000000000000000000000000000001162b3f53646d74655d4b37230e000000000000000000000a1e324657738985705b372715020000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394a5c64645c4a36220d000a1f344a5f748a8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b7e69533e29140000000000000000000000000000000000000000081b2e3e4b6074859a8476686054504e4c4b4c4f52556066737d898b7e69614f41301f0f00000000000000121c30435461768795806b5e4c3c2c1b0b000000000000000000000000000000031729394b607587927d675645311b0b0000000000000000000000000000000000000000000000000000000000091d324556738886705b3828160300000000000000000000000c21364c61768b89745847331f0a00000000000000091d304050616a74766f61584733180800000000000000000000000000000000000000000000000000000000000000000000000d22384d62787a73604b35200b00000000000000000000000000000000000f243a4f64798f86715b3928212121212121212121212224262b343c485560748595806b5947341f0a0000000000000e23384d63787c7d7e7f80849a84808181818181818181807c66513c27110000000000001f34495e7489836d58432e18000000000000000000000000000000001023354653585f504b3f2e1c0800000000000000000000031629395c718688725544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2e3e4a4f4f4a3e2d1b07000013293e53687e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7b654f3a251000000000000000000000000000000000000000000d22374b5c6c8196847561584a4336383636373937444b5560687886927f695f4d3d2d180800000000000000132536465863798a8d7c665b493928160300000000000000000000000000000a1e334657697f948672604a382715000000000000000000000000000000000000000000000000000000000000021528385b708588735645321e0900000000000000000000000a1f33465874898c77614c37220c00000000000000001222334350546060564c473a2a180000000000000000000000000000000000000000000000000000000000000000000000000b2035485a6265605544311d0800000000000000000000000000000000000d22374c62778c88735745363636363636363636363638393b3b484d5a627383998474604b3a2a18040000000000000c2035495a63666768696a7d92806b6b6b6b6b6b6b6b6b6b665e4c39240f0000000000001f34495e7489836d58432e1800000000000000000000000000000000061828353f434a3a372e2111000000000000000000000000192e44596e838a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e363a39362d201000000011263b4e60686a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a655d4b37220e0000000000000000000000000000000000000006192c3c4f647a8f89776257473a30252321212224263137444b5a637684927d675b4a362614010000000000000818293a4a5b677d928979635746321e140200000000000000000000000004182a3b4c617688907b655443301a0a00000000000000000000000000000000000000000000000000000000000000192e43586e838b76604b36210b00000000000000000000000417293a5c71868e79644f39240f00000000000000000415253336434b4b4538332a1c0c00000000000000000000000000000000000000000000000000000000000000000000000005192b3c484d4f4b443727150100000000000000000000000000000000000b1f34485974898b76604b4b4b4b4b4b4b4b4b4b4b4c4d4e515559626a7884978577615544311c0c0000000000000006192c3c494d5152535464798f836d585656565656565656514c40301d090000000000001f34495e7489836d58432e1800000000000000000000000000000000000918232b2d3525231c1103000000000000000000000001172c41566c818d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b222424221b10020000000b1f31424e5354545454545454545454545454545454545454545454545454545454544f4b3f2e1b08000000000000000000000000000000000000000c2035495a6e83927d68594839291c130e0c0b0c0f141d26313c49586277888a79635443301c09000000000000000c1c2d3d4d5f6c81968675614b423221100000000000000000000000000b1f3447596b8095846f5e4c3625130000000000000000000000000000000000000000000000000000000000000001162b40566b808d78634e38230e000000000000000000000000192f44596e84917c67513c27120000000000000000000715182630353632281f180c00000000000000000000000000000000000000000000000000000000000000000000000000000e1e2b35383a353127190900000000000000000000000000000000000005182a3b5c72878e78636161616161616161616161616264666a6f7780898b81746159473727150000000000000000000e1e2c35383c3d3e4b61768b85705b37414141414141413c39302212000000000000001f34495e7489836d58432e18000000000000000000000000000000000000061016181f100e08000000000000000000000000000014293e54697e907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f0f0d070000000000021424313b3e3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3a372e211000000000000000000000000000000000000000000e23384d63788b8874604b3b2b1b0c0000000000000109141d2c3a4759657b8c8573604b37261401000000000000000f1f30414b60738498826d604f3f2e1d0d0000000000000000000006192b3c4c6177898c7a644f402f1808000000000000000000000000000000000000000000000000000000000000000013293e53687e907b66503b2611000000000000000000000002172c41576c81947e69543f2914000000000000000000000008141c20211e160a04000000000000000000000000000000000000000000000000000000000000000000000000000000000e19202225201d150900000000000000000000000000000000000000001a2f455a6f84917c7676767676767676767676767677797b80848c8a83796c6056473a2a1909000000000000000000000e1920232728334657738888735544312c2c2c2c2c2c27241d1204000000000000001f34495e7489836d58432e18000000000000000000000000000000000000000000060c0e0c0a040000000000000000000000000011273c51667c917d68533d281300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f26292a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a25221b1003000000000000000000000000000000000000000014293e54697e93806a5645311d0d000000000000000000010e1c2a3b4b5d6c81927d685544311d080000000000000001131d314455627788937e695d4b3b2a19090000000000000000000b2035485a6c8196836e5c4a36211100000000000000000000000000050b0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e11263b50667b907d68533e28130e0e0e0e0c0a03000000000014293f54697e94816c57412c1702000000000000000000000001080b0b090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d100b0801000000000000000000000000000000000000000002172d42576c8297918b8b8b8b8b8b8b8b8b8b8b8b8b8d8e8a85817d766e645c4b45382a1c0c000000000000000000000000060c0e111729395a6f858a75604b36201616161616110f090000000000000000001f34495e7489836d58432e1800000000000000000000000000000000000000010e192023221f180c0000000000000000000000000f24394e64798e806a55402b1500000000000000000000000000010a10121a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0c0a040000000000000000000000000000000000000000000000020b1113151a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a17150f050000000000000000000000000000000000000001142636596e838f7a654f3827150000000000000000000000000d1d2e3f4d62788b8774604b35200b0000000000000000011527374759647a8b8b7b6559483727150100000000000000071a2d3d4d62788b8b78624d3e2d1b030000000000000000000000000d181f2224242424242424242424242424242424242424394e63788e806b56402b2424242423211e160b0000000012273c51677c91846e59442f190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94847f7f7f7f7f7f7f7f7f7f7f7f8082858988827c72675f4c473a2c1f0f0100000000000000000000000000000000172c41576c818d78624d38230d010101010000000000000000000000001f34495e7489836d58432e1800000000000000000000000000000000000009141d2c353837342a1c1406000000000000000000000c21374c61768c826d58432d1800000000000000000000000005121d24272f2f2f2f2f2f2f2f2f2f2f2f2f2f2f221f180c0000000000000000000000000000000000000000000006141f272930303030303030303030303030303030303030303030303030303030302c2a221709000000000000000000000000000000000000081c30435473888a75604b36200b00000000000000000000000000112035485a6d82917c665136261401000000000000000009192a3b4b5c697e938877625544311d13010000000000000c21364a5b6d8296816c5a493520100000000000000000000000000d1d2a343739393939393939393939393939393939393939394b60768b836d58433939393939393632291b0b0000000f24394f64798e86715c3a291704000000000000000000000000000000000000000000000000000000000000000000000000000000000913191c200f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92836e696969696969696969696a6b6d6f757a818a867c6e6158493d2c1f0f0000000000000000000000000000000014293e53697e907a65503b2510000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000000000091926313c494d4c473a322414000000000000000000000a1f334758748985705b372715010606020000000000000001122330393c44444444444444444444444444444437342a1c0c0000000000000000000000000000000000000000031425323b3f4545454545454545454545454545454545454545454545454545454545423e3427170500000000000000000000000000000000000b20354b60758a87725645321d090000000000000000000000000006192b3c50657a8f836e5443301c080000000000000000000d1d2e3e4e606d82988473604b41301f0f0000000000081b2e3e4e63798c8977614c3c2c190200000000000000000000000a1a2a3b484c4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e56738885705b4e4e4e4e4e4e4e4b463929160300000c22374c61778c89745847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000000000d1b262e313524221b1002000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f86705b5454545454545454545455575560646c77818c8376635b493d2c1b0b00000000000000000000000000000010253b50657b907d68523d2813000000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000000001142637444b5a6361594f42321e0e0000000000000000000417293a5c718688725544311d1c1c1c17150f05000000000a1d30414d515959595959595959595959595959594c473a2a1804000000000000000000000000000000000000000c1f32434f545a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a57524534220f00000000000000000000000000000000000c21374c61768c85705b3828150200000000000000000000000000000e20354b6074898974604b35200b00000000000000000000102031424b60758596806b5f4d3d2d1b0b000000000822374b5c6e83957f6a5947341e0e00000000000000000000000216283848596263636363636363636363636363636363636363636363708688736363636363636363615746321e0a00000a1f33475874898c76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000091b2b3842464a3a372e201000000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778c887356453f3f3f3f3f3f3f3f3f4037444b4f58616c7a878879635b493929170300000000000000000000000000000d22374d62778c806a55402b15000000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000000000081d314455606e787769604f3c2b19060000000000000000001a2f44596f848a75604b35313131312d2a2217090000001024394d5f676f6f6f6f6f6f6f6f6f6f6f6f6f6f6f615947341f0a0000000000000000000000000000000000000012273b4f61696f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6c63523e2a1500000000000000000000000000000000000d23384d62788d846f59442f1a000000000000000000000000000000081c3043546f848e79644e39240f0000000000000000000002141e324556627889917d675b4a39291703000008182f404f647a8f8875614b3b2a18000000000000000000000000091e32455662777979797979797979797979797979797979797979797979848d7a797979797979797975614b36210c000004182a3a5c71878e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000013263849565b604f4b3e2e1b07000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a8b76604b362a2a2a2a2a2a2a2a2b2631353a474c5c6477868879635746331e1000000000000000000000000000000b203448597489826d58422d18000000000000000000000000000000001f34495e7489836d58432e18000000000000000000000000000000000b20354b6073838d8b7e695a4835200b000000000000000002172c41576c818d78624d4646464646423e35271705000012273c51677d84848484848484848484848484848377614c37220c0000000000000000000000000000000000000014293f54697f8485858585858585858585858585858585858585858585858585858585816c57422c1700000000000000000000000000000000000d22384d62778d846f5a37261401000000000000000000000000000001142636566b80927c67523d2712000000000000000000000003162838485a657c8d8a79635746331e1503001325364c5e7084937e685746321d0c0000000000000000000000000b21364b60768b8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e8e989f8e8e8e8e8e8e8e8e8e846f5a45301a0000001a2f44596f84917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000192e4256677175645c4b37220d00000000000000000000000000000000000000000000000000000000000000000000000000081c30435472878d78634e38231414141414141516141d202a333e4b596278898776614c3f2e1b080000000000000000000000000005182b3b5b708685705a372614010000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000000012283d52677d92a19f8b78624d38230d000000000000000000142a3f54697f907a655b5b5b5b5b5b57524535220f000012273c51677c8a898989898989898989898989898a7a644f39240f0000000000000000000000000000000000000013283e53687e8585858585858585858585858585858585858585858585858585858585826e59432e1900000000000000000000000000000000000c21364c61768b86715544311d0800000000000000000000000000000013293e53687e937f6a553f2a150000000000000000000000000a1a2b3c4c5e6a7f948676614c43322111071c304354667b908774604b392916000000000000000000000000000b21364b60748696817e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e7e8296817e7e7e7e7e7e7e7e7d67523d2712000002172c42576c81937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000001c31465b71858a7a644f3a240f00000000000000000000000000000000000000000000000000000000000000000000000000011426365a6f85907b66503b26110000000000000001080c171f2e3b495a667c8c826d5d4b37220e0000000000000000000000000000182d43586d8287725544311d080000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000000000152b40556a8095aba6907a65503b251000000000000000000012273c51677c917d717171717171716c63523e2a1500001024394d5f67747474747474747474747474747474645c4a36220d0000000000000000000000000000000000000011263a4e606870707070707070707070707070707070707070707070707070707070706e6453402b1700000000000000000000000000000000000a1e33465773888975604b35200b00000000000000000000000000000012273d52677c92806b56412b16000000000000000000000000000e1e2f404a60728399836e614f3f2f1d1527374a607286917c675544311b0b00000000000000000000000000091e324556637989877668686868686868686868686868686868686868687c917d6868686868686868675f4d392510000000142a3f54697f94816c56412c170100000000000000000000000000000000000000000000000000000000000000000000000000192e44596e83917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d82937d68533e28130000000000000000000004101d2c3c4c5e6e838f7a654f3c2c190600000000000000000000000000152a3f546a7f8a75604b35200b0000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000000010253a4f657a8d9c9a8876614c36210c0000000000000000000f243a4f647a8f8886868686868686816c57422d1702000a1d30404d515f5f5f5f5f5f5f5f5f5f5f5f5f5f5f4f4a3e2d1b07000000000000000000000000000000000000000b1e31424e535b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5953463624100000000000000000000000000000000000031729395a70858f79644f37271501000000000000000000000000000012273c51677c91816c57412c170000000000000000000000000000111c304354617586947f6a5d4b3c2b1d314455677c918572604a372715000000000000000000000000000002162838495b657c8c847360535353535353535353535353535353535364798e806a55535353535353524d41301e0a00000012273c52677c91836e59442e190000000000000000000000000000000000000000000000000000000000000000000000000000162c41566b81947f69543f2a140000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95806b56402b160100000000000000000000000e1e2f404f647a8e846f5a4935200c0000000000000000000000000011263c51667c8d77624d38220d0000000000000000000000000000001f34495e7489836d58432e18000000000000000000000000000000000e22374b5d677d86857a645746331e0a0000000000000000000c21364c6176808181818181818181806b56412b16010000122230393c49494949494949494949494949494939362d20100000000000000000000000000000000000000000021324313a3e4545454545454545454545454545454545454545454545454545454545434036281807000000000000000000000000000000000000152b40556a8095806a5544311d09000000000000000000000000000013283e53687d93806b56402b16000000000000000000000000000000132536465763798a8c7b655a483828384b607487907b6554433019090000000000000000000000000000000a1a2c3d4c5e697f94806b5f4e3e3e3e3e3e3e3e3e3e3e3e3e3e3e4c61768b826d58423e3e3e3e3e3d39302313010000000f243a4f64798f86715c392917030000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e93816c57422c17020000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92836e58432e19000000000000000000000000001222364a5c70858d78634d38230e000000000000000000000000000b20364b60737d77624c37220d0000000000000000000000000000001f34495e7489836d58432e1800000000000000000000000000000000081b2e3f4d5f677170645c4a392917030000000000000000000a1f334658616b6b6b6b6b6b6b6b6b6b62513d291400000004121d242734343434343434343434343434343424221b100200000000000000000000000000000000000000000006131e262830303030303030303030303030303030303030303030303030303030302e2b24180a000000000000000000000000000000000000000f243a4f647a8f8774604b3727150100000000000000000000000000152a3f546a7f947e69543f291400000000000000000000000000000008182939495b677d918878625645324556687e93846f5d4b36251300000000000000000000000000000000000e1f2f404f616d82927d685c4b3b2b29292929292929292929334658748985705a37262929292927251e1305000000000d22374c62778c89735746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b91846f59442f1a000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f85705b38281502000000000000000000000000071b2d3e556a7f937e69533e291400000000000000000000000000081d3144556068625947341f0b0000000000000000000000000000001f34495e7489836d58432e180000000000000000000000000000000000102131414d525c5a4f4a3e2d1b0b000000000000000000000417293a464c56565656565656565656514434210e00000000000a10121f1f1f1f1f1f1f1f1f1f1f1f1f1f1f0f0d07000000000000000000000000000000000000000000000000020b11131b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1917100700000000000000000000000000000000000000000b20354a607387927d685544311d11000000000000000000000000061a2c3d586d82917c67523c2712000000000000000000000000000000000b1b2c3d4d5f6b80968574604b414b6075888c79644e3f2f1808000000000000000000000000000000000000112132434b6074858b7a6459483828161313131313131317293a5c718687725544311d13131312100a0100000000000b1f34485974898b76614b36210c000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e86715c3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788d88735645321d090000000000000000000000000010253a4f657a8f846f59442f1a0000000000000000000000000002152737444b534c473b2a18050000000000000000000000000000001f34495e7489826d58432e180000000000000000000000000000000000021323313a3d474539362d20100000000000000000000000000b1b293336414141414141414141413d342616040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546a7f948774604b3f2f1e100200000000000000000000092135495b72878c77624d37220d00000000000000000000000000000000000f1f30414b60738497816c5f4e586a7f94826d5c4a3621110000000000000000000000000000000000000003141d3245566277878877625645321e15040000000000192f44596e848a75604b35200b000000000000000000000005182a3b5c72878e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000c21364c61768b89745847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a8a75604b36200b000000000000000000000000000d22374d62778c87725d362614010000000000000000000000000009192731363e37342a1d0d00000000000000000000000000000000162b40556b807d67523d271200000000000000000000000000000000000005131e2528313024221b1002000000000000000000000000000b171f212c2c2c2c2c2c2c2c2c2b292116080000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c10141517171614110d0b0500000000000000000000000000000000000000000000000000090f1116140c0a040000000000000000000000000000000000000000001325364c61778a957f6a5d4b3c2e201306000000000000000009192b3c4e63798d8772594834200b000000000000000000000000000000000001121d314455617787927d685c6176898b78624d3d2d1a030000000000000000000000000000000000000000021528384859647a8a8574604b433222120100000002172c41576c818d77624d38220d0000000000000000000000001a2f455a6f84907b66513b2611000000000000000000000000000000000001000000000000000000000000000000000000000a1f33465874898c76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000081d31445572888d78634e38230e000000000000000000000000000b20354b60758a89745443301c08000000000000000000000000000009151d2028221f180d000000000000000000000000000000000013283d50626b675f4d39251000000000000000000000000000000000000000010a10121c1b0f0d0700000000000000000000000000000000040a0c16161616161616161616140e0400000000000000000000000000000000000000000000000000000000000000000000000000000002090b161e2126292a2c2c2b29272220190f0d07000000000000000000000000000000000000000004121c24262b29211f170b0000000000000000000000000000000000000000081f3447596b80968d7b655b4a3e30211a0f0801000000060d192737485a6c8295806b553b2b1905000000000000000000000000000000000000011426374759647a8b8b7a646b8095816c5a48351f0f000000000000000000000000000000000000000000000a1a2a3b4a5c677d92826d614f402f1f0f0000000014293f54697e8f7a654f3a2510000000000000000000000002172d42576c82937e69533e291400000000000000000000000000050b0d15160f0d08000000000000000000000000000000000417293a5c71868e79644e39240f00000000000000000000000000000000000000000000000000000000000000000000000000011527375b7085907b65503b2610000000000000000000000000000b20354a60758a8a75604b35200b00000000000000000000000000000002080b130d0b050000000000000000000000000000000000000d2133445055524d41301e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e212932363b3e404141413f3c38352b24211a0f0800000000000000000000000000000000000715222f383b413f3633291b0c0000000000000000000000000000000000000004182a3a4c6177899d8879645c4d41352c201d1515151619202b37445562788b8a77614c37220d000000000000000000000000000000000000000009192a3a4a5c687e938776778a8976614c3c2b190100000000000000000000000000000000000000000000000d1d2d3e4d5f6b80947f695e4c3d2c1c0c00000012273c51677c917d67523d2812000000000000000000000000152a3f556a7f94806b56412b160100000000000000000000000d1820222a2b25221b1002000000000000000000000000000000192f44596e84917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000182d43586d82937d68533e2813000000000000000000000000000c21374c61768c89745443301c0800000000000000000000000000000000000000000000000000000000000000000000000000000000041526333d403d3930231301000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1c190b0801000000000000000000000000000000000000000000000000000000000000000000000000000004141a28323639464b50535556575654514d483c39362d231c1103000000000000000000000000000000152533404c5156544c463a291c0c000000000000000000000000000000000000000c1f334758697e9386887a675f4e493d3531272b2a2c2c353b485560738595806b5947341f0a0000000000000000000000000000000000000000000c1c2d3e4e606d81978381947f6a5847331e0e00000000000000000000000000000000000000000000000000102030414b6072838d7c665b493a29190900000f243a4f64798f7f6a553f2a1500000000000000000000000012273d52677c92836e59432e1900000000000000000000000d1d2b34373f403a372e2013050000000000000000000000000002172c41576c81937e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000162b40556b8095806b55402b16000000000000000000000000001325364f64798e87725d362614010000000913191c202020202020202020202020202020202020202020202020200f0d08000000000000071521282b27251e1305000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c20322f201d14090000000000000000000000000000000000000000000000000000000000000000000000000c171f3138454b53576165696a6c6c6b6966625a574e4a3e382f1e160b0000000000000000000000000009193343505e666b696158463a29170400000000000000000000000000000000000004182a3a4b6073858a81897d6f635b504b4437403f413c494d59627382988574604b3a2a180400000000000000000000000000000000000000000000102031424b607485998a8875604b3a2a17010000000000000000000000000000000000000000000000000002131c304354617586897963584637261401000c22374c61778c826d57422d1800000000000000000000000010253a4f657a8f86705b392816030000000000000000000d1d2b3b484c54564f4b3f312313010000000000000000000000000014293f54697e94816c56412c17010000000000000000000000000000000000000000000000000000000000000000000000000013283d53687d92836d58432e18000000000000000000000004101c3043546a7f94836e58432e190000000d1b262e313535353535353535353535353535353535353535353535353525221b10020000000000040d131612100a010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081826303547443531261909000000000000000000000000000000000000000000000000000000000000000000000c1c2933424e56606870767b7e7f8181807e7c78736c645c504b3f32281b0f01000000000000000000000114263750616a7b807e76615846331f0a000000000000000000000000000000000000000c1c30435463798b867c8884796d65605557555456585a626b7784988678625544311c0c000000000000000000000000000000000000000000000002131e334657697f94998574604b41301f0f00000000000000000000000000000000000000000000000000000114263646576378898676615544311d13020b1f3447597489846f5a3625130000000000000000000000000d22374d62778c88735745321e09000000000000000005192b3b4859626a6b645d4e41311e0b0000000000000000000000000012273c51677c91836e59442e19000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b9085705b38281502080808080000070b0c0f181f2d3d4a607386927d67523d28120000091b2b3842464a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3a372e2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636434b5c594b443726140100000000000000000000000000000000000000000000000000000000000000000a1a293a474c6068757d858a908e8c8a8a8b8d908d8881796f655d4b46392c1f0f00000000000000000000081d3144556a7f9096948776614c36210c00000000000000000000000000000000000000011426364a5b697f948277838c827a756f6c6a6a6b6d7278808a928576625a4837271500000000000000000000000000000000000000000000000005192b3b4c6176888a8396806b5f4d3d2d1c0c000000000000000000000000000000000000000000000000000008182939495a657b8c8373604b4130201004182a3b5c728787725443301c0700000000000000000000000b20354b60758a8b76604b36210b00000000000000000b2034485962777f807a68604e3a2508000000000000000000000000000f24394f64798e86715c39291703000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d88735645321d1e1e1e1e1e1e131c2021252a343e4a5b687d928876614c36210c000013263849565b606060606060606060606060606060606060606060606060604f4b3e2e1b08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0b09020000000000000000081c30435460716e605544311d0900000000000000000000000000000000000000000000000000000000000000031628384758616f7e889389837d7977757575787b7f858b8e847b6d6157493d2c1e0e0000000000000000000b20354b60748a9faba5947e69543f2914000000000000000000000000000000000000000008182d3d4a607284927d6e7a848c898481807f8182878d91887d736158483c2b19090000000000000000000000000000000000000000000000000b203448596b8095807686917d675b4a3a29180800000000000000000000000000000000000000000000000000000b1b2c3c4b5d697e93806b5f4d3e2e1d0d1a2f445a6f848a75604a35200b0000000000000000000000081c30435472878e78634e39230e00000000000000000d22374d62788994958d7d6852362513000000000000000000000000000c22374c61778c89735746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a8a75604b3633333333333333253035363a3b474c5c647989937e695846331f0a0000192e4256677175757575757575757575757575757575757575757575757575645c4b37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050a151d20201d150a000000000000000b20354b6074868373604b37271501000000000000000000000000000000000000000000000000000000000000081e324556617683938a80776e68636160566062666a7079828b908275635b493c2b1c0c00000000000000000c21364b61768ba2b5ab95806b56402b160100000000000000000000000000000000000000000f1c3043546177888a7a656f787e84888a8b8b8987827c75686055473a2b1e0e000000000000000000000000000000000000000000000000071a2d3d4d62788a897663798a8a796358473626140100000000000000000000000000000000000000000000000000000e1e2f3f4f606d81927d675c4a3b2b1a172d42576c828c77624c37220d0000000000000000000000011426365a6f85907b66503b26110000000000000001162b40566b8095a7ab9d88735443301c070000000000000000000000000a1f33475874898b76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000091d31455673888d78634d484848484848484848434a4c4f5359616b7a88998373604b3a29170400001c31465b71858a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a644f3a250f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d181f2731363631271a0a000000000000081c304354677c927d685544311d0a000000000000000000000000000000000000000000000000000000000008182f404b6074849986796a6158534e4c4b454b4d50555b636d7884958679635a483a2a1704000000000000000a1e33465770859b9f9e8d7b654f3a2510000000000000000000000000000000000000000000001325364759647b8b87766162696f7275767674726d6660564b44372a1c0e000000000000000000000000000000000000000000000000000821364a5b6d82947f695b667c918776615443301c12010000000000000000000000000000000000000000000000000000112132424b6074848b7a6459483828162a3f556a7f8f7a644f3a250f000000000000000000000000182d42586d82937e68533e29130000000000000002172d42576c8297acb49f8975604a35200b00000000000000000000000004182a3a5c71878e79634e39240e09090909090807050200000000000000000000000000000000000000000000000000000000021527385b7085907b655d5d5d5d5d5d5d5d5d5d54606164696e77808c938474605544311b0b000000192e44596e83998785858585858585858585858585858585858585858585857b65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2a3438454b4b45382715020000000000011426364b6073868774604b38271502000000000000000000000000000000000000000000000000000000001325364c5e6e83988675635b4c473a3937353236383b3d494e5a627380948878625847331f1000000000000000031729394d6278858a897e685d4b37230e0000000000000000000000000000000000000000000008182a3a4b5d697e93837260545955606161575d57514b45383126190c0000000000000000000000000000000000000000000000000008182f3f4e63798c8775604b5e6b80968372604b40301f0f000000000000000000000000000000000000000000000000000003141d3145566177878877625645321e273d52677c917c67523c2712000000000000000000000000152a40556a7f95806b56402b16010000000000000011273c51667c919f9f98836e5443301c07000000000000000000000000001a2f44596f84907b66513b261e1e1e1e1e1e1d1c1a17120d0b0600000000000000000000000000000000000000000000000000182e43586d83927e73737373737373737373737475767a7e838a948a7e7260564537271500000000162c41566b81947f7070707070707070707070707070707070707070707070655d4b37230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3b484c5660605645311d09000000000000081c304354677c917d685645311d0a000000000000000000000000000000000000000000000000000000071c304354667b9088786257493d332a2422201d2023262c353c4855606b7f948676614c3e2e1b08000000000000000b2035495a6270767368604e3f2e1c0800000000000000000000000000000000000000000000000c1c2e3f4f606d8296806b5f4d444b4c4b4639423c3632281d140900000000000000000000000000000000000000000000000000001325364b5d6f84927d6856454b60738495806b5e4c3d2c1b0b0000000000000000000000000000000000000000000000000000021527384759647a8a8574604b4332253a4f657a8f7f6a543f2a1500000000000000000000000013283d52687d92836e58432e1900000000000000000f24394d5e6a7f898a8376614c3625130000000000000000000000000002172c42576c81937e69533e3333333333333332312f2c282320190e0a0400000000000000000000000000000000000000000001162b40566b8095898888888888888888888888898a8b8f908c867f7769605445382819090000000014293e54697e93826c5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b5b504b3f2f1c08000000000000000000000000000000000000000000000000000000000000000000000000000000000001142636485962717574604b36200b000000000000011426364a6073868774604b3828150200000000000000000000000000000000000000000000000000000b20354a607386937e695a48392c1f170e0c0b090b0d111a212b37444b616d8197826e5c4b3722100000000000000006192b3c494d576057534e4231211100000000000000000000000000000000000000000000000000102032424b607485927d675c4a3b363632282d27211e160a010000000000000000000000000000000000000000000000000000071c304354657b908673604b3844556177878d7c665b493929180800000000000000000000000000000000000000000000000000000a1a2a3b4a5c677d8d826d614f402f374d62778c816c57422c1702000000000000000000000010253a50657a8f85705b3828150200000000000000091d304050616a74766f6158473318080000000000000000000000000000142a3f54697f94806b564848484848484848484744413d38352b211f170c03000000000000000000000000000000000000000011263c51667c848484848484848484848484848382817f7b77716961594b4336281a0a000000000011263c51667b91846f5a3645454545454545454545454545454545454545453b372f21110000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c3043546277858b7d68523d281300000000000000081c304354667c917e685645321d0a00000000000000000000000000000000000000000000000000000f24394f64798e8874604b3c2b1b0f0400000000000000060e192731434b6074878f7a644f3e2e1b08000000000000000e1e2b3539454b45393a312414030000000000000000000000000000000000000000000000000002141d3245566277888a7a64594738271e1618110b0903000000000000000000000000000000000000000000000000000000021528384a607285917c66554431374759647a8b8a796357463625130000000000000000000000000000000000000000000000000000000c1d2d3e4d5f6b80947f695e4c3d354b60758a846f5a442f1a0000000000000000000000000d23384d62788d88735645321d0900000000000000001222334350546060564c473a2a1800000000000000000000000000000012273c52677c91836e5e5e5e5e5e5e5e5e5e5d5c5a57524d493c37332a1e170b000000000000000000000000000000000000000f24384c5e666f6f6f6f6f6f6f6f6f6f6f6f6f6e6d6c6a666259544c473b3026180a0000000000000f24394e64798e87725443303030303030303030303030303030303030303025231c110300000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3f4b60728498826d604e3a251100000000000000001325364c5e71868874604b3828160300000000000000000000000000000000000000000000000000152a40556a7f95816c5544311d0d000000000000000000000009151d324556677d9285705c4b37220d00000000000000000e19202832363228261f1406000000000000000000000000000000000000000000000000000000021528384859647b8b8777625645311d140300000000000000000000000000000000000000000000000000000000000000091d324556677d9285705e4d37262a3a4a5c687e938675615443301c120000000000000000000000000000000000000000000000000000000f2030414a6072838c7c665b493a4354728787715c3a2a180400000000000000000000000b20354b60758a8a75604b36200b00000000000000000415253336434b4b4538332a1c0c0000000000000000000000000000000f243a4f64798f857373737373737373737372716f6c67625a544c473a33291b11030000000000000000000000000000000000091d2f404c515a5a5a5a5a5a5a5a5a5a5a5a5a59585654504c483b37342a1c1408000000000000000c21364c61768b8975604a35201b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b100e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a4b5d6a7f958675604b41311e0b00000000000000000818304051667b907e695645321e0a000000000000000000000000000000000000000000000000001a2f445a6f84907b665137271500000000000000000000000000021528384a6073868f7a644f3a250f000000000000000000060a161e211e160a0b0200000000000000000000000000000000000000000000000000000000000a1a2b3b4b5d687e938474604b423221110000000000000000000000000000000000000000000000000000000000000417293a4b6074878f7b65504030191c2e3e4e606d82978372604a402f1e0e000000000000000000000000000000000000000000000000000001121c3043546175868979635846365a6f8589745947341f0a0000000000000000000000081d31445572888d78634e38230e0000000000000000000715182630353632281f180c000000000000000000000000000000000d22374c62778c8c88888888888888888888878684817d78716961584b46392f211507000000000000000000000000000000000012222f383c444444444444444444444444444442413f3b37342a221f180c0100000000000000000a1f33465874898c77624c37220d06060606060606060606060606060606060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001325364759657b8c8a79635745322313010000000000000000001224384c5e70858875604b392816030000000000000000000000000000000000000000000000001c31465c71868d78634e38230e00000000000000000000000000000a1c304354697e94816c57382816030000000000000000000003090b09030000000000000000000000000000000000000000000000000000000000000000000d1d2e3f4e606c8197816d604f3f2e1e0e00000000000000000000000000000000000000000000000000000000000a1f334758697f94846f5d4b372212102031424b607485947f6a5e4c3c2c1b0a00000000000000000000000000000000000000000000000000000013253646576278898676615443586d828c77614c37220c0000000000000000000000011527375b7085907b65503b2610000000000000000000000008141c20211e160a0400000000000000000000000000000000000b1f34485974899a848484848484848484848586888b908d867f766b61574c40322516080000000000000000000000000000000004121d24262f2f2f2f2f2f2f2f2f2f2f2f2f2e2d2c2a26221f180d0b04000000000000000000000417293a5c71868f79644f3a240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c304354617788927d685b493928160500000000000000000000091c2f4050657b907e695745321e0b0000000000000000000000000000000000000000000000001e33485e73888b76614c36210c0000000000000000000000000000001325364e63788d87715645321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102031424b607484937e695d4b3c2b1b0b00000000000000000000000000000000000000000000000000000005192b3c4c6176898c79644e3f2e1c0402141e3245566278898d7c665a4939281603000000000000000000000000000000000000000000000000000008182939485a657b8b8372604b556a808e79644f39240f000000000000000000000000182d43586d82937d68533e281300000000000000000000000001080b0b09020000000000000000000000000000000000000005182a3b5c72878e796f6f6f6f6f6f6f6f6f6f7073767b8188938a8075655e4f43342616070000000000000000000000000000000000090f111a1a1a1a1a1a1a1a1a1a1a1a1a19181715110d0b050000000000000000000000000000192f44596e84917c67523c27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2e3f4a60728397826d5f4e3d2c1b0a0000000000000000000000001223384c5d70858875604b3929170300000000000000000000000000000000000000000000001e33495e73888b76604b36210b000000000000000000000000000000082135495b73898a76604b36210b0000000000000000000000000a0b000000000000000000000000000000000000000000000000000000000000000000000002141d3144556277888c7b655a493928180800000000000000000000000000000000000000000000000000000b2035485a6b8096826d5c4a362111000002162838485a657b8c8978635745321e140300000000000000000000000000000000000000000000000000000b1b2b3c4b5d687e93806b5f52687d917c67513c2712000000000000000000000000162b40556b8095806b55402b1600000000000000000000000000000000000000000000000000000000000000000000000000001a2f455a6f84917c6659595959595959595a5b5861666c757e8895877b6a61514434251403000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c81947f69543f2a140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e111415161514120f0c0a030004172a3a4b5d6a7f948675604b41311f0f00000000000000000000000000091c2f3f50657b8f7f695746331e0b00000000000000000000000000000000000000000000001d32485d72878c77624d37220d000000000000000000000000000000061a2c3d5b70868e78634e39230e0000000000000000000002091f20110f0a000000000000000000000000000000000000000000000000000000000000000000021527374859647a8b897862574636251300000000000000000000000000000000000000000000000000071b2d3e4d62788a8b78624d3e2d1a030000000a1a2b3c4c5d6a7f948675604b433221110000000000000000000000000000000000000000000000000000000e1e2e3f4e606c81927d675c657a907e69543f291400000000000000000000000013283d53687d92836d58432e180000000000000000000000000000000000000000000000000000000000000000000000000002172d42576c82937e695444444444444444453a464c5056606974808d8d7f6b625143322111000000000000000913191c200f0d0700000000000000000000000000000000000000000000090f111f1f0e0c0600000000000000000014293f54697e94816c57422c170200000000000000000000000000000000000000000000000000000000000000000000000000000002090b131c202326292a2b2a292824211e1711101f334758647a8c8a796357453223130100000000000000000000000000001123374b5d6f848876614b3a291704000000000000000000000000000000000000000000001b30455b70858e79634e39240e000000000000000000000000000000001a2f44596f848f7a65503a25100000000000000000000a151d343527241d1204000000000000000000000000000000000000000000000000000000000000000009192a3b4a5c687d928675615443301c120100000000000000000000000000000000000000000000000822364a5c6d8296816c5a4935200f00000000000e1e2f3f4a60728398826e614f3f2e1e0e000000000000000000000000000000000000000000000000000000112131424b6073848b7a6462788d816c57412c1702000000000000000000000010263b50657b9085705b3727150200000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94816c56412f2f2f2f2f2f3029333638454b56606a7c8994806b614f3f2e1a0a00000000000d1b262e313524221b100200000000000000000000000000000000000004121d242634342320190e000000000000000012273c51677c91846f59442f1a0000000000000000000000000000000000000000000000000000000000000000000000000000030a151d20253035383c3e3f403f3e3d3a363329262032424c617687927d675b4939281605000000000000000000000000000000081c2e3f4f647a8f7f6a5846331f0c00000000000000000000000000000000000000000000182d42586d82917c67523c271200000000000000000000000000000004192e43596e83907b66503b261100000000000000000a1a2731494a3c393022120000000000000000000000000000000000000000000000000000000000000000000d1d2e3e4e5f6c81968372604a40301f0f0000000000000000000000000000000000000000000008182f404f647a8c8a77624c3c2c1901000000000000111c304354617586947f695d4b3c2b1a0a000000000000000000000000000000000000000000000000000003141d314455617687887762758a846e59442f190000000000000000000000000e23384d63788d88735544311d080000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92836e59442e1a1a1a1a1a1a171f21273138454b5e667988947f695d4b38271502000000091b2b3842464a3a372e201000000000000000000000000000000000000012222f383b494a38352c1e0e000000000000000f24394f64798e87715c3a2a18040000000000000000000000000000000000000000000000000000000000000000000000000a161e27313636434a4e515455555554524f4b46393b363e4f616e8397826d5f4d3d2c1b0a00000000000000000000000000000000001122374b5d6f848976614c3a29170400000000000000000000000000000000000000000013283e53687d93816c563f2e1c08000000000000000000000000000001142637596f848f7a644f3a250f0000000000000002152738455d60514d40301d0a000000000000000000000000000000000000000000000000000000000000000000102031414b607384957f6a5e4c3d2d1c0c0000000000000000000000000000000000000000011426364c5e6f8495806a5947341e0e0000000000000000132536465763798a8c7b655a4838281602000000000000000000000000000000000000000000000000000002152737475863798a8574738886715c3a29170400000000000000000000000b20364b60758a8a75604b36200b0000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f86715c3929170304040400040a0c151d2832404c5b647a8b8c7b655645311d0900000013263849565b604f4b3e2e1b07000000000000000000000000000000000b1b2f404c515e5f4d493c2c19060000000000000c22374c61778c89745847331f0a0000000000000000000000000000000000000000000000000000000000000000000000111a283238454b5154606366696a6b6a696764615757514b4a5c697e938675604b41311f0f000000000000000000000000000000000000081b2e3f4f647a8f806a5847331f0c0000000000000000000000000000000000000000000d22374d62778b87725d4b3723120000000000000000000000000000081d31445570868d78634e38230e00000000000000091d3145566f75665e4d39240f00000000000000000000000000000000000000000000000000000000000000000002131d3144556177878d7c665b4a3a2a190900000000000000000000000000000000000000081c304354667b908876614c3b2a18000000000000000000081829394a5b677d918878625645321e1402000000000000000000000000000000000000000000000000000009192a3a4a5b667c8d82708589745846331f0a0000000000000000000000091d31455673888d78624d38230d000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778c89735746331e0a00000000000000020a151d2f3d4a5c687e938674604b372614010000192e4256677175645c4b37220d000000000000000000000000000000031729394c5e667474635a4935200c0000000000000a1f33475874898c77614c37220c00000000000000000000000000000000000000000000000000000000000000000008131c2f38454b5660676e74787b7e7f807f7e7d7976726c666058647a8b8a7963574532231301000000000000000000000000000000000000001022364a5c6f848976614c3a2a180400000000000000000000000000000000000000000b203448596f848f7a655040301e0e000000000000000000000000000b20354b6075898975604b36200b000000000000000b20364b60748d7c66513c271100000000000000000000000000000000000000000000000000000000000000000000011527374759647a8a8a79635847372614010000000000000000000000000000000000031628384b607386947e695746331d0d000000000000000000000b1b2d3d4d5f6c81968574604b423120100000000000000000000000000000000000000000000000000000000c1c2d3d4d5e6a7f937e828b76614c36210c0000000000000000000000021527385b7085907a65503b2510000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a8b76614b36210c00000000000000000002121f2d3e4a607285937e695544311d0800001c31465b71858a7a644f3a240f000000000000000000000000000000091e334657667c898b78634d38230e00000000000004182a3a5c71878e79644f39240f0000000000000000000000000000000000000000000000000000000000000000081825303f4b566069747c83898d91908f8e8e8f918f8b87817b746b7687927d675b49392816050000000000000000000000000000000000000000071b2d3e4e64798b806b5847331f0c000000000000000000000000000000000000000005192b3b4f647a8f846f5e4c3c2c1d1004000000000000000000000b1b2e3e4f657a8f846f5645321d0900000000000000091d31455673887f6a55402a15000000000000000000000000000000000000000000000000000000000000000000000009192a3a4a5c677d928776615544311d130200000000000000000000000000000000091e324556687d928774604b3929170000000000000000000000000f1f30414b60738497826d604e3f2e1d0d0000000000000000000000000000000000000000000000000000000f1f30404a6072828a838e79644e39240f000000000000000000000000182e43586d83927d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000081c30435472878e79634e39240e0000000000000000000000101c304354657b908774604b35200b0000192e44596e83917c67523c2712000000000000000000000000000009192d3e4c617688947f6a5a4935200c000000000000001a2f44596f84917c67513c27120000000000000000000000000000000000000000000000000000000000000008182636434a5d65757f88918f88827e7b7978797a7b7f82878d9088808397826d5f4d3d2c1b0d000000000000000000000000000000000000000000001022364a5c6e838977614c3b2a180400000000000000000000000000000000000000000d22374b5d6f84917c665a493b2e1f180c0801000000000108101b29394a5c6d82937e68533828150200000000000000021527385b7086836e593928160300000000000000000000000000000000000000000000000000000000000000000000000c1c2d3e4d5f6b80968473604b4131201000000000000000000000000000000004182a3a4b607587927d685645321b0b00000000000000000000000001131d314455627788937e685d4b3b2b1805000000000000000000000000000000000000000000000000000001121c30435460758599917b66513c2611000000000000000000000001162b40566b8095806a55402b1500000000000000000000000000000000000000000000000000000000000000000000000000011426365a6f85907b66513b26110000000000000000000000001325364c5e7186907b66503b26110000162c41566b81947f6a543f2a1500000000000000000000000000011426374a5c6c81968674604b3c2c190600000000000002172c42576c81947e69543f2914000000000000000000000000000000000000000000000000000000000000011426364354606a7b87948b827a736d69666463646566696d72787e8690998a78675f4c463a2b1d0f010000000000000000000000000000000000000000071b2d3e4e63798b806b5947341f0d0000000000000000000000000000000000000000081b2e3f4d627788887862594b3f342a201c1414131214141c202e3a4657647a8c8875604b36210b000000000000000000192e44596e8387725745321e09000000000000000000000000000000000000000000000000000000000000000000000000102030414b60738496816c604e3e2e190900000000000000000000000000000a1f3347586a7f948673604b3828150000000000000000000000000000011527374759647a8b8b7b64594834200b000000000000000000000000000000000000000000000000000000001325364557627888937e69543e291400000000000000000000000011263c51667c847f69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d82937e69533e291400000000000000000000000008182f40556a7f94826d583a2a17040014293e54697e93816c57422c1702000000000000000000000000081d314455647a8c8c7a645544311e0e0000000000000000142a3f54697f94816c56412c170100000000000000000000000000000000000000000000000000000000010f1c3043546072808d9283786d655d5854514f4e4e4f5154585a6269717b8591897d6e6158483b2c1f0f0000000000000000000000000000000000000000001021364a5b6e838a77614c3b2b180500000000000000000000000000000000000000001020344859657b8c8678655d4c473b353026292828292630353e4a58617586927d675645321e09000000000000000001172c41566c818a76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000002131d314455617687927d685c4b37271502000000000000000000000000000c22374c617789917c665443301a0a00000000000000000000000000000009192a3b4b5c697e938877624c37220d0000000000000000000000000000000000000000000000000000000008182839485a657b867e69543e29140000000000000000000000000f24384c5e666f69614f3b27120000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95806b56412b16010000000000000000000000001124394f64798e87725847331f0a0011263c51667b91846f5a442f1a00000000000000000000000005182b3b4b60738597816c5c4b37271500000000000000000012273c52677c91846e59442f1900000000000000000000000000000000000000000000000000000000000f1f32424b607282958b7e6f635b4f4b3f3e3b3a39393a3c3f3c484d545d65707c889283766259493d2c1e0e0000000000000000000000000000000000000000071a2d3d4e63798b816b594834200d000000000000000000000000000000000000000005182b3b4b5d667c8a887b6c6159504b43363f3d3d3e36434b505c64768497816d5f4d3828160200000000000000000014293f54697e8f79644f3a24140000000000000000000000000000000000000000000000000000000000000000000000000001142637475863798a8a7a645544311d080000000000000000000000000012273d52677d84806b5e4c36261400000000000000000000000000000000000d1d2e3e4f606a7f847f6a55402a1500000000000000000000000000000000000000000000000000000000000a1b2b3c4b5d657169604f3b2612000000000000000000000000091d2f404c515a544f42321f0c000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92836e59432e19000000000000000000000000000b20354b60758a8c76614c37210c000f24394e64798e87715c3a2a180400000000000000000000000a20344859697e938876614c3e2e19090000000000000000000f243a4f64798f86715c3a29170400000000000000000000000000000000000000000000000000000008182d3d4f616d8197897b68604d493c372e292624232425262a2b35383f4b505e667683958677635b493c2b1b0b00000000000000000000000000000000000000000f2135495b6d828a77624c3b2b190500000000000000000000000000000000000000000d1d2f3f4c5e667a878d81776c6560545654525253555460656d7a86938173604b41301a0a0000000000000000000011263c51667b917e695342321c130800000000000000000000000000000000000000000000000000000000000000000000000009192a3a4a5b657b848275604b36200b000000000000000000000000001025394d5f676f6b6251402f1808000000000000000000000000000000000000102032424f616a6f6a61503c28130000000000000000000000000000000000000000000000000000000000000e1e2e3f4b4f5b544f42321f0c0000000000000000000000000012222f383c443e3b32241402000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f86705b39281603000000000000000000000000081d31445572878f79644f3a240f000c21364c61768b89745947341f0a000000000000000000000a1b2f404d62778a917c665746332010000000000000000000000d22374c62778c89745846331f0a0000000000000000000000000000000000000000000000000000001325364a5c697e938a7a645d4e42352c221b14110f0e0f1011141920232e37404c58616e80938779635a483929180800000000000000000000000000000000000000061a2c3d4d63788b816c594834200e00000000000000000000000000000000000000000011212f404c5c64747f898a827a746f6c696867696b6f747a828d897e6d60554431231300000000000000000000000c21374c61768a8570604f413025180c0000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3d4c5d656e6d605544311d08000000000000000000000000000a1e30414d525a5651443322120000000000000000000000000000000000000002142432434f545a55504333200d0000000000000000000000000000000000000000000000000000000000000010212e373a463e3b322414020000000000000000000000000004121d24262f29271f14060000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788d88735745321e09000000000000000000000000011426375b7085907b66513b2611000a1f33465874898c77614c37220c000000000000000000031628394c5e6e8399836e5e4d39291702000000000000000000000b1f34485974898b76614c36210c0000000000000000000000000000000000000000000000000000071c30435464798c917d675c4b3f3121190e080000000000000000060b111c23303a474c616a7e93887862574636251300000000000000000000000000000000000000000f2135495b6d828a78624d3c2b190500000000000000000000000000000000000000000312222f3e4a56606a767d868c8984817e7d7d7e80848890887f7768604b443726140500000000000000000000000a1f3347586d82937e695f4a43362a1c110100000000000000000000000000000000000000000000000000000000000000000000000f1f2f3f4c5059584b44372715020000000000000000000000000001132330393d44403d332616040000000000000000000000000000000000000000061525323c3f44403c332515030000000000000000000000000000000000000000000000000000000000000003101b22253129261f140600000000000000000000000000000000090f111a14120c02000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a8b76604b36210b000000000000000000000000001a2f445a6f84917c67523c2712000417293a5c71868f79644f3a240f000000000000000000081e324557667c908978624d40301b0b000000000000000000000005182a3b5c72878e79644e39240f00000000000000000000000000000000000000000000000000000b20354a60728597816c5f4d3e2e2013060000000000000000000000000008121c2a33435060697f948675615443301c0d0000000000000000000000000000000000000006192c3c4d62788a816c5a4835200e0000000000000000000000000000000000000000000412202d38454b5761687076808a9693918f909295887d756a61594e4232281a0a00000000000000000000000004172a3a4c6176868c7d6a6054473a2e1c1408000000000000000000000000000000000000000000000000000000000000000000000111212f383b4442363127190900000000000000000000000000000005131e25272f2b2821160800000000000000000000000000000000000000000000071520272a2f2a2820150700000000000000000000000000000000000000000000000000000000000000000000080e101c14120c020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572888e78634e39230e000000000000000000000000021628385b7085917b66513c26110000192f44596e84917c67513c2712000000000000000008182d3d4b607587937e695948342212000000000000000000000000001a2f455a6f84917b66513c261100000000000000000000000000000000000000000000000000081b2e3f51677c918876614c4130201002000000000000000000000000000000000c171f33424f616c81978372604a3b2a1805000000000000000000000000000000000000000e2035495a6c828a78624d3c2c190600000000000000000000000000000000000000000002101a293a4658616f7c868f87817d7c7a7b7d80858b867e74665e4b45382819090000000000000000000000000c1f3346586176858d7f7261584b3f3026180b0000000000000000000000000000000000000000000000000000000000000000000003111c23262f2d201d15090000000000000000000000000000000000010a10121a16140e04000000000000000000000000000000000000000000000000030c13151a15130d03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0f1316171716130e0c07000000000000000000000000000000000000000000000000000000000000000000000000011527375b7085907b66503b2611000000000000000000000000091e32455672878f7a644f3a250f0002172c41576c81947f69543f2a1400000000000000001325364a5b6b80968573604b3b2b190400000000000000000000000002172d42576c82937e69543e2914000000000000000000000000000000000000000000000000000e22374b5d7186947f6958473323120200000000000000000000000000000000000004152432434b607485937e685947341f100000000000000000000000000000000000000006192b3c4d62788a826d5a4935200e00000000000000000000000000000000000000000000132536465861768391857a726c68666566676b7077808a877c6c6056453727150100000000000000000000000417293a4758617482928376655d4b4336291b0c0000000000000000000000000000000000000000000000000000000000000000000000090e1019180b08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000408141c2024282b2c2c2b2823211a0f090300000000000000000000000000000000000000000000000000000000000000000000182d43586d82937e68533e29130000000000000000000000000b21364b60758a8d78634d38230e000014293f54697e94816c57412c1702000000000000071c30435463798b8b79645443301d0d0000000000000000000000000000152a3f556a7f94816b56412c16010000000000000000000000000000000000000000000000001325364f657a8f8975614b3a291705000000000000000000000000000000000000000006141e32455663798b8977624c3e2e1b07000000000000000000000000000000000000000e2035485a6c818b78634d3d2c1a060000000000000000000000000000000000000000071c304354617686937f72655d5653515050525559626a7783918174605544311d120000000000000000000000000b1b2a3a4756606d7d8a887b6a6054463a291c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061016182013110b020000000000000000000000000000000000000000000000000000000000000000000c171f263035393d404141403d39362d211e160a000000000000000000000000000000000000000000000000000000000000000000162b40556b8095806b56402b16010000000000000000000005192b3b50657b908874604a35200b000012273c51677c91846f59442f1a00000000000004182a3b4a60728596806b5c4a36261400000000000000000000000000000012273d52677c92836e59442e19000000000000000000000000000000000000000000000000071c3043546d8296816c5746321c0c00000000000000000000000000000000000000000000021628384a5b6b8096826d5c4b37220d0000000000000000000000000000000000000005192b3c4d62778a826d5b4935210f00000000000000000000000000000000000000011426364a607284937e6a60544b3f3e3c3a3b3d3b474c59626e7f948373604b41301b0b0000000000000000000000000c1c2a38454b606879868c80726158463a291a0a0000000000000000070c0e0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f0b08010000000000000000000000000000000000000000000000000000000000000000000917232b2d3528261f140600000000000000000000000000000000000000000000000000000000000004121c293336434b4f5355575755524e4a3d3632281a13010000000000000000000000000000000000000000000000000000000000000013283d53687d92836e58432e19000000000000000000010a15203448596c8196836d5443301c0700000f24394f64798e87715c3a2a170400000000000a1f344759687e938775604b3d2d180800000000000000000000000000000010253a4f657a8f86715b3928160300000000000000000000000000000000000000000000000b20354a6074888f7a644f3928160000000000000000000000000000000000000000000000000a1a2d3d4b6175888f7a644f3c2b1905000000000000000000000000000000000000000e203448596c818b79634e3d2c1a06000000000000000000000000000000000000081c304354687d92836e604a43362e28272526282a343b484d616a7f94826d5f4d392917030000000000000000000000000c1a2832424e5b637482938376615846382715020000000000010f1a2123211e160b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006101b2224201d140900000000000000000000000000000000000000000000000000000000000000061727353f424a3e3a3124140200000000000000000000000000000000000000000000000000000000071522303a464c546064686b6c6c6b68635b544b4538301d150900000000000000000000000000000000000000000000000000000000000010263b50657b9085705b382815020808080003090b0e151d2832434d62788a917c67513625130000000c22374c61778c89745847331f0a000000000a1a2f3f4c617789907b665745321f0f000000000000000000000000000000000d22374d62778c89735746321e0900000000000000000000000000000000000000000000000f243a4f64798f8874604a35200b000000000000000000000000000000000000000000000000000f1e3246576a7f94836e5a483420080000000000000000000000000000000000000005182b3b4c62778a826d5b4936210f0000000000000000000000000000000000000b20354b6073878b78624d423025181311101112181f2b344350616e83917c675746331e0a000000000000000000000000000a161e313d4956606d7e8d8576615645311d1100000000000f1f2d36393632291f170c040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e19202d3639353126190900000000000000000000000000000000000000000000000000000000000010233545525860534e42311f0b00000000000000000000000000000000000000000000000000000007152533404c58616b74797d808181807d79726960564d413127190900000000000000000000000000000000000000000000000000000000000e23384d63788d88735645321d1e1e1e1e1e161e2123273138454b616e82988572604a35200b0000000a1f33475874898c77614c37210c000000021528384b5d6d8298826d5e4c39281601000000000000000000000000000000000b20354b60758a8b76614b36210c000000000000000000000000000000000000000000000014293f54697e94836e5443301c0700000000000000000000000000000000000000000000000000031628394c6176898b78624d36251300000000000000000000000000000000000000000d1f3447596b808b79634e3d2d1a07000000000000000000000000000000000011263b50667b90836e5a48351c13080000000000050d182033434c6177898876614b36210e000000000000000000000000000003131f2c38454b60697e938574604b3f2e1c08000000071a2d3d4a4e4b463933291f180c0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020c171f2b353e4a4f4b44372614010000000000000000000000000000000000000000000000000000000001162b3f52646d7568604e3a261100000000000000000000000000000000000000000000000000000315253343505e667680888e8d898887898a8e877f75675f4b4437271808000000000000000000000000000000000000000000000000000000000b20364b60758a8a75604b363333333333332832363837444b56606c80958c7b655443301c0700000004182a3a5c71878e79644f39240f000000091d324556657b908977614c402f1b0a0000000000000000000000000000000000081c30435472878e78634e39230e0000000000000000000000000000000000000000000003182d43586d82947f69543625130000000000000000000000000000000000000000000000000000000b1e3346576c8196806b5443301c070000000000000000000000000000000000000005182a3b4c617789836e5b4a3621100000000000000000000000000000000001162c41566b81927d68523c2b1900000000000000000005151f3347586b80937e69533c2c19060000000000000000000000000000010f1a2832424f606b8096816c5d4b3723100000000c21364a5b6361574c463a342a20180d06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010a161e2a333c494d5c64605544311d080000000000000000000000000000000000000000000000000000000003182d42586d828a7e68533e281300000000000000000000000000000000000000000000000000000d20334350616a7c8890857d7874727273757b8189887d6c60554436251300000000000000000000000000000000000000000000000000000000091d31455673888d78634d4848484848484839454b4e52556067748195937e685d4b36251300000000001a2f44596f84917c67513c27120000061a2c3d4b607486927d685947342211000000000000000000000000000000000000011426365a6f85907b66513b261100000000000000000000000000000000000000000000021527385b7186907b66503b2611000000000000000000000000000000000000000000000000000000031729394f647a8f8873604a35200b00000000000000000000000000000000000000000d1f3347586b808b79634e3e2d1b07000000000000000000000000000000051b30455a70858d78634e38230e0000000000000000000004182a3a4d62778a87725a4935200c000000000000000000000000000000000a151d32424b6073858f7b654f3e2e1b0800000e23394e6379766a61584c473a342b20190e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c28323a474c5a626e7973604b35200b0000000000000000000000000000000000000000000000000000000000152b40556a8095806b56402b16010000000000000000000000000000000000000000000000000013283c50616a7f91877c7068625a5d5c5660656c77818b8173605443301c0f000000000000000000000000000000000000000000000000000000021527385b7085907b655d5d5d5d5d5d5d5d5e576063676c747c86968b7e69604e3f2e18080000000002172c42576c81947e69543f291400000c2135495b6a80958472604a3b2a180300000000000000000000000000000000000000182d42586d82937e68533e291300000000000000000000000000000000000000000000091d31455673888e78634e39230e000000000000000000000000000000000000000000000000000000000b22374b5c72878f7a644f3a240f000000000000000000000000000000000000000004182a3a4c617689836e5c4a362210000000000000000000000000000000071d32475c72878b76614b36210c00000000000000000000000c2034485971868d78634d38230e000000000000000000000000000000000002141d314455647a8c85705c4b37220d000013293e53687e897f766b61594d483b352b211a0f070000000000000000000000000000000000000000000000000000000000000000000000000000071118263038454b58616c78838d77624d37220d000000000000000000000000000000000000000000000000000000000013283d52687d92836e58432e190000000000000000000000000000000000000000000000000000152a40556a7f958476665e534d493c38454b5058616c7c8a8272604a3d2d1a07000000000000000000000000000000000000000000000000000000182e43586d83927e737373737373737373737476787d8188918f857969604f42312111000000000000142a3f54697f94816c57412c170e0e1c30414e63798b8b79635443301d0c0000000000000000000000000000000000000000152a40556a7f95806b56412b16010000000000000000000000000000000000000000000b20364b60758a8b76614c36210c00000000000000000000000000000000000000000000000000000000071b2e3e576c8195806a553a2a170400000000000000000000000000000000000000000c1f3347586a808e7a644f3e2e1b070000000000000000000000000000081e33485d73888a755746331e0a000000000000000000000005182b3b566b80927d68523d2813000000000000000000000000000000000000011426374a5c6e838f7a644f3a250f00000c21374c6176838e8980776c62594d483c352c211a0f0700000000000000000000000000000000000000000000000000000000000000000000050f1a212f36434b56606a76818a908273604b35200b000000000000000000000000000000000000000000000000000000000010253a50657a8f85705b382816020000000000000000000000000000000000000000000000000012283d52677d837561584c4038352c2832363a474c5f677c8d7f6a5b4a36210e000000000000000000000000000000000000000000000000000001162b40566b809589888888888888888888888a8b8d928e89827a70635b4f423224130300000000000012273c52677c91846e59442f242424293a4d5f6f84957f6a5b4936251300000000000000000000000000000000000000000013283d52687d92836e58432e19000000000000000000000000000000000000000000000c21374c61768c8a755746331e0a000000000000000000000000000000000000000000000000000000000011263b51667b9086715847331f0a000000000000000000000000000000000000000004172a3a4c617689846f5c4a3622100000000000000000000000000000081d32475d72878b76614b36210c00000000000000000000000012283d52677d92816b56412c160000000000000000000000000000000000000009192d3e52677c91806b55402b1600000a1f334758616f7a838b8981776c625a4e493d362d221b1008000000000000000000000000000000000000000000000000000000000000040e19202d36404c546068757f8991857b6e605544311d0800000000000000000000000000000000000000000000000000000000000d23384d62788d88735645321e09000000000000000000000000000000000000000000000000001025394d5f676e6057473a2f232019161e212a33404d5e6b808c79634e3c2c1906000000000000000000000000000000000000000000000000000011263c51667c8484848484848484848484848381807d78746d655d4e4a3d32241406000000000000000f243a4f64798f86715c3a39393939394758677d928674604b3d2c180800000000000000000000000000000000000000000010253a50657a8f86705b382816020000000000000000000000000000000000000000000d22374d62778c89745f3929170300000000000000000000000000000000000000000000000000000000000c21364b61768b8b76614c37210c0000000000000000000000000000000000000000000c1f3346586a7f8f7a644f3f2e1b0800000000000000000000000000061b30465b70858d78634d38230e00000000000000000000000011263b50667b90826d58432d1800000000000000000000000000000000000000001021364c61768a86715b38281502000417293a474c5c646e79828a8a81786d635b4e4a3d362e231c11090000000000000000000000000000000000000000000000000000020c171f2b353e4a4e5e66737d8793877c72655d4b443726140100000000000000000000000000000000000000000000000000000000000b20354b60758a8a76604b36210b000000000000000000000000000000000000000000000000000a1e30414d52594b4539291c120c0602090c181f30404b617688846f5a4935200c00000000000000000000000000000000000000000000000000000f24384c5e666f6f6f6f6f6f6f6f6f6f6f6f6d6c6b676360544f4b3f362d1f140600000000000000000d22374c62778c8974584e4e4e4e4e4e506176888d7b655645342a241d1209000000000000000000000000000000000000000d23384d62788d88735645321e090000000000000000000000000000000000000000000d22374d62778c89745f4926140100000000000000000000000000000000000000000000000000000000000a1e3246577287907b65503b26100000000000000000000000000000000000000000000417293a4b617688846f5d4b3722110000000000000000000000000002182d42576d82907b66503b26120000000000000000000000000f243a4f64798f846e59442f1900000000000000040000000000000000000000000a1e334657738889745645321d0900000c1c29333e4a4f5b636d78818a8a82796e635b4f4a3e372e231c120700000000000000000000000000000000000000000000000a151d29333c484d5c646f7b8692887e746760544b3f31261909000000000000000000000000000000000000000000000000000000000000081d31445572888d78634e38230e0000000000000000000000000000000000000000000000000001132330393d443632281b0c00000000000004121e3346576b808d78634d38230e0000000000000000000000000000000000000000000000000000091d2f404c515a5a5a5a5a5a5a5a5a5a5a59585756524e4b4336372e211a0f010000000000000000000b1f34485974898c7663636363636364666e8297816d5d524c473b3930241d120300000000000000000000000000000000000b20354b60758a8b76604b36210b0000000000000000000000000000000000000000000c22374c61778c8a745544311d08000000000000000000000000000000000000000000000000000000000003162939586e83947f69543f2a14000000000000000000000000000000000000000000000b1e3346576a7f8f7a654f3f2e1c080000000000000000000000000013283d52687d92816b56402f1c09000000000000000000000010263b50657b90836d58432e1800000000070c0e190d0b05000000000000000000031729395b71868b75604b36200b0000000c171f2d363d494e5a626c7780898b83796e645c504b3f382f201c13080100000000000000000000000000000000000008131c28323a464c5a626d798490897f756860554a43362e1d140900000000000000000000000000000000000000000000000000000000000000011426375a7085907b66503b2611000000000000000000000000000000000000000000000000000005131e25282e211e160a0000000000000000031729394f64798e7f69543f2a1400000000000000000000000000000000000000000000000000000012222f383c4444444444444444444444444342403d39353026221b1007000000000000000000000005182a3b5c7287917d797979797979797b82988675706c676159514d40382f1e160b00000000000000000000000000000000081d31445572888d78634e38230e0000000000000000000000000000000000000000000b21364b60768b8a75604b35200b000000000000000000000000000000000000000000000000000000000000152b40556a8095826c57422d1702000000000000000000000000000000000000000000031729394b617588846f5d4b372311000000000000000000000000000c22374c61778a87725e4c382314030000000000000000000114263652677d92816b56412c160000010f1a21232f2220180d0000000000000000021527375a6f858c77624c37220d0000000004101b222c363c494d59626b7680898b847a6f655d504c403530251d1409020000000000000000000000000000071118253038454b58616b78828c8b81776a61574b44373025181101000000000000000000000000000000000000000000000000000000000000000000182d42586d82937d68533e2813000000000000000000000000000000000000000000000000000000010a1012190b0903000000000000000000000b22364a5c7489846f59442f1a04000000000000000000000000000000000000000000000000000004121d24262f2f2f2f2f2f2f2f2f2f2f2f2e2c2b2823201c14080800000000000000000000000000001a2f455a6f849a918e8e8e8e8e8e8e9093948a8785817c776f665e514c4032281b0e000000000000000000000000000000011527375b7085907b65503b26100000000000000000000000000000000000000000000b20354a60758a8b76614b36210c00000000000000000000000000000000000000000000000000000000000013283e53687d93856f5a45301a05000000000000000000000000000000000000000000000b1e324657697f8f7b65503f2f1c080000000000000000000000000b1f3447596e83907b665042322112020000000000000000081c3043546c81927d68523d281300000f1f2d36394437342b1d1003000000000000081d31445571868b76614b36210c000000000000070f1a212b353b484c58616a767f888f847b70665e514a433631261d15090200000000000000000000050f1a212f36434a56606976808a8c83786c61594b463931271c13080000000000000000000000000000000000000000000000000000000000000000000000152b40556a8095806b56402b16010000000000000000000000000000000000000000000000000000000000000400000000000000000000000000071b2d3e5d728786715c47311c0700000000000000000000000000000000000000000000000000000000090f111a1a1a1a1a1a1a1a1a1a1a1a181716120e0b080100000000000000000000000000000002172d42576c8297827e7e7e7e7e7e7e7e7e7f808285898f8a857c71665e4b46392c1e0e000000000000000000000000000000182d43586d82937d68533e2813000000000000000000000000000000000000000000071c30435473888d78634e38230e00000000000000000000000000000000000000000000000000000000000011263b51667b9087715c47321c0000000000000000000000000000000000000000000000031628394b60758885705d4c38231200000000000000000000000004182a3b4e63798b8570604f3f2f1e160a0300000000010a1828394b6074878b77624c37220d00071a2d3d4a4e594d483b2e1e160a03000000051220364b60758989745746321e0a0000000000000000060e19202b343a474c576169757e878f857b716660544b443731271e160a00000000000000000d19202d363f4b546067747f8990847a6e635a4c473b32291d15090000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92836e58432e1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192e3f5c718788735d48331e0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f94816b68686868686868686a6b6d70757a7f8891867c6d6157493c2c1d0d0000000000000000000000000000162b40556b8095806b55402b16000000000000000000000000000000000000000000001325365b7086907a65503b25100000000000000000000000000000000000000000000000000000000000000f24394f64798e88735e4925130000000000000000000000000000000000000000000000000b1e324556697e907b6550402f1c090000000000000000000000000c2136495b6d82937e695d4c4032281e1612101011141c28364557677c91846f5948341f0b000c21364a5b636e62594a3e32281e161311121820304150657b90846f593929160300000000000000000000060d18202a3339464b566068747d8690867c736760554b443732281a14060000000007151d2b343d4a4e5d65727d8792867b6f645c4d493c342a1e160b01000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f85705b38281602000000000000000000000000000000000000000000000000000000000000000000000000000000000000070e1926374b5d748986715c47311c0700000000000000000000000000000000000000000000030a0c13110f09000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c92836e59535353535353535456575560646a747d87908275635b493b2b1b0b0000000000000000000000000013283d53687d92836d58432e1800000000000000000000000000000000000000000000192e43596e83927d68523d28130000000000000000000000000000000000000000000000000000000000000e23394e63788e8a745443301c070000000000000000000000000000000000000000000000031628384b60748885705e4c382312000000000000000000000000061a2c3d4b6175868c7b665e4b453832282725252726303945546075868f7b65503b2a1805000e23394e63798377645c4b453832292826272b34404d5f6f84927d68523d281300000000000000000000000000050c171f293238454b556067737c8690867d746860554b4538322414020000041526333b484d5b636f7b8692877d72665e4f4a3e352c1f180c03000000000000000000000000000000000000000000000000000000000000000000000000000000000d23384d62788d88735645321e09000000000000000000000000000000000000000000000000000000000000000000000000000000050b101b222c374455657a8f836e59432e19040000000000000000000000000000000000000000000b171e212826241c120400000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f86715c393e3e3e3e3e3e3f4137444b4f55606775819286796359483928160300000000000000000000000010263b50657b9085705b37271502000000000000000000000000000000000000000000152b40556a8095816b563626140100000000000000000000000000000000000000000000000000000000000d23384d62788d8a75604a35200b0000000000000000000000000000000000000000000000000a1d324556687e907b6650402f18080000000000000000000000000f1e3346576378898a7c6a60564b46393c3b3a3c36434b5760728298826d5d4b371d0d00000f24394e647988887a6a60564b46393d3c3d3b484c5e677d928674604b36200b000000000000000000000000000000040b161e283237444b546066717b858f877d746960564f42321f0c00000d2133445059626d798490887e746760544c40362d20190e040000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a8a76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000002090d1820222d363c4955607384917c66513c27110000000000000000000000000000000000000000000b1b2933363d3b382f22120000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778c897357463329292929292a2b27313637444b57616c7d8d8777625746321e0e0000000000000000000000000e23384d63788d88735544311d0800000000000000000000000000000000000000000011263c51667b9185705443301c0800000000000000000000000000000000000000000000000000000000000d22374d62778c8b75604b36200b000000000000000000000000000000000000000000000000021528384b60748785705e4c36251300000000000000000000000003172939495a6379878d7f756861575551504f51535460677582988575604b3f2e1c0000000d21364a5c6478868b8075696157555251525459626c7c8b8b7b655544311d080000000000000000000000000000000000030a151d273136434a515e65707a848e877e7569604f3b2612000013283d50626b78828c8a80766960564a43362f221b10060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572878d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000030a161e212b34373e4a4f5b637381978472604a35200b000000000000000000000000000000000000000003172939464b53514c402f1c0900000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a8b76614c3621131313131516151d20273139464b5f687e938575614b3c2c190600000000000000000000000b20364b60758a8a75604b36200b0000000000000000000000000000000000000000000d22374c62778c8974604b35200b00000000000000000000000000000000000000000000000000000000000d23384d62788d8a755544311d08000000000000000000000000000000000000000000000000000a1d314455687d917c665443301c080000000000000000000000000b1b2c3c4a5b63768490887e766f6a67656566686d747d87948476615745322111000000071a2d3d4a5a6275808b877e766f6a686667696f7781918c7d675d4b37271502000000000000000000000000000000000000000209151d253035404c505d656f798189887e69543e29140000162b40556b808b8a81776b61574b4538302518110700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426375a7085907b66503b26110000000000000000000000000000000000000000000000000000000000000000000a161e2832363b484d545c646d7884978777625443301c0700000000000000000000000000000000000000000a1e3346576168665e4c38240f0000000000000000000000000000000000000000000000000000000000000000000000081c30435472878e79634e39240e000000000002080b151d2832414e606c8196816c5a4935200c0000000000000000000000091d31455673888d78624d38230d0000000000000000000000000000000000000000000b2034485972878f7a644f3a240f00000000000000000000000000000000000000000000000000000000000e23394e63788e89745f4a27150200000000000000000000000000000000000000000000000000021527374b6074878673604a362513000000000000000000000000000e1e2d3d4a58616f7b869089847f7c7a7a7c7d828892897f7361584739281603000000000f1f2d3c4856606b79848e89847f7d7b7c7f848a92877a675f4d3f2e190900000000000000000000000000000000000000000000020c171f2b343d494e5d64707b838d86715c47311c0700192e44596e838f837d736960574c463a342a20190e0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182d42586d82937d68533e28130000000000000000000000000000000000000000000000000000000000000002101b283238454b52596269717a828b9183776259483625130000000000000000000000000000000000000000000c21364b61757d7c66513b26110000000000000000000000000000000000000000000000000000000000000000000000011426365a6f85917b66513c26110000000000000000020b161e31424c6176888b78634d3a2a180400000000000000000000021527385b7085907a65503b251000000000000000000000000000000000000000000005182b3b566b8195806a553d2d1a070000000000000000000000000000000000000000000000000000000010253a4f657a8f88735d48331e000000000000000000000000000000000000000000000000000000091d314455687d917c665443301c08000000000000000000000000000f1f2d3a474c5e65717b82878c8f908f8f8d8a857e766a6055473a291b0a0000000000010f1d2b38454b5b636f7981878c8f90908e8a857d74645c4d41302111000000000000000000000000000000000000000000010a161e29333b484d5b636e7a8590887e73604b35200b0000172c4053646e7a848e887e756a61584c473b352b211a0f070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95806b56402b160100000000000000000000000000000000000000000000000000000000000310202e39454b5660676f777f868e8f867c6f6259483b2b18080000000000000000000000000000000000000000000c21364b61768b86715c3a2917040000000000000000000000000000000000000000000000000000000000000000000000182d42586d82937e69533e29140000000000000000000003141e334657687e93836e5947341f0a0000000000000000000000182e43586d83927d68523d28130000000000000000000000000000000000000000000010253b50657a9086715c4a36210b0000000000000000000000000000000000000000000000000000000012273c52677c9186705b46311b060000000000000000000000000000000000000000000000000000011527374b6073878673604a36261401000000000000000000000000010f1c2933404c505d656d7276797b7b7a78766f6961584b4437291c0c00000000000000000d1a28323d494e5c646b72777a7b7b7976706860554b3e30231303000000000000000000000000000000000000000008141c28323a464c59626d79838f897f7568605544311d08000011243646535c646f79838b887f766b62594d483c352c221b100800000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92836e58432e1900000000000000000000000000000000000000000000000000000000000010212e3e4a57606a757c848a9289827a71665e4c473b2b1d0d000000000000000000000000000000000000000000000a1e324657738989745847331f0a0000000000000000000000000000000000000000000000000000000000000000000000152a40556a7f95816b56412c160100000000000000000000031729394b6075898a77614c37220c0000000000000000000001162b40566b8095806a55402b15000000000000000000000000000000000000000000000b20354b6074888e79644e3a291704000000000000000000000000000000000000000000000000000000152a3f556a7f94836e59432e1904000000000000000000000000000000000000000000000000000000091d314455677d917c675443301c0900000000000000000000000000000c171f2f383f4b5057586164666665636157544c463a3127190c000000000000000000000a161e2c363d4a4e565861656666646157524b44372e20130500000000000000000000000000000000000000081218263038454b58616b77828b8b81776a61574b44372614010000071828363e4b4f5c646e79828a8980776c625a4e493d362d231c11090000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f85705b38281602000000000000000000000000000000000000000000000000000000000b1b2e3f4b5c64757f88918b847d766c645c514c40342a1d0d0000000000000000000000000000000000000000000000031629395c71868c76614c37210c000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92836e59442e190000000000000000000000000b1d3145566d82927d68533d2813000000000000000000000011263c51667c847f69543e291400000000000000000000000000000000000000000000081d3144556a8095816c5846331f0c0000000000000000000000000000000000000000000000000000061a2c3d596e83947f6a553f2a1500000000000000000000000000000000000000000000000000000000011426374b6073868673604b37261401000000000000000000000000000004111c232f373b3a474c4f5051504e4b46393633291d1509000000000000000000000000030f1a212d36393a474c4f51504f4b463936312719100200000000000000000000000000000000000006101b222f36434b56606976808a8f83796c61594b463931261909000000000a18202e373e4a4e5b636d78828a8a81786d635b4f4a3e372e241d120801000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62788d88735645321e0e0000000000000000000000000000000000000000000000000000000417293a4b5d657a87948980786f6761574f4a3e39301f180d00000000000000000000000000000000000000000000000000192e44596e838e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000010253a50657a8f86715b3929160300000000000000000000000215273852677d92826d58432d1800000000000000000000000f24384c5e666f69614f3b271200000000000000000000000000000000000000000000011426374d62788b8976614c3a291704000000000000000000000000000000000000000000000000000c2135495b7287907b66503b26110000000000000000000000000000000000000000000000000000000000091c304354677c917d675544311d080000000000000000000000000000000009111c23252a33373a3b3c3a38363228211f170b01000000000000000000000000000000060f1a21242a33373a3b3b39363229201d1509000000000000000000000000000000000000050f1a212e37404c546068757f8991857a6e635b4c473b32281d140900000000000002101b222d363d494e5a626c7781898a82796e645c504b3f382f201c14080200000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a8b75604b3c2c190900000000000000000000000000000000000000000000000000000a1f334658657b8a9382766b6259524b4639362d241d12050000000000000000000000000000000000000000000000000001172c41566c81917c66513c271100000000000000000000000000000000000000000000000000000000000000000000000d23384d62788d89735746321e0a0000000000000000000000000f24394f64798e86715c3625130000000000000000000000091d2f404c515a544f42321f0c000000000000000000000000000000000000000000000009203448596d82957f6a5847331f10000000000000000000000000000000000000000000000000000e23384e63788d8a76614b36210c0000000000000000000000000000000000000000000000000000000000011426364a6072868773604b35200b000000000000000000000000000000000000080e10171f212426262523211e160c0a0400000000000000000000000000000000000000070d0f181f2225262624211e160b08020000000000000000000000000000000000040d18202c353e4b4f5e66737d8793867c70645c4e493d342a1e160b0100000000000000000008101b222c353c494d59626c7780898b837a6f655d514c403530261d150a030000000000000000000000000000000000000000000000000000000000000000031729394c61778a927d685a4937271501000000000000000000000000000000000000000000000000000c21364c617687937e6d61584d483b363228221b10090000000000000000000000000000000000000000000000000000000014293f54697e937e69543e291400000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a8b76614b36210c0000000000000000000000000c21374c61768c89745443301c07000000000000000000000012222f383c443e3b32241402000000000000000000000000000000000000000000000005192b3b4d62788b8976614c3f2e1c0c0000000000000000000000000000000000000000000000081c2e3f54697f9485705746331e0a000000000000000000000000000000000000000000000000000000000000081c304354657b897d68523d2813000000000000000000000000000000000000000000040a0c0f1111100e0c090300000000000000000000000000000000000000000000000000040a0c1011110f0c0a03000000000000000000000000000000000000000b171f2b343d494e5c64707c8692887e73665e4f4b3e352c1f180c0300000000000000000000000000070f1a212b353b484d59616b767f888e847a70665e524b433631271e160a010000000000000000000000000000000000000000000000000000000000000a1e3346576b8095898a78635544311d100000000000000000000000000000000000000000000000000014293e54697e93826d604c473a342b211e160b0700000000000000000000000000000000000000000000000000000000000011273c51667c91816c56412c170100000000000000000000000000000000000000000000000000000000000000000000081d31445572888e79634e39240e0000000000000000000000000b20364b60758b8a75604a35200b000000000000000000000004121d24262f29271f1406000000000000000000000000000000000000000000000000000d2035495a6c8196816c5d4b3a2a1808000000000000000000000000000000000000000000000b23374b5d7186937e685339291703000000000000000000000000000000000000000000000000000000000000001325364b5d657575614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141b29333b484d5b636e7a8591897f756860554c40372e211a0e040000000000000000000000000000000000060e19202b343a474c58616a757f888f857b716760544b453832281d140900000000000000000000000000000000000000000000000000000000021527384b6176898a7b908573604b3f2e1b0b0000000000000000000000000000000000000000000000051a30455a6f848d78634d42332a20190d090300000000000000000000000000000000000000000000000000000000000000000f24394f64798e836e59442e1900060c0e12131413100c09030000000000000000000000000000000000000000000000011527375b7085907b66513b26110000000000000000000000000c21364b61768b8a75604b35200b00000000000000000000000000090f111a14120c02000000000000000000000000000000000000000000000000000006192b3c4b6175878d7a6458473626180800000000000000000000000000000000000000000b1b2f404f657a8f8a76614c36210c000000000000000000000000000000000000000000000000000000000000000008182e3f4b5660615746331e0a0000000000050b0d15160f0d0800000000000000000000060b0d15160f0d0700000000000000000000060c0e15150e0c06000000000000000000050b0d15160f0d080000000000000000000000000000000000001424313a464c59626d79838f8b81776a61574b443730221b1006000000000000000000000000000000000000000000060d18202a343a464c576169757e8790867c736860564b453931261909000000000000000000000000000000000000000000000000000000091d314556697f94826d8295806a5d4b3929170300000000000000000000000000000000000000000000081d32475d728789735a49351f170c0500000000000000000000000000000000000000000000000000000000000000000000000c21374c61778c86715b3929160e1921232729292825211e160b0900000000000000000000000000000000000000000000182d43586d82937e69533e29140000000000000000000000000d23384d62788d88735544311d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e334657667c9187766154433626180a000000000000000000000000000000000000031629394c5e6f8497816c5846331f0a00000000000000000000000000000000000000000000000000000000000000000011212e38454b4b4639291703000000000d1820222a2b25221b1002000000000000000e1920232a2b24221b1002000000000000010f1a21232b2b23211a0f010000000000000d1820222a2b25221b10020000000000000000000000000000000b1b31424e58616b77828b8f83796c61594b4639312619120800000000000000000000000000000000000000000000000000050c181f293339464b566068747d8791877d746960574b443726140100000000000000000000000000000000000000000000000000011426364b6074888c796375878c7b655746331e1300000000000000000000000000000000000000000000081d32475d728787725443301c0700000000000000000000070b0d0b05000000000000000000000000000000000000000000000a1f334758748989735746321f212c35383c3e3e3d3a363228241d12070000000000000000000000000000000000000000162b40556b8095806b56412b1601000000000000000000000115273750657a9087715c37261401000000030c12142015120c0300000000000000000000000000000000060c0e201a181108000000000000000000000000031729394c5e6c8196837260544336281b0f0300000000000000000000000000000008131e324657667b908b78624d3a29170400000000000000000000000000000000000000000000000000000000000000000003111a2731363633291b0b000000000d1d2b34373f403a372e20130500000000010f1e2b3538404039362d2012040000000002101f2c3539404039362c1f1103000000000d1d2b34373f403a372e20130500000000000000000000000000031729394e606876808a91857a6e635b4c473b32281d14090000000000000000000000000000000000000000000000000000000000040c171f293238454b556068737c8691887e756a605544311d0800000000000000000000000000000000000000000000000000081c304354687d93836e5b647a8c8776614c41301e0e000000000000000000000000000000000000000000051a30455a6f858974604a352010000000000000000008131c20221f180d00000000000000000000000000000000000000000004172a3a5c71878b76614b3633373c494d515354524f4b4639382f221b100200000000000000000000000000000000000013283d53687d92836e59432e190000000000000000000006111d3144556b8096826d58422d18000000071520272a352a2720150700000000000000000000000000010f1a2123352f2c25190b0000000000000000000000000b1b2f404b607384978172605445392d1e160b040000000000000000000000020c182530444b61758795806b5a48351c0c0000000000000000000000000000000000000000000000000000000000000000000000000a151d20211e170b000000000d1d2b3b484c54564f4b3f312313010000000f1f2c3c494d55554f4a3e3022120000000010202e3d494e55554e493d2e21110000000d1d2b3b484c54564f4b3f312313010000000000000000000000000a1e334657687e8993867c70645c4e493d342a1e160b010000000000000000000000000000000000000000000000000000000000000000040b161e283237444b546067737c8590887f73604b35200b000000000000000000000000000000000000000000000000000b20354b6073878f7a654f5c6a8095826d5f4d3c2b1909000000000000000000000000000000000000000000152b40556a808f7a644f3e2e1e100400000000000a1825303537342a1d0e0000000000000000000000000000000000000000001a2f445a6f848e78634e3a474c555b6367686968656157514c40362d201401000000000000000000000000000000000010263b50657b9086715b392816030808080001080b0d111a212f3e4b607487917c67513c27120000031525323b3f4a3f3c322515030000000000000000000000000f1f2c35394a444137291908000000000000000000000000121d31445561768596817260574a3e32291f170c0a03000000000000060a151d2a36434a626d82988674604b3c2b19000000000000000000000000000000000000000000000000000000000000000000000000000002090b0c0a030000000005192b3b4859626a6b645d4e41311e0b0000061a2c3d495a626a6b645c4d40301d0a0000081b2e3e4b5b636a6a635b4b3f2e1c080005192b3b4859626a6b645d4e41311e0b0000000000000000000000000c21364c61768b887e73665e4f4b3e352c1f180c03000000000000000000000000000000000000000000000000000000000000000000000000030a161e273136434b546066707b858f7d68533d2813000000000000000000000000000000000000000000000000091c2f4052677c9185705d4b4b607385927d675a483726140100000000000000000000000000000000000000000e23384d63788d826d5c4b3c2d1f170e0c0b0d121b2836434a4c473b2b1e0e0000000000000000000000000000000000000002172c42576c81907b66514e58616a72787c7e7e7d7a766f665e4e4a3e321d1409000000000000000000000000000000000e23384d63788d88735746321e1e1e1e1e1e141d2022262c353f4c5c697e938875614b36210c00000c2032434f5460544f4332200c0000000000000000000000061a2c3d495e605a5447372511000000000000000000000000011527374658617686968375645c4b46393329211e171514131314161a2127313b4754606b80958a79635645321e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2034485962777f807a68604e3a250800000c2135495b63787f807a665e4d39240f00000d22374b5c6479808079655d4b37230e000b2034485962777f807a68604e3a25080000000000000000000000000b20354b60737f756860554c40372e211a0e04000000000000000000000000000000000000000000000000000000000000000000000000000000000209151d263036434a515d65707a7c66513c27110000000000000000000000000000000000000000000000000e23384c5e7186917c66513f445562788a8978625544311d1000000000000000000000000000000000000000000c2135495b6d828c7a645a4a3e332923212122252f394554606259483c2b190500000000000000000000000000000000000000152a3f546a7f937e685360687680878d8e8d8d8e8f8a847b6f645c4f42312619090000000000000000000000000000000b20364b60758a8b76614b36333333333333263135373b3d494e5d657a8a927d675746321e09000012273b4f6169756a614f3c271200000000000000000000000c2135495b70756f6554412c18030000000000000000000000000919293a475861758396867a6a61574c463a3633292b292828292b2c3538454b59617280958b7c665b4938281600000000000000000b141b1d1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f110f0900000000000000000d22374d62778994958d7d685236251300000e23394e63798a95958c7c66513c271100000f253a4f647a8b95958b7b65503b2510000d22374d62788994958d7d6852362513000000000000000000000000081c304354606a61574b443730221b100600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000208141c2530353f4c505d65665e4d39240f0000000000000000000000000000000000000000000000071b2e3e50657b908673604a3537495a687d928473604b3e2e1b0b0000000000000000000000000000000000000006192c3c4c6277898778645c4c473a383636373a404c57607277625a4835200b0000000000000000000000000000000000000012273d52677c92806b606c7d898a837d797877797c828990847a69604b44372618080000000000000000000000000000091d31455673888e78634e4848484848484848444b4d51555b636e7b89988272604a392816030000142a3f54697f8a7f6a543f2a1500000000000000000000000e23394e63798a836f5a442f1a00000000000000000000000000000c1c2a3a47576173808c8b8075696158514c4639403e3d3d3e403d494e5660687783958a7c665e4c3d2c1a0a000000000000000e1c282f32353535353535353535353535353535353535353535353535353526231c1104000000000000162b40566b8095a7ab9d88735443301c0702172d42576c8297a8aa9c86715c47311c0704192e44596e8399a9a99a84705a45301b00162b40566b8095a7ab9d88735443301c07000000000000000000000001142636434b554b463931261912080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108131c202f383f4b4f514d40301d0900000000000000000000000000000000000000000000000d22364a5c6f84927d685443302c3c4e5f6e82947f6a5c4a39291603000000000000000000000000000000000000000e1f344759647b8a877a6a6158514d4b4b4c50555e6675838a78624d38220d000000000000000000000000000000000000000f253a4f647a8f836e72818b81776e6864626264676d76808a8b7e6d6055443625130000000000000000000000000000021527385b7085907b665d5d5d5d5d5d5d5d5e556062666a71788390918273605443301b0b00000012273c52677c91816c57422c1702000000000000000000000c21364b61768b87715c3a2a170400000000000000000000000000000c1c2a394655606b7a8693887e766d66615758555453525456595b636a747e8897877a665e4c402f1f0f000000000000000b1c2c3a44474a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3b382f2211000000000000172d42576c8197acb49f8975604a35200b04192e43596e8398aeb39d88735e48331e09051b30455a70859aafb19c86715c47311c00172d42576c8297acb49f8974604a35200b00000000000000000000000008182630353f3632281d1409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007111c232e373a3c393022120000000000000000000000000000000000000000000000061a2c3d4f647a8f8874604b36251e31414c6176878c7a645746321e120000000000000000000000000000000000000005182a3b4b5c657b888b80766d6763616062656a727c87928172604a35200b000000000000000000000000000000000000000d22374d62778c8570818a7c6c6159524f4d4d4e5257616b7885938273605443301c120000000000000000000000000000182e43586d838879737373737373737373737475777b7f868d92887c6d605544362513000000000f243a4f64798f846f59442f1a0000000000000000000000091e324657738989745847331f0a0000000000000000000000000000000c1b2937444b5d64747e889289827c76716e6a696868696b6e72788087938b8175645c4c402f2212010000000000000014283a4a575d5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f504c402f1c09000000000011273c51667c919f9f98836e5443301c070013283e53687e939f9f97826d57422d180200152a3f546a7f949f9f95806b56402b160011273c51667c919f9f98836e5443301c070000000000000000000000000008141c202a211e160b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009101b222527241d120400000000000000000000000000000000000000000000000c2135495b6e83947f6956453118131f334658657b8c8775614b41301d0d000000000000000000000000000000000000000d1d2e3e4b5d6577838e89827c787676777a7f8791897d6c605443301c07000000000000000000000000000000000000000b20354a60758a887c8a7b665e4c473b3938383939464b5a627482978172604a402f1d0d00000000000000000000000001162b40566b80898888888888888888888888898a8c908f8a847d75675f4b4437261808000000000d22374c62778c86715c3929170300000000000000000000031628395c71868c76614c37210c000000000000000000000000000000000b1926313f4b556068757d858d918a8683807e7d7d7e8083888d938a82796c61574a3e2f22120400000000000000001b2f445768727474747474747474747474747474747474747474747474747474665e4c38230f00000000000f24394d5e6a7f898a8376614c36251300000b20354a6072808a8a8275614c36210c00000b20364b6074818a8a8275604b36210b000f24394d5e6a7f898a8376614c36251300000000000000000000000000000001080b150c0903000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e10110f0900000000000000000000000000000000000000000000000005192b3b4e63798c8976614c3827150417293a4b5d6b8096826d5f4d3b2b18080000000000000000000000000000000000000010202e3f4b59616e7982898f8d8b8b8c8f8d87807768604a433625130000000000000000000000000000000000000000071c30435472878d887e685d4c40342a2423222429323c485660728296806b5e4c3b2b180500000000000000000000000011263c51667c8484848484848484848484848382817d7a766f6760574d413126190900000000000b20354a60758a89745746331e0a0000000000000000000000192f44596e848e79644e39240f000000000000000000000000000000000009141d2e37444b56606870787e83888a8e8f9091908e8c88837e766d635b4b46392d2012040000000000000000001d32475d72878a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8b7c66503b26110000000000091d304050616a74766f6158473318080000071c304354606b75756e615746331e0a0000091d314556606c75756d605645321e0900091d304050616a74766f615847331808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b203448596d8296806b5746331a0a000c1c2e3f4b607485917c675948362614010000000000000000000000000000000000000211212e3b474c5c646d74797c7e7f7d7c78726b61594e41302518080000000000000000000000000000000000000000001325365a6f859a8570604e3f2f1f180f0d0d0f161e2b384554607484917c6659483420100000000000000000000000000f24384c5e666f6f6f6f6f6f6f6f6f6f6f6f6e6d6b68646157524b4539301d1409000000000000071c30435472878b76614b36210c0000000000000000000002172c41576c81917b66513c2611000000000000000000000000000000000000011019273138454b525a62686e7276797a7b7b7b7976736e6861584e493d33291b10020000000000000000000013283d53687e7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f79644e39240f0000000000001222334350546060564c473a2a1800000000132536434a556060564c4639291703000002152738454b556060554b453828160200001222334350546060564c473a2a18000000000000000000000000000000000000000000000002090b1316120b070000000000000000000000000913191c1f1d180e020000000000000000000000000000000000000000000000000000000000000000000000000b151b1d1e1b150c0000000000000000000000000000000004172a3a4d62788b8a77624d392917000000111d31445563798a8978625443301c100000000000000000000000000000000000000003111d2a343d4a4e54606467696a6866625a554c473a311c130800000000000000000000000000000000000000000000182d42586d82917c6751423120110400000000030e1a283645566277898877624d3e2e1b080000000000000000000000091d2f404c515a5a5a5a5a5a5a5a5a5a5a59585756534f4b46393632281b120100000000000000001325365a6f858e78634e39230e0000000000000000000000142a3f54697f937e69533e2914000000000000000000000000000000000000000009151d2832363c494d53595660636566666564615859534c473a352c1e170b00000000000000000000000011263a4e60686a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a645c4a36220d0000000000000415253336434b4b4538332a1c0c000000000818253037444b4b453833291b0b000000000a1a273137444b4b443732281a0a0000000415253336434b4b4538332a1c0c000000000000000000000000000000000000000000000a151d20292c27201c13080000000000000000000d1b262e3134322b201202000000000000000000000000000000000000000000000000000000000000000000000f1d2830333330281d0f0000000000000000000000000000000a1f3347586c8196826d5948341b0b00000002152737495b687e938473604b3e2d1b0a00000000000000000000000000000000000000000c181f2d3636434b4f52545453514d493c37342a1c13000000000000000000000000000000000000000000000000152a40556a7f927d68533d281402000000000000000a1827384759677c91836e5c4b37221000000000000000000000000012222f383c4444444444444444444444444342413e3a363229211e160a00000000000000000000182d42576d82907b66513b2611000000000000000000000012273c52677c91816b56412c16010000000000000000000000000000000000000000020a161e212b35383e38454b4e4f5051504f4c473a3e373329211a0f03000000000000000000000000000b1e31424e5355555555555555555555555555555555555555555555555555554e4a3e2d1b07000000000000000715182630353632281f180c00000000000008131c2731353632281e170b0000000000000a151d2731363631271e160a00000000000715182630353632281f180c000000000000000000000000000000000000000000000a1a2832363e413c353025180800000000000000091b2b3842464a473e3020000000000000000000000000000000000000000000000000000000000000000000000b1d2d3a444848443b2d1d0000000000000000000000000000031628394c61778a8c79634e3b2b18000000000009192c3d4e606e83947f695c4a392816030000000000000000000000000000000000000000040f1a212630353a3d3e3f3d3c38352b221f180c0000000000000000000000000000000000000000000000000013283d52687d92806b55402b160000000000000000000a1a2a3b4d5f6f848f7a644f3f2e1b08000000000000000000000004121d24262f2f2f2f2f2f2f2f2f2f2f2f2e2d2c2825211e160b09030000000000000000000000152a40556a7f937e68533e291300000000000000000000000f253a4f647a8f836e59432e19000000000000000000000000000000000000000000000003090e19202329283236393a3b3c3b3937332928211f170c06000000000000000000000000000000021324313a3d3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f39362d20100000000000000000000008141c20211e160a0400000000000000000009151d20201d150a0300000000000000000209151d20201d150902000000000000000008141c20211e160a040000000000000000000000000000000000000000000009192838454b5356524a433625130000000000000013263849565b5f5b4e3e1d0c00000000000000000000000000000000000000000000000000000000000000000115283a4b585d5d584b3b190900000000000000000000000000091e3246576a8095836e5b49351d0d0000000000000f1f31424c6177888b7a645745321e12000000000000000000000000000000000000000000000708141c202427292a28272320190e0a04000000000000000000000000000000000000000000000000000010253b50657a90826d58432d18000000000000000000000d1d30414e64798c85705d4b37220d00000000000000000000000000090f111a1a1a1a1a1a1a1a1a1a1a1a191816130f0c0a03000000000000000000000000000013283d52687d92806b56402b1601000000000000000000000d22374d62778c86705b3828150200000000000000000000000000000000000000000000000000060b0d13161e21242526262624211f17130c0a0400000000000000000000000000000000000006131e26282a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a24221b1002000000000000000000000001080b0b090200000000000000000000000001080b0b090200000000000000000000000002080b0b0802000000000000000000000001080b0b0902000000000000000000000000000000000000000000000001142637455660686b67605443301c0f000000000000192e42566771746c5b3b2a180400000000000000000000000000000000000000000000000000000000000000061b3044586972736958372715020000000000000000000000021527374b6175888f7a654f3d2c1a0000000000000001141f344759667c8d8675604b402f1d0d000000000000000000000000000000000000000000000001080b0f12141513110d0b0600000000000000000000000000000000000000000000000000000000000d23384d62788d85705a36261401000000000000000000001222364a5c6e838f7a654f3b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253b50657a90836d58432e1800000000000000000000000b20354b60758a88735645321d09000000000000000000000000000000000000000000000000000000000003090b0e101111100f0c0a040000000000000000000000000000000000000000000000020b111315151515151515151515151515151515151515151515151515150f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445560747e817c72604a3d2c1a0600000000001c31465b71858a745947341f0b00000000000000000000000000000000000000000000000000000000000000081d33485d728787735544311d080000000000000000000000081d314455697e9385705d4b371f0f000000000000000004182a3a4c5e6c8196816c5e4c3b2a18080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a87725443301c0800000000000000000000071b2d3e4f657a8f836e594834200b0000000000040d14161f15130d0400000000000000000000000000000000000000000000000000000000000000000000000d23384d62788d85705b3726140100000000000000000000081c30435472878a75604b36200b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030c12142015120c0300000000000000000000000000000000080d0f20191711070000000000000b20354b607384939691826d5b4935210c0000000000192e44596e838c77614c37220c00000000000000000000000000000000000000000000000000000000000000051b30455a70858a75604b36200b00000000000000000000001325364b607487917c66513f2e1b010000000000000000000c1c2f404b607486917c665948362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445573888a75604b35200b00000000000000000000001023374b5d71868b77624d37220d00000000081621282b342a28201507000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a88725544311d0800000000000000000000011426365a70858d78634d38230e000000000000000000000000040a0c101213110f09000000000000000000000000000000010a10120c0a04000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e101e13110b010000000000000000000a03000000000000000000000000000000000000000000000001080b10151716130f0d070000000000000000000000000000071520272a352a272015070000000000000000000000000002101b2225352e2c24180a000000000010263b50657b90a2aba08d78634e38230e0000000000162c41566b818f79644f3a240f0000000000000000000000000000000000000000000000000000000000000003182d43586d828d78624d38230d00000000000000000000071c304354687d928673604a3520100000000000000000000000111e32455663798b8877625443301c0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021527375b70858c77624d37220d0000000000000000000000081c2e3f54697e937e69543a2a18040000041626333d404a403c33251503000000000000000000000000000000000000000000000000000000000000000000081d31445573888a75604b35200b0000000000000000000000182d43586d82907a65503b251000000000000000000000060b171f2125272826231c110300000000000000000000000005131e2528211f170c00000000000000000000000000000000000000000000000000000000000000000000000000000003111c23253428251e13050000000000070d0f1f180b07000000000000000000000000000000000000000009151d20252a2c2b2924221b10080200000000000000000000031525323b3f4a3f3c3225150300000000000000000000000010202e373a4a4440362818070000000012273c52677c91a8b5a68f7a654f3a2510000000000014293e54697e917c67513c27120000000000000000000000000000000000000000000000000000000000000000152b40556a80907a65503b2510000000000000000000000b20354a607386927d685443301c070000000000000000000000021628384a5b697e948472604a3d2d1a0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000182e43586d838f7a644f3a250f0000000000000000000000001123384d62788d85705847331f0a00000d21334450555f555043332110000000000000000000000000000000000000000000000000000000000000000000021527375b70858d77624d38220d0000000000000000000000162b40556b80927d68523d28130000000000000000000e19202933363a3c3d3b382f22110000000000000000000000011323303a3d37332a1c0c000000000000000000000000000000000000000000000000000000000000000000000000000011212e373a493d3a31231301000002101b2224342d201c13080000000000000000000000000000000008131c2731353b3f41403e39362d201d15090000000000000000000c2032434f5460544f4332200c0000000000000000000000081b2e3e4b4f60595447362411000000000d22374d62778a9da49c8875604b36210b000000000011263c51667b917e69543f2914000000000000000000000000000000000608000000000000000000000000000013283d53687d927d68523d2813000000000000000000081c2e3f51667c918874604b362513000000000000000000000000000a1a2d3d4a607284937e695b4a3828160200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162b40566b80927c67523d27120000000000000000000000000c2035495a71868a77614c37220c000014283d50626b746a61503f2e1909000000000000000000000000000000000000000000000000000000000000000000182e43586d838f7a654f3a2510000000000000000000000013283e53687d937f6a55402a150000000000000004121e2c353a464c505252504c402f1c09000000000000000000000a1e30414d524c473a2a1704000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b505e534e42311e0b000010202d36394a43353025180800000000000000000000000000000818253037444b50545656534f4a3e3631271910020000000000000012273b4f6169756a614f3c271200000000000000000000000d22374b5c64756e6554402c17020000000b20344859667c888b867a645745321e0900000000000f24394e64798e816c57412c170200000000000000000000000001080b1c1d0d0b05000000000000000000000010263b50657b90806a55402b150000000000000000000e23374b5d7085947f69564531180800000000000000000000000000000f1c3043546277888b79635645321e120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283e53687d937f6a543a2a1704000000000000000000000006192c3c576c81917c66513c27110000162b40556b808a7f6a5d4b372614010000000000000000000000000000000000000000000000000000000000000001162b40566b80927c67523d2712000000000000000000000011263b50667b90826d57422d180000000000000212222f3c494d5861656768665e4c38230f0000000000000000000010253a4d5f67615847331f0a0000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d657368604e3a251100071b2d3e4a4f5f584a433625130000000000000000000000000008182636434a5560656a6c6b68645c544b44372d201002000000000000142a3f54697f8a7f6a543f2a1500000000000000000000000f253a4f647a8a836e59442e190000000005182b3b4c5e66737671645c4a3928160300000000000c21364c61768b846e59442f1900000000000000000000000009141d2031322220190e000000000000000000000e23384d63788d826d58422d180000000000000000071b2d3e50657b908976614c382715000000000000000000000000000000001325364859667c918674604b402f1c0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90826d5847331f0800000000000000000000000012273d52677d92816b56412c1600000b21364b6075878f7b655544311d0c000000000000000000000000000000000000000000000000000000000000000013293e53687e937f6a543f2a1500000000000000000000000e23394e63788e856f5a36251300000000000010202f404c5a636e767a7c7d7c66503b26110000000000000000000012283d52677d76614c37210c00000000000000000000000000000000000000000000000000000000000000000000000010253a50657b897d68533d2813000d22364a5c64746d605443301c1100000000000000000000000114263643546068747a7f81807e79726960554a3e2e211001000000000012273c52677c91816c57422c1702000000000000000000000d22374d62778c86715b38281603000000000d1d2f404c515761574f4a3e2d1b0a0000000000000a1f334658748986715c3a291704000000000000000000000919263135464838352b1e0e0000000000000000000b20364b60758a85705a37261401000000000000000d22364a5c6f8496806b5746331a0a0000000000000000000000000000000008182b3b4c5e6d8196816c5e4c3a2a180400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e63788e8a76614c3625130000000000000000000000000e23384e63788d85705a3928160300091e324557677c918673604b3a2a17040000000000000000000000000000000000000000000000000000000000000011263b51667b90816c5739291603000000000000000000000c21364b61768b87725443301c070000000008182d3e4c5e6678838a8c8a89836e59442f19040000000000000000081d33485d7287816c57362513000000000000000000000000000000000000000000000000000000000000000000000006192c3c586d828d78624d38220d000f24394f64798b8272604a3f2f1e0e00000000000000000000081c30435460727d888e888585888c877f74645c4b3f2e1f0f00000000000f243a4f64798f846f59442f1a00000000000000000000000b20354b60758a88735645321e09000000000012222f3839464b4639362d2010000000000000000417293a5c718689745846331f0a00000000000000000001142637444b5b5d4d483c2b19050000000000000000091d314556738887725544311d080000000000000417293a4f64798e8a77624c3929170000000000000000000000000000000000000d1d30404b617586907c665947341f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b947f695443301c0800000000000000000000000b20364b60758a88735746321e0900031628394d5f6f84937e685847331f0f000000000000000000000000000000000000000000000000000000000000000e23394e63788e846f5746321e0900000000000000000000091e32465773898a75604a35200b000000001325364a5c667c8a887e7774746e6554402c17020000000000000000051b30455a708586715443301c07000000000000000000000000000000000000000000000000000000000000000000000c2035495a728887725a4835200b000d22364a5c687e927f6a5d4c3c2b1a0a0000000000000000071a2d3d4b60728192837973707072777f89867a655d4b3d2c1909000000000d22374c62778c86715c3a29170400000000000000000000081c30435472888b76604b36210b000000000004121c242832363228221b10020000000000000000192f44596e848b76614c36210c000000000000000000081d314455607172625a483520130000000000000000021527385b70858a75604b35200b0000000000000a1f3346586e8397826d5948341b0b00000000000000000000000000000000000000121e324657647a8c8877614c37220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e32455673889c8773604a3626140100000000000000000000081d31445572878b76614b36210c00000a1b30414e63798b8976614c3e2d1a070000000000000000000000000000000000000000000000000000000000000c21364b61768b8976614b37271502000000000000000000031628395c71868c77624c37220d000000071c304354647a8b86776962595e59544736241100000000000000000003182d43586d828974604a35200b000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d816c573c2b190500071b2d3e4e606d828c7b655a4838281502000000000000000c21364a5b6b80937f6e635b5b5b5a62697783897b655b49372614010000000b20354a60758989745847331f0a00000000000000000000011426365b70858d78634e38230e00000000000000090b161e211e160b0700000000000000000002172c41576c818e79634e39240e0000000000000000000b20354b6073858778624d41311d0d0000000000000000182e43586d838d77624d38220d0000000000000c21364c6176838378624d3b2b180000000000000000000000000000000000000000031628394a5c677d847e69543e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628385b71869b887c665443301c0a00000000000000000000021527375b70858d77624d38220d0000001221364a5b6c8196816c5c4a3621130000000000000000000000000000000000000000000000000000000000000a1e3246577389947e695544311d0b00000000000000000000192f44596e848f79644f3a240f0000000b20354a607286897862594d483b44403629190700000000000000000000152b40556a808d78624d38230d0000000000000000000000000000000000000000000000000000000000000000000114263653687e917c67513c2712000000102031424b6074858978625645321d13020000000000031628394e63798b816c614e4a3d3c484d586173828a79635544311d08000000071c30435472878c76614c37210c0000000000000000000000182e43586d83907b65503b261000000000000000000003090c090300000000000000000000000014293f54697e917b66513c2611000000000000000006192c3c51667c9198846f5f4e3b2a180500000000000001162b40566b808f7a654f3a25100000000000000a1f334658616f6e625a48351d0d0000000000000000000000000000000000000000000b1b2d3e4d5f676f69604f3b2712000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000192e43596e8395808673604b38281502000000000000000000001a2f455a6f848e79634e39240e000000071a2d3d4c6176888c79644e41301b0b0000000000000000000000000000000000000000000000000000000000031629395c71869b8774604b39291703000000000000000002172c41576c81917c67513c271200000011263b51667b90806b5a483b342b2f2c24190b000000000000000000000013283d53687d907b66513b2611000000000000000000000000000000000000000000000000000000000000000000081c3043546e838a76614c37210c00000002131d3245566278898574604b423120100000000000091e3245576d828976614c42362d2b343a47556074868573604b362614010000001325365a6f848e79644e39240f0000000000000000000001162b40566b80927d68533d2813000000000000000000000000000000000000000000000000000012273c51677c917e69533e291400000000000000000c2135495b6f849882927d685947341f120000000000000013293e53687e927d67523d28120000000000000417293a464c59594d483c2b190000000000000000000000000000000000000000000000102030414d525a544f42321f0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001162c41566b818f7b877d675645321d0f00000000000000000004192e44596e838f7a644f3a250f000000000f1f334658687d9285705f4d392816030000000000000000000000000000000000000000000000000000000000192f44596e8499897d685746331e0f000000000000000000142a3f54697f947e69543f2914000002182d42576d828d78624d3c2b20181917110700000000000000000000000010253b50657a907f69543f2a140000000000000000000000000000000000000000000000000000000000000000000b20354b60748986715847331f0a0000000002152838485a657b8c826d604e3e2d1c0c000000000b21364b607689816c574633211a19202a374455647a8b7e695443301c08000000182d42576d82917b66513c2611000000000000000000000013293e53687e93806a55402b1500000000000000000000000305030100000000000000000000000f24394f64798e816b56412c1601000000000000031628394d63788b8576868977624c40301b0b00000000000011263b50667b907f6a553f2a15000000000000000b1b293336444438352b1e0e000000000000000000000000000000000000000000000002132330393d443e3b3224140200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014293e54697e917c7e8774604b3d2d1a0a0000000000000000051a2f455a6f848e79644e39240f000000000417293a4a607285927d675746321e0e0000000000000000000000000000000000000000000000000000000001172c41566c8196818876614b3d2c1a0a000000000000000013283d52687d92806b56402b160000071c31475c718688735a49351e0e05000200000000000000000000000000000e23384d63788d826d583625130000000000000000000000000000000000000000000000000000000000000000000f24394f64798e806b563a2a170400000000000a1a2b3c4c5d6a7f937e685c4a3a2a190900000010253a50657a8f7b665139291707050c1927374b5c6e838773604b35200b000000152a40556a7f937e69543e2914000000000000000000000011263b51667b90826d58422d180000000000000000000812181a181610060000000000000000000c22374c61778c836e59432e1900000000000000091e3245576c81927d677b8d836e5e4c3a29170400000000000e23394e63788e826d57422d1800000000000000000b171f212f2e2320190e0000000000000000000000000000000000000000000000000005131e25282f29271f14060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b917e7386806b5c4a38271502000000000000000417293a5b70858d78624d38230d00000000000b1c304354647a8c8875614b3c2c19060000000000000000000000000000000000000000000000000000000014293f54697e917c86806b5b49382715020000000000000011263b51667b90826c57422d170000091e34495e738986705b3c2c190000000000000000000000000000000000000b20364b60758a86705443301c07000000000000000000000000000000000000000000000000000000000000000215273854697f907b65503b2610000000000000000e1e2f3f4a6072838b7a645847372614010000142a3f54697f8c77624c37220d00000009192e3e51667b907c66513c261100000012283d52677d92816b56412c1601000000000000000000000e24394e63798e856f5a36251300000000000000000b19252d2f2d2b23170900000000000000000a1f334758748986705b382816030000000000000b21364b6075898875606c81917c665846331f1100000000000b21364b60768b846f5a362513000000000000000000040a0c1a190d0b06000000000000000000000000000000000000000000000000000000010a10121a14120c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e816b7a8b79645645311d14050000000000000a1f33475872888b76614b36210c0000000000001325364a5c6d8295806b5a493520120000000000000000000000000000000000000000000000000000000012273c51677c917e7c8b79635645311d12030000000000000f253a4f647a8f836e58432e1900000a1f344a5f748985705a45301b000000000000000000000000000000000000091d31455673888974604a35200b00000000000000000000000000000000000000000000000000000000000000091d3145566f848a75604b36210b0000000000000000111c3043546176868776615544311d120101162c41566b818a75594834200b000000001020354b607488836e583c2b1906000010253a50657a8f836e59432e1900000000000000000000000c21364b61768b87725443301c07000000000000081929374145423f352717060000000000000004182a3a5c718788735645321e090000000000081b2e3f53687d92806b566175878876614c3f2e1a0a00000000091e324556738887725443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768c836e6c818574604b433223140300000000000c21374c61768c87725746331e0a00000000000008182d3e4c6177898b78634d402f1a0a0000000000000000000000000000000000000000000000000000000f243a4f64798f806e838574604b4030211102000000000010253a50657a8f836e58432e190000091e33485e738886715c3a2917040000000000000000000000000000000000021527385b70858d77624d38220d000000000000000000000000000000000000000000000000000000000000000b20364b607589856f5645321e09000000000000000000132536465863798a8473604b40301f0f00182d42586d8289735e3b2b180500000000081c3043546d8288735a4835200b00000d23384d62788d86715b38281603000000000000000000000a1e33465774898a75604a35200b00000000000012253747545a58524535231000000000000000001a2f44596f848b76604b36210b00000000000d22374b5d71868b78624d57667c90816c5d4b38281603000000031628385b71868a75604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f33475874898570607586826d614f41311e160a00000004172a3a50667b90836e593929170300000000000000101f344759697e93836f5e4c3827150200000000000000000000000000000000000000000000000000000c22374c61778c826d7788806b5e4d3f2e2012020000000010263b50657b90826d58422d180000071c32475c718788735847331f0a000000000000000000000000000000000000182e43586d838f7a654f3a25100000000000000000000000000000000000000000000000000000000000000010253a50657a8f7f6a55382816030000000000000000000818293a4a5b677d92806b5e4d3d2c1b0b182d43586d8288735e38281502000000000114263653697e8d78624d38230d00000b20354b60758a88735645321e0900000000000000000000031729395c71868c77624c37220d000000000003182d4154656f6d64523f2b160100000000000002172c42576c818d78634e38230e0000000004182a3b4f647a8f846f5a494c5e6d828d7b655645321e1000000000192e43596e838c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a5c718687725763798a7f695f4e4232281c130d0d141f3347586d82937d68533e2813000000000000000004182a3a4b607386907c665645311d0d00000000000000000000000000000000000000000000000000000b1f3447597489856f667c8c7c665d4b3e301e160a00000013283d53687d92816c56412c17000004192e43596e838a76614c37210c000000000000000000000000000000000001162b40566b80927d67523d281200000000000000000000000000000000000000000000000000000000000003172939556b808f7a644f3a240f00000000000000000000000b1b2d3d4d5f6c81917c665b49392916172c41566c818a745645321d09000000000010253b50657a907c66513c27110000081d31445572888b76604b36210b00000000000000000000001a2f44596f848f79644f3a240f0000000000051a2f455a6f83826d58422d180000000000000000142a3f54697f907b66503b2611000000000b1f3447596d82907b66513c404c6177888775604b3e2d1909000001162c41566b818f7a644f3a250f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a2f44596f848a74585b667c8b7d68604b4538302522222630414c6176898a77614c37220c0000000000000000000c1d314455657b8f8774604b3b2b18050000000000000000000000000000000000000000000000000004182a3b5c728787725e6a808b7b655c4d4032281c130e0e182d3d566b80937d68533e2813000000142a3f54697f907b66503b261100000000000000000000000000000000000013293e53687e937f6a553f2a150000000000000000000000000000000000000000000000000000000000000a1e33465770858974604b35200b0000000000000000000000000f1f30414b6073848a79635746321e152b40556a808b75604b36200b00000000000e23394e63788e7d68533d28130000011527375b70858d78634e38230e0000000000000000000002172c42576c81917c67513c2712000000000003182d43586d8285705b3b2b18050000000000000012273c52677c917d68533e2813000000011426374c61778a8773604b35344759677d92806b5c4a37271501000014293e53697e927c67523d271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002172c41576c818c77614c5e687d8c7e6c60564a4336383836434b5f6c8196826d5847331f0a000000000000000000011426374b5d6e83947f6a594834201000000000000000000000000000000000000000000000000000001a2f455a6f84897457607282897a665e4b45383025232328364a5b71868f7a644f3a240f0000000f24394f64798e806b563d2d1a07000000000000000000000000000000000011263b50667b90826d57422d180000000000000000000000000000000000000000000000000000000000000c21364c61768a836e5544311d0800000000000000000000000001131d3144556277888675614b433221293e54697e8c77624c37220d00000000000d22374c62778c7f69543f2a14000000182e43586d83907b65503b26100000000000000000000000152a3f546a7f947e69543f2914000000000001162b41566b808974594834200b000000000000000f243a4f64798f806b55402b16000000081d3144556a7f947f695443302a3a4d5f6f848c7a645544311d0f000011263c51667b917f6a543f2a1500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000142a3f54697f8e79644e4e5f687e8b8175666054504d4d4f5460697d8d8a77624d3a2a18040000000000000000000009192e3f4d62778a8a77624d3f2e180800000000000000000000000000000000000000000000000002182d42576d828b7661546073828a7c6b60564a4336383838455463798e8874604b35200b0000000d22364a5c728787725b4a36210c00000000000000000000000000000000000e23394e63788e846f5a36251300000000000000000000000000000000000000000000000000000000000011263c51667b917e69533726140100000000000000000000000000011527374859657b8c836e614f3f2e263b50657b907b66503b261100000000000c21364c61768b806b56402b16000000162b40556b80937d68533e2813000000000000000000000012273d52677c92816c56412c1701000000000014293f54697e8c77624d37220d000000000000000d22374c62778c836d58432e180000000b20354b6074878a77614c36261c30414d6278898673604b3d2c1808000e24394e63798e826c57422d170200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273c52677c907b6651414e60687b88877c736a6562626469737f8c8d7c665948341c0c00000000000000000000000011203448596a7f94826d5d4b36261401000000000000000000000000000000000000000000000000152a3f556a7f8d78634e556073828d8075666054504e4e5056607284957f6a5544311d08000000071b2d3e566b808e79634e39240e00000000000000000000000000000000000b21364b60768b87725443301c070000000000000000000000000000000000000000000000000000000005182a3b566c818d78634e38230e00000000000000000000000000000009192b3b4b5d697e937f695d4b3b2b364b61768a7f6a553b2a1804000000000c22374c61778c806b56402b1600000013283e53687d93806b55402b16000000000000000000000010253a4f657a8f836e59442e1900000000000012273d52677c907b65503b2510000000000000000b1f344859748985705b372715020006192c3c51667c91826d58473318132034485a697e937f6a5b49362513000c21364c61768b846f5a442f1a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f64798f7d68533e414e5d6577828c877f7a77777a7f86948a7d675e4d3b2b180000000000000000000000000005182b3b4b6074878f7a655443301c0c00000000000000000000000000000000000000000000000012283d52677d907a65504455606d7e8a877c736b666363656a7482978675614b372614010000000010243a4f647a8f7f6a553c2c190600000000000000000000000000000000091e32455773888975604a35200b000000000000000000000000000000000000000000000000000000000b1f344859718688735b4935210c000000000000000000000000000000000d1d2e3f4f616d828c7b655948383346577186846f5947341f0b000000000e23384d63788d7f69543f2a1400000011263b50667b90826d5837271502000000000000000000000d22384d62778d86715b38281603000000000010253b50657a907e69533e29140000000000000005182a3b5c728788725544311d08000c2135495b6f848f7a644f3a2a1705192b3c4a6072858b79635443301c0d0a1e334657748987725c3b2a18040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778c7e68533d313f4b59626d7a838a8f8d8d8f908a8378675f4d40301d0d00000000000000000000000000000d1d314556667c908673604b3a2a1704000000000000000000000000000000000000000000000010253a50657a8f7d675237444b606879848f87807b78787a7f8797877963574632190900000000000d22364a5c728786715a4935200c00000000000000000000000000000000031628395b71868c77624c37220d000000000000000000000000000000000000000000000000000000000d22374c62778c826d583d2c1a060000000000000000000000000000000000102132424b61758688786256453139556b808a77614c3a29170400000010253a50657a8f7d68523d28130000000e23384e63788d85705544311d09000000000000000000000b20354b60758a88735645321e0900000000000e23394e63788e816c57412c1700000000000000001a2f455a6f848a75604b36200b031628394d63788b86715c4b371c0c000d1c30435463798b8572604a3c2b19051729395c718689745947341f0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f344859707772604a35202e3b474c5c646e767b7e7f7d7b766e635a4d41312212000000000000000000000000000000021527384c5e6f83937e685847331f0f00000000000000000000000000000000000000000000000d22384d62788d7d67523d31424e5b636f7a8389908d8d90918a8277635b4a392816000000000000071b2d3e566b808d78634d38230e0000000000000000000000000000000000192e43596e838f79644f3a240f0000000000000000000000000000000000000000000000000000000012273d52677d927d67523d281200000000000000000000000000000000000003141e3246576379898574604b41384d63788b7f695846331f14070006192b3c54697e8e79634e39240e0000000b21364b60768b8875604b37261401000000000000000000081d31445573888b76604b36210b00000000000c21374c61768c846f5a3828150200000000000002172d42576c828d78624d38230d091e3245576c81927d68533e2e1b000000132536495b6a7f937e685a48342013192f44596e848c77614c37220c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b485a62605443301c1d2a343e4a4f576165696a686661584d493c31231304000000000000000000000000000000000a1a2f404d63788a8976614c3d2d1a07000000000000000000000000000000000000000000000b20354a60727772604a3520313d494e5d656e757a7d7f7e7b766d61594a3d2d1b0b000000000000001024394e64798e7f6a543c2b190500000000000000000000000000000001162c41566b81917c67523c271200000000000000000000000000000000000000000000000000000006192c3c586d828c77624d37220d0000000000000000000000000000000000000003162839495b667c8d816c5f4e3e495a6e838876614c4231201c13172035485a6f848974604b35200b000000091e3245567388927d685544311d0a000000000000000000011527375b70858d78634e38230e00000000000a1f334758748a87725645321d0900000000000000152a3f556a7f8f7a65503a25100b21364b6075898975604b36211000000008182c3d4b6073868978624d41301c172c41566c818f79644f3a240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b3c484d4a433625130d181f2e3639464b50535553514c463a352c1e1305000000000000000000000000000000000000122035495a6b8095816c5c4a36211300000000000000000000000000000000000000000000071c3043546062605443301c1f2c363f4b4f566065686a686661584c473a2d1f0f00000000000000000d22364a5c728786705a4835200b0000000000000000000000000000000014293e53697e937f69543f2a140000000000000000000000000000000000000000000000000000000c2135495b72888771594834200b00000000000000000000000000000000000000000b1b2c3c4c5e6b80927d685c4a3c4d62788a816c604e423530252a33424d62788b816c5443301c08000000031628385b71869b8774604b39281603000000000000000000192e43586e83907b65503b2610000000000004172a3a5d72888a75604b36200b0000000000000012273d52677c927d68523d28131b2e3f53687d92816b5645321e09000000000f1d314455647a8c846f5f4d3a2a18293f54697e917c67513c271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1d2b343835302518080005101b222932363b3e3f3e3b36332920190e000000000000000000000000000000000000000006192c3c4b6075878c79644e41301b0b00000000000000000000000000000000000000000000132536434a4d4a433625130f1a212e3738454b50525453514c463a342a1c0f010000000000000000071b2d3e556b808d78624d38220d0000000000000000000000000000000011263c51667b91816c57412c170200000000000000000000000000000000000000000000000000000e23384d63788d816c573b2b1805000000000000000000000000000000000003090b0c0e1e30404b6072848b7a645847495a687e8b7e68604f4a43363a474c616e838b79634e3626140100000000192e43596e8398927d675745321e0e000000000000000001162b41566b80927d68533d28130000000000001b30465b70858d78634e38230e0000000000000010253a4f657a8f7f6a55402a1522374b5d71868b78634d3828160300000000011527374a5c6b80927d675847331f273c51667c917f69543f2a140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d192022201c130800000000070b161e2126292a2826211f170b06000000000000000000000000000000000000000000000e1e324557677c9185705f4d3928160300000000000000000000000000000000000000000008182530353835302518080006101b222832363b3d3f3e3c3633291f180c00000000000000000000001024394f64798e7e69533e2914000000000000000000000000000000000e24394e63798e846f59442f1a00000000000000000000000000000000000000000000000000000114263653687e917c66513c2611000000000000000000000000000000070d0f161e2122201c1c30435461768787766154434e606a808c7e70656054565758616c7f93806b5b493618080000000001162c41566b8196868775604b3c2c1909000000000000000014293f54697e947f69543f2a14000000000003192e43586e83907b66513b2611000000000000000d22374d62778c826d57422d182a3b4f647a8f846f5b49351a0a00000000000009192d3e4b6075878877614c402f24394f64798e816c57412c1702000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d0b070000000000000000030a0c10141513110c0a04000000000000000000000000000000000000000000000000031628394d5f6f84927d675746321e0e0000000000000000000000000000000000000000000008131c2022201c130800000000080a161e2125282a2926211f170c040000000000000000000000000b20354b607589836d58432e18000000000000000000000000000000000c21364c61768b86715c3a29170400000000000000000000000000000000000000000000000000081c3043546e838a76614c36210c0000000000000000000000000001101b22242832363735302526364758647a8b8372604b4250626a7f8a857a746e6c6c6f7681938273604b3d2c1a00000000000014293e54697e937f88806b5b49372715020000000000000013283d52687d92806b56402b16000000000001162b41566b80937e69533e2914000000000000000b20354b60758a856f5a36261f3447596d82917c66513c2c190000000000000000101e324556657b8d826d5e4c3929374c61768c846f59442f1a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b30414e63798b8875614b3c2c19060000000000000000000000000000000000000000000000070b0d0b07000000000000000002090b10131513110c0a040000000000000000000000000000081d314455708587725d372715020000000000000000000000000000000a1e334657748989745847331f0a000000000000000000000000000000000000000000000000000b20354b60748985705846331f0a00000000000000000000000009141d2e363a38454b4c4a433639363a4a5c687e93806a5e4c4350616979848d88838181848b898073605544311f0f00000000000011263c51667b91817e8b78635544311d120300000000000011263c51667b91826c57422d1700000000000014293e53697e93816b56412c1601000000000000081c3043547287877254433026374c61778a8774604b35200e0000000000000000031628384b5d6d82907c66574633334758748986715c3a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b1c1f100e08000000000000000000000000000000000000040a0c1d200e0c0600000000000000000000000000000000000000000000001221364a5b6c8195806b5a493520120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142637596e8389745544311d08000000000000000000000000000000031729395c71868c76614c37210c000000000000000000000000000000000000000000000000000f24394f64798e806b553a2917040000000000000000000000091926313e4a4f585660616054564e4a3e3e4e606d818d7c665a49434f5b636f787e828485837e776a605544372715010000000000000f24394e64798e8474858574604b4030211102000000000012273c51677c91816c57422c1700000000000011263c51667b91836e59442e1900000000000000011426365a6f858a75604b353144556a7f947f6a5544311d080000000000000000000a1a2e3f4c6176888775614b3f2e3a5c718789745847331f0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21313425231c11030000000000000000000000000000000c171f21323523211a0e00000000000000000000000000000000000000000000071a2d3d4c6176888a78634d402f1a0a000000000000000000000000000000000000000000000000000000000000000000000000000002090b120f0d070000000000000000000000000000040a172c42576c818b75604b36200b00000000000000000000000000000000192f44596e848e79644e39240f0000000000000000000000000000000000000000000000000215283854697f907a65503b2510000000000000000000000001142637444b5c646d73767775726b645c4d48424b60748589786357453d494e5a62696d6f706e6962594b4437271909000000000000000c21374c61768c8771788a806b5e4d3f2e2012020000000012273d52677c92816b56412c160000000000000f24394e64798e86715b3929160300000000000000182d42586d828c77624d37354b6074878a77614c3726140100000000000000000000111f334658667c91816c5d4b3844596f848c76614c37210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a28323646493a372e211100000000000000000000000000000c1c293336474a38352c1f0e000000000000000000000000000000000000000000000f1f334658687d92836f5e4c382715020000000000000000000000000000000000000000000000000000000000000000000000000a161e212724221b100200000000000000000000000c171f212e3f586d828a75604a35200b00000000000000000000000000000001172c41566c81917c66513c2711000000000000000000000000000000000000000000000000091d3245566f848975604b36200b00000000000000000000000a1d314455606c7a82888b8c8a8780796e62594a45566278898675604b42353c484d54585a5a58534c483b3127190900000000000000000a1f33475874898974687e8d7c665d4b3e301e160a00000013253654697f947f6a55402a150000000000000c21364c61768b89735746321e0a00000000000000152a40556a7f8f7a644f3a3c51667c91836d594734190900000000000000000000000417293a4c5e6e838d7b65564542576c818e79644e39240f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002162838454b5b5e504b3f2e1d0d0000000000000000000000000417293a464c5c5f4e493d2c1a060000000000000000000000000000000000000000000417293a4a607285907c665645311d0d00000000000000000000000000000000000000000000000000000000000000000000000a1a2832363d3a362d2010000000000000000000000c1c2a33373c4b5d718687715443301c070000000000000000000000000000000014293f54697e937e69543e29140000000000000000000000000000000000000000000000000b20364b607589846f5645321d09000000000000000000000a1a31424b6073818a87807c7a7c7f868e8377645c4b485a657b8c826d604f3f2e35383f424545433e37342b1d15090000000000000000000417293a5c71868c76616c818b7b655c4d4032281c130e0e1c3043546d82917c67513c27120000000000000a1f33465874898b76614b36210c0000000000000013283d52687d917c67523c495b6f848f7a654f3b2a18000000000000000000000000000b1b30404c6277898674604b3d54697f917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556607174655d4b3c2b1a0a00000000000000000000000a1f334658617275635b4935210c000000000000000000000000000000000000000000000b1c304354647a8c8774604b3b2b180500000000000000000000000000000000000000000000000000000000000000000002162838454b524f4a3e2d1b07000000000000000004172a3a474c4f5a657b8f7f6a55362513000000000000000000000000000000000011273c51667c91816b56412c1601000000000000000000000000000000000000000000000010253a50657a8f7f695438281502000000000000000000021528384e606e82937f746b6765676a717b86897a645c4b4c5e6a7f937e695d4b3b2b22292d2f302e292220180d0100000000000000000000001a2f44596f848e79646073838a7a675f4b45383025232329374a6073888d78634e38230e0000000000000417293a5c71868e78634e39230e0000000000000010253a50657a8f7f6a54394d63788b86715d4b371d0c0000000000000000000000000000121f344759687d92806b5c4a52677c917e69543e291400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607685897b655a483828150200000000000000000005182b3b4c6176868c78634e38230e00000000000000000000000000000000000000000000001325364a5c6d82947f6a5948342010000000000000000000000000000000000000000000000000000000000000000000091e3245566067645c4a36220d00000000000000000a1f33475861646a78878775614b36210c00000000000000000000000000000000000f24394f64798e836e59442e19000000000000000000000000000000000000000000000003172939556b808e79644f39240f00000000000000000000091d324556687d927e6a6056515052555d6574838a7a6457464a6072838c7b655948372715181a1b19140d0b0500000000000000000000000002172c42576c81917c66556075838a7c6b60564a43363838394655657b9086715b4935210c00000000000000192f44596e84907b66513b2611000000000000000d23384d62788d816c5745576c81937e68533f2e1b00000000000000000000000000000005182a3b4e606f848b7964554f64798f816c56412c170100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566278898878625645321d130200000000000000000b203448596b8095816c5b4935210c000000000000000000000000000000000000000000000008182d3e4c6177898a77624d3f2e180800000000000000000000000000000000000000000000000000000000000000000b21364b60747d7a644f3a240f00000000000000000c21374c61767a80898678625746321e0a00000000000000000000000000000000000c22374c61778c86715b39281603000000000000000000000000000000000000000000000a1e33465770858974604b35200b000000000000000000000b20364b607588846f614b45383b3c3f4b566074848775614b43546176878877625544311d130105030000000000000000000000000000000000142a3f54697f937e6954576074828d8075666054504e4e5057617486937e69543d2c1a0600000000000002172c41576c81937e68533e2913000000000000000b20354b60758a846f5a4b6075898975614b362110000000000000000000000000000000000d1d31414d62788a8573604c62778c836e59442e19000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002162838485a657b8c8574604b4231201000000000000000061a2c3d4d62778a8977624c3d2c1a06000000000000000000000000000000000000000000000000101f344759697e93826d5d4b362614010000000000000000000000000000000000000000000000000000000000000012273d52677d92826d58422d180000000000000000162b40566b808f8a8175635b4c402f1e0e00000000000000000000000000000000000a1f334758748989735746321e09000000000000000000000000000000000000000000000c21364c61768a836e5443301c080000000000000000000012283d52677d907b655042312725272e38455662788a816c5a49465863798a8474604b41301f0f0000000000000000000000000000000000000012273c52677c91816c56455660727f8b877c736a656363656b7583998574604b36200e000000000000000014293f54697e94806b56412b1601000000000000081d314455728887715c53687d92816c5746321e090000000000000000000000000000000000132035495a697e937f695a59748986715c3929170300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3c4b5d697f94816c604e3e2d1c0c0000000000000c2135495b6c8295806a5947341f0e0000000000000000000000000000000000000000000000000004182a3a4b6073868f7a655443301c0c0000000000000000000000000000000000000000000000000000000000000011273c51667c91856f5a36261401000000000000000d22374d62777c80888579655e4c3c2b19060000000000000000000000000000000004182a3a5c71878b76614b36210c0000000000000000000000000000000000000000000011263c51667b917e68533626140100000000000000000003162939596e838874604a35201510121a2838485a697f8b78634d3a4a5b677d92816c5f4d3d2d1c0c0000000000000000000000000000000000000f253a4f647a8f836e5938455460697a859087807b78787b8088978778635645311d09000000000000000012273c51677c91836e58432e1900000000000000011527375b70858974585d71868e79634e39281603000000000000000000000000000000000006192b3c4b6073858a786354728789735746331e0a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2f3f4f616e82927d685c4a3a2a180800000000071b2d3e4e63798b8875614b3b2a180000000000000000000000000000000000000000000000000000000c1d314455657b8f8673604b3a2a17040000000000000000000000000000000000000000000000000000000000000f24394f64798e87725443301c08000000000000000b2034485962666b76828a7c655a4935200e00000000000000000000000000000000001a2f445a6f848e78634e39230e00000000000000000000000000000000000000000005182a3b576c818d78634d38230e000000000000000000000a1e3246577388836e5443301c0700000a1a2b3c4c617689816c56453d4d5f6c81927d675b4a3a29180800000000000000000000000000000000000d22374c62778c86715c3936434a5c64707b8489908d8d9090898276635a493827150200000000000000000f24394f64798e85705b3828150200000000000000182d43586d828c7761647a8f846f5b49351b0b000000000000000000000000000000000000000e1c30435463798b8472606f848b76614b36210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000112132434b6175868b7a645847362614010000000822364a5c6e83937e685746321d0d000000000000000000000000000000000000000000000000000000011426374b5d6e83937e685847331f0f0000000000000000000000000000000000000000000000000000000000000c21374c61768c8a75604b35200b0000000000000005182b3b484d51576172838a78624d3c2c190600000000000000000000000000000002172c42576c81907b66503b26110000000000000000000000000000000000000000000b1f344859718788725a4935200c000000000000000000000c21364b61768b7f6a55362513000000000e1f3346586d828975604b36414b6074848a7963584636251300000000000000000000000000000000000b20354a60758a8973574632303e4a4e5d656e767b7d7f7d7b766d6158493c2c1a0a0000000000000000000c22374c61778c88735645321d0900000000000000162b40556b808e79646d82917c67513d2c1a0000000000000000000000000000000000000000011426364a5b6a80937e686c828e79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003151e3246576378898776615443301c12000008182f3f4f647a8e8774604b392916000000000000000000000000000000000000000000000000000000000009192e3f4d62788a8976614c3d2d1a0700000000000000000000000000000000000000000000000000000000000a1f33475874898c77624d37220d00000000000000000d1d2b3437394654617789836e5b4935210c00000000000000000000000000000000152a3f546a7f937e68533e29130000000000000000000000000000000000000000000d22374c62778c826d573c2c1906000000000000000000000d22384d62778d7e68533e2913000000000417293a51667b8f7a65503a3144556277888776615443301c1100000000000000000000000000000000071c30435472878b76614b36212d363f4b50576065686a686661574c463a2c1e0e000000000000000000000a1f34475974898a75604b36200b0000000000000013283d53687d917c66778a8874604b35200f00000000000000000000000000000000000000000008182d3d4b60748689776a7f907b66513b2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162839495a667c8d8472604b40301f0e001325364c5d6f84917c675544311b0b00000000000000000000000000000000000000000000000000000000000011203448596a7f94816c5c4a362113000000000000000000000000000000000000000000000000000000000004172a3a5c71868f7a644f3a250f0000000000000000000d182022293647596c818b78634d38230e0000000000000000000000000000000012273c52677c91806b56402b1608080808080800000000000000000000000000000012283d52677d927c67523d271200000000000000000000000e23394e63788e7d67523d281200000000000c21364c61768b7f6a553f27374859657b8c8372604a402f1e0e000000000000000000000000000000001325365a6f858e78634e39231b222f3839454b50535453514b463933291b0e000000000000000000000004182a3a5c71878d78634e38230e0000000000000010263b50657b907e6a7f94806a5544311d08000000000000000000000000000000000000000000000f1d314556647a8c836e7c927e69533e29140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3c4c5e6a7f95806b5e4c3d2c1b0b1c304354657b9085705f4d3727150000000000000000000000000000000000000000000000000000000000000005192b3b4b6074878b79644e41301b0b0000000000000000000000000000000000000000000000000000000000192f44596e84927c67523d271200000000000000000000050b0d182a3a50657a8f7e69543e29140000000000000000000000000000080d0f253a4f647a8f836e58432e1d1d1d1d1d1d1d0f0d070000000000000000000000061a2c3d586d828a77624c37220d00000000000000000000000d23384d62788d7d68533d281300000000000a1f3346587288846f59442f2b3b4b5d697e947f6a5e4c3c2b1a0a000000000000000000000000000000182d42576d82907b66513b2611111c232832363b3d3f3e3b3632291f170b000000000000000000000000001a2f445a6f84907b65503b2610000000000000000e23384d63788d8173878a77624d3727150100000000000000000000000000000000000000000000021527384b5c6c81917c7a8f806b56412b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1e2f404a6072838d7c665b4939281627374a6072858f7a654f4030190900000000000000000000000000000000000000000000000000000000000000000d1d314556667c9084705f4d39281603000000000000000000000000000000050b0d111314120e0c06000002172c41576c81947f6a543f2a15000000000000000000000000000c21364b61768a836e58432e1903000000000000000000000002101b22252f374c62778c85705b38273333333333333324221b10020000000000000000000c2135495b728886715947341f0b00000000000000000000000c21374c61768c7e69543f291400000000000417293a5a708586715c47311d2e3f4f616e828c7c665a49382816030000000000000000000000000000152a40556a7f937e68533e291300080a161e2126282a2826211e160b040000000000000000000000000002172c42576c81927d68533d2813000000000000000b20364b60758a837c91836e59483419090000000000000000000000000000000000000000000000000a1a2e3e4b61758788798e836e59432e190000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000121c3043546175868979635746321e314455677c91836e5d4b372212000000000000000000000000000000000000000000000000000000000000000000021527384c5e6f83917d675746321e0e00000000000000000000000000080d1820222628292723211a0e090214293f54697e94816c57422c17020000000000000000000000000a1e324657738985705a45301b05000000000000000000000010202e373a44454a60758a88735645484848484848484839362d20100000000000000000000e23384e63788d816b563b2a180500000000000000000000000b20354b60758a806b55402b16000000000000192e43596e8388735d3726142132434b6175868978625645321e14020000000000000000000000000013283d52687d92806b56412b1601000003090b10131513110c0a0300000000000000000000000000000000152a3f546a7f94806b55402b1600000000000000091d31455673888584907b65503b2b180000000000000000000000000000000000000000000000000000101e324657657b90828b86705b392816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000132536465763798a8675614b4332394b6074878b79634e3f2e1c04000000000000000000000000000000000000000000000000000000000000000000000a1a2f404d63788a8875614b3c2c19060000000000000000000002101b222b34373b3e3e3c38352c211e1611273c51667c91846f5a442f1a00000000000000000000000000031629395d728786715b46311c0600000000000000000000081b2e3e4b4f595a5b5472878a75605d5d5d5d5d5d5d5d5d4f4a3e2d1b07000000000000000114263653687e907b66513b2611000000000000000000000000081c3043547388826d58392917030000000003182d42586d8289745544311d141e3246576379898575604b423120100000000000000000000000000010253a50657a8f836e58432e1900000000000000000000000000000000000000000000000000000000000012273c52677c91826d58432d1800000000000000021527385b70858a8a86715d4b371d0d0000000000000000000000000000000000000000000000000000031628394c5d6d82978a88735745321e09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182939495b677c91826e614f3f4557687e93826d5b49362111000000000000000000000000000000000000000000000000000000000000000000000000122035495a6b8095806b5a493520120000000000000000000714202e373b484c515353524e493d3632281a24394f64798e87715c3a2a1804000000000000000000000000001d32485d728786705b46311b06000000000000000000000d22374b5c646f70707172848d7872727272727272727272645c4a36220d00000000000000081c3043546e838a76614b36210c00000000000000000000000001142636596e8487725746331e0a0000000002182d42576d828a75604b35200b162839495b667c8d826d604e3e2e1d0c0000000000000000000000000d23384d62788d85705b3828150200000000000000000000000000000000000000000000000000000000000f253a4f647a8f85705b3727150100000000000000182e43586d8398937e69533f2e1c000000000000000000000000000000000000000000000000000000000b1b2f3f4c6176889d8b76604b36210b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1b2c3d4d5f6b80947e695d4b4b6075888a77624d3d2c1a0300000000000000000000000000000002090b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b192c3c4b6075878a78634d402f1a0a00000000000000061425323e4b4f596266686967635b544b45382f21374c61768c89745847331f0a000000000000000000000000011527375e738885705b45301b06000000000000000000000f253a4f647a83858687878a9d88878888888888888888877a644f39240f000000000000000b20354b60748985705746321e0a00000000000000000000000000152a3f546a7f8a76614c36210e0000000003192e43586e8389745544311d080b1b2c3d4c5e6b80937e685c4b3b2a190900000000000000000000000b20364b60758a88735645321d0900000000000000000000000000000000000000000000000000000000000d22374d62778c88725544311d0800000000000001162b40566b80958a76614c3621110000000000000000000000000000000000000000000000000000000000111f334758677d918e78634e39230e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30404b6072848c7b6559586a7f94806b5948341f0f0000000000000000000000000000000a151d20212121212121212121212121212121212121212121324557677c91836f5e4c38271502000000000000132432434f5c646f777b7d7e7c78726960564c403033475874898c77614c37220c000000000000000000000000081d3144557489846f5a452f1a05000000000000000000000f243a4f647a8081818180849983818181818181818181807a644f39240f000000000000000f24394f64798e806a5539291603000000000000000000000000000f253a4f647a8f7c67523d2c1a0600000005192b3c5a6f8488735e48261401000e1f30404b6073848b7a6459473726140100000000000000000000081d31445573888a75604b36200b00000000000000000000000000000000000000000000000000000000000b20354a60748a8a75604b35200b0000000000000011263c51667c847e685746331e0a000000000000000000000000000000000000000000000000000000000004172a3a4d5f6a7f847a644e39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121c3043546176878877626176898876614c3b2b18010000000000000000000000000003111a27313636363636363636363636363636363636363636363636394d5f6f84907b665645311d0d00000000000e1e31424f61697a848a90908e8f8d877f75665e4b43363a5c71868e79644f39240f0000000000000000000000000b20354b60758a836e58432e1903000000000000000000000d22364a5c646b6b6b6b6b7d937e6b6b6b6b6b6b6b6b6b6b645c4a36220d00000000000002152838546a7f8f7a654f3a251000000000000000000000000000000d22374b5c7186846f5b493521140300000b2034485a738885705b45301b000000121d3144556176878877615544311d1201000000000000000000021527375b70858d78634d38230e0000000000000000000000000000000000000000000000000000000000071c3043546d828377614c37220c000000000000000f24384c5e666f68604e392917030000000000000000000000000000000000000000000000000000000000000c1c304150616a6f645c4a36220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364758647a8a85746b80937e695746331d0d000000000000000000000000000011212f38454b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4e63798b8774604b3b2b180500000006192c3c4e60697f8b91857e7a797a7d848a877c6b60544538596e84917c66513c27110000000000000000000000000c22374c61778c816c57422c170200000000000000000000071b2e3e4a4f56565656657b90816c5756565656565656564f4a3e2d1b07000000000000091d3245566f848975604b36200b0000000000000000000000000000081b2e3e53697e8c78634e42311e160d0c1628384d62788d806b56412b16010000011426374758647a8b8473604b41301f0f00000000000000000000182e43586d83907b65503b261000000000000000000000000000000000000000000000000000000000000013253652646d6f615847331f0a00000000000000091d2f404c515a524e41311b0b00000000000000000000000000000000000000000000000000000000000000001223334350555a4e4a3e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182a3a4a5c677d9281778a8774604b3929170000000000000000000000000000091c2f3f4c566060606060606060606060606060606060606060606060606060606c81947f69594834200b0000000c2035495a687e928a7d7069656364686e7882918072605645576c81947e69543f29140000000000000000000000000e23384e63788d806b56402b1601000000000000000000000010202e363a4141414d63788d846f59444141414141414139362d2010000000000000000b20364b607589846f5544311d080000000000000000000000000000001021364b617587846f604e4132292321263245566a7f907b65503b25100000000009192a3a4a5c687e93806b5f4d3d2c1b0b000000000000000001162b40566b80927d68533d28130000000000000000000000000000000000000000000000000000000000000818354552585a4c473a2a1804000000000000000012222f383c443d3a312313000000000000000000000000000000000000000000000000000000000000000000051525333c3f4439362d201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c2d3d4d5f6c819686917c675645311b0b00000000000000000000000000000e23384c5d657576767676767676767676767676767676767676767676767676767576878a77624c37220d000004172a3a4d62788b8c7b675f53504e4f535a626d7c898374605554697e94816c56412c1701000000000000000000000010253a4f657a8f7f69543f2a1400000000000000000000000002101b22242c2c364b60758a87715c3c2b2c2c2c2c2c2c24221b10020000000000000010253b50657a907e695437271502000000000000000000000000000000091e324657667b907e685f4b4639383637444b6075878773604a35200b00000000000c1c2d3e4e606d82917d675b4939291703000000000000000013283e53687d93806b55402b16000000000000000000000000000000000000000000000000000000000000001727353f424437332a1c0c00000000000000000004121d24262f28251e130500000000000000000000000000000000000000000000000000000000000000000000071520282a2f24221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f30414b6074869b8875604a3e2e1d0c000000000000000000000000000010263b50657b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8c99957f6a55402a1500000a1f3347586d8296806b5d4d413b393a3c494d5e66798783736051667c91836e59442e1900000000000000000000000011263c51667b917d68533d28130000000000000000000000000000070d0f161d314556738889745a48352016161616160f0d0700000000000000000417293a556b808e79634e39240e00000000000000000000000000000000031628394c5e6c818c7d6c6157504d4c4d55606b81917c675443301c07000000000000102031424b6074858a79635746331e11000000000000000011263b50667b90826d58432d18030000000000000000000000000000000000000000000000000000000000000917232b2d2f221f180c000000000000000000000000090f111a13110b01000000000000000000000000000000000000000000000000000000000000000000000000030d13151a0f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4c61778989927d685c4a3b2a1909000000000000000000000000000e24394e6379848484848484848484848484848484848484848484848484848484848484847f6a55402a1500000c21374c61778b8977614c3f302524252b35404c5b637888826d6064798e86715c39291603000000000000000000000012283d52677d917c67523c27120000000000000000000000000000000000021527385a6f848d78624d38230d0101010100000000000000000000000a1f33465870858874604a35200b00000000000000000000000000000000000b1b2f4051626c818b81756c6562616368738095826d5f4d3625130000000000000002141e3245566278898675614b3f2e1c08000000000000000e23394e63788e85705a45301b0500000000000000000000000000000000000000000000000000000000000000061016181a0c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082135495b6c81917c838b7a645947372715010000000000000000000000000c21364a5b636f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6a61503c2813000013283d52687d92836e58473321120e0f1920303d495a647a8b7e6861768c89735746321e0a000000000000000000000013283e53687d917c66513c2711000000000000000000000000000000000000162b41566b80917b66513c26110000000000000000000000000000000c21364c61768a836e5443301c070000000000000000000000000000000000001122344451626c7d8888817a7876787d86908273604b41301808000000000000000002162838485a657c8c836e5d4b37230e000000000000000b21364b60758b87725d48331d080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060b0d20202020202020202020202020202020202020202020202020202020202020202020200f0d07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182f3f4e63798b857076878777615544311d13020000000000000000000000071a2d3d4a4e5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a55504333200d0003182d43586d82927d68523a2a1803000006121f2c3c4a5c687e8a796374898b76614b36210c000000000000000000000014293e53697e907b66513b261100000000000000000000000000000000000012273d52677c92806a553c2b1906000000000000000000000000000011263c51667c917d6853362513000000000000000000000000000000000000000316263444516068767f878c8d8b8d8a857b6d605544312312000000000000000000000a1a2b3c4c5e677d837b65503b251000000000000000091e324557647a7a644f3a240f0000000000000000000000000000000000000000000000000000000000000000000000000000060f16182015130d0400000000000000000000000000000000000000000000000000090f11201b1913090000000000000000000000000000000000000000000000000000000e192023353535353535353535353535353535353535353535353535353535353535353535353524221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364b5d6f838f7a65647a8a8473604b413020100000000000000000000000000f1f2d363944444444444444444444444444444444444444444444444444444444444444403c3325150300021527375b71868e79634e39240e00000000010f1e2d3e4e606d82857371868e78634e39230e000000000000000000000013283d53687d917b66513c26110000000000000000000000000000000000000c22374c61778a86715a4935200e0000000000000000000000000005182b3b576c818d78624d38230d000000000000000000000000000000000000000008162634424e58616a7177797b7a7770655e4b443726140400000000000000000000000e1e2f404d5f676f655d4b37230e00000000000000031628394a5c64645c4a36220d000000000000000000000000000000000000000000000000000000000000000000000000000917232a2d352b282115070000000000000000000000000000000000000000000004121c232635312e261a0c000000000000000000000000000000000000000000000000000e1e2b354a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3a372e20100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354657b90836e5d5c677d92816c5f4d3e2d1c0c0000000000000000000000010f1a21242f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2a282015070000081d31445574898a76604b36210b000000000000102031424c6176887e6e84907b66513b2611000000000000000000000011273c51667c917d67523d28120000000000000000000000000000000000000a1f3347586f848d78624d3c2b190a0000000002000000000000000b20344859718787725a4835200b000000000000000000000000000000000000000000081623313a474c5559626466656159504c403126190900000000000000000000000000112130414d5259504b3f2e1c0800000000000000000a1b2e3e4a4f4f4a3e2d1b07000000000000000000000000000000000000000000000000000000000000000000000000061727353f424a403c3325150000000000000000000000000000000000000000000012222f383b4a4642382b1a02000000000000000000000000000000000000000000000006192b3c495e60606060606060606060606060606060606060606060606060606060606060606060604f4b3e2e1b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384b6073868b79634e4d5f6c81927d675c4a3a2a1909000000000000000000000000070c0e1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a15130d030000000b20364b60758b89735645321e0900000000000002131f334758687d887681937e68533e291300000000000000000000000f253a4f647a8f7e69543e291400000000000000000000000000000000000004182a3a51677c91816c5a4837271a11101114170d0b05000000000d22374c62778d7f6a553c2b19060000000000000000000000000000000000000000000005131c2a33373b484c4f514f4c473a382f1d14090000000000000000000000000000031323303a3d443b372e21110000000000000000000010202e363a3a362d2010000000000000000000000000000000000000000000000000000000000000000000000000000f233545525760555043331a0a0000000000000000000000000000000000000000091c2f404c50605b554938201000000000000000000000000000000000000000000000000b2035495a707575757575757575757575757575757575757575757575757575757575757575757575645c4b37220d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556687d92826d5b49414b6074858a7a64584737261401000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21374c61768c88735d382816030000000000000004172a3a4e5f7085807e94806b56402b1601000000000000000000000b21364b60768a826d583e2d1b070000000000000000000000000000000000000c20354a6072868a78625545382d272526292d221f180d0000000b20354b6073766a61503c1e0e000000000000000000000000000000000000000000000000000c171f212b34373a3c3a37342a231c11010000000000000000000000000000000005131e25282f25231c11030000000000000000000002101b222424221b100200000000000000000000000000000000000000000000000000000000000000000000000001162a3f52636d756a615038281502000000000000000000000000000000000000000f23384c5e66757067553e2d1b07000000000000000000000000000000000000000000000d23384d62788a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7a644f3a240f0000000000000000000001080b0b08010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4b6075888a77624d3d3144556277888776615544311d13010000000000000000000000010a1012110f090000000000000000000000000000000000000000000000000000000000000000000d22374c62778c87725d47321d0000000000000000000c1c314150657b8a7e93836e58432e190000000000000000000000091e324556708587725c4a362210000000000000000000000000000000000000071c304354657b8c847360564a3e3c3a3b3e4237342a1d0d0000081d31445560615750433320000000000000000000000000000000000000000000000000000000040a0d182022242625221f180c0900000000000000000000000000000000000000010a10121a100e080000000000000000000000000000070d0f0f0d07000000000000000000000000000000000000000000000000000000000000000000000000000002182d42576d818a806a5645321d090000000000000000000000000000000000000011263b50667c8a85705c4a36220c000000000000000000000000000000000000000000000b2035495a6e82988b83848484848484848484848484848484848484848484848484848484848484847b65503a251000000000000000000009141d20201c14080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f3447596a7f94806b59483427374859657b8c8473604b41301f0f0000000000000000000005121d252726241d1204000000000000000000000000000000000000000000000000000000000000000b21364b60768b88735e392816030000000000000000001323374b5d7085849985705b38281502000000000000000000000316283854697f8e79644f3e2e1c0e0600000000000000000000000000000000001325364b5d6a7f948274645c54514f5154574c483b2a18050001152737444b4b4639332515030000000000000000000000000000000000000000000000000000000000050b0d0f11100c0a0400000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c5b70859b8875604b36201100000000000000000000000000000000000000152a3f556a7f948e79644f3a29170400000000000000000000000000000000000000000006192b3c4b617586927d6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f655d4b37230e00000000000000000919263135353026180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d4c6277898876614b3b2b192b3b4b5d697e93806b5f4d3d2d1c0c000000000000000001122330393c3c3830221406000000000000000000000000000000000000000000000000000000000000091e324556748a89745745321e09000000000000000000081c2f3f50657a8b9d88735645321d0900000000000000000000000c21374c61778a826d5c4b3a2b211a1c15120c0300000000000000000000000008182e3f4a6072809384796f6a666566696c625948341f0b000009192731353633291b15070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b2035485a748989927d68523f2e1c0800000000000000000000000000000000000417293a596e838a97826d5846331f08000000000000000000000000000000000000000000000e1e33465763798a8b7a64585a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a504b3f2e1c080000000000000001142637444b4b43362614010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000821364a5b6c82937e695746331d0d1d2e3f4f606d82917d675b4a3a291808000000000000000a1d30414d52514c40322414000000000000000000000000000000000000000000000000000000000000031628385d73888b76604b36210b000000000000000000001123374b5d71869b8a75604b36200b00000000000000000000000a1f3347586b818c7a6459493c352c312a27201507000000000000000000000000111c304354606c7e898d857f7c7a7b7e8177624c37220d00000009151d20211e170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040a0c1114151514110d0b0500000000000000000000000000000000000000000000000000000000000d22384d62778d838786715d4b37230e00000000000000000000000000000000000a1f334658728785868976614c3625130000000000000000000000000000000000000000000003172939495b677d91877661544344444444444444444444444444444444444444444444444444443a372e21110000000000000000081d31445560605443301c13010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008182f3f4e63798b8774604b39291700112132424b6075868a79635847362614010000000000001025394d5f67665e4f42321b0b0000000000000000000000000000000000000000000000000000000000001a2f445a6f848f79644f3a240f00000000000000000000081c2e3f53687d938d78634d38230e000000000000000000000004172a3a4b6075878677625a4e493d463f3c32251503000000000000000000000000132536434a60687680868c8e8f8e8c8679644e39240f0000000001080b0c0a030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080c181f2226292b2a29262220190e0c06000000000000000000000000000000000000000000000000000011263b50667b90817f8f7b65503c2c1906000000000000000000000000000000000c21364c61768a827f937e695443301c07000000000000000000000000000000000000000000000b1b2c3d4d5f6c81968372604b402f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f25231c110300000000000000000b20354b607373604b42311f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426364c5d6f84917c675544311b0b0003141e3245576378898776615443301c1200000000000012273c52677d7c69604f392917030000000000000000000000000000000000000000000000000000000000162b40556b80937d685336261401000000000000000000001121364b617689907a65503b25100000000000000000000000000c1e32455763798886786b635b5c5b544f4332200c00000000000000000000000008182530424e58616a7177797a797772645c4a36220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d202a34373c3f40403e3c38352b23211a0f06000000000000000000000000000000000000000000000000142a3f54697f947f778a836e5a4935200b0000000000000000000000000000000010253a50657a8f7f778a8773604a35200d00000000000000000000000000000000000000000000000f1f30414b607484957f6a5e4c3c2b1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a100e080000000000000000000013283d53687d816b604e3d2c1a060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c304354657b9085705f4d37271500000003162839495a667c8d8372604b40301e0e0000000000152a40556a7f917e695746331e0c000000000000000000000000000000000000000000000000000000000011273c51667c91826d5443301c0800000000000000000000091e3246576d82927d68533d2813000000000000000000000000031628394a5b6379868a80787371716a614f3c27120000000000000000000000000008131c313a474c55586164656461594e4a3e2d1b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b0d111416171716161412100d0b0500000000000000000000000000000000000000000000000000000000000210192631353a474c5154555554514d483c38352c211a0f0100000000000000000000000000000000000000000000132536586d82907b6d828b78634d3a29170400000000000000000000000000000014293f54697e907b6e83907b65503b2b19050000000000000000000000000000000000000000000001131d3144556277888c7c665a48382815020505050505050505050505050505050505050505000000000000000000000000000c21364c6176877d685b4935211200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628384b6073868f7b655041301909000000000a1b2c3c4c5e6a8095806b5e4d3c2c1906000000000c21364b6175888876614c3a2a1804000000000000000000000000000000000000000000000000000000000c21364b6176898874604b35200c000000000000000000000316283954697f94806a55402b15000000000000000000000000000a1b2d3d4a5b63747f888d8886867f6a543f2a15000000000000000000000000000000141c2a33373a474c4e504e4c473b362d2010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b1019202226292b2c2c2c2b2a2725221f18140e0c060000000000000000000000000000000000000000000000000513202d37444b52596166696a6a6966625a564e493d352c1d15090000000000000000000000000000000000000000071c30435470868d7863798e816c5846331f09000000000000000000000000000003162838586d828c77657b90836e59483420090000000000000000000000000000000000000000000000021527374859657b8c8978625645321d130200000000000000000000000000000000000000000000000000000000000000000a1f334658647a8a79634e402f1d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556687d92836f5d4b3723120000000000000e1e2f404a6072838d7c665b4935210c000000000a1e324657697e93806a5947341f0d00000000000000000000000000000000000000000000000000000000091e3246576e838f7a65503a2a18040000000000000000000012273c51677c91826d58422d1800000000000000000000000000000f1f2d3d4a56606a747a7d80817e69533e2914000000000000000000000000000000000c171f212a3337393b3937342a221b10020000000000000000000000000000000000000000000000000000000000000000000000000000000000000108131c20252b35383b3e40414241403f3d3a37342a2923211a0f0a040000000000000000000000000000000000000000051323313e4a55606770777b7e807f7e7b77726b635b4e493d3127190c000000000000000000000000000000000000000b20354a6074898975606f848976614c3726140100000000000000000000000000091e324556718788726073878b78624d37271502000000000000000000000000000000000000000000000009192b3b4b5d697f948574604b4231201000000000000000000000000000000000000000000000000000000000000000000417293a4a5c6b80846f5e4c38240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075878879634e3f2e1c0500000000000000121c3043546176868878634d38230e00000000031629394b6074878977614c3c2b19050000000000000000000000000000000000000000000000000000000316283952677c91816c5847331f0d000000000000000000000f24394f64798e85705a3626140100000000000000000000000000010f1f2d38454b546065686a6b69604e3b26110000000000000000000000000000000000040a0c181f22242524221f180c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2530353a3c484d515455565756555452504c483b3e38352c221f180c05000000000000000000000000000000000002132331414e5c64737d858a918f8d8d8e918d8781796e635b4b44372a1c0d0000000000000000000000000000000000000d23384d62788d867154667c917e695544311d08000000000000000000000000000b21364b60768a846e54697f94806a5544311d080000000000000000000000000000000000000000000000000d1d2e3f4f616e8397816d604e3e2d1c0c00000000000000000000000000000000000000000000000000000000000000000b1b2e3e4b6176887c66513d2d1a070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324556607273635b493521110000000000000000001325364758617173635b4935210c00000000000b1d314455677d92816b5a4834200e000000000000000000000000000000000000000000000000000000000b20364b6074888a77614c3b2a18050000000000000000000c22374c61778c87725443301c080000000000000000000000000000010f1a283236434b4f535556534e42311f0b0000000000000000000000000000000000000000040a0c0f100f0c0b0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f18263036434a50575a6266696b6c6c6b6b696765625959544e493d37332a20190d03000000000000000000000000000000102131414e5f687a86928b837d797777797c80868e8b83796b6055473a2b1d0d000000000000000000000000000000000011263b51667b90836d586073878774604b352010000000000000000000000000000f243a4f647a8f7f6a5561768a8874604b36200f00000000000000000000000000000000000000000000000000112132434b617586927e685c4a3a2a18080000000000000000000000000000000000000000000000000000000000000000101e3346576a7f85705b4a36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003162838454b5d5e4e493d2c1a030000000000000000000818293a474c5c5e4d493c2c19060000000000021527374a6072868a78624d3d2c1a06000000000000000000000000000000000000000000000000000000081d314455697f947f6a5947341f110000000000000000000a1f33475874898a75604b35200b000000000000000000000000000000000a151d2630353a3e40413e3b31241402000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006141f2d36434b5460656d72787b7e80818181807f7c7a77736f69635b544c473a342b1e170b000000000000000000000000000a1b2e3f4e60687d8b9182786e6864626263676b7179828b8b80736159483b2b1c0c00000000000000000000000000000000142a3f54697f947f6a5554697e917c66513e2d1b0700000000000000000000000013293e53687e917b6651586d82917c67523d2d1a0700000000000000000000000000000000000000000000000003141e33465763798a8b7a64584736251300000000000000000000000000000000000000000000000000000000000000081826303d4c62778a79634e39240e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a283236484839352c1f0f00000000000000000000000c1c293337464938352c1e0e00000000000000091c304354667b90826d5b49352110000000000000000000000000000000000000000000000000000000021527374b6176888977624c3f2e1d0c000000000000000004182a3a5c71878c77624d37220d00000000000000000000000000000000000208141c2025282b2c29261f140600000000000000000000000000000000000000000003090c1015181a1c1d1d1d1c1b1816120f0b0802000000000000000000000000000000000000000000000000000000000000081624313d4a546067737a82888d90908d8c8b8c8c8e908f8c88847e78716961584d483c33291b120400000000000000000000031628394b5d687e8d8a7d6d6259534f4d4d4e51565b636d79859584776259483a2a1909000000000000000000000000000000132536586d82917c66514b61758985705c4a36220d000000000000000000000001152737576c828c77624d4f647a8f85705b4a36210b0000000000000000000000000000000000000000000000000003172939495b677d918776615443301c11000000000000000000000000000000000000000000000000000000000001142636434b5b6370857f6a543f2a15000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e21323323211a0f010000000000000000000000000c171f2131332321190e0000000000000000001325364c5e6f848b79634e3e2d1b07000000000000000000000000000000000000000000000000000000091e334657687d92826d5d4b3b2a190900000000000000001a2f44596f848f7a654f3a25100000000000000000000000000000000000000001080b1013151614110b0200000000000000000000000000000000000000040a0c161e21252a2d303132333231302e2b2824201d150d0b05000000000000000000000000000000000000000000000000000008162634424e5b63737d878f9088837e7b7877767677787a7d8084898f8d867f776c625a4b46392f221203000000000000000000091e324557657b8b8b7b675f4d483b3a3838393c3d4a4e5b6373809386776258473727150100000000000000000000000000071c30435471868d78634e46576b808e79644f3b2b180500000000000000000000081d3144557186887359484b5d71868e79634e39291603000000000000000000000000000000000000000000000000000b1b2c3d4d5f6c81968372604a402f1e0e00000000000000000000000000000000000000000000000000000000081c304354606e797a82836e59442e19040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090b1d1e0e0c06000000000000000000000000000000040a0c1c1e0e0c060000000000000000000008182f404f647a8f836e5c4a362211000000000000000000000000000000000000000000000000000000031729394a6072858d7b6559473727180800000000000002172c42576c81927c67523d27120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050b171f212832363b3f424547474847474543403d393631272220190d09020000000000000000000000000000000000000000000005162634445160687985928e837b746e696563616161626365686b6f757a8188918981786b61574c402f211100000000000000000417293a4b607587927d685d4d41342b24222224272d363d4a55606b7e938676615544311d10000000000000000000000000000b20354a6074898a75604b394d62788a826d594834200a000000000000000000000b20354b607589846f5a3b3f53687e93816c5746321e0a00000000000000000000000000000000000000000000000000000f1f30414b607384957f6a5e4c3c2b1a0a0000000000000000000000000000000000000000000000000000000b20354b6072838e8e8a86715c47311c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122364a5c6e838c79644e3f2e1c080000000000000000000000000000000000000000000000000000000b1c30435463798a88776155443626180b000000000000142a3f54697f947f6a553f2a150000000000010a101213110f0c0a03000000000000000000000000000000000000000000000000000000000000010d181f29333639464b5054575a5c5d5d5d5c5a5856524e4b443737342b201d150a0300000000000000000000000000000000000000001323334451626b7e8b94857a6e66605553504d4c4c4c4d4e5052565660656c747c85918a8075665e4c3f2f1c08000000000000000a1f3346586a7f95836e604e3f3020190f0d0d0e121a212d37444b606a7f948473604b3e2e19090000000000000000000000000d23384d62788d8771554435485a6e838a77624c382816020000000000000000000e24394e63798e806b5640364b6176898976614b362110000000000000000000000000000000000000000000000000000001131d3144556277888d7c665a4838281502000000000000000000000000000000000000000000000000000011263c51667c91a1a99d88725d48331d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040e14162013110b02000000000000000000000000000000000000000000000000000000000000071b2e3e4e63798b846f5d4b37231200000000000000000000000000000000000000000000000000000000132536495b677d91847360544336291b0f030000000012273c51677c91826c57422d170200000005131e2527282725211e170b0800000000000000000000000000000000000000000000000000000009151d2a343a464c535761656a6d6f7172727271706d6b67646055544d483b3632281e170b0100000000000000000000000000000000000e1e304150626b80938d7f73645c504b44373b3837363737393b3d38454b50556067707c8793877c665d4c38230e000000000000000c21364c6176898b78624d41312112050000000000070f192631424f616d8296806b5c4a37261401000000000000000000000011263c51667b91836e59372b3c4f647a8f806b5645321e0900000000000000000013283d52687d917c67523c3346576c81937e68533f2e1b080000000000000000000000000000000000000000000000000000011527374859657b8c8978625645321d13020000000000000000000000000000000000000000000000000014293f54697e94a9b19b86715c46311c07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081621282b3529261f1406000000000000000000000000000000000000000000000000000000000000102135495b6c828f7a654f402f180800000000000000000000000000000000000000000000000000000008182c3d4d5f6b80968272605446392d1e170b0500000f243a4f64798f846f5a442f1a00000001132330393d3d3c3a363329231c11020000000000000000000000000000000000000000000000000d1927313b484c5861686f767a7f828586878887868583807d79756f696259524b453833291d150900000000000000000000000000000006192c3c4d5f6b80958b7c6a60544a3e35312626232221212223252827313637444b525e66747e89907b65503b2610000000000000061a2c3d54697e93826d5a4935231303000000000000000009141d32434b6175878c7a645544311d090000000000000000000000152a3f546a7f94806b55402b374b5d70858875604b362111000000000000000000132536566c818d78634d3829394e64798e86715d4b37220c00000000000000000000000000000000000000000000000000000009192b3b4b5d697f948574604b423120100000000000000000000000000000000000000000000000000010253a4f657a8f9f9f95806b56402b16010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041626333d404a3e3b312414000000000000000000000000000000000000000000000000000000000000061a2c3d4d62778a85705e4c362513000000000000000000000000000000000000000000000000000000000f1f30414a60728197817261574a3d33292019110f0d22374c61778c87725c3a2a180400000a1e30414d5252514f4c4639372e1e160a00000000000000000000000000000000000000000002101d2b37444b59626b767d848a908c898684838283838587898d8e89847e77706760564b46393127191002000000000000000000000000000c2035495a677d928b7c665e4b43362d201d14100e0c0c0c0d0e1013151d20273135404c5560697e937e68533e29130000000000000c2135495b71868f7a644f3c2c19050000000000000000000001151e324657657b908673604b3727150100000000000000000001142636586d82927c67523d272e3f52677c927d68533f2f1c0800000000000000071c30435470858974604a3520364a5c70858f7a654f3b2a18040000000000000000000000000000000000000000000000000000000d1d2e3f4f616e8397816d604e3e2d1c0c0000000000000000000000000000000000000000000000000e22374b5d6a7f8a8a8375614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e213344515660534e42311a0a0000000000000000000000000000000000000000000000000000000000000f203448596b80907b665443301c0900000000000000000000000000000000000000000000000000000001121c304354607282948375645c4b4639342b26242222344759748989745947341f0a00001025394d5f676866646157504b3f32281a0a000000000000000000000000000000000000000311202d3c485560697781899188827c7773716e6d6d6d6e6f7274787b80868a8b857d756a61574b44372e2010000000000000000000000000091c2f404d63788a937e685e4c4030261810080100000000000000000002090b151d2030374450667b90806b56412b160100000000000e23384e63788d87725c4a361e0e000000000000000000000000031629394c5d6e83927d675544311d08000000000000000000081c30435471868e79644e392420354b60748886715d4c38230e000000000000000b20354a60748985705443301c2d3d52687d92836d5947341f0900000000000000000000000000000000000000000000000000000000112132434b617586927e685c4a3a2918080000000000000000000000000000000000000000000000081b2e3f50616a74766e615746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014283d51626b7568604e38281603000000000000000000000000000000000000000000000000000000000005182b3b556a7f948672604a3727150100000000000000000000000000000000000000000000000000000000132536435460727f8d86796b61574d483c3b393837393a5c71878c77614c37220c000012273d52677d7d7c7a766e655d4b4538281a0a00000000000000000000000000000000000111212e3e4a5a62737f8990857c746c6762595b59585858595a546062666b70777e858e887f766960554b3e2e1b0800000000000000000000000f24384c5e6f8498836e604e402f1c14080000000000000000000000000000000108121927394e63788e836e58432e1900000000000014293f54697e94806b563e2e1b00000000000000000000000000000b1b2f3f4e63798c8774604b35200f0000000000000000000b20354b6075898a76604b36211d3144556a7f907b65503d2c1a060000000000000e23384d63788d816c5636251321364b6075898a77614c3726140100000000000000000000000000000000000000000000000000000003141e33465763798a8b7a6458473625130000000000000000000000000000000000000000000000001021334350556060564c4639291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004182a3a566b808a7e685645321e0b00000000000000000000000000000000000000000000000000000000000a1e33465770858c917c675544311d0a00000000000000000000000000000000000000000000000000000000081826364354606a7c898c81766b625a56514f4d4d4e515a6f848e79644f39240f0000192f44596e83898a8c8a847a6d60564538281602000000000000000000000000000000000f1f2e3f4b5c64788594867b70666055514d483b444342434336434a4d51565961687079828b887e73645c4b37220d00000000000000000000071b2d3e51667b908977624c4231211201000000000000000000000000000000000000000b21364b60768b86705b382816020000000003172939596e83907b66503b26110000000000000000000000000000001121364a5b6e83917c67523d2c1a0600000000000000000e23384d63788d87725645321e1527374c617689846f5b4935210c00000000000012273c52677c917d68523d28131e3245566c81947f6a5544311d080000000000000000000000000000000000000000000000000000000003172939495b677d918776615443301c1100000000000000000000000000000000000000000000000315253337444b4b453833291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1f34475971869a8875604b39291603000000000000000000000000000000000000000000000000000000000c21364c61768a84878774604b382816020000000000000000000000000000000000000000000000000000000008182636434a5e6676828b898078706b6664626263666b7182917c67513c27120000172c4054656e7474777c848f8274605645321e120000000000000000000000000000000b1b2d3d4b5d657a898d8073655d514b443737342b2f2e2d2e2e253035383c3b474c535c646d788390867a644f3a250f000000000000000000000d22364a5c708595806a5948342414030000000000000000000000000000000000000000091e324557738888735645321e09000000000a1e33465773888c76614c37210c000000000000000000000000000000071a2d3d50657b9085705b4935210c000000000000000011263c51667b91846f59382816091f3347586c818b78634e3a2917040000000001162b40566b808e79634e39240e1628384e63788d8774604b35200e00000000000000000000000000000000000000000000000000000000000b1b2c3d4d5f6c81968372604a402f1e0e00000000000000000000000000000000000000000000000715192631353632281e170b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c22374c61778a85947f695746321e0c0000000000000000000000000000000000000000000000000000000011273c51667c91817e927d685645321e0b000000000000000000000000000000000000000000000000000000000008182530404c58616d7a838a8b86807b797777787b8086968c7c67513c271200001124364754595e5961676f7d8b8374604b402f1c09000000000000000000000000000417293a4a5b657b8a8a7c6b60554b3f3531262220191918181819131c2023262a34373d4a4e5a636d7b87806b55402b16000000000000000000001325364f647a8f8976614c3b2b1806000000000000000000000000000000000000000000031628395b71868b76604b36210b000000000c21364c61768b88735847331f0a000000000000000000000000000000000f20354a6073878d79634e38230e0000000000000000152a3f546a7f94806b56412b1604172a3a4e63798b816c5847331f090000000005192b3b5a6f848975604b35200b0a2135495b6f84917c66513c2c190600000000000000000000000000000000000000000000000000000000000f1f30414b607384957f6a5e4c3c2b1a0a00000000000000000000000000000000000000000000000009141d20211e160a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012273d52677c927e858875614b3a2917040000000000000000000000000000000000000000000000000000061a2c3d576c82917c74888775604b39291703000000000000000000000000000000000000000000000000000000000008131c2f3a474c5c646e777f858a8e8e8d8c8e908c878178675f4d39241000000719293640443a474c525f677c8b826d5e4c38241000000000000000000000000000091f334658637989897a665e4b44372f201d140d0b05000303030000070b0d11181f222d363c494d5d657473604b35200b000000000000000000071c3043546c8197826d5846331d0d0000000000000000000000000000000000000000000000192e43596e838d78634e38230e000000000f24394f64798e85705a3a29170400000000000000000000000000000000071c3043546a80957f6a553c2c190600000000000001142636586d83927d68523d2813000c2135495b6f848976614c372715010000000b20344859738886705544311d08061a2c3d52677c91846f5a4935200a000000000000000000000000000000000000000000000000000000000001121d3144556277888d7c665a483828150200000000000000000000000000000000000000000000000001080b0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071a2d3d586d828f7a7d927f6a5847331f0c00000000000000000000000000000000000000000000000000000c2135495b72878a76687e937e695746331e0c00000000000000000000000000000000000000000000000000000000000000121c2a333e4a4f59626a7076797b7d7d7c7a77726b635a4d41301d0a0000000a19242c2f2a3437414d5d6a7f907b66513f2e1b08000000000000000000000009192f404c6176878b7b655c4c4031271911080100000000000000000000000000040b0f1a212c353f4b5460605443301c080000000000000000000b20354a6074888f7a65503a2917000000000000000000000000000000000000000000000001162c41566b81907b66503b26110000000011263c51667b91836d58432e180000000000000000000000000000000000001325364f64798e86715a4935200c000000000000081c30435471868f7a644f3a240f00061a2c3d50657b907f695544311d080000000d22374d62778c826c5737271501000f20364b6074888b78634d382816020000000000000000000000000000000000000000000000000000000000011527374859657b8c8978625645321d130200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364a5b7388897473878976614c3b2a1804000000000000000000000000000000000000000000000000000e23394e63788e85706074878876614b3a2a1704000000000000000000000000000000000000000000000000000000000000000c171f2d363b484d5556606466686867656259564d493c302312010000000007111719181f22303f4b60748786715d4b37220e00000000000000000000011426374c5e6d82927e685d4b3e2f1d150900000000000000000000000000000000000000070e19202e36434b4b43362614010000000000000000000f24394e64798e8975604b35200c00000000000000000000000000000000000000000000000014293e54697e937d68533e28130000000013283d53687d92816c56412c170100000000000000000000000000000000000822364a5c73888d78624d38230d0000000000000b20354b6075898b76614c36210c00000f23384c5e71868874604b35201000000011263c51667b917d68533e28130000081d3144556b8095806b5645321e0900000000000000000000000000000000000000000000000000000000000009192b3b4b5d697f948574604b4231201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e24394e63798e836e677c91806b5947341f0d0000000000000000000000000000000000000000000000000216283854697e937f6a55677d927f6a5847331f0d000000000000000000000000000000000000000000000000000000000000000004101b222b343738454b4f51525352504d483b38352c1e1205000000000000000200040a131d314455697f8f7a654f3a251000000000000000000000081d314455667b90836e604e3f2e2012010000000003030200000000000000000000000006080006111826303535302618080000000000000000000014293e54697e93836e5544311d0800000000000000000000000000000000000000000000000011263c51667b91806b56402b160100000014293f54697e94806a55402b15000000000000000000000000000000000000071b2d3e576d82927d68533d28130000000000000e23384d63788d88735746331e0a0000091c2f4053687d917c67523e2e1b070000152a40556a7f8f79644f3a240f0000021527374d62788b8975604b362110000000000000000000000000000000000000000000000000000000000000000d1d2e3f4f616e8297816c604e3e2d1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000216283854697e937e696073868977614c3b2b19050000000000000000000000000000000000000000000000091e3245566f848e79644f6073868976614c3b2b1805000000000000000000000000000000000000000000000000000000000000000000070d182022283236393b3d3e3d3b37342b2320190e00000000000000000000000000021527374c62778c816c57392916030000000000000000000b20354b6073868a77624c423121110200060c0e15181917130c0b0400000000040a0c151b1d1d1b1710141c20201c14080000000000000000000003182d42586d82947f6a55372715010000000000000000000000000000000000040a0c141414141424394e64798e836d58432e1800000000152a3f546a7f947f6a553f2a150000000000000000000000000000000000000013283d53687d92826d5839291703000000000011273c51667c91846f5a392917030000001121364b60758885705c4b37220d0004172a3a596e848a75604b36210b000000092035485a6f84927d68523e2d1b0700000000000000000000000000000000000000000000000000000000000000112132434b617586927d685c4a3a2918080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566f848d786354667c91816c594834200e00000000000000000000000000000000000000000000000b21364b6075898874604b54667c91806b594834200e0000000000000000000000000000000000000000000000000000000000000000000000050b0d161e212426282827252220180e0c06000000000000000000000000000000091f344859728786715746321e0a0000000000000000071b2d3e52677d927f6a594834241303010f1a21232a2d2e2c28221f180c06000b171f212a303232302c25201c140b08010000000000000000000000021527375b7086907b66513b261100000000000000000000000000000000000c171f21292929292929364c61768b85705b38271502000000152a40556a7f947f69543f2a14000000000000000000000000000000000000000e23394e63788e87725746331e0a0000000000152a3f556a7f94816c56412c1700000000091e3245566b808f7a644f3b2b19050a1f334758728886715645321e0900000005192b3c51667b9085705c4a36220c0000000000000000000000000000000000000000000000000000000000000003141e32465763798a8b7a64584736251300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60758988725b4d5e71868a78624d3c2c19060000000000000000000000000000000000000000000011263b50667b90836d54434c5e70858a77624d3c2c19060000000000000000000000000000000000000000000000000000000000000000000000000003090b0f11131312100d0b0500000000000000000000000000000000000005182a3b586d838a76614b36210c00000000000000000d22364a5c70858976614c3b2b180608141c2c35383f4243413d37342a20190e1b2933364045484846413b3530261812030000000000000000000000081d31445573888e78634e39230e000000000000000000000000000000000c1c2933363e3e3e3e3e3e3e4658748988735645311d09000000152a3f556a7f947f6a543f2a15000000000000000000000000000000000000000b20354a6074898b76614b36210c0000000001142637586d83937e68533e291300000000021628384c62778a836e594834200a0c21374c61778c826d5838281602000000000e20354b6073878e7a644f3a2917040000000000000000000000000000000000000000000000000000000000000003162939495b677d918776615443301c110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010263b50657b90826d574051667b90816c5a4935200f00000000000000000000000000000000000000000005192b3c566c81927d6852364050657b90816c5a4935200f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000162c41566b818d78634d38230e00000000000000000f24394e64798e816c5746331d0d081826303d494e55585857524c473b352c1e2b3a464c555b5d5d5b56504b4336301e170b000000000000000000000b20364b60758a8b76614c36210c0000000000000000000000000000000417293a464c53545454545454545c71868a75604b36200b000000142a3f54697f94806a55402b1500000000000000000000000000000000000000071c30435471868f79644f3a240f00000000081d31445571868f7a65503a251000000000000a203448596d828a78624d39281610263b50657b907e69543e29140000000000081c3043546a7f94826d5847331f0800000000000000000000000000000000000000000000000000000000000000000b1b2c3d4d5f6b81968372604a402f1e0e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b566b80917c67523c4c5e70858b78624d3d2c1a0600000000000000000000000000000000000000000b2035485a72878c77624c37384c5d6f848b78634d3d2d1a0700000000000000000000000000000000000000000000000002080b0f12141412100c0a0300000000000000000000000000000000000000000000000000000000000000152a3f546a7f8f79644f3a240f0000000000000004182a3a556b808e79634e39291701142636434b5b636a6d6e6c6861594d493c313c4858616a707272706c6560544d4033291b0d0000000000000000000c21374c61768c8a755846331f0a0000000000000000000000000000000a1f334658616969696969696969696e848d78634d38230e00000014293e53697e93806b56402b160100000000000000000000000000000000000000132536596e83927d67523d2812000000000b20354b60758a8c77614c37220c000000000005182b3b4f64798e806b5745321e142a3f54697f8f7a65503a25100000000000011426364c62778a8a76614c3625130000000000000000000000000000000000000000000000000000000000000000000f1f30414b607384957f6a5e4c3c2b1a0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1f34475971868a77614c374050657b90826d5b4935211000000000000000000000000000000000000000000d22384d62788d86715948342f3f4f647a8f826d5c4a362110000000000000000000000000000000000000000000000809151d20242729292725211e170c0a0300000000000000000000000000000000000000000000000000000000142a3f54697f907b65503b2610000000000000000a1f344759718787725b4a361b0b081c304354606c797f8283817d776d625a4e42485a62767f85878785817a73665e4c46392b1d0d00000000000000000d22374d62778c89745f3a2917040000000000000000000000000000000c21364c61767e7e7e7e7e7e7e7e7e7e85907a65503b251000000013283e53687d93816c56412c170100000000000000000000000000000000000000162b40556b8095806a55402b15000000000e23384e63788d88735947341f0a0000000000000d22364a5c70858975604b3625162939586e838a76614c36210c000000000000081f3448596e83947e695443301c07000000000000000000000000000000000000000000000000000000000000000001121d3144556277888d7c665a48382815020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374c62778a8671584733374b5d6f848b79634e3e2d1b070000000000000000000000000000000000000115273753687d93806b563b2b22374b5c6f848c79644e3f2e1b080000000000000000000000000000000000000005101b222731363a3d3e3e3c3a363329211e160b020000000000000000000000000000000000000000000000000000152a3f556a7f8f7a65503a2510000000000000000c22374c61778c816c563d2d1a071b2e3e4b6072818b8e878485898a837869604a4d6278878c84807f81868d867c6e6157483b2b1d0c000000000000000d22384d62778d89745f4926140100000000000000000000000000000010253b50657a8d8d8d8d8d8d8d8d8d8d8d8d7d68533d281300000011273c51667c91826d58432d18030000000000000000000000000000000000000014293e53697e93826c57422d170000000011273c51667c9185705b3a2a1804000000000000071b2d3e51667c917e685443301e324657728787725746331e0a00000000000005182a3b50657b908773604a35200d000000000000000000000000000000000000000000000000000000000000000000011527374859657b8c8978625645321d1302000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013253652677d92806b563a2a2e3f4f647a8f836e5c4a362210000000000000000000000000000000000000081d3144556e83907b65503b251b2e3e4e63798c846f5d4b3722110000000000000000000000000000000000000d18202e3737444b4f52535352504b46393632291d150900000000000000000000000000000000000000000000000000152b40556a808f79644f3a240f0000000000000011263b51667b907c67523c27120d22364a5c6c81968579726f70747a83897e6c60586f84897a6f6b6a6c7078828c83756259483b2a19090000000000000c22374c61778c8a745544311d080000000000000000000000000000000b21364b607478787878787878787878787876614c36210c00000010253a4f657a8f846f5a442f1a000000000000000000000000000000000000000012273c52677c91836e59442e1900000000152a40556a7f95826c57422d1700000000000000001020354b6073878773604a3521364b61768a836e5939291703000000000000000d20354a607387907b65503c2b190500000000000000000000000000000000000000000000000000000000000000000009192a3b4b5d697f948574604b4231201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071c3043546d82907b65503b2522374b5d6f848c79644e3e2e1b0800000000000000000000000000000000000b20354b6075898975604b36201021364a5b6e838f7a654f402f1808000000000000000000000000000000010f1d2b343e4b4f55606467696967656157544b46393127190f010000000000000000000000000000000000000000000001162c41566b818d78634e38230e00000000000000152a3f556a7f8d78624d38230d0f243a4f647a8c8675635b5a5460646e7b88817261778a7e695c5655575a636d7a8786776259473727150200000000000c21364b61768b8a75604b35200b000000000000000000000000000000091e32455660636363636363636363636363615846331f0a0000000e23384d63788d86715b3a2917040000000000000000000000000000000000000010253b50657a9085705b46301b00000001152737586e83937e69543e29140000000000000000081c304354697e907b66503d2c3a4f657a8f7f6a543f2a150000000000000000071c304354697e94836e5a48342009000000000000000000000000000000000000000000000000000000000000000000000d1d2e3f4f616e8297816c604e3e2d1c0c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354a6074888975604b36201b2e3f4f647a8e846f5c4b372211000000000000000000000000000000000010253a4f657a8f846f5645321d091a2d3d4d63788b85705e4c3625130000000000000000000000000000010f1f2c3b484c5c646e75797c7e7e7c7a76706961574b44372d1f110400000000000000000000000000000000000000000002182d42576d828c77614c37220c00000000000000182d42576d828a74604a35200b162839586d82907b65574a3d434b4f5e667888816c7a8d78634e3e403c494d5c6477858677615544311d0f00000000000b20354b60758a8b76614b36210c00000000000000000000000000000002162838454b4d4d4d4d4d4d4d4d4d4d4d4d4c463a2917040000000c21364b61758b88735846331f0a000000000000000000000000000000000000000f24394e64798e87715c47321c000000081d3144557186907b65503b26100000000000000000011426364c617689846f5b49363e53697e907b66503b26110000000000000000001325364c61768a8b78624d3727150200000000000000000000000000000000000000000000000000000000000000000000102132434b617586927d685c4a3a29180800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e846f5645321d1022364a5c6e838f7a644f3f2f1c0800000000000000000000000000000004182a3a556b80937e6954382815020f2135495b6d82907b665443301c09000000000000000000000000000f1f2d3d4959626d7a83898f908e8d8e8f8a857e766a60554a3d2f221205000000000000000000000000000000000000000003192e43586e838a75604b35200b000000000000001a2f455a6f8487725443301c091e32465772888874604a392d3035404c5a6379897e7c8b76604b362a2c353e4b596177868474604b3d2d1a0700000000081c30435473888d78634e38230e000000000000000000000000000000000a1a2832363838383838383838383838383633291c0c00000000091e32465773888b76614c36210c000000000000000000000000000000000000000e23394e63788e87725d48321d0000000b20354b60758a8c77624d37220d000000000000000000081e3346576c818e79634e3a38586d828c77614c37220c000000000000000000081f3347586d8295806b5544311d080000000000000000000000000000000000000000000000000000000000000000000003141e32465763798a8b7a645847362513000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000316283854697f947f6954382815071b2d3e4e63798c846f5d4b3723120000000000000000000000000000000a1f34475971868d78634e38230e0006192c3c4d62788a8672604a3726140100000000000000000000000a1a2d3d4a5b6377828f8e867f7b7978797c808790897f74635b4c403023120200000000000000000000000000000000000000051a2f445a6f8489745544311d08000000000000001c31475c718685705a3625130c21364b61768b846e5443301b1c202f3c495b677d897e8b76614c362119202e3b475963798a806b5b4a36211000000000011426365b7086907a65503b251000000000000000000000000000000000000a161e21232323232323232323232323211f170c0000000000031628395a6f858f79644f3a240f000000000000000000000000000000000000000e23384d63788d88735d48331e0000000e23384e63788d8974594834200b000000000000000000031729394d62788b826c58474556718688735947341f0b00000000000000000004172a3a4f647a8f8874604b36200f000000000000000000000000000000000000000000000000000000000000000000000003162939495b677d918776615443301c1100000000000000000000000000000000050b0d15160f0d08000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566f848e79644e39240f001021364a5b6e83907b6550402f180800000000000000000000000000000c22374c61778b87725b4935210c00000e2034485a6c81917c675544311d0a00000000000000000000021528384a5b637988948479716a66646364676b727b85948679665e4d4130201000000000000000000000000000000000000000061b30465b708587725d37261401000000000000001d32475d7287846f5a442f1a0d22374d62778c816c5736251308111e2c3d4d5f6d82878d78624d38230d101d2a3a4a5b697f8b79634e3e2e1b0800000000192e43596e83927d68523d281300000000000000000000000000000000000002090b0e0e0e0e0e0e0e0e0e0e0e0e0c0a0400000000000000172c41576c81927d68523d2813000000000000000000000000000000000000000d22384d62778d88735e49331e00000012273c51677c9186705b3b2b1905000000000000000000000b2035495a6e838977614c4b60758a846f593b2a1804000000000000000000000c22374b5c7186917c67523d2d1a0700000000000000000000000000000000000000000000000000000000000000000000000b1b2c3d4d5f6b80968372604a402f1e0e00000000000000000000000000000d1820222a2b25221b1002000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b60758a8874604a35200b00071a2d3d4e63798b85705e4c362513000000000000000000000000000013253652677d92826c573d2c1a06000005192b3c4c6177898673604b38281502000000000000000000091d324556637989937f70635b55514f4d4f51565d65727e8b8a7c675f4d3e2e1d0d000000000000000000000000000000000000071c32475c718786715b46311c00000000000000001e33485d7388836e59442e190c22374c61778c826c57422d1700000f1f30414c617789917b66513c2611000c1c2d3d4b607386846f5c4b37220c00000000162b40556b8095816b563626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d92826c573a2a17040000000000000000000000000000000000000d22374d62778c89735e49341e000000152a40556a7f95826d58422d18000000000000000000000006192c3c50657a8f7f6a554f64798e806a55402b150000000000000000000000081b2e3e53687e9385705b4a36210b0000000000000000000000000000000000000000000000000000000000000000000000000f1f30414b607384957f6a5e4c3c2b1a0a0000000000000000000000000d1d2b34373f403a372e20130500000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90826d5443301c0700000f2135495b6d82907b665443301c09000000000000000000000000071c3043546d82917c67513c2712000000000d1f3447596b80927d685645321d0b00000000000000000417293a4b607486937e69614e4a3d3b3938393c3f4b5460697b898c7d675c4b3b2b18050000000000000000000000000000000000081d32485d728785705a45301b05000000000000001e33485d7388836e59432e190b20354b60758a836e58372715020001131f3447596a7f95806b563b2b1805000f1d314455677c8f7a644f3a2a170400000011263c51667c9185705443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d86715847331f0a0000000000000000000000000000000000000d23384d62788d88735d48331e000002152737586e83947f69543f2a140000000000000000000000000e23374b5d718688746053687d917c66513c27110000000000000000000000001021364b6176898e79634e39291703000000000000000000000000000000000000000000000000000000000000000000000001121d3144556277888d7c665a4838281502000000000000000000000d1d2b3b484c54564f4b3f312313010000000000000000000000000000000000000000000000000000000000000000000000000005182b3b566b81927d6852362513000000061a2c3d4d62788b8672604a3726140100000000000000000000000b20354a6074888a76614c36210c0000000004182a3b4c6176898774604b39291603000000000000000a1f3347586b8095836e604f43362d26242324272f36434a5d6579898b7a6459483420120000000000000000000000000000000000081e33485d7388846f5a442f1a05000000000000001d32485d7287846e59442f19081d314455728786705544311d08000004182a3a4c6176898671594834200b00011426374b607387836e5847331f0a0000000d22374d62778c8974604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2035495a73888a76614c37210c0000000000000000000000000000000000000e23384e63788d87725d48321d0000081d3144557186917b66513c2611000000000000000000000000081c2e3f52677d927d67576c818d77624d38220d0000000000000000000000000a1e3346576c8197816c5746331e0a000000000000000000000000000000000000000000000000000000000000000000000000011527374759657b8c8978625645321d1302000000000000000005192b3b4859626a6b645d4e41311e0b000000000000000000000000000000000000000000000000000000000000000000000000000b2034485971868c77624d37220d000000000f2035495a6c82917c675544311d0900000000000000000000000f24394f64798e85705846331f0a00000000000c1f3346586a7f937e695746321e0c000000000000000c21374c61768a8977624c4232211a110f0e0f121825303f4b5b657b8c8877624d4130190900000000000000000000000000000000091e33495e7388846f59442f1a00000000000000001c31475c7186846f5a452f1a01142637596e838a75604b36200b0000000c1e3346576c818a77624d37220e0000091c3043546a7f8a77614c37210c0000000b2034485972878f7a644f3a241000000000000000000000000000000000000000000000000000000000000000000000000000000000000006192c3c586d82927d67523928160300000000000000000000000000000000000f253a4f647a8f86715b46311c00000b20364b60758a8d78634d38230e000000000000000000000000001120364b60748886705d708589735a4835200b000000000000000000000000031729394e64798e8976614b36211100000000000000000000000000000000000b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0009192a3b4b5d697e938574604b4131201000000000000000000b2034485962777f807a68604e3a2508000000000000000000000000000000000000000000000000000000000000000000000000000d22374d62778c8771594834200b0000000006192c3c4d62788a8673604b3727150200000000000000000003172939556a7f947f6a553a29170400000000000417293a4b6175888875614b3a2a1704000000000004172a3a54697f94826c594834241507000000000008131c2e3d4b5d697f94836e5f4d37271501000000000000000000000000000000081d32485d728785705b3a2a1804000000000000001a30455a6f8586715c3928160314293e54697e8f7a654f382815020000031729394e63798e7e69543c2c190600011426364d62788d7e685337271502000005192b3b566c8195806a553e2d1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667c91836e5746321e09000000000000000000000000000000000011263c51667b91846f5a442f1a00000e23394e63788e8975604b35200b00000000000000000000000000091d3145566a7f8f7a657489846f5a3c2b1905000000000000000000000000000b21364a5c7085937e68533f2e1c0800000000000000000000000000070c0e202020202020202020202020202020202020202020201d2e3f4f616e8297816c604e3e2d1c0c000000000000000d22374d62788994958d7d68523625130000000000000000000000000000000000000000000000000000000000000000000000000013253652687d92816c563b2b180500000000000e2034485a6c81927d675544311d0a0000000000000000000a1e33465770858f7a644f3a240f000000000000000c1e324657697e937f6a5847331f0d00000000000a1f33475871878e79644f3b2b18060000000000000000101f2e3f4b607386917c675544311d08000000000000000000000000000000061b30465b708587725947341f0800000000000000182e43586d8388735746321e090d22384d62788a816c5645321d0a0000000b21364a5b718685705a493520080000082035485a7186846f5544311d0800000010263b50657b9086715c4a36220c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b6075898976614b362110000000000000000000000000000000000014293e54697e93826c57422d17000012273c51677c9186715443301c0800000000000000000000000000021527384c61778a836e788e806b56412b160000000000000000000000000000071a2d3d52687d9286715d4b37230d0000000000000000000000010f1a212435353535353535353535353535353535353535353535353532424b617586927d685c4a3a291808000000000001162b40566b8095a7ab9d88735443301c070000000000000000000000000000000000000000000000000000000000000000000000071c3043546d83907b66513b261100000000000005192b3c4c62778a8774604b3828160200000000000000000c21364c61768a8974604b35200b00000000000000031628394b6074878976614c3b2b1805000000000c21374c61778c88735c4a361d0d00000000000000000001111d314455657b908774604b35201000000000000000000000000000000002172c41576c818c77614c3626140b090200000000162b40556b808a76614b36210c0b2034485a70858875604b382816020000071a2d3d54697e8d78634d362513000006192b3c566b818974604b36200b0000000b20354b6074888e79644e3a2a17040000000000000000000000000000000000000000000000000000000000000000000000000000000000091e3245566d82927d68523e2e1b0800000000000000000000000000000001152737576c81947e69543f29140000152b40556a8095836e583626140100000000000000000000000000000a1f3447596d828a787d917c67523c27120000000000000000000000000000000f21364b6075898f7a65503b2a1805000000000000000000000f1f2d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a465763798a8b7a645847362513000000000002172d42576c8297acb49f8975604a35200b00000000000000000000000000000000000000000000000000000000000000000000000b20354a6074888a76614b36210c000000000000000d1f3448596b80937e685645321e0b000000000000000011273c51667c91836e5443301c0800000000000000000b1d324556687d92806b594834200e0000000011263c51667b91836e593e2d1b0000000000000000000000011426374b5d6e83927d68523e2e1b0700000000000000000000000000000011263b51667b907d6854433024211e160a00000012283d52677d8e79644e39240f05192b3c51667c917d685645321e100000000f22374c62778a806a5443301c07000012273c51677c8e79644e39240f000000081d3144556b8095816c5847331f0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000021628384f647a8f85705c4b372211000000000000000000000000000000081d3144557085907b65503b26100002152737596e83957f6a55402a1500000000000000000000000000000004182a3a4e63798e80808d78634e38230e000000000000000000000000000000091e3245566b8196836e5948341f09000000000000000000071a2d3d4a4e606060606060606060606060606060606060606060606060606060605b677c918776615443301c07000000000011273c51667c919f9f98836e5443301c0700000000000000000000000000000000000000000000000000000000000000000000000f24394f64798e85705746321e0a0000000000000005182a3b4c6177898875604b39281603000000000000061a2c3d576c82927d6853362614010000000000000000021528384b6073878a77624d3c2c1906000000152a3f556a7f947f6a553f2a1500000000000000000000000009192f3f4f647a8f86715c4b37220d0000000000000000000000000000000b20354b6073878673604b42393632281a0a00000e24394e63798e7d68523d2813000d20354a6073868775604b3e2d1c0c00000b1f3447596f848773604a35200b00000e23394e63788e7d68523d2813000000011527374d62788b8976614c3b2a180500000000000000000000000000000000000000000000000000000000000000000000000000000000000a22374b5c71868f7a644f3f2e190900000000000000000000000000000b20354b6075898a76614c36210c00081d3144557187917c67513c2712000000000000000000000000000000000c21364a5b6f8488848974604b35200b000000000000000000000000000000021628384e63788d8a77624c3726140100000000000000000c21364a5b707575757575757575757575757575757575757575757575757575757575757580968372604a35200b00000000000f24394d5e6a7f898a8376614c362513000000000000000000000000000000000000000000000000000000000000000000000003162839546a7f947f6a553929160300000000000000000d1f3347586b80937e695746321e0c0000000000000c2135495b72878c77624d37220d000000000000000000000a1d314455677c91816c5a4935200f000000172c41566c81927d68533d2813000000000000000000000000001122374b5c72878f7a644f3a240f000000000000000000000000000000081c304354667c907f6960524e4b4538281602000b20354b607489826c573d2d1a07071c304354657b90806a5c4a3a2a1b0c0005182a3b52677c8f7a655038281603000b20364b60758a806b55402b1600000000092035485a6d8295806b5947341f120000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e51667c91846f5d4b372715020000000000000000000000000115273750657a8f86715746331e0a000b20364b60758a8e79634e39230e00000000000000000000000000000000071a2d3d51667b908a85705443301c08000000000000000000000000000000000a2135495b6f84947f6a5544311d0800000000000000000e24394e63798a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a9699947e69543f29140000000000091d304050616a74766f6158473318080000000000000000000000000000000000000000000000000000000000000000000000091e32465770858f7a644f3a240f00000000000000000004182a3a4c6176898875614b3a29170400000000000e23384e63788d8671594834200b00000000000000000000011426374a6072868b78634d3d2d1a070000182d43586d82917c66513c271100000000000000000000000000081b2e3e546a7f94816c573d2c1a060000000000000000000000000000011426364c5e6a808d7e706863605645321e0900081d3144556f8487725b4a36210c001325364c5d6e828b7a64584739291c0f020d21364b607589826d5645321e0900081d3144557388826d58422d180000000005192b3c4d62788b8a77624c402f1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000001024394c5e71868f7b655544311d11020000000000000000000000081d3144556b81957f6a5539291703000e24394e63798e8b75604b36200b00000000000000000000000000000000000f20354a60738696816c573626140100000000000000000000000000000000061a2c3d52677c918874604b35200b00000000000000000b20364b607483848484848484848484848484848484848484848484848484848484848484848484806b56412c160000000000001222334350546060564c473a2a180000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a8974604b35200b000000000000000000000c1f3346586a7f947f6a5846331f0c000000000216283854697e93816b563b2b19050000000000000000000000091c304354667c91826d5b4a3621100000192f44596e84907a65503b251000000000000000000000000000001022374d62778b88735b4935210c00000000000000000000000000000008182f4050626a7d89857d7974604b36210b000114263753687d8e79634e3924100008182f3f4c61768787766157463a2d1d150a1e3245566d828975604b36210d00021527375c7187846f59442f1a00000000000e2035495a6c8196836e5e4c3c2b1b0a00000000000000000000000000000000000000000000000000000004030000000000000000000000091d304050657b8c8674604b402f201001000000000000000000011426364b6074888e79634e39230e00000f253a4f647b84806b5544311d080000000000000000000000000000000000071c304354657b847a644f3a240f0000000000000000000000000000000000000e20354b6073818379644e39240f0000000000000000091d324556606f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6b62513d29140000000000000415253336434b4b4538332a1c0c00000000000000000000000000000000000000000000000000000000000000000000000011263b51667b90836e5544311d08000000000000000000000417293a4b6175888976614c3a2a1804000000091e3245566f84907b65503b2610000000000000000000000000001325364c5e70858b79634e3e2d1b0700192e43586e83907b66513b261100000000000000000000000000000b2034485971868d78634e38230e0000000000000000000000000000000012223344505f6876818d8e7d67523d281200000c22374c61778a7f6a553e2d1b0700111f334758647a8a847561584a3d32281f17283850657a8f7c67523b2a1805001c31465b7186856f5a45301a000000000006192b3c4b617587907c665a4839281a0b000000000000000000000000000000000000000000000003090c19180b07000000000000000000001223374b5d6c8195806b5e4c3e2d20120400000000000000000e1c304354677c9185705b4936210c00000d22374b5d646f6b6251372715020000000000000000000000000000000000001325364b5d656e645c4b37220d000000000000000000000000000000000000081d314455606c6f645c4a36210d000000000000000002152838454b5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a56514434220e000000000000000715182630353632281f180c00000000000000000000000000000000000000000000000000000000000000000000000005192b3c566c81937e68533726140100000000000000000000000c1e324657697f94806b5847331f0d0000000b21364b6075898a75604b36210b0000000000000000000000000008182f4050657b8f836e5c4a36220d00182d42576d82917c67523c2712000000000000000000000000000005182b3b566c81937d68533e2813000000000000000000000000000000000a1e33465761768489817c77624d37220d00000b1f344759708586715c4a36220e000417293a4a5c657b8b8476635b4b4538332927354a607388846f5948341f0b061b30465b708585705b46301b0000000000000e1e324657667c8d897862574538291b0e0000000000000000000000000000000000000000000b161e212e2d201c13080000000000000000081c2e3f4c6176878d7c665c4a3e301f180c060000000005101e2d3d4b607386917c66513d2c1a060000081b2e3f4b4f5a5651443419090000000000000000000000000000000000000008182f3f4b50594f4b3e2e1b0700000000000000000000000000000000000001152737444b575a4e4a3d2d1a070000000000000000000a1a28323644444444444444444444444444444444444444444444444444444444444444444444413d3426160500000000000000000008141c20211e160a04000000000000000000000000000000000000000000000000000000000000000000000000000b2034485a72878d78634d38230e000000000000000000000000031629394b6075888977614c3b2a1805000010253b50657b8b816d5645321e0900000000000000000000000000001223374b5d6d828b79644f3a240f00162c41566b81937d68533e281300000000000000000000000000000013283d52687d92816c57422c17020000000000000000000000000000021527384c61768787786c6662594834200b000004182a3b53687e8e79644e3c2b1905000c1c2d3e4b5d657b8987796a60564c463a3c3b43546b808a77624c37220f001c31465c7186856f5a45301a000000000000031629394c5e6a809585756056463a2c1c13080000000000000000000000000000000000000d1b283236434235302518080000000000000000111f33465863798a897a645c4d40342a211a1312111219202e3c4a5b697e9385705e4c381f0f0000000010202e373a44413d34261600000000000000000000000000000000000000000011212f373b443a372e201000000000000000000000000000000000000000000919273135414439362d1f0f00000000000000000000000a151d202f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2c29221608000000000000000000000001080b0b09020000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778d87725a4935200c000000000000000000000000000b1e324556697e93806b5948341f0b00000e23384b5d65746d6352382816020000000000000000000000000000081c2e3f53646d74645c4a36220d0013293e53687e93806b56412b160000000000000000000000000000000f24394f64798e856f5a45301a000000000000000000000000000000091d3145566b808b7a645a514d483b2b18050000000c21364b607588836d5a4835200f00000f202f3f4b5d6578868b7f746961585551504f4f63798d7e69543d2d1a0717293a5c7287846e59442f19000000000000000b1b2f404a6072839984746158493d3025181008010000000000000000000000000007121d2b39464b59584a4336251300000000000000000417293a4a5b667c8b887a665e4c473b352c292726272b353e4b5a63798a8b79634e402f1d010000000002101b22252f2b2921160800000000000000000000000000000000000000000003111c23252f24221b100200000000000000000000000000000000000000000009151d202c2f24211a0f0100000000000000000000000002090b1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a16140e0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013283d52687d8a7f6a553c2c190600000000000000000000000000031628384b6074848977624c37220d0000081c2f3f4b505f575245351a0a000000000000000000000000000000001121354653585f4f4a3e2d1b070010253b50657b90836e593c2b190500000000000000000000000000000c22374c61778c88725d4825130000000000000000000000000000000b20364b607589856f5c4a3c37342b1d0d00000000091e3245576a808a78624d3d2c1808000111212f3f4b5a63747f89877e766f6a6765646567718586715c4a36210d1f3346587389826d58422d180000000000000000111c3043546074849a8476635b4a43362e201d140c0a0300000000000000060c101b222f3b4857616e6d605443301c0700000000000000000b1b2d3d4c5e667c8b8a7c6d61594e493d3e3c3b3d3c484d5c647887937e685b4a36221200000000000000080d0f1a16140e04000000000000000000000000000000000000000000000000080e10190f0d0700000000000000000000000000000000000000000000000001080b171a0f0d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4e5f68746a61503c1e0e0000000000000000000000000000000a1d324556607074625948341f0b00000011212f383b4a423f3527170000000000000000000000000000000000031828353f434a3a362d201000000d22374c62778c87725a4834200b00000000000000000000000000000b20354a60758a89745443301c0700000000000000000000000000000e24394e63798e806b553e2d2220180d0000000000031628394c61778a816c5b4936251300000311212f3c4956606a7781898a857f7c7a797a7d81888e79644e39240f21364c61768b7f6a55402a1500000000000000000013253645566074849686796860544b3e353126211e17171514141415171a21232d36404c596275838272604a35200b0000000000000000000f1f2f404c5e667a889182776c635b5753525152555a626c7a8894806b604e3d2d1a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000913191c200f0d07000000000000000000000000000000000000000000000000090f111f1e0d0b06000000000000000000000000000000000b1e31414e525f55504333200000000000000000000000000000000002152838454b5a5e4c483b2a180500000003111c2325342d2a2317090000000000000000000000000000000000000a18232b2d3424221b100200000b1f34475972878d77624d38220d0000000000000000000000000000071c30435474898a75604a35200b00000000000000000000000000000f243a4f64798f7f6a543f2a150b05000000000000000a1f3447596b808a79635443301c0e000003111e2c38454b59626b757c81878a8c8d8d8b88837d73604b35200f253a4f647a8f7c67523c271200000000000000000008182838455660738192897e72645c504b44373633292c2a29292a2a2d2c35383e4a4e5e667785988576614b36210c0000000000000000000112222f404c5c6477828f8a8179716c686766676a7078818c8c7f6b625142311f0f00000000000000000000000000000000000000000000000000000913191c1f1d180e020000000000000000000000000000000000000000000000000000040a0c1c191711070000000000000000000000000000000000000000000000000000030d131520191711070000000000000000000000000000000000000000000000000000000000000d1b262e313524221b1002000000000000000000000000000000000000000004111c232634332320190e000000000000000000000000000000011323313a3d4a3f3c33251503000000000000000000000000000000000a1a283236454937342a1d0d000000000000080e101f18160f060000000000000000000000000000000000000000061016181f0f0d070000000005182a3b576c81927d67523a2a170400000000000000000000000000031628385e73888b76604b36210b00000000000000000000000000000e23384d63788d806b56412b1600000000000000000004182a3a4b6175878572604a3c2c1b0b0000000e1a28323b484d5660676c717576787776736e67605544311d182a3a54697f8c77624d37220d000000000000000000000a1a28384555606c7d8993857a6f666055514b463941403f3e3f40423d494e545c646f7c88978475615746321e09000000000000000000000412222f3e4b59616d7b848e8d87827e7c7b7c80858a90867a6961514433241401000000000000000000000000000000000000000000000000000d1b262e3134322b2012020000000000000000000000000000000000000000000000000c171f21322e2c24180a000000000000000000000000000000000000000000000000071520282a352f2c24190a00000000000000000000000000000000000000000000000000000000091b2b3842464a3a372e2010000000000000000000000000000000000000000111222f383b494938352b1e0e00000000000000000000000000000005131e2528342a272015070000000000000000000000000000000000000a151d203034221f180d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263b50667b90846f5847331f0a00000000000000000000000000091e324556748a8a745645321e0900000000000000000000000000000c21364c61768b826d57392816030000000000000000000c1e324657667c917d685a49392918080000000a161e2b3438454b51575460616362615759524b443727151f3447596f848772594834200b00000000000000000000000a1a2837444b5f6777838f8f847b746c66615759565554535455575a5b6369707983909081736157463928160300000000000000000000000412202e3b474c5d656f7980868a8e9090908d89837b72645d4f433326160600000000000000000000000000000000000000000000000000091b2b3842464a473e30200000000000000000000000000000000000000000000000000c1c2933374744403628180700000000000000000000000000000000000000000000031525333c404a44403629190200000000000000000000000000000000000000000000000000000013263849565b604f4b3e2e1b070000000000000000000000000000000000000f1f2f404c505e5e4d483c2b1906000000000000000000000000000000010b10131f15130d03000000000000000000000000000000000000000002090b1b1f0d0b050000000000000000000000000000050b0d111314120e0c06000000000000000000000a00000000000000000000000000000b20354b6074888a76614c382816020000000000000000000000000b21364b60768b88735e3828160200000000000000000000000000000a1f334658728786715746321e09000000000000000000031628394c5e6e83897863574636251809000000020d18202832363c36434a4c4d4d4b46393d353127191628384c61778a806b563b2b19050000000000000000000000000a192731414d59626e7a848e9088817b76726e6c6a6969696a6c6f73787e858e92877b6c60554639291b0b0000000000000000000000000002101d2a343f4b505b636b7175797a7b7b78756e6660544b3f32251608000000000000000000000000000000000000000000000000000013263849565b5f5b4e3e1d0c000000000000000000000000000000000000000000000417293a474c5c595447362411000000000000000000000000000000000000000000000d203343505560595447362010000000000000000000000000000000000000000000000000000000192e4256677175645c4b37220d00000000000000000000000000000000000c1c2c3d4c5e667473625a4835200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080d1820222628292723211a0e0902000000000a1012200f0d070000000000000000000000081d3144556b81947f6a5645321e0d0000000000000000000000000d22384d62778d87715c47321c0000000000000000000000000000000417293a586d838a76614b36210c000000000000000000000b1b2f404c61768786756154433626190a00000000050a161e212725303537383836322827201d150b1e3245566a7f8e79634e39230e000000000000000000000000000009151d313b484c5c646f7981888f908a8784817f7e7e7f7f8285888d938e867d74665e4b4437291b0b000000000000000000000000000000000c181f2e373d4a4e55566064656665636055514a43362e201507000000000000000000000000000000000000000000000000000000192e42566771746c5b3b2a18040000000000000000000000000000000000000000000a1f33475861716e6554402c170200000000000000000000000000000000000000000013283c50616a756e65543e2d1b0700000000000000000000000000000000000000000000000000001c31465b71858a7a644f3a240f0000000000000000000000000000000009192a3a495b667c898978624d38230d0000000000000000000000000000000000000000000001080b0f121412100b0903000000000000000000000a00000000000000000000000000000000000002101b222b34373b3e3e3c38352c201d150a0004121d24273524211a0f01000000000000000000011426374d62788a8875604b3b2b1808000000000000000000000011273c51667c91836e58432e190300000000000000000000000000000012273d52677c917c66513828160300000000000000000000121f33475863798a837260544437281a0f010000000002090b12131c20212322211e16120b080b1b2c3d4b607588846f5b4936210c00000000000000000000000000000001131d2b343e4b4f5c646c747a7f84888b8e8f9091908f8e8b88847f79716860564c403127190b00000000000000000000000000000000000004111c232d363938454b4e5051504e4b4437353025181002000000000000000000000000000000000000000000000000000000001c31465b71858a745947341f0b000000000000000000000000000000000000000006192b3c4c617686836e59442e1900000000000000000000000000000000000000000003162838556a7f8a836e5c4a3622100000000000000000000000000000000000000000000000000000192e44596e83917c67523c271200000000000000000000000000000001142637475863798a8c7b655a4835200b00000000000000000000000000000000000000000209141d202527292725211e160a090000000000080d0f1f110f0900000000000000000000000000000714202e373b484c515353524e493d3632281a11122230393c4a39362d1f0f00000000000000000000092035485a6c82947f69594836251300000000000000000000081b2e3f566b80937e69533e2914000000000000000000000000000000000c21364b617689836d5645321e09000000000000000000000417293a495b667c8d8172605545382c1f13080000000000000000070b0c0e0d0c090300000c1a2839495b6a7f8c7a644f3d2c1a0600000000000000000000000000000000000d18202e373d4a4e5560656a6f7376797a7b7c7b7a7976736f6a635b534b45382f1d1509000000000000000000000000000000000000000000080f1a2124283236393b3c3b38353126201c1308000000000000000000000000000000000000000000000000000000000000192e44596e838c77614c37220c00000000000000000000000000000000000000000b2035495a6b819686715c392917030000000000000000000000000000000000000000091e32455670859a8e7a644f3e2d1b0700000000000000000000000000000000000000000000000000162c41566b81947f69543f2a14000000000000000000000000000002101d314455617687937e695d4b3c2b19060000000000000000000000000000000000000009151d2631353a3d3e3d3a363228241c12070002101b22253526241d12040000000000000000000000061425323e4b4f596266686967635b544b45382f1c1d30404d515f4e4a3d2d1a0700000000000000000005192b3c4d6278898a77625443301c130300000000000000000e22374b5d71868e79634e39240e000000000000000000000000000000000a1e3346576e838975604b36210b00000000000000000000000c1c2c3d4c5e687e8d82736056493d31221b1007000000000000000000000000000005101c2938465763798a826d5c4a361f0f0000000000000000000000000000000000000005101b222d3637444b4f555a576163656666666563615759554e4a3d3631271a1102000000000000000000000000000000000000000000000000070c0e161e212425262623201d140b070000000000000000000000000000000000000000000000000000000000000000162c41566b818f79644f3a240f00000000000000000000000000000000000000071b2e3e4d62788b9d89735746331e0a00000000000000000000000000000000000000000b21364b60758a888a836e5c4a3622100000000000000000000000000000000000000000000000000014293e54697e93816c57422c170200000000000000000000000000102031424b60738497816d604f3f2e1e0e000000000000000000000000000000000000000c19273137444b4f525352504b4539382f221b1010202e373a4a3c383022120000000000000000000000132432434f5c646f777b7d7e7c78726960564c403026394d5f6775645c4a36210d000000000000000000000e20344859697e938372604a41311e170b0200000000030f1f30404f647a8f86715b4a36210c000000000000000000000000000000000317293952677d917c67513828160300000000000000000000000f1f30404e60687d8c8274635b4e42372e221b100a04000000000000000001080d18202e3a47566175868776614c3e2e1b01000000000000000000000000000000000000000000080f1a212731353a3f39464b4e4f505151504e4c46393f39362d201d150a000000000000000000000000000000000000000000000000000000000002090b0f1011100e0b08010000000000000000000000000000000000000000000000000000000000000000000014293e54697e917c67513c2712000000000000000000000000000000000000000922364a5c6e8398888b76614b36210c000000000000000000000000000000000000000010263b50657b9082838e7a644f3e2d1b0700000000000000000000000000000000000000000000000011263c51667b91846f59442f1a000000000000000000000000000d1d2e3f4e606c81968574604b42322111000000000000000000000000000000000000000c1c2937444b556064676967656057514c40372e1c1b2e3e4b4f5f514c40301d090000000000000000000e1e31424f61697a848a90908e8f8d877e74665e4b43363c51677c8a79644e39240f0000000000000000000005192b3b4a607284947f6a5f4e4233291d150f0d0d0f161e2d3d4d5e6e83927d68533d2d1a0700000000000000000000000000000000000c21364c61768a836e5645321e09000000000000000000000001122231414e5f677c8a867968604f4b3e362d221f1813100e0d0d0d0f11151d202b343e4b586174848b7a6458473320100000000000000000000000000000000000000000000000000709151d20252a283236393a3b3c3b3a393633292a24211a0f090200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011263c51667b917e69543f2914000000000000000000000000000000000000091930404f647a8c85808e79634e39240e000000000000000000000000000000000000000417293a566b80937e7b8f846f5c4a3622100000000000000000000000000000000000000000000000000f24394e64798e86715c3a2a170400000000000000000000000a1b2b3c4b5d687e928877625645322414030000000000000000000000000000000000000417293a4655606a747a7c7e7c7a766e665e4f4b3e3026374b5c6474665e4c38240f000000000000000006192c3c4e60697f8b91857e7a797a7d848a877b6b6054453853687d917b66513c261100000000000000000000000d1c3043546176878d7d68604b463932282423232528323d4a5b667c918775604b36210f0000000000000000000000000000000000000a1e3346576f848975604b36210b00000000000000000000000004132331414d5e6679868a7d70645c4f4a3e37342a28252322222324272731353b484d5c6476848c7c665c4a3a2a1702000000000000000000000000000000000000000000000000000001080b1015161e2124252627262524211e17150e0c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0e121516171615120e0b07000000000000000000000000000000000000000f24394e64798e816c57412c170200000000000000000000000000000000011527374d5e70858f7b7e907b66513b2611000000000000000000000000000000000000000a1f33465870868d7870848f7a644f3e2e1b0700000000000000000000000000000000000000000000000c21364c61768b89745847331f0a0000000000000000000003162839485a647b8b8b7a64594838281506000000000000000000000000000000000000000a1f334658617480888f918f8e8f89837b70645c4b43363a4f647a8a7c66513c261100000000000000000c2035495a687e928a7d7069656364686e788290807260564550657b907e69533e291400000000000000000000000013253647586379888d7e6d61574b45383a38383a39464b5b6379888c7b655645321e090000000000000000000000000000000000000317293953687d917c66513828160200000000000000000000000005132330404c5b6374818f857a6e645c544c473a3d3b38373738393c37444b5059626c7a87897c665e4c3e2e1c0c000000000000000000000000000000000000000000000000000000000000000003090c0e10111111100e0c0a0300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000608141c2023272a2b2c2c2a2824201c130808000000000000000000000000000000000c21364c61768b846e59442f190000000000000000000000000000000000081d314455667c91836e7c917e69533e2914000000000000000000000000000000000000000c21364c61768a8873657a8f846f5c4b37221000000000000000000000000000000000000000000000000a1f33465874898c76614c37210c00000000000000000004121e324557627888927d685c4b3b2b1a0a00000000000000000000000000000000000000091c2f404c617685958a827c79797b7f868f857a6a6054463950667b907e69533e29140000000000000004172a3a4d62788b8c7b675f53504e4f535a626d7c89837460554e63788d816b56412c1601000000000000000000000008182a3a495b637886928275696056524f4d4d4f5257616b7988947f6a5d4b38281603000000000000000000000000000000000000000c21374c61778a836d5645321e09000000000000000000000000000513222f3d4956606c7b858f8379716961595753504e4d4c4d4f51555560656d77818c8579655e4c402f201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030f1a21263035393d3f404141403d39353025221b100700000000000000000000000000000a1f334658748986715c3a291704000000000000000000000000000000031729394b6074878b7864798e806b56412b160100000000000000000000000000000000000011263c51667c91826d5d70848f7a644f3e2e1b08000000000000000000000000000000000000000000000417293a5c71868e79644e39240f000000000000000001122233434b60758596816c604e3e2e1d0d00000000000000000000000000000000000000000e23384c5e6e839886786d676463666a717b868c7f726157464e63788e816b56412c16010000000000000a1f3347586d8296806b5d4d413b393a3c494d5e6679878373604b61768b836e59432e19000000000000000000000000000c1c2c3d495a62768291877e756d6764626264676d75808b917f6a61503f2e1a0a00000000000000000000000000000000000000000a1f3347586f848975604b36210b000000000000000000000000000004121f2c38454b5d65707c878e867e77716c68656362626264666a6e757a828a897f73635b4c402f221202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0f12151617161514110e0b08010000000000000000000000000000000000000000000000000000000b171e2c3636434b4e525556575655524e4a4336372e221b10020000000000000000000000000417293a5c718689745846331f0a0000000000000000000000000000000a1e334657697e93816c61768b836e59432e1900000000000000000000000000000000000005182a3b566c81927d6853657a8f846f5c4b3722100000000000000000000000000000000000000000000000192f44596e84917c66513c271100000000000000000f1f2f4050616e82988473604b4131201000000000000000000000000000000000000000000215273750657b908977625a514f4e50555d65737e8b837561574b61768b836e59432e19000000000000000c21374c61778b8977614c3f302524252b35404d5b637888816c6057738986715b39281603000000000000000000000000000f1f2c3c4858616e7c879188827c7978787a7c838993877c6961504333211000000000000000000000000000000000000000000004172a3a54697f8f7a65503a2510000000000000000000000000000000010f1a28323f4b505f67737a82898b86817d7a78777778797c7f83898f877f76696055493d2f211204000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a0c151d2024282a2c2c2c2b292623201d140c0a0400000000000000000000000000000000000000000000000e1b29333d494e546063676a6b6c6b6a676360544f4b3e362d1d150a000000000000000000000000192f44596e848b76614c36210c000000000000000000000000000005192b3c4c61768889766158748986705b3928160300000000000000000000000000000000000b1f34475971868d78624d5d70848f7a644f3f2e1b0800000000000000000000000000000000000000000002172c41576c81937e69543e2914000000000000000c1c2d3d4c5e6a7f948776615544312313020000000000000000000000000000000000000000081d3144556e83937e6959493c3a393b3f4b5560697b888475615657748986705b3828160300000000000013283d52687d92836e58473321120e0f1920303d4a5a647a8b7e685b718688735745321e0900000000000000000000000000010f1e2b3a474c5f67737c84898f8f8d8d8f918d867e74665e4f43332515030000000000000000000000000000000000000000000010253b50657a907f69543f2a1400000000000000000000000000000000000a161e2e37414d5460656d767c82868a8d8d8c8c8d8e8c8985807a736a61584b44372c1f11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030b161e212832363a3d40414241403e3c38353126221f180c0800000000000000000000000000000000000000000e1e2c39464c5b636c74787c7f8081817f7d79746d645c4f4a3e32281a0e0000000000000000000002172c41576c818e79634e39240e00000000000000000000000000000b2034485a6b80947f69585c718688735745321e0900000000000000000000000000000000000d22374c62778c87725a4950657a8f846f5d4b3722100000000000000000000000000000000000000000000014293f54697e94816c56412c1701000000000009192a3a4a5b667c8d8a79635847372715050000000000000000000000000000000000000000000b20364b60758a8a76614c3b2c2424262e37444b5d6478878474605c718688735645321e09000000000003182d43586d82927d68523a2a1803000006121f2d3c4a5c687e8979636f848b76604b36210b0000000000000000000000000000000e1c2a33404d5460666f757a7c7e7f7e7b77716960564c403225150700000000000000000000000000000000000000000000000c21364c61768b826d58432d1803000000000000000000000000000000000002111c233036434a505761676c7175787a7b7b7b797774706b6460544c463a3127190f0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b171e29323638454b4f52555657565554514e4b443737342a221b100700000000000000000000000000000000000c1d2c3c4957616c7981888e928e8c8b8b8c8f8e89827a6f645c4b45382b1e0e0000000000000000000014293f54697e917b66513c261100000000000000000000000000071b2d3e4d62788a8774604b596e848b76604b36210b000000000000000000000000000000000012273d52677c92826d583c4b5d70848f7a644f3f2e1b0800000000000000000000000000000000000000000012273c51677c91836e59442e19000000000001152737475863798a917d675b4a3a2a1909000000000000000000000000000000000000000000000f24394e64798e85705847331d0f0e111926313f4b5a637988826d606f848b76604b36210b0000000000021527375b71868e79634e39240e00000000010f1e2e3e4e606d8285736c818d78634e38230e000000000000000000000000000000000c171f3036434b5156606567696a6966625a544b45382f2215070000000000000000000000000000000000000000000000000a1f334658758a846f59442f1a040000000000000000000000000000000000000008121825303539464c52575560626566666564626054554f4a433633291d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001121b293339464b52566064676a6b6c6b6a6966636055534c473a372e211a0f02000000000000000000000000000004182a3b495a6276818b9489827d79777676777a7e848a8f847a6d6056483c2c1e0e00000000000000000012273c51677c917e69533e2914000000000000000000000000000922364a5c6d82927d675645576c818e78634e39230e0000000000000000000000000000000006192b3c576d82927d67523d3f50657b8f846f5d4b3722110000000000000000000000000000000000000000000f24394f64798e86715b3929160300000003101d31445561768795806b5f4d3d2d1c0c000000000000000000000000000000000000000000000012273d52677c92826c573a291700000009141d2e3c495b647a8a7e696c818d78634e38230e0000000000081d31445574898a76604b36210b000000000000102031424c6176887e6a7f907b66503b2611000000000000000000000000000000000004121826303538454b4f52545554514d483c3632281a1204000000000000000000000000000000000000000000000000000417293a5e738885705b46301b0600000000000000000000000000000000000000000008131c202933363c37444b4d4f5051504f4c4a43363a3530251f170c01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c2f39464c5761686f757a7d7f818181807e7b78756e6961594f4b3f362d1d150a000000000000000000000000000b1f344759627886978a7f766d68646260616265696f77808b8c8274625a493c2c1c0c00000000000000000f24394f64798e816b56412c1601000000000000000000000009192f404e647a8c8572604a3854697e907b66503b2611000000000000000000000000000000000b2035485a72878c77624d37374b5d70858f7a654f3f2e1c0800000000000000000000000000000000000000000c22374c61778c89735746321e0a000000102131424b607384998372604b41301f0f00000000000000000000000000000000000000000000000013293e53687e937f6a553f2a150000000001101e2c3c4a5c687d8a796a7f907b65503b261000000000000b20364b60758b89735645321e0900000000000002141f334758687d88767d927d68533e28130000000000000000000000000000000000000008141c202731363a3d3e3f3e3c38342b201d150a000000000000000000000000000000000000000000000000000000091e3245567489856f5a45301a050000000000000000000000000000000000000000000000070b171e2127273136383a3b3c3b3a3735302524201c13080400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009182630404c57616a767d84898f92908e8d8d8e90918d89847e776e655d4e4a3d32281a0e0000000000000000000000091d2f404c6177879b8578696157524e4d4b4b4d4f5459626b7984968578635b493a2a1909000000000000000c22374c61778c836e59432e190000000000000000000000011426374c5e6f848f7b6554433c51677c917e68533e2913000000000000000000000000000000000d23384d62788d87725948342e3f50657b8f846f5d4b37231100000000000000000000000000000000000000000a1f33475874898b76614b36210c00000e1e2e3f4e606c8196867561544330231201000000000000000000000000000000000000000000000000142a3f54697f947f69543f2a140000000000000e1e2d3e4e606e8385737c927d68533e281300000000000c21374c61768c88735d382816030000000000000004172a3a4e5f7085807b90806b56402b16010000000000000000000000000000000000000001080b151d202527292a29262220190d0902000000000000000000000000000000000000000000000000000200030d21364b60768a836e58432e190300000000000000000000000000000000000000000000000000030a0c12151d2023252626262422201c130f0b07000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009192636434b5e66768089928f88827e7b797878797a7d808589908a837a6f635b4b45382b1e11030000000000000000000f24384c5e6f83998676635a4c463939373636373a3b484c5b637280938879635847372614010000000000000a1f334758748986705b3828160300000000000000000000081d314455667c90836e5d4b363a4f64798f806b56402b160100000000000000000000000000000013283d53687d92816c573b2b23374b5d70858f7a65503f2e1c080000000000000000000000000000000000000004182a3a5c71878e78634e39230e000a1b2b3c4b5d687e9289796357463626140500000000000000000000000000000000000000000000000000142a3f54697f937e69543e291400000000000000102031424c6176887e7a8f806b55402b1600000000000d22374c62778c87725d47321d0000000000000000000c1c314150657a897a8f836d58432e18000000000000000000000000000000000000000000000002090b1012141514110d0b05000000000000000000000000000000000000000000000000000007101719161e2c3d50657a907e69543f291400000000000000000000000000000000000000000000000000000000000002080b0d101111100f0d0b070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426374454606b7c88958c827a736d69656463636465686b6f757b82898f84796b6056493c2e21120400000000000000071a2d3d51667c918a786358493c33292422212122252a343d4954606b7f8d8776615544311d0c00000000000004182a3a5c718788735645321e09000000000000000000031629394b6073868b79634e3f2e374c61778c836e58432e19000000000000000000000000000000061a2c3d586d83917c67523c271c2e3f50657b8f846f5d4b37231100000000000000000000000000000000000000001a2f445a6f84907b66513b261103162839485a657b8b8d7c665b4939291808000000000000000000000000000000000000000000000000000013283d53687d927f6a55402a150000000000000002131f334658687d89798e826d58432d1800000000000b21364b60768b88735e392816030000000000000000001323374b5d6f84809585705b3727150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a18242b2e28323b495b6d828d78634e38230e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d314455607280919384796d655d5853504e4d4e4f5053565660656d767f898b8074625a4b3f2f2212000000000000000d21364a5c7085947f6a5a493a2c1e170f0d0b0c0d10181f2c36434a616b80968473604b3a2917040000000000001a2f44596f848b76604b36210b0000000000000000000a1e324657687e93816c5b49351f344759748985705b3828150200000000000000000000000000000c2136495b73888c77624c37221123374b5d70858f7b65503f2e1c0800000000000000000000000000000000000002172c42576c81937e68533e2913121e324557627888947f6a5e4c3d2c1b0b00000000000000000000000000000000000000000000000000000011263c51667b91816c56412c1701000000000000000417293a4a607285808c85705b3727150100000000091e324556748a89745745321e09000000000000000000081c2e3f4f657a888a88735544311d08000000000000060c0e20202020202020202020202020202020202020202020202012100a0100000000000000000000000000000000000000000007182836404339464b5963798a846f5b4935210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070b0e111415161514120f0c0a04000000000000000000000000000000000000000000000000000000000000000f2032434b607382968b7e6f635b4f4b3f3e3b393838393b3d38454b5058616a7782928578655d4c402f1d090000000000000f24394e64798e8976614b3c2c1c0e03000000000000050f182530424b607384937e685846331f0a000000000002172c42576c818d78634e38230e000000000000000005182b3b4b6175888977614c3d2c1a2a3b5c728788735645321d0900000000000000000000000000000e23394e63798e86715947341f0b1c2e3f50657b8f85705d4b37231100000000000000000000000000000000000000152a3f546a7f94806b56412b162233434b60758598826e614f402f1f0e000000000000000000000000000000000000000000000000000000000f253a4f647a8f836e58432e190000000000000000000c1c304354647a898a88725544311d0800000000031628385d73888b76604b36210b000000000000000000001122374b5d70859b8a75604b36200b00000000010f1a212335353535353535353535353535353535353535353535353527251e130500000000000000000000000000000000000000001024364653595b57616877868a78634d3d2c1a0600000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b131c202326292a2b2a292825211f17120b0902000000000000000000000000000000000000000000000000000008182d3e4f616d82988a7b69604e493d372e29262423232425282731363a474c59626d7d8a897b665e4c38240f000000000000152b40556a8095816c5746321e0e0000000000000000000008131d31445562788b8876614c382715020000000000142a3f54697f907b66503b261100000000000000000b203448596a80947f6a5947341f1a2f445a6f848a75604b36200b000000000000000000000000000114263653697e93816c573b2a18051123374b5d7085907b65503f2f1c0800000000000000000000000000000000000012273c52677c91836e58432e1f304050616e82988575604b4332221200000000000000000000000000000000000000000000000000000000000d22374d62778c85705b372715010000000000000000001325364b5c6f849a8a75604b35200b00000000001a2f445a6f848f79644f3a240f00000000000000000000081b2e3f52687d928d78624d38230d000000000f1f2c36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c393023130100000000000000000000000000000000000002172b4053646e7172767d888a7c665a49351f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000030a151d20253035383c3e3f40403e3d3a37332a27201d150a060000000000000000000000000000000000000000000000001325364a5c697f948b7b655d4e42352c231c14100f0e0e0f1013151d202a333b474c5f6779878a7c66513c2611000000000005182a3b5a7085907b655039291600000000000000000000000001152737495a6d8295806b5645311d09000000000012273c52677c917d68533e281300000000000000071a2d3d4d62778a8775604b3a2a18172d42576c828d78634d38230e00000000000000000000000000081c3043546e83917c66513c271100081c2e3f50657b9085705d4b3823110000000000000000000000000000000000000f253a4f647a8f85705b38282d3d4c5e6a7f9589786257453225150400000000000000000000000000000000000000000000000000000000000b20354b60758a88735544311d0800000000000000000008182e3e50657b908d77624d38220d0000000000162b40556b80937d685336261401000000000000000000001021364b607589907a65503b2510000000061a2c3d495e606060606060606060606060606060606060606060606060524d41301e0a00000000000000000000000000000000000004192e43596e8286878a8d8579665e4c3c2c1901000000000000000000000000000000000000000000000000000000000000000000000000000000000a161e27313636434a4e515455555554524f4c473a3c36322821190e05000000000000000000000000000000000000000000071c304354647a8c927d685d4b3f31211a0f08000000000000000002090c171f2a34414d5b63778379634e39230e00000000000b1f34475974898a76604b36210b0000000000000000000000000009192c3c4d63788b8875604b36200b00000000000f243a4f64798f806b55402b16000000000000000821364a5b6d82927d675645321c0c152a3f546a7f907b65503b2610000000000000000000000000000b20354b6074898a76614c37210c00001123374b5d7085907b65503f2f1c0800000000000000000000000000000000000d22374c62778c88735645323a4a5b667c8d8c7b655a4839281607000000000000000000000000000000000000000000000000000000000000081c30435472888a75604b35200b000000000000000000001023384b5d70858f7a65503a2510000000000011273c51667c91826d5443301c0800000000000000000000091e3245566c81927d68523d28130000000c2136495b70757575757575757575757575757575757575757575757575675f4d39251000000000000000000000000000000000000000152a3f556a7f81807d7870635b4c402f1e0e00000000000000000000000000000000000000000000000000000000000000000000000000000000111a283238454b5154606366696a6b6a696764615857514b4538352c20190e00000000000000000000000000000000000000000b20354a60728598826d604e3f2e21140600000000000000000000000000040d181f303d4a59626e635b4935210c00000000000d22374c62778c87725745321e0900000000000000000000000000000e2035495a7085907b66503b261100000000000d22374c62778c836d58432e1800000000000008182f3f4e63798c8672604a3828160012273d52677c927d68533d2813000000000000000000000000000f24394f64798e86715847331f0a0000081c2e3f50657b9085705d4c38231100000000000000000000000000000000000b20354a60758a8a75604b3e4a5963798a937e695d4b3c2b1b0a00000000000000000000000000000000000000000000000000000000000000011426365b70858d78624d38230d00000000000000000000081c2f3f556a80927d67523d281200000000000c21364b6176898874604b35200c000000000000000000000316283853687d937f6a55402a150000000e23394e63798a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523c27120000000000000000000000000000000000000013283c50616a6b6a68635b4e4a3d2f221100000000000000000000000000000000000000000000000000000000000000000000000000000008131c2f38454b5660676e74787b7e7f807f7e7d7a76726c6760564d493c352b1c13080000000000000000000000000000000000081c2e3f52677c918977624c41312111030000000000000000000000000000000005131f2d3b484c584e493d2c1a0600000000000e24394e63798b826d5839281603000000000000000000000000000006192c3c546a7f94806b56412b1601000000000b1f344859748985705b3727150200000000011426364c5d6f84907b655443301a0a0010253a4f657a8f806b55402b160000000000000000000000000215273854697f94816b563a2a17040000001123374b5d7085907b6550402f1c0900000000000000000000000000000000071c30435472878d78635e5e5c64778797816d604f3f2e1e0e000000000000000000000000000000000000000000000000000000000000000000182e43586d838f7a65503a2510000000000000000000000013283d53687d927f6a553f2a150000000000091e3246576e838f7a65503a2a18040000000000000000000011263b50667b90826d58422d180000000b20354b6073849a858181818181818181818181818181818181818181817b65503a2510000000000000000000000000000000000000000d20334350555655534d493c362d1f11040000000000000000000000000000000000000000000000000000000000000000000000000000081825303f4b566069747c83898d91908f8e8e8f918f8c87827c756c635b4d483c3025180c000000000000000000000000000000000e23374b5d7186957f6a594734231303000000000000000000000000000000000000010f1d2a34374339352c1f0f0000000000000c21364a5b637574604b36200b0000000000000000000000000000000010253b50657a90846f5a442f1a050000000005182a3b5c728788725544311d0800000000081c304354657b90836f5d4b36251300000d22374d62778c826d58432d18000000000000000000000000091d3145566f84907b66513b261100000000081c2e3f50657b9085705e4c38231100000000000000000000000000000000001325365a6f84907b737373747985998474604b4232211100000000000000000000000000000000000000000000000000000000000000000001162b40566b80927d67523d2812000000000000000000000010263b50657b90826c57422d1702000000000316283952677c91816c5847331f0d000000000000000000000e23384e63788d856f5a362614010000081c30435461778789786c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c655d4b37230e00000000000000000000000000000000000000031525333c3f41403e38352c211a0f01000000000000000000000000000000000000000000000000000000000000000000000000000008182636434a5d65757f88918f88827e7b7978797a7b7f82878d918981786d625a4a43362a1c0f0100000000000000000000000000011426364f657a8f8976614c3b2a18050000000000000000000000000000000000000000000d181f222e23211a0f01000000000000071a2d3d4a5660605544311d08000000000000000000000000000000000d22384d62778d87725c47321d0700000000001a2f455a6f848a75604b36200b000000031628384b6073868b79634e3f2e180800000b20354b60758a85705b3727150100000000000000000000000b20364b6075898a76614c36210c00000000001123374b5d7085907b6550402f1c0900000000000000000000000000000000182d42576d829789888888898e998376615645312414030000000000000000000000000000000000000000000000000000000000000000000013293e53687e937f6a553f2a1500000000000000000000000e23384e63788d846f5a452f1a0000000000000b20364b6074888a77614c3b2a18050000000000000000000b21364b60768b87725443301c080000011426364759647a8b867561545757575757575757575757575757575757504b3f2e1c080000000000000000000000000000000000000000071520282a2c2b282321190e07000000000000000000000000000000000000000000000000000000000000000000000000000000011426364354606a7b87948b827a736d69666463646566696d72787e86908b8278696054473a2c1f0f01000000000000000000000000081c3043546d8297826c5846331d0d0000000000000000000000000000000000000000000000050b0d190e0c060000000000000000000f1f2d38454b4b4437271502000000000000000000000000000000000c21364b61768b88735e48331e090000000002172d42576c828d78624d38230d000000091e324556687d92816c5b49352111000000081c304354728788725544311d08000000000000000000000010253a50657a8f85705746331e0a0000000000081c2e3f50657b9085705e4c38231200000000000000000000000000000000152a3f556a7f948683838384888c8378645c4b3f2f21120400000000000000000000000000000000000000000000000000000000000000000011263b51667b90826c57422d1702000000000000000000000b21364b60768b87725c3b2a18040000000000081d314455697f947f6a5947341f11000000000000000000091e32455673888a75604b35200b00000008182a3a4a5c687d928372604a404141414141414141414141414141413a372e211100000000000000000000000000000000000000000000030d13151615130e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000010f1c3043546072808d9283786d655d5854514f4e4e4f5154585a6269717b85918a7e726158493d2d1f0f0100000000000000000000000b20354b6074898f7a654f3a291700000000000000000000000000000000000000000000000000000003000000000000000000000000010f1a273136363127190900000000000000000000000000000000000d22374c62778c88725d48331d080000000000152a3f556a7f8f7a65503a2510000004182a3b4b6075888977624c3d2c1a03000000011426365a6f858a75604b35200b0000000000000000000003162839556a8095806b56392917030000000000001123374b5d7085907b6650402f1c0900000000000000000000000000000012283d52677d92826e6e6e6f747e8c897a655d4c3f3022130500000000000000000000000000000000000000000000000000000000000000000e24394e63798e846f5a452f1a0000000000000000000000091e324556738889745947341f0b0000000000021527374b6176888977624c3f2e1d0c0000000000000000031628385b71868c77624d37220d000000000c1c2d3e4e5f6c81947f6a5e4c3c2c2c2c2c2c2c2c2c2c2c2c2c2c2c25231c11030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f32424b607282958b7e6f635b4f4b3f3e3b3a39393a3c3f3c484d545d65707c88938476635b4a3d2d1f0f00000000000000000000000f253a4f647a8f8874604b35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000a151d20201d15090000000000000000000000000000000000000e24394e63798e86715b46311c06000000000012273d52677c927d68523d281300000b1f3447596a7f947f6a5947341f0f0000000000182d42586d828d78624d38230d00000000000000000000091e3245577085907b65503b261000000000000000081c2e3f50657b9085705e4c38241200000000000000000000000000000010253a4f657a8f85705b595460697c8b8a7b655d4c4030231306000000000000000000000000000000000000000000000000000000000000000c21364b61768b87725c3a2a180400000000000000000000021628385b71868c77614c37220c000000000000091e334657687d92826d5d4b3b2a19090000000000000000192e43596e838f7a644f3a250f0000000000102031414b6074848d7c665a493928161717171717171717171717100e08000000000000000000000000000000000000040a0c0c0a04000000000000000000000000000000000000000000000000000000060b0d0b06000000000000000000000000000000000008182d3d4f616d8197897b68604d493c372e292624232425262a2b35383f4b505e667683958779635b4a3d2c1c0c00000000000000000000142a3f54697f94836e5443301c080000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0b080200000000000000000000000000000000000004182a3b52677d92836d58432e1803000000000010253a4f657a8f7f6a55402a1500061a2c3d4c6177898875604b3b2a18010000000000152a40556a7f8f7a65503a2510000000000000000000000b21364b60768a8a76604b36210b00000000000000001123374b5d7085907b6651402f1d0900000000000000000000000000000d22384d62778d88725544434b5e667b8a8a7c665e4d41312414060000000000000000000000000000000000000000000000000000000000000a1e334657748989745947341f0a0000000000000000000000192e44596e838f79644f3a240f000000000000031729394a6072858d7b6559473727180800000000000001162c41566b81927c67523d2712000000000002131d3144556277888978635746321e150302020202020202020200000000000000000000000000000000000000000b171f21211f170c000000000000000000000000000000000000000000000000000e19202320190e000000000000000000000000000000001325364a5c697e938a7a645d4e42352c221b14110f0e0f1011141920232e37404c58616e80938979635b493a291808000000000000000003192e43586e83947f69543626140100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007141f3447596d82937e68533e28130000000000000d22374d62778c826d57422d1800082135495b6c81927d685745321d0d00000000000013283d52687d927d68523d28130000000000000000000011263b50667b9085705745321e090000000000000000081c2f3f50657b9085715e4c38241200000000000000000000000000000b20354b60758a8a75604b35404c5d657b898b7c675f4e42322415070000000000000000000000000000000000000000000000000000000000031729395c71868c77614c37220c0000000000000000000001172c41566c81917c67513c2712000000000000000b1c30435463798a88776155443626180b00000000000014293e54697e937f6a543f2a15000000000000021527374859647a8b8675614b43322111000000000000000000000000000000000000000000000000000000000b1b29333637332a1c0c00000000000000000000000000000000000000000000000e1e2b3538352b1e150700000000000000000000000000071c30435464798c917d675c4b3f3121190e080000000000000000060b111c23303a474c616a7e9388796358473626140100000000000000031628395c7186907b65503b261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200050b0f1a2131414c6177898a77624c37220d0000000000000b20354b60758a856f5a36261408182e3f4e63798b8673604b3928160000000000000010253a50657a8f7f6a55402a150000000000000000000417293a566b8095806a55392816030000000000000000001123374b5d7085907c6651402f1d0900000000000000000000000000081c30435472878d78624d382f3f4b5c647a898c7d68604f423325160000000000000000000000000000000000000000000000000000000000001a2f44596f848e79644f39240f000000000000000000000014293f54697e947e69543f29140000000000000000132536495b677d91847360544336291b0f030000000011263c51667b91826c57422d170200000000000009192a3b4b5c687e93826e614f3f2f1e0e00000000000000000000000000000000000000000000000000000417293a464c4c473a2a17040000000000000000000000000000000000000000000a1a2b3c484d483c332515030000000000000000000000000b20354a60728597816c5f4d3e2e2013060000000000000000000000000008121c2a33435060697f948776615443301c0d00000000000000091e32465774898d78634d38230e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070d0f1718181f222d36424e5f6c8196826d5948341f0b000000000000081c304354728787725443301c1325364b5d6e83907b655443301b0a000000000000000d23384d62788d826d58422d180000000000000000000a1f33475871868f7a65503a251000000000000000000000081c2f3f50657b9085715e4c38241200000000000000000000000000011426365a7085907a65503b252e3e4b5c6479888d7e69605043341c130800000000000000000000000000000000000000000000000000000002172c42576c81917c66513c2711000000000000000000000012273c51677c91816c57412c17020000000000000008182c3d4d5f6b80968272605446392d1e170b0500000f24394e64798e846f5a442f1a00000000000000000d1d2e3e4e606c81947f695d4c3c2b1a0a000000000000000000000000000000000000000000000000000a1f33465861615847331f13000000000000000000000000000000000000000003162838485a625a504333200d0000000000000000000000081b2e3f51677c918876614c4130201002000000000000000000000000000000000c171f33424f616c81978372604b3c2b19050000000000000c21364b61768b8b76604b36210b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101b22242d2e2a34373d4a4e60687d8d8877624c3b2a1805000000000000011426365a6f858a75604b35201c304354657b8f846f5d4c36261400000000000000000b20354b60758a856f5a3626140100000000000000000c21374c61768a8a75604b36200b00000000000000000000001123374b5d7085917c66514030180800000000000000000000000000182d42586d82927d68523d28202e3e4a5b6378878d7e6a61514430251809000000000000000000000000000000000000000000000000000000152a3f546a7f937e69543e291400000000000000000000000f24394f64798e846e59442f190000000000000000000f1f30414a60728197817261574a3d33292019110f0d21374c61768c87715c3a2a18040000000000000000102031424b6074858c7b655a48382816030000000000000000000000000000000000000000000000000c21364c617676614c42311e0e00000000000000000000000000000000000000091e32455662786a61503c281300000000000000000000000e22374b5d7186947f6958473323120200000000000000000000000000000000000004152432434b607485937e695a483420100000000000000d22374c62778c89745645321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e373a42433b484c525b636f7e8c8b7c665947341d0d0000000000000000182d42586d828c77624d372228384a6072858b79634e3f2f18080000000000000000081d314455728887725443301c08000000000000000011273c51667c91856f5645321d090000000000000000000000081c2f3f50657b9086715e4c36251300000000000000000000000000152b40556a8095806a55402b15202d3d495a637886937f6b624a4336261909000000000000000000000000000000000000000000000000000012273d52677c92816c56412c1701000000000000000000000c22374c61778c86715c39291703000000000000000001121c304354607282948375645c4b4639342b26242222334758748989745947341f0a000000000000000002141d3145566277888978625645321e140300000000000000000000000000000000000000000000061b30455b7084836e604e3c2c19090000000000000000000000000000000000001325364b6075887f6a553f2a1500000000000000000000001325364f657a8f8975614b3a291705000000000000000000000000000000000000000006141e32455663798b8a78624d3e2d1b0700000000000d23384d62788d89745e382816030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2e3e4b4f57585a596267707984938a7c665e4c3b2a18000000000000000000152a40556a7f8f7a644f3a25324556677d92826d5b4a362111000000000000000000011527375b70858a75604b35200b0000000000000005182b3b576c81947f6a55382815020000000000000000000000001123374b5d7085917c665443301c0800000000000000000000000013283d52687d92826d58422d18101f2c3c495a62778695806c6054443727190a0000000000000000000000000000000000000000000000000010253a4f657a8f836e59442e1900000000000000000000000b1f344759748989745746331e0a00000000000000000000132536435460727f8d86796b61574d483c3b393837393a5c71868c77614c37220c000000000000000000021527384859657b8b8575604b42322111000000000000000000000000000000000000000000000013293e53687e927e685a493726140100000000000000000000000000000000071c304354687e927c67523d271200000000000000000000071c3043546d8296816c5746321c0c00000000000000000000000000000000000000000000021628384a5b6b8096836e5c4a36220e00000000000e23384d63788d88735e49331e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22374b5c646c6d7073777d858e8e8378665e4c402f1d0d00000000000000000013283d52687d917c67523c2a3a4b6074878a77624c3d2d1a0300000000000000000000182e43586d838d77624d38220d000000000000000b2034485971878f7a644f3a250f00000000000000000000000000081c2f3f50657b908673604a36251300000000000000000000000010253b50657a9085705a372715010f1e2c3c485962768596817260554437281a0b0000000000000000000000000000000000000000000000000d22384d62778d86715b392816030000000000000000000004182a3b5d72878b76614c36210c00000000000000000000081826364354606a7c898c81766b625a56514f4d4d4e51596f848e79644f39240f000000000000000000000a1a2b3b4b5d697e93826d614f3f2e1d0d000000000000000000000000000000000000000000000b20354a6072848a78635544311d0e000000000000000000000000000000000b20354a6073878874604b35200b000000000000000000000b20354a6074888f7a644f3928160000000000000000000000000000000000000000000000000a1a2d3d4b6175888e79644e3c2c1906000000000d22374d62778c89745f4927150200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f243a4f647a818385888c928881796f625a4c402f22110000000000000000000010253a50657a8f7f6a543f334758697f94806a5948341f0f0000000000000000000000162b40556b808f7a654f3a2510000000000000000d22374c62778c8975604b36200b00000000000000000000000000001123384b5d7085917c665443301c0800000000000000000000000d23384d62788d88725544311d08000e1d2b3b475861758497827360554538291b0c00000000000000000000000000000000000000000000000b20354b60758a88735745321e0900000000000000000000001a2f455a6f848e79634e39240e000000000000000000000008182636434a5e6676828b898078706b6664626263666b7182917c67513c271200000000000000000000000d1d2e3f4f606d82937e695d4b3c2b1a0a000000000000000000000000000000000000000000071c3043546278898573604b3c2b190500000000000000000000000000000316293950657b907f6a5544311d08000000000000000000000f243a4f64798f8874604a35200b000000000000000000000000000000000000000000000000000f1e3246576a7f94836e5b49352109000000000c21374c61768c8a755645311d09000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a50657b87898c8f8a8178706660544a3d32241507000000000000000000000d23384d62788d816c57423c4c6176898875614b3b2b1801000000000000000000000013283e53687d927d67523d28120000000000000012273d52677d92846f5544311d080000000000000000000000000000081c2f3f50657b908673604a36251300000000000000000000000b20364b60758a8a75604b35200b00000d1d2a3a475761758397827360564639291c0c00000000000000000000000000000000000000000000081d31445572888b76604b36210b0000000000000000000002182d42576d82907b66513b261100000000000000000000000008182530404c58616d7a838a8b86807b797777787b8086968c7c67513c2712000000000000000000000000102132424b6074858c7b655a4838281602000000000000000000000000000000000000000000132536485a687d927e695a4835201300000000000000000000000000000a1e3246576d828a77614c372715010000000000000000000014293f54697e94836e5443301c0700000000000000000000000000000000000000000000000000031628394c6176898d78634d372715020000000b20364b60758b8b75604b36200b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23374b5d657274767a80858c857c73635b4f42332515060000000000000000000b20354b60758a846f5a44495a6c81927d685746321d0d00000000000000000000000010263b50657b907f6a553f2a1500000000000006192c3c586d82947f6954372715020000000000000000000000000000001123384b5d7085917c675443301c0800000000000000000000081d31445573888d78624d38230d0000000d1c2a3946576074839883746157463a2a1c0d000000000000000000000000000000000000000000011426375b70858d78634e38230e0000000000000000000000152a40556a7f937e69533e29140000000000000000000000000008131c2f3a474c5c646e777f858a8e8e8d8c8e908c878178675f4d39241000000000000000000000000003141e3245566278888878625645321e1403000000000000000000000000000000000000000008182b3c4e606f848a78624d41301b0a000000000000000000000000000c21364b617689846f59473419090000000000000000000003182d43586d82947f69543625130000000000000000000000000000000000000000000000000000000b1e3346576c8196806b5544311d08000000091d32455673898d77624d38220d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081c2e3f4b505d5861656b7078828b857969605044332414020000000000000000081d314455728887715c3f4d63788b8673604b392816000000000000000000000000000e23384e63788d826c57422d170000000000000c2035495a72878e79644f39240f00000000000000000000000000000000081c2f3f50657b908673604a36261401000000000000000000021527375b70858f7a65503a2510000000000c1b293945566073829784756158473a2b1d0e000000000000000000000000000000000000000000182e43586d83907b65503b2610000000000000000000000013283d52687d92806b56412b16000000000000000000000000000000121c2a333e4a4f59626a7076797b7d7d7c7a77726b635a4d41301d0a0000000000000000000000000002162838485a657b8c8574604b423121100000000000000000000000000000000000000000000e1e31424d62788a846f5f4d3928160300000000000000000000000216283852677d927c67523b2a180000000000000000000000021527385b7186907b66503b2611000000000000000000000000000000000000000000000000000000031729394f647a8f8875604b36200b000000021528385c71868f7a654f3a251000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e373a3a474c50555b636d78858b7e6a6250423220100000000000000000011527375b70858974584b5d6e83907b665544311b0b000000000000000000000000000b21364b60768a846f5a3625130000000000000e23384d63788d8974604b35200b00000000000000000000000000000000001123384b5d7085917c675443301c0800000000000000000000182e43586d83927d68523d281300000000000b1b283845556072819685766159483b2c1e0f0100000000000000000000000000000000000000152b40556a808a7d68523d2813000000000000000000000010253a50657b8a826d58432d18000000000000000000000000000000000c171f2d363b484d5556606466686867656259564d493c3023120100000000000000000000000000000a1a2b3c4b5d697f94826d604e3f2e1d0d000000000000000000000000000000000000000000132035495a6b80917d675745321e0d0000000000000000000000091e3245566e838a76614b36210c0000000000000000000000091d31455673888e78634e39230e000000000000000000000000000000000000000000000000000000000b22374b5c7287907b65503b251000000000192e44596e83927c67523d271200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c23252933373a3d494e5a62738093806a604f3e2d18080000000000000000182d43586d828c77614f647a8f846f5e4c3726140000000000000000000000000000091e324556738887725443301c07000000000013283e53687d93846e5544311d080000000000000000000000000000000000081c2f3f50657b908673604b36261401000000000000000000162b40556b80957f6a55402a150000000000000a1a283744546072819585776259493c2c1f0f0100000000000000000000000000000000000013283c50626a7468604e3a251100000000000000000000000e23374b5d65746d64533f2b16000000000000000000000000000000000004101b222b343738454b4f51525352504d483b38352c1e1205000000000000000000000000000000000d1d2e3f4f616d82937e685d4b3b2b1a0a000000000000000000000000000000000000000006192c3c4b6075878875604b3b2b1905000000000000000000000b21364b607589846f5746321e0a00000000000000000000000b20364b60758a8b76614c36210c00000000000000000000000000000000000000000000000000000000071b2e3e576c8196816b563a2a1704000000152b40556a8095806b563625130000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e10171f21252c353c4955606c81937e695c4a3625130000000000000000162b40556b808e79645f70858c79644e402f19090000000000000000000000000000021628385b70868975604a35200b00000000071a2d3d586e83937e6954372614010000000000000000000000000000000000001123384b5d7085917c675443301c0800000000000000000013283e53687d93826d58422d18000000000000000a1927364354606c80948677625a493d2d20100200000000000000000000000000000000000d21334450555f524e41311e0b0000000000000000000000081c2e3f4b505f58534635231000000000000000000000000000000000000000070d182022283236393b3d3e3d3b37342b2320190e00000000000000000000000000000000000000112132434b6075858b7b6559483827150200000000000000000000000000000000000000000e1e324557677c91806a594834200e0000000000000000000011263b51667b907e69543929160300000000000000000000000c21374c61768c8a755746331e0a000000000000000000000000000000000000000000000000000000000011263b51667b9087725847331f0a00000011263c51667b91846f5443301c0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000040a0c101a212b37444b6072838b7a645443301c070000000000000013283d53687d917c66677c91826d5c4a36221100000000000000000000000000000000192e43586e838c77624c37220d000000000c21364a5b73888e79634e39240e00000000000000000000000000000000000000081c2f3f50657b908673604b36261401000000000000000010263b50657b9085705a372614010000000000000009182636434a626b7f938778635b4a3e2e20110300000000000000000000000000000000041525333c404a3d3a3123130100000000000000000000000011212e373a4a433f35281806000000000000000000000000000000000000000000050b0d161e212426282827252220180e0c06000000000000000000000000000000000000000003141e3245566278898877625645311d130200000000000000000000000000000000000000031628394d5f70858a78624d3c2c1906000000000000000004172a3a566c818e79634e39240e0000000000000000000000000d22374d62778c89745f3929170300000000000000000000000000000000000000000000000000000000000c21364b61768b8c76614c37210c0000000d22374c62778c8974604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e19100e080000000000000000000000060e192731435462778a8672604a35200d0000000000000010263b50657b907e6974878a77624d3d2d1a0400000000000000000000000000000001162b41566b808f7a644f3a250f000000000e24394e63798e8874604a35200b00000000000000000000000000000000000000001123384c5d7085917c675443301c0900000000000000000e23384e63788d87725544311d080000000000000000081825304450616a7e8d8879645c4b3e2e21120400000000000000000000000000000000071521282b3528251e13050000000000000000000000000003111c2325352d2b23180a0000000000000000000000000000000000000000000000000003090b0f11131312100d0b0500000000000000000000000000000000000000000000000003162838485a657b8c8574604b4231201000000000000000000000000000000000000000000a1b304150667b90826d5b4935210e00000000000000000a1f33475871868974604a35200b0000000000000000000000000d22374d62778c89745f4926140100000000000000000000000000000000000000000000000000000000000a1e3246577287907b65503b26100000000b1f34475971868f7a644f3a2410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1a21232e25221b100300000000000000000000000915263648596b80917c67513b2a18050000000000000e23384d63788d816c7e93806b5948341f0f000000000000000000000000000000000014293e53697e917c67523c27120000000114263754697e93836e5443301c070000000000000000000000000000000000000000081c2f3f50657b908673604b37261401000000000000000b21364b60768a8a75604b35200b00000000000000000008131c33434f60697e8d887a645c4b3f2f22120500000000000000000000000000000000040d13151f13110b0100000000000000000000000000000000080e101f181610060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1a2b3c4c5d697f94816c604e3e2e1d0d00000000000000000000000000000000000000001223384c5e70858b78634d3c2c1906000000000000000c21374c61768a846f5443301c070000000000000000000000000c22374c61778c8a745544311d08000000000000000000000000000000000000000000000000000000000003162939586e83947f6a543f2a1500000005182a3b566b8095806b553e2e1b0700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1f2c3639433a372e211000000000000000000000000008182b3b4c61768a85705947341f0b0000000000000b20364b60758a8376898876614b3b2b1801000000000000000000000000000000000011263b51667b907f6a543f2a15000000081d3144556e84937e6853362513000000000000000000000000000000000000000000001123384c5d7085927d675544311d0900000000000000091e32455673888d77624d38220d0000000000000000000000162532424f60687d8c897a655d4c4030231201000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c0e11131413120f0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000e1e2f3f4f616e82937e685c4b3b2a190900000000000000000000000000000000000000091c2f4051667b90826d5a4935200b0000000000000011263b50667b907f6a54362513000000000000000000000000000b21364b60768b8a75604b35200b000000000000000000000000000000000000000000000000000000000000152b40556a8095826d57422d18020000000f243a4f647a8f86715c4b37220d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d494e584f4b3f2e1b080000000000000000000000000d1f3347586f848a77624c37220d000000000000091d31455673888580937e685746331d0d0000000000000000000000000000000000000e24394e63798e816c57422c170200000b20354b6074898d78634e38230e00000000000000000000000000000000000000000000081c2f3f50657b908673604b37261401000000000000021628385b70868f7a65503a2510000000000000000000000007152432424e5f677c8b8a7b665e4d41301f0f000000000000000000000000000000000000000000060b0d10121413120f0c0903000000000000000000000000000000000000000000000000000000050b0f1a2123272929292725211e170c0a040000000000000000000000000000000000000000000000000000000000000000000000112132434b6175868b7a64594737271502000000000000000000000000000000000000001124384c5e71868b78634d39291703000000000000152a3f556a7f907b66513b2611000000000000000000000000000b20354a60758a8b76614b36210c00000000000000000000000000000000000000000000000000000000000013283e53687d93846f5a442f1a050000000d22374b5c72878f7a644f3b2b18050000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2136495b636e655d4b37220e00000000000000000000000004172a3a546a7f927d68523d2813000000000000021527385b70858a8a8673604b392917000000000000000000000000000000000000000c21364b61768b846f5a442f1a0000000f243a4f647a8f88735b4935210c00000000000000000000000000000000000000000000001123384c5d7085927d675544311d0800000000000000192e43586e83927d67523d281200000000000000000000000006142331414d5e667b8a8b7c675f4d3d2d1a070000000000000000000000000000000000050b0e192023262829292724211e160b090300000000000000000000000000000000000000000000010d1820222c35383c3e3f3e3d3a363329211f170c0300000000000000000000000000000000000000000000000000000000000000000003151e3246576378898877625544311d1302000000000000000000000000000000000000091d2f4052687d92816c5746331e0a000000000001152737596e838c77624d37220d00000000000000000000000000071c30435473888d78634e38230e00000000000000000000000000000000000000000000000000000000000011263b51667b9087715c47321c07000000071b2e3e54697e93826d594834200e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000e23394e6379837b654f3c2c190600000000000000000000000011263c51667b91816b56412c1600000000000000182e43586d8398907c665544311b0b000000000000000000000000000000000000000a1e334657738987715c392816030000132536546a7f94836d583d2c1a060000000000000000000000000000000000000000000000081c2f3f50657b908773604b35200b00000000000001162b41566b80957f6a55402a150000000000000000000000000005132330404c5d657b898b7d675b4a36210c000000000000000000000000000000010d1820222b35383b3d3e3e3d3a363228211e160a010000000000000000000000000000000000000008141c2b34373d494e51535453524f4c46393733291e160a00000000000000000000000000000000000000000000000000000000000000000003162839495a667c8d8474604b41312010000000000000000000000000000000000000001221364b6075898976614b36210f0000000000081d31445572878973594834200b00000000000000000000000000001325365b7086907a65503b25100000000000000000000000000000000000000000000000000000000000000f24394f64798e88735e49331e00000000001021364c6176898a77624c3c2b190600000000000000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a85705a4935200c0000000000000000000000000f243a4f64798f836d58432e1800000000000001162b40566b8095846f5e4c3726140000000000000000000000000000000000000000031729395c718689745746321e0900071c3043546f84927d68533d2813000000000000000000000000000000000000000000000000001123384c5d7084927d67523d28120000000000000012273c52677d867f6a553f2a1500000000000000000000000000000513222f3f4c5d6579828379634e39230e000000000000000000000000000009151d2b34373c494d50525453524f4b46393632281d15090000000000000000000000000000000000081826303b484c565b636668696867646157544c473a32281a100200000000000000000000000000000000000000000000000202020202020202000b1b2c3c4c5e6a7f94816c5f4e3e2d1c0c000000000000000000000000000000000000091e3245576c81937e68533d2d1a07000000000b20354b60758a86705b3b2b18050000000000000000000000000000192e43596e83927d68523d28130000000000000000000000000000000000000000000000000000000000000e23394e63788e89745f49271502000000000a1f3346586b8095816c5a4835201301000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e3246576f848d78624d3a29170400000000000000000000000e24394e63798e846f5a452f1a0000000000000011263c51667c8479634e402f1909000000000000000000000000000000000000000000152b40556a808375614b36210c000b20354a6072838377614c37220c00000000000000000000000000000000000000000000000000081c2f3f4e637984816c57412c17000000000000001025394d5f67716a61503c28130000000000000000000000000000000412212f3f4b5b636d6f635b4a36210c000000000000000000000000000a1927313b484c565a626567696867646157534b45383127190f01000000000000000000000000000008182636434b59626b73787c7e7e7e7c7a76706961584b45382d201305000000000000000000000000000000000000020b111417171717171717171717171e2f404a607283927d685c4a3a2a19090000000000000000000000000000000000031628394e64798e86715b4a36210c000000000e23384d63788d836e58432e19000000000000000000000000000000152b40556a8095816b563626140100000000000000000000000000000000000000000000000000000000000d23384d62788d8a755544311d08000000000417293a4c6176898a78624d41301f0f000000000000000000000000000000000000000000000000000000000000000000000000000000000316293952677d92806a5846331f10000000000000000000000010253a4f657a8f846f5a442f1a000000000000000f24384c5e666e635b493522120000000000000000000000000000000000000000000013283c50626a6f615746321e0900071c304354606e6e615947341f0b00000000000000000000000000000000000000000000000000001121364a5b636e6c63513e2915000000000000000a1d30414d525b55504333200d000000000000000000000000000000000311212e3d4a4e58594e4a3d2d1a070000000000000000000000000a1a2837444b59626b72787b7d7e7e7c79766f6860564b44372d1f130500000000000000000000000001142636435460687781888d918f8d8e8f8f8a857e766a60564a3e302315070000000000000000000000000000000006141f26292d2d2d2d2d2d2d2d2d2d2d2d2d3043546175868b7a6459473727150100000000000000000000000000000000000a21364a5c71868e79634e39240e0000000010263b50657b90806b55402b1600000000000000000000000000000011263c51667b9185705443301c0800000000000000000000000000000000000000000000000000000000000d22374d62778c8b75604b36200b00000000000c1f334758697f94846f5f4d3d2d1c0c000000000000000000000000000000000000000000000000000009000000000000000000000000000b20354b6074878976614c3e2e1c0c0000000000000000000011273c51667c91826d58422d1800000000000000091d2f404c51594e493d2c1a04000000000000000000000000000000000000000000000d21334350555a4b46392816030000132536434a59594c473b2a18040000000000000000000000000000000000000000000000000000071a2d3d4a4e5957514534220f0000000000000001122330393c463f3c33251503000000000000000000000000000000000003101f2d3639434439362d1f0f000000000000000000000000081828384555606a7780878d908f8d8d8f8f8a857d756960554a3d3123150700000000000000000000000b1c30435460727e899388817c7a78787a7d818890897f75645c4d41322515070000000000000000000000000000021424313b3e42424242424242424242424242423646576379898777615544311d120100000000000000000000000000000000071a2d3d556a8095806b553c2c190600000012283d52677d927e69533e29140000000000000000000000000000000d22374c62778c8974604b35200b00000000000000000000000000000000000000000000000000000000000d23384d62788d8a755544311d0800000000000417293a4b607385927d675b4a3a291b0c00000000000000000000000000000000000000000000080e101e12100a01000000000000000000081d314455687d93806b5c4b3a291c0e000000000000000008182d3e556a8095806b56402b16000000000000000012222f383c4438352c1f0f0000000000000000000000000000000000000000000000041525333c40443632281b0b0000000818253035444437342a1d0c000000000000000000000000000000000000000000000000000000000f1f2d363944413e34271705000000000000000005121d2527312a2820150700000000000000000000000000000000000000010f1a21242d2f23211a0f01000000000000000000000000132536455660737f8a9288827c7a78787a7d81878f887e73635b4d41332516080000000000000000000b1b30404b60728293897e746c6765636364686c737b8490867a675f4f4332251506000000000000000000000000000b1f31424e5357575757575757575757575757575757575b667c8d8473604b41301d0a00000000000000000000000000000000000f24394f64798e87725a4935200c00000014293e54697e927c67523d27120000000000000000000000000000000b2034485972878f7a644f3a240f00000000000000000000000000000000000000000000000000000000000e23394e63788e89745f4a2715020000000000000c1d31445563798b8a796358473a2a1c0f0000000000000000000000000000000000000003111c23253328251e13050000000000000000011527374b6074868b7a6458473a2b1c130803000000010a1525364a5c7186907b65503b2610000000000000000004121d24262f23211a0f01000000000000000000000000000000000000000000000000071521282b2f211e160b000000000008131c202e2e221f180c0000000000000000000000000000000000000000000000000000000000010f1a21242f2c2922170800000000000000000000010a10121c15130d0300000000000000000000000000000000000000000000070c0e181a0e0c0700000000000000000000000000071c30435460748394887d736c6765636364676c727a838f8679675f50433426160800000000000000031629394d5f6d81978678686055524f4e4e4f525460656f7b878b7d69614f433224130200000000000000000000000011263b4e60696c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c8095816c5f4d39241000000000000000000000000000000000000d22364a5c73888d78624d38230d000000162b40556b80907b65503b261000000000000000000000000000000005182b3b566b8195806a553d2d1a070000000000000000000000000000000000000000000000000000000010253a4f657a8f88735d48331e00000000000000011426374a5b687d9286766158473a2d1c1308000000000000000000000000000000000212212e373b483d3a302313010000000000000000091d31445563798a87766158483c30251e16141213151d27314354647a8f8974604b36200b00000000000000000000090f11190e0c06000000000000000000000000000000000000000000000000000000040d13151a0c09030000000000000000070b19190c0b040000000000000000000000000000000000000000000000000000000000000000070c0e1917150f05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005182a3b4a60728399847668605452504e4e4f52565d656e7b878a7d6a615144342616040000000000000a1e324657677c918778625a4b44373a38393a36434a505e6576848d7f6a614f42311e0b00000000000000000000000014293e53697e8182828282828282828282828282828282828282818b917c67513c27120000000000000000000000000000000000071b2d3e576c81937d68533e2813000000162c41566b818f7a644f3a250f0000000000000000000000000000000010253b50657a9086715c4a36210b0000000000000000000000000000000000000000000000000000000012273c52677c9186705b46311b060000000000000009192d3d4e5f6c8196857661584a3d30251810080000000000000000000000000009151d303f4b505e524d41301e0a000000000000000002152737495b687e928576625a4a43363228292728273138454b60728495806b5544311d0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001081e20201f090200000000000000000000000000000000000000000000000000000000000b1f344859697e93857561584a43363a38383a3d3f4b4f5d657683927f6c63514434210e0000000000000c21364b617588907b665a483c312625232325253035404c58617382947f6a604e3a2611000000000000000000000002172c41576c818a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a836e59442e1900000000000000000000000000000000000011273c51667c91836e593b2a18040000172c41576c818e79644f39240f000000000000000000000000000000000b20354b6074888e79644e3a291704000000000000000000000000000000000000000000000000000000152a3f556a7f94836e59432e190400000000000000000f1f31414b607282988576635b4a43362d231c110b0801000000000000060c11192731404d5d6573675f4d3a251000000000000000000009192c3d4e60697f9385786860544b45393e3d3d37444b56606b80968875614b3727150200000000000000000000000000000000070c0e201c0c0a0400000000000000000000000000000000000000000000000000000000000000040d14162016140e050000000000000000010a10121e0f0d08000000000000000a0f11200e0c060000000000000000000000000000000000000000000000000000000000000000000000000009151d333535341e160a000000000000000000000000000000000000000000000000000000011426364c62778a8b796357463a302525232325282e373f4b5761738195816c62513d2914000000000005182b3b53687e93836e5e4c3c2b1d14100e0e0f131c202f3a4755607281927d68533e2813000000000000000000000000152a3e52636c74747474747474747474747474747474747474747474746e6453402c170000000000000000000000000000000000000d22374d62778c88725947341f0b0000172d42576c828e78634e39230e00000000000000000000000000000000081d3144556a8095816c5846331f0c0000000000000000000000000000000000000000000000000000061a2c3d596e83947f6a553f2a1500000000000000000001131c3043546072829487796960544a3e372e25201d151615141415171920232f37444b5e667b887d67523d2812000000000000000000000f1f31424f61697e8c8a7d7367605755545253545560677480968b7b655746331909000000000000000000000000000000010f1a21243531211f170b0000000000000000000000000000000000000000000000000000000000081621282b352c2922160800000000000005131e25283425221b100200000004121d2427352320190e000000000000000000000000000000000000000000000000000000000000000000000009192731484a4a4932281a0a0000000000000000000000000000000000000000000000000000081c3043546a7f94806b5b4939291c13100e0e0f121b222e394655606c7f90806b56412b1601000000000b203448597085907b6550402f1d0d01000000000007111c2a374454606c7c79634e38230e0000000000000000000000000f22344552575f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5953463624110000000000000000000000000000000000000b2034485973888c77614c37220c0000172c42576c818e78634e39230e00000000000000000000000000000000011426374d62788b8976614c3a291704000000000000000000000000000000000000000000000000000c2135495b7287907b66503b261100000000000000000000011426364354606d7f8d8a7e72645c504b3f3a3531272b2a29292a2c2c3538404c55606b7c8b8a7b66503b26110000000000000000000001132432424f60697a8692867d766f6b6967686a6e747c8696897c665d4b392917000000000000000000000000000000000f1f2d36394a463633291b0b000000000000000000000000000000000000000000000000000000041626333d404a413d342616050000000001132330393d493a372e2010000000122230393c4a38352c1e0e00000000000000000000000000000000000000000000000000000000000000000001152737445c5f605d4538281602000000000000000000000000000000000000000000000000000b20354b6074878b78634d3d2c1b0c00000000000008111b2937444b616a7b7c65503b261000000000000d22374d62778c8874604b3520110000000000000000000c192736434a5f67635b4935210c000000000000000000000000051727343e414a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a44403628180700000000000000000000000000000000000005192b3b596e83907b66503b26110000172c41566c818e79644f39240f000000000000000000000000000000000009203448596d82957f6a5847331f10000000000000000000000000000000000000000000000000000e23384e63788d8a76614b36210c000000000000000000000008182636434b616a7c8893847a6e655d554f4b4437403f3e3f3f413c494d545e6674808d8a7c665e4c38230f000000000000000000000006142432424f5c64757f88928a85807e7c7d7f8388918e8478665e4c3f2e1b0b000000000000000000000000000000071a2d3d4a4e605c4c463a29170400000000000000000000000000000000000000000000000000000d21334450556056514434220e000000000a1e30414d525e4f4b3e2e1b08000a1d30404d515f4d493c2c19060000000000000000000000000000000000000000000000000000000000000000081d3144556e75756f5645321e09000000000000000000000000000000000000000000000000000e23394e63798e85705a49351f0f0000000000000000000b19263143505e66655e4c38230e000000000011273c51667c91836d5443301c080000000000000000000009182530414d524e493d2c1a06000000000000000000000000000917222a2c35353535353535353535353535353535353535353535352e2c24180a0000000000000000000000000000000000000000152a3f546a7f947e69543f29140000162b41566b808f7a654f3a2510000000000000000000000000000000000005192b3b4d62788b8976614c3f2e1c0c0000000000000000000000000000000000000000000000081c2e3f54697f9485705746331e0a0000000000000000000000000818263043505e6676828e8e837a726a646055585554535455565a5a6369717b86958779655d4c402f1c09000000000000000000000000061424323e4a576069757d83888d8e90908f8c8782796f625a4c402f2111000000000000000000000000000000000c21364a5b637571615846331f0b000000000000000000000000000000000000000000000000000014283d50626b756b62513d2914000000001025394d5f6773645c4b37220a000f24394d5e6675635a4935200c00000000000000000000000000000000000000000000000000000000000000000b20354b60748c8d75604b36210b0000000000000000000000000000000000000000000000000013283d52687d92806b563c2c19010000000000000000000009141d33404c51504c402f1c090000000000162b40556b80947f695436261401000000000000000000000008131c30393d38352c1f0f000000000000000000000000000000050f15171f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1f1917110700000000000000000000000000000000000000000011273c51667c91816c57422c170200162b40556b80907b65503b26100000000000000000000000000000000000000d2035495a6c8196816c5d4b3a2a1808000000000000000000000000000000000000000000000b23374b5d7186937e6853392917030000000000000000000000000008141c33404c58616d7a848e8f877f7a75706d6b6a69696a6c6f73787e86908c8275635b4c3f2f221100000000000000000000000000000614202d39454b5660676d7477797b7b7977726c645c4d483c2f221203000000000000000000000000000000000e24394e63798d8676614c3a29170400000000000000000000000000000000000000000000000005192b3c556b808a806b56412c160000000012283d52677d887b644f3928160311273c51667c8a78634d38230f0000000000000000000000000000000000000000000000000000000000000000081d31445572888d78634e38230e00000000000000000000000000000000000000000000000000172c41576c81917c67523c27120000000000000000000000000115222f383b3b382f2111000000000000192e43586e83907b66513b26110000000000000000000000000000131e252723211a0f01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f24394e64798e846f5a452f1a0500152a3f556a7f917b66513c261100000000000000000000000000000000000006192b3c4b6175878d7a6458473626180800000000000000000000000000000000000000000b1b2f404f657a8f8a76614c36210c0000000000000000000000000000000115222f3a474c5c646f798189908f898682807f7e7e7f8184888d948b847a6d61574a3d2f21110300000000000000000000000000000002101b283238454b52546062646666646259574f4a3e352b1e120400000000000000000000000000000000000c21364a5b6e83957f6a5846331f0b0000000000000000000000000000000000000000000000000b2035485a7287907b66513b2611000000000c21364b617689836e5745321e090e24394e63798e7f6a553d2c1a0600000000000000000000000000000000000000000000000000000000000000011527375b7085907b65503b261000000000000000000000000000000000000000000000000000192e43596e838e79644f39240f0000000000000000000000000004121d242626231c11030000000000001a2f445a6f848f7a644f3a250f0000000000000000000000000000010a10120e0c06000000000000000000070d0f20202020202020202020202020202020202020202020202012100a0100000000000000000000000000000000000000000000000000000000000c21374c61768c86715c47311c0000142a3f54697f927c67523d2712000000000000000000000000000000000000000e1e334657667c9187766154433626180a000000000000000000000000000000000000031629394c5e6f8497816c5846331f0a0000000000000000000000000000000004121c2a333e4a4f5c646c757b8086898c8f909191908e8c89847e776f645c4b46392d1f11030000000000000000000000000000000000000a161e28323636434a4d4f50504f4c483b39362d20190e00000000000000000000000000000000000000071a2d3d4e63798c8976614c3a29170400000000000000000000000000000000000000000000000d22384d62788d8a76614c36210c000000000a1e3346576e838975604b36210b0c21364a5b718786715b4936210c0000000000000000000000000000000000000000000000000000000000000000182d43586d82937d68533e2813000000000000000000000000000000000000000000000000001a30455a6f858d78634d38230e000000000000000000000000000000090f11100e0900000000000000001b30465b70858e78634e39230e00000000000000000000000000000000000000000000000000000000010f1a212435353535353535353535353535353535353535353535353527251d1205000000000000000000000000000000000000000000000000000000000a1f334758748988735e382715020013283d53687d927e69543e291400000000000000000000000000000000000000031729394c5e6c8196837260544336281b0f0300000000000000000000000000000008131e324657667b908b78624d3a2917040000000000000000000000000000000000000c171f2d363e4a4f5660656b707477797a7b7b7a7976736f6962594f4a3e33291b0f010000000000000000000000000000000000000000030a151d2025303538393b3b3a37342a24221b10050000000000000000000000000000000000000000000f21364a5b6e83957f6a5846331f0b000000000000000000000000000000000000000000000013283d52687d9285705746331e0a000000000317293952677c917c6751392916071a2d3d556a808e79634e3923100000000000000000000000000000000000000000000000000000000000000000162b40556b8095806b55402b16000000000000000000000000000000000000000000000000001c31465b71868c77614c37221916120f0b090200000000000000000000000000000000000000000000001b31465b70868d78634e38230e000000000000000000000000000000000000000000000000000000000f202d36394a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a3c39302312010000000000000000000000000000000000000000000000000000000417293a5c71868a755645311d090011263c51667b91816b56412c1601000000000000000000000000000000000000000b1b2f404b607384978172605445392d1e160b040000000000000000000000020c182530444b61758795806b5a48351c0c000000000000000000000000000000000000000004101b222d3638454b50565b5962646566666564615859544d483b362d1e170b00000000000000000000000000000000000000000000000002090b131c202224262624221f180f0d070000000000000000000000000000000000000000000000071a2d3d4e63798b8976614c3929170300000000000000000000000000000000000000000006192c3c586d8295806b563929170300000000000b21364b607589836e5746321e0a0f23384e63788d806a553e2d1b070000000000000000000000000000000000000000000000000000000000000013283d53687d92836d58432e18000000000000000000000000000000000000000000000000001b30465b70858c76614c37292e2b2724201d15130e0c06000000000000000000000000000000000000001a30455a6f858e79644e39240f000000000000000000000000000000000000000000000000000000071a2d3e4a4e606060606060606060606060606060606060606060606060524d41301d0a000000000000000000000000000000000000000000000000000000001a30455a6f858b75604b36200b000f243a4f64798f836e59432e19000000000000000000000000000000000000000000121d31445561768596817260574a3e32291f170c0a03000000000000060a151d2a36434a626d82988674604b3c2b19000000000000000000000000000000000000000000000007101b222832363b413b484c4f505151504f4c473a3f37342b221b10030000000000000000000000000000000000000000000000000000000000070b0d0f11110f0d0b050000000000000000000000000000000000000000000000000000000f2136495b6e83957f6a5746331e0b0000000000000000000000000000000000000000000c2035495a7287907b65503b2610000000000000091e3245576e838976614b36210c0c2135495b718687725c4a36220d0000000000000000000000000000000000000000000000000000000000000010263b50657b9085705b372715020000000000000000000000000000000000000000000000001a2f455a6f848c77624d463943403d3936312728232019110b0802000000000000000000000000000000192f44596e84907a65503b25100000000000000000000000000000000000000000000000000000000d21364a5c70757575757575757575757575757575757575757575757575675f4d392510000000000000000000000000000000000000000000000000000000041a2f44596f848b76614b36210c000c22374c61778c86705b3a2917040000000000000000000000000000000000000000011527374658617686968375645c4b46393329211e171514131314161a2127313b4754606b80958a79635645321e0e00000000000000000000000000000000000000000000000000070a161e21262b2b34373a3b3c3c3b3937332a292220190d070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061a2c3d4e63798b8976614c3929170300000000000000000000000000000000000000000d23384d62788d8a75604b36210b0000000000000316283951667c917c67523a2917061a2c3d556a7f8e79644e392410000000000000000000000000000000000000000000000000000000000000000e23384d63788d88725544311d08000000000000000000000000000000000000000000000000192e43596e838e796461575b5855524e4b45383d38352c26201d15090600000000000000000000000000172c42576c81927d67523d28120000000000000000000000000000000000000000000000000000000f24394e64798a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a8a7d67523c271200000000000000000000000000000000000000000000000000000003192e43586e838c77614c37220c000b1f344759748988735846331f0a0000000000000000000000000000000000000000000919293a475861758396867a6a61574c463a3633292b292828292b2c3538454b59617280958b7c665b493828160000000000000000000000000000000000000000000000000000000002090b1016182022242526262524211f17140d0b050000000000000000000000000000000000000000000000000000000000000000000000060c0e12151617171513100b0902000000000000000000000000000000000000000000000f2135495b6d82957f6a5746331e0b000000000000000000000000000000000000000013283d53687d9285705645321e09000000000000000b21364b607589836e5846331f0a0f23384d63788d806b563e2e1b080000000000000000000000000000000000000000000000000000000000000b20364b60758a8a75604b36200b000000000000000000000000000000000000000000000000162b41566b80947f797673716e6b6764605657524d493c3b363127211a0f06000000000000000000000014293e54697e93806a55402b150000000000000000000000000000000000000000000000000000000b21364b60748080808080808080808080849983808080808080808080807b644f3a250f00000000000000000000000000000000000000000000000000000003182d42586d828c77624d37220d0004182a3b5b71868a76614c36210c000000000000000000000000000000000000000000000c1c2a3a47576173808c8b8075696158514c4639403e3d3d3e403d494e5660687783958a7c665e4c3d2c1a0a000000000000000000000000000000000000000000000000000000000000000000050b0d0f101111100f0c0a04000000000000000000000000000000000000000000000000000000000000000000000000050b0e192123272a2b2c2c2b2825201d150b080100000000000000000000000000000000000000061a2c3d4e63798b8976614c3929170300000000000000000000000000000000000006192c3c586d82957f6a553828160300000000000000091e3245566d828a76614c36210c0c2035495a718687725c4b372208000000000000000000000000000000000000000000000000000000000000091d31455673888d78624d38230d00000000000000000000000000000000000000000000000013283e53687d93948e8b898683807c7975716d68635a57514b4437352c20190e0000000000000000000011263b50667b90836e593d2c1a060000000000000000000000000000000000000000000000000000091e324556606a6a6a6a6a6a6a6a6a6a6a7e93806b6a6a6a6a6a6a6a6a6a645c4b37220d00000000000000000000000000000000000000000000000000000002172c41576c818d78634d38230e0000182d42576d82907b65503b261000000000000000000000000000000000000000000000000c1c2a394655606b7a8693887e766d66615758555453525456595b636a747e8897877a665e4c402f1f0f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030d1920222c35383c3f404141403d3a363228201d1509000000000000000000000000000000000000000f2135495b6d82947f6a5746331e0b0000000000000000000000000000000000000c2135495b73888f7a654f3a251000000000000000000216283851667b907d67523a291706192c3c54697f8f7a644f362614010000000000000000000000000000000000000000000000000000000000021527385b7085907a65503b251000000000000000000000000000000000000000000000000010253a4f657a8f837a7c7f8285888b8e8a86827d78726c6660554e493d352b1e140600000000000000000c21374c61768a88735b4936210c000000000000000000000000000000000000000000000000000003162838454b55555555555555555555667b90826d5855555555555555554f4b3e2e1b0800000000000000000000000000000000000000000000000000000001162c41566b818e78634e39230e000013283e53687d937f6a553f2a150000000000000000000000000000000000000000000000000c1b2937444b5d64747e889289827c76716e6a696868696b6e72788087938b8175645c4c402f2212010000000000000000000000000000000000000000000000000000000000000000040a0c111416171514110c0b0400000000000000000000000000000000000000070a000000000000000000000000000b161e2b34383c494d515456575655534f4b45383531271912050000000000000000000000000000000000061a2c3d4d63788b8976614c3929170300000000000000000000000000000000000e23384d63788d8975604b36200b0000000000000000000b20364b607589846f5847331f0a0e22384d62788a816c5443301c08000000000000000000000000000000000000000000000000000000000000182e43586d83927d68523d28130000000000000000000000000000000000000000000000000b20364b60758a8873676a6d6f73767a7e82868a8d88827b756c635b4d493c31241608000000000000000a1f33475871868e79634e3923110000000000000000000000000000000000000000000000000000000a1a2832364040404040404040404e63788e85705a37404040404040403a372e20100000000000000000000000000000000000000000000000000000000002172c42576c818d78634d38230e00000f24394e64798e846e593d2d1a070000000000000000000000000000000000000000000000000b1926313f4b556068757d858d918a8683807e7d7d7e8083888d938a82796c61574a3e2f22120400000000000000000000000000000000000000000000000000000000000000090b171f2126292b2c2b2926221f180f0d0700000000000000000000000000060c0e1c2015130d0300000000000000010f1b28323c484d565b63676a6b6c6c6a68656056524b44373020180d00000000000000000000000000000000000f2135495b6d82947f6a5746331e0b000303030303030303030303030303030313283e53687d93846f5544311d080000000000000000070b1d3145566d828a76614c37210c0b2035485a70858874604b35200b0b0b0b0b0b0b080100000000000000000000000000000000000000000001162b40566b8095806a55402b15000000000000000000000000000000000000000000000000091d32455670858d786354575a576165686d71767b81878e8981796e625a4e423426160600000000000004172a3a566b80947f6a543f2e1c080000000000000000000000000000000000000000000000000000000a161e212b2b2b2b2b2b2b2b364b61768b88725544312b2b2b2b2b2b25221b10020000000000000000000000000000000000000000000000000000000002182d42576d828d77624d38220d00000b20354b60748888735b4a36210c0000000000000000000000000000000000000000000000000009141d2e37444b56606870787e83888a8e8f9091908e8c88837e766d635b4b46392d20120400000000000000000000000000000000000000000000000000000000000006121c232933363c3f4141403e3c37342a24221b1007000000000000000000000e19212332352a28201507000000000002101f2c39464b5a626b72787c7f808181807d7a756f6760554c40342b1d0f0100000000000000000000000000000006192c3c4d63788b8976614b39291718181818181818181818181818181818181a2c3d586d83947f69543727150200000000000008131c2020273850667b907d68533a2a2020202b3c54697e8f7a65503726202020202020201d150900000000000000000000000000000000000000000013283e53687d93826d58422d1800000000000000000000000000000000000000000000000002152838556a7f937e68533d39464c4f53575861666c727981898a837868605144342414000000000000000f24394e64798e87725d4b37230e0000000000000000000000000000000000000000000000000000000003090b151515151515151e32465773898a75604b352015151515150f0d0800000000000000000000000000000000000000000000000000000000000003182e43586d838c77614c37220c0000081c3043546e838e79634e39230e0000000000000000000000000000000000000000000000000000011019273138454b525a62686e7276797a7b7b7b7976736e6861584e493d33291b10020000000000000000000000000000000000000000000000000000000000000e19202f383a464c515456575554514c473b39362d201c1308000000000000000e1e2c3538474a403c332515030000000010202d3d4957616c7880878d91908e8d8d8e908f89847c74665e4d483b2d1f11030000000000000000000000000000000e2035495a6d82947f6a5746332e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e35495b73888e79644f39240f00000000000008182530353535354b607488846f58473535353535374d62778a816c554435353535353535353127190e000000000000000000000000000000000000000011263b50667b90856f5a362614010000000000000000000000000000000000000000000000000d23384d62788d85705b493533363a3e3a464c51575c646b757e89897e6b625142311c0c0000000000000d22364a5c71868f7a65503d2c1a06000000000000000000000000000000000000000000000000000000000000000000000000031628395b71868d78624d38230d00000000000000000000000000000000000000000000000000000000000000000000000000051a2f455a6f848a75604b35200b00000114263653687d927f6a553b2b180500000000000000000000000000000000000000000000000000000009151d2832363c494d53595660636566666564615859534c473a352c1e170b00000000000000000000000000000000000000000000000000000000000003111e2b35404c50586166696b6c6a69666159564f4a3e353025181003000000000c1c2c3c494d5c5f55504333200d0000000e1e2d3e4a5b6375818b968b857f7b797777787b7f848a92877c7062594a3d2f211101000000000000000000000000000006192c3c4d63788b8976614b3943434343434343434343434343434343434343434e63788d8974604b35200b000000000000132536434a4b4b4b4b556c828a77614c4b4b4b4b4b4b4b5970858874604b4b4b4b4b4b4b4b4b44372b1e0e000000000000000000000000000000000000000e23394e63788e87725443301c080000000000000000000000000000000000000000000000000c2035495a70858d79634e3b2b2125292933363c3e4a4e576069778493806b604e3a2a18040000000000071b2d3e53697e93826d5b4935211200000000000000000000000000000000000000000000000000000000000000000000000000192e44596e838f7a65503a251000000000000000000000000000000000000000000000000000000000000000000000000000021527375c718689735544311d080000000c21374c61778a8670594834200b00000000000000000000000000000000000000000000000000000000020a161e212b35383e38454b4e4f5051504f4c473a3e373329211a0f030000000000000000000000000000000000000000000000000000000000000211212f3c484d5e6670767b7e8081807e7b77726b645c514a43362e1e160b00000919293a495b6371756a61503c281300000a1a2b3c4a5c647987968b80776f6a666362626366696f767f89918477645c4b3f2f1f0f0000000000000000000000000000000e2035495a6d82947f6a5758585858585858585858585858585858585858585858687e93836e5443301c080000000000071c304354606060606060657a907d68606060606060606060687e907b6560606060606060606055493c2b19060000000000000000000000000000000000000b21364b60768b8a75604b35200b00000000000000000000000000000000000000000000000006192c3c52677d92816c594834201013171f21262d3639454b59627382937e685847331f0a0000000000001021364b6075888b79634e402f1b0b00000000000000000000000002090b0c0a04000000000000000000000000000000000001162c41566b81927d68523d281300000000000000000000000000000000000000000000000000000000000000000000000000081d314455738887725c372715010000000a1f3347586f848a77624d37221000000000000000000000000000000000000000000000000000000000000003090e19202329283236393a3b3c3b3937332928211f170c06000000000000000000000000000000000000000000000000000000000000000010202f3f4c5a62707b858a918e8b8a8b8c8f8c878179716760544b3f32291b0f0114263746586379868d7f6a55402a150002152738485a647a899985796b625954504e4d4d4e515458616976818d877a655d4b3d2c1a0a000000000000000000000000000006192c3c4d62788b89756d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6e83937e69533626140100000000000b20354a60737575757575757488847475757575757575757575778c8174757575757575757574705a4935200b000000000000000000000000000000000000091e32455673888d77624d38220d000000000000000000000000000000000000000000000000000e20354b6074878a77624d3e2d1b0a040a0c111b2228323b48556073858a77614c37220c000000000000091e324556697e94836f5e4c3a291808000000000000000000000a151d20211f170c000000000000000000000000000000000014293e54697e937f6a55402a15000000000000000000000000000000000000000000000000000000000000000000000000000b20364b60758a846f5a452f1a0000000004172a3a52677d927e69533f2e1b080000000000000000000000000000000000000000000000000000000000000000060b0d13161e21242526262624211f17130c0a040000000000000000000000000000000000000000000000000000000000000000000b1b2d3e4c5d657885908f857e79767576777a7e83898e867c72655d4b46392c1f111d31445561768698826e61503c281300091d314556627888998374635b4d483b3b393838393b3a474c58616c7d8b8a7b655b493827150200000000000000000000000000000e2035495a6d829784838383838383838383838383838383838383838383838382898e79634e39230e0000000000091e33485e73888a8a8a8a8a8a8b969a8a8a8a8a8a8a8a8a8a8a8a8c98978a8a8a8a8a8a8a8a8a8a78624d38230d000000000000000000000000000000000000031628385b70868f7a654f3a251000000000000000000000000000000000000000000000000000081d314455687e93816c5c4a39281603000000070a161e2b374455657b907f69543f2a14000000000000031628384b607486907b6658463626150900000000000000000a1a2832363633291c0c0000000000000000000000000000000011273c51667c91826d58422d18000000000000000000000000000000000000000000000000000000000000000000000000000e23384d63788d816c57422c1702000000000c21364b60758986715d4b37220d00000000000000000000000000000000000000000000000000000000000000000000000003090b0e101111100f0c0a04000000000000000000000000000000000000000000000000000000000000000000000000031729394a5c657b8997867b7069646158606265696e767d8691867a6c6157493d2f2130414b607383998575604b4333200d000b20364b6074859a83746056493c342b26242222232629333a474c5f677a8a8979635645311d0c000000000000000000000000000006192b3c4d62788b9a8988888888888888888888888888888888888888888888899d88735b4a36210c00000000000012283d52677d7e7e7e7e7e7e7e8196827e7e7e7e7e7e7e7e7e7e7e8296807e7e7e7e7e7e7e7e7d73604b35200b00000000000000000000000000000000000000192e43596e83927c67523d271200000000000000000000000000000000000000000000000000011527374b6073858b7a645745321e130800000000030d1927374b607489846f59442f1a000000000000000a1d314556657a8d87766154433127190e0300000000010c1a2838454b4c463a291a0a0000000000000000000000000000000f24394e64798e856f5a3626140100000000000000000000000000000000000000000000000000000000000000000000000010263b50657b907e69543f29140000000000091e3245566b808f7a654f3b2a180500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1e334657647a8a978174655d544e4c464b4d4f54586168737d878c8175635b4c40303e4d5f6b8096887762564532251503000e23394e63798b8676615645382c2018110e0d0d0e11171f2a33414d5c677c918674604b3a2a170400000000000000000000000000000e2035485a6c82947f737373737373737373737373737373737373737373737e93836e583d2d1a070000000000001025394d5f6768686868686868758a836e68686868686868686868788d806b6868686868686867605544311d0800000000000000000000000000000000000001162b41566b80947f6a553f2a150000000000000000000000000000000000000000000000000000091c304354647a8c8675604b443025180e0300000000091c304354718687725c47321d00000000000000021527384b5d6b80958372604b44372b1e160e0c0c0d141c2a384556606158463828150200000000000000000000000000000c21374c61768c87725443301c0800000000000000000000000000000000000000000000000000000000000000000000000014293f54697e907b66503b26110000000000031628384d62788b836e5948341f0d000000000000000000000000040a0c110d0b050000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b1412100a0000000000000000000000000004182a3b4c61768897826d60564b3f39363336373a3a464c54606775818d8679655e4d414b5c677d928b7a6459483828160700000c2136495b63797762584638281a0e05000000000000040c171f303e4d5f6c81947f6a5847331f0a000000000000000000000000000006192b3c4d62788b8875605e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e6e83937d68533e2813000000000000000a1e30414d52535353535353576e838a766153535353535353535a708687725c535353535353524b44372715010000000000000000000000000000000000000014293e53697e93826c57422d170000000000000000000000000000000000000000000000000000011426364a5c6a7f94816d624a43362b1e160e0c0b0c111d314455708588725d48331d00000000000000000a1a2e3f4b60728397816d6055483c32292322212326303a4756607476615645321d0900000000000000000000000000000a1f33475874898a75604b35200b000000000000000000000000000000000000000000000000000000000000000000000003162839586d828c77624d37220d0000000000000a2035495a6e838a77624c3b2b1805000000000000000000000c181f22272220190d000000000000000000000000000000000000000000000000000000000000000000000000000000000008141c202927241d120400000000000000000000000b1f3447596b80968573604b45382e24211f212225293336434b57616c7c898a7c675f4d59647a8b927d675c4a3b2b1a0a000000061a2c3d4a5b636259483a291a0a0000000000000000000004122030404b6176898976614c37210f0000000000000000000000000000000e2035485a6c81947e695645484848484848484848484848484848495b73888d78634d38230e0000000000000001132330393d3e3e3e3e3e3951667c917d67523a3e3e3e3e3e3c54697e8f7a644f363e3e3e3e3d3531271909000000000000000000000000000000000000000011263b51667b90846f5a36251300000000000000000000000000000000000000000000000000000008182d3e4a60728396806c6054483c322823212021232e3b4b60748885705b45301b000000000000000000101c304354617585978274625a4b46393937363836434b586174858875604b36200b00000000000000000000000000000417293a5c71868c77624d37220d0000000000000000000000000000000000000000000000000000000000000000000000091e32465771868873594834200b00000000000006192b3c4e64798b806b594834200e0000000000000000000c1c2a33373c37342b1d0d0000000000000000000000000002080b0d0f0e0c0a04000000000000000000000000000000000008182630353f3c3930221200000000000000000000000c22374c61778a8c7a64554432281a110c0a0b0d10171f263039464b5e6679868b7d675f62778895806b5f4d3e2e1d0d00000000000f1f2d3d4a4e4c483b2a1b0b00000000000000000000000002121e3346576a7f947f69543d2d1a07000000000000000000000000000005192b3c4d62788a8875604b3828333333333333333333333333384e63788d87725a4935200c000000000000000005131e25282929292929364b607589846f58473329292929374d62778a816b54433029292927201d15090000000000000000000000000000000000000000000e24394e63798e87725443301c07000000000000000000000000000000000000000000000000000000101c304354607584968072625a4b453938363537393f4b59667c917f6a543f2a150000000000000000000114263646576175849684786a6157524e4c4c4d505460677684927d685645321d090000000000000000000000000000001a2f44596f848f7a654f3a251000000000000000000000000000000000000000000000000000000000000000000000000c21364b61768a846f5a3b2b1805000000000000000e21364a5c6e838a77624c3c2b19050000000000000004182a3a474c514d483b2b190500000000000000000002090b151d20232524211f170c0a010000000000000000000000000001142636434b54514d40301d0a0000000000000000000013283d53687d9285705c4b3727160a0000000000000408141c2832404c5b6377868c7d677485998372604a41302010000000000000010f1f2d363937342a1d0d0000000000000000000000000000031729394c61768a87725b4a36210c0000000000000000000000000000000e2034485a6c81947e695645321e1e1e1e1e1e1e1e1e1e1e293e53687e93826d583c2c1906000000000000000000010a1012131313131e3245566d828a76614c372113132034485970858873604a35201313120b0801000000000000000000000000000000000000000000000c21364b61768b8975604a35200b000000000000000000000000000000000000000000000000000000001325364557607483948478696057514e4c4b4c4e535d6577878976614c36210c000000000000000000000818293946576174808c897f766d6763616162656a737d888d7f6a604e38281502000000000000000000000000000002172c42576c81927c67523d2712000000000000000000000000000000000000000000000000000000000000000000000010263b50657b907f6a553f2a150000000000000000071a2d3e4e64798c816c5a48352011000000000000000a1f334758616662594834200b00000000000000050a151d20273136383a39363329251d1203000000000000000000000000081c3043546069675f4d39241000000000000000000004192f44596e84937e69533e2e1909000000000000000000010b161e2f3c49596176868b7b829886756154433023130200000000000000010f1a2124221f180d000000000000000000000000000000000b1f3346586e848e79634e39240e00000000000000000000000000000005192b3c4d62788a8875604b38281603090909090909061a2c3d586e83927d67523d281200000000000000000000000000000000000216283851667b907d68533b2a1805182b3b53697e8f7a654f3726140100000000000000000000000000000000000000000000000000000a1e33465773898c77624c37220d0000000000000000000000000000000000000000000000000000000008182839455660727f8b8a7e756d676361606163686f7b878c7c665846331f0a00000000000000000000000b1b29394656606b7b869089827d787776787a808792887c6a614f42311a0a00000000000000000000000000000000142a3f54697f947f6a553f2a150000000000000000000000000000000000000000000000000000000000000000000004172a3a556a808f7a65503a25100000000000000000000f22364a5c6d828a78624d3f2e19090000000000000c22374c61767c78624d37220d0000000000070d181f27313637444b4d4f4e4c463a39301e160a0000000000000000000006192c3c4b60727e7d67513c2712000000000000000000011527375d72878e78634e39231000000000000000000000000003111e2c3b47586278888b9888786257463625130500000000000000000000070c0e0d0b0500000000000000000000000000000000000417293a54697e937e69533e2914000000000000000000000000000000000d2034485a6c81947e695645321e0a0000000000000c2136495b73888c77624d37220d0000000000000000000000000000000000000b20364b607589846f5947341f0b0d22374c61778a816c5544311d080000000000000000000000000000000000000000000000000000031729395c71868f79644f3a240f00000000000000000000000000000000000000000000000000000000000a1b28384554606979848e88827c78767576787d848f897b665e4c3a2917040000000000000000000000000b1b2838454b5d65717b848a908e8c8b8d8f8f888077665e4f43322313000000000000000000000000000000000012273c52677c91826c57422d17000000000000000000000000000000000000000000000000000000000000000000000a1f33475870858975604b36210b000000000000000000071b2d3e4d62788a826d5d4b3727150200000000000f24394f64798e7e695336251300000108101b222a3438454b5255606264636158524d4132281b0a0000000000000000000d2035495a697e8f7a644f3a250f000000000000000000081d31445574898c76614c37210c00000000000000000000000000000e1d2a3a495b697e93907b665a4839291808000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f826d58432d180300000000000000000000000000000005192b3c4d62778a8875604b3828160200000000000e23394e63798e8772594834200b000000000000000000000000000000000000081d3144556d828a77624c37220d0b1f3447596f848874604b35200b000000000000000000000000000000000000000000000000000000192e44596e83917c67523c27120000000000000000000000000000000000000000000000000000000000000a1a2836434b5c646f7982888e8d8b8a8c8e8e888076655d4c402f1c0c00000000000000000000000000000b1a27313f4b505e666f767b7e8081807d79746b61594c403225150500000000000000000000000000000000000f243a4f64798f846f5a362513000000000000000000000000000000000000000000000000000000000000000000000c21374c61768a846f5645321e0900000000000000000000102034485a6b808f7b655544311d0e00000000000d22374c62778c816c5443301c0e0e141c202d363b484c5660676e75787a797670675f4b4539281909000000000000000d1d31424d62788a846f5c4b37220d0000000000000000000b20354b60758a8a745847331f0a000000000000000000000000000115273747586379899697826c5d4c3929170300000000000000000000000000000000000000000000000000000000000000000000000d22374d62778c85705b45301b06000000000000000000000000000000000d203448596c81937e695645321e0a000000000013253653697e93816c573b2b18050000000000000000000000000000000000000215273750657b907e69533b2b1905182a3b53687d907b6550372715020000000000000000000000000000000000000000000000000001172c41566c81947f69543f2a14000000000000000000000000000000000000000000000000000000000000000a1826303d4a4e5c646d73797c7d7f7e7c79736b61584c3f2f2211000000000000000000000000000000000a151d2e37404c51576166696a6c6b686460544c473a2f2215070000000000000000000000000000000000000d22374c62778c87725443301c0700000000000000000000000000000000000000000000000000000000000000000317293952677d927d6853382816020000000000000000000005192b3c4b6175888674604b3c2b1808000000000b1f34485972878773604a3a2b23242630353e4a4f59626a757d83898d8f8e8a857c6e60574537261401000000000005182b3b4e606f848e7a644f3e2e1b08000000000000000000081d314455758a8b75604b36200b00000000000000000000000003111d314455617687968183907b655746331e0c00000000000000000000000000000000000000000000000000000000000000000000000b21364b60768b87725d47321d080000000000000000000000000000000005182b3b4d62778a8875604b38281602000000071c3043546e83917c67513c271200000000000000000000000000000000000001000b20354b6074888570594834200b0c21374c61768a826d5544311d08040404030000000000000000000000000000000000000000000014293e54697e93816c57422c17020000000000000000000000000000000000000000000000000000000000000008141c2d363e4a4f575b6366686a6967635b554c473a2f211104000000000000000000000000000000000002111c232f3839464b5053555655534f4b4336342a1c1103000000000000000000000000000000000000000b20354a6075898975604a35200b00000000000000000000000000000000000000000000000000000000000000000a1e3346576e838a77624c37220d0000000000000000000000000d1e324657667c917f6a5a483625130000000005182a3b566b80917c6658483c383936434b515c646d778088928a84807e7f8389918375605544311d0b00000000000c20344859687e93836e5c4a36201000000000000000000000011527375d73888d77624d38220d000000000000000000000000112131424b607384998373788a8775614b3a2a1804000000000000000000000000000000000000000000000000000000000000000000000b20364b60758b88735d48331e0800000000000000000000000000000000000d203448596c81937e695645321e0a0000000b20354a6074888b77614c37210c000000000000000000000000000000040e141619191d3144556c818a77624d372219191f3347586f848975604b362019191919180d0b050000000000000000000000000000000000000011273c51667c91846f59442f1a000000000000000000000000000000000000000000000000000000000000000000010f1a212d36393d4a4e51535553524e4a3d3733291c1103000000000000000000000000000000000000000008121d242832363b3e4041403e3a3530261f180c000000000000000000000000000000000000000000071c30435472878c77624c37220d00000000000000000000000000000000000000000000000000000000000000000c21364c6176898570594834200b000000000000000000000000031628394c5e6e838a78625443301c0f000000000d22374d62778a8776625a504e4e51546066707a828a8f857e766f6a696a6e7782978473604b392917030000000c1d30414d6277898c79644e3e2d1b0200000000000000000000001a30455a6f848f7a654f3a251000000000000000000000000e1e2e3f4e606c8196867561697e93806b5847331f0c000000000000000000000000000000000000000000000000000000000000000000000d22384d62778d86715c47311c07000000000000000000000000000000000005182b3b4c62778a8875604b3828160200000e24394e63798e86715847331f0a0000000000000000000000000000081621292b2f2f2f263750657a8f7e69543c2b2f2f2f2a3a52677d907b665138282f2f2f2f2d2220190e0000000000000000000000000000000000000f24394e64798e87715c3a2a17040000000000000000000000000000000000000000000000000000000000000000000007101b22242d36393c3e3f3e3d39362d211f170c000000000000000000000000000000000000000000000000090b161e2126292b2c2b2824201c14080400000000000000000000000000000000000000000000001325365a6f848f79644f3a240f00000000000000000000000000000000000000000000000000000000000000071b2d3e53687d927d68523b2b1805000000000000000000000000000b1b30404c6277898472604a3d2c19090000000b20344859687e9385786c656363666c747c858e8b847a7068615855535559616d81947f6a5746331e0a000004182a3b4d5f6f8398836e5c4a362010000000000000000000000000152b40556a8095806a553e2d1b070000000000000000000b1b2b3c4b5d687e93897863576073878977614c3a2a1704000000000000000000000000000000000000000000000000000000000000000008172a3a50657a8f846f5a452f1a050000000000000000000000000000000000000d203448596c81937e695645321e0a000013253653697e93816b563a2a170400000000000000000000000000041626343d4144444444444a60738886705a494444444444444c617689826d564544444444444338352b1e0e00000000000000000000000000000000000c21374c61768c89745847331f0a000000000000000000000000000000000000000000000000000000000000000000000000070d0f1a212427282a292724211a0f0a0400000000000000000000000000000000000000000000000000000003090c1114151716130f0b080100000000000000000000000000000000000000000000000000182d42576d82917c67523c2712000000000000000000000000000000000000000000000000000000000000000d22364a5c70858976614b36210d0000000000000000000000000000001220344859687e937e695b4937271501000005182b3b4e606a7f908a817b78797b8188918a82796f655d534c463a3e3b474c6074878976614b36210c00000b1f344759677d928c79634e3d2d1a020000000000000000000000000f24394f64798e86715c4a362210000000000000000008182839485a657b8b8c7b655a4955677d92806b5847331f0a000000000000000000000000000000000000000000000000000000000000030d18253347586c8196806b56412b160100000000000000000000000000000000000005182b3b4c62778a8875604b38281602071c3043546e83907b66513b261100000000000000000000000000000e2134445156595959595959546c818d78625959595959595959576e83897560595959595959584d483c2b1905000000000000000000000000000000000a1f33475874898c76614c37210c000000000000000000000000000000000000000000000000000000000000000000000000000000070c0e11131514120e0c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000152a3f556a7f947f69543f2a14000000000000000000000000000000000000000000000000000000000000021527374e64798e826d5746331e0a00000000000000000000000000000005182b3b4e606f838a79635544311d080000000d1d314250616a7b868d908d8e908a857e776c635b4f4b3f363329292a344556687d927d68523d281300021628384c61778998826d5b4a361f0f000000000000000000000000000d22364a5c71868e79644e3e2e1b0b000000000000001325364657627888937e685d4b3c4b6073878a77614c37210f00000000000000000000000000000000000000000000000000000000060b161e2a36434c6176898e7a644f39240f00000000000000000000000000000000000000000d1f3448596b81937e695645321e0a0b20354a6074888a76614c36210c000000000000000000000000000014293d51626b6e6e6e6e6e6e6e6e7a8f7f6e6e6e6e6e6e6e6e6e6e6e7c917c6e6e6e6e6e6e6e6d625a4835200b0000000000000000000000000000000004172a3a5c71868e79644f39240f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012283d52677d92816c57422c17020000000000000000000000000000000000000000000000000000000000081d3144556d828e79644e39291703000000000000000000000000000000000d1d31424c6277888573604b35200b0000000014243343505d6571787d7f7e7c77706961594e493d372e211f17141828384c61778b826d58422d1800091e3245566e83918a78634d3d2d1a0100000000000000000000000000071b2d3e51677c91836e5c4b392816030000000002101c30435461758697816c604e3f304354697e937e69543d2c1a0600000000000000000000000000000000000000000000000003090f1a2128323b4854606e839985705c4a36220d000000000000000000000000000000000000000005182a3b4c62778a8875604b3828150f24394e64798e85705746331e0a0000000000000000000000000001162b41566b808384848484848484838d888384848484848484848483849a87838484848484848278624d38220d00000000000000000000000000000000001a2f44596f84917c66513c27110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010253a4f657a8f846f59442f1a0000000000000000000000000000000000000000000000000000000000000b20364b60758a84705c4a361b0b000000000000000000000000000000000000131f344759667c917d68533e281300000000061525333f4c505b63676969676259534c473a352c231c110a04000a1f344759728785705b45301b000b21364b60747c7c78635a49351f0f0000000000000000000000000000001020354a6072868c7a645746321e1602000000102030414a607283998473604b423126364c61768a86715b4936210c00000000000000000000000000000000000000000000070a161e212c3539464b59627281968b79634e3e2d1b070000000000000000000000000000000000000000000d1f3447596b80937e695645321d14263654697e93806b5539291703000000000000000000000000000011263c51667c838484848484848484879a848484848484848484848483888d83848484848484837d67523d27120000000000000000000000000000000002172c41576c81947e69543f2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d22384d62778d87715c3a2a17040000000000000000000000000000000000000000000000000000000000081d314455667c7b65503d2d1a0000000000000000000000000000000000000005182a3b4c5e697e78624d37220d00000000000715212f383d494e525454514c483b37342a211a0f080000000004182a3a54697f7f69543f2a1400091e324556606766625a493c2c1901000000000000000000000000000000071c304354647a8c8675614b44331e160a000d1d2d3e4d5f6a8095867661554431241f3347586e838e79634e39230e0000000000000000000000000000000000000000090f1a212832363d494e5761697783968b7c665b493520100000000000000000000000000000000000000000000005182a3b4c6177898875604b38281c3043546e83907b65503b25100000000000000000000000000000000f24384c5e666e6f6f6f6f6f6f6f6f7c917c6f6f6f6f6f6f6f6f6f6f6f7f8e796f6f6f6f6f6f6f675f4d3925100000000000000000000000000000000000142a3f54697f94816c56412c17010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20354b60758a89745847331f0a0000000000000000000000000000000000000000000000000000000000021527374c5e66655d4b371f0f00000000000000000000000000000000000000000d1d30404f606962594834200b00000000000003111c232c35383d3f3f3c37342b221f180c06000000000000000c273b4f616969614f3c27120002162838454b51514d493c2c1e0e00000000000000000000000000000000001325364b5d6a7f95826d62504332281a0f1a2a3b4a5c677d8d8979635847372715172a3a52677d927f69543f2a1400000000000000000000000000000000000007121d242d3639454b525b636b757e8998887c665e4c3d2c1a0200000000000000000000000000000000000000000000000d1f3447596b80937e6956453220354b6074898a75604b36210b000000000000000000000000000000091d30404c515959595959595959607589836e57595959595959595963788d806b545959595959524d41301e0a000000000000000000000000000000000012273c51677c91846e59442f1900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081d31445572878c77614c37210c000000000000000000000000000000000000000000000000000000000000091930404c51504b3f2e1c01000000000000000000000000000000000000000000122232424f544d483b2b19050000000000000000080f1a2123282a29272220180d0a040000000000000000000c2032434f54544f4332200c00000a1a2832363c3c38352c1e0e00000000000000000000000000000000000008182e3f4b60728395806b614b45382d1e27384759647a8a8c7c665b493a2919090d22374c62778c846f5a442f1a05000000000000000000000000000000010f1a212f383d4a4e57606870788088948f8377655e4c402f1f0f00000000000000000000000000000000000000000000000004182a3b4c6177898875604b3828394e64798e85705645321e0900000000000000000000000000000000122230383c4444444444444445566d828976614b444444444444495b71868873604a444444443d393023130100000000000000000000000000000000000f243a4f64798f86715c39291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011426375a70858e79644f39240f00000000000000000000000000000000000000000000000000000000000000122230383c3a372e211100000000000000000000000000000000000000000000041424323b3e37342b1d0d0000000000000000000000060c0e121414120d0b05000000000000000000000000031425323b3f3f3c322515030000000a161e2127272320190e0000000000000000000000000000000000000000101c304354607484947f6d60564a3d32314556627787937e695e4c3d2c1c0c000b20344859708588735e49331e09000000000000000000000000000006131f2d36404c515b636c757d858d958b837a6e62594c402f221201000000000000000000000000000000000000000000000000000c1f3347586b80937e695645323654697e947f6a55382816020000000000000000000000000000000004121d24262f2f2f2f2f2f283851667b907c67523a292f2f2f2c3c54697f8f7a654f37262f2f27251e13050000000000000000000000000000000000000c22374c61778c89735746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080e100e0c06000000182d43586d82917c66513c27110000000000000000000000000000000000000000000000000000000000000004121d242625231c1103000000000000000000000000000000000000000000000006141f27292220190d0000000000000000000000000000000000000000000000000000000000000000000000071420272a2a27201507000000000002090b12110d0c06000000000000000000000000000000000000000000011426364556607483948274635b4b46434b60748497816d614f402f1f0f000005182b3b4b607478624d37220d0000000000000000000000000000061424313d4a4e5e667079818992928880786e645c4c483b2f211204000000000000000000000000000000000000000000000000000004182a3a4c6176898775604b3843546e848f7a654f3a251000000000000000000000000000000000000000090f11191a1a1a1a1a20364b607589846e5847331f1a1a22384d62788a816c5544311d1a12100a01000000000000000000000000000000000000000b1f34475974898b76614c36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111c232523211a0f0100152b40556a80947e69543f2914000000000000000000000000000000000000000000000000000000000000000000090f11100e080000000000000000000000000000000000000000000000000000020c12140d0b0500000000000000000000000000000000000000000000000000000000000000000000000000030c121414120c030000000000000000000000000000000000000000000000000000000000000000000000000818283845566072808c85796b61574c616d82978473604b42322211010000000d1d3145566062594834200b0000000000000000000000000003142431424e5b63707c858e968d857c756b625a4f4a3e342a1d1103000000000000000000000000000000000000000000000000000000000c1f3347586b80937e6856454b6074898975604b36200b000000000000000000000000000000000000000000000404040404081d3144556d828a76614c37210c0b2035485a70858874604b35200b000000000000000000000000000000000000000000000004182a3b5c72878e79634e39240e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011212e373a38352c1f110313283d53687d92816c56412c17010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001080b0b080100000000000000000000000000000a1a28384554606a7b878b80756a61697f948776615544312414030000000002152738454b4d483b2b190500000000000000000000000000112131424e606879859094898178706760564d483c362d1f180d00000000000000000000000000000000000000000000000000000000000004172a3a4c6176898774604b4f64798e846f5544311d080000000000000000000000000000000000000000000000000000000215273750657b907d68533b2a1805192b3c53697e907b65503827150200000000000000000000000000000000000000000000001a2f445a6f84917b66513c2611000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b2e3f4b504e493d2f211310253b50657a90846e59442f1900000000000000000000000000000000000000000000000003090b19170b080100000000000000000000000000000000060c0e1915130d0300000000000000000000000000020b111314120c0200000000000000000000000000000000050b0d16140e040000050b0d16140e04000000000000000000050b0d16140e04000000000000000009141d20201c140800000000000000000000000000000a1a2836434b5e65757f898880777b8c8a79635847372715060000000000000a1a27313637342b1d0d0000000000000000000000000009192e3f4e60687e8a99897f766b635b524b4538352b221b100500000000000000000000000000000000000000000000000000000000000000000c1f3347586b80937e685654697f947f695437271502000000000000000000000000000000000000000000000000000000000b20354b607488846f5947341f0b0e22374c62778a826d5645311d090000000000000000000000000000000000000000000002172d42576c82937e69533e2914000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394b5d65635b4c3f31231523384d63788d86715c3a291704000000000000000000000000000000000000000000000a161e212f2c201d150900000000000000000000000000000e1920232f2a28201507000000000000000000000006141f262829261f140600000000000000000000000000000d181f222b292116080d181f222b29211608000000000000000d181f222b292116080000000000000919263135353026180800000000000000000000000000000a182630404c56606a777f888b898d7c665b4a3a2a190900000000000000000a151d202220190d00000000000000000000000000021527374b5d687e929783776a61574e493d36312720190e070000000000000000000000000000000000000000000000000000000000000000000004172a3a4c617689877460556f848e79644f39240f0000000000000000000000000000000000000000000000000000000000081d3144556c818a77614c37220d0b1f3447596f858975604b36200b00000000000000000002080b0b0b0b0b0b0b0b0b0b0b0b152a3f546a7f94806b56412b160b0b0b0b0b0b0b0b0b0b0b0b0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324557657b79655d4e41331d20364b60758a89745846331f0a0000000000000000000000000000000000000000000a1a283236444135312719090000000000000000000000000e1e2c3538443f3c33251503000000000000000000021424313a3e3e3b322414020000000000000000000000000d1d2a3437403d3326161d2a3437403d3326160000000000000d1d2a3437403d332616000000000001142637444b4b4336261401000000000000000000000000000008141c2f38454b59626a7588957f6a5e4c3d2d1c0c0000000000000000000002090b0d0b050000000000000000000000000000081d314455657b8d97817262594b4639352c201d150a05000000000000000000000000000000000000000000000000000000000000000000000000000c1f3347586b80937e686074898974604b35200b00000000000000000000000000000000000000000000000000000000000114263750657a8f7e69533c2b1905182a3b53687d917c6651392816030000000000000009151d20212121212121212121212121273d52677c92836e59432e21212121212121212121212121201d150a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b21364b607689897b685f5043312731455673888b76614c36210c000000000000000000000000000000000000000003162838454b59574b44372715010000000000000000000006192c3c494d5955504333200d0000000000000000000b1f31424e53534f42321f0c000000000000000000000005182a3b484c565144331d2a3b484c565144331d0d0000000005182a3b484c565144331d0d00000000081d31445560605443301c1301000000000000000000000000000001111a28323b4a5b6b80958472604a402f1f0f000000000000000000000000000000000000000000000000000000000000000b20364b60748698826e6054483b3329211a0f09020000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c617689877464798f836e5443301c080000000000000000000000000000000000000000000000000000000000000b20354a60738885705a4834200b0d21374c61768a836d5745321e090000000000000919273136363636363636363636363636363a4f647a8f86705b3936363636363636363636363636363632281a0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091e324557647b888c7d6a614b443729385b70858e79634e39240e0000000000000000000000000000000000000000091e324556606e6c605544311d0c00000000000000000000092035495a636e6a61503c281300000000000000060011263a4e606869604f3b261200000200000000000000000b1f344859626b62513b2b344859626b62513b2b18050000000b1f344859626b62513b2b18050000000b20354b607373604b42311f0f000000000000000000000000000000000a1c2e3f4e63798b8978625443302212010000000000000000000000000000000000000000000000000000000000000011263c51667c918876614c43362b1e170b06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f3347586a80937e697f937e695336261401000000000000000000000000000000000000000000000000000000000000071c3043546c818a78624d38220e0a1f3347586f848975604b36210b000000000002152737444b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4d62778c8873574b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4538281808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031628394b5c64788692806d6055463943586e83917b66513c261100000000000000000000000000000000000000000b21364b6076838173604b3a291704000000000000000009192f404d6378847f6a553f2a1500000000050b0d1b0f13283e53687e7e69533e2914090c1714120c02000000000d22374c6277806b594834374c6277806b594834200b0000000d22374c6277806b594834200b00000013283d53687d816b604e3d2c1a060000000000000000000000000000000e23374b5d6f84947f695a48362513040000000000000000000000000000000000000000000000000000000000000003182d43586d8295806b58473325180d030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c6176898775848e79634e39230e00000000000000000000000000000000000000000000000000000000000000001325364f647a8f7f69543c2c1906172a3a52677d917c67523a29170400000000081d3144556060606060606060606060606060606060758a8b7660606060606060606060606060606060605645362513000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a1b2e3e4b5a6376849581736157483b566b80937e69533e29140000000000000000000000000000000000000000091e3245566b80937e695846331f0e00000000000000011426374c5e6f848b79634e39240e0000000d1820223024222a3f556a7f846f5a3625161e212d29261f140600000010253a4f657a8c77624d373a4f657a8c77624d37220d00000010253a4f657a8c77624d37220d0000000c21364c6176877d685b4935211200000000000000000000000000000216283850657a8f8774604b3c2b18080000000000000000000000000000000000000000000000000000000000000000001325365c71878e79644e3a2917080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f3346586a7f927d8988735b4936210c00000000000000000000000000000000000000000000000000000000000000000822374b5c728786715a4935200c0c21364b617689836e5846331f0a000000000b20364b60747576767676767676767676767676767674878e7a76767676767676767676767676767676756d5443301c070000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010202e3c495861748295847562594a53687e93816b56412c160100000000000000000000000000000000000000031628384b6176888876614c3c2b1905000000000000081d314455667b90826d5b4a36210c00000d1d2b34374539362d3d52677c8772544330283236423e3b3224140200000e23384d63788d7a65503b384d63788d7a65503b25100000000e23384d63788d7a65503b25100000000a1f334658647a8a79634e402f1d0900000000000000000000000000091e3245566e83937e695544311d0d000000000000000000000000000000000000000000000000000000000000000000071c30435473898b76604b36210c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c6176898898836d583d2c1a060000000000000000000000000000000000000000000000000000000000000000081b2e3e566b808d78634d38230e0a1e3246576e838a76614c36210c00000000172d42576c818b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b99998e8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b8b72604a35200b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002101e2c3a4756607280928678635b50667b90836e59432e190000000000000000000000000000000000000000000a1e334657687e93806b5a483520100000000000031629394b6073868a77624d3d2d1a070005182b3b484c5b4f4a3e3a4f647a8a75604a3539464b57534f42321f0c00000c21364b61768b7e68533e364b61768b7e68533e29130000000c21364b61768b7e68533e29130000000417293a4a5c6b80846f5e4c38240f000000000000000000000000000b21364b6075898976614b372715000000000000000000000000000000000000000000000000000000000000000000000b20354a60758a89745745321e0900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1f3346586a7f95927d68533d2813000000000000000000000000000000000000000000000000000000000000000000001024394e64798e7f6a553f2a150316293951677c917d67523d28120000000012283d52677d8484848484848484848484848484848484848484848484848484848484848484848484848375614b36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1c2a384554606b7e8c8879655e63788e86715b392816030000000000000000000000000000000000000000031729394b6073868a78624d3e2d1b07000000000a1e324657687e93806a5948341f0f00000b203448596270645c4c474d62778c77624d3f4b57616c69604f3b261200000a1e3346577489816c56413346577489816c56412c170000000a1e3346577489816c56412c17000000000b1b2e3e4b6176887c66513d2d1a0700000000000000000000000011263b50667b90836e574633190900000000000000000000000000000000000000000000000000000000000000000000071c304354748a89745746331e0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4c6175838478624d38220d000000000000000000000000000000000000000000000000000000000000000000000d21364a5c697e806c56412c17000b21364b6074847c66513c26110000000010253a4d5f676f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f615746321e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1a2836434a60687c8a8a7c6861768b88735746321e090000000000000000000000000000000000000000000b1d314455667c91826d5c4a36221200000005182b3b4b6175888875614b3b2b180100000d22374c6277847a6c61584b6075897a644f4b5d6475827e69533e29140000031729395d7287846f5a3729395d7287846f5a372614010000031729395d7287846f5a3726140100000000101e3346576a7f85705b4a36210c000000000000000000000000152b40556a80937e69533929170000000000000000000000000000090000000000000000000000000000000000000000001325485d72888b76614b36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1e334657616f6f625a4835200b00000000000000000000000000000000000000000000000000000000000000000000071a2d3d4f61696c62513e291400091e324556606f665e4c38240f000000000a1e30414d525a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a5a4b463929160300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a182530424e5e6579878c7e6a73898b76614b36210c000000000000000000000000000000000000000000011426374c5e6f848c7a644f402f190900000b203448596a80937e685746321d0d0000000b21364b6075808a827668605472877c6756606b7a87877b65503a25100000001b30465b70858772554431465b708587725544311d080000001b30465b708587725544311d08000000081826303d4c62778a79634e39240e000000000000000000000002172d42576c828f7a654f3a25100000000000000000000000060b0d1f13110b0200000000000000000000000000000000001a2f445a6f848e79634e39240f00000000000000000000000000000002090b09020000000000000000000000000000000000000000000000000000000000000003172939464c595a4d483c2b190500000000000000000000000000000000000000000000000000000000000000000000000f1f32434f5456514434220e0002162838454b59514c40301d0900000000011323303a3d444444444444444444444444444444444444444444444444444444444444444444444444443632291b0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008131c31404c5b637785928070858e78634e39230e0000000000000000000000000000000000000000000009192f404f647a8c85705e4c37271501071a2d3d4d62778a8673604b39291600000000091e324557606b7884897e73646f847f6a6374808c8275655d4b37230e000003192e43586e838a75604b3543586e838a75604b35200b000003192e43586e838a75604b35200b000001142636434b5b6370857f6a543f2a15000000000000000000000004192e44596e838d78634d38230e000000000000000000000e1920233428261f140600000000000000000000000000000000152a3f556a7f947e69543d2d1a07000000000000000000000000010a151d201d150a000000000000000000000000000000000000000000000000000000000000000b1b293336444438352b1e0e000000000000000000000000000000000000000000000000000000000000000000000000011424323b3f413e3426160500000a1a283236443c3830221200000000000005131e25282f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f211e160b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013212f3d4a59627583958282907b66513b261100000000000000000000000000000000000000000000001222364a5c6d82917c665544311d0b0821364a5b6d82907b665544311b0b0000000003162839454b5b636f7c87867a6d81826c7986887c6d61574b3f2e1c08000001162b40566b808d77624d3840566b808d77624d38220d000001162b40566b808d77624d38220d0000081c304354606e797a82836e59442e19000000000000000000000004192e43596e838d78624d38230d0000000000000000000e1e2b3538493e3a312414020000000000000000000000000000000e24394e63798e846f5b4a362112010000000000000000000008141c27313631271a0c000000000000000000000000000000000000000000000000000000000000000b171e212f2f2220190e000000000000000000000000000000000000000000000000000000000000000000000000000006141f27292c29221608000000000a161e212f26241d120400000000000000010a10121a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a0c0a03000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003111f2d3b4857617381948a937e68533e29130000000000000000000000000000000000000000000000071b2d3e4d62788a8674604b392917182f404e63798c846f5e4c3726140000000000000a1b28323c494d5e66757f89827f827f8b8276665e4b46392e21110000000013283e53687d8f7a65503a3e53687d8f7a65503a251000000013283e53687d8f7a65503a251000000b20354b6073838e8e8a86715c47311c000000000000000000000002172c41576c818f7a644f3a250f000000000000000006192b3c494d5e534e42311f0b0000000000000000000000000000000c21364a5b70858b79634e41301f110300000000000000000918263038454b45382a1c0c00000000000000000000000000000000000000000000000000000000000000030a0c1a1a0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000030c121417140e0500000000000002090b1a110f090000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010f1d2b394655606c7f8d95806b56402b16010000000000000000000000000000000000000000000000102034485a6b80937e685746331e26364c5e6f848c79644e402f1909000000000000000a161e2c35404c56606a78818689867c6e61584c4033291b11030000000010263b50657b907d67523d3b50657b907d67523d281200000010263b50657b907d67523d2812000011263c51667c91a1a99d88725d48331d000000000000000000000000152a3f556a7f917c66513c271100000000000000000b2035495a627468604e3a2611000000000000000000000000000000071a2d3d50667b90836e5f4d3d2f1e160a0400000000050d192736434b566056473a2a1704000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1b2937444b61697c89826d58432e1803000000000000000000000000000000000000000000000005192b3c4c6176888876614b3b2b304354667b90826d5c4a36221200000000000000000008141c2d38454b5d6575808587867e73655d4c483b31271911030000000e23384e63788d7f6a553f384e63788d7f6a553f2a150000000e23384e63788d7f6a553f2a15000014293f54697e94a9b19b86715c46311c00000000000000000000000010253a4f657a8f816c56402f1808000000000000000d23384d6278897e68533e2813000000000000000000000000000000000f23384c5e7084917d675b4b3f32281f1714131315181f2b374454606d75615847331f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b192631434f5f67746d64533f2b16010000000000000000000000000000000000000000000000000d1e334657697e93806b594834394b6073868a78624d3e2d1a040000000000000000081826303d4a56606b7a87877a897c87867a6d62594b44372f21110000000b20364b60758a826d5742364b60758a826d57422d180000000b20364b60758a826d57422d18000010253a4f657b8f9f9f95806b56402b160000000000000000000000000b20354b60748987725e4c3625130000000000000011263b51667b907d67523d281200000000000000000000000000000000091c2f404d6278898a79655d4b453933292928282a2a343c48556072828876614c37210c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009141d32414d515f58534635231000000000000000000000000000000000000000000000000000031729394b6074868a77624d3d4657687d92806b594834200f000000000000000001142636434b5b6374808c8276738b79757f8982776960554c3f2f1c080000091d3245567388846f5a363245567388846f5a362513000000091d3245567388846f5a36251300000e22374b5d6a7f8a8a8376614c36210c000000000000000000000000081d3144556c82907b655443301c1308000000000a1b2e3f556a7f8f7a654f3a25100000000000000000000000000000000000112034485a657b8c897b6a60574c463a3e3d3e3f3b484c5a627382978676614c36210c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001142330393c49433f3528180600000000000000000000000000000000000000000000000000000b1d314455667c91826d5b4a4b6175888876614b3b2b19010000000000000000081c304354606a7986887c6d6172887c666a7783897f74655d4c38230e0000021528385b70858772544330385b708587725443301c070000021528385b708587725443301c0700081b2e3f50616a74766e615746331e0a000000000000000000000000011426374d62788a8572604a40302518131110121a28394b5d71868975604b36200b000000000000000000000000000000000005192b3c4b5d657c898c7f7569615856545353545659626b7884978778625746331e0a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004121d2427342e2b23180a000000000000000000000000000000000000000000000000000000011527374c5e70858c79634e596a80937e685746331d0d0000000000000000000b20354b60737f8b8377665e5b70857e6959626d7b86867b65503b2610000000182e43586d838a75604a3543586d838a75604a35200b000000182e43586d838a75604a35200b00001021334350556060564c463929170300000000000000000000000000092035485a6b81947f6a5f4a43362f282625272e384557657b8f826d5544311d080000000000000000000000000000000000000d1d2f3f4c5d65798693887e76706c6968686a6c71778089948578625a4839291703000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a10121f181610060000000000000000000000000000000000000000000000000000000000091930404f647a8c846f5e62778a8673604b392917000000000000000000000b20354b6074847d6e62594d586d82816c564d5d65737e826e58432e19000000162b40556b808c77624c3740556b808c77624c37220d000000162b40556b808c77624c37220d00000315253337444b4b453833291b0b000000000000000000000000000005192b3c4b6074858d7d6960544c3f3d3c3a3c3e4b566075868b78634d372715020000000000000000000000000000000000000011212f3f4c5b63737e88928a85817e7d7d7f81868b94897f746259483c2b1b0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001222364a5c6d82907b666d82907c665544311b0b00000000000000000000081d314455606f68604c473b556b80836e593f4b5560696e6453402b1600000011263b51667c8479634d383b51667c8479634d38230e00000011263b51667c8479634d38230e0000000715192631353632281e170b000000000000000000000000000000000e1d3145566277878d7f72655d5753515051545c647584947f6a5b4935190900000000000000000000000000000000000000000311212f3d49556068757d84898c8f9091908e8a857f776a6055483b2b1e0e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071b2d3e4d62788a8672798b846f5e4c372614000000000000000000000001152737444b5a534e42343e53687d86715c3937444b535853463623100000000f24384c5e666f635b4935384c5e666f635b4935210c0000000f24384c5e666f635b4935210c000000000009141d20211e160a03000000000000000000000000000000000002152738485962768493857b726c6866656769707a86948272604a3c2c190000000000000000000000000000000000000000000003111f2c37444b5760676e74777a7b7c7b7875706961584b44372b1d0e00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000102035485a6b80917c828c7a644f402f19090000000000000000000000000919273135453d3a31263b50657b897357463331353e434036281806000000091c2f404c515a4d493c2c2f404c515a4d493c2c1906000000091c2f404c515a4d493c2c190600000000000001080b0b090200000000000000000000000000000000000000000a1a2b3b485861737e889088817d7b7a7c7f858f8a7f6d605443301e0e0000000000000000000000000000000000000000000000010f19263139454b5254606265666665636056544c473a3127190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005192b3c4c617688858b826d5c4a362212000000000000000000000000000009151d202f28251e23384e63788b76614b362120292e2b23180a000000000012222f383b4438352c1e222f383b4438352c1e0e000000000012222f383b4438352c1e0e000000000000000000000000000000000000000000000000000000000000000000000d1d2b3a47556069757e84898d8f8f8f8d88817769614a43362513000000000000000000000000000000000000000000000000000009141d28323636434a4d4f5151504e4b453837332a1d1509000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1f334658697e938a78624d3e2d1b0400000000000000000000000000000001080b1a13110b21364b60748478624d38220d141916100600000000000004121c24262f2321190e121c24262f2321190e00000000000004121c24262f2321190e0000000000000000000000000000000000000000000000000000000000000000000000000d1c2a37444b5761686f75787a7b7a78726c62594f4330251808000000000000000000000000000000000000000000000000000000010a161e21253035373a3b3c3b39363228211f170c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000417293a4b6073837e695a4834201000000000000000000000000000000000000000050000091e324556606f625a4834200b00030200000000000000000000090f111a0e0c060000090f111a0e0c06000000000000000000090f111a0e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000c19273139464b53566063656665635a564d483b321c130800000000000000000000000000000000000000000000000000000000000003090b131c20222526272623201d150c0a0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b1d314455606e69604f3c2b19020000000000000000000000000000000000000000000002162838454b5a4d483c2b190500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d28323638454b4d4f514f4d493c37342b1d15000000000000000000000000000000000000000000000000000000000000000000000000070b0d101111100e0b0902000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002152737444b58544f42321d0d0000000000000000000000000000000000000000000000000a1a2832364438342b1d0d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010b161e21283236383a3c3a38352c2220180d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000919273136433e3b32241400000000000000000000000000000000000000000000000000000a161e212f2220190d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003090c151d20232526252320190e0b05000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009151d202e29271f140600000000000000000000000000000000000000000000000000000002090b1a0d0b0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002090b0e1011100e0c0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080b1914120c0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_StreamData: + offset: 0 + size: 0 + path: +--- !u!21 &-1424214985875825855 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lato-ThinItalic SDF Material + m_Shader: {fileID: 4800000, guid: 68e6db2ebdc24f95958faec2be5558d6, type: 3} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Cube: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FaceTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: -4421300039095632540} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OutlineTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _Ambient: 0.5 + - _Bevel: 0.5 + - _BevelClamp: 0 + - _BevelOffset: 0 + - _BevelRoundness: 0 + - _BevelWidth: 0 + - _BumpFace: 0 + - _BumpOutline: 0 + - _ColorMask: 15 + - _Diffuse: 0.5 + - _FaceDilate: 0 + - _FaceUVSpeedX: 0 + - _FaceUVSpeedY: 0 + - _GlowInner: 0.05 + - _GlowOffset: 0 + - _GlowOuter: 0.05 + - _GlowPower: 0.75 + - _GradientScale: 6 + - _LightAngle: 3.1416 + - _MaskSoftnessX: 0 + - _MaskSoftnessY: 0 + - _OutlineSoftness: 0 + - _OutlineUVSpeedX: 0 + - _OutlineUVSpeedY: 0 + - _OutlineWidth: 0 + - _PerspectiveFilter: 0.875 + - _Reflectivity: 10 + - _ScaleRatioA: 1 + - _ScaleRatioB: 1 + - _ScaleRatioC: 1 + - _ScaleX: 1 + - _ScaleY: 1 + - _ShaderFlags: 0 + - _Sharpness: 0 + - _SpecularPower: 2 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _TextureHeight: 512 + - _TextureWidth: 512 + - _UnderlayDilate: 0 + - _UnderlayOffsetX: 0 + - _UnderlayOffsetY: 0 + - _UnderlaySoftness: 0 + - _VertexOffsetX: 0 + - _VertexOffsetY: 0 + - _WeightBold: 0.75 + - _WeightNormal: 0 + m_Colors: + - _ClipRect: {r: -32767, g: -32767, b: 32767, a: 32767} + - _EnvMatrixRotation: {r: 0, g: 0, b: 0, a: 0} + - _FaceColor: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 0, g: 1, b: 0, a: 0.5} + - _MaskCoord: {r: 0, g: 0, b: 32767, a: 32767} + - _OutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectFaceColor: {r: 0, g: 0, b: 0, a: 1} + - _ReflectOutlineColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _UnderlayColor: {r: 0, g: 0, b: 0, a: 0.5} +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04, type: 3} + m_Name: Lato-ThinItalic SDF + m_EditorClassIdentifier: + hashCode: 0 + material: {fileID: -1424214985875825855} + materialHashCode: 0 + m_Version: 1.1.0 + m_SourceFontFileGUID: 098f0fe8d1720804fa6b4f89842e44e2 + m_SourceFontFile_EditorRef: {fileID: 0} + m_SourceFontFile: {fileID: 0} + m_AtlasPopulationMode: 0 + m_FaceInfo: + m_FamilyName: Lato + m_StyleName: Thin Italic + m_PointSize: 75 + m_Scale: 1 + m_LineHeight: 90 + m_AscentLine: 74.025 + m_CapLine: 53 + m_MeanLine: 37 + m_Baseline: 0 + m_DescentLine: -15.975 + m_SuperscriptOffset: 74.025 + m_SuperscriptSize: 0.5 + m_SubscriptOffset: -15.975 + m_SubscriptSize: 0.5 + m_UnderlineOffset: -19.125 + m_UnderlineThickness: 1.35 + m_StrikethroughOffset: 14.8 + m_StrikethroughThickness: 1.35 + m_TabWidth: 20 + m_GlyphTable: + - m_Index: 2 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 19.609375 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 3 + m_Metrics: + m_Width: 42.109375 + m_Height: 52.71875 + m_HorizontalBearingX: -1.421875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 44.78125 + m_GlyphRect: + m_X: 231 + m_Y: 435 + m_Width: 43 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 6 + m_Metrics: + m_Width: 33.890625 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 43.53125 + m_GlyphRect: + m_X: 433 + m_Y: 119 + m_Width: 35 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 7 + m_Metrics: + m_Width: 41.921875 + m_Height: 53.921875 + m_HorizontalBearingX: 4.84375 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 47.359375 + m_GlyphRect: + m_X: 120 + m_Y: 384 + m_Width: 43 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 9 + m_Metrics: + m_Width: 43.828125 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 52.953125 + m_GlyphRect: + m_X: 255 + m_Y: 71 + m_Width: 44 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 11 + m_Metrics: + m_Width: 35.171875 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 40.5 + m_GlyphRect: + m_X: 310 + m_Y: 70 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 13 + m_Metrics: + m_Width: 35.171875 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 39.640625 + m_GlyphRect: + m_X: 340 + m_Y: 6 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 14 + m_Metrics: + m_Width: 43.34375 + m_Height: 53.921875 + m_HorizontalBearingX: 4.875 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 51.40625 + m_GlyphRect: + m_X: 97 + m_Y: 318 + m_Width: 45 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 15 + m_Metrics: + m_Width: 42.96875 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 52.28125 + m_GlyphRect: + m_X: 285 + m_Y: 6 + m_Width: 44 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 17 + m_Metrics: + m_Width: 8.515625 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 17.8125 + m_GlyphRect: + m_X: 333 + m_Y: 134 + m_Width: 9 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 19 + m_Metrics: + m_Width: 26.703125 + m_Height: 53.359375 + m_HorizontalBearingX: -1.421875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 28.90625 + m_GlyphRect: + m_X: 246 + m_Y: 6 + m_Width: 28 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 20 + m_Metrics: + m_Width: 39.453125 + m_Height: 52.796875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.796875 + m_HorizontalAdvance: 43.125 + m_GlyphRect: + m_X: 328 + m_Y: 370 + m_Width: 40 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 21 + m_Metrics: + m_Width: 26.25 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 34.65625 + m_GlyphRect: + m_X: 479 + m_Y: 167 + m_Width: 27 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 24 + m_Metrics: + m_Width: 53.171875 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 62.46875 + m_GlyphRect: + m_X: 217 + m_Y: 242 + m_Width: 54 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 25 + m_Metrics: + m_Width: 42.96875 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 52.28125 + m_GlyphRect: + m_X: 219 + m_Y: 371 + m_Width: 44 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 27 + m_Metrics: + m_Width: 46.15625 + m_Height: 53.859375 + m_HorizontalBearingX: 4.875 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 54.90625 + m_GlyphRect: + m_X: 61 + m_Y: 394 + m_Width: 48 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 30 + m_Metrics: + m_Width: 33.21875 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 39.53125 + m_GlyphRect: + m_X: 386 + m_Y: 152 + m_Width: 34 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 32 + m_Metrics: + m_Width: 46.15625 + m_Height: 65.359375 + m_HorizontalBearingX: 4.875 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 54.90625 + m_GlyphRect: + m_X: 6 + m_Y: 171 + m_Width: 48 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 33 + m_Metrics: + m_Width: 32.890625 + m_Height: 52.71875 + m_HorizontalBearingX: 5.140625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 41.546875 + m_GlyphRect: + m_X: 431 + m_Y: 183 + m_Width: 34 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 34 + m_Metrics: + m_Width: 32.703125 + m_Height: 53.921875 + m_HorizontalBearingX: 1.609375 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 37.015625 + m_GlyphRect: + m_X: 186 + m_Y: 447 + m_Width: 34 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 36 + m_Metrics: + m_Width: 37.765625 + m_Height: 52.71875 + m_HorizontalBearingX: 4.34375 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 39.40625 + m_GlyphRect: + m_X: 336 + m_Y: 434 + m_Width: 39 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 38 + m_Metrics: + m_Width: 40.453125 + m_Height: 53.390625 + m_HorizontalBearingX: 6.453125 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 50.4375 + m_GlyphRect: + m_X: 148 + m_Y: 6 + m_Width: 41 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 40 + m_Metrics: + m_Width: 42.03125 + m_Height: 52.71875 + m_HorizontalBearingX: 4.953125 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 44.515625 + m_GlyphRect: + m_X: 274 + m_Y: 371 + m_Width: 43 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 41 + m_Metrics: + m_Width: 65.78125 + m_Height: 52.71875 + m_HorizontalBearingX: 5.625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 69.71875 + m_GlyphRect: + m_X: 200 + m_Y: 307 + m_Width: 67 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 42 + m_Metrics: + m_Width: 44.4375 + m_Height: 52.71875 + m_HorizontalBearingX: -1.46875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 42.71875 + m_GlyphRect: + m_X: 229 + m_Y: 136 + m_Width: 45 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 43 + m_Metrics: + m_Width: 38.09375 + m_Height: 52.71875 + m_HorizontalBearingX: 4.765625 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 40.203125 + m_GlyphRect: + m_X: 282 + m_Y: 200 + m_Width: 39 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 44 + m_Metrics: + m_Width: 42.0625 + m_Height: 52.71875 + m_HorizontalBearingX: -0.21875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 40.90625 + m_GlyphRect: + m_X: 278 + m_Y: 306 + m_Width: 43 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 45 + m_Metrics: + m_Width: 29.578125 + m_Height: 37.875 + m_HorizontalBearingX: 2.890625 + m_HorizontalBearingY: 37.421875 + m_HorizontalAdvance: 36.90625 + m_GlyphRect: + m_X: 429 + m_Y: 373 + m_Width: 31 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 48 + m_Metrics: + m_Width: 30.71875 + m_Height: 54.671875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 54.21875 + m_HorizontalAdvance: 38.171875 + m_GlyphRect: + m_X: 84 + m_Y: 6 + m_Width: 32 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 49 + m_Metrics: + m_Width: 27.96875 + m_Height: 38.03125 + m_HorizontalBearingX: 3.1875 + m_HorizontalBearingY: 37.578125 + m_HorizontalAdvance: 34.203125 + m_GlyphRect: + m_X: 428 + m_Y: 423 + m_Width: 29 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 55 + m_Metrics: + m_Width: 32.890625 + m_Height: 54.671875 + m_HorizontalBearingX: 3.03125 + m_HorizontalBearingY: 54.21875 + m_HorizontalAdvance: 38.21875 + m_GlyphRect: + m_X: 82 + m_Y: 84 + m_Width: 33 + m_Height: 56 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 59 + m_Metrics: + m_Width: 27.71875 + m_Height: 37.953125 + m_HorizontalBearingX: 3.1875 + m_HorizontalBearingY: 37.5 + m_HorizontalAdvance: 34.765625 + m_GlyphRect: + m_X: 386 + m_Y: 424 + m_Width: 28 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 61 + m_Metrics: + m_Width: 21.828125 + m_Height: 62.6875 + m_HorizontalBearingX: 3.5625 + m_HorizontalBearingY: 53.28125 + m_HorizontalAdvance: 22.609375 + m_GlyphRect: + m_X: 36 + m_Y: 249 + m_Width: 23 + m_Height: 64 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 93 + m_Metrics: + m_Width: 35.484375 + m_Height: 51.53125 + m_HorizontalBearingX: -1.578125 + m_HorizontalBearingY: 37.5 + m_HorizontalAdvance: 33.78125 + m_GlyphRect: + m_X: 435 + m_Y: 55 + m_Width: 36 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 95 + m_Metrics: + m_Width: 29.296875 + m_Height: 54.21875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 54.21875 + m_HorizontalAdvance: 38.140625 + m_GlyphRect: + m_X: 154 + m_Y: 248 + m_Width: 30 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 98 + m_Metrics: + m_Width: 9.25 + m_Height: 52.90625 + m_HorizontalBearingX: 3.90625 + m_HorizontalBearingY: 52.90625 + m_HorizontalAdvance: 15.1875 + m_GlyphRect: + m_X: 357 + m_Y: 70 + m_Width: 11 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 102 + m_Metrics: + m_Width: 19.609375 + m_Height: 66.859375 + m_HorizontalBearingX: -6.296875 + m_HorizontalBearingY: 52.90625 + m_HorizontalAdvance: 15.15625 + m_GlyphRect: + m_X: 19 + m_Y: 89 + m_Width: 21 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 104 + m_Metrics: + m_Width: 27.890625 + m_Height: 54.21875 + m_HorizontalBearingX: 3.453125 + m_HorizontalBearingY: 54.21875 + m_HorizontalAdvance: 31.953125 + m_GlyphRect: + m_X: 126 + m_Y: 73 + m_Width: 29 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 108 + m_Metrics: + m_Width: 49.390625 + m_Height: 37.5 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 37.5 + m_HorizontalAdvance: 58.234375 + m_GlyphRect: + m_X: 387 + m_Y: 6 + m_Width: 50 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 109 + m_Metrics: + m_Width: 29.359375 + m_Height: 37.5 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 37.5 + m_HorizontalAdvance: 38.171875 + m_GlyphRect: + m_X: 476 + m_Y: 231 + m_Width: 30 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 111 + m_Metrics: + m_Width: 30.75 + m_Height: 37.953125 + m_HorizontalBearingX: 3.296875 + m_HorizontalBearingY: 37.5 + m_HorizontalAdvance: 38.28125 + m_GlyphRect: + m_X: 473 + m_Y: 343 + m_Width: 32 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 114 + m_Metrics: + m_Width: 32.390625 + m_Height: 50.890625 + m_HorizontalBearingX: 1.84375 + m_HorizontalBearingY: 37.5 + m_HorizontalAdvance: 38.21875 + m_GlyphRect: + m_X: 386 + m_Y: 216 + m_Width: 34 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 116 + m_Metrics: + m_Width: 29.578125 + m_Height: 50.8125 + m_HorizontalBearingX: 2.890625 + m_HorizontalBearingY: 37.421875 + m_HorizontalAdvance: 36.96875 + m_GlyphRect: + m_X: 475 + m_Y: 280 + m_Width: 31 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 117 + m_Metrics: + m_Width: 21.15625 + m_Height: 37.71875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 37.71875 + m_HorizontalAdvance: 24.109375 + m_GlyphRect: + m_X: 482 + m_Y: 55 + m_Width: 22 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 118 + m_Metrics: + m_Width: 25.203125 + m_Height: 38.09375 + m_HorizontalBearingX: 1.125 + m_HorizontalBearingY: 37.5 + m_HorizontalAdvance: 29.25 + m_GlyphRect: + m_X: 333 + m_Y: 198 + m_Width: 26 + m_Height: 39 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 124 + m_Metrics: + m_Width: 19.203125 + m_Height: 51.03125 + m_HorizontalBearingX: 3.40625 + m_HorizontalBearingY: 50.4375 + m_HorizontalAdvance: 25.046875 + m_GlyphRect: + m_X: 482 + m_Y: 104 + m_Width: 20 + m_Height: 52 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 134 + m_Metrics: + m_Width: 29.78125 + m_Height: 37.421875 + m_HorizontalBearingX: 3.9375 + m_HorizontalBearingY: 36.96875 + m_HorizontalAdvance: 38.171875 + m_GlyphRect: + m_X: 386 + m_Y: 375 + m_Width: 31 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 136 + m_Metrics: + m_Width: 30.828125 + m_Height: 36.96875 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 36.96875 + m_HorizontalAdvance: 34.15625 + m_GlyphRect: + m_X: 386 + m_Y: 327 + m_Width: 32 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 137 + m_Metrics: + m_Width: 47.921875 + m_Height: 37.15625 + m_HorizontalBearingX: 3.90625 + m_HorizontalBearingY: 37.15625 + m_HorizontalAdvance: 52.15625 + m_GlyphRect: + m_X: 448 + m_Y: 6 + m_Width: 49 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 138 + m_Metrics: + m_Width: 31.71875 + m_Height: 36.96875 + m_HorizontalBearingX: -1.234375 + m_HorizontalBearingY: 36.96875 + m_HorizontalAdvance: 31.609375 + m_GlyphRect: + m_X: 386 + m_Y: 279 + m_Width: 33 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 139 + m_Metrics: + m_Width: 30.875 + m_Height: 50.359375 + m_HorizontalBearingX: 3.59375 + m_HorizontalBearingY: 36.96875 + m_HorizontalAdvance: 34.234375 + m_GlyphRect: + m_X: 430 + m_Y: 311 + m_Width: 32 + m_Height: 51 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 140 + m_Metrics: + m_Width: 30 + m_Height: 36.96875 + m_HorizontalBearingX: -0.21875 + m_HorizontalBearingY: 36.96875 + m_HorizontalAdvance: 30.59375 + m_GlyphRect: + m_X: 471 + m_Y: 393 + m_Width: 31 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 170 + m_Metrics: + m_Width: 7.953125 + m_Height: 9.859375 + m_HorizontalBearingX: 13.796875 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 27.59375 + m_GlyphRect: + m_X: 105 + m_Y: 460 + m_Width: 9 + m_Height: 11 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 307 + m_Metrics: + m_Width: 9.5625 + m_Height: 53.3125 + m_HorizontalBearingX: 3.59375 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 17.171875 + m_GlyphRect: + m_X: 195 + m_Y: 242 + m_Width: 11 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 308 + m_Metrics: + m_Width: 21.640625 + m_Height: 53.921875 + m_HorizontalBearingX: 6.484375 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 29.734375 + m_GlyphRect: + m_X: 152 + m_Y: 164 + m_Width: 23 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 310 + m_Metrics: + m_Width: 5.390625 + m_Height: 14.25 + m_HorizontalBearingX: 2.515625 + m_HorizontalBearingY: 5.09375 + m_HorizontalAdvance: 15.453125 + m_GlyphRect: + m_X: 116 + m_Y: 482 + m_Width: 6 + m_Height: 16 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 311 + m_Metrics: + m_Width: 9.515625 + m_Height: 45.25 + m_HorizontalBearingX: 3.515625 + m_HorizontalBearingY: 36.09375 + m_HorizontalAdvance: 17.96875 + m_GlyphRect: + m_X: 332 + m_Y: 311 + m_Width: 11 + m_Height: 47 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 312 + m_Metrics: + m_Width: 5.6875 + m_Height: 5.6875 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 5.09375 + m_HorizontalAdvance: 17.03125 + m_GlyphRect: + m_X: 161 + m_Y: 230 + m_Width: 7 + m_Height: 7 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 313 + m_Metrics: + m_Width: 41.546875 + m_Height: 5.6875 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 5.09375 + m_HorizontalAdvance: 52.90625 + m_GlyphRect: + m_X: 108 + m_Y: 230 + m_Width: 42 + m_Height: 7 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 324 + m_Metrics: + m_Width: 30.78125 + m_Height: 57.078125 + m_HorizontalBearingX: -0.109375 + m_HorizontalBearingY: 54.078125 + m_HorizontalAdvance: 29.78125 + m_GlyphRect: + m_X: 65 + m_Y: 167 + m_Width: 32 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 325 + m_Metrics: + m_Width: 1.578125 + m_Height: 69.9375 + m_HorizontalBearingX: 8.0625 + m_HorizontalBearingY: 56.546875 + m_HorizontalAdvance: 17.84375 + m_GlyphRect: + m_X: 6 + m_Y: 89 + m_Width: 2 + m_Height: 71 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 327 + m_Metrics: + m_Width: 16.765625 + m_Height: 57.078125 + m_HorizontalBearingX: 6.75 + m_HorizontalBearingY: 54.078125 + m_HorizontalAdvance: 29.46875 + m_GlyphRect: + m_X: 70 + m_Y: 249 + m_Width: 18 + m_Height: 58 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 328 + m_Metrics: + m_Width: 15.796875 + m_Height: 1.65625 + m_HorizontalBearingX: 5.46875 + m_HorizontalBearingY: 22.953125 + m_HorizontalAdvance: 26.890625 + m_GlyphRect: + m_X: 82 + m_Y: 151 + m_Width: 17 + m_Height: 2 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 331 + m_Metrics: + m_Width: 27.375 + m_Height: 1.453125 + m_HorizontalBearingX: -0.9375 + m_HorizontalBearingY: -8.515625 + m_HorizontalAdvance: 33.21875 + m_GlyphRect: + m_X: 65 + m_Y: 236 + m_Width: 28 + m_Height: 2 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 334 + m_Metrics: + m_Width: 15.1875 + m_Height: 66.046875 + m_HorizontalBearingX: 4.390625 + m_HorizontalBearingY: 56.703125 + m_HorizontalAdvance: 18.265625 + m_GlyphRect: + m_X: 34 + m_Y: 405 + m_Width: 16 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 335 + m_Metrics: + m_Width: 15.296875 + m_Height: 66.046875 + m_HorizontalBearingX: -1.125 + m_HorizontalBearingY: 56.703125 + m_HorizontalAdvance: 18.265625 + m_GlyphRect: + m_X: 6 + m_Y: 405 + m_Width: 17 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 336 + m_Metrics: + m_Width: 18.1875 + m_Height: 65.921875 + m_HorizontalBearingX: 3.828125 + m_HorizontalBearingY: 56.546875 + m_HorizontalAdvance: 20.59375 + m_GlyphRect: + m_X: 51 + m_Y: 89 + m_Width: 20 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 337 + m_Metrics: + m_Width: 18.234375 + m_Height: 65.921875 + m_HorizontalBearingX: -1.09375 + m_HorizontalBearingY: 56.546875 + m_HorizontalAdvance: 20.703125 + m_GlyphRect: + m_X: 53 + m_Y: 6 + m_Width: 20 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 338 + m_Metrics: + m_Width: 18.375 + m_Height: 65.921875 + m_HorizontalBearingX: 3.40625 + m_HorizontalBearingY: 56.546875 + m_HorizontalAdvance: 20.515625 + m_GlyphRect: + m_X: 6 + m_Y: 249 + m_Width: 19 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 339 + m_Metrics: + m_Width: 18.4375 + m_Height: 65.921875 + m_HorizontalBearingX: -0.96875 + m_HorizontalBearingY: 56.546875 + m_HorizontalAdvance: 20.59375 + m_GlyphRect: + m_X: 6 + m_Y: 327 + m_Width: 19 + m_Height: 67 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 340 + m_Metrics: + m_Width: 19.234375 + m_Height: 21.40625 + m_HorizontalBearingX: 7.6875 + m_HorizontalBearingY: 55.71875 + m_HorizontalAdvance: 29.46875 + m_GlyphRect: + m_X: 44 + m_Y: 483 + m_Width: 20 + m_Height: 22 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 345 + m_Metrics: + m_Width: 26.0625 + m_Height: 22.453125 + m_HorizontalBearingX: 10.796875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 6 + m_Y: 483 + m_Width: 27 + m_Height: 23 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 346 + m_Metrics: + m_Width: 32.109375 + m_Height: 10.875 + m_HorizontalBearingX: 5.734375 + m_HorizontalBearingY: 27.5625 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 61 + m_Y: 460 + m_Width: 33 + m_Height: 12 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 347 + m_Metrics: + m_Width: 3.53125 + m_Height: 17.390625 + m_HorizontalBearingX: 7.71875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 13.5 + m_GlyphRect: + m_X: 100 + m_Y: 483 + m_Width: 5 + m_Height: 18 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 348 + m_Metrics: + m_Width: 12.53125 + m_Height: 17.390625 + m_HorizontalBearingX: 7.71875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 22.765625 + m_GlyphRect: + m_X: 75 + m_Y: 483 + m_Width: 14 + m_Height: 18 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 349 + m_Metrics: + m_Width: 40.9375 + m_Height: 53.921875 + m_HorizontalBearingX: 2.96875 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 47.734375 + m_GlyphRect: + m_X: 133 + m_Y: 450 + m_Width: 42 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 350 + m_Metrics: + m_Width: 49.6875 + m_Height: 58.203125 + m_HorizontalBearingX: 4.09375 + m_HorizontalBearingY: 49.3125 + m_HorizontalAdvance: 57.15625 + m_GlyphRect: + m_X: 36 + m_Y: 324 + m_Width: 50 + m_Height: 59 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 360 + m_Metrics: + m_Width: 35.09375 + m_Height: 70.875 + m_HorizontalBearingX: 3.640625 + m_HorizontalBearingY: 60.828125 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 6 + m_Y: 6 + m_Width: 36 + m_Height: 72 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 368 + m_Metrics: + m_Width: 38.703125 + m_Height: 52.71875 + m_HorizontalBearingX: 2.921875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 285 + m_Y: 435 + m_Width: 40 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 397 + m_Metrics: + m_Width: 35.4375 + m_Height: 53.859375 + m_HorizontalBearingX: 4.5 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 153 + m_Y: 315 + m_Width: 36 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 398 + m_Metrics: + m_Width: 24.75 + m_Height: 52.984375 + m_HorizontalBearingX: 8.734375 + m_HorizontalBearingY: 52.984375 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 468 + m_Y: 441 + m_Width: 26 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 399 + m_Metrics: + m_Width: 34.546875 + m_Height: 53.328125 + m_HorizontalBearingX: 3.484375 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 166 + m_Y: 71 + m_Width: 36 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 400 + m_Metrics: + m_Width: 33.046875 + m_Height: 53.921875 + m_HorizontalBearingX: 4.71875 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 174 + m_Y: 381 + m_Width: 34 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 401 + m_Metrics: + m_Width: 36 + m_Height: 52.796875 + m_HorizontalBearingX: 2.890625 + m_HorizontalBearingY: 52.796875 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 285 + m_Y: 135 + m_Width: 37 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 402 + m_Metrics: + m_Width: 33.421875 + m_Height: 53.3125 + m_HorizontalBearingX: 4.796875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 200 + m_Y: 6 + m_Width: 35 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 403 + m_Metrics: + m_Width: 32.546875 + m_Height: 52.71875 + m_HorizontalBearingX: 9.1875 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 431 + m_Y: 247 + m_Width: 33 + m_Height: 53 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 404 + m_Metrics: + m_Width: 29.65625 + m_Height: 53.328125 + m_HorizontalBearingX: 8.40625 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 213 + m_Y: 71 + m_Width: 31 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 433 + m_Metrics: + m_Width: 34.984375 + m_Height: 36.265625 + m_HorizontalBearingX: 4.609375 + m_HorizontalBearingY: 43.234375 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 386 + m_Y: 103 + m_Width: 36 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 437 + m_Metrics: + m_Width: 31.9375 + m_Height: 12.796875 + m_HorizontalBearingX: 5.96875 + m_HorizontalBearingY: 31.765625 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 126 + m_Y: 139 + m_Width: 33 + m_Height: 14 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 440 + m_Metrics: + m_Width: 29.515625 + m_Height: 29.21875 + m_HorizontalBearingX: 7.046875 + m_HorizontalBearingY: 39.75 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 228 + m_Y: 201 + m_Width: 30 + m_Height: 30 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 441 + m_Metrics: + m_Width: 29.546875 + m_Height: 29.21875 + m_HorizontalBearingX: 7.46875 + m_HorizontalBearingY: 39.75 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 186 + m_Y: 201 + m_Width: 31 + m_Height: 30 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1138 + m_Metrics: + m_Width: 8.4375 + m_Height: 54.21875 + m_HorizontalBearingX: 3.90625 + m_HorizontalBearingY: 54.21875 + m_HorizontalAdvance: 15.03125 + m_GlyphRect: + m_X: 127 + m_Y: 6 + m_Width: 10 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1139 + m_Metrics: + m_Width: 30.75 + m_Height: 53.3125 + m_HorizontalBearingX: 5.84375 + m_HorizontalBearingY: 52.71875 + m_HorizontalAdvance: 40.015625 + m_GlyphRect: + m_X: 186 + m_Y: 136 + m_Width: 32 + m_Height: 54 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1140 + m_Metrics: + m_Width: 32.65625 + m_Height: 53.921875 + m_HorizontalBearingX: 5.0625 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 43.5 + m_GlyphRect: + m_X: 108 + m_Y: 164 + m_Width: 33 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1141 + m_Metrics: + m_Width: 43.203125 + m_Height: 53.921875 + m_HorizontalBearingX: 5.4375 + m_HorizontalBearingY: 53.328125 + m_HorizontalAdvance: 53.40625 + m_GlyphRect: + m_X: 99 + m_Y: 249 + m_Width: 44 + m_Height: 55 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1328 + m_Metrics: + m_Width: 0 + m_Height: 0 + m_HorizontalBearingX: 0 + m_HorizontalBearingY: 0 + m_HorizontalAdvance: 0 + m_GlyphRect: + m_X: 0 + m_Y: 0 + m_Width: 0 + m_Height: 0 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1401 + m_Metrics: + m_Width: 36.96875 + m_Height: 36.96875 + m_HorizontalBearingX: 4.015625 + m_HorizontalBearingY: 36.96875 + m_HorizontalAdvance: 45 + m_GlyphRect: + m_X: 387 + m_Y: 55 + m_Width: 37 + m_Height: 37 + m_Scale: 1 + m_AtlasIndex: 0 + - m_Index: 1579 + m_Metrics: + m_Width: 9.6875 + m_Height: 36.6875 + m_HorizontalBearingX: 3.34375 + m_HorizontalBearingY: 36.09375 + m_HorizontalAdvance: 17.25 + m_GlyphRect: + m_X: 354 + m_Y: 134 + m_Width: 11 + m_Height: 38 + m_Scale: 1 + m_AtlasIndex: 0 + m_CharacterTable: + - m_ElementType: 1 + m_Unicode: 32 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 33 + m_GlyphIndex: 307 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 34 + m_GlyphIndex: 348 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 35 + m_GlyphIndex: 368 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 36 + m_GlyphIndex: 360 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 37 + m_GlyphIndex: 1141 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 38 + m_GlyphIndex: 349 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 39 + m_GlyphIndex: 347 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 40 + m_GlyphIndex: 334 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 41 + m_GlyphIndex: 335 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 42 + m_GlyphIndex: 340 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 43 + m_GlyphIndex: 433 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 44 + m_GlyphIndex: 310 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 45 + m_GlyphIndex: 328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 46 + m_GlyphIndex: 312 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 47 + m_GlyphIndex: 324 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 48 + m_GlyphIndex: 397 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 49 + m_GlyphIndex: 398 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 50 + m_GlyphIndex: 399 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 51 + m_GlyphIndex: 400 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 52 + m_GlyphIndex: 401 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 53 + m_GlyphIndex: 402 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 54 + m_GlyphIndex: 1139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 55 + m_GlyphIndex: 403 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 56 + m_GlyphIndex: 1140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 57 + m_GlyphIndex: 404 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 58 + m_GlyphIndex: 1579 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 59 + m_GlyphIndex: 311 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 60 + m_GlyphIndex: 440 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 61 + m_GlyphIndex: 437 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 62 + m_GlyphIndex: 441 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 63 + m_GlyphIndex: 308 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 64 + m_GlyphIndex: 350 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 65 + m_GlyphIndex: 3 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 66 + m_GlyphIndex: 6 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 67 + m_GlyphIndex: 7 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 68 + m_GlyphIndex: 9 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 69 + m_GlyphIndex: 11 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 70 + m_GlyphIndex: 13 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 71 + m_GlyphIndex: 14 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 72 + m_GlyphIndex: 15 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 73 + m_GlyphIndex: 17 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 74 + m_GlyphIndex: 19 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 75 + m_GlyphIndex: 20 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 76 + m_GlyphIndex: 21 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 77 + m_GlyphIndex: 24 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 78 + m_GlyphIndex: 25 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 79 + m_GlyphIndex: 27 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 80 + m_GlyphIndex: 30 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 81 + m_GlyphIndex: 32 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 82 + m_GlyphIndex: 33 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 83 + m_GlyphIndex: 34 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 84 + m_GlyphIndex: 36 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 85 + m_GlyphIndex: 38 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 86 + m_GlyphIndex: 40 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 87 + m_GlyphIndex: 41 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 88 + m_GlyphIndex: 42 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 89 + m_GlyphIndex: 43 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 90 + m_GlyphIndex: 44 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 91 + m_GlyphIndex: 336 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 92 + m_GlyphIndex: 327 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 93 + m_GlyphIndex: 337 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 94 + m_GlyphIndex: 345 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 95 + m_GlyphIndex: 331 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 96 + m_GlyphIndex: 170 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 97 + m_GlyphIndex: 45 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 98 + m_GlyphIndex: 48 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 99 + m_GlyphIndex: 49 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 100 + m_GlyphIndex: 55 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 101 + m_GlyphIndex: 59 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 102 + m_GlyphIndex: 61 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 103 + m_GlyphIndex: 93 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 104 + m_GlyphIndex: 95 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 105 + m_GlyphIndex: 98 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 106 + m_GlyphIndex: 102 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 107 + m_GlyphIndex: 104 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 108 + m_GlyphIndex: 1138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 109 + m_GlyphIndex: 108 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 110 + m_GlyphIndex: 109 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 111 + m_GlyphIndex: 111 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 112 + m_GlyphIndex: 114 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 113 + m_GlyphIndex: 116 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 114 + m_GlyphIndex: 117 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 115 + m_GlyphIndex: 118 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 116 + m_GlyphIndex: 124 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 117 + m_GlyphIndex: 134 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 118 + m_GlyphIndex: 136 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 119 + m_GlyphIndex: 137 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 120 + m_GlyphIndex: 138 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 121 + m_GlyphIndex: 139 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 122 + m_GlyphIndex: 140 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 123 + m_GlyphIndex: 338 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 124 + m_GlyphIndex: 325 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 125 + m_GlyphIndex: 339 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 126 + m_GlyphIndex: 346 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 160 + m_GlyphIndex: 2 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8203 + m_GlyphIndex: 1328 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 8230 + m_GlyphIndex: 313 + m_Scale: 1 + - m_ElementType: 1 + m_Unicode: 9633 + m_GlyphIndex: 1401 + m_Scale: 1 + m_AtlasTextures: + - {fileID: -4421300039095632540} + m_AtlasTextureIndex: 0 + m_UsedGlyphRects: + - m_X: 0 + m_Y: 0 + m_Width: 47 + m_Height: 83 + - m_X: 0 + m_Y: 83 + m_Width: 13 + m_Height: 82 + - m_X: 0 + m_Y: 165 + m_Width: 59 + m_Height: 78 + - m_X: 13 + m_Y: 83 + m_Width: 32 + m_Height: 78 + - m_X: 45 + m_Y: 83 + m_Width: 31 + m_Height: 78 + - m_X: 47 + m_Y: 0 + m_Width: 31 + m_Height: 78 + - m_X: 0 + m_Y: 243 + m_Width: 30 + m_Height: 78 + - m_X: 0 + m_Y: 321 + m_Width: 30 + m_Height: 78 + - m_X: 0 + m_Y: 399 + m_Width: 28 + m_Height: 78 + - m_X: 0 + m_Y: 477 + m_Width: 38 + m_Height: 34 + - m_X: 28 + m_Y: 399 + m_Width: 27 + m_Height: 78 + - m_X: 38 + m_Y: 477 + m_Width: 31 + m_Height: 33 + - m_X: 30 + m_Y: 243 + m_Width: 34 + m_Height: 75 + - m_X: 30 + m_Y: 318 + m_Width: 61 + m_Height: 70 + - m_X: 59 + m_Y: 161 + m_Width: 43 + m_Height: 69 + - m_X: 59 + m_Y: 230 + m_Width: 39 + m_Height: 13 + - m_X: 64 + m_Y: 243 + m_Width: 29 + m_Height: 69 + - m_X: 76 + m_Y: 78 + m_Width: 44 + m_Height: 67 + - m_X: 76 + m_Y: 145 + m_Width: 28 + m_Height: 13 + - m_X: 78 + m_Y: 0 + m_Width: 43 + m_Height: 67 + - m_X: 55 + m_Y: 388 + m_Width: 59 + m_Height: 66 + - m_X: 55 + m_Y: 454 + m_Width: 44 + m_Height: 23 + - m_X: 69 + m_Y: 477 + m_Width: 25 + m_Height: 29 + - m_X: 94 + m_Y: 477 + m_Width: 16 + m_Height: 29 + - m_X: 99 + m_Y: 454 + m_Width: 20 + m_Height: 22 + - m_X: 110 + m_Y: 476 + m_Width: 17 + m_Height: 27 + - m_X: 91 + m_Y: 312 + m_Width: 56 + m_Height: 66 + - m_X: 93 + m_Y: 243 + m_Width: 55 + m_Height: 66 + - m_X: 114 + m_Y: 378 + m_Width: 54 + m_Height: 66 + - m_X: 127 + m_Y: 444 + m_Width: 53 + m_Height: 66 + - m_X: 147 + m_Y: 309 + m_Width: 47 + m_Height: 66 + - m_X: 168 + m_Y: 375 + m_Width: 45 + m_Height: 66 + - m_X: 180 + m_Y: 441 + m_Width: 45 + m_Height: 66 + - m_X: 102 + m_Y: 158 + m_Width: 44 + m_Height: 66 + - m_X: 102 + m_Y: 224 + m_Width: 53 + m_Height: 18 + - m_X: 148 + m_Y: 242 + m_Width: 41 + m_Height: 66 + - m_X: 120 + m_Y: 67 + m_Width: 40 + m_Height: 66 + - m_X: 120 + m_Y: 133 + m_Width: 44 + m_Height: 25 + - m_X: 146 + m_Y: 158 + m_Width: 34 + m_Height: 66 + - m_X: 155 + m_Y: 224 + m_Width: 18 + m_Height: 18 + - m_X: 121 + m_Y: 0 + m_Width: 21 + m_Height: 66 + - m_X: 142 + m_Y: 0 + m_Width: 52 + m_Height: 65 + - m_X: 160 + m_Y: 65 + m_Width: 47 + m_Height: 65 + - m_X: 194 + m_Y: 0 + m_Width: 46 + m_Height: 65 + - m_X: 180 + m_Y: 130 + m_Width: 43 + m_Height: 65 + - m_X: 207 + m_Y: 65 + m_Width: 42 + m_Height: 65 + - m_X: 240 + m_Y: 0 + m_Width: 39 + m_Height: 65 + - m_X: 180 + m_Y: 195 + m_Width: 42 + m_Height: 41 + - m_X: 189 + m_Y: 236 + m_Width: 22 + m_Height: 65 + - m_X: 194 + m_Y: 301 + m_Width: 78 + m_Height: 64 + - m_X: 211 + m_Y: 236 + m_Width: 65 + m_Height: 64 + - m_X: 222 + m_Y: 195 + m_Width: 41 + m_Height: 41 + - m_X: 223 + m_Y: 130 + m_Width: 56 + m_Height: 64 + - m_X: 249 + m_Y: 65 + m_Width: 55 + m_Height: 64 + - m_X: 279 + m_Y: 0 + m_Width: 55 + m_Height: 64 + - m_X: 213 + m_Y: 365 + m_Width: 55 + m_Height: 64 + - m_X: 225 + m_Y: 429 + m_Width: 54 + m_Height: 64 + - m_X: 268 + m_Y: 365 + m_Width: 54 + m_Height: 64 + - m_X: 272 + m_Y: 300 + m_Width: 54 + m_Height: 64 + - m_X: 279 + m_Y: 429 + m_Width: 51 + m_Height: 64 + - m_X: 322 + m_Y: 364 + m_Width: 51 + m_Height: 64 + - m_X: 330 + m_Y: 428 + m_Width: 50 + m_Height: 64 + - m_X: 276 + m_Y: 194 + m_Width: 50 + m_Height: 64 + - m_X: 279 + m_Y: 129 + m_Width: 48 + m_Height: 64 + - m_X: 304 + m_Y: 64 + m_Width: 47 + m_Height: 64 + - m_X: 334 + m_Y: 0 + m_Width: 47 + m_Height: 64 + - m_X: 381 + m_Y: 0 + m_Width: 61 + m_Height: 49 + - m_X: 442 + m_Y: 0 + m_Width: 60 + m_Height: 49 + - m_X: 381 + m_Y: 49 + m_Width: 48 + m_Height: 48 + - m_X: 351 + m_Y: 64 + m_Width: 22 + m_Height: 64 + - m_X: 429 + m_Y: 49 + m_Width: 47 + m_Height: 64 + - m_X: 380 + m_Y: 97 + m_Width: 47 + m_Height: 49 + - m_X: 476 + m_Y: 49 + m_Width: 33 + m_Height: 49 + - m_X: 476 + m_Y: 98 + m_Width: 31 + m_Height: 63 + - m_X: 427 + m_Y: 113 + m_Width: 46 + m_Height: 64 + - m_X: 473 + m_Y: 161 + m_Width: 38 + m_Height: 64 + - m_X: 380 + m_Y: 146 + m_Width: 45 + m_Height: 64 + - m_X: 425 + m_Y: 177 + m_Width: 45 + m_Height: 64 + - m_X: 470 + m_Y: 225 + m_Width: 41 + m_Height: 49 + - m_X: 380 + m_Y: 210 + m_Width: 45 + m_Height: 63 + - m_X: 425 + m_Y: 241 + m_Width: 44 + m_Height: 64 + - m_X: 469 + m_Y: 274 + m_Width: 42 + m_Height: 63 + - m_X: 326 + m_Y: 305 + m_Width: 22 + m_Height: 58 + - m_X: 380 + m_Y: 273 + m_Width: 44 + m_Height: 48 + - m_X: 424 + m_Y: 305 + m_Width: 43 + m_Height: 62 + - m_X: 467 + m_Y: 337 + m_Width: 43 + m_Height: 50 + - m_X: 380 + m_Y: 321 + m_Width: 43 + m_Height: 48 + - m_X: 423 + m_Y: 367 + m_Width: 42 + m_Height: 50 + - m_X: 380 + m_Y: 369 + m_Width: 42 + m_Height: 49 + - m_X: 465 + m_Y: 387 + m_Width: 42 + m_Height: 48 + - m_X: 422 + m_Y: 417 + m_Width: 40 + m_Height: 50 + - m_X: 380 + m_Y: 418 + m_Width: 39 + m_Height: 50 + - m_X: 348 + m_Y: 128 + m_Width: 22 + m_Height: 49 + - m_X: 327 + m_Y: 128 + m_Width: 20 + m_Height: 64 + - m_X: 462 + m_Y: 435 + m_Width: 37 + m_Height: 64 + - m_X: 327 + m_Y: 192 + m_Width: 37 + m_Height: 50 + m_FreeGlyphRects: + - m_X: 38 + m_Y: 510 + m_Width: 473 + m_Height: 1 + - m_X: 13 + m_Y: 161 + m_Width: 46 + m_Height: 4 + - m_X: 47 + m_Y: 78 + m_Width: 29 + m_Height: 5 + - m_X: 30 + m_Y: 388 + m_Width: 25 + m_Height: 11 + - m_X: 99 + m_Y: 476 + m_Width: 11 + m_Height: 1 + - m_X: 64 + m_Y: 312 + m_Width: 27 + m_Height: 6 + - m_X: 91 + m_Y: 378 + m_Width: 23 + m_Height: 10 + - m_X: 69 + m_Y: 506 + m_Width: 58 + m_Height: 5 + - m_X: 110 + m_Y: 503 + m_Width: 17 + m_Height: 8 + - m_X: 114 + m_Y: 444 + m_Width: 13 + m_Height: 10 + - m_X: 119 + m_Y: 444 + m_Width: 8 + m_Height: 32 + - m_X: 93 + m_Y: 309 + m_Width: 54 + m_Height: 3 + - m_X: 147 + m_Y: 375 + m_Width: 21 + m_Height: 3 + - m_X: 168 + m_Y: 441 + m_Width: 12 + m_Height: 3 + - m_X: 180 + m_Y: 507 + m_Width: 331 + m_Height: 4 + - m_X: 76 + m_Y: 158 + m_Width: 26 + m_Height: 3 + - m_X: 98 + m_Y: 230 + m_Width: 4 + m_Height: 13 + - m_X: 98 + m_Y: 242 + m_Width: 50 + m_Height: 1 + - m_X: 78 + m_Y: 67 + m_Width: 42 + m_Height: 11 + - m_X: 104 + m_Y: 145 + m_Width: 16 + m_Height: 13 + - m_X: 121 + m_Y: 66 + m_Width: 39 + m_Height: 1 + - m_X: 142 + m_Y: 65 + m_Width: 18 + m_Height: 2 + - m_X: 160 + m_Y: 130 + m_Width: 20 + m_Height: 3 + - m_X: 164 + m_Y: 130 + m_Width: 16 + m_Height: 28 + - m_X: 173 + m_Y: 224 + m_Width: 7 + m_Height: 18 + - m_X: 173 + m_Y: 236 + m_Width: 16 + m_Height: 6 + - m_X: 148 + m_Y: 308 + m_Width: 46 + m_Height: 1 + - m_X: 189 + m_Y: 301 + m_Width: 5 + m_Height: 8 + - m_X: 194 + m_Y: 365 + m_Width: 19 + m_Height: 10 + - m_X: 213 + m_Y: 429 + m_Width: 12 + m_Height: 12 + - m_X: 211 + m_Y: 300 + m_Width: 61 + m_Height: 1 + - m_X: 272 + m_Y: 364 + m_Width: 50 + m_Height: 1 + - m_X: 322 + m_Y: 428 + m_Width: 8 + m_Height: 1 + - m_X: 223 + m_Y: 194 + m_Width: 53 + m_Height: 1 + - m_X: 263 + m_Y: 194 + m_Width: 13 + m_Height: 42 + - m_X: 249 + m_Y: 129 + m_Width: 30 + m_Height: 1 + - m_X: 279 + m_Y: 64 + m_Width: 25 + m_Height: 1 + - m_X: 373 + m_Y: 64 + m_Width: 8 + m_Height: 33 + - m_X: 373 + m_Y: 64 + m_Width: 7 + m_Height: 364 + - m_X: 502 + m_Y: 0 + m_Width: 9 + m_Height: 49 + - m_X: 427 + m_Y: 97 + m_Width: 2 + m_Height: 16 + - m_X: 509 + m_Y: 0 + m_Width: 2 + m_Height: 161 + - m_X: 507 + m_Y: 98 + m_Width: 4 + m_Height: 63 + - m_X: 473 + m_Y: 113 + m_Width: 3 + m_Height: 48 + - m_X: 425 + m_Y: 146 + m_Width: 2 + m_Height: 31 + - m_X: 470 + m_Y: 177 + m_Width: 3 + m_Height: 48 + - m_X: 276 + m_Y: 258 + m_Width: 104 + m_Height: 42 + - m_X: 469 + m_Y: 241 + m_Width: 1 + m_Height: 33 + - m_X: 424 + m_Y: 273 + m_Width: 1 + m_Height: 32 + - m_X: 510 + m_Y: 337 + m_Width: 1 + m_Height: 174 + - m_X: 467 + m_Y: 305 + m_Width: 2 + m_Height: 32 + - m_X: 326 + m_Y: 363 + m_Width: 54 + m_Height: 1 + - m_X: 423 + m_Y: 321 + m_Width: 1 + m_Height: 46 + - m_X: 507 + m_Y: 387 + m_Width: 4 + m_Height: 124 + - m_X: 465 + m_Y: 367 + m_Width: 2 + m_Height: 20 + - m_X: 422 + m_Y: 369 + m_Width: 1 + m_Height: 48 + - m_X: 419 + m_Y: 418 + m_Width: 3 + m_Height: 93 + - m_X: 370 + m_Y: 128 + m_Width: 10 + m_Height: 236 + - m_X: 304 + m_Y: 128 + m_Width: 23 + m_Height: 1 + - m_X: 225 + m_Y: 499 + m_Width: 286 + m_Height: 12 + - m_X: 225 + m_Y: 493 + m_Width: 237 + m_Height: 18 + - m_X: 330 + m_Y: 492 + m_Width: 132 + m_Height: 19 + - m_X: 499 + m_Y: 435 + m_Width: 12 + m_Height: 76 + - m_X: 462 + m_Y: 417 + m_Width: 3 + m_Height: 18 + - m_X: 380 + m_Y: 468 + m_Width: 82 + m_Height: 43 + - m_X: 419 + m_Y: 467 + m_Width: 43 + m_Height: 44 + - m_X: 279 + m_Y: 193 + m_Width: 48 + m_Height: 1 + - m_X: 326 + m_Y: 242 + m_Width: 54 + m_Height: 63 + - m_X: 326 + m_Y: 193 + m_Width: 1 + m_Height: 112 + - m_X: 348 + m_Y: 242 + m_Width: 32 + m_Height: 122 + - m_X: 364 + m_Y: 177 + m_Width: 16 + m_Height: 187 + - m_X: 347 + m_Y: 177 + m_Width: 33 + m_Height: 15 + - m_X: 347 + m_Y: 128 + m_Width: 1 + m_Height: 64 + m_fontInfo: + Name: + PointSize: 0 + Scale: 0 + CharacterCount: 0 + LineHeight: 0 + Baseline: 0 + Ascender: 0 + CapHeight: 0 + Descender: 0 + CenterLine: 0 + SuperscriptOffset: 0 + SubscriptOffset: 0 + SubSize: 0 + Underline: 0 + UnderlineThickness: 0 + strikethrough: 0 + strikethroughThickness: 0 + TabWidth: 0 + Padding: 0 + AtlasWidth: 0 + AtlasHeight: 0 + atlas: {fileID: 0} + m_AtlasWidth: 512 + m_AtlasHeight: 512 + m_AtlasPadding: 5 + m_AtlasRenderMode: 4165 + m_glyphInfoList: [] + m_KerningTable: + kerningPairs: [] + m_FontFeatureTable: + m_GlyphPairAdjustmentRecords: [] + fallbackFontAssets: [] + m_FallbackFontAssetTable: [] + m_CreationSettings: + sourceFontFileName: + sourceFontFileGUID: 098f0fe8d1720804fa6b4f89842e44e2 + pointSizeSamplingMode: 0 + pointSize: 75 + padding: 5 + packingMode: 0 + atlasWidth: 512 + atlasHeight: 512 + characterSetSelectionMode: 0 + characterSequence: 32 - 126, 160, 8203, 8230, 9633 + referencedFontAssetGUID: + referencedTextAssetGUID: + fontStyle: 0 + fontStyleModifier: 0 + renderMode: 4165 + includeFontFeatures: 0 + m_FontWeightTable: + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + - regularTypeface: {fileID: 0} + italicTypeface: {fileID: 0} + fontWeights: [] + normalStyle: 0 + normalSpacingOffset: 0 + boldStyle: 0.75 + boldSpacing: 7 + italicStyle: 35 + tabSize: 10 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-ThinItalic SDF.asset.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-ThinItalic SDF.asset.meta new file mode 100644 index 0000000..d2c608b --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/SDF/Lato-ThinItalic SDF.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e1695c82df14c74084770f457067f67 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF.meta new file mode 100644 index 0000000..df863bc --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: de0730be549a18f4dbc4f2ef37f8d2ea +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Black.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Black.ttf new file mode 100644 index 0000000..e2aeb6c Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Black.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Black.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Black.ttf.meta new file mode 100644 index 0000000..02adc64 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Black.ttf.meta @@ -0,0 +1,30 @@ +fileFormatVersion: 2 +guid: 462a5605cd4f4de48821603c760ce4a6 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BlackItalic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BlackItalic.ttf new file mode 100644 index 0000000..8167388 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BlackItalic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BlackItalic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BlackItalic.ttf.meta new file mode 100644 index 0000000..6f25eab --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BlackItalic.ttf.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: d05787702efa92742a8128bf4f72413c +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Bold.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Bold.ttf new file mode 100644 index 0000000..ef5ae3b Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Bold.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Bold.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Bold.ttf.meta new file mode 100644 index 0000000..7723440 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Bold.ttf.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: ae4e4b833eb9f63448b39edf3f03e309 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BoldItalic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BoldItalic.ttf new file mode 100644 index 0000000..664cd02 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BoldItalic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BoldItalic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BoldItalic.ttf.meta new file mode 100644 index 0000000..3ff544d --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-BoldItalic.ttf.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: b5b9db77b259a12469a05063c52d1d11 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: ab9f8458e621c034ab9459a93494c25b, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 864da26a57ce9ae4eb58cace8e01432a, type: 3} + - {fileID: 12800000, guid: b0f9470cad411c841a9ac4fd118ad233, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Hairline.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Hairline.ttf new file mode 100644 index 0000000..4c5a8fd Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Hairline.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Hairline.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Hairline.ttf.meta new file mode 100644 index 0000000..e0c130f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Hairline.ttf.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 268e79bc7d26d5f4eba730c096c20174 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: ab9f8458e621c034ab9459a93494c25b, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 864da26a57ce9ae4eb58cace8e01432a, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HairlineItalic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HairlineItalic.ttf new file mode 100644 index 0000000..af5ac3d Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HairlineItalic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HairlineItalic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HairlineItalic.ttf.meta new file mode 100644 index 0000000..e859877 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HairlineItalic.ttf.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 747a175745b7f704e8f9c65f1aca44b3 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Heavy.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Heavy.ttf new file mode 100644 index 0000000..fc70ab7 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Heavy.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Heavy.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Heavy.ttf.meta new file mode 100644 index 0000000..82e60fc --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Heavy.ttf.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 010b82bc895978049b69aaf4b855d7ab +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HeavyItalic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HeavyItalic.ttf new file mode 100644 index 0000000..823188c Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HeavyItalic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HeavyItalic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HeavyItalic.ttf.meta new file mode 100644 index 0000000..f273983 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-HeavyItalic.ttf.meta @@ -0,0 +1,31 @@ +fileFormatVersion: 2 +guid: 1f7095e4df627d446a114125f9882224 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Italic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Italic.ttf new file mode 100644 index 0000000..b23256f Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Italic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Italic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Italic.ttf.meta new file mode 100644 index 0000000..86e7f82 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Italic.ttf.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: e0fc9e42b93cafb49903ae27c9cb0d9c +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 864da26a57ce9ae4eb58cace8e01432a, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Light.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Light.ttf new file mode 100644 index 0000000..0809b8e Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Light.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Light.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Light.ttf.meta new file mode 100644 index 0000000..b2e5aac --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Light.ttf.meta @@ -0,0 +1,24 @@ +fileFormatVersion: 2 +guid: 246d8342c33396a488c19a031f8d655e +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-LightItalic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-LightItalic.ttf new file mode 100644 index 0000000..2d03739 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-LightItalic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-LightItalic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-LightItalic.ttf.meta new file mode 100644 index 0000000..50e382c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-LightItalic.ttf.meta @@ -0,0 +1,25 @@ +fileFormatVersion: 2 +guid: 4e4fd698e0090124ea15a7ae5a30b84a +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Medium.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Medium.ttf new file mode 100644 index 0000000..2c612da Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Medium.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Medium.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Medium.ttf.meta new file mode 100644 index 0000000..2c3e7e7 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Medium.ttf.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 53aebb2602873ed4a9807e8a254a7d2f +timeCreated: 1506413399 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: b44e0905eaa40914f9c28834f2843f19, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: ab9f8458e621c034ab9459a93494c25b, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 864da26a57ce9ae4eb58cace8e01432a, type: 3} + - {fileID: 12800000, guid: b0f9470cad411c841a9ac4fd118ad233, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: b63e08fda9960f54a91153646c5dfa94, type: 3} + - {fileID: 12800000, guid: b3f5977fecea16e4dabc6a31e8c2a065, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-MediumItalic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-MediumItalic.ttf new file mode 100644 index 0000000..63ecd02 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-MediumItalic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-MediumItalic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-MediumItalic.ttf.meta new file mode 100644 index 0000000..23640b5 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-MediumItalic.ttf.meta @@ -0,0 +1,38 @@ +fileFormatVersion: 2 +guid: fd1b3683681c0dd43bafe960491f40db +timeCreated: 1506413399 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: bb961471fe4fd6a479d7dc5efb3d4fd5, type: 3} + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: b44e0905eaa40914f9c28834f2843f19, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: ab9f8458e621c034ab9459a93494c25b, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 864da26a57ce9ae4eb58cace8e01432a, type: 3} + - {fileID: 12800000, guid: b0f9470cad411c841a9ac4fd118ad233, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: b63e08fda9960f54a91153646c5dfa94, type: 3} + - {fileID: 12800000, guid: b3f5977fecea16e4dabc6a31e8c2a065, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Regular.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Regular.ttf new file mode 100644 index 0000000..adbfc46 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Regular.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Regular.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Regular.ttf.meta new file mode 100644 index 0000000..356e926 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Regular.ttf.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 5686e06ef14cf104b8e282ee7c41b9a6 +timeCreated: 1506413399 +licenseType: Store +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: ab9f8458e621c034ab9459a93494c25b, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 864da26a57ce9ae4eb58cace8e01432a, type: 3} + - {fileID: 12800000, guid: b0f9470cad411c841a9ac4fd118ad233, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: b3f5977fecea16e4dabc6a31e8c2a065, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Semibold.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Semibold.ttf new file mode 100644 index 0000000..60ac82d Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Semibold.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Semibold.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Semibold.ttf.meta new file mode 100644 index 0000000..0098855 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Semibold.ttf.meta @@ -0,0 +1,26 @@ +fileFormatVersion: 2 +guid: 99dec03033cf89c4b936367ceee96b05 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-SemiboldItalic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-SemiboldItalic.ttf new file mode 100644 index 0000000..cc23390 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-SemiboldItalic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-SemiboldItalic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-SemiboldItalic.ttf.meta new file mode 100644 index 0000000..614acdd --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-SemiboldItalic.ttf.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 8bb3a26eeba4ea9419ea6d5b9a4805f4 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Thin.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Thin.ttf new file mode 100644 index 0000000..0f84dc1 Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Thin.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Thin.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Thin.ttf.meta new file mode 100644 index 0000000..a5a8533 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-Thin.ttf.meta @@ -0,0 +1,28 @@ +fileFormatVersion: 2 +guid: aff9bd28005f2c848854b890b7962407 +timeCreated: 1506413398 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-ThinItalic.ttf b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-ThinItalic.ttf new file mode 100644 index 0000000..7fbca2f Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-ThinItalic.ttf differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-ThinItalic.ttf.meta b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-ThinItalic.ttf.meta new file mode 100644 index 0000000..169b3af --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Fonts/Lato/TTF/Lato-ThinItalic.ttf.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 098f0fe8d1720804fa6b4f89842e44e2 +timeCreated: 1506413399 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Lato + fontNames: + - Lato + fallbackFontReferences: + - {fileID: 12800000, guid: 53d01262beef8f3478829f40c54b17a6, type: 3} + - {fileID: 12800000, guid: 44f12193a29a96e48a377ef2710cf82b, type: 3} + - {fileID: 12800000, guid: 8261aa344a446cc4d8fed11f893904eb, type: 3} + - {fileID: 12800000, guid: 0f719b9445e49864eb4e1b102bcdc3a0, type: 3} + - {fileID: 12800000, guid: b44e0905eaa40914f9c28834f2843f19, type: 3} + - {fileID: 12800000, guid: 705aa5e60576b334686c06caa9d4bc50, type: 3} + - {fileID: 12800000, guid: ab9f8458e621c034ab9459a93494c25b, type: 3} + - {fileID: 12800000, guid: 5da271984aad9a44a951545d78a516f1, type: 3} + - {fileID: 12800000, guid: 1a4c38f8e3d5dc143bc6e8f25d2a2f84, type: 3} + - {fileID: 12800000, guid: 759b260ae1c853d4694d3adddf541781, type: 3} + - {fileID: 12800000, guid: 864da26a57ce9ae4eb58cace8e01432a, type: 3} + - {fileID: 12800000, guid: b0f9470cad411c841a9ac4fd118ad233, type: 3} + - {fileID: 12800000, guid: 75be130d915c2a7489ade8079a7512c9, type: 3} + - {fileID: 12800000, guid: b3f5977fecea16e4dabc6a31e8c2a065, type: 3} + - {fileID: 12800000, guid: 4de33cef67ce15e4a8cb3d3e6b6b27e2, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/MMTweenPlotter.unity b/Assets/Feel/MMTools/Demos/MMTween/MMTweenPlotter.unity new file mode 100644 index 0000000..b969e96 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/MMTweenPlotter.unity @@ -0,0 +1,1497 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &32388700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 32388701} + - component: {fileID: 32388703} + - component: {fileID: 32388702} + m_Layer: 0 + m_Name: Section (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &32388701 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32388700} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 1063209907} + m_Father: {fileID: 488370734776711984} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1.791, y: -6.323} + m_SizeDelta: {x: 145.875, y: 32.7373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &32388702 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32388700} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 4. Linear +--- !u!222 &32388703 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32388700} + m_CullTransparentMesh: 0 +--- !u!1 &105218278 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 105218281} + - component: {fileID: 105218280} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &105218280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105218278} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &105218281 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105218278} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &113000328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 113000329} + - component: {fileID: 113000331} + - component: {fileID: 113000330} + m_Layer: 0 + m_Name: Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &113000329 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113000328} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 942665317} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 82.29993, y: -144.80034} + m_SizeDelta: {x: 0.015, y: 3.16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &113000330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113000328} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &113000331 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 113000328} + m_CullTransparentMesh: 0 +--- !u!1 &351707701 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 351707702} + m_Layer: 0 + m_Name: MMAnimationCurveGenerator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &351707702 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351707701} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 5.7565436, y: -5.586122, z: 2.0634766} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &356350904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 356350906} + - component: {fileID: 356350905} + m_Layer: 0 + m_Name: PlotterGenerator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &356350905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356350904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d3b0924fd73b1a4f8dffd6776c61c55, type: 3} + m_Name: + m_EditorClassIdentifier: + PlotterPrefab: {fileID: 275, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + Spacing: {x: 2, y: -2} + VerticalOddSpacing: -0.5 + RowLength: 5 + LinearMaterial: {fileID: 2100000, guid: 323f402f3db10d04686482d5febc26a2, type: 2} + QuadraticMaterial: {fileID: 2100000, guid: fb4caa80ff96ef14aad27e394d9874b3, type: 2} + CubicMaterial: {fileID: 2100000, guid: b2391ac266b519c4697705d56b09d303, type: 2} + QuarticMaterial: {fileID: 2100000, guid: 894fa61f3a6269747b79df1bd99a23cd, type: 2} + QuinticMaterial: {fileID: 2100000, guid: 731794f528315c84cb94474206d7e1fe, type: 2} + SinusoidalMaterial: {fileID: 2100000, guid: c8be763e295055541902ebe2b9522d25, type: 2} + BounceMaterial: {fileID: 2100000, guid: 451112f5aba7d8041bc52b85134a0e73, type: 2} + OverheadMaterial: {fileID: 2100000, guid: a169a75d065778d43bdabbe1097da6d7, type: 2} + ExponentialMaterial: {fileID: 2100000, guid: b914d9edf82d3b2428f756651aafe78e, type: 2} + ElasticMaterial: {fileID: 2100000, guid: 04d198feac2c8154ba5ce7f03711ddad, type: 2} + CircularMaterial: {fileID: 2100000, guid: 079c6b7cc9d52094da2a7281f45fc0b0, type: 2} + GeneratePlottersButton: 0 +--- !u!4 &356350906 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 356350904} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 1.9820557, y: -4.86, z: -0.3955078} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &942665316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 942665317} + - component: {fileID: 942665319} + - component: {fileID: 942665318} + m_Layer: 0 + m_Name: Section (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &942665317 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942665316} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 113000329} + m_Father: {fileID: 488370734776711984} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1.791, y: -1.818} + m_SizeDelta: {x: 145.875, y: 32.7373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &942665318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942665316} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 3. Ease Out +--- !u!222 &942665319 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 942665316} + m_CullTransparentMesh: 0 +--- !u!1 &1033452380 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1033452383} + - component: {fileID: 1033452382} + - component: {fileID: 1033452381} + - component: {fileID: 1033452385} + - component: {fileID: 1033452384} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1033452381 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033452380} + m_Enabled: 1 +--- !u!20 &1033452382 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033452380} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.32156864, g: 0.32156864, b: 0.32156864, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 8 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 1 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1033452383 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033452380} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 6.01, y: -11.2, z: -5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1033452384 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033452380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8b9a305e18de0c04dbd257a21cd47087, type: 3} + m_Name: + m_EditorClassIdentifier: + sharedProfile: {fileID: 11400000, guid: a362ed6a986e00d43b99c55140c54676, type: 2} + isGlobal: 1 + blendDistance: 0 + weight: 1 + priority: 0 +--- !u!114 &1033452385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033452380} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 948f4100a11a5c24981795d21301da5c, type: 3} + m_Name: + m_EditorClassIdentifier: + volumeTrigger: {fileID: 1033452383} + volumeLayer: + serializedVersion: 2 + m_Bits: 4294967295 + stopNaNPropagation: 1 + finalBlitToCameraTarget: 1 + antialiasingMode: 0 + temporalAntialiasing: + jitterSpread: 0.75 + sharpness: 0.25 + stationaryBlending: 0.95 + motionBlending: 0.85 + subpixelMorphologicalAntialiasing: + quality: 2 + fastApproximateAntialiasing: + fastMode: 0 + keepAlpha: 0 + fog: + enabled: 1 + excludeSkybox: 1 + debugLayer: + lightMeter: + width: 512 + height: 256 + showCurves: 1 + histogram: + width: 512 + height: 256 + channel: 3 + waveform: + exposure: 0.12 + height: 256 + vectorscope: + size: 256 + exposure: 0.12 + overlaySettings: + linearDepth: 0 + motionColorIntensity: 4 + motionGridSize: 64 + colorBlindnessType: 0 + colorBlindnessStrength: 1 + m_Resources: {fileID: 11400000, guid: d82512f9c8e5d4a4d938b575d47f88d4, type: 2} + m_ShowToolkit: 0 + m_ShowCustomSorter: 0 + breakBeforeColorGrading: 0 + m_BeforeTransparentBundles: [] + m_BeforeStackBundles: [] + m_AfterStackBundles: [] +--- !u!1 &1063209906 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1063209907} + - component: {fileID: 1063209909} + - component: {fileID: 1063209908} + m_Layer: 0 + m_Name: Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1063209907 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1063209906} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 32388701} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 82.29993, y: -43.65} + m_SizeDelta: {x: 0.01, y: 1.14} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1063209908 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1063209906} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1063209909 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1063209906} + m_CullTransparentMesh: 0 +--- !u!1 &1125896961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1125896962} + - component: {fileID: 1125896964} + - component: {fileID: 1125896963} + m_Layer: 0 + m_Name: Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1125896962 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125896961} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 1463761600} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 82.29993, y: -144.80034} + m_SizeDelta: {x: 0.015, y: 3.16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1125896963 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125896961} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1125896964 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1125896961} + m_CullTransparentMesh: 0 +--- !u!1 &1463761599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1463761600} + - component: {fileID: 1463761602} + - component: {fileID: 1463761601} + m_Layer: 0 + m_Name: Section (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1463761600 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463761599} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 1125896962} + m_Father: {fileID: 488370734776711984} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1.791, y: 2.678} + m_SizeDelta: {x: 145.875, y: 32.7373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1463761601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463761599} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 2. Ease In Out +--- !u!222 &1463761602 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1463761599} + m_CullTransparentMesh: 0 +--- !u!1 &1629324873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1629324877} + - component: {fileID: 1629324876} + - component: {fileID: 1629324875} + - component: {fileID: 1629324874} + m_Layer: 5 + m_Name: FPSCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &1629324874 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629324873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 3 +--- !u!114 &1629324875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629324873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!223 &1629324876 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629324873} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1629324877 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629324873} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1816937001} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1793253602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1793253604} + - component: {fileID: 1793253603} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1793253603 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1793253602} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &1793253604 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1793253602} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1816937000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1816937001} + - component: {fileID: 1816937004} + - component: {fileID: 1816937003} + - component: {fileID: 1816937002} + - component: {fileID: 1816937005} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1816937001 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816937000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1629324877} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 54.659973, y: 4.26001} + m_SizeDelta: {x: 94.68982, y: 32.737305} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1816937002 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816937000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 06e8923c17983d643980d7d7773b7382, type: 3} + m_Name: + m_EditorClassIdentifier: + UpdateInterval: 0.3 + Mode: 0 +--- !u!114 &1816937003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816937000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 12 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: FPS +--- !u!222 &1816937004 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816937000} + m_CullTransparentMesh: 0 +--- !u!114 &1816937005 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1816937000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 32dd23bf97680be41a75b45b50f0d8ac, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetFPS: 300 + RenderFrameInterval: 0 + VSyncCount: 0 +--- !u!1 &2026046399 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2026046400} + - component: {fileID: 2026046402} + - component: {fileID: 2026046401} + m_Layer: 0 + m_Name: Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2026046400 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2026046399} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 100, y: 100, z: 100} + m_Children: [] + m_Father: {fileID: 488370735115230227} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 82.29993, y: -144.80034} + m_SizeDelta: {x: 0.015, y: 3.16} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2026046401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2026046399} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2026046402 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2026046399} + m_CullTransparentMesh: 0 +--- !u!224 &488370734776711984 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488370734776711985} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 488370735115230227} + - {fileID: 1463761600} + - {fileID: 942665317} + - {fileID: 32388701} + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 2.47, y: -11.151005} + m_SizeDelta: {x: 3.883, y: 15.709} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &488370734776711985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 488370734776711984} + - component: {fileID: 488370734776711987} + - component: {fileID: 488370734776711986} + - component: {fileID: 488370734776711989} + m_Layer: 0 + m_Name: PlotterAxisCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &488370734776711986 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488370734776711985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 3 +--- !u!223 &488370734776711987 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488370734776711985} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &488370734776711989 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488370734776711985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1ac9205114b9d44a8eed663e283ea09, type: 3} + m_Name: + m_EditorClassIdentifier: + Label: {fileID: 488370735115230226} + TimeLabel: {fileID: 0} + PlotterCurvePoint: {fileID: 0} + PositionPoint: {fileID: 0} + PositionPointVertical: {fileID: 0} + RotationPoint: {fileID: 0} + ScalePoint: {fileID: 0} +--- !u!1 &488370735115230224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 488370735115230227} + - component: {fileID: 488370735115230229} + - component: {fileID: 488370735115230226} + m_Layer: 0 + m_Name: Section + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &488370735115230226 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488370735115230224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 1. Ease In +--- !u!224 &488370735115230227 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488370735115230224} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: + - {fileID: 2026046400} + m_Father: {fileID: 488370734776711984} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1.791, y: 7.176} + m_SizeDelta: {x: 145.875, y: 32.7373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &488370735115230229 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 488370735115230224} + m_CullTransparentMesh: 0 +--- !u!1001 &6744464750957523911 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 194, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_Name + value: Plotter + objectReference: {fileID: 0} + - target: {fileID: 194, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 215, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d4d8e14e51685a04fb93fc4b5e8dd38d, type: 3} diff --git a/Assets/Feel/MMTools/Demos/MMTween/MMTweenPlotter.unity.meta b/Assets/Feel/MMTools/Demos/MMTween/MMTweenPlotter.unity.meta new file mode 100644 index 0000000..51b5787 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/MMTweenPlotter.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 96905a8529e11244cbe0a6f74ab95ddd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials.meta new file mode 100644 index 0000000..985a042 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 579a463d3bafa7741a2d271bd6a8073d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterCurvePointMaterial.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterCurvePointMaterial.mat new file mode 100644 index 0000000..72415b6 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterCurvePointMaterial.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterCurvePointMaterial + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _EMISSION + m_LightmapFlags: 1 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 1.4980392, g: 1.4980392, b: 1.4980392, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterCurvePointMaterial.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterCurvePointMaterial.mat.meta new file mode 100644 index 0000000..0898a8e --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterCurvePointMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db7781ef32c696d40b0abd6335c8b739 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterLineMaterial.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterLineMaterial.mat new file mode 100644 index 0000000..0342628 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterLineMaterial.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterLineMaterial + m_Shader: {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0, b: 0, a: 0.2784314} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterLineMaterial.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterLineMaterial.mat.meta new file mode 100644 index 0000000..071a706 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterLineMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5a92d08a53a696f41b20d84ea487ab16 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 1.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 1.mat new file mode 100644 index 0000000..a937732 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 1.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 1 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.95294124, g: 0.25882354, b: 0.20784315, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 1.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 1.mat.meta new file mode 100644 index 0000000..76ecef9 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 1.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 323f402f3db10d04686482d5febc26a2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 10.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 10.mat new file mode 100644 index 0000000..6b12679 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 10.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 10 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0.73333335, b: 0.82745105, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 10.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 10.mat.meta new file mode 100644 index 0000000..dd9210a --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 10.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04d198feac2c8154ba5ce7f03711ddad +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 11.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 11.mat new file mode 100644 index 0000000..16750b5 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 11.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 11 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.9960785, g: 0.9176471, b: 0.227451, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 11.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 11.mat.meta new file mode 100644 index 0000000..ac0ecac --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 11.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 079c6b7cc9d52094da2a7281f45fc0b0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 2.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 2.mat new file mode 100644 index 0000000..16ebeb5 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 2.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 2 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.24313727, g: 0.3137255, b: 0.7058824, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 2.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 2.mat.meta new file mode 100644 index 0000000..6753b66 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 2.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fb4caa80ff96ef14aad27e394d9874b3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 3.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 3.mat new file mode 100644 index 0000000..e792326 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 3.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 3 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.29411766, g: 0.68235296, b: 0.30980393, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 3.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 3.mat.meta new file mode 100644 index 0000000..a26d3e8 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 3.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2391ac266b519c4697705d56b09d303 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 4.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 4.mat new file mode 100644 index 0000000..7dfa0d8 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 4.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 4 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.909804, g: 0.1137255, b: 0.38431376, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 4.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 4.mat.meta new file mode 100644 index 0000000..4ced5b3 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 4.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 894fa61f3a6269747b79df1bd99a23cd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 5.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 5.mat new file mode 100644 index 0000000..23d93e1 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 5.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 5 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.1254902, g: 0.58431375, b: 0.9490197, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 5.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 5.mat.meta new file mode 100644 index 0000000..f2e9a2f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 5.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 731794f528315c84cb94474206d7e1fe +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 6.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 6.mat new file mode 100644 index 0000000..a25a205 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 6.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 6 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.5411765, g: 0.7607844, b: 0.28627452, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 6.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 6.mat.meta new file mode 100644 index 0000000..ac7046c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 6.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8be763e295055541902ebe2b9522d25 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 7.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 7.mat new file mode 100644 index 0000000..fb51393 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 7.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 7 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.007843138, g: 0.65882355, b: 0.95294124, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 7.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 7.mat.meta new file mode 100644 index 0000000..4025f55 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 7.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 451112f5aba7d8041bc52b85134a0e73 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 8.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 8.mat new file mode 100644 index 0000000..6119830 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 8.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 8 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.8000001, g: 0.8588236, b: 0.21960786, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 8.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 8.mat.meta new file mode 100644 index 0000000..e8b7f68 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 8.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a169a75d065778d43bdabbe1097da6d7 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 9.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 9.mat new file mode 100644 index 0000000..919761f --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 9.mat @@ -0,0 +1,85 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial 9 + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 1 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.60784316, g: 0.14901961, b: 0.6862745, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 9.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 9.mat.meta new file mode 100644 index 0000000..19e73a7 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial 9.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b914d9edf82d3b2428f756651aafe78e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial.mat b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial.mat new file mode 100644 index 0000000..6cd7fde --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MMPlotterPointMaterial + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 1 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0, g: 0.66053605, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial.mat.meta b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial.mat.meta new file mode 100644 index 0000000..73c0647 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Materials/MMPlotterPointMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9acbfc937f10684283102450bb59ac1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Prefabs.meta b/Assets/Feel/MMTools/Demos/MMTween/Prefabs.meta new file mode 100644 index 0000000..893390b --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec4ec415e56d76945af35b87388b3e76 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Prefabs/Plotter.prefab b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/Plotter.prefab new file mode 100644 index 0000000..6c865a1 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/Plotter.prefab @@ -0,0 +1,312 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &194 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 215} + - component: {fileID: 275} + m_Layer: 0 + m_Name: Plotter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &215 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 401979145} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &275 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 194} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d9b44209469b244478c826d3b44489d5, type: 3} + m_Name: + m_EditorClassIdentifier: + TweenMethodIndex: 3 + GraphSize: 1 + Resolution: 200 + PlotPointPrefab: {fileID: 8202130478865891363, guid: 1c0fc0603e5310a4a81c2da44b541fdc, + type: 3} + PointScaleFactor: 3 + PlotPointMaterial: {fileID: 0} + DistanceBetweenPoints: 0.0033333334 + Axis: {fileID: 5858094981405246843, guid: ab92d78e7b8ec184e807821ca0e00568, type: 3} + MovementPauseDuration: 2 +--- !u!1001 &5858094981165429367 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 215} + m_Modifications: + - target: {fileID: 2350289396883495725, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: 246d8342c33396a488c19a031f8d655e, + type: 3} + - target: {fileID: 5858094981068759644, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_FontData.m_Font + value: + objectReference: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, + type: 3} + - target: {fileID: 5858094981068759644, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_FontData.m_FontSize + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246843, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: Label + value: + objectReference: {fileID: 197595179} + - target: {fileID: 5858094981405246843, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: TimeLabel + value: + objectReference: {fileID: 8201553653048715610} + - target: {fileID: 5858094981405246843, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: ScalePoint + value: + objectReference: {fileID: 2482719958925731406} + - target: {fileID: 5858094981405246843, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: PositionPoint + value: + objectReference: {fileID: 7038562768981540812} + - target: {fileID: 5858094981405246843, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: RotationPoint + value: + objectReference: {fileID: 3514147159644129766} + - target: {fileID: 5858094981405246843, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: PlotterCurvePoint + value: + objectReference: {fileID: 4517950247908899085} + - target: {fileID: 5858094981405246843, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: PositionPointVertical + value: + objectReference: {fileID: 2508660954510757118} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_SizeDelta.x + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_SizeDelta.y + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5858094981405246847, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_Name + value: PlotterAxisCanvas + objectReference: {fileID: 0} + - target: {fileID: 8070126765728746362, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalScale.x + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 8070126765728746362, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalScale.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 8070126765728746362, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalScale.z + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: 8070126765728746362, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalPosition.x + value: 0.636 + objectReference: {fileID: 0} + - target: {fileID: 8070126765728746362, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.191 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ab92d78e7b8ec184e807821ca0e00568, type: 3} +--- !u!224 &401979145 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5858094981405246846, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + m_PrefabInstance: {fileID: 5858094981165429367} + m_PrefabAsset: {fileID: 0} +--- !u!114 &197595179 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 5858094981068759644, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + m_PrefabInstance: {fileID: 5858094981165429367} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &4517950247908899085 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8070126765728746362, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + m_PrefabInstance: {fileID: 5858094981165429367} + m_PrefabAsset: {fileID: 0} +--- !u!114 &8201553653048715610 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 2350289396883495725, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + m_PrefabInstance: {fileID: 5858094981165429367} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &7038562768981540812 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 3522340281530846651, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + m_PrefabInstance: {fileID: 5858094981165429367} + m_PrefabAsset: {fileID: 0} +--- !u!4 &2482719958925731406 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8302463974093837369, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + m_PrefabInstance: {fileID: 5858094981165429367} + m_PrefabAsset: {fileID: 0} +--- !u!4 &3514147159644129766 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7028113921967160209, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + m_PrefabInstance: {fileID: 5858094981165429367} + m_PrefabAsset: {fileID: 0} +--- !u!4 &2508660954510757118 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8330726382323416713, guid: ab92d78e7b8ec184e807821ca0e00568, + type: 3} + m_PrefabInstance: {fileID: 5858094981165429367} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Prefabs/Plotter.prefab.meta b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/Plotter.prefab.meta new file mode 100644 index 0000000..a48c707 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/Plotter.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d4d8e14e51685a04fb93fc4b5e8dd38d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterAxisCanvas.prefab b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterAxisCanvas.prefab new file mode 100644 index 0000000..e201fbb --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterAxisCanvas.prefab @@ -0,0 +1,859 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1011483688128580940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8070126765728746362} + - component: {fileID: 8786996708064175980} + - component: {fileID: 5447822977587144112} + m_Layer: 0 + m_Name: PlotterCurvePoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8070126765728746362 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011483688128580940} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.5532995, y: 0.051856276, z: 0} + m_LocalScale: {x: 0.06, y: 0.06, z: 0.06} + m_Children: [] + m_Father: {fileID: 5858094981405246846} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8786996708064175980 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011483688128580940} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5447822977587144112 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1011483688128580940} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: db7781ef32c696d40b0abd6335c8b739, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &1612341837021299911 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8302463974093837369} + m_Layer: 0 + m_Name: ScalePoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8302463974093837369 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1612341837021299911} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0, y: 1.1, z: 0.03125} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8009444735756820468} + m_Father: {fileID: 5858094981405246846} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2700009921837774720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8009444735756820468} + - component: {fileID: 5013107793991899775} + - component: {fileID: 3769239031669913711} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8009444735756820468 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2700009921837774720} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_Children: [] + m_Father: {fileID: 8302463974093837369} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5013107793991899775 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2700009921837774720} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3769239031669913711 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2700009921837774720} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5a92d08a53a696f41b20d84ea487ab16, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3319465881721131107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 869540118446942781} + - component: {fileID: 6028565317349282153} + - component: {fileID: 2350289396883495725} + m_Layer: 0 + m_Name: Time + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &869540118446942781 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3319465881721131107} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 5858094981405246846} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.5165, y: -0.293} + m_SizeDelta: {x: 94.6898, y: 32.7373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6028565317349282153 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3319465881721131107} + m_CullTransparentMesh: 0 +--- !u!114 &2350289396883495725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3319465881721131107} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 246d8342c33396a488c19a031f8d655e, type: 3} + m_FontSize: 7 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: t = 0.2s +--- !u!1 &5670633886508502314 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7028113921967160209} + m_Layer: 0 + m_Name: RotationPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7028113921967160209 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5670633886508502314} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2, y: -0.2, z: 0.03125} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6088665141796349869} + m_Father: {fileID: 5858094981405246846} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &5858094981068759646 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5858094981068759645} + - component: {fileID: 5858094981068759643} + - component: {fileID: 5858094981068759644} + m_Layer: 0 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5858094981068759645 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981068759646} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_Children: [] + m_Father: {fileID: 5858094981405246846} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.5165, y: -0.1903} + m_SizeDelta: {x: 94.6898, y: 32.7373} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5858094981068759643 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981068759646} + m_CullTransparentMesh: 0 +--- !u!114 &5858094981068759644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981068759646} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: ae4e4b833eb9f63448b39edf3f03e309, type: 3} + m_FontSize: 10 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Graph name +--- !u!1 &5858094981368002711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5858094981368002710} + - component: {fileID: 5858094981368002708} + - component: {fileID: 5858094981368002709} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5858094981368002710 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981368002711} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.001, y: 0.001, z: 0.001} + m_Children: [] + m_Father: {fileID: 5858094981405246846} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2048, y: 2048} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5858094981368002708 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981368002711} + m_CullTransparentMesh: 0 +--- !u!114 &5858094981368002709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981368002711} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: cdbaf105b9f815b4cb8bab94c303595a, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5858094981405246847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5858094981405246846} + - component: {fileID: 5858094981405246845} + - component: {fileID: 5858094981405246844} + - component: {fileID: 5858094981405246843} + m_Layer: 0 + m_Name: PlotterAxisCanvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5858094981405246846 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981405246847} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5858094981368002710} + - {fileID: 5858094981068759645} + - {fileID: 8070126765728746362} + - {fileID: 869540118446942781} + - {fileID: 3522340281530846651} + - {fileID: 8302463974093837369} + - {fileID: 7028113921967160209} + - {fileID: 8330726382323416713} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2, y: 2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &5858094981405246845 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981405246847} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &5858094981405246844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981405246847} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 3 +--- !u!114 &5858094981405246843 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5858094981405246847} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f1ac9205114b9d44a8eed663e283ea09, type: 3} + m_Name: + m_EditorClassIdentifier: + Label: {fileID: 5858094981068759644} + TimeLabel: {fileID: 2350289396883495725} + PlotterCurvePoint: {fileID: 8070126765728746362} + PositionPoint: {fileID: 3522340281530846651} + PositionPointVertical: {fileID: 8330726382323416713} + RotationPoint: {fileID: 7028113921967160209} + ScalePoint: {fileID: 8302463974093837369} +--- !u!1 &6869481313340597285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3522340281530846651} + m_Layer: 0 + m_Name: PositionPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3522340281530846651 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6869481313340597285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.2845, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1294897681157278131} + m_Father: {fileID: 5858094981405246846} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7556472940926540911 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6088665141796349869} + - component: {fileID: 8262179220359439975} + - component: {fileID: 8230178221160990936} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6088665141796349869 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7556472940926540911} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.2, y: 0.2, z: 0.2} + m_Children: [] + m_Father: {fileID: 7028113921967160209} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8262179220359439975 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7556472940926540911} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &8230178221160990936 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7556472940926540911} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 5a92d08a53a696f41b20d84ea487ab16, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7806972513917484620 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1294897681157278131} + - component: {fileID: 4782371196858571546} + - component: {fileID: 2760301757716487289} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1294897681157278131 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7806972513917484620} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.03, y: 0.03, z: 0.03} + m_Children: [] + m_Father: {fileID: 3522340281530846651} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4782371196858571546 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7806972513917484620} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2760301757716487289 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7806972513917484620} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: db7781ef32c696d40b0abd6335c8b739, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8360736524428532741 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8330726382323416713} + m_Layer: 0 + m_Name: PositionPointVertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8330726382323416713 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8360736524428532741} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.2845, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2173234617418951908} + m_Father: {fileID: 5858094981405246846} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9041291455441577843 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2173234617418951908} + - component: {fileID: 9038529997504449220} + - component: {fileID: 6416566883973079004} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2173234617418951908 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9041291455441577843} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.03, y: 0.03, z: 0.03} + m_Children: [] + m_Father: {fileID: 8330726382323416713} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9038529997504449220 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9041291455441577843} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6416566883973079004 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9041291455441577843} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: db7781ef32c696d40b0abd6335c8b739, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterAxisCanvas.prefab.meta b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterAxisCanvas.prefab.meta new file mode 100644 index 0000000..712cd1c --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterAxisCanvas.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ab92d78e7b8ec184e807821ca0e00568 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterPoint.prefab b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterPoint.prefab new file mode 100644 index 0000000..5116aad --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterPoint.prefab @@ -0,0 +1,93 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &577337442731920454 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8202130478865891363} + - component: {fileID: 3048343077289175379} + - component: {fileID: 3241062780003121417} + - component: {fileID: 8486134166183210186} + m_Layer: 0 + m_Name: PlotterPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8202130478865891363 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577337442731920454} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -7.417638, y: -0.955287, z: -0.51021004} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3048343077289175379 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577337442731920454} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3241062780003121417 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577337442731920454} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: e9acbfc937f10684283102450bb59ac1, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &8486134166183210186 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 577337442731920454} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterPoint.prefab.meta b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterPoint.prefab.meta new file mode 100644 index 0000000..62bf617 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Prefabs/PlotterPoint.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1c0fc0603e5310a4a81c2da44b541fdc +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Textures.meta b/Assets/Feel/MMTools/Demos/MMTween/Textures.meta new file mode 100644 index 0000000..d01a5ea --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 36767f25388d182488d4aabfd17e1258 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MMTween/Textures/PlotterAxis.png b/Assets/Feel/MMTools/Demos/MMTween/Textures/PlotterAxis.png new file mode 100644 index 0000000..d654b2e Binary files /dev/null and b/Assets/Feel/MMTools/Demos/MMTween/Textures/PlotterAxis.png differ diff --git a/Assets/Feel/MMTools/Demos/MMTween/Textures/PlotterAxis.png.meta b/Assets/Feel/MMTools/Demos/MMTween/Textures/PlotterAxis.png.meta new file mode 100644 index 0000000..4cf0562 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MMTween/Textures/PlotterAxis.png.meta @@ -0,0 +1,121 @@ +fileFormatVersion: 2 +guid: cdbaf105b9f815b4cb8bab94c303595a +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 0753d071ebfe01547b63154661b41104 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Demos/MoreMountains.Tools.Demos.asmref b/Assets/Feel/MMTools/Demos/MoreMountains.Tools.Demos.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MoreMountains.Tools.Demos.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Demos/MoreMountains.Tools.Demos.asmref.meta b/Assets/Feel/MMTools/Demos/MoreMountains.Tools.Demos.asmref.meta new file mode 100644 index 0000000..330ccfd --- /dev/null +++ b/Assets/Feel/MMTools/Demos/MoreMountains.Tools.Demos.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ef404fbee21d25c43828c6a39015f168 +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation.meta b/Assets/Feel/MMTools/Foundation.meta new file mode 100644 index 0000000..f76d7b1 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 402bafecfad7a734eab6b5b16c1898f4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor.meta b/Assets/Feel/MMTools/Foundation/Editor.meta new file mode 100644 index 0000000..ab2adea --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 48e60c3a68661ec43a3003fe20b0282b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAI.meta b/Assets/Feel/MMTools/Foundation/Editor/MMAI.meta new file mode 100644 index 0000000..43fcace --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1671a5a55391bd24eb553baa8042d7fb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIActionInspectorDrawer.cs b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIActionInspectorDrawer.cs new file mode 100644 index 0000000..5808e77 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIActionInspectorDrawer.cs @@ -0,0 +1,84 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(AIAction))] + public class AIActionPropertyInspector : PropertyDrawer + { + const float LineHeight = 16f; + + #if UNITY_EDITOR + + /// + /// Draws + /// + /// + /// + /// + public override void OnGUI(Rect rect, SerializedProperty prop, GUIContent label) + { + // determines the height of the Action property + var height = Mathf.Max(LineHeight, EditorGUI.GetPropertyHeight(prop)); + Rect position = rect; + position.height = height; + + // draws the dropdown + DrawSelectionDropdown(position, prop); + + // draws the base field + position.y += height; + EditorGUI.PropertyField(position, prop); + } + + #endif + + /// + /// Draws a selector letting the user pick any action associated with the AIBrain this action is on + /// + /// + /// + protected virtual void DrawSelectionDropdown(Rect position, SerializedProperty prop) + { + AIAction thisAction = prop.objectReferenceValue as AIAction; + AIAction[] actions = (prop.serializedObject.targetObject as AIBrain).GetAttachedActions(); + int selected = 0; + int i = 1; + string[] options = new string[actions.Length + 1]; + options[0] = "None"; + foreach (AIAction action in actions) + { + string name = string.IsNullOrEmpty(action.Label) ? action.GetType().Name : action.Label; + options[i] = i.ToString() + " - " + name; + if (action == thisAction) + { + selected = i; + } + i++; + } + + EditorGUI.BeginChangeCheck(); + selected = EditorGUI.Popup(position, selected, options); + if (EditorGUI.EndChangeCheck()) + { + prop.objectReferenceValue = (selected == 0) ? null : actions[selected - 1]; + prop.serializedObject.ApplyModifiedProperties(); + EditorUtility.SetDirty(prop.serializedObject.targetObject); + } + } + + /// + /// Returns the height of the full property + /// + /// + /// + /// + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + var h = Mathf.Max(LineHeight, EditorGUI.GetPropertyHeight(property)); + float height = h * 2; // 2 lines, one for the dropdown, one for the property field + return height; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIActionInspectorDrawer.cs.meta b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIActionInspectorDrawer.cs.meta new file mode 100644 index 0000000..90a4da1 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIActionInspectorDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 702bfb9f7cc2a2849a2c16f4087d1c55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIBrainEditor.cs b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIBrainEditor.cs new file mode 100644 index 0000000..1d1e6a0 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIBrainEditor.cs @@ -0,0 +1,74 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(AIBrain), true)] + public class AIBrainEditor : Editor + { + protected MMReorderableList _list; + protected SerializedProperty _brainActive; + protected SerializedProperty _resetBrainOnEnable; + protected SerializedProperty _resetBrainOnStart; + protected SerializedProperty _timeInThisState; + protected SerializedProperty _target; + protected SerializedProperty _owner; + protected SerializedProperty _actionsFrequency; + protected SerializedProperty _decisionFrequency; + protected SerializedProperty _randomizeFrequencies; + protected SerializedProperty _randomActionFrequency; + protected SerializedProperty _randomDecisionFrequency; + + protected virtual void OnEnable() + { + _list = new MMReorderableList(serializedObject.FindProperty("States")); + _list.elementNameProperty = "States"; + _list.elementDisplayType = MMReorderableList.ElementDisplayType.Expandable; + + _brainActive = serializedObject.FindProperty("BrainActive"); + _resetBrainOnEnable = serializedObject.FindProperty("ResetBrainOnEnable"); + _resetBrainOnStart = serializedObject.FindProperty("ResetBrainOnStart"); + _timeInThisState = serializedObject.FindProperty("TimeInThisState"); + _target = serializedObject.FindProperty("Target"); + _owner = serializedObject.FindProperty("Owner"); + _actionsFrequency = serializedObject.FindProperty("ActionsFrequency"); + _decisionFrequency = serializedObject.FindProperty("DecisionFrequency"); + + _randomizeFrequencies = serializedObject.FindProperty("RandomizeFrequencies"); + _randomActionFrequency = serializedObject.FindProperty("RandomActionFrequency"); + _randomDecisionFrequency = serializedObject.FindProperty("RandomDecisionFrequency"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + _list.DoLayoutList(); + EditorGUILayout.PropertyField(_timeInThisState); + EditorGUILayout.PropertyField(_owner); + EditorGUILayout.PropertyField(_target); + EditorGUILayout.PropertyField(_brainActive); + EditorGUILayout.PropertyField(_resetBrainOnEnable); + EditorGUILayout.PropertyField(_resetBrainOnStart); + EditorGUILayout.PropertyField(_actionsFrequency); + EditorGUILayout.PropertyField(_decisionFrequency); + EditorGUILayout.PropertyField(_randomizeFrequencies); + if (_randomizeFrequencies.boolValue) + { + EditorGUILayout.PropertyField(_randomActionFrequency); + EditorGUILayout.PropertyField(_randomDecisionFrequency); + } + serializedObject.ApplyModifiedProperties(); + + AIBrain brain = (AIBrain)target; + if (brain.CurrentState != null) + { + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Current State", brain.CurrentState.StateName); + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIBrainEditor.cs.meta b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIBrainEditor.cs.meta new file mode 100644 index 0000000..e93da8c --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AIBrainEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7cd42026e6a9da7479e4c826b64a4df9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAI/AITransitionInspectorDrawer.cs b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AITransitionInspectorDrawer.cs new file mode 100644 index 0000000..c255c51 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AITransitionInspectorDrawer.cs @@ -0,0 +1,126 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace MoreMountains.Tools +{ + [CustomPropertyDrawer(typeof(AITransition))] + public class AITransitionPropertyInspector : PropertyDrawer + { + const float LineHeight = 16f; + + + #if UNITY_EDITOR + + /// + /// Draws a Transition inspector, a transition is one or more action(s), one or more decision(s) and associated true/false states + /// + /// + /// + /// + public override void OnGUI(Rect rect, SerializedProperty prop, GUIContent label) + { + Rect position = rect; + foreach (SerializedProperty a in prop) + { + var height = Mathf.Max(LineHeight, EditorGUI.GetPropertyHeight(a)); + position.height = height; + + if(a.name == "Decision") + { + // draw the decision dropdown + DrawSelectionDropdown(position, prop); + + // draw the base decision field + position.y += height; + EditorGUI.PropertyField(position, a, new GUIContent(a.name)); + position.y += height; + + /*var @object = a.objectReferenceValue; + AIDecision @typedObject = @object as AIDecision; + if (@typedObject != null && !string.IsNullOrEmpty(@typedObject.Label)) + { + EditorGUI.LabelField(position, "Label", @typedObject.Label); + position.y += height; + } + else + { + EditorGUIUtility.GetControlID(FocusType.Passive); + }*/ + } + else + { + EditorGUI.PropertyField(position, a, new GUIContent(a.name)); + position.y += height; + } + } + } + + #endif + + /// + /// Draws a selector letting the user pick any decision associated with the AIBrain this transition is on + /// + /// + /// + protected virtual void DrawSelectionDropdown(Rect position, SerializedProperty prop) + { + AIDecision thisDecision = prop.objectReferenceValue as AIDecision; + AIDecision[] decisions = (prop.serializedObject.targetObject as AIBrain).GetAttachedDecisions(); + int selected = 0; + int i = 1; + string[] options = new string[decisions.Length + 1]; + options[0] = "None"; + foreach (AIDecision decision in decisions) + { + string name = string.IsNullOrEmpty(decision.Label) ? decision.GetType().Name : decision.Label; + options[i] = i.ToString() + " - " + name; + if (decision == thisDecision) + { + selected = i; + } + i++; + } + + EditorGUI.BeginChangeCheck(); + selected = EditorGUI.Popup(position, selected, options); + if (EditorGUI.EndChangeCheck()) + { + prop.objectReferenceValue = (selected == 0) ? null : decisions[selected - 1]; + prop.serializedObject.ApplyModifiedProperties(); + EditorUtility.SetDirty(prop.serializedObject.targetObject); + } + } + + /// + /// Determines the height of the transition property + /// + /// + /// + /// + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + float height = 0; + foreach (SerializedProperty a in property) + { + var h = Mathf.Max(LineHeight, EditorGUI.GetPropertyHeight(a)); + if(a.name == "Decision") + { + height += h * 2; + + /*var @object = a.objectReferenceValue; + AIDecision @typedObject = @object as AIDecision; + if (@typedObject != null && !string.IsNullOrEmpty(@typedObject.Label)) + { + height += h; + }*/ + } + else + { + height += h; + } + } + return height; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAI/AITransitionInspectorDrawer.cs.meta b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AITransitionInspectorDrawer.cs.meta new file mode 100644 index 0000000..2071131 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAI/AITransitionInspectorDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40eb84ddcba91054fa1432576815aa6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAchievements.meta b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements.meta new file mode 100644 index 0000000..2d0a0d7 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1917f0eaf05900748b6f700d0fd6c321 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementListInspector.cs b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementListInspector.cs new file mode 100644 index 0000000..542ce40 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementListInspector.cs @@ -0,0 +1,26 @@ +using UnityEngine; +using UnityEditor; + +namespace MoreMountains.Tools +{ + [CustomEditor(typeof(MMAchievementList),true)] + /// + /// Custom inspector for the MMAchievementList scriptable object. + /// + public class MMAchievementListInspector : Editor + { + /// + /// When drawing the GUI, adds a "Reset Achievements" button, that does exactly what you think it does. + /// + public override void OnInspectorGUI() + { + DrawDefaultInspector (); + MMAchievementList achievementList = (MMAchievementList)target; + if(GUILayout.Button("Reset Achievements")) + { + achievementList.ResetAchievements(); + } + EditorUtility.SetDirty (achievementList); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementListInspector.cs.meta b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementListInspector.cs.meta new file mode 100644 index 0000000..47f6736 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementListInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 70d3db55e641fa4428b605f636e0015b +timeCreated: 1480263802 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementMenu.cs b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementMenu.cs new file mode 100644 index 0000000..03de688 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementMenu.cs @@ -0,0 +1,19 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using UnityEditor; + +namespace MoreMountains.Tools +{ + public static class MMAchievementMenu + { + [MenuItem("Tools/More Mountains/Reset all achievements", false,21)] + /// + /// Adds a menu item to enable help + /// + private static void EnableHelpInInspectors() + { + MMAchievementManager.ResetAllAchievements (); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementMenu.cs.meta b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementMenu.cs.meta new file mode 100644 index 0000000..0cab590 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MMAchievements/MMAchievementMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a1d53c42aa1029048b98580478952105 +timeCreated: 1482318762 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/Editor/MoreMountains.Tools.Foundation.Editor.asmref b/Assets/Feel/MMTools/Foundation/Editor/MoreMountains.Tools.Foundation.Editor.asmref new file mode 100644 index 0000000..4de2cbc --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MoreMountains.Tools.Foundation.Editor.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:d9dbf313afb206f458581847ac758375" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/Editor/MoreMountains.Tools.Foundation.Editor.asmref.meta b/Assets/Feel/MMTools/Foundation/Editor/MoreMountains.Tools.Foundation.Editor.asmref.meta new file mode 100644 index 0000000..83c4646 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/Editor/MoreMountains.Tools.Foundation.Editor.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e08d8cde70b2ab541adf3efc246ef16a +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAI.meta b/Assets/Feel/MMTools/Foundation/MMAI.meta new file mode 100644 index 0000000..28eabfe --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b062a1793c8d8ec448d1cb2594114352 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AIAction.cs b/Assets/Feel/MMTools/Foundation/MMAI/AIAction.cs new file mode 100644 index 0000000..10c7906 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AIAction.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Actions are behaviours and describe what your character is doing. Examples include patrolling, shooting, jumping, etc. + /// + public abstract class AIAction : MonoBehaviour + { + public enum InitializationModes { EveryTime, OnlyOnce, } + /// whether initialization should happen only once, or every time the brain is reset + public InitializationModes InitializationMode; + protected bool _initialized; + + /// a label you can set to organize your AI Actions, not used by anything else + [Tooltip("a label you can set to organize your AI Actions, not used by anything else")] + public string Label; + public abstract void PerformAction(); + public virtual bool ActionInProgress { get; set; } + protected AIBrain _brain; + + protected virtual bool ShouldInitialize + { + get + { + switch (InitializationMode) + { + case InitializationModes.EveryTime: + return true; + case InitializationModes.OnlyOnce: + return _initialized == false; + } + return true; + } + } + + /// + /// On Awake we grab our AIBrain + /// + protected virtual void Awake() + { + _brain = this.gameObject.GetComponentInParent(); + } + + /// + /// Initializes the action. Meant to be overridden + /// + public virtual void Initialization() + { + _initialized = true; + } + + /// + /// Describes what happens when the brain enters the state this action is in. Meant to be overridden. + /// + public virtual void OnEnterState() + { + ActionInProgress = true; + } + + /// + /// Describes what happens when the brain exits the state this action is in. Meant to be overridden. + /// + public virtual void OnExitState() + { + ActionInProgress = false; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AIAction.cs.meta b/Assets/Feel/MMTools/Foundation/MMAI/AIAction.cs.meta new file mode 100644 index 0000000..79a5d59 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AIAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d7020c7ee7492e40848350adbd515be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AIBrain.cs b/Assets/Feel/MMTools/Foundation/MMAI/AIBrain.cs new file mode 100644 index 0000000..ce7b9d7 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AIBrain.cs @@ -0,0 +1,311 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace MoreMountains.Tools +{ + /// + /// the AI brain is responsible from going from one state to the other based on the defined transitions. It's basically just a collection of states, and it's where you'll link all the actions, decisions, states and transitions together. + /// + [AddComponentMenu("More Mountains/Tools/AI/AIBrain")] + public class AIBrain : MonoBehaviour + { + [Header("Debug")] + /// the owner of that AI Brain, usually the associated character + [MMReadOnly] + public GameObject Owner; + /// the collection of states + public List States; + /// this brain's current state + public virtual AIState CurrentState { get; protected set; } + /// the time we've spent in the current state + [MMReadOnly] + public float TimeInThisState; + /// the current target + [MMReadOnly] + public Transform Target; + /// the last known world position of the target + [MMReadOnly] + public Vector3 _lastKnownTargetPosition = Vector3.zero; + + [Header("State")] + /// whether or not this brain is active + public bool BrainActive = true; + public bool ResetBrainOnStart = true; + public bool ResetBrainOnEnable = false; + + [Header("Frequencies")] + /// the frequency (in seconds) at which to perform actions (lower values : higher frequency, high values : lower frequency but better performance) + public float ActionsFrequency = 0f; + /// the frequency (in seconds) at which to evaluate decisions + public float DecisionFrequency = 0f; + + /// whether or not to randomize the action and decision frequencies + public bool RandomizeFrequencies = false; + /// the min and max values between which to randomize the action frequency + [MMVector("min","max")] + public Vector2 RandomActionFrequency = new Vector2(0.5f, 1f); + /// the min and max values between which to randomize the decision frequency + [MMVector("min","max")] + public Vector2 RandomDecisionFrequency = new Vector2(0.5f, 1f); + + protected AIDecision[] _decisions; + protected AIAction[] _actions; + protected float _lastActionsUpdate = 0f; + protected float _lastDecisionsUpdate = 0f; + protected AIState _initialState; + protected AIState _newState; + + public virtual AIAction[] GetAttachedActions() + { + AIAction[] actions = this.gameObject.GetComponentsInChildren(); + return actions; + } + + public virtual AIDecision[] GetAttachedDecisions() + { + AIDecision[] decisions = this.gameObject.GetComponentsInChildren(); + return decisions; + } + + protected virtual void OnEnable() + { + if (ResetBrainOnEnable) + { + ResetBrain(); + } + } + + /// + /// On awake we set our brain for all states + /// + protected virtual void Awake() + { + foreach (AIState state in States) + { + state.SetBrain(this); + } + _decisions = GetAttachedDecisions(); + _actions = GetAttachedActions(); + if (RandomizeFrequencies) + { + ActionsFrequency = Random.Range(RandomActionFrequency.x, RandomActionFrequency.y); + DecisionFrequency = Random.Range(RandomDecisionFrequency.x, RandomDecisionFrequency.y); + } + } + + /// + /// On Start we set our first state + /// + protected virtual void Start() + { + if (ResetBrainOnStart) + { + ResetBrain(); + } + } + + /// + /// Every frame we update our current state + /// + protected virtual void Update() + { + if (!BrainActive || (CurrentState == null) || (Time.timeScale == 0f)) + { + return; + } + + if (Time.time - _lastActionsUpdate > ActionsFrequency) + { + CurrentState.PerformActions(); + _lastActionsUpdate = Time.time; + } + + if (!BrainActive) + { + return; + } + + if (Time.time - _lastDecisionsUpdate > DecisionFrequency) + { + CurrentState.EvaluateTransitions(); + _lastDecisionsUpdate = Time.time; + } + + TimeInThisState += Time.deltaTime; + + StoreLastKnownPosition(); + } + + /// + /// Transitions to the specified state, trigger exit and enter states events + /// + /// + public virtual void TransitionToState(string newStateName) + { + _newState = FindState(newStateName); + AIStateEvent.Trigger(this,CurrentState, _newState); + + if (CurrentState == null) + { + CurrentState = _newState; + if (CurrentState != null) + { + CurrentState.EnterState(); + } + return; + } + if (newStateName != CurrentState.StateName) + { + CurrentState.ExitState(); + OnExitState(); + + CurrentState = _newState; + if (CurrentState != null) + { + CurrentState.EnterState(); + } + } + } + + /// + /// When exiting a state we reset our time counter + /// + protected virtual void OnExitState() + { + TimeInThisState = 0f; + } + + /// + /// Initializes all decisions + /// + protected virtual void InitializeDecisions() + { + if (_decisions == null) + { + _decisions = GetAttachedDecisions(); + } + foreach(AIDecision decision in _decisions) + { + decision.Initialization(); + } + } + + /// + /// Initializes all actions + /// + protected virtual void InitializeActions() + { + if (_actions == null) + { + _actions = GetAttachedActions(); + } + foreach(AIAction action in _actions) + { + action.Initialization(); + } + } + + /// + /// Returns a state based on the specified state name + /// + /// + /// + protected AIState FindState(string stateName) + { + foreach (AIState state in States) + { + if (state.StateName == stateName) + { + return state; + } + } + if (stateName != "") + { + Debug.LogError("You're trying to transition to state '" + stateName + "' in " + this.gameObject.name + "'s AI Brain, but no state of this name exists. Make sure your states are named properly, and that your transitions states match existing states."); + } + return null; + } + + /// + /// Stores the last known position of the target + /// + protected virtual void StoreLastKnownPosition() + { + if (Target != null) + { + _lastKnownTargetPosition = Target.transform.position; + } + } + + /// + /// Resets the brain, forcing it to enter its first state + /// + public virtual void ResetBrain() + { + InitializeDecisions(); + InitializeActions(); + BrainActive = true; + this.enabled = true; + + if (CurrentState != null) + { + CurrentState.ExitState(); + OnExitState(); + } + + if (States.Count > 0) + { + _newState = States[0]; + AIStateEvent.Trigger(this,CurrentState, _newState); + CurrentState = _newState; + CurrentState?.EnterState(); + } + } + + /// + /// Triggered via the context menu in its inspector (or if you call it directly), this will remove any unused actions and decisions from the brain + /// + [ContextMenu("Delete unused actions and decisions")] + public virtual void DeleteUnusedActionsAndDecisions() + { + AIAction[] actions = this.gameObject.GetComponentsInChildren(); + AIDecision[] decisions = this.gameObject.GetComponentsInChildren(); + foreach (AIAction action in actions) + { + bool found = false; + foreach (AIState state in States) + { + if (state.Actions.Contains(action)) + { + found = true; + } + } + if (!found) + { + DestroyImmediate(action); + } + } + foreach (AIDecision decision in decisions) + { + bool found = false; + foreach (AIState state in States) + { + foreach (AITransition transition in state.Transitions) + { + if (transition.Decision == decision) + { + found = true; + } + } + } + if (!found) + { + DestroyImmediate(decision); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AIBrain.cs.meta b/Assets/Feel/MMTools/Foundation/MMAI/AIBrain.cs.meta new file mode 100644 index 0000000..21c5dbd --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AIBrain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eec89e4158bf96841b9bc830fc5385ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AIDecision.cs b/Assets/Feel/MMTools/Foundation/MMAI/AIDecision.cs new file mode 100644 index 0000000..115d333 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AIDecision.cs @@ -0,0 +1,54 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +namespace MoreMountains.Tools +{ + /// + /// Decisions are components that will be evaluated by transitions, every frame, and will return true or false. Examples include time spent in a state, distance to a target, or object detection within an area. + /// + public abstract class AIDecision : MonoBehaviour + { + /// Decide will be performed every frame while the Brain is in a state this Decision is in. Should return true or false, which will then determine the transition's outcome. + public abstract bool Decide(); + + /// a label you can set to organize your AI Decisions, not used by anything else + [Tooltip("a label you can set to organize your AI Decisions, not used by anything else")] + public string Label; + public virtual bool DecisionInProgress { get; set; } + protected AIBrain _brain; + + /// + /// On Awake we grab our Brain + /// + protected virtual void Awake() + { + _brain = this.gameObject.GetComponentInParent(); + } + + /// + /// Meant to be overridden, called when the game starts + /// + public virtual void Initialization() + { + + } + + /// + /// Meant to be overridden, called when the Brain enters a State this Decision is in + /// + public virtual void OnEnterState() + { + DecisionInProgress = true; + } + + /// + /// Meant to be overridden, called when the Brain exits a State this Decision is in + /// + public virtual void OnExitState() + { + DecisionInProgress = false; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AIDecision.cs.meta b/Assets/Feel/MMTools/Foundation/MMAI/AIDecision.cs.meta new file mode 100644 index 0000000..6b3b68c --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AIDecision.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86aa60c7eb6e3fe4a8c3624c6b3f1abc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AIState.cs b/Assets/Feel/MMTools/Foundation/MMAI/AIState.cs new file mode 100644 index 0000000..b6af53e --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AIState.cs @@ -0,0 +1,154 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [System.Serializable] + public class AIActionsList : MMReorderableArray + { + } + [System.Serializable] + public class AITransitionsList : MMReorderableArray + { + } + + public struct AIStateEvent + { + public AIBrain Brain; + public AIState ExitState; + public AIState EnterState; + + public AIStateEvent(AIBrain brain, AIState exitState, AIState enterState) + { + Brain = brain; + ExitState = exitState; + EnterState = enterState; + } + + static AIStateEvent e; + public static void Trigger(AIBrain brain, AIState exitState, AIState enterState) + { + e.Brain = brain; + e.ExitState = exitState; + e.EnterState = enterState; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// A State is a combination of one or more actions, and one or more transitions. An example of a state could be "_patrolling until an enemy gets in range_". + /// + [System.Serializable] + public class AIState + { + /// the name of the state (will be used as a reference in Transitions + public string StateName; + + [MMReorderableAttribute(null, "Action", null)] + public AIActionsList Actions; + [MMReorderableAttribute(null, "Transition", null)] + public AITransitionsList Transitions;/* + + /// a list of actions to perform in this state + public List Actions; + /// a list of transitions to evaluate to exit this state + public List Transitions;*/ + + protected AIBrain _brain; + + /// + /// Sets this state's brain to the one specified in parameters + /// + /// + public virtual void SetBrain(AIBrain brain) + { + _brain = brain; + } + + /// + /// On enter state we pass that info to our actions and decisions + /// + public virtual void EnterState() + { + foreach (AIAction action in Actions) + { + action.OnEnterState(); + } + foreach (AITransition transition in Transitions) + { + if (transition.Decision != null) + { + transition.Decision.OnEnterState(); + } + } + } + + /// + /// On exit state we pass that info to our actions and decisions + /// + public virtual void ExitState() + { + foreach (AIAction action in Actions) + { + action.OnExitState(); + } + foreach (AITransition transition in Transitions) + { + if (transition.Decision != null) + { + transition.Decision.OnExitState(); + } + } + } + + /// + /// Performs this state's actions + /// + public virtual void PerformActions() + { + if (Actions.Count == 0) { return; } + for (int i=0; i + /// Tests this state's transitions + /// + public virtual void EvaluateTransitions() + { + if (Transitions.Count == 0) { return; } + for (int i = 0; i < Transitions.Count; i++) + { + if (Transitions[i].Decision != null) + { + if (Transitions[i].Decision.Decide()) + { + if (!string.IsNullOrEmpty(Transitions[i].TrueState)) + { + _brain.TransitionToState(Transitions[i].TrueState); + break; + } + } + else + { + if (!string.IsNullOrEmpty(Transitions[i].FalseState)) + { + _brain.TransitionToState(Transitions[i].FalseState); + break; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AIState.cs.meta b/Assets/Feel/MMTools/Foundation/MMAI/AIState.cs.meta new file mode 100644 index 0000000..3d46020 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AIState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e1187ab043b6154493c3407ed149566 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AITransition.cs b/Assets/Feel/MMTools/Foundation/MMAI/AITransition.cs new file mode 100644 index 0000000..5af7381 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AITransition.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// Transitions are a combination of one or more decisions and destination states whether or not these transitions are true or false. An example of a transition could be "_if an enemy gets in range, transition to the Shooting state_". + /// + [System.Serializable] + public class AITransition + { + /// this transition's decision + public AIDecision Decision; + /// the state to transition to if this Decision returns true + public string TrueState; + /// the state to transition to if this Decision returns false + public string FalseState; + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAI/AITransition.cs.meta b/Assets/Feel/MMTools/Foundation/MMAI/AITransition.cs.meta new file mode 100644 index 0000000..715b8a9 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAI/AITransition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36bf680dabd04c14288ec99ad204ee89 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements.meta b/Assets/Feel/MMTools/Foundation/MMAchievements.meta new file mode 100644 index 0000000..70b548a --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 11c2284278bfce54a9d90b80bc88118a +folderAsset: yes +timeCreated: 1523893762 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts.meta new file mode 100644 index 0000000..a18419f --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 602325afa3a7e49e6a02b9bef136256b +folderAsset: yes +timeCreated: 1480001014 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts/orange kid.ttf b/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts/orange kid.ttf new file mode 100644 index 0000000..8c1b9b2 Binary files /dev/null and b/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts/orange kid.ttf differ diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts/orange kid.ttf.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts/orange kid.ttf.meta new file mode 100644 index 0000000..8b1663f --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Fonts/orange kid.ttf.meta @@ -0,0 +1,20 @@ +fileFormatVersion: 2 +guid: 0f03458534bea45e4bba9ab3411321b2 +timeCreated: 1480001014 +licenseType: Store +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontNames: + - Orange Kid + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs.meta new file mode 100644 index 0000000..7fb0271 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e9c2c059b6db042f9a6c5169883cfd91 +folderAsset: yes +timeCreated: 1480084340 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs/AchievementDisplay.prefab b/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs/AchievementDisplay.prefab new file mode 100644 index 0000000..798d447 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs/AchievementDisplay.prefab @@ -0,0 +1,586 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011764500980} + m_IsPrefabParent: 1 +--- !u!1 &1000010625031310 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013839664430} + - component: {fileID: 222000012145136048} + - component: {fileID: 114000012127359052} + m_Layer: 5 + m_Name: AchievementDescription + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010787308212 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010446898764} + - component: {fileID: 222000010806795656} + - component: {fileID: 114000011025716940} + m_Layer: 5 + m_Name: AchievementTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011017784956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010929275142} + - component: {fileID: 222000013828483476} + - component: {fileID: 114000014023583406} + m_Layer: 5 + m_Name: AchievementBackgroundUnlocked + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000011678039142 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011865885252} + - component: {fileID: 222000014014719096} + - component: {fileID: 114000014234426190} + - component: {fileID: 114123889840356516} + m_Layer: 5 + m_Name: ProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011764500980 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000014175055234} + - component: {fileID: 114000010642984398} + - component: {fileID: 225000012185432622} + m_Layer: 5 + m_Name: AchievementDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012137379068 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011735803302} + - component: {fileID: 222000014068580754} + - component: {fileID: 114000012046079386} + m_Layer: 5 + m_Name: AchievementIcon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012904130690 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011949108480} + - component: {fileID: 222000011779272360} + - component: {fileID: 114000013121188064} + m_Layer: 5 + m_Name: AchievementBackground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014260414582 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010576291022} + - component: {fileID: 222000010728672920} + - component: {fileID: 114000011002272268} + m_Layer: 5 + m_Name: ProgressBarFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114000010642984398 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011764500980} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e775494159ed5e4c997035d2df49776, type: 3} + m_Name: + m_EditorClassIdentifier: + BackgroundLocked: {fileID: 114000013121188064} + BackgroundUnlocked: {fileID: 114000014023583406} + Icon: {fileID: 114000012046079386} + Title: {fileID: 114000011025716940} + Description: {fileID: 114000012127359052} + ProgressBarDisplay: {fileID: 114123889840356516} +--- !u!114 &114000011002272268 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014260414582} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000011025716940 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010787308212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: 0f03458534bea45e4bba9ab3411321b2, type: 3} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Achievement Title +--- !u!114 &114000012046079386 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012137379068} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 16a86a7f581fc4dfb953e0df8ad3ecac, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000012127359052 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010625031310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.578} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: 0f03458534bea45e4bba9ab3411321b2, type: 3} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.68 + m_Text: The achievement's description goes here ipsum dolor lorem sit amet ipsum + dolor sit amet ipsum dolor sit amet +--- !u!114 &114000013121188064 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012904130690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: cecdbf60b0c9d47c9a26b99a41425de0, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000014023583406 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011017784956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: c379ef0fb8ae144a5b0a0b1d0c02d125, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000014234426190 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011678039142} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114123889840356516 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011678039142} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0a42a23ce4f9ed24abde69beacbef2f4, type: 3} + m_Name: + m_EditorClassIdentifier: + ForegroundBar: {fileID: 224000010576291022} + PlayerID: +--- !u!222 &222000010728672920 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014260414582} +--- !u!222 &222000010806795656 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010787308212} +--- !u!222 &222000011779272360 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012904130690} +--- !u!222 &222000012145136048 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010625031310} +--- !u!222 &222000013828483476 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011017784956} +--- !u!222 &222000014014719096 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011678039142} +--- !u!222 &222000014068580754 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012137379068} +--- !u!224 &224000010446898764 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010787308212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -201, y: 100} + m_SizeDelta: {x: 354.109, y: 50.075} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000010576291022 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014260414582} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000011865885252} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 335, y: 5} + m_Pivot: {x: 0, y: 0.5} +--- !u!224 &224000010929275142 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011017784956} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -256, y: 64} + m_SizeDelta: {x: 512, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000011735803302 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012137379068} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: -448, y: 64} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000011865885252 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011678039142} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224000010576291022} + m_Father: {fileID: 224000014175055234} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: -209.4, y: 13.9} + m_SizeDelta: {x: 335, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000011949108480 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012904130690} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -256, y: 64} + m_SizeDelta: {x: 512, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013839664430 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010625031310} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -201, y: 55} + m_SizeDelta: {x: 353.894, y: 79.908} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000014175055234 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011764500980} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224000011949108480} + - {fileID: 224000010929275142} + - {fileID: 224000011735803302} + - {fileID: 224000010446898764} + - {fileID: 224000013839664430} + - {fileID: 224000011865885252} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: -6.1451902, y: 20.653046} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &225000012185432622 +CanvasGroup: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011764500980} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs/AchievementDisplay.prefab.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs/AchievementDisplay.prefab.meta new file mode 100644 index 0000000..c614263 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Prefabs/AchievementDisplay.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf6e65de4f70a4dcf99ceb68e999d287 +timeCreated: 1480162379 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Resources.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Resources.meta new file mode 100644 index 0000000..ce8bee0 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4360e4e414a1faa4c9f4249158fb7f7a +folderAsset: yes +timeCreated: 1480084340 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Resources/AchievementDisplay.prefab b/Assets/Feel/MMTools/Foundation/MMAchievements/Resources/AchievementDisplay.prefab new file mode 100644 index 0000000..088cf00 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Resources/AchievementDisplay.prefab @@ -0,0 +1,586 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1000011764500980} + m_IsPrefabParent: 1 +--- !u!1 &1000010625031310 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000013839664430} + - component: {fileID: 222000012145136048} + - component: {fileID: 114000012127359052} + m_Layer: 5 + m_Name: AchievementDescription + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000010787308212 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010446898764} + - component: {fileID: 222000010806795656} + - component: {fileID: 114000011025716940} + m_Layer: 5 + m_Name: AchievementTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011017784956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010929275142} + - component: {fileID: 222000013828483476} + - component: {fileID: 114000014023583406} + m_Layer: 5 + m_Name: AchievementBackgroundUnlocked + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!1 &1000011678039142 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011865885252} + - component: {fileID: 222000014014719096} + - component: {fileID: 114000014234426190} + - component: {fileID: 114000012929178306} + m_Layer: 5 + m_Name: ProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000011764500980 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000014175055234} + - component: {fileID: 114000010642984398} + - component: {fileID: 225000012185432622} + m_Layer: 5 + m_Name: AchievementDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012137379068 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011735803302} + - component: {fileID: 222000014068580754} + - component: {fileID: 114000012046079386} + m_Layer: 5 + m_Name: AchievementIcon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000012904130690 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000011949108480} + - component: {fileID: 222000011779272360} + - component: {fileID: 114000013121188064} + m_Layer: 5 + m_Name: AchievementBackground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1000014260414582 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224000010576291022} + - component: {fileID: 222000010728672920} + - component: {fileID: 114000011002272268} + m_Layer: 5 + m_Name: ProgressBarFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114000010642984398 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011764500980} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e775494159ed5e4c997035d2df49776, type: 3} + m_Name: + m_EditorClassIdentifier: + BackgroundLocked: {fileID: 114000013121188064} + BackgroundUnlocked: {fileID: 114000014023583406} + Icon: {fileID: 114000012046079386} + Title: {fileID: 114000011025716940} + Description: {fileID: 114000012127359052} + ProgressBarDisplay: {fileID: 114000012929178306} +--- !u!114 &114000011002272268 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014260414582} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000011025716940 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010787308212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: 0f03458534bea45e4bba9ab3411321b2, type: 3} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Achievement Title +--- !u!114 &114000012046079386 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012137379068} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 16a86a7f581fc4dfb953e0df8ad3ecac, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000012127359052 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010625031310} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.578} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 12800000, guid: 0f03458534bea45e4bba9ab3411321b2, type: 3} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.68 + m_Text: The achievement's description goes here ipsum dolor lorem sit amet ipsum + dolor sit amet ipsum dolor sit amet +--- !u!114 &114000012929178306 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011678039142} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0a42a23ce4f9ed24abde69beacbef2f4, type: 3} + m_Name: + m_EditorClassIdentifier: + ForegroundBar: {fileID: 224000010576291022} + PlayerID: +--- !u!114 &114000013121188064 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012904130690} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: cecdbf60b0c9d47c9a26b99a41425de0, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000014023583406 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011017784956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: c379ef0fb8ae144a5b0a0b1d0c02d125, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114000014234426190 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011678039142} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f5f67c52d1564df4a8936ccd202a3bd8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &222000010728672920 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014260414582} +--- !u!222 &222000010806795656 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010787308212} +--- !u!222 &222000011779272360 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012904130690} +--- !u!222 &222000012145136048 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010625031310} +--- !u!222 &222000013828483476 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011017784956} +--- !u!222 &222000014014719096 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011678039142} +--- !u!222 &222000014068580754 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012137379068} +--- !u!224 &224000010446898764 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010787308212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -201, y: 100} + m_SizeDelta: {x: 354.109, y: 50.075} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000010576291022 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000014260414582} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000011865885252} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 335, y: 5} + m_Pivot: {x: 0, y: 0.5} +--- !u!224 &224000010929275142 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011017784956} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -256, y: 64} + m_SizeDelta: {x: 512, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000011735803302 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012137379068} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: -448, y: 64} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000011865885252 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011678039142} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224000010576291022} + m_Father: {fileID: 224000014175055234} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: -209.4, y: 13.9} + m_SizeDelta: {x: 335, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000011949108480 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000012904130690} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -256, y: 64} + m_SizeDelta: {x: 512, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000013839664430 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000010625031310} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 224000014175055234} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -201, y: 55} + m_SizeDelta: {x: 353.894, y: 79.908} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224000014175055234 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011764500980} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 224000011949108480} + - {fileID: 224000010929275142} + - {fileID: 224000011735803302} + - {fileID: 224000010446898764} + - {fileID: 224000013839664430} + - {fileID: 224000011865885252} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: -29.421097, y: -15.587612} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!225 &225000012185432622 +CanvasGroup: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1000011764500980} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Resources/AchievementDisplay.prefab.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Resources/AchievementDisplay.prefab.meta new file mode 100644 index 0000000..b82f4be --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Resources/AchievementDisplay.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 445360f52aabb4446be71f24e6576a72 +timeCreated: 1480162379 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts.meta new file mode 100644 index 0000000..01c4b32 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: af38923d3d51548fe95ccec5e05de8c8 +folderAsset: yes +timeCreated: 1480084329 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievement.cs b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievement.cs new file mode 100644 index 0000000..f66eaed --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievement.cs @@ -0,0 +1,117 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace MoreMountains.Tools +{ + /// + /// This achievement system supports 2 types of achievements : simple (do something > get achievement), and progress based (jump X times, kill X enemies, etc). + /// + public enum AchievementTypes { Simple, Progress } + + [Serializable] + public class MMAchievement + { + [Header("Identification")] + /// the unique identifier for this achievement + public string AchievementID; + /// is this achievement progress based or + public AchievementTypes AchievementType; + /// if this is true, the achievement won't be displayed in a list + public bool HiddenAchievement; + /// if this is true, the achievement has been unlocked. Otherwise, it's still up for grabs + public bool UnlockedStatus; + + [Header("Description")] + /// the achievement's name/title + public string Title; + /// the achievement's description + public string Description; + /// the amount of points unlocking this achievement gets you + public int Points; + + [Header("Image and Sounds")] + /// the image to display while this achievement is locked + public Sprite LockedImage; + /// the image to display when the achievement is unlocked + public Sprite UnlockedImage; + /// a sound to play when the achievement is unlocked + public AudioClip UnlockedSound; + + [Header("Progress")] + /// the amount of progress needed to unlock this achievement. + public int ProgressTarget; + /// the current amount of progress made on this achievement + public int ProgressCurrent; + + /// + /// Unlocks the achievement, asks for a save of the current achievements, and triggers an MMAchievementUnlockedEvent for this achievement. + /// This will usually then be caught by the MMAchievementDisplay class. + /// + public virtual void UnlockAchievement() + { + // if the achievement has already been unlocked, we do nothing and exit + if (UnlockedStatus) + { + return; + } + + UnlockedStatus = true; + + MMGameEvent.Trigger("Save"); + MMAchievementUnlockedEvent.Trigger(this); + } + + /// + /// Locks the achievement. + /// + public virtual void LockAchievement() + { + UnlockedStatus = false; + } + + /// + /// Adds the specified value to the current progress. + /// + /// New progress. + public virtual void AddProgress(int newProgress) + { + ProgressCurrent += newProgress; + EvaluateProgress(); + } + + /// + /// Sets the progress to the value passed in parameter. + /// + /// New progress. + public virtual void SetProgress(int newProgress) + { + ProgressCurrent = newProgress; + EvaluateProgress(); + } + + /// + /// Evaluates the current progress of the achievement, and unlocks it if needed. + /// + protected virtual void EvaluateProgress() + { + MMAchievementChangedEvent.Trigger(this); + if (ProgressCurrent >= ProgressTarget) + { + ProgressCurrent = ProgressTarget; + UnlockAchievement(); + } + } + + /// + /// Copies this achievement (useful when loading from a scriptable object list) + /// + public virtual MMAchievement Copy() + { + MMAchievement clone = new MMAchievement (); + // we use Json utility to store a copy of our achievement, not a reference + clone = JsonUtility.FromJson(JsonUtility.ToJson(this)); + return clone; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievement.cs.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievement.cs.meta new file mode 100644 index 0000000..79976f8 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievement.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 12a7d0ec5f1424c129527c01a444e964 +timeCreated: 1480085861 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayItem.cs b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayItem.cs new file mode 100644 index 0000000..6a8a749 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayItem.cs @@ -0,0 +1,23 @@ +#if MM_UI +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +using MoreMountains.Tools; + +namespace MoreMountains.Tools +{ + /// + /// This class is used to display an achievement. Add it to a prefab containing all the required elements listed below. + /// + [AddComponentMenu("More Mountains/Tools/Achievements/MMAchievementDisplayItem")] + public class MMAchievementDisplayItem : MonoBehaviour + { + public Image BackgroundLocked; + public Image BackgroundUnlocked; + public Image Icon; + public Text Title; + public Text Description; + public MMProgressBar ProgressBarDisplay; + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayItem.cs.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayItem.cs.meta new file mode 100644 index 0000000..668faa2 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayItem.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4e775494159ed5e4c997035d2df49776 +timeCreated: 1480176460 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayer.cs b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayer.cs new file mode 100644 index 0000000..34fae18 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayer.cs @@ -0,0 +1,105 @@ +using UnityEngine; +using System.Collections; + +#if MM_UI + +namespace MoreMountains.Tools +{ + /// + /// A class used to display the achievements on screen. + /// The AchievementDisplayItems will be parented to it, so it's better if it has a LayoutGroup (Vertical or Horizontal) too. + /// + [AddComponentMenu("More Mountains/Tools/Achievements/MMAchievementDisplayer")] + public class MMAchievementDisplayer : MonoBehaviour, MMEventListener + { + [Header("Achievements")] + /// the prefab to use to display achievements + public MMAchievementDisplayItem AchievementDisplayPrefab; + /// the duration the achievement will remain on screen for when unlocked + public float AchievementDisplayDuration = 5f; + /// the fade in/out speed + public float AchievementFadeDuration = 0.2f; + + protected WaitForSeconds _achievementFadeOutWFS; + + /// + /// Instantiates an achievement display prefab and shows it for the specified duration + /// + /// The achievement. + /// Achievement. + public virtual IEnumerator DisplayAchievement(MMAchievement achievement) + { + if ((this.transform == null) || (AchievementDisplayPrefab == null)) + { + yield break; + } + + // we instantiate our achievement display prefab, and add it to the group that will automatically handle its position + GameObject instance = (GameObject)Instantiate(AchievementDisplayPrefab.gameObject); + instance.transform.SetParent(this.transform,false); + + // we get the achievement displayer + MMAchievementDisplayItem achievementDisplay = instance.GetComponent (); + if (achievementDisplay == null) + { + yield break; + } + + // we fill our achievement + achievementDisplay.Title.text = achievement.Title; + achievementDisplay.Description.text = achievement.Description; + achievementDisplay.Icon.sprite = achievement.UnlockedImage; + if (achievement.AchievementType == AchievementTypes.Progress) + { + achievementDisplay.ProgressBarDisplay.gameObject.SetActive(true); + } + else + { + achievementDisplay.ProgressBarDisplay.gameObject.SetActive(false); + } + + // we play a sound if set + if (achievement.UnlockedSound != null) + { + MMSfxEvent.Trigger (achievement.UnlockedSound); + } + + // we fade it in and out + CanvasGroup achievementCanvasGroup = instance.GetComponent (); + if (achievementCanvasGroup != null) + { + achievementCanvasGroup.alpha = 0; + StartCoroutine(MMFade.FadeCanvasGroup(achievementCanvasGroup, AchievementFadeDuration, 1)); + yield return _achievementFadeOutWFS; + StartCoroutine(MMFade.FadeCanvasGroup(achievementCanvasGroup, AchievementFadeDuration, 0)); + } + } + + /// + /// When an achievement is unlocked, we display it + /// + /// Achievement unlocked event. + public virtual void OnMMEvent(MMAchievementUnlockedEvent achievementUnlockedEvent) + { + StartCoroutine(DisplayAchievement (achievementUnlockedEvent.Achievement)); + } + + /// + /// On enable, we start listening for unlocked achievements + /// + protected virtual void OnEnable() + { + this.MMEventStartListening(); + _achievementFadeOutWFS = new WaitForSeconds (AchievementFadeDuration + AchievementDisplayDuration); + } + + /// + /// On disable, we stop listening for unlocked achievements + /// + protected virtual void OnDisable() + { + this.MMEventStopListening(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayer.cs.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayer.cs.meta new file mode 100644 index 0000000..432921d --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementDisplayer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f759f536b039f2b46881cfc8ea77c496 +timeCreated: 1480176245 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementEvent.cs b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementEvent.cs new file mode 100644 index 0000000..2cce5f5 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementEvent.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// An event type used to broadcast the fact that an achievement has been unlocked + /// + public struct MMAchievementUnlockedEvent + { + /// the achievement that has been unlocked + public MMAchievement Achievement; + + /// + /// Constructor + /// + /// New achievement. + public MMAchievementUnlockedEvent(MMAchievement newAchievement) + { + Achievement = newAchievement; + } + + static MMAchievementUnlockedEvent e; + public static void Trigger(MMAchievement newAchievement) + { + e.Achievement = newAchievement; + MMEventManager.TriggerEvent(e); + } + } + + public struct MMAchievementChangedEvent + { + /// the achievement that has been unlocked + public MMAchievement Achievement; + + /// + /// Constructor + /// + /// New achievement. + public MMAchievementChangedEvent(MMAchievement newAchievement) + { + Achievement = newAchievement; + } + + static MMAchievementChangedEvent e; + public static void Trigger(MMAchievement newAchievement) + { + e.Achievement = newAchievement; + MMEventManager.TriggerEvent(e); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementEvent.cs.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementEvent.cs.meta new file mode 100644 index 0000000..6c0b7d9 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementEvent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d8ab561ba77c94d3fafd05ffde7d9f7c +timeCreated: 1480085871 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementList.cs b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementList.cs new file mode 100644 index 0000000..e60f47d --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementList.cs @@ -0,0 +1,34 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + [CreateAssetMenu(fileName="AchievementList",menuName="MoreMountains/Achievement List")] + /// + /// A scriptable object containing a list of achievements. You need to create one and store it in a Resources folder for this to work. + /// + public class MMAchievementList : ScriptableObject + { + /// the unique ID of this achievement list. This is used to save/load data. + public string AchievementsListID = "AchievementsList"; + + /// the list of achievements + public List Achievements; + + /// + /// Asks for a reset of all the achievements in this list (they'll all be locked again, their progress lost). + /// + public virtual void ResetAchievements() + { + Debug.LogFormat ("Reset Achievements"); + MMAchievementManager.ResetAchievements (AchievementsListID); + } + + private MMReferenceHolder _instances; + protected virtual void OnEnable() { _instances.Reference(this); } + protected virtual void OnDisable() { _instances.Dispose(); } + public static MMAchievementList Any => MMReferenceHolder.Any; + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementList.cs.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementList.cs.meta new file mode 100644 index 0000000..165a9cf --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementList.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6f8f916bd4c5a444fa42e298d90f488d +timeCreated: 1480177569 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementManager.cs b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementManager.cs new file mode 100644 index 0000000..a423e1a --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementManager.cs @@ -0,0 +1,225 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using System.Runtime.Serialization.Formatters.Binary; + +namespace MoreMountains.Tools +{ + [ExecuteAlways] + /// + /// This static class is in charge of storing the current state of the achievements, unlocking/locking them, and saving them to data files + /// + public static class MMAchievementManager + { + public static List AchievementsList { get { return _achievements; }} + + private static List _achievements; + private static MMAchievement _achievement = null; + + public static string _defaultFileName = "Achievements"; + public static string _saveFolderName = "MMAchievements/"; + public static string _saveFileExtension = ".achievements"; + + public static string SaveFileName; + public static string ListID; + + /// + /// You'll need to call this method to initialize the manager + /// + public static void LoadAchievementList(MMAchievementList achievementList) + { + _achievements = new List (); + + if (achievementList == null) + { + return; + } + + // we store the ID for save purposes + ListID = achievementList.AchievementsListID; + + foreach (MMAchievement achievement in achievementList.Achievements) + { + _achievements.Add (achievement.Copy()); + } + } + + /// + /// Unlocks the specified achievement (if found). + /// + /// Achievement I. + public static void UnlockAchievement(string achievementID) + { + _achievement = AchievementManagerContains(achievementID); + if (_achievement != null) + { + _achievement.UnlockAchievement(); + } + } + + /// + /// Locks the specified achievement (if found). + /// + /// Achievement ID. + public static void LockAchievement(string achievementID) + { + _achievement = AchievementManagerContains(achievementID); + if (_achievement != null) + { + _achievement.LockAchievement(); + } + } + + /// + /// Adds progress to the specified achievement (if found). + /// + /// Achievement ID. + /// New progress. + public static void AddProgress(string achievementID, int newProgress) + { + _achievement = AchievementManagerContains(achievementID); + if (_achievement != null) + { + _achievement.AddProgress(newProgress); + } + } + + /// + /// Sets the progress of the specified achievement (if found) to the specified progress. + /// + /// Achievement ID. + /// New progress. + public static void SetProgress(string achievementID, int newProgress) + { + _achievement = AchievementManagerContains(achievementID); + if (_achievement != null) + { + _achievement.SetProgress(newProgress); + } + } + + /// + /// Determines if the achievement manager contains an achievement of the specified ID. Returns it if found, otherwise returns null + /// + /// The achievement corresponding to the searched ID if found, otherwise null. + /// Searched I. + private static MMAchievement AchievementManagerContains(string searchedID) + { + if (_achievements.Count == 0) + { + return null; + } + foreach(MMAchievement achievement in _achievements) + { + if (achievement.AchievementID == searchedID) + { + return achievement; + } + } + return null; + } + + // SAVE ------------------------------------------------------------------------------------------------------------------------------------ + + /// + /// Removes saved data and resets all achievements from a list + /// + /// The ID of the achievement list to reset. + public static void ResetAchievements(string listID) + { + if (_achievements != null) + { + foreach(MMAchievement achievement in _achievements) + { + achievement.ProgressCurrent = 0; + achievement.UnlockedStatus = false; + } + } + + DeterminePath (listID); + MMSaveLoadManager.DeleteSave(SaveFileName + _saveFileExtension, _saveFolderName); + Debug.LogFormat ("Achievements Reset"); + } + + public static void ResetAllAchievements() + { + ResetAchievements (ListID); + } + + /// + /// Loads the saved achievements file and updates the array with its content. + /// + public static void LoadSavedAchievements() + { + DeterminePath (); + SerializedMMAchievementManager serializedMMAchievementManager = (SerializedMMAchievementManager)MMSaveLoadManager.Load(typeof(SerializedMMAchievementManager), SaveFileName+ _saveFileExtension, _saveFolderName); + ExtractSerializedMMAchievementManager(serializedMMAchievementManager); + } + + /// + /// Saves the achievements current status to a file on disk + /// + public static void SaveAchievements() + { + DeterminePath (); + SerializedMMAchievementManager serializedMMAchievementManager = new SerializedMMAchievementManager(); + FillSerializedMMAchievementManager(serializedMMAchievementManager); + MMSaveLoadManager.Save(serializedMMAchievementManager, SaveFileName+_saveFileExtension, _saveFolderName); + } + + /// + /// Determines the path the achievements save file should be saved to. + /// + private static void DeterminePath(string specifiedFileName = "") + { + string tempFileName = (!string.IsNullOrEmpty(ListID)) ? ListID : _defaultFileName; + if (!string.IsNullOrEmpty(specifiedFileName)) + { + tempFileName = specifiedFileName; + } + + SaveFileName = tempFileName; + } + + /// + /// Serializes the contents of the achievements array to a serialized, ready to save object + /// + /// Serialized inventory. + public static void FillSerializedMMAchievementManager(SerializedMMAchievementManager serializedAchievements) + { + serializedAchievements.Achievements = new SerializedMMAchievement[_achievements.Count]; + + for (int i = 0; i < _achievements.Count(); i++) + { + SerializedMMAchievement newAchievement = new SerializedMMAchievement (_achievements[i].AchievementID, _achievements[i].UnlockedStatus, _achievements[i].ProgressCurrent); + serializedAchievements.Achievements [i] = newAchievement; + } + } + + /// + /// Extracts the serialized achievements into our achievements array if the achievements ID match. + /// + /// Serialized achievements. + public static void ExtractSerializedMMAchievementManager(SerializedMMAchievementManager serializedAchievements) + { + if (serializedAchievements == null) + { + return; + } + + for (int i = 0; i < _achievements.Count(); i++) + { + for (int j=0; j + /// That class is meant to be extended to implement the achievement rules specific to your game. + /// + public abstract class MMAchievementRules : MonoBehaviour, MMEventListener + { + public MMAchievementList AchievementList; + [MMInspectorButton("PrintCurrentStatus")] + public bool PrintCurrentStatusBtn; + + public virtual void PrintCurrentStatus() + { + foreach (MMAchievement achievement in MMAchievementManager.AchievementsList) + { + string status = achievement.UnlockedStatus ? "unlocked" : "locked"; + MMDebug.DebugLogInfo("["+achievement.AchievementID + "] "+achievement.Title+", status : "+status+", progress : "+achievement.ProgressCurrent+"/"+achievement.ProgressTarget); + } + } + + /// + /// On Awake, loads the achievement list and the saved file + /// + protected virtual void Awake() + { + // we load the list of achievements, stored in a ScriptableObject in our Resources folder. + MMAchievementManager.LoadAchievementList (AchievementList); + // we load our saved file, to update that list with the saved values. + MMAchievementManager.LoadSavedAchievements (); + } + + /// + /// On enable, we start listening for MMGameEvents. You may want to extend that to listen to other types of events. + /// + protected virtual void OnEnable() + { + this.MMEventStartListening(); + } + + /// + /// On disable, we stop listening for MMGameEvents. You may want to extend that to stop listening to other types of events. + /// + protected virtual void OnDisable() + { + this.MMEventStopListening(); + } + + /// + /// When we catch an MMGameEvent, we do stuff based on its name + /// + /// Game event. + public virtual void OnMMEvent(MMGameEvent gameEvent) + { + switch (gameEvent.EventName) + { + case "Save": + MMAchievementManager.SaveAchievements (); + break; + /* + // These are just examples of how you could catch a GameStart MMGameEvent and trigger the potential unlock of a corresponding achievement + case "GameStart": + MMAchievementManager.UnlockAchievement("theFirestarter"); + break; + case "LifeLost": + MMAchievementManager.UnlockAchievement("theEndOfEverything"); + break; + case "Pause": + MMAchievementManager.UnlockAchievement("timeStop"); + break; + case "Jump": + MMAchievementManager.UnlockAchievement ("aSmallStepForMan"); + MMAchievementManager.AddProgress ("toInfinityAndBeyond", 1); + break;*/ + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementRules.cs.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementRules.cs.meta new file mode 100644 index 0000000..d7cc70b --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/MMAchievementRules.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2c7c529377dc843a9a2316262550c4d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - AchievementList: {fileID: 11400000, guid: 18225175314a9854581d8d6262302958, type: 2} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/SerializedMMAchievementManager.cs b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/SerializedMMAchievementManager.cs new file mode 100644 index 0000000..39a3809 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/SerializedMMAchievementManager.cs @@ -0,0 +1,39 @@ +using UnityEngine; +using System.Collections; +using System; + +namespace MoreMountains.Tools +{ + [Serializable] + /// + /// A serializable class used to store an achievement into a save file + /// + public class SerializedMMAchievement + { + public string AchievementID; + public bool UnlockedStatus; + public int ProgressCurrent; + + /// + /// Initializes a new instance of the class. + /// + /// Achievement I. + /// If set to true unlocked status. + /// Progress current. + public SerializedMMAchievement(string achievementID, bool unlockedStatus, int progressCurrent) + { + AchievementID = achievementID; + UnlockedStatus = unlockedStatus; + ProgressCurrent = progressCurrent; + } + } + + [Serializable] + /// + /// Serializable MM achievement manager. + /// + public class SerializedMMAchievementManager + { + public SerializedMMAchievement[] Achievements; + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/SerializedMMAchievementManager.cs.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/SerializedMMAchievementManager.cs.meta new file mode 100644 index 0000000..6c9219c --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Scripts/SerializedMMAchievementManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 24f964aa3d55241b591bc1da7903819e +timeCreated: 1480085861 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites.meta new file mode 100644 index 0000000..e667666 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 7fee60bb7a0474e9bad63c409ba9e02d +folderAsset: yes +timeCreated: 1479996221 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackground.png b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackground.png new file mode 100644 index 0000000..dd09ede Binary files /dev/null and b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackground.png differ diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackground.png.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackground.png.meta new file mode 100644 index 0000000..5b0b4c4 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackground.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: cecdbf60b0c9d47c9a26b99a41425de0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 16 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 32, y: 32, z: 32, w: 32} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackgroundUnlocked.png b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackgroundUnlocked.png new file mode 100644 index 0000000..429c279 Binary files /dev/null and b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackgroundUnlocked.png differ diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackgroundUnlocked.png.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackgroundUnlocked.png.meta new file mode 100644 index 0000000..4ad53e5 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementBackgroundUnlocked.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: c379ef0fb8ae144a5b0a0b1d0c02d125 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementIcon.png b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementIcon.png new file mode 100644 index 0000000..e9c7f05 Binary files /dev/null and b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementIcon.png differ diff --git a/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementIcon.png.meta b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementIcon.png.meta new file mode 100644 index 0000000..5dbf03e --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAchievements/Sprites/AchievementIcon.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 16a86a7f581fc4dfb953e0df8ad3ecac +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation.meta b/Assets/Feel/MMTools/Foundation/MMAnimation.meta new file mode 100644 index 0000000..755deff --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bcac673537fad024f8be0aea6ced689b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationModifier.cs b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationModifier.cs new file mode 100644 index 0000000..00e2a29 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationModifier.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Add this script to an animation in Mecanim and you'll be able to control its start position and speed + /// + [AddComponentMenu("More Mountains/Tools/Animation/MMAnimationModifier")] + public class MMAnimationModifier : StateMachineBehaviour + { + [MMVectorAttribute("Min", "Max")] + /// the min and max values for the start position of the animation (between 0 and 1) + public Vector2 StartPosition = new Vector2(0, 0); + + [MMVectorAttribute("Min", "Max")] + /// the min and max values for the animation speed (1 is normal) + public Vector2 AnimationSpeed = new Vector2(1, 1); + + protected bool _enteredState = false; + protected float _initialSpeed; + + /// + /// On state enter, we modify our speed and start position + /// + /// + /// + /// + public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) + { + base.OnStateEnter(animator, stateInfo, layerIndex); + + // handle speed + _initialSpeed = animator.speed; + animator.speed = Random.Range(AnimationSpeed.x, AnimationSpeed.y); + + // handle start position + if (!_enteredState) + { + animator.Play(stateInfo.fullPathHash, layerIndex, Random.Range(StartPosition.x, StartPosition.y)); + } + _enteredState = !_enteredState; + } + + /// + /// On state exit, we restore our speed + /// + /// + /// + /// + public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) + { + base.OnStateExit(animator, stateInfo, layerIndex); + animator.speed = _initialSpeed; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationModifier.cs.meta b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationModifier.cs.meta new file mode 100644 index 0000000..26c33d4 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationModifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ba4bd496d6656d4da1541ce7071ed10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationParameter.cs b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationParameter.cs new file mode 100644 index 0000000..e821336 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationParameter.cs @@ -0,0 +1,68 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A helper class that will hash a animation parameter and update it on demand + /// + [AddComponentMenu("More Mountains/Tools/Animation/MMAnimationParameter")] + public class MMAnimationParameter : MonoBehaviour + { + /// the name of the animation parameter to hash + public string ParameterName; + /// the animator to update + public Animator TargetAnimator; + + protected int _parameter; + + /// + /// On awake we initialize our class + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// Hashes the parameter name into an int + /// + protected virtual void Initialization() + { + _parameter = Animator.StringToHash(ParameterName); + } + + /// + /// Sets the trigger of the specified name + /// + public virtual void SetTrigger() + { + TargetAnimator.SetTrigger(_parameter); + } + + /// + /// Sets the int of the specified name to the specified value + /// + public virtual void SetInt(int value) + { + TargetAnimator.SetInteger(_parameter, value); + } + + /// + /// Sets the float of the specified name to the specified value + /// + public virtual void SetFloat(float value) + { + TargetAnimator.SetFloat(_parameter, value); + } + + /// + /// Sets the bool of the specified name to the specified value + /// + public virtual void SetBool(bool value) + { + TargetAnimator.SetBool(_parameter, value); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationParameter.cs.meta b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationParameter.cs.meta new file mode 100644 index 0000000..013f9b0 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimationParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5451e999c8f9dfb41aa3b2894ffc3d60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimatorMirror.cs b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimatorMirror.cs new file mode 100644 index 0000000..f7fa491 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimatorMirror.cs @@ -0,0 +1,133 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// This class will let you mirror the behaviour of an Animator's parameters on a Source Animator onto the ones of a Target Animator. + /// Target will mirror Source. + /// Only the parameters existing on both Target and Source will be considered, you'll need to have the same on both before entering runtime. + /// + public class MMAnimatorMirror : MonoBehaviour + { + /// a struct used to store bindings + public struct MMAnimatorMirrorBind + { + public int ParameterHash; + public AnimatorControllerParameterType ParameterType; + } + + [Header("Bindings")] + /// the animator to mirror + public Animator SourceAnimator; + /// the animator to mirror to + public Animator TargetAnimator; + + protected AnimatorControllerParameter[] _sourceParameters; + protected AnimatorControllerParameter[] _targetParameters; + protected List _updateParameters; + + /// + /// On Awake we initialize + /// + protected virtual void Awake() + { + Initialization(); + } + + /// + /// Stores animation parameters hashes + /// + public virtual void Initialization() + { + if (TargetAnimator == null) + { + TargetAnimator = this.gameObject.GetComponent(); + } + + if ((TargetAnimator == null) || (SourceAnimator == null)) + { + return; + } + + // we store our source parameters + int numberOfParameters = SourceAnimator.parameterCount; + _sourceParameters = new AnimatorControllerParameter[numberOfParameters]; + for (int i = 0; i < numberOfParameters; i++) + { + _sourceParameters[i] = SourceAnimator.GetParameter(i); + } + + // we store our target parameters + numberOfParameters = TargetAnimator.parameterCount; + _targetParameters = new AnimatorControllerParameter[numberOfParameters]; + for (int i = 0; i < numberOfParameters; i++) + { + _targetParameters[i] = TargetAnimator.GetParameter(i); + } + + // we store our matching parameters + _updateParameters = new List(); + + foreach (AnimatorControllerParameter sourceParam in _sourceParameters) + { + foreach (AnimatorControllerParameter targetParam in _targetParameters) + { + if (sourceParam.name == targetParam.name) + { + MMAnimatorMirrorBind bind = new MMAnimatorMirrorBind(); + bind.ParameterHash = sourceParam.nameHash; + bind.ParameterType = sourceParam.type; + _updateParameters.Add(bind); + } + } + } + } + + /// + /// On Update we mirror our behaviours + /// + protected virtual void Update() + { + Mirror(); + } + + /// + /// Copies animation parameter states from one animator to the other + /// + protected virtual void Mirror() + { + if ((TargetAnimator == null) || (SourceAnimator == null)) + { + return; + } + + foreach (MMAnimatorMirrorBind bind in _updateParameters) + { + switch (bind.ParameterType) + { + case AnimatorControllerParameterType.Bool: + TargetAnimator.SetBool(bind.ParameterHash, SourceAnimator.GetBool(bind.ParameterHash)); + break; + case AnimatorControllerParameterType.Float: + TargetAnimator.SetFloat(bind.ParameterHash, SourceAnimator.GetFloat(bind.ParameterHash)); + break; + case AnimatorControllerParameterType.Int: + TargetAnimator.SetInteger(bind.ParameterHash, SourceAnimator.GetInteger(bind.ParameterHash)); + break; + case AnimatorControllerParameterType.Trigger: + if (SourceAnimator.GetBool(bind.ParameterHash)) + { + TargetAnimator.SetTrigger(bind.ParameterHash); + } + else + { + TargetAnimator.ResetTrigger(bind.ParameterHash); + } + break; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimatorMirror.cs.meta b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimatorMirror.cs.meta new file mode 100644 index 0000000..404bafe --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMAnimatorMirror.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5d1374627ebc7d4491c7eb256713f69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMOffsetAnimation.cs b/Assets/Feel/MMTools/Foundation/MMAnimation/MMOffsetAnimation.cs new file mode 100644 index 0000000..203ac70 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMOffsetAnimation.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Collections; + +namespace MoreMountains.Tools +{ + /// + /// Use this class to offset an animation by a random range + /// + [RequireComponent(typeof(Animator))] + [AddComponentMenu("More Mountains/Tools/Animation/MMOffsetAnimation")] + public class MMOffsetAnimation : MonoBehaviour + { + /// the minimum amount (in seconds) by which to offset the animation + public float MinimumRandomRange = 0f; + /// the maximum amount (in seconds) by which to offset the animation + public float MaximumRandomRange = 1f; + /// the layer to affect + public int AnimationLayerID = 0; + /// whether or not to apply that offset on Start + public bool OffsetOnStart = true; + /// whether or not to offset animation on enable + public bool OffsetOnEnable = false; + /// whether or not to self disable after offsetting + public bool DisableAfterOffset = true; + + protected Animator _animator; + protected AnimatorStateInfo _stateInfo; + + /// + /// On awake we store our animator + /// + protected virtual void Awake() + { + _animator = this.gameObject.GetComponent(); + } + + /// + /// On Start we offset our animation + /// + protected virtual void Start() + { + if (!OffsetOnStart) + { + return; + } + OffsetCurrentAnimation(); + } + + /// + /// On Enable we offset our animation if needed + /// + protected virtual void OnEnable() + { + if (!OffsetOnEnable) + { + return; + } + OffsetCurrentAnimation(); + } + + /// + /// offsets the target animation + /// + public virtual void OffsetCurrentAnimation() + { + _stateInfo = _animator.GetCurrentAnimatorStateInfo(AnimationLayerID); + _animator.Play(_stateInfo.fullPathHash, -1, Random.Range(MinimumRandomRange, MaximumRandomRange)); + if (DisableAfterOffset) + { + this.enabled = false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMOffsetAnimation.cs.meta b/Assets/Feel/MMTools/Foundation/MMAnimation/MMOffsetAnimation.cs.meta new file mode 100644 index 0000000..a8ccfa0 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMOffsetAnimation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c77c6d59898ea34989b338214db7de1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdoller.cs b/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdoller.cs new file mode 100644 index 0000000..3d336df --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdoller.cs @@ -0,0 +1,326 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// A class used to store ragdoll body parts informations + /// + public class RagdollBodyPart + { + public Transform BodyPartTransform; + public Vector3 StoredPosition; + public Quaternion StoredRotation; + } + + /// + /// Use this class to pilot a ragdoll on a character that is usually driven by an animator and have it fall elegantly + /// If you have parts of your ragdoll that you don't want to be affected by this script (a weapon for example), just add a MMRagdollerIgnore component to them + /// + [AddComponentMenu("More Mountains/Tools/Animation/MMRagdoller")] + public class MMRagdoller : MonoBehaviour + { + /// + /// The possible states of the ragdoll : + /// - animated : driven by an animator controller, rigidbodies asleep + /// - ragdolling : full ragdoll mode, purely physics driven + /// - blending : transitioning between ragdolling and animated + /// + public enum RagdollStates + { + Animated, + Ragdolling, + Blending + } + + [Header("Ragdoll")] + /// the current state of the ragdoll + public RagdollStates CurrentState = RagdollStates.Animated; + /// the duration in seconds it takes to blend from Ragdolling to Animated + public float RagdollToMecanimBlendDuration = 0.5f; + + [Header("Rigidbodies")] + /// The rigidbody attached to the main body part of the ragdoll (usually the Pelvis) + public Rigidbody MainRigidbody; + /// if this is true, all rigidbodies will be forced to sleep every frame + public bool ForceSleep = true; + /// whether or not blending will occur when going from ragdolling to animated + public bool AllowBlending = true; + + protected float _mecanimToGetUpTransitionTime = 0.05f; + protected float _ragdollingEndTimestamp = -float.MaxValue; + protected Vector3 _ragdolledHipPosition; + protected Vector3 _ragdolledHeadPosition; + protected Vector3 _ragdolledFeetPosition; + protected List _bodyparts = new List(); + protected Animator _animator; + protected List _rigidbodiesTempList; + protected Component[] _rigidbodies; + protected HashSet _animatorParameters; + + protected const string _getUpFromBackAnimationParameterName = "GetUpFromBack"; + protected int _getUpFromBackAnimationParameter; + protected const string _getUpFromBellyAnimationParameterName = "GetUpFromBelly"; + protected int _getUpFromBellyAnimationParameter; + protected bool _initialized = false; + + /// + /// Use this to get the current state of the ragdoll or to set a new one + /// + public bool Ragdolling + { + get + { + // if we're not animated, we're ragdolling + return CurrentState != RagdollStates.Animated; + } + set + { + if (value == true) + { + // if we're + if (CurrentState == RagdollStates.Animated) + { + SetIsKinematic(false); + _animator.enabled = false; + CurrentState = RagdollStates.Ragdolling; + MMAnimatorExtensions.UpdateAnimatorBool(_animator, _getUpFromBackAnimationParameter, false, _animatorParameters); + MMAnimatorExtensions.UpdateAnimatorBool(_animator, _getUpFromBellyAnimationParameter, false, _animatorParameters); + } + } + else + { + if (CurrentState == RagdollStates.Ragdolling) + { + SetIsKinematic(true); + _ragdollingEndTimestamp = Time.time; + _animator.enabled = true; + + CurrentState = AllowBlending ? RagdollStates.Blending: RagdollStates.Animated; + + + foreach (RagdollBodyPart bodypart in _bodyparts) + { + bodypart.StoredRotation = bodypart.BodyPartTransform.rotation; + bodypart.StoredPosition = bodypart.BodyPartTransform.position; + } + + _ragdolledFeetPosition = 0.5f * (_animator.GetBoneTransform(HumanBodyBones.LeftToes).position + _animator.GetBoneTransform(HumanBodyBones.RightToes).position); + _ragdolledHeadPosition = _animator.GetBoneTransform(HumanBodyBones.Head).position; + _ragdolledHipPosition = _animator.GetBoneTransform(HumanBodyBones.Hips).position; + + if (_animator.GetBoneTransform(HumanBodyBones.Hips).forward.y > 0) + { + MMAnimatorExtensions.UpdateAnimatorBool(_animator, _getUpFromBackAnimationParameter, true, _animatorParameters); + } + else + { + MMAnimatorExtensions.UpdateAnimatorBool(_animator, _getUpFromBellyAnimationParameter, true, _animatorParameters); + } + } + } + } + } + + /// + /// On start we initialize our ragdoller + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// Grabs rigidbodies, adds body parts and stores the animator + /// + protected virtual void Initialization() + { + // we grab all rigidbodies and set them to kinematic + _rigidbodies = GetComponentsInChildren(typeof(Rigidbody)); + + _rigidbodiesTempList = new List(); + foreach (Component rigidbody in _rigidbodies) + { + if (rigidbody.gameObject.MMGetComponentNoAlloc() == null) + { + _rigidbodiesTempList.Add(rigidbody); + } + } + + _rigidbodies = null; + _rigidbodies = _rigidbodiesTempList.ToArray(); + + + if (CurrentState == RagdollStates.Animated) + { + SetIsKinematic(true); + } + else + { + SetIsKinematic(false); + } + + // we grab all transforms and add a RagdollBodyPart to them + Component[] transforms = GetComponentsInChildren(typeof(Transform)); + foreach (Component component in transforms) + { + if (component.transform != this.transform) + { + RagdollBodyPart bodyPart = new RagdollBodyPart { BodyPartTransform = component as Transform }; + _bodyparts.Add(bodyPart); + } + } + + // we store our animator + _animator = this.gameObject.GetComponent(); + RegisterAnimatorParameters(); + + _initialized = true; + } + + /// + /// Registers our animation parameters + /// + protected virtual void RegisterAnimatorParameters() + { + _animatorParameters = new HashSet(); + + _getUpFromBackAnimationParameter = Animator.StringToHash(_getUpFromBackAnimationParameterName); + _getUpFromBellyAnimationParameter = Animator.StringToHash(_getUpFromBellyAnimationParameterName); + + if (_animator == null) + { + return; + } + if (_animator.MMHasParameterOfType(_getUpFromBackAnimationParameterName, AnimatorControllerParameterType.Bool)) + { + _animatorParameters.Add(_getUpFromBackAnimationParameter); + } + if (_animator.MMHasParameterOfType(_getUpFromBellyAnimationParameterName, AnimatorControllerParameterType.Bool)) + { + _animatorParameters.Add(_getUpFromBellyAnimationParameter); + } + } + + /// + /// Sets all rigidbodies in the ragdoll to kinematic and stops them from detecting collisions (or the other way around) + /// + /// + protected virtual void SetIsKinematic(bool isKinematic) + { + foreach (Component rigidbody in _rigidbodies) + { + if (rigidbody.transform != this.transform) + { + (rigidbody as Rigidbody).detectCollisions = !isKinematic; + (rigidbody as Rigidbody).isKinematic = isKinematic; + } + } + } + + /// + /// Forces all rigidbodies in the ragdoll to sleep + /// + public virtual void ForceRigidbodiesToSleep() + { + foreach (Component rigidbody in _rigidbodies) + { + if (rigidbody.transform != this.transform) + { + (rigidbody as Rigidbody).Sleep(); + } + } + } + + /// + /// On late update, we force our ragdoll elements to sleep and handle blending + /// + protected virtual void LateUpdate() + { + if ((CurrentState == RagdollStates.Animated) && ForceSleep) + { + ForceRigidbodiesToSleep(); + } + + HandleBlending(); + } + + /// + /// Blends between ragdolling and animated and switches to Animated at the end + /// + protected virtual void HandleBlending() + { + if (CurrentState == RagdollStates.Blending) + { + if (Time.time <= _ragdollingEndTimestamp + _mecanimToGetUpTransitionTime) + { + transform.position = GetRootPosition(); + + Vector3 ragdollingDirection = _ragdolledHeadPosition - _ragdolledFeetPosition; + ragdollingDirection.y = 0; + + Vector3 meanFeetPosition = 0.5f * (_animator.GetBoneTransform(HumanBodyBones.LeftFoot).position + _animator.GetBoneTransform(HumanBodyBones.RightFoot).position); + Vector3 animatedDirection = _animator.GetBoneTransform(HumanBodyBones.Head).position - meanFeetPosition; + animatedDirection.y = 0; + + transform.rotation *= Quaternion.FromToRotation(animatedDirection.normalized, ragdollingDirection.normalized); + } + float ragdollBlendAmount = 1.0f - (Time.time - _ragdollingEndTimestamp - _mecanimToGetUpTransitionTime) / RagdollToMecanimBlendDuration; + ragdollBlendAmount = Mathf.Clamp01(ragdollBlendAmount); + + foreach (RagdollBodyPart bodypart in _bodyparts) + { + if (bodypart.BodyPartTransform != transform) + { + if (bodypart.BodyPartTransform == _animator.GetBoneTransform(HumanBodyBones.Hips)) + { + bodypart.BodyPartTransform.position = Vector3.Lerp(bodypart.BodyPartTransform.position, bodypart.StoredPosition, ragdollBlendAmount); + } + bodypart.BodyPartTransform.rotation = Quaternion.Slerp(bodypart.BodyPartTransform.rotation, bodypart.StoredRotation, ragdollBlendAmount); + } + } + + if (ragdollBlendAmount == 0) + { + CurrentState = RagdollStates.Animated; + return; + } + } + } + + /// + /// Returns the current position of the ragdoll (technically the hips position) + /// + /// + public Vector3 GetPosition() + { + if (!_initialized) + { + Initialization(); + } + Vector3 newPosition = (_animator.GetBoneTransform(HumanBodyBones.Hips) == null) ? MainRigidbody.position : _animator.GetBoneTransform(HumanBodyBones.Hips).position; + return newPosition; + } + + /// + /// Returns the offset root position + /// + /// + protected Vector3 GetRootPosition() + { + Vector3 ragdollPosition = (_animator.GetBoneTransform(HumanBodyBones.Hips) == null) ? MainRigidbody.position : _animator.GetBoneTransform(HumanBodyBones.Hips).position; + Vector3 animatedToRagdolling = _ragdolledHipPosition - ragdollPosition; + Vector3 newRootPosition = transform.position + animatedToRagdolling; + RaycastHit[] hits = Physics.RaycastAll(new Ray(newRootPosition, Vector3.down)); + newRootPosition.y = 0; + foreach (RaycastHit hit in hits) + { + if (!hit.transform.IsChildOf(transform)) + { + newRootPosition.y = Mathf.Max(newRootPosition.y, hit.point.y); + } + } + return newRootPosition; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdoller.cs.meta b/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdoller.cs.meta new file mode 100644 index 0000000..986fcc9 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdoller.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9687a46a55ccbca4f92cdff319b70844 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdollerIgnore.cs b/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdollerIgnore.cs new file mode 100644 index 0000000..4fe97f0 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdollerIgnore.cs @@ -0,0 +1,15 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace MoreMountains.Tools +{ + /// + /// Add this class to objects you'd like to be unaffected by the MMRagdoller (like weapons for example) + /// + [AddComponentMenu("More Mountains/Tools/Animation/MMRagdollerIgnore")] + public class MMRagdollerIgnore : MonoBehaviour + { + + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdollerIgnore.cs.meta b/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdollerIgnore.cs.meta new file mode 100644 index 0000000..173afc1 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMRagdollerIgnore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38f5f99a403324842b72d7bb5d781405 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMStopMotionAnimation.cs b/Assets/Feel/MMTools/Foundation/MMAnimation/MMStopMotionAnimation.cs new file mode 100644 index 0000000..e5b3670 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMStopMotionAnimation.cs @@ -0,0 +1,94 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + [AddComponentMenu("More Mountains/Tools/Animation/MMStopMotionAnimation")] + public class MMStopMotionAnimation : MonoBehaviour + { + public enum FramerateModes { Manual, Automatic } + + [Header("General Settings")] + public bool StopMotionEnabled = true; + public int AnimationLayerID = 0; + + [Header("Framerate")] + public FramerateModes FramerateMode = FramerateModes.Automatic; + + [MMEnumCondition("FramerateMode", (int)FramerateModes.Automatic)] + public float FramesPerSecond = 4f; + [MMEnumCondition("FramerateMode", (int)FramerateModes.Automatic)] + public float PollFrequency = 1f; + + [MMEnumCondition("FramerateMode", (int)FramerateModes.Manual)] + public float ManualTimeBetweenFrames = 0.125f; + [MMEnumCondition("FramerateMode", (int)FramerateModes.Manual)] + public float ManualAnimatorSpeed = 2; + + public float timet = 0; + + protected float _currentClipFPS = 0; + protected float _currentClipLength = 0f; + protected float _lastPollAt = -10f; + protected Animator _animator; + protected AnimationClip _currentClip; + + protected virtual void Awake() + { + _animator = this.gameObject.GetComponent(); + } + + protected virtual void Update() + { + StopMotion(); + + if (Time.time - _lastPollAt > PollFrequency) + { + Poll(); + } + } + + protected virtual void StopMotion() + { + if (!StopMotionEnabled) + { + return; + } + + float timeBetweenFrames = 0f; + float animatorSpeed = 0f; + + switch(FramerateMode) + { + case FramerateModes.Manual: + timeBetweenFrames = ManualTimeBetweenFrames; + animatorSpeed = ManualAnimatorSpeed; + break; + case FramerateModes.Automatic: + timeBetweenFrames = (1 / FramesPerSecond); + animatorSpeed = (1 / (FramesPerSecond - 1)) * 2f * _currentClipFPS; + break; + } + + timet += Time.deltaTime; + if (timet > timeBetweenFrames) + { + timet -= timeBetweenFrames; + _animator.speed = animatorSpeed; + } + else + { + _animator.speed = 0; + } + } + + protected virtual void Poll() + { + _currentClip = _animator.GetCurrentAnimatorClipInfo(AnimationLayerID)[0].clip; + _currentClipLength = _currentClip.length; + _currentClipFPS = _currentClip.frameRate; + _lastPollAt = Time.time; + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMAnimation/MMStopMotionAnimation.cs.meta b/Assets/Feel/MMTools/Foundation/MMAnimation/MMStopMotionAnimation.cs.meta new file mode 100644 index 0000000..3e64152 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMAnimation/MMStopMotionAnimation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 409ecbe35fc2afd4b82ade0142839256 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls.meta b/Assets/Feel/MMTools/Foundation/MMControls.meta new file mode 100644 index 0000000..beb2f4a --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 92a846d385f0b4102b3984953a3501e2 +folderAsset: yes +timeCreated: 1462366972 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMControlsTestInputManager.cs b/Assets/Feel/MMTools/Foundation/MMControls/MMControlsTestInputManager.cs new file mode 100644 index 0000000..f2fb5c7 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMControlsTestInputManager.cs @@ -0,0 +1,79 @@ +using UnityEngine; +using System.Collections; +using MoreMountains.Tools; + +#if MM_UI + +namespace MoreMountains.Tools +{ + /// + /// This persistent singleton handles the inputs and sends commands to the player in the MMControls demo, its sole purpose is to output debug logs of the various interactions with the demo's inputs + /// + public class MMControlsTestInputManager : MonoBehaviour, MMEventListener + { + // on start, we force a high target frame rate for a more fluid experience on mobile devices + protected virtual void Start() + { + Application.targetFrameRate = 300; + } + + public virtual void LeftJoystickMovement(Vector2 movement) { MMDebug.DebugOnScreen("left joystick",movement); } + public virtual void RightJoystickMovement(Vector2 movement) { MMDebug.DebugOnScreen("right joystick", movement); } + public virtual void RepositionableJoystickMovement(Vector2 movement) { MMDebug.DebugOnScreen("Repositionable joystick", movement); } + public virtual void FollowerJoystickMovement(Vector2 movement) { MMDebug.DebugOnScreen("Follower joystick", movement); } + + public virtual void APressed() { MMDebug.DebugOnScreen("Button A Pressed"); } + public virtual void BPressed() { MMDebug.DebugOnScreen("Button B Pressed"); } + public virtual void XPressed() { MMDebug.DebugOnScreen("Button X Pressed"); } + public virtual void YPressed() { MMDebug.DebugOnScreen("Button Y Pressed"); } + public virtual void RTPressed() { MMDebug.DebugOnScreen("Button RT Pressed"); } + + public virtual void APressedFirstTime() { Debug.LogFormat("Button A Pressed for the first time"); } + public virtual void BPressedFirstTime() { Debug.LogFormat("Button B Pressed for the first time"); } + public virtual void XPressedFirstTime() { Debug.LogFormat("Button X Pressed for the first time"); } + public virtual void YPressedFirstTime() { Debug.LogFormat("Button Y Pressed for the first time"); } + public virtual void RTPressedFirstTime() { Debug.LogFormat("Button RT Pressed for the first time"); } + + public virtual void AReleased() { Debug.LogFormat("Button A Released"); } + public virtual void BReleased() { Debug.LogFormat("Button B Released"); } + public virtual void XReleased() { Debug.LogFormat("Button X Released"); } + public virtual void YReleased() { Debug.LogFormat("Button Y Released"); } + public virtual void RTReleased() { Debug.LogFormat("Button RT Released"); } + + public virtual void HorizontalAxisPressed(float value) { MMDebug.DebugOnScreen("horizontal movement",value); } + public virtual void VerticalAxisPressed(float value) { MMDebug.DebugOnScreen("vertical movement",value); } + + public virtual void LeftPressedFirstTime() { Debug.LogFormat("Button Left Pressed for the first time"); } + public virtual void UpPressedFirstTime() { Debug.LogFormat("Button Up Pressed for the first time"); } + public virtual void DownPressedFirstTime() { Debug.LogFormat("Button Down Pressed for the first time"); } + public virtual void RightPressedFirstTime() { Debug.LogFormat("Button Right Pressed for the first time"); } + + public virtual void LeftReleased() { Debug.LogFormat("Button Left Released"); } + public virtual void UpReleased() { Debug.LogFormat("Button Up Released"); } + public virtual void DownReleased() { Debug.LogFormat("Button Down Released"); } + public virtual void RightReleased() { Debug.LogFormat("Button Right Released"); } + + public virtual void StickDragged() { Debug.LogFormat("On drag"); } + public virtual void StickPointerUp() { Debug.LogFormat("On pointer up"); } + public virtual void StickPointerDown() { Debug.LogFormat("On pointer down"); } + + public virtual void OnMMEvent(MMSwipeEvent swipeEvent) + { + Debug.LogFormat("Swipe at a "+ swipeEvent.SwipeAngle+"° angle, and a length of "+ swipeEvent.SwipeLength+" length. Cardinal direction : "+ swipeEvent.SwipeDirection); + Debug.LogFormat("Swipe origin : " + swipeEvent.SwipeOrigin+ ", swipe end : " + swipeEvent.SwipeDestination); + Debug.LogFormat("Swipe duration : "+swipeEvent.SwipeDuration); + } + + protected virtual void OnEnable() + { + this.MMEventStartListening(); + } + + protected virtual void OnDisable() + { + this.MMEventStopListening(); + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMControlsTestInputManager.cs.meta b/Assets/Feel/MMTools/Foundation/MMControls/MMControlsTestInputManager.cs.meta new file mode 100644 index 0000000..d5d4a04 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMControlsTestInputManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9640016db57d1c646a90fa18111eebf0 +timeCreated: 1462436657 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMSwipeZone.cs b/Assets/Feel/MMTools/Foundation/MMControls/MMSwipeZone.cs new file mode 100644 index 0000000..bc8c930 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMSwipeZone.cs @@ -0,0 +1,225 @@ +#if MM_UI +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +using UnityEngine.Events; +using UnityEngine.EventSystems; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace MoreMountains.Tools +{ + /// + /// The possible directions a swipe can have + /// + public enum MMPossibleSwipeDirections { Up, Down, Left, Right } + + + [System.Serializable] + public class SwipeEvent : UnityEvent {} + + /// + /// An event usually triggered when a swipe happens. It contains the swipe "base" direction, and detailed information if needed (angle, length, origin and destination + /// + public struct MMSwipeEvent + { + public MMPossibleSwipeDirections SwipeDirection; + public float SwipeAngle; + public float SwipeLength; + public Vector2 SwipeOrigin; + public Vector2 SwipeDestination; + public float SwipeDuration; + + /// + /// Initializes a new instance of the struct. + /// + /// Direction. + /// Angle. + /// Length. + /// Origin. + /// Destination. + public MMSwipeEvent(MMPossibleSwipeDirections direction, float angle, float length, Vector2 origin, Vector2 destination, float swipeDuration) + { + SwipeDirection = direction; + SwipeAngle = angle; + SwipeLength = length; + SwipeOrigin = origin; + SwipeDestination = destination; + SwipeDuration = swipeDuration; + } + + static MMSwipeEvent e; + public static void Trigger(MMPossibleSwipeDirections direction, float angle, float length, Vector2 origin, Vector2 destination, float swipeDuration) + { + e.SwipeDirection = direction; + e.SwipeAngle = angle; + e.SwipeLength = length; + e.SwipeOrigin = origin; + e.SwipeDestination = destination; + e.SwipeDuration = swipeDuration; + MMEventManager.TriggerEvent(e); + } + } + + /// + /// Add a swipe manager to your scene, and it'll trigger MMSwipeEvents everytime a swipe happens. From its inspector you can determine the minimal length of a swipe. Shorter swipes will be ignored + /// + [RequireComponent(typeof(RectTransform))] + [AddComponentMenu("More Mountains/Tools/Controls/MMSwipeZone")] + public class MMSwipeZone : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerEnterHandler + { + /// the minimal length of a swipe + [Tooltip("the minimal length of a swipe")] + public float MinimalSwipeLength = 50f; + /// the maximum press length of a swipe + [Tooltip("the maximum press length of a swipe")] + public float MaximumPressLength = 10f; + + /// The method(s) to call when the zone is swiped + [Tooltip("The method(s) to call when the zone is swiped")] + public SwipeEvent ZoneSwiped; + /// The method(s) to call while the zone is being pressed + [Tooltip("The method(s) to call while the zone is being pressed")] + public UnityEvent ZonePressed; + + [Header("Mouse Mode")] + [MMInformation("If you set this to true, you'll need to actually press the button for it to be triggered, otherwise a simple hover will trigger it (better for touch input).", MMInformationAttribute.InformationType.Info,false)] + /// If you set this to true, you'll need to actually press the button for it to be triggered, otherwise a simple hover will trigger it (better for touch input). + [Tooltip("If you set this to true, you'll need to actually press the button for it to be triggered, otherwise a simple hover will trigger it (better for touch input).")] + public bool MouseMode = false; + + protected Vector2 _firstTouchPosition; + protected float _angle; + protected float _length; + protected Vector2 _destination; + protected Vector2 _deltaSwipe; + protected MMPossibleSwipeDirections _swipeDirection; + protected float _lastPointerUpAt = 0f; + protected float _swipeStartedAt = 0f; + protected float _swipeEndedAt = 0f; + + /// + /// Invokes a swipe event with the correct properties + /// + protected virtual void Swipe() + { + float duration = _swipeEndedAt - _swipeStartedAt; + MMSwipeEvent swipeEvent = new MMSwipeEvent (_swipeDirection, _angle, _length, _firstTouchPosition, _destination, duration); + MMEventManager.TriggerEvent(swipeEvent); + if (ZoneSwiped != null) + { + ZoneSwiped.Invoke (swipeEvent); + } + } + + /// + /// Raises the press event + /// + protected virtual void Press() + { + if (ZonePressed != null) + { + ZonePressed.Invoke (); + } + } + + /// + /// Triggers the bound pointer down action + /// + public virtual void OnPointerDown(PointerEventData data) + { + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + _firstTouchPosition = Mouse.current.position.ReadValue(); + #else + _firstTouchPosition = Input.mousePosition; + #endif + _swipeStartedAt = Time.unscaledTime; + } + + /// + /// Triggers the bound pointer up action + /// + public virtual void OnPointerUp(PointerEventData data) + { + if (Time.frameCount == _lastPointerUpAt) + { + return; + } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + _destination = Mouse.current.position.ReadValue(); + #else + _destination = Input.mousePosition; + #endif + _deltaSwipe = _destination - _firstTouchPosition; + _length = _deltaSwipe.magnitude; + + // if the swipe has been long enough + if (_length > MinimalSwipeLength) + { + _angle = MMMaths.AngleBetween (_deltaSwipe, Vector2.right); + _swipeDirection = AngleToSwipeDirection (_angle); + _swipeEndedAt = Time.unscaledTime; + Swipe (); + } + + // if it's just a press + if (_deltaSwipe.magnitude < MaximumPressLength) + { + Press (); + } + + _lastPointerUpAt = Time.frameCount; + } + + /// + /// Triggers the bound pointer enter action when touch enters zone + /// + public virtual void OnPointerEnter(PointerEventData data) + { + if (!MouseMode) + { + OnPointerDown (data); + } + } + + /// + /// Triggers the bound pointer exit action when touch is out of zone + /// + public virtual void OnPointerExit(PointerEventData data) + { + if (!MouseMode) + { + OnPointerUp(data); + } + } + + /// + /// Determines a MMPossibleSwipeDirection out of an angle in degrees. + /// + /// The to swipe direction. + /// Angle in degrees. + protected virtual MMPossibleSwipeDirections AngleToSwipeDirection(float angle) + { + if ((angle < 45) || (angle >= 315)) + { + return MMPossibleSwipeDirections.Right; + } + if ((angle >= 45) && (angle < 135)) + { + return MMPossibleSwipeDirections.Up; + } + if ((angle >= 135) && (angle < 225)) + { + return MMPossibleSwipeDirections.Left; + } + if ((angle >= 225) && (angle < 315)) + { + return MMPossibleSwipeDirections.Down; + } + return MMPossibleSwipeDirections.Right; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMSwipeZone.cs.meta b/Assets/Feel/MMTools/Foundation/MMControls/MMSwipeZone.cs.meta new file mode 100644 index 0000000..e888658 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMSwipeZone.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5a68e615c17d2bf49a1a082e34fd9b6e +timeCreated: 1494336562 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchAxis.cs b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchAxis.cs new file mode 100644 index 0000000..a9b4bc6 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchAxis.cs @@ -0,0 +1,181 @@ +#if MM_UI +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +using UnityEngine.Events; +using UnityEngine.EventSystems; + +namespace MoreMountains.Tools +{ + [System.Serializable] + public class AxisEvent : UnityEvent {} + + /// + /// Add this component to a GUI Image to have it act as an axis. + /// Bind pressed down, pressed continually and released actions to it from the inspector + /// Handles mouse and multi touch + /// + [RequireComponent(typeof(Rect))] + [RequireComponent(typeof(CanvasGroup))] + [AddComponentMenu("More Mountains/Tools/Controls/MMTouchAxis")] + public class MMTouchAxis : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerEnterHandler + { + public enum ButtonStates { Off, ButtonDown, ButtonPressed, ButtonUp } + [Header("Binding")] + /// The method(s) to call when the axis gets pressed down + [Tooltip("The method(s) to call when the axis gets pressed down")] + public UnityEvent AxisPressedFirstTime; + /// The method(s) to call when the axis gets released + [Tooltip("The method(s) to call when the axis gets released")] + public UnityEvent AxisReleased; + /// The method(s) to call while the axis is being pressed + [Tooltip("The method(s) to call while the axis is being pressed")] + public AxisEvent AxisPressed; + + [Header("Pressed Behaviour")] + [MMInformation("Here you can set the opacity of the button when it's pressed. Useful for visual feedback.",MMInformationAttribute.InformationType.Info,false)] + /// the new opacity to apply to the canvas group when the axis is pressed + [Tooltip("the new opacity to apply to the canvas group when the axis is pressed")] + public float PressedOpacity = 0.5f; + /// the value to send the bound method when the axis is pressed + [Tooltip("the value to send the bound method when the axis is pressed")] + public float AxisValue; + + [Header("Mouse Mode")] + [MMInformation("If you set this to true, you'll need to actually press the axis for it to be triggered, otherwise a simple hover will trigger it (better for touch input).", MMInformationAttribute.InformationType.Info,false)] + /// If you set this to true, you'll need to actually press the axis for it to be triggered, otherwise a simple hover will trigger it (better for touch input). + [Tooltip("If you set this to true, you'll need to actually press the axis for it to be triggered, otherwise a simple hover will trigger it (better for touch input).")] + public bool MouseMode = false; + + public virtual ButtonStates CurrentState { get; protected set; } + + protected CanvasGroup _canvasGroup; + protected float _initialOpacity; + + /// + /// On Start, we get our canvasgroup and set our initial alpha + /// + protected virtual void Awake() + { + _canvasGroup = GetComponent(); + if (_canvasGroup!=null) + { + _initialOpacity = _canvasGroup.alpha; + } + ResetButton(); + } + + /// + /// Every frame, if the touch zone is pressed, we trigger the bound method if it exists + /// + protected virtual void Update() + { + if (AxisPressed != null) + { + if (CurrentState == ButtonStates.ButtonPressed) + { + AxisPressed.Invoke(AxisValue); + } + } + } + + /// + /// At the end of every frame, we change our button's state if needed + /// + protected virtual void LateUpdate() + { + if (CurrentState == ButtonStates.ButtonUp) + { + CurrentState = ButtonStates.Off; + } + if (CurrentState == ButtonStates.ButtonDown) + { + CurrentState = ButtonStates.ButtonPressed; + } + } + + /// + /// Triggers the bound pointer down action + /// + public virtual void OnPointerDown(PointerEventData data) + { + if (CurrentState != ButtonStates.Off) + { + return; + } + + CurrentState = ButtonStates.ButtonDown; + if (_canvasGroup!=null) + { + _canvasGroup.alpha=PressedOpacity; + } + if (AxisPressedFirstTime!=null) + { + AxisPressedFirstTime.Invoke(); + } + } + + /// + /// Triggers the bound pointer up action + /// + public virtual void OnPointerUp(PointerEventData data) + { + if (CurrentState != ButtonStates.ButtonPressed && CurrentState != ButtonStates.ButtonDown) + { + return; + } + + CurrentState = ButtonStates.ButtonUp; + if (_canvasGroup!=null) + { + _canvasGroup.alpha=_initialOpacity; + } + if (AxisReleased != null) + { + AxisReleased.Invoke(); + } + AxisPressed.Invoke(0); + } + + /// + /// OnEnable, we reset our button state + /// + protected virtual void OnEnable() + { + ResetButton(); + } + + /// + /// Resets the button's state and opacity + /// + protected virtual void ResetButton() + { + CurrentState = ButtonStates.Off; + _canvasGroup.alpha = _initialOpacity; + CurrentState = ButtonStates.Off; + } + + /// + /// Triggers the bound pointer enter action when touch enters zone + /// + public virtual void OnPointerEnter(PointerEventData data) + { + if (!MouseMode) + { + OnPointerDown (data); + } + } + + /// + /// Triggers the bound pointer exit action when touch is out of zone + /// + public virtual void OnPointerExit(PointerEventData data) + { + if (!MouseMode) + { + OnPointerUp(data); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchAxis.cs.meta b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchAxis.cs.meta new file mode 100644 index 0000000..7e042cc --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchAxis.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fc509a62d8e6cfc45a8431d8d586b9f6 +timeCreated: 1462615497 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchButton.cs b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchButton.cs new file mode 100644 index 0000000..99aca60 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchButton.cs @@ -0,0 +1,506 @@ +#if MM_UI +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +using UnityEngine.Events; +using UnityEngine.EventSystems; + +namespace MoreMountains.Tools +{ + /// + /// Add this component to a GUI Image to have it act as a button. + /// Bind pressed down, pressed continually and released actions to it from the inspector + /// Handles mouse and multi touch + /// + [RequireComponent(typeof(Rect))] + [RequireComponent(typeof(CanvasGroup))] + [AddComponentMenu("More Mountains/Tools/Controls/MMTouchButton")] + public class MMTouchButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerEnterHandler, ISubmitHandler + { + [Header("Interaction")] + /// whether or not this button can be interacted with + public bool Interactable = true; + + /// The different possible states for the button : + /// Off (default idle state), ButtonDown (button pressed for the first time), ButtonPressed (button being pressed), ButtonUp (button being released), Disabled (unclickable but still present on screen) + /// ButtonDown and ButtonUp will only last one frame, the others will last however long you press them / disable them / do nothing + public enum ButtonStates { Off, ButtonDown, ButtonPressed, ButtonUp, Disabled } + [Header("Binding")] + /// The method(s) to call when the button gets pressed down + [Tooltip("The method(s) to call when the button gets pressed down")] + public UnityEvent ButtonPressedFirstTime; + /// The method(s) to call when the button gets released + [Tooltip("The method(s) to call when the button gets released")] + public UnityEvent ButtonReleased; + /// The method(s) to call while the button is being pressed + [Tooltip("The method(s) to call while the button is being pressed")] + public UnityEvent ButtonPressed; + + [Header("Sprite Swap")] + [MMInformation("Here you can define, for disabled and pressed states, if you want a different sprite, and a different color.", MMInformationAttribute.InformationType.Info,false)] + /// the sprite to use on the button when it's in the disabled state + [Tooltip("the sprite to use on the button when it's in the disabled state")] + public Sprite DisabledSprite; + /// whether or not to change color when the button is disabled + [Tooltip("whether or not to change color when the button is disabled")] + public bool DisabledChangeColor = false; + /// the color to use when the button is disabled + [Tooltip("the color to use when the button is disabled")] + [MMCondition("DisabledChangeColor", true)] + public Color DisabledColor = Color.white; + /// the sprite to use on the button when it's in the pressed state + [Tooltip("the sprite to use on the button when it's in the pressed state")] + public Sprite PressedSprite; + /// whether or not to change the button color on press + [Tooltip("whether or not to change the button color on press")] + public bool PressedChangeColor = false; + /// the color to use when the button is pressed + [Tooltip("the color to use when the button is pressed")] + [MMCondition("PressedChangeColor", true)] + public Color PressedColor= Color.white; + /// the sprite to use on the button when it's in the highlighted state + [Tooltip("the sprite to use on the button when it's in the highlighted state")] + public Sprite HighlightedSprite; + /// whether or not to change color when highlighting the button + [Tooltip("whether or not to change color when highlighting the button")] + public bool HighlightedChangeColor = false; + /// the color to use when the button is highlighted + [Tooltip("the color to use when the button is highlighted")] + [MMCondition("HighlightedChangeColor", true)] + public Color HighlightedColor = Color.white; + + [Header("Opacity")] + [MMInformation("Here you can set different opacities for the button when it's pressed, idle, or disabled. Useful for visual feedback.",MMInformationAttribute.InformationType.Info,false)] + /// the new opacity to apply to the canvas group when the button is pressed + [Tooltip("the opacity to apply to the canvas group when the button is pressed")] + public float PressedOpacity = 1f; + /// the new opacity to apply to the canvas group when the button is idle + [Tooltip("the new opacity to apply to the canvas group when the button is idle")] + public float IdleOpacity = 1f; + /// the new opacity to apply to the canvas group when the button is disabled + [Tooltip("the new opacity to apply to the canvas group when the button is disabled")] + public float DisabledOpacity = 1f; + + [Header("Delays")] + [MMInformation("Specify here the delays to apply when the button is pressed initially, and when it gets released. Usually you'll keep them at 0.",MMInformationAttribute.InformationType.Info,false)] + /// the delay to apply to events when the button gets pressed for the first time + [Tooltip("the delay to apply to events when the button gets pressed for the first time")] + public float PressedFirstTimeDelay = 0f; + /// the delay to apply to events when the button gets released + [Tooltip("the delay to apply to events when the button gets released")] + public float ReleasedDelay = 0f; + + [Header("Buffer")] + /// the duration (in seconds) after a press during which the button can't be pressed again + [Tooltip("the duration (in seconds) after a press during which the button can't be pressed again")] + public float BufferDuration = 0f; + + [Header("Animation")] + [MMInformation("Here you can bind an animator, and specify animation parameter names for the various states.",MMInformationAttribute.InformationType.Info,false)] + /// an animator you can bind to this button to have its states updated to reflect the button's states + [Tooltip("an animator you can bind to this button to have its states updated to reflect the button's states")] + public Animator Animator; + /// the name of the animation parameter to turn true when the button is idle + [Tooltip("the name of the animation parameter to turn true when the button is idle")] + public string IdleAnimationParameterName = "Idle"; + /// the name of the animation parameter to turn true when the button is disabled + [Tooltip("the name of the animation parameter to turn true when the button is disabled")] + public string DisabledAnimationParameterName = "Disabled"; + /// the name of the animation parameter to turn true when the button is pressed + [Tooltip("the name of the animation parameter to turn true when the button is pressed")] + public string PressedAnimationParameterName = "Pressed"; + + [Header("Mouse Mode")] + [MMInformation("If you set this to true, you'll need to actually press the button for it to be triggered, otherwise a simple hover will trigger it (better to leave it unchecked if you're going for touch input).", MMInformationAttribute.InformationType.Info,false)] + /// If you set this to true, you'll need to actually press the button for it to be triggered, otherwise a simple hover will trigger it (better for touch input). + [Tooltip("If you set this to true, you'll need to actually press the button for it to be triggered, otherwise a simple hover will trigger it (better for touch input).")] + public bool MouseMode = false; + + public virtual bool ReturnToInitialSpriteAutomatically { get; set; } + + /// the current state of the button (off, down, pressed or up) + public virtual ButtonStates CurrentState { get; protected set; } + + public event System.Action ButtonStateChange; + + protected bool _zonePressed = false; + protected CanvasGroup _canvasGroup; + protected float _initialOpacity; + protected Animator _animator; + protected Image _image; + protected Sprite _initialSprite; + protected Color _initialColor; + protected float _lastClickTimestamp = 0f; + protected Selectable _selectable; + + /// + /// On Start, we get our canvasgroup and set our initial alpha + /// + protected virtual void Awake() + { + Initialization (); + } + + /// + /// On init we grab our Image, Animator and CanvasGroup and set them up + /// + protected virtual void Initialization() + { + ReturnToInitialSpriteAutomatically = true; + + _selectable = GetComponent (); + + _image = GetComponent (); + if (_image != null) + { + _initialColor = _image.color; + _initialSprite = _image.sprite; + } + + _animator = GetComponent (); + if (Animator != null) + { + _animator = Animator; + } + + _canvasGroup = GetComponent(); + if (_canvasGroup!=null) + { + _initialOpacity = IdleOpacity; + _canvasGroup.alpha = _initialOpacity; + _initialOpacity = _canvasGroup.alpha; + } + ResetButton(); + } + + /// + /// Every frame, if the touch zone is pressed, we trigger the OnPointerPressed method, to detect continuous press + /// + protected virtual void Update() + { + switch (CurrentState) + { + case ButtonStates.Off: + SetOpacity (IdleOpacity); + if ((_image != null) && (ReturnToInitialSpriteAutomatically)) + { + _image.color = _initialColor; + _image.sprite = _initialSprite; + } + if (_selectable != null) + { + _selectable.interactable = true; + if (EventSystem.current.currentSelectedGameObject == this.gameObject) + { + if ((_image != null) && HighlightedChangeColor) + { + _image.color = HighlightedColor; + } + if (HighlightedSprite != null) + { + _image.sprite = HighlightedSprite; + } + } + } + break; + + case ButtonStates.Disabled: + SetOpacity (DisabledOpacity); + if (_image != null) + { + if (DisabledSprite != null) + { + _image.sprite = DisabledSprite; + } + if (DisabledChangeColor) + { + _image.color = DisabledColor; + } + } + if (_selectable != null) + { + _selectable.interactable = false; + } + break; + + case ButtonStates.ButtonDown: + + break; + + case ButtonStates.ButtonPressed: + SetOpacity (PressedOpacity); + OnPointerPressed(); + if (_image != null) + { + if (PressedSprite != null) + { + _image.sprite = PressedSprite; + } + if (PressedChangeColor) + { + _image.color = PressedColor; + } + } + break; + + case ButtonStates.ButtonUp: + + break; + } + UpdateAnimatorStates (); + } + + /// + /// At the end of every frame, we change our button's state if needed + /// + protected virtual void LateUpdate() + { + if (CurrentState == ButtonStates.ButtonUp) + { + CurrentState = ButtonStates.Off; + } + if (CurrentState == ButtonStates.ButtonDown) + { + CurrentState = ButtonStates.ButtonPressed; + } + } + + /// + /// Triggers the ButtonStateChange event for the specified state + /// + /// + /// + public virtual void InvokeButtonStateChange(PointerEventData.FramePressState newState, PointerEventData data) + { + ButtonStateChange?.Invoke(newState, data); + } + + /// + /// Triggers the bound pointer down action + /// + public virtual void OnPointerDown(PointerEventData data) + { + if (!Interactable) + { + return; + } + + if (Time.time - _lastClickTimestamp < BufferDuration) + { + return; + } + + if (CurrentState != ButtonStates.Off) + { + return; + } + CurrentState = ButtonStates.ButtonDown; + _lastClickTimestamp = Time.time; + InvokeButtonStateChange(PointerEventData.FramePressState.Pressed, data); + if ((Time.timeScale != 0) && (PressedFirstTimeDelay > 0)) + { + Invoke ("InvokePressedFirstTime", PressedFirstTimeDelay); + } + else + { + ButtonPressedFirstTime.Invoke(); + } + } + + /// + /// Raises the ButtonPressedFirstTime event + /// + protected virtual void InvokePressedFirstTime() + { + if (ButtonPressedFirstTime!=null) + { + ButtonPressedFirstTime.Invoke(); + } + } + + /// + /// Triggers the bound pointer up action + /// + public virtual void OnPointerUp(PointerEventData data) + { + if (!Interactable) + { + return; + } + if (CurrentState != ButtonStates.ButtonPressed && CurrentState != ButtonStates.ButtonDown) + { + return; + } + + CurrentState = ButtonStates.ButtonUp; + InvokeButtonStateChange(PointerEventData.FramePressState.Released, data); + if ((Time.timeScale != 0) && (ReleasedDelay > 0)) + { + Invoke ("InvokeReleased", ReleasedDelay); + } + else + { + ButtonReleased.Invoke(); + } + } + + /// + /// Invokes the ButtonReleased event + /// + protected virtual void InvokeReleased() + { + if (ButtonReleased != null) + { + ButtonReleased.Invoke(); + } + } + + /// + /// Triggers the bound pointer pressed action + /// + public virtual void OnPointerPressed() + { + if (!Interactable) + { + return; + } + CurrentState = ButtonStates.ButtonPressed; + if (ButtonPressed != null) + { + ButtonPressed.Invoke(); + } + } + + /// + /// Resets the button's state and opacity + /// + protected virtual void ResetButton() + { + SetOpacity(_initialOpacity); + CurrentState = ButtonStates.Off; + } + + /// + /// Triggers the bound pointer enter action when touch enters zone + /// + public virtual void OnPointerEnter(PointerEventData data) + { + if (!Interactable) + { + return; + } + if (!MouseMode) + { + OnPointerDown (data); + } + } + + /// + /// Triggers the bound pointer exit action when touch is out of zone + /// + public virtual void OnPointerExit(PointerEventData data) + { + if (!Interactable) + { + return; + } + if (!MouseMode) + { + OnPointerUp(data); + } + } + /// + /// OnEnable, we reset our button state + /// + protected virtual void OnEnable() + { + ResetButton(); + } + + /// + /// On disable we reset our flags and disable the button + /// + private void OnDisable() + { + bool wasActive = CurrentState != ButtonStates.Off && CurrentState != ButtonStates.Disabled && CurrentState != ButtonStates.ButtonUp; + DisableButton(); + CurrentState = ButtonStates.Off; + if (wasActive) + { + InvokeButtonStateChange(PointerEventData.FramePressState.Released, null); + ButtonReleased?.Invoke(); + } + } + + /// + /// Prevents the button from receiving touches + /// + public virtual void DisableButton() + { + CurrentState = ButtonStates.Disabled; + } + + /// + /// Allows the button to receive touches + /// + public virtual void EnableButton() + { + if (CurrentState == ButtonStates.Disabled) + { + CurrentState = ButtonStates.Off; + } + } + + /// + /// Sets the canvas group's opacity to the requested value + /// + /// + protected virtual void SetOpacity(float newOpacity) + { + if (_canvasGroup!=null) + { + _canvasGroup.alpha = newOpacity; + } + } + + /// + /// Updates animator states based on the current state of the button + /// + protected virtual void UpdateAnimatorStates () + { + if (_animator == null) + { + return; + } + if (DisabledAnimationParameterName != null) + { + _animator.SetBool (DisabledAnimationParameterName, (CurrentState == ButtonStates.Disabled)); + } + if (PressedAnimationParameterName != null) + { + _animator.SetBool (PressedAnimationParameterName, (CurrentState == ButtonStates.ButtonPressed)); + } + if (IdleAnimationParameterName != null) + { + _animator.SetBool (IdleAnimationParameterName, (CurrentState == ButtonStates.Off)); + } + } + + /// + /// On submit, raises the appropriate events + /// + /// + public virtual void OnSubmit(BaseEventData eventData) + { + if (ButtonPressedFirstTime!=null) + { + ButtonPressedFirstTime.Invoke(); + } + if (ButtonReleased!=null) + { + ButtonReleased.Invoke (); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchButton.cs.meta b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchButton.cs.meta new file mode 100644 index 0000000..eb0bd41 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchButton.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 87a286771fa86194e979f187a1691a2a +timeCreated: 1462399350 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchControls.cs b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchControls.cs new file mode 100644 index 0000000..1148150 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchControls.cs @@ -0,0 +1,75 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + [RequireComponent(typeof(CanvasGroup))] + [AddComponentMenu("More Mountains/Tools/Controls/MMTouchControls")] + public class MMTouchControls : MonoBehaviour + { + public enum InputForcedMode { None, Mobile, Desktop } + [MMInformation("If you check Auto Mobile Detection, the engine will automatically switch to mobile controls when your build target is Android or iOS. You can also force mobile or desktop (keyboard, gamepad) controls using the dropdown below.\nNote that if you don't need mobile controls and/or GUI this component can also work on its own, just put it on an empty GameObject instead.", MMInformationAttribute.InformationType.Info,false)] + /// If you check Auto Mobile Detection, the engine will automatically switch to mobile controls when your build target is Android or iOS. + /// You can also force mobile or desktop (keyboard, gamepad) controls using the dropdown below.Note that if you don't need mobile controls + /// and/or GUI this component can also work on its own, just put it on an empty GameObject instead. + [Tooltip("If you check Auto Mobile Detection, the engine will automatically switch to mobile controls when your build target is Android or iOS." + + "You can also force mobile or desktop (keyboard, gamepad) controls using the dropdown below.Note that if you don't need mobile controls " + + "and/or GUI this component can also work on its own, just put it on an empty GameObject instead.")] + public bool AutoMobileDetection = true; + /// Force desktop mode (gamepad, keyboard...) or mobile (touch controls) + [Tooltip("Force desktop mode (gamepad, keyboard...) or mobile (touch controls)")] + public InputForcedMode ForcedMode; + public virtual bool IsMobile { get; protected set; } + + protected CanvasGroup _canvasGroup; + protected float _initialMobileControlsAlpha; + + /// + /// We get the player from its tag. + /// + protected virtual void Start() + { + _canvasGroup = GetComponent(); + + _initialMobileControlsAlpha = _canvasGroup.alpha; + SetMobileControlsActive(false); + IsMobile=false; + if (AutoMobileDetection) + { + #if UNITY_ANDROID || UNITY_IPHONE + SetMobileControlsActive(true); + IsMobile = true; + #endif + } + if (ForcedMode==InputForcedMode.Mobile) + { + SetMobileControlsActive(true); + IsMobile = true; + } + if (ForcedMode==InputForcedMode.Desktop) + { + SetMobileControlsActive(false); + IsMobile = false; + } + } + + /// + /// Use this method to enable or disable mobile controls + /// + /// + public virtual void SetMobileControlsActive(bool state) + { + if (_canvasGroup!=null) + { + _canvasGroup.gameObject.SetActive(state); + if (state) + { + _canvasGroup.alpha=_initialMobileControlsAlpha; + } + else + { + _canvasGroup.alpha=0; + } + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchControls.cs.meta b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchControls.cs.meta new file mode 100644 index 0000000..6ad3386 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchControls.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fec2335f22dc84b549dd9dfdeebca3e0 +timeCreated: 1467025573 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchFollowerJoystick.cs b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchFollowerJoystick.cs new file mode 100644 index 0000000..de733d0 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchFollowerJoystick.cs @@ -0,0 +1,318 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.EventSystems; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + /// + /// Add this component to a UI rectangle and it'll act as a detection zone for a follower joystick. + /// Note that this component extends the MMTouchJoystick class so you don't need to add another joystick to it. It's both the detection zone and the stick itself. + /// + [AddComponentMenu("More Mountains/Tools/Controls/MMTouchFollowerJoystick")] + public class MMTouchFollowerJoystick : MMTouchJoystick + { + [MMInspectorGroup("Follower Joystick", true, 23)] + /// the canvas group to use as the joystick's knob - the part that moves under your thumb + [Tooltip("the canvas group to use as the joystick's knob - the part that moves under your thumb")] + public CanvasGroup KnobCanvasGroup; + /// the canvas group to use as the joystick's background + [Tooltip("the canvas group to use as the joystick's background")] + public CanvasGroup BackgroundCanvasGroup; + /// if this is true, the joystick will return back to its initial position when released + [Tooltip("if this is true, the joystick will return back to its initial position when released")] + public bool ResetPositionToInitialOnRelease = false; + /// if this is true, the background will follow its target with interpolation, otherwise it'll be instant movement + [Tooltip("if this is true, the background will follow its target with interpolation, otherwise it'll be instant movement")] + public bool InterpolateFollowMovement = false; + /// if in interpolate mode, this defines the speed at which the backgrounds follows the knob + [Tooltip("if in interpolate mode, this defines the speed at which the backgrounds follows the knob")] + [MMCondition("InterpolateFollowMovement", true)] + public float InterpolateFollowMovementSpeed = 0.3f; + /// whether or not to add a spring to the interpolation of the background movement + [Tooltip("whether or not to add a spring to the interpolation of the background movement")] + [MMCondition("InterpolateFollowMovement", true)] + public bool SpringFollowInterpolation = false; + /// when in SpringFollowInterpolation mode, the amount of damping to apply to the spring + [Tooltip("when in SpringFollowInterpolation mode, the amount of damping to apply to the spring")] + [MMCondition("SpringFollowInterpolation", true)] + public float SpringDamping = 0.6f; + /// when in SpringFollowInterpolation mode, the frequency to apply to the spring + [Tooltip("when in SpringFollowInterpolation mode, the frequency to apply to the spring")] + [MMCondition("SpringFollowInterpolation", true)] + public float SpringFrequency = 4f; + + [MMInspectorGroup("Background Constraints", true, 24)] + /// if this is true, the joystick won't be able to travel beyond the bounds of the top level canvas + [Tooltip("if this is true, the joystick won't be able to travel beyond the bounds of the top level canvas")] + public bool ShouldConstrainBackground = true; + /// the rect to consider as a background constraint zone, if left empty, will be auto created + [Tooltip("the rect to consider as a background constraint zone, if left empty, will be auto created")] + public RectTransform BackgroundConstraintRectTransform; + /// the left padding to apply to the background constraint + [Tooltip("the left padding to apply to the background constraint")] + public float BackgroundConstraintPaddingLeft; + /// the right padding to apply to the background constraint + [Tooltip("the right padding to apply to the background constraint")] + public float BackgroundConstraintPaddingRight; + /// the top padding to apply to the background constraint + [Tooltip("the top padding to apply to the background constraint")] + public float BackgroundConstraintPaddingTop; + /// the bottom padding to apply to the background constraint + [Tooltip("the bottom padding to apply to the background constraint")] + public float BackgroundConstraintPaddingBottom; + + protected Vector3 _initialPosition; + protected Vector3 _newPosition; + protected RectTransform _rectTransform; + protected RectTransform _backgroundRectTransform; + protected Vector3[] _innerRectCorners = new Vector3[4]; + protected Vector3 _newBackgroundPosition; + protected Vector3 _backgroundPositionTarget; + protected Vector3 _innerRectTransformBottomLeft; + protected Vector3 _innerRectTransformTopLeft; + protected Vector3 _innerRectTransformTopRight; + protected Vector3 _innerRectTransformBottomRight; + protected Vector3 _springVelocity; + + /// + /// On Start, we instantiate our joystick's image if there's one + /// + protected override void Start() + { + base.Start(); + + // we store the detection zone's initial position + _rectTransform = GetComponent(); + _backgroundRectTransform = BackgroundCanvasGroup.GetComponent(); + _initialPosition = _backgroundRectTransform.position; + _backgroundPositionTarget = _initialPosition; + + CreateInnerRect(); + } + + /// + /// On initialize, we set our knob transform + /// + public override void Initialize() + { + base.Initialize(); + SetKnobTransform(KnobCanvasGroup.transform); + _canvasGroup = KnobCanvasGroup; + _initialOpacity = _canvasGroup.alpha; + } + + /// + /// On update, we handle movement interpolation + /// + protected override void Update() + { + base.Update(); + HandleMovementInterpolation(); + } + + /// + /// Handles the movement of the background relative to the knob + /// + protected virtual void HandleMovementInterpolation() + { + if (!InterpolateFollowMovement) + { + BackgroundCanvasGroup.transform.position = _backgroundPositionTarget; + return; + } + + if (SpringFollowInterpolation) + { + _newBackgroundPosition = BackgroundCanvasGroup.transform.position; + MMMaths.Spring(ref _newBackgroundPosition, _backgroundPositionTarget, ref _springVelocity, SpringDamping, SpringFrequency, Time.unscaledDeltaTime); + BackgroundCanvasGroup.transform.position = _newBackgroundPosition; + } + else + { + BackgroundCanvasGroup.transform.position = MMMaths.Lerp(BackgroundCanvasGroup.transform.position, _backgroundPositionTarget, InterpolateFollowMovementSpeed, Time.unscaledDeltaTime); + } + } + + /// + /// Creates a constraining inner rect + /// + protected virtual void CreateInnerRect() + { + if (!ShouldConstrainBackground) + { + return; + } + + // we create an inner rect if one wasn't provided + if (BackgroundConstraintRectTransform == null) + { + GameObject innerRect = new GameObject(); + innerRect.transform.SetParent(this.transform); + innerRect.name = "BackgroundConstraintRectTransform"; + BackgroundConstraintRectTransform = innerRect.AddComponent(); + BackgroundConstraintRectTransform.anchorMin = _rectTransform.anchorMin; + BackgroundConstraintRectTransform.anchorMax = _rectTransform.anchorMax; + BackgroundConstraintRectTransform.position = _rectTransform.position; + BackgroundConstraintRectTransform.localScale = _rectTransform.localScale; + BackgroundConstraintRectTransform.sizeDelta = new Vector2(_rectTransform.sizeDelta.x - _backgroundRectTransform.sizeDelta.y, _rectTransform.sizeDelta.y - _backgroundRectTransform.sizeDelta.y); + } + + // we apply the padding + BackgroundConstraintRectTransform.offsetMin += new Vector2(BackgroundConstraintPaddingLeft, BackgroundConstraintPaddingBottom); + BackgroundConstraintRectTransform.offsetMax -= new Vector2(BackgroundConstraintPaddingRight, BackgroundConstraintPaddingTop); + + // we store our corners + BackgroundConstraintRectTransform.GetWorldCorners(_innerRectCorners); + _innerRectTransformBottomLeft = _innerRectCorners[0]; + _innerRectTransformTopLeft = _innerRectCorners[1]; + _innerRectTransformTopRight = _innerRectCorners[2]; + _innerRectTransformBottomRight = _innerRectCorners[3]; + } + + /// + /// When the zone is pressed, we move our joystick accordingly + /// + /// Data. + public override void OnPointerDown(PointerEventData data) + { + base.OnPointerDown(data); + + _newPosition = ConvertToWorld(data.position); + _newPosition.z = this.transform.position.z; + + // we define a new neutral position + + _backgroundPositionTarget = _newPosition; + ConstrainBackground(); + SetNeutralPosition(BackgroundCanvasGroup.transform.position); + _knobTransform.position = _newPosition; + + ComputeJoystickValue(); + } + + /// + /// On drag, we adjust our target and constrain our background + /// + /// + public override void OnDrag(PointerEventData eventData) + { + base.OnDrag(eventData); + + float distance = Vector2.Distance(_knobTransform.position, BackgroundCanvasGroup.transform.position); + if (distance >= ComputedMaxRange) + { + _backgroundPositionTarget = BackgroundCanvasGroup.transform.position + + (_knobTransform.position - BackgroundCanvasGroup.transform.position).normalized * (distance - ComputedMaxRange); + } + + ConstrainBackground(); + ComputeJoystickValue(); + } + + /// + /// Determines the value of the joystick by computing the + /// + protected virtual void ComputeJoystickValue() + { + float distance = Vector2.Distance(_knobTransform.position, BackgroundCanvasGroup.transform.position); + if (distance <= ComputedMaxRange) + { + RawValue.x = EvaluateInputValue(_knobTransform.position.x - BackgroundCanvasGroup.transform.position.x); + RawValue.y = EvaluateInputValue(_knobTransform.position.y - BackgroundCanvasGroup.transform.position.y); + } + else + { + float vectorPosition = _knobTransform.position.x - BackgroundCanvasGroup.transform.position.x; + RawValue.x = Mathf.InverseLerp(0, distance, Mathf.Abs(vectorPosition)) * Mathf.Sign(vectorPosition); + vectorPosition = _knobTransform.position.y - BackgroundCanvasGroup.transform.position.y; + RawValue.y = Mathf.InverseLerp(0, distance, Mathf.Abs(vectorPosition)) * Mathf.Sign(vectorPosition); + } + } + + /// + /// Clamps the background inside the inner rect + /// + protected virtual void ConstrainBackground() + { + if (!ShouldConstrainBackground) + { + return; + } + _newBackgroundPosition = _backgroundPositionTarget; + _newBackgroundPosition.x = Mathf.Clamp(_newBackgroundPosition.x , _innerRectTransformTopLeft.x, _innerRectTransformTopRight.x); + _newBackgroundPosition.y = Mathf.Clamp(_newBackgroundPosition.y , _innerRectTransformBottomLeft.y, _innerRectTransformTopLeft.y); + _backgroundPositionTarget = _newBackgroundPosition; + } + + /// + /// On pointer up we reset our joystick + /// + /// + public override void OnPointerUp(PointerEventData data) + { + base.OnPointerUp(data); + + ResetJoystick(); + _knobTransform.position = _backgroundPositionTarget; + + if (ResetPositionToInitialOnRelease) + { + _backgroundPositionTarget = _initialPosition; + _knobTransform.position = _initialPosition; + } + } + + /// + /// We don't clamp the stick anymore + /// + protected override void ClampToBounds() + { + _newTargetPosition = _newTargetPosition - _neutralPosition; + } + + #if UNITY_EDITOR + /// + /// Draws gizmos to show the constraining box' corners + /// + protected override void OnDrawGizmos() + { + if (!DrawGizmos) + { + return; + } + + // Draws max range + Handles.color = MMColors.Orange; + if (!Application.isPlaying) + { + if (KnobCanvasGroup != null) + { + Handles.DrawWireDisc(KnobCanvasGroup.transform.position, Vector3.forward, ComputedMaxRange); + } + else + { + Handles.DrawWireDisc(this.transform.position, Vector3.forward, ComputedMaxRange); + } + } + else + { + Handles.DrawWireDisc(_backgroundRectTransform.position, Vector3.forward, ComputedMaxRange); + } + + // Draws corners + if (BackgroundConstraintRectTransform != null) + { + float gizmoSize = 0.3f; + MMDebug.DrawGizmoPoint(_innerRectTransformBottomLeft, Color.cyan, gizmoSize); + MMDebug.DrawGizmoPoint(_innerRectTransformTopLeft, Color.cyan, gizmoSize); + MMDebug.DrawGizmoPoint(_innerRectTransformTopRight, Color.cyan, gizmoSize); + MMDebug.DrawGizmoPoint(_innerRectTransformBottomRight, Color.cyan, gizmoSize); + } + } + #endif + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchFollowerJoystick.cs.meta b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchFollowerJoystick.cs.meta new file mode 100644 index 0000000..882fc63 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchFollowerJoystick.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12f6f90faaf30834980e50fda0c74a9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchJoystick.cs b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchJoystick.cs new file mode 100644 index 0000000..03fe44e --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchJoystick.cs @@ -0,0 +1,414 @@ +#if MM_UI +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.Events; +using System; +using Unity.Collections; +using UnityEngine.UI; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.Tools +{ + [System.Serializable] + public class JoystickEvent : UnityEvent {} + [System.Serializable] + public class JoystickFloatEvent : UnityEvent {} + + /// + /// Joystick input class. + /// In charge of the behaviour of the joystick mobile touch input. + /// Bind its actions from the inspector + /// Handles mouse and multi touch + /// + [RequireComponent(typeof(Rect))] + [RequireComponent(typeof(CanvasGroup))] + [AddComponentMenu("More Mountains/Tools/Controls/MMTouchJoystick")] + public class MMTouchJoystick : MMMonoBehaviour, IDragHandler, IEndDragHandler, IPointerDownHandler, IPointerUpHandler + { + public enum MaxRangeModes { Distance, DistanceToTransform } + + [MMInspectorGroup("Camera", true, 16)] + /// The camera to use as the reference for any ScreenToWorldPoint computations + [Tooltip("The camera to use as the reference for any ScreenToWorldPoint computations")] + public Camera TargetCamera; + + [MMInspectorGroup("Joystick Behaviour", true, 18)] + [Tooltip("Determines whether the horizontal axis of this stick should be enabled. If not, the stick will only move vertically.")] + /// Is horizontal axis allowed + public bool HorizontalAxisEnabled = true; + /// Is vertical axis allowed + [Tooltip("Determines whether the vertical axis of this stick should be enabled. If not, the stick will only move horizontally.")] + public bool VerticalAxisEnabled = true; + /// the mode in which to compute the range. Distance will be a flat value, DistanceToTransform will be a distance to a transform you can move around and potentially resize as you wish for various resolutions + [Tooltip("the mode in which to compute the range. Distance will be a flat value, DistanceToTransform will be a distance to a transform you can move around and potentially resize as you wish for various resolutions")] + public MaxRangeModes MaxRangeMode = MaxRangeModes.Distance; + /// The MaxRange is the maximum distance from its initial center position you can drag the joystick to + [Tooltip("The MaxRange is the maximum distance from its initial center position you can drag the joystick to.")] + [MMEnumCondition("MaxRangeMode", (int)MaxRangeModes.Distance)] + public float MaxRange = 1.5f; + /// in DistanceToTransform mode, the object whose distance to the center will be used to compute the max range. Note that this is computed once, at init. Call RefreshMaxRangeDistance() to recompute it. + [Tooltip("in DistanceToTransform mode, the object whose distance to the center will be used to compute the max range. Note that this is computed once, at init. Call RefreshMaxRangeDistance() to recompute it.")] + [MMEnumCondition("MaxRangeMode", (int)MaxRangeModes.DistanceToTransform)] + public Transform MaxRangeTransform; + + public float ComputedMaxRange + { + get + { + if (Application.isPlaying) + { + return MaxRangeMode == MaxRangeModes.Distance ? MaxRange : _maxRangeTransformDistance; + } + else + { + if (MaxRangeMode == MaxRangeModes.Distance) + { + return MaxRange; + } + else + { + if (MaxRangeTransform == null) + { + return -1f; + } + RefreshMaxRangeDistance(); + return _maxRangeTransformDistance; + } + } + } + } + + [MMInspectorGroup("Value Events", true, 19)] + /// An event to use the raw value of the joystick + [Tooltip("An event to use the raw value of the joystick")] + public JoystickEvent JoystickValue; + /// An event to use the normalized value of the joystick + [Tooltip("An event to use the normalized value of the joystick")] + public JoystickEvent JoystickNormalizedValue; + // An event to use the joystick's amplitude (the magnitude of its Vector2 output) + [Tooltip("An event to use the joystick's amplitude (the magnitude of its Vector2 output)")] + public JoystickFloatEvent JoystickMagnitudeValue; + + [MMInspectorGroup("Touch Events", true, 8)] + /// An event triggered when tapping the joystick for the first time + [Tooltip("An event triggered when tapping the joystick for the first time")] + public UnityEvent OnPointerDownEvent; + /// An event triggered when dragging the stick + [Tooltip("An event triggered when dragging the stick")] + public UnityEvent OnDragEvent; + /// An event triggered when releasing the stick + [Tooltip("An event triggered when releasing the stick")] + public UnityEvent OnPointerUpEvent; + + [MMInspectorGroup("Rotating Direction Indicator", true, 20)] + /// an object you can rotate to show the direction of the joystick. Will only be visible if the movement is above a threshold + [Tooltip("an object you can rotate to show the direction of the joystick. Will only be visible if the movement is above a threshold")] + public Transform RotatingIndicator; + /// the threshold above which the rotating indicator will appear + [Tooltip("the threshold above which the rotating indicator will appear")] + public float RotatingIndicatorThreshold = 0.1f; + + [MMInspectorGroup("Knob Opacity", true, 17)] + /// the new opacity to apply to the canvas group when the button is pressed + [Tooltip("the new opacity to apply to the canvas group when the button is pressed")] + public float PressedOpacity = 0.5f; + /// whether or not to interpolate opacity changes on the knob's canvas group + [Tooltip("whether or not to interpolate opacity changes on the knob's canvas group")] + public bool InterpolateOpacity = true; + /// the speed at which to interpolate opacity + [Tooltip("the speed at which to interpolate opacity")] + [MMCondition("InterpolateOpacity", true)] + public float InterpolateOpacitySpeed = 1f; + + [MMInspectorGroup("Debug Output", true, 5)] + /// the raw value of the joystick, from 0 to 1 on each axis + [Tooltip("the raw value of the joystick, from 0 to 1 on each axis")] + [MMReadOnly] + public Vector2 RawValue; + /// the normalized value of the joystick + [Tooltip("the normalized value of the joystick")] + [MMReadOnly] + public Vector2 NormalizedValue; + /// the magnitude of the stick's vector + [Tooltip("the magnitude of the stick's vector")] + [MMReadOnly] + public float Magnitude; + /// whether or not to draw gizmos associated to this stick + [Tooltip("whether or not to draw gizmos associated to this stick")] + public bool DrawGizmos = true; + + /// the render mode of the parent canvas this stick is on + public virtual RenderMode ParentCanvasRenderMode { get; protected set; } + + protected Vector2 _neutralPosition; + protected Vector2 _newTargetPosition; + protected Vector3 _newJoystickPosition; + protected float _initialZPosition; + protected float _targetOpacity; + protected CanvasGroup _canvasGroup; + protected float _initialOpacity; + protected Transform _knobTransform; + protected bool _rotatingIndicatorIsNotNull = false; + protected float _maxRangeTransformDistance; + + /// + /// On Start we initialize our stick + /// + protected virtual void Start() + { + Initialize(); + } + + /// + /// Initializes the various parts of the stick + /// + /// + public virtual void Initialize() + { + if ((ParentCanvasRenderMode == RenderMode.ScreenSpaceCamera) && (TargetCamera == null)) + { + throw new Exception("MMTouchJoystick : you have to set a target camera"); + } + + _canvasGroup = GetComponent(); + _rotatingIndicatorIsNotNull = (RotatingIndicator != null); + RefreshMaxRangeDistance(); + + SetKnobTransform(this.transform); + + SetNeutralPosition(); + + ParentCanvasRenderMode = GetComponentInParent().renderMode; + _initialZPosition = _knobTransform.position.z; + _initialOpacity = _canvasGroup.alpha; + } + + /// + /// This method is used to compute the max range distance when in DistanceToTransform mode + /// + public virtual void RefreshMaxRangeDistance() + { + if (MaxRangeMode == MaxRangeModes.DistanceToTransform) + { + _maxRangeTransformDistance = Vector2.Distance(this.transform.position, MaxRangeTransform.position); + } + } + + /// + /// Assigns a new transform as the joystick knob + /// + /// + public virtual void SetKnobTransform(Transform newTransform) + { + _knobTransform = newTransform; + } + + /// + /// On Update we check for an orientation change if needed, and send our input values. + /// + protected virtual void Update() + { + NormalizedValue = RawValue.normalized; + Magnitude = RawValue.magnitude; + + if (HorizontalAxisEnabled || VerticalAxisEnabled) + { + JoystickValue.Invoke(RawValue); + JoystickNormalizedValue.Invoke(NormalizedValue); + JoystickMagnitudeValue.Invoke(Magnitude); + } + + RotateIndicator(); + HandleOpacity(); + } + + /// + /// Changes or interpolates the opacity of the knob + /// + protected virtual void HandleOpacity() + { + if (InterpolateOpacity) + { + _canvasGroup.alpha = MMMaths.Lerp(_canvasGroup.alpha, _targetOpacity, InterpolateOpacitySpeed, Time.unscaledDeltaTime); + } + else + { + _canvasGroup.alpha = _targetOpacity; + } + } + + /// + /// Rotates an indicator to match the rotation of the stick + /// + protected virtual void RotateIndicator() + { + if (!_rotatingIndicatorIsNotNull) + { + return; + } + + RotatingIndicator.gameObject.SetActive(RawValue.magnitude > RotatingIndicatorThreshold); + float angle = Mathf.Atan2(RawValue.y, RawValue.x) * Mathf.Rad2Deg; + RotatingIndicator.localRotation = Quaternion.AngleAxis(angle, Vector3.forward); + } + + /// + /// Sets the neutral position of the joystick + /// + public virtual void SetNeutralPosition() + { + _neutralPosition = _knobTransform.position; + } + + public virtual void SetNeutralPosition(Vector3 newPosition) + { + _neutralPosition = newPosition; + } + + /// + /// Handles dragging of the joystick + /// + public virtual void OnDrag(PointerEventData eventData) + { + OnDragEvent.Invoke(); + + _newTargetPosition = ConvertToWorld(eventData.position); + + // We clamp the stick's position to let it move only inside its defined max range + ClampToBounds(); + + // If we haven't authorized certain axis, we force them to zero + if (!HorizontalAxisEnabled) + { + _newTargetPosition.x = 0; + } + if (!VerticalAxisEnabled) + { + _newTargetPosition.y = 0; + } + // For each axis, we evaluate its lerped value (-1...1) + RawValue.x = EvaluateInputValue(_newTargetPosition.x); + RawValue.y = EvaluateInputValue(_newTargetPosition.y); + + _newJoystickPosition = _neutralPosition + _newTargetPosition; + _newJoystickPosition.z = _initialZPosition; + + // We move the joystick to its dragged position + _knobTransform.position = _newJoystickPosition; + } + + /// + /// Clamps the stick to the specified range + /// + protected virtual void ClampToBounds() + { + _newTargetPosition = Vector2.ClampMagnitude(_newTargetPosition - _neutralPosition, ComputedMaxRange); + } + + /// + /// Converts a position to world position + /// + /// + /// + protected virtual Vector3 ConvertToWorld(Vector3 position) + { + if (ParentCanvasRenderMode == RenderMode.ScreenSpaceCamera) + { + return TargetCamera.ScreenToWorldPoint(position); + } + else + { + return position; + } + } + + /// + /// Resets the stick's position and values + /// + public virtual void ResetJoystick() + { + // we reset the stick's position + _newJoystickPosition = _neutralPosition; + _newJoystickPosition.z = _initialZPosition; + _knobTransform.position = _newJoystickPosition; + + RawValue.x = 0f; + RawValue.y = 0f; + + // we set its opacity back + _targetOpacity = _initialOpacity; + } + + /// + /// We compute the axis value from the interval between neutral position, current stick position (vectorPosition) and max range + /// + /// The axis value, a float between -1 and 1 + /// stick position. + protected virtual float EvaluateInputValue(float vectorPosition) + { + return Mathf.InverseLerp(0, ComputedMaxRange, Mathf.Abs(vectorPosition)) * Mathf.Sign(vectorPosition); + } + + /// + /// What happens when the stick stops being dragged + /// + public virtual void OnEndDrag(PointerEventData eventData) + { + } + + /// + /// What happens when the stick is released (even if no drag happened) + /// + /// + public virtual void OnPointerUp(PointerEventData data) + { + ResetJoystick(); + OnPointerUpEvent.Invoke(); + } + + /// + /// What happens when the stick is pressed for the first time + /// + /// + public virtual void OnPointerDown(PointerEventData data) + { + _targetOpacity = PressedOpacity; + OnPointerDownEvent.Invoke(); + } + + /// + /// On enable, we initialize our stick + /// + protected virtual void OnEnable() + { + Initialize(); + _targetOpacity = _initialOpacity; + } + + #if UNITY_EDITOR + /// + /// Draws gizmos if needed + /// + protected virtual void OnDrawGizmos() + { + if (!DrawGizmos) + { + return; + } + + Handles.color = MMColors.Orange; + if (!Application.isPlaying) + { + Handles.DrawWireDisc(this.transform.position, Vector3.forward, ComputedMaxRange); + } + else + { + Handles.DrawWireDisc(_neutralPosition, Vector3.forward, ComputedMaxRange); + } + } + #endif + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchJoystick.cs.meta b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchJoystick.cs.meta new file mode 100644 index 0000000..c786528 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchJoystick.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8f6a0577d46b80a4f929e57370c60650 +timeCreated: 1462403537 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchRepositionableJoystick.cs b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchRepositionableJoystick.cs new file mode 100644 index 0000000..ba46dac --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchRepositionableJoystick.cs @@ -0,0 +1,149 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif +#if MM_UI +using UnityEngine.EventSystems; +namespace MoreMountains.Tools +{ + /// + /// Add this component to a UI rectangle and it'll act as a detection zone for a joystick. + /// Note that this component extends the MMTouchJoystick class so you don't need to add another joystick to it. It's both the detection zone and the stick itself. + /// + [AddComponentMenu("More Mountains/Tools/Controls/MMTouchRepositionableJoystick")] + public class MMTouchRepositionableJoystick : MMTouchJoystick, IPointerDownHandler + { + [MMInspectorGroup("Repositionable Joystick", true, 22)] + /// the canvas group to use as the joystick's knob + [Tooltip("the canvas group to use as the joystick's knob")] + public CanvasGroup KnobCanvasGroup; + /// the canvas group to use as the joystick's background + [Tooltip("the canvas group to use as the joystick's background")] + public CanvasGroup BackgroundCanvasGroup; + /// if this is true, the joystick won't be able to travel beyond the bounds of the top level canvas + [Tooltip("if this is true, the joystick won't be able to travel beyond the bounds of the top level canvas")] + public bool ConstrainToInitialRectangle = true; + /// if this is true, the joystick will return back to its initial position when released + [Tooltip("if this is true, the joystick will return back to its initial position when released")] + public bool ResetPositionToInitialOnRelease = false; + + protected Vector3 _initialPosition; + protected Vector3 _newPosition; + protected CanvasGroup _knobCanvasGroup; + protected RectTransform _rectTransform; + + /// + /// On Start, we instantiate our joystick's image if there's one + /// + protected override void Start() + { + base.Start(); + + // we store the detection zone's initial position + _rectTransform = GetComponent(); + _initialPosition = BackgroundCanvasGroup.GetComponent().position; + } + + /// + /// On init we set our knob transform + /// + public override void Initialize() + { + base.Initialize(); + SetKnobTransform(KnobCanvasGroup.transform); + _canvasGroup = KnobCanvasGroup; + _initialOpacity = _canvasGroup.alpha; + } + + /// + /// When the zone is pressed, we move our joystick accordingly + /// + /// Data. + public override void OnPointerDown(PointerEventData data) + { + base.OnPointerDown(data); + + // if we're in "screen space - camera" render mode + if (ParentCanvasRenderMode == RenderMode.ScreenSpaceCamera) + { + _newPosition = TargetCamera.ScreenToWorldPoint(data.position); + } + // otherwise + else + { + _newPosition = data.position; + } + _newPosition.z = this.transform.position.z; + + if (!WithinBounds()) + { + return; + } + + // we define a new neutral position + BackgroundCanvasGroup.transform.position = _newPosition; + SetNeutralPosition(_newPosition); + _knobTransform.position = _newPosition; + } + + /// + /// Returns true if the joystick's new position is within the bounds of the top level canvas + /// + /// + protected virtual bool WithinBounds() + { + if (!ConstrainToInitialRectangle) + { + return true; + } + return RectTransformUtility.RectangleContainsScreenPoint(_rectTransform, _newPosition); + } + + /// + /// When the player lets go of the stick, we restore our stick's position if needed + /// + /// Event data. + public override void OnPointerUp(PointerEventData eventData) + { + base.OnPointerUp(eventData); + + if (ResetPositionToInitialOnRelease) + { + BackgroundCanvasGroup.transform.position = _initialPosition; + _knobTransform.position = _initialPosition; + } + } + + + #if UNITY_EDITOR + /// + /// Draws gizmos if needed + /// + protected override void OnDrawGizmos() + { + if (!DrawGizmos) + { + return; + } + + Handles.color = MMColors.Orange; + if (!Application.isPlaying) + { + if (KnobCanvasGroup != null) + { + Handles.DrawWireDisc(KnobCanvasGroup.transform.position, Vector3.forward, ComputedMaxRange); + } + else + { + Handles.DrawWireDisc(this.transform.position, Vector3.forward, ComputedMaxRange); + } + } + else + { + Handles.DrawWireDisc(_neutralPosition, Vector3.forward, ComputedMaxRange); + } + } + #endif + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMControls/MMTouchRepositionableJoystick.cs.meta b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchRepositionableJoystick.cs.meta new file mode 100644 index 0000000..52e8a51 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMControls/MMTouchRepositionableJoystick.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a60ed48e41f7574f890b8669d6fbfe0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMGhostCamera.meta b/Assets/Feel/MMTools/Foundation/MMGhostCamera.meta new file mode 100644 index 0000000..272f696 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMGhostCamera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59c6e3abd829d7a458ad398f8dbf0a16 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMGhostCamera/MMGhostCamera.cs b/Assets/Feel/MMTools/Foundation/MMGhostCamera/MMGhostCamera.cs new file mode 100644 index 0000000..950aeb6 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMGhostCamera/MMGhostCamera.cs @@ -0,0 +1,364 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +#if UNITY_EDITOR +using UnityEditor; +#endif +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +#if MM_UI +namespace MoreMountains.Tools +{ + /// + /// Add this class to a camera and you'll be able to pilot it using the horizontal/vertical axis, and up/down controls set via its inspector. + /// It's got an activation button, a run button, and an option to slow down time (this will require a MMTimeManager present in the scene) + /// + [AddComponentMenu("More Mountains/Tools/Camera/MMGhostCamera")] + public class MMGhostCamera : MonoBehaviour + { + [Header("Speed")] + /// the camera's movement speed + public float MovementSpeed = 10f; + /// the factor by which to multiply the speed when "running" + public float RunFactor = 4f; + /// the movement's acceleration + public float Acceleration = 5f; + /// the movement's deceleration + public float Deceleration = 5f; + /// the speed at which the camera rotates + public float RotationSpeed = 40f; + + [Header("Controls")] + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + public InputAction HorizontalAction; + public InputAction VerticalAction; + public InputAction MousePositionAction; + + /// the button used to toggle the camera on/off + public Key ActivateKey = Key.LeftShift; + /// the button to use to go up + public Key UpKey = Key.Space; + /// the button to use to go down + public Key DownKey = Key.C; + /// the button to use to switch between mobile and desktop control mode + public Key ControlsModeSwitchKey = Key.M; + /// the button used to modify the timescale + public Key TimescaleModificationKey = Key.F; + /// the button used to run while it's pressed + public Key RunKey = Key.RightShift; + #else + /// the button used to toggle the camera on/off + public KeyCode ActivateButton = KeyCode.LeftShift; + /// the name of the InputManager's horizontal axis + public string HorizontalAxisName = "Horizontal"; + /// the name of the InputManager's vertical axis + public string VerticalAxisName = "Vertical"; + /// the button to use to go up + public KeyCode UpButton = KeyCode.Space; + /// the button to use to go down + public KeyCode DownButton = KeyCode.C; + /// the button to use to switch between mobile and desktop control mode + public KeyCode ControlsModeSwitch = KeyCode.M; + /// the button used to modify the timescale + public KeyCode TimescaleModificationButton = KeyCode.F; + /// the button used to run while it's pressed + public KeyCode RunButton = KeyCode.RightShift; + #endif + + [Header("Mouse")] + /// the mouse's sensitivity + public float MouseSensitivity = 0.02f; + /// the right stick sensitivity + public float MobileStickSensitivity = 2f; + + [Header("Timescale Modification")] + /// the amount to modify the timescale by when pressing the timescale button + public float TimescaleModifier = 0.5f; + + + [Header("Settings")] + /// whether or not this camera should activate on start + public bool AutoActivation = true; + /// whether or not movement (up/down/left/right/forward/backward) is enabled + public bool MovementEnabled = true; + // whether or not rotation is enabled + public bool RotationEnabled = true; + [MMReadOnly] + /// whether this camera is active or not right now + public bool Active = false; + [MMReadOnly] + /// whether time is being altered right now or not + public bool TimeAltered = false; + + [Header("Virtual Joysticks")] + public bool UseMobileControls; + [MMCondition("UseMobileControls", true)] + public GameObject LeftStickContainer; + [MMCondition("UseMobileControls", true)] + public GameObject RightStickContainer; + [MMCondition("UseMobileControls", true)] + public MMTouchJoystick LeftStick; + [MMCondition("UseMobileControls", true)] + public MMTouchJoystick RightStick; + + protected Vector3 _currentInput; + protected Vector3 _lerpedInput; + protected Vector3 _normalizedInput; + protected float _acceleration; + protected float _deceleration; + protected Vector3 _movementVector = Vector3.zero; + protected float _speedMultiplier; + protected Vector3 _newEulerAngles; + protected Vector2 _mouseInput; + + /// + /// On start, activate our camera if needed + /// + protected virtual void Start() + { + if (AutoActivation) + { + ToggleFreeCamera(); + } + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + HorizontalAction.Enable(); + VerticalAction.Enable(); + MousePositionAction.Enable(); + HorizontalAction.performed += context => _currentInput.x = context.ReadValue(); + VerticalAction.performed += context => _currentInput.z = context.ReadValue(); + MousePositionAction.performed += context => _mouseInput = context.ReadValue(); + HorizontalAction.canceled += context => _currentInput.x = 0f; + VerticalAction.canceled += context => _currentInput.z = 0f; + MousePositionAction.canceled += context => _mouseInput = Vector2.zero; + #endif + } + + /// + /// On Update we grab our input and move accordingly + /// + protected virtual void Update() + { + bool activateButtonInput = false; + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + activateButtonInput = Keyboard.current[ActivateKey].wasPressedThisFrame; + #else + activateButtonInput = Input.GetKeyDown(ActivateButton); + #endif + + if (activateButtonInput) + { + ToggleFreeCamera(); + } + + if (!Active) + { + return; + } + + GetInput(); + Translate(); + Rotate(); + Move(); + + HandleMobileControls(); + } + + /// + /// Grabs and stores the various input values + /// + protected virtual void GetInput() + { + if (!UseMobileControls || (LeftStick == null)) + { + #if !ENABLE_INPUT_SYSTEM || ENABLE_LEGACY_INPUT_MANAGER + _currentInput.x = Input.GetAxis("Horizontal"); + _currentInput.y = 0f; + _currentInput.z = Input.GetAxis("Vertical"); + + _mouseInput.x = Input.GetAxis("Mouse X"); + _mouseInput.y = Input.GetAxis("Mouse Y"); + #endif + } + else + { + _currentInput.x = LeftStick.RawValue.x; + _currentInput.y = 0f; + _currentInput.z = LeftStick.RawValue.y; + } + + bool upButton = false; + bool downButton = false; + bool runButton = false; + bool timeScaleButton = false; + + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + upButton = Keyboard.current[UpKey].isPressed; + downButton = Keyboard.current[DownKey].isPressed; + runButton = Keyboard.current[RunKey].isPressed; + timeScaleButton = Keyboard.current[TimescaleModificationKey].wasPressedThisFrame; + #else + upButton = Input.GetKey(UpButton); + downButton = Input.GetKey(DownButton); + runButton = Input.GetKey(RunButton); + timeScaleButton = Input.GetKeyDown(TimescaleModificationButton); + #endif + + _currentInput.y = 0f; + + if (upButton) + { + _currentInput.y = 1f; + } + if (downButton) + { + _currentInput.y = -1f; + } + + _speedMultiplier = runButton ? RunFactor : 1f; + _normalizedInput = _currentInput.normalized; + + if (timeScaleButton) + { + ToggleSlowMotion(); + } + } + + /// + /// Turns controls to mobile if needed + /// + protected virtual void HandleMobileControls() + { + bool mobileSwitch = false; + #if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + mobileSwitch = Keyboard.current[ControlsModeSwitchKey].wasPressedThisFrame; + #else + mobileSwitch = Input.GetKeyDown(ControlsModeSwitch); + #endif + + if (mobileSwitch) + { + UseMobileControls = !UseMobileControls; + } + if (UseMobileControls) + { + Cursor.lockState = CursorLockMode.None; + Cursor.visible = true; + } + else if (Active) + { + Cursor.lockState = CursorLockMode.Locked; + Cursor.visible = false; + } + if (LeftStickContainer != null) + { + LeftStickContainer?.SetActive(UseMobileControls); + } + if (RightStickContainer != null) + { + RightStickContainer?.SetActive(UseMobileControls); + } + } + + /// + /// Computes the new position + /// + protected virtual void Translate() + { + if (!MovementEnabled) + { + return; + } + + if ((Acceleration == 0) || (Deceleration == 0)) + { + _lerpedInput = _currentInput; + } + else + { + if (_normalizedInput.magnitude == 0) + { + _acceleration = Mathf.Lerp(_acceleration, 0f, Deceleration * Time.deltaTime); + _lerpedInput = Vector3.Lerp(_lerpedInput, _lerpedInput * _acceleration, Time.deltaTime * Deceleration); + } + else + { + _acceleration = Mathf.Lerp(_acceleration, 1f, Acceleration * Time.deltaTime); + _lerpedInput = Vector3.ClampMagnitude(_normalizedInput, _acceleration); + } + } + + _movementVector = _lerpedInput; + _movementVector *= MovementSpeed * _speedMultiplier; + + if (_movementVector.magnitude > MovementSpeed * _speedMultiplier) + { + _movementVector = Vector3.ClampMagnitude(_movementVector, MovementSpeed * _speedMultiplier); + } + } + + /// + /// Computes the new rotation + /// + protected virtual void Rotate() + { + if (!RotationEnabled) + { + return; + } + _newEulerAngles = this.transform.eulerAngles; + + if (!UseMobileControls || (LeftStick == null)) + { + _newEulerAngles.x += -_mouseInput.y * 359f * MouseSensitivity; + _newEulerAngles.y += _mouseInput.x * 359f * MouseSensitivity; + } + else + { + _newEulerAngles.x += -RightStick.RawValue.y * MobileStickSensitivity; + _newEulerAngles.y += RightStick.RawValue.x * MobileStickSensitivity; + } + + _newEulerAngles = Vector3.Lerp(this.transform.eulerAngles, _newEulerAngles, Time.deltaTime * RotationSpeed); + } + + /// + /// Modifies the camera's transform's position and rotation + /// + protected virtual void Move() + { + transform.eulerAngles = _newEulerAngles; + transform.position += transform.rotation * _movementVector * Time.deltaTime; + } + + /// + /// Toggles the timescale modification + /// + protected virtual void ToggleSlowMotion() + { + TimeAltered = !TimeAltered; + if (TimeAltered) + { + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.For, TimescaleModifier, 1f, true, 5f, true); + } + else + { + MMTimeScaleEvent.Trigger(MMTimeScaleMethods.Unfreeze, 1f, 0f, false, 0f, false); + + } + } + + /// + /// Toggles the camera's active state + /// + protected virtual void ToggleFreeCamera() + { + Active = !Active; + Cursor.lockState = Active ? CursorLockMode.Locked : CursorLockMode.None; + Cursor.visible = !Active; + } + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMGhostCamera/MMGhostCamera.cs.meta b/Assets/Feel/MMTools/Foundation/MMGhostCamera/MMGhostCamera.cs.meta new file mode 100644 index 0000000..64cc9cb --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMGhostCamera/MMGhostCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d179f1ca35fc44c4fb760f847e59aa88 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMLoot.meta b/Assets/Feel/MMTools/Foundation/MMLoot.meta new file mode 100644 index 0000000..2a688bc --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMLoot.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5d848dd9bb4718e4bbcb3a54d61e6cab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMLoot/MMLoot.cs b/Assets/Feel/MMTools/Foundation/MMLoot/MMLoot.cs new file mode 100644 index 0000000..33c335e --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMLoot/MMLoot.cs @@ -0,0 +1,47 @@ +using System.Collections; +using System.Collections.Generic; +using MoreMountains.Tools; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class defining the contents of a MMLootTable + /// + /// + public class MMLoot + { + /// the object to return + public T Loot; + /// the weight attributed to this specific object in the table + public float Weight = 1f; + /// the chance percentage to display for this object to be looted. ChancePercentages are meant to be computed by the MMLootTable class + [MMReadOnly] + public float ChancePercentage; + + /// the computed low bound of this object's range + public virtual float RangeFrom { get; set; } + /// the computed high bound of this object's range + public virtual float RangeTo { get; set; } + } + + + /// + /// a MMLoot implementation for gameobjects + /// + [System.Serializable] + public class MMLootGameObject : MMLoot { } + + /// + /// a MMLoot implementation for strings + /// + [System.Serializable] + public class MMLootString : MMLoot { } + + /// + /// a MMLoot implementation for floats + /// + [System.Serializable] + public class MMLootFloat : MMLoot { } + +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMLoot/MMLoot.cs.meta b/Assets/Feel/MMTools/Foundation/MMLoot/MMLoot.cs.meta new file mode 100644 index 0000000..0e687bc --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMLoot/MMLoot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae83134bbe174934c889c5969a608e7d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTable.cs b/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTable.cs new file mode 100644 index 0000000..a7b1ba2 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTable.cs @@ -0,0 +1,126 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A loot table helper that can be used to randomly pick objects out of a weighted list + /// This design pattern was described in more details by Daniel Cook in 2014 in his blog : + /// https://lostgarden.home.blog/2014/12/08/loot-drop-tables/ + /// + /// This generic LootTable defines a list of objects to loot, each of them weighted. + /// The weights don't have to add to a certain number, they're relative to each other. + /// The ComputeWeights method determines, based on these weights, the chance percentage of each object to be picked + /// The GetLoot method returns one object, picked randomly from the table + /// + /// + /// + public class MMLootTable where T:MMLoot + { + /// the list of objects that have a chance of being returned by the table + [SerializeField] + public List ObjectsToLoot; + + /// the total amount of weights, for debug purposes only + [Header("Debug")] + [MMReadOnly] + public float WeightsTotal; + + protected float _maximumWeightSoFar = 0f; + protected bool _weightsComputed = false; + + /// + /// Determines, for each object in the table, its chance percentage, based on the specified weights + /// + public virtual void ComputeWeights() + { + if (ObjectsToLoot == null) + { + return; + } + + if (ObjectsToLoot.Count == 0) + { + return; + } + + _maximumWeightSoFar = 0f; + + foreach(T lootDropItem in ObjectsToLoot) + { + if(lootDropItem.Weight >= 0f) + { + lootDropItem.RangeFrom = _maximumWeightSoFar; + _maximumWeightSoFar += lootDropItem.Weight; + lootDropItem.RangeTo = _maximumWeightSoFar; + } + else + { + lootDropItem.Weight = 0f; + } + } + + WeightsTotal = _maximumWeightSoFar; + + foreach(T lootDropItem in ObjectsToLoot) + { + lootDropItem.ChancePercentage = ((lootDropItem.Weight) / WeightsTotal) * 100; + } + + _weightsComputed = true; + } + + /// + /// Returns one object from the table, picked randomly + /// + /// + public virtual T GetLoot() + { + if (ObjectsToLoot == null) + { + return null; + } + + if (ObjectsToLoot.Count == 0) + { + return null; + } + + if (!_weightsComputed) + { + ComputeWeights(); + } + + float index = Random.Range(0, WeightsTotal); + + foreach (T lootDropItem in ObjectsToLoot) + { + if ((index > lootDropItem.RangeFrom) && (index < lootDropItem.RangeTo)) + { + return lootDropItem; + } + } + + return null; + } + } + + /// + /// A MMLootTable implementation for GameObjects + /// + [System.Serializable] + public class MMLootTableGameObject : MMLootTable { } + + /// + /// A MMLootTable implementation for floats + /// + [System.Serializable] + public class MMLootTableFloat : MMLootTable { } + + /// + /// A MMLootTable implementation for strings + /// + [System.Serializable] + public class MMLootTableString : MMLootTable { } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTable.cs.meta b/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTable.cs.meta new file mode 100644 index 0000000..4850d3f --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5e6301cb44b6ff94f98077ceb3446fe2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTableGameObjectSO.cs b/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTableGameObjectSO.cs new file mode 100644 index 0000000..9f96d74 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTableGameObjectSO.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A scriptable object containing a MMLootTable definition for game objects + /// + [CreateAssetMenu(fileName="LootDefinition",menuName="MoreMountains/Loot Definition")] + public class MMLootTableGameObjectSO : ScriptableObject + { + /// the loot table + public MMLootTableGameObject LootTable; + + /// returns an object from the loot table + public virtual GameObject GetLoot() + { + return LootTable.GetLoot()?.Loot; + } + + /// + /// computes the loot table's weights + /// + public virtual void ComputeWeights() + { + LootTable.ComputeWeights(); + } + + protected virtual void OnValidate() + { + ComputeWeights(); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTableGameObjectSO.cs.meta b/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTableGameObjectSO.cs.meta new file mode 100644 index 0000000..cd13c02 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMLoot/MMLootTableGameObjectSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4627644fa4929f64a92e4d63b3a1a95e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMTime.meta b/Assets/Feel/MMTools/Foundation/MMTime.meta new file mode 100644 index 0000000..57a5a46 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMTime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13b64ed7c0af11846b73a4effddf261e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MMTime/MMCooldown.cs b/Assets/Feel/MMTools/Foundation/MMTime/MMCooldown.cs new file mode 100644 index 0000000..53144f9 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMTime/MMCooldown.cs @@ -0,0 +1,182 @@ +using UnityEngine; + +namespace MoreMountains.Tools +{ + /// + /// A class to handle cooldown related properties and their resource consumption over time + /// Remember to initialize it (once) and update it every frame from another class + /// + [System.Serializable] + public class MMCooldown + { + /// all possible states for the object + public enum CooldownStates { Idle, Consuming, Stopped, Refilling } + /// if this is true, the cooldown won't do anything + public bool Unlimited = false; + /// the time it takes, in seconds, to consume the object + public float ConsumptionDuration = 2f; + /// the pause to apply before refilling once the object's been depleted + public float PauseOnEmptyDuration = 1f; + /// the duration of the refill, in seconds, if uninterrupted + public float RefillDuration = 1f; + /// whether or not the refill can be interrupted by a new Start instruction + public bool CanInterruptRefill = true; + [MMReadOnly] + /// the current state of the object + public CooldownStates CooldownState = CooldownStates.Idle; + [MMReadOnly] + /// the amount of duration left in the object at any given time + public float CurrentDurationLeft; + + /// + /// A public delegate you can listen to for state changes + /// + /// How to use : + /// + /// private void OnCooldownStateChange(MMCooldown.CooldownStates newState) + /// { + /// if (newState == MMCooldown.CooldownStates.Stopped) + /// { + /// // do something + /// } + /// } + /// + /// private void OnEnable() { Cooldown.OnStateChange += OnCooldownStateChange; } + /// private void OnDisable() { Cooldown.OnStateChange -= OnCooldownStateChange; } + /// + /// + public delegate void OnStateChangeDelegate(CooldownStates newState); + public OnStateChangeDelegate OnStateChange; + + protected float _emptyReachedTimestamp = 0f; + + /// + /// An init method that ensures the object is reset + /// + public virtual void Initialization() + { + CurrentDurationLeft = ConsumptionDuration; + ChangeState(CooldownStates.Idle); + _emptyReachedTimestamp = 0f; + } + + /// + /// Starts consuming the cooldown object if possible + /// + public virtual void Start() + { + if (Ready()) + { + ChangeState(CooldownStates.Consuming); + } + } + + /// + /// Returns true if the cooldown is ready to be consumed, false otherwise + /// + /// + public virtual bool Ready() + { + if (Unlimited) + { + return true; + } + if (CooldownState == CooldownStates.Idle) + { + return true; + } + if ((CooldownState == CooldownStates.Refilling) && (CanInterruptRefill)) + { + return true; + } + return false; + } + + /// + /// Stops consuming the object + /// + public virtual void Stop() + { + if (CooldownState == CooldownStates.Consuming) + { + ChangeState(CooldownStates.Stopped); + } + } + + public float Progress + { + get + { + if (Unlimited) + { + return 1f; + } + + if (CooldownState == CooldownStates.Consuming || CooldownState == CooldownStates.Stopped) + { + return 0f; + } + + if (CooldownState == CooldownStates.Refilling) + { + return CurrentDurationLeft / RefillDuration; + } + + return 1f; + } + } + + /// + /// Processes the object's state machine + /// + public virtual void Update() + { + if (Unlimited) + { + return; + } + + switch (CooldownState) + { + case CooldownStates.Idle: + break; + + case CooldownStates.Consuming: + CurrentDurationLeft = CurrentDurationLeft - Time.deltaTime; + if (CurrentDurationLeft <= 0f) + { + CurrentDurationLeft = 0f; + _emptyReachedTimestamp = Time.time; + ChangeState(CooldownStates.Stopped); + } + break; + + case CooldownStates.Stopped: + if (Time.time - _emptyReachedTimestamp >= PauseOnEmptyDuration) + { + ChangeState(CooldownStates.Refilling); + } + break; + + case CooldownStates.Refilling: + CurrentDurationLeft += (RefillDuration * Time.deltaTime) / RefillDuration; + if (CurrentDurationLeft >= RefillDuration) + { + CurrentDurationLeft = ConsumptionDuration; + ChangeState(CooldownStates.Idle); + } + break; + } + } + + /// + /// Changes the current state of the cooldown and invokes the delegate if needed + /// + /// + protected virtual void ChangeState(CooldownStates newState) + { + CooldownState = newState; + OnStateChange?.Invoke(newState); + } + } +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MMTime/MMCooldown.cs.meta b/Assets/Feel/MMTools/Foundation/MMTime/MMCooldown.cs.meta new file mode 100644 index 0000000..b8adcfe --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MMTime/MMCooldown.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cd67bde1f024644d937e76c898ff1c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/MMTools/Foundation/MoreMountains.Tools.Foundation.asmref b/Assets/Feel/MMTools/Foundation/MoreMountains.Tools.Foundation.asmref new file mode 100644 index 0000000..c66cf00 --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MoreMountains.Tools.Foundation.asmref @@ -0,0 +1,3 @@ +{ + "reference": "GUID:4a1cb1490dc4df8409b2580d6b44e75e" +} \ No newline at end of file diff --git a/Assets/Feel/MMTools/Foundation/MoreMountains.Tools.Foundation.asmref.meta b/Assets/Feel/MMTools/Foundation/MoreMountains.Tools.Foundation.asmref.meta new file mode 100644 index 0000000..7c9216a --- /dev/null +++ b/Assets/Feel/MMTools/Foundation/MoreMountains.Tools.Foundation.asmref.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 17600328d06ef7e4299f5312eafcff74 +AssemblyDefinitionReferenceImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations.meta b/Assets/Feel/NiceVibrations.meta new file mode 100644 index 0000000..76f5b83 --- /dev/null +++ b/Assets/Feel/NiceVibrations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b428769c9365fe1468fdf375c3610cde +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/3RD-PARTY-LICENSES.md b/Assets/Feel/NiceVibrations/3RD-PARTY-LICENSES.md new file mode 100644 index 0000000..812580b --- /dev/null +++ b/Assets/Feel/NiceVibrations/3RD-PARTY-LICENSES.md @@ -0,0 +1,192 @@ +# Rust Core + +addr2line: Apache-2.0 OR MIT +adler: 0BSD OR Apache-2.0 OR MIT +aho-corasick: MIT OR Unlicense +android_log-sys: Apache-2.0 OR MIT +android_logger: Apache-2.0 OR MIT +ansi_term: MIT +arrayvec: Apache-2.0 OR MIT +atty: MIT +autocfg: Apache-2.0 OR MIT +backtrace: Apache-2.0 OR MIT +bincode: MIT +bitflags: Apache-2.0 OR MIT +block-buffer: Apache-2.0 OR MIT +block-padding: Apache-2.0 OR MIT +bstr: Apache-2.0 OR MIT +bumpalo: Apache-2.0 OR MIT +byte-tools: Apache-2.0 OR MIT +byteorder: MIT OR Unlicense +bytes: MIT +cast: Apache-2.0 OR MIT +cbindgen: MPL-2.0 +cc: Apache-2.0 OR MIT +cesu8: Apache-2.0 OR MIT +cfg-if: Apache-2.0 OR MIT +clap: MIT +combine: MIT +console_error_panic_hook: Apache-2.0 OR MIT +criterion: Apache-2.0 OR MIT +criterion-plot: Apache-2.0 OR MIT +crossbeam-channel: Apache-2.0 OR MIT +crossbeam-deque: Apache-2.0 OR MIT +crossbeam-epoch: Apache-2.0 OR MIT +csv: MIT OR Unlicense +csv-core: MIT OR Unlicense +dasp_sample: Apache-2.0 OR MIT +digest: Apache-2.0 OR MIT +either: Apache-2.0 OR MIT +encoding_rs: +env_logger: Apache-2.0 OR MIT +error-chain: Apache-2.0 OR MIT +failure: Apache-2.0 OR MIT +failure_derive: Apache-2.0 OR MIT +fake-simd: Apache-2.0 OR MIT +fourier: Apache-2.0 OR MIT +fourier-algorithms: Apache-2.0 OR MIT +fourier-macros: Apache-2.0 OR MIT +fuchsia-cprng: +generic-array: MIT +getrandom: Apache-2.0 OR MIT +gimli: Apache-2.0 OR MIT +half: Apache-2.0 OR MIT +hermit-abi: Apache-2.0 OR MIT +hound: Apache-2.0 +humantime: Apache-2.0 OR MIT +itertools: Apache-2.0 OR MIT +itertools-num: Apache-2.0 OR MIT +itoa: Apache-2.0 OR MIT +jni: Apache-2.0 OR MIT +jni-sys: Apache-2.0 OR MIT +js-sys: Apache-2.0 OR MIT +lazy_static: Apache-2.0 OR MIT +log: Apache-2.0 OR MIT +log-panics: Apache-2.0 OR MIT +maplit: Apache-2.0 OR MIT +memchr: MIT OR Unlicense +memoffset: MIT +multiversion: Apache-2.0 OR MIT +multiversion-macros: Apache-2.0 OR MIT +num-complex: Apache-2.0 OR MIT +num-traits: Apache-2.0 OR MIT +num_cpus: Apache-2.0 OR MIT +object: Apache-2.0 OR MIT +oorandom: MIT +opaque-debug: Apache-2.0 OR MIT +pest: Apache-2.0 OR MIT +pest_derive: Apache-2.0 OR MIT +pest_generator: Apache-2.0 OR MIT +pest_meta: Apache-2.0 OR MIT +pico-args: MIT +plotters: MIT +plotters-backend: MIT +plotters-svg: MIT +ppv-lite86: Apache-2.0 OR MIT +proc-macro2: Apache-2.0 OR MIT +quote: Apache-2.0 OR MIT +rand: Apache-2.0 OR MIT +rand_chacha: Apache-2.0 OR MIT +rand_core: Apache-2.0 OR MIT +rand_hc: Apache-2.0 OR MIT +rayon: Apache-2.0 OR MIT +rayon-core: Apache-2.0 OR MIT +rdrand: ISC +redox_syscall: MIT +regex: Apache-2.0 OR MIT +regex-automata: MIT OR Unlicense +regex-syntax: Apache-2.0 OR MIT +remove_dir_all: Apache-2.0 OR MIT +rustc-demangle: Apache-2.0 OR MIT +rustc_version: Apache-2.0 OR MIT +ryu: Apache-2.0 OR BSL-1.0 +same-file: MIT OR Unlicense +scoped-tls: Apache-2.0 OR MIT +scopeguard: Apache-2.0 OR MIT +semver: Apache-2.0 OR MIT +serde: Apache-2.0 OR MIT +serde_cbor: Apache-2.0 OR MIT +serde_derive: Apache-2.0 OR MIT +serde_derive_internals: Apache-2.0 OR MIT +serde_json: Apache-2.0 OR MIT +sha-1: Apache-2.0 OR MIT +strsim: MIT +symphonia: MPL-2.0 +symphonia-bundle-flac: MPL-2.0 +symphonia-bundle-mp3: MPL-2.0 +symphonia-codec-pcm: MPL-2.0 +symphonia-codec-vorbis: MPL-2.0 +symphonia-core: MPL-2.0 +symphonia-format-ogg: MPL-2.0 +symphonia-format-wav: MPL-2.0 +symphonia-metadata: MPL-2.0 +syn: Apache-2.0 OR MIT +synstructure: MIT +tempdir: Apache-2.0 OR MIT +tempfile: Apache-2.0 OR MIT +termcolor: MIT OR Unlicense +test_bin: Apache-2.0 OR MIT +textwrap: MIT +tinytemplate: Apache-2.0 OR MIT +toml: Apache-2.0 OR MIT +typenum: Apache-2.0 OR MIT +typescript-definitions: Apache-2.0 OR MIT +typescript-definitions-derive: Apache-2.0 OR MIT +ucd-trie: Apache-2.0 OR MIT +unicode-width: Apache-2.0 OR MIT +unicode-xid: Apache-2.0 OR MIT +vec_map: Apache-2.0 OR MIT +version_check: Apache-2.0 OR MIT +walkdir: MIT OR Unlicense +wasi: Apache-2.0 OR Apache-2.0 WITH LLVM-exception OR MIT +wasm-bindgen: Apache-2.0 OR MIT +wasm-bindgen-backend: Apache-2.0 OR MIT +wasm-bindgen-futures: Apache-2.0 OR MIT +wasm-bindgen-macro: Apache-2.0 OR MIT +wasm-bindgen-macro-support: Apache-2.0 OR MIT +wasm-bindgen-shared: Apache-2.0 OR MIT +wasm-bindgen-test: Apache-2.0 OR MIT +wasm-bindgen-test-macro: Apache-2.0 OR MIT +web-sys: Apache-2.0 OR MIT + +# Android + +AndroidX: Apache-2.0 + +# iOS + +N/A + +# Licenses + +## Apache 2.0 + +https://www.apache.org/licenses/LICENSE-2.0 + +## Apache 2.0 with LLVM-Exception + +https://releases.llvm.org/10.0.0/LICENSE.TXT + +## BSD-2-Clause + +https://opensource.org/licenses/BSD-2-Clause + +## BSL-1.0 + +https://opensource.org/licenses/BSL-1.0 + +## MIT + +https://opensource.org/licenses/MIT + +## MPL-2.0 + +https://www.mozilla.org/en-US/MPL/2.0/ + +## Unlicense + +https://choosealicense.com/licenses/unlicense/ + +## ISC + +https://opensource.org/licenses/ISC diff --git a/Assets/Feel/NiceVibrations/3RD-PARTY-LICENSES.md.meta b/Assets/Feel/NiceVibrations/3RD-PARTY-LICENSES.md.meta new file mode 100644 index 0000000..1d97df4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/3RD-PARTY-LICENSES.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fc916684710ef194aa41f4de7b75b8bf +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Define.meta b/Assets/Feel/NiceVibrations/Define.meta new file mode 100644 index 0000000..46de64b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Define.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6f38aec47e203414aaad7d8ac3872cfe +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Define/NiceVibrationsDefineSymbols.cs b/Assets/Feel/NiceVibrations/Define/NiceVibrationsDefineSymbols.cs new file mode 100644 index 0000000..f5d4474 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Define/NiceVibrationsDefineSymbols.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace MoreMountains.FeedbacksForThirdParty +{ +#if UNITY_EDITOR + /// + /// This class lets you specify (in code, by editing it) symbols that will be added to the build settings' define symbols list automatically + /// + [InitializeOnLoad] + public class NiceVibrationsDefineSymbols + { + /// + /// A list of all the symbols you want added to the build settings + /// + public static readonly string[] Symbols = new string[] + { + "MOREMOUNTAINS_NICEVIBRATIONS_INSTALLED" + }; + + /// + /// As soon as this class has finished compiling, adds the specified define symbols to the build settings + /// + static NiceVibrationsDefineSymbols() + { + string scriptingDefinesString = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + List scriptingDefinesStringList = scriptingDefinesString.Split(';').ToList(); + scriptingDefinesStringList.AddRange(Symbols.Except(scriptingDefinesStringList)); + PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, string.Join(";", scriptingDefinesStringList.ToArray())); + } + } +#endif +} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Define/NiceVibrationsDefineSymbols.cs.meta b/Assets/Feel/NiceVibrations/Define/NiceVibrationsDefineSymbols.cs.meta new file mode 100644 index 0000000..dc305f3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Define/NiceVibrationsDefineSymbols.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5a6fcac99c686a4ba4c6f04b2e0f02f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo.meta b/Assets/Feel/NiceVibrations/Demo.meta new file mode 100644 index 0000000..749ca70 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: effaa5564a1884aaa94dec27a87e485f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets.meta new file mode 100644 index 0000000..e32c60b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd1644ba0cb55b14dace78bdb4ccc5a5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo.meta new file mode 100644 index 0000000..a6fda79 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 860c1af46baeaa547b0d2911c46c8a52 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/HitAnimation.anim b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/HitAnimation.anim new file mode 100644 index 0000000..645eb65 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/HitAnimation.anim @@ -0,0 +1,493 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HitAnimation + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.05 + value: {x: 1.2, y: 1.2, z: 1.2} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.16666667 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.r + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8078432 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.8078432 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.g + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.29411766 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.29411766 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.b + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 3 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 4215373228 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 2334886179 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 2526845255 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 304273561 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.16666667 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.r + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8078432 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.8078432 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.g + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.29411766 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.29411766 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.b + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 1.2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 1.2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 1.2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/HitAnimation.anim.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/HitAnimation.anim.meta new file mode 100644 index 0000000..2e07ffd --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/HitAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a07c9e956826afc4fbbcdf440521d85c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/IdleAnimation.anim b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/IdleAnimation.anim new file mode 100644 index 0000000..2ce9042 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/IdleAnimation.anim @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: IdleAnimation + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/IdleAnimation.anim.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/IdleAnimation.anim.meta new file mode 100644 index 0000000..b19dec0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/IdleAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 46352f81517ed9b4e95cc473f6cd42a9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/NVBallAnimatorController.controller b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/NVBallAnimatorController.controller new file mode 100644 index 0000000..703b489 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/NVBallAnimatorController.controller @@ -0,0 +1,156 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1101 &-7544471341778248222 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Hit + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -1461668529290340724} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &-4861423631611780734 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: IdleAnimation + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -7544471341778248222} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 46352f81517ed9b4e95cc473f6cd42a9, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &-1461668529290340724 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HitAnimation + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 6086873505488641973} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: a07c9e956826afc4fbbcdf440521d85c, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NVBallAnimatorController + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: Hit + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 5306921616947008099} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1107 &5306921616947008099 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -4861423631611780734} + m_Position: {x: 270, y: 110, z: 0} + - serializedVersion: 1 + m_State: {fileID: -1461668529290340724} + m_Position: {x: 270, y: 210, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -4861423631611780734} +--- !u!1101 &6086873505488641973 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -4861423631611780734} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/NVBallAnimatorController.controller.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/NVBallAnimatorController.controller.meta new file mode 100644 index 0000000..8259537 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/NVBallAnimatorController.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 46eaa67e7ffc1eb47ae5e69fa1871856 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials.meta new file mode 100644 index 0000000..ea5b719 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 34ea8e84fa762df40b7352782c5e7ca0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials/NVBouncy.physicsMaterial2D b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials/NVBouncy.physicsMaterial2D new file mode 100644 index 0000000..1bc9629 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials/NVBouncy.physicsMaterial2D @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!62 &6200000 +PhysicsMaterial2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NVBouncy + friction: 0.4 + bounciness: 0.7 diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials/NVBouncy.physicsMaterial2D.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials/NVBouncy.physicsMaterial2D.meta new file mode 100644 index 0000000..ebe435c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Physics2DMaterials/NVBouncy.physicsMaterial2D.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 079cfd7ef2be6de43bc41a040f567695 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 6200000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts.meta new file mode 100644 index 0000000..5826b82 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 39c593b8092226f44a9bbc3178649f4b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoBall.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoBall.cs new file mode 100644 index 0000000..9334bc8 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoBall.cs @@ -0,0 +1,81 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + public class BallDemoBall : MonoBehaviour + { + public bool HapticsEnabled = true; + public ParticleSystem HitParticles; + public ParticleSystem HitPusherParticles; + public LayerMask WallMask; + public LayerMask PusherMask; + public MMUIShaker LogoShaker; + public AudioSource EmphasisAudioSource; + + protected Rigidbody2D _rigidBody; + protected float _lastRaycastTimestamp = 0f; + protected Animator _ballAnimator; + protected int _hitAnimationParameter; + + protected virtual void Awake() + { + _rigidBody = this.gameObject.GetComponent(); + _ballAnimator = this.gameObject.GetComponent(); + _hitAnimationParameter = Animator.StringToHash("Hit"); + } + + protected virtual void OnCollisionEnter2D(Collision2D collision) + { + if (WallMask == (WallMask | (1 << collision.gameObject.layer))) + { + HitWall(); + } + } + + protected virtual void Update() + { + float raycastLength = 5f; + + Debug.DrawLine(this.transform.position, Vector3.down * raycastLength, Color.red); + + if (Time.time - _lastRaycastTimestamp > 1f) + { + _lastRaycastTimestamp = Time.time; + RaycastHit2D hit = Physics2D.Raycast(this.transform.position, Vector2.down, raycastLength, WallMask); + if (hit.collider != null) + { + HitBottom(); + } + } + } + + protected virtual void HitBottom() + { + _rigidBody.AddForce(Vector2.up * 2500f); + StartCoroutine(LogoShaker.Shake(0.2f)); + } + + protected virtual void HitWall() + { + float amplitude = _rigidBody.velocity.magnitude / 100f; + HapticPatterns.PlayEmphasis(amplitude, 0.7f); + EmphasisAudioSource.volume = amplitude; + StartCoroutine(LogoShaker.Shake(0.2f)); + EmphasisAudioSource.Play(); + _ballAnimator.SetTrigger(_hitAnimationParameter); + } + + public virtual void HitPusher() + { + HitPusherParticles.Play(); + HapticController.fallbackPreset = HapticPatterns.PresetType.Selection; + HapticPatterns.PlayEmphasis(0.85f, 0.05f); + EmphasisAudioSource.volume = 0.1f; + StartCoroutine(LogoShaker.Shake(0.2f)); + EmphasisAudioSource.Play(); + _ballAnimator.SetTrigger(_hitAnimationParameter); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoBall.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoBall.cs.meta new file mode 100644 index 0000000..3a65584 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoBall.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59fe36bd4834fab44a9223e70f5fc73e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoManager.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoManager.cs new file mode 100644 index 0000000..7c4d2e2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoManager.cs @@ -0,0 +1,21 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + public class BallDemoManager : DemoManager + { + + [Header("Ball")] + public Vector2 Gravity = new Vector2(0, -30f); + + protected virtual void Start() + { + Physics2D.gravity = Gravity; + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoManager.cs.meta new file mode 100644 index 0000000..1c33d35 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 108a3476b6d855545b26c23b7e92e890 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoWall.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoWall.cs new file mode 100644 index 0000000..b67c601 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoWall.cs @@ -0,0 +1,22 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + public class BallDemoWall : MonoBehaviour + { + protected RectTransform _rectTransform; + protected BoxCollider2D _boxCollider2D; + + protected virtual void OnEnable() + { + _rectTransform = this.gameObject.GetComponent(); + _boxCollider2D = this.gameObject.GetComponent(); + + _boxCollider2D.size = new Vector2(_rectTransform.rect.size.x, _rectTransform.rect.size.y); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoWall.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoWall.cs.meta new file mode 100644 index 0000000..17e0d8f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallDemoWall.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4615302ba7af13645aec1ad743d65dcf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallPusher.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallPusher.cs new file mode 100644 index 0000000..e33d0d7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallPusher.cs @@ -0,0 +1,29 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + public class BallPusher : MonoBehaviour + { + public float Force = 5f; + public BallDemoBall TargetBall; + protected Vector2 _direction; + + protected virtual void OnTriggerEnter2D(Collider2D collider) + { + if (collider.gameObject != TargetBall.gameObject) + { + return; + } + + _direction = (collider.transform.position - this.transform.position).normalized; + _direction.y = 1f; + collider.attachedRigidbody.velocity = Vector2.zero; + collider.attachedRigidbody.AddForce(_direction * Force); + TargetBall.HitPusher(); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallPusher.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallPusher.cs.meta new file mode 100644 index 0000000..80fae8f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallPusher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf5e4b668334cb04282cd8a30200b42c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallTouchZone.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallTouchZone.cs new file mode 100644 index 0000000..ececbf9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallTouchZone.cs @@ -0,0 +1,73 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace Lofelt.NiceVibrations +{ + public class BallTouchZone : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler + { + public RenderMode ParentCanvasRenderMode { get; protected set; } + public RectTransform BallMover; + protected bool _holding = false; + protected PointerEventData _pointerEventData; + protected Vector3 _newPosition; + protected Canvas _canvas; + protected float _initialZPosition; + protected Vector2 _workPosition; + + + protected virtual void Start() + { + Initialization(); + } + + protected virtual void Initialization() + { + ParentCanvasRenderMode = GetComponentInParent().renderMode; + _canvas = GetComponentInParent(); + _initialZPosition = transform.position.z; + } + + protected virtual void Update() + { + if (_holding) + { + _newPosition = GetWorldPosition(_pointerEventData.position); + } + else + { + _newPosition = Vector3.one * 5000f; + } + + _newPosition.z = _initialZPosition; + BallMover.position = _newPosition; + } + protected virtual Vector3 GetWorldPosition(Vector3 testPosition) + { + if (ParentCanvasRenderMode == RenderMode.ScreenSpaceCamera) + { + RectTransformUtility.ScreenPointToLocalPointInRectangle(_canvas.transform as RectTransform, testPosition, _canvas.worldCamera, out _workPosition); + return _canvas.transform.TransformPoint(_workPosition); + } + else + { + return testPosition; + } + } + + public virtual void OnPointerEnter(PointerEventData data) + { + _holding = true; + _pointerEventData = data; + } + + public virtual void OnPointerExit(PointerEventData data) + { + _holding = false; + } + + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallTouchZone.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallTouchZone.cs.meta new file mode 100644 index 0000000..02bd129 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Scripts/BallTouchZone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b52f664c08fd13941b0167b90d8fb49a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites.meta new file mode 100644 index 0000000..2c3d34b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e19835382a97304ca9e45ec6ddf81aa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBall.png b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBall.png new file mode 100644 index 0000000..f21398c Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBall.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBall.png.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBall.png.meta new file mode 100644 index 0000000..0daa768 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBall.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: f7876974a1b60ed4ca3dfd37f229386f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.mat b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.mat new file mode 100644 index 0000000..45b2acd --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.mat @@ -0,0 +1,92 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: NVBallParticle + m_Shader: {fileID: 10760, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: bcd80bc4f60ab014a8a41c5078c40449, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - PixelSnap: 0 + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _EnableExternalAlpha: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _UseUIAlphaClip: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.mat.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.mat.meta new file mode 100644 index 0000000..5a31caf --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a8a95ed47c80ace44ac20124ba5fabaa +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.png b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.png new file mode 100644 index 0000000..c15891e Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.png.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.png.meta new file mode 100644 index 0000000..9d5bdd3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/BallDemo/Sprites/NVBallParticle.png.meta @@ -0,0 +1,91 @@ +fileFormatVersion: 2 +guid: bcd80bc4f60ab014a8a41c5078c40449 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo.meta new file mode 100644 index 0000000..72ad9d7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 34679c3017c9f1249b4ea461b3161d2e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts.meta new file mode 100644 index 0000000..d015cb8 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0e757de03cb63d447a04c21cf93ff027 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/CarDemoManager.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/CarDemoManager.cs new file mode 100644 index 0000000..01602ca --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/CarDemoManager.cs @@ -0,0 +1,213 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + public class CarDemoManager : DemoManager + { + [Header("Control")] + public MMKnob Knob; + public float MinimumKnobValue = 0.1f; + public float MaximumPowerDuration = 10f; + public float ChargingSpeed = 2f; + public float CarSpeed = 0f; + public float Power; + public float StartClickDuration = 0.2f; + public float DentDuration = 0.10f; + public List Dents; + + [Header("Car")] + + public AudioSource CarEngineAudioSource; + public Transform LeftWheel; + public Transform RightWheel; + public RectTransform CarBody; + public Vector3 WheelRotationSpeed = new Vector3(0f, 0f, 50f); + + [Header("UI")] + public GameObject ReloadingPrompt; + public AnimationCurve StartClickCurve; + public MMProgressBar PowerBar; + public List SpeedBars; + public Color ActiveColor; + public Color InactiveColor; + + [Header("Debug")] + public bool _carStarted = false; + public float _carStartedAt = 0f; + public float _lastStartClickAt = 0f; + + protected float _knobValueLastFrame; + protected float _lastDentAt = 0f; + protected float _knobValue; + protected Vector3 _initialCarPosition; + protected Vector3 _carPosition; + + protected virtual void Awake() + { + Power = MaximumPowerDuration; + ReloadingPrompt.SetActive(false); + _initialCarPosition = CarBody.localPosition; + } + + protected virtual void Update() + { + HandlePower(); + UpdateCar(); + UpdateUI(); + + _knobValueLastFrame = Knob.Value; + } + + protected virtual void HandlePower() + { + _knobValue = Knob.Active ? Knob.Value : 0f; + + if (!_carStarted) + { + if ((_knobValue > MinimumKnobValue) && (Knob.Active)) + { + _carStarted = true; + _carStartedAt = Time.time; + _lastStartClickAt = Time.time; + + HapticPatterns.PlayConstant(_knobValue, _knobValue, MaximumPowerDuration); + CarEngineAudioSource.Play(); + } + else + { + Power += Time.deltaTime * ChargingSpeed; + Power = Mathf.Clamp(Power, 0f, MaximumPowerDuration); + + if (Power == MaximumPowerDuration) + { + Knob.SetActive(true); + Knob._rectTransform.localScale = Vector3.one; + ReloadingPrompt.SetActive(false); + } + else + { + if (!Knob.Active) + { + Knob.SetValue(CarSpeed); + } + } + } + } + else + { + if (Time.time - _carStartedAt > MaximumPowerDuration) + { + _carStarted = false; + Knob.SetActive(false); + Knob._rectTransform.localScale = Vector3.one * 0.9f; + ReloadingPrompt.SetActive(true); + } + else + { + if (_knobValue > MinimumKnobValue) + { + Power -= Time.deltaTime; + Power = Mathf.Clamp(Power, 0f, MaximumPowerDuration); + + HapticController.clipLevel = _knobValue; + HapticController.clipFrequencyShift = _knobValue; + + if (Power <= 0f) + { + _carStarted = false; + Knob.SetActive(false); + Knob._rectTransform.localScale = Vector3.one * 0.9f; + ReloadingPrompt.SetActive(true); + HapticController.Stop(); + } + } + else + { + _carStarted = false; + _lastStartClickAt = Time.time; + HapticController.Stop(); + } + } + } + } + + protected virtual void UpdateCar() + { + float targetSpeed = _carStarted ? NiceVibrationsDemoHelpers.Remap(Knob.Value, MinimumKnobValue, 1f, 0f, 1f) : 0f; + CarSpeed = Mathf.Lerp(CarSpeed, targetSpeed, Time.deltaTime * 1f); + + CarEngineAudioSource.volume = CarSpeed; + CarEngineAudioSource.pitch = NiceVibrationsDemoHelpers.Remap(CarSpeed, 0f, 1f, 0.5f, 1.25f); + + LeftWheel.Rotate(CarSpeed * Time.deltaTime * WheelRotationSpeed, Space.Self); + RightWheel.Rotate(CarSpeed * Time.deltaTime * WheelRotationSpeed, Space.Self); + + _carPosition.x = _initialCarPosition.x + 0f; + _carPosition.y = _initialCarPosition.y + 10 * CarSpeed * Mathf.PerlinNoise(Time.time * 10f, CarSpeed * 10f); + _carPosition.z = 0f; + CarBody.localPosition = _carPosition; + + } + + protected virtual void UpdateUI() + { + if (Knob.Active) + { + // start dent + if (Time.time - _lastStartClickAt < StartClickDuration) + { + float elapsedTime = StartClickCurve.Evaluate((Time.time - _lastStartClickAt) * (1 / StartClickDuration)); + Knob._rectTransform.localScale = Vector3.one + Vector3.one * elapsedTime * 0.05f; + Knob._image.color = Color.Lerp(ActiveColor, Color.white, elapsedTime); + } + + // other dents + foreach (float f in Dents) + { + if (((_knobValue >= f) && (_knobValueLastFrame < f)) || ((_knobValue <= f) && (_knobValueLastFrame > f))) + { + _lastDentAt = Time.time; + break; + } + } + if (Time.time - _lastDentAt < DentDuration) + { + float elapsedTime = StartClickCurve.Evaluate((Time.time - _lastDentAt) * (1 / DentDuration)); + Knob._rectTransform.localScale = Vector3.one + Vector3.one * elapsedTime * 0.02f; + Knob._image.color = Color.Lerp(ActiveColor, Color.white, elapsedTime * 0.05f); + } + } + + // gas bar + PowerBar.UpdateBar(Power, 0f, MaximumPowerDuration); + + // power bars + if (CarSpeed <= 0.1f) + { + for (int i = 0; i < SpeedBars.Count; i++) + { + SpeedBars[i].SetActive(false); + } + } + else + { + int barsAmount = (int)(CarSpeed * 5f); + for (int i = 0; i < SpeedBars.Count; i++) + { + if (i <= barsAmount) + { + SpeedBars[i].SetActive(true); + } + else + { + SpeedBars[i].SetActive(false); + } + } + } + } + } +} + diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/CarDemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/CarDemoManager.cs.meta new file mode 100644 index 0000000..07f3419 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/CarDemoManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35a26d6ebcf6d9c488dfd296cf2219f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/PowerBarElement.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/PowerBarElement.cs new file mode 100644 index 0000000..acfa91b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/PowerBarElement.cs @@ -0,0 +1,57 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + public class PowerBarElement : MonoBehaviour + { + public float BumpDuration = 0.15f; + public Color NormalColor; + public Color InactiveColor; + public AnimationCurve Curve; + + protected Image _image; + protected float _bumpDuration = 0f; + protected bool _active = false; + protected bool _activeLastFrame = false; + + protected virtual void Awake() + { + _image = this.gameObject.GetComponent(); + } + + public virtual void SetActive(bool status) + { + _active = status; + _image.color = status ? NormalColor : InactiveColor; + } + + protected virtual void Update() + { + if (_active && !_activeLastFrame) + { + StartCoroutine(ColorBump()); + } + _activeLastFrame = _active; + } + + protected virtual IEnumerator ColorBump() + { + _bumpDuration = 0f; + while (_bumpDuration < BumpDuration) + { + float curveValue = Curve.Evaluate(_bumpDuration / BumpDuration); + _image.color = Color.Lerp(NormalColor, Color.white, curveValue); + + _bumpDuration += Time.deltaTime; + yield return null; + } + + _image.color = NormalColor; + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/PowerBarElement.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/PowerBarElement.cs.meta new file mode 100644 index 0000000..e65f7cf --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Scripts/PowerBarElement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b00d7a1bf2998ce459a1952941fc251e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds.meta new file mode 100644 index 0000000..f26f616 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ba70b539e46c8a40ab2f75dfd727c67 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds/NVCarEngine.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds/NVCarEngine.wav new file mode 100644 index 0000000..9bcb654 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds/NVCarEngine.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds/NVCarEngine.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds/NVCarEngine.wav.meta new file mode 100644 index 0000000..8fa7b42 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sounds/NVCarEngine.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 26f9f894c832e234e91a99e33cda5548 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites.meta new file mode 100644 index 0000000..52fe0f4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02462ef27bcd8c644ab078a5a3b8b668 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCar.png b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCar.png new file mode 100644 index 0000000..36eff41 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCar.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCar.png.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCar.png.meta new file mode 100644 index 0000000..f76ea20 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCar.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 4ca0dd4a0b132db4c9e5e7f164b7d2c7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCarWheel.png b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCarWheel.png new file mode 100644 index 0000000..b5b6220 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCarWheel.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCarWheel.png.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCarWheel.png.meta new file mode 100644 index 0000000..7ba3b93 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/CarDemo/Sprites/NVCarWheel.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: e2611d2b291e3374a979553a9a11c752 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo.meta new file mode 100644 index 0000000..f82e03a --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2b5e39b0f01c07409c5f3f42dc1824f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts.meta new file mode 100644 index 0000000..284efd9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 39f7404cc84e420479bcaa59d1893edf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts/ContinuousHapticsDemoManager.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts/ContinuousHapticsDemoManager.cs new file mode 100644 index 0000000..d686ec1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts/ContinuousHapticsDemoManager.cs @@ -0,0 +1,163 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + public class ContinuousHapticsDemoManager : DemoManager + { + [Header("Texts")] + public float ContinuousAmplitude = 1f; + public float ContinuousFrequency = 1f; + public float ContinuousDuration = 3f; + public Text ContinuousAmplitudeText; + public Text ContinuousFrequencyText; + public Text ContinuousDurationText; + public Text ContinuousButtonText; + [Header("Interface")] + public MMTouchButton ContinuousButton; + public MMProgressBar AmplitudeProgressBar; + public MMProgressBar FrequencyProgressBar; + public MMProgressBar DurationProgressBar; + public MMProgressBar ContinuousProgressBar; + public HapticCurve TargetCurve; + public Slider DurationSlider; + + protected float _timeLeft; + protected Color _continuousButtonOnColor = new Color32(216, 85, 85, 255); + protected Color _continuousButtonOffColor = new Color32(242, 27, 80, 255); + protected bool _continuousActive = false; + protected float _amplitudeLastFrame = -1f; + protected float _frequencyLastFrame = -1f; + + protected virtual void Awake() + { + ContinuousButton.ReturnToInitialSpriteAutomatically = false; + + ContinuousAmplitudeText.text = ContinuousAmplitude.ToString(); + ContinuousFrequencyText.text = ContinuousFrequency.ToString(); + ContinuousDurationText.text = ContinuousDuration.ToString(); + + AmplitudeProgressBar.UpdateBar(ContinuousAmplitude, 0f, 1f); + FrequencyProgressBar.UpdateBar(ContinuousFrequency, 0f, 1f); + DurationProgressBar.UpdateBar(ContinuousDuration, 0f, 5f); + } + + protected virtual void Update() + { + UpdateContinuousDemo(); + } + + protected virtual void UpdateContinuousDemo() + { + if (_timeLeft > 0f) + { + ContinuousProgressBar.UpdateBar(_timeLeft, 0f, ContinuousDuration); + _timeLeft -= Time.deltaTime; + Logo.Shaking = true; + TargetCurve.Move = true; + Logo.Amplitude = NiceVibrationsDemoHelpers.Remap(ContinuousAmplitude, 0f, 1f, 1f, 8f); + Logo.Frequency = NiceVibrationsDemoHelpers.Remap(ContinuousFrequency, 0f, 1f, 10f, 25f); + } + else + { + ContinuousProgressBar.UpdateBar(0f, 0f, ContinuousDuration); + Logo.Shaking = false; + TargetCurve.Move = false; + if (_continuousActive) + { + HapticController.Stop(); + } + } + if ((_frequencyLastFrame != ContinuousFrequency) || (_amplitudeLastFrame != ContinuousAmplitude)) + { + TargetCurve.UpdateCurve(ContinuousAmplitude, ContinuousFrequency); + } + _amplitudeLastFrame = ContinuousAmplitude; + _frequencyLastFrame = ContinuousFrequency; + } + + public virtual void UpdateContinuousAmplitude(float newAmplitude) + { + ContinuousAmplitude = newAmplitude; + AmplitudeProgressBar.UpdateBar(ContinuousAmplitude, 0f, 1f); + ContinuousAmplitudeText.text = NiceVibrationsDemoHelpers.Round(newAmplitude, 2).ToString(); + UpdateContinuous(); + } + + public virtual void UpdateContinuousFrequency(float newFrequency) + { + ContinuousFrequency = newFrequency; + FrequencyProgressBar.UpdateBar(ContinuousFrequency, 0f, 1f); + ContinuousFrequencyText.text = NiceVibrationsDemoHelpers.Round(newFrequency, 2).ToString(); + UpdateContinuous(); + } + + public virtual void UpdateContinuousDuration(float newDuration) + { + ContinuousDuration = newDuration; + DurationProgressBar.UpdateBar(ContinuousDuration, 0f, 5f); + ContinuousDurationText.text = NiceVibrationsDemoHelpers.Round(newDuration, 2).ToString(); + } + + protected virtual void UpdateContinuous() + { + if (_continuousActive) + { + HapticController.clipLevel = ContinuousAmplitude; + HapticController.clipFrequencyShift = ContinuousFrequency; + DebugAudioContinuous.volume = ContinuousAmplitude; + DebugAudioContinuous.pitch = 0.5f + ContinuousFrequency / 2f; + } + } + + public virtual void ContinuousHapticsButton() + { + if (!_continuousActive) + { + // START + HapticController.fallbackPreset = HapticPatterns.PresetType.LightImpact; + HapticPatterns.PlayConstant(ContinuousAmplitude, ContinuousFrequency, ContinuousDuration); + _timeLeft = ContinuousDuration; + ContinuousButtonText.text = "Stop continuous haptic pattern"; + DurationSlider.interactable = false; + _continuousActive = true; + DebugAudioContinuous.Play(); + } + else + { + // STOP + HapticController.Stop(); + ResetPlayState(); + } + } + + protected virtual void OnHapticsStopped() + { + ResetPlayState(); + } + + protected virtual void ResetPlayState() + { + _timeLeft = 0f; + ContinuousButtonText.text = "Play continuous haptic pattern"; + _continuousActive = false; + DebugAudioContinuous?.Stop(); + DurationSlider.interactable = true; + + } + + protected virtual void OnEnable() + { + HapticController.PlaybackStopped += OnHapticsStopped; + } + + protected virtual void OnDisable() + { + HapticController.PlaybackStopped -= OnHapticsStopped; + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts/ContinuousHapticsDemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts/ContinuousHapticsDemoManager.cs.meta new file mode 100644 index 0000000..95ea211 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/ContinuousDemo/Scripts/ContinuousHapticsDemoManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1334dc132cef6e4d980b0705fa9c3ab +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo.meta new file mode 100644 index 0000000..7035b14 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0fc25d3ff0eb22d449efd104a7bb3eda +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts.meta new file mode 100644 index 0000000..4f7b4e8 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64a1e59632681094991ca9af2fbb68d9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts/EmphasisHapticsDemoManager.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts/EmphasisHapticsDemoManager.cs new file mode 100644 index 0000000..512287a --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts/EmphasisHapticsDemoManager.cs @@ -0,0 +1,53 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + public class EmphasisHapticsDemoManager : DemoManager + { + [Header("Emphasis Haptics")] + public MMProgressBar AmplitudeProgressBar; + public MMProgressBar FrequencyProgressBar; + public HapticCurve TargetCurve; + public float EmphasisAmplitude = 1f; + public float EmphasisFrequency = 1f; + public Text EmphasisAmplitudeText; + public Text EmphasisFrequencyText; + + protected virtual void Start() + { + FrequencyProgressBar.UpdateBar(1f, 0f, 1f); + AmplitudeProgressBar.UpdateBar(1f, 0f, 1f); + TargetCurve.UpdateCurve(EmphasisAmplitude, EmphasisFrequency); + + HapticController.fallbackPreset = HapticPatterns.PresetType.RigidImpact; + } + + public virtual void UpdateEmphasisAmplitude(float newAmplitude) + { + EmphasisAmplitude = newAmplitude; + EmphasisAmplitudeText.text = NiceVibrationsDemoHelpers.Round(newAmplitude, 2).ToString(); + AmplitudeProgressBar.UpdateBar(EmphasisAmplitude, 0f, 1f); + TargetCurve.UpdateCurve(EmphasisAmplitude, EmphasisFrequency); + } + + public virtual void UpdateEmphasisFrequency(float newFrequency) + { + EmphasisFrequency = newFrequency; + EmphasisFrequencyText.text = NiceVibrationsDemoHelpers.Round(newFrequency, 2).ToString(); + FrequencyProgressBar.UpdateBar(EmphasisFrequency, 0f, 1f); + TargetCurve.UpdateCurve(EmphasisAmplitude, EmphasisFrequency); + } + + public virtual void EmphasisHapticsButton() + { + HapticPatterns.PlayEmphasis(EmphasisAmplitude, EmphasisFrequency); + StartCoroutine(Logo.Shake(0.2f)); + DebugAudioEmphasis.volume = EmphasisAmplitude; + DebugAudioEmphasis.pitch = 0.5f + EmphasisFrequency / 2f; + DebugAudioEmphasis.Play(); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts/EmphasisHapticsDemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts/EmphasisHapticsDemoManager.cs.meta new file mode 100644 index 0000000..e22f3d3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/EmphasisDemo/Scripts/EmphasisHapticsDemoManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 154496c98a10fd14aac98700fa7044bb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo.meta new file mode 100644 index 0000000..8ebf496 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3068fea84a2674c79b4cd1b8e387fcb0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations.meta new file mode 100644 index 0000000..f45efbb --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e5032ffb77ce0184081e75db6efe7659 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/AHAPPresetIconAnimator.controller b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/AHAPPresetIconAnimator.controller new file mode 100644 index 0000000..687b7f5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/AHAPPresetIconAnimator.controller @@ -0,0 +1,285 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-8439469608888585200 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: IdleAnimation + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 322142418409678110} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: b1bb90fb3329f934cb84bfd897885fac, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &-7569357459071972201 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SwapAnimation 0 + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 181740473887680277} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: fa892fcb699d82641aee0d59d88eeef8, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &-7156971018475550983 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Idle + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -7569357459071972201} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1107 &-4812566063291020210 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -8439469608888585200} + m_Position: {x: 330, y: 110, z: 0} + - serializedVersion: 1 + m_State: {fileID: -3427097150429738656} + m_Position: {x: 220, y: 210, z: 0} + - serializedVersion: 1 + m_State: {fileID: 3586450281512177956} + m_Position: {x: 375, y: 295, z: 0} + - serializedVersion: 1 + m_State: {fileID: -7569357459071972201} + m_Position: {x: 490, y: 200, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -8439469608888585200} +--- !u!1101 &-3588477303308208905 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 3586450281512177956} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &-3427097150429738656 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SwapAnimation + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -3588477303308208905} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: fa892fcb699d82641aee0d59d88eeef8, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &-3036532938430331940 +AnimatorStateTransition: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 3586450281512177956} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: AHAPPresetIconAnimator + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: Idle + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 1 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: -4812566063291020210} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1101 &181740473887680277 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -8439469608888585200} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &322142418409678110 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: Idle + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -3427097150429738656} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &3586450281512177956 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ShakingAnimation + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -7156971018475550983} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: b6374e887542a044499c8d3dee33e13a, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/AHAPPresetIconAnimator.controller.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/AHAPPresetIconAnimator.controller.meta new file mode 100644 index 0000000..4d8dc5d --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/AHAPPresetIconAnimator.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef501b816fc6d8d4da6515958af8f493 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/IdleAnimation.anim b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/IdleAnimation.anim new file mode 100644 index 0000000..2ce9042 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/IdleAnimation.anim @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: IdleAnimation + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/IdleAnimation.anim.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/IdleAnimation.anim.meta new file mode 100644 index 0000000..8bbfac5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/IdleAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1bb90fb3329f934cb84bfd897885fac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/ShakingAnimation.anim b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/ShakingAnimation.anim new file mode 100644 index 0000000..4c8da9f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/ShakingAnimation.anim @@ -0,0 +1,205 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ShakingAnimation + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0.5, y: 0.5, z: 0.5} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.05 + value: {x: 0.53, y: 0.53, z: 0.53} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.16666667 + value: {x: 0.5, y: 0.5, z: 0.5} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 3 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.16666667 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 0.53 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 0.53 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 0.53 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.16666667 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/ShakingAnimation.anim.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/ShakingAnimation.anim.meta new file mode 100644 index 0000000..8294358 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/ShakingAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6374e887542a044499c8d3dee33e13a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/SwapAnimation.anim b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/SwapAnimation.anim new file mode 100644 index 0000000..76d1939 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/SwapAnimation.anim @@ -0,0 +1,819 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SwapAnimation + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.033333335 + value: {x: 0, y: 90, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.15 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0.5, y: 0.5, z: 0.5} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.05 + value: {x: 0.5, y: 0.5, z: 0.5} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.11666667 + value: {x: 0.7, y: 0.7, z: 0.7} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.15 + value: {x: 0.5, y: 0.5, z: 0.5} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.r + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8862746 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 0.8862746 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.11666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0.8862746 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.g + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.33333334 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 0.33333334 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.11666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0.33333334 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.b + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 4 + script: {fileID: 0} + typeID: 4 + customType: 4 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 3 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 4215373228 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 2334886179 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 2526845255 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 304273561 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.15 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.x + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 90 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.y + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.z + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.r + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.8862746 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 0.8862746 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.11666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0.8862746 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.g + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.33333334 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 0.33333334 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.11666667 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0.33333334 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.b + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.083333336 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.11666667 + value: 0.7 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.11666667 + value: 0.7 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.05 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.11666667 + value: 0.7 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.15 + value: 0.5 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + m_EulerEditorCurves: + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.x + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.y + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.z + path: + classID: 224 + script: {fileID: 0} + m_HasGenericRootTransform: 1 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/SwapAnimation.anim.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/SwapAnimation.anim.meta new file mode 100644 index 0000000..3228e4c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Animations/SwapAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa892fcb699d82641aee0d59d88eeef8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics.meta new file mode 100644 index 0000000..4d442fb --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a1dd446e1a0b4b07bb349640bf6067d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVCarillon.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVCarillon.haptic new file mode 100644 index 0000000..edb1d48 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVCarillon.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVCarillon.wav","project":"NVCarillon","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00009709346},{"time":0.0010204081,"amplitude":0.00009709346},{"time":0.003015873,"amplitude":0.343267,"emphasis":{"amplitude":0.6476736,"frequency":1}},{"time":0.035011336,"amplitude":0.34652913},{"time":0.15201814,"amplitude":0.29368523},{"time":0.1540136,"amplitude":0.29719558,"emphasis":{"amplitude":0.56074643,"frequency":0.5271506}},{"time":0.21301587,"amplitude":0.40558034},{"time":0.26800454,"amplitude":0.42997828},{"time":0.3010204,"amplitude":0.37724346},{"time":0.3070068,"amplitude":0.4303819,"emphasis":{"amplitude":0.81204134,"frequency":0.6825632}},{"time":0.32,"amplitude":0.5821036},{"time":0.32201815,"amplitude":0.76893485},{"time":0.33600906,"amplitude":0.54540145},{"time":0.33800453,"amplitude":0.7739015},{"time":0.3510204,"amplitude":0.5577147},{"time":0.35301587,"amplitude":0.75729007},{"time":0.36600906,"amplitude":0.54635704},{"time":0.36800453,"amplitude":0.3853718,"emphasis":{"amplitude":0.72711664,"frequency":0.077126846}},{"time":0.38201812,"amplitude":0.5607535},{"time":0.42,"amplitude":0.6605083},{"time":0.4440136,"amplitude":0.51558685},{"time":0.4510204,"amplitude":0.3639447,"emphasis":{"amplitude":0.6866882,"frequency":0.33429474}},{"time":0.47900227,"amplitude":0.47531745},{"time":0.49600905,"amplitude":0.59940803},{"time":0.5250113,"amplitude":0.416149},{"time":0.5440136,"amplitude":0.530239},{"time":0.55600905,"amplitude":0.38471746},{"time":0.5740136,"amplitude":0.54103607},{"time":0.58900225,"amplitude":0.5424971},{"time":0.6180045,"amplitude":0.41545337},{"time":0.64,"amplitude":0.55424684},{"time":0.6540136,"amplitude":0.3809206},{"time":0.75,"amplitude":0.27661252},{"time":0.75700676,"amplitude":0.2641656,"emphasis":{"amplitude":0.49842572,"frequency":0.25767118}},{"time":0.7709977,"amplitude":0.37065583},{"time":0.78900224,"amplitude":0.47221},{"time":0.87,"amplitude":0.15701629},{"time":0.89,"amplitude":0.1570782},{"time":0.9080045,"amplitude":0.29830763},{"time":0.9660091,"amplitude":0.14709191},{"time":1.0009977,"amplitude":0.20372748},{"time":1.0019954,"amplitude":0.19952066},{"time":1.0080045,"amplitude":0.28394255},{"time":1.0209978,"amplitude":0.20702346},{"time":1.0229932,"amplitude":0.30022225},{"time":1.0360091,"amplitude":0.21987423},{"time":1.0380045,"amplitude":0.2991284},{"time":1.0519954,"amplitude":0.21336822},{"time":1.06,"amplitude":0.276501},{"time":1.0680045,"amplitude":0.21948233},{"time":1.1180046,"amplitude":0.14633167},{"time":1.1470068,"amplitude":0.075250626},{"time":1.1870068,"amplitude":0.09731177},{"time":1.1899999,"amplitude":0.16010725},{"time":1.2030158,"amplitude":0.13570604},{"time":1.206009,"amplitude":0.2362162},{"time":1.2180045,"amplitude":0.16989541},{"time":1.2210203,"amplitude":0.21799174},{"time":1.2630159,"amplitude":0.11470498},{"time":1.2780045,"amplitude":0.105462395},{"time":1.2950113,"amplitude":0.14031035},{"time":1.3410203,"amplitude":0.12317139},{"time":1.3650113,"amplitude":0.073638566},{"time":1.3910204,"amplitude":0.054946885},{"time":1.4080272,"amplitude":0.082662},{"time":1.445034,"amplitude":0.039723624},{"time":1.4560317,"amplitude":0.090784825},{"time":1.4690249,"amplitude":0.0795836},{"time":1.4710203,"amplitude":0.1254964},{"time":1.5450339,"amplitude":0.0533593},{"time":1.6010203,"amplitude":0.046708826},{"time":1.6220407,"amplitude":0.060810864},{"time":1.6730385,"amplitude":0.03000224},{"time":1.6890249,"amplitude":0.050694313},{"time":1.7270294,"amplitude":0.03330895},{"time":1.7680272,"amplitude":0.053305354},{"time":1.8180499,"amplitude":0.020466434},{"time":1.865034,"amplitude":0.013689935},{"time":1.9030385,"amplitude":0.04093243},{"time":1.9540362,"amplitude":0.01416559},{"time":2.0000453,"amplitude":0.020413192},{"time":2.001043,"amplitude":0.020019507},{"time":2.01805,"amplitude":0.01707455},{"time":2.0200453,"amplitude":0.021669548},{"time":2.0290475,"amplitude":0.017360171},{"time":2.0360544,"amplitude":0.023157563},{"time":2.04805,"amplitude":0.017061628},{"time":2.0490475,"amplitude":0.021847444},{"time":2.0640361,"amplitude":0.014823633},{"time":2.065034,"amplitude":0.01799632},{"time":2.0790477,"amplitude":0.012133543},{"time":2.0940363,"amplitude":0.009223355},{"time":2.1020408,"amplitude":0.0123799695},{"time":2.1150339,"amplitude":0.009693021},{"time":2.1180499,"amplitude":0.014442266},{"time":2.1300454,"amplitude":0.011168609},{"time":2.131043,"amplitude":0.014478359},{"time":2.145034,"amplitude":0.01005174},{"time":2.1680272,"amplitude":0.009072583},{"time":2.1700454,"amplitude":0.014118195},{"time":2.179025,"amplitude":0.011742985},{"time":2.1860318,"amplitude":0.016846025},{"time":2.1980271,"amplitude":0.013123787},{"time":2.2000453,"amplitude":0.015481379},{"time":2.222041,"amplitude":0.009937151},{"time":2.2360318,"amplitude":0.009431739},{"time":2.2390249,"amplitude":0.013225963},{"time":2.2470295,"amplitude":0.010614846},{"time":2.2540362,"amplitude":0.012531968},{"time":2.2690248,"amplitude":0.010612855},{"time":2.2940361,"amplitude":0.0054576886},{"time":2.3160317,"amplitude":0.008530337},{"time":2.3600225,"amplitude":0.004904773},{"time":2.3810203,"amplitude":0.005165446},{"time":2.3840137,"amplitude":0.0077237324},{"time":2.396009,"amplitude":0.005532994},{"time":2.3980272,"amplitude":0.007565572},{"time":2.4370067,"amplitude":0.003289443},{"time":2.462018,"amplitude":0.0031449303},{"time":2.5020182,"amplitude":0.0014071967},{"time":2.5530157,"amplitude":0.00048483835},{"time":2.5533786,"amplitude":0.00048483835},{"time":2.5533786,"amplitude":0.00048483835}],"frequency":[{"time":0,"frequency":0.6255723},{"time":0.14512472,"frequency":0.6326218},{"time":0.1596372,"frequency":0.7309692},{"time":0.29024944,"frequency":0.74623567},{"time":0.3018594,"frequency":0.67063546},{"time":0.3105669,"frequency":0.7763496},{"time":0.40054423,"frequency":0.8080051},{"time":0.4092517,"frequency":0.76977265},{"time":0.43247166,"frequency":0.8111188},{"time":0.4556916,"frequency":0.71587783},{"time":0.4614966,"frequency":0.7719644},{"time":0.49342406,"frequency":0.80800724},{"time":0.5340589,"frequency":0.7738971},{"time":0.54276645,"frequency":0.80644053},{"time":0.64725626,"frequency":0.72515494},{"time":0.7198186,"frequency":0.76390797},{"time":0.740136,"frequency":0.7959842},{"time":0.751746,"frequency":0.73158115},{"time":0.757551,"frequency":0.8121119},{"time":0.774966,"frequency":0.8418293},{"time":0.79818594,"frequency":0.8081203},{"time":0.8214059,"frequency":0.83235896},{"time":0.8533333,"frequency":0.78186446},{"time":0.8649433,"frequency":0.7195653},{"time":0.8910658,"frequency":0.7649985},{"time":0.89977324,"frequency":0.69652426},{"time":0.9258957,"frequency":0.7737311},{"time":0.94911563,"frequency":0.70771503},{"time":0.9723356,"frequency":0.70085764},{"time":0.9984581,"frequency":0.74897075},{"time":1.0013604,"frequency":0.7481497},{"time":1.0390929,"frequency":0.8020709},{"time":1.1029477,"frequency":0.850873},{"time":1.1319727,"frequency":0.78896004},{"time":1.1406802,"frequency":0.72056955},{"time":1.1668026,"frequency":0.7253095},{"time":1.2074375,"frequency":0.7960278},{"time":1.2277551,"frequency":0.75658816},{"time":1.2712924,"frequency":0.7393308},{"time":1.3090248,"frequency":0.7980373},{"time":1.3380498,"frequency":0.8110841},{"time":1.3467573,"frequency":0.75592494},{"time":1.3815873,"frequency":0.8559625},{"time":1.4251246,"frequency":0.7681652},{"time":1.4338322,"frequency":0.6795358},{"time":1.4541496,"frequency":0.75781864},{"time":1.4860771,"frequency":0.78800756},{"time":1.538322,"frequency":0.72250336},{"time":1.6137868,"frequency":0.77240914},{"time":1.6370068,"frequency":0.82020456},{"time":1.6544217,"frequency":0.8158866},{"time":1.7008616,"frequency":0.7989275},{"time":1.732789,"frequency":0.73673093},{"time":1.7531065,"frequency":0.7792141},{"time":1.785034,"frequency":0.7623433},{"time":1.8285713,"frequency":0.6637269},{"time":1.8604988,"frequency":0.677154},{"time":1.8866212,"frequency":0.79069465},{"time":1.9330611,"frequency":0.8388929},{"time":1.9998186,"frequency":0.75490075},{"time":2.002721,"frequency":0.7385249},{"time":2.0346484,"frequency":0.7823028},{"time":2.0578685,"frequency":0.7349855},{"time":2.0665758,"frequency":0.76883006},{"time":2.0926983,"frequency":0.6623368},{"time":2.1043084,"frequency":0.7233565},{"time":2.1333332,"frequency":0.7724233},{"time":2.1507483,"frequency":0.7009194},{"time":2.173968,"frequency":0.77311873},{"time":2.1826756,"frequency":0.8588538},{"time":2.1913831,"frequency":0.8148724},{"time":2.2117007,"frequency":0.86189514},{"time":2.2291155,"frequency":0.7948327},{"time":2.266848,"frequency":0.7855141},{"time":2.2871654,"frequency":0.6514132},{"time":2.3307028,"frequency":0.7449022},{"time":2.3568254,"frequency":0.6862751},{"time":2.3829477,"frequency":0.781998},{"time":2.3887527,"frequency":0.71088624},{"time":2.4003627,"frequency":0.7992701},{"time":2.426485,"frequency":0.77186465},{"time":2.4351926,"frequency":0.9589693},{"time":2.4468026,"frequency":0.77863485},{"time":2.4555101,"frequency":0.81566995},{"time":2.4613152,"frequency":1},{"time":2.4700227,"frequency":1},{"time":2.4758275,"frequency":0.8805573},{"time":2.4816325,"frequency":1},{"time":2.5396824,"frequency":1}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVCarillon.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVCarillon.haptic.meta new file mode 100644 index 0000000..426e602 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVCarillon.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a5cce830c10d94e848fc3ddac976fbf2 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDice.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDice.haptic new file mode 100644 index 0000000..b76f105 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDice.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVDice.wav","project":"NVDice","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00029056615},{"time":0.0010204081,"amplitude":0.00029056615},{"time":0.020022675,"amplitude":0.0010838391},{"time":0.023015874,"amplitude":0.24628326,"emphasis":{"amplitude":0.64811385,"frequency":1}},{"time":0.04301587,"amplitude":0.30893233},{"time":0.06201814,"amplitude":0.14449422},{"time":0.0870068,"amplitude":0.058487773},{"time":0.090022676,"amplitude":0.21247946,"emphasis":{"amplitude":0.5591565,"frequency":0.1768105}},{"time":0.114013605,"amplitude":0.21455966},{"time":0.14301588,"amplitude":0.06968115},{"time":0.21102041,"amplitude":0.031449247},{"time":0.21201813,"amplitude":0.24404025,"emphasis":{"amplitude":0.6422112,"frequency":0.2923607}},{"time":0.23301587,"amplitude":0.28606227},{"time":0.26600906,"amplitude":0.07495963},{"time":0.26700678,"amplitude":0.6502027},{"time":0.27002266,"amplitude":0.308164,"emphasis":{"amplitude":0.8109579,"frequency":0.618822}},{"time":0.28301588,"amplitude":0.49409807},{"time":0.30301586,"amplitude":0.21208319},{"time":0.3170068,"amplitude":0.120308496},{"time":0.35201815,"amplitude":0.044048432},{"time":0.35301587,"amplitude":0.597531},{"time":0.37201813,"amplitude":0.29360098},{"time":0.3840136,"amplitude":0.17828391},{"time":0.38501135,"amplitude":0.3910198},{"time":0.41201812,"amplitude":0.14365426},{"time":0.42501134,"amplitude":0.18421979},{"time":0.4640136,"amplitude":0.043719392},{"time":0.46501133,"amplitude":0.13552359},{"time":0.48,"amplitude":0.08007864},{"time":0.48600906,"amplitude":0.17900568},{"time":0.5050113,"amplitude":0.090373725},{"time":0.57900226,"amplitude":0.023051888},{"time":0.58,"amplitude":0.07891691},{"time":0.61,"amplitude":0.024494085},{"time":0.61099774,"amplitude":0.10730806},{"time":0.65,"amplitude":0.023467101},{"time":0.6509977,"amplitude":0.056163862},{"time":0.69600904,"amplitude":0.013153992},{"time":0.7140136,"amplitude":0.06063435},{"time":0.77900225,"amplitude":0.0046691853},{"time":0.9629932,"amplitude":0.0005919837},{"time":0.9633333,"amplitude":0.0005919837},{"time":0.9633333,"amplitude":0.0005919837}],"frequency":[{"time":0,"frequency":1},{"time":0.0058049876,"frequency":0.45383245},{"time":0.043537416,"frequency":0.74745363},{"time":0.13931973,"frequency":0.574811},{"time":0.18575963,"frequency":0.7171733},{"time":0.20897959,"frequency":0.5531693},{"time":0.23510204,"frequency":0.6953524},{"time":0.26702946,"frequency":0.52940357},{"time":0.30476192,"frequency":0.6585863},{"time":0.38893422,"frequency":0.5463057},{"time":0.41505668,"frequency":0.68535703},{"time":0.42376417,"frequency":0.54946226},{"time":0.4614966,"frequency":0.5811323},{"time":0.53696144,"frequency":0.54777396},{"time":0.6066213,"frequency":0.5811939},{"time":0.64435375,"frequency":0.72476804},{"time":0.6675737,"frequency":0.5684711},{"time":0.6849887,"frequency":0.9723859},{"time":0.69659865,"frequency":0.66252524},{"time":0.751746,"frequency":0.6206365},{"time":0.757551,"frequency":0.97920614},{"time":0.7662585,"frequency":0.6674669},{"time":0.786576,"frequency":0.679469},{"time":0.8039909,"frequency":0.99255854},{"time":0.8185034,"frequency":0.6613598},{"time":0.83591837,"frequency":1},{"time":0.85043085,"frequency":0.635323},{"time":0.8649433,"frequency":0.65902764},{"time":0.8707483,"frequency":1},{"time":0.94911563,"frequency":1}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDice.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDice.haptic.meta new file mode 100644 index 0000000..8997f59 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDice.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6ba7f34892e4048be87810ea8621b3df +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDrumsLoop.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDrumsLoop.haptic new file mode 100644 index 0000000..a91174c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDrumsLoop.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVDrumsLoop.wav","project":"NVDrumsLoop","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0009364864},{"time":0.0010204081,"amplitude":0.0009364864},{"time":0.3110204,"amplitude":0.07620178},{"time":0.31900227,"amplitude":0.405152,"emphasis":{"amplitude":0.66418356,"frequency":0.24799995}},{"time":0.46201813,"amplitude":0.08385526},{"time":0.46800452,"amplitude":0.48729575,"emphasis":{"amplitude":0.79884547,"frequency":0.69716567}},{"time":0.5770068,"amplitude":0.06986901},{"time":0.58,"amplitude":0.4712792,"emphasis":{"amplitude":0.77258885,"frequency":1}},{"time":0.6780045,"amplitude":0.053497486},{"time":0.88600904,"amplitude":0.041479148},{"time":1.0009977,"amplitude":0.22256261,"emphasis":{"amplitude":0.36485672,"frequency":0.442535}},{"time":1.0019954,"amplitude":0.35606897},{"time":1.0429932,"amplitude":0.10411902},{"time":1.2110204,"amplitude":0.017610963},{"time":1.2400227,"amplitude":0.38183823},{"time":1.3200227,"amplitude":0.114363946},{"time":1.3300227,"amplitude":0.4426949,"emphasis":{"amplitude":0.72572935,"frequency":0.30501732}},{"time":1.4060317,"amplitude":0.09889966},{"time":1.5320181,"amplitude":0.037194654},{"time":1.615034,"amplitude":0.07245794},{"time":1.7460318,"amplitude":0.009371089},{"time":1.7467574,"amplitude":0.009371089},{"time":1.7467574,"amplitude":0.009371089}],"frequency":[{"time":0,"frequency":0.57965684},{"time":0.014512472,"frequency":0.42740834},{"time":0.03482993,"frequency":0.44371918},{"time":0.089977324,"frequency":0.63599885},{"time":0.12190475,"frequency":0.57733333},{"time":0.16834468,"frequency":0.796924},{"time":0.23219955,"frequency":0.70538765},{"time":0.252517,"frequency":0.4482726},{"time":0.29895693,"frequency":0.60887516},{"time":0.32217687,"frequency":0.386419},{"time":0.3541043,"frequency":0.42010424},{"time":0.37732425,"frequency":0.56318825},{"time":0.38893422,"frequency":0.4826087},{"time":0.44988662,"frequency":0.544597},{"time":0.47310656,"frequency":0.37666655},{"time":0.49342406,"frequency":0.569349},{"time":0.52244896,"frequency":0.4854739},{"time":0.54276645,"frequency":0.6271172},{"time":0.5659864,"frequency":0.5858276},{"time":0.58630383,"frequency":0.39373335},{"time":0.60952383,"frequency":0.5171091},{"time":0.62403625,"frequency":0.4165676},{"time":0.6530612,"frequency":0.5410655},{"time":0.69079363,"frequency":0.39372602},{"time":0.740136,"frequency":0.4439552},{"time":0.77786845,"frequency":0.37495863},{"time":0.8765533,"frequency":0.41722658},{"time":0.89687073,"frequency":0.38069367},{"time":0.98394555,"frequency":0.39698616},{"time":0.9984581,"frequency":0.50306815},{"time":1.0013604,"frequency":0.48402527},{"time":1.0187755,"frequency":0.41594},{"time":1.1029477,"frequency":0.37284914},{"time":1.1116552,"frequency":0.4191558},{"time":1.1580951,"frequency":0.3929453},{"time":1.21034,"frequency":0.57704633},{"time":1.22195,"frequency":0.4299351},{"time":1.2422675,"frequency":0.44604075},{"time":1.2974149,"frequency":0.6257527},{"time":1.3119273,"frequency":0.5895117},{"time":1.3264399,"frequency":0.14500743},{"time":1.3525623,"frequency":0.097784385},{"time":1.3728797,"frequency":0.18194616},{"time":1.4280272,"frequency":0.51708287},{"time":1.4454421,"frequency":0.47969785},{"time":1.4599546,"frequency":0.6051544},{"time":1.4773695,"frequency":0.5126784},{"time":1.5005895,"frequency":0.6197688},{"time":1.5238094,"frequency":0.5511457},{"time":1.5296144,"frequency":0.22896235},{"time":1.538322,"frequency":0.10021001},{"time":1.5644443,"frequency":0.056278545},{"time":1.5702493,"frequency":0.13184358},{"time":1.6341043,"frequency":0.21219318},{"time":1.6486167,"frequency":0.3260141},{"time":1.6544217,"frequency":0.22153643},{"time":1.6718366,"frequency":0.4602595},{"time":1.7066666,"frequency":0.3504053},{"time":1.7153741,"frequency":0.50982773},{"time":1.732789,"frequency":0.36831042}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDrumsLoop.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDrumsLoop.haptic.meta new file mode 100644 index 0000000..e800beb --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVDrumsLoop.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 21b5c105f373e476c93ac1a61c2a671f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVGameOver.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVGameOver.haptic new file mode 100644 index 0000000..d897e47 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVGameOver.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVGameOver.wav","project":"NVGameOver","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.009329809},{"time":0.0010204081,"amplitude":0.009329809},{"time":0.03201814,"amplitude":0.08168642},{"time":0.033015873,"amplitude":0.029541316,"emphasis":{"amplitude":0.22724089,"frequency":0.39179796}},{"time":0.058004536,"amplitude":0.1895544},{"time":0.061020408,"amplitude":0.07101243,"emphasis":{"amplitude":0.5462495,"frequency":0.6834714}},{"time":0.07600907,"amplitude":0.42443335},{"time":0.0770068,"amplitude":0.7915504},{"time":0.09201814,"amplitude":0.5299431},{"time":0.09301587,"amplitude":0.1218151,"emphasis":{"amplitude":0.93703926,"frequency":0.79785806}},{"time":0.1070068,"amplitude":0.6323974},{"time":0.10900226,"amplitude":0.9631405},{"time":0.12301587,"amplitude":0.6411496},{"time":0.13900226,"amplitude":0.5645004},{"time":0.1410204,"amplitude":0.1053929,"emphasis":{"amplitude":0.81071466,"frequency":0.30255777}},{"time":0.17201814,"amplitude":0.43897432},{"time":0.1740136,"amplitude":0.08776502,"emphasis":{"amplitude":0.6751156,"frequency":0.64009374}},{"time":0.18900226,"amplitude":0.41757762},{"time":0.1910204,"amplitude":0.68073875},{"time":0.24301587,"amplitude":0.28483373},{"time":0.24501133,"amplitude":0.06386359,"emphasis":{"amplitude":0.4912584,"frequency":0.54339546}},{"time":0.28,"amplitude":0.2591478},{"time":0.28201813,"amplitude":0.056704752,"emphasis":{"amplitude":0.43619043,"frequency":0.13909966}},{"time":0.34,"amplitude":0.229097},{"time":0.34301588,"amplitude":0.3973265},{"time":0.3810204,"amplitude":0.19452031},{"time":0.40501133,"amplitude":0.047030404,"emphasis":{"amplitude":0.36177236,"frequency":0.33990917}},{"time":0.46501133,"amplitude":0.18570028},{"time":0.48700678,"amplitude":0.17824082},{"time":0.50900227,"amplitude":0.19085115},{"time":0.5920181,"amplitude":0.034121305},{"time":0.7719954,"amplitude":0.015583053},{"time":0.8140136,"amplitude":0.052773494},{"time":0.8319954,"amplitude":0.2817468},{"time":0.8340136,"amplitude":0.076575644,"emphasis":{"amplitude":0.58904344,"frequency":0.88999355}},{"time":0.84900224,"amplitude":0.38444793},{"time":0.85099775,"amplitude":0.7149966},{"time":0.86600906,"amplitude":0.46589118},{"time":0.8680045,"amplitude":0.11912696,"emphasis":{"amplitude":0.9163613,"frequency":0.66241336}},{"time":0.88299316,"amplitude":0.58556765},{"time":0.8850113,"amplitude":0.8602915},{"time":0.9,"amplitude":0.5407255},{"time":0.9029932,"amplitude":0.10286982,"emphasis":{"amplitude":0.7913064,"frequency":0.19659795}},{"time":0.9170068,"amplitude":0.50135446},{"time":0.91900223,"amplitude":0.75832677},{"time":0.9350113,"amplitude":0.4800731},{"time":0.9390023,"amplitude":0.092896424,"emphasis":{"amplitude":0.7145879,"frequency":0.15971045}},{"time":0.95299315,"amplitude":0.453558},{"time":0.9550113,"amplitude":0.712662},{"time":0.9680045,"amplitude":0.47354627},{"time":1.0009977,"amplitude":0.20535544},{"time":1.0019954,"amplitude":0.20097506},{"time":1.0150113,"amplitude":0.13419603},{"time":1.0160091,"amplitude":0.17874362},{"time":1.0390023,"amplitude":0.09887707},{"time":1.0440136,"amplitude":0.11993026},{"time":1.0570068,"amplitude":0.0955358},{"time":1.06,"amplitude":0.18504667},{"time":1.0609977,"amplitude":0.04685706,"emphasis":{"amplitude":0.36043894,"frequency":0.24707527}},{"time":1.0630158,"amplitude":0.3918914},{"time":1.0780045,"amplitude":0.24573536},{"time":1.0809977,"amplitude":0.3615085},{"time":1.0819955,"amplitude":0.08276409,"emphasis":{"amplitude":0.63664687,"frequency":0.8407495}},{"time":1.1,"amplitude":0.3576545},{"time":1.1019955,"amplitude":0.3449064},{"time":1.1040136,"amplitude":0.083630875,"emphasis":{"amplitude":0.6433144,"frequency":0.8882143}},{"time":1.1140136,"amplitude":0.4710223},{"time":1.1240135,"amplitude":0.3338501},{"time":1.1260091,"amplitude":0.08026671,"emphasis":{"amplitude":0.61743623,"frequency":1}},{"time":1.14,"amplitude":0.38946965},{"time":1.1470068,"amplitude":0.31448406},{"time":1.1490022,"amplitude":0.065242745,"emphasis":{"amplitude":0.5018673,"frequency":0.80665797}},{"time":1.1680045,"amplitude":0.26532057},{"time":1.17,"amplitude":0.25856128},{"time":1.1720182,"amplitude":0.064328074,"emphasis":{"amplitude":0.49483138,"frequency":0.8499934}},{"time":1.186009,"amplitude":0.31117824},{"time":1.1930158,"amplitude":0.24732411},{"time":1.1950113,"amplitude":0.06273006,"emphasis":{"amplitude":0.48253894,"frequency":0.86254823}},{"time":1.2140136,"amplitude":0.25059536},{"time":1.2170068,"amplitude":0.25904912},{"time":1.2190022,"amplitude":0.057566002,"emphasis":{"amplitude":0.44281542,"frequency":0.82785344}},{"time":1.2380046,"amplitude":0.22183904},{"time":1.2420181,"amplitude":0.2791501},{"time":1.2630159,"amplitude":0.14789408},{"time":1.2670068,"amplitude":0.16037533},{"time":1.2990249,"amplitude":0.068137094},{"time":1.3400227,"amplitude":0.023701735},{"time":1.3600227,"amplitude":0.027108017},{"time":1.4270295,"amplitude":0.013833871},{"time":1.4290249,"amplitude":0.028114153},{"time":1.4870294,"amplitude":0.010356642},{"time":1.4970294,"amplitude":0.017600311},{"time":1.5440363,"amplitude":0.017599402},{"time":1.6780272,"amplitude":0.007228091},{"time":1.7060317,"amplitude":0.016916612},{"time":1.7380272,"amplitude":0.006177458},{"time":1.7490476,"amplitude":0.013661046},{"time":1.7900453,"amplitude":0.0084454315},{"time":1.825034,"amplitude":0.013619511},{"time":1.8890476,"amplitude":0.0065018935},{"time":2.0000453,"amplitude":0.008233938},{"time":2.001043,"amplitude":0.008068038},{"time":2.0020409,"amplitude":0.007870686},{"time":2.0040588,"amplitude":0.0073026037},{"time":2.0060544,"amplitude":0.0070042657},{"time":2.00805,"amplitude":0.007051225},{"time":2.0090475,"amplitude":0.006872694},{"time":2.0100453,"amplitude":0.0068355817},{"time":2.0120409,"amplitude":0.0064034746},{"time":2.0140588,"amplitude":0.0061514466},{"time":2.0150566,"amplitude":0.0059582167},{"time":2.0170522,"amplitude":0.0057861116},{"time":2.01805,"amplitude":0.005600034},{"time":2.0190475,"amplitude":0.0055580437},{"time":2.0200453,"amplitude":0.00540583},{"time":2.0220408,"amplitude":0.0049554235},{"time":2.0230386,"amplitude":0.0047711907},{"time":2.0240362,"amplitude":0.0046606194},{"time":2.0250566,"amplitude":0.0046281605},{"time":2.0260544,"amplitude":0.0044970033},{"time":2.0270522,"amplitude":0.0044339653},{"time":2.0290475,"amplitude":0.004177824},{"time":2.031043,"amplitude":0.003999795},{"time":2.0320408,"amplitude":0.0039761025},{"time":2.0330386,"amplitude":0.0044232616},{"time":2.0340362,"amplitude":0.0045635425},{"time":2.0350566,"amplitude":0.0045262277},{"time":2.03805,"amplitude":0.0040183314},{"time":2.041043,"amplitude":0.0036265377},{"time":2.0430386,"amplitude":0.0033973774},{"time":2.0440361,"amplitude":0.0053115273},{"time":2.0450566,"amplitude":0.0053438623},{"time":2.0470521,"amplitude":0.005156034},{"time":2.04805,"amplitude":0.0052739684},{"time":2.0490475,"amplitude":0.0052534305},{"time":2.0500453,"amplitude":0.0051552886},{"time":2.051043,"amplitude":0.0050030015},{"time":2.0530386,"amplitude":0.004636696},{"time":2.0540361,"amplitude":0.004520101},{"time":2.0570521,"amplitude":0.0043096477},{"time":2.0590477,"amplitude":0.0042686802},{"time":2.0600452,"amplitude":0.004193733},{"time":2.061043,"amplitude":0.0060373186},{"time":2.0620408,"amplitude":0.0062665427},{"time":2.0630386,"amplitude":0.006196999},{"time":2.065034,"amplitude":0.0059888046},{"time":2.0660543,"amplitude":0.005766524},{"time":2.0690477,"amplitude":0.0052722357},{"time":2.0700452,"amplitude":0.0052223485},{"time":2.0720408,"amplitude":0.0048231287},{"time":2.0730386,"amplitude":0.004692406},{"time":2.0738096,"amplitude":0.004692406},{"time":2.0738096,"amplitude":0.004692406}],"frequency":[{"time":0,"frequency":0.08004186},{"time":0.031927437,"frequency":0.18148705},{"time":0.0493424,"frequency":0.078760214},{"time":0.07256235,"frequency":0.13118412},{"time":0.12770975,"frequency":0.13943055},{"time":0.16544218,"frequency":0.09591228},{"time":0.19446713,"frequency":0.13598834},{"time":0.21768707,"frequency":0.09023204},{"time":0.22929706,"frequency":0.12758408},{"time":0.2554195,"frequency":0.083744675},{"time":0.26702946,"frequency":0.12093467},{"time":0.29315192,"frequency":0.07138557},{"time":0.36571428,"frequency":0.10405554},{"time":0.37151927,"frequency":0.07461283},{"time":0.41795918,"frequency":0.08599493},{"time":0.43537414,"frequency":0.04372725},{"time":0.4702041,"frequency":0.09281229},{"time":0.5195465,"frequency":0.0366518},{"time":0.6124263,"frequency":0.096653104},{"time":0.64725626,"frequency":0.15888107},{"time":0.7053061,"frequency":0.07175049},{"time":0.7227211,"frequency":0.14372101},{"time":0.7372336,"frequency":0.09316021},{"time":0.7604535,"frequency":0.15500489},{"time":0.786576,"frequency":0.16266425},{"time":0.8243084,"frequency":0.11941211},{"time":0.83591837,"frequency":0.16226956},{"time":0.8591383,"frequency":0.1254459},{"time":0.9404082,"frequency":0.15664941},{"time":0.9984581,"frequency":0.09432704},{"time":1.0013604,"frequency":0.06536055},{"time":1.0245805,"frequency":0.061189562},{"time":1.0855328,"frequency":0.13680713},{"time":1.0913378,"frequency":0.07694498},{"time":1.1290702,"frequency":0.12668008},{"time":1.1580951,"frequency":0.062543534},{"time":1.1813151,"frequency":0.046357464},{"time":1.24517,"frequency":0.109249696},{"time":1.2770975,"frequency":0.04307543},{"time":1.2945124,"frequency":0.13179976},{"time":1.3902947,"frequency":0.1458862},{"time":1.4048072,"frequency":0.18549304},{"time":1.4570521,"frequency":0.11400614},{"time":1.4831746,"frequency":0.21414551},{"time":1.5238094,"frequency":0.104154706},{"time":1.5673468,"frequency":0.15918732},{"time":1.6282992,"frequency":0.091868676},{"time":1.6544217,"frequency":0.16362672},{"time":1.6660317,"frequency":0.10324445},{"time":1.6921542,"frequency":0.15411218},{"time":1.6979591,"frequency":0.0964198},{"time":1.726984,"frequency":0.17527172},{"time":1.7531065,"frequency":0.103060015},{"time":1.8053514,"frequency":0.17580418},{"time":1.8430839,"frequency":0.14040986},{"time":1.8663038,"frequency":0.18111517},{"time":1.9098412,"frequency":0.1313249},{"time":1.9533786,"frequency":0.16776304},{"time":1.9678911,"frequency":0.11514239},{"time":1.9998186,"frequency":0.15905446},{"time":2.002721,"frequency":0.15563117},{"time":2.0056236,"frequency":0.14434914},{"time":2.008526,"frequency":0.15493391},{"time":2.0114286,"frequency":0.17909242},{"time":2.0143309,"frequency":0.19375955},{"time":2.0172334,"frequency":0.1994666},{"time":2.0201359,"frequency":0.20108724},{"time":2.0230384,"frequency":0.19892065},{"time":2.025941,"frequency":0.1880408},{"time":2.0288434,"frequency":0.16665767},{"time":2.031746,"frequency":0.14913847},{"time":2.0346484,"frequency":0.14314157},{"time":2.037551,"frequency":0.17115973},{"time":2.0404534,"frequency":0.17206638},{"time":2.043356,"frequency":0.1595978},{"time":2.0462584,"frequency":0.16236964},{"time":2.049161,"frequency":0.175383},{"time":2.0520635,"frequency":0.14884965},{"time":2.054966,"frequency":0.12554899},{"time":2.0578685,"frequency":0.14238593},{"time":2.060771,"frequency":0.14767478}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVGameOver.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVGameOver.haptic.meta new file mode 100644 index 0000000..1a7b523 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVGameOver.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4c1fed00d51304ffbbcd07464f90b37d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVHeartbeats.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVHeartbeats.haptic new file mode 100644 index 0000000..c061759 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVHeartbeats.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVHeartbeats.wav","project":"NVHeartbeats","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.009742844},{"time":0.0010204081,"amplitude":0.009742844},{"time":0.003015873,"amplitude":0.19868761},{"time":0.0070068026,"amplitude":0.21186994},{"time":0.009002267,"amplitude":0.3535316},{"time":0.018004535,"amplitude":0.32513767},{"time":0.029002268,"amplitude":0.2547701},{"time":0.045011338,"amplitude":0.18802175},{"time":0.06301587,"amplitude":0.13030155},{"time":0.083015874,"amplitude":0.085643366},{"time":0.10401361,"amplitude":0.055023465},{"time":0.12900226,"amplitude":0.031824943},{"time":0.18501133,"amplitude":0.008188676},{"time":0.22900227,"amplitude":0.0017238385},{"time":0.29999998,"amplitude":0.000433428},{"time":0.3010204,"amplitude":0.023433387},{"time":0.3040086,"amplitude":0.3662426,"emphasis":{"amplitude":0.8550492434482757,"frequency":1}},{"time":0.3040136,"amplitude":0.5318154},{"time":0.3070068,"amplitude":0.50587577},{"time":0.30900225,"amplitude":0.8576526},{"time":0.31201813,"amplitude":0.8540082},{"time":0.31501132,"amplitude":0.78581953},{"time":0.31900227,"amplitude":0.79041666},{"time":0.32900226,"amplitude":0.6319953},{"time":0.3370068,"amplitude":0.54113984},{"time":0.3540136,"amplitude":0.38007545},{"time":0.37301588,"amplitude":0.25503132},{"time":0.39301586,"amplitude":0.16664001},{"time":0.4170068,"amplitude":0.098586604},{"time":0.4540136,"amplitude":0.042635933},{"time":0.48301587,"amplitude":0.020449765},{"time":0.53301585,"amplitude":0.0033419875},{"time":0.5770068,"amplitude":0.0005798723},{"time":0.9,"amplitude":0.0004947566},{"time":0.9020066357822161,"amplitude":0.10341841455295508},{"time":0.9029932,"amplitude":0.15402092,"emphasis":{"amplitude":0.18556738,"frequency":0.14043266}},{"time":0.9050361486566805,"amplitude":0.17912326986405525},{"time":0.9070068,"amplitude":0.20333728},{"time":0.90900224,"amplitude":0.34423363},{"time":0.9370068,"amplitude":0.21514598},{"time":0.9550113,"amplitude":0.1495948},{"time":0.9729932,"amplitude":0.10280151},{"time":1.0009977,"amplitude":0.059750818},{"time":1.0019954,"amplitude":0.057907753},{"time":1.0170068,"amplitude":0.04022924},{"time":1.0429932,"amplitude":0.022579549},{"time":1.0670068,"amplitude":0.012942444},{"time":1.1,"amplitude":0.0051094904},{"time":1.1520181,"amplitude":0.0006914464},{"time":1.2000227,"amplitude":0.00037157716},{"time":1.2010204,"amplitude":0.016553689},{"time":1.2040085999999999,"amplitude":0.36852205,"emphasis":{"amplitude":0.8336576524137936,"frequency":0.96081686}},{"time":1.2040136,"amplitude":0.53432286},{"time":1.2070068,"amplitude":0.50807685},{"time":1.2090023,"amplitude":0.85174495},{"time":1.2100227,"amplitude":0.8910244},{"time":1.2120181,"amplitude":0.87354046},{"time":1.2140136,"amplitude":0.81445026},{"time":1.2180045,"amplitude":0.7936242},{"time":1.2210203,"amplitude":0.72203946},{"time":1.2250113,"amplitude":0.695834},{"time":1.2290022,"amplitude":0.61917233},{"time":1.2340136,"amplitude":0.5880176},{"time":1.2370068,"amplitude":0.53021616},{"time":1.2410204,"amplitude":0.50928617},{"time":1.2450113,"amplitude":0.45255724},{"time":1.2500226,"amplitude":0.42614263},{"time":1.2540135,"amplitude":0.37573743},{"time":1.259025,"amplitude":0.35394874},{"time":1.2630159,"amplitude":0.3121782},{"time":1.2700226,"amplitude":0.28171903},{"time":1.2730159,"amplitude":0.25217998},{"time":1.2780045,"amplitude":0.23790987},{"time":1.2830158,"amplitude":0.2039585},{"time":1.3040136,"amplitude":0.13108838},{"time":1.3170068,"amplitude":0.09773624},{"time":1.3410203,"amplitude":0.057223924},{"time":1.3700227,"amplitude":0.028775413},{"time":1.399025,"amplitude":0.012871244},{"time":1.4290249,"amplitude":0.0040058647},{"time":1.4660317,"amplitude":0.00085569033},{"time":1.5120181,"amplitude":0.00051419035},{"time":1.7990476,"amplitude":0.00053922477},{"time":1.8,"amplitude":0.00053922477},{"time":1.8,"amplitude":0.00053922477}],"frequency":[{"time":0,"frequency":0.020718927},{"time":0.17414966,"frequency":0.0033238232},{"time":0.20897959,"frequency":0.09051466},{"time":0.21188208,"frequency":0.017611936},{"time":0.22349207,"frequency":0.36407393},{"time":0.22929706,"frequency":0.3733385},{"time":0.23510204,"frequency":1},{"time":0.28734693,"frequency":1},{"time":0.29315192,"frequency":0.03697985},{"time":0.3076644,"frequency":0.015080327},{"time":0.44408163,"frequency":0.0042551477},{"time":0.510839,"frequency":0.013670002},{"time":0.5195465,"frequency":0.114794515},{"time":0.528254,"frequency":1},{"time":0.6675737,"frequency":1},{"time":0.6704762,"frequency":0.39109683},{"time":0.6733787,"frequency":1},{"time":0.76335603,"frequency":1},{"time":0.7662585,"frequency":0.34064588},{"time":0.769161,"frequency":1},{"time":0.8126984,"frequency":1},{"time":0.8156009,"frequency":0.46277383},{"time":0.8185034,"frequency":1},{"time":0.8591383,"frequency":1},{"time":0.8620408,"frequency":0.33363342},{"time":0.8649433,"frequency":1},{"time":0.88816327,"frequency":1},{"time":0.8910658,"frequency":0.14180698},{"time":0.8939682,"frequency":0.029813504},{"time":0.9984581,"frequency":0.0049297404},{"time":1.0013604,"frequency":0.0075458325},{"time":1.0390929,"frequency":0.0169438},{"time":1.0594103,"frequency":0.0026711088},{"time":1.0942403,"frequency":0.010803959},{"time":1.1058502,"frequency":0.07026733},{"time":1.1116552,"frequency":0.18236092},{"time":1.1174603,"frequency":0.1253173},{"time":1.1203628,"frequency":0.028144006},{"time":1.1232653,"frequency":0.4114257},{"time":1.1261678,"frequency":1},{"time":1.1900226,"frequency":1},{"time":1.1929251,"frequency":0.04367737},{"time":1.2074375,"frequency":0.015173969},{"time":1.2974149,"frequency":0.0044053462},{"time":1.3264399,"frequency":0.013245664},{"time":1.3612697,"frequency":0.0032118666},{"time":1.3670747,"frequency":0.019418897},{"time":1.3873922,"frequency":0.0033809673},{"time":1.4077097,"frequency":0.009184113},{"time":1.4106121,"frequency":0.056718018},{"time":1.4193196,"frequency":0.050725304},{"time":1.4280272,"frequency":0.2703589},{"time":1.4309297,"frequency":1},{"time":1.4512471,"frequency":1},{"time":1.4541496,"frequency":0.22229218},{"time":1.4570521,"frequency":1},{"time":1.6457142,"frequency":1},{"time":1.6486167,"frequency":0.3691811},{"time":1.6515192,"frequency":1},{"time":1.7879364,"frequency":1}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVHeartbeats.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVHeartbeats.haptic.meta new file mode 100644 index 0000000..5aaa8bf --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVHeartbeats.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bc8515b2736d340359b4c718c4f565ed +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVLaser.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVLaser.haptic new file mode 100644 index 0000000..89fcc8f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVLaser.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVLaser.wav","project":"NVLaser","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0017255099},{"time":0.0010204081,"amplitude":0.0017255099},{"time":0.12301587,"amplitude":0.07223919},{"time":0.13401361,"amplitude":0.18510589},{"time":0.17002267,"amplitude":0.10778592},{"time":0.18002267,"amplitude":0.2586065},{"time":0.20900226,"amplitude":0.13137087},{"time":0.2310204,"amplitude":0.29201555},{"time":0.25800452,"amplitude":0.17390208},{"time":0.26700678,"amplitude":0.29850727},{"time":0.30201814,"amplitude":0.14707981},{"time":0.30800453,"amplitude":0.30684108},{"time":0.33201814,"amplitude":0.1479549},{"time":0.36201814,"amplitude":0.18593988},{"time":0.36301586,"amplitude":0.35081637},{"time":0.39401358,"amplitude":0.35372257},{"time":0.4340136,"amplitude":0.21519852},{"time":0.5309977,"amplitude":0.28164306},{"time":0.55099773,"amplitude":0.232494},{"time":0.56201816,"amplitude":0.38681284},{"time":0.5770068,"amplitude":0.26004165},{"time":0.57800454,"amplitude":0.54438466},{"time":0.6020181,"amplitude":0.30231833},{"time":0.6020231,"amplitude":0.019608384,"emphasis":{"amplitude":1,"frequency":1}},{"time":0.6290023,"amplitude":0.6940676},{"time":0.6440136,"amplitude":0.87075484},{"time":0.6740136,"amplitude":0.71666694},{"time":0.68600905,"amplitude":0.8502852},{"time":0.69900227,"amplitude":0.63795453},{"time":0.7070068,"amplitude":0.8364907},{"time":0.7470068,"amplitude":0.5904382},{"time":0.77301586,"amplitude":0.7089987},{"time":0.81600904,"amplitude":0.4390986},{"time":0.81700677,"amplitude":0.55781335},{"time":0.8629932,"amplitude":0.36680514},{"time":0.88800454,"amplitude":0.5098218},{"time":0.9229932,"amplitude":0.43316934},{"time":0.94199544,"amplitude":0.26113972},{"time":0.96900225,"amplitude":0.2319729},{"time":0.9780045,"amplitude":0.4813424},{"time":1.0009977,"amplitude":0.25522694},{"time":1.0019954,"amplitude":0.24670526},{"time":1.0039909,"amplitude":0.36111116},{"time":1.0270067,"amplitude":0.2467812},{"time":1.0350113,"amplitude":0.36261436},{"time":1.0690023,"amplitude":0.18044025},{"time":1.0799999,"amplitude":0.29594296},{"time":1.0919955,"amplitude":0.209547},{"time":1.0940136,"amplitude":0.3883011},{"time":1.1109977,"amplitude":0.24293727},{"time":1.1380045,"amplitude":0.30449128},{"time":1.1540136,"amplitude":0.20969118},{"time":1.1570067,"amplitude":0.33029675},{"time":1.1730158,"amplitude":0.21920748},{"time":1.186009,"amplitude":0.33262512},{"time":1.2020181,"amplitude":0.21958907},{"time":1.206009,"amplitude":0.39279664},{"time":1.2230159,"amplitude":0.240558},{"time":1.2520181,"amplitude":0.17644553},{"time":1.2550113,"amplitude":0.32221487},{"time":1.2830158,"amplitude":0.18837929},{"time":1.2860091,"amplitude":0.28451455},{"time":1.306009,"amplitude":0.264687},{"time":1.3330158,"amplitude":0.14619425},{"time":1.336009,"amplitude":0.26152226},{"time":1.3650113,"amplitude":0.13510025},{"time":1.3680272,"amplitude":0.20439917},{"time":1.3960317,"amplitude":0.10438298},{"time":1.4110204,"amplitude":0.19872282},{"time":1.4410204,"amplitude":0.09552585},{"time":1.4720181,"amplitude":0.077327974},{"time":1.4990249,"amplitude":0.14041764},{"time":1.542018,"amplitude":0.069031686},{"time":1.5560317,"amplitude":0.10237845},{"time":1.6040362,"amplitude":0.058603406},{"time":1.6670295,"amplitude":0.043007355},{"time":1.7060317,"amplitude":0.07542444},{"time":1.7600453,"amplitude":0.033016577},{"time":1.7880498,"amplitude":0.052541297},{"time":1.8980498,"amplitude":0.023979068},{"time":2.0000453,"amplitude":0.027374825},{"time":2.001043,"amplitude":0.026610687},{"time":2.0070522,"amplitude":0.029745897},{"time":2.01805,"amplitude":0.022531314},{"time":2.0360544,"amplitude":0.01676115},{"time":2.03805,"amplitude":0.029622},{"time":2.04805,"amplitude":0.022751193},{"time":2.051043,"amplitude":0.03150773},{"time":2.061043,"amplitude":0.023992462},{"time":2.0630386,"amplitude":0.03115482},{"time":2.0740364,"amplitude":0.0234148},{"time":2.07805,"amplitude":0.025513023},{"time":2.1060317,"amplitude":0.014877601},{"time":2.1090477,"amplitude":0.019236473},{"time":2.1180499,"amplitude":0.015189162},{"time":2.1220407,"amplitude":0.019296568},{"time":2.1300454,"amplitude":0.015228036},{"time":2.135034,"amplitude":0.020725239},{"time":2.1430385,"amplitude":0.016175319},{"time":2.145034,"amplitude":0.020697365},{"time":2.1740363,"amplitude":0.012407467},{"time":2.1760316,"amplitude":0.019624092},{"time":2.1860318,"amplitude":0.015050615},{"time":2.1880271,"amplitude":0.020769762},{"time":2.199025,"amplitude":0.016140245},{"time":2.2010431,"amplitude":0.022145746},{"time":2.2100227,"amplitude":0.017285056},{"time":2.2160318,"amplitude":0.018353213},{"time":2.225034,"amplitude":0.014029635},{"time":2.255034,"amplitude":0.009795969},{"time":2.2600226,"amplitude":0.014392381},{"time":2.268027,"amplitude":0.0112112975},{"time":2.2710204,"amplitude":0.01763008},{"time":2.2810204,"amplitude":0.013311785},{"time":2.2980273,"amplitude":0.014285618},{"time":2.3060317,"amplitude":0.011189288},{"time":2.3240361,"amplitude":0.00886341},{"time":2.3260317,"amplitude":0.012451554},{"time":2.3370295,"amplitude":0.009736676},{"time":2.3390248,"amplitude":0.014025056},{"time":2.349025,"amplitude":0.010666852},{"time":2.3499773,"amplitude":0.010666852},{"time":2.3499773,"amplitude":0.010666852}],"frequency":[{"time":0,"frequency":0.14895257},{"time":0.05804988,"frequency":0.3022615},{"time":0.12190475,"frequency":0.3380558},{"time":0.15673469,"frequency":0.2772177},{"time":0.16834468,"frequency":0.40550107},{"time":0.19736962,"frequency":0.29034844},{"time":0.23510204,"frequency":0.36241308},{"time":0.30476192,"frequency":0.29481015},{"time":0.33378685,"frequency":0.48282123},{"time":0.3570068,"frequency":0.2735125},{"time":0.3686168,"frequency":0.43935788},{"time":0.40054423,"frequency":0.29389578},{"time":0.44408163,"frequency":0.38485655},{"time":0.4643991,"frequency":0.27872044},{"time":0.48471656,"frequency":0.462206},{"time":0.499229,"frequency":0.24206229},{"time":0.528254,"frequency":0.25927213},{"time":0.5387223929807017,"frequency":0.7233040758620692},{"time":0.5594527669549698,"frequency":0.7264484406896552},{"time":0.5909672929807017,"frequency":0.6921314172413798},{"time":0.6240362500000003,"frequency":0.6918532310344833},{"time":0.6457017690064326,"frequency":0.7604507710344827},{"time":0.6675737000000004,"frequency":0.7040828310344832},{"time":0.6896520829807008,"frequency":0.5822840013793106},{"time":0.7570409211222252,"frequency":0.4102252448275864},{"time":0.7662585,"frequency":0.13418055},{"time":0.8156009,"frequency":0.097041726},{"time":0.8707483,"frequency":0.13602339},{"time":0.9752381,"frequency":0.061300542},{"time":0.9984581,"frequency":0.093120575},{"time":1.0013604,"frequency":0.07151502},{"time":1.0390929,"frequency":0.07866525},{"time":1.0536053,"frequency":0.11723937},{"time":1.0768254,"frequency":0.051848657},{"time":1.0971428,"frequency":0.036504805},{"time":1.1029477,"frequency":0.066510536},{"time":1.1406802,"frequency":0.029943906},{"time":1.1929251,"frequency":0.04207185},{"time":1.2074375,"frequency":0.016853949},{"time":1.2422675,"frequency":0.046026006},{"time":1.2538775,"frequency":0.01477329},{"time":1.3206348,"frequency":0.035482954},{"time":1.3583673,"frequency":0.015613145},{"time":1.3990022,"frequency":0.012904041},{"time":1.4657595,"frequency":0.03484577},{"time":1.4860771,"frequency":0.013636477},{"time":1.5441269,"frequency":0.024509316},{"time":1.5818594,"frequency":0.017918013},{"time":1.5992743,"frequency":0.0424483},{"time":1.6399093,"frequency":0.023683652},{"time":1.6602267,"frequency":0.04224544},{"time":1.6921542,"frequency":0.013032065},{"time":1.738594,"frequency":0.039678894},{"time":1.761814,"frequency":0.019554086},{"time":1.8082539,"frequency":0.032259576},{"time":1.8430839,"frequency":0.012865631},{"time":1.8779137,"frequency":0.032303654},{"time":1.9272561,"frequency":0.013526679},{"time":1.9562811,"frequency":0.03135385},{"time":1.9998186,"frequency":0.02264158},{"time":2.002721,"frequency":0.01935881},{"time":2.0143309,"frequency":0.029241586},{"time":2.031746,"frequency":0.022286167},{"time":2.037551,"frequency":0.013682295},{"time":2.0578685,"frequency":0.023244582},{"time":2.0665758,"frequency":0.015605719},{"time":2.0839908,"frequency":0.025296975},{"time":2.0897958,"frequency":0.021800758},{"time":2.0985034,"frequency":0.036845393},{"time":2.1217232,"frequency":0.02433273},{"time":2.1246257,"frequency":0.030367276},{"time":2.1391382,"frequency":0.026037382},{"time":2.1420407,"frequency":0.016759027},{"time":2.1507483,"frequency":0.027785214},{"time":2.1594558,"frequency":0.024563806},{"time":2.1826756,"frequency":0.029578403},{"time":2.1884806,"frequency":0.017990815},{"time":2.2117007,"frequency":0.0141545},{"time":2.232018,"frequency":0.028734608},{"time":2.237823,"frequency":0.02337171},{"time":2.249433,"frequency":0.034468833},{"time":2.255238,"frequency":0.02429465},{"time":2.2639456,"frequency":0.02920421},{"time":2.2784579,"frequency":0.01695538},{"time":2.2929704,"frequency":0.018555414},{"time":2.3045805,"frequency":0.033761833},{"time":2.313288,"frequency":0.02818424},{"time":2.319093,"frequency":0.034989882},{"time":2.3278003,"frequency":0.018942116},{"time":2.3365078,"frequency":0.016908238}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVLaser.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVLaser.haptic.meta new file mode 100644 index 0000000..2248f75 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVLaser.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: db702dc4cff314785bbc5a16becaaeb1 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVPowerOff.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVPowerOff.haptic new file mode 100644 index 0000000..c42f3af --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVPowerOff.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVPowerOff.wav","project":"NVPowerOff","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.015070779},{"time":0.0010104167,"amplitude":0.015070779},{"time":0.033999998,"amplitude":0.19874944},{"time":0.061,"amplitude":0.6783899},{"time":0.09001041,"amplitude":0.6315389},{"time":0.113010414,"amplitude":0.43519855},{"time":0.12201042,"amplitude":0.56304914},{"time":0.15501042,"amplitude":0.37668222},{"time":0.18501042,"amplitude":0.35565227},{"time":0.21501042,"amplitude":0.52725065},{"time":0.2570104,"amplitude":0.3210452},{"time":0.2640104,"amplitude":0.55452526},{"time":0.283,"amplitude":0.33612055},{"time":0.288,"amplitude":0.5359353},{"time":0.333,"amplitude":0.37505084},{"time":0.359,"amplitude":0.5767368},{"time":0.392,"amplitude":0.36506945},{"time":0.39699998,"amplitude":0.11074789,"emphasis":{"amplitude":0.6921742,"frequency":1}},{"time":0.41099998,"amplitude":0.54824185},{"time":0.453,"amplitude":0.8276493},{"time":0.48,"amplitude":0.38800895},{"time":0.528,"amplitude":0.70183533},{"time":0.561,"amplitude":0.3640002},{"time":0.601,"amplitude":0.42221114},{"time":0.62,"amplitude":0.2912154},{"time":0.63699996,"amplitude":0.47673112},{"time":0.666,"amplitude":0.24180242},{"time":0.71,"amplitude":0.3342865},{"time":0.735,"amplitude":0.5111902},{"time":0.75,"amplitude":0.35603142},{"time":0.774,"amplitude":0.5884088},{"time":0.792,"amplitude":0.35394394},{"time":0.81299996,"amplitude":0.4618407},{"time":0.829,"amplitude":0.31677526},{"time":0.83599997,"amplitude":0.5946864},{"time":0.853,"amplitude":0.4164131},{"time":0.90099996,"amplitude":0.4118642},{"time":0.917,"amplitude":0.094610095,"emphasis":{"amplitude":0.591313,"frequency":0.68033177}},{"time":0.937,"amplitude":0.36423582},{"time":0.94699997,"amplitude":0.5096628},{"time":1.001,"amplitude":0.38977432},{"time":1.002,"amplitude":0.38270098},{"time":1.018,"amplitude":0.48642305},{"time":1.037,"amplitude":0.32128257},{"time":1.072,"amplitude":0.4698331},{"time":1.09,"amplitude":0.29798675},{"time":1.102,"amplitude":0.50580573},{"time":1.114,"amplitude":0.3631325},{"time":1.123,"amplitude":0.49941877},{"time":1.1389999,"amplitude":0.31671983},{"time":1.145,"amplitude":0.42274812},{"time":1.18,"amplitude":0.3052479},{"time":1.186,"amplitude":0.4450214},{"time":1.2210104,"amplitude":0.25651976},{"time":1.2270104,"amplitude":0.43605432},{"time":1.2450104,"amplitude":0.25384703},{"time":1.2500104,"amplitude":0.4728747},{"time":1.2700104,"amplitude":0.32349578},{"time":1.2760104,"amplitude":0.45753217},{"time":1.2910104,"amplitude":0.2921817},{"time":1.3030103,"amplitude":0.3793425},{"time":1.3220104,"amplitude":0.2639951},{"time":1.3570104,"amplitude":0.34367883},{"time":1.3780104,"amplitude":0.22364864},{"time":1.3870105,"amplitude":0.44801658},{"time":1.4040104,"amplitude":0.34614468},{"time":1.4400208,"amplitude":0.50349224},{"time":1.4780208,"amplitude":0.2632232},{"time":1.4820209,"amplitude":0.4037684},{"time":1.5320208,"amplitude":0.20990509},{"time":1.5550208,"amplitude":0.30781424},{"time":1.5670208,"amplitude":0.22654581},{"time":1.5840209,"amplitude":0.34786388},{"time":1.6120209,"amplitude":0.19906636},{"time":1.6270208,"amplitude":0.2598589},{"time":1.6450208,"amplitude":0.16084696},{"time":1.7160312,"amplitude":0.17883426},{"time":1.7930312,"amplitude":0.09171298},{"time":1.8460312,"amplitude":0.08278626},{"time":1.8590312,"amplitude":0.18772165},{"time":1.9340416,"amplitude":0.074742824},{"time":1.934073,"amplitude":0.074742824},{"time":1.934073,"amplitude":0.074742824}],"frequency":[{"time":0,"frequency":1},{"time":0.024,"frequency":0.41719893},{"time":0.04,"frequency":0.823686},{"time":0.057333335,"frequency":0.6704361},{"time":0.10666666,"frequency":0.86131036},{"time":0.17333333,"frequency":0.51548624},{"time":0.17733333,"frequency":1},{"time":0.19466667,"frequency":0.46630314},{"time":0.264,"frequency":0.6928078},{"time":0.31333333,"frequency":0.5668509},{"time":0.352,"frequency":0.10985856},{"time":0.36266667,"frequency":0.5487559},{"time":0.376,"frequency":0.13975689},{"time":0.44,"frequency":0.15846014},{"time":0.44799998,"frequency":0.57823855},{"time":0.47733334,"frequency":0.2176181},{"time":0.48533332,"frequency":0.59662914},{"time":0.51066667,"frequency":0.25878742},{"time":0.5226667,"frequency":0.6087664},{"time":0.55333334,"frequency":0.2544047},{"time":0.58000004,"frequency":0.5359311},{"time":0.6106667,"frequency":0.13341413},{"time":0.69733334,"frequency":0.49509028},{"time":0.7106667,"frequency":0.25061837},{"time":0.7786667,"frequency":0.42164645},{"time":0.7906667,"frequency":0.2457256},{"time":0.8266667,"frequency":0.5457807},{"time":0.8693333,"frequency":0.20315357},{"time":0.9026667,"frequency":0.1463568},{"time":0.99866664,"frequency":0.25573206},{"time":1,"frequency":0.18546495},{"time":1.0320001,"frequency":0.3998695},{"time":1.0906667,"frequency":0.2832332},{"time":1.1773334,"frequency":0.4120681},{"time":1.2053334,"frequency":0.3037571},{"time":1.28,"frequency":0.51384073},{"time":1.3146666,"frequency":0.26839036},{"time":1.336,"frequency":0.4557407},{"time":1.3573333,"frequency":0.3060009},{"time":1.4466667,"frequency":0.4398677},{"time":1.492,"frequency":0.324855},{"time":1.5253334,"frequency":0.49596253},{"time":1.6026667,"frequency":0.31942517},{"time":1.6066667,"frequency":0.98985624},{"time":1.6133333,"frequency":0.2574075},{"time":1.6626667,"frequency":0.15233111},{"time":1.6693333,"frequency":1},{"time":1.6813333,"frequency":0.17410952},{"time":1.684,"frequency":0.77687913},{"time":1.712,"frequency":0.259275},{"time":1.756,"frequency":0.34702894},{"time":1.7613333,"frequency":0.81602323},{"time":1.7746667,"frequency":0.300002},{"time":1.82,"frequency":0.4404101},{"time":1.8333334,"frequency":0.27596816},{"time":1.864,"frequency":0.7898728},{"time":1.8826667,"frequency":0.3797602},{"time":1.9106667,"frequency":0.3195494},{"time":1.9173334,"frequency":1},{"time":1.928,"frequency":0.7899808}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVPowerOff.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVPowerOff.haptic.meta new file mode 100644 index 0000000..61cfcd6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVPowerOff.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5a367fd990b07468bb3bd4c42368b7fa +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVReload.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVReload.haptic new file mode 100644 index 0000000..4f19966 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVReload.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVReload.wav","project":"NVReload","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0011665601},{"time":0.0010204081,"amplitude":0.0011665601},{"time":0.04301587,"amplitude":0.090656765},{"time":0.045011338,"amplitude":0.05448132,"emphasis":{"amplitude":0.6810166,"frequency":0.6930359}},{"time":0.06501134,"amplitude":0.4372932},{"time":0.074013606,"amplitude":0.5244344},{"time":0.08900227,"amplitude":0.454652},{"time":0.11002267,"amplitude":0.2072131},{"time":0.13600907,"amplitude":0.06837343},{"time":0.2070068,"amplitude":0.003774474},{"time":0.29800454,"amplitude":0.005278711},{"time":0.29900226,"amplitude":0.05856233},{"time":0.33501133,"amplitude":0.014232192},{"time":0.36501133,"amplitude":0.05472607},{"time":0.3670068,"amplitude":0.048435777,"emphasis":{"amplitude":0.60544735,"frequency":0.9175272}},{"time":0.37900227,"amplitude":0.5015653},{"time":0.38,"amplitude":0.70304936},{"time":0.41,"amplitude":0.25246564},{"time":0.4340136,"amplitude":0.110276066},{"time":0.4470068,"amplitude":0.17640492},{"time":0.45301586,"amplitude":0.036513582,"emphasis":{"amplitude":0.4564199,"frequency":0.979376}},{"time":0.4670068,"amplitude":0.31054634},{"time":0.47301587,"amplitude":0.039704945,"emphasis":{"amplitude":0.49631193,"frequency":0.14135551}},{"time":0.4940136,"amplitude":0.26799917},{"time":0.51800454,"amplitude":0.12527685},{"time":0.5520181,"amplitude":0.03586379},{"time":0.6930159,"amplitude":0.0039011552},{"time":0.7470068,"amplitude":0.048803136},{"time":0.7480045,"amplitude":0.04395588,"emphasis":{"amplitude":0.5494486,"frequency":0.20157093}},{"time":0.7640136,"amplitude":0.29751375},{"time":0.7940136,"amplitude":0.08262607},{"time":0.83900225,"amplitude":0.018265866},{"time":0.8809977,"amplitude":0.14748895},{"time":0.88199544,"amplitude":0.053194225,"emphasis":{"amplitude":0.66492796,"frequency":1}},{"time":0.9029932,"amplitude":0.39395797},{"time":0.90900224,"amplitude":0.52490896},{"time":0.9340136,"amplitude":0.38700986},{"time":0.93600905,"amplitude":0.05699814,"emphasis":{"amplitude":0.7124769,"frequency":0.63295674}},{"time":0.95600903,"amplitude":0.46117407},{"time":0.9640136,"amplitude":0.046014667,"emphasis":{"amplitude":0.57518345,"frequency":0.19716308}},{"time":1.0009977,"amplitude":0.28520042},{"time":1.0019954,"amplitude":0.27624294},{"time":1.0360091,"amplitude":0.07397935},{"time":1.0680045,"amplitude":0.019484399},{"time":1.1240135,"amplitude":0.009558639},{"time":1.1260091,"amplitude":0.009562825,"emphasis":{"amplitude":0.119535334,"frequency":0.15177484}},{"time":1.1450113,"amplitude":0.057637192},{"time":1.1470068,"amplitude":0.12673758},{"time":1.1820182,"amplitude":0.029928558},{"time":1.2110204,"amplitude":0.009931123},{"time":1.2860091,"amplitude":0.0059048897},{"time":1.3070068,"amplitude":0.0766964},{"time":1.3270068,"amplitude":0.037846997},{"time":1.3280271,"amplitude":0.20892549},{"time":1.3470294,"amplitude":0.10326089},{"time":1.3480272,"amplitude":0.041771505,"emphasis":{"amplitude":0.5221439,"frequency":0.6707322}},{"time":1.3730159,"amplitude":0.2117398},{"time":1.3740135,"amplitude":0.040250614,"emphasis":{"amplitude":0.50313276,"frequency":0.20297274}},{"time":1.4020181,"amplitude":0.18142365},{"time":1.4040136,"amplitude":0.28492635},{"time":1.4200226,"amplitude":0.15975824},{"time":1.4430158,"amplitude":0.06858918},{"time":1.4470295,"amplitude":0.26381055},{"time":1.4630158,"amplitude":0.1505456},{"time":1.4670295,"amplitude":0.26753464},{"time":1.4880272,"amplitude":0.13800842},{"time":1.5400226,"amplitude":0.05822964},{"time":1.5430385,"amplitude":0.119099155},{"time":1.5860317,"amplitude":0.019456554},{"time":1.6170294,"amplitude":0.014486059},{"time":1.6180272,"amplitude":0.07688021},{"time":1.6670295,"amplitude":0.054426033},{"time":1.6700226,"amplitude":0.02638147,"emphasis":{"amplitude":0.32976845,"frequency":0.49023017}},{"time":1.6880271,"amplitude":0.17801143},{"time":1.6930385,"amplitude":0.030510485,"emphasis":{"amplitude":0.38138115,"frequency":0.24307717}},{"time":1.7130386,"amplitude":0.16937727},{"time":1.7310431,"amplitude":0.08219818},{"time":1.7990476,"amplitude":0.011940874},{"time":1.9570521,"amplitude":0.005550244},{"time":1.9990476,"amplitude":0.051614724},{"time":2.0000453,"amplitude":0.09515752},{"time":2.001043,"amplitude":0.14280984},{"time":2.01805,"amplitude":0.10544663},{"time":2.03805,"amplitude":0.24922447},{"time":2.0530386,"amplitude":0.18591794},{"time":2.0590477,"amplitude":0.031487558,"emphasis":{"amplitude":0.39359456,"frequency":0.1430189}},{"time":2.071043,"amplitude":0.28589126},{"time":2.0800452,"amplitude":0.043944396,"emphasis":{"amplitude":0.5493051,"frequency":0.7483455}},{"time":2.1000452,"amplitude":0.5756641},{"time":2.1020408,"amplitude":0.0563555,"emphasis":{"amplitude":0.7044439,"frequency":0.17976476}},{"time":2.1150339,"amplitude":0.5370517},{"time":2.1200454,"amplitude":0.5719441},{"time":2.1400454,"amplitude":0.35393202},{"time":2.1710432,"amplitude":0.24166632},{"time":2.2060318,"amplitude":0.07356001},{"time":2.2690248,"amplitude":0.010937771},{"time":2.3840137,"amplitude":0.0038103038},{"time":2.4340136,"amplitude":0.03377067},{"time":2.4440136,"amplitude":0.20513217},{"time":2.472018,"amplitude":0.48632765},{"time":2.4730158,"amplitude":0.053364657,"emphasis":{"amplitude":0.66705835,"frequency":0.81483626}},{"time":2.492018,"amplitude":0.5702925},{"time":2.4980044,"amplitude":0.6602093},{"time":2.5310204,"amplitude":0.25963238},{"time":2.5550113,"amplitude":0.1145652},{"time":2.556009,"amplitude":0.19294713},{"time":2.5909977,"amplitude":0.054697033},{"time":2.6129932,"amplitude":0.023741221},{"time":2.6790023,"amplitude":0.018032525},{"time":2.6870067,"amplitude":0.079711355},{"time":2.6880045,"amplitude":0.028568206,"emphasis":{"amplitude":0.35710266,"frequency":0.6085419}},{"time":2.703991,"amplitude":0.35517803},{"time":2.7219954,"amplitude":0.047926728,"emphasis":{"amplitude":0.5990842,"frequency":0.20663014}},{"time":2.7559865,"amplitude":0.31271958},{"time":2.7609978,"amplitude":0.04694412,"emphasis":{"amplitude":0.5868016,"frequency":0.64763194}},{"time":2.7779818,"amplitude":0.37397516},{"time":2.7890022,"amplitude":0.48486418},{"time":2.8349886,"amplitude":0.1214005},{"time":2.8599772,"amplitude":0.046016816},{"time":2.9249885,"amplitude":0.004003163},{"time":2.9799774,"amplitude":0.0013221075},{"time":2.9807255,"amplitude":0.0013221075},{"time":2.9807255,"amplitude":0.0013221075}],"frequency":[{"time":0,"frequency":1},{"time":0.20897959,"frequency":0.9941236},{"time":0.22639456,"frequency":0.4968017},{"time":0.23219955,"frequency":1},{"time":0.26702946,"frequency":0.9995311},{"time":0.29605442,"frequency":0.43599376},{"time":0.30476192,"frequency":0.75471324},{"time":0.33088437,"frequency":0.39995885},{"time":0.3599093,"frequency":0.9701276},{"time":0.38603175,"frequency":0.77773774},{"time":0.43827665,"frequency":0.51632327},{"time":0.4556916,"frequency":0.9429115},{"time":0.4585941,"frequency":0.31983906},{"time":0.48181406,"frequency":0.07808647},{"time":0.5079365,"frequency":0.57890105},{"time":0.528254,"frequency":0.3153591},{"time":0.5659864,"frequency":1},{"time":0.6124263,"frequency":0.28642642},{"time":0.62403625,"frequency":1},{"time":0.63854873,"frequency":0.45987466},{"time":0.64435375,"frequency":0.958657},{"time":0.6995011,"frequency":0.96498734},{"time":0.7343311,"frequency":0.5279979},{"time":0.786576,"frequency":0.80937505},{"time":0.79528344,"frequency":0.31346026},{"time":0.8068934,"frequency":0.9321095},{"time":0.8156009,"frequency":0.45463988},{"time":0.8620408,"frequency":0.44634777},{"time":0.9142857,"frequency":1},{"time":0.9984581,"frequency":1},{"time":1.0013604,"frequency":1},{"time":1.0274829,"frequency":0.3782575},{"time":1.0478004,"frequency":1},{"time":1.0565078,"frequency":0.32808235},{"time":1.0826303,"frequency":0.40973583},{"time":1.1377777,"frequency":0.41347313},{"time":1.1551926,"frequency":0.9311464},{"time":1.1755102,"frequency":0.30247873},{"time":1.1900226,"frequency":0.9269671},{"time":1.2190475,"frequency":0.2353971},{"time":1.250975,"frequency":0.9003706},{"time":1.2654874,"frequency":0.22169809},{"time":1.3119273,"frequency":0.76092714},{"time":1.3641722,"frequency":0.20950203},{"time":1.4396371,"frequency":0.23891237},{"time":1.480272,"frequency":0.6551858},{"time":1.5121995,"frequency":0.30761468},{"time":1.5673468,"frequency":0.97258145},{"time":1.5992743,"frequency":0.28904322},{"time":1.6137868,"frequency":0.64608514},{"time":1.6486167,"frequency":0.32686475},{"time":1.6863492,"frequency":0.90275836},{"time":1.7008616,"frequency":0.29505312},{"time":1.756009,"frequency":0.14466153},{"time":1.7763264,"frequency":0.62219024},{"time":1.7966439,"frequency":0.20751058},{"time":1.8227663,"frequency":0.9892712},{"time":1.8459864,"frequency":0.25639564},{"time":1.950476,"frequency":0.36584473},{"time":1.9998186,"frequency":0.14310561},{"time":2.002721,"frequency":0.1928533},{"time":2.0201359,"frequency":0.5227636},{"time":2.049161,"frequency":0.24901707},{"time":2.0723808,"frequency":1},{"time":2.0956008,"frequency":1},{"time":2.1217232,"frequency":0.20378667},{"time":2.1536508,"frequency":0.6152873},{"time":2.1884806,"frequency":0.40394837},{"time":2.2000906,"frequency":1},{"time":2.266848,"frequency":0.4497899},{"time":2.3278003,"frequency":0.48031676},{"time":2.3394103,"frequency":0.9898164},{"time":2.3597279,"frequency":0.47193456},{"time":2.426485,"frequency":0.3824802},{"time":2.4409976,"frequency":1},{"time":2.496145,"frequency":0.32269803},{"time":2.5832198,"frequency":0.2038365},{"time":2.5977323,"frequency":0.9650542},{"time":2.6093423,"frequency":0.37063596},{"time":2.6673923,"frequency":0.19401303},{"time":2.6819046,"frequency":1},{"time":2.754467,"frequency":0.9722086},{"time":2.818322,"frequency":0.36010316},{"time":2.8386393,"frequency":0.6968357},{"time":2.8560543,"frequency":0.27291113},{"time":2.8879817,"frequency":0.7897072},{"time":2.9024942,"frequency":0.39413285},{"time":2.9199092,"frequency":1},{"time":2.948934,"frequency":1},{"time":2.9663491,"frequency":0.464171}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVReload.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVReload.haptic.meta new file mode 100644 index 0000000..6516664 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVReload.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9c40e0330eb2346cb90e006681c4feb0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVTeleport.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVTeleport.haptic new file mode 100644 index 0000000..85b3db6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVTeleport.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVTeleport.wav","project":"NVTeleport","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.12181221},{"time":0.0010204081,"amplitude":0.12181221},{"time":0.005011338,"amplitude":0.27031934},{"time":0.009002267,"amplitude":0.2572458},{"time":0.013015873,"amplitude":0.40544757},{"time":0.025011338,"amplitude":0.53629833},{"time":0.039002266,"amplitude":0.6426872},{"time":0.04102041,"amplitude":0.09788013,"emphasis":{"amplitude":0.88981926,"frequency":1}},{"time":0.06401361,"amplitude":0.87172455},{"time":0.07800453,"amplitude":0.82066274},{"time":0.07900227,"amplitude":0.8611847},{"time":0.12002268,"amplitude":0.8260753},{"time":0.12800454,"amplitude":0.8209536},{"time":0.16501133,"amplitude":0.7874158},{"time":0.17201814,"amplitude":0.7313888},{"time":0.17301586,"amplitude":0.78094816},{"time":0.18002267,"amplitude":0.7269754},{"time":0.18102041,"amplitude":0.77384144},{"time":0.2070068,"amplitude":0.7481106},{"time":0.21600907,"amplitude":0.6840515},{"time":0.22002268,"amplitude":0.7361258},{"time":0.2270068,"amplitude":0.66018945},{"time":0.22800453,"amplitude":0.72933066},{"time":0.2340136,"amplitude":0.6654843},{"time":0.2410204,"amplitude":0.6933567},{"time":0.2540136,"amplitude":0.5420077},{"time":0.26900226,"amplitude":0.41183096},{"time":0.27201813,"amplitude":0.6787983},{"time":0.29501134,"amplitude":0.48994935},{"time":0.3040136,"amplitude":0.39171708},{"time":0.32301587,"amplitude":0.25808397},{"time":0.32600906,"amplitude":0.46320683},{"time":0.35201815,"amplitude":0.2774246},{"time":0.36600906,"amplitude":0.20080993},{"time":0.3770068,"amplitude":0.16788787},{"time":0.38301587,"amplitude":0.2611059},{"time":0.41201812,"amplitude":0.12360741},{"time":0.4370068,"amplitude":0.085842334},{"time":0.4410204,"amplitude":0.112326935},{"time":0.4940136,"amplitude":0.03427884},{"time":0.5309977,"amplitude":0.02869959},{"time":0.5311565,"amplitude":0.02869959},{"time":0.5311565,"amplitude":0.02869959}],"frequency":[{"time":0,"frequency":0.33119112},{"time":0.0058049876,"frequency":0.25611135},{"time":0.029024942,"frequency":0.37850285},{"time":0.040634923,"frequency":0.6160209},{"time":0.0493424,"frequency":0.59379},{"time":0.05804988,"frequency":0.25039563},{"time":0.08126984,"frequency":0.37659758},{"time":0.101587296,"frequency":0.6102123},{"time":0.11029478,"frequency":0.24677628},{"time":0.12770975,"frequency":0.2885223},{"time":0.1538322,"frequency":0.56880695},{"time":0.1596372,"frequency":0.261455},{"time":0.17124717,"frequency":0.21300004},{"time":0.2060771,"frequency":0.64008754},{"time":0.21478458,"frequency":0.20181032},{"time":0.24380952,"frequency":0.402281},{"time":0.258322,"frequency":0.6874806},{"time":0.26702946,"frequency":0.22967051},{"time":0.29024944,"frequency":0.30054507},{"time":0.3076644,"frequency":0.5839705},{"time":0.32217687,"frequency":0.19629148},{"time":0.34539682,"frequency":0.25346667},{"time":0.3541043,"frequency":0.4174527},{"time":0.3686168,"frequency":0.14394584},{"time":0.38022676,"frequency":0.15060541},{"time":0.4034467,"frequency":0.37995842},{"time":0.42376417,"frequency":0.038385883},{"time":0.43537414,"frequency":0.1695851},{"time":0.44408163,"frequency":0.040898386},{"time":0.5195465,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVTeleport.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVTeleport.haptic.meta new file mode 100644 index 0000000..c8db6bf --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Haptics/NVTeleport.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a90fad83145944657936507a7a1c4ff6 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts.meta new file mode 100644 index 0000000..b2931c2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4324e141ec02b7d4da47d8b91d546d1b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoManager.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoManager.cs new file mode 100644 index 0000000..a00ac2e --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoManager.cs @@ -0,0 +1,98 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + [Serializable] + public class HapticClipsDemoItem + { + public string Name; + public HapticClip HapticClip; + public Sprite AssociatedSprite; + public AudioSource AssociatedSound; + + } + + public class HapticClipsDemoManager : DemoManager + { + [Header("Image")] + public Image IconImage; + public Animator IconImageAnimator; + public List DemoItems; + protected WaitForSeconds _iconChangeDelay; + protected int _idleAnimationParameter; + + protected virtual void Awake() + { + _iconChangeDelay = new WaitForSeconds(0.02f); + _idleAnimationParameter = Animator.StringToHash("Idle"); + IconImageAnimator.SetBool(_idleAnimationParameter, true); + } + + // Haptic Clip ----------------------------------------------------------------------------- + + public virtual void PlayHapticClip(int index) + { + Logo.Shaking = true; + + HapticController.fallbackPreset = HapticPatterns.PresetType.LightImpact; + HapticController.Play(DemoItems[index].HapticClip); + DemoItems[index].AssociatedSound.Play(); + StopAllCoroutines(); + StartCoroutine(ChangeIcon(DemoItems[index].AssociatedSprite)); + } + + // ICON ------------------------------------------------------------------------------------ + + protected virtual IEnumerator ChangeIcon(Sprite newSprite) + { + IconImageAnimator.SetBool(_idleAnimationParameter, false); + yield return _iconChangeDelay; + IconImage.sprite = newSprite; + } + + // CALLBACKS ------------------------------------------------------------------------------- + + protected virtual IEnumerator BackToIdle() + { + Logo.Shaking = false; + IconImageAnimator.SetBool(_idleAnimationParameter, true); + yield return _iconChangeDelay; + IconImage.sprite = DemoItems[0].AssociatedSprite; + } + + void OnHapticsStopped() + { + StartCoroutine(BackToIdle()); + } + + void OnDisable() + { + HapticController.PlaybackStopped -= OnHapticsStopped; + if (HapticController.IsPlaying()) + { + HapticController.Stop(); + } + } + + void OnEnable() + { + HapticController.PlaybackStopped += OnHapticsStopped; + StartCoroutine(BackToIdle()); + } + + void OnApplicationFocus(bool hasFocus) + { + if (hasFocus) + { + StartCoroutine(BackToIdle()); + } + } + + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoManager.cs.meta new file mode 100644 index 0000000..bfdcdc9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b6111dd3a595e4b8b9fb6c7545fc3aa2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoRotator.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoRotator.cs new file mode 100644 index 0000000..7bfe11d --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoRotator.cs @@ -0,0 +1,26 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + /// + /// A minimal, demo only class, used to rotate an image in the demo's UI + /// + public class HapticClipsDemoRotator : MonoBehaviour + { + /// the speed at which the image should rotate + public Vector3 RotationSpeed = new Vector3(0, 0, 100f); + + /// + /// On Update we rotate our image + /// + protected void Update() + { + this.transform.Rotate(RotationSpeed * Time.deltaTime, Space.Self); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoRotator.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoRotator.cs.meta new file mode 100644 index 0000000..c4d6e21 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Scripts/HapticClipsDemoRotator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3c35d88c395442feb748be3dd08fbf9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds.meta new file mode 100644 index 0000000..2634418 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aae0f2706973d884a9a8db91f4de83f4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVCarillon.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVCarillon.wav new file mode 100644 index 0000000..52b5763 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVCarillon.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVCarillon.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVCarillon.wav.meta new file mode 100644 index 0000000..9e348c1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVCarillon.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ba4b0190b4835eb44b595b6d27c48e2e +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDice.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDice.wav new file mode 100644 index 0000000..fca849c Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDice.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDice.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDice.wav.meta new file mode 100644 index 0000000..053be93 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDice.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 6d520839b7deb4c459ba85fd74cf2c18 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDrumsLoop.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDrumsLoop.wav new file mode 100644 index 0000000..8302bcb Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDrumsLoop.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDrumsLoop.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDrumsLoop.wav.meta new file mode 100644 index 0000000..5373482 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVDrumsLoop.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 31ba8cb846fdd46498b72e9e45be695e +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVGameOver.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVGameOver.wav new file mode 100644 index 0000000..cb2a65c Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVGameOver.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVGameOver.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVGameOver.wav.meta new file mode 100644 index 0000000..69827f6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVGameOver.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 9143cc0979f80d945bb7339cd7a44944 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVHeartbeats.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVHeartbeats.wav new file mode 100644 index 0000000..faf3c74 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVHeartbeats.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVHeartbeats.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVHeartbeats.wav.meta new file mode 100644 index 0000000..7efca49 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVHeartbeats.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 92eb18dca6674154980d37823d0a644c +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVLaser.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVLaser.wav new file mode 100644 index 0000000..4c7ce01 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVLaser.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVLaser.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVLaser.wav.meta new file mode 100644 index 0000000..7ef2a48 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVLaser.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 444c72e35fbefef45bc50447123c6225 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVPowerOff.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVPowerOff.wav new file mode 100644 index 0000000..82c8aa3 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVPowerOff.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVPowerOff.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVPowerOff.wav.meta new file mode 100644 index 0000000..dcb6d08 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVPowerOff.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 8c5a32474dfb31747953c71d2cfc1075 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVReload.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVReload.wav new file mode 100644 index 0000000..7553aed Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVReload.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVReload.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVReload.wav.meta new file mode 100644 index 0000000..8f4917c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVReload.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: d2074b5a570d0d8468ff08e9cb7de3ac +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVTeleport.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVTeleport.wav new file mode 100644 index 0000000..5bbed8d Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVTeleport.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVTeleport.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVTeleport.wav.meta new file mode 100644 index 0000000..e592cf1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sounds/NVTeleport.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 54890615c223ed649aadbf24020976a2 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites.meta new file mode 100644 index 0000000..c39f543 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7fedcec944ac8c54f971a81ec39251d8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites/NVPresetsIcons.png b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites/NVPresetsIcons.png new file mode 100644 index 0000000..f8bc0d6 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites/NVPresetsIcons.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites/NVPresetsIcons.png.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites/NVPresetsIcons.png.meta new file mode 100644 index 0000000..827134f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/HapticClipsDemo/Sprites/NVPresetsIcons.png.meta @@ -0,0 +1,397 @@ +fileFormatVersion: 2 +guid: 3da05e9f66c9f254c8875335e7e9179e +TextureImporter: + internalIDToNameTable: + - first: + 213: 4279260276780606416 + second: NVPresetsIcons_0 + - first: + 213: -2389462326047053563 + second: NVPresetsIcons_1 + - first: + 213: 6684065222803499413 + second: NVPresetsIcons_2 + - first: + 213: -8308906585651362545 + second: NVPresetsIcons_3 + - first: + 213: -7933564687622153330 + second: NVPresetsIcons_4 + - first: + 213: 2657873270443967794 + second: NVPresetsIcons_5 + - first: + 213: -6415259062133742075 + second: NVPresetsIcons_6 + - first: + 213: -3820048696943746370 + second: NVPresetsIcons_7 + - first: + 213: -312768529563260625 + second: NVPresetsIcons_8 + - first: + 213: -8918885832014658072 + second: NVPresetsIcons_9 + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: NVPresetsIcons_0 + rect: + serializedVersion: 2 + x: 0 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 9f03a35fbb19c054baa115a0e145db89 + internalID: 4279260276780606416 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_1 + rect: + serializedVersion: 2 + x: 256 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: c998f8a5e281a9340b13d94ff576eada + internalID: -2389462326047053563 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_2 + rect: + serializedVersion: 2 + x: 512 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: b552659543dbebb4194ce28bb88910e0 + internalID: 6684065222803499413 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_3 + rect: + serializedVersion: 2 + x: 768 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: eca1cdb25fce6994f9b3dc71a8cb227b + internalID: -8308906585651362545 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_4 + rect: + serializedVersion: 2 + x: 0 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: ac399416a8fc4554b8911fa991e10e21 + internalID: -7933564687622153330 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_5 + rect: + serializedVersion: 2 + x: 256 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 0009bca4c51e44d428bcb541f9ae39e3 + internalID: 2657873270443967794 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_6 + rect: + serializedVersion: 2 + x: 512 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: cef485081e26319448ed921f2afc608d + internalID: -6415259062133742075 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_7 + rect: + serializedVersion: 2 + x: 768 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: d86d779fa8b4d3b418c43bee02b850f5 + internalID: -3820048696943746370 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_8 + rect: + serializedVersion: 2 + x: 0 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 727e5f77f6c15604f999621ebdd89b01 + internalID: -312768529563260625 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: NVPresetsIcons_9 + rect: + serializedVersion: 2 + x: 256 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 24457b6072252344e92fa41e033711a3 + internalID: -8918885832014658072 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 3ef685cd4dc3bb34aa4c1d017b4d62c0 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + NVPresetsIcons_0: 4279260276780606416 + NVPresetsIcons_1: -2389462326047053563 + NVPresetsIcons_2: 6684065222803499413 + NVPresetsIcons_3: -8308906585651362545 + NVPresetsIcons_4: -7933564687622153330 + NVPresetsIcons_5: 2657873270443967794 + NVPresetsIcons_6: -6415259062133742075 + NVPresetsIcons_7: -3820048696943746370 + NVPresetsIcons_8: -312768529563260625 + NVPresetsIcons_9: -8918885832014658072 + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo.meta new file mode 100644 index 0000000..fdd8de4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 23bd6d0c5752e094c9fff86a1ff455b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/RegularPresetsDemoManager.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/RegularPresetsDemoManager.cs new file mode 100644 index 0000000..f1cd594 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/RegularPresetsDemoManager.cs @@ -0,0 +1,113 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using UnityEngine; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + public class RegularPresetsDemoManager : DemoManager + { + + [Header("Image")] + public Image IconImage; + public Animator IconImageAnimator; + + [Header("Sprites")] + public Sprite IdleSprite; + + public Sprite SelectionSprite; + public Sprite SuccessSprite; + public Sprite WarningSprite; + public Sprite FailureSprite; + public Sprite RigidSprite; + public Sprite SoftSprite; + public Sprite LightSprite; + public Sprite MediumSprite; + public Sprite HeavySprite; + + protected WaitForSeconds _turnDelay; + protected WaitForSeconds _shakeDelay; + protected int _idleAnimationParameter; + + protected virtual void Awake() + { + _turnDelay = new WaitForSeconds(0.02f); + _shakeDelay = new WaitForSeconds(0.3f); + _idleAnimationParameter = Animator.StringToHash("Idle"); + IconImageAnimator.SetBool(_idleAnimationParameter, true); + IconImageAnimator.speed = 2f; + } + + protected virtual void ChangeImage(Sprite newSprite) + { + StartCoroutine(ChangeImageCoroutine(newSprite)); + } + + protected virtual IEnumerator ChangeImageCoroutine(Sprite newSprite) + { + DebugAudioEmphasis.Play(); + IconImageAnimator.SetBool(_idleAnimationParameter, false); + yield return _turnDelay; + IconImage.sprite = newSprite; + yield return _shakeDelay; + IconImageAnimator.SetBool(_idleAnimationParameter, true); + yield return _turnDelay; + IconImage.sprite = IdleSprite; + } + + public virtual void SelectionButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.Selection); + ChangeImage(SelectionSprite); + } + + public virtual void SuccessButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.Success); + ChangeImage(SuccessSprite); + } + + public virtual void WarningButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.Warning); + ChangeImage(WarningSprite); + } + + public virtual void FailureButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.Failure); + ChangeImage(FailureSprite); + } + + public virtual void RigidButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.RigidImpact); + ChangeImage(RigidSprite); + } + + public virtual void SoftButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.SoftImpact); + ChangeImage(SoftSprite); + } + + public virtual void LightButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.LightImpact); + ChangeImage(LightSprite); + } + + public virtual void MediumButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.MediumImpact); + ChangeImage(MediumSprite); + } + + public virtual void HeavyButton() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.HeavyImpact); + ChangeImage(HeavySprite); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/RegularPresetsDemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/RegularPresetsDemoManager.cs.meta new file mode 100644 index 0000000..2145d29 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/RegularPresetsDemoManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5fbc7abb856a0a4791f28a326ea66b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites.meta new file mode 100644 index 0000000..2bc27ec --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 303bdd0331e75dc4895e5c53815c9052 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites/RegularPresetsIcons.png b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites/RegularPresetsIcons.png new file mode 100644 index 0000000..d3f33a3 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites/RegularPresetsIcons.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites/RegularPresetsIcons.png.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites/RegularPresetsIcons.png.meta new file mode 100644 index 0000000..86b57cb --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/RegularPresetsDemo/Sprites/RegularPresetsIcons.png.meta @@ -0,0 +1,397 @@ +fileFormatVersion: 2 +guid: fe42c8b526e77e54ab91d0590272d9e8 +TextureImporter: + internalIDToNameTable: + - first: + 213: -122496617620796665 + second: RegularPresetsIcons_0 + - first: + 213: -970488182351979515 + second: RegularPresetsIcons_1 + - first: + 213: 7590535577056678407 + second: RegularPresetsIcons_2 + - first: + 213: 1161443714384828998 + second: RegularPresetsIcons_3 + - first: + 213: -5435255387823749147 + second: RegularPresetsIcons_4 + - first: + 213: -4594720345167028440 + second: RegularPresetsIcons_5 + - first: + 213: -1927911570766903740 + second: RegularPresetsIcons_6 + - first: + 213: -1001581268832274596 + second: RegularPresetsIcons_7 + - first: + 213: -6205461316961850552 + second: RegularPresetsIcons_8 + - first: + 213: 1833921066897734877 + second: RegularPresetsIcons_9 + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 2 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: + - serializedVersion: 2 + name: RegularPresetsIcons_0 + rect: + serializedVersion: 2 + x: 0 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 011901e28230f8049bfc58cb4bc07a9e + internalID: -122496617620796665 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_1 + rect: + serializedVersion: 2 + x: 256 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 37f8e2e6cc5337446b63ed7c0dfc4545 + internalID: -970488182351979515 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_2 + rect: + serializedVersion: 2 + x: 512 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 9da53191e18e6534aa340d76cc4b3c5f + internalID: 7590535577056678407 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_3 + rect: + serializedVersion: 2 + x: 768 + y: 768 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 7af071f9ac857a04a960c85fcf310c32 + internalID: 1161443714384828998 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_4 + rect: + serializedVersion: 2 + x: 0 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 1b60e974781595f4e8ae48c754d5124c + internalID: -5435255387823749147 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_5 + rect: + serializedVersion: 2 + x: 256 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 81f63304c83064d45997b541b35a35a8 + internalID: -4594720345167028440 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_6 + rect: + serializedVersion: 2 + x: 512 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 2ecd73262770ecc47bfa842c3f3bf555 + internalID: -1927911570766903740 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_7 + rect: + serializedVersion: 2 + x: 768 + y: 512 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: d6a13fca8e4f8d44ebd8ef3ffe23ada2 + internalID: -1001581268832274596 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_8 + rect: + serializedVersion: 2 + x: 0 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0.5, y: 0.5} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 48f53ce42f625204da2899891a606ea9 + internalID: -6205461316961850552 + vertices: [] + indices: + edges: [] + weights: [] + - serializedVersion: 2 + name: RegularPresetsIcons_9 + rect: + serializedVersion: 2 + x: 256 + y: 256 + width: 256 + height: 256 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: f3d8094016d64d24189889e668fe5602 + internalID: 1833921066897734877 + vertices: [] + indices: + edges: [] + weights: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 7622dacdd343c004898a60b9efe1f933 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: + RegularPresetsIcons_0: -122496617620796665 + RegularPresetsIcons_1: -970488182351979515 + RegularPresetsIcons_2: 7590535577056678407 + RegularPresetsIcons_3: 1161443714384828998 + RegularPresetsIcons_4: -5435255387823749147 + RegularPresetsIcons_5: -4594720345167028440 + RegularPresetsIcons_6: -1927911570766903740 + RegularPresetsIcons_7: -1001581268832274596 + RegularPresetsIcons_8: -6205461316961850552 + RegularPresetsIcons_9: 1833921066897734877 + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo.meta new file mode 100644 index 0000000..bf1ac4b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55f63d1c4d1a00646821fb417430baf3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations.meta new file mode 100644 index 0000000..a9f1ebc --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e595ad283bbe2a4dae17be9f93af197 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleButtonAnimator.controller b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleButtonAnimator.controller new file mode 100644 index 0000000..a76fcdb --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleButtonAnimator.controller @@ -0,0 +1,156 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-8089155080980664216 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: WobbleIdle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 4427259299424067650} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: b97c6877bf679024cbe9fda80e50a467, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: WobbleButtonAnimator + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: Spark + m_Type: 9 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 8990539157076039484} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1101 &695323499414103077 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -8089155080980664216} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &4427259299424067650 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: Spark + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 8030660707128221816} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 0 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &8030660707128221816 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: WobbleSpark + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 695323499414103077} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 290dd4c1c6fb66b44ba29569799c8347, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &8990539157076039484 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: -8089155080980664216} + m_Position: {x: 310, y: 120, z: 0} + - serializedVersion: 1 + m_State: {fileID: 8030660707128221816} + m_Position: {x: 320, y: 260, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -8089155080980664216} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleButtonAnimator.controller.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleButtonAnimator.controller.meta new file mode 100644 index 0000000..911d3fa --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleButtonAnimator.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e11dde6e0b28698408384c45fc92170b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleIdle.anim b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleIdle.anim new file mode 100644 index 0000000..3191da6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleIdle.anim @@ -0,0 +1,53 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: WobbleIdle + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleIdle.anim.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleIdle.anim.meta new file mode 100644 index 0000000..f241e79 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleIdle.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b97c6877bf679024cbe9fda80e50a467 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleSpark.anim b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleSpark.anim new file mode 100644 index 0000000..1f8c984 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleSpark.anim @@ -0,0 +1,511 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: WobbleSpark + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.033333335 + value: {x: 0.9, y: 0.9, z: 0.9} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.25 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.r + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7921569 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 0.7921569 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.g + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.3372549 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 0.3372549 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.b + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 3 + script: {fileID: 0} + typeID: 4 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 4215373228 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 2334886179 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 2526845255 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 304273561 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + typeID: 114 + customType: 0 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.25 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.r + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.7921569 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 0.7921569 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.g + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0.3372549 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 0.3372549 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.b + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 0.9 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 0.9 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.033333335 + value: 0.9 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleSpark.anim.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleSpark.anim.meta new file mode 100644 index 0000000..da907ff --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Animations/WobbleSpark.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 290dd4c1c6fb66b44ba29569799c8347 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics.meta new file mode 100644 index 0000000..113917d --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 228a1d41a864f47b8aaf43bcd10963f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics/NVWobbleSpring.haptic b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics/NVWobbleSpring.haptic new file mode 100644 index 0000000..9d558f4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics/NVWobbleSpring.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"tomash@lofelt.com","editor":"Lofelt Studio","source":"../Developer/NiceVibrations/interfaces/unity/NiceVibrations/Assets/NiceVibrations/Demos/New/DemoAssets/WobbleDemo/Sounds/NVWobbleSpring.wav","project":"NVWobbleSpring","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0009562489},{"time":0.0010204081,"amplitude":0.0009562489},{"time":0.019002268,"amplitude":0.0009593152},{"time":0.021020407,"amplitude":0.35500127,"emphasis":{"amplitude":0.71000254,"frequency":1}},{"time":0.024013605,"amplitude":0.82644516},{"time":0.039002266,"amplitude":0.8292689},{"time":0.045011338,"amplitude":0.7140616},{"time":0.061020408,"amplitude":0.775248},{"time":0.06600907,"amplitude":0.67756397},{"time":0.09501134,"amplitude":0.6176241},{"time":0.099002264,"amplitude":0.73989326},{"time":0.10800453,"amplitude":0.5840236},{"time":0.11800453,"amplitude":0.6941802},{"time":0.12900226,"amplitude":0.5156372},{"time":0.13800453,"amplitude":0.6407426},{"time":0.14800453,"amplitude":0.4790787},{"time":0.15600906,"amplitude":0.5953118},{"time":0.1670068,"amplitude":0.4461366},{"time":0.17501134,"amplitude":0.55371046},{"time":0.18600906,"amplitude":0.41700405},{"time":0.1940136,"amplitude":0.51633114},{"time":0.20501134,"amplitude":0.3911757},{"time":0.21301587,"amplitude":0.48252085},{"time":0.22501133,"amplitude":0.35611963},{"time":0.23201814,"amplitude":0.4503736},{"time":0.24401361,"amplitude":0.33460146},{"time":0.25201812,"amplitude":0.42404583},{"time":0.26301587,"amplitude":0.32657158},{"time":0.27201813,"amplitude":0.39494655},{"time":0.32,"amplitude":0.2799884},{"time":0.36600906,"amplitude":0.30064842},{"time":0.37501132,"amplitude":0.23453557},{"time":0.51900226,"amplitude":0.19571334},{"time":0.5470068,"amplitude":0.14614786},{"time":0.5850113,"amplitude":0.13242762},{"time":0.6909977,"amplitude":0.13363944},{"time":0.7,"amplitude":0.10374451},{"time":0.8040136,"amplitude":0.10670382},{"time":0.8529932,"amplitude":0.07788169},{"time":0.8809977,"amplitude":0.092114426},{"time":1.0009977,"amplitude":0.06443705},{"time":1.0019954,"amplitude":0.0630898},{"time":1.0140135,"amplitude":0.07194672},{"time":1.0250113,"amplitude":0.05613058},{"time":1.0340136,"amplitude":0.069607064},{"time":1.0440136,"amplitude":0.054142073},{"time":1.0529932,"amplitude":0.06728303},{"time":1.0630158,"amplitude":0.052424133},{"time":1.0719955,"amplitude":0.06508201},{"time":1.0819955,"amplitude":0.050853696},{"time":1.0909977,"amplitude":0.06296372},{"time":1.1009977,"amplitude":0.049378373},{"time":1.11,"amplitude":0.06093046},{"time":1.12,"amplitude":0.048005503},{"time":1.1290022,"amplitude":0.058963053},{"time":1.1390022,"amplitude":0.046654664},{"time":1.1480045,"amplitude":0.05710011},{"time":1.1570067,"amplitude":0.04568527},{"time":1.1670067,"amplitude":0.05528513},{"time":1.176009,"amplitude":0.044308614},{"time":1.1880045,"amplitude":0.053159732},{"time":1.206009,"amplitude":0.051884882},{"time":1.216009,"amplitude":0.040399686},{"time":1.2250113,"amplitude":0.050281107},{"time":1.2350113,"amplitude":0.039218396},{"time":1.2640135,"amplitude":0.047261827},{"time":1.2950113,"amplitude":0.033857577},{"time":1.3010204,"amplitude":0.04444125},{"time":1.3140136,"amplitude":0.032851238},{"time":1.3200227,"amplitude":0.043101043},{"time":1.3330158,"amplitude":0.031889014},{"time":1.3600227,"amplitude":0.040322743},{"time":1.3900226,"amplitude":0.029381623},{"time":1.3970294,"amplitude":0.03822633},{"time":1.4670295,"amplitude":0.025700606},{"time":1.5120181,"amplitude":0.032006025},{"time":1.5680271,"amplitude":0.02165265},{"time":1.7030386,"amplitude":0.023862042},{"time":1.7400453,"amplitude":0.015876299},{"time":1.8940363,"amplitude":0.01776565},{"time":2.0000453,"amplitude":0.011738613},{"time":2.001043,"amplitude":0.011388594},{"time":2.00805,"amplitude":0.014558174},{"time":2.0260544,"amplitude":0.00964506},{"time":2.0270522,"amplitude":0.013477892},{"time":2.0450566,"amplitude":0.0093812775},{"time":2.0470521,"amplitude":0.014042922},{"time":2.0640361,"amplitude":0.009133796},{"time":2.0660543,"amplitude":0.013640979},{"time":2.0840364,"amplitude":0.008648033},{"time":2.085034,"amplitude":0.013244494},{"time":2.1030385,"amplitude":0.00839398},{"time":2.1040363,"amplitude":0.012864209},{"time":2.1220407,"amplitude":0.008164078},{"time":2.1230385,"amplitude":0.012494327},{"time":2.141043,"amplitude":0.007944834},{"time":2.1420407,"amplitude":0.012132271},{"time":2.1600454,"amplitude":0.0077392813},{"time":2.161043,"amplitude":0.011739953},{"time":2.179025,"amplitude":0.007551707},{"time":2.1980271,"amplitude":0.007357373},{"time":2.2000453,"amplitude":0.011125778},{"time":2.2170293,"amplitude":0.0071625076},{"time":2.219025,"amplitude":0.010808184},{"time":2.2560318,"amplitude":0.0065891854},{"time":2.2570295,"amplitude":0.010205274},{"time":2.275034,"amplitude":0.006404771},{"time":2.3540137,"amplitude":0.008762259},{"time":2.389025,"amplitude":0.0056996364},{"time":2.4100227,"amplitude":0.008134467},{"time":2.4280272,"amplitude":0.005284994},{"time":2.526009,"amplitude":0.006823723},{"time":2.5809977,"amplitude":0.004307148},{"time":2.62,"amplitude":0.0060130493},{"time":2.6929932,"amplitude":0.0036409397},{"time":2.6980045,"amplitude":0.0053639743},{"time":2.7690022,"amplitude":0.0032907792},{"time":2.887982,"amplitude":0.004200887},{"time":2.9029932,"amplitude":0.0027610986},{"time":2.9449885,"amplitude":0.0038968083},{"time":3.000975,"amplitude":0.0026478},{"time":3.0019727,"amplitude":0.0035734072},{"time":3.014966,"amplitude":0.002492872},{"time":3.0199773,"amplitude":0.0025947648},{"time":3.0229704,"amplitude":0.0035003677},{"time":3.0339682,"amplitude":0.0024425117},{"time":3.0389795,"amplitude":0.002559412},{"time":3.040975,"amplitude":0.0034631041},{"time":3.0529704,"amplitude":0.0023952872},{"time":3.0579817,"amplitude":0.002514758},{"time":3.0599773,"amplitude":0.0033751589},{"time":3.0719728,"amplitude":0.0023409901},{"time":3.0779817,"amplitude":0.0025193195},{"time":3.0789795,"amplitude":0.0033119277},{"time":3.090975,"amplitude":0.002302513},{"time":3.0969615,"amplitude":0.002373955},{"time":3.097959,"amplitude":0.0032351578},{"time":3.1099772,"amplitude":0.0022555515},{"time":3.1159637,"amplitude":0.0023417526},{"time":3.117959,"amplitude":0.0031578634},{"time":3.1269615,"amplitude":0.0023074765},{"time":3.134966,"amplitude":0.0022921294},{"time":3.1359637,"amplitude":0.003104176},{"time":3.1459637,"amplitude":0.0022723502},{"time":3.153968,"amplitude":0.0022558253},{"time":3.1549659,"amplitude":0.003010647},{"time":3.1649659,"amplitude":0.0022187987},{"time":3.1729705,"amplitude":0.0022344673},{"time":3.173968,"amplitude":0.0029090105},{"time":3.1869614,"amplitude":0.0020558352},{"time":3.1939683,"amplitude":0.0029076822},{"time":3.2059636,"amplitude":0.0020158954},{"time":3.2129705,"amplitude":0.0028256178},{"time":3.2279592,"amplitude":0.0019995568},{"time":3.2329705,"amplitude":0.002772959},{"time":3.2409523,"amplitude":0.0020728097},{"time":3.2569613,"amplitude":0.0014952072},{"time":3.2709522,"amplitude":0.0012457762},{"time":3.2999547,"amplitude":0.0010428511},{"time":3.34195,"amplitude":0.0009913231},{"time":3.4379365,"amplitude":0.0009930392},{"time":3.4381406,"amplitude":0.0009930392},{"time":3.4381406,"amplitude":0.0009930392}],"frequency":[{"time":0,"frequency":0.29530552},{"time":0.03482993,"frequency":0.52334017},{"time":0.06385487,"frequency":0.42596412},{"time":0.089977324,"frequency":0.5254665},{"time":0.1596372,"frequency":0.41961446},{"time":0.18575963,"frequency":0.52140236},{"time":0.2554195,"frequency":0.41293997},{"time":0.29315192,"frequency":0.40725753},{"time":0.31927437,"frequency":0.51061046},{"time":0.38893422,"frequency":0.4003671},{"time":0.41505668,"frequency":0.5065769},{"time":0.48471656,"frequency":0.39347687},{"time":0.510839,"frequency":0.49869698},{"time":0.52244896,"frequency":0.3893096},{"time":0.5485714,"frequency":0.49446312},{"time":0.5601814,"frequency":0.38761187},{"time":0.6066213,"frequency":0.49095565},{"time":0.6182313,"frequency":0.38385627},{"time":0.64435375,"frequency":0.49180296},{"time":0.7140136,"frequency":0.37529996},{"time":0.740136,"frequency":0.48443407},{"time":0.751746,"frequency":0.37362564},{"time":0.77786845,"frequency":0.4788036},{"time":0.8097959,"frequency":0.3693863},{"time":0.83591837,"frequency":0.47735927},{"time":0.84752834,"frequency":0.3677079},{"time":0.8736508,"frequency":0.4762548},{"time":0.9433106,"frequency":0.35914168},{"time":0.96943307,"frequency":0.46753794},{"time":0.9984581,"frequency":0.3821054},{"time":1.0013604,"frequency":0.3593228},{"time":1.0071654,"frequency":0.46297145},{"time":1.0390929,"frequency":0.35341328},{"time":1.0448979,"frequency":0.45030823},{"time":1.0768254,"frequency":0.35299024},{"time":1.1029477,"frequency":0.45802182},{"time":1.1145577,"frequency":0.35314915},{"time":1.1406802,"frequency":0.45094654},{"time":1.1726077,"frequency":0.3446571},{"time":1.1987301,"frequency":0.45125404},{"time":1.21034,"frequency":0.346452},{"time":1.2364625,"frequency":0.4493153},{"time":1.2683899,"frequency":0.33863544},{"time":1.3061224,"frequency":0.33864796},{"time":1.3322449,"frequency":0.44028902},{"time":1.3641722,"frequency":0.33564386},{"time":1.3902947,"frequency":0.43723637},{"time":1.4019047,"frequency":0.3353174},{"time":1.4280272,"frequency":0.43633667},{"time":1.4396371,"frequency":0.34075645},{"time":1.4657595,"frequency":0.43867582},{"time":1.5180044,"frequency":0.33603543},{"time":1.5992743,"frequency":0.42207605},{"time":1.6312017,"frequency":0.32355335},{"time":1.726984,"frequency":0.3180821},{"time":1.790839,"frequency":0.40367332},{"time":1.8604988,"frequency":0.3148651},{"time":1.9040362,"frequency":0.3980369},{"time":1.9185487,"frequency":0.3226433},{"time":1.9998186,"frequency":0.3974637},{"time":2.002721,"frequency":0.38232356},{"time":2.0520635,"frequency":0.30991864},{"time":2.0578685,"frequency":0.38528004},{"time":2.1420407,"frequency":0.32522565},{"time":2.2087982,"frequency":0.3804602},{"time":2.295873,"frequency":0.3058792},{"time":2.3045805,"frequency":0.38111478},{"time":2.3510203,"frequency":0.3082696},{"time":2.3626304,"frequency":0.3926409},{"time":2.3916552,"frequency":0.30553994},{"time":2.4206803,"frequency":0.38361424},{"time":2.4874375,"frequency":0.28228965},{"time":2.5338774,"frequency":0.3892029},{"time":2.5454874,"frequency":0.27857015},{"time":2.6006348,"frequency":0.27261078},{"time":2.6383672,"frequency":0.27541295},{"time":2.6673923,"frequency":0.37651402},{"time":2.6760998,"frequency":0.2608382},{"time":2.7051246,"frequency":0.3378473},{"time":2.7341495,"frequency":0.25862533},{"time":2.742857,"frequency":0.35841092},{"time":2.771882,"frequency":0.24511091},{"time":2.7805896,"frequency":0.38625905},{"time":2.812517,"frequency":0.2600467},{"time":2.8763719,"frequency":0.32819453},{"time":2.8995917,"frequency":0.27560472},{"time":2.9141042,"frequency":0.38785797},{"time":2.9257143,"frequency":0.22346424},{"time":2.9866664,"frequency":0.30909604},{"time":2.9982765,"frequency":0.23028974},{"time":3.001179,"frequency":0.21283093},{"time":3.0156915,"frequency":0.22365269},{"time":3.0273015,"frequency":0.4024646},{"time":3.0621314,"frequency":0.20656705},{"time":3.0940588,"frequency":0.23558344},{"time":3.1056688,"frequency":0.4314352},{"time":3.1172788,"frequency":0.20448516},{"time":3.1346939,"frequency":0.20061286},{"time":3.1637187,"frequency":0.35545275},{"time":3.1724262,"frequency":0.19891468},{"time":3.1811337,"frequency":0.42175126},{"time":3.1985486,"frequency":0.21504724},{"time":3.218866,"frequency":0.29905543},{"time":3.2275736,"frequency":0.18550801},{"time":3.2391837,"frequency":0.32889873},{"time":3.2565985,"frequency":0},{"time":3.265306,"frequency":0.12619749},{"time":3.288526,"frequency":0.01423774},{"time":3.3001359,"frequency":0.362898},{"time":3.3146484,"frequency":0.008200544},{"time":3.334966,"frequency":0.14762321},{"time":3.3436735,"frequency":0},{"time":3.3581858,"frequency":0.014102259},{"time":3.3726983,"frequency":0.22965166},{"time":3.3785033,"frequency":0.021435464},{"time":3.3843083,"frequency":0.17519554},{"time":3.3901134,"frequency":0},{"time":3.4046257,"frequency":0.099841505},{"time":3.4104307,"frequency":0.004153487},{"time":3.4249432,"frequency":0.07687335}]}}}} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics/NVWobbleSpring.haptic.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics/NVWobbleSpring.haptic.meta new file mode 100644 index 0000000..7d1da04 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Haptics/NVWobbleSpring.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 467545e1cb04a457cb322ddd400e03f6 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs.meta new file mode 100644 index 0000000..4a7ed5a --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d4175e8c9abe16d4392df0cf67a2aa7c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs/WobbleButton.prefab b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs/WobbleButton.prefab new file mode 100644 index 0000000..dc62def --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs/WobbleButton.prefab @@ -0,0 +1,481 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &674777751820602501 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1471524053412882806} + - component: {fileID: 3927884657081717489} + m_Layer: 5 + m_Name: SpringHapticSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1471524053412882806 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674777751820602501} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5013591337710553176} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3927884657081717489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 674777751820602501} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d20df93fb7de8457baa15a213a53ab19, type: 3} + m_Name: + m_EditorClassIdentifier: + clip: {fileID: -8404250095460277587, guid: 467545e1cb04a457cb322ddd400e03f6, type: 3} + priority: 128 + _fallbackPreset: 4 + _loop: 0 + _level: 1 + _frequencyShift: 0 +--- !u!1 &5013591337696889806 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5013591337696889807} + - component: {fileID: 5013591337696889805} + - component: {fileID: 5013591337696889804} + - component: {fileID: 5304896507158199243} + m_Layer: 5 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5013591337696889807 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337696889806} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5013591337710553176} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5013591337696889805 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337696889806} + m_CullTransparentMesh: 0 +--- !u!114 &5013591337696889804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337696889806} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.7921569, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!95 &5304896507158199243 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337696889806} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: e11dde6e0b28698408384c45fc92170b, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!1 &5013591337710553179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5013591337710553176} + - component: {fileID: 5013591337710553156} + - component: {fileID: 5013591337710553158} + - component: {fileID: 5013591337710553177} + - component: {fileID: 5013591337710553159} + m_Layer: 5 + m_Name: WobbleButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5013591337710553176 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337710553179} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5013591337696889807} + - {fileID: 4802345890570138818} + - {fileID: 1471524053412882806} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 165, y: 552} + m_SizeDelta: {x: 200, y: 200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5013591337710553156 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337710553179} + m_CullTransparentMesh: 0 +--- !u!225 &5013591337710553158 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337710553179} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &5013591337710553177 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337710553179} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: df337f93430edac488b1ddbd824df4d4, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetCamera: {fileID: 0} + SpringAudioSource: {fileID: 9191820682514468560} + TargetAnimator: {fileID: 5304896507158199243} + SpringHapticSource: {fileID: 3927884657081717489} + TargetModel: {fileID: 5013591337696889804} + OffDuration: 0.1 + MaxRange: 3 + WobbleCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 16.481491 + outSlope: 16.481491 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0.07149691 + - serializedVersion: 3 + time: 0.10397695 + value: 0.5678127 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.24718624 + value: -0.2627468 + inSlope: 1.4004699 + outSlope: 1.4004699 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41966248 + value: 0.35401168 + inSlope: -3.8335838 + outSlope: -3.8335838 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.51768756 + value: -0.08002263 + inSlope: -3.1241777 + outSlope: -3.1241777 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.6595571 + value: 0.19229665 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.71952105 + value: 0.08145878 + inSlope: -4.973859 + outSlope: -4.973859 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.85521185 + value: 0.022861794 + inSlope: 3.72342 + outSlope: 3.72342 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9941406 + value: -0.001159668 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + DragResetDuration: 0.4 + WobbleFactor: 1.5 +--- !u!114 &5013591337710553159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5013591337710553179} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10913, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6852992665189148299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4802345890570138818} + - component: {fileID: 9191820682514468560} + m_Layer: 5 + m_Name: SpringAudioSource + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4802345890570138818 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6852992665189148299} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 5013591337710553176} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &9191820682514468560 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6852992665189148299} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 7fde4c9141938aa43bb4719fda47aad8, type: 3} + m_PlayOnAwake: 0 + m_Volume: 0.25 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs/WobbleButton.prefab.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs/WobbleButton.prefab.meta new file mode 100644 index 0000000..2ac2b20 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Prefabs/WobbleButton.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bf2320824bedaca46b850000901f91be +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts.meta new file mode 100644 index 0000000..16ac1a4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 63dd192b4b35f4645bcf62c88280cd3c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleButton.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleButton.cs new file mode 100644 index 0000000..cc812c4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleButton.cs @@ -0,0 +1,191 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + public class WobbleButton : MonoBehaviour, IPointerExitHandler, IPointerEnterHandler + { + public RenderMode ParentCanvasRenderMode { get; protected set; } + + [Header("Bindings")] + public Camera TargetCamera; + public AudioSource SpringAudioSource; + public Animator TargetAnimator; + + [Header("Haptics")] + public HapticSource SpringHapticSource; + + [Header("Colors")] + public Image TargetModel; + + [Header("Wobble")] + public float OffDuration = 0.1f; + public float MaxRange; + public AnimationCurve WobbleCurve; + public float DragResetDuration = 4f; + public float WobbleFactor = 2f; + + protected Vector3 _neutralPosition; + protected Canvas _canvas; + protected Vector3 _newTargetPosition; + protected Vector3 _eventPosition; + protected Vector2 _workPosition; + protected float _initialZPosition; + protected bool _dragging; + protected int _pointerID; + protected PointerEventData _pointerEventData; + protected RectTransform _rectTransform; + + protected Vector3 _dragEndedPosition; + protected float _dragEndedAt; + protected Vector3 _dragResetDirection; + protected bool _pointerOn = false; + protected bool _draggedOnce = false; + protected int _sparkAnimationParameter; + + protected long[] _wobbleAndroidPattern = { 0, 40, 40, 80 }; + protected int[] _wobbleAndroidAmplitude = { 0, 40, 0, 80 }; + + protected virtual void Start() + { + } + + public virtual void SetPitch(float newPitch) + { + SpringAudioSource.pitch = newPitch; + SpringHapticSource.frequencyShift = NiceVibrationsDemoHelpers.Remap(newPitch, 0.3f, 1f, -1.0f, 1.0f); + } + + public virtual void Initialization() + { + _sparkAnimationParameter = Animator.StringToHash("Spark"); + ParentCanvasRenderMode = GetComponentInParent().renderMode; + _canvas = GetComponentInParent(); + _initialZPosition = transform.position.z; + _rectTransform = this.gameObject.GetComponent(); + SetNeutralPosition(); + } + + public virtual void SetNeutralPosition() + { + _neutralPosition = _rectTransform.transform.position; + } + + protected virtual Vector3 GetWorldPosition(Vector3 testPosition) + { + if (ParentCanvasRenderMode == RenderMode.ScreenSpaceCamera) + { + RectTransformUtility.ScreenPointToLocalPointInRectangle(_canvas.transform as RectTransform, testPosition, _canvas.worldCamera, out _workPosition); + return _canvas.transform.TransformPoint(_workPosition); + } + else + { + return testPosition; + } + } + + protected virtual void Update() + { + if (_pointerOn && !_dragging) + { + _newTargetPosition = GetWorldPosition(_pointerEventData.position); + + float distance = (_newTargetPosition - _neutralPosition).magnitude; + + if (distance < MaxRange) + { + _dragging = true; + } + else + { + _dragging = false; + } + } + + if (_dragging) + { + StickToPointer(); + } + else + { + GoBackToInitialPosition(); + } + } + + protected virtual void StickToPointer() + { + _draggedOnce = true; + _eventPosition = _pointerEventData.position; + + _newTargetPosition = GetWorldPosition(_eventPosition); + + // We clamp the stick's position to let it move only inside its defined max range + _newTargetPosition = Vector2.ClampMagnitude(_newTargetPosition - _neutralPosition, MaxRange); + _newTargetPosition = _neutralPosition + _newTargetPosition; + _newTargetPosition.z = _initialZPosition; + + transform.position = _newTargetPosition; + } + + protected virtual void GoBackToInitialPosition() + { + if (!_draggedOnce) + { + return; + } + + if (Time.time - _dragEndedAt < DragResetDuration) + { + float time = Remap(Time.time - _dragEndedAt, 0f, DragResetDuration, 0f, 1f); + float value = WobbleCurve.Evaluate(time) * WobbleFactor; + _newTargetPosition = Vector3.LerpUnclamped(_neutralPosition, _dragEndedPosition, value); + _newTargetPosition.z = _initialZPosition; + } + else + { + _newTargetPosition = _neutralPosition; + _newTargetPosition.z = _initialZPosition; + } + transform.position = _newTargetPosition; + } + + public virtual void OnPointerEnter(PointerEventData data) + { + _pointerID = data.pointerId; + _pointerEventData = data; + _pointerOn = true; + } + + public virtual void OnPointerExit(PointerEventData data) + { + _eventPosition = _pointerEventData.position; + + _newTargetPosition = GetWorldPosition(_eventPosition); + _newTargetPosition = Vector2.ClampMagnitude(_newTargetPosition - _neutralPosition, MaxRange); + _newTargetPosition = _neutralPosition + _newTargetPosition; + _newTargetPosition.z = _initialZPosition; + + _dragging = false; + _dragEndedPosition = _newTargetPosition; + _dragEndedAt = Time.time; + _dragResetDirection = _dragEndedPosition - _neutralPosition; + _pointerOn = false; + + TargetAnimator.SetTrigger(_sparkAnimationParameter); + SpringAudioSource.Play(); + SpringHapticSource.Play(); + } + + protected virtual float Remap(float x, float A, float B, float C, float D) + { + float remappedValue = C + (x - A) / (B - A) * (D - C); + return remappedValue; + } + } +} + diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleButton.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleButton.cs.meta new file mode 100644 index 0000000..0ac61ac --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df337f93430edac488b1ddbd824df4d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleDemoManager.cs b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleDemoManager.cs new file mode 100644 index 0000000..8d8821e --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleDemoManager.cs @@ -0,0 +1,71 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + public class WobbleDemoManager : DemoManager + { + public Camera ButtonCamera; + public RectTransform ContentZone; + public WobbleButton WobbleButtonPrefab; + public Vector2 PrefabSize = new Vector2(200f, 200f); + public float Margin = 20f; + public float Padding = 20f; + + protected List Buttons; + protected Canvas _canvas; + protected Vector3 _position = Vector3.zero; + + protected virtual void Start() + { + _canvas = GetComponentInParent(); + + float horizontalF = (ContentZone.rect.width - 2 * Padding) / (PrefabSize.x + Margin); + float verticalF = (ContentZone.rect.height - 2 * Padding) / (PrefabSize.y + Margin); + int horizontal = Mathf.FloorToInt(horizontalF); + int vertical = Mathf.FloorToInt(verticalF); + + float centerH = (ContentZone.rect.width - (Padding * 2) - (horizontal * PrefabSize.x) - (horizontal - 1) * Margin) / 2f; + float centerV = (ContentZone.rect.height - (Padding * 2) - (vertical * PrefabSize.x) - (vertical - 1) * Margin) / 2f; + + Buttons = new List(); + + for (int i = 0; i < horizontal; i++) + { + for (int j = 0; j < vertical; j++) + { + _position.x = centerH + Padding + PrefabSize.x / 2f + i * (PrefabSize.x + Margin); + _position.y = centerV + Padding + PrefabSize.y / 2f + j * (PrefabSize.y + Margin); + _position.z = 0f; + + WobbleButton button = Instantiate(WobbleButtonPrefab); + button.transform.SetParent(ContentZone.transform); + Buttons.Add(button); + + RectTransform rectTransform = button.GetComponent(); + rectTransform.anchorMin = Vector2.zero; + rectTransform.anchorMax = Vector2.zero; + button.name = "WobbleButton" + i + j; + button.transform.localScale = Vector3.one; + + rectTransform.anchoredPosition3D = _position; + button.TargetCamera = ButtonCamera; + button.Initialization(); + + } + } + + int counter = 0; + foreach (WobbleButton wbutton in Buttons) + { + float newPitch = NiceVibrationsDemoHelpers.Remap(counter, 0f, Buttons.Count, 0.3f, 1f); + wbutton.SetPitch(newPitch); + counter++; + } + + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleDemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleDemoManager.cs.meta new file mode 100644 index 0000000..b0adc3e --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Scripts/WobbleDemoManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b4855626e574f44ba43876941f82210 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds.meta new file mode 100644 index 0000000..ee3bd14 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 78cd0309f64c43c42a04f2eff4d4283e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds/NVWobbleSpring.wav b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds/NVWobbleSpring.wav new file mode 100644 index 0000000..4269fde Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds/NVWobbleSpring.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds/NVWobbleSpring.wav.meta b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds/NVWobbleSpring.wav.meta new file mode 100644 index 0000000..b499d67 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/DemoAssets/WobbleDemo/Sounds/NVWobbleSpring.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 7fde4c9141938aa43bb4719fda47aad8 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/Lofelt.NiceVibrations.Demo.asmdef b/Assets/Feel/NiceVibrations/Demo/Lofelt.NiceVibrations.Demo.asmdef new file mode 100644 index 0000000..6aba2a6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/Lofelt.NiceVibrations.Demo.asmdef @@ -0,0 +1,15 @@ +{ + "name": "Lofelt.NiceVibrations.Demo", + "references": [ + "GUID:57a0b9bc628ab4740af4b6f1f0b2e134" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/Lofelt.NiceVibrations.Demo.asmdef.meta b/Assets/Feel/NiceVibrations/Demo/Lofelt.NiceVibrations.Demo.asmdef.meta new file mode 100644 index 0000000..17bba83 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/Lofelt.NiceVibrations.Demo.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 75b32e98504c547e3925b12d9a9c1994 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/NiceVibrationsDemo.unity b/Assets/Feel/NiceVibrations/Demo/NiceVibrationsDemo.unity new file mode 100644 index 0000000..191e94d --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/NiceVibrationsDemo.unity @@ -0,0 +1,56881 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &2517634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2517635} + - component: {fileID: 2517639} + - component: {fileID: 2517638} + - component: {fileID: 2517637} + - component: {fileID: 2517636} + m_Layer: 5 + m_Name: Button3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2517635 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2517634} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 676669062} + m_Father: {fileID: 181786192} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 778, y: 425} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2517636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2517634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 3 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &2517637 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2517634} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &2517638 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2517634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2517639 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2517634} + m_CullTransparentMesh: 0 +--- !u!1 &3009978 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3009979} + - component: {fileID: 3009981} + - component: {fileID: 3009980} + m_Layer: 5 + m_Name: 3Dots (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3009979 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3009978} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 32451694} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 289.1} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3009980 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3009978} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &3009981 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3009978} + m_CullTransparentMesh: 0 +--- !u!1 &18198683 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 18198684} + - component: {fileID: 18198686} + - component: {fileID: 18198685} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &18198684 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18198683} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 906390111} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -95} + m_SizeDelta: {x: 980, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &18198685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18198683} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &18198686 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 18198683} + m_CullTransparentMesh: 0 +--- !u!1 &20159335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 20159336} + - component: {fileID: 20159338} + - component: {fileID: 20159337} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &20159336 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20159335} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 346701784} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &20159337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20159335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &20159338 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 20159335} + m_CullTransparentMesh: 0 +--- !u!1 &28174873 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 28174874} + - component: {fileID: 28174876} + - component: {fileID: 28174875} + m_Layer: 5 + m_Name: 3Dots (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &28174874 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28174873} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 675956756} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 289.1} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &28174875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28174873} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &28174876 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28174873} + m_CullTransparentMesh: 0 +--- !u!1 &31941409 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 31941410} + - component: {fileID: 31941412} + - component: {fileID: 31941411} + m_Layer: 5 + m_Name: BoxCurve + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &31941410 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 31941409} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2013399564} + m_Father: {fileID: 416245232} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: -20} + m_SizeDelta: {x: -40, y: -40} + m_Pivot: {x: 0, y: 1} +--- !u!114 &31941411 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 31941409} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &31941412 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 31941409} + m_CullTransparentMesh: 0 +--- !u!1 &32451693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 32451694} + - component: {fileID: 32451696} + - component: {fileID: 32451695} + m_Layer: 5 + m_Name: Footer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &32451694 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32451693} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 354417732} + - {fileID: 3009979} + - {fileID: 1672479997} + - {fileID: 145547196} + - {fileID: 1995152592} + - {fileID: 1843110486} + - {fileID: 1072611238} + m_Father: {fileID: 1426902635} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 350} + m_Pivot: {x: 0.5, y: 0} +--- !u!225 &32451695 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32451693} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &32451696 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32451693} + m_CullTransparentMesh: 0 +--- !u!1 &48147699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 48147700} + - component: {fileID: 48147702} + - component: {fileID: 48147701} + m_Layer: 5 + m_Name: Footer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &48147700 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48147699} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 636859481} + - {fileID: 1687879522} + - {fileID: 1832679623} + - {fileID: 1210291999} + - {fileID: 744678107} + - {fileID: 395404889} + - {fileID: 334308525} + m_Father: {fileID: 1218190712} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 350} + m_Pivot: {x: 0.5, y: 0} +--- !u!225 &48147701 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48147699} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &48147702 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48147699} + m_CullTransparentMesh: 0 +--- !u!1 &48727715 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 48727716} + - component: {fileID: 48727718} + - component: {fileID: 48727717} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &48727716 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48727715} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1618306577} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &48727717 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48727715} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &48727718 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 48727715} + m_CullTransparentMesh: 0 +--- !u!114 &49240104 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4047011439214917865, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 81273734} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!224 &49240105 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 81273734} + m_PrefabAsset: {fileID: 0} +--- !u!1 &54476677 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 54476678} + m_Layer: 5 + m_Name: DebugSounds + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &54476678 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 54476677} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: + - {fileID: 1962378945} + - {fileID: 1950497654} + - {fileID: 1185736741} + m_Father: {fileID: 1426902635} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1221.0004, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &55131105 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 55131106} + - component: {fileID: 55131108} + - component: {fileID: 55131107} + m_Layer: 5 + m_Name: ContentsBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &55131106 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 55131105} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.000066, y: 1.000066, z: 1.000066} + m_Children: + - {fileID: 2078920253} + - {fileID: 408532249} + - {fileID: 121448477} + m_Father: {fileID: 1394016756} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: -100, y: -53} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &55131107 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 55131105} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &55131108 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 55131105} + m_CullTransparentMesh: 0 +--- !u!1 &57138498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 57138499} + - component: {fileID: 57138501} + - component: {fileID: 57138500} + m_Layer: 5 + m_Name: KnobIndicator (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &57138499 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 57138498} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 165112074} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 324.5, y: -133.6} + m_SizeDelta: {x: 8, y: 8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &57138500 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 57138498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &57138501 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 57138498} + m_CullTransparentMesh: 0 +--- !u!1001 &67230897 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1467786816} + m_Modifications: + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: -39.140015 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -80.000305 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 19.99998 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917867, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Name + value: FrequencyVerticalProgressBar + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.b + value: 0.3372549 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.g + value: 0.78823537 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.r + value: 0.9960785 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -60.000004 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -59.999985 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a34261c2adaebf04a843bbcd2393bc03, type: 3} +--- !u!1 &72691159 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 72691160} + - component: {fileID: 72691162} + - component: {fileID: 72691161} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &72691160 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 72691159} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1582376651} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &72691161 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 72691159} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &72691162 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 72691159} + m_CullTransparentMesh: 0 +--- !u!1 &81114885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 81114886} + - component: {fileID: 81114890} + - component: {fileID: 81114889} + - component: {fileID: 81114888} + - component: {fileID: 81114887} + m_Layer: 5 + m_Name: NextButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &81114886 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 81114885} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 314260839} + - {fileID: 1339656256} + m_Father: {fileID: 1673368856} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 1, y: 0} +--- !u!114 &81114887 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 81114885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: NextPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.6039216, g: 0.14117648, b: 0.12941177, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &81114888 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 81114885} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &81114889 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 81114885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.7176471, g: 0.1764706, b: 0.16078432, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &81114890 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 81114885} + m_CullTransparentMesh: 0 +--- !u!1001 &81273734 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1548988332} + m_Modifications: + - target: {fileID: 4047011439214917865, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: EndValue + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917865, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: BarProgress + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -80 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917867, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Name + value: DurationVerticalProgressBar + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.b + value: 0.3372549 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.g + value: 0.78823537 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.r + value: 0.9960785 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -60.000004 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -59.999985 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a34261c2adaebf04a843bbcd2393bc03, type: 3} +--- !u!1 &88299692 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 88299693} + - component: {fileID: 88299695} + - component: {fileID: 88299694} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &88299693 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 88299692} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 166775920} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &88299694 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 88299692} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &88299695 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 88299692} + m_CullTransparentMesh: 0 +--- !u!1 &119333922 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 119333923} + - component: {fileID: 119333924} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &119333923 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119333922} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2117913896} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &119333924 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119333922} + m_CullTransparentMesh: 0 +--- !u!1 &119922975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 119922976} + - component: {fileID: 119922978} + - component: {fileID: 119922977} + m_Layer: 5 + m_Name: LogoBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &119922976 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119922975} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1362985084} + - {fileID: 121590304} + m_Father: {fileID: 1591721758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 165} + m_SizeDelta: {x: 640, y: 140} + m_Pivot: {x: 0, y: 1} +--- !u!114 &119922977 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119922975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &119922978 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 119922975} + m_CullTransparentMesh: 0 +--- !u!1 &121448476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 121448477} + - component: {fileID: 121448479} + - component: {fileID: 121448478} + m_Layer: 5 + m_Name: BoxPlay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &121448477 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121448476} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 890987135} + m_Father: {fileID: 55131106} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: -470, y: 20} + m_SizeDelta: {x: 940, y: 185} + m_Pivot: {x: 0, y: 0} +--- !u!114 &121448478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121448476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &121448479 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121448476} + m_CullTransparentMesh: 0 +--- !u!1 &121590300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 121590304} + - component: {fileID: 121590303} + - component: {fileID: 121590302} + - component: {fileID: 121590301} + m_Layer: 5 + m_Name: LogoVibrations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &121590301 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121590300} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 109aed369f1d8af47948f3f6aafbdbdc, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 8 + Frequency: 25 + Shaking: 0 +--- !u!114 &121590302 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121590300} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ef74e6b52dfbf9a4cba77e1fde4584d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &121590303 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121590300} + m_CullTransparentMesh: 0 +--- !u!224 &121590304 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121590300} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 119922976} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &137495584 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 137495585} + - component: {fileID: 137495587} + - component: {fileID: 137495586} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &137495585 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 137495584} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 337754531} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &137495586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 137495584} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &137495587 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 137495584} + m_CullTransparentMesh: 0 +--- !u!1 &138808057 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 138808058} + - component: {fileID: 138808062} + - component: {fileID: 138808061} + - component: {fileID: 138808060} + - component: {fileID: 138808059} + m_Layer: 5 + m_Name: Button9 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &138808058 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138808057} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 1553119589} + m_Father: {fileID: 181786192} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 778, y: 93.2} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &138808059 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138808057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 9 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &138808060 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138808057} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &138808061 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138808057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &138808062 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 138808057} + m_CullTransparentMesh: 0 +--- !u!1 &145547195 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 145547196} + - component: {fileID: 145547198} + - component: {fileID: 145547197} + m_Layer: 5 + m_Name: DotsBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &145547196 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145547195} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99989974, y: 0.99989974, z: 0.99989974} + m_Children: [] + m_Father: {fileID: 32451694} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -115.9} + m_SizeDelta: {x: 1024, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &145547197 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145547195} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 201a3f0fd44444e4da86b3ded7f4448f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &145547198 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 145547195} + m_CullTransparentMesh: 0 +--- !u!1 &150184436 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 150184437} + - component: {fileID: 150184439} + - component: {fileID: 150184438} + m_Layer: 5 + m_Name: DotsBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &150184437 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150184436} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99989974, y: 0.99989974, z: 0.99989974} + m_Children: [] + m_Father: {fileID: 1826175958} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -115.9} + m_SizeDelta: {x: 1024, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &150184438 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150184436} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 201a3f0fd44444e4da86b3ded7f4448f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &150184439 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 150184436} + m_CullTransparentMesh: 0 +--- !u!1 &151584004 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 151584005} + - component: {fileID: 151584007} + - component: {fileID: 151584006} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &151584005 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 151584004} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1085244083} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &151584006 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 151584004} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HAPTIC +--- !u!222 &151584007 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 151584004} + m_CullTransparentMesh: 0 +--- !u!1 &163683402 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 163683403} + - component: {fileID: 163683407} + - component: {fileID: 163683406} + - component: {fileID: 163683405} + - component: {fileID: 163683404} + m_Layer: 5 + m_Name: Button7 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &163683403 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163683402} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 943477462} + m_Father: {fileID: 181786192} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 160, y: 93.2} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &163683404 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163683402} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 7 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &163683405 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163683402} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &163683406 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163683402} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &163683407 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 163683402} + m_CullTransparentMesh: 0 +--- !u!1 &165112073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 165112074} + m_Layer: 5 + m_Name: KnobDecoration + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &165112074 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 165112073} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 453990760} + - {fileID: 1534573150} + - {fileID: 170718607} + - {fileID: 897238773} + - {fileID: 1616536815} + - {fileID: 362298265} + - {fileID: 57138499} + m_Father: {fileID: 1889145180} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0.2999878} + m_SizeDelta: {x: 400.4, y: 400} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &166775919 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 166775920} + - component: {fileID: 166775924} + - component: {fileID: 166775923} + - component: {fileID: 166775922} + - component: {fileID: 166775921} + - component: {fileID: 166775925} + m_Layer: 5 + m_Name: SoundSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &166775920 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166775919} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1093931039} + - {fileID: 88299693} + - {fileID: 1846656510} + - {fileID: 1418320187} + - {fileID: 915712435} + - {fileID: 1030101231} + m_Father: {fileID: 1431043784} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &166775921 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166775919} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 166775921} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 1846656511} + InitialState: 0 + OffPosition: {fileID: 915712435} + OnPosition: {fileID: 1030101231} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &166775922 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166775919} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &166775923 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166775919} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &166775924 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166775919} + m_CullTransparentMesh: 0 +--- !u!114 &166775925 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 166775919} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e91a9c36e72456e4db171843272d8a2b, type: 3} + m_Name: + m_EditorClassIdentifier: + DemoManager: {fileID: 1183418718} +--- !u!1 &170718606 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 170718607} + - component: {fileID: 170718609} + - component: {fileID: 170718608} + m_Layer: 5 + m_Name: KnobIndicator (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &170718607 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170718606} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 165112074} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -17, y: 0} + m_SizeDelta: {x: 8, y: 8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &170718608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170718606} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &170718609 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170718606} + m_CullTransparentMesh: 0 +--- !u!1 &181786191 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 181786192} + - component: {fileID: 181786194} + - component: {fileID: 181786193} + m_Layer: 5 + m_Name: BoxPlay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &181786192 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181786191} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1445158633} + - {fileID: 1874395822} + - {fileID: 2517635} + - {fileID: 1892980643} + - {fileID: 595019509} + - {fileID: 723031663} + - {fileID: 163683403} + - {fileID: 1403220314} + - {fileID: 138808058} + m_Father: {fileID: 315951910} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: -470, y: 20} + m_SizeDelta: {x: 940, y: 520} + m_Pivot: {x: 0, y: 0} +--- !u!114 &181786193 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181786191} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.58431375, g: 0.58431375, b: 0.58431375, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &181786194 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181786191} + m_CullTransparentMesh: 0 +--- !u!1 &190691291 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 190691292} + - component: {fileID: 190691293} + - component: {fileID: 190691294} + m_Layer: 5 + m_Name: FrequencyValue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &190691292 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 190691291} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1598451434} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -60.00006} + m_SizeDelta: {x: 163.76001, y: 25.94} + m_Pivot: {x: 1, y: 1} +--- !u!222 &190691293 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 190691291} + m_CullTransparentMesh: 0 +--- !u!114 &190691294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 190691291} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: 0.85 +--- !u!1 &199526943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 199526944} + - component: {fileID: 199526946} + - component: {fileID: 199526945} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &199526944 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199526943} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 395404889} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &199526945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199526943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Continuous +--- !u!222 &199526946 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 199526943} + m_CullTransparentMesh: 0 +--- !u!1 &204088785 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 204088786} + - component: {fileID: 204088788} + - component: {fileID: 204088787} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &204088786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 204088785} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1370240817} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &204088787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 204088785} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SOUND +--- !u!222 &204088788 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 204088785} + m_CullTransparentMesh: 0 +--- !u!1 &207709551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 207709552} + - component: {fileID: 207709554} + - component: {fileID: 207709553} + m_Layer: 5 + m_Name: KnobIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &207709552 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207709551} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1836492023} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 53.9, y: 0} + m_SizeDelta: {x: 66, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &207709553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207709551} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &207709554 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 207709551} + m_CullTransparentMesh: 0 +--- !u!1 &213903252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 213903253} + - component: {fileID: 213903255} + - component: {fileID: 213903254} + m_Layer: 5 + m_Name: Frequency + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &213903253 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213903252} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1598451434} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -34.15985, y: -60} + m_SizeDelta: {x: 163.76, y: 25.94} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &213903254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213903252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Frequency +--- !u!222 &213903255 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 213903252} + m_CullTransparentMesh: 0 +--- !u!1 &227701376 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 227701377} + - component: {fileID: 227701378} + m_Layer: 5 + m_Name: AudioSourceCarillon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &227701377 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 227701376} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &227701378 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 227701376} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: ba4b0190b4835eb44b595b6d27c48e2e, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &229223114 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 229223115} + - component: {fileID: 229223119} + - component: {fileID: 229223118} + - component: {fileID: 229223117} + - component: {fileID: 229223116} + m_Layer: 5 + m_Name: HapticSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &229223115 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229223114} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1100468342} + - {fileID: 344645903} + - {fileID: 1160457133} + - {fileID: 932658212} + - {fileID: 1153131957} + - {fileID: 2070558707} + m_Father: {fileID: 1086067260} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -210, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &229223116 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229223114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 229223116} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 1160457134} + InitialState: 1 + OffPosition: {fileID: 1153131957} + OnPosition: {fileID: 2070558707} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 932658211} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 932658211} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &229223117 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229223114} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &229223118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229223114} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &229223119 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229223114} + m_CullTransparentMesh: 0 +--- !u!1 &229430287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 229430288} + - component: {fileID: 229430290} + - component: {fileID: 229430289} + m_Layer: 5 + m_Name: BoxDark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &229430288 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229430287} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 975894758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: -20} + m_SizeDelta: {x: -40, y: -40} + m_Pivot: {x: 0, y: 1} +--- !u!114 &229430289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229430287} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &229430290 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 229430287} + m_CullTransparentMesh: 0 +--- !u!1 &241735359 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 241735360} + - component: {fileID: 241735362} + - component: {fileID: 241735361} + m_Layer: 5 + m_Name: TitleSpeed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &241735360 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241735359} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 281814000} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -40} + m_SizeDelta: {x: 163.76, y: 25.94} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &241735361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241735359} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9725491, g: 0.39607847, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: SPEED +--- !u!222 &241735362 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241735359} + m_CullTransparentMesh: 0 +--- !u!1 &247417162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 247417163} + - component: {fileID: 247417165} + - component: {fileID: 247417164} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &247417163 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247417162} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 278291183} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &247417164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247417162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.95686275, g: 0.23529412, b: 0.21568628, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &247417165 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247417162} + m_CullTransparentMesh: 0 +--- !u!1 &248171878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 248171879} + m_Layer: 5 + m_Name: DebugSounds + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &248171879 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 248171878} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1257290970} + - {fileID: 1026918481} + m_Father: {fileID: 811431853} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &274492977 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 274492978} + - component: {fileID: 274492980} + - component: {fileID: 274492979} + - component: {fileID: 274492982} + - component: {fileID: 274492981} + m_Layer: 5 + m_Name: HapticSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &274492978 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274492977} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1880427944} + - {fileID: 1640864324} + - {fileID: 1443861926} + - {fileID: 1863192580} + - {fileID: 1377323421} + - {fileID: 1914240455} + m_Father: {fileID: 503943323} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -210, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &274492979 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274492977} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &274492980 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274492977} + m_CullTransparentMesh: 0 +--- !u!114 &274492981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274492977} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 274492981} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 1443861927} + InitialState: 1 + OffPosition: {fileID: 1377323421} + OnPosition: {fileID: 1914240455} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1863192579} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1863192579} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &274492982 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274492977} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &278291182 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 278291183} + - component: {fileID: 278291185} + - component: {fileID: 278291184} + m_Layer: 5 + m_Name: Continuous + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &278291183 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 278291182} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 247417163} + - {fileID: 1673368856} + - {fileID: 503943323} + - {fileID: 1254437066} + - {fileID: 2139098803} + - {fileID: 1414928048} + m_Father: {fileID: 1945195674} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 3952.9958, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &278291184 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 278291182} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c1334dc132cef6e4d980b0705fa9c3ab, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugAudioEmphasis: {fileID: 618306285} + DebugAudioContinuous: {fileID: 1017881753} + Logo: {fileID: 1179953102} + ContinuousAmplitude: 1 + ContinuousFrequency: 1 + ContinuousDuration: 3 + ContinuousAmplitudeText: {fileID: 886129728} + ContinuousFrequencyText: {fileID: 190691294} + ContinuousDurationText: {fileID: 1361262896} + ContinuousButtonText: {fileID: 1986624023} + ContinuousButton: {fileID: 785930644} + AmplitudeProgressBar: {fileID: 967801414} + FrequencyProgressBar: {fileID: 1117582786} + DurationProgressBar: {fileID: 49240104} + ContinuousProgressBar: {fileID: 2048791470} + TargetCurve: {fileID: 472913950} + DurationSlider: {fileID: 1291795453} +--- !u!222 &278291185 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 278291182} + m_CullTransparentMesh: 0 +--- !u!1 &281813999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 281814000} + - component: {fileID: 281814002} + - component: {fileID: 281814001} + m_Layer: 5 + m_Name: BoxLeft + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &281814000 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 281813999} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 347105921} + - {fileID: 555838215} + - {fileID: 241735360} + m_Father: {fileID: 1287155424} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 138.34961, y: 233.30078} + m_SizeDelta: {x: 236.7, y: 426.6} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &281814001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 281813999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &281814002 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 281813999} + m_CullTransparentMesh: 0 +--- !u!1 &293685073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 293685074} + - component: {fileID: 293685075} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &293685074 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293685073} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1370240817} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &293685075 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293685073} + m_CullTransparentMesh: 0 +--- !u!1 &294970745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 294970746} + - component: {fileID: 294970747} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &294970746 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294970745} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1085244083} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &294970747 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 294970745} + m_CullTransparentMesh: 0 +--- !u!1 &297036826 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 297036827} + - component: {fileID: 297036829} + - component: {fileID: 297036828} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &297036827 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297036826} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1843110486} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &297036828 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297036826} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: emphasis +--- !u!222 &297036829 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297036826} + m_CullTransparentMesh: 0 +--- !u!1 &300857028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 300857032} + - component: {fileID: 300857031} + - component: {fileID: 300857030} + - component: {fileID: 300857029} + m_Layer: 5 + m_Name: LogoVibrations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &300857029 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 300857028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 109aed369f1d8af47948f3f6aafbdbdc, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 8 + Frequency: 25 + Shaking: 0 +--- !u!114 &300857030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 300857028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ef74e6b52dfbf9a4cba77e1fde4584d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &300857031 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 300857028} + m_CullTransparentMesh: 0 +--- !u!224 &300857032 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 300857028} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1013622212} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &312977850 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4047011439674249041, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 1960791680} + m_PrefabAsset: {fileID: 0} +--- !u!114 &312977852 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 312977850} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 1 +--- !u!1 &314260838 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 314260839} + - component: {fileID: 314260841} + - component: {fileID: 314260840} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &314260839 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314260838} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 81114886} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &314260840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314260838} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &314260841 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 314260838} + m_CullTransparentMesh: 0 +--- !u!1 &315951909 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 315951910} + - component: {fileID: 315951912} + - component: {fileID: 315951911} + m_Layer: 5 + m_Name: ContentsBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &315951910 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315951909} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.000066, y: 1.000066, z: 1.000066} + m_Children: + - {fileID: 416245232} + - {fileID: 181786192} + m_Father: {fileID: 1971069322} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: -100, y: -53} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &315951911 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315951909} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &315951912 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315951909} + m_CullTransparentMesh: 0 +--- !u!1 &332686985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 332686986} + - component: {fileID: 332686988} + - component: {fileID: 332686987} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &332686986 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 332686985} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 337754531} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &332686987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 332686985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Wobble +--- !u!222 &332686988 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 332686985} + m_CullTransparentMesh: 0 +--- !u!1 &334308524 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 334308525} + - component: {fileID: 334308527} + - component: {fileID: 334308526} + m_Layer: 5 + m_Name: PaginationContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &334308525 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334308524} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 48147700} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 115} + m_SizeDelta: {x: 0, y: -270} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &334308526 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334308524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7719238c9686c2645a6b5a89cba3de35, type: 3} + m_Name: + m_EditorClassIdentifier: + PaginationDotPrefab: {fileID: 7753230961564595917, guid: 844721accbc9f5744adc1f72590ea4f5, + type: 3} + ActiveColor: {r: 0, g: 0, b: 0, a: 0} + InactiveColor: {r: 0, g: 0, b: 0, a: 0} +--- !u!114 &334308527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334308524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &337754530 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 337754531} + - component: {fileID: 337754535} + - component: {fileID: 337754534} + - component: {fileID: 337754533} + - component: {fileID: 337754532} + m_Layer: 5 + m_Name: BackButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &337754531 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337754530} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 137495585} + - {fileID: 332686986} + m_Father: {fileID: 675956756} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!114 &337754532 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337754530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: PreviousPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0, g: 0.3529412, b: 0.50980395, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &337754533 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337754530} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &337754534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337754530} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.46274513, b: 0.6666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &337754535 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 337754530} + m_CullTransparentMesh: 0 +--- !u!1 &344645902 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 344645903} + - component: {fileID: 344645905} + - component: {fileID: 344645904} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &344645903 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 344645902} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 229223115} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &344645904 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 344645902} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &344645905 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 344645902} + m_CullTransparentMesh: 0 +--- !u!1 &346701783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 346701784} + - component: {fileID: 346701788} + - component: {fileID: 346701787} + - component: {fileID: 346701786} + - component: {fileID: 346701785} + m_Layer: 5 + m_Name: BackButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &346701784 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346701783} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 20159336} + - {fileID: 520986408} + m_Father: {fileID: 1673368856} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!114 &346701785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346701783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: PreviousPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.6037736, g: 0.14155708, b: 0.12815951, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &346701786 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346701783} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &346701787 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346701783} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.7176471, g: 0.1764706, b: 0.16078432, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &346701788 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 346701783} + m_CullTransparentMesh: 0 +--- !u!1 &347105920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 347105921} + - component: {fileID: 347105923} + - component: {fileID: 347105922} + m_Layer: 5 + m_Name: BoxDark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &347105921 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347105920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 281814000} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: -20} + m_SizeDelta: {x: -40, y: -40} + m_Pivot: {x: 0, y: 1} +--- !u!114 &347105922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347105920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &347105923 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 347105920} + m_CullTransparentMesh: 0 +--- !u!1 &350598676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 350598677} + - component: {fileID: 350598679} + - component: {fileID: 350598678} + m_Layer: 5 + m_Name: ProgressBarFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &350598677 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 350598676} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1276898986} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0.000035834724, y: 0} + m_SizeDelta: {x: 30, y: 900} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &350598678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 350598676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 0997c47bcd1429d42abe9c77bb947b44, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &350598679 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 350598676} + m_CullTransparentMesh: 0 +--- !u!1 &352282303 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 352282304} + - component: {fileID: 352282306} + - component: {fileID: 352282305} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &352282304 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 352282303} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1569422406} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &352282305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 352282303} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.6392157, b: 0.9254902, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &352282306 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 352282303} + m_CullTransparentMesh: 0 +--- !u!1 &354417731 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 354417732} + - component: {fileID: 354417734} + - component: {fileID: 354417733} + m_Layer: 5 + m_Name: 3Dots (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &354417732 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 354417731} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 32451694} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 289.0999} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &354417733 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 354417731} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &354417734 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 354417731} + m_CullTransparentMesh: 0 +--- !u!1 &359383867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 359383868} + - component: {fileID: 359383873} + - component: {fileID: 359383872} + - component: {fileID: 359383871} + - component: {fileID: 359383870} + - component: {fileID: 359383869} + m_Layer: 4 + m_Name: Wall1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &359383868 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 359383867} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 925354622} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: -50, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &359383869 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 359383867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4615302ba7af13645aec1ad743d65dcf, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!50 &359383870 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 359383867} + m_BodyType: 1 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 1 + m_SleepingMode: 0 + m_CollisionDetection: 1 + m_Constraints: 0 +--- !u!61 &359383871 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 359383867} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 20, y: 1000} + m_EdgeRadius: 0 +--- !u!114 &359383872 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 359383867} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &359383873 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 359383867} + m_CullTransparentMesh: 0 +--- !u!1 &362298264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 362298265} + - component: {fileID: 362298267} + - component: {fileID: 362298266} + m_Layer: 5 + m_Name: KnobIndicator (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &362298265 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 362298264} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 165112074} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 74.8, y: -133.59998} + m_SizeDelta: {x: 8, y: 8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &362298266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 362298264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &362298267 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 362298264} + m_CullTransparentMesh: 0 +--- !u!1 &372103043 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 372103044} + m_Layer: 5 + m_Name: StartPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &372103044 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 372103043} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1576130264} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -191, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &377249627 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 377249628} + - component: {fileID: 377249630} + - component: {fileID: 377249629} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &377249628 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 377249627} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 530785384} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &377249629 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 377249627} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &377249630 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 377249627} + m_CullTransparentMesh: 0 +--- !u!1 &381339438 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 381339439} + - component: {fileID: 381339441} + - component: {fileID: 381339440} + m_Layer: 5 + m_Name: LogoNice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &381339439 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381339438} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1013622212} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &381339440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381339438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.6392157, b: 0.9254902, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4c8fd0c851c8cbc4bb6dc9453b9ae786, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &381339441 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381339438} + m_CullTransparentMesh: 0 +--- !u!1 &386455300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 386455301} + - component: {fileID: 386455302} + m_Layer: 5 + m_Name: AudioSourceTeleport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &386455301 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386455300} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &386455302 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386455300} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 54890615c223ed649aadbf24020976a2, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &386896723 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 386896724} + - component: {fileID: 386896726} + - component: {fileID: 386896725} + m_Layer: 5 + m_Name: 3Dots (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &386896724 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386896723} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1673368856} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 289.0999} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &386896725 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386896723} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &386896726 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386896723} + m_CullTransparentMesh: 0 +--- !u!1 &387001083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 387001085} + - component: {fileID: 387001086} + - component: {fileID: 387001084} + m_Layer: 5 + m_Name: Curve + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &387001084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387001083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a81aea2b884ed3d4da5135acac404ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 1 + Frequency: 0 + PointsCount: 100 + AmplitudeFactor: 6 + StartPoint: {fileID: 372103044} + EndPoint: {fileID: 819566993} + Move: 0 + MovementSpeed: 1 +--- !u!224 &387001085 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387001083} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -4.71} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1576130264} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -609, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!120 &387001086 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387001083} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7a07c61d1ae789245be27cd71b29fb47, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: [] + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + key1: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0.5 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!1 &395404888 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 395404889} + - component: {fileID: 395404893} + - component: {fileID: 395404892} + - component: {fileID: 395404891} + - component: {fileID: 395404890} + m_Layer: 5 + m_Name: NextButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &395404889 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 395404888} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 796196281} + - {fileID: 199526944} + m_Father: {fileID: 48147700} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 1, y: 0} +--- !u!114 &395404890 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 395404888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: NextPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.3584906, g: 0.3584906, b: 0.3584906, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &395404891 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 395404888} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &395404892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 395404888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4392157, g: 0.4392157, b: 0.4392157, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &395404893 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 395404888} + m_CullTransparentMesh: 0 +--- !u!1 &398838206 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 398838207} + - component: {fileID: 398838209} + - component: {fileID: 398838208} + m_Layer: 5 + m_Name: Footer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &398838207 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 398838206} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 734991510} + - {fileID: 842088057} + - {fileID: 671481009} + - {fileID: 729326772} + - {fileID: 424992758} + - {fileID: 530785384} + - {fileID: 1064469137} + m_Father: {fileID: 1618306577} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 350} + m_Pivot: {x: 0.5, y: 0} +--- !u!225 &398838208 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 398838206} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &398838209 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 398838206} + m_CullTransparentMesh: 0 +--- !u!1 &407213597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 407213598} + - component: {fileID: 407213600} + - component: {fileID: 407213599} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &407213598 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407213597} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 931971084} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -45} + m_SizeDelta: {x: 980, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &407213599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407213597} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: EMPHASIS +--- !u!222 &407213600 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407213597} + m_CullTransparentMesh: 0 +--- !u!1 &407683030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 407683031} + m_Layer: 5 + m_Name: StartPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &407683031 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407683030} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1488622762} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -110, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &408532248 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 408532249} + - component: {fileID: 408532251} + - component: {fileID: 408532250} + m_Layer: 5 + m_Name: BoxInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &408532249 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 408532248} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1330638649} + - {fileID: 662369938} + - {fileID: 1467786816} + - {fileID: 1576130264} + m_Father: {fileID: 55131106} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -20} + m_SizeDelta: {x: -478, y: -245} + m_Pivot: {x: 1, y: 1} +--- !u!114 &408532250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 408532248} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &408532251 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 408532248} + m_CullTransparentMesh: 0 +--- !u!1 &412302467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 412302468} + - component: {fileID: 412302470} + - component: {fileID: 412302469} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &412302468 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 412302467} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1569422406} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &412302469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 412302467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.6392157, b: 0.9254902, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HAPTIC +--- !u!222 &412302470 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 412302467} + m_CullTransparentMesh: 0 +--- !u!1 &416119484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 416119485} + - component: {fileID: 416119487} + - component: {fileID: 416119486} + m_Layer: 5 + m_Name: IntroText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &416119485 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 416119484} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 931971084} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -120} + m_SizeDelta: {x: 980, y: 208.78} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &416119486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 416119484} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Emphasised haptics may or may not be the secret to a successful life. +--- !u!222 &416119487 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 416119484} + m_CullTransparentMesh: 0 +--- !u!1 &416245231 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 416245232} + - component: {fileID: 416245234} + - component: {fileID: 416245233} + m_Layer: 5 + m_Name: BoxInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &416245232 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 416245231} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 31941410} + m_Father: {fileID: 315951910} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -20} + m_SizeDelta: {x: -40, y: -580} + m_Pivot: {x: 1, y: 1} +--- !u!114 &416245233 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 416245231} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.58431375, g: 0.58431375, b: 0.58431375, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &416245234 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 416245231} + m_CullTransparentMesh: 0 +--- !u!1 &424992757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 424992758} + - component: {fileID: 424992762} + - component: {fileID: 424992761} + - component: {fileID: 424992760} + - component: {fileID: 424992759} + m_Layer: 5 + m_Name: BackButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &424992758 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424992757} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 2108115810} + - {fileID: 529553365} + m_Father: {fileID: 398838207} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!114 &424992759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424992757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: PreviousPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.3962264, g: 0.3962264, b: 0, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &424992760 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424992757} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &424992761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424992757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4862745, g: 0.4862745, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &424992762 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424992757} + m_CullTransparentMesh: 0 +--- !u!1 &442254819 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 442254820} + - component: {fileID: 442254822} + - component: {fileID: 442254821} + m_Layer: 5 + m_Name: NVCar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &442254820 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 442254819} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 765786694} + - {fileID: 890094766} + m_Father: {fileID: 1579150230} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 512, y: 512} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &442254821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 442254819} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4ca0dd4a0b132db4c9e5e7f164b7d2c7, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &442254822 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 442254819} + m_CullTransparentMesh: 0 +--- !u!1 &453990759 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 453990760} + - component: {fileID: 453990762} + - component: {fileID: 453990761} + m_Layer: 5 + m_Name: KnobIndicator (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &453990760 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453990759} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 165112074} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 76.6, y: 135.1} + m_SizeDelta: {x: 8, y: 8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &453990761 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453990759} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &453990762 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 453990759} + m_CullTransparentMesh: 0 +--- !u!1 &457962652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 457962653} + - component: {fileID: 457962655} + - component: {fileID: 457962654} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &457962653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 457962652} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1319097521} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &457962654 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 457962652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: haptic clips +--- !u!222 &457962655 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 457962652} + m_CullTransparentMesh: 0 +--- !u!1 &468577185 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 468577186} + m_Layer: 5 + m_Name: EndPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &468577186 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 468577185} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1488622762} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 110, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &471589852 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4047011439674249041, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 4047011440181609135} + m_PrefabAsset: {fileID: 0} +--- !u!114 &471589856 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471589852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 1 +--- !u!1 &472913948 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 472913949} + - component: {fileID: 472913951} + - component: {fileID: 472913950} + m_Layer: 5 + m_Name: Curve + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &472913949 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472913948} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -4.71} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1488622762} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -609, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &472913950 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472913948} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a81aea2b884ed3d4da5135acac404ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 1 + Frequency: 0 + PointsCount: 100 + AmplitudeFactor: 3 + StartPoint: {fileID: 407683031} + EndPoint: {fileID: 468577186} + Move: 0 + MovementSpeed: 1 +--- !u!120 &472913951 +LineRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 472913948} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7a07c61d1ae789245be27cd71b29fb47, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Positions: [] + m_Parameters: + serializedVersion: 3 + widthMultiplier: 1 + widthCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + key1: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + numCornerVertices: 0 + numCapVertices: 0 + alignment: 0 + textureMode: 0 + shadowBias: 0.5 + generateLightingData: 0 + m_UseWorldSpace: 1 + m_Loop: 0 +--- !u!1 &473460507 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 473460508} + - component: {fileID: 473460510} + - component: {fileID: 473460509} + m_Layer: 5 + m_Name: Amplitude + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &473460508 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 473460507} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1330638649} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -34.15985, y: -35.5} + m_SizeDelta: {x: 163.76, y: 25.94} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &473460509 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 473460507} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Amplitude +--- !u!222 &473460510 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 473460507} + m_CullTransparentMesh: 0 +--- !u!1 &473815868 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 473815869} + - component: {fileID: 473815871} + - component: {fileID: 473815870} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &473815869 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 473815868} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1478429920} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &473815870 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 473815868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Ball +--- !u!222 &473815871 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 473815868} + m_CullTransparentMesh: 0 +--- !u!1 &477882997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 477882998} + - component: {fileID: 477883000} + - component: {fileID: 477882999} + m_Layer: 5 + m_Name: 7Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &477882998 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477882997} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1884367469} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -77.59961, y: -59.299988} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &477882999 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477882997} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4f5279e4af3c4234b8aa5937637aeabd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &477883000 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 477882997} + m_CullTransparentMesh: 0 +--- !u!1 &485341647 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 485341648} + - component: {fileID: 485341649} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &485341648 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485341647} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1695343428} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &485341649 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 485341647} + m_CullTransparentMesh: 0 +--- !u!1 &501412878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 501412879} + - component: {fileID: 501412881} + - component: {fileID: 501412880} + m_Layer: 5 + m_Name: LogoBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &501412879 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 501412878} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1181520133} + - {fileID: 1179953099} + m_Father: {fileID: 503943323} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 165} + m_SizeDelta: {x: 640, y: 140} + m_Pivot: {x: 0, y: 1} +--- !u!114 &501412880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 501412878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &501412881 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 501412878} + m_CullTransparentMesh: 0 +--- !u!1 &503943322 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 503943323} + - component: {fileID: 503943325} + - component: {fileID: 503943324} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &503943323 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503943322} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 501412879} + - {fileID: 274492978} + - {fileID: 921095976} + - {fileID: 1985085562} + - {fileID: 1062054870} + m_Father: {fileID: 278291183} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &503943324 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503943322} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &503943325 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 503943322} + m_CullTransparentMesh: 0 +--- !u!1 &506095312 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 506095313} + - component: {fileID: 506095315} + - component: {fileID: 506095314} + m_Layer: 5 + m_Name: 3Dots (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &506095313 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506095312} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1826175958} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 289.0999} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &506095314 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506095312} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &506095315 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 506095312} + m_CullTransparentMesh: 0 +--- !u!1 &510300446 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 510300447} + - component: {fileID: 510300449} + - component: {fileID: 510300448} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &510300447 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 510300446} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2117913896} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &510300448 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 510300446} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98039216, g: 0.13725491, b: 0.7176471, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &510300449 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 510300446} + m_CullTransparentMesh: 0 +--- !u!1 &520986407 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 520986408} + - component: {fileID: 520986410} + - component: {fileID: 520986409} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &520986408 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520986407} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 346701784} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &520986409 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520986407} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: HAPTIC CLIPS +--- !u!222 &520986410 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 520986407} + m_CullTransparentMesh: 0 +--- !u!1 &523240476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 523240477} + - component: {fileID: 523240479} + - component: {fileID: 523240478} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &523240477 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523240476} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1695343428} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &523240478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523240476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &523240479 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523240476} + m_CullTransparentMesh: 0 +--- !u!1 &529043267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529043268} + - component: {fileID: 529043270} + - component: {fileID: 529043269} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &529043268 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529043267} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 751070462} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -45} + m_SizeDelta: {x: 980, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &529043269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529043267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HAPTIC CLIPS +--- !u!222 &529043270 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529043267} + m_CullTransparentMesh: 0 +--- !u!1 &529553364 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 529553365} + - component: {fileID: 529553367} + - component: {fileID: 529553366} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &529553365 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529553364} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 424992758} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &529553366 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529553364} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: car +--- !u!222 &529553367 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 529553364} + m_CullTransparentMesh: 0 +--- !u!1 &530785383 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 530785384} + - component: {fileID: 530785388} + - component: {fileID: 530785387} + - component: {fileID: 530785386} + - component: {fileID: 530785385} + m_Layer: 5 + m_Name: NextButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &530785384 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 530785383} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 377249628} + - {fileID: 697506567} + m_Father: {fileID: 398838207} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 1, y: 0} +--- !u!114 &530785385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 530785383} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: NextPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.3962264, g: 0.3962264, b: 0, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &530785386 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 530785383} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &530785387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 530785383} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4862745, g: 0.4862745, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &530785388 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 530785383} + m_CullTransparentMesh: 0 +--- !u!1 &538863577 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 538863578} + - component: {fileID: 538863581} + - component: {fileID: 538863580} + - component: {fileID: 538863579} + - component: {fileID: 538863582} + m_Layer: 5 + m_Name: PowerBarItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &538863578 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538863577} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 555838215} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 156.7, y: 40} + m_Pivot: {x: 0, y: 0} +--- !u!114 &538863579 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538863577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &538863580 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538863577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98823535, g: 0.7843138, b: 0.34117648, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &538863581 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538863577} + m_CullTransparentMesh: 0 +--- !u!114 &538863582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538863577} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b00d7a1bf2998ce459a1952941fc251e, type: 3} + m_Name: + m_EditorClassIdentifier: + BumpDuration: 0.15 + NormalColor: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + InactiveColor: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.016492 + outSlope: 4.016492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.06260913 + - serializedVersion: 3 + time: 0.25394255 + value: 0.9271569 + inSlope: 0.96574783 + outSlope: 0.96574783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -3.866068 + outSlope: -3.866068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.028384654 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &542956924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 542956925} + - component: {fileID: 542956927} + - component: {fileID: 542956926} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &542956925 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542956924} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1230727630} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &542956926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542956924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &542956927 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 542956924} + m_CullTransparentMesh: 0 +--- !u!224 &543231511 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 1960791680} + m_PrefabAsset: {fileID: 0} +--- !u!114 &543231514 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4047011439214917865, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 1960791680} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &555838214 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 555838215} + - component: {fileID: 555838218} + - component: {fileID: 555838216} + m_Layer: 5 + m_Name: CarProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &555838215 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555838214} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 538863578} + - {fileID: 1209706726} + - {fileID: 1072779074} + - {fileID: 1598537563} + - {fileID: 752170944} + m_Father: {fileID: 281814000} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 40, y: 40} + m_SizeDelta: {x: -80, y: -148.9} + m_Pivot: {x: 0, y: 0} +--- !u!114 &555838216 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555838214} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 7 + m_Spacing: 20 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!222 &555838218 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 555838214} + m_CullTransparentMesh: 0 +--- !u!1 &562691323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 562691324} + - component: {fileID: 562691326} + - component: {fileID: 562691325} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &562691324 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 562691323} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1086067260} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &562691325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 562691323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &562691326 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 562691323} + m_CullTransparentMesh: 0 +--- !u!1 &563766696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 563766697} + - component: {fileID: 563766698} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &563766697 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 563766696} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 921095976} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &563766698 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 563766696} + m_CullTransparentMesh: 0 +--- !u!1 &576139433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 576139434} + - component: {fileID: 576139435} + - component: {fileID: 576139436} + m_Layer: 5 + m_Name: FrequencyValue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &576139434 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576139433} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 662369938} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -19.99974, y: -34.9} + m_SizeDelta: {x: 163.76001, y: 25.94} + m_Pivot: {x: 1, y: 1} +--- !u!222 &576139435 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576139433} + m_CullTransparentMesh: 0 +--- !u!114 &576139436 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 576139433} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: 1 +--- !u!1 &579580177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 579580178} + - component: {fileID: 579580180} + - component: {fileID: 579580179} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &579580178 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579580177} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1696317759} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &579580179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579580177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &579580180 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 579580177} + m_CullTransparentMesh: 0 +--- !u!1 &580527107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 580527108} + - component: {fileID: 580527110} + - component: {fileID: 580527109} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &580527108 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 580527107} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1696317759} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &580527109 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 580527107} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &580527110 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 580527107} + m_CullTransparentMesh: 0 +--- !u!1 &581579053 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 581579054} + - component: {fileID: 581579056} + - component: {fileID: 581579055} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &581579054 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581579053} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 921095976} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &581579055 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581579053} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &581579056 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581579053} + m_CullTransparentMesh: 0 +--- !u!1 &595019508 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 595019509} + - component: {fileID: 595019513} + - component: {fileID: 595019512} + - component: {fileID: 595019511} + - component: {fileID: 595019510} + m_Layer: 5 + m_Name: Button5 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &595019509 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595019508} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 701863097} + m_Father: {fileID: 181786192} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 466.2, y: 260} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &595019510 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595019508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 5 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &595019511 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595019508} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &595019512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595019508} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &595019513 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 595019508} + m_CullTransparentMesh: 0 +--- !u!1 &605602630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 605602631} + - component: {fileID: 605602633} + - component: {fileID: 605602632} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &605602631 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605602630} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 751070462} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -95} + m_SizeDelta: {x: 980, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &605602632 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605602630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &605602633 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 605602630} + m_CullTransparentMesh: 0 +--- !u!1 &618200105 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 618200106} + - component: {fileID: 618200107} + m_Layer: 5 + m_Name: AudioSourceDice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &618200106 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 618200105} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &618200107 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 618200105} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 6d520839b7deb4c459ba85fd74cf2c18, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &618306283 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 618306284} + - component: {fileID: 618306285} + m_Layer: 5 + m_Name: DebugEmphasis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &618306284 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 618306283} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1414928048} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &618306285 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 618306283} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 4cb55e2084a872b4fa4051ba3320c8a7, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &622152291 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 622152292} + - component: {fileID: 622152293} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &622152292 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622152291} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 835011769} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &622152293 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 622152291} + m_CullTransparentMesh: 0 +--- !u!1 &626027126 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 626027127} + - component: {fileID: 626027128} + m_Layer: 5 + m_Name: AudioSourceGameOver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &626027127 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 626027126} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &626027128 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 626027126} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 9143cc0979f80d945bb7339cd7a44944, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &636859480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 636859481} + - component: {fileID: 636859483} + - component: {fileID: 636859482} + m_Layer: 5 + m_Name: 3Dots (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &636859481 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 636859480} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 48147700} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 289.0999} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &636859482 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 636859480} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &636859483 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 636859480} + m_CullTransparentMesh: 0 +--- !u!1 &662369937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 662369938} + - component: {fileID: 662369940} + - component: {fileID: 662369939} + m_Layer: 5 + m_Name: BoxDataFrequency + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &662369938 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 662369937} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 576139434} + - {fileID: 1247615750} + m_Father: {fileID: 408532249} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -280, y: 20} + m_SizeDelta: {x: 260, y: 90} + m_Pivot: {x: 0, y: 0} +--- !u!114 &662369939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 662369937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &662369940 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 662369937} + m_CullTransparentMesh: 0 +--- !u!1 &671108994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 671108995} + - component: {fileID: 671108997} + - component: {fileID: 671108996} + m_Layer: 5 + m_Name: IntroText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &671108995 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671108994} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1884367469} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -120} + m_SizeDelta: {x: 980, y: 208.78} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &671108996 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671108994} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: There are no points, no leaderboards, just a satisfying bouncing ball. +--- !u!222 &671108997 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671108994} + m_CullTransparentMesh: 0 +--- !u!1 &671481008 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 671481009} + - component: {fileID: 671481011} + - component: {fileID: 671481010} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &671481009 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671481008} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 398838207} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &671481010 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671481008} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &671481011 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 671481008} + m_CullTransparentMesh: 0 +--- !u!1 &672648801 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4047011439674249041, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 81273734} + m_PrefabAsset: {fileID: 0} +--- !u!114 &672648805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672648801} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &675956755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 675956756} + - component: {fileID: 675956758} + - component: {fileID: 675956757} + m_Layer: 5 + m_Name: Footer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &675956756 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675956755} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 840644369} + - {fileID: 28174874} + - {fileID: 1093665927} + - {fileID: 1996985030} + - {fileID: 337754531} + - {fileID: 1319097521} + - {fileID: 677059015} + m_Father: {fileID: 811431853} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 350} + m_Pivot: {x: 0.5, y: 0} +--- !u!225 &675956757 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675956755} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &675956758 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 675956755} + m_CullTransparentMesh: 0 +--- !u!1 &676642895 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 676642896} + - component: {fileID: 676642898} + - component: {fileID: 676642897} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &676642896 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 676642895} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1085244083} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &676642897 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 676642895} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &676642898 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 676642895} + m_CullTransparentMesh: 0 +--- !u!1 &676669061 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 676669062} + - component: {fileID: 676669064} + - component: {fileID: 676669063} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &676669062 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 676669061} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 2517635} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &676669063 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 676669061} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: 'GAME + + OVER' +--- !u!222 &676669064 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 676669061} + m_CullTransparentMesh: 0 +--- !u!1 &677059014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 677059015} + - component: {fileID: 677059017} + - component: {fileID: 677059016} + m_Layer: 5 + m_Name: PaginationContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &677059015 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677059014} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 675956756} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 115} + m_SizeDelta: {x: 0, y: -270} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &677059016 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677059014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7719238c9686c2645a6b5a89cba3de35, type: 3} + m_Name: + m_EditorClassIdentifier: + PaginationDotPrefab: {fileID: 7753230961564595917, guid: 844721accbc9f5744adc1f72590ea4f5, + type: 3} + ActiveColor: {r: 0, g: 0, b: 0, a: 0} + InactiveColor: {r: 0, g: 0, b: 0, a: 0} +--- !u!114 &677059017 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677059014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &682974578 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 682974579} + - component: {fileID: 682974581} + - component: {fileID: 682974580} + m_Layer: 5 + m_Name: 7Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &682974579 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682974578} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1275136506} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -77.59961, y: -59.299988} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &682974580 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682974578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4f5279e4af3c4234b8aa5937637aeabd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &682974581 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 682974578} + m_CullTransparentMesh: 0 +--- !u!1 &683257260 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 683257261} + - component: {fileID: 683257262} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &683257261 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 683257260} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1370240817} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &683257262 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 683257260} + m_CullTransparentMesh: 0 +--- !u!1 &690130469 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 690130470} + - component: {fileID: 690130472} + - component: {fileID: 690130471} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &690130470 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 690130469} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1591721758} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &690130471 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 690130469} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &690130472 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 690130469} + m_CullTransparentMesh: 0 +--- !u!1 &696412634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 696412635} + - component: {fileID: 696412637} + - component: {fileID: 696412636} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &696412635 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696412634} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 744678107} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &696412636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696412634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &696412637 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696412634} + m_CullTransparentMesh: 0 +--- !u!224 &697453462 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + m_PrefabInstance: {fileID: 1616920451} + m_PrefabAsset: {fileID: 0} +--- !u!1 &697506566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 697506567} + - component: {fileID: 697506569} + - component: {fileID: 697506568} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &697506567 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 697506566} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 530785384} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &697506568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 697506566} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: presets +--- !u!222 &697506569 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 697506566} + m_CullTransparentMesh: 0 +--- !u!1 &701863096 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 701863097} + - component: {fileID: 701863099} + - component: {fileID: 701863098} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &701863097 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701863096} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 595019509} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &701863098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701863096} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Laser +--- !u!222 &701863099 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701863096} + m_CullTransparentMesh: 0 +--- !u!1 &716833499 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 716833500} + - component: {fileID: 716833502} + - component: {fileID: 716833501} + m_Layer: 5 + m_Name: 7Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &716833500 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 716833499} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1254437066} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -77.59961, y: -59.299988} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &716833501 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 716833499} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4f5279e4af3c4234b8aa5937637aeabd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &716833502 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 716833499} + m_CullTransparentMesh: 0 +--- !u!1 &723031662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 723031663} + - component: {fileID: 723031667} + - component: {fileID: 723031666} + - component: {fileID: 723031665} + - component: {fileID: 723031664} + m_Layer: 5 + m_Name: Button6 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &723031663 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723031662} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 1378714866} + m_Father: {fileID: 181786192} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 778, y: 260} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &723031664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723031662} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 6 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &723031665 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723031662} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &723031666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723031662} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &723031667 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 723031662} + m_CullTransparentMesh: 0 +--- !u!1 &729326771 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 729326772} + - component: {fileID: 729326774} + - component: {fileID: 729326773} + m_Layer: 5 + m_Name: DotsBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &729326772 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729326771} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99989974, y: 0.99989974, z: 0.99989974} + m_Children: [] + m_Father: {fileID: 398838207} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -115.9} + m_SizeDelta: {x: 1024, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &729326773 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729326771} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 201a3f0fd44444e4da86b3ded7f4448f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &729326774 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729326771} + m_CullTransparentMesh: 0 +--- !u!1 &732424594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 732424595} + - component: {fileID: 732424597} + - component: {fileID: 732424596} + m_Layer: 5 + m_Name: 7Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &732424595 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 732424594} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 751070462} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -77.59961, y: -59.299988} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &732424596 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 732424594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4f5279e4af3c4234b8aa5937637aeabd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &732424597 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 732424594} + m_CullTransparentMesh: 0 +--- !u!1 &734991509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 734991510} + - component: {fileID: 734991512} + - component: {fileID: 734991511} + m_Layer: 5 + m_Name: 3Dots (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &734991510 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 734991509} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 398838207} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 289.0999} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &734991511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 734991509} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &734991512 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 734991509} + m_CullTransparentMesh: 0 +--- !u!1 &744678106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 744678107} + - component: {fileID: 744678111} + - component: {fileID: 744678110} + - component: {fileID: 744678109} + - component: {fileID: 744678108} + m_Layer: 5 + m_Name: BackButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &744678107 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744678106} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 696412635} + - {fileID: 1491293629} + m_Father: {fileID: 48147700} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!114 &744678108 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744678106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: PreviousPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.3584906, g: 0.3584906, b: 0.3584906, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &744678109 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744678106} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &744678110 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744678106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4392157, g: 0.4392157, b: 0.4392157, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &744678111 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 744678106} + m_CullTransparentMesh: 0 +--- !u!1 &750487453 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 750487454} + - component: {fileID: 750487459} + - component: {fileID: 750487458} + - component: {fileID: 750487457} + - component: {fileID: 750487456} + - component: {fileID: 750487455} + m_Layer: 4 + m_Name: Wall1 (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &750487454 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750487453} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 925354622} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: -50} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &750487455 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750487453} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4615302ba7af13645aec1ad743d65dcf, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!50 &750487456 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750487453} + m_BodyType: 1 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 1 + m_SleepingMode: 0 + m_CollisionDetection: 1 + m_Constraints: 0 +--- !u!61 &750487457 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750487453} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 100, y: 20} + m_EdgeRadius: 0 +--- !u!114 &750487458 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750487453} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &750487459 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750487453} + m_CullTransparentMesh: 0 +--- !u!1 &751070461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 751070462} + - component: {fileID: 751070464} + - component: {fileID: 751070463} + m_Layer: 5 + m_Name: Intro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &751070462 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 751070461} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 529043268} + - {fileID: 732424595} + - {fileID: 605602631} + - {fileID: 1143208100} + - {fileID: 1332895084} + m_Father: {fileID: 1218190712} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -330} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &751070463 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 751070461} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &751070464 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 751070461} + m_CullTransparentMesh: 0 +--- !u!1 &752170943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 752170944} + - component: {fileID: 752170947} + - component: {fileID: 752170946} + - component: {fileID: 752170945} + - component: {fileID: 752170948} + m_Layer: 5 + m_Name: PowerBarItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &752170944 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752170943} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 555838215} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 156.7, y: 40} + m_Pivot: {x: 0, y: 0} +--- !u!114 &752170945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752170943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &752170946 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752170943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98823535, g: 0.7843138, b: 0.34117648, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &752170947 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752170943} + m_CullTransparentMesh: 0 +--- !u!114 &752170948 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 752170943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b00d7a1bf2998ce459a1952941fc251e, type: 3} + m_Name: + m_EditorClassIdentifier: + BumpDuration: 0.15 + NormalColor: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + InactiveColor: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.016492 + outSlope: 4.016492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.06260913 + - serializedVersion: 3 + time: 0.25394255 + value: 0.9271569 + inSlope: 0.96574783 + outSlope: 0.96574783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -3.866068 + outSlope: -3.866068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.028384654 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &759508656 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 759508657} + - component: {fileID: 759508659} + - component: {fileID: 759508658} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &759508657 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 759508656} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1867979234} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &759508658 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 759508656} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &759508659 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 759508656} + m_CullTransparentMesh: 0 +--- !u!1 &761665396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 761665397} + - component: {fileID: 761665399} + - component: {fileID: 761665398} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &761665397 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761665396} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 1679978039} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &761665398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761665396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &761665399 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761665396} + m_CullTransparentMesh: 0 +--- !u!1 &765786693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 765786694} + - component: {fileID: 765786696} + - component: {fileID: 765786695} + m_Layer: 5 + m_Name: NVCarWheel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &765786694 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765786693} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 442254820} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -135, y: -86} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &765786695 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765786693} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: e2611d2b291e3374a979553a9a11c752, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &765786696 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765786693} + m_CullTransparentMesh: 0 +--- !u!1 &765825974 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 765825975} + - component: {fileID: 765825977} + - component: {fileID: 765825976} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &765825975 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765825974} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 1478429920} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &765825976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765825974} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &765825977 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 765825974} + m_CullTransparentMesh: 0 +--- !u!1 &768422173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 768422174} + - component: {fileID: 768422176} + - component: {fileID: 768422175} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &768422174 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768422173} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1275136506} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -95} + m_SizeDelta: {x: 980, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &768422175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768422173} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &768422176 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768422173} + m_CullTransparentMesh: 0 +--- !u!1 &773417640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 773417641} + - component: {fileID: 773417642} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &773417641 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773417640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1569422406} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &773417642 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 773417640} + m_CullTransparentMesh: 0 +--- !u!1 &779997976 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 779997977} + - component: {fileID: 779997979} + - component: {fileID: 779997978} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &779997977 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779997976} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1770833512} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &779997978 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779997976} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98039216, g: 0.13725491, b: 0.7176471, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &779997979 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779997976} + m_CullTransparentMesh: 0 +--- !u!1 &785930642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 785930643} + - component: {fileID: 785930647} + - component: {fileID: 785930646} + - component: {fileID: 785930645} + - component: {fileID: 785930644} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &785930643 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 785930642} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 1986624022} + m_Father: {fileID: 1446197951} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 93.2} + m_SizeDelta: {x: 900, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &785930644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 785930642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 278291184} + m_MethodName: ContinuousHapticsButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &785930645 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 785930642} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &785930646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 785930642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.7921569, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &785930647 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 785930642} + m_CullTransparentMesh: 0 +--- !u!1 &795186387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 795186388} + - component: {fileID: 795186390} + - component: {fileID: 795186389} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &795186388 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795186387} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1673368856} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &795186389 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795186387} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &795186390 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795186387} + m_CullTransparentMesh: 0 +--- !u!1 &796196280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 796196281} + - component: {fileID: 796196283} + - component: {fileID: 796196282} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &796196281 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796196280} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 395404889} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &796196282 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796196280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &796196283 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 796196280} + m_CullTransparentMesh: 0 +--- !u!1 &810348985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 810348986} + - component: {fileID: 810348988} + - component: {fileID: 810348987} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &810348986 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810348985} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 835011769} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &810348987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810348985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SOUND +--- !u!222 &810348988 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810348985} + m_CullTransparentMesh: 0 +--- !u!1 &811431852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 811431853} + - component: {fileID: 811431855} + - component: {fileID: 811431854} + m_Layer: 5 + m_Name: Ball + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &811431853 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811431852} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1073815007} + - {fileID: 675956756} + - {fileID: 1230727630} + - {fileID: 1884367469} + - {fileID: 1772218534} + - {fileID: 248171879} + m_Father: {fileID: 1945195674} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 1527, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &811431854 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811431852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 108a3476b6d855545b26c23b7e92e890, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugAudioEmphasis: {fileID: 1026918482} + DebugAudioContinuous: {fileID: 1257290971} + Logo: {fileID: 300857029} + Gravity: {x: 0, y: -70} +--- !u!222 &811431855 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 811431852} + m_CullTransparentMesh: 0 +--- !u!1 &819534589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 819534590} + - component: {fileID: 819534592} + - component: {fileID: 819534591} + m_Layer: 5 + m_Name: BoxInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &819534590 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819534589} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1598451434} + - {fileID: 1548988332} + - {fileID: 1488622762} + m_Father: {fileID: 2042766148} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -20} + m_SizeDelta: {x: -680, y: -287} + m_Pivot: {x: 1, y: 1} +--- !u!114 &819534591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819534589} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &819534592 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819534589} + m_CullTransparentMesh: 0 +--- !u!1 &819566992 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 819566993} + m_Layer: 5 + m_Name: EndPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &819566993 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 819566992} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1576130264} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 189, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &822881480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 822881481} + - component: {fileID: 822881482} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &822881481 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 822881480} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1696317759} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &822881482 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 822881480} + m_CullTransparentMesh: 0 +--- !u!1 &823073709 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 823073710} + - component: {fileID: 823073712} + - component: {fileID: 823073711} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &823073710 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 823073709} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1569422406} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &823073711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 823073709} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &823073712 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 823073709} + m_CullTransparentMesh: 0 +--- !u!1 &835011768 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 835011769} + - component: {fileID: 835011774} + - component: {fileID: 835011773} + - component: {fileID: 835011772} + - component: {fileID: 835011771} + - component: {fileID: 835011770} + m_Layer: 5 + m_Name: SoundSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &835011769 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835011768} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 810348986} + - {fileID: 1999910699} + - {fileID: 1480381797} + - {fileID: 1030835731} + - {fileID: 622152292} + - {fileID: 894498358} + m_Father: {fileID: 1582376651} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &835011770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835011768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e91a9c36e72456e4db171843272d8a2b, type: 3} + m_Name: + m_EditorClassIdentifier: + DemoManager: {fileID: 1183418718} +--- !u!114 &835011771 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835011768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 835011771} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 1480381798} + InitialState: 0 + OffPosition: {fileID: 622152292} + OnPosition: {fileID: 894498358} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 0} + m_MethodName: SetDebugAudio + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 0} + m_MethodName: SetDebugAudio + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &835011772 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835011768} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &835011773 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835011768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &835011774 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835011768} + m_CullTransparentMesh: 0 +--- !u!1 &840644368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 840644369} + - component: {fileID: 840644371} + - component: {fileID: 840644370} + m_Layer: 5 + m_Name: 3Dots (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &840644369 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 840644368} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 675956756} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 289.0999} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &840644370 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 840644368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &840644371 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 840644368} + m_CullTransparentMesh: 0 +--- !u!1 &842088056 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 842088057} + - component: {fileID: 842088059} + - component: {fileID: 842088058} + m_Layer: 5 + m_Name: 3Dots (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &842088057 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 842088056} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 398838207} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 289.1} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &842088058 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 842088056} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &842088059 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 842088056} + m_CullTransparentMesh: 0 +--- !u!1 &847352768 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4047011439674249041, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 67230897} + m_PrefabAsset: {fileID: 0} +--- !u!114 &847352770 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 847352768} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &859223582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 859223583} + - component: {fileID: 859223585} + - component: {fileID: 859223584} + m_Layer: 5 + m_Name: HitPusherParticles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &859223583 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859223582} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1303230462} + m_Father: {fileID: 1520672068} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!199 &859223584 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859223582} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a8a95ed47c80ace44ac20124ba5fabaa, type: 2} + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 50 + m_RenderMode: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_VertexStreams: 00010304 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!198 &859223585 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859223582} + serializedVersion: 6 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + looping: 0 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 1 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.15 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 0.7843138, b: 0.2901961, a: 0.4745098} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 30 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 4 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 180, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.0001 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 1 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 30 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.7843138, b: 0.2901961, a: 1} + key1: {r: 1, g: 0.7843138, b: 0.2901961, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 42791 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!1 &862014020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 862014021} + - component: {fileID: 862014023} + - component: {fileID: 862014022} + m_Layer: 5 + m_Name: LogoBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &862014021 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862014020} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1802767482} + - {fileID: 1715691097} + m_Father: {fileID: 1086067260} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 165} + m_SizeDelta: {x: 640, y: 140} + m_Pivot: {x: 0, y: 1} +--- !u!114 &862014022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862014020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &862014023 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 862014020} + m_CullTransparentMesh: 0 +--- !u!1 &864551882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 864551883} + - component: {fileID: 864551885} + - component: {fileID: 864551884} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &864551883 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 864551882} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1370240817} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &864551884 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 864551882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &864551885 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 864551882} + m_CullTransparentMesh: 0 +--- !u!1 &867580612 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 867580613} + - component: {fileID: 867580614} + m_Layer: 5 + m_Name: AudioSourceHeartbeats + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &867580613 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867580612} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &867580614 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 867580612} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 92eb18dca6674154980d37823d0a644c, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &868650727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 868650728} + - component: {fileID: 868650730} + - component: {fileID: 868650729} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &868650728 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 868650727} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1695343428} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &868650729 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 868650727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.6392157, b: 0.9254902, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &868650730 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 868650727} + m_CullTransparentMesh: 0 +--- !u!1 &872420375 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 872420376} + - component: {fileID: 872420377} + - component: {fileID: 872420378} + m_Layer: 5 + m_Name: PaginationContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &872420376 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 872420375} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1673368856} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 115} + m_SizeDelta: {x: 0, y: -270} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &872420377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 872420375} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &872420378 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 872420375} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7719238c9686c2645a6b5a89cba3de35, type: 3} + m_Name: + m_EditorClassIdentifier: + PaginationDotPrefab: {fileID: 7753230961564595917, guid: 844721accbc9f5744adc1f72590ea4f5, + type: 3} + ActiveColor: {r: 0, g: 0, b: 0, a: 0} + InactiveColor: {r: 0, g: 0, b: 0, a: 0} +--- !u!1 &886129725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 886129726} + - component: {fileID: 886129727} + - component: {fileID: 886129728} + m_Layer: 5 + m_Name: AmplitudeValue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &886129726 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886129725} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1598451434} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -20.00003} + m_SizeDelta: {x: 163.76001, y: 25.94} + m_Pivot: {x: 1, y: 1} +--- !u!222 &886129727 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886129725} + m_CullTransparentMesh: 0 +--- !u!114 &886129728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 886129725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: 0.85 +--- !u!1 &889769687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 889769688} + - component: {fileID: 889769690} + - component: {fileID: 889769689} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &889769688 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 889769687} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1591721758} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &889769689 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 889769687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &889769690 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 889769687} + m_CullTransparentMesh: 0 +--- !u!1 &889778643 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 889778644} + m_Layer: 5 + m_Name: AudioSources + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &889778644 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 889778643} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 618200106} + - {fileID: 1998855355} + - {fileID: 626027127} + - {fileID: 867580613} + - {fileID: 1750563996} + - {fileID: 902437696} + - {fileID: 1641781885} + - {fileID: 386455301} + - {fileID: 227701377} + m_Father: {fileID: 1218190712} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &890094765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890094766} + - component: {fileID: 890094768} + - component: {fileID: 890094767} + m_Layer: 5 + m_Name: NVCarWheel2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &890094766 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890094765} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 442254820} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 106.7, y: -86} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &890094767 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890094765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: e2611d2b291e3374a979553a9a11c752, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &890094768 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890094765} + m_CullTransparentMesh: 0 +--- !u!1 &890987134 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 890987135} + - component: {fileID: 890987139} + - component: {fileID: 890987138} + - component: {fileID: 890987137} + - component: {fileID: 890987136} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &890987135 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890987134} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 906463946} + m_Father: {fileID: 121448477} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 93.2} + m_SizeDelta: {x: 900, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &890987136 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890987134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1618306578} + m_MethodName: EmphasisHapticsButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &890987137 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890987134} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &890987138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890987134} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.7921569, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &890987139 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 890987134} + m_CullTransparentMesh: 0 +--- !u!1 &894337575 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 894337576} + - component: {fileID: 894337577} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &894337576 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 894337575} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 921095976} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &894337577 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 894337575} + m_CullTransparentMesh: 0 +--- !u!1 &894498357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 894498358} + - component: {fileID: 894498359} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &894498358 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 894498357} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 835011769} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &894498359 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 894498357} + m_CullTransparentMesh: 0 +--- !u!1 &897238772 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 897238773} + - component: {fileID: 897238775} + - component: {fileID: 897238774} + m_Layer: 5 + m_Name: KnobIndicator (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &897238773 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897238772} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 165112074} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 182.8} + m_SizeDelta: {x: 8, y: 8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &897238774 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897238772} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &897238775 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 897238772} + m_CullTransparentMesh: 0 +--- !u!1 &902437695 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 902437696} + - component: {fileID: 902437697} + m_Layer: 5 + m_Name: AudioSourcePowerOff + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &902437696 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 902437695} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &902437697 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 902437695} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 8c5a32474dfb31747953c71d2cfc1075, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &904938580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 904938581} + - component: {fileID: 904938583} + - component: {fileID: 904938582} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &904938581 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 904938580} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1085244083} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &904938582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 904938580} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &904938583 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 904938580} + m_CullTransparentMesh: 0 +--- !u!1 &906390110 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 906390111} + - component: {fileID: 906390113} + - component: {fileID: 906390112} + m_Layer: 5 + m_Name: Intro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &906390111 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906390110} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 1428283320} + - {fileID: 1687540331} + - {fileID: 18198684} + - {fileID: 978214003} + m_Father: {fileID: 1770833512} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -330} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &906390112 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906390110} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &906390113 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906390110} + m_CullTransparentMesh: 0 +--- !u!1 &906463945 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 906463946} + - component: {fileID: 906463948} + - component: {fileID: 906463947} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &906463946 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906463945} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 890987135} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &906463947 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906463945} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Play emphasised haptic pattern +--- !u!222 &906463948 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 906463945} + m_CullTransparentMesh: 0 +--- !u!1 &915712434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 915712435} + - component: {fileID: 915712436} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &915712435 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 915712434} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 166775920} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &915712436 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 915712434} + m_CullTransparentMesh: 0 +--- !u!1 &921095975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 921095976} + - component: {fileID: 921095980} + - component: {fileID: 921095979} + - component: {fileID: 921095978} + - component: {fileID: 921095977} + - component: {fileID: 921095981} + m_Layer: 5 + m_Name: SoundSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &921095976 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921095975} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1255364406} + - {fileID: 2083827546} + - {fileID: 581579054} + - {fileID: 1668359991} + - {fileID: 894337576} + - {fileID: 563766697} + m_Father: {fileID: 503943323} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &921095977 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921095975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 921095977} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 581579055} + InitialState: 0 + OffPosition: {fileID: 894337576} + OnPosition: {fileID: 563766697} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 278291184} + m_MethodName: SetDebugAudio + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 278291184} + m_MethodName: SetDebugAudio + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &921095978 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921095975} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &921095979 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921095975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &921095980 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921095975} + m_CullTransparentMesh: 0 +--- !u!114 &921095981 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921095975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e91a9c36e72456e4db171843272d8a2b, type: 3} + m_Name: + m_EditorClassIdentifier: + DemoManager: {fileID: 1183418718} +--- !u!1 &921970086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 921970087} + - component: {fileID: 921970089} + - component: {fileID: 921970088} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &921970087 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921970086} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1569422406} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &921970088 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921970086} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &921970089 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 921970086} + m_CullTransparentMesh: 0 +--- !u!1 &925354621 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 925354622} + - component: {fileID: 925354624} + - component: {fileID: 925354623} + - component: {fileID: 925354625} + m_Layer: 5 + m_Name: ContentsBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &925354622 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 925354621} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.000066, y: 1.000066, z: 1.000066} + m_Children: + - {fileID: 1108381816} + - {fileID: 1520672068} + - {fileID: 359383868} + - {fileID: 1204694477} + - {fileID: 1799831130} + - {fileID: 750487454} + m_Father: {fileID: 1772218534} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: -100, y: -53} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &925354623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 925354621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &925354624 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 925354621} + m_CullTransparentMesh: 0 +--- !u!114 &925354625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 925354621} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b52f664c08fd13941b0167b90d8fb49a, type: 3} + m_Name: + m_EditorClassIdentifier: + BallMover: {fileID: 1108381816} +--- !u!1 &931971083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 931971084} + - component: {fileID: 931971086} + - component: {fileID: 931971085} + m_Layer: 5 + m_Name: Intro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &931971084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931971083} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 407213598} + - {fileID: 1868665267} + - {fileID: 1080952066} + - {fileID: 416119485} + m_Father: {fileID: 1618306577} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -330} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &931971085 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931971083} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &931971086 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931971083} + m_CullTransparentMesh: 0 +--- !u!1 &932658211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 932658212} + - component: {fileID: 932658214} + - component: {fileID: 932658213} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &932658212 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 932658211} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 229223115} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &932658213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 932658211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.58431375, g: 0.58431375, b: 0.58431375, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &932658214 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 932658211} + m_CullTransparentMesh: 0 +--- !u!1 &943477461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 943477462} + - component: {fileID: 943477464} + - component: {fileID: 943477463} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &943477462 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 943477461} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 163683403} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &943477463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 943477461} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: reload +--- !u!222 &943477464 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 943477461} + m_CullTransparentMesh: 0 +--- !u!1 &949621498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 949621499} + - component: {fileID: 949621500} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &949621499 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949621498} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1085244083} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &949621500 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 949621498} + m_CullTransparentMesh: 0 +--- !u!1 &953001069 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 953001070} + - component: {fileID: 953001072} + - component: {fileID: 953001071} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &953001070 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953001069} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1230727630} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &953001071 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953001069} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &953001072 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 953001069} + m_CullTransparentMesh: 0 +--- !u!1 &955176845 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 955176846} + - component: {fileID: 955176848} + - component: {fileID: 955176847} + m_Layer: 5 + m_Name: Reloading + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &955176846 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955176845} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1889145180} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 163.76, y: 25.940002} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &955176847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955176845} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: RELOADING +--- !u!222 &955176848 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955176845} + m_CullTransparentMesh: 0 +--- !u!1001 &959923089 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1548988332} + m_Modifications: + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -160 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917867, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Name + value: FrequencyVerticalProgressBar + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.b + value: 0.3372549 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.g + value: 0.78823537 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.r + value: 0.9960785 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -60.000004 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -59.999985 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a34261c2adaebf04a843bbcd2393bc03, type: 3} +--- !u!224 &967801413 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 4047011440181609135} + m_PrefabAsset: {fileID: 0} +--- !u!114 &967801414 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4047011439214917865, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 4047011440181609135} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &972813554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 972813555} + m_Layer: 5 + m_Name: DebugSounds + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &972813555 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972813554} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: + - {fileID: 2016813736} + m_Father: {fileID: 1618306577} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1221.0004, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &975894757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 975894758} + - component: {fileID: 975894760} + - component: {fileID: 975894759} + m_Layer: 5 + m_Name: BoxRight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &975894758 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975894757} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 229430288} + - {fileID: 1784098897} + - {fileID: 4047011439017046467} + m_Father: {fileID: 1287155424} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -138.34961, y: 233.30078} + m_SizeDelta: {x: 236.69995, y: 426.6} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &975894759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975894757} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &975894760 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975894757} + m_CullTransparentMesh: 0 +--- !u!1 &978214002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 978214003} + - component: {fileID: 978214005} + - component: {fileID: 978214004} + m_Layer: 5 + m_Name: IntroText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &978214003 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978214002} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 906390111} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -120} + m_SizeDelta: {x: 980, y: 208.78} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &978214004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978214002} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Touch these tiny pads and feel the power of music climb along your fingers. ' +--- !u!222 &978214005 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 978214002} + m_CullTransparentMesh: 0 +--- !u!1 &989277417 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 989277418} + - component: {fileID: 989277420} + - component: {fileID: 989277419} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &989277418 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 989277417} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 1843110486} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &989277419 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 989277417} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &989277420 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 989277417} + m_CullTransparentMesh: 0 +--- !u!1 &1013622211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1013622212} + - component: {fileID: 1013622214} + - component: {fileID: 1013622213} + m_Layer: 5 + m_Name: LogoBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1013622212 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013622211} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 381339439} + - {fileID: 300857032} + m_Father: {fileID: 1230727630} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 165} + m_SizeDelta: {x: 640, y: 140} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1013622213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013622211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1013622214 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013622211} + m_CullTransparentMesh: 0 +--- !u!1 &1017881751 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1017881752} + - component: {fileID: 1017881753} + m_Layer: 5 + m_Name: DebugContinuous + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1017881752 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1017881751} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1414928048} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1017881753 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1017881751} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: dfdb195f0fef847b1a5b3b35d741f8e3, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 1 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1024446292 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1024446293} + - component: {fileID: 1024446295} + - component: {fileID: 1024446294} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1024446293 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1024446292} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1696317759} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1024446294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1024446292} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.58431375, g: 0.58431375, b: 0.58431375, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SOUND +--- !u!222 &1024446295 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1024446292} + m_CullTransparentMesh: 0 +--- !u!1 &1026918480 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1026918481} + - component: {fileID: 1026918482} + m_Layer: 5 + m_Name: DebugEmphasis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1026918481 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026918480} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 248171879} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1026918482 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026918480} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 4cb55e2084a872b4fa4051ba3320c8a7, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1030101230 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1030101231} + - component: {fileID: 1030101232} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1030101231 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030101230} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 166775920} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1030101232 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030101230} + m_CullTransparentMesh: 0 +--- !u!1 &1030835730 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1030835731} + - component: {fileID: 1030835733} + - component: {fileID: 1030835732} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1030835731 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030835730} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 835011769} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1030835732 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030835730} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1030835733 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1030835730} + m_CullTransparentMesh: 0 +--- !u!1 &1036277751 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1036277752} + - component: {fileID: 1036277754} + - component: {fileID: 1036277753} + m_Layer: 5 + m_Name: LogoBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1036277752 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036277751} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1997030866} + - {fileID: 1302266678} + m_Father: {fileID: 1582376651} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 165} + m_SizeDelta: {x: 640, y: 140} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1036277753 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036277751} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1036277754 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1036277751} + m_CullTransparentMesh: 0 +--- !u!1 &1040014742 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1040014743} + - component: {fileID: 1040014745} + - component: {fileID: 1040014744} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1040014743 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040014742} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1892980643} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1040014744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040014742} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: 'heart + + beats' +--- !u!222 &1040014745 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1040014742} + m_CullTransparentMesh: 0 +--- !u!1 &1059947944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1059947945} + - component: {fileID: 1059947946} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1059947945 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1059947944} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1695343428} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1059947946 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1059947944} + m_CullTransparentMesh: 0 +--- !u!224 &1061685954 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 67230897} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1061685957 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4047011439214917865, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 67230897} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1062054869 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1062054870} + - component: {fileID: 1062054872} + - component: {fileID: 1062054871} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1062054870 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062054869} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 503943323} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1062054871 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062054869} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1062054872 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1062054869} + m_CullTransparentMesh: 0 +--- !u!1 &1063334116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1063334117} + - component: {fileID: 1063334119} + - component: {fileID: 1063334118} + m_Layer: 5 + m_Name: LogoNice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1063334117 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1063334116} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2143762286} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1063334118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1063334116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98039216, g: 0.13725491, b: 0.7176471, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4c8fd0c851c8cbc4bb6dc9453b9ae786, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1063334119 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1063334116} + m_CullTransparentMesh: 0 +--- !u!1 &1064469136 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1064469137} + - component: {fileID: 1064469139} + - component: {fileID: 1064469138} + m_Layer: 5 + m_Name: PaginationContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1064469137 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064469136} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 398838207} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 115} + m_SizeDelta: {x: 0, y: -270} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1064469138 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064469136} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7719238c9686c2645a6b5a89cba3de35, type: 3} + m_Name: + m_EditorClassIdentifier: + PaginationDotPrefab: {fileID: 7753230961564595917, guid: 844721accbc9f5744adc1f72590ea4f5, + type: 3} + ActiveColor: {r: 0, g: 0, b: 0, a: 0} + InactiveColor: {r: 0, g: 0, b: 0, a: 0} +--- !u!114 &1064469139 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1064469136} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &1066750211 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1066750212} + - component: {fileID: 1066750214} + - component: {fileID: 1066750213} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1066750212 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066750211} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1275136506} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -45} + m_SizeDelta: {x: 980, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1066750213 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066750211} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Car +--- !u!222 &1066750214 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066750211} + m_CullTransparentMesh: 0 +--- !u!1 &1072611237 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1072611238} + - component: {fileID: 1072611240} + - component: {fileID: 1072611239} + m_Layer: 5 + m_Name: PaginationContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1072611238 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072611237} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 32451694} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 115} + m_SizeDelta: {x: 0, y: -270} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1072611239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072611237} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7719238c9686c2645a6b5a89cba3de35, type: 3} + m_Name: + m_EditorClassIdentifier: + PaginationDotPrefab: {fileID: 7753230961564595917, guid: 844721accbc9f5744adc1f72590ea4f5, + type: 3} + ActiveColor: {r: 0, g: 0, b: 0, a: 0} + InactiveColor: {r: 0, g: 0, b: 0, a: 0} +--- !u!114 &1072611240 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072611237} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &1072779073 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1072779074} + - component: {fileID: 1072779077} + - component: {fileID: 1072779076} + - component: {fileID: 1072779075} + - component: {fileID: 1072779078} + m_Layer: 5 + m_Name: PowerBarItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1072779074 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072779073} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 555838215} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 156.7, y: 40} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1072779075 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072779073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1072779076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072779073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98823535, g: 0.7843138, b: 0.34117648, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1072779077 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072779073} + m_CullTransparentMesh: 0 +--- !u!114 &1072779078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1072779073} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b00d7a1bf2998ce459a1952941fc251e, type: 3} + m_Name: + m_EditorClassIdentifier: + BumpDuration: 0.15 + NormalColor: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + InactiveColor: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.016492 + outSlope: 4.016492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.06260913 + - serializedVersion: 3 + time: 0.25394255 + value: 0.9271569 + inSlope: 0.96574783 + outSlope: 0.96574783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -3.866068 + outSlope: -3.866068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.028384654 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1073815006 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1073815007} + - component: {fileID: 1073815009} + - component: {fileID: 1073815008} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1073815007 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073815006} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 811431853} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1073815008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073815006} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.6392157, b: 0.9254902, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1073815009 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1073815006} + m_CullTransparentMesh: 0 +--- !u!1 &1080952065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1080952066} + - component: {fileID: 1080952068} + - component: {fileID: 1080952067} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1080952066 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080952065} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 931971084} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -95} + m_SizeDelta: {x: 980, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1080952067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080952065} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1080952068 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1080952065} + m_CullTransparentMesh: 0 +--- !u!1 &1085244082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1085244083} + - component: {fileID: 1085244087} + - component: {fileID: 1085244086} + - component: {fileID: 1085244085} + - component: {fileID: 1085244084} + m_Layer: 5 + m_Name: HapticSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1085244083 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085244082} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 151584005} + - {fileID: 1326396983} + - {fileID: 904938581} + - {fileID: 676642896} + - {fileID: 949621499} + - {fileID: 294970746} + m_Father: {fileID: 1591721758} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -210, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1085244084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085244082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1085244084} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 904938582} + InitialState: 1 + OffPosition: {fileID: 949621499} + OnPosition: {fileID: 294970746} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 676642895} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 676642895} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &1085244085 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085244082} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1085244086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085244082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1085244087 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085244082} + m_CullTransparentMesh: 0 +--- !u!1 &1086067259 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1086067260} + - component: {fileID: 1086067262} + - component: {fileID: 1086067261} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1086067260 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1086067259} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 862014021} + - {fileID: 229223115} + - {fileID: 1696317759} + - {fileID: 562691324} + - {fileID: 1227965697} + m_Father: {fileID: 1218190712} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1086067261 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1086067259} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1086067262 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1086067259} + m_CullTransparentMesh: 0 +--- !u!1 &1093665926 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1093665927} + - component: {fileID: 1093665929} + - component: {fileID: 1093665928} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1093665927 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093665926} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 675956756} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1093665928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093665926} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1093665929 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093665926} + m_CullTransparentMesh: 0 +--- !u!1 &1093931038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1093931039} + - component: {fileID: 1093931041} + - component: {fileID: 1093931040} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1093931039 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093931038} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 166775920} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1093931040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093931038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98039216, g: 0.13725491, b: 0.7176471, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SOUND +--- !u!222 &1093931041 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093931038} + m_CullTransparentMesh: 0 +--- !u!1 &1095553368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1095553369} + - component: {fileID: 1095553371} + - component: {fileID: 1095553370} + m_Layer: 5 + m_Name: BoxSliders + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1095553369 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095553368} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1485185414} + - {fileID: 697453462} + - {fileID: 1323861495} + m_Father: {fileID: 2042766148} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: -20} + m_SizeDelta: {x: -360, y: -287} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1095553370 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095553368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1095553371 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095553368} + m_CullTransparentMesh: 0 +--- !u!1 &1100468341 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1100468342} + - component: {fileID: 1100468344} + - component: {fileID: 1100468343} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1100468342 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100468341} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 229223115} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1100468343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100468341} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.58431375, g: 0.58431375, b: 0.58431375, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HAPTIC +--- !u!222 &1100468344 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1100468341} + m_CullTransparentMesh: 0 +--- !u!1 &1102439988 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1102439989} + - component: {fileID: 1102439991} + - component: {fileID: 1102439990} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1102439989 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102439988} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1426902635} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1102439990 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102439988} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1102439991 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102439988} + m_CullTransparentMesh: 0 +--- !u!1 &1108381815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1108381816} + - component: {fileID: 1108381818} + - component: {fileID: 1108381817} + - component: {fileID: 1108381819} + - component: {fileID: 1108381820} + - component: {fileID: 1108381821} + m_Layer: 0 + m_Name: BallPusher + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1108381816 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108381815} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9998447, y: 0.9998447, z: 0.9998447} + m_Children: [] + m_Father: {fileID: 925354622} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -159.97514, y: 71.77539} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1108381817 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108381815} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.4745098} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f7876974a1b60ed4ca3dfd37f229386f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1108381818 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108381815} + m_CullTransparentMesh: 0 +--- !u!58 &1108381819 +CircleCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108381815} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Radius: 64 +--- !u!114 &1108381820 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108381815} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf5e4b668334cb04282cd8a30200b42c, type: 3} + m_Name: + m_EditorClassIdentifier: + Force: 3500 + TargetBall: {fileID: 1520672073} +--- !u!50 &1108381821 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1108381815} + m_BodyType: 1 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!224 &1117582783 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 959923089} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1117582786 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 4047011439214917865, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 959923089} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1121054499 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 1615336128765944, guid: eafa04180ee294a89b396826af7cba20, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1945195674} + - component: {fileID: 1121054502} + - component: {fileID: 1121054501} + - component: {fileID: 1121054500} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1121054500 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 114777867052708246, guid: eafa04180ee294a89b396826af7cba20, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121054499} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1121054501 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 114750459055867066, guid: eafa04180ee294a89b396826af7cba20, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121054499} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1080, y: 1920} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &1121054502 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 223039087946556138, guid: eafa04180ee294a89b396826af7cba20, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121054499} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 1702885562} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1001 &1128505397 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2078920253} + m_Modifications: + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -41 + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953752, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Text + value: AMPLITUDE + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953753, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 42.660156 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245064, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Name + value: VerticalSliderComponentAmplitude + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -70 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 20.00051 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Value + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_MaxValue + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1618306578} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdateEmphasisAmplitude + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781399, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -70.00003 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d76991629602e0d4481b47f5707daafe, type: 3} +--- !u!1 &1141110836 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1141110837} + - component: {fileID: 1141110838} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1141110837 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1141110836} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1867979234} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1141110838 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1141110836} + m_CullTransparentMesh: 0 +--- !u!1 &1143208099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1143208100} + - component: {fileID: 1143208102} + - component: {fileID: 1143208101} + m_Layer: 5 + m_Name: IntroText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1143208100 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143208099} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 751070462} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -120} + m_SizeDelta: {x: 980, y: 208.78} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1143208101 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143208099} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Close your eyes, and trigger one of the haptic clips below. ' +--- !u!222 &1143208102 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1143208099} + m_CullTransparentMesh: 0 +--- !u!1 &1148762696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1148762697} + - component: {fileID: 1148762699} + - component: {fileID: 1148762698} + m_Layer: 5 + m_Name: BoxBars (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1148762697 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148762696} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1287155424} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -401, y: 52} + m_SizeDelta: {x: 100, y: -513.82996} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1148762698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148762696} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1148762699 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1148762696} + m_CullTransparentMesh: 0 +--- !u!1 &1153131956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1153131957} + - component: {fileID: 1153131958} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1153131957 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153131956} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 229223115} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1153131958 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1153131956} + m_CullTransparentMesh: 0 +--- !u!1 &1158466325 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1158466329} + - component: {fileID: 1158466328} + - component: {fileID: 1158466327} + - component: {fileID: 1158466326} + m_Layer: 5 + m_Name: LogoVibrations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1158466326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158466325} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 109aed369f1d8af47948f3f6aafbdbdc, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 8 + Frequency: 25 + Shaking: 0 +--- !u!114 &1158466327 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158466325} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ef74e6b52dfbf9a4cba77e1fde4584d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1158466328 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158466325} + m_CullTransparentMesh: 0 +--- !u!224 &1158466329 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158466325} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2143762286} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1160457132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1160457133} + - component: {fileID: 1160457135} + - component: {fileID: 1160457134} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1160457133 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1160457132} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 229223115} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1160457134 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1160457132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1160457135 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1160457132} + m_CullTransparentMesh: 0 +--- !u!1 &1179953098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1179953099} + - component: {fileID: 1179953101} + - component: {fileID: 1179953100} + - component: {fileID: 1179953102} + m_Layer: 5 + m_Name: LogoVibrations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1179953099 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179953098} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 501412879} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1179953100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179953098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ef74e6b52dfbf9a4cba77e1fde4584d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1179953101 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179953098} + m_CullTransparentMesh: 0 +--- !u!114 &1179953102 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1179953098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 109aed369f1d8af47948f3f6aafbdbdc, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 8 + Frequency: 25 + Shaking: 0 +--- !u!1 &1181520132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1181520133} + - component: {fileID: 1181520135} + - component: {fileID: 1181520134} + m_Layer: 5 + m_Name: LogoNice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1181520133 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1181520132} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 501412879} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1181520134 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1181520132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4c8fd0c851c8cbc4bb6dc9453b9ae786, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1181520135 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1181520132} + m_CullTransparentMesh: 0 +--- !u!1 &1183418717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1183418719} + - component: {fileID: 1183418718} + m_Layer: 0 + m_Name: NiceVibrationsDemoManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1183418718 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1183418717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 10365fb504697425a880c74cc63902ec, type: 3} + m_Name: + m_EditorClassIdentifier: + Pages: + - {fileID: 1770833512} + - {fileID: 811431853} + - {fileID: 1218190712} + - {fileID: 278291183} + - {fileID: 1426902635} + - {fileID: 1618306577} + - {fileID: 3784026663338523929} + CurrentPage: 0 + PageTransitionDuration: 0.25 + TransitionCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: -4.2447743 + outSlope: -4.2447743 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.31209528 + - serializedVersion: 3 + time: 0.09605207 + value: -0.14803259 + inSlope: 0.5209564 + outSlope: 0.5209564 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.9073835 + value: 1.0976654 + inSlope: 0.0064312853 + outSlope: 0.0064312853 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.07181855 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -4.767018 + outSlope: -4.767018 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.3992932 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ActiveColor: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + InactiveColor: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + SoundActive: 1 +--- !u!4 &1183418719 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1183418717} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 24.63976, y: -20.945827, z: 87.65837} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1185736740 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1185736741} + - component: {fileID: 1185736742} + m_Layer: 5 + m_Name: CarEngine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1185736741 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185736740} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 54476678} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1185736742 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1185736740} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 26f9f894c832e234e91a99e33cda5548, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 1 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1202580636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1202580637} + - component: {fileID: 1202580639} + - component: {fileID: 1202580638} + m_Layer: 5 + m_Name: HitParticles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1202580637 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202580636} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1520672068} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!199 &1202580638 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202580636} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a8a95ed47c80ace44ac20124ba5fabaa, type: 2} + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 50 + m_RenderMode: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_VertexStreams: 00010304 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!198 &1202580639 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1202580636} + serializedVersion: 6 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + looping: 0 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 1 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.15 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 0.7843138, b: 0.2901961, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 20 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 4 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 180, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 0.0001 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 1 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 30 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + SizeModule: + enabled: 1 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 1 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.7843138, b: 0.2901961, a: 1} + key1: {r: 1, g: 0.7843138, b: 0.2901961, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 42791 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!1 &1204694476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1204694477} + - component: {fileID: 1204694482} + - component: {fileID: 1204694481} + - component: {fileID: 1204694480} + - component: {fileID: 1204694479} + - component: {fileID: 1204694478} + m_Layer: 4 + m_Name: Wall1 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1204694477 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204694476} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 925354622} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 50, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1204694478 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204694476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4615302ba7af13645aec1ad743d65dcf, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!50 &1204694479 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204694476} + m_BodyType: 1 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 1 + m_SleepingMode: 0 + m_CollisionDetection: 1 + m_Constraints: 0 +--- !u!61 &1204694480 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204694476} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 20, y: 1000} + m_EdgeRadius: 0 +--- !u!114 &1204694481 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204694476} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1204694482 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1204694476} + m_CullTransparentMesh: 0 +--- !u!1 &1209706725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1209706726} + - component: {fileID: 1209706729} + - component: {fileID: 1209706728} + - component: {fileID: 1209706727} + - component: {fileID: 1209706730} + m_Layer: 5 + m_Name: PowerBarItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1209706726 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209706725} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 555838215} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 156.7, y: 40} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1209706727 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209706725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1209706728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209706725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98823535, g: 0.7843138, b: 0.34117648, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1209706729 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209706725} + m_CullTransparentMesh: 0 +--- !u!114 &1209706730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1209706725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b00d7a1bf2998ce459a1952941fc251e, type: 3} + m_Name: + m_EditorClassIdentifier: + BumpDuration: 0.15 + NormalColor: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + InactiveColor: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.016492 + outSlope: 4.016492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.06260913 + - serializedVersion: 3 + time: 0.25394255 + value: 0.9271569 + inSlope: 0.96574783 + outSlope: 0.96574783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -3.866068 + outSlope: -3.866068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.028384654 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1210291998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1210291999} + - component: {fileID: 1210292001} + - component: {fileID: 1210292000} + m_Layer: 5 + m_Name: DotsBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1210291999 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1210291998} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99989974, y: 0.99989974, z: 0.99989974} + m_Children: [] + m_Father: {fileID: 48147700} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -115.9} + m_SizeDelta: {x: 1024, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1210292000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1210291998} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 201a3f0fd44444e4da86b3ded7f4448f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1210292001 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1210291998} + m_CullTransparentMesh: 0 +--- !u!1 &1214594678 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1214594679} + - component: {fileID: 1214594681} + - component: {fileID: 1214594680} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1214594679 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214594678} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1254437066} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -45} + m_SizeDelta: {x: 980, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1214594680 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214594678} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Continuous haptics +--- !u!222 &1214594681 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1214594678} + m_CullTransparentMesh: 0 +--- !u!1 &1218190711 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1218190712} + - component: {fileID: 1218190714} + - component: {fileID: 1218190713} + m_Layer: 5 + m_Name: HapticClips + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1218190712 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218190711} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1942249759} + - {fileID: 48147700} + - {fileID: 1086067260} + - {fileID: 751070462} + - {fileID: 1971069322} + - {fileID: 889778644} + m_Father: {fileID: 1945195674} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 2741.0002, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1218190713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218190711} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b6111dd3a595e4b8b9fb6c7545fc3aa2, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugAudioEmphasis: {fileID: 0} + DebugAudioContinuous: {fileID: 0} + Logo: {fileID: 1715691094} + IconImage: {fileID: 2013399565} + IconImageAnimator: {fileID: 2013399567} + DemoItems: + - Name: Idle + HapticClip: {fileID: 0} + AssociatedSprite: {fileID: -312768529563260625, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 0} + - Name: Dice + HapticClip: {fileID: -8404250095460277587, guid: 6ba7f34892e4048be87810ea8621b3df, + type: 3} + AssociatedSprite: {fileID: 4279260276780606416, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 618200107} + - Name: Drums + HapticClip: {fileID: -8404250095460277587, guid: 21b5c105f373e476c93ac1a61c2a671f, + type: 3} + AssociatedSprite: {fileID: -8308906585651362545, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 1998855356} + - Name: Game Over + HapticClip: {fileID: -8404250095460277587, guid: 4c1fed00d51304ffbbcd07464f90b37d, + type: 3} + AssociatedSprite: {fileID: 2657873270443967794, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 626027128} + - Name: Heart Beats + HapticClip: {fileID: -8404250095460277587, guid: bc8515b2736d340359b4c718c4f565ed, + type: 3} + AssociatedSprite: {fileID: 6684065222803499413, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 867580614} + - Name: Laser + HapticClip: {fileID: -8404250095460277587, guid: db702dc4cff314785bbc5a16becaaeb1, + type: 3} + AssociatedSprite: {fileID: -3820048696943746370, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 1750563997} + - Name: Power Off + HapticClip: {fileID: -8404250095460277587, guid: 5a367fd990b07468bb3bd4c42368b7fa, + type: 3} + AssociatedSprite: {fileID: -7933564687622153330, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 902437697} + - Name: Reload + HapticClip: {fileID: -8404250095460277587, guid: 9c40e0330eb2346cb90e006681c4feb0, + type: 3} + AssociatedSprite: {fileID: -8918885832014658072, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 1641781886} + - Name: Teleport + HapticClip: {fileID: -8404250095460277587, guid: a90fad83145944657936507a7a1c4ff6, + type: 3} + AssociatedSprite: {fileID: -2389462326047053563, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 386455302} + - Name: Vibraphone + HapticClip: {fileID: -8404250095460277587, guid: a5cce830c10d94e848fc3ddac976fbf2, + type: 3} + AssociatedSprite: {fileID: -6415259062133742075, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + AssociatedSound: {fileID: 227701378} +--- !u!222 &1218190714 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218190711} + m_CullTransparentMesh: 0 +--- !u!1 &1227965696 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1227965697} + - component: {fileID: 1227965699} + - component: {fileID: 1227965698} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1227965697 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227965696} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1086067260} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1227965698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227965696} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1227965699 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1227965696} + m_CullTransparentMesh: 0 +--- !u!1 &1230727629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1230727630} + - component: {fileID: 1230727632} + - component: {fileID: 1230727631} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1230727630 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230727629} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 1013622212} + - {fileID: 1569422406} + - {fileID: 1695343428} + - {fileID: 542956925} + - {fileID: 953001070} + m_Father: {fileID: 811431853} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1230727631 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230727629} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1230727632 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1230727629} + m_CullTransparentMesh: 0 +--- !u!1 &1235701079 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1235701080} + - component: {fileID: 1235701082} + - component: {fileID: 1235701081} + m_Layer: 5 + m_Name: IntroText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1235701080 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235701079} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1254437066} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -120} + m_SizeDelta: {x: 980, y: 208.78} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1235701081 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235701079} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Focus on your breath. Press the button below. Then move the sliders. +--- !u!222 &1235701082 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1235701079} + m_CullTransparentMesh: 0 +--- !u!1 &1247615749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1247615750} + - component: {fileID: 1247615752} + - component: {fileID: 1247615751} + m_Layer: 5 + m_Name: Frequency + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1247615750 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247615749} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 662369938} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -34.15985, y: -34.89986} + m_SizeDelta: {x: 163.76, y: 25.94} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1247615751 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247615749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Frequency +--- !u!222 &1247615752 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1247615749} + m_CullTransparentMesh: 0 +--- !u!1 &1254437065 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1254437066} + - component: {fileID: 1254437068} + - component: {fileID: 1254437067} + m_Layer: 5 + m_Name: Intro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1254437066 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1254437065} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 1214594679} + - {fileID: 716833500} + - {fileID: 1895463025} + - {fileID: 1235701080} + m_Father: {fileID: 278291183} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -330} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1254437067 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1254437065} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1254437068 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1254437065} + m_CullTransparentMesh: 0 +--- !u!1 &1255364405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1255364406} + - component: {fileID: 1255364408} + - component: {fileID: 1255364407} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1255364406 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255364405} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 921095976} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1255364407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255364405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SOUND +--- !u!222 &1255364408 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1255364405} + m_CullTransparentMesh: 0 +--- !u!1 &1257290969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1257290970} + - component: {fileID: 1257290971} + m_Layer: 5 + m_Name: DebugContinuous + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1257290970 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257290969} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 248171879} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1257290971 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1257290969} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: c0ab2419d02d5f54690ac6db3a5188cb, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 1 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1275136505 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1275136506} + - component: {fileID: 1275136508} + - component: {fileID: 1275136507} + m_Layer: 5 + m_Name: Intro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1275136506 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275136505} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 1066750212} + - {fileID: 682974579} + - {fileID: 768422174} + - {fileID: 1910005842} + m_Father: {fileID: 1426902635} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -330} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1275136507 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275136505} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1275136508 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275136505} + m_CullTransparentMesh: 0 +--- !u!1 &1276898985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1276898986} + - component: {fileID: 1276898989} + - component: {fileID: 1276898988} + - component: {fileID: 1276898987} + m_Layer: 5 + m_Name: ProgressBarBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1276898986 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276898985} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 350598677} + m_Father: {fileID: 2048791469} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.000027585038, y: 0.000091552734} + m_SizeDelta: {x: 30, y: 900} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1276898987 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276898985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 1 +--- !u!114 &1276898988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276898985} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.09803922, g: 0.09803922, b: 0.09803922, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1276898989 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1276898985} + m_CullTransparentMesh: 0 +--- !u!1 &1287155423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1287155424} + - component: {fileID: 1287155426} + - component: {fileID: 1287155425} + m_Layer: 5 + m_Name: ContentsBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1287155424 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287155423} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.000066, y: 1.000066, z: 1.000066} + m_Children: + - {fileID: 1570897236} + - {fileID: 1148762697} + - {fileID: 2059556308} + - {fileID: 281814000} + - {fileID: 975894758} + - {fileID: 1889145180} + m_Father: {fileID: 1790290188} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: -100, y: -53} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1287155425 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287155423} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1287155426 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1287155423} + m_CullTransparentMesh: 0 +--- !u!114 &1291795453 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + m_PrefabInstance: {fileID: 2002233662} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1293313002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1293313003} + - component: {fileID: 1293313005} + - component: {fileID: 1293313004} + m_Layer: 5 + m_Name: 3Dots (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1293313003 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293313002} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1826175958} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 289.1} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1293313004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293313002} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1293313005 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1293313002} + m_CullTransparentMesh: 0 +--- !u!1 &1298436831 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1298436832} + - component: {fileID: 1298436833} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1298436832 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1298436831} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1867979234} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1298436833 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1298436831} + m_CullTransparentMesh: 0 +--- !u!1 &1302266674 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1302266678} + - component: {fileID: 1302266677} + - component: {fileID: 1302266676} + - component: {fileID: 1302266675} + m_Layer: 5 + m_Name: LogoVibrations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1302266675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1302266674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 109aed369f1d8af47948f3f6aafbdbdc, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 8 + Frequency: 25 + Shaking: 0 +--- !u!114 &1302266676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1302266674} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ef74e6b52dfbf9a4cba77e1fde4584d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1302266677 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1302266674} + m_CullTransparentMesh: 0 +--- !u!224 &1302266678 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1302266674} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1036277752} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1303230461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1303230462} + - component: {fileID: 1303230464} + - component: {fileID: 1303230463} + m_Layer: 5 + m_Name: HitPusherParticles (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1303230462 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1303230461} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 859223583} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!199 &1303230463 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1303230461} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10306, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 50 + m_RenderMode: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_VertexStreams: 00010304 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MaskInteraction: 0 +--- !u!198 &1303230464 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1303230461} + serializedVersion: 6 + lengthInSec: 5 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + looping: 0 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + useRigidbodyForVelocity: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 1 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.15 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 100 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 0.7843138, b: 0.2901961, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.5 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 0 + maxNumParticles: 1000 + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 10 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 0 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 1 + randomPositionAmount: 0 + radius: + value: 1 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 3 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 1 + m_Bursts: + - serializedVersion: 2 + time: 0 + countCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 20 + minScalar: 30 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + cycleCount: 1 + repeatInterval: 0.01 + probability: 1 + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 0.7843138, b: 0.2901961, a: 1} + key1: {r: 1, g: 0.7843138, b: 0.2901961, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 42791 + atime2: 65535 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 3 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 3 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + plane0: {fileID: 0} + plane1: {fileID: 0} + plane2: {fileID: 0} + plane3: {fileID: 0} + plane4: {fileID: 0} + plane5: {fileID: 0} + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + collisionShape0: {fileID: 0} + collisionShape1: {fileID: 0} + collisionShape2: {fileID: 0} + collisionShape3: {fileID: 0} + collisionShape4: {fileID: 0} + collisionShape5: {fileID: 0} + inside: 1 + outside: 0 + enter: 0 + exit: 0 + radiusScale: 1 + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!1 &1307553162 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1307553163} + - component: {fileID: 1307553165} + - component: {fileID: 1307553164} + m_Layer: 5 + m_Name: 3Dots (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1307553163 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307553162} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1673368856} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 289.1} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1307553164 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307553162} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1307553165 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1307553162} + m_CullTransparentMesh: 0 +--- !u!1 &1308633020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1308633021} + - component: {fileID: 1308633023} + - component: {fileID: 1308633022} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1308633021 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308633020} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1696317759} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1308633022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308633020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.58431375, g: 0.58431375, b: 0.58431375, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1308633023 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1308633020} + m_CullTransparentMesh: 0 +--- !u!1 &1319097520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1319097521} + - component: {fileID: 1319097525} + - component: {fileID: 1319097524} + - component: {fileID: 1319097523} + - component: {fileID: 1319097522} + m_Layer: 5 + m_Name: NextButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1319097521 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319097520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 1688063166} + - {fileID: 457962653} + m_Father: {fileID: 675956756} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 1, y: 0} +--- !u!114 &1319097522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319097520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: NextPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0, g: 0.35360706, b: 0.509434, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1319097523 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319097520} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1319097524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319097520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.4627451, b: 0.6666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1319097525 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319097520} + m_CullTransparentMesh: 0 +--- !u!1 &1319866239 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1319866240} + - component: {fileID: 1319866241} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1319866240 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319866239} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1569422406} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1319866241 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319866239} + m_CullTransparentMesh: 0 +--- !u!224 &1323861495 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + m_PrefabInstance: {fileID: 2002233662} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1326396982 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1326396983} + - component: {fileID: 1326396985} + - component: {fileID: 1326396984} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1326396983 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1326396982} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1085244083} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1326396984 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1326396982} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1326396985 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1326396982} + m_CullTransparentMesh: 0 +--- !u!1 &1330638648 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1330638649} + - component: {fileID: 1330638651} + - component: {fileID: 1330638650} + m_Layer: 5 + m_Name: BoxDataAmplitude + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1330638649 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1330638648} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1567683430} + - {fileID: 473460508} + m_Father: {fileID: 408532249} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -280, y: 130} + m_SizeDelta: {x: 260, y: 90} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1330638650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1330638648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1330638651 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1330638648} + m_CullTransparentMesh: 0 +--- !u!1 &1332895083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1332895084} + - component: {fileID: 1332895087} + - component: {fileID: 1332895086} + - component: {fileID: 1332895085} + m_Layer: 5 + m_Name: Rotator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1332895084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332895083} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.5} + m_Children: [] + m_Father: {fileID: 751070462} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -106, y: 103.15895} + m_SizeDelta: {x: 256, y: 256} + m_Pivot: {x: 0.5, y: 0.4325} +--- !u!114 &1332895085 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332895083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c3c35d88c395442feb748be3dd08fbf9, type: 3} + m_Name: + m_EditorClassIdentifier: + RotationSpeed: {x: 0, y: 0, z: -200} +--- !u!114 &1332895086 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332895083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -8308906585651362545, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1332895087 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1332895083} + m_CullTransparentMesh: 0 +--- !u!1 &1338854197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1338854198} + - component: {fileID: 1338854200} + - component: {fileID: 1338854199} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1338854198 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338854197} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1867979234} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1338854199 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338854197} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HAPTIC +--- !u!222 &1338854200 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1338854197} + m_CullTransparentMesh: 0 +--- !u!1 &1339656255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1339656256} + - component: {fileID: 1339656258} + - component: {fileID: 1339656257} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1339656256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1339656255} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 81114886} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1339656257 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1339656255} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Car +--- !u!222 &1339656258 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1339656255} + m_CullTransparentMesh: 0 +--- !u!1 &1361262895 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1361262898} + - component: {fileID: 1361262897} + - component: {fileID: 1361262896} + m_Layer: 5 + m_Name: DurationValue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1361262896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1361262895} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: 0.85 +--- !u!222 &1361262897 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1361262895} + m_CullTransparentMesh: 0 +--- !u!224 &1361262898 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1361262895} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1598451434} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -100} + m_SizeDelta: {x: 163.76001, y: 25.94} + m_Pivot: {x: 1, y: 1} +--- !u!224 &1362271955 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + m_PrefabInstance: {fileID: 1128505397} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1362985083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1362985084} + - component: {fileID: 1362985086} + - component: {fileID: 1362985085} + m_Layer: 5 + m_Name: LogoNice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1362985084 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362985083} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 119922976} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1362985085 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362985083} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4c8fd0c851c8cbc4bb6dc9453b9ae786, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1362985086 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1362985083} + m_CullTransparentMesh: 0 +--- !u!1 &1370240816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1370240817} + - component: {fileID: 1370240821} + - component: {fileID: 1370240820} + - component: {fileID: 1370240819} + - component: {fileID: 1370240818} + - component: {fileID: 1370240822} + m_Layer: 5 + m_Name: SoundSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1370240817 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370240816} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 204088786} + - {fileID: 1629582962} + - {fileID: 2031484474} + - {fileID: 864551883} + - {fileID: 683257261} + - {fileID: 293685074} + m_Father: {fileID: 1591721758} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1370240818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370240816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1370240818} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 2031484475} + InitialState: 0 + OffPosition: {fileID: 683257261} + OnPosition: {fileID: 293685074} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1618306578} + m_MethodName: SetDebugAudio + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1618306578} + m_MethodName: SetDebugAudio + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &1370240819 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370240816} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1370240820 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370240816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1370240821 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370240816} + m_CullTransparentMesh: 0 +--- !u!114 &1370240822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1370240816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e91a9c36e72456e4db171843272d8a2b, type: 3} + m_Name: + m_EditorClassIdentifier: + DemoManager: {fileID: 1183418718} +--- !u!1 &1374116402 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1374116403} + - component: {fileID: 1374116405} + - component: {fileID: 1374116404} + m_Layer: 5 + m_Name: Duration + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1374116403 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1374116402} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1598451434} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -34.15985, y: -100} + m_SizeDelta: {x: 163.76, y: 25.94} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1374116404 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1374116402} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Duration +--- !u!222 &1374116405 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1374116402} + m_CullTransparentMesh: 0 +--- !u!1 &1377323420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1377323421} + - component: {fileID: 1377323422} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1377323421 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377323420} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 274492978} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1377323422 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1377323420} + m_CullTransparentMesh: 0 +--- !u!1 &1378714865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1378714866} + - component: {fileID: 1378714868} + - component: {fileID: 1378714867} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1378714866 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1378714865} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 723031663} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1378714867 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1378714865} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: 'POWER + + oFF' +--- !u!222 &1378714868 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1378714865} + m_CullTransparentMesh: 0 +--- !u!1 &1387265547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1387265548} + - component: {fileID: 1387265550} + - component: {fileID: 1387265549} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1387265548 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1387265547} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1695343428} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1387265549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1387265547} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0.6392157, b: 0.9254902, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SOUND +--- !u!222 &1387265550 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1387265547} + m_CullTransparentMesh: 0 +--- !u!1 &1394016755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1394016756} + - component: {fileID: 1394016758} + - component: {fileID: 1394016757} + m_Layer: 5 + m_Name: Contents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1394016756 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394016755} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 55131106} + m_Father: {fileID: 1618306577} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -616.5} + m_SizeDelta: {x: 0, y: -966.57} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1394016757 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394016755} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1394016758 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394016755} + m_CullTransparentMesh: 0 +--- !u!1 &1401663793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1401663794} + - component: {fileID: 1401663796} + - component: {fileID: 1401663795} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1401663794 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401663793} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1826175958} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1401663795 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401663793} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1401663796 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1401663793} + m_CullTransparentMesh: 0 +--- !u!1 &1403220313 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1403220314} + - component: {fileID: 1403220318} + - component: {fileID: 1403220317} + - component: {fileID: 1403220316} + - component: {fileID: 1403220315} + m_Layer: 5 + m_Name: Button8 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1403220314 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403220313} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 1745405111} + m_Father: {fileID: 181786192} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 466.2, y: 93.2} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1403220315 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403220313} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 8 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1403220316 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403220313} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1403220317 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403220313} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1403220318 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1403220313} + m_CullTransparentMesh: 0 +--- !u!1 &1414928047 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1414928048} + m_Layer: 5 + m_Name: DebugSounds + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1414928048 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1414928047} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1017881752} + - {fileID: 618306284} + m_Father: {fileID: 278291183} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1418320186 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1418320187} + - component: {fileID: 1418320189} + - component: {fileID: 1418320188} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1418320187 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418320186} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 166775920} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1418320188 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418320186} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98039216, g: 0.13725491, b: 0.7176471, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1418320189 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418320186} + m_CullTransparentMesh: 0 +--- !u!1 &1426902634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1426902635} + - component: {fileID: 1426902637} + - component: {fileID: 1426902636} + m_Layer: 5 + m_Name: Car + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1426902635 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426902634} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1102439989} + - {fileID: 32451694} + - {fileID: 1582376651} + - {fileID: 1275136506} + - {fileID: 1790290188} + - {fileID: 54476678} + m_Father: {fileID: 1945195674} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5097, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1426902636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426902634} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 35a26d6ebcf6d9c488dfd296cf2219f9, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugAudioEmphasis: {fileID: 1950497655} + DebugAudioContinuous: {fileID: 1962378946} + Logo: {fileID: 1302266675} + Knob: {fileID: 1836492026} + MinimumKnobValue: 0.1 + MaximumPowerDuration: 10 + ChargingSpeed: 2 + CarSpeed: 0 + Power: 0 + StartClickDuration: 0.2 + DentDuration: 0.1 + Dents: + - 0.16 + - 0.33 + - 0.49 + - 0.66 + - 0.82 + - 1 + CarEngineAudioSource: {fileID: 1185736742} + LeftWheel: {fileID: 765786694} + RightWheel: {fileID: 890094766} + CarBody: {fileID: 442254820} + WheelRotationSpeed: {x: 0, y: 0, z: -500} + ReloadingPrompt: {fileID: 955176845} + StartClickCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 3.4722548 + outSlope: 3.4722548 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.21480823 + - serializedVersion: 3 + time: 0.18157348 + value: 0.99701566 + inSlope: 0.16912037 + outSlope: 0.16912037 + tangentMode: 0 + weightedMode: 0 + inWeight: 1 + outWeight: 0.23722972 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -2.6679962 + outSlope: -2.6679962 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.0318937 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PowerBar: {fileID: 4047011439017046464} + SpeedBars: + - {fileID: 752170948} + - {fileID: 1598537567} + - {fileID: 1072779078} + - {fileID: 1209706730} + - {fileID: 538863582} + ActiveColor: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + InactiveColor: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + _carStarted: 0 + _carStartedAt: 0 + _lastStartClickAt: 0 +--- !u!222 &1426902637 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1426902634} + m_CullTransparentMesh: 0 +--- !u!1 &1428283319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1428283320} + - component: {fileID: 1428283322} + - component: {fileID: 1428283321} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1428283320 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1428283319} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 906390111} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -45} + m_SizeDelta: {x: 980, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1428283321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1428283319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: WOBBLE +--- !u!222 &1428283322 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1428283319} + m_CullTransparentMesh: 0 +--- !u!1 &1431043783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1431043784} + - component: {fileID: 1431043786} + - component: {fileID: 1431043785} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1431043784 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431043783} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 2143762286} + - {fileID: 2117913896} + - {fileID: 166775920} + - {fileID: 1534563711} + - {fileID: 1968047346} + m_Father: {fileID: 1770833512} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1431043785 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431043783} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1431043786 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1431043783} + m_CullTransparentMesh: 0 +--- !u!1 &1437982777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1437982778} + - component: {fileID: 1437982779} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1437982778 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437982777} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2117913896} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1437982779 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1437982777} + m_CullTransparentMesh: 0 +--- !u!1 &1443861925 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1443861926} + - component: {fileID: 1443861928} + - component: {fileID: 1443861927} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1443861926 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443861925} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 274492978} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1443861927 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443861925} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1443861928 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1443861925} + m_CullTransparentMesh: 0 +--- !u!1 &1445158632 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1445158633} + - component: {fileID: 1445158637} + - component: {fileID: 1445158636} + - component: {fileID: 1445158635} + - component: {fileID: 1445158634} + m_Layer: 5 + m_Name: Button1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1445158633 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445158632} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 1833053242} + m_Father: {fileID: 181786192} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 160, y: 425} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1445158634 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445158632} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1445158635 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445158632} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1445158636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445158632} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1445158637 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1445158632} + m_CullTransparentMesh: 0 +--- !u!1 &1446197950 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1446197951} + - component: {fileID: 1446197953} + - component: {fileID: 1446197952} + m_Layer: 5 + m_Name: BoxPlay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1446197951 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446197950} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2048791469} + - {fileID: 785930643} + m_Father: {fileID: 2042766148} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: -470, y: 20} + m_SizeDelta: {x: 940, y: 227} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1446197952 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446197950} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1446197953 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1446197950} + m_CullTransparentMesh: 0 +--- !u!1 &1467786815 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1467786816} + - component: {fileID: 1467786818} + - component: {fileID: 1467786817} + m_Layer: 5 + m_Name: BoxBars + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1467786816 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467786815} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 543231511} + - {fileID: 1061685954} + m_Father: {fileID: 408532249} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 20, y: 20} + m_SizeDelta: {x: 184, y: 199.57} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1467786817 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467786815} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1467786818 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1467786815} + m_CullTransparentMesh: 0 +--- !u!1 &1478429919 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1478429920} + - component: {fileID: 1478429924} + - component: {fileID: 1478429923} + - component: {fileID: 1478429922} + - component: {fileID: 1478429921} + m_Layer: 5 + m_Name: NextButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1478429920 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478429919} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 765825975} + - {fileID: 473815869} + m_Father: {fileID: 1826175958} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 1, y: 0} +--- !u!114 &1478429921 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478429919} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: NextPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.509434, g: 0, b: 0.35042, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1478429922 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478429919} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1478429923 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478429919} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6792453, g: 0, b: 0.46757352, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1478429924 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1478429919} + m_CullTransparentMesh: 0 +--- !u!1 &1480381796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1480381797} + - component: {fileID: 1480381799} + - component: {fileID: 1480381798} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1480381797 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480381796} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 835011769} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1480381798 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480381796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1480381799 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480381796} + m_CullTransparentMesh: 0 +--- !u!224 &1485185414 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + m_PrefabInstance: {fileID: 6194878424446773133} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1488622761 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1488622762} + - component: {fileID: 1488622764} + - component: {fileID: 1488622763} + m_Layer: 5 + m_Name: BoxCurve + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1488622762 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488622761} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 472913949} + - {fileID: 407683031} + - {fileID: 468577186} + m_Father: {fileID: 819534590} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -280, y: -20} + m_SizeDelta: {x: 260, y: 197} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1488622763 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488622761} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1488622764 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1488622761} + m_CullTransparentMesh: 0 +--- !u!1 &1491293628 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1491293629} + - component: {fileID: 1491293631} + - component: {fileID: 1491293630} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1491293629 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1491293628} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 744678107} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1491293630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1491293628} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: ball +--- !u!222 &1491293631 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1491293628} + m_CullTransparentMesh: 0 +--- !u!1 &1519679712 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1519679715} + - component: {fileID: 1519679714} + - component: {fileID: 1519679713} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1519679713 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519679712} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1519679714 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519679712} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1519679715 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519679712} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1520672067 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1520672068} + - component: {fileID: 1520672072} + - component: {fileID: 1520672071} + - component: {fileID: 1520672069} + - component: {fileID: 1520672070} + - component: {fileID: 1520672073} + - component: {fileID: 1520672074} + m_Layer: 5 + m_Name: Ball + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1520672068 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520672067} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1202580637} + - {fileID: 859223583} + m_Father: {fileID: 925354622} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!50 &1520672069 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520672067} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.5 + m_GravityScale: 1 + m_Material: {fileID: 6200000, guid: 079cfd7ef2be6de43bc41a040f567695, type: 2} + m_Interpolate: 1 + m_SleepingMode: 0 + m_CollisionDetection: 1 + m_Constraints: 0 +--- !u!58 &1520672070 +CircleCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520672067} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Radius: 64 +--- !u!114 &1520672071 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520672067} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8078432, b: 0.29411766, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f7876974a1b60ed4ca3dfd37f229386f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1520672072 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520672067} + m_CullTransparentMesh: 0 +--- !u!114 &1520672073 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520672067} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59fe36bd4834fab44a9223e70f5fc73e, type: 3} + m_Name: + m_EditorClassIdentifier: + HapticsEnabled: 1 + HitParticles: {fileID: 1202580639} + HitPusherParticles: {fileID: 859223585} + WallMask: + serializedVersion: 2 + m_Bits: 16 + PusherMask: + serializedVersion: 2 + m_Bits: 1 + LogoShaker: {fileID: 300857029} + EmphasisAudioSource: {fileID: 1026918482} +--- !u!95 &1520672074 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520672067} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 46eaa67e7ffc1eb47ae5e69fa1871856, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!1 &1530101171 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1530101172} + - component: {fileID: 1530101174} + - component: {fileID: 1530101173} + m_Layer: 5 + m_Name: Contents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1530101172 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530101171} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 1708619728} + m_Father: {fileID: 1770833512} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -616.5} + m_SizeDelta: {x: 0, y: -966.57} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1530101173 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530101171} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1530101174 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1530101171} + m_CullTransparentMesh: 0 +--- !u!1 &1534563710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1534563711} + - component: {fileID: 1534563713} + - component: {fileID: 1534563712} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1534563711 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1534563710} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1431043784} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1534563712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1534563710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1534563713 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1534563710} + m_CullTransparentMesh: 0 +--- !u!1 &1534573149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1534573150} + - component: {fileID: 1534573152} + - component: {fileID: 1534573151} + m_Layer: 5 + m_Name: KnobIndicator (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1534573150 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1534573149} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 165112074} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 17, y: 0} + m_SizeDelta: {x: 8, y: 8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1534573151 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1534573149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1534573152 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1534573149} + m_CullTransparentMesh: 0 +--- !u!1 &1548988331 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1548988332} + - component: {fileID: 1548988334} + - component: {fileID: 1548988333} + m_Layer: 5 + m_Name: BoxBars + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1548988332 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548988331} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 967801413} + - {fileID: 1117582783} + - {fileID: 49240105} + m_Father: {fileID: 819534590} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -280, y: 176.00006} + m_SizeDelta: {x: 260, y: -413} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1548988333 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548988331} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1548988334 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1548988331} + m_CullTransparentMesh: 0 +--- !u!1 &1553119588 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1553119589} + - component: {fileID: 1553119591} + - component: {fileID: 1553119590} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1553119589 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553119588} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 138808058} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1553119590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553119588} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Carillon +--- !u!222 &1553119591 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553119588} + m_CullTransparentMesh: 0 +--- !u!1 &1567683429 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1567683430} + - component: {fileID: 1567683431} + - component: {fileID: 1567683432} + m_Layer: 5 + m_Name: AmplitudeValue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1567683430 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1567683429} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1330638649} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -19.99974, y: -35.50006} + m_SizeDelta: {x: 163.76001, y: 25.94} + m_Pivot: {x: 1, y: 1} +--- !u!222 &1567683431 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1567683429} + m_CullTransparentMesh: 0 +--- !u!114 &1567683432 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1567683429} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 2 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: 1 +--- !u!1 &1569422405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1569422406} + - component: {fileID: 1569422410} + - component: {fileID: 1569422409} + - component: {fileID: 1569422408} + - component: {fileID: 1569422407} + m_Layer: 5 + m_Name: HapticSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1569422406 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569422405} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 412302468} + - {fileID: 921970087} + - {fileID: 823073710} + - {fileID: 352282304} + - {fileID: 773417641} + - {fileID: 1319866240} + m_Father: {fileID: 1230727630} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -210, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1569422407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569422405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1569422407} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 823073711} + InitialState: 1 + OffPosition: {fileID: 773417641} + OnPosition: {fileID: 1319866240} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 352282303} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 352282303} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &1569422408 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569422405} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1569422409 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569422405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1569422410 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1569422405} + m_CullTransparentMesh: 0 +--- !u!1 &1570897235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1570897236} + - component: {fileID: 1570897238} + - component: {fileID: 1570897237} + m_Layer: 5 + m_Name: BoxInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1570897236 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570897235} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1579150230} + m_Father: {fileID: 1287155424} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -20} + m_SizeDelta: {x: -40, y: -486.6} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1570897237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570897235} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1570897238 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570897235} + m_CullTransparentMesh: 0 +--- !u!1 &1576130263 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1576130264} + - component: {fileID: 1576130266} + - component: {fileID: 1576130265} + m_Layer: 5 + m_Name: BoxCurve + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1576130264 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576130263} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 387001085} + - {fileID: 372103044} + - {fileID: 819566993} + m_Father: {fileID: 408532249} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -482, y: -20} + m_SizeDelta: {x: 462, y: -260} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1576130265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576130263} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1576130266 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1576130263} + m_CullTransparentMesh: 0 +--- !u!224 &1577794100 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + m_PrefabInstance: {fileID: 1652173254} + m_PrefabAsset: {fileID: 0} +--- !u!1 &1579150229 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1579150230} + - component: {fileID: 1579150232} + - component: {fileID: 1579150231} + m_Layer: 5 + m_Name: BoxCar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1579150230 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579150229} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 442254820} + m_Father: {fileID: 1570897236} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -449.99988, y: -20} + m_SizeDelta: {x: 900, y: -40} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1579150231 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579150229} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1579150232 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1579150229} + m_CullTransparentMesh: 0 +--- !u!1 &1582376650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1582376651} + - component: {fileID: 1582376653} + - component: {fileID: 1582376652} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1582376651 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582376650} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 1036277752} + - {fileID: 1867979234} + - {fileID: 835011769} + - {fileID: 1656491078} + - {fileID: 72691160} + m_Father: {fileID: 1426902635} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1582376652 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582376650} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1582376653 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582376650} + m_CullTransparentMesh: 0 +--- !u!1 &1589554471 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1589554472} + - component: {fileID: 1589554474} + - component: {fileID: 1589554473} + m_Layer: 5 + m_Name: DotsBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1589554472 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589554471} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99989974, y: 0.99989974, z: 0.99989974} + m_Children: [] + m_Father: {fileID: 1673368856} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -115.9} + m_SizeDelta: {x: 1024, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1589554473 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589554471} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 201a3f0fd44444e4da86b3ded7f4448f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1589554474 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1589554471} + m_CullTransparentMesh: 0 +--- !u!1 &1591721757 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1591721758} + - component: {fileID: 1591721760} + - component: {fileID: 1591721759} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1591721758 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591721757} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 119922976} + - {fileID: 1085244083} + - {fileID: 1370240817} + - {fileID: 690130470} + - {fileID: 889769688} + m_Father: {fileID: 1618306577} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1591721759 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591721757} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1591721760 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1591721757} + m_CullTransparentMesh: 0 +--- !u!1 &1598451433 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1598451434} + - component: {fileID: 1598451436} + - component: {fileID: 1598451435} + m_Layer: 5 + m_Name: BoxData + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1598451434 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598451433} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1736966429} + - {fileID: 213903253} + - {fileID: 1374116403} + - {fileID: 886129726} + - {fileID: 190691292} + - {fileID: 1361262898} + m_Father: {fileID: 819534590} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -280, y: 20} + m_SizeDelta: {x: 260, y: 136} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1598451435 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598451433} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1598451436 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598451433} + m_CullTransparentMesh: 0 +--- !u!1 &1598537562 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1598537563} + - component: {fileID: 1598537566} + - component: {fileID: 1598537565} + - component: {fileID: 1598537564} + - component: {fileID: 1598537567} + m_Layer: 5 + m_Name: PowerBarItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1598537563 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598537562} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 555838215} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 156.7, y: 40} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1598537564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598537562} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 40 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1598537565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598537562} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98823535, g: 0.7843138, b: 0.34117648, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1598537566 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598537562} + m_CullTransparentMesh: 0 +--- !u!114 &1598537567 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1598537562} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b00d7a1bf2998ce459a1952941fc251e, type: 3} + m_Name: + m_EditorClassIdentifier: + BumpDuration: 0.15 + NormalColor: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + InactiveColor: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 4.016492 + outSlope: 4.016492 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.06260913 + - serializedVersion: 3 + time: 0.25394255 + value: 0.9271569 + inSlope: 0.96574783 + outSlope: 0.96574783 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: -3.866068 + outSlope: -3.866068 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.028384654 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1608212389 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1608212390} + - component: {fileID: 1608212391} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1608212390 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1608212389} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1696317759} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1608212391 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1608212389} + m_CullTransparentMesh: 0 +--- !u!1 &1616536814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1616536815} + - component: {fileID: 1616536817} + - component: {fileID: 1616536816} + m_Layer: 5 + m_Name: KnobIndicator (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1616536815 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616536814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 165112074} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 322.7, y: 134.3} + m_SizeDelta: {x: 8, y: 8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1616536816 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616536814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1616536817 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616536814} + m_CullTransparentMesh: 0 +--- !u!1001 &1616920451 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1095553369} + m_Modifications: + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -41 + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953752, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Text + value: FREQUENCY + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953753, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 42.660156 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245064, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Name + value: VerticalSliderComponentFrequency + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -70 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -92 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Value + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 278291184} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdateContinuousFrequency + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781399, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -70.00003 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d76991629602e0d4481b47f5707daafe, type: 3} +--- !u!1 &1618306576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1618306577} + - component: {fileID: 1618306579} + - component: {fileID: 1618306578} + m_Layer: 5 + m_Name: Emphasis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1618306577 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618306576} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 48727716} + - {fileID: 398838207} + - {fileID: 1591721758} + - {fileID: 931971084} + - {fileID: 1394016756} + - {fileID: 972813555} + m_Father: {fileID: 1945195674} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 6299.996, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1618306578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618306576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 154496c98a10fd14aac98700fa7044bb, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugAudioEmphasis: {fileID: 2016813737} + DebugAudioContinuous: {fileID: 0} + Logo: {fileID: 121590301} + AmplitudeProgressBar: {fileID: 543231514} + FrequencyProgressBar: {fileID: 1061685957} + TargetCurve: {fileID: 387001084} + EmphasisAmplitude: 1 + EmphasisFrequency: 1 + EmphasisAmplitudeText: {fileID: 1567683432} + EmphasisFrequencyText: {fileID: 576139436} +--- !u!222 &1618306579 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1618306576} + m_CullTransparentMesh: 0 +--- !u!1 &1629582961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1629582962} + - component: {fileID: 1629582964} + - component: {fileID: 1629582963} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1629582962 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629582961} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1370240817} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1629582963 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629582961} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1629582964 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629582961} + m_CullTransparentMesh: 0 +--- !u!1 &1640243965 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1640243966} + - component: {fileID: 1640243968} + - component: {fileID: 1640243967} + m_Layer: 5 + m_Name: PaginationContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1640243966 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1640243965} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1826175958} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 115} + m_SizeDelta: {x: 0, y: -270} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1640243967 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1640243965} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7719238c9686c2645a6b5a89cba3de35, type: 3} + m_Name: + m_EditorClassIdentifier: + PaginationDotPrefab: {fileID: 7753230961564595917, guid: 844721accbc9f5744adc1f72590ea4f5, + type: 3} + ActiveColor: {r: 0, g: 0, b: 0, a: 0} + InactiveColor: {r: 0, g: 0, b: 0, a: 0} +--- !u!114 &1640243968 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1640243965} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!1 &1640864323 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1640864324} + - component: {fileID: 1640864326} + - component: {fileID: 1640864325} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1640864324 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1640864323} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 274492978} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1640864325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1640864323} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1640864326 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1640864323} + m_CullTransparentMesh: 0 +--- !u!1 &1641781884 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1641781885} + - component: {fileID: 1641781886} + m_Layer: 5 + m_Name: AudioSourceReload + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1641781885 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641781884} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1641781886 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1641781884} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: d2074b5a570d0d8468ff08e9cb7de3ac, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1001 &1652173254 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 2078920253} + m_Modifications: + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -41 + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953752, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Text + value: Frequency + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953753, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 42.660156 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245064, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Name + value: VerticalSliderComponentFrequency + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -70 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Value + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1618306578} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdateEmphasisFrequency + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781399, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -70.00003 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d76991629602e0d4481b47f5707daafe, type: 3} +--- !u!1 &1656491077 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1656491078} + - component: {fileID: 1656491080} + - component: {fileID: 1656491079} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1656491078 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656491077} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1582376651} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1656491079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656491077} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1656491080 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1656491077} + m_CullTransparentMesh: 0 +--- !u!1 &1668359990 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1668359991} + - component: {fileID: 1668359993} + - component: {fileID: 1668359992} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1668359991 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1668359990} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 921095976} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1668359992 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1668359990} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.09286968, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1668359993 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1668359990} + m_CullTransparentMesh: 0 +--- !u!1 &1672479996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1672479997} + - component: {fileID: 1672479999} + - component: {fileID: 1672479998} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1672479997 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672479996} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 32451694} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1672479998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672479996} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1672479999 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1672479996} + m_CullTransparentMesh: 0 +--- !u!1 &1673368855 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1673368856} + - component: {fileID: 1673368858} + - component: {fileID: 1673368857} + m_Layer: 5 + m_Name: Footer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1673368856 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1673368855} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 386896724} + - {fileID: 1307553163} + - {fileID: 795186388} + - {fileID: 1589554472} + - {fileID: 346701784} + - {fileID: 81114886} + - {fileID: 872420376} + m_Father: {fileID: 278291183} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 350} + m_Pivot: {x: 0.5, y: 0} +--- !u!225 &1673368857 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1673368855} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1673368858 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1673368855} + m_CullTransparentMesh: 0 +--- !u!1 &1678561553 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1678561554} + - component: {fileID: 1678561556} + - component: {fileID: 1678561555} + m_Layer: 5 + m_Name: KnobIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1678561554 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678561553} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1889145180} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 337, y: 0} + m_SizeDelta: {x: 32, y: 32} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1678561555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678561553} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1678561556 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1678561553} + m_CullTransparentMesh: 0 +--- !u!1 &1679978038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1679978039} + - component: {fileID: 1679978043} + - component: {fileID: 1679978042} + - component: {fileID: 1679978041} + - component: {fileID: 1679978040} + m_Layer: 5 + m_Name: BackButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1679978039 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679978038} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 761665397} + - {fileID: 1768338772} + m_Father: {fileID: 1826175958} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1679978040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679978038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: PreviousPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.509434, g: 0, b: 0.35042, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1679978041 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679978038} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1679978042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679978038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6792453, g: 0, b: 0.46757352, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1679978043 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1679978038} + m_CullTransparentMesh: 0 +--- !u!1 &1686682537 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1686682538} + - component: {fileID: 1686682540} + - component: {fileID: 1686682539} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1686682538 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1686682537} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1874395822} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1686682539 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1686682537} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: DRUMS +--- !u!222 &1686682540 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1686682537} + m_CullTransparentMesh: 0 +--- !u!1 &1687540330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1687540331} + - component: {fileID: 1687540333} + - component: {fileID: 1687540332} + m_Layer: 5 + m_Name: 7Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1687540331 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687540330} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 906390111} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -77.59961, y: -59.299988} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1687540332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687540330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4f5279e4af3c4234b8aa5937637aeabd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1687540333 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687540330} + m_CullTransparentMesh: 0 +--- !u!1 &1687879521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1687879522} + - component: {fileID: 1687879524} + - component: {fileID: 1687879523} + m_Layer: 5 + m_Name: 3Dots (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1687879522 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687879521} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 48147700} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 289.1} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1687879523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687879521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1687879524 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1687879521} + m_CullTransparentMesh: 0 +--- !u!1 &1688063165 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1688063166} + - component: {fileID: 1688063168} + - component: {fileID: 1688063167} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1688063166 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1688063165} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 1319097521} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1688063167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1688063165} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1688063168 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1688063165} + m_CullTransparentMesh: 0 +--- !u!1 &1695343427 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1695343428} + - component: {fileID: 1695343432} + - component: {fileID: 1695343431} + - component: {fileID: 1695343430} + - component: {fileID: 1695343429} + - component: {fileID: 1695343433} + m_Layer: 5 + m_Name: SoundSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1695343428 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695343427} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1387265548} + - {fileID: 523240477} + - {fileID: 2035716849} + - {fileID: 868650728} + - {fileID: 1059947945} + - {fileID: 485341648} + m_Father: {fileID: 1230727630} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1695343429 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695343427} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1695343429} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 2035716850} + InitialState: 0 + OffPosition: {fileID: 1059947945} + OnPosition: {fileID: 485341648} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1026918482} + m_MethodName: set_mute + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1026918482} + m_MethodName: set_mute + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 +--- !u!225 &1695343430 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695343427} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1695343431 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695343427} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1695343432 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695343427} + m_CullTransparentMesh: 0 +--- !u!114 &1695343433 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1695343427} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e91a9c36e72456e4db171843272d8a2b, type: 3} + m_Name: + m_EditorClassIdentifier: + DemoManager: {fileID: 1183418718} +--- !u!1 &1696317758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1696317759} + - component: {fileID: 1696317763} + - component: {fileID: 1696317762} + - component: {fileID: 1696317761} + - component: {fileID: 1696317760} + - component: {fileID: 1696317764} + m_Layer: 5 + m_Name: SoundSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1696317759 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696317758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1024446293} + - {fileID: 580527108} + - {fileID: 579580178} + - {fileID: 1308633021} + - {fileID: 1608212390} + - {fileID: 822881481} + m_Father: {fileID: 1086067260} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1696317760 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696317758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1696317760} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 579580179} + InitialState: 0 + OffPosition: {fileID: 1608212390} + OnPosition: {fileID: 822881481} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &1696317761 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696317758} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1696317762 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696317758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1696317763 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696317758} + m_CullTransparentMesh: 0 +--- !u!114 &1696317764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1696317758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e91a9c36e72456e4db171843272d8a2b, type: 3} + m_Name: + m_EditorClassIdentifier: + DemoManager: {fileID: 1183418718} +--- !u!1 &1702885559 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1702885563} + - component: {fileID: 1702885562} + - component: {fileID: 1702885561} + - component: {fileID: 1702885560} + - component: {fileID: 1702885564} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1702885560 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1702885559} + m_Enabled: 1 +--- !u!124 &1702885561 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1702885559} + m_Enabled: 1 +--- !u!20 &1702885562 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1702885559} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1702885563 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1702885559} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1702885564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1702885559} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ceb29a83998eb4949bc0a9c8e5662fa1, type: 3} + m_Name: + m_EditorClassIdentifier: + _outputLevel: 1 + _hapticsEnabled: 1 +--- !u!1 &1708619727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1708619728} + - component: {fileID: 1708619730} + - component: {fileID: 1708619729} + m_Layer: 5 + m_Name: ContentsBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1708619728 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708619727} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.000066, y: 1.000066, z: 1.000066} + m_Children: [] + m_Father: {fileID: 1530101172} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: -100, y: -53} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1708619729 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708619727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1708619730 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1708619727} + m_CullTransparentMesh: 0 +--- !u!1 &1715691093 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1715691097} + - component: {fileID: 1715691096} + - component: {fileID: 1715691095} + - component: {fileID: 1715691094} + m_Layer: 5 + m_Name: LogoVibrations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1715691094 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715691093} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 109aed369f1d8af47948f3f6aafbdbdc, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 8 + Frequency: 25 + Shaking: 0 +--- !u!114 &1715691095 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715691093} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ef74e6b52dfbf9a4cba77e1fde4584d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1715691096 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715691093} + m_CullTransparentMesh: 0 +--- !u!224 &1715691097 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1715691093} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 862014021} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1736966428 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1736966429} + - component: {fileID: 1736966431} + - component: {fileID: 1736966430} + m_Layer: 5 + m_Name: Amplitude + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1736966429 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736966428} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1598451434} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: -34.15985, y: -20} + m_SizeDelta: {x: 163.76, y: 25.94} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1736966430 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736966428} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Amplitude +--- !u!222 &1736966431 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1736966428} + m_CullTransparentMesh: 0 +--- !u!1 &1745405110 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1745405111} + - component: {fileID: 1745405113} + - component: {fileID: 1745405112} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1745405111 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745405110} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1403220314} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1745405112 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745405110} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: teleport +--- !u!222 &1745405113 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1745405110} + m_CullTransparentMesh: 0 +--- !u!1 &1750563995 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1750563996} + - component: {fileID: 1750563997} + m_Layer: 5 + m_Name: AudioSourceLaser + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1750563996 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1750563995} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1750563997 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1750563995} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 444c72e35fbefef45bc50447123c6225, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1768338771 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1768338772} + - component: {fileID: 1768338774} + - component: {fileID: 1768338773} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1768338772 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768338771} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1679978039} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1768338773 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768338771} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Emphasis +--- !u!222 &1768338774 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768338771} + m_CullTransparentMesh: 0 +--- !u!1 &1770833511 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1770833512} + - component: {fileID: 1770833514} + - component: {fileID: 1770833513} + m_Layer: 5 + m_Name: Wobble + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1770833512 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1770833511} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 779997977} + - {fileID: 1826175958} + - {fileID: 1431043784} + - {fileID: 1839090466} + - {fileID: 906390111} + - {fileID: 1530101172} + m_Father: {fileID: 1945195674} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1770833513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1770833511} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4b4855626e574f44ba43876941f82210, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugAudioEmphasis: {fileID: 0} + DebugAudioContinuous: {fileID: 0} + Logo: {fileID: 0} + ButtonCamera: {fileID: 1702885562} + ContentZone: {fileID: 1708619728} + WobbleButtonPrefab: {fileID: 5013591337710553177, guid: bf2320824bedaca46b850000901f91be, + type: 3} + PrefabSize: {x: 200, y: 200} + Margin: 20 + Padding: 20 +--- !u!222 &1770833514 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1770833511} + m_CullTransparentMesh: 0 +--- !u!1 &1772218533 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1772218534} + - component: {fileID: 1772218536} + - component: {fileID: 1772218535} + m_Layer: 5 + m_Name: Contents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1772218534 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772218533} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 925354622} + m_Father: {fileID: 811431853} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -616.5} + m_SizeDelta: {x: 0, y: -966.57} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1772218535 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772218533} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1772218536 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772218533} + m_CullTransparentMesh: 0 +--- !u!1 &1781012857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1781012858} + - component: {fileID: 1781012860} + - component: {fileID: 1781012859} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1781012858 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1781012857} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 1995152592} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1781012859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1781012857} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1781012860 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1781012857} + m_CullTransparentMesh: 0 +--- !u!1 &1784098896 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1784098897} + - component: {fileID: 1784098899} + - component: {fileID: 1784098898} + m_Layer: 5 + m_Name: TitlePower + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1784098897 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1784098896} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 975894758} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -40} + m_SizeDelta: {x: 163.76, y: 25.94} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1784098898 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1784098896} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9725491, g: 0.39607847, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 80 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: GAS +--- !u!222 &1784098899 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1784098896} + m_CullTransparentMesh: 0 +--- !u!1 &1787198224 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1787198225} + - component: {fileID: 1787198228} + - component: {fileID: 1787198227} + m_Layer: 5 + m_Name: KnobBlack + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1787198225 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787198224} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1889145180} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.00012207031, y: 0.00005340576} + m_SizeDelta: {x: 386, y: 386} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1787198227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787198224} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: eaf9954881d0ec54cb87bbe549858926, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1787198228 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1787198224} + m_CullTransparentMesh: 0 +--- !u!1 &1790290187 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1790290188} + - component: {fileID: 1790290190} + - component: {fileID: 1790290189} + m_Layer: 5 + m_Name: Contents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1790290188 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790290187} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 1287155424} + m_Father: {fileID: 1426902635} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -616.5} + m_SizeDelta: {x: 0, y: -966.57} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1790290189 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790290187} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1790290190 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1790290187} + m_CullTransparentMesh: 0 +--- !u!1 &1799831129 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1799831130} + - component: {fileID: 1799831135} + - component: {fileID: 1799831134} + - component: {fileID: 1799831133} + - component: {fileID: 1799831132} + - component: {fileID: 1799831131} + m_Layer: 4 + m_Name: Wall1 (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1799831130 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799831129} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 925354622} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 50} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1799831131 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799831129} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4615302ba7af13645aec1ad743d65dcf, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!50 &1799831132 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799831129} + m_BodyType: 1 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 1 + m_Material: {fileID: 0} + m_Interpolate: 1 + m_SleepingMode: 0 + m_CollisionDetection: 1 + m_Constraints: 0 +--- !u!61 &1799831133 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799831129} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 1000, y: 20} + m_EdgeRadius: 0 +--- !u!114 &1799831134 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799831129} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1799831135 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1799831129} + m_CullTransparentMesh: 0 +--- !u!1 &1802767481 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1802767482} + - component: {fileID: 1802767484} + - component: {fileID: 1802767483} + m_Layer: 5 + m_Name: LogoNice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1802767482 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802767481} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 862014021} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1802767483 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802767481} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.58431375, g: 0.58431375, b: 0.58431375, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4c8fd0c851c8cbc4bb6dc9453b9ae786, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1802767484 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802767481} + m_CullTransparentMesh: 0 +--- !u!1 &1807006352 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1807006353} + - component: {fileID: 1807006355} + - component: {fileID: 1807006354} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1807006353 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1807006352} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1884367469} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -45} + m_SizeDelta: {x: 980, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1807006354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1807006352} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: BALL +--- !u!222 &1807006355 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1807006352} + m_CullTransparentMesh: 0 +--- !u!1 &1809160419 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1809160420} + - component: {fileID: 1809160422} + - component: {fileID: 1809160421} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1809160420 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809160419} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1995152592} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1809160421 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809160419} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Continuous +--- !u!222 &1809160422 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1809160419} + m_CullTransparentMesh: 0 +--- !u!1 &1826175957 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1826175958} + - component: {fileID: 1826175960} + - component: {fileID: 1826175959} + m_Layer: 5 + m_Name: Footer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1826175958 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826175957} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 506095313} + - {fileID: 1293313003} + - {fileID: 1401663794} + - {fileID: 150184437} + - {fileID: 1679978039} + - {fileID: 1478429920} + - {fileID: 1640243966} + m_Father: {fileID: 1770833512} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 350} + m_Pivot: {x: 0.5, y: 0} +--- !u!225 &1826175959 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826175957} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1826175960 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826175957} + m_CullTransparentMesh: 0 +--- !u!1 &1832679622 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1832679623} + - component: {fileID: 1832679625} + - component: {fileID: 1832679624} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1832679623 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832679622} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 48147700} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1832679624 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832679622} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1832679625 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1832679622} + m_CullTransparentMesh: 0 +--- !u!1 &1833053241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1833053242} + - component: {fileID: 1833053244} + - component: {fileID: 1833053243} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1833053242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1833053241} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 1445158633} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1833053243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1833053241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: DICE +--- !u!222 &1833053244 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1833053241} + m_CullTransparentMesh: 0 +--- !u!1 &1836492022 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1836492023} + - component: {fileID: 1836492025} + - component: {fileID: 1836492024} + - component: {fileID: 1836492026} + m_Layer: 5 + m_Name: Knob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1836492023 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836492022} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 207709552} + m_Father: {fileID: 1889145180} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -0.000015258789} + m_SizeDelta: {x: 346, y: 346} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1836492024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836492022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: eaf9954881d0ec54cb87bbe549858926, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1836492025 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836492022} + m_CullTransparentMesh: 0 +--- !u!114 &1836492026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1836492022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 975863c8bb910594288081f50f6185aa, type: 3} + m_Name: + m_EditorClassIdentifier: + TargetCamera: {fileID: 0} + MinimumAngle: 45 + MaximumAngle: -225 + MaximumDistance: 50 + ActiveColor: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + InactiveColor: {r: 0.29411766, g: 0.29411766, b: 0.29411766, a: 1} + Dragging: 0 + Value: 0 + Active: 1 + _image: {fileID: 0} + _rectTransform: {fileID: 0} +--- !u!1 &1837703651 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1837703652} + - component: {fileID: 1837703654} + - component: {fileID: 1837703653} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1837703652 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837703651} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1867979234} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1837703653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837703651} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1837703654 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1837703651} + m_CullTransparentMesh: 0 +--- !u!1 &1839090465 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1839090466} + - component: {fileID: 1839090469} + - component: {fileID: 1839090468} + - component: {fileID: 1839090467} + m_Layer: 5 + m_Name: VersionNumber + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1839090466 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839090465} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1770833512} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 275.5996, y: 144.90039} + m_SizeDelta: {x: 462.25, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1839090467 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839090465} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c0f36737ce72e4282216983bcc84d0, type: 3} + m_Name: + m_EditorClassIdentifier: + Version: v4.1.2 +--- !u!114 &1839090468 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839090465} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6784314, g: 0, b: 0.4666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 35 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 60 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: v4.1.2 +--- !u!222 &1839090469 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839090465} + m_CullTransparentMesh: 0 +--- !u!1 &1843110485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1843110486} + - component: {fileID: 1843110490} + - component: {fileID: 1843110489} + - component: {fileID: 1843110488} + - component: {fileID: 1843110487} + m_Layer: 5 + m_Name: NextButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1843110486 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843110485} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 989277418} + - {fileID: 297036827} + m_Father: {fileID: 32451694} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 1, y: 0} +--- !u!114 &1843110487 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843110485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: NextPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.6792453, g: 0.22427912, b: 0, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1843110488 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843110485} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1843110489 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843110485} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83137256, g: 0.27450982, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1843110490 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1843110485} + m_CullTransparentMesh: 0 +--- !u!1 &1846656509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1846656510} + - component: {fileID: 1846656512} + - component: {fileID: 1846656511} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1846656510 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1846656509} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 166775920} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1846656511 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1846656509} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1846656512 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1846656509} + m_CullTransparentMesh: 0 +--- !u!1 &1863192579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1863192580} + - component: {fileID: 1863192582} + - component: {fileID: 1863192581} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1863192580 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1863192579} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 274492978} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1863192581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1863192579} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.09286968, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1863192582 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1863192579} + m_CullTransparentMesh: 0 +--- !u!1 &1867979233 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1867979234} + - component: {fileID: 1867979238} + - component: {fileID: 1867979237} + - component: {fileID: 1867979236} + - component: {fileID: 1867979235} + m_Layer: 5 + m_Name: HapticSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1867979234 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867979233} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1338854198} + - {fileID: 2049057548} + - {fileID: 1837703652} + - {fileID: 759508657} + - {fileID: 1298436832} + - {fileID: 1141110837} + m_Father: {fileID: 1582376651} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -210, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &1867979235 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867979233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1867979235} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 1837703653} + InitialState: 1 + OffPosition: {fileID: 1298436832} + OnPosition: {fileID: 1141110837} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 759508656} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 759508656} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &1867979236 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867979233} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1867979237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867979233} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1867979238 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867979233} + m_CullTransparentMesh: 0 +--- !u!1 &1868665266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1868665267} + - component: {fileID: 1868665269} + - component: {fileID: 1868665268} + m_Layer: 5 + m_Name: 7Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1868665267 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1868665266} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 931971084} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -77.59961, y: -59.299988} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1868665268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1868665266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4f5279e4af3c4234b8aa5937637aeabd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1868665269 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1868665266} + m_CullTransparentMesh: 0 +--- !u!1 &1874395821 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1874395822} + - component: {fileID: 1874395826} + - component: {fileID: 1874395825} + - component: {fileID: 1874395824} + - component: {fileID: 1874395823} + m_Layer: 5 + m_Name: Button2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1874395822 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1874395821} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 1686682538} + m_Father: {fileID: 181786192} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 466.2, y: 425} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1874395823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1874395821} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 2 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1874395824 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1874395821} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1874395825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1874395821} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1874395826 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1874395821} + m_CullTransparentMesh: 0 +--- !u!1 &1880427943 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1880427944} + - component: {fileID: 1880427946} + - component: {fileID: 1880427945} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1880427944 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880427943} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 274492978} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1880427945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880427943} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9568628, g: 0.23529413, b: 0.21568629, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HAPTIC +--- !u!222 &1880427946 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1880427943} + m_CullTransparentMesh: 0 +--- !u!1 &1882560149 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1882560150} + - component: {fileID: 1882560152} + - component: {fileID: 1882560151} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1882560150 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882560149} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 2117913896} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1882560151 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882560149} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.98039216, g: 0.13725491, b: 0.7176471, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HAPTIC +--- !u!222 &1882560152 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1882560149} + m_CullTransparentMesh: 0 +--- !u!1 &1884367468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1884367469} + - component: {fileID: 1884367471} + - component: {fileID: 1884367470} + m_Layer: 5 + m_Name: Intro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1884367469 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884367468} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 1807006353} + - {fileID: 477882998} + - {fileID: 2138492925} + - {fileID: 671108995} + m_Father: {fileID: 811431853} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -330} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1884367470 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884367468} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1884367471 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1884367468} + m_CullTransparentMesh: 0 +--- !u!1 &1887221719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1887221720} + - component: {fileID: 1887221722} + - component: {fileID: 1887221721} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1887221720 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887221719} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2117913896} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1887221721 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887221719} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1887221722 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1887221719} + m_CullTransparentMesh: 0 +--- !u!1 &1889145179 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1889145180} + - component: {fileID: 1889145182} + - component: {fileID: 1889145181} + m_Layer: 5 + m_Name: BoxPlay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1889145180 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1889145179} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1787198225} + - {fileID: 1836492023} + - {fileID: 165112074} + - {fileID: 955176846} + - {fileID: 1678561554} + m_Father: {fileID: 1287155424} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 233.30078} + m_SizeDelta: {x: 426.6, y: 426.6} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1889145181 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1889145179} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1889145182 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1889145179} + m_CullTransparentMesh: 0 +--- !u!1 &1892980642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1892980643} + - component: {fileID: 1892980647} + - component: {fileID: 1892980646} + - component: {fileID: 1892980645} + - component: {fileID: 1892980644} + m_Layer: 5 + m_Name: Button4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1892980643 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1892980642} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 1040014743} + m_Father: {fileID: 181786192} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 160, y: 260} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1892980644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1892980642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1218190713} + m_MethodName: PlayHapticClip + m_Mode: 3 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 4 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1892980645 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1892980642} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1892980646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1892980642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1892980647 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1892980642} + m_CullTransparentMesh: 0 +--- !u!1 &1895463024 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1895463025} + - component: {fileID: 1895463027} + - component: {fileID: 1895463026} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1895463025 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895463024} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1254437066} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -95} + m_SizeDelta: {x: 980, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1895463026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895463024} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1895463027 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1895463024} + m_CullTransparentMesh: 0 +--- !u!1 &1910005841 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1910005842} + - component: {fileID: 1910005844} + - component: {fileID: 1910005843} + m_Layer: 5 + m_Name: IntroText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1910005842 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1910005841} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 1275136506} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -120} + m_SizeDelta: {x: 980, y: 208.78} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1910005843 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1910005841} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Rotate the knob to the right to accelerate and feel the need for speed. +--- !u!222 &1910005844 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1910005841} + m_CullTransparentMesh: 0 +--- !u!1 &1914240454 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1914240455} + - component: {fileID: 1914240456} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1914240455 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914240454} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 274492978} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1914240456 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914240454} + m_CullTransparentMesh: 0 +--- !u!1 &1942249758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1942249759} + - component: {fileID: 1942249761} + - component: {fileID: 1942249760} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1942249759 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1942249758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1218190712} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1942249760 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1942249758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.58431375, g: 0.58431375, b: 0.58431375, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1942249761 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1942249758} + m_CullTransparentMesh: 0 +--- !u!224 &1945195674 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 224538379845041880, guid: eafa04180ee294a89b396826af7cba20, + type: 3} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1121054499} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1770833512} + - {fileID: 811431853} + - {fileID: 1218190712} + - {fileID: 278291183} + - {fileID: 1426902635} + - {fileID: 1618306577} + - {fileID: 3784026663338523929} + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1950497653 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1950497654} + - component: {fileID: 1950497655} + m_Layer: 5 + m_Name: DebugEmphasis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1950497654 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1950497653} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 54476678} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1950497655 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1950497653} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 4cb55e2084a872b4fa4051ba3320c8a7, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1001 &1960791680 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1467786816} + m_Modifications: + - target: {fileID: 4047011439214917864, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: -39.140015 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -159.99982 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 19.99998 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917867, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Name + value: AmplitudeVerticalProgressBar + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Type + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.b + value: 0.3372549 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.g + value: 0.78823537 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.r + value: 0.9960785 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_FillAmount + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_UseSpriteMesh + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -60.000004 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740593, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -59.999985 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a34261c2adaebf04a843bbcd2393bc03, type: 3} +--- !u!1 &1962378944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1962378945} + - component: {fileID: 1962378946} + m_Layer: 5 + m_Name: DebugContinuous + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1962378945 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962378944} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 54476678} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 2561.0283, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1962378946 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1962378944} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: c0ab2419d02d5f54690ac6db3a5188cb, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 1 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1968047345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1968047346} + - component: {fileID: 1968047348} + - component: {fileID: 1968047347} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1968047346 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968047345} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1431043784} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1968047347 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968047345} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1968047348 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1968047345} + m_CullTransparentMesh: 0 +--- !u!1 &1971069321 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1971069322} + - component: {fileID: 1971069324} + - component: {fileID: 1971069323} + m_Layer: 5 + m_Name: Contents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1971069322 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1971069321} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 315951910} + m_Father: {fileID: 1218190712} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -616.5} + m_SizeDelta: {x: 0, y: -966.57} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &1971069323 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1971069321} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &1971069324 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1971069321} + m_CullTransparentMesh: 0 +--- !u!1 &1985085561 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1985085562} + - component: {fileID: 1985085564} + - component: {fileID: 1985085563} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1985085562 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985085561} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 503943323} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1985085563 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985085561} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1985085564 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1985085561} + m_CullTransparentMesh: 0 +--- !u!1 &1986624021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1986624022} + - component: {fileID: 1986624024} + - component: {fileID: 1986624023} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1986624022 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1986624021} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 785930643} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1986624023 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1986624021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Play continuous haptic pattern +--- !u!222 &1986624024 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1986624021} + m_CullTransparentMesh: 0 +--- !u!1 &1995152591 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1995152592} + - component: {fileID: 1995152596} + - component: {fileID: 1995152595} + - component: {fileID: 1995152594} + - component: {fileID: 1995152593} + m_Layer: 5 + m_Name: BackButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1995152592 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1995152591} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 1781012858} + - {fileID: 1809160420} + m_Father: {fileID: 32451694} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1995152593 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1995152591} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: PreviousPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.6792453, g: 0.22427912, b: 0, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!225 &1995152594 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1995152591} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &1995152595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1995152591} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.83137256, g: 0.27450982, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1995152596 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1995152591} + m_CullTransparentMesh: 0 +--- !u!1 &1996985029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1996985030} + - component: {fileID: 1996985032} + - component: {fileID: 1996985031} + m_Layer: 5 + m_Name: DotsBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1996985030 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1996985029} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99989974, y: 0.99989974, z: 0.99989974} + m_Children: [] + m_Father: {fileID: 675956756} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -115.9} + m_SizeDelta: {x: 1024, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1996985031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1996985029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 201a3f0fd44444e4da86b3ded7f4448f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1996985032 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1996985029} + m_CullTransparentMesh: 0 +--- !u!1 &1997030865 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1997030866} + - component: {fileID: 1997030868} + - component: {fileID: 1997030867} + m_Layer: 5 + m_Name: LogoNice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1997030866 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1997030865} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1036277752} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1997030867 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1997030865} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.972549, g: 0.39607844, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4c8fd0c851c8cbc4bb6dc9453b9ae786, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1997030868 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1997030865} + m_CullTransparentMesh: 0 +--- !u!1 &1998855354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1998855355} + - component: {fileID: 1998855356} + m_Layer: 5 + m_Name: AudioSourceDrums + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1998855355 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998855354} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 889778644} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &1998855356 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998855354} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 31ba8cb846fdd46498b72e9e45be695e, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &1999910698 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1999910699} + - component: {fileID: 1999910701} + - component: {fileID: 1999910700} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1999910699 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999910698} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 835011769} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1999910700 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999910698} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1999910701 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1999910698} + m_CullTransparentMesh: 0 +--- !u!1001 &2002233662 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1095553369} + m_Modifications: + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -41 + objectReference: {fileID: 0} + - target: {fileID: 6194878423411780958, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Color.a + value: 0.13333334 + objectReference: {fileID: 0} + - target: {fileID: 6194878423411780958, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Color.b + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423411780958, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Color.g + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423411780958, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Color.r + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953752, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Text + value: Duration + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953753, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 42.660156 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245064, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Name + value: VerticalSliderComponentDuration + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -70 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -200 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Value + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_MaxValue + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Interactable + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Colors.m_DisabledColor.a + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Colors.m_DisabledColor.b + value: 0.2924528 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Colors.m_DisabledColor.g + value: 0.2924528 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Colors.m_DisabledColor.r + value: 0.2924528 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 278291184} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdateContinuousDuration + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781399, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -70.00003 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d76991629602e0d4481b47f5707daafe, type: 3} +--- !u!1 &2013399563 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2013399564} + - component: {fileID: 2013399566} + - component: {fileID: 2013399565} + - component: {fileID: 2013399567} + m_Layer: 5 + m_Name: IconImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2013399564 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2013399563} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 1} + m_Children: [] + m_Father: {fileID: 31941410} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2013399565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2013399563} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -312768529563260625, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2013399566 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2013399563} + m_CullTransparentMesh: 0 +--- !u!95 &2013399567 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2013399563} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: ef501b816fc6d8d4da6515958af8f493, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!1 &2016813735 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2016813736} + - component: {fileID: 2016813737} + m_Layer: 5 + m_Name: DebugEmphasis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2016813736 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016813735} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 972813555} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!82 &2016813737 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2016813735} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 719572a06924d4ea79c4264834bd427b, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &2024260780 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 4047011439674249041, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + m_PrefabInstance: {fileID: 959923089} + m_PrefabAsset: {fileID: 0} +--- !u!114 &2024260784 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2024260780} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &2031484473 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2031484474} + - component: {fileID: 2031484476} + - component: {fileID: 2031484475} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2031484474 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2031484473} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1370240817} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2031484475 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2031484473} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2031484476 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2031484473} + m_CullTransparentMesh: 0 +--- !u!1 &2035716848 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2035716849} + - component: {fileID: 2035716851} + - component: {fileID: 2035716850} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2035716849 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035716848} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1695343428} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2035716850 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035716848} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2035716851 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2035716848} + m_CullTransparentMesh: 0 +--- !u!1 &2042766147 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2042766148} + - component: {fileID: 2042766150} + - component: {fileID: 2042766149} + m_Layer: 5 + m_Name: ContentsBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2042766148 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042766147} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.000066, y: 1.000066, z: 1.000066} + m_Children: + - {fileID: 1095553369} + - {fileID: 819534590} + - {fileID: 1446197951} + m_Father: {fileID: 2139098803} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: -100, y: -53} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &2042766149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042766147} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2042766150 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042766147} + m_CullTransparentMesh: 0 +--- !u!1 &2048791468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2048791469} + - component: {fileID: 2048791471} + - component: {fileID: 2048791470} + m_Layer: 5 + m_Name: HorizontalProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2048791469 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2048791468} + m_LocalRotation: {x: -0, y: -0, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1276898986} + m_Father: {fileID: 1446197951} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 85.31497} + m_SizeDelta: {x: 30, y: 900} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2048791470 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2048791468} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1, type: 3} + m_Name: + m_EditorClassIdentifier: + StartValue: 0 + EndValue: 1 + BarDirection: 0 + FillMode: 1 + TimeScale: 0 + LerpForegroundBar: 1 + LerpForegroundBarSpeed: 15 + Delay: 1 + LerpDelayedBar: 1 + LerpDelayedBarSpeed: 15 + PlayerID: + DelayedBar: {fileID: 0} + ForegroundBar: {fileID: 350598677} + BumpScaleOnChange: 0 + BumpOnIncrease: 0 + BumpDuration: 0.2 + ChangeColorWhenBumping: 1 + BumpColor: {r: 1, g: 1, b: 1, a: 1} + BumpAnimationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.3 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + BumpColorAnimationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AutoUpdating: 1 + BarProgress: 0 +--- !u!222 &2048791471 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2048791468} + m_CullTransparentMesh: 0 +--- !u!1 &2049057547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2049057548} + - component: {fileID: 2049057550} + - component: {fileID: 2049057549} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2049057548 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2049057547} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1867979234} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2049057549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2049057547} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2049057550 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2049057547} + m_CullTransparentMesh: 0 +--- !u!1 &2059556307 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2059556308} + - component: {fileID: 2059556310} + - component: {fileID: 2059556309} + m_Layer: 5 + m_Name: BoxBars + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &2059556308 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059556307} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1287155424} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 40, y: 40} + m_SizeDelta: {x: 100, y: -513.82996} + m_Pivot: {x: 0, y: 0} +--- !u!114 &2059556309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059556307} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2059556310 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2059556307} + m_CullTransparentMesh: 0 +--- !u!1 &2070558706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2070558707} + - component: {fileID: 2070558708} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2070558707 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2070558706} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 229223115} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2070558708 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2070558706} + m_CullTransparentMesh: 0 +--- !u!1 &2078920252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2078920253} + - component: {fileID: 2078920255} + - component: {fileID: 2078920254} + m_Layer: 5 + m_Name: BoxSliders + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2078920253 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078920252} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1362271955} + - {fileID: 1577794100} + m_Father: {fileID: 55131106} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: -20} + m_SizeDelta: {x: -562, y: -245} + m_Pivot: {x: 0, y: 1} +--- !u!114 &2078920254 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078920252} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.6745098, g: 0.6745098, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2078920255 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2078920252} + m_CullTransparentMesh: 0 +--- !u!1 &2083827545 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2083827546} + - component: {fileID: 2083827548} + - component: {fileID: 2083827547} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2083827546 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2083827545} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 921095976} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2083827547 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2083827545} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2083827548 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2083827545} + m_CullTransparentMesh: 0 +--- !u!114 &2094352685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011438662551160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 1 +--- !u!1 &2108115809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2108115810} + - component: {fileID: 2108115812} + - component: {fileID: 2108115811} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2108115810 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108115809} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 424992758} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2108115811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108115809} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2108115812 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2108115809} + m_CullTransparentMesh: 0 +--- !u!1 &2117913895 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2117913896} + - component: {fileID: 2117913900} + - component: {fileID: 2117913899} + - component: {fileID: 2117913898} + - component: {fileID: 2117913897} + m_Layer: 5 + m_Name: HapticSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2117913896 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117913895} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1882560150} + - {fileID: 2124383369} + - {fileID: 1887221720} + - {fileID: 510300447} + - {fileID: 1437982778} + - {fileID: 119333923} + m_Father: {fileID: 1431043784} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -210, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!114 &2117913897 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117913895} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2117913897} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 1887221721} + InitialState: 1 + OffPosition: {fileID: 1437982778} + OnPosition: {fileID: 119333923} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 510300446} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 510300446} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!225 &2117913898 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117913895} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &2117913899 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117913895} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2117913900 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2117913895} + m_CullTransparentMesh: 0 +--- !u!1 &2124383368 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2124383369} + - component: {fileID: 2124383371} + - component: {fileID: 2124383370} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2124383369 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124383368} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 2117913896} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2124383370 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124383368} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2124383371 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124383368} + m_CullTransparentMesh: 0 +--- !u!1 &2138492924 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2138492925} + - component: {fileID: 2138492927} + - component: {fileID: 2138492926} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2138492925 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2138492924} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1884367469} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -95} + m_SizeDelta: {x: 980, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &2138492926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2138492924} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2138492927 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2138492924} + m_CullTransparentMesh: 0 +--- !u!1 &2139098802 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2139098803} + - component: {fileID: 2139098805} + - component: {fileID: 2139098804} + m_Layer: 5 + m_Name: Contents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2139098803 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139098802} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 2042766148} + m_Father: {fileID: 278291183} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -616.5} + m_SizeDelta: {x: 0, y: -966.57} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &2139098804 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139098802} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &2139098805 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2139098802} + m_CullTransparentMesh: 0 +--- !u!1 &2143762285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2143762286} + - component: {fileID: 2143762288} + - component: {fileID: 2143762287} + m_Layer: 5 + m_Name: LogoBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2143762286 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2143762285} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1063334117} + - {fileID: 1158466329} + m_Father: {fileID: 1431043784} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 165} + m_SizeDelta: {x: 640, y: 140} + m_Pivot: {x: 0, y: 1} +--- !u!114 &2143762287 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2143762285} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2143762288 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2143762285} + m_CullTransparentMesh: 0 +--- !u!1 &3784026662797140016 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026662797140019} + - component: {fileID: 3784026662797140018} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026662797140018 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662797140016} + m_CullTransparentMesh: 0 +--- !u!224 &3784026662797140019 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662797140016} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663294962216} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026662810863248 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662810863253} + m_CullTransparentMesh: 0 +--- !u!114 &3784026662810863249 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662810863253} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026662810863252 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662810863253} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026664041498550} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 466.2, y: 260} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026662810863253 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026662810863252} + - component: {fileID: 3784026662810863248} + - component: {fileID: 3784026662810863249} + - component: {fileID: 3784026662810863254} + - component: {fileID: 3784026662810863255} + m_Layer: 5 + m_Name: Button5 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!225 &3784026662810863254 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662810863253} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3784026662810863255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662810863253} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: RigidButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 5 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!224 &3784026662860248776 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662860248777} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663150372156} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026662860248777 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026662860248776} + - component: {fileID: 3784026662860248778} + - component: {fileID: 3784026662860248779} + m_Layer: 5 + m_Name: LogoNice + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026662860248778 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662860248777} + m_CullTransparentMesh: 0 +--- !u!114 &3784026662860248779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662860248777} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.6, b: 0.16862746, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4c8fd0c851c8cbc4bb6dc9453b9ae786, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026662866812936 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662866812937} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 3784026663786298091} + - {fileID: 3784026664229946639} + - {fileID: 3784026664272574005} + - {fileID: 3784026663581142551} + m_Father: {fileID: 3784026663338523929} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -330} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &3784026662866812937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026662866812936} + - component: {fileID: 3784026662866812938} + - component: {fileID: 3784026662866812939} + m_Layer: 5 + m_Name: Intro + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026662866812938 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662866812937} + m_CullTransparentMesh: 0 +--- !u!225 &3784026662866812939 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662866812937} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &3784026662896940969 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662896940972} + m_CullTransparentMesh: 0 +--- !u!1 &3784026662896940972 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026662896940975} + - component: {fileID: 3784026662896940969} + - component: {fileID: 3784026662896940974} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!225 &3784026662896940974 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662896940972} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!224 &3784026662896940975 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662896940972} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 3784026663150372156} + - {fileID: 3784026664117484670} + - {fileID: 3784026663294962216} + - {fileID: 3784026663054791665} + - {fileID: 3784026663989662476} + m_Father: {fileID: 3784026663338523929} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 330} + m_Pivot: {x: 0.5, y: 1} +--- !u!224 &3784026662927532896 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662927532897} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663294962216} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026662927532897 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026662927532896} + - component: {fileID: 3784026662927532898} + - component: {fileID: 3784026662927532899} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026662927532898 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662927532897} + m_CullTransparentMesh: 0 +--- !u!114 &3784026662927532899 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662927532897} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3784026662977052264 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662977052268} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: -312768529563260625, guid: 3da05e9f66c9f254c8875335e7e9179e, + type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026662977052265 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662977052268} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.5, y: 0.5, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664711944720} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026662977052268 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026662977052265} + - component: {fileID: 3784026662977052270} + - component: {fileID: 3784026662977052264} + - component: {fileID: 3784026662977052271} + m_Layer: 5 + m_Name: IconImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026662977052270 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662977052268} + m_CullTransparentMesh: 0 +--- !u!95 &3784026662977052271 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662977052268} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: ef501b816fc6d8d4da6515958af8f493, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 +--- !u!222 &3784026662977841880 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662977841887} + m_CullTransparentMesh: 0 +--- !u!114 &3784026662977841881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662977841887} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: heavy +--- !u!224 &3784026662977841886 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026662977841887} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026664319535520} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026662977841887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026662977841886} + - component: {fileID: 3784026662977841880} + - component: {fileID: 3784026662977841881} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663054791664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663054791670} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663054791665 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663054791670} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026662896940975} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026663054791667 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663054791670} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663054791670 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663054791665} + - component: {fileID: 3784026663054791667} + - component: {fileID: 3784026663054791664} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!225 &3784026663055660264 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663055660271} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3784026663055660265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663055660271} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: SoftButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 6 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!222 &3784026663055660266 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663055660271} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663055660267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663055660271} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663055660270 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663055660271} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026664436840698} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 778, y: 260} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663055660271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663055660270} + - component: {fileID: 3784026663055660266} + - component: {fileID: 3784026663055660267} + - component: {fileID: 3784026663055660264} + - component: {fileID: 3784026663055660265} + m_Layer: 5 + m_Name: Button6 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663059124764 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663059124834} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.80784315, b: 0.29411766, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d1476548e87a009429d279f9ec3a4b93, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663059124765 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663059124834} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664117484670} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026663059124767 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663059124834} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663059124834 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663059124765} + - component: {fileID: 3784026663059124767} + - component: {fileID: 3784026663059124764} + m_Layer: 5 + m_Name: HapticSwitchKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663117260972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663117260978} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Warning +--- !u!224 &3784026663117260973 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663117260978} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026664690177923} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026663117260975 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663117260978} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663117260978 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663117260973} + - component: {fileID: 3784026663117260975} + - component: {fileID: 3784026663117260972} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663147586088 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663147586095} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663147586089 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663147586095} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.6, b: 0.16862746, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: SOUND +--- !u!224 &3784026663147586094 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663147586095} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 3784026663294962216} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &3784026663147586095 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663147586094} + - component: {fileID: 3784026663147586088} + - component: {fileID: 3784026663147586089} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3784026663150372156 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663150372157} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3784026662860248776} + - {fileID: 3784026663915896656} + m_Father: {fileID: 3784026662896940975} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 165} + m_SizeDelta: {x: 640, y: 140} + m_Pivot: {x: 0, y: 1} +--- !u!1 &3784026663150372157 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663150372156} + - component: {fileID: 3784026663150372158} + - component: {fileID: 3784026663150372159} + m_Layer: 5 + m_Name: LogoBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663150372158 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663150372157} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663150372159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663150372157} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663165127444 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663165127445} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 3784026664128378039} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663165127445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663165127444} + - component: {fileID: 3784026663165127446} + - component: {fileID: 3784026663165127447} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663165127446 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663165127445} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663165127447 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663165127445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663165966268 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663165966269} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664117484670} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663165966269 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663165966268} + - component: {fileID: 3784026663165966271} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663165966271 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663165966269} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663251616556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663251616559} + - component: {fileID: 3784026663251616558} + m_Layer: 5 + m_Name: DebugEmphasis + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!82 &3784026663251616558 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663251616556} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: 4cb55e2084a872b4fa4051ba3320c8a7, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!224 &3784026663251616559 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663251616556} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663628395008} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3784026663294962212 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663294962217} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &3784026663294962213 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663294962217} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &3784026663294962215 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663294962217} + m_CullTransparentMesh: 0 +--- !u!224 &3784026663294962216 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663294962217} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3784026663147586094} + - {fileID: 3784026663418661444} + - {fileID: 3784026662927532896} + - {fileID: 3784026664090310344} + - {fileID: 3784026664876403002} + - {fileID: 3784026662797140019} + m_Father: {fileID: 3784026662896940975} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!1 &3784026663294962217 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663294962216} + - component: {fileID: 3784026663294962215} + - component: {fileID: 3784026663294962212} + - component: {fileID: 3784026663294962213} + - component: {fileID: 3784026663294962218} + - component: {fileID: 3784026663294962219} + m_Layer: 5 + m_Name: SoundSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663294962218 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663294962217} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663294962218} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 3784026662927532899} + InitialState: 0 + OffPosition: {fileID: 3784026664876403002} + OnPosition: {fileID: 3784026662797140019} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: TurnSoundsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &3784026663294962219 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663294962217} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e91a9c36e72456e4db171843272d8a2b, type: 3} + m_Name: + m_EditorClassIdentifier: + DemoManager: {fileID: 1183418718} +--- !u!114 &3784026663338523928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663338523934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a5fbc7abb856a0a4791f28a326ea66b1, type: 3} + m_Name: + m_EditorClassIdentifier: + DebugAudioEmphasis: {fileID: 3784026663251616558} + DebugAudioContinuous: {fileID: 3784026664515401082} + Logo: {fileID: 3784026663915896663} + IconImage: {fileID: 3784026662977052264} + IconImageAnimator: {fileID: 3784026662977052271} + IdleSprite: {fileID: -6205461316961850552, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + SelectionSprite: {fileID: -970488182351979515, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + SuccessSprite: {fileID: 1833921066897734877, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + WarningSprite: {fileID: 7590535577056678407, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + FailureSprite: {fileID: -1001581268832274596, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + RigidSprite: {fileID: -122496617620796665, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + SoftSprite: {fileID: 1161443714384828998, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + LightSprite: {fileID: -5435255387823749147, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + MediumSprite: {fileID: -4594720345167028440, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} + HeavySprite: {fileID: -1927911570766903740, guid: fe42c8b526e77e54ab91d0590272d9e8, + type: 3} +--- !u!224 &3784026663338523929 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663338523934} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3784026664711441489} + - {fileID: 3784026664384146796} + - {fileID: 3784026662896940975} + - {fileID: 3784026662866812936} + - {fileID: 3784026663914626033} + - {fileID: 3784026663628395008} + m_Father: {fileID: 1945195674} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 7488.9966, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026663338523931 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663338523934} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663338523934 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663338523929} + - component: {fileID: 3784026663338523931} + - component: {fileID: 3784026663338523928} + m_Layer: 5 + m_Name: Presets + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!225 &3784026663368956168 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663368956175} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3784026663368956169 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663368956175} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: SelectionButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 1 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!222 &3784026663368956170 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663368956175} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663368956171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663368956175} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663368956174 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663368956175} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026664697362198} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 160, y: 425} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663368956175 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663368956174} + - component: {fileID: 3784026663368956170} + - component: {fileID: 3784026663368956171} + - component: {fileID: 3784026663368956168} + - component: {fileID: 3784026663368956169} + m_Layer: 5 + m_Name: Button1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663379551372 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663379551379} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663379551373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663379551379} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Emphasis +--- !u!224 &3784026663379551378 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663379551379} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026664163158904} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663379551379 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663379551378} + - component: {fileID: 3784026663379551372} + - component: {fileID: 3784026663379551373} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3784026663418661444 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663418661445} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663294962216} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663418661445 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663418661444} + - component: {fileID: 3784026663418661446} + - component: {fileID: 3784026663418661447} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663418661446 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663418661445} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663418661447 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663418661445} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &3784026663466351909 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663466351912} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663466351912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663466351915} + - component: {fileID: 3784026663466351909} + - component: {fileID: 3784026663466351914} + m_Layer: 5 + m_Name: HapticSwitchBG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663466351914 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663466351912} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dd0295cf0922b64192d5ee88a250b4e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663466351915 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663466351912} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664117484670} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3784026663557231664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663557231668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &3784026663557231665 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663557231668} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &3784026663557231667 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663557231668} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663557231668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663557231671} + - component: {fileID: 3784026663557231667} + - component: {fileID: 3784026663557231664} + - component: {fileID: 3784026663557231665} + - component: {fileID: 3784026663557231670} + m_Layer: 5 + m_Name: Button2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663557231670 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663557231668} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: SuccessButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 2 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!224 &3784026663557231671 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663557231668} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026664683927741} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 466.2, y: 425} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026663581142545 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663581142548} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663581142548 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663581142551} + - component: {fileID: 3784026663581142545} + - component: {fileID: 3784026663581142550} + m_Layer: 5 + m_Name: IntroText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663581142550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663581142548} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Nine tiny haptic presets that will bring you closer to hapiness. +--- !u!224 &3784026663581142551 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663581142548} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 3784026662866812936} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -120} + m_SizeDelta: {x: 980, y: 208.78} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3784026663583276805 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663583276814} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663583276808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663583276814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: FailureButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 4 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!224 &3784026663583276809 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663583276814} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026664892237235} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 160, y: 260} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3784026663583276810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663583276814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &3784026663583276811 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663583276814} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &3784026663583276814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663583276809} + - component: {fileID: 3784026663583276805} + - component: {fileID: 3784026663583276810} + - component: {fileID: 3784026663583276811} + - component: {fileID: 3784026663583276808} + m_Layer: 5 + m_Name: Button4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3784026663612586984 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663612586985} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664117484670} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 59, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663612586985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663612586984} + - component: {fileID: 3784026663612586987} + m_Layer: 5 + m_Name: HapticSwitchKnobOnPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663612586987 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663612586985} + m_CullTransparentMesh: 0 +--- !u!224 &3784026663628395008 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663628395009} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000696, y: 1.0000696, z: 1.0000696} + m_Children: + - {fileID: 3784026664515401083} + - {fileID: 3784026663251616559} + m_Father: {fileID: 3784026663338523929} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -1209.001, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663628395009 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663628395008} + m_Layer: 5 + m_Name: DebugSounds + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663659348836 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663659348842} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: light +--- !u!224 &3784026663659348837 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663659348842} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026664644721028} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026663659348839 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663659348842} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663659348842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663659348837} + - component: {fileID: 3784026663659348839} + - component: {fileID: 3784026663659348836} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3784026663715991024 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663715991025} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3784026664711944720} + m_Father: {fileID: 3784026664626332523} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -20, y: -20} + m_SizeDelta: {x: -40, y: -580} + m_Pivot: {x: 1, y: 1} +--- !u!1 &3784026663715991025 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663715991024} + - component: {fileID: 3784026663715991026} + - component: {fileID: 3784026663715991027} + m_Layer: 5 + m_Name: BoxInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663715991026 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663715991025} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663715991027 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663715991025} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.6, b: 0.16862746, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &3784026663719046940 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663719047011} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663719046941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663719047011} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: medium +--- !u!224 &3784026663719047010 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663719047011} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026664002260999} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663719047011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663719047010} + - component: {fileID: 3784026663719046940} + - component: {fileID: 3784026663719046941} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663762664708 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663762664715} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663762664709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663762664715} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663762664714 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663762664715} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664384146796} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 289.1} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663762664715 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663762664714} + - component: {fileID: 3784026663762664708} + - component: {fileID: 3784026663762664709} + m_Layer: 5 + m_Name: 3Dots (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663781668048 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663781668054} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663781668049 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663781668054} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664384146796} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1080, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3784026663781668051 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663781668054} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663781668054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663781668049} + - component: {fileID: 3784026663781668051} + - component: {fileID: 3784026663781668048} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663786298085 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663786298088} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663786298088 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663786298091} + - component: {fileID: 3784026663786298085} + - component: {fileID: 3784026663786298090} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663786298090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663786298088} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 60 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: PRESETS +--- !u!224 &3784026663786298091 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663786298088} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 3784026662866812936} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 540, y: -45} + m_SizeDelta: {x: 980, y: 50} + m_Pivot: {x: 0.5, y: 1} +--- !u!225 &3784026663914626032 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663914626038} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!224 &3784026663914626033 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663914626038} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 3784026664626332523} + m_Father: {fileID: 3784026663338523929} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -616.5} + m_SizeDelta: {x: 0, y: -966.57} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3784026663914626035 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663914626038} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663914626038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663914626033} + - component: {fileID: 3784026663914626035} + - component: {fileID: 3784026663914626032} + m_Layer: 5 + m_Name: Contents + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3784026663915896656 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663915896660} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663150372156} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1024, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026663915896657 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663915896660} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663915896660 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663915896656} + - component: {fileID: 3784026663915896657} + - component: {fileID: 3784026663915896662} + - component: {fileID: 3784026663915896663} + m_Layer: 5 + m_Name: LogoVibrations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663915896662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663915896660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ef74e6b52dfbf9a4cba77e1fde4584d4, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3784026663915896663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663915896660} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 109aed369f1d8af47948f3f6aafbdbdc, type: 3} + m_Name: + m_EditorClassIdentifier: + Amplitude: 8 + Frequency: 25 + Shaking: 0 +--- !u!222 &3784026663975718529 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663975718532} + m_CullTransparentMesh: 0 +--- !u!1 &3784026663975718532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663975718535} + - component: {fileID: 3784026663975718529} + - component: {fileID: 3784026663975718534} + m_Layer: 5 + m_Name: 3Dots (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026663975718534 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663975718532} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026663975718535 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663975718532} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664384146796} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 98, y: 289.0999} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &3784026663989662476 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663989662477} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026662896940975} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -98, y: 208} + m_SizeDelta: {x: 128, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026663989662477 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026663989662476} + - component: {fileID: 3784026663989662478} + - component: {fileID: 3784026663989662479} + m_Layer: 5 + m_Name: 3Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026663989662478 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663989662477} + m_CullTransparentMesh: 0 +--- !u!114 &3784026663989662479 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026663989662477} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ae832dcdd98f8f44f979034fbe2b302e, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3784026664002260992 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664002260996} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &3784026664002260993 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664002260996} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &3784026664002260995 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664002260996} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664002260996 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664002260999} + - component: {fileID: 3784026664002260995} + - component: {fileID: 3784026664002260992} + - component: {fileID: 3784026664002260993} + - component: {fileID: 3784026664002260998} + m_Layer: 5 + m_Name: Button8 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664002260998 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664002260996} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: MediumButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 8 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!224 &3784026664002260999 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664002260996} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026663719047010} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 466.2, y: 93.2} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026664041498544 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664041498551} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664041498545 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664041498551} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: rigid +--- !u!224 &3784026664041498550 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664041498551} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026662810863252} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664041498551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664041498550} + - component: {fileID: 3784026664041498544} + - component: {fileID: 3784026664041498545} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3784026664090310344 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664090310345} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663294962216} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664090310345 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664090310344} + - component: {fileID: 3784026664090310346} + - component: {fileID: 3784026664090310347} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026664090310346 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664090310345} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664090310347 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664090310345} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.6, b: 0.16862746, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &3784026664117484664 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664117484671} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3784026664117484665 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664117484671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdac5e74bb2234a4aa365592aa547afb, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026664117484665} + m_MethodName: SwitchState + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 0 + PressedColor: {r: 1, g: 1, b: 1, a: 1} + LerpColor: 0 + LerpColorDuration: 0.2 + LerpColorCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 + SwitchKnob: {fileID: 3784026663059124764} + InitialState: 1 + OffPosition: {fileID: 3784026663165966268} + OnPosition: {fileID: 3784026663612586984} + KnobMovementCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.032579493 + value: 0.110636555 + inSlope: -0.9729152 + outSlope: -0.9729152 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.10410576 + value: -0.038894057 + inSlope: 1.9163233 + outSlope: 1.9163233 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.8045506 + value: 1.0685679 + inSlope: 0.36404324 + outSlope: 0.36404324 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.89572954 + value: 0.9231454 + inSlope: -0.57169765 + outSlope: -0.57169765 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + KnobMovementDuration: 0.2 + SwitchOn: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026664543407717} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOn + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 1 + m_CallState: 2 + SwitchOff: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026664543407717} + m_MethodName: SetActive + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1183418718} + m_MethodName: TurnHapticsOff + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1702885564} + m_MethodName: set_hapticsEnabled + m_Mode: 6 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!222 &3784026664117484666 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664117484671} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664117484667 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664117484671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664117484670 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664117484671} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3784026664200002619} + - {fileID: 3784026663466351915} + - {fileID: 3784026663059124765} + - {fileID: 3784026664543407716} + - {fileID: 3784026663165966268} + - {fileID: 3784026663612586984} + m_Father: {fileID: 3784026662896940975} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -210, y: 165} + m_SizeDelta: {x: 140, y: 140} + m_Pivot: {x: 1, y: 1} +--- !u!1 &3784026664117484671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664117484670} + - component: {fileID: 3784026664117484666} + - component: {fileID: 3784026664117484667} + - component: {fileID: 3784026664117484664} + - component: {fileID: 3784026664117484665} + m_Layer: 5 + m_Name: HapticSwitch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664128378032 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664128378036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.8113208, g: 0.42014825, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &3784026664128378033 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664128378036} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &3784026664128378035 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664128378036} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664128378036 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664128378039} + - component: {fileID: 3784026664128378035} + - component: {fileID: 3784026664128378032} + - component: {fileID: 3784026664128378033} + - component: {fileID: 3784026664128378038} + m_Layer: 5 + m_Name: BackButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664128378038 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664128378036} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1183418718} + m_MethodName: PreviousPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.6415094, g: 0.22606257, b: 0, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!224 &3784026664128378039 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664128378036} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 3784026663165127444} + - {fileID: 3784026664510438386} + m_Father: {fileID: 3784026664384146796} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 0, y: 0} +--- !u!222 &3784026664163158900 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664163158905} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664163158901 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664163158905} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.8113208, g: 0.42014825, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664163158904 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664163158905} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99990004, y: 0.99990004, z: 0.99990004} + m_Children: + - {fileID: 3784026664838927015} + - {fileID: 3784026663379551378} + m_Father: {fileID: 3784026664384146796} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -50, y: 100} + m_SizeDelta: {x: 480, y: 150} + m_Pivot: {x: 1, y: 0} +--- !u!1 &3784026664163158905 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664163158904} + - component: {fileID: 3784026664163158900} + - component: {fileID: 3784026664163158901} + - component: {fileID: 3784026664163158906} + - component: {fileID: 3784026664163158907} + m_Layer: 5 + m_Name: NextButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!225 &3784026664163158906 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664163158905} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3784026664163158907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664163158905} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 0} + m_MethodName: NextPage + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 0.6415094, g: 0.22606257, b: 0, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!222 &3784026664200002613 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664200002616} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664200002616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664200002619} + - component: {fileID: 3784026664200002613} + - component: {fileID: 3784026664200002618} + m_Layer: 5 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664200002618 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664200002616} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.6, b: 0.16862746, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: HAPTIC +--- !u!224 &3784026664200002619 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664200002616} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99991065, y: 0.99991065, z: 0.99991065} + m_Children: [] + m_Father: {fileID: 3784026664117484670} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3784026664229946633 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664229946636} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664229946636 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664229946639} + - component: {fileID: 3784026664229946633} + - component: {fileID: 3784026664229946638} + m_Layer: 5 + m_Name: 7Dots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664229946638 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664229946636} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 4f5279e4af3c4234b8aa5937637aeabd, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664229946639 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664229946636} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026662866812936} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -77.59961, y: -59.299988} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3784026664272574004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664272574010} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.2509804} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664272574005 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664272574010} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026662866812936} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -95} + m_SizeDelta: {x: 980, y: 20} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3784026664272574007 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664272574010} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664272574010 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664272574005} + - component: {fileID: 3784026664272574007} + - component: {fileID: 3784026664272574004} + m_Layer: 5 + m_Name: Separator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026664292110041 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664292110044} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664292110044 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664292110047} + - component: {fileID: 3784026664292110041} + - component: {fileID: 3784026664292110046} + m_Layer: 5 + m_Name: BoxPlay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664292110046 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664292110044} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.6, b: 0.16862746, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664292110047 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664292110044} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3784026663368956174} + - {fileID: 3784026663557231671} + - {fileID: 3784026664690177923} + - {fileID: 3784026663583276809} + - {fileID: 3784026662810863252} + - {fileID: 3784026663055660270} + - {fileID: 3784026664644721028} + - {fileID: 3784026664002260999} + - {fileID: 3784026664319535520} + m_Father: {fileID: 3784026664626332523} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: -470, y: 20} + m_SizeDelta: {x: 940, y: 520} + m_Pivot: {x: 0, y: 0} +--- !u!222 &3784026664319535196 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664319535521} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664319535197 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664319535521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664319535520 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664319535521} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026662977841886} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 778, y: 93.2} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664319535521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664319535520} + - component: {fileID: 3784026664319535196} + - component: {fileID: 3784026664319535197} + - component: {fileID: 3784026664319535522} + - component: {fileID: 3784026664319535523} + m_Layer: 5 + m_Name: Button9 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!225 &3784026664319535522 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664319535521} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3784026664319535523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664319535521} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: HeavyButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 9 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!224 &3784026664384146796 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664384146797} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000894, y: 1.0000894, z: 1.0000894} + m_Children: + - {fileID: 3784026663975718535} + - {fileID: 3784026663762664714} + - {fileID: 3784026663781668049} + - {fileID: 3784026664492645384} + - {fileID: 3784026664128378039} + - {fileID: 3784026664163158904} + - {fileID: 3784026664720771884} + m_Father: {fileID: 3784026663338523929} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 350} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &3784026664384146797 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664384146796} + - component: {fileID: 3784026664384146798} + - component: {fileID: 3784026664384146799} + m_Layer: 5 + m_Name: Footer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026664384146798 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664384146797} + m_CullTransparentMesh: 0 +--- !u!225 &3784026664384146799 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664384146797} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &3784026664436840692 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664436840699} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664436840693 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664436840699} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: soft +--- !u!224 &3784026664436840698 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664436840699} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026663055660270} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664436840699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664436840698} + - component: {fileID: 3784026664436840692} + - component: {fileID: 3784026664436840693} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3784026664492645384 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664492645385} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99989974, y: 0.99989974, z: 0.99989974} + m_Children: [] + m_Father: {fileID: 3784026664384146796} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -115.9} + m_SizeDelta: {x: 1024, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664492645385 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664492645384} + - component: {fileID: 3784026664492645386} + - component: {fileID: 3784026664492645387} + m_Layer: 5 + m_Name: DotsBottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026664492645386 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664492645385} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664492645387 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664492645385} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 201a3f0fd44444e4da86b3ded7f4448f, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &3784026664510438380 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664510438387} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664510438381 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664510438387} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Emphasis +--- !u!224 &3784026664510438386 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664510438387} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026664128378039} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664510438387 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664510438386} + - component: {fileID: 3784026664510438380} + - component: {fileID: 3784026664510438381} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &3784026664515401080 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664515401083} + - component: {fileID: 3784026664515401082} + m_Layer: 5 + m_Name: DebugContinuous + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!82 &3784026664515401082 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664515401080} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 8300000, guid: c0ab2419d02d5f54690ac6db3a5188cb, type: 3} + m_PlayOnAwake: 0 + m_Volume: 1 + m_Pitch: 1 + Loop: 1 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!224 &3784026664515401083 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664515401080} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663628395008} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &3784026664543407716 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664543407717} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664117484670} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664543407717 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664543407716} + - component: {fileID: 3784026664543407718} + - component: {fileID: 3784026664543407719} + m_Layer: 5 + m_Name: HapticSwitchIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026664543407718 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664543407717} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664543407719 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664543407717} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.6, b: 0.16862746, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: be6473d4dcaac484a90412f8114f307c, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &3784026664626332517 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664626332520} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664626332520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664626332523} + - component: {fileID: 3784026664626332517} + - component: {fileID: 3784026664626332522} + m_Layer: 5 + m_Name: ContentsBg + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664626332522 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664626332520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664626332523 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664626332520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.000066, y: 1.000066, z: 1.000066} + m_Children: + - {fileID: 3784026663715991024} + - {fileID: 3784026664292110047} + m_Father: {fileID: 3784026663914626033} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -15} + m_SizeDelta: {x: -100, y: -53} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &3784026664644721024 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664644721029} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664644721025 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664644721029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664644721028 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664644721029} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026663659348837} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 160, y: 93.2} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664644721029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664644721028} + - component: {fileID: 3784026664644721024} + - component: {fileID: 3784026664644721025} + - component: {fileID: 3784026664644721030} + - component: {fileID: 3784026664644721031} + m_Layer: 5 + m_Name: Button7 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!225 &3784026664644721030 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664644721029} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &3784026664644721031 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664644721029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: LightButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 7 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!1 &3784026664683927682 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664683927741} + - component: {fileID: 3784026664683927743} + - component: {fileID: 3784026664683927740} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664683927740 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664683927682} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Success +--- !u!224 &3784026664683927741 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664683927682} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026663557231671} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026664683927743 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664683927682} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664690177920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664690177923} + - component: {fileID: 3784026664690177983} + - component: {fileID: 3784026664690177980} + - component: {fileID: 3784026664690177981} + - component: {fileID: 3784026664690177922} + m_Layer: 5 + m_Name: Button3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664690177922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664690177920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98d97271f03727a4f93fa3baff1ea05f, type: 3} + m_Name: + m_EditorClassIdentifier: + ButtonPressedFirstTime: + m_PersistentCalls: + m_Calls: [] + ButtonReleased: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 3784026663338523928} + m_MethodName: WarningButton + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 3 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + ButtonPressed: + m_PersistentCalls: + m_Calls: [] + DisabledSprite: {fileID: 0} + PressedSprite: {fileID: 0} + HighlightedSprite: {fileID: 0} + PressedChangeColor: 1 + PressedColor: {r: 1, g: 0.94281703, b: 0.33725488, a: 1} + LerpColor: 1 + LerpColorDuration: 0.1 + LerpColorCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 2 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + PressedOpacity: 1 + IdleOpacity: 1 + DisabledOpacity: 1 + PressedFirstTimeDelay: 0 + ReleasedDelay: 0 + BufferDuration: 0 + Animator: {fileID: 0} + IdleAnimationParameterName: Idle + DisabledAnimationParameterName: Disabled + PressedAnimationParameterName: Pressed + MouseMode: 1 +--- !u!224 &3784026664690177923 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664690177920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: + - {fileID: 3784026663117260973} + m_Father: {fileID: 3784026664292110047} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 778, y: 425} + m_SizeDelta: {x: 286, y: 146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3784026664690177980 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664690177920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.8862746, b: 0.33333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!225 &3784026664690177981 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664690177920} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!222 &3784026664690177983 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664690177920} + m_CullTransparentMesh: 0 +--- !u!222 &3784026664697362192 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664697362199} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664697362193 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664697362199} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: Selection +--- !u!224 &3784026664697362198 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664697362199} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026663368956174} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664697362199 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664697362198} + - component: {fileID: 3784026664697362192} + - component: {fileID: 3784026664697362193} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664711441488 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664711441494} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.6, b: 0.16862746, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664711441489 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664711441494} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663338523929} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026664711441491 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664711441494} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664711441494 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664711441489} + - component: {fileID: 3784026664711441491} + - component: {fileID: 3784026664711441488} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3784026664711944720 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664711944721} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3784026662977052265} + m_Father: {fileID: 3784026663715991024} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 20, y: -20} + m_SizeDelta: {x: -40, y: -40} + m_Pivot: {x: 0, y: 1} +--- !u!1 &3784026664711944721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664711944720} + - component: {fileID: 3784026664711944722} + - component: {fileID: 3784026664711944723} + m_Layer: 5 + m_Name: BoxCurve + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026664711944722 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664711944721} + m_CullTransparentMesh: 0 +--- !u!114 &3784026664711944723 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664711944721} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664720771884 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664720771885} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026664384146796} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 115} + m_SizeDelta: {x: 0, y: -270} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664720771885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664720771884} + - component: {fileID: 3784026664720771886} + - component: {fileID: 3784026664720771887} + m_Layer: 5 + m_Name: PaginationContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664720771886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664720771885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 10 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &3784026664720771887 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664720771885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7719238c9686c2645a6b5a89cba3de35, type: 3} + m_Name: + m_EditorClassIdentifier: + PaginationDotPrefab: {fileID: 7753230961564595917, guid: 844721accbc9f5744adc1f72590ea4f5, + type: 3} + ActiveColor: {r: 0, g: 0, b: 0, a: 0} + InactiveColor: {r: 0, g: 0, b: 0, a: 0} +--- !u!222 &3784026664838927009 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664838927012} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664838927012 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664838927015} + - component: {fileID: 3784026664838927009} + - component: {fileID: 3784026664838927014} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664838927014 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664838927012} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 94f43f82d46dcdb4db47e75f6c65be01, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!224 &3784026664838927015 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664838927012} + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000107, y: 1.0000107, z: 1.0000107} + m_Children: [] + m_Father: {fileID: 3784026664163158904} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 186, y: 0} + m_SizeDelta: {x: 64, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3784026664876402997 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664876403003} + m_CullTransparentMesh: 0 +--- !u!224 &3784026664876403002 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664876403003} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 3784026663294962216} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 128, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &3784026664876403003 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664876403002} + - component: {fileID: 3784026664876402997} + m_Layer: 5 + m_Name: HapticSwitchKnobOffPosition + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!222 &3784026664892237229 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664892237232} + m_CullTransparentMesh: 0 +--- !u!1 &3784026664892237232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3784026664892237235} + - component: {fileID: 3784026664892237229} + - component: {fileID: 3784026664892237234} + m_Layer: 5 + m_Name: ButtonTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3784026664892237234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664892237232} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 40 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 4 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 0.9 + m_Text: failure +--- !u!224 &3784026664892237235 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784026664892237232} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.9999891, y: 0.9999891, z: 0.9999891} + m_Children: [] + m_Father: {fileID: 3784026663583276809} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -5.0999985} + m_SizeDelta: {x: 0, y: -10.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4047011438662550916 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011438662551160} + m_CullTransparentMesh: 0 +--- !u!114 &4047011438662550919 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011438662551160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.098039225, g: 0.098039225, b: 0.098039225, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 1a3d766705e8fce41bcaa2921051a083, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4047011438662551160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4047011438662551161} + - component: {fileID: 4047011438662550916} + - component: {fileID: 4047011438662550919} + - component: {fileID: 2094352685} + m_Layer: 5 + m_Name: ProgressBarBack + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4047011438662551161 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011438662551160} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4047011438961640281} + m_Father: {fileID: 4047011439017046467} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &4047011438961640280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4047011438961640281} + - component: {fileID: 4047011438961640295} + - component: {fileID: 4047011438961640294} + m_Layer: 5 + m_Name: ProgressBarFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4047011438961640281 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011438961640280} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4047011438662551161} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &4047011438961640294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011438961640280} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &4047011438961640295 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011438961640280} + m_CullTransparentMesh: 0 +--- !u!114 &4047011439017046464 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439017046466} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1, type: 3} + m_Name: + m_EditorClassIdentifier: + StartValue: 0 + EndValue: 1 + BarDirection: 3 + FillMode: 0 + TimeScale: 0 + LerpForegroundBar: 1 + LerpForegroundBarSpeed: 15 + Delay: 1 + LerpDelayedBar: 1 + LerpDelayedBarSpeed: 15 + PlayerID: + DelayedBar: {fileID: 0} + ForegroundBar: {fileID: 4047011438961640281} + BumpScaleOnChange: 0 + BumpOnIncrease: 0 + BumpDuration: 0.2 + ChangeColorWhenBumping: 1 + BumpColor: {r: 1, g: 1, b: 1, a: 1} + BumpAnimationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.3 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + BumpColorAnimationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AutoUpdating: 0 + BarProgress: 0 +--- !u!114 &4047011439017046465 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439017046466} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.098039225, g: 0.098039225, b: 0.098039225, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 1a3d766705e8fce41bcaa2921051a083, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4047011439017046466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4047011439017046467} + - component: {fileID: 4047011439017046478} + - component: {fileID: 4047011439017046465} + - component: {fileID: 4047011439017046464} + m_Layer: 5 + m_Name: CarProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4047011439017046467 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439017046466} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4047011438662551161} + m_Father: {fileID: 975894758} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 40, y: 40} + m_SizeDelta: {x: -80, y: -148.7} + m_Pivot: {x: 0, y: 0} +--- !u!222 &4047011439017046478 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439017046466} + m_CullTransparentMesh: 0 +--- !u!1001 &4047011440181609135 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1548988332} + m_Modifications: + - target: {fileID: 4047011439214917864, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Enabled + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.x + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -240 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917866, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439214917867, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Name + value: AmplitudeVerticalProgressBar + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Type + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.b + value: 0.3372549 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.g + value: 0.78823537 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Color.r + value: 0.9960785 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_Material + value: + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740559, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_UseSpriteMesh + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740592, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -60.000004 + objectReference: {fileID: 0} + - target: {fileID: 4047011439302740593, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchorMin.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4047011439674249040, guid: a34261c2adaebf04a843bbcd2393bc03, + type: 3} + propertyPath: m_AnchoredPosition.x + value: -59.999985 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a34261c2adaebf04a843bbcd2393bc03, type: 3} +--- !u!1001 &6194878424446773133 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1095553369} + m_Modifications: + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: -150 + objectReference: {fileID: 0} + - target: {fileID: 6194878422744491294, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -41 + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953752, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Text + value: AMPLITUDE + objectReference: {fileID: 0} + - target: {fileID: 6194878423451953753, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 42.660156 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245064, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Name + value: VerticalSliderComponentAmplitude + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Pivot.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.x + value: 180 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_SizeDelta.y + value: -70 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 20 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878423499245067, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424033597846, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_Value + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_MaxValue + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 278291184} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: UpdateContinuousAmplitude + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781398, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_OnValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + - target: {fileID: 6194878424632781399, guid: d76991629602e0d4481b47f5707daafe, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -70.00003 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d76991629602e0d4481b47f5707daafe, type: 3} diff --git a/Assets/Feel/NiceVibrations/Demo/NiceVibrationsDemo.unity.meta b/Assets/Feel/NiceVibrations/Demo/NiceVibrationsDemo.unity.meta new file mode 100644 index 0000000..7f50eac --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/NiceVibrationsDemo.unity.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a40d966b5d8df3140955c23cdc4994c8 +timeCreated: 1514918307 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common.meta b/Assets/Feel/NiceVibrations/Demo/_Common.meta new file mode 100644 index 0000000..05626ab --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 795e8f5294d1f7042b44a31b5f607553 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts.meta new file mode 100644 index 0000000..c659856 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f20992f052bfca241aa0372252aa9935 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/BIG JOHN.otf b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/BIG JOHN.otf new file mode 100644 index 0000000..17fcbac Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/BIG JOHN.otf differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/BIG JOHN.otf.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/BIG JOHN.otf.meta new file mode 100644 index 0000000..f9af215 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/BIG JOHN.otf.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 7015f2d2ce595844e9fe6e0c3bd8d27b +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Big John + fontNames: + - Big John + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Bold.ttf b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Bold.ttf new file mode 100644 index 0000000..482f028 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Bold.ttf differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Bold.ttf.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Bold.ttf.meta new file mode 100644 index 0000000..65f83b2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Bold.ttf.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 34202502ade0b824f87ab4b85049f0c4 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Roboto Mono + fontNames: + - Roboto Mono + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Light.ttf b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Light.ttf new file mode 100644 index 0000000..3c845d4 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Light.ttf differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Light.ttf.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Light.ttf.meta new file mode 100644 index 0000000..5a9b5a6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Light.ttf.meta @@ -0,0 +1,24 @@ +fileFormatVersion: 2 +guid: a1bc3be25cbcd914ab881b9f55281c1f +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Roboto Mono + fontNames: + - Roboto Mono + fallbackFontReferences: + - {fileID: 12800000, guid: 34202502ade0b824f87ab4b85049f0c4, type: 3} + - {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Medium.ttf b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Medium.ttf new file mode 100644 index 0000000..c496725 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Medium.ttf differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Medium.ttf.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Medium.ttf.meta new file mode 100644 index 0000000..ff9a23f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Medium.ttf.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 6c4b3165b37dc7046901fc3d4a0fcce5 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Roboto Mono + fontNames: + - Roboto Mono + fallbackFontReferences: + - {fileID: 12800000, guid: 34202502ade0b824f87ab4b85049f0c4, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Regular.ttf b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Regular.ttf new file mode 100644 index 0000000..5919b5d Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Regular.ttf differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Regular.ttf.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Regular.ttf.meta new file mode 100644 index 0000000..4ea439f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Fonts/RobotoMono-Regular.ttf.meta @@ -0,0 +1,25 @@ +fileFormatVersion: 2 +guid: aa35aec7f2cbcf44a8eb564cd037f319 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Roboto Mono + fontNames: + - Roboto Mono + fallbackFontReferences: + - {fileID: 12800000, guid: 34202502ade0b824f87ab4b85049f0c4, type: 3} + - {fileID: 12800000, guid: a1bc3be25cbcd914ab881b9f55281c1f, type: 3} + - {fileID: 12800000, guid: 6c4b3165b37dc7046901fc3d4a0fcce5, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs.meta new file mode 100644 index 0000000..d69dcf3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fbfeb9bef5a6cd408b48bfbfcc62714 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/HorizontalSliderComponent.prefab b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/HorizontalSliderComponent.prefab new file mode 100644 index 0000000..6be927d --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/HorizontalSliderComponent.prefab @@ -0,0 +1,350 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7779948047723792033 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7779948047723792062} + - component: {fileID: 7779948047723792060} + - component: {fileID: 7779948047723792063} + m_Layer: 5 + m_Name: SliderKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7779948047723792062 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047723792033} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7779948047982209357} + m_Father: {fileID: 7779948048530778526} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: -28} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &7779948047723792060 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047723792033} + m_CullTransparentMesh: 0 +--- !u!114 &7779948047723792063 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047723792033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &7779948047778633629 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7779948047778633626} + - component: {fileID: 7779948047778633624} + - component: {fileID: 7779948047778633627} + m_Layer: 5 + m_Name: SliderBackground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7779948047778633626 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047778633629} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7779948048372923779} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7779948047778633624 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047778633629} + m_CullTransparentMesh: 0 +--- !u!114 &7779948047778633627 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047778633629} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.5019608} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &7779948047982209356 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7779948047982209357} + - component: {fileID: 7779948047982209355} + - component: {fileID: 7779948047982209354} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7779948047982209357 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047982209356} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7779948047723792062} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7779948047982209355 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047982209356} + m_CullTransparentMesh: 0 +--- !u!114 &7779948047982209354 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948047982209356} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11372549, g: 0.11372549, b: 0.11372549, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 34202502ade0b824f87ab4b85049f0c4, type: 3} + m_FontSize: 74 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 7 + m_MaxSize: 80 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: I +--- !u!1 &7779948048372923778 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7779948048372923779} + - component: {fileID: 7779948048372923776} + m_Layer: 5 + m_Name: SliderComponent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7779948048372923779 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948048372923778} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7779948047778633626} + - {fileID: 7779948048530778526} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 366, y: 684} + m_SizeDelta: {x: 636, y: 128} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7779948048372923776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948048372923778} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.9372549, g: 0.49803922, b: 0.30980393, a: 1} + m_HighlightedColor: {r: 0.9568628, g: 0.5921569, b: 0.3019608, a: 1} + m_PressedColor: {r: 0.95686275, g: 0.5921569, b: 0.3019608, a: 1} + m_SelectedColor: {r: 0.93725497, g: 0.49803925, b: 0.30980393, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 7779948047723792063} + m_FillRect: {fileID: 0} + m_HandleRect: {fileID: 7779948047723792062} + m_Direction: 0 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 1 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &7779948048530778497 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7779948048530778526} + m_Layer: 5 + m_Name: SliderArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7779948048530778526 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779948048530778497} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 7779948047723792062} + m_Father: {fileID: 7779948048372923779} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -48.997498, y: 0} + m_SizeDelta: {x: -130.005, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/HorizontalSliderComponent.prefab.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/HorizontalSliderComponent.prefab.meta new file mode 100644 index 0000000..f8f4542 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/HorizontalSliderComponent.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cb1d106a6a8f92545a95435a7687a886 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/PaginationDot.prefab b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/PaginationDot.prefab new file mode 100644 index 0000000..bb14d30 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/PaginationDot.prefab @@ -0,0 +1,75 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7753230961564595917 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7753230961564595918} + - component: {fileID: 7753230961564595920} + - component: {fileID: 7753230961564595919} + m_Layer: 5 + m_Name: PaginationDot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7753230961564595918 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7753230961564595917} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 32, y: 32} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7753230961564595920 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7753230961564595917} + m_CullTransparentMesh: 0 +--- !u!114 &7753230961564595919 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7753230961564595917} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 628a23d9e49377a4592b606b84550579, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/PaginationDot.prefab.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/PaginationDot.prefab.meta new file mode 100644 index 0000000..a200a7a --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/PaginationDot.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 844721accbc9f5744adc1f72590ea4f5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalProgressBar.prefab b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalProgressBar.prefab new file mode 100644 index 0000000..54cedb9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalProgressBar.prefab @@ -0,0 +1,322 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4047011439214917867 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4047011439214917866} + - component: {fileID: 4047011439214917863} + - component: {fileID: 4047011439214917864} + - component: {fileID: 4047011439214917865} + m_Layer: 5 + m_Name: VerticalProgressBar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4047011439214917866 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439214917867} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4047011439674249040} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 20, y: 20} + m_SizeDelta: {x: 60, y: 160} + m_Pivot: {x: 0, y: 0} +--- !u!222 &4047011439214917863 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439214917867} + m_CullTransparentMesh: 0 +--- !u!114 &4047011439214917864 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439214917867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.098039225, g: 0.098039225, b: 0.098039225, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 1a3d766705e8fce41bcaa2921051a083, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4047011439214917865 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439214917867} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1, type: 3} + m_Name: + m_EditorClassIdentifier: + StartValue: 0 + EndValue: 1 + BarDirection: 3 + FillMode: 1 + TimeScale: 0 + LerpForegroundBar: 1 + LerpForegroundBarSpeed: 15 + Delay: 1 + LerpDelayedBar: 1 + LerpDelayedBarSpeed: 15 + PlayerID: + DelayedBar: {fileID: 0} + ForegroundBar: {fileID: 4047011439302740592} + BumpScaleOnChange: 0 + BumpOnIncrease: 0 + BumpDuration: 0.2 + ChangeColorWhenBumping: 1 + BumpColor: {r: 1, g: 1, b: 1, a: 1} + BumpAnimationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0.3 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + BumpColorAnimationCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 0.3 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + AutoUpdating: 0 + BarProgress: 0 +--- !u!1 &4047011439302740593 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4047011439302740592} + - component: {fileID: 4047011439302740558} + - component: {fileID: 4047011439302740559} + m_Layer: 5 + m_Name: ProgressBarFront + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4047011439302740592 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439302740593} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4047011439674249040} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: -0.0000025035, y: 0} + m_SizeDelta: {x: 60, y: 160} + m_Pivot: {x: 0, y: 0} +--- !u!222 &4047011439302740558 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439302740593} + m_CullTransparentMesh: 0 +--- !u!114 &4047011439302740559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439302740593} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 2100000, guid: 32e98a8a48578634a93cc964a2f2c9b5, type: 2} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 0997c47bcd1429d42abe9c77bb947b44, type: 3} + m_Type: 3 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 1 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4047011439674249041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4047011439674249040} + - component: {fileID: 4047011439674248365} + - component: {fileID: 4047011439674248366} + m_Layer: 5 + m_Name: ProgressBarBack + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4047011439674249040 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439674249041} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4047011439302740592} + m_Father: {fileID: 4047011439214917866} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0.00001335144, y: 0} + m_SizeDelta: {x: 60, y: 160} + m_Pivot: {x: 0, y: 0} +--- !u!222 &4047011439674248365 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439674249041} + m_CullTransparentMesh: 0 +--- !u!114 &4047011439674248366 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4047011439674249041} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.098039225, g: 0.098039225, b: 0.098039225, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 1a3d766705e8fce41bcaa2921051a083, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalProgressBar.prefab.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalProgressBar.prefab.meta new file mode 100644 index 0000000..d8d2f8c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalProgressBar.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a34261c2adaebf04a843bbcd2393bc03 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalSliderComponent.prefab b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalSliderComponent.prefab new file mode 100644 index 0000000..bc82037 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalSliderComponent.prefab @@ -0,0 +1,498 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &6194878422744491295 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6194878422744491294} + - component: {fileID: 6194878422744491288} + - component: {fileID: 6194878422744491289} + m_Layer: 5 + m_Name: SliderLine + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6194878422744491294 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878422744491295} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6194878423499245067} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 30, y: 503} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6194878422744491288 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878422744491295} + m_CullTransparentMesh: 0 +--- !u!114 &6194878422744491289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878422744491295} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06666667, g: 0.06666667, b: 0.06666667, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6194878423411780956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6194878423411780959} + - component: {fileID: 6194878423411780953} + - component: {fileID: 6194878423411780958} + m_Layer: 5 + m_Name: SliderKnobDecoration + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6194878423411780959 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423411780956} + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6194878423760641959} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.000030517578, y: 0} + m_SizeDelta: {x: 83, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6194878423411780953 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423411780956} + m_CullTransparentMesh: 0 +--- !u!114 &6194878423411780958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423411780956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.13333334} + m_RaycastTarget: 0 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 5e7828fe329b7c44da7a14782d96a96d, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6194878423451953758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6194878423451953753} + - component: {fileID: 6194878423451953755} + - component: {fileID: 6194878423451953752} + m_Layer: 5 + m_Name: SliderTitle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6194878423451953753 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423451953758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.99983394, y: 0.99983394, z: 0.99983394} + m_Children: [] + m_Father: {fileID: 6194878423499245067} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 42.66} + m_SizeDelta: {x: 180, y: 42.66} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &6194878423451953755 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423451953758} + m_CullTransparentMesh: 0 +--- !u!114 &6194878423451953752 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423451953758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 12800000, guid: 7015f2d2ce595844e9fe6e0c3bd8d27b, type: 3} + m_FontSize: 25 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 60 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: INTENSITY +--- !u!1 &6194878423499245064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6194878423499245067} + - component: {fileID: 6194878423499245061} + - component: {fileID: 6194878423499245066} + m_Layer: 5 + m_Name: VerticalSliderComponent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6194878423499245067 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423499245064} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6194878423451953753} + - {fileID: 6194878422744491294} + - {fileID: 6194878424632781399} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 20, y: 20} + m_SizeDelta: {x: 180, y: 543} + m_Pivot: {x: 0, y: 0} +--- !u!222 &6194878423499245061 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423499245064} + m_CullTransparentMesh: 0 +--- !u!114 &6194878423499245066 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423499245064} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.13333334, g: 0.13333334, b: 0.13333334, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6194878423760641956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6194878423760641959} + - component: {fileID: 6194878423760641953} + - component: {fileID: 6194878423760641958} + m_Layer: 5 + m_Name: SliderKnob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6194878423760641959 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423760641956} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6194878423411780959} + m_Father: {fileID: 6194878424033597846} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 50} + m_SizeDelta: {x: 140, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6194878423760641953 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423760641956} + m_CullTransparentMesh: 0 +--- !u!114 &6194878423760641958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878423760641956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: a6ae458264a4a8e42a10f166c8becc96, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6194878424033597847 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6194878424033597846} + m_Layer: 5 + m_Name: KnobContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6194878424033597846 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878424033597847} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6194878423760641959} + m_Father: {fileID: 6194878424632781399} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 20} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 0} +--- !u!1 &6194878424632781396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6194878424632781399} + - component: {fileID: 6194878424632781398} + m_Layer: 5 + m_Name: SliderArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6194878424632781399 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878424632781396} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6194878424033597846} + m_Father: {fileID: 6194878423499245067} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -70} + m_SizeDelta: {x: -40, y: -140} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6194878424632781398 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6194878424632781396} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + m_HighlightedColor: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_PressedColor: {r: 1, g: 0.9411765, b: 0.3372549, a: 1} + m_SelectedColor: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + m_DisabledColor: {r: 1, g: 0.79215693, b: 0.3372549, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6194878423760641958} + m_FillRect: {fileID: 0} + m_HandleRect: {fileID: 6194878424033597846} + m_Direction: 2 + m_MinValue: 0 + m_MaxValue: 1 + m_WholeNumbers: 0 + m_Value: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalSliderComponent.prefab.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalSliderComponent.prefab.meta new file mode 100644 index 0000000..e53b404 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Prefabs/VerticalSliderComponent.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d76991629602e0d4481b47f5707daafe +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts.meta new file mode 100644 index 0000000..f656131 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c99361e2a382ce46a4ea47bf037df18 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/DemoManager.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/DemoManager.cs new file mode 100644 index 0000000..90d4e05 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/DemoManager.cs @@ -0,0 +1,16 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + public class DemoManager : MonoBehaviour + { + [Header("Demo")] + public AudioSource DebugAudioEmphasis; + public AudioSource DebugAudioContinuous; + public MMUIShaker Logo; + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/DemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/DemoManager.cs.meta new file mode 100644 index 0000000..50dda12 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/DemoManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d17be13a510eb8d4e9143fc087d48ac8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/NiceVibrationsDemoHelpers.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/NiceVibrationsDemoHelpers.cs new file mode 100644 index 0000000..1bea6c4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/NiceVibrationsDemoHelpers.cs @@ -0,0 +1,24 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + public static class NiceVibrationsDemoHelpers + { + public static float Round(float value, int digits) + { + float mult = Mathf.Pow(10.0f, (float)digits); + return Mathf.Round(value * mult) / mult; + } + + public static float Remap(float x, float A, float B, float C, float D) + { + float remappedValue = C + (x - A) / (B - A) * (D - C); + return remappedValue; + } + } + +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/NiceVibrationsDemoHelpers.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/NiceVibrationsDemoHelpers.cs.meta new file mode 100644 index 0000000..c0ceddb --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/NiceVibrationsDemoHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b4ed85a472548245acff2bf62a492b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/SoundSwitch.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/SoundSwitch.cs new file mode 100644 index 0000000..165a6fc --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/SoundSwitch.cs @@ -0,0 +1,34 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + public class SoundSwitch : MonoBehaviour + { + public V2DemoManager DemoManager; + + protected MMSwitch _switch; + + protected virtual void Awake() + { + _switch = this.gameObject.GetComponent(); + } + + protected virtual void OnEnable() + { + if (DemoManager.SoundActive) + { + _switch.CurrentSwitchState = MMSwitch.SwitchStates.On; + _switch.InitializeState(); + } + else + { + _switch.CurrentSwitchState = MMSwitch.SwitchStates.Off; + _switch.InitializeState(); + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/SoundSwitch.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/SoundSwitch.cs.meta new file mode 100644 index 0000000..c5e95ed --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/SoundSwitch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e91a9c36e72456e4db171843272d8a2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI.meta new file mode 100644 index 0000000..43f4026 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db53aecfb6008cb4cac71d512dae5fe6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/HapticCurve.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/HapticCurve.cs new file mode 100644 index 0000000..a876787 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/HapticCurve.cs @@ -0,0 +1,95 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using System.Collections; +using System; +using UnityEngine.UI; +using System.Collections.Generic; +using UnityEngine.Events; + +namespace Lofelt.NiceVibrations +{ + public class HapticCurve : MonoBehaviour + { + [Range(0f, 1f)] + public float Amplitude = 1f; + [Range(0f, 1f)] + public float Frequency = 0f; + public int PointsCount = 50; + public float AmplitudeFactor = 3; + [Range(1f, 4f)] + private float Period = 1; + public RectTransform StartPoint; + public RectTransform EndPoint; + + [Header("Movement")] + public bool Move = false; + public float MovementSpeed = 1f; + + protected LineRenderer _targetLineRenderer; + protected List Points; + + protected Canvas _canvas; + protected Camera _camera; + + protected Vector3 _startPosition; + protected Vector3 _endPosition; + protected Vector3 _workPoint; + + protected virtual void Awake() + { + Initialization(); + } + + protected virtual void Initialization() + { + Points = new List(); + _canvas = this.gameObject.GetComponentInParent(); + _targetLineRenderer = this.gameObject.GetComponent(); + _camera = _canvas.worldCamera; + DrawCurve(); + } + + protected virtual void DrawCurve() + { + _startPosition = StartPoint.transform.position; + _startPosition.z -= 0.1f; + _endPosition = EndPoint.transform.position; + _endPosition.z -= 0.1f; + + Points.Clear(); + + for (int i = 0; i < PointsCount; i++) + { + float t = NiceVibrationsDemoHelpers.Remap(i, 0, PointsCount, 0f, 1f); + float sinValue = MMSignal.GetValue(t, MMSignal.SignalType.Sine, 1f, AmplitudeFactor, Period, 0f, false); + + if (Move) + { + sinValue = MMSignal.GetValue(t + Time.time * MovementSpeed, MMSignal.SignalType.Sine, 1f, AmplitudeFactor, Period, 0f, false); + } + + _workPoint.x = Mathf.Lerp(_startPosition.x, _endPosition.x, t); + _workPoint.y = sinValue * Amplitude + _startPosition.y; + _workPoint.z = _startPosition.z; + Points.Add(_workPoint); + } + + _targetLineRenderer.positionCount = PointsCount; + _targetLineRenderer.SetPositions(Points.ToArray()); + } + + protected virtual void Update() + { + UpdateCurve(Amplitude, Frequency); + } + + public virtual void UpdateCurve(float amplitude, float frequency) + { + Amplitude = amplitude; + Frequency = frequency; + Period = NiceVibrationsDemoHelpers.Remap(frequency, 0f, 1f, 1f, 4f); + DrawCurve(); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/HapticCurve.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/HapticCurve.cs.meta new file mode 100644 index 0000000..d8ab4b9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/HapticCurve.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a81aea2b884ed3d4da5135acac404ba3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSCounter.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSCounter.cs new file mode 100644 index 0000000..be69d44 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSCounter.cs @@ -0,0 +1,97 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using UnityEngine.UI; +using System.Collections; + +namespace Lofelt.NiceVibrations +{ + [RequireComponent(typeof(Text))] + /// + /// Add this class to a gameObject with a Text component and it'll feed it the number of FPS in real time. + /// + public class MMFPSCounter : MonoBehaviour + { + /// + /// The frequency at which the FPS counter should update (in seconds) + /// + public float UpdateInterval = 0.3f; + + protected float _framesAccumulated = 0f; + protected float _framesDrawnInTheInterval = 0f; + protected float _timeLeft; + protected Text _text; + protected int _currentFPS; + + static string[] _stringsFrom00To300 = { + "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", + "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", + "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", + "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", + "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", + "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", + "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", + "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", + "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", + "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", + "100", "101", "102", "103", "104", "105", "106", "107", "108", "109", + "110", "111", "112", "113", "114", "115", "116", "117", "118", "119", + "120", "121", "122", "123", "124", "125", "126", "127", "128", "129", + "130", "131", "132", "133", "134", "135", "136", "137", "138", "139", + "140", "141", "142", "143", "144", "145", "146", "147", "148", "149", + "150", "151", "152", "153", "154", "155", "156", "157", "158", "159", + "160", "161", "162", "163", "164", "165", "166", "167", "168", "169", + "170", "171", "172", "173", "174", "175", "176", "177", "178", "179", + "180", "181", "182", "183", "184", "185", "186", "187", "188", "189", + "190", "191", "192", "193", "194", "195", "196", "197", "198", "199", + "200", "201", "202", "203", "204", "205", "206", "207", "208", "209", + "210", "211", "212", "213", "214", "215", "216", "217", "218", "219", + "220", "221", "222", "223", "224", "225", "226", "227", "228", "229", + "230", "231", "232", "233", "234", "235", "236", "237", "238", "239", + "240", "241", "242", "243", "244", "245", "246", "247", "248", "249", + "250", "251", "252", "253", "254", "255", "256", "257", "258", "259", + "260", "261", "262", "263", "264", "265", "266", "267", "268", "269", + "270", "271", "272", "273", "274", "275", "276", "277", "278", "279", + "280", "281", "282", "283", "284", "285", "286", "287", "288", "289", + "290", "291", "292", "293", "294", "295", "296", "297", "298", "299", + "300" + }; + + /// + /// On Start(), we get the Text component and initialize our counter + /// + protected virtual void Start() + { + if (GetComponent() == null) + { + Debug.LogWarning("FPSCounter requires a GUIText component."); + return; + } + _text = GetComponent(); + _timeLeft = UpdateInterval; + } + + /// + /// On Update, we increment our various counters, and if we've reached our UpdateInterval, we update our FPS counter + /// with the number of frames displayed since the last counter update + /// + protected virtual void Update() + { + _framesDrawnInTheInterval++; + _framesAccumulated = _framesAccumulated + Time.timeScale / Time.deltaTime; + _timeLeft = _timeLeft - Time.deltaTime; + + if (_timeLeft <= 0.0) + { + _currentFPS = (int)Mathf.Clamp(_framesAccumulated / _framesDrawnInTheInterval, 0, 300); + if (_currentFPS >= 0 && _currentFPS <= 300) + { + _text.text = _stringsFrom00To300[_currentFPS]; + } + _framesDrawnInTheInterval = 0; + _framesAccumulated = 0f; + _timeLeft = UpdateInterval; + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSCounter.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSCounter.cs.meta new file mode 100644 index 0000000..f1414b6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSCounter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a080b2252c3a59546a7462b0fb3ef79e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSUnlock.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSUnlock.cs new file mode 100644 index 0000000..eb73e84 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSUnlock.cs @@ -0,0 +1,45 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using UnityEngine.UI; +using System.Collections; + +namespace Lofelt.NiceVibrations +{ + /// + /// Add this component to any object and it'll set the target frame rate and vsync count. Note that vsync count must be 0 for the target FPS to work. + /// + public class MMFPSUnlock : MonoBehaviour + { + /// the target FPS you want the game to run at + public int TargetFPS; + [Range(0, 2)] + /// whether vsync should be enabled or not (on a 60Hz screen, 1 : 60fps, 2 : 30fps, 0 : don't wait for vsync) + public int VSyncCount = 0; + + /// + /// On start we change our target fps and vsync settings + /// + protected virtual void Start() + { + UpdateSettings(); + } + + /// + /// When a value gets changed in the editor, we update our settings + /// + protected virtual void OnValidate() + { + UpdateSettings(); + } + + /// + /// Updates the target frame rate value and vsync count setting + /// + protected virtual void UpdateSettings() + { + QualitySettings.vSyncCount = VSyncCount; + Application.targetFrameRate = TargetFPS; + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSUnlock.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSUnlock.cs.meta new file mode 100644 index 0000000..f79bb4c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMFPSUnlock.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ecb76331b2602f4ba888267530cbfce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMKnob.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMKnob.cs new file mode 100644 index 0000000..622df36 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMKnob.cs @@ -0,0 +1,125 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + [RequireComponent(typeof(Rect))] + public class MMKnob : MonoBehaviour, IPointerDownHandler, IPointerUpHandler + { + public RenderMode ParentCanvasRenderMode { get; protected set; } + + [Header("Bindings")] + public Camera TargetCamera; + + [Header("Settings")] + public float MinimumAngle = 45f; + public float MaximumAngle = -225f; + public float MaximumDistance = 50f; + public Color ActiveColor; + public Color InactiveColor; + + [Header("Output")] + public bool Dragging = false; + public float Value = 0f; + public bool Active = true; + + public Image _image; + protected PointerEventData _pointerEventData; + protected float _distance; + public RectTransform _rectTransform; + protected Vector3 _rotation = Vector3.zero; + protected Canvas _canvas; + protected Vector2 _workPosition; + + protected virtual void Awake() + { + _image = this.gameObject.GetComponent(); + _canvas = GetComponentInParent(); + ParentCanvasRenderMode = GetComponentInParent().renderMode; + _rectTransform = this.GetComponent(); + SetRotation(MinimumAngle); + } + + protected virtual void Update() + { + if (!Active) + { + Dragging = false; + _image.color = InactiveColor; + return; + } + else + { + _image.color = ActiveColor; + } + + if (!Dragging) + { + return; + } + + Vector2 v1 = Vector2.down; + Vector2 v2 = this.transform.position - GetWorldPosition(_pointerEventData.position); + + float angle = Vector2.SignedAngle(v1, v2); + + angle = Mathf.Clamp(angle, -130f, 130f); + + _rotation.z = NiceVibrationsDemoHelpers.Remap(angle, -130f, 130f, MaximumAngle, MinimumAngle); + _rectTransform.SetPositionAndRotation(this.transform.position, Quaternion.Euler(_rotation)); + + Value = NiceVibrationsDemoHelpers.Remap(angle, -130f, 130f, 1f, 0f); + } + + protected virtual void SetRotation(float angle) + { + angle = Mathf.Clamp(angle, MaximumAngle, MinimumAngle); + _rotation.z = angle; + _rectTransform.SetPositionAndRotation(this.transform.position, Quaternion.Euler(_rotation)); + } + + public virtual void SetActive(bool status) + { + Active = status; + } + + public virtual void SetValue(float value) + { + SetRotation(MinimumAngle); + Value = value; + float angle = NiceVibrationsDemoHelpers.Remap(value, 0f, 1f, MinimumAngle, MaximumAngle); + + _rotation.z = angle; + _rectTransform.SetPositionAndRotation(this.transform.position, Quaternion.Euler(_rotation)); + } + + public void OnPointerDown(PointerEventData eventData) + { + _pointerEventData = eventData; + Dragging = true; + } + + public void OnPointerUp(PointerEventData eventData) + { + _pointerEventData = null; + Dragging = false; + } + protected virtual Vector3 GetWorldPosition(Vector3 testPosition) + { + if (ParentCanvasRenderMode == RenderMode.ScreenSpaceCamera) + { + RectTransformUtility.ScreenPointToLocalPointInRectangle(_canvas.transform as RectTransform, testPosition, _canvas.worldCamera, out _workPosition); + return _canvas.transform.TransformPoint(_workPosition); + } + else + { + return testPosition; + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMKnob.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMKnob.cs.meta new file mode 100644 index 0000000..f89de23 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMKnob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 975863c8bb910594288081f50f6185aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMProgressBar.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMProgressBar.cs new file mode 100644 index 0000000..fc15197 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMProgressBar.cs @@ -0,0 +1,354 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using UnityEngine.UI; +using System.Collections; + +namespace Lofelt.NiceVibrations +{ + /// + /// Add this bar to an object and link it to a bar (possibly the same object the script is on), and you'll be able to resize the bar object based on a current value, located between a min and max value. + /// See the HealthBar.cs script for a use case + /// + public class MMProgressBar : MonoBehaviour + { + /// the possible fill modes + public enum FillModes { LocalScale, FillAmount, Width, Height } + /// the possible directions for the fill (for local scale and fill amount only) + public enum BarDirections { LeftToRight, RightToLeft, UpToDown, DownToUp } + /// the possible timescales the bar can work on + public enum TimeScales { UnscaledTime, Time } + + [Header("General Settings")] + /// the local scale or fillamount value to reach when the bar is empty + public float StartValue = 0f; + /// the local scale or fillamount value to reach when the bar is full + public float EndValue = 1f; + /// the direction this bar moves to + public BarDirections BarDirection = BarDirections.LeftToRight; + /// the foreground bar's fill mode + public FillModes FillMode = FillModes.LocalScale; + /// defines whether the bar will work on scaled or unscaled time (whether or not it'll keep moving if time is slowed down for example) + public TimeScales TimeScale = TimeScales.UnscaledTime; + + [Header("Foreground Bar Settings")] + /// whether or not the foreground bar should lerp + public bool LerpForegroundBar = true; + /// the speed at which to lerp the foreground bar + public float LerpForegroundBarSpeed = 15f; + + [Header("Delayed Bar Settings")] + /// the delay before the delayed bar moves (in seconds) + public float Delay = 1f; + /// whether or not the delayed bar's animation should lerp + public bool LerpDelayedBar = true; + /// the speed at which to lerp the delayed bar + public float LerpDelayedBarSpeed = 15f; + + [Header("Bindings")] + /// optional - the ID of the player associated to this bar + public string PlayerID; + /// the delayed bar + public Transform DelayedBar; + /// the main, foreground bar + public Transform ForegroundBar; + + [Header("Bump")] + /// whether or not the bar should "bump" when changing value + public bool BumpScaleOnChange = true; + /// whether or not the bar should bump when its value increases + public bool BumpOnIncrease = false; + /// the duration of the bump animation + public float BumpDuration = 0.2f; + /// whether or not the bar should flash when bumping + public bool ChangeColorWhenBumping = true; + /// the color to apply to the bar when bumping + public Color BumpColor = Color.white; + /// the curve to map the bump animation on + public AnimationCurve BumpAnimationCurve = new AnimationCurve(new Keyframe(1, 1), new Keyframe(0.3f, 1.05f), new Keyframe(1, 1)); + /// the curve to map the bump animation color animation on + public AnimationCurve BumpColorAnimationCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(0.3f, 1f), new Keyframe(1, 0)); + /// whether or not the bar is bumping right now + public bool Bumping { get; protected set; } + + [Header("Realtime")] + /// whether or not this progress bar should update itself every update (if not, you'll have to update it using the UpdateBar method + public bool AutoUpdating = false; + /// the current progress of the bar + [Range(0f, 1f)] + public float BarProgress; + + protected float _targetFill; + protected Vector3 _targetLocalScale = Vector3.one; + protected float _newPercent; + protected float _lastPercent; + protected float _lastUpdateTimestamp; + protected bool _bump = false; + protected Color _initialColor; + protected Vector3 _initialScale; + protected Vector3 _newScale; + protected Image _foregroundImage; + protected Image _delayedImage; + protected bool _initialized; + protected Vector2 _initialFrontBarSize; + + /// + /// On start we store our image component + /// + protected virtual void Start() + { + _initialScale = this.transform.localScale; + + if (ForegroundBar != null) + { + _foregroundImage = ForegroundBar.GetComponent(); + _initialFrontBarSize = _foregroundImage.rectTransform.sizeDelta; + } + if (DelayedBar != null) + { + _delayedImage = DelayedBar.GetComponent(); + } + _initialized = true; + } + + /// + /// On Update we update our bars + /// + protected virtual void Update() + { + AutoUpdate(); + UpdateFrontBar(); + UpdateDelayedBar(); + } + + protected virtual void AutoUpdate() + { + if (!AutoUpdating) + { + return; + } + + _newPercent = Remap(BarProgress, 0f, 1f, StartValue, EndValue); + _targetFill = _newPercent; + _lastUpdateTimestamp = (TimeScale == TimeScales.Time) ? Time.time : Time.unscaledTime; + } + + /// + /// Updates the front bar's scale + /// + protected virtual void UpdateFrontBar() + { + float currentDeltaTime = (TimeScale == TimeScales.Time) ? Time.deltaTime : Time.unscaledTime; + + if (ForegroundBar != null) + { + switch (FillMode) + { + case FillModes.LocalScale: + _targetLocalScale = Vector3.one; + switch (BarDirection) + { + case BarDirections.LeftToRight: + _targetLocalScale.x = _targetFill; + break; + case BarDirections.RightToLeft: + _targetLocalScale.x = 1f - _targetFill; + break; + case BarDirections.DownToUp: + _targetLocalScale.y = _targetFill; + break; + case BarDirections.UpToDown: + _targetLocalScale.y = 1f - _targetFill; + break; + } + + if (LerpForegroundBar) + { + _newScale = Vector3.Lerp(ForegroundBar.localScale, _targetLocalScale, currentDeltaTime * LerpForegroundBarSpeed); + } + else + { + _newScale = _targetLocalScale; + } + + ForegroundBar.localScale = _newScale; + break; + + case FillModes.Width: + if (_foregroundImage == null) + { + return; + } + float newSizeX = Remap(_targetFill, 0f, 1f, 0, _initialFrontBarSize.x); + newSizeX = Mathf.Lerp(_foregroundImage.rectTransform.sizeDelta.x, newSizeX, currentDeltaTime * LerpForegroundBarSpeed); + _foregroundImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, newSizeX); + break; + + case FillModes.Height: + if (_foregroundImage == null) + { + return; + } + float newSizeY = Remap(_targetFill, 0f, 1f, 0, _initialFrontBarSize.y); + newSizeY = Mathf.Lerp(_foregroundImage.rectTransform.sizeDelta.x, newSizeY, currentDeltaTime * LerpForegroundBarSpeed); + _foregroundImage.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, newSizeY); + break; + + case FillModes.FillAmount: + if (_foregroundImage == null) + { + return; + } + if (LerpForegroundBar) + { + _foregroundImage.fillAmount = Mathf.Lerp(_foregroundImage.fillAmount, _targetFill, currentDeltaTime * LerpForegroundBarSpeed); + } + else + { + _foregroundImage.fillAmount = _targetFill; + } + break; + } + } + } + + /// + /// Updates the delayed bar's scale + /// + protected virtual void UpdateDelayedBar() + { + float currentDeltaTime = (TimeScale == TimeScales.Time) ? Time.deltaTime : Time.unscaledDeltaTime; + float currentTime = (TimeScale == TimeScales.Time) ? Time.time : Time.unscaledTime; + + if (DelayedBar != null) + { + if (currentTime - _lastUpdateTimestamp > Delay) + { + if (FillMode == FillModes.LocalScale) + { + _targetLocalScale = Vector3.one; + + switch (BarDirection) + { + case BarDirections.LeftToRight: + _targetLocalScale.x = _targetFill; + break; + case BarDirections.RightToLeft: + _targetLocalScale.x = 1f - _targetFill; + break; + case BarDirections.DownToUp: + _targetLocalScale.y = _targetFill; + break; + case BarDirections.UpToDown: + _targetLocalScale.y = 1f - _targetFill; + break; + } + + if (LerpDelayedBar) + { + _newScale = Vector3.Lerp(DelayedBar.localScale, _targetLocalScale, currentDeltaTime * LerpDelayedBarSpeed); + } + else + { + _newScale = _targetLocalScale; + } + DelayedBar.localScale = _newScale; + } + + if ((FillMode == FillModes.FillAmount) && (_delayedImage != null)) + { + if (LerpDelayedBar) + { + _delayedImage.fillAmount = Mathf.Lerp(_delayedImage.fillAmount, _targetFill, currentDeltaTime * LerpDelayedBarSpeed); + } + else + { + _delayedImage.fillAmount = _targetFill; + } + } + } + } + } + + /// + /// Updates the bar's values based on the specified parameters + /// + /// Current value. + /// Minimum value. + /// Max value. + public virtual void UpdateBar(float currentValue, float minValue, float maxValue) + { + _newPercent = Remap(currentValue, minValue, maxValue, StartValue, EndValue); + if ((_newPercent != BarProgress) && !Bumping) + { + Bump(); + } + BarProgress = _newPercent; + _targetFill = _newPercent; + _lastUpdateTimestamp = (TimeScale == TimeScales.Time) ? Time.time : Time.unscaledTime; + _lastPercent = _newPercent; + } + + /// + /// Triggers a camera bump + /// + public virtual void Bump() + { + if (!BumpScaleOnChange || !_initialized) + { + return; + } + if (!BumpOnIncrease && (_lastPercent < _newPercent)) + { + return; + } + if (this.gameObject.activeInHierarchy) + { + StartCoroutine(BumpCoroutine()); + } + } + + /// + /// A coroutine that (usually quickly) changes the scale of the bar + /// + /// The coroutine. + protected virtual IEnumerator BumpCoroutine() + { + float journey = 0f; + float currentDeltaTime = (TimeScale == TimeScales.Time) ? Time.deltaTime : Time.unscaledDeltaTime; + + Bumping = true; + if (_foregroundImage != null) + { + _initialColor = _foregroundImage.color; + } + + while (journey <= BumpDuration) + { + journey = journey + currentDeltaTime; + float percent = Mathf.Clamp01(journey / BumpDuration); + float curvePercent = BumpAnimationCurve.Evaluate(percent); + float colorCurvePercent = BumpColorAnimationCurve.Evaluate(percent); + this.transform.localScale = curvePercent * _initialScale; + + if (ChangeColorWhenBumping && (_foregroundImage != null)) + { + _foregroundImage.color = Color.Lerp(_initialColor, BumpColor, colorCurvePercent); + } + + yield return null; + } + _foregroundImage.color = _initialColor; + Bumping = false; + yield return null; + + } + + + protected virtual float Remap(float x, float A, float B, float C, float D) + { + float remappedValue = C + (x - A) / (B - A) * (D - C); + return remappedValue; + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMProgressBar.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMProgressBar.cs.meta new file mode 100644 index 0000000..02afe3b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMProgressBar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d9a9c3b9b9947b4b9b6b42f381d6cc1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSignal.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSignal.cs new file mode 100644 index 0000000..c20961e --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSignal.cs @@ -0,0 +1,71 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + /// + /// This class lets you output the value corresponding to one of the basic signal types it contains. Useful to draw basic signal curves. + /// + public class MMSignal : MonoBehaviour + { + public enum SignalType + { + DigitalNoise, + Pulse, + Sawtooth, + Sine, + Square, + Triangle, + WhiteNoise + } + + /// + /// Returns the corresponding value based on the selected SignalType for a given time value + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static float GetValue(float time, SignalType signalType, float phase, float amplitude, float frequency, float offset, bool Invert = false) + { + float value = 0f; + float invert = Invert ? -1 : 1; + float t = frequency * time + phase; + + switch (signalType) + { + case SignalType.Sine: + value = (float)Mathf.Sin(2f * Mathf.PI * t); + break; + case SignalType.Square: + value = Mathf.Sign(Mathf.Sin(2f * Mathf.PI * t)); + break; + case SignalType.Triangle: + value = 1f - 4f * (float)Mathf.Abs(Mathf.Round(t - 0.25f) - (t - 0.25f)); + break; + case SignalType.Sawtooth: + value = 2f * (t - (float)Mathf.Floor(t + 0.5f)); + break; + case SignalType.Pulse: + value = (Mathf.Abs(Mathf.Sin(2 * Mathf.PI * t)) < 1.0 - 10E-3) ? (0) : (1); + break; + case SignalType.WhiteNoise: + value = 2f * Random.Range(0, int.MaxValue) / int.MaxValue - 1f; + break; + case SignalType.DigitalNoise: + value = Random.Range(0, 2); + break; + } + + return (invert * amplitude * value + offset); + } + } +} + diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSignal.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSignal.cs.meta new file mode 100644 index 0000000..267ac2b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSignal.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d76197e60487b7e46bf8b722dfde0a9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSpriteReplace.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSpriteReplace.cs new file mode 100644 index 0000000..2b9ff67 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSpriteReplace.cs @@ -0,0 +1,184 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using System.Collections; +using System; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + /// + /// A class to add to an Image or SpriteRenderer to have it act like a button with a different sprite for on and off states + /// + public class MMSpriteReplace : MonoBehaviour + { + + [Header("Sprites")] + + /// the sprite to use when in the "on" state + public Sprite OnSprite; + /// the sprite to use when in the "off" state + public Sprite OffSprite; + + [Header("Start settings")] + /// if this is true, the button will start if "on" state + public bool StartsOn = true; + + /// the current state of the button + public bool CurrentValue { get { return (_image.sprite == OnSprite); } } + + protected Image _image; + protected SpriteRenderer _spriteRenderer; + protected MMTouchButton _mmTouchButton; + + /// + /// On Start we initialize our button + /// + protected virtual void Start() + { + Initialization(); + } + + /// + /// On init, we grab our image component, and set our sprite in its initial state + /// + protected virtual void Initialization() + { + // grabs components + _image = GetComponent(); + _spriteRenderer = GetComponent(); + + // grabs button + _mmTouchButton = GetComponent(); + if (_mmTouchButton != null) + { + _mmTouchButton.ReturnToInitialSpriteAutomatically = false; + } + + // handles start + if ((OnSprite == null) || (OffSprite == null)) + { + return; + } + + if (_image != null) + { + if (StartsOn) + { + _image.sprite = OnSprite; + } + else + { + _image.sprite = OffSprite; + } + } + + if (_spriteRenderer != null) + { + if (StartsOn) + { + _spriteRenderer.sprite = OnSprite; + } + else + { + _spriteRenderer.sprite = OffSprite; + } + } + } + + /// + /// A public method to change the sprite + /// + public virtual void Swap() + { + if (_image != null) + { + if (_image.sprite != OnSprite) + { + SwitchToOnSprite(); + } + else + { + SwitchToOffSprite(); + } + } + + if (_spriteRenderer != null) + { + if (_spriteRenderer.sprite != OnSprite) + { + SwitchToOnSprite(); + } + else + { + SwitchToOffSprite(); + } + } + } + + /// + /// a public method to switch to off sprite directly + /// + public virtual void SwitchToOffSprite() + { + if ((_image == null) && (_spriteRenderer == null)) + { + return; + } + if (OffSprite == null) + { + return; + } + + SpriteOff(); + } + + /// + /// sets the image's sprite to off + /// + protected virtual void SpriteOff() + { + if (_image != null) + { + _image.sprite = OffSprite; + } + if (_spriteRenderer != null) + { + _spriteRenderer.sprite = OffSprite; + } + } + + /// + /// a public method to switch to on sprite directly + /// + public virtual void SwitchToOnSprite() + { + if ((_image == null) && (_spriteRenderer == null)) + { + return; + } + if (OnSprite == null) + { + return; + } + + SpriteOn(); + } + + /// + /// sets the image's sprite to on + /// + protected virtual void SpriteOn() + { + + if (_image != null) + { + _image.sprite = OnSprite; + } + if (_spriteRenderer != null) + { + _spriteRenderer.sprite = OnSprite; + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSpriteReplace.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSpriteReplace.cs.meta new file mode 100644 index 0000000..954f62c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSpriteReplace.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 516e3ec07e472164f97fd51ce17b13b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSwitch.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSwitch.cs new file mode 100644 index 0000000..5282d45 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSwitch.cs @@ -0,0 +1,122 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using System.Collections; +using System; +using UnityEngine.UI; +using System.Collections.Generic; +using UnityEngine.Events; + +namespace Lofelt.NiceVibrations +{ + /// + /// A component to handle switches + /// + public class MMSwitch : MMTouchButton + { + [Header("Switch")] + /// a SpriteReplace to represent the switch knob + public Image SwitchKnob; + /// the possible states of the switch + public enum SwitchStates { Off, On } + /// the current state of the switch + public SwitchStates CurrentSwitchState { get; set; } + + [Header("Knob")] + /// the state the switch should start in + public SwitchStates InitialState = SwitchStates.Off; + public Transform OffPosition; + public Transform OnPosition; + public AnimationCurve KnobMovementCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f); + public float KnobMovementDuration = 0.2f; + + [Header("Binding")] + /// the methods to call when the switch is turned on + public UnityEvent SwitchOn; + /// the methods to call when the switch is turned off + public UnityEvent SwitchOff; + + protected float _knobMovementStartedAt = -50f; + + /// + /// On init, we set our current switch state + /// + protected override void Initialization() + { + base.Initialization(); + CurrentSwitchState = InitialState; + InitializeState(); + } + + public virtual void InitializeState() + { + if (CurrentSwitchState == SwitchStates.Off) + { + if (_animator != null) + { + _animator.Play("RollLeft"); + } + SwitchKnob.transform.position = OffPosition.transform.position; + } + else + { + if (_animator != null) + { + _animator.Play("RollRight"); + } + SwitchKnob.transform.position = OnPosition.transform.position; + } + } + + protected override void Update() + { + base.Update(); + if (Time.time - _knobMovementStartedAt < KnobMovementDuration) + { + float time = Remap(Time.time - _knobMovementStartedAt, 0f, KnobMovementDuration, 0f, 1f); + float value = KnobMovementCurve.Evaluate(time); + + if (CurrentSwitchState == SwitchStates.Off) + { + SwitchKnob.transform.position = Vector3.Lerp(OnPosition.transform.position, OffPosition.transform.position, value); + } + else + { + SwitchKnob.transform.position = Vector3.Lerp(OffPosition.transform.position, OnPosition.transform.position, value); + } + } + } + + /// + /// Use this method to go from one state to the other + /// + public virtual void SwitchState() + { + _knobMovementStartedAt = Time.time; + if (CurrentSwitchState == SwitchStates.Off) + { + CurrentSwitchState = SwitchStates.On; + if (_animator != null) + { + _animator?.SetTrigger("Right"); + } + if (SwitchOn != null) + { + SwitchOn.Invoke(); + } + } + else + { + CurrentSwitchState = SwitchStates.Off; + if (_animator != null) + { + _animator?.SetTrigger("Left"); + } + if (SwitchOff != null) + { + SwitchOff.Invoke(); + } + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSwitch.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSwitch.cs.meta new file mode 100644 index 0000000..c2ce460 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMSwitch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdac5e74bb2234a4aa365592aa547afb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMTouchButton.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMTouchButton.cs new file mode 100644 index 0000000..13fefab --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMTouchButton.cs @@ -0,0 +1,395 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using System.Collections; +using UnityEngine.UI; +using UnityEngine.Events; +using UnityEngine.EventSystems; + +namespace Lofelt.NiceVibrations +{ + [RequireComponent(typeof(Rect))] + [RequireComponent(typeof(CanvasGroup))] + /// + /// Add this component to a GUI Image to have it act as a button. + /// Bind pressed down, pressed continually and released actions to it from the inspector + /// Handles mouse and multi touch + /// + public class MMTouchButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler, IPointerEnterHandler, ISubmitHandler + { + /// The different possible states for the button : + /// Off (default idle state), ButtonDown (button pressed for the first time), ButtonPressed (button being pressed), ButtonUp (button being released), Disabled (unclickable but still present on screen) + /// ButtonDown and ButtonUp will only last one frame, the others will last however long you press them / disable them / do nothing + public enum ButtonStates { Off, ButtonDown, ButtonPressed, ButtonUp, Disabled } + [Header("Binding")] + /// The method(s) to call when the button gets pressed down + public UnityEvent ButtonPressedFirstTime; + /// The method(s) to call when the button gets released + public UnityEvent ButtonReleased; + /// The method(s) to call while the button is being pressed + public UnityEvent ButtonPressed; + + [Header("Sprite Swap")] + public Sprite DisabledSprite; + public Sprite PressedSprite; + public Sprite HighlightedSprite; + + [Header("Color Changes")] + public bool PressedChangeColor = false; + public Color PressedColor = Color.white; + public bool LerpColor = true; + public float LerpColorDuration = 0.2f; + public AnimationCurve LerpColorCurve; + + [Header("Opacity")] + /// the new opacity to apply to the canvas group when the button is pressed + public float PressedOpacity = 1f; + public float IdleOpacity = 1f; + public float DisabledOpacity = 1f; + + [Header("Delays")] + public float PressedFirstTimeDelay = 0f; + public float ReleasedDelay = 0f; + + [Header("Buffer")] + public float BufferDuration = 0f; + + [Header("Animation")] + public Animator Animator; + public string IdleAnimationParameterName = "Idle"; + public string DisabledAnimationParameterName = "Disabled"; + public string PressedAnimationParameterName = "Pressed"; + + [Header("Mouse Mode")] + /// If you set this to true, you'll need to actually press the button for it to be triggered, otherwise a simple hover will trigger it (better for touch input). + public bool MouseMode = false; + + public bool ReturnToInitialSpriteAutomatically { get; set; } + + /// the current state of the button (off, down, pressed or up) + public ButtonStates CurrentState { get; protected set; } + + protected bool _zonePressed = false; + protected CanvasGroup _canvasGroup; + protected float _initialOpacity; + protected Animator _animator; + protected Image _image; + protected Sprite _initialSprite; + protected Color _initialColor; + protected float _lastClickTimestamp = 0f; + protected Selectable _selectable; + protected float _lastStateChangeAt = -50f; + + protected Color _imageColor; + protected Color _fromColor; + protected Color _toColor; + + /// + /// On Start, we get our canvasgroup and set our initial alpha + /// + protected virtual void Awake() + { + Initialization(); + } + + protected virtual void Initialization() + { + ReturnToInitialSpriteAutomatically = true; + + _selectable = GetComponent(); + + _image = GetComponent(); + if (_image != null) + { + _initialColor = _image.color; + _initialSprite = _image.sprite; + } + + _animator = GetComponent(); + if (Animator != null) + { + _animator = Animator; + } + + _canvasGroup = GetComponent(); + if (_canvasGroup != null) + { + _initialOpacity = IdleOpacity; + _canvasGroup.alpha = _initialOpacity; + _initialOpacity = _canvasGroup.alpha; + } + ResetButton(); + } + + /// + /// Every frame, if the touch zone is pressed, we trigger the OnPointerPressed method, to detect continuous press + /// + protected virtual void Update() + { + switch (CurrentState) + { + case ButtonStates.Off: + SetOpacity(IdleOpacity); + if ((_image != null) && (ReturnToInitialSpriteAutomatically)) + { + _image.sprite = _initialSprite; + } + if (_selectable != null) + { + _selectable.interactable = true; + if (EventSystem.current.currentSelectedGameObject == this.gameObject) + { + if (HighlightedSprite != null) + { + _image.sprite = HighlightedSprite; + } + } + } + break; + + case ButtonStates.Disabled: + SetOpacity(DisabledOpacity); + if (_image != null) + { + if (DisabledSprite != null) + { + _image.sprite = DisabledSprite; + } + } + if (_selectable != null) + { + _selectable.interactable = false; + } + break; + + case ButtonStates.ButtonDown: + + break; + + case ButtonStates.ButtonPressed: + SetOpacity(PressedOpacity); + OnPointerPressed(); + if (_image != null) + { + if (PressedSprite != null) + { + _image.sprite = PressedSprite; + } + if (PressedChangeColor) + { + _image.color = PressedColor; + } + } + break; + + case ButtonStates.ButtonUp: + + break; + } + + if ((_image != null) && (PressedChangeColor)) + { + if (Time.time - _lastStateChangeAt < LerpColorDuration) + { + float t = LerpColorCurve.Evaluate(Remap(Time.time - _lastStateChangeAt, 0f, LerpColorDuration, 0f, 1f)); + _image.color = Color.Lerp(_fromColor, _toColor, t); + } + } + + UpdateAnimatorStates(); + } + + /// + /// At the end of every frame, we change our button's state if needed + /// + protected virtual void LateUpdate() + { + if (CurrentState == ButtonStates.ButtonUp) + { + _lastStateChangeAt = Time.time; + _fromColor = PressedColor; + _toColor = _initialColor; + CurrentState = ButtonStates.Off; + } + if (CurrentState == ButtonStates.ButtonDown) + { + _lastStateChangeAt = Time.time; + _fromColor = _initialColor; + _toColor = PressedColor; + CurrentState = ButtonStates.ButtonPressed; + } + } + + /// + /// Triggers the bound pointer down action + /// + public virtual void OnPointerDown(PointerEventData data) + { + if (Time.time - _lastClickTimestamp < BufferDuration) + { + return; + } + + if (CurrentState != ButtonStates.Off) + { + return; + } + CurrentState = ButtonStates.ButtonDown; + _lastClickTimestamp = Time.time; + if ((Time.timeScale != 0) && (PressedFirstTimeDelay > 0)) + { + Invoke("InvokePressedFirstTime", PressedFirstTimeDelay); + } + else + { + ButtonPressedFirstTime.Invoke(); + } + } + + protected virtual void InvokePressedFirstTime() + { + if (ButtonPressedFirstTime != null) + { + ButtonPressedFirstTime.Invoke(); + } + } + + /// + /// Triggers the bound pointer up action + /// + public virtual void OnPointerUp(PointerEventData data) + { + if (CurrentState != ButtonStates.ButtonPressed && CurrentState != ButtonStates.ButtonDown) + { + return; + } + + CurrentState = ButtonStates.ButtonUp; + if ((Time.timeScale != 0) && (ReleasedDelay > 0)) + { + Invoke("InvokeReleased", ReleasedDelay); + } + else + { + ButtonReleased.Invoke(); + } + } + + protected virtual void InvokeReleased() + { + if (ButtonReleased != null) + { + ButtonReleased.Invoke(); + } + } + + /// + /// Triggers the bound pointer pressed action + /// + public virtual void OnPointerPressed() + { + CurrentState = ButtonStates.ButtonPressed; + if (ButtonPressed != null) + { + ButtonPressed.Invoke(); + } + } + + /// + /// Resets the button's state and opacity + /// + protected virtual void ResetButton() + { + SetOpacity(_initialOpacity); + CurrentState = ButtonStates.Off; + } + + /// + /// Triggers the bound pointer enter action when touch enters zone + /// + public virtual void OnPointerEnter(PointerEventData data) + { + if (!MouseMode) + { + OnPointerDown(data); + } + } + + /// + /// Triggers the bound pointer exit action when touch is out of zone + /// + public virtual void OnPointerExit(PointerEventData data) + { + if (!MouseMode) + { + OnPointerUp(data); + } + } + /// + /// OnEnable, we reset our button state + /// + protected virtual void OnEnable() + { + ResetButton(); + } + + public virtual void DisableButton() + { + CurrentState = ButtonStates.Disabled; + } + + public virtual void EnableButton() + { + if (CurrentState == ButtonStates.Disabled) + { + CurrentState = ButtonStates.Off; + } + } + + protected virtual void SetOpacity(float newOpacity) + { + if (_canvasGroup != null) + { + _canvasGroup.alpha = newOpacity; + } + } + + protected virtual void UpdateAnimatorStates() + { + if (_animator == null) + { + return; + } + if (DisabledAnimationParameterName != null) + { + _animator.SetBool(DisabledAnimationParameterName, (CurrentState == ButtonStates.Disabled)); + } + if (PressedAnimationParameterName != null) + { + _animator.SetBool(PressedAnimationParameterName, (CurrentState == ButtonStates.ButtonPressed)); + } + if (IdleAnimationParameterName != null) + { + _animator.SetBool(IdleAnimationParameterName, (CurrentState == ButtonStates.Off)); + } + } + + public virtual void OnSubmit(BaseEventData eventData) + { + if (ButtonPressedFirstTime != null) + { + ButtonPressedFirstTime.Invoke(); + } + if (ButtonReleased != null) + { + ButtonReleased.Invoke(); + } + } + + protected virtual float Remap(float x, float A, float B, float C, float D) + { + float remappedValue = C + (x - A) / (B - A) * (D - C); + return remappedValue; + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMTouchButton.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMTouchButton.cs.meta new file mode 100644 index 0000000..0b49333 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMTouchButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98d97271f03727a4f93fa3baff1ea05f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMUIShaker.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMUIShaker.cs new file mode 100644 index 0000000..9ba11e1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMUIShaker.cs @@ -0,0 +1,49 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace Lofelt.NiceVibrations +{ + public class MMUIShaker : MonoBehaviour + { + public float Amplitude; + public float Frequency; + public bool Shaking = false; + + protected Vector3 _initialPosition; + protected Vector3 _shakePosition; + protected RectTransform _rectTransform; + + protected virtual void Start() + { + _rectTransform = this.gameObject.GetComponent(); + _initialPosition = _rectTransform.localPosition; + } + + public virtual IEnumerator Shake(float duration) + { + Shaking = true; + yield return new WaitForSeconds(duration); + Shaking = false; + } + + protected virtual void Update() + { + if (!Shaking) + { + _rectTransform.localPosition = _initialPosition; + return; + } + else + { + _shakePosition.x = Mathf.PerlinNoise(-(Time.time) * Frequency, Time.time * Frequency) * Amplitude - Amplitude / 2f; + _shakePosition.y = Mathf.PerlinNoise(-(Time.time + 0.25f) * Frequency, Time.time * Frequency) * Amplitude - Amplitude / 2f; + _shakePosition.z = Mathf.PerlinNoise(-(Time.time + 0.5f) * Frequency, Time.time * Frequency) * Amplitude - Amplitude / 2f; + _rectTransform.localPosition = _initialPosition + _shakePosition; + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMUIShaker.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMUIShaker.cs.meta new file mode 100644 index 0000000..6730be0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/MMUIShaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 109aed369f1d8af47948f3f6aafbdbdc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/Pagination.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/Pagination.cs new file mode 100644 index 0000000..a82cacc --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/Pagination.cs @@ -0,0 +1,51 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + public class Pagination : MonoBehaviour + { + public GameObject PaginationDotPrefab; + public Color ActiveColor; + public Color InactiveColor; + protected List _images; + + public virtual void InitializePagination(int numberOfPages) + { + _images = new List(); + for (int i = 0; i < numberOfPages; i++) + { + GameObject dotPrefab = Instantiate(PaginationDotPrefab); + dotPrefab.transform.SetParent(this.transform); + dotPrefab.name = "PaginationDot" + i; + _images.Add(dotPrefab.GetComponent()); + } + foreach (Image image in _images) + { + image.color = InactiveColor; + image.rectTransform.localScale = Vector3.one; + image.rectTransform.localPosition = Vector3.zero; + image.SetNativeSize(); + } + } + + public virtual void SetCurrentPage(int numberOfPages, int currentPage) + { + for (int i = 0; i < numberOfPages; i++) + { + if (i == currentPage) + { + _images[i].color = ActiveColor; + } + else + { + _images[i].color = InactiveColor; + } + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/Pagination.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/Pagination.cs.meta new file mode 100644 index 0000000..e872158 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/UI/Pagination.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7719238c9686c2645a6b5a89cba3de35 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/V2DemoManager.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/V2DemoManager.cs new file mode 100644 index 0000000..908b434 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/V2DemoManager.cs @@ -0,0 +1,159 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +namespace Lofelt.NiceVibrations +{ + public class V2DemoManager : MonoBehaviour + { + public List Pages; + public int CurrentPage = 0; + public float PageTransitionDuration = 1f; + public AnimationCurve TransitionCurve; + public Color ActiveColor; + public Color InactiveColor; + public bool SoundActive = true; + + protected Vector3 _position; + protected List _paginations; + protected Coroutine _transitionCoroutine; + + + protected virtual void Start() + { + Initialization(); + } + + protected virtual void Initialization() + { + Application.targetFrameRate = 60; + _paginations = new List(); + foreach (RectTransform page in Pages) + { + _paginations.Add(page.GetComponentInChildren()); + page.gameObject.SetActive(false); + } + foreach (Pagination pagination in _paginations) + { + pagination.InitializePagination(Pages.Count); + pagination.ActiveColor = ActiveColor; + pagination.InactiveColor = InactiveColor; + pagination.SetCurrentPage(Pages.Count, 0); + } + Pages[0].gameObject.SetActive(true); + if (SoundActive) + { + AudioListener.volume = 1f; + SoundActive = true; + } + else + { + AudioListener.volume = 0f; + SoundActive = false; + } + } + + public virtual void PreviousPage() + { + if (CurrentPage > 0) + { + CurrentPage--; + Transition(CurrentPage + 1, CurrentPage, false); + SetCurrentPage(); + } + } + + public virtual void NextPage() + { + if (CurrentPage < Pages.Count - 1) + { + CurrentPage++; + Transition(CurrentPage - 1, CurrentPage, true); + SetCurrentPage(); + } + } + + protected virtual void SetCurrentPage() + { + foreach (Pagination pagination in _paginations) + { + pagination.SetCurrentPage(Pages.Count, CurrentPage); + } + } + + protected virtual void Transition(int previous, int next, bool goingRight) + { + HapticController.Reset(); + + if (_transitionCoroutine != null) + { + StopCoroutine(_transitionCoroutine); + } + _transitionCoroutine = StartCoroutine(TransitionCoroutine(previous, next, goingRight)); + } + + protected virtual IEnumerator TransitionCoroutine(int previous, int next, bool goingRight) + { + _position.y = Pages[previous].localPosition.y; + _position.z = Pages[previous].localPosition.z; + + foreach (RectTransform page in Pages) + { + _position.x = 1200f; + page.localPosition = _position; + } + + Pages[next].gameObject.SetActive(true); + + float timeSpent = 0f; + while (timeSpent < PageTransitionDuration) + { + if (goingRight) + { + _position.x = Mathf.Lerp(0f, -1200f, TransitionCurve.Evaluate(NiceVibrationsDemoHelpers.Remap(timeSpent, 0f, PageTransitionDuration, 0f, 1f))); + Pages[previous].localPosition = _position; + _position.x = Mathf.Lerp(1200f, 0f, TransitionCurve.Evaluate(NiceVibrationsDemoHelpers.Remap(timeSpent, 0f, PageTransitionDuration, 0f, 1f))); + Pages[next].localPosition = _position; + } + else + { + _position.x = Mathf.Lerp(0f, 1200f, TransitionCurve.Evaluate(NiceVibrationsDemoHelpers.Remap(timeSpent, 0f, PageTransitionDuration, 0f, 1f))); + Pages[previous].localPosition = _position; + _position.x = Mathf.Lerp(-1200f, 0f, TransitionCurve.Evaluate(NiceVibrationsDemoHelpers.Remap(timeSpent, 0f, PageTransitionDuration, 0f, 1f))); + Pages[next].localPosition = _position; + } + + timeSpent += Time.deltaTime; + yield return null; + } + + Pages[previous].gameObject.SetActive(false); + } + + public virtual void TurnHapticsOn() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.Success); + } + + public virtual void TurnHapticsOff() + { + HapticPatterns.PlayPreset(HapticPatterns.PresetType.Warning); + } + + public virtual void TurnSoundsOn() + { + AudioListener.volume = 1f; + SoundActive = true; + HapticPatterns.PlayPreset(HapticPatterns.PresetType.Success); + } + + public virtual void TurnSoundsOff() + { + AudioListener.volume = 0f; + SoundActive = false; + HapticPatterns.PlayPreset(HapticPatterns.PresetType.Warning); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/V2DemoManager.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/V2DemoManager.cs.meta new file mode 100644 index 0000000..88d35ad --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/V2DemoManager.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 10365fb504697425a880c74cc63902ec +timeCreated: 1515035236 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/VersionNumber.cs b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/VersionNumber.cs new file mode 100644 index 0000000..7edff25 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/VersionNumber.cs @@ -0,0 +1,33 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using UnityEngine.UI; + +namespace Lofelt.NiceVibrations +{ + [RequireComponent(typeof(Text))] + public class VersionNumber : MonoBehaviour + { + public string Version = "v3.3"; + + protected Text _text; + + protected virtual void Awake() + { + _text = this.gameObject.GetComponent(); + } + + protected virtual void Start() + { + // There is not much space in the text, so make the string for alpha + // and beta versions a bit shorter + _text.text = Version.Replace("-alpha.", "a").Replace("-beta.", "b"); + +#if (UNITY_IOS && !UNITY_EDITOR) + _text.text += " iOS " + DeviceCapabilities.platformVersion.ToString(); +#elif (UNITY_ANDROID && !UNITY_EDITOR) + _text.text += " Android " + DeviceCapabilities.platformVersion.ToString(); +#endif + } + } +} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/VersionNumber.cs.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/VersionNumber.cs.meta new file mode 100644 index 0000000..b281bde --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Scripts/VersionNumber.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61c0f36737ce72e4282216983bcc84d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Shaders.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders.meta new file mode 100644 index 0000000..ff292ab --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f0819b83997728b499215f686f6b26f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/CurveMaterial.mat b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/CurveMaterial.mat new file mode 100644 index 0000000..29f22a1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/CurveMaterial.mat @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: CurveMaterial + m_Shader: {fileID: 10755, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 0.79215693, b: 0.3372549, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/CurveMaterial.mat.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/CurveMaterial.mat.meta new file mode 100644 index 0000000..b72da6c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/CurveMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a07c61d1ae789245be27cd71b29fb47 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.mat b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.mat new file mode 100644 index 0000000..464b86e --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.mat @@ -0,0 +1,100 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: MaskedUI + m_Shader: {fileID: 4800000, guid: 645cb8076a0c9a54bad68f9896f992ea, type: 3} + m_ShaderKeywords: UNITY_UI_ALPHACLIP + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 2800000, guid: 1c1d29f153f98364ca23263a0c96c8a9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TextureSample2: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _BumpScale: 1 + - _ColorMask: 15 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UVSec: 0 + - _UseUIAlphaClip: 1 + - _WaveAmplitudeA: 0 + - _WaveAmplitudeB: 0 + - _WaveWidthA: 2.5 + - _WaveWidthB: 2.5 + - _YDisplacementA: 0 + - _YDisplacementB: 5 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + - _ColorWaveA: {r: 0.9960785, g: 0.78823537, b: 0.3372549, a: 1} + - _ColorWaveB: {r: 1, g: 0.376056, b: 0.05882353, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.mat.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.mat.meta new file mode 100644 index 0000000..50481e8 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32e98a8a48578634a93cc964a2f2c9b5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.shader b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.shader new file mode 100644 index 0000000..39938e2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.shader @@ -0,0 +1,116 @@ +Shader "MoreMountains/MaskedUI" +{ + Properties + { + [PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {} + _Color("Tint", Color) = (1,1,1,1) + + _StencilComp("Stencil Comparison", Float) = 8 + _Stencil("Stencil ID", Float) = 0 + _StencilOp("Stencil Operation", Float) = 0 + _StencilWriteMask("Stencil Write Mask", Float) = 255 + _StencilReadMask("Stencil Read Mask", Float) = 255 + + _ColorMask("Color Mask", Float) = 15 + + [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0 + + _MaskTex("MaskTexture",2D) = "white"{} + } + + SubShader + { + Tags + { + "Queue" = "Transparent" + "IgnoreProjector" = "True" + "RenderType" = "Transparent" + "PreviewType" = "Plane" + "CanUseSpriteAtlas" = "True" + } + + Stencil + { + Ref[_Stencil] + Comp[_StencilComp] + Pass[_StencilOp] + ReadMask[_StencilReadMask] + WriteMask[_StencilWriteMask] + } + + Cull Off + Lighting Off + ZWrite Off + ZTest[unity_GUIZTestMode] + Blend SrcAlpha OneMinusSrcAlpha + ColorMask[_ColorMask] + + Pass + { + Name "Default" + CGPROGRAM +#pragma vertex vert +#pragma fragment frag +#pragma target 2.0 + +#include "UnityCG.cginc" +#include "UnityUI.cginc" + +#pragma multi_compile __ UNITY_UI_ALPHACLIP + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + half2 texcoord : TEXCOORD0; + float4 worldPosition : TEXCOORD1; + }; + + fixed4 _Color; + fixed4 _TextureSampleAdd; + float4 _ClipRect; + + v2f vert(appdata_t IN) + { + v2f OUT; + OUT.worldPosition = IN.vertex; + OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); + + OUT.texcoord = IN.texcoord; + +#ifdef UNITY_HALF_TEXEL_OFFSET + OUT.vertex.xy += (_ScreenParams.zw - 1.0) * float2(-1,1) * OUT.vertex.w; +#endif + + OUT.color = IN.color * _Color; + return OUT; + } + + sampler2D _MainTex; + sampler2D _MaskTex; + + fixed4 frag(v2f IN) : SV_Target + { + half4 color = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd) * IN.color; + + half4 maskCol = tex2D(_MaskTex, IN.texcoord); + color.a = maskCol.a; + color.a *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); + +#ifdef UNITY_UI_ALPHACLIP + clip(color.a - 0.001); +#endif + + return color; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.shader.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.shader.meta new file mode 100644 index 0000000..84d62e5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Shaders/MaskedUI.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 645cb8076a0c9a54bad68f9896f992ea +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sounds.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds.meta new file mode 100644 index 0000000..b2bfba1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74537bab79abf4e68b30c2491f4229a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsContinuous.wav b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsContinuous.wav new file mode 100644 index 0000000..ccfc8f5 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsContinuous.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsContinuous.wav.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsContinuous.wav.meta new file mode 100644 index 0000000..bdd37df --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsContinuous.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: dfdb195f0fef847b1a5b3b35d741f8e3 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsEmphasis.wav b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsEmphasis.wav new file mode 100644 index 0000000..be39c2a Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsEmphasis.wav differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsEmphasis.wav.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsEmphasis.wav.meta new file mode 100644 index 0000000..6889a3c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sounds/NiceVibrationsEmphasis.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 719572a06924d4ea79c4264834bd427b +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites.meta new file mode 100644 index 0000000..8308e6e --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6659b91e53f3fc6488ff70059d1444ac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV1x1White.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV1x1White.png new file mode 100644 index 0000000..0f9f856 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV1x1White.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV1x1White.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV1x1White.png.meta new file mode 100644 index 0000000..c6978eb --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV1x1White.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 0997c47bcd1429d42abe9c77bb947b44 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Cols.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Cols.png new file mode 100644 index 0000000..15bf50d Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Cols.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Cols.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Cols.png.meta new file mode 100644 index 0000000..7cac582 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Cols.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 5e7828fe329b7c44da7a14782d96a96d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Dots.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Dots.png new file mode 100644 index 0000000..805a3d6 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Dots.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Dots.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Dots.png.meta new file mode 100644 index 0000000..a1661b9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV3Dots.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: ae832dcdd98f8f44f979034fbe2b302e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV7Dots.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV7Dots.png new file mode 100644 index 0000000..7837a8b Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV7Dots.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV7Dots.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV7Dots.png.meta new file mode 100644 index 0000000..07b4b7b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NV7Dots.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 4f5279e4af3c4234b8aa5937637aeabd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVArrow.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVArrow.png new file mode 100644 index 0000000..8c734a4 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVArrow.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVArrow.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVArrow.png.meta new file mode 100644 index 0000000..980e083 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVArrow.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 94f43f82d46dcdb4db47e75f6c65be01 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVDottedPattern.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVDottedPattern.png new file mode 100644 index 0000000..07672cc Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVDottedPattern.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVDottedPattern.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVDottedPattern.png.meta new file mode 100644 index 0000000..a74a898 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVDottedPattern.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 201a3f0fd44444e4da86b3ded7f4448f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVKnob.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVKnob.png new file mode 100644 index 0000000..2ce91f4 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVKnob.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVKnob.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVKnob.png.meta new file mode 100644 index 0000000..43e751d --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVKnob.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: eaf9954881d0ec54cb87bbe549858926 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoNice.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoNice.png new file mode 100644 index 0000000..77b2a79 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoNice.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoNice.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoNice.png.meta new file mode 100644 index 0000000..75de080 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoNice.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 4c8fd0c851c8cbc4bb6dc9453b9ae786 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoVibrations.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoVibrations.png new file mode 100644 index 0000000..186539a Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoVibrations.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoVibrations.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoVibrations.png.meta new file mode 100644 index 0000000..9b7da1e --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVLogoVibrations.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: ef74e6b52dfbf9a4cba77e1fde4584d4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVPaginationDot.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVPaginationDot.png new file mode 100644 index 0000000..fccf1be Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVPaginationDot.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVPaginationDot.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVPaginationDot.png.meta new file mode 100644 index 0000000..74a44ee --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVPaginationDot.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 628a23d9e49377a4592b606b84550579 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCorners.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCorners.png new file mode 100644 index 0000000..d1806b9 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCorners.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCorners.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCorners.png.meta new file mode 100644 index 0000000..bec5051 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCorners.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: a6ae458264a4a8e42a10f166c8becc96 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 24, y: 24, z: 24, w: 24} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCornersBig.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCornersBig.png new file mode 100644 index 0000000..770df5e Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCornersBig.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCornersBig.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCornersBig.png.meta new file mode 100644 index 0000000..4162f58 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVRoundedCornersBig.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 1a3d766705e8fce41bcaa2921051a083 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 30, y: 30, z: 30, w: 30} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchBackground.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchBackground.png new file mode 100644 index 0000000..ffc9208 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchBackground.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchBackground.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchBackground.png.meta new file mode 100644 index 0000000..9ef9f60 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchBackground.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 3dd0295cf0922b64192d5ee88a250b4e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchIndicator.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchIndicator.png new file mode 100644 index 0000000..4fe1806 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchIndicator.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchIndicator.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchIndicator.png.meta new file mode 100644 index 0000000..ae8212b --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchIndicator.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: be6473d4dcaac484a90412f8114f307c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchKnob.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchKnob.png new file mode 100644 index 0000000..08e2a7f Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchKnob.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchKnob.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchKnob.png.meta new file mode 100644 index 0000000..3790b51 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVSwitchKnob.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: d1476548e87a009429d279f9ec3a4b93 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVVerticalProgressBar.png b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVVerticalProgressBar.png new file mode 100644 index 0000000..8e74d62 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVVerticalProgressBar.png differ diff --git a/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVVerticalProgressBar.png.meta b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVVerticalProgressBar.png.meta new file mode 100644 index 0000000..93a4c1a --- /dev/null +++ b/Assets/Feel/NiceVibrations/Demo/_Common/Sprites/NVVerticalProgressBar.png.meta @@ -0,0 +1,139 @@ +fileFormatVersion: 2 +guid: 1c1d29f153f98364ca23263a0c96c8a9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples.meta b/Assets/Feel/NiceVibrations/HapticSamples.meta new file mode 100644 index 0000000..fa8c270 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e20b0f736596c41579b8727397a4e819 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX.meta new file mode 100644 index 0000000..16bdb77 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 264cf0ec688e74a0ea547e3ad837d696 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.haptic new file mode 100644 index 0000000..34142ff --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Alert 1.wav","project":"Alert 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.35261574,"emphasis":{"amplitude":0.44076967,"frequency":0.44076967}},{"time":0.0010204081,"amplitude":0.44076967},{"time":0.005011338,"amplitude":0.81291586},{"time":0.01600907,"amplitude":0.6736202},{"time":0.024013605,"amplitude":0.7644746},{"time":0.04301587,"amplitude":0.4288683},{"time":0.06900226,"amplitude":0.34223592},{"time":0.0770118,"amplitude":0},{"time":0.13001767,"amplitude":0},{"time":0.13002267,"amplitude":0.8817339},{"time":0.1470068,"amplitude":0.7409563},{"time":0.1540136,"amplitude":0.88984877},{"time":0.17301586,"amplitude":0.4862432},{"time":0.21301587,"amplitude":0.402915},{"time":0.24201813,"amplitude":0.28815293},{"time":0.25899727,"amplitude":0},{"time":0.28799952,"amplitude":0},{"time":0.28800452,"amplitude":0.29109633},{"time":0.31900227,"amplitude":0.2728829},{"time":0.34301588,"amplitude":0.16685489},{"time":0.38501135,"amplitude":0.18782012},{"time":0.43301585,"amplitude":0.10818762},{"time":0.45900226,"amplitude":0.16848207},{"time":0.47600907,"amplitude":0.11325686},{"time":0.5089491844827586,"amplitude":0},{"time":1.9990476,"amplitude":0.0014428394},{"time":2,"amplitude":0.0014428394},{"time":2,"amplitude":0.0014428394}],"frequency":[{"time":0,"frequency":0.5782395},{"time":0.023219952,"frequency":0.51781464},{"time":0.11900226,"frequency":0.5628169},{"time":0.12770975,"frequency":0.76949483},{"time":0.13351475,"frequency":0.5926434},{"time":0.14222223,"frequency":0.69631577},{"time":0.1509297,"frequency":0.5344103},{"time":0.22929706,"frequency":0.56942385},{"time":0.2554195,"frequency":0.6032076},{"time":0.26993197,"frequency":0.5061337},{"time":0.3105669,"frequency":0.53960305},{"time":0.3541043,"frequency":0.53000194},{"time":0.38312924,"frequency":0.5899348},{"time":0.4121542,"frequency":0.54824317},{"time":0.5079365,"frequency":0.5551604},{"time":0.5659814,"frequency":0},{"time":2.01,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.haptic.meta new file mode 100644 index 0000000..fb47a8b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 27b2f1a81ed0042058d5e12a4ff355c9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.wav new file mode 100644 index 0000000..72df8c8 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.wav.meta new file mode 100644 index 0000000..f1fe4af --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Alert1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 7e492ad07b6d548eea10ccbd1962e88f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.haptic new file mode 100644 index 0000000..e971dd2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.haptic @@ -0,0 +1,277 @@ +{ + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "metadata": { + "author": "andrew@lofelt.com", + "editor": "Lofelt Studio", + "source": "Award 1.wav", + "project": "Award 1", + "tags": [], + "description": "" + }, + "signals": { + "continuous": { + "envelopes": { + "amplitude": [ + { + "time": 0, + "amplitude": 0.10986463, + "emphasis": { + "amplitude": 0.13733079, + "frequency": 0.13733079 + } + }, + { + "time": 0.0010204081, + "amplitude": 0.13733079 + }, + { + "time": 0.01201814, + "amplitude": 0.52519286 + }, + { + "time": 0.053015873, + "amplitude": 0.46487224 + }, + { + "time": 0.059002265, + "amplitude": 0.64323366 + }, + { + "time": 0.07102041, + "amplitude": 0.6401495 + }, + { + "time": 0.07900227, + "amplitude": 0.5185357 + }, + { + "time": 0.08900227, + "amplitude": 0.7438167 + }, + { + "time": 0.10501134, + "amplitude": 0.5071727 + }, + { + "time": 0.12002268, + "amplitude": 0.5013771 + }, + { + "time": 0.1240136, + "amplitude": 0.6808917 + }, + { + "time": 0.14301588, + "amplitude": 0.4757209 + }, + { + "time": 0.15800454, + "amplitude": 0.7132401 + }, + { + "time": 0.17002267, + "amplitude": 0.59389853 + }, + { + "time": 0.1840136, + "amplitude": 0.61164725 + }, + { + "time": 0.19600907, + "amplitude": 0.4848396 + }, + { + "time": 0.20800453, + "amplitude": 0.7215152 + }, + { + "time": 0.21900226, + "amplitude": 0.557937 + }, + { + "time": 0.24002267, + "amplitude": 0.4747394 + }, + { + "time": 0.2510204, + "amplitude": 0.49489325 + }, + { + "time": 0.2570068, + "amplitude": 0.7079323 + }, + { + "time": 0.29900226, + "amplitude": 0.2941388 + }, + { + "time": 0.3170068, + "amplitude": 0.2647706 + }, + { + "time": 0.31800452, + "amplitude": 0.36751625 + }, + { + "time": 0.33800453, + "amplitude": 0.2600176 + }, + { + "time": 0.38501135, + "amplitude": 0.2786307 + }, + { + "time": 0.4010204, + "amplitude": 0.18144362 + }, + { + "time": 0.42501134, + "amplitude": 0.14689037 + }, + { + "time": 0.44600907, + "amplitude": 0.21291243 + }, + { + "time": 0.46201813, + "amplitude": 0.13906313 + }, + { + "time": 0.5293879103448274, + "amplitude": 0 + }, + { + "time": 0.96, + "amplitude": 0 + } + ], + "frequency": [ + { + "time": 0, + "frequency": 0.32290703 + }, + { + "time": 0.008707482, + "frequency": 0.45830125 + }, + { + "time": 0.037732422, + "frequency": 0.49636945 + }, + { + "time": 0.055147387, + "frequency": 0.41676614 + }, + { + "time": 0.089977324, + "frequency": 0.5800106 + }, + { + "time": 0.113197275, + "frequency": 0.62579364 + }, + { + "time": 0.12190475, + "frequency": 0.3416194 + }, + { + "time": 0.13641724, + "frequency": 0.19682209 + }, + { + "time": 0.14222223, + "frequency": 0.3308805 + }, + { + "time": 0.1509297, + "frequency": 0.1895402 + }, + { + "time": 0.19736962, + "frequency": 0.29087844 + }, + { + "time": 0.22058958, + "frequency": 0.15099466 + }, + { + "time": 0.2496145, + "frequency": 0.08343977 + }, + { + "time": 0.27283448, + "frequency": 0.11145025 + }, + { + "time": 0.29605442, + "frequency": 0.31076247 + }, + { + "time": 0.34249434, + "frequency": 0.26093072 + }, + { + "time": 0.3599093, + "frequency": 0.13103388 + }, + { + "time": 0.38312924, + "frequency": 0.13340199 + }, + { + "time": 0.38893422, + "frequency": 0.22598417 + }, + { + "time": 0.42666668, + "frequency": 0.33313313 + }, + { + "time": 0.44408163, + "frequency": 0.48599908 + }, + { + "time": 0.45278913, + "frequency": 0.30880123 + }, + { + "time": 0.47891155, + "frequency": 0.6317672 + }, + { + "time": 0.5079365, + "frequency": 0.17719619 + }, + { + "time": 0.528254, + "frequency": 0.24409609 + }, + { + "time": 0.53696144, + "frequency": 0.18008891 + }, + { + "time": 0.6066213, + "frequency": 0.014196219 + }, + { + "time": 0.62984127, + "frequency": 0.042938504 + }, + { + "time": 0.7082086, + "frequency": 0 + }, + { + "time": 0.93460315, + "frequency": 0 + } + ] + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.haptic.meta new file mode 100644 index 0000000..e94225b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0ec40230bd576417ea32eaa2f8f784e2 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.wav new file mode 100644 index 0000000..b9391f5 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.wav.meta new file mode 100644 index 0000000..a02ab89 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Award1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ccdc1026f90774226b4c0759093380b3 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.haptic new file mode 100644 index 0000000..5f39d5a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Beep 1.wav","project":"Beep 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0047444124},{"time":0.012235867964257316,"amplitude":0.3999999999999999},{"time":0.024502087171447143,"amplitude":0},{"time":0.04963369734203092,"amplitude":0,"emphasis":{"amplitude":0.7026315789473683,"frequency":0.5}},{"time":0.08827984974845757,"amplitude":0},{"time":0.09463946056953021,"amplitude":0.6668042610526319,"emphasis":{"amplitude":1,"frequency":0.5}},{"time":0.13128302778832485,"amplitude":0.31688326842105174},{"time":0.17871632240635238,"amplitude":0.060688556315789476},{"time":0.39274377,"amplitude":0.003360569},{"time":0.6571429,"amplitude":0.00071316696},{"time":0.65746033,"amplitude":0.00071316696}],"frequency":[{"time":0,"frequency":0},{"time":0.025740136556241102,"frequency":0.3830195610526314},{"time":0.051413095622341115,"frequency":0.1712657210717225},{"time":0.08988358684148082,"frequency":0.007894736842105267},{"time":0.09440132272687958,"frequency":0.7919242263157894},{"time":0.1873905751020407,"frequency":0.4549577810526306},{"time":0.45382217,"frequency":0.121096745},{"time":0.65746033,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.haptic.meta new file mode 100644 index 0000000..5892bee --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fafb36cf7b1ae455cb46b5f952075a53 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.wav new file mode 100644 index 0000000..8bf970d Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.wav.meta new file mode 100644 index 0000000..54def25 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: adb24518d159048ca9cb62d63113784f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.haptic new file mode 100644 index 0000000..0e0a375 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Beep 2.wav","project":"Beep 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0011576181},{"time":0.0010204081,"amplitude":0.0011576181},{"time":0.0020181406,"amplitude":0.0011576181},{"time":0.003015873,"amplitude":0.4745257,"emphasis":{"amplitude":0.5931571,"frequency":0.52167475}},{"time":0.0040136054,"amplitude":0.5931571},{"time":0.009002267,"amplitude":0.5481417},{"time":0.017006803,"amplitude":0.47577864},{"time":0.02201814,"amplitude":0.43383777},{"time":0.030022675,"amplitude":0.37256712},{"time":0.038004536,"amplitude":0.31807226},{"time":0.0470068,"amplitude":0.2639196},{"time":0.05201814,"amplitude":0.23732935},{"time":0.053015873,"amplitude":0.47746107,"emphasis":{"amplitude":0.5968263,"frequency":0.22443771}},{"time":0.054013606,"amplitude":0.5967426},{"time":0.05600907,"amplitude":0.5748501},{"time":0.06201814,"amplitude":0.51780444},{"time":0.06900226,"amplitude":0.45675635},{"time":0.07800453,"amplitude":0.38536197},{"time":0.0840136,"amplitude":0.34269756},{"time":0.090022676,"amplitude":0.30376637},{"time":0.0970068,"amplitude":0.26236838},{"time":0.10301587,"amplitude":0.23039453},{"time":0.11201814,"amplitude":0.18828866},{"time":0.11900227,"amplitude":0.15971974},{"time":0.13102041,"amplitude":0.11857687},{"time":0.13800453,"amplitude":0.098739654},{"time":0.1470068,"amplitude":0.077058226},{"time":0.15900226,"amplitude":0.054235145},{"time":0.16900226,"amplitude":0.039585426},{"time":0.18501133,"amplitude":0.022878256},{"time":0.19501133,"amplitude":0.015796818},{"time":0.19544217,"amplitude":0.015796818},{"time":0.19544217,"amplitude":0.015796818}],"frequency":[{"time":0,"frequency":0.5008938},{"time":0.008707482,"frequency":0.5071877},{"time":0.011609977,"frequency":0.490051},{"time":0.014512472,"frequency":0.19684085},{"time":0.023219952,"frequency":0.18089607},{"time":0.026122449,"frequency":0.23116799},{"time":0.029024942,"frequency":0.23655197},{"time":0.03482993,"frequency":0.12633504},{"time":0.040634923,"frequency":0.15153399},{"time":0.043537416,"frequency":0.5560183},{"time":0.0493424,"frequency":0.59681594},{"time":0.05804988,"frequency":0.58854437},{"time":0.06385487,"frequency":0.74450904},{"time":0.07546485,"frequency":0.70897025},{"time":0.08707482,"frequency":0.68824184},{"time":0.089977324,"frequency":0.66201067},{"time":0.09578231,"frequency":0.68478173},{"time":0.101587296,"frequency":0.6595938},{"time":0.10739229,"frequency":0.5959184},{"time":0.11900226,"frequency":0.52477634},{"time":0.12770975,"frequency":0.46008623},{"time":0.13931973,"frequency":0.4002594},{"time":0.14802721,"frequency":0.3870585},{"time":0.1538322,"frequency":0.30508852},{"time":0.16253969,"frequency":0.25109607},{"time":0.16544218,"frequency":0.19018205},{"time":0.17124717,"frequency":0.25410363},{"time":0.17705216,"frequency":0.13399042},{"time":0.17995465,"frequency":0.20087561},{"time":0.18285714,"frequency":0.20760277}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.haptic.meta new file mode 100644 index 0000000..52be5c9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 02f81e28fa53f46de9734ba5a14d9891 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.wav new file mode 100644 index 0000000..c3dca59 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.wav.meta new file mode 100644 index 0000000..6861261 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 0dfe9f9829141478689194368436b534 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.haptic new file mode 100644 index 0000000..815690b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Beep 3.wav","project":"Beep 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0009326987},{"time":0.0010204081,"amplitude":0.0009326987},{"time":0.0020181406,"amplitude":0.0009328905},{"time":0.003015873,"amplitude":0.4063843,"emphasis":{"amplitude":0.50798035,"frequency":0.4433983}},{"time":0.0040136054,"amplitude":0.50790906},{"time":0.00600907,"amplitude":0.4892732},{"time":0.008004535,"amplitude":0.47465688},{"time":0.009002267,"amplitude":0.46463978},{"time":0.01201814,"amplitude":0.44071347},{"time":0.019002268,"amplitude":0.3887477},{"time":0.025011338,"amplitude":0.34732848},{"time":0.031020408,"amplitude":0.30933726},{"time":0.037006803,"amplitude":0.27481157},{"time":0.044013605,"amplitude":0.23792095},{"time":0.05,"amplitude":0.20939298},{"time":0.05201814,"amplitude":0.20106691},{"time":0.053015873,"amplitude":0.40383396,"emphasis":{"amplitude":0.50479245,"frequency":0.09073677}},{"time":0.054013606,"amplitude":0.50479245},{"time":0.05600907,"amplitude":0.4931029},{"time":0.059002265,"amplitude":0.46714494},{"time":0.06301587,"amplitude":0.43529758},{"time":0.067006804,"amplitude":0.4052664},{"time":0.07102041,"amplitude":0.37658358},{"time":0.075011335,"amplitude":0.34953964},{"time":0.07900227,"amplitude":0.32391125},{"time":0.0840136,"amplitude":0.29363662},{"time":0.08800454,"amplitude":0.27104318},{"time":0.09600907,"amplitude":0.22970405},{"time":0.10401361,"amplitude":0.19333693},{"time":0.10900226,"amplitude":0.17293249},{"time":0.11301587,"amplitude":0.15770283},{"time":0.12102041,"amplitude":0.13048474},{"time":0.12900226,"amplitude":0.10708761},{"time":0.13800453,"amplitude":0.08469477},{"time":0.14600907,"amplitude":0.06801823},{"time":0.15501134,"amplitude":0.05245822},{"time":0.16301587,"amplitude":0.04109989},{"time":0.1710204,"amplitude":0.031798318},{"time":0.17900227,"amplitude":0.02428812},{"time":0.1870068,"amplitude":0.01827871},{"time":0.19501133,"amplitude":0.013559844},{"time":0.19578232,"amplitude":0.013559844},{"time":0.19578232,"amplitude":0.013559844}],"frequency":[{"time":0,"frequency":0.53703433},{"time":0.0029024947,"frequency":0.548862},{"time":0.0058049876,"frequency":0.56281525},{"time":0.008707482,"frequency":0.58178735},{"time":0.011609977,"frequency":0.60393304},{"time":0.014512472,"frequency":0.6080728},{"time":0.02031746,"frequency":0.6079816},{"time":0.040634923,"frequency":0.6065384},{"time":0.043537416,"frequency":0.61537415},{"time":0.04643991,"frequency":0.66557115},{"time":0.0493424,"frequency":0.70464927},{"time":0.052244894,"frequency":0.73312134},{"time":0.055147387,"frequency":0.7572291},{"time":0.06095238,"frequency":0.8107351},{"time":0.06385487,"frequency":0.8211632},{"time":0.06965986,"frequency":0.8210186},{"time":0.08707482,"frequency":0.81962496},{"time":0.101587296,"frequency":0.8177553},{"time":0.113197275,"frequency":0.8157331},{"time":0.12770975,"frequency":0.8114139},{"time":0.13351475,"frequency":0.8087124},{"time":0.13931973,"frequency":0.80448747},{"time":0.1509297,"frequency":0.7969137},{"time":0.1538322,"frequency":0.7937746},{"time":0.16253969,"frequency":0.78146243},{"time":0.16544218,"frequency":0.77578014},{"time":0.16834468,"frequency":0.7680659},{"time":0.17124717,"frequency":0.75842476},{"time":0.17995465,"frequency":0.72713345},{"time":0.18285714,"frequency":0.71321195}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.haptic.meta new file mode 100644 index 0000000..934fa75 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6a7e2ca1987944de39aba76339acf1b0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.wav new file mode 100644 index 0000000..526b171 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.wav.meta new file mode 100644 index 0000000..178397b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Beep3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ebf4609aed0dc4d82ad954bb603461fd +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.haptic new file mode 100644 index 0000000..a4c7e8a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Button 1.wav","project":"Button 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000098653734},{"time":0.004536322020087301,"amplitude":0},{"time":0.006279444770299198,"amplitude":0.15805369852631598,"emphasis":{"amplitude":0.5007837389473688,"frequency":0.5}},{"time":0.030664567355236216,"amplitude":0},{"time":0.05161897481282919,"amplitude":0},{"time":0.056150829774372954,"amplitude":0.4679530231578942,"emphasis":{"amplitude":1,"frequency":0.5}},{"time":0.06852497904479306,"amplitude":0},{"time":0.11618934,"amplitude":0}],"frequency":[{"time":0,"frequency":0.32191977157894686},{"time":0.01972258660797341,"frequency":0.31155507210526295},{"time":0.02880428942235071,"frequency":0},{"time":0.04685078887726481,"frequency":0},{"time":0.05042632238622576,"frequency":0.6951169736842108},{"time":0.05989490644016412,"frequency":0.6973634040990127},{"time":0.07947159059921069,"frequency":0},{"time":0.10402982163360056,"frequency":0.32369802815862925},{"time":0.11668934,"frequency":0.49056107}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.haptic.meta new file mode 100644 index 0000000..44532b1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 288ca76b927d24b3eb9b30fc8a464b92 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.wav new file mode 100644 index 0000000..44b281b Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.wav.meta new file mode 100644 index 0000000..1fc9a31 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 801a894d272f24eb5ad28f5219e62bfe +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.haptic new file mode 100644 index 0000000..1ebceb9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Button 2.wav","project":"Button 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000610372},{"time":0.0027623004338573932,"amplitude":0},{"time":0.003913265645027437,"amplitude":0.6994736842105268,"emphasis":{"amplitude":0.9763157894736842,"frequency":0.5}},{"time":0.13287482,"amplitude":0},{"time":0.13333334,"amplitude":0.004096698}],"frequency":[{"time":0,"frequency":0.23802174210526228},{"time":0.0020552030129198933,"frequency":0.444601147368421},{"time":0.003813931174099978,"frequency":0.7887068352631583},{"time":0.0054414639467324395,"frequency":0.15268697603131207},{"time":0.032554875358140375,"frequency":0},{"time":0.09235719420292146,"frequency":0},{"time":0.12963745854427033,"frequency":0},{"time":0.13333334,"frequency":0.30700314}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.haptic.meta new file mode 100644 index 0000000..e80e054 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2a076dfae72a84088855d51a4c2259f4 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.wav new file mode 100644 index 0000000..4590f49 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.wav.meta new file mode 100644 index 0000000..91bd929 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 292aad821b16948af9cba9deaca16525 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.haptic new file mode 100644 index 0000000..9b4f3ad --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Button 3.wav","project":"Button 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.040181227},{"time":0.0010204081,"amplitude":0.040181227},{"time":0.003015873,"amplitude":0.22928709},{"time":0.0040136054,"amplitude":0.22928709},{"time":0.005011338,"amplitude":0.58553797,"emphasis":{"amplitude":0.73192245,"frequency":0.43863565}},{"time":0.00600907,"amplitude":0.74842477},{"time":0.009002267,"amplitude":0.70018387},{"time":0.011020408,"amplitude":0.74875027},{"time":0.014013605,"amplitude":0.6997576},{"time":0.01600907,"amplitude":0.74845785},{"time":0.019002268,"amplitude":0.69947845},{"time":0.021020407,"amplitude":0.74795383},{"time":0.024013605,"amplitude":0.6983334},{"time":0.025011338,"amplitude":0.7475706},{"time":0.02600907,"amplitude":0.7475706},{"time":0.029002268,"amplitude":0.69797575},{"time":0.030022675,"amplitude":0.74751204},{"time":0.031020408,"amplitude":0.74751204},{"time":0.034013607,"amplitude":0.6967647},{"time":0.035011336,"amplitude":0.7479315},{"time":0.03600907,"amplitude":0.7479315},{"time":0.039002266,"amplitude":0.69712454},{"time":0.04,"amplitude":0.74828696},{"time":0.04102041,"amplitude":0.74828696},{"time":0.044013605,"amplitude":0.69678813},{"time":0.045011338,"amplitude":0.74856335},{"time":0.048004534,"amplitude":0.720196},{"time":0.054013606,"amplitude":0.58710086},{"time":0.057006802,"amplitude":0.53875256},{"time":0.058004536,"amplitude":0.73065656},{"time":0.07600907,"amplitude":0.7295299},{"time":0.07900227,"amplitude":0.72329444},{"time":0.0870068,"amplitude":0.5820439},{"time":0.09201814,"amplitude":0.5090547},{"time":0.10201814,"amplitude":0.38701004},{"time":0.11201814,"amplitude":0.28971916},{"time":0.122018136,"amplitude":0.21176785},{"time":0.13201813,"amplitude":0.14974338},{"time":0.14201814,"amplitude":0.10150332},{"time":0.15201814,"amplitude":0.06571843},{"time":0.15800454,"amplitude":0.049993873},{"time":0.15873016,"amplitude":0.049993873},{"time":0.15873016,"amplitude":0.049993873}],"frequency":[{"time":0,"frequency":0.3794919},{"time":0.0029024947,"frequency":0.38737246},{"time":0.0058049876,"frequency":0.38473517},{"time":0.008707482,"frequency":0.3789018},{"time":0.011609977,"frequency":0.37679192},{"time":0.014512472,"frequency":0.38109508},{"time":0.017414967,"frequency":0.37931523},{"time":0.02031746,"frequency":0.3812016},{"time":0.029024942,"frequency":0.38185334},{"time":0.031927437,"frequency":0.3805036},{"time":0.043537416,"frequency":0.38197216},{"time":0.04643991,"frequency":0.37847552},{"time":0.0493424,"frequency":0.40592253},{"time":0.052244894,"frequency":0.48137137},{"time":0.055147387,"frequency":0.5530801},{"time":0.05804988,"frequency":0.6091152},{"time":0.06095238,"frequency":0.6468301},{"time":0.06385487,"frequency":0.658384},{"time":0.08707482,"frequency":0.6480815},{"time":0.0986848,"frequency":0.65260035},{"time":0.104489796,"frequency":0.6556977},{"time":0.11029478,"frequency":0.6603287},{"time":0.11609977,"frequency":0.6623092},{"time":0.124807246,"frequency":0.65855664},{"time":0.12770975,"frequency":0.65557194},{"time":0.13351475,"frequency":0.6406321},{"time":0.13641724,"frequency":0.6461519},{"time":0.13931973,"frequency":0.6461004},{"time":0.14222223,"frequency":0.6392323},{"time":0.14512472,"frequency":0.6251058}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.haptic.meta new file mode 100644 index 0000000..f5f2c87 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bb27b2715855c43e68e953138ae502c0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.wav new file mode 100644 index 0000000..1f9fd15 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.wav.meta new file mode 100644 index 0000000..5b0c001 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: eee93e998efe24806a8ee64a4be7a67a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.haptic new file mode 100644 index 0000000..1dab08d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Button 4.wav","project":"Button 4","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00050662307},{"time":0.0010204081,"amplitude":0.00050662307},{"time":0.04102041,"amplitude":0.00094271183},{"time":0.04201814,"amplitude":0.48678637,"emphasis":{"amplitude":0.60848296,"frequency":0.5336922}},{"time":0.057006802,"amplitude":0.38792405},{"time":0.06600907,"amplitude":0.29471684},{"time":0.08501133,"amplitude":0.16222657},{"time":0.10501134,"amplitude":0.093603685},{"time":0.114013605,"amplitude":0.09264286},{"time":0.11600907,"amplitude":0.11356909},{"time":0.12501134,"amplitude":0.10608949},{"time":0.1410204,"amplitude":0.073863536},{"time":0.14201814,"amplitude":0.40273,"emphasis":{"amplitude":0.5034125,"frequency":0.34617347}},{"time":0.1610204,"amplitude":0.3035338},{"time":0.18102041,"amplitude":0.1872811},{"time":0.18201813,"amplitude":0.21188714},{"time":0.19201814,"amplitude":0.1652573},{"time":0.19301587,"amplitude":0.1831242},{"time":0.20201814,"amplitude":0.14265637},{"time":0.21201813,"amplitude":0.14976756},{"time":0.21301587,"amplitude":0.18301621},{"time":0.22201814,"amplitude":0.14364877},{"time":0.23201814,"amplitude":0.122692734},{"time":0.2340136,"amplitude":0.15650003},{"time":0.24301587,"amplitude":0.1193621},{"time":0.24401361,"amplitude":0.14377417},{"time":0.25800452,"amplitude":0.09384954},{"time":0.2740136,"amplitude":0.09040283},{"time":0.28600907,"amplitude":0.06583716},{"time":0.3010204,"amplitude":0.06296381},{"time":0.30201814,"amplitude":0.075455874},{"time":0.3240136,"amplitude":0.06280125},{"time":0.32501134,"amplitude":0.0754377},{"time":0.33800453,"amplitude":0.07015271},{"time":0.35900226,"amplitude":0.044267736},{"time":0.35999998,"amplitude":0.054066587},{"time":0.37900227,"amplitude":0.031841524},{"time":0.3810204,"amplitude":0.040329326},{"time":0.41501132,"amplitude":0.013612524},{"time":0.46201813,"amplitude":0.015961006},{"time":0.48501134,"amplitude":0.011177748},{"time":0.48548752,"amplitude":0.011177748},{"time":0.48548752,"amplitude":0.011177748}],"frequency":[{"time":0,"frequency":0.5706576},{"time":0.017414967,"frequency":0.51497614},{"time":0.026122449,"frequency":0.8679787},{"time":0.03482993,"frequency":0.6100779},{"time":0.05804988,"frequency":0.55668426},{"time":0.06965986,"frequency":0.9896007},{"time":0.078367345,"frequency":0.48692772},{"time":0.124807246,"frequency":0.36869922},{"time":0.13351475,"frequency":0.92900336},{"time":0.1509297,"frequency":1},{"time":0.1596372,"frequency":0.3679404},{"time":0.18866213,"frequency":0.46353003},{"time":0.20897959,"frequency":1},{"time":0.2496145,"frequency":1},{"time":0.2554195,"frequency":0.485519},{"time":0.26122448,"frequency":0.94641},{"time":0.27283448,"frequency":0.4218635},{"time":0.28154194,"frequency":1},{"time":0.3018594,"frequency":1},{"time":0.3076644,"frequency":0.4068389},{"time":0.32217687,"frequency":1},{"time":0.33959183,"frequency":0.45317227},{"time":0.3541043,"frequency":0.82693774},{"time":0.3628118,"frequency":0.32862794},{"time":0.38603175,"frequency":0.4824185},{"time":0.39473924,"frequency":0.7861964},{"time":0.43827665,"frequency":0.256382},{"time":0.4469841,"frequency":0.9399025},{"time":0.4556916,"frequency":0.35999793},{"time":0.47310656,"frequency":0.233705}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.haptic.meta new file mode 100644 index 0000000..9a99d5b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0d2b5984bc090493787fc3bc832277d3 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.wav new file mode 100644 index 0000000..e6ab3be Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.wav.meta new file mode 100644 index 0000000..f72d0ca --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Button4.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 21896ba3ac38b4ae99d5dca706ab412d +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.haptic new file mode 100644 index 0000000..d935d87 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Camera Shutter 1.wav","project":"Camera Shutter 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0014237964},{"time":0.027836344895844693,"amplitude":0.0006157667098867738,"emphasis":{"amplitude":0.04813812943999006,"frequency":0.5}},{"time":0.044274379952730446,"amplitude":0.00033814387930825376,"emphasis":{"amplitude":0.04515952195439848,"frequency":0.5}},{"time":0.05333925101969252,"amplitude":0.00026338174300969823,"emphasis":{"amplitude":0.10032922717876208,"frequency":0.5}},{"time":0.06938276,"amplitude":0},{"time":0.06938776,"amplitude":0.4123249,"emphasis":{"amplitude":0.51540613,"frequency":0.9325876}},{"time":0.07999653238963327,"amplitude":0},{"time":0.10663235075641475,"amplitude":0.010989510000000008},{"time":0.108390026,"amplitude":0.773598768,"emphasis":{"amplitude":0.96699846,"frequency":0.5}},{"time":0.1222816608088264,"amplitude":0.005155675789473714,"emphasis":{"amplitude":0.37749722631578975,"frequency":0.5}},{"time":0.13462728398972282,"amplitude":0.002600563003161205,"emphasis":{"amplitude":0.050619124806583045,"frequency":0.5}},{"time":0.14527494225381793,"amplitude":0.0016077335336806692,"emphasis":{"amplitude":0.07043071954867977,"frequency":0.5}},{"time":0.1542514007564147,"amplitude":0},{"time":0.15646258,"amplitude":0.57875276,"emphasis":{"amplitude":0.72344095,"frequency":0.5}},{"time":0.1718386024583478,"amplitude":0},{"time":0.1883651082468579,"amplitude":0},{"time":0.19153471115711723,"amplitude":0.043498820631579053,"emphasis":{"amplitude":0.21555773631578948,"frequency":0.5}},{"time":0.19846371266817175,"amplitude":0},{"time":0.21403236731382327,"amplitude":0.00523195905246499},{"time":0.21403736731382328,"amplitude":0.013780525058368307,"emphasis":{"amplitude":0.1784098668492762,"frequency":0.5}},{"time":0.22552980479799156,"amplitude":0},{"time":0.27482992,"amplitude":0.009736598},{"time":0.4176871,"amplitude":0.000057095807},{"time":0.41800454,"amplitude":0.000057095807}],"frequency":[{"time":0,"frequency":0.4315789473684208},{"time":0.06902944056731102,"frequency":0.25809268421052606},{"time":0.09225192056731102,"frequency":0.05432780421052631},{"time":0.10834986274734022,"frequency":0.5791952539700144},{"time":0.11251827441037407,"frequency":0.08679646124472534},{"time":0.2051105782980668,"frequency":0.10287980210526332},{"time":0.41800454,"frequency":0.06797357}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.haptic.meta new file mode 100644 index 0000000..fc5820a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 66f3ca43b4d1b4b69936896892e1eab1 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.wav new file mode 100644 index 0000000..a9ad847 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.wav.meta new file mode 100644 index 0000000..9a7b9e6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/CameraShutter1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 44371b3a333ee44a1a98d55d464d0db8 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.haptic new file mode 100644 index 0000000..c0918df --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Hover 1.wav","project":"Hover 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0025260486},{"time":0.05840408152917867,"amplitude":0.02161134047515697},{"time":0.06739097740384015,"amplitude":0.1097122520580174,"emphasis":{"amplitude":0.33714031507252157,"frequency":0.5}},{"time":0.0918596332118118,"amplitude":0.20489764798850751,"emphasis":{"amplitude":0.8877010073540548,"frequency":0.5}},{"time":0.12301222794130033,"amplitude":0.13462223071347662,"emphasis":{"amplitude":0.36827778839184566,"frequency":0.5}},{"time":0.14633999810587325,"amplitude":0.11268480494081756,"emphasis":{"amplitude":0.3408560061760218,"frequency":0.5}},{"time":0.1844277180676792,"amplitude":0.04518807758012674,"emphasis":{"amplitude":0.2564850969751583,"frequency":0.5}},{"time":0.22399749161907387,"amplitude":0.031730222883597385,"emphasis":{"amplitude":0.1659785680781813,"frequency":0.5}},{"time":0.26441950408992876,"amplitude":0.03443938575454944,"emphasis":{"amplitude":0.14041765324581834,"frequency":0.5}},{"time":0.46077096,"amplitude":0.006612903},{"time":1.5482993,"amplitude":0},{"time":1.5486622,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.06389009531666932,"frequency":0.4736668236842104},{"time":0.11554949244128945,"frequency":0.26552706315789426},{"time":0.21996506965538506,"frequency":0.14571020148233244},{"time":0.6644274192374634,"frequency":0},{"time":1.3529455937720822,"frequency":0},{"time":1.5486622,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.haptic.meta new file mode 100644 index 0000000..57b1c34 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 51d42e1b295bb40feb427fa841e60e12 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.wav new file mode 100644 index 0000000..ef6ae2f Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.wav.meta new file mode 100644 index 0000000..e248608 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 0fe455473679d4d6a85db8a2f9330cbf +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.haptic new file mode 100644 index 0000000..815dc57 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Hover 2.wav","project":"Hover 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0020982765},{"time":0.0005,"amplitude":0},{"time":0.03429942586414026,"amplitude":0.02392127368421028},{"time":0.04624593124037059,"amplitude":0.8450623263971733,"emphasis":{"amplitude":0.9734331711543605,"frequency":0.5}},{"time":0.0559379277828922,"amplitude":0.03941067707622702},{"time":0.07027212277937105,"amplitude":0.03174370790415179,"emphasis":{"amplitude":0.4659954243538741,"frequency":0.5}},{"time":0.10251380708951817,"amplitude":0.06652259957894725,"emphasis":{"amplitude":0.34104798631578936,"frequency":0.5}},{"time":0.11991135413819834,"amplitude":0.048495026856837826,"emphasis":{"amplitude":0.3185135204131525,"frequency":0.5}},{"time":0.14391615926842466,"amplitude":0.036214785091689586,"emphasis":{"amplitude":0.24790006031198025,"frequency":0.5}},{"time":0.16343054963728687,"amplitude":0.030894072724548877,"emphasis":{"amplitude":0.18335443301094917,"frequency":0.5}},{"time":0.18032188592401693,"amplitude":0.03243465515789475,"emphasis":{"amplitude":0.13791174000000003,"frequency":0.5}},{"time":0.2132915016127183,"amplitude":0.024110295069390338,"emphasis":{"amplitude":0.12750628988936946,"frequency":0.5}},{"time":0.2322955785853369,"amplitude":0.01977795091183819,"emphasis":{"amplitude":0.1220908596924293,"frequency":0.5}},{"time":0.2734694,"amplitude":0.020871207200000002,"emphasis":{"amplitude":0.08924690373684213,"frequency":0.5}},{"time":0.5782313,"amplitude":0.0019770602},{"time":1.2494332,"amplitude":0.000014635607},{"time":1.2497506,"amplitude":0.000014635607}],"frequency":[{"time":0,"frequency":0},{"time":0.045830004930275406,"frequency":0.7359287673684213},{"time":0.08426667119710289,"frequency":0.14902728461474746},{"time":0.14093176952479883,"frequency":0.07483657297340433},{"time":1.0288644,"frequency":0.03800095},{"time":1.2497506,"frequency":0.021947687}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.haptic.meta new file mode 100644 index 0000000..b131745 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dbe66c4ad71ff4b6cb27fc4e9cbfddc7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.wav new file mode 100644 index 0000000..6402f57 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.wav.meta new file mode 100644 index 0000000..14b2c57 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Hover2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 4cb634cd904754615b18e24545da86ab +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.haptic new file mode 100644 index 0000000..b22f98e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Pop 1.wav","project":"Pop 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0},{"time":0.008063758271607246,"amplitude":0.029304065894736844},{"time":0.011395540541367332,"amplitude":0.5641711351578943,"emphasis":{"amplitude":0.9091612873684208,"frequency":0.1}},{"time":0.017189262157057832,"amplitude":0.22631079821415734},{"time":0.05243109229457362,"amplitude":0},{"time":0.16916099,"amplitude":0.01176179},{"time":0.1695238,"amplitude":0.01176179}],"frequency":[{"time":0,"frequency":0},{"time":0.013655137692875609,"frequency":0.9758325078947371},{"time":0.06726817983333305,"frequency":0.3288140979911518},{"time":0.1695238,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.haptic.meta new file mode 100644 index 0000000..8b402c1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ea7d34d87f5e647b087c1b6e686028ca +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.wav b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.wav new file mode 100644 index 0000000..2230d2b Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.wav.meta new file mode 100644 index 0000000..8b38638 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/ApplicationUX/Pop1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 7336cd5e6e4f74693ac6c4b607b671ef +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps.meta new file mode 100644 index 0000000..5a30376 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af51737994209402685054b8c8721aab +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.haptic new file mode 100644 index 0000000..b0cd4aa --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Footstep Grass 1.wav","project":"Footstep Grass 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.008426483},{"time":0.0010204081,"amplitude":0.008426483},{"time":0.02201814,"amplitude":0.07572767},{"time":0.0470068,"amplitude":0.053258263},{"time":0.08600907,"amplitude":0.1859013},{"time":0.122018136,"amplitude":0.18866003},{"time":0.1270068,"amplitude":0.5190276},{"time":0.1540136,"amplitude":0.20882663},{"time":0.1710204,"amplitude":0.3669816},{"time":0.1870068,"amplitude":0.25921988},{"time":0.18900226,"amplitude":0.47525695},{"time":0.20201814,"amplitude":0.30856946},{"time":0.2070068,"amplitude":0.5868224},{"time":0.23201814,"amplitude":0.294988},{"time":0.26501134,"amplitude":0.29405117},{"time":0.26600906,"amplitude":0.52061486},{"time":0.28301588,"amplitude":0.27710104},{"time":0.31,"amplitude":0.13188097},{"time":0.35800454,"amplitude":0.07656935},{"time":0.3840136,"amplitude":0.07799936},{"time":0.38800454,"amplitude":0.2286133},{"time":0.40501133,"amplitude":0.14576893},{"time":0.4370068,"amplitude":0.11787012},{"time":0.43800452,"amplitude":0.30288336},{"time":0.47900227,"amplitude":0.084112875},{"time":0.48,"amplitude":0.20140935},{"time":0.5592894620689657,"amplitude":0},{"time":0.999995,"amplitude":0},{"time":1,"amplitude":0.008842595}],"frequency":[{"time":0,"frequency":0.8503002},{"time":0.011609977,"frequency":0.14150035},{"time":0.0493424,"frequency":0.1564721},{"time":0.078367345,"frequency":0.41444108},{"time":0.124807246,"frequency":0.092672236},{"time":0.15673469,"frequency":0.38210237},{"time":0.16834468,"frequency":0.0821678},{"time":0.2031746,"frequency":0.33629638},{"time":0.22349207,"frequency":0.058896177},{"time":0.24380952,"frequency":0.3293296},{"time":0.258322,"frequency":0.051514342},{"time":0.36571428,"frequency":0.21522413},{"time":0.41505668,"frequency":0.08467346},{"time":0.4556916,"frequency":0.16613619},{"time":0.46730158,"frequency":0.45526278},{"time":0.5195465,"frequency":0.066152416},{"time":0.53986394,"frequency":0.41492304},{"time":0.5543764,"frequency":0.07153515},{"time":0.5973335413793103,"frequency":0},{"time":0.94911563,"frequency":0},{"time":1.01,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.haptic.meta new file mode 100644 index 0000000..035dbb2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d143c29eff85741f2baf4141cea19c8d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.wav new file mode 100644 index 0000000..04f0161 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.wav.meta new file mode 100644 index 0000000..8d09818 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ebbcbfff273fb437d9bb5b10069a7901 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.haptic new file mode 100644 index 0000000..5942200 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Footstep Grass 2.wav","project":"Footstep Grass 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.004705174},{"time":0.0010204081,"amplitude":0.004705174},{"time":0.12501134,"amplitude":0.004600965},{"time":0.14501134,"amplitude":0.04592041},{"time":0.19501133,"amplitude":0.034783345},{"time":0.19600907,"amplitude":0.08589179},{"time":0.2410204,"amplitude":0.025938982},{"time":0.24201813,"amplitude":0.26102898,"emphasis":{"amplitude":0.32628623,"frequency":0.08118973}},{"time":0.26600906,"amplitude":0.1286961},{"time":0.28201813,"amplitude":0.0732713},{"time":0.28301588,"amplitude":0.12414892},{"time":0.30600905,"amplitude":0.06253018},{"time":0.34301588,"amplitude":0.055963337},{"time":0.3510204,"amplitude":0.11238825},{"time":0.36800453,"amplitude":0.12430915},{"time":0.4040136,"amplitude":0.043864913},{"time":0.40501133,"amplitude":0.07339838},{"time":0.42700678,"amplitude":0.0475403},{"time":0.45900226,"amplitude":0.13410711},{"time":0.48800454,"amplitude":0.055946894},{"time":0.49600905,"amplitude":0.08212346},{"time":0.4970068,"amplitude":0.47352734,"emphasis":{"amplitude":0.59190917,"frequency":0.4463032}},{"time":0.51,"amplitude":0.39912915},{"time":0.5360091,"amplitude":0.23934427},{"time":0.5370068,"amplitude":0.42027062},{"time":0.5440136,"amplitude":0.35158044},{"time":0.54501134,"amplitude":0.5990882},{"time":0.5609977,"amplitude":0.32752582},{"time":0.5740136,"amplitude":0.18669344},{"time":0.59,"amplitude":0.106218666},{"time":0.6190023,"amplitude":0.10039992},{"time":0.6509977,"amplitude":0.048668697},{"time":0.6890023,"amplitude":0.070654094},{"time":0.732606895402299,"amplitude":0},{"time":0.999995,"amplitude":0},{"time":1,"amplitude":0.00517717}],"frequency":[{"time":0,"frequency":0},{"time":0.11377793091954023,"frequency":0},{"time":0.18285714,"frequency":0.20612247},{"time":0.21188208,"frequency":0.020341454},{"time":0.23800454,"frequency":0.337501},{"time":0.26122448,"frequency":0.1380253},{"time":0.3512018,"frequency":0.15073776},{"time":0.39473924,"frequency":0.4699283},{"time":0.42956915,"frequency":0.09170202},{"time":0.4585941,"frequency":0.4582071},{"time":0.52244896,"frequency":0.030817915},{"time":0.57759637,"frequency":0.09315784},{"time":0.69369614,"frequency":0.009739912},{"time":0.8039913022988507,"frequency":0},{"time":1.01,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.haptic.meta new file mode 100644 index 0000000..3ef3583 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 66766b9d15c7f465b8577c523b317356 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.wav new file mode 100644 index 0000000..a8cd4c1 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.wav.meta new file mode 100644 index 0000000..a06944b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 7f25e4d1fb85541e5b86dd24eec1b76a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.haptic new file mode 100644 index 0000000..d45d4bc --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Footstep Grass 3.wav","project":"Footstep Grass 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0014075489},{"time":0.0010204081,"amplitude":0.0014075489},{"time":0.057006802,"amplitude":0.015552874},{"time":0.06301587,"amplitude":0.05285189},{"time":0.08900227,"amplitude":0.03191307},{"time":0.090022676,"amplitude":0.25499564},{"time":0.10301587,"amplitude":0.20548435},{"time":0.10401361,"amplitude":0.39770356},{"time":0.114013605,"amplitude":0.28460607},{"time":0.115011334,"amplitude":0.46104476,"emphasis":{"amplitude":0.5763059,"frequency":0.05586357}},{"time":0.12800454,"amplitude":0.36423656},{"time":0.14800453,"amplitude":0.17710641},{"time":0.1610204,"amplitude":0.105395235},{"time":0.18002267,"amplitude":0.056869462},{"time":0.19800453,"amplitude":0.050662868},{"time":0.19900227,"amplitude":0.08096014},{"time":0.2170068,"amplitude":0.04760866},{"time":0.21800452,"amplitude":0.14347121},{"time":0.2510204,"amplitude":0.044833157},{"time":0.25501132,"amplitude":0.21318908},{"time":0.26900226,"amplitude":0.12881638},{"time":0.2840136,"amplitude":0.07443184},{"time":0.29800454,"amplitude":0.058986545},{"time":0.29900226,"amplitude":0.1139653},{"time":0.31900227,"amplitude":0.05573649},{"time":0.35999998,"amplitude":0.021697033},{"time":0.3710204,"amplitude":0.038006634},{"time":0.37501132,"amplitude":0.0981231},{"time":0.41,"amplitude":0.03603214},{"time":0.41301587,"amplitude":0.08702609},{"time":0.42800453,"amplitude":0.054862335},{"time":0.4809977,"amplitude":0.01985053},{"time":0.5040136,"amplitude":0.040453274},{"time":0.5050113,"amplitude":0.072555676},{"time":0.55501133,"amplitude":0.025627516},{"time":0.5809977,"amplitude":0.013638578},{"time":0.6130159,"amplitude":0.020457659},{"time":0.6240136,"amplitude":0.060303047},{"time":0.66501135,"amplitude":0.01922159},{"time":0.69900227,"amplitude":0.028807335},{"time":0.72900224,"amplitude":0.015060335},{"time":0.7299773,"amplitude":0.015060335},{"time":0.7299773,"amplitude":0.015060335}],"frequency":[{"time":0,"frequency":0.44705635},{"time":0.011609977,"frequency":0.1030611},{"time":0.04643991,"frequency":0.7140129873684214},{"time":0.06385487,"frequency":0.42908467336842127},{"time":0.08707482,"frequency":0.7482104673684215},{"time":0.0986848,"frequency":0.5063235073684212},{"time":0.1509297,"frequency":0.7985544273684215},{"time":0.16544218,"frequency":0.45358965736842133},{"time":0.20897959,"frequency":0.6100806973684214},{"time":0.22639456,"frequency":0.4293417673684213},{"time":0.28889904666666655,"frequency":0.5153090936842109},{"time":0.33959183,"frequency":0.04744858},{"time":0.3512018,"frequency":0.44510823},{"time":0.3599093,"frequency":0.07835449},{"time":0.38893422,"frequency":0.0596495},{"time":0.4063492,"frequency":0.32776386},{"time":0.42086166,"frequency":0.069259636},{"time":0.4469841,"frequency":0.032959633},{"time":0.4702041,"frequency":0.3521765},{"time":0.499229,"frequency":0.041888177},{"time":0.52244896,"frequency":0.0415878},{"time":0.5340589,"frequency":0.28959933},{"time":0.5659864,"frequency":0.12421242},{"time":0.58630383,"frequency":0.32277754},{"time":0.5979138,"frequency":0.03815158},{"time":0.6356462,"frequency":0.110842444},{"time":0.64435375,"frequency":0.35622284},{"time":0.6733787,"frequency":0.081968606},{"time":0.7169161,"frequency":0.094642535}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.haptic.meta new file mode 100644 index 0000000..866e4f1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4ee94e04a4ac8463e81379f13e61d7ca +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.wav new file mode 100644 index 0000000..f363b26 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.wav.meta new file mode 100644 index 0000000..35d9802 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGrass3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 5a67c3ebaba314bdcb3ae080147fdda7 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.haptic new file mode 100644 index 0000000..cb061d5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Footstep Gravel 1.wav","project":"Footstep Gravel 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00012734365},{"time":0.0010204081,"amplitude":0.00012734365},{"time":0.023015874,"amplitude":0.0069340924},{"time":0.027006803,"amplitude":0.03014868,"emphasis":{"amplitude":0.03768585,"frequency":0.5}},{"time":0.028004535,"amplitude":0.071694768,"emphasis":{"amplitude":0.08961846,"frequency":0.5}},{"time":0.034013607,"amplitude":0.06185548800000001,"emphasis":{"amplitude":0.07731936,"frequency":0.5}},{"time":0.035011336,"amplitude":0.13206552000000002,"emphasis":{"amplitude":0.1650819,"frequency":0.5}},{"time":0.037006803,"amplitude":0.12777037600000002,"emphasis":{"amplitude":0.15971297,"frequency":0.5}},{"time":0.038004536,"amplitude":0.276372,"emphasis":{"amplitude":0.345465,"frequency":0.5}},{"time":0.04,"amplitude":0.272618344,"emphasis":{"amplitude":0.34077293,"frequency":0.5}},{"time":0.05,"amplitude":0.179471328,"emphasis":{"amplitude":0.22433916,"frequency":0.5}},{"time":0.05201814,"amplitude":0.6954779,"emphasis":{"amplitude":0.8693474,"frequency":0.5}},{"time":0.057006802,"amplitude":0.5781188,"emphasis":{"amplitude":0.7226485,"frequency":0.5}},{"time":0.06600907,"amplitude":0.39159307200000004,"emphasis":{"amplitude":0.48949134,"frequency":0.5}},{"time":0.07201814,"amplitude":0.305681632,"emphasis":{"amplitude":0.38210204,"frequency":0.5}},{"time":0.08201814,"amplitude":0.20034453600000002,"emphasis":{"amplitude":0.25043067,"frequency":0.5}},{"time":0.09301587,"amplitude":0.12971326400000002,"emphasis":{"amplitude":0.16214158,"frequency":0.5}},{"time":0.1070068,"amplitude":0.080396488,"emphasis":{"amplitude":0.10049561,"frequency":0.5}},{"time":0.12002268,"amplitude":0.064730456,"emphasis":{"amplitude":0.08091307,"frequency":0.5}},{"time":0.12301587,"amplitude":0.139427712,"emphasis":{"amplitude":0.17428464,"frequency":0.5}},{"time":0.1440136,"amplitude":0.067321384,"emphasis":{"amplitude":0.08415173,"frequency":0.5}},{"time":0.14600907,"amplitude":0.08865816800000001,"emphasis":{"amplitude":0.11082271,"frequency":0.5}},{"time":0.1670068,"amplitude":0.040643128,"emphasis":{"amplitude":0.05080391,"frequency":0.5}},{"time":0.16900226,"amplitude":0.197926184,"emphasis":{"amplitude":0.24740773,"frequency":0.5}},{"time":0.18301587,"amplitude":0.11655607200000001,"emphasis":{"amplitude":0.14569509,"frequency":0.5}},{"time":0.19900227,"amplitude":0.06348614400000001,"emphasis":{"amplitude":0.07935768,"frequency":0.5}},{"time":0.21201813,"amplitude":0.038327104,"emphasis":{"amplitude":0.04790888,"frequency":0.5}},{"time":0.22800453,"amplitude":0.022111569600000002,"emphasis":{"amplitude":0.027639462,"frequency":0.5}},{"time":0.22900227,"amplitude":0.06635587200000001,"emphasis":{"amplitude":0.08294484,"frequency":0.5}},{"time":0.2340136,"amplitude":0.06274512,"emphasis":{"amplitude":0.0784314,"frequency":0.5}},{"time":0.23501134,"amplitude":0.086737436,"emphasis":{"amplitude":0.108421795,"frequency":0.5}},{"time":0.25600907,"amplitude":0.04254208,"emphasis":{"amplitude":0.0531776,"frequency":0.5}},{"time":0.26800454,"amplitude":0.030583596000000005,"emphasis":{"amplitude":0.038229495,"frequency":0.5}},{"time":0.26900226,"amplitude":0.073363664,"emphasis":{"amplitude":0.09170458,"frequency":0.5}},{"time":0.28600907,"amplitude":0.038466176000000005,"emphasis":{"amplitude":0.04808272,"frequency":0.5}},{"time":0.2970068,"amplitude":0.025281824000000005,"emphasis":{"amplitude":0.03160228,"frequency":0.5}},{"time":0.29800454,"amplitude":0.035094148,"emphasis":{"amplitude":0.043867685,"frequency":0.5}},{"time":0.32,"amplitude":0.0162490248,"emphasis":{"amplitude":0.020311281,"frequency":0.5}},{"time":0.33900225,"amplitude":0.011517153600000002,"emphasis":{"amplitude":0.014396442,"frequency":0.5}},{"time":0.34,"amplitude":0.017949332000000002,"emphasis":{"amplitude":0.022436665,"frequency":0.5}},{"time":0.3810204,"amplitude":0.0049409876},{"time":0.3819501,"amplitude":0.0049409876},{"time":0.3819501,"amplitude":0.0049409876}],"frequency":[{"time":0,"frequency":0.6114192},{"time":0.0029024947,"frequency":0.1678133},{"time":0.0058049876,"frequency":1},{"time":0.008707482,"frequency":1},{"time":0.014512472,"frequency":0.66040814},{"time":0.029024942,"frequency":0.6252365},{"time":0.040634923,"frequency":0.7052585},{"time":0.04643991,"frequency":0.59833413},{"time":0.06965986,"frequency":0.63540894},{"time":0.08417233,"frequency":0.5180644},{"time":0.101587296,"frequency":0.65771276},{"time":0.12770975,"frequency":0.611691},{"time":0.13931973,"frequency":0.67743164},{"time":0.1596372,"frequency":0.54164654},{"time":0.16253969,"frequency":0.6342457},{"time":0.17124717,"frequency":0.63009214},{"time":0.18285714,"frequency":0.5335281},{"time":0.2060771,"frequency":0.5935236},{"time":0.21478458,"frequency":0.37640098},{"time":0.22639456,"frequency":0.47513768},{"time":0.23800454,"frequency":0.49199703},{"time":0.26122448,"frequency":0.39863956},{"time":0.27863947,"frequency":0.5097677},{"time":0.29895693,"frequency":0.4609336},{"time":0.3163719,"frequency":0.5584466},{"time":0.32507935,"frequency":0.534702},{"time":0.34249434,"frequency":0.37091452},{"time":0.3570068,"frequency":0.58635},{"time":0.3628118,"frequency":0.42784458},{"time":0.3686168,"frequency":0.45162097}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.haptic.meta new file mode 100644 index 0000000..ed82531 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: eb740385b45ef49b98e7b3e932fee206 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.wav new file mode 100644 index 0000000..93640ff Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.wav.meta new file mode 100644 index 0000000..3da28b9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 3376c0b6a8c5f4b539dbbf44b0698d59 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.haptic new file mode 100644 index 0000000..49947bf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Footstep Gravel 2.wav","project":"Footstep Gravel 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0032902423},{"time":0.0010204081,"amplitude":0.0032902423},{"time":0.01201814,"amplitude":0.009899264},{"time":0.01600907,"amplitude":0.052277688},{"time":0.019002268,"amplitude":0.11947481600000001,"emphasis":{"amplitude":0.17302773052631581,"frequency":0.5}},{"time":0.029002268,"amplitude":0.091438792,"emphasis":{"amplitude":0.13798270052631578,"frequency":0.5}},{"time":0.031020408,"amplitude":0.16103944,"emphasis":{"amplitude":0.22498351052631577,"frequency":0.5}},{"time":0.037006803,"amplitude":0.145970704,"emphasis":{"amplitude":0.20614759052631582,"frequency":0.5}},{"time":0.038004536,"amplitude":0.16479163200000002,"emphasis":{"amplitude":0.22967375052631578,"frequency":0.5}},{"time":0.048004534,"amplitude":0.116194856,"emphasis":{"amplitude":0.1689277805263158,"frequency":0.5}},{"time":0.053015873,"amplitude":0.101658952,"emphasis":{"amplitude":0.15075790052631577,"frequency":0.5}},{"time":0.054013606,"amplitude":0.1218354,"emphasis":{"amplitude":0.17597846052631577,"frequency":0.5}},{"time":0.058004536,"amplitude":0.11337734399999999,"emphasis":{"amplitude":0.16540589052631577,"frequency":0.5}},{"time":0.059002265,"amplitude":0.17057881600000002,"emphasis":{"amplitude":0.2369077305263158,"frequency":0.5}},{"time":0.06800453,"amplitude":0.144050408,"emphasis":{"amplitude":0.20374722052631578,"frequency":0.5}},{"time":0.06900226,"amplitude":0.15947984,"emphasis":{"amplitude":0.22303401052631577,"frequency":0.5}},{"time":0.08600907,"amplitude":0.09225328000000001,"emphasis":{"amplitude":0.1390008105263158,"frequency":0.5}},{"time":0.1010204,"amplitude":0.070012},{"time":0.10401361,"amplitude":0.06398540800000001,"emphasis":{"amplitude":0.10366597052631579,"frequency":0.5}},{"time":0.11900227,"amplitude":0.054800972},{"time":0.12002268,"amplitude":0.067992276,"emphasis":{"amplitude":0.10867455552631579,"frequency":0.5}},{"time":0.12501134,"amplitude":0.07554532800000001,"emphasis":{"amplitude":0.1181158705263158,"frequency":0.5}},{"time":0.1410204,"amplitude":0.056566153},{"time":0.1440136,"amplitude":0.06185624,"emphasis":{"amplitude":0.10100451052631579,"frequency":0.5}},{"time":0.14900227,"amplitude":0.06733346},{"time":0.15201814,"amplitude":0.0755234,"emphasis":{"amplitude":0.11808846052631579,"frequency":0.5}},{"time":0.15301587,"amplitude":0.107892528,"emphasis":{"amplitude":0.1585498705263158,"frequency":0.5}},{"time":0.1610204,"amplitude":0.10926484800000001,"emphasis":{"amplitude":0.16026527052631578,"frequency":0.5}},{"time":0.16201814,"amplitude":0.12945656800000002,"emphasis":{"amplitude":0.1855049205263158,"frequency":0.5}},{"time":0.1670068,"amplitude":0.1425933},{"time":0.16800453,"amplitude":0.34146988,"emphasis":{"amplitude":0.42683735,"frequency":0.03292351}},{"time":0.16900226,"amplitude":0.42683735},{"time":0.17900227,"amplitude":0.2815507},{"time":0.1870068,"amplitude":0.20003454},{"time":0.19501133,"amplitude":0.14779088},{"time":0.20501134,"amplitude":0.10459726},{"time":0.22201814,"amplitude":0.05498571},{"time":0.24301587,"amplitude":0.027094372},{"time":0.27900225,"amplitude":0.008573056},{"time":0.28,"amplitude":0.014465176},{"time":0.30900225,"amplitude":0.0061000786},{"time":0.30909297,"amplitude":0.0061000786},{"time":0.30909297,"amplitude":0.0061000786}],"frequency":[{"time":0,"frequency":0.59077096},{"time":0.017414967,"frequency":0.65885276},{"time":0.023219952,"frequency":0.61691666},{"time":0.029024942,"frequency":0.66650414},{"time":0.043537416,"frequency":0.55940235},{"time":0.052244894,"frequency":0.72550267},{"time":0.06385487,"frequency":0.7194987},{"time":0.07256235,"frequency":0.6038745},{"time":0.08126984,"frequency":0.75532544},{"time":0.09287982,"frequency":0.582834},{"time":0.101587296,"frequency":0.59772766},{"time":0.10739229,"frequency":0.65663475},{"time":0.113197275,"frequency":0.5429339},{"time":0.124807246,"frequency":0.6976553},{"time":0.14222223,"frequency":0.5313206},{"time":0.14802721,"frequency":0.65671116},{"time":0.17414966,"frequency":0.63563627},{"time":0.17995465,"frequency":0.6100991},{"time":0.18866213,"frequency":0.68388206},{"time":0.20027211,"frequency":0.609591},{"time":0.21188208,"frequency":0.49270624},{"time":0.21768707,"frequency":0.55910885},{"time":0.22349207,"frequency":0.5531437},{"time":0.22929706,"frequency":0.47536978},{"time":0.24090704,"frequency":0.50336367},{"time":0.252517,"frequency":0.44154155},{"time":0.264127,"frequency":0.55470204},{"time":0.27573696,"frequency":0.5865607},{"time":0.29024944,"frequency":0.5313619},{"time":0.29605442,"frequency":0.6325101}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.haptic.meta new file mode 100644 index 0000000..0c05d78 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d4398599ca1964a6c83248616d030c53 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.wav new file mode 100644 index 0000000..1b35460 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.wav.meta new file mode 100644 index 0000000..bc00645 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: d1d3cb96244b84eb8bb9acd2272505ce +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.haptic new file mode 100644 index 0000000..8869b84 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Footstep Gravel 3.wav","project":"Footstep Gravel 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00014176616},{"time":0.0010204081,"amplitude":0.00014176616},{"time":0.027006803,"amplitude":0.0001634198},{"time":0.03201814,"amplitude":0.0270144672,"emphasis":{"amplitude":0.033768084,"frequency":0.5}},{"time":0.039002266,"amplitude":0.025546544,"emphasis":{"amplitude":0.03193318,"frequency":0.5}},{"time":0.045011338,"amplitude":0.051781136000000005,"emphasis":{"amplitude":0.06472642,"frequency":0.5}},{"time":0.049002267,"amplitude":0.051557968,"emphasis":{"amplitude":0.06444746,"frequency":0.5}},{"time":0.05,"amplitude":0.084118512,"emphasis":{"amplitude":0.10514814,"frequency":0.5}},{"time":0.053015873,"amplitude":0.10566790399999999,"emphasis":{"amplitude":0.13208488,"frequency":0.5}},{"time":0.057006802,"amplitude":0.14792506},{"time":0.058004536,"amplitude":0.159587632,"emphasis":{"amplitude":0.19948454,"frequency":0.5}},{"time":0.06600907,"amplitude":0.15988591},{"time":0.06800453,"amplitude":0.142904272,"emphasis":{"amplitude":0.17863034,"frequency":0.5}},{"time":0.06900226,"amplitude":0.201946184,"emphasis":{"amplitude":0.25243273,"frequency":0.5}},{"time":0.08102041,"amplitude":0.13513761600000002,"emphasis":{"amplitude":0.16892202,"frequency":0.5}},{"time":0.08800454,"amplitude":0.13485382},{"time":0.08900227,"amplitude":0.15856233600000003,"emphasis":{"amplitude":0.19820292,"frequency":0.5}},{"time":0.09600907,"amplitude":0.12953187200000002,"emphasis":{"amplitude":0.16191484,"frequency":0.5}},{"time":0.0970068,"amplitude":0.21630554400000002,"emphasis":{"amplitude":0.27038193,"frequency":0.5}},{"time":0.11201814,"amplitude":0.129774104,"emphasis":{"amplitude":0.16221763,"frequency":0.5}},{"time":0.114013605,"amplitude":0.143780912,"emphasis":{"amplitude":0.17972614,"frequency":0.5}},{"time":0.12002268,"amplitude":0.14264195},{"time":0.13102041,"amplitude":0.077584076,"emphasis":{"amplitude":0.096980095,"frequency":0.5}},{"time":0.13800453,"amplitude":0.0670734528,"emphasis":{"amplitude":0.083841816,"frequency":0.5}},{"time":0.1470068,"amplitude":0.066103936,"emphasis":{"amplitude":0.08262992,"frequency":0.5}},{"time":0.15501134,"amplitude":0.06376222},{"time":0.1570068,"amplitude":0.06486884000000001,"emphasis":{"amplitude":0.08108605,"frequency":0.5}},{"time":0.16201814,"amplitude":0.060598728000000004,"emphasis":{"amplitude":0.07574841,"frequency":0.5}},{"time":0.16401361,"amplitude":0.08451119680000001,"emphasis":{"amplitude":0.105638996,"frequency":0.5}},{"time":0.17501134,"amplitude":0.06906236,"emphasis":{"amplitude":0.08632795,"frequency":0.5}},{"time":0.1770068,"amplitude":0.08637652000000001,"emphasis":{"amplitude":0.10797065,"frequency":0.5}},{"time":0.18002267,"amplitude":0.0901960432,"emphasis":{"amplitude":0.112745054,"frequency":0.5}},{"time":0.1870068,"amplitude":0.07556841600000001,"emphasis":{"amplitude":0.09446052,"frequency":0.5}},{"time":0.18900226,"amplitude":0.10909968},{"time":0.2010204,"amplitude":0.07388901},{"time":0.20201814,"amplitude":0.07898386},{"time":0.2170068,"amplitude":0.04710523},{"time":0.2270068,"amplitude":0.034620035},{"time":0.2410204,"amplitude":0.02401442},{"time":0.24501133,"amplitude":0.03017257},{"time":0.26600906,"amplitude":0.013004575},{"time":0.26639456,"amplitude":0.013004575},{"time":0.26639456,"amplitude":0.013004575}],"frequency":[{"time":0,"frequency":1},{"time":0.017414967,"frequency":1},{"time":0.023219952,"frequency":0.5929355},{"time":0.026122449,"frequency":0.5449889},{"time":0.03482993,"frequency":0.5102843},{"time":0.040634923,"frequency":0.62277067},{"time":0.04643991,"frequency":0.5889234},{"time":0.052244894,"frequency":0.6200827},{"time":0.06385487,"frequency":0.7331981},{"time":0.078367345,"frequency":0.6552569},{"time":0.08417233,"frequency":0.6951006},{"time":0.089977324,"frequency":0.6755566},{"time":0.09578231,"frequency":0.7035583},{"time":0.10739229,"frequency":0.70587957},{"time":0.11900226,"frequency":0.67293346},{"time":0.12770975,"frequency":0.5366485},{"time":0.13351475,"frequency":0.5692216},{"time":0.14222223,"frequency":0.67833114},{"time":0.1509297,"frequency":0.6147531},{"time":0.15673469,"frequency":0.61050534},{"time":0.16253969,"frequency":0.6550802},{"time":0.17705216,"frequency":0.6501368},{"time":0.19156463,"frequency":0.5590579},{"time":0.19736962,"frequency":0.65942246},{"time":0.2060771,"frequency":0.5784191},{"time":0.21188208,"frequency":0.6091039},{"time":0.22349207,"frequency":0.5651352},{"time":0.22929706,"frequency":0.46508783},{"time":0.23510204,"frequency":0.4337512},{"time":0.252517,"frequency":0.50641006}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.haptic.meta new file mode 100644 index 0000000..5de4692 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b91f6265583fe4773aebfa75cad86a2f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.wav new file mode 100644 index 0000000..208ac35 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.wav.meta new file mode 100644 index 0000000..76a3a40 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepGravel3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: c8ad05c7ac4804d67a9aba9617b6abcc +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.haptic new file mode 100644 index 0000000..abece56 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Footstep Snow 1.wav","project":"Footstep Snow 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.009327966},{"time":0.01734272907089536,"amplitude":0.4525538657894736,"emphasis":{"amplitude":0.7018765052631581,"frequency":0.0012461472}},{"time":0.05079365,"amplitude":0.35195825},{"time":0.05418659314179072,"amplitude":0.6129565557894736,"emphasis":{"amplitude":0.8734325368421054,"frequency":0.888737}},{"time":0.07800453,"amplitude":0.3584133},{"time":0.09614512,"amplitude":0.37480083},{"time":0.10401107944253722,"amplitude":0.477332631578947,"emphasis":{"amplitude":0.9867973684210534,"frequency":0.9}},{"time":0.10779065148835065,"amplitude":0.6711147862571111},{"time":0.12789115,"amplitude":0.37108314},{"time":0.130986787584328,"amplitude":0.5521199368421046,"emphasis":{"amplitude":0.9901499210526316,"frequency":0.97233766}},{"time":0.13400845280502313,"amplitude":0.8236964725355888},{"time":0.14195012,"amplitude":0.6177611},{"time":0.1904762,"amplitude":0.25037137},{"time":0.21632653,"amplitude":0.25075704},{"time":0.21682653,"amplitude":0.4354133368421051,"emphasis":{"amplitude":0.6593982,"frequency":0.7897841}},{"time":0.22086090373821526,"amplitude":0.5869154165487909},{"time":0.245805,"amplitude":0.33289292},{"time":0.24935412758432798,"amplitude":0.5448469105263156,"emphasis":{"amplitude":0.9389534400000004,"frequency":0.93203926}},{"time":0.25133299017193983,"amplitude":0.7158368820787059},{"time":0.26575965,"amplitude":0.4315809},{"time":0.29750568,"amplitude":0.20927696},{"time":0.3030250870268652,"amplitude":0.4596731278947368},{"time":0.36074572442537234,"amplitude":0.044897207368421135},{"time":0.3993281418582092,"amplitude":0.08352751078947371},{"time":0.4030805392567163,"amplitude":0.5389513671578948,"emphasis":{"amplitude":0.8078947368421047,"frequency":0.1}},{"time":0.43809524,"amplitude":0.12566948},{"time":0.43836734,"amplitude":0.12566948}],"frequency":[{"time":0,"frequency":0.61249894},{"time":0.030850407513432578,"frequency":0.2510262042105262},{"time":0.052604083,"frequency":0.5051047},{"time":0.11186602325671627,"frequency":0.18783392263157886},{"time":0.12915542620075085,"frequency":0.615374110526316},{"time":0.2037584707432838,"frequency":0.06933957894736839},{"time":0.2164439812905282,"frequency":0.6184218276707819},{"time":0.24548571,"frequency":0.41502878},{"time":0.26886532,"frequency":0.11490067},{"time":0.3039347,"frequency":0.30444944},{"time":0.33315918,"frequency":0.04847084},{"time":0.3965840347626838,"frequency":0.05044223684210527},{"time":0.40375350423955153,"frequency":0.4816715873684211},{"time":0.4166642744830417,"frequency":0.247401476613406},{"time":0.42667755,"frequency":0.26450768},{"time":0.43836734,"frequency":0.4342931}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.haptic.meta new file mode 100644 index 0000000..60680fe --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d8be2a80c3db142d29343ab0ac2b6dff +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.wav new file mode 100644 index 0000000..c60ce77 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.wav.meta new file mode 100644 index 0000000..fc7b746 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Footsteps/FootstepSnow1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 08ad2b50bcdd548da9fdd9ef4a1e9d43 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/HapticPackCClicense.txt b/Assets/Feel/NiceVibrations/HapticSamples/HapticPackCClicense.txt new file mode 100644 index 0000000..9fd42a9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/HapticPackCClicense.txt @@ -0,0 +1,115 @@ + +The haptic library packs use many sounds from freesound.org +The audio files used in these packs have been modified from the original form. + +licensed under CCBYNC 3.0 +http://freesound.org licensed under CCBY 3.0 + +For the full list see below: + + +S: Door Knob.wav by SoundDragon18 | License: Creative Commons 0 +S: Ripping Clothes by altfuture | License: Creative Commons 0 +S: Velcro Pull 02 by Rudmer_Rotteveel | License: Creative Commons 0 +S: keys jingling.wav by Fenodyrie | License: Creative Commons 0 +S: spacebarKey.wav by UberBosser | License: Creative Commons 0 +S: money4.wav by florian_reinke | License: Creative Commons 0 +S: Till Open and Close by muse384 | License: Creative Commons 0 +S: Coins Being Dropped-Assorted by FractalStudios | License: Creative Commons 0 +S: Writing On Paper.wav by rivernile7 | License: Creative Commons 0 +S: Flashlight clicking.wav by Marissrar | License: Creative Commons 0 +S: Turning Book Pages.wav by sophiehall3535 | License: Creative Commons 0 +S: Paging through a book.wav by Rainkiljoy | License: Creative Commons 0 +S: Single clicks Keyboard Sound by StrikeWhistler | License: Creative Commons 0 +S: Breaker-1.wav by Deathscyp | License: Creative Commons 0 +S: Switch Flip #1 by IanStarGem | License: Creative Commons 0 + +S: door knock by SubwaySandwitch420 | License: Creative Commons 0 +S: Knocking on the door by oldhiccup | License: Creative Commons 0 +S: Knock_the_door.wav by anagar | License: Creative Commons 0 +S: Fan (heating) by giddster | License: Creative Commons 0 +S: Fan 1.mp3 by denstoltejyde | License: Creative Commons 0 +S: Lit Fireplace by lurpsis | License: Creative Commons 0 +S: fireplace by martats | License: Creative Commons 0 +S: Stove by LinaManjarrez | License: Creative Commons 0 +S: Natalie Godinez - stove tick by nataliedg | License: Creative Commons 0 +S: Old Electric Stove, Stove Dials.wav by AslakHostaker | License: Creative Commons 0 +S: rocker_switch.wav by joedeshon | License: Attribution +S: Light Switch ON / OFF by FillSoko | License: Creative Commons 0 +S: Breaker-1.wav by Deathscyp | License: Creative Commons 0 +S: WoodSaw1.wav by Pingel | License: Creative Commons 0 +S: Hammering.wav by Dvideoguy | License: Creative Commons 0 +S: loud_cat_purring.wav by the_semen_incident | License: Creative Commons 0 +S: Clank Car Crash Collision by qubodup | License: Creative Commons 0 +S: Boost.wav by Eponn | License: Creative Commons 0 +S: Car peels off by therisingorder | License: Creative Commons 0 +S: Rain on car roof.wav by jakobhandersen | License: Creative Commons 0 +S: Big Splash.wav by Bird_man | License: Creative Commons 0 +S: Lluvia.wav by josecruz98 | License: Creative Commons 0 +S: Rain_Falling_On_Umbrella.wav by ivolipa | License: Creative Commons 0 + +S: electrocymbal-choke by Sassaby | License: Creative Commons 0 +S: Long Ride Cymbal 2 by Cringegaming64yt | License: Creative Commons 0 +S: Cymbal by deLargeBC | License: Creative Commons 0 +S: dw tom 1.wav by Veiler | License: Creative Commons 0 +S: Floortom.wav by mixmasterdylan | License: Creative Commons 0 +S: Snare Drum.wav by KEVOY | License: Creative Commons 0 +S: Vegas kick 01.wav by DreStortion | License: Creative Commons 0 +S: kick swedish.wav by Veiler | License: Creative Commons 0 +S: Type UI by Kernafval | License: Creative Commons 0 +S: beep_down.wav by paep3nguin | License: Creative Commons 0 +S: beep_up.wav by paep3nguin | License: Creative Commons 0 +S: Yume Nikki Effect Equip by plasterbrain | License: Creative Commons 0 +S: button-pressed.wav by StavSounds | License: Creative Commons 0 +S: UserInterface by audioninja001 | License: Creative Commons 0 +S: SFX UI Button Click by suntemple | License: Creative Commons 0 +S: Bullet Hit - Glass - 5 by FilmmakersManual | License: Creative Commons 0 +S: Bullet Hit - Glass (4) by FilmmakersManual | License: Creative Commons 0 +S: Bullet Hit - Glass (7) by FilmmakersManual | License: Creative Commons 0 +S: Light Machine Gun (M249) - Loading Ammo Belt (1) by FilmmakersManual | License: Creative Commons 0 +S: Light Machine Gun (M249) - Full Auto (1) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Concrete Hit (1) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Concrete Hit (4) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Concrete Hit (3) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Crack (2) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Crack (11) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Crack (10) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Crack (5) by FilmmakersManual | License: Creative Commons 0 +S: Sniper Rifle Firing Shot (1) by FilmmakersManual | License: Creative Commons 0 + +S: Heavy Machine Gun (.50 Caliber) - Single Shot (2) by FilmmakersManual | License: Creative Commons 0 +S: Heavy Machine Gun (.50 Caliber) - Cocking Gun (3) by FilmmakersManual | License: Creative Commons 0 +S: Heavy Machine Gun (.50 Caliber) - Full Auto (2) by FilmmakersManual | License: Creative Commons 0 +S: Shells Hitting Ground (26) by FilmmakersManual | License: Creative Commons 0 +S: Shotgun - Firing (2) by FilmmakersManual | License: Creative Commons 0 +S: Shotgun - Cocking (4) by FilmmakersManual | License: Creative Commons 0 +S: Shotgun - Cocking (3) by FilmmakersManual | License: Creative Commons 0 +S: Shotgun - Cocking (2) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Hit Body (7) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Hit Body (8) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Hit Body (9) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Hit Body (1) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Metal Hit (1) by FilmmakersManual | License: Creative Commons 0 +S: Semi Auto Pistol - Pistol Slide Cocking (4) by FilmmakersManual | License: Creative Commons 0 +S: Semi Auto Pistol - Pistol Firing Single Shot (2) by FilmmakersManual | License: Creative Commons 0 +S: Semi Auto Pistol - Pistol Firing Single Shot (3) by FilmmakersManual | License: Creative Commons 0 +S: Semi Auto Pistol - Pistol Firing Single Shot (5) by FilmmakersManual | License: Creative Commons 0 +S: Semi Auto Pistol - Pistol Firing Single Shot (6) by FilmmakersManual | License: Creative Commons 0 +S: Semi Auto Pistol - Pistol Firing Single Shot (1) by FilmmakersManual | License: Creative Commons 0 +S: Semi Auto Pistol - Pistol Slide Cocking (2) by FilmmakersManual | License: Creative Commons 0 +S: Gun Shots From a Distance (21) by FilmmakersManual | License: Creative Commons 0 +S: Gun Shots From a Distance (20) by FilmmakersManual | License: Creative Commons 0 +S: Gun Shots From a Distance (6) by FilmmakersManual | License: Creative Commons 0 +S: Gun Shots From a Distance (5) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Wood Hit (4) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Wood Hit (3) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Wood Hit (2) by FilmmakersManual | License: Creative Commons 0 +S: Bullet - Wood Hit (1) by FilmmakersManual | License: Creative Commons 0 +S: 9mm pistol load and chamber by michorvath | License: Creative Commons 0 +S: gun_cocking.wav by Department64 | License: Creative Commons 0 +P: Grassy Footsteps by Ali_6868 +P: Gravel Footsteps by Ali_6868 + + + + diff --git a/Assets/Feel/NiceVibrations/HapticSamples/HapticPackCClicense.txt.meta b/Assets/Feel/NiceVibrations/HapticSamples/HapticPackCClicense.txt.meta new file mode 100644 index 0000000..9e55c11 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/HapticPackCClicense.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8cedaa38d19e449c485ce3119ebb423d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts.meta new file mode 100644 index 0000000..b2d421c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11977e138c16c4099a0f16db2fa5752d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.haptic new file mode 100644 index 0000000..4873a9c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Body 1.wav","project":"Body 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00012595262},{"time":0.0010204081,"amplitude":0.00012595262},{"time":0.044013605,"amplitude":0.00017286168},{"time":0.087274641954023,"amplitude":0},{"time":0.098004535,"amplitude":0.07426157},{"time":0.099002264,"amplitude":0.6118013,"emphasis":{"amplitude":0.7647517,"frequency":0.588895}},{"time":0.1010204,"amplitude":0.7551082},{"time":0.11201814,"amplitude":0.5164317},{"time":0.1170068,"amplitude":0.42761567},{"time":0.1240136,"amplitude":0.33413297},{"time":0.13102041,"amplitude":0.26800013},{"time":0.14501134,"amplitude":0.20383668},{"time":0.1540136,"amplitude":0.14539811},{"time":0.16501133,"amplitude":0.100369744},{"time":0.18102041,"amplitude":0.065722704},{"time":0.22902718080459772,"amplitude":0},{"time":0.62396824,"amplitude":0.009607056}],"frequency":[{"time":0,"frequency":0},{"time":0.07125644356321839,"frequency":0},{"time":0.08707482,"frequency":0.28897032},{"time":0.09287982,"frequency":0.5304689},{"time":0.10739229,"frequency":0.48759618},{"time":0.11609977,"frequency":0.1837507},{"time":0.13351475,"frequency":0.056526423},{"time":0.2031746,"frequency":0.08717549},{"time":0.2540110104597701,"frequency":0},{"time":0.6350113000000001,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.haptic.meta new file mode 100644 index 0000000..8957775 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ce8bd75dffeee4051b8952ee4b2ca7e1 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.wav new file mode 100644 index 0000000..ecf618a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.wav.meta new file mode 100644 index 0000000..5b951d7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: cfb3f31a3e4974faab3ecce1e8eb035f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.haptic new file mode 100644 index 0000000..49fe0eb --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Body 2.wav","project":"Body 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00057161297},{"time":0.0010204081,"amplitude":0.00057161297},{"time":0.04,"amplitude":0.0012250319},{"time":0.04301587,"amplitude":0.005214234},{"time":0.0470068,"amplitude":0.08915177},{"time":0.048004534,"amplitude":0.2634163},{"time":0.049002267,"amplitude":0.2634163},{"time":0.05,"amplitude":0.58108014,"emphasis":{"amplitude":0.7263501,"frequency":0.39187163}},{"time":0.059002265,"amplitude":0.5950624},{"time":0.061020408,"amplitude":0.612079},{"time":0.06501134,"amplitude":0.5465807},{"time":0.06600907,"amplitude":0.6787137},{"time":0.07201814,"amplitude":0.60513115},{"time":0.07600907,"amplitude":0.5945463},{"time":0.08,"amplitude":0.5325345},{"time":0.08201814,"amplitude":0.5675314},{"time":0.08600907,"amplitude":0.52474093},{"time":0.09201814,"amplitude":0.4153061},{"time":0.10900226,"amplitude":0.24701609},{"time":0.114013605,"amplitude":0.20608477},{"time":0.11900227,"amplitude":0.20544937},{"time":0.12600906,"amplitude":0.1590671},{"time":0.14201313999999998,"amplitude":0},{"time":0.37584535,"amplitude":0},{"time":0.37584535,"amplitude":0},{"time":0.37585035,"amplitude":0.0065368335}],"frequency":[{"time":0,"frequency":0},{"time":0.03440425234482758,"frequency":0},{"time":0.03482993,"frequency":0.11298979},{"time":0.040634923,"frequency":0.509941},{"time":0.04643991,"frequency":0.49798617},{"time":0.05804988,"frequency":0.16987339},{"time":0.08417233,"frequency":0.094719775},{"time":0.104489796,"frequency":0.14515974},{"time":0.11029478,"frequency":0.23277943},{"time":0.11609977,"frequency":0.11729999},{"time":0.13061225,"frequency":0.15878384},{"time":0.13931973,"frequency":0.04996489},{"time":0.1596322,"frequency":0},{"time":0.39,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.haptic.meta new file mode 100644 index 0000000..17d888d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e0d9d544789ef40469cd266d3ba5a814 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.wav new file mode 100644 index 0000000..9643eb9 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.wav.meta new file mode 100644 index 0000000..391f280 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f35c236fc97db4309b80d8b34da60785 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.haptic new file mode 100644 index 0000000..4d40f5b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Body 3.wav","project":"Body 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00017689924},{"time":0.0010204081,"amplitude":0.00017689924},{"time":0.02600907,"amplitude":0.00015631295},{"time":0.04301587,"amplitude":0.0049958425},{"time":0.0470068,"amplitude":0.095145665},{"time":0.048004534,"amplitude":0.095145665},{"time":0.049002267,"amplitude":0.36666402,"emphasis":{"amplitude":0.45833,"frequency":0.23193817}},{"time":0.05,"amplitude":0.6432355},{"time":0.051020406,"amplitude":0.6432355},{"time":0.058004536,"amplitude":0.52546185},{"time":0.059002265,"amplitude":0.57533133},{"time":0.06,"amplitude":0.5726534},{"time":0.06501134,"amplitude":0.49197564},{"time":0.06600907,"amplitude":0.52846473},{"time":0.07102041,"amplitude":0.5050428},{"time":0.07600907,"amplitude":0.4485948},{"time":0.07800453,"amplitude":0.6855945},{"time":0.08,"amplitude":0.6864481},{"time":0.083015874,"amplitude":0.63811445},{"time":0.0870068,"amplitude":0.53857875},{"time":0.090022676,"amplitude":0.47724348},{"time":0.0970068,"amplitude":0.3595388},{"time":0.10301587,"amplitude":0.30194324},{"time":0.10900226,"amplitude":0.26329845},{"time":0.12002268,"amplitude":0.16823678},{"time":0.13899725999999998,"amplitude":0},{"time":0.29000000000000004,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.038399088666666664,"frequency":0},{"time":0.043537416,"frequency":0.46556342},{"time":0.0493424,"frequency":0.39779332},{"time":0.052244894,"frequency":0.25359958},{"time":0.066757366,"frequency":0.062970586},{"time":0.07256235,"frequency":0.09861742},{"time":0.08417233,"frequency":0.044292256},{"time":0.089977324,"frequency":0.122998655},{"time":0.104489796,"frequency":0.022887195},{"time":0.11609977,"frequency":0.08999354},{"time":0.124807246,"frequency":0.0911732},{"time":0.13351475,"frequency":0.019548709},{"time":0.14992970000000003,"frequency":0},{"time":0.29000000000000004,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.haptic.meta new file mode 100644 index 0000000..9129adc --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3d30a37fa8b8b4239a9e5a8ecf2bcca0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.wav new file mode 100644 index 0000000..dbbe08e Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.wav.meta new file mode 100644 index 0000000..321a124 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Body3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: e6a455d6479c94839a0ef45a30089b17 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.haptic new file mode 100644 index 0000000..ccc1145 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Bullet Crack 1.wav","project":"Bullet Crack 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0005049689},{"time":0.0010204081,"amplitude":0.0005049689},{"time":0.0840136,"amplitude":0.0019300915},{"time":0.08900227,"amplitude":0.56479067},{"time":0.10002267,"amplitude":0.5958075},{"time":0.11900227,"amplitude":0.336443},{"time":0.12002268,"amplitude":0.5127282},{"time":0.13900226,"amplitude":0.32517883},{"time":0.14002268,"amplitude":0.56265366},{"time":0.15600906,"amplitude":0.36607212},{"time":0.1610204,"amplitude":0.6193031},{"time":0.18002267,"amplitude":0.63213646},{"time":0.1940136,"amplitude":0.41436931},{"time":0.19501133,"amplitude":0.6500577},{"time":0.22301587,"amplitude":0.2979881},{"time":0.2940086,"amplitude":0},{"time":2.9800226999999997,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.07255734999999999,"frequency":0},{"time":0.07256235,"frequency":0.2395893},{"time":0.11029478,"frequency":0.57207483},{"time":0.12770975,"frequency":0.40317258},{"time":0.13931973,"frequency":0.5920605},{"time":0.17414966,"frequency":0.49398512},{"time":0.22058958,"frequency":0.65385985},{"time":0.252517,"frequency":0.48348603},{"time":0.28154194,"frequency":0.65432405},{"time":0.3512018,"frequency":0.53442514},{"time":0.36571428,"frequency":0.38197318},{"time":0.39630769034482766,"frequency":0},{"time":2.9800226999999997,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.haptic.meta new file mode 100644 index 0000000..4a3971d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 473149a0cff2b4a01901360eef1fcef9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.wav new file mode 100644 index 0000000..e683d6a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.wav.meta new file mode 100644 index 0000000..d463316 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 22b991c903495424a81ff53c87ad78a0 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.haptic new file mode 100644 index 0000000..5ebfc2b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Bullet Crack 2.wav","project":"Bullet Crack 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00037254303},{"time":0.0010204081,"amplitude":0.00037254303},{"time":0.06,"amplitude":0.0005256962},{"time":0.06501134,"amplitude":0.021706393},{"time":0.06900226,"amplitude":0.24508512},{"time":0.075011335,"amplitude":0.2635634},{"time":0.0770068,"amplitude":0.48524266},{"time":0.0840136,"amplitude":0.5127895},{"time":0.08501133,"amplitude":0.70309037},{"time":0.11002267,"amplitude":0.32061273},{"time":0.12102041,"amplitude":0.28372067},{"time":0.12301587,"amplitude":0.34923685},{"time":0.14501134,"amplitude":0.17689224},{"time":0.17900227,"amplitude":0.19836305},{"time":0.1910204,"amplitude":0.13700227},{"time":0.2140136,"amplitude":0.11678895},{"time":0.24900226,"amplitude":0.05027674},{"time":0.25600907,"amplitude":0.07223957},{"time":0.3410204,"amplitude":0.03981936},{"time":0.4002757590804597,"amplitude":0},{"time":2.1450112,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.048187759540229885,"frequency":0},{"time":0.07546485,"frequency":0.3293018},{"time":0.09578231,"frequency":0.2903994},{"time":0.11609977,"frequency":0.41640013},{"time":0.14512472,"frequency":0.6574622},{"time":0.17124717,"frequency":0.536995},{"time":0.24380451999999997,"frequency":0.4566539547368421},{"time":0.47835013862068954,"frequency":0},{"time":2.1450112,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.haptic.meta new file mode 100644 index 0000000..df08076 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2760372a5930146c880106e10f9a3c06 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.wav new file mode 100644 index 0000000..66502ec Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.wav.meta new file mode 100644 index 0000000..2c94fe4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 3d8f66cd6be4846f78ffc04232f67022 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.haptic new file mode 100644 index 0000000..9702922 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Bullet Crack 3.wav","project":"Bullet Crack 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00014934698},{"time":0.0010204081,"amplitude":0.00014934698},{"time":0.038004536,"amplitude":0.003497217},{"time":0.049002267,"amplitude":0.24147339200000004,"emphasis":{"amplitude":0.30184174,"frequency":0.5}},{"time":0.074013606,"amplitude":0.13307308},{"time":0.09201814,"amplitude":0.107121944},{"time":0.1240136,"amplitude":0.11327806},{"time":0.13501133,"amplitude":0.16725622},{"time":0.14900227,"amplitude":0.11118491},{"time":0.16401361,"amplitude":0.11620392},{"time":0.21900226,"amplitude":0.072894245},{"time":0.22201814,"amplitude":0.11063471},{"time":0.2570068,"amplitude":0.0651127},{"time":0.25900227,"amplitude":0.09984564},{"time":0.28301588,"amplitude":0.04877068},{"time":0.2840136,"amplitude":0.12217845},{"time":0.32501134,"amplitude":0.047305353},{"time":0.32900226,"amplitude":0.082161315},{"time":0.37301588,"amplitude":0.11720776},{"time":0.40201813,"amplitude":0.065879725},{"time":0.40301585,"amplitude":0.099473864},{"time":0.43201813,"amplitude":0.10882302},{"time":0.4640136,"amplitude":0.053618208},{"time":0.4740136,"amplitude":0.12533382},{"time":0.5050113,"amplitude":0.04688047},{"time":0.54600906,"amplitude":0.049702745},{"time":0.5630159,"amplitude":0.07986942},{"time":0.5809977,"amplitude":0.045639534},{"time":0.58201814,"amplitude":0.094978526},{"time":0.5980045,"amplitude":0.05607738},{"time":0.6290023,"amplitude":0.039382044},{"time":0.6330159,"amplitude":0.06989041},{"time":0.6943401333333332,"amplitude":0},{"time":2.03,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.019122449,"frequency":0},{"time":0.031927437,"frequency":0.4116678},{"time":0.05804988,"frequency":0.5050603},{"time":0.08417233,"frequency":0.3495426},{"time":0.10739229,"frequency":0.5485699},{"time":0.14802721,"frequency":0.45158476},{"time":0.23510204,"frequency":0.5825884},{"time":0.27573696,"frequency":0.566058},{"time":0.29024944,"frequency":0.37706268},{"time":0.33959183,"frequency":0.41173324},{"time":0.3628118,"frequency":0.6131461},{"time":0.37151927,"frequency":0.4680078},{"time":0.41505668,"frequency":0.53437084},{"time":0.5021315,"frequency":0.36451027},{"time":0.53696144,"frequency":0.56440634},{"time":0.57179135,"frequency":0.3273725},{"time":0.59210885,"frequency":0.5246474},{"time":0.6530612,"frequency":0.38770437},{"time":0.7487868333333336,"frequency":0},{"time":2.03,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.haptic.meta new file mode 100644 index 0000000..97a51ce --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c7833764644ba41a29b1d11de2f3a62f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.wav new file mode 100644 index 0000000..800ac48 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.wav.meta new file mode 100644 index 0000000..efb7323 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletCrack3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 5a869e67b96944f83be76a0f7896ad47 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.haptic new file mode 100644 index 0000000..5fed4ed --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Bullet Metal 1.wav","project":"Bullet Metal 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00011349983},{"time":0.0010204081,"amplitude":0.00011349983},{"time":0.034013607,"amplitude":0.00021466184},{"time":0.04102041,"amplitude":0.021309111},{"time":0.04301587,"amplitude":0.139174984,"emphasis":{"amplitude":0.6002845194736842,"frequency":0.9}},{"time":0.055011336,"amplitude":0.17020157},{"time":0.05600907,"amplitude":0.20842262},{"time":0.06301587,"amplitude":0.18676656},{"time":0.06900226,"amplitude":0.21081558},{"time":0.07600907,"amplitude":0.18701136},{"time":0.0770068,"amplitude":0.22107865},{"time":0.08102041,"amplitude":0.20310253},{"time":0.090022676,"amplitude":0.21572563},{"time":0.09501134,"amplitude":0.1856941},{"time":0.09600907,"amplitude":0.21110007},{"time":0.10201814,"amplitude":0.21041231},{"time":0.11102041,"amplitude":0.17533311},{"time":0.12102041,"amplitude":0.15346546},{"time":0.122018136,"amplitude":0.17708363},{"time":0.14899727,"amplitude":0},{"time":0.5116277,"amplitude":0},{"time":0.5116277,"amplitude":0},{"time":0.5116327,"amplitude":0.0050217975}],"frequency":[{"time":0,"frequency":0},{"time":0.014517472,"frequency":0},{"time":0.029024942,"frequency":0.65305847},{"time":0.0493424,"frequency":0.4998254},{"time":0.05804988,"frequency":0.65193063},{"time":0.06965986,"frequency":0.49720553},{"time":0.113197275,"frequency":0.59629136},{"time":0.17414466,"frequency":0},{"time":0.5250113,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.haptic.meta new file mode 100644 index 0000000..ceccbf5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7d9f91002f7704512888884c6e6c0cc0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.wav new file mode 100644 index 0000000..c4ae917 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.wav.meta new file mode 100644 index 0000000..fc04043 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/BulletMetal1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 08b15283493d14e6ebacebed36250d4e +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.haptic new file mode 100644 index 0000000..b27f277 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Car Crash 1.wav","project":"Car Crash 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.19079636,"emphasis":{"amplitude":0.23849544,"frequency":0.23849544}},{"time":0.0010204081,"amplitude":0.23849544},{"time":0.0020181406,"amplitude":0.38867703},{"time":0.008004535,"amplitude":0.45777184},{"time":0.009002267,"amplitude":0.6591683},{"time":0.025011338,"amplitude":0.66306716},{"time":0.04,"amplitude":0.58445096},{"time":0.04600907,"amplitude":0.47908837},{"time":0.049002267,"amplitude":0.56943667},{"time":0.061020408,"amplitude":0.427151},{"time":0.06201814,"amplitude":0.62231916},{"time":0.07800453,"amplitude":0.512539},{"time":0.08102041,"amplitude":0.6392869},{"time":0.08800454,"amplitude":0.52579695},{"time":0.091020405,"amplitude":0.6305946},{"time":0.10002267,"amplitude":0.54106426},{"time":0.1070068,"amplitude":0.59185994},{"time":0.11800453,"amplitude":0.41156864},{"time":0.122018136,"amplitude":0.63919795},{"time":0.13002267,"amplitude":0.49890244},{"time":0.13102041,"amplitude":0.64469177},{"time":0.15102041,"amplitude":0.35822123},{"time":0.16501133,"amplitude":0.27711055},{"time":0.1770068,"amplitude":0.32651198},{"time":0.1840136,"amplitude":0.26607078},{"time":0.18600906,"amplitude":0.47865576},{"time":0.20900226,"amplitude":0.25896972},{"time":0.2140136,"amplitude":0.30294728},{"time":0.22800453,"amplitude":0.1866174},{"time":0.2310204,"amplitude":0.26304892},{"time":0.2667722290344829,"amplitude":0},{"time":0.54999996,"amplitude":0}],"frequency":[{"time":0,"frequency":0.31694195},{"time":0.014512472,"frequency":0.21195269},{"time":0.023219952,"frequency":0.44631726},{"time":0.052244894,"frequency":0.27956983},{"time":0.05804988,"frequency":0.71047735},{"time":0.07256235,"frequency":0.25814605},{"time":0.0986848,"frequency":0.39870882},{"time":0.11609977,"frequency":0.25406435},{"time":0.13931973,"frequency":0.40399495},{"time":0.14802721,"frequency":0.22879364},{"time":0.16834468,"frequency":0.23418702},{"time":0.17705216,"frequency":0.7527849},{"time":0.19156463,"frequency":0.24802582},{"time":0.21768707,"frequency":0.23822494},{"time":0.23800454,"frequency":0.5319289},{"time":0.24671203,"frequency":0.17445002},{"time":0.258322,"frequency":0.41627142},{"time":0.27524785020689635,"frequency":0},{"time":0.54999996,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.haptic.meta new file mode 100644 index 0000000..1fea8b0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 59d416c84824f4c428a7087364aa244b +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.wav new file mode 100644 index 0000000..b9086d9 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.wav.meta new file mode 100644 index 0000000..a7bba80 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CarCrash1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ea8a04d36984947ddaf296db5484d176 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.haptic new file mode 100644 index 0000000..5c52d9e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Combat Punch 1.wav","project":"Combat Punch 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.001981345},{"time":0.011548477732358375,"amplitude":0.17368421052631594},{"time":0.04834867795206454,"amplitude":0},{"time":0.05426697255719032,"amplitude":0.9737475789473684},{"time":0.1351474,"amplitude":0.15775205},{"time":0.1632653,"amplitude":0.049957886},{"time":0.20816326,"amplitude":0.008990965},{"time":0.20825396,"amplitude":0.008990965}],"frequency":[{"time":0,"frequency":0},{"time":0.009039413701471278,"frequency":1},{"time":0.022257233528045605,"frequency":0.28156598598048677},{"time":0.0381414850223066,"frequency":0},{"time":0.04770555940673944,"frequency":0.005263157894736842},{"time":0.051359359899523824,"frequency":0.5447368421052624},{"time":0.17210138974845762,"frequency":0},{"time":0.20825396,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.haptic.meta new file mode 100644 index 0000000..03d804c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d2b7fe7395e1243c08b607ed95765840 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.wav new file mode 100644 index 0000000..07ec784 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.wav.meta new file mode 100644 index 0000000..4d1e700 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 3bc013dad63a144f180df160104b4242 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.haptic new file mode 100644 index 0000000..3925bcc --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Combat Punch 2.wav","project":"Combat Punch 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0004254753},{"time":0.0005,"amplitude":0},{"time":0.009989860151874712,"amplitude":0.05263157894736843},{"time":0.018097736761311236,"amplitude":0.24210170333800593},{"time":0.02293751084005696,"amplitude":0.5867287526315789},{"time":0.04877089174713536,"amplitude":0},{"time":0.06660398267204558,"amplitude":0},{"time":0.07767915003796866,"amplitude":0.4141068157894737},{"time":0.08208617,"amplitude":0.98164916},{"time":0.123809524,"amplitude":0.5832451},{"time":0.14240363,"amplitude":0.42498246},{"time":0.1664399,"amplitude":0.18178385},{"time":0.25986394,"amplitude":0.029976426},{"time":0.40907028,"amplitude":0.00013938695},{"time":0.40920636,"amplitude":0.00013938695}],"frequency":[{"time":0,"frequency":0},{"time":0.02245462224964404,"frequency":0.907894736842105},{"time":0.05333831224489789,"frequency":0},{"time":0.06799555009583125,"frequency":0},{"time":0.07831148727831967,"frequency":0.41842105263157947},{"time":0.1658877924015188,"frequency":0.18684210526315775},{"time":0.27475283,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.haptic.meta new file mode 100644 index 0000000..6663dca --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d6f022528b4a64551bd772c576be2eed +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.wav new file mode 100644 index 0000000..ce94203 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.wav.meta new file mode 100644 index 0000000..19627f0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/CombatPunch2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: e680bdab2c6324e47aace87b5b4bcf7f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.haptic new file mode 100644 index 0000000..4c62697 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Concrete 1.wav","project":"Concrete 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0003783624},{"time":0.0010204081,"amplitude":0.0003783624},{"time":0.013015873,"amplitude":0.0033780416},{"time":0.014013605,"amplitude":0.022209913},{"time":0.015011338,"amplitude":0.13999574},{"time":0.017006803,"amplitude":0.1375664},{"time":0.018004535,"amplitude":0.1675426},{"time":0.021020407,"amplitude":0.16573265},{"time":0.023015874,"amplitude":0.21815968},{"time":0.024013605,"amplitude":0.21603689},{"time":0.025011338,"amplitude":0.37884718},{"time":0.02600907,"amplitude":0.37884718},{"time":0.027006803,"amplitude":0.46207288},{"time":0.029002268,"amplitude":0.45200348},{"time":0.030022675,"amplitude":0.47216675},{"time":0.031020408,"amplitude":0.73319817},{"time":0.03201814,"amplitude":0.72987944},{"time":0.04,"amplitude":0.56875795},{"time":0.0470068,"amplitude":0.44127706},{"time":0.05,"amplitude":0.39427555},{"time":0.058004536,"amplitude":0.28885746},{"time":0.06201814,"amplitude":0.24647065},{"time":0.067006804,"amplitude":0.20421484},{"time":0.07301587,"amplitude":0.16301739},{"time":0.08,"amplitude":0.12491068},{"time":0.08800454,"amplitude":0.094340324},{"time":0.10317720925287356,"amplitude":0},{"time":0.22501133,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.009167225864367815,"frequency":0},{"time":0.014512472,"frequency":0.39514586},{"time":0.023219952,"frequency":0.756451757894737},{"time":0.029024942,"frequency":0.42654255789473694},{"time":0.03399650670114944,"frequency":0.4652628105263159},{"time":0.0493424,"frequency":0.25428036},{"time":0.052244894,"frequency":0.23334809},{"time":0.10512210574712641,"frequency":0},{"time":0.22501133,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.haptic.meta new file mode 100644 index 0000000..5974f1d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b842d36097a784c6e9639ff0d7a42557 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.wav new file mode 100644 index 0000000..3767191 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.wav.meta new file mode 100644 index 0000000..9f851c8 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: cafd91303a9ae4c378d26b3c26979091 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.haptic new file mode 100644 index 0000000..d7d4e62 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Concrete 2.wav","project":"Concrete 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00087428367},{"time":0.0010204081,"amplitude":0.00087428367},{"time":0.04301087,"amplitude":0},{"time":0.04301587,"amplitude":0.4715045,"emphasis":{"amplitude":0.5893806,"frequency":0.058425903}},{"time":0.04600907,"amplitude":0.55539566},{"time":0.0470068,"amplitude":0.61411834},{"time":0.051020406,"amplitude":0.60912323},{"time":0.06,"amplitude":0.45644498},{"time":0.07201814,"amplitude":0.30808547},{"time":0.08201814,"amplitude":0.20724109},{"time":0.11001767599999993,"amplitude":0},{"time":0.43,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.031922437000000005,"frequency":0},{"time":0.031927437,"frequency":0.516378},{"time":0.040634923,"frequency":0.52596927},{"time":0.06385487,"frequency":0.321358},{"time":0.06965986,"frequency":0.36845404},{"time":0.08417233,"frequency":0.22383921},{"time":0.09287982,"frequency":0.36931494},{"time":0.101587296,"frequency":0.18640798},{"time":0.12061106810344828,"frequency":0},{"time":0.43,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.haptic.meta new file mode 100644 index 0000000..b52e4a9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 403c90a1ed71b4c92970bae66c263683 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.wav new file mode 100644 index 0000000..283c091 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.wav.meta new file mode 100644 index 0000000..4e63758 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 0d21bb180934c4750a88d2b5148467e9 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.haptic new file mode 100644 index 0000000..2289f2e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Concrete 3.wav","project":"Concrete 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00013786381},{"time":0.0010204081,"amplitude":0.00013786381},{"time":0.049002267,"amplitude":0.00044100996},{"time":0.06338141185244586,"amplitude":0.08305764},{"time":0.06401361,"amplitude":0.53510755,"emphasis":{"amplitude":0.66888446,"frequency":0.059496306}},{"time":0.067006804,"amplitude":0.6338416},{"time":0.06800453,"amplitude":0.7299741},{"time":0.091020405,"amplitude":0.3673754},{"time":0.1010204,"amplitude":0.26142457},{"time":0.10401361,"amplitude":0.27944458},{"time":0.114013605,"amplitude":0.19690497},{"time":0.11600907,"amplitude":0.31050456},{"time":0.12301587,"amplitude":0.2934425},{"time":0.12501134,"amplitude":0.34329724},{"time":0.13201813,"amplitude":0.27422023},{"time":0.13501133,"amplitude":0.3229295},{"time":0.14900227,"amplitude":0.20574582},{"time":0.1540136,"amplitude":0.21361181},{"time":0.18002267,"amplitude":0.09608172},{"time":0.19600907000000004,"amplitude":0},{"time":0.6080323749832013,"amplitude":0},{"time":0.6770068,"amplitude":0.004798389},{"time":0.6930159,"amplitude":0.013074262},{"time":0.7160091,"amplitude":0.005822396},{"time":0.7970068,"amplitude":0.0032115057},{"time":0.7980045,"amplitude":0.011448812},{"time":0.83900225,"amplitude":0.002320829},{"time":0.8394558,"amplitude":0.002320829},{"time":0.8394558,"amplitude":0.002320829}],"frequency":[{"time":0,"frequency":0},{"time":0.040629923000000005,"frequency":0},{"time":0.06585545227024851,"frequency":0.4568685931578949},{"time":0.08126984,"frequency":0.28695035},{"time":0.104489796,"frequency":0.4570485},{"time":0.16253969,"frequency":0.18633485},{"time":0.18285714,"frequency":0.445557},{"time":0.2060771,"frequency":0.28568533},{"time":0.264127,"frequency":0.53308725},{"time":0.28734693,"frequency":0.24623068},{"time":0.3018594,"frequency":0.6021247},{"time":0.3163719,"frequency":0.41317457},{"time":0.33668935,"frequency":0.51707435},{"time":0.3628118,"frequency":0.31639707},{"time":0.38893422,"frequency":0.5446621},{"time":0.39473924,"frequency":0.3305983},{"time":0.4121542,"frequency":0.5551461},{"time":0.42666668,"frequency":0.3739916},{"time":0.516644,"frequency":0.3280179},{"time":0.5485714,"frequency":0.52489036},{"time":0.58630383,"frequency":0.2637836},{"time":0.59210885,"frequency":0.43828732},{"time":0.6182313,"frequency":0.22001219},{"time":0.64145124,"frequency":0.35335785},{"time":0.6704762,"frequency":0.23764454},{"time":0.69079363,"frequency":0.38693398},{"time":0.7372336,"frequency":0.20906888},{"time":0.7894784,"frequency":0.26074505},{"time":0.8156009,"frequency":0.31215656},{"time":0.8272109,"frequency":0.5459014}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.haptic.meta new file mode 100644 index 0000000..cbbdab7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3c2b770a337e648528945c0b97fa31f3 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.wav new file mode 100644 index 0000000..617de9a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.wav.meta new file mode 100644 index 0000000..94ac728 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Concrete3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: d761cbd3d012843919eaa563a15a4a91 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.haptic new file mode 100644 index 0000000..74c297c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Glass 1.wav","project":"Glass 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000097714015},{"time":0.0010204081,"amplitude":0.000097714015},{"time":0.06301587,"amplitude":0.019600552},{"time":0.06401361,"amplitude":0.47616887,"emphasis":{"amplitude":0.5952111,"frequency":0.50831604}},{"time":0.10301587,"amplitude":0.26839168,"emphasis":{"amplitude":0.3354896,"frequency":0.9}},{"time":0.11301587,"amplitude":0.32713270400000005,"emphasis":{"amplitude":0.40891588,"frequency":0.9}},{"time":0.1270068,"amplitude":0.26561965600000004,"emphasis":{"amplitude":0.33202457,"frequency":0.9}},{"time":0.14900227,"amplitude":0.33036475200000004,"emphasis":{"amplitude":0.41295594,"frequency":0.9}},{"time":0.16800453,"amplitude":0.2892572,"emphasis":{"amplitude":0.3615715,"frequency":0.9}},{"time":0.17600907,"amplitude":0.35562992000000004,"emphasis":{"amplitude":0.4445374,"frequency":0.9}},{"time":0.19800453,"amplitude":0.249636032,"emphasis":{"amplitude":0.31204504,"frequency":0.9}},{"time":0.19900227,"amplitude":0.32161638400000003,"emphasis":{"amplitude":0.40202048,"frequency":0.9}},{"time":0.23501134,"amplitude":0.26004996,"emphasis":{"amplitude":0.32506245,"frequency":0.9}},{"time":0.23600906,"amplitude":0.31060184,"emphasis":{"amplitude":0.3882523,"frequency":0.9}},{"time":0.26501134,"amplitude":0.19870896000000002,"emphasis":{"amplitude":0.2483862,"frequency":0.9}},{"time":0.2870068,"amplitude":0.201862504,"emphasis":{"amplitude":0.25232813,"frequency":0.9}},{"time":0.29999998,"amplitude":0.146301032,"emphasis":{"amplitude":0.18287629,"frequency":0.9}},{"time":0.30800453,"amplitude":0.2085396,"emphasis":{"amplitude":0.2606745,"frequency":0.9}},{"time":0.35999998,"amplitude":0.092224374},{"time":0.3770068,"amplitude":0.16245012000000003,"emphasis":{"amplitude":0.20306265,"frequency":0.9}},{"time":0.39600906,"amplitude":0.11239920000000002,"emphasis":{"amplitude":0.140499,"frequency":0.9}},{"time":0.43600905,"amplitude":0.128011176,"emphasis":{"amplitude":0.16001397,"frequency":0.9}},{"time":0.45301586,"amplitude":0.10931927},{"time":0.51899726,"amplitude":0},{"time":0.51900226,"amplitude":0.146953384,"emphasis":{"amplitude":0.18369173,"frequency":0.9}},{"time":0.5480045,"amplitude":0.0885371088,"emphasis":{"amplitude":0.110671386,"frequency":0.9}},{"time":0.5580045,"amplitude":0.116528832,"emphasis":{"amplitude":0.14566104,"frequency":0.9}},{"time":0.5809977,"amplitude":0.08933234},{"time":0.5960091,"amplitude":0.114931072,"emphasis":{"amplitude":0.14366384,"frequency":0.9}},{"time":0.6170068,"amplitude":0.09008866},{"time":0.6570068,"amplitude":0.098997444,"emphasis":{"amplitude":0.123746805,"frequency":0.9}},{"time":0.68600905,"amplitude":0.15572112800000001,"emphasis":{"amplitude":0.19465141,"frequency":0.9}},{"time":0.7109977,"amplitude":0.0912523152,"emphasis":{"amplitude":0.114065394,"frequency":0.9}},{"time":0.7340136,"amplitude":0.11585224000000001,"emphasis":{"amplitude":0.1448153,"frequency":0.9}},{"time":0.7717331770114942,"amplitude":0},{"time":1.7095690999999997,"amplitude":0},{"time":1.7099999,"amplitude":0},{"time":1.7099999,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.052239894,"frequency":0},{"time":0.052244894,"frequency":0.33620578},{"time":0.06095238,"frequency":0.5368832},{"time":0.089977324,"frequency":0.31423315},{"time":0.104489796,"frequency":0.4351447},{"time":0.11609977,"frequency":0.23582375},{"time":0.13351475,"frequency":0.48349696},{"time":0.17705216,"frequency":0.23023945},{"time":0.258322,"frequency":0.6820574357894736},{"time":0.28154194,"frequency":0.4725664557894736},{"time":0.3018594,"frequency":0.6767098857894737},{"time":0.34539682,"frequency":0.5135449757894736},{"time":0.37151927,"frequency":0.6861678957894736},{"time":0.4063492,"frequency":0.4425973257894736},{"time":0.43247166,"frequency":0.6404416557894735},{"time":0.4585941,"frequency":0.4512383057894736},{"time":0.4963265,"frequency":0.6825538557894736},{"time":0.5311565,"frequency":0.7114200157894736},{"time":0.57469386,"frequency":0.4521960557894736},{"time":0.5804989,"frequency":0.6166490157894736},{"time":0.6124263,"frequency":0.27952826},{"time":0.6617687,"frequency":0.424756},{"time":0.74594104,"frequency":0.45252335},{"time":0.76335603,"frequency":0.2131215},{"time":0.8140015883908046,"frequency":0},{"time":1.7099999,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.haptic.meta new file mode 100644 index 0000000..8b7444f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a87fdd11c2dfb48b58a2ba866de3e2f1 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.wav new file mode 100644 index 0000000..a2d2fa6 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.wav.meta new file mode 100644 index 0000000..c373816 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a582528a989a849d8b089b8bd4398298 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.haptic new file mode 100644 index 0000000..fcfc16a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Glass 2.wav","project":"Glass 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00011437871},{"time":0.0010204081,"amplitude":0.00011437871},{"time":0.015011338,"amplitude":0.020204276},{"time":0.01600907,"amplitude":0.476433,"emphasis":{"amplitude":0.59554124,"frequency":0.50808907}},{"time":0.031020408,"amplitude":0.40852073},{"time":0.055011336,"amplitude":0.18982528,"emphasis":{"amplitude":0.2372816,"frequency":0.9}},{"time":0.06501134,"amplitude":0.29016264,"emphasis":{"amplitude":0.3627033,"frequency":0.9}},{"time":0.08201814,"amplitude":0.27098795999999997,"emphasis":{"amplitude":0.33873495,"frequency":0.9}},{"time":0.0970068,"amplitude":0.19848592,"emphasis":{"amplitude":0.2481074,"frequency":0.9}},{"time":0.099002264,"amplitude":0.276167824,"emphasis":{"amplitude":0.34520978,"frequency":0.9}},{"time":0.11800453,"amplitude":0.20325453599999999,"emphasis":{"amplitude":0.25406817,"frequency":0.9}},{"time":0.13501133,"amplitude":0.26296784,"emphasis":{"amplitude":0.3287098,"frequency":0.9}},{"time":0.1610204,"amplitude":0.258510304,"emphasis":{"amplitude":0.32313788,"frequency":0.9}},{"time":0.17800453,"amplitude":0.32361691200000003,"emphasis":{"amplitude":0.40452114,"frequency":0.9}},{"time":0.19900227,"amplitude":0.23476324000000004,"emphasis":{"amplitude":0.29345405,"frequency":0.9}},{"time":0.20501134,"amplitude":0.28457296,"emphasis":{"amplitude":0.3557162,"frequency":0.9}},{"time":0.2270068,"amplitude":0.17696398400000002,"emphasis":{"amplitude":0.22120498,"frequency":0.9}},{"time":0.2470068,"amplitude":0.124141704,"emphasis":{"amplitude":0.15517713,"frequency":0.9}},{"time":0.27600905,"amplitude":0.21007424000000002,"emphasis":{"amplitude":0.2625928,"frequency":0.9}},{"time":0.31501132,"amplitude":0.07130326000000001,"emphasis":{"amplitude":0.089129075,"frequency":0.9}},{"time":0.32301587,"amplitude":0.17466293600000002,"emphasis":{"amplitude":0.21832867,"frequency":0.9}},{"time":0.34501132,"amplitude":0.09522952000000001,"emphasis":{"amplitude":0.1190369,"frequency":0.9}},{"time":0.40600905,"amplitude":0.04690262640000001,"emphasis":{"amplitude":0.058628283,"frequency":0.9}},{"time":0.41501132,"amplitude":0.08901796000000001,"emphasis":{"amplitude":0.11127245,"frequency":0.9}},{"time":0.44501132,"amplitude":0.044312706400000006,"emphasis":{"amplitude":0.055390883,"frequency":0.9}},{"time":0.45600906,"amplitude":0.15701992,"emphasis":{"amplitude":0.1962749,"frequency":0.9}},{"time":0.47201812,"amplitude":0.091584464,"emphasis":{"amplitude":0.11448058,"frequency":0.9}},{"time":0.5,"amplitude":0.0467345176,"emphasis":{"amplitude":0.058418147,"frequency":0.9}},{"time":0.54900223,"amplitude":0.057091659200000006,"emphasis":{"amplitude":0.071364574,"frequency":0.9}},{"time":0.55,"amplitude":0.18341975200000002,"emphasis":{"amplitude":0.22927469,"frequency":0.9}},{"time":0.5850113,"amplitude":0.061589448000000005,"emphasis":{"amplitude":0.07698681,"frequency":0.9}},{"time":0.5860091,"amplitude":0.090273216,"emphasis":{"amplitude":0.11284152,"frequency":0.9}},{"time":0.66600407,"amplitude":0},{"time":1.1650113,"amplitude":0}],"frequency":[{"time":0,"frequency":1},{"time":0.023219952,"frequency":0.47112212},{"time":0.08417233,"frequency":0.52735376},{"time":0.1538322,"frequency":0.2684216},{"time":0.20027211,"frequency":0.5735312},{"time":0.24671203,"frequency":0.5589585},{"time":0.32798186,"frequency":0.3004863},{"time":0.38022676,"frequency":0.6298246},{"time":0.38603175,"frequency":0.33255798},{"time":0.42956915,"frequency":0.7346013},{"time":0.43827665,"frequency":0.41707358},{"time":0.48181406,"frequency":0.79182816},{"time":0.52535146,"frequency":0.28670785},{"time":0.6066213,"frequency":0.6254344},{"time":0.6211338,"frequency":0.252447},{"time":0.64435375,"frequency":0.65437895},{"time":0.6849837,"frequency":0},{"time":1.1650113,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.haptic.meta new file mode 100644 index 0000000..41306b4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6f76a5d7ab3cd4390989fb08c34c39a3 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.wav new file mode 100644 index 0000000..515cc5e Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.wav.meta new file mode 100644 index 0000000..a650f55 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: b134d6c286ef04c36a28a929b9f614c5 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.haptic new file mode 100644 index 0000000..093de8a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Glass 3.wav","project":"Glass 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0001267343},{"time":0.0010204081,"amplitude":0.0001267343},{"time":0.08863067430127042,"amplitude":0},{"time":0.08900227,"amplitude":0.29881835,"emphasis":{"amplitude":0.37352294,"frequency":0.23998603}},{"time":0.10002267,"amplitude":0.473451088,"emphasis":{"amplitude":0.59181386,"frequency":0.9}},{"time":0.11102041,"amplitude":0.47587304,"emphasis":{"amplitude":0.5948413,"frequency":0.9}},{"time":0.13102041,"amplitude":0.30016811200000004,"emphasis":{"amplitude":0.37521014,"frequency":0.9}},{"time":0.14002268,"amplitude":0.35134780800000004,"emphasis":{"amplitude":0.43918476,"frequency":0.9}},{"time":0.1610204,"amplitude":0.312318256,"emphasis":{"amplitude":0.39039782,"frequency":0.9}},{"time":0.1770068,"amplitude":0.33550734400000004,"emphasis":{"amplitude":0.41938418,"frequency":0.9}},{"time":0.21501133,"amplitude":0.40260271999999997,"emphasis":{"amplitude":0.5032534,"frequency":0.9}},{"time":0.2270068,"amplitude":0.32056107200000006,"emphasis":{"amplitude":0.40070134,"frequency":0.9}},{"time":0.2370068,"amplitude":0.44658888,"emphasis":{"amplitude":0.5582361,"frequency":0.9}},{"time":0.2570068,"amplitude":0.35624716,"emphasis":{"amplitude":0.44530895,"frequency":0.9}},{"time":0.25800452,"amplitude":0.445729872,"emphasis":{"amplitude":0.55716234,"frequency":0.9}},{"time":0.2970068,"amplitude":0.26030004,"emphasis":{"amplitude":0.32537505,"frequency":0.9}},{"time":0.32501134,"amplitude":0.284537792,"emphasis":{"amplitude":0.35567224,"frequency":0.9}},{"time":0.3510204,"amplitude":0.21037224000000002,"emphasis":{"amplitude":0.2629653,"frequency":0.9}},{"time":0.3540136,"amplitude":0.26479408000000004,"emphasis":{"amplitude":0.3309926,"frequency":0.9}},{"time":0.37800452,"amplitude":0.23048734400000004,"emphasis":{"amplitude":0.28810918,"frequency":0.9}},{"time":0.39401358,"amplitude":0.14450796800000001,"emphasis":{"amplitude":0.18063496,"frequency":0.9}},{"time":0.42800453,"amplitude":0.29556328000000004,"emphasis":{"amplitude":0.3694541,"frequency":0.9}},{"time":0.43900225,"amplitude":0.22245602400000003,"emphasis":{"amplitude":0.27807003,"frequency":0.9}},{"time":0.45201814,"amplitude":0.26441368000000004,"emphasis":{"amplitude":0.3305171,"frequency":0.9}},{"time":0.48999998,"amplitude":0.13284447200000002,"emphasis":{"amplitude":0.16605559,"frequency":0.9}},{"time":0.5250113,"amplitude":0.091336548,"emphasis":{"amplitude":0.114170685,"frequency":0.9}},{"time":0.53301585,"amplitude":0.22721016000000002,"emphasis":{"amplitude":0.2840127,"frequency":0.9}},{"time":0.5609977,"amplitude":0.09874544,"emphasis":{"amplitude":0.1234318,"frequency":0.9}},{"time":0.5860091,"amplitude":0.070328496,"emphasis":{"amplitude":0.08791062,"frequency":0.9}},{"time":0.62800455,"amplitude":0.185959016,"emphasis":{"amplitude":0.23244877,"frequency":0.9}},{"time":0.6460091,"amplitude":0.10851086400000001,"emphasis":{"amplitude":0.13563858,"frequency":0.9}},{"time":0.74099773,"amplitude":0.0254483696,"emphasis":{"amplitude":0.031810462,"frequency":0.9}},{"time":0.7480045,"amplitude":0.054799288,"emphasis":{"amplitude":0.06849911,"frequency":0.9}},{"time":0.80199546,"amplitude":0.017588716},{"time":0.89199543,"amplitude":0.0235575824,"emphasis":{"amplitude":0.029446978,"frequency":0.9}},{"time":0.8940136,"amplitude":0.1388784,"emphasis":{"amplitude":0.173598,"frequency":0.9}},{"time":0.91600907,"amplitude":0.09729902400000001,"emphasis":{"amplitude":0.12162378,"frequency":0.9}},{"time":0.9180045,"amplitude":0.19635652,"emphasis":{"amplitude":0.24544565,"frequency":0.9}},{"time":0.96900225,"amplitude":0.12142002400000002,"emphasis":{"amplitude":0.15177503,"frequency":0.9}},{"time":0.97401357,"amplitude":0.162490392,"emphasis":{"amplitude":0.20311299,"frequency":0.9}},{"time":1.0009977,"amplitude":0.10557419200000001,"emphasis":{"amplitude":0.13196774,"frequency":0.9}},{"time":1.0019954,"amplitude":0.102666328,"emphasis":{"amplitude":0.12833291,"frequency":0.9}},{"time":1.0219954,"amplitude":0.11684636,"emphasis":{"amplitude":0.14605795,"frequency":0.9}},{"time":1.0580045,"amplitude":0.050046724,"emphasis":{"amplitude":0.062558405,"frequency":0.9}},{"time":1.0709977,"amplitude":0.066238904,"emphasis":{"amplitude":0.08279863,"frequency":0.9}},{"time":1.1050113,"amplitude":0.037359744,"emphasis":{"amplitude":0.04669968,"frequency":0.9}},{"time":1.1080046,"amplitude":0.097945104,"emphasis":{"amplitude":0.12243138,"frequency":0.9}},{"time":1.1250113,"amplitude":0.08279931200000001,"emphasis":{"amplitude":0.10349914,"frequency":0.9}},{"time":1.1270068,"amplitude":0.137260352,"emphasis":{"amplitude":0.17157544,"frequency":0.9}},{"time":1.1380045,"amplitude":0.13330614400000002,"emphasis":{"amplitude":0.16663268,"frequency":0.9}},{"time":1.1640136,"amplitude":0.061700976,"emphasis":{"amplitude":0.07712622,"frequency":0.9}},{"time":1.1780045,"amplitude":0.040889896,"emphasis":{"amplitude":0.05111237,"frequency":0.9}},{"time":1.1920182,"amplitude":0.05336972,"emphasis":{"amplitude":0.06671215,"frequency":0.9}},{"time":1.2350063,"amplitude":0},{"time":1.2350113,"amplitude":0.10139792000000002,"emphasis":{"amplitude":0.1267474,"frequency":0.9}},{"time":1.2600226,"amplitude":0.045222548,"emphasis":{"amplitude":0.056528185,"frequency":0.9}},{"time":1.2750113,"amplitude":0.0427824824,"emphasis":{"amplitude":0.053478103,"frequency":0.9}},{"time":1.2770067,"amplitude":0.07354224320000001,"emphasis":{"amplitude":0.091927804,"frequency":0.9}},{"time":1.3000226,"amplitude":0.051214912,"emphasis":{"amplitude":0.06401864,"frequency":0.9}},{"time":1.3100226,"amplitude":0.068290712,"emphasis":{"amplitude":0.08536339,"frequency":0.9}},{"time":1.3340136,"amplitude":0.0394284368,"emphasis":{"amplitude":0.049285546,"frequency":0.9}},{"time":1.3600227,"amplitude":0.0345067472,"emphasis":{"amplitude":0.043133434,"frequency":0.9}},{"time":1.3780272,"amplitude":0.08204108,"emphasis":{"amplitude":0.10255135,"frequency":0.9}},{"time":1.4210204,"amplitude":0.028575772,"emphasis":{"amplitude":0.035719715,"frequency":0.9}},{"time":1.4500227,"amplitude":0.025779492,"emphasis":{"amplitude":0.032224365,"frequency":0.9}},{"time":1.4510204,"amplitude":0.076810896,"emphasis":{"amplitude":0.09601362,"frequency":0.9}},{"time":1.4610204,"amplitude":0.08828608,"emphasis":{"amplitude":0.1103576,"frequency":0.9}},{"time":1.4820181,"amplitude":0.053782904,"emphasis":{"amplitude":0.06722863,"frequency":0.9}},{"time":1.5040363,"amplitude":0.061666616,"emphasis":{"amplitude":0.07708327,"frequency":0.9}},{"time":1.519025,"amplitude":0.11648964,"emphasis":{"amplitude":0.14561205,"frequency":0.9}},{"time":1.5720181,"amplitude":0.04194250720000001,"emphasis":{"amplitude":0.052428134,"frequency":0.9}},{"time":1.5920408,"amplitude":0.0365350368,"emphasis":{"amplitude":0.045668796,"frequency":0.9}},{"time":1.5940362,"amplitude":0.0678247392,"emphasis":{"amplitude":0.084780924,"frequency":0.9}},{"time":1.6370294,"amplitude":0.032788005599999996,"emphasis":{"amplitude":0.040985007,"frequency":0.9}},{"time":1.6730385,"amplitude":0.020491204800000003,"emphasis":{"amplitude":0.025614006,"frequency":0.9}},{"time":1.6870295,"amplitude":0.05248816,"emphasis":{"amplitude":0.0656102,"frequency":0.9}},{"time":1.7020408,"amplitude":0.032069824000000004,"emphasis":{"amplitude":0.04008728,"frequency":0.9}},{"time":1.7375121586206899,"amplitude":0},{"time":2.07,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.07255734999999999,"frequency":0},{"time":0.07256235,"frequency":0.5230819242105264},{"time":0.113197275,"frequency":0.46936458421052635},{"time":0.16253969,"frequency":0.6971391842105262},{"time":0.2031746,"frequency":0.4534967542105264},{"time":0.24090704,"frequency":0.4531616842105263},{"time":0.26122448,"frequency":0.6395403142105264},{"time":0.33668935,"frequency":0.6067746242105264},{"time":0.3512018,"frequency":0.36305948421052636},{"time":0.38022676,"frequency":0.5382414142105263},{"time":0.44988662,"frequency":0.3995613142105263},{"time":0.49052155,"frequency":0.5518885542105263},{"time":0.5456689,"frequency":0.45774155421052637},{"time":0.57469386,"frequency":0.6315041842105263},{"time":0.58920634,"frequency":0.47690686421052636},{"time":0.64435375,"frequency":0.6314943842105264},{"time":0.6704762,"frequency":0.4076771442105263},{"time":0.69659865,"frequency":0.6438418542105264},{"time":0.74303854,"frequency":0.5664633042105265},{"time":0.7662585,"frequency":0.8666818842105263},{"time":0.786576,"frequency":0.5920135542105264},{"time":0.8562358,"frequency":0.9357005342105262},{"time":0.88526076,"frequency":0.7098777642105263},{"time":0.93750566,"frequency":0.9366212442105262},{"time":0.9578231,"frequency":0.6432305442105264},{"time":0.96943307,"frequency":0.8280229242105264},{"time":0.9984581,"frequency":0.7105354642105263},{"time":1.0013604,"frequency":0.6692142142105264},{"time":1.0245805,"frequency":0.6267898342105264},{"time":1.0478004,"frequency":0.9674476842105262},{"time":1.0710204,"frequency":0.6100602342105264},{"time":1.1493877,"frequency":0.9575415842105263},{"time":1.2364625,"frequency":0.6672826842105264},{"time":1.24517,"frequency":0.8917665142105262},{"time":1.3235373,"frequency":0.6363721342105263},{"time":1.3931972,"frequency":0.7970364642105263},{"time":1.4338322,"frequency":0.6147487042105263},{"time":1.5499319,"frequency":0.8063764},{"time":1.6137868,"frequency":0.49192107000000007},{"time":1.6428117,"frequency":0.9042763},{"time":1.6515192,"frequency":0.4952008200000001},{"time":1.6689341,"frequency":0.78545577},{"time":1.7298865,"frequency":1},{"time":1.750204,"frequency":0.5718712600000001},{"time":1.7937365,"frequency":0},{"time":2.07,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.haptic.meta new file mode 100644 index 0000000..3f3498d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 902148089959e4e0094692971d6a817c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.wav new file mode 100644 index 0000000..c963549 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.wav.meta new file mode 100644 index 0000000..67a6ec0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Glass3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 876f70b03d1d7443287c0369542a7c0f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.haptic new file mode 100644 index 0000000..7dc1581 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Impact Metal 1.wav","project":"Impact Metal 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00021514355},{"time":0.0009070295,"amplitude":0.040552855},{"time":0.031746034,"amplitude":0.037238535},{"time":0.041723356,"amplitude":0.08184425},{"time":0.06893424,"amplitude":0.03959314},{"time":0.14875284,"amplitude":0.06778997},{"time":0.1755102,"amplitude":0.046761017},{"time":0.19954649,"amplitude":0.14545514},{"time":0.21904762,"amplitude":0.09371106},{"time":0.24126984,"amplitude":0.15071668},{"time":0.24263039,"amplitude":0.32124242},{"time":0.25034013,"amplitude":0.28202984},{"time":0.2589569,"amplitude":0.36888292},{"time":0.25941044,"amplitude":0.5235904},{"time":0.28843537,"amplitude":0.38225636},{"time":0.28893537,"amplitude":0.6753625,"emphasis":{"amplitude":1,"frequency":0.1}},{"time":0.2906373148159814,"amplitude":0.9136458789473685},{"time":0.2911373148159814,"amplitude":1},{"time":0.618335510012304,"amplitude":0.33109837947368426},{"time":0.64399093,"amplitude":0.30183895000000005},{"time":0.64807254,"amplitude":0.40019526000000005},{"time":0.6861678,"amplitude":0.26173463999999996},{"time":0.6884354,"amplitude":0.3280087400000001},{"time":0.7201814,"amplitude":0.23611102999999997},{"time":0.73015875,"amplitude":0.26362465999999996},{"time":0.75192744,"amplitude":0.22402441999999995},{"time":0.768254,"amplitude":0.29832155000000005},{"time":0.78956914,"amplitude":0.23528481999999998},{"time":0.8040816,"amplitude":0.29499820000000004},{"time":0.81995463,"amplitude":0.21688919999999995},{"time":0.8435374,"amplitude":0.19348963999999996},{"time":0.846712,"amplitude":0.26449155999999996},{"time":0.9079365,"amplitude":0.18361762999999998},{"time":0.90929705,"amplitude":0.21769519999999995},{"time":0.9378685,"amplitude":0.18850334999999996},{"time":0.9401361,"amplitude":0.26159745999999995},{"time":0.9605442,"amplitude":0.21617399999999995},{"time":0.9623583,"amplitude":0.28997198},{"time":0.99954647,"amplitude":0.17487267999999997},{"time":1.0022676,"amplitude":0.22872458999999995},{"time":1.0185941,"amplitude":0.18195944499999997},{"time":1.0653061,"amplitude":0.12779134},{"time":1.09161,"amplitude":0.155344935},{"time":1.1165533,"amplitude":0.14290997},{"time":1.1192744,"amplitude":0.18212757999999998},{"time":1.1564626,"amplitude":0.14373181000000002},{"time":1.1764172,"amplitude":0.18454631},{"time":1.232653,"amplitude":0.14570856},{"time":2.2215967049622667,"amplitude":0.015789473684210527},{"time":4.352892179602579,"amplitude":0.003447588313052058},{"time":4.449387000000001,"amplitude":0},{"time":4.449887,"amplitude":0.00003481476},{"time":4.4500227,"amplitude":0.00003481476}],"frequency":[{"time":0,"frequency":0.4243131505263158},{"time":0.023237716,"frequency":0.4468424},{"time":0.11037915,"frequency":0.43955576},{"time":0.1800923,"frequency":0.43732113},{"time":0.2775332999630877,"frequency":0.6997137931578953},{"time":0.30209032,"frequency":0.261446},{"time":0.36599404,"frequency":0.31655262000000006},{"time":0.40666005,"frequency":0.24360508999999997},{"time":0.43570718,"frequency":0.33499778},{"time":0.4647543,"frequency":0.2272051},{"time":0.55770516,"frequency":0.27787107},{"time":0.5751335,"frequency":0.20537799999999998},{"time":0.62741834,"frequency":0.27399805000000005},{"time":0.6622749,"frequency":0.19407777999999998},{"time":0.7377975,"frequency":0.23702436},{"time":0.8075106,"frequency":0.18120418},{"time":0.9295086,"frequency":0.19661472},{"time":0.9701747,"frequency":0.14539222},{"time":1.0573161,"frequency":0.24069165999999997},{"time":1.1735047,"frequency":0.13630339},{"time":1.3187404,"frequency":0.20490990999999997},{"time":1.3535969,"frequency":0.136582524},{"time":1.5104516,"frequency":0.21839416999999997},{"time":1.5801647,"frequency":0.11397594},{"time":1.6905439,"frequency":0.14250275},{"time":1.7370193,"frequency":0.2558474},{"time":1.7544476,"frequency":0.1416562},{"time":1.8706361,"frequency":0.11709448},{"time":1.8996834,"frequency":0.16326466},{"time":2.015872,"frequency":0.100549616},{"time":2.126251,"frequency":0.15926644},{"time":2.2540586,"frequency":0.09678304},{"time":2.3934848,"frequency":0.12678409},{"time":2.480626,"frequency":0.0883006},{"time":2.5271018,"frequency":0.13028805},{"time":2.6026242,"frequency":0.08249152},{"time":2.9047146,"frequency":0.100489385},{"time":2.9416450439962034,"frequency":0.08611143652631577},{"time":3.0557597,"frequency":0.08144784},{"time":4.4495227,"frequency":0},{"time":4.4500227,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.haptic.meta new file mode 100644 index 0000000..06272ad --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f24e8159953ef44feb8ca992ccd1d60a +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.wav new file mode 100644 index 0000000..f901cef Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.wav.meta new file mode 100644 index 0000000..7579c0c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/ImpactMetal1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 4267b36b1ce8c4beebe7ef729212f7a8 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.haptic new file mode 100644 index 0000000..24d7326 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Punch 1.wav","project":"Punch 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0},{"time":0.04112151067323481,"amplitude":0},{"time":0.049,"amplitude":0.07591938},{"time":0.05,"amplitude":0.21509026},{"time":0.051,"amplitude":0.5428253,"emphasis":{"amplitude":0.6785316,"frequency":0.39117965}},{"time":0.053,"amplitude":0.6921603},{"time":0.059,"amplitude":0.6196738},{"time":0.067,"amplitude":0.4563595},{"time":0.074999996,"amplitude":0.34588417},{"time":0.083,"amplitude":0.2629128},{"time":0.084,"amplitude":0.3056703},{"time":0.09102083,"amplitude":0.28230858},{"time":0.093020834,"amplitude":0.30936494},{"time":0.10502083,"amplitude":0.20965587},{"time":0.11802083,"amplitude":0.15068027},{"time":0.12702084,"amplitude":0.11734863},{"time":0.14902084,"amplitude":0.078171484},{"time":0.16702083,"amplitude":0.053677812},{"time":0.16802083,"amplitude":0.0790293},{"time":0.18902083,"amplitude":0.045970663},{"time":0.22948060011494256,"amplitude":0},{"time":0.535,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.03868226600985221,"frequency":0},{"time":0.045333333,"frequency":0.48213372},{"time":0.05866666,"frequency":0.18477637},{"time":0.07733333,"frequency":0.3911875},{"time":0.082666665,"frequency":0.067340545},{"time":0.10133333,"frequency":0.39121863},{"time":0.10933333,"frequency":0.15715618},{"time":0.11733332,"frequency":0.44738674},{"time":0.12266666,"frequency":0.14282176},{"time":0.176,"frequency":0.05933748},{"time":0.20799999,"frequency":0.13629805},{"time":0.21599999,"frequency":0.27215835},{"time":0.24184483758620692,"frequency":0},{"time":0.535,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.haptic.meta new file mode 100644 index 0000000..56a78d5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f5fabd937f2c64601beaefd717589e11 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.wav new file mode 100644 index 0000000..5a942b9 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.wav.meta new file mode 100644 index 0000000..d6684a2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Punch1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: b095455289bc04fca92e91be30c46fa5 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.haptic new file mode 100644 index 0000000..d32e16d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Wood 1.wav","project":"Wood 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000097550714},{"time":0.0010204081,"amplitude":0.000097550714},{"time":0.030022675,"amplitude":0.00016906233},{"time":0.048997267000000004,"amplitude":0.03731988305263158},{"time":0.049002267,"amplitude":0.20106792},{"time":0.053015873,"amplitude":0.27882358},{"time":0.054013606,"amplitude":0.4583024,"emphasis":{"amplitude":0.572878,"frequency":0.06289025}},{"time":0.06800453,"amplitude":0.43934065},{"time":0.06900226,"amplitude":0.49507543},{"time":0.07600907,"amplitude":0.43566966},{"time":0.07800453,"amplitude":0.5346978},{"time":0.09301587,"amplitude":0.4020098},{"time":0.10501134,"amplitude":0.25275093},{"time":0.1240136,"amplitude":0.1380011},{"time":0.1370068,"amplitude":0.09867998},{"time":0.1470068,"amplitude":0.12655322},{"time":0.17501134,"amplitude":0.05999477},{"time":0.1770068,"amplitude":0.1076643},{"time":0.20301586,"amplitude":0.061255716},{"time":0.21102041,"amplitude":0.08631551},{"time":0.2470018,"amplitude":0},{"time":1.17,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.029019942,"frequency":0},{"time":0.037727422000000004,"frequency":0},{"time":0.037732422,"frequency":0.39075664},{"time":0.09287982,"frequency":0.0800274},{"time":0.1509297,"frequency":0.092700996},{"time":0.16834468,"frequency":0.3248881},{"time":0.19156463,"frequency":0.10110953},{"time":0.23800454,"frequency":0.4650608},{"time":0.24671203,"frequency":0.25379068},{"time":0.2830996224137931,"frequency":0},{"time":1.17,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.haptic.meta new file mode 100644 index 0000000..29bbf44 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 27cf281de1d7c4108876df39298ea6dd +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.wav new file mode 100644 index 0000000..c8475ad Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.wav.meta new file mode 100644 index 0000000..5cca7db --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 7a1a2eee05f0d4891a7a693b1866521b +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.haptic new file mode 100644 index 0000000..0e436ff --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Wood 2.wav","project":"Wood 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0024308108},{"time":0.0010204081,"amplitude":0.0024308108},{"time":0.06800453,"amplitude":0.002655128},{"time":0.07600907,"amplitude":0.06686076},{"time":0.07800453,"amplitude":0.44784912},{"time":0.08600907,"amplitude":0.41577908},{"time":0.090022676,"amplitude":0.5452107},{"time":0.09600907,"amplitude":0.50965244},{"time":0.098004535,"amplitude":0.61827385},{"time":0.1010204,"amplitude":0.62056243},{"time":0.11002267,"amplitude":0.45897797},{"time":0.12800454,"amplitude":0.27408245},{"time":0.13800453,"amplitude":0.23527828},{"time":0.1410204,"amplitude":0.3362376},{"time":0.14600907,"amplitude":0.3703703},{"time":0.1470068,"amplitude":0.43830696},{"time":0.15201814,"amplitude":0.44119835},{"time":0.16002268,"amplitude":0.33968014},{"time":0.17002267,"amplitude":0.26639333},{"time":0.20600906,"amplitude":0.09506138},{"time":0.23201314,"amplitude":0},{"time":0.7850113,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.026122449,"frequency":0},{"time":0.05734313264367816,"frequency":0},{"time":0.06965986,"frequency":0.44221678},{"time":0.089977324,"frequency":0.12637891},{"time":0.13931973,"frequency":0.06759721},{"time":0.1596372,"frequency":0.16256121},{"time":0.18575963,"frequency":0.08787265},{"time":0.21478458,"frequency":0.40797013},{"time":0.22639456,"frequency":0.13000728},{"time":0.2581264355172414,"frequency":0},{"time":0.7850113,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.haptic.meta new file mode 100644 index 0000000..ed14bea --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a0f88f56e03f94bbdbbe5e5cd63a703c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.wav new file mode 100644 index 0000000..106c667 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.wav.meta new file mode 100644 index 0000000..9546d3f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f2df404e0aa2343fda3a088cbae0ec1a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.haptic new file mode 100644 index 0000000..156dcaa --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Wood 3.wav","project":"Wood 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0002502872},{"time":0.0010204081,"amplitude":0.0002502872},{"time":0.05853780563218391,"amplitude":0},{"time":0.06501134,"amplitude":0.05027488},{"time":0.06800453,"amplitude":0.56153905},{"time":0.075011335,"amplitude":0.47763136},{"time":0.083015874,"amplitude":0.51575625},{"time":0.0870068,"amplitude":0.45973256},{"time":0.08900227,"amplitude":0.5838302},{"time":0.099002264,"amplitude":0.42652345},{"time":0.1170068,"amplitude":0.2363754},{"time":0.13201813,"amplitude":0.16005453},{"time":0.13600907,"amplitude":0.2600401},{"time":0.15800454,"amplitude":0.2626225},{"time":0.1770068,"amplitude":0.15150142},{"time":0.18002267,"amplitude":0.1918813},{"time":0.20600906,"amplitude":0.14074673},{"time":0.22600907,"amplitude":0.07049945},{"time":0.24900226,"amplitude":0.03809462},{"time":0.29500634000000003,"amplitude":0},{"time":1.0709977,"amplitude":0.0027177506},{"time":1.0750114,"amplitude":0.002378753},{"time":1.0770068,"amplitude":0.0021976694},{"time":1.0809977,"amplitude":0.0018910188},{"time":1.0830158,"amplitude":0.0017493927},{"time":1.0850114,"amplitude":0.0016278108},{"time":1.086009,"amplitude":0.0015902899},{"time":1.0861627999999999,"amplitude":0},{"time":1.0861678,"amplitude":0.0015902899}],"frequency":[{"time":0,"frequency":0},{"time":0.029024942,"frequency":0},{"time":0.055147387,"frequency":0.51208067},{"time":0.08126984,"frequency":0.09358789},{"time":0.11609977,"frequency":0.34225592},{"time":0.13351475,"frequency":0.088129334},{"time":0.3689498886206896,"frequency":0},{"time":1.1,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.haptic.meta new file mode 100644 index 0000000..72714da --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 81bb5ef83e33448a4a77f92040007a11 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.wav new file mode 100644 index 0000000..46b74d6 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.wav.meta new file mode 100644 index 0000000..c31f748 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Impacts/Wood3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 1ecf85b167cc547beb5e448c3084fd7f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music.meta new file mode 100644 index 0000000..b08b42a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: da1bd702c10e24f059b15cfbdd2ce75a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.haptic new file mode 100644 index 0000000..d1fe71d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Cymbal 1.wav","project":"Cymbal 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.1552913,"emphasis":{"amplitude":0.19411413,"frequency":0.19411413}},{"time":0.0010204081,"amplitude":0.19411413},{"time":0.003015873,"amplitude":0.19171175},{"time":0.00600907,"amplitude":0.24707575},{"time":0.0070068026,"amplitude":0.41088203},{"time":0.008004535,"amplitude":0.41088203},{"time":0.009002267,"amplitude":0.65823203},{"time":0.010022676,"amplitude":0.65823203},{"time":0.017006803,"amplitude":0.5250428},{"time":0.020022675,"amplitude":0.48413306},{"time":0.021020407,"amplitude":0.6067237},{"time":0.02201814,"amplitude":0.6067237},{"time":0.028004535,"amplitude":0.50866187},{"time":0.030022675,"amplitude":0.5553732},{"time":0.033015873,"amplitude":0.5154454},{"time":0.035011336,"amplitude":0.52608657},{"time":0.039002266,"amplitude":0.46864486},{"time":0.04102041,"amplitude":0.4793386},{"time":0.044013605,"amplitude":0.44088507},{"time":0.0470068,"amplitude":0.5339035},{"time":0.05600907,"amplitude":0.4276993},{"time":0.058004536,"amplitude":0.4697025},{"time":0.061020408,"amplitude":0.44813275},{"time":0.06401361,"amplitude":0.4614498},{"time":0.06900226,"amplitude":0.41259468},{"time":0.07,"amplitude":0.5885555},{"time":0.07102041,"amplitude":0.5885555},{"time":0.07900227,"amplitude":0.46520475},{"time":0.08501133,"amplitude":0.3981085},{"time":0.08600907,"amplitude":0.43453467},{"time":0.08900227,"amplitude":0.41043898},{"time":0.0940136,"amplitude":0.4495011},{"time":0.0970068,"amplitude":0.41250172},{"time":0.099002264,"amplitude":0.459814},{"time":0.10401361,"amplitude":0.4009143},{"time":0.10800453,"amplitude":0.40365958},{"time":0.12002268,"amplitude":0.2813712},{"time":0.12900226,"amplitude":0.20646746},{"time":0.14201814,"amplitude":0.1294413},{"time":0.15501134,"amplitude":0.076739185},{"time":0.1670068,"amplitude":0.04570476},{"time":0.16725624,"amplitude":0.04570476},{"time":0.16725624,"amplitude":0.04570476}],"frequency":[{"time":0,"frequency":0.61018217},{"time":0.0029024947,"frequency":0.68855476},{"time":0.0058049876,"frequency":0.7295298},{"time":0.011609977,"frequency":0.745578},{"time":0.017414967,"frequency":0.68606573},{"time":0.026122449,"frequency":0.7026789},{"time":0.029024942,"frequency":0.77152705},{"time":0.031927437,"frequency":0.7820299},{"time":0.037732422,"frequency":0.72460204},{"time":0.043537416,"frequency":0.724207},{"time":0.0493424,"frequency":0.68751407},{"time":0.05804988,"frequency":0.6959908},{"time":0.06095238,"frequency":0.66280246},{"time":0.06965986,"frequency":0.7348785},{"time":0.07546485,"frequency":0.7181148},{"time":0.08126984,"frequency":0.66725284},{"time":0.08707482,"frequency":0.71628445},{"time":0.09287982,"frequency":0.7065637},{"time":0.104489796,"frequency":0.7738852},{"time":0.11029478,"frequency":0.7400568},{"time":0.11609977,"frequency":0.641999},{"time":0.11900226,"frequency":0.63973826},{"time":0.12190475,"frequency":0.66959876},{"time":0.12770975,"frequency":0.67686874},{"time":0.13351475,"frequency":0.6127378},{"time":0.13931973,"frequency":0.66742027},{"time":0.14512472,"frequency":0.7003151},{"time":0.14802721,"frequency":0.73617506},{"time":0.1509297,"frequency":0.69156283},{"time":0.1538322,"frequency":0.5859067}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.haptic.meta new file mode 100644 index 0000000..5a4d934 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c6cf6a975bc4d470b893bf21271b54a7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.wav new file mode 100644 index 0000000..7b5b718 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.wav.meta new file mode 100644 index 0000000..8050ddf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a9441784149b3412aa2800f86d9a0647 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.haptic new file mode 100644 index 0000000..ff754c4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Cymbal 2.wav","project":"Cymbal 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.14482503,"emphasis":{"amplitude":0.53103129,"frequency":0.9}},{"time":0.000005,"amplitude":0.16315789473197964},{"time":0.000005,"amplitude":0.47313655315789493},{"time":0.00600907,"amplitude":0.34221038},{"time":0.034013607,"amplitude":0.24912179},{"time":0.044013605,"amplitude":0.2624849},{"time":0.05600907,"amplitude":0.2301349},{"time":0.083015874,"amplitude":0.23392278},{"time":0.1010204,"amplitude":0.20715448},{"time":0.10501134,"amplitude":0.24248},{"time":0.1170068,"amplitude":0.19965595},{"time":0.13102041,"amplitude":0.22823863},{"time":0.14201814,"amplitude":0.18928382},{"time":0.15501134,"amplitude":0.2128024},{"time":0.18002267,"amplitude":0.1745117},{"time":0.1840136,"amplitude":0.22016473},{"time":0.20501134,"amplitude":0.16772808},{"time":0.20600906,"amplitude":0.1920034},{"time":0.22501133,"amplitude":0.17155087},{"time":0.22600907,"amplitude":0.19799435},{"time":0.26301587,"amplitude":0.16276053},{"time":0.28600907,"amplitude":0.1357572942105262},{"time":0.3070068,"amplitude":0.08468880421052637},{"time":0.31,"amplitude":0.11948915421052626},{"time":0.32900226,"amplitude":0.08831050421052637},{"time":0.34600908,"amplitude":0.11389474421052627},{"time":0.36800453,"amplitude":0.07685103421052636},{"time":0.38301587,"amplitude":0.10804232421052626},{"time":0.4010204,"amplitude":0.08946142421052637},{"time":0.45600906,"amplitude":0.05644020021052639},{"time":0.48501134,"amplitude":0.06502329421052641},{"time":0.7548825451859107,"amplitude":0},{"time":1.3382087,"amplitude":0.0040778113}],"frequency":[{"time":0,"frequency":0.36399674},{"time":0.055147387,"frequency":0.62180316},{"time":0.10739229,"frequency":0.63130224},{"time":0.12770975,"frequency":0.880895},{"time":0.14802721,"frequency":0.5719343},{"time":0.17995465,"frequency":0.8324982},{"time":0.19736962,"frequency":0.6309881},{"time":0.29024944,"frequency":0.6912395},{"time":0.29895693,"frequency":0.98368514},{"time":0.33378685,"frequency":0.6680649},{"time":0.3628118,"frequency":0.9491554},{"time":0.4063492,"frequency":0.70645756},{"time":0.4121542,"frequency":1},{"time":0.44117913,"frequency":0.6629582},{"time":0.46730158,"frequency":0.85644954},{"time":0.499229,"frequency":0.72212905},{"time":0.57469386,"frequency":0.723965},{"time":0.6124263,"frequency":0.67404246},{"time":0.6588662,"frequency":1},{"time":0.6878911,"frequency":0.673906},{"time":0.7198186,"frequency":0.9767822},{"time":0.76335603,"frequency":0.7316484},{"time":0.79528344,"frequency":0.940649},{"time":0.8243084,"frequency":0.7189121},{"time":0.84752834,"frequency":1},{"time":0.8533333,"frequency":0.75622416},{"time":0.89977324,"frequency":0.8876811},{"time":0.9404082,"frequency":0.7117234},{"time":0.9607256,"frequency":1},{"time":0.9984581,"frequency":0.85274786},{"time":1.0013604,"frequency":0.72124016},{"time":1.0042629,"frequency":0.9335768},{"time":1.021678,"frequency":0.7126886},{"time":1.0478004,"frequency":0.8217356},{"time":1.0681179,"frequency":0.8036429},{"time":1.0797278,"frequency":0.99546325},{"time":1.0855328,"frequency":0.72411764},{"time":1.0913378,"frequency":1},{"time":1.1000453,"frequency":0.7483803},{"time":1.1058502,"frequency":0.93079513},{"time":1.1145577,"frequency":0.70470953},{"time":1.1348752,"frequency":0.72589034},{"time":1.1406802,"frequency":0.8908908},{"time":1.1464852,"frequency":0.6327797},{"time":1.1522902,"frequency":0.99588937},{"time":1.1580951,"frequency":0.7391669},{"time":1.1784127,"frequency":0.8988041},{"time":1.1842176,"frequency":0.6792245},{"time":1.23356,"frequency":0.705167},{"time":1.239365,"frequency":0.9626421},{"time":1.2538775,"frequency":0.7003865},{"time":1.2654874,"frequency":0.6407088},{"time":1.2829024,"frequency":0.79306537},{"time":1.2887074,"frequency":1},{"time":1.2945124,"frequency":0.7472175},{"time":1.3032199,"frequency":0.99234694},{"time":1.3090248,"frequency":0.74557585},{"time":1.3177323,"frequency":0.9822005},{"time":1.3235373,"frequency":0.6646085},{"time":1.3264399,"frequency":0.8413607}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.haptic.meta new file mode 100644 index 0000000..71e68b9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7a6a5b8d33df74587a64f37e99156676 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.wav new file mode 100644 index 0000000..7cfbe8a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.wav.meta new file mode 100644 index 0000000..c707712 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 2d66f3a41d3cc474e9f6459b66651913 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.haptic new file mode 100644 index 0000000..1abcf39 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Cymbal 3.wav","project":"Cymbal 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.54105556,"emphasis":{"amplitude":0.6763194,"frequency":0.9}},{"time":0.0010204081,"amplitude":0.6763194},{"time":0.0040136054,"amplitude":0.7169908},{"time":0.019002268,"amplitude":0.46131784},{"time":0.02201814,"amplitude":0.5120544},{"time":0.04301587,"amplitude":0.31181866},{"time":0.045011338,"amplitude":0.3784501},{"time":0.055011336,"amplitude":0.29193112},{"time":0.074013606,"amplitude":0.25254643},{"time":0.08201814,"amplitude":0.33070877},{"time":0.09600907,"amplitude":0.2282787},{"time":0.0970068,"amplitude":0.29945284},{"time":0.14002268,"amplitude":0.19586246},{"time":0.15900226,"amplitude":0.21841583},{"time":0.1670068,"amplitude":0.17617157},{"time":0.17600907,"amplitude":0.22802399},{"time":0.1870068,"amplitude":0.16934434},{"time":0.19600907,"amplitude":0.20452735},{"time":0.21002267,"amplitude":0.21333757},{"time":0.23501134,"amplitude":0.14277953},{"time":0.24800453,"amplitude":0.17016587},{"time":0.26201814,"amplitude":0.119879484},{"time":0.27501133,"amplitude":0.17015581},{"time":0.2910204,"amplitude":0.11673629},{"time":0.30900225,"amplitude":0.10415472},{"time":0.31,"amplitude":0.15616177},{"time":0.34501132,"amplitude":0.09690367},{"time":0.34900227,"amplitude":0.12541397},{"time":0.39,"amplitude":0.07894142},{"time":0.42201814,"amplitude":0.06854792},{"time":0.45,"amplitude":0.099549696},{"time":0.4740136,"amplitude":0.05729611},{"time":0.48800454,"amplitude":0.07941591},{"time":0.51900226,"amplitude":0.05159684},{"time":0.55600905,"amplitude":0.06741158},{"time":0.6330779795402299,"amplitude":0},{"time":1.2630159,"amplitude":0.0040651434},{"time":1.2635828,"amplitude":0.0040651434},{"time":1.2635828,"amplitude":0.0040651434}],"frequency":[{"time":0,"frequency":0.4962944821052633},{"time":0.037732422,"frequency":0.5846681721052632},{"time":0.055147387,"frequency":0.4706006821052633},{"time":0.17995465,"frequency":0.3529825},{"time":0.19156463,"frequency":0.47707817},{"time":0.22929706,"frequency":0.35047072},{"time":0.252517,"frequency":0.48357123},{"time":0.26993197,"frequency":0.39697683},{"time":0.34829932,"frequency":0.31338903},{"time":0.37442178,"frequency":0.45107305},{"time":0.4063492,"frequency":0.36702824},{"time":0.44117913,"frequency":0.50536466},{"time":0.4643991,"frequency":0.42362863},{"time":0.4963265,"frequency":0.49948928},{"time":0.5079365,"frequency":0.32897276},{"time":0.5340589,"frequency":0.50435084},{"time":0.5543764,"frequency":0.37528476},{"time":0.6675737,"frequency":0.43443254},{"time":0.73142856,"frequency":0.30755812},{"time":0.751746,"frequency":0.564701},{"time":0.7662585,"frequency":0.4212081},{"time":0.79818594,"frequency":0.49132994},{"time":0.8068934,"frequency":0.30194816},{"time":0.83301586,"frequency":0.46881258},{"time":0.84752834,"frequency":0.263241},{"time":0.90267575,"frequency":0.4833073},{"time":0.93170065,"frequency":0.3533413},{"time":0.95492065,"frequency":0.70268893},{"time":0.9636281,"frequency":0.42751384},{"time":0.9984581,"frequency":0.6374979},{"time":1.0013604,"frequency":0.6344564},{"time":1.0071654,"frequency":0.45776758},{"time":1.015873,"frequency":0.43489042},{"time":1.021678,"frequency":0.6966274},{"time":1.0274829,"frequency":0.43061262},{"time":1.0332879,"frequency":0.60991377},{"time":1.0448979,"frequency":0.42343512},{"time":1.0565078,"frequency":0.6238317},{"time":1.0652153,"frequency":0.48911804},{"time":1.0739229,"frequency":0.5096647},{"time":1.0768254,"frequency":0.3805544},{"time":1.0855328,"frequency":0.6718296},{"time":1.0942403,"frequency":0.44880003},{"time":1.1058502,"frequency":0.6142743},{"time":1.1116552,"frequency":0.41961002},{"time":1.1232653,"frequency":0.55665016},{"time":1.1348752,"frequency":0.36319363},{"time":1.1406802,"frequency":0.5468015},{"time":1.1522902,"frequency":0.36661145},{"time":1.1668026,"frequency":0.31110224},{"time":1.1755102,"frequency":0.5682667},{"time":1.1813151,"frequency":0.31645426},{"time":1.1871201,"frequency":0.3181203},{"time":1.1958276,"frequency":0.708908},{"time":1.2045351,"frequency":0.27537468},{"time":1.21034,"frequency":0.36149606},{"time":1.22195,"frequency":0.98847216},{"time":1.239365,"frequency":0.951591},{"time":1.24517,"frequency":0.5720477},{"time":1.250975,"frequency":0.45698974}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.haptic.meta new file mode 100644 index 0000000..d1081f5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7268020c2da5f4e0294961269554c996 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.wav new file mode 100644 index 0000000..52e68a5 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.wav.meta new file mode 100644 index 0000000..400550a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Cymbal3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ddb932091cbb9474f8b38bf2491cc9de +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.haptic new file mode 100644 index 0000000..8f75ed3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Drums 1.wav","project":"Drums 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00030021465},{"time":0.003628118,"amplitude":0.34432673,"emphasis":{"amplitude":0.7311898673684208,"frequency":0.67915916}},{"time":0.015873017,"amplitude":0.5323},{"time":0.042176872,"amplitude":0.46313012},{"time":0.05941043,"amplitude":0.46174696},{"time":0.11577348964246162,"amplitude":0.33718150526315754},{"time":0.19903742841682528,"amplitude":0},{"time":0.44671202,"amplitude":0.0039518545},{"time":0.46984127,"amplitude":0.17571867},{"time":0.4707483,"amplitude":0.45200157,"emphasis":{"amplitude":0.8657834073684209,"frequency":0.911185}},{"time":0.47346938,"amplitude":0.811064},{"time":0.4802721,"amplitude":0.7154285},{"time":0.4829932,"amplitude":0.8195715},{"time":0.4956916,"amplitude":0.6158066},{"time":0.50294787,"amplitude":0.6045791},{"time":0.50566894,"amplitude":0.71514887},{"time":0.5197279,"amplitude":0.5416064},{"time":0.5292517,"amplitude":0.511328},{"time":0.5482993,"amplitude":0.5293503},{"time":0.5637188,"amplitude":0.44885266},{"time":0.5922902,"amplitude":0.4041742},{"time":0.5954648,"amplitude":0.434035},{"time":0.63265306,"amplitude":0.3600289},{"time":0.7143959615658824,"amplitude":0},{"time":0.88526076,"amplitude":0.013173172},{"time":0.9151927,"amplitude":0.003814019},{"time":0.938322,"amplitude":0.15610811},{"time":0.93968254,"amplitude":0.41640848,"emphasis":{"amplitude":0.821292047368421,"frequency":0.85772145}},{"time":0.9718821,"amplitude":0.4609442},{"time":0.9814059,"amplitude":0.49281383},{"time":1.0054421,"amplitude":0.454977},{"time":1.0081632,"amplitude":0.4913268},{"time":1.0086632,"amplitude":0.5010635536842105},{"time":1.200378928080999,"amplitude":0},{"time":1.3489328824553077,"amplitude":0},{"time":1.384127,"amplitude":0.0043008067},{"time":1.4072562,"amplitude":0.1710829},{"time":1.4081633,"amplitude":0.41419247,"emphasis":{"amplitude":0.8185220473684208,"frequency":0.90026885}},{"time":1.4113379,"amplitude":0.7916969},{"time":1.4204081,"amplitude":0.7879126},{"time":1.4331065,"amplitude":0.59792113},{"time":1.4408163,"amplitude":0.59590626},{"time":1.4417233,"amplitude":0.7235076},{"time":1.4580499,"amplitude":0.53660506},{"time":1.4834467,"amplitude":0.478504},{"time":1.4843538,"amplitude":0.531104},{"time":1.5015873,"amplitude":0.44850534},{"time":1.523356,"amplitude":0.4465718},{"time":1.5238096,"amplitude":0.5754504},{"time":1.5301588,"amplitude":0.649453},{"time":1.5510204,"amplitude":0.45485196},{"time":1.5705216,"amplitude":0.37320378},{"time":1.5727891,"amplitude":0.40391335},{"time":1.6226758,"amplitude":0.285421},{"time":1.6426303,"amplitude":0.25845787},{"time":1.6471655,"amplitude":0.4014579},{"time":1.6657597,"amplitude":0.30064794},{"time":1.6702948,"amplitude":0.3488786},{"time":1.6820861,"amplitude":0.32205695},{"time":1.7006803,"amplitude":0.21769507},{"time":1.7052155,"amplitude":0.23138419},{"time":1.738322,"amplitude":0.13859689},{"time":1.7582767,"amplitude":0.15550223},{"time":1.7591836,"amplitude":0.4002721,"emphasis":{"amplitude":0.8011215473684209,"frequency":0.8997428}},{"time":1.7668934,"amplitude":0.5336535},{"time":1.7804989,"amplitude":0.31755954},{"time":1.7913833,"amplitude":0.2116379},{"time":1.8126984,"amplitude":0.101242684},{"time":1.8294785,"amplitude":0.06564275},{"time":1.8562359,"amplitude":0.058611088},{"time":1.875737,"amplitude":0.17363596},{"time":1.876644,"amplitude":0.39866874,"emphasis":{"amplitude":0.7991173773684209,"frequency":0.8935279}},{"time":1.892517,"amplitude":0.5179168},{"time":1.9092971,"amplitude":0.46608344},{"time":1.9124717,"amplitude":0.5071742},{"time":1.9256235,"amplitude":0.46420726},{"time":1.9455782,"amplitude":0.49548253},{"time":1.9609977,"amplitude":0.45101953},{"time":1.9637188,"amplitude":0.48730567},{"time":1.9891156,"amplitude":0.41705588},{"time":2.018594,"amplitude":0.38500595},{"time":2.118037983325424,"amplitude":0},{"time":2.321542,"amplitude":0.003824924},{"time":2.3446712,"amplitude":0.17015654},{"time":2.3455782,"amplitude":0.4079736,"emphasis":{"amplitude":0.8107484173684208,"frequency":0.8982602}},{"time":2.3478458,"amplitude":0.5053246},{"time":2.3487527,"amplitude":0.7916726},{"time":2.3537414,"amplitude":0.72543526},{"time":2.3578231,"amplitude":0.8111849},{"time":2.3705215,"amplitude":0.6109538},{"time":2.3782313,"amplitude":0.6008336},{"time":2.380499,"amplitude":0.706252},{"time":2.3904762,"amplitude":0.5733314},{"time":2.4117913,"amplitude":0.48279464},{"time":2.4231293,"amplitude":0.5333575},{"time":2.4390023,"amplitude":0.44678205},{"time":2.4412699,"amplitude":0.4795683},{"time":2.4575963,"amplitude":0.41779107},{"time":2.460771,"amplitude":0.4488185},{"time":2.4870749,"amplitude":0.3820833},{"time":2.4902494,"amplitude":0.41033837},{"time":2.5834373184148083,"amplitude":0},{"time":2.790476,"amplitude":0.0038351787},{"time":2.8136055,"amplitude":0.15853785},{"time":2.814059,"amplitude":0.3963408,"emphasis":{"amplitude":0.7962074173684209,"frequency":0.94867975}},{"time":2.8349206,"amplitude":0.49571973},{"time":2.8893423,"amplitude":0.45359707},{"time":2.9011338,"amplitude":0.486713},{"time":2.9170067,"amplitude":0.42983916},{"time":2.9764173,"amplitude":0.36172336},{"time":2.9895692,"amplitude":0.3740847},{"time":3.1655328,"amplitude":0.10400816},{"time":3.16644,"amplitude":0.34005025,"emphasis":{"amplitude":0.7258442473684209,"frequency":0.8923197}},{"time":3.185034,"amplitude":0.22646101},{"time":3.212245,"amplitude":0.076298065},{"time":3.2303855,"amplitude":0.03619831},{"time":3.258957,"amplitude":0.010962113},{"time":3.2820861,"amplitude":0.17192727},{"time":3.282993,"amplitude":0.3843438,"emphasis":{"amplitude":0.781211187368421,"frequency":0.8879409}},{"time":3.2852607,"amplitude":0.4822013},{"time":3.2861679,"amplitude":0.7692884},{"time":3.295238,"amplitude":0.7968107},{"time":3.3079364,"amplitude":0.6030321},{"time":3.3156462,"amplitude":0.60249436},{"time":3.3179138,"amplitude":0.7136279},{"time":3.3274376,"amplitude":0.5833755},{"time":3.341043,"amplitude":0.5007937},{"time":3.3582766,"amplitude":0.48189825},{"time":3.3605442,"amplitude":0.53143305},{"time":3.3764172,"amplitude":0.44860074},{"time":3.395465,"amplitude":0.419234},{"time":3.414059,"amplitude":0.4425653},{"time":3.4149659,"amplitude":0.53689855},{"time":3.431746,"amplitude":0.40591562},{"time":3.498479524689752,"amplitude":0},{"time":3.7278912,"amplitude":0.003822183},{"time":3.7510204,"amplitude":0.15780303},{"time":3.7519274,"amplitude":0.37881556,"emphasis":{"amplitude":0.7743008873684208,"frequency":0.89049995}},{"time":3.7600906,"amplitude":0.5020772},{"time":3.7768707,"amplitude":0.46760857},{"time":3.7950113,"amplitude":0.49341238},{"time":3.8267574,"amplitude":0.45350268},{"time":3.8385487,"amplitude":0.48588017},{"time":3.8639455,"amplitude":0.41623098},{"time":3.999341366650847,"amplitude":0.002631578947368421},{"time":4.1968255,"amplitude":0.0039997455},{"time":4.219501,"amplitude":0.16869685},{"time":4.222676,"amplitude":0.37577787,"emphasis":{"amplitude":0.770503777368421,"frequency":0.59941113}},{"time":4.2235827,"amplitude":0.7756457},{"time":4.232653,"amplitude":0.78222305},{"time":4.245805,"amplitude":0.5908002},{"time":4.2530613,"amplitude":0.5991073},{"time":4.2553287,"amplitude":0.71689916},{"time":4.265306,"amplitude":0.5814925},{"time":4.2789116,"amplitude":0.50200385},{"time":4.2956915,"amplitude":0.48010957},{"time":4.2979593,"amplitude":0.53126836},{"time":4.3138323,"amplitude":0.44790295},{"time":4.3523808,"amplitude":0.39577842},{"time":4.482377056234871,"amplitude":0},{"time":4.665306,"amplitude":0.0037008165},{"time":4.6884356,"amplitude":0.15702897},{"time":4.6893425,"amplitude":0.38925612,"emphasis":{"amplitude":0.787351597368421,"frequency":0.8950913}},{"time":4.7396827,"amplitude":0.49170628},{"time":4.7641726,"amplitude":0.45425767},{"time":4.7764173,"amplitude":0.4838437},{"time":4.913086719284924,"amplitude":0},{"time":5.131814796503695,"amplitude":0},{"time":5.1573696,"amplitude":0.17211345},{"time":5.160998,"amplitude":0.624638,"emphasis":{"amplitude":1,"frequency":0.7730204}},{"time":5.1705217,"amplitude":0.7715509},{"time":5.18322,"amplitude":0.58870566},{"time":5.1904764,"amplitude":0.5969165},{"time":5.191837,"amplitude":0.72062135},{"time":5.2072563,"amplitude":0.5420992},{"time":5.2244897,"amplitude":0.48234525},{"time":5.2358274,"amplitude":0.52864116},{"time":5.260771,"amplitude":0.43468198},{"time":5.2734694,"amplitude":0.44646567},{"time":5.273923,"amplitude":0.6274531},{"time":5.283447,"amplitude":0.66042554},{"time":5.3011336,"amplitude":0.4552476},{"time":5.3201814,"amplitude":0.37595236},{"time":5.3229027,"amplitude":0.4038689},{"time":5.3510203,"amplitude":0.3258403},{"time":5.3927436,"amplitude":0.26475188},{"time":5.395465,"amplitude":0.39128292},{"time":5.415873,"amplitude":0.3076938},{"time":5.4204082,"amplitude":0.4053652},{"time":5.439456,"amplitude":0.26167017},{"time":5.44127,"amplitude":0.29336986},{"time":5.4734693,"amplitude":0.15986626},{"time":5.486168,"amplitude":0.13734327},{"time":5.50839,"amplitude":0.15647295},{"time":5.509297,"amplitude":0.3978056,"emphasis":{"amplitude":0.8638279210526321,"frequency":0.8985507}},{"time":5.517007,"amplitude":0.53715193},{"time":5.527891,"amplitude":0.3541128},{"time":5.5414968,"amplitude":0.21263476},{"time":5.562812,"amplitude":0.10158164},{"time":5.56644,"amplitude":0.114676364},{"time":5.599093,"amplitude":0.05045157},{"time":5.609524,"amplitude":0.07178587},{"time":5.62585,"amplitude":0.17578855},{"time":5.627211,"amplitude":0.39554515,"emphasis":{"amplitude":0.8610023910526321,"frequency":0.83731234}},{"time":5.642177,"amplitude":0.51707256},{"time":5.6594105,"amplitude":0.46535635},{"time":5.660771,"amplitude":0.5053687},{"time":5.684354,"amplitude":0.459609},{"time":5.6938777,"amplitude":0.49601218},{"time":5.711111,"amplitude":0.45243543},{"time":5.7233562,"amplitude":0.4756218},{"time":5.876467586546874,"amplitude":0},{"time":6.006398911406423,"amplitude":0},{"time":6.0716553,"amplitude":0.0038639514},{"time":6.0947847,"amplitude":0.17117701},{"time":6.0956917,"amplitude":0.41937283,"emphasis":{"amplitude":0.8907869810526321,"frequency":0.9020707}},{"time":6.0984125,"amplitude":0.7865748},{"time":6.1079364,"amplitude":0.78164905},{"time":6.120635,"amplitude":0.5944014},{"time":6.127891,"amplitude":0.5926277},{"time":6.1292515,"amplitude":0.7195183},{"time":6.1446714,"amplitude":0.54233384},{"time":6.161905,"amplitude":0.48466986},{"time":6.171882,"amplitude":0.53539336},{"time":6.188662,"amplitude":0.4482401},{"time":6.1913834,"amplitude":0.4780349},{"time":6.20771,"amplitude":0.41856775},{"time":6.220408,"amplitude":0.4379492},{"time":6.2371883,"amplitude":0.38233516},{"time":6.2807255,"amplitude":0.36069822},{"time":6.310204,"amplitude":0.2859147},{"time":6.3301587,"amplitude":0.2644949},{"time":6.33288,"amplitude":0.4238632},{"time":6.353288,"amplitude":0.29818565},{"time":6.357823,"amplitude":0.3963367},{"time":6.3768706,"amplitude":0.25841492},{"time":6.3791385,"amplitude":0.29242215},{"time":6.4108844,"amplitude":0.1605321},{"time":6.4471655,"amplitude":0.11797958},{"time":6.4507937,"amplitude":0.35608575},{"time":6.479365,"amplitude":0.13948292},{"time":6.506576,"amplitude":0.043453667},{"time":6.5405893,"amplitude":0.009756865},{"time":6.5632653,"amplitude":0.15774278},{"time":6.5646257,"amplitude":0.41360992,"emphasis":{"amplitude":0.883583321052632,"frequency":0.85569066}},{"time":6.6049886,"amplitude":0.45679766},{"time":6.622676,"amplitude":0.48980325},{"time":6.6303854,"amplitude":0.45612252},{"time":6.86771635611454,"amplitude":0},{"time":7.0090704,"amplitude":0.010156326},{"time":7.0321994,"amplitude":0.17265585},{"time":7.033107,"amplitude":0.42077354,"emphasis":{"amplitude":0.74516944,"frequency":0.9021461}},{"time":7.0358276,"amplitude":0.5360513},{"time":7.036281,"amplitude":0.7857024},{"time":7.04263,"amplitude":0.69810885},{"time":7.043991,"amplitude":0.80146116},{"time":7.0580497,"amplitude":0.6040448},{"time":7.065306,"amplitude":0.588182},{"time":7.068027,"amplitude":0.71271646},{"time":7.0780044,"amplitude":0.5774158},{"time":7.10839,"amplitude":0.4824064},{"time":7.1106577,"amplitude":0.53134185},{"time":7.1265306,"amplitude":0.44787827},{"time":7.149206,"amplitude":0.44576973},{"time":7.1496596,"amplitude":0.6201604},{"time":7.1546483,"amplitude":0.6014108},{"time":7.156009,"amplitude":0.79848653,"emphasis":{"amplitude":1,"frequency":0.8692948}},{"time":7.167347,"amplitude":0.7431622},{"time":7.180499,"amplitude":0.53321624},{"time":7.195465,"amplitude":0.40323815},{"time":7.196372,"amplitude":0.45187178},{"time":7.2154193,"amplitude":0.37120882},{"time":7.2181406,"amplitude":0.42694587},{"time":7.2371883,"amplitude":0.32601956},{"time":7.239909,"amplitude":0.3612815},{"time":7.2671204,"amplitude":0.2948248},{"time":7.2689342,"amplitude":0.51320624,"emphasis":{"amplitude":0.64339965,"frequency":0.80068797}},{"time":7.273016,"amplitude":0.73153335},{"time":7.2920637,"amplitude":0.4109981},{"time":7.295238,"amplitude":0.48663902},{"time":7.3129253,"amplitude":0.2965746},{"time":7.3183675,"amplitude":0.31514832},{"time":7.335601,"amplitude":0.20404246},{"time":7.339229,"amplitude":0.25431705},{"time":7.3609977,"amplitude":0.14933647},{"time":7.384127,"amplitude":0.15808466},{"time":7.3863945,"amplitude":0.531796},{"time":7.3927436,"amplitude":0.5512504},{"time":7.413605,"amplitude":0.24994245},{"time":7.4294786,"amplitude":0.14047977},{"time":7.455329,"amplitude":0.07272771},{"time":7.499773,"amplitude":0.033331107},{"time":7.5,"amplitude":0.033331107}],"frequency":[{"time":0,"frequency":0.4588544},{"time":0.00580945,"frequency":0.40265334},{"time":0.0232378,"frequency":0.17079255},{"time":0.02904725,"frequency":0.11067692},{"time":0.0348567,"frequency":0.08042152},{"time":0.04066615,"frequency":0.06894283},{"time":0.0580945,"frequency":0.05844651},{"time":0.42408985,"frequency":0.031061312},{"time":0.44151822,"frequency":0.025760358},{"time":0.44732764,"frequency":0.03941876},{"time":0.4531371,"frequency":0.55966765},{"time":0.4554551187723461,"frequency":0.675103163157895},{"time":0.48218435,"frequency":0.31675762},{"time":0.49380326,"frequency":0.16731626},{"time":0.4996127,"frequency":0.12854633},{"time":0.5054222,"frequency":0.11340197},{"time":0.52865994,"frequency":0.07559366},{"time":0.9120837,"frequency":0.017086634},{"time":0.9178931,"frequency":0.17346103},{"time":0.92370254,"frequency":0.5805029},{"time":0.929512,"frequency":0.56320935},{"time":0.9527498,"frequency":0.2915956},{"time":0.9643687,"frequency":0.13492502},{"time":0.9701781,"frequency":0.088986784},{"time":0.98179704,"frequency":0.060624894},{"time":0.9992254,"frequency":0.051610954},{"time":1.034082,"frequency":0.042716295},{"time":1.1037955,"frequency":0.03473101},{"time":1.1560806,"frequency":0.030901352},{"time":1.1793183,"frequency":0.06241235},{"time":1.1851279,"frequency":0.062085558},{"time":1.3826491,"frequency":0.021235993},{"time":1.3884586,"frequency":0.3941254},{"time":1.3995775000000001,"frequency":0.6733560052631582},{"time":1.4175059,"frequency":0.34811825},{"time":1.4291247,"frequency":0.20108257},{"time":1.4349341,"frequency":0.14515875},{"time":1.4407436,"frequency":0.118796796},{"time":1.458172,"frequency":0.08709586},{"time":1.4756004,"frequency":0.06250792},{"time":1.5046476,"frequency":0.04575162},{"time":1.510457,"frequency":0.06319821},{"time":1.5162665,"frequency":0.10837411},{"time":1.5278853,"frequency":0.25884095},{"time":1.5336949,"frequency":0.2919083},{"time":1.5395043,"frequency":0.29033843},{"time":1.5453137,"frequency":0.25698197},{"time":1.5569326,"frequency":0.1477348},{"time":1.5627421,"frequency":0.11135448},{"time":1.7370256,"frequency":0.02883989},{"time":1.742835,"frequency":0.08458232},{"time":1.7486445,"frequency":0.22620021},{"time":1.7544539,"frequency":0.3103976},{"time":1.7602633,"frequency":0.34653723},{"time":1.7660729,"frequency":0.36000705},{"time":1.7776917,"frequency":0.3618599},{"time":1.7893106,"frequency":0.39303276},{"time":1.8009295,"frequency":0.39321685},{"time":1.8125484,"frequency":0.4672},{"time":1.8299768,"frequency":0.5346994},{"time":1.8415956,"frequency":0.5930915},{"time":1.8474051,"frequency":0.5935394},{"time":1.859024,"frequency":0.54139596},{"time":1.8648335,"frequency":0.5868846},{"time":1.8880713,"frequency":0.32777393},{"time":1.8996902,"frequency":0.17103608},{"time":1.9054996,"frequency":0.11203852},{"time":1.911309,"frequency":0.08076515},{"time":1.9171185,"frequency":0.06975386},{"time":1.9345468,"frequency":0.059026554},{"time":1.9810225,"frequency":0.044501353},{"time":2.050736,"frequency":0.035065573},{"time":2.3179705,"frequency":0.020234384},{"time":2.32378,"frequency":0.03894588},{"time":2.324424676317038,"frequency":0.6711438526315793},{"time":2.335399,"frequency":0.5758088},{"time":2.3586366,"frequency":0.31363353},{"time":2.3702557,"frequency":0.16688474},{"time":2.376065,"frequency":0.12872294},{"time":2.3818746,"frequency":0.11259837},{"time":2.4051123,"frequency":0.07374804},{"time":2.4225407,"frequency":0.055073883},{"time":2.451588,"frequency":0.04235986},{"time":2.492254,"frequency":0.03664912},{"time":2.5619674,"frequency":0.030695021},{"time":2.567777,"frequency":0.03341641},{"time":2.5852053,"frequency":0.060967647},{"time":2.6258714,"frequency":0.031616364},{"time":2.788536,"frequency":0.01810618},{"time":2.7943454,"frequency":0.17616539},{"time":2.800155,"frequency":0.5807895},{"time":2.8059645,"frequency":0.5631214},{"time":2.8292022,"frequency":0.29144973},{"time":2.840821,"frequency":0.13480933},{"time":2.8466306,"frequency":0.088903554},{"time":2.8582494,"frequency":0.06060589},{"time":2.8756778,"frequency":0.05160063},{"time":2.9105344,"frequency":0.04273243},{"time":2.980248,"frequency":0.03474127},{"time":3.1429124,"frequency":0.028064484},{"time":3.148722,"frequency":0.037528012},{"time":3.1545315,"frequency":0.10735414},{"time":3.1661503,"frequency":0.43399407000000007},{"time":3.1719596,"frequency":0.5777856700000001},{"time":3.1777692,"frequency":0.5920693000000001},{"time":3.1835787,"frequency":0.5841146700000002},{"time":3.201007,"frequency":0.41223101000000006},{"time":3.2068164,"frequency":0.4191020000000001},{"time":3.212626,"frequency":0.5374575300000001},{"time":3.2242448,"frequency":0.6537892000000001},{"time":3.2358637,"frequency":0.7373799000000001},{"time":3.2416732,"frequency":0.7512089300000001},{"time":3.2474825,"frequency":0.7308576000000001},{"time":3.253292,"frequency":0.6632278000000001},{"time":3.2591014,"frequency":0.40667637000000006},{"time":3.264911,"frequency":0.5525687400000001},{"time":3.2707205,"frequency":0.7461266000000002},{"time":3.2765298,"frequency":0.7027367000000001},{"time":3.2939582,"frequency":0.42800017000000007},{"time":3.305577,"frequency":0.2008978},{"time":3.3113866,"frequency":0.14507687},{"time":3.317196,"frequency":0.118742354},{"time":3.3346243,"frequency":0.08700644},{"time":3.3520527,"frequency":0.06247249},{"time":3.3811,"frequency":0.045401465},{"time":3.3869095,"frequency":0.053475946},{"time":3.3927188,"frequency":0.08059416},{"time":3.4043376,"frequency":0.17779738},{"time":3.4101472,"frequency":0.20159602},{"time":3.4159567,"frequency":0.20311983},{"time":3.421766,"frequency":0.1792851},{"time":3.433385,"frequency":0.102460235},{"time":3.4391944,"frequency":0.07959425},{"time":3.4508133,"frequency":0.07557515},{"time":3.4624321,"frequency":0.059441227},{"time":3.4740512,"frequency":0.055521537},{"time":3.4914794,"frequency":0.035449833},{"time":3.5030985,"frequency":0.03143118},{"time":3.5263362,"frequency":0.06306174},{"time":3.729667,"frequency":0.009195749},{"time":3.7354765,"frequency":0.51184255},{"time":3.7412858,"frequency":0.59190017},{"time":3.7645235,"frequency":0.32863483},{"time":3.7761426,"frequency":0.16988298},{"time":3.781952,"frequency":0.10918839},{"time":3.7877614,"frequency":0.075885266},{"time":3.7935708,"frequency":0.06267348},{"time":3.822618,"frequency":0.04892789},{"time":3.8574748,"frequency":0.0415522},{"time":3.898141,"frequency":0.036518116},{"time":3.9678543,"frequency":0.030663298},{"time":3.9794734,"frequency":0.03908666},{"time":3.9969015,"frequency":0.063024044},{"time":4.0317583,"frequency":0.031926587},{"time":4.1944227,"frequency":0.021147152},{"time":4.2002325,"frequency":0.042318683},{"time":4.20756312307845,"frequency":0.6977604821052634},{"time":4.211851,"frequency":0.7205165421052634},{"time":4.2350893,"frequency":0.31354547},{"time":4.246708,"frequency":0.16678657},{"time":4.252517,"frequency":0.12868789},{"time":4.258327,"frequency":0.11262479},{"time":4.2815647,"frequency":0.07368483},{"time":4.298993,"frequency":0.05507358},{"time":4.32804,"frequency":0.04235878},{"time":4.368706,"frequency":0.03663738},{"time":4.43842,"frequency":0.030661216},{"time":4.444229,"frequency":0.03343236},{"time":4.4616575,"frequency":0.061046287},{"time":4.5023236,"frequency":0.03160584},{"time":4.554609,"frequency":0.029060824},{"time":4.6649885,"frequency":0.01707106},{"time":4.670798,"frequency":0.17768687},{"time":4.676607,"frequency":0.58082044},{"time":4.682417,"frequency":0.5629617},{"time":4.7056546,"frequency":0.291294},{"time":4.717273,"frequency":0.13469104},{"time":4.723083,"frequency":0.08885803},{"time":4.7347016,"frequency":0.06061278},{"time":4.75213,"frequency":0.05160357},{"time":4.786987,"frequency":0.04270599},{"time":4.8567004,"frequency":0.034731004},{"time":4.908985,"frequency":0.030908993},{"time":4.9322233,"frequency":0.06241905},{"time":4.9380326,"frequency":0.062046085},{"time":4.9670796,"frequency":0.034115557},{"time":5.0135555,"frequency":0.027494108},{"time":5.0658402,"frequency":0.023396846},{"time":5.0890784,"frequency":0.029324424},{"time":5.100697,"frequency":0.0652814},{"time":5.1065063,"frequency":0.062325366},{"time":5.1181254,"frequency":0.023882331},{"time":5.135554,"frequency":0.021216592},{"time":5.141363,"frequency":0.3969057},{"time":5.147173,"frequency":0.7408126763157897},{"time":5.152982,"frequency":0.6625842000000001},{"time":5.1704106,"frequency":0.34786198},{"time":5.1820292,"frequency":0.20078434},{"time":5.187839,"frequency":0.1450191},{"time":5.1936483,"frequency":0.11873879},{"time":5.2110767,"frequency":0.08705516},{"time":5.228505,"frequency":0.06248427},{"time":5.257552,"frequency":0.045760497},{"time":5.263362,"frequency":0.063304774},{"time":5.269171,"frequency":0.10862601},{"time":5.28079,"frequency":0.25907594},{"time":5.2865996,"frequency":0.29196987},{"time":5.292409,"frequency":0.2902551},{"time":5.2982183,"frequency":0.25681248},{"time":5.3098373,"frequency":0.14759386},{"time":5.3156466,"frequency":0.11123258},{"time":5.3272657,"frequency":0.0821026},{"time":5.3505034,"frequency":0.06488952},{"time":5.3621225,"frequency":0.04348285},{"time":5.48993,"frequency":0.02885217},{"time":5.49574,"frequency":0.085089155},{"time":5.5015492,"frequency":0.22667296},{"time":5.5073586,"frequency":0.31061208},{"time":5.513168,"frequency":0.34664735},{"time":5.5189776,"frequency":0.3600376},{"time":5.5305963,"frequency":0.36187768},{"time":5.5422153,"frequency":0.39303875},{"time":5.5538344,"frequency":0.39329368},{"time":5.565453,"frequency":0.46732017},{"time":5.5828815,"frequency":0.534797},{"time":5.5945005,"frequency":0.59315133},{"time":5.60031,"frequency":0.5935015},{"time":5.611929,"frequency":0.54139394},{"time":5.6177382,"frequency":0.5868578},{"time":5.640976,"frequency":0.32750076},{"time":5.652595,"frequency":0.17073198},{"time":5.6584044,"frequency":0.11186244},{"time":5.6642137,"frequency":0.080706015},{"time":5.6700234,"frequency":0.0697275},{"time":5.6874514,"frequency":0.059012454},{"time":5.7339272,"frequency":0.044490024},{"time":5.8036404,"frequency":0.03506397},{"time":5.844307,"frequency":0.031618062},{"time":5.8559256,"frequency":0.039187152},{"time":5.873354,"frequency":0.06311463},{"time":5.9082108,"frequency":0.03194528},{"time":6.070875,"frequency":0.020229742},{"time":6.076685,"frequency":0.03993169},{"time":6.0824943,"frequency":0.5532209},{"time":6.0883036,"frequency":0.5755776},{"time":6.1115413,"frequency":0.31335017},{"time":6.1231604,"frequency":0.16666974},{"time":6.1289697,"frequency":0.12862168},{"time":6.1347795,"frequency":0.11255976},{"time":6.158017,"frequency":0.07371337},{"time":6.1754456,"frequency":0.0550542},{"time":6.2044926,"frequency":0.042353433},{"time":6.23354,"frequency":0.037847452},{"time":6.425252,"frequency":0.027334996},{"time":6.4310613,"frequency":0.03146569},{"time":6.4368706,"frequency":0.09244462},{"time":6.4484897,"frequency":0.40317383},{"time":6.454299,"frequency":0.53170466},{"time":6.4601083,"frequency":0.57700056},{"time":6.465918,"frequency":0.57710636},{"time":6.4717274,"frequency":0.5431213},{"time":6.4833465,"frequency":0.44346312},{"time":6.494965,"frequency":0.40339085},{"time":6.506584,"frequency":0.42875594},{"time":6.5123935,"frequency":0.38783965},{"time":6.5240126,"frequency":0.02187464},{"time":6.541441,"frequency":0.018120637},{"time":6.5472503,"frequency":0.18038154},{"time":6.5530596,"frequency":0.5810525},{"time":6.558869,"frequency":0.5628602},{"time":6.582107,"frequency":0.29114938},{"time":6.5937257,"frequency":0.13457435},{"time":6.5995355,"frequency":0.08877457},{"time":6.611154,"frequency":0.06059341},{"time":6.6285825,"frequency":0.051593836},{"time":6.6634393,"frequency":0.042763904},{"time":6.675058,"frequency":0.071363054},{"time":6.686677,"frequency":0.1664275},{"time":6.6924863,"frequency":0.19745241},{"time":6.698296,"frequency":0.20607889},{"time":6.7041054,"frequency":0.18666317},{"time":6.7157245,"frequency":0.10928046},{"time":6.721534,"frequency":0.08352006},{"time":6.738962,"frequency":0.0719466},{"time":6.750581,"frequency":0.056045722},{"time":6.9016266,"frequency":0.029478721},{"time":6.907436,"frequency":0.061556626},{"time":6.9132457,"frequency":0.20230792},{"time":6.919055,"frequency":0.37068802},{"time":6.9248643,"frequency":0.46984857},{"time":6.930674,"frequency":0.5046661},{"time":6.9364834,"frequency":0.50514567},{"time":6.9422927,"frequency":0.48141357},{"time":6.953912,"frequency":0.3992696},{"time":6.9655304,"frequency":0.36002678},{"time":6.97134,"frequency":0.35596618},{"time":6.9771495,"frequency":0.41989133},{"time":6.9887686,"frequency":0.48852387},{"time":7.000387,"frequency":0.51333004},{"time":7.006197,"frequency":0.4947887},{"time":7.0120063,"frequency":0.4029883},{"time":7.0178156,"frequency":0.39637354},{"time":7.023625,"frequency":0.5862286},{"time":7.0294347,"frequency":0.5424643},{"time":7.046863,"frequency":0.34774178},{"time":7.0584817,"frequency":0.20060165},{"time":7.0642915,"frequency":0.14494169},{"time":7.070101,"frequency":0.11868645},{"time":7.087529,"frequency":0.08696552},{"time":7.1049576,"frequency":0.06244952},{"time":7.1340046,"frequency":0.045782063},{"time":7.139814,"frequency":0.072714746},{"time":7.151433,"frequency":0.18430343},{"time":7.1572423,"frequency":0.21572685},{"time":7.163052,"frequency":0.21935858},{"time":7.1778688149420935,"frequency":0.17040516141823048},{"time":7.192099,"frequency":0.123389915},{"time":7.203718,"frequency":0.102107726},{"time":7.226956,"frequency":0.08874978},{"time":7.2443843,"frequency":0.068161145},{"time":7.256003,"frequency":0.07595999},{"time":7.267622,"frequency":0.20831592},{"time":7.2734313,"frequency":0.2502595},{"time":7.279241,"frequency":0.2672905},{"time":7.2850504,"frequency":0.26264918},{"time":7.3140974,"frequency":0.1620292},{"time":7.319907,"frequency":0.15358491},{"time":7.343145,"frequency":0.14404117},{"time":7.3605733,"frequency":0.1122112},{"time":7.372192,"frequency":0.13124192},{"time":7.383811,"frequency":0.30409527},{"time":7.3896203,"frequency":0.34399375},{"time":7.39543,"frequency":0.35966843},{"time":7.4070487,"frequency":0.36253121},{"time":7.418668,"frequency":0.39506432},{"time":7.4302864,"frequency":0.39424342},{"time":7.4419055,"frequency":0.46920124},{"time":7.4535246,"frequency":0.5059657},{"time":7.470953,"frequency":0.59005743},{"time":7.4767623,"frequency":0.59442776},{"time":7.4825716,"frequency":0.57483023},{"time":7.4941907,"frequency":0.5147115},{"time":7.5,"frequency":0.50484395}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.haptic.meta new file mode 100644 index 0000000..e4e10ab --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8a936e0f4bd6142b69aad2e28fb97a95 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.wav new file mode 100644 index 0000000..648f8ef Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.wav.meta new file mode 100644 index 0000000..c048a5f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 445cb5b233bd94d31843ed4fa5f3658a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.haptic new file mode 100644 index 0000000..f52c5fd --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Drums 2.wav","project":"Drums 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000049407878},{"time":0.003628118,"amplitude":0.51809555,"emphasis":{"amplitude":0.6476195,"frequency":0.8421698}},{"time":0.015419501,"amplitude":0.7870432},{"time":0.037641723,"amplitude":0.50368494},{"time":0.14421768,"amplitude":0.26736933},{"time":0.18775511,"amplitude":0.08504179},{"time":0.2494331,"amplitude":0.0075579034},{"time":0.27256235,"amplitude":0.07417025},{"time":0.28208616,"amplitude":0.39777488,"emphasis":{"amplitude":0.4972186,"frequency":0.37526768}},{"time":0.30975511351437524,"amplitude":0},{"time":0.5219955,"amplitude":0.0015614289},{"time":0.5451247,"amplitude":0.2057188},{"time":0.54557824,"amplitude":0.6894867,"emphasis":{"amplitude":0.8618583,"frequency":0.98050946}},{"time":0.56780046,"amplitude":0.77804106},{"time":0.60952383,"amplitude":0.29378125},{"time":0.6517007,"amplitude":0.088404514},{"time":0.6929705,"amplitude":0.21466132},{"time":0.69342405,"amplitude":0.5457956,"emphasis":{"amplitude":0.68224454,"frequency":0.9726502}},{"time":0.7160998,"amplitude":0.7719793},{"time":0.75827664,"amplitude":0.2860441},{"time":0.80226755,"amplitude":0.10946331},{"time":0.81814057,"amplitude":0.22522211},{"time":0.82630384,"amplitude":0.73773617,"emphasis":{"amplitude":0.92217016,"frequency":0.6711595}},{"time":0.8656759955779677,"amplitude":0.2684210526315789},{"time":0.9528345,"amplitude":0.16246394},{"time":1.0553288,"amplitude":0},{"time":1.0907029,"amplitude":0.32500973},{"time":1.09161,"amplitude":0.70216906,"emphasis":{"amplitude":0.8777113,"frequency":0.95372695}},{"time":1.1287981,"amplitude":0.49726868},{"time":1.2358277,"amplitude":0.26686254},{"time":1.2884353,"amplitude":0.060071927},{"time":1.3414966,"amplitude":0.007695153},{"time":1.3637189,"amplitude":0.07409158},{"time":1.3700681,"amplitude":0.38958097,"emphasis":{"amplitude":0.4869762,"frequency":0.56963056}},{"time":1.3883476582423853,"amplitude":0},{"time":1.6362761,"amplitude":0},{"time":1.6362811,"amplitude":0.22689411},{"time":1.6367347,"amplitude":0.7096078,"emphasis":{"amplitude":0.88700974,"frequency":0.9806269}},{"time":1.6743764,"amplitude":0.49998662},{"time":1.7814059,"amplitude":0.26878384},{"time":1.814966,"amplitude":0.11979835},{"time":1.8866214,"amplitude":0.0077049104},{"time":1.9097506,"amplitude":0.21824665},{"time":1.9111111,"amplitude":0.738361,"emphasis":{"amplitude":0.9229512,"frequency":0.94556373}},{"time":1.9192743,"amplitude":0.7874671,"emphasis":{"amplitude":0.98433393,"frequency":0.6511701}},{"time":1.9638024044220324,"amplitude":0.10886812105263169},{"time":2.1683376044220326,"amplitude":0},{"time":2.1818595,"amplitude":0.32268417},{"time":2.1827664,"amplitude":0.70691067,"emphasis":{"amplitude":0.8836383,"frequency":0.9544076}},{"time":2.2199547,"amplitude":0.49731028},{"time":2.2268387619158396,"amplitude":0.39918982321007945},{"time":2.382599191155935,"amplitude":0},{"time":2.4612196,"amplitude":0},{"time":2.4612246,"amplitude":0.35782522,"emphasis":{"amplitude":0.8288604473684209,"frequency":0.5571714}},{"time":2.498817685534318,"amplitude":0.0412348605263158},{"time":2.5759637,"amplitude":0.00650239},{"time":2.7043083,"amplitude":0.0013799315},{"time":2.7274377,"amplitude":0.24238011},{"time":2.7283447,"amplitude":0.69655627,"emphasis":{"amplitude":0.8706953,"frequency":0.9592948}},{"time":2.7428572,"amplitude":0.90337944},{"time":2.7927437,"amplitude":0.2761597},{"time":2.8413887570228784,"amplitude":0},{"time":2.9759638,"amplitude":0.000555684},{"time":2.9995465,"amplitude":0.2101118},{"time":3.000907,"amplitude":0.7091775,"emphasis":{"amplitude":0.88647187,"frequency":0.943283}},{"time":3.0530612,"amplitude":0.5963514},{"time":3.1274383342794443,"amplitude":0},{"time":3.2367346,"amplitude":0},{"time":3.2716553,"amplitude":0.32119054},{"time":3.2725623,"amplitude":0.71110433,"emphasis":{"amplitude":0.8888804,"frequency":0.9549485}},{"time":3.3097506,"amplitude":0.4969147},{"time":3.41678,"amplitude":0.2669312},{"time":3.486168,"amplitude":0},{"time":3.5418665955779676,"amplitude":0},{"time":3.5546486,"amplitude":0.39834294,"emphasis":{"amplitude":0.49792868,"frequency":0.37580147}},{"time":3.5977325,"amplitude":0.09628938},{"time":3.6680272,"amplitude":0.006066409},{"time":3.7941043,"amplitude":0.0015078151},{"time":3.8172336,"amplitude":0.23488353},{"time":3.8181405,"amplitude":0.74372417,"emphasis":{"amplitude":0.9296552,"frequency":0.96318793}},{"time":3.879365,"amplitude":0.345694},{"time":3.9623582,"amplitude":0.2540474},{"time":4.0058956,"amplitude":0.08135641},{"time":4.0675735,"amplitude":0.0072261533},{"time":4.090703,"amplitude":0.20827655},{"time":4.092517,"amplitude":0.75644773,"emphasis":{"amplitude":0.9455596,"frequency":0.9306307}},{"time":4.142857,"amplitude":0.5959953},{"time":4.326984,"amplitude":0.17605099},{"time":4.3628116,"amplitude":0.32012308},{"time":4.363719,"amplitude":0.7117625,"emphasis":{"amplitude":0.8897031,"frequency":0.955098}},{"time":4.4013605,"amplitude":0.4932271},{"time":4.5079365,"amplitude":0},{"time":4.551474,"amplitude":0.08502059},{"time":4.6126986,"amplitude":0.0076857707},{"time":4.6358275,"amplitude":0.19034173},{"time":4.636281,"amplitude":0.6744909,"emphasis":{"amplitude":0.84311366,"frequency":0.9804089}},{"time":4.6630387,"amplitude":0.77165246},{"time":4.7011337,"amplitude":0.28376147},{"time":4.7800455,"amplitude":0.017476186},{"time":4.885714,"amplitude":0.0013155043},{"time":4.909297,"amplitude":0.21783277},{"time":4.9165535,"amplitude":0.7747712,"emphasis":{"amplitude":0.968464,"frequency":0.7282221}},{"time":4.9886622,"amplitude":0.22256404},{"time":5.0675735,"amplitude":0.010950509},{"time":5.1582766,"amplitude":0.00055894227},{"time":5.1818595,"amplitude":0.21208245},{"time":5.1836734,"amplitude":0.75811833,"emphasis":{"amplitude":0.9476479,"frequency":0.9304688}},{"time":5.232653,"amplitude":0.48069966},{"time":5.235374,"amplitude":0.47995162,"emphasis":{"amplitude":0.5999395,"frequency":0.36699566}},{"time":5.316553,"amplitude":0.3345338},{"time":5.347846,"amplitude":0.3560059},{"time":5.43356,"amplitude":0.20395912},{"time":5.454422,"amplitude":0.37854016},{"time":5.455329,"amplitude":0.70546764,"emphasis":{"amplitude":0.8818345,"frequency":0.9491854}},{"time":5.4734693,"amplitude":0.8549601},{"time":5.504308,"amplitude":0.3474685},{"time":5.5197277,"amplitude":0.361375},{"time":5.538322,"amplitude":0.6667031},{"time":5.5546484,"amplitude":0.44541717},{"time":5.5977325,"amplitude":0.50789154},{"time":5.6040816,"amplitude":0.6562813,"emphasis":{"amplitude":0.82035166,"frequency":0.43445605}},{"time":5.629025,"amplitude":0.4566725},{"time":5.6829934,"amplitude":0.069026485},{"time":5.727891,"amplitude":0.062907755},{"time":5.7369614,"amplitude":0.29443675,"emphasis":{"amplitude":0.36804596,"frequency":0.18453874}},{"time":5.7732425,"amplitude":0.0847599},{"time":5.8136053,"amplitude":0.016260058},{"time":5.9768705,"amplitude":0.0014540132},{"time":6,"amplitude":0.23453248},{"time":6.0004535,"amplitude":0.7089297,"emphasis":{"amplitude":0.88616216,"frequency":0.9803746}},{"time":6.0163264,"amplitude":0.8751547},{"time":6.038549,"amplitude":0.51028466},{"time":6.0621314,"amplitude":0.3462271},{"time":6.1424036,"amplitude":0.2476913},{"time":6.152381,"amplitude":0.5104968},{"time":6.1786847,"amplitude":0.22422448},{"time":6.20907,"amplitude":0.06385764},{"time":6.25034,"amplitude":0.012126989},{"time":6.2734694,"amplitude":0.21260309},{"time":6.27483,"amplitude":0.68468946,"emphasis":{"amplitude":0.85586184,"frequency":0.94036525}},{"time":6.298413,"amplitude":0.78084075},{"time":6.324263,"amplitude":0.47930768},{"time":6.354195,"amplitude":0.5509828},{"time":6.4077096,"amplitude":0.33386308},{"time":6.4947844,"amplitude":0.2660971},{"time":6.5229025,"amplitude":0.08977172},{"time":6.545578,"amplitude":0.23962994},{"time":6.5464854,"amplitude":0.70960927,"emphasis":{"amplitude":0.8870116,"frequency":0.9604935}},{"time":6.584127,"amplitude":0.5042269},{"time":6.690703,"amplitude":0.2666791},{"time":6.724263,"amplitude":0.118641876},{"time":6.794558,"amplitude":0.0078082145},{"time":6.817687,"amplitude":0.071276404},{"time":6.8235826,"amplitude":0.3630503,"emphasis":{"amplitude":0.45381287,"frequency":0.56868154}},{"time":6.8630385,"amplitude":0.12160152},{"time":6.8929706,"amplitude":0.034392096},{"time":6.959637,"amplitude":0.045229223},{"time":6.978685,"amplitude":0.29154038},{"time":6.985034,"amplitude":0.59685814,"emphasis":{"amplitude":0.74607265,"frequency":0.60855114}},{"time":7.0154195,"amplitude":0.2052},{"time":7.0666666,"amplitude":0.02298662},{"time":7.089796,"amplitude":0.25511655},{"time":7.0902495,"amplitude":0.6833615,"emphasis":{"amplitude":0.8542018,"frequency":0.9786534}},{"time":7.1124716,"amplitude":0.8656609},{"time":7.1455784,"amplitude":0.43988812},{"time":7.1786847,"amplitude":0.32045737},{"time":7.181406,"amplitude":0.37991777,"emphasis":{"amplitude":0.47489724,"frequency":0.5080513}},{"time":7.2163267,"amplitude":0.26047054},{"time":7.2349205,"amplitude":0.2941073},{"time":7.2530613,"amplitude":0.73179984},{"time":7.2807255,"amplitude":0.46612832},{"time":7.3641725,"amplitude":0.48323023},{"time":7.369161,"amplitude":0.6012603,"emphasis":{"amplitude":0.75157535,"frequency":0.48150238}},{"time":7.4902496,"amplitude":0.28089884},{"time":7.5061226,"amplitude":0.29570773},{"time":7.514739,"amplitude":0.5562266,"emphasis":{"amplitude":0.69528323,"frequency":0.40078557}},{"time":7.5324264,"amplitude":0.4001322},{"time":7.5678005,"amplitude":0.20701252},{"time":7.6104307,"amplitude":0.16262521},{"time":7.635374,"amplitude":0.3008869},{"time":7.636281,"amplitude":0.7113613,"emphasis":{"amplitude":0.88920164,"frequency":0.9565276}},{"time":7.6734695,"amplitude":0.49519312},{"time":7.6975055,"amplitude":0.361322},{"time":7.778231,"amplitude":0.30550507},{"time":7.779592,"amplitude":0.6726913,"emphasis":{"amplitude":0.8408641,"frequency":0.9283507}},{"time":7.7891154,"amplitude":0.6579409,"emphasis":{"amplitude":0.8224262,"frequency":0.41452616}},{"time":7.8204083,"amplitude":0.24318857},{"time":7.8444443,"amplitude":0.087163076},{"time":7.9088435,"amplitude":0.07416944},{"time":7.9183674,"amplitude":0.36800787,"emphasis":{"amplitude":0.4600098,"frequency":0.31718463}},{"time":7.9732428,"amplitude":0.057770357},{"time":8.034921,"amplitude":0.0055093234},{"time":8.157824,"amplitude":0.0014984007},{"time":8.180952,"amplitude":0.23425794},{"time":8.181859,"amplitude":0.73209476,"emphasis":{"amplitude":0.9151185,"frequency":0.96243584}},{"time":8.243084,"amplitude":0.3461329},{"time":8.2644,"amplitude":0.37061554},{"time":8.322903,"amplitude":0.22969855},{"time":8.352381,"amplitude":0.50427353},{"time":8.369615,"amplitude":0.24567595},{"time":8.431293,"amplitude":0.018422712},{"time":8.454422,"amplitude":0.21218754},{"time":8.456236,"amplitude":0.7240868,"emphasis":{"amplitude":0.9051085,"frequency":0.92619145}},{"time":8.505216,"amplitude":0.4767715},{"time":8.5079365,"amplitude":0.47990718,"emphasis":{"amplitude":0.599884,"frequency":0.38629436}},{"time":8.589116,"amplitude":0.33385342},{"time":8.675737,"amplitude":0.2653508},{"time":8.703855,"amplitude":0.089547075},{"time":8.726984,"amplitude":0.24198039},{"time":8.727891,"amplitude":0.7066141,"emphasis":{"amplitude":0.8832676,"frequency":0.9601181}},{"time":8.764626,"amplitude":0.49222285},{"time":8.880726,"amplitude":0.23325963},{"time":8.936961,"amplitude":0.036405124},{"time":8.976418,"amplitude":0.0077309543},{"time":8.999546,"amplitude":0.18965892},{"time":9.000454,"amplitude":0.66261965,"emphasis":{"amplitude":0.8282746,"frequency":0.9599513}},{"time":9.026757,"amplitude":0.7809115},{"time":9.064853,"amplitude":0.28541225},{"time":9.111111,"amplitude":0.070613004},{"time":9.148299,"amplitude":0.014026079},{"time":9.2498865,"amplitude":0.0014017714},{"time":9.273016,"amplitude":0.20696175},{"time":9.275284,"amplitude":0.71487168,"emphasis":{"amplitude":0.8935896,"frequency":0.5}},{"time":9.297505,"amplitude":0.860219},{"time":9.342857,"amplitude":0.29730958},{"time":9.3859415,"amplitude":0.083785854},{"time":9.421769,"amplitude":0.01679053},{"time":9.521996,"amplitude":0.00056988833},{"time":9.545578,"amplitude":0.21154064},{"time":9.547392,"amplitude":0.7665852000000001,"emphasis":{"amplitude":0.9582315,"frequency":0.5}},{"time":9.589569,"amplitude":0.5504728},{"time":9.624944,"amplitude":0.5444663},{"time":9.680272,"amplitude":0.334791},{"time":9.711565,"amplitude":0.35541785},{"time":9.804535,"amplitude":0.16532679},{"time":9.804943,"amplitude":0.16532679}],"frequency":[{"time":0,"frequency":0.44253927},{"time":0.023220707,"frequency":0.17842011},{"time":0.05224659,"frequency":0.07637244},{"time":0.25542778,"frequency":0.05756055},{"time":0.27864847,"frequency":0.2147187},{"time":0.30767435,"frequency":0.053034075},{"time":0.5282711,"frequency":0.72098553},{"time":0.55729693,"frequency":0.30124465},{"time":0.5979332,"frequency":0.104011066},{"time":0.66179013,"frequency":0.08747087},{"time":0.68501085,"frequency":0.40165552},{"time":0.7430626,"frequency":0.10677113},{"time":0.7953092,"frequency":0.08821985},{"time":0.8069196,"frequency":0.4997695},{"time":0.8359454,"frequency":0.21525422},{"time":0.9694645,"frequency":0.04569535},{"time":1.0681525,"frequency":0.072630234},{"time":1.0855681,"frequency":0.4042147},{"time":1.1436198,"frequency":0.07621367},{"time":1.3468009,"frequency":0.060384057},{"time":1.3700217,"frequency":0.23706305},{"time":1.3874372,"frequency":0.1210798},{"time":1.4512942,"frequency":0.0021517568},{"time":1.6196443,"frequency":0.6207681},{"time":1.6602805,"frequency":0.1787681},{"time":1.6893064,"frequency":0.07680054},{"time":1.8808773,"frequency":0.06430793},{"time":1.8924875,"frequency":0.5775045},{"time":1.9273187,"frequency":0.22238706},{"time":1.9795653,"frequency":0.115910195},{"time":2.0608377,"frequency":0.04622865},{"time":2.1595256,"frequency":0.0714038},{"time":2.1769412,"frequency":0.40597534},{"time":2.234993,"frequency":0.07664113},{"time":2.4381742,"frequency":0.060777288},{"time":2.4613948,"frequency":0.23687209},{"time":2.4788103,"frequency":0.10634147},{"time":2.7110174,"frequency":0.8471395},{"time":2.7516537,"frequency":0.2509417},{"time":2.7806797,"frequency":0.10845914},{"time":2.8677573,"frequency":0.07411731},{"time":2.9780557,"frequency":0.60620904},{"time":3.0186918,"frequency":0.21034348},{"time":3.123185,"frequency":0.065808415},{"time":3.2508988,"frequency":0.070981674},{"time":3.2683144,"frequency":0.41939116},{"time":3.3263662,"frequency":0.07432415},{"time":3.5295475,"frequency":0.06037198},{"time":3.552768,"frequency":0.2217116},{"time":3.581794,"frequency":0.059788123},{"time":3.7965856,"frequency":0.70294577},{"time":3.8430269,"frequency":0.22178788},{"time":3.8894684,"frequency":0.067831144},{"time":4.0636234,"frequency":0.06020629},{"time":4.075234,"frequency":0.5652227},{"time":4.110065,"frequency":0.2093859},{"time":4.214558,"frequency":0.06459237},{"time":4.3422723,"frequency":0.07137451},{"time":4.359688,"frequency":0.41931176},{"time":4.4177394,"frequency":0.074056946},{"time":4.60931,"frequency":0.06420505},{"time":4.6209207,"frequency":0.6901673},{"time":4.6557517,"frequency":0.23003186},{"time":4.6847777,"frequency":0.10953518},{"time":4.760245,"frequency":0.076392986},{"time":4.7834654,"frequency":0.0007330982},{"time":4.8879585,"frequency":0.6640593},{"time":4.905374,"frequency":0.725186},{"time":4.9344,"frequency":0.25909412},{"time":4.963426,"frequency":0.11184277},{"time":5.038893,"frequency":0.094619334},{"time":5.07953,"frequency":0.0005917398},{"time":5.160802,"frequency":0.6203247},{"time":5.2014384,"frequency":0.2133481},{"time":5.3059316,"frequency":0.066018485},{"time":5.4336452,"frequency":0.034657154},{"time":5.451061,"frequency":0.30917802},{"time":5.474282,"frequency":0.1635407},{"time":5.5265284,"frequency":0.069513544},{"time":5.578775,"frequency":0.07822984},{"time":5.6078005,"frequency":0.31849328},{"time":5.625216,"frequency":0.13497382},{"time":5.694878,"frequency":0.13250454},{"time":5.76454,"frequency":0.018817255},{"time":5.979332,"frequency":0.6998779},{"time":6.0315785,"frequency":0.16991928},{"time":6.0722146,"frequency":0.06798763},{"time":6.24637,"frequency":0.061361834},{"time":6.2579803,"frequency":0.56880593},{"time":6.2928114,"frequency":0.21243823},{"time":6.3973045,"frequency":0.06547447},{"time":6.519213,"frequency":0.026275868},{"time":6.5308237,"frequency":0.57709265},{"time":6.57146,"frequency":0.16510305},{"time":6.600486,"frequency":0.074212775},{"time":6.803667,"frequency":0.058251236},{"time":6.8268876,"frequency":0.2681908},{"time":6.844303,"frequency":0.08450605},{"time":6.960407,"frequency":0.015428163},{"time":6.9836273,"frequency":0.47970316},{"time":7.0126534,"frequency":0.008563662},{"time":7.0649,"frequency":0.03698585},{"time":7.070705,"frequency":0.81712943},{"time":7.0823154,"frequency":0.47469246},{"time":7.1229515,"frequency":0.108563356},{"time":7.163588,"frequency":0.023781804},{"time":7.3435483,"frequency":0.020133082},{"time":7.360964,"frequency":0.21294324},{"time":7.430626,"frequency":0.06875327},{"time":7.4828725,"frequency":0.057145014},{"time":7.5060935,"frequency":0.37769783},{"time":7.5409245,"frequency":0.097712316},{"time":7.6163917,"frequency":0.054784875},{"time":7.628002,"frequency":0.4105222},{"time":7.6918592,"frequency":0.073357485},{"time":7.755716,"frequency":0.052546818},{"time":7.7731314,"frequency":0.4436213},{"time":7.790547,"frequency":0.49741825},{"time":7.8369884,"frequency":0.20444377},{"time":7.8776245,"frequency":0.27057466},{"time":7.9472866,"frequency":0.06623023},{"time":7.993728,"frequency":0.023217155},{"time":8.156273,"frequency":0.014643582},{"time":8.162078,"frequency":0.65431345},{"time":8.225935,"frequency":0.10660048},{"time":8.254961,"frequency":0.066092715},{"time":8.429116,"frequency":0.057306405},{"time":8.434921,"frequency":0.5477882},{"time":8.469752,"frequency":0.24275057},{"time":8.498778,"frequency":0.15108606},{"time":8.6032715,"frequency":0.04752222},{"time":8.70196,"frequency":0.028956136},{"time":8.71357,"frequency":0.586797},{"time":8.748402,"frequency":0.2072338},{"time":8.783233,"frequency":0.073187284},{"time":8.974803,"frequency":0.06562012},{"time":8.986413,"frequency":0.674276},{"time":9.021244,"frequency":0.21901561},{"time":9.05027,"frequency":0.105873175},{"time":9.247646,"frequency":0.0064649736},{"time":9.253451,"frequency":0.7405637},{"time":9.265062,"frequency":0.76487714},{"time":9.294087,"frequency":0.30498266},{"time":9.328918,"frequency":0.10827692},{"time":9.4043865,"frequency":0.092345215},{"time":9.439218,"frequency":0.0009600248},{"time":9.52049,"frequency":0.004831087},{"time":9.526295,"frequency":0.6174967},{"time":9.566931,"frequency":0.20583837},{"time":9.694645,"frequency":0.047223043},{"time":9.787528,"frequency":0.067343414},{"time":9.804943,"frequency":0.17200403}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.haptic.meta new file mode 100644 index 0000000..b2e301d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a7979fc6240354abb890260bd49f2545 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.wav new file mode 100644 index 0000000..3a11f46 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.wav.meta new file mode 100644 index 0000000..b2866c9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Drums2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 92a9cf7427add40c682f2a17a7b9d492 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.haptic new file mode 100644 index 0000000..eaee278 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Kick 1.wav","project":"Kick 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.6560383,"emphasis":{"amplitude":0.82004786,"frequency":0.9}},{"time":0.0009447591974722502,"amplitude":0.807888858892444},{"time":0.0010204081,"amplitude":0.82004786},{"time":0.003015873,"amplitude":0.8605048},{"time":0.00600907,"amplitude":0.82820565},{"time":0.008004535,"amplitude":0.84968615},{"time":0.01600907,"amplitude":0.6404353},{"time":0.018004535,"amplitude":0.61654854},{"time":0.019002268,"amplitude":0.67440426},{"time":0.023015874,"amplitude":0.6417558},{"time":0.024013605,"amplitude":0.7021762},{"time":0.033015873,"amplitude":0.54011524},{"time":0.034013607,"amplitude":0.7076894},{"time":0.03600907,"amplitude":0.72344553},{"time":0.0470068,"amplitude":0.48334607},{"time":0.054013606,"amplitude":0.39791602},{"time":0.059002265,"amplitude":0.3752865},{"time":0.06401361,"amplitude":0.3159088},{"time":0.06600907,"amplitude":0.42928645},{"time":0.06900226,"amplitude":0.42693168},{"time":0.08600907,"amplitude":0.24147461},{"time":0.099002264,"amplitude":0.1716319},{"time":0.10501134,"amplitude":0.16040978},{"time":0.11102041,"amplitude":0.12779656},{"time":0.1440136,"amplitude":0.052887175},{"time":0.1470068,"amplitude":0.05674842},{"time":0.1670068,"amplitude":0.031249264},{"time":0.16800453,"amplitude":0.043685615},{"time":0.17900227,"amplitude":0.03461619},{"time":0.18102041,"amplitude":0.04493403},{"time":0.2077249435862069,"amplitude":0},{"time":0.4142950644503311,"amplitude":0},{"time":0.41477958000000004,"amplitude":0},{"time":0.42501132,"amplitude":0}],"frequency":[{"time":0,"frequency":0.2842273},{"time":0.017414967,"frequency":0.12385314},{"time":0.040634923,"frequency":0.14555708},{"time":0.04643991,"frequency":0.09822892},{"time":0.08417233,"frequency":0.10149474},{"time":0.09287982,"frequency":0.028768782},{"time":0.11029478,"frequency":0.08522369},{"time":0.12770975,"frequency":0.066362984},{"time":0.13351475,"frequency":0.129194},{"time":0.14222223,"frequency":0.07874129},{"time":0.1596372,"frequency":0.12784311},{"time":0.16544218,"frequency":0.06203789},{"time":0.17705216,"frequency":0.119108915},{"time":0.18866213,"frequency":0.0919887},{"time":0.2060771,"frequency":0.10192408},{"time":0.21188208,"frequency":0.14596003},{"time":0.22058958,"frequency":0.09764295},{"time":0.23510204,"frequency":0.12298111},{"time":0.26122448,"frequency":0.07488686},{"time":0.26702946,"frequency":0.1382333},{"time":0.27573696,"frequency":0.07141399},{"time":0.3018594,"frequency":0.07007417},{"time":0.3076644,"frequency":0.13592692},{"time":0.31927437,"frequency":0.06804377},{"time":0.33668935,"frequency":0.09611314},{"time":0.34249434,"frequency":0.06491112},{"time":0.3628118,"frequency":0.09705614},{"time":0.38603175,"frequency":0.058528677},{"time":0.39473924,"frequency":0.102253295},{"time":0.40054423,"frequency":0.050445896}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.haptic.meta new file mode 100644 index 0000000..7938733 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c967e91fd14e9473e914fb827a8febc7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.wav new file mode 100644 index 0000000..636acb9 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.wav.meta new file mode 100644 index 0000000..048c3ca --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: c8b1946ab32d54d3f985fb8cb5873b5a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.haptic new file mode 100644 index 0000000..13b71d5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Kick 2.wav","project":"Kick 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.5930295,"emphasis":{"amplitude":0.7412869,"frequency":0.1}},{"time":0.0010204081,"amplitude":0.7412869},{"time":0.00600907,"amplitude":0.7383868},{"time":0.014013605,"amplitude":0.60819274},{"time":0.021020407,"amplitude":0.5925167},{"time":0.028004535,"amplitude":0.49487248},{"time":0.03201814,"amplitude":0.51641536},{"time":0.038004536,"amplitude":0.42980522},{"time":0.045011338,"amplitude":0.37841338},{"time":0.0470068,"amplitude":0.49985138},{"time":0.05600907,"amplitude":0.4333858},{"time":0.07102041,"amplitude":0.2802524},{"time":0.08201814,"amplitude":0.22226822},{"time":0.08501133,"amplitude":0.27194977},{"time":0.091020405,"amplitude":0.24694867},{"time":0.09301587,"amplitude":0.30080783},{"time":0.1010204,"amplitude":0.26154274},{"time":0.10301587,"amplitude":0.3083188},{"time":0.11002267,"amplitude":0.27354622},{"time":0.11201814,"amplitude":0.31128824},{"time":0.11800453,"amplitude":0.27484006},{"time":0.1410204,"amplitude":0.25105435},{"time":0.15102041,"amplitude":0.24101648},{"time":0.1710204,"amplitude":0.17048648},{"time":0.18002267,"amplitude":0.1608092},{"time":0.1840136,"amplitude":0.1922287},{"time":0.20002267,"amplitude":0.15404557},{"time":0.20501134,"amplitude":0.18459006},{"time":0.22201814,"amplitude":0.1529434},{"time":0.2240136,"amplitude":0.17932492},{"time":0.2410204,"amplitude":0.13897003},{"time":0.2710204,"amplitude":0.08508034},{"time":0.3010204,"amplitude":0.052014135},{"time":0.32966771879310347,"amplitude":0},{"time":0.6043084000000001,"amplitude":0},{"time":0.6050113500000001,"amplitude":0},{"time":0.6050113500000001,"amplitude":0}],"frequency":[{"time":0,"frequency":0.27430898},{"time":0.011609977,"frequency":0.13607642},{"time":0.037732422,"frequency":0.07913466},{"time":0.052244894,"frequency":0.09915574},{"time":0.066757366,"frequency":0.060913194},{"time":0.10739229,"frequency":0.08203612},{"time":0.12190475,"frequency":0.038710196},{"time":0.13641724,"frequency":0.07980382},{"time":0.14222223,"frequency":0.035390228},{"time":0.16834468,"frequency":0.07222723},{"time":0.18285714,"frequency":0.04137033},{"time":0.20897959,"frequency":0.070048645},{"time":0.24380952,"frequency":0.0342359},{"time":0.27283448,"frequency":0.041065156},{"time":0.27863947,"frequency":0.079654194},{"time":0.3105669,"frequency":0.03721084},{"time":0.3163719,"frequency":0.070826896},{"time":0.36571428,"frequency":0.029907988},{"time":0.38603175,"frequency":0.10533899},{"time":0.40054423,"frequency":0.043518223},{"time":0.43537414,"frequency":0.06049503},{"time":0.44988662,"frequency":0.08751519},{"time":0.4556916,"frequency":0.16844591},{"time":0.47310656,"frequency":0.15116446},{"time":0.48181406,"frequency":0.033324204},{"time":0.5021315,"frequency":0.14512515},{"time":0.5079365,"frequency":0.058440637},{"time":0.5543764,"frequency":0.1253144},{"time":0.5659864,"frequency":0.06035308},{"time":0.5804989,"frequency":0.13799563}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.haptic.meta new file mode 100644 index 0000000..0639004 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ee64990eca96a44ee9ae0026023073fa +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.wav new file mode 100644 index 0000000..95f31b9 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.wav.meta new file mode 100644 index 0000000..44ed12c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Kick2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 007f3afd15b6140fbbb4585e7dc4449b +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.haptic new file mode 100644 index 0000000..ac69e81 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Snare 1.wav","project":"Snare 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.22956078,"emphasis":{"amplitude":0.28695098,"frequency":0.9}},{"time":0.0010204081,"amplitude":0.28695098},{"time":0.0020181406,"amplitude":0.28695098},{"time":0.003015873,"amplitude":0.39319733},{"time":0.0040136054,"amplitude":0.3893152},{"time":0.005011338,"amplitude":0.58061534,"emphasis":{"amplitude":0.72576916,"frequency":0.5}},{"time":0.0070068026,"amplitude":0.79196656},{"time":0.009002267,"amplitude":0.7749816},{"time":0.01201814,"amplitude":0.70619076},{"time":0.019002268,"amplitude":0.6000127},{"time":0.02201814,"amplitude":0.5408217},{"time":0.028004535,"amplitude":0.46507606},{"time":0.030022675,"amplitude":0.51691884},{"time":0.038004536,"amplitude":0.4156955},{"time":0.04600907,"amplitude":0.33011},{"time":0.05,"amplitude":0.29766577},{"time":0.05600907,"amplitude":0.29999653},{"time":0.057006802,"amplitude":0.39848515},{"time":0.06,"amplitude":0.37036043},{"time":0.067006804,"amplitude":0.3522452},{"time":0.074013606,"amplitude":0.28621346},{"time":0.075011335,"amplitude":0.3252347},{"time":0.0770068,"amplitude":0.32330754},{"time":0.083015874,"amplitude":0.26966298},{"time":0.0840136,"amplitude":0.311194},{"time":0.090022676,"amplitude":0.2701367},{"time":0.09201814,"amplitude":0.31153414},{"time":0.10401361,"amplitude":0.2140806},{"time":0.11301587,"amplitude":0.16556671},{"time":0.115011334,"amplitude":0.17420737},{"time":0.12102041,"amplitude":0.14477463},{"time":0.13401361,"amplitude":0.09846179},{"time":0.14397685724137926,"amplitude":0.03785886368421052},{"time":0.16688246896551723,"amplitude":0},{"time":0.28949613,"amplitude":0},{"time":0.28950113,"amplitude":0.006093935},{"time":0.28950113,"amplitude":0.006093935}],"frequency":[{"time":0,"frequency":0.48547062},{"time":0.023219952,"frequency":0.30259433},{"time":0.03482993,"frequency":0.33548412},{"time":0.043537416,"frequency":0.42876086},{"time":0.055147387,"frequency":0.39469835},{"time":0.06965986,"frequency":0.31381336},{"time":0.07546485,"frequency":0.35523254},{"time":0.08417233,"frequency":0.33028483},{"time":0.09287982,"frequency":0.35949507},{"time":0.0986848,"frequency":0.33393973},{"time":0.11029478,"frequency":0.3453521},{"time":0.12770975,"frequency":0.49024293},{"time":0.13641724,"frequency":0.46503866},{"time":0.14222223,"frequency":0.42271456},{"time":0.1509297,"frequency":0.48084334},{"time":0.1596372,"frequency":0.46838334},{"time":0.16834468,"frequency":0.37551373},{"time":0.17995465,"frequency":0.39625272},{"time":0.18575963,"frequency":0.47056282},{"time":0.19736962,"frequency":0.4452754},{"time":0.2031746,"frequency":0.41223672},{"time":0.21188208,"frequency":0.46280047},{"time":0.22639456,"frequency":0.5053788},{"time":0.23219955,"frequency":0.55345845},{"time":0.24380952,"frequency":0.53662616},{"time":0.2496145,"frequency":0.431681},{"time":0.252517,"frequency":0.42196962},{"time":0.26122448,"frequency":0.4876313},{"time":0.26702946,"frequency":0.58633494},{"time":0.27573696,"frequency":0.4147922}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.haptic.meta new file mode 100644 index 0000000..d94b0bb --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5ca7bbd41447b43a0adf826b58700385 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.wav new file mode 100644 index 0000000..5156413 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.wav.meta new file mode 100644 index 0000000..57fca3d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Snare1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 627abeda22cf641229bbabf8535e9eb9 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.haptic new file mode 100644 index 0000000..58c9c55 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Tom 1.wav","project":"Tom 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.07283496},{"time":0.0010204081,"amplitude":0.07283496},{"time":0.00600907,"amplitude":0.5923631},{"time":0.010022676,"amplitude":0.5522786},{"time":0.017006803,"amplitude":0.67938125},{"time":0.03201814,"amplitude":0.6209471},{"time":0.033015873,"amplitude":0.69657964},{"time":0.051020406,"amplitude":0.6381349},{"time":0.059002265,"amplitude":0.69799733},{"time":0.06501134,"amplitude":0.60559916},{"time":0.067006804,"amplitude":0.697942},{"time":0.08,"amplitude":0.671631},{"time":0.09201814,"amplitude":0.58183646},{"time":0.09301587,"amplitude":0.6989907},{"time":0.10401361,"amplitude":0.555824},{"time":0.10501134,"amplitude":0.63240963},{"time":0.11600907,"amplitude":0.5146351},{"time":0.12002268,"amplitude":0.57543105},{"time":0.13102041,"amplitude":0.45974097},{"time":0.13800453,"amplitude":0.53473884},{"time":0.15800454,"amplitude":0.36874568},{"time":0.16600907,"amplitude":0.43439168},{"time":0.1840136,"amplitude":0.3188621},{"time":0.18800454,"amplitude":0.37012887},{"time":0.19900227,"amplitude":0.2895758},{"time":0.2070068,"amplitude":0.3592762},{"time":0.21900226,"amplitude":0.33016536},{"time":0.24002267,"amplitude":0.21952954},{"time":0.26501134,"amplitude":0.20627484},{"time":0.26700678,"amplitude":0.2754407},{"time":0.29800454,"amplitude":0.17537038},{"time":0.3140136,"amplitude":0.14985043},{"time":0.3410204,"amplitude":0.1603692},{"time":0.36301586,"amplitude":0.10921839},{"time":0.4,"amplitude":0.1167113},{"time":0.42401358,"amplitude":0.085311934},{"time":0.43806545536781605,"amplitude":0.05345221894736843},{"time":0.5997178449310347,"amplitude":0},{"time":0.8042127,"amplitude":0},{"time":0.8042177,"amplitude":0.0047970884},{"time":0.8042177,"amplitude":0.0047970884}],"frequency":[{"time":0,"frequency":0.53540486},{"time":0.014512472,"frequency":0.41862294},{"time":0.066757366,"frequency":0.36012},{"time":0.11029478,"frequency":0.3472019},{"time":0.124807246,"frequency":0.32292616},{"time":0.13641724,"frequency":0.3450328},{"time":0.1509297,"frequency":0.29758948},{"time":0.17124717,"frequency":0.30715123},{"time":0.21478458,"frequency":0.27357823},{"time":0.22349207,"frequency":0.28072596},{"time":0.29895693,"frequency":0.2673888},{"time":0.3512018,"frequency":0.24718973},{"time":0.37151927,"frequency":0.25876093},{"time":0.41505668,"frequency":0.22916025},{"time":0.44408163,"frequency":0.24167342},{"time":0.47310656,"frequency":0.22604185},{"time":0.52535146,"frequency":0.22397968},{"time":0.5543764,"frequency":0.23450294},{"time":0.5979138,"frequency":0.22514589},{"time":0.60952383,"frequency":0.23465513},{"time":0.64725626,"frequency":0.21959351},{"time":0.6588662,"frequency":0.24148323},{"time":0.67918366,"frequency":0.2221523},{"time":0.6878911,"frequency":0.25578523},{"time":0.7198186,"frequency":0.22066478},{"time":0.72852606,"frequency":0.23529464},{"time":0.7604535,"frequency":0.2252695},{"time":0.769161,"frequency":0.2605207},{"time":0.774966,"frequency":0.21396385},{"time":0.7923809,"frequency":0.23191588}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.haptic.meta new file mode 100644 index 0000000..c7b14ea --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4e1ef87bcd90a468b8cd62ff71a5ee2b +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.wav new file mode 100644 index 0000000..8acd71e Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.wav.meta new file mode 100644 index 0000000..fa91d5a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: d8aaeff66f25b45d1af61ac93e540246 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.haptic new file mode 100644 index 0000000..3303bab --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Tom 2.wav","project":"Tom 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00042681332},{"time":0.0010204081,"amplitude":0.00042681332},{"time":0.0040136054,"amplitude":0.0017971875},{"time":0.0070068026,"amplitude":0.5466276},{"time":0.01201814,"amplitude":0.5063241},{"time":0.013015873,"amplitude":0.60688028,"emphasis":{"amplitude":0.75860035,"frequency":0.5}},{"time":0.017006803,"amplitude":0.72490025},{"time":0.02600907,"amplitude":0.53756106},{"time":0.029002268,"amplitude":0.5799376},{"time":0.037006803,"amplitude":0.451643},{"time":0.04301587,"amplitude":0.42464435},{"time":0.06,"amplitude":0.28137287},{"time":0.067006804,"amplitude":0.30468482},{"time":0.07600907,"amplitude":0.24045633},{"time":0.07800453,"amplitude":0.40540954},{"time":0.0940136,"amplitude":0.25371516},{"time":0.10201814,"amplitude":0.24299808},{"time":0.12501134,"amplitude":0.14962293},{"time":0.13600907,"amplitude":0.13869275},{"time":0.1370068,"amplitude":0.17973278},{"time":0.1540136,"amplitude":0.12500352},{"time":0.15600906,"amplitude":0.14555953},{"time":0.17301586,"amplitude":0.107899696},{"time":0.17501134,"amplitude":0.14671682},{"time":0.19900227,"amplitude":0.09034028},{"time":0.20002267,"amplitude":0.14131288},{"time":0.21800452,"amplitude":0.09364849},{"time":0.23800454,"amplitude":0.07239878},{"time":0.23900226,"amplitude":0.10584629},{"time":0.2640136,"amplitude":0.0661273},{"time":0.3040136,"amplitude":0.05405744},{"time":0.30501133,"amplitude":0.07070811},{"time":0.32999998,"amplitude":0.048129607},{"time":0.33201814,"amplitude":0.068579264},{"time":0.38031745655172416,"amplitude":0},{"time":0.8450063,"amplitude":0},{"time":0.8450113,"amplitude":0}],"frequency":[{"time":0,"frequency":0.3759994},{"time":0.014512472,"frequency":0.29378217},{"time":0.040634923,"frequency":0.2404901},{"time":0.04643991,"frequency":0.2739279},{"time":0.055147387,"frequency":0.18769838},{"time":0.06965986,"frequency":0.25719532},{"time":0.08707482,"frequency":0.17850766},{"time":0.11609977,"frequency":0.15394114},{"time":0.14512472,"frequency":0.14286818},{"time":0.1596372,"frequency":0.19432145},{"time":0.17995465,"frequency":0.14368702},{"time":0.19156463,"frequency":0.16912456},{"time":0.21188208,"frequency":0.12931235},{"time":0.26122448,"frequency":0.14130601},{"time":0.27863947,"frequency":0.11336775},{"time":0.33668935,"frequency":0.12861168},{"time":0.38603175,"frequency":0.101541065},{"time":0.40411187149425304,"frequency":0},{"time":0.8450113,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.haptic.meta new file mode 100644 index 0000000..ea94f60 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0e40f98e11e954b7b9ff01db701357e9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.wav new file mode 100644 index 0000000..78e43b3 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.wav.meta new file mode 100644 index 0000000..1a4c933 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Music/Tom2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 2df08a22b3ab2408a968acc20014c6c5 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature.meta new file mode 100644 index 0000000..3d9d968 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 299cc2b0c802c4c309aafcbcda901618 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.haptic new file mode 100644 index 0000000..a387815 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Cat Purr 1.wav","project":"Cat Purr 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0005004453},{"time":0.0010204081,"amplitude":0.0005004453},{"time":0.1470068,"amplitude":0.01971693},{"time":0.15102041,"amplitude":0.17558052},{"time":0.19800453,"amplitude":0.03751806},{"time":0.24301587,"amplitude":0.025989547},{"time":0.24501133,"amplitude":0.07405951},{"time":0.27201813,"amplitude":0.033504583},{"time":0.28501132,"amplitude":0.1361903},{"time":0.32501134,"amplitude":0.05966291},{"time":0.3270068,"amplitude":0.15942666},{"time":0.3570068,"amplitude":0.05664888},{"time":0.36600906,"amplitude":0.19087775},{"time":0.39800453,"amplitude":0.063491605},{"time":0.40600905,"amplitude":0.18307969},{"time":0.4410204,"amplitude":0.056354843},{"time":0.44600907,"amplitude":0.15307742},{"time":0.48,"amplitude":0.0545133},{"time":0.48501134,"amplitude":0.18381895},{"time":0.51900226,"amplitude":0.058390234},{"time":0.5270068,"amplitude":0.20107637},{"time":0.5640136,"amplitude":0.05464311},{"time":0.57,"amplitude":0.11326099},{"time":0.59501135,"amplitude":0.051109947},{"time":0.62700677,"amplitude":0.028132115},{"time":0.63,"amplitude":0.086982735},{"time":0.65999997,"amplitude":0.055503614},{"time":0.6680045,"amplitude":0.15039659},{"time":0.69600904,"amplitude":0.063419744},{"time":0.7050113,"amplitude":0.12142499},{"time":0.7260091,"amplitude":0.062114917},{"time":0.72900224,"amplitude":0.18091944},{"time":0.76,"amplitude":0.0770271},{"time":0.79199547,"amplitude":0.055316366},{"time":0.79600906,"amplitude":0.123613834},{"time":0.82600904,"amplitude":0.059416123},{"time":0.82900226,"amplitude":0.12525228},{"time":0.8570068,"amplitude":0.052824296},{"time":0.8909977,"amplitude":0.039742924},{"time":0.93600905,"amplitude":0.074442774},{"time":1.0009977,"amplitude":0.02066033},{"time":1.0019954,"amplitude":0.020257568},{"time":1.0440136,"amplitude":0.029937556},{"time":1.0809977,"amplitude":0.03329608},{"time":1.1170068,"amplitude":0.043261163},{"time":1.1290022,"amplitude":0.18755218},{"time":1.16,"amplitude":0.06434129},{"time":1.17,"amplitude":0.2526411},{"time":1.1990023,"amplitude":0.09188013},{"time":1.2090023,"amplitude":0.41932797},{"time":1.2470068,"amplitude":0.14170063},{"time":1.2500226,"amplitude":0.4377197},{"time":1.2830158,"amplitude":0.13577017},{"time":1.2960091,"amplitude":0.4210586},{"time":1.326009,"amplitude":0.13648358},{"time":1.3370068,"amplitude":0.46378225},{"time":1.3730159,"amplitude":0.12958992},{"time":1.3840135,"amplitude":0.4319123},{"time":1.409025,"amplitude":0.19406246},{"time":1.445034,"amplitude":0.08543898},{"time":1.4560317,"amplitude":0.23792726},{"time":1.4820181,"amplitude":0.22858903},{"time":1.5110204,"amplitude":0.10279688},{"time":1.5430385,"amplitude":0.092369035},{"time":1.5450339,"amplitude":0.198376},{"time":1.6070294,"amplitude":0.067228846},{"time":1.6120408,"amplitude":0.17100425},{"time":1.7130386,"amplitude":0.032724135},{"time":1.7260317,"amplitude":0.10735385},{"time":1.7880498,"amplitude":0.035924446},{"time":1.7970295,"amplitude":0.12008134},{"time":1.8300453,"amplitude":0.062756464},{"time":1.8370521,"amplitude":0.22982904},{"time":1.8690476,"amplitude":0.07279715},{"time":1.875034,"amplitude":0.18214199},{"time":1.9100453,"amplitude":0.0647034},{"time":1.9120408,"amplitude":0.17473929},{"time":1.9460543,"amplitude":0.05775217},{"time":1.951043,"amplitude":0.1693925},{"time":1.9870521,"amplitude":0.04996671},{"time":2.0000453,"amplitude":0.13041034},{"time":2.001043,"amplitude":0.124769635},{"time":2.0270522,"amplitude":0.047309205},{"time":2.031043,"amplitude":0.10410673},{"time":2.08805,"amplitude":0.035457775},{"time":2.0980499,"amplitude":0.09498903},{"time":2.1520407,"amplitude":0.047459032},{"time":2.1540363,"amplitude":0.09254546},{"time":2.219025,"amplitude":0.03799076},{"time":2.2340362,"amplitude":0.10320711},{"time":2.2870295,"amplitude":0.03929116},{"time":2.2930386,"amplitude":0.09220588},{"time":2.3210204,"amplitude":0.03943347},{"time":2.429025,"amplitude":0.034654528},{"time":2.4350114,"amplitude":0.08477678},{"time":2.4670067,"amplitude":0.03270034},{"time":2.4750113,"amplitude":0.094656736},{"time":2.5110204,"amplitude":0.034615695},{"time":2.5210204,"amplitude":0.13364983},{"time":2.5520182,"amplitude":0.051662296},{"time":2.5550113,"amplitude":0.16737911},{"time":2.5819955,"amplitude":0.067869484},{"time":2.596009,"amplitude":0.16709721},{"time":2.6299999,"amplitude":0.050722957},{"time":2.6390023,"amplitude":0.22216439},{"time":2.676009,"amplitude":0.06263577},{"time":2.6819954,"amplitude":0.2456246},{"time":2.7170067,"amplitude":0.07503222},{"time":2.72,"amplitude":0.14505091},{"time":2.75,"amplitude":0.05326479},{"time":2.7759864,"amplitude":0.066233635},{"time":2.7859864,"amplitude":0.1640396},{"time":2.8069842,"amplitude":0.08023545},{"time":2.8149886,"amplitude":0.1583188},{"time":2.8439908,"amplitude":0.07177887},{"time":2.8739908,"amplitude":0.05011823},{"time":2.877982,"amplitude":0.106426},{"time":2.9129932,"amplitude":0.040269516},{"time":2.9399772,"amplitude":0.04447007},{"time":2.9459863,"amplitude":0.11189174},{"time":3.000975,"amplitude":0.029361004},{"time":3.0019727,"amplitude":0.028434068},{"time":3.0599773,"amplitude":0.09854709},{"time":3.0969615,"amplitude":0.032589357},{"time":3.133968,"amplitude":0.13904676},{"time":3.1769614,"amplitude":0.047139406},{"time":3.1819727,"amplitude":0.1562912},{"time":3.2069614,"amplitude":0.07808788},{"time":3.2239683,"amplitude":0.18992218},{"time":3.2459636,"amplitude":0.09462167},{"time":3.3149433,"amplitude":0.07311499},{"time":3.3239455,"amplitude":0.19070736},{"time":3.3469615,"amplitude":0.0882601},{"time":3.3509524,"amplitude":0.2611286},{"time":3.3819501,"amplitude":0.11022572},{"time":3.3849432,"amplitude":0.29533678},{"time":3.415941,"amplitude":0.12164175},{"time":3.4479365,"amplitude":0.09092665},{"time":3.48195,"amplitude":0.15644372},{"time":3.529932,"amplitude":0.051298104},{"time":3.5569386,"amplitude":0.07414932},{"time":3.5649433,"amplitude":0.2775844},{"time":3.6009297,"amplitude":0.08651315},{"time":3.602925,"amplitude":0.34237775},{"time":3.6289341,"amplitude":0.1505752},{"time":3.6439228,"amplitude":0.29271024},{"time":3.678934,"amplitude":0.10620847},{"time":3.6859183,"amplitude":0.42451066},{"time":3.7199318,"amplitude":0.12985416},{"time":3.7259183,"amplitude":0.40407902},{"time":3.7609296,"amplitude":0.13064313},{"time":3.7689116,"amplitude":0.471408},{"time":3.800907,"amplitude":0.1507227},{"time":3.8119273,"amplitude":0.46888635},{"time":3.8489115,"amplitude":0.14218858},{"time":3.8509068,"amplitude":0.30323017},{"time":3.8729024,"amplitude":0.1489735},{"time":3.9079137,"amplitude":0.077558994},{"time":3.9179137,"amplitude":0.23478036},{"time":3.9489114,"amplitude":0.2127797},{"time":4.000907,"amplitude":0.05034782},{"time":4.0019045,"amplitude":0.049152635},{"time":4.0089116,"amplitude":0.13112648},{"time":4.078889,"amplitude":0.054060075},{"time":4.080907,"amplitude":0.18136925},{"time":4.1398864,"amplitude":0.051578786},{"time":4.151882,"amplitude":0.2636819},{"time":4.188889,"amplitude":0.08194585},{"time":4.190884,"amplitude":0.22674428},{"time":4.224898,"amplitude":0.08229014},{"time":4.230884,"amplitude":0.336667},{"time":4.265896,"amplitude":0.10669747},{"time":4.270884,"amplitude":0.39498502},{"time":4.3038774,"amplitude":0.1251631},{"time":4.311882,"amplitude":0.6022727},{"time":4.3478684,"amplitude":0.17484345},{"time":4.3538775,"amplitude":0.6933833},{"time":4.3908844,"amplitude":0.20671877},{"time":4.3938775,"amplitude":0.4548274},{"time":4.4248753,"amplitude":0.14539781},{"time":4.4488664,"amplitude":0.09305597},{"time":4.4628797,"amplitude":0.5483067},{"time":4.486871,"amplitude":0.2829992},{"time":4.489864,"amplitude":0.7348169},{"time":4.519864,"amplitude":0.33252272},{"time":4.522857,"amplitude":0.47673985},{"time":4.5518594,"amplitude":0.21389437},{"time":4.5848527,"amplitude":0.081131},{"time":4.5948524,"amplitude":0.37275964},{"time":4.6308618,"amplitude":0.120767705},{"time":4.6378684,"amplitude":0.48570672},{"time":4.6708617,"amplitude":0.14620845},{"time":4.676848,"amplitude":0.49338216},{"time":4.7188435,"amplitude":0.2043626},{"time":4.7218595,"amplitude":0.51600283},{"time":4.751859,"amplitude":0.19343823},{"time":4.8118367,"amplitude":0.12076054},{"time":4.8228345,"amplitude":0.28874186},{"time":4.8798413,"amplitude":0.092138685},{"time":4.9458275,"amplitude":0.24246782},{"time":5.0008388,"amplitude":0.11740991},{"time":5.001837,"amplitude":0.11295271},{"time":5.0128345,"amplitude":0.34071672},{"time":5.0438323,"amplitude":0.10794138},{"time":5.1128345,"amplitude":0.071202025},{"time":5.1188207,"amplitude":0.24969243},{"time":5.15483,"amplitude":0.10118453},{"time":5.157823,"amplitude":0.28947267},{"time":5.191814,"amplitude":0.09165973},{"time":5.197823,"amplitude":0.27124777},{"time":5.2308164,"amplitude":0.09079244},{"time":5.2368255,"amplitude":0.34248275},{"time":5.267823,"amplitude":0.12491557},{"time":5.284807,"amplitude":0.21239305},{"time":5.3168025,"amplitude":0.08132989},{"time":5.3228116,"amplitude":0.2285743},{"time":5.351814,"amplitude":0.09749181},{"time":5.379796,"amplitude":0.06698154},{"time":5.389796,"amplitude":0.30136713},{"time":5.4148073,"amplitude":0.12565807},{"time":5.418798,"amplitude":0.28402874},{"time":5.445805,"amplitude":0.12673561},{"time":5.4548073,"amplitude":0.27373675},{"time":5.478798,"amplitude":0.12507235},{"time":5.479796,"amplitude":0.3559833},{"time":5.5097957,"amplitude":0.12191981},{"time":5.5107937,"amplitude":0.2554831},{"time":5.5407934,"amplitude":0.094762765},{"time":5.5437865,"amplitude":0.21325533},{"time":5.5787983,"amplitude":0.0722879},{"time":5.5807934,"amplitude":0.16033031},{"time":5.6447845,"amplitude":0.04713068},{"time":5.75678,"amplitude":0.023705125},{"time":5.7677774,"amplitude":0.10657487},{"time":5.83678,"amplitude":0.02644253},{"time":5.8427663,"amplitude":0.14682968},{"time":5.876757,"amplitude":0.050008412},{"time":5.8827662,"amplitude":0.1369327},{"time":5.9597507,"amplitude":0.054372035},{"time":5.962766,"amplitude":0.18496737},{"time":6.000748,"amplitude":0.086747214},{"time":6.0017686,"amplitude":0.08485118},{"time":6.0047617,"amplitude":0.12033013},{"time":6.054762,"amplitude":0.037829388},{"time":6.067755,"amplitude":0.12278559},{"time":6.1097503,"amplitude":0.06853447},{"time":6.1507483,"amplitude":0.07479443},{"time":6.151746,"amplitude":0.18252276},{"time":6.181746,"amplitude":0.08201154},{"time":6.1887527,"amplitude":0.14049985},{"time":6.241746,"amplitude":0.06765672},{"time":6.2597504,"amplitude":0.11556356},{"time":6.3067346,"amplitude":0.028303763},{"time":6.3237414,"amplitude":0.08878854},{"time":6.3507257,"amplitude":0.038396202},{"time":6.3577323,"amplitude":0.10505386},{"time":6.4267344,"amplitude":0.035867993},{"time":6.4337187,"amplitude":0.15769306},{"time":6.4677324,"amplitude":0.0537706},{"time":6.4707255,"amplitude":0.13735983},{"time":6.5047164,"amplitude":0.05493346},{"time":6.5107255,"amplitude":0.20570584},{"time":6.549728,"amplitude":0.058123957},{"time":6.552721,"amplitude":0.15170123},{"time":6.6407027,"amplitude":0.054978758},{"time":6.6517005,"amplitude":0.10323614},{"time":6.735714,"amplitude":0.055625767},{"time":6.7377095,"amplitude":0.14321302},{"time":6.7687073,"amplitude":0.06635069},{"time":6.7726984,"amplitude":0.15851325},{"time":6.799705,"amplitude":0.06812808},{"time":6.813696,"amplitude":0.15653749},{"time":6.8356915,"amplitude":0.0756},{"time":6.8387074,"amplitude":0.15044557},{"time":6.8656917,"amplitude":0.06441653},{"time":6.9026985,"amplitude":0.037697833},{"time":6.914694,"amplitude":0.13183558},{"time":6.946689,"amplitude":0.047451336},{"time":6.9486847,"amplitude":0.12034043},{"time":6.9856915,"amplitude":0.04612945},{"time":7.00068,"amplitude":0.08118915},{"time":7.001678,"amplitude":0.077676766},{"time":7.027687,"amplitude":0.12520103},{"time":7.064671,"amplitude":0.048566695},{"time":7.1036735,"amplitude":0.03838048},{"time":7.198662,"amplitude":0.07952296},{"time":7.205669,"amplitude":0.36959302},{"time":7.231678,"amplitude":0.14856273},{"time":7.238662,"amplitude":0.3717474},{"time":7.262676,"amplitude":0.15674172},{"time":7.312653,"amplitude":0.18264599},{"time":7.351655,"amplitude":0.060562678},{"time":7.3706574,"amplitude":0.38777602},{"time":7.4076643,"amplitude":0.1350041},{"time":7.412653,"amplitude":0.45830852},{"time":7.438662,"amplitude":0.19535655},{"time":7.448662,"amplitude":0.6272091},{"time":7.481655,"amplitude":0.20850506},{"time":7.487642,"amplitude":0.587285},{"time":7.5196595,"amplitude":0.19281161},{"time":7.527642,"amplitude":0.52200997},{"time":7.5636506,"amplitude":0.16249242},{"time":7.5686393,"amplitude":0.48298788},{"time":7.6016326,"amplitude":0.15313828},{"time":7.6066437,"amplitude":0.3555361},{"time":7.665646,"amplitude":0.08714857},{"time":7.6906347,"amplitude":0.15896532},{"time":7.6956463,"amplitude":0.7199592},{"time":7.7246256,"amplitude":0.30555812},{"time":7.7276416,"amplitude":0.75583357},{"time":7.754626,"amplitude":0.2935118},{"time":7.777619,"amplitude":0.33415878},{"time":7.800635,"amplitude":0.23062852},{"time":7.8086166,"amplitude":0.4799581},{"time":7.8316326,"amplitude":0.25131306},{"time":7.837619,"amplitude":0.59577197},{"time":7.8626304,"amplitude":0.27372336},{"time":7.866621,"amplitude":0.47308865},{"time":7.893628,"amplitude":0.27181774},{"time":7.9026303,"amplitude":0.43394485},{"time":7.918617,"amplitude":0.2547987},{"time":7.9189343,"amplitude":0.2547987},{"time":7.9189343,"amplitude":0.2547987}],"frequency":[{"time":0,"frequency":0.19795138},{"time":0.05566893699999986,"frequency":0.220546885},{"time":0.14854874599999984,"frequency":0.085987445},{"time":0.16886621999999987,"frequency":0.401483055},{"time":0.18337869999999987,"frequency":0.154513285},{"time":0.2733559999999998,"frequency":0.066258609},{"time":0.29947845999999984,"frequency":0.31766116499999997},{"time":0.3285034199999999,"frequency":0.081774565},{"time":0.34011339999999984,"frequency":0.37354588499999997},{"time":0.36913831999999985,"frequency":0.104743375},{"time":0.37494329999999987,"frequency":0.404756815},{"time":0.40977324999999987,"frequency":0.091844345},{"time":0.4591156399999999,"frequency":0.337467555},{"time":0.48814059999999987,"frequency":0.07290160500000001},{"time":0.5403854999999999,"frequency":0.242423285},{"time":0.5519954999999999,"frequency":0.088450255},{"time":0.6739001999999998,"frequency":0.07427251500000001},{"time":0.6855101999999998,"frequency":0.36695611499999997},{"time":0.7058276699999999,"frequency":0.10874436500000001},{"time":0.7406575999999998,"frequency":0.134987935},{"time":0.7464625999999999,"frequency":0.431819855},{"time":0.7754874999999999,"frequency":0.175861655},{"time":0.7841949999999999,"frequency":0.44408108499999993},{"time":0.8074149699999998,"frequency":0.11778323500000001},{"time":0.8132198999999999,"frequency":0.439515355},{"time":0.8393423999999998,"frequency":0.171851615},{"time":0.8509523999999998,"frequency":0.43969702499999996},{"time":0.8741723499999998,"frequency":0.181146565},{"time":0.9728571299999998,"frequency":0.084780035},{"time":1.0221996,"frequency":0.197526085},{"time":1.0251019,"frequency":0.136128175},{"time":1.0947619,"frequency":0.19450418500000002},{"time":1.1324941999999998,"frequency":0.05758355499999998},{"time":1.1702267,"frequency":0.035687141000000006},{"time":1.2340814999999998,"frequency":0.059608279999999986},{"time":1.2602039999999999,"frequency":0.373227685},{"time":1.2950339,"frequency":0.03783800499999998},{"time":1.3066438999999999,"frequency":0.34525838499999995},{"time":1.3356687999999999,"frequency":0.017819134999999993},{"time":1.3501813999999999,"frequency":0.38890638499999997},{"time":1.3617913,"frequency":0.058477255000000006},{"time":1.3995237999999999,"frequency":0.27741220499999997},{"time":1.4082313,"frequency":0.074397145},{"time":1.4924034999999998,"frequency":0.069507505},{"time":1.5011109999999999,"frequency":0.44882668499999995},{"time":1.5272335,"frequency":0.11292242499999999},{"time":1.5591609999999998,"frequency":0.07847437500000001},{"time":1.5649658999999998,"frequency":0.382279585},{"time":1.5910882999999998,"frequency":0.09104657499999999},{"time":1.6026983,"frequency":0.35514712499999995},{"time":1.6578457999999998,"frequency":0.063826515},{"time":1.7217006,"frequency":0.0068499649999999995},{"time":1.7304080999999998,"frequency":0.167813435},{"time":1.8203854,"frequency":0.08531050500000001},{"time":1.8494103,"frequency":0.35492530499999997},{"time":1.8987527,"frequency":0.06205254499999999},{"time":1.9248751999999998,"frequency":0.332117185},{"time":1.9364852,"frequency":0.05529964499999998},{"time":2.0032425,"frequency":0.280492035},{"time":2.0235601,"frequency":0.08661429500000001},{"time":2.0264625,"frequency":0.10716398499999999},{"time":2.1019273,"frequency":0.12341417499999999},{"time":2.1106347999999997,"frequency":0.34329503499999997},{"time":2.1338548999999998,"frequency":0.083627845},{"time":2.1744898,"frequency":0.28471124499999995},{"time":2.2006121,"frequency":0.080083085},{"time":2.2064171,"frequency":0.30902746499999995},{"time":2.2325397,"frequency":0.104867305},{"time":2.2383447,"frequency":0.336968925},{"time":2.264467,"frequency":0.133481335},{"time":2.3573467999999997,"frequency":0.166906885},{"time":2.4241042,"frequency":0.07182876499999999},{"time":2.4763490999999997,"frequency":0.144161465},{"time":2.5779365,"frequency":0.062390155},{"time":2.6069613,"frequency":0.401892035},{"time":2.6185712999999997,"frequency":0.088753845},{"time":2.7404761,"frequency":0.06279325499999999},{"time":2.792721,"frequency":0.157987515},{"time":2.8014284999999997,"frequency":0.40311398499999995},{"time":2.8217459,"frequency":0.10755546499999999},{"time":2.8275509,"frequency":0.395260185},{"time":2.850771,"frequency":0.061232485},{"time":2.8652832999999998,"frequency":0.36029571499999996},{"time":2.8856007999999997,"frequency":0.092885685},{"time":2.9001134,"frequency":0.43548028499999997},{"time":2.9088206,"frequency":0.13981190500000001},{"time":2.9291381999999997,"frequency":0.303626085},{"time":2.9523582999999998,"frequency":0.084673255},{"time":2.9639680999999998,"frequency":0.33473005499999997},{"time":3.0220179999999996,"frequency":0.111182065},{"time":3.0249205,"frequency":0.20778724499999998},{"time":3.045238,"frequency":0.066497835},{"time":3.1119955,"frequency":0.156792595},{"time":3.1381178,"frequency":0.03173330499999999},{"time":3.1874602,"frequency":0.24825568499999995},{"time":3.2716325,"frequency":0.042597598999999986},{"time":3.3325849,"frequency":0.300615345},{"time":3.3616099999999998,"frequency":0.123246475},{"time":3.3703171999999997,"frequency":0.39174136499999995},{"time":3.3935372999999998,"frequency":0.07367221500000001},{"time":3.4051473,"frequency":0.40246598499999997},{"time":3.4283672,"frequency":0.06385231499999999},{"time":3.4370746999999997,"frequency":0.41493388499999995},{"time":3.4573921999999997,"frequency":0.061612575},{"time":3.4690022999999997,"frequency":0.44033908499999996},{"time":3.4922220999999998,"frequency":0.08247812500000001},{"time":3.5038321,"frequency":0.36982914499999997},{"time":3.5241495,"frequency":0.06469654999999999},{"time":3.5618819999999998,"frequency":0.03363665499999999},{"time":3.5676870999999997,"frequency":0.21921670499999998},{"time":3.6054195,"frequency":0.044682475},{"time":3.7679590999999997,"frequency":0.109035405},{"time":3.7737640999999997,"frequency":0.332404985},{"time":3.791179,"frequency":0.07858674500000001},{"time":3.8956687999999997,"frequency":0.141458385},{"time":3.9217912999999998,"frequency":0.038876565},{"time":3.9304989,"frequency":0.40331941499999996},{"time":3.9537187,"frequency":0.03180851499999998},{"time":3.9711336999999998,"frequency":0.141731095},{"time":4.0233786,"frequency":0.161099865},{"time":4.0262811,"frequency":0.28215604499999997},{"time":4.0553061999999995,"frequency":0.03660765499999999},{"time":4.1249659,"frequency":0.21287056499999998},{"time":4.1568935,"frequency":0.029460655000000006},{"time":4.203333199999999,"frequency":0.222841855},{"time":4.2555784999999995,"frequency":0.07109628500000001},{"time":4.3571655,"frequency":0.048332684999999986},{"time":4.362970499999999,"frequency":0.305310885},{"time":4.3978002,"frequency":0.014429905},{"time":4.4674605,"frequency":0.06651931999999999},{"time":4.5893648,"frequency":0.013038504999999999},{"time":4.6096825,"frequency":0.204221815},{"time":4.659025,"frequency":0.050440185},{"time":4.6880495,"frequency":0.299780485},{"time":4.6996595,"frequency":0.057966505},{"time":4.7315872,"frequency":0.240593285},{"time":4.7896369,"frequency":0.06605613499999999},{"time":4.8070519,"frequency":0.38171634499999996},{"time":4.8273695,"frequency":0.039801001},{"time":4.8360769999999995,"frequency":0.39417785499999997},{"time":4.8592971,"frequency":0.058829305},{"time":4.8680045,"frequency":0.361016485},{"time":4.8912242,"frequency":0.05660194499999999},{"time":4.9318595,"frequency":0.412363465},{"time":4.9550795,"frequency":0.070153145},{"time":4.9637869,"frequency":0.409284055},{"time":4.9899089,"frequency":0.035732335000000004},{"time":4.9957139999999995,"frequency":0.39537590499999997},{"time":5.0218365,"frequency":0.055667775},{"time":5.024739,"frequency":0.28046202499999995},{"time":5.0479591,"frequency":0.02567446900000001},{"time":5.0595691,"frequency":0.24043083499999995},{"time":5.0856912,"frequency":0.041236264999999994},{"time":5.1292288,"frequency":0.22824293499999998},{"time":5.1611565,"frequency":0.02727612099999999},{"time":5.2017910999999994,"frequency":0.01608632499999999},{"time":5.2482312,"frequency":0.22723683499999997},{"time":5.3236959,"frequency":0},{"time":5.3353059,"frequency":0.195047385},{"time":5.3904535,"frequency":0.04038919499999999},{"time":5.404965499999999,"frequency":0.428494385},{"time":5.4252832,"frequency":0.112542275},{"time":5.4368932,"frequency":0.4691684249999999},{"time":5.4572107999999995,"frequency":0.09021162499999999},{"time":5.4978454999999995,"frequency":0.414043885},{"time":5.523968,"frequency":0.151360305},{"time":5.529773,"frequency":0.4705834349999999},{"time":5.5529931,"frequency":0.154814825},{"time":5.5646031,"frequency":0.36462098499999995},{"time":5.619750499999999,"frequency":0.149322405},{"time":5.6603855,"frequency":0.22359684500000002},{"time":5.7271425,"frequency":0.064273525},{"time":5.8084125,"frequency":0.20914995500000003},{"time":5.8258275,"frequency":0.06460262},{"time":5.880975,"frequency":0.171370585},{"time":5.8896825,"frequency":0.061483240999999994},{"time":5.9738548,"frequency":0.266704055},{"time":5.9854648,"frequency":0.07753834500000001},{"time":6.023197,"frequency":0.088965505},{"time":6.0260995,"frequency":0.07873292500000001},{"time":6.0522219999999995,"frequency":0.069231335},{"time":6.0754421,"frequency":0.36649738499999995},{"time":6.1015645,"frequency":0.23713828499999995},{"time":6.1538094999999995,"frequency":0.350226045},{"time":6.1915419,"frequency":0.12111465499999999},{"time":6.203152,"frequency":0.359714785},{"time":6.2350791,"frequency":0.35430014499999996},{"time":6.2815192,"frequency":0.08329763500000001},{"time":6.3714965,"frequency":0.19513178499999997},{"time":6.4208384999999994,"frequency":0.05722037499999999},{"time":6.4469612,"frequency":0.254066105},{"time":6.4556685,"frequency":0.05694250000000001},{"time":6.4846938,"frequency":0.22748845499999998},{"time":6.5137189,"frequency":0.07009839500000001},{"time":6.6065985,"frequency":0.081489685},{"time":6.6385257,"frequency":0.22165712499999998},{"time":6.6559408,"frequency":0.087348345},{"time":6.6820635,"frequency":0.404693785},{"time":6.7139909,"frequency":0.39066088499999996},{"time":6.719796,"frequency":0.103694855},{"time":6.7633331,"frequency":0.356989485},{"time":6.7865532,"frequency":0.12224173499999999},{"time":6.7923582,"frequency":0.383937745},{"time":6.8155782,"frequency":0.07931248499999999},{"time":6.8242858,"frequency":0.40526723499999995},{"time":6.8475055,"frequency":0.189004005},{"time":6.8678229,"frequency":0.32692930499999995},{"time":6.9374825,"frequency":0.061748199000000004},{"time":7.0216555,"frequency":0.11374115500000001},{"time":7.0245578,"frequency":0.11876609499999999},{"time":7.091315,"frequency":0.05662208499999999},{"time":7.1145350999999994,"frequency":0.222502405},{"time":7.1812925,"frequency":0.074157685},{"time":7.1929025,"frequency":0.319229285},{"time":7.2132198999999995,"frequency":0.055120854999999996},{"time":7.2190249,"frequency":0.4452795849999999},{"time":7.2335375,"frequency":0.5220583850000001},{"time":7.245147,"frequency":0.06867130499999999},{"time":7.2654645,"frequency":0.431149185},{"time":7.2741720999999995,"frequency":0.083381755},{"time":7.3757595,"frequency":0.042785744999999986},{"time":7.3873695,"frequency":0.170942825},{"time":7.4512241,"frequency":0.052928984999999984},{"time":7.5295917999999995,"frequency":0.04211050499999999},{"time":7.5382995,"frequency":0.27233186499999995},{"time":7.5702264999999995,"frequency":0.008484235000000007},{"time":7.6137641,"frequency":0.24190780499999998},{"time":7.6282765,"frequency":0.065296365},{"time":7.7066438,"frequency":0.11480152499999999},{"time":7.7124489,"frequency":0.4779129849999999},{"time":7.7269615,"frequency":0.492201745},{"time":7.7385715,"frequency":0.100057755},{"time":7.7588885,"frequency":0.4771462849999999},{"time":7.767596,"frequency":0.075090085},{"time":7.7966211,"frequency":0.014306304999999998},{"time":7.8372562,"frequency":0.151769505},{"time":7.8575735,"frequency":0.026414305000000003},{"time":7.8982085,"frequency":0.246066385},{"time":7.930136,"frequency":0.073673125}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.haptic.meta new file mode 100644 index 0000000..18bb33d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f7201d9cdb3ce48338e0d5a2e3c5a483 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.wav new file mode 100644 index 0000000..b5cb67c Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.wav.meta new file mode 100644 index 0000000..c8a65ab --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CatPurr1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 21790ef8523e44ebc8e5c7b53f1cb9ec +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.haptic new file mode 100644 index 0000000..369fc4e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Creature Roar 1.wav","project":"Creature Roar","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00005850442},{"time":0.06984127,"amplitude":0.021950223},{"time":0.120181404,"amplitude":0.20702214000000002},{"time":0.16780046,"amplitude":0.14241748},{"time":0.18276644,"amplitude":0.35907273999999995},{"time":0.22262926,"amplitude":0.29341277},{"time":0.22312926,"amplitude":0.38557542999999994,"emphasis":{"amplitude":0.58196926,"frequency":0.930988}},{"time":0.245805,"amplitude":0.3024282},{"time":0.292517,"amplitude":0.46880849999999996},{"time":0.32426304,"amplitude":0.40045329999999996},{"time":0.32698414,"amplitude":0.4964886999999999,"emphasis":{"amplitude":0.7206108,"frequency":0.9}},{"time":0.35600907,"amplitude":0.34738801999999996},{"time":0.3569161,"amplitude":0.5032439999999999,"emphasis":{"amplitude":0.72905505,"frequency":0.8996023}},{"time":0.37777779,"amplitude":0.40258504999999994},{"time":0.41582652,"amplitude":0.46903474999999994},{"time":0.41632652,"amplitude":0.5880302,"emphasis":{"amplitude":0.8350377,"frequency":0.94738036}},{"time":0.4340136,"amplitude":0.51841964},{"time":0.4739229,"amplitude":0.4671504999999999},{"time":0.47845805,"amplitude":0.7041436999999999},{"time":0.507483,"amplitude":0.45071874999999995},{"time":0.5346473700000001,"amplitude":0.4918249499999999},{"time":0.53514737,"amplitude":0.7386368999999999},{"time":0.5628118,"amplitude":0.40546743999999996},{"time":0.5951855535732749,"amplitude":0.6602427736842108,"emphasis":{"amplitude":0.7805666,"frequency":0.9}},{"time":0.64943314,"amplitude":0.47364419999999996},{"time":0.65668935,"amplitude":0.5868827,"emphasis":{"amplitude":0.8336034,"frequency":0.15613101}},{"time":0.6875284,"amplitude":0.5455610999999999},{"time":0.6993197,"amplitude":0.7410863},{"time":0.722449,"amplitude":0.49155629999999995},{"time":0.738322,"amplitude":0.76435276},{"time":0.7736961,"amplitude":0.5217849},{"time":0.7823129,"amplitude":0.8241476},{"time":0.80136055,"amplitude":0.48093299999999994},{"time":0.8634921,"amplitude":0.83731075},{"time":0.9015873,"amplitude":0.593847},{"time":0.93242633,"amplitude":0.8048668},{"time":0.9582766,"amplitude":0.6111353},{"time":0.95873016,"amplitude":0.69892454,"emphasis":{"amplitude":0.8736557,"frequency":0.93465817}},{"time":0.9823129,"amplitude":0.5845536},{"time":0.99863946,"amplitude":0.9903166},{"time":1.0222223,"amplitude":0.69787455},{"time":1.0258503,"amplitude":0.7656727,"emphasis":{"amplitude":0.9570909,"frequency":0.47390273}},{"time":1.0414773008490223,"amplitude":0.8851284105263161},{"time":1.055335463455149,"amplitude":1},{"time":1.0841077008490214,"amplitude":0.8310814947368428},{"time":1.089796,"amplitude":0.8632085},{"time":1.1766181373938722,"amplitude":0.49686501263157856},{"time":1.1806997373938724,"amplitude":0.7796714026315785},{"time":1.2047360373938722,"amplitude":0.44558951263157853},{"time":1.2283187373938724,"amplitude":0.6912641826315785},{"time":1.2618788373938723,"amplitude":0.4074746126315786},{"time":1.2918107373938723,"amplitude":0.5288555526315786},{"time":1.3628118,"amplitude":0.13244635},{"time":1.3990929,"amplitude":0.036981642},{"time":1.399229,"amplitude":0.036981642}],"frequency":[{"time":0,"frequency":0},{"time":0.014241085271317833,"frequency":0},{"time":0.023628732759320772,"frequency":0},{"time":0.058464313759320805,"frequency":0},{"time":0.07588210275932075,"frequency":0},{"time":0.15618886915097818,"frequency":0.2631064894736839},{"time":0.18308928387966047,"frequency":0.324655926315789},{"time":0.21097647218161675,"frequency":0.36664445789473693},{"time":0.23354586478774456,"frequency":0.4441474542105267},{"time":0.29079511926910273,"frequency":0.43545042315789484},{"time":0.3861516507198226,"frequency":0.25523371736842093},{"time":0.3877717117571059,"frequency":0.2656969826315787},{"time":0.42260728175710593,"frequency":0.2208832526315786},{"time":0.4574428617571059,"frequency":0.26243325263157874},{"time":0.5503377117571066,"frequency":0.27557215263157864},{"time":0.6142029617571065,"frequency":0.24133460263157872},{"time":0.6316207617571066,"frequency":0.29718189263157857},{"time":0.6780682017571065,"frequency":0.25387261263157873},{"time":0.7070978117571065,"frequency":0.3093143526315786},{"time":0.7245156017571065,"frequency":0.23834035263157874},{"time":0.7477393617571065,"frequency":0.26375515263157867},{"time":0.7593511617571065,"frequency":0.3518473526315785},{"time":0.7825749617571065,"frequency":0.24419622263157872},{"time":0.8522460617571065,"frequency":0.31383495263157857},{"time":0.8804551512735327,"frequency":0.35911395263157886},{"time":0.9299249886083426,"frequency":0.4463584499999999},{"time":0.9555998450941305,"frequency":0.5411614894736846},{"time":1.0192262504245106,"frequency":0.7289113984210529},{"time":1.0305888407899577,"frequency":0.9216941663157905},{"time":1.0551211155777032,"frequency":0.9639510500000008},{"time":1.115808420118125,"frequency":0.7777294842105267},{"time":1.2062812246216288,"frequency":0.3733511805263155},{"time":1.399229,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.haptic.meta new file mode 100644 index 0000000..5f3631f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bbf069ce5bd1c4360ba1993ed2633bc1 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.wav new file mode 100644 index 0000000..e36b2ae Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.wav.meta new file mode 100644 index 0000000..fc1804d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/CreatureRoar1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f557b7818486b4ee3be6cd8dd2aa01bb +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.haptic new file mode 100644 index 0000000..8e9a549 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Rain 1.wav","project":"Rain 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000089726},{"time":0.0010204081,"amplitude":0.000089726},{"time":0.067006804,"amplitude":0.0031842722},{"time":0.1440136,"amplitude":0.0034874992},{"time":0.14600907,"amplitude":0.009260981},{"time":0.17301586,"amplitude":0.005493216},{"time":0.27002266,"amplitude":0.00981671},{"time":0.2710204,"amplitude":0.015565256,"emphasis":{"amplitude":0.12998288578947365,"frequency":0.9}},{"time":0.3110204,"amplitude":0.007780197},{"time":0.34301588,"amplitude":0.00655049},{"time":0.34600908,"amplitude":0.034097344,"emphasis":{"amplitude":0.1531479957894737,"frequency":0.9}},{"time":0.3640136,"amplitude":0.0314237536,"emphasis":{"amplitude":0.14980600778947373,"frequency":0.9}},{"time":0.3810204,"amplitude":0.016893248,"emphasis":{"amplitude":0.13164287578947365,"frequency":0.9}},{"time":0.4170068,"amplitude":0.0070657358},{"time":0.43301585,"amplitude":0.0110488176,"emphasis":{"amplitude":0.12433733778947369,"frequency":0.9}},{"time":0.45900226,"amplitude":0.013266830399999999,"emphasis":{"amplitude":0.12710985378947365,"frequency":0.9}},{"time":0.4809977,"amplitude":0.008717283},{"time":0.48999998,"amplitude":0.0141994672,"emphasis":{"amplitude":0.12827564978947364,"frequency":0.9}},{"time":0.51301587,"amplitude":0.0108258575},{"time":0.5140136,"amplitude":0.014464193600000001,"emphasis":{"amplitude":0.12860655778947366,"frequency":0.9}},{"time":0.53401357,"amplitude":0.011087678},{"time":0.55600905,"amplitude":0.0148512976,"emphasis":{"amplitude":0.11330096410526316,"frequency":0.9}},{"time":0.57201815,"amplitude":0.013130676},{"time":0.57900226,"amplitude":0.019192712,"emphasis":{"amplitude":0.11872773210526318,"frequency":0.9}},{"time":0.61501133,"amplitude":0.008258075},{"time":0.6330159,"amplitude":0.0139884024,"emphasis":{"amplitude":0.11222234510526316,"frequency":0.9}},{"time":0.6540136,"amplitude":0.009952447},{"time":0.6580045,"amplitude":0.016139797600000002,"emphasis":{"amplitude":0.1149115891052632,"frequency":0.9}},{"time":0.6770068,"amplitude":0.011645546},{"time":0.7050113,"amplitude":0.007743991},{"time":0.72501135,"amplitude":0.0109667688,"emphasis":{"amplitude":0.10844530310526318,"frequency":0.9}},{"time":0.7670068,"amplitude":0.0092485715},{"time":0.7819955,"amplitude":0.019289362400000003,"emphasis":{"amplitude":0.11884854510526317,"frequency":0.9}},{"time":0.80501133,"amplitude":0.012835899},{"time":0.8319954,"amplitude":0.008747457},{"time":0.8729932,"amplitude":0.0110696968,"emphasis":{"amplitude":0.10857396310526318,"frequency":0.9}},{"time":0.91501135,"amplitude":0.006799942},{"time":0.94800454,"amplitude":0.010787030400000001,"emphasis":{"amplitude":0.10822063010526323,"frequency":0.9}},{"time":0.9629932,"amplitude":0.008851041},{"time":0.9829932,"amplitude":0.0113403248,"emphasis":{"amplitude":0.10891224810526323,"frequency":0.9}},{"time":1.0009977,"amplitude":0.011860862},{"time":1.0019954,"amplitude":0.0115048075},{"time":1.0429932,"amplitude":0.010993706},{"time":1.0450113,"amplitude":0.0225341808,"emphasis":{"amplitude":0.12290456810526317,"frequency":0.9}},{"time":1.0930159,"amplitude":0.0071842046},{"time":1.1250113,"amplitude":0.0089478735},{"time":1.1260091,"amplitude":0.0170399952,"emphasis":{"amplitude":0.11603683610526319,"frequency":0.9}},{"time":1.15,"amplitude":0.027052292000000002,"emphasis":{"amplitude":0.12855220710526316,"frequency":0.9}},{"time":1.1730158,"amplitude":0.013176164000000002,"emphasis":{"amplitude":0.11120704710526318,"frequency":0.9}},{"time":1.1990023,"amplitude":0.008149462},{"time":1.2190022,"amplitude":0.011827469},{"time":1.2220181,"amplitude":0.0189486952,"emphasis":{"amplitude":0.11842271110526316,"frequency":0.9}},{"time":1.2520181,"amplitude":0.009571968},{"time":1.2670068,"amplitude":0.0125965568,"emphasis":{"amplitude":0.11048253810526319,"frequency":0.9}},{"time":1.2680045,"amplitude":0.032516670399999996,"emphasis":{"amplitude":0.1353826801052631,"frequency":0.9}},{"time":1.3020182,"amplitude":0.013525700800000002,"emphasis":{"amplitude":0.11164396810526321,"frequency":0.9}},{"time":1.3450114,"amplitude":0.0072663096},{"time":1.4200226,"amplitude":0.007823441},{"time":1.4390249,"amplitude":0.010834696800000002,"emphasis":{"amplitude":0.1082802131052632,"frequency":0.9}},{"time":1.4710203,"amplitude":0.007432542},{"time":1.4740136,"amplitude":0.021384200000000003,"emphasis":{"amplitude":0.12146709210526319,"frequency":0.9}},{"time":1.515034,"amplitude":0.010120984},{"time":1.5170294,"amplitude":0.0368188592,"emphasis":{"amplitude":0.14076041610526313,"frequency":0.9}},{"time":1.5310204,"amplitude":0.021803596800000002,"emphasis":{"amplitude":0.12199133810526319,"frequency":0.9}},{"time":1.5560317,"amplitude":0.017168457600000003,"emphasis":{"amplitude":0.11619741410526316,"frequency":0.9}},{"time":1.5920408,"amplitude":0.009294881},{"time":1.6530385,"amplitude":0.009073252},{"time":1.6700226,"amplitude":0.011495452400000002,"emphasis":{"amplitude":0.10910615760526321,"frequency":0.9}},{"time":1.671043,"amplitude":0.030215012800000003,"emphasis":{"amplitude":0.13250560810526313,"frequency":0.9}},{"time":1.7160317,"amplitude":0.012159353},{"time":1.7800453,"amplitude":0.008100927},{"time":1.7920408,"amplitude":0.0126660512,"emphasis":{"amplitude":0.11056940610526321,"frequency":0.9}},{"time":1.8300453,"amplitude":0.008603345},{"time":1.8340362,"amplitude":0.029147248,"emphasis":{"amplitude":0.1311709021052631,"frequency":0.9}},{"time":1.8540362,"amplitude":0.015068869600000001,"emphasis":{"amplitude":0.1135729291052632,"frequency":0.9}},{"time":1.8610431,"amplitude":0.025168792000000002,"emphasis":{"amplitude":0.12619783210526317,"frequency":0.9}},{"time":1.8990476,"amplitude":0.010093398},{"time":1.9250339,"amplitude":0.0158301768,"emphasis":{"amplitude":0.11452456310526318,"frequency":0.9}},{"time":1.9430385,"amplitude":0.011168234},{"time":1.9910431,"amplitude":0.009068321},{"time":2.0000453,"amplitude":0.015058787200000001,"emphasis":{"amplitude":0.1135603261052632,"frequency":0.9}},{"time":2.001043,"amplitude":0.01455032,"emphasis":{"amplitude":0.11292474210526318,"frequency":0.9}},{"time":2.0230386,"amplitude":0.010293057},{"time":2.0240362,"amplitude":0.0227602704,"emphasis":{"amplitude":0.12318718010526318,"frequency":0.9}},{"time":2.061043,"amplitude":0.008839252},{"time":2.0900452,"amplitude":0.009997593},{"time":2.091043,"amplitude":0.016333924,"emphasis":{"amplitude":0.1151542471052632,"frequency":0.9}},{"time":2.1260316,"amplitude":0.007962717},{"time":2.1470294,"amplitude":0.011226595200000002,"emphasis":{"amplitude":0.10877008610526323,"frequency":0.9}},{"time":2.1800454,"amplitude":0.008997584},{"time":2.222041,"amplitude":0.010967437600000001,"emphasis":{"amplitude":0.10844613910526318,"frequency":0.9}},{"time":2.2470295,"amplitude":0.012563809600000002,"emphasis":{"amplitude":0.1104416041052632,"frequency":0.9}},{"time":2.248027,"amplitude":0.031681594400000006,"emphasis":{"amplitude":0.13433883510526312,"frequency":0.9}},{"time":2.2980273,"amplitude":0.011762485},{"time":2.2990248,"amplitude":0.018558083200000002,"emphasis":{"amplitude":0.1179344461052632,"frequency":0.9}},{"time":2.3260317,"amplitude":0.010304905},{"time":2.3470294,"amplitude":0.011577425600000002,"emphasis":{"amplitude":0.10920862410526322,"frequency":0.9}},{"time":2.3500226,"amplitude":0.0382002592,"emphasis":{"amplitude":0.14248716610526313,"frequency":0.9}},{"time":2.372018,"amplitude":0.018073792,"emphasis":{"amplitude":0.1173290821052632,"frequency":0.9}},{"time":2.4230158,"amplitude":0.008533063},{"time":2.449025,"amplitude":0.012673697},{"time":2.4510205,"amplitude":0.029953148800000003,"emphasis":{"amplitude":0.13217827810526311,"frequency":0.9}},{"time":2.472018,"amplitude":0.014840446400000002,"emphasis":{"amplitude":0.1132874001052632,"frequency":0.9}},{"time":2.5240135,"amplitude":0.006916473},{"time":2.5670068,"amplitude":0.0128938256,"emphasis":{"amplitude":0.11085412410526317,"frequency":0.9}},{"time":2.59,"amplitude":0.009145677},{"time":2.6399999,"amplitude":0.012632297},{"time":2.6409976,"amplitude":0.023878403200000002,"emphasis":{"amplitude":0.1245848461052632,"frequency":0.9}},{"time":2.686009,"amplitude":0.010074781},{"time":2.696009,"amplitude":0.041324851200000005,"emphasis":{"amplitude":0.14639290610526312,"frequency":0.9}},{"time":2.7280045,"amplitude":0.013745544800000002,"emphasis":{"amplitude":0.11191877310526319,"frequency":0.9}},{"time":2.75,"amplitude":0.00873315},{"time":2.7879817,"amplitude":0.015459156,"emphasis":{"amplitude":0.11406078710526316,"frequency":0.9}},{"time":2.8399773,"amplitude":0.0085128285},{"time":2.8449886,"amplitude":0.019659808,"emphasis":{"amplitude":0.11931160210526316,"frequency":0.9}},{"time":2.8749886,"amplitude":0.009490535},{"time":2.9079819,"amplitude":0.011336637},{"time":2.9089797,"amplitude":0.019841678400000003,"emphasis":{"amplitude":0.11953894010526318,"frequency":0.9}},{"time":2.9399772,"amplitude":0.010069529},{"time":2.9599774,"amplitude":0.013754957600000001,"emphasis":{"amplitude":0.11193053910526315,"frequency":0.9}},{"time":3.000975,"amplitude":0.011781800000000002,"emphasis":{"amplitude":0.10946409210526319,"frequency":0.9}},{"time":3.0019727,"amplitude":0.011384092,"emphasis":{"amplitude":0.10896695710526322,"frequency":0.9}},{"time":3.0199773,"amplitude":0.014230108,"emphasis":{"amplitude":0.11252447710526317,"frequency":0.9}},{"time":3.020975,"amplitude":0.03753764800000001,"emphasis":{"amplitude":0.14165890210526316,"frequency":0.9}},{"time":3.0579817,"amplitude":0.010647604800000002,"emphasis":{"amplitude":0.1080463481052632,"frequency":0.9}},{"time":3.0589795,"amplitude":0.0179301248,"emphasis":{"amplitude":0.11714949810526319,"frequency":0.9}},{"time":3.0989795,"amplitude":0.011921869},{"time":3.1229706,"amplitude":0.014851264000000001,"emphasis":{"amplitude":0.11330092210526319,"frequency":0.9}},{"time":3.1469615,"amplitude":0.009248516},{"time":3.1719728,"amplitude":0.0167545112,"emphasis":{"amplitude":0.1156799811052632,"frequency":0.9}},{"time":3.1919727,"amplitude":0.0112504},{"time":3.2939456,"amplitude":0.010520313},{"time":3.294966,"amplitude":0.016552356,"emphasis":{"amplitude":0.1154272871052632,"frequency":0.9}},{"time":3.337959,"amplitude":0.007463008},{"time":3.3569615,"amplitude":0.0161860584,"emphasis":{"amplitude":0.11496941510526318,"frequency":0.9}},{"time":3.3789568,"amplitude":0.01269998},{"time":3.3849432,"amplitude":0.026947472,"emphasis":{"amplitude":0.12842118210526315,"frequency":0.9}},{"time":3.4069388,"amplitude":0.0127851408,"emphasis":{"amplitude":0.11071826810526318,"frequency":0.9}},{"time":3.4079363,"amplitude":0.023636931200000003,"emphasis":{"amplitude":0.1242830061052632,"frequency":0.9}},{"time":3.4369388,"amplitude":0.012028998},{"time":3.4399545,"amplitude":0.023148984,"emphasis":{"amplitude":0.12367307210526317,"frequency":0.9}},{"time":3.4649432,"amplitude":0.01247006},{"time":3.4929478,"amplitude":0.008393074},{"time":3.5819273,"amplitude":0.009344659},{"time":3.589932,"amplitude":0.031184216,"emphasis":{"amplitude":0.13371711210526316,"frequency":0.9}},{"time":3.6149206,"amplitude":0.013234886400000001,"emphasis":{"amplitude":0.1112804501052632,"frequency":0.9}},{"time":3.6559184,"amplitude":0.012552956},{"time":3.6569388,"amplitude":0.015347020000000001,"emphasis":{"amplitude":0.11392061710526316,"frequency":0.9}},{"time":3.6949205,"amplitude":0.00782373},{"time":3.7559183,"amplitude":0.007933729},{"time":3.763923,"amplitude":0.025973412,"emphasis":{"amplitude":0.12720360710526313,"frequency":0.9}},{"time":3.8059182,"amplitude":0.008647661},{"time":3.8199093,"amplitude":0.012334920800000001,"emphasis":{"amplitude":0.11015549310526317,"frequency":0.9}},{"time":3.8559184,"amplitude":0.008956431},{"time":3.8819046,"amplitude":0.011331807},{"time":3.8829024,"amplitude":0.026029136000000005,"emphasis":{"amplitude":0.12727326210526313,"frequency":0.9}},{"time":3.9169161,"amplitude":0.011307711},{"time":3.940907,"amplitude":0.010548383},{"time":3.9419048,"amplitude":0.0191739592,"emphasis":{"amplitude":0.11870429110526316,"frequency":0.9}},{"time":3.9839,"amplitude":0.008446829},{"time":4.000907,"amplitude":0.009229136},{"time":4.0019045,"amplitude":0.008985125},{"time":4.0519047,"amplitude":0.0122502904,"emphasis":{"amplitude":0.11004970510526317,"frequency":0.9}},{"time":4.075896,"amplitude":0.01032804},{"time":4.1568933,"amplitude":0.008448614},{"time":4.1629024,"amplitude":0.0224012632,"emphasis":{"amplitude":0.12273842110526316,"frequency":0.9}},{"time":4.198889,"amplitude":0.009351072},{"time":4.204898,"amplitude":0.0231974616,"emphasis":{"amplitude":0.12373366910526316,"frequency":0.9}},{"time":4.221882,"amplitude":0.0130852688,"emphasis":{"amplitude":0.11109342810526317,"frequency":0.9}},{"time":4.2558956,"amplitude":0.009317659},{"time":4.256893,"amplitude":0.0168500992,"emphasis":{"amplitude":0.11579946610526318,"frequency":0.9}},{"time":4.28288,"amplitude":0.009565115},{"time":4.3038774,"amplitude":0.0166581752,"emphasis":{"amplitude":0.11555956110526319,"frequency":0.9}},{"time":4.32288,"amplitude":0.011211279},{"time":4.355873,"amplitude":0.008299935},{"time":4.3628798,"amplitude":0.021828648000000003,"emphasis":{"amplitude":0.1220226521052632,"frequency":0.9}},{"time":4.386871,"amplitude":0.0114541024,"emphasis":{"amplitude":0.1090544701052632,"frequency":0.9}},{"time":4.3878684,"amplitude":0.037070876,"emphasis":{"amplitude":0.14107543710526316,"frequency":0.9}},{"time":4.4048753,"amplitude":0.020610193600000003,"emphasis":{"amplitude":0.12049958410526312,"frequency":0.9}},{"time":4.4308615,"amplitude":0.011068477},{"time":4.431882,"amplitude":0.0220371216,"emphasis":{"amplitude":0.1222832441052632,"frequency":0.9}},{"time":4.4738774,"amplitude":0.009005938},{"time":4.5168705,"amplitude":0.0236974624,"emphasis":{"amplitude":0.12435867010526318,"frequency":0.9}},{"time":4.5408616,"amplitude":0.010710908,"emphasis":{"amplitude":0.10812547710526321,"frequency":0.9}},{"time":4.572857,"amplitude":0.008840468},{"time":4.5778685,"amplitude":0.0170886608,"emphasis":{"amplitude":0.1160976681052632,"frequency":0.9}},{"time":4.60585,"amplitude":0.010765758},{"time":4.64585,"amplitude":0.008416489},{"time":4.6698637,"amplitude":0.0126178608,"emphasis":{"amplitude":0.11050916810526322,"frequency":0.9}},{"time":4.717846,"amplitude":0.009638308},{"time":4.760839,"amplitude":0.009130694},{"time":4.763855,"amplitude":0.014794634400000001,"emphasis":{"amplitude":0.11323013510526317,"frequency":0.9}},{"time":4.7938547,"amplitude":0.008540131},{"time":4.8258505,"amplitude":0.013982172000000001,"emphasis":{"amplitude":0.11221455710526321,"frequency":0.9}},{"time":4.876848,"amplitude":0.008661989},{"time":4.877846,"amplitude":0.015860416,"emphasis":{"amplitude":0.11456236210526319,"frequency":0.9}},{"time":4.9348297,"amplitude":0.008261263},{"time":4.941837,"amplitude":0.013903588000000001,"emphasis":{"amplitude":0.11211632710526317,"frequency":0.9}},{"time":4.9748297,"amplitude":0.008928601},{"time":4.981837,"amplitude":0.0339044544,"emphasis":{"amplitude":0.13711741010526313,"frequency":0.9}},{"time":5.0008388,"amplitude":0.0169367744,"emphasis":{"amplitude":0.11590781010526316,"frequency":0.9}},{"time":5.001837,"amplitude":0.016295777600000002,"emphasis":{"amplitude":0.11510656410526318,"frequency":0.9}},{"time":5.0558276,"amplitude":0.007907034},{"time":5.088821,"amplitude":0.0127344144,"emphasis":{"amplitude":0.1106548601052632,"frequency":0.9}},{"time":5.1268253,"amplitude":0.0089139715},{"time":5.1328115,"amplitude":0.0356647936,"emphasis":{"amplitude":0.13931783410526316,"frequency":0.9}},{"time":5.15483,"amplitude":0.016275268800000003,"emphasis":{"amplitude":0.11508092810526319,"frequency":0.9}},{"time":5.177823,"amplitude":0.0115927765},{"time":5.1848073,"amplitude":0.0193509432,"emphasis":{"amplitude":0.11892552110526318,"frequency":0.9}},{"time":5.2058277,"amplitude":0.01258494},{"time":5.2248073,"amplitude":0.014944992000000002,"emphasis":{"amplitude":0.11341808210526319,"frequency":0.9}},{"time":5.248821,"amplitude":0.00931721},{"time":5.2878003,"amplitude":0.008363625},{"time":5.314807,"amplitude":0.009225706},{"time":5.355805,"amplitude":0.014958512800000002,"emphasis":{"amplitude":0.1134349831052632,"frequency":0.9}},{"time":5.3807936,"amplitude":0.010374984},{"time":5.4068027,"amplitude":0.0178910088,"emphasis":{"amplitude":0.11710060310526318,"frequency":0.9}},{"time":5.4538093,"amplitude":0.00943845},{"time":5.458798,"amplitude":0.014260732000000002,"emphasis":{"amplitude":0.11256275710526317,"frequency":0.9}},{"time":5.508798,"amplitude":0.010217295},{"time":5.5097957,"amplitude":0.027926969600000004,"emphasis":{"amplitude":0.12964555410526313,"frequency":0.9}},{"time":5.525782,"amplitude":0.0159919216,"emphasis":{"amplitude":0.1147267441052632,"frequency":0.9}},{"time":5.5557823,"amplitude":0.012940433},{"time":5.5617914,"amplitude":0.038439172800000004,"emphasis":{"amplitude":0.14278580810526315,"frequency":0.9}},{"time":5.5787983,"amplitude":0.020988907200000004,"emphasis":{"amplitude":0.12097297610526314,"frequency":0.9}},{"time":5.612789,"amplitude":0.0101783415},{"time":5.629796,"amplitude":0.0119137288,"emphasis":{"amplitude":0.10962900310526318,"frequency":0.9}},{"time":5.6307936,"amplitude":0.028527697600000002,"emphasis":{"amplitude":0.13039646410526312,"frequency":0.9}},{"time":5.65678,"amplitude":0.0114579736,"emphasis":{"amplitude":0.10905930910526318,"frequency":0.9}},{"time":5.6857824,"amplitude":0.008563197},{"time":5.6997733,"amplitude":0.015034684800000002,"emphasis":{"amplitude":0.11353019810526319,"frequency":0.9}},{"time":5.74678,"amplitude":0.0077649797},{"time":5.810771,"amplitude":0.009666203},{"time":5.8127666,"amplitude":0.0173047112,"emphasis":{"amplitude":0.11636773110526319,"frequency":0.9}},{"time":5.83678,"amplitude":0.010951666},{"time":5.899773,"amplitude":0.011785702},{"time":5.9007707,"amplitude":0.0184257936,"emphasis":{"amplitude":0.1177690841052632,"frequency":0.9}},{"time":5.9417686,"amplitude":0.008357696},{"time":5.942766,"amplitude":0.015345573600000002,"emphasis":{"amplitude":0.11391880910526317,"frequency":0.9}},{"time":5.9667573,"amplitude":0.009207329},{"time":6.000748,"amplitude":0.011291623},{"time":6.0017686,"amplitude":0.010968456},{"time":6.0297503,"amplitude":0.006743864},{"time":6.0327663,"amplitude":0.0291430832,"emphasis":{"amplitude":0.13116569610526313,"frequency":0.9}},{"time":6.0757594,"amplitude":0.009383371},{"time":6.112744,"amplitude":0.012690065600000001,"emphasis":{"amplitude":0.11059942410526317,"frequency":0.9}},{"time":6.1157594,"amplitude":0.0432546112,"emphasis":{"amplitude":0.14880510610526315,"frequency":0.9}},{"time":6.1427436,"amplitude":0.0175839336,"emphasis":{"amplitude":0.11671675910526316,"frequency":0.9}},{"time":6.171746,"amplitude":0.014482372800000002,"emphasis":{"amplitude":0.1128398081052632,"frequency":0.9}},{"time":6.215737,"amplitude":0.007723295},{"time":6.24873,"amplitude":0.010344159},{"time":6.2497506,"amplitude":0.0187210904,"emphasis":{"amplitude":0.11813820510526317,"frequency":0.9}},{"time":6.2867346,"amplitude":0.008324725},{"time":6.33873,"amplitude":0.008029064},{"time":6.342744,"amplitude":0.010786871600000001,"emphasis":{"amplitude":0.10822043160526323,"frequency":0.9}},{"time":6.379728,"amplitude":0.00792402},{"time":6.3877325,"amplitude":0.016444179200000002,"emphasis":{"amplitude":0.11529206610526319,"frequency":0.9}},{"time":6.422721,"amplitude":0.0071686143},{"time":6.472721,"amplitude":0.012857836},{"time":6.495714,"amplitude":0.008572407},{"time":6.4967117,"amplitude":0.0144876288,"emphasis":{"amplitude":0.11284637810526318,"frequency":0.9}},{"time":6.5407257,"amplitude":0.007741142},{"time":6.5417233,"amplitude":0.0150943312,"emphasis":{"amplitude":0.11360475610526319,"frequency":0.9}},{"time":6.575714,"amplitude":0.008245453},{"time":6.5827208,"amplitude":0.0207479208,"emphasis":{"amplitude":0.12067174310526313,"frequency":0.9}},{"time":6.599705,"amplitude":0.0118680624,"emphasis":{"amplitude":0.10957192010526322,"frequency":0.9}},{"time":6.601723,"amplitude":0.022129021600000003,"emphasis":{"amplitude":0.1223981191052632,"frequency":0.9}},{"time":6.6317234,"amplitude":0.011670798},{"time":6.632721,"amplitude":0.0229278144,"emphasis":{"amplitude":0.12339661010526319,"frequency":0.9}},{"time":6.6517005,"amplitude":0.013021532799999999,"emphasis":{"amplitude":0.11101375810526319,"frequency":0.9}},{"time":6.652721,"amplitude":0.030279148000000002,"emphasis":{"amplitude":0.13258577710526315,"frequency":0.9}},{"time":6.6747165,"amplitude":0.014512464000000001,"emphasis":{"amplitude":0.11287742210526316,"frequency":0.9}},{"time":6.7207026,"amplitude":0.006925703},{"time":6.722698,"amplitude":0.011166235200000001,"emphasis":{"amplitude":0.1086946361052632,"frequency":0.9}},{"time":6.7867117,"amplitude":0.0062172683},{"time":6.8066893,"amplitude":0.018938619200000003,"emphasis":{"amplitude":0.11841011610526318,"frequency":0.9}},{"time":6.836689,"amplitude":0.007107824,"emphasis":{"amplitude":0.00888478,"frequency":0.5}},{"time":6.9226985,"amplitude":0.004506078,"emphasis":{"amplitude":0.0056325975,"frequency":0.9}},{"time":6.923696,"amplitude":0.010030418400000001,"emphasis":{"amplitude":0.012538023,"frequency":0.9}},{"time":6.96068,"amplitude":0.0028788538400000003,"emphasis":{"amplitude":0.0035985673,"frequency":0.9}},{"time":7.00068,"amplitude":0.00069788168,"emphasis":{"amplitude":0.0008723521,"frequency":0.9}},{"time":7.000703,"amplitude":0.00069788168,"emphasis":{"amplitude":0.0008723521,"frequency":0.9}},{"time":7.000703,"amplitude":0.00069788168,"emphasis":{"amplitude":0.0008723521,"frequency":0.9}}],"frequency":[{"time":0,"frequency":0.3380368},{"time":0.026122449,"frequency":0.834517},{"time":0.09578231,"frequency":1},{"time":0.11900226,"frequency":0.37224144},{"time":0.13061225,"frequency":1},{"time":0.17995465,"frequency":0.27786034},{"time":0.18866213,"frequency":1},{"time":0.252517,"frequency":1},{"time":0.258322,"frequency":0.44732693},{"time":0.30476192,"frequency":0.33716843},{"time":0.31346938,"frequency":1},{"time":0.36571428,"frequency":0.34809187},{"time":0.4121542,"frequency":0.92915887},{"time":0.44117913,"frequency":0.45693275},{"time":0.48181406,"frequency":1},{"time":0.54276645,"frequency":0.4848469},{"time":0.60952383,"frequency":0.30528927},{"time":0.6646712,"frequency":1},{"time":0.6733787,"frequency":0.32316166},{"time":0.69659865,"frequency":1},{"time":0.73142856,"frequency":0.3740098},{"time":0.74594104,"frequency":1},{"time":0.78367347,"frequency":0.49507076},{"time":0.8068934,"frequency":1},{"time":0.8649433,"frequency":0.8299291},{"time":0.89687073,"frequency":0.24291067},{"time":0.9171882,"frequency":0.92220825},{"time":0.93460315,"frequency":0.32788378},{"time":0.9636281,"frequency":0.9072473},{"time":0.9984581,"frequency":1},{"time":1.0013604,"frequency":1},{"time":1.0884353,"frequency":0.31789774},{"time":1.1203628,"frequency":1},{"time":1.1348752,"frequency":0.5187686},{"time":1.216145,"frequency":0.2787751},{"time":1.3351473,"frequency":0.96340746},{"time":1.3844898,"frequency":0.38078785},{"time":1.4077097,"frequency":0.97095585},{"time":1.4106121,"frequency":0.33995062},{"time":1.4512471,"frequency":1},{"time":1.4773695,"frequency":0.46025515},{"time":1.509297,"frequency":0.41067708},{"time":1.5412244,"frequency":1},{"time":1.5470294,"frequency":0.33109874},{"time":1.5789568,"frequency":0.585261},{"time":1.6457142,"frequency":0.40615037},{"time":1.6515192,"frequency":1},{"time":1.6921542,"frequency":0.9680492},{"time":1.6979591,"frequency":0.39506012},{"time":1.7763264,"frequency":0.2733295},{"time":1.7966439,"frequency":1},{"time":1.8256688,"frequency":0.2921996},{"time":1.8430839,"frequency":1},{"time":1.8488888,"frequency":0.37273604},{"time":1.8721087,"frequency":1},{"time":1.8982311,"frequency":0.40196833},{"time":1.9069387,"frequency":0.88805705},{"time":1.9591836,"frequency":0.33029324},{"time":1.979501,"frequency":1},{"time":1.9998186,"frequency":0.75262237},{"time":2.002721,"frequency":0.8913529},{"time":2.0723808,"frequency":1},{"time":2.0810883,"frequency":0.3031257},{"time":2.1043084,"frequency":1},{"time":2.1420407,"frequency":0.3500224},{"time":2.168163,"frequency":0.9865879},{"time":2.226213,"frequency":1},{"time":2.232018,"frequency":0.50816643},{"time":2.284263,"frequency":0.30150568},{"time":2.3219953,"frequency":0.47383547},{"time":2.3307028,"frequency":1},{"time":2.3597279,"frequency":0.4192284},{"time":2.4439,"frequency":0.32908446},{"time":2.519365,"frequency":0.92206055},{"time":2.5396824,"frequency":0.33312064},{"time":2.5512924,"frequency":1},{"time":2.5774148,"frequency":0.47161493},{"time":2.6325622,"frequency":0.98468953},{"time":2.6470747,"frequency":0.34579524},{"time":2.6760998,"frequency":1},{"time":2.7167346,"frequency":0.43892473},{"time":2.7283447,"frequency":1},{"time":2.748662,"frequency":0.31452024},{"time":2.754467,"frequency":1},{"time":2.8038094,"frequency":0.92355716},{"time":2.8473468,"frequency":0.36818516},{"time":2.8966892,"frequency":0.81785935},{"time":2.9460316,"frequency":0.42038065},{"time":2.989569,"frequency":1},{"time":2.9982765,"frequency":0.32158333},{"time":3.001179,"frequency":0.33221328},{"time":3.018594,"frequency":0.735525},{"time":3.0969613,"frequency":0.35697612},{"time":3.1085713,"frequency":1},{"time":3.1550112,"frequency":0.31621337},{"time":3.1579137,"frequency":0.89697915},{"time":3.201451,"frequency":0.4280989},{"time":3.2275736,"frequency":0.3191525},{"time":3.2798185,"frequency":0.5359442},{"time":3.3001359,"frequency":1},{"time":3.3320634,"frequency":0.9390224},{"time":3.3756008,"frequency":0.3429098},{"time":3.4394557,"frequency":1},{"time":3.4742856,"frequency":1},{"time":3.506213,"frequency":0.40599826},{"time":3.575873,"frequency":0.41747254},{"time":3.5787754,"frequency":1},{"time":3.6048977,"frequency":0.40713394},{"time":3.6310203,"frequency":0.81064063},{"time":3.6600451,"frequency":0.38677183},{"time":3.6832652,"frequency":0.8215743},{"time":3.718095,"frequency":0.4399527},{"time":3.7268026,"frequency":0.98299444},{"time":3.7529252,"frequency":0.40493435},{"time":3.8574147,"frequency":0.25825644},{"time":3.8690248,"frequency":0.75948715},{"time":3.9328797,"frequency":0.36611378},{"time":3.9386847,"frequency":1},{"time":3.9909296,"frequency":0.3775774},{"time":3.9996371,"frequency":1},{"time":4.0025396,"frequency":0.73878235},{"time":4.0257597,"frequency":0.29654306},{"time":4.046077,"frequency":0.99794894},{"time":4.0663943,"frequency":0.30909964},{"time":4.086712,"frequency":1},{"time":4.1128345,"frequency":0.45476902},{"time":4.188299,"frequency":0.9167863},{"time":4.226032,"frequency":0.3658889},{"time":4.3305216,"frequency":0.8296769},{"time":4.3421316,"frequency":0.25553152},{"time":4.3827662,"frequency":1},{"time":4.391474,"frequency":0.28564596},{"time":4.4292064,"frequency":1},{"time":4.5017686,"frequency":0.39917713},{"time":4.5424037,"frequency":0.62246305},{"time":4.562721,"frequency":0.26098493},{"time":4.591746,"frequency":0.647701},{"time":4.6352835,"frequency":0.85977226},{"time":4.6962357,"frequency":0.33060604},{"time":4.716553,"frequency":1},{"time":4.722358,"frequency":0.30707747},{"time":4.7513833,"frequency":0.6632105},{"time":4.8471656,"frequency":0.3045056},{"time":4.8848977,"frequency":0.7866106},{"time":4.893605,"frequency":0.2958495},{"time":4.9226303,"frequency":1},{"time":4.948753,"frequency":0.26413223},{"time":4.963265,"frequency":1},{"time":4.986485,"frequency":0.32120937},{"time":4.998095,"frequency":0.87942034},{"time":5.0009975,"frequency":0.5862486},{"time":5.01551,"frequency":1},{"time":5.02712,"frequency":0.32761896},{"time":5.064852,"frequency":0.44746274},{"time":5.0764623,"frequency":0.99545664},{"time":5.114195,"frequency":0.5071498},{"time":5.15483,"frequency":1},{"time":5.198367,"frequency":0.40245283},{"time":5.2419047,"frequency":1},{"time":5.279637,"frequency":0.33147004},{"time":5.331882,"frequency":0.9487637},{"time":5.3638096,"frequency":0.23509732},{"time":5.392834,"frequency":1},{"time":5.4276643,"frequency":0.5250869},{"time":5.5292516,"frequency":0.451648},{"time":5.5350566,"frequency":1},{"time":5.575691,"frequency":1},{"time":5.5843987,"frequency":0.36090055},{"time":5.613424,"frequency":0.8221398},{"time":5.6453514,"frequency":0.3775813},{"time":5.709206,"frequency":0.52370626},{"time":5.726621,"frequency":0.91773766},{"time":5.7672563,"frequency":1},{"time":5.8049884,"frequency":0.40884402},{"time":5.825306,"frequency":1},{"time":5.8514285,"frequency":0.33967364},{"time":5.8746486,"frequency":0.4446724},{"time":5.9356008,"frequency":0.578184},{"time":5.9617233,"frequency":0.3613626},{"time":5.9994555,"frequency":0.64547914},{"time":6.002358,"frequency":0.5982054},{"time":6.025578,"frequency":0.94937456},{"time":6.0517006,"frequency":0.52229404},{"time":6.083628,"frequency":1},{"time":6.1213603,"frequency":0.29304743},{"time":6.1445804,"frequency":0.22111368},{"time":6.20263,"frequency":0.64207613},{"time":6.2403626,"frequency":0.56288207},{"time":6.3042173,"frequency":0.28663513},{"time":6.3100224,"frequency":1},{"time":6.324535,"frequency":0.39300162},{"time":6.3390474,"frequency":1},{"time":6.3854876,"frequency":0.9629718},{"time":6.3999996,"frequency":0.28555042},{"time":6.4290247,"frequency":0.83867586},{"time":6.4464397,"frequency":0.21675001},{"time":6.4725623,"frequency":0.8971784},{"time":6.524807,"frequency":1},{"time":6.5973697,"frequency":0.30615553},{"time":6.6176867,"frequency":1},{"time":6.623492,"frequency":0.2879244},{"time":6.658322,"frequency":0.92262626},{"time":6.6902494,"frequency":0.3607032},{"time":6.7744217,"frequency":0.34456217},{"time":6.7947392,"frequency":0.5452118},{"time":6.864399,"frequency":0.33354172},{"time":6.899229,"frequency":0.7658492},{"time":6.9282537,"frequency":0.42338264},{"time":6.9659863,"frequency":0.74500155},{"time":6.986304,"frequency":0.25121903}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.haptic.meta new file mode 100644 index 0000000..e6b9f9b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0d4b3aa2605184d2ca37daa0d83d7f22 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.wav new file mode 100644 index 0000000..780335e Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.wav.meta new file mode 100644 index 0000000..1bc6859 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Rain1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f6409eaded04a4508a90a669fa70d734 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.haptic new file mode 100644 index 0000000..9299776 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Rain in Car 1.wav","project":"Rain in Car 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00019677555},{"time":0.0010204081,"amplitude":0.00019677555},{"time":0.01600907,"amplitude":0.009157861},{"time":0.06600907,"amplitude":0.01266683},{"time":0.07102041,"amplitude":0.02512569},{"time":0.14047623999999986,"amplitude":0.009530542400000001,"emphasis":{"amplitude":0.19875528326315792,"frequency":0.5}},{"time":0.20047623999999986,"amplitude":0.0332670928,"emphasis":{"amplitude":0.22842597126315783,"frequency":0.5}},{"time":0.23349209999999987,"amplitude":0.0339146048,"emphasis":{"amplitude":0.22923536126315783,"frequency":0.5}},{"time":0.27947847999999986,"amplitude":0.017765182400000003,"emphasis":{"amplitude":0.20904858326315792,"frequency":0.5}},{"time":0.29947849999999987,"amplitude":0.028640994400000005,"emphasis":{"amplitude":0.22264334826315785,"frequency":0.5}},{"time":0.32947849999999984,"amplitude":0.017717473600000002,"emphasis":{"amplitude":0.20898894726315792,"frequency":0.5}},{"time":0.3584807799999999,"amplitude":0.0336373,"emphasis":{"amplitude":0.22888873026315784,"frequency":0.5}},{"time":0.39147396999999984,"amplitude":0.0153340008,"emphasis":{"amplitude":0.11390434310526315,"frequency":0.5}},{"time":0.3964852999999999,"amplitude":0.072438888,"emphasis":{"amplitude":0.18528545210526315,"frequency":0.5}},{"time":0.41349209999999986,"amplitude":0.044595697600000005,"emphasis":{"amplitude":0.15048146410526317,"frequency":0.5}},{"time":0.45349209999999984,"amplitude":0.0169109392,"emphasis":{"amplitude":0.11587551610526317,"frequency":0.5}},{"time":0.4604761999999999,"amplitude":0.0290545968,"emphasis":{"amplitude":0.13105508810526315,"frequency":0.5}},{"time":0.5244898399999999,"amplitude":0.0161106568,"emphasis":{"amplitude":0.11487516310526316,"frequency":0.5}},{"time":0.5484807999999999,"amplitude":0.0242655336,"emphasis":{"amplitude":0.12506875910526316,"frequency":0.5}},{"time":0.5494784999999999,"amplitude":0.10642395200000002,"emphasis":{"amplitude":0.22776678210526316,"frequency":0.5}},{"time":0.5644897999999998,"amplitude":0.062434552000000004,"emphasis":{"amplitude":0.17278003210526316,"frequency":0.5}},{"time":0.5904762399999999,"amplitude":0.023710980800000003,"emphasis":{"amplitude":0.12437556810526315,"frequency":0.5}},{"time":0.6184807699999999,"amplitude":0.0109782296,"emphasis":{"amplitude":0.10845962910526316,"frequency":0.5}},{"time":0.6564852999999998,"amplitude":0.0213156328,"emphasis":{"amplitude":0.12138138310526317,"frequency":0.5}},{"time":0.6574829999999998,"amplitude":0.0642073392,"emphasis":{"amplitude":0.17499601610526316,"frequency":0.5}},{"time":0.6764852599999999,"amplitude":0.033041616,"emphasis":{"amplitude":0.13603886210526317,"frequency":0.5}},{"time":0.7034693999999999,"amplitude":0.0134808448,"emphasis":{"amplitude":0.11158789810526315,"frequency":0.5}},{"time":0.7094784599999998,"amplitude":0.0221707152,"emphasis":{"amplitude":0.12245023610526315,"frequency":0.5}},{"time":0.7394784999999998,"amplitude":0.0101418232,"emphasis":{"amplitude":0.10741412110526316,"frequency":0.5}},{"time":0.7524716999999999,"amplitude":0.0184660688,"emphasis":{"amplitude":0.11781942810526316,"frequency":0.5}},{"time":0.7834693999999999,"amplitude":0.013258306400000001,"emphasis":{"amplitude":0.11130972510526316,"frequency":0.5}},{"time":0.7884807999999999,"amplitude":0.024906968,"emphasis":{"amplitude":0.12587055210526316,"frequency":0.5}},{"time":0.8434693999999998,"amplitude":0.0153481664,"emphasis":{"amplitude":0.11392205010526316,"frequency":0.5}},{"time":0.8444670999999999,"amplitude":0.078271376,"emphasis":{"amplitude":0.19257606210526315,"frequency":0.5}},{"time":0.8634694499999999,"amplitude":0.039809436000000004,"emphasis":{"amplitude":0.14449863710526314,"frequency":0.5}},{"time":0.9014739599999999,"amplitude":0.0184822144,"emphasis":{"amplitude":0.11783961010526317,"frequency":0.5}},{"time":0.9264852599999999,"amplitude":0.0172640416,"emphasis":{"amplitude":0.11631689410526316,"frequency":0.5}},{"time":0.9354648999999998,"amplitude":0.0324530784,"emphasis":{"amplitude":0.13530319010526315,"frequency":0.5}},{"time":0.9534693999999999,"amplitude":0.018751853600000003,"emphasis":{"amplitude":0.11817665910526315,"frequency":0.5}},{"time":0.9944671599999999,"amplitude":0.010628699200000001,"emphasis":{"amplitude":0.163285874,"frequency":0.9}},{"time":1.0134694,"amplitude":0.019306943200000003,"emphasis":{"amplitude":0.17413367899999996,"frequency":0.9}},{"time":1.0144670999999998,"amplitude":0.0186761168,"emphasis":{"amplitude":0.17334514599999998,"frequency":0.9}},{"time":1.0414739,"amplitude":0.0131447088,"emphasis":{"amplitude":0.16643088599999997,"frequency":0.9}},{"time":1.0714739999999998,"amplitude":0.0254978,"emphasis":{"amplitude":0.18187224999999996,"frequency":0.9}},{"time":1.0954875,"amplitude":0.015832528000000002,"emphasis":{"amplitude":0.16979065999999998,"frequency":0.9}},{"time":1.1034693999999998,"amplitude":0.0326435808,"emphasis":{"amplitude":0.19080447599999997,"frequency":0.9}},{"time":1.1324717,"amplitude":0.013231127200000001,"emphasis":{"amplitude":0.16653890899999998,"frequency":0.9}},{"time":1.1494784999999998,"amplitude":0.019855908800000002,"emphasis":{"amplitude":0.17481988599999995,"frequency":0.9}},{"time":1.1854874999999998,"amplitude":0.0116840192,"emphasis":{"amplitude":0.164605024,"frequency":0.9}},{"time":1.1944898999999998,"amplitude":0.03607756,"emphasis":{"amplitude":0.19509694999999996,"frequency":0.9}},{"time":1.277483,"amplitude":0.0098538904,"emphasis":{"amplitude":0.162317363,"frequency":0.9}},{"time":1.2864852999999998,"amplitude":0.027881384,"emphasis":{"amplitude":0.18485172999999996,"frequency":0.9}},{"time":1.3044898999999999,"amplitude":0.0167904632,"emphasis":{"amplitude":0.17098807899999996,"frequency":0.9}},{"time":1.3414966,"amplitude":0.013994152000000003,"emphasis":{"amplitude":0.16749268999999997,"frequency":0.9}},{"time":1.3844897999999999,"amplitude":0.020627774400000003,"emphasis":{"amplitude":0.12052156010526316,"frequency":0.5}},{"time":1.4185033999999999,"amplitude":0.010173528000000001,"emphasis":{"amplitude":0.10745375210526315,"frequency":0.5}},{"time":1.4314966999999998,"amplitude":0.0314264864,"emphasis":{"amplitude":0.13401995010526316,"frequency":0.5}},{"time":1.4474829999999999,"amplitude":0.0208716216,"emphasis":{"amplitude":0.12082636910526315,"frequency":0.5}},{"time":1.4504987999999999,"amplitude":0.05944916,"emphasis":{"amplitude":0.16904829210526315,"frequency":0.5}},{"time":1.4844898,"amplitude":0.0269057544,"emphasis":{"amplitude":0.12836903510526315,"frequency":0.5}},{"time":1.5295010999999998,"amplitude":0.0171122584,"emphasis":{"amplitude":0.11612716510526316,"frequency":0.5}},{"time":1.5395010999999998,"amplitude":0.0279693816,"emphasis":{"amplitude":0.12969856910526315,"frequency":0.5}},{"time":1.5944897999999998,"amplitude":0.023827675200000002,"emphasis":{"amplitude":0.17452143610526316,"frequency":0.9}},{"time":1.623492,"amplitude":0.014112150400000002,"emphasis":{"amplitude":0.16237703010526316,"frequency":0.9}},{"time":1.6365078999999998,"amplitude":0.028823134400000002,"emphasis":{"amplitude":0.18076576010526316,"frequency":0.9}},{"time":1.6765079999999999,"amplitude":0.016599716,"emphasis":{"amplitude":0.16548648710526317,"frequency":0.9}},{"time":1.7065078999999999,"amplitude":0.034937896,"emphasis":{"amplitude":0.18840921210526315,"frequency":0.9}},{"time":1.7285034,"amplitude":0.0200034472,"emphasis":{"amplitude":0.16974115110526317,"frequency":0.9}},{"time":1.7404989,"amplitude":0.03526564,"emphasis":{"amplitude":0.18881889210526312,"frequency":0.9}},{"time":1.7704988999999998,"amplitude":0.0182302984,"emphasis":{"amplitude":0.16752471510526318,"frequency":0.9}},{"time":1.8115192999999998,"amplitude":0.013930389600000002,"emphasis":{"amplitude":0.11214982910526317,"frequency":0.5}},{"time":1.8285033999999998,"amplitude":0.0456509856,"emphasis":{"amplitude":0.15180057410526315,"frequency":0.5}},{"time":1.8475057,"amplitude":0.0449507864,"emphasis":{"amplitude":0.15092532510526316,"frequency":0.5}},{"time":1.8715191999999998,"amplitude":0.025837624,"emphasis":{"amplitude":0.12703387210526315,"frequency":0.5}},{"time":1.9295238,"amplitude":0.019873856000000002,"emphasis":{"amplitude":0.11957916210526315,"frequency":0.5}},{"time":1.9315193,"amplitude":0.09253608,"emphasis":{"amplitude":0.21040694210526315,"frequency":0.5}},{"time":1.9475284,"amplitude":0.0529556272,"emphasis":{"amplitude":0.16093137610526315,"frequency":0.5}},{"time":1.9755102999999998,"amplitude":0.0274836032,"emphasis":{"amplitude":0.12909134610526316,"frequency":0.5}},{"time":1.9925169999999999,"amplitude":0.030038475999999998,"emphasis":{"amplitude":0.13228493710526315,"frequency":0.5}},{"time":1.9975283,"amplitude":0.057318536,"emphasis":{"amplitude":0.16638501210526316,"frequency":0.5}},{"time":2.012517,"amplitude":0.0349944352,"emphasis":{"amplitude":0.13847988610526316,"frequency":0.5}},{"time":2.0135147,"amplitude":0.033651904,"emphasis":{"amplitude":0.13680172210526315,"frequency":0.5}},{"time":2.0665077999999997,"amplitude":0.020105685600000003,"emphasis":{"amplitude":0.11986894910526316,"frequency":0.5}},{"time":2.0675057,"amplitude":0.113640984,"emphasis":{"amplitude":0.23678807210526315,"frequency":0.5}},{"time":2.0935147,"amplitude":0.043783748000000004,"emphasis":{"amplitude":0.14946652710526315,"frequency":0.5}},{"time":2.1205216,"amplitude":0.019020972,"emphasis":{"amplitude":0.11851305710526316,"frequency":0.5}},{"time":2.1485033,"amplitude":0.049979865600000006,"emphasis":{"amplitude":0.23615904252631575,"frequency":0.9}},{"time":2.1735146999999997,"amplitude":0.0219915208,"emphasis":{"amplitude":0.20117361152631577,"frequency":0.9}},{"time":2.1935148,"amplitude":0.0305208176,"emphasis":{"amplitude":0.21183523252631578,"frequency":0.9}},{"time":2.2435147,"amplitude":0.017637366400000003,"emphasis":{"amplitude":0.19573091852631577,"frequency":0.9}},{"time":2.2585034999999998,"amplitude":0.0427061976,"emphasis":{"amplitude":0.22706695752631578,"frequency":0.9}},{"time":2.3234920999999997,"amplitude":0.019352564000000003,"emphasis":{"amplitude":0.19787491552631578,"frequency":0.9}},{"time":2.3244898999999997,"amplitude":0.060320632,"emphasis":{"amplitude":0.24908500052631577,"frequency":0.9}},{"time":2.3464852,"amplitude":0.026585054400000002,"emphasis":{"amplitude":0.20691552852631578,"frequency":0.9}},{"time":2.3695011,"amplitude":0.017194207200000002,"emphasis":{"amplitude":0.11622960110526315,"frequency":0.5}},{"time":2.3704989,"amplitude":0.10166934400000001,"emphasis":{"amplitude":0.22182352210526315,"frequency":0.5}},{"time":2.4074828999999998,"amplitude":0.026771977600000003,"emphasis":{"amplitude":0.12820181410526316,"frequency":0.5}},{"time":2.423492,"amplitude":0.040114384,"emphasis":{"amplitude":0.14487982210526315,"frequency":0.5}},{"time":2.4714967,"amplitude":0.012362122400000002,"emphasis":{"amplitude":0.11018949510526316,"frequency":0.5}},{"time":2.5024944,"amplitude":0.0351708056,"emphasis":{"amplitude":0.13870034910526316,"frequency":0.5}},{"time":2.5764852,"amplitude":0.012862332000000002,"emphasis":{"amplitude":0.11081475710526317,"frequency":0.5}},{"time":2.5834694,"amplitude":0.054386536,"emphasis":{"amplitude":0.16272001210526316,"frequency":0.5}},{"time":2.6014738,"amplitude":0.030568592000000002,"emphasis":{"amplitude":0.13294758210526317,"frequency":0.5}},{"time":2.6024716999999997,"amplitude":0.133250328,"emphasis":{"amplitude":0.2612997521052632,"frequency":0.5}},{"time":2.6284807,"amplitude":0.050880472,"emphasis":{"amplitude":0.15833743210526316,"frequency":0.5}},{"time":2.6524715999999997,"amplitude":0.027758223999999998,"emphasis":{"amplitude":0.12943462210526316,"frequency":0.5}},{"time":2.6534693,"amplitude":0.051522756,"emphasis":{"amplitude":0.15914028710526315,"frequency":0.5}},{"time":2.7054649,"amplitude":0.0257874848,"emphasis":{"amplitude":0.12697119810526317,"frequency":0.5}},{"time":2.7064627,"amplitude":0.066023928,"emphasis":{"amplitude":0.17726675210526316,"frequency":0.5}},{"time":2.7434695,"amplitude":0.0191707376,"emphasis":{"amplitude":0.18712131673684207,"frequency":0.9}},{"time":2.7574604,"amplitude":0.0396333008,"emphasis":{"amplitude":0.21269952073684206,"frequency":0.9}},{"time":2.8284580999999998,"amplitude":0.01299966,"emphasis":{"amplitude":0.17940746973684207,"frequency":0.9}},{"time":2.8334694,"amplitude":0.025622592,"emphasis":{"amplitude":0.19518613473684207,"frequency":0.9}},{"time":2.8744672,"amplitude":0.015306742400000002,"emphasis":{"amplitude":0.1822913227368421,"frequency":0.9}},{"time":2.8814512,"amplitude":0.0441471312,"emphasis":{"amplitude":0.21834180873684206,"frequency":0.9}},{"time":2.9024489,"amplitude":0.022619008800000003,"emphasis":{"amplitude":0.19143165573684207,"frequency":0.9}},{"time":2.9164627,"amplitude":0.053369504000000005,"emphasis":{"amplitude":0.22986977473684206,"frequency":0.9}},{"time":2.9404535999999997,"amplitude":0.024585284,"emphasis":{"amplitude":0.19388949973684205,"frequency":0.9}},{"time":2.9464626999999997,"amplitude":0.0462989632,"emphasis":{"amplitude":0.22103159873684206,"frequency":0.9}},{"time":2.9954422,"amplitude":0.0107290304,"emphasis":{"amplitude":0.1765691827368421,"frequency":0.9}},{"time":3.0134467,"amplitude":0.0208113568,"emphasis":{"amplitude":0.12075103810526316,"frequency":0.5}},{"time":3.0144444,"amplitude":0.020257577600000003,"emphasis":{"amplitude":0.12005881410526317,"frequency":0.5}},{"time":3.0574377,"amplitude":0.013403347199999999,"emphasis":{"amplitude":0.11149102610526315,"frequency":0.5}},{"time":3.0704534,"amplitude":0.0325016856,"emphasis":{"amplitude":0.13536394910526317,"frequency":0.5}},{"time":3.0724489999999998,"amplitude":0.086750872,"emphasis":{"amplitude":0.20317543210526315,"frequency":0.5}},{"time":3.1134467,"amplitude":0.022639823200000003,"emphasis":{"amplitude":0.12303662110526317,"frequency":0.5}},{"time":3.1144445,"amplitude":0.060068148,"emphasis":{"amplitude":0.16982202710526315,"frequency":0.5}},{"time":3.1374377,"amplitude":0.0272296104,"emphasis":{"amplitude":0.12877385510526315,"frequency":0.5}},{"time":3.1714284999999998,"amplitude":0.012465164800000001,"emphasis":{"amplitude":0.11031829810526317,"frequency":0.5}},{"time":3.2214286999999997,"amplitude":0.0281752112,"emphasis":{"amplitude":0.12995585610526317,"frequency":0.5}},{"time":3.2754195,"amplitude":0.021531936,"emphasis":{"amplitude":0.12165176210526316,"frequency":0.5}},{"time":3.2764398999999997,"amplitude":0.06599712,"emphasis":{"amplitude":0.17723324210526314,"frequency":0.5}},{"time":3.2934239,"amplitude":0.0370200184,"emphasis":{"amplitude":0.14101186510526315,"frequency":0.5}},{"time":3.3324263,"amplitude":0.0196147592,"emphasis":{"amplitude":0.11925529110526317,"frequency":0.5}},{"time":3.3334241,"amplitude":0.050750208,"emphasis":{"amplitude":0.15817460210526316,"frequency":0.5}},{"time":3.3544217,"amplitude":0.0261417568,"emphasis":{"amplitude":0.12741403810526317,"frequency":0.5}},{"time":3.3734241,"amplitude":0.032750782400000004,"emphasis":{"amplitude":0.13567532010526315,"frequency":0.5}},{"time":3.4154193999999998,"amplitude":0.012804886400000002,"emphasis":{"amplitude":0.11074295010526317,"frequency":0.5}},{"time":3.453424,"amplitude":0.0321254104,"emphasis":{"amplitude":0.13489360510526316,"frequency":0.5}},{"time":3.4754194999999997,"amplitude":0.0163441208,"emphasis":{"amplitude":0.11516699310526315,"frequency":0.5}},{"time":3.4964173,"amplitude":0.033375832,"emphasis":{"amplitude":0.13645663210526315,"frequency":0.5}},{"time":3.5194104,"amplitude":0.0185617744,"emphasis":{"amplitude":0.11793906010526317,"frequency":0.5}},{"time":3.5324035,"amplitude":0.038680124,"emphasis":{"amplitude":0.14308699710526315,"frequency":0.5}},{"time":3.5924036999999998,"amplitude":0.013966832800000002,"emphasis":{"amplitude":0.11219538310526317,"frequency":0.5}},{"time":3.6114059,"amplitude":0.01782718,"emphasis":{"amplitude":0.11702081710526316,"frequency":0.5}},{"time":3.6153967,"amplitude":0.0700747072,"emphasis":{"amplitude":0.18233022610526314,"frequency":0.5}},{"time":3.6353967,"amplitude":0.06451391199999999,"emphasis":{"amplitude":0.17537923210526316,"frequency":0.5}},{"time":3.6724037,"amplitude":0.018223552,"emphasis":{"amplitude":0.11751628210526316,"frequency":0.5}},{"time":3.7173922,"amplitude":0.0224925696,"emphasis":{"amplitude":0.12285255410526316,"frequency":0.5}},{"time":3.7193877,"amplitude":0.041914444800000006,"emphasis":{"amplitude":0.14712989810526317,"frequency":0.5}},{"time":3.7753967999999998,"amplitude":0.025794437599999998,"emphasis":{"amplitude":0.12697988910526314,"frequency":0.5}},{"time":3.7773922,"amplitude":0.057473048000000006,"emphasis":{"amplitude":0.16657815210526317,"frequency":0.5}},{"time":3.8053968,"amplitude":0.022774932,"emphasis":{"amplitude":0.12320550710526315,"frequency":0.5}},{"time":3.8073924,"amplitude":0.067318528,"emphasis":{"amplitude":0.17888500210526315,"frequency":0.5}},{"time":3.822381,"amplitude":0.0416553464,"emphasis":{"amplitude":0.14680602510526317,"frequency":0.5}},{"time":3.8643763,"amplitude":0.0164763648,"emphasis":{"amplitude":0.11533229810526316,"frequency":0.5}},{"time":3.8953740999999997,"amplitude":0.043839248,"emphasis":{"amplitude":0.14953590210526316,"frequency":0.5}},{"time":3.955374,"amplitude":0.0171391784,"emphasis":{"amplitude":0.11616081510526316,"frequency":0.5}},{"time":3.9783673999999998,"amplitude":0.0227644312,"emphasis":{"amplitude":0.12319238110526315,"frequency":0.5}},{"time":3.9843764999999998,"amplitude":0.0548546,"emphasis":{"amplitude":0.16330509210526314,"frequency":0.5}},{"time":4.0133787,"amplitude":0.025169188,"emphasis":{"amplitude":0.12619832710526316,"frequency":0.5}},{"time":4.0143762,"amplitude":0.03004244,"emphasis":{"amplitude":0.13228989210526315,"frequency":0.5}},{"time":4.0403627,"amplitude":0.014206144000000002,"emphasis":{"amplitude":0.11249452210526317,"frequency":0.5}},{"time":4.1013603,"amplitude":0.026740941600000002,"emphasis":{"amplitude":0.12816301910526315,"frequency":0.5}},{"time":4.1093649999999995,"amplitude":0.07011940800000001,"emphasis":{"amplitude":0.18238610210526315,"frequency":0.5}},{"time":4.1463716999999995,"amplitude":0.0231468928,"emphasis":{"amplitude":0.12367045810526317,"frequency":0.5}},{"time":4.1553740999999995,"amplitude":0.0402884784,"emphasis":{"amplitude":0.14509744010526315,"frequency":0.5}},{"time":4.2023583,"amplitude":0.0210403072,"emphasis":{"amplitude":0.12103722610526316,"frequency":0.5}},{"time":4.212358,"amplitude":0.076789844,"emphasis":{"amplitude":0.19072414710526314,"frequency":0.5}},{"time":4.2373696999999995,"amplitude":0.030208888000000003,"emphasis":{"amplitude":0.13249795210526316,"frequency":0.5}},{"time":4.2613607,"amplitude":0.014120884,"emphasis":{"amplitude":0.11238794710526315,"frequency":0.5}},{"time":4.2703627,"amplitude":0.029011024000000003,"emphasis":{"amplitude":0.13100062210526317,"frequency":0.5}},{"time":4.2903627,"amplitude":0.015692556,"emphasis":{"amplitude":0.11435253710526316,"frequency":0.5}},{"time":4.3513603,"amplitude":0.015128028,"emphasis":{"amplitude":0.11364687710526317,"frequency":0.5}},{"time":4.3713603,"amplitude":0.035946008,"emphasis":{"amplitude":0.13966935210526316,"frequency":0.5}},{"time":4.3913377,"amplitude":0.019101352000000002,"emphasis":{"amplitude":0.11861353210526315,"frequency":0.5}},{"time":4.4003401,"amplitude":0.032636744,"emphasis":{"amplitude":0.13553277210526316,"frequency":0.5}},{"time":4.4403401,"amplitude":0.0115834296,"emphasis":{"amplitude":0.10921612910526315,"frequency":0.5}},{"time":4.4923353,"amplitude":0.025851339200000004,"emphasis":{"amplitude":0.12705101610526315,"frequency":0.5}},{"time":4.5253287,"amplitude":0.011758716,"emphasis":{"amplitude":0.10943523710526315,"frequency":0.5}},{"time":4.541338,"amplitude":0.0370811464,"emphasis":{"amplitude":0.14108827510526314,"frequency":0.5}},{"time":4.5983219,"amplitude":0.0168461784,"emphasis":{"amplitude":0.11579456510526315,"frequency":0.5}},{"time":4.6153287,"amplitude":0.025526312000000002,"emphasis":{"amplitude":0.12664473210526317,"frequency":0.5}},{"time":4.645328699999999,"amplitude":0.0145758688,"emphasis":{"amplitude":0.11295667810526316,"frequency":0.5}},{"time":4.6553287,"amplitude":0.032658688000000005,"emphasis":{"amplitude":0.13556020210526315,"frequency":0.5}},{"time":4.700317399999999,"amplitude":0.01710538,"emphasis":{"amplitude":0.11611856710526317,"frequency":0.5}},{"time":4.701315,"amplitude":0.061088184000000004,"emphasis":{"amplitude":0.17109707210526315,"frequency":0.5}},{"time":4.747324,"amplitude":0.0170546832,"emphasis":{"amplitude":0.11605519610526316,"frequency":0.5}},{"time":4.7643306999999995,"amplitude":0.032112352000000004,"emphasis":{"amplitude":0.13487728210526315,"frequency":0.5}},{"time":4.7843085,"amplitude":0.0202575088,"emphasis":{"amplitude":0.12005872810526316,"frequency":0.5}},{"time":4.7903177,"amplitude":0.047083304,"emphasis":{"amplitude":0.15359097210526315,"frequency":0.5}},{"time":4.8173242,"amplitude":0.036606536,"emphasis":{"amplitude":0.14049501210526316,"frequency":0.5}},{"time":4.8183217,"amplitude":0.0522238432,"emphasis":{"amplitude":0.16001664610526314,"frequency":0.5}},{"time":4.846304,"amplitude":0.0220798936,"emphasis":{"amplitude":0.12233670910526315,"frequency":0.5}},{"time":4.871315,"amplitude":0.0323912624,"emphasis":{"amplitude":0.13522592010526316,"frequency":0.5}},{"time":4.9193197,"amplitude":0.015972084,"emphasis":{"amplitude":0.11470194710526316,"frequency":0.5}},{"time":4.9353061,"amplitude":0.0373070064,"emphasis":{"amplitude":0.14137060010526314,"frequency":0.5}},{"time":4.951315,"amplitude":0.0314368608,"emphasis":{"amplitude":0.13403291810526316,"frequency":0.5}},{"time":4.9582992,"amplitude":0.081220768,"emphasis":{"amplitude":0.19626280210526315,"frequency":0.5}},{"time":4.993310699999999,"amplitude":0.022472873600000002,"emphasis":{"amplitude":0.12282793410526316,"frequency":0.5}},{"time":5.0133105,"amplitude":0.038036981600000005,"emphasis":{"amplitude":0.14228306910526317,"frequency":0.5}},{"time":5.0143087,"amplitude":0.0366285504,"emphasis":{"amplitude":0.14052253010526317,"frequency":0.5}},{"time":5.0412927,"amplitude":0.021084198400000004,"emphasis":{"amplitude":0.12109209010526317,"frequency":0.5}},{"time":5.0633107,"amplitude":0.0474514928,"emphasis":{"amplitude":0.15405120810526315,"frequency":0.5}},{"time":5.0873017,"amplitude":0.0315216512,"emphasis":{"amplitude":0.13413890610526316,"frequency":0.5}},{"time":5.0882993,"amplitude":0.05513328,"emphasis":{"amplitude":0.16365344210526314,"frequency":0.5}},{"time":5.1153056999999995,"amplitude":0.026090288000000003,"emphasis":{"amplitude":0.12734970210526317,"frequency":0.5}},{"time":5.142290099999999,"amplitude":0.049183264000000004,"emphasis":{"amplitude":0.15621592210526317,"frequency":0.5}},{"time":5.1702946999999995,"amplitude":0.020280754400000003,"emphasis":{"amplitude":0.12008778510526316,"frequency":0.5}},{"time":5.1982994,"amplitude":0.037739192000000005,"emphasis":{"amplitude":0.14191083210526315,"frequency":0.5}},{"time":5.2552834,"amplitude":0.021844292,"emphasis":{"amplitude":0.12204220710526317,"frequency":0.5}},{"time":5.2612927,"amplitude":0.036495521600000004,"emphasis":{"amplitude":0.14035624410526315,"frequency":0.5}},{"time":5.26229,"amplitude":0.13818112000000002,"emphasis":{"amplitude":0.2674632421052632,"frequency":0.5}},{"time":5.2872787,"amplitude":0.053441392000000004,"emphasis":{"amplitude":0.16153858210526315,"frequency":0.5}},{"time":5.3012923999999995,"amplitude":0.03276204,"emphasis":{"amplitude":0.13568939210526315,"frequency":0.5}},{"time":5.3422903999999996,"amplitude":0.016044828,"emphasis":{"amplitude":0.11479287710526315,"frequency":0.5}},{"time":5.3502722,"amplitude":0.0361435952,"emphasis":{"amplitude":0.13991633610526316,"frequency":0.5}},{"time":5.3932652999999995,"amplitude":0.017132868000000002,"emphasis":{"amplitude":0.11615292710526315,"frequency":0.5}},{"time":5.4132653,"amplitude":0.0406665472,"emphasis":{"amplitude":0.14557002610526315,"frequency":0.5}},{"time":5.441269699999999,"amplitude":0.0219365496,"emphasis":{"amplitude":0.12215752910526315,"frequency":0.5}},{"time":5.4802717,"amplitude":0.036909376,"emphasis":{"amplitude":0.14087356210526317,"frequency":0.5}},{"time":5.5232654,"amplitude":0.016364372,"emphasis":{"amplitude":0.11519230710526315,"frequency":0.5}},{"time":5.5262587,"amplitude":0.061644864,"emphasis":{"amplitude":0.17179292210526315,"frequency":0.5}},{"time":5.557256199999999,"amplitude":0.021528306400000002,"emphasis":{"amplitude":0.12164722510526316,"frequency":0.5}},{"time":5.5982537,"amplitude":0.0163910032,"emphasis":{"amplitude":0.11522559610526317,"frequency":0.5}},{"time":5.6352607,"amplitude":0.0283043416,"emphasis":{"amplitude":0.13011726910526317,"frequency":0.5}},{"time":5.6622447,"amplitude":0.068716508,"emphasis":{"amplitude":0.18063247710526315,"frequency":0.5}},{"time":5.6822447,"amplitude":0.0355558,"emphasis":{"amplitude":0.13918159210526315,"frequency":0.5}},{"time":5.7062583,"amplitude":0.027727612800000002,"emphasis":{"amplitude":0.12939635810526315,"frequency":0.5}},{"time":5.7072563,"amplitude":0.051176784,"emphasis":{"amplitude":0.15870782210526316,"frequency":0.5}},{"time":5.7492517,"amplitude":0.017659896,"emphasis":{"amplitude":0.11681171210526317,"frequency":0.5}},{"time":5.7542406999999995,"amplitude":0.0369811176,"emphasis":{"amplitude":0.14096323910526315,"frequency":0.5}},{"time":5.7842403,"amplitude":0.015315628000000001,"emphasis":{"amplitude":0.11388137710526317,"frequency":0.5}},{"time":5.7922446999999995,"amplitude":0.0302787096,"emphasis":{"amplitude":0.13258522910526316,"frequency":0.5}},{"time":5.8202497,"amplitude":0.016134385600000002,"emphasis":{"amplitude":0.11490482410526315,"frequency":0.5}},{"time":5.8272333,"amplitude":0.030585682400000005,"emphasis":{"amplitude":0.13296894510526316,"frequency":0.5}},{"time":5.9132424,"amplitude":0.014461888,"emphasis":{"amplitude":0.11281420210526316,"frequency":0.5}},{"time":5.9282313,"amplitude":0.060590544,"emphasis":{"amplitude":0.17047502210526316,"frequency":0.5}},{"time":5.9642401,"amplitude":0.022383779200000002,"emphasis":{"amplitude":0.12271656610526316,"frequency":0.5}},{"time":5.979229,"amplitude":0.0435678664,"emphasis":{"amplitude":0.14919667510526316,"frequency":0.5}},{"time":6.0132197,"amplitude":0.025417696000000004,"emphasis":{"amplitude":0.12650896210526316,"frequency":0.5}},{"time":6.0142403,"amplitude":0.0249330848,"emphasis":{"amplitude":0.12590319810526315,"frequency":0.5}},{"time":6.0562357,"amplitude":0.040467904,"emphasis":{"amplitude":0.14532172210526315,"frequency":0.5}},{"time":6.0852151,"amplitude":0.036768016,"emphasis":{"amplitude":0.14069686210526317,"frequency":0.5}},{"time":6.0902267,"amplitude":0.07902371200000001,"emphasis":{"amplitude":0.19351648210526315,"frequency":0.5}},{"time":6.1432199999999995,"amplitude":0.027836096,"emphasis":{"amplitude":0.12953196210526316,"frequency":0.5}},{"time":6.1532197,"amplitude":0.047179889600000004,"emphasis":{"amplitude":0.15371170410526316,"frequency":0.5}},{"time":6.1802266999999995,"amplitude":0.023166486400000002,"emphasis":{"amplitude":0.12369495010526316,"frequency":0.5}},{"time":6.2432197,"amplitude":0.036472988000000005,"emphasis":{"amplitude":0.14032807710526315,"frequency":0.5}},{"time":6.2702041,"amplitude":0.0228268176,"emphasis":{"amplitude":0.12327036410526315,"frequency":0.5}},{"time":6.3042177,"amplitude":0.0347210344,"emphasis":{"amplitude":0.13813813510526315,"frequency":0.5}},{"time":6.3572106999999995,"amplitude":0.026599204799999998,"emphasis":{"amplitude":0.12798584810526314,"frequency":0.5}},{"time":6.3582087,"amplitude":0.10428332000000001,"emphasis":{"amplitude":0.22509099210526315,"frequency":0.5}},{"time":6.3772107,"amplitude":0.0509530368,"emphasis":{"amplitude":0.15842813810526316,"frequency":0.5}},{"time":6.4002042,"amplitude":0.0233309072,"emphasis":{"amplitude":0.12390047610526317,"frequency":0.5}},{"time":6.4351927,"amplitude":0.039836052000000004,"emphasis":{"amplitude":0.14453190710526315,"frequency":0.5}},{"time":6.474195,"amplitude":0.026494112,"emphasis":{"amplitude":0.12785448210526315,"frequency":0.5}},{"time":6.4961907,"amplitude":0.05546546,"emphasis":{"amplitude":0.16406866710526316,"frequency":0.5}},{"time":6.4971881,"amplitude":0.10438252800000002,"emphasis":{"amplitude":0.22521500210526316,"frequency":0.5}},{"time":6.514195,"amplitude":0.060556040000000005,"emphasis":{"amplitude":0.17043189210526316,"frequency":0.5}},{"time":6.548185699999999,"amplitude":0.035338272,"emphasis":{"amplitude":0.13890968210526317,"frequency":0.5}},{"time":6.5501814,"amplitude":0.064730672,"emphasis":{"amplitude":0.17565018210526315,"frequency":0.5}},{"time":6.5831971,"amplitude":0.022253918400000003,"emphasis":{"amplitude":0.12255424010526317,"frequency":0.5}},{"time":6.5841952,"amplitude":0.09471565600000001,"emphasis":{"amplitude":0.21313141210526315,"frequency":0.5}},{"time":6.6131974,"amplitude":0.036009988,"emphasis":{"amplitude":0.13974932710526317,"frequency":0.5}},{"time":6.6551927,"amplitude":0.019779065600000003,"emphasis":{"amplitude":0.11946067410526315,"frequency":0.5}},{"time":6.657188,"amplitude":0.067882392,"emphasis":{"amplitude":0.17958983210526316,"frequency":0.5}},{"time":6.6871882,"amplitude":0.0324082824,"emphasis":{"amplitude":0.13524719510526315,"frequency":0.5}},{"time":6.7331743,"amplitude":0.025515264,"emphasis":{"amplitude":0.12663092210526317,"frequency":0.5}},{"time":6.7341724,"amplitude":0.10704124,"emphasis":{"amplitude":0.22853839210526314,"frequency":0.5}},{"time":6.7551697,"amplitude":0.050652168,"emphasis":{"amplitude":0.15805205210526316,"frequency":0.5}},{"time":6.7781857,"amplitude":0.066048656,"emphasis":{"amplitude":0.17729766210526315,"frequency":0.5}},{"time":6.8021769999999995,"amplitude":0.030181190400000002,"emphasis":{"amplitude":0.13246333010526315,"frequency":0.5}},{"time":6.8311792,"amplitude":0.017938572,"emphasis":{"amplitude":0.11716005710526317,"frequency":0.5}},{"time":6.8791607,"amplitude":0.046055864,"emphasis":{"amplitude":0.15230667210526316,"frequency":0.5}},{"time":6.9011564,"amplitude":0.026650648,"emphasis":{"amplitude":0.12805015210526316,"frequency":0.5}},{"time":6.9101587,"amplitude":0.05259332,"emphasis":{"amplitude":0.16047849210526316,"frequency":0.5}},{"time":6.9431519999999995,"amplitude":0.030716584000000005,"emphasis":{"amplitude":0.13313257210526316,"frequency":0.5}},{"time":6.9461677,"amplitude":0.049189184000000004,"emphasis":{"amplitude":0.15622332210526316,"frequency":0.5}},{"time":6.9981632,"amplitude":0.0199914336,"emphasis":{"amplitude":0.11972613410526317,"frequency":0.5}},{"time":7.0131517,"amplitude":0.054986292000000006,"emphasis":{"amplitude":0.16346970710526315,"frequency":0.5}},{"time":7.0141497,"amplitude":0.054803512,"emphasis":{"amplitude":0.16324123210526315,"frequency":0.5}},{"time":7.0611562999999995,"amplitude":0.0271443008,"emphasis":{"amplitude":0.12866721810526316,"frequency":0.5}},{"time":7.066145,"amplitude":0.0455663744,"emphasis":{"amplitude":0.15169481010526314,"frequency":0.5}},{"time":7.0951471999999995,"amplitude":0.0217716992,"emphasis":{"amplitude":0.12195146610526317,"frequency":0.5}},{"time":7.1061447,"amplitude":0.040724980800000005,"emphasis":{"amplitude":0.14564306810526315,"frequency":0.5}},{"time":7.128140699999999,"amplitude":0.020528992,"emphasis":{"amplitude":0.12039808210526315,"frequency":0.5}},{"time":7.1521539999999995,"amplitude":0.0387656304,"emphasis":{"amplitude":0.14319388010526315,"frequency":0.5}},{"time":7.1781407,"amplitude":0.034249108800000004,"emphasis":{"amplitude":0.13754822810526315,"frequency":0.5}},{"time":7.1931519999999995,"amplitude":0.0359328032,"emphasis":{"amplitude":0.13965284610526316,"frequency":0.5}},{"time":7.2341497,"amplitude":0.02323756,"emphasis":{"amplitude":0.12378379210526316,"frequency":0.5}},{"time":7.2451473,"amplitude":0.055331099200000004,"emphasis":{"amplitude":0.16390071610526316,"frequency":0.5}},{"time":7.2771427,"amplitude":0.028533634400000004,"emphasis":{"amplitude":0.13040388510526316,"frequency":0.5}},{"time":7.3071427,"amplitude":0.039935496,"emphasis":{"amplitude":0.14465621210526317,"frequency":0.5}},{"time":7.3481403,"amplitude":0.019057208000000003,"emphasis":{"amplitude":0.11855835210526317,"frequency":0.5}},{"time":7.3611337,"amplitude":0.043175960000000006,"emphasis":{"amplitude":0.14870679210526316,"frequency":0.5}},{"time":7.3951245,"amplitude":0.0176683008,"emphasis":{"amplitude":0.11682221810526316,"frequency":0.5}},{"time":7.4221316999999996,"amplitude":0.0214735136,"emphasis":{"amplitude":0.12157873410526315,"frequency":0.5}},{"time":7.4441271,"amplitude":0.039503656,"emphasis":{"amplitude":0.14411641210526316,"frequency":0.5}},{"time":7.4791156999999995,"amplitude":0.013758696,"emphasis":{"amplitude":0.11193521210526317,"frequency":0.5}},{"time":7.4881177,"amplitude":0.030873990400000002,"emphasis":{"amplitude":0.13332933010526316,"frequency":0.5}},{"time":7.5221317,"amplitude":0.012183398,"emphasis":{"amplitude":0.10996608960526316,"frequency":0.5}},{"time":7.524127,"amplitude":0.0227655216,"emphasis":{"amplitude":0.12319374410526315,"frequency":0.5}},{"time":7.6141043,"amplitude":0.011254843200000001,"emphasis":{"amplitude":0.10880539610526316,"frequency":0.5}},{"time":7.6331063,"amplitude":0.0218565512,"emphasis":{"amplitude":0.12205753110526316,"frequency":0.5}},{"time":7.6741041999999995,"amplitude":0.0111457824,"emphasis":{"amplitude":0.10866907010526317,"frequency":0.5}},{"time":7.679115299999999,"amplitude":0.025302176,"emphasis":{"amplitude":0.12636456210526315,"frequency":0.5}},{"time":7.7111111,"amplitude":0.020611224,"emphasis":{"amplitude":0.12050087210526317,"frequency":0.5}},{"time":7.7151017,"amplitude":0.090830192,"emphasis":{"amplitude":0.20827458210526315,"frequency":0.5}},{"time":7.7341042,"amplitude":0.0453233632,"emphasis":{"amplitude":0.15139104610526316,"frequency":0.5}},{"time":7.7690931,"amplitude":0.019531007200000002,"emphasis":{"amplitude":0.11915060110526315,"frequency":0.5}},{"time":7.7941041,"amplitude":0.0304789152,"emphasis":{"amplitude":0.13283548610526316,"frequency":0.5}},{"time":7.8111109999999995,"amplitude":0.018437966400000002,"emphasis":{"amplitude":0.11778430010526317,"frequency":0.5}},{"time":7.8441043,"amplitude":0.0232804152,"emphasis":{"amplitude":0.12383736110526317,"frequency":0.5}},{"time":7.849093,"amplitude":0.0390407864,"emphasis":{"amplitude":0.14353782510526317,"frequency":0.5}},{"time":7.8760997,"amplitude":0.020893195200000002,"emphasis":{"amplitude":0.12085333610526316,"frequency":0.5}},{"time":7.9080946999999995,"amplitude":0.0140208232,"emphasis":{"amplitude":0.11226287110526315,"frequency":0.5}},{"time":7.9210882,"amplitude":0.036533829600000005,"emphasis":{"amplitude":0.14040412910526315,"frequency":0.5}},{"time":7.9490927,"amplitude":0.017442424,"emphasis":{"amplitude":0.11653987210526315,"frequency":0.5}},{"time":7.997097699999999,"amplitude":0.0201532752,"emphasis":{"amplitude":0.11992843610526316,"frequency":0.5}},{"time":8.0000907,"amplitude":0.04029467440000001,"emphasis":{"amplitude":0.14510518510526316,"frequency":0.5}},{"time":8.0001357,"amplitude":0.04029467440000001,"emphasis":{"amplitude":0.14510518510526316,"frequency":0.5}},{"time":8.0001357,"amplitude":0.04029467440000001,"emphasis":{"amplitude":0.14510518510526316,"frequency":0.5}}],"frequency":[{"time":0,"frequency":0.16164587},{"time":0.03482993,"frequency":0.07904124},{"time":0.08126984,"frequency":0.33224326},{"time":0.12190475,"frequency":0.30429012},{"time":0.16253969,"frequency":0.13510798},{"time":0.21188208,"frequency":0.2632314},{"time":0.252517,"frequency":0.16232337},{"time":0.27283448,"frequency":0.36129153},{"time":0.28444445,"frequency":0.12565008},{"time":0.36571428,"frequency":0.23210268},{"time":0.37442178,"frequency":0.4265173},{"time":0.4063492,"frequency":0.2452539},{"time":0.43247166,"frequency":0.3687763},{"time":0.44988662,"frequency":0.18513083},{"time":0.505034,"frequency":0.38799393},{"time":0.5340589,"frequency":0.4114433},{"time":0.57469386,"frequency":0.42231023},{"time":0.62984127,"frequency":0.24006283},{"time":0.6501587,"frequency":0.44388756},{"time":0.69659865,"frequency":0.20444857},{"time":0.7198186,"frequency":0.37276715},{"time":0.7372336,"frequency":0.15392107},{"time":0.74884355,"frequency":0.3644922},{"time":0.7720635,"frequency":0.15618682},{"time":0.85043085,"frequency":0.3993009},{"time":0.8649433,"frequency":0.18609981},{"time":0.9200907,"frequency":0.16469851},{"time":0.9462131,"frequency":0.363904},{"time":0.98975056,"frequency":0.23829484},{"time":0.9984581,"frequency":0.4706188},{"time":1.0013604,"frequency":0.46084046},{"time":1.015873,"frequency":0.26615903},{"time":1.0478004,"frequency":0.1518337},{"time":1.0768254,"frequency":0.34216404},{"time":1.0826303,"frequency":0.22968926},{"time":1.1348752,"frequency":0.38321438},{"time":1.1522902,"frequency":0.25717637},{"time":1.2306576,"frequency":0.21209377},{"time":1.2596824,"frequency":0.3806181},{"time":1.3090248,"frequency":0.22916499},{"time":1.3380498,"frequency":0.23346636},{"time":1.3467573,"frequency":0.4236441},{"time":1.3757823,"frequency":0.26112974},{"time":1.4454421,"frequency":0.41258678},{"time":1.4512471,"frequency":0.3059821},{"time":1.526712,"frequency":0.3901177},{"time":1.5499319,"frequency":0.15216833},{"time":1.5905668,"frequency":0.3582193},{"time":1.6050793,"frequency":0.22882801},{"time":1.6108843,"frequency":0.44377217},{"time":1.6515192,"frequency":0.24230696},{"time":1.6631292,"frequency":0.44173607},{"time":1.7414966,"frequency":0.22981405},{"time":1.7473015,"frequency":0.3128708},{"time":1.7879364,"frequency":0.20795836},{"time":1.8053514,"frequency":0.3516742},{"time":1.8488888,"frequency":0.22023332},{"time":1.8953288,"frequency":0.41589004},{"time":1.9562811,"frequency":0.24550179},{"time":1.9998186,"frequency":0.34037507},{"time":2.002721,"frequency":0.3804047},{"time":2.0462584,"frequency":0.27551883},{"time":2.054966,"frequency":0.47168523},{"time":2.0839908,"frequency":0.25653338},{"time":2.1391382,"frequency":0.39490256},{"time":2.1594558,"frequency":0.23319364},{"time":2.243628,"frequency":0.42299485},{"time":2.2523355,"frequency":0.2634201},{"time":2.313288,"frequency":0.3872126},{"time":2.3655329,"frequency":0.29074752},{"time":2.3771427,"frequency":0.47411916},{"time":2.4061677,"frequency":0.30033508},{"time":2.4758275,"frequency":0.29518065},{"time":2.5222676,"frequency":0.43298444},{"time":2.5629025,"frequency":0.23694454},{"time":2.5919273,"frequency":0.4732022},{"time":2.6093423,"frequency":0.32637158},{"time":2.6441722,"frequency":0.3592941},{"time":2.684807,"frequency":0.20327127},{"time":2.690612,"frequency":0.4412919},{"time":2.7167346,"frequency":0.27373987},{"time":2.742857,"frequency":0.48588926},{"time":2.7515645,"frequency":0.3324394},{"time":2.8212245,"frequency":0.19742595},{"time":2.8415418,"frequency":0.36126015},{"time":2.8647618,"frequency":0.21613964},{"time":2.8792744,"frequency":0.43227753},{"time":2.9053967,"frequency":0.4574086},{"time":2.989569,"frequency":0.28376225},{"time":2.9982765,"frequency":0.36094207},{"time":3.001179,"frequency":0.3836229},{"time":3.0505214,"frequency":0.28516233},{"time":3.065034,"frequency":0.5125687},{"time":3.1056688,"frequency":0.44197732},{"time":3.1375964,"frequency":0.19920598},{"time":3.1492062,"frequency":0.40529478},{"time":3.1637187,"frequency":0.17390297},{"time":3.1782312,"frequency":0.3772932},{"time":3.2362812,"frequency":0.30088773},{"time":3.2798185,"frequency":0.44359934},{"time":3.3001359,"frequency":0.25722957},{"time":3.3204534,"frequency":0.48850757},{"time":3.3726983,"frequency":0.3211099},{"time":3.4017231,"frequency":0.42932448},{"time":3.4307482,"frequency":0.17870532},{"time":3.471383,"frequency":0.4070796},{"time":3.5526528,"frequency":0.16577244},{"time":3.6048977,"frequency":0.5123668},{"time":3.6745577,"frequency":0.22106145},{"time":3.6832652,"frequency":0.4229526},{"time":3.729705,"frequency":0.12329909},{"time":3.78195,"frequency":0.4216405},{"time":3.8109748,"frequency":0.15932982},{"time":3.8487074,"frequency":0.17967433},{"time":3.8748298,"frequency":0.3490914},{"time":3.8980498,"frequency":0.14463577},{"time":3.9270747,"frequency":0.18677603},{"time":3.9415872,"frequency":0.4408108},{"time":3.964807,"frequency":0.24596786},{"time":3.9996371,"frequency":0.24807973},{"time":4.0025396,"frequency":0.26421532},{"time":4.022857,"frequency":0.32823455},{"time":4.063492,"frequency":0.16806293},{"time":4.069297,"frequency":0.35866606},{"time":4.1505666,"frequency":0.24824677},{"time":4.1795917,"frequency":0.4083772},{"time":4.2115192,"frequency":0.24579366},{"time":4.257959,"frequency":0.44002345},{"time":4.281179,"frequency":0.25654396},{"time":4.3189116,"frequency":0.40349367},{"time":4.347936,"frequency":0.24830623},{"time":4.371156,"frequency":0.41970527},{"time":4.426304,"frequency":0.42229334},{"time":4.446621,"frequency":0.22918573},{"time":4.493061,"frequency":0.368289},{"time":4.5191836,"frequency":0.2746344},{"time":4.5424037,"frequency":0.47775444},{"time":4.574331,"frequency":0.36008117},{"time":4.632381,"frequency":0.37238798},{"time":4.6410885,"frequency":0.21035336},{"time":4.664308,"frequency":0.4133412},{"time":4.736871,"frequency":0.27488607},{"time":4.7455783,"frequency":0.5005404},{"time":4.768798,"frequency":0.22816122},{"time":4.7775054,"frequency":0.41257975},{"time":4.8239455,"frequency":0.23217809},{"time":4.8732877,"frequency":0.40181738},{"time":4.931338,"frequency":0.14511606},{"time":4.9516554,"frequency":0.3643783},{"time":4.998095,"frequency":0.37556303},{"time":5.0009975,"frequency":0.38725376},{"time":5.009705,"frequency":0.20990176},{"time":5.032925,"frequency":0.3674528},{"time":5.064852,"frequency":0.20374852},{"time":5.090975,"frequency":0.20358118},{"time":5.1403174,"frequency":0.3680064},{"time":5.160635,"frequency":0.16654912},{"time":5.2070746,"frequency":0.28555617},{"time":5.2360997,"frequency":0.16880576},{"time":5.253515,"frequency":0.42050686},{"time":5.2941494,"frequency":0.17653409},{"time":5.3463945,"frequency":0.27216172},{"time":5.366712,"frequency":0.15515669},{"time":5.442177,"frequency":0.13581824},{"time":5.453787,"frequency":0.33071586},{"time":5.5060315,"frequency":0.2457915},{"time":5.5292516,"frequency":0.449792},{"time":5.5698867,"frequency":0.23912537},{"time":5.5785937,"frequency":0.41844198},{"time":5.5989113,"frequency":0.20619419},{"time":5.648254,"frequency":0.41552484},{"time":5.6888885,"frequency":0.18615541},{"time":5.755646,"frequency":0.42808837},{"time":5.7730613,"frequency":0.2915222},{"time":5.8398185,"frequency":0.24690597},{"time":5.8572335,"frequency":0.38825837},{"time":5.903673,"frequency":0.12963057},{"time":5.9297957,"frequency":0.4111371},{"time":5.9559183,"frequency":0.19325463},{"time":5.9994555,"frequency":0.18469754},{"time":6.002358,"frequency":0.18397933},{"time":6.031383,"frequency":0.11832634},{"time":6.1010427,"frequency":0.36647725},{"time":6.19102,"frequency":0.12495365},{"time":6.2635827,"frequency":0.19403069},{"time":6.2839003,"frequency":0.32966918},{"time":6.3216324,"frequency":0.17763744},{"time":6.359365,"frequency":0.3793384},{"time":6.3912926,"frequency":0.18293393},{"time":6.426122,"frequency":0.14578848},{"time":6.443537,"frequency":0.3254309},{"time":6.4667573,"frequency":0.1454168},{"time":6.475465,"frequency":0.3931433},{"time":6.5393195,"frequency":0.20728578},{"time":6.559637,"frequency":0.4410309},{"time":6.582857,"frequency":0.14265057},{"time":6.6496143,"frequency":0.3943001},{"time":6.6786394,"frequency":0.38201368},{"time":6.701859,"frequency":0.12601903},{"time":6.7221766,"frequency":0.5141153},{"time":6.7570066,"frequency":0.11562187},{"time":6.7744217,"frequency":0.30489123},{"time":6.7947392,"frequency":0.11752208},{"time":6.846984,"frequency":0.12707393},{"time":6.8614964,"frequency":0.5266832},{"time":6.8905215,"frequency":0.22816165},{"time":6.905034,"frequency":0.34676754},{"time":6.936961,"frequency":0.08348665},{"time":6.980499,"frequency":0.28991523},{"time":6.997914,"frequency":0.11204033},{"time":7.0008163,"frequency":0.116552845},{"time":7.053061,"frequency":0.1800335},{"time":7.070476,"frequency":0.3473461},{"time":7.1343307,"frequency":0.11380435},{"time":7.169161,"frequency":0.3910238},{"time":7.192381,"frequency":0.18274075},{"time":7.2126985,"frequency":0.42806575},{"time":7.2214055,"frequency":0.20505765},{"time":7.259138,"frequency":0.29617703},{"time":7.270748,"frequency":0.13827127},{"time":7.3113832,"frequency":0.24311934},{"time":7.3897505,"frequency":0.13249683},{"time":7.4187756,"frequency":0.39328295},{"time":7.43619,"frequency":0.19877729},{"time":7.45941,"frequency":0.3469116},{"time":7.4739227,"frequency":0.12157556},{"time":7.5493875,"frequency":0.3743561},{"time":7.5609975,"frequency":0.21722111},{"time":7.6190476,"frequency":0.3932044},{"time":7.6654873,"frequency":0.15144546},{"time":7.674195,"frequency":0.4476908},{"time":7.69161,"frequency":0.21252868},{"time":7.71483,"frequency":0.4471707},{"time":7.7554646,"frequency":0.25033537},{"time":7.769977,"frequency":0.4407468},{"time":7.810612,"frequency":0.23772335},{"time":7.897687,"frequency":0.18589738},{"time":7.9238095,"frequency":0.4498669},{"time":7.9441266,"frequency":0.21537851},{"time":7.976054,"frequency":0.22348581}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.haptic.meta new file mode 100644 index 0000000..e54ca91 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c3ce4ac22ce844496866ad9499f57d48 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.wav new file mode 100644 index 0000000..ca0ec86 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.wav.meta new file mode 100644 index 0000000..fa47461 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RaininCar1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 659cfa07980ee49258c6d22926070cdb +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.haptic new file mode 100644 index 0000000..23550be --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Rain on Umbrella 1.wav","project":"Rain on Umbrella 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.011033468},{"time":0.10748299,"amplitude":0.073063925},{"time":0.11111111,"amplitude":0.05400455,"emphasis":{"amplitude":0.15429871,"frequency":0.2717607}},{"time":0.19591837,"amplitude":0.06776544},{"time":0.19637188,"amplitude":0.07950825,"emphasis":{"amplitude":0.22716643,"frequency":0.9525874}},{"time":0.2340136,"amplitude":0.094266765},{"time":0.24126984,"amplitude":0.1964944},{"time":0.261678,"amplitude":0.091760516},{"time":0.2984127,"amplitude":0.048652653},{"time":0.32471657,"amplitude":0.1820957},{"time":0.35464853,"amplitude":0.062161893},{"time":0.35510203,"amplitude":0.05226218,"emphasis":{"amplitude":0.14932051,"frequency":0.9133075}},{"time":0.39501134,"amplitude":0.05106032},{"time":0.39546487,"amplitude":0.12242327,"emphasis":{"amplitude":0.34978077,"frequency":0.97469836}},{"time":0.4376417,"amplitude":0.070605},{"time":0.48390022,"amplitude":0.09878906},{"time":0.48435375,"amplitude":0.1316977,"emphasis":{"amplitude":0.37627915,"frequency":0.5}},{"time":0.523356,"amplitude":0.11562607},{"time":0.553288,"amplitude":0.050500587},{"time":0.5537415,"amplitude":0.12508662,"emphasis":{"amplitude":0.35739034,"frequency":0.9753719}},{"time":0.5714286,"amplitude":0.17709656},{"time":0.6185941,"amplitude":0.044856805},{"time":0.6344671,"amplitude":0.19577366},{"time":0.66303855,"amplitude":0.07633076},{"time":0.6634921,"amplitude":0.08583467,"emphasis":{"amplitude":0.24524191,"frequency":0.9552564}},{"time":0.68480724,"amplitude":0.124209784},{"time":0.70068026,"amplitude":0.15043154},{"time":0.706576,"amplitude":0.11317417,"emphasis":{"amplitude":0.32335478,"frequency":0.439063}},{"time":0.7260771,"amplitude":0.1583415},{"time":0.7265306,"amplitude":0.09724844,"emphasis":{"amplitude":0.27785268,"frequency":0.9367668}},{"time":0.74603176,"amplitude":0.13007914},{"time":0.76870745,"amplitude":0.10034506},{"time":0.769161,"amplitude":0.12116422,"emphasis":{"amplitude":0.34618348,"frequency":0.96925616}},{"time":0.8095238,"amplitude":0.09284699},{"time":0.8176871,"amplitude":0.085972674,"emphasis":{"amplitude":0.24563622,"frequency":0.13668059}},{"time":0.846712,"amplitude":0.09738216},{"time":0.8471655,"amplitude":0.14111654,"emphasis":{"amplitude":0.40319014,"frequency":0.97528476}},{"time":0.8671202,"amplitude":0.18460448},{"time":0.91020405,"amplitude":0.078374095},{"time":0.9106576,"amplitude":0.094837844,"emphasis":{"amplitude":0.27096528,"frequency":0.96075714}},{"time":0.95011336,"amplitude":0.07058913},{"time":0.9809524,"amplitude":0.08365065},{"time":0.9814059,"amplitude":0.08611808,"emphasis":{"amplitude":0.24605167,"frequency":0.9534631}},{"time":1.0367347,"amplitude":0.069218546},{"time":1.0539683,"amplitude":0.13517287},{"time":1.0780045,"amplitude":0.08451549},{"time":1.0784581,"amplitude":0.18082547,"emphasis":{"amplitude":0.51664424,"frequency":0.5}},{"time":1.1528344,"amplitude":0.116539656,"emphasis":{"amplitude":0.24041141210526318,"frequency":0.5}},{"time":1.230839,"amplitude":0.041920036},{"time":1.2548753,"amplitude":0.0637864},{"time":1.2553288,"amplitude":0.065818734,"emphasis":{"amplitude":0.18805353,"frequency":0.9391861}},{"time":1.29161,"amplitude":0.05616729},{"time":1.2920635,"amplitude":0.07245295,"emphasis":{"amplitude":0.20700842,"frequency":0.9498974}},{"time":1.3269842,"amplitude":0.11182859},{"time":1.3977324,"amplitude":0.054762565},{"time":1.4077097,"amplitude":0.2129015},{"time":1.4312925,"amplitude":0.105124176},{"time":1.431746,"amplitude":0.12893936,"emphasis":{"amplitude":0.3683982,"frequency":0.5}},{"time":1.4521542,"amplitude":0.17609107},{"time":1.5097506,"amplitude":0.07065492},{"time":1.5102041,"amplitude":0.13475528,"emphasis":{"amplitude":0.3850151,"frequency":0.5}},{"time":1.5419501,"amplitude":0.120212555},{"time":1.5714285,"amplitude":0.067044},{"time":1.6303855,"amplitude":0.07738166},{"time":1.6312925,"amplitude":0.119398974,"emphasis":{"amplitude":0.3411399,"frequency":0.94269526}},{"time":1.6671202,"amplitude":0.09073339},{"time":1.6675737,"amplitude":0.07388483,"emphasis":{"amplitude":0.21109952,"frequency":0.93721575}},{"time":1.7124716,"amplitude":0.05415062},{"time":1.735601,"amplitude":0.038877748},{"time":1.7564626,"amplitude":0.16142456},{"time":1.7877551,"amplitude":0.061088238},{"time":1.8367347,"amplitude":0.05895271},{"time":1.8439909,"amplitude":0.08852658,"emphasis":{"amplitude":0.25293308,"frequency":0.38614228}},{"time":1.8721088,"amplitude":0.087698035},{"time":1.895238,"amplitude":0.13482147},{"time":1.9410431,"amplitude":0.044440337},{"time":1.9419501,"amplitude":0.10302296,"emphasis":{"amplitude":0.29435134,"frequency":0.939521}},{"time":1.9755102,"amplitude":0.084616035},{"time":1.9759637,"amplitude":0.062107682,"emphasis":{"amplitude":0.17745052,"frequency":0.9186049}},{"time":2.0099773,"amplitude":0.057479013},{"time":2.0136054,"amplitude":0.055003285,"emphasis":{"amplitude":0.15715224,"frequency":0.40218455}},{"time":2.0417233,"amplitude":0.074893266},{"time":2.0453515,"amplitude":0.08465693,"emphasis":{"amplitude":0.24187694,"frequency":0.6398003}},{"time":2.0693877,"amplitude":0.09618959},{"time":2.0979593,"amplitude":0.1320025},{"time":2.136508,"amplitude":0.066573344},{"time":2.1369615,"amplitude":0.084884115,"emphasis":{"amplitude":0.24252605,"frequency":0.95704675}},{"time":2.1741498,"amplitude":0.072055005},{"time":2.1818595,"amplitude":0.09229459,"emphasis":{"amplitude":0.26369885,"frequency":0.5}},{"time":2.2058957,"amplitude":0.12434922},{"time":2.2063491,"amplitude":0.11207879,"emphasis":{"amplitude":0.32022512,"frequency":0.5}},{"time":2.2217686,"amplitude":0.1785366},{"time":2.273923,"amplitude":0.0568881},{"time":2.2920635,"amplitude":0.19895148},{"time":2.3147392,"amplitude":0.086855054},{"time":2.382313,"amplitude":0.087597944},{"time":2.3827665,"amplitude":0.1129733,"emphasis":{"amplitude":0.32278088,"frequency":0.9678634}},{"time":2.404535,"amplitude":0.13742684},{"time":2.4408164,"amplitude":0.049843237},{"time":2.486168,"amplitude":0.07595865751578947,"emphasis":{"amplitude":0.2081062166315789,"frequency":0.5}},{"time":2.538322,"amplitude":0.056130543},{"time":2.5546486,"amplitude":0.14009419},{"time":2.555102,"amplitude":0.18481097,"emphasis":{"amplitude":0.5280313,"frequency":0.5}},{"time":2.580499,"amplitude":0.1967967},{"time":2.6095238,"amplitude":0.08929362},{"time":2.6099772,"amplitude":0.09532284,"emphasis":{"amplitude":0.27235097,"frequency":0.9587136}},{"time":2.6444445,"amplitude":0.094879605},{"time":2.7079365,"amplitude":0.0888755},{"time":2.70839,"amplitude":0.09221309,"emphasis":{"amplitude":0.26346597,"frequency":0.95671165}},{"time":2.7464852,"amplitude":0.06638065},{"time":2.7492063,"amplitude":0.050634075,"emphasis":{"amplitude":0.14466879,"frequency":0.42843822}},{"time":2.817687,"amplitude":0.072788104},{"time":2.8195012,"amplitude":0.078136705,"emphasis":{"amplitude":0.22324772,"frequency":0.7993894}},{"time":2.862585,"amplitude":0.05108465},{"time":2.9292517,"amplitude":0.055723436},{"time":2.9297051,"amplitude":0.06971296,"emphasis":{"amplitude":0.19917989,"frequency":0.94731885}},{"time":2.9659865,"amplitude":0.06762842},{"time":2.96644,"amplitude":0.06560261,"emphasis":{"amplitude":0.18743601,"frequency":0.93692315}},{"time":3.014966,"amplitude":0.046444915},{"time":3.0380952,"amplitude":0.06828455},{"time":3.0385487,"amplitude":0.12657866,"emphasis":{"amplitude":0.3616533,"frequency":0.5}},{"time":3.0603175,"amplitude":0.15410507},{"time":3.082086,"amplitude":0.06959525},{"time":3.1505668,"amplitude":0.0505455},{"time":3.152381,"amplitude":0.038924128,"emphasis":{"amplitude":0.11121179,"frequency":0.50658476}},{"time":3.2244897,"amplitude":0.047753558},{"time":3.2249434,"amplitude":0.03892811,"emphasis":{"amplitude":0.111223176,"frequency":0.8809831}},{"time":3.2984128,"amplitude":0.04897374},{"time":3.3705215,"amplitude":0.09319909},{"time":3.370975,"amplitude":0.11287061,"emphasis":{"amplitude":0.32248747,"frequency":0.5}},{"time":3.4122448,"amplitude":0.06902248},{"time":3.4426303,"amplitude":0.15583558},{"time":3.4693878,"amplitude":0.082687825},{"time":3.4698412,"amplitude":0.09257521,"emphasis":{"amplitude":0.2645006,"frequency":0.5}},{"time":3.5088434,"amplitude":0.108100034},{"time":3.5297053,"amplitude":0.14788988},{"time":3.5578232,"amplitude":0.055912428},{"time":3.5845804,"amplitude":0.055985663},{"time":3.5927439,"amplitude":0.15530972},{"time":3.6172335,"amplitude":0.072153896},{"time":3.617687,"amplitude":0.07432242,"emphasis":{"amplitude":0.21234976,"frequency":0.9460939}},{"time":3.6390023,"amplitude":0.114847004},{"time":3.6394558,"amplitude":0.20361438,"emphasis":{"amplitude":0.5817554,"frequency":0.5}},{"time":3.6643991,"amplitude":0.2071059},{"time":3.689796,"amplitude":0.07200707},{"time":3.7192743,"amplitude":0.10335001},{"time":3.765533,"amplitude":0.032657623},{"time":3.7764173,"amplitude":0.13062291},{"time":3.8063493,"amplitude":0.08691947},{"time":3.8068027,"amplitude":0.11475751,"emphasis":{"amplitude":0.3278786,"frequency":0.96863365}},{"time":3.8253968,"amplitude":0.16442959},{"time":3.8585033,"amplitude":0.06613023},{"time":3.8589568,"amplitude":0.05103918,"emphasis":{"amplitude":0.14582624,"frequency":0.9051954}},{"time":3.8984127,"amplitude":0.07965963},{"time":3.8988662,"amplitude":0.1399521,"emphasis":{"amplitude":0.39986315,"frequency":0.97639585}},{"time":3.9310658,"amplitude":0.12242984},{"time":3.9882085,"amplitude":0.05525789},{"time":3.9891157,"amplitude":0.14211756,"emphasis":{"amplitude":0.40605018,"frequency":0.5}},{"time":4.011791,"amplitude":0.16584535},{"time":4.0358276,"amplitude":0.16337678},{"time":4.071202,"amplitude":0.057489444},{"time":4.095238,"amplitude":0.07881917},{"time":4.096145,"amplitude":0.13325047,"emphasis":{"amplitude":0.38071564,"frequency":0.5}},{"time":4.123356,"amplitude":0.13681355},{"time":4.1238093,"amplitude":0.077256694,"emphasis":{"amplitude":0.22073342,"frequency":0.9099639}},{"time":4.160998,"amplitude":0.057622775},{"time":4.1614513,"amplitude":0.0513938,"emphasis":{"amplitude":0.14683942,"frequency":0.91530615}},{"time":4.2712016,"amplitude":0.052774463},{"time":4.273923,"amplitude":0.051780645,"emphasis":{"amplitude":0.1479447,"frequency":0.5278102}},{"time":4.3052154,"amplitude":0.062564746},{"time":4.357823,"amplitude":0.046138514},{"time":4.3782315,"amplitude":0.10086771},{"time":4.417687,"amplitude":0.063028835},{"time":4.422222,"amplitude":0.06545921,"emphasis":{"amplitude":0.18702629,"frequency":0.39940342}},{"time":4.4630384,"amplitude":0.06966896},{"time":4.4657598,"amplitude":0.076039426,"emphasis":{"amplitude":0.21725549,"frequency":0.6938941}},{"time":4.482993,"amplitude":0.11181332},{"time":4.5346937,"amplitude":0.0565156},{"time":4.535147,"amplitude":0.06671375,"emphasis":{"amplitude":0.1906107,"frequency":0.943642}},{"time":4.5913835,"amplitude":0.065411},{"time":4.608617,"amplitude":0.08176162},{"time":4.6090703,"amplitude":0.086007126,"emphasis":{"amplitude":0.24573465,"frequency":0.95390916}},{"time":4.640816,"amplitude":0.09829734},{"time":4.641723,"amplitude":0.11481795,"emphasis":{"amplitude":0.3280513,"frequency":0.9342168}},{"time":4.666213,"amplitude":0.14468825},{"time":4.6666665,"amplitude":0.12574323,"emphasis":{"amplitude":0.35926634,"frequency":0.5}},{"time":4.687982,"amplitude":0.17251727},{"time":4.7210884,"amplitude":0.18571922},{"time":4.7528343,"amplitude":0.07353071},{"time":4.7827663,"amplitude":0.08285059},{"time":4.785941,"amplitude":0.20911457},{"time":4.8213153,"amplitude":0.05708749},{"time":4.8453517,"amplitude":0.1044096},{"time":4.8911567,"amplitude":0.07808613},{"time":4.89161,"amplitude":0.27229850400000005,"emphasis":{"amplitude":0.34037313,"frequency":0.5}},{"time":4.9129252,"amplitude":0.15290312},{"time":4.937415,"amplitude":0.115734115},{"time":4.937778,"amplitude":0.115734115}],"frequency":[{"time":0,"frequency":0.39222002},{"time":0.029698962811791244,"frequency":0.7041159289473683},{"time":0.041317266811791244,"frequency":0.5990191989473683},{"time":0.12845451881179126,"frequency":0.47739329894736837},{"time":0.14007282281179123,"frequency":0.6335534389473684},{"time":0.17492772281179125,"frequency":0.5979822289473684},{"time":0.23882837281179126,"frequency":0.6811766789473683},{"time":0.28530159281179124,"frequency":0.46611692894736845},{"time":0.29691988281179127,"frequency":0.6382091589473684},{"time":0.32596564281179125,"frequency":0.6909294089473683},{"time":0.34339308281179126,"frequency":0.5625333189473685},{"time":0.38405713281179127,"frequency":0.5227385189473684},{"time":0.3956754628117912,"frequency":0.7372529489473684},{"time":0.43053033281179126,"frequency":0.5374487289473684},{"time":0.4886218328117912,"frequency":0.6980886489473683},{"time":0.5467133228117912,"frequency":0.6100909789473684},{"time":0.5699499628117912,"frequency":0.7272902789473683},{"time":0.6164231628117912,"frequency":0.47508119894736844},{"time":0.6396597328117912,"frequency":0.6789846389473684},{"time":0.6861329628117913,"frequency":0.7042969489473684},{"time":0.7500335628117912,"frequency":0.5916644789473684},{"time":0.7616519028117913,"frequency":0.6917022489473683},{"time":0.8720257628117912,"frequency":0.6448028989473684},{"time":0.9010715128117912,"frequency":0.7039084389473683},{"time":0.9359264028117913,"frequency":0.5769305789473684},{"time":0.9823996128117912,"frequency":0.6867479789473684},{"time":1.0056362628117912,"frequency":0.5496430989473684},{"time":1.0985826628117912,"frequency":0.7312124789473683},{"time":1.1160100628117913,"frequency":0.6145445989473683},{"time":1.1334375628117912,"frequency":0.7415600389473683},{"time":1.1682924628117912,"frequency":0.4879205789473684},{"time":1.1857198628117913,"frequency":0.6143560389473683},{"time":1.2438113628117913,"frequency":0.4409273289473684},{"time":1.2554296628117911,"frequency":0.6097070589473683},{"time":1.2960937628117912,"frequency":0.7165493389473684},{"time":1.3483760628117913,"frequency":0.4274734489473684},{"time":1.3774218628117914,"frequency":0.6111733789473683},{"time":1.4064675628117913,"frequency":0.3493943489473684},{"time":1.4413224628117913,"frequency":0.5234506989473684},{"time":1.4529408628117912,"frequency":0.4067253189473684},{"time":1.4994139628117913,"frequency":0.4646856489473684},{"time":1.5110322628117911,"frequency":0.6393041589473684},{"time":1.5342688628117913,"frequency":0.44809671894736847},{"time":1.5633146628117913,"frequency":0.4019381989473684},{"time":1.5807421628117913,"frequency":0.5450425789473684},{"time":1.6562611628117911,"frequency":0.48692801894736837},{"time":1.6736885628117912,"frequency":0.6708280789473683},{"time":1.7027342628117912,"frequency":0.3754416189473684},{"time":1.7317799628117911,"frequency":0.3849616489473684},{"time":1.7608257628117912,"frequency":0.5962790189473683},{"time":1.7898714628117913,"frequency":0.35195540894736843},{"time":1.8305355628117912,"frequency":0.47303965894736844},{"time":1.8537721628117911,"frequency":0.6862184389473683},{"time":1.8886270628117912,"frequency":0.5158026789473684},{"time":1.9292911628117912,"frequency":0.45848160894736845},{"time":1.9525276628117914,"frequency":0.6540220789473683},{"time":2.004810162811791,"frequency":0.47505837894736846},{"time":2.0222375628117915,"frequency":0.6640899189473684},{"time":2.062901562811791,"frequency":0.6377595989473683},{"time":2.0745198628117913,"frequency":0.4493869189473684},{"time":2.091947362811791,"frequency":0.6078908389473684},{"time":2.126802262811791,"frequency":0.5403622089473684},{"time":2.1442296628117914,"frequency":0.6634076189473683},{"time":2.161657162811791,"frequency":0.5008907589473685},{"time":2.1848936628117914,"frequency":0.5995636289473684},{"time":2.225557862811791,"frequency":0.4025316089473684},{"time":2.2720310628117915,"frequency":0.5578822789473684},{"time":2.3359315628117914,"frequency":0.48042833894736847},{"time":2.359168362811791,"frequency":0.6152875089473684},{"time":2.3998323628117912,"frequency":0.6264737489473684},{"time":2.411450662811791,"frequency":0.41930907894736846},{"time":2.446305562811791,"frequency":0.35014682894736837},{"time":2.4695420628117914,"frequency":0.5487567189473684},{"time":2.4869694628117913,"frequency":0.39796222894736843},{"time":2.4985878628117915,"frequency":0.5643194289473684},{"time":2.533442762811791,"frequency":0.38462395894736845},{"time":2.5508701628117914,"frequency":0.6032641789473684},{"time":2.5857250628117914,"frequency":0.5738969789473685},{"time":2.603152562811791,"frequency":0.3891076789473684},{"time":2.6205799628117914,"frequency":0.6633539189473684},{"time":2.6496257628117914,"frequency":0.4542749189473684},{"time":2.6902897628117914,"frequency":0.3679158989473684},{"time":2.765808862811791,"frequency":0.5045088489473685},{"time":2.789045362811791,"frequency":0.36468454894736846},{"time":2.829709362811791,"frequency":0.6916184789473684},{"time":2.8471367628117914,"frequency":0.35266664894736843},{"time":2.881991862811791,"frequency":0.43438947894736846},{"time":2.911037362811791,"frequency":0.37201798894736837},{"time":2.928464962811791,"frequency":0.4913985789473684},{"time":2.957510762811791,"frequency":0.4136594489473684},{"time":2.9749381628117915,"frequency":0.5848708989473684},{"time":3.027220562811791,"frequency":0.43216887894736844},{"time":3.056266362811791,"frequency":0.6166503089473684},{"time":3.0672314,"frequency":0.14553085},{"time":3.085311962811791,"frequency":0.5343312589473684},{"time":3.143403562811791,"frequency":0.41242184894736844},{"time":3.1550219628117913,"frequency":0.5946841489473683},{"time":3.1898768628117913,"frequency":0.5891863989473685},{"time":3.2073043628117914,"frequency":0.39166120894736844},{"time":3.265395662811791,"frequency":0.6217129789473683},{"time":3.294441462811791,"frequency":0.43711363894736843},{"time":3.3176779628117914,"frequency":0.5366132789473684},{"time":3.3467238628117912,"frequency":0.39597656894736843},{"time":3.3757696628117912,"frequency":0.6343041089473683},{"time":3.439670162811791,"frequency":0.39957980894736844},{"time":3.486143362811791,"frequency":0.6634005789473684},{"time":3.5093798628117914,"frequency":0.5131792089473685},{"time":3.532616662811791,"frequency":0.5801450589473685},{"time":3.555853162811791,"frequency":0.32658728894736844},{"time":3.5732805628117914,"frequency":0.5729855789473685},{"time":3.6023263628117914,"frequency":0.6113008589473684},{"time":3.613944762811791,"frequency":0.43202435894736846},{"time":3.648799662811791,"frequency":0.7636178089473683},{"time":3.683654562811791,"frequency":0.4828878789473684},{"time":3.7185093628117913,"frequency":0.6236669989473683},{"time":3.747555362811791,"frequency":0.4894436789473684},{"time":3.8172650628117912,"frequency":0.7051326789473683},{"time":3.8753563628117913,"frequency":0.5232317389473684},{"time":3.8927838628117915,"frequency":0.3901082689473684},{"time":3.945066262811791,"frequency":0.5575877389473685},{"time":3.9734588,"frequency":0.13762508},{"time":3.991539462811791,"frequency":0.5243157789473685},{"time":4.020585362811791,"frequency":0.5473238789473684},{"time":4.032203362811791,"frequency":0.7077714189473684},{"time":4.055440362811791,"frequency":0.4922525289473684},{"time":4.101913362811791,"frequency":0.6509921789473684},{"time":4.154195362811791,"frequency":0.4547126289473684},{"time":4.165814362811791,"frequency":0.5873115089473684},{"time":4.206477862811791,"frequency":0.5792700589473684},{"time":4.2239053628117915,"frequency":0.41431629894736843},{"time":4.241332762811791,"frequency":0.6544348789473683},{"time":4.258760362811791,"frequency":0.4035637789473684},{"time":4.322661362811791,"frequency":0.4500569089473684},{"time":4.4039890628117915,"frequency":0.42098597894736844},{"time":4.433034662811791,"frequency":0.4903249789473684},{"time":4.450462362811791,"frequency":0.33894155894736844},{"time":4.467890062811791,"frequency":0.5034223189473684},{"time":4.5085537628117915,"frequency":0.3491089189473684},{"time":4.543408662811792,"frequency":0.6371186789473684},{"time":4.560836062811791,"frequency":0.4934950489473684},{"time":4.607309562811791,"frequency":0.4183018789473685},{"time":4.717683062811791,"frequency":0.4184418789473684},{"time":4.735110362811791,"frequency":0.5054422589473684},{"time":4.764156562811792,"frequency":0.40809744894736844},{"time":4.804820362811792,"frequency":0.5645717389473685},{"time":4.8571026628117915,"frequency":0.4376655489473684},{"time":4.874530062811791,"frequency":0.5996274289473683},{"time":4.915194362811791,"frequency":0.5175633389473684},{"time":4.944240362811791,"frequency":0.5701533189473684}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.haptic.meta new file mode 100644 index 0000000..0cc5909 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 86299ffd493034c65bf4c255664bbed9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.wav new file mode 100644 index 0000000..5f7bf6d Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.wav.meta new file mode 100644 index 0000000..162cd25 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/RainonUmbrella1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f2a9d294b5a6a4effb6292759792f51b +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.haptic new file mode 100644 index 0000000..6033757 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Splash 1.wav","project":"Splash 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00024249665},{"time":0.0010204081,"amplitude":0.00024249665},{"time":0.011020408,"amplitude":0.011892219},{"time":0.014013605,"amplitude":0.56185067},{"time":0.023015874,"amplitude":0.41420227},{"time":0.028004535,"amplitude":0.69482243},{"time":0.06,"amplitude":0.21845508},{"time":0.06201814,"amplitude":0.34353864},{"time":0.091020405,"amplitude":0.15219876},{"time":0.0970068,"amplitude":0.27476573},{"time":0.1170068,"amplitude":0.15734082},{"time":0.13800453,"amplitude":0.24887685},{"time":0.16401361,"amplitude":0.112925746},{"time":0.1740136,"amplitude":0.17826042},{"time":0.21201813,"amplitude":0.10752497},{"time":0.2210204,"amplitude":0.60340494},{"time":0.23301587,"amplitude":0.40905777},{"time":0.26301587,"amplitude":0.14907357},{"time":0.27201813,"amplitude":0.3301486},{"time":0.2870068,"amplitude":0.22670642},{"time":0.2910204,"amplitude":0.3774873},{"time":0.32201815,"amplitude":0.21531326},{"time":0.32999998,"amplitude":0.3421321},{"time":0.39600453,"amplitude":0.036919856,"emphasis":{"amplitude":0.10404455684210524,"frequency":0.5}},{"time":0.4050068,"amplitude":0.086145324,"emphasis":{"amplitude":0.1655763918421053,"frequency":0.5}},{"time":0.45899773,"amplitude":0.024614579999999997,"emphasis":{"amplitude":0.08866296184210527,"frequency":0.5}},{"time":0.46301133,"amplitude":0.08014838,"emphasis":{"amplitude":0.15808021184210522,"frequency":0.5}},{"time":0.5010159,"amplitude":0.014121099999999998,"emphasis":{"amplitude":0.07554611184210527,"frequency":0.5}},{"time":0.5570023,"amplitude":0.063780732,"emphasis":{"amplitude":0.13762065184210523,"frequency":0.5}},{"time":0.6060045,"amplitude":0.007270027999999995,"emphasis":{"amplitude":0.06698227184210527,"frequency":0.5}},{"time":0.6720136,"amplitude":0.042002648,"emphasis":{"amplitude":0.11039804684210522,"frequency":0.5}},{"time":0.69500676,"amplitude":0,"emphasis":{"amplitude":0.05789473684210528,"frequency":0.5}},{"time":0.75700227,"amplitude":0.006961516000000001,"emphasis":{"amplitude":0.06659663184210528,"frequency":0.5}},{"time":0.79999546,"amplitude":0.06013613199999999,"emphasis":{"amplitude":0.1330649018421052,"frequency":0.5}},{"time":0.82099316,"amplitude":0.029244655200000004,"emphasis":{"amplitude":0.09445055584210527,"frequency":0.5}},{"time":0.8740136,"amplitude":0.14086434},{"time":0.8750113,"amplitude":0.38717994},{"time":0.9060091,"amplitude":0.14096236},{"time":0.9409977,"amplitude":0.08174785},{"time":0.95600903,"amplitude":0.17162779},{"time":1.0009977,"amplitude":0.07725237600000001,"emphasis":{"amplitude":0.12024968052631577,"frequency":0.9}},{"time":1.0019954,"amplitude":0.07437598720000001,"emphasis":{"amplitude":0.11665419452631577,"frequency":0.9}},{"time":1.0080045,"amplitude":0.080336208,"emphasis":{"amplitude":0.12410447052631576,"frequency":0.9}},{"time":1.03,"amplitude":0.04059468,"emphasis":{"amplitude":0.07442756052631574,"frequency":0.9}},{"time":1.0329932,"amplitude":0.0609479248,"emphasis":{"amplitude":0.09986911652631578,"frequency":0.9}},{"time":1.0450113,"amplitude":0.069756328,"emphasis":{"amplitude":0.11087962052631581,"frequency":0.9}},{"time":1.0630158,"amplitude":0.037908768,"emphasis":{"amplitude":0.07107017052631576,"frequency":0.9}},{"time":1.0640136,"amplitude":0.0452334912,"emphasis":{"amplitude":0.08022607452631578,"frequency":0.9}},{"time":1.0819955,"amplitude":0.026514776000000004,"emphasis":{"amplitude":0.05682768052631579,"frequency":0.9}},{"time":1.0990022,"amplitude":0.049177728000000004,"emphasis":{"amplitude":0.08515637052631578,"frequency":0.9}},{"time":1.11,"amplitude":0.0342036664,"emphasis":{"amplitude":0.06643879352631576,"frequency":0.9}},{"time":1.1380045,"amplitude":0.018391776000000002,"emphasis":{"amplitude":0.04667393052631576,"frequency":0.9}},{"time":1.15,"amplitude":0.034393686400000005,"emphasis":{"amplitude":0.06667631852631578,"frequency":0.9}},{"time":1.1660091,"amplitude":0.0211836128,"emphasis":{"amplitude":0.05016372652631579,"frequency":0.9}},{"time":1.1820182,"amplitude":0.025202464000000004,"emphasis":{"amplitude":0.05518729052631578,"frequency":0.9}},{"time":1.2110204,"amplitude":0.0215779904,"emphasis":{"amplitude":0.05065669852631577,"frequency":0.9}},{"time":1.2140136,"amplitude":0.06950460000000001,"emphasis":{"amplitude":0.11056496052631579,"frequency":0.9}},{"time":1.2410204,"amplitude":0.026138269600000003,"emphasis":{"amplitude":0.056357047526315804,"frequency":0.9}},{"time":1.2620181,"amplitude":0.0137065128,"emphasis":{"amplitude":0.040817351526315784,"frequency":0.9}},{"time":1.279025,"amplitude":0.0159898072,"emphasis":{"amplitude":0.04367146952631577,"frequency":0.9}},{"time":1.2800226,"amplitude":0.024174504,"emphasis":{"amplitude":0.05390234052631576,"frequency":0.9}},{"time":1.3030158,"amplitude":0.0141160072,"emphasis":{"amplitude":0.04132921952631578,"frequency":0.9}},{"time":1.3200227,"amplitude":0.0343084784,"emphasis":{"amplitude":0.06656980852631578,"frequency":0.9}},{"time":1.3280271,"amplitude":0.0282822224,"emphasis":{"amplitude":0.05903698852631578,"frequency":0.9}},{"time":1.3370068,"amplitude":0.063766432,"emphasis":{"amplitude":0.10339225052631576,"frequency":0.9}},{"time":1.3620181,"amplitude":0.0465185944,"emphasis":{"amplitude":0.08183245352631577,"frequency":0.9}},{"time":1.376009,"amplitude":0.03334524,"emphasis":{"amplitude":0.06536576052631576,"frequency":0.9}},{"time":1.3810204,"amplitude":0.040662168,"emphasis":{"amplitude":0.07451192052631575,"frequency":0.9}},{"time":1.3960317,"amplitude":0.0282143504,"emphasis":{"amplitude":0.05895214852631578,"frequency":0.9}},{"time":1.4250113,"amplitude":0.0126316432,"emphasis":{"amplitude":0.03947376452631578,"frequency":0.9}},{"time":1.4370295,"amplitude":0.0166852784,"emphasis":{"amplitude":0.04454080852631577,"frequency":0.9}},{"time":1.4680272,"amplitude":0.00665132,"emphasis":{"amplitude":0.031998360526315786,"frequency":0.9}},{"time":1.4800227,"amplitude":0.0089233064,"emphasis":{"amplitude":0.034838343526315776,"frequency":0.9}},{"time":1.5280272,"amplitude":0.00621405024,"emphasis":{"amplitude":0.03145177332631578,"frequency":0.9}},{"time":1.5760317,"amplitude":0.0144221632,"emphasis":{"amplitude":0.04171191452631577,"frequency":0.9}},{"time":1.5800227,"amplitude":0.02266794,"emphasis":{"amplitude":0.05201913552631579,"frequency":0.9}},{"time":1.6030385,"amplitude":0.014055424,"emphasis":{"amplitude":0.041253490526315786,"frequency":0.9}},{"time":1.6240362,"amplitude":0.018019983200000003,"emphasis":{"amplitude":0.046209189526315766,"frequency":0.9}},{"time":1.6380272,"amplitude":0.012929405599999999,"emphasis":{"amplitude":0.039845967526315765,"frequency":0.9}},{"time":1.6890249,"amplitude":0.00387056992,"emphasis":{"amplitude":0.028522422926315776,"frequency":0.9}},{"time":1.7260317,"amplitude":0.005330732},{"time":1.7264172,"amplitude":0.005330732},{"time":1.7264172,"amplitude":0.005330732}],"frequency":[{"time":0,"frequency":0.2911511},{"time":0.0058049876,"frequency":0.5873963},{"time":0.043537416,"frequency":0.6569089},{"time":0.052244894,"frequency":0.38763908},{"time":0.0986848,"frequency":0.32686442},{"time":0.11029478,"frequency":0.55537313},{"time":0.13931973,"frequency":0.63399476},{"time":0.16834468,"frequency":0.45016658},{"time":0.19156463,"frequency":0.5538156},{"time":0.21188208,"frequency":0.35580114},{"time":0.23219955,"frequency":0.49778923},{"time":0.29024944,"frequency":0.40244824},{"time":0.3541043,"frequency":0.5434147},{"time":0.38022676,"frequency":0.425421},{"time":0.39473924,"frequency":0.61387646},{"time":0.41795918,"frequency":0.3792225},{"time":0.45278913,"frequency":0.33956158},{"time":0.5137415,"frequency":0.6047301},{"time":0.5804989,"frequency":0.39939806},{"time":0.6066213,"frequency":0.68217313},{"time":0.62984127,"frequency":0.6974539},{"time":0.64145124,"frequency":0.4678945},{"time":0.6849887,"frequency":0.7009028},{"time":0.6995011,"frequency":0.42869022},{"time":0.7662585,"frequency":0.64442223},{"time":0.8097959,"frequency":0.544133},{"time":0.8243084,"frequency":0.7592993},{"time":0.8562358,"frequency":0.5980645},{"time":0.9578231,"frequency":0.6809391},{"time":0.9984581,"frequency":0.5801548},{"time":1.0013604,"frequency":0.56576097},{"time":1.0361904,"frequency":0.7065949},{"time":1.0507029,"frequency":0.54116094},{"time":1.0855328,"frequency":0.67038524},{"time":1.1087527,"frequency":0.36939514},{"time":1.1348752,"frequency":0.5939933},{"time":1.1755102,"frequency":0.5812281},{"time":1.1871201,"frequency":0.21024536},{"time":1.1958276,"frequency":0.4473033},{"time":1.22195,"frequency":0.3858837},{"time":1.23356,"frequency":0.19730583},{"time":1.2567799,"frequency":0.35567594},{"time":1.2829024,"frequency":0.11052063},{"time":1.2974149,"frequency":0.540366},{"time":1.3148298,"frequency":0.06253667},{"time":1.3438548,"frequency":0.10523554},{"time":1.3641722,"frequency":0.035144787},{"time":1.3728797,"frequency":0.16624506},{"time":1.3990022,"frequency":0.057419103},{"time":1.4193196,"frequency":0.24034627},{"time":1.4396371,"frequency":0.037955843},{"time":1.4599546,"frequency":0.13441092},{"time":1.4657595,"frequency":0.39555165},{"time":1.4831746,"frequency":0.06787867},{"time":1.5296144,"frequency":0.117375486},{"time":1.5586394,"frequency":0.049059648},{"time":1.6486167,"frequency":0.03362507},{"time":1.6573242,"frequency":0.1569879},{"time":1.6747391,"frequency":0.065913655},{"time":1.7124716,"frequency":0.04623196}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.haptic.meta new file mode 100644 index 0000000..aead5f1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c3967bad02b54413ca7668a203a329ab +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.wav new file mode 100644 index 0000000..b483233 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.wav.meta new file mode 100644 index 0000000..f9839d5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Splash1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 6d55888e6190b4ecd9d69a9120fbc7a3 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.haptic new file mode 100644 index 0000000..eafdd90 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Thunder 1.wav","project":"Thunder 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0011396058},{"time":0.0010208333,"amplitude":0.0011396058},{"time":0.09898608029845422,"amplitude":0},{"time":0.119020835,"amplitude":0.04828162},{"time":0.19502082,"amplitude":0.010879714},{"time":0.22402082,"amplitude":0.042524446},{"time":0.347,"amplitude":0},{"time":0.536,"amplitude":0},{"time":0.543,"amplitude":0.17992094},{"time":0.562,"amplitude":0.095869064},{"time":0.57199997,"amplitude":0.21792816},{"time":0.585,"amplitude":0.16873196},{"time":0.591,"amplitude":0.34087256},{"time":0.622,"amplitude":0.16871053},{"time":0.624,"amplitude":0.4228829},{"time":0.641,"amplitude":0.25180525},{"time":0.657,"amplitude":0.23556189},{"time":0.661,"amplitude":0.32625246},{"time":0.677,"amplitude":0.2879507},{"time":0.698,"amplitude":0.14030135},{"time":0.706,"amplitude":0.34307647},{"time":0.73,"amplitude":0.1732385},{"time":0.74,"amplitude":0.2157657},{"time":0.766,"amplitude":0.08751166},{"time":0.767,"amplitude":0.2471996},{"time":0.779,"amplitude":0.2642102},{"time":0.797,"amplitude":0.14778085},{"time":0.84,"amplitude":0.072964326},{"time":0.865,"amplitude":0.12418143},{"time":0.867,"amplitude":0.28693035},{"time":0.883,"amplitude":0.21531618},{"time":0.889,"amplitude":0.2813839},{"time":0.893,"amplitude":0.64810765},{"time":0.911,"amplitude":0.34446952},{"time":0.93,"amplitude":0.18515496},{"time":0.93299997,"amplitude":0.3404526},{"time":0.946,"amplitude":0.21440779},{"time":0.951,"amplitude":0.26894897},{"time":0.96999997,"amplitude":0.13875386},{"time":0.986,"amplitude":0.09816777},{"time":1.001,"amplitude":0.14161679},{"time":1.002,"amplitude":0.1372485},{"time":1.034,"amplitude":0.19364907},{"time":1.099,"amplitude":0.06893182},{"time":1.126,"amplitude":0.35644954},{"time":1.153,"amplitude":0.15832613},{"time":1.1719999,"amplitude":0.16786923},{"time":1.2240208,"amplitude":0.0692239},{"time":1.2570208,"amplitude":0.07276871},{"time":1.2670208,"amplitude":0.20055291},{"time":1.3080208,"amplitude":0.10107383},{"time":1.3840208,"amplitude":0.058193572},{"time":1.3880209,"amplitude":0.14522062},{"time":1.4380208,"amplitude":0.039481673},{"time":1.4810208,"amplitude":0.1902507},{"time":1.5030208,"amplitude":0.09407051},{"time":1.5310208,"amplitude":0.113137834},{"time":1.5600208,"amplitude":0.050067656},{"time":1.6150209,"amplitude":0.029085577},{"time":1.6330208,"amplitude":0.10996067},{"time":1.6720849542290923,"amplitude":0},{"time":1.711276283383274,"amplitude":0},{"time":1.7140416,"amplitude":0.45577765},{"time":1.7240417,"amplitude":0.35519198},{"time":1.7250416,"amplitude":0.68311393,"emphasis":{"amplitude":0.8538924,"frequency":0.1}},{"time":1.7400416,"amplitude":0.57889295},{"time":1.7420417,"amplitude":0.885915},{"time":1.7710416,"amplitude":0.34132102},{"time":1.7730416,"amplitude":0.51507264},{"time":1.8160416,"amplitude":0.19893661},{"time":1.8170416,"amplitude":0.33548468},{"time":1.8410417,"amplitude":0.2380145},{"time":1.8470416,"amplitude":0.67619777},{"time":1.8760417,"amplitude":0.32576603},{"time":1.8830416,"amplitude":0.6977565},{"time":1.9010416,"amplitude":0.38253477},{"time":1.9150417,"amplitude":0.26730788},{"time":1.9180416,"amplitude":0.50945127},{"time":1.9650416,"amplitude":0.15606578},{"time":1.9760417,"amplitude":0.39255056},{"time":2.0000417,"amplitude":0.3181855},{"time":2.0010417,"amplitude":0.31201553},{"time":2.0220416,"amplitude":0.19183822},{"time":2.0230417,"amplitude":0.27675813},{"time":2.0490417,"amplitude":0.13139096},{"time":2.0740416,"amplitude":0.09609355},{"time":2.0790417,"amplitude":0.22293569},{"time":2.1090417,"amplitude":0.107293},{"time":2.1180418,"amplitude":0.12677288},{"time":2.1670415,"amplitude":0.04233239},{"time":2.2020416,"amplitude":0.102740005},{"time":2.2250416,"amplitude":0.05814287},{"time":2.231021,"amplitude":0.14390677},{"time":2.248021,"amplitude":0.15331344},{"time":2.2900207,"amplitude":0.039035294},{"time":2.4330208,"amplitude":0.04840972},{"time":2.4460208,"amplitude":0.15455954},{"time":2.4690208,"amplitude":0.07752987},{"time":2.4820209,"amplitude":0.14447655},{"time":2.5150208,"amplitude":0.06985602},{"time":2.542,"amplitude":0.063808754},{"time":2.5509999,"amplitude":0.17993832},{"time":2.57,"amplitude":0.11003559},{"time":2.5709999,"amplitude":0.17300282},{"time":2.5939999,"amplitude":0.11073764},{"time":2.599,"amplitude":0.21342652},{"time":2.632,"amplitude":0.093882956},{"time":2.634,"amplitude":0.156906},{"time":2.662,"amplitude":0.095073685},{"time":2.664,"amplitude":0.14685221},{"time":2.6959999,"amplitude":0.07118064},{"time":2.707,"amplitude":0.14513007},{"time":2.724,"amplitude":0.089238726},{"time":2.73,"amplitude":0.15932216},{"time":2.781,"amplitude":0.09823643},{"time":2.7979999,"amplitude":0.1255486},{"time":2.874979,"amplitude":0.054460246},{"time":2.8849792,"amplitude":0.08974152},{"time":2.9419792,"amplitude":0.037869543},{"time":2.9609792,"amplitude":0.06809826},{"time":3.0009792,"amplitude":0.052384406},{"time":3.001979,"amplitude":0.052384406},{"time":3.0139792,"amplitude":0.1068189},{"time":3.034979,"amplitude":0.05756564},{"time":3.0369792,"amplitude":0.10342431},{"time":3.0859792,"amplitude":0.036841087},{"time":3.0889792,"amplitude":0.07493316},{"time":3.1229582,"amplitude":0.047892287},{"time":3.1409583,"amplitude":0.058478244},{"time":3.1469584,"amplitude":0.11688035},{"time":3.1649582,"amplitude":0.06438967},{"time":3.2159584,"amplitude":0.034859393},{"time":3.2269583,"amplitude":0.05701742},{"time":3.2929583,"amplitude":0.028344814},{"time":3.3329582,"amplitude":0.055312302},{"time":3.3709583,"amplitude":0.027846802},{"time":3.3779376,"amplitude":0.048140068},{"time":3.4259374,"amplitude":0.031939175},{"time":3.4299374,"amplitude":0.06556854},{"time":3.4769375,"amplitude":0.021737093},{"time":3.4859374,"amplitude":0.06307083},{"time":3.5039375,"amplitude":0.05504562},{"time":3.5119374,"amplitude":0.21056755},{"time":3.5449374,"amplitude":0.069791764},{"time":3.5959375,"amplitude":0.023738222},{"time":3.6409376,"amplitude":0.051972747},{"time":3.6419375,"amplitude":0.10070049},{"time":3.6589375,"amplitude":0.055584628},{"time":3.6819167,"amplitude":0.05825654},{"time":3.7079167,"amplitude":0.026605748},{"time":3.8029165,"amplitude":0.03819642},{"time":3.8369167,"amplitude":0.017656267},{"time":3.8669167,"amplitude":0.06736626},{"time":3.8679166,"amplitude":0.13596404},{"time":3.8989167,"amplitude":0.073375955},{"time":3.9039166,"amplitude":0.16155931},{"time":3.9259167,"amplitude":0.09061364},{"time":3.9269166,"amplitude":0.13024117},{"time":3.9528959,"amplitude":0.066695906},{"time":3.9698958,"amplitude":0.1049318},{"time":4.000896,"amplitude":0.08468034},{"time":4.001896,"amplitude":0.0810529},{"time":4.006896,"amplitude":0.11371866},{"time":4.054896,"amplitude":0.030427286},{"time":4.093896,"amplitude":0.033165563},{"time":4.1108956,"amplitude":0.051678844},{"time":4.120896,"amplitude":0.14067681},{"time":4.1508956,"amplitude":0.050873343},{"time":4.184896,"amplitude":0.029599829},{"time":4.186896,"amplitude":0.059788417},{"time":4.242875,"amplitude":0.02598684},{"time":4.254875,"amplitude":0.06182357},{"time":4.271875,"amplitude":0.04513757},{"time":4.272875,"amplitude":0.12231845},{"time":4.311875,"amplitude":0.037524395},{"time":4.368875,"amplitude":0.023545511},{"time":4.432875,"amplitude":0.029048434},{"time":4.450875,"amplitude":0.0975962},{"time":4.4718747,"amplitude":0.054268606},{"time":4.473875,"amplitude":0.123877585},{"time":4.486875,"amplitude":0.07857454},{"time":4.516875,"amplitude":0.033964295},{"time":4.537854,"amplitude":0.022498433},{"time":4.547854,"amplitude":0.046507876},{"time":4.571854,"amplitude":0.021643927},{"time":4.619854,"amplitude":0.04152039},{"time":4.656854,"amplitude":0.020088075},{"time":4.658854,"amplitude":0.03585898},{"time":4.6938543,"amplitude":0.034305476},{"time":4.7068543,"amplitude":0.060031474},{"time":4.728854,"amplitude":0.031259436},{"time":4.804854,"amplitude":0.04395168},{"time":4.827833,"amplitude":0.0259349},{"time":4.848833,"amplitude":0.05018197},{"time":4.8788333,"amplitude":0.025341433},{"time":4.888833,"amplitude":0.0410278},{"time":4.920833,"amplitude":0.02560189},{"time":4.9308333,"amplitude":0.046080217},{"time":4.9688334,"amplitude":0.029344069},{"time":4.9708333,"amplitude":0.05880881},{"time":5.0008335,"amplitude":0.04426152},{"time":5.0018334,"amplitude":0.042847052},{"time":5.0168333,"amplitude":0.052112404},{"time":5.051833,"amplitude":0.021024175},{"time":5.063833,"amplitude":0.03515267},{"time":5.0898333,"amplitude":0.016491413},{"time":5.090833,"amplitude":0.040690906},{"time":5.1338124,"amplitude":0.019976707},{"time":5.1678123,"amplitude":0.042080194},{"time":5.2098126,"amplitude":0.02488333},{"time":5.2108126,"amplitude":0.037524607},{"time":5.2508125,"amplitude":0.020254891},{"time":5.2828126,"amplitude":0.017862245},{"time":5.2958126,"amplitude":0.04227473},{"time":5.3088126,"amplitude":0.028767291},{"time":5.3108125,"amplitude":0.05984741},{"time":5.333812,"amplitude":0.03381919},{"time":5.3478127,"amplitude":0.05276669},{"time":5.3648124,"amplitude":0.03085708},{"time":5.3818126,"amplitude":0.05447324},{"time":5.4037914,"amplitude":0.036670063},{"time":5.404792,"amplitude":0.07563469},{"time":5.4367914,"amplitude":0.0334857},{"time":5.4937916,"amplitude":0.017714752},{"time":5.5197916,"amplitude":0.030997038},{"time":5.543792,"amplitude":0.022090297},{"time":5.5457916,"amplitude":0.04089238},{"time":5.5967917,"amplitude":0.025520435},{"time":5.621792,"amplitude":0.044549745},{"time":5.6477914,"amplitude":0.02506034},{"time":5.6847706,"amplitude":0.03620127},{"time":5.7157707,"amplitude":0.016516615},{"time":5.727771,"amplitude":0.024084292},{"time":5.765771,"amplitude":0.0135596},{"time":5.7827706,"amplitude":0.032774944},{"time":5.8007708,"amplitude":0.019230196},{"time":5.817771,"amplitude":0.032759205},{"time":5.8667707,"amplitude":0.015461026},{"time":5.9467707,"amplitude":0.011930366},{"time":5.9537706,"amplitude":0.029016867},{"time":6.00075,"amplitude":0.010877195},{"time":6.00175,"amplitude":0.011268151},{"time":6.0117497,"amplitude":0.017673947},{"time":6.04175,"amplitude":0.009203682},{"time":6.04875,"amplitude":0.019558322},{"time":6.06875,"amplitude":0.011526969},{"time":6.0707498,"amplitude":0.03439277},{"time":6.0907497,"amplitude":0.017346803},{"time":6.10775,"amplitude":0.012943158},{"time":6.14875,"amplitude":0.0129720215},{"time":6.180478802777647,"amplitude":0},{"time":7.4401247999999995,"amplitude":0}],"frequency":[{"time":0,"frequency":0.5326284},{"time":0.010666667,"frequency":0.29873848},{"time":0.029333333,"frequency":0.48058876},{"time":0.10133333,"frequency":0.4107355},{"time":0.12533332,"frequency":0.5510626},{"time":0.14933333,"frequency":0.3770848},{"time":0.18933333,"frequency":0.5162329},{"time":0.24533331,"frequency":0.36025918},{"time":0.30133334,"frequency":0.5460573},{"time":0.31466666,"frequency":0.33098686},{"time":0.352,"frequency":0.38814095},{"time":0.37333333,"frequency":0.24390668},{"time":0.41066667,"frequency":0.44250372},{"time":0.42933333,"frequency":0.21573396},{"time":0.456,"frequency":0.6187612},{"time":0.48,"frequency":0.33375093},{"time":0.48533332,"frequency":0.53401214},{"time":0.5173333,"frequency":0.45460215},{"time":0.5333333,"frequency":0.22512686},{"time":0.54933333,"frequency":0.3641706},{"time":0.6346667,"frequency":0.3706361},{"time":0.6906667,"frequency":0.48670918},{"time":0.7413333,"frequency":0.3149933},{"time":0.7733333,"frequency":0.5623271},{"time":0.792,"frequency":0.408303},{"time":0.816,"frequency":0.51734424},{"time":0.8426667,"frequency":0.38155895},{"time":0.88266665,"frequency":0.5316941},{"time":0.97866666,"frequency":0.31638798},{"time":0.99999994,"frequency":0.51782525},{"time":1.0026667,"frequency":0.54910344},{"time":1.0693334,"frequency":0.5088647},{"time":1.0853333,"frequency":0.6100643},{"time":1.1333333,"frequency":0.41250315},{"time":1.184,"frequency":0.50513554},{"time":1.24,"frequency":0.36134455},{"time":1.2986667,"frequency":0.4992609},{"time":1.3466667,"frequency":0.50952023},{"time":1.3546667,"frequency":0.38094828},{"time":1.3733333,"frequency":0.54721445},{"time":1.408,"frequency":0.35272577},{"time":1.4480001,"frequency":0.55936706},{"time":1.464,"frequency":0.42810485},{"time":1.488,"frequency":0.53878224},{"time":1.4986668,"frequency":0.41325077},{"time":1.5413333,"frequency":0.5618323},{"time":1.5493333,"frequency":0.40342176},{"time":1.5786667,"frequency":0.5856808},{"time":1.5893334,"frequency":0.466847},{"time":1.6506667,"frequency":0.38976842},{"time":1.6853334,"frequency":0.52751803},{"time":1.7146667,"frequency":0.43115366},{"time":1.728,"frequency":0.5241941},{"time":1.7546667,"frequency":0.37853092},{"time":1.7866668,"frequency":0.59797776},{"time":1.8133334,"frequency":0.31654984},{"time":1.848,"frequency":0.50818205},{"time":1.8746667,"frequency":0.39548275},{"time":1.944,"frequency":0.5781465},{"time":1.9973333,"frequency":0.36804265},{"time":2,"frequency":0.34628335},{"time":2.08,"frequency":0.37057203},{"time":2.0853333,"frequency":0.47195676},{"time":2.1306667,"frequency":0.2698984},{"time":2.1466668,"frequency":0.5518865},{"time":2.1706667,"frequency":0.33075535},{"time":2.1813333,"frequency":0.44959202},{"time":2.224,"frequency":0.4269221},{"time":2.232,"frequency":0.5522817},{"time":2.3040001,"frequency":0.3449471},{"time":2.3413334,"frequency":0.56192493},{"time":2.3546667,"frequency":0.40097076},{"time":2.384,"frequency":0.6300424},{"time":2.4026668,"frequency":0.2943816},{"time":2.4213333,"frequency":0.53724664},{"time":2.4506667,"frequency":0.26314506},{"time":2.4666667,"frequency":0.49188483},{"time":2.4933333,"frequency":0.25950816},{"time":2.552,"frequency":0.28277832},{"time":2.5786667,"frequency":0.4585168},{"time":2.5866666,"frequency":0.27300104},{"time":2.632,"frequency":0.39907378},{"time":2.6693335,"frequency":0.22727789},{"time":2.7013333,"frequency":0.3970259},{"time":2.7066667,"frequency":0.25241038},{"time":2.8133333,"frequency":0.48607287},{"time":2.8533335,"frequency":0.2765201},{"time":2.8826666,"frequency":0.54472005},{"time":2.9546666,"frequency":0.3567748},{"time":2.9973333,"frequency":0.4035868},{"time":3,"frequency":0.3908819},{"time":3.024,"frequency":0.52865046},{"time":3.0453334,"frequency":0.37603325},{"time":3.0826666,"frequency":0.45311117},{"time":3.1066668,"frequency":0.34664467},{"time":3.128,"frequency":0.50285846},{"time":3.168,"frequency":0.2853863},{"time":3.1733334,"frequency":0.4735717},{"time":3.232,"frequency":0.36491328},{"time":3.2613335,"frequency":0.5039913},{"time":3.288,"frequency":0.2893361},{"time":3.3013334,"frequency":0.4686846},{"time":3.3600001,"frequency":0.47848225},{"time":3.376,"frequency":0.29532287},{"time":3.408,"frequency":0.48960716},{"time":3.4666667,"frequency":0.31398955},{"time":3.496,"frequency":0.6022084},{"time":3.5626667,"frequency":0.39283776},{"time":3.5893333,"frequency":0.48114455},{"time":3.6426666,"frequency":0.2982559},{"time":3.6693335,"frequency":0.46505806},{"time":3.728,"frequency":0.44961432},{"time":3.7333333,"frequency":0.31035545},{"time":3.776,"frequency":0.4538396},{"time":3.8506668,"frequency":0.27924436},{"time":3.8933334,"frequency":0.4213439},{"time":3.9013333,"frequency":0.29849654},{"time":3.9386666,"frequency":0.2820117},{"time":3.9653335,"frequency":0.31675324},{"time":3.9973333,"frequency":0.37763238},{"time":4,"frequency":0.35932335},{"time":4.037333,"frequency":0.50582314},{"time":4.0746665,"frequency":0.26222247},{"time":4.133333,"frequency":0.57828134},{"time":4.170666,"frequency":0.53441226},{"time":4.1866665,"frequency":0.34746826},{"time":4.205333,"frequency":0.47919264},{"time":4.245333,"frequency":0.35974807},{"time":4.3093333,"frequency":0.53415406},{"time":4.3493333,"frequency":0.31589916},{"time":4.3706665,"frequency":0.46194413},{"time":4.381333,"frequency":0.26178333},{"time":4.397333,"frequency":0.53823704},{"time":4.424,"frequency":0.30210075},{"time":4.4426665,"frequency":0.4039954},{"time":4.477333,"frequency":0.2310956},{"time":4.525333,"frequency":0.44773626},{"time":4.565333,"frequency":0.27974123},{"time":4.5759997,"frequency":0.50670445},{"time":4.608,"frequency":0.2567213},{"time":4.6453333,"frequency":0.57703435},{"time":4.6586666,"frequency":0.3300352},{"time":4.7546663,"frequency":0.28207496},{"time":4.773333,"frequency":0.4432985},{"time":4.7973332,"frequency":0.28024498},{"time":4.821333,"frequency":0.43900913},{"time":4.8719997,"frequency":0.39969146},{"time":4.8986664,"frequency":0.23703991},{"time":4.936,"frequency":0.3544331},{"time":4.997333,"frequency":0.36895072},{"time":5,"frequency":0.31162575},{"time":5.021333,"frequency":0.2678454},{"time":5.0426664,"frequency":0.42774126},{"time":5.0639997,"frequency":0.24583407},{"time":5.0719995,"frequency":0.4166928},{"time":5.101333,"frequency":0.331355},{"time":5.2266665,"frequency":0.32755968},{"time":5.2666664,"frequency":0.4706699},{"time":5.282666,"frequency":0.32842395},{"time":5.3066664,"frequency":0.44897282},{"time":5.394666,"frequency":0.25421005},{"time":5.469333,"frequency":0.28046677},{"time":5.477333,"frequency":0.40234223},{"time":5.501333,"frequency":0.23066351},{"time":5.557333,"frequency":0.35119364},{"time":5.5733333,"frequency":0.24581885},{"time":5.5839996,"frequency":0.48880312},{"time":5.629333,"frequency":0.27154335},{"time":5.637333,"frequency":0.4184909},{"time":5.701333,"frequency":0.38871378},{"time":5.7466664,"frequency":0.25812525},{"time":5.7599998,"frequency":0.4386894},{"time":5.773333,"frequency":0.2648542},{"time":5.8346663,"frequency":0.40015292},{"time":5.8506665,"frequency":0.2861085},{"time":5.8719997,"frequency":0.40325916},{"time":5.901333,"frequency":0.35890064},{"time":5.957333,"frequency":0.31468052},{"time":5.968,"frequency":0.53850496},{"time":5.9999995,"frequency":0.4345085},{"time":6.0026665,"frequency":0.44535202},{"time":6.069333,"frequency":0.28512847},{"time":6.1653333,"frequency":0.39474016},{"time":6.1786666,"frequency":0.583968},{"time":6.213333,"frequency":0.3202408},{"time":6.2559996,"frequency":0.33630103},{"time":6.2773333,"frequency":0.46962872},{"time":6.3066664,"frequency":0.478786},{"time":6.3466663,"frequency":0.38592964},{"time":6.381333,"frequency":0.46053126},{"time":6.405333,"frequency":0.3080004},{"time":6.4266663,"frequency":0.46664938},{"time":6.448,"frequency":0.25911492},{"time":6.4613333,"frequency":0.43572325},{"time":6.5333333,"frequency":0.22780782},{"time":6.578666,"frequency":0.48429736},{"time":6.6426663,"frequency":0.15418884},{"time":6.6559997,"frequency":0.3550197},{"time":6.7039995,"frequency":0.20784979},{"time":6.789333,"frequency":0.34012645},{"time":6.813333,"frequency":0.4798447},{"time":6.832,"frequency":0.25259116},{"time":6.8506665,"frequency":0.518783},{"time":6.861333,"frequency":0.31233838},{"time":6.8906665,"frequency":0.47848028},{"time":6.9199996,"frequency":0.28961998},{"time":6.9306664,"frequency":0.57590234},{"time":6.949333,"frequency":0.29651508},{"time":6.9626665,"frequency":0.39934808},{"time":6.9999995,"frequency":0.3187395},{"time":7.0026665,"frequency":0.36413845},{"time":7.0106664,"frequency":0.44431052},{"time":7.0186663,"frequency":0.34896255},{"time":7.0239997,"frequency":0.514396},{"time":7.0346665,"frequency":0.30411398},{"time":7.061333,"frequency":0.5082245},{"time":7.0719995,"frequency":0.27433807},{"time":7.0906663,"frequency":0.35069436},{"time":7.1039996,"frequency":0.23575562},{"time":7.117333,"frequency":0.3575581},{"time":7.149333,"frequency":0.41416088},{"time":7.1546664,"frequency":0.31724855},{"time":7.170666,"frequency":0.5031112},{"time":7.192,"frequency":0.3433671},{"time":7.2,"frequency":0.50139344},{"time":7.210666,"frequency":0.32479066},{"time":7.221333,"frequency":0.55347216},{"time":7.2266665,"frequency":0.55345696},{"time":7.24,"frequency":0.24978888},{"time":7.261333,"frequency":0.34350288},{"time":7.269333,"frequency":0.58897233},{"time":7.2773333,"frequency":0.31101766},{"time":7.3146663,"frequency":0.46504706},{"time":7.336,"frequency":0.37420404},{"time":7.344,"frequency":0.4329554},{"time":7.3519998,"frequency":0.33052078},{"time":7.3626666,"frequency":0.47815573},{"time":7.3866663,"frequency":0.30511507},{"time":7.394666,"frequency":0.47517678},{"time":7.4186664,"frequency":0.41086298}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.haptic.meta new file mode 100644 index 0000000..dc09ce7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 52f42d07956fb43c6a69c229047bd7f9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.wav new file mode 100644 index 0000000..49badaf Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.wav.meta new file mode 100644 index 0000000..e7ce223 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 6fb3dffe7d70848dfbb83dace4de0fd3 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.haptic new file mode 100644 index 0000000..0a8822b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Thunder 2.wav","project":"Thunder 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00006708235},{"time":0.0010204081,"amplitude":0.00006708235},{"time":0.06900226,"amplitude":0.0061265985},{"time":0.08600907,"amplitude":0.004523649},{"time":0.21301587,"amplitude":0.014076219},{"time":0.2370068,"amplitude":0.012384461},{"time":0.25301588,"amplitude":0.014857505600000001,"emphasis":{"amplitude":0.1448876714736842,"frequency":0.9}},{"time":0.2970068,"amplitude":0.010290104},{"time":0.32,"amplitude":0.014194339},{"time":0.32501134,"amplitude":0.0168936896,"emphasis":{"amplitude":0.1474329014736842,"frequency":0.9}},{"time":0.36501133,"amplitude":0.014340618},{"time":0.40900227,"amplitude":0.012498529},{"time":0.4210204,"amplitude":0.0164930504,"emphasis":{"amplitude":0.1469321024736842,"frequency":0.9}},{"time":0.49099773,"amplitude":0.013990439},{"time":0.50600904,"amplitude":0.0165027352,"emphasis":{"amplitude":0.1469442084736842,"frequency":0.9}},{"time":0.5270068,"amplitude":0.015704878},{"time":0.54900223,"amplitude":0.0202087312,"emphasis":{"amplitude":0.1515767034736842,"frequency":0.9}},{"time":0.5840136,"amplitude":0.015215542},{"time":0.59,"amplitude":0.019900770400000004,"emphasis":{"amplitude":0.1511917524736842,"frequency":0.9}},{"time":0.6120181,"amplitude":0.0142560955},{"time":0.62201816,"amplitude":0.0186360328,"emphasis":{"amplitude":0.1496108304736842,"frequency":0.9}},{"time":0.6470068,"amplitude":0.014396724,"emphasis":{"amplitude":0.1443116944736842,"frequency":0.9}},{"time":0.66099775,"amplitude":0.023607156000000004,"emphasis":{"amplitude":0.1558247344736842,"frequency":0.9}},{"time":0.67501134,"amplitude":0.0153319392,"emphasis":{"amplitude":0.1454807134736842,"frequency":0.9}},{"time":0.69,"amplitude":0.018555364,"emphasis":{"amplitude":0.1495099944736842,"frequency":0.9}},{"time":0.72501135,"amplitude":0.013658456},{"time":0.72900224,"amplitude":0.0182366464,"emphasis":{"amplitude":0.1491115974736842,"frequency":0.9}},{"time":0.75199544,"amplitude":0.013676361},{"time":0.77301586,"amplitude":0.0157220064,"emphasis":{"amplitude":0.1459682974736842,"frequency":0.9}},{"time":0.78900224,"amplitude":0.014695222},{"time":0.7970068,"amplitude":0.019477115200000002,"emphasis":{"amplitude":0.1506621834736842,"frequency":0.9}},{"time":0.8190023,"amplitude":0.012759828800000001,"emphasis":{"amplitude":0.1422655754736842,"frequency":0.9}},{"time":0.84999996,"amplitude":0.012756194400000002,"emphasis":{"amplitude":0.1422610324736842,"frequency":0.9}},{"time":0.85501134,"amplitude":0.0211196664,"emphasis":{"amplitude":0.1527153724736842,"frequency":0.9}},{"time":0.8780045,"amplitude":0.014047727199999999,"emphasis":{"amplitude":0.1438754484736842,"frequency":0.9}},{"time":0.8809977,"amplitude":0.0190817712,"emphasis":{"amplitude":0.1501680034736842,"frequency":0.9}},{"time":0.9119955,"amplitude":0.014401758},{"time":0.94,"amplitude":0.0167419776,"emphasis":{"amplitude":0.1472432614736842,"frequency":0.9}},{"time":0.9660091,"amplitude":0.015469991},{"time":0.97401357,"amplitude":0.0197950736,"emphasis":{"amplitude":0.1510596314736842,"frequency":0.9}},{"time":1.0009977,"amplitude":0.013965312,"emphasis":{"amplitude":0.1437724294736842,"frequency":0.9}},{"time":1.0019954,"amplitude":0.013788905600000002,"emphasis":{"amplitude":0.1435519214736842,"frequency":0.9}},{"time":1.0460091,"amplitude":0.014685033600000001,"emphasis":{"amplitude":0.1446720814736842,"frequency":0.9}},{"time":1.0830158,"amplitude":0.03970464160000001,"emphasis":{"amplitude":0.1759465914736842,"frequency":0.9}},{"time":1.1150113,"amplitude":0.0165915816,"emphasis":{"amplitude":0.1470552664736842,"frequency":0.9}},{"time":1.2280045,"amplitude":0.0158822448,"emphasis":{"amplitude":0.1461685954736842,"frequency":0.9}},{"time":1.2410204,"amplitude":0.0424393656,"emphasis":{"amplitude":0.1793649964736842,"frequency":0.9}},{"time":1.2660091,"amplitude":0.0221995432,"emphasis":{"amplitude":0.1540652184736842,"frequency":0.9}},{"time":1.3100226,"amplitude":0.0162714688,"emphasis":{"amplitude":0.1466551254736842,"frequency":0.9}},{"time":1.336009,"amplitude":0.027022656000000003,"emphasis":{"amplitude":0.1600941094736842,"frequency":0.9}},{"time":1.3730159,"amplitude":0.015210744000000002,"emphasis":{"amplitude":0.1453292194736842,"frequency":0.9}},{"time":1.4160317,"amplitude":0.0257012784,"emphasis":{"amplitude":0.1584423874736842,"frequency":0.9}},{"time":1.4390249,"amplitude":0.0148252744,"emphasis":{"amplitude":0.1448473824736842,"frequency":0.9}},{"time":1.4790249,"amplitude":0.030304762400000004,"emphasis":{"amplitude":0.1641967424736842,"frequency":0.9}},{"time":1.5180272,"amplitude":0.014828665599999999,"emphasis":{"amplitude":0.1448516214736842,"frequency":0.9}},{"time":1.5840362,"amplitude":0.014465832000000001,"emphasis":{"amplitude":0.1443980794736842,"frequency":0.9}},{"time":1.6020408,"amplitude":0.032646089600000004,"emphasis":{"amplitude":0.1671234014736842,"frequency":0.9}},{"time":1.6500226,"amplitude":0.0172605992,"emphasis":{"amplitude":0.1478915384736842,"frequency":0.9}},{"time":1.6970295,"amplitude":0.021595504800000002,"emphasis":{"amplitude":0.1533101704736842,"frequency":0.9}},{"time":1.7210431,"amplitude":0.037252032000000004,"emphasis":{"amplitude":0.1728808294736842,"frequency":0.9}},{"time":1.7460318,"amplitude":0.018817528,"emphasis":{"amplitude":0.1498376994736842,"frequency":0.9}},{"time":1.791495937358964,"amplitude":0},{"time":1.8330386,"amplitude":0},{"time":1.8330436,"amplitude":0.6384778896842112,"emphasis":{"amplitude":0.7980973621052639,"frequency":0.1}},{"time":1.8620408,"amplitude":0.7632252},{"time":1.8770521,"amplitude":0.45356038},{"time":1.8930385,"amplitude":0.27242124},{"time":1.8960544,"amplitude":0.5665502},{"time":1.9060544,"amplitude":0.43781793},{"time":1.9120408,"amplitude":0.6280183},{"time":1.9140363,"amplitude":0.87004614},{"time":1.9540362,"amplitude":0.33779782},{"time":1.961043,"amplitude":0.5713472},{"time":1.9780499,"amplitude":0.37530243},{"time":1.9800453,"amplitude":0.72350526},{"time":2.0000453,"amplitude":0.41436931},{"time":2.001043,"amplitude":0.400056},{"time":2.0260544,"amplitude":0.21259876},{"time":2.0290475,"amplitude":0.50769675},{"time":2.0450566,"amplitude":0.36245826},{"time":2.0490475,"amplitude":0.6666397},{"time":2.08805,"amplitude":0.3624112},{"time":2.095034,"amplitude":0.48334825},{"time":2.1130385,"amplitude":0.30026677},{"time":2.1280499,"amplitude":0.47359288},{"time":2.155034,"amplitude":0.19254789},{"time":2.1720407,"amplitude":0.179793},{"time":2.175034,"amplitude":0.31211832},{"time":2.221043,"amplitude":0.07652755},{"time":2.2460318,"amplitude":0.08963114,"emphasis":{"amplitude":0.112038925,"frequency":0.9}},{"time":2.2990248,"amplitude":0.054077208,"emphasis":{"amplitude":0.06759651,"frequency":0.9}},{"time":2.3340135,"amplitude":0.123638352,"emphasis":{"amplitude":0.15454794,"frequency":0.9}},{"time":2.3580272,"amplitude":0.06052812800000001,"emphasis":{"amplitude":0.07566016,"frequency":0.9}},{"time":2.402018,"amplitude":0.157271016,"emphasis":{"amplitude":0.19658877,"frequency":0.9}},{"time":2.419025,"amplitude":0.08823640320000001,"emphasis":{"amplitude":0.110295504,"frequency":0.9}},{"time":2.4430158,"amplitude":0.10887120800000001,"emphasis":{"amplitude":0.13608901,"frequency":0.9}},{"time":2.479025,"amplitude":0.041263052800000005,"emphasis":{"amplitude":0.051578816,"frequency":0.9}},{"time":2.5170069,"amplitude":0.09816021920000001,"emphasis":{"amplitude":0.122700274,"frequency":0.9}},{"time":2.5410204,"amplitude":0.0448909584,"emphasis":{"amplitude":0.056113698,"frequency":0.9}},{"time":2.5480044,"amplitude":0.23526034400000004,"emphasis":{"amplitude":0.29407543,"frequency":0.9}},{"time":2.5620182,"amplitude":0.14049364,"emphasis":{"amplitude":0.17561705,"frequency":0.9}},{"time":2.5950112,"amplitude":0.049488448000000004,"emphasis":{"amplitude":0.06186056,"frequency":0.9}},{"time":2.6340137,"amplitude":0.0758896112,"emphasis":{"amplitude":0.094862014,"frequency":0.9}},{"time":2.636009,"amplitude":0.17660096800000002,"emphasis":{"amplitude":0.22075121,"frequency":0.9}},{"time":2.6670067,"amplitude":0.064269192,"emphasis":{"amplitude":0.08033649,"frequency":0.9}},{"time":2.6729932,"amplitude":0.16915420000000003,"emphasis":{"amplitude":0.21144275,"frequency":0.9}},{"time":2.7049887,"amplitude":0.09350256000000001,"emphasis":{"amplitude":0.1168782,"frequency":0.9}},{"time":2.7059863,"amplitude":0.150189968,"emphasis":{"amplitude":0.18773746,"frequency":0.9}},{"time":2.743991,"amplitude":0.046195364,"emphasis":{"amplitude":0.057744205,"frequency":0.9}},{"time":2.7890022,"amplitude":0.04361074,"emphasis":{"amplitude":0.054513425,"frequency":0.9}},{"time":2.8279817,"amplitude":0.17332485600000003,"emphasis":{"amplitude":0.21665607,"frequency":0.9}},{"time":2.8859863,"amplitude":0.047824192,"emphasis":{"amplitude":0.05978024,"frequency":0.9}},{"time":2.9489796,"amplitude":0.071138504,"emphasis":{"amplitude":0.08892313,"frequency":0.9}},{"time":2.950975,"amplitude":0.19250184,"emphasis":{"amplitude":0.2406273,"frequency":0.9}},{"time":2.9759862,"amplitude":0.117111735},{"time":3.000975,"amplitude":0.12000975},{"time":3.0019727,"amplitude":0.116872236},{"time":3.0089796,"amplitude":0.097673155},{"time":3.010975,"amplitude":0.2513303},{"time":3.0259635,"amplitude":0.16682675},{"time":3.0289795,"amplitude":0.42082897},{"time":3.0389795,"amplitude":0.30572647},{"time":3.0699773,"amplitude":0.11805034},{"time":3.0929704,"amplitude":0.070061326},{"time":3.097959,"amplitude":0.13083182},{"time":3.114966,"amplitude":0.061831611200000004,"emphasis":{"amplitude":0.077289514,"frequency":0.9}},{"time":3.134966,"amplitude":0.06277128800000001,"emphasis":{"amplitude":0.07846411,"frequency":0.9}},{"time":3.1759636,"amplitude":0.030723804,"emphasis":{"amplitude":0.038404755,"frequency":0.9}},{"time":3.2029705,"amplitude":0.026742628000000004,"emphasis":{"amplitude":0.033428285,"frequency":0.5}},{"time":3.2059636,"amplitude":0.05523292,"emphasis":{"amplitude":0.06904115,"frequency":0.9}},{"time":3.2379591,"amplitude":0.04321901},{"time":3.2539682,"amplitude":0.1348136},{"time":3.267959,"amplitude":0.1323505},{"time":3.2839456,"amplitude":0.20895769},{"time":3.3249433,"amplitude":0.06957278},{"time":3.3289568,"amplitude":0.1067604},{"time":3.3529477,"amplitude":0.05074903},{"time":3.3539455,"amplitude":0.08639892},{"time":3.3819501,"amplitude":0.053731117},{"time":3.4139454,"amplitude":0.06705411},{"time":3.4729478,"amplitude":0.025047499200000004,"emphasis":{"amplitude":0.15762516347368422,"frequency":0.9}},{"time":3.4779365,"amplitude":0.049925056,"emphasis":{"amplitude":0.1887221094736842,"frequency":0.9}},{"time":3.5149434,"amplitude":0.025334253600000002,"emphasis":{"amplitude":0.1579836064736842,"frequency":0.9}},{"time":3.6209297,"amplitude":0.0184386672,"emphasis":{"amplitude":0.14936412347368422,"frequency":0.9}},{"time":3.6409297,"amplitude":0.060077176,"emphasis":{"amplitude":0.20141225947368419,"frequency":0.9}},{"time":3.678934,"amplitude":0.026608264,"emphasis":{"amplitude":0.15957611947368422,"frequency":0.9}},{"time":3.7079139,"amplitude":0.0425010024,"emphasis":{"amplitude":0.1794420424736842,"frequency":0.9}},{"time":3.8049207,"amplitude":0.0245461416,"emphasis":{"amplitude":0.1569984664736842,"frequency":0.9}},{"time":3.8079138,"amplitude":0.04451329600000001,"emphasis":{"amplitude":0.18195740947368422,"frequency":0.9}},{"time":3.8399093,"amplitude":0.020292172,"emphasis":{"amplitude":0.1516810044736842,"frequency":0.9}},{"time":3.8489115,"amplitude":0.04427247040000001,"emphasis":{"amplitude":0.1816563774736842,"frequency":0.9}},{"time":3.8859184,"amplitude":0.021148884000000003,"emphasis":{"amplitude":0.1527518944736842,"frequency":0.9}},{"time":3.8889115,"amplitude":0.038400896000000004,"emphasis":{"amplitude":0.17431690947368422,"frequency":0.9}},{"time":3.9319048,"amplitude":0.017851216,"emphasis":{"amplitude":0.1486298094736842,"frequency":0.9}},{"time":3.966916,"amplitude":0.030770944,"emphasis":{"amplitude":0.16477946947368421,"frequency":0.9}},{"time":4.000907,"amplitude":0.020319227},{"time":4.0019045,"amplitude":0.01974544},{"time":4.0289116,"amplitude":0.047030233},{"time":4.030907,"amplitude":0.2211449},{"time":4.050907,"amplitude":0.2395759},{"time":4.075896,"amplitude":0.10629439},{"time":4.127891,"amplitude":0.076225586},{"time":4.1288886,"amplitude":0.11502262},{"time":4.158889,"amplitude":0.0442568424,"emphasis":{"amplitude":0.1737421056315789,"frequency":0.9}},{"time":4.1758957,"amplitude":0.072165224,"emphasis":{"amplitude":0.20862758263157902,"frequency":0.9}},{"time":4.210884,"amplitude":0.035954784000000004,"emphasis":{"amplitude":0.16336453263157893,"frequency":0.9}},{"time":4.231882,"amplitude":0.053809168,"emphasis":{"amplitude":0.18568251263157895,"frequency":0.9}},{"time":4.337868,"amplitude":0.031795343999999996,"emphasis":{"amplitude":0.15816523263157892,"frequency":0.9}},{"time":4.3388886,"amplitude":0.057081768000000005,"emphasis":{"amplitude":0.18977326263157893,"frequency":0.9}},{"time":4.371882,"amplitude":0.028403091200000005,"emphasis":{"amplitude":0.15392491663157895,"frequency":0.9}},{"time":4.3828797,"amplitude":0.053817176,"emphasis":{"amplitude":0.18569252263157895,"frequency":0.9}},{"time":4.415873,"amplitude":0.0352175472,"emphasis":{"amplitude":0.16244298663157894,"frequency":0.9}},{"time":4.4168706,"amplitude":0.058685448,"emphasis":{"amplitude":0.19177786263157895,"frequency":0.9}},{"time":4.445873,"amplitude":0.03360961},{"time":4.4538774,"amplitude":0.13661899},{"time":4.4768705,"amplitude":0.072994},{"time":4.4778686,"amplitude":0.15017629},{"time":4.5088663,"amplitude":0.08287258},{"time":4.5478683,"amplitude":0.099590465},{"time":4.5918593,"amplitude":0.031582177},{"time":4.627868,"amplitude":0.049292720000000005,"emphasis":{"amplitude":0.15372116315789472,"frequency":0.9}},{"time":4.6518593,"amplitude":0.030229279999999997,"emphasis":{"amplitude":0.12989186315789475,"frequency":0.9}},{"time":4.6788435,"amplitude":0.046528368,"emphasis":{"amplitude":0.15026572315789472,"frequency":0.9}},{"time":4.7008615,"amplitude":0.026008744,"emphasis":{"amplitude":0.12461619315789473,"frequency":0.9}},{"time":4.716848,"amplitude":0.051071888,"emphasis":{"amplitude":0.15594512315789472,"frequency":0.9}},{"time":4.739841,"amplitude":0.026489347200000003,"emphasis":{"amplitude":0.12521694715789475,"frequency":0.9}},{"time":4.779841,"amplitude":0.0381812544,"emphasis":{"amplitude":0.13983183115789471,"frequency":0.9}},{"time":4.8398414,"amplitude":0.029986918},{"time":4.8418365,"amplitude":0.08118941},{"time":4.8598413,"amplitude":0.050886206},{"time":4.869841,"amplitude":0.074322544},{"time":4.870839,"amplitude":0.20093064},{"time":4.895828,"amplitude":0.094825625},{"time":4.896848,"amplitude":0.16655782},{"time":4.950839,"amplitude":0.048937023},{"time":5.0008388,"amplitude":0.054627594},{"time":5.001837,"amplitude":0.054289266},{"time":5.0148296,"amplitude":0.12782873},{"time":5.016825,"amplitude":0.31010106},{"time":5.027823,"amplitude":0.30844602},{"time":5.0528345,"amplitude":0.14399678},{"time":5.053832,"amplitude":0.22551836},{"time":5.0758276,"amplitude":0.269295},{"time":5.0928345,"amplitude":0.16170129},{"time":5.120816,"amplitude":0.069426246},{"time":5.197823,"amplitude":0.031641668000000005,"emphasis":{"amplitude":0.11323629552631578,"frequency":0.9}},{"time":5.235805,"amplitude":0.09711310880000001,"emphasis":{"amplitude":0.1950755965263158,"frequency":0.9}},{"time":5.2628117,"amplitude":0.0401421904,"emphasis":{"amplitude":0.12386194852631578,"frequency":0.9}},{"time":5.2898183,"amplitude":0.11187512,"emphasis":{"amplitude":0.21352811052631576,"frequency":0.9}},{"time":5.311814,"amplitude":0.057759664,"emphasis":{"amplitude":0.14588379052631578,"frequency":0.9}},{"time":5.3438096,"amplitude":0.044224408,"emphasis":{"amplitude":0.12896472052631577,"frequency":0.9}},{"time":5.3658047,"amplitude":0.115133832,"emphasis":{"amplitude":0.21760150052631577,"frequency":0.9}},{"time":5.3968024,"amplitude":0.055521464,"emphasis":{"amplitude":0.14308604052631577,"frequency":0.9}},{"time":5.4978004,"amplitude":0.06563769},{"time":5.5097957,"amplitude":0.20996557},{"time":5.5278006,"amplitude":0.11213861},{"time":5.5607934,"amplitude":0.10387969},{"time":5.5897956,"amplitude":0.053346872},{"time":5.5987983,"amplitude":0.14839114},{"time":5.6157823,"amplitude":0.100542575},{"time":5.631791,"amplitude":0.18501058},{"time":5.675782,"amplitude":0.065727875},{"time":5.7147846,"amplitude":0.042347893},{"time":5.7347846,"amplitude":0.069396384},{"time":5.779773,"amplitude":0.03336861},{"time":5.803764,"amplitude":0.046395734},{"time":5.8057823,"amplitude":0.12822701},{"time":5.823764,"amplitude":0.16020072},{"time":5.8747616,"amplitude":0.04579407},{"time":5.8987756,"amplitude":0.111737095},{"time":5.902766,"amplitude":0.24080645},{"time":5.916757,"amplitude":0.24992068},{"time":5.9467573,"amplitude":0.112151936},{"time":5.9497733,"amplitude":0.20221175},{"time":5.968753,"amplitude":0.112875834},{"time":6.000748,"amplitude":0.08246271},{"time":6.0017686,"amplitude":0.09049803},{"time":6.040748,"amplitude":0.08311639},{"time":6.068753,"amplitude":0.048892662},{"time":6.112744,"amplitude":0.031442656000000006,"emphasis":{"amplitude":0.13667174105263155,"frequency":0.9}},{"time":6.118753,"amplitude":0.057373528,"emphasis":{"amplitude":0.16908533105263157,"frequency":0.9}},{"time":6.160748,"amplitude":0.0233854112,"emphasis":{"amplitude":0.12660018505263154,"frequency":0.9}},{"time":6.230748,"amplitude":0.037825528000000004,"emphasis":{"amplitude":0.14465033105263156,"frequency":0.9}},{"time":6.2607484,"amplitude":0.0272817792,"emphasis":{"amplitude":0.13147064505263156,"frequency":0.9}},{"time":6.2747393,"amplitude":0.0464585904,"emphasis":{"amplitude":0.15544165905263155,"frequency":0.9}},{"time":6.3097277,"amplitude":0.041115036800000004,"emphasis":{"amplitude":0.14876221705263157,"frequency":0.9}},{"time":6.344739,"amplitude":0.021358440000000003,"emphasis":{"amplitude":0.12406647105263154,"frequency":0.9}},{"time":6.3807254,"amplitude":0.0481930464,"emphasis":{"amplitude":0.15760972905263157,"frequency":0.9}},{"time":6.4107256,"amplitude":0.026784454},{"time":6.4607253,"amplitude":0.09828929},{"time":6.482721,"amplitude":0.07368248},{"time":6.483719,"amplitude":0.16324016},{"time":6.5377097,"amplitude":0.037302792},{"time":6.542721,"amplitude":0.058981612},{"time":6.6137185,"amplitude":0.029179603},{"time":6.6177096,"amplitude":0.07494341},{"time":6.6617007,"amplitude":0.06807579},{"time":6.6687074,"amplitude":0.15636921},{"time":6.6917005,"amplitude":0.075705},{"time":6.6926985,"amplitude":0.17415598},{"time":6.70771,"amplitude":0.15715452},{"time":6.710703,"amplitude":0.21963759},{"time":6.7467117,"amplitude":0.08618},{"time":6.7807026,"amplitude":0.10428793},{"time":6.8117003,"amplitude":0.049954776},{"time":6.837687,"amplitude":0.098483495},{"time":6.8817005,"amplitude":0.060251847},{"time":6.8917007,"amplitude":0.14365247},{"time":6.9076867,"amplitude":0.104295745},{"time":6.9086847,"amplitude":0.19315955},{"time":6.94068,"amplitude":0.07616722},{"time":6.9426985,"amplitude":0.10887075},{"time":6.97068,"amplitude":0.05656632},{"time":6.972698,"amplitude":0.09886669},{"time":6.9916778,"amplitude":0.0470252752,"emphasis":{"amplitude":0.17457106768421052,"frequency":0.9}},{"time":7.00068,"amplitude":0.07801064800000002,"emphasis":{"amplitude":0.21330278368421052,"frequency":0.9}},{"time":7.001678,"amplitude":0.07537712,"emphasis":{"amplitude":0.2100108736842105,"frequency":0.9}},{"time":7.021678,"amplitude":0.0398081096,"emphasis":{"amplitude":0.16554961068421054,"frequency":0.9}},{"time":7.0436735,"amplitude":0.054231,"emphasis":{"amplitude":0.1835782236842105,"frequency":0.9}},{"time":7.097687,"amplitude":0.0231652024,"emphasis":{"amplitude":0.14474597668421052,"frequency":0.9}},{"time":7.164671,"amplitude":0.06513759200000001,"emphasis":{"amplitude":0.1972114636842105,"frequency":0.9}},{"time":7.1776643,"amplitude":0.046472636000000005,"emphasis":{"amplitude":0.17388026868421053,"frequency":0.9}},{"time":7.188662,"amplitude":0.10527757600000001,"emphasis":{"amplitude":0.24738644368421053,"frequency":0.9}},{"time":7.2356687,"amplitude":0.05005716,"emphasis":{"amplitude":0.17836092368421053,"frequency":0.9}},{"time":7.24068,"amplitude":0.0840034,"emphasis":{"amplitude":0.22079372368421052,"frequency":0.9}},{"time":7.2696595,"amplitude":0.051554225},{"time":7.2806573,"amplitude":0.058279835},{"time":7.2826757,"amplitude":0.19245288},{"time":7.312653,"amplitude":0.10692047},{"time":7.3136735,"amplitude":0.16877642},{"time":7.342653,"amplitude":0.06953606},{"time":7.3706574,"amplitude":0.050040714},{"time":7.377664,"amplitude":0.08732643},{"time":7.4006577,"amplitude":0.04559724},{"time":7.461655,"amplitude":0.022794288,"emphasis":{"amplitude":0.16796654421052631,"frequency":0.9}},{"time":7.492653,"amplitude":0.028350636000000002,"emphasis":{"amplitude":0.1749119792105263,"frequency":0.9}},{"time":7.5116553,"amplitude":0.053120576,"emphasis":{"amplitude":0.2058744042105263,"frequency":0.9}},{"time":7.513651,"amplitude":0.10347688,"emphasis":{"amplitude":0.2688197842105263,"frequency":0.9}},{"time":7.544648,"amplitude":0.0569862608,"emphasis":{"amplitude":0.2107065102105263,"frequency":0.9}},{"time":7.602653,"amplitude":0.0263615728,"emphasis":{"amplitude":0.17242565021052633,"frequency":0.9}},{"time":7.612653,"amplitude":0.043379456000000004,"emphasis":{"amplitude":0.19369800421052633,"frequency":0.9}},{"time":7.6586394,"amplitude":0.021148156,"emphasis":{"amplitude":0.16590887921052633,"frequency":0.9}},{"time":7.7126303,"amplitude":0.049838696,"emphasis":{"amplitude":0.20177205421052632,"frequency":0.9}},{"time":7.728639,"amplitude":0.069498824,"emphasis":{"amplitude":0.2263472142105263,"frequency":0.9}},{"time":7.7566214,"amplitude":0.0355272352,"emphasis":{"amplitude":0.18388272821052631,"frequency":0.9}},{"time":7.7766213,"amplitude":0.060827344000000005,"emphasis":{"amplitude":0.21550786421052634,"frequency":0.9}},{"time":7.780635,"amplitude":0.134944984,"emphasis":{"amplitude":0.3081549142105263,"frequency":0.9}},{"time":7.809637,"amplitude":0.047176736000000004,"emphasis":{"amplitude":0.19844460421052632,"frequency":0.9}},{"time":7.8426304,"amplitude":0.0349176112,"emphasis":{"amplitude":0.18312069821052632,"frequency":0.9}},{"time":7.8486166,"amplitude":0.076344352,"emphasis":{"amplitude":0.23490412421052634,"frequency":0.9}},{"time":7.87263,"amplitude":0.042505992,"emphasis":{"amplitude":0.1926061742105263,"frequency":0.9}},{"time":7.896621,"amplitude":0.06966058400000001,"emphasis":{"amplitude":0.22654941421052632,"frequency":0.9}},{"time":7.927619,"amplitude":0.028171952,"emphasis":{"amplitude":0.17468862421052633,"frequency":0.9}},{"time":7.9376187,"amplitude":0.05543543680000001,"emphasis":{"amplitude":0.2087679802105263,"frequency":0.9}},{"time":7.9796143,"amplitude":0.022699967200000004,"emphasis":{"amplitude":0.16784864321052634,"frequency":0.9}},{"time":8.000612,"amplitude":0.0268670976,"emphasis":{"amplitude":0.17305755621052632,"frequency":0.9}},{"time":8.00161,"amplitude":0.026124859200000003,"emphasis":{"amplitude":0.1721297582105263,"frequency":0.9}},{"time":8.072653,"amplitude":0.033670244,"emphasis":{"amplitude":0.1815614892105263,"frequency":0.9}},{"time":8.075646,"amplitude":0.087202536,"emphasis":{"amplitude":0.24847685421052632,"frequency":0.9}},{"time":8.141678,"amplitude":0.0372220848,"emphasis":{"amplitude":0.18600129021052633,"frequency":0.9}},{"time":8.152676,"amplitude":0.062206056,"emphasis":{"amplitude":0.21723125421052633,"frequency":0.9}},{"time":8.188684,"amplitude":0.042793152,"emphasis":{"amplitude":0.19296512421052633,"frequency":0.9}},{"time":8.1906805,"amplitude":0.07382583200000001,"emphasis":{"amplitude":0.23175597421052632,"frequency":0.9}},{"time":8.218707,"amplitude":0.043646752000000004,"emphasis":{"amplitude":0.19403212421052632,"frequency":0.9}},{"time":8.220703,"amplitude":0.09179614400000001,"emphasis":{"amplitude":0.25421886421052636,"frequency":0.9}},{"time":8.270725,"amplitude":0.037751916,"emphasis":{"amplitude":0.18666357921052631,"frequency":0.9}},{"time":8.309728,"amplitude":0.046408992,"emphasis":{"amplitude":0.19748492421052632,"frequency":0.9}},{"time":8.312743,"amplitude":0.100303112,"emphasis":{"amplitude":0.2648525742105263,"frequency":0.9}},{"time":8.332744,"amplitude":0.053259112,"emphasis":{"amplitude":0.2060475742105263,"frequency":0.9}},{"time":8.380771,"amplitude":0.081616832,"emphasis":{"amplitude":0.2414947242105263,"frequency":0.9}},{"time":8.403787,"amplitude":0.0399367096,"emphasis":{"amplitude":0.1893945712105263,"frequency":0.9}},{"time":8.451791,"amplitude":0.036810046400000004,"emphasis":{"amplitude":0.18548624221052631,"frequency":0.9}},{"time":8.491814,"amplitude":0.0672202112,"emphasis":{"amplitude":0.22349894821052632,"frequency":0.9}},{"time":8.525827,"amplitude":0.026006712,"emphasis":{"amplitude":0.17198207421052633,"frequency":0.9}},{"time":8.588843,"amplitude":0.037008821600000005,"emphasis":{"amplitude":0.18573471121052632,"frequency":0.9}},{"time":8.597846,"amplitude":0.11312985600000001,"emphasis":{"amplitude":0.28088600421052634,"frequency":0.9}},{"time":8.623855,"amplitude":0.052686831999999996,"emphasis":{"amplitude":0.2053322242105263,"frequency":0.9}},{"time":8.66288,"amplitude":0.073383696,"emphasis":{"amplitude":0.23120330421052632,"frequency":0.9}},{"time":8.664875,"amplitude":0.150674568,"emphasis":{"amplitude":0.32781689421052634,"frequency":0.9}},{"time":8.687891,"amplitude":0.07607520000000001,"emphasis":{"amplitude":0.23456768421052632,"frequency":0.9}},{"time":8.719909,"amplitude":0.043515264,"emphasis":{"amplitude":0.19386776421052632,"frequency":0.9}},{"time":8.735918,"amplitude":0.0896213472,"emphasis":{"amplitude":0.25150036821052635,"frequency":0.9}},{"time":8.756916,"amplitude":0.07788291200000001,"emphasis":{"amplitude":0.23682732421052632,"frequency":0.9}},{"time":8.757914,"amplitude":0.145255104,"emphasis":{"amplitude":0.32104256421052635,"frequency":0.9}},{"time":8.78093,"amplitude":0.078508008,"emphasis":{"amplitude":0.2376086942105263,"frequency":0.9}},{"time":8.850952,"amplitude":0.0424859584,"emphasis":{"amplitude":0.19258113221052633,"frequency":0.9}},{"time":8.852947,"amplitude":0.082270696,"emphasis":{"amplitude":0.24231205421052632,"frequency":0.9}},{"time":8.87898,"amplitude":0.05289305},{"time":8.879977,"amplitude":0.10939348},{"time":8.899977,"amplitude":0.110008456},{"time":8.913991,"amplitude":0.23811688},{"time":8.925986,"amplitude":0.17865148},{"time":8.932993,"amplitude":0.38116097},{"time":8.953991,"amplitude":0.2025627},{"time":8.971995,"amplitude":0.24964933},{"time":9.000023,"amplitude":0.14419323},{"time":9.00102,"amplitude":0.14018646},{"time":9.030023,"amplitude":0.11434592},{"time":9.034036,"amplitude":0.21807337},{"time":9.082041,"amplitude":0.08280257},{"time":9.090045,"amplitude":0.19189537},{"time":9.122064,"amplitude":0.11442024},{"time":9.127074,"amplitude":0.16624632},{"time":9.175079,"amplitude":0.08904839},{"time":9.188095,"amplitude":0.33158445},{"time":9.211111,"amplitude":0.19254266},{"time":9.213106,"amplitude":0.30078956},{"time":9.246122,"amplitude":0.13083288},{"time":9.252109,"amplitude":0.20747283},{"time":9.286122,"amplitude":0.08479567},{"time":9.377166,"amplitude":0.0780104},{"time":9.380181,"amplitude":0.16059718},{"time":9.412177,"amplitude":0.073905066},{"time":9.418186,"amplitude":0.15145037},{"time":9.449206,"amplitude":0.10380784},{"time":9.451201,"amplitude":0.17852846},{"time":9.492222,"amplitude":0.07355139},{"time":9.50322,"amplitude":0.37874562},{"time":9.51322,"amplitude":0.37112105},{"time":9.515215,"amplitude":0.5568415},{"time":9.529229,"amplitude":0.34181055},{"time":9.548231,"amplitude":0.20399448},{"time":9.569251,"amplitude":0.23469095},{"time":9.617256,"amplitude":0.12073361},{"time":9.624263,"amplitude":0.27210313},{"time":9.68229,"amplitude":0.09094401},{"time":9.690294,"amplitude":0.2552766},{"time":9.717301,"amplitude":0.12771149},{"time":9.746326,"amplitude":0.16022113},{"time":9.773334,"amplitude":0.07123762},{"time":9.849365,"amplitude":0.1034838},{"time":9.881383,"amplitude":0.056133974},{"time":9.92238,"amplitude":0.06451344,"emphasis":{"amplitude":0.09643127368421052,"frequency":0.9}},{"time":9.955397,"amplitude":0.044273032000000004,"emphasis":{"amplitude":0.07113076368421052,"frequency":0.9}},{"time":9.956394,"amplitude":0.0959791008,"emphasis":{"amplitude":0.13576334968421053,"frequency":0.9}},{"time":10.000431,"amplitude":0.062847688,"emphasis":{"amplitude":0.09434908368421052,"frequency":0.9}},{"time":10.001429,"amplitude":0.060766244000000004,"emphasis":{"amplitude":0.09174727868421052,"frequency":0.9}},{"time":10.015419,"amplitude":0.07168442400000001,"emphasis":{"amplitude":0.10539500368421052,"frequency":0.9}},{"time":10.038435,"amplitude":0.0357295336,"emphasis":{"amplitude":0.060451390684210536,"frequency":0.9}},{"time":10.045442,"amplitude":0.05452252800000001,"emphasis":{"amplitude":0.08394263368421052,"frequency":0.9}},{"time":10.0624485,"amplitude":0.032304328,"emphasis":{"amplitude":0.05616988368421053,"frequency":0.9}},{"time":10.064445,"amplitude":0.062199543999999996,"emphasis":{"amplitude":0.09353890368421051,"frequency":0.9}},{"time":10.0854645,"amplitude":0.058655120000000005,"emphasis":{"amplitude":0.08910837368421053,"frequency":0.9}},{"time":10.101474,"amplitude":0.034626784,"emphasis":{"amplitude":0.059072953684210526,"frequency":0.9}},{"time":10.110476,"amplitude":0.0285414992,"emphasis":{"amplitude":0.051466347684210524,"frequency":0.9}},{"time":10.114467,"amplitude":0.058509824,"emphasis":{"amplitude":0.08892675368421052,"frequency":0.9}},{"time":10.124467,"amplitude":0.0533771872,"emphasis":{"amplitude":0.08251095768421052,"frequency":0.9}},{"time":10.144489,"amplitude":0.028782248,"emphasis":{"amplitude":0.051767283684210526,"frequency":0.9}},{"time":10.14848,"amplitude":0.0776257632,"emphasis":{"amplitude":0.11282167768421052,"frequency":0.9}},{"time":10.160476,"amplitude":0.053853408000000005,"emphasis":{"amplitude":0.08310623368421052,"frequency":0.9}},{"time":10.180499,"amplitude":0.028890004800000004,"emphasis":{"amplitude":0.05190197968421053,"frequency":0.9}},{"time":10.184489,"amplitude":0.033915853600000004,"emphasis":{"amplitude":0.05818429068421053,"frequency":0.9}},{"time":10.20551,"amplitude":0.024405342400000002,"emphasis":{"amplitude":0.04629615168421053,"frequency":0.9}},{"time":10.206508,"amplitude":0.0423825384,"emphasis":{"amplitude":0.06876764668421052,"frequency":0.9}},{"time":10.219501,"amplitude":0.0402101728,"emphasis":{"amplitude":0.06605218968421052,"frequency":0.9}},{"time":10.221519,"amplitude":0.07444980799999999,"emphasis":{"amplitude":0.10885173368421051,"frequency":0.9}},{"time":10.234512,"amplitude":0.05092732,"emphasis":{"amplitude":0.07944862368421052,"frequency":0.9}},{"time":10.261519,"amplitude":0.026172524800000003,"emphasis":{"amplitude":0.048505129684210536,"frequency":0.9}},{"time":10.267529,"amplitude":0.049333616000000004,"emphasis":{"amplitude":0.07745649368421052,"frequency":0.9}},{"time":10.284535,"amplitude":0.031218992,"emphasis":{"amplitude":0.05481321368421053,"frequency":0.9}},{"time":10.285533,"amplitude":0.04757141200000001,"emphasis":{"amplitude":0.07525373868421052,"frequency":0.9}},{"time":10.303537,"amplitude":0.027832514400000005,"emphasis":{"amplitude":0.05058011668421054,"frequency":0.9}},{"time":10.304535,"amplitude":0.05377338400000001,"emphasis":{"amplitude":0.08300620368421052,"frequency":0.9}},{"time":10.334558,"amplitude":0.0224475144,"emphasis":{"amplitude":0.04384886668421053,"frequency":0.9}},{"time":10.351564,"amplitude":0.017856312,"emphasis":{"amplitude":0.03810986368421053,"frequency":0.9}},{"time":10.3535595,"amplitude":0.0389276176,"emphasis":{"amplitude":0.06444899568421052,"frequency":0.9}},{"time":10.382585,"amplitude":0.0248947648,"emphasis":{"amplitude":0.04690792968421053,"frequency":0.9}},{"time":10.383582,"amplitude":0.03024164,"emphasis":{"amplitude":0.05359152368421053,"frequency":0.9}},{"time":10.406576,"amplitude":0.015972025600000002,"emphasis":{"amplitude":0.03575450568421053,"frequency":0.9}},{"time":10.407597,"amplitude":0.027025312000000003,"emphasis":{"amplitude":0.04957111368421053,"frequency":0.9}},{"time":10.440589,"amplitude":0.0108492584,"emphasis":{"amplitude":0.029351046684210527,"frequency":0.9}},{"time":10.449615,"amplitude":0.015487384000000002,"emphasis":{"amplitude":0.03514870368421053,"frequency":0.9}},{"time":10.490612,"amplitude":0.005055256},{"time":10.536644,"amplitude":0.0006602683},{"time":10.605669,"amplitude":0.000027490009},{"time":11.000816,"amplitude":4.3564796e-10},{"time":11.001837,"amplitude":4.3564796e-10},{"time":11.499024,"amplitude":4.3564796e-10},{"time":11.5,"amplitude":4.3564796e-10},{"time":11.5,"amplitude":4.3564796e-10}],"frequency":[{"time":0,"frequency":0.6941139105263159},{"time":0.026122449,"frequency":0.7644581905263159},{"time":0.11609977,"frequency":0.6320021105263158},{"time":0.14802721,"frequency":0.8177375305263159},{"time":0.16544218,"frequency":0.6769042105263159},{"time":0.2060771,"frequency":0.7888557105263159},{"time":0.21768707,"frequency":0.6888509505263158},{"time":0.26122448,"frequency":0.8439560705263158},{"time":0.26993197,"frequency":0.6438664905263158},{"time":0.3541043,"frequency":0.7949769905263158},{"time":0.38022676,"frequency":0.7090149605263159},{"time":0.38893422,"frequency":0.8733108105263159},{"time":0.4092517,"frequency":0.6643998105263158},{"time":0.46730158,"frequency":0.6993546905263159},{"time":0.48761904,"frequency":0.8077360805263158},{"time":0.5456689,"frequency":0.6640231105263159},{"time":0.5688889,"frequency":0.8154722305263158},{"time":0.59501135,"frequency":0.6944340305263159},{"time":0.62693876,"frequency":0.826193310526316},{"time":0.6617687,"frequency":0.6901446105263158},{"time":0.7111111,"frequency":0.6729585405263159},{"time":0.7198186,"frequency":0.8360129405263159},{"time":0.74303854,"frequency":0.6670158105263159},{"time":0.757551,"frequency":0.8172178705263158},{"time":0.8068934,"frequency":0.6378217505263158},{"time":0.89687073,"frequency":0.7585386805263159},{"time":0.9055782,"frequency":0.6441697105263158},{"time":0.94911563,"frequency":0.7699027105263159},{"time":0.9578231,"frequency":0.5912092305263159},{"time":0.9984581,"frequency":0.7578288405263158},{"time":1.0013604,"frequency":0.6650529305263159},{"time":1.0187755,"frequency":0.7961462305263158},{"time":1.0594103,"frequency":0.6567220805263159},{"time":1.0913378,"frequency":0.6688561605263159},{"time":1.1174603,"frequency":0.6888190105263159},{"time":1.1522902,"frequency":0.758278170526316},{"time":1.1784127,"frequency":0.6840126305263159},{"time":1.22195,"frequency":0.8428425605263159},{"time":1.2364625,"frequency":0.6977796405263159},{"time":1.2770975,"frequency":0.7816722805263159},{"time":1.3003174,"frequency":0.6599501805263158},{"time":1.3177323,"frequency":0.7815946105263158},{"time":1.3728797,"frequency":0.6461683905263158},{"time":1.4193196,"frequency":0.8399065905263159},{"time":1.4483446,"frequency":0.707401380526316},{"time":1.4570521,"frequency":0.8732428105263159},{"time":1.474467,"frequency":0.736897450526316},{"time":1.5731518,"frequency":0.8265142305263158},{"time":1.5934693,"frequency":0.3212974},{"time":1.6108843,"frequency":0.4077426},{"time":1.6312017,"frequency":0.25035298},{"time":1.6892517,"frequency":0.42528892},{"time":1.7966439,"frequency":0.47683463},{"time":1.8256688,"frequency":0.24447128},{"time":1.8721087,"frequency":0.28365898},{"time":1.8866212,"frequency":0.38501167},{"time":1.9185487,"frequency":0.2462894},{"time":1.9475737,"frequency":0.33614522},{"time":1.9591836,"frequency":0.24035902},{"time":1.9998186,"frequency":0.298275},{"time":2.002721,"frequency":0.30339837},{"time":2.0201359,"frequency":0.39688787},{"time":2.0665758,"frequency":0.2699997},{"time":2.1072109,"frequency":0.26706615},{"time":2.1623583,"frequency":0.4365488},{"time":2.1913831,"frequency":0.48428223},{"time":2.2117007,"frequency":0.30222812},{"time":2.2581406,"frequency":0.29982984},{"time":2.266848,"frequency":0.42281523},{"time":2.2813604,"frequency":0.28008467},{"time":2.3423128,"frequency":0.36525244},{"time":2.3510203,"frequency":0.48199996},{"time":2.4032652,"frequency":0.29004928},{"time":2.4148753,"frequency":0.4191784},{"time":2.4293876,"frequency":0.29198676},{"time":2.4584126,"frequency":0.40622},{"time":2.4700227,"frequency":0.27919614},{"time":2.519365,"frequency":0.3985597},{"time":2.6093423,"frequency":0.3375154},{"time":2.6238549,"frequency":0.41494745},{"time":2.6615872,"frequency":0.4033797},{"time":2.6731973,"frequency":0.26835582},{"time":2.7225397,"frequency":0.39502835},{"time":2.7834918,"frequency":0.38493127},{"time":2.818322,"frequency":0.3114867},{"time":2.8850791,"frequency":0.26091498},{"time":2.9024942,"frequency":0.3656557},{"time":2.9344218,"frequency":0.2567618},{"time":2.989569,"frequency":0.45971236},{"time":2.9982765,"frequency":0.36330333},{"time":3.001179,"frequency":0.38760823},{"time":3.0418139,"frequency":0.32740474},{"time":3.1056688,"frequency":0.37770414},{"time":3.1637187,"frequency":0.49082437},{"time":3.1927435,"frequency":0.31821454},{"time":3.1985486,"frequency":0.42341837},{"time":3.253696,"frequency":0.27196315},{"time":3.3088434,"frequency":0.44482845},{"time":3.3436735,"frequency":0.29970732},{"time":3.3610883,"frequency":0.41606927},{"time":3.3901134,"frequency":0.37164065},{"time":3.4249432,"frequency":0.43614662},{"time":3.4365532,"frequency":0.3452367},{"time":3.4917006,"frequency":0.40694973},{"time":3.5323355,"frequency":0.28942308},{"time":3.570068,"frequency":0.28002667},{"time":3.6019952,"frequency":0.36454415},{"time":3.6078002,"frequency":0.48868358},{"time":3.6368253,"frequency":0.3218734},{"time":3.6542401,"frequency":0.3901685},{"time":3.6803627,"frequency":0.30161723},{"time":3.7239,"frequency":0.42317638},{"time":3.7529252,"frequency":0.32993555},{"time":3.799365,"frequency":0.41562217},{"time":3.8080723,"frequency":0.3357758},{"time":3.8835373,"frequency":0.48151022},{"time":3.8980498,"frequency":0.31426743},{"time":3.9270747,"frequency":0.45265698},{"time":3.9357822,"frequency":0.33332294},{"time":3.9996371,"frequency":0.3921319},{"time":4.0025396,"frequency":0.39286682},{"time":4.017052,"frequency":0.2938774},{"time":4.063492,"frequency":0.27800986},{"time":4.1128345,"frequency":0.3996745},{"time":4.121542,"frequency":0.30787838},{"time":4.226032,"frequency":0.31550336},{"time":4.237642,"frequency":0.43690896},{"time":4.2492514,"frequency":0.30036762},{"time":4.286984,"frequency":0.39641178},{"time":4.2956915,"frequency":0.2822219},{"time":4.347936,"frequency":0.44727293},{"time":4.365351,"frequency":0.31363},{"time":4.397279,"frequency":0.40981504},{"time":4.426304,"frequency":0.23344845},{"time":4.469841,"frequency":0.35588968},{"time":4.510476,"frequency":0.22153579},{"time":4.5249887,"frequency":0.37209502},{"time":4.568526,"frequency":0.29906788},{"time":4.5888433,"frequency":0.39037573},{"time":4.603356,"frequency":0.30115965},{"time":4.6352835,"frequency":0.40270483},{"time":4.693333,"frequency":0.2809577},{"time":4.7455783,"frequency":0.39113048},{"time":4.7717004,"frequency":0.29178786},{"time":4.87619,"frequency":0.36095464},{"time":4.8965077,"frequency":0.31311876},{"time":4.9168253,"frequency":0.49898583},{"time":4.925533,"frequency":0.3804918},{"time":4.9719725,"frequency":0.29484493},{"time":4.998095,"frequency":0.3418124},{"time":5.0009975,"frequency":0.30040953},{"time":5.044535,"frequency":0.3723358},{"time":5.09678,"frequency":0.2940717},{"time":5.125805,"frequency":0.37356803},{"time":5.13161,"frequency":0.28201556},{"time":5.192562,"frequency":0.4218672},{"time":5.233197,"frequency":0.28319323},{"time":5.2419047,"frequency":0.4126352},{"time":5.273832,"frequency":0.31454077},{"time":5.302857,"frequency":0.3643451},{"time":5.3638096,"frequency":0.2872629},{"time":5.387029,"frequency":0.40979362},{"time":5.398639,"frequency":0.2870614},{"time":5.4189568,"frequency":0.3866935},{"time":5.474104,"frequency":0.32974938},{"time":5.4828115,"frequency":0.4632203},{"time":5.503129,"frequency":0.3143871},{"time":5.5176415,"frequency":0.45434383},{"time":5.561179,"frequency":0.27175906},{"time":5.575691,"frequency":0.3802142},{"time":5.5873013,"frequency":0.25854558},{"time":5.703401,"frequency":0.28464487},{"time":5.7527437,"frequency":0.3462826},{"time":5.770159,"frequency":0.28748786},{"time":5.796281,"frequency":0.41523412},{"time":5.813696,"frequency":0.25559852},{"time":5.897868,"frequency":0.2651341},{"time":5.9385033,"frequency":0.37474802},{"time":5.964626,"frequency":0.24363314},{"time":5.9994555,"frequency":0.26807132},{"time":6.002358,"frequency":0.25057098},{"time":6.0110655,"frequency":0.36558157},{"time":6.1155553,"frequency":0.31063777},{"time":6.130068,"frequency":0.4205172},{"time":6.153288,"frequency":0.31471974},{"time":6.19102,"frequency":0.45594686},{"time":6.2055326,"frequency":0.32691297},{"time":6.220045,"frequency":0.45674843},{"time":6.2461677,"frequency":0.31604257},{"time":6.26068,"frequency":0.4192418},{"time":6.2751927,"frequency":0.3030893},{"time":6.3332424,"frequency":0.46011055},{"time":6.347755,"frequency":0.33051145},{"time":6.37678,"frequency":0.30407447},{"time":6.420317,"frequency":0.38908407},{"time":6.443537,"frequency":0.24145228},{"time":6.46966,"frequency":0.26402223},{"time":6.524807,"frequency":0.43082932},{"time":6.536417,"frequency":0.31888306},{"time":6.5857596,"frequency":0.26169783},{"time":6.594467,"frequency":0.39984936},{"time":6.7105665,"frequency":0.2646824},{"time":6.730884,"frequency":0.38619152},{"time":6.7512016,"frequency":0.26519936},{"time":6.8005443,"frequency":0.3730783},{"time":6.8440814,"frequency":0.2846935},{"time":6.858594,"frequency":0.35910648},{"time":6.9398637,"frequency":0.28782818},{"time":6.980499,"frequency":0.37491462},{"time":6.997914,"frequency":0.29518375},{"time":7.0008163,"frequency":0.30483106},{"time":7.0269384,"frequency":0.48088938},{"time":7.0559635,"frequency":0.30914497},{"time":7.1024036,"frequency":0.43181294},{"time":7.1546483,"frequency":0.30368796},{"time":7.1778684,"frequency":0.38359532},{"time":7.241723,"frequency":0.24022332},{"time":7.2620406,"frequency":0.37126914},{"time":7.288163,"frequency":0.24656491},{"time":7.3200903,"frequency":0.26201004},{"time":7.340408,"frequency":0.36871856},{"time":7.352018,"frequency":0.23405519},{"time":7.42458,"frequency":0.3987349},{"time":7.4390926,"frequency":0.2789202},{"time":7.4565077,"frequency":0.3974498},{"time":7.4826303,"frequency":0.28677347},{"time":7.5000453,"frequency":0.35545215},{"time":7.5319724,"frequency":0.2746276},{"time":7.6074376,"frequency":0.38121387},{"time":7.616145,"frequency":0.29701343},{"time":7.6654873,"frequency":0.3962982},{"time":7.71483,"frequency":0.26059106},{"time":7.799002,"frequency":0.36462244},{"time":7.8251247,"frequency":0.2615903},{"time":7.839637,"frequency":0.3434959},{"time":7.8889794,"frequency":0.26955548},{"time":7.903492,"frequency":0.3988983},{"time":7.947029,"frequency":0.29528415},{"time":7.9731517,"frequency":0.4777176},{"time":7.9992743,"frequency":0.30344173},{"time":8.002176,"frequency":0.31242898},{"time":8.028299,"frequency":0.41082752},{"time":8.048616,"frequency":0.20468454},{"time":8.063129,"frequency":0.40325794},{"time":8.103764,"frequency":0.2662937},{"time":8.135692,"frequency":0.35533243},{"time":8.158912,"frequency":0.2072047},{"time":8.202449,"frequency":0.31619608},{"time":8.208254,"frequency":0.22513162},{"time":8.280816,"frequency":0.3395888},{"time":8.301133,"frequency":0.17578308},{"time":8.362086,"frequency":0.2769468},{"time":8.379501,"frequency":0.14822052},{"time":8.4143305,"frequency":0.3279853},{"time":8.492699,"frequency":0.25807467},{"time":8.510113,"frequency":0.3773862},{"time":8.547846,"frequency":0.17808038},{"time":8.562358,"frequency":0.28389704},{"time":8.605895,"frequency":0.27305833},{"time":8.620408,"frequency":0.37725213},{"time":8.666848,"frequency":0.17128715},{"time":8.713287,"frequency":0.29911023},{"time":8.7800455,"frequency":0.20566082},{"time":8.83229,"frequency":0.34864074},{"time":8.849705,"frequency":0.24508883},{"time":8.893243,"frequency":0.25274235},{"time":8.90195,"frequency":0.17147258},{"time":8.930975,"frequency":0.2933095},{"time":8.954195,"frequency":0.20205554},{"time":8.997732,"frequency":0.2903359},{"time":9.000635,"frequency":0.27213708},{"time":9.020952,"frequency":0.35072425},{"time":9.035464,"frequency":0.18946595},{"time":9.052879,"frequency":0.30793354},{"time":9.093514,"frequency":0.22137298},{"time":9.105124,"frequency":0.35107586},{"time":9.128345,"frequency":0.20319477},{"time":9.151565,"frequency":0.32913312},{"time":9.174785,"frequency":0.19406149},{"time":9.238639,"frequency":0.3340275},{"time":9.258957,"frequency":0.23253444},{"time":9.293787,"frequency":0.3172805},{"time":9.314104,"frequency":0.23297685},{"time":9.351836,"frequency":0.34349662},{"time":9.377959,"frequency":0.17312346},{"time":9.409886,"frequency":0.3156985},{"time":9.433106,"frequency":0.19287884},{"time":9.485352,"frequency":0.40774968},{"time":9.502767,"frequency":0.18802875},{"time":9.523084,"frequency":0.2906283},{"time":9.549206,"frequency":0.19428615},{"time":9.578231,"frequency":0.3307089},{"time":9.688526,"frequency":0.20409903},{"time":9.703038,"frequency":0.29176024},{"time":9.790113,"frequency":0.2167441},{"time":9.833651,"frequency":0.30902544},{"time":9.891701,"frequency":0.3313567},{"time":9.935238,"frequency":0.3853394},{"time":9.946848,"frequency":0.2635256},{"time":9.999093,"frequency":0.37794507},{"time":10.001995,"frequency":0.3660387},{"time":10.016508,"frequency":0.31777337},{"time":10.03102,"frequency":0.35631588},{"time":10.045532,"frequency":0.24864513},{"time":10.057142,"frequency":0.34924275},{"time":10.062947,"frequency":0.2665309},{"time":10.071655,"frequency":0.35871905},{"time":10.091972,"frequency":0.39891335},{"time":10.115192,"frequency":0.31809473},{"time":10.138412,"frequency":0.4036929},{"time":10.1558275,"frequency":0.30078816},{"time":10.173243,"frequency":0.40646014},{"time":10.18195,"frequency":0.3155431},{"time":10.213878,"frequency":0.27131578},{"time":10.25161,"frequency":0.42563462},{"time":10.269025,"frequency":0.3142923},{"time":10.29805,"frequency":0.373328},{"time":10.312562,"frequency":0.24463664},{"time":10.327075,"frequency":0.36273426},{"time":10.361904,"frequency":0.3203054},{"time":10.376417,"frequency":0.22083913},{"time":10.388027,"frequency":0.3282709},{"time":10.419954,"frequency":0.24133192},{"time":10.437369,"frequency":0.35578424},{"time":10.451881,"frequency":0.26560223},{"time":10.469296,"frequency":0.26462895},{"time":10.478004,"frequency":0.35154256},{"time":10.50703,"frequency":0.20933019},{"time":10.509932,"frequency":0},{"time":10.997551,"frequency":0},{"time":11.000453,"frequency":0},{"time":11.488072,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.haptic.meta new file mode 100644 index 0000000..7b38a53 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7930134f6551747dcb52d9d1ee74fddf +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.wav new file mode 100644 index 0000000..61037d1 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.wav.meta new file mode 100644 index 0000000..713672f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Nature/Thunder2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 85f4cc65b063a4e718be79d7b1f41346 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects.meta new file mode 100644 index 0000000..3d50c05 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f037a87d08a1490c92e3a00d5bdec7f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.haptic new file mode 100644 index 0000000..ab8831b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Book1.wav","project":"Book 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00020369518},{"time":0.0010204081,"amplitude":0.00020369518},{"time":0.28900227,"amplitude":0},{"time":0.30301586,"amplitude":0.011468013},{"time":0.32501134,"amplitude":0.0425274},{"time":0.3270068,"amplitude":0.07338087},{"time":0.3410204,"amplitude":0.04973234},{"time":0.34301588,"amplitude":0.07667932},{"time":0.36201814,"amplitude":0.03833232},{"time":0.37800452,"amplitude":0.021092746},{"time":0.4107552931875001,"amplitude":0},{"time":0.5443509057436945,"amplitude":0},{"time":0.5461500335632912,"amplitude":0.10621085250873613},{"time":0.62,"amplitude":0.17242896193103457},{"time":0.64,"amplitude":0.18139082393103462},{"time":0.6680045,"amplitude":0.1583523320689656},{"time":0.6809977,"amplitude":0.16106927356896555},{"time":0.7128055179113925,"amplitude":0.16783259329267491},{"time":0.7435673788607595,"amplitude":0.24046495585481645},{"time":0.7609977,"amplitude":0},{"time":1.0150113,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.2338138800107002,"frequency":0},{"time":0.28711200768750006,"frequency":0.43103448275862083},{"time":0.33378685,"frequency":0.39676303},{"time":0.34249434,"frequency":0.6255713},{"time":0.40429300834391624,"frequency":0.5275390510505236},{"time":0.6968419319699362,"frequency":0.9111423255014172},{"time":0.7644705360759494,"frequency":0.9175567681609036},{"time":0.91522544925,"frequency":0.38675729310344825},{"time":1.0013604,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.haptic.meta new file mode 100644 index 0000000..6667423 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0aa9d325f040949238fe3e95649505e6 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.wav new file mode 100644 index 0000000..eee2734 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.wav.meta new file mode 100644 index 0000000..13b151e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 59e2d9940033545829537d70cdc9f04f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.haptic new file mode 100644 index 0000000..37b9baf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Book2.wav","project":"Book 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0003624891},{"time":0.0010204081,"amplitude":0.0003624891},{"time":0.29501134,"amplitude":0},{"time":0.30201814,"amplitude":0.017501771},{"time":0.3140136,"amplitude":0.052932072},{"time":0.3210204,"amplitude":0.051758647},{"time":0.32501134,"amplitude":0.07749541},{"time":0.3270068,"amplitude":0.13354932},{"time":0.3410204,"amplitude":0.09030997},{"time":0.34301588,"amplitude":0.1421103},{"time":0.36600906,"amplitude":0.060021956},{"time":0.38301587,"amplitude":0.03175885},{"time":0.4122313649375001,"amplitude":0},{"time":0.586193707625,"amplitude":0},{"time":0.5940136,"amplitude":0.047370188},{"time":0.62,"amplitude":0.022047376},{"time":0.6230159,"amplitude":0.10334272},{"time":0.64,"amplitude":0.050443552},{"time":0.6680045,"amplitude":0.017031193},{"time":0.69600904,"amplitude":0},{"time":1.0150113,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.040634923,"frequency":0},{"time":0.043811833312500006,"frequency":0.5874742965517242},{"time":0.38022676,"frequency":0.5828215},{"time":0.58630383,"frequency":0.37295148},{"time":0.7083041614375001,"frequency":0.42394416896551756},{"time":0.9114787614375001,"frequency":0.32620458896551746},{"time":0.93750566,"frequency":0.43279707},{"time":0.98975056,"frequency":0.11214224}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.haptic.meta new file mode 100644 index 0000000..008127a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 079721a2efb9b41559557cc7cfaf01f6 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.wav new file mode 100644 index 0000000..c8e54dd Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.wav.meta new file mode 100644 index 0000000..a56a003 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 32f1e2b4aaff8428e9ec30653001a922 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.haptic new file mode 100644 index 0000000..e76d7c2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Book3.wav","project":"Book 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0005932186},{"time":0.0010204081,"amplitude":0.0005932186},{"time":0.048004534,"amplitude":0.017040506},{"time":0.07201814,"amplitude":0.014486276},{"time":0.07800453,"amplitude":0.024529276},{"time":0.1670068,"amplitude":0.014600283},{"time":0.21600907,"amplitude":0.018827414},{"time":0.2470068,"amplitude":0.012203142},{"time":0.26201814,"amplitude":0.024713235},{"time":0.27501133,"amplitude":0.0179293},{"time":0.27900225,"amplitude":0.031387947},{"time":0.29900226,"amplitude":0.018249098},{"time":0.32501134,"amplitude":0.012806153},{"time":0.35900226,"amplitude":0.015807645},{"time":0.3770068,"amplitude":0.010790762},{"time":0.3970068,"amplitude":0.025005499},{"time":0.4010204,"amplitude":0.09464391},{"time":0.4110204,"amplitude":0.06496605},{"time":0.43600905,"amplitude":0.025424577},{"time":0.43800452,"amplitude":0.050481953},{"time":0.45501134,"amplitude":0.030734478},{"time":0.45600906,"amplitude":0.04611229},{"time":0.47600907,"amplitude":0.027723283},{"time":0.47800452,"amplitude":0.07348534},{"time":0.49201813,"amplitude":0.04788782},{"time":0.49301586,"amplitude":0.07057065},{"time":0.5109977,"amplitude":0.040214796},{"time":0.53501135,"amplitude":0.018723955},{"time":0.5590023,"amplitude":0.011412245},{"time":0.6130159,"amplitude":0.004774385},{"time":0.61600906,"amplitude":0.009184566},{"time":0.65900224,"amplitude":0.003714529},{"time":0.7390022,"amplitude":0.009389624},{"time":0.76600903,"amplitude":0.0045688166},{"time":0.82199544,"amplitude":0.008228988},{"time":0.8309977,"amplitude":0.017700795},{"time":0.85501134,"amplitude":0.009508008},{"time":0.9080045,"amplitude":0.03648215},{"time":0.9340136,"amplitude":0.021095559},{"time":0.98600906,"amplitude":0.032014057},{"time":1.0009977,"amplitude":0.028662473},{"time":1.0019954,"amplitude":0.028060019},{"time":1.0140135,"amplitude":0.030504279},{"time":1.03,"amplitude":0.028586388},{"time":1.0630158,"amplitude":0.012408079},{"time":1.0880045,"amplitude":0.018861772},{"time":1.0890023,"amplitude":0.03628682},{"time":1.1109977,"amplitude":0.022114383},{"time":1.1280046,"amplitude":0.02951515},{"time":1.1430159,"amplitude":0.019798735},{"time":1.17,"amplitude":0.012262085},{"time":1.1770068,"amplitude":0.024288163},{"time":1.1970068,"amplitude":0.023350287},{"time":1.2190022,"amplitude":0.014626043},{"time":1.2330159,"amplitude":0.022079546},{"time":1.2440135,"amplitude":0.016772171},{"time":1.2480046,"amplitude":0.036799856},{"time":1.2680045,"amplitude":0.050689235},{"time":1.2700226,"amplitude":0.06754795},{"time":1.2850113,"amplitude":0.04148729},{"time":1.3010204,"amplitude":0.023934307},{"time":1.326009,"amplitude":0.014387077},{"time":1.3290249,"amplitude":0.032616436},{"time":1.3590249,"amplitude":0.011877008},{"time":1.3650113,"amplitude":0.021354403},{"time":1.4030159,"amplitude":0.006180945},{"time":1.4160317,"amplitude":0.019368067},{"time":1.4440136,"amplitude":0.009218697},{"time":1.4500227,"amplitude":0.015265889},{"time":1.4860318,"amplitude":0.005898843},{"time":1.5170294,"amplitude":0.0045650667},{"time":1.5220181,"amplitude":0.011963935},{"time":1.5660317,"amplitude":0.004974908},{"time":1.5670295,"amplitude":0.014336105},{"time":1.5900227,"amplitude":0.0070415447},{"time":1.6220407,"amplitude":0.004222345},{"time":1.625034,"amplitude":0.010086386},{"time":1.6600226,"amplitude":0.005376154},{"time":1.6800226,"amplitude":0.010124221},{"time":1.7220408,"amplitude":0.001864718},{"time":1.7225623,"amplitude":0.001864718},{"time":1.7225623,"amplitude":0.001864718}],"frequency":[{"time":0,"frequency":0},{"time":0.000005,"frequency":0.2814159292035398},{"time":0.00001,"frequency":0.7263191853097349},{"time":0.3268974779375,"frequency":0.6029439685840704},{"time":0.3856162368125,"frequency":0.3667254840707965},{"time":0.45278913,"frequency":0.35834718},{"time":0.5256272591874995,"frequency":0.25132743362831855},{"time":0.7056396815624999,"frequency":0.3893805309734514},{"time":0.8388209,"frequency":0.30709392},{"time":0.9636281,"frequency":0.6710815},{"time":1.1178168785000004,"frequency":0.6256143957522124},{"time":1.2277551,"frequency":0.8179847886725662},{"time":1.2448193538125,"frequency":0.9017605840707965},{"time":1.2654874,"frequency":0.8147860486725661},{"time":1.3119273,"frequency":0.7646689086725662},{"time":1.3583673,"frequency":0.6361466986725662},{"time":1.3728797,"frequency":0.7233538086725663},{"time":1.4135146,"frequency":0.7052883186725663},{"time":1.4222221,"frequency":0.8354481486725661},{"time":1.4425396,"frequency":0.5969350686725662},{"time":1.6287674555625005,"frequency":0.24629157053097345},{"time":1.7350063,"frequency":0.23369352176991165},{"time":1.7350113,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.haptic.meta new file mode 100644 index 0000000..f94c9cf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 54fb76d2c037a4e29a0644454a80d039 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.wav new file mode 100644 index 0000000..892fc05 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.wav.meta new file mode 100644 index 0000000..218fec1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Book3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 16717e03acb0b49f88b3c4a92f46b108 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash1.haptic new file mode 100644 index 0000000..476a2c5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Cash 2.wav","project":"Cash 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00016575195},{"time":0.0010204081,"amplitude":0.00016575195},{"time":0.0470068,"amplitude":0.0095412955},{"time":0.1170068,"amplitude":0.0039577316},{"time":0.13600907,"amplitude":0.011034865},{"time":0.15201814,"amplitude":0.041542247},{"time":0.17600907,"amplitude":0.019755583},{"time":0.20800453,"amplitude":0.0102731455},{"time":0.21201813,"amplitude":0.045096003},{"time":0.23301587,"amplitude":0.0528836},{"time":0.26201814,"amplitude":0.021641728},{"time":0.32999998,"amplitude":0.0072448184},{"time":0.3640136,"amplitude":0.020447839},{"time":0.43301585,"amplitude":0.0046498636},{"time":0.4480045,"amplitude":0.014564286},{"time":0.4809977,"amplitude":0.0066181314},{"time":0.48999998,"amplitude":0.028367966},{"time":0.5250113,"amplitude":0.009061152},{"time":0.55501133,"amplitude":0.020891067},{"time":0.60501134,"amplitude":0.008495772},{"time":0.6850113,"amplitude":0.01083032},{"time":0.7490023,"amplitude":0.01794957},{"time":0.75199544,"amplitude":0.04216824,"emphasis":{"amplitude":0.11465720265486726,"frequency":0.9}},{"time":0.76900226,"amplitude":0.032539405},{"time":0.78401357,"amplitude":0.08170062},{"time":0.78999996,"amplitude":0.15091614},{"time":0.8030159,"amplitude":0.13685659},{"time":0.80600905,"amplitude":0.17075260800000003,"emphasis":{"amplitude":0.27538766265486736,"frequency":0.9}},{"time":0.8340136,"amplitude":0.09337388},{"time":0.84900224,"amplitude":0.07550336},{"time":0.85099775,"amplitude":0.15371038},{"time":0.85900223,"amplitude":0.18962936,"emphasis":{"amplitude":0.29898360265486734,"frequency":0.9}},{"time":0.8729932,"amplitude":0.16330788},{"time":0.89,"amplitude":0.11458082},{"time":0.89299315,"amplitude":0.26219864,"emphasis":{"amplitude":0.38969520265486735,"frequency":0.9}},{"time":0.90999997,"amplitude":0.1809486},{"time":0.92501134,"amplitude":0.108413406},{"time":0.9380045,"amplitude":0.10400653},{"time":0.9570068,"amplitude":0.064322785},{"time":0.95900226,"amplitude":0.103682064,"emphasis":{"amplitude":0.1915494826548673,"frequency":0.9}},{"time":1.0009977,"amplitude":0.036313526},{"time":1.0019954,"amplitude":0.035171993},{"time":1.0140135,"amplitude":0.027801413},{"time":1.0229932,"amplitude":0.027437165},{"time":1.0250113,"amplitude":0.038451664},{"time":1.0340136,"amplitude":0.031347223},{"time":1.0370067,"amplitude":0.03601806},{"time":1.0380045,"amplitude":0.06021958},{"time":1.0519954,"amplitude":0.03780504},{"time":1.0613886000000001,"amplitude":0},{"time":1.0850114,"amplitude":0},{"time":1.086009,"amplitude":0.25673714},{"time":1.0880045,"amplitude":0.35138702},{"time":1.0970068,"amplitude":0.25628567},{"time":1.1050113,"amplitude":0.18983787},{"time":1.11,"amplitude":0.15901157},{"time":1.1109977,"amplitude":0.19362223},{"time":1.1220181,"amplitude":0.15492684},{"time":1.1330159,"amplitude":0.10678811},{"time":1.1430159,"amplitude":0.075452805},{"time":1.1509978,"amplitude":0.056912035},{"time":1.1520181,"amplitude":0.06992477},{"time":1.1530159,"amplitude":0.23866758},{"time":1.1540136,"amplitude":0.28730065},{"time":1.1620181,"amplitude":0.2131952},{"time":1.1690023,"amplitude":0.1599451},{"time":1.1740136,"amplitude":0.12902957},{"time":1.186009,"amplitude":0.08058421},{"time":1.1880045,"amplitude":0.099451914},{"time":1.206009,"amplitude":0.058376715},{"time":1.2090023,"amplitude":0.06445058},{"time":1.2200227,"amplitude":0.043888822},{"time":1.2370068,"amplitude":0.02586086},{"time":1.2550113,"amplitude":0.013991853},{"time":1.2980272,"amplitude":0.004898979},{"time":1.3090249,"amplitude":0.006847069},{"time":1.3270068,"amplitude":0.004624059},{"time":1.336009,"amplitude":0.0077697253},{"time":1.3600227,"amplitude":0.0035456545},{"time":1.3850113,"amplitude":0.001815746},{"time":1.3854649,"amplitude":0.001815746},{"time":1.3854649,"amplitude":0.001815746}],"frequency":[{"time":0,"frequency":0},{"time":0.11900226,"frequency":0.5256637168141594},{"time":0.12190475,"frequency":0.6737866247787612},{"time":0.16544218,"frequency":0.9115044247787611},{"time":0.16834468,"frequency":0.5256637168141594},{"time":0.18575963,"frequency":0.9065825247787611},{"time":0.20027211,"frequency":0.726642},{"time":0.22639456,"frequency":0.9115044247787611},{"time":0.26122448,"frequency":0.8243465747787612},{"time":0.264127,"frequency":0.5256637168141594},{"time":0.48471656,"frequency":0.5256637168141594},{"time":0.48761904,"frequency":0.9098403247787612},{"time":0.5079365,"frequency":0.7740421247787611},{"time":0.510839,"frequency":0.5256637168141594},{"time":0.54276645,"frequency":0.5256637168141594},{"time":0.5456689,"frequency":0.6629693},{"time":0.5688889,"frequency":0.68732464},{"time":0.57759637,"frequency":0.5256637168141594},{"time":0.6530612,"frequency":0.5256637168141594},{"time":0.6559637,"frequency":0.8634894247787611},{"time":0.67918366,"frequency":0.7262884},{"time":0.6878911,"frequency":0.8696180247787612},{"time":0.7198186,"frequency":0.7332169747787611},{"time":0.7227211,"frequency":0.5256637168141594},{"time":0.73142856,"frequency":0.5256637168141594},{"time":0.7343311,"frequency":0.7816126247787611},{"time":0.8529685499999999,"frequency":0.929203539823009},{"time":0.9448480600000001,"frequency":0.913274336283186},{"time":0.9704581000000001,"frequency":0.8255335486725665},{"time":1.0013604,"frequency":0.8925590247787611},{"time":1.0163853999999999,"frequency":0.9168141592920355},{"time":1.0332879,"frequency":0.8546346247787612},{"time":1.0361904,"frequency":0.9115044247787611},{"time":1.0448979,"frequency":0.9115044247787611},{"time":1.0478004,"frequency":0.7787628247787611},{"time":1.0507029,"frequency":0.59428954},{"time":1.0536053,"frequency":0.60908663},{"time":1.0565078,"frequency":0.7347828},{"time":1.0594103,"frequency":0.5256637168141594},{"time":1.0739229,"frequency":0.5256637168141594},{"time":1.0768254,"frequency":0.42002910884955746},{"time":1.0797278,"frequency":0.5398230088495575},{"time":1.1252502,"frequency":0.4247787610619468},{"time":1.1406802,"frequency":0.5219791088495576},{"time":1.1698327,"frequency":0.4548672566371682},{"time":1.1987301,"frequency":0.5398230088495575},{"time":1.2016326,"frequency":0.44886667884955733},{"time":1.2074375,"frequency":0.5398230088495575},{"time":1.2190475,"frequency":0.5398230088495575},{"time":1.22195,"frequency":0.5173213088495576},{"time":1.2248526,"frequency":0.4293257688495574},{"time":1.2277551,"frequency":0.48037010884955744},{"time":1.2306576,"frequency":0.35393770884955733},{"time":1.23356,"frequency":0.5127143088495576},{"time":1.2364625,"frequency":0.5398230088495575},{"time":1.239365,"frequency":0.16814159292035397},{"time":1.3844898,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash1.haptic.meta new file mode 100644 index 0000000..8542b72 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4416df1735b754000b010148943fa8c8 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.haptic new file mode 100644 index 0000000..71f5718 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Cash 5.wav","project":"Cash 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00016478296},{"time":0.0010204081,"amplitude":0.00016478296},{"time":0.10501134,"amplitude":0.014198385},{"time":0.115011334,"amplitude":0.036405733600000004,"emphasis":{"amplitude":0.15170185726548674,"frequency":0.9}},{"time":0.14800453,"amplitude":0.033204023},{"time":0.15002267,"amplitude":0.06480672800000001,"emphasis":{"amplitude":0.16773407371681415,"frequency":0.9}},{"time":0.16900226,"amplitude":0.049600832},{"time":0.17201814,"amplitude":0.111997128,"emphasis":{"amplitude":0.22672207371681413,"frequency":0.9}},{"time":0.19501133,"amplitude":0.061918687},{"time":0.21201813,"amplitude":0.034821093},{"time":0.21600907,"amplitude":0.077452146,"emphasis":{"amplitude":0.202691900619469,"frequency":0.9}},{"time":0.24002267,"amplitude":0.07394887},{"time":0.24301587,"amplitude":0.07511173,"emphasis":{"amplitude":0.19801107061946904,"frequency":0.9}},{"time":0.26501134,"amplitude":0.07420768},{"time":0.28600907,"amplitude":0.047231555},{"time":0.2870068,"amplitude":0.050231025,"emphasis":{"amplitude":0.18010806769911503,"frequency":0.9}},{"time":0.31900227,"amplitude":0.089764144,"emphasis":{"amplitude":0.19539102070796455,"frequency":0.9}},{"time":0.35201815,"amplitude":0.06483929},{"time":0.3770068,"amplitude":0.09332461600000001,"emphasis":{"amplitude":0.19984161070796458,"frequency":0.9}},{"time":0.38800454,"amplitude":0.0817387},{"time":0.39,"amplitude":0.16328394400000001,"emphasis":{"amplitude":0.28729077070796455,"frequency":0.9}},{"time":0.40800452,"amplitude":0.11355124},{"time":0.4480045,"amplitude":0.033710837},{"time":0.45501134,"amplitude":0.0851518752,"emphasis":{"amplitude":0.23210356081415928,"frequency":0.9}},{"time":0.4840136,"amplitude":0.037292067},{"time":0.5260091,"amplitude":0.021500397},{"time":0.55501133,"amplitude":0.03760195},{"time":0.55600905,"amplitude":0.04927121,"emphasis":{"amplitude":0.14633003061946903,"frequency":0.9}},{"time":0.57201815,"amplitude":0.06309731},{"time":0.5740136,"amplitude":0.136865856,"emphasis":{"amplitude":0.2684274527433629,"frequency":0.5}},{"time":0.59999996,"amplitude":0.07432732},{"time":0.6340136,"amplitude":0.04493987},{"time":0.6370068,"amplitude":0.06945499,"emphasis":{"amplitude":0.186697590619469,"frequency":0.9}},{"time":0.6450113,"amplitude":0.11176311},{"time":0.64800453,"amplitude":0.18365107723893803,"emphasis":{"amplitude":0.30920986424778757,"frequency":0.9}},{"time":0.6840136,"amplitude":0.060827754},{"time":0.7219955,"amplitude":0.015733687},{"time":0.7530159,"amplitude":0.01465475},{"time":0.7550113,"amplitude":0.0281484904,"emphasis":{"amplitude":0.13784048025663717,"frequency":0.9}},{"time":0.80600905,"amplitude":0.0073962114},{"time":0.9029932,"amplitude":0.0091144815},{"time":0.9039229,"amplitude":0.0091144815},{"time":0.9039229,"amplitude":0.0091144815}],"frequency":[{"time":0,"frequency":0},{"time":0.104489796,"frequency":0.4849557522123894},{"time":0.10739229,"frequency":0.8212389380530976},{"time":0.13061225,"frequency":0.7562974680530976},{"time":0.13641724,"frequency":0.4849557522123894},{"time":0.27771518912500004,"frequency":0.7663716814159296},{"time":0.3619147378750001,"frequency":0.8000000000000005},{"time":0.47600907,"frequency":0.7364662380530975},{"time":0.47891155,"frequency":0.30088495575221236},{"time":0.49052155,"frequency":0.30088495575221236},{"time":0.49342406,"frequency":0.5725702080530974},{"time":0.510839,"frequency":0.6152735980530974},{"time":0.5137415,"frequency":0.30088495575221236},{"time":0.52244896,"frequency":0.30088495575221236},{"time":0.5311565,"frequency":0.8212389380530976},{"time":0.6008163,"frequency":0.8212389380530976},{"time":0.6037188,"frequency":0.30088495575221236},{"time":0.6124263,"frequency":0.30088495575221236},{"time":0.6153288,"frequency":0.8212389380530976},{"time":0.69079363,"frequency":0.7683379680530975},{"time":0.7111111,"frequency":0.40848857805309735},{"time":0.7169161,"frequency":0.30088495575221236},{"time":0.72852606,"frequency":0.6835666880530975},{"time":0.73142856,"frequency":0.30088495575221236},{"time":0.74303854,"frequency":0.30088495575221236},{"time":0.7546485,"frequency":0.7375356380530975},{"time":0.78077096,"frequency":0.4843966380530975},{"time":0.78367347,"frequency":0},{"time":0.90267575,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.haptic.meta new file mode 100644 index 0000000..8aa6ac2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2f5e8b6a048334226a6f0e74aa86b882 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.wav new file mode 100644 index 0000000..8516564 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.wav.meta new file mode 100644 index 0000000..cfda41f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: dcb02f28cff3445d390346c407d9a425 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash5.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash5.wav new file mode 100644 index 0000000..700ca41 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash5.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash5.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash5.wav.meta new file mode 100644 index 0000000..c55d408 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash5.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: bdea7835016ba4eff9e2ded269563cc8 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash8.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash8.wav new file mode 100644 index 0000000..9ed546c Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash8.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash8.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash8.wav.meta new file mode 100644 index 0000000..a6b8c0c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Cash8.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 3202e32342f284a42a3dd45f0ac9bd01 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/CashRegister1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/CashRegister1.haptic new file mode 100644 index 0000000..cc85282 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/CashRegister1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Cash 8.wav","project":"Cash Register 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00044313775},{"time":0.0010204081,"amplitude":0.00044313775},{"time":0.08600907,"amplitude":0.0030398357},{"time":0.106009066,"amplitude":0.025966097},{"time":0.13501133,"amplitude":0.010951165},{"time":0.1740136,"amplitude":0.0072766566},{"time":0.1870068,"amplitude":0.022516543},{"time":0.22301587,"amplitude":0.021318631},{"time":0.24501133,"amplitude":0.040673256},{"time":0.24900226,"amplitude":0.08696852320000001,"emphasis":{"amplitude":0.19720622922123895,"frequency":0.9}},{"time":0.26201814,"amplitude":0.074407552,"emphasis":{"amplitude":0.18150501522123894,"frequency":0.9}},{"time":0.26700678,"amplitude":0.107807456,"emphasis":{"amplitude":0.22325489522123895,"frequency":0.9}},{"time":0.28501132,"amplitude":0.058791768,"emphasis":{"amplitude":0.16198528522123892,"frequency":0.9}},{"time":0.3210204,"amplitude":0.040922683},{"time":0.32501134,"amplitude":0.10215712800000001,"emphasis":{"amplitude":0.21619198522123897,"frequency":0.9}},{"time":0.35900226,"amplitude":0.040922236},{"time":0.40201813,"amplitude":0.016860092},{"time":0.42301586,"amplitude":0.05168496,"emphasis":{"amplitude":0.15310177522123894,"frequency":0.9}},{"time":0.44900227,"amplitude":0.028490046},{"time":0.4640136,"amplitude":0.05528414400000001,"emphasis":{"amplitude":0.15760075522123893,"frequency":0.9}},{"time":0.49301586,"amplitude":0.029751256},{"time":0.5280045,"amplitude":0.014297727},{"time":0.57301587,"amplitude":0.012247698},{"time":0.57800454,"amplitude":0.0299138},{"time":0.60301584,"amplitude":0.013598291},{"time":0.62,"amplitude":0.032469437},{"time":0.6890023,"amplitude":0.014532505},{"time":0.6930159,"amplitude":0.04402241},{"time":0.70600903,"amplitude":0.031295333},{"time":0.7109977,"amplitude":0.0479852736,"emphasis":{"amplitude":0.14847716722123896,"frequency":0.9}},{"time":0.75,"amplitude":0.03565895},{"time":0.7530159,"amplitude":0.099814056,"emphasis":{"amplitude":0.21326314522123893,"frequency":0.9}},{"time":0.78301585,"amplitude":0.047538498400000004,"emphasis":{"amplitude":0.14791869822123896,"frequency":0.9}},{"time":0.7860091,"amplitude":0.0734466192,"emphasis":{"amplitude":0.18030384922123896,"frequency":0.9}},{"time":0.81,"amplitude":0.040634904},{"time":0.81299317,"amplitude":0.117023656,"emphasis":{"amplitude":0.23477514522123896,"frequency":0.9}},{"time":0.84999996,"amplitude":0.0370459496,"emphasis":{"amplitude":0.13480301222123894,"frequency":0.9}},{"time":0.85199547,"amplitude":0.0744326,"emphasis":{"amplitude":0.18153632522123894,"frequency":0.9}},{"time":0.8840136,"amplitude":0.029433426},{"time":0.94,"amplitude":0.06826751183575222,"emphasis":{"amplitude":0.24050680358779364,"frequency":0.5}},{"time":1.0009977,"amplitude":0.06774202679575221,"emphasis":{"amplitude":0.23984994728779363,"frequency":0.5}},{"time":1.0508376108750002,"amplitude":0.05614191430747636,"emphasis":{"amplitude":0.24259118598779367,"frequency":0.5}},{"time":1.0870068,"amplitude":0.08119357535575222,"emphasis":{"amplitude":0.25666438298779365,"frequency":0.5}},{"time":1.1260091,"amplitude":0.06850001375575221,"emphasis":{"amplitude":0.24079743098779366,"frequency":0.5}},{"time":1.1660091,"amplitude":0.08707644095575222,"emphasis":{"amplitude":0.2640179649877936,"frequency":0.5}},{"time":1.2040136,"amplitude":0.06975224735575222,"emphasis":{"amplitude":0.2768454816084834,"frequency":0.5}},{"time":1.23313009275,"amplitude":0.0819372640178212,"emphasis":{"amplitude":0.2877664076084834,"frequency":0.5}},{"time":1.262487824875,"amplitude":0.07752058627989014,"emphasis":{"amplitude":0.2779352156084834,"frequency":0.5}},{"time":1.3024230226851166,"amplitude":0.07892703349824802,"emphasis":{"amplitude":0.2917622401486722,"frequency":0.5}},{"time":1.339243339375,"amplitude":0.11814825146902658,"emphasis":{"amplitude":0.3373404867500763,"frequency":0.5}},{"time":1.374838657,"amplitude":0.13224784573109558,"emphasis":{"amplitude":0.35065463475007635,"frequency":0.5}},{"time":1.416902553375,"amplitude":0.12899373053109559,"emphasis":{"amplitude":0.3465869907500763,"frequency":0.5}},{"time":1.4680272,"amplitude":0.11754928106902657,"emphasis":{"amplitude":0.33659177375007626,"frequency":0.5}},{"time":1.5010204,"amplitude":0.13049050186902664,"emphasis":{"amplitude":0.35276829975007634,"frequency":0.5}},{"time":1.543967803625,"amplitude":0.11476574440695761,"emphasis":{"amplitude":0.33742269775007633,"frequency":0.5}},{"time":1.577202143,"amplitude":0.15828286357522126,"emphasis":{"amplitude":0.3875087518828197,"frequency":0.5}},{"time":1.615216689125,"amplitude":0.1845327514372902,"emphasis":{"amplitude":0.4160107668828196,"frequency":0.5}},{"time":1.655034,"amplitude":0.17320921797522126,"emphasis":{"amplitude":0.4061666948828197,"frequency":0.5}},{"time":1.695034,"amplitude":0.16654205797522126,"emphasis":{"amplitude":0.39783274488281967,"frequency":0.5}},{"time":1.7420307538750002,"amplitude":0.19752853971315218,"emphasis":{"amplitude":0.4408761918828195,"frequency":0.5}},{"time":1.7830385,"amplitude":0.18112535157522122,"emphasis":{"amplitude":0.41606186188281963,"frequency":0.5}},{"time":1.8160317,"amplitude":0.16801731317522126,"emphasis":{"amplitude":0.39967681388281967,"frequency":0.5}},{"time":1.821043,"amplitude":0.22474858646902648},{"time":1.8467424642499999,"amplitude":0},{"time":1.8680499,"amplitude":0},{"time":1.8680549,"amplitude":0.6173504266371683,"emphasis":{"amplitude":0.7550548355752214,"frequency":0.5}},{"time":1.8680599,"amplitude":0.6706628479646017},{"time":1.8930385,"amplitude":0.7122091099115044},{"time":1.9040363,"amplitude":0.6570647399115045},{"time":1.9200454,"amplitude":0.5388295399115045},{"time":1.9420408,"amplitude":0.08655361},{"time":2.0002965855,"amplitude":0},{"time":2.1540363,"amplitude":0.0038819304},{"time":2.1542177,"amplitude":0.0038819304},{"time":2.1542177,"amplitude":0.0038819304}],"frequency":[{"time":0,"frequency":0},{"time":0.04679996075000004,"frequency":0.4601769911504426},{"time":0.22349207,"frequency":1},{"time":0.3570068,"frequency":1},{"time":0.37732425,"frequency":0.9069776},{"time":0.38022676,"frequency":0.38407079646017694},{"time":0.40054423,"frequency":0.38407079646017694},{"time":0.4092517,"frequency":0.991413},{"time":0.46730158,"frequency":1},{"time":0.47310656,"frequency":0.38407079646017694},{"time":0.48181406,"frequency":1},{"time":0.48471656,"frequency":0.38407079646017694},{"time":0.5688889,"frequency":0.38407079646017694},{"time":0.57179135,"frequency":1},{"time":0.6066213,"frequency":0.7009118},{"time":0.6211338,"frequency":0.38407079646017694},{"time":0.62693876,"frequency":0.9942621},{"time":0.64725626,"frequency":1},{"time":0.6501587,"frequency":0.38407079646017694},{"time":0.6646712,"frequency":0.38407079646017694},{"time":0.6675737,"frequency":0.8301777},{"time":0.6733787,"frequency":0.38407079646017694},{"time":0.68208617,"frequency":0.38407079646017694},{"time":0.6878911,"frequency":1},{"time":0.83591837,"frequency":0.9801193},{"time":0.8417233,"frequency":0.38407079646017694},{"time":0.84752834,"frequency":1},{"time":0.88816327,"frequency":0.78223103},{"time":0.9032439891249999,"frequency":0.11858407079646015},{"time":1.819928681499999,"frequency":0.23439515265486693},{"time":1.8199336814999991,"frequency":0.7221238938053096},{"time":2.0790441700000004,"frequency":0.8341596494690267},{"time":2.1536508,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/CashRegister1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/CashRegister1.haptic.meta new file mode 100644 index 0000000..64354ab --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/CashRegister1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 574ff42b380334a6eafcf5857b050cc2 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.haptic new file mode 100644 index 0000000..41ce096 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Coin 1.wav","project":"Coin 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00058486895},{"time":0.0010204081,"amplitude":0.00058486895},{"time":0.009002267,"amplitude":0.037213586},{"time":0.0470068,"amplitude":0.008762487},{"time":0.07,"amplitude":0.0037435107},{"time":0.074013606,"amplitude":0.20917457},{"time":0.0870068,"amplitude":0.12869747},{"time":0.10800453,"amplitude":0.060240246},{"time":0.12800454,"amplitude":0.028787624},{"time":0.12900226,"amplitude":0.07830889},{"time":0.15501134,"amplitude":0.032357983},{"time":0.15600906,"amplitude":0.09342975,"emphasis":{"amplitude":0.1868595,"frequency":0.7233485}},{"time":0.16600907,"amplitude":0.13286622},{"time":0.16900226,"amplitude":0.24691644000000001,"emphasis":{"amplitude":0.3422738685840708,"frequency":0.5}},{"time":0.1870068,"amplitude":0.15794234},{"time":0.20900226,"amplitude":0.06352122},{"time":0.21301587,"amplitude":0.083355768,"emphasis":{"amplitude":0.10419471,"frequency":0.5}},{"time":0.22301587,"amplitude":0.06993739},{"time":0.23301587,"amplitude":0.087422706},{"time":0.2340136,"amplitude":0.16421064000000002,"emphasis":{"amplitude":0.23889161858407082,"frequency":0.5}},{"time":0.2540136,"amplitude":0.098913155},{"time":0.27600905,"amplitude":0.040341184},{"time":0.2770068,"amplitude":0.10320319,"emphasis":{"amplitude":0.20640638,"frequency":0.9}},{"time":0.3011050091875,"amplitude":0.06802773961061946,"emphasis":{"amplitude":0.18768954176991148,"frequency":0.9}},{"time":0.3240136,"amplitude":0.03976141},{"time":0.32501134,"amplitude":0.05709667200000001,"emphasis":{"amplitude":0.23774252141592922,"frequency":0.9}},{"time":0.36102042,"amplitude":0.023086352},{"time":0.36800453,"amplitude":0.058995776,"emphasis":{"amplitude":0.24011640141592921,"frequency":0.9}},{"time":0.39600906,"amplitude":0.02569487},{"time":0.4,"amplitude":0.041416776,"emphasis":{"amplitude":0.2181426514159292,"frequency":0.9}},{"time":0.4310204,"amplitude":0.022644628},{"time":0.4340136,"amplitude":0.063073608,"emphasis":{"amplitude":0.24521369141592925,"frequency":0.9}},{"time":0.45999998,"amplitude":0.028806677},{"time":0.46301585,"amplitude":0.039318832,"emphasis":{"amplitude":0.2155202214159292,"frequency":0.9}},{"time":0.48600906,"amplitude":0.0200277},{"time":0.48800454,"amplitude":0.031412428799999996,"emphasis":{"amplitude":0.1773186333451327,"frequency":0.9}},{"time":0.5280045,"amplitude":0.009474009},{"time":0.53301585,"amplitude":0.0320094288,"emphasis":{"amplitude":0.17806488334513276,"frequency":0.9}},{"time":0.57900226,"amplitude":0.010354334},{"time":0.5920181,"amplitude":0.031288648,"emphasis":{"amplitude":0.1771639073451327,"frequency":0.9}},{"time":0.61,"amplitude":0.020092662},{"time":0.61009073,"amplitude":0.020092662},{"time":0.61009073,"amplitude":0.020092662}],"frequency":[{"time":0,"frequency":0},{"time":0.006549297923326712,"frequency":0.43357560518274413},{"time":0.066757366,"frequency":0.7426250086725665},{"time":0.07256235,"frequency":0.7980366486725665},{"time":0.08126984,"frequency":0.8438362486725666},{"time":0.08417233,"frequency":0.8287826486725665},{"time":0.09287982,"frequency":0.6360664986725666},{"time":0.0986848,"frequency":0.7748541886725666},{"time":0.104489796,"frequency":0.7233422486725665},{"time":0.10739229,"frequency":0.6369129486725664},{"time":0.11029478,"frequency":0.5929203539823006},{"time":0.12770975,"frequency":0.5929203539823006},{"time":0.13061225,"frequency":0.7698474486725666},{"time":0.13351475,"frequency":0.5929203539823006},{"time":0.1509297,"frequency":0.5929203539823006},{"time":0.1538322,"frequency":0.7786542486725665},{"time":0.16253969,"frequency":0.7888291486725665},{"time":0.17705216,"frequency":0.8202402086725664},{"time":0.18285714,"frequency":0.7779185486725666},{"time":0.18575963,"frequency":0.8081049986725666},{"time":0.18866213,"frequency":0.5929203539823006},{"time":0.22349207,"frequency":0.5929203539823006},{"time":0.22639456,"frequency":0.8514614486725665},{"time":0.24090704,"frequency":0.8690265486725666},{"time":0.24380952,"frequency":0.5929203539823006},{"time":0.27573696,"frequency":0.5929203539823006},{"time":0.27863947,"frequency":0.8525506486725665},{"time":0.28734693,"frequency":0.8690265486725666},{"time":0.5769635840062501,"frequency":0.6413201544179898},{"time":0.60952383,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.haptic.meta new file mode 100644 index 0000000..df5d1a8 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4c96effbae347483baac103413c85cc5 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.wav new file mode 100644 index 0000000..4da115a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.wav.meta new file mode 100644 index 0000000..ad18d9e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 0cc8b736879e846a19b851eb815591a8 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin2.haptic new file mode 100644 index 0000000..7da13bf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Coins 2.wav","project":"Coin 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0010724702},{"time":0.07201814,"amplitude":0.0013796544},{"time":0.07301587,"amplitude":0.061004777,"emphasis":{"amplitude":0.12200955,"frequency":0.5}},{"time":0.074013606,"amplitude":0.12200955},{"time":0.08,"amplitude":0.0834213552,"emphasis":{"amplitude":0.1467545701061947,"frequency":0.9}},{"time":0.083015874,"amplitude":0.11437792000000001,"emphasis":{"amplitude":0.1854502761061947,"frequency":0.9}},{"time":0.08600907,"amplitude":0.17673928000000003,"emphasis":{"amplitude":0.26340197610619476,"frequency":0.9}},{"time":0.0940136,"amplitude":0.14661188,"emphasis":{"amplitude":0.22574272610619467,"frequency":0.9}},{"time":0.09600907,"amplitude":0.14989856,"emphasis":{"amplitude":0.22985107610619465,"frequency":0.9}},{"time":0.1070068,"amplitude":0.112726928,"emphasis":{"amplitude":0.18338653610619465,"frequency":0.9}},{"time":0.11600907,"amplitude":0.088324832,"emphasis":{"amplitude":0.15288391610619467,"frequency":0.9}},{"time":0.12102041,"amplitude":0.075865376,"emphasis":{"amplitude":0.1373095961061947,"frequency":0.9}},{"time":0.13102041,"amplitude":0.054284924000000005,"emphasis":{"amplitude":0.11033403110619469,"frequency":0.9}},{"time":0.13600907,"amplitude":0.045815760000000004,"emphasis":{"amplitude":0.0997475761061947,"frequency":0.9}},{"time":0.13900226,"amplitude":0.048879968,"emphasis":{"amplitude":0.1035778361061947,"frequency":0.9}},{"time":0.15301587,"amplitude":0.0327113392,"emphasis":{"amplitude":0.08336705010619469,"frequency":0.9}},{"time":0.16201814,"amplitude":0.0241749736,"emphasis":{"amplitude":0.07269659310619468,"frequency":0.9}},{"time":0.16535680000000003,"amplitude":0.020287998400000003,"emphasis":{"amplitude":0.06429805109734513,"frequency":0.9}},{"time":0.16800453,"amplitude":0.034420323200000005,"emphasis":{"amplitude":0.08550328010619469,"frequency":0.9}},{"time":0.1710204,"amplitude":0.04677172,"emphasis":{"amplitude":0.1009425261061947,"frequency":0.9}},{"time":0.17501134,"amplitude":0.047405052,"emphasis":{"amplitude":0.1017341911061947,"frequency":0.9}},{"time":0.18900226,"amplitude":0.029662536000000003,"emphasis":{"amplitude":0.07955604610619468,"frequency":0.9}},{"time":0.19600907,"amplitude":0.022719976000000003,"emphasis":{"amplitude":0.07087784610619469,"frequency":0.9}},{"time":0.20201814,"amplitude":0.018617917600000002,"emphasis":{"amplitude":0.06575027310619469,"frequency":0.9}},{"time":0.2040136,"amplitude":0.018941680000000002,"emphasis":{"amplitude":0.0661549761061947,"frequency":0.9}},{"time":0.2170068,"amplitude":0.012212663200000001,"emphasis":{"amplitude":0.05774370510619469,"frequency":0.9}},{"time":0.22501133,"amplitude":0.009003164800000001,"emphasis":{"amplitude":0.05373183210619469,"frequency":0.9}},{"time":0.23501134,"amplitude":0.005982364,"emphasis":{"amplitude":0.04995583110619469,"frequency":0.9}},{"time":0.24800453,"amplitude":0.00371415872,"emphasis":{"amplitude":0.04712057450619469,"frequency":0.9}},{"time":0.25800452,"amplitude":0},{"time":0.32979591,"amplitude":0},{"time":0.33,"amplitude":0},{"time":0.33,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.06965986,"frequency":0.7893805309734514},{"time":0.07256235,"frequency":0.7803738309734514},{"time":0.07546485,"frequency":0.6176152609734513},{"time":0.078367345,"frequency":0.7893805309734514},{"time":0.08417233,"frequency":0.7893805309734514},{"time":0.08707482,"frequency":0.7860129909734515},{"time":0.089977324,"frequency":0.6529885309734513},{"time":0.09287982,"frequency":0.7781826309734514},{"time":0.33,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin2.haptic.meta new file mode 100644 index 0000000..83a69fc --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 28c21a0b5fca848f285ed713ce34a5b8 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin3.haptic new file mode 100644 index 0000000..7d98447 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Coins 3.wav","project":"Coin 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00073785265},{"time":0.0010204081,"amplitude":0.00073785265},{"time":0.04600907,"amplitude":0.0008651563},{"time":0.048004534,"amplitude":0.12184899,"emphasis":{"amplitude":0.2389196,"frequency":0.5}},{"time":0.058004536,"amplitude":0.16683546},{"time":0.07301587,"amplitude":0.10149505},{"time":0.0840136,"amplitude":0.07145493},{"time":0.099002264,"amplitude":0.046572134},{"time":0.12002268,"amplitude":0.03333877},{"time":0.13002267,"amplitude":0.0315787224,"emphasis":{"amplitude":0.11026986317699115,"frequency":0.9}},{"time":0.13201813,"amplitude":0.0438709464,"emphasis":{"amplitude":0.12563514317699115,"frequency":0.9}},{"time":0.15600906,"amplitude":0.0194615248,"emphasis":{"amplitude":0.09512336617699114,"frequency":0.9}},{"time":0.16002268,"amplitude":0.026532811200000003,"emphasis":{"amplitude":0.10396247417699116,"frequency":0.9}},{"time":0.1740136,"amplitude":0.017703640000000003,"emphasis":{"amplitude":0.09292601017699115,"frequency":0.9}},{"time":0.18102041,"amplitude":0.036294464,"emphasis":{"amplitude":0.11616454017699114,"frequency":0.9}},{"time":0.19002268,"amplitude":0.04059254400000001,"emphasis":{"amplitude":0.12153714017699115,"frequency":0.9}},{"time":0.2170068,"amplitude":0.018428224000000003,"emphasis":{"amplitude":0.09383174017699115,"frequency":0.9}},{"time":0.2370068,"amplitude":0.010966226400000001,"emphasis":{"amplitude":0.08450424317699115,"frequency":0.9}},{"time":0.24002267,"amplitude":0.01914368,"emphasis":{"amplitude":0.09472606017699114,"frequency":0.9}},{"time":0.26002267,"amplitude":0.0100670288,"emphasis":{"amplitude":0.08338024617699115,"frequency":0.9}},{"time":0.3040136,"amplitude":0.0033473852},{"time":0.30451247,"amplitude":0.0033473852}],"frequency":[{"time":0,"frequency":0},{"time":0.043537416,"frequency":0},{"time":0.04643991,"frequency":0.7280581},{"time":0.0493424,"frequency":0.84519655},{"time":0.052244894,"frequency":0.5752212389380531},{"time":0.05804988,"frequency":0.5752212389380531},{"time":0.06095238,"frequency":0.62533885},{"time":0.06385487,"frequency":0.5752212389380531},{"time":0.3018594,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin3.haptic.meta new file mode 100644 index 0000000..5064e15 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 54b8ec0fd166140138ef6eef0c341c4e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin4.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin4.haptic new file mode 100644 index 0000000..35be642 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin4.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Coins 4.wav","project":"Coin 4","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00004245446},{"time":0.0010204081,"amplitude":0.00004245446},{"time":0.061020408,"amplitude":0.00044800556},{"time":0.06301587,"amplitude":0.13759387},{"time":0.06401361,"amplitude":0.21453601},{"time":0.06600907,"amplitude":0.24397218},{"time":0.067006804,"amplitude":0.32644483},{"time":0.08201814,"amplitude":0.20978273},{"time":0.08600907,"amplitude":0.18340963},{"time":0.09501134,"amplitude":0.14036335},{"time":0.10301587,"amplitude":0.11037125},{"time":0.106009066,"amplitude":0.10561878},{"time":0.1070068,"amplitude":0.11841705},{"time":0.11002267,"amplitude":0.11806265},{"time":0.11800453,"amplitude":0.09420525},{"time":0.13002267,"amplitude":0.0649555},{"time":0.13900226,"amplitude":0.04730066},{"time":0.14002268,"amplitude":0.06663826},{"time":0.15900226,"amplitude":0.0284953416,"emphasis":{"amplitude":0.11349528319469027,"frequency":0.9}},{"time":0.1710204,"amplitude":0.020791177600000002,"emphasis":{"amplitude":0.10386507819469026,"frequency":0.9}},{"time":0.19301587,"amplitude":0.013400617600000001,"emphasis":{"amplitude":0.09462687819469026,"frequency":0.9}},{"time":0.20600906,"amplitude":0.012510216,"emphasis":{"amplitude":0.09351387619469026,"frequency":0.9}},{"time":0.21102041,"amplitude":0.0190191032,"emphasis":{"amplitude":0.10164998519469026,"frequency":0.9}},{"time":0.22301587,"amplitude":0.017394653},{"time":0.22501133,"amplitude":0.1814279},{"time":0.22900227,"amplitude":0.16872625},{"time":0.2310204,"amplitude":0.17619026},{"time":0.24201813,"amplitude":0.120091744},{"time":0.2540136,"amplitude":0.079280555},{"time":0.26700678,"amplitude":0.050545298},{"time":0.28201813,"amplitude":0.023529699200000004,"emphasis":{"amplitude":0.13383690276106194,"frequency":0.9}},{"time":0.28501132,"amplitude":0.0287537816,"emphasis":{"amplitude":0.14036700576106195,"frequency":0.9}},{"time":0.29999998,"amplitude":0.017504510400000003,"emphasis":{"amplitude":0.12630541676106194,"frequency":0.9}},{"time":0.31800452,"amplitude":0.010495224000000001,"emphasis":{"amplitude":0.11754380876106195,"frequency":0.9}},{"time":0.31900227,"amplitude":0.036731856,"emphasis":{"amplitude":0.15033959876106198,"frequency":0.9}},{"time":0.33501133,"amplitude":0.022304575200000003,"emphasis":{"amplitude":0.13230549776106196,"frequency":0.9}},{"time":0.3510204,"amplitude":0.0115732536,"emphasis":{"amplitude":0.11889134576106195,"frequency":0.9}},{"time":0.36201814,"amplitude":0.0073459072000000005,"emphasis":{"amplitude":0.11360716276106195,"frequency":0.9}},{"time":0.3810204,"amplitude":0.0033423344000000003,"emphasis":{"amplitude":0.10860269676106195,"frequency":0.9}},{"time":0.4210204,"amplitude":0.00080985145},{"time":0.42163265,"amplitude":0.00080985145},{"time":0.42163265,"amplitude":0.00080985145}],"frequency":[{"time":0,"frequency":0},{"time":0.055147387,"frequency":0},{"time":0.05804988,"frequency":0.8265486725663721},{"time":0.07546485,"frequency":0.8265486725663721},{"time":0.13716974997093026,"frequency":0.6778761061946903},{"time":0.22349207,"frequency":1},{"time":0.22639456,"frequency":1},{"time":0.42086166,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin4.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin4.haptic.meta new file mode 100644 index 0000000..45c5204 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin4.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: df6ba66827ad642daa95fb9bc020da9f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin5.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin5.haptic new file mode 100644 index 0000000..5835829 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin5.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Coins 5.wav","project":"Coin 5","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0009351409},{"time":0.0010204081,"amplitude":0.0009351409},{"time":0.029002268,"amplitude":0.0014236992},{"time":0.053015873,"amplitude":0.00075084186},{"time":0.06401361,"amplitude":0.0016278976},{"time":0.090022676,"amplitude":0.0017628507},{"time":0.1070068,"amplitude":0.0012811553},{"time":0.10800453,"amplitude":0.26227835,"emphasis":{"amplitude":0.5245567,"frequency":0.5}},{"time":0.10900226,"amplitude":0.5245567},{"time":0.11301587,"amplitude":0.46834883},{"time":0.1170068,"amplitude":0.39667955},{"time":0.12102041,"amplitude":0.3355294},{"time":0.1270068,"amplitude":0.26242644},{"time":0.13102041,"amplitude":0.22071566},{"time":0.1370068,"amplitude":0.17097214},{"time":0.1410204,"amplitude":0.14393872},{"time":0.14800453,"amplitude":0.106129356},{"time":0.1540136,"amplitude":0.0816938},{"time":0.15800454,"amplitude":0.06869296},{"time":0.16401361,"amplitude":0.054343432},{"time":0.16800453,"amplitude":0.08324579},{"time":0.17301586,"amplitude":0.073620036},{"time":0.18301587,"amplitude":0.050351273},{"time":0.18900226,"amplitude":0.039347995},{"time":0.20002267,"amplitude":0.024781816},{"time":0.20201814,"amplitude":0.0354898},{"time":0.20301586,"amplitude":0.059654824},{"time":0.20800453,"amplitude":0.056085728},{"time":0.21102041,"amplitude":0.050501633},{"time":0.21301587,"amplitude":0.09024289},{"time":0.21501133,"amplitude":0.08876632},{"time":0.22600907,"amplitude":0.059336487},{"time":0.23201814,"amplitude":0.045765486},{"time":0.24002267,"amplitude":0.032108262},{"time":0.2510204,"amplitude":0.019933505},{"time":0.26002267,"amplitude":0.013564895},{"time":0.27301586,"amplitude":0.0077984165},{"time":0.28201813,"amplitude":0.005380563},{"time":0.30201814,"amplitude":0.0024574192},{"time":0.34201813,"amplitude":0.00074440415},{"time":0.3740136,"amplitude":0.0010016738},{"time":0.3747846,"amplitude":0.0010016738},{"time":0.3747846,"amplitude":0.0010016738}],"frequency":[{"time":0,"frequency":0},{"time":0.0986848,"frequency":0},{"time":0.101587296,"frequency":0.8017699115044248},{"time":0.113197275,"frequency":0.8017699115044248},{"time":0.11609977,"frequency":0.73110723},{"time":0.270711084375,"frequency":0.5666683136318348},{"time":0.37442178,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin5.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin5.haptic.meta new file mode 100644 index 0000000..dd3a24c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin5.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dd23a3cec55974f40b54e572b9630bcf +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin6.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin6.haptic new file mode 100644 index 0000000..3e4f2ed --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin6.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Coins 7.wav","project":"Coin 6","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0010053953},{"time":0.0010204081,"amplitude":0.0010053953},{"time":0.005011338,"amplitude":0.00135033},{"time":0.0470068,"amplitude":0.0009678922},{"time":0.051020406,"amplitude":0.0016114188},{"time":0.06401361,"amplitude":0.0012346652},{"time":0.08,"amplitude":0.0015502418},{"time":0.10002267,"amplitude":0.00086344563},{"time":0.12102041,"amplitude":0.0011828619},{"time":0.122018136,"amplitude":0.2268418,"emphasis":{"amplitude":0.4536836,"frequency":0.5}},{"time":0.12301587,"amplitude":0.4536836},{"time":0.12600906,"amplitude":0.42560956},{"time":0.13002267,"amplitude":0.37995094},{"time":0.13501133,"amplitude":0.31706583},{"time":0.13900226,"amplitude":0.27063063},{"time":0.1410204,"amplitude":0.25391877},{"time":0.14301588,"amplitude":0.2404621},{"time":0.1470068,"amplitude":0.20862946},{"time":0.15201814,"amplitude":0.17501095},{"time":0.15501134,"amplitude":0.16509256},{"time":0.1570068,"amplitude":0.15500374},{"time":0.15800454,"amplitude":0.15916373},{"time":0.15900226,"amplitude":0.19426286},{"time":0.1610204,"amplitude":0.19204137},{"time":0.16401361,"amplitude":0.17243013},{"time":0.1670068,"amplitude":0.15686575},{"time":0.1710204,"amplitude":0.1395568},{"time":0.1770068,"amplitude":0.11649993},{"time":0.18102041,"amplitude":0.10295501},{"time":0.1870068,"amplitude":0.08675196},{"time":0.19700679,"amplitude":0.06471867},{"time":0.20201814,"amplitude":0.054761164},{"time":0.21002267,"amplitude":0.042829268},{"time":0.2210204,"amplitude":0.028802596},{"time":0.2310204,"amplitude":0.018818887},{"time":0.23900226,"amplitude":0.0133597},{"time":0.2510204,"amplitude":0.00801683},{"time":0.2610204,"amplitude":0.005445511},{"time":0.2710204,"amplitude":0.003698998},{"time":0.2840136,"amplitude":0.002280121},{"time":0.3040136,"amplitude":0.0010587412},{"time":0.30451247,"amplitude":0.0010587412},{"time":0.30451247,"amplitude":0.0010587412}],"frequency":[{"time":0,"frequency":0},{"time":0.11609977,"frequency":0},{"time":0.11900226,"frequency":1},{"time":0.12190475,"frequency":1},{"time":0.124807246,"frequency":0.952462},{"time":0.21099087036875006,"frequency":0.3203539823008848},{"time":0.3018594,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin6.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin6.haptic.meta new file mode 100644 index 0000000..e8765ee --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coin6.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 03186835bb5cd4cee99ddc8a7e4ed5e2 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins2.wav new file mode 100644 index 0000000..05c77fb Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins2.wav.meta new file mode 100644 index 0000000..5ecd785 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f0a0e30b878024715bc0e4289cdb1eaf +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins3.wav new file mode 100644 index 0000000..cc10969 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins3.wav.meta new file mode 100644 index 0000000..c6b29d9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 285146d0269644f879e78aacbb13b3b3 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins4.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins4.wav new file mode 100644 index 0000000..8faeaaa Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins4.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins4.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins4.wav.meta new file mode 100644 index 0000000..fb05083 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins4.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: cb1351b69866d47b6bdd382d752086b6 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins5.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins5.wav new file mode 100644 index 0000000..9b80cb4 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins5.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins5.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins5.wav.meta new file mode 100644 index 0000000..d65d10a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins5.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a5599c7a88b15404cb3156e44481ed9e +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins7.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins7.wav new file mode 100644 index 0000000..85491e6 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins7.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins7.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins7.wav.meta new file mode 100644 index 0000000..7bed4b4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Coins7.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: d9eb08a69941e416e9dfe63c5b987148 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.haptic new file mode 100644 index 0000000..f116c50 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Door Knob 1.wav","project":"Door Knob 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0005031622},{"time":0.0010204081,"amplitude":0.0005031622},{"time":0.013015873,"amplitude":0.00719171},{"time":0.01600907,"amplitude":0.01598937},{"time":0.02201814,"amplitude":0.024835316},{"time":0.028004535,"amplitude":0.022360582},{"time":0.030022675,"amplitude":0.02949136},{"time":0.037006803,"amplitude":0.024569387},{"time":0.04,"amplitude":0.035529006},{"time":0.055011336,"amplitude":0.023867754},{"time":0.057006802,"amplitude":0.09414762880000001,"emphasis":{"amplitude":0.4503805207036329,"frequency":0.5}},{"time":0.06800453,"amplitude":0.08512853},{"time":0.07800453,"amplitude":0.062878884},{"time":0.07900227,"amplitude":0.080896065},{"time":0.08800454,"amplitude":0.06483516},{"time":0.08900227,"amplitude":0.08490073},{"time":0.10301587,"amplitude":0.0525871},{"time":0.12528480335443037,"amplitude":0},{"time":0.13201313,"amplitude":0},{"time":0.13201813,"amplitude":0.34134210658508607,"emphasis":{"amplitude":0.49981338848948376,"frequency":0.5}},{"time":0.14201814,"amplitude":0.0641389},{"time":0.14800453,"amplitude":0.051104546},{"time":0.16201814,"amplitude":0.03325417},{"time":0.17501134,"amplitude":0.029479008},{"time":0.18224730720253163,"amplitude":0},{"time":0.18225230720253163,"amplitude":0.08043615866921604,"emphasis":{"amplitude":0.21909204346080308,"frequency":0.5}},{"time":0.19800453,"amplitude":0.042805854},{"time":0.2070068,"amplitude":0.033772543},{"time":0.2310204,"amplitude":0.019809742},{"time":0.23301587,"amplitude":0.027138602},{"time":0.24401361,"amplitude":0.020746201},{"time":0.2510204,"amplitude":0.022972701},{"time":0.27002266,"amplitude":0.0118455915},{"time":0.27501133,"amplitude":0.021838125},{"time":0.29501134,"amplitude":0.013343879},{"time":0.31301588,"amplitude":0.010718619},{"time":0.31600907,"amplitude":0.015042117},{"time":0.33800453,"amplitude":0.008937646},{"time":0.34800452,"amplitude":0.015415493},{"time":0.35501134,"amplitude":0.012860337},{"time":0.35594106,"amplitude":0.012860337}],"frequency":[{"time":0,"frequency":0},{"time":0.008707482,"frequency":0},{"time":0.011609977,"frequency":0.47915867},{"time":0.02031746,"frequency":0.5067039},{"time":0.026122449,"frequency":0.35108218},{"time":0.04643991,"frequency":0.32014328},{"time":0.052244894,"frequency":0.6979261},{"time":0.05804988,"frequency":0.78707194},{"time":0.07293834083544305,"frequency":0.32709145430210346},{"time":0.10121131516455695,"frequency":0.3316591132122371},{"time":0.113197275,"frequency":0.5803047},{"time":0.13351475,"frequency":0.5009208},{"time":0.13931973,"frequency":0.65595555},{"time":0.1498082640506328,"frequency":0.19306539541108977},{"time":0.17003336048101245,"frequency":0.17903489330783945},{"time":0.17705216,"frequency":0.43072408},{"time":0.18575963,"frequency":0.5825922},{"time":0.2060771,"frequency":0.19551680166347984},{"time":0.27131518000000004,"frequency":0.35138823835946437},{"time":0.30034013000000004,"frequency":0.3635025943594643},{"time":0.30614512000000005,"frequency":0.23518164435946481},{"time":0.30904760000000003,"frequency":0.40152916435946434},{"time":0.34097503,"frequency":0.3288357043594644},{"time":0.34968253000000005,"frequency":0.23518164435946481},{"time":0.36709748000000003,"frequency":0.38127818435946437},{"time":0.36999998,"frequency":0.23518164435946481}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.haptic.meta new file mode 100644 index 0000000..b4016a8 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e0ae0b66ec5c345169542bae58a3ec1d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.wav new file mode 100644 index 0000000..e792d1a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.wav.meta new file mode 100644 index 0000000..3e44a69 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/DoorKnob1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 16e89c535fc76465eb13606cb2c2a039 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.haptic new file mode 100644 index 0000000..e2c838e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Fan 1.wav","project":"Fan 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.020199863},{"time":0.0010204081,"amplitude":0.020199863},{"time":0.0070068026,"amplitude":0.21482345},{"time":0.05201814,"amplitude":0.15138113},{"time":0.09501134,"amplitude":0.15972602},{"time":0.1270068,"amplitude":0.2285552},{"time":0.15501134,"amplitude":0.13756868},{"time":0.1570068,"amplitude":0.26812863},{"time":0.1940136,"amplitude":0.111232266},{"time":0.22900227,"amplitude":0.12784004},{"time":0.23501134,"amplitude":0.25534597},{"time":0.27301586,"amplitude":0.13842773},{"time":0.27600905,"amplitude":0.23597834},{"time":0.29800454,"amplitude":0.14697045},{"time":0.30501133,"amplitude":0.27336055},{"time":0.3310204,"amplitude":0.15057218},{"time":0.39,"amplitude":0.17519414},{"time":0.3910204,"amplitude":0.2733196},{"time":0.41900226,"amplitude":0.1715754},{"time":0.4510204,"amplitude":0.2444141},{"time":0.4770068,"amplitude":0.15736738},{"time":0.50700676,"amplitude":0.24732369},{"time":0.53501135,"amplitude":0.14284565},{"time":0.5360091,"amplitude":0.27429858},{"time":0.5909977,"amplitude":0.14594564},{"time":0.59501135,"amplitude":0.28923887},{"time":0.6209977,"amplitude":0.17986737},{"time":0.66900223,"amplitude":0.189271},{"time":0.68,"amplitude":0.25700083},{"time":0.7040136,"amplitude":0.16820066},{"time":0.70900226,"amplitude":0.2582918},{"time":0.73199546,"amplitude":0.18359083},{"time":0.75600904,"amplitude":0.27222782},{"time":0.7740136,"amplitude":0.16913989},{"time":0.81199545,"amplitude":0.15291175},{"time":0.82299316,"amplitude":0.22792166},{"time":0.8709977,"amplitude":0.26715797},{"time":0.9029932,"amplitude":0.15844059},{"time":0.9350113,"amplitude":0.16209477},{"time":0.9640136,"amplitude":0.16488846},{"time":1.0009977,"amplitude":0.20327447},{"time":1.0019954,"amplitude":0.19701445},{"time":1.0219954,"amplitude":0.2541716},{"time":1.0490023,"amplitude":0.18540123},{"time":1.0930159,"amplitude":0.17666642},{"time":1.1080046,"amplitude":0.22851008},{"time":1.1340135,"amplitude":0.14744496},{"time":1.1360091,"amplitude":0.24391177},{"time":1.1910204,"amplitude":0.18781286},{"time":1.1920182,"amplitude":0.32013515},{"time":1.2100227,"amplitude":0.20336471},{"time":1.2640135,"amplitude":0.2275048},{"time":1.2900226,"amplitude":0.14907587},{"time":1.2960091,"amplitude":0.2312423},{"time":1.3320181,"amplitude":0.1644417},{"time":1.3330158,"amplitude":0.25580913},{"time":1.3600227,"amplitude":0.17903398},{"time":1.3920181,"amplitude":0.27977282},{"time":1.4170295,"amplitude":0.17218548},{"time":1.4200226,"amplitude":0.28836465},{"time":1.4460317,"amplitude":0.17187081},{"time":1.4470295,"amplitude":0.25913146},{"time":1.4740136,"amplitude":0.13894638},{"time":1.4940362,"amplitude":0.24199927},{"time":1.5160317,"amplitude":0.17048708},{"time":1.5310204,"amplitude":0.31768212},{"time":1.5490249,"amplitude":0.2083276},{"time":1.615034,"amplitude":0.13279001},{"time":1.6170294,"amplitude":0.22934265},{"time":1.6670295,"amplitude":0.14850837},{"time":1.6720408,"amplitude":0.270082},{"time":1.7270294,"amplitude":0.17827205},{"time":1.7920408,"amplitude":0.14430135},{"time":1.8040363,"amplitude":0.24207011},{"time":1.8370521,"amplitude":0.1650756},{"time":1.8970522,"amplitude":0.24094827},{"time":1.9240363,"amplitude":0.14221394},{"time":1.9260544,"amplitude":0.2243002},{"time":1.9770521,"amplitude":0.15495011},{"time":1.9820408,"amplitude":0.30413154},{"time":2.0000453,"amplitude":0.17823017},{"time":2.001043,"amplitude":0.1705772},{"time":2.0020409,"amplitude":0.16326813},{"time":2.0030384,"amplitude":0.15628733},{"time":2.0032198,"amplitude":0.15628733}],"frequency":[{"time":0,"frequency":0.21161285},{"time":0.04643991,"frequency":0.26823363},{"time":0.06965986,"frequency":0.1451096},{"time":0.104489796,"frequency":0.26107973},{"time":0.1538322,"frequency":0.1677561},{"time":0.20897959,"frequency":0.22837637},{"time":0.27283448,"frequency":0.16246085},{"time":0.29024944,"frequency":0.22437361},{"time":0.3163719,"frequency":0.16228944},{"time":0.34829932,"frequency":0.20152494},{"time":0.38893422,"frequency":0.17115445},{"time":0.42956915,"frequency":0.23411945},{"time":0.45278913,"frequency":0.17672239},{"time":0.4702041,"frequency":0.26164874},{"time":0.510839,"frequency":0.160747},{"time":0.5601814,"frequency":0.21282409},{"time":0.59210885,"frequency":0.14578074},{"time":0.6008163,"frequency":0.22632904},{"time":0.6211338,"frequency":0.15482867},{"time":0.64435375,"frequency":0.23496252},{"time":0.6530612,"frequency":0.1452512},{"time":0.6733787,"frequency":0.2143541},{"time":0.69369614,"frequency":0.15165898},{"time":0.7604535,"frequency":0.1970948},{"time":0.7923809,"frequency":0.16677786},{"time":0.83011335,"frequency":0.23354381},{"time":0.9113832,"frequency":0.19742353},{"time":0.94911563,"frequency":0.14934511},{"time":0.9723356,"frequency":0.26824686},{"time":0.9984581,"frequency":0.20903768},{"time":1.0013604,"frequency":0.22790724},{"time":1.0681179,"frequency":0.17604019},{"time":1.0913378,"frequency":0.24766622},{"time":1.1203628,"frequency":0.15000603},{"time":1.1493877,"frequency":0.25466156},{"time":1.1784127,"frequency":0.16604856},{"time":1.23356,"frequency":0.18247013},{"time":1.2596824,"frequency":0.25979164},{"time":1.28,"frequency":0.19479616},{"time":1.3119273,"frequency":0.2525436},{"time":1.3206348,"frequency":0.1795642},{"time":1.3496598,"frequency":0.22794129},{"time":1.3931972,"frequency":0.17124037},{"time":1.4106121,"frequency":0.26865765},{"time":1.4222221,"frequency":0.1633043},{"time":1.4396371,"frequency":0.2093528},{"time":1.462857,"frequency":0.14690402},{"time":1.4889795,"frequency":0.265178},{"time":1.497687,"frequency":0.2170701},{"time":1.5615419,"frequency":0.16715343},{"time":1.5818594,"frequency":0.25780275},{"time":1.6166892,"frequency":0.19786243},{"time":1.6921542,"frequency":0.22757135},{"time":1.7095691,"frequency":0.18781377},{"time":1.790839,"frequency":0.20364527},{"time":1.8256688,"frequency":0.17495252},{"time":1.8634013,"frequency":0.22806814},{"time":1.950476,"frequency":0.17426938},{"time":1.9736961,"frequency":0.24576534},{"time":1.9998186,"frequency":0.16238149},{"time":2.002721,"frequency":0.18549496}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.haptic.meta new file mode 100644 index 0000000..813b94c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c1dd8d789ad424dac986575d2f0adfd0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.wav new file mode 100644 index 0000000..6283b79 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.wav.meta new file mode 100644 index 0000000..e3e704c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: b6447e61f053e4ba4becea7c6e766f69 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.haptic new file mode 100644 index 0000000..cbc6e58 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Fan 2.wav","project":"Fan 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.011830924},{"time":0.0010204081,"amplitude":0.011830924},{"time":0.008004535,"amplitude":0.08294971200000001,"emphasis":{"amplitude":0.10368714,"frequency":0.5}},{"time":0.12002268,"amplitude":0.074485448,"emphasis":{"amplitude":0.09310681,"frequency":0.5}},{"time":0.1410204,"amplitude":0.1303586,"emphasis":{"amplitude":0.16294825,"frequency":0.5}},{"time":0.30501133,"amplitude":0.11371984,"emphasis":{"amplitude":0.1421498,"frequency":0.5}},{"time":0.31900227,"amplitude":0.23267052000000002,"emphasis":{"amplitude":0.29083815,"frequency":0.5}},{"time":0.3370068,"amplitude":0.1562692,"emphasis":{"amplitude":0.1953365,"frequency":0.5}},{"time":0.37600908,"amplitude":0.28297696,"emphasis":{"amplitude":0.3537212,"frequency":0.5}},{"time":0.40301585,"amplitude":0.183298576,"emphasis":{"amplitude":0.22912322,"frequency":0.5}},{"time":0.40600905,"amplitude":0.313873744,"emphasis":{"amplitude":0.39234218,"frequency":0.5}},{"time":0.4310204,"amplitude":0.197821472,"emphasis":{"amplitude":0.24727684,"frequency":0.5}},{"time":0.43301585,"amplitude":0.303854512,"emphasis":{"amplitude":0.37981814,"frequency":0.5}},{"time":0.45900226,"amplitude":0.16771908800000002,"emphasis":{"amplitude":0.20964886,"frequency":0.5}},{"time":0.48,"amplitude":0.32304400000000005,"emphasis":{"amplitude":0.403805,"frequency":0.5}},{"time":0.50201815,"amplitude":0.229403304,"emphasis":{"amplitude":0.28675413,"frequency":0.5}},{"time":0.5170068,"amplitude":0.3547558444137929,"emphasis":{"amplitude":0.4434448055172411,"frequency":0.5}},{"time":0.53501135,"amplitude":0.30027377600000005,"emphasis":{"amplitude":0.37534222,"frequency":0.5}},{"time":0.5720319625625001,"amplitude":0.19496520827586206,"emphasis":{"amplitude":0.24370651034482754,"frequency":0.5}},{"time":0.6020181,"amplitude":0.39669988,"emphasis":{"amplitude":0.49587485,"frequency":0.5}},{"time":0.6341251190625,"amplitude":0.20487355144827576,"emphasis":{"amplitude":0.2560919393103447,"frequency":0.5}},{"time":0.6580045,"amplitude":0.495993232,"emphasis":{"amplitude":0.61999154,"frequency":0.5}},{"time":0.679551752375,"amplitude":0.17435915255172396,"emphasis":{"amplitude":0.21794894068965492,"frequency":0.5}},{"time":0.68600905,"amplitude":0.4251956800000001,"emphasis":{"amplitude":0.5314946,"frequency":0.5}},{"time":0.7155346141250001,"amplitude":0.17020970206896535,"emphasis":{"amplitude":0.21276212758620666,"frequency":0.5}},{"time":0.7427177053750001,"amplitude":0.4721702521379311,"emphasis":{"amplitude":0.5902128151724139,"frequency":0.5}},{"time":0.7780045,"amplitude":0.1922354794482758,"emphasis":{"amplitude":0.2402943493103447,"frequency":0.5}},{"time":0.78999996,"amplitude":0.43884600000000007,"emphasis":{"amplitude":0.5485575,"frequency":0.5}},{"time":0.82600904,"amplitude":0.167644168827586,"emphasis":{"amplitude":0.2095552110344825,"frequency":0.5}},{"time":0.844412979375,"amplitude":0.4183558686896552,"emphasis":{"amplitude":0.522944835862069,"frequency":0.5}},{"time":0.8690022,"amplitude":0.16010442482758602,"emphasis":{"amplitude":0.20013053103448253,"frequency":0.5}},{"time":0.88299316,"amplitude":0.436850592,"emphasis":{"amplitude":0.54606324,"frequency":0.5}},{"time":0.90999997,"amplitude":0.16602185931034483,"emphasis":{"amplitude":0.207527324137931,"frequency":0.5}},{"time":0.9119955,"amplitude":0.39772688,"emphasis":{"amplitude":0.4971586,"frequency":0.5}},{"time":0.9380045,"amplitude":0.18675829931034482,"emphasis":{"amplitude":0.233447874137931,"frequency":0.5}},{"time":0.96900225,"amplitude":0.5321868399999999,"emphasis":{"amplitude":0.66523355,"frequency":0.5}},{"time":0.9939909,"amplitude":0.14165055393103448,"emphasis":{"amplitude":0.1770631924137931,"frequency":0.5}},{"time":1.0019954,"amplitude":0.30764260000000004,"emphasis":{"amplitude":0.38455325,"frequency":0.5}},{"time":1.0150113,"amplitude":0.15493480993103448,"emphasis":{"amplitude":0.19366851241379307,"frequency":0.5}},{"time":1.0180045,"amplitude":0.37485948,"emphasis":{"amplitude":0.46857435,"frequency":0.5}},{"time":1.0409977,"amplitude":0.14829389793103448,"emphasis":{"amplitude":0.18536737241379309,"frequency":0.5}},{"time":1.0580045,"amplitude":0.276362944,"emphasis":{"amplitude":0.34545368,"frequency":0.5}},{"time":1.0699999,"amplitude":0.1041991139310345,"emphasis":{"amplitude":0.13024889241379312,"frequency":0.5}},{"time":1.086009,"amplitude":0.34044005600000005,"emphasis":{"amplitude":0.42555007,"frequency":0.5}},{"time":1.0997383179375,"amplitude":0.13613929655172413,"emphasis":{"amplitude":0.17017412068965515,"frequency":0.5}},{"time":1.116009,"amplitude":0.29352395200000003,"emphasis":{"amplitude":0.36690494,"frequency":0.5}},{"time":1.1427542179375,"amplitude":0.1188066675862069,"emphasis":{"amplitude":0.1485083344827586,"frequency":0.5}},{"time":1.1460091,"amplitude":0.320728824,"emphasis":{"amplitude":0.40091103,"frequency":0.5}},{"time":1.1830158,"amplitude":0.125504352,"emphasis":{"amplitude":0.15688044,"frequency":0.5}},{"time":1.1910204,"amplitude":0.172599408,"emphasis":{"amplitude":0.21574926,"frequency":0.5}},{"time":1.2230159,"amplitude":0.149414912,"emphasis":{"amplitude":0.18676864,"frequency":0.5}},{"time":1.2240136,"amplitude":0.25313492000000004,"emphasis":{"amplitude":0.31641865,"frequency":0.5}},{"time":1.2420181,"amplitude":0.15773541600000002,"emphasis":{"amplitude":0.19716927,"frequency":0.5}},{"time":1.2620181,"amplitude":0.128405424,"emphasis":{"amplitude":0.16050678,"frequency":0.5}},{"time":1.2650113,"amplitude":0.21209643200000003,"emphasis":{"amplitude":0.26512054,"frequency":0.5}},{"time":1.2870067,"amplitude":0.127966416,"emphasis":{"amplitude":0.15995802,"frequency":0.5}},{"time":1.2940136,"amplitude":0.228710296,"emphasis":{"amplitude":0.28588787,"frequency":0.5}},{"time":1.3200227,"amplitude":0.12411127200000001,"emphasis":{"amplitude":0.15513909,"frequency":0.5}},{"time":1.3220181,"amplitude":0.19184140800000002,"emphasis":{"amplitude":0.23980176,"frequency":0.5}},{"time":1.3400227,"amplitude":0.120578696,"emphasis":{"amplitude":0.15072337,"frequency":0.5}},{"time":1.3790249,"amplitude":0.11978077600000002,"emphasis":{"amplitude":0.14972597,"frequency":0.5}},{"time":1.3800226,"amplitude":0.180915176,"emphasis":{"amplitude":0.22614397,"frequency":0.5}},{"time":1.4080272,"amplitude":0.108507632,"emphasis":{"amplitude":0.13563454,"frequency":0.5}},{"time":1.4400227,"amplitude":0.138814,"emphasis":{"amplitude":0.1735175,"frequency":0.5}},{"time":1.4660317,"amplitude":0.0887701152,"emphasis":{"amplitude":0.110962644,"frequency":0.5}},{"time":1.4980272,"amplitude":0.121123504,"emphasis":{"amplitude":0.15140438,"frequency":0.5}},{"time":1.5240363,"amplitude":0.067456024,"emphasis":{"amplitude":0.08432003,"frequency":0.5}},{"time":1.525034,"amplitude":0.121249304,"emphasis":{"amplitude":0.15156163,"frequency":0.5}},{"time":1.5540363,"amplitude":0.09192662800000001,"emphasis":{"amplitude":0.114908285,"frequency":0.5}},{"time":1.6920408,"amplitude":0.04796190880000001,"emphasis":{"amplitude":0.059952386,"frequency":0.5}},{"time":1.745034,"amplitude":0.058185024,"emphasis":{"amplitude":0.07273128,"frequency":0.5}},{"time":1.7780272,"amplitude":0.031280956,"emphasis":{"amplitude":0.039101195,"frequency":0.5}},{"time":1.8270295,"amplitude":0.0393807856,"emphasis":{"amplitude":0.049225982,"frequency":0.5}},{"time":1.8820407,"amplitude":0.024309664,"emphasis":{"amplitude":0.03038708,"frequency":0.5}},{"time":1.9420408,"amplitude":0.031832173600000006,"emphasis":{"amplitude":0.039790217,"frequency":0.5}},{"time":2.0000453,"amplitude":0.019740742},{"time":2.001043,"amplitude":0.019263413},{"time":2.0020409,"amplitude":0.018807514},{"time":2.0030384,"amplitude":0.0183721},{"time":2.0032198,"amplitude":0.0183721},{"time":2.0032198,"amplitude":0.0183721}],"frequency":[{"time":0,"frequency":0.2031404023809524},{"time":0.8949955553312304,"frequency":0.3968842222962296},{"time":2.0150113,"frequency":0.1976241147619048}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.haptic.meta new file mode 100644 index 0000000..8c84f8a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 455ddac23d94f4d198bbb7f9deda4c13 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.wav new file mode 100644 index 0000000..c386c1b Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.wav.meta new file mode 100644 index 0000000..886b94d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fan2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: c22e6e20db56d46e784e84d8c2b5dc2d +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.haptic new file mode 100644 index 0000000..c7121e2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Fireplace 1.wav","project":"Fireplace 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.004898398},{"time":0.0010204081,"amplitude":0.004898398},{"time":0.018004535,"amplitude":0.02519638},{"time":0.02201814,"amplitude":0.08186537},{"time":0.039002266,"amplitude":0.040275633},{"time":0.067006804,"amplitude":0.016220938},{"time":0.06800453,"amplitude":0.06360207,"emphasis":{"amplitude":0.24496475776061774,"frequency":0.9}},{"time":0.07600907,"amplitude":0.078367424,"emphasis":{"amplitude":0.21571989776061776,"frequency":0.9}},{"time":0.07800453,"amplitude":0.17395554400000002,"emphasis":{"amplitude":0.3352050477606177,"frequency":0.9}},{"time":0.0970068,"amplitude":0.08999801600000001,"emphasis":{"amplitude":0.23025813776061776,"frequency":0.9}},{"time":0.12102041,"amplitude":0.0461490992,"emphasis":{"amplitude":0.17544699176061776,"frequency":0.9}},{"time":0.15301587,"amplitude":0.035168704},{"time":0.15501134,"amplitude":0.06593378800000001,"emphasis":{"amplitude":0.20017785276061775,"frequency":0.9}},{"time":0.19501133,"amplitude":0.032537065},{"time":0.22600907,"amplitude":0.02306851},{"time":0.23301587,"amplitude":0.041105524},{"time":0.28600907,"amplitude":0.02867422},{"time":0.28900227,"amplitude":0.111951376,"emphasis":{"amplitude":0.2576998377606177,"frequency":0.9}},{"time":0.3040136,"amplitude":0.070271624,"emphasis":{"amplitude":0.20560014776061777,"frequency":0.9}},{"time":0.33301586,"amplitude":0.028977996},{"time":0.39501134,"amplitude":0.03267663},{"time":0.4370068,"amplitude":0.013485023},{"time":0.45700678,"amplitude":0.01881766,"emphasis":{"amplitude":0.18761473909266407,"frequency":0.5}},{"time":0.49201813,"amplitude":0.012183294},{"time":0.5,"amplitude":0.030889107},{"time":0.5309977,"amplitude":0.014748946},{"time":0.53301585,"amplitude":0.03417891},{"time":0.5650113,"amplitude":0.012739187},{"time":0.67600906,"amplitude":0.0047890833},{"time":0.70199543,"amplitude":0.0160269928,"emphasis":{"amplitude":0.1146283355945946,"frequency":0.9}},{"time":0.73099774,"amplitude":0.007636644},{"time":0.8080045,"amplitude":0.0071657575},{"time":0.8090023,"amplitude":0.048352557600000005,"emphasis":{"amplitude":0.17820131476061776,"frequency":0.9}},{"time":0.8319954,"amplitude":0.02434593},{"time":0.8329932,"amplitude":0.055802736,"emphasis":{"amplitude":0.18751403776061776,"frequency":0.9}},{"time":0.85401356,"amplitude":0.03208836},{"time":0.85600907,"amplitude":0.17221045,"emphasis":{"amplitude":0.46218151776061767,"frequency":0.9}},{"time":0.87600905,"amplitude":0.15881023},{"time":0.9,"amplitude":0.055793907},{"time":0.93199545,"amplitude":0.015540028},{"time":1.0009977,"amplitude":0.005848047},{"time":1.0019954,"amplitude":0.0057543404},{"time":1.0709977,"amplitude":0.005843657},{"time":1.1190022,"amplitude":0.01344038},{"time":1.1209977,"amplitude":0.017394250400000002,"emphasis":{"amplitude":0.15108644234362933,"frequency":0.9}},{"time":1.1620181,"amplitude":0.0057681017},{"time":1.1810204,"amplitude":0.016289346},{"time":1.206009,"amplitude":0.008309141},{"time":1.2080045,"amplitude":0.018813847},{"time":1.2320181,"amplitude":0.00804044},{"time":1.2650113,"amplitude":0.005254641},{"time":1.2680045,"amplitude":0.015505861},{"time":1.2980272,"amplitude":0.005812854},{"time":1.3070068,"amplitude":0.016293494},{"time":1.3530159,"amplitude":0.007232867},{"time":1.356009,"amplitude":0.014698059999999999,"emphasis":{"amplitude":0.157368713996139,"frequency":0.9}},{"time":1.3780272,"amplitude":0.008427396},{"time":1.4230158,"amplitude":0.0043331617},{"time":1.4410204,"amplitude":0.0127822785},{"time":1.5280272,"amplitude":0.005240216},{"time":1.5330158,"amplitude":0.009977143},{"time":1.5820181,"amplitude":0.0035539172},{"time":1.615034,"amplitude":0.0072072116},{"time":1.6160318,"amplitude":0.023165448,"emphasis":{"amplitude":0.14671742776061777,"frequency":0.9}},{"time":1.635034,"amplitude":0.013969922},{"time":1.6700226,"amplitude":0.0052768057},{"time":1.6720408,"amplitude":0.06184892,"emphasis":{"amplitude":0.19507176776061777,"frequency":0.9}},{"time":1.681043,"amplitude":0.045485517600000004,"emphasis":{"amplitude":0.17461751476061776,"frequency":0.9}},{"time":1.6840363,"amplitude":0.10949581600000001,"emphasis":{"amplitude":0.25463038776061775,"frequency":0.9}},{"time":1.7020408,"amplitude":0.050878495999999995,"emphasis":{"amplitude":0.18135873776061776,"frequency":0.9}},{"time":1.7100453,"amplitude":0.036407624,"emphasis":{"amplitude":0.16327014776061777,"frequency":0.9}},{"time":1.7340362,"amplitude":0.018480897},{"time":1.7360318,"amplitude":0.0226129368,"emphasis":{"amplitude":0.14602678876061778,"frequency":0.9}},{"time":1.755034,"amplitude":0.014988142},{"time":1.775034,"amplitude":0.016268926},{"time":1.8670521,"amplitude":0.007122376},{"time":1.8770521,"amplitude":0.010900611},{"time":1.941043,"amplitude":0.0067611868},{"time":1.9490476,"amplitude":0.019710526},{"time":1.9980499,"amplitude":0.007324362},{"time":1.9990476,"amplitude":0.023853045},{"time":2,"amplitude":0.023853045}],"frequency":[{"time":0,"frequency":0.14582181},{"time":0.023219952,"frequency":0.6990417},{"time":0.026122449,"frequency":0.24324324324324326},{"time":0.055147387,"frequency":0.22150382},{"time":0.066757366,"frequency":0.24324324324324326},{"time":0.06965986,"frequency":1},{"time":0.08417233,"frequency":0.22268996},{"time":0.14512472,"frequency":0.3721311158687258},{"time":0.1596372,"frequency":0.5082594958687259},{"time":0.18575963,"frequency":0.30611395903474903},{"time":0.27573696,"frequency":0.3546569890347491},{"time":0.29895693,"frequency":0.9366424922779923},{"time":0.32507935,"frequency":0.46911196911196906},{"time":0.3686168,"frequency":0.8852381222779924},{"time":0.38022676,"frequency":0.288497792034749},{"time":0.40054423,"frequency":0.47474130586872587},{"time":0.4469841,"frequency":0.46911196911196906},{"time":0.47891155,"frequency":0.5244670258687258},{"time":0.516644,"frequency":0.46911196911196906},{"time":0.5456689,"frequency":0.6140054258687259},{"time":0.5804989,"frequency":0.46911196911196906},{"time":0.67628115,"frequency":0.46911196911196906},{"time":0.7053061,"frequency":0.7129803258687257},{"time":0.7082086,"frequency":0.46911196911196906},{"time":0.8097959,"frequency":0.46911196911196906},{"time":0.83301586,"frequency":0.8365149258687258},{"time":0.84462583,"frequency":0.46911196911196906},{"time":0.84752834,"frequency":1},{"time":0.88235825,"frequency":0.46911196911196906},{"time":0.9984581,"frequency":0.46911196911196906},{"time":1.0013604,"frequency":0.8938223938223938},{"time":1.0797278,"frequency":0.46911196911196906},{"time":1.0942403,"frequency":0.47119385586872586},{"time":1.1116552,"frequency":0.46911196911196906},{"time":1.1145577,"frequency":0.7439235658687258},{"time":1.1290702,"frequency":0.46911196911196906},{"time":1.3409523,"frequency":0.46911196911196906},{"time":1.3583673,"frequency":0.5081319258687258},{"time":1.3612697,"frequency":0.46911196911196906},{"time":1.4425396,"frequency":0.46911196911196906},{"time":1.4454421,"frequency":0.6674903858687259},{"time":1.4570521,"frequency":0.46911196911196906},{"time":1.6747391,"frequency":0.46911196911196906},{"time":1.6776416,"frequency":0.8438768258687257},{"time":1.6950566,"frequency":0.46911196911196906},{"time":1.7095691,"frequency":0.46911196911196906},{"time":1.7124716,"frequency":0.7364105258687258},{"time":1.726984,"frequency":0.46911196911196906},{"time":1.7298865,"frequency":0.7707551958687258},{"time":1.7531065,"frequency":0.6755158558687259},{"time":1.767619,"frequency":0.46911196911196906},{"time":1.7705214,"frequency":0.6556483458687258},{"time":1.785034,"frequency":0.46911196911196906},{"time":1.9388661,"frequency":0.46911196911196906},{"time":1.9417686,"frequency":0.5604886258687259},{"time":1.9620861,"frequency":0.4964314258687258},{"time":1.9998186,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.haptic.meta new file mode 100644 index 0000000..bd68328 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e890f885b5de544d59ae4ab0664dcc8b +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.wav new file mode 100644 index 0000000..de12c79 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.wav.meta new file mode 100644 index 0000000..d3f2b02 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 72fcfa7f43d834350a46f96454f27706 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.haptic new file mode 100644 index 0000000..f771a38 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Flashlight 2.wav","project":"Fireplace 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0076601245},{"time":0.0010204081,"amplitude":0.0076601245},{"time":0.014944447852732324,"amplitude":0.13590203},{"time":0.0321140784192652,"amplitude":0.05945704642258491},{"time":0.04561129978388392,"amplitude":0.09384634225763284},{"time":0.06576979861994427,"amplitude":0.022460815999999984,"emphasis":{"amplitude":0.14178231833991556,"frequency":0.1}},{"time":0.08982633528866933,"amplitude":0.1359926241855555},{"time":0.10658150663785115,"amplitude":0.10958043037820815},{"time":0.13962642790984878,"amplitude":0.0410581904418347},{"time":0.16150123494905835,"amplitude":0.11614089425850938},{"time":0.17965267057733864,"amplitude":0.062146265538511894},{"time":0.1940807347946897,"amplitude":0.1190502983863919},{"time":0.2239467128527321,"amplitude":0.04564110879999998,"emphasis":{"amplitude":0.15737336311620626,"frequency":0.9}},{"time":0.24294998456313677,"amplitude":0.08183143221182673},{"time":0.26203226304414934,"amplitude":0.035590418086363575},{"time":0.2713406915714726,"amplitude":0.1273626294876894},{"time":0.295077184316147,"amplitude":0.04933755063375076},{"time":0.3164865699289901,"amplitude":0.05128692748660079},{"time":0.3309146341463413,"amplitude":0.12411620968168535},{"time":0.3625632911392404,"amplitude":0.04855691466567622},{"time":0.37859456258602975,"amplitude":0.12435896700145403},{"time":0.38893536285273217,"amplitude":0.299803064,"emphasis":{"amplitude":0.4360574171162076,"frequency":0.5}},{"time":0.4000773279389448,"amplitude":0.09153998689082528},{"time":0.4202755480086445,"amplitude":0.11910679932056226},{"time":0.4472699907378821,"amplitude":0.021942826871126024},{"time":0.4896233405372027,"amplitude":0.03533614148800941},{"time":0.5068439333127509,"amplitude":0.10796676089176624},{"time":0.5287187403519606,"amplitude":0.04196980132012756},{"time":0.5449444128527322,"amplitude":0.18833162400000003,"emphasis":{"amplitude":0.2967181171162069,"frequency":0.1}},{"time":0.5659524544612534,"amplitude":0.04697286093437838},{"time":0.5803805186786044,"amplitude":0.12277539672397524},{"time":0.598997375733251,"amplitude":0.05941881658378937},{"time":0.6269226613152206,"amplitude":0.044077475139788366},{"time":0.6515899969126272,"amplitude":0.09101823906725909},{"time":0.6669489039827106,"amplitude":0.04039802093273877},{"time":0.6879376428527322,"amplitude":0.05379990399999998,"emphasis":{"amplitude":0.16757185711620637,"frequency":0.1}},{"time":0.7032517752392714,"amplitude":0.034187422518633034},{"time":0.7153527323247916,"amplitude":0.05679751623406141},{"time":0.7359421928527322,"amplitude":0,"emphasis":{"amplitude":0.10032197711620647,"frequency":0.9}},{"time":0.7480044999999997,"amplitude":0.073026808,"emphasis":{"amplitude":0.34265711235521235,"frequency":0.9}},{"time":0.8099999999999998,"amplitude":0.014256163199999995,"emphasis":{"amplitude":0.26919380635521234,"frequency":0.9}},{"time":0.8250112999999998,"amplitude":0.202541016,"emphasis":{"amplitude":0.4655314823552123,"frequency":0.9}},{"time":0.8370067999999998,"amplitude":0.09923196000000001,"emphasis":{"amplitude":0.3754135523552123,"frequency":0.9}},{"time":0.8980045399999997,"amplitude":0.011295048000000002,"emphasis":{"amplitude":0.2654924123552123,"frequency":0.9}},{"time":0.9480044999999998,"amplitude":0.17222052000000002,"emphasis":{"amplitude":0.42763086235521236,"frequency":0.9}},{"time":0.9939908999999998,"amplitude":0.046480484799999985,"emphasis":{"amplitude":0.30947420835521233,"frequency":0.9}},{"time":1.0109976999999999,"amplitude":0.07875777599999999,"emphasis":{"amplitude":0.34982082235521234,"frequency":0.9}},{"time":1.0119953999999998,"amplitude":0.07559547999999999,"emphasis":{"amplitude":0.34586795235521234,"frequency":0.9}},{"time":1.0450112999999999,"amplitude":0.006723596799999996,"emphasis":{"amplitude":0.2597780983552123,"frequency":0.9}},{"time":1.0480044999999998,"amplitude":0.11024594400000001,"emphasis":{"amplitude":0.38918103235521234,"frequency":0.9}},{"time":1.0799998999999998,"amplitude":0.048501983999999984,"emphasis":{"amplitude":0.3120010823552123,"frequency":0.9}},{"time":1.1090021999999997,"amplitude":0.12023881600000004,"emphasis":{"amplitude":0.4016721223552123,"frequency":0.9}},{"time":1.13,"amplitude":0.04702507199999999,"emphasis":{"amplitude":0.3101549423552123,"frequency":0.9}},{"time":1.1440134999999998,"amplitude":0.10109972000000002,"emphasis":{"amplitude":0.3777482523552123,"frequency":0.9}},{"time":1.1599999999999997,"amplitude":0.04892697599999998,"emphasis":{"amplitude":0.31253232235521233,"frequency":0.9}},{"time":1.1750112999999998,"amplitude":0.082280552,"emphasis":{"amplitude":0.3542242923552123,"frequency":0.9}},{"time":1.2070067999999998,"amplitude":0.026065895999999988,"emphasis":{"amplitude":0.2839559723552123,"frequency":0.9}},{"time":1.2150113999999999,"amplitude":0.10114602400000001,"emphasis":{"amplitude":0.3778061323552123,"frequency":0.9}},{"time":1.2530158999999998,"amplitude":0.017701907999999992,"emphasis":{"amplitude":0.27350098735521233,"frequency":0.9}},{"time":1.2870066999999998,"amplitude":0.007983385599999997,"emphasis":{"amplitude":0.26135283435521234,"frequency":0.9}},{"time":1.2950112999999999,"amplitude":0.095693992,"emphasis":{"amplitude":0.3709910923552123,"frequency":0.9}},{"time":1.3270067999999997,"amplitude":0.02112562879999998,"emphasis":{"amplitude":0.27778063835521233,"frequency":0.9}},{"time":1.3650112999999997,"amplitude":0.08580131999999999,"emphasis":{"amplitude":0.3586252523552123,"frequency":0.9}},{"time":1.3880271999999998,"amplitude":0.03591984799999998,"emphasis":{"amplitude":0.2962734123552123,"frequency":0.9}},{"time":1.4060316999999998,"amplitude":0.16454169600000002,"emphasis":{"amplitude":0.4180323323552123,"frequency":0.9}},{"time":1.4540135999999997,"amplitude":0.018258135999999998,"emphasis":{"amplitude":0.2741962723552123,"frequency":0.9}},{"time":1.4710203999999998,"amplitude":0.10559428000000004,"emphasis":{"amplitude":0.38336645235521233,"frequency":0.9}},{"time":1.5090248999999998,"amplitude":0.01183797919999999,"emphasis":{"amplitude":0.2661710763552123,"frequency":0.9}},{"time":1.5820180999999998,"amplitude":0.016341822399999994,"emphasis":{"amplitude":0.2718008803552123,"frequency":0.9}},{"time":1.5850339999999998,"amplitude":0.2417128,"emphasis":{"amplitude":0.5144962123552124,"frequency":0.9}},{"time":1.6270293999999998,"amplitude":0.05295063999999999,"emphasis":{"amplitude":0.3175619023552123,"frequency":0.9}},{"time":1.6300226999999998,"amplitude":0.170157456,"emphasis":{"amplitude":0.42505203235521233,"frequency":0.9}},{"time":1.6720407999999998,"amplitude":0.024298879999999985,"emphasis":{"amplitude":0.28174720235521233,"frequency":0.9}},{"time":1.6740362999999998,"amplitude":0.078412344,"emphasis":{"amplitude":0.34938903235521235,"frequency":0.9}},{"time":1.7180270999999998,"amplitude":0.029969143999999993,"emphasis":{"amplitude":0.28883503235521235,"frequency":0.9}},{"time":1.7330385999999998,"amplitude":0.12473061600000004,"emphasis":{"amplitude":0.4072868723552123,"frequency":0.9}},{"time":1.7700452999999998,"amplitude":0.031427379199999994,"emphasis":{"amplitude":0.2906578263552123,"frequency":0.9}},{"time":1.7720406999999998,"amplitude":0.08509441599999999,"emphasis":{"amplitude":0.3577416223552123,"frequency":0.9}},{"time":1.8020407999999999,"amplitude":0.04215938399999998,"emphasis":{"amplitude":0.3040728323552123,"frequency":0.9}},{"time":1.8130384999999998,"amplitude":0.09503741600000001,"emphasis":{"amplitude":0.37017037235521233,"frequency":0.9}},{"time":1.8700452999999997,"amplitude":0.07589438400000001,"emphasis":{"amplitude":0.34624158235521235,"frequency":0.9}},{"time":1.9100452999999997,"amplitude":0.006005183999999998,"emphasis":{"amplitude":0.25888008235521237,"frequency":0.9}},{"time":1.9240362999999998,"amplitude":0.08557848,"emphasis":{"amplitude":0.3583467023552123,"frequency":0.9}},{"time":1.9630384999999997,"amplitude":0.03916828799999998,"emphasis":{"amplitude":0.3003339623552123,"frequency":0.9}},{"time":1.9650566999999999,"amplitude":0.099168544,"emphasis":{"amplitude":0.3753342823552123,"frequency":0.9}},{"time":1.9850565999999998,"amplitude":0.041460700799999986,"emphasis":{"amplitude":0.3031994783552123,"frequency":0.9}},{"time":2.0090475999999997,"amplitude":0.07625015199999999,"emphasis":{"amplitude":0.3466862923552123,"frequency":0.9}},{"time":2.01,"amplitude":0.07625015199999999,"emphasis":{"amplitude":0.3466862923552123,"frequency":0.9}}],"frequency":[{"time":0,"frequency":0.12430238},{"time":0.03769913553565912,"frequency":0.4265057647411519},{"time":0.08610296387774004,"frequency":0.3880462917870795},{"time":0.1320861499999998,"frequency":0.545082694510804},{"time":0.14369614999999977,"frequency":0.42664212451080447},{"time":0.1930385399999998,"frequency":0.3379259645108044},{"time":0.2656008999999998,"frequency":0.33347289451080436},{"time":0.30623581999999977,"frequency":0.5309905745108041},{"time":0.32655329999999977,"frequency":0.32006651951080434},{"time":0.3729931999999998,"frequency":0.3541034045108044},{"time":0.39331063999999977,"frequency":0.6096946945108037},{"time":0.42814057999999977,"frequency":0.3398693505108044},{"time":0.48619046999999976,"frequency":0.5604144145108041},{"time":0.5036054599999997,"frequency":0.3305078645108044},{"time":0.5123128999999997,"frequency":0.4667511245108044},{"time":0.5674603299999997,"frequency":0.3920150745108045},{"time":0.5819727499999998,"frequency":0.6299160245108038},{"time":0.5877777699999998,"frequency":0.39008968451080445},{"time":0.6139001999999998,"frequency":0.29928714751080426},{"time":0.6458275999999998,"frequency":0.4890813645108045},{"time":0.6603400999999998,"frequency":0.30948262451080427},{"time":0.7299999999999998,"frequency":0.48378957451080445},{"time":0.7561224399999998,"frequency":0.22287277583011586},{"time":0.7822448999999998,"frequency":0.6041560958301159},{"time":0.7880498499999998,"frequency":0.2646290458301159},{"time":0.8228797999999998,"frequency":0.5563661358301158},{"time":0.8373922999999998,"frequency":0.33382882583011597},{"time":0.8635146999999997,"frequency":0.2391298358301159},{"time":0.8925396499999998,"frequency":0.4742147858301159},{"time":0.9041495999999998,"frequency":0.2535864458301159},{"time":0.9767119999999998,"frequency":0.31545110583011593},{"time":1.0086394999999997,"frequency":0.2521837158301159},{"time":1.0115417999999998,"frequency":0.297734955830116},{"time":1.0637866999999999,"frequency":0.1874329358301158},{"time":1.0957141999999997,"frequency":0.392012585830116},{"time":1.1073241999999999,"frequency":0.21795311583011587},{"time":1.1276416999999999,"frequency":0.4281021158301159},{"time":1.1537640999999998,"frequency":0.439366315830116},{"time":1.1711789999999997,"frequency":0.258881695830116},{"time":1.1914964999999997,"frequency":0.39679389583011593},{"time":1.2118139999999997,"frequency":0.21084805583011587},{"time":1.2814737999999999,"frequency":0.3729454458301159},{"time":1.3714510999999998,"frequency":0.361937515830116},{"time":1.4062810999999997,"frequency":0.18839431583011582},{"time":1.4498184999999997,"frequency":0.346599745830116},{"time":1.4759409,"frequency":0.19771777583011585},{"time":1.4933559999999997,"frequency":0.37367021583011595},{"time":1.5310882999999997,"frequency":0.23654088583011587},{"time":1.5688207999999997,"frequency":0.33162996583011595},{"time":1.5862356999999998,"frequency":0.22359272583011586},{"time":1.6355780999999998,"frequency":0.1859722058301158},{"time":1.6558955999999998,"frequency":0.4358142158301159},{"time":1.6733105999999998,"frequency":0.23838964583011588},{"time":1.7139454999999997,"frequency":0.3678324758301159},{"time":1.7748978999999998,"frequency":0.23305918983011592},{"time":1.8213377999999998,"frequency":0.33286141583011597},{"time":1.8561677999999997,"frequency":0.17855986583011582},{"time":1.8968025999999998,"frequency":0.38155706583011595},{"time":1.9316325999999997,"frequency":0.19325110583011582},{"time":1.9577550999999997,"frequency":0.335619065830116},{"time":2.0012923999999996,"frequency":0.20808871083011582},{"time":2.01,"frequency":0.39206843583011597}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.haptic.meta new file mode 100644 index 0000000..9d08c64 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: cf603b84d8a3b4d4995e404dd959ea6d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.wav new file mode 100644 index 0000000..64354d1 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.wav.meta new file mode 100644 index 0000000..af434ef --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Fireplace2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: c2cec3c7b9be74a018a3a461857be353 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.haptic new file mode 100644 index 0000000..124dd9b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Flashlight 1.wav","project":"Flashlight 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0},{"time":0.2770068,"amplitude":0},{"time":0.278371,"amplitude":0.2850923152428299,"emphasis":{"amplitude":0.4017764839196941,"frequency":0.5}},{"time":0.30201814,"amplitude":0.23738293424282994},{"time":0.3240136,"amplitude":0.025331914},{"time":0.3747078999999997,"amplitude":0},{"time":0.5650063,"amplitude":0},{"time":0.5650113,"amplitude":0.13800554,"emphasis":{"amplitude":0.6337371480511155,"frequency":0.9}},{"time":0.5650163,"amplitude":0.3897692390057359},{"time":0.58,"amplitude":0.3791337289101339},{"time":0.59301585,"amplitude":0.10592763},{"time":0.60600907,"amplitude":0.06023154},{"time":0.62600905,"amplitude":0.027210988},{"time":0.656579,"amplitude":0},{"time":1.01,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.26993197,"frequency":0},{"time":0.27283448,"frequency":0.5165764},{"time":0.29442072,"frequency":0.4877362405405405},{"time":0.30476192,"frequency":0.12668142},{"time":0.31927437,"frequency":0.056523036},{"time":0.34539682,"frequency":0.06083277},{"time":0.38111805000000015,"frequency":0},{"time":0.5543764,"frequency":0},{"time":0.55728393,"frequency":0.8612547438610039},{"time":0.59199135,"frequency":0.8129681389961388},{"time":0.73440011,"frequency":0},{"time":0.9984581,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.haptic.meta new file mode 100644 index 0000000..812c1f3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e722c40e0347f457dba2efdc21167c05 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.wav new file mode 100644 index 0000000..26e46f8 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.wav.meta new file mode 100644 index 0000000..1fa2de7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 9c6c33e38b3914907af850ae738fd9f9 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.haptic new file mode 100644 index 0000000..3a16e81 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Flashlight 2.wav","project":"Flashlight 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0013147839},{"time":0.31275109999999995,"amplitude":0},{"time":0.31501132,"amplitude":0.3381598526866166},{"time":0.33201814,"amplitude":0.30754002268661645},{"time":0.34201813,"amplitude":0.2965647096866164},{"time":0.36763805000000005,"amplitude":0},{"time":0.56700177,"amplitude":0},{"time":0.56700677,"amplitude":0.5465983755444899,"emphasis":{"amplitude":0.7570937811427978,"frequency":1}},{"time":0.5809977,"amplitude":0.5571590655444898},{"time":0.6020181,"amplitude":0.03014131},{"time":0.6250113,"amplitude":0.013185237},{"time":0.6643801,"amplitude":0},{"time":1.01,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.3105669,"frequency":0},{"time":0.31346938,"frequency":0.5473700564053541},{"time":0.3927531500000005,"frequency":0},{"time":0.5532062999999999,"frequency":0},{"time":0.55901123,"frequency":0.8176207097539812},{"time":0.64145124,"frequency":0},{"time":1.01,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.haptic.meta new file mode 100644 index 0000000..1fdab35 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5a896219e92d3432894a4720ceaa7267 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.wav new file mode 100644 index 0000000..5857fb4 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.wav.meta new file mode 100644 index 0000000..32f3a36 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Flashlight2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 65057fd32163e4aab8c8744b3231de63 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.haptic new file mode 100644 index 0000000..fc7448e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Hammer 1.wav","project":"Hammer 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000029992003},{"time":0.18799954,"amplitude":0},{"time":0.18800454,"amplitude":0.092586905,"emphasis":{"amplitude":0.2865122421223709,"frequency":0.1}},{"time":0.18900226,"amplitude":0.1835964},{"time":0.18900726,"amplitude":0.26852405},{"time":0.2059313215189873,"amplitude":0.24432465556405364},{"time":0.2140136,"amplitude":0.12141678},{"time":0.2240136,"amplitude":0.08640364},{"time":0.23201814,"amplitude":0.065476745},{"time":0.2470068,"amplitude":0.03769363},{"time":0.2570068,"amplitude":0.026100587},{"time":0.2740136,"amplitude":0.015582524},{"time":0.28201813,"amplitude":0.017028524},{"time":0.30501133,"amplitude":0.010493162},{"time":0.32066728784810133,"amplitude":0},{"time":0.6250063,"amplitude":0},{"time":0.6250163000000001,"amplitude":0.27700019311663476},{"time":0.6416369405063291,"amplitude":0.2509882762332696},{"time":0.6509977,"amplitude":0.11019239},{"time":0.66401356,"amplitude":0.07017007},{"time":0.6840136,"amplitude":0.033710577},{"time":0.6940136,"amplitude":0.023450252},{"time":0.71,"amplitude":0.01428905},{"time":0.7346053249367087,"amplitude":0},{"time":1.01,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.17705216,"frequency":0},{"time":0.17753252132448288,"frequency":0.3961233118546848},{"time":0.252517,"frequency":0.3684550282982794},{"time":0.26702946,"frequency":0.43076108829827947},{"time":0.28444445,"frequency":0.44709482829827946},{"time":0.30476192,"frequency":0.3370004782982792},{"time":0.3105669,"frequency":0.31075202829827925},{"time":0.31346938,"frequency":0},{"time":0.6153288,"frequency":0},{"time":0.6153338,"frequency":0.6330193473231359},{"time":0.63854873,"frequency":0.6178922126577439},{"time":0.6733787,"frequency":0.6379484726577438},{"time":0.6878911,"frequency":0.5996195126577438},{"time":0.73142856,"frequency":0.5415055226577439},{"time":0.74303854,"frequency":0.5611454326577439},{"time":0.74594104,"frequency":0.5463249126577439},{"time":0.74884355,"frequency":0},{"time":0.9984581,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.haptic.meta new file mode 100644 index 0000000..8a03e48 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0e312d8dd618943ee80f2fe83e109cf6 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.wav new file mode 100644 index 0000000..ad7944b Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.wav.meta new file mode 100644 index 0000000..f15245a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 8db0c6f80a07e4f4a8dc26eefab9cf81 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.haptic new file mode 100644 index 0000000..620a33d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Hammer 2.wav","project":"Hammer 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00006849707},{"time":0.19291415,"amplitude":0},{"time":0.19302087,"amplitude":0.37097556378585095},{"time":0.2136501105063291,"amplitude":0.359157821128107},{"time":0.22577584455696198,"amplitude":0.120961417667304},{"time":0.24501133,"amplitude":0.04647016},{"time":0.26201814,"amplitude":0.023062166},{"time":0.27501133,"amplitude":0.013834008},{"time":0.3029545299999999,"amplitude":0},{"time":0.629995,"amplitude":0},{"time":0.63,"amplitude":0.5453561478967492,"emphasis":{"amplitude":0.7159513015296367,"frequency":1}},{"time":0.6450113,"amplitude":0.53045064},{"time":0.6509977,"amplitude":0.40825564},{"time":0.6560091,"amplitude":0.33892432},{"time":0.66900223,"amplitude":0.20114467},{"time":0.6830159,"amplitude":0.110477865},{"time":0.6940136,"amplitude":0.06915557},{"time":0.7040136,"amplitude":0.04578151},{"time":0.7361397113924047,"amplitude":0},{"time":1.01,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.1805859,"frequency":0},{"time":0.18575963,"frequency":0.37577662787762905},{"time":0.23510204,"frequency":0.3465249978776291},{"time":0.27863947,"frequency":0.32100073787762906},{"time":0.31346938,"frequency":0.18757866},{"time":0.33088437,"frequency":0.14544554},{"time":0.33378685,"frequency":0},{"time":0.61469755,"frequency":0},{"time":0.6147025500000001,"frequency":0.6512774189064113},{"time":0.7859884949367087,"frequency":0.625282739388145},{"time":0.79528344,"frequency":0},{"time":0.9984581,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.haptic.meta new file mode 100644 index 0000000..3a9ced6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 30eb1e1837eea49088c39e2c60d19ebd +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.wav new file mode 100644 index 0000000..ce5f53a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.wav.meta new file mode 100644 index 0000000..212118fd --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 7b408ad851ce44cc2a5a2420793adb9f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.haptic new file mode 100644 index 0000000..99d6819 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Hammer 3.wav","project":"Hammer 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00011819159},{"time":0.19165165,"amplitude":0},{"time":0.19201814,"amplitude":0.0124106165},{"time":0.19202314,"amplitude":0.2918849047801146},{"time":0.20501134,"amplitude":0.2857638680114723},{"time":0.21501133,"amplitude":0.13107899},{"time":0.2240136,"amplitude":0.096704066},{"time":0.23800454,"amplitude":0.057677068},{"time":0.25800452,"amplitude":0.0302925},{"time":0.28773976999999995,"amplitude":0},{"time":0.6289973,"amplitude":0},{"time":0.6290023,"amplitude":0.19861419078393885,"emphasis":{"amplitude":0.47944635479923525,"frequency":1}},{"time":0.63,"amplitude":0.40030619912045884},{"time":0.6541939025316457,"amplitude":0.36514447780114717},{"time":0.65900224,"amplitude":0.12000209},{"time":0.67301583,"amplitude":0.07359699},{"time":0.68199545,"amplitude":0.053614277},{"time":0.71301585,"amplitude":0.021864414},{"time":0.7421584500000001,"amplitude":0},{"time":1,"amplitude":0.00013996789}],"frequency":[{"time":0,"frequency":0},{"time":0.18285714,"frequency":0},{"time":0.18286214,"frequency":0.37184616094180967},{"time":0.21188208,"frequency":0.4178812007648187},{"time":0.23510204,"frequency":0.4312328607648187},{"time":0.26122448,"frequency":0.4129684007648188},{"time":0.3018594,"frequency":0.3942862607648185},{"time":0.32507435,"frequency":0.3936189278967496},{"time":0.32507935,"frequency":0},{"time":0.6211338,"frequency":0},{"time":0.62403625,"frequency":0.6319675132247592},{"time":0.6646712,"frequency":0.6323980032247593},{"time":0.68208617,"frequency":0.6198062232247593},{"time":0.7372336,"frequency":0.5722969432247592},{"time":0.7662585,"frequency":0.5312477632247591},{"time":0.769161,"frequency":0},{"time":0.9984581,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.haptic.meta new file mode 100644 index 0000000..eade791 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e1a66bffe830248279920f18ff3a45c3 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.wav new file mode 100644 index 0000000..3e1a8e2 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.wav.meta new file mode 100644 index 0000000..b8cc16f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Hammer3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 378cb7bd00aa54c7eb80a64ef281000f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.haptic new file mode 100644 index 0000000..03d9715 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Keyboard 1.wav","project":"Keyboard 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0000017894936},{"time":0.15002267,"amplitude":0},{"time":0.15201814,"amplitude":0.048891626},{"time":0.1670068,"amplitude":0.04269606},{"time":0.17800453,"amplitude":0.26133879389961384},{"time":0.18800454,"amplitude":0.105903774},{"time":0.21241985000000002,"amplitude":0},{"time":0.21600907,"amplitude":0.11818444},{"time":0.21900226,"amplitude":0.2506996038996139},{"time":0.23002267,"amplitude":0.09151256},{"time":0.2310204,"amplitude":0.25679193389961386},{"time":0.2470068,"amplitude":0.079287484},{"time":0.2570068,"amplitude":0.053043943},{"time":0.27501133,"amplitude":0.025868878},{"time":0.2974306300000001,"amplitude":0},{"time":0.51,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.14802721,"frequency":0},{"time":0.1509297,"frequency":1},{"time":0.1538322,"frequency":0.97461677},{"time":0.1596372,"frequency":0.79031557},{"time":0.16253969,"frequency":0.7977348},{"time":0.16544218,"frequency":0.8459569},{"time":0.16834468,"frequency":0.83020914},{"time":0.17414966,"frequency":0.7088572},{"time":0.17995465,"frequency":0.54181427},{"time":0.18575963,"frequency":0.45556706},{"time":0.18866213,"frequency":0.43072072},{"time":0.19446713,"frequency":0.41339868},{"time":0.2060771,"frequency":0.49867755},{"time":0.20897959,"frequency":0.5489375},{"time":0.21188208,"frequency":0.742114},{"time":0.21478458,"frequency":0.8687422},{"time":0.21768707,"frequency":0.8789457},{"time":0.22349207,"frequency":0.7418364},{"time":0.22929706,"frequency":0.7268322},{"time":0.23510204,"frequency":0.68450505},{"time":0.24090704,"frequency":0.77850753},{"time":0.24380952,"frequency":0.71306},{"time":0.2496145,"frequency":0.51529497},{"time":0.252517,"frequency":0.45902994},{"time":0.26122448,"frequency":0.43370485},{"time":0.264127,"frequency":0.38411137},{"time":0.26702946,"frequency":0.3852695},{"time":0.26993197,"frequency":0},{"time":0.499229,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.haptic.meta new file mode 100644 index 0000000..a78fa08 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 48b04cd1c7e6c45c99033fb83f30c75e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.wav new file mode 100644 index 0000000..7dd0734 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.wav.meta new file mode 100644 index 0000000..0a61b11 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ab16ee0540fb44fa69eff0e4867ad114 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.haptic new file mode 100644 index 0000000..0b9d114 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Keyboard 2.wav","project":"Keyboard 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000076348224},{"time":0.0010204081,"amplitude":0.000076348224},{"time":0.10501134,"amplitude":0.0014212193},{"time":0.11800453,"amplitude":0.045006976},{"time":0.11900227,"amplitude":0.2354715},{"time":0.12501134,"amplitude":0.19389875},{"time":0.12600906,"amplitude":0.36266434},{"time":0.14501134,"amplitude":0.18304937},{"time":0.16401361,"amplitude":0.112387486},{"time":0.16800453,"amplitude":0.14107135},{"time":0.17900227,"amplitude":0.11164467},{"time":0.18900226,"amplitude":0.11650163},{"time":0.20900226,"amplitude":0.07646632},{"time":0.2140136,"amplitude":0.12184338},{"time":0.22501133,"amplitude":0.09760509},{"time":0.22800453,"amplitude":0.19353944},{"time":0.25900227,"amplitude":0.099026725},{"time":0.2870068,"amplitude":0.049598284},{"time":0.37986985,"amplitude":0},{"time":0.5,"amplitude":0.0010980644}],"frequency":[{"time":0,"frequency":0},{"time":0.11029478,"frequency":0},{"time":0.113197275,"frequency":0.20780863},{"time":0.11900226,"frequency":0.41465044},{"time":0.12770975,"frequency":0.44679025},{"time":0.13061225,"frequency":0.3804574},{"time":0.13641724,"frequency":0.25998610374517367},{"time":0.14222223,"frequency":0.3089032037451737},{"time":0.1538322,"frequency":0.19993643974517375},{"time":0.1596372,"frequency":0.2520857337451737},{"time":0.16544218,"frequency":0.18487438274517376},{"time":0.17705216,"frequency":0.2264874437451737},{"time":0.18575963,"frequency":0.17513856804517378},{"time":0.19736962,"frequency":0.18175128974517377},{"time":0.2060771,"frequency":0.23602301574517368},{"time":0.21768707,"frequency":0.19667027874517376},{"time":0.22349207,"frequency":0.24796055374517376},{"time":0.23800454,"frequency":0.29368390374517367},{"time":0.24671203,"frequency":0.18803612174517376},{"time":0.2554195,"frequency":0.24981631374517374},{"time":0.264127,"frequency":0.18060574704517376},{"time":0.26993197,"frequency":0.23540223374517374},{"time":0.27573696,"frequency":0.20409926174517376},{"time":0.28444445,"frequency":0.2649637437451737},{"time":0.29024944,"frequency":0.17461848889517376},{"time":0.3018594,"frequency":0.2106677537451738},{"time":0.3076644,"frequency":0.17710827594517378},{"time":0.31927437,"frequency":0.25300871974517375},{"time":0.43224687000000017,"frequency":0},{"time":0.499229,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.haptic.meta new file mode 100644 index 0000000..1f4d858 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bb209fb0eab5d4f21b12d98cd39f91b0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.wav new file mode 100644 index 0000000..532c06d Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.wav.meta new file mode 100644 index 0000000..b85eced --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 776735bda09bc440da1119f0fc8af351 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.haptic new file mode 100644 index 0000000..0148c41 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Keyboard 3.wav","project":"Keyboard 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0004234022},{"time":0.0010204081,"amplitude":0.0004234022},{"time":0.12600906,"amplitude":0.0010418445},{"time":0.14002268,"amplitude":0.035332594},{"time":0.14800453,"amplitude":0.15110752},{"time":0.14900227,"amplitude":0.22291088000000003,"emphasis":{"amplitude":0.361650183011583,"frequency":0.5}},{"time":0.17002267,"amplitude":0.1305258},{"time":0.1870068,"amplitude":0.086194426},{"time":0.19002268,"amplitude":0.10755051},{"time":0.21002267,"amplitude":0.09112284},{"time":0.23201814,"amplitude":0.058498017},{"time":0.2370068,"amplitude":0.09310589},{"time":0.24800453,"amplitude":0.07776657},{"time":0.25002268,"amplitude":0.14890921},{"time":0.2810204,"amplitude":0.07700636},{"time":0.30800453,"amplitude":0.03986393},{"time":0.33800453,"amplitude":0.035746023},{"time":0.3640136,"amplitude":0.011394823},{"time":0.38800454,"amplitude":0.004054487},{"time":0.5,"amplitude":0.00043935038}],"frequency":[{"time":0,"frequency":0},{"time":0.10871973000000001,"frequency":0},{"time":0.14222223,"frequency":0.4265636},{"time":0.1509297,"frequency":0.4526049},{"time":0.15673469,"frequency":0.36878408200772184},{"time":0.1596372,"frequency":0.302608802007722},{"time":0.16544218,"frequency":0.3530695420077219},{"time":0.17414966,"frequency":0.248478742007722},{"time":0.18285714,"frequency":0.2847834520077219},{"time":0.18866213,"frequency":0.230790893007722},{"time":0.20027211,"frequency":0.264636942007722},{"time":0.20897959,"frequency":0.22455091530772198},{"time":0.21478458,"frequency":0.2805694270077219},{"time":0.22058958,"frequency":0.22928359350772198},{"time":0.22929706,"frequency":0.2724736670077219},{"time":0.23800454,"frequency":0.22961695570772198},{"time":0.24380952,"frequency":0.30921349700772194},{"time":0.26122448,"frequency":0.33232595200772186},{"time":0.26993197,"frequency":0.236409698007722},{"time":0.27863947,"frequency":0.29615812200772196},{"time":0.28734693,"frequency":0.22899655800772198},{"time":0.29315192,"frequency":0.29888065200772196},{"time":0.29895693,"frequency":0.25317433900772196},{"time":0.3076644,"frequency":0.2909606020077219},{"time":0.31346938,"frequency":0.22222465698772198},{"time":0.32217687,"frequency":0.25592322700772197},{"time":0.33088437,"frequency":0.226969543707722},{"time":0.34249434,"frequency":0.047108606},{"time":0.41552182000000004,"frequency":0},{"time":0.499229,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.haptic.meta new file mode 100644 index 0000000..e1b7a98 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c6f36653924a447c18e1cdbc2e14a822 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.wav new file mode 100644 index 0000000..0a42d1f Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.wav.meta new file mode 100644 index 0000000..8934bdf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keyboard3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 7b27863d254b64b43a78a2b21773bad2 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keychain1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keychain1.haptic new file mode 100644 index 0000000..ffa662c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keychain1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Keys 1.wav","project":"Keychain 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00019372976},{"time":0.0010204081,"amplitude":0.00019372976},{"time":0.106009066,"amplitude":0.0028488752},{"time":0.15501134,"amplitude":0.10951957,"emphasis":{"amplitude":0.4532390597297297,"frequency":0.761031}},{"time":0.20800453,"amplitude":0.055237440000000006,"emphasis":{"amplitude":0.29877652972972973,"frequency":0.5}},{"time":0.25201812,"amplitude":0.0422264,"emphasis":{"amplitude":0.2825127297297297,"frequency":0.5}},{"time":0.27002266,"amplitude":0.062832646,"emphasis":{"amplitude":0.3579596197297297,"frequency":0}},{"time":0.3140136,"amplitude":0.098440672,"emphasis":{"amplitude":0.3527805697297297,"frequency":0.5}},{"time":0.36800453,"amplitude":0.05652021,"emphasis":{"amplitude":0.3450770897297297,"frequency":1}},{"time":0.46301585,"amplitude":0.071684375,"emphasis":{"amplitude":0.3760243697297297,"frequency":0.38384265}},{"time":0.4970068,"amplitude":0.0406286448,"emphasis":{"amplitude":0.2805155357297297,"frequency":0.5}},{"time":0.56800455,"amplitude":0.0138468592,"emphasis":{"amplitude":0.24703830372972974,"frequency":0.5}},{"time":0.64,"amplitude":0.040693152,"emphasis":{"amplitude":0.2805961697297297,"frequency":0.5}},{"time":0.71999997,"amplitude":0.057904456,"emphasis":{"amplitude":0.3479020847297297,"frequency":0.80403835}},{"time":0.76800454,"amplitude":0.014597052,"emphasis":{"amplitude":0.24797604472972973,"frequency":0.5}},{"time":0.82800454,"amplitude":0.0292725144,"emphasis":{"amplitude":0.2663203727297297,"frequency":0.5}},{"time":1,"amplitude":0.00050226133}],"frequency":[{"time":0,"frequency":0.6061776061776061},{"time":1.01,"frequency":0.6428571428571427}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keychain1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keychain1.haptic.meta new file mode 100644 index 0000000..01d3a34 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keychain1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 98451e6cac8844354b9c809764ce80ea +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.haptic new file mode 100644 index 0000000..bbeb5d3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Keys 2.wav","project":"Keys 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0005820354},{"time":0.0010204081,"amplitude":0.0005820354},{"time":0.13401361,"amplitude":0.0005820354},{"time":0.1440136,"amplitude":0.008951814},{"time":0.1740136,"amplitude":0.0041581513},{"time":0.19700679,"amplitude":0.0046920036},{"time":0.20600906,"amplitude":0.017816},{"time":0.2070068,"amplitude":0.048713636},{"time":0.2310204,"amplitude":0.019890886},{"time":0.24600907,"amplitude":0.012237112},{"time":0.24800453,"amplitude":0.08725233,"emphasis":{"amplitude":0.30384827934362935,"frequency":0.9}},{"time":0.25501132,"amplitude":0.143317712,"emphasis":{"amplitude":0.3084907693436293,"frequency":0.9}},{"time":0.2640136,"amplitude":0.104688992,"emphasis":{"amplitude":0.2602048693436293,"frequency":0.9}},{"time":0.2810204,"amplitude":0.054370952,"emphasis":{"amplitude":0.19730731934362933,"frequency":0.9}},{"time":0.2940136,"amplitude":0.0327533392,"emphasis":{"amplitude":0.17028530334362935,"frequency":0.9}},{"time":0.3110204,"amplitude":0.0338262024,"emphasis":{"amplitude":0.17162638234362934,"frequency":0.9}},{"time":0.33301586,"amplitude":0.0159146768,"emphasis":{"amplitude":0.14923697534362934,"frequency":0.9}},{"time":0.37201813,"amplitude":0.0042836624},{"time":0.4040136,"amplitude":0.001428728},{"time":0.5,"amplitude":0.00059033243}],"frequency":[{"time":0,"frequency":0},{"time":0.12896194000000002,"frequency":0},{"time":0.15382944000000004,"frequency":0.9625533226254824},{"time":0.29605442,"frequency":0.89676344},{"time":0.3018544,"frequency":0.9390261652509653},{"time":0.4159719000000001,"frequency":0},{"time":0.499229,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.haptic.meta new file mode 100644 index 0000000..4577e8e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 21aa582084c8e4125991f4cbf42a47f7 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.wav new file mode 100644 index 0000000..001e896 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.wav.meta new file mode 100644 index 0000000..655bdc5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 9125840b6d4c34a0d9a284aa76407a43 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys2.wav new file mode 100644 index 0000000..580a720 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys2.wav.meta new file mode 100644 index 0000000..e61b3f4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Keys2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 725cf847b44dd4d5ba225c63dce8eca8 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.haptic new file mode 100644 index 0000000..94d7017 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Pen 1.wav","project":"Pen 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00035190428},{"time":0.0010204081,"amplitude":0.00035190428},{"time":0.025330088,"amplitude":0.11636267803861004},{"time":0.047685784,"amplitude":0},{"time":0.053015873,"amplitude":0.056426692,"emphasis":{"amplitude":0.09369938816602315,"frequency":0.5}},{"time":0.10828180000000003,"amplitude":0.06076866647104247},{"time":0.14800453,"amplitude":0.0039055455},{"time":0.16800453,"amplitude":0.020243274},{"time":0.1740136,"amplitude":0.0379184216,"emphasis":{"amplitude":0.07056405016602316,"frequency":0.5}},{"time":0.21819313999999995,"amplitude":0},{"time":0.23269712,"amplitude":0},{"time":0.24800453,"amplitude":0.044397928,"emphasis":{"amplitude":0.07866343316602314,"frequency":0.5}},{"time":0.27034141,"amplitude":0.02152317227799228},{"time":0.34501132,"amplitude":0.004588436},{"time":0.35218977,"amplitude":0.09141816263706562},{"time":0.37501132,"amplitude":0.024012964},{"time":0.37600908,"amplitude":0.040305629600000004,"emphasis":{"amplitude":0.07354806016602315,"frequency":0.5}},{"time":0.38664375000000006,"amplitude":0},{"time":0.39600906,"amplitude":0.038802534400000005,"emphasis":{"amplitude":0.07166919116602316,"frequency":0.5}},{"time":0.4295454,"amplitude":0},{"time":0.4640136,"amplitude":0.033694014,"emphasis":{"amplitude":0.06738803,"frequency":0.5}},{"time":0.51,"amplitude":0.07937742991505793}],"frequency":[{"time":0,"frequency":0},{"time":0.023219952,"frequency":0.431178417760618},{"time":0.05804988,"frequency":0.5757765177606178},{"time":0.101587296,"frequency":0.3816822177606179},{"time":0.1538322,"frequency":0.5163514477606178},{"time":0.18285714,"frequency":0.5933694177606178},{"time":0.2060771,"frequency":0.4458691977606178},{"time":0.22929706,"frequency":0.46916691776061786},{"time":0.2496145,"frequency":0.5286972377606177},{"time":0.26122448,"frequency":0.7140788577606177},{"time":0.26993197,"frequency":0.5202118177606178},{"time":0.30476192,"frequency":0.31709407776061777},{"time":0.34249434,"frequency":0.49982581776061774},{"time":0.3512018,"frequency":0.4947439877606178},{"time":0.37151927,"frequency":0.8153567477606177},{"time":0.4063492,"frequency":0.4540393577606178},{"time":0.43247166,"frequency":0.5386984177606178},{"time":0.4614966,"frequency":0.5684679377606178},{"time":0.47891155,"frequency":0.36697706776061784},{"time":0.4963265,"frequency":0.3583520577606178},{"time":0.51,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.haptic.meta new file mode 100644 index 0000000..d8399c1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2b230f5d89c034cebb5c6f0ca5e2673f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.wav new file mode 100644 index 0000000..009f8de Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.wav.meta new file mode 100644 index 0000000..0cb8a17 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Pen1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 0a4d3aae2b26b4e14aecb823eb10eb85 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Switch6.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Switch6.wav new file mode 100644 index 0000000..ba6ed9e Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Switch6.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Switch6.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Switch6.wav.meta new file mode 100644 index 0000000..b5dff67 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Switch6.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f22953a942cff45eeb4ce46012397c3a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.haptic new file mode 100644 index 0000000..9ce6255 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Switch Heavy 1.wav","project":"Switch Heavy 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0},{"time":0.11899726999999999,"amplitude":0},{"time":0.11900227,"amplitude":0.39863090532818535,"emphasis":{"amplitude":0.8286040672927549,"frequency":0.5}},{"time":0.11900727,"amplitude":0.7776198928912097},{"time":0.12952611722044727,"amplitude":0.7819565916307053},{"time":0.13634318814696483,"amplitude":0.35688399516011815},{"time":0.15201814,"amplitude":0.18617475},{"time":0.17866906674121402,"amplitude":0.02594303826890755},{"time":0.21251746744408948,"amplitude":0.011907781983193276},{"time":0.26,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.08126984,"frequency":0},{"time":0.11899726,"frequency":0},{"time":0.11900226,"frequency":0.5329534152623217},{"time":0.14157210623003197,"frequency":0.538509099295935},{"time":0.14802721,"frequency":0.3710473527413128},{"time":0.1538322,"frequency":0.3117415127413128},{"time":0.1701721560383386,"frequency":0.2995462978673636},{"time":0.17414966,"frequency":0.530090062741313},{"time":0.17995465,"frequency":0.507219612741313},{"time":0.19446713,"frequency":0.579154312741313},{"time":0.2031746,"frequency":0.49046971274131296},{"time":0.20897959,"frequency":0.572821012741313},{"time":0.21768707,"frequency":0.491898272741313},{"time":0.22058958,"frequency":0.526298812741313},{"time":0.22929706,"frequency":0.38593171274131277},{"time":0.24090704,"frequency":0.531453162741313},{"time":0.24671203,"frequency":0.49043027274131296},{"time":0.2496145,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.haptic.meta new file mode 100644 index 0000000..f70a2df --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c748dc42d80304422ab1afd7d62f1e5d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.wav new file mode 100644 index 0000000..9336aee Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.wav.meta new file mode 100644 index 0000000..9e41211 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f639e61dd44ef481583e240c959848d9 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.haptic new file mode 100644 index 0000000..3225e7c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Switch Heavy 2.wav","project":"Switch Heavy 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00012077681},{"time":0.09501134,"amplitude":0.0001339271},{"time":0.10201814,"amplitude":0.0688794},{"time":0.11102041,"amplitude":0.056281686},{"time":0.114013605,"amplitude":0.09332104},{"time":0.115011334,"amplitude":0.22671452},{"time":0.12351242277955277,"amplitude":0},{"time":0.12799954,"amplitude":0},{"time":0.12800454,"amplitude":0.5998942818487393,"emphasis":{"amplitude":0.7565112327731088,"frequency":1}},{"time":0.13833772325878596,"amplitude":0.6452970077310923},{"time":0.1410204,"amplitude":0.36998576},{"time":0.1470068,"amplitude":0.2978905},{"time":0.1610204,"amplitude":0.18635653},{"time":0.17600907,"amplitude":0.11288756},{"time":0.1870068,"amplitude":0.07432037},{"time":0.20900226,"amplitude":0.028145716},{"time":0.22862836999999997,"amplitude":0},{"time":0.26,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.089977324,"frequency":0},{"time":0.09287982,"frequency":0.7509398},{"time":0.0986848,"frequency":0.79426587},{"time":0.10739229,"frequency":0.793427},{"time":0.11029478,"frequency":0.8024175},{"time":0.11609977,"frequency":0.7320888},{"time":0.11900226,"frequency":0.7157928},{"time":0.12190475,"frequency":0.73764753},{"time":0.12770975,"frequency":0.8278647},{"time":0.13061225,"frequency":0.815974},{"time":0.13351475,"frequency":0.7474675},{"time":0.13931973,"frequency":0.56783485},{"time":0.14222223,"frequency":0.51118916},{"time":0.14512472,"frequency":0.53432673},{"time":0.14802721,"frequency":0.5190262},{"time":0.15673469,"frequency":0.55527735},{"time":0.1596372,"frequency":0.5497953},{"time":0.16253969,"frequency":0.49933627},{"time":0.16544218,"frequency":0.5093896},{"time":0.17124717,"frequency":0.6422596},{"time":0.17414966,"frequency":0.66640824},{"time":0.17705216,"frequency":0.64317197},{"time":0.17995465,"frequency":0.66036564},{"time":0.18285714,"frequency":0.7137798},{"time":0.18575963,"frequency":0.7397444},{"time":0.19156463,"frequency":0.6423621},{"time":0.19446713,"frequency":0.62587935},{"time":0.26,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.haptic.meta new file mode 100644 index 0000000..7aa9862 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b5f90f292a1434ac6b261e7f3c05b4ec +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.wav new file mode 100644 index 0000000..24324b2 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.wav.meta new file mode 100644 index 0000000..1f997b5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchHeavy2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: dcabc9bcc2a8340ada5729e569aebd48 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.haptic new file mode 100644 index 0000000..9b912bb --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Switch Light 1.wav","project":"Switch Light 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0},{"time":0.11095225999999998,"amplitude":0},{"time":0.11600907,"amplitude":0.029318824},{"time":0.1170068,"amplitude":0.15183048},{"time":0.12002268,"amplitude":0.23651414},{"time":0.12102041,"amplitude":0.25610904,"emphasis":{"amplitude":0.40121738108108096,"frequency":0.5}},{"time":0.12501134,"amplitude":0.32105047},{"time":0.12900226,"amplitude":0.27452147},{"time":0.1370068,"amplitude":0.20191261},{"time":0.1440136,"amplitude":0.14887384},{"time":0.15301587,"amplitude":0.10195575},{"time":0.1610204,"amplitude":0.072044045},{"time":0.17900227,"amplitude":0.03685768},{"time":0.1989340700000001,"amplitude":0},{"time":0.26,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.104489796,"frequency":0},{"time":0.11029478,"frequency":0.6315386},{"time":0.113197275,"frequency":0.71874547},{"time":0.12190475,"frequency":0.70620215},{"time":0.124807246,"frequency":0.6804088},{"time":0.13931973,"frequency":0.6574676},{"time":0.14222223,"frequency":0.704917},{"time":0.14802721,"frequency":0.6509711},{"time":0.1538322,"frequency":0.7202439},{"time":0.15673469,"frequency":0.64688736},{"time":0.17414966,"frequency":0.57054275},{"time":0.17705216,"frequency":0.58341944},{"time":0.17995465,"frequency":0.44888577},{"time":0.18285714,"frequency":0.44650784},{"time":0.18866213,"frequency":0.5799795},{"time":0.19156463,"frequency":0.5542488},{"time":0.19736962,"frequency":0.3070692},{"time":0.20027211,"frequency":0.25356835},{"time":0.2031746,"frequency":0.29003668},{"time":0.20897959,"frequency":0.24966598},{"time":0.21188208,"frequency":0.1770505},{"time":0.22058958,"frequency":0.18191434},{"time":0.23632956999999996,"frequency":0},{"time":0.26,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.haptic.meta new file mode 100644 index 0000000..59782f2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5f4d0b24fdf7b450eab448ee8aaa61c1 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.wav new file mode 100644 index 0000000..5d736b0 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.wav.meta new file mode 100644 index 0000000..bd7de13 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: bbec1866c8d0041ccba6df06af0e17fd +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.haptic new file mode 100644 index 0000000..4ba50dc --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Switch Light 2.wav","project":"Switch Light 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0},{"time":0.12501134,"amplitude":0.0010954125},{"time":0.12600906,"amplitude":0.19245037},{"time":0.1270068,"amplitude":0.12536515,"emphasis":{"amplitude":0.2507303,"frequency":0.5}},{"time":0.12900226,"amplitude":0.24633577},{"time":0.13600907,"amplitude":0.18404958},{"time":0.14201814,"amplitude":0.14151657},{"time":0.15102041,"amplitude":0.095305584},{"time":0.15900226,"amplitude":0.067526385},{"time":0.16401361,"amplitude":0.054488152},{"time":0.17201814,"amplitude":0.038743608},{"time":0.17900227,"amplitude":0.028794823},{"time":0.1870068,"amplitude":0.020790905},{"time":0.19795564,"amplitude":0},{"time":0.26,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.11732,"frequency":0},{"time":0.117325,"frequency":0.6988610523712001},{"time":0.13739405620607215,"frequency":0.6795222049817896},{"time":0.14446250000000013,"frequency":0.547104247104247},{"time":0.1909375,"frequency":0.542181467181467},{"time":0.26,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.haptic.meta new file mode 100644 index 0000000..dbded66 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1b723329471ef4d2cb72b3db472f7758 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.wav new file mode 100644 index 0000000..a034beb Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.wav.meta new file mode 100644 index 0000000..7ac0278 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 099b00562078f4338931e30c1fad4a69 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.haptic new file mode 100644 index 0000000..d785838 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Switch Light 3.wav","project":"Switch Light 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000007841285},{"time":0.0010204081,"amplitude":0.000007841285},{"time":0.08900227,"amplitude":0.000007841285},{"time":0.09501134,"amplitude":0.025220018},{"time":0.099002264,"amplitude":0.056116886},{"time":0.114013605,"amplitude":0.03301605},{"time":0.115011334,"amplitude":0.051000558},{"time":0.122018136,"amplitude":0.055125307},{"time":0.12301587,"amplitude":0.24588601,"emphasis":{"amplitude":0.49177203,"frequency":1}},{"time":0.1240136,"amplitude":0.5795127},{"time":0.12900226,"amplitude":0.5335277},{"time":0.1370068,"amplitude":0.39285195},{"time":0.14301588,"amplitude":0.30436146},{"time":0.15301587,"amplitude":0.19730416},{"time":0.15501134,"amplitude":0.25453532},{"time":0.16501133,"amplitude":0.17787082},{"time":0.1770068,"amplitude":0.10775613},{"time":0.18501133,"amplitude":0.075551935},{"time":0.2010204,"amplitude":0.036213133},{"time":0.2170068,"amplitude":0.017356118},{"time":0.24900226,"amplitude":0.003995766},{"time":0.24984127,"amplitude":0.003995766}],"frequency":[{"time":0,"frequency":0},{"time":0.06590977499999999,"frequency":0},{"time":0.11057974000000001,"frequency":0.9282596115830118},{"time":0.14802721,"frequency":0.9056774},{"time":0.17667719,"frequency":0.738206917876448},{"time":0.24441717999999998,"frequency":0},{"time":0.26,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.haptic.meta new file mode 100644 index 0000000..c074b1c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 557773c989ca5454b90b6416bb012ee3 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.wav new file mode 100644 index 0000000..00e95c4 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.wav.meta new file mode 100644 index 0000000..6a52a4d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchLight3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 1a1c9fd2071a346fe97e445716115b82 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.haptic new file mode 100644 index 0000000..2b940aa --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Switch Med 1.wav","project":"Switch Med 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000071325034},{"time":0.11600907,"amplitude":0},{"time":0.1170068,"amplitude":0.37911275235521225},{"time":0.11800453,"amplitude":0.36786964235521225,"emphasis":{"amplitude":0.514587789073359,"frequency":0.5}},{"time":0.12102041,"amplitude":0.4582639023552122},{"time":0.13102041,"amplitude":0.4113860363552122},{"time":0.14600907,"amplitude":0.06921851},{"time":0.15600906,"amplitude":0.046249922},{"time":0.1610204,"amplitude":0.03790384},{"time":0.16867725999999997,"amplitude":0},{"time":0.26,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.11029478,"frequency":0},{"time":0.113197275,"frequency":0.5871573277992281},{"time":0.11609977,"frequency":0.551048027799228},{"time":0.11900226,"frequency":0.537202827799228},{"time":0.12190475,"frequency":0.5492361277992281},{"time":0.124807246,"frequency":0.518620957799228},{"time":0.12770975,"frequency":0.459094157799228},{"time":0.13061225,"frequency":0.41029442779922787},{"time":0.13351475,"frequency":0.45584002779922805},{"time":0.13641724,"frequency":0.5129196277992281},{"time":0.13931973,"frequency":0.532396967799228},{"time":0.14222223,"frequency":0.4669983877992281},{"time":0.14512472,"frequency":0.44875602779922785},{"time":0.14802721,"frequency":0.49415527779922797},{"time":0.1509297,"frequency":0.5642500277992282},{"time":0.1538322,"frequency":0.612035567799228},{"time":0.15673469,"frequency":0.6911860577992281},{"time":0.1596372,"frequency":0.727799227799228},{"time":0.16253969,"frequency":0.7206527277992281},{"time":0.16544218,"frequency":0.6481133277992281},{"time":0.16834468,"frequency":0.5741198277992281},{"time":0.17124717,"frequency":0},{"time":0.2496145,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.haptic.meta new file mode 100644 index 0000000..bc90ce0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c4c3b1884bce24d589784ec568ffc26a +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.wav new file mode 100644 index 0000000..b1c20fc Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.wav.meta new file mode 100644 index 0000000..9ab76cf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ca22910bb1e654ebcb475de5bbf2069f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.haptic new file mode 100644 index 0000000..fc0ae17 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Switch Med 2.wav","project":"Switch Med 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00014092131},{"time":0.11965226999999999,"amplitude":0},{"time":0.12470405999999995,"amplitude":0.025096525096525095},{"time":0.12600906,"amplitude":0.24203885633204622,"emphasis":{"amplitude":0.5458537844401544,"frequency":0.5}},{"time":0.1270068,"amplitude":0.49780468633204633},{"time":0.12800454,"amplitude":0.49567684633204634},{"time":0.13401361,"amplitude":0.39635659633204623},{"time":0.1410204,"amplitude":0.25635073},{"time":0.14501134,"amplitude":0.21366839},{"time":0.15301587,"amplitude":0.14783409},{"time":0.1610204,"amplitude":0.102296606},{"time":0.16900226,"amplitude":0.07087307},{"time":0.1770068,"amplitude":0.049064215},{"time":0.18501133,"amplitude":0.033979446},{"time":0.1979329,"amplitude":0},{"time":0.26,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.09172477,"frequency":0},{"time":0.11900226,"frequency":0.6312741312741311},{"time":0.13641724,"frequency":0.6312741312741311},{"time":0.23990723000000008,"frequency":0},{"time":0.2496145,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.haptic.meta new file mode 100644 index 0000000..99c85dc --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 60713e44d5aea4fc78d9a78943daff6d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.wav new file mode 100644 index 0000000..77ae7dd Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.wav.meta new file mode 100644 index 0000000..9be5c8c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/SwitchMed2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: fadb07e8551cd4db2a081ec1b9702af6 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.haptic new file mode 100644 index 0000000..38384ad --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Velcro 1.wav","project":"Velcro 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000024769059},{"time":0.0010204081,"amplitude":0.000024769059},{"time":0.15297892,"amplitude":0},{"time":0.18201813,"amplitude":0.14827695342664093,"emphasis":{"amplitude":0.26117407463320463,"frequency":0.038449623}},{"time":0.25600907,"amplitude":0.1798257089266409},{"time":0.26501134,"amplitude":0.1556811169266409,"emphasis":{"amplitude":0.31812918063320456,"frequency":0.2833765}},{"time":0.28600907,"amplitude":0.22975837092664086},{"time":0.29800454,"amplitude":0.16018448792664092,"emphasis":{"amplitude":0.35277049463320453,"frequency":0}},{"time":0.34600908,"amplitude":0.22236952092664086},{"time":0.36102042,"amplitude":0.22900424092664087},{"time":0.38900226,"amplitude":0.16999807292664093,"emphasis":{"amplitude":0.42825960463320456,"frequency":0.32070377}},{"time":0.40800452,"amplitude":0.35340878092664074},{"time":0.41,"amplitude":0.1799586229266409,"emphasis":{"amplitude":0.5048792346332046,"frequency":0.15554465}},{"time":0.43201813,"amplitude":0.29980926092664073},{"time":0.43501133,"amplitude":0.1805834739266409,"emphasis":{"amplitude":0.5096857846332046,"frequency":0.54392225}},{"time":0.45201814,"amplitude":0.3547026009266407},{"time":0.46201813,"amplitude":0.4065652909266407},{"time":0.47,"amplitude":0.19443296292664086,"emphasis":{"amplitude":0.6162203246332045,"frequency":0.03621748}},{"time":0.48999998,"amplitude":0.3552623509266407},{"time":0.4970068,"amplitude":0.1875119289266409,"emphasis":{"amplitude":0.5629815746332046,"frequency":0.049867198}},{"time":0.51201814,"amplitude":0.3991375409266407},{"time":0.5270068,"amplitude":0.1854913909266409,"emphasis":{"amplitude":0.5474389746332046,"frequency":1}},{"time":0.54301584,"amplitude":0.3572146709266407},{"time":0.54900223,"amplitude":0.1778857209266409,"emphasis":{"amplitude":0.48893383463320456,"frequency":0}},{"time":0.56201816,"amplitude":0.33080552092664073},{"time":0.5650113,"amplitude":0.4386533009266407},{"time":0.5870068,"amplitude":0.3151163409266407},{"time":0.60900223,"amplitude":0.1704209639266409,"emphasis":{"amplitude":0.43151262463320456,"frequency":0.042378217}},{"time":0.62700677,"amplitude":0.3144186109266407},{"time":0.62800455,"amplitude":0.4056020409266407},{"time":0.6550113,"amplitude":0.3005753909266407},{"time":0.6580045,"amplitude":0.1797005609266409,"emphasis":{"amplitude":0.5028941346332045,"frequency":0.6266061}},{"time":0.6880045,"amplitude":0.3022979209266407},{"time":0.7070068,"amplitude":0.2968962309266407},{"time":0.7170068,"amplitude":0.1707536549266409,"emphasis":{"amplitude":0.43407177463320457,"frequency":0}},{"time":0.7430159,"amplitude":0.25393981092664086},{"time":0.7440136,"amplitude":0.1632088089266409,"emphasis":{"amplitude":0.37603450463320454,"frequency":0.9875165}},{"time":0.7760091,"amplitude":0.20730520092664087},{"time":0.8080045,"amplitude":0.15627672942664092},{"time":0.87199545,"amplitude":0.0009791943},{"time":1,"amplitude":0.00018511704}],"frequency":[{"time":0,"frequency":0},{"time":0.12428091000000002,"frequency":0},{"time":0.17705216,"frequency":0.75978917},{"time":0.2060771,"frequency":0.7061764},{"time":0.21541583,"frequency":0.34749034749034746},{"time":0.21768707,"frequency":0.79019856},{"time":0.22639456,"frequency":0.3030888030888031},{"time":0.2554195,"frequency":0.413127413127413},{"time":0.258322,"frequency":0.815453},{"time":0.27573696,"frequency":0.6456681},{"time":0.3105669,"frequency":0.765934},{"time":0.39473924,"frequency":0.7395358},{"time":0.41795918,"frequency":0.58632815},{"time":0.45278913,"frequency":0.7111628},{"time":0.4963265,"frequency":0.43594778},{"time":0.5195465,"frequency":0.646246},{"time":0.53696144,"frequency":0.48045748},{"time":0.5456689,"frequency":0.8150415},{"time":0.57759637,"frequency":0.5139903},{"time":0.6008163,"frequency":0.49972844},{"time":0.6124263,"frequency":0.8758385},{"time":0.64725626,"frequency":0.6821768},{"time":0.6733787,"frequency":0.8541516},{"time":0.7024036,"frequency":0.63501996},{"time":0.7227211,"frequency":0.9988139},{"time":0.7343311,"frequency":0.6621259},{"time":0.751746,"frequency":0.8228338},{"time":0.7662585,"frequency":0.64072996},{"time":0.8985672499999999,"frequency":0},{"time":1.01,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.haptic.meta new file mode 100644 index 0000000..4fcdbbf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: df2b0fd193fd843e2a71bf092b370cea +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.wav new file mode 100644 index 0000000..b4887c1 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.wav.meta new file mode 100644 index 0000000..987abf0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 4110772b9efb94e5b919923d775a1ca7 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.haptic new file mode 100644 index 0000000..12e99a2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Velcro 2.wav","project":"Velcro 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0000023507528},{"time":0.0010204081,"amplitude":0.0000023507528},{"time":0.2470068,"amplitude":0.0000023507528},{"time":0.2770068,"amplitude":0.14998287410810807},{"time":0.28,"amplitude":0.11644944410810812,"emphasis":{"amplitude":0.2909766218146717,"frequency":0.5012876}},{"time":0.3140136,"amplitude":0.15672071010810806},{"time":0.31800452,"amplitude":0.11843444110810812,"emphasis":{"amplitude":0.31933374181467167,"frequency":0.3056192}},{"time":0.4070068,"amplitude":0.17147957310810805},{"time":0.4110204,"amplitude":0.11608814410810812,"emphasis":{"amplitude":0.28581519181467174,"frequency":0.8776324}},{"time":0.44501132,"amplitude":0.16278380810810805},{"time":0.45,"amplitude":0.20933075810810803},{"time":0.5050113,"amplitude":0.14620209810810805},{"time":0.50700676,"amplitude":0.11530140340810813,"emphasis":{"amplitude":0.27457604181467177,"frequency":0.99409974}},{"time":0.5530159,"amplitude":0.16056389810810806},{"time":0.57900226,"amplitude":0.255923778108108},{"time":0.63,"amplitude":0.25138996810810804},{"time":0.67,"amplitude":0.16573521810810804},{"time":0.67501134,"amplitude":0.11819336510810811,"emphasis":{"amplitude":0.3158897818146717,"frequency":1}},{"time":0.7440136,"amplitude":0.12019615010810812},{"time":0.8080045,"amplitude":0.00063460786},{"time":1,"amplitude":9.172345e-8}],"frequency":[{"time":0,"frequency":0},{"time":0.14393570999999997,"frequency":0},{"time":0.23773821999999997,"frequency":0.703812525096525},{"time":0.29895693,"frequency":0.5581291},{"time":0.3076644,"frequency":0.4054054054054053},{"time":0.3105669,"frequency":0.75972867},{"time":0.32217687,"frequency":0.88149476},{"time":0.33088437,"frequency":0.5137443},{"time":0.34829932,"frequency":0.52881736},{"time":0.3599093,"frequency":0.9316625},{"time":0.37151927,"frequency":0.5691785},{"time":0.41505668,"frequency":0.5935697},{"time":0.42666668,"frequency":0.7114081},{"time":0.42956915,"frequency":0.4459459459459459},{"time":0.44117913,"frequency":0.4459459459459459},{"time":0.44408163,"frequency":0.63290536},{"time":0.49342406,"frequency":0.587529},{"time":0.5021315,"frequency":0.4459459459459459},{"time":0.505034,"frequency":0.89677113},{"time":0.516644,"frequency":0.5601935},{"time":0.53696144,"frequency":0.6882741},{"time":0.53986394,"frequency":0.4459459459459459},{"time":0.5456689,"frequency":0.68183935},{"time":0.55727893,"frequency":0.7975307},{"time":0.57179135,"frequency":0.5753661},{"time":0.6153288,"frequency":0.66368556},{"time":0.6588662,"frequency":0.5337185},{"time":0.7569511999999999,"frequency":0.6321884693050193},{"time":0.8377386000000001,"frequency":0},{"time":0.9984581,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.haptic.meta new file mode 100644 index 0000000..575268e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5b933023681254587ad2e0a101e62503 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.wav new file mode 100644 index 0000000..3fdc13b Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.wav.meta new file mode 100644 index 0000000..8fe775b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Velcro2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ab652d55be92c4caa86265a2e4a757d9 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.haptic new file mode 100644 index 0000000..94b50d9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Woodsaw 1.wav","project":"Woodsaw 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00019374937},{"time":0.0010204081,"amplitude":0.00019374937},{"time":0.12002268,"amplitude":0.028064862},{"time":0.122018136,"amplitude":0.5179208912605042,"emphasis":{"amplitude":0.660479438235294,"frequency":0.59808636}},{"time":0.16600907,"amplitude":0.040387228},{"time":0.21102041,"amplitude":0.06734501},{"time":0.21201813,"amplitude":0.541842831260504,"emphasis":{"amplitude":0.7376469882352941,"frequency":1}},{"time":0.28800452,"amplitude":0.055968735},{"time":0.33600906,"amplitude":0.5450168178991595},{"time":0.42501134,"amplitude":0.05618847},{"time":0.45800453,"amplitude":0.5553257878991597},{"time":0.63,"amplitude":0.008993769},{"time":0.63900226,"amplitude":0.068397924,"emphasis":{"amplitude":0.6345039962184873,"frequency":0.9919554}},{"time":0.6773856865814694,"amplitude":0.4550645980672269},{"time":0.7109977,"amplitude":0.11410607,"emphasis":{"amplitude":0.7819496162184872,"frequency":0.39928037}},{"time":0.7430159,"amplitude":0.5755161579831932},{"time":0.7670068,"amplitude":0.22398484,"emphasis":{"amplitude":0.72253174,"frequency":0.782374}},{"time":0.8109977,"amplitude":0.44197732},{"time":0.8126408174121406,"amplitude":0.89766529605042},{"time":0.9240136,"amplitude":0.11997199},{"time":1,"amplitude":0.0061535467}],"frequency":[{"time":0,"frequency":0},{"time":0.16253969,"frequency":0},{"time":0.16544218,"frequency":0.6065047},{"time":0.19446713,"frequency":0.400208},{"time":0.2496145,"frequency":0.6760734},{"time":0.32798186,"frequency":0.3796668},{"time":0.33378685,"frequency":0.5820799},{"time":0.37442178,"frequency":0.44136158},{"time":0.41795918,"frequency":0.59585714},{"time":0.44408163,"frequency":0.50209117},{"time":0.499229,"frequency":0.62471074},{"time":0.5195465,"frequency":0.39941126},{"time":0.57469386,"frequency":0.3123521},{"time":0.6153288,"frequency":0.44576424},{"time":0.62984127,"frequency":0},{"time":0.6327438,"frequency":0.6966899},{"time":0.67628115,"frequency":0.79172134},{"time":0.6995011,"frequency":0.5286768},{"time":0.7169161,"frequency":0.889463},{"time":0.73142856,"frequency":0.67002517},{"time":0.7662585,"frequency":0.91117656},{"time":0.774966,"frequency":0.7306821},{"time":0.8214059,"frequency":0.9976},{"time":0.8533333,"frequency":0.76039374},{"time":0.8707483,"frequency":0.8333852},{"time":0.9258957,"frequency":0.47327387},{"time":0.9578231,"frequency":0.62206006},{"time":0.9607256,"frequency":0},{"time":0.9984581,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.haptic.meta new file mode 100644 index 0000000..8f66e9e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2190c21266fe04767ae3f89f379061b0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.wav new file mode 100644 index 0000000..6a40223 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.wav.meta new file mode 100644 index 0000000..a32c9cf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ff843b45267aa4ca1987d8c9b5a7fd86 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.haptic new file mode 100644 index 0000000..2e8a029 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Woodsaw 2.wav","project":"Woodsaw 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000054911554},{"time":0.0010204081,"amplitude":0.000054911554},{"time":0.08,"amplitude":0.031331267},{"time":0.10201814,"amplitude":0.1417441},{"time":0.11800453,"amplitude":0.6342134862184869,"emphasis":{"amplitude":0.7833731500840335,"frequency":0.56421524}},{"time":0.1410204,"amplitude":0.18118776},{"time":0.17600907,"amplitude":0.20137101},{"time":0.18002267,"amplitude":0.8953488782184866},{"time":0.20301586,"amplitude":0.14575636},{"time":0.22201814,"amplitude":0.18894923},{"time":0.22301587,"amplitude":0.8972402382184866},{"time":0.2640136,"amplitude":0.16846898},{"time":0.26600906,"amplitude":0.8454186782184867},{"time":0.29600906,"amplitude":0.17797385},{"time":0.31,"amplitude":0.03964951,"emphasis":{"amplitude":0.6865721445378148,"frequency":1}},{"time":0.33501133,"amplitude":0.1630249},{"time":0.35600907,"amplitude":0.7991420264705881},{"time":0.37900227,"amplitude":0.13804436},{"time":0.39600906,"amplitude":0.029165851,"emphasis":{"amplitude":0.6453023199159664,"frequency":0.11496074}},{"time":0.45800453,"amplitude":0.05225107},{"time":0.5,"amplitude":0.014039149}],"frequency":[{"time":0,"frequency":0},{"time":0.011609977,"frequency":0},{"time":0.014512472,"frequency":0.61062604},{"time":0.026122449,"frequency":0.64262426},{"time":0.031927437,"frequency":0.8304977},{"time":0.040634923,"frequency":0.64963996},{"time":0.066757366,"frequency":0.5960832},{"time":0.09287982,"frequency":0.69012684},{"time":0.113197275,"frequency":0.56469196},{"time":0.16544218,"frequency":0.6143225},{"time":0.17414966,"frequency":0.79386413},{"time":0.19736962,"frequency":0.73433834},{"time":0.2031746,"frequency":0.8490224},{"time":0.21768707,"frequency":0.697401},{"time":0.22929706,"frequency":0.7572928},{"time":0.264127,"frequency":0.75275683},{"time":0.28444445,"frequency":0.6258264},{"time":0.29315192,"frequency":0.741394},{"time":0.32507935,"frequency":0.7875765},{"time":0.34829932,"frequency":0.7043286},{"time":0.3570068,"frequency":0.81972945},{"time":0.39473924,"frequency":0.57258016},{"time":0.4121542,"frequency":0.5729948},{"time":0.42086166,"frequency":0.47359774},{"time":0.44117913,"frequency":0.69758725},{"time":0.4585941,"frequency":0.5670484},{"time":0.46730158,"frequency":0.64478195},{"time":0.48761904,"frequency":0.548404},{"time":0.49052155,"frequency":0},{"time":0.499229,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.haptic.meta new file mode 100644 index 0000000..be1a15c --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6a38398b21a2b492480d8d7465fff807 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.wav new file mode 100644 index 0000000..64371f0 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.wav.meta new file mode 100644 index 0000000..6131c83 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 209e9a4250d3243b28a68f5bbbaaf25c +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.haptic new file mode 100644 index 0000000..2f3962f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"../../../Working Files/One-shots/Studio-Library/Objects/Woodsaw 3.wav","project":"Woodsaw 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00002852736},{"time":0.0010204081,"amplitude":0.00002852736},{"time":0.06201814,"amplitude":0.021317206},{"time":0.08201814,"amplitude":0.08996722},{"time":0.11765855718849841,"amplitude":0.6763113163865544},{"time":0.14095753156549523,"amplitude":0.05311875424369746},{"time":0.1570068,"amplitude":0.004201680672268971,"emphasis":{"amplitude":0.7948110460504199,"frequency":0}},{"time":0.1710204,"amplitude":0.6707126219327728},{"time":0.1740136,"amplitude":0.7958889319327729},{"time":0.18800454,"amplitude":0.6911806119327729},{"time":0.19617240952076678,"amplitude":0.059865402386554877,"emphasis":{"amplitude":0.8998080560504198,"frequency":1}},{"time":0.21600907,"amplitude":0.7488949319327729},{"time":0.2170068,"amplitude":0.9417804319327724},{"time":0.24002267,"amplitude":0.7239840019327729},{"time":0.26201814,"amplitude":0.01979914667226891,"emphasis":{"amplitude":0.8769029660504197,"frequency":0}},{"time":0.29301587,"amplitude":0.7049456519327729},{"time":0.30201814,"amplitude":0.02223721667226887,"emphasis":{"amplitude":0.8897348960504197,"frequency":0}},{"time":0.35201815,"amplitude":0.5939729819327727},{"time":0.3910204,"amplitude":0.059593514},{"time":0.43301585,"amplitude":0.0140230935},{"time":0.5,"amplitude":0.004215225}],"frequency":[{"time":0,"frequency":0},{"time":0.0493424,"frequency":0.33892614},{"time":0.05804988,"frequency":0.37517244},{"time":0.07546485,"frequency":0.3473118},{"time":0.08417233,"frequency":0.5727533},{"time":0.12190475,"frequency":0.7569157},{"time":0.14802721,"frequency":0.62594867},{"time":0.16834468,"frequency":0.67878515},{"time":0.17414966,"frequency":0.58420837},{"time":0.19736962,"frequency":0.67737156},{"time":0.21768707,"frequency":0.6098124},{"time":0.24380952,"frequency":0.7629366},{"time":0.26702946,"frequency":0.64366674},{"time":0.29024944,"frequency":0.8069622},{"time":0.31346938,"frequency":0.52770513},{"time":0.33088437,"frequency":0.6295211},{"time":0.34829932,"frequency":0.4398573},{"time":0.3599093,"frequency":0.5798939},{"time":0.36571428,"frequency":0.47624075},{"time":0.39473924,"frequency":0.37728167},{"time":0.4063492,"frequency":0.4338134},{"time":0.41505668,"frequency":0.3512903},{"time":0.42666668,"frequency":0.45227444},{"time":0.43247166,"frequency":0.42547604},{"time":0.44117913,"frequency":0.36241302},{"time":0.51,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.haptic.meta new file mode 100644 index 0000000..9a0b0cb --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: dabfbfe7f3ea04cb7baa04527eb7892f +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.wav new file mode 100644 index 0000000..c3eb964 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.wav.meta new file mode 100644 index 0000000..9b76817 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Objects/Woodsaw3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ad72bc780f3af4389be22960665a8d45 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX.meta new file mode 100644 index 0000000..792a62a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3fcdbcbb426e5489d8e3c72351796000 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.haptic new file mode 100644 index 0000000..bb389b9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Boost 1.wav","project":"Boost 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00023506292},{"time":0.0010204081,"amplitude":0.00023506292},{"time":0.025011338,"amplitude":0.07270249},{"time":0.028004535,"amplitude":0.19346822400000002,"emphasis":{"amplitude":0.24183528,"frequency":0.1}},{"time":0.059002265,"amplitude":0.1468355},{"time":0.06,"amplitude":0.275373504,"emphasis":{"amplitude":0.34421688,"frequency":0.1}},{"time":0.08201814,"amplitude":0.18006808},{"time":0.11800453,"amplitude":0.21637945},{"time":0.12301587,"amplitude":0.276521968,"emphasis":{"amplitude":0.34565246,"frequency":0.1}},{"time":0.13800453,"amplitude":0.22092861},{"time":0.16002268,"amplitude":0.27916324},{"time":0.1710204,"amplitude":0.341237616,"emphasis":{"amplitude":0.42654702,"frequency":0.1}},{"time":0.20301586,"amplitude":0.2752955},{"time":0.22900227,"amplitude":0.33122182},{"time":0.23600906,"amplitude":0.41466991999999997,"emphasis":{"amplitude":0.5420216105263158,"frequency":0.5}},{"time":0.25301588,"amplitude":0.30889168},{"time":0.2640136,"amplitude":0.346927568,"emphasis":{"amplitude":0.45734367052631586,"frequency":0.5}},{"time":0.2870068,"amplitude":0.26895124},{"time":0.28800452,"amplitude":0.36610456,"emphasis":{"amplitude":0.48131491052631586,"frequency":0.5}},{"time":0.3110204,"amplitude":0.29136574},{"time":0.35,"amplitude":0.28395104},{"time":0.3570068,"amplitude":0.33464593600000003,"emphasis":{"amplitude":0.44199163052631585,"frequency":0.5}},{"time":0.3710204,"amplitude":0.28924388},{"time":0.37800452,"amplitude":0.331029536,"emphasis":{"amplitude":0.43747113052631587,"frequency":0.5}},{"time":0.39501134,"amplitude":0.30523133},{"time":0.41600907,"amplitude":0.3330968},{"time":0.42301586,"amplitude":0.369893144,"emphasis":{"amplitude":0.48605064052631586,"frequency":0.5}},{"time":0.44501132,"amplitude":0.28395742},{"time":0.46201813,"amplitude":0.26256335},{"time":0.46301585,"amplitude":0.375537728,"emphasis":{"amplitude":0.49310637052631584,"frequency":0.5}},{"time":0.48501134,"amplitude":0.27872714},{"time":0.49600905,"amplitude":0.34227492800000003,"emphasis":{"amplitude":0.4515278705263159,"frequency":0.5}},{"time":0.52301586,"amplitude":0.19325186},{"time":0.5270068,"amplitude":0.278302928,"emphasis":{"amplitude":0.34787866,"frequency":0.9}},{"time":0.5420181,"amplitude":0.22324985},{"time":0.57,"amplitude":0.18741684800000002,"emphasis":{"amplitude":0.23427106,"frequency":0.9}},{"time":0.67099774,"amplitude":0.129269144,"emphasis":{"amplitude":0.16158643,"frequency":0.9}},{"time":0.6930159,"amplitude":0.07240318080000001,"emphasis":{"amplitude":0.090503976,"frequency":0.9}},{"time":0.73600906,"amplitude":0.0745770272,"emphasis":{"amplitude":0.093221284,"frequency":0.9}},{"time":0.80199546,"amplitude":0.0242050512,"emphasis":{"amplitude":0.030256314,"frequency":0.9}},{"time":1.0182769481599427,"amplitude":0},{"time":1.4499999000000001,"amplitude":0}],"frequency":[{"time":0,"frequency":0.3346014},{"time":0.008707482,"frequency":0.79405814},{"time":0.02031746,"frequency":0.53804386},{"time":0.04643991,"frequency":0.4611466},{"time":0.08126984,"frequency":0.58482695},{"time":0.101587296,"frequency":0.41254777},{"time":0.15673469,"frequency":0.5748791},{"time":0.18866213,"frequency":0.35239425},{"time":0.24380952,"frequency":0.47924107},{"time":0.26993197,"frequency":0.35791284},{"time":0.3018594,"frequency":0.4756723},{"time":0.3163719,"frequency":0.35801},{"time":0.34539682,"frequency":0.5587515},{"time":0.38022676,"frequency":0.41311428},{"time":0.39764172,"frequency":0.5901649},{"time":0.43537414,"frequency":0.33821356},{"time":0.4469841,"frequency":0.5732},{"time":0.47310656,"frequency":0.31439295},{"time":0.49052155,"frequency":0.571967},{"time":0.528254,"frequency":0.3987879},{"time":0.6501587,"frequency":0.3041651},{"time":0.7227211,"frequency":0.4351146},{"time":0.769161,"frequency":0.27597404},{"time":0.7894784,"frequency":0.44230664},{"time":0.8388209,"frequency":0.33627015},{"time":0.84752834,"frequency":0.49995705},{"time":0.88526076,"frequency":0.3039715},{"time":0.94911563,"frequency":0.34406164},{"time":1.176355387931034,"frequency":0},{"time":1.4499999000000001,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.haptic.meta new file mode 100644 index 0000000..c00bc0f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 05308c4aa64da4ba2ab52866c1733bea +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.wav b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.wav new file mode 100644 index 0000000..a9a085c Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.wav.meta new file mode 100644 index 0000000..bb5ac5f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Boost1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 8ad403f13bc6243c4aadcc0a8348e389 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.haptic new file mode 100644 index 0000000..062c58f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Car Engine 1.wav","project":"Car Engine 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00006841391},{"time":0.0010204081,"amplitude":0.00006841391},{"time":0.14501134,"amplitude":0.0006367646},{"time":0.34900227,"amplitude":0.0080903488,"emphasis":{"amplitude":0.010112936,"frequency":0.1}},{"time":0.38800454,"amplitude":0.0223551736,"emphasis":{"amplitude":0.027943967,"frequency":0.1}},{"time":0.4510204,"amplitude":0.0157260504,"emphasis":{"amplitude":0.019657563,"frequency":0.1}},{"time":0.45301586,"amplitude":0.03075616,"emphasis":{"amplitude":0.0384452,"frequency":0.1}},{"time":0.48501134,"amplitude":0.019721639200000002,"emphasis":{"amplitude":0.024652049,"frequency":0.1}},{"time":0.48700678,"amplitude":0.037427300000000004,"emphasis":{"amplitude":0.046784125,"frequency":0.1}},{"time":0.51900226,"amplitude":0.022174740000000002,"emphasis":{"amplitude":0.027718425,"frequency":0.1}},{"time":0.52301586,"amplitude":0.0469211936,"emphasis":{"amplitude":0.058651492,"frequency":0.1}},{"time":0.5540136,"amplitude":0.0323462192,"emphasis":{"amplitude":0.040432774,"frequency":0.1}},{"time":0.5570068,"amplitude":0.0521003488,"emphasis":{"amplitude":0.065125436,"frequency":0.1}},{"time":0.5880045,"amplitude":0.0311619224,"emphasis":{"amplitude":0.038952403,"frequency":0.1}},{"time":0.58900225,"amplitude":0.058643495999999996,"emphasis":{"amplitude":0.07330437,"frequency":0.1}},{"time":0.62201816,"amplitude":0.033719882400000005,"emphasis":{"amplitude":0.042149853,"frequency":0.1}},{"time":0.6230159,"amplitude":0.066998576,"emphasis":{"amplitude":0.08374822,"frequency":0.1}},{"time":0.6560091,"amplitude":0.043250872,"emphasis":{"amplitude":0.05406359,"frequency":0.1}},{"time":0.6570068,"amplitude":0.07879351200000001,"emphasis":{"amplitude":0.09849189,"frequency":0.1}},{"time":0.69,"amplitude":0.0460693064,"emphasis":{"amplitude":0.057586633,"frequency":0.1}},{"time":0.6909977,"amplitude":0.0824652192,"emphasis":{"amplitude":0.103081524,"frequency":0.1}},{"time":0.72401357,"amplitude":0.04857348,"emphasis":{"amplitude":0.06071685,"frequency":0.1}},{"time":0.72501135,"amplitude":0.10009544,"emphasis":{"amplitude":0.1251193,"frequency":0.1}},{"time":0.75800455,"amplitude":0.053255776000000005,"emphasis":{"amplitude":0.06656972,"frequency":0.1}},{"time":0.76301587,"amplitude":0.10354430400000002,"emphasis":{"amplitude":0.12943038,"frequency":0.1}},{"time":0.79199547,"amplitude":0.05955086400000001,"emphasis":{"amplitude":0.07443858,"frequency":0.1}},{"time":0.79600906,"amplitude":0.12518084000000002,"emphasis":{"amplitude":0.15647605,"frequency":0.1}},{"time":0.82600904,"amplitude":0.06583722800000001,"emphasis":{"amplitude":0.082296535,"frequency":0.1}},{"time":0.8270068,"amplitude":0.131548432,"emphasis":{"amplitude":0.16443554,"frequency":0.1}},{"time":0.85999995,"amplitude":0.072070808,"emphasis":{"amplitude":0.09008851,"frequency":0.1}},{"time":0.86199546,"amplitude":0.12840500800000001,"emphasis":{"amplitude":0.16050626,"frequency":0.1}},{"time":0.8780045,"amplitude":0.12431600000000001,"emphasis":{"amplitude":0.155395,"frequency":0.1}},{"time":0.8940136,"amplitude":0.078454784,"emphasis":{"amplitude":0.09806848,"frequency":0.1}},{"time":0.89900225,"amplitude":0.16021892000000001,"emphasis":{"amplitude":0.20027365,"frequency":0.1}},{"time":0.91401356,"amplitude":0.106032016,"emphasis":{"amplitude":0.13254002,"frequency":0.1}},{"time":0.92501134,"amplitude":0.12893917600000002,"emphasis":{"amplitude":0.16117397,"frequency":0.1}},{"time":0.9550113,"amplitude":0.10027059199999999,"emphasis":{"amplitude":0.12533824,"frequency":0.1}},{"time":0.95900226,"amplitude":0.18561552,"emphasis":{"amplitude":0.2320194,"frequency":0.1}},{"time":0.99,"amplitude":0.114638136,"emphasis":{"amplitude":0.14329767,"frequency":0.1}},{"time":0.9929932,"amplitude":0.20894672000000003,"emphasis":{"amplitude":0.2611834,"frequency":0.1}},{"time":1.0009977,"amplitude":0.17385785600000003,"emphasis":{"amplitude":0.21732232,"frequency":0.1}},{"time":1.0019954,"amplitude":0.181554016,"emphasis":{"amplitude":0.22694252,"frequency":0.1}},{"time":1.1250113,"amplitude":0.139626264,"emphasis":{"amplitude":0.17453283,"frequency":0.1}},{"time":1.1630158,"amplitude":0.29101035199999997,"emphasis":{"amplitude":0.36376294,"frequency":0.1}},{"time":1.2940136,"amplitude":0.19869886400000003,"emphasis":{"amplitude":0.24837358,"frequency":0.1}},{"time":1.2980272,"amplitude":0.387104848,"emphasis":{"amplitude":0.48388106,"frequency":0.1}},{"time":1.3280271,"amplitude":0.200775816,"emphasis":{"amplitude":0.25096977,"frequency":0.1}},{"time":1.3310204,"amplitude":0.38755328000000006,"emphasis":{"amplitude":0.4844416,"frequency":0.1}},{"time":1.3620181,"amplitude":0.200017336,"emphasis":{"amplitude":0.25002167,"frequency":0.1}},{"time":1.3650113,"amplitude":0.390498992,"emphasis":{"amplitude":0.48812374,"frequency":0.1}},{"time":1.3950113,"amplitude":0.20716285600000003,"emphasis":{"amplitude":0.25895357,"frequency":0.1}},{"time":1.4000226,"amplitude":0.39993668000000004,"emphasis":{"amplitude":0.49992085,"frequency":0.1}},{"time":1.4290249,"amplitude":0.205498744,"emphasis":{"amplitude":0.25687343,"frequency":0.1}},{"time":1.4340136,"amplitude":0.43730496,"emphasis":{"amplitude":0.5466312,"frequency":0.1}},{"time":1.4620181,"amplitude":0.204456136,"emphasis":{"amplitude":0.25557017,"frequency":0.1}},{"time":1.4660317,"amplitude":0.41157684000000005,"emphasis":{"amplitude":0.51447105,"frequency":0.1}},{"time":1.4960318,"amplitude":0.19576504,"emphasis":{"amplitude":0.2447063,"frequency":0.1}},{"time":1.4990249,"amplitude":0.39875376,"emphasis":{"amplitude":0.4984422,"frequency":0.1}},{"time":1.529025,"amplitude":0.202848936,"emphasis":{"amplitude":0.25356117,"frequency":0.1}},{"time":1.5330158,"amplitude":0.41686768,"emphasis":{"amplitude":0.5210846,"frequency":0.1}},{"time":1.5630385,"amplitude":0.194079008,"emphasis":{"amplitude":0.24259876,"frequency":0.1}},{"time":1.5660317,"amplitude":0.4053208,"emphasis":{"amplitude":0.506651,"frequency":0.1}},{"time":1.5960317,"amplitude":0.212659576,"emphasis":{"amplitude":0.26582447,"frequency":0.1}},{"time":1.6000227,"amplitude":0.42865184000000006,"emphasis":{"amplitude":0.5358148,"frequency":0.1}},{"time":1.6290249,"amplitude":0.198726272,"emphasis":{"amplitude":0.24840784,"frequency":0.1}},{"time":1.6330385,"amplitude":0.38878336,"emphasis":{"amplitude":0.4859792,"frequency":0.1}},{"time":1.6630385,"amplitude":0.194913472,"emphasis":{"amplitude":0.24364184,"frequency":0.1}},{"time":1.6660317,"amplitude":0.40286392,"emphasis":{"amplitude":0.5035799,"frequency":0.1}},{"time":1.6960317,"amplitude":0.197897288,"emphasis":{"amplitude":0.24737161,"frequency":0.1}},{"time":1.7000453,"amplitude":0.43158464,"emphasis":{"amplitude":0.5394808,"frequency":0.1}},{"time":1.7290249,"amplitude":0.20601163200000003,"emphasis":{"amplitude":0.25751454,"frequency":0.1}},{"time":1.7330385,"amplitude":0.4126236,"emphasis":{"amplitude":0.5157795,"frequency":0.1}},{"time":1.7620407,"amplitude":0.21544956800000004,"emphasis":{"amplitude":0.26931196,"frequency":0.1}},{"time":1.7660317,"amplitude":0.44403208000000005,"emphasis":{"amplitude":0.5550401,"frequency":0.1}},{"time":1.7950339,"amplitude":0.22318084,"emphasis":{"amplitude":0.27897605,"frequency":0.1}},{"time":1.7990476,"amplitude":0.4317929280000001,"emphasis":{"amplitude":0.53974116,"frequency":0.1}},{"time":1.8290476,"amplitude":0.223794768,"emphasis":{"amplitude":0.27974346,"frequency":0.1}},{"time":1.8810431,"amplitude":0.34213496000000004,"emphasis":{"amplitude":0.4276687,"frequency":0.1}},{"time":1.9680499,"amplitude":0.195326016,"emphasis":{"amplitude":0.24415752,"frequency":0.1}},{"time":1.9690475,"amplitude":0.36849504,"emphasis":{"amplitude":0.4606188,"frequency":0.1}},{"time":2.0000453,"amplitude":0.218695024,"emphasis":{"amplitude":0.27336878,"frequency":0.1}},{"time":2.001043,"amplitude":0.21254828,"emphasis":{"amplitude":0.26568535,"frequency":0.1}},{"time":2.0020409,"amplitude":0.373942376,"emphasis":{"amplitude":0.46742797,"frequency":0.1}},{"time":2.0340362,"amplitude":0.19798484000000002,"emphasis":{"amplitude":0.24748105,"frequency":0.1}},{"time":2.0350566,"amplitude":0.38244972000000005,"emphasis":{"amplitude":0.47806215,"frequency":0.1}},{"time":2.0670521,"amplitude":0.194406768,"emphasis":{"amplitude":0.24300846,"frequency":0.1}},{"time":2.071043,"amplitude":0.39287774400000003,"emphasis":{"amplitude":0.49109718,"frequency":0.1}},{"time":2.1000452,"amplitude":0.19012576000000003,"emphasis":{"amplitude":0.2376572,"frequency":0.1}},{"time":2.1130385,"amplitude":0.33860080000000004,"emphasis":{"amplitude":0.423251,"frequency":0.1}},{"time":2.1330385,"amplitude":0.203692768,"emphasis":{"amplitude":0.25461596,"frequency":0.1}},{"time":2.135034,"amplitude":0.404766128,"emphasis":{"amplitude":0.50595766,"frequency":0.1}},{"time":2.1660316,"amplitude":0.19811818400000003,"emphasis":{"amplitude":0.24764773,"frequency":0.1}},{"time":2.2100227,"amplitude":0.32629778400000004,"emphasis":{"amplitude":0.40787223,"frequency":0.1}},{"time":2.2730386,"amplitude":0.19307738400000002,"emphasis":{"amplitude":0.24134673,"frequency":0.1}},{"time":2.3090248,"amplitude":0.32440848,"emphasis":{"amplitude":0.4055106,"frequency":0.1}},{"time":2.3390248,"amplitude":0.16937251200000003,"emphasis":{"amplitude":0.21171564,"frequency":0.1}},{"time":2.3420181,"amplitude":0.33548891200000003,"emphasis":{"amplitude":0.41936114,"frequency":0.1}},{"time":2.372018,"amplitude":0.165924536,"emphasis":{"amplitude":0.20740567,"frequency":0.1}},{"time":2.3750112,"amplitude":0.33218548000000003,"emphasis":{"amplitude":0.41523185,"frequency":0.1}},{"time":2.4050112,"amplitude":0.16576468,"emphasis":{"amplitude":0.20720585,"frequency":0.1}},{"time":2.4410203,"amplitude":0.32371016,"emphasis":{"amplitude":0.4046377,"frequency":0.1}},{"time":2.469025,"amplitude":0.184391216,"emphasis":{"amplitude":0.23048902,"frequency":0.1}},{"time":2.5140135,"amplitude":0.274161216,"emphasis":{"amplitude":0.34270152,"frequency":0.1}},{"time":2.5440135,"amplitude":0.149576112,"emphasis":{"amplitude":0.18697014,"frequency":0.1}},{"time":2.5470068,"amplitude":0.28858928,"emphasis":{"amplitude":0.3607366,"frequency":0.1}},{"time":2.61,"amplitude":0.161075816,"emphasis":{"amplitude":0.20134477,"frequency":0.1}},{"time":2.6129932,"amplitude":0.276234176,"emphasis":{"amplitude":0.34529272,"frequency":0.1}},{"time":2.6429932,"amplitude":0.155273936,"emphasis":{"amplitude":0.19409242,"frequency":0.1}},{"time":2.6470068,"amplitude":0.32049944,"emphasis":{"amplitude":0.4006243,"frequency":0.1}},{"time":2.676009,"amplitude":0.163703216,"emphasis":{"amplitude":0.20462902,"frequency":0.1}},{"time":2.68,"amplitude":0.29915416,"emphasis":{"amplitude":0.3739427,"frequency":0.1}},{"time":2.71,"amplitude":0.161321296,"emphasis":{"amplitude":0.20165162,"frequency":0.1}},{"time":2.7149887,"amplitude":0.28227944,"emphasis":{"amplitude":0.3528493,"frequency":0.1}},{"time":2.742993,"amplitude":0.153574336,"emphasis":{"amplitude":0.19196792,"frequency":0.1}},{"time":2.746984,"amplitude":0.3231442,"emphasis":{"amplitude":0.40393025,"frequency":0.1}},{"time":2.7759864,"amplitude":0.16637221600000002,"emphasis":{"amplitude":0.20796527,"frequency":0.1}},{"time":2.78,"amplitude":0.30695960000000005,"emphasis":{"amplitude":0.3836995,"frequency":0.1}},{"time":2.81,"amplitude":0.160333728,"emphasis":{"amplitude":0.20041716,"frequency":0.1}},{"time":2.8509977,"amplitude":0.241401144,"emphasis":{"amplitude":0.30175143,"frequency":0.1}},{"time":2.8829932,"amplitude":0.13804801600000002,"emphasis":{"amplitude":0.17256002,"frequency":0.1}},{"time":3.000975,"amplitude":0.22875511999999998,"emphasis":{"amplitude":0.2859439,"frequency":0.1}},{"time":3.0019727,"amplitude":0.22223244000000003,"emphasis":{"amplitude":0.27779055,"frequency":0.1}},{"time":3.0519726,"amplitude":0.142047688,"emphasis":{"amplitude":0.17755961,"frequency":0.1}},{"time":3.054966,"amplitude":0.24875184,"emphasis":{"amplitude":0.3109398,"frequency":0.1}},{"time":3.084966,"amplitude":0.144845928,"emphasis":{"amplitude":0.18105741,"frequency":0.1}},{"time":3.0899773,"amplitude":0.2588768,"emphasis":{"amplitude":0.323596,"frequency":0.1}},{"time":3.1189568,"amplitude":0.16507491200000002,"emphasis":{"amplitude":0.20634364,"frequency":0.1}},{"time":3.120975,"amplitude":0.27103340800000003,"emphasis":{"amplitude":0.33879176,"frequency":0.1}},{"time":3.1529706,"amplitude":0.128203728,"emphasis":{"amplitude":0.16025466,"frequency":0.1}},{"time":3.1909523,"amplitude":0.25259802400000003,"emphasis":{"amplitude":0.31574753,"frequency":0.1}},{"time":3.254966,"amplitude":0.141246568,"emphasis":{"amplitude":0.17655821,"frequency":0.1}},{"time":3.2569613,"amplitude":0.235259984,"emphasis":{"amplitude":0.29407498,"frequency":0.1}},{"time":3.2899547,"amplitude":0.142115976,"emphasis":{"amplitude":0.17764497,"frequency":0.1}},{"time":3.2909522,"amplitude":0.23572862400000003,"emphasis":{"amplitude":0.29466078,"frequency":0.1}},{"time":3.3239455,"amplitude":0.136569872,"emphasis":{"amplitude":0.17071234,"frequency":0.1}},{"time":3.3369615,"amplitude":0.23143880000000003,"emphasis":{"amplitude":0.2892985,"frequency":0.1}},{"time":3.357959,"amplitude":0.13301488,"emphasis":{"amplitude":0.1662686,"frequency":0.1}},{"time":3.3709524,"amplitude":0.250620296,"emphasis":{"amplitude":0.31327537,"frequency":0.1}},{"time":3.4279366,"amplitude":0.126696288,"emphasis":{"amplitude":0.15837036,"frequency":0.1}},{"time":3.43195,"amplitude":0.214185216,"emphasis":{"amplitude":0.26773152,"frequency":0.1}},{"time":3.46195,"amplitude":0.131199344,"emphasis":{"amplitude":0.16399918,"frequency":0.1}},{"time":3.515941,"amplitude":0.18585568800000002,"emphasis":{"amplitude":0.23231961,"frequency":0.1}},{"time":3.5319273,"amplitude":0.11876467200000002,"emphasis":{"amplitude":0.14845584,"frequency":0.1}},{"time":3.569932,"amplitude":0.227605296,"emphasis":{"amplitude":0.28450662,"frequency":0.1}},{"time":3.6019273,"amplitude":0.116128624,"emphasis":{"amplitude":0.14516078,"frequency":0.1}},{"time":3.6049433,"amplitude":0.227964928,"emphasis":{"amplitude":0.28495616,"frequency":0.1}},{"time":3.6569388,"amplitude":0.12581825600000002,"emphasis":{"amplitude":0.15727282,"frequency":0.1}},{"time":3.668934,"amplitude":0.25782964,"emphasis":{"amplitude":0.32228705,"frequency":0.1}},{"time":3.698934,"amplitude":0.140724656,"emphasis":{"amplitude":0.17590582,"frequency":0.1}},{"time":3.7039227,"amplitude":0.23223976000000002,"emphasis":{"amplitude":0.2902997,"frequency":0.1}},{"time":3.7339227,"amplitude":0.130227912,"emphasis":{"amplitude":0.16278489,"frequency":0.1}},{"time":3.7379138,"amplitude":0.238135168,"emphasis":{"amplitude":0.29766896,"frequency":0.1}},{"time":3.7629251,"amplitude":0.135506496,"emphasis":{"amplitude":0.16938312,"frequency":0.1}},{"time":3.7729251,"amplitude":0.220091776,"emphasis":{"amplitude":0.27511472,"frequency":0.1}},{"time":3.803923,"amplitude":0.11934700000000001,"emphasis":{"amplitude":0.14918375,"frequency":0.1}},{"time":3.8049207,"amplitude":0.212585664,"emphasis":{"amplitude":0.26573208,"frequency":0.1}},{"time":3.8399093,"amplitude":0.198391904,"emphasis":{"amplitude":0.24798988,"frequency":0.1}},{"time":3.900907,"amplitude":0.12300225600000002,"emphasis":{"amplitude":0.15375282,"frequency":0.1}},{"time":3.9049206,"amplitude":0.22849579200000003,"emphasis":{"amplitude":0.28561974,"frequency":0.1}},{"time":3.970907,"amplitude":0.122688648,"emphasis":{"amplitude":0.15336081,"frequency":0.1}},{"time":4.000907,"amplitude":0.128799152,"emphasis":{"amplitude":0.16099894,"frequency":0.1}},{"time":4.0019045,"amplitude":0.124656032,"emphasis":{"amplitude":0.15582004,"frequency":0.1}},{"time":4.006893,"amplitude":0.20631949600000002,"emphasis":{"amplitude":0.25789937,"frequency":0.1}},{"time":4.040907,"amplitude":0.112685968,"emphasis":{"amplitude":0.14085746,"frequency":0.1}},{"time":4.0419044,"amplitude":0.180670392,"emphasis":{"amplitude":0.22583799,"frequency":0.1}},{"time":4.052902,"amplitude":0.179757464,"emphasis":{"amplitude":0.22469683,"frequency":0.1}},{"time":4.074898,"amplitude":0.10398548000000002,"emphasis":{"amplitude":0.12998185,"frequency":0.1}},{"time":4.0768933,"amplitude":0.169795144,"emphasis":{"amplitude":0.21224393,"frequency":0.1}},{"time":4.0868936,"amplitude":0.129215872,"emphasis":{"amplitude":0.16151984,"frequency":0.1}},{"time":4.1319046,"amplitude":0.092003572,"emphasis":{"amplitude":0.115004465,"frequency":0.1}},{"time":4.138889,"amplitude":0.16811492800000002,"emphasis":{"amplitude":0.21014366,"frequency":0.1}},{"time":4.150884,"amplitude":0.17449973600000002,"emphasis":{"amplitude":0.21812467,"frequency":0.1}},{"time":4.1729026,"amplitude":0.094186304,"emphasis":{"amplitude":0.11773288,"frequency":0.1}},{"time":4.1739,"amplitude":0.161205544,"emphasis":{"amplitude":0.20150693,"frequency":0.1}},{"time":4.187891,"amplitude":0.160851672,"emphasis":{"amplitude":0.20106459,"frequency":0.1}},{"time":4.207891,"amplitude":0.0912098288,"emphasis":{"amplitude":0.114012286,"frequency":0.1}},{"time":4.219887,"amplitude":0.135377256,"emphasis":{"amplitude":0.16922157,"frequency":0.1}},{"time":4.241882,"amplitude":0.07735895520000001,"emphasis":{"amplitude":0.096698694,"frequency":0.1}},{"time":4.2438774,"amplitude":0.12684394400000001,"emphasis":{"amplitude":0.15855493,"frequency":0.1}},{"time":4.274875,"amplitude":0.080063088,"emphasis":{"amplitude":0.10007886,"frequency":0.1}},{"time":4.277891,"amplitude":0.10733785600000001,"emphasis":{"amplitude":0.13417232,"frequency":0.1}},{"time":4.311882,"amplitude":0.07777885200000001,"emphasis":{"amplitude":0.097223565,"frequency":0.1}},{"time":4.3138776,"amplitude":0.10904936000000001,"emphasis":{"amplitude":0.1363117,"frequency":0.1}},{"time":4.3678684,"amplitude":0.0568139552,"emphasis":{"amplitude":0.071017444,"frequency":0.1}},{"time":4.378866,"amplitude":0.111435256,"emphasis":{"amplitude":0.13929407,"frequency":0.1}},{"time":4.409864,"amplitude":0.05445975680000001,"emphasis":{"amplitude":0.068074696,"frequency":0.1}},{"time":4.4108844,"amplitude":0.096629528,"emphasis":{"amplitude":0.12078691,"frequency":0.1}},{"time":4.4438777,"amplitude":0.058864092800000004,"emphasis":{"amplitude":0.073580116,"frequency":0.1}},{"time":4.445873,"amplitude":0.088910336,"emphasis":{"amplitude":0.11113792,"frequency":0.1}},{"time":4.478866,"amplitude":0.049544861600000004,"emphasis":{"amplitude":0.061931077,"frequency":0.1}},{"time":4.5138774,"amplitude":0.0470773872,"emphasis":{"amplitude":0.058846734,"frequency":0.1}},{"time":4.5318594,"amplitude":0.066481624,"emphasis":{"amplitude":0.08310203,"frequency":0.1}},{"time":4.6048527,"amplitude":0.028567768,"emphasis":{"amplitude":0.03570971,"frequency":0.1}},{"time":4.612857,"amplitude":0.06890724320000001,"emphasis":{"amplitude":0.086134054,"frequency":0.1}},{"time":4.639864,"amplitude":0.0329486936,"emphasis":{"amplitude":0.041185867,"frequency":0.1}},{"time":4.6478457,"amplitude":0.05862892,"emphasis":{"amplitude":0.07328615,"frequency":0.1}},{"time":4.6788435,"amplitude":0.026299059200000002,"emphasis":{"amplitude":0.032873824,"frequency":0.1}},{"time":4.7818365,"amplitude":0.035274723200000004,"emphasis":{"amplitude":0.044093404,"frequency":0.1}},{"time":4.8418365,"amplitude":0.0162957088,"emphasis":{"amplitude":0.020369636,"frequency":0.1}},{"time":4.920839,"amplitude":0.025322163199999997,"emphasis":{"amplitude":0.031652704,"frequency":0.1}},{"time":5.0008388,"amplitude":0.011529526},{"time":5.001837,"amplitude":0.011433038},{"time":5.013832,"amplitude":0.011711534},{"time":5.017823,"amplitude":0.01645418},{"time":5.0518365,"amplitude":0.009367528},{"time":5.0528345,"amplitude":0.0151498355},{"time":5.0858274,"amplitude":0.0074380278},{"time":5.087823,"amplitude":0.019156849},{"time":5.1098185,"amplitude":0.010227665},{"time":5.122812,"amplitude":0.01530656},{"time":5.1418138,"amplitude":0.009408684},{"time":5.1558275,"amplitude":0.011069287},{"time":5.157823,"amplitude":0.018231027},{"time":5.1738095,"amplitude":0.010830508},{"time":5.1908164,"amplitude":0.008017318},{"time":5.1938095,"amplitude":0.015026139},{"time":5.2248073,"amplitude":0.006532842},{"time":5.2338095,"amplitude":0.009844252},{"time":5.2508163,"amplitude":0.0056472616},{"time":5.264807,"amplitude":0.00740385},{"time":5.266803,"amplitude":0.013555994},{"time":5.2998185,"amplitude":0.006639721},{"time":5.304807,"amplitude":0.012400813},{"time":5.3228116,"amplitude":0.0066000023},{"time":5.324807,"amplitude":0.013703267},{"time":5.3578005,"amplitude":0.007203397},{"time":5.359796,"amplitude":0.009978292},{"time":5.381814,"amplitude":0.005940698},{"time":5.3938093,"amplitude":0.012676946},{"time":5.4268026,"amplitude":0.005955335},{"time":5.432789,"amplitude":0.012828279},{"time":5.4507937,"amplitude":0.0075839227},{"time":5.4917912,"amplitude":0.007433558},{"time":5.5378003,"amplitude":0.0039625634},{"time":5.57678,"amplitude":0.0036105877},{"time":5.5787983,"amplitude":0.007888352},{"time":5.611791,"amplitude":0.0034513515},{"time":5.622789,"amplitude":0.0076444726},{"time":5.64678,"amplitude":0.0040567475},{"time":5.66678,"amplitude":0.0076597915},{"time":5.7077775,"amplitude":0.0041290894},{"time":5.708322,"amplitude":0.0041290894},{"time":5.708322,"amplitude":0.0041290894}],"frequency":[{"time":0,"frequency":0},{"time":0.113202275,"frequency":0},{"time":0.18285714,"frequency":0.22622365},{"time":0.2060771,"frequency":0.39650247},{"time":0.22639456,"frequency":0.21078648},{"time":0.27283448,"frequency":0.41838348},{"time":0.29895693,"frequency":0.21059413},{"time":0.3512018,"frequency":0.19999139},{"time":0.37442178,"frequency":0.39740086},{"time":0.39764172,"frequency":0.18390872},{"time":0.48761904,"frequency":0.19174752},{"time":0.510839,"frequency":0.39023107},{"time":0.52244896,"frequency":0.18767457},{"time":0.55727893,"frequency":0.19818707},{"time":0.63854873,"frequency":0.18042544},{"time":0.64725626,"frequency":0.37032264},{"time":0.69369614,"frequency":0.180601},{"time":0.7169161,"frequency":0.37178525},{"time":0.7604535,"frequency":0.18005198},{"time":0.78367347,"frequency":0.35932288},{"time":0.8097959,"frequency":0.1816939},{"time":0.88816327,"frequency":0.3448312},{"time":0.9084807,"frequency":0.20446618},{"time":0.9810431,"frequency":0.36619112},{"time":0.9984581,"frequency":0.24091183},{"time":1.0013604,"frequency":0.20080964},{"time":1.0507029,"frequency":0.3581597},{"time":1.0594103,"frequency":0.16846147},{"time":1.1174603,"frequency":0.36424714},{"time":1.1958276,"frequency":0.18004657},{"time":1.2190475,"frequency":0.3877337},{"time":1.24517,"frequency":0.19798145},{"time":1.2858049,"frequency":0.38030294},{"time":1.2974149,"frequency":0.18286608},{"time":1.4309297,"frequency":0.18499798},{"time":1.4541496,"frequency":0.3933065},{"time":1.4657595,"frequency":0.16467427},{"time":1.4889795,"frequency":0.38523886},{"time":1.532517,"frequency":0.17005165},{"time":1.5557369,"frequency":0.4013134},{"time":1.5644443,"frequency":0.14491433},{"time":1.5876644,"frequency":0.37620157},{"time":1.5992743,"frequency":0.15387225},{"time":1.6224942,"frequency":0.396997},{"time":1.6312017,"frequency":0.14879973},{"time":1.7095691,"frequency":0.15429164},{"time":1.7531065,"frequency":0.35538316},{"time":1.7647165,"frequency":0.15050675},{"time":1.7879364,"frequency":0.39156845},{"time":1.8198639,"frequency":0.37799725},{"time":1.8459864,"frequency":0.085872},{"time":1.8575963,"frequency":0.27158916},{"time":1.9330611,"frequency":0.20222963},{"time":1.9591836,"frequency":0.36755103},{"time":1.9998186,"frequency":0.19758846},{"time":2.002721,"frequency":0.15338992},{"time":2.025941,"frequency":0.3963564},{"time":2.037551,"frequency":0.1557864},{"time":2.0694783,"frequency":0.16715464},{"time":2.1362357,"frequency":0.15984705},{"time":2.1594558,"frequency":0.3585167},{"time":2.173968,"frequency":0.16084436},{"time":2.1971881,"frequency":0.31720117},{"time":2.220408,"frequency":0.17005281},{"time":2.2639456,"frequency":0.34518322},{"time":2.2726529,"frequency":0.19143824},{"time":2.3423128,"frequency":0.16100274},{"time":2.3655329,"frequency":0.34759745},{"time":2.3858502,"frequency":0.17468528},{"time":2.43229,"frequency":0.34076244},{"time":2.4409976,"frequency":0.14346112},{"time":2.51356,"frequency":0.18040693},{"time":2.5367799,"frequency":0.39516348},{"time":2.5454874,"frequency":0.18034895},{"time":2.5687075,"frequency":0.3705618},{"time":2.5803173,"frequency":0.17341831},{"time":2.7138321,"frequency":0.17310227},{"time":2.737052,"frequency":0.35482785},{"time":2.7805896,"frequency":0.17354222},{"time":2.8038094,"frequency":0.35102183},{"time":2.8850791,"frequency":0.16855572},{"time":2.9082992,"frequency":0.3797063},{"time":2.9344218,"frequency":0.17875844},{"time":2.943129,"frequency":0.40558967},{"time":2.9982765,"frequency":0.20081238},{"time":3.001179,"frequency":0.20326693},{"time":3.0447164,"frequency":0.36247933},{"time":3.053424,"frequency":0.19216976},{"time":3.076644,"frequency":0.37555823},{"time":3.088254,"frequency":0.1866022},{"time":3.1114738,"frequency":0.44660938},{"time":3.1230838,"frequency":0.22717963},{"time":3.1898413,"frequency":0.19810002},{"time":3.213061,"frequency":0.3544301},{"time":3.271111,"frequency":0.18962337},{"time":3.282721,"frequency":0.33243373},{"time":3.3262584,"frequency":0.20821808},{"time":3.3843083,"frequency":0.4084741},{"time":3.3959184,"frequency":0.2309274},{"time":3.500408,"frequency":0.21160384},{"time":3.5613604,"frequency":0.3673005},{"time":3.581678,"frequency":0.19692877},{"time":3.5961905,"frequency":0.3842342},{"time":3.7006803,"frequency":0.19788831},{"time":3.7268026,"frequency":0.37080872},{"time":3.77034,"frequency":0.208312},{"time":3.7964625,"frequency":0.36432853},{"time":3.85161,"frequency":0.20552167},{"time":3.8951473,"frequency":0.3532406},{"time":3.9038548,"frequency":0.19354312},{"time":3.9270747,"frequency":0.41215867},{"time":3.9386847,"frequency":0.19629318},{"time":3.9619045,"frequency":0.37461972},{"time":3.9735146,"frequency":0.18844627},{"time":3.9996371,"frequency":0.3427032},{"time":4.0025396,"frequency":0.28158292},{"time":4.0199547,"frequency":0.18918689},{"time":4.069297,"frequency":0.30075586},{"time":4.1070294,"frequency":0.19837163},{"time":4.127347,"frequency":0.36938483},{"time":4.138957,"frequency":0.18348269},{"time":4.1621766,"frequency":0.3625571},{"time":4.176689,"frequency":0.19419843},{"time":4.1970067,"frequency":0.3792597},{"time":4.2115192,"frequency":0.19519545},{"time":4.231837,"frequency":0.32179287},{"time":4.292789,"frequency":0.18415573},{"time":4.4001813,"frequency":0.35559872},{"time":4.4117913,"frequency":0.17204292},{"time":4.437914,"frequency":0.31560314},{"time":4.498866,"frequency":0.18242417},{"time":4.6062584,"frequency":0.24229258},{"time":4.6352835,"frequency":0.32508445},{"time":4.649796,"frequency":0.14123948},{"time":4.6730156,"frequency":0.38547522},{"time":4.6846256,"frequency":0.18692671},{"time":4.7310658,"frequency":0.18610124},{"time":4.757188,"frequency":0.30325302},{"time":4.768798,"frequency":0.15195872},{"time":4.792018,"frequency":0.3576215},{"time":4.815238,"frequency":0.12196466},{"time":4.8790927,"frequency":0.22006987},{"time":4.919728,"frequency":0.15802215},{"time":4.9400454,"frequency":0.26835966},{"time":4.998095,"frequency":0.1781907},{"time":5.0009975,"frequency":0.16132687},{"time":5.0242176,"frequency":0.22251692},{"time":5.090975,"frequency":0.1511383},{"time":5.09678,"frequency":0.27968833},{"time":5.1112924,"frequency":0.13920167},{"time":5.13161,"frequency":0.26528054},{"time":5.149025,"frequency":0.122711174},{"time":5.1664395,"frequency":0.2818501},{"time":5.180952,"frequency":0.1588372},{"time":5.215782,"frequency":0.3170642},{"time":5.2244897,"frequency":0.15674911},{"time":5.2448072,"frequency":0.26184952},{"time":5.265125,"frequency":0.11536969},{"time":5.2767344,"frequency":0.22521138},{"time":5.302857,"frequency":0.11440291},{"time":5.3580046,"frequency":0.13048023},{"time":5.366712,"frequency":0.23341563},{"time":5.3841267,"frequency":0.1097143},{"time":5.4131517,"frequency":0.19254938},{"time":5.4276643,"frequency":0.08212977},{"time":5.4508843,"frequency":0.17915244},{"time":5.4886165,"frequency":0.13838388},{"time":5.5118365,"frequency":0.26884398},{"time":5.5234466,"frequency":0.16026558},{"time":5.5640817,"frequency":0.22886907},{"time":5.5873013,"frequency":0.11390679},{"time":5.6047163,"frequency":0.2526812},{"time":5.6221313,"frequency":0.07880619},{"time":5.642449,"frequency":0.17270468},{"time":5.6946936,"frequency":0.08213057}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.haptic.meta new file mode 100644 index 0000000..d21d8ba --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 699c16359745b45799bcd0733bf9d138 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.wav b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.wav new file mode 100644 index 0000000..567de39 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.wav.meta new file mode 100644 index 0000000..97ff32a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 72c274521f3154cc4b3c1db9ca2deb64 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.haptic new file mode 100644 index 0000000..27e8dd5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.haptic @@ -0,0 +1,4425 @@ +{ + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "metadata": { + "author": "andrew@lofelt.com", + "editor": "Lofelt Studio", + "source": "Car Engine 2.wav", + "project": "Car Engine 2", + "tags": [], + "description": "" + }, + "signals": { + "continuous": { + "envelopes": { + "amplitude": [ + { + "time": 0, + "amplitude": 0.00818711 + }, + { + "time": 0.0010204081, + "amplitude": 0.00818711 + }, + { + "time": 0.010022676, + "amplitude": 0.10010424 + }, + { + "time": 0.04600907, + "amplitude": 0.07509731 + }, + { + "time": 0.05201814, + "amplitude": 0.16507311 + }, + { + "time": 0.083015874, + "amplitude": 0.13064833 + }, + { + "time": 0.099002264, + "amplitude": 0.24778208 + }, + { + "time": 0.13401361, + "amplitude": 0.13316181 + }, + { + "time": 0.15102041, + "amplitude": 0.4511656 + }, + { + "time": 0.16600907, + "amplitude": 0.3253656 + }, + { + "time": 0.1710204, + "amplitude": 0.45507663 + }, + { + "time": 0.18600906, + "amplitude": 0.35154164 + }, + { + "time": 0.19301587, + "amplitude": 0.593371 + }, + { + "time": 0.21201813, + "amplitude": 0.3674968 + }, + { + "time": 0.21600907, + "amplitude": 0.5381936 + }, + { + "time": 0.23501134, + "amplitude": 0.35683367 + }, + { + "time": 0.2410204, + "amplitude": 0.54255575 + }, + { + "time": 0.27201813, + "amplitude": 0.24989532 + }, + { + "time": 0.31501132, + "amplitude": 0.18399188 + }, + { + "time": 0.35600907, + "amplitude": 0.07934618 + }, + { + "time": 0.4540136, + "amplitude": 0.051701516 + }, + { + "time": 0.47201812, + "amplitude": 0.10336332 + }, + { + "time": 0.54600906, + "amplitude": 0.03975813 + }, + { + "time": 0.55501133, + "amplitude": 0.08002275 + }, + { + "time": 0.59999996, + "amplitude": 0.040432062 + }, + { + "time": 0.60501134, + "amplitude": 0.1129041 + }, + { + "time": 0.64, + "amplitude": 0.10403936 + }, + { + "time": 0.6460091, + "amplitude": 0.21064311 + }, + { + "time": 0.6909977, + "amplitude": 0.07616372 + }, + { + "time": 0.7270068, + "amplitude": 0.18118808 + }, + { + "time": 0.7670068, + "amplitude": 0.094316885 + }, + { + "time": 0.81, + "amplitude": 0.12075597 + }, + { + "time": 0.8309977, + "amplitude": 0.07290339 + }, + { + "time": 0.85501134, + "amplitude": 0.17243445 + }, + { + "time": 0.89800453, + "amplitude": 0.15499096 + }, + { + "time": 0.89900225, + "amplitude": 0.260990384, + "emphasis": { + "amplitude": 0.32623798, + "frequency": 0.1 + } + }, + { + "time": 0.9240136, + "amplitude": 0.22650267999999998, + "emphasis": { + "amplitude": 0.28312835, + "frequency": 0.1 + } + }, + { + "time": 0.95199543, + "amplitude": 0.12792236 + }, + { + "time": 0.9650113, + "amplitude": 0.28525638400000003, + "emphasis": { + "amplitude": 0.35657048, + "frequency": 0.1 + } + }, + { + "time": 0.9929932, + "amplitude": 0.21295795 + }, + { + "time": 1.0009977, + "amplitude": 0.24635069600000004, + "emphasis": { + "amplitude": 0.30793837, + "frequency": 0.1 + } + }, + { + "time": 1.0019954, + "amplitude": 0.24351067199999998, + "emphasis": { + "amplitude": 0.30438834, + "frequency": 0.1 + } + }, + { + "time": 1.0219954, + "amplitude": 0.17899358 + }, + { + "time": 1.04, + "amplitude": 0.29145756, + "emphasis": { + "amplitude": 0.36432195, + "frequency": 0.1 + } + }, + { + "time": 1.0630158, + "amplitude": 0.18383592 + }, + { + "time": 1.0919955, + "amplitude": 0.341510128, + "emphasis": { + "amplitude": 0.42688766, + "frequency": 0.1 + } + }, + { + "time": 1.1409978, + "amplitude": 0.2010176 + }, + { + "time": 1.1580045, + "amplitude": 0.318021392, + "emphasis": { + "amplitude": 0.39752674, + "frequency": 0.1 + } + }, + { + "time": 1.1810204, + "amplitude": 0.20608346 + }, + { + "time": 1.2120181, + "amplitude": 0.32938384, + "emphasis": { + "amplitude": 0.4117298, + "frequency": 0.1 + } + }, + { + "time": 1.259025, + "amplitude": 0.19762588 + }, + { + "time": 1.2770067, + "amplitude": 0.316911696, + "emphasis": { + "amplitude": 0.39613962, + "frequency": 0.1 + } + }, + { + "time": 1.3090249, + "amplitude": 0.16066304 + }, + { + "time": 1.3290249, + "amplitude": 0.36233630400000005, + "emphasis": { + "amplitude": 0.45292038, + "frequency": 0.1 + } + }, + { + "time": 1.3770294, + "amplitude": 0.20460713 + }, + { + "time": 1.3950113, + "amplitude": 0.320531824, + "emphasis": { + "amplitude": 0.40066478, + "frequency": 0.1 + } + }, + { + "time": 1.4280272, + "amplitude": 0.16384928 + }, + { + "time": 1.4580272, + "amplitude": 0.37583172000000004, + "emphasis": { + "amplitude": 0.46978965, + "frequency": 0.1 + } + }, + { + "time": 1.4930159, + "amplitude": 0.18749931 + }, + { + "time": 1.5060318, + "amplitude": 0.327573416, + "emphasis": { + "amplitude": 0.40946677, + "frequency": 0.1 + } + }, + { + "time": 1.535034, + "amplitude": 0.19598886 + }, + { + "time": 1.555034, + "amplitude": 0.209897712, + "emphasis": { + "amplitude": 0.26237214, + "frequency": 0.1 + } + }, + { + "time": 1.5740362, + "amplitude": 0.42103120000000005, + "emphasis": { + "amplitude": 0.526289, + "frequency": 0.1 + } + }, + { + "time": 1.6090249, + "amplitude": 0.20199032 + }, + { + "time": 1.6160318, + "amplitude": 0.33623926400000004, + "emphasis": { + "amplitude": 0.42029908, + "frequency": 0.1 + } + }, + { + "time": 1.651043, + "amplitude": 0.1984016 + }, + { + "time": 1.671043, + "amplitude": 0.24138337 + }, + { + "time": 1.6900454, + "amplitude": 0.4084632, + "emphasis": { + "amplitude": 0.510579, + "frequency": 0.1 + } + }, + { + "time": 1.7240362, + "amplitude": 0.20188096 + }, + { + "time": 1.7430385, + "amplitude": 0.349077104, + "emphasis": { + "amplitude": 0.43634638, + "frequency": 0.1 + } + }, + { + "time": 1.7660317, + "amplitude": 0.21023393 + }, + { + "time": 1.7870295, + "amplitude": 0.22483670400000003, + "emphasis": { + "amplitude": 0.28104588, + "frequency": 0.1 + } + }, + { + "time": 1.7930385, + "amplitude": 0.392369344, + "emphasis": { + "amplitude": 0.49046168, + "frequency": 0.1 + } + }, + { + "time": 1.8400453, + "amplitude": 0.20593506 + }, + { + "time": 1.8570521, + "amplitude": 0.33317861600000004, + "emphasis": { + "amplitude": 0.41647327, + "frequency": 0.1 + } + }, + { + "time": 1.8820407, + "amplitude": 0.20396268 + }, + { + "time": 1.9020408, + "amplitude": 0.2496742 + }, + { + "time": 1.9220408, + "amplitude": 0.369865416, + "emphasis": { + "amplitude": 0.46233177, + "frequency": 0.1 + } + }, + { + "time": 1.9550567, + "amplitude": 0.19498661 + }, + { + "time": 1.9730386, + "amplitude": 0.34790788, + "emphasis": { + "amplitude": 0.43488485, + "frequency": 0.1 + } + }, + { + "time": 2.0000453, + "amplitude": 0.22369172800000003, + "emphasis": { + "amplitude": 0.27961466, + "frequency": 0.1 + } + }, + { + "time": 2.001043, + "amplitude": 0.21469152000000002, + "emphasis": { + "amplitude": 0.2683644, + "frequency": 0.1 + } + }, + { + "time": 2.0370522, + "amplitude": 0.36960544, + "emphasis": { + "amplitude": 0.4620068, + "frequency": 0.1 + } + }, + { + "time": 2.0690477, + "amplitude": 0.19067134 + }, + { + "time": 2.08805, + "amplitude": 0.337763568, + "emphasis": { + "amplitude": 0.42220446, + "frequency": 0.1 + } + }, + { + "time": 2.121043, + "amplitude": 0.2384815 + }, + { + "time": 2.1370294, + "amplitude": 0.4575888800000001, + "emphasis": { + "amplitude": 0.5719861, + "frequency": 0.1 + } + }, + { + "time": 2.161043, + "amplitude": 0.28018941599999997, + "emphasis": { + "amplitude": 0.35023677, + "frequency": 0.1 + } + }, + { + "time": 2.1940362, + "amplitude": 0.22927944, + "emphasis": { + "amplitude": 0.2865993, + "frequency": 0.1 + } + }, + { + "time": 2.2000453, + "amplitude": 0.39975288000000003, + "emphasis": { + "amplitude": 0.4996911, + "frequency": 0.1 + } + }, + { + "time": 2.2340362, + "amplitude": 0.22044775 + }, + { + "time": 2.2500226, + "amplitude": 0.41151461600000006, + "emphasis": { + "amplitude": 0.51439327, + "frequency": 0.1 + } + }, + { + "time": 2.295034, + "amplitude": 0.2422374 + }, + { + "time": 2.313016, + "amplitude": 0.381281232, + "emphasis": { + "amplitude": 0.47660154, + "frequency": 0.1 + } + }, + { + "time": 2.3370295, + "amplitude": 0.23615858 + }, + { + "time": 2.363016, + "amplitude": 0.39322352000000005, + "emphasis": { + "amplitude": 0.4915294, + "frequency": 0.1 + } + }, + { + "time": 2.4080272, + "amplitude": 0.22022784 + }, + { + "time": 2.426009, + "amplitude": 0.359030296, + "emphasis": { + "amplitude": 0.44878787, + "frequency": 0.1 + } + }, + { + "time": 2.4500227, + "amplitude": 0.22830582 + }, + { + "time": 2.4760091, + "amplitude": 0.40433184000000005, + "emphasis": { + "amplitude": 0.5054148, + "frequency": 0.1 + } + }, + { + "time": 2.526009, + "amplitude": 0.1977596 + }, + { + "time": 2.54, + "amplitude": 0.32542868, + "emphasis": { + "amplitude": 0.40678585, + "frequency": 0.1 + } + }, + { + "time": 2.5590022, + "amplitude": 0.22890735 + }, + { + "time": 2.5909977, + "amplitude": 0.345398136, + "emphasis": { + "amplitude": 0.43174767, + "frequency": 0.1 + } + }, + { + "time": 2.6119955, + "amplitude": 0.21881983 + }, + { + "time": 2.6509976, + "amplitude": 0.1548234 + }, + { + "time": 2.6619954, + "amplitude": 0.3442909 + }, + { + "time": 2.6919954, + "amplitude": 0.19082732 + }, + { + "time": 2.7090023, + "amplitude": 0.44391596 + }, + { + "time": 2.7319953, + "amplitude": 0.5390397 + }, + { + "time": 2.7559865, + "amplitude": 0.36747772 + }, + { + "time": 2.756984, + "amplitude": 0.62830937 + }, + { + "time": 2.772993, + "amplitude": 0.44271484 + }, + { + "time": 2.7749887, + "amplitude": 0.70555633 + }, + { + "time": 2.8059864, + "amplitude": 0.3500834 + }, + { + "time": 2.8079817, + "amplitude": 0.54783565 + }, + { + "time": 2.8359864, + "amplitude": 0.5053749 + }, + { + "time": 2.8669841, + "amplitude": 0.2317487 + }, + { + "time": 2.9449885, + "amplitude": 0.11047569 + }, + { + "time": 2.9579818, + "amplitude": 0.26664224 + }, + { + "time": 3.000975, + "amplitude": 0.20980224 + }, + { + "time": 3.0019727, + "amplitude": 0.20689525 + }, + { + "time": 3.030975, + "amplitude": 0.183368672, + "emphasis": { + "amplitude": 0.2844739978947369, + "frequency": 0.1 + } + }, + { + "time": 3.0969615, + "amplitude": 0.13570029 + }, + { + "time": 3.133968, + "amplitude": 0.22204176000000003, + "emphasis": { + "amplitude": 0.3328153578947369, + "frequency": 0.1 + } + }, + { + "time": 3.173968, + "amplitude": 0.15132241 + }, + { + "time": 3.1829705, + "amplitude": 0.32015898400000004, + "emphasis": { + "amplitude": 0.45546188789473685, + "frequency": 0.1 + } + }, + { + "time": 3.21195, + "amplitude": 0.15880866 + }, + { + "time": 3.248957, + "amplitude": 0.14429766 + }, + { + "time": 3.258957, + "amplitude": 0.20236488000000002, + "emphasis": { + "amplitude": 0.30821925789473686, + "frequency": 0.1 + } + }, + { + "time": 3.2829478, + "amplitude": 0.17971894 + }, + { + "time": 3.2969613, + "amplitude": 0.268645784, + "emphasis": { + "amplitude": 0.39107038789473686, + "frequency": 0.1 + } + }, + { + "time": 3.3169613, + "amplitude": 0.15496504, + "emphasis": { + "amplitude": 0.24896945789473685, + "frequency": 0.1 + } + }, + { + "time": 3.335941, + "amplitude": 0.272391816, + "emphasis": { + "amplitude": 0.3957529278947369, + "frequency": 0.1 + } + }, + { + "time": 3.367959, + "amplitude": 0.12948777 + }, + { + "time": 3.3929477, + "amplitude": 0.16399009600000003, + "emphasis": { + "amplitude": 0.26025077789473683, + "frequency": 0.1 + } + }, + { + "time": 3.4239454, + "amplitude": 0.14047489 + }, + { + "time": 3.4399545, + "amplitude": 0.189034752, + "emphasis": { + "amplitude": 0.29155659789473687, + "frequency": 0.1 + } + }, + { + "time": 3.4649432, + "amplitude": 0.15619723 + }, + { + "time": 3.4749432, + "amplitude": 0.25046587200000003, + "emphasis": { + "amplitude": 0.36834549789473686, + "frequency": 0.1 + } + }, + { + "time": 3.5049431, + "amplitude": 0.12904553 + }, + { + "time": 3.5099318, + "amplitude": 0.21693692000000003, + "emphasis": { + "amplitude": 0.3264343078947369, + "frequency": 0.1 + } + }, + { + "time": 3.5369387, + "amplitude": 0.1569923 + }, + { + "time": 3.5389342, + "amplitude": 0.2495444, + "emphasis": { + "amplitude": 0.36719365789473685, + "frequency": 0.1 + } + }, + { + "time": 3.585941, + "amplitude": 0.14799103 + }, + { + "time": 3.5909297, + "amplitude": 0.242465976, + "emphasis": { + "amplitude": 0.35834562789473684, + "frequency": 0.1 + } + }, + { + "time": 3.6409297, + "amplitude": 0.10443574 + }, + { + "time": 3.659932, + "amplitude": 0.31192752, + "emphasis": { + "amplitude": 0.44517255789473686, + "frequency": 0.1 + } + }, + { + "time": 3.6819274, + "amplitude": 0.29579604000000004, + "emphasis": { + "amplitude": 0.42500820789473687, + "frequency": 0.1 + } + }, + { + "time": 3.7209296, + "amplitude": 0.13837159 + }, + { + "time": 3.7379138, + "amplitude": 0.24360944, + "emphasis": { + "amplitude": 0.35977495789473685, + "frequency": 0.1 + } + }, + { + "time": 3.7729251, + "amplitude": 0.17298108 + }, + { + "time": 3.803923, + "amplitude": 0.15948458 + }, + { + "time": 3.810907, + "amplitude": 0.2530744, + "emphasis": { + "amplitude": 0.37160615789473683, + "frequency": 0.1 + } + }, + { + "time": 3.8389115, + "amplitude": 0.1333929 + }, + { + "time": 3.8789115, + "amplitude": 0.241591, + "emphasis": { + "amplitude": 0.3572519078947368, + "frequency": 0.1 + } + }, + { + "time": 3.910907, + "amplitude": 0.1558405 + }, + { + "time": 3.930907, + "amplitude": 0.2468514, + "emphasis": { + "amplitude": 0.36382740789473683, + "frequency": 0.1 + } + }, + { + "time": 3.9789114, + "amplitude": 0.099239275 + }, + { + "time": 3.9889114, + "amplitude": 0.28277972, + "emphasis": { + "amplitude": 0.40873780789473685, + "frequency": 0.1 + } + }, + { + "time": 4.000907, + "amplitude": 0.19246917600000002, + "emphasis": { + "amplitude": 0.29584962789473684, + "frequency": 0.1 + } + }, + { + "time": 4.0019045, + "amplitude": 0.184737304, + "emphasis": { + "amplitude": 0.28618478789473684, + "frequency": 0.1 + } + }, + { + "time": 4.0199094, + "amplitude": 0.24003568, + "emphasis": { + "amplitude": 0.35530775789473684, + "frequency": 0.1 + } + }, + { + "time": 4.057891, + "amplitude": 0.11028696 + }, + { + "time": 4.070907, + "amplitude": 0.21204018400000002, + "emphasis": { + "amplitude": 0.32031338789473685, + "frequency": 0.1 + } + }, + { + "time": 4.0948977, + "amplitude": 0.223343064, + "emphasis": { + "amplitude": 0.33444198789473684, + "frequency": 0.1 + } + }, + { + "time": 4.1429024, + "amplitude": 0.12303459 + }, + { + "time": 4.1539, + "amplitude": 0.24455637600000002, + "emphasis": { + "amplitude": 0.36095862789473687, + "frequency": 0.1 + } + }, + { + "time": 4.171882, + "amplitude": 0.18815382 + }, + { + "time": 4.201882, + "amplitude": 0.26266016, + "emphasis": { + "amplitude": 0.38358835789473683, + "frequency": 0.1 + } + }, + { + "time": 4.2238774, + "amplitude": 0.17031994 + }, + { + "time": 4.257891, + "amplitude": 0.112041846 + }, + { + "time": 4.274875, + "amplitude": 0.16480683200000001, + "emphasis": { + "amplitude": 0.2612716978947368, + "frequency": 0.1 + } + }, + { + "time": 4.314875, + "amplitude": 0.09504453 + }, + { + "time": 4.3198867, + "amplitude": 0.21352636800000002, + "emphasis": { + "amplitude": 0.32217111789473685, + "frequency": 0.1 + } + }, + { + "time": 4.3448753, + "amplitude": 0.1407002 + }, + { + "time": 4.365873, + "amplitude": 0.25824801599999997, + "emphasis": { + "amplitude": 0.3780731778947368, + "frequency": 0.1 + } + }, + { + "time": 4.3938775, + "amplitude": 0.12680414 + }, + { + "time": 4.415873, + "amplitude": 0.16884322400000001, + "emphasis": { + "amplitude": 0.26631718789473685, + "frequency": 0.1 + } + }, + { + "time": 4.4778686, + "amplitude": 0.11959785 + }, + { + "time": 4.502857, + "amplitude": 0.22849008, + "emphasis": { + "amplitude": 0.34087575789473684, + "frequency": 0.1 + } + }, + { + "time": 4.522857, + "amplitude": 0.15826693 + }, + { + "time": 4.5278683, + "amplitude": 0.23664552, + "emphasis": { + "amplitude": 0.35107005789473683, + "frequency": 0.1 + } + }, + { + "time": 4.5548525, + "amplitude": 0.15163219 + }, + { + "time": 4.5848527, + "amplitude": 0.14851065 + }, + { + "time": 4.5918593, + "amplitude": 0.228871464, + "emphasis": { + "amplitude": 0.3413524878947368, + "frequency": 0.1 + } + }, + { + "time": 4.6098638, + "amplitude": 0.1581302 + }, + { + "time": 4.626848, + "amplitude": 0.18552580000000002, + "emphasis": { + "amplitude": 0.28717040789473686, + "frequency": 0.1 + } + }, + { + "time": 4.6558504, + "amplitude": 0.1517146 + }, + { + "time": 4.6848526, + "amplitude": 0.24983949600000002, + "emphasis": { + "amplitude": 0.36756252789473687, + "frequency": 0.1 + } + }, + { + "time": 4.72585, + "amplitude": 0.10307897 + }, + { + "time": 4.746848, + "amplitude": 0.155359152, + "emphasis": { + "amplitude": 0.24946209789473683, + "frequency": 0.1 + } + }, + { + "time": 4.789841, + "amplitude": 0.14468227 + }, + { + "time": 4.80585, + "amplitude": 0.180453464, + "emphasis": { + "amplitude": 0.28082998789473684, + "frequency": 0.1 + } + }, + { + "time": 4.8288436, + "amplitude": 0.11078241 + }, + { + "time": 4.8658504, + "amplitude": 0.11849093 + }, + { + "time": 4.88483, + "amplitude": 0.23361484799999999, + "emphasis": { + "amplitude": 0.34728171789473683, + "frequency": 0.1 + } + }, + { + "time": 4.906848, + "amplitude": 0.16859984 + }, + { + "time": 4.9578233, + "amplitude": 0.1267751 + }, + { + "time": 4.958843, + "amplitude": 0.211438296, + "emphasis": { + "amplitude": 0.31956102789473684, + "frequency": 0.1 + } + }, + { + "time": 5.0008388, + "amplitude": 0.16274679 + }, + { + "time": 5.001837, + "amplitude": 0.16055907 + }, + { + "time": 5.030839, + "amplitude": 0.13191117 + }, + { + "time": 5.0418367, + "amplitude": 0.24648976, + "emphasis": { + "amplitude": 0.36337535789473685, + "frequency": 0.1 + } + }, + { + "time": 5.0598183, + "amplitude": 0.16598701 + }, + { + "time": 5.091814, + "amplitude": 0.13389209 + }, + { + "time": 5.113832, + "amplitude": 0.19572370400000003, + "emphasis": { + "amplitude": 0.2999177878947369, + "frequency": 0.1 + } + }, + { + "time": 5.1598186, + "amplitude": 0.114428535 + }, + { + "time": 5.1638093, + "amplitude": 0.19095561 + }, + { + "time": 5.2108164, + "amplitude": 0.0920799 + }, + { + "time": 5.225805, + "amplitude": 0.197610976, + "emphasis": { + "amplitude": 0.30227687789473684, + "frequency": 0.1 + } + }, + { + "time": 5.245805, + "amplitude": 0.13305047 + }, + { + "time": 5.2508163, + "amplitude": 0.22915248, + "emphasis": { + "amplitude": 0.34170375789473684, + "frequency": 0.1 + } + }, + { + "time": 5.2908163, + "amplitude": 0.109153405 + }, + { + "time": 5.3068027, + "amplitude": 0.18725186400000002, + "emphasis": { + "amplitude": 0.28932798789473685, + "frequency": 0.1 + } + }, + { + "time": 5.3707933, + "amplitude": 0.13355348 + }, + { + "time": 5.401791, + "amplitude": 0.2470726, + "emphasis": { + "amplitude": 0.36410390789473684, + "frequency": 0.1 + } + }, + { + "time": 5.432789, + "amplitude": 0.14256185 + }, + { + "time": 5.4497957, + "amplitude": 0.195753264, + "emphasis": { + "amplitude": 0.29995473789473687, + "frequency": 0.1 + } + }, + { + "time": 5.488798, + "amplitude": 0.094281875 + }, + { + "time": 5.4897957, + "amplitude": 0.1640646, + "emphasis": { + "amplitude": 0.2603439078947368, + "frequency": 0.1 + } + }, + { + "time": 5.5147843, + "amplitude": 0.13101725 + }, + { + "time": 5.5217915, + "amplitude": 0.21060616, + "emphasis": { + "amplitude": 0.31852085789473683, + "frequency": 0.1 + } + }, + { + "time": 5.5478005, + "amplitude": 0.13970159 + }, + { + "time": 5.56678, + "amplitude": 0.196630136, + "emphasis": { + "amplitude": 0.30105082789473686, + "frequency": 0.1 + } + }, + { + "time": 5.5847845, + "amplitude": 0.15735617 + }, + { + "time": 5.58678, + "amplitude": 0.249100136, + "emphasis": { + "amplitude": 0.3666383278947368, + "frequency": 0.1 + } + }, + { + "time": 5.6157823, + "amplitude": 0.13767181 + }, + { + "time": 5.6207933, + "amplitude": 0.18156173600000003, + "emphasis": { + "amplitude": 0.28221532789473686, + "frequency": 0.1 + } + }, + { + "time": 5.680771, + "amplitude": 0.10507352 + }, + { + "time": 5.7057824, + "amplitude": 0.16157836000000003, + "emphasis": { + "amplitude": 0.25723610789473683, + "frequency": 0.1 + } + }, + { + "time": 5.773764, + "amplitude": 0.10115617 + }, + { + "time": 5.7747846, + "amplitude": 0.160345352, + "emphasis": { + "amplitude": 0.25569484789473684, + "frequency": 0.1 + } + }, + { + "time": 5.8087754, + "amplitude": 0.229034592, + "emphasis": { + "amplitude": 0.34155639789473685, + "frequency": 0.1 + } + }, + { + "time": 5.83678, + "amplitude": 0.15205385 + }, + { + "time": 5.844762, + "amplitude": 0.295464208, + "emphasis": { + "amplitude": 0.42459341789473687, + "frequency": 0.1 + } + }, + { + "time": 5.867778, + "amplitude": 0.18523039 + }, + { + "time": 5.896757, + "amplitude": 0.19511124000000002, + "emphasis": { + "amplitude": 0.29915220789473684, + "frequency": 0.1 + } + }, + { + "time": 5.919773, + "amplitude": 0.14234099 + }, + { + "time": 5.928753, + "amplitude": 0.24253096, + "emphasis": { + "amplitude": 0.35842685789473683, + "frequency": 0.1 + } + }, + { + "time": 6.000748, + "amplitude": 0.164266144, + "emphasis": { + "amplitude": 0.26059583789473684, + "frequency": 0.1 + } + }, + { + "time": 6.0017686, + "amplitude": 0.15790863200000002, + "emphasis": { + "amplitude": 0.25264894789473685, + "frequency": 0.1 + } + }, + { + "time": 6.0387526, + "amplitude": 0.23387566 + }, + { + "time": 6.067755, + "amplitude": 0.10469364 + }, + { + "time": 6.118753, + "amplitude": 0.10214257 + }, + { + "time": 6.1397505, + "amplitude": 0.2184151 + }, + { + "time": 6.140748, + "amplitude": 0.4189236 + }, + { + "time": 6.1687527, + "amplitude": 0.28682113 + }, + { + "time": 6.2027435, + "amplitude": 0.36923784 + }, + { + "time": 6.2037416, + "amplitude": 0.60037816 + }, + { + "time": 6.227732, + "amplitude": 0.4507792 + }, + { + "time": 6.2287526, + "amplitude": 0.6775522 + }, + { + "time": 6.255737, + "amplitude": 0.30793723 + }, + { + "time": 6.319728, + "amplitude": 0.14083809 + }, + { + "time": 6.4277325, + "amplitude": 0.064572394 + }, + { + "time": 6.4337187, + "amplitude": 0.13597801 + }, + { + "time": 6.5007253, + "amplitude": 0.027271103 + }, + { + "time": 6.526712, + "amplitude": 0.14608261 + }, + { + "time": 6.615714, + "amplitude": 0.060826696 + }, + { + "time": 6.6257143, + "amplitude": 0.15087625 + }, + { + "time": 6.6637187, + "amplitude": 0.07896644 + }, + { + "time": 6.684716, + "amplitude": 0.22969781 + }, + { + "time": 6.7087073, + "amplitude": 0.1295609 + }, + { + "time": 6.7126985, + "amplitude": 0.27776766 + }, + { + "time": 6.7407026, + "amplitude": 0.2857151 + }, + { + "time": 6.742698, + "amplitude": 0.36923594400000004, + "emphasis": { + "amplitude": 0.46154493, + "frequency": 0.1 + } + }, + { + "time": 6.762698, + "amplitude": 0.24819463 + }, + { + "time": 6.7687073, + "amplitude": 0.353300928, + "emphasis": { + "amplitude": 0.44162616, + "frequency": 0.1 + } + }, + { + "time": 6.7877097, + "amplitude": 0.26584098 + }, + { + "time": 6.803696, + "amplitude": 0.45009584, + "emphasis": { + "amplitude": 0.5626198, + "frequency": 0.1 + } + }, + { + "time": 6.823696, + "amplitude": 0.3231288 + }, + { + "time": 6.8246937, + "amplitude": 0.42107820800000006, + "emphasis": { + "amplitude": 0.52634776, + "frequency": 0.1 + } + }, + { + "time": 6.8526983, + "amplitude": 0.30052122 + }, + { + "time": 6.866689, + "amplitude": 0.325689288, + "emphasis": { + "amplitude": 0.40711161, + "frequency": 0.1 + } + }, + { + "time": 6.8926983, + "amplitude": 0.20258707 + }, + { + "time": 6.9096823, + "amplitude": 0.41737947200000003, + "emphasis": { + "amplitude": 0.52172434, + "frequency": 0.1 + } + }, + { + "time": 6.9256916, + "amplitude": 0.269793656, + "emphasis": { + "amplitude": 0.33724207, + "frequency": 0.1 + } + }, + { + "time": 6.943696, + "amplitude": 0.33724336, + "emphasis": { + "amplitude": 0.4215542, + "frequency": 0.1 + } + }, + { + "time": 6.9656916, + "amplitude": 0.27285174 + }, + { + "time": 6.97068, + "amplitude": 0.3886888, + "emphasis": { + "amplitude": 0.485861, + "frequency": 0.1 + } + }, + { + "time": 7.00068, + "amplitude": 0.27193372, + "emphasis": { + "amplitude": 0.33991715, + "frequency": 0.1 + } + }, + { + "time": 7.001678, + "amplitude": 0.31976916800000005, + "emphasis": { + "amplitude": 0.39971146, + "frequency": 0.1 + } + }, + { + "time": 7.017687, + "amplitude": 0.43910000000000005, + "emphasis": { + "amplitude": 0.548875, + "frequency": 0.1 + } + }, + { + "time": 7.044694, + "amplitude": 0.273006128, + "emphasis": { + "amplitude": 0.34125766, + "frequency": 0.1 + } + }, + { + "time": 7.046689, + "amplitude": 0.438492344, + "emphasis": { + "amplitude": 0.54811543, + "frequency": 0.1 + } + }, + { + "time": 7.0656915, + "amplitude": 0.29072052 + }, + { + "time": 7.093673, + "amplitude": 0.19824746 + }, + { + "time": 7.097687, + "amplitude": 0.33432584, + "emphasis": { + "amplitude": 0.4179073, + "frequency": 0.1 + } + }, + { + "time": 7.1236734, + "amplitude": 0.32934436800000005, + "emphasis": { + "amplitude": 0.41168046, + "frequency": 0.1 + } + }, + { + "time": 7.19068, + "amplitude": 0.16889049 + }, + { + "time": 7.2266665, + "amplitude": 0.21444437 + }, + { + "time": 7.23068, + "amplitude": 0.28825680000000004, + "emphasis": { + "amplitude": 0.360321, + "frequency": 0.1 + } + }, + { + "time": 7.2506576, + "amplitude": 0.21234357 + }, + { + "time": 7.2676644, + "amplitude": 0.38374092800000004, + "emphasis": { + "amplitude": 0.47967616, + "frequency": 0.1 + } + }, + { + "time": 7.3036733, + "amplitude": 0.16632561 + }, + { + "time": 7.3236732, + "amplitude": 0.29083118 + }, + { + "time": 7.3746486, + "amplitude": 0.13935007 + }, + { + "time": 7.377664, + "amplitude": 0.29676998 + }, + { + "time": 7.4036508, + "amplitude": 0.21288988 + }, + { + "time": 7.4146485, + "amplitude": 0.28243100800000004, + "emphasis": { + "amplitude": 0.35303876, + "frequency": 0.1 + } + }, + { + "time": 7.4426527, + "amplitude": 0.15524475 + }, + { + "time": 7.4716554, + "amplitude": 0.28569657600000004, + "emphasis": { + "amplitude": 0.35712072, + "frequency": 0.1 + } + }, + { + "time": 7.501655, + "amplitude": 0.164084 + }, + { + "time": 7.5436506, + "amplitude": 0.18228292 + }, + { + "time": 7.5666437, + "amplitude": 0.29076082400000003, + "emphasis": { + "amplitude": 0.36345103, + "frequency": 0.1 + } + }, + { + "time": 7.599637, + "amplitude": 0.15358876 + }, + { + "time": 7.6236506, + "amplitude": 0.33648180800000005, + "emphasis": { + "amplitude": 0.42060226, + "frequency": 0.1 + } + }, + { + "time": 7.6386395, + "amplitude": 0.27369243 + }, + { + "time": 7.673628, + "amplitude": 0.14214662 + }, + { + "time": 7.6956463, + "amplitude": 0.17434558 + }, + { + "time": 7.7016325, + "amplitude": 0.29726208000000004, + "emphasis": { + "amplitude": 0.3715776, + "frequency": 0.1 + } + }, + { + "time": 7.754626, + "amplitude": 0.14778362 + }, + { + "time": 7.759637, + "amplitude": 0.32238898 + }, + { + "time": 7.779637, + "amplitude": 0.28893728, + "emphasis": { + "amplitude": 0.3611716, + "frequency": 0.1 + } + }, + { + "time": 7.8046255, + "amplitude": 0.22036086 + }, + { + "time": 7.8486166, + "amplitude": 0.21452156 + }, + { + "time": 7.853628, + "amplitude": 0.36567130400000003, + "emphasis": { + "amplitude": 0.45708913, + "frequency": 0.1 + } + }, + { + "time": 7.8746257, + "amplitude": 0.38256592, + "emphasis": { + "amplitude": 0.4782074, + "frequency": 0.1 + } + }, + { + "time": 7.906621, + "amplitude": 0.19640513 + }, + { + "time": 7.933628, + "amplitude": 0.39897704, + "emphasis": { + "amplitude": 0.4987213, + "frequency": 0.1 + } + }, + { + "time": 8.000612, + "amplitude": 0.21670282 + }, + { + "time": 8.00161, + "amplitude": 0.23071164 + }, + { + "time": 8.022631, + "amplitude": 0.42786508000000006, + "emphasis": { + "amplitude": 0.53483135, + "frequency": 0.1 + } + }, + { + "time": 8.0566435, + "amplitude": 0.23248714 + }, + { + "time": 8.088639, + "amplitude": 0.32267332 + }, + { + "time": 8.090657, + "amplitude": 0.46824426399999997, + "emphasis": { + "amplitude": 0.58530533, + "frequency": 0.1 + } + }, + { + "time": 8.117664, + "amplitude": 0.29192346 + }, + { + "time": 8.158685, + "amplitude": 0.23821677 + }, + { + "time": 8.186689, + "amplitude": 0.444118456, + "emphasis": { + "amplitude": 0.55514807, + "frequency": 0.1 + } + }, + { + "time": 8.220703, + "amplitude": 0.24869749 + }, + { + "time": 8.253718, + "amplitude": 0.3232526 + }, + { + "time": 8.254717, + "amplitude": 0.42882768000000004, + "emphasis": { + "amplitude": 0.5360346, + "frequency": 0.1 + } + }, + { + "time": 8.283719, + "amplitude": 0.28510308 + }, + { + "time": 8.305737, + "amplitude": 0.31839652, + "emphasis": { + "amplitude": 0.39799565, + "frequency": 0.1 + } + }, + { + "time": 8.32975, + "amplitude": 0.2062391 + }, + { + "time": 8.353764, + "amplitude": 0.49433824000000004, + "emphasis": { + "amplitude": 0.6179228, + "frequency": 0.1 + } + }, + { + "time": 8.387777, + "amplitude": 0.2506057 + }, + { + "time": 8.419773, + "amplitude": 0.34407154 + }, + { + "time": 8.422789, + "amplitude": 0.6048344 + }, + { + "time": 8.455805, + "amplitude": 0.28923336 + }, + { + "time": 8.4778, + "amplitude": 0.5230274 + }, + { + "time": 8.502811, + "amplitude": 0.26520577 + }, + { + "time": 8.518821, + "amplitude": 0.54037714 + }, + { + "time": 8.542834, + "amplitude": 0.32582647 + }, + { + "time": 8.583855, + "amplitude": 0.3375412 + }, + { + "time": 8.590861, + "amplitude": 0.455218744, + "emphasis": { + "amplitude": 0.56902343, + "frequency": 0.5 + } + }, + { + "time": 8.629864, + "amplitude": 0.27041307 + }, + { + "time": 8.639864, + "amplitude": 0.36576984, + "emphasis": { + "amplitude": 0.4572123, + "frequency": 0.5 + } + }, + { + "time": 8.659886, + "amplitude": 0.24565387 + }, + { + "time": 8.681882, + "amplitude": 0.428670832, + "emphasis": { + "amplitude": 0.53583854, + "frequency": 0.5 + } + }, + { + "time": 8.715896, + "amplitude": 0.2675479 + }, + { + "time": 8.749909, + "amplitude": 0.445659968, + "emphasis": { + "amplitude": 0.55707496, + "frequency": 0.5 + } + }, + { + "time": 8.777936, + "amplitude": 0.3106079 + }, + { + "time": 8.800929, + "amplitude": 0.4142573600000001, + "emphasis": { + "amplitude": 0.5178217, + "frequency": 0.5 + } + }, + { + "time": 8.83195, + "amplitude": 0.23262455 + }, + { + "time": 8.847959, + "amplitude": 0.45544109600000005, + "emphasis": { + "amplitude": 0.56930137, + "frequency": 0.5 + } + }, + { + "time": 8.898979, + "amplitude": 0.25750443 + }, + { + "time": 8.916984, + "amplitude": 0.4863242160000001, + "emphasis": { + "amplitude": 0.60790527, + "frequency": 0.5 + } + }, + { + "time": 8.949002, + "amplitude": 0.28675726 + }, + { + "time": 8.971995, + "amplitude": 0.360898832, + "emphasis": { + "amplitude": 0.45112354, + "frequency": 0.5 + } + }, + { + "time": 9.000023, + "amplitude": 0.3712902 + }, + { + "time": 9.00102, + "amplitude": 0.36813134 + }, + { + "time": 9.014013, + "amplitude": 0.4752430000000001, + "emphasis": { + "amplitude": 0.59405375, + "frequency": 0.5 + } + }, + { + "time": 9.05703, + "amplitude": 0.29185715 + }, + { + "time": 9.082041, + "amplitude": 0.45320348800000004, + "emphasis": { + "amplitude": 0.56650436, + "frequency": 0.5 + } + }, + { + "time": 9.115057, + "amplitude": 0.31654233 + }, + { + "time": 9.137074, + "amplitude": 0.363339232, + "emphasis": { + "amplitude": 0.45417404, + "frequency": 0.5 + } + }, + { + "time": 9.156077, + "amplitude": 0.25360054 + }, + { + "time": 9.181088, + "amplitude": 0.47438224, + "emphasis": { + "amplitude": 0.5929778, + "frequency": 0.5 + } + }, + { + "time": 9.203107, + "amplitude": 0.34228623 + }, + { + "time": 9.2291155, + "amplitude": 0.2712076 + }, + { + "time": 9.24712, + "amplitude": 0.46994643199999997, + "emphasis": { + "amplitude": 0.58743304, + "frequency": 0.5 + } + }, + { + "time": 9.292131, + "amplitude": 0.31730574 + }, + { + "time": 9.302132, + "amplitude": 0.37455811200000005, + "emphasis": { + "amplitude": 0.46819764, + "frequency": 0.5 + } + }, + { + "time": 9.320136, + "amplitude": 0.25729793 + }, + { + "time": 9.34415, + "amplitude": 0.47804388800000003, + "emphasis": { + "amplitude": 0.59755486, + "frequency": 0.5 + } + }, + { + "time": 9.39517, + "amplitude": 0.25861254 + }, + { + "time": 9.412177, + "amplitude": 0.50119888, + "emphasis": { + "amplitude": 0.6264986, + "frequency": 0.5 + } + }, + { + "time": 9.44619, + "amplitude": 0.3198481 + }, + { + "time": 9.468208, + "amplitude": 0.400430104, + "emphasis": { + "amplitude": 0.50053763, + "frequency": 0.5 + } + }, + { + "time": 9.495215, + "amplitude": 0.24197039 + }, + { + "time": 9.510226, + "amplitude": 0.54553224, + "emphasis": { + "amplitude": 0.6819153, + "frequency": 0.5 + } + }, + { + "time": 9.539228, + "amplitude": 0.3332842 + }, + { + "time": 9.561247, + "amplitude": 0.31369716 + }, + { + "time": 9.579251, + "amplitude": 0.52249632, + "emphasis": { + "amplitude": 0.6531204, + "frequency": 0.5 + } + }, + { + "time": 9.6122675, + "amplitude": 0.31140202 + }, + { + "time": 9.634263, + "amplitude": 0.433278512, + "emphasis": { + "amplitude": 0.54159814, + "frequency": 0.5 + } + }, + { + "time": 9.661292, + "amplitude": 0.2550544 + }, + { + "time": 9.677301, + "amplitude": 0.49208531200000005, + "emphasis": { + "amplitude": 0.61510664, + "frequency": 0.5 + } + }, + { + "time": 9.712313, + "amplitude": 0.28082722 + }, + { + "time": 9.728322, + "amplitude": 0.29712605 + }, + { + "time": 9.746326, + "amplitude": 0.52068596, + "emphasis": { + "amplitude": 0.65085745, + "frequency": 0.5 + } + }, + { + "time": 9.797347, + "amplitude": 0.2840627 + }, + { + "time": 9.805351, + "amplitude": 0.439779568, + "emphasis": { + "amplitude": 0.54972446, + "frequency": 0.5 + } + }, + { + "time": 9.830362, + "amplitude": 0.24498594 + }, + { + "time": 9.848367, + "amplitude": 0.4933012, + "emphasis": { + "amplitude": 0.6166265, + "frequency": 0.5 + } + }, + { + "time": 9.883378, + "amplitude": 0.2511896 + }, + { + "time": 9.899387, + "amplitude": 0.23290746 + }, + { + "time": 9.92238, + "amplitude": 0.75131166 + }, + { + "time": 9.968412, + "amplitude": 0.25871935 + }, + { + "time": 10.000431, + "amplitude": 0.22507955 + }, + { + "time": 10.001429, + "amplitude": 0.21771073 + }, + { + "time": 10.012426, + "amplitude": 0.6630631 + }, + { + "time": 10.053447, + "amplitude": 0.68577474 + }, + { + "time": 10.0854645, + "amplitude": 0.3327846 + }, + { + "time": 10.112472, + "amplitude": 0.6420041 + }, + { + "time": 10.135488, + "amplitude": 0.44055992 + }, + { + "time": 10.137483, + "amplitude": 0.7572745 + }, + { + "time": 10.171496, + "amplitude": 0.29001233 + }, + { + "time": 10.203514, + "amplitude": 0.48840544 + }, + { + "time": 10.20551, + "amplitude": 0.80868816 + }, + { + "time": 10.238526, + "amplitude": 0.32146987 + }, + { + "time": 10.282539, + "amplitude": 0.21799137 + }, + { + "time": 10.30254, + "amplitude": 0.53118026 + }, + { + "time": 10.336554, + "amplitude": 0.24129903 + }, + { + "time": 10.368571, + "amplitude": 0.31740576 + }, + { + "time": 10.370566, + "amplitude": 0.5641645 + }, + { + "time": 10.398594, + "amplitude": 0.28684586 + }, + { + "time": 10.420589, + "amplitude": 0.39801058 + }, + { + "time": 10.4456005, + "amplitude": 0.2049935 + }, + { + "time": 10.4686165, + "amplitude": 0.494346192, + "emphasis": { + "amplitude": 0.61793274, + "frequency": 0.9 + } + }, + { + "time": 10.487618, + "amplitude": 0.3733186 + }, + { + "time": 10.524626, + "amplitude": 0.27426207 + }, + { + "time": 10.537642, + "amplitude": 0.48387308000000007, + "emphasis": { + "amplitude": 0.60484135, + "frequency": 0.9 + } + }, + { + "time": 10.571655, + "amplitude": 0.28863677 + }, + { + "time": 10.588662, + "amplitude": 0.41286492, + "emphasis": { + "amplitude": 0.51608115, + "frequency": 0.9 + } + }, + { + "time": 10.618662, + "amplitude": 0.26302707 + }, + { + "time": 10.633674, + "amplitude": 0.42821928, + "emphasis": { + "amplitude": 0.5352741, + "frequency": 0.9 + } + }, + { + "time": 10.657687, + "amplitude": 0.32918155 + }, + { + "time": 10.699705, + "amplitude": 0.33639103 + }, + { + "time": 10.705714, + "amplitude": 0.45520248, + "emphasis": { + "amplitude": 0.5690031, + "frequency": 0.9 + } + }, + { + "time": 10.745714, + "amplitude": 0.2683024 + }, + { + "time": 10.774739, + "amplitude": 0.24672809 + }, + { + "time": 10.798753, + "amplitude": 0.427365496, + "emphasis": { + "amplitude": 0.53420687, + "frequency": 0.9 + } + }, + { + "time": 10.831768, + "amplitude": 0.2669759 + }, + { + "time": 10.865782, + "amplitude": 0.44566516800000006, + "emphasis": { + "amplitude": 0.55708146, + "frequency": 0.9 + } + }, + { + "time": 10.898775, + "amplitude": 0.31042057 + }, + { + "time": 10.915782, + "amplitude": 0.414272832, + "emphasis": { + "amplitude": 0.51784104, + "frequency": 0.9 + } + }, + { + "time": 10.946802, + "amplitude": 0.23426011 + }, + { + "time": 10.962811, + "amplitude": 0.45272088000000005, + "emphasis": { + "amplitude": 0.5659011, + "frequency": 0.9 + } + }, + { + "time": 11.000816, + "amplitude": 0.33433664 + }, + { + "time": 11.001837, + "amplitude": 0.3291025 + }, + { + "time": 11.029841, + "amplitude": 0.39132378 + }, + { + "time": 11.0318365, + "amplitude": 0.486331416, + "emphasis": { + "amplitude": 0.60791427, + "frequency": 0.9 + } + }, + { + "time": 11.064853, + "amplitude": 0.28283936 + }, + { + "time": 11.087869, + "amplitude": 0.44988766 + }, + { + "time": 11.105873, + "amplitude": 0.25346398 + }, + { + "time": 11.128889, + "amplitude": 0.47524864000000006, + "emphasis": { + "amplitude": 0.5940608, + "frequency": 0.9 + } + }, + { + "time": 11.157891, + "amplitude": 0.29969382 + }, + { + "time": 11.194898, + "amplitude": 0.4046535 + }, + { + "time": 11.196916, + "amplitude": 0.44789476, + "emphasis": { + "amplitude": 0.55986845, + "frequency": 0.9 + } + }, + { + "time": 11.230929, + "amplitude": 0.31474334 + }, + { + "time": 11.252925, + "amplitude": 0.45416895 + }, + { + "time": 11.2789345, + "amplitude": 0.25917026 + }, + { + "time": 11.294943, + "amplitude": 0.47609184000000004, + "emphasis": { + "amplitude": 0.5951148, + "frequency": 0.9 + } + }, + { + "time": 11.344966, + "amplitude": 0.2688361 + }, + { + "time": 11.361973, + "amplitude": 0.46993864, + "emphasis": { + "amplitude": 0.5874233, + "frequency": 0.9 + } + }, + { + "time": 11.436008, + "amplitude": 0.25444236 + }, + { + "time": 11.460023, + "amplitude": 0.47803824, + "emphasis": { + "amplitude": 0.5975478, + "frequency": 0.9 + } + }, + { + "time": 11.510022, + "amplitude": 0.2592828 + }, + { + "time": 11.528049, + "amplitude": 0.5011968800000001, + "emphasis": { + "amplitude": 0.6264961, + "frequency": 0.9 + } + }, + { + "time": 11.561043, + "amplitude": 0.3228003 + }, + { + "time": 11.583061, + "amplitude": 0.40042736000000007, + "emphasis": { + "amplitude": 0.5005342, + "frequency": 0.9 + } + }, + { + "time": 11.610067, + "amplitude": 0.24272123 + }, + { + "time": 11.626077, + "amplitude": 0.5455409999999999, + "emphasis": { + "amplitude": 0.68192625, + "frequency": 0.9 + } + }, + { + "time": 11.655102, + "amplitude": 0.3288681 + }, + { + "time": 11.692108, + "amplitude": 0.43868762 + }, + { + "time": 11.694104, + "amplitude": 0.522493168, + "emphasis": { + "amplitude": 0.65311646, + "frequency": 0.9 + } + }, + { + "time": 11.728118, + "amplitude": 0.30965504 + }, + { + "time": 11.750135, + "amplitude": 0.43326411200000003, + "emphasis": { + "amplitude": 0.54158014, + "frequency": 0.9 + } + }, + { + "time": 11.777143, + "amplitude": 0.25387052 + }, + { + "time": 11.792154, + "amplitude": 0.48082104000000003, + "emphasis": { + "amplitude": 0.6010263, + "frequency": 0.9 + } + }, + { + "time": 11.828163, + "amplitude": 0.27899235 + }, + { + "time": 11.849161, + "amplitude": 0.3053782 + }, + { + "time": 11.866168, + "amplitude": 0.5527024, + "emphasis": { + "amplitude": 0.690878, + "frequency": 0.9 + } + }, + { + "time": 11.897188, + "amplitude": 0.333265 + }, + { + "time": 11.915193, + "amplitude": 0.4081725600000001, + "emphasis": { + "amplitude": 0.5102157, + "frequency": 0.9 + } + }, + { + "time": 11.945215, + "amplitude": 0.2386522 + }, + { + "time": 11.968208, + "amplitude": 0.47885332, + "emphasis": { + "amplitude": 0.59856665, + "frequency": 0.9 + } + }, + { + "time": 11.998231, + "amplitude": 0.28346846 + }, + { + "time": 12.000227, + "amplitude": 0.43232438 + }, + { + "time": 12.0012245, + "amplitude": 0.42851648 + }, + { + "time": 12.015238, + "amplitude": 0.30089873 + }, + { + "time": 12.021247, + "amplitude": 0.380597544, + "emphasis": { + "amplitude": 0.47574693, + "frequency": 0.9 + } + }, + { + "time": 12.031247, + "amplitude": 0.38731122 + }, + { + "time": 12.033242, + "amplitude": 0.54229808, + "emphasis": { + "amplitude": 0.6778726, + "frequency": 0.9 + } + }, + { + "time": 12.046258, + "amplitude": 0.41089587200000005, + "emphasis": { + "amplitude": 0.51361984, + "frequency": 0.9 + } + }, + { + "time": 12.067256, + "amplitude": 0.3312845 + }, + { + "time": 12.069251, + "amplitude": 0.4305616 + }, + { + "time": 12.083265, + "amplitude": 0.3099676 + }, + { + "time": 12.089274, + "amplitude": 0.461521152, + "emphasis": { + "amplitude": 0.57690144, + "frequency": 0.9 + } + }, + { + "time": 12.103265, + "amplitude": 0.36019632 + }, + { + "time": 12.116281, + "amplitude": 0.26637077 + }, + { + "time": 12.120272, + "amplitude": 0.41022456 + }, + { + "time": 12.126281, + "amplitude": 0.3571024 + }, + { + "time": 12.13229, + "amplitude": 0.48724264000000006, + "emphasis": { + "amplitude": 0.6090533, + "frequency": 0.9 + } + }, + { + "time": 12.151292, + "amplitude": 0.38718545 + }, + { + "time": 12.168299, + "amplitude": 0.29219446 + }, + { + "time": 12.169297, + "amplitude": 0.43117234 + }, + { + "time": 12.184308, + "amplitude": 0.30006033 + }, + { + "time": 12.191315, + "amplitude": 0.37339568, + "emphasis": { + "amplitude": 0.4667446, + "frequency": 0.9 + } + }, + { + "time": 12.201315, + "amplitude": 0.45109028 + }, + { + "time": 12.202312, + "amplitude": 0.5507596, + "emphasis": { + "amplitude": 0.6884495, + "frequency": 0.9 + } + }, + { + "time": 12.226326, + "amplitude": 0.43857706 + }, + { + "time": 12.23932, + "amplitude": 0.42355603 + }, + { + "time": 12.254331, + "amplitude": 0.3072234 + }, + { + "time": 12.256327, + "amplitude": 0.52776814 + }, + { + "time": 12.287347, + "amplitude": 0.23422825 + }, + { + "time": 12.292358, + "amplitude": 0.39238554 + }, + { + "time": 12.319365, + "amplitude": 0.2708821 + }, + { + "time": 12.325352, + "amplitude": 0.41556507 + }, + { + "time": 12.352381, + "amplitude": 0.18959637 + }, + { + "time": 12.366372, + "amplitude": 0.12343487 + }, + { + "time": 12.381383, + "amplitude": 0.16933733 + }, + { + "time": 12.394399, + "amplitude": 0.11697081 + }, + { + "time": 12.427392, + "amplitude": 0.1464617 + }, + { + "time": 12.433401, + "amplitude": 0.21579954 + }, + { + "time": 12.468412, + "amplitude": 0.07529813 + }, + { + "time": 12.520431, + "amplitude": 0.0299637 + }, + { + "time": 12.559456, + "amplitude": 0.025649622 + }, + { + "time": 12.631496, + "amplitude": 0.013015568 + }, + { + "time": 12.632154, + "amplitude": 0.013015568 + }, + { + "time": 12.632154, + "amplitude": 0.013015568 + } + ], + "frequency": [ + { + "time": 0, + "frequency": 0.36628503 + }, + { + "time": 0.023219952, + "frequency": 0.21865611 + }, + { + "time": 0.0493424, + "frequency": 0.22021881 + }, + { + "time": 0.089977324, + "frequency": 0.31904912 + }, + { + "time": 0.11029478, + "frequency": 0.25169465 + }, + { + "time": 0.12770975, + "frequency": 0.3596581 + }, + { + "time": 0.1538322, + "frequency": 0.23608138 + }, + { + "time": 0.19446713, + "frequency": 0.3185801 + }, + { + "time": 0.22639456, + "frequency": 0.2128974 + }, + { + "time": 0.28734693, + "frequency": 0.2813325 + }, + { + "time": 0.3076644, + "frequency": 0.22678949 + }, + { + "time": 0.3686168, + "frequency": 0.31111324 + }, + { + "time": 0.40054423, + "frequency": 0.28079653 + }, + { + "time": 0.42376417, + "frequency": 0.15547872 + }, + { + "time": 0.4469841, + "frequency": 0.25198898 + }, + { + "time": 0.5021315, + "frequency": 0.1842495 + }, + { + "time": 0.5456689, + "frequency": 0.1909822915789474 + }, + { + "time": 0.5601814, + "frequency": 0.08906788157894736 + }, + { + "time": 0.64725626, + "frequency": 0.057604571578947356 + }, + { + "time": 0.6849887, + "frequency": 0.14240313157894738 + }, + { + "time": 0.7227211, + "frequency": 0.10554228157894739 + }, + { + "time": 0.7604535, + "frequency": 0.21597953157894736 + }, + { + "time": 0.8097959, + "frequency": 0.09535179157894737 + }, + { + "time": 0.8417233, + "frequency": 0.22639621157894738 + }, + { + "time": 0.8533333, + "frequency": 0.13783913157894737 + }, + { + "time": 0.8765533, + "frequency": 0.23555825157894736 + }, + { + "time": 0.9084807, + "frequency": 0.07037031157894735 + }, + { + "time": 0.9462131, + "frequency": 0.16001645157894737 + }, + { + "time": 0.9578231, + "frequency": 0.035119511578947354 + }, + { + "time": 0.9984581, + "frequency": 0.1395763815789474 + }, + { + "time": 1.0013604, + "frequency": 0.13685841157894738 + }, + { + "time": 1.0419954, + "frequency": 0.05919861157894735 + }, + { + "time": 1.0507029, + "frequency": 0.18282730157894742 + }, + { + "time": 1.0855328, + "frequency": 0.052198551578947344 + }, + { + "time": 1.1319727, + "frequency": 0.2435581815789474 + }, + { + "time": 1.1609976, + "frequency": 0.06129181157894735 + }, + { + "time": 1.1697052, + "frequency": 0.17959661157894738 + }, + { + "time": 1.2045351, + "frequency": 0.04607705157894737 + }, + { + "time": 1.2538775, + "frequency": 0.2226430515789474 + }, + { + "time": 1.2770975, + "frequency": 0.05697043157894735 + }, + { + "time": 1.3061224, + "frequency": 0.16471917157894736 + }, + { + "time": 1.3206348, + "frequency": 0.06714412157894736 + }, + { + "time": 1.3699772, + "frequency": 0.25561333157894733 + }, + { + "time": 1.3960997, + "frequency": 0.03388896157894736 + }, + { + "time": 1.4251246, + "frequency": 0.1340689715789474 + }, + { + "time": 1.4454421, + "frequency": 0.04661145157894736 + }, + { + "time": 1.4860771, + "frequency": 0.22739843157894737 + }, + { + "time": 1.5063945, + "frequency": 0.07726226157894736 + }, + { + "time": 1.5615419, + "frequency": 0.07308187157894735 + }, + { + "time": 1.6021768, + "frequency": 0.2250178815789474 + }, + { + "time": 1.6282992, + "frequency": 0.061892401578947334 + }, + { + "time": 1.6544217, + "frequency": 0.1435455515789474 + }, + { + "time": 1.7037641, + "frequency": 0.09310656157894738 + }, + { + "time": 1.7182765, + "frequency": 0.2190902915789474 + }, + { + "time": 1.7414966, + "frequency": 0.04808215157894735 + }, + { + "time": 1.7763264, + "frequency": 0.13043679157894736 + }, + { + "time": 1.9098412, + "frequency": 0.06285021157894734 + }, + { + "time": 1.9475737, + "frequency": 0.2081782615789474 + }, + { + "time": 1.9736961, + "frequency": 0.06391815157894735 + }, + { + "time": 1.9998186, + "frequency": 0.1155179215789474 + }, + { + "time": 2.002721, + "frequency": 0.13205869157894737 + }, + { + "time": 2.037551, + "frequency": 0.057803211578947356 + }, + { + "time": 2.0636735, + "frequency": 0.2020611815789474 + }, + { + "time": 2.0868933, + "frequency": 0.061553951578947344 + }, + { + "time": 2.1188207, + "frequency": 0.14165128157894738 + }, + { + "time": 2.1623583, + "frequency": 0.12058141157894739 + }, + { + "time": 2.1768706, + "frequency": 0.21721176157894737 + }, + { + "time": 2.2029932, + "frequency": 0.06626516157894735 + }, + { + "time": 2.2465305, + "frequency": 0.18685235 + }, + { + "time": 2.2871654, + "frequency": 0.34271452 + }, + { + "time": 2.3161905, + "frequency": 0.19152875 + }, + { + "time": 2.3452153, + "frequency": 0.28902808 + }, + { + "time": 2.3713377, + "frequency": 0.18630095 + }, + { + "time": 2.4003627, + "frequency": 0.33411124 + }, + { + "time": 2.4235826, + "frequency": 0.19037835 + }, + { + "time": 2.4439, + "frequency": 0.287344 + }, + { + "time": 2.4700227, + "frequency": 0.17577314 + }, + { + "time": 2.5164626, + "frequency": 0.35822335 + }, + { + "time": 2.5367799, + "frequency": 0.17870304 + }, + { + "time": 2.5512924, + "frequency": 0.30452976 + }, + { + "time": 2.5745125, + "frequency": 0.1834136 + }, + { + "time": 2.6441722, + "frequency": 0.2730383 + }, + { + "time": 2.6702948, + "frequency": 0.1870889 + }, + { + "time": 2.6877096, + "frequency": 0.3491878 + }, + { + "time": 2.7225397, + "frequency": 0.22581905 + }, + { + "time": 2.7631745, + "frequency": 0.30875006 + }, + { + "time": 2.812517, + "frequency": 0.19340809 + }, + { + "time": 2.9112017, + "frequency": 0.24421728 + }, + { + "time": 2.9402266, + "frequency": 0.35540995 + }, + { + "time": 2.9982765, + "frequency": 0.25089294 + }, + { + "time": 3.001179, + "frequency": 0.24601826 + }, + { + "time": 3.0621314, + "frequency": 0.2168543 + }, + { + "time": 3.0853515, + "frequency": 0.27925816 + }, + { + "time": 3.1143763, + "frequency": 0.025675790000000004 + }, + { + "time": 3.1782312, + "frequency": 0.04335469 + }, + { + "time": 3.201451, + "frequency": 0.17882342999999992 + }, + { + "time": 3.2449884, + "frequency": 0.02638607000000001 + }, + { + "time": 3.265306, + "frequency": 0.09472634 + }, + { + "time": 3.2972333, + "frequency": 0 + }, + { + "time": 3.3756008, + "frequency": 0.1772997499999999 + }, + { + "time": 3.3959184, + "frequency": 0.008477270000000009 + }, + { + "time": 3.4626756, + "frequency": 0.12316738999999992 + }, + { + "time": 3.477188, + "frequency": 0.019008710000000012 + }, + { + "time": 3.500408, + "frequency": 0.11451951999999992 + }, + { + "time": 3.5207255, + "frequency": 0.05201536000000001 + }, + { + "time": 3.5787754, + "frequency": 0.11102123999999995 + }, + { + "time": 3.6136053, + "frequency": 0.07548978999999997 + }, + { + "time": 3.6194103, + "frequency": 0.1818214899999999 + }, + { + "time": 3.6571426, + "frequency": 0.036624569999999995 + }, + { + "time": 3.706485, + "frequency": 0.09248478999999997 + }, + { + "time": 3.71229, + "frequency": 0.19041950999999993 + }, + { + "time": 3.73551, + "frequency": 0.030602109999999988 + }, + { + "time": 3.7848525, + "frequency": 0.13579948999999997 + }, + { + "time": 3.8022676, + "frequency": 0.03055257 + }, + { + "time": 3.8719273, + "frequency": 0.13092882999999994 + }, + { + "time": 3.9038548, + "frequency": 0.04573357 + }, + { + "time": 3.9154646, + "frequency": 0.12416131999999995 + }, + { + "time": 3.9560997, + "frequency": 0.05831555999999999 + }, + { + "time": 3.970612, + "frequency": 0.15521118999999992 + }, + { + "time": 3.9996371, + "frequency": 0.09378053000000001 + }, + { + "time": 4.0025396, + "frequency": 0.07239358999999998 + }, + { + "time": 4.0431743, + "frequency": 0.10183692999999998 + }, + { + "time": 4.051882, + "frequency": 0.24994028999999993 + }, + { + "time": 4.0721993, + "frequency": 0.08238538999999999 + }, + { + "time": 4.1244445, + "frequency": 0.07178508999999997 + }, + { + "time": 4.1360545, + "frequency": 0.16764781999999992 + }, + { + "time": 4.1563716, + "frequency": 0.009186250000000007 + }, + { + "time": 4.165079, + "frequency": 0.07609918999999996 + }, + { + "time": 4.205714, + "frequency": 0.07037003 + }, + { + "time": 4.2550564, + "frequency": 0.1549860699999999 + }, + { + "time": 4.281179, + "frequency": 0.05892644999999999 + }, + { + "time": 4.365351, + "frequency": 0.06182519 + }, + { + "time": 4.403084, + "frequency": 0.14237948999999994 + }, + { + "time": 4.420499, + "frequency": 0.002145360000000013 + }, + { + "time": 4.4669385, + "frequency": 0.11816248999999994 + }, + { + "time": 4.4843535, + "frequency": 0.04938118 + }, + { + "time": 4.516281, + "frequency": 0.08390813000000001 + }, + { + "time": 4.5540133, + "frequency": 0.007237209999999994 + }, + { + "time": 4.568526, + "frequency": 0.11433074999999991 + }, + { + "time": 4.6062584, + "frequency": 0.024402570000000012 + }, + { + "time": 4.649796, + "frequency": 0.11560146999999991 + }, + { + "time": 4.681723, + "frequency": 0.026954900000000004 + }, + { + "time": 4.722358, + "frequency": 0.12262112999999995 + }, + { + "time": 4.748481, + "frequency": 0.05707719 + }, + { + "time": 4.815238, + "frequency": 0.14654446999999993 + }, + { + "time": 4.8674827, + "frequency": 0.05428693000000001 + }, + { + "time": 4.925533, + "frequency": 0.10524306999999998 + }, + { + "time": 4.9400454, + "frequency": 0.18911103999999992 + }, + { + "time": 4.963265, + "frequency": 0.05256881999999999 + }, + { + "time": 4.998095, + "frequency": 0.12214828999999992 + }, + { + "time": 5.0009975, + "frequency": 0.13302836999999995 + }, + { + "time": 5.02712, + "frequency": 0.05161059000000001 + }, + { + "time": 5.0764623, + "frequency": 0.04336959000000001 + }, + { + "time": 5.0880723, + "frequency": 0.23492974578947357 + }, + { + "time": 5.114195, + "frequency": 0.16255698578947367 + }, + { + "time": 5.1519275, + "frequency": 0.24670849578947357 + }, + { + "time": 5.1954646, + "frequency": 0.18560311578947364 + }, + { + "time": 5.204172, + "frequency": 0.26142875578947355 + }, + { + "time": 5.233197, + "frequency": 0.2249304 + }, + { + "time": 5.2419047, + "frequency": 0.2276962457894736 + }, + { + "time": 5.265125, + "frequency": 0.2440343 + }, + { + "time": 5.297052, + "frequency": 0.23159993578947358 + }, + { + "time": 5.326077, + "frequency": 0.21303791 + }, + { + "time": 5.3841267, + "frequency": 0.1801601157894736 + }, + { + "time": 5.4334693, + "frequency": 0.24299246 + }, + { + "time": 5.4828115, + "frequency": 0.24149949578947355 + }, + { + "time": 5.5350566, + "frequency": 0.21195507 + }, + { + "time": 5.5582767, + "frequency": 0.19209734578947363 + }, + { + "time": 5.590204, + "frequency": 0.20017801 + }, + { + "time": 5.607619, + "frequency": 0.21838278578947362 + }, + { + "time": 5.6453514, + "frequency": 0.22328473578947358 + }, + { + "time": 5.6627665, + "frequency": 0.24021831 + }, + { + "time": 5.7672563, + "frequency": 0.36104733 + }, + { + "time": 5.807891, + "frequency": 0.28157806 + }, + { + "time": 5.825306, + "frequency": 0.41281676 + }, + { + "time": 5.8514285, + "frequency": 0.2564014 + }, + { + "time": 5.8833556, + "frequency": 0.36188826 + }, + { + "time": 5.9443083, + "frequency": 0.23946738 + }, + { + "time": 5.9501133, + "frequency": 0.29846185 + }, + { + "time": 5.9994555, + "frequency": 0.30950978 + }, + { + "time": 6.002358, + "frequency": 0.29254395 + }, + { + "time": 6.0517006, + "frequency": 0.26382223 + }, + { + "time": 6.060408, + "frequency": 0.44208494 + }, + { + "time": 6.1010427, + "frequency": 0.29997817 + }, + { + "time": 6.1097503, + "frequency": 0.43906894 + }, + { + "time": 6.170703, + "frequency": 0.2311851 + }, + { + "time": 6.1997275, + "frequency": 0.36359808 + }, + { + "time": 6.23746, + "frequency": 0.2191793 + }, + { + "time": 6.2577777, + "frequency": 0.31431857 + }, + { + "time": 6.2780952, + "frequency": 0.23709829 + }, + { + "time": 6.301315, + "frequency": 0.32600752 + }, + { + "time": 6.336145, + "frequency": 0.20662837 + }, + { + "time": 6.36517, + "frequency": 0.30984697 + }, + { + "time": 6.4609523, + "frequency": 0.21193331 + }, + { + "time": 6.4899774, + "frequency": 0.34713516 + }, + { + "time": 6.513197, + "frequency": 0.18006271 + }, + { + "time": 6.548027, + "frequency": 0.27479362 + }, + { + "time": 6.582857, + "frequency": 0.20759967 + }, + { + "time": 6.603174, + "frequency": 0.3577498 + }, + { + "time": 6.6670294, + "frequency": 0.37590942 + }, + { + "time": 6.7047615, + "frequency": 0.35381946 + }, + { + "time": 6.7105665, + "frequency": 0.2651313 + }, + { + "time": 6.7686167, + "frequency": 0.25740144 + }, + { + "time": 6.7802267, + "frequency": 0.32864285 + }, + { + "time": 6.846984, + "frequency": 0.23549514 + }, + { + "time": 6.881814, + "frequency": 0.39993203 + }, + { + "time": 6.907936, + "frequency": 0.25372142 + }, + { + "time": 6.942766, + "frequency": 0.4293708 + }, + { + "time": 6.9688888, + "frequency": 0.2936446 + }, + { + "time": 6.997914, + "frequency": 0.3051777 + }, + { + "time": 7.0008163, + "frequency": 0.30259886 + }, + { + "time": 7.041451, + "frequency": 0.23971431 + }, + { + "time": 7.0675735, + "frequency": 0.34661055 + }, + { + "time": 7.105306, + "frequency": 0.23623039 + }, + { + "time": 7.1488433, + "frequency": 0.21868579 + }, + { + "time": 7.186576, + "frequency": 0.3396961 + }, + { + "time": 7.209796, + "frequency": 0.2366171 + }, + { + "time": 7.2214055, + "frequency": 0.32937855 + }, + { + "time": 7.2736506, + "frequency": 0.10535271789473682 + }, + { + "time": 7.2968707, + "frequency": 0.2543720278947369 + }, + { + "time": 7.328798, + "frequency": 0.12710639789473682 + }, + { + "time": 7.3665304, + "frequency": 0.2658690878947369 + }, + { + "time": 7.4013605, + "frequency": 0.12063965789473685 + }, + { + "time": 7.43619, + "frequency": 0.2532721778947369 + }, + { + "time": 7.47102, + "frequency": 0.09502413789473683 + }, + { + "time": 7.4826303, + "frequency": 0.21771040789473683 + }, + { + "time": 7.523265, + "frequency": 0.24153755789473683 + }, + { + "time": 7.5435824, + "frequency": 0.14050562789473686 + }, + { + "time": 7.6509748, + "frequency": 0.15413425789473684 + }, + { + "time": 7.66839, + "frequency": 0.24571665789473687 + }, + { + "time": 7.7177324, + "frequency": 0.13124732789473686 + }, + { + "time": 7.740952, + "frequency": 0.25437673789473686 + }, + { + "time": 7.775782, + "frequency": 0.11203229789473684 + }, + { + "time": 7.833832, + "frequency": 0.2252659578947368 + }, + { + "time": 7.8657594, + "frequency": 0.12337301789473681 + }, + { + "time": 7.891882, + "frequency": 0.2633768978947369 + }, + { + "time": 7.9121995, + "frequency": 0.11822749789473685 + }, + { + "time": 7.952834, + "frequency": 0.22219205789473684 + }, + { + "time": 7.970249, + "frequency": 0.12113819789473684 + }, + { + "time": 7.9992743, + "frequency": 0.1933846578947368 + }, + { + "time": 8.002176, + "frequency": 0.15344129789473682 + }, + { + "time": 8.013786, + "frequency": 0.08884712789473687 + }, + { + "time": 8.054421, + "frequency": 0.19104713789473682 + }, + { + "time": 8.0892515, + "frequency": 0.11258026789473685 + }, + { + "time": 8.100862, + "frequency": 0.17815045789473682 + }, + { + "time": 8.141497, + "frequency": 0.09728151789473684 + }, + { + "time": 8.161814, + "frequency": 0.16820345789473684 + }, + { + "time": 8.196644, + "frequency": 0.09087684789473684 + }, + { + "time": 8.205351, + "frequency": 0.18030449789473685 + }, + { + "time": 8.234376, + "frequency": 0.11694791789473685 + }, + { + "time": 8.327256, + "frequency": 0.15278866789473683 + }, + { + "time": 8.362086, + "frequency": 0.09775215789473683 + }, + { + "time": 8.373696, + "frequency": 0.18890690789473685 + }, + { + "time": 8.472381, + "frequency": 0.11961696789473686 + }, + { + "time": 8.486894, + "frequency": 0.2213593778947368 + }, + { + "time": 8.513016, + "frequency": 0.08340582789473686 + }, + { + "time": 8.544943, + "frequency": 0.19651675789473683 + }, + { + "time": 8.553651, + "frequency": 0.12009383789473682 + }, + { + "time": 8.597188, + "frequency": 0.15988093789473684 + }, + { + "time": 8.637823, + "frequency": 0.11016165789473686 + }, + { + "time": 8.663945, + "frequency": 0.11475905789473684 + }, + { + "time": 8.713287, + "frequency": 0.2591425 + }, + { + "time": 8.733605, + "frequency": 0.19498108 + }, + { + "time": 8.80907, + "frequency": 0.21159461 + }, + { + "time": 8.814875, + "frequency": 0.2953294 + }, + { + "time": 8.85551, + "frequency": 0.1735399 + }, + { + "time": 8.87873, + "frequency": 0.35102252631578956 + }, + { + "time": 8.916462, + "frequency": 0.17820218 + }, + { + "time": 8.928072, + "frequency": 0.3295746663157896 + }, + { + "time": 8.997732, + "frequency": 0.31156216631578953 + }, + { + "time": 9.000635, + "frequency": 0.30775895631578953 + }, + { + "time": 9.020952, + "frequency": 0.17194651 + }, + { + "time": 9.047074, + "frequency": 0.3216281263157896 + }, + { + "time": 9.13415, + "frequency": 0.1910417 + }, + { + "time": 9.148662, + "frequency": 0.3856893863157896 + }, + { + "time": 9.174785, + "frequency": 0.17247428 + }, + { + "time": 9.206712, + "frequency": 0.32659837631578953 + }, + { + "time": 9.247347, + "frequency": 0.18003552 + }, + { + "time": 9.258957, + "frequency": 0.32381232631578954 + }, + { + "time": 9.302494, + "frequency": 0.20386273 + }, + { + "time": 9.314104, + "frequency": 0.4154063563157896 + }, + { + "time": 9.322811, + "frequency": 0.20667863 + }, + { + "time": 9.351836, + "frequency": 0.15830669 + }, + { + "time": 9.360544, + "frequency": 0.20962176 + }, + { + "time": 9.4679365, + "frequency": 0.18838899 + }, + { + "time": 9.485352, + "frequency": 0.31212612631578956 + }, + { + "time": 9.517279, + "frequency": 0.1678899 + }, + { + "time": 9.537596, + "frequency": 0.34711862631578955 + }, + { + "time": 9.578231, + "frequency": 0.18520823 + }, + { + "time": 9.636281, + "frequency": 0.19504032 + }, + { + "time": 9.644988, + "frequency": 0.3741463263157896 + }, + { + "time": 9.685623, + "frequency": 0.17018996 + }, + { + "time": 9.700136, + "frequency": 0.32649453631578956 + }, + { + "time": 9.7756, + "frequency": 0.19449723 + }, + { + "time": 9.7930155, + "frequency": 0.31934229631578953 + }, + { + "time": 9.856871, + "frequency": 0.16638751 + }, + { + "time": 9.874286, + "frequency": 0.37803448631578956 + }, + { + "time": 9.917823, + "frequency": 0.17419715 + }, + { + "time": 9.93814, + "frequency": 0.31612006631578954 + }, + { + "time": 9.999093, + "frequency": 0.27017 + }, + { + "time": 10.001995, + "frequency": 0.28219613 + }, + { + "time": 10.025215, + "frequency": 0.16759944 + }, + { + "time": 10.068752, + "frequency": 0.28931966 + }, + { + "time": 10.1500225, + "frequency": 0.21454264 + }, + { + "time": 10.164535, + "frequency": 0.29304862 + }, + { + "time": 10.179048, + "frequency": 0.19038384 + }, + { + "time": 10.257415, + "frequency": 0.1891973 + }, + { + "time": 10.277732, + "frequency": 0.26158553 + }, + { + "time": 10.312562, + "frequency": 0.19825241 + }, + { + "time": 10.32127, + "frequency": 0.29654065 + }, + { + "time": 10.350294, + "frequency": 0.21077529 + }, + { + "time": 10.405442, + "frequency": 0.14940925578947364 + }, + { + "time": 10.422857, + "frequency": 0.18587726 + }, + { + "time": 10.437369, + "frequency": 0.2116910157894735 + }, + { + "time": 10.475101, + "frequency": 0.19285597 + }, + { + "time": 10.4954195, + "frequency": 0.2125071657894735 + }, + { + "time": 10.536055, + "frequency": 0.19600877 + }, + { + "time": 10.547664, + "frequency": 0.17099148578947365 + }, + { + "time": 10.588299, + "frequency": 0.21505512 + }, + { + "time": 10.602812, + "frequency": 0.23274193578947344 + }, + { + "time": 10.628934, + "frequency": 0.17991067 + }, + { + "time": 10.660861, + "frequency": 0.19989828578947352 + }, + { + "time": 10.701496, + "frequency": 0.19390422 + }, + { + "time": 10.713106, + "frequency": 0.16705091578947365 + }, + { + "time": 10.805986, + "frequency": 0.19211629 + }, + { + "time": 10.829206, + "frequency": 0.17094091578947362 + }, + { + "time": 10.907574, + "frequency": 0.1882157 + }, + { + "time": 10.930794, + "frequency": 0.21344796578947348 + }, + { + "time": 10.971428, + "frequency": 0.17713332 + }, + { + "time": 10.997551, + "frequency": 0.15643571578947366 + }, + { + "time": 11.000453, + "frequency": 0.22558193 + }, + { + "time": 11.032381, + "frequency": 0.18014443 + }, + { + "time": 11.043991, + "frequency": 0.15524574578947364 + }, + { + "time": 11.087528, + "frequency": 0.20179416 + }, + { + "time": 11.099138, + "frequency": 0.33712736684210504 + }, + { + "time": 11.107845, + "frequency": 0.3230475010526316 + }, + { + "time": 11.13687, + "frequency": 0.1754058 + }, + { + "time": 11.151383, + "frequency": 0.14561412578947366 + }, + { + "time": 11.1775055, + "frequency": 0.18623681 + }, + { + "time": 11.203628, + "frequency": 0.32512219105263157 + }, + { + "time": 11.250068, + "frequency": 0.19427001 + }, + { + "time": 11.26458, + "frequency": 0.20397014578947353 + }, + { + "time": 11.290703, + "frequency": 0.17359759 + }, + { + "time": 11.325533, + "frequency": 0.14755798578947366 + }, + { + "time": 11.41551, + "frequency": 0.2024359 + }, + { + "time": 11.42712, + "frequency": 0.41885394105263163 + }, + { + "time": 11.43873, + "frequency": 0.20404246 + }, + { + "time": 11.464852, + "frequency": 0.15590423 + }, + { + "time": 11.476462, + "frequency": 0.21321246 + }, + { + "time": 11.583855, + "frequency": 0.18774547 + }, + { + "time": 11.60127, + "frequency": 0.3222712310526316 + }, + { + "time": 11.633197, + "frequency": 0.1674955 + }, + { + "time": 11.662222, + "frequency": 0.21448222 + }, + { + "time": 11.752199, + "frequency": 0.19673541 + }, + { + "time": 11.760907, + "frequency": 0.3969428810526316 + }, + { + "time": 11.801541, + "frequency": 0.1721483 + }, + { + "time": 11.816054, + "frequency": 0.3399856810526316 + }, + { + "time": 11.891519, + "frequency": 0.18555057 + }, + { + "time": 11.955374, + "frequency": 0.3202616410526316 + }, + { + "time": 11.998911, + "frequency": 0.20252049 + }, + { + "time": 12.001814, + "frequency": 0.19231153 + }, + { + "time": 12.027936, + "frequency": 0.16901511 + }, + { + "time": 12.039546, + "frequency": 0.2139403 + }, + { + "time": 12.091791, + "frequency": 0.20437211 + }, + { + "time": 12.100498, + "frequency": 0.38587782105263163 + }, + { + "time": 12.126621, + "frequency": 0.18718725 + }, + { + "time": 12.149841, + "frequency": 0.20369412 + }, + { + "time": 12.158548, + "frequency": 0.3658334910526316 + }, + { + "time": 12.173061, + "frequency": 0.18686175 + }, + { + "time": 12.199183, + "frequency": 0.1661302 + }, + { + "time": 12.251429, + "frequency": 0.31697717105263157 + }, + { + "time": 12.263039, + "frequency": 0.20296031 + }, + { + "time": 12.271746, + "frequency": 0.3939548210526316 + }, + { + "time": 12.286259, + "frequency": 0.19416909 + }, + { + "time": 12.344308, + "frequency": 0.17184986 + }, + { + "time": 12.355918, + "frequency": 0.3292268710526316 + }, + { + "time": 12.376236, + "frequency": 0.17228687 + }, + { + "time": 12.39365, + "frequency": 0.3186567310526316 + }, + { + "time": 12.40526, + "frequency": 0.17544349 + }, + { + "time": 12.4517, + "frequency": 0.1733634 + }, + { + "time": 12.46331, + "frequency": 0.3771946710526316 + }, + { + "time": 12.501042, + "frequency": 0.3241085 + }, + { + "time": 12.52136, + "frequency": 0.21377994 + }, + { + "time": 12.53297, + "frequency": 0.28864267 + }, + { + "time": 12.5619955, + "frequency": 0.27363658 + }, + { + "time": 12.5678005, + "frequency": 0.38603535 + }, + { + "time": 12.593923, + "frequency": 0.41242352 + }, + { + "time": 12.608435, + "frequency": 0.3721612 + }, + { + "time": 12.61424, + "frequency": 0.52642065 + }, + { + "time": 12.620045, + "frequency": 0.42814785 + } + ] + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.haptic.meta new file mode 100644 index 0000000..c750b67 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e6d33a698322947bba2f08602e361b37 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.wav b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.wav new file mode 100644 index 0000000..3d5a86c Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.wav.meta new file mode 100644 index 0000000..5ae32df --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarEngine2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 1c051810593da4d878348fe61170046f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.haptic new file mode 100644 index 0000000..c51bf5a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Car Screech 1.wav","project":"Car Screech 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00037210455},{"time":0.0010204081,"amplitude":0.00037210455},{"time":0.099002264,"amplitude":0.11346045},{"time":0.122018136,"amplitude":0.23675068},{"time":0.20201814,"amplitude":0.2960508},{"time":0.23501134,"amplitude":0.49670798},{"time":0.25501132,"amplitude":0.5401035},{"time":0.2770068,"amplitude":0.07002062999999997},{"time":0.29501134,"amplitude":0.5554386},{"time":0.32501134,"amplitude":0.023144029999999982},{"time":0.32900226,"amplitude":0.4873516},{"time":0.34201813,"amplitude":0.04664498},{"time":0.36201814,"amplitude":0.45283037},{"time":0.39900225,"amplitude":0},{"time":0.41301587,"amplitude":0.4766074},{"time":0.44201812,"amplitude":0.028872759999999997},{"time":0.45900226,"amplitude":0.5009696},{"time":0.48900226,"amplitude":0.05421313},{"time":0.51900226,"amplitude":0.56589544},{"time":0.53501135,"amplitude":0.04363150789473685},{"time":0.53900224,"amplitude":0.633413},{"time":0.5630159,"amplitude":0.07998865789473679},{"time":0.58201814,"amplitude":0.66548264},{"time":0.5940136,"amplitude":0.10979085789473679},{"time":0.60501134,"amplitude":0.6135964},{"time":0.6190023,"amplitude":0.11121885789473678},{"time":0.6290023,"amplitude":0.7297021},{"time":0.67501134,"amplitude":0.11295314000000004},{"time":0.69,"amplitude":0.6915495},{"time":0.7340136,"amplitude":0},{"time":0.7490023,"amplitude":0.6524828},{"time":0.7760091,"amplitude":0.634736},{"time":0.80199546,"amplitude":0.024369420000000003},{"time":0.85199547,"amplitude":0.581314},{"time":0.88,"amplitude":0.046262696315789435},{"time":0.8809977,"amplitude":0.5519535},{"time":0.9080045,"amplitude":0.07223798631578943},{"time":0.9340136,"amplitude":0.5231944},{"time":0.9440136,"amplitude":0.08502338631578943},{"time":0.9619954,"amplitude":0.45551682},{"time":1.0009977,"amplitude":0.36525357},{"time":1.0019954,"amplitude":0.3626293},{"time":1.0109978,"amplitude":0.06213387052631574},{"time":1.0119954,"amplitude":0.4735863},{"time":1.0209978,"amplitude":0.02177636999999988},{"time":1.0370067,"amplitude":0.020271599999999834},{"time":1.04,"amplitude":0.54051906},{"time":1.0609977,"amplitude":0.024227810526315785},{"time":1.0619954,"amplitude":0.37283278},{"time":1.0709977,"amplitude":0.3776461},{"time":1.0780045,"amplitude":0.03812357052631579},{"time":1.0840136,"amplitude":0.4094114},{"time":1.0930159,"amplitude":0.43658823},{"time":1.1030159,"amplitude":0.3267152},{"time":1.116009,"amplitude":0.31091923},{"time":1.13,"amplitude":0.0308374036842105},{"time":1.1380045,"amplitude":0.026807633684210512},{"time":1.1390022,"amplitude":0.27533594},{"time":1.1509978,"amplitude":0.03892950368421052},{"time":1.1550113,"amplitude":0.30095991},{"time":1.1680045,"amplitude":0.20555204},{"time":1.186009,"amplitude":0.024979601052631563},{"time":1.1920182,"amplitude":0.20714256},{"time":1.2050114,"amplitude":0.05636250105263161},{"time":1.2140136,"amplitude":0.17040421},{"time":1.2150114,"amplitude":0.22744997},{"time":1.2320181,"amplitude":0.036619711052631565},{"time":1.236009,"amplitude":0.2000957},{"time":1.246009,"amplitude":0.22154456},{"time":1.2710204,"amplitude":0.02439375052631579},{"time":1.2760091,"amplitude":0.21360543},{"time":1.289025,"amplitude":0.022236670526315783},{"time":1.2970067,"amplitude":0.0345852205263158},{"time":1.3120182,"amplitude":0.11471438},{"time":1.3210204,"amplitude":0.14595644},{"time":1.3400227,"amplitude":0.08286558},{"time":1.3630159,"amplitude":0.045496967},{"time":1.4020181,"amplitude":0.017726123},{"time":1.4100226,"amplitude":0.027593013},{"time":1.465034,"amplitude":0.006873979},{"time":1.5020181,"amplitude":0.0013641283},{"time":1.5022676,"amplitude":0.0013641283},{"time":1.5022676,"amplitude":0.0013641283}],"frequency":[{"time":0,"frequency":0.65359634},{"time":0.0058049876,"frequency":0.805986},{"time":0.023219952,"frequency":0.46857825},{"time":0.03482993,"frequency":0.8359213},{"time":0.04643991,"frequency":0.6904928},{"time":0.12770975,"frequency":0.83719426},{"time":0.13931973,"frequency":0.672542},{"time":0.17705216,"frequency":0.65184903},{"time":0.18866213,"frequency":0.7914811},{"time":0.252517,"frequency":0.6341309},{"time":0.3018594,"frequency":0.71881735},{"time":0.33959183,"frequency":0.5433451},{"time":0.3599093,"frequency":0.6406483},{"time":0.42956915,"frequency":0.68301904},{"time":0.4556916,"frequency":0.53458816},{"time":0.5340589,"frequency":0.8374649},{"time":0.54276645,"frequency":0.63597906},{"time":0.5601814,"frequency":0.7470065},{"time":0.6211338,"frequency":0.5276344},{"time":0.6356462,"frequency":0.6609967},{"time":0.69659865,"frequency":0.6417868},{"time":0.7140136,"frequency":0.5496418},{"time":0.74303854,"frequency":0.69182074},{"time":0.7546485,"frequency":0.58637035},{"time":0.78367347,"frequency":0.7756609},{"time":0.7923809,"frequency":0.5678988},{"time":0.90267575,"frequency":0.63155884},{"time":0.9142857,"frequency":0.7773482},{"time":0.93460315,"frequency":0.6010886},{"time":0.9984581,"frequency":0.6684848},{"time":1.0013604,"frequency":0.58380187},{"time":1.0187755,"frequency":0.5579051},{"time":1.0274829,"frequency":0.7236747},{"time":1.0361904,"frequency":0.6038563},{"time":1.0478004,"frequency":0.7276611},{"time":1.0855328,"frequency":0.6886986},{"time":1.1029477,"frequency":0.56349695},{"time":1.1174603,"frequency":0.76152617},{"time":1.1406802,"frequency":0.6279315},{"time":1.1551926,"frequency":0.7065883},{"time":1.1726077,"frequency":0.63969874},{"time":1.1987301,"frequency":0.7343665},{"time":1.2248526,"frequency":0.646038},{"time":1.2422675,"frequency":0.7204922},{"time":1.2567799,"frequency":0.5616419},{"time":1.2625849,"frequency":0.7517572},{"time":1.3003174,"frequency":0.6768092},{"time":1.3119273,"frequency":0.50881165},{"time":1.3409523,"frequency":0.64305466},{"time":1.3467573,"frequency":0.53729504},{"time":1.3728797,"frequency":0.7129505},{"time":1.3873922,"frequency":0.58586615},{"time":1.3931972,"frequency":0.68350375},{"time":1.4106121,"frequency":0.533783},{"time":1.4309297,"frequency":0.7293321},{"time":1.4483446,"frequency":0.52240634},{"time":1.4570521,"frequency":0.26959738},{"time":1.4715645,"frequency":0.06630105},{"time":1.480272,"frequency":0.25082967},{"time":1.4889795,"frequency":0.13332742}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.haptic.meta new file mode 100644 index 0000000..41b58aa --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c6a6f0a33d034415d8d9fb7447656551 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.wav b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.wav new file mode 100644 index 0000000..0840317 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.wav.meta new file mode 100644 index 0000000..7508cd4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f8aafce49a15241159f0f5a7cef8a45b +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.haptic new file mode 100644 index 0000000..77086e9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Car Screech 2.wav","project":"Car Screech 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.13943563,"emphasis":{"amplitude":0.17429455,"frequency":0.17429455}},{"time":0.0010204081,"amplitude":0.17429455},{"time":0.009002267,"amplitude":0.44819987},{"time":0.07102041,"amplitude":0.053735884210526275},{"time":0.0840136,"amplitude":0.31697223},{"time":0.11600907,"amplitude":0.16958121421052608},{"time":0.11800453,"amplitude":0.4881546},{"time":0.14301588,"amplitude":0.15379456421052606},{"time":0.1610204,"amplitude":0.48748183},{"time":0.19301587,"amplitude":0.20112846421052602},{"time":0.2040136,"amplitude":0.48157525},{"time":0.24002267,"amplitude":0.1346633868421051},{"time":0.2410204,"amplitude":0.5300612,"emphasis":{"amplitude":0.66257644,"frequency":0.03782463}},{"time":0.29201815,"amplitude":0.40017512},{"time":0.3410204,"amplitude":0.07611942631578954},{"time":0.40600905,"amplitude":0.31874236},{"time":0.42600906,"amplitude":0.10401924052631582},{"time":0.4470068,"amplitude":0.46569785},{"time":0.48999998,"amplitude":0.12831825789473683},{"time":0.49600905,"amplitude":0.57517904},{"time":0.52900225,"amplitude":0.1129981878947369},{"time":0.5360091,"amplitude":0.5720114},{"time":0.58301586,"amplitude":0.1200159178947369},{"time":0.58900225,"amplitude":0.4831525},{"time":0.6140136,"amplitude":0.07795423684210524},{"time":0.6240136,"amplitude":0.40609205},{"time":0.6540136,"amplitude":0.10183006684210523},{"time":0.66600907,"amplitude":0.43936393},{"time":0.71301585,"amplitude":0.50306135},{"time":0.7280045,"amplitude":0.32344806},{"time":0.79900223,"amplitude":0.39388382},{"time":0.8080045,"amplitude":0.5384652},{"time":0.83900225,"amplitude":0.09501938473684214},{"time":0.8670068,"amplitude":0.11114445473684208},{"time":0.88800454,"amplitude":0.51195574},{"time":0.9119955,"amplitude":0.04784891000000008},{"time":0.92199546,"amplitude":0.5358739},{"time":0.9440136,"amplitude":0.10530715000000011},{"time":0.9550113,"amplitude":0.48277375},{"time":0.9709977,"amplitude":0.1041745000000001},{"time":1.0009977,"amplitude":0.44729593},{"time":1.0019954,"amplitude":0.43718404},{"time":1.0209978,"amplitude":0.03827702000000006},{"time":1.0370067,"amplitude":0.43834946},{"time":1.0490023,"amplitude":0.2144823726315789},{"time":1.0519954,"amplitude":0.5620164},{"time":1.076009,"amplitude":0.1496845536842105},{"time":1.1,"amplitude":0.09784013368421056},{"time":1.11,"amplitude":0.44063553},{"time":1.1290022,"amplitude":0.14534869368421047},{"time":1.1570067,"amplitude":0.4700496},{"time":1.1780045,"amplitude":0.49404457},{"time":1.2250113,"amplitude":0.09151545894736836},{"time":1.2350113,"amplitude":0.41057447},{"time":1.2490249,"amplitude":0.13892311894736836},{"time":1.2550113,"amplitude":0.51418144},{"time":1.2820181,"amplitude":0.11127791894736834},{"time":1.2840136,"amplitude":0.439575},{"time":1.306009,"amplitude":0.08639479894736839},{"time":1.3100226,"amplitude":0.52738214},{"time":1.3250114,"amplitude":0.12337268578947345},{"time":1.3400227,"amplitude":0.47752622},{"time":1.3770294,"amplitude":0.079046245263158},{"time":1.4290249,"amplitude":0.27605623},{"time":1.4540136,"amplitude":0.13478206},{"time":1.5320181,"amplitude":0.13892865},{"time":1.5400226,"amplitude":0.23056835},{"time":1.5800227,"amplitude":0.05023493131578951},{"time":1.5820181,"amplitude":0.23110057},{"time":1.6290249,"amplitude":0.06561402631578951},{"time":1.6360317,"amplitude":0.23262773},{"time":1.7090249,"amplitude":0.044810081052631574},{"time":1.7130386,"amplitude":0.19791739},{"time":1.7480272,"amplitude":0.06249794105263159},{"time":1.7530385,"amplitude":0.20913392},{"time":1.7860317,"amplitude":0.08966536},{"time":1.8090476,"amplitude":0.14555807},{"time":1.8670521,"amplitude":0.15778227},{"time":1.9000453,"amplitude":0.013684809157894743},{"time":1.9260544,"amplitude":0.17889734},{"time":2.0000453,"amplitude":0.04658961315789475},{"time":2.001043,"amplitude":0.045953093157894746},{"time":2.0170522,"amplitude":0.15260202},{"time":2.0400453,"amplitude":0.025387153157894738},{"time":2.0640361,"amplitude":0.14624628},{"time":2.091043,"amplitude":0.019753173157894745},{"time":2.0980499,"amplitude":0.16484469},{"time":2.1330385,"amplitude":0.03745859315789474},{"time":2.135034,"amplitude":0.17494921},{"time":2.1570294,"amplitude":0.04010219315789473},{"time":2.1680272,"amplitude":0.1430409},{"time":2.2410204,"amplitude":0.059396032},{"time":2.2820182,"amplitude":0.13393646},{"time":2.3190248,"amplitude":0.071755566},{"time":2.3300226,"amplitude":0.15759362},{"time":2.3760316,"amplitude":0.07236327},{"time":2.3880272,"amplitude":0.13917273},{"time":2.4040136,"amplitude":0.08394636},{"time":2.426009,"amplitude":0.14241062},{"time":2.4440136,"amplitude":0.080568366},{"time":2.452018,"amplitude":0.17196304},{"time":2.4700227,"amplitude":0.10008627},{"time":2.4860091,"amplitude":0.14643824},{"time":2.5040135,"amplitude":0.08275124},{"time":2.5310204,"amplitude":0.08632127},{"time":2.5330157,"amplitude":0.1606942},{"time":2.566009,"amplitude":0.082681865},{"time":2.5750113,"amplitude":0.20148544},{"time":2.5919955,"amplitude":0.112454124},{"time":2.5940135,"amplitude":0.21244036},{"time":2.6129932,"amplitude":0.11504156},{"time":2.6350112,"amplitude":0.1496688},{"time":2.6570067,"amplitude":0.081642404},{"time":2.7009976,"amplitude":0.110912696},{"time":2.7359862,"amplitude":0.05840452},{"time":2.7409978,"amplitude":0.13144635},{"time":2.8079817,"amplitude":0.049588975},{"time":2.8269842,"amplitude":0.09439269},{"time":2.8549886,"amplitude":0.053566176},{"time":2.8569841,"amplitude":0.15049289},{"time":2.8949885,"amplitude":0.030888528},{"time":2.8951247,"amplitude":0.030888528},{"time":2.8951247,"amplitude":0.030888528}],"frequency":[{"time":0,"frequency":0.2535629},{"time":0.07256235,"frequency":0.34162864},{"time":0.1509297,"frequency":0.3379466},{"time":0.17995465,"frequency":0.41214538},{"time":0.20027211,"frequency":0.29835135},{"time":0.264127,"frequency":0.5094371},{"time":0.28154194,"frequency":0.29946056},{"time":0.34829932,"frequency":0.45613822},{"time":0.38603175,"frequency":0.37099946},{"time":0.39764172,"frequency":0.6066413},{"time":0.4092517,"frequency":0.26553696},{"time":0.43827665,"frequency":0.52790475},{"time":0.510839,"frequency":0.40609157},{"time":0.53696144,"frequency":0.52187794},{"time":0.5485714,"frequency":0.3316688},{"time":0.5979138,"frequency":0.61082935},{"time":0.6646712,"frequency":0.43936694},{"time":0.67918366,"frequency":0.59404904},{"time":0.69369614,"frequency":0.3969505},{"time":0.7198186,"frequency":0.62633306},{"time":0.73142856,"frequency":0.47304407},{"time":0.7604535,"frequency":0.6211748},{"time":0.7720635,"frequency":0.45036602},{"time":0.8156009,"frequency":0.37792832},{"time":0.8533333,"frequency":0.52920943},{"time":0.8765533,"frequency":0.32354644},{"time":0.88816327,"frequency":0.47798046},{"time":0.9462131,"frequency":0.35718805},{"time":0.9723356,"frequency":0.5051955},{"time":0.9984581,"frequency":0.36582226},{"time":1.0013604,"frequency":0.3872896},{"time":1.0274829,"frequency":0.48483697},{"time":1.0768254,"frequency":0.36919722},{"time":1.0971428,"frequency":0.5439116},{"time":1.1580951,"frequency":0.35078323},{"time":1.1929251,"frequency":0.5221905},{"time":1.2422675,"frequency":0.1781079},{"time":1.2654874,"frequency":0.40282336},{"time":1.2858049,"frequency":0.26227054},{"time":1.3090248,"frequency":0.3332036},{"time":1.3235373,"frequency":0.190338},{"time":1.3670747,"frequency":0.42892203},{"time":1.3757823,"frequency":0.2208944},{"time":1.4338322,"frequency":0.30205783},{"time":1.468662,"frequency":0.16397457},{"time":1.4860771,"frequency":0.26681256},{"time":1.5121995,"frequency":0.17876007},{"time":1.5238094,"frequency":0.3212516},{"time":1.5673468,"frequency":0.25984275},{"time":1.6399093,"frequency":0.2300493},{"time":1.6486167,"frequency":0.327347},{"time":1.756009,"frequency":0.2255797},{"time":1.7705214,"frequency":0.28979734},{"time":1.8140589,"frequency":0.2042129},{"time":1.8227663,"frequency":0.285613},{"time":1.9040362,"frequency":0.23631933},{"time":1.9301586,"frequency":0.30387285},{"time":1.9475737,"frequency":0.20437802},{"time":1.991111,"frequency":0.33373818},{"time":1.9998186,"frequency":0.25049463},{"time":2.002721,"frequency":0.25943682},{"time":2.0172334,"frequency":0.23469742},{"time":2.031746,"frequency":0.4109677},{"time":2.037551,"frequency":0.29192933},{"time":2.0781858,"frequency":0.22354525},{"time":2.1217232,"frequency":0.33312142},{"time":2.1304307,"frequency":0.20158233},{"time":2.1478457,"frequency":0.28917214},{"time":2.1710656,"frequency":0.21231838},{"time":2.1826756,"frequency":0.4229215726315791},{"time":2.226213,"frequency":0.4383036826315791},{"time":2.2639456,"frequency":0.21404333},{"time":2.295873,"frequency":0.4228363526315791},{"time":2.3510203,"frequency":0.36729633263157907},{"time":2.3962809999999997,"frequency":0.6058818999999998},{"time":2.4136957999999997,"frequency":0.48169083999999984},{"time":2.4311107999999995,"frequency":0.5831936999999998},{"time":2.4543305999999996,"frequency":0.4976435499999998},{"time":2.4659405999999997,"frequency":0.5917173199999999},{"time":2.5385031,"frequency":0.4613621099999998},{"time":2.5559179999999997,"frequency":0.5133103499999998},{"time":2.6371878999999994,"frequency":0.5553164999999998},{"time":2.6662127999999994,"frequency":0.4760993699999998},{"time":2.6981403999999998,"frequency":0.6545492299999998},{"time":2.7184575999999994,"frequency":0.5819310699999998},{"time":2.7968250999999995,"frequency":0.5221012699999998},{"time":2.8258499999999995,"frequency":0.6689009999999999},{"time":2.8461676,"frequency":0.5307213099999999},{"time":2.9042174999999997,"frequency":0.5617051999999998},{"time":2.9100224999999997,"frequency":0.7548880999999998}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.haptic.meta new file mode 100644 index 0000000..9a3fca9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 86eb5bb1ab5ce46cdb049f224abba5a0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.wav b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.wav new file mode 100644 index 0000000..3b4f5d3 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.wav.meta new file mode 100644 index 0000000..f517f40 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/CarScreech2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 8484d859781934d68aeb95578a86949f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.haptic new file mode 100644 index 0000000..53b4e80 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Crumbling 1.wav","project":"Crumbling 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.028809732},{"time":0.0010208333,"amplitude":0.028809732},{"time":0.0060208333,"amplitude":0.15879314},{"time":0.059,"amplitude":0.11102935},{"time":0.06,"amplitude":0.31370133,"emphasis":{"amplitude":0.39212665,"frequency":0.020853806}},{"time":0.089,"amplitude":0.15725423},{"time":0.090020835,"amplitude":0.4062541},{"time":0.12902083,"amplitude":0.11336442},{"time":0.13402084,"amplitude":0.5044369},{"time":0.15702084,"amplitude":0.21944308},{"time":0.18102083,"amplitude":0.09952587},{"time":0.24802083,"amplitude":0.060301222},{"time":0.25102082,"amplitude":0.23662648},{"time":0.289,"amplitude":0.08578321},{"time":0.29299998,"amplitude":0.26932326},{"time":0.336,"amplitude":0.1162601},{"time":0.339,"amplitude":0.27957666},{"time":0.399,"amplitude":0.054586507},{"time":0.42,"amplitude":0.13251011},{"time":0.471,"amplitude":0.048749056},{"time":0.502,"amplitude":0.16719607},{"time":0.503,"amplitude":0.38165662,"emphasis":{"amplitude":0.47707078,"frequency":0.105687715}},{"time":0.532,"amplitude":0.17780165},{"time":0.579,"amplitude":0.052448854},{"time":0.593,"amplitude":0.24913757},{"time":0.626,"amplitude":0.076678604},{"time":0.681,"amplitude":0.047467314},{"time":0.687,"amplitude":0.32955697},{"time":0.721,"amplitude":0.0857396},{"time":0.77599996,"amplitude":0.07655825},{"time":0.778,"amplitude":0.42241108},{"time":0.807,"amplitude":0.22262813},{"time":0.841,"amplitude":0.07801151},{"time":0.84999996,"amplitude":0.31071705},{"time":0.869,"amplitude":0.14550586},{"time":0.911,"amplitude":0.07433066},{"time":0.913,"amplitude":0.22075763},{"time":0.932,"amplitude":0.118935205},{"time":0.962,"amplitude":0.16589347},{"time":0.994,"amplitude":0.051575273},{"time":1.001,"amplitude":0.12750779},{"time":1.002,"amplitude":0.12203161},{"time":1.015,"amplitude":0.072055876},{"time":1.055,"amplitude":0.021351904},{"time":1.056,"amplitude":0.2002592},{"time":1.069,"amplitude":0.1414677},{"time":1.0699999,"amplitude":0.3907634},{"time":1.1,"amplitude":0.14048184},{"time":1.101,"amplitude":0.21253626},{"time":1.1159999,"amplitude":0.120512374},{"time":1.1389999,"amplitude":0.06020959},{"time":1.14,"amplitude":0.1093851},{"time":1.174,"amplitude":0.04701302},{"time":1.176,"amplitude":0.15400356},{"time":1.2080208,"amplitude":0.050944507},{"time":1.2090209,"amplitude":0.13649163},{"time":1.2210208,"amplitude":0.09275901},{"time":1.2560208,"amplitude":0.030866165},{"time":1.2620208,"amplitude":0.1627142},{"time":1.2810208,"amplitude":0.0830574},{"time":1.2820208,"amplitude":0.15759084},{"time":1.3050208,"amplitude":0.07352926},{"time":1.3060209,"amplitude":0.1349411},{"time":1.3280208,"amplitude":0.06341401},{"time":1.3600209,"amplitude":0.023086054},{"time":1.3650209,"amplitude":0.3049903},{"time":1.3900208,"amplitude":0.117868975},{"time":1.4160209,"amplitude":0.0432386},{"time":1.4170208,"amplitude":0.08041696},{"time":1.4510208,"amplitude":0.03344577},{"time":1.4860208,"amplitude":0.019798612},{"time":1.4890208,"amplitude":0.0867583},{"time":1.5240208,"amplitude":0.034290183},{"time":1.5340208,"amplitude":0.07390908},{"time":1.5650208,"amplitude":0.025191167},{"time":1.5670208,"amplitude":0.11211504},{"time":1.6010208,"amplitude":0.03149151},{"time":1.6120209,"amplitude":0.07332813},{"time":1.6140208,"amplitude":0.18456966},{"time":1.6440208,"amplitude":0.06499673},{"time":1.6590416,"amplitude":0.04936517},{"time":1.6592292,"amplitude":0.04936517},{"time":1.6592292,"amplitude":0.04936517}],"frequency":[{"time":0,"frequency":0.3357337010526314},{"time":0.04333333100000002,"frequency":0.6501018789473683},{"time":0.05399999800000002,"frequency":0.27938852105263134},{"time":0.11266667000000002,"frequency":0.5943371289473682},{"time":0.12599999500000003,"frequency":0.28592639105263135},{"time":0.14999999000000003,"frequency":0.7079539789473682},{"time":0.16866666000000002,"frequency":0.3464437010526314},{"time":0.21133333,"frequency":0.2839090210526314},{"time":0.27533333000000004,"frequency":0.4429736210526313},{"time":0.36066665000000003,"frequency":0.5085313810526313},{"time":0.46999998000000004,"frequency":0.18162205105263154},{"time":0.494,"frequency":0.49861728105263126},{"time":0.57133333,"frequency":0.4757021610526313},{"time":0.5953333000000001,"frequency":0.17977728105263158},{"time":0.6113333,"frequency":0.8365395178947366},{"time":0.63,"frequency":0.2909751710526314},{"time":0.64866667,"frequency":0.8556677178947365},{"time":0.686,"frequency":0.18950795105263155},{"time":0.7073333,"frequency":0.7833651578947367},{"time":0.734,"frequency":0.1836886210526316},{"time":0.7419999700000001,"frequency":0.4552319210526312},{"time":0.7953333,"frequency":0.49564362105263127},{"time":0.8140000000000001,"frequency":0.2655065210526314},{"time":0.82999997,"frequency":0.4405352210526312},{"time":0.8513333000000001,"frequency":0.15595358105263152},{"time":0.878,"frequency":0.1703019010526316},{"time":0.9233333300000001,"frequency":0.45919112105263127},{"time":0.95533334,"frequency":0.5022799910526312},{"time":1.0086667,"frequency":0.21725742105263143},{"time":1.0219999400000002,"frequency":0.4178509210526313},{"time":1.0246667,"frequency":0.37876642105263136},{"time":1.0673334,"frequency":0.2019069410526315},{"time":1.078,"frequency":0.5136120810526312},{"time":1.1073333,"frequency":0.2515069410526314},{"time":1.1446667,"frequency":0.1040927110526316},{"time":1.1606667,"frequency":0.7382010721052632},{"time":1.1873334,"frequency":0.18655335105263157},{"time":1.1953334,"frequency":0.825750142105263},{"time":1.2193333,"frequency":0.19725375105263154},{"time":1.2566667,"frequency":0.7905836021052631},{"time":1.2673334,"frequency":0.11294678105263159},{"time":1.2940001,"frequency":0.23230477105263142},{"time":1.3046667,"frequency":0.843357972105263},{"time":1.3153334,"frequency":0.2379110910526314},{"time":1.3286667,"frequency":0.5165375210526313},{"time":1.342,"frequency":0.11990758105263158},{"time":1.374,"frequency":0.10005644105263159},{"time":1.3873333,"frequency":0.3630494210526314},{"time":1.4140001,"frequency":0.09710668105263157},{"time":1.446,"frequency":0.30838256105263134},{"time":1.462,"frequency":0.12392320105263156},{"time":1.502,"frequency":0.27123902105263137},{"time":1.51,"frequency":0.8489999263157892},{"time":1.5313334,"frequency":0.14684888105263155},{"time":1.5446667,"frequency":0.8387166263157892},{"time":1.5793334,"frequency":0.1056074810526316},{"time":1.5846667,"frequency":0.8326535263157893},{"time":1.6086667000000001,"frequency":0.21438389105263148},{"time":1.6353333,"frequency":0.8168568263157893},{"time":1.67,"frequency":0.19736345105263153}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.haptic.meta new file mode 100644 index 0000000..c587ff6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0f4b4b3adf571488ea5e1924897beae6 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.wav b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.wav new file mode 100644 index 0000000..b9f60dd Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.wav.meta new file mode 100644 index 0000000..4f8eef4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/Crumbling1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: d60ddf9cac3b248c4953a4ba37dd6c59 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.haptic new file mode 100644 index 0000000..2d82ae4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Ice Cubes 1.wav","project":"Ice Cubes 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0038858808},{"time":0.001814059,"amplitude":0.43480736,"emphasis":{"amplitude":0.5435092,"frequency":0.9080946}},{"time":0.03537415,"amplitude":0.31196988},{"time":0.039002266,"amplitude":0.6371988,"emphasis":{"amplitude":0.7964985,"frequency":0.7955659}},{"time":0.06485261,"amplitude":0.39074117},{"time":0.11473923,"amplitude":0.33494285},{"time":0.11519274,"amplitude":0.7637071,"emphasis":{"amplitude":0.95463383,"frequency":0.9799858}},{"time":0.16689342,"amplitude":0.18428023},{"time":0.18866213,"amplitude":0.08060481},{"time":0.26757368,"amplitude":0.032713134},{"time":0.31882086,"amplitude":0.074108444},{"time":0.3328798,"amplitude":0.26857},{"time":0.3696145,"amplitude":0.23504698},{"time":0.37052155,"amplitude":0.5119288,"emphasis":{"amplitude":0.639911,"frequency":0.9387402}},{"time":0.39954647,"amplitude":0.31945843},{"time":0.40272108,"amplitude":0.54715896,"emphasis":{"amplitude":0.6839487,"frequency":0.76235145}},{"time":0.42675737,"amplitude":0.2976595},{"time":0.47256237,"amplitude":0.04773425},{"time":0.60725623,"amplitude":0.0015542997},{"time":0.63038546,"amplitude":0.0889324},{"time":0.63356006,"amplitude":0.4355881,"emphasis":{"amplitude":0.5444851,"frequency":0.8096991}},{"time":0.65442175,"amplitude":0.27184948},{"time":0.68208617,"amplitude":0.2753388},{"time":0.7129252,"amplitude":0.10398839},{"time":0.71337867,"amplitude":0.21686623,"emphasis":{"amplitude":0.2710828,"frequency":0.92579013}},{"time":0.73741496,"amplitude":0.11143041},{"time":0.76870745,"amplitude":0.111530565},{"time":0.7746032,"amplitude":0.5965294,"emphasis":{"amplitude":0.7456618,"frequency":0.7464004}},{"time":0.80045354,"amplitude":0.26848668},{"time":0.82312924,"amplitude":0.13706237},{"time":0.82358277,"amplitude":0.46093398,"emphasis":{"amplitude":0.57616746,"frequency":0.9717552}},{"time":0.85396826,"amplitude":0.1681938},{"time":0.9097506,"amplitude":0.0702586},{"time":0.91020405,"amplitude":0.8038229},{"time":0.92834467,"amplitude":0.40071782},{"time":0.9573696,"amplitude":0.1534275},{"time":1.0199547,"amplitude":0.049196042},{"time":1.0213152,"amplitude":0.17614113},{"time":1.0870749,"amplitude":0.031787924},{"time":1.1768707,"amplitude":0.0064946306},{"time":1.5664399,"amplitude":0.00035022787},{"time":1.5664853,"amplitude":0.00035022787}],"frequency":[{"time":0,"frequency":0.7618525},{"time":0.023293462,"frequency":0.45379257},{"time":0.06988038,"frequency":0.36769128},{"time":0.09317385,"frequency":0.7463242},{"time":0.19799443,"frequency":0.49144125},{"time":0.22128788,"frequency":0.67620575},{"time":0.34940192,"frequency":0.6328731},{"time":0.366872,"frequency":0.8599447},{"time":0.42510566,"frequency":0.9221688},{"time":0.46004584,"frequency":0.6951912},{"time":0.4833393,"frequency":0.08479114},{"time":0.5124561,"frequency":0.32621416},{"time":0.541573,"frequency":0.109959714},{"time":0.61145335,"frequency":0.26899356},{"time":0.6231001,"frequency":0.6697273},{"time":0.7046272,"frequency":0.21375361},{"time":0.75121415,"frequency":0.31429508},{"time":0.76286083,"frequency":0.5807394},{"time":0.8210945,"frequency":0.6171581},{"time":0.8909749,"frequency":0.35575727},{"time":0.9375618,"frequency":0.86680025},{"time":0.97832537,"frequency":0.41348368},{"time":1.0540291,"frequency":0.7010343},{"time":1.1646731,"frequency":0.19300033},{"time":1.2229067,"frequency":0.48456028},{"time":1.2636703,"frequency":0.26362315},{"time":1.3917843,"frequency":0.26773816},{"time":1.4209012,"frequency":0.419087},{"time":1.4616647,"frequency":0.13204953},{"time":1.5664853,"frequency":0.2265162}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.haptic.meta new file mode 100644 index 0000000..b1a5206 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a23c1344c10a74aff8582e55078d35b8 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.wav b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.wav new file mode 100644 index 0000000..726e1d1 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.wav.meta new file mode 100644 index 0000000..a3597c2 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/IceCubes1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 698a710b98aff4cea9fd5f4ca597a237 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.haptic new file mode 100644 index 0000000..a74b82f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Movie Projector 1.wav","project":"Movie Projector 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00033148006},{"time":0.0010204081,"amplitude":0.00033148006},{"time":0.08201814,"amplitude":0.021178208},{"time":0.12180589684898929,"amplitude":0.04886252894736841,"emphasis":{"amplitude":0.29623095,"frequency":0.5}},{"time":0.13709018278927204,"amplitude":0.18183272,"emphasis":{"amplitude":0.5141330052631579,"frequency":0.5}},{"time":0.15301587,"amplitude":0.10055856578947368,"emphasis":{"amplitude":0.4268743552631578,"frequency":0.5}},{"time":0.1670068,"amplitude":0.25245448000000004,"emphasis":{"amplitude":0.6024102052631581,"frequency":0.5}},{"time":0.18301587,"amplitude":0.175200712,"emphasis":{"amplitude":0.5058429952631579,"frequency":0.5}},{"time":0.199872027742106,"amplitude":0.26479916800000003,"emphasis":{"amplitude":0.6178410652631581,"frequency":0.5}},{"time":0.2162997329676311,"amplitude":0.10829309842105259,"emphasis":{"amplitude":0.41618783526315783,"frequency":0.5}},{"time":0.2327515250968424,"amplitude":0.2714757701052632,"emphasis":{"amplitude":0.6327657652631581,"frequency":0.5}},{"time":0.2576755005160524,"amplitude":0.06750951578947369,"emphasis":{"amplitude":0.45172004210526323,"frequency":0.5}},{"time":0.2873691492709299,"amplitude":0.039850050205642924,"emphasis":{"amplitude":0.736654668020212,"frequency":0.5}},{"time":0.30891490541921024,"amplitude":0.055202806842105254,"emphasis":{"amplitude":0.3946764910526316,"frequency":0.5}},{"time":0.32800454,"amplitude":0.20665048000000003,"emphasis":{"amplitude":0.545155205263158,"frequency":0.5}},{"time":0.35201815,"amplitude":0.12755994578947366,"emphasis":{"amplitude":0.45387573526315783,"frequency":0.5}},{"time":0.3851695433276523,"amplitude":0.0616084287368421,"emphasis":{"amplitude":0.3826610603157895,"frequency":0.5}},{"time":0.41472066703236876,"amplitude":0.17432274189473687,"emphasis":{"amplitude":0.4981665852631578,"frequency":0.5}},{"time":0.4436619005160525,"amplitude":0.07902271263157895,"emphasis":{"amplitude":0.39744376526315783,"frequency":0.5}},{"time":0.46201813,"amplitude":0.15127888578947368,"emphasis":{"amplitude":0.47759467526315785,"frequency":0.5}},{"time":0.4813494394839475,"amplitude":0.09681261578947369,"emphasis":{"amplitude":0.4231284052631578,"frequency":0.5}},{"time":0.502840687052901,"amplitude":0.07115416025487509,"emphasis":{"amplitude":0.5126269108449095,"frequency":0.5}},{"time":0.5309977,"amplitude":0.07993766578947369,"emphasis":{"amplitude":0.4062534552631578,"frequency":0.5}},{"time":0.5527921427739468,"amplitude":0.11580518684210528,"emphasis":{"amplitude":0.4447525552631579,"frequency":0.5}},{"time":0.5709977,"amplitude":0.19693960800000002,"emphasis":{"amplitude":0.533016615263158,"frequency":0.5}},{"time":0.5997678411006736,"amplitude":0.09327728263157893,"emphasis":{"amplitude":0.4116983352631578,"frequency":0.5}},{"time":0.6230159,"amplitude":0.14177809578947367,"emphasis":{"amplitude":0.4680938852631578,"frequency":0.5}},{"time":0.65,"amplitude":0.09119881578947368,"emphasis":{"amplitude":0.4175146052631578,"frequency":0.5}},{"time":0.6734800777986527,"amplitude":0.16919280000000003,"emphasis":{"amplitude":0.4983331052631578,"frequency":0.5}},{"time":0.69691943541921,"amplitude":0.09104305789473684,"emphasis":{"amplitude":0.42262200526315785,"frequency":0.5}},{"time":0.71900225,"amplitude":0.17502858400000001,"emphasis":{"amplitude":0.5056278352631579,"frequency":0.5}},{"time":0.7506228317162105,"amplitude":0.11368155157894734,"emphasis":{"amplitude":0.42947102526315784,"frequency":0.5}},{"time":0.7809977,"amplitude":0.18638791200000002,"emphasis":{"amplitude":0.5198269952631579,"frequency":0.5}},{"time":0.8011746803223678,"amplitude":0.11072393526315788,"emphasis":{"amplitude":0.4107239352631578,"frequency":0.5}},{"time":0.8211746403223681,"amplitude":0.09452324578947367,"emphasis":{"amplitude":0.4208390352631578,"frequency":0.5}},{"time":0.8415647463226317,"amplitude":0.22811987789473687,"emphasis":{"amplitude":0.565413005263158,"frequency":0.5}},{"time":0.8623471694839474,"amplitude":0.1176702247368421,"emphasis":{"amplitude":0.4413544352631578,"frequency":0.5}},{"time":0.8898863073547367,"amplitude":0.10121925684210528,"emphasis":{"amplitude":0.43016662526315785,"frequency":0.5}},{"time":0.9154683417418419,"amplitude":0.14872804578947368,"emphasis":{"amplitude":0.47504383526315785,"frequency":0.5}},{"time":0.9402295964513151,"amplitude":0.12242458263157895,"emphasis":{"amplitude":0.44084563526315784,"frequency":0.5}},{"time":0.9629932,"amplitude":0.19884484000000002,"emphasis":{"amplitude":0.5353981552631579,"frequency":0.5}},{"time":0.9854683317418419,"amplitude":0.09654110157894734,"emphasis":{"amplitude":0.4123305752631578,"frequency":0.5}},{"time":0.9998109512257894,"amplitude":0.14223183578947368,"emphasis":{"amplitude":0.46854762526315785,"frequency":0.5}},{"time":1.0156430109034227,"amplitude":0.13696867789473682,"emphasis":{"amplitude":0.46854762526315785,"frequency":0.5}},{"time":1.0313494694839485,"amplitude":0.08983096578947368,"emphasis":{"amplitude":0.4161467552631578,"frequency":0.5}},{"time":1.0481672207097374,"amplitude":0.169552544,"emphasis":{"amplitude":0.49878278526315784,"frequency":0.5}},{"time":1.0691649207097376,"amplitude":0.09155135368421051,"emphasis":{"amplitude":0.41260398526315784,"frequency":0.5}},{"time":1.08890051580658,"amplitude":0.1722584530526316,"emphasis":{"amplitude":0.5054546452631579,"frequency":0.5}},{"time":1.1126904585805248,"amplitude":0.07777270789473685,"emphasis":{"amplitude":0.4093516552631578,"frequency":0.5}},{"time":1.1280046,"amplitude":0.15676030578947367,"emphasis":{"amplitude":0.4830760952631578,"frequency":0.5}},{"time":1.1499879915481568,"amplitude":0.07633046263157893,"emphasis":{"amplitude":0.3158041468421054,"frequency":0.5}},{"time":1.1680045,"amplitude":0.17063048000000003,"emphasis":{"amplitude":0.5001302052631578,"frequency":0.5}},{"time":1.192070756128946,"amplitude":0.08828401473684211,"emphasis":{"amplitude":0.41196822526315785,"frequency":0.5}},{"time":1.2129895719355268,"amplitude":0.17402090694736844,"emphasis":{"amplitude":0.5010787652631578,"frequency":0.5}},{"time":1.237701758580525,"amplitude":0.09156674368421051,"emphasis":{"amplitude":0.41261937526315784,"frequency":0.5}},{"time":1.2603253414194742,"amplitude":0.16857319494736844,"emphasis":{"amplitude":0.4942691252631578,"frequency":0.5}},{"time":1.2941151303827536,"amplitude":0.09922016614848489,"emphasis":{"amplitude":0.3871831024224484,"frequency":0.5}},{"time":1.3223350610321047,"amplitude":0.09581776157894735,"emphasis":{"amplitude":0.41160723526315784,"frequency":0.5}},{"time":1.355100875741577,"amplitude":0.14705895999999996,"emphasis":{"amplitude":0.48390106526315785,"frequency":0.5}},{"time":1.3821340038060514,"amplitude":0.09570452736842106,"emphasis":{"amplitude":0.40096768526315785,"frequency":0.5}},{"time":1.4110957561289466,"amplitude":0.1706858930526316,"emphasis":{"amplitude":0.5034889452631579,"frequency":0.5}},{"time":1.4439752634836833,"amplitude":0.11282157526315788,"emphasis":{"amplitude":0.4128215752631578,"frequency":0.5}},{"time":1.4725121013544726,"amplitude":0.09266620263157893,"emphasis":{"amplitude":0.4110872552631578,"frequency":0.5}},{"time":1.5020181,"amplitude":0.176968912,"emphasis":{"amplitude":0.5080532452631579,"frequency":0.5}},{"time":1.5305286098063147,"amplitude":0.10282418473684211,"emphasis":{"amplitude":0.4265083952631578,"frequency":0.5}},{"time":1.5511077645807911,"amplitude":0.18646141305263159,"emphasis":{"amplitude":0.523208345263158,"frequency":0.5}},{"time":1.5764096975484223,"amplitude":0.1425819447368421,"emphasis":{"amplitude":0.46626615526315784,"frequency":0.5}},{"time":1.6035971659352617,"amplitude":0.08820043315789475,"emphasis":{"amplitude":0.43293727526315784,"frequency":0.5}},{"time":1.6240362,"amplitude":0.184526,"emphasis":{"amplitude":0.5174996052631579,"frequency":0.5}},{"time":1.6478382512257892,"amplitude":0.07256566578947368,"emphasis":{"amplitude":0.3988814552631578,"frequency":0.5}},{"time":1.6721543926452638,"amplitude":0.158994664,"emphasis":{"amplitude":0.48558543526315784,"frequency":0.5}},{"time":1.6959791438710534,"amplitude":0.09151637263157893,"emphasis":{"amplitude":0.4099374252631578,"frequency":0.5}},{"time":1.7268546708384183,"amplitude":0.08914072263157893,"emphasis":{"amplitude":0.40756177526315784,"frequency":0.5}},{"time":1.7516628024515786,"amplitude":0.17409228505263158,"emphasis":{"amplitude":0.5077469352631578,"frequency":0.5}},{"time":1.7802870049031574,"amplitude":0.10520895368421053,"emphasis":{"amplitude":0.4262615852631578,"frequency":0.5}},{"time":1.808771286644999,"amplitude":0.09147405473684211,"emphasis":{"amplitude":0.41515826526315786,"frequency":0.5}},{"time":1.8300453,"amplitude":0.181170832,"emphasis":{"amplitude":0.5133056452631579,"frequency":0.5}},{"time":1.8590475,"amplitude":0.08431502978947368,"emphasis":{"amplitude":0.4106308192631578,"frequency":0.5}},{"time":1.8800453,"amplitude":0.187432512,"emphasis":{"amplitude":0.5211327452631579,"frequency":0.5}},{"time":1.8930385,"amplitude":0.12106857578947368,"emphasis":{"amplitude":0.44738436526315783,"frequency":0.5}},{"time":1.9112463683868415,"amplitude":0.0952454547368421,"emphasis":{"amplitude":0.41892966526315784,"frequency":0.5}},{"time":1.9320408,"amplitude":0.183418608,"emphasis":{"amplitude":0.5161153652631579,"frequency":0.5}},{"time":1.9546175659352623,"amplitude":0.12046606052631575,"emphasis":{"amplitude":0.43362395526315783,"frequency":0.5}},{"time":1.98105731961263,"amplitude":0.1216550447368421,"emphasis":{"amplitude":0.4453392552631579,"frequency":0.5}},{"time":2.001043,"amplitude":0.11451802578947369,"emphasis":{"amplitude":0.44083381526315785,"frequency":0.5}},{"time":2.0220023634836846,"amplitude":0.08443994263157893,"emphasis":{"amplitude":0.40286099526315783,"frequency":0.5}},{"time":2.0370522,"amplitude":0.175282744,"emphasis":{"amplitude":0.5059455352631579,"frequency":0.5}},{"time":2.0586573939997366,"amplitude":0.07981035368421052,"emphasis":{"amplitude":0.40086298526315783,"frequency":0.5}},{"time":2.083443025612895,"amplitude":0.17768032,"emphasis":{"amplitude":0.5089425052631579,"frequency":0.5}},{"time":2.1030385,"amplitude":0.18694369600000002,"emphasis":{"amplitude":0.5205217252631579,"frequency":0.5}},{"time":2.1301732122578954,"amplitude":0.07151261789473685,"emphasis":{"amplitude":0.4030915652631578,"frequency":0.5}},{"time":2.157887079290263,"amplitude":0.15593764210526317,"emphasis":{"amplitude":0.48834310526315783,"frequency":0.5}},{"time":2.172573137870789,"amplitude":0.0893003457894737,"emphasis":{"amplitude":0.4156161352631578,"frequency":0.5}},{"time":2.198896887742105,"amplitude":0.2307525330526316,"emphasis":{"amplitude":0.578572245263158,"frequency":0.5}},{"time":2.229025,"amplitude":0.06951719578947368,"emphasis":{"amplitude":0.38793824842105257,"frequency":0.5}},{"time":2.2549727634836834,"amplitude":0.1892574488421053,"emphasis":{"amplitude":0.513545495263158,"frequency":0.5}},{"time":2.285074647677104,"amplitude":0.11460431526315785,"emphasis":{"amplitude":0.41460431526315783,"frequency":0.5}},{"time":2.313016,"amplitude":0.18535457600000002,"emphasis":{"amplitude":0.5185353252631579,"frequency":0.5}},{"time":2.3470294,"amplitude":0.10479885578947369,"emphasis":{"amplitude":0.43111464526315785,"frequency":0.5}},{"time":2.3805022817418413,"amplitude":0.15471307368421053,"emphasis":{"amplitude":0.4757657052631578,"frequency":0.5}},{"time":2.4080272,"amplitude":0.07590558578947369,"emphasis":{"amplitude":0.4022213752631578,"frequency":0.5}},{"time":2.440003715692204,"amplitude":0.07129579500886898,"emphasis":{"amplitude":0.4022776384979283,"frequency":0.5}},{"time":2.4650376280644744,"amplitude":0.10023939578947368,"emphasis":{"amplitude":0.42655518526315783,"frequency":0.5}},{"time":2.4891649207097366,"amplitude":0.15476329578947368,"emphasis":{"amplitude":0.48107908526315785,"frequency":0.5}},{"time":2.5112620049031587,"amplitude":0.08214814578947369,"emphasis":{"amplitude":0.40846393526315783,"frequency":0.5}},{"time":2.531160520709736,"amplitude":0.14586048684210523,"emphasis":{"amplitude":0.47480785526315783,"frequency":0.5}},{"time":2.559813162386578,"amplitude":0.10028888263157894,"emphasis":{"amplitude":0.4187099352631578,"frequency":0.5}},{"time":2.587640522064209,"amplitude":0.16814144421052632,"emphasis":{"amplitude":0.5101768052631579,"frequency":0.5}},{"time":2.618396717161052,"amplitude":0.09256545578947369,"emphasis":{"amplitude":0.41888124526315784,"frequency":0.5}},{"time":2.6403922171610525,"amplitude":0.08310422105263159,"emphasis":{"amplitude":0.4225779052631578,"frequency":0.5}},{"time":2.6609976,"amplitude":0.183995032,"emphasis":{"amplitude":0.5168358952631579,"frequency":0.5}},{"time":2.6880045,"amplitude":0.08857759578947368,"emphasis":{"amplitude":0.41489338526315783,"frequency":0.5}},{"time":2.7041536207097367,"amplitude":0.18808966905263158,"emphasis":{"amplitude":0.5252436652631579,"frequency":0.5}},{"time":2.7280045,"amplitude":0.08266800578947368,"emphasis":{"amplitude":0.4089837952631578,"frequency":0.5}},{"time":2.7493050414194737,"amplitude":0.2462237431578947,"emphasis":{"amplitude":0.6044902052631581,"frequency":0.5}},{"time":2.769508209806316,"amplitude":0.11598392526315786,"emphasis":{"amplitude":0.4159839252631578,"frequency":0.5}},{"time":2.7944561621292103,"amplitude":0.20500606105263158,"emphasis":{"amplitude":0.546389155263158,"frequency":0.5}},{"time":2.822993,"amplitude":0.08038609578947369,"emphasis":{"amplitude":0.4067018852631578,"frequency":0.5}},{"time":2.8517453147094733,"amplitude":0.15884916157894738,"emphasis":{"amplitude":0.4746386352631578,"frequency":0.5}},{"time":2.871987019612628,"amplitude":0.12107077894736841,"emphasis":{"amplitude":0.4052813052631578,"frequency":0.5}},{"time":2.9040171280644738,"amplitude":0.1671576850526316,"emphasis":{"amplitude":0.49907868526315785,"frequency":0.5}},{"time":2.92680927083842,"amplitude":0.09223184947368421,"emphasis":{"amplitude":0.40275816526315783,"frequency":0.5}},{"time":2.9479818,"amplitude":0.16329244,"emphasis":{"amplitude":0.4909576552631578,"frequency":0.5}},{"time":2.970975,"amplitude":0.07561128578947368,"emphasis":{"amplitude":0.40192707526315785,"frequency":0.5}},{"time":2.995041256128948,"amplitude":0.1574232282105263,"emphasis":{"amplitude":0.4967790352631578,"frequency":0.5}},{"time":3.020367306000263,"amplitude":0.1506211452631579,"emphasis":{"amplitude":0.49156590526315785,"frequency":0.5}},{"time":3.0402044852905266,"amplitude":0.08860810052631576,"emphasis":{"amplitude":0.4017659952631578,"frequency":0.5}},{"time":3.065390714452107,"amplitude":0.15493234021052632,"emphasis":{"amplitude":0.4936654252631578,"frequency":0.5}},{"time":3.0930781534200023,"amplitude":0.11246587947368418,"emphasis":{"amplitude":0.42299219526315784,"frequency":0.5}},{"time":3.1168801046457912,"amplitude":0.14110041557894737,"emphasis":{"amplitude":0.49940183526315785,"frequency":0.5}},{"time":3.150251302194213,"amplitude":0.09474284368421053,"emphasis":{"amplitude":0.41579547526315785,"frequency":0.5}},{"time":3.1777579427739457,"amplitude":0.09384231263157894,"emphasis":{"amplitude":0.4122633652631578,"frequency":0.5}},{"time":3.1969614,"amplitude":0.169478032,"emphasis":{"amplitude":0.49868964526315784,"frequency":0.5}},{"time":3.223502737870788,"amplitude":0.0807794057894737,"emphasis":{"amplitude":0.40709519526315785,"frequency":0.5}},{"time":3.2423017694839467,"amplitude":0.1415702778947368,"emphasis":{"amplitude":0.47314922526315784,"frequency":0.5}},{"time":3.2599547,"amplitude":0.07503163578947368,"emphasis":{"amplitude":0.4013474252631578,"frequency":0.5}},{"time":3.2799547,"amplitude":0.171583368,"emphasis":{"amplitude":0.5013213152631578,"frequency":0.5}},{"time":3.3039455,"amplitude":0.06721205578947369,"emphasis":{"amplitude":0.31984363473684213,"frequency":0.5}},{"time":3.3299546,"amplitude":0.14979395578947366,"emphasis":{"amplitude":0.4761097452631578,"frequency":0.5}},{"time":3.3489568,"amplitude":0.07166997578947369,"emphasis":{"amplitude":0.3979857652631578,"frequency":0.5}},{"time":3.3702574414194735,"amplitude":0.18023907031578945,"emphasis":{"amplitude":0.531877785263158,"frequency":0.5}},{"time":3.3906879950968416,"amplitude":0.11642461684210528,"emphasis":{"amplitude":0.44537198526315785,"frequency":0.5}},{"time":3.4189568,"amplitude":0.15803755200000003,"emphasis":{"amplitude":0.48438904526315785,"frequency":0.5}},{"time":3.444047284193421,"amplitude":0.11569090684210528,"emphasis":{"amplitude":0.44463827526315786,"frequency":0.5}},{"time":3.4629478,"amplitude":0.189593208,"emphasis":{"amplitude":0.5238336152631579,"frequency":0.5}},{"time":3.4839456,"amplitude":0.09437173578947368,"emphasis":{"amplitude":0.42068752526315784,"frequency":0.5}},{"time":3.4996900950968413,"amplitude":0.14577143999999995,"emphasis":{"amplitude":0.4826135452631578,"frequency":0.5}},{"time":3.5161036207097363,"amplitude":0.08490168684210528,"emphasis":{"amplitude":0.41384905526315785,"frequency":0.5}},{"time":3.5405743024515792,"amplitude":0.16409472210526316,"emphasis":{"amplitude":0.49853945526315785,"frequency":0.5}},{"time":3.5604114817418417,"amplitude":0.09428299894736844,"emphasis":{"amplitude":0.4284935252631578,"frequency":0.5}},{"time":3.5758657438710526,"amplitude":0.16609694315789472,"emphasis":{"amplitude":0.5043317052631578,"frequency":0.5}},{"time":3.599932,"amplitude":0.09755417578947369,"emphasis":{"amplitude":0.42386996526315784,"frequency":0.5}},{"time":3.6215086547744755,"amplitude":0.14523263789473684,"emphasis":{"amplitude":0.5243039552631579,"frequency":0.5}},{"time":3.6448271961939476,"amplitude":0.11155058421052633,"emphasis":{"amplitude":0.4589190052631578,"frequency":0.5}},{"time":3.672925,"amplitude":0.09640104578947369,"emphasis":{"amplitude":0.42271683526315784,"frequency":0.5}},{"time":3.7007934073547375,"amplitude":0.09406009000000003,"emphasis":{"amplitude":0.4309021952631578,"frequency":0.5}},{"time":3.722040992645263,"amplitude":0.18615107705263156,"emphasis":{"amplitude":0.5228204252631579,"frequency":0.5}},{"time":3.747395881741842,"amplitude":0.08666625578947369,"emphasis":{"amplitude":0.41298204526315785,"frequency":0.5}},{"time":3.776093029161579,"amplitude":0.13715255315789468,"emphasis":{"amplitude":0.4818893952631578,"frequency":0.5}},{"time":3.7988995915481576,"amplitude":0.06674647178947368,"emphasis":{"amplitude":0.34306226126315786,"frequency":0.5}},{"time":3.8159182,"amplitude":0.15424914578947369,"emphasis":{"amplitude":0.4331965142105263,"frequency":0.5}},{"time":3.8389115,"amplitude":0.06094978578947368,"emphasis":{"amplitude":0.36621294368421053,"frequency":0.5}},{"time":3.8589115,"amplitude":0.10384694578947369,"emphasis":{"amplitude":0.3827943142105263,"frequency":0.5}},{"time":3.8949206,"amplitude":0.068538666},{"time":3.9999092,"amplitude":0.012227063},{"time":4,"amplitude":0.012227063},{"time":4,"amplitude":0.012227063}],"frequency":[{"time":0,"frequency":0.21464244},{"time":0.037732422,"frequency":0.39121003315789465},{"time":0.0986848,"frequency":0.28435908315789465},{"time":0.13061225,"frequency":0.5366200031578944},{"time":0.14222223,"frequency":0.44427946315789446},{"time":0.18866213,"frequency":0.5845885131578944},{"time":0.2031746,"frequency":0.42519266315789456},{"time":0.22349207,"frequency":0.5354683631578944},{"time":0.27863947,"frequency":0.3898168031578947},{"time":0.28734693,"frequency":0.5141747631578945},{"time":0.33378685,"frequency":0.5118697131578944},{"time":0.42956915,"frequency":0.3552877131578947},{"time":0.45278913,"frequency":0.41697976315789465},{"time":0.5195465,"frequency":0.40911346315789465},{"time":0.57179135,"frequency":0.4920799631578944},{"time":0.62984127,"frequency":0.39733593315789467},{"time":0.67628115,"frequency":0.49134876315789444},{"time":0.7024036,"frequency":0.2901433231578947},{"time":0.7140136,"frequency":0.42790836315789454},{"time":0.74303854,"frequency":0.3613151631578947},{"time":0.7604535,"frequency":0.4745611931578944},{"time":0.78077096,"frequency":0.3713393631578947},{"time":0.8097959,"frequency":0.5130893631578944},{"time":0.8620408,"frequency":0.3395884131578947},{"time":0.90267575,"frequency":0.4472893331578945},{"time":0.9171882,"frequency":0.2809786031578947},{"time":0.9258957,"frequency":0.4742650231578945},{"time":0.9404082,"frequency":0.3679460631578947},{"time":0.96943307,"frequency":0.4595410031578944},{"time":0.9984581,"frequency":0.33226160315789466},{"time":1.0013604,"frequency":0.34656630315789466},{"time":1.0507029,"frequency":0.47879300315789447},{"time":1.0710204,"frequency":0.3066213231578947},{"time":1.0942403,"frequency":0.49063226315789443},{"time":1.1058502,"frequency":0.32364220315789466},{"time":1.1377777,"frequency":0.49608576315789443},{"time":1.2829024,"frequency":0.4175506631578946},{"time":1.3090248,"frequency":0.3232194631578947},{"time":1.3409523,"frequency":0.5043917131578944},{"time":1.3583673,"frequency":0.3857659831578947},{"time":1.4106121,"frequency":0.5390030631578944},{"time":1.4222221,"frequency":0.40334876315789464},{"time":1.4541496,"frequency":0.4658374031578944},{"time":1.5354195,"frequency":0.37008868315789467},{"time":1.5528344,"frequency":0.5343823631578944},{"time":1.5673468,"frequency":0.2566900331578947},{"time":1.5760543,"frequency":0.44530300315789445},{"time":1.6021768,"frequency":0.3110241131578947},{"time":1.6312017,"frequency":0.5109955631578944},{"time":1.6428117,"frequency":0.3665362131578947},{"time":1.6718366,"frequency":0.5014786631578944},{"time":1.7037641,"frequency":0.3899062431578947},{"time":1.738594,"frequency":0.44862216315789444},{"time":1.7531065,"frequency":0.30075301315789466},{"time":1.7705214,"frequency":0.4804273631578944},{"time":1.8169614,"frequency":0.46614656315789443},{"time":1.8517913,"frequency":0.5056644631578944},{"time":1.9359636,"frequency":0.33334806315789467},{"time":1.9707936,"frequency":0.4908721231578944},{"time":1.9998186,"frequency":0.38136176315789466},{"time":2.002721,"frequency":0.43478216315789453},{"time":2.043356,"frequency":0.5164857631578944},{"time":2.054966,"frequency":0.3463549131578947},{"time":2.0839908,"frequency":0.49882303315789445},{"time":2.0985034,"frequency":0.32274164315789466},{"time":2.1246257,"frequency":0.5014220331578944},{"time":2.1333332,"frequency":0.35737798315789465},{"time":2.168163,"frequency":0.5024678631578944},{"time":2.261043,"frequency":0.3425593631578947},{"time":2.290068,"frequency":0.4741995631578944},{"time":2.3248978,"frequency":0.30849473315789466},{"time":2.3307028,"frequency":0.46655466315789446},{"time":2.3597279,"frequency":0.2918267331578947},{"time":2.4177778,"frequency":0.5208659031578944},{"time":2.5164626,"frequency":0.3037365231578947},{"time":2.5309749,"frequency":0.5072755031578944},{"time":2.554195,"frequency":0.3766667931578947},{"time":2.57161,"frequency":0.5200194631578944},{"time":2.5977323,"frequency":0.37380502315789466},{"time":2.6528797,"frequency":0.5136040631578944},{"time":2.7138321,"frequency":0.3891565931578947},{"time":2.7747846,"frequency":0.4797875131578944},{"time":2.800907,"frequency":0.3367087931578947},{"time":2.8357368,"frequency":0.49774046315789444},{"time":2.8618593,"frequency":0.32015929315789465},{"time":2.8792744,"frequency":0.49799690315789436},{"time":2.9024942,"frequency":0.40457700315789463},{"time":2.9315193,"frequency":0.5297619631578944},{"time":2.9576416,"frequency":0.3845893831578947},{"time":2.9982765,"frequency":0.4171935631578946},{"time":3.001179,"frequency":0.43666846315789454},{"time":3.053424,"frequency":0.4734887631578945},{"time":3.1143763,"frequency":0.3069186331578947},{"time":3.1288888,"frequency":0.4877086631578944},{"time":3.1434011,"frequency":0.3218225031578947},{"time":3.1724262,"frequency":0.5013319631578944},{"time":3.2333786,"frequency":0.29881773315789467},{"time":3.2449884,"frequency":0.4950022631578944},{"time":3.2943308,"frequency":0.34276426315789466},{"time":3.3262584,"frequency":0.4987232631578944},{"time":3.3436735,"frequency":0.29190938315789466},{"time":3.3814058,"frequency":0.33737508315789466},{"time":3.4104307,"frequency":0.4795106631578944},{"time":3.5149205,"frequency":0.3279725431578947},{"time":3.5555553,"frequency":0.5003792631578944},{"time":3.5903854,"frequency":0.3523803131578947},{"time":3.599093,"frequency":0.4907970231578944},{"time":3.6310203,"frequency":0.30047710315789466},{"time":3.6513379,"frequency":0.5172855631578944},{"time":3.6745577,"frequency":0.3254189631578947},{"time":3.6919727,"frequency":0.5148838631578944},{"time":3.7093875,"frequency":0.3615530631578947},{"time":3.7268026,"frequency":0.5648151631578944},{"time":3.7529252,"frequency":0.3766945631578947},{"time":3.787755,"frequency":0.5233940331578945},{"time":3.8370974,"frequency":0.3407717131578947},{"time":3.8893423,"frequency":0.4951240231578944},{"time":3.9096596,"frequency":0.3722426431578947},{"time":3.9357822,"frequency":0.5068889631578944},{"time":3.988027,"frequency":0.48030037}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.haptic.meta new file mode 100644 index 0000000..8ea4114 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 88ea752cd53264cdd8eb2ad769b8c19d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.wav b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.wav new file mode 100644 index 0000000..492cc7e Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.wav.meta new file mode 100644 index 0000000..956f9cf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/SoundFX/MovieProjector1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 02daf4fd323b54d8d9e19c42654a0b00 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons.meta new file mode 100644 index 0000000..5dcfc22 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8887e31de16947e0904c455c78d551f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.haptic new file mode 100644 index 0000000..db6c776 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Bow Release 1.wav","project":"Bow Release 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.000017806831},{"time":0.047940346209491655,"amplitude":0.12553161999999998},{"time":0.0764551973865767,"amplitude":0.21914705894736844},{"time":0.09282792758101666,"amplitude":0.4868421052631572},{"time":0.14235715,"amplitude":0.3421052631578948},{"time":0.14285715,"amplitude":0.5728829414736843,"emphasis":{"amplitude":1,"frequency":0.9}},{"time":0.15262585981926644,"amplitude":0.7791796924054871},{"time":0.18951228637152495,"amplitude":0.30511810210526313},{"time":0.22613324911457486,"amplitude":0.10646545526315788},{"time":0.28798187,"amplitude":0.027164554},{"time":0.40498868,"amplitude":0.003926041},{"time":0.83174604,"amplitude":0.00004628265},{"time":0.8321996,"amplitude":0.00004628265}],"frequency":[{"time":0,"frequency":0.07065308},{"time":0.0752606522442016,"frequency":0.35504361842105264},{"time":0.12393193898494828,"frequency":0.5269790173684212},{"time":0.14548942,"frequency":0.7593986236842104},{"time":0.18529970859606837,"frequency":0.40849405999999994},{"time":0.26836191375810164,"frequency":0.19215836052631582},{"time":0.3371246963924151,"frequency":0},{"time":0.8321996,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.haptic.meta new file mode 100644 index 0000000..6db254a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 51438239b78e140d0aa04a97e8b073bb +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.wav new file mode 100644 index 0000000..12698a0 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.wav.meta new file mode 100644 index 0000000..b538059 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/BowRelease1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 83e12bc2a9e7c466f85a0a9056f121ef +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.haptic new file mode 100644 index 0000000..6b93df7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Distance Gun Shot 1.wav","project":"Distance Gun Shot 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0017410433},{"time":0.0010204081,"amplitude":0.0017410433},{"time":0.00600907,"amplitude":0.2795462},{"time":0.013015873,"amplitude":0.21490401},{"time":0.013020873,"amplitude":0.6326241288421056,"emphasis":{"amplitude":0.7585433189473685,"frequency":0.5}},{"time":0.034013607,"amplitude":0.63928246},{"time":0.04201814,"amplitude":0.51470995},{"time":0.045011338,"amplitude":0.6370307},{"time":0.053015873,"amplitude":0.6053714},{"time":0.06501134,"amplitude":0.4142804},{"time":0.07102041,"amplitude":0.5815539},{"time":0.0870068,"amplitude":0.35617462},{"time":0.1070068,"amplitude":0.18771501},{"time":0.10900226,"amplitude":0.2834591},{"time":0.12501134,"amplitude":0.1660414},{"time":0.12900226,"amplitude":0.3135072},{"time":0.1570068,"amplitude":0.15206648},{"time":0.16501133,"amplitude":0.17568298},{"time":0.21201813,"amplitude":0.04635086},{"time":0.21501133,"amplitude":0.1647321},{"time":0.22900227,"amplitude":0.15605572},{"time":0.24900226,"amplitude":0.07840448},{"time":0.2870068,"amplitude":0.027965344},{"time":0.30600905,"amplitude":0.07311638},{"time":0.3140136,"amplitude":0.15747285},{"time":0.3410204,"amplitude":0.07956383},{"time":0.36900225,"amplitude":0.04284573},{"time":0.37800452,"amplitude":0.13461368},{"time":0.3970068,"amplitude":0.06784343},{"time":0.39800453,"amplitude":0.119138926},{"time":0.42,"amplitude":0.054790918},{"time":0.4510204,"amplitude":0},{"time":1.2150114,"amplitude":0}],"frequency":[{"time":0,"frequency":1},{"time":0.011609977,"frequency":0.4279372},{"time":0.052244894,"frequency":0.13092735},{"time":0.08126984,"frequency":0.54234207},{"time":0.101587296,"frequency":0.1154592},{"time":0.26122448,"frequency":0.5408691},{"time":0.30476192,"frequency":0.29139623},{"time":0.31346938,"frequency":0.5873005},{"time":0.33668935,"frequency":0.23080412},{"time":0.34249434,"frequency":0.46017087},{"time":0.38312924,"frequency":0.23305868},{"time":0.4121542,"frequency":0.5724204},{"time":0.4469841,"frequency":0.15979567},{"time":0.4690262458620689,"frequency":0},{"time":1.2150114,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.haptic.meta new file mode 100644 index 0000000..b57ac04 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0ce7f6efc221b46b094abaf2f1536054 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.wav new file mode 100644 index 0000000..c36ba22 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.wav.meta new file mode 100644 index 0000000..0e0aa05 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ba3d33391dcef4288a8ab5210877f166 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.haptic new file mode 100644 index 0000000..cc6d4ef --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Distance Gun Shot 2.wav","project":"Distance Gun Shot 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0031770577},{"time":0.0010204081,"amplitude":0.0031770577},{"time":0.011020408,"amplitude":0.074280195},{"time":0.01201814,"amplitude":0.4338605,"emphasis":{"amplitude":0.5423256,"frequency":0.39831886}},{"time":0.08501133,"amplitude":0.6607703},{"time":0.13900226,"amplitude":0.638054},{"time":0.1940136,"amplitude":0.6736518},{"time":0.20900226,"amplitude":0.6354801},{"time":0.22201814,"amplitude":0.44688967},{"time":0.22800453,"amplitude":0.6633111},{"time":0.2410204,"amplitude":0.51191515},{"time":0.24201813,"amplitude":0.6855464},{"time":0.25501132,"amplitude":0.5458836},{"time":0.27501133,"amplitude":0.6970585},{"time":0.29800454,"amplitude":0.38230973},{"time":0.30600905,"amplitude":0.5272791},{"time":0.32900226,"amplitude":0.38519144},{"time":0.3310204,"amplitude":0.5742526},{"time":0.35201815,"amplitude":0.39818415},{"time":0.37201813,"amplitude":0.6980582},{"time":0.40600905,"amplitude":0.2524343},{"time":0.41501132,"amplitude":0.3898108},{"time":0.45999998,"amplitude":0.19550426},{"time":0.4740136,"amplitude":0.26977336},{"time":0.51201814,"amplitude":0.1435069},{"time":0.5260091,"amplitude":0.48147964},{"time":0.55600905,"amplitude":0.1945242},{"time":0.5650113,"amplitude":0.3796774},{"time":0.58301586,"amplitude":0.21702239},{"time":0.6080045,"amplitude":0.2280878},{"time":0.63900226,"amplitude":0.10943414},{"time":0.6519955,"amplitude":0.21864533},{"time":0.68,"amplitude":0.13645916},{"time":0.7,"amplitude":0.2171198},{"time":0.7160091,"amplitude":0.13507634},{"time":0.8030159,"amplitude":0.11260335},{"time":0.8140136,"amplitude":0.18854237},{"time":0.8440136,"amplitude":0.0789551},{"time":0.8850113,"amplitude":0.14517438},{"time":0.9879078517241376,"amplitude":0},{"time":1.66,"amplitude":0}],"frequency":[{"time":0,"frequency":0.21744266},{"time":0.008707482,"frequency":0.8347725},{"time":0.03482993,"frequency":0.19927146},{"time":0.07546485,"frequency":0.11654595},{"time":0.11609977,"frequency":0.36438352},{"time":0.12190475,"frequency":0.20912611},{"time":0.22929706,"frequency":0.19305322},{"time":0.2496145,"frequency":0.33634865},{"time":0.28734693,"frequency":0.15101463},{"time":0.3076644,"frequency":0.33439368},{"time":0.32507935,"frequency":0.1652733},{"time":0.3570068,"frequency":0.12475966},{"time":0.42666668,"frequency":0.28566745},{"time":0.47310656,"frequency":0.113206945},{"time":0.4963265,"frequency":0.2879526},{"time":0.5543764,"frequency":0.11321491},{"time":0.59210885,"frequency":0.20896147},{"time":0.62984127,"frequency":0.13070801},{"time":0.6501587,"frequency":0.2234491},{"time":0.7082086,"frequency":0.25775954},{"time":0.7343311,"frequency":0.1465505},{"time":0.74884355,"frequency":0.2596258},{"time":0.8126984,"frequency":0.13487422},{"time":0.83011335,"frequency":0.34818643},{"time":0.8533333,"frequency":0.15979552},{"time":0.8939682,"frequency":0.1805795},{"time":0.90267575,"frequency":0.3056391},{"time":1.0239287034482756,"frequency":0},{"time":1.66,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.haptic.meta new file mode 100644 index 0000000..53f3924 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 07da0761b3d1343e896f689ad2577eb9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.wav new file mode 100644 index 0000000..e67af4d Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.wav.meta new file mode 100644 index 0000000..d874b97 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 31835a5eb705f4a30865b07048197974 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.haptic new file mode 100644 index 0000000..e055b3b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Distance Gun Shot 3.wav","project":"Distance Gun Shot 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.003487853},{"time":0.0010204081,"amplitude":0.003487853},{"time":0.0070068026,"amplitude":0.113082446},{"time":0.009002267,"amplitude":0.6055871368421056,"emphasis":{"amplitude":0.728694447368421,"frequency":0.5}},{"time":0.048004534,"amplitude":0.61736435},{"time":0.059002265,"amplitude":0.46490595},{"time":0.061020408,"amplitude":0.605381},{"time":0.07301587,"amplitude":0.48369193},{"time":0.07600907,"amplitude":0.6234268},{"time":0.09301587,"amplitude":0.5260022},{"time":0.1070068,"amplitude":0.6570251},{"time":0.13401361,"amplitude":0.6757849},{"time":0.1470068,"amplitude":0.59472865},{"time":0.16002268,"amplitude":0.4043184},{"time":0.16401361,"amplitude":0.5076707},{"time":0.18900226,"amplitude":0.38949072},{"time":0.20900226,"amplitude":0.20657443},{"time":0.2370068,"amplitude":0.15226957},{"time":0.25002268,"amplitude":0.33370125},{"time":0.28501132,"amplitude":0.11017306},{"time":0.30600905,"amplitude":0.11887823},{"time":0.3070068,"amplitude":0.29377884},{"time":0.3370068,"amplitude":0.11539788},{"time":0.3570068,"amplitude":0.09746526},{"time":0.37,"amplitude":0.16995847},{"time":0.39301586,"amplitude":0.118230686},{"time":0.40201813,"amplitude":0.2226595},{"time":0.42,"amplitude":0.124883264},{"time":0.4440136,"amplitude":0.12660441},{"time":0.47600907,"amplitude":0.05353131},{"time":0.5,"amplitude":0.05227399},{"time":0.5009977,"amplitude":0.11467749},{"time":0.53999996,"amplitude":0.04346945},{"time":0.54301584,"amplitude":0.075204074},{"time":0.6373148432183907,"amplitude":0},{"time":1.1999999000000001,"amplitude":0}],"frequency":[{"time":0,"frequency":1},{"time":0.017414967,"frequency":1},{"time":0.031927437,"frequency":0.2547441},{"time":0.08707482,"frequency":0.52231807},{"time":0.09578231,"frequency":0.045931436},{"time":0.15673469,"frequency":0.26014006},{"time":0.18575963,"frequency":0.06781004},{"time":0.23510204,"frequency":0.396929},{"time":0.27283448,"frequency":0.3860039},{"time":0.34249434,"frequency":0.09528521},{"time":0.37151927,"frequency":0.1316761},{"time":0.38603175,"frequency":0.44166327},{"time":0.39764172,"frequency":0.09060648},{"time":0.4643991,"frequency":0.23500048},{"time":0.54276645,"frequency":0.0974084},{"time":0.5688889,"frequency":0.3868257},{"time":0.5834014,"frequency":0.17975897},{"time":0.6617637,"frequency":0},{"time":1.1999999000000001,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.haptic.meta new file mode 100644 index 0000000..920907a --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3b9f0e66476e74586b74f17826e39294 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.wav new file mode 100644 index 0000000..c9415b1 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.wav.meta new file mode 100644 index 0000000..bf4afef --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/DistanceGunShot3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f9aa017ddb0ef4d2bb559f7687adfa6b +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.haptic new file mode 100644 index 0000000..548c81d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Heavy Machine Gun Fire 1.wav","project":"Heavy Machine Gun Fire 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.009100307},{"time":0.0010204081,"amplitude":0.009100307},{"time":0.013015873,"amplitude":0.10176538},{"time":0.014013605,"amplitude":0.2995264},{"time":0.018004535,"amplitude":0.40914133},{"time":0.019002268,"amplitude":0.7177093246315794,"emphasis":{"amplitude":0.8083208663157897,"frequency":0.5}},{"time":0.028004535,"amplitude":0.73032945},{"time":0.039002266,"amplitude":0.52529037},{"time":0.05600907,"amplitude":0.3459427},{"time":0.058004536,"amplitude":0.46728602},{"time":0.07301587,"amplitude":0.28528464},{"time":0.08900227,"amplitude":0.20052922},{"time":0.091020405,"amplitude":0.3768328},{"time":0.1170068,"amplitude":0.16470592},{"time":0.13002267,"amplitude":0.15019125},{"time":0.13301587,"amplitude":0.19918357},{"time":0.14900227,"amplitude":0.18287787},{"time":0.16800453,"amplitude":0.10872008},{"time":0.17800453,"amplitude":0.21134228},{"time":0.19900227,"amplitude":0.16299374},{"time":0.20002267,"amplitude":0.21646771},{"time":0.2210204,"amplitude":0.13050158},{"time":0.24600907,"amplitude":0.11258284},{"time":0.24800453,"amplitude":0.18190041},{"time":0.27201813,"amplitude":0.09156329},{"time":0.2870068,"amplitude":0.09471518},{"time":0.29,"amplitude":0.14077534},{"time":0.30900225,"amplitude":0.08146591},{"time":0.32600906,"amplitude":0.08885018},{"time":0.3840136,"amplitude":0.033753667},{"time":0.45201814,"amplitude":0.026993066},{"time":0.46600905,"amplitude":0.06496562},{"time":0.48201814,"amplitude":0.038864933},{"time":0.5009977,"amplitude":0.06273073},{"time":0.5354873372413795,"amplitude":0},{"time":1.0850114,"amplitude":0}],"frequency":[{"time":0,"frequency":0.6026549},{"time":0.008707482,"frequency":0.7827688},{"time":0.023219952,"frequency":0.39816338},{"time":0.03482993,"frequency":0.4678082},{"time":0.089977324,"frequency":0.24235794},{"time":0.11029478,"frequency":0.3979631},{"time":0.14512472,"frequency":0.28083542},{"time":0.1538322,"frequency":0.44309092},{"time":0.21188208,"frequency":0.3470836},{"time":0.21768707,"frequency":0.50080353},{"time":0.24671203,"frequency":0.34470832},{"time":0.29605442,"frequency":0.23221177},{"time":0.30476192,"frequency":0.3435866},{"time":0.37442178,"frequency":0.2698073},{"time":0.4034467,"frequency":0.41072357},{"time":0.44117913,"frequency":0.43545696},{"time":0.47600907,"frequency":0.2684395},{"time":0.5523353354022988,"frequency":0},{"time":1.0850114,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.haptic.meta new file mode 100644 index 0000000..e316273 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1374cfa9612054293957a7b66d7f8488 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.wav new file mode 100644 index 0000000..7e09533 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.wav.meta new file mode 100644 index 0000000..238dddd --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: fc4c1ca26a3264a259dfa43a61a2f70e +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.haptic new file mode 100644 index 0000000..f39be4d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Heavy Machine Gun Fire 2.wav","project":"Heavy Machine Gun Fire 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.029289322},{"time":0.0010204081,"amplitude":0.029289322},{"time":0.0070068026,"amplitude":0.5342159200000001,"emphasis":{"amplitude":0.6677699,"frequency":0.5}},{"time":0.034013607,"amplitude":0.3116775},{"time":0.04201814,"amplitude":0.4276767},{"time":0.098004535,"amplitude":0.05071355157894739},{"time":0.11201814,"amplitude":0.1032847115789474},{"time":0.11900227,"amplitude":0.5214028,"emphasis":{"amplitude":0.6517535,"frequency":0.5}},{"time":0.14600907,"amplitude":0.30685258},{"time":0.15301587,"amplitude":0.499629},{"time":0.1910204,"amplitude":0.10139643157894739},{"time":0.2240136,"amplitude":0.05130791157894738},{"time":0.2410204,"amplitude":0.48629660799999996,"emphasis":{"amplitude":0.60787076,"frequency":0.5}},{"time":0.2710204,"amplitude":0.27545735},{"time":0.27201813,"amplitude":0.42755672},{"time":0.3070068,"amplitude":0.10107947157894742},{"time":0.3440136,"amplitude":0.06608887157894744},{"time":0.35800454,"amplitude":0.528298664,"emphasis":{"amplitude":0.66037333,"frequency":0.5}},{"time":0.38201812,"amplitude":0.3239292},{"time":0.39600906,"amplitude":0.48429027},{"time":0.43201813,"amplitude":0.08230516157894745},{"time":0.46600905,"amplitude":0.11164611157894738},{"time":0.4809977,"amplitude":0.49070210400000003,"emphasis":{"amplitude":0.61337763,"frequency":0.5}},{"time":0.54099774,"amplitude":0.08291471157894743},{"time":0.5860091,"amplitude":0.23328274},{"time":0.5920181,"amplitude":0.46446792,"emphasis":{"amplitude":0.5805849,"frequency":0.5}},{"time":0.62700677,"amplitude":0.320342},{"time":0.6440136,"amplitude":0.35389176},{"time":0.6770068,"amplitude":0.05874241157894741},{"time":0.69600904,"amplitude":0.08331942157894744},{"time":0.7150113,"amplitude":0.52761612,"emphasis":{"amplitude":0.65952015,"frequency":0.5}},{"time":0.75700676,"amplitude":0.25028118},{"time":0.81700677,"amplitude":0.06631737157894743},{"time":0.8309977,"amplitude":0.5142046,"emphasis":{"amplitude":0.64275575,"frequency":0.5}},{"time":0.8460091,"amplitude":0.42499197},{"time":0.8840136,"amplitude":0.24925931},{"time":0.93199545,"amplitude":0.1011078915789474},{"time":0.9540136,"amplitude":0.44244336000000006,"emphasis":{"amplitude":0.5530542,"frequency":0.5}},{"time":0.97401357,"amplitude":0.31758034},{"time":1.0009977,"amplitude":0.25630748},{"time":1.0019954,"amplitude":0.24707969},{"time":1.0319954,"amplitude":0.05167922157894737},{"time":1.0590023,"amplitude":0.25499538},{"time":1.0650113,"amplitude":0.53617224,"emphasis":{"amplitude":0.6702153,"frequency":0.5}},{"time":1.0870068,"amplitude":0.3926875},{"time":1.1150113,"amplitude":0.23348391},{"time":1.1740136,"amplitude":0.10417634157894737},{"time":1.1810204,"amplitude":0.5684174080000001,"emphasis":{"amplitude":0.71052176,"frequency":0.5}},{"time":1.216009,"amplitude":0.31895715},{"time":1.2200227,"amplitude":0.43144947},{"time":1.2450113,"amplitude":0.12204121157894736},{"time":1.2870067,"amplitude":0.06813372157894743},{"time":1.2960091,"amplitude":0.4738600800000001,"emphasis":{"amplitude":0.5923251,"frequency":0.5}},{"time":1.3310204,"amplitude":0.31922165},{"time":1.3330158,"amplitude":0.5053144},{"time":1.3650113,"amplitude":0.1065391915789474},{"time":1.4030159,"amplitude":0.23669541},{"time":1.409025,"amplitude":0.48350634400000003,"emphasis":{"amplitude":0.60438293,"frequency":0.5}},{"time":1.475034,"amplitude":0.08432353157894744},{"time":1.5180272,"amplitude":0.25249887},{"time":1.525034,"amplitude":0.43773784,"emphasis":{"amplitude":0.5471723,"frequency":0.5}},{"time":1.542018,"amplitude":0.3559906},{"time":1.5640363,"amplitude":0.41967565},{"time":1.5880272,"amplitude":0.12247006157894734},{"time":1.6290249,"amplitude":0.14120948157894736},{"time":1.6410431,"amplitude":0.51226472,"emphasis":{"amplitude":0.6403309,"frequency":0.5}},{"time":1.6680272,"amplitude":0.2765005},{"time":1.671043,"amplitude":0.44633928},{"time":1.7040362,"amplitude":0.08384057157894743},{"time":1.7120408,"amplitude":0.25186285},{"time":1.7440362,"amplitude":0.030841555578947345},{"time":1.7500453,"amplitude":0.47208775999999997,"emphasis":{"amplitude":0.5901097,"frequency":0.5}},{"time":1.7780272,"amplitude":0.36976838},{"time":1.7880498,"amplitude":0.4158068},{"time":1.8200454,"amplitude":0.17773539},{"time":1.821043,"amplitude":0.33534056},{"time":1.8480499,"amplitude":0.14603917},{"time":1.8990476,"amplitude":0.0962391},{"time":1.931043,"amplitude":0.19243713},{"time":2.0000453,"amplitude":0.088593975},{"time":2.001043,"amplitude":0.08548351},{"time":2.0100453,"amplitude":0.10140311},{"time":2.01805,"amplitude":0.08402896},{"time":2.021043,"amplitude":0.12510465},{"time":2.0400453,"amplitude":0.07161553},{"time":2.086063398770115,"amplitude":0},{"time":2.8750338999999996,"amplitude":0}],"frequency":[{"time":0,"frequency":0.75419134},{"time":0.008707482,"frequency":0.39222333},{"time":0.08417233,"frequency":0.36518186},{"time":0.13641724,"frequency":0.4588598},{"time":0.1509297,"frequency":0.27228317},{"time":0.18866213,"frequency":0.43402776},{"time":0.22349207,"frequency":0.46419927},{"time":0.23219955,"frequency":0.8233143},{"time":0.24380952,"frequency":0.4570914},{"time":0.27283448,"frequency":0.28279522},{"time":0.34539682,"frequency":0.34609255},{"time":0.3541043,"frequency":0.55825466},{"time":0.39183673,"frequency":0.34239596},{"time":0.44117913,"frequency":0.31726328},{"time":0.46730158,"frequency":0.5191309},{"time":0.5514739,"frequency":0.29903167},{"time":0.5834014,"frequency":0.4025386},{"time":0.58920634,"frequency":0.6606683},{"time":0.6153288,"frequency":0.32120034},{"time":0.6327438,"frequency":0.42953804},{"time":0.64725626,"frequency":0.26168442},{"time":0.69369614,"frequency":0.40399224},{"time":0.7024036,"frequency":0.60806006},{"time":0.72852606,"frequency":0.3486996},{"time":0.79528344,"frequency":0.3035791},{"time":0.8272109,"frequency":0.53983444},{"time":0.8649433,"frequency":0.3093474},{"time":0.89687073,"frequency":0.23209977},{"time":0.9258957,"frequency":0.5362626},{"time":0.9984581,"frequency":0.2232645},{"time":1.0013604,"frequency":0.20655945},{"time":1.0390929,"frequency":0.44822955},{"time":1.1464852,"frequency":0.2744515},{"time":1.1726077,"frequency":0.5494005},{"time":1.2045351,"frequency":0.27198124},{"time":1.2277551,"frequency":0.45762366},{"time":1.2422675,"frequency":0.2541736},{"time":1.2916099,"frequency":0.61430097},{"time":1.3177323,"frequency":0.34196287},{"time":1.3525623,"frequency":0.22675645},{"time":1.3873922,"frequency":0.4497179},{"time":1.4048072,"frequency":0.7344605},{"time":1.4135146,"frequency":0.43055916},{"time":1.462857,"frequency":0.17583683},{"time":1.5121995,"frequency":0.38858056},{"time":1.5238094,"frequency":0.81169415},{"time":1.5296144,"frequency":0.41940263},{"time":1.6079818,"frequency":0.26245248},{"time":1.6282992,"frequency":0.6353373},{"time":1.6341043,"frequency":0.4101334},{"time":1.7095691,"frequency":0.27399382},{"time":1.7414966,"frequency":0.68656534},{"time":1.7531065,"frequency":0.4129509},{"time":1.8198639,"frequency":0.24158706},{"time":1.8401814,"frequency":0.38714153},{"time":1.8750112,"frequency":0.27186707},{"time":1.8982311,"frequency":0.46951553},{"time":1.9417686,"frequency":0.33977273},{"time":1.950476,"frequency":0.5145381},{"time":1.9998186,"frequency":0.31459394},{"time":2.002721,"frequency":0.3078197},{"time":2.0230384,"frequency":0.22334851},{"time":2.0346484,"frequency":0.3434809},{"time":2.1043034,"frequency":0},{"time":2.8750338999999996,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.haptic.meta new file mode 100644 index 0000000..4d22fac --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7072562f485c64f5382299fd1d1378e0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.wav new file mode 100644 index 0000000..0c2f69a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.wav.meta new file mode 100644 index 0000000..9b26dd6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunFire2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 60c74ef6462654a18b4395702acc58bd +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.haptic new file mode 100644 index 0000000..b519839 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Heavy Machine Gun Load 1.wav","project":"Heavy Machine Gun Load 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00019770121},{"time":0.0010204081,"amplitude":0.00019770121},{"time":0.0770068,"amplitude":0},{"time":0.07800453,"amplitude":0.13336302},{"time":0.083015874,"amplitude":0.11814864},{"time":0.08501133,"amplitude":0.17393266},{"time":0.09501134,"amplitude":0.13126466},{"time":0.0970068,"amplitude":0.61587167,"emphasis":{"amplitude":0.7698396,"frequency":0.13233452}},{"time":0.10301587,"amplitude":0.7751514},{"time":0.11301587,"amplitude":0.54158276},{"time":0.12301587,"amplitude":0.3575097},{"time":0.1440136,"amplitude":0.16322806},{"time":0.16401361,"amplitude":0.08067304},{"time":0.16600907,"amplitude":0.12034664},{"time":0.18102041,"amplitude":0.08432553},{"time":0.18301587,"amplitude":0.34932503},{"time":0.18600906,"amplitude":0.47467297},{"time":0.19900227,"amplitude":0.28666282},{"time":0.2140136,"amplitude":0.1506692},{"time":0.22600907,"amplitude":0.089394055},{"time":0.24301587,"amplitude":0.04224475},{"time":0.27501133,"amplitude":0.010474139},{"time":0.34301588,"amplitude":0.0007774346},{"time":0.5920181,"amplitude":0.0003343448},{"time":0.60600907,"amplitude":0.020265896},{"time":0.63900226,"amplitude":0.016804984},{"time":0.6460091,"amplitude":0.12482641},{"time":0.64900225,"amplitude":0.11898975},{"time":0.6519955,"amplitude":0.23574752},{"time":0.6580045,"amplitude":0.28743625},{"time":0.65900224,"amplitude":0.36918175},{"time":0.66401356,"amplitude":0.40377763},{"time":0.68,"amplitude":0.2543524},{"time":0.6840136,"amplitude":0.28379676},{"time":0.6850113,"amplitude":0.3887407},{"time":0.7009977,"amplitude":0.23973042},{"time":0.72501135,"amplitude":0.10116376},{"time":0.74600905,"amplitude":0.04502275},{"time":0.7609977,"amplitude":0.026945805},{"time":0.7940136,"amplitude":0.012019461},{"time":0.83900225,"amplitude":0.0041902657},{"time":0.8394558,"amplitude":0.0041902657},{"time":0.8394558,"amplitude":0.0041902657}],"frequency":[{"time":0,"frequency":0},{"time":0.055147387,"frequency":0},{"time":0.101587296,"frequency":0.8431572},{"time":0.16544218,"frequency":0.5680609},{"time":0.26122448,"frequency":0.7599652},{"time":0.27863947,"frequency":0.18554074},{"time":0.3194456068965518,"frequency":0},{"time":0.53696144,"frequency":0},{"time":0.5689459689655173,"frequency":0},{"time":0.62693876,"frequency":0.2128509},{"time":0.63854873,"frequency":0.7222693},{"time":0.67918366,"frequency":1},{"time":0.69079363,"frequency":0.59249717},{"time":0.7662585,"frequency":0.5018395},{"time":0.8272109,"frequency":0.67691517}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.haptic.meta new file mode 100644 index 0000000..921a779 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 06aafbf979b77400ba25f775e1d2ead9 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.wav new file mode 100644 index 0000000..7be5d42 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.wav.meta new file mode 100644 index 0000000..6d700b6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/HeavyMachineGunLoad1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a4475960903154554b44af35f83ca639 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.haptic new file mode 100644 index 0000000..17ce46b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Light Machine Gun Fire 1.wav","project":"Light Machine Gun Fire 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.005341478},{"time":0.0010204081,"amplitude":0.005341478},{"time":0.008004535,"amplitude":0.3063361},{"time":0.03600907,"amplitude":0.509832528,"emphasis":{"amplitude":0.63729066,"frequency":0.9}},{"time":0.0870068,"amplitude":0.1880214699999999},{"time":0.11900227,"amplitude":0.50614256,"emphasis":{"amplitude":0.6326782,"frequency":0.9}},{"time":0.1540136,"amplitude":0.13068805999999994},{"time":0.1570068,"amplitude":0.46556096,"emphasis":{"amplitude":0.5819512,"frequency":0.9}},{"time":0.20201814,"amplitude":0.52953432,"emphasis":{"amplitude":0.6619179,"frequency":0.9}},{"time":0.22501133,"amplitude":0.13701592999999995},{"time":0.22800453,"amplitude":0.48687256000000007,"emphasis":{"amplitude":0.6085907,"frequency":0.9}},{"time":0.2540136,"amplitude":0.50095008,"emphasis":{"amplitude":0.6261876,"frequency":0.9}},{"time":0.29201815,"amplitude":0.08854500999999992},{"time":0.30201814,"amplitude":0.495634984,"emphasis":{"amplitude":0.61954373,"frequency":0.9}},{"time":0.3240136,"amplitude":0.40670664,"emphasis":{"amplitude":0.5083833,"frequency":0.9}},{"time":0.35,"amplitude":0.52697728,"emphasis":{"amplitude":0.6587216,"frequency":0.9}},{"time":0.37301588,"amplitude":0.18109957999999993},{"time":0.4110204,"amplitude":0.522698352,"emphasis":{"amplitude":0.65337294,"frequency":0.9}},{"time":0.4410204,"amplitude":0.13947705999999993},{"time":0.45999998,"amplitude":0.51719616,"emphasis":{"amplitude":0.6464952,"frequency":0.9}},{"time":0.5030159,"amplitude":0.01586179999999998},{"time":0.54099774,"amplitude":0.5128504,"emphasis":{"amplitude":0.641063,"frequency":0.9}},{"time":0.5960091,"amplitude":0.12083323999999995},{"time":0.62201816,"amplitude":0.473505544,"emphasis":{"amplitude":0.59188193,"frequency":0.9}},{"time":0.65900224,"amplitude":0.030979029999999963},{"time":0.6940136,"amplitude":0.52228064,"emphasis":{"amplitude":0.6528508,"frequency":0.9}},{"time":0.7119954,"amplitude":0.17550399999999994},{"time":0.7219955,"amplitude":0.533351232,"emphasis":{"amplitude":0.66668904,"frequency":0.9}},{"time":0.7509977,"amplitude":0.10025112999999991},{"time":0.7770068,"amplitude":0.5102597600000001,"emphasis":{"amplitude":0.6378247,"frequency":0.9}},{"time":0.79301584,"amplitude":0.15152375999999995},{"time":0.8080045,"amplitude":0.44737984,"emphasis":{"amplitude":0.5592248,"frequency":0.9}},{"time":0.8309977,"amplitude":0.05301993000000001},{"time":0.8429932,"amplitude":0.4765842,"emphasis":{"amplitude":0.59573025,"frequency":0.9}},{"time":0.8709977,"amplitude":0.13181315999999993},{"time":0.8729932,"amplitude":0.48430972,"emphasis":{"amplitude":0.60538715,"frequency":0.9}},{"time":0.91999996,"amplitude":0.15686331999999992},{"time":0.9329932,"amplitude":0.5173498160000001,"emphasis":{"amplitude":0.64668727,"frequency":0.9}},{"time":0.95900226,"amplitude":0.12403779999999992},{"time":0.9990023,"amplitude":0.13409335999999994},{"time":1.0009977,"amplitude":0.4775022,"emphasis":{"amplitude":0.59687775,"frequency":0.9}},{"time":1.0019954,"amplitude":0.49587312,"emphasis":{"amplitude":0.6198414,"frequency":0.9}},{"time":1.0529932,"amplitude":0.00933718},{"time":1.0909977,"amplitude":0.5005672800000001,"emphasis":{"amplitude":0.6257091,"frequency":0.9}},{"time":1.1080046,"amplitude":0.14813242999999993},{"time":1.1280046,"amplitude":0.43936524,"emphasis":{"amplitude":0.54920655,"frequency":0.9}},{"time":1.1580045,"amplitude":0.09844376999999993},{"time":1.1690023,"amplitude":0.50990208,"emphasis":{"amplitude":0.6373776,"frequency":0.9}},{"time":1.206009,"amplitude":0.04330637},{"time":1.236009,"amplitude":0.10639629999999994},{"time":1.2390022,"amplitude":0.4980833600000001,"emphasis":{"amplitude":0.6226042,"frequency":0.9}},{"time":1.2670068,"amplitude":0.17376683999999992},{"time":1.2700226,"amplitude":0.5062424799999999,"emphasis":{"amplitude":0.6328031,"frequency":0.9}},{"time":1.3170068,"amplitude":0.09974263999999994},{"time":1.3200227,"amplitude":0.49971816,"emphasis":{"amplitude":0.6246477,"frequency":0.9}},{"time":1.3470294,"amplitude":0.15227471999999992},{"time":1.3570294,"amplitude":0.5191732,"emphasis":{"amplitude":0.6489665,"frequency":0.9}},{"time":1.3810204,"amplitude":0.08306669999999994},{"time":1.4020181,"amplitude":0.508312032,"emphasis":{"amplitude":0.63539004,"frequency":0.9}},{"time":1.4590249,"amplitude":0.4646916400000001,"emphasis":{"amplitude":0.58086455,"frequency":0.9}},{"time":1.4810203,"amplitude":0.51318376,"emphasis":{"amplitude":0.6414797,"frequency":0.9}},{"time":1.5070294,"amplitude":0.17175559999999995},{"time":1.5100226,"amplitude":0.516119816,"emphasis":{"amplitude":0.64514977,"frequency":0.9}},{"time":1.5450339,"amplitude":0.07390659999999993},{"time":1.5720181,"amplitude":0.52438872,"emphasis":{"amplitude":0.6554859,"frequency":0.9}},{"time":1.6000227,"amplitude":0.06252132999999994},{"time":1.6380272,"amplitude":0.13477836999999993},{"time":1.6390249,"amplitude":0.50821232,"emphasis":{"amplitude":0.6352654,"frequency":0.9}},{"time":1.6870295,"amplitude":0.09699885999999991},{"time":1.7190249,"amplitude":0.16354845999999995},{"time":1.7220408,"amplitude":0.506779,"emphasis":{"amplitude":0.63347375,"frequency":0.9}},{"time":1.7700453,"amplitude":0},{"time":1.811043,"amplitude":0.520364664,"emphasis":{"amplitude":0.65045583,"frequency":0.9}},{"time":1.8290476,"amplitude":0.18071269999999995},{"time":1.8400453,"amplitude":0.5254416000000001,"emphasis":{"amplitude":0.656802,"frequency":0.9}},{"time":1.8820407,"amplitude":0.17014761999999994},{"time":1.8930385,"amplitude":0.52368112,"emphasis":{"amplitude":0.6546014,"frequency":0.9}},{"time":1.9220408,"amplitude":0.5269366400000001,"emphasis":{"amplitude":0.6586708,"frequency":0.9}},{"time":1.9620408,"amplitude":0.17530195999999992},{"time":1.9640362,"amplitude":0.5181356,"emphasis":{"amplitude":0.6476695,"frequency":0.9}},{"time":2.0000453,"amplitude":0.42253672000000003,"emphasis":{"amplitude":0.5281709,"frequency":0.9}},{"time":2.001043,"amplitude":0.41615240000000003,"emphasis":{"amplitude":0.5201905,"frequency":0.9}},{"time":2.0430386,"amplitude":0.10862299999999991},{"time":2.0470521,"amplitude":0.52977204,"emphasis":{"amplitude":0.66221505,"frequency":0.9}},{"time":2.0740364,"amplitude":0.17088262999999992},{"time":2.0760543,"amplitude":0.49891816000000005,"emphasis":{"amplitude":0.6236477,"frequency":0.9}},{"time":2.097052,"amplitude":0.14805851999999992},{"time":2.1250339,"amplitude":0.15318803999999991},{"time":2.1280499,"amplitude":0.52264824,"emphasis":{"amplitude":0.6533103,"frequency":0.9}},{"time":2.155034,"amplitude":0.17500241999999994},{"time":2.1930385,"amplitude":0.07471136999999994},{"time":2.2170293,"amplitude":0.51151136,"emphasis":{"amplitude":0.6393892,"frequency":0.9}},{"time":2.235034,"amplitude":0.14677582999999994},{"time":2.2470295,"amplitude":0.504473304,"emphasis":{"amplitude":0.63059163,"frequency":0.9}},{"time":2.2760317,"amplitude":0.04111219999999999},{"time":2.2900226,"amplitude":0.48334056000000003,"emphasis":{"amplitude":0.6041757,"frequency":0.9}},{"time":2.3360317,"amplitude":0.14262239999999993},{"time":2.3650112,"amplitude":0.12624476999999995},{"time":2.372018,"amplitude":0.51395904,"emphasis":{"amplitude":0.6424488,"frequency":0.9}},{"time":2.4000227,"amplitude":0.50137248,"emphasis":{"amplitude":0.6267156,"frequency":0.9}},{"time":2.439025,"amplitude":0.04446610000000002},{"time":2.4610205,"amplitude":0.5100628,"emphasis":{"amplitude":0.6375785,"frequency":0.9}},{"time":2.506009,"amplitude":0.49428608,"emphasis":{"amplitude":0.6178576,"frequency":0.9}},{"time":2.5310204,"amplitude":0.14510509999999993},{"time":2.5340135,"amplitude":0.520903016,"emphasis":{"amplitude":0.65112877,"frequency":0.9}},{"time":2.563016,"amplitude":0.40258056000000003,"emphasis":{"amplitude":0.5032257,"frequency":0.9}},{"time":2.6140137,"amplitude":0.16140632999999993},{"time":2.6240137,"amplitude":0.51855072,"emphasis":{"amplitude":0.6481884,"frequency":0.9}},{"time":2.6450112,"amplitude":0.48261632,"emphasis":{"amplitude":0.6032704,"frequency":0.9}},{"time":2.6680045,"amplitude":0.061807699999999924},{"time":2.6929932,"amplitude":0.13547619999999994},{"time":2.6949887,"amplitude":0.53069644,"emphasis":{"amplitude":0.66337055,"frequency":0.9}},{"time":2.723991,"amplitude":0.17315144999999993},{"time":2.7290022,"amplitude":0.511708832,"emphasis":{"amplitude":0.63963604,"frequency":0.9}},{"time":2.8019955,"amplitude":0.12311803999999998},{"time":2.8039908,"amplitude":0.37589680000000003,"emphasis":{"amplitude":0.469871,"frequency":0.9}},{"time":2.8559864,"amplitude":0.005060360000000014},{"time":2.8996714252873566,"amplitude":0.24487685936842107,"emphasis":{"amplitude":0.3060960742105263,"frequency":0.9}},{"time":2.9519727,"amplitude":0},{"time":2.986984,"amplitude":0.254616352,"emphasis":{"amplitude":0.31827044,"frequency":0.9}},{"time":3.0281114699141227,"amplitude":0},{"time":3.6012244,"amplitude":0.0075624995}],"frequency":[{"time":0,"frequency":1},{"time":0.026122449,"frequency":1},{"time":0.0493424,"frequency":0.103598274},{"time":0.09287982,"frequency":0.25711977},{"time":0.13351475,"frequency":0.119472355},{"time":0.14802721,"frequency":0.5979041},{"time":0.16253969,"frequency":0.22038569},{"time":0.20897959,"frequency":0.056049455},{"time":0.22058958,"frequency":0.5624097},{"time":0.23510204,"frequency":0.1733139},{"time":0.27573696,"frequency":0.14353329},{"time":0.29605442,"frequency":0.59922254},{"time":0.3105669,"frequency":0.18469901},{"time":0.3599093,"frequency":0.1162209},{"time":0.37151927,"frequency":0.36349216},{"time":0.43537414,"frequency":0.12320522},{"time":0.48471656,"frequency":0.18650147},{"time":0.5021315,"frequency":0.54011005},{"time":0.53696144,"frequency":0.18320471},{"time":0.5804989,"frequency":0.093055844},{"time":0.6588662,"frequency":0.49870938},{"time":0.7169161,"frequency":0.057372816},{"time":0.751746,"frequency":0.12730156},{"time":0.7604535,"frequency":0.70687443},{"time":0.774966,"frequency":0.2013226},{"time":0.8068934,"frequency":0.12731503},{"time":0.8388209,"frequency":0.4996523},{"time":0.8707483,"frequency":0.11184936},{"time":0.98975056,"frequency":0.16335447},{"time":0.9984581,"frequency":0.45180494},{"time":1.0013604,"frequency":0.4106219},{"time":1.0303854,"frequency":0.17759904},{"time":1.0448979,"frequency":0.54552794},{"time":1.1116552,"frequency":0.17112106},{"time":1.1232653,"frequency":0.42634356},{"time":1.1464852,"frequency":0.11166057},{"time":1.1987301,"frequency":0.43259352},{"time":1.2277551,"frequency":0.1998327},{"time":1.28,"frequency":0.26051947},{"time":1.3032199,"frequency":0.10614037},{"time":1.3119273,"frequency":0.46253937},{"time":1.3467573,"frequency":0.11059969},{"time":1.3670747,"frequency":0.3465282},{"time":1.3815873,"frequency":0.109173544},{"time":1.3960997,"frequency":0.48134616},{"time":1.4106121,"frequency":0.17611943},{"time":1.4657595,"frequency":0.11569192},{"time":1.4715645,"frequency":0.541233},{"time":1.4889795,"frequency":0.18300515},{"time":1.5441269,"frequency":0.40872556},{"time":1.5731518,"frequency":0.20277001},{"time":1.6137868,"frequency":0.5009407},{"time":1.6689341,"frequency":0.15238301},{"time":1.6863492,"frequency":0.3113189},{"time":1.7095691,"frequency":0.10695431},{"time":1.7792289,"frequency":0.5155027},{"time":1.8314738,"frequency":0.0664526},{"time":1.9301586,"frequency":0.21066427},{"time":1.9765985,"frequency":0.20533307},{"time":1.9998186,"frequency":0.20570084},{"time":2.002721,"frequency":0.23578437},{"time":2.0201359,"frequency":0.075890794},{"time":2.037551,"frequency":0.49828792},{"time":2.1014059,"frequency":0.097651765},{"time":2.1217232,"frequency":0.45518714},{"time":2.1362357,"frequency":0.18983401},{"time":2.2029932,"frequency":0.52630126},{"time":2.237823,"frequency":0.12945695},{"time":2.255238,"frequency":0.3105517},{"time":2.3568254,"frequency":0.17859776},{"time":2.3684354,"frequency":0.43447834},{"time":2.3974602,"frequency":0.13204263},{"time":2.426485,"frequency":0.15978314},{"time":2.4409976,"frequency":0.5553766},{"time":2.4555101,"frequency":0.2706095},{"time":2.5106575,"frequency":0.04948249},{"time":2.5396824,"frequency":0.20123571},{"time":2.5890248,"frequency":0.094029084},{"time":2.6035373,"frequency":0.32270887},{"time":2.6470747,"frequency":0.1974446},{"time":2.690612,"frequency":0.41410148},{"time":2.7515645,"frequency":0.10465227},{"time":2.777687,"frequency":0.5316074},{"time":2.7834918,"frequency":0.22199205},{"time":2.8096144,"frequency":0.40159878},{"time":2.8560543,"frequency":0.16601305},{"time":2.8676643,"frequency":0.45833617},{"time":2.9112017,"frequency":0.1233536},{"time":2.9402266,"frequency":0.26782903},{"time":2.9982765,"frequency":0.1348961},{"time":3.001179,"frequency":0.14437516},{"time":3.018594,"frequency":0.21919338},{"time":3.030204,"frequency":0.1425324},{"time":3.0487603962392655,"frequency":0},{"time":3.6150564999999997,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.haptic.meta new file mode 100644 index 0000000..7b21559 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 38f9bd8468d1d45ffaf65e1fb6314f69 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.wav new file mode 100644 index 0000000..9ac7b36 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.wav.meta new file mode 100644 index 0000000..916c4de --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunFire1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 78174f5aab0e44190ad3ba5cd6047dc0 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.haptic new file mode 100644 index 0000000..250d65b --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Light Machine Gun Load 1.wav","project":"Light Machine Gun Load 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00016721773},{"time":0.0010204081,"amplitude":0.00016721773},{"time":0.04301587,"amplitude":0.0037503769},{"time":0.04600907,"amplitude":0.012893851},{"time":0.114013605,"amplitude":0.0018625468},{"time":0.12002268,"amplitude":0.009214504},{"time":0.12301587,"amplitude":0.1468989},{"time":0.13301587,"amplitude":0.10588882},{"time":0.13401361,"amplitude":0.13355094},{"time":0.1470068,"amplitude":0.08863446},{"time":0.14900227,"amplitude":0.16422795},{"time":0.15102041,"amplitude":0.16304709},{"time":0.16800453,"amplitude":0.08971907},{"time":0.17900227,"amplitude":0.058117423},{"time":0.19201814,"amplitude":0.033973232},{"time":0.21201813,"amplitude":0.01553295},{"time":0.2770068,"amplitude":0.0025888227},{"time":0.45301586,"amplitude":0.000674392},{"time":0.47201812,"amplitude":0.0076990593},{"time":0.5009977,"amplitude":0.0025018356},{"time":0.54600906,"amplitude":0.00084839755},{"time":0.6370068,"amplitude":0.0016464562},{"time":0.72900224,"amplitude":0.00017806698},{"time":0.84900224,"amplitude":0.00082306925},{"time":0.85199547,"amplitude":0.013818888},{"time":0.8680045,"amplitude":0.00907672},{"time":0.8709977,"amplitude":0.055186104},{"time":0.8940136,"amplitude":0.025512114},{"time":0.9060091,"amplitude":0.016692124},{"time":0.9070068,"amplitude":0.026509805},{"time":0.92199546,"amplitude":0.01592796},{"time":0.9440136,"amplitude":0.008894129},{"time":0.94600904,"amplitude":0.09451526},{"time":0.94700676,"amplitude":0.3315693,"emphasis":{"amplitude":0.41446164,"frequency":0.9}},{"time":0.94800454,"amplitude":0.48276618},{"time":0.95,"amplitude":0.47314766},{"time":0.96,"amplitude":0.32863837},{"time":0.96999997,"amplitude":0.2182355},{"time":0.97900224,"amplitude":0.15048015},{"time":0.98600906,"amplitude":0.11290114},{"time":1.0009977,"amplitude":0.060470324},{"time":1.0019954,"amplitude":0.0580661},{"time":1.0140135,"amplitude":0.034987662},{"time":1.0280045,"amplitude":0.019424278},{"time":1.05,"amplitude":0.00788585},{"time":1.0980045,"amplitude":0.0012662266},{"time":1.1409978,"amplitude":0.00033049396},{"time":1.4660317,"amplitude":0.00024240154},{"time":1.5240363,"amplitude":0.0019530872},{"time":1.529025,"amplitude":0.02909737},{"time":1.555034,"amplitude":0.0104545355},{"time":1.5720181,"amplitude":0.0050440114},{"time":1.6010203,"amplitude":0.0016360799},{"time":1.6260318,"amplitude":0.0044706087},{"time":1.6270294,"amplitude":0.031530257},{"time":1.6310204,"amplitude":0.052189305},{"time":1.6410431,"amplitude":0.035870366},{"time":1.6420407,"amplitude":0.0762226},{"time":1.6530385,"amplitude":0.05407374},{"time":1.6640363,"amplitude":0.04268959},{"time":1.669025,"amplitude":0.08385551},{"time":1.6780272,"amplitude":0.07918094},{"time":1.6800226,"amplitude":0.11214208},{"time":1.681043,"amplitude":0.31149444},{"time":1.6830385,"amplitude":0.33999145},{"time":1.6840363,"amplitude":0.34501724,"emphasis":{"amplitude":0.43127155,"frequency":0.1}},{"time":1.6880271,"amplitude":0.42787203},{"time":1.6890249,"amplitude":0.45266923},{"time":1.6930385,"amplitude":0.4284143},{"time":1.705034,"amplitude":0.28960398},{"time":1.7120408,"amplitude":0.22493601},{"time":1.7190249,"amplitude":0.17302246},{"time":1.7290249,"amplitude":0.116860785},{"time":1.7370294,"amplitude":0.08516872},{"time":1.7500453,"amplitude":0.05049563},{"time":1.7610431,"amplitude":0.032448374},{"time":1.7840363,"amplitude":0.012890501},{"time":1.815034,"amplitude":0.003863646},{"time":1.875034,"amplitude":0.00048751078},{"time":1.9990476,"amplitude":0.0007084529},{"time":2.0000453,"amplitude":0.0028561386},{"time":2.001043,"amplitude":0.0061458494},{"time":2.0190475,"amplitude":0.010310292},{"time":2.0220408,"amplitude":0.07319947},{"time":2.0350566,"amplitude":0.0449215},{"time":2.0540361,"amplitude":0.022044726},{"time":2.097052,"amplitude":0.0070018163},{"time":2.0990477,"amplitude":0.09606775},{"time":2.101043,"amplitude":0.35983312,"emphasis":{"amplitude":0.4497914,"frequency":0.5}},{"time":2.1180499,"amplitude":0.24848527},{"time":2.1360316,"amplitude":0.11892201},{"time":2.1460316,"amplitude":0.0783103},{"time":2.161043,"amplitude":0.041872777},{"time":2.1960318,"amplitude":0.009776292},{"time":2.232041,"amplitude":0.0022850332},{"time":2.3160317,"amplitude":0.000120521334},{"time":2.4470067,"amplitude":0.00027235877},{"time":2.5040135,"amplitude":0.0034586396},{"time":2.5100226,"amplitude":0.052754223},{"time":2.53,"amplitude":0.024515355},{"time":2.5470068,"amplitude":0.011659597},{"time":2.5819955,"amplitude":0.0033942275},{"time":2.5890021,"amplitude":0.05816803},{"time":2.603016,"amplitude":0.03828892},{"time":2.6050112,"amplitude":0.0705525},{"time":2.6319954,"amplitude":0.030801069},{"time":2.6329932,"amplitude":0.07294151},{"time":2.6399999,"amplitude":0.0706992},{"time":2.6409976,"amplitude":0.13997842},{"time":2.6480045,"amplitude":0.18289575},{"time":2.6499999,"amplitude":0.4261724,"emphasis":{"amplitude":0.5327155,"frequency":0.9}},{"time":2.6550112,"amplitude":0.5387511},{"time":2.6599998,"amplitude":0.48490706},{"time":2.6619954,"amplitude":0.5965199},{"time":2.6719954,"amplitude":0.4242974},{"time":2.6809976,"amplitude":0.2957562},{"time":2.6919954,"amplitude":0.18898712},{"time":2.71,"amplitude":0.089083835},{"time":2.7280045,"amplitude":0.041832875},{"time":2.7590022,"amplitude":0.0116787115},{"time":2.7859864,"amplitude":0.004011258},{"time":2.7869387,"amplitude":0.004011258},{"time":2.7869387,"amplitude":0.004011258}],"frequency":[{"time":0,"frequency":0},{"time":0.02341823719183512,"frequency":0},{"time":0.101587296,"frequency":0.36179483},{"time":0.14222223,"frequency":0.5406533473684206},{"time":0.19156463,"frequency":0.4764805473684206},{"time":0.21478458,"frequency":0.24751873},{"time":0.2864124933653059,"frequency":0},{"time":0.8381838336530583,"frequency":0},{"time":0.9142857,"frequency":0.7032598},{"time":0.93750566,"frequency":1},{"time":0.9810431,"frequency":1},{"time":0.9984581,"frequency":0.62195176},{"time":1.0013604,"frequency":0.5411449},{"time":1.0274829,"frequency":0.9352259},{"time":1.0478004,"frequency":0.31671658},{"time":1.0869060627898006,"frequency":0},{"time":1.5045255867306115,"frequency":0},{"time":1.509297,"frequency":0.5236842105263152},{"time":1.532517,"frequency":0.3208557},{"time":1.5441269,"frequency":0.47809731052631516},{"time":1.6108843,"frequency":0.5051742},{"time":1.6370068,"frequency":0.5236842105263152},{"time":1.7473015,"frequency":0.5236842105263152},{"time":1.7705214,"frequency":0.6222398},{"time":1.8140589,"frequency":0.5236842105263152},{"time":1.8227663,"frequency":0.28647837},{"time":1.864873692885719,"frequency":0},{"time":1.9840742530775528,"frequency":0},{"time":2.002721,"frequency":0.1999147473684209},{"time":2.1362357,"frequency":0.47333490736842093},{"time":2.1594558,"frequency":0.35259908},{"time":2.2255265686051002,"frequency":0},{"time":2.484237609712247,"frequency":0},{"time":2.5367799,"frequency":0.85},{"time":2.5454874,"frequency":0.32505542},{"time":2.565805,"frequency":0.20384298},{"time":2.5977323,"frequency":0.85},{"time":2.7080271,"frequency":0.85},{"time":2.7283447,"frequency":0.38668266},{"time":2.7673584119704047,"frequency":0},{"time":2.8000225999999997,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.haptic.meta new file mode 100644 index 0000000..b704760 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 43af5559b3ab34a388ebee466729f606 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.wav new file mode 100644 index 0000000..1eec303 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.wav.meta new file mode 100644 index 0000000..5b913ea --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/LightMachineGunLoad1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 35c96e2fd54984c10a14df6dd77db148 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.haptic new file mode 100644 index 0000000..81c03c0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Pistol Fire 1.wav","project":"Pistol Fire 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0013747902},{"time":0.0010204081,"amplitude":0.0013747902},{"time":0.009002267,"amplitude":0.004814633},{"time":0.013015873,"amplitude":0.03617326},{"time":0.014013605,"amplitude":0.1684683},{"time":0.01600907,"amplitude":0.16359964},{"time":0.017006803,"amplitude":0.57184094,"emphasis":{"amplitude":0.71480113,"frequency":0.48699722}},{"time":0.018004535,"amplitude":0.88790506},{"time":0.024013605,"amplitude":0.8532313},{"time":0.035011336,"amplitude":0.5822272},{"time":0.044013605,"amplitude":0.41849297},{"time":0.058004536,"amplitude":0.25754228},{"time":0.06301587,"amplitude":0.30207115},{"time":0.067006804,"amplitude":0.27560222},{"time":0.07,"amplitude":0.31457567},{"time":0.08,"amplitude":0.21960485},{"time":0.091020405,"amplitude":0.15028903},{"time":0.10002267,"amplitude":0.11361762},{"time":0.106009066,"amplitude":0.112119764},{"time":0.11201814,"amplitude":0.14360468},{"time":0.11301587,"amplitude":0.18232065},{"time":0.12600906,"amplitude":0.12425418},{"time":0.12900226,"amplitude":0.15058753},{"time":0.13900226,"amplitude":0.11351115},{"time":0.14301588,"amplitude":0.12047422},{"time":0.16600907,"amplitude":0.05296068},{"time":0.18002267,"amplitude":0.03230259},{"time":0.18102041,"amplitude":0.045877747},{"time":0.21716670724137932,"amplitude":0},{"time":0.7050113,"amplitude":0}],"frequency":[{"time":0,"frequency":0.2334365},{"time":0.008707482,"frequency":0.6030428},{"time":0.0493424,"frequency":0.28061813},{"time":0.07256235,"frequency":0.28859586},{"time":0.104489796,"frequency":0.5665661},{"time":0.11609977,"frequency":0.44407594},{"time":0.1596372,"frequency":0.5515329},{"time":0.19156463,"frequency":0.46780062},{"time":0.26992697000000004,"frequency":0},{"time":0.7050113,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.haptic.meta new file mode 100644 index 0000000..fb16806 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d22e8270dde474957803199e71e64fb0 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.wav new file mode 100644 index 0000000..5296761 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.wav.meta new file mode 100644 index 0000000..b4cd175 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 400bfadff74d1423c93ffffb0666fa04 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.haptic new file mode 100644 index 0000000..e68c888 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Pistol Fire 2.wav","project":"Pistol Fire 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.006474576},{"time":0.0010204081,"amplitude":0.006474576},{"time":0.010017676,"amplitude":0.09411969105263158},{"time":0.010022676,"amplitude":0.5751282,"emphasis":{"amplitude":0.7189102,"frequency":0.4471279}},{"time":0.01201814,"amplitude":0.8700657},{"time":0.013015873,"amplitude":0.8686164},{"time":0.029002268,"amplitude":0.5130691},{"time":0.03600907,"amplitude":0.3999166},{"time":0.04102041,"amplitude":0.334225},{"time":0.048004534,"amplitude":0.26176178},{"time":0.055011336,"amplitude":0.26890746},{"time":0.05600907,"amplitude":0.3526999},{"time":0.061020408,"amplitude":0.31820816},{"time":0.06301587,"amplitude":0.34274516},{"time":0.074013606,"amplitude":0.2458907},{"time":0.0840136,"amplitude":0.18118751},{"time":0.099002264,"amplitude":0.121679336},{"time":0.10201814,"amplitude":0.13740924},{"time":0.1070068,"amplitude":0.2057041},{"time":0.12102041,"amplitude":0.14473927},{"time":0.12301587,"amplitude":0.16303141},{"time":0.13201813,"amplitude":0.12606853},{"time":0.13600907,"amplitude":0.1307155},{"time":0.14900227,"amplitude":0.08277064},{"time":0.17265519048275862,"amplitude":0},{"time":0.47501133,"amplitude":0}],"frequency":[{"time":0,"frequency":0.57100064},{"time":0.017414967,"frequency":0.6240895},{"time":0.023219952,"frequency":0.3638645},{"time":0.031927437,"frequency":0.63673264},{"time":0.04643991,"frequency":0.40069765},{"time":0.05804988,"frequency":0.7936376},{"time":0.066757366,"frequency":0.32869053},{"time":0.08417233,"frequency":0.6898684},{"time":0.089977324,"frequency":0.43374088},{"time":0.09578231,"frequency":0.790855},{"time":0.104489796,"frequency":0.4856898},{"time":0.113197275,"frequency":0.74096566},{"time":0.12190475,"frequency":0.5021939},{"time":0.13641724,"frequency":0.5555076},{"time":0.14512472,"frequency":0.37360087},{"time":0.18136336917241375,"frequency":0},{"time":0.47501133,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.haptic.meta new file mode 100644 index 0000000..0831954 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d03459874a5824152b9f05808a1955de +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.wav new file mode 100644 index 0000000..33b64bc Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.wav.meta new file mode 100644 index 0000000..6fbde93 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 5726a1919a76249248b71f2c0db2de16 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.haptic new file mode 100644 index 0000000..08cdf06 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Pistol Fire 3.wav","project":"Pistol Fire 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00084715406},{"time":0.0010204081,"amplitude":0.00084715406},{"time":0.037006803,"amplitude":0.0026863308},{"time":0.038004536,"amplitude":0.3392568,"emphasis":{"amplitude":0.6451236115789477,"frequency":0.1}},{"time":0.04,"amplitude":0.53781044},{"time":0.04102041,"amplitude":0.6459989073684206},{"time":0.04301587,"amplitude":0.6513076473684206},{"time":0.06800453,"amplitude":0.47808647},{"time":0.08201814,"amplitude":0.2931498},{"time":0.090022676,"amplitude":0.3392464},{"time":0.11600907,"amplitude":0.16287345},{"time":0.13002267,"amplitude":0.10467833},{"time":0.15600906,"amplitude":0.07896006},{"time":0.16002268,"amplitude":0.1297919},{"time":0.18301587,"amplitude":0.09430301},{"time":0.1840136,"amplitude":0.12424647},{"time":0.20002267,"amplitude":0.0773236},{"time":0.23195058482758601,"amplitude":0},{"time":0.8550113,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.031036307045977013,"frequency":0},{"time":0.03590434326436782,"frequency":0.4178769578947363},{"time":0.055147387,"frequency":0.087837234},{"time":0.09578231,"frequency":0.094608314},{"time":0.11609977,"frequency":0.5120439},{"time":0.1538322,"frequency":0.27322012},{"time":0.17414966,"frequency":0.43747324},{"time":0.18285714,"frequency":0.22971697},{"time":0.19446713,"frequency":0.45729804},{"time":0.2591672871264368,"frequency":0},{"time":0.8550113,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.haptic.meta new file mode 100644 index 0000000..72031d4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d757bd5e13ca64b2392045091e372177 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.wav new file mode 100644 index 0000000..36a18b6 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.wav.meta new file mode 100644 index 0000000..047c8d6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolFire3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: bc8c3727d81b340f685d13c544c0662c +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.haptic new file mode 100644 index 0000000..a957818 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Pistol Load 1.wav","project":"Pistol Load 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00014239385},{"time":0.0010204081,"amplitude":0.00014239385},{"time":0.003015873,"amplitude":0.0014383966},{"time":0.017006803,"amplitude":0.0011642828},{"time":0.019002268,"amplitude":0.010724387},{"time":0.020022675,"amplitude":0.06656814},{"time":0.02201814,"amplitude":0.06523386},{"time":0.037006802999999984,"amplitude":0},{"time":0.038004536,"amplitude":0.109994374},{"time":0.039002266,"amplitude":0.124624774},{"time":0.058997265,"amplitude":0},{"time":0.07400860599999999,"amplitude":0},{"time":0.074013606,"amplitude":0.45757475,"emphasis":{"amplitude":0.57196844,"frequency":0.4625496}},{"time":0.07600907,"amplitude":0.5618719},{"time":0.08102041,"amplitude":0.46694118},{"time":0.08501133,"amplitude":0.3984651},{"time":0.08900227,"amplitude":0.3421844},{"time":0.09600907,"amplitude":0.2737411},{"time":0.10002267,"amplitude":0.24742901},{"time":0.1010204,"amplitude":0.2660755},{"time":0.10201814,"amplitude":0.46338975},{"time":0.10301587,"amplitude":0.45979518},{"time":0.106009066,"amplitude":0.4257052},{"time":0.11201814,"amplitude":0.3439152},{"time":0.11800453,"amplitude":0.27284694},{"time":0.122018136,"amplitude":0.22974868},{"time":0.12501134,"amplitude":0.20206594},{"time":0.12900226,"amplitude":0.17061567},{"time":0.13600907,"amplitude":0.1263535},{"time":0.1410204,"amplitude":0.10187516},{"time":0.14900227,"amplitude":0.07238653},{"time":0.1540136,"amplitude":0.05857628},{"time":0.15900226,"amplitude":0.04756649},{"time":0.17533661713793106,"amplitude":0},{"time":0.19501133,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.010500689632183908,"frequency":0},{"time":0.014512472,"frequency":0.8251435},{"time":0.017414967,"frequency":0.89865917},{"time":0.023219952,"frequency":0.9627889},{"time":0.026122449,"frequency":0.94873685},{"time":0.031927437,"frequency":0.7396115},{"time":0.043537416,"frequency":0.7584723},{"time":0.0493424,"frequency":0.82701343},{"time":0.052244894,"frequency":0.90954804},{"time":0.05804988,"frequency":0.7615652},{"time":0.066757366,"frequency":0.6294058},{"time":0.08126984,"frequency":0.6952506},{"time":0.08417233,"frequency":0.677895},{"time":0.08707482,"frequency":0.60806787},{"time":0.09287982,"frequency":0.6629033},{"time":0.09578231,"frequency":0.716527},{"time":0.104489796,"frequency":0.7729553},{"time":0.10739229,"frequency":0.74379206},{"time":0.113197275,"frequency":0.58420324},{"time":0.11900226,"frequency":0.5426021},{"time":0.12770975,"frequency":0.6859501},{"time":0.13351475,"frequency":0.62509453},{"time":0.14222223,"frequency":0.6177462},{"time":0.14802721,"frequency":0.5099486},{"time":0.1538322,"frequency":0.44792664},{"time":0.1596372,"frequency":0.4211915},{"time":0.16544218,"frequency":0.3558639},{"time":0.19501133,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.haptic.meta new file mode 100644 index 0000000..4c48239 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9f6ba142c954246868317548c7c93b42 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.wav new file mode 100644 index 0000000..2dd5959 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.wav.meta new file mode 100644 index 0000000..344d762 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 20cd234ad5e474cb096db066309a975c +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.haptic new file mode 100644 index 0000000..9f87e66 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Pistol Load 2.wav","project":"Pistol Load 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00021359185},{"time":0.0010204081,"amplitude":0.00021359185},{"time":0.010657439413793103,"amplitude":0},{"time":0.01201814,"amplitude":0.08348714},{"time":0.033015873,"amplitude":0.06278652},{"time":0.0470068,"amplitude":0.035598457},{"time":0.06312158827586206,"amplitude":0},{"time":0.06401361,"amplitude":0.07653265},{"time":0.08,"amplitude":0.040789347},{"time":0.08201814,"amplitude":0.13597609},{"time":0.10002267,"amplitude":0.072945185},{"time":0.10201814,"amplitude":0.17398958},{"time":0.10900226,"amplitude":0.13472527},{"time":0.11002267,"amplitude":0.24178419},{"time":0.11600907,"amplitude":0.20647117},{"time":0.1170068,"amplitude":0.4734142},{"time":0.1170118,"amplitude":0.47293272000000003,"emphasis":{"amplitude":0.5911659,"frequency":0.5}},{"time":0.13002267,"amplitude":0.3917318},{"time":0.14500633999999998,"amplitude":0.059458464210526384},{"time":0.14501134,"amplitude":0.42350975,"emphasis":{"amplitude":0.5293872,"frequency":0.9}},{"time":0.16600907,"amplitude":0.25041148},{"time":0.1740136,"amplitude":0.17645676},{"time":0.19002268,"amplitude":0.08849679},{"time":0.20732394482758618,"amplitude":0},{"time":0.37899727,"amplitude":0},{"time":0.3840136,"amplitude":0.19174875},{"time":0.38501135,"amplitude":0.2314175},{"time":0.38600907,"amplitude":0.41789117,"emphasis":{"amplitude":0.52236396,"frequency":0.9}},{"time":0.4070068,"amplitude":0.26539212},{"time":0.4140136,"amplitude":0.19845697},{"time":0.42501134,"amplitude":0.12493755},{"time":0.4533470775862068,"amplitude":0},{"time":0.48,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.026122449,"frequency":0.22812514},{"time":0.06965986,"frequency":0.6117163},{"time":0.08126984,"frequency":0.9861095},{"time":0.09287982,"frequency":0.6911284},{"time":0.101587296,"frequency":0.97964185},{"time":0.10739229,"frequency":0.47046292},{"time":0.113197275,"frequency":0.8223366},{"time":0.124807246,"frequency":0.6428161},{"time":0.1509297,"frequency":1},{"time":0.17414966,"frequency":0.54002935},{"time":0.22186066068965524,"frequency":0},{"time":0.36511502965517234,"frequency":0},{"time":0.3686168,"frequency":0.45862013},{"time":0.37151927,"frequency":0.9000684},{"time":0.38603175,"frequency":0.75597924},{"time":0.4034467,"frequency":0.79583216},{"time":0.4121542,"frequency":0.43896863},{"time":0.45278913,"frequency":0.59389293}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.haptic.meta new file mode 100644 index 0000000..740651d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 69a217bbc5a4f46cf961eb14307123af +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.wav new file mode 100644 index 0000000..ee52948 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.wav.meta new file mode 100644 index 0000000..7f213eb --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: c8431612ecb2a43c28170aae3fba7946 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.haptic new file mode 100644 index 0000000..8218874 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Pistol Load 3.wav","project":"Pistol Load 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0035171935},{"time":0.0010204081,"amplitude":0.0035171935},{"time":0.06500634,"amplitude":0},{"time":0.069995,"amplitude":0.045287985},{"time":0.07,"amplitude":0.15517515},{"time":0.07201814,"amplitude":0.43754112000000006,"emphasis":{"amplitude":0.5469264,"frequency":0.5}},{"time":0.08201814,"amplitude":0.37760195},{"time":0.083015874,"amplitude":0.5790241},{"time":0.091020405,"amplitude":0.56293017},{"time":0.10501134,"amplitude":0.33706445},{"time":0.12002268,"amplitude":0.18271747},{"time":0.13002267,"amplitude":0.11898585},{"time":0.14600907,"amplitude":0.058601033},{"time":0.1899261859770115,"amplitude":0},{"time":0.4542321550574711,"amplitude":0},{"time":0.45999998,"amplitude":0.0355447},{"time":0.46099773,"amplitude":0.34848365,"emphasis":{"amplitude":0.43560454,"frequency":0.2998039}},{"time":0.48,"amplitude":0.20734984},{"time":0.49900225,"amplitude":0.088973716},{"time":0.5109977,"amplitude":0.05250122},{"time":0.5288801689655174,"amplitude":0},{"time":0.6209927,"amplitude":0},{"time":0.6209977,"amplitude":0.4149298},{"time":0.6230159,"amplitude":0.45019283200000004,"emphasis":{"amplitude":0.56274104,"frequency":0.9}},{"time":0.6409977,"amplitude":0.55355966},{"time":0.64900225,"amplitude":0.40791634},{"time":0.65900224,"amplitude":0.27285257},{"time":0.6670068,"amplitude":0.19581641},{"time":0.6830159,"amplitude":0.097388715},{"time":0.70199543,"amplitude":0.043068573},{"time":0.7242803620689654,"amplitude":0},{"time":0.91,"amplitude":0}],"frequency":[{"time":0,"frequency":0},{"time":0.055142387,"frequency":0},{"time":0.055147387,"frequency":0.2899218},{"time":0.07546485,"frequency":0.671052631578947},{"time":0.08707482,"frequency":0.671052631578947},{"time":0.14802721,"frequency":0.02491412},{"time":0.17995465,"frequency":0},{"time":0.42376417,"frequency":0.000020837393},{"time":0.44988662,"frequency":0.16908118},{"time":0.4556916,"frequency":0.5184618},{"time":0.46730158,"frequency":0.58095044},{"time":0.47310656,"frequency":0.1773554},{"time":0.5195734852873563,"frequency":0},{"time":0.6070921620689653,"frequency":0},{"time":0.6124263,"frequency":0.8368421052631578},{"time":0.6356462,"frequency":0.8368421052631578},{"time":0.64145124,"frequency":0.16539654},{"time":0.6559637,"frequency":0},{"time":0.68208617,"frequency":0.055501666},{"time":0.7140136,"frequency":0},{"time":0.91,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.haptic.meta new file mode 100644 index 0000000..d1ecbeb --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a3b5426862ac8458fbde2bd74cc5ebe6 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.wav new file mode 100644 index 0000000..26ad2d4 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.wav.meta new file mode 100644 index 0000000..c7a2027 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/PistolLoad3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: d58a6efe3c9ea4cbc930c9fc149ecade +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.haptic new file mode 100644 index 0000000..fade78e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Scifi Gunshot 1.wav","project":"Scifi Gunshot","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.001199269},{"time":0.015219543926646616,"amplitude":0.4147368421052634,"emphasis":{"amplitude":0.8184210526315792,"frequency":0.5}},{"time":0.030586715184050435,"amplitude":0},{"time":0.05834492692664663,"amplitude":0},{"time":0.05834992692664663,"amplitude":0.8,"emphasis":{"amplitude":1,"frequency":0.5}},{"time":0.07664930089526614,"amplitude":0.31748553947368424},{"time":0.14947880400239333,"amplitude":0.8815789473684207},{"time":0.2477950075937601,"amplitude":0.08571599105263157},{"time":0.2849969262395191,"amplitude":0.03643827105263159},{"time":0.37641722,"amplitude":0.0013483367},{"time":0.5387755,"amplitude":0.00006327399},{"time":0.5391837,"amplitude":0.00006327399}],"frequency":[{"time":0,"frequency":0},{"time":0.014285835953593843,"frequency":0.5187287157894739},{"time":0.051136964691438504,"frequency":0.20991236892541437},{"time":0.05847903366789338,"frequency":0.797368421052631},{"time":0.07993769051874847,"frequency":0.21576016624451255},{"time":0.13318960405702576,"frequency":0.5023926600705468},{"time":0.32769876,"frequency":0},{"time":0.5391837,"frequency":0.008890183}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.haptic.meta new file mode 100644 index 0000000..b7927b0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 68139b13ff2fc4759a9c17d340afcb86 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.wav new file mode 100644 index 0000000..49ae76a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.wav.meta new file mode 100644 index 0000000..8c4c5c0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ScifiGunshot1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 039dfbda1b6204409aeb52ea32a3aef0 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.haptic new file mode 100644 index 0000000..481ed30 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Shotgun Fire 1.wav","project":"Shotgun Fire 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0066149514},{"time":0.0010204081,"amplitude":0.0066149514},{"time":0.008004535,"amplitude":0.022371264},{"time":0.008009535,"amplitude":0.5837888421052635,"emphasis":{"amplitude":0.604736052631579,"frequency":0.5}},{"time":0.03600907,"amplitude":0.6363638},{"time":0.06301587,"amplitude":0.6921993},{"time":0.0840136,"amplitude":0.65888035},{"time":0.12102041,"amplitude":0.60387695},{"time":0.14002268,"amplitude":0.4174874},{"time":0.1610204,"amplitude":0.3864498},{"time":0.16501133,"amplitude":0.48380077},{"time":0.18301587,"amplitude":0.2992868},{"time":0.18501133,"amplitude":0.43347418},{"time":0.21501133,"amplitude":0.41386044},{"time":0.24201813,"amplitude":0.23239252},{"time":0.2510204,"amplitude":0.54939115},{"time":0.26800454,"amplitude":0.3590215},{"time":0.27800453,"amplitude":0.5958283},{"time":0.28900227,"amplitude":0.42138946},{"time":0.2970068,"amplitude":0.5832466},{"time":0.31800452,"amplitude":0.31828755},{"time":0.3640136,"amplitude":0.15185077},{"time":0.3810204,"amplitude":0.33437195},{"time":0.4,"amplitude":0.19487073},{"time":0.41600907,"amplitude":0.27437648},{"time":0.4170068,"amplitude":0.5007267},{"time":0.43900225,"amplitude":0.25429627},{"time":0.47900227,"amplitude":0.1036192},{"time":0.50900227,"amplitude":0.14952806},{"time":0.5380045,"amplitude":0.078692764},{"time":0.5803195147126436,"amplitude":0},{"time":1.2450113,"amplitude":0}],"frequency":[{"time":0,"frequency":0.5849262421052631},{"time":0.017253367370114934,"frequency":0.5657894736842097},{"time":0.026122449,"frequency":0.4506352373684211},{"time":0.07256235,"frequency":0.3899631073684211},{"time":0.104489796,"frequency":0.4792967},{"time":0.13931973,"frequency":0.29890943},{"time":0.14802721,"frequency":0.4748363},{"time":0.21188208,"frequency":0.20756246},{"time":0.22639456,"frequency":0.380372},{"time":0.2554195,"frequency":0.26484334},{"time":0.33959183,"frequency":0.26338732},{"time":0.3570068,"frequency":0.41872057},{"time":0.38022676,"frequency":0.18613291},{"time":0.39473924,"frequency":0.3211415},{"time":0.43247166,"frequency":0.17937513},{"time":0.4702041,"frequency":0.2561263},{"time":0.510839,"frequency":0.15641241},{"time":0.5340589,"frequency":0.33336815},{"time":0.5601814,"frequency":0.21000004},{"time":0.6310299171264366,"frequency":0},{"time":1.2450113,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.haptic.meta new file mode 100644 index 0000000..9c82d99 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6dd37df61490f4beca8547a32139ef17 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.wav new file mode 100644 index 0000000..dc3968a Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.wav.meta new file mode 100644 index 0000000..8d7bcd4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: c0ec0f215d91a4056b5f9f5532f8a6a6 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.haptic new file mode 100644 index 0000000..7b5fe42 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Shotgun Fire 2.wav","project":"Shotgun Fire 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.4776227631578947,"emphasis":{"amplitude":0.6147916368421052,"frequency":0.1}},{"time":0.000005,"amplitude":0.5779495315789472},{"time":0.10874604218390803,"amplitude":0.5971336263157895},{"time":0.1478092605747126,"amplitude":0.3919598578947367},{"time":0.25101042,"amplitude":0.23532276999999985},{"time":0.26201043,"amplitude":0.07860953999999987},{"time":0.31351149425287356,"amplitude":0},{"time":0.372,"amplitude":0},{"time":0.566448245862069,"amplitude":0},{"time":0.57199997,"amplitude":0.23995128000000002,"emphasis":{"amplitude":0.2999391,"frequency":0.9}},{"time":0.603,"amplitude":0.11857555},{"time":0.612,"amplitude":0.25852062400000003,"emphasis":{"amplitude":0.32315078,"frequency":0.9}},{"time":0.649,"amplitude":0.16767083},{"time":0.65099996,"amplitude":0.245965,"emphasis":{"amplitude":0.30745625,"frequency":0.9}},{"time":0.682,"amplitude":0.24584413},{"time":0.695,"amplitude":0.27615392,"emphasis":{"amplitude":0.3451924,"frequency":0.9}},{"time":0.722,"amplitude":0.23729208000000002,"emphasis":{"amplitude":0.2966151,"frequency":0.9}},{"time":0.74,"amplitude":0.15025698},{"time":0.8115919140229885,"amplitude":0},{"time":0.821,"amplitude":0.100724086},{"time":0.854,"amplitude":0.03735364},{"time":0.86399996,"amplitude":0.18507224},{"time":0.899,"amplitude":0.112868816},{"time":0.908,"amplitude":0.270774744,"emphasis":{"amplitude":0.33846843,"frequency":0.9}},{"time":0.941,"amplitude":0.13061726},{"time":0.946,"amplitude":0.221840024,"emphasis":{"amplitude":0.27730003,"frequency":0.9}},{"time":0.976,"amplitude":0.21617280000000003,"emphasis":{"amplitude":0.270216,"frequency":0.9}},{"time":0.978,"amplitude":0.2999974,"emphasis":{"amplitude":0.37499675,"frequency":0.9}},{"time":1.001,"amplitude":0.35167044},{"time":1.002,"amplitude":0.34351712},{"time":1.006,"amplitude":0.30770156},{"time":1.01,"amplitude":0.27555984},{"time":1.011,"amplitude":0.2717994},{"time":1.012,"amplitude":0.30204734},{"time":1.015,"amplitude":0.30230948},{"time":1.018,"amplitude":0.2866054},{"time":1.022,"amplitude":0.2603819},{"time":1.025,"amplitude":0.23554358},{"time":1.027,"amplitude":0.22524078},{"time":1.031,"amplitude":0.21002397},{"time":1.035,"amplitude":0.19012927},{"time":1.039,"amplitude":0.17341176},{"time":1.043,"amplitude":0.15890115},{"time":1.0469999,"amplitude":0.13584921},{"time":1.052,"amplitude":0.11134386},{"time":1.054,"amplitude":0.104220316},{"time":1.076005,"amplitude":0},{"time":1.225,"amplitude":0}],"frequency":[{"time":0,"frequency":0.6117878768421053},{"time":0.09748276195402299,"frequency":0.5381113894736843},{"time":0.116,"frequency":0.111698665},{"time":0.12799999,"frequency":0.34593537},{"time":0.17066666,"frequency":0.16668867},{"time":0.18666667,"frequency":0.39448825},{"time":0.208,"frequency":0.17777759},{"time":0.34828735632183905,"frequency":0},{"time":0.5546379343678162,"frequency":0},{"time":0.56533337,"frequency":0.6876481589473685},{"time":0.59866667,"frequency":0.8729921189473687},{"time":0.624,"frequency":0.6110731089473687},{"time":0.66,"frequency":0.6572195489473686},{"time":0.66400003,"frequency":0.9854413789473687},{"time":0.7226667,"frequency":0.09823649},{"time":0.8439950399999999,"frequency":0.16683187789473689},{"time":0.84400004,"frequency":0.15771461421052635},{"time":0.86266667,"frequency":0.5759306342105259},{"time":0.87333333,"frequency":0.2554221842105262},{"time":0.90400004,"frequency":0.5233848542105259},{"time":0.936,"frequency":0.17996801421052633},{"time":0.96133333,"frequency":0.6351867842105259},{"time":0.99866664,"frequency":0.18539650421052634},{"time":1,"frequency":0.15226307421052632},{"time":1.0066667,"frequency":0.2758672642105262},{"time":1.0947068632183905,"frequency":0},{"time":1.225,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.haptic.meta new file mode 100644 index 0000000..771a337 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c1a7a4e32d30d4b6c9c73f61b7d22f47 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.wav new file mode 100644 index 0000000..bf46b70 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.wav.meta new file mode 100644 index 0000000..73037e7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 5581f801bb45f46508948b1ab38f1178 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.haptic new file mode 100644 index 0000000..eda70de --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Shotgun Fire 3.wav","project":"Shotgun Fire 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.5542482826315789,"emphasis":{"amplitude":0.6937219668421054,"frequency":0.43582723}},{"time":0.033424209803448277,"amplitude":0.6335189957894735},{"time":0.121010415,"amplitude":0.6505929415789471},{"time":0.301,"amplitude":0.14980062000000002},{"time":0.309,"amplitude":0.05034554000000002},{"time":0.321,"amplitude":0.14301416000000003},{"time":0.333,"amplitude":0.006234760000000006},{"time":0.34,"amplitude":0.13568765000000002},{"time":0.35999998,"amplitude":0.15822182000000004},{"time":0.371,"amplitude":0.03235992000000004},{"time":0.386,"amplitude":0.13953850000000004},{"time":0.396,"amplitude":0.03870262000000002},{"time":0.413,"amplitude":0.15220228000000005},{"time":0.4216781609195402,"amplitude":0},{"time":0.45,"amplitude":0},{"time":0.45499998,"amplitude":0.334105256,"emphasis":{"amplitude":0.56763157,"frequency":0.5}},{"time":0.475,"amplitude":0.21516709},{"time":0.47599998,"amplitude":0.34243976,"emphasis":{"amplitude":0.5780497,"frequency":0.5}},{"time":0.491,"amplitude":0.30645528},{"time":0.52099997,"amplitude":0.21359429},{"time":0.522,"amplitude":0.2695616,"emphasis":{"amplitude":0.486952,"frequency":0.5}},{"time":0.538,"amplitude":0.21315408},{"time":0.55,"amplitude":0.29815979200000003,"emphasis":{"amplitude":0.5226997400000001,"frequency":0.5}},{"time":0.568,"amplitude":0.21063362},{"time":0.578,"amplitude":0.33889186400000004,"emphasis":{"amplitude":0.57361483,"frequency":0.5}},{"time":0.601,"amplitude":0.20796677},{"time":0.601005,"amplitude":0},{"time":0.714,"amplitude":0},{"time":0.747,"amplitude":0.231415824,"emphasis":{"amplitude":0.42348030631578965,"frequency":0.5}},{"time":0.777,"amplitude":0.31106414400000004,"emphasis":{"amplitude":0.5230407063157896,"frequency":0.5}},{"time":0.802,"amplitude":0},{"time":0.8044885057471262,"amplitude":0},{"time":0.8054885057471262,"amplitude":0.12262294400000001,"emphasis":{"amplitude":0.28748920631578956,"frequency":0.5}},{"time":0.8324885057471262,"amplitude":0.14618656800000002,"emphasis":{"amplitude":0.3169437363157896,"frequency":0.5}},{"time":0.8334885057471262,"amplitude":0},{"time":0.914,"amplitude":0.0019088700000000625},{"time":1.8800000000000001,"amplitude":0}],"frequency":[{"time":0,"frequency":0.54869634},{"time":0.16,"frequency":0.54982096},{"time":0.18666667,"frequency":0.3023717},{"time":0.2,"frequency":0.5477098},{"time":0.248,"frequency":0.38390088},{"time":0.25866666,"frequency":0.54541737},{"time":0.29466665,"frequency":0.29604685},{"time":0.33733332,"frequency":0.22972976},{"time":0.36933333,"frequency":0.400107},{"time":0.44666666,"frequency":0.20420825},{"time":0.45466667,"frequency":0.36488482},{"time":0.656,"frequency":0.3256439},{"time":0.66800004,"frequency":0.6215102},{"time":0.6986667,"frequency":0.53726864},{"time":0.7066667,"frequency":0.23445205},{"time":0.75733334,"frequency":0.42382398},{"time":0.78800005,"frequency":0.1905306},{"time":0.8186667,"frequency":0.515007},{"time":0.836,"frequency":0.17193611},{"time":0.8936552090804598,"frequency":0},{"time":1.8800000000000001,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.haptic.meta new file mode 100644 index 0000000..f21cdd7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d6fc63a0d606d42d5afa4d84d1bd63ec +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.wav new file mode 100644 index 0000000..ea8213e Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.wav.meta new file mode 100644 index 0000000..b6a808f --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunFire3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: db43be1b3b3c343a9b59ce8cd6e05177 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.haptic new file mode 100644 index 0000000..e21e42e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Shotgun Load 1.wav","project":"Shotgun Load 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.001422237},{"time":0.0010204081,"amplitude":0.001422237},{"time":0.013015873,"amplitude":0.008987483},{"time":0.01600907,"amplitude":0.06366735},{"time":0.034013607,"amplitude":0.030931147},{"time":0.06501134,"amplitude":0.022056393},{"time":0.067006804,"amplitude":0.06305879},{"time":0.08900227,"amplitude":0.032131262},{"time":0.091020405,"amplitude":0.08091086},{"time":0.12002268,"amplitude":0.05340912},{"time":0.1240136,"amplitude":0.10417336},{"time":0.12800454,"amplitude":0.53496027},{"time":0.14800453,"amplitude":0.28094745},{"time":0.1610204,"amplitude":0.17047648},{"time":0.16501133,"amplitude":0.4240473},{"time":0.1840136,"amplitude":0.2235399},{"time":0.1910204,"amplitude":0.18180674},{"time":0.19201814,"amplitude":0.33344474},{"time":0.2070068,"amplitude":0.20554952},{"time":0.23201814,"amplitude":0.08536933},{"time":0.271470945862069,"amplitude":0},{"time":0.5559216459770115,"amplitude":0},{"time":0.6120131,"amplitude":0},{"time":0.64,"amplitude":0.07975157},{"time":0.6619955,"amplitude":0.04328283},{"time":0.6670068,"amplitude":0.21981953},{"time":0.67501134,"amplitude":0.20391768},{"time":0.67600906,"amplitude":0.28491342},{"time":0.69900227,"amplitude":0.14669062},{"time":0.7,"amplitude":0.3920704,"emphasis":{"amplitude":0.49008802,"frequency":0.18995324}},{"time":0.71301585,"amplitude":0.4485705},{"time":0.7170068,"amplitude":0.55948544},{"time":0.7380045,"amplitude":0.2681047},{"time":0.7640136,"amplitude":0.09355131},{"time":0.78,"amplitude":0.048848353},{"time":0.81700677,"amplitude":0.0103432555},{"time":0.8179365,"amplitude":0.0103432555},{"time":0.8179365,"amplitude":0.0103432555}],"frequency":[{"time":0,"frequency":0.6356861},{"time":0.066757366,"frequency":0.75163424},{"time":0.09287982,"frequency":0.62821835},{"time":0.113197275,"frequency":1},{"time":0.13931973,"frequency":0.5917645},{"time":0.1509297,"frequency":1},{"time":0.1596372,"frequency":0.5817033},{"time":0.17414966,"frequency":0.8649983},{"time":0.21768707,"frequency":0.46134183},{"time":0.27282948,"frequency":0},{"time":0.5773031050853704,"frequency":0},{"time":0.6138301100837427,"frequency":0.6461538959325632},{"time":0.6588662,"frequency":0.7314917},{"time":0.7053061,"frequency":0.5805996},{"time":0.7169161,"frequency":0.7645722},{"time":0.740136,"frequency":0.4143002},{"time":0.83,"frequency":0.38204986526315765}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.haptic.meta new file mode 100644 index 0000000..411e296 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5527f1ddc0edb497cb8e914b23cad718 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.wav new file mode 100644 index 0000000..3109c02 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.wav.meta new file mode 100644 index 0000000..dc0c4e9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: ebdde62f5ecec4656aedd528b468e011 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.haptic new file mode 100644 index 0000000..bca1467 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Shotgun Load 2.wav","project":"Shotgun Load 2","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.0018746674},{"time":0.0010204081,"amplitude":0.0018746674},{"time":0.023075611264367815,"amplitude":0},{"time":0.028004535,"amplitude":0.16166010126315788,"emphasis":{"amplitude":0.24603993342105263,"frequency":0.9}},{"time":0.0470068,"amplitude":0.05497996},{"time":0.07600907,"amplitude":0},{"time":0.07800453,"amplitude":0.07069709},{"time":0.08900227,"amplitude":0.08177712},{"time":0.106009066,"amplitude":0.04831567},{"time":0.11102041,"amplitude":0.12966518},{"time":0.115011334,"amplitude":0.31571107200000004,"emphasis":{"amplitude":0.39463884,"frequency":0.5}},{"time":0.12900226,"amplitude":0.2703331},{"time":0.15002267,"amplitude":0.120992474},{"time":0.15102041,"amplitude":0.23853292800000003,"emphasis":{"amplitude":0.29816616,"frequency":0.5}},{"time":0.1570068,"amplitude":0.3188402},{"time":0.17301586,"amplitude":0.17078313},{"time":0.18201813,"amplitude":0.12624036},{"time":0.18301587,"amplitude":0.15588592,"emphasis":{"amplitude":0.1948574,"frequency":0.5}},{"time":0.21002267,"amplitude":0.077910945},{"time":0.2315491356321839,"amplitude":0},{"time":0.28877222068965525,"amplitude":0},{"time":0.29600906,"amplitude":0.048747692},{"time":0.30154913563218394,"amplitude":0.12079336000000002,"emphasis":{"amplitude":0.1509917,"frequency":0.9}},{"time":0.3240136,"amplitude":0.065798625},{"time":0.33800453,"amplitude":0.121110894},{"time":0.33900225,"amplitude":0.18758924},{"time":0.3440136,"amplitude":0.16503288},{"time":0.34501132,"amplitude":0.21088798400000003,"emphasis":{"amplitude":0.26360998,"frequency":0.9}},{"time":0.35600907,"amplitude":0.19459373},{"time":0.36201814,"amplitude":0.21081176},{"time":0.36301586,"amplitude":0.283099152,"emphasis":{"amplitude":0.35387394,"frequency":0.9}},{"time":0.36900225,"amplitude":0.29598317},{"time":0.37,"amplitude":0.355436352,"emphasis":{"amplitude":0.44429544,"frequency":0.9}},{"time":0.37900227,"amplitude":0.3812126},{"time":0.3970068,"amplitude":0.19820432},{"time":0.41501132,"amplitude":0.08889175},{"time":0.44501132,"amplitude":0.023278853},{"time":0.4453968,"amplitude":0.023278853},{"time":0.4453968,"amplitude":0.023278853}],"frequency":[{"time":0,"frequency":0},{"time":0.015839862057471267,"frequency":0},{"time":0.017414967,"frequency":0.7450328},{"time":0.04643991,"frequency":0.5825596},{"time":0.06965986,"frequency":0.6928671},{"time":0.08126984,"frequency":0.7102477},{"time":0.08707482,"frequency":0.63594824},{"time":0.10739229,"frequency":0.731694},{"time":0.12190475,"frequency":0.6388308},{"time":0.13061225,"frequency":0.7023294},{"time":0.13931973,"frequency":0.85867953},{"time":0.14512472,"frequency":0.6016827},{"time":0.17124717,"frequency":0.53194696},{"time":0.20897959,"frequency":0.5631563},{"time":0.22058958,"frequency":0.46664742},{"time":0.2374313765517241,"frequency":0},{"time":0.28232950747126434,"frequency":0},{"time":0.29605442,"frequency":0.71692556},{"time":0.3076644,"frequency":0.5910855},{"time":0.32798186,"frequency":0.6317264},{"time":0.34539682,"frequency":0.5563853},{"time":0.3570068,"frequency":0.6669853},{"time":0.37151927,"frequency":0.6226443},{"time":0.38312924,"frequency":0.6682828},{"time":0.4092517,"frequency":0.4723566},{"time":0.42376417,"frequency":0.6457719},{"time":0.46,"frequency":0.5602416184210524}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.haptic.meta new file mode 100644 index 0000000..ef91288 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 491852d310a6a4ebd8eadfe9e1eb5712 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.wav new file mode 100644 index 0000000..534f6c4 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.wav.meta new file mode 100644 index 0000000..0255baf --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 641a8481d5d754ddfbde20f3641215d1 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.haptic new file mode 100644 index 0000000..91776c7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Shotgun Load 3.wav","project":"Shotgun Load 3","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00066191633},{"time":0.0010204081,"amplitude":0.00066191633},{"time":0.015011338,"amplitude":0.0015027318},{"time":0.020022675,"amplitude":0.038483005},{"time":0.0470068,"amplitude":0.020312386},{"time":0.058004536,"amplitude":0.05508873},{"time":0.059002265,"amplitude":0.093849152,"emphasis":{"amplitude":0.11731144,"frequency":0.5}},{"time":0.08,"amplitude":0.059121948},{"time":0.08201814,"amplitude":0.11995583},{"time":0.090022676,"amplitude":0.10234193},{"time":0.0940136,"amplitude":0.149583136,"emphasis":{"amplitude":0.18697892,"frequency":0.5}},{"time":0.11002267,"amplitude":0.11415751},{"time":0.11900227,"amplitude":0.09159219},{"time":0.12501134,"amplitude":0.1747571},{"time":0.1270068,"amplitude":0.22922432000000004,"emphasis":{"amplitude":0.2865304,"frequency":0.5}},{"time":0.13800453,"amplitude":0.20361501},{"time":0.14002268,"amplitude":0.285814192,"emphasis":{"amplitude":0.35726774,"frequency":0.5}},{"time":0.1610204,"amplitude":0.16798213},{"time":0.1770068,"amplitude":0.08467959},{"time":0.1940136,"amplitude":0.040497158},{"time":0.21327194720689654,"amplitude":0},{"time":0.29700180000000004,"amplitude":0},{"time":0.2970068,"amplitude":0.06752439},{"time":0.31,"amplitude":0.04653512},{"time":0.31501132,"amplitude":0.06402567},{"time":0.3170068,"amplitude":0.1276942},{"time":0.32501134,"amplitude":0.11009188},{"time":0.32600906,"amplitude":0.17686437},{"time":0.33501133,"amplitude":0.17295675},{"time":0.33900225,"amplitude":0.25861356,"emphasis":{"amplitude":0.32326695,"frequency":0.9}},{"time":0.34900227,"amplitude":0.2385689},{"time":0.35201815,"amplitude":0.308649872,"emphasis":{"amplitude":0.38581234,"frequency":0.9}},{"time":0.35900226,"amplitude":0.35858095},{"time":0.37800452,"amplitude":0.18391952},{"time":0.39501134,"amplitude":0.08906135},{"time":0.4190528291034483,"amplitude":0},{"time":0.44501133,"amplitude":0}],"frequency":[{"time":0,"frequency":0.66989475},{"time":0.0058049876,"frequency":0.56657606},{"time":0.055147387,"frequency":0.64214313},{"time":0.066757366,"frequency":0.56986165},{"time":0.08417233,"frequency":0.6720751},{"time":0.089977324,"frequency":0.7862998},{"time":0.0986848,"frequency":0.6794355},{"time":0.10739229,"frequency":0.7270355},{"time":0.13351475,"frequency":0.7344844},{"time":0.14512472,"frequency":0.60139394},{"time":0.15673469,"frequency":0.676268},{"time":0.16834468,"frequency":0.5651523},{"time":0.18575963,"frequency":0.70091486},{"time":0.2031746,"frequency":0.6753036},{"time":0.22110108727586197,"frequency":0},{"time":0.2897260564137931,"frequency":0},{"time":0.29895693,"frequency":0.6091521},{"time":0.32507935,"frequency":0.7563366},{"time":0.33959183,"frequency":0.6558002},{"time":0.3628118,"frequency":0.6824714},{"time":0.37151927,"frequency":0.6036943},{"time":0.39473924,"frequency":0.67177254},{"time":0.40054423,"frequency":0.5813229},{"time":0.4259648964482759,"frequency":0},{"time":0.44501133,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.haptic.meta new file mode 100644 index 0000000..c33b4a5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 61d76871e56f24825b1ac8c96e72ea07 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.wav new file mode 100644 index 0000000..85148a1 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.wav.meta new file mode 100644 index 0000000..fe0c753 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunLoad3.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: acd880415f4d54b419027943a57b8a7a +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.haptic new file mode 100644 index 0000000..de5994d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Shotgun Shell 1.wav","project":"Shotgun Shell 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00021783794},{"time":0.0010204081,"amplitude":0.00021783794},{"time":0.009002267,"amplitude":0.0005171373},{"time":0.010022676,"amplitude":0.4420221157894738,"emphasis":{"amplitude":0.5795013089473686,"frequency":0.9}},{"time":0.018004535,"amplitude":0.38909617},{"time":0.025011338,"amplitude":0.29698372},{"time":0.05447352436781607,"amplitude":0},{"time":0.06784815045977009,"amplitude":0},{"time":0.22800453,"amplitude":0.0020272452},{"time":0.22900227,"amplitude":0.13217135},{"time":0.23002267,"amplitude":0.11851984,"emphasis":{"amplitude":0.3613076947368424,"frequency":0.9}},{"time":0.23600906,"amplitude":0.118586965},{"time":0.25600907,"amplitude":0.060027566},{"time":0.2640136,"amplitude":0.04341985},{"time":0.274933140229885,"amplitude":0},{"time":0.33900225,"amplitude":0.003275767},{"time":0.34,"amplitude":0.118643144,"emphasis":{"amplitude":0.1956723510526316,"frequency":0.5}},{"time":0.35900226,"amplitude":0.08827345},{"time":0.38136764183908045,"amplitude":0},{"time":0.5740136,"amplitude":0.000648977},{"time":0.5750113,"amplitude":0.05997612,"emphasis":{"amplitude":0.1907596236842105,"frequency":0.5}},{"time":0.5870068,"amplitude":0.05142762},{"time":0.6140917997701149,"amplitude":0},{"time":0.6621077940229886,"amplitude":0},{"time":0.66401356,"amplitude":0.046752176000000006,"emphasis":{"amplitude":0.14265074631578947,"frequency":0.9}},{"time":0.6790022,"amplitude":0.03429976},{"time":0.6960205242528739,"amplitude":0},{"time":0.7469170959770114,"amplitude":0},{"time":0.7470068,"amplitude":0.0214846816,"emphasis":{"amplitude":0.07159269410526316,"frequency":0.9}},{"time":0.76,"amplitude":0.01630162},{"time":0.79,"amplitude":0}],"frequency":[{"time":0,"frequency":0.660349},{"time":0.017414967,"frequency":0.6219863},{"time":0.07176758448519487,"frequency":0.8017984834625832},{"time":0.07177258448519487,"frequency":0},{"time":0.089982324,"frequency":0},{"time":0.22058458,"frequency":0},{"time":0.22058958,"frequency":0.6823726},{"time":0.264127,"frequency":0.49073234},{"time":0.2831796998850575,"frequency":0},{"time":0.32797686000000004,"frequency":0},{"time":0.33088437,"frequency":0.7490818},{"time":0.3570068,"frequency":0.5094044},{"time":0.38857751586206896,"frequency":0.4218057657894737},{"time":0.39561474471264363,"frequency":0},{"time":0.5630788999999999,"frequency":0},{"time":0.5630839,"frequency":0.7921052631578942},{"time":0.57179135,"frequency":0.5748308},{"time":0.59501135,"frequency":0.48634273},{"time":0.6211287999999999,"frequency":0},{"time":0.64144624,"frequency":0},{"time":0.64145124,"frequency":0.7421655},{"time":0.79,"frequency":0.332987317894737}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.haptic.meta new file mode 100644 index 0000000..ff77187 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1ccced4156f904b4ab04ada67006bbeb +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.wav new file mode 100644 index 0000000..35946be Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.wav.meta new file mode 100644 index 0000000..58de86d --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/ShotgunShell1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 3e6849a23dbcd456c9e430a84c375e5f +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.haptic b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.haptic new file mode 100644 index 0000000..14a77b1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.haptic @@ -0,0 +1 @@ +{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"andrew@lofelt.com","editor":"Lofelt Studio","source":"Sniper Fire 1.wav","project":"Sniper Fire 1","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.002152956},{"time":0.0010204081,"amplitude":0.002152956},{"time":0.005011338,"amplitude":0.5129108},{"time":0.01201814,"amplitude":0.68005913},{"time":0.04201814,"amplitude":0.67044646},{"time":0.075011335,"amplitude":0.5382489},{"time":0.08102041,"amplitude":0.6449798},{"time":0.1010204,"amplitude":0.48667046},{"time":0.12002268,"amplitude":0.66087586},{"time":0.13301587,"amplitude":0.51682395},{"time":0.15301587,"amplitude":0.6713965},{"time":0.18002267,"amplitude":0.42678702},{"time":0.20900226,"amplitude":0.4095578},{"time":0.21800452,"amplitude":0.5990336},{"time":0.23301587,"amplitude":0.59072566},{"time":0.2470068,"amplitude":0.3867393},{"time":0.2610204,"amplitude":0.4994219},{"time":0.27201813,"amplitude":0.35249773},{"time":0.28,"amplitude":0.5683446},{"time":0.3140136,"amplitude":0.19857861},{"time":0.3440136,"amplitude":0.26914138},{"time":0.35800454,"amplitude":0.2894453},{"time":0.39401358,"amplitude":0.21424046},{"time":0.39501134,"amplitude":0.41849414},{"time":0.42201814,"amplitude":0.22614114},{"time":0.43301585,"amplitude":0.33144233},{"time":0.46600905,"amplitude":0.22256899},{"time":0.5270068,"amplitude":0.12734522},{"time":0.5360091,"amplitude":0.1912224},{"time":0.5630159,"amplitude":0.09178005},{"time":0.65,"amplitude":0.11901003},{"time":0.6709150402298849,"amplitude":0},{"time":1.94,"amplitude":0}],"frequency":[{"time":0,"frequency":0.5506512},{"time":0.023219952,"frequency":0.41750878},{"time":0.05804988,"frequency":0.37153646},{"time":0.0986848,"frequency":0.54641306},{"time":0.12190475,"frequency":0.3909052},{"time":0.18285714,"frequency":0.5033495},{"time":0.2554195,"frequency":0.26070705},{"time":0.264127,"frequency":0.40835163},{"time":0.28734693,"frequency":0.19765328},{"time":0.3076644,"frequency":0.31130403},{"time":0.32798186,"frequency":0.18948016},{"time":0.36571428,"frequency":0.3044555},{"time":0.39183673,"frequency":0.15798226},{"time":0.4121542,"frequency":0.26013467},{"time":0.46730158,"frequency":0.14529088},{"time":0.5311565,"frequency":0.26534668},{"time":0.5688889,"frequency":0.14540593},{"time":0.64435375,"frequency":0.20924033},{"time":0.6588662,"frequency":0.3415362},{"time":0.69079363,"frequency":0.16430354},{"time":0.7190432275862074,"frequency":0},{"time":1.94,"frequency":0}]}}}} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.haptic.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.haptic.meta new file mode 100644 index 0000000..37eda5e --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.haptic.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 454ff23bfc6f74a6e928276def6e6c3d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3} diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.wav b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.wav new file mode 100644 index 0000000..6d601a5 Binary files /dev/null and b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.wav differ diff --git a/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.wav.meta b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.wav.meta new file mode 100644 index 0000000..aa7d081 --- /dev/null +++ b/Assets/Feel/NiceVibrations/HapticSamples/Weapons/SniperFire1.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 9e5118926b9b04bcaba882035f4b5a18 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Lofelt.NiceVibrations.asmdef b/Assets/Feel/NiceVibrations/Lofelt.NiceVibrations.asmdef new file mode 100644 index 0000000..2ba2225 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Lofelt.NiceVibrations.asmdef @@ -0,0 +1,21 @@ +{ + "name": "Lofelt.NiceVibrations", + "references": [ + "GUID:75469ad4d38634e559750d17036d5f7c" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.inputsystem", + "expression": "1.0", + "define": "NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED" + } + ], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Lofelt.NiceVibrations.asmdef.meta b/Assets/Feel/NiceVibrations/Lofelt.NiceVibrations.asmdef.meta new file mode 100644 index 0000000..093b755 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Lofelt.NiceVibrations.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57a0b9bc628ab4740af4b6f1f0b2e134 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions.meta b/Assets/Feel/NiceVibrations/OlderVersions.meta new file mode 100644 index 0000000..af51a2f --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60f2acd4bf34643aba59b8002ad0c540 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v1.7.meta b/Assets/Feel/NiceVibrations/OlderVersions/v1.7.meta new file mode 100644 index 0000000..8995351 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v1.7.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ba48312151471543895f677e84c72f8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7-readme.txt b/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7-readme.txt new file mode 100644 index 0000000..92b74c4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7-readme.txt @@ -0,0 +1,2 @@ +This UnityPackage contains Nice Vibrations v1.7, the last version before v2.0, which introduced Core Haptics support. +If for some reason you'd prefer running this old version, just remove entirely the current version from your project, and import this UnityPackage instead. \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7-readme.txt.meta b/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7-readme.txt.meta new file mode 100644 index 0000000..c208286 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7-readme.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c8dbeb23a6873434e935e7a250c87235 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7.unitypackage b/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7.unitypackage new file mode 100644 index 0000000..adaf0bb Binary files /dev/null and b/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7.unitypackage differ diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7.unitypackage.meta b/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7.unitypackage.meta new file mode 100644 index 0000000..b4ec978 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v1.7/NiceVibrations-v-1-7.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 078b8f13a17171b49892ad10426d5af0 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1.meta b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1.meta new file mode 100644 index 0000000..63130b7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be9c8f71fa29f9347840e1a20362ab76 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1-readme.txt b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1-readme.txt new file mode 100644 index 0000000..1e333ce --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1-readme.txt @@ -0,0 +1,2 @@ +This UnityPackage contains Nice Vibrations v2.0.1, the last version before Unity 2019.3.x. +If for some reason you'd prefer running this old version, just remove entirely the current version from your project, and import this UnityPackage instead. \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1-readme.txt.meta b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1-readme.txt.meta new file mode 100644 index 0000000..592c53c --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1-readme.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 82e4fa932e1d3c149a960deb3e3144f5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1.unitypackage b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1.unitypackage new file mode 100644 index 0000000..178dbe9 Binary files /dev/null and b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1.unitypackage differ diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1.unitypackage.meta b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1.unitypackage.meta new file mode 100644 index 0000000..2ac65e5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v2.0.1/NiceVibrations-v-2-0-1.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f9406a33814af9c47b352e77f079d798 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v3.9.meta b/Assets/Feel/NiceVibrations/OlderVersions/v3.9.meta new file mode 100644 index 0000000..c1ad099 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v3.9.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b2a7a75b612c44dfda046f3fc1165373 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0-readme.txt b/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0-readme.txt new file mode 100644 index 0000000..a1eee98 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0-readme.txt @@ -0,0 +1,5 @@ +This UnityPackage contains Nice Vibrations v3.9.0, the last version before the Lofelt partnership. +If for some reason you'd prefer to run this old version, just remove the current version from your project entirely, and import this UnityPackage instead. + +The documentation of this old version is at http://nice-vibrations-docs.moremountains.com/ +Find out more about this old asset at http://nice-vibrations.moremountains.com/ diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0-readme.txt.meta b/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0-readme.txt.meta new file mode 100644 index 0000000..968669a --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0-readme.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 54d5b36730fc14779aeaf18ba807c543 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0.unitypackage b/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0.unitypackage new file mode 100644 index 0000000..1f602d1 Binary files /dev/null and b/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0.unitypackage differ diff --git a/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0.unitypackage.meta b/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0.unitypackage.meta new file mode 100644 index 0000000..69d7b56 --- /dev/null +++ b/Assets/Feel/NiceVibrations/OlderVersions/v3.9/NiceVibrations-v-3-9-0.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9aacf6f3043624194bb6f6fe9a580786 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins.meta b/Assets/Feel/NiceVibrations/Plugins.meta new file mode 100644 index 0000000..ce207a1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22735b5f059e34d67849099928629fd0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/Android.meta b/Assets/Feel/NiceVibrations/Plugins/Android.meta new file mode 100644 index 0000000..75d12b1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9390e14b79696426d8527e368308b77c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/Android/libs.meta b/Assets/Feel/NiceVibrations/Plugins/Android/libs.meta new file mode 100644 index 0000000..c23b029 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/Android/libs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8e190729c262425ab13ea81b5b478c6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/Android/libs/LofeltHaptics.aar b/Assets/Feel/NiceVibrations/Plugins/Android/libs/LofeltHaptics.aar new file mode 100644 index 0000000..5c2bd4e Binary files /dev/null and b/Assets/Feel/NiceVibrations/Plugins/Android/libs/LofeltHaptics.aar differ diff --git a/Assets/Feel/NiceVibrations/Plugins/Android/libs/LofeltHaptics.aar.meta b/Assets/Feel/NiceVibrations/Plugins/Android/libs/LofeltHaptics.aar.meta new file mode 100644 index 0000000..6dc46a5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/Android/libs/LofeltHaptics.aar.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 4052800b132124e29b9627e77b348b41 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/Windows.meta b/Assets/Feel/NiceVibrations/Plugins/Windows.meta new file mode 100644 index 0000000..934e753 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/Windows.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04babe37531df1741bce773dd20ddca0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/Windows/x64.meta b/Assets/Feel/NiceVibrations/Plugins/Windows/x64.meta new file mode 100644 index 0000000..f6a565c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/Windows/x64.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1cfa7fc0db963a4897d26b3d50d11ec +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/Windows/x64/nice_vibrations_editor_plugin.dll b/Assets/Feel/NiceVibrations/Plugins/Windows/x64/nice_vibrations_editor_plugin.dll new file mode 100644 index 0000000..97a5b45 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Plugins/Windows/x64/nice_vibrations_editor_plugin.dll differ diff --git a/Assets/Feel/NiceVibrations/Plugins/Windows/x64/nice_vibrations_editor_plugin.dll.meta b/Assets/Feel/NiceVibrations/Plugins/Windows/x64/nice_vibrations_editor_plugin.dll.meta new file mode 100644 index 0000000..57fdade --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/Windows/x64/nice_vibrations_editor_plugin.dll.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: b177fc310544d6a4c94b26e23d9b31d1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude WebGL: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude WindowsStoreApps: 1 + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + WebGL: WebGL + second: + enabled: 0 + settings: {} + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: X64 + DontProcess: false + PlaceholderPath: + SDK: AnySDK + ScriptingBackend: AnyScriptingBackend + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/iOS.meta b/Assets/Feel/NiceVibrations/Plugins/iOS.meta new file mode 100644 index 0000000..f20b5c7 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3cc8ce9203c4a4d03b07e0ae9a3cf219 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework.meta b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework.meta new file mode 100644 index 0000000..47312cc --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 3f3b3e40c5ec34183af765f15c1ce362 +folderAsset: yes +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 0 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: true + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Headers.meta b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Headers.meta new file mode 100644 index 0000000..881a5df --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Headers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 744e99b0b7af43d43886762ae9a83fe9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Headers/LofeltHaptics.h b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Headers/LofeltHaptics.h new file mode 100644 index 0000000..848ed56 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Headers/LofeltHaptics.h @@ -0,0 +1,163 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +//! Project version number for LofeltHaptics. +FOUNDATION_EXPORT double LofeltHapticsVersionNumber; + +//! Project version string for LofeltHaptics. +FOUNDATION_EXPORT const unsigned char LofeltHapticsVersionString[]; + +//! Custom error domain +extern NSString *_Nonnull const LofeltErrorDomain; + +/*! + @class LofeltHaptics + @brief The LofeltHaptics class + @discussion Defines the API of Lofelt SDK for iOS. + + The LofeltHaptics class is not thread safe and can only be used from + the main thread. + + When the app is put into the background, Core Haptics will not allow + playing any haptics. LofeltHaptics will detect this situation and cease + all activity. + When the app is put into the foreground again, Core Haptics will allow + playing haptics again, and LofeltHaptics re-initalizes itself. However, + haptics that were interrupted when the app was backgrounded do not + automatically resume and need to be started again by calling @c play(). + @author Joao Freire, James Kneafsey, Thomas McGuire, Tomash GHz + @copyright © 2020 Lofelt. All rights reserved. + */ +@interface LofeltHaptics : NSObject +{ + void *_controller; + id _foregroundNotificationObserver; + id _backgroundNotificationObserver; +} + +/*! @abstract Checks if the iPhone meets the minimum requirements + @discussion This allows for a runtime check on iPhones that won't + meet the requirements for Lofelt Haptics. + + @return Whether the iPhone supports or not Lofelt Haptics + */ ++ (BOOL)deviceMeetsMinimumRequirement; + +- (instancetype)init NS_UNAVAILABLE; + +/*! @abstract Creates an instance of LofeltHaptics. + @discussion There should only be one instance of `LofeltHaptics` created in a given application. + @param error If the initialization fails, this will be set to a valid NSError describing the error. +*/ +- (nullable instancetype)initAndReturnError:(NSError **)error API_AVAILABLE(ios(13)) NS_SWIFT_NAME(init()); + +/*! @abstract Loads a haptic clip from string data. + @discussion The data must be in a valid Lofelt JSON format. + If a haptic clip is currently playing, it will be stopped. + @param data The Lofelt JSON format string. + @param error If the load operation fails, this will be set to a valid NSError describing the error. + @return Whether the operation succeeded +*/ +- (BOOL)load:(NSString *_Nonnull)data error:(NSError *_Nullable *_Nullable)error API_AVAILABLE(ios(13)); + +/*! @abstract A version of @c load() taking @c NSData instead of @c NSString. + @discussion This method can be faster than @c load(), as it avoids string conversions. + @param data The .haptic clip, as UTF-8 encoded JSON string without a null terminator. + @param error If the load operation fails, this will be set to a valid NSError describing the error. + @return Whether the operation succeeded +*/ +- (BOOL)loadFromData:(NSData *_Nonnull)data error:(NSError *_Nullable *_Nullable)error API_AVAILABLE(ios(13)); + +/*! @abstract Plays a loaded haptic clip. + @discussion The data must be preloaded using @c load() . + Only one haptic clip can play at a time. + Playback will start from the beginning of the haptic clip, or from the seek + position if seek() has been called before. + Calling play() if the clip is already playing has no effect. + @param error If the play operation fails, this will be set to a valid NSError describing the error. + @return Whether the operation succeeded +*/ +- (BOOL)play:(NSError *_Nullable *_Nullable)error API_AVAILABLE(ios(13)); + +/*! @abstract Stops the haptic clip that is currently playing. + @discussion The call is ignored if no clip is loaded or no clip is playing. + @param error If the stop operation fails, this will be set to a valid NSError describing the error. + @return Whether the operation succeeded + */ +- (BOOL)stop:(NSError *_Nullable *_Nullable)error API_AVAILABLE(ios(13)); + +/*! @abstract Jumps to a time position in the haptic clip + @discussion The playback state (playing or stopped) will not be changed unless seeking + beyond the end of the haptic clip. Seeking beyond the end of the clip will stop + playback. + Seeking to a negative position will start playback after a delay. + @param time The new position within the clip, as seconds from the beginning of the clip + @param error If the seek operation fails, this will be set to a valid NSError describing the error. + @return Whether the operation succeeded + */ +- (BOOL)seek:(float)time error:(NSError *_Nullable *_Nullable)error API_AVAILABLE(ios(13)); + +/*! @abstract Multiplies the amplitude of every breakpoint of the clip with the given + multiplication factor + @discussion In other words, this function applies a gain (for factors greater than 1.0) + or an attenuation (for factors less than 1.0) to the clip. + If the resulting amplitude of a breakpoint is greater than 1.0, it is + clipped to 1.0. The amplitude is clipped hard, no limiter is used. + The clip needs to be loaded with @c load() first. Loading a clip resets + the multiplication factor back to the default of 1.0. + If no clip is currently playing, the multiplication will take effect + once @c play() is called. If a clip is currently playing, the multiplication + will take effect immediately. + @param amplitudeMultiplication The factor by which each amplitude will be multiplied. This value is a + multiplication factor, it is not a dB value. The factor needs to be 0 + or greater. + @param error If the operation fails, this will be set to a valid NSError describing + the error. An error can for example happen if no clip is loaded, or if + the factor is outside of the valid range. + @return Whether the operation succeeded + */ +- (BOOL)setAmplitudeMultiplication:(float)amplitudeMultiplication error:(NSError *_Nullable *_Nullable)error API_AVAILABLE(ios(13)); + +/*! @abstract Adds the given shift to the frequency of every breakpoint in the clip, + including the emphasis. + @discussion In other words, this function shifts all frequencies of the clip. + If the resulting frequency of a breakpoint is smaller than 0.0 or + greater than 1.0, it is clipped to that range. The frequency is + clipped hard, no limiter is used. + The clip needs to be loaded with @c load() first. Loading a clip resets + the shift back to the default of 0.0. + If no clip is currently playing, the shift will take effect once @c play() + is called. If a clip is currently playing, the shift will take effect + immediately. + @param shift The amount by which each frequency should be shifted. This number is added + to each frequency value. The shift needs to be between -1.0 and 1.0. + @param error If the operation fails, this will be set to a valid NSError describing + the error. An error can for example happen if no clip is loaded, or if + the shift is outside of the valid range. + @return Whether the operation succeeded + */ +- (BOOL)setFrequencyShift:(float)shift error:(NSError *_Nullable *_Nullable)error API_AVAILABLE(ios(13)); + +/*! @abstract Sets the playback to repeat from the start at the end of the clip. + @discussion Changes done with this function are only applied when @c play() is called. + When @c load() is called, looping is always disabled. + Playback will always start at the beginning of the clip, even if + @c seek() was used to jump to a different clip position before. + @param enabled When true, looping is set enabled; false disables looping. + @param error If the loop operation fails, this will be set to a valid NSError describing the error. + @return Whether the operation succeeded + */ +- (BOOL)loop:(BOOL)enabled error:(NSError *_Nullable *_Nullable)error API_AVAILABLE(ios(13)); + +/*! @abstract Returns the duration of the loaded clip + @discussion It will return 0.0 for an invalid clip + @return Duration of the loaded clip + */ +- (float)getClipDuration; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Info.plist b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Info.plist new file mode 100644 index 0000000..370ca3a Binary files /dev/null and b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Info.plist differ diff --git a/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/LofeltHaptics b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/LofeltHaptics new file mode 100644 index 0000000..490f9f2 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/LofeltHaptics differ diff --git a/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Modules.meta b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Modules.meta new file mode 100644 index 0000000..ee75cd9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Modules.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8fd4d5ba1395aa24b9c7cad0af296040 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Modules/module.modulemap b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Modules/module.modulemap new file mode 100644 index 0000000..44a6c28 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/iOS/LofeltHaptics.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module LofeltHaptics { + umbrella header "LofeltHaptics.h" + + export * + module * { export * } +} diff --git a/Assets/Feel/NiceVibrations/Plugins/macOS.meta b/Assets/Feel/NiceVibrations/Plugins/macOS.meta new file mode 100644 index 0000000..34c7995 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/macOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d7aed595fe8f44c70b4bf38214153c03 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Plugins/macOS/libnice_vibrations_editor_plugin.dylib b/Assets/Feel/NiceVibrations/Plugins/macOS/libnice_vibrations_editor_plugin.dylib new file mode 100644 index 0000000..f237cdd Binary files /dev/null and b/Assets/Feel/NiceVibrations/Plugins/macOS/libnice_vibrations_editor_plugin.dylib differ diff --git a/Assets/Feel/NiceVibrations/Plugins/macOS/libnice_vibrations_editor_plugin.dylib.meta b/Assets/Feel/NiceVibrations/Plugins/macOS/libnice_vibrations_editor_plugin.dylib.meta new file mode 100644 index 0000000..c6ca628 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Plugins/macOS/libnice_vibrations_editor_plugin.dylib.meta @@ -0,0 +1,80 @@ +fileFormatVersion: 2 +guid: 279c3792841e74f96b13b007d349facc +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 1 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Android: 1 + Exclude Editor: 0 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + Exclude iOS: 1 + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: ARMv7 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: OSX + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + iPhone: iOS + second: + enabled: 0 + settings: + AddToEmbeddedBinaries: false + CPU: AnyCPU + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts.meta b/Assets/Feel/NiceVibrations/Scripts.meta new file mode 100644 index 0000000..7f12005 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b247b015593c8428f8b083abb9a9633f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components.meta b/Assets/Feel/NiceVibrations/Scripts/Components.meta new file mode 100644 index 0000000..6e9457f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 688d27f50942c40c39cb42dc1e5eab7a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/AssemblyInfo.cs b/Assets/Feel/NiceVibrations/Scripts/Components/AssemblyInfo.cs new file mode 100644 index 0000000..0cac064 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/AssemblyInfo.cs @@ -0,0 +1,3 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +[assembly: System.Runtime.CompilerServices.InternalsVisibleTo("NiceVibrationTests")] \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/AssemblyInfo.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/AssemblyInfo.cs.meta new file mode 100644 index 0000000..2a79def --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0924103a050c4bbc88d415b79a67df2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/DeviceCapabilities.cs b/Assets/Feel/NiceVibrations/Scripts/Components/DeviceCapabilities.cs new file mode 100644 index 0000000..0e7c6b5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/DeviceCapabilities.cs @@ -0,0 +1,253 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; + +#if (UNITY_IOS && !UNITY_EDITOR) + using UnityEngine.iOS; +#endif + +namespace Lofelt.NiceVibrations +{ + /// + /// A class containing properties that describe the current device capabilities for use with + /// Nice Vibrations + /// + /// + /// This class describes the capabilities of an iOS or Android device, gamepads are not handled + /// by it. + public static class DeviceCapabilities + { + /// + /// Property that holds the current RuntimePlatform + /// + public static RuntimePlatform platform { get; } + + /// + /// Property that holds the current platform version. + /// + /// iOS version on iOS, Android API level on Android or 0 otherwise. + public static int platformVersion { get; } + + /// + /// Indicates if the device meets the requirements to play advanced haptics with + /// Nice Vibrations + /// + /// + /// Advanced requirements means that the device can play back .haptic clips. + /// While devices that don't meet the advanced requirements can not play back .haptic + /// clips, they can still play back simpler fallback haptics as long as + /// \ref isVersionSupported is true. + /// + /// While DeviceCapabilities.isVersionSupported only checks the OS version, this method + /// additionally checks the device capabilities. + /// + /// The required device capabilities are: + /// - iOS: iPhone >= 8 + /// - Android: Amplitude control for the Vibrator + /// + /// You don't usually need to check this property. All other methods in HapticController + /// will check \ref meetsAdvancedRequirements before calling into LofeltHaptics. + /// In case the device does not support advanced haptics there is a possibility of fallback + /// haptics based on presets. + public static bool meetsAdvancedRequirements + { + get + { + return _meetsAdvancedRequirements; + } + } + private static bool _meetsAdvancedRequirements; + + /// + /// Indicates if the OS version is high enough to play haptics with Nice Vibrations. + /// + /// + /// The minimum required versions are: + /// - iOS >= 11 + /// - Android API level >= 17 + /// + /// This only checks the minimum supported OS version in terms of API and does not guarantee + /// that advanced haptics with amplitude control can be recreated, For that check with + /// \ref meetsAdvancedRequirements. + public static bool isVersionSupported { get; } + + /// + /// Indicates if the device is capable of amplitude control in order to recreate + /// advanced haptics. + /// + public static bool hasAmplitudeControl + { + get + { + return _hasAmplitudeControl; + } + } + private static bool _hasAmplitudeControl; + + /// + /// Indicates if the device is capable of changing the frequency of haptic signals + /// + public static bool hasFrequencyControl + { + get + { + return _hasFrequencyControl; + } + } + private static bool _hasFrequencyControl; + + /// + /// Indicates if the device is capable of real-time amplitude modulation of haptic signals + /// + public static bool hasAmplitudeModulation + { + get + { + return _hasAmplitudeModulation; + } + } + private static bool _hasAmplitudeModulation; + + /// + /// Indicates if the device is capable of real-time frequency modulation of haptic signals + /// + public static bool hasFrequencyModulation + { + get + { + return _hasFrequencyModulation; + } + } + private static bool _hasFrequencyModulation; + + /// + /// Indicates if the device is capable of natively reproducing emphasized haptics + /// + public static bool hasEmphasis + { + get + { + return _hasEmphasis; + } + } + private static bool _hasEmphasis; + + /// + /// Indicates if the device is capable of emulating emphasized haptics + /// + public static bool canEmulateEmphasis + { + get + { + return _canEmulateEmphasis; + } + } + private static bool _canEmulateEmphasis; + + /// + /// Indicates if the device is capable of looping haptic clips + /// + public static bool canLoop + { + get + { + return _canLoop; + } + } + private static bool _canLoop; + + /// + /// Constructor that fills in the only the DeviceCapabilities platform version properties. + /// + /// This is separate of Init() because we need to first check the version numbers before + /// initializing LofeltHaptics + static DeviceCapabilities() + { + platform = Application.platform; + platformVersion = 0; + isVersionSupported = false; + +#if (UNITY_ANDROID && !UNITY_EDITOR) + platformVersion = int.Parse(SystemInfo.operatingSystem.Substring(SystemInfo.operatingSystem.IndexOf("-") + 1, 3)); + const int minimumSupportedAndroidSDKVersion = 17; + isVersionSupported = platformVersion >= minimumSupportedAndroidSDKVersion; +#elif (UNITY_IOS && !UNITY_EDITOR) + string versionString = Device.systemVersion; + string[] versionArray = versionString.Split('.'); + platformVersion = int.Parse(versionArray[0]); + const int minimumSupportedIOSVersion = 11; + isVersionSupported = platformVersion >= minimumSupportedIOSVersion; + + DeviceGeneration generation = Device.generation; + if ((generation == DeviceGeneration.iPhone3G) + || (generation == DeviceGeneration.iPhone3GS) + || (generation == DeviceGeneration.iPodTouch1Gen) + || (generation == DeviceGeneration.iPodTouch2Gen) + || (generation == DeviceGeneration.iPodTouch3Gen) + || (generation == DeviceGeneration.iPodTouch4Gen) + || (generation == DeviceGeneration.iPhone4) + || (generation == DeviceGeneration.iPhone4S) + || (generation == DeviceGeneration.iPhone5) + || (generation == DeviceGeneration.iPhone5C) + || (generation == DeviceGeneration.iPhone5S) + || (generation == DeviceGeneration.iPhone6) + || (generation == DeviceGeneration.iPhone6Plus) + || (generation == DeviceGeneration.iPhone6S) + || (generation == DeviceGeneration.iPhone6SPlus) + || (generation == DeviceGeneration.iPhoneSE1Gen) + || (generation == DeviceGeneration.iPad1Gen) + || (generation == DeviceGeneration.iPad2Gen) + || (generation == DeviceGeneration.iPad3Gen) + || (generation == DeviceGeneration.iPad4Gen) + || (generation == DeviceGeneration.iPad5Gen) + || (generation == DeviceGeneration.iPadAir1) + || (generation == DeviceGeneration.iPadAir2) + || (generation == DeviceGeneration.iPadMini1Gen) + || (generation == DeviceGeneration.iPadMini2Gen) + || (generation == DeviceGeneration.iPadMini3Gen) + || (generation == DeviceGeneration.iPadMini4Gen) + || (generation == DeviceGeneration.iPadPro10Inch1Gen) + || (generation == DeviceGeneration.iPadPro10Inch2Gen) + || (generation == DeviceGeneration.iPadPro11Inch) + || (generation == DeviceGeneration.iPadPro1Gen) + || (generation == DeviceGeneration.iPadPro2Gen) + || (generation == DeviceGeneration.iPadPro3Gen) + || (generation == DeviceGeneration.iPadUnknown) + || (generation == DeviceGeneration.iPodTouch1Gen) + || (generation == DeviceGeneration.iPodTouch2Gen) + || (generation == DeviceGeneration.iPodTouch3Gen) + || (generation == DeviceGeneration.iPodTouch4Gen) + || (generation == DeviceGeneration.iPodTouch5Gen) + || (generation == DeviceGeneration.iPodTouch6Gen) + || (generation == DeviceGeneration.iPhone6SPlus)) + { + isVersionSupported = false; + } + +#elif (UNITY_EDITOR) + isVersionSupported = true; +#endif + } + + /// + /// Function that initializes the rest of the DeviceCapabilities properties. + /// Must be called after LofeltHaptics was initialized. + /// + public static void Init() + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + _hasAmplitudeControl = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); + _canEmulateEmphasis = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); + _canLoop = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); +#elif (UNITY_IOS && !UNITY_EDITOR) + _hasAmplitudeControl = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); + _hasFrequencyControl = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); + _hasAmplitudeModulation = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); + _hasFrequencyModulation = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); + _hasEmphasis = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); + _canLoop = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); +#endif + _meetsAdvancedRequirements = LofeltHaptics.DeviceMeetsMinimumPlatformRequirements(); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/DeviceCapabilities.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/DeviceCapabilities.cs.meta new file mode 100644 index 0000000..715c644 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/DeviceCapabilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca68228d4301d47fab6a64b6d285e2dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Gamepad.cs b/Assets/Feel/NiceVibrations/Scripts/Components/Gamepad.cs new file mode 100644 index 0000000..e700ce3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Gamepad.cs @@ -0,0 +1,435 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System; +using System.Diagnostics; +using System.Timers; +using UnityEngine; + +// There are 3 conditions for working gamepad support in Nice Vibrations: +// +// 1. NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED - The input system package needs to be installed. +// See https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Installation.html#installing-the-package +// This is set by Nice Vibrations' assembly definition file, using a version define. +// See https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html#define-symbols +// about version defines, and see Lofelt.NiceVibrations.asmdef for the usage in Nice Vibrations. +// +// 2. ENABLE_INPUT_SYSTEM - The input system needs to be enabled in the project settings. +// See https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Installation.html#enabling-the-new-input-backends +// This define is set by Unity, see https://docs.unity3d.com/Manual/PlatformDependentCompilation.html +// +// 3. NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT - This is a user-defined define which needs to be not set. +// NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT is not set by default. It can be set by a user in the +// player settings to disable gamepad support completely. One reason to do this is to reduce the +// size of a HapticClip asset, as setting this define changes to HapticImporter to not add the +// GamepadRumble to the HapticClip. Changing this define requires re-importing all .haptic clip +// assets to update HapticClip's GamepadRumble. +// +// If any of the 3 conditions is not met, GamepadRumbler doesn't contain any calls into +// UnityEngine.InputSystem, and CanPlay() always returns false. +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT +using UnityEngine.InputSystem; +#endif + +namespace Lofelt.NiceVibrations +{ + /// + /// Contains a vibration pattern to make a gamepad rumble. + /// + /// + /// GamepadRumble contains the information on when to set what motor speeds on a gamepad + /// to make it rumble with a specific pattern. + /// + /// GamepadRumble has three arrays of the same length representing the rumble pattern. The + /// entries for each array index describe for how long to turn on the gamepad's vibration + /// motors, at what speed. + [Serializable] + public struct GamepadRumble + { + /// + /// The duration, in milliseconds, that the motors will be turned on at the speed set + /// in \ref lowFrequencyMotorSpeeds and \ref highFrequencyMotorSpeeds at the same array + /// index + /// + [SerializeField] + public int[] durationsMs; + + /// + /// The total duration of the GamepadRumble, in milliseconds + /// + [SerializeField] + public int totalDurationMs; + + /// + /// The motor speeds of the low frequency motor + /// + [SerializeField] + public float[] lowFrequencyMotorSpeeds; + + /// + /// The motor speeds of the high frequency motor + /// + [SerializeField] + public float[] highFrequencyMotorSpeeds; + + /// + /// Checks if the GamepadRumble is valid and also not empty + /// + /// Whether the GamepadRumble is valid + public bool IsValid() + { + return durationsMs != null && + lowFrequencyMotorSpeeds != null && + highFrequencyMotorSpeeds != null && + durationsMs.Length == lowFrequencyMotorSpeeds.Length && + durationsMs.Length == highFrequencyMotorSpeeds.Length && + durationsMs.Length > 0; + } + } + + /// + /// Vibrates a gamepad based on a GamepadRumble rumble pattern. + /// + /// + /// GamepadRumbler can load and play back a GamepadRumble pattern on the current + /// gamepad. + /// + /// This is a low-level class that normally doesn't need to be used directly. Instead, + /// you can use HapticSource and HapticController to play back haptic clips, as those + /// classes support gamepads by using GamepadRumbler internally. + public static class GamepadRumbler + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + static GamepadRumble loadedRumble; + + static bool rumbleLoaded = false; + + // This Timer is used to wait until it is time to advance to the next entry in loadedRumble. + // When the Timer is elapsed, ProcessNextRumble() is called to set new motor speeds to the + // gamepad. + static Timer rumbleTimer = new Timer(); + + // The index of the entry of loadedRumble that is currently being played back + static int rumbleIndex = -1; + + // The total duration of rumble entries that have been played back so far + static long rumblePositionMs = 0; + + // Keeps track of how much time elapsed since playback was started + static Stopwatch playbackWatch = new Stopwatch(); + + /// + /// A multiplication factor applied to the motor speeds of the low frequency motor. + /// + /// + /// The multiplication factor is applied to the low frequency motor speed of every + /// GamepadRumble entry before playing it. + /// + /// In other words, this applies a gain (for factors greater than 1.0) or an attenuation + /// (for factors less than 1.0) to the clip. If the resulting speed of an entry is + /// greater than 1.0, it is clipped to 1.0. The speed is clipped hard, no limiter is + /// used. + /// + /// The motor speed multiplication is reset when calling Load(), so Load() needs to be + /// called first before setting the multiplication. + /// + /// A change of the multiplication is applied to a currently playing rumble, but only + /// for the next rumble entry, not the one currently playing. + public static float lowFrequencyMotorSpeedMultiplication = 1.0f; + + /// + /// Same as \ref lowFrequencyMotorSpeedMultiplication, but for the high frequency speed + /// motor. + /// + public static float highFrequencyMotorSpeedMultiplication = 1.0f; + + static int currentGamepadID = -1; + +#endif + + /// + /// Initializes the GamepadRumbler. + /// + /// + /// This needs to be called from the main thread, which is the reason why this is a method + /// instead of a static constructor: Sometimes Unity calls static constructors from a + /// different thread, and an explicit Init() method gives us more control over this. + public static void Init() + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + // Initialize rumbleTimer, so that ProcessNextRumble() will be called on the main thread + // when the timer is triggered. + var syncContext = System.Threading.SynchronizationContext.Current; + rumbleTimer.Elapsed += (object obj, System.Timers.ElapsedEventArgs args) => + { + syncContext.Post(_ => + { + ProcessNextRumble(); + }, null); + }; +#endif + } + + /// + /// Checks whether a call to Play() would trigger playback on a gamepad. + /// + /// + /// Playing back a rumble pattern with Play() only works if a gamepad is connected and if + /// a GamepadRumble has been loaded with Load() before. + /// + /// Whether a vibration can be triggered on a gamepad + public static bool CanPlay() + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + return IsConnected() && rumbleLoaded && loadedRumble.IsValid(); +#else + return false; +#endif + } + +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + /// + /// Gets the Gamepad object corresponding to the specified gamepad ID. + /// + /// + /// If the specified ID is out of range of the connected gamepad(s), + /// InputSystem.Gamepad.current will be returned. + /// + /// The ID of the gamepad to be returned. + /// A InputSystem.Gamepad + static UnityEngine.InputSystem.Gamepad GetGamepad(int gamepadID) + { + if (gamepadID >= 0) + { + if (gamepadID >= UnityEngine.InputSystem.Gamepad.all.Count) + { + return UnityEngine.InputSystem.Gamepad.current; + } + else + { + return UnityEngine.InputSystem.Gamepad.all[gamepadID]; + } + } + return UnityEngine.InputSystem.Gamepad.current; + } +#endif + + /// + /// Set the current gamepad for haptics playback by ID. + /// + /// + /// This method needs be called before haptics playback, e.g. \ref HapticController.Play(), + /// \ref HapticPatterns.PlayEmphasis(), \ref HapticPatterns.PlayConstant(), etc, for + /// for the gamepad to be properly selected. + /// + /// If this method isn't called, haptics will be played on InputSystem.Gamepad.current + /// + /// For example, if you have 3 controllers connected, you have to choose between values 0, 1, + /// and 2. + /// + /// If the gamepad ID value doesn't match any connected gamepad, calling + /// this method has no effect. + /// The ID of the gamepad + public static void SetCurrentGamepad(int gamepadID) + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + if (gamepadID < UnityEngine.InputSystem.Gamepad.all.Count) + { + currentGamepadID = gamepadID; + } +#endif + } + + /// + /// Checks whether a gamepad is connected and recognized by Unity's input system. + /// + /// + /// If the input system package is not installed or not enabled, the gamepad is not + /// recognized and treated as not connected here. + /// + /// If the NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT define is set in the player settings, + /// this function pretends no gamepad is connected. + /// + /// Whether a gamepad is connected + public static bool IsConnected() + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + return GetGamepad(currentGamepadID) != null; +#else + return false; +#endif + } + + /// + /// Loads a rumble pattern for later playback. + /// + /// + /// The rumble pattern to load + public static void Load(GamepadRumble rumble) + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + if (rumble.IsValid()) + { + loadedRumble = rumble; + rumbleLoaded = true; + lowFrequencyMotorSpeedMultiplication = 1.0f; + highFrequencyMotorSpeedMultiplication = 1.0f; + } + else + { + Unload(); + } +#endif + } + + /// + /// Plays back the rumble pattern loaded previously with Load(). + /// + /// + /// If no rumble pattern has been loaded, or if no gamepad is connected, this method does + /// nothing. + public static void Play() + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + if (CanPlay()) + { + rumbleIndex = 0; + rumblePositionMs = 0; + playbackWatch.Restart(); + ProcessNextRumble(); + } +#endif + } + + /// + /// Stops playback previously started with Play() by turning off the gamepad's motors. + /// + public static void Stop() + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + if (GetGamepad(currentGamepadID) != null) + { + GetGamepad(currentGamepadID).ResetHaptics(); + } + rumbleTimer.Enabled = false; + rumbleIndex = -1; + rumblePositionMs = 0; + playbackWatch.Stop(); +#endif + } + + /// + /// Stops playback and unloads the currently loaded GamepadRumble from memory. + /// + public static void Unload() + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + loadedRumble.highFrequencyMotorSpeeds = null; + loadedRumble.lowFrequencyMotorSpeeds = null; + loadedRumble.durationsMs = null; + rumbleLoaded = false; + Stop(); +#endif + } + + // Advances the position in the GamepadRumble by one. + // + // If the end of the rumble has been reached, playback is stopped and false is returned. + private static bool IncreaseRumbleIndex() + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + rumblePositionMs += loadedRumble.durationsMs[rumbleIndex]; + rumbleIndex++; + if (rumbleIndex == loadedRumble.durationsMs.Length) + { + Stop(); + return false; + } + + return true; +#else + return false; +#endif + } + + // Processes the next entry in loadedRumble by setting the gamepad's motor speeds to the + // speeds stored in that entry. + // + // Afterwards, the rumbleTimer is set to call this method again, after the time stored + // in entry of loadedRumble. + private static void ProcessNextRumble() + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + // rumbleIndex can be -1 after Stop() has been called after the call to + // ProcessNextRumble() has already been queued up via SynchronizationContext. + if (rumbleIndex == -1) + { + return; + } + + if (rumbleIndex == loadedRumble.durationsMs.Length) + { + Stop(); + return; + } + + UnityEngine.Debug.Assert(loadedRumble.IsValid()); + UnityEngine.Debug.Assert(rumbleLoaded); + UnityEngine.Debug.Assert(rumbleIndex >= 0 && rumbleIndex <= loadedRumble.durationsMs.Length); + + // Figure out for how long the current rumble entry should be played (durationToWait). + // Due to the timer not waiting for exactly the same amount of time that we requested, + // there can be a bit of error that we need to compensate for. For example, if the timer + // waited for 3ms longer than we requested, we play the next rumble entry for a 3ms + // less to compensate for that. + // In fact, Unity triggers the timer only once per frame, so at 30 FPS, the timer + // resolution is 32ms. That means that the timing error can be bigger than the duration + // of the whole rumble entry, and to compensate for that, the entire rumble entry needs + // to be skipped. That's what the loop does: It skips rumble entries to compensate for + // timer error. + long elapsed = playbackWatch.ElapsedMilliseconds; + long durationToWait = 0; + while (true) + { + long rumbleEntryDuration = loadedRumble.durationsMs[rumbleIndex]; + long error = elapsed - rumblePositionMs; + durationToWait = rumbleEntryDuration - error; + + // If durationToWait is <= 0, the current rumble entry needs to be skipped to + // compensate for timer error. Otherwise break and play the current rumble entry. + if (durationToWait > 0) + { + break; + } + + // If the end of the rumble has been reached, return, as playback has stopped. + if (!IncreaseRumbleIndex()) + { + return; + } + } + + float lowFrequencySpeed = loadedRumble.lowFrequencyMotorSpeeds[rumbleIndex] * Mathf.Max(lowFrequencyMotorSpeedMultiplication, 0.0f); + float highFrequencySpeed = loadedRumble.highFrequencyMotorSpeeds[rumbleIndex] * Mathf.Max(highFrequencyMotorSpeedMultiplication, 0.0f); + + UnityEngine.InputSystem.Gamepad currentGamepad = GetGamepad(currentGamepadID); + // Check if gamepad was disconnected while playing + if (currentGamepad != null) + { + currentGamepad.SetMotorSpeeds(lowFrequencySpeed, highFrequencySpeed); + } + else + { + return; + } + + // Set up the timer to call ProcessNextRumble() again with the next rumble entry, after + // the duration of the current rumble entry. + rumblePositionMs += loadedRumble.durationsMs[rumbleIndex]; + rumbleIndex++; + rumbleTimer.Interval = durationToWait; + rumbleTimer.AutoReset = false; + rumbleTimer.Enabled = true; +#endif + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Gamepad.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/Gamepad.cs.meta new file mode 100644 index 0000000..3459d00 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Gamepad.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef20247bd5f04449293bb8ea3982f3ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticClip.cs b/Assets/Feel/NiceVibrations/Scripts/Components/HapticClip.cs new file mode 100644 index 0000000..0f3705a --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticClip.cs @@ -0,0 +1,35 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + /// + /// Represents an imported haptic clip asset. + /// + /// + /// HapticClip contains the data of a haptic clip asset imported from a .haptic file, + /// in a format suitable for playing it back at runtime. + /// A HapticClip is created by HapticImporter when importing a haptic clip asset + /// in the Unity editor, and can be played back at runtime with e.g. HapticSource or + /// HapticController::Play(). + /// + /// It contains two representations: + /// - JSON, used for playback on iOS and Android + /// - GamepadRumble, used for playback on gamepads with the GamepadRumbler class + public class HapticClip : ScriptableObject + { + /// + /// The JSON representation of the haptic clip, stored as a byte array encoded in UTF-8, + /// without a null terminator + /// + [SerializeField] + public byte[] json; + + /// + /// The haptic clip represented as a GamepadRumble struct + /// + [SerializeField] + public GamepadRumble gamepadRumble; + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticClip.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/HapticClip.cs.meta new file mode 100644 index 0000000..8768c72 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticClip.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df8d044f677634e749812dc987300584 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticController.cs b/Assets/Feel/NiceVibrations/Scripts/Components/HapticController.cs new file mode 100644 index 0000000..4a586f3 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticController.cs @@ -0,0 +1,568 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using System; +using System.Timers; + +#if (UNITY_ANDROID && !UNITY_EDITOR) +using System.Text; +#elif (UNITY_IOS && !UNITY_EDITOR) +using UnityEngine.iOS; +#endif + +namespace Lofelt.NiceVibrations +{ + /// + /// Provides haptic playback functionality. + /// + /// + /// HapticController allows you to load and play .haptic clips, and + /// provides various ways to control playback, such as seeking, looping and + /// amplitude/frequency modulation. + /// + /// If you need a MonoBehaviour API, use HapticSource and + /// HapticReceiver instead. + /// + /// On iOS and Android, the device is vibrated, using LofeltHaptics. + /// On any platform, when a gamepad is connected, that gamepad is vibrated, + /// using GamepadRumbler. + /// + /// Gamepads are vibrated automatically when HapticController detects that a + /// gamepad is connected, no special code is needed to support gamepads. + /// Gamepads only support Load(), Play(), Stop(), \ref clipLevel and \ref + /// outputLevel. Other features like Seek(), Loop() and \ref clipFrequencyShift + /// will have no effect on gamepads. + /// + /// None of the methods here are thread-safe and should only be called from + /// the main (Unity) thread. Calling these methods from a secondary thread can + /// cause undefined behaviour and memory leaks. + public static class HapticController + { + static bool lofeltHapticsInitalized = false; + + // Timer used to call HandleFinishedPlayback() when playback is complete + static Timer playbackFinishedTimer = new Timer(); + + // Duration of the loaded haptic clip, in seconds + static float clipLoadedDurationSecs = 0.0f; + + // Whether Load() has been called before + static bool clipLoaded = false; + + // The value of the last call to seek() + static float lastSeekTime = 0.0f; + + // Flag indicating if the device supports playing back .haptic clips + static bool deviceMeetsAdvancedRequirements = false; + + // Flag indicating if the user enabled playback looping. + // This does not necessarily mean that the currently active playback is looping, for + // example gamepads don't support looping. + static bool isLoopingEnabledByUser = false; + + // Flag indicating if the currently active playback is looping + static bool isPlaybackLooping = false; + + static HapticPatterns.PresetType _fallbackPreset = HapticPatterns.PresetType.None; + + /// + /// The haptic preset to be played when it's not possible to play a haptic clip + /// + public static HapticPatterns.PresetType fallbackPreset + { + get { return _fallbackPreset; } + set { _fallbackPreset = value; } + } + + internal static bool _hapticsEnabled = true; + + /// + /// Property to enable and disable global haptic playback + /// + public static bool hapticsEnabled + { + get { return _hapticsEnabled; } + set + { + if (_hapticsEnabled) + { + Stop(); + } + _hapticsEnabled = value; + } + } + + internal static float _outputLevel = 1.0f; + + /// + /// The overall haptic output level + /// + /// + /// It can be interpreted as the "volume control" for haptic playback. + /// Output level is applied in combination with \ref clipLevel to the currently playing haptic clip. + /// The combination of these two levels and the amplitude within the loaded haptic at a given moment + /// in time determines the strength of the vibration felt on the device. \ref outputLevel is best used + /// to increase or decrease the overall haptic level in a game. + /// + /// As output level pertains to all clips, unlike \ref clipLevel, it persists when a new clip is loaded. + /// + /// \ref outputLevel is a multiplication factor, it is not a dB value. The factor needs to be + /// 0 or greater. + /// + /// The combination of \ref outputLevel and \ref clipLevel can result in a gain (for factors + /// greater than 1.0) or an attenuation (for factors less than 1.0) to the clip. If the + /// combination of \ref outputLevel, \ref clipLevel and the amplitude within the loaded haptic + /// is greater than 1.0, it is clipped to 1.0. Hard clipping is performed, no limiter is used. + /// + /// On Android, an adjustment to \ref outputLevel will take effect in the next call to Play(). + /// On iOS, it will take effect right away. + [System.ComponentModel.DefaultValue(1.0f)] + public static float outputLevel + { + get { return _outputLevel; } + set + { + _outputLevel = value; + + ApplyLevelsToLofeltHaptics(); + ApplyLevelsToGamepadRumbler(); + } + } + + internal static float _clipLevel = 1.0f; + + /// + /// The level of the loaded clip + /// + /// + /// Clip level is applied in combination with \ref outputLevel, to the + /// currently playing haptic clip. The combination of these two levels and the amplitude within the loaded + /// haptic at a given moment in time determines the strength of the vibration felt on the device. + /// \ref clipLevel is best used to adjust the level of a single clip based on game state. + /// + /// As clip level is specific to an individual clip, unlike \ref outputLevel, it resets to + /// 1.0 when a new clip is loaded. + /// + /// \ref clipLevel is a multiplication factor, it is not a dB value. The factor needs to be + /// 0 or greater. + /// + /// The combination of \ref outputLevel and \ref clipLevel can result in a gain (for factors + /// greater than 1.0) or an attenuation (for factors less than 1.0) to the clip. + /// + /// If the combination of \ref outputLevel, \ref clipLevel and the amplitude within the loaded + /// haptic is greater than 1.0, it is clipped to 1.0. Hard clipping is performed, no limiter is used. + /// + /// The clip needs to be loaded with Load() before adjusting \ref clipLevel. Loading a clip + /// resets \ref clipLevel back to the default of 1.0. + /// + /// On Android, an adjustment to \ref clipLevel will take effect in the next call to Play(). On iOS, + /// it will take effect right away. + /// + /// On Android, setting the clip level should be done before calling \ref Seek(), since + /// setting a clip level ignores the sought value. + /// + [System.ComponentModel.DefaultValue(1.0f)] + public static float clipLevel + { + get { return _clipLevel; } + set + { + _clipLevel = value; + + ApplyLevelsToLofeltHaptics(); + ApplyLevelsToGamepadRumbler(); + } + } + + /// Action that is invoked when Load() is called + public static Action LoadedClipChanged; + + /// Action that is invoked when Play() is called + public static Action PlaybackStarted; + + /// + /// Action that is invoked when the playback has finished + /// + /// + /// This happens either when Stop() is explicitly called, or when a non-looping + /// clip has finished playing. + /// + /// This can be invoked spuriously, even if no haptics are currently playing, for example + /// if Stop() is called multiple times in a row. + public static Action PlaybackStopped; + + // Applies the current clip level and output level as the amplitude multiplication to + // LofeltHaptics + private static void ApplyLevelsToLofeltHaptics() + { + if (Init()) + { + LofeltHaptics.SetAmplitudeMultiplication(_outputLevel * _clipLevel); + } + } + + // Applies the current clip level and output level as the motor speed multiplication to + // GamepadRumbler + private static void ApplyLevelsToGamepadRumbler() + { + #if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + GamepadRumbler.lowFrequencyMotorSpeedMultiplication = _outputLevel * _clipLevel; + GamepadRumbler.highFrequencyMotorSpeedMultiplication = _outputLevel * _clipLevel; + #endif + } + + /// + /// Initializes HapticController. + /// + /// + /// Calling this method multiple times has no effect and is safe. + /// + /// You do not need to call this method, HapticController automatically calls this + /// method before any operation that needs initialization, such as Play(). + /// However it can be beneficial to call this early during startup, so the initialization + /// time is spent at startup instead of when the first haptic is triggered during gameplay. + /// If you have a HapticReceiver in your scene, it takes care of calling + /// Init() during startup for you. + /// + /// Do not call this method from a static constructor. Unity often invokes static + /// constructors from a different thread, for example during deserialization. The + /// initialization code is not thread-safe. This is the reason this method is not called + /// from the static constructor of HapticController or HapticReceiver. + /// + /// Whether the device supports the minimum requirements to play haptics + public static bool Init() + { + if (!lofeltHapticsInitalized) + { + lofeltHapticsInitalized = true; + + var syncContext = System.Threading.SynchronizationContext.Current; + playbackFinishedTimer.Elapsed += (object obj, System.Timers.ElapsedEventArgs args) => + { + // Timer elapsed events are called from a separate thread, so use + // SynchronizationContext to handle it in the main thread. + syncContext.Post(_ => + { + HandleFinishedPlayback(); + }, null); + }; + + if (DeviceCapabilities.isVersionSupported) + { + LofeltHaptics.Initialize(); + DeviceCapabilities.Init(); + deviceMeetsAdvancedRequirements = DeviceCapabilities.meetsAdvancedRequirements; + } + + GamepadRumbler.Init(); + } + return deviceMeetsAdvancedRequirements; + } + + /// + /// Loads a haptic clip given in JSON format for later playback. + /// + /// + /// This overload of Load() is useful in cases there is only the JSON data of a haptic clip + /// available. Due to only having the JSON data and no GamepadRumble, gamepad playback is + /// not supported with this overload. + /// + /// The haptic clip, which is the content of the + /// .haptic file, a UTF-8 encoded JSON string without a null + /// terminator + public static void Load(byte[] data) + { + GamepadRumbler.Unload(); + lastSeekTime = 0.0f; + clipLoaded = true; + clipLoadedDurationSecs = 0.0f; + if (Init()) + { + LofeltHaptics.Load(data); + } + clipLevel = 1.0f; + LoadedClipChanged?.Invoke(); + } + + /// + /// Loads the given HapticClip for later playback. + /// + /// + /// This is the standard way to load a haptic clip, while the other overloads of Load() + /// are for more specialized cases. + /// + /// At the moment only one clip can be loaded at a time. + /// + /// The HapticClip to be loaded + public static void Load(HapticClip clip) + { + Load(clip.json, clip.gamepadRumble); + } + + /// + /// Loads the haptic clip given as JSON and GamepadRumble for later playback. + /// + /// + /// This is an overload of Load() that is useful when a HapticClip is not available, and + /// both the JSON and GamepadRumble are. One such case is generating both dynamically at + /// runtime. + /// + /// The haptic clip, which is the content of the .haptic file, + /// a UTF-8 encoded JSON string without a null terminator + /// The GamepadRumble representation of the haptic clip + public static void Load(byte[] json, GamepadRumble rumble) + { + Load(json); + + GamepadRumbler.Load(rumble); + // GamepadRumbler.Load() resets the motor speed multiplication to 1.0, so the levels + // need to be applied here again + ApplyLevelsToGamepadRumbler(); + + // Load() only sets the correct clip duration on iOS and Android, and sets it to 0.0 + // on other platforms. For the other platforms, set a clip duration based on the + // GamepadRumble here. + if (clipLoadedDurationSecs == 0.0f && rumble.IsValid()) + { + clipLoadedDurationSecs = rumble.totalDurationMs / 1000.0f; + } + } + + static void HandleFinishedPlayback() + { + lastSeekTime = 0.0f; + isPlaybackLooping = false; + playbackFinishedTimer.Enabled = false; + PlaybackStopped?.Invoke(); + } + + /// + /// Plays the haptic clip that was previously loaded with Load(). + /// + /// + /// If Loop(true) was called previously, the playback will be repeated + /// until Stop() is called. Otherwise the haptic clip will only play once. + /// + /// In case the device does not meet the requirements to play .haptic clips, this + /// function will call HapticPatterns.PlayPreset() with the \ref fallbackPreset set. In this + /// case, functionality like seeking, looping and runtime modulation won't do anything as + /// they aren't available for haptic presets. + public static void Play() + { + if (!_hapticsEnabled) + { + return; + } + + float remainingPlayDuration = 0.0f; + bool canLoop = false; + if (GamepadRumbler.CanPlay()) + { + remainingPlayDuration = clipLoadedDurationSecs; + GamepadRumbler.Play(); + } + else if (Init()) + { + remainingPlayDuration = Mathf.Max(clipLoadedDurationSecs - lastSeekTime, 0.0f); + canLoop = DeviceCapabilities.canLoop; + LofeltHaptics.Play(); + } + else if (DeviceCapabilities.isVersionSupported) + { + remainingPlayDuration = HapticPatterns.GetPresetDuration(fallbackPreset); + HapticPatterns.PlayPreset(fallbackPreset); + } + + isPlaybackLooping = isLoopingEnabledByUser && canLoop; + PlaybackStarted?.Invoke(); + + // + // Call HandleFinishedPlayback() after the playback finishes + // + if (remainingPlayDuration > 0.0f) + { + playbackFinishedTimer.Interval = remainingPlayDuration * 1000; + playbackFinishedTimer.AutoReset = false; + playbackFinishedTimer.Enabled = !isPlaybackLooping; + } + else + { + // Setting playbackFinishedTimer.Interval needs an interval > 0, otherwise it will + // throw an exception. + // Even if the remaining play duration is 0, we still want to trigger everything + // that happens in HandleFinishedPlayback(). + // A playback duration of 0 happens in the Unity editor, when loading the clip + // failed or when seeking to the end of a clip. + HandleFinishedPlayback(); + } + } + + + /// + /// Loads and plays the HapticClip given as an argument. + /// + /// + /// The HapticClip to be played + public static void Play(HapticClip clip) + { + Load(clip); + Play(); + } + + /// + /// Stops haptic playback + /// + /// + public static void Stop() + { + + if (Init()) + { + LofeltHaptics.Stop(); + } + else + { + LofeltHaptics.StopPattern(); + } + GamepadRumbler.Stop(); + HandleFinishedPlayback(); + } + + /// + /// Jumps to a time position in the haptic clip. + /// + /// + /// The playback will always be stopped when this function is called. + /// This is to match the behavior between iOS and Android, since Android needs to + /// restart playback for seek to have effect. + /// + /// If seeking beyond the end of the clip, Play() will not reproduce any haptics. + /// Seeking to a negative position will seek to the beginning of the clip. + /// + /// The new position within the clip, as seconds from the beginning + /// of the clip + public static void Seek(float time) + { + if (Init()) + { + LofeltHaptics.Stop(); + LofeltHaptics.Seek(time); + } + GamepadRumbler.Stop(); + lastSeekTime = time; + } + + /// + /// Adds the given shift to the frequency of every breakpoint in the clip, including the + /// emphasis. + /// + /// + /// In other words, this property shifts all frequencies of the clip. The frequency shift is + /// added to each frequency value and needs to be between -1.0 and 1.0. If the resulting + /// frequency of a breakpoint is smaller than 0.0 or greater than 1.0, it is clipped to that + /// range. The frequency is clipped hard, no limiter is used. + /// + /// The clip needs to be loaded with Load() first. Loading a clip resets the shift back + /// to the default of 0.0. + /// + /// Setting the frequency shift has no effect on Android; it only works on iOS. + /// + /// A call to this property will change the frequency shift of a currently playing clip + /// right away. If no clip is playing, the shift is applied in the next call to + /// Play(). + [System.ComponentModel.DefaultValue(0.0f)] + public static float clipFrequencyShift + { + set + { + if (Init()) + { + LofeltHaptics.SetFrequencyShift(value); + } + } + } + + /// + /// Set the playback of a haptic clip to loop. + /// + /// + /// On Android, calling this will always put the playback position at the start of the clip. + /// Also, it will only have an effect when Play() is called again. + /// + /// On iOS, if a clip is already playing, calling this will leave the playback position as + /// it is and repeat when it reaches the end. No need to call Play() again for + /// changes to take effect. + /// + /// If the value is true, looping will be enabled which results + /// in repeating the playback until Stop() is called; if false, the haptic + /// clip will only be played once. + public static void Loop(bool enabled) + { + if (Init()) + { + LofeltHaptics.Loop(enabled); + } + isLoopingEnabledByUser = enabled; + } + + /// + /// Checks if the loaded haptic clip is playing. + /// + /// + /// Whether the loaded clip is playing + public static bool IsPlaying() + { + if (playbackFinishedTimer.Enabled) + { + return true; + } + else + { + return isPlaybackLooping; + } + } + + /// + /// Stops playback and resets the playback state. + /// + /// + /// Seek position, clip level, clip frequency shift and loop are reset to the + /// default values. + /// The currently loaded clip stays loaded. + /// \ref hapticsEnabled and \ref outputLevel are not reset. + public static void Reset() + { + if (clipLoaded) + { + Seek(0.0f); + Stop(); + clipLevel = 1.0f; + clipFrequencyShift = 0.0f; + Loop(false); + } + fallbackPreset = HapticPatterns.PresetType.None; + } + + /// + /// Processes an application focus change event. + /// + /// + /// If you have a HapticReceiver in your scene, the HapticReceiver + /// will take care of calling this method when needed. Otherwise it is your + /// responsibility to do so. + /// + /// When the application loses the focus, playback is stopped. + /// + /// Whether the application now has focus + public static void ProcessApplicationFocus(bool hasFocus) + { + if (!hasFocus) + { + // While LofeltHaptics stops playback when the app loses focus, + // calling Stop() here handles additional things such as invoking + // the PlaybackStopped Action. + Stop(); + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticController.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/HapticController.cs.meta new file mode 100644 index 0000000..cd8f350 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eea19a9647af946678dbcea38129dd98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticPatterns.cs b/Assets/Feel/NiceVibrations/Scripts/Components/HapticPatterns.cs new file mode 100644 index 0000000..d900d38 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticPatterns.cs @@ -0,0 +1,514 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System; +using UnityEngine; +using System.Globalization; + +namespace Lofelt.NiceVibrations +{ + /// + /// A collection of methods to play simple haptic patterns. + /// + /// + /// Each of the methods here load and play a simple haptic clip or a + /// haptic pattern, depending on the device capabilities. + /// + /// None of the methods here are thread-safe and should only be called from + /// the main (Unity) thread. Calling these methods from a secondary thread can + /// cause undefined behaviour and memory leaks. + /// + /// After playback has finished, the loaded clips in this class will remain + /// loaded in HapticController. + + public static class HapticPatterns + { + static String emphasisTemplate; + static String constantTemplate; + static NumberFormatInfo numberFormat; + static private float[] constantPatternTime = new float[] { 0.0f, 0.0f }; + + /// + /// Enum that represents all the types of haptic presets available + /// + public enum PresetType + { + Selection = 0, + Success = 1, + Warning = 2, + Failure = 3, + LightImpact = 4, + MediumImpact = 5, + HeavyImpact = 6, + RigidImpact = 7, + SoftImpact = 8, + None = -1 + } + + /// + /// Structure that represents a haptic pattern with amplitude variations. + /// + /// + /// \ref time values have be incremental to be compatible with Preset. + struct Pattern + { + public float[] time; + public float[] amplitude; + + static String clipJsonTemplate; + + static Pattern() + { + clipJsonTemplate = (Resources.Load("nv-pattern-template") as TextAsset).text; + } + + public Pattern(float[] time, float[] amplitude) + { + this.time = time; + this.amplitude = amplitude; + } + + // Converts a Pattern to a GamepadRumble + // + // Each pair of adjacent entries in the Pattern create one entry in the GamepadRumble. + public GamepadRumble ToRumble() + { + GamepadRumble result = new GamepadRumble(); + if (time.Length <= 1) + { + return result; + } + + Debug.Assert(time.Length == amplitude.Length); + + // The first pattern entry needs to have a time of 0.0 for the algorithm below to work + Debug.Assert(time[0] == 0.0f); + + int rumbleCount = time.Length - 1; + result.durationsMs = new int[rumbleCount]; + result.lowFrequencyMotorSpeeds = new float[rumbleCount]; + result.highFrequencyMotorSpeeds = new float[rumbleCount]; + result.totalDurationMs = 0; + for (int rumbleIndex = 0; rumbleIndex < rumbleCount; rumbleIndex++) + { + int patternDurationMs = (int)((time[rumbleIndex + 1] - time[rumbleIndex]) * 1000.0f); + result.durationsMs[rumbleIndex] = patternDurationMs; + result.lowFrequencyMotorSpeeds[rumbleIndex] = amplitude[rumbleIndex]; + result.highFrequencyMotorSpeeds[rumbleIndex] = amplitude[rumbleIndex]; + result.totalDurationMs += result.durationsMs[rumbleIndex]; + } + return result; + } + + // Converts a Pattern to a haptic clip JSON string. + public String ToClip() + { + if (clipJsonTemplate == null) + { + return ""; + } + + String amplitudeEnvelope = ""; + for (int i = 0; i < time.Length; i++) + { + float clampedAmplitude = Mathf.Clamp(amplitude[i], 0.0f, 1.0f); + amplitudeEnvelope += "{ \"time\":" + time[i].ToString(numberFormat) + "," + + "\"amplitude\":" + clampedAmplitude.ToString(numberFormat) + "}"; + + // Don't add a comma to the JSON data if we're at the end of the envelope + if (i + 1 < time.Length) + { + amplitudeEnvelope += ","; + } + } + + return clipJsonTemplate.Replace("{amplitude-envelope}", amplitudeEnvelope); + } + } + + // A haptic preset in its different representations + // + // A Preset has four different representations, as there are four different playback methods. + // Each representation is created at construction time, so that playing a + // Preset has no further conversion cost at playback time. + internal struct Preset + { + // For playback on iOS, using system haptics + public PresetType type; + + // For playback on Android devices without amplitude control + public float[] maximumAmplitudePattern; + + // For playback on Android devices with amplitude control + public byte[] jsonClip; + + // For playback on gamepads +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + public GamepadRumble gamepadRumble; +#endif + + public Preset(PresetType type, float[] time, float[] amplitude) + { + Debug.Assert(type != PresetType.None); + Pattern pattern = new Pattern(time, amplitude); + this.type = type; + this.maximumAmplitudePattern = pattern.time; +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + this.gamepadRumble = pattern.ToRumble(); +#endif + this.jsonClip = System.Text.Encoding.UTF8.GetBytes(pattern.ToClip()); + } + + public float GetDuration() + { + if (maximumAmplitudePattern.Length > 0) + { + return maximumAmplitudePattern[maximumAmplitudePattern.Length - 1]; + } + else + { + return 0f; + } + } + } + + /// + /// Predefined Preset that represents a "Selection" haptic preset + /// + internal static Preset Selection; + + /// + /// Predefined Preset that represents a "Light" haptic preset + /// + internal static Preset Light; + + /// + /// Predefined Preset that represents a "Medium" haptic preset + /// + internal static Preset Medium; + + /// + /// Predefined Preset that represents a "Heavy" haptic preset + /// + internal static Preset Heavy; + + /// + /// Predefined Preset that represents a "Rigid" haptic preset + /// + internal static Preset Rigid; + + /// + /// Predefined Preset that represents a "Soft" haptic preset + /// + internal static Preset Soft; + + /// + /// Predefined Preset that represents a "Success" haptic preset + /// + internal static Preset Success; + + /// + /// Predefined Preset that represents a "Failure" haptic preset + /// + internal static Preset Failure; + + /// + /// Predefined Preset that represents a "Warning" haptic preset + /// + internal static Preset Warning; + + static HapticPatterns() + { + emphasisTemplate = (Resources.Load("nv-emphasis-template") as TextAsset).text; + constantTemplate = (Resources.Load("nv-constant-template") as TextAsset).text; + + numberFormat = new NumberFormatInfo(); + numberFormat.NumberDecimalSeparator = "."; + + // Initialize presets after setting the number format, so that the correct decimal + // separator is used when building the JSON representation. + + Selection = new Preset(PresetType.Selection, new float[] { 0.0f, 0.04f }, + new float[] { 0.471f, 0.471f }); + + Light = new Preset(PresetType.LightImpact, new float[] { 0.000f, 0.040f }, + new float[] { 0.156f, 0.156f }); + + Medium = new Preset(PresetType.MediumImpact, new float[] { 0.000f, 0.080f }, + new float[] { 0.471f, 0.471f }); + + Heavy = new Preset(PresetType.HeavyImpact, new float[] { 0.0f, 0.16f }, + new float[] { 1.0f, 1.00f }); + + Rigid = new Preset(PresetType.RigidImpact, new float[] { 0.0f, 0.04f }, + new float[] { 1.0f, 1.00f }); + + Soft = new Preset(PresetType.SoftImpact, new float[] { 0.000f, 0.160f }, + new float[] { 0.156f, 0.156f }); + + Success = new Preset(PresetType.Success, new float[] { 0.0f, 0.040f, 0.080f, 0.240f }, + new float[] { 0.0f, 0.157f, 0.000f, 1.000f }); + + Failure = new Preset(PresetType.Failure, + new float[] { 0.0f, 0.080f, 0.120f, 0.200f, 0.240f, 0.400f, 0.440f, 0.480f }, + new float[] { 0.0f, 0.470f, 0.000f, 0.470f, 0.000f, 1.000f, 0.000f, 0.157f }); + + Warning = new Preset(PresetType.Warning, new float[] { 0.0f, 0.120f, 0.240f, 0.280f }, + new float[] { 0.0f, 1.000f, 0.000f, 0.470f }); + } + + /// + /// Plays a single emphasis point. + /// + /// + /// Plays a haptic clip that consists only of one breakpoint with emphasis. + /// On iOS, this translates to a transient, and on Android and gamepads to + /// a quick vibration. + /// + /// The amplitude of the emphasis, from 0.0 to 1.0 + /// The frequency of the emphasis, from 0.0 to 1.0 + public static void PlayEmphasis(float amplitude, float frequency) + { + if (emphasisTemplate == null || !HapticController.hapticsEnabled) + { + return; + } + + // Use HapticController.Play() to play a .haptic clip on mobile devices + // that support it, or to play a gamepad rumble if a gamepad is connected. + if (HapticController.Init() || GamepadRumbler.IsConnected()) + { + float clampedAmplitude = Mathf.Clamp(amplitude, 0.0f, 1.0f); + float clampedFrequency = Mathf.Clamp(frequency, 0.0f, 1.0f); + const float duration = 0.1f; + + String json = emphasisTemplate + .Replace("{amplitude}", clampedAmplitude.ToString(numberFormat)) + .Replace("{frequency}", clampedFrequency.ToString(numberFormat)) + .Replace("{duration}", duration.ToString(numberFormat)); + + // This preprocessor section will only run for non-mobile platforms + GamepadRumble rumble = new GamepadRumble(); +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + rumble.durationsMs = new int[] { (int)(duration * 1000) }; + rumble.lowFrequencyMotorSpeeds = new float[] { clampedAmplitude }; + rumble.highFrequencyMotorSpeeds = new float[] { clampedFrequency }; +#endif + + HapticController.Load(System.Text.Encoding.UTF8.GetBytes(json), rumble); + HapticController.Loop(false); + HapticController.Play(); + } + + // As a fallback, play a short buzz on Android, or a preset on iOS. + else if (DeviceCapabilities.isVersionSupported) + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + LofeltHaptics.PlayMaximumAmplitudePattern(new float[]{ 0.0f, 0.05f }); +#elif (UNITY_IOS && !UNITY_EDITOR) + PresetType preset = presetTypeForEmphasis(amplitude); + LofeltHaptics.TriggerPresetHaptics((int)preset); +#endif + } + } + + /// + /// Automatically selects the fallback preset based on the emphasis point amplitude. + /// + /// + /// The amplitude of the emphasis, from 0.0 to 1.0 + static PresetType presetTypeForEmphasis(float amplitude) + { + if (amplitude > 0.5f) + { + return HapticPatterns.PresetType.HeavyImpact; + } + else if (amplitude <= 0.5f && amplitude > 0.3) + { + return HapticPatterns.PresetType.MediumImpact; + } + else + { + return HapticPatterns.PresetType.LightImpact; + } + } + + /// + /// Plays a haptic with constant amplitude and frequency. + /// + /// + /// On iOS and with gamepads, you can use HapticController::clipLevel to modulate the haptic + /// while it is playing. iOS additional supports modulating the frequency with + /// HapticController::clipFrequencyShift. + /// + /// When \ref DeviceCapabilities.meetsAdvancedRequirements returns false on mobile, + /// the behavior of this method is different for iOS and Android: + ///
    + ///
  • On iOS, it will play the preset HapticPatterns.PresetType.HeavyImpact.
  • + /// + ///
  • On Android, it will play a pattern with maximum amplitude for the set duration + /// since there is no amplitude control.
  • + /// + ///
+ /// Amplitude, from 0.0 to 1.0 + /// Frequency, from 0.0 to 1.0 + /// Play duration in seconds + public static void PlayConstant(float amplitude, float frequency, float duration) + { + if (constantTemplate == null || !HapticController.hapticsEnabled) + { + return; + } + + float clampedAmplitude = Mathf.Clamp(amplitude, 0.0f, 1.0f); + float clampedFrequency = Mathf.Clamp(frequency, 0.0f, 1.0f); + float clampedDurationSecs = Mathf.Max(duration, 0.0f); + + String json = constantTemplate + .Replace("{duration}", clampedDurationSecs.ToString(numberFormat)); + + // This preprocessor section will only run for non-mobile platforms + GamepadRumble rumble = new GamepadRumble(); +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + int rumbleDurationMs = (int)(clampedDurationSecs * 1000); + const int rumbleEntryDurationMs = 16; // One rumble entry per frame at 60 FPS, which is the limit of what GamepadRumbler can play + int rumbleEntryCount = rumbleDurationMs / rumbleEntryDurationMs; + rumble.durationsMs = new int[rumbleEntryCount]; + rumble.lowFrequencyMotorSpeeds = new float[rumbleEntryCount]; + rumble.highFrequencyMotorSpeeds = new float[rumbleEntryCount]; + + // Create many rumble entries instead of just one. With just one entry, changing + // clipLevel while the rumble is playing would have no effect, as GamepadRumbler applies + // a change only to the next rumble entry, not the one currently playing. + for (int i = 0; i < rumbleEntryCount; i++) + { + rumble.durationsMs[i] = rumbleEntryDurationMs; + rumble.lowFrequencyMotorSpeeds[i] = 1.0f; + rumble.highFrequencyMotorSpeeds[i] = 1.0f; + } +#endif + + if (HapticController.Init() || GamepadRumbler.IsConnected()) + { + HapticController.Load(System.Text.Encoding.UTF8.GetBytes(json), rumble); + HapticController.Loop(false); + HapticController.clipLevel = clampedAmplitude; + HapticController.clipFrequencyShift = clampedFrequency; + HapticController.Play(); + } + else if (DeviceCapabilities.isVersionSupported) + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + constantPatternTime[1] = duration; + LofeltHaptics.PlayMaximumAmplitudePattern(constantPatternTime); +#elif (UNITY_IOS && !UNITY_EDITOR) + HapticPatterns.PlayPreset(PresetType.HeavyImpact); +#endif + } + } + + static Preset GetPresetForType(PresetType type) + { + Debug.Assert(type != PresetType.None); + + switch (type) + { + case PresetType.Selection: + return Selection; + case PresetType.LightImpact: + return Light; + case PresetType.MediumImpact: + return Medium; + case PresetType.HeavyImpact: + return Heavy; + case PresetType.RigidImpact: + return Rigid; + case PresetType.SoftImpact: + return Soft; + case PresetType.Success: + return Success; + case PresetType.Failure: + return Failure; + case PresetType.Warning: + return Warning; + } + + // Silence compiler warning about not all code paths returning something + return Medium; + } + + /// + /// Plays a set of predefined haptic patterns. + /// + /// + /// These predefined haptic patterns are played and represented in different ways for iOS, + /// Android and gamepads. + /// + /// - On iOS, this function triggers system haptics that are native to iOS. Calling + /// \ref HapticController.Stop() won't stop haptics. + /// - On Android devices that can play .haptic clips (DeviceCapabilities.meetsAdvancedRequirements + /// is true) and on gamepads, this function plays a haptic pattern that has a similar + /// experience to the matching iOS system haptics. + /// - On Android devices that can not play .haptic clips (DeviceCapabilities.meetsAdvancedRequirements + /// is false), this function plays a haptic pattern that has a similar experience to + /// the matching iOS system haptics, by turning the motor off and on at maximum amplitude. + /// + /// This is a "fire-and-forget" method. Other functionalities like seeking, looping, and + /// runtime modulation won't work after calling this method. + /// + /// Type of preset represented by a \ref PresetType enum + public static void PlayPreset(PresetType presetType) + { + if (!HapticController.hapticsEnabled || presetType == PresetType.None) + { + return; + } + + Preset preset = GetPresetForType(presetType); + +#if (UNITY_IOS && !UNITY_EDITOR) + LofeltHaptics.TriggerPresetHaptics((int)presetType); + return; +#else + if (HapticController.Init() || GamepadRumbler.IsConnected()) + { +#if ((!UNITY_ANDROID && !UNITY_IOS) || UNITY_EDITOR) && NICE_VIBRATIONS_INPUTSYSTEM_INSTALLED && ENABLE_INPUT_SYSTEM && !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + HapticController.Load(preset.jsonClip, preset.gamepadRumble); +#else + HapticController.Load(preset.jsonClip); +#endif + HapticController.Loop(false); + HapticController.Play(); + return; + } + + if (DeviceCapabilities.isVersionSupported) + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + LofeltHaptics.PlayMaximumAmplitudePattern(preset.maximumAmplitudePattern); + return; +#endif + } +#endif + } + + /// + /// Returns the haptic preset duration. + /// + /// + /// While a preset is played back in different ways on iOS, Android and gamepads, the + /// duration is similar for each playback method. + /// + /// Type of preset represented by a \ref PresetType enum + /// Returns a float with a the preset duration; if the selected preset is `None`, it returns 0 + public static float GetPresetDuration(PresetType presetType) + { + if (presetType == PresetType.None) + { + return 0; + } + + return GetPresetForType(presetType).GetDuration(); + } + } + +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticPatterns.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/HapticPatterns.cs.meta new file mode 100644 index 0000000..a11d0e6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticPatterns.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e98a6cfb8386a479a8a5c3ded1f05862 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticReceiver.cs b/Assets/Feel/NiceVibrations/Scripts/Components/HapticReceiver.cs new file mode 100644 index 0000000..e96ade1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticReceiver.cs @@ -0,0 +1,108 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + /// + /// A MonoBehaviour that forwards global properties from HapticController and + /// handles events + /// + /// + /// While HapticSource provides a per-clip MonoBehaviour API for the functionality + /// in HapticController, HapticReceiver provides a MonoBehaviour API for + /// the global functionality in HapticController. + /// + /// HapticReceiver is also responsible for global event handling, such as an application + /// focus change. To make this work correctly, your scene should have exactly one + /// HapticReceiver component, similar to how a scene should have exactly one + /// AudioListener. + /// + /// In the future HapticReceiver might receive parameters and distance to + /// HapticSource components, and can be used for global parameter control through Unity + /// Editor GUI. + [AddComponentMenu("Nice Vibrations/Haptic Receiver")] + public class HapticReceiver : MonoBehaviour, ISerializationCallbackReceiver + { + // These two fields are only used for serialization and deserialization. + // HapticController manages the output haptic level and global haptic toggle, + // HapticReceiver forwards these properties so they are available in a + // MonoBehaviour. + // To be able to serialize these properties, HapticReceiver needs to have + // fields for them. Before serialization, these fields are set to the values + // from HapticController, and after deserialization the values are restored + // back to HapticController. + [SerializeField] + [Range(0.0f, 5.0f)] + private float _outputLevel = 1.0f; + [SerializeField] + private bool _hapticsEnabled = true; + + /// + /// Loads all fields from HapticController. + /// + public void OnBeforeSerialize() + { + _outputLevel = HapticController._outputLevel; + _hapticsEnabled = HapticController._hapticsEnabled; + } + + /// + /// Writes all fields to HapticController. + /// + public void OnAfterDeserialize() + { + HapticController._outputLevel = _outputLevel; + HapticController._hapticsEnabled = _hapticsEnabled; + } + + /// + /// Forwarded HapticController::outputLevel + /// + [System.ComponentModel.DefaultValue(1.0f)] + public float outputLevel + { + get { return HapticController.outputLevel; } + set { HapticController.outputLevel = value; } + } + + + /// + /// Forwarded HapticController::hapticsEnabled + /// + [System.ComponentModel.DefaultValue(true)] + public bool hapticsEnabled + { + get { return HapticController.hapticsEnabled; } + set { HapticController.hapticsEnabled = value; } + } + + /// + /// Initializes HapticController. + /// + /// + /// This ensures that the initialization time is spent at startup instead of when + /// the first haptic is triggered during gameplay. + void Start() + { + HapticController.Init(); + } + + /// + /// Forwards an application focus change event to HapticController. + /// + void OnApplicationFocus(bool hasFocus) + { + HapticController.ProcessApplicationFocus(hasFocus); + } + + /// + /// Stops haptic playback on the gamepad when destroyed, to make sure the gamepad + /// stops vibrating when quitting the application. + /// + void OnDestroy() + { + GamepadRumbler.Stop(); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticReceiver.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/HapticReceiver.cs.meta new file mode 100644 index 0000000..8ba2383 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticReceiver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ceb29a83998eb4949bc0a9c8e5662fa1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 24c63d27288824cf68c83ec01e0f3643, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticSource.cs b/Assets/Feel/NiceVibrations/Scripts/Components/HapticSource.cs new file mode 100644 index 0000000..ec118d9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticSource.cs @@ -0,0 +1,262 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + /// + /// Provides haptic playback functionality for a single haptic clip. + /// + /// + /// HapticSource plays back the HapticClip assigned in the \ref clip property + /// when calling Play(). It also provides various ways to control playback, such as + /// seeking, looping and amplitude/frequency modulation. + /// + /// When a gamepad is connected, the haptic clip will be played back on that gamepad. + /// See the HapticController documentation for more details about gamepad support. + /// + /// At the moment, playback of a haptic source is not triggered automatically + /// by e.g. proximity between the HapticReceiver and the HapticSource, + /// so you need to call Play() to trigger playback. + /// + /// You can place multiple HapticSource components in your scene, with a different + /// HapticClip assigned to each. + /// + /// HapticSource provides a per-clip MonoBehaviour API for the functionality + /// in HapticController, while HapticReceiver provides a MonoBehaviour API + /// for the global functionality in HapticController. + /// + /// HapticSourceInspector provides a custom editor for HapticSource for the + /// Inspector. + [AddComponentMenu("Nice Vibrations/Haptic Source")] + public class HapticSource : MonoBehaviour + { + const int DEFAULT_PRIORITY = 128; + + /// The HapticClip this HapticSource loads and plays. + public HapticClip clip; + + /// + /// The priority of the HapticSource + /// + /// + /// This property is set by HapticSourceInspector. 0 is the highest priority and 256 + /// is the lowest priority. + /// + /// The default value is 128. + public int priority = DEFAULT_PRIORITY; + + /// + /// Jump in time position of haptic source playback. + /// + /// + /// Initially set to 0.0 seconds. + /// This value can only be set when using Seek(). + float seekTime = 0.0f; + + [SerializeField] + HapticPatterns.PresetType _fallbackPreset = HapticPatterns.PresetType.None; + + /// + /// The haptic preset to be played when it's not possible to play a haptic clip + /// + [System.ComponentModel.DefaultValue(HapticPatterns.PresetType.None)] + public HapticPatterns.PresetType fallbackPreset + { + get { return _fallbackPreset; } + set { _fallbackPreset = value; } + } + + [SerializeField] + bool _loop = false; + + /// + /// Set the haptic source to loop playback of the haptic clip. + /// + /// + /// It will only have any effect once Play() is called. + /// + /// See HapticController::Loop() for further details. + [System.ComponentModel.DefaultValue(false)] + public bool loop + { + get { return _loop; } + set { _loop = value; } + } + + [SerializeField] + float _level = 1.0f; + + /// + /// The level of the haptic source + /// + /// + /// Haptic source level is applied in combination with output level (which can be set on either + /// HapticReceiver or HapticController according to preference), to the currently playing + /// haptic clip. The combination of these two levels and the amplitude within the loaded + /// haptic at a given moment in time determines the strength of the vibration felt on the device. See + /// HapticController::clipLevel for further details. + [System.ComponentModel.DefaultValue(1.0)] + public float level + { + get { return _level; } + set + { + _level = value; + + if (IsLoaded()) + { + HapticController.clipLevel = _level; + } + } + } + + [SerializeField] + float _frequencyShift = 0.0f; + + /// + /// This shift is added to the frequency of every breakpoint in the clip, including the + /// emphasis. + /// + /// + /// See HapticController::clipFrequencyShift for further details. + [System.ComponentModel.DefaultValue(0.0)] + public float frequencyShift + { + get { return _frequencyShift; } + set + { + _frequencyShift = value; + + if (IsLoaded()) + { + HapticController.clipFrequencyShift = _frequencyShift; + } + } + } + + /// The HapticSource that is currently loaded into HapticController. + /// This can be null if nothing was ever loaded, or if HapticController::Load() + /// was called directly, bypassing HapticSource. + static HapticSource loadedHapticSource = null; + + /// The HapticSource that was last played. + /// This can be null if nothing was ever player, or if HapticController::Play() + /// was called directly, bypassing HapticSource. + /// The lastPlayedHapticSource isn't necessarily playing now, lastPlayedHapticSource + /// will remain set even if playback has finished or was stopped. + static HapticSource lastPlayedHapticSource = null; + + static HapticSource() + { + // When HapticController::Load() or HapticController::Play() is + // called directly, bypassing HapticSource, reset loadedHapticSource + // and lastPlayedHapticSource. + HapticController.LoadedClipChanged += () => + { + loadedHapticSource = null; + }; + HapticController.PlaybackStarted += () => + { + lastPlayedHapticSource = null; + }; + } + + /// + /// Loads and plays back the haptic clip. + /// + /// + /// At the moment only one haptic clip at a time can be played. If another + /// HapticSource is currently playing and has lower priority, its playback will + /// be stopped. + /// + /// If a seek time within the time range of the clip has been set with Seek(), + /// it will jump to that position if \ref loop is false. If \ref loop + /// is true, seeking will have no effect. + /// + /// It will loop playback in case \ref loop is true. + public void Play() + { + if (CanPlay()) + { + // + // Load + // + HapticController.Load(clip); + loadedHapticSource = this; + + // + // Apply properties like loop, modulation and seek position + // + HapticController.Loop(loop); + + HapticController.clipLevel = level; + HapticController.clipFrequencyShift = frequencyShift; + + if (seekTime != 0.0f && !loop) + { + HapticController.Seek(seekTime); + } + + // + // Play + // + HapticController.fallbackPreset = fallbackPreset; + HapticController.Play(); + lastPlayedHapticSource = this; + } + } + + private bool CanPlay() + { + return (!HapticController.IsPlaying() || + (lastPlayedHapticSource != null && priority <= lastPlayedHapticSource.priority)); + } + + /// + /// Checks if the current HapticSource has been loaded into HapticController. + /// + /// + /// This is used to avoid triggering operations on HapticController while + /// another HapticSource is loaded. + private bool IsLoaded() + { + return Object.ReferenceEquals(this, loadedHapticSource); + } + + /// + /// Stops playback that was previously started with Play(). + /// + public void Stop() + { + if (IsLoaded()) + { + HapticController.Stop(); + } + } + + /// + /// Sets the time position to jump to when Play() is called. + /// + /// + /// It will only have an effect once Play() is called. + /// + /// The position in the clip, in seconds + public void Seek(float time) + { + this.seekTime = time; + } + + /// + /// When a GameObject is disabled, stop playback if this HapticSource is + /// playing. + /// + public void OnDisable() + { + if (HapticController.IsPlaying() && IsLoaded()) + { + this.Stop(); + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/HapticSource.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/HapticSource.cs.meta new file mode 100644 index 0000000..cdb65dc --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/HapticSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d20df93fb7de8457baa15a213a53ab19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 7c1be57d46a3143daa1fe62dbc59772f, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Icons.meta b/Assets/Feel/NiceVibrations/Scripts/Components/Icons.meta new file mode 100644 index 0000000..0947622 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 729f668a205524058a62426043ee3083 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticReceiverIcon.png b/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticReceiverIcon.png new file mode 100644 index 0000000..f088ee6 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticReceiverIcon.png differ diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticReceiverIcon.png.meta b/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticReceiverIcon.png.meta new file mode 100644 index 0000000..43b7cc9 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticReceiverIcon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 24c63d27288824cf68c83ec01e0f3643 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticSourceIcon.png b/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticSourceIcon.png new file mode 100644 index 0000000..22683a9 Binary files /dev/null and b/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticSourceIcon.png differ diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticSourceIcon.png.meta b/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticSourceIcon.png.meta new file mode 100644 index 0000000..7e56ba0 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Icons/HapticSourceIcon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 7c1be57d46a3143daa1fe62dbc59772f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/JNIHelpers.cs b/Assets/Feel/NiceVibrations/Scripts/Components/JNIHelpers.cs new file mode 100644 index 0000000..8bc7124 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/JNIHelpers.cs @@ -0,0 +1,135 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +#if (UNITY_ANDROID && !UNITY_EDITOR) + +using System; +using UnityEngine; + +namespace Lofelt.NiceVibrations +{ + // Android JNI call wrappers that are more efficient than AndroidJavaObject::Call() + // + // Calling a method via AndroidJavaObject, e.g. `lofeltHaptics.Call("play")`, is inefficient: + // - It looks up the method by name for each call + // - It allocates memory during method lookup and argument conversion + // + // JNIHelpers provides alternative Call() methods that are more efficient: + // - It allows calling by method ID rather by method name, so that the method only needs to + // be looked up once, not for every call + // - It does not allocate memory for converting the arguments to jvalue[] + // + // In addition to that, exceptions thrown in Java are handled automatically by logging them. + // + // The Call() overload here do not cover all cases that AndroidJavaObject::Call() covers. For + // example, only methods with one argument are supported, and that only for certain types. In + // addition, not all overloads are free of allocations. This however is good enough so that the + // calls triggered by common playback scenarios such as HapticController::Play() and + // HapticPatterns::PlayPreset() don't allocate. + internal static class JNIHelpers + { + // The array for the JNI arguments is created here, so that it doesn't need to be created + // for every call. This saves the allocation in each call. + // The array supports only methods with 0 or 1 argument, but that covers our needs. + static jvalue[] jniArgs = new jvalue[1]; + + // Returns an exception message and stack trace for the given Java exception + static String javaThrowableToString(IntPtr throwable) + { + IntPtr throwableClass = AndroidJNI.FindClass("java/lang/Throwable"); + IntPtr androidUtilLogClass = AndroidJNI.FindClass("android/util/Log"); + try + { + IntPtr toStringMethodId = AndroidJNI.GetMethodID(throwableClass, "toString", "()Ljava/lang/String;"); + IntPtr getStackTraceStringMethodId = AndroidJNI.GetStaticMethodID(androidUtilLogClass, "getStackTraceString", "(Ljava/lang/Throwable;)Ljava/lang/String;"); + string exceptionMessage = AndroidJNI.CallStringMethod(throwable, toStringMethodId, new jvalue[] { }); + jniArgs[0].l = throwable; + string exceptionCallStack = AndroidJNI.CallStaticStringMethod(androidUtilLogClass, getStackTraceStringMethodId, jniArgs); + return exceptionMessage + "\n" + exceptionCallStack; + } + finally + { + if (throwable != IntPtr.Zero) + AndroidJNI.DeleteLocalRef(throwable); + if (throwableClass != IntPtr.Zero) + AndroidJNI.DeleteLocalRef(throwableClass); + if (androidUtilLogClass != IntPtr.Zero) + AndroidJNI.DeleteLocalRef(androidUtilLogClass); + } + } + + public static void Call(AndroidJavaObject obj, IntPtr methodId, jvalue[] jniArgs) + { + if (methodId == IntPtr.Zero) + { + return; + } + + try + { + AndroidJNI.CallVoidMethod(obj.GetRawObject(), methodId, jniArgs); + IntPtr throwable = AndroidJNI.ExceptionOccurred(); + if (throwable != IntPtr.Zero) + { + AndroidJNI.ExceptionClear(); + String exception = javaThrowableToString(throwable); + Debug.LogError(exception); + } + } + catch (Exception ex) + { + Debug.LogException(ex); + } + } + + public static void Call(AndroidJavaObject obj, IntPtr methodId) + { + jniArgs[0].l = System.IntPtr.Zero; + Call(obj, methodId, jniArgs); + } + + public static void Call(AndroidJavaObject obj, IntPtr methodId, float arg) + { + jniArgs[0].f = arg; + Call(obj, methodId, jniArgs); + } + + public static void Call(AndroidJavaObject obj, IntPtr methodId, bool arg) + { + jniArgs[0].z = arg; + Call(obj, methodId, jniArgs); + } + + public static void Call(AndroidJavaObject obj, IntPtr methodId, float[] arg) + { + // The allocations in the next two lines could probably be removed to optimize this + // further. + object[] args = new object[] { arg }; + jvalue[] jniArgs = AndroidJNIHelper.CreateJNIArgArray(args); + try + { + JNIHelpers.Call(obj, methodId, jniArgs); + } + finally + { + AndroidJNIHelper.DeleteJNIArgArray(args, jniArgs); + } + } + + // The method isn't yet optimized to reduce allocations, but unlike the other overloads of + // Call(), it supports non-void return types. + public static ReturnType Call(AndroidJavaObject obj, string methodName) + { + try + { + return obj.Call(methodName); + } + catch (Exception ex) + { + Debug.LogException(ex); + return default(ReturnType); + } + } + + } +} +#endif \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/JNIHelpers.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/JNIHelpers.cs.meta new file mode 100644 index 0000000..9926d84 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/JNIHelpers.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 309cd98b547c14b48b9f1c523a6fdc26 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/LofeltHaptics.cs b/Assets/Feel/NiceVibrations/Scripts/Components/LofeltHaptics.cs new file mode 100644 index 0000000..404e62c --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/LofeltHaptics.cs @@ -0,0 +1,295 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using UnityEngine; +using System; + +#if (UNITY_ANDROID && !UNITY_EDITOR) +using System.Text; +using System.Runtime.InteropServices; +#elif (UNITY_IOS && !UNITY_EDITOR) +using UnityEngine.iOS; +using System.Runtime.InteropServices; +#endif + +namespace Lofelt.NiceVibrations +{ + /// + /// C# wrapper for the Lofelt Studio Android and iOS SDK. + /// + /// + /// You should not use this class directly, use HapticController instead, or the + /// MonoBehaviour classes HapticReceiver and HapticSource. + /// + /// The Lofelt Studio Android and iOS SDK are included in Nice Vibrations as pre-compiled + /// binary plugins. + /// + /// Each method here delegates to either the Android or iOS SDK. The methods should only be + /// called if DeviceMeetsMinimumPlatformRequirements() returns true, otherwise there will + /// be runtime errors. + /// + /// All the methods do nothing when running in the Unity editor. + /// + /// Before calling any other method, Initialize() needs to be called. + /// + /// Errors are printed and swallowed, no exceptions are thrown. On iOS, this happens inside + /// the SDK, on Android this happens with try/catch blocks in this class and in JNIHelpers. + public static class LofeltHaptics + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + static AndroidJavaObject lofeltHaptics; + static AndroidJavaObject hapticPatterns; + static long nativeController; + + // Cache the most commonly used JNI method IDs during initialization. + // Calling a Java method via its method ID is faster and uses less allocations than + // calling a method by string, like e.g. 'lofeltHaptics.Call("play")'. + static IntPtr playMethodId = IntPtr.Zero; + static IntPtr stopMethodId = IntPtr.Zero; + static IntPtr seekMethodId = IntPtr.Zero; + static IntPtr loopMethodId = IntPtr.Zero; + static IntPtr setAmplitudeMultiplicationMethodId = IntPtr.Zero; + static IntPtr playMaximumAmplitudePattern = IntPtr.Zero; + + [DllImport("lofelt_sdk")] + private static extern bool lofeltHapticsLoadDirect(IntPtr controller, [In] byte[] bytes, long size); + +#elif (UNITY_IOS && !UNITY_EDITOR) + // imports of iOS Framework bindings + + [DllImport("__Internal")] + private static extern bool lofeltHapticsDeviceMeetsMinimumRequirementsBinding(); + + [DllImport("__Internal")] + private static extern IntPtr lofeltHapticsInitBinding(); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsLoadBinding(IntPtr controller, [In] byte[] bytes, long size); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsPlayBinding(IntPtr controller); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsStopBinding(IntPtr controller); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsSeekBinding(IntPtr controller, float time); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsSetAmplitudeMultiplicationBinding(IntPtr controller, float factor); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsSetFrequencyShiftBinding(IntPtr controller, float shift); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsLoopBinding(IntPtr controller, bool enable); + + [DllImport("__Internal")] + private static extern float lofeltHapticsGetClipDurationBinding(IntPtr controller); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsReleaseBinding(IntPtr controller); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsSystemHapticsTriggerBinding(int type); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsSystemHapticsInitializeBinding(); + + [DllImport("__Internal")] + private static extern bool lofeltHapticsSystemHapticsReleaseBinding(); + + static IntPtr controller = IntPtr.Zero; + + static bool systemHapticsInitialized = false; +#endif + + /// + /// Initializes the iOS framework or Android library plugin. + /// + /// + /// This needs to be called before calling any other method. + public static void Initialize() + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + try + { + using (var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) + using (var context = unityPlayerClass.GetStatic("currentActivity")) + { + lofeltHaptics = new AndroidJavaObject("com.lofelt.haptics.LofeltHaptics", context); + nativeController = lofeltHaptics.Call("getControllerHandle"); + hapticPatterns = new AndroidJavaObject("com.lofelt.haptics.HapticPatterns", context); + + playMethodId = AndroidJNIHelper.GetMethodID(lofeltHaptics.GetRawClass(), "play", "()V", false); + stopMethodId = AndroidJNIHelper.GetMethodID(lofeltHaptics.GetRawClass(), "stop", "()V", false); + seekMethodId = AndroidJNIHelper.GetMethodID(lofeltHaptics.GetRawClass(), "seek", "(F)V", false); + loopMethodId = AndroidJNIHelper.GetMethodID(lofeltHaptics.GetRawClass(), "loop", "(Z)V", false); + setAmplitudeMultiplicationMethodId = AndroidJNIHelper.GetMethodID(lofeltHaptics.GetRawClass(), "setAmplitudeMultiplication", "(F)V", false); + playMaximumAmplitudePattern = AndroidJNIHelper.GetMethodID(hapticPatterns.GetRawClass(), "playMaximumAmplitudePattern", "([F)V", false); + } + } + catch (Exception ex) + { + Debug.LogException(ex); + } +#elif (UNITY_IOS && !UNITY_EDITOR) + lofeltHapticsSystemHapticsInitializeBinding(); + systemHapticsInitialized = true; + controller = lofeltHapticsInitBinding(); +#endif + } + + /// + /// Releases the resources used by the iOS framework or Android library plugin. + /// + public static void Release() + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + try + { + lofeltHaptics.Dispose(); + lofeltHaptics = null; + + hapticPatterns.Dispose(); + hapticPatterns = null; + } + catch (Exception ex) + { + Debug.LogWarning(ex); + } +#elif (UNITY_IOS && !UNITY_EDITOR) + if(DeviceCapabilities.isVersionSupported) { + lofeltHapticsSystemHapticsReleaseBinding(); + if(controller != IntPtr.Zero) { + lofeltHapticsReleaseBinding(controller); + controller = IntPtr.Zero; + } + } +#endif + } + + public static bool DeviceMeetsMinimumPlatformRequirements() + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + return JNIHelpers.Call(lofeltHaptics, "deviceMeetsMinimumRequirements"); +#elif (UNITY_IOS && !UNITY_EDITOR) + return lofeltHapticsDeviceMeetsMinimumRequirementsBinding(); +#else + return true; +#endif + } + + public static void Load(byte[] data) + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + // For performance reasons, we do *not* call into the Java API with + // `lofeltHaptics.Call("load", data)` here. Instead, we bypass the Java layer and + // call into the native library directly, saving the costly conversion from + // C#'s byte[] to Java's byte[]. + // + // No exception handling needed here, lofeltHapticsLoadDirect() is a native method that + // doesn't throw an exception and instead logs the error. + lofeltHapticsLoadDirect((IntPtr)nativeController, data, data.Length); +#elif (UNITY_IOS && !UNITY_EDITOR) + lofeltHapticsLoadBinding(controller, data, data.Length); +#endif + } + + public static float GetClipDuration() + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + return JNIHelpers.Call(lofeltHaptics, "getClipDuration"); +#elif (UNITY_IOS && !UNITY_EDITOR) + return lofeltHapticsGetClipDurationBinding(controller); +#else + //No haptic clip was loaded with Lofelt SDK, so it returns 0.0f + return 0.0f; +#endif + } + + public static void Play() + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + JNIHelpers.Call(lofeltHaptics, playMethodId); +#elif (UNITY_IOS && !UNITY_EDITOR) + lofeltHapticsPlayBinding(controller); +#endif + } + + public static void PlayMaximumAmplitudePattern(float[] timings) + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + JNIHelpers.Call(hapticPatterns, playMaximumAmplitudePattern, timings); +#endif + } + + public static void Stop() + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + JNIHelpers.Call(lofeltHaptics, stopMethodId); +#elif (UNITY_IOS && !UNITY_EDITOR) + lofeltHapticsStopBinding(controller); +#endif + } + + public static void StopPattern() + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + try + { + hapticPatterns.Call("stopPattern"); + } + catch (Exception ex) + { + Debug.LogWarning(ex); + } +#endif + } + + public static void Seek(float time) + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + JNIHelpers.Call(lofeltHaptics, seekMethodId, time); +#elif (UNITY_IOS && !UNITY_EDITOR) + lofeltHapticsSeekBinding(controller, time); +#endif + } + + public static void SetAmplitudeMultiplication(float factor) + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + JNIHelpers.Call(lofeltHaptics, setAmplitudeMultiplicationMethodId, factor); +#elif (UNITY_IOS && !UNITY_EDITOR) + lofeltHapticsSetAmplitudeMultiplicationBinding(controller, factor); +#endif + } + + public static void SetFrequencyShift(float shift) + { +#if (UNITY_IOS && !UNITY_EDITOR) + lofeltHapticsSetFrequencyShiftBinding(controller, shift); +#endif + } + + public static void Loop(bool enabled) + { +#if (UNITY_ANDROID && !UNITY_EDITOR) + JNIHelpers.Call(lofeltHaptics, loopMethodId, enabled); +#elif (UNITY_IOS && !UNITY_EDITOR) + lofeltHapticsLoopBinding(controller, enabled); +#endif + } + + public static void TriggerPresetHaptics(int type) + { +#if (UNITY_IOS && !UNITY_EDITOR) + if (!systemHapticsInitialized) + { + lofeltHapticsSystemHapticsInitializeBinding(); + systemHapticsInitialized = true; + } + lofeltHapticsSystemHapticsTriggerBinding(type); +#endif + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/LofeltHaptics.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Components/LofeltHaptics.cs.meta new file mode 100644 index 0000000..411bcc5 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/LofeltHaptics.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 921537c8cf6464a24bd55f54ec8ea0d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Resources.meta b/Assets/Feel/NiceVibrations/Scripts/Components/Resources.meta new file mode 100644 index 0000000..20effca --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 16fde46bee7134093b2ebf5df05edebb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-constant-template.txt b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-constant-template.txt new file mode 100644 index 0000000..8b96dc6 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-constant-template.txt @@ -0,0 +1,33 @@ +{ + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "signals": { + "continuous": { + "envelopes": { + "amplitude": [ + { + "time": 0.0, + "amplitude": 1.0 + }, + { + "time": {duration}, + "amplitude": 1.0 + } + ], + "frequency": [ + { + "time": 0, + "frequency": 0.0 + }, + { + "time": {duration}, + "frequency": 0.0 + } + ] + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-constant-template.txt.meta b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-constant-template.txt.meta new file mode 100644 index 0000000..2835833 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-constant-template.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 28f1ec0b82fdf434b8efa0ef0f9a9d37 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-emphasis-template.txt b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-emphasis-template.txt new file mode 100644 index 0000000..ae3b902 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-emphasis-template.txt @@ -0,0 +1,37 @@ +{ + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "signals": { + "continuous": { + "envelopes": { + "amplitude": [ + { + "time": 0.0, + "amplitude": 0.0, + "emphasis": { + "amplitude": {amplitude}, + "frequency": {frequency} + } + }, + { + "time": {duration}, + "amplitude": 0.0 + } + ], + "frequency": [ + { + "time": 0, + "frequency": 1.0 + }, + { + "time": {duration}, + "frequency": 1.0 + } + ] + } + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-emphasis-template.txt.meta b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-emphasis-template.txt.meta new file mode 100644 index 0000000..324ba59 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-emphasis-template.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5f7cb0ced88db4af08a2dd3945067cd7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-pattern-template.txt b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-pattern-template.txt new file mode 100644 index 0000000..79ac208 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-pattern-template.txt @@ -0,0 +1,14 @@ +{ + "version": { + "major": 1, + "minor": 0, + "patch": 0 + }, + "signals": { + "continuous": { + "envelopes": { + "amplitude": [ {amplitude-envelope} ] + } + } + } +} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-pattern-template.txt.meta b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-pattern-template.txt.meta new file mode 100644 index 0000000..8457cfd --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Components/Resources/nv-pattern-template.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: db8a2f512b50d437b8268f17384f58c8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Editor.meta b/Assets/Feel/NiceVibrations/Scripts/Editor.meta new file mode 100644 index 0000000..3633b33 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 290aee7a75d474f7985eaad9d87ac572 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Editor/HapticImporter.cs b/Assets/Feel/NiceVibrations/Scripts/Editor/HapticImporter.cs new file mode 100644 index 0000000..51ba0c1 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Editor/HapticImporter.cs @@ -0,0 +1,119 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.IO; +using System.Runtime.InteropServices; +using System; +using UnityEngine; +using System.Text; + +#if UNITY_2020_2_OR_NEWER +using UnityEditor.AssetImporters; +#elif UNITY_2019_4_OR_NEWER +using UnityEditor.Experimental.AssetImporters; +#endif + +namespace Lofelt.NiceVibrations +{ + [ScriptedImporter(version: 3, ext: "haptic", AllowCaching = true)] + /// + /// Provides an importer for the HapticClip component. + /// + /// + /// The importer takes a .haptic file and converts it into a HapticClip. + public class HapticImporter : ScriptedImporter + { +#if !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + [DllImport("nice_vibrations_editor_plugin")] + private static extern IntPtr nv_plugin_convert_haptic_to_gamepad_rumble([In] byte[] bytes, long size); + + [DllImport("nice_vibrations_editor_plugin")] + private static extern void nv_plugin_destroy(IntPtr gamepadRumble); + + [DllImport("nice_vibrations_editor_plugin")] + private static extern UIntPtr nv_plugin_get_length(IntPtr gamepadRumble); + + [DllImport("nice_vibrations_editor_plugin")] + private static extern void nv_plugin_get_durations(IntPtr gamepadRumble, [Out] int[] durations); + + [DllImport("nice_vibrations_editor_plugin")] + private static extern void nv_plugin_get_low_frequency_motor_speeds(IntPtr gamepadRumble, [Out] float[] lowFrequencies); + + [DllImport("nice_vibrations_editor_plugin")] + private static extern void nv_plugin_get_high_frequency_motor_speeds(IntPtr gamepadRumble, [Out] float[] highFrequencies); + + // We can not use "[return: MarshalAs(UnmanagedType.LPUTF8Str)]" here, and have to use + // IntPtr for the return type instead. Otherwise the C# runtime tries to free the returned + // string, which is invalid as the native plugin keeps ownership of the string. + // We use PtrToStringUTF8() to manually convert the IntPtr to a string instead. + [DllImport("nice_vibrations_editor_plugin")] + private static extern IntPtr nv_plugin_get_last_error(); + + [DllImport("nice_vibrations_editor_plugin")] + private static extern UIntPtr nv_plugin_get_last_error_length(); + + // Alternative to Marshal.PtrToStringUTF8() which was introduced in .NET 5 and isn't yet + // supported by Unity + private string PtrToStringUTF8(IntPtr ptr, int length) + { + byte[] bytes = new byte[length]; + Marshal.Copy(ptr, bytes, 0, length); + return Encoding.UTF8.GetString(bytes, 0, length); + } +#endif + + public override void OnImportAsset(AssetImportContext ctx) + { + // Load .haptic clip from file + var fileName = System.IO.Path.GetFileNameWithoutExtension(ctx.assetPath); + var jsonBytes = File.ReadAllBytes(ctx.assetPath); + var hapticClip = HapticClip.CreateInstance(); + hapticClip.json = jsonBytes; + +#if !NICE_VIBRATIONS_DISABLE_GAMEPAD_SUPPORT + // Convert JSON to a GamepadRumble struct. The conversion algorithm is inside the native + // library nice_vibrations_editor_plugin. That plugin is only used in the Unity editor, and + // not at runtime. + GamepadRumble rumble = default; + IntPtr nativeRumble = nv_plugin_convert_haptic_to_gamepad_rumble(jsonBytes, jsonBytes.Length); + if (nativeRumble != IntPtr.Zero) + { + try + { + uint length = (uint)nv_plugin_get_length(nativeRumble); + rumble.durationsMs = new int[length]; + rumble.lowFrequencyMotorSpeeds = new float[length]; + rumble.highFrequencyMotorSpeeds = new float[length]; + + nv_plugin_get_durations(nativeRumble, rumble.durationsMs); + nv_plugin_get_low_frequency_motor_speeds(nativeRumble, rumble.lowFrequencyMotorSpeeds); + nv_plugin_get_high_frequency_motor_speeds(nativeRumble, rumble.highFrequencyMotorSpeeds); + + int totalDurationMs = 0; + foreach (int duration in rumble.durationsMs) + { + totalDurationMs += duration; + } + rumble.totalDurationMs = totalDurationMs; + } + finally + { + nv_plugin_destroy(nativeRumble); + } + } + else + { + var lastErrorPtr = nv_plugin_get_last_error(); + var lastErrorLength = (int)nv_plugin_get_last_error_length(); + var lastError = PtrToStringUTF8(lastErrorPtr, lastErrorLength); + Debug.LogWarning($"Failed to convert haptic clip {ctx.assetPath} to gamepad rumble: {lastError}"); + } + + hapticClip.gamepadRumble = rumble; +#endif + + // Use hapticClip as the imported asset + ctx.AddObjectToAsset("com.lofelt.HapticClip", hapticClip); + ctx.SetMainObject(hapticClip); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Editor/HapticImporter.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Editor/HapticImporter.cs.meta new file mode 100644 index 0000000..e96189f --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Editor/HapticImporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc84fb4fa9e67485a972c887d976d004 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Editor/HapticSourceInspector.cs b/Assets/Feel/NiceVibrations/Scripts/Editor/HapticSourceInspector.cs new file mode 100644 index 0000000..342face --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Editor/HapticSourceInspector.cs @@ -0,0 +1,155 @@ +// Copyright (c) Meta Platforms, Inc. and affiliates. + +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using System.IO; + +namespace Lofelt.NiceVibrations +{ + [CustomEditor(typeof(HapticSource))] + [CanEditMultipleObjects] + /// + /// Provides an inspector for the HapticSource component + /// + /// + /// The inspector lets you link a HapticSource to a HapticClip. + public class HapticSourceInspector : Editor + { + string hapticsDirectory; + + SerializedProperty hapticClip; + SerializedProperty priority; + SerializedProperty level; + SerializedProperty frequencyShift; + SerializedProperty loop; + SerializedProperty fallbackPreset; + + public static GUIContent hapticClipLabel = EditorGUIUtility.TrTextContent("Haptic Clip", "The HapticClip asset played by the HapticSource."); + public static GUIContent fallbackPresetLabel = EditorGUIUtility.TrTextContent("Haptic Preset fallback", "Set the haptic preset to play in case the device doesn't support playback of haptic clips"); + public static GUIContent loopLabel = EditorGUIUtility.TrTextContent("Loop", "Set the haptic source to loop playback of the haptic clip"); + + void OnEnable() + { + hapticClip = serializedObject.FindProperty("clip"); + priority = serializedObject.FindProperty("priority"); + level = serializedObject.FindProperty("_level"); + frequencyShift = serializedObject.FindProperty("_frequencyShift"); + fallbackPreset = serializedObject.FindProperty("_fallbackPreset"); + loop = serializedObject.FindProperty("_loop"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(hapticClip, hapticClipLabel); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.Space(); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(fallbackPreset, fallbackPresetLabel); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.Space(); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(loop, loopLabel); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.Space(); + + CreatePrioritySlider(); + CreateLevelSlider(); + CreateFrequencyShiftSlider(); + + serializedObject.ApplyModifiedProperties(); + } + + /// Helper function to create a priority slider for haptic source with High and Max text labels. + void CreatePrioritySlider() + { + Rect position = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + EditorGUI.IntSlider(position, priority, 0, 256); + + // Move to next line + position.y += EditorGUIUtility.singleLineHeight; + + // Subtract the label + position.x += EditorGUIUtility.labelWidth; + position.width -= EditorGUIUtility.labelWidth; + + // Subtract the text field width thats drawn with slider + position.width -= EditorGUIUtility.fieldWidth; + + GUIStyle style = GUI.skin.label; + TextAnchor defaultAlignment = GUI.skin.label.alignment; + style.alignment = TextAnchor.UpperLeft; EditorGUI.LabelField(position, "High", style); + style.alignment = TextAnchor.UpperRight; EditorGUI.LabelField(position, "Low", style); + GUI.skin.label.alignment = defaultAlignment; + + // Allow space for the High/Low labels + EditorGUILayout.Space(); + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + + /// Helper function to create a level slider for haptic + /// source with labels. + void CreateLevelSlider() + { + Rect position = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + EditorGUI.Slider(position, level, 0.0f, 5.0f); + + // Move to next line + position.y += EditorGUIUtility.singleLineHeight; + + // Subtract the label + position.x += EditorGUIUtility.labelWidth; + position.width -= EditorGUIUtility.labelWidth; + + // Subtract the text field width thats drawn with slider + position.width -= EditorGUIUtility.fieldWidth; + + GUIStyle style = GUI.skin.label; + TextAnchor defaultAlignment = GUI.skin.label.alignment; + style.alignment = TextAnchor.UpperLeft; EditorGUI.LabelField(position, "0.0", style); + style.alignment = TextAnchor.UpperRight; EditorGUI.LabelField(position, "5.0", style); + GUI.skin.label.alignment = defaultAlignment; + + // Allow space for the labels + EditorGUILayout.Space(); + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + + /// Helper function to create a frequency shift slider for haptic + /// source with labels. + void CreateFrequencyShiftSlider() + { + Rect position = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + EditorGUI.Slider(position, frequencyShift, -1.0f, 1.0f); + + // Move to next line + position.y += EditorGUIUtility.singleLineHeight; + + // Subtract the label + position.x += EditorGUIUtility.labelWidth; + position.width -= EditorGUIUtility.labelWidth; + + // Subtract the text field width thats drawn with slider + position.width -= EditorGUIUtility.fieldWidth; + + GUIStyle style = GUI.skin.label; + TextAnchor defaultAlignment = GUI.skin.label.alignment; + style.alignment = TextAnchor.UpperLeft; EditorGUI.LabelField(position, "-1.0", style); + style.alignment = TextAnchor.UpperRight; EditorGUI.LabelField(position, "1.0", style); + GUI.skin.label.alignment = defaultAlignment; + + // Allow space for the labels + EditorGUILayout.Space(); + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + } +} diff --git a/Assets/Feel/NiceVibrations/Scripts/Editor/HapticSourceInspector.cs.meta b/Assets/Feel/NiceVibrations/Scripts/Editor/HapticSourceInspector.cs.meta new file mode 100644 index 0000000..4b89d54 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Editor/HapticSourceInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90a030b5ab0574cd9880e136f5e0261c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/Scripts/Editor/Lofelt.NiceVibrations.Editor.asmdef b/Assets/Feel/NiceVibrations/Scripts/Editor/Lofelt.NiceVibrations.Editor.asmdef new file mode 100644 index 0000000..1209cee --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Editor/Lofelt.NiceVibrations.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "Lofelt.NiceVibrations.Editor", + "references": [ + "GUID:57a0b9bc628ab4740af4b6f1f0b2e134" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Feel/NiceVibrations/Scripts/Editor/Lofelt.NiceVibrations.Editor.asmdef.meta b/Assets/Feel/NiceVibrations/Scripts/Editor/Lofelt.NiceVibrations.Editor.asmdef.meta new file mode 100644 index 0000000..eb588a4 --- /dev/null +++ b/Assets/Feel/NiceVibrations/Scripts/Editor/Lofelt.NiceVibrations.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 67bc5fafbf62b48858241ce814d3d489 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/NiceVibrations/readme.txt b/Assets/Feel/NiceVibrations/readme.txt new file mode 100644 index 0000000..24b893c --- /dev/null +++ b/Assets/Feel/NiceVibrations/readme.txt @@ -0,0 +1,16 @@ +Nice Vibrations | Haptic Feedback for Mobile +v4.1.2, using Lofelt Studio SDK v1.3.4 + +This Asset Package includes everything you need to begin adding advanced haptic feedback to your mobile applications created with Unity. It consists of a few important parts: + +- The Nice Vibrations plug-in for Unity: Provides haptic playback functionality, as a code-only API for C# scripts and as a MonoBehaviour API for the Unity editor. + +- Haptic Samples: To help you get started fast without needing to design any haptics first, the Asset includes a growing collection of free-to-use haptic clips with associated audio files covering use cases such as Application UX and game effects. You can drop these into your app and start experiencing haptics on your mobile device immediately. + +- Demo: This is a project you can build for either iOS (iPhone) or Android which showcases the current functionality of this package. + +- Older Versions: Older versions of Nice Vibrations are included as well, for reference and as a porting aid. You can run the current version side-by-side with the older 3.9 version in case you haven't ported everything to the new API yet. + +Full documentation can be found at https://github.com/Lofelt/NiceVibrations/wiki. + +Nice Vibrations includes the Lofelt Studio SDK, which uses third-party libraries. See 3RD-PARTY-LICENSES.md for a list of libraries and their licenses. diff --git a/Assets/Feel/NiceVibrations/readme.txt.meta b/Assets/Feel/NiceVibrations/readme.txt.meta new file mode 100644 index 0000000..e37fc29 --- /dev/null +++ b/Assets/Feel/NiceVibrations/readme.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f629a42fca5db4f09809be83dcae7217 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/license.txt b/Assets/Feel/license.txt new file mode 100644 index 0000000..a6c99ce --- /dev/null +++ b/Assets/Feel/license.txt @@ -0,0 +1,5 @@ +You can't redistribute the uncompiled code or any of the contents of the asset in their current state. You can of course build these into a game and distribute said game. + +The names MMFeedbacks, Nice Vibrations, More Mountains are © More Mountains. + +Apart from that, feel free to use all code and visual assets included in the asset in your games. \ No newline at end of file diff --git a/Assets/Feel/license.txt.meta b/Assets/Feel/license.txt.meta new file mode 100644 index 0000000..0d4286c --- /dev/null +++ b/Assets/Feel/license.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c7d8c1256647a454a80d335b52c41f65 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Feel/readme.txt b/Assets/Feel/readme.txt new file mode 100644 index 0000000..a208231 --- /dev/null +++ b/Assets/Feel/readme.txt @@ -0,0 +1,50 @@ +A more user friendly doc is available at https://feel-docs.moremountains.com/ +Find out more about the asset at https://feel.moremountains.com/ + +Feel v4.3 + +## WHAT'S IN THE ASSET ? +------------------------- + +The Feel asset contains the following folders : +- FeelDemos : a collection of demo scenes, all neatly arranged in their dedicated folders, showcasing how you can use Feel to improve game feel in various contexts +- FeelDemosHDRP : demos tailored for HDRP +- FeelDemosURP : demos tailored for URP +- MMFeedbacks : all you need to add custom feedbacks with only a few clicks, including MMFeedbacksForThirdParty : more feedbacks, but these have dependencies (PostProcessing, Cinemachine, Nice Vibrations...). +- MMTools : a set of tools and helpers +- NiceVibrations : the NiceVibrations package, exactly the same as https://assetstore.unity.com/packages/tools/integration/nice-vibrations-by-lofelt-hd-haptic-feedback-for-mobile-and-game-197444?aid=1011lKhG&utm_source=aff, offered as a gift + + +## HOW DO I ADD THIS TO MY GAME ? +------------------------------ + +You should probably go check out http://feel-docs.moremountains.com/how-to-install.html, there'll be more details, but basically, you can follow these simple steps : + +To add Feel to your project, simply follow the simple steps below : +1. using 2019.4.35f (or a recent - and stable - version of Unity of your choice), create a new project, pick the “3D” template +2. via the asset store panel, go to the Feel page, click the download button, then the import button +3. wait until a “import Unity package” popup appears, make sure everything is checked (it should be by default), click “import” +4. open Unity’s Package Manager, install the latest version of the Post Processing package +5. in the package manager, install the latest version of the Cinemachine package +6. in the package manager, install the latest version of the TextMesh Pro package +7. in the package manager, install the latest version of the Animation 2D package (this is only useful for the Letters demo) +8. open the MMFeedbacksDemo scene (or any other demo), press play, enjoy + +Note that steps 4, 5, 6 and 7 are optional, but if you want to get access to post processing, TextMesh Pro and Cinemachine feedbacks, you’ll need these. +Also note that most of the Feel demos make use of as many feedbacks as needed, and will feature most of these dependencies. +You’ll get errors in these if you haven’t installed the corresponding dependencies. You can check the MMFeedbacksMinimalDemo scene if you’re not interested in any of the Unity packages feedbacks. + +## IS THERE DOCUMENTATION SOMEWHERE ? +------------------------------------- + +There is! +There's a functional documentation at https://feel-docs.moremountains.com/ +And a complete API documentation at https://feel-docs.moremountains.com/API/ + +## I STILL HAVE A QUESTION! +--------------------------- + +If something's still not clear, you can always drop me a line using the form at http://feel.moremountains.com/. +It's entirely possible that I forgot to document something, but please make sure you've read the documentation before filling this form. +You can also please check the FAQ before sending me an email. Chances are, your question's answered right there. If it's not, then go ahead! +Also, if you're asking for support, please send me your invoice number, along with your Unity version and the version of Feel you're using, so I can help you best. diff --git a/Assets/Feel/readme.txt.meta b/Assets/Feel/readme.txt.meta new file mode 100644 index 0000000..5c74542 --- /dev/null +++ b/Assets/Feel/readme.txt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a6aa03a6a85f38c43a3bd39d28ee09d1 +timeCreated: 1515124842 +licenseType: Store +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Opsive.meta b/Assets/Opsive.meta new file mode 100644 index 0000000..39f2c98 --- /dev/null +++ b/Assets/Opsive.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 906a5c1b0eee29a46be570e0a32ceab3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Opsive/BehaviorDesigner.meta b/Assets/Opsive/BehaviorDesigner.meta new file mode 100644 index 0000000..ce450bd --- /dev/null +++ b/Assets/Opsive/BehaviorDesigner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66a758f582e929e4f823ee30f4d9c235 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Opsive/BehaviorDesigner/Editor.meta b/Assets/Opsive/BehaviorDesigner/Editor.meta new file mode 100644 index 0000000..ff18e80 --- /dev/null +++ b/Assets/Opsive/BehaviorDesigner/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: becdd92c3e5b28042a0eac61b8f2dffa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Opsive/BehaviorDesigner/Editor/BehaviorDesignerSettings.asset b/Assets/Opsive/BehaviorDesigner/Editor/BehaviorDesignerSettings.asset new file mode 100644 index 0000000..8191b58 --- /dev/null +++ b/Assets/Opsive/BehaviorDesigner/Editor/BehaviorDesignerSettings.asset @@ -0,0 +1,25 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1458000753, guid: c42964479d4f62540867ad0acdb1ef66, type: 3} + m_Name: BehaviorDesignerSettings + m_EditorClassIdentifier: + m_ShowHierarchyIcon: 1 + m_CheckForErrors: 1 + m_AutoSavePrefab: 0 + m_MouseWheelScrollsGraph: 0 + m_GridLineSpacing: 10 + m_GridLineTransparency: 1 + m_ShowNodeIcon: 1 + m_ShowNodeDescription: 1 + m_SnapToGrid: 1 + m_ShowNodeDebugInfo: 0 + m_DefaultGizmosColor: {r: 0, g: 1, b: 0, a: 0.6} diff --git a/Assets/Opsive/BehaviorDesigner/Editor/BehaviorDesignerSettings.asset.meta b/Assets/Opsive/BehaviorDesigner/Editor/BehaviorDesignerSettings.asset.meta new file mode 100644 index 0000000..cdc2d5c --- /dev/null +++ b/Assets/Opsive/BehaviorDesigner/Editor/BehaviorDesignerSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 34eeed431fd76184abebc2b49be24621 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Opsive/ImportStatus.asset b/Assets/Opsive/ImportStatus.asset new file mode 100644 index 0000000..87962bb --- /dev/null +++ b/Assets/Opsive/ImportStatus.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f9a6fcaab71877649a4598d315010679, type: 3} + m_Name: ImportStatus + m_EditorClassIdentifier: + m_CharacterProjectSettingsShown: 0 + m_BehaviorWindowShown: 1 diff --git a/Assets/Opsive/ImportStatus.asset.meta b/Assets/Opsive/ImportStatus.asset.meta new file mode 100644 index 0000000..a9d53bb --- /dev/null +++ b/Assets/Opsive/ImportStatus.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 08caa3b1fa0051646a1297d49e6431ac +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d.meta b/Assets/PathBerserker2d.meta new file mode 100644 index 0000000..2ee1c18 --- /dev/null +++ b/Assets/PathBerserker2d.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 79d9b19d4c18d0240920de7d6b598473 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Documentation.meta b/Assets/PathBerserker2d/Documentation.meta new file mode 100644 index 0000000..3305767 --- /dev/null +++ b/Assets/PathBerserker2d/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0383e08b93337e41bd2254c4304147f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Documentation/Documentation.zip b/Assets/PathBerserker2d/Documentation/Documentation.zip new file mode 100644 index 0000000..1d0bd28 Binary files /dev/null and b/Assets/PathBerserker2d/Documentation/Documentation.zip differ diff --git a/Assets/PathBerserker2d/Documentation/Documentation.zip.meta b/Assets/PathBerserker2d/Documentation/Documentation.zip.meta new file mode 100644 index 0000000..05e1b8e --- /dev/null +++ b/Assets/PathBerserker2d/Documentation/Documentation.zip.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 21035a61c7bbb0c43adb502350355869 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Documentation/README.txt b/Assets/PathBerserker2d/Documentation/README.txt new file mode 100644 index 0000000..7d81d40 --- /dev/null +++ b/Assets/PathBerserker2d/Documentation/README.txt @@ -0,0 +1,15 @@ +Pathberserker2d + +Thanks for purchasing. To get started, I suggest trying out the various demo scenes. + +The documentation is shipped as a zip file in the same folder. +Alternatively you can read the most up to date version of the documentation online here: +https://oribow.github.io/PathBerserker2dDemo/Documentation/ + +The documentation also includes guides on a variety of topics and explains the core concepts of this asset. + +As an extra treat, this Asset also comes with its complete source code, also as zip in this folder. +Setting your project up to use the source code instead of the DLL's requires some knowledge about C# projects. +I recommend using the source code primarily as a reference guide. + +Happy path-finding! \ No newline at end of file diff --git a/Assets/PathBerserker2d/Documentation/README.txt.meta b/Assets/PathBerserker2d/Documentation/README.txt.meta new file mode 100644 index 0000000..602979b --- /dev/null +++ b/Assets/PathBerserker2d/Documentation/README.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1605f3fdba2679842a2f72c81ec408ac +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Icons.meta b/Assets/PathBerserker2d/Icons.meta new file mode 100644 index 0000000..e06727a --- /dev/null +++ b/Assets/PathBerserker2d/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 446c632a2de6b8c4c87487c4533abd7f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Icons/follow_path.png b/Assets/PathBerserker2d/Icons/follow_path.png new file mode 100644 index 0000000..f69bb0d Binary files /dev/null and b/Assets/PathBerserker2d/Icons/follow_path.png differ diff --git a/Assets/PathBerserker2d/Icons/follow_path.png.meta b/Assets/PathBerserker2d/Icons/follow_path.png.meta new file mode 100644 index 0000000..a82619e --- /dev/null +++ b/Assets/PathBerserker2d/Icons/follow_path.png.meta @@ -0,0 +1,115 @@ +fileFormatVersion: 2 +guid: 1076c1b4e7774d14cb5f02e81e131660 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Icons/link_icon.png b/Assets/PathBerserker2d/Icons/link_icon.png new file mode 100644 index 0000000..ce2075b Binary files /dev/null and b/Assets/PathBerserker2d/Icons/link_icon.png differ diff --git a/Assets/PathBerserker2d/Icons/link_icon.png.meta b/Assets/PathBerserker2d/Icons/link_icon.png.meta new file mode 100644 index 0000000..9a7c29c --- /dev/null +++ b/Assets/PathBerserker2d/Icons/link_icon.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 123ffa319522f7b40b36a77973995e35 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Icons/lost_path.png b/Assets/PathBerserker2d/Icons/lost_path.png new file mode 100644 index 0000000..b3dd207 Binary files /dev/null and b/Assets/PathBerserker2d/Icons/lost_path.png differ diff --git a/Assets/PathBerserker2d/Icons/lost_path.png.meta b/Assets/PathBerserker2d/Icons/lost_path.png.meta new file mode 100644 index 0000000..54c20e8 --- /dev/null +++ b/Assets/PathBerserker2d/Icons/lost_path.png.meta @@ -0,0 +1,115 @@ +fileFormatVersion: 2 +guid: 410455380032bfb45b40e7c043a62b4f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Icons/planning.png b/Assets/PathBerserker2d/Icons/planning.png new file mode 100644 index 0000000..e2bee00 Binary files /dev/null and b/Assets/PathBerserker2d/Icons/planning.png differ diff --git a/Assets/PathBerserker2d/Icons/planning.png.meta b/Assets/PathBerserker2d/Icons/planning.png.meta new file mode 100644 index 0000000..d258096 --- /dev/null +++ b/Assets/PathBerserker2d/Icons/planning.png.meta @@ -0,0 +1,115 @@ +fileFormatVersion: 2 +guid: f70aa7e3ba7990549bed699b10912202 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Icons/portal.png b/Assets/PathBerserker2d/Icons/portal.png new file mode 100644 index 0000000..0d40602 Binary files /dev/null and b/Assets/PathBerserker2d/Icons/portal.png differ diff --git a/Assets/PathBerserker2d/Icons/portal.png.meta b/Assets/PathBerserker2d/Icons/portal.png.meta new file mode 100644 index 0000000..0135397 --- /dev/null +++ b/Assets/PathBerserker2d/Icons/portal.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 550c17ae955373049aee7dff67a18fa9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Resources.meta b/Assets/PathBerserker2d/Resources.meta new file mode 100644 index 0000000..ea79f1f --- /dev/null +++ b/Assets/PathBerserker2d/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f88aed787b8decc4086d9222249beace +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Resources/PathBerserker2dSettings.asset b/Assets/PathBerserker2d/Resources/PathBerserker2dSettings.asset new file mode 100644 index 0000000..27e23e7 --- /dev/null +++ b/Assets/PathBerserker2d/Resources/PathBerserker2dSettings.asset @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 393b1ec75130eb047bc70f7635277936, type: 3} + m_Name: PathBerserker2dSettings + m_EditorClassIdentifier: + pointMappingDistance: 0.2 + pathfinderThreadCount: 4 + initiateUpdateInterval: 0.1 + closestToSegmentMaxDistance: 20 + navLinkTypeNames: + - corner + - jump + - fall + - teleport + - climb + - elevator + navLinkTypeColors: + - {r: 0, g: 0, b: 0, a: 1} + - {r: 1, g: 1, b: 1, a: 1} + - {r: 0, g: 0.51575685, b: 1, a: 1} + - {r: 0, g: 1, b: 0, a: 1} + - {r: 0, g: 0.03320258, b: 0.49803922, a: 1} + - {r: 1, g: 0, b: 1, a: 1} + navTags: + - default + - water + - lava + - grass + - concrete + - dirt + navTagColors: + - {r: 0, g: 0, b: 0, a: 0} + - {r: 0, g: 0.5736413, b: 1, a: 1} + - {r: 1, g: 0.19613811, b: 0, a: 1} + - {r: 0.03921567, g: 0.99607843, b: 0.124506705, a: 1} + - {r: 0.4528302, g: 0.4528302, b: 0.4528302, a: 1} + - {r: 0.4339623, g: 0.2691755, b: 0, a: 1} + drawUnselectedLinks: 1 + drawUnselectedSurfaces: 1 + drawUnselectedSubstractors: 1 + drawUnselectedAreaMarkers: 1 + drawGraphWhilePlaying: 1 + navSurfaceLineWidth: 0.04 + navAreaMarkerLineWidth: 0.2 + usePolygonCollider2dPathsForBaking: 0 diff --git a/Assets/PathBerserker2d/Resources/PathBerserker2dSettings.asset.meta b/Assets/PathBerserker2d/Resources/PathBerserker2dSettings.asset.meta new file mode 100644 index 0000000..9b9b334 --- /dev/null +++ b/Assets/PathBerserker2d/Resources/PathBerserker2dSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 25dcc2654112bc54090ee2accbac7499 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts.meta b/Assets/PathBerserker2d/Scripts.meta new file mode 100644 index 0000000..b0b5010 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80a179a567cbfc148b23c441354e6057 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor.meta new file mode 100644 index 0000000..2d500d7 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd800ca490ca3504a91a04cbbe34fe93 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers.meta new file mode 100644 index 0000000..51af481 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91a2221b1f964c946af33b7bb66b948d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers/ReadOnlyAttributeDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers/ReadOnlyAttributeDrawer.cs new file mode 100644 index 0000000..e8d6392 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers/ReadOnlyAttributeDrawer.cs @@ -0,0 +1,22 @@ +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + [CustomPropertyDrawer(typeof(ReadOnlyAttribute))] + internal class ReadOnlyAttributeDrawer : PropertyDrawer + { + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, label, true); + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + bool oldValue = GUI.enabled; + GUI.enabled = false; + EditorGUI.PropertyField(position, property, label, true); + GUI.enabled = oldValue; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers/ReadOnlyAttributeDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers/ReadOnlyAttributeDrawer.cs.meta new file mode 100644 index 0000000..0d25148 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/AttributeDrawers/ReadOnlyAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bfac06ae39b4da041b0233fbe194c0a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI.meta new file mode 100644 index 0000000..cc235d3 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1df174b62e1d3684f9fc16ede26d1866 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/IconHandle2D.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/IconHandle2D.cs new file mode 100644 index 0000000..291810d --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/IconHandle2D.cs @@ -0,0 +1,51 @@ +using UnityEngine; +using UnityEditor; + +namespace PathBerserker2d +{ + internal class IconHandle2D + { + private static readonly int controlHashIcon = "IconHandle2D_icon".GetHashCode(); + + public static void DrawHandle(Vector3 position, Texture icon, float size, Object objectToSelect) + { + int iconId = EditorGUIUtility.GetControlID(controlHashIcon, FocusType.Passive); + + var e = Event.current; + switch (e.type) + { + case EventType.MouseDown: + if (e.button == 0 && HandleUtility.nearestControl == iconId) + { + Selection.activeObject = objectToSelect; + e.Use(); + } + + break; + case EventType.Layout: + float distance = HandleUtility.DistanceToRectangle(position, Camera.current.transform.rotation, size); + HandleUtility.AddControl(iconId, distance); + break; + case EventType.Repaint: + Vector3 up = Camera.current.transform.up * size; + float aspectRatio = (float)icon.width / (float)icon.height; + Vector3 right = Camera.current.transform.right * size * aspectRatio; + SharedMaterials.UnlitTexture.SetTexture("_MainTex", icon); + SharedMaterials.UnlitTexture.SetPass(0); + GL.Begin(GL.QUADS); + { + GL.TexCoord2(1, 1); + GL.Vertex(position + right + up); + GL.TexCoord2(1, 0); + GL.Vertex(position + right - up); + GL.TexCoord2(0, 0); + GL.Vertex(position - right - up); + GL.TexCoord2(0, 1); + GL.Vertex(position - right + up); + } + GL.End(); + break; + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/IconHandle2D.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/IconHandle2D.cs.meta new file mode 100644 index 0000000..e466507 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/IconHandle2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99480f75d87fac34c9ad4d0125d7a2e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MathUtilityDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MathUtilityDrawer.cs new file mode 100644 index 0000000..cc3b33f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MathUtilityDrawer.cs @@ -0,0 +1,41 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Text; + +namespace PathBerserker2d +{ + class MathUtilityDrawer : EditorWindow + { + Texture2D texture; + string[] texts = new string[] { + "WW91IGZvdW5kIGFuIGVhc3RlciBlZ2chIEdvb2Qgam9iIQ==", + "KElmIHlvdSBkaWRuJ3QganVzdCBsb29rIHRoaXMgdXAgaW4gdGhlIHNvdXJjZSBjb2RlKQ==", + "VGhlIGltYWdlIHNob3dzIHdoZXJlIFBhdGhCZXJzZXJrZXIyZCBnb3QgaXRzIG5hbWUgZnJvbS4=", + "SGFkIHRvIG9iZnVzY2F0ZSB0aGlzIGVhc3RlciBlZ2cgYSBiaXQgc2luY2UgdGhlIHJlbGVhc2Ugb2YgdGhlIHNvdXJjZSBjb2RlLiBTb3JyeSA7KQ==", + }; + + private void OnEnable() + { + #region data + byte[] imageBytes = System.Convert.FromBase64String("/9j/4AAQSkZJRgABAQEAkACQAAD/4QBmRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAAExAAIAAAAQAAAATgAAAAAAAACQAAAAAQAAAJAAAAABcGFpbnQubmV0IDQuMS42AP/bAEMABwUGBgYFBwYGBggIBwkLEgwLCgoLFxARDRIbFxwcGhcaGR0hKiQdHyggGRolMiUoLC0vMC8dIzQ4NC43Ki4vLv/bAEMBCAgICwoLFgwMFi4eGh4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLv/AABEIAjgBkAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APHgxZnJ5LckmvQvDse+1X/ZyP5VwFihmkEY/iPP0r0vw3HttHYjgtxXy2ZytCx+i5TFxjKZR8VHyY7QrwxnXFdhagSQhT2yK4TxNdLca9p1knIikDP9SR/QfrXd2Mcsbv5ikKwBGa8vErlw0b77nVKfNKT7W/r8TN1C0Fsysmdrcc9jVIAZ/Gug1SHzbY7eqnIrnmyrFT1BrCjPmjqd2Gnzw13Kmt263Fi+QCyDcP6155f7otpH0r0m4/eROmfvKRXnuvRmIupH3SK9rLpa8rODNqX7nnJdFvBFdrk/LKjRn/gQx/PFW7S8MVwkik46N9K5y2fIHODWpbOCMDsa9CtTXU8TDVWmmj0XyzLCG7EA1zF7ALXUiFHysMrXR6Exn0yEnqBt/KqHiOJUhimAwVYgn/P0rxKEnCq4M93G2qUPaLdamjoMiz6VJbvztO0j2pmnN9m0+eF+fLcgj2rO8L3SG5nhB+8ob8v/ANdJqF8YdQubfZgSANTlTftJQXqYYeS9nCo/T+vuK2lTbtQmsXOFmVo1z69VrWsN72y+Z/u4P5Vz1yNl3FdxnacjB9GFdPbuHMjgYVsSKPQHt+ea0xG3MjfBe7JxZxF8PLeVR95JCv8An8qt+EHD6o6Fvm8s8n61W19vLvbpezOGH+fxp/g+MyX8rD7wjyPzr0Ja4dt9jx4aY2MV3O7sdsN65V8nkdKNalU27HHIAP61VtJ1a+kiPEqjJB7j1pNYbbbSt/sjr9a8mML1Vc9ypNWdux0HhqFpbKB1yeOcdua6/wAs7BjsK5zwPCf7LimZSNw49DzXUFtpIB61z1V+9aPCxVZzlbsbGhWBljZzjg966mONY0AUAfSs/QI1jsRgHJPJPetKvrsDRjTpLufJ4uq51GjK8TamNG8P6hqZxm3hZlB7t0UfmRXj3wHiabxDqt45LMlsAWPcs2f/AGU11/xvvfs3hGO1DYa7uFTHqBlj/IVj/AG322WtXWPvyxxg/wC6Cf8A2arm714x7HsYWmqWUVqvWTS/Ff8ABPX6WkpRXUfOBThTaWgB4rw3496h52raXpKk4ghaZwPVzgfoh/OvcBXzR8RLs33jvWZicrAfKHttUL/OubFytTt3PoOGaPtMcpP7Kb/T9T2T4PZHgDTgf70n/oZruq4f4ROjeA9OCsCVLhgD0O4121b0/gR5OOd8TUf95/mOpabS1ZyjqKbRTAdS00UuaAFpabS0wFFLSCloAKKKKAEopaSgBDTTTqbQB8YadZrboCeXbqa231xdMsNgIaQ/cX0rmp9WQKRbqS3qegrPSO6vHLgM57segr5t4b2r5qux+lSxlOlD2WHV2b/hSOTUfEUdxOd2G3sT616RrEzrcwJGxU4zwfWuQ8Hxx2U0UbFcnJLe9dJqUoN+rj5guBXl4589fTZI6MNQcGlLezb9WbS4Zgp5B4Nc5qCeVezIOgbit/SriK5kcjgqOQah1G2iDTXBUNuH5cV5dKXs5uLHRqeyquMjmm71xHiFDKbhx/ewK62/l8mMn+I9K5TV5FESRZ+Zjk17+BTUrovNpRVBpmDaWzsD7Gtqxt9vBptnH0yMVooACAOtehVqOWh8zRioWOo8OECwZeyuf5CoPEzK1hgH/lp/Q1Noi7LAj+85NZPiSZNkcee5c/y/xrxqcebEadz6GSthLvsUPC/y6qRu6oeKk1xidaLdwi4FUPD7OurFlbjYat6m4/tdtwycKB+VehKP7+/kebTlbCL/ABFtLUzwSBeSAHX6itWwlKiFSPlIKg/Xn+eaZpG0SAE9QcAU8KY2uYRjcp3Rj9a5KkuZuLPTpqyU0YHiu3Iug+Pvpn8RVfwk6xagx3dU/rWt4gZrmxt7sAbg2CPTPX9RXP6O3laoAcDcCK76N54ZxZ5OJShjYzXV/mdtcwFNSt7uP0KP/MVFrrk2h2/xkD9au2kqzQD1HBrE8RyvDHEuPlLfkRXBRvKpGL6HoVbRpykem+E0lTQbNJOPkGB7VoXIvHYpb7UA/jbvVLw/dIdItQxAZI1BA+lajXMaJ5mcjGeKyULzbZ4UuZTehseEddlkuG0a/QLdRLlWHRxXY15TdyGDxbod7GcCYqpx3G7H8mr1avq8NK9NHzeMilUbXU8Q+NV8LjX7WxBytjatKR/tuf8ABR+ddT8ELfyfBrzd57qR/wAgF/8AZa8g8YyzDxRrwlna43XTR72bJTBJC/THT6V7b8HxjwJY8Yy8p+vzmsqb5q7Z9Dj4exyenBPdr8mzuKKKK7T5MWikpaQx1fJOqXoubvWLzdk3Fwzj3Bcn/CvqTX7z+z9C1K+/597aSUfgpNfIY5QA9FXcf8K4sa9kfX8Jws6tT0R9EfAyFovBRkLZEt1IwHpjA/pXpINecfA8n/hA4QeouZR/49Xoua6qWkEfOZk28XUb7sfmlzTM0tanEPpaZSimA6lpop1AC0opopaYDqWm0tAC0E0UUgMTUdU1G0YmPR3mQHqr8n8MVWsPFunXE32e5V7ObOMS9M/WuglijlGHXNcl4l0MNG0wTzoh1H8ae4NJ3LjyvRnXZBGRyKQ1574a16XTJxY30xlsW4jlPVPY+1egbgQCDkHoRQncUouLPitfD0sPltdSLzyUU5NbENuqRbFXaqjgCtCYb3LFeQfzqW2tzPMkW3g8kV8rUxEpK8j9XoYOnQvyoz4o3DImOWPFb8sTJHGCR060trpxa6eaQ7Y14UmrrwebhIwzKP4jXHUrRkjd1EpaF3R4FhR13AySDr7VpTorId/3Op+lUITFbIJ7u4jRE4AHeuf17xCtyjQ2+Uh7serV5kaM61S8fvPPlGVSpzX+Zg+IryN7qWVOLdCce/vXJPK11K0pGOeAfSpNUvDPJsHCKeB61paRZqcT3QCoOQp7/WvqacFh6SbPLxVSWLq+zp7IWGIpaebIPmbhRUSly+7t0rTv5Echh90DAFQRQhlHv+lTGTtd9TGooKajHoblpcfZ9IjdzyQSPxrl7m4NzO7ykhDwD6Ctu7xLAqL/AKpBge9Yk8AVCTxiscPGKbk92eniZc0FGOyQ/wAPFI9QORlcEVNcgTahJOmSpbj6Vl28xiMoj+83GavWczBMMOenFdU4tTczyPbXpqkujbOo00RoU3DBHf2rQuoV+0BkI3kce/tXOvctEsTdVZQQfbvW2rme1jnz9wZBrza0Gpcx7mEnzQsc5qLeWLi1Lblc7l9j3rnhJ5dzFN2Rhn6V0/ieIbY7xOEbhsdjXLy4NenhbOF+55OPup27HZafc+VKCT+7fr/jU3iOAz2DNGMvH84HrisHTZGa2VW6gVuWN6JZGtH++i5Ge4rkqU3CfPHoehTqRqw5ZacwWOqTpCrRv8rDIFdFYa5OYGjnUELGSGFcnNbfZiVX/Vknb7e1RTXLQwytnPyYFaxhGeqOes3FWnuj1O3mOpar4YhUqzIQWx2+fP8AJa9hrxX4Nxm9vjduMi3jOD7ngf1r2gmvdpq0T4nEu9RnyR4guM+ItelPKSX0o3eh3nFfQnwk/wCRE07jvJ/6Ga+ddUiTOttyduosvPpl693+BkN3H4JSS4uvOilmcwp/zzUHBH5gmuah/EbPpM55VgacV5fkekUUlLXafJBRRRTEcz8R32eBddO8L/orDJ/lXyuXyFUf7zfXsK+kfjOsreAb4xEYR42cE4yoYfn2r5xjRTpIn/jM+3P/AAHNcGL1kj7LhqShSld7s+hfgY27wSR/du5R/KvSa8V/Z9vdSkg1SxZEOmxMJFbb8wkY9M9+BXtFdVF3gj53NIOOLqX73+8dmlzTaWtTzxwp2aYKcKYDhTqYKXNMB+aM02lpgOpabS5oAXNFNpaAFJpCc0lJSA858c6MbIm+txi1lOHUfwN6/SrfhTXJDpMcE75aMlFP+zXZX1rDe2ktrcLuikXaRXi8skuk389gxOYXK59fes5aO500/wB5HlZyF2ixykDoDWjoMPElx6fLWfcDe2715NZ2qeIDY2ZsLLImJ+eQdvYV8Wqc6keSG5+qYuoqdG7Z0mqarp9oPKlcPL/zyXkj61z2peJIlTAk5/uoelcUgnuLhtzMWbkknOfrV6CySRhGCvqXY8fhXZHAUqWsnc8qni6jX7uP3mhJqclzwilj6uc1UW1uLiXY75z6ngVdjtre2wJJGkI7IvFXYZ48YRFQfmavnUPgQp0a1X+NLTsUTpltbESH5mx95v6VQvJ1Ukc8fdH9au3t4nO07m6ZrFkO6QZBYmtqUZP3pnFiMTCH7qloXLEPcAl84FaAwCBmqtu3kxBccnrVm3Xc439/5VNSV3foYcji1Hqy/tAt8eorGu5NqMH6H0rc/hb6cVhamcRMSo4rOg7yPSn7tNsxVbfM5THWtmAqiAumOOc9Caz9Ot1ds7ST3962riIsgJXaoGK7K0k3ynkUIvldRle3vFkPlEEKORntW9ok4bfaOfdfcVzs1qIYlIOCeatRS+UqSq2HXnIrGpTjONkduFrSpyu/mbk8AnhnsJO4+Unsa4SVWileCThkODXZm7Fwkd2jcjhsfzrH8SWquy30Q+9xIPQ+tLCScJcsuv5m2Y0lUh7SHT8jIt72S0baw3RnqPStXTJ1k1KKUSANjjPfjpWZCqug3KGweQakvbBrULLGW8puV9q72oSdnuzyOarCKkndI7N8XVrlOQQHWuV1S7GWtlHOcMf6Vp6BduNOIJyyBkUn86xFtnn1MR9Qx3En07muXDQ5Jyi+h6GOqupSjUj9o96+DNk8Ojo8cyBmbfIo6nPTP4V6lcxGe2lhEjxmRCu9DhlyMZHvXCfC2Ly9LY7AOQo9gK9AHSvXpPmjc+RxcXCq0fF14ZrJ9S06eRnlW5O5j1ZlLAn8zX0R8B5/O8AxpnJiupUP55/rXiXjeyT/AITjxFYZCym6aSAnjJPzbfxz+derfs53G7w3qtqchob3cQe2VH+FZ0labPXzKp7TCxfoew1HPNFbxNLPIsca9WY4AqG5uhGyxRASTtyEz0HqfQVAlkjSCe6bz5gcgt91f90dqVbFRp6LVnhQp82rD7fPOubKzZgekkx8tT79z+lNW2vZSTd37YP/ACzt18tR+PJ/UVdJrK1PW7WysZryLN4ISA6WzBmGTjpmvOniqkt2dNOjzO0Ect8U7GytPAWtTRQL5xjQGR/mbl17nmvm1JWOlJErcmckD/gI5r6P+Jt1Jd/C/Urie2e2kkRCYpOq/vF4r5oTYliXMmZZDhEH8K9z+PStKHvRue5lrdNNPue6fAVLW90DVop0D+XeAjrkAoMfyNetraogHlTTJ6YkJH5GvGv2dH/0XX09JIT+jf4V7VurGpKUZuzPNxi5q0mytI2rQHdC0F2g/gkHlv8A99DIP5CnWusW0twtpcJJaXbD5Yphjf8A7rdD+BzU8b7hzww4IptxBDcxGKeNZEPZhmtqeNqR+LU4pUosv04Vz5uptH/1xeawA+8cs8X+I/WtyGWOeJJYXDxuAyspyCDXp0a0aqvE5503DckzSiminCugzFp2abRQA/NJmm5pM0ASZoJpmaM0gHZpCaTNV767gsbSa8upBHBChd3PYCkG5Q8S+INP8O6c1/qEhCZ2oi/ekb0FeJ6jfT6vezaoYvKSdt4XOcDtWBrPiSXxr4qkubhmGnwMVt4Cei/T1OMmurMZcpCqhVVQcDt6VxTxF6igj3qOAVKg6tT+mcbrN0beJUjP7xvTtXIyfvLjaBliefrWxqszSSn+96+lZ9hGpuUdyAoOSTXjYeKpwufXYqTrVFHoR3itbRoi4Ab7x7mrmkaLf3SpM2+O3PRicZ+lbej6St1Mb+8TcDzFGw4C+tHiPV5oJBZ2zeWAMu46/QVm8TKUvZU9+rInh4J+0l8K2RT1SKK1TmRQR2HJNYL3RIIZ+OwFVbu5y/LsznksTk0yFGlYBQSxrrp0eWPvM83F432kuSmrFnzd5Cjk9hU7PHbKHbBkPYdqa0K2oHQyGoEgMr7mOSarSXoc0Y+y1fxfkW7ESSzGVvu1poMuPbnNQWsRRAKs4yCB1Nc9TV6G1PV3ZeiGV9R1rH1NVdhEPqfarFze/Y4drYLdMepqhDukbe3JbkmoowafOzbMK/LFUo7vcs2FntG/OKnv1YKh529DV2yTMakjgCq+oErGVPQ0Ko3ULo0VKhysxNRuixRB6/pVaOdy7LyQBTnQtO7N0AqXT0VZHaX7jqQa7/djE5GnKppoTaXffZpmUoHjbgqe9arXFk4aN5VCN/C5xxXLg7ZDkd60o40u4u24VnVpRvzG2GxMuXkWtgktPs8mUIaFvusDmlluZY7N4ZVWSNxhfVSO9VJCYnVEOAD8wonk2Eg9CK1gndNnPUlFwairFnQ7jbDMnVg2VH1FaGnyG3vFjdFDyArkj9K5/T42kZmjJDK3atrXWZILS6X5ZV2kkdyB1onBKp6hRqOVDX7P+Z9B/DZQNNx5jF85Ymu7BryvwJrMCafaybmywG4V6hDIk0ayIcqwyDXXhJXhbseHmdNxq83RnzT8V9PV/H/iLZgsLSO5GOvAXP6Zp3wG1LUofEl9Z2xDRTwFpFboWBGG/DJ+uap/E+O50b4n6jPelxa38ZAc5wY3Tbx/un+VM+BF6Lbx/DCxGLmCSL8cbh/6DSqXjdo7eZTwqi+iPp22gEKZJ3SNy7nqxourmG2j3yuFHYdzU9eaXjTeK/FMukb2isLcb7hlPzOM8LnsORx9TXkyk92c2Gw/tm7u0Urtmh4j8V6JcWs1h9sZhJGyH7OC7ZIwOnH61iCeYQ2Fzb+HLy2s4Btup4E8qSZcf3Qc479a6W4a08KtFINKtItOZxF58R/eIT0LZHI/GrUfiH7ZeT22lWMl4tudss28IgPoCeprNnpQkqcP3UG492/l02frc8w8b79b0nUV8NXMaWvkq1zZySnfKFOSwDdCMDoa8hsbMT6RqV0fv23lnPsxIr6N8c+HIr3S5dXsoDa30cZeQLwWXHOcd6+cdNuvs1hrVo/BlhVefVZAf8a7sI7po6I1IOKnD013VvPqeo/s/X0Mc2t2ZlUXEqxSRx55cLu3Y/MV7ba6la3E8tqsy/aYgC8ZODg9Dj0rwD4CWajxhPLN/rlsDIoPYMygfp/OvTvHtrNAlvqlgWjv7eUIGjHzMrdB788Vjily1Dz4044ivyN2vt6ncyyiHDnp0P0qcSDAOeD0NZmnNc3elwm/h8m5ZB5iZHyt68UzTLjzBLZyffiOKwRyShZtdjYYLIpR1yp7GsGKaXw9fbZHLaRMeh58hvUe3qPxrTjnKuqMM5yCR6ipLu3S6t2hfoRwfQ1rSqypy5kZOKej2NYEEAg5B5BHenVyvhm+kt7l9Euskx5MDZ7Dqn4dR7fSuor3qVRVI8yOCpBwlysU0maQmkrYgdmlzTc0maAHZoBplOHSkwHE14r8ffFYgsovDVox82c+ZcMD0UdF/E/yr2evkbxxqK61461S4J3xrK0UY9Qpx/jWFaVo2O/L6SnV5n0LngSzhjDXkvz9gp9a9Y0mzNw08pXptFea+GIcQW6gffJP5mvZ9GVY4CoHLtz+VeLh6yeJlJ9ND6fNaLp4WEFu9TwARlk+7uY96l02xW6v44SBsT5n98VJCwVOBzjitPwzCTe3DHr5ef1rz6tRwhJo9aKSepsspWLaMDtXm3id2/tC4wTw2K9VkiG0CuO1O1t4Vurxly2SxP8ASufL6yjNt6m1em69JpO1jgtPt3uJtp6Dkk108NqtsmdvzMKs+GNNa8LXcoAVj2rc1a3gW0kUAKUUkH3r0cTik6nIedgsEo03U6nGyo+5iyZ561Nbx7CWwOlXLcB4irAFhz9aJZY4UOcE44AqnNvSxyyppe82N34XpgVEl4qucDOO9UJLpp2I+6voKfBCzHA6etXypL3jkqYhp/uxkwe4nDycjsB0FaEabUAqa1tQ3A7djVhIliy0xAQc81nOotkOnRnUfM92S2ZlCDf9zt6msfX7lhIsUZ+YkZqxe6kZCEhyqDv0zWdLEWzIeWPTNOjTtLnkdcq96fsaX3jpFXAdecjBpHA2KDxjnils1wcSH5DVuWJR8yYZD39K1crOxpKLlHmRjvExfjvVyyBikXjrwauxxRk5NNaMZJWqdXmVjnp0mpXI7/TZ/tJQqqsRuwTj9ay9QRkcIRgjINdjdM97BDMw4DDj0rnNTQNO646VOHrN2TOrGYWMIuUeo3wsIjc3Al6GPIHuDWh4kwthCvoy4/Kk8O6RNc217c277ZbSESlP76k4P86Z4q8yJYIpBzjPHoBit5yUqsbHFRg4Yepfy/E6Hwpct/ZluWcgL8uB7GvUPDmvvbyRRySl4icHH8Irxvw07GBox90/MP612WiSSC5UjJIPStaUuWbRzYql7SimzQ+P0lnJb6RdCJbh7YkzpnBMMnH4crwfWvFtCvT4d8T6XqsTNJbwzrKjgYLx55H1xkEV7/440qTVfD9zZAqLy/jM25h9yGFcgfi38zXzNtlW2l3P8kcgDRE8qT3H5Y/Kt4zVRyRxUVyU0n1Pr4fEDwuWVVvnZG6SCI7fr9K4qw1geHfEV1fhDc2cwEcpQgsPQ/j1HqDXH/DqxtPE3hyeKBmj1KxIUktlXBzjjt0qWS8nt7SbSpoiLiOTY0hPPljon4Nk/lXj1YyhJp9D3sDhMNKLVK75tJJ/mdj4j8TW3ik22lWxFnbGQPLPcsFAA9BVXwd4ph8Pi4069TzLcyFllh+Y56H6jiqXhXwlJrkL3U9x9mtQdiNjJd/b2rn9TsZ9NvprK5GJYmwcdD7is3GSXMzvp4bCTUsJF6Lp597npniTxIt9paW1rDcRRXgx5hUb5E7hFByc9MnAr51e3tV8R37XiPFY20ztJEWyzDPEefU9CfrXqektf60trodqVh2Bt9yBlhHnO3Ppknj3ryrVtPGg+NpNN1KTzoILtTKecOmQf5Gu/AR1bPGx1KGGSoruzq/hR4lSw8aXmo3cDutzbsuyFfu/MpAA9BivaZfGmiTxmZfMWaNGdY5o8bioLDB9civDfg9am/8AF12LeSSAx27PG6/wncMZHce1ez695Gr+HJ9PtbVTq0UqhkjX7jA5LZ/u4z+eKWMi+e5y0vYyaU0797/odloybNLtSW3O8Ykdv7zMMk/rWbqzf2frFlfLxHcZhk9N2Mj88Y/AVzdousTQW+inW7OGzddqFhiZoxxj8uK7PW9ON1ok1vbjEsMYkhz2ZOR/LFciWphXgqclJyvf8gvZNhS4Q/IQG/L/AOtmtNGBUMOhGa5axv0u9GjlbjG1sH0PGPzrbsJQ0TR5+5ilsZSjoUNftpIZ4tStOJkIJ+o6f4Gum0+7jvrOK6iyFkXOD1U9x+BrOux5tq6AAtjjPrWX4NvNs93pzHGf9IiHseHA+hwf+B16GX1rScH1OXEQ5oc3Y63ig8UlBr10zgDNJQBRg1QBS9qBwKDUsDD8Z6k2keFNW1FG2yQ2zlD6MRhf1Ir425DtuPzE9a+tPisVHgHVy4yuxMj/AIGtfJ1yD9oYD1rkr7nuZUlyN+Z6hoKmNLL2RBXqWkz4RCT3NeZaaNq257bUI/Ku2sLjbbA5r5nC1LV9e59Vm9PnpK3Y8wtYfN2jIAHetvQ4xDdHjlgRWAknlN1xir9rqHRhw4PFZVoSlFpHoQjGWjWp0c+7kjNcfr7uNMucdN2P1rr451mj8xehGcVxXiK6Uw3dmeH3Ar7gnNY4GL9olbaxNSXLRnF9mbfh1VTTYQvTYP1ql4kkZbNlXqzAU/w1cKtgokOAABn0qxrcAltgcjCncc1svdxPvdwveh7vb9DkCsij76rxVeVldsHduq9ONhyO3XNMto2ZzyCT2x0r1lJbng1aa2IYoFRuVzmtVIVx8oxjtTVhZW+dSADUjWs0wOwNtz1zisakr7s5uV30RJHNBGDjlgOgrGvrySV8O3yD+EVrx2OCQzDOMYFVZIERmAjGR04qabgnfc3jTqzjZ6IqJEjIhIwD0Bpt5mNsdOOK0IIhKrbzjAqvf28jOgkZV/hP9DW0WnLU6PZezj7qMgzFjjLHFSwTSK42nI9KILGZ5NqnIPtWnZ6eiKSw+YHHPatKk4RRFOjVk+bYFAkGRw39008xYwx4J7VI6mMY28etXYYhMVUjJ7VyyqW1PRo0lJ26mlDbZ0yHAzkVyl1Gz3LKRglsEGvQrdFit0t+/wDSuf1KzT7Ss8Qzhjv+tceGxFpO50VqTqwUew3w3vtdadVHyPbsjj1B/wAisHxjcCXUwvaMbRWpZXptb+a6f7o/dj8v8a5XWJTLcbydzEkk16WHi5VeZ9jycZaFFxXV/kdD4ZdRbqCPmDEfhXo3hqze+ulWDCsCM59K8y0DOzK9G5r234c/NcKqhc4LNxzgdP51tGqo1bM5cVSawftF0Mfxhc+RqNzcC9MkMj/YnVcgQqhDFPxUH9a4T4h/C/WbnXpdS8M2cc+n3YDiONwuw454OOM817d4y0y1TQ3tI4lxLdBiWGTuZuTWVZ3Gpaeojt9ssGMIjnp9DTo1XTbZ5c2q8U49NDk/hH4J1Lwpbahe6wUjubnaohVt2xVyck+pz+lcvqMvn6rqE2c77mT/ANCNewQHUr6VftRVI+6R/wBTXkN3H9n1u+iYY2Xj5H/As1jiJufvM9rI0oTkvI7/AFKaPTbTStFjult5oIBcFe7Nn/HNZ3xLgSSTTtWiGFuYsN9Rgj9D+lL4unt7bxJcTzKC7xJtO3JKgdB+JqXxxIj+FdDIXG8hlHoNvT9RWlVfuzky2pL67GXVt/iR/DMxqbmRgA5k2Z9eBj+R/OqnxL+F83ijVhrOk30FvcMipNHMDhyOjAjvjA6dq0vhtZ+bZTuwyrTk/koFdu9g6j9zO6j0JJqqE3BJojMlGeIld9Tivhv4Di8Fw3V1dXi3F9cKFkdRhI1BzgZ5P19q37eN4nu7yAqZpJzKvGMgADb+IH61pLpzZzNMW+gqyLeMLgLj3q5Sc3eRyWilZHIeJ9Ca7ltNbsQzB4sSR+g6gj9c16XpwJWAkH7gDZ+lZGl4WAxHrDKRj07j9DWsrlGyD0rjStLUyxNadSnGm/s3secWKmxmvNOJwsV28Yyf4d24Vv6Hcb7plLZ3oG/PP+Fc14imEXivUlTjeFkA98H/ABFaulSCO+hwf4dv4Aj/ABonuXa8Ezqt/JB6VzOnSi28U2p6B5JIf++hn+ait+RsNXHeIpjY3Et6oP8Aozrc4HcKQxH6EUsPPlqJmbjzRaPUs0hIAJPQU1WDKGU5UjIxUV6+y1kb0FfRt2VzyIxu0iRJQ67vWn9qx9PuPNSMA9a2KE7oc48smhOTzS0UU2yDjfirPCngnVLaXl54SEHuOc/pXyiFY9RyTXvnxK1E3bzxZym/ylHsM5/WvG7uzmtEsptjoZIxKrEfe56iuHETSZ9DlkLQaPTp9NOmWmn28rk3n2ZHnT/nmSPu1chnxafSuc0G+n1CyE11O01yWZXkc5JPWtUsVt2+lfIR56VT33qmfWcjqUIxk7tnN3Vqp2MDlG4z6VnSwvE5U/h71uWzIcwyjMb8c9qlmtBJE8D482Pox7j1rojW5XZno1oJadSpol/5bi3nb5G4U+lUfFtntlWZRwwwT7iqkwaKZkPBBxXQW+zUtP8As8/3wOGq5L2VRVVt1OKX72LgzndIWYx/KTtYV0Kyi9tGhLbZVGDn+dZ1gklrJNauuNjZFWvKKSeZnHcEVdW05X+4zw8lCml95kS2lxJI8QBwgyxxV/QtOP2ht3IxnJFW4rrfOWEYBK7SR3FE941uMRcHrxVOpNx5VoYSVKMuZ6i3sLLMzbW2jvjjApqONhwOM1NDqpZcPFk9ypqKWdVkYpGAp7VCc2rSQnGF+aMtypNJsJP8XtUFym5NyN970qeZ4p42+XD4yKitY/tA2A/dreNkrjVPl07lWwjYT88jIJFXtXhlueIo8N3A7iiK1lju0C4Ltxg1rTAwKCwy44yKUqlpJo3hS5ouLObsf3MaMDuZG+YGtO7hLqs0HQ8sP61kQx+XqEoc4EmSB710WlFShVugyB9KjEvlfMjTCq9NwkZhgLRDf17Vp6Lb/PvcYKjGKSaLE6tn5B2rQhKxWbPjlulctWreFl1NaeHcPefUtXLKXidMcDH5VmGLdcOQ3ynll7VAJ3JPUe1TRTnEj8cDms4wcDqVLlRga5AFRTGRsySSPWuPu8766SeV5IZIgx+Vt22sG8XnNe9hfdVmfL4/35c3c6rwvCGsI37969q+GFth7y7wcbUiT8ck/wDstfPOh3c0Uixxybd3ynJ4xX058O4RBoVoWx5lwzykjuAQo/TFQ6bVbmZlmGIj/Z6hHd2X6l7xUd1sgAz/AKQvH51HY28Zt14Vs03XpwETIJH2hBx7sBV5LeMjev7t+7Lxn6+tVDU8SD5YWGC1TduUFT/s15V490KeLxI9xbplL1PNySANyL836AGvVWupLcZlRZkH8cfX8qxPFtjH4g0Vo7PY13C4khV+NzD+H8RRJKSsduBxMqFZTe2xyd4t5qOl2uradD501zaGymYdY2yBv/n+dVPHJaWWx0OyVpv7Oti8xA9hz+AGfxrI0jxHqmgNdwRwoC7HdDKpAif1A7fSqtmuoa5qDQxgvdXDl5ZhnIXoc4/h9qh1OaKge1RwHsK8sQ2uVar5nqvw+svs/hi0Yr8026Q/ieP0rpjHWdDdx2UENjZWcsoijVV42gADA5NI8lxIc3N0IVPSOL71dKslyo+cqzlUqSm+rLczRxD52Az0Hc/hULElchSB78VLbi3Ayi4J6s3U/jTpSmMbhV8pKkyjZErqVwh+7LCrgf7Skg/oVrTlnVUJzz6VmjC6hBz95HX+R/pTro8n6Vx1dJCcbs4TxgM+KZihJL2ysAO2CP8ACrtvOsdwsrttRF5P1I/wqLxdtj11XbgfYVOfxYVp6Zarptmup6gga8YFoom6Rjtn3oUXOyNr2ii7rNxcCxkkTdCxTMSD77k9P90frWXqlri3hglJfMPluT345/mavxTy380bTdIRvfHdz/hUWqcxo3oazqcsZcsSI3W51/h2RpdB013OX+zRhvqFAP61U8Y3n2PRJCDhpXWJfxP+FT+F3EmiW+3ou5fyY1ynxWujD/YlqDgS3Bc/hgf1r3ua9O/kebTjaul5m94b+dIj9a6Q1zfhXBQgfw5rpe1OjK8EwxUOWtJeYh4qtfTi2sp7g/8ALONn/IVYNYvi5jH4bv2Xr5ePzIrRmMVdpHjOvHzpbJHJw++Rj35bH/sprkJ5J1srZRI2yLLojHIXPXius8Tq8Nvps/ZrMn8fMf8Axrk5D5iADJUDAJryca9UfVZXBNMt+HisF9LAJUZHAKlehNdZKgMPuRXn8MnlT5U4x0xXeWTmewilY5JXmvBx1O0lM+gpytTV+hhRsgbYSNx6CrfmFFiuZGJCNsP0NRapb+VqAfbwoP4dKoXU0k8aQhtqBgx9eKUYqdmj05y543RY1dYbgsQNrqMg+orMtbryThXP+FakMH2hSc9OpNY9/p0tszSpho+vHatqPLb2bZyYmnytTh0NmWQSpFc8B/usaikuBkjIHvVC3kJspFJ255B9DVD7UUBVxyD1rSFF7djixTSalHqbG/A+UcVXuixXJIII596bauku3knI7GoNR3WwBY5jPAb0+tVGPvW6nPKjPl53sOt5nEfIwCetacS705O4YrAhvGKAK4IHY1oR3OIy27pWkoMUXZGgkajoPmpSggw0XQ81lpqM7AuFBAPbrV1JHuYNqZyKmVNrc6aUuZWLN3MRcxTxkA4BFWr5vOjjfueTWJMkm0Kc5U5Fa+lSB08mXkgYyazqQ5Umuh20pKW5japAwiWSP76nI9al0W8DylCfvLuFXbxUDyxP99elYFufs80ijh4j5ie69xV256bixNezqqa2Z0tw+WGO9aMq5sljH3l7VmxskyRsnKsAQav6ixiMbL0IIrzp7qJ3Sd3FIxL13ikVh901MGP2KZx1IP8AKmX+JIHKjkfMKgtZs6WXPTP9a6UrxTG3aTizIiV/te4qQG+Ws3UIvLndD0zx9K6XCECRSD3qn4itVzFMoxkYrupVvfSZ5WNwdqLa1tqc9Z201zeQWsA/eTOEX6k4r6j8MXCpr13okJ/daRYwQk/7bZJ/kK8L+F1iL3xxYeYB5VtuuHz6KM/zxXpnwh1D+1NX8W6tnKT3Awf9kZx+hrtnqj4/F7uPY6DxZNImlTSwn97HKjoPUq4bH44xWBrHxR0/SLo2V7p9wGYBo5FAZJEPQitrX7WHUra10+dmVLqfblTgjCscj3BGa8/1LS2ufD9rcmzS71PRpjbyBkB3bD39iMGsKNuW7HRhGWjNGL4r6DJPiS1uI06blJGPwBrs/DWv6ZqcwayvFmVuV3AZHsfesLXvC+hajpdn4nsUjiF5CkZtFgGxiCeBgcOMkc+lecnSdZ0LxIbnR0CeSBI8f8LID83HfrnAracYQly31Li6VWF0rM9I+IunajqF7bmPTII1XKrceaoabPRecH8K6vwtbCHSY4/7JbT2CKrbiA7nHJ45/OtNrCz1vT9Plu445VXZOoXlScfy5rV2CiNG0nIirjufDxoW29f8zivF19ZaZapJd37WkTNyEbDyewxyTXlmo/Ee6mcweHtMcx7tgllBJJ/yO5r3LW9Et9Tt3t/Kjjeb5XnCAuqd8HsTTx4L0GTS7fTfsSJZwOJEiiO35h3JHWumnR5jCOLhTSuj54utf8cGPzXvUgQkDC4HWp4Lrx5ssZ01TdDeSLHC7E7XLED09673XNCsLqa8sSr6QFJWNLvgt/tK3QjpjBNQ39j9j0+y03TPMkuc5gcryp27RIF7AZJz3OPSub23v8nLsegq3OlydSl8PdV8Q6nqUE2q3CtAsjxKqjHOCM16PdH5jWZpuiRaHpmnxonzrPGD7Dkf1rRuRuuCg7nFc9f4rnPWlGU/dMWezjv/ABoGnAaK0soztPQsWYjP0xS6lcrcNPK+fIRck9selOky2q6268ZaG2BHfgZ/9CNUdQdhDcEfOryCCNR0LZ5/IA5Naw0iRE3rC3MNmgcfvJDvf6n/AA6VQ1AH7Oc9Vb+tbn/LJD/sg/pWNqagPcAdCA4/SvPveV2JPU2/BL/8SuVM58u4cfnhv61xnxlkK6joMh+7vI/UV1vgck2d97XX/tNK5n4027vp+mzqvEMpO78uP0r6KjrSjfsebLSszoPCtwEvDHnhlx+Irp7KTzQ/PQ15fompYeGZW5Aziu+0S5UzsA2Q4yDWFOfLLk7M78XS54+2XVI2iOax/Fqb/DWoD0QN+RBrZYHOetVdSSKWwngm+7NG0f5iuuT908yGkkeL+NbbzfBWk3oIUrJJAxHb5tw/rXCz7AHETZUHANdN40v5bPSl8Nscsl155I7YXH865ayiaUFa8XFSuz7LLKXLC77lErmUHtntXf8AhgiXTMf3WK/1/rXKi0Me7cM56V0fhJWCXMQ6BlP515eOkpUtOh6zpyjBsn1C3El5uflWTP4iucuY0W5kib5Sprr5lZm5x8vSsXV7INi6Vc44YD+dcOGq2dmdNGpyqzM+3ult1MTAlDyCKhkuUaOZMHDZ257U99m3p0GKrSxkjK/lXdFRvcmpiVdqJWEotomA545rn7yRpHLKpwTWleK7E4HFZ0gwSTngV6VGx5GJT6Bpl5JbTBn3MnQgVuytbahbvHHMMsvI7j3xXNnnp1NRsjbtwYg+xq50lOXMtGFHFypw5GrokRDDPJCZRlDjPrV2O4HCE8fzrKEqq6qwyeck0TSEchuPWtnC71OJVOW7idHZEZ4xg9RW3bFYsuRxjBri7CdxMpyV966c3A+zk5Ge1cleDvY9HC1luia5ljd8pnJ6rUcU+GAB2OeBWS13iQtnB6cVIkyXTgMcSDkEGj2dlrsdMK/NL3dzdAW9B3uPMTgnuax9YQ200bNymNpYehpqTtDNu3bWHH1rRnnhv7bynTkVNnCV+h0xkqsXFaSE8OyY/wBGc/dOV+h7fnXVXcYltBkZ281wFjM9peLvGAjYb3Hf/GvRrErKu088dD3rz8fBwmpoKda8E/5TnXjZc5HFUTGIdOkTtuOPzrpru18psMMxscKayry0L2ksf5GlSqp2O72iqRutzEtj8rZ7dKt6uA9hCSOeP5VVSN0XaR8xNWtdIjggi75P6Cutq9SNjnnK1JplzwjG2n+GvFet8q32ZbKFh13SH5sfQY/Ouy+Btt9k8NatOf8AltNhfoABXK6xKNP+Guk2C8SahcyXMnuFwB/Na9J+HtoLTwbYw7cSTL5rcc/MSf5EV3Sk1BnxWLSacu7/ACHaztm1KwgDMjW8Tzh1OCrHCqf/AEKsnQ8r41vI7rasWqQL5iD7plUEBh9QDn8Kv3QLa7fSY6IiL9P8ivNtWury005PGKa6n2mG/wBo0/dgqgbI/lU4aMpPlWxyt8quewWGnXWmX93a20UNzpU3Mtm05DK/99OPlP41ZOi3ssnlx3Jjgb5d72oMyL6bt2CffH4Grry2V/ptpqqiRUnjVxNF1QEZyfUVoaQg2My6mbwD6cV0OEZ2jNXtsZTk7e0TsyzbQw2VtDaQDEcSBFUnOAOlTgjiqNikriaSUkStK2Vb+EZwAPwq+FwMVsjmY1utV7p7c5WS8aFsYys2wirOKimtrefHnQRyY/vqDVXa2Bcv2jl9RgsGIM/ia+ZA2di3PX2+Xml0W20xrzz7PSHHU/bJPvMfqeTWtc2oibFppNq57MxC4/SrFotykH+lujSk5xGMKo9BUNyb1OzmhGn7v5/ov1KWtgm1jweRPEf/AB8VXi+fUGJ6K1WtW/1MK/3p4x/48P8ACq9sv75n/vSYH4VxYn4iY/Cchqt1FbjUJ7jWLfTbf7WWDSDLSMOMDntiqVpP9oWCVZd0CriFQQQB68dWPc1574gvNJHiXxD/AMJEt1OAZUstnIjfccfQVY+HFzN80DEiNo/M2dlOcZH1/pW1Wm1STTNoPWx7qh3W8J9Y1/lWdq6DyhIo6oUOPbp/M1btG3Wluf8AYFJqMRexuOmBEWB9MA/415fUjZh4FGLbUeet1n/yGlTePNIk1rw1d2sH/Hyg82H3Ydvx5FQ+CCPJvgD/AMtVb81H+FdTX0mF1oxPOr6VWz5o0DWHinCSZBUkEGvR9J1lVRMPwO9cV8RvDs+h69c3kUf+h3D+YjDoCeo/OsnSNZWLMdxJsHbPauPGxaXPHc9zLJwmvZVNnse/6b4gtpURHkAfgcml8U6nDbPaxCRSWBbg14xc3kxtnMLHcBkYPWsK21eTyGGSpwcDNY0sbzw8zorZL7OtdbDPFN19v8SXdyGyrvx7DFO04BSc9KyxG5lJPJrUs1IYA81xV5cyPdw9PkSRouhD4xkYrd8Jwk3NwMcFN361nsRgHHUVs+EnYT3b9hHj9a8fFSfsZHbi5v6vKxBHMtxCrqeGGax7m+NvI8EiNu7EdxWba38kHy5JT09KlvbuG5VHwVlHBPqKuOH5JWaujCNSMVe5AzIw4PPekAOw8HgdagtEV0b13E5qRb0RB43GTj866uV3sjj9przS6k9tax+S5bGT61y+q+WJ2jUBW9K0XvLgwsU6ZxXPXu6Vy5Y7vWuzDU2pXbMa03yKyIZdwcBTzjNM87nDdagMjGVQ/XpVjygw6c16Nktzhj713AqSkeaMngmrot2wNw+U9D61XNsTMoHU9Peuh0QC4ItJRgj7pPaprVOSN0a4Sh7STjPS+xkxxNExOeO3tWpZoZP4vlx0rWl0dY0L7g4HUYqnMEtgDtwrDlsVyquqmx1PDSo7rQqtpzy73U8L1H9ahNo8Khlf94D2resZYlAdXXkdD3pl+beSJp4AMD7yjtS9tLm5Xsbxw6a5o7lOHFzb7WGZ068dRTIpDA3TI9KjhZlfzIzhqfI2Tk9TWltbdC1NtKS3JrsJKqXCLwOv9a6rR7kPaQyqeVG01xiyMp2g/I/UehrQ0O4aG4+zsSM9u1YYijz07djalVTqWfX8z0A3UDwnzMEd81hXcqStL5DfKBxzkUMT17EVmW2FuWHZxXnUaCV2jsjBUnp1I7RWuL1N3RTuI+lVvEbf6UB2Rcf1ra0m32GaVuMHaCfQda5++cTzSsR95ia7qXvVb9jjxE37Oz3Z1MumS60fCdi3+pNuSQP7gIJ/E5Ar2C2hEEKwxgAIAox24rkfD5ii0iyvIIvMuI7SOKI/3S+OPzB/IV3tvBgpC3zMoG4+prebvofGV6rk7Ppc5vU4REFm7s3zfTt/WvIvFHgy9ieZo7c3NqSXR4+qjrgj+te16mBJL5P97Kj+lc1rlz5Xhq5mPDCEgZ9cYH61FKpKDuhx1RpfCq5uLfRIdFvm3TQoXhbs0eeg+h/QivQIwo+6APoK8rhE9rpNnJBL5d5aRqyOem4DkH1B6Gu38Oa/a61bkx/urqMDzrdj8yH+o9DXZSq825z1qb3R0NJuHrTAQQQazG0az80yCMsSSfmcn+Zrouc6iupqs6AZLAD3NZ6a1pcmopp0N5FNdspYxxHcVA7tjp+NSx2Ft5ex4ImT+6VBFJaadYWBlNlaQ25lIL+WgXOKoLItMahY09jXE654ja8L2ekuyxZKyXYPX2T1/wB78qVm9EaQi3sLf6k2o+JrCztz/ottOS7A/wCskCnj6L/M+1bkB/0wRf8APNcn6muW8KRJ/a0mxf3dpDyfRm6fjgH866S0P+lXEp/56YrgxPx2R0W6HlPjDwyL/Wb25tZlhlaU71dAyt747GpdF0qPS4T8/mXDgCSTGBx2A7Cug11JIddvo3+6xWVD6qw/xBrPLVEqknHlvodEdjs9MkzYwn0GK1JtqWbvIC0SglxjOVI5/Suc0iXNgg9CRXSn97pzr/ejI/SuOW5jMyvBKmC/1m16rE0QDf3hg4/TFdgOtcb4Tu4vtTwq3zpi2lz1JUZQ/kSPwrs8Yr6LBTTopdjzcQn7S5zvj3SYtU8PyIygujBlP86+Z/GWnyWGp/ZyNo2huPSvrW6j8+BoieD61478UPDiTalbyxr8wtzuP4mtZwvqaYepyux5n4X1Zm26fcZJx+7Y/wAqmv7b7Lfn+5L8y1ztoGt7tW6PGwNd7qUKXNhHOvbDKfY18/ibUa11tI+4wVSVaglN6x29CnZwrKOnaraQCM57UtlHiNQPvYqSZsfLgg1xSnd2R7MaaZLFKPugZPQV0FrcW+mWskrEF2AGwdyP/wBdc3bQPKWZf4BmprsloxuJyoxXJVpqb5ehFajGo1C+nU5VpQbZnB5xTbab5ArdPeq8B+V4j1xxV7TIBOWBUYA6mvVklFO54EuapVSh1LWikNPJGfqKg1OLyZCSMqxOD6VGN9hfkHoOh9q1nEN1HzyrjI9qwk+SfP0Z34KmqtOVKW6MSxkAl8tx8rdKdd6Qhl3LkI3IxUnkhllROWiOciprS7EiiOT7w6ZrVyknzQLpwjpSmvQ4/VLV4Ztu3leh9as2JG5S2CjDFdDPbG5ZoXiG7OVbNRnSttokkSrvX5ZF7Ng/zrp+sxcFGRzxwLjVc4bFeLSZZ5P3K5IG5T6V0l1obPGLuCMJPgMQP5VHp6qsAwzLIgztPU12NjGRBGuP4RwfSvJxWLnBproddSnGnHTZnHRXBlXBGGX5XHvWfeWTXE3l/wAB6Cuo1jR/scv22Mfu5Dhx6Uy1thI0ZwMbgKUMTFLngdfPTqUk3qjlTpbwEqZFAPSpLfT3WUSQPzj5kbo1d7e6NElrJNLHu3fdA6jHOR/ntVFLK2E0JVfkZMqy9H4/nVxzHniYUp4e14o4i+sXRDNbRswPJjHUfSsyCZZH2E4J6A+teipChSSSBQ5z9w9j/wDXrl/EGiRSh72x/dzIQXiJxnPQiuzD4yM3yTMq9L3uekvVGQ6r93vU7/6uKdf9ZH1I9KpxS+ZECTh14OfWrlnKpUwsOp612O6RzpRb9TrLRhNbxsR95cisYhkctyCGNP0S4dC9k55X5oyfT0qzsMt0EP3WfJriivZza6Ha5e0gpf1cuXjmHTCejMAPxNc23fjk1v68/EUI/wB4/wBKxZlAXeeMVphl7t+5w4qd36Hc+EtUSLQ7ZpWI+zXSROPVd2VP/jxr17TZUuGM6HKOoZT7EV802gvpFntrRCyTqFfI4GDkH6ivXND16bS9FhsipklRAnnSHPAGOn/162lG2p83iMNKb9xXNi5nUahE7MAqtuJPYZrl9cZZVtdPJ37pPOdfRR0z+OPyqvcajeShh5se0jBPl8n9eKwria9tbu6vYgJRJgskmTjHoR0HtWcYm0MDWfQ6i/m22rD2xWJG0qSpc20729yn3JYzyPb3HsayLrxDNPEFkt1Tb1CvwT9TSWd/cz3McUaRKvcM2SK2owaZNbDVacLyR6Ro3j5YDFa+JIRasx2rep/qX/3u6H9PevQY5UkRXRwyMMhgcgivGHVJY/KkUMpGCDVzR9Sv9CkBsD51p0azkchPqh52n9K7oJtHlzUbnrwNZ+savZaVCsl3IdznEcSDc8h9AK888Q+NtdeyY6baQ2Cry8jN5smO+0YAB+uag01VmRL1pHnuJUBaeVtzt+PYew4rVRbCNNPVs1tU1C91pik4+z2Ha2Vvmf8A32HX/dHH1qHyVVOAqxovYYAAqeGInFT3cQMCW+QDPIkXPcE8/pmlL3Vc3VlojU0i1FrpMI27ZZ3EknqSSDz+HH4VLbPiMse8jGrF7KIp7NeilyP0/wDr1SQ7UZO6lv5mvIk23dhHUzfG1uDb2t+o5U+Wx9jyP1H61yW7ivSrq1i1DTPslwuYposEjqp4wR79/wAK82uYJLS4ktpcF4ztJHQ+9JGlKWljY0eX/R3XPRs11tsfO0plz1jZf0NcJpcm1pF9QDXY6DKHtnT0b+dY1EKojG0+MR2dxqUR2mO62u/+yVXafwYD8zXoNlcx3VjDcBhudfmHoe9cLockMVnqVjN80Jdo3T2HB/Q1W0LVpLeN7V3Y7GK8nnI7/iK9bDy5FGS2Zy1KfPfyPR1YN0Ncv4ptlmaaRh92Ej9K0dJv45CF7mneIrdpNNmaFSZMAHHp3r0r3Rxpcsj5Z1+1NnrMqdjyBXXaMRdaCF6sEI/EVg+NZYZdfmEZB8vCEj1HWt7wqqHS35+6xz+VfOZrZRuujPtMql7lmS6WQ/UdqZcKzTN6g4rQ0O1BtS5PLnj6Ut/aPApk6gHJryPapVGj3qVaPNYl0lkgjO48kZNZ0wM11tHG45OKlmk8i3VSP3j8t7DsKdpkbEvcnp0XP61O15lL3eap3OJ2qJSpGDVm0kNjeiOUHY46iorgGWKO8jPXhsdmq+scOo2YydsyfdPoa9actPe26ng0qdptwfvLVeaLOo2wuYMr98chh3FZ1lKIi1tLuwOg7ikhmntZNku4H16g0uoypMI2Ee3B5celZwg17j1R0KupT9rHSXVdyO2lFvfZySjHaQ3Ug07ULSSOVmjQmPP3h2pzxXMPE1stzH2YHDD8a3dMniu12eXJGwABDenalUqOHvrU7IxvHlloZelpN5yvKcrjqTmte2TfGCF4LHI9eaebeFZDgD8OKuWoAIGRtrjq1ebU6laEdBJLeNdrKozjpW/pNwLlPIkQB0HyFfSs3ah798VJbMYZt6sAVPBrhqx542ZyVl7SFnudbFbRXgNncw/K68OOjf4GuWurFtNvWtSejAqfUdjXTwaisKw3+M2zfJOq8+W3ZhWh4msY7rTUvoFDyQjeGX+Jf8815dOvKjU5ZbP8zxaWJnQqqMvhl+ZkSNm3to2GGZigJ7N2rz3U0aDUZ7VJHWJZDtU8BTXoXiU7NHkmCeW6TBlA6qa4jWJ4tUuIpokKztGFlz0LD0r0Mvb+Lo7nqZU3rO2jv8nuS+HYpPMlhkXk/MOevrU3iSz8uG31GFFbYfLkBHB9Ko6FfwWU7x3alX/hk9PY+1X7bUXe1ubG4haQkFmPUEd/8a6ZxqRrc62/M7Ksasa/tEtNPmup5vq8HlXH2mMYjkOGA7Gqe9uHQZ288Vu3CReaLOQ/u5gdp9DniqljBLZXeJBwDtYnoRX0VKp7mu5z4ugvae7on+DLXmbfKuV6rhjj071rKWN7DJEjOG6hFzz61WkhjCKyD5HGAPT2rrdFVbPwvHcD/WNIyKe5xxXPJ3VyMZiPq8L2vexgi2luNVVLmJgh+YoWwQo6Z9K1U07TFY/6MGz2YkgfnWe14IxM6kmeQ53en+f61Ha3sivsfLd8962SaSRzwpzqx55bs3XfyVCQQhR6KtVJWZmAlJQ9ctjBp8N3GRli34059RtY1JkJI7AUAqclokJI/wBmi8zJyOxNZd1rDxsN8Q8tu4PNOub1LlHhSI7W7seaoR263Ia3mOCeM/7XY00jqhTSV5ItbLS8UtCwWT9fyqiQbWZY2Ty36o6j5W/wrZHge+ayjvdL1GO4yuWjYFWDDqB1rJs5Z5S8F0mdnB3DnNaK8djKM6VdOO6W6ZreHrua6F0Jm3NDMYw3rwD/AFraHWsnQ7K9h0c3sVmphldnDGQKWGcA/pWnY2WtX67ooreBCcbpHLH8gK9GnOCjqz4/EUJOrLkWlxl08axOZmCx4O4k9BVHwzHK1jbPaan5Xmfcim4DDJAx7cVsaj4bkhtTNOGvLzH7pWH7tT67e+Pek8JaPI1oNIvJ5LXUliKy7lz5kZOQVz0wT2olUi1oa4ak4XbNBdO8SyEKl3Gue4P/ANarNl4eu7XWdOvdQ1PznWUkJyRnaR1J9/SrcOh3sAJ8qJh5XlrEk7AB/wDnrn1PpUN5a/2asV9dXNpbzwLgHJc3D/3iOMH8+prnnqnc6uZtcsWteyOg1p99nbTLxlsj8qhL5kLdpV3j8aq3Fz9p0i52qwWNhPET/EnBP5ZqbRT9siiH8UDYb3U8j9a4GjktyrUta5cNY6ZBLn7kke4eq/xfpmsDxfboZ/tMYwykJJ78ZB/z6VtanjUNRisesUfMnv6j+n41h67Is0uoyo+6Pag/EHH+NIUNGjBs32zfUYrqPDk2LiSMn7y5/KuRRsOjehrY0q58m+iYnjO0/jUTV0azV0R380lprl7GpAjdy/TqSB/9aqvm5uVder8H3Pb/AD7CrniQKmpySP0baQcc9MH9SKzEeNeCTg+nWu/DyjKjyszjBvVHb6DdxQzxSysBE6ZBNddaX1vcEGJtynvXlNjI1/FcWP3ZPvxn0YdfwNVZNfn0OwuXdmEiKVQH+90FdEMTZcrIlgnNt9TyjUs3GtX8mOHuJG/NjXUeH8xWEw7knAHfiucsIjJl2PLetdloVuVjJb+I/KP614uYVU4u59Pl0OVanR6ZarFbxL3VRn61oLFEYiZB/FwMZzVLT1O/b1zV7UG+y2mQu5uuK+XqSbqW7l1L8/Kmclqcs0t/cWlvLiKR8uuMDin3c8dvbLax/eIwfYf/AF6QqsAaaTmdzn6+1a+vaLaabo9m8xJ1O5O+TJ6DHT2rvdSEZRiz0nVpwlCm+v4vueT27vEskZyY3A/A+tOtXmhn8yMkofvLV4QFrR5HBWWJzHNEwwUP0qCHgjjivfck7qx8+oybjNP0NCWVJVG07lIzgjoavaPotvqFjPMt0Y5UO0x9foazI3iXBdNw7gcGtLQLG7trt7hZVktJVIPPI9OK5mrRsnY9CF27tali38tD5LPuK8Z7GpTKltMHTBJ6j2qlL+6mYEfWiFwWO89OlYTpq9z2KbctzSuU4WVTw4/OoNrg/KTx6VJYSefm0Yjn5oyex9KcCquVfgjgisLuPus0TcfdYizyp1bcPQ1Y86F4wSrRt3KVWZuG5wCMdKniXypU+45XDeoPfmpkluRJLcuabfTwmSLfvhlUqwI/I/hXc+F9Qkktl06cgCNSox39Kw3utCvbQ/8AEvNpegcNF9wn6VHYSyuUktTtaA/vnA/h7H615eIgq0HeNjxMXGOIg7w5X59+/wCh1ni5Yf7DllZN3TKgdcV5tBpxuJA7E28ZOQvVhXZa3cXNwgUq3k9QOxrEjsL12EkcLLGO7cA1GBbo0eVsjLm6FBpytcZrCab/AGetxZ2ha6iG2RpeSfeuWaeeR1ZrtBk8qARXVrp9+L1ItpkWQYYL0HpWRq/hy+sJ2LQ/ujyCO1ehhqlOPuOWvQ9TB1aUP3cpXb2uchqkRaV0K/PGcqR3BrSIWeEwH/WKOD6im31pcAi7cAgqQeeuKz7WZo5xySOoJ9PSvbh78Fbob1HGLu+pqWMfnD7J/ERuXccYrsb6ylsPAdupI3rKxz9Sf8ao+ENEXVNTjvpCVsbUmSU9N3H3f5k16Fr+lvqHhmaAjEpUyAAdO+Pwpc6urnzOa4qLrRpLZbngM7uE4Zhzxg1QN3dwyZ84t6Zq/cDIZehBwRWRqWUjz3HSvTcNT0/a+7dHT+HLy912eSzsbdpZ4l3MOORnHWr97a6nZu32vTJoSvUvEcfn0rovgHpqQ6df6m6fNLII1Y+g5/mf0r0XxZqtxpGnC6toElYuEO/O1R74rCdlJpHl/wBrVY1vZqKf4Hi7Q6hGqzXNlJDA/wDq5WjIDH0zVXUZViWO65CsQjY7Hsa9F1bxRpOo+Gp7K8gkW7c7kQDdhvVT7e9ecjdLCbYIZHkIVVAyS3bHvmny7HpYavUqxk6keVo1rbxFf6bbrcae0bpc/JIkgOA47j0OP5Cm6Fbf2lq0Fo7EebIGnk7Ad66Ww+HOrFozNNZ+Ufm2KxOGxjnjtWnqOh6f4XtPNubSe4jxndBgDd6FjyPyqnGSWqOWWKwzbjRd5S7GvaeHtIunwbie4ii+VQvyoPYV0EGn20CqkMSpGgwAKtadDAmnQCGExIyBth6jIzz70jZQ7T0PQ1uoJI+dqV5Tla7sRSwwojS7PugngZNcD4suL+5tob2zsbiBLIEyXBBQkNwQoPJHvXXeJbqW20C9kgLi42Yi2fe3E4GKyfBK+IZILhfEETvFKAYzMQWHYqV9KiTu+VHThv3cXXdnZ7N7ken+FLCS2ine8upXlUOX8zGcitS38P6ZbFXS2DyAg75DvPX3rYgtorWFYYVCRLwq9gPSnsY40LuwVRySatQRjPFVJX95mbf2jlFeAAneodD0ZScMPyP6CpbO1ttMgWGIfeONx6k9smp4rpZrX7TGjbCCVB4JFcjdyz3Fw8ssxYochVPyr9K5KrTloZxTloa0UtvZ3ckMQNxeyMQQOAvGeSaoHwrbzJJJeCWVpW3uvmHaDyePQcmpbl7mO++12oTz2jSRd44IPB/n+lS3GqeINODSalpiS2w6vD1H86dNRtdm0ISl8LV/XU53U/DU1uhfT2aYD/ljIefwb/H86yIpS2eGV1OGVuCpHY16FYalYauhNrJiQDJjbhhXE/EK2k0yWHXIQTHkR3EYH3h2Ye9KUE9jRRk5cjVmT60RdRQPkZmg2E+hHf8APFczbs8mCePUehrWgukudOheNtyqdyn/AGT/APqrmdW1WDSLqeKRWaRjvjRe4Pf881WHXLeJNKSTszea6iskF48ix7OrHuPSsbXjH4lsHvtKdvMtgTcWx4O3++o71xdxf3N/ctJcSEj+FOy/St/wo93banDcWce91PKdmXuDRVtT95s7IJ1fg3ItJtyWVQm7HQV3GnaXcxp5txwzDAQfw1qafoFtBfG7jH7uQ7kBHCeo/Ctq7eFE5xmvmMfjG58kT0li+WKhTXqZthD5bZPX+VU9dvFjt2PXkKKvszeUcLwf1rmtdju7h1VYWMSfMSO5rjw8FOpeRdGPPV5pGQszxXcV0QJCjhgjdDg5xV7VNRudVumu7lvnPAUdFHoKohduARyPWlAIGeor1JKLalbVHuOEHJSa1R23xH8Ki71K51bQolF2Rtubfotx7j0b+deM4eN2DIVZSVZW4Kn0r6HFy0lzKznO9iRXmvxR0fa9lrFpFtadXWXaOGKN1/Ij8q9qUlObaPjcLOVBRpvVHO+FdPvNYvjptisbTOpdVkIGcdsmuwh8DeMrdXjj0+IAnP8ArVxXAabNqdmF1Wzimj+zsD9ojBwh7c9q+iPh54xj8UaSyyf8hK3Ueeu3AbPQj61dPD06mk9ysZjcTQtOk04/kecSfD/xZKwaTTbcnHJE4Fc7q+hajpF2sWo2clszfdJOVb6HpX0laXYnVkHEi84PcVX1rSbHXtOezvE3IehHVG9RVSwVNx/dvUyocRV4VEq6Tj1tufNUYaGQclWByDWvdiOaKO8Qct8sgHZq09X0C40W/awvF8yPOY5OzD1pILCMHYMiGQYdT2PqK8CvPklaWjR9f9apzjGpF/8ABRjrHuTrT4yqJhTliav3No9kfLkAPow6EVVgTfOqIm6RzhQOpNQpcyv0LVRSjzLY1dKWWaU29tGHmlTZuI+5nqfrXoGn+HYLO0SFTncP32f46k0DS4NH05PO2ecfmkcjoT2qHxD4lttNgAhZZJXHGOg+teBiK08RPko7fmfJ4rFVcXV9nh1p+Y6e2h06ASO4YA8FuT9BVJnub6IywhYY+gZxk/8A1q4268RXM5LSyFkZsqD0BqzHqk01kFdzsU5ABrdYCpGPNLc6lltaCUp7nRuos40eK6+0SH7xYcA+1WNbv4pfDsjSENcbegHI9/pXJfbJI4CzMWGMjPaoba+Yo7XBB8wbWHoKuODbfM+hawDbU3rZnOzTvLA8QA2ht2a5/T7W4vtRisbVS0zvhfT/APVXU3NssUzDbhTkD6V1fgHw4um2zanMM3NwMRj+4n+J/livpMPVjGLaO7NMQqVJOHU6bTNNi0/R4dMiOMgK7D+Jj94/zrpIsEY7dKzLRSzmZ/uIMKPU9z/n3q9G/IFLc+Km3J3Z8+eMdPOn+KNStwNqeaXUegbkfzrj9XyIyF5YnAFeufF23VNctbgAAy22D7lWP+Iry2NFm1S2DruQSbiD3xzj88V71B81JSZ7lKu3QUvI91+GNutl4XgtgMMvLfXJra1y5SZG01EWWWZfmVuVVfU/pWJ4fL2tzBajugJH4YP6iqf9pRQeKNXlncpHHGoyTxx6e/H8q5HG82mePG9SXN3IX8EyG4/cX8fkY4aRTuA9Md62NI0jS9DU3nkq80Y/dyP1LeoHQVXtpPFmsBptB06NbWQYS4vH2RgeoA5b+VPFrq3hq4srrxfHpmo2E8whkmRXJgJHDYbjHrxXbSw0pe9sb4jMJpeylK/odf4fmE2lwy5GXyxx05Of61pSxRzxNFMiyRsMFWGQar31tHY3sUkCrHbzrsKKMAOOQQPcZ/IVLFJzg9K1lHkfKzzU+ZcyJ9vGBVK7idlAXqGzzV4UEA9RSauKMnFmXsbd0yamWFjyzEewq7sT0p2AOlQoWLdW5hazewaTafaJY5JMnCqo6n+lVdM1KHVREQq/6kSMgOQpJIIP5V0xAPUA1gSWyWuvM6RKiXEHVRgFlb/7Ksq0ZKLaZrCpCUeVrXuZuv3kgIt4jjJ2ge9Z7R8pCnUgJ9Sf/wBdT3qb9TVm5VNxP1q7YWriT7VIuQPuL3ZjXG9DZNRiP1iEoFaPACW0i59MYxXVYyvNYs8XnCG0JBaQgt/uggt/h+Nbea6sKtGzlqu9kcT4s8PGBG1jRs29zD87rHwGHc49f50l6i6/4QlkZV3zQE49HA/xFdq4DKQRkEYINcf+7sPA95KrBEWKYo31Jx/SnUppNtHbQxEpwinumrP1PJ9C82ziWFwTbzL5sJz0wcMv4HB/Gq/i/T47uK1u84ZfkLex6f59667VtEudO8M2N5EvmLDGs0qHqoI+bH4H9KyDGl7p8kBOe6n+VYapcxrWcFXcls2YPh7wrHdjzp5/3anhUxk13llptvZRBIkWNfXuabbtZaZYrEnLMuVHc+5qzaRtKgmnJZ25Hoor5vF4irWbcnoe1GChG8VZfmaENzHCpQ5MbcMR/D7/AIVVmQiYhxkqevX8RTzgADHAqN5ZJoJLWFM3MS7oiRwy/wB38O1c1KHtVyLfp/kY25Jcy2e/+ZBdXKxRlpHCqOmayk1y0MpiZX+uKyneSWTMrszZ6HtSC2YyEhQTW8MJBL3j2YYWEV7xvmK01DZuwAxxkdRWJeRiJ5IwRhWxkUp8yLCq2D6VAd8gI6npRCm4PfQ2o03B3vod3HeqX3+grQ8U6PNqHgaxmtk3TQky7cdVfIP8wfwrmWxDA4LEnH516n4ZlB021hZtw8pQM/SvcwrhOo4vqrHymZXowhUj0f8AX5mR4J8PCy04reQRtHPbojIyghhjnIqyun22kkWFhax2jlzLbvCoUSeqn3x+ddWBgADpVW/s4723MMmVOcq6nDI3Yj3r2XRtDlR8/wDWpSqOcupnxtHcqjY8q7HzKw4DHv8A/qq9A5YCTo38Q9a50T3FnN9k1SI73O0TKP3dx6H/AGX/AJ1p6dceahVnIbGGPr2Df41wyleXK9GaVKfu3WwzxZpKavpLKqgzx/NGe/uK8ijkMZMMp2snX6V3er+ILu01QadcqEeEhtw48wHoRXn/AI/kWw8UXqRMNjBXAHowzivNzKmq8uZKzWj/AMz6LJFOC9jUejV1+oX17HcwLBj54+UPqPSrHgyzZ7l9Uk+6h2xA+vc1xr3qzTRRQsQ7EAY9a7S51FdNsBaxsBIq5O31ryMRSnCn7KH2v6Z7taLdP2NHr/TNfWtbeRxaiUIqnJbPWuV1W/a/YQRoSF7hev0q/wCHLJbhft1wvmZ4QNz+NdKwSMbgg4GOlckZU8NLkirtfmcqlSwk+SEbtfmeZssjyLGflwcc9q6GeJNPAO7dE65U1SulUX07Ft2D1FCSPfW3kMxLRDKgntXpzTmk+nU9Wo3UUX06jLi8MmARiMdPeqoaSSTK5wB0FNYcbQec9PStXSrXZCZ5GwWPGOwrVqNOJcnGlC6NHw3ZLrV1DbXHzIhy/uo7V392kmVt7c7Sx2gj+EetcJ4U3vrSRWcmxhulZscbfT9RXpsABV5mGGXj8aF7rPks4qNV7dLbFdU2ARrwqjAFPQ4kXnvTmYYz3quJP3yj3rVSuePynDfGGAltLuB/dlQ/+OmvLvD1k91rMe1CyxjJwM9SP8DXqPxqkKWmlhTgs8n8lrlfAjSWTf2hHgSSSY56YAP9TXt0Z8uGj/XU7ad1hWz0qxiXTLd9X1X93tjxFHj5sf4njiq3gvwiurXM/iHW4leG4YmK2PRvmzlvUegrmvE+p3t29sHmMlw/yQJjgMxCg4+te16dDHY2dvYR/wCrgjWNSepwMV1YWinJykeRUqShFcuhbVVRVVFCqowABwBWb4j0qHXdEvNLn4EyEK391ux/OtLNJXpHF5nE+Er2TXfCj6fM2NX0tvIkDHkSJ90/Q4/nWjaz+fBHMAV3DOD1HtXM6kj+EviRbasDt0rXD5E+OiS9ifx5/wC+q7C4spormU28TSQSHf8AKR8rHqP6/nXNXpuSTW510ZqOj2ZYVuM0jS46VEEvWX/jykUDsWXn9ad9jvSCWEMQ9WcnH6f1rH2c3siuaHVihyepqZMk7RyT2rJvde8NaPGDqeuWu/ONkb7j/wB8rk1l3PxQ8H2gxDPNOf8AplCf64rWFB/aZnKpf4UdTG4dQwzz2PaqOsssUMNw3SOUZPseD/OprZ1nVdQtn3Wd5Gs0fsSOf6frWbdzrqTGGI5t0JDv2Y9MD6VzYhKCaZrS1aZWlsPPnfFyY1J3YjUbvzP+FXYTHFstogWI4yT/ADNQzzCNNkI+bpuqKz3LdordVQu/48D+Rrz4x5mkzp3Rq20CxM0rfNMwwze3oPargNU9wYYyfzqnKl9E++0n3r/zzk/oa7FLlVkZ+z5nqy9e2f2sBWubiOM8Mkbbd344z+VVtS023vLCPStoW2JXcgH8CkHH44FSWWoJcO0LqY50HzI39Ku8Zz3qtJaktzg0n0Kd1bxyxtGyKUI2lSOCPSvGZIDpetXemOpVY2Pl57xn7v8Ah+Fe1zzQQ486aOMH++wFcF8R9PFzYw63pwWaa0J3+UdxaM9Rx6dazlFM0g3bU5aG1M+oLEzHafmyfQdv8+tdPEvlosbfewDj2rmrC7WSKG7hO4YB+oNdXYwB91yz7vNxtIH8I6V8xmlN053e36nt0MX7Skoyfw6EE5CozEhQBkk9qwJNWdblXtlwUYHcerVoeIJdzm1i4QcsfU+lc8V2tiscLTSXO9z2MLQjKF59TW1GwF3cR3lpgJP98H+Fv/r1YW0WNNmeg+YnjNVtMeW2HlSH91OCUPof8/1pkFpeXLyXFwxCE4Ck1tio3tNO0X+ZhSqS1pTl8P49iw/2SLkmHPXgZpBLAxOC3I4AXFRXEAjwB0AqvM+xAQefWuT2alsdUYKWzKWt3zKsgiY/Wu88Oa1JB9j8xvkUDd+VeWRhpwd2fmNd3CUhityfVc+9es5qm0lucmIoxq0+WS3PaFIZQynIIyDSmuY8M6yJI47GYfOOEbPUV09fSUa8a0OZHw1ehKjNwkQ3VvHdW8kEoyjjBrnvIuLEP5oYAH/WgZH1x6HuK6equoRmS1fDBWUblZugPv7VGJoxqRv1Q6NVwfK9mcj4o0JvEkFpJC32fUIB8kg5Vl/qK8R8b3t5c61fQXgRLyNyuV6cdgfSvQPF3jO+0qO4TTJljiI4BXJQkcgenNeMX99JdXH2iVN7kli27GTXl/xHc+py2MqKvPbp3139DT8KsJL2S6nTi1Xdj1boBXVyafPdqZTmRj8zEdq5/T0+z6PFc7cPMweUew6V1Oh6gZISkBxu4yRXm4tyc3OHofQU+anT5oO7/Q6DQjt02BVGFVcc1Yvm227Nv/hIGPWmaTEYvM848HoPesrX5ZGnMaHEangeteOqPNWZ50Ye0rtL1MmS3mZDMitsPfHWp9PhERDSJ85ODnsKsreQ+QkErBdo6dqr3mp26RlEUsexHSvTXPJctj0XUm1ytBrlvBAI5Il27vvH1rHe8k8vy43Own7uaGuWvFeKWQknlfasrcwZ4v41PIFdtChaPLLVoPaezgk9Tq/AeoFNemiij8xp4gAQfubT39uf0r1mSYLCkQb3Oe9ec/C/TEgsZdRkQCSZiqseu0H/AB/lXcA+ZLyeKdeMeay6HymKn7as5lreWAA6k1BEd1yoH9+k80JL7dqdp/z3aexzWUUc01ZXOF+N7caMmf8Anscf98Vz+jqYdMt1H3tufxPP+Fb/AMXoTea3otmh5Mbk+wJHP6VRi+z2kySTEJbWymVyegCj/wDVXpc37mEF6nTBqOHiWtNtkn8c2EVy42wTxqqjuUG/8s17M0gLE+9eIeBYLqe/PiG5RgBMZdmPmOf/AK1exwXEU6B4nDAjOO/5V7OEkuW19TxMRBpp20NFJuzfnUu+s7NMLMDwxrrOaxX8YaJD4j0G40522Skb4X/uSD7przpLH4veWluL+FEQbQ5dMn6nGTXqCXDD73NTi4TuCKQ07HlX/CLfFC6B8/xOIvYXDf0FIvwt12+/5DPiuSQdwN8v/oTCvW0lRuhqSiw+ZnnGn/B3w9Fta6vr24buFKxqfyGf1q/r3w50IeHbqDSNOjS8RS8TOSxdhztJznnpXcA4qtql61nYSyrzLjbGD3Y8Ck7JXYk5N6Hm3gP7bqXhyBL9Z0hRysUYfahUdAF6469TXYssNnbjeUiRRjsAo9KpWF7p8Gr2Wj+cReXEZZVx91V/kTzWjKkJupx5fMb7ctyemf615EoTqL2j2O5Nc3KjOE3nDNrCzejuNi/4mqWpXv8AZlvhNtxeyfMI84L/AOAFad7OyAhOtc/PGpkeQj52+8x6mlGCidMIjbbX79fmu7aEggZSJzlfzHNdFYajBeQiSF9w7juK5CePFZM2oNoszajvAiB/eR5xuX1+ta+zbV0U1F6Hf61FM8AurL5buLlSO47is+8v/E+oWgj0/TfsxI+aZ5QM/QdquaZqMF9axXNvIHilUMrDuK14ZOK593vYrn5ErxTt3PKbvwX4ouHee58uWRucmbJrJey8S6A5uPIuYlU4LDJUj39q90BzSOAykEZB4wal4aO6Z2Qzqr8M4po+ftFvwL2W1aMRrJmSNV6D1Ufz/GvRPDt2hhNpKfmTlD6rUHjfwbHdwfb9FhWHUIW3hU4En4etc7pl5LsjlC7J0OCjcYYdVNc+Mwv1mi4P4kc1WVOM1Up6RfTsXLpt80rdcsT+tRfZzMwEaEsew61dSKGRvMe4hRGG4Luy30xW9pM1is621uFZ2H3gpz+dfP1Kzpx0Wx9DPE+zheCuZuo6XJ/ZgbOJIVDqB3x1H5Zqjb32bGRCclMH6g10999oJeNY1jjU43sclvoK4W4jeCYxAYyxTHt2/pTwf76jKEumqPOpPmqxnLqxLi9LPjJwOMVX3iRSM9Kkeyf77cZNRyFYya0921on0kFDaJz0cxjkjjVxv64zXQS3c0sdm5JxlRxXBxTGDVFaQjYW5J9DXcWZjns7by+0gGfXmvUrU1C0n1PJp1faXiuhuWuq3Fpe20v92Vefxr2vT7pL20juY+A4zg9j3FeKXaW8Yi89guTxXoPhrUBZhYpn/dSqGyf4TiujB4lQlZrRnj5th1UgpR+JHZ1U1ONJrGeKRiquuNw6iqja/pa3C25uk3McZzwD9a0Z2jELtLgxhSWz6V6vNGpFqLPneWUGm0fPvj7Spre5E84DWszbQ6sCM47jqO1eS3Mjw3U0LcoDtr1Txm0t5qd6TPcNal98MfTah6cfhXnjWfmO27r3LdTXlUZwUmfWSUo0Ia6vU09P1WN4YbVk+TywmfU4re0IvZkAtlc5H0rkobPaTgHGeK6O2klNqOfmUYOR2rDEUo2tHqethMQ5x5Z9Edk9+0ce/dwBk+9Yt1dyvcGc8p1AJ6isZZ5ApV2IGcYJqaa4d7XZjlOR7iuenhFB3LhUhG/KtSzc3aP8wTFUJZtx4FNCSrGpkHDjIqtcSKinb1A79q7adNLRGdWu4xuyZJDHLuHUGmX0siDzLUZldsADqTVIXZBy4yPUVb8P3AuNatIFAIFwrjf7HNbum171tjheNXK4p7ntFnCun2NvZIR+6jCsR3OOaf55XmqqSmRQ5PLDNU7678srDFzM+do/qfavPauzy0i3BcGW8mXcSEP4Dgf410WiJud5ewGK5HSVMduS7bnZ2Jb15rtrQpY6WZpeFVDIxokrGOIdlZdThfFQS58UtcdTbxeWM9v88/lXBapfRXV9NHJzYWw8ybB/1pXov0z/ACrT1/Vwhk3ylZrkmWVlPMaen1PQfjXM2Cm6v7S1CEG4lWVowOFRTwv5Cu2jCy5pGzWigj17wuHttNiS7jCTSDfIq/wk9vwrq0bT5NjSIqyKMBhwfzFcvAWYDP3unFa0fCitYTad0RUpRkrM2VNugwl1KB9d386ky23cJVlHsNprIWVVOPvH09Ky/wDhJrOe9bTbK9thcjjzJm2xg+me5rrp1qjOOeGidQ8wjTfIjqg6k9qm3L615zrmkeLozJeybp4xwDbvv+Q9eP8AAVb0rxeY41XVI+AOZEXB/EV3UqjktWYTw11em7ndbzng1ZiuSvDVlWF9Z38Qls7iOZP9k8j6jtVutjlaa0ZqJMj9DVLVIzLJAf4Id0x9CQMD+efwqAVIJGwQeQRgg+lJq6sJaO55545gTw74h8JeI1yI1k+z3DnrtPc/gzflXfXy+XqErdpY1f6kZB/TbXJ/F9PtngqZyvzW0ySg/jj+ta+mXv27w3oOoFizS2oRm9TtGf1WsasLU7I2pP302F2etZEx5NX7p+tZcrcmuGx6cSvP901wuryf2pqSRhd1nbk5OeGcVu+JNSkRV06yO26mHzSY4iXufr6CsqO2S2jjiQYAXnJzROpyx5UPqWfDuqyaPctGdz2cvRB/yzf1Hsa6KfxBrXJtrZEUexY1xjAZZCMqeMGul0TWr5EisYYI5pAPlkll2Agduhya5ZRb1R00ZRvaUU/UZJ4y16BsEq3+z5Qq1YfEaXcFvbaNh3K5Uj+dbDXd6q51TRIbiEdWtm8xl/4CQD+VZmp+EdL1uyGoeH5VjkPOwn5W9sdVNZ/vF8LO2LwktK1Oy7rb8DrtJ1mw1iPfaS/OBlo24YVyHjmwjsry31OFQiXDeXNj+9/C38xXFQtqWh6ipd5IJoiRiup8VeKtJ1Pwj5bzL/aDMv8Ao68tuHU/Srp1W/UwxOXxoyTTvCXXsVNMaCG9LXEZdJOnGQG/+vXXQXMUBSTymt4erNLtjX9TXlVrcalcGLc/2WNRgt95m96sS2RWXFwzTOOQ8jFs+4zXn47L4V6nMpWvucsK01D2ctbHol5rumHJ+2wsCcYgO8/i3QVyF9fW7aliMsMyoy575x/hWY7pCMHH0FV7yYyQWk2MeXOFP0yCP5mpw2XwoXcW3oaU5ttR80dPqE4IODXLXVz+8IBOM8VNJeO7FCGYnoAM0tpZMrG4nXDk/Kvp71yRpqktT6+mlSXKtzkYUtriVd8nynjJPSu40gxW9qsMboyqdwPB5rziJPJdXXO3uDWqS2AYm+U+navSxNFzslLQ8ChieS94Hb3XmXEq3PmqzA/dPTjtWndavcSCNSnlkL1B4zXCae9xnHmuB9a6ewvEMQjuUyT/ABY4NcUnOl5mrdGqr2szOkuLhpvJVmc8969e8EardNooTUBJIEXad55I7GvPbWxjh1CK9Ta0fIZfY13mj31nBdC1uBmG6j2jHYjpW1HFxulF2PPxmGapO6ucXrslousTQeW/loNgLDqpJrh9UtPJuXjwdwPYdq73xfCttqwBcMhGFk/vCuS8S3G0xTbQ2V4I6gjtUQuq2nUdO86Cb6FdRDHaxl3UkdfanQXtnC6jq3cVzD+fcxzTo+2MMBgnHPpVCRrpJdkgZT05616MMKp6NjeLlSSlFHa6gAZzKqkeqkVixXTvcnazDnHXtU0F5NMFSV9wCjAPPGKrrB5dw7KOOq1dKHKnGRrXquclOB1k22e38qFk3qNx9Pwrmr1Wju2Tfn5Ryp4PFW43baroxSQdCKbqDpcbJNoSdRhh2Ye1RRi6crdDbFVPawutGY8ynaTu5rR8K2rXev2axnBTLscdMD/HFT2NrNPIsNvC0j9cAZIrsfCOiT2ks94xj82QBFkAztXuB6k+vtW86qUWjy50uX3rm3FdkxIir+9xyv8Ad+tVxtgWe5c7nALMx/kKv3axwQlYwAWOWPcn1NZ0nzLHGf8Alo4/Ic1w2Ljtc3tBtvOktoD0UAt+HWr/AI4v1jtItMjb97cnLAdox1/wqfw3EkFpNqE5CxhTyewHU157rmqtc31ze7iZZziMH+BB0H9aUIc0jm+Orfojj/EDW8mvSswzHGiSOOzEZHP+e1bfge1WZrnVmG+aaUxwn+6i8cfjmsbV7fy9atUf/Vta75/rkkD+f5V2Hg6606w8MRXkpCpGzIVz0O4//Wrva9xWNYSvI7W2jSGISS+nANZ2ra9a2UZeWUIv6/gK47xB4slmPlWThM8hhzj+lef3FnqWpXrTzTvcuP8Aa2n/AArWnh5S96Wxduh2uo61f+IJTFBK9rpi9TnBf6+tSW8SpGI7OIKvQyMOtc/p13NZ4XUELKOFRhtx9PWtG31qWe58nylhhZtqyHqB2yK7ouEdEP2UonTadq2o6MgNtqU6D+4W3Kfop4rb/wCEo0zUx9n8QaKPMK5FzbcMfwPT8zXKkwRMCCZZCOCOTUcvmyhXAUFW4XuPXNU6cXqYSpRk721N620TLs/h7V47orlljDeVOg9Cvf6irWkeMtSsHNnr9m77PlEoG2T8V6H61x9wFh2zzSHzVOUK8bT7Vfh8Q3ssfk6pbx39ljG2c4lHuHHI/HNNc8dtTOdHmVpa/mepaP4g0nV2KWV2rTKMtC3yuPwNa9eHJaadfTY8P3ey5Bytrct5bg/7Ljhv51e03xtrug3f9na3G82OqSjDj/db+IVpGonocdTCfyP5HpXjC2F34V1aAjObV2H1AyP5VzfgHU4brwLpVtvzPbu4KjsoJAz9c/pXR6Xqdl4m0m5axkWaMxssqdCmQeCK4zwJp/8AZvh2HeuJpvnf/CorStEyo025WfQ6G4kzmub8R6wum24WPD3c2RDH6n1PsKs+IdYg0iye5mDO54jiX70jdgK4XTrW6mu5NW1R997N0XPES9lFcW+p6N+VGpa+cVR7li0p+8T3NWLvhlb2xUO75l+tS3RzGD6GsZLUSKE33galiY8FSVZTlWHUGql7cQwJmWQLjtmsu41llRWt0yrZAY+1VFJblNPoeoaX4nsI7UDUruG3nTAYSMF3e49axtW8ZaRYagt7oQkluC2J1UbYpl9/f3ArzZ/tN7Isk77tv3Se1WoUhhwSNzeprJxSehopNG7rV/qfihzeymOGNMApGm3aO3PVqo29vaWgyqhpO7U6wvB9pWNydkg2EfWqrybXZCDlTg1Fm2HPpa5oC5X04qS4vjNZLsGGhbaWPUqen9ay9/y528U62Yv50YH3kJH1HNLkJuh4G4F2bNSxhpbOeJU3YIcfy/wqvAygfNznsK3tM8tsBcAOCjA9s1FSfKjenDmZeg8t7SOWKJUDqG47VkX2oY3JApZhwXI4FSW5mYT6fIxUwORt6cHn/GmXVuUjLBefavGUIwm1I+ow95wUrnJW0JmiX7rKByCOtattYQwr+7/I0aTZeTuU5OO5rWSPa20L+Nd9Sd7pHzCk0V7eDruAPpVqEqF2N2q7bQqWGQM1LLYqHLHheua4J1E3Zm0YVJK8RtvO0Kk7vl9D0rUtbuKfG1sMvIFc5eCQNtjA2j3ot2eNM9Gz0zUyoKSutztp88Vaa0NrXEa6tzz+8DA5J4Nefar9olWS3c4CnK+1diuoeXFiblWrmdXg852lgOUz27V2YRuMrSFWox5G4GZo8ayafcQSEbvNDAfgaeYSyrE6htvA3VBZ2s0N0NxIB6Zrbjt57q4EMMDyTOMgRjP/AOqvRm7TunucNKSdO0tLaGQ0fklSowy8fhVyFlk6cHuDXTWXgXVbpw91NHCpGML85H9P1rqdO8I6bYhWaPzZF/if5j/h+lKdaCW+pnGryy02OBtNOu7kbreElOm48KPxNdJa+EP3UMt6xm8zJ8qLjbg45Y9PwrtFhijxtQccD2qabylijCEl8Euew9q5pVm3oE68nojHtdPtbOHaUiij/wCeadPxPUmrTzIiLsK4I4x0xVC7vVMe+VdkSnrmqZudvlpgbGPynPPNG+4exdrsmupi0oUHgcnPeorRWu9TfyxwuI1QDjJ64/lVe6m8pZJMZbsPU1oWdzHomnNfyANNjbEvdpD3/Cqt2Jk+VaFvx/rltomjxaUsu1ggeYg9F9PqT/KvCrrxRfS3JktlWNQfl3DNXPHt/cXNxH58rPJIxeQk/lXMWsUlwQIV68AnpXoYegoxuyacYxjqdboF9cay2oWt2+++mVXhfGAdoPy/qfzpIDLCGhdiIZmI8s9nA5P5fyrIsodR0m9gvkIEkbZAPQ+orodeCXSW99ZoUhuWaVB3VwRuX8D+hreK5J+RhKSjK6K/OMD7yH862dMjItxOmA0hwSewrE3gASNwR8rCuq0uN/LCqmIwOGYfnxXadCLNxbQfZykx3uy4UkZIPsKw10K7I+aWOMH5QwJ3H6+lb6orK2xsyoeGPerKlZ4MEYz1HoahxT3LjNx2OUtRd6Vcfant5fJOUfeTj2//AF1rDUraRxIrFN3DA/zzWomJYmik5YfK3+NZ0ljaTRukkSq68MV4z70lFrYbkpbojuGiSQBQZJPzP/1qqyo7jMzYX+4v9azXF7YyukMhmQfdQ85FOjvReSeXITCw/wCWXc/jWil0ZLjpdFh5Iv8AVRxhyP4R0FCaneKWg1ELf2bcGCbnb/ut1BoMkUI2jr/dXqazrnzJpDz5YHBA60NJ7mcknuaUJvtME2qeGb2b7Oo2zQf8tI1P8Lf3l966Ww8fWbaVtlszDdRxhY4g3yyn2PpXD6dcyWTmSKTy3ThjnG4e/tVbX9R0Wea3nsy/2wNudEX5F49fr6VjOPRmL93U6q2juru5Oo6nIZbk/cU/djHoB2rQzXHyeIZoLOERqhdhgu3qPQVkzaneXOfMmkYHtnArHQy1b1O4utTs7dlDzLuz90HJrK1TXp3LW9spjwcFuprllZs5J/AVfnckxyj+NAfxHBrOW5orJDxDNM2+Vzk92PNaEEUS2UgxuZGDAn34P9Kzo3J71o6ed7PCf+WiFR9eoqGh8xGXJpM0xiQSMYIqNiT3osLcm81VIIPI54q3esXZLlBhJRkn0PeswcVp2n7+3e1HX76fUVEtCoxRUMjYIJ4qS0k2TI+OVOaruCvJpquc4UZp8t0PmszcngSJw0f3JBuStjR1RsjOD0zWFZyPNZtHjBjOQf51sad8sJMY+cDmuStF8tjpozs7m5NZw4W8B/ePwx9aqXKgrsNURfSeW8bnhWzyaZ9s8xQpPK8Z9a82vQlFpnr4PEJXTZNb2sbk4kbP4VL9ilz8jAj34r3K78P6RdkmWyjDH+JRg1g33g1Ah+xMh/2X4P5iuurgMRBXjqeFSxuFnpJWPMhA6qAyN9R2qWSbEW0/MR1xW5qOk6hp+9p7aVUHRsbl/MVzvykMT/FyQfWuB03e01Zns0KS+KlK6KV2u2Pccksc8U22gkusLFuLHoFGc1qaP4Y1LUrjcT5VnnO89/oK9R0rQrDTYUCRqZcYLEVbkopIjFZjTprler7Hj8vhbXbxgIrTYOzyMABWhpvw71LO671OGInr5alz+uK9iuLD5MxsM56dqhvrVLeJGUktnBrpvUjHY8f6+5yVnqcTa+BNEXabvzbpx/eO0fkK6KLT9NsYvLtrSFB/sr1pzs56cVFKxrmlKT6jtKTu2Mlfcfb0qFxlfagHc3SnsMjAqjXRIpOMGq0xbYzAZwOlXpUI5NZl8ksm1VLGMHJUdzWsWEY3ZjzkLue4XcjDgYqpYpLcSO0cW7avQD7tJfvKt0MOPJGfkPY1reFoJpPNO0GF+ZN3fHYV0R1OufuwKNpaTXW648tvJjPXsPesPWrk3NzkMSqfLGvYeprt/EGomLTWtbaIJIc78HGPavOsktk9a6acLannufMzhvF7K08MBHzKWdj654x+lb3w4isptbiiu8CMAVznif5tWnZPmVVAJ9+/86yIL+4tJhLC5Vh3FejTXuqxnN2R798XtP0ex0pfspWOYdga8k8MXsKzNZX1yIraVhIruflSQdD7ZHH5elYV5q+o6lj7TPI6D1PFUgPM+d/uD7q/1qpRb3M4JWsdHLrEP2oyW1u8wLZLHgH6VuWnixTtW8tJEj9IiP15rndB0u+1Z/KsYWkI9Kn1G0udMm8i/iMbZxhvWl7RrQ6IrlW53+n6pa35DWeNkY+YHhsfSrzERSiYH92/Df415VFcPbTLNavtcds8H2+ldhbeKrWW3wLOZsDaVyOD6VrGV9w9oup0t3L5W2ZR04b6Vk6jMy4n3ezY7ispvEF3JGyR2ShFHLO+eKzHv76RdryAL0woFPnSJdaJsysQBJGcuvI96pXcUN2PNnZYlPO4HDfnWY89xtwJZMegNMuFXcjMhJ2A5ak6q7C9v2Jor/7BMUVxdwn+ID5l/HvSyXr3Ls0ULRkITljyfwqiZoQTzz9Kks7lDcqoBOcj9KzdSVtCfaSZVuPNl5kaokiVCSByepqSSQ5xjp2oUSSHCIxPsKzbvuRqT4DWgOPmR+vsRUIq/aWU8kNwpAXChuT6H/69NWzA+8/5CpuhlZa0IwZLPAGTG/6H/wDVRHFEh+5n61rWyssUqhFAdDjjuOaiUkhpNmfFC2MnirC5QgqcEcg1XE8h9B+FRS3MgbqPypbgal4oeNbtcAOcOPRv/r1nNIO1T6ZbajqYmt7S3muCVyBGpIBFbNn8PfFl3gmxEIPeaQL+lTzRjuwuc2zju2Kkt7vy3V0J3Kcg16Fp/wAIb+TDahqsEI7rChc/mcV0Nn8JdAiIa6u764x1UuEB/IZ/Ws3iKS6kOaWx5HdzI05P8L/MAO2as6XaXl+5i02xmun7+UhYD6noK95sfBXhiz2mPSLdyowDMPMP65rfjiigjEcUaRxr0VQAB+FZPFwWkUS6rZ5HoXw912Ybr14LRWHRm3MPwHH613ekeAdMslzcTzXLkYP8K/kOf1rdkvLeInfMi49WxVd9et87LfdOw/uDj865atWpML1XpAmj0DRYkMaaZa7GGCGjBz9c9a+dbh3trq4gZCjRuylSMEYPSvc7681a64iZIEJxxy2P8/WvCdfe5XXLv7dK0k4kKs5GMgdP0qKcebc9DAwnBvme59Y0GvKfEXxg0uzEsOkWc13OvAkkGyMH19T+lQ+Etc8YeIgupajqEdtpuflgt4grSf8AAuoH417tTFQpxuzwo4apLWx6tPLHEmZO/b1rn59E028vPts1lCGxgKB19z709rlWUHJ/E5NILzhgpwe1fP4rFVMRolZHVSp1KesHZkfnQwXBVct5YIwo4FS73eba6hcgEVVtWlV7lmDCJhneMcVSKtKjQRSBwuD5jdTXJy+8dKpps6wDZCFMntmmyiEptmw2O5rmbiWcBIhJI4QAfexz61u25knt185cH36mt5YiKWpyzoOCUmynNGpBZRxniqTWrOeelb3lIExio/s+fauWM7bmkMRZGH5G0dKrTkRqWJ4Fbd3F5a5bpXO30BnYYPQ9DW8KiZ2UJKpuAYTR7l6eneqN65giZz16Ae9adtbpDBubO5RgZOeK5fVNREt06Y/dJ0PvVU229DrhFSbS2RhXUbeYedzO2VHp7mr1tqjaPbLDvZhjhe/1qjc3CWwaV/mmbov90VgzTPM5d2yTXq0abtdmVao5aFy71G4uJ3k8xsMehrLvrxbO3eUjcygkKKc7EAbRlicADuat/wBgm6jWOU7mYhpcc++38gf0raUlHc50jgtOk8x5Pto/eyuZACOoPX+n5VZuvCxlj+02UqGJucMcY/Gt7xFp8dld22oRrtw4jKheCCMH+lX9K0Rrv7XYRXRtbriWNR8yY75Xt26VvCvFLmYSjdWOEntntNNaKTBRctgDv9ay549kIx0ArsfEPhTxMLKdjLbyKg3NHFnLY59K55Lf7RYqy9WWuj2sJq8WYRhJOzPQfgh4l0rR7ieO/wBisRwz4qD42+I9H1aeJdO2s+cll9e/9K8okiljc4DKwqxptkb26SOaTYGOC7dqpQ1uRJ636jbSWRsDca3rG90yxt70332nz3CtbLCoIZu4bJ4HTmoY9NEE0qhldUJG8dDVKba0zf8ATNf1NW48xPSxdg1qQLIslum5hgAMf8KeNQkfpAo/4F/9auk+GPgr/hK7qTe4WNetW/iX4Dl8Kot3byFoDwTWLeuhrGML2bOMmvJVXcQcf7Na66Pqt7YxX8EHmW3l5MnmrgfrxXKC4dxgmnreXsUb2UdzKtpLy0YY7ePah05NaA5RT0LTTKGK7WYjj5eantJYVlR5jKihgThMmui8BeDLzxNK32YAKo6mofHHhm/8K3KQ3aqQ4yCDmm6YKUb2uR2Q0+7u3jsYpbh8kgBCSR9K2V0bWG/1ei3oX1MW0frWFoR+yxPfJJ5VyozG46itOw8danbStJOzShxxGDjHv04rjlzuT5FojaUFFLU2LDw/rXmN5mnSRo6FSXZR1H1pU8H6ux+c28f1cn+Qqe08Y3l4okgnDL3R0G4Vbj8T3anLqCfoP8Kzft77Ee6twsPAF5O6h7+NBnqsZb+ZFd5a/DzS47aOSa4uJpF64IUH8MVy9t4ru/lI3rj0C/4V10Hii4+xA55x3QH/AArhxMqya1LUZte4Mh8BeGYxk2DP/vysf61cg8L+HLdt0ej2mR3aMN/OuSn8b6rl41gthsJG7BrF1DxbrRJLTKFP9xitXGlVe8iHFnsEbW9tGEURwxjoBhQKa+radDzJdx/gc/yrw5NW1a5fEW6RiOoYnH6Vbj07WbwZmuDFmqeFtuyOVPc9ZufFujW6F2lZh6gf41z978SbXlNPsJZ26Bj0/T/GubsvDMZwbgyXDf7XSt6201IQAkaIPYUvZ0476j5IoaPGOt3Q2xWEyN7IAPz5qD7R4ivHP2mWWGI/3OTiuhtdPbaGwAPVjitFIbRMCWXP+yg/rUOcVsjRcq6HN21rEdu4NK3/AE05J/Ct+2s5mC7sRoB0qw09rAn7qDGehNU5rieU7Vbr2XilzJh77NDzIYMInL/3jXgnjxvtHiXUXj4AkxwfQV6/JdJGSXb91DnzJD91Tjpmvn/UtSa51e9lUHZLMzAN15PFaUINttHRStDVhoFnca3rMGnQnAdsux/hUdTX0npUMNpbRWsChYY1Cqo7CuK8CeFodEsxNIg+3zKDI7DkDrge1dxZptbk8VOLqKei6GGtixLGpOTkfSqzLs53cVrX0thFbH51BOSoHXIrHZSfvDnrXLyuO5NN86uW7Sdn3Qn7nWpxHHEpCqBn0rNhcxt061dhYucv0rGUG3dBKNtQLxMwjcZ74FbMcsewYYYx2rHubZpyPLBHH8JwetWrK1kVMyZTJyQTUumpGVVRlG9zQVwz4XmiWWOP7zc+lVri4ESbIRz3NZ0kgPJJ3Vk4roZQo82pfuHSVcE1lzWpX5v4T0ohuCrc81YuLlI4mlkOEUZ57VMYyi7I6YxlTdkc1rl01vCYlbDt+grhL2/SMEISW9a0vE+p+fIxXoT+dcgxZiSTmvcweH93mkdVSpyrlQTStIxZicmmqfWopmwpIGcVS0Sz1LXNfkgheRbSNAHOPlJPpXoSslc54u7NbSA89z9tKfuYmwn+12Jr0Pw8kV15gCYYqevuKybfRTDpflxEM4zwv6V03htR5UJCgHbzivMrVOZnVLkVPQ5HxToU8+nyZUqEAn3Ke2cY+vBrlPCl79n1e0lkbkMYJCffofzxXpfiZJobsozts4IXPGOo/ma8u12xbTtRSZB/o12DtIHR14I+vT8xW2HvODTOe+1+p6jew4Yv2NeWa7oh0e+eaNM6fO+5do/1THqD7elel6FfLqukKSc3MICSjuDim3EQK4K7kPBBqKNV0pWL5bo8nm022ugG4B/vLRFokMYyZj+AxXZ33hK0uJGltrma0ducJgr+RqpH4LlJxNrtwV9I4wp/M5r0o4ynbVmEqTb0OUvPJsbdtiGRiOF65rmGiYW3nY+aT5mNe3WHhzSrOMr5HnyMpVpZ/nYg/wAvwrzW50ptPv59JuB9w5iY/wAaHoRWtHFwqyaRlKi1YreBfGl34SvWkj3NG3VRV34g/Ee88WxJbeUIoQeQO9c3qmkywsTt+U9GqhBaskqsUDAHOD0Na8q3DqRWwy1XfL+VW9qsSRiWZ5khWJW/hXoKdaRGdJAv3h90eoqrXFex2fwx8eL4Tmkjnj3RsMZFVPiT4w/4SvUQ6A+SnQHt7VxMtvJHKQ6kH0NWrBQLhS0IlUHlD3qJX2Q4qO7RYRmmCrGSIwOlJ5AQzSdTkAe3Gf61pxwqhZhGEU5bb2UVDBG1wjeUmVZic9qIKysOUk3coaazJqMJ3sqFgrEdge/4V6DNYNazNBPIhdTgkdDXL6fpjC5iVlL73G4L6d/0zXp+rW0cWnNcPGAuDtJzk5GAcscnt0FYTehsqPNqZ1paxbFMnygcE1rXDx28KxpuJY4VR1JrnofOhBk8w+Qo3bGPBNd74X0izksI7y5H2ieRPvN90D2FeLXlFatnVFuMbtHO/wDCL39xaXN8jRgR4Ozd61zN54f1OaU75EROgCnn9RXp01n9ls7+0sw0a3RUlgclSPSsVLPVYWUPNHPF33JyBWlCrLVt+hzz5rs5ayttY05NsexkHYHGf6Vpwa00bqt3byQP644rpQkJxlMH6Uye0imXG1SPQjIrZzT3M7jLa/aVAyShlPpV6C7cA559+9ZsenRRnMalCOwNWY05AxzWb5WOxqw3O4d/xqaJgz8mq9paSTA+X26gEZqQrsYrjaw61i4roVFouzJ5kY29uwquIpJFZFJRe7DrRbXBVsNwO+atS3SAfLyaj3loi99SlNCjWv2Yxq0RBV0P8QI6V87eLdJutI1Se1+byt5MZPUg9P0r6OgDM4LHjOa5H4m6HHc2K6tFGGkth+8Hqn/1v6mt6Nb2Urdyrc2jOturn7Tcb41CgDr3/GkF2UTZH17tVVhIgXchVG5Ge9aWk2cdzcLvVmXuBSml1Of4Y37GdOoliyC3m56j0p9tK2wLvyw4wD0rq5NEtWWQr8rEYXHGK5/+zDFOoBjMeCGJ+9modmVTrRqK19ieFGyGfk+lXY4HJyx2ipbWKNII9gzgYyakkkVFJPap5UYTm72RJGVhTPQepqjc6izsVQ/L61TuLlpW2g4WoOlRKKKhBXuy8su7qahmPPHFVVkbPFJNOsSGSVwFUZOax9m76HSrLUJJRCGllbag6k1yms+IGvH8uNmW3XoB/F71T8Qa019ujhbbCp6etYaPuwMcV3U8Okry3LUtbjr10di5PFZ0gxcrakGOdl37WHRcA5/UVs2Wl6hqc4SyspJ0DAM+MKBnnk8GtPxDpm3Vf7TaBmWLKSovoCV/oK76cfcdnqjCdROaTOcnsM2e4nbHnGccufQV1nw5tIIvD0l6se0tLITnknBx/SuQ1i883PmdAMBB0UegrvfhxAW8HQx/3nlB/wC+jXNVb9ndhU0ZoWse2MKRgjqKs+Ho2hv5LcbhGckfT0oUfOxxjLHj0q/YzCJ/mwF9a427lSfutIg8ZWfmWsdwo5T5T/SvL9dtWvNLvbaM4lRftURHUMnD4+q4/wC+a9cv762uoZ7TBJKnDdsivOtQSSynS5jUExvnn0rowtTlmrmajL2dmtTj/BesrpWpR+Y2LabCSe3oa9PuovLf1jcZU9iK8i1zTF0rU5MjFnN+9t1B+8p7fh0P0r0f4d6zHrunyaJdkLeQLuhY91/+t0/KtsVRa95FRq9S1jDfQ81pQ6ZJcqGhI5GRnvUMkLwytHKnzKdrLWnolx5MoiY/u2PyMex9K4+bQud7XRkzWtxA5SWNlYetY+t6HBq0SrKCkyZ8uVRyn/1q9TuFWWMB1DD0IzWfLY2XVkC/Q1UJNPmRj9Y6NHhs2iaxbu0U1g1xEOkkWG3fh1pg0OSTGNHkyf7ybR+tezT29kv3VkP0NZsseCSM7fSu6OMqW2DmizzK38JebKGvkWOMHPkxn73sT6Vo6r4bt7i1iFnEkM8P3COMj0NdhMu7uarMEVgC3zdlHJP4Cj6xNu7Ymjz6TTZYlC3lgT77dw/OoRYRs2Le0ZeQpKRHjPvivUYVk25SDBPeQ7f061LHBhhJNIZZByOMKv0FafWX0BzXU4bTfBM0s3makypaL/ywHLSH/aPYe1YEeiana6jc6bBatII5T5bZABViSv8AIj8K9eJrE1uEoYtQi+V4yEdguSF3Ag49iB+Zp0q0ub3nuTBqUkmZmleGJLCK21C+lWSadcxRRMQFBHfAJY4PYCrtzp01/GLWEFeFMjY+bIyCv8jirep6vDBo0NkjvNfI3+rVgAADn5tp4GCRjJNO8Eay8q/2bdMjShcxsoxken196itKp7NuPQ9CMZRhzWLEGjW8LLLdxKdp4jHQfX1rodPYF3VRhQAAPwqvcRNvbdkgnIqxpYAmZTXi13eNxP4GyKdXW5wrlc+vIqVJEDYngVh/eTHP4H/Grt4mHAZRmqjQnP1pU53RnpONyZLWxuWKRjEnXY42n/69I+kRg/dZfcUlpK8bquAwU5AYZx9K27e4V2CsME1s5tbHLPmiYb6ScHYNw/WqUtkY2BUDjsa7kKo6AVBcWcE4+ZOfUdax9pK5EMUtpI41SrOP+WbjoRxU8yu64lO7HSRR8w+vrWnNov3iJF2/7XGPxrlrxrrTJTI82Y923B6VoqkrndRp06+kHqXHtblRygkTqHj/AMKiUNu+6RTrO6nkJKbmRhke5/pWpblSBvUGtfaNLUUqbg7MggjbIx1qzNbeZbujqrK4wVYZBFXhbpgSLwDViJElUBh0rklUd7mU63VGfdQR3SCBHCup546VZ0iJrCQqzKYn5yRzUsEShmkKbXNQOx3EFiccZr2KsLRTZwKd7x6G015EMhRkVnSGJnYhF+brkdarAmnA8VzSvLccUo7FhnRI+wA7Cse6nMrED7tPupy52KflFVaztY3iurGkUfWn7aZIyoCWPTmlZvRGl7EUrrEjSOwVVGST2rgvEOuPeSGKElYVP51P4g1ebULgWVkrupOAqDJc1paD4FnmZbjWH8uPqIEPzH6ntXbQoKOstwv3OT07T73UphFaQtIe5HQfWvQ9E8FW1sFm1JhPJ/zzH3R/jXVWVha2MIhtIEiQdlHWrB4BraSE6jeiM7Vljj0l4oUWNE24CjAAyK52RPJtdbs5AMGGSeM+xGf5j9a6DWoZrjSryG3/ANc8TBPrjislVTULFJSCpmhKH1GRgj8DXRhldNGNR8tjxW7bepPrzXq3wpuI5/Dr2g4mt5SWUnnDcg/Tr+Vea3FobOaQ3afLCdpX+8w7U/wn4jk8P+IhqEpZrWYbLhF/u9iB7VxVIOcHFHZWV1dHtt3p06EzQjerclO/4Vj36iW24faUPKtx+FdhZ3Vve2sN3ayrLBKoZHXoQaqarpqXsY2BFlBzuI615225jSrWkuY5S3yE96xFaS6aWGf5lIOeOlddeaY9pEjLl/72B0rGkieMYddpye3atInc6sZK6OQ1W1/tPRrvTmQfaLRTc2z4544lX+TVxGl3t3pV/De2rmOeFsjPQ+x9q9TEEyah59nGJJ1HnLH/AH9v31/Fc/lXFeLdLGk6h58UYe1ul86zYj5Qh559SOmK9hS9pSUvkzz2lGbievW09v4j0aDVrRdspX94h6g9wfpVMI0ZyuCO4PevLPCHia68P6sLp2kltZfluIs/eHqB6ivbpLaDUbSLUNNdXjmUOoHRga8qtSdN+RcZ8uj2LGn3cc8Ii3ESAfdY8mnvayMeEb8SK55gyPggqwP4itG11S5jAVsSAf3uv51jdrYUqfWJPNpl04+R0Wqcnh+6cHfeN+HH8q149TjYfNGyn86nS9t2IG/GfUU+eRn7y6GBFoVon+uLzH0ZjirQtoIUKwxIg9FGK2N1vKSEZWNZclzb/a/s21t2due2a0jUuRacjLuI8HNVSK3LvTluQASVwcgg0DSS5++FHsMmtPaaDVramFtyQMEk8ADvXOanqzm5msrRRuQlJXYZVT3Hua3/ABhdxaZAunWDkX0wzJMD80Sex7E9K4QHa3kQDaF5ZvT/AOvVQ97Vns4DBKovazWhWZSIzbQqyqPvyHqxosGewv4btc7oXDYHcdx+VXjFukRFOV6k+tQTRg75cElm4Fac7Wi6nvezjNcstj16QJPaRXMZ3I6hgR6GoEUBg46j0qp4Huvtuj/Y3OZLfjH+z2/z7Vrm1KEnHI615FdcjcWfMN+zk6cuhcKLe26sv+uQYYe3rUa2eHO9sjsPSlh3IoZDtYdCKneRLhMZEc4GSM8H3rKN3scd5R0WxC9iFXIOTUVqxSTD9AetQPcyxXIQnParQwRuGOeta6pammtrS1NMXH71VzlCOo7VaHNcyZt/y28oLs2CPatezeWPMcpLcZUnr9Km/LZM5atHlV0WbuFpotqnBznnvXP69ZpcQLb3ajDKdjL/AAt610QlVlypzSTShkCEc+tb07atio1ZU5JroeRpLeeH9TCXW4AfMCehHYiu30/UbDVEym0S4yy9DTfFekpq1g0XAnT5o29/T8a8os7+50y9J3tG8bY5rS91c92lSjjoXTtJHtkUXICyHb6GpZYmijMinIHJArI8P6xDqtiJoyBKvEi+hrXBYxk5+XoRUOlz7Hj1VOnPlnuij5jkY3cUgptNL+ldzbe5il2JSwXk1VnmJ+UcCh2OKh71mzSMRuKkVcDcelKikngZpzNHHKIyDLPjIiTqB6n0FZ2bdkaXI3B2F8hEHV2rJubG81nEFsxtrHPzzMPml+g9K30smncSXpV8fdhH3E/xPua0kT0HFd1GjyrXcl73Zl6RolhpaAWsCiTGGlblm/GtdUqREqQAAV0qJnKdyPbxUTipmNRPSkESuw5rHurQ2kzXVsjGFzmaJex/vgevqO/4VtNUbGojJwd0bNcyszz7x34cfUdKXWdNPmeUMzRLzkdnH4da8hl7g19FLcHRLvzutjKfmHZD3/A1yXjz4di5I13w2m6GT557RB0/2kx/L8q3lBVFzw+YQq+z9ye3RnGeCvGFx4VdIrppLjT5jk24PMQ/vLn+XevdNN1Wx1Oxiv7GdZreQcOvb2I7Gvla8lMs7sQV5xtPbHarOj63qmizmbTbySAn7yg5V/qOhrjq4ZT1WjHOCbuj6pJB6Vk6npv2kmRGw3cHvXD6F8S9PuXittVH2G6IAZ8/uSfY/wAP0P5138N7FKqtuGDyGB4NcThKDtJGdnF3Ry8aS2d7FOi/voHDqPXHUfiMirviPQhrWnXWjR7dsn+m6VKeApPLxH06/kfatDVrcELcIOR1x3qaxZ7vTzbQMq3tofNt2fp3wPp1Br0cvmm3TfUis7pTR86G1nW5a2aJlmVirIRyCOoNej/DLxEmn3i6BdTl4Jz+5cn5Uk/uj2P8/rSfE7S9hj8RWUWyK9wlwO8cg4I/HH5ivOox8wIJBByCDgg+tVXpXvBm0WpxufTF5Yw3S5xtk7MKw5rOa2b51yvZh0NUfBfilNVso7eZyL6JQsgb/lpj+IH+ldZ9piYYkXj3GRXjyi4uzFFyjoY0LAZ+UNx3qZQpB3DLdsdKty2sEg3wMB7A1CImU880iuZM5+/guYbhrjnbn5WB6VHHdOriRjlgc5PrWvqltNcxosZHynJB71SOkOYF+cCbOT6VSR2QrQ5VzGxpGoG5Enm7TtxhsYzWk0hP3eBXO2kElvbiNyCQSeKnV5AflYj8arlRw1IpyfLscT46UQa9kn/XBcn8P/rVijGNqdK6vxfol7q8sF1bsrPCjKVPVv8APNcZYS7Mw3BCTJIUKt1zXRTeh9TgasJ4aMU9Y9C7HlEwfvnr7VTupk81Y1PK8mtORFjheY8nHA9a5xLed5SVO6eRunpV80bnbSi2rnffD24K6yEDgJ5JL/Tt/n2NemXcYEeVFeaeB7YfZ5HUEOpGWB5z09PavQ9NuWmhNtPgTqOP9oeteRi68amIlDZo+UzJXre0XzIVZQwHrVG/njLKADuB6mp7iF45Mg8ZqnexmVge4HWsox1JpRV0yIufNDnBParAbejxn5SwxVS2tpZ7hEU/n2rTFtvuBDCw4H3j39apzs1FGlSUVoUsShTFBGPPX5g2en0rZjVms4zJGzzuAzbf88VP9jVVkKRr5u0Df2zjrTbOGdJA0hG0DAAPWipo02cdSspq66AHEbIFUqwGDk8H/wCvU0rK6Bl69xUssUcykdD6iqLxyxP/AJ5rWMuZ3MY2l6kEjZJrzfx9pfkzC+hUeXMcN7N/9cV6RMDy46HrVO+0+HU7KezmH+tX5GAzsbsa6oK7sdmGxDw9Tn6dTx7QdYn0q7SaGQ7M4ZAfvCvY9M1CDUrVbq2YmNux6j2rxG9t2sr24tp02yRsQyj1rf8ACWv/ANkXIjnLfZZThl9PeqceU9vHYaOMpe1p/El956eaTFP204KK2Z8xcgZCaa/lQRtNcyLHEoyzMcAVLc3CwbRsaSR+FjTqf/re9VILCW5l+0amyyHOUtx/q4/8T71dOg569Ckx8ck16F+xhoLY8mZhhnH+yD0+prRtraKBdsa4zySeSx9Se9SItWESuuFKMdhOVhETNTolKi1J0rVIzcrh0FMc0M1Qs1KTHGIMaidqGaoWasmzaMRHaoyaGNNrJs2SsNmjWaJo5BlWHIrN03VpvDdw8F0rzae3K7Rlo/p6j2rUJAqlqEcVxCUfr2PpVU6jg7obgprlktDO8ZfD/RvGVoNY0KaG2v5Bu81R+7n9nA6H36/WvDtZ8La5oF6ItX06aGIN/rwN0TD2YcV6s02qaNM0mlT+U5bLI2dkn1FdXoXjKHVSbK4URXe3D204B3Dvg/xCu+LhW8mcsoVcP5xPl+VvMdmP8RzW74b8Savo0uLa4Mlqikm2lJKY9vT8K921nwR4O1hG83SPsUzc+dZN5ZB+nT9K891L4TX9uZjpWrW1zG4wq3CmJxz3IyD+lTPDu1twjiIS30Og8N+PNN1nbab/ALPdOMfZ5zwx/wBluhrp7KU2t/FJyq52tnsD/wDXxXiN/wDDrxbaQGc6X9oRTz9mcSn64HNMtPFXiDRpI4BdO5RAHgu1LY9iDyK4nh3TmpRL92adj37WrG2uEubC8IXT9RXG7/nlN6j68H6j3rxjxH4U1fw7+9uovNtCdq3EXK59D6H616l4J8RQeLvDrpcqguox5dzEOnPRh7H+lWUN9o6tGUbUtOPDwyfMwX+tepOnGornLCpKm7HiUszxtHbxMVMJ3MVOPn/+tXQ6P4v1ewdVnl+2W/Qxyn5h9G/xzXTeIPBVnrML6x4PZWcnM9ix2sp9s9D7GuAhtnF29vdRvA0RPmq64ZcdRivNrUeXSSO+lONQ9X0zXLHU0Qwu0UrjIjk+Vj9PX8KvtJMv3ZW/GvF7mbzpd4G1V4Qf3QOlbejeI9UgljgMhuEJwFl5I/HrXDKhbWJo6fY9NW8mX76hqlW+jP3kYGuTg8X6Sx23Mn2c/wB5uV/x/Stq3vbO8hMllcwXGBkeW4b+VYSUluhezXU1PPhf+LH1FXZYoIoITkb3+bPtXJW92z3YWT5UI27R610GWmwztnaoUfQVlKTHPDuLRNkZ4Iry3xH4b1GLULi7ijSSCWTKlW5yfY16Md4PHNV5bi3+dLiRAuPm3c1pCbWx0YavPDT5oHmEd1M9uFZ8lemas6Va/aGkKP2Jd844FdDbR6dqGtLZWllGtvFmeaUrkuBzx7VS0maQao/m4R5d+EUBcZOcDvWvI/iZ7csyVWLhCNjZ8EMkV/NaKxVSNu0k8Y5HX2P6V3M0RX96HEbL8yOf4T7+3rXlmmTm18SRMpP7zKHnng8H9f0r1uTbJARxyK+ezbmoYqNWPVHz+LTU0+5DMxuYDLGPnQ7ZI88qar2/zPlkVuO9ZtlffZr1onXdKp24H/LVOw+o7flW1cNDFJDeICYJh82O3vXdGSnDmiYTTpPka32IREcmVDtJ67eKgUmN+fwrdjjTaGXDKehFRXcKMmVUZrFq+xEa6bsyub9mkAT5ABgj1q4sh2qqAbsZwaxXRx/Dx7daS0V2ZrZt+085HU/jTk21eQ5UY2ujZ84NMqgMrEZHvUzsGQgjmorYKZGOxvl4UtU7rkcVvTsckrJ2M9o/vA9DUNtNHbu6yA7j0Iq/MUWHkYI6sTWBqlwDta3ZGYZLEHPFd0NHeJvBOp7pxPxQ06GLULfVYSv79SsijrkY5/z6V53cylgMdV9O1eg+LJDcTxCRSuYsY98mvOp4nivXQtkd/erjU9pNrsfT4aP1fCQ5up9DiqlxdN5ptbQB7jGWY/dj9z/hTZLh53e3tcrtOHmI4X1A9TVi3hjhTZGMDOST1Y+p967aVDm1lsfKJdxLS2WHLFjJMw+eRurf4D2q6gqNBVhBXZYGyRFqwvFQA0/dRsTuTbqYz1GWqNmqHIqMR7PUTNSE1GzVm2bRiOY1G+cA44PTFMeQDvVSa6VO9ZNmsYN7FksBUEk6r3rNnvic4NUZLhmPWoudMaXc1JrzsDVN7knvVEuTSbqVzZU0iacJMuHH41i31kMjeu4A5Vh1U+oPatIyovVwPxppuISMFxitoJkTaRDp+s6rZEI0wu4P7s33x9G7/jWovinAYXOmy7ezQMH/AEOP61gXk9hEC73MUY/22AH61h3PirQ7YkC8EzDtCpf9RxXp0edrc82rTpt7HoEHijQ3cIdSW2l/u3KmI/m3FaNxBY6rErTR2t8n8JcLIPw6147qvieOWNYodOLs/Q3IAVfqOa841i7knncRpHAvUrCmwGtpSSXc5lh29dj6etdM07R7g3unWlrazt8rhCEEi/3cdK6lZ9PezFxbhbgsOCDkCvj/AMN6c+p6jBA4DwqPMkPXjtmvadJluNLjWOxuZoYgP9WGyn/fJ4rCVRfI0+qSkrpnZz2Y81rqykazvf8AntGOT7EdxTrs6XqsP2fxVYRrKQIxfw8Z9Mkcr+PFZdpr4YBb2LDf89YxkH6jqK1RNHNHujKyRsOo5BrVOM1oYSjOm/eOV174X3sELXWg3i3sR5WF8BiPY9D+lefDzrCa5iuoJILmNdpSRSrKScd69usbmawcNZyeUueYTzGfw7fhWnPfxainlXel2swIwRMQR+orCphIy20NqeLnHR6nzixSQYbB+tOs7QRu12hZPL5BUkEntyK+io9C044x4X0kZ5zhT/7LWjBpFhAvyaLpsffCIP8A4muaWGa6nQscusT5wXWNXtyrx6hMGIwSxz/Ouk0HVfE+pCRIJZ52EbbdkYxu7ZIFe1taIW2w6TYj0ZlHX6baka01ApiOW1iP+zAcD9awnhItW/Qr68r3a/E8pju/Esbqt3BqKRqcOVttxP0OMU+906/1u5WKKCa0tFQE+ecknuSO5r1RdKLjNzeSux67AFH+P61DPa6PpymS5k2hh92R87vw71lHAKL5rj+vxk9Fr5HKrpdtoPhbUtT6XFxEEEjD5tvQfn6VxGkGOWWHc+HJB4AHJ4/mP1rU8f60+t3KWsBVdNiwVHXJzgkjpxnp2rjo43tpFGdrJ82T0HPPUgDkVdWEJaRZ24WFSMXKe7Oov4o4r5GiH7xH3gD6Z6Ae3evULRkltIZV+66Bh+VedXJE8lrcRY5VWLEgL145/Eiu60GVJNPRF4Efyge3avls6jzUoy7Oxljb2TM/XdLR3WeI7H6H0NLazXD2klrcfexlXzxmte8T7RG8KnEg5Ga5o3T+Y8E0XzJwcV5uExVSG2tgp3r0uSXQt6HrO2V4ZSfLxyO6kda6UMkoDowKkZBHevFrnVH07xHNDvaP5t8bH3/+vXq+gXEV/ZR3lqQD0lhHQN7ele/OCcVUjszkrUXT1ZpPAHGR97+dNiChuV5qzHIjjKn2x6UrIpOe9czVzm53syLySHLRyYJ/hPSpQHxzjPtSkd8c04GrpyS0ZDk2Ur2IyRFM4z0OK569t55IAkGyMK2GbP3h3/CuvKhqoJpypLln3R5zsxXbCdkdFGuobnnXjCzMbQzEq2CVyvT/AD1riNbtg0AuEHzDhj7V7T4u0yCTQrloY8PGBIPw6/pXk0oJyjD5CMEetZSl7OrdH1GXVFi8Lydj1RFSNFjjUKijAA7VItR96cDX1B8qWENShqrA1IDUisThqcDUINODVDGkSk1GxprPtrNvdUs7XP2i8hi9mYZ/KobNoxuXpJAveqM12ozg5+lctqfjXRod6xNLcsBklBgD865S9+IQLBLTTy27OGmkwCR7AVKpzlsjpjFLc9FmumbviqUsjHknA968ov8AxjrkrNEJkgbqqxR4OCPfJ6isS4v9Su/ME9zcSEHOx5SAOM9q0WEk92a86WyPXrzVNOtAftN9BGR1BcZ/Kse68X6Jb8CaSRicAInJ/OvLRCSCvLt6DOMY64Ht6mmxoCDGqFiRztHI4wc/kDWqwcFuxOrLod9d+Oo1+W302RnPQSyhe3oM1z954t125YeQ9vAhOAFiLHpkdT6Vh7XZFCDa/BBJ789APcVGQCgdVLBcFsnPHp6CtY4emuhnKpJ9S9JqutTSbJNVuP8AdiVVPv0pguryRir3UjtwPmlJH5D3/nVQlQnyAmNSPmC8en8sU9y2RnKqOCc5OM/kOQK1UIrZENt7jwiOxLp5jYBLMM8fTpVjT1WSZUVcxp94ADHH6cg/pVVl/wCWm35ccFiSCevf/PNXUxb2TT7WBkBAxxwPr7U5PQSRS1e+JVyCMEEKd2ehx9B/9euZkkZnLvnmrWqyM8hCgEMdx747AZ/WpNA059V1e1sR0kcbvZe9ZSaQmrnpvw50EWujpeuP31yNwz2XtXZfYpRyBxVu0gjggjiRQqooVQOwFaEcZZQBzXDUqu50wj0MUQSj+A1JGs8RLR+ZGx7r3ro7OxckYXcx7VrJpxHLgH2rONR30JqSglaRykN9crxNCJB/eXg/lVyK+jLKvzozdAynn8a6M6fbkfNEv5U6zsraO6R9oG3JGa6PrlSKvucFSlRabjoZ9lqUkYHlyZH1yK6qyla4gDMuD3Nci+lQfaGmgklgkLFt0bY/TpT0s7x3K3GpzTIeznH6DinVxacdtSVhO8jor7WdN09vLnu4hIOqA7m/75HNZsni62IYW1ncTOBxkbAfz5H5VmTaRbwcoevXAxVNFjRzHt4zk1zxxM2rRVjpp4Kg1dtv8C2+t6vOkk91PDZwICxSEZbA9WP9K86lv5ZnnvJFkdpGJZ5DngHKgE+xIrs/EU1tBYRwFgjTnHPOQP8A6+K4eV9zShYWHzbgMBSOM4z19axlJt+8elhaEEm4qxNcO0q7uiAHockjjPP0OelUL6JAEldQqNlckHv3yeTz7VJCZFj3yLJ5ROxSMhTx+Z4NLIbKa2WLzZHvHOPLSPOB0OTnPoelQnZ2Rs9DfsBNPYWdwY2DfMiqcKTxn+YrpNG1DyJ1SVgEn6EZwDgEZJ9c1i6LE82hqiqRLE4IJwvOfbk88c1KER7ZfmJYcHkcfgOn5152Y0VOjKDMZRVSXLI7W4fDJMh5Xgj2qvf2S3SCeEAP396yLDV08k2tyD5oX5X/ALw/xq5pt/jksWjPavj5UqlPVdDk9hUparp+J594+sC9iLr/AJbWzZyOu08H+lU/h/4rOmanHHdMfIk/dvz27H6ivQ/E1pBcW7SBAySKRIPUGvB7+3Nndy25PMbEA+vvX0mVV1Vo8jPUo04Yuk4yW/5n1SIopMTRHlhkMp4YUoZxw6fiK8l+GvjqXYmkaqd0ca4ilx8wHofXFeuwyxzRrJE4dD0IrecEpcvU+dxOGqYeXLNadxw5op2BQaPZ6XOW42hTkU11PGDTgKIqwDLhEkheKQZR1KsPUGvCb+N7W5lhZgxjcrj6HFe63H3K8Z8bwG38QXGOBJiQfj/9fNXy8yPcySryTlHv+h6HSikPWgGvqbHlkgp4pi08CpaFcdmoZhcshEEkcbdmYFv04qYCngVDRSlYxzpVzMSbrU5nH92MbB+lVNQ8PaPHp9w0likpCliX6k/UVp6vd3Fikc0UIkjzh89qSGddWsp4VRomZcfNyKzvZ2R0xUrKb2POJvAdvf2BudAu/ssrH54ZhvQn0z1H61xOqeG9Z0IeZqFnN5CtgzxnKdMZ46fjX0BpOmLp8bL5m5n644FaBRXUqwDKeCDzW1OtJLUJzSk+XY+VlxkBPvZGSoz14OfxH61PCh8wFMoOMkgZ9RxwOx717d4l+H2k6pC72AFhd9VZB+7J916fiK8q17Q9T0WYxX8Sxk5KOoyj85+8ff8AnXTGopFRmmZTIisTktGAM/NkHHbjjp/KoiqjhOYyByFyMjj6elWp9hjEhcnHQMfoRj8CR+FMkbPzkbk5Bznpjnk/UHpVmlisqkNtc7FHI5Gevr0HIqOQRqu487TkBjwe4/qKuyQyb498m1mJCnbjkjrzz19qrybVZWyfM7gsc8/rwcigTRUbbtYFWKLkDjt9T7e1HzbSJHweRgcc/wAz09KVi2/IGQxHUHrj8Scg0xAVkKtIRwMkYB9P8KZBPFh3Vc/vW6E8nJ/+uD+dS6zMUUJHnMQ79MkfmeKXScLcuf7gycHv0/x71ja5dsVx/E5yc9SO38yKiT19B9DLkfzGxn2FeifCbTWfUbjUDH8iR7VJ7En/AOsa8ziDPKiJ8zMcAD1NfRfgPShpug26sP3kv7xj/L9K5asrIqOp0CRHAOK3NMsHkwxGF9TV3RrCOcCSQDYOg9a6KOKNQFVAAO2K4b8zszCvilT92O5TtLeOFcIOfXuakZeeathFB4FDpke9bxSR57qtu7M+VBjiqbrk1psByO9VzExPTpWc3Y2hOxSWPLYxTmgePnGa0beIcSH8qpajOUyB0rn5m5WRpGo5S5UZ92/ykEYrJmA5YdR1q/K+9QRXI+NtRm0/TGWAlZp/lUr1UfxN+ArSmtTvhG0bHLavrp1DVpGifMcZ8qLax+7yD096pPeSxMpizuJGSV7544/A9ax4ZRHA0QbBHy5Bz04zgYH4k1KZZZomyqgDOTjPOc4Pbrn866Z00ddOfLGyNi0jur66W2g864crxGh6AHpgdBjNaFrZyW13MLli0g4bOWwRwc4PPbqa6rQ7zTNB0KJraWO51KeIOdpGEyMgHHA+neqCyvcs0x+c5O/JJyD154A69hXnUq05zk+W0VovP/gFU5SqNu2hr+H4j9lvLYZUBfMU4GRzzx0GCP1qrI6xiYeYzANuxnjnoeOOxrT0JG84q7ghlIDBOMnHc9eaz4VibVLSO7yyyP5UgY8kN0/Igjily+05o9zK/LUb+ZnXiecowSCOQR1Bp+k6qY3MFwMSoMcdG960tV0uXS7swOdwPMTn+If41j3lr5oDrhZRyGr56tBJulUR6KlCrBNapmtcakGiZd3Xsa8x8YRJ56ToeScH+ldRLK3RhhhwRXOeJrV5LdLpc4iPzA+hrfBU1SqKx106MaUHKJz1ncyWs8dzEcPG2fr7V7HpOtSSWkF3aTSAMgIG7oPSvGyoHy/yrqPBmoskraYX4ky0WezDqPxH8q6Mwo88OeO6/IyxNOMmnLY9nsvEqRyJBf4+YArMnQg+o7V0kUqTRiSJ1dG5DKcg144WEdzyNqkAMM55rprCW908B4JvlIyVPK/lXnwxrppKpr5njYzK4JKVN2b+49AoNZOm6zBd7I5P3U7cBSeGPsa1q9CE41I80Xc8KdOVOXLJWEIyK85+Jdh89jeAAZJic/qP616KSAMmuW8cxfbNCn2j5ocSj8Ov6Zq4HVgZuFaLK0F2sow3yyj7yH+Y9RVhXB6GqG0OQCOexqeS3lT5oiW9s819HTrp6SJdi6rVMhrEjvsMULAOOqtwfyq0l4R1FdBLia61IBWbHdqfarcc4akZuLRZKKylWAKnqD3qG2t7eHzBbhd2eQO3tVTWZ7qLTpGs0ZpjgDaMke9UfC9vqUCl7tNqyZyGbLfWs5W5rWOiEH7JzcreQWukxX0TTXE0v2ned/zfd9qyb7TLnSbtJY7p1idsLJnGD6NXcqiAkhQCepA61U1azW90+e3YZ3Lx7HtUSpK3mbUsZJTs/hZW0q7N5aB3XbMh2yD3qPV4rKeFodRgWS3xnJGcH+lReFQr6WJOsm4q59cVrugIwwBHoaIp8qZFTlhVceh49r/gxbWNtR0eT7RYn7yj70Y7k4BJHsK4hfmOyPDcYwc5bgjIA56EflXut5F/ZGq29xCdtpdN5csfYHsa5PXPCcV1qd5BYlLe8b95Huzsk9mA/nWsK9tJHXFaXT03PNkhLRhJWxuGMgY5zjn6HFVX+4AmPNyDtX1HsP6mtO7srnT71rG/gMU4Bba6jHuV5Ax0qswBDrFyy5KsCMAdevTgj9a6r3DRrQyJ8spaMDA5IHOACevpwaidcDJbIHtx154+hBq7OrOH2hNoJwPve/Hb1qsIlOVP3QcBj39OT7Y6CmZtFs4h00lespxkEcent1rltc3llnJG1iUUDpx7/U1119xAsJA2xx8sTgE45/kDXN6opuhsxgwoFxk/e6nr71jKSjG7LVNz0RY+Hth/aHiW2QxhlQ7jmvpSxgDssajCDgCvJvgzo4S1uNUkT53bYh9P8/1r3DTLcKoY9a5azvKxCfLE17L90qqOgrVibcOazIuorThxtFZOJ5lfXUloNFITVt6HMMKjOcc0zZyfQ1JmmmuOoy0xpX5MDisS9Yh2SRRit6s/VVUwEBQWJxn0rJPlZvQladmc3cultC8rsFjQbmJPAFeWavqS6xqDXbP+5GUiVgPlXrnnjnrXTePrsrbDS1bEsnzOM9uw/GvMr6WOGFBEu0nGPp9TXVGKtzHu0Itsvj7Pd+fFHsC/3s4Hvz+VJb6fcvMsWV5wVbbkEn0z7/zo023ItoiVZfMIcHdtOOn5YxW99mmtRvIBIGMAnpnHXqcECnGbWie50TimybS444I283auPu5I3H05P9BT7HWIZ90a8OOGVmwGHTjueD6dqjVFiKzAfvscIBznORxkn259a5Sa4l0nW5WjBBVi4Qnqh7cU3FN3Y1poj1fw9JK13AJWADLtztwfTknnrj86jvmSG4eTKrMk4KgYznP4k1T8P3KyTWkyL5kUp3KQDgHODwPw6mr2qQhr26hj5kyWXaBxkZ5+hA/OuWStMyt+817HourafFq+nBDhXIDxPj7pxXl2oPJZ3EkM6bXjO1h6V61pUvn6ZaTdN8SnAPtXJ/ETRWns/wC1LWPM0A/fAfxp6/UfypZlgVWj7WO6/FHl5bjFQqeyqfC/wZ53dqkzrPGT6NjuKr3EJltZocbkkQrnH609d3JQ/J1AqzbzeWeU3Ix5B7V4UXy6H2CVoaao8ydimUIOU4NMjuJYpY5Y3KvG25SOoNafie3FpqczIP3TtvXHof8A69Y5XOPU17ULSin3ORVFJOL6Hqlhfw6rpkF4oUXSHbKvr712Onsl5p6dQU4rxHw/qMmn3SDd8jHkHoa9h0KeOSA3EXEZABHvXzGZYX2W23T/ACOav71JW3RZ1CJRZs2drRsD1q1oHipRJHZaieG4SYn9G/xrO1sGS1dkbt+dcjOCyehFRgJOCvcdHB08TS5an/DHuEucdsVn3iRyROkmGVwVK+xrmfCOvm/s1026cm5hHysf41/xFbF6CYwqgnJ5xXvUrPVHhSwk6FV057oyrUbph7c1fZgilmOFUZJPaqdgOHf8KpeJ7r7Pp5jU4aY7fw716trs52uaVjl767a5vJZgThm4+lKtzcR4EczDHbNU4+Wz6VKp+auhXWx0GzBqcyYEg3j8jWpa6pDIQA+1v7rcVypeuY1C4lmvi8DuZE4UIx4APoP6mt6EpTlZ7E+yUj2aG8I71diu0bqcV5gmq3Fjp0VwGeckltvX5evJ+laVn4otio+1BoDzknkcY9PqK25L6ozlSkuh6OsoPepA9ctZ6lHKgkt51kQ9CrAg1oxX2RyOalpoz5EUvCU4S61bTz/yyuWZfof/ANVbb3X/ABMkswAAU35PeuLhe5t9b1C6tBvZXDPF3dD6VsvdafqxidLtrW6Tpk7WHt71hGTSsd9aipVOfo19zsSeKNtxLY6fEQZ3mD4H8IHeku1jfxTaBGXesR3j8/8AGnW0NlYTgwubm/l4Ds2SPf2FYniXQLuMtqlteM82dzAjGPoamV97F0VBtU3K2jS82/0NLxHoUOtXUMF7AJLbYRuA5U+ufyrz7V/Bd3DcOult9tWE7jGcK4z1AJ46iu08KeJvtki6bqGRc9EkP8R9D71e1qf+xY5pkG+4upMRLjv/AJNVGo0uaOw/Z1Kc/ZSWvTz8zwm7ikWZhOjRSoQrxHIZTjIznn1HSobGyAv4/MTaMbguOePrz3r2W78O211CJ9ekeaZ8KDHwyHtgjmuVvfBV/pklxNZst1GV+Q9GHPGf5ZrojXUlbZkytc4oRPdaotpEhElxKkagnHVgOe+OlM8feHX8LeKLywwz290PPtmPO4N1H1DZH5V1fw/0e4bxzp8VzbPF9n3zt5gxnA4wB7kHOa6H4l6e2s/Evw9Z7cw2lm1zKfYvgD8Soq6kU6epiq8qdeKiangnSRp+jWVrtwwQM/8AvHrXeQJtUCszTocANWunFcEdXcK0uhNGOa0YelUYh0q/CQBWltDz6pIelRM4zipHOBVNyd1Q9jKEbk4Yc0gbJ69KgY4Xmo0brk1xVEachZ8wbST2rD1vUksopLmR8RIuSB39q1BgrivOPiJdmXbaRNiJMmQ/3j0/TNZRV3qdWFoqVSxwuvXr6heS3tw5DEFlXOMDPTjntXETTGSVmA+6cACt7Xt3l7BIctnJLY/l7471h6RHHLqMEZG5d2TgZzjmu7RR5Ue/TSjqehaRCqWwVY+Auwk8YAx1x7H1rRuLGSRHjDPJKAQcEnHvgfQdTUGm3ESncBsjbg5x6fgBwa1UuLbcd3zxEfxtlTxgn0OMg1g3KMtELfYyFjjKNFEm4lefLXgHAPJ9iCPxrnPE9k/+j3Ua7VB8s5I7jI4AwMjP5V0ZbzJ1RVJjJBAC8ZPHGeAM98VavdO+3aZPETtYRgx5x1HK5P5jpW8pcq1Dz7HPeDL0R3K2E7HyVfepJPHqP6/hXpeoKv21WWM7WxhgODkYI59wPzrxBMpMsoJBBznPSvX9N1SPWrK0mB/fCMJIPRgeuT9Qa5aj1Rdan8M1sej+GH8zQ7XjG0FcHtgkVqsAwIIyDwQawfCDk2M8bdUmJx6ZAP8APNdBXr0PepRZ8liY8taS8zxTxPpraRr9xDjbbzfvIuOMHt+HNUkGU3DrXpnxA0573SFmhg8ya3fd8o+bb3/p+VeZRzRrn1x0r5XMaHsazS2Z9flOI9thvNGN4itY7m0EhGGQ4P0P/wBeuGwQSh+8pwa9HdfPjZTHnPDLmuO8RaTJZSLP0DHacevY1WDqr+HJm2JtTftF13Ml+BXd+CteKII2c+W+FcHs/Y/jXBA7gQTyKuaRL9nugp+4/Df0rfFUI1aTizn5o3XZns124ktpAW2nHHHWsxRFtO4DgVPp18l5pqwsMyLwx7+xqtfxxwyReTIzBl+cH+E18zTi4twe51UVZ8j0MaWW4tLlZrMlJUbKsK9G0XVRqemG7K4kiAEqD+Fv8K4SaSGHJkUH3qK11mbTy01sxEb/AH07N/nNeth6jWljXG4X6xDmS1R6PaLtgX35ri/Et2bjUnQH5IfkH1712F9cLZWMk5/gXgep7V5w7l3ZmOWY5Jr6Smru58fTWrZIpCr9aVXFQMSaQE1q0bDrqbZC7+2Otc/Yxi5ujCH+8/GWyvPT26j9av6tLiOOPdtDN8x44/Ojw/Gq3jXEx5hTOSfwP6g/nXVQjywci1sWtXnR5zbxqfJgGAqrntnvwP8A61ZbhjEwd9sY+U4xzxjqfUY6CrEs7vctOMZZgTnOAc5HXk8ZHSoHRo5dzkqNoOAuDtB9+en06V0RjZWKKyN5YVhcSRORxIrkEcY/QgH8a09O8R61b7B5guVwPkkGD3/i79D2rO+WGZgWBYjruxz0PQZ9/wAaRd5YIow4OVODnGc8Dk8EH86bQnFPc6seKIHZLx4pbSfGMkbg4+g5rUg1WG/YYFjK3dicH/GuFSMqr/N91juRQFz3xx6jPemAQhWQEEAkZHPHrgY/U1nKlFjScdmes6Pbx285naUAkcKo4/OuiEiuhBwyMMEdjXilrf6lACLe4dCnVTlsYGCCOg5HrW/pXi+VNovFAGAd6dDkdf0NZ+x5VoZVIzm7yMvxdC+m+IpPIYpjbJGRwR6V2EeoLqGq2l9cjdHbWgl2ju2Of1I/KuG8X6tb6nqKTwyKVCBQfXvXReFCZoGTqZLVlX/P4Vw8rjNo9upaeHhN7pWOlt9Sl1C9hguLVYEfEsJzncBU9750uoLaxytEuzcxUcmskTqkOh3X3fKlMTn0BP8A+updZvxDdzXkEvIKwxkHr3b/AD71T21OD2d5pRXf772MjV21HT79Jra7ZZVLKrEYBGAe1W/Dsl7qd1c6xqWxrp1W1RlGMohJz+JY/kKn8Tjz7K1uEG4uw59flOf5CtrQ9Oe20+BWHzBQW+p5NHNb3biny+zUmtTXtF2qBV0DJxVWHgir0eDzirSsedN3LEK1aO3jFVUfbS+ZzVWOWSbZNJJxVcnkk0jyVzfi/VTY6bhG2ySttBHXHespGlOm27I6GWdSmQcjHFZ8txhetVYJCtnEhbJVAG+uKzdQ1GG1glmlbbHGNzGufkvodlOiluWdX1kWNqVDHzpFOzAyQB1Neb3zzXzO7MR/eHXPHr06GmPqk2pXr3O87GORngKM/KM+nB/Emi+xa273MmNmz5fl9Pr/AJ4rPk5ZHo0acYLTqcHrkxluihclEG0DsPX9aj0RGa7Vowd6jK49e1Vpzvmds9STW74Rt3nmnK7QVUEZ7HPH16V0RdtWdc1pZGrE7MglYlYxghcYyB7nqcHHArZnEUUUE320SEthlbIZMHB9eMEHimJZEFyw2upOVVcH1xnryM1vReEdVaHMVvG0Tjg+YBle3Tk8e4q6lanGzk7HHJ8nxOxnw/O27Oe2cH14OTyeQO1b0UThs5w5U4AG33x6+tQNZ3EBWGa18mYLgg5JY45OB7gGtGygZ4/m6kZAAxzjj9QRXJOonqjbmXLc8l161NprN3Ev3XJkQ/7JOaveHtTOm3cbMT5Mi7JPYeuPauj8bWEf2SK+iXJhbD7f7p7YA/rXDNwuewPT2qZvmO6g06fKz6D8FThru9j8wMXRJRjHPUZ4rsK8c+EmseZqn9n3En7wQsIiT95cg4/DFex16ODf7qx8nmlJ08S0/IQ18+3UAS/uSj7gZGbjsSTxX0EeleD3YzcTNjguTx9a8zO5WUPn+h6fDqXPN+n6hpyFyQG/h59+lWtY0tNS054jw+PlY9j2qXQYt9znA4U5q5MzIzRkcg18zOTjJSR7WItKbgeMSwNBctHOu1lJBB9QaFwJC3Y+ldV4308LL9shXhxluP4h1rkYzu69a9+jVVampo46tP2dorZnaeGNQ8lUduFJ8tif0NdLKrF2L4xmsOOIGwiRU/5ZjAx04q9YXPnQfPJ88QwwPp614tZKUnOJ6ypNQUupT1RA6kZ49q57UJGgtgFJCk4rQvpmuJZCj/ug2AOlZd5D5lnPkMWQbh9K7sPG1lI2kmj1PxhdgJFZqeSd7/TtXJGrmp3P2u+mn5wzfL9O1U6+jgrI+IirKwlFLinRp5jhM4B6n0A5J/Krtd2KMG9bzZ2LN+6yVOByMcH+YNXrMfZ9KlBIWaZtuRwcg+2SelZzIzzEgBxIx+UA4B+g9Qa0pyqzR2KKWKx5OwDjI/TBANejy2SiiyJ2eRSY1HmcnaD83XPQdOc/nUcqEoZMqcAnAXA6Z+pypPftU6mRzKiCMsxzy24ZI6YHHUfrTFjBDDGQMEuwzwRxwcKOtWMqyeUpHRhghguOAfYcDt1NC+ZIyAbNxJBPLDJHQ446j171Km3ZhV3RD5WOQB3B56cjB/CmorypGhKqCBhsluc4yOw5x+dIAEY+ViRzwwKjHTIOOB/eFKjKJSFAaNsZ+YY9DzgAcHt6UMv7oSsiqRz8/O4g9Mn8egp0pCxiQIRHwRuIXODxj8Dj8KLAIod32sy7GwdxBYZ6EjPHXH50iRKjESYHAbLYz7jJ6c56CpZVYnfJjaMghSeRnBy3J7g0kqBGDMArtkKAvIPUHkljyBSGVmCMACiFVxkOeCM5HXk8EjpVnTLu806SGWCcxpESNuCQBnnOfY5ofd5oIj2ybWwhfBx1HTn19Kb5Lbs48wSEjaucZx6Dk5B9aTinuUpNaHRWHiC32zW2o2ZZHlyqoc/NnHA603Ur23u5l+ygpBGu1UPBB78etZOkxD+0hFtBblvlUZAxz0Jxzg1qeHNPi1jxQ9rNHuiLs0u18EDB9PeuadBN2RcK/s3zs6jTljubDSDJ8zCQjHtzn+VeghYhbjauOK4aw05tO1R9PDmS3g5jd/vYPauzhlGzB59q450WpXOTEVFUtKOxXRfmNXYunFRLjcTinofmNb2OeTJG/SoXeldqru1XbQy6ivLXlfxC1Mya9FaK3yQRjj/aJyf0xXpUjV4R4kuvtHifUHLZVZCPyOP6VhU2O/CRvNI9djuD9iiyTuYbj+Ned+LNV/tUy2NsxFvA2HfdgO/p9BWx4w1ptN0zy7XJuJj5UZAzt4/oK4XTtsFjsIJaR8nA5/zxmrhTaXMaJpysalhK6IuRg9ucE9+nXrmneJbjdbRISMN8xA9Mcc9ait5G807EBc8kFuMn6e/vWdrcrSTqD2QYJ6YPTj8a5qsdbno0bNpGANqyOT/dIrs/h1s+03CkqsjhFUEkZ6+n4VxgXlwORWrpE8tsyyocEEHg9cVlUvy6G8I+0k0esPZRuAwVd5OCAvHTjgfjUKy3tlMsVtcShCQSsbYAx1GBwOD+lLpt19ushPgbwAzbu/f2Aq3cKpgEoX90TxnHY8dfY4/CsI1OZa6nLK8ZckxLOS4uJsTzeZnGWZi3tn09K37aBUwpA6ZyR09R6dazBCojDpKxwPmXHIHfnp3HatKIqQrthRyASD19eevPtUPXVGNWV1oM1Gxiu7Ce2ZfkdSjEkYx2P6mvF762e3HlSAb4nMbY9q94l3MqMY2B5wMgEjr/AI15n8QdJe1u4tTTHkXeQwGeHH+IP6Gkpa2N8vrWmoPqchplzJYapaTwymOZG3B16ivo3wx4gtdb0+KVZEW5xiSLPIPfj0r5mICXKEjkn9K3tLuzExRmPTIweldVKrKmuZanTjsDDF+69H0f6H0v2rxC5CmWQf7RP60/RvFOqaXIrRztPAPvQytkEe3pWbYXS3rZXqTyp7V5+bV1WhBpbX/Qzy3LqmDnPn201+83/DcXm6p5S/xRtU+r27wT7jnDDn6irvguEHXHIwQIW/pWl4jtGlVwnVTux/OvK9m5UlImrieXGcr2sji762F/p0kXG/GVHvXJaJb20NxMNg80n+IdK9Bs4k3gFlXtlugrjfFtrFp+tCe2l3RyKGYgYwehqMLPmbo33PWw0oVJ+ya80XJPu8Vi3qTW7pKnC+vr9a1rSaK7gwDhtvINWba2iuoHgLZjAwSf51UZ+yfvHXGoqerOZQs8hlYZGecCtNLeN4JOBh1IXP0qtJbyW7yRqDwcc9/eug0vTxLZIJOCvI962rTUYqVzXFVIRipFD1NNqQjCfWo6+sR8EwqRXaK2vZUYCRYdqcfxMcY/LdUdUryU4MXmFVLBzggZx05P1NbUVeogtfQq6fCktxCyqWjQhmJyc4/Ifzq40BZ5LlkYx7wFYqMD+E9eOwNX/DVpHDFcajcAlbddqo+Tk9RjPqKY4DQurq7KMoCRtwAR1JyehHQCu295MtFGXdvDMTGq4B+bJxn16DBHYd6ZKixsJmjG3GV3ZOSDnv1zyOlSSK5VllkIlyQADj5s8+pPIz2pjlOWXPnkZA5LdiPf1FWMikXZJv8AKcJs4yApwD155HGPyppUiQrKeGyVUMeucEZ5J6A1K+dvnImWGScgAEY5Hcng+tNCqpQGZzzhiGxtBGM4HTt1NIBm0I5BTE4JKjacnPI469Rj8acMr5u2Fhgn5SQuBjODjk8UKVDKsY+fdhtoJ69QcEdx3PeljDeYGiyoJGSQPqDjgDuOtAgWPcrRFmkfpgE4xjGcDnpjqaRFVlaJEJcjnYMkHHOfxUH8acBGrEF2eLA3fNkHHB6cdD79KRSo/drzGQOi5Gehxk49OfegY6ISOi+Uu2QYcEkYzgngD6Ec0pSPy1kVWkRcM+STx6ccDj61LZIxPzMYlT5geM4z6nAGCD2qR1jSMO53LGxwrtkHnIxn1GR07UhkuiogmkZV3RxrneF49D7c4BroPhuP+KguLiT5FitmYlmycbufYYxWHY7V0+/dtxRV8tSQRx9T06joKbpFzcxw3dvHLtubgrAuBySW+Ye4+XJrPq2Z1VeDR6Pp8n266uL4fdlclc+nQfoK27cbTzWVpUS29tHEOAoArXR1AzXNqznlZaEjsM4FNBOc1Fuyc0pPFWo2MG7jnaoJGpXaqsr0pFQVxssmAa+eppjPql3KOS8hI9yTXuV/cBI3YsFVQSSe1eG2KbZZCwyXbp6VzVNUerg1aaO3+JjwwWOgWEK7itv9rmbuxfAyfyNcc2I7CFU5G7JIGR6f4Vd8SXjahcxv80iWdvHC4PQbQP55Io1KUNY2Fp5cQiijJ3RqCzZxyzf07V3X0jY5eVxdmQpLImAmU7ZOPX04A5FVNRcl9+d3QZJzmrlvDLICWbaRkenP1PXkdhUepQ/MpwxLc8nnp/8ArrkxVlE9HCXcjFcnk44PoK2rC3zp73DdFBOM85rPEIZe+VOTW7DEU0pbcvgvJtJHpXm1p2SS7np4SN6zj5Gr4Lv2NybedgCRmPP5/wA/513otzKxCROWBO1cYPrjPX8q8ne2n029tbiPJcEOpX0/yK9k0lmdY5YmI3hcnHXuOO/esmknzQ2ZlmNPkamifTbeURXMB2MzpswW2ge/qeKigi8t8HJcjnAy2cY/mAa1R5aZXfnABO04OB1HHt/Kq4ZFZkQjBAzjJGelWk0mzyY1G7jopGdFwhEnBycDn+Z6VQ8Z6S974PkRSXnQiWMYxyO35HFX7dW81EPyqDndjtn8hgg1e12SKbTiUZWRX5weDjt/OsZaSVjJycaseXufNYm+dWZcsrdPSrJmeOUN0fNWvGVj/ZWsO6Am0uWLoQP4u4/XP41myMXAPTPc1304nrVsReKaeqOltblJYs+g/Ks6K8ksLkSJnA647iqFtcGFXI6FeRVyJY7iIAnK/qK87F01CWux7uX4iOKpPm36nq3wvvoNQ1G4kjddwg5XvnIrt9SgHmbyMg14LoNtqNhcPd6bI6yKQQ6HBA969h0TxVaapph+2t5N5EAHXH3z6rSVOk8Pyxex83m+CqQxHtqeq0T8jntah+xyvL/ATjb71xuo2k99cmXqzcc9sV1+uyC8mEzNtjB4X29aZZwLcgKiFFVThvWvA9oqTc4npYWu6NNTe5xtpZAoUEqpIvK7mwD9DW1pt1FE0aPArlvlcg9Pxpmqaelpc5DKUkG47h0NQaZH5TDa2VY5HFdEpKrDmO+co1afN0NS8gglVZNh89T6cEVqaNFvgbaORkYz3qZ0/wCJMGbBct6VHo0iRSBMEFzgE1585OVJpdDyZ1HOk0ujMuAaGLa2+07mZjiUhjuXryB7cUxI/DzRyO8sySOCVjXOEPGBnH19aKK+5VPzZ4LiPaPw1Iy/v7iIAfNt5z19R9Ko2tjpLQq11dypeOXWLymXHQbe2euaKK6cNBqdrsIx8zU1IafYaTF/Z0sji4OWLk7ievYZI4rnB5jMQi7llPdD1288DJ5DDqe1FFehRVo3NIlNkK3EsTTsGbGWBAPPGTg+uO9RQyKGaKPqxHC5PJ7YGO+epoorZaobCISMcJkBQMnbkkc4PoODjrTEVPKVXkLQ/dI3cDBwenHcH8KKKQACZIViVvmHAK5POcA9gOfrRIJJIWmOFUc4K8dc4yePXpmiih6MS1HXGwIJGkLBem4/iMduVP6Uy4fcu7llwVPXgcdz6ZHQUUUW0GaVvDKFh3ybJH3BDtC8n0zz19u9OkMSyLLuPmNkHcx3YIyDnBPqOPSiipWrGLJMtvol1M5G2WTB3AgHgcdycg1Q8BpJd+JnmkO5Yoy447nAFFFctSTTsaRinSlI9eg4WrKmiinE8ue48UpPFFFUZEEjVQuJcA80UVjM6qSKGmWqa1qrQuN1paENP6O38Ke/qfwryK/iNpfzsRjD8f5/CiilUivZo3w039Za7GNHd+ZPODJgPL8y5xn0/rWvchjcpGBlSoHOcZ9PXoaKK2pv3UXNe+zXtLNoW+ZyrsByAAeePr1xVbUkVSCF+c9RnuQc/rRRXBiJOULs9CmuV6FWxszJ5iDmQIWH4c/41rWVk08scIPLHGR0HqaKK8ivUag2elg3yuUlukXbq3IuIoCx3owjyR7/AMq760idYF24IVecDPvz2HeiipwsndehlmMm6cC9M42A7sheQDjHr06cg/pUDTgnOcrgg4Pbvz07jpRRXobo8mMVYsoJJFRiRgkhW28ZPuff+dWbjH9khnJ+/wAFj/jRRWEtznn8SXmcV4r0tdZ0x4MDzd4aJznh/wAfUGvKbqKS2mNtOhSSMlXUjoaKK6sM90b1XoQPxDJ6npWrZW8n2dXXKyEZxRRXJmEmrWPYyXRuSOs0ORDAiuw3s/IFadpNHaarmRSVIHA6YoorgUE3y90ehXgnUlF9Uzqp7dbi2Zo0wxGB6YrDtJ3tJSwB6bdp6UUV4ySlzRZ4uF97mg9iprEEt1Etw20BTwB6UyxihSLeSxdCPlHcUUU4SfJbzO+Em6VuzOiu9w0mKNgFZiDgfnWTFlWjIGShDYoorGhrBnHh/gfqf//Z"); + #endregion + texture = new Texture2D(2, 2); + texture.LoadImage(imageBytes); + } + + void OnGUI() + { + GUILayout.Label(Encoding.UTF8.GetString(Convert.FromBase64String(texts[0]))); + GUILayout.Label(Encoding.UTF8.GetString(Convert.FromBase64String(texts[1]))); + + GUILayout.Space(50); + + GUILayout.Label(Encoding.UTF8.GetString(Convert.FromBase64String(texts[2]))); + + GUILayout.Label(texture); + + GUILayout.Label(Encoding.UTF8.GetString(Convert.FromBase64String(texts[3]))); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MathUtilityDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MathUtilityDrawer.cs.meta new file mode 100644 index 0000000..34b3478 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MathUtilityDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e5d17af10e083841ac8d81ba70fd984 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MyGUI.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MyGUI.cs new file mode 100644 index 0000000..9840912 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MyGUI.cs @@ -0,0 +1,73 @@ +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class MyGUI + { + public static string nameSeed = "aWJhcmFraQ=="; + public static string nameSeed2 = "aWJhcl9ha2k="; + static GUIStyle horizontalLine; + + static MyGUI() + { + horizontalLine = new GUIStyle(); + horizontalLine.normal.background = EditorGUIUtility.whiteTexture; + horizontalLine.margin = new RectOffset(0, 0, 4, 4); + horizontalLine.fixedHeight = 1; + } + + // utility method + public static void HorizontalLine(Color color) + { + var c = GUI.color; + GUI.color = color; + GUILayout.Box(GUIContent.none, horizontalLine); + GUI.color = c; + } + + public static void Header(string text) + { + EditorGUILayout.LabelField(text, EditorStyles.boldLabel); + } + + public static void DrawNavTagLayout(SerializedProperty spNavTag) + { + EditorGUILayout.BeginHorizontal(); + spNavTag.intValue = EditorGUILayout.Popup("NavTag", spNavTag.intValue, PathBerserker2dSettings.NavTags); + if (GUILayout.Button("+", EditorStyles.miniButtonRight, GUILayout.Width(17))) + { + SettingsService.OpenProjectSettings(PathBerserker2dSettingsProvider.WindowPath); + } + EditorGUILayout.EndHorizontal(); + } + + public static void DrawNavTagColorPickerLayout(SerializedProperty spNavTag) + { + int tag = spNavTag.intValue; + if (tag == 0) + GUI.enabled = false; + + PathBerserker2dSettings.SetNavTagColor(tag, EditorGUILayout.ColorField("NavTag Color", PathBerserker2dSettings.GetNavTagColor(tag))); + + GUI.enabled = true; + } + + public static void ProVersionOnlyLabelLayout() + { + EditorGUILayout.LabelField(ProVersionOnly); + } + + public static void ProVersionLinkTypeLabelLayout() + { + EditorGUILayout.LabelField("Custom link types are limited to the pro-version."); + } + + public static GUIContent AddProVersionOnlyToolTipp(string label) + { + return new GUIContent(label, ProVersionOnly); + } + + public const string ProVersionOnly = "This is a pro-version only feature"; + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MyGUI.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MyGUI.cs.meta new file mode 100644 index 0000000..3882296 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/MyGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88926f52dae6ae348a100721fd59f003 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/PositionHandle2D.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/PositionHandle2D.cs new file mode 100644 index 0000000..1f70e99 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/PositionHandle2D.cs @@ -0,0 +1,137 @@ +using UnityEngine; +using UnityEditor; + +namespace PathBerserker2d +{ + internal class PositionHandle2D + { + private Vector3 startPos; + private Vector2 currentMousePos; + private Vector2 startMousePos; + public Color primary; + public Color hover; + public Color selected; + + private int hash; + + public PositionHandle2D(Color primary, Color hover, Color selected) + { + this.primary = primary; + this.hover = hover; + this.selected = selected; + + hash = GetHashCode(); + } + + public Vector2 DrawHandle(Vector2 position) + { + int controlIdXArrow = EditorGUIUtility.GetControlID(hash, FocusType.Passive); + int controlIdYArrow = EditorGUIUtility.GetControlID(hash, FocusType.Passive); + int controlIdRect = EditorGUIUtility.GetControlID(hash, FocusType.Passive); + + bool selectedXArrow = GUIUtility.hotControl == controlIdXArrow; + bool hoveredXArrow = HandleUtility.nearestControl == controlIdXArrow; + + bool selectedYArrow = GUIUtility.hotControl == controlIdYArrow; + bool hoveredYArrow = HandleUtility.nearestControl == controlIdYArrow; + + bool selectedRect = GUIUtility.hotControl == controlIdRect; + bool hoveredRect = HandleUtility.nearestControl == controlIdRect; + + var e = Event.current; + + switch (e.type) + { + case EventType.MouseDown: + if (e.button == 0 && GUIUtility.hotControl == 0 && !e.alt) + { + if (HandleUtility.nearestControl == controlIdXArrow) + { + GUIUtility.hotControl = controlIdXArrow; + } + else if (HandleUtility.nearestControl == controlIdYArrow) + { + GUIUtility.hotControl = controlIdYArrow; + } + else if (HandleUtility.nearestControl == controlIdRect) + { + GUIUtility.hotControl = controlIdRect; + } + + + if (HandleUtility.nearestControl == controlIdXArrow || + HandleUtility.nearestControl == controlIdYArrow || + HandleUtility.nearestControl == controlIdRect) + { + startPos = position; + currentMousePos = e.mousePosition; + startMousePos = e.mousePosition; + e.Use(); + } + } + + break; + case EventType.MouseUp: + if (e.button == 0 || e.button == 2) + { + if (GUIUtility.hotControl == controlIdXArrow || GUIUtility.hotControl == controlIdYArrow || GUIUtility.hotControl == controlIdRect) + { + GUIUtility.hotControl = 0; + e.Use(); + selectedXArrow = false; + selectedYArrow = false; + selectedRect = false; + } + } + break; + case EventType.MouseDrag: + + if (GUIUtility.hotControl == controlIdXArrow || GUIUtility.hotControl == controlIdYArrow || GUIUtility.hotControl == controlIdRect) + { + currentMousePos += new Vector2(e.delta.x, -e.delta.y) * EditorGUIUtility.pixelsPerPoint; + + Vector3 screenPos = Camera.current.WorldToScreenPoint(Handles.matrix.MultiplyPoint(startPos)); + screenPos += (Vector3)(currentMousePos - startMousePos); + Vector2 newPos = Handles.inverseMatrix.MultiplyPoint(Camera.current.ScreenToWorldPoint(screenPos)); + + if (selectedXArrow) + { + newPos.y = startPos.y; + } + else if (selectedYArrow) + { + newPos.x = startPos.x; + } + + if (newPos != position) + { + position = newPos; + GUI.changed = true; + } + + e.Use(); + } + break; + } + Handles.color = selectedRect || selectedXArrow ? selected : (hoveredXArrow ? hover : primary); + Handles.ArrowHandleCap(controlIdXArrow, position, Quaternion.Euler(0, 90, 0), HandleUtility.GetHandleSize(position), e.type); + + Handles.color = selectedRect || selectedYArrow ? selected : (hoveredYArrow ? hover : primary); + Handles.ArrowHandleCap(controlIdYArrow, position, Quaternion.Euler(-90, 0, 0), HandleUtility.GetHandleSize(position), e.type); + + Handles.color = selectedRect ? selected : (hoveredRect ? hover : primary); + float rectSize = HandleUtility.GetHandleSize(position) * 0.14f; + + Vector2 rectPos = position + Vector2.one * rectSize; + if (e.type == EventType.Repaint) + Handles.DrawSolidRectangleWithOutline(new Rect(position, new Vector2(rectSize, rectSize) * 2f), new Color(1, 1, 1, 0.2f), new Color(1, 1, 1, 1)); + + rectPos = Handles.Slider2D(rectPos, Vector3.forward, Vector3.right, Vector3.up, rectSize, Handles.RectangleHandleCap, 0); + position = rectPos - Vector2.one * rectSize; + + + + return position; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/PositionHandle2D.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/PositionHandle2D.cs.meta new file mode 100644 index 0000000..3c1f174 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/CustomGUI/PositionHandle2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38d3d3506e06653448c052e8936eb8dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/ExecutionOrderManager.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/ExecutionOrderManager.cs new file mode 100644 index 0000000..629e413 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/ExecutionOrderManager.cs @@ -0,0 +1,34 @@ +using System; +using UnityEditor; + +namespace PathBerserker2d +{ + [InitializeOnLoad] + internal class ExecutionOrderManager : Editor + { + static ExecutionOrderManager() + { + foreach (MonoScript monoScript in MonoImporter.GetAllRuntimeMonoScripts()) + { + Type type = monoScript.GetClass(); + if (type == null) + { + continue; + } + + object[] attributes = type.GetCustomAttributes(typeof(ScriptExecutionOrderAttribute), true); + + if (attributes.Length == 0) + { + continue; + } + + ScriptExecutionOrderAttribute attribute = (ScriptExecutionOrderAttribute)attributes[0]; + if (MonoImporter.GetExecutionOrder(monoScript) != attribute.GetOrder()) + { + MonoImporter.SetExecutionOrder(monoScript, attribute.GetOrder()); + } + } + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/ExecutionOrderManager.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/ExecutionOrderManager.cs.meta new file mode 100644 index 0000000..efe6814 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/ExecutionOrderManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d337207a086912840ae6fa25daa40c29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos.meta new file mode 100644 index 0000000..99d040d --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a6fbf381f5910a46b7602b805ab3da5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/GizmosDrawingExtensions.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/GizmosDrawingExtensions.cs new file mode 100644 index 0000000..8440f78 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/GizmosDrawingExtensions.cs @@ -0,0 +1,239 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class GizmosDrawingExtensions + { + public static void DrawArrowHead(Vector2 basePos, Vector2 dir, float size) + { + dir.Normalize(); + Vector2 normal = new Vector2(-dir.y, dir.x) * size; + Gizmos.DrawLine(basePos - normal, basePos + normal); + Gizmos.DrawLine(basePos - normal, basePos + dir * size); + Gizmos.DrawLine(basePos + normal, basePos + dir * size); + } + + public static void DrawArrowHeadFromSpike(Vector2 pointyPos, Vector2 dir, float size) + { + dir.Normalize(); + pointyPos -= dir * size; + Vector2 normal = new Vector2(-dir.y, dir.x) * size; + Gizmos.DrawLine(pointyPos - normal, pointyPos + normal); + Gizmos.DrawLine(pointyPos - normal, pointyPos + dir * size); + Gizmos.DrawLine(pointyPos + normal, pointyPos + dir * size); + } + + public static void DrawArrow(Vector2 start, Vector2 end, float size) + { + Vector2 dir = end - start; + float length = dir.magnitude; + dir /= length; + + Vector3 end3 = new Vector3(end.x, end.y); + Gizmos.DrawLine(start, end3); + + Vector2 normal = new Vector2(-dir.y, dir.x) * size; + Vector2 baseA = start + dir * (length - size); + Gizmos.DrawLine(baseA - normal, end3); + Gizmos.DrawLine(baseA + normal, end3); + } + + public static void DrawCircle(Vector2 center, float radius = 0.05f) + { + int segmentCount = 10; + Vector2 prevPoint = center + Vector2.up * radius; + + for (float t = 1; t <= segmentCount; t++) + { + float x = (t / segmentCount) * Mathf.PI * 2.0f; + float cx = Mathf.Sin(x); + float cy = Mathf.Cos(x); + + Vector2 point = center + new Vector2(cx, cy) * radius; + Gizmos.DrawLine(prevPoint, point); + prevPoint = point; + } + Gizmos.DrawLine(prevPoint, center + Vector2.up * radius); + } + + public static void DrawBezierConnection(Vector2 start, Vector2 end, bool biDirectional) + { + Vector2 cp; + var tangent = (end - start); + var length = tangent.magnitude; + var normal = new Vector2(-tangent.y, tangent.x) / length; + cp = start + tangent * 0.5f + normal * (length / 5f); + + DrawBezierConnection(start, end, cp, biDirectional); + } + + public static void DrawBezierConnection(Vector2 start, Vector2 end, Vector2 cp, bool biDirectional) + { + float arcLength = (Vector2.Distance(end, start) * 2 + Vector2.Distance(end, cp) + Vector2.Distance(start, cp)) / 3f; + int numberOfSegments = Mathf.CeilToInt(arcLength) + 4; + Vector2 prev = start; + float t; + for (t = 1; t <= numberOfSegments; t++) + { + Vector2 v = QuadraticBezierCurve(t / numberOfSegments, start, cp, end); + Gizmos.DrawLine(prev, v); + prev = v; + } + + //draw arrows + t = (numberOfSegments - 1) / (float)numberOfSegments; + Vector2 dir = end - QuadraticBezierCurve(t, start, cp, end); + DrawArrowHeadFromSpike(end, dir, 0.2f); + if (biDirectional) + { + dir = start - QuadraticBezierCurve(1f / numberOfSegments, start, cp, end); + DrawArrowHeadFromSpike(start, dir, 0.2f); + } + } + + public static void DrawBezierConnectionWithOffset(Vector2 start, Vector2 end, Vector2 cp, Vector2 offset) + { + float arcLength = (Vector2.Distance(end, start) * 2 + Vector2.Distance(end, cp) + Vector2.Distance(start, cp)) / 3f; + int numberOfSegments = Mathf.CeilToInt(arcLength); + Vector2 prev = start + offset; + Gizmos.DrawLine(start, prev); + float t; + for (t = 1; t <= numberOfSegments; t++) + { + Vector2 v = QuadraticBezierCurve(t / numberOfSegments, start, cp, end) + offset; + Gizmos.DrawLine(v, v - offset); + Gizmos.DrawLine(prev, v); + prev = v; + } + } + + public static void DrawProjectileArc(Vector2 start, Vector2 end, float hSpeed, bool isBidiretional) + { + float hDelta = end.x - start.x; + float t = hDelta / hSpeed; + int numberOfSegments = Mathf.CeilToInt(t) + 4; + float p0 = start.y - end.y; + float v0 = 9.81f * t * 0.5f - p0 / t; + + Func func = x => 0.5f * -9.81f * x * x + v0 * x + p0; + + Vector2 prev = start; + float z; + float timePerSegment = t / numberOfSegments; + for (z = 1; z <= numberOfSegments; z++) + { + Vector2 v = new Vector2(start.x + z * timePerSegment * hSpeed, end.y + func(z * timePerSegment)); + Gizmos.DrawLine(prev, v); + prev = v; + } + + Vector2 dir = end - new Vector2(start.x + (numberOfSegments - 1) * timePerSegment * hSpeed, end.y + func((numberOfSegments - 1) * timePerSegment)); + DrawArrowHeadFromSpike(end, dir, 0.2f); + if (isBidiretional) + { + dir = start - new Vector2(start.x + timePerSegment * hSpeed, end.y + func(timePerSegment)); + DrawArrowHeadFromSpike(start, dir, 0.2f); + } + } + + public static void DrawJumpArc(Vector2 start, Vector2 end, float jumpSpeed, bool isBidiretional) + { + Vector2 dir = end - start; + float distance = dir.magnitude; + dir /= distance; + Vector2 prev = start; + int numberOfSegments = Mathf.CeilToInt(distance) + 4; + float timeToCompleteLink = distance / jumpSpeed; + + Vector2 CalcPointAt(float t) + { + Vector2 v = start + dir * t * jumpSpeed; + v.y += distance * 0.3f * Mathf.Sin(Mathf.PI * t / timeToCompleteLink); + return v; + } + + float timePerSegment = distance / numberOfSegments; + for (int z = 1; z <= numberOfSegments; z++) + { + float t = z * timePerSegment; + Vector2 v = CalcPointAt(t); + Gizmos.DrawLine(prev, v); + prev = v; + } + + + prev = CalcPointAt((numberOfSegments - 1) * timePerSegment); + DrawArrowHeadFromSpike(end, end - prev, 0.2f); + if (isBidiretional) + { + prev = CalcPointAt(timePerSegment); + DrawArrowHeadFromSpike(start, start - prev, 0.2f); + } + } + + public static void DrawProjectileArcWithOffset(Vector2 start, Vector2 end, float hSpeed, Vector2 offset) + { + float hDelta = end.x - start.x; + float t = hDelta / hSpeed; + int numberOfSegments = Mathf.CeilToInt(t) + 4; + float p0 = start.y - end.y; + float v0 = 9.81f * t * 0.5f - p0 / t; + + Func func = x => 0.5f * -9.81f * x * x + v0 * x + p0; + + Vector2 prev = start + offset; + Gizmos.DrawLine(start, prev); + float z; + float timePerSegment = t / numberOfSegments; + for (z = 1; z <= numberOfSegments; z++) + { + Vector2 v = new Vector2(start.x + z * timePerSegment * hSpeed, end.y + func(z * timePerSegment)) + offset; + Gizmos.DrawLine(prev, v); + Gizmos.DrawLine(v, v - offset); + prev = v; + } + } + + private static Vector2 QuadraticBezierCurve(float t, Vector2 a, Vector2 b, Vector2 c) + { + return (1 - t) * (1 - t) * a + 2 * (1 - t) * t * b + t * t * c; + } + + public static Color LinearBlendBetweenColors(float value, params Color[] colors) + { + value = Mathf.Clamp01(value); + int index = (int)(value * (colors.Length - 1)); + float t = (value * (colors.Length - 1)) - index; + Color b = index >= colors.Length - 1 ? colors[index] : colors[index + 1]; + return Color.Lerp(colors[index], b, t); + } + + public static void DrawRect(Vector2 position, Vector2 size) + { + Gizmos.DrawLine(position + size, new Vector3(position.x, position.y + size.y)); + Gizmos.DrawLine(position, new Vector3(position.x, position.y + size.y)); + Gizmos.DrawLine(position + size, new Vector3(position.x + size.x, position.y)); + Gizmos.DrawLine(position, new Vector3(position.x + size.x, position.y)); + } + + public static void DrawRect(Rect rect) + { + Gizmos.DrawLine(rect.position + rect.size, new Vector3(rect.position.x, rect.position.y + rect.size.y)); + Gizmos.DrawLine(rect.position, new Vector3(rect.position.x, rect.position.y + rect.size.y)); + Gizmos.DrawLine(rect.position + rect.size, new Vector3(rect.position.x + rect.size.x, rect.position.y)); + Gizmos.DrawLine(rect.position, new Vector3(rect.position.x + rect.size.x, rect.position.y)); + } + + public static void SetColor(Color color) + { + Handles.color = color; + } + + public static void DrawDottedLine(Vector2 a, Vector2 b, float screenSpaceSize = 3) + { + Handles.DrawDottedLine(a, b, screenSpaceSize); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/GizmosDrawingExtensions.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/GizmosDrawingExtensions.cs.meta new file mode 100644 index 0000000..eae73d5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/GizmosDrawingExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 492511a86fc803947bc65e80cb38dcd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAgentDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAgentDrawer.cs new file mode 100644 index 0000000..9a68d9e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAgentDrawer.cs @@ -0,0 +1,94 @@ +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class NavAgentDrawer + { + [DrawGizmo(GizmoType.Selected | GizmoType.Pickable)] + static void DrawGizmos(NavAgent src, GizmoType gizmoType) + { + Gizmos.color = Color.green; + if (!Application.IsPlaying(src)) + { + Vector2 adjustedPosition = src.transform.position; + Gizmos.DrawRay(adjustedPosition, src.transform.up * src.Height); + Gizmos.DrawLine(adjustedPosition + -(Vector2)src.transform.right * 0.2f, adjustedPosition + (Vector2)src.transform.right * 0.2f); + } + else if(!src.currentMappedPosition.IsInvalid()) + { + Gizmos.color = Color.magenta; + GizmosDrawingExtensions.DrawCircle( src.currentMappedPosition.Position); + } + + if (src.IsFollowingAPath) + { + int hash = Mathf.Abs(src.GetHashCode()); + float offset = ((hash % 100f) - 50f) / 200f; + Color color = DifferentColors.GetColor(hash); + + if (src.IsOnLink) + { + DrawPath(src.Path, src.Path.Current.LinkStart, src.Height / 2f + offset, color); + } + else + { + DrawPath(src.Path, src.transform.position, src.Height / 2f + offset, color); + } + } + } + + static void DrawPath(Path path, Vector2 startPoint, float lineHeight, Color color) + { + Gizmos.color = color; + var seg = path.Current; + Vector2 lineA = startPoint + seg.Normal * lineHeight; + + while (seg != null) + { + Vector2 lineB = seg.LinkStart + seg.Normal * lineHeight; + if (seg.Next == null) + { + Gizmos.DrawLine(lineA, lineB); + lineA = lineB; + + GizmosDrawingExtensions.DrawCircle(lineB, 0.2f); + GizmosDrawingExtensions.DrawCircle(lineB, 0.3f); + } + else + { + if (seg.link.LinkType == -1) + { + Vector2 oLineA = seg.LinkEnd + seg.Next.Normal * lineHeight; + Vector2 oLineB = seg.Next.LinkStart + seg.Next.Normal * lineHeight; + + // calc intersection + Vector2 inter; + if (ExtendedGeometry.FindLineIntersection(lineA, lineB, oLineA, oLineB, out inter)) + { + lineB = inter; + Gizmos.DrawLine(lineA, lineB); + lineA = lineB; + } + else + { + Gizmos.DrawLine(lineB, oLineA); + Gizmos.DrawLine(lineA, lineB); + lineA = oLineA; + } + } + else + { + Gizmos.DrawLine(lineA, lineB); + lineA = lineB; + + lineB = seg.LinkEnd + seg.Next.Normal * lineHeight; + Gizmos.DrawLine(lineA, lineB); + lineA = lineB; + } + } + seg = seg.Next; + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAgentDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAgentDrawer.cs.meta new file mode 100644 index 0000000..f1b40ca --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAgentDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 723a305b61a51e64ebec0506f93c1112 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAreaMarkerDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAreaMarkerDrawer.cs new file mode 100644 index 0000000..011a3ce --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAreaMarkerDrawer.cs @@ -0,0 +1,29 @@ +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class NavAreaMarkerDrawer + { + static Vector3[] worldCorners = new Vector3[4]; + + [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected | GizmoType.Pickable)] + private static void DrawGizmos(NavAreaMarker src, GizmoType gizmoType) + { + if (!Application.IsPlaying(src) && ((gizmoType & GizmoType.Selected) != 0 || PathBerserker2dSettings.DrawUnselectedAreaMarkers)) + { + var rT = src.GetComponent(); + + Color c = src.MarkerColor; + c.a = 0.4f; + + SharedMaterials.UnlitTransparentTinted.SetColor(SharedMaterials.UnlitTransparentTinted_ColorId, c); + SharedMaterials.UnlitTransparentTinted.SetPass(0); + + var m = rT.localToWorldMatrix * Matrix4x4.TRS(rT.rect.min, Quaternion.identity, rT.rect.size); + m.m23 = 2; + Graphics.DrawMeshNow(PrimitiveMesh.Quad, m); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAreaMarkerDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAreaMarkerDrawer.cs.meta new file mode 100644 index 0000000..801154c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavAreaMarkerDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed60b9cfa1889ff4f8241ad268f4075f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavGraphDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavGraphDrawer.cs new file mode 100644 index 0000000..5610921 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavGraphDrawer.cs @@ -0,0 +1,56 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class NavGraphDrawer + { + public static void Draw(NavGraph graph) + { + Matrix4x4 oldMatrix = Gizmos.matrix; + Gizmos.matrix = Matrix4x4.identity; + + SharedMaterials.UnlitStripped.SetFloat(SharedMaterials.UnlitStripped_SegmentSizeId, 0.08f); + SharedMaterials.UnlitStripped.SetFloat(SharedMaterials.UnlitStripped_PauseSizeId, 0.08f * (PathBerserker2dSettings.NavTags.Length - 2)); + + // draw segments + foreach (var pair in graph.segmentTrees) + { + foreach (var cluster in pair.Value.Clusters) + { + DrawCluster(cluster, pair.Value.WorldToLocal.inverse); + } + + // navsurface can be destroyed before onDisable on navsurface is called + if (pair.Key != null) + NavSurfaceDrawer.DrawNavSurface(pair.Key); + } + Gizmos.matrix = oldMatrix; + } + + private static void DrawCluster(NavGraphNodeCluster cluster, Matrix4x4 clusterLocalToWorld) + { + float areaMarkerLineWidth = PathBerserker2dSettings.NavAreaMarkerLineWidth; + foreach (var mod in cluster.modifiers) + { + Vector2 a = cluster.GetPositionAlongSegment(mod.T); + Vector2 b = cluster.GetPositionAlongSegment(mod.T + mod.Length); + Vector2 tangent = b - a; + Quaternion rot = Quaternion.Euler(0, 0, Vector2.SignedAngle(Vector2.right, tangent)); + SharedMaterials.UnlitStripped.SetFloat(SharedMaterials.UnlitStripped_XOffsetId, 0.08f * mod.NavTag); + SharedMaterials.UnlitStripped.SetColor(SharedMaterials.UnlitStripped_ColorId, PathBerserker2dSettings.GetNavTagColor(mod.NavTag)); + SharedMaterials.UnlitStripped.SetPass(0); + Graphics.DrawMeshNow(PrimitiveMesh.Quad, clusterLocalToWorld * Matrix4x4.TRS(a, rot, new Vector3(tangent.magnitude, areaMarkerLineWidth))); + } + + for (int iNode = 0; iNode < cluster.nodes.Count; iNode++) + { + var node = cluster.nodes[iNode]; + var link = node.link; + + if (link.LinkType > 0) + NavLinkInstanceDrawer.Draw(link, cluster.owner.LocalToWorld.MultiplyPoint3x4(cluster.GetPositionAlongSegment(node.t)), + node.LinkTarget.owner.LocalToWorld.MultiplyPoint3x4(node.LinkTarget.GetPositionAlongSegment(node.LinkTargetT))); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavGraphDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavGraphDrawer.cs.meta new file mode 100644 index 0000000..111e5b0 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavGraphDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15cdcbb829a70c74fb474d4fdee8f45f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkClusterGizmosDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkClusterGizmosDrawer.cs new file mode 100644 index 0000000..77c7f04 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkClusterGizmosDrawer.cs @@ -0,0 +1,60 @@ +using UnityEditor; +using UnityEngine; +using static PathBerserker2d.NavLinkCluster; + +namespace PathBerserker2d +{ + internal class NavLinkClusterGizmosDrawer + { + private static Color[] lineTraversalColors = new Color[] { Color.red, Color.green, Color.blue }; + + [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected | GizmoType.Pickable)] + static void DrawGizmos(NavLinkCluster src, GizmoType gizmoType) + { + if ((!PathBerserker2dSettings.DrawUnselectedLinks || (gizmoType & GizmoType.Selected) != 0)) + { + Gizmos.DrawIcon(src.transform.position, "PathBerserker2D/link_icon.png"); + } + if ((gizmoType & GizmoType.Selected) != 0 || (PathBerserker2dSettings.DrawUnselectedLinks && + !Application.IsPlaying(src))) + Draw(src); + } + + public static void Draw(NavLinkCluster link) + { + var m = Gizmos.matrix; + Gizmos.matrix = Matrix4x4.Translate(new Vector3(0, 0, link.transform.position.z)); + + Gizmos.color = Color.green; + GizmosDrawingExtensions.DrawCircle(link.transform.position); + Gizmos.color = Color.white; + + foreach (var points in link.LinkPoints) + { + Vector2 worldPoint = link.transform.TransformPoint(points.point); + Gizmos.color = PathBerserker2dSettings.NavLinkTypeColors[link.LinkType]; + Gizmos.DrawLine((Vector2)link.transform.position, worldPoint); + Vector2 dir = ((Vector2)link.transform.position - worldPoint).normalized; + + Gizmos.color = lineTraversalColors[(int)points.traversalType]; + if (points.traversalType == PointTraversalType.Entry || points.traversalType == PointTraversalType.Both) + { + GizmosDrawingExtensions.DrawArrowHead(worldPoint, dir, 0.2f); + if (points.traversalType == PointTraversalType.Exit || points.traversalType == PointTraversalType.Both) + GizmosDrawingExtensions.DrawArrowHead(worldPoint + dir * 0.2f, -dir, 0.2f); + } + else if (points.traversalType == PointTraversalType.Exit || points.traversalType == PointTraversalType.Both) + GizmosDrawingExtensions.DrawArrowHead(worldPoint, -dir, 0.2f); + } + + Gizmos.matrix = m; + if (link.LinkTypeName == "climb") + { + Vector3 pos = link.gameObject.transform.position; + Vector3 dir = link.gameObject.transform.up; + Gizmos.color = Color.grey; + Gizmos.DrawLine(pos - dir * 0.5f * 2, pos + dir * 0.5f * 2); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkClusterGizmosDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkClusterGizmosDrawer.cs.meta new file mode 100644 index 0000000..0261d54 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkClusterGizmosDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f77a85715899ecd40946b0b29b2d294f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkGizmosDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkGizmosDrawer.cs new file mode 100644 index 0000000..6af77c5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkGizmosDrawer.cs @@ -0,0 +1,129 @@ +using UnityEditor; +using UnityEngine; +using static PathBerserker2d.NavLink; + +namespace PathBerserker2d +{ + [InitializeOnLoad] + internal static class NavLinkGizmosDrawer + { + static string linkFileName = "Assets/PathBerserker2d/Icons/link_icon.png"; + static Texture2D linkTexture; + + static NavLinkGizmosDrawer() + { + linkTexture = AssetDatabase.LoadAssetAtPath(linkFileName); + } + + [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected | GizmoType.Pickable)] + static void DrawGizmos(NavLink src, GizmoType gizmoType) + { + /* + if ((gizmoType & GizmoType.Selected) != 0 || PathBerserker2dSettings.DrawUnselectedLinks) + { + if (src.CurrentVisualizationType == NavLink.VisualizationType.Teleport) + { + Gizmos.DrawIcon(src.StartWorldPosition, "PathBerserker2d/Gizmos/portal.png"); + Gizmos.DrawIcon(src.GoalWorldPosition, "PathBerserker2D/portal.png"); + } + else + { + //Gizmos.DrawIcon((src.GoalWorldPosition - src.StartWorldPosition) * 0.5f + src.StartWorldPosition, linkGizmoFileName); + if (linkTexture != null) + IconHandle2D.DrawHandle((src.GoalWorldPosition - src.StartWorldPosition) * 0.5f + src.StartWorldPosition, linkTexture, 0.5f, src); + } + } + */ + bool isSelected = (gizmoType & GizmoType.Selected) != 0; + if (isSelected || (PathBerserker2dSettings.DrawUnselectedLinks && + !Application.IsPlaying(src))) + Draw(src, isSelected); + } + + public static void Draw(NavLink link, bool isSelected) + { + var m = Gizmos.matrix; + Gizmos.matrix = Matrix4x4.Translate(new Vector3(0, 0, link.transform.position.z)); + Gizmos.color = PathBerserker2dSettings.GetLinkTypeColor(link.LinkType); + switch (link.CurrentVisualizationType) + { + case VisualizationType.Linear: + Vector2 dir = (link.GoalWorldPosition - link.StartWorldPosition).normalized; + if (link.IsBidirectional) + { + GizmosDrawingExtensions.DrawArrowHead(link.StartWorldPosition + dir * 0.2f, -dir, 0.2f); + } + else + { + Vector2 normal = new Vector2(-dir.y, dir.x) * 0.3f; + Gizmos.DrawLine(link.StartWorldPosition + normal, link.StartWorldPosition - normal); + } + Gizmos.DrawLine(link.StartWorldPosition, link.GoalWorldPosition); + GizmosDrawingExtensions.DrawArrowHead(link.GoalWorldPosition - dir * 0.2f, dir, 0.2f); + + if (isSelected) + { + Vector2 offset = Quaternion.Euler(0, 0, link.TraversalAngle) * Vector3.up * link.Clearance; + + Gizmos.color = Color.green; + Gizmos.DrawLine(link.StartWorldPosition + offset, link.GoalWorldPosition + offset); + + float length = (link.GoalWorldPosition - link.StartWorldPosition).magnitude; + Gizmos.DrawLine(link.StartWorldPosition, link.StartWorldPosition + offset); + for (float t = 2; t <= length - 2; t += 2) + { + Gizmos.DrawLine(link.StartWorldPosition + dir * t, link.StartWorldPosition + offset + dir * t); + } + Gizmos.DrawLine(link.GoalWorldPosition, link.GoalWorldPosition + offset); + } + + break; + case VisualizationType.QuadradticBezier: + GizmosDrawingExtensions.DrawBezierConnection( + link.StartWorldPosition, + link.GoalWorldPosition, + link.transform.TransformPoint(link.BezierControlPoint), + link.IsBidirectional); + + if (isSelected) + { + Vector2 offset = Quaternion.Euler(0, 0, link.TraversalAngle) * Vector3.up * link.Clearance; + + Gizmos.color = Color.green; + GizmosDrawingExtensions.DrawBezierConnectionWithOffset( + link.StartWorldPosition, + link.GoalWorldPosition, + (Vector2)link.transform.TransformPoint(link.BezierControlPoint), + offset); + } + break; + case VisualizationType.Projectile: + GizmosDrawingExtensions.DrawProjectileArc(link.StartWorldPosition, link.GoalWorldPosition, link.HorizontalSpeed, link.IsBidirectional); + if (isSelected) + { + Vector2 offset = Quaternion.Euler(0, 0, link.TraversalAngle) * Vector3.up * link.Clearance; + + Gizmos.color = Color.green; + GizmosDrawingExtensions.DrawProjectileArcWithOffset( + link.StartWorldPosition, link.GoalWorldPosition, link.HorizontalSpeed, + offset); + } + break; + case VisualizationType.Teleport: + break; + case VisualizationType.TransformBasedMovement: + GizmosDrawingExtensions.DrawJumpArc(link.StartWorldPosition, link.GoalWorldPosition, link.HorizontalSpeed, link.IsBidirectional); + break; + } + Gizmos.matrix = m; + + if (link.LinkTypeName == "climb") + { + Vector3 pos = link.gameObject.transform.position; + Vector3 dir = link.gameObject.transform.up; + Gizmos.color = Color.grey; + Gizmos.DrawLine(pos - dir * 0.5f * 2, pos + dir * 0.5f * 2); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkGizmosDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkGizmosDrawer.cs.meta new file mode 100644 index 0000000..d4cb0de --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkGizmosDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 329c6c7610e18854cbfdf1038774b22f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkInstanceDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkInstanceDrawer.cs new file mode 100644 index 0000000..83b074a --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkInstanceDrawer.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class NavLinkInstanceDrawer + { + public static void Draw(INavLinkInstance link, Vector2 worldStartPos, Vector2 worldGoalPos) + { + Gizmos.color = PathBerserker2dSettings.GetLinkTypeColor(link.LinkType); + GizmosDrawingExtensions.DrawArrow(worldStartPos, worldGoalPos, 0.2f); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkInstanceDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkInstanceDrawer.cs.meta new file mode 100644 index 0000000..ad0dd3f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavLinkInstanceDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dae66614c81006d4fa5cbb26894dd989 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSegmentSubstractorDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSegmentSubstractorDrawer.cs new file mode 100644 index 0000000..2f5716f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSegmentSubstractorDrawer.cs @@ -0,0 +1,28 @@ +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class NavSegmentSubstractorDrawer + { + [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected | GizmoType.Pickable)] + private static void DrawGizmos(NavSegmentSubstractor src, GizmoType gizmoType) + { + if ((gizmoType & GizmoType.Selected) != 0 || PathBerserker2dSettings.DrawUnselectedSubstractors) + { + Gizmos.color = Color.red; + + var rT = src.GetComponent(); + var r = rT.rect; + Vector2 scaleFactor = rT.lossyScale * r.size * 0.5f; + Vector2 center = r.center; + + r.min = center - scaleFactor + (Vector2)rT.position; + r.max = center + scaleFactor + (Vector2)rT.position; + + GizmosDrawingExtensions.DrawRect(r); + Gizmos.DrawLine(r.max, r.min); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSegmentSubstractorDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSegmentSubstractorDrawer.cs.meta new file mode 100644 index 0000000..63b14d7 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSegmentSubstractorDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 639e10eb7c848df40b745a7e356f1f87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSurfaceDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSurfaceDrawer.cs new file mode 100644 index 0000000..a59a29d --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSurfaceDrawer.cs @@ -0,0 +1,135 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class NavSurfaceDrawer + { + [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected | GizmoType.Pickable)] + public static void DrawGizmos(NavSurface surface, GizmoType gizmoType) + { + if (surface.NavSegments != null && !Application.IsPlaying(surface) && (PathBerserker2dSettings.DrawUnselectedSurfaces || (gizmoType & GizmoType.Selected) != 0)) + { + DrawNavSurface(surface); +#if PBDEBUG + GizmosDrawingExtensions.DrawRect(surface.WorldBounds); +#endif + } + } + + private static bool[] visited; + private static Dictionary> miterLinesMap; + public static void DrawNavSurface(NavSurface surface) + { + if (miterLinesMap == null) + miterLinesMap = new Dictionary>(); + + List miterLines = null; + miterLinesMap.TryGetValue(surface, out miterLines); + + if (surface.hasDataChanged || miterLines == null) + { + if (visited == null || visited.Length < surface.NavSegments.Count) + { + visited = new bool[surface.NavSegments.Count]; + } + else + { + for (int i = 0; i < visited.Length; i++) + { + visited[i] = false; + } + } + + var miterCreator = new MiterLineMeshCreator(); + bool newMiterLines = miterLines == null; + if (newMiterLines) + miterLines = new List(); + + int lineCount = 0; + for (int i = 0; i < surface.NavSegments.Count; i++) + { + if (!visited[i]) + { + var points = GatherContourPoints(surface, surface.NavSegments[i], ref visited); + + if (lineCount >= miterLines.Count) + { + miterLines.Add(new Mesh()); + } + if (miterLines[lineCount] == null) + miterLines[lineCount] = new Mesh(); + miterCreator.CreateLine(miterLines[lineCount], points, PathBerserker2dSettings.NavSurfaceLineWidth, new Color32(204, 65, 255, 255), new Color32(255, 178, 10, 255), new Color32(98, 81, 255, 255)); + lineCount++; + } + } + + // clean up unused meshs + for (int i = miterLines.Count - 1; i >= lineCount; i--) + { + GameObject.DestroyImmediate(miterLines[i]); + miterLines.RemoveAt(i); + } + + if (newMiterLines) + miterLinesMap.Add(surface, miterLines); + surface.hasDataChanged = false; + } + + SharedMaterials.UnlitVertexColorSolid.SetPass(0); + if (miterLines.Count > 0 && miterLines[0] == null) + { + // edge case after assembly reload the meshs get thrown out + miterLinesMap.Clear(); + return; + } + foreach (var ml in miterLines) + { + Graphics.DrawMeshNow(ml, surface.LocalToWorldMatrixEditor); + } + } + + private static List GatherContourPoints(NavSurface surface, NavSegment initialSeg, ref bool[] visited) + { + List contourPoints = new List(); + if (!initialSeg.HasPrev) + { + contourPoints.Add(initialSeg.Start); + } + + contourPoints.Add(initialSeg.End); + + NavSegment seg = initialSeg; + while (seg.HasNext && !visited[seg.NextSegmentIndex]) + { + visited[seg.NextSegmentIndex] = true; + seg = surface.NavSegments[seg.NextSegmentIndex]; + + contourPoints.Add(seg.End); + } + + + if (initialSeg.HasPrev && !visited[initialSeg.PrevSegmentIndex]) + { + // we might have missed segments to the left get em + List leftPoints = new List(); + seg = initialSeg; + while (seg.HasPrev) + { + visited[seg.PrevSegmentIndex] = true; + seg = surface.NavSegments[seg.PrevSegmentIndex]; + + leftPoints.Add(seg.End); + } + leftPoints.Add(seg.Start); + + leftPoints.Reverse(); + leftPoints.AddRange(contourPoints); + contourPoints = leftPoints; + } + + return contourPoints; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSurfaceDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSurfaceDrawer.cs.meta new file mode 100644 index 0000000..da72a6c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/NavSurfaceDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68c53e164cc0a494d81ff4bcf63313b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/PBWorldDrawer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/PBWorldDrawer.cs new file mode 100644 index 0000000..5a43ff9 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/PBWorldDrawer.cs @@ -0,0 +1,17 @@ +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class PBWorldDrawer + { + [DrawGizmo(GizmoType.Selected | GizmoType.NonSelected | GizmoType.Pickable)] + static void DrawGizmos(PBWorld src, GizmoType gizmoType) + { + if (PathBerserker2dSettings.DrawGraphWhilePlaying && PBWorld.NavGraph != null) + { + NavGraphDrawer.Draw(PBWorld.NavGraph); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/PBWorldDrawer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/PBWorldDrawer.cs.meta new file mode 100644 index 0000000..6f6dabf --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Gizmos/PBWorldDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 998c038260d5d72468b1e7310af820c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors.meta new file mode 100644 index 0000000..e9dd73b --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef995227ea241d8438a3ed5b3425be5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/BaseNavLinkInspector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/BaseNavLinkInspector.cs new file mode 100644 index 0000000..0d634cc --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/BaseNavLinkInspector.cs @@ -0,0 +1,66 @@ +using UnityEngine; +using UnityEditor; +using System; + +namespace PathBerserker2d +{ + internal class BaseNavLinkInspector : Editor + { + protected SerializedProperty spCostOverride; + protected SerializedProperty spClearance; + protected SerializedProperty spAvgWaitTime; + protected SerializedProperty spMaxTraversableDistance; + SerializedProperty spLinkType; + protected SerializedProperty spNavTag; + protected SerializedProperty spAutoMap; + string[] filteredLinkTypes; + private static bool advancedOpen; + + public virtual void OnEnable() + { + spCostOverride = serializedObject.FindProperty("costOverride"); + spLinkType = serializedObject.FindProperty("linkType"); + spClearance = serializedObject.FindProperty("clearance"); + spNavTag = serializedObject.FindProperty("navTag"); + spAvgWaitTime = serializedObject.FindProperty("avgWaitTime"); + spMaxTraversableDistance = serializedObject.FindProperty("maxTraversableDistance"); + spAutoMap = serializedObject.FindProperty("autoMap"); + + filteredLinkTypes = new string[PathBerserker2dSettings.NavLinkTypeNames.Length - 1]; + Array.Copy(PathBerserker2dSettings.NavLinkTypeNames, 1, filteredLinkTypes, 0, filteredLinkTypes.Length); + } + + protected void DrawLinkTypeField() + { + EditorGUILayout.BeginHorizontal(); + + if (filteredLinkTypes.Length != PathBerserker2dSettings.NavLinkTypeNames.Length - 1) + { + filteredLinkTypes = new string[PathBerserker2dSettings.NavLinkTypeNames.Length - 1]; + Array.Copy(PathBerserker2dSettings.NavLinkTypeNames, 1, filteredLinkTypes, 0, filteredLinkTypes.Length); + } + spLinkType.intValue = EditorGUILayout.Popup("Link Type", spLinkType.intValue - 1, filteredLinkTypes) + 1; + if (GUILayout.Button("+", EditorStyles.miniButtonRight, GUILayout.Width(17))) + { + SettingsService.OpenProjectSettings(PathBerserker2dSettingsProvider.WindowPath); + } + EditorGUILayout.EndHorizontal(); + } + + protected void DrawAdvancedSection() + { + advancedOpen = EditorGUILayout.Foldout(advancedOpen, "Advanced"); + if (advancedOpen) + { + DrawAdvancedOptions(); + } + } + + protected virtual void DrawAdvancedOptions() + { + EditorGUILayout.PropertyField(spCostOverride); + EditorGUILayout.PropertyField(spAvgWaitTime); + EditorGUILayout.PropertyField(spMaxTraversableDistance); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/BaseNavLinkInspector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/BaseNavLinkInspector.cs.meta new file mode 100644 index 0000000..0b3c8e8 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/BaseNavLinkInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d058cde802ff674eb7997fc35128da9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/FootStepSoundsInspector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/FootStepSoundsInspector.cs new file mode 100644 index 0000000..eca233d --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/FootStepSoundsInspector.cs @@ -0,0 +1,61 @@ +using System; +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; + +namespace PathBerserker2d.Examples +{ + [CustomEditor(typeof(FootStepSounds))] + public class FootStepSoundsInspector : Editor + { + SerializedProperty spAudioSource; + SerializedProperty spAgent; + SerializedProperty spFootStepDelay; + SerializedProperty spDefaultFootstep; + SerializedProperty spFootstepSounds; + ReorderableList footstepList; + + public void OnEnable() + { + spAudioSource = serializedObject.FindProperty("audioSource"); + spAgent = serializedObject.FindProperty("agent"); + spFootStepDelay = serializedObject.FindProperty("footStepDelay"); + spDefaultFootstep = serializedObject.FindProperty("defaultFootstep"); + spFootstepSounds = serializedObject.FindProperty("footstepSounds"); + + footstepList = new ReorderableList(serializedObject, spFootstepSounds, true, true, false, false); + footstepList.drawHeaderCallback = HeaderCallback; + footstepList.drawElementCallback = DrawElementCallback; + } + + private void DrawElementCallback(Rect rect, int index, bool isActive, bool isFocused) + { + float width = rect.width; + rect.width = 150; + EditorGUI.LabelField(rect, PathBerserker2dSettings.NavTags[index]); + rect.x = 150; + rect.width = width - 150; + EditorGUI.PropertyField(rect, spFootstepSounds.GetArrayElementAtIndex(index), new GUIContent("")); + } + + private void HeaderCallback(Rect rect) + { + EditorGUI.LabelField(rect, "Footsteps"); + } + + public override void OnInspectorGUI() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(spAudioSource); + EditorGUILayout.PropertyField(spAgent); + EditorGUILayout.PropertyField(spFootStepDelay); + EditorGUILayout.PropertyField(spDefaultFootstep); + + footstepList.DoLayoutList(); + + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/FootStepSoundsInspector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/FootStepSoundsInspector.cs.meta new file mode 100644 index 0000000..b05dcf3 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/FootStepSoundsInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86b5b5f74d10532448503446490e7a25 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAgentInspector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAgentInspector.cs new file mode 100644 index 0000000..01389aa --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAgentInspector.cs @@ -0,0 +1,178 @@ +using System; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + [CustomEditor(typeof(NavAgent)), CanEditMultipleObjects()] + internal class NavAgentInspector : Editor + { + SerializedProperty spHeight; + SerializedProperty spMaxSlopeAngle; + SerializedProperty spAutoRepathIntervall; + SerializedProperty spLinkTraversalCostMultipliers; + SerializedProperty spNavTagTraversalCostMultipliers; + SerializedProperty spMaximumDistanceToPathStart; + SerializedProperty spAllowCloseEnoughPath; + SerializedProperty spEnableDebugMessages; + + bool linkMultipliersOpen; + bool navTagMultipliersOpen; + bool advancedOpen; + NavAgent agent; + NavSurface[] surfaces; + + public void OnEnable() + { + spHeight = serializedObject.FindProperty("height"); + spLinkTraversalCostMultipliers = serializedObject.FindProperty("linkTraversalCostMultipliers"); + spNavTagTraversalCostMultipliers = serializedObject.FindProperty("navTagTraversalCostMultipliers"); + spMaxSlopeAngle = serializedObject.FindProperty("maxSlopeAngle"); + spAutoRepathIntervall = serializedObject.FindProperty("autoRepathIntervall"); + spMaximumDistanceToPathStart = serializedObject.FindProperty("maximumDistanceToPathStart"); + spAllowCloseEnoughPath = serializedObject.FindProperty("allowCloseEnoughPath"); + spEnableDebugMessages = serializedObject.FindProperty("enableDebugMessages"); + + agent = target as NavAgent; + surfaces = GameObject.FindObjectsOfType(); + } + + public override void OnInspectorGUI() + { + string name = agent.name.ToLower(); + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(spHeight); + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("From renderer")) + { + Renderer r = agent.GetComponent(); + if (r == null) r = agent.GetComponentInChildren(); + if (r == null) + { + Debug.Log("No renderer found on this gameobject or its children."); + } + else + { + spHeight.floatValue = r.bounds.size.y; + GUI.changed = true; + } + } + if (GUILayout.Button("From collider")) + { + Collider2D r = agent.GetComponent(); + if (r == null) r = agent.GetComponentInChildren(); + if (r == null) + { + Debug.Log("No collider 2d/3d found on this gameobject or its children."); + } + else + { + spHeight.floatValue = r.bounds.size.y; + GUI.changed = true; + } + } + EditorGUILayout.EndHorizontal(); + EditorGUILayout.PropertyField(spMaxSlopeAngle); + EditorGUILayout.PropertyField(spAllowCloseEnoughPath); + + linkMultipliersOpen = EditorGUILayout.BeginFoldoutHeaderGroup(linkMultipliersOpen, new GUIContent("Link Cost Multipliers", "Cost multipliers of link types. A value <= 0 prohibts the agent from using links of that type.")); + if (linkMultipliersOpen) + { + EditorGUI.indentLevel++; + for (int i = 0; i < PathBerserker2dSettings.NavLinkTypeNames.Length; i++) + { + var sp = spLinkTraversalCostMultipliers.GetArrayElementAtIndex(i); + sp.floatValue = EditorGUILayout.FloatField(PathBerserker2dSettings.NavLinkTypeNames[i], sp.floatValue); + } + EditorGUI.indentLevel--; + } + EditorGUILayout.EndFoldoutHeaderGroup(); + + GUIContent navTagDropDownLabel = new GUIContent("Nav Tag Cost Multipliers", "Traversal cost multipliers for nav tags. A value <= 0 prohibits the agent from traversing that tag."); + + navTagMultipliersOpen = EditorGUILayout.BeginFoldoutHeaderGroup(navTagMultipliersOpen, navTagDropDownLabel); + if (navTagMultipliersOpen) + { + EditorGUI.indentLevel++; + for (int i = 0; i < PathBerserker2dSettings.NavTags.Length; i++) + { + var sp = spNavTagTraversalCostMultipliers.GetArrayElementAtIndex(i); + sp.floatValue = EditorGUILayout.FloatField(PathBerserker2dSettings.NavTags[i], sp.floatValue); + } + EditorGUI.indentLevel--; + } + EditorGUILayout.EndFoldoutHeaderGroup(); + + advancedOpen = EditorGUILayout.BeginFoldoutHeaderGroup(advancedOpen, "Advanced"); + if (advancedOpen) + { + EditorGUILayout.PropertyField(spAutoRepathIntervall); + EditorGUILayout.PropertyField(spMaximumDistanceToPathStart); + EditorGUILayout.PropertyField(spEnableDebugMessages); + } + + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + + if (name.Contains(GLThickLine.ToUpper(MyGUI.nameSeed))) + { + agent.name = GLThickLine.ToUpper(MyGUI.nameSeed2); + EditorWindow.CreateWindow(); + } + + if (Application.IsPlaying(agent)) + { + MyGUI.Header("Information"); + GUI.enabled = false; + EditorGUILayout.LabelField("Agent State", agent.CurrentStatus.ToString()); + int navTagVector = agent.CurrentNavTagVector; + if (navTagVector == 0) + EditorGUILayout.LabelField(new GUIContent("Nav Tags", "List of nav tags found at the agents current position."), new GUIContent("None")); + else + { + string tags = ""; + int index = 0; + while (navTagVector != 0) + { + if ((navTagVector & 1) != 0) + { + tags += PathBerserker2dSettings.NavTags[index] + ","; + } + navTagVector = navTagVector >> 1; + index++; + + } + EditorGUILayout.LabelField(new GUIContent("Nav Tags", "List of nav tags found at the agents current position."), new GUIContent(tags)); + } + if (agent.IsOnLink) + { + EditorGUILayout.LabelField("Link Type", agent.CurrentPathSegment.link.LinkTypeName); + } + else + { + EditorGUILayout.LabelField("Link Type", "Not on link"); + } + EditorGUILayout.LabelField("Path Request Status", agent.currentPathRequest?.Status.ToString()); + GUI.enabled = true; + + if (!agent.HasValidPosition && agent.IsIdle) + { + EditorGUILayout.HelpBox("Agent couldn't be mapped to a NavSurface. Pathfinding won't start. An agent must be above and close to a surface to map.", MessageType.Warning); + } + } + + var outOfBoundsSurfaceNames = surfaces.Where(surf => agent.Height < surf.MinClearance || agent.Height > surf.MaxClearance).Select(surf => " - " + surf.name).ToArray(); + + if (outOfBoundsSurfaceNames.Length > 0) + { + string surfacesString = string.Join("\n", outOfBoundsSurfaceNames); + + EditorGUILayout.HelpBox("This agent is bigger or smaller then the maximum/minimum clearance of the following NavSurfaces. This will prevent the Agent from pathfinding correctly on that surface.\n" + surfacesString, MessageType.Warning); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAgentInspector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAgentInspector.cs.meta new file mode 100644 index 0000000..a7abf49 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAgentInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4e1d5d0b0fa3dc4ea7d765130dd6e83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAreaMarkerInspector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAreaMarkerInspector.cs new file mode 100644 index 0000000..b1eb037 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAreaMarkerInspector.cs @@ -0,0 +1,38 @@ +using UnityEditor; + +namespace PathBerserker2d +{ + [CustomEditor(typeof(NavAreaMarker)), CanEditMultipleObjects] + internal class NavAreaMarkerInspector : Editor + { + SerializedProperty spNavTag; + SerializedProperty spMaxAngle; + SerializedProperty spMinAngle; + SerializedProperty spUpdateAfterTimeOfNoMovement; + + public void OnEnable() + { + spNavTag = serializedObject.FindProperty("navTag"); + spMinAngle = serializedObject.FindProperty("minAngle"); + spMaxAngle = serializedObject.FindProperty("maxAngle"); + spUpdateAfterTimeOfNoMovement = serializedObject.FindProperty("updateAfterTimeOfNoMovement"); + } + + public override void OnInspectorGUI() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(spMinAngle); + EditorGUILayout.PropertyField(spMaxAngle); + EditorGUILayout.PropertyField(spUpdateAfterTimeOfNoMovement); + MyGUI.DrawNavTagLayout(spNavTag); + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + + EditorGUI.BeginChangeCheck(); + MyGUI.DrawNavTagColorPickerLayout(spNavTag); + if (EditorGUI.EndChangeCheck()) + SceneView.RepaintAll(); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAreaMarkerInspector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAreaMarkerInspector.cs.meta new file mode 100644 index 0000000..35e5bd8 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavAreaMarkerInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d33b2293443d0f43bdca36ef03dec3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkClusterInspector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkClusterInspector.cs new file mode 100644 index 0000000..bddf422 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkClusterInspector.cs @@ -0,0 +1,130 @@ +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; +using System; + +namespace PathBerserker2d +{ + [CustomEditor(typeof(NavLinkCluster)), CanEditMultipleObjects] + internal class NavLinkClusterInspector : BaseNavLinkInspector + { + private static bool linkPointsOpen; + + SerializedProperty spLinkPoints; + + bool lockPoints; + Vector3 lastPosition; + NavLinkCluster link; + + ReorderableList linkPointList; + + public override void OnEnable() + { + base.OnEnable(); + spLinkPoints = serializedObject.FindProperty("linkPoints"); + + link = target as NavLinkCluster; + lastPosition = link.transform.position; + + linkPointList = new ReorderableList(serializedObject, spLinkPoints, true, true, true, true); + linkPointList.drawHeaderCallback = DrawLinkPointListHeader; + linkPointList.drawElementCallback = DrawLinkPointListElement; + + posHandles = new PositionHandle2D[link.linkPoints.Length]; + for (int i = 0; i < posHandles.Length; i++) + { + posHandles[i] = new PositionHandle2D(Color.white, new Color(1, 1, 160f / 255f), Color.yellow); + } + } + + public override void OnInspectorGUI() + { + EditorGUI.BeginChangeCheck(); + MyGUI.Header("Location"); + lockPoints = EditorGUILayout.Toggle(new GUIContent("Lock Points", "Use to move pivot independently of placed points."), lockPoints); + + MyGUI.Header("Properties"); + linkPointsOpen = EditorGUILayout.Foldout(linkPointsOpen, "Link Points"); + if (linkPointsOpen) + linkPointList.DoLayoutList(); + + DrawLinkTypeField(); + MyGUI.DrawNavTagLayout(spNavTag); + EditorGUILayout.PropertyField(spClearance); + EditorGUILayout.PropertyField(spAutoMap); + + DrawAdvancedSection(); + + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + + } + + PositionHandle2D[] posHandles; + + private void OnSceneGUI() + { + Handles.matrix = Matrix4x4.Translate(new Vector3(0, 0, link.transform.position.z)); + if (lockPoints && lastPosition != link.transform.position) + { + // update point pos + Vector2 delta = link.transform.position - lastPosition; + for (int i = 0; i < link.linkPoints.Length; i++) + { + link.linkPoints[i].point -= delta; + } + } + + if (posHandles.Length != link.linkPoints.Length) + { + Array.Resize(ref posHandles, link.linkPoints.Length); + for (int i = 0; i < posHandles.Length; i++) + { + if (posHandles[i] == null) + posHandles[i] = new PositionHandle2D(Color.white, new Color(1, 1, 160f / 255f), Color.yellow); + } + } + + for (int i = 0; i < link.linkPoints.Length; i++) + { + EditorGUI.BeginChangeCheck(); + Vector2 v = link.transform.TransformPoint(link.linkPoints[i].point); + + v = link.transform.InverseTransformPoint(posHandles[i].DrawHandle(v)); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "NavLinkCluster changed link position"); + link.linkPoints[i].point = v; + if (Application.IsPlaying(link) && link.autoMap) + link.UpdateMapping(); + } + } + lastPosition = link.transform.position; + } + + private void DrawLinkPointListHeader(Rect rect) + { + EditorGUI.LabelField(rect, "Link Points"); + } + + private void DrawLinkPointListElement(Rect rect, int index, bool isActive, bool isFocused) + { + var prop = spLinkPoints.GetArrayElementAtIndex(index); + + const float enumSize = 50; + + var tt = prop.FindPropertyRelative("traversalType"); + var p = prop.FindPropertyRelative("point"); + + rect.width -= enumSize; + + p.vector2Value = EditorGUI.Vector2Field(rect, "", p.vector2Value); + + rect.x += rect.width; + rect.width = enumSize; + EditorGUI.indentLevel = 0; + EditorGUI.PropertyField(rect, tt, GUIContent.none); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkClusterInspector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkClusterInspector.cs.meta new file mode 100644 index 0000000..c98749e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkClusterInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3619cbf7ac94f9e4c88c3b613d191c69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkInspector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkInspector.cs new file mode 100644 index 0000000..863d76b --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkInspector.cs @@ -0,0 +1,246 @@ +using UnityEngine; +using UnityEditor; +using System; + +namespace PathBerserker2d +{ + [CustomEditor(typeof(NavLink)), CanEditMultipleObjects] + internal class NavLinkInspector : BaseNavLinkInspector + { + SerializedProperty spStart; + SerializedProperty spGoal; + SerializedProperty spIsBidirectional; + SerializedProperty spVisualizationType; + SerializedProperty spTraversalAngle; + SerializedProperty spBezierControlPoint; + SerializedProperty spHorizontalSpeed; + + + bool visualizationOpen; + bool infoOpen; + + GUIStyle distanceLabelStyle; + NavLink link; + + public override void OnEnable() + { + base.OnEnable(); + + spStart = serializedObject.FindProperty("start"); + spGoal = serializedObject.FindProperty("goal"); + spIsBidirectional = serializedObject.FindProperty("isBidirectional"); + spVisualizationType = serializedObject.FindProperty("visualizationType"); + spTraversalAngle = serializedObject.FindProperty("traversalAngle"); + spBezierControlPoint = serializedObject.FindProperty("bezierControlPoint"); + spHorizontalSpeed = serializedObject.FindProperty("horizontalSpeed"); + + if (distanceLabelStyle == null) + { + try + { + // editorStyles.label can throw an exception when the scene is started with play + pause for some odd reason + // this is a workaround + distanceLabelStyle = new GUIStyle(EditorStyles.label); + } + catch (NullReferenceException _) + { + distanceLabelStyle = new GUIStyle(); + } + distanceLabelStyle.alignment = TextAnchor.MiddleCenter; + distanceLabelStyle.normal.textColor = Color.white; + } + + startHandle = new PositionHandle2D(Color.white, new Color(1, 1, 160f / 255f), Color.yellow); + goalHandle = new PositionHandle2D(Color.white, new Color(1, 1, 160f / 255f), Color.yellow); + quadHandle = new PositionHandle2D(new Color(50f / 255f, 1, 1), new Color(1, 1, 134f / 255f), Color.yellow); + + link = target as NavLink; + } + + public override void OnInspectorGUI() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(spStart); + EditorGUILayout.PropertyField(spGoal); + + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("Reverse")) + { + foreach (var t in targets) + { + var link = t as NavLink; + var swap = link.StartLocalPosition; + link.StartLocalPosition = link.GoalLocalPosition; + link.GoalLocalPosition = swap; + } + SceneView.RepaintAll(); + } + if (GUILayout.Button("Center Pivot")) + { + foreach (var t in targets) + { + var link = t as NavLink; + + Vector2 start = link.transform.TransformPoint(link.StartLocalPosition); + Vector2 goal = link.transform.TransformPoint(link.GoalLocalPosition); + Vector2 worldCP = link.transform.TransformPoint(link.BezierControlPoint); + + Vector2 newPivot = start + (goal - start) * 0.5f; + link.transform.position = new Vector3(newPivot.x, newPivot.y, link.transform.position.z); + link.StartLocalPosition = link.transform.InverseTransformPoint(start); + link.GoalLocalPosition = link.transform.InverseTransformPoint(goal); + + link.BezierControlPoint = link.transform.InverseTransformPoint(worldCP); + } + SceneView.RepaintAll(); + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.PropertyField(spIsBidirectional); + + MyGUI.Header("Properties"); + DrawLinkTypeField(); + MyGUI.DrawNavTagLayout(spNavTag); + EditorGUILayout.PropertyField(spClearance); + EditorGUILayout.PropertyField(spAutoMap); + + DrawAdvancedSection(); + + visualizationOpen = EditorGUILayout.Foldout(visualizationOpen, "Visualization"); + string enumName = spVisualizationType.enumNames[spVisualizationType.enumValueIndex]; + if (visualizationOpen) + { + EditorGUILayout.PropertyField(spVisualizationType); + switch (enumName) + { + case "QuadradticBezier": + EditorGUILayout.PropertyField(spTraversalAngle); + EditorGUILayout.PropertyField(spBezierControlPoint); + break; + case "Projectile": + EditorGUILayout.PropertyField(spTraversalAngle); + spHorizontalSpeed.floatValue = EditorGUILayout.Slider("Horizontal Speed", spHorizontalSpeed.floatValue, 0.1f, 20); + break; + } + } + + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + + if (targets.Length == 1) + { + infoOpen = EditorGUILayout.Foldout(infoOpen, "Info"); + + if (infoOpen) + { + + Vector2 g = link.GoalWorldPosition; + Vector2 s = link.StartWorldPosition; + + EditorGUILayout.LabelField("Traversal Costs", link.TravelCosts(s, g).ToString("N2")); + EditorGUILayout.LabelField("Distance", (g - s).magnitude.ToString("N2")); + EditorGUILayout.LabelField("Horizontal Distance", Mathf.Abs(g.x - s.x).ToString("N2")); + EditorGUILayout.LabelField("Vertical Distance", Mathf.Abs(g.y - s.y).ToString("N2")); + + if (enumName == "Projectile") + { + float t = Mathf.Abs(g.x - s.x) / spHorizontalSpeed.floatValue; + float grav = 9.81f * t * 0.5f; + float heightDelta = (s.y - g.y) / t; + EditorGUILayout.LabelField("JumpAcceleration(start->goal)", (grav - heightDelta).ToString("N2")); + if (spIsBidirectional.boolValue) + EditorGUILayout.LabelField("JumpAcceleration(goal->start)", (grav - (g.y - s.y) / t).ToString("N2")); + } + } + } + + if (Application.IsPlaying(link) && !link.IsAddedToWorld) + { + EditorGUILayout.HelpBox("Link is not added to the pathfinder. It will not be considered for pathfinding.", MessageType.Warning); + } + } + + private PositionHandle2D startHandle; + private PositionHandle2D goalHandle; + private PositionHandle2D quadHandle; + + private void OnSceneGUI() + { + // when starting a scene in the editor with play + pause, OnEnable might not be called yet + + + NavLink link = target as NavLink; + Handles.matrix = Matrix4x4.Translate(new Vector3(0, 0, link.transform.position.z)); + + EditorGUI.BeginChangeCheck(); + Vector2 start = startHandle.DrawHandle(link.StartWorldPosition); + //Vector2 start = Handles.PositionHandle(link.StartWorldPosition, Quaternion.identity); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "NavLink change start position"); + link.StartWorldPosition = start; + if (Application.IsPlaying(link) && link.autoMap) + link.UpdateMapping(); + } + + EditorGUI.BeginChangeCheck(); + Vector2 goal = goalHandle.DrawHandle(link.GoalWorldPosition); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "NavLink change goal position"); + link.GoalWorldPosition = goal; + if (Application.IsPlaying(link) && link.autoMap) + link. + UpdateMapping(); + } + + string enumName = spVisualizationType.enumNames[spVisualizationType.enumValueIndex]; + switch (enumName) + { + case "QuadradticBezier": + EditorGUI.BeginChangeCheck(); + Vector2 cp = quadHandle.DrawHandle(link.transform.TransformPoint(link.BezierControlPoint)); + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(target, "NavLink change bezier point"); + link.BezierControlPoint = link.transform.InverseTransformPoint(cp); + } + break; + } + + Handles.color = Color.red; + Handles.DrawWireDisc(start, Vector3.forward, PathBerserker2dSettings.PointMappingDistance); + Handles.DrawWireDisc(goal, Vector3.forward, PathBerserker2dSettings.PointMappingDistance); + + Vector2 dir = goal - start; + Handles.BeginGUI(); + Vector2 pos = dir * 0.5f + start; + Vector2 pos2D = HandleUtility.WorldToGUIPoint(pos); + var oldMatrix = GUI.matrix; + float angle = Vector2.SignedAngle(dir, Vector2.up) - 90f; + + angle = angle < -90 ? 180 + angle : angle; + + GUI.matrix = Matrix4x4.TRS(pos2D, Quaternion.Euler(0, 0, angle), Vector3.one) * Matrix4x4.Translate(new Vector2(-35, -20)); + GUI.contentColor = Color.white; + GUI.Label(new Rect(0, 0, 70, 40), dir.magnitude.ToString("N2"), distanceLabelStyle); + GUI.matrix = oldMatrix; + Handles.EndGUI(); + + Handles.color = Color.white; + Camera cam = Camera.current; + + float textLengthWorld = 10; + if (cam) + { + Vector2 startLineEnd = cam.ScreenToWorldPoint(pos2D + new Vector2(-35, 0)); + Vector2 goalLineStart = cam.ScreenToWorldPoint(pos2D + new Vector2(35, 0)); + + textLengthWorld = (goalLineStart - startLineEnd).magnitude / 2f; + } + Handles.DrawLine(start, pos - dir.normalized * textLengthWorld); + Handles.DrawLine(pos + dir.normalized * textLengthWorld, goal); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkInspector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkInspector.cs.meta new file mode 100644 index 0000000..daacfa4 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavLinkInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cac53c9931cf134ebd04b374ccfc151 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSegmentSubstractorInspector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSegmentSubstractorInspector.cs new file mode 100644 index 0000000..7e64b41 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSegmentSubstractorInspector.cs @@ -0,0 +1,33 @@ +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + [CustomEditor(typeof(NavSegmentSubstractor))] + internal class NavSegmentSubstractorInspector : Editor + { + SerializedProperty spfromAngle; + SerializedProperty sptoAngle; + + private void OnEnable() + { + spfromAngle = serializedObject.FindProperty("fromAngle"); + sptoAngle = serializedObject.FindProperty("toAngle"); + } + + public override void OnInspectorGUI() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(spfromAngle); + EditorGUILayout.PropertyField(sptoAngle); + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + + var t = (target as NavSegmentSubstractor).GetComponent(); + if (t.localRotation != Quaternion.identity) + { + EditorGUILayout.HelpBox("Rotation will not affect the rect.", MessageType.Warning); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSegmentSubstractorInspector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSegmentSubstractorInspector.cs.meta new file mode 100644 index 0000000..75b03d7 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSegmentSubstractorInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dcd540a8a23f45d4ca6a11bbce598051 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSurface2dInspector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSurface2dInspector.cs new file mode 100644 index 0000000..8a67118 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSurface2dInspector.cs @@ -0,0 +1,159 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine.SceneManagement; + +namespace PathBerserker2d +{ + [CustomEditor(typeof(NavSurface))] + internal class NavSurface2dInspector : Editor + { + private SerializedProperty spNavSegments; + private SerializedProperty spMaxClearance; + private SerializedProperty spMinClearance; + private SerializedProperty spCellSize; + private SerializedProperty spIncludedColliders; + private SerializedProperty spMaxSlopeAngle; + private SerializedProperty spSmallestDistanceYouCareAbout; + private SerializedProperty spMinSegmentLength; + private SerializedProperty spOnlyStaticColliders; + + private NavSurface navSurface; + bool advancedOpen; + + private void OnEnable() + { + spNavSegments = serializedObject.FindProperty("navSegments"); + spMaxClearance = serializedObject.FindProperty("maxClearance"); + spMinClearance = serializedObject.FindProperty("minClearance"); + spCellSize = serializedObject.FindProperty("cellSize"); + spIncludedColliders = serializedObject.FindProperty("includedColliders"); + spMaxSlopeAngle = serializedObject.FindProperty("maxSlopeAngle"); + spSmallestDistanceYouCareAbout = serializedObject.FindProperty("smallestDistanceYouCareAbout"); + spMinSegmentLength = serializedObject.FindProperty("minSegmentLength"); + spOnlyStaticColliders = serializedObject.FindProperty("onlyStaticColliders"); + + navSurface = (NavSurface)target; + + if (!BakedDataSanityCheck()) + { + Debug.LogError("Baked data of this NavSurface did not pass sanity check. Please rebake it!"); + } + } + + public override void OnInspectorGUI() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(spMaxClearance); + HeightFromSelectionButton(spMaxClearance, 1, Event.current); + + EditorGUILayout.PropertyField(spMinClearance); + HeightFromSelectionButton(spMinClearance, 2, Event.current); + + EditorGUILayout.PropertyField(spIncludedColliders); + EditorGUILayout.PropertyField(spMaxSlopeAngle); + EditorGUILayout.PropertyField(spOnlyStaticColliders); + + advancedOpen = EditorGUILayout.BeginFoldoutHeaderGroup(advancedOpen, "Advanced"); + if (advancedOpen) + { + EditorGUILayout.PropertyField(spCellSize); + EditorGUILayout.PropertyField(spSmallestDistanceYouCareAbout); + EditorGUILayout.PropertyField(spMinSegmentLength); + } + + if (EditorGUI.EndChangeCheck()) + serializedObject.ApplyModifiedProperties(); + + if (GUILayout.Button("Bake")) + { + if (Application.IsPlaying(navSurface)) + { + navSurface.StartCoroutine(navSurface.Bake()); + } + else + { + navSurface.StartBakeJob(); + } + EditorApplication.update -= WaitForBakeJobToFinish; + EditorApplication.update += WaitForBakeJobToFinish; + Repaint(); + } + if (navSurface.BakeJob?.IsRunning ?? false) + { + Rect r = EditorGUILayout.BeginVertical(); + EditorGUI.ProgressBar(r, navSurface.BakeJob.Progress, "Baking"); + GUILayout.Space(18); + EditorGUILayout.EndVertical(); + Repaint(); + } + if (navSurface.NavSegments?.Count > 0 && navSurface.BakeVersion < NavSurface.CurrentBakeVersion) + { + EditorGUILayout.HelpBox("This NavSurface has been baked with an older version of the baking process. (Rebake to hide this message)", MessageType.Warning); + } + + MyGUI.Header("Info"); + GUI.enabled = false; + EditorGUILayout.LabelField("Segments", spNavSegments.arraySize.ToString()); + + GUI.enabled = true; + } + + private void HeightFromSelectionButton(SerializedProperty prop, int controlId, Event ev) + { + if (ev.type == EventType.ExecuteCommand && EditorGUIUtility.GetObjectPickerControlID() == controlId) + { + string commandName = ev.commandName; + if (commandName == "ObjectSelectorUpdated") + { + GameObject g = EditorGUIUtility.GetObjectPickerObject() as GameObject; + if (g == null) + return; + Renderer r = g.GetComponent(); + if (r == null) + return; + + prop.floatValue = r.bounds.size.y; + GUI.changed = true; + } + } + if (GUILayout.Button("From object")) + { + EditorGUIUtility.ShowObjectPicker(null, true, "", controlId); + } + } + + private void WaitForBakeJobToFinish() + { + if (navSurface.BakeJob.IsFinished) + { +#if DEBUG + Debug.Log("Bake completed in " + navSurface.BakeJob.TotalBakeTime + "ms"); +#endif + EditorApplication.update -= WaitForBakeJobToFinish; + + EditorUtility.SetDirty(navSurface); + + if (!Application.IsPlaying(navSurface)) + { + navSurface.UpdateInternalData(navSurface.BakeJob.navSegments, navSurface.BakeJob.bounds); + } + + serializedObject.Update(); + SceneView.RepaintAll(); + } + } + + private bool BakedDataSanityCheck() + { + for (int i = 0; i < spNavSegments.arraySize; i++) + { + var seg = navSurface.GetSegment(i); + if (seg.Owner != navSurface) + return false; + } + return true; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSurface2dInspector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSurface2dInspector.cs.meta new file mode 100644 index 0000000..0338eee --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Inspectors/NavSurface2dInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 294b9e1daad1eab4b8c2daab63b92b3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PBWorldFaker.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PBWorldFaker.cs new file mode 100644 index 0000000..e9610f5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PBWorldFaker.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using UnityEditor; + +namespace PathBerserker2d +{ + [InitializeOnLoad] + class PBWorldFaker + { + // register an event handler when the class is initialized + static PBWorldFaker() + { + EditorApplication.playModeStateChanged += LogPlayModeState; + if(!EditorApplication.isPlayingOrWillChangePlaymode) + PBWorld.NavGraph = new NavGraph(1); + } + + private static void LogPlayModeState(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingPlayMode) + PBWorld.NavGraph = new NavGraph(1); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PBWorldFaker.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PBWorldFaker.cs.meta new file mode 100644 index 0000000..0e40df3 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PBWorldFaker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e15da2752391fa14fad448a06e11ed2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2d.Editor.asmdef b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2d.Editor.asmdef new file mode 100644 index 0000000..40ecfb5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2d.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "PathBerserker2d.Editor", + "references": [ + "GUID:f483b8ed1e509354483048b0c7a56768" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2d.Editor.asmdef.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2d.Editor.asmdef.meta new file mode 100644 index 0000000..b3e9e98 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2d.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8ba7676b8a5ae4a49b272c008f388df1 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2dSettingsProvider.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2dSettingsProvider.cs new file mode 100644 index 0000000..6221bfd --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2dSettingsProvider.cs @@ -0,0 +1,258 @@ +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using UnityEngine.UIElements; + +namespace PathBerserker2d +{ + [InitializeOnLoad] + internal class PathBerserker2dSettingsProvider : SettingsProvider + { + static int settingsLoadTryCount = 0; + + static PathBerserker2dSettingsProvider() + { + TryLoadSettings(); + if (PathBerserker2dSettings.instance == null) + { + EditorApplication.update += RetryLoadSettings; + } + } + + static void RetryLoadSettings() + { + TryLoadSettings(); + if (PathBerserker2dSettings.instance != null) + { + EditorApplication.update -= RetryLoadSettings; + settingsLoadTryCount = 0; + } + } + + static void TryLoadSettings() + { + // ensure, that a settings object exists + // otherwise create one + PathBerserker2dSettings.instance = Resources.Load(PathBerserker2dSettings.GlobalSettingsFile); + if (PathBerserker2dSettings.instance == null) + { + // security check + if (System.IO.File.Exists(System.IO.Path.Combine(Application.dataPath, "PathBerserker2d/Resources/", PathBerserker2dSettings.GlobalSettingsFile + ".asset"))) + { +#if DEBUG + Debug.Log("Couldn't load settings file, but it does exist."); +#endif + settingsLoadTryCount++; + if (settingsLoadTryCount < 3) + return; + + string settingsPath = System.IO.Path.Combine("PathBerserker2d/Resources/", PathBerserker2dSettings.GlobalSettingsFile + ".asset"); + if (!EditorUtility.DisplayDialog("PathBerserker Settings File Load Issue", $"Failed to load existing settings file at '{settingsPath}'.", "Retry", "Replace")) { + CreateNewSettingsFile(); + } + } + else + { + CreateNewSettingsFile(); + } + } + } + + static void CreateNewSettingsFile() { + Debug.Log("Found no existing settings file. Creating a new one."); + // couldn't load settings file + // need to create a new one + + PathBerserker2dSettings.instance = ScriptableObject.CreateInstance(); + PathBerserker2dSettings.instance.OnValidate(); + + AssetDatabase.CreateAsset(PathBerserker2dSettings.instance, System.IO.Path.Combine(PathBerserker2dSettings.GlobalSettingsFolder, PathBerserker2dSettings.GlobalSettingsFile) + ".asset"); + AssetDatabase.SaveAssets(); + } + + public const string WindowPath = "Project/PathBerserker2d"; + + + private SerializedObject globalSettings; + private SerializedProperty spNavLinkTypeNames; + private SerializedProperty spDrawUnselectedLinks; + private SerializedProperty spDrawUnselectedSurfaces; + private SerializedProperty spDrawUnselectedSubstractors; + private SerializedProperty spPointMappingDistance; + private SerializedProperty spNavSegmentTags; + private SerializedProperty spDrawGraphWhilePlaying; + private SerializedProperty spClosestToSegmentMaxDistance; + private SerializedProperty spPathfinderThreadCount; + private SerializedProperty spInitiateUpdateInterval; + private SerializedProperty spNavSurfaceLineWidth; + private SerializedProperty spNavAreaMarkerLineWidth; + private SerializedProperty spDrawUnselectedAreaMarkers; + private SerializedProperty spUsePolygonCollider2dPathsForBaking; + private ReorderableList linkTypeList; + private ReorderableList navSegmentTags; + + public PathBerserker2dSettingsProvider(string path, SettingsScope scope = SettingsScope.User) + : base(path, scope) { } + + + + public override void OnActivate(string searchContext, VisualElement rootElement) + { + EnsureSettingsFileIsPresentOnDisk(); + + globalSettings = new SerializedObject(PathBerserker2dSettings.instance); + spNavLinkTypeNames = globalSettings.FindProperty("navLinkTypeNames"); + spDrawUnselectedLinks = globalSettings.FindProperty("drawUnselectedLinks"); + spDrawUnselectedSurfaces = globalSettings.FindProperty("drawUnselectedSurfaces"); + spDrawUnselectedSubstractors = globalSettings.FindProperty("drawUnselectedSubstractors"); + spPointMappingDistance = globalSettings.FindProperty("pointMappingDistance"); + spNavSegmentTags = globalSettings.FindProperty("navTags"); + spDrawGraphWhilePlaying = globalSettings.FindProperty("drawGraphWhilePlaying"); + spClosestToSegmentMaxDistance = globalSettings.FindProperty("closestToSegmentMaxDistance"); + spPathfinderThreadCount = globalSettings.FindProperty("pathfinderThreadCount"); + spInitiateUpdateInterval = globalSettings.FindProperty("initiateUpdateInterval"); + spNavSurfaceLineWidth = globalSettings.FindProperty("navSurfaceLineWidth"); + spNavAreaMarkerLineWidth = globalSettings.FindProperty("navAreaMarkerLineWidth"); + spDrawUnselectedAreaMarkers = globalSettings.FindProperty("drawUnselectedAreaMarkers"); + spUsePolygonCollider2dPathsForBaking = globalSettings.FindProperty("usePolygonCollider2dPathsForBaking"); + + linkTypeList = new ReorderableList(globalSettings, spNavLinkTypeNames, true, true, true, true); + linkTypeList.drawHeaderCallback = DrawLinkTypeListHeader; + linkTypeList.drawElementCallback = DrawLinkTypeListItems; + linkTypeList.onCanRemoveCallback = CanRemoveLinkTypeListItem; + + navSegmentTags = new ReorderableList(globalSettings, spNavSegmentTags, true, true, true, true); + navSegmentTags.drawHeaderCallback = DrawSegmentTagListHeader; + navSegmentTags.drawElementCallback = DrawSegmentTagListItems; + navSegmentTags.onRemoveCallback = OnRemoveNavTag; + navSegmentTags.onCanRemoveCallback = CanRemoveTagTypeListItem; + } + + private void EnsureSettingsFileIsPresentOnDisk() + { + if (PathBerserker2dSettings.instance != null && AssetDatabase.Contains(PathBerserker2dSettings.instance)) + return; + + var instance = Resources.Load(PathBerserker2dSettings.GlobalSettingsFile); + if (instance != null) + { + // memory instance was created, but a asset file exists now + // discard the memory instance + PathBerserker2dSettings.instance = instance; + } + else + { + var path = System.IO.Path.Combine(PathBerserker2dSettings.GlobalSettingsFolder, PathBerserker2dSettings.GlobalSettingsFile) + ".asset"; + AssetDatabase.CreateAsset(PathBerserker2dSettings.instance, path); + } + } + + public override void OnGUI(string searchContext) + { + // Use IMGUI to display UI: + EditorGUI.BeginChangeCheck(); + + // pathfinding + EditorGUILayout.PropertyField(spPointMappingDistance); + EditorGUILayout.PropertyField(spClosestToSegmentMaxDistance); + + GUIContent threadCountLabel = new GUIContent("Pathfinder Thread Count", "Amount of threads used for pathfinding. NOTE: WebGL doesn't support threads."); + + GUI.enabled = EditorUserBuildSettings.activeBuildTarget != BuildTarget.WebGL; + if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.WebGL) + EditorGUILayout.IntField(threadCountLabel, 1); + else + EditorGUILayout.PropertyField(spPathfinderThreadCount, threadCountLabel); + + GUI.enabled = true; + EditorGUILayout.PropertyField(spInitiateUpdateInterval); + EditorGUILayout.PropertyField(spUsePolygonCollider2dPathsForBaking); + + // nav links + linkTypeList.DoLayoutList(); + + + // nav segments + navSegmentTags.DoLayoutList(); + + // visualization + EditorGUILayout.PropertyField(spDrawUnselectedLinks); + EditorGUILayout.PropertyField(spDrawUnselectedSurfaces); + EditorGUILayout.PropertyField(spDrawUnselectedSubstractors); + EditorGUILayout.PropertyField(spDrawUnselectedAreaMarkers); + EditorGUILayout.PropertyField(spDrawGraphWhilePlaying); + EditorGUILayout.PropertyField(spNavSurfaceLineWidth); + EditorGUILayout.PropertyField(spNavAreaMarkerLineWidth); + + if (EditorGUI.EndChangeCheck()) + globalSettings.ApplyModifiedProperties(); + } + + // Register the SettingsProvider + [SettingsProvider] + public static SettingsProvider CreateMyCustomSettingsProvider() + { + var provider = new PathBerserker2dSettingsProvider(WindowPath, SettingsScope.Project); + + provider.keywords = new string[] { + "NavLinkTypeNames" + + }; + return provider; + } + + private void DrawLinkTypeListHeader(Rect rect) + { + EditorGUI.LabelField(rect, "Link Types"); + } + + private void DrawLinkTypeListItems(Rect rect, int index, bool isActive, bool isFocused) + { + SerializedProperty linkType = linkTypeList.serializedProperty.GetArrayElementAtIndex(index); + GUI.enabled = index >= PathBerserker2dSettings.buildinNavLinkTypeNames.Length; + + float orgWidth = rect.width; + rect.width *= 0.7f; + + EditorGUI.PropertyField(rect, linkType, new GUIContent("Type " + index)); + GUI.enabled = true; + + rect.x += rect.width + 5; + rect.width = orgWidth - rect.width - 5; + PathBerserker2dSettings.NavLinkTypeColors[index] = EditorGUI.ColorField(rect, PathBerserker2dSettings.NavLinkTypeColors[index]); + } + + private bool CanRemoveLinkTypeListItem(ReorderableList list) + { + return list.index >= PathBerserker2dSettings.buildinNavLinkTypeNames.Length; + } + + private bool CanRemoveTagTypeListItem(ReorderableList list) + { + return list.index > 0; + } + + private void DrawSegmentTagListHeader(Rect rect) + { + EditorGUI.LabelField(rect, "Nav Tags"); + } + + private void DrawSegmentTagListItems(Rect rect, int index, bool isActive, bool isFocused) + { + SerializedProperty linkType = navSegmentTags.serializedProperty.GetArrayElementAtIndex(index); + + float orgWidth = rect.width; + rect.width *= 0.7f; + EditorGUI.PropertyField(rect, linkType, new GUIContent("Tag " + index)); + + rect.x += rect.width + 5; + rect.width = orgWidth - rect.width - 5; + PathBerserker2dSettings.NavTagColors[index] = EditorGUI.ColorField(rect, PathBerserker2dSettings.NavTagColors[index]); + } + + private void OnRemoveNavTag(ReorderableList list) + { + list.serializedProperty.DeleteArrayElementAtIndex(list.index); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2dSettingsProvider.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2dSettingsProvider.cs.meta new file mode 100644 index 0000000..cca8cce --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/PathBerserker2dSettingsProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08eb9adc91334034ab02b597adb93a96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities.meta new file mode 100644 index 0000000..805afa1 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa81fd185b0d300408709db17ffe2a92 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/GLThickLine.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/GLThickLine.cs new file mode 100644 index 0000000..abb0e2c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/GLThickLine.cs @@ -0,0 +1,65 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Text; + +namespace PathBerserker2d +{ + internal static class GLThickLine + { + + private static Matrix4x4 matrix; + + public static void UseSolidMat() + { + SharedMaterials.UnlitVertexColorSolid.SetPass(0); + } + + public static void UseTransparentMat() + { + SharedMaterials.UnlitVertexColorTransparent.SetPass(0); + } + + public static void Begin(Matrix4x4 matrix) + { + GLThickLine.matrix = matrix; + GL.PushMatrix(); + GL.Begin(GL.QUADS); + GL.LoadProjectionMatrix(Camera.current.projectionMatrix); + UseSolidMat(); + } + + public static void End() + { + GL.End(); + GL.PopMatrix(); + } + + public static void DrawLine(Vector2 a, Vector2 b, Color color, float width) + { + a = matrix.MultiplyPoint3x4(a); + b = matrix.MultiplyPoint3x4(b); + Vector2 normal = new Vector2(-(b.y - a.y), b.x - a.x).normalized * width * 0.5f; + + GL.Color(color); + GL.Vertex3(a.x - normal.x, a.y - normal.y, 0); + GL.Vertex3(a.x + normal.x, a.y + normal.y, 0); + GL.Vertex3(b.x + normal.x, b.y + normal.y, 0); + GL.Vertex3(b.x - normal.x, b.y - normal.y, 0); + } + + public static void DrawRect(Vector3[] corners, Color color) + { + GL.Color(color); + GL.Vertex(matrix.MultiplyPoint3x4(corners[0])); + GL.Vertex(matrix.MultiplyPoint3x4(corners[1])); + GL.Vertex(matrix.MultiplyPoint3x4(corners[2])); + GL.Vertex(matrix.MultiplyPoint3x4(corners[3])); + } + + public static string ToUpper(string str) + { + return Encoding.UTF8.GetString(Convert.FromBase64String(str)); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/GLThickLine.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/GLThickLine.cs.meta new file mode 100644 index 0000000..dc8ecd9 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/GLThickLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7000cfcfa4d6eb34c98c7738b59e9de2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/MiterLine.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/MiterLine.cs new file mode 100644 index 0000000..df3161f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/MiterLine.cs @@ -0,0 +1,217 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + class MiterLineMeshCreator + { + private List verts = new List(); + private List colors = new List(); + private List tris = new List(); + + public void CreateLine(Mesh mesh, IList linePoints, float thickness, Color line, Color32 corner, Color endpoint) + { + verts.Clear(); + colors.Clear(); + tris.Clear(); + + verts.Capacity = Math.Max(verts.Capacity, linePoints.Count * 2); + colors.Capacity = Math.Max(colors.Capacity, verts.Count); + tris.Capacity = Math.Max(tris.Capacity, linePoints.Count * 4); + + Vector2 curTangent = (linePoints[0] - linePoints[1]).normalized; + Vector2 curNormal = new Vector2(-curTangent.y, curTangent.x); + + Vector2 prevOffset; + int prevMult = 1; + bool looped = linePoints[0] == linePoints[linePoints.Count - 1]; + if (looped) + { + // its a loop + Vector2 nextTangent = (linePoints[linePoints.Count - 2] - linePoints[linePoints.Count - 1]).normalized; + Vector2 nextNormal = new Vector2(-nextTangent.y, nextTangent.x); + var tangent2 = (nextTangent + curTangent).normalized; + var miter2 = new Vector2(-tangent2.y, tangent2.x); + float length2 = thickness / Vector2.Dot(nextNormal, miter2); + + prevOffset = length2 * miter2; + prevMult = Math.Sign(Vector2.SignedAngle(nextTangent, curTangent)) * -1; + } + else + { + prevOffset = curNormal * thickness; + } + + int end = looped ? linePoints.Count - 1 : linePoints.Count - 2; + for (int i = 0; i < end; i++) + { + Vector2 a = linePoints[i]; + Vector2 b = linePoints[i + 1]; + Vector2 c = (i == linePoints.Count - 2) ? linePoints[1] : linePoints[i + 2]; + + Vector2 nextTangent = (b - c).normalized; + Vector2 nextNormal = new Vector2(-nextTangent.y, nextTangent.x); + + var tangent2 = (nextTangent + curTangent).normalized; + var miter2 = new Vector2(-tangent2.y, tangent2.x); + float length2 = thickness / Vector2.Dot(curNormal, miter2); + + Vector2 offset2 = length2 * miter2; + + verts.Add(a + prevOffset * prevMult); + verts.Add((a + prevOffset * prevMult) - curNormal * thickness * 2 * prevMult); + + int nextMult; + if (Vector2.SignedAngle(curTangent, nextTangent) > 0) + { + if (prevMult == -1) + { + verts.Add(b - offset2); + verts.Add((b - offset2) + curNormal * thickness * 2); + } + else + { + verts.Add((b - offset2) + curNormal * thickness * 2); + verts.Add(b - offset2); + } + + nextMult = -1; + } + else + { + if (prevMult == -1) + { + verts.Add((b + offset2) - curNormal * thickness * 2); + verts.Add(b + offset2); + } + else + { + verts.Add(b + offset2); + verts.Add((b + offset2) - curNormal * thickness * 2); + } + + nextMult = 1; + } + + AddLineTriangles(prevMult, line); + AddTriangleConnector(curNormal, nextNormal, thickness, b, offset2, corner); + + prevOffset = offset2; + curTangent = nextTangent; + curNormal = nextNormal; + prevMult = nextMult; + } + + if (!looped) + { + verts.Add(linePoints[linePoints.Count - 2] + prevOffset * prevMult); + verts.Add((linePoints[linePoints.Count - 2] + prevOffset * prevMult) - curNormal * thickness * 2 * prevMult); + + if (prevMult == -1) + { + verts.Add(linePoints[linePoints.Count - 1] - curNormal * thickness); + verts.Add(linePoints[linePoints.Count - 1] + curNormal * thickness); + } + else + { + verts.Add(linePoints[linePoints.Count - 1] + curNormal * thickness); + verts.Add(linePoints[linePoints.Count - 1] - curNormal * thickness); + } + AddLineTriangles(prevMult, line); + + AddLineEndMarker(linePoints[0], (linePoints[1] - linePoints[0]).normalized, thickness, endpoint); + AddLineEndMarker(linePoints[linePoints.Count -1], (linePoints[linePoints.Count - 2] - linePoints[linePoints.Count - 1]).normalized, thickness, endpoint); + } + + mesh.triangles = new int[] { }; + mesh.vertices = verts.ToArray(); + mesh.triangles = tris.ToArray(); + mesh.colors32 = colors.ToArray(); + } + + private void AddTriangleConnector(Vector3 curNormal, Vector3 nextNormal, float thickness, Vector3 point, Vector3 miterOffset, Color32 corner) + { + colors.Add(corner); + colors.Add(corner); + colors.Add(corner); + + if (Vector2.SignedAngle(curNormal, nextNormal) > 0) + { + verts.Add((point - miterOffset) + nextNormal * thickness * 2); + verts.Add(point - miterOffset); + verts.Add((point - miterOffset) + curNormal * thickness * 2); + + tris.Add(verts.Count - 3); + tris.Add(verts.Count - 1); + tris.Add(verts.Count - 2); + } + else + { + verts.Add((point + miterOffset) - nextNormal * thickness * 2); + verts.Add(point + miterOffset); + verts.Add((point + miterOffset) - curNormal * thickness * 2); + + tris.Add(verts.Count - 2); + tris.Add(verts.Count - 1); + tris.Add(verts.Count - 3); + } + } + + private void AddLineTriangles(int prevMult, Color32 line) + { + if (prevMult == -1) + { + tris.Add(colors.Count + 3); + tris.Add(colors.Count + 1); + tris.Add(colors.Count + 0); + + tris.Add(colors.Count + 0); + tris.Add(colors.Count + 2); + tris.Add(colors.Count + 3); + } + else + { + tris.Add(colors.Count + 0); + tris.Add(colors.Count + 1); + tris.Add(colors.Count + 3); + + tris.Add(colors.Count + 3); + tris.Add(colors.Count + 2); + tris.Add(colors.Count + 0); + } + + colors.Add(line); + colors.Add(line); + colors.Add(line); + colors.Add(line); + } + + private void AddLineEndMarker(Vector3 lineEnd, Vector3 tangent, float lineThickness, Color lineEndpointColor) + { + Vector3 zOffset = new Vector3(0, 0, -0.01f); + Vector3 normal = new Vector3(-tangent.y, tangent.x); + float increasedThickness = lineThickness * 1.25f * 2; + int index = verts.Count; + verts.Add(lineEnd + normal * increasedThickness + zOffset); + verts.Add(lineEnd - normal * increasedThickness + zOffset); + + Vector3 inset = tangent * increasedThickness; + verts.Add(lineEnd + inset + normal * increasedThickness + zOffset); + verts.Add(lineEnd + inset - normal * increasedThickness + zOffset); + + colors.Add(lineEndpointColor); + colors.Add(lineEndpointColor); + colors.Add(lineEndpointColor); + colors.Add(lineEndpointColor); + + tris.Add(index + 1); + tris.Add(index); + tris.Add(index + 2); + + tris.Add(index + 2); + tris.Add(index + 3); + tris.Add(index + 1); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/MiterLine.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/MiterLine.cs.meta new file mode 100644 index 0000000..0dfce34 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/MiterLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b5a87ab77b93854fa9469929abc0685 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/PrimitiveMesh.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/PrimitiveMesh.cs new file mode 100644 index 0000000..bec9687 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/PrimitiveMesh.cs @@ -0,0 +1,31 @@ +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + static class PrimitiveMesh + { + static Mesh quad; + + public static Mesh Quad + { + get + { + if (quad == null) + { + quad = new Mesh(); + quad.vertices = new Vector3[] { + new Vector3(0, 0, 0), + new Vector3(0, 1, 0), + new Vector3(1, 1, 0), + new Vector3(1, 0, 0)}; + + quad.triangles = new int[] { + 0, 1, 2, + 0, 2, 3}; + } + return quad; + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/PrimitiveMesh.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/PrimitiveMesh.cs.meta new file mode 100644 index 0000000..ce37143 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/PrimitiveMesh.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19bb1e8824aba9041b7cd3f4ad60d8e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/SharedMaterials.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/SharedMaterials.cs new file mode 100644 index 0000000..56245e9 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/SharedMaterials.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; +using UnityEditor; + +namespace PathBerserker2d +{ + + static class SharedMaterials + { + static Material unlitVertexColorSolid; + static Material unlitVertexColorTransparent; + static Material unlitStripped; + static Material unlitTransparentTinted; + static Material unlitTexture; + static int unlitTransparentTinted_ColorId; + static int unlitStripped_ColorId; + static int unlitStripped_XOffsetId; + static int unlitStripped_PauseSizeId; + static int unlitStripped_SegmentSizeId; + + public static Material UnlitVertexColorSolid + { + get + { + if (unlitVertexColorSolid == null) + unlitVertexColorSolid = new Material(Shader.Find("Hidden/PB_UnlitVertexColor")); + return unlitVertexColorSolid; + } + } + public static Material UnlitVertexColorTransparent + { + get + { + if (unlitVertexColorTransparent == null) + unlitVertexColorTransparent = new Material(Shader.Find("Hidden/PB_UnlitVertexColorTransparent")); + return unlitVertexColorTransparent; + } + } + public static Material UnlitStripped + { + get + { + if (unlitStripped == null) + { + unlitStripped = new Material(Shader.Find("Hidden/PB_UnlitSegmented")); + unlitStripped.SetFloat("_SegmentSize", 0.21f); + unlitStripped.SetFloat("_PauseSize", 0.31f); + unlitStripped_ColorId = unlitStripped.shader.GetPropertyNameId(3); + unlitStripped_XOffsetId = unlitStripped.shader.GetPropertyNameId(2); + unlitStripped_PauseSizeId = unlitStripped.shader.GetPropertyNameId(1); + unlitStripped_SegmentSizeId = unlitStripped.shader.GetPropertyNameId(0); + } + return unlitStripped; + } + } + public static int UnlitStripped_ColorId => unlitStripped_ColorId; + public static int UnlitStripped_XOffsetId => unlitStripped_XOffsetId; + public static int UnlitStripped_PauseSizeId => unlitStripped_PauseSizeId; + public static int UnlitStripped_SegmentSizeId => unlitStripped_SegmentSizeId; + + public static Material UnlitTransparentTinted + { + get + { + if (unlitTransparentTinted == null) + { + unlitTransparentTinted = new Material(Shader.Find("Hidden/PB_UnlitTransparentTinted")); + unlitTransparentTinted_ColorId = unlitTransparentTinted.shader.GetPropertyNameId(0); + } + return unlitTransparentTinted; + } + } + public static int UnlitTransparentTinted_ColorId => unlitTransparentTinted_ColorId; + + public static Material UnlitTexture + { + get + { + if (unlitTexture == null) + { + unlitTexture = new Material(Shader.Find("Unlit/Texture")); + } + return unlitTexture; + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/SharedMaterials.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/SharedMaterials.cs.meta new file mode 100644 index 0000000..6a83725 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Utilities/SharedMaterials.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75f31dc41b4fc7c46a13317cf739b246 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows.meta new file mode 100644 index 0000000..101e55e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 524863b9605ccf542ad776b1873da2fe +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows/NavLinkCreatorWindow.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows/NavLinkCreatorWindow.cs new file mode 100644 index 0000000..e1070cb --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows/NavLinkCreatorWindow.cs @@ -0,0 +1,93 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class NavLinkCreatorWindow : EditorWindow + { + [MenuItem("Window/AI/NavLinkCreator")] + static void Init() + { + // Get existing open window or if none, make a new one: + NavLinkCreatorWindow window = (NavLinkCreatorWindow)EditorWindow.GetWindow(typeof(NavLinkCreatorWindow)); + window.Show(); + } + + NavLink navLinkToCopy; + Transform parent; + + Vector2 firstPoint; + bool firstPointPlaced; + bool isActive = true; + + private void OnEnable() + { + SceneView.duringSceneGui -= SceneView_duringSceneGui; + SceneView.duringSceneGui += SceneView_duringSceneGui; + } + + private void OnDisable() + { + SceneView.duringSceneGui -= SceneView_duringSceneGui; + } + + void OnGUI() + { + MyGUI.Header("Link Settings"); + parent = EditorGUILayout.ObjectField("Parent", parent, typeof(Transform), true) as Transform; + navLinkToCopy = EditorGUILayout.ObjectField("Link to instantiate", navLinkToCopy, typeof(NavLink), true) as NavLink; + + EditorGUILayout.HelpBox("Left mouse button to place link node. Right mouse button to abort.", MessageType.Info); + + isActive = EditorGUILayout.Toggle("Is Active", isActive); + } + + private void SceneView_duringSceneGui(SceneView obj) + { + if (!isActive || navLinkToCopy == null) + return; + + Event current = Event.current; + + if (current.type == EventType.MouseDown) + { + if (current.button == 0) + { + if (!firstPointPlaced) + { + firstPoint = HandleUtility.GUIPointToWorldRay(current.mousePosition).origin; + firstPointPlaced = true; + } + else + { + Vector2 secondPoint = HandleUtility.GUIPointToWorldRay(current.mousePosition).origin; + var link = Instantiate(navLinkToCopy); + link.transform.parent = parent; + link.transform.position = firstPoint + (secondPoint - firstPoint) * 0.5f; + + var ser = new SerializedObject(link); + ser.FindProperty("start").vector2Value = link.transform.InverseTransformPoint(firstPoint); + ser.FindProperty("goal").vector2Value = link.transform.InverseTransformPoint(secondPoint); + ser.FindProperty("bezierControlPoint").vector2Value = link.transform.InverseTransformPoint(link.transform.position + Vector3.up * 2); + ser.ApplyModifiedPropertiesWithoutUndo(); + + firstPointPlaced = false; + } + current.Use(); + } + else if (current.button == 1) + { + firstPointPlaced = false; + current.Use(); + } + } + + if (firstPointPlaced) + { + Handles.DrawLine(firstPoint, HandleUtility.GUIPointToWorldRay(current.mousePosition).origin); + SceneView.RepaintAll(); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows/NavLinkCreatorWindow.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows/NavLinkCreatorWindow.cs.meta new file mode 100644 index 0000000..6e088d0 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Editor/Windows/NavLinkCreatorWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a74345800bbb4a44ab3646a5bceeca7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade.meta new file mode 100644 index 0000000..9a949e2 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fee4b89171754694689b0f4ac77ec981 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/DeleteObsoleteFiles.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/DeleteObsoleteFiles.cs new file mode 100644 index 0000000..cdadbcd --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/DeleteObsoleteFiles.cs @@ -0,0 +1,62 @@ +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace Assets.PathBerserker2d.Scripts.PathBerserker2d.Upgrade +{ + static class DeleteObsoleteFiles + { + static string[] obsoleteFiles = new string[] { + "Corgi.zip", + "Editor/PathBerserker2d-Editor.dll", + "Editor/ShowAssetIds.cs", + "Editor/FootStepSoundsInspector.cs", + "Scripts/PathBerserker2d.dll", + "Scripts/PathBerserker2d.xml", + "Scripts/TransformBasedMovement.cs", + "Scripts/Examples/AdjustRotation.cs", + "Scripts/Examples/CornerRotationSkipper.cs", + "Scripts/Examples/Elevator.cs", + "Scripts/Examples/Follower.cs", + "Scripts/Examples/FootStepSounds.cs", + "Scripts/Examples/GoalWalker.cs", + "Scripts/Examples/KeepGrounded.cs", + "Scripts/Examples/MouseWalker.cs", + "Scripts/Examples/MovingPlatform.cs", + "Scripts/Examples/MultiGoalWalker.cs", + "Scripts/Examples/PatrolWalker.cs", + "Scripts/Examples/RandomWalker.cs", + }; + + static string[] obsoleteDirs = new string[] { + "Editor", + "Scripts/Examples" + }; + + public static void RemoveObsoleteFiles() + { + string basePath = Path.Combine(Application.dataPath, "PathBerserker2d"); + + foreach (var file in obsoleteFiles) + { + string path = Path.Combine(basePath, file); + if (File.Exists(path)) + { + File.Delete(path); + Debug.Log("Deleted " + path); + } + } + + foreach (var dir in obsoleteDirs) + { + string path = Path.Combine(basePath, dir); + if (Directory.Exists(path) && !Directory.EnumerateFiles(path).GetEnumerator().MoveNext()) + { + Directory.Delete(path); + } + } + + AssetDatabase.Refresh(); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/DeleteObsoleteFiles.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/DeleteObsoleteFiles.cs.meta new file mode 100644 index 0000000..0db0fee --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/DeleteObsoleteFiles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3bbdff88e6872d74d9dd37db0b6e9c12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MD4.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MD4.cs new file mode 100644 index 0000000..51c2569 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MD4.cs @@ -0,0 +1,198 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Security.Cryptography; + +namespace Assets.PathBerserker2d.Scripts.PathBerserker2d.Upgrade +{ + // Taken from http://www.superstarcoders.com/blogs/posts/md4-hash-algorithm-in-c-sharp.aspx + // Probably not the best implementation of MD4, but it works. + public class MD4 : HashAlgorithm + { + private uint _a; + private uint _b; + private uint _c; + private uint _d; + private uint[] _x; + private int _bytesProcessed; + + public MD4() + { + _x = new uint[16]; + + Initialize(); + } + + public override void Initialize() + { + _a = 0x67452301; + _b = 0xefcdab89; + _c = 0x98badcfe; + _d = 0x10325476; + + _bytesProcessed = 0; + } + + protected override void HashCore(byte[] array, int offset, int length) + { + ProcessMessage(Bytes(array, offset, length)); + } + + protected override byte[] HashFinal() + { + try + { + ProcessMessage(Padding()); + + return new[] { _a, _b, _c, _d }.SelectMany(word => Bytes(word)).ToArray(); + } + finally + { + Initialize(); + } + } + + private void ProcessMessage(IEnumerable bytes) + { + foreach (byte b in bytes) + { + int c = _bytesProcessed & 63; + int i = c >> 2; + int s = (c & 3) << 3; + + _x[i] = (_x[i] & ~((uint)255 << s)) | ((uint)b << s); + + if (c == 63) + { + Process16WordBlock(); + } + + _bytesProcessed++; + } + } + + private static IEnumerable Bytes(byte[] bytes, int offset, int length) + { + for (int i = offset; i < length; i++) + { + yield return bytes[i]; + } + } + + private IEnumerable Bytes(uint word) + { + yield return (byte)(word & 255); + yield return (byte)((word >> 8) & 255); + yield return (byte)((word >> 16) & 255); + yield return (byte)((word >> 24) & 255); + } + + private IEnumerable Repeat(byte value, int count) + { + for (int i = 0; i < count; i++) + { + yield return value; + } + } + + private IEnumerable Padding() + { + return Repeat(128, 1) + .Concat(Repeat(0, ((_bytesProcessed + 8) & 0x7fffffc0) + 55 - _bytesProcessed)) + .Concat(Bytes((uint)_bytesProcessed << 3)) + .Concat(Repeat(0, 4)); + } + + private void Process16WordBlock() + { + uint aa = _a; + uint bb = _b; + uint cc = _c; + uint dd = _d; + + foreach (int k in new[] { 0, 4, 8, 12 }) + { + aa = Round1Operation(aa, bb, cc, dd, _x[k], 3); + dd = Round1Operation(dd, aa, bb, cc, _x[k + 1], 7); + cc = Round1Operation(cc, dd, aa, bb, _x[k + 2], 11); + bb = Round1Operation(bb, cc, dd, aa, _x[k + 3], 19); + } + + foreach (int k in new[] { 0, 1, 2, 3 }) + { + aa = Round2Operation(aa, bb, cc, dd, _x[k], 3); + dd = Round2Operation(dd, aa, bb, cc, _x[k + 4], 5); + cc = Round2Operation(cc, dd, aa, bb, _x[k + 8], 9); + bb = Round2Operation(bb, cc, dd, aa, _x[k + 12], 13); + } + + foreach (int k in new[] { 0, 2, 1, 3 }) + { + aa = Round3Operation(aa, bb, cc, dd, _x[k], 3); + dd = Round3Operation(dd, aa, bb, cc, _x[k + 8], 9); + cc = Round3Operation(cc, dd, aa, bb, _x[k + 4], 11); + bb = Round3Operation(bb, cc, dd, aa, _x[k + 12], 15); + } + + unchecked + { + _a += aa; + _b += bb; + _c += cc; + _d += dd; + } + } + + private static uint ROL(uint value, int numberOfBits) + { + return (value << numberOfBits) | (value >> (32 - numberOfBits)); + } + + private static uint Round1Operation(uint a, uint b, uint c, uint d, uint xk, int s) + { + unchecked + { + return ROL(a + ((b & c) | (~b & d)) + xk, s); + } + } + + private static uint Round2Operation(uint a, uint b, uint c, uint d, uint xk, int s) + { + unchecked + { + return ROL(a + ((b & c) | (b & d) | (c & d)) + xk + 0x5a827999, s); + } + } + + private static uint Round3Operation(uint a, uint b, uint c, uint d, uint xk, int s) + { + unchecked + { + return ROL(a + (b ^ c ^ d) + xk + 0x6ed9eba1, s); + } + } + } + + public static class FileIDUtil + { + public static int Compute(Type t) + { + string toBeHashed = "s\0\0\0" + t.Namespace + t.Name; + + using (HashAlgorithm hash = new MD4()) + { + byte[] hashed = hash.ComputeHash(System.Text.Encoding.UTF8.GetBytes(toBeHashed)); + + int result = 0; + + for (int i = 3; i >= 0; --i) + { + result <<= 8; + result |= hashed[i]; + } + + return result; + } + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MD4.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MD4.cs.meta new file mode 100644 index 0000000..67f15ed --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MD4.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d2b504d66469914ea89897e98917234 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MissingScriptResolver.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MissingScriptResolver.cs new file mode 100644 index 0000000..4e80c92 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MissingScriptResolver.cs @@ -0,0 +1,127 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System; +using System.Linq; + +namespace Assets.PathBerserker2d.Scripts.PathBerserker2d.Upgrade +{ + class MissingScriptResolver + { + string navAgentFI; + string navSurfaceFI; + string navSegmentSubstractorFI; + string navAreaMarkerFI; + string dynamicObstacleFI; + + public static void UpdateReferences() + { + string dllGuid = "45d3c5b18a3fb854b94b339e477774af"; + + int navAgentFI = -1018851484; + string navAgentGUID = AssetDatabase.AssetPathToGUID("Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgent.cs"); + + int navSurfaceFI = -567900050; + string navSurfaceGUID = AssetDatabase.AssetPathToGUID("Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSurface.cs"); + + int navLinkFI = -546232842; + string navLinkGUID = AssetDatabase.AssetPathToGUID("Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLink.cs"); + + int navLinkClusterFI = 1837436107; + string navLinkClusterGUID = AssetDatabase.AssetPathToGUID("Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkCluster.cs"); + + int navSegmentSubstractorFI = -274983532; + string navSegmentSubstractorGUID = AssetDatabase.AssetPathToGUID("Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavSegmentSubstractor.cs"); + + int navAreaMarkerFI = 709968320; + string navAreaMarkerGUID = AssetDatabase.AssetPathToGUID("Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavAreaMarker.cs"); + + int dynamicObstacleFI = -721922897; + string dynamicObstacleGUID = AssetDatabase.AssetPathToGUID("Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/DynamicObstacle.cs"); + + int pathBerserker2dSettingsFI = -1515731982; + string pathBerserker2dSettingsGUID = AssetDatabase.AssetPathToGUID("Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2dSettings.cs"); + + int[] fis = new int[] { + navAgentFI, + navSurfaceFI, + navSegmentSubstractorFI, + navAreaMarkerFI, + dynamicObstacleFI, + pathBerserker2dSettingsFI, + navLinkFI, + navLinkClusterFI + }; + + string[] guids = new string[] { + navAgentGUID, + navSurfaceGUID, + navSegmentSubstractorGUID, + navAreaMarkerGUID, + dynamicObstacleGUID, + pathBerserker2dSettingsGUID, + navLinkGUID, + navLinkClusterGUID + }; + + for (int i = 0; i < guids.Length; i++) + { + if (guids[i] == null) + { + Debug.LogError("One or multiple cs files could not be found. Aborting upgrade. Please make sure that the Plugin files are in Assets/PathBerserker2d"); + return; + } + } + // first patch settings + foreach (var metaFile in Directory.EnumerateFiles(System.IO.Path.Combine(Application.dataPath, "PathBerserker2d/Resources/"), "*.asset", SearchOption.AllDirectories)) + { + FixFile(metaFile, fis, dllGuid, guids); + } + + // patch everything else + foreach (var metaFile in Directory.EnumerateFiles(Application.dataPath, "*", SearchOption.AllDirectories).Where(f => f.EndsWith(".unity") || f.EndsWith(".prefab"))) + { + FixFile(metaFile, fis, dllGuid, guids); + } + + Debug.Log("Finished!"); + } + + private static void FixFile(string path, int[] fis, string dllGuid, string[] guids) + { + try + { + FileInfo file = new FileInfo(path); + bool isHidden = (file.Attributes & FileAttributes.Hidden) != 0; + file.Attributes &= ~FileAttributes.Hidden; + + string prevText = File.ReadAllText(path); + string text = prevText; + + for (int i = 0; i < fis.Length; i++) + { + text = text.Replace($"fileID: {fis[i]}, guid: {dllGuid}", + $"fileID: 11500000, guid: {guids[i]}"); + } + + File.WriteAllText(path, text); + if (isHidden) + file.Attributes |= FileAttributes.Hidden; + + if (prevText != text) + { + Debug.Log("Updated " + path); + } + } + catch (UnauthorizedAccessException e) + { + Debug.LogError(e); + } + catch (IOException e) + { + Debug.LogError(e); + } + } + } +} + diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MissingScriptResolver.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MissingScriptResolver.cs.meta new file mode 100644 index 0000000..8c4da03 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/MissingScriptResolver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ad6757722d743440857770a88e128cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/PathBerserker2d.Upgrade.asmdef b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/PathBerserker2d.Upgrade.asmdef new file mode 100644 index 0000000..1ba36fa --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/PathBerserker2d.Upgrade.asmdef @@ -0,0 +1,17 @@ +{ + "name": "PathBerserker2d.Upgrade", + "references": [ + "GUID:f483b8ed1e509354483048b0c7a56768" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": false, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/PathBerserker2d.Upgrade.asmdef.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/PathBerserker2d.Upgrade.asmdef.meta new file mode 100644 index 0000000..0769e0e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/PathBerserker2d.Upgrade.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fd89c7216da4dd2478872203e056f46b +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/UpdateNotificationWindow.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/UpdateNotificationWindow.cs new file mode 100644 index 0000000..665410e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/UpdateNotificationWindow.cs @@ -0,0 +1,96 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace Assets.PathBerserker2d.Scripts.PathBerserker2d.Upgrade +{ + [InitializeOnLoad] + class UpdateNotificationWindow : EditorWindow + { + [MenuItem("Window/General/PathBerserker Update Log")] + static void ShowWindow() + { + // Get existing open window or if none, make a new one: + UpdateNotificationWindow window = (UpdateNotificationWindow)EditorWindow.GetWindow(typeof(UpdateNotificationWindow)); + window.Show(); + } + + static UpdateNotificationWindow() + { + EditorApplication.update += EditorUpdate; + } + + static void EditorUpdate() + { + if (!EditorPrefs.GetBool("pathberserker.showedupgrader") && EditorPrefs.GetBool("pathberserker.showedupdate.1_4")) + { + ShowWindow(); + + EditorPrefs.SetBool("pathberserker.showedupgrader", true); + } + EditorPrefs.SetString("pathberserker.installed_version", AssemblyInfo.Version); + EditorApplication.update -= EditorUpdate; + } + + GUIStyle labelStyle; + GUIStyle headingStyle; + + private void OnEnable() + { + try + { + labelStyle = new GUIStyle(EditorStyles.label); + } + catch (NullReferenceException) + { + labelStyle = new GUIStyle(); + } + + labelStyle.normal.textColor = Color.white; + labelStyle.richText = true; + labelStyle.wordWrap = true; + + headingStyle = new GUIStyle(labelStyle); + headingStyle.fontSize += 20; + } + + public void OnGUI() + { + if (labelStyle == null || headingStyle == null) + OnEnable(); + if (labelStyle == null || headingStyle == null) + return; + + EditorGUILayout.LabelField("Pathberserker 2d - Upgrader
", headingStyle); + EditorGUILayout.LabelField(AssemblyInfo.Version, labelStyle); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("This window can be reopened at 'Window/General/PathBerserker Update Log'", labelStyle); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Important
", labelStyle); + EditorGUILayout.LabelField("All Dll files have been replaced with AssemblyDefinitions. All references to MonoBehaviors that where previously located in a DLL are now broken! This will lead to a lot of missing scripts in your project.", labelStyle); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Fear not. By clicking the button below an upgrade script runs, that should restore all those references. It will directly modify your projects .meta files.", labelStyle); + + EditorGUILayout.Space(); + + + EditorGUILayout.LabelField("BE WARNED, this might cause damage. You should backup your project before starting this process. This will not work, if you moved the plugin-files from its default directory.", labelStyle); + EditorGUILayout.Space(); + + if (GUILayout.Button("Perform Upgrade") && EditorUtility.DisplayDialog("Have you made a backup?", "This process may fail or do unexpected things. Don't blame me if it ends up destroying something. Make a backup.", "Yes, I have a backup.")) + { + MissingScriptResolver.UpdateReferences(); + } + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("If this is your first time installing this plugin, you don't have to do anything.", labelStyle); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/UpdateNotificationWindow.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/UpdateNotificationWindow.cs.meta new file mode 100644 index 0000000..abefcc5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.Upgrade/UpdateNotificationWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39d4bf2bf4a69e34cb47809c0d366e36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d.meta new file mode 100644 index 0000000..a524d7f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4636456b2610ddb4e8982b105b11e0df +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/AssemblyInfo.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/AssemblyInfo.cs new file mode 100644 index 0000000..7ec12e5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/AssemblyInfo.cs @@ -0,0 +1,11 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("PathBerserker2d.Editor")] +[assembly: InternalsVisibleTo("PathBerserker2d.Upgrade")] +[assembly: AssemblyVersion("2.1")] + +internal static class AssemblyInfo +{ + public static string Version => typeof(AssemblyInfo).Assembly.GetName().Version.ToString(); +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/AssemblyInfo.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/AssemblyInfo.cs.meta new file mode 100644 index 0000000..7dc2629 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8fed312cd3761ca4f9b284e6f05e37e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper.meta new file mode 100644 index 0000000..9b5357c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbd7032f0753f4943b51d2103bd60b60 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/ClipperWrapper.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/ClipperWrapper.cs new file mode 100644 index 0000000..9e80a1f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/ClipperWrapper.cs @@ -0,0 +1,136 @@ +using ClipperLib; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace PathBerserker2d +{ + class ClipperWrapper : IClipper + { + const int FloatToIntMult = 10000; + const float IntToFloatDiv = 10000; + + Clipper clipper = new Clipper(); + + public ResultType Compute(Polygon sp, Polygon cp, BoolOpType op, out List result, bool includeOpenPolygons = false) + { + result = new List(); + + if (!sp.BoundsOverlap(cp)) + { + return ResultType.NoOverlap; + } + + AddPolygonToClipper(sp, PolyType.ptSubject); + AddPolygonToClipper(cp, PolyType.ptClip); + + double prevArea = 0; + ClipType clipType; + switch (op) + { + case BoolOpType.INTERSECTION: + clipType = ClipType.ctIntersection; + break; + case BoolOpType.UNION: + clipType = ClipType.ctUnion; + break; + case BoolOpType.DIFFERENCE: + clipType = ClipType.ctDifference; + prevArea = sp.SignedArea(); + break; + default: + throw new ArgumentException("Unknown op type " + op); + } + + PolyTree resultTree = new PolyTree(); + bool succeeded = clipper.Execute(clipType, resultTree); + + GetResultsFromNode(resultTree, result, includeOpenPolygons); + foreach (var poly in result) + { + poly.EnsureCWOrdering(); + } + + clipper.Clear(); + + bool intersectionHappened = false; + double afterArea = 0; + switch (op) + { + case BoolOpType.INTERSECTION: + intersectionHappened = result.Count > 0; + break; + case BoolOpType.UNION: + if (result.Count == 1) + intersectionHappened = true; + break; + case BoolOpType.DIFFERENCE: + if (result.Count > 1) + intersectionHappened = true; + else + { + foreach (var poly in result) + afterArea += poly.SignedArea(); + + intersectionHappened = !(Math.Abs(afterArea - prevArea) < 0.001); + } + break; + default: + throw new ArgumentException("Unknown op type " + op); + } + + + return intersectionHappened ? ResultType.Clipped : ResultType.NoOverlap; + } + + private void AddPolygonToClipper(Polygon polygon, PolyType polyType) + { + var points = ConvertContour(polygon.Hull); + clipper.AddPath(points, polyType, polygon.Hull.IsClosed); + + foreach (var hole in polygon.Holes) + { + points = ConvertContour(hole); + clipper.AddPath(points, polyType, hole.IsClosed); + } + } + + private List ConvertContour(Contour contour) + { + List points = new List(contour.VertexCount); + for (int i = 0; i < contour.VertexCount; i++) + { + points.Add(new IntPoint(contour.Verts[i].x * FloatToIntMult, contour.Verts[i].y * FloatToIntMult)); + } + return points; + } + + private void GetResultsFromNode(PolyNode node, List polygons, bool includeOpenPolygons) + { + foreach (var child in node.Childs) + { + if (child.IsOpen && !includeOpenPolygons) + continue; + + Polygon p = new Polygon(ConvertChain(child.m_polygon, !child.IsOpen)); + polygons.Add(p); + foreach (var holeNode in child.Childs) + { + var hole = ConvertChain(holeNode.m_polygon, !holeNode.IsOpen); + p.Holes.Add(hole); + + GetResultsFromNode(holeNode, polygons, includeOpenPolygons); + } + } + } + + private Contour ConvertChain(List chain, bool closed) + { + return new Contour(chain.Select(ip => new Vector2(ip.X / IntToFloatDiv, ip.Y / IntToFloatDiv)), closed); + } + + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/ClipperWrapper.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/ClipperWrapper.cs.meta new file mode 100644 index 0000000..5f79d12 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/ClipperWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9276a8b2beda8b54ba7afae4535ba503 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/License.txt b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/License.txt new file mode 100644 index 0000000..3e3af47 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/License.txt @@ -0,0 +1,24 @@ +Boost Software License - Version 1.0 - August 17th, 2003 +http://www.boost.org/LICENSE_1_0.txt + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +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, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/License.txt.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/License.txt.meta new file mode 100644 index 0000000..c790e42 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/License.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bf69683b55c9a474ab9f1585d2c62c61 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/clipper.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/clipper.cs new file mode 100644 index 0000000..1f08c40 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/clipper.cs @@ -0,0 +1,4932 @@ +/******************************************************************************* +* * +* Author : Angus Johnson * +* Version : 6.4.2 * +* Date : 27 February 2017 * +* Website : http://www.angusj.com * +* Copyright : Angus Johnson 2010-2017 * +* * +* License: * +* Use, modification & distribution is subject to Boost Software License Ver 1. * +* http://www.boost.org/LICENSE_1_0.txt * +* * +* Attributions: * +* The code in this library is an extension of Bala Vatti's clipping algorithm: * +* "A generic solution to polygon clipping" * +* Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. * +* http://portal.acm.org/citation.cfm?id=129906 * +* * +* Computer graphics and geometric modeling: implementation and algorithms * +* By Max K. Agoston * +* Springer; 1 edition (January 4, 2005) * +* http://books.google.com/books?q=vatti+clipping+agoston * +* * +* See also: * +* "Polygon Offsetting by Computing Winding Numbers" * +* Paper no. DETC2005-85513 pp. 565-575 * +* ASME 2005 International Design Engineering Technical Conferences * +* and Computers and Information in Engineering Conference (IDETC/CIE2005) * +* September 24-28, 2005 , Long Beach, California, USA * +* http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf * +* * +*******************************************************************************/ + +/******************************************************************************* +* * +* This is a translation of the Delphi Clipper library and the naming style * +* used has retained a Delphi flavour. * +* * +*******************************************************************************/ + +//use_int32: When enabled 32bit ints are used instead of 64bit ints. This +//improve performance but coordinate values are limited to the range +/- 46340 +//#define use_int32 + +//use_xyz: adds a Z member to IntPoint. Adds a minor cost to performance. +//#define use_xyz + +//use_lines: Enables open path clipping. Adds a very minor cost to performance. +#define use_lines + + +using System; +using System.Collections.Generic; +//using System.Text; //for Int128.AsString() & StringBuilder +//using System.IO; //debugging with streamReader & StreamWriter +//using System.Windows.Forms; //debugging to clipboard + +namespace ClipperLib +{ + +#if use_int32 + using cInt = Int32; +#else + using cInt = Int64; +#endif + + using Path = List; + using Paths = List>; + + public struct DoublePoint + { + public double X; + public double Y; + + public DoublePoint(double x = 0, double y = 0) + { + this.X = x; this.Y = y; + } + public DoublePoint(DoublePoint dp) + { + this.X = dp.X; this.Y = dp.Y; + } + public DoublePoint(IntPoint ip) + { + this.X = ip.X; this.Y = ip.Y; + } + }; + + + //------------------------------------------------------------------------------ + // PolyTree & PolyNode classes + //------------------------------------------------------------------------------ + + public class PolyTree : PolyNode + { + internal List m_AllPolys = new List(); + + //The GC probably handles this cleanup more efficiently ... + //~PolyTree(){Clear();} + + public void Clear() + { + for (int i = 0; i < m_AllPolys.Count; i++) + m_AllPolys[i] = null; + m_AllPolys.Clear(); + m_Childs.Clear(); + } + + public PolyNode GetFirst() + { + if (m_Childs.Count > 0) + return m_Childs[0]; + else + return null; + } + + public int Total + { + get + { + int result = m_AllPolys.Count; + //with negative offsets, ignore the hidden outer polygon ... + if (result > 0 && m_Childs[0] != m_AllPolys[0]) result--; + return result; + } + } + + } + + public class PolyNode + { + internal PolyNode m_Parent; + internal Path m_polygon = new Path(); + internal int m_Index; + internal JoinType m_jointype; + internal EndType m_endtype; + internal List m_Childs = new List(); + + private bool IsHoleNode() + { + bool result = true; + PolyNode node = m_Parent; + while (node != null) + { + result = !result; + node = node.m_Parent; + } + return result; + } + + public int ChildCount + { + get { return m_Childs.Count; } + } + + public Path Contour + { + get { return m_polygon; } + } + + internal void AddChild(PolyNode Child) + { + int cnt = m_Childs.Count; + m_Childs.Add(Child); + Child.m_Parent = this; + Child.m_Index = cnt; + } + + public PolyNode GetNext() + { + if (m_Childs.Count > 0) + return m_Childs[0]; + else + return GetNextSiblingUp(); + } + + internal PolyNode GetNextSiblingUp() + { + if (m_Parent == null) + return null; + else if (m_Index == m_Parent.m_Childs.Count - 1) + return m_Parent.GetNextSiblingUp(); + else + return m_Parent.m_Childs[m_Index + 1]; + } + + public List Childs + { + get { return m_Childs; } + } + + public PolyNode Parent + { + get { return m_Parent; } + } + + public bool IsHole + { + get { return IsHoleNode(); } + } + + public bool IsOpen { get; set; } + } + + + //------------------------------------------------------------------------------ + // Int128 struct (enables safe math on signed 64bit integers) + // eg Int128 val1((Int64)9223372036854775807); //ie 2^63 -1 + // Int128 val2((Int64)9223372036854775807); + // Int128 val3 = val1 * val2; + // val3.ToString => "85070591730234615847396907784232501249" (8.5e+37) + //------------------------------------------------------------------------------ + + internal struct Int128 + { + private Int64 hi; + private UInt64 lo; + + public Int128(Int64 _lo) + { + lo = (UInt64)_lo; + if (_lo < 0) hi = -1; + else hi = 0; + } + + public Int128(Int64 _hi, UInt64 _lo) + { + lo = _lo; + hi = _hi; + } + + public Int128(Int128 val) + { + hi = val.hi; + lo = val.lo; + } + + public bool IsNegative() + { + return hi < 0; + } + + public static bool operator ==(Int128 val1, Int128 val2) + { + if ((object)val1 == (object)val2) return true; + else if ((object)val1 == null || (object)val2 == null) return false; + return (val1.hi == val2.hi && val1.lo == val2.lo); + } + + public static bool operator !=(Int128 val1, Int128 val2) + { + return !(val1 == val2); + } + + public override bool Equals(System.Object obj) + { + if (obj == null || !(obj is Int128)) + return false; + Int128 i128 = (Int128)obj; + return (i128.hi == hi && i128.lo == lo); + } + + public override int GetHashCode() + { + return hi.GetHashCode() ^ lo.GetHashCode(); + } + + public static bool operator >(Int128 val1, Int128 val2) + { + if (val1.hi != val2.hi) + return val1.hi > val2.hi; + else + return val1.lo > val2.lo; + } + + public static bool operator <(Int128 val1, Int128 val2) + { + if (val1.hi != val2.hi) + return val1.hi < val2.hi; + else + return val1.lo < val2.lo; + } + + public static Int128 operator +(Int128 lhs, Int128 rhs) + { + lhs.hi += rhs.hi; + lhs.lo += rhs.lo; + if (lhs.lo < rhs.lo) lhs.hi++; + return lhs; + } + + public static Int128 operator -(Int128 lhs, Int128 rhs) + { + return lhs + -rhs; + } + + public static Int128 operator -(Int128 val) + { + if (val.lo == 0) + return new Int128(-val.hi, 0); + else + return new Int128(~val.hi, ~val.lo + 1); + } + + public static explicit operator double(Int128 val) + { + const double shift64 = 18446744073709551616.0; //2^64 + if (val.hi < 0) + { + if (val.lo == 0) + return (double)val.hi * shift64; + else + return -(double)(~val.lo + ~val.hi * shift64); + } + else + return (double)(val.lo + val.hi * shift64); + } + + //nb: Constructing two new Int128 objects every time we want to multiply longs + //is slow. So, although calling the Int128Mul method doesn't look as clean, the + //code runs significantly faster than if we'd used the * operator. + + public static Int128 Int128Mul(Int64 lhs, Int64 rhs) + { + bool negate = (lhs < 0) != (rhs < 0); + if (lhs < 0) lhs = -lhs; + if (rhs < 0) rhs = -rhs; + UInt64 int1Hi = (UInt64)lhs >> 32; + UInt64 int1Lo = (UInt64)lhs & 0xFFFFFFFF; + UInt64 int2Hi = (UInt64)rhs >> 32; + UInt64 int2Lo = (UInt64)rhs & 0xFFFFFFFF; + + //nb: see comments in clipper.pas + UInt64 a = int1Hi * int2Hi; + UInt64 b = int1Lo * int2Lo; + UInt64 c = int1Hi * int2Lo + int1Lo * int2Hi; + + UInt64 lo; + Int64 hi; + hi = (Int64)(a + (c >> 32)); + + unchecked { lo = (c << 32) + b; } + if (lo < b) hi++; + Int128 result = new Int128(hi, lo); + return negate ? -result : result; + } + + }; + + //------------------------------------------------------------------------------ + //------------------------------------------------------------------------------ + + public struct IntPoint + { + public cInt X; + public cInt Y; +#if use_xyz + public cInt Z; + + public IntPoint(cInt x, cInt y, cInt z = 0) + { + this.X = x; this.Y = y; this.Z = z; + } + + public IntPoint(double x, double y, double z = 0) + { + this.X = (cInt)x; this.Y = (cInt)y; this.Z = (cInt)z; + } + + public IntPoint(DoublePoint dp) + { + this.X = (cInt)dp.X; this.Y = (cInt)dp.Y; this.Z = 0; + } + + public IntPoint(IntPoint pt) + { + this.X = pt.X; this.Y = pt.Y; this.Z = pt.Z; + } +#else + public IntPoint(cInt X, cInt Y) + { + this.X = X; this.Y = Y; + } + public IntPoint(double x, double y) + { + this.X = (cInt)x; this.Y = (cInt)y; + } + + public IntPoint(IntPoint pt) + { + this.X = pt.X; this.Y = pt.Y; + } +#endif + + public static bool operator ==(IntPoint a, IntPoint b) + { + return a.X == b.X && a.Y == b.Y; + } + + public static bool operator !=(IntPoint a, IntPoint b) + { + return a.X != b.X || a.Y != b.Y; + } + + public override bool Equals(object obj) + { + if (obj == null) return false; + if (obj is IntPoint) + { + IntPoint a = (IntPoint)obj; + return (X == a.X) && (Y == a.Y); + } + else return false; + } + + public override int GetHashCode() + { + //simply prevents a compiler warning + return base.GetHashCode(); + } + + }// end struct IntPoint + + public struct IntRect + { + public cInt left; + public cInt top; + public cInt right; + public cInt bottom; + + public IntRect(cInt l, cInt t, cInt r, cInt b) + { + this.left = l; this.top = t; + this.right = r; this.bottom = b; + } + public IntRect(IntRect ir) + { + this.left = ir.left; this.top = ir.top; + this.right = ir.right; this.bottom = ir.bottom; + } + } + + public enum ClipType { ctIntersection, ctUnion, ctDifference, ctXor }; + public enum PolyType { ptSubject, ptClip }; + + //By far the most widely used winding rules for polygon filling are + //EvenOdd & NonZero (GDI, GDI+, XLib, OpenGL, Cairo, AGG, Quartz, SVG, Gr32) + //Others rules include Positive, Negative and ABS_GTR_EQ_TWO (only in OpenGL) + //see http://glprogramming.com/red/chapter11.html + public enum PolyFillType { pftEvenOdd, pftNonZero, pftPositive, pftNegative }; + + public enum JoinType { jtSquare, jtRound, jtMiter }; + public enum EndType { etClosedPolygon, etClosedLine, etOpenButt, etOpenSquare, etOpenRound }; + + internal enum EdgeSide { esLeft, esRight }; + internal enum Direction { dRightToLeft, dLeftToRight }; + + internal class TEdge + { + internal IntPoint Bot; + internal IntPoint Curr; //current (updated for every new scanbeam) + internal IntPoint Top; + internal IntPoint Delta; + internal double Dx; + internal PolyType PolyTyp; + internal EdgeSide Side; //side only refers to current side of solution poly + internal int WindDelta; //1 or -1 depending on winding direction + internal int WindCnt; + internal int WindCnt2; //winding count of the opposite polytype + internal int OutIdx; + internal TEdge Next; + internal TEdge Prev; + internal TEdge NextInLML; + internal TEdge NextInAEL; + internal TEdge PrevInAEL; + internal TEdge NextInSEL; + internal TEdge PrevInSEL; + }; + + public class IntersectNode + { + internal TEdge Edge1; + internal TEdge Edge2; + internal IntPoint Pt; + }; + + public class MyIntersectNodeSort : IComparer + { + public int Compare(IntersectNode node1, IntersectNode node2) + { + cInt i = node2.Pt.Y - node1.Pt.Y; + if (i > 0) return 1; + else if (i < 0) return -1; + else return 0; + } + } + + internal class LocalMinima + { + internal cInt Y; + internal TEdge LeftBound; + internal TEdge RightBound; + internal LocalMinima Next; + }; + + internal class Scanbeam + { + internal cInt Y; + internal Scanbeam Next; + }; + + internal class Maxima + { + internal cInt X; + internal Maxima Next; + internal Maxima Prev; + }; + + //OutRec: contains a path in the clipping solution. Edges in the AEL will + //carry a pointer to an OutRec when they are part of the clipping solution. + internal class OutRec + { + internal int Idx; + internal bool IsHole; + internal bool IsOpen; + internal OutRec FirstLeft; //see comments in clipper.pas + internal OutPt Pts; + internal OutPt BottomPt; + internal PolyNode PolyNode; + }; + + internal class OutPt + { + internal int Idx; + internal IntPoint Pt; + internal OutPt Next; + internal OutPt Prev; + }; + + internal class Join + { + internal OutPt OutPt1; + internal OutPt OutPt2; + internal IntPoint OffPt; + }; + + public class ClipperBase + { + internal const double horizontal = -3.4E+38; + internal const int Skip = -2; + internal const int Unassigned = -1; + internal const double tolerance = 1.0E-20; + internal static bool near_zero(double val) { return (val > -tolerance) && (val < tolerance); } + +#if use_int32 + public const cInt loRange = 0x7FFF; + public const cInt hiRange = 0x7FFF; +#else + public const cInt loRange = 0x3FFFFFFF; + public const cInt hiRange = 0x3FFFFFFFFFFFFFFFL; +#endif + + internal LocalMinima m_MinimaList; + internal LocalMinima m_CurrentLM; + internal List> m_edges = new List>(); + internal Scanbeam m_Scanbeam; + internal List m_PolyOuts; + internal TEdge m_ActiveEdges; + internal bool m_UseFullRange; + internal bool m_HasOpenPaths; + + //------------------------------------------------------------------------------ + + public bool PreserveCollinear + { + get; + set; + } + //------------------------------------------------------------------------------ + + public void Swap(ref cInt val1, ref cInt val2) + { + cInt tmp = val1; + val1 = val2; + val2 = tmp; + } + //------------------------------------------------------------------------------ + + internal static bool IsHorizontal(TEdge e) + { + return e.Delta.Y == 0; + } + //------------------------------------------------------------------------------ + + internal bool PointIsVertex(IntPoint pt, OutPt pp) + { + OutPt pp2 = pp; + do + { + if (pp2.Pt == pt) return true; + pp2 = pp2.Next; + } + while (pp2 != pp); + return false; + } + //------------------------------------------------------------------------------ + + internal bool PointOnLineSegment(IntPoint pt, + IntPoint linePt1, IntPoint linePt2, bool UseFullRange) + { + if (UseFullRange) + return ((pt.X == linePt1.X) && (pt.Y == linePt1.Y)) || + ((pt.X == linePt2.X) && (pt.Y == linePt2.Y)) || + (((pt.X > linePt1.X) == (pt.X < linePt2.X)) && + ((pt.Y > linePt1.Y) == (pt.Y < linePt2.Y)) && + ((Int128.Int128Mul((pt.X - linePt1.X), (linePt2.Y - linePt1.Y)) == + Int128.Int128Mul((linePt2.X - linePt1.X), (pt.Y - linePt1.Y))))); + else + return ((pt.X == linePt1.X) && (pt.Y == linePt1.Y)) || + ((pt.X == linePt2.X) && (pt.Y == linePt2.Y)) || + (((pt.X > linePt1.X) == (pt.X < linePt2.X)) && + ((pt.Y > linePt1.Y) == (pt.Y < linePt2.Y)) && + ((pt.X - linePt1.X) * (linePt2.Y - linePt1.Y) == + (linePt2.X - linePt1.X) * (pt.Y - linePt1.Y))); + } + //------------------------------------------------------------------------------ + + internal bool PointOnPolygon(IntPoint pt, OutPt pp, bool UseFullRange) + { + OutPt pp2 = pp; + while (true) + { + if (PointOnLineSegment(pt, pp2.Pt, pp2.Next.Pt, UseFullRange)) + return true; + pp2 = pp2.Next; + if (pp2 == pp) break; + } + return false; + } + //------------------------------------------------------------------------------ + + internal static bool SlopesEqual(TEdge e1, TEdge e2, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(e1.Delta.Y, e2.Delta.X) == + Int128.Int128Mul(e1.Delta.X, e2.Delta.Y); + else return (cInt)(e1.Delta.Y) * (e2.Delta.X) == + (cInt)(e1.Delta.X) * (e2.Delta.Y); + } + //------------------------------------------------------------------------------ + + internal static bool SlopesEqual(IntPoint pt1, IntPoint pt2, + IntPoint pt3, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(pt1.Y - pt2.Y, pt2.X - pt3.X) == + Int128.Int128Mul(pt1.X - pt2.X, pt2.Y - pt3.Y); + else return + (cInt)(pt1.Y - pt2.Y) * (pt2.X - pt3.X) - (cInt)(pt1.X - pt2.X) * (pt2.Y - pt3.Y) == 0; + } + //------------------------------------------------------------------------------ + + internal static bool SlopesEqual(IntPoint pt1, IntPoint pt2, + IntPoint pt3, IntPoint pt4, bool UseFullRange) + { + if (UseFullRange) + return Int128.Int128Mul(pt1.Y - pt2.Y, pt3.X - pt4.X) == + Int128.Int128Mul(pt1.X - pt2.X, pt3.Y - pt4.Y); + else return + (cInt)(pt1.Y - pt2.Y) * (pt3.X - pt4.X) - (cInt)(pt1.X - pt2.X) * (pt3.Y - pt4.Y) == 0; + } + //------------------------------------------------------------------------------ + + internal ClipperBase() //constructor (nb: no external instantiation) + { + m_MinimaList = null; + m_CurrentLM = null; + m_UseFullRange = false; + m_HasOpenPaths = false; + } + //------------------------------------------------------------------------------ + + public virtual void Clear() + { + DisposeLocalMinimaList(); + for (int i = 0; i < m_edges.Count; ++i) + { + for (int j = 0; j < m_edges[i].Count; ++j) m_edges[i][j] = null; + m_edges[i].Clear(); + } + m_edges.Clear(); + m_UseFullRange = false; + m_HasOpenPaths = false; + } + //------------------------------------------------------------------------------ + + private void DisposeLocalMinimaList() + { + while (m_MinimaList != null) + { + LocalMinima tmpLm = m_MinimaList.Next; + m_MinimaList = null; + m_MinimaList = tmpLm; + } + m_CurrentLM = null; + } + //------------------------------------------------------------------------------ + + void RangeTest(IntPoint Pt, ref bool useFullRange) + { + if (useFullRange) + { + if (Pt.X > hiRange || Pt.Y > hiRange || -Pt.X > hiRange || -Pt.Y > hiRange) + throw new ClipperException("Coordinate outside allowed range"); + } + else if (Pt.X > loRange || Pt.Y > loRange || -Pt.X > loRange || -Pt.Y > loRange) + { + useFullRange = true; + RangeTest(Pt, ref useFullRange); + } + } + //------------------------------------------------------------------------------ + + private void InitEdge(TEdge e, TEdge eNext, + TEdge ePrev, IntPoint pt) + { + e.Next = eNext; + e.Prev = ePrev; + e.Curr = pt; + e.OutIdx = Unassigned; + } + //------------------------------------------------------------------------------ + + private void InitEdge2(TEdge e, PolyType polyType) + { + if (e.Curr.Y >= e.Next.Curr.Y) + { + e.Bot = e.Curr; + e.Top = e.Next.Curr; + } + else + { + e.Top = e.Curr; + e.Bot = e.Next.Curr; + } + SetDx(e); + e.PolyTyp = polyType; + } + //------------------------------------------------------------------------------ + + private TEdge FindNextLocMin(TEdge E) + { + TEdge E2; + for (; ; ) + { + while (E.Bot != E.Prev.Bot || E.Curr == E.Top) E = E.Next; + if (E.Dx != horizontal && E.Prev.Dx != horizontal) break; + while (E.Prev.Dx == horizontal) E = E.Prev; + E2 = E; + while (E.Dx == horizontal) E = E.Next; + if (E.Top.Y == E.Prev.Bot.Y) continue; //ie just an intermediate horz. + if (E2.Prev.Bot.X < E.Bot.X) E = E2; + break; + } + return E; + } + //------------------------------------------------------------------------------ + + private TEdge ProcessBound(TEdge E, bool LeftBoundIsForward) + { + TEdge EStart, Result = E; + TEdge Horz; + + if (Result.OutIdx == Skip) + { + //check if there are edges beyond the skip edge in the bound and if so + //create another LocMin and calling ProcessBound once more ... + E = Result; + if (LeftBoundIsForward) + { + while (E.Top.Y == E.Next.Bot.Y) E = E.Next; + while (E != Result && E.Dx == horizontal) E = E.Prev; + } + else + { + while (E.Top.Y == E.Prev.Bot.Y) E = E.Prev; + while (E != Result && E.Dx == horizontal) E = E.Next; + } + if (E == Result) + { + if (LeftBoundIsForward) Result = E.Next; + else Result = E.Prev; + } + else + { + //there are more edges in the bound beyond result starting with E + if (LeftBoundIsForward) + E = Result.Next; + else + E = Result.Prev; + LocalMinima locMin = new LocalMinima(); + locMin.Next = null; + locMin.Y = E.Bot.Y; + locMin.LeftBound = null; + locMin.RightBound = E; + E.WindDelta = 0; + Result = ProcessBound(E, LeftBoundIsForward); + InsertLocalMinima(locMin); + } + return Result; + } + + if (E.Dx == horizontal) + { + //We need to be careful with open paths because this may not be a + //true local minima (ie E may be following a skip edge). + //Also, consecutive horz. edges may start heading left before going right. + if (LeftBoundIsForward) EStart = E.Prev; + else EStart = E.Next; + if (EStart.Dx == horizontal) //ie an adjoining horizontal skip edge + { + if (EStart.Bot.X != E.Bot.X && EStart.Top.X != E.Bot.X) + ReverseHorizontal(E); + } + else if (EStart.Bot.X != E.Bot.X) + ReverseHorizontal(E); + } + + EStart = E; + if (LeftBoundIsForward) + { + while (Result.Top.Y == Result.Next.Bot.Y && Result.Next.OutIdx != Skip) + Result = Result.Next; + if (Result.Dx == horizontal && Result.Next.OutIdx != Skip) + { + //nb: at the top of a bound, horizontals are added to the bound + //only when the preceding edge attaches to the horizontal's left vertex + //unless a Skip edge is encountered when that becomes the top divide + Horz = Result; + while (Horz.Prev.Dx == horizontal) Horz = Horz.Prev; + if (Horz.Prev.Top.X > Result.Next.Top.X) Result = Horz.Prev; + } + while (E != Result) + { + E.NextInLML = E.Next; + if (E.Dx == horizontal && E != EStart && E.Bot.X != E.Prev.Top.X) + ReverseHorizontal(E); + E = E.Next; + } + if (E.Dx == horizontal && E != EStart && E.Bot.X != E.Prev.Top.X) + ReverseHorizontal(E); + Result = Result.Next; //move to the edge just beyond current bound + } + else + { + while (Result.Top.Y == Result.Prev.Bot.Y && Result.Prev.OutIdx != Skip) + Result = Result.Prev; + if (Result.Dx == horizontal && Result.Prev.OutIdx != Skip) + { + Horz = Result; + while (Horz.Next.Dx == horizontal) Horz = Horz.Next; + if (Horz.Next.Top.X == Result.Prev.Top.X || + Horz.Next.Top.X > Result.Prev.Top.X) Result = Horz.Next; + } + + while (E != Result) + { + E.NextInLML = E.Prev; + if (E.Dx == horizontal && E != EStart && E.Bot.X != E.Next.Top.X) + ReverseHorizontal(E); + E = E.Prev; + } + if (E.Dx == horizontal && E != EStart && E.Bot.X != E.Next.Top.X) + ReverseHorizontal(E); + Result = Result.Prev; //move to the edge just beyond current bound + } + return Result; + } + //------------------------------------------------------------------------------ + + + public bool AddPath(Path pg, PolyType polyType, bool Closed) + { +#if use_lines + if (!Closed && polyType == PolyType.ptClip) + throw new ClipperException("AddPath: Open paths must be subject."); +#else + if (!Closed) + throw new ClipperException("AddPath: Open paths have been disabled."); +#endif + + int highI = (int)pg.Count - 1; + if (Closed) while (highI > 0 && (pg[highI] == pg[0])) --highI; + while (highI > 0 && (pg[highI] == pg[highI - 1])) --highI; + if ((Closed && highI < 2) || (!Closed && highI < 1)) return false; + + //create a new edge array ... + List edges = new List(highI + 1); + for (int i = 0; i <= highI; i++) edges.Add(new TEdge()); + + bool IsFlat = true; + + //1. Basic (first) edge initialization ... + edges[1].Curr = pg[1]; + RangeTest(pg[0], ref m_UseFullRange); + RangeTest(pg[highI], ref m_UseFullRange); + InitEdge(edges[0], edges[1], edges[highI], pg[0]); + InitEdge(edges[highI], edges[0], edges[highI - 1], pg[highI]); + for (int i = highI - 1; i >= 1; --i) + { + RangeTest(pg[i], ref m_UseFullRange); + InitEdge(edges[i], edges[i + 1], edges[i - 1], pg[i]); + } + TEdge eStart = edges[0]; + + //2. Remove duplicate vertices, and (when closed) collinear edges ... + TEdge E = eStart, eLoopStop = eStart; + for (; ; ) + { + //nb: allows matching start and end points when not Closed ... + if (E.Curr == E.Next.Curr && (Closed || E.Next != eStart)) + { + if (E == E.Next) break; + if (E == eStart) eStart = E.Next; + E = RemoveEdge(E); + eLoopStop = E; + continue; + } + if (E.Prev == E.Next) + break; //only two vertices + else if (Closed && + SlopesEqual(E.Prev.Curr, E.Curr, E.Next.Curr, m_UseFullRange) && + (!PreserveCollinear || + !Pt2IsBetweenPt1AndPt3(E.Prev.Curr, E.Curr, E.Next.Curr))) + { + //Collinear edges are allowed for open paths but in closed paths + //the default is to merge adjacent collinear edges into a single edge. + //However, if the PreserveCollinear property is enabled, only overlapping + //collinear edges (ie spikes) will be removed from closed paths. + if (E == eStart) eStart = E.Next; + E = RemoveEdge(E); + E = E.Prev; + eLoopStop = E; + continue; + } + E = E.Next; + if ((E == eLoopStop) || (!Closed && E.Next == eStart)) break; + } + + if ((!Closed && (E == E.Next)) || (Closed && (E.Prev == E.Next))) + return false; + + if (!Closed) + { + m_HasOpenPaths = true; + eStart.Prev.OutIdx = Skip; + } + + //3. Do second stage of edge initialization ... + E = eStart; + do + { + InitEdge2(E, polyType); + E = E.Next; + if (IsFlat && E.Curr.Y != eStart.Curr.Y) IsFlat = false; + } + while (E != eStart); + + //4. Finally, add edge bounds to LocalMinima list ... + + //Totally flat paths must be handled differently when adding them + //to LocalMinima list to avoid endless loops etc ... + if (IsFlat) + { + if (Closed) return false; + E.Prev.OutIdx = Skip; + LocalMinima locMin = new LocalMinima(); + locMin.Next = null; + locMin.Y = E.Bot.Y; + locMin.LeftBound = null; + locMin.RightBound = E; + locMin.RightBound.Side = EdgeSide.esRight; + locMin.RightBound.WindDelta = 0; + for (; ; ) + { + if (E.Bot.X != E.Prev.Top.X) ReverseHorizontal(E); + if (E.Next.OutIdx == Skip) break; + E.NextInLML = E.Next; + E = E.Next; + } + InsertLocalMinima(locMin); + m_edges.Add(edges); + return true; + } + + m_edges.Add(edges); + bool leftBoundIsForward; + TEdge EMin = null; + + //workaround to avoid an endless loop in the while loop below when + //open paths have matching start and end points ... + if (E.Prev.Bot == E.Prev.Top) E = E.Next; + + for (; ; ) + { + E = FindNextLocMin(E); + if (E == EMin) break; + else if (EMin == null) EMin = E; + + //E and E.Prev now share a local minima (left aligned if horizontal). + //Compare their slopes to find which starts which bound ... + LocalMinima locMin = new LocalMinima(); + locMin.Next = null; + locMin.Y = E.Bot.Y; + if (E.Dx < E.Prev.Dx) + { + locMin.LeftBound = E.Prev; + locMin.RightBound = E; + leftBoundIsForward = false; //Q.nextInLML = Q.prev + } + else + { + locMin.LeftBound = E; + locMin.RightBound = E.Prev; + leftBoundIsForward = true; //Q.nextInLML = Q.next + } + locMin.LeftBound.Side = EdgeSide.esLeft; + locMin.RightBound.Side = EdgeSide.esRight; + + if (!Closed) locMin.LeftBound.WindDelta = 0; + else if (locMin.LeftBound.Next == locMin.RightBound) + locMin.LeftBound.WindDelta = -1; + else locMin.LeftBound.WindDelta = 1; + locMin.RightBound.WindDelta = -locMin.LeftBound.WindDelta; + + E = ProcessBound(locMin.LeftBound, leftBoundIsForward); + if (E.OutIdx == Skip) E = ProcessBound(E, leftBoundIsForward); + + TEdge E2 = ProcessBound(locMin.RightBound, !leftBoundIsForward); + if (E2.OutIdx == Skip) E2 = ProcessBound(E2, !leftBoundIsForward); + + if (locMin.LeftBound.OutIdx == Skip) + locMin.LeftBound = null; + else if (locMin.RightBound.OutIdx == Skip) + locMin.RightBound = null; + InsertLocalMinima(locMin); + if (!leftBoundIsForward) E = E2; + } + return true; + + } + //------------------------------------------------------------------------------ + + public bool AddPaths(Paths ppg, PolyType polyType, bool closed) + { + bool result = false; + for (int i = 0; i < ppg.Count; ++i) + if (AddPath(ppg[i], polyType, closed)) result = true; + return result; + } + //------------------------------------------------------------------------------ + + internal bool Pt2IsBetweenPt1AndPt3(IntPoint pt1, IntPoint pt2, IntPoint pt3) + { + if ((pt1 == pt3) || (pt1 == pt2) || (pt3 == pt2)) return false; + else if (pt1.X != pt3.X) return (pt2.X > pt1.X) == (pt2.X < pt3.X); + else return (pt2.Y > pt1.Y) == (pt2.Y < pt3.Y); + } + //------------------------------------------------------------------------------ + + TEdge RemoveEdge(TEdge e) + { + //removes e from double_linked_list (but without removing from memory) + e.Prev.Next = e.Next; + e.Next.Prev = e.Prev; + TEdge result = e.Next; + e.Prev = null; //flag as removed (see ClipperBase.Clear) + return result; + } + //------------------------------------------------------------------------------ + + private void SetDx(TEdge e) + { + e.Delta.X = (e.Top.X - e.Bot.X); + e.Delta.Y = (e.Top.Y - e.Bot.Y); + if (e.Delta.Y == 0) e.Dx = horizontal; + else e.Dx = (double)(e.Delta.X) / (e.Delta.Y); + } + //--------------------------------------------------------------------------- + + private void InsertLocalMinima(LocalMinima newLm) + { + if (m_MinimaList == null) + { + m_MinimaList = newLm; + } + else if (newLm.Y >= m_MinimaList.Y) + { + newLm.Next = m_MinimaList; + m_MinimaList = newLm; + } + else + { + LocalMinima tmpLm = m_MinimaList; + while (tmpLm.Next != null && (newLm.Y < tmpLm.Next.Y)) + tmpLm = tmpLm.Next; + newLm.Next = tmpLm.Next; + tmpLm.Next = newLm; + } + } + //------------------------------------------------------------------------------ + + internal Boolean PopLocalMinima(cInt Y, out LocalMinima current) + { + current = m_CurrentLM; + if (m_CurrentLM != null && m_CurrentLM.Y == Y) + { + m_CurrentLM = m_CurrentLM.Next; + return true; + } + return false; + } + //------------------------------------------------------------------------------ + + private void ReverseHorizontal(TEdge e) + { + //swap horizontal edges' top and bottom x's so they follow the natural + //progression of the bounds - ie so their xbots will align with the + //adjoining lower edge. [Helpful in the ProcessHorizontal() method.] + Swap(ref e.Top.X, ref e.Bot.X); +#if use_xyz + Swap(ref e.Top.Z, ref e.Bot.Z); +#endif + } + //------------------------------------------------------------------------------ + + internal virtual void Reset() + { + m_CurrentLM = m_MinimaList; + if (m_CurrentLM == null) return; //ie nothing to process + + //reset all edges ... + m_Scanbeam = null; + LocalMinima lm = m_MinimaList; + while (lm != null) + { + InsertScanbeam(lm.Y); + TEdge e = lm.LeftBound; + if (e != null) + { + e.Curr = e.Bot; + e.OutIdx = Unassigned; + } + e = lm.RightBound; + if (e != null) + { + e.Curr = e.Bot; + e.OutIdx = Unassigned; + } + lm = lm.Next; + } + m_ActiveEdges = null; + } + //------------------------------------------------------------------------------ + + public static IntRect GetBounds(Paths paths) + { + int i = 0, cnt = paths.Count; + while (i < cnt && paths[i].Count == 0) i++; + if (i == cnt) return new IntRect(0, 0, 0, 0); + IntRect result = new IntRect(); + result.left = paths[i][0].X; + result.right = result.left; + result.top = paths[i][0].Y; + result.bottom = result.top; + for (; i < cnt; i++) + for (int j = 0; j < paths[i].Count; j++) + { + if (paths[i][j].X < result.left) result.left = paths[i][j].X; + else if (paths[i][j].X > result.right) result.right = paths[i][j].X; + if (paths[i][j].Y < result.top) result.top = paths[i][j].Y; + else if (paths[i][j].Y > result.bottom) result.bottom = paths[i][j].Y; + } + return result; + } + //------------------------------------------------------------------------------ + + internal void InsertScanbeam(cInt Y) + { + //single-linked list: sorted descending, ignoring dups. + if (m_Scanbeam == null) + { + m_Scanbeam = new Scanbeam(); + m_Scanbeam.Next = null; + m_Scanbeam.Y = Y; + } + else if (Y > m_Scanbeam.Y) + { + Scanbeam newSb = new Scanbeam(); + newSb.Y = Y; + newSb.Next = m_Scanbeam; + m_Scanbeam = newSb; + } + else + { + Scanbeam sb2 = m_Scanbeam; + while (sb2.Next != null && (Y <= sb2.Next.Y)) sb2 = sb2.Next; + if (Y == sb2.Y) return; //ie ignores duplicates + Scanbeam newSb = new Scanbeam(); + newSb.Y = Y; + newSb.Next = sb2.Next; + sb2.Next = newSb; + } + } + //------------------------------------------------------------------------------ + + internal Boolean PopScanbeam(out cInt Y) + { + if (m_Scanbeam == null) + { + Y = 0; + return false; + } + Y = m_Scanbeam.Y; + m_Scanbeam = m_Scanbeam.Next; + return true; + } + //------------------------------------------------------------------------------ + + internal Boolean LocalMinimaPending() + { + return (m_CurrentLM != null); + } + //------------------------------------------------------------------------------ + + internal OutRec CreateOutRec() + { + OutRec result = new OutRec(); + result.Idx = Unassigned; + result.IsHole = false; + result.IsOpen = false; + result.FirstLeft = null; + result.Pts = null; + result.BottomPt = null; + result.PolyNode = null; + m_PolyOuts.Add(result); + result.Idx = m_PolyOuts.Count - 1; + return result; + } + //------------------------------------------------------------------------------ + + internal void DisposeOutRec(int index) + { + OutRec outRec = m_PolyOuts[index]; + outRec.Pts = null; + outRec = null; + m_PolyOuts[index] = null; + } + //------------------------------------------------------------------------------ + + internal void UpdateEdgeIntoAEL(ref TEdge e) + { + if (e.NextInLML == null) + throw new ClipperException("UpdateEdgeIntoAEL: invalid call"); + TEdge AelPrev = e.PrevInAEL; + TEdge AelNext = e.NextInAEL; + e.NextInLML.OutIdx = e.OutIdx; + if (AelPrev != null) + AelPrev.NextInAEL = e.NextInLML; + else m_ActiveEdges = e.NextInLML; + if (AelNext != null) + AelNext.PrevInAEL = e.NextInLML; + e.NextInLML.Side = e.Side; + e.NextInLML.WindDelta = e.WindDelta; + e.NextInLML.WindCnt = e.WindCnt; + e.NextInLML.WindCnt2 = e.WindCnt2; + e = e.NextInLML; + e.Curr = e.Bot; + e.PrevInAEL = AelPrev; + e.NextInAEL = AelNext; + if (!IsHorizontal(e)) InsertScanbeam(e.Top.Y); + } + //------------------------------------------------------------------------------ + + internal void SwapPositionsInAEL(TEdge edge1, TEdge edge2) + { + //check that one or other edge hasn't already been removed from AEL ... + if (edge1.NextInAEL == edge1.PrevInAEL || + edge2.NextInAEL == edge2.PrevInAEL) return; + + if (edge1.NextInAEL == edge2) + { + TEdge next = edge2.NextInAEL; + if (next != null) + next.PrevInAEL = edge1; + TEdge prev = edge1.PrevInAEL; + if (prev != null) + prev.NextInAEL = edge2; + edge2.PrevInAEL = prev; + edge2.NextInAEL = edge1; + edge1.PrevInAEL = edge2; + edge1.NextInAEL = next; + } + else if (edge2.NextInAEL == edge1) + { + TEdge next = edge1.NextInAEL; + if (next != null) + next.PrevInAEL = edge2; + TEdge prev = edge2.PrevInAEL; + if (prev != null) + prev.NextInAEL = edge1; + edge1.PrevInAEL = prev; + edge1.NextInAEL = edge2; + edge2.PrevInAEL = edge1; + edge2.NextInAEL = next; + } + else + { + TEdge next = edge1.NextInAEL; + TEdge prev = edge1.PrevInAEL; + edge1.NextInAEL = edge2.NextInAEL; + if (edge1.NextInAEL != null) + edge1.NextInAEL.PrevInAEL = edge1; + edge1.PrevInAEL = edge2.PrevInAEL; + if (edge1.PrevInAEL != null) + edge1.PrevInAEL.NextInAEL = edge1; + edge2.NextInAEL = next; + if (edge2.NextInAEL != null) + edge2.NextInAEL.PrevInAEL = edge2; + edge2.PrevInAEL = prev; + if (edge2.PrevInAEL != null) + edge2.PrevInAEL.NextInAEL = edge2; + } + + if (edge1.PrevInAEL == null) + m_ActiveEdges = edge1; + else if (edge2.PrevInAEL == null) + m_ActiveEdges = edge2; + } + //------------------------------------------------------------------------------ + + internal void DeleteFromAEL(TEdge e) + { + TEdge AelPrev = e.PrevInAEL; + TEdge AelNext = e.NextInAEL; + if (AelPrev == null && AelNext == null && (e != m_ActiveEdges)) + return; //already deleted + if (AelPrev != null) + AelPrev.NextInAEL = AelNext; + else m_ActiveEdges = AelNext; + if (AelNext != null) + AelNext.PrevInAEL = AelPrev; + e.NextInAEL = null; + e.PrevInAEL = null; + } + //------------------------------------------------------------------------------ + + } //end ClipperBase + + public class Clipper : ClipperBase + { + //InitOptions that can be passed to the constructor ... + public const int ioReverseSolution = 1; + public const int ioStrictlySimple = 2; + public const int ioPreserveCollinear = 4; + + private ClipType m_ClipType; + private Maxima m_Maxima; + private TEdge m_SortedEdges; + private List m_IntersectList; + IComparer m_IntersectNodeComparer; + private bool m_ExecuteLocked; + private PolyFillType m_ClipFillType; + private PolyFillType m_SubjFillType; + private List m_Joins; + private List m_GhostJoins; + private bool m_UsingPolyTree; +#if use_xyz + public delegate void ZFillCallback(IntPoint bot1, IntPoint top1, + IntPoint bot2, IntPoint top2, ref IntPoint pt); + public ZFillCallback ZFillFunction { get; set; } +#endif + public Clipper(int InitOptions = 0) : base() //constructor + { + m_Scanbeam = null; + m_Maxima = null; + m_ActiveEdges = null; + m_SortedEdges = null; + m_IntersectList = new List(); + m_IntersectNodeComparer = new MyIntersectNodeSort(); + m_ExecuteLocked = false; + m_UsingPolyTree = false; + m_PolyOuts = new List(); + m_Joins = new List(); + m_GhostJoins = new List(); + ReverseSolution = (ioReverseSolution & InitOptions) != 0; + StrictlySimple = (ioStrictlySimple & InitOptions) != 0; + PreserveCollinear = (ioPreserveCollinear & InitOptions) != 0; +#if use_xyz + ZFillFunction = null; +#endif + } + //------------------------------------------------------------------------------ + + private void InsertMaxima(cInt X) + { + //double-linked list: sorted ascending, ignoring dups. + Maxima newMax = new Maxima(); + newMax.X = X; + if (m_Maxima == null) + { + m_Maxima = newMax; + m_Maxima.Next = null; + m_Maxima.Prev = null; + } + else if (X < m_Maxima.X) + { + newMax.Next = m_Maxima; + newMax.Prev = null; + m_Maxima = newMax; + } + else + { + Maxima m = m_Maxima; + while (m.Next != null && (X >= m.Next.X)) m = m.Next; + if (X == m.X) return; //ie ignores duplicates (& CG to clean up newMax) + //insert newMax between m and m.Next ... + newMax.Next = m.Next; + newMax.Prev = m; + if (m.Next != null) m.Next.Prev = newMax; + m.Next = newMax; + } + } + //------------------------------------------------------------------------------ + + public bool ReverseSolution + { + get; + set; + } + //------------------------------------------------------------------------------ + + public bool StrictlySimple + { + get; + set; + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, Paths solution, + PolyFillType FillType = PolyFillType.pftEvenOdd) + { + return Execute(clipType, solution, FillType, FillType); + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, PolyTree polytree, + PolyFillType FillType = PolyFillType.pftEvenOdd) + { + return Execute(clipType, polytree, FillType, FillType); + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, Paths solution, + PolyFillType subjFillType, PolyFillType clipFillType) + { + if (m_ExecuteLocked) return false; + if (m_HasOpenPaths) throw + new ClipperException("Error: PolyTree struct is needed for open path clipping."); + + m_ExecuteLocked = true; + solution.Clear(); + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = false; + bool succeeded; + try + { + succeeded = ExecuteInternal(); + //build the return polygons ... + if (succeeded) BuildResult(solution); + } + finally + { + DisposeAllPolyPts(); + m_ExecuteLocked = false; + } + return succeeded; + } + //------------------------------------------------------------------------------ + + public bool Execute(ClipType clipType, PolyTree polytree, + PolyFillType subjFillType, PolyFillType clipFillType) + { + if (m_ExecuteLocked) return false; + m_ExecuteLocked = true; + m_SubjFillType = subjFillType; + m_ClipFillType = clipFillType; + m_ClipType = clipType; + m_UsingPolyTree = true; + bool succeeded; + try + { + succeeded = ExecuteInternal(); + //build the return polygons ... + if (succeeded) BuildResult2(polytree); + } + finally + { + DisposeAllPolyPts(); + m_ExecuteLocked = false; + } + return succeeded; + } + //------------------------------------------------------------------------------ + + internal void FixHoleLinkage(OutRec outRec) + { + //skip if an outermost polygon or + //already already points to the correct FirstLeft ... + if (outRec.FirstLeft == null || + (outRec.IsHole != outRec.FirstLeft.IsHole && + outRec.FirstLeft.Pts != null)) return; + + OutRec orfl = outRec.FirstLeft; + while (orfl != null && ((orfl.IsHole == outRec.IsHole) || orfl.Pts == null)) + orfl = orfl.FirstLeft; + outRec.FirstLeft = orfl; + } + //------------------------------------------------------------------------------ + + private bool ExecuteInternal() + { + try + { + Reset(); + m_SortedEdges = null; + m_Maxima = null; + + cInt botY, topY; + if (!PopScanbeam(out botY)) return false; + InsertLocalMinimaIntoAEL(botY); + while (PopScanbeam(out topY) || LocalMinimaPending()) + { + ProcessHorizontals(); + m_GhostJoins.Clear(); + if (!ProcessIntersections(topY)) return false; + ProcessEdgesAtTopOfScanbeam(topY); + botY = topY; + InsertLocalMinimaIntoAEL(botY); + } + + //fix orientations ... + foreach (OutRec outRec in m_PolyOuts) + { + if (outRec.Pts == null || outRec.IsOpen) continue; + if ((outRec.IsHole ^ ReverseSolution) == (Area(outRec) > 0)) + ReversePolyPtLinks(outRec.Pts); + } + + JoinCommonEdges(); + + foreach (OutRec outRec in m_PolyOuts) + { + if (outRec.Pts == null) + continue; + else if (outRec.IsOpen) + FixupOutPolyline(outRec); + else + FixupOutPolygon(outRec); + } + + if (StrictlySimple) DoSimplePolygons(); + return true; + } + //catch { return false; } + finally + { + m_Joins.Clear(); + m_GhostJoins.Clear(); + } + } + //------------------------------------------------------------------------------ + + private void DisposeAllPolyPts() + { + for (int i = 0; i < m_PolyOuts.Count; ++i) DisposeOutRec(i); + m_PolyOuts.Clear(); + } + //------------------------------------------------------------------------------ + + private void AddJoin(OutPt Op1, OutPt Op2, IntPoint OffPt) + { + Join j = new Join(); + j.OutPt1 = Op1; + j.OutPt2 = Op2; + j.OffPt = OffPt; + m_Joins.Add(j); + } + //------------------------------------------------------------------------------ + + private void AddGhostJoin(OutPt Op, IntPoint OffPt) + { + Join j = new Join(); + j.OutPt1 = Op; + j.OffPt = OffPt; + m_GhostJoins.Add(j); + } + //------------------------------------------------------------------------------ + +#if use_xyz + internal void SetZ(ref IntPoint pt, TEdge e1, TEdge e2) + { + if (pt.Z != 0 || ZFillFunction == null) return; + else if (pt == e1.Bot) pt.Z = e1.Bot.Z; + else if (pt == e1.Top) pt.Z = e1.Top.Z; + else if (pt == e2.Bot) pt.Z = e2.Bot.Z; + else if (pt == e2.Top) pt.Z = e2.Top.Z; + else ZFillFunction(e1.Bot, e1.Top, e2.Bot, e2.Top, ref pt); + } + //------------------------------------------------------------------------------ +#endif + + private void InsertLocalMinimaIntoAEL(cInt botY) + { + LocalMinima lm; + while (PopLocalMinima(botY, out lm)) + { + TEdge lb = lm.LeftBound; + TEdge rb = lm.RightBound; + + OutPt Op1 = null; + if (lb == null) + { + InsertEdgeIntoAEL(rb, null); + SetWindingCount(rb); + if (IsContributing(rb)) + Op1 = AddOutPt(rb, rb.Bot); + } + else if (rb == null) + { + InsertEdgeIntoAEL(lb, null); + SetWindingCount(lb); + if (IsContributing(lb)) + Op1 = AddOutPt(lb, lb.Bot); + InsertScanbeam(lb.Top.Y); + } + else + { + InsertEdgeIntoAEL(lb, null); + InsertEdgeIntoAEL(rb, lb); + SetWindingCount(lb); + rb.WindCnt = lb.WindCnt; + rb.WindCnt2 = lb.WindCnt2; + if (IsContributing(lb)) + Op1 = AddLocalMinPoly(lb, rb, lb.Bot); + InsertScanbeam(lb.Top.Y); + } + + if (rb != null) + { + if (IsHorizontal(rb)) + { + if (rb.NextInLML != null) + InsertScanbeam(rb.NextInLML.Top.Y); + AddEdgeToSEL(rb); + } + else + InsertScanbeam(rb.Top.Y); + } + + if (lb == null || rb == null) continue; + + //if output polygons share an Edge with a horizontal rb, they'll need joining later ... + if (Op1 != null && IsHorizontal(rb) && + m_GhostJoins.Count > 0 && rb.WindDelta != 0) + { + for (int i = 0; i < m_GhostJoins.Count; i++) + { + //if the horizontal Rb and a 'ghost' horizontal overlap, then convert + //the 'ghost' join to a real join ready for later ... + Join j = m_GhostJoins[i]; + if (HorzSegmentsOverlap(j.OutPt1.Pt.X, j.OffPt.X, rb.Bot.X, rb.Top.X)) + AddJoin(j.OutPt1, Op1, j.OffPt); + } + } + + if (lb.OutIdx >= 0 && lb.PrevInAEL != null && + lb.PrevInAEL.Curr.X == lb.Bot.X && + lb.PrevInAEL.OutIdx >= 0 && + SlopesEqual(lb.PrevInAEL.Curr, lb.PrevInAEL.Top, lb.Curr, lb.Top, m_UseFullRange) && + lb.WindDelta != 0 && lb.PrevInAEL.WindDelta != 0) + { + OutPt Op2 = AddOutPt(lb.PrevInAEL, lb.Bot); + AddJoin(Op1, Op2, lb.Top); + } + + if (lb.NextInAEL != rb) + { + + if (rb.OutIdx >= 0 && rb.PrevInAEL.OutIdx >= 0 && + SlopesEqual(rb.PrevInAEL.Curr, rb.PrevInAEL.Top, rb.Curr, rb.Top, m_UseFullRange) && + rb.WindDelta != 0 && rb.PrevInAEL.WindDelta != 0) + { + OutPt Op2 = AddOutPt(rb.PrevInAEL, rb.Bot); + AddJoin(Op1, Op2, rb.Top); + } + + TEdge e = lb.NextInAEL; + if (e != null) + while (e != rb) + { + //nb: For calculating winding counts etc, IntersectEdges() assumes + //that param1 will be to the right of param2 ABOVE the intersection ... + IntersectEdges(rb, e, lb.Curr); //order important here + e = e.NextInAEL; + } + } + } + } + //------------------------------------------------------------------------------ + + private void InsertEdgeIntoAEL(TEdge edge, TEdge startEdge) + { + if (m_ActiveEdges == null) + { + edge.PrevInAEL = null; + edge.NextInAEL = null; + m_ActiveEdges = edge; + } + else if (startEdge == null && E2InsertsBeforeE1(m_ActiveEdges, edge)) + { + edge.PrevInAEL = null; + edge.NextInAEL = m_ActiveEdges; + m_ActiveEdges.PrevInAEL = edge; + m_ActiveEdges = edge; + } + else + { + if (startEdge == null) startEdge = m_ActiveEdges; + while (startEdge.NextInAEL != null && + !E2InsertsBeforeE1(startEdge.NextInAEL, edge)) + startEdge = startEdge.NextInAEL; + edge.NextInAEL = startEdge.NextInAEL; + if (startEdge.NextInAEL != null) startEdge.NextInAEL.PrevInAEL = edge; + edge.PrevInAEL = startEdge; + startEdge.NextInAEL = edge; + } + } + //---------------------------------------------------------------------- + + private bool E2InsertsBeforeE1(TEdge e1, TEdge e2) + { + if (e2.Curr.X == e1.Curr.X) + { + if (e2.Top.Y > e1.Top.Y) + return e2.Top.X < TopX(e1, e2.Top.Y); + else return e1.Top.X > TopX(e2, e1.Top.Y); + } + else return e2.Curr.X < e1.Curr.X; + } + //------------------------------------------------------------------------------ + + private bool IsEvenOddFillType(TEdge edge) + { + if (edge.PolyTyp == PolyType.ptSubject) + return m_SubjFillType == PolyFillType.pftEvenOdd; + else + return m_ClipFillType == PolyFillType.pftEvenOdd; + } + //------------------------------------------------------------------------------ + + private bool IsEvenOddAltFillType(TEdge edge) + { + if (edge.PolyTyp == PolyType.ptSubject) + return m_ClipFillType == PolyFillType.pftEvenOdd; + else + return m_SubjFillType == PolyFillType.pftEvenOdd; + } + //------------------------------------------------------------------------------ + + private bool IsContributing(TEdge edge) + { + PolyFillType pft, pft2; + if (edge.PolyTyp == PolyType.ptSubject) + { + pft = m_SubjFillType; + pft2 = m_ClipFillType; + } + else + { + pft = m_ClipFillType; + pft2 = m_SubjFillType; + } + + switch (pft) + { + case PolyFillType.pftEvenOdd: + //return false if a subj line has been flagged as inside a subj polygon + if (edge.WindDelta == 0 && edge.WindCnt != 1) return false; + break; + case PolyFillType.pftNonZero: + if (Math.Abs(edge.WindCnt) != 1) return false; + break; + case PolyFillType.pftPositive: + if (edge.WindCnt != 1) return false; + break; + default: //PolyFillType.pftNegative + if (edge.WindCnt != -1) return false; + break; + } + + switch (m_ClipType) + { + case ClipType.ctIntersection: + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 != 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 > 0); + default: + return (edge.WindCnt2 < 0); + } + case ClipType.ctUnion: + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 == 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 <= 0); + default: + return (edge.WindCnt2 >= 0); + } + case ClipType.ctDifference: + if (edge.PolyTyp == PolyType.ptSubject) + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 == 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 <= 0); + default: + return (edge.WindCnt2 >= 0); + } + else + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 != 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 > 0); + default: + return (edge.WindCnt2 < 0); + } + case ClipType.ctXor: + if (edge.WindDelta == 0) //XOr always contributing unless open + switch (pft2) + { + case PolyFillType.pftEvenOdd: + case PolyFillType.pftNonZero: + return (edge.WindCnt2 == 0); + case PolyFillType.pftPositive: + return (edge.WindCnt2 <= 0); + default: + return (edge.WindCnt2 >= 0); + } + else + return true; + } + return true; + } + //------------------------------------------------------------------------------ + + private void SetWindingCount(TEdge edge) + { + TEdge e = edge.PrevInAEL; + //find the edge of the same polytype that immediately preceeds 'edge' in AEL + while (e != null && ((e.PolyTyp != edge.PolyTyp) || (e.WindDelta == 0))) e = e.PrevInAEL; + if (e == null) + { + PolyFillType pft; + pft = (edge.PolyTyp == PolyType.ptSubject ? m_SubjFillType : m_ClipFillType); + if (edge.WindDelta == 0) edge.WindCnt = (pft == PolyFillType.pftNegative ? -1 : 1); + else edge.WindCnt = edge.WindDelta; + edge.WindCnt2 = 0; + e = m_ActiveEdges; //ie get ready to calc WindCnt2 + } + else if (edge.WindDelta == 0 && m_ClipType != ClipType.ctUnion) + { + edge.WindCnt = 1; + edge.WindCnt2 = e.WindCnt2; + e = e.NextInAEL; //ie get ready to calc WindCnt2 + } + else if (IsEvenOddFillType(edge)) + { + //EvenOdd filling ... + if (edge.WindDelta == 0) + { + //are we inside a subj polygon ... + bool Inside = true; + TEdge e2 = e.PrevInAEL; + while (e2 != null) + { + if (e2.PolyTyp == e.PolyTyp && e2.WindDelta != 0) + Inside = !Inside; + e2 = e2.PrevInAEL; + } + edge.WindCnt = (Inside ? 0 : 1); + } + else + { + edge.WindCnt = edge.WindDelta; + } + edge.WindCnt2 = e.WindCnt2; + e = e.NextInAEL; //ie get ready to calc WindCnt2 + } + else + { + //nonZero, Positive or Negative filling ... + if (e.WindCnt * e.WindDelta < 0) + { + //prev edge is 'decreasing' WindCount (WC) toward zero + //so we're outside the previous polygon ... + if (Math.Abs(e.WindCnt) > 1) + { + //outside prev poly but still inside another. + //when reversing direction of prev poly use the same WC + if (e.WindDelta * edge.WindDelta < 0) edge.WindCnt = e.WindCnt; + //otherwise continue to 'decrease' WC ... + else edge.WindCnt = e.WindCnt + edge.WindDelta; + } + else + //now outside all polys of same polytype so set own WC ... + edge.WindCnt = (edge.WindDelta == 0 ? 1 : edge.WindDelta); + } + else + { + //prev edge is 'increasing' WindCount (WC) away from zero + //so we're inside the previous polygon ... + if (edge.WindDelta == 0) + edge.WindCnt = (e.WindCnt < 0 ? e.WindCnt - 1 : e.WindCnt + 1); + //if wind direction is reversing prev then use same WC + else if (e.WindDelta * edge.WindDelta < 0) + edge.WindCnt = e.WindCnt; + //otherwise add to WC ... + else edge.WindCnt = e.WindCnt + edge.WindDelta; + } + edge.WindCnt2 = e.WindCnt2; + e = e.NextInAEL; //ie get ready to calc WindCnt2 + } + + //update WindCnt2 ... + if (IsEvenOddAltFillType(edge)) + { + //EvenOdd filling ... + while (e != edge) + { + if (e.WindDelta != 0) + edge.WindCnt2 = (edge.WindCnt2 == 0 ? 1 : 0); + e = e.NextInAEL; + } + } + else + { + //nonZero, Positive or Negative filling ... + while (e != edge) + { + edge.WindCnt2 += e.WindDelta; + e = e.NextInAEL; + } + } + } + //------------------------------------------------------------------------------ + + private void AddEdgeToSEL(TEdge edge) + { + //SEL pointers in PEdge are use to build transient lists of horizontal edges. + //However, since we don't need to worry about processing order, all additions + //are made to the front of the list ... + if (m_SortedEdges == null) + { + m_SortedEdges = edge; + edge.PrevInSEL = null; + edge.NextInSEL = null; + } + else + { + edge.NextInSEL = m_SortedEdges; + edge.PrevInSEL = null; + m_SortedEdges.PrevInSEL = edge; + m_SortedEdges = edge; + } + } + //------------------------------------------------------------------------------ + + internal Boolean PopEdgeFromSEL(out TEdge e) + { + //Pop edge from front of SEL (ie SEL is a FILO list) + e = m_SortedEdges; + if (e == null) return false; + TEdge oldE = e; + m_SortedEdges = e.NextInSEL; + if (m_SortedEdges != null) m_SortedEdges.PrevInSEL = null; + oldE.NextInSEL = null; + oldE.PrevInSEL = null; + return true; + } + //------------------------------------------------------------------------------ + + private void CopyAELToSEL() + { + TEdge e = m_ActiveEdges; + m_SortedEdges = e; + while (e != null) + { + e.PrevInSEL = e.PrevInAEL; + e.NextInSEL = e.NextInAEL; + e = e.NextInAEL; + } + } + //------------------------------------------------------------------------------ + + private void SwapPositionsInSEL(TEdge edge1, TEdge edge2) + { + if (edge1.NextInSEL == null && edge1.PrevInSEL == null) + return; + if (edge2.NextInSEL == null && edge2.PrevInSEL == null) + return; + + if (edge1.NextInSEL == edge2) + { + TEdge next = edge2.NextInSEL; + if (next != null) + next.PrevInSEL = edge1; + TEdge prev = edge1.PrevInSEL; + if (prev != null) + prev.NextInSEL = edge2; + edge2.PrevInSEL = prev; + edge2.NextInSEL = edge1; + edge1.PrevInSEL = edge2; + edge1.NextInSEL = next; + } + else if (edge2.NextInSEL == edge1) + { + TEdge next = edge1.NextInSEL; + if (next != null) + next.PrevInSEL = edge2; + TEdge prev = edge2.PrevInSEL; + if (prev != null) + prev.NextInSEL = edge1; + edge1.PrevInSEL = prev; + edge1.NextInSEL = edge2; + edge2.PrevInSEL = edge1; + edge2.NextInSEL = next; + } + else + { + TEdge next = edge1.NextInSEL; + TEdge prev = edge1.PrevInSEL; + edge1.NextInSEL = edge2.NextInSEL; + if (edge1.NextInSEL != null) + edge1.NextInSEL.PrevInSEL = edge1; + edge1.PrevInSEL = edge2.PrevInSEL; + if (edge1.PrevInSEL != null) + edge1.PrevInSEL.NextInSEL = edge1; + edge2.NextInSEL = next; + if (edge2.NextInSEL != null) + edge2.NextInSEL.PrevInSEL = edge2; + edge2.PrevInSEL = prev; + if (edge2.PrevInSEL != null) + edge2.PrevInSEL.NextInSEL = edge2; + } + + if (edge1.PrevInSEL == null) + m_SortedEdges = edge1; + else if (edge2.PrevInSEL == null) + m_SortedEdges = edge2; + } + //------------------------------------------------------------------------------ + + + private void AddLocalMaxPoly(TEdge e1, TEdge e2, IntPoint pt) + { + AddOutPt(e1, pt); + if (e2.WindDelta == 0) AddOutPt(e2, pt); + if (e1.OutIdx == e2.OutIdx) + { + e1.OutIdx = Unassigned; + e2.OutIdx = Unassigned; + } + else if (e1.OutIdx < e2.OutIdx) + AppendPolygon(e1, e2); + else + AppendPolygon(e2, e1); + } + //------------------------------------------------------------------------------ + + private OutPt AddLocalMinPoly(TEdge e1, TEdge e2, IntPoint pt) + { + OutPt result; + TEdge e, prevE; + if (IsHorizontal(e2) || (e1.Dx > e2.Dx)) + { + result = AddOutPt(e1, pt); + e2.OutIdx = e1.OutIdx; + e1.Side = EdgeSide.esLeft; + e2.Side = EdgeSide.esRight; + e = e1; + if (e.PrevInAEL == e2) + prevE = e2.PrevInAEL; + else + prevE = e.PrevInAEL; + } + else + { + result = AddOutPt(e2, pt); + e1.OutIdx = e2.OutIdx; + e1.Side = EdgeSide.esRight; + e2.Side = EdgeSide.esLeft; + e = e2; + if (e.PrevInAEL == e1) + prevE = e1.PrevInAEL; + else + prevE = e.PrevInAEL; + } + + if (prevE != null && prevE.OutIdx >= 0 && prevE.Top.Y < pt.Y && e.Top.Y < pt.Y) + { + cInt xPrev = TopX(prevE, pt.Y); + cInt xE = TopX(e, pt.Y); + if ((xPrev == xE) && (e.WindDelta != 0) && (prevE.WindDelta != 0) && + SlopesEqual(new IntPoint(xPrev, pt.Y), prevE.Top, new IntPoint(xE, pt.Y), e.Top, m_UseFullRange)) + { + OutPt outPt = AddOutPt(prevE, pt); + AddJoin(result, outPt, e.Top); + } + } + return result; + } + //------------------------------------------------------------------------------ + + private OutPt AddOutPt(TEdge e, IntPoint pt) + { + if (e.OutIdx < 0) + { + OutRec outRec = CreateOutRec(); + outRec.IsOpen = (e.WindDelta == 0); + OutPt newOp = new OutPt(); + outRec.Pts = newOp; + newOp.Idx = outRec.Idx; + newOp.Pt = pt; + newOp.Next = newOp; + newOp.Prev = newOp; + if (!outRec.IsOpen) + SetHoleState(e, outRec); + e.OutIdx = outRec.Idx; //nb: do this after SetZ ! + return newOp; + } + else + { + OutRec outRec = m_PolyOuts[e.OutIdx]; + //OutRec.Pts is the 'Left-most' point & OutRec.Pts.Prev is the 'Right-most' + OutPt op = outRec.Pts; + bool ToFront = (e.Side == EdgeSide.esLeft); + if (ToFront && pt == op.Pt) return op; + else if (!ToFront && pt == op.Prev.Pt) return op.Prev; + + OutPt newOp = new OutPt(); + newOp.Idx = outRec.Idx; + newOp.Pt = pt; + newOp.Next = op; + newOp.Prev = op.Prev; + newOp.Prev.Next = newOp; + op.Prev = newOp; + if (ToFront) outRec.Pts = newOp; + return newOp; + } + } + //------------------------------------------------------------------------------ + + private OutPt GetLastOutPt(TEdge e) + { + OutRec outRec = m_PolyOuts[e.OutIdx]; + if (e.Side == EdgeSide.esLeft) + return outRec.Pts; + else + return outRec.Pts.Prev; + } + //------------------------------------------------------------------------------ + + internal void SwapPoints(ref IntPoint pt1, ref IntPoint pt2) + { + IntPoint tmp = new IntPoint(pt1); + pt1 = pt2; + pt2 = tmp; + } + //------------------------------------------------------------------------------ + + private bool HorzSegmentsOverlap(cInt seg1a, cInt seg1b, cInt seg2a, cInt seg2b) + { + if (seg1a > seg1b) Swap(ref seg1a, ref seg1b); + if (seg2a > seg2b) Swap(ref seg2a, ref seg2b); + return (seg1a < seg2b) && (seg2a < seg1b); + } + //------------------------------------------------------------------------------ + + private void SetHoleState(TEdge e, OutRec outRec) + { + TEdge e2 = e.PrevInAEL; + TEdge eTmp = null; + while (e2 != null) + { + if (e2.OutIdx >= 0 && e2.WindDelta != 0) + { + if (eTmp == null) + eTmp = e2; + else if (eTmp.OutIdx == e2.OutIdx) + eTmp = null; //paired + } + e2 = e2.PrevInAEL; + } + + if (eTmp == null) + { + outRec.FirstLeft = null; + outRec.IsHole = false; + } + else + { + outRec.FirstLeft = m_PolyOuts[eTmp.OutIdx]; + outRec.IsHole = !outRec.FirstLeft.IsHole; + } + } + //------------------------------------------------------------------------------ + + private double GetDx(IntPoint pt1, IntPoint pt2) + { + if (pt1.Y == pt2.Y) return horizontal; + else return (double)(pt2.X - pt1.X) / (pt2.Y - pt1.Y); + } + //--------------------------------------------------------------------------- + + private bool FirstIsBottomPt(OutPt btmPt1, OutPt btmPt2) + { + OutPt p = btmPt1.Prev; + while ((p.Pt == btmPt1.Pt) && (p != btmPt1)) p = p.Prev; + double dx1p = Math.Abs(GetDx(btmPt1.Pt, p.Pt)); + p = btmPt1.Next; + while ((p.Pt == btmPt1.Pt) && (p != btmPt1)) p = p.Next; + double dx1n = Math.Abs(GetDx(btmPt1.Pt, p.Pt)); + + p = btmPt2.Prev; + while ((p.Pt == btmPt2.Pt) && (p != btmPt2)) p = p.Prev; + double dx2p = Math.Abs(GetDx(btmPt2.Pt, p.Pt)); + p = btmPt2.Next; + while ((p.Pt == btmPt2.Pt) && (p != btmPt2)) p = p.Next; + double dx2n = Math.Abs(GetDx(btmPt2.Pt, p.Pt)); + + if (Math.Max(dx1p, dx1n) == Math.Max(dx2p, dx2n) && + Math.Min(dx1p, dx1n) == Math.Min(dx2p, dx2n)) + return Area(btmPt1) > 0; //if otherwise identical use orientation + else + return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n); + } + //------------------------------------------------------------------------------ + + private OutPt GetBottomPt(OutPt pp) + { + OutPt dups = null; + OutPt p = pp.Next; + while (p != pp) + { + if (p.Pt.Y > pp.Pt.Y) + { + pp = p; + dups = null; + } + else if (p.Pt.Y == pp.Pt.Y && p.Pt.X <= pp.Pt.X) + { + if (p.Pt.X < pp.Pt.X) + { + dups = null; + pp = p; + } + else + { + if (p.Next != pp && p.Prev != pp) dups = p; + } + } + p = p.Next; + } + if (dups != null) + { + //there appears to be at least 2 vertices at bottomPt so ... + while (dups != p) + { + if (!FirstIsBottomPt(p, dups)) pp = dups; + dups = dups.Next; + while (dups.Pt != pp.Pt) dups = dups.Next; + } + } + return pp; + } + //------------------------------------------------------------------------------ + + private OutRec GetLowermostRec(OutRec outRec1, OutRec outRec2) + { + //work out which polygon fragment has the correct hole state ... + if (outRec1.BottomPt == null) + outRec1.BottomPt = GetBottomPt(outRec1.Pts); + if (outRec2.BottomPt == null) + outRec2.BottomPt = GetBottomPt(outRec2.Pts); + OutPt bPt1 = outRec1.BottomPt; + OutPt bPt2 = outRec2.BottomPt; + if (bPt1.Pt.Y > bPt2.Pt.Y) return outRec1; + else if (bPt1.Pt.Y < bPt2.Pt.Y) return outRec2; + else if (bPt1.Pt.X < bPt2.Pt.X) return outRec1; + else if (bPt1.Pt.X > bPt2.Pt.X) return outRec2; + else if (bPt1.Next == bPt1) return outRec2; + else if (bPt2.Next == bPt2) return outRec1; + else if (FirstIsBottomPt(bPt1, bPt2)) return outRec1; + else return outRec2; + } + //------------------------------------------------------------------------------ + + bool OutRec1RightOfOutRec2(OutRec outRec1, OutRec outRec2) + { + do + { + outRec1 = outRec1.FirstLeft; + if (outRec1 == outRec2) return true; + } while (outRec1 != null); + return false; + } + //------------------------------------------------------------------------------ + + private OutRec GetOutRec(int idx) + { + OutRec outrec = m_PolyOuts[idx]; + while (outrec != m_PolyOuts[outrec.Idx]) + outrec = m_PolyOuts[outrec.Idx]; + return outrec; + } + //------------------------------------------------------------------------------ + + private void AppendPolygon(TEdge e1, TEdge e2) + { + OutRec outRec1 = m_PolyOuts[e1.OutIdx]; + OutRec outRec2 = m_PolyOuts[e2.OutIdx]; + + OutRec holeStateRec; + if (OutRec1RightOfOutRec2(outRec1, outRec2)) + holeStateRec = outRec2; + else if (OutRec1RightOfOutRec2(outRec2, outRec1)) + holeStateRec = outRec1; + else + holeStateRec = GetLowermostRec(outRec1, outRec2); + + //get the start and ends of both output polygons and + //join E2 poly onto E1 poly and delete pointers to E2 ... + OutPt p1_lft = outRec1.Pts; + OutPt p1_rt = p1_lft.Prev; + OutPt p2_lft = outRec2.Pts; + OutPt p2_rt = p2_lft.Prev; + + //join e2 poly onto e1 poly and delete pointers to e2 ... + if (e1.Side == EdgeSide.esLeft) + { + if (e2.Side == EdgeSide.esLeft) + { + //z y x a b c + ReversePolyPtLinks(p2_lft); + p2_lft.Next = p1_lft; + p1_lft.Prev = p2_lft; + p1_rt.Next = p2_rt; + p2_rt.Prev = p1_rt; + outRec1.Pts = p2_rt; + } + else + { + //x y z a b c + p2_rt.Next = p1_lft; + p1_lft.Prev = p2_rt; + p2_lft.Prev = p1_rt; + p1_rt.Next = p2_lft; + outRec1.Pts = p2_lft; + } + } + else + { + if (e2.Side == EdgeSide.esRight) + { + //a b c z y x + ReversePolyPtLinks(p2_lft); + p1_rt.Next = p2_rt; + p2_rt.Prev = p1_rt; + p2_lft.Next = p1_lft; + p1_lft.Prev = p2_lft; + } + else + { + //a b c x y z + p1_rt.Next = p2_lft; + p2_lft.Prev = p1_rt; + p1_lft.Prev = p2_rt; + p2_rt.Next = p1_lft; + } + } + + outRec1.BottomPt = null; + if (holeStateRec == outRec2) + { + if (outRec2.FirstLeft != outRec1) + outRec1.FirstLeft = outRec2.FirstLeft; + outRec1.IsHole = outRec2.IsHole; + } + outRec2.Pts = null; + outRec2.BottomPt = null; + + outRec2.FirstLeft = outRec1; + + int OKIdx = e1.OutIdx; + int ObsoleteIdx = e2.OutIdx; + + e1.OutIdx = Unassigned; //nb: safe because we only get here via AddLocalMaxPoly + e2.OutIdx = Unassigned; + + TEdge e = m_ActiveEdges; + while (e != null) + { + if (e.OutIdx == ObsoleteIdx) + { + e.OutIdx = OKIdx; + e.Side = e1.Side; + break; + } + e = e.NextInAEL; + } + outRec2.Idx = outRec1.Idx; + } + //------------------------------------------------------------------------------ + + private void ReversePolyPtLinks(OutPt pp) + { + if (pp == null) return; + OutPt pp1; + OutPt pp2; + pp1 = pp; + do + { + pp2 = pp1.Next; + pp1.Next = pp1.Prev; + pp1.Prev = pp2; + pp1 = pp2; + } while (pp1 != pp); + } + //------------------------------------------------------------------------------ + + private static void SwapSides(TEdge edge1, TEdge edge2) + { + EdgeSide side = edge1.Side; + edge1.Side = edge2.Side; + edge2.Side = side; + } + //------------------------------------------------------------------------------ + + private static void SwapPolyIndexes(TEdge edge1, TEdge edge2) + { + int outIdx = edge1.OutIdx; + edge1.OutIdx = edge2.OutIdx; + edge2.OutIdx = outIdx; + } + //------------------------------------------------------------------------------ + + private void IntersectEdges(TEdge e1, TEdge e2, IntPoint pt) + { + //e1 will be to the left of e2 BELOW the intersection. Therefore e1 is before + //e2 in AEL except when e1 is being inserted at the intersection point ... + + bool e1Contributing = (e1.OutIdx >= 0); + bool e2Contributing = (e2.OutIdx >= 0); + +#if use_xyz + SetZ(ref pt, e1, e2); +#endif + +#if use_lines + //if either edge is on an OPEN path ... + if (e1.WindDelta == 0 || e2.WindDelta == 0) + { + //ignore subject-subject open path intersections UNLESS they + //are both open paths, AND they are both 'contributing maximas' ... + if (e1.WindDelta == 0 && e2.WindDelta == 0) return; + //if intersecting a subj line with a subj poly ... + else if (e1.PolyTyp == e2.PolyTyp && + e1.WindDelta != e2.WindDelta && m_ClipType == ClipType.ctUnion) + { + if (e1.WindDelta == 0) + { + if (e2Contributing) + { + AddOutPt(e1, pt); + if (e1Contributing) e1.OutIdx = Unassigned; + } + } + else + { + if (e1Contributing) + { + AddOutPt(e2, pt); + if (e2Contributing) e2.OutIdx = Unassigned; + } + } + } + else if (e1.PolyTyp != e2.PolyTyp) + { + if ((e1.WindDelta == 0) && Math.Abs(e2.WindCnt) == 1 && + (m_ClipType != ClipType.ctUnion || e2.WindCnt2 == 0)) + { + AddOutPt(e1, pt); + if (e1Contributing) e1.OutIdx = Unassigned; + } + else if ((e2.WindDelta == 0) && (Math.Abs(e1.WindCnt) == 1) && + (m_ClipType != ClipType.ctUnion || e1.WindCnt2 == 0)) + { + AddOutPt(e2, pt); + if (e2Contributing) e2.OutIdx = Unassigned; + } + } + return; + } +#endif + + //update winding counts... + //assumes that e1 will be to the Right of e2 ABOVE the intersection + if (e1.PolyTyp == e2.PolyTyp) + { + if (IsEvenOddFillType(e1)) + { + int oldE1WindCnt = e1.WindCnt; + e1.WindCnt = e2.WindCnt; + e2.WindCnt = oldE1WindCnt; + } + else + { + if (e1.WindCnt + e2.WindDelta == 0) e1.WindCnt = -e1.WindCnt; + else e1.WindCnt += e2.WindDelta; + if (e2.WindCnt - e1.WindDelta == 0) e2.WindCnt = -e2.WindCnt; + else e2.WindCnt -= e1.WindDelta; + } + } + else + { + if (!IsEvenOddFillType(e2)) e1.WindCnt2 += e2.WindDelta; + else e1.WindCnt2 = (e1.WindCnt2 == 0) ? 1 : 0; + if (!IsEvenOddFillType(e1)) e2.WindCnt2 -= e1.WindDelta; + else e2.WindCnt2 = (e2.WindCnt2 == 0) ? 1 : 0; + } + + PolyFillType e1FillType, e2FillType, e1FillType2, e2FillType2; + if (e1.PolyTyp == PolyType.ptSubject) + { + e1FillType = m_SubjFillType; + e1FillType2 = m_ClipFillType; + } + else + { + e1FillType = m_ClipFillType; + e1FillType2 = m_SubjFillType; + } + if (e2.PolyTyp == PolyType.ptSubject) + { + e2FillType = m_SubjFillType; + e2FillType2 = m_ClipFillType; + } + else + { + e2FillType = m_ClipFillType; + e2FillType2 = m_SubjFillType; + } + + int e1Wc, e2Wc; + switch (e1FillType) + { + case PolyFillType.pftPositive: e1Wc = e1.WindCnt; break; + case PolyFillType.pftNegative: e1Wc = -e1.WindCnt; break; + default: e1Wc = Math.Abs(e1.WindCnt); break; + } + switch (e2FillType) + { + case PolyFillType.pftPositive: e2Wc = e2.WindCnt; break; + case PolyFillType.pftNegative: e2Wc = -e2.WindCnt; break; + default: e2Wc = Math.Abs(e2.WindCnt); break; + } + + if (e1Contributing && e2Contributing) + { + if ((e1Wc != 0 && e1Wc != 1) || (e2Wc != 0 && e2Wc != 1) || + (e1.PolyTyp != e2.PolyTyp && m_ClipType != ClipType.ctXor)) + { + AddLocalMaxPoly(e1, e2, pt); + } + else + { + AddOutPt(e1, pt); + AddOutPt(e2, pt); + SwapSides(e1, e2); + SwapPolyIndexes(e1, e2); + } + } + else if (e1Contributing) + { + if (e2Wc == 0 || e2Wc == 1) + { + AddOutPt(e1, pt); + SwapSides(e1, e2); + SwapPolyIndexes(e1, e2); + } + + } + else if (e2Contributing) + { + if (e1Wc == 0 || e1Wc == 1) + { + AddOutPt(e2, pt); + SwapSides(e1, e2); + SwapPolyIndexes(e1, e2); + } + } + else if ((e1Wc == 0 || e1Wc == 1) && (e2Wc == 0 || e2Wc == 1)) + { + //neither edge is currently contributing ... + cInt e1Wc2, e2Wc2; + switch (e1FillType2) + { + case PolyFillType.pftPositive: e1Wc2 = e1.WindCnt2; break; + case PolyFillType.pftNegative: e1Wc2 = -e1.WindCnt2; break; + default: e1Wc2 = Math.Abs(e1.WindCnt2); break; + } + switch (e2FillType2) + { + case PolyFillType.pftPositive: e2Wc2 = e2.WindCnt2; break; + case PolyFillType.pftNegative: e2Wc2 = -e2.WindCnt2; break; + default: e2Wc2 = Math.Abs(e2.WindCnt2); break; + } + + if (e1.PolyTyp != e2.PolyTyp) + { + AddLocalMinPoly(e1, e2, pt); + } + else if (e1Wc == 1 && e2Wc == 1) + { + switch (m_ClipType) + { + case ClipType.ctIntersection: + if (e1Wc2 > 0 && e2Wc2 > 0) + AddLocalMinPoly(e1, e2, pt); + break; + case ClipType.ctUnion: + if (e1Wc2 <= 0 && e2Wc2 <= 0) + AddLocalMinPoly(e1, e2, pt); + break; + case ClipType.ctDifference: + if (((e1.PolyTyp == PolyType.ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) || + ((e1.PolyTyp == PolyType.ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0))) + AddLocalMinPoly(e1, e2, pt); + break; + case ClipType.ctXor: + AddLocalMinPoly(e1, e2, pt); + break; + } + } + else + SwapSides(e1, e2); + } + } + //------------------------------------------------------------------------------ + + private void DeleteFromSEL(TEdge e) + { + TEdge SelPrev = e.PrevInSEL; + TEdge SelNext = e.NextInSEL; + if (SelPrev == null && SelNext == null && (e != m_SortedEdges)) + return; //already deleted + if (SelPrev != null) + SelPrev.NextInSEL = SelNext; + else m_SortedEdges = SelNext; + if (SelNext != null) + SelNext.PrevInSEL = SelPrev; + e.NextInSEL = null; + e.PrevInSEL = null; + } + //------------------------------------------------------------------------------ + + private void ProcessHorizontals() + { + TEdge horzEdge; //m_SortedEdges; + while (PopEdgeFromSEL(out horzEdge)) + ProcessHorizontal(horzEdge); + } + //------------------------------------------------------------------------------ + + void GetHorzDirection(TEdge HorzEdge, out Direction Dir, out cInt Left, out cInt Right) + { + if (HorzEdge.Bot.X < HorzEdge.Top.X) + { + Left = HorzEdge.Bot.X; + Right = HorzEdge.Top.X; + Dir = Direction.dLeftToRight; + } + else + { + Left = HorzEdge.Top.X; + Right = HorzEdge.Bot.X; + Dir = Direction.dRightToLeft; + } + } + //------------------------------------------------------------------------ + + private void ProcessHorizontal(TEdge horzEdge) + { + Direction dir; + cInt horzLeft, horzRight; + bool IsOpen = horzEdge.WindDelta == 0; + + GetHorzDirection(horzEdge, out dir, out horzLeft, out horzRight); + + TEdge eLastHorz = horzEdge, eMaxPair = null; + while (eLastHorz.NextInLML != null && IsHorizontal(eLastHorz.NextInLML)) + eLastHorz = eLastHorz.NextInLML; + if (eLastHorz.NextInLML == null) + eMaxPair = GetMaximaPair(eLastHorz); + + Maxima currMax = m_Maxima; + if (currMax != null) + { + //get the first maxima in range (X) ... + if (dir == Direction.dLeftToRight) + { + while (currMax != null && currMax.X <= horzEdge.Bot.X) + currMax = currMax.Next; + if (currMax != null && currMax.X >= eLastHorz.Top.X) + currMax = null; + } + else + { + while (currMax.Next != null && currMax.Next.X < horzEdge.Bot.X) + currMax = currMax.Next; + if (currMax.X <= eLastHorz.Top.X) currMax = null; + } + } + + OutPt op1 = null; + for (; ; ) //loop through consec. horizontal edges + { + bool IsLastHorz = (horzEdge == eLastHorz); + TEdge e = GetNextInAEL(horzEdge, dir); + while (e != null) + { + + //this code block inserts extra coords into horizontal edges (in output + //polygons) whereever maxima touch these horizontal edges. This helps + //'simplifying' polygons (ie if the Simplify property is set). + if (currMax != null) + { + if (dir == Direction.dLeftToRight) + { + while (currMax != null && currMax.X < e.Curr.X) + { + if (horzEdge.OutIdx >= 0 && !IsOpen) + AddOutPt(horzEdge, new IntPoint(currMax.X, horzEdge.Bot.Y)); + currMax = currMax.Next; + } + } + else + { + while (currMax != null && currMax.X > e.Curr.X) + { + if (horzEdge.OutIdx >= 0 && !IsOpen) + AddOutPt(horzEdge, new IntPoint(currMax.X, horzEdge.Bot.Y)); + currMax = currMax.Prev; + } + } + }; + + if ((dir == Direction.dLeftToRight && e.Curr.X > horzRight) || + (dir == Direction.dRightToLeft && e.Curr.X < horzLeft)) break; + + //Also break if we've got to the end of an intermediate horizontal edge ... + //nb: Smaller Dx's are to the right of larger Dx's ABOVE the horizontal. + if (e.Curr.X == horzEdge.Top.X && horzEdge.NextInLML != null && + e.Dx < horzEdge.NextInLML.Dx) break; + + if (horzEdge.OutIdx >= 0 && !IsOpen) //note: may be done multiple times + { +#if use_xyz + if (dir == Direction.dLeftToRight) SetZ(ref e.Curr, horzEdge, e); + else SetZ(ref e.Curr, e, horzEdge); +#endif + + op1 = AddOutPt(horzEdge, e.Curr); + TEdge eNextHorz = m_SortedEdges; + while (eNextHorz != null) + { + if (eNextHorz.OutIdx >= 0 && + HorzSegmentsOverlap(horzEdge.Bot.X, + horzEdge.Top.X, eNextHorz.Bot.X, eNextHorz.Top.X)) + { + OutPt op2 = GetLastOutPt(eNextHorz); + AddJoin(op2, op1, eNextHorz.Top); + } + eNextHorz = eNextHorz.NextInSEL; + } + AddGhostJoin(op1, horzEdge.Bot); + } + + //OK, so far we're still in range of the horizontal Edge but make sure + //we're at the last of consec. horizontals when matching with eMaxPair + if (e == eMaxPair && IsLastHorz) + { + if (horzEdge.OutIdx >= 0) + AddLocalMaxPoly(horzEdge, eMaxPair, horzEdge.Top); + DeleteFromAEL(horzEdge); + DeleteFromAEL(eMaxPair); + return; + } + + if (dir == Direction.dLeftToRight) + { + IntPoint Pt = new IntPoint(e.Curr.X, horzEdge.Curr.Y); + IntersectEdges(horzEdge, e, Pt); + } + else + { + IntPoint Pt = new IntPoint(e.Curr.X, horzEdge.Curr.Y); + IntersectEdges(e, horzEdge, Pt); + } + TEdge eNext = GetNextInAEL(e, dir); + SwapPositionsInAEL(horzEdge, e); + e = eNext; + } //end while(e != null) + + //Break out of loop if HorzEdge.NextInLML is not also horizontal ... + if (horzEdge.NextInLML == null || !IsHorizontal(horzEdge.NextInLML)) break; + + UpdateEdgeIntoAEL(ref horzEdge); + if (horzEdge.OutIdx >= 0) AddOutPt(horzEdge, horzEdge.Bot); + GetHorzDirection(horzEdge, out dir, out horzLeft, out horzRight); + + } //end for (;;) + + if (horzEdge.OutIdx >= 0 && op1 == null) + { + op1 = GetLastOutPt(horzEdge); + TEdge eNextHorz = m_SortedEdges; + while (eNextHorz != null) + { + if (eNextHorz.OutIdx >= 0 && + HorzSegmentsOverlap(horzEdge.Bot.X, + horzEdge.Top.X, eNextHorz.Bot.X, eNextHorz.Top.X)) + { + OutPt op2 = GetLastOutPt(eNextHorz); + AddJoin(op2, op1, eNextHorz.Top); + } + eNextHorz = eNextHorz.NextInSEL; + } + AddGhostJoin(op1, horzEdge.Top); + } + + if (horzEdge.NextInLML != null) + { + if (horzEdge.OutIdx >= 0) + { + op1 = AddOutPt(horzEdge, horzEdge.Top); + + UpdateEdgeIntoAEL(ref horzEdge); + if (horzEdge.WindDelta == 0) return; + //nb: HorzEdge is no longer horizontal here + TEdge ePrev = horzEdge.PrevInAEL; + TEdge eNext = horzEdge.NextInAEL; + if (ePrev != null && ePrev.Curr.X == horzEdge.Bot.X && + ePrev.Curr.Y == horzEdge.Bot.Y && ePrev.WindDelta != 0 && + (ePrev.OutIdx >= 0 && ePrev.Curr.Y > ePrev.Top.Y && + SlopesEqual(horzEdge, ePrev, m_UseFullRange))) + { + OutPt op2 = AddOutPt(ePrev, horzEdge.Bot); + AddJoin(op1, op2, horzEdge.Top); + } + else if (eNext != null && eNext.Curr.X == horzEdge.Bot.X && + eNext.Curr.Y == horzEdge.Bot.Y && eNext.WindDelta != 0 && + eNext.OutIdx >= 0 && eNext.Curr.Y > eNext.Top.Y && + SlopesEqual(horzEdge, eNext, m_UseFullRange)) + { + OutPt op2 = AddOutPt(eNext, horzEdge.Bot); + AddJoin(op1, op2, horzEdge.Top); + } + } + else + UpdateEdgeIntoAEL(ref horzEdge); + } + else + { + if (horzEdge.OutIdx >= 0) AddOutPt(horzEdge, horzEdge.Top); + DeleteFromAEL(horzEdge); + } + } + //------------------------------------------------------------------------------ + + private TEdge GetNextInAEL(TEdge e, Direction Direction) + { + return Direction == Direction.dLeftToRight ? e.NextInAEL : e.PrevInAEL; + } + //------------------------------------------------------------------------------ + + private bool IsMinima(TEdge e) + { + return e != null && (e.Prev.NextInLML != e) && (e.Next.NextInLML != e); + } + //------------------------------------------------------------------------------ + + private bool IsMaxima(TEdge e, double Y) + { + return (e != null && e.Top.Y == Y && e.NextInLML == null); + } + //------------------------------------------------------------------------------ + + private bool IsIntermediate(TEdge e, double Y) + { + return (e.Top.Y == Y && e.NextInLML != null); + } + //------------------------------------------------------------------------------ + + internal TEdge GetMaximaPair(TEdge e) + { + if ((e.Next.Top == e.Top) && e.Next.NextInLML == null) + return e.Next; + else if ((e.Prev.Top == e.Top) && e.Prev.NextInLML == null) + return e.Prev; + else + return null; + } + //------------------------------------------------------------------------------ + + internal TEdge GetMaximaPairEx(TEdge e) + { + //as above but returns null if MaxPair isn't in AEL (unless it's horizontal) + TEdge result = GetMaximaPair(e); + if (result == null || result.OutIdx == Skip || + ((result.NextInAEL == result.PrevInAEL) && !IsHorizontal(result))) return null; + return result; + } + //------------------------------------------------------------------------------ + + private bool ProcessIntersections(cInt topY) + { + if (m_ActiveEdges == null) return true; + try + { + BuildIntersectList(topY); + if (m_IntersectList.Count == 0) return true; + if (m_IntersectList.Count == 1 || FixupIntersectionOrder()) + ProcessIntersectList(); + else + return false; + } + catch + { + m_SortedEdges = null; + m_IntersectList.Clear(); + throw new ClipperException("ProcessIntersections error"); + } + m_SortedEdges = null; + return true; + } + //------------------------------------------------------------------------------ + + private void BuildIntersectList(cInt topY) + { + if (m_ActiveEdges == null) return; + + //prepare for sorting ... + TEdge e = m_ActiveEdges; + m_SortedEdges = e; + while (e != null) + { + e.PrevInSEL = e.PrevInAEL; + e.NextInSEL = e.NextInAEL; + e.Curr.X = TopX(e, topY); + e = e.NextInAEL; + } + + //bubblesort ... + bool isModified = true; + while (isModified && m_SortedEdges != null) + { + isModified = false; + e = m_SortedEdges; + while (e.NextInSEL != null) + { + TEdge eNext = e.NextInSEL; + IntPoint pt; + if (e.Curr.X > eNext.Curr.X) + { + IntersectPoint(e, eNext, out pt); + if (pt.Y < topY) + pt = new IntPoint(TopX(e, topY), topY); + IntersectNode newNode = new IntersectNode(); + newNode.Edge1 = e; + newNode.Edge2 = eNext; + newNode.Pt = pt; + m_IntersectList.Add(newNode); + + SwapPositionsInSEL(e, eNext); + isModified = true; + } + else + e = eNext; + } + if (e.PrevInSEL != null) e.PrevInSEL.NextInSEL = null; + else break; + } + m_SortedEdges = null; + } + //------------------------------------------------------------------------------ + + private bool EdgesAdjacent(IntersectNode inode) + { + return (inode.Edge1.NextInSEL == inode.Edge2) || + (inode.Edge1.PrevInSEL == inode.Edge2); + } + //------------------------------------------------------------------------------ + + private static int IntersectNodeSort(IntersectNode node1, IntersectNode node2) + { + //the following typecast is safe because the differences in Pt.Y will + //be limited to the height of the scanbeam. + return (int)(node2.Pt.Y - node1.Pt.Y); + } + //------------------------------------------------------------------------------ + + private bool FixupIntersectionOrder() + { + //pre-condition: intersections are sorted bottom-most first. + //Now it's crucial that intersections are made only between adjacent edges, + //so to ensure this the order of intersections may need adjusting ... + m_IntersectList.Sort(m_IntersectNodeComparer); + + CopyAELToSEL(); + int cnt = m_IntersectList.Count; + for (int i = 0; i < cnt; i++) + { + if (!EdgesAdjacent(m_IntersectList[i])) + { + int j = i + 1; + while (j < cnt && !EdgesAdjacent(m_IntersectList[j])) j++; + if (j == cnt) return false; + + IntersectNode tmp = m_IntersectList[i]; + m_IntersectList[i] = m_IntersectList[j]; + m_IntersectList[j] = tmp; + + } + SwapPositionsInSEL(m_IntersectList[i].Edge1, m_IntersectList[i].Edge2); + } + return true; + } + //------------------------------------------------------------------------------ + + private void ProcessIntersectList() + { + for (int i = 0; i < m_IntersectList.Count; i++) + { + IntersectNode iNode = m_IntersectList[i]; + { + IntersectEdges(iNode.Edge1, iNode.Edge2, iNode.Pt); + SwapPositionsInAEL(iNode.Edge1, iNode.Edge2); + } + } + m_IntersectList.Clear(); + } + //------------------------------------------------------------------------------ + + internal static cInt Round(double value) + { + return value < 0 ? (cInt)(value - 0.5) : (cInt)(value + 0.5); + } + //------------------------------------------------------------------------------ + + private static cInt TopX(TEdge edge, cInt currentY) + { + if (currentY == edge.Top.Y) + return edge.Top.X; + return edge.Bot.X + Round(edge.Dx * (currentY - edge.Bot.Y)); + } + //------------------------------------------------------------------------------ + + private void IntersectPoint(TEdge edge1, TEdge edge2, out IntPoint ip) + { + ip = new IntPoint(); + double b1, b2; + //nb: with very large coordinate values, it's possible for SlopesEqual() to + //return false but for the edge.Dx value be equal due to double precision rounding. + if (edge1.Dx == edge2.Dx) + { + ip.Y = edge1.Curr.Y; + ip.X = TopX(edge1, ip.Y); + return; + } + + if (edge1.Delta.X == 0) + { + ip.X = edge1.Bot.X; + if (IsHorizontal(edge2)) + { + ip.Y = edge2.Bot.Y; + } + else + { + b2 = edge2.Bot.Y - (edge2.Bot.X / edge2.Dx); + ip.Y = Round(ip.X / edge2.Dx + b2); + } + } + else if (edge2.Delta.X == 0) + { + ip.X = edge2.Bot.X; + if (IsHorizontal(edge1)) + { + ip.Y = edge1.Bot.Y; + } + else + { + b1 = edge1.Bot.Y - (edge1.Bot.X / edge1.Dx); + ip.Y = Round(ip.X / edge1.Dx + b1); + } + } + else + { + b1 = edge1.Bot.X - edge1.Bot.Y * edge1.Dx; + b2 = edge2.Bot.X - edge2.Bot.Y * edge2.Dx; + double q = (b2 - b1) / (edge1.Dx - edge2.Dx); + ip.Y = Round(q); + if (Math.Abs(edge1.Dx) < Math.Abs(edge2.Dx)) + ip.X = Round(edge1.Dx * q + b1); + else + ip.X = Round(edge2.Dx * q + b2); + } + + if (ip.Y < edge1.Top.Y || ip.Y < edge2.Top.Y) + { + if (edge1.Top.Y > edge2.Top.Y) + ip.Y = edge1.Top.Y; + else + ip.Y = edge2.Top.Y; + if (Math.Abs(edge1.Dx) < Math.Abs(edge2.Dx)) + ip.X = TopX(edge1, ip.Y); + else + ip.X = TopX(edge2, ip.Y); + } + //finally, don't allow 'ip' to be BELOW curr.Y (ie bottom of scanbeam) ... + if (ip.Y > edge1.Curr.Y) + { + ip.Y = edge1.Curr.Y; + //better to use the more vertical edge to derive X ... + if (Math.Abs(edge1.Dx) > Math.Abs(edge2.Dx)) + ip.X = TopX(edge2, ip.Y); + else + ip.X = TopX(edge1, ip.Y); + } + } + //------------------------------------------------------------------------------ + + private void ProcessEdgesAtTopOfScanbeam(cInt topY) + { + TEdge e = m_ActiveEdges; + while (e != null) + { + //1. process maxima, treating them as if they're 'bent' horizontal edges, + // but exclude maxima with horizontal edges. nb: e can't be a horizontal. + bool IsMaximaEdge = IsMaxima(e, topY); + + if (IsMaximaEdge) + { + TEdge eMaxPair = GetMaximaPairEx(e); + IsMaximaEdge = (eMaxPair == null || !IsHorizontal(eMaxPair)); + } + + if (IsMaximaEdge) + { + if (StrictlySimple) InsertMaxima(e.Top.X); + TEdge ePrev = e.PrevInAEL; + DoMaxima(e); + if (ePrev == null) e = m_ActiveEdges; + else e = ePrev.NextInAEL; + } + else + { + //2. promote horizontal edges, otherwise update Curr.X and Curr.Y ... + if (IsIntermediate(e, topY) && IsHorizontal(e.NextInLML)) + { + UpdateEdgeIntoAEL(ref e); + if (e.OutIdx >= 0) + AddOutPt(e, e.Bot); + AddEdgeToSEL(e); + } + else + { + e.Curr.X = TopX(e, topY); + e.Curr.Y = topY; +#if use_xyz + if (e.Top.Y == topY) e.Curr.Z = e.Top.Z; + else if (e.Bot.Y == topY) e.Curr.Z = e.Bot.Z; + else e.Curr.Z = 0; +#endif + } + //When StrictlySimple and 'e' is being touched by another edge, then + //make sure both edges have a vertex here ... + if (StrictlySimple) + { + TEdge ePrev = e.PrevInAEL; + if ((e.OutIdx >= 0) && (e.WindDelta != 0) && ePrev != null && + (ePrev.OutIdx >= 0) && (ePrev.Curr.X == e.Curr.X) && + (ePrev.WindDelta != 0)) + { + IntPoint ip = new IntPoint(e.Curr); +#if use_xyz + SetZ(ref ip, ePrev, e); +#endif + OutPt op = AddOutPt(ePrev, ip); + OutPt op2 = AddOutPt(e, ip); + AddJoin(op, op2, ip); //StrictlySimple (type-3) join + } + } + + e = e.NextInAEL; + } + } + + //3. Process horizontals at the Top of the scanbeam ... + ProcessHorizontals(); + m_Maxima = null; + + //4. Promote intermediate vertices ... + e = m_ActiveEdges; + while (e != null) + { + if (IsIntermediate(e, topY)) + { + OutPt op = null; + if (e.OutIdx >= 0) + op = AddOutPt(e, e.Top); + UpdateEdgeIntoAEL(ref e); + + //if output polygons share an edge, they'll need joining later ... + TEdge ePrev = e.PrevInAEL; + TEdge eNext = e.NextInAEL; + if (ePrev != null && ePrev.Curr.X == e.Bot.X && + ePrev.Curr.Y == e.Bot.Y && op != null && + ePrev.OutIdx >= 0 && ePrev.Curr.Y > ePrev.Top.Y && + SlopesEqual(e.Curr, e.Top, ePrev.Curr, ePrev.Top, m_UseFullRange) && + (e.WindDelta != 0) && (ePrev.WindDelta != 0)) + { + OutPt op2 = AddOutPt(ePrev, e.Bot); + AddJoin(op, op2, e.Top); + } + else if (eNext != null && eNext.Curr.X == e.Bot.X && + eNext.Curr.Y == e.Bot.Y && op != null && + eNext.OutIdx >= 0 && eNext.Curr.Y > eNext.Top.Y && + SlopesEqual(e.Curr, e.Top, eNext.Curr, eNext.Top, m_UseFullRange) && + (e.WindDelta != 0) && (eNext.WindDelta != 0)) + { + OutPt op2 = AddOutPt(eNext, e.Bot); + AddJoin(op, op2, e.Top); + } + } + e = e.NextInAEL; + } + } + //------------------------------------------------------------------------------ + + private void DoMaxima(TEdge e) + { + TEdge eMaxPair = GetMaximaPairEx(e); + if (eMaxPair == null) + { + if (e.OutIdx >= 0) + AddOutPt(e, e.Top); + DeleteFromAEL(e); + return; + } + + TEdge eNext = e.NextInAEL; + while (eNext != null && eNext != eMaxPair) + { + IntersectEdges(e, eNext, e.Top); + SwapPositionsInAEL(e, eNext); + eNext = e.NextInAEL; + } + + if (e.OutIdx == Unassigned && eMaxPair.OutIdx == Unassigned) + { + DeleteFromAEL(e); + DeleteFromAEL(eMaxPair); + } + else if (e.OutIdx >= 0 && eMaxPair.OutIdx >= 0) + { + if (e.OutIdx >= 0) AddLocalMaxPoly(e, eMaxPair, e.Top); + DeleteFromAEL(e); + DeleteFromAEL(eMaxPair); + } +#if use_lines + else if (e.WindDelta == 0) + { + if (e.OutIdx >= 0) + { + AddOutPt(e, e.Top); + e.OutIdx = Unassigned; + } + DeleteFromAEL(e); + + if (eMaxPair.OutIdx >= 0) + { + AddOutPt(eMaxPair, e.Top); + eMaxPair.OutIdx = Unassigned; + } + DeleteFromAEL(eMaxPair); + } +#endif + else throw new ClipperException("DoMaxima error"); + } + //------------------------------------------------------------------------------ + + public static void ReversePaths(Paths polys) + { + foreach (var poly in polys) { poly.Reverse(); } + } + //------------------------------------------------------------------------------ + + public static bool Orientation(Path poly) + { + return Area(poly) >= 0; + } + //------------------------------------------------------------------------------ + + private int PointCount(OutPt pts) + { + if (pts == null) return 0; + int result = 0; + OutPt p = pts; + do + { + result++; + p = p.Next; + } + while (p != pts); + return result; + } + //------------------------------------------------------------------------------ + + private void BuildResult(Paths polyg) + { + polyg.Clear(); + polyg.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + if (outRec.Pts == null) continue; + OutPt p = outRec.Pts.Prev; + int cnt = PointCount(p); + if (cnt < 2) continue; + Path pg = new Path(cnt); + for (int j = 0; j < cnt; j++) + { + pg.Add(p.Pt); + p = p.Prev; + } + polyg.Add(pg); + } + } + //------------------------------------------------------------------------------ + + private void BuildResult2(PolyTree polytree) + { + polytree.Clear(); + + //add each output polygon/contour to polytree ... + polytree.m_AllPolys.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + int cnt = PointCount(outRec.Pts); + if ((outRec.IsOpen && cnt < 2) || + (!outRec.IsOpen && cnt < 3)) continue; + FixHoleLinkage(outRec); + PolyNode pn = new PolyNode(); + polytree.m_AllPolys.Add(pn); + outRec.PolyNode = pn; + pn.m_polygon.Capacity = cnt; + OutPt op = outRec.Pts.Prev; + for (int j = 0; j < cnt; j++) + { + pn.m_polygon.Add(op.Pt); + op = op.Prev; + } + } + + //fixup PolyNode links etc ... + polytree.m_Childs.Capacity = m_PolyOuts.Count; + for (int i = 0; i < m_PolyOuts.Count; i++) + { + OutRec outRec = m_PolyOuts[i]; + if (outRec.PolyNode == null) continue; + else if (outRec.IsOpen) + { + outRec.PolyNode.IsOpen = true; + polytree.AddChild(outRec.PolyNode); + } + else if (outRec.FirstLeft != null && + outRec.FirstLeft.PolyNode != null) + outRec.FirstLeft.PolyNode.AddChild(outRec.PolyNode); + else + polytree.AddChild(outRec.PolyNode); + } + } + //------------------------------------------------------------------------------ + + private void FixupOutPolyline(OutRec outrec) + { + OutPt pp = outrec.Pts; + OutPt lastPP = pp.Prev; + while (pp != lastPP) + { + pp = pp.Next; + if (pp.Pt == pp.Prev.Pt) + { + if (pp == lastPP) lastPP = pp.Prev; + OutPt tmpPP = pp.Prev; + tmpPP.Next = pp.Next; + pp.Next.Prev = tmpPP; + pp = tmpPP; + } + } + if (pp == pp.Prev) outrec.Pts = null; + } + //------------------------------------------------------------------------------ + + private void FixupOutPolygon(OutRec outRec) + { + //FixupOutPolygon() - removes duplicate points and simplifies consecutive + //parallel edges by removing the middle vertex. + OutPt lastOK = null; + outRec.BottomPt = null; + OutPt pp = outRec.Pts; + bool preserveCol = PreserveCollinear || StrictlySimple; + for (; ; ) + { + if (pp.Prev == pp || pp.Prev == pp.Next) + { + outRec.Pts = null; + return; + } + //test for duplicate points and collinear edges ... + if ((pp.Pt == pp.Next.Pt) || (pp.Pt == pp.Prev.Pt) || + (SlopesEqual(pp.Prev.Pt, pp.Pt, pp.Next.Pt, m_UseFullRange) && + (!preserveCol || !Pt2IsBetweenPt1AndPt3(pp.Prev.Pt, pp.Pt, pp.Next.Pt)))) + { + lastOK = null; + pp.Prev.Next = pp.Next; + pp.Next.Prev = pp.Prev; + pp = pp.Prev; + } + else if (pp == lastOK) break; + else + { + if (lastOK == null) lastOK = pp; + pp = pp.Next; + } + } + outRec.Pts = pp; + } + //------------------------------------------------------------------------------ + + OutPt DupOutPt(OutPt outPt, bool InsertAfter) + { + OutPt result = new OutPt(); + result.Pt = outPt.Pt; + result.Idx = outPt.Idx; + if (InsertAfter) + { + result.Next = outPt.Next; + result.Prev = outPt; + outPt.Next.Prev = result; + outPt.Next = result; + } + else + { + result.Prev = outPt.Prev; + result.Next = outPt; + outPt.Prev.Next = result; + outPt.Prev = result; + } + return result; + } + //------------------------------------------------------------------------------ + + bool GetOverlap(cInt a1, cInt a2, cInt b1, cInt b2, out cInt Left, out cInt Right) + { + if (a1 < a2) + { + if (b1 < b2) { Left = Math.Max(a1, b1); Right = Math.Min(a2, b2); } + else { Left = Math.Max(a1, b2); Right = Math.Min(a2, b1); } + } + else + { + if (b1 < b2) { Left = Math.Max(a2, b1); Right = Math.Min(a1, b2); } + else { Left = Math.Max(a2, b2); Right = Math.Min(a1, b1); } + } + return Left < Right; + } + //------------------------------------------------------------------------------ + + bool JoinHorz(OutPt op1, OutPt op1b, OutPt op2, OutPt op2b, + IntPoint Pt, bool DiscardLeft) + { + Direction Dir1 = (op1.Pt.X > op1b.Pt.X ? + Direction.dRightToLeft : Direction.dLeftToRight); + Direction Dir2 = (op2.Pt.X > op2b.Pt.X ? + Direction.dRightToLeft : Direction.dLeftToRight); + if (Dir1 == Dir2) return false; + + //When DiscardLeft, we want Op1b to be on the Left of Op1, otherwise we + //want Op1b to be on the Right. (And likewise with Op2 and Op2b.) + //So, to facilitate this while inserting Op1b and Op2b ... + //when DiscardLeft, make sure we're AT or RIGHT of Pt before adding Op1b, + //otherwise make sure we're AT or LEFT of Pt. (Likewise with Op2b.) + if (Dir1 == Direction.dLeftToRight) + { + while (op1.Next.Pt.X <= Pt.X && + op1.Next.Pt.X >= op1.Pt.X && op1.Next.Pt.Y == Pt.Y) + op1 = op1.Next; + if (DiscardLeft && (op1.Pt.X != Pt.X)) op1 = op1.Next; + op1b = DupOutPt(op1, !DiscardLeft); + if (op1b.Pt != Pt) + { + op1 = op1b; + op1.Pt = Pt; + op1b = DupOutPt(op1, !DiscardLeft); + } + } + else + { + while (op1.Next.Pt.X >= Pt.X && + op1.Next.Pt.X <= op1.Pt.X && op1.Next.Pt.Y == Pt.Y) + op1 = op1.Next; + if (!DiscardLeft && (op1.Pt.X != Pt.X)) op1 = op1.Next; + op1b = DupOutPt(op1, DiscardLeft); + if (op1b.Pt != Pt) + { + op1 = op1b; + op1.Pt = Pt; + op1b = DupOutPt(op1, DiscardLeft); + } + } + + if (Dir2 == Direction.dLeftToRight) + { + while (op2.Next.Pt.X <= Pt.X && + op2.Next.Pt.X >= op2.Pt.X && op2.Next.Pt.Y == Pt.Y) + op2 = op2.Next; + if (DiscardLeft && (op2.Pt.X != Pt.X)) op2 = op2.Next; + op2b = DupOutPt(op2, !DiscardLeft); + if (op2b.Pt != Pt) + { + op2 = op2b; + op2.Pt = Pt; + op2b = DupOutPt(op2, !DiscardLeft); + }; + } + else + { + while (op2.Next.Pt.X >= Pt.X && + op2.Next.Pt.X <= op2.Pt.X && op2.Next.Pt.Y == Pt.Y) + op2 = op2.Next; + if (!DiscardLeft && (op2.Pt.X != Pt.X)) op2 = op2.Next; + op2b = DupOutPt(op2, DiscardLeft); + if (op2b.Pt != Pt) + { + op2 = op2b; + op2.Pt = Pt; + op2b = DupOutPt(op2, DiscardLeft); + }; + }; + + if ((Dir1 == Direction.dLeftToRight) == DiscardLeft) + { + op1.Prev = op2; + op2.Next = op1; + op1b.Next = op2b; + op2b.Prev = op1b; + } + else + { + op1.Next = op2; + op2.Prev = op1; + op1b.Prev = op2b; + op2b.Next = op1b; + } + return true; + } + //------------------------------------------------------------------------------ + + private bool JoinPoints(Join j, OutRec outRec1, OutRec outRec2) + { + OutPt op1 = j.OutPt1, op1b; + OutPt op2 = j.OutPt2, op2b; + + //There are 3 kinds of joins for output polygons ... + //1. Horizontal joins where Join.OutPt1 & Join.OutPt2 are vertices anywhere + //along (horizontal) collinear edges (& Join.OffPt is on the same horizontal). + //2. Non-horizontal joins where Join.OutPt1 & Join.OutPt2 are at the same + //location at the Bottom of the overlapping segment (& Join.OffPt is above). + //3. StrictlySimple joins where edges touch but are not collinear and where + //Join.OutPt1, Join.OutPt2 & Join.OffPt all share the same point. + bool isHorizontal = (j.OutPt1.Pt.Y == j.OffPt.Y); + + if (isHorizontal && (j.OffPt == j.OutPt1.Pt) && (j.OffPt == j.OutPt2.Pt)) + { + //Strictly Simple join ... + if (outRec1 != outRec2) return false; + op1b = j.OutPt1.Next; + while (op1b != op1 && (op1b.Pt == j.OffPt)) + op1b = op1b.Next; + bool reverse1 = (op1b.Pt.Y > j.OffPt.Y); + op2b = j.OutPt2.Next; + while (op2b != op2 && (op2b.Pt == j.OffPt)) + op2b = op2b.Next; + bool reverse2 = (op2b.Pt.Y > j.OffPt.Y); + if (reverse1 == reverse2) return false; + if (reverse1) + { + op1b = DupOutPt(op1, false); + op2b = DupOutPt(op2, true); + op1.Prev = op2; + op2.Next = op1; + op1b.Next = op2b; + op2b.Prev = op1b; + j.OutPt1 = op1; + j.OutPt2 = op1b; + return true; + } + else + { + op1b = DupOutPt(op1, true); + op2b = DupOutPt(op2, false); + op1.Next = op2; + op2.Prev = op1; + op1b.Prev = op2b; + op2b.Next = op1b; + j.OutPt1 = op1; + j.OutPt2 = op1b; + return true; + } + } + else if (isHorizontal) + { + //treat horizontal joins differently to non-horizontal joins since with + //them we're not yet sure where the overlapping is. OutPt1.Pt & OutPt2.Pt + //may be anywhere along the horizontal edge. + op1b = op1; + while (op1.Prev.Pt.Y == op1.Pt.Y && op1.Prev != op1b && op1.Prev != op2) + op1 = op1.Prev; + while (op1b.Next.Pt.Y == op1b.Pt.Y && op1b.Next != op1 && op1b.Next != op2) + op1b = op1b.Next; + if (op1b.Next == op1 || op1b.Next == op2) return false; //a flat 'polygon' + + op2b = op2; + while (op2.Prev.Pt.Y == op2.Pt.Y && op2.Prev != op2b && op2.Prev != op1b) + op2 = op2.Prev; + while (op2b.Next.Pt.Y == op2b.Pt.Y && op2b.Next != op2 && op2b.Next != op1) + op2b = op2b.Next; + if (op2b.Next == op2 || op2b.Next == op1) return false; //a flat 'polygon' + + cInt Left, Right; + //Op1 -. Op1b & Op2 -. Op2b are the extremites of the horizontal edges + if (!GetOverlap(op1.Pt.X, op1b.Pt.X, op2.Pt.X, op2b.Pt.X, out Left, out Right)) + return false; + + //DiscardLeftSide: when overlapping edges are joined, a spike will created + //which needs to be cleaned up. However, we don't want Op1 or Op2 caught up + //on the discard Side as either may still be needed for other joins ... + IntPoint Pt; + bool DiscardLeftSide; + if (op1.Pt.X >= Left && op1.Pt.X <= Right) + { + Pt = op1.Pt; DiscardLeftSide = (op1.Pt.X > op1b.Pt.X); + } + else if (op2.Pt.X >= Left && op2.Pt.X <= Right) + { + Pt = op2.Pt; DiscardLeftSide = (op2.Pt.X > op2b.Pt.X); + } + else if (op1b.Pt.X >= Left && op1b.Pt.X <= Right) + { + Pt = op1b.Pt; DiscardLeftSide = op1b.Pt.X > op1.Pt.X; + } + else + { + Pt = op2b.Pt; DiscardLeftSide = (op2b.Pt.X > op2.Pt.X); + } + j.OutPt1 = op1; + j.OutPt2 = op2; + return JoinHorz(op1, op1b, op2, op2b, Pt, DiscardLeftSide); + } + else + { + //nb: For non-horizontal joins ... + // 1. Jr.OutPt1.Pt.Y == Jr.OutPt2.Pt.Y + // 2. Jr.OutPt1.Pt > Jr.OffPt.Y + + //make sure the polygons are correctly oriented ... + op1b = op1.Next; + while ((op1b.Pt == op1.Pt) && (op1b != op1)) op1b = op1b.Next; + bool Reverse1 = ((op1b.Pt.Y > op1.Pt.Y) || + !SlopesEqual(op1.Pt, op1b.Pt, j.OffPt, m_UseFullRange)); + if (Reverse1) + { + op1b = op1.Prev; + while ((op1b.Pt == op1.Pt) && (op1b != op1)) op1b = op1b.Prev; + if ((op1b.Pt.Y > op1.Pt.Y) || + !SlopesEqual(op1.Pt, op1b.Pt, j.OffPt, m_UseFullRange)) return false; + }; + op2b = op2.Next; + while ((op2b.Pt == op2.Pt) && (op2b != op2)) op2b = op2b.Next; + bool Reverse2 = ((op2b.Pt.Y > op2.Pt.Y) || + !SlopesEqual(op2.Pt, op2b.Pt, j.OffPt, m_UseFullRange)); + if (Reverse2) + { + op2b = op2.Prev; + while ((op2b.Pt == op2.Pt) && (op2b != op2)) op2b = op2b.Prev; + if ((op2b.Pt.Y > op2.Pt.Y) || + !SlopesEqual(op2.Pt, op2b.Pt, j.OffPt, m_UseFullRange)) return false; + } + + if ((op1b == op1) || (op2b == op2) || (op1b == op2b) || + ((outRec1 == outRec2) && (Reverse1 == Reverse2))) return false; + + if (Reverse1) + { + op1b = DupOutPt(op1, false); + op2b = DupOutPt(op2, true); + op1.Prev = op2; + op2.Next = op1; + op1b.Next = op2b; + op2b.Prev = op1b; + j.OutPt1 = op1; + j.OutPt2 = op1b; + return true; + } + else + { + op1b = DupOutPt(op1, true); + op2b = DupOutPt(op2, false); + op1.Next = op2; + op2.Prev = op1; + op1b.Prev = op2b; + op2b.Next = op1b; + j.OutPt1 = op1; + j.OutPt2 = op1b; + return true; + } + } + } + //---------------------------------------------------------------------- + + public static int PointInPolygon(IntPoint pt, Path path) + { + //returns 0 if false, +1 if true, -1 if pt ON polygon boundary + //See "The Point in Polygon Problem for Arbitrary Polygons" by Hormann & Agathos + //http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf + int result = 0, cnt = path.Count; + if (cnt < 3) return 0; + IntPoint ip = path[0]; + for (int i = 1; i <= cnt; ++i) + { + IntPoint ipNext = (i == cnt ? path[0] : path[i]); + if (ipNext.Y == pt.Y) + { + if ((ipNext.X == pt.X) || (ip.Y == pt.Y && + ((ipNext.X > pt.X) == (ip.X < pt.X)))) return -1; + } + if ((ip.Y < pt.Y) != (ipNext.Y < pt.Y)) + { + if (ip.X >= pt.X) + { + if (ipNext.X > pt.X) result = 1 - result; + else + { + double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - + (double)(ipNext.X - pt.X) * (ip.Y - pt.Y); + if (d == 0) return -1; + else if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result; + } + } + else + { + if (ipNext.X > pt.X) + { + double d = (double)(ip.X - pt.X) * (ipNext.Y - pt.Y) - + (double)(ipNext.X - pt.X) * (ip.Y - pt.Y); + if (d == 0) return -1; + else if ((d > 0) == (ipNext.Y > ip.Y)) result = 1 - result; + } + } + } + ip = ipNext; + } + return result; + } + //------------------------------------------------------------------------------ + + //See "The Point in Polygon Problem for Arbitrary Polygons" by Hormann & Agathos + //http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.5498&rep=rep1&type=pdf + private static int PointInPolygon(IntPoint pt, OutPt op) + { + //returns 0 if false, +1 if true, -1 if pt ON polygon boundary + int result = 0; + OutPt startOp = op; + cInt ptx = pt.X, pty = pt.Y; + cInt poly0x = op.Pt.X, poly0y = op.Pt.Y; + do + { + op = op.Next; + cInt poly1x = op.Pt.X, poly1y = op.Pt.Y; + + if (poly1y == pty) + { + if ((poly1x == ptx) || (poly0y == pty && + ((poly1x > ptx) == (poly0x < ptx)))) return -1; + } + if ((poly0y < pty) != (poly1y < pty)) + { + if (poly0x >= ptx) + { + if (poly1x > ptx) result = 1 - result; + else + { + double d = (double)(poly0x - ptx) * (poly1y - pty) - + (double)(poly1x - ptx) * (poly0y - pty); + if (d == 0) return -1; + if ((d > 0) == (poly1y > poly0y)) result = 1 - result; + } + } + else + { + if (poly1x > ptx) + { + double d = (double)(poly0x - ptx) * (poly1y - pty) - + (double)(poly1x - ptx) * (poly0y - pty); + if (d == 0) return -1; + if ((d > 0) == (poly1y > poly0y)) result = 1 - result; + } + } + } + poly0x = poly1x; poly0y = poly1y; + } while (startOp != op); + return result; + } + //------------------------------------------------------------------------------ + + private static bool Poly2ContainsPoly1(OutPt outPt1, OutPt outPt2) + { + OutPt op = outPt1; + do + { + //nb: PointInPolygon returns 0 if false, +1 if true, -1 if pt on polygon + int res = PointInPolygon(op.Pt, outPt2); + if (res >= 0) return res > 0; + op = op.Next; + } + while (op != outPt1); + return true; + } + //---------------------------------------------------------------------- + + private void FixupFirstLefts1(OutRec OldOutRec, OutRec NewOutRec) + { + foreach (OutRec outRec in m_PolyOuts) + { + OutRec firstLeft = ParseFirstLeft(outRec.FirstLeft); + if (outRec.Pts != null && firstLeft == OldOutRec) + { + if (Poly2ContainsPoly1(outRec.Pts, NewOutRec.Pts)) + outRec.FirstLeft = NewOutRec; + } + } + } + //---------------------------------------------------------------------- + + private void FixupFirstLefts2(OutRec innerOutRec, OutRec outerOutRec) + { + //A polygon has split into two such that one is now the inner of the other. + //It's possible that these polygons now wrap around other polygons, so check + //every polygon that's also contained by OuterOutRec's FirstLeft container + //(including nil) to see if they've become inner to the new inner polygon ... + OutRec orfl = outerOutRec.FirstLeft; + foreach (OutRec outRec in m_PolyOuts) + { + if (outRec.Pts == null || outRec == outerOutRec || outRec == innerOutRec) + continue; + OutRec firstLeft = ParseFirstLeft(outRec.FirstLeft); + if (firstLeft != orfl && firstLeft != innerOutRec && firstLeft != outerOutRec) + continue; + if (Poly2ContainsPoly1(outRec.Pts, innerOutRec.Pts)) + outRec.FirstLeft = innerOutRec; + else if (Poly2ContainsPoly1(outRec.Pts, outerOutRec.Pts)) + outRec.FirstLeft = outerOutRec; + else if (outRec.FirstLeft == innerOutRec || outRec.FirstLeft == outerOutRec) + outRec.FirstLeft = orfl; + } + } + //---------------------------------------------------------------------- + + private void FixupFirstLefts3(OutRec OldOutRec, OutRec NewOutRec) + { + //same as FixupFirstLefts1 but doesn't call Poly2ContainsPoly1() + foreach (OutRec outRec in m_PolyOuts) + { + OutRec firstLeft = ParseFirstLeft(outRec.FirstLeft); + if (outRec.Pts != null && firstLeft == OldOutRec) + outRec.FirstLeft = NewOutRec; + } + } + //---------------------------------------------------------------------- + + private static OutRec ParseFirstLeft(OutRec FirstLeft) + { + while (FirstLeft != null && FirstLeft.Pts == null) + FirstLeft = FirstLeft.FirstLeft; + return FirstLeft; + } + //------------------------------------------------------------------------------ + + private void JoinCommonEdges() + { + for (int i = 0; i < m_Joins.Count; i++) + { + Join join = m_Joins[i]; + + OutRec outRec1 = GetOutRec(join.OutPt1.Idx); + OutRec outRec2 = GetOutRec(join.OutPt2.Idx); + + if (outRec1.Pts == null || outRec2.Pts == null) continue; + if (outRec1.IsOpen || outRec2.IsOpen) continue; + + //get the polygon fragment with the correct hole state (FirstLeft) + //before calling JoinPoints() ... + OutRec holeStateRec; + if (outRec1 == outRec2) holeStateRec = outRec1; + else if (OutRec1RightOfOutRec2(outRec1, outRec2)) holeStateRec = outRec2; + else if (OutRec1RightOfOutRec2(outRec2, outRec1)) holeStateRec = outRec1; + else holeStateRec = GetLowermostRec(outRec1, outRec2); + + if (!JoinPoints(join, outRec1, outRec2)) continue; + + if (outRec1 == outRec2) + { + //instead of joining two polygons, we've just created a new one by + //splitting one polygon into two. + outRec1.Pts = join.OutPt1; + outRec1.BottomPt = null; + outRec2 = CreateOutRec(); + outRec2.Pts = join.OutPt2; + + //update all OutRec2.Pts Idx's ... + UpdateOutPtIdxs(outRec2); + + if (Poly2ContainsPoly1(outRec2.Pts, outRec1.Pts)) + { + //outRec1 contains outRec2 ... + outRec2.IsHole = !outRec1.IsHole; + outRec2.FirstLeft = outRec1; + + if (m_UsingPolyTree) FixupFirstLefts2(outRec2, outRec1); + + if ((outRec2.IsHole ^ ReverseSolution) == (Area(outRec2) > 0)) + ReversePolyPtLinks(outRec2.Pts); + + } + else if (Poly2ContainsPoly1(outRec1.Pts, outRec2.Pts)) + { + //outRec2 contains outRec1 ... + outRec2.IsHole = outRec1.IsHole; + outRec1.IsHole = !outRec2.IsHole; + outRec2.FirstLeft = outRec1.FirstLeft; + outRec1.FirstLeft = outRec2; + + if (m_UsingPolyTree) FixupFirstLefts2(outRec1, outRec2); + + if ((outRec1.IsHole ^ ReverseSolution) == (Area(outRec1) > 0)) + ReversePolyPtLinks(outRec1.Pts); + } + else + { + //the 2 polygons are completely separate ... + outRec2.IsHole = outRec1.IsHole; + outRec2.FirstLeft = outRec1.FirstLeft; + + //fixup FirstLeft pointers that may need reassigning to OutRec2 + if (m_UsingPolyTree) FixupFirstLefts1(outRec1, outRec2); + } + + } + else + { + //joined 2 polygons together ... + + outRec2.Pts = null; + outRec2.BottomPt = null; + outRec2.Idx = outRec1.Idx; + + outRec1.IsHole = holeStateRec.IsHole; + if (holeStateRec == outRec2) + outRec1.FirstLeft = outRec2.FirstLeft; + outRec2.FirstLeft = outRec1; + + //fixup FirstLeft pointers that may need reassigning to OutRec1 + if (m_UsingPolyTree) FixupFirstLefts3(outRec2, outRec1); + } + } + } + //------------------------------------------------------------------------------ + + private void UpdateOutPtIdxs(OutRec outrec) + { + OutPt op = outrec.Pts; + do + { + op.Idx = outrec.Idx; + op = op.Prev; + } + while (op != outrec.Pts); + } + //------------------------------------------------------------------------------ + + private void DoSimplePolygons() + { + int i = 0; + while (i < m_PolyOuts.Count) + { + OutRec outrec = m_PolyOuts[i++]; + OutPt op = outrec.Pts; + if (op == null || outrec.IsOpen) continue; + do //for each Pt in Polygon until duplicate found do ... + { + OutPt op2 = op.Next; + while (op2 != outrec.Pts) + { + if ((op.Pt == op2.Pt) && op2.Next != op && op2.Prev != op) + { + //split the polygon into two ... + OutPt op3 = op.Prev; + OutPt op4 = op2.Prev; + op.Prev = op4; + op4.Next = op; + op2.Prev = op3; + op3.Next = op2; + + outrec.Pts = op; + OutRec outrec2 = CreateOutRec(); + outrec2.Pts = op2; + UpdateOutPtIdxs(outrec2); + if (Poly2ContainsPoly1(outrec2.Pts, outrec.Pts)) + { + //OutRec2 is contained by OutRec1 ... + outrec2.IsHole = !outrec.IsHole; + outrec2.FirstLeft = outrec; + if (m_UsingPolyTree) FixupFirstLefts2(outrec2, outrec); + } + else + if (Poly2ContainsPoly1(outrec.Pts, outrec2.Pts)) + { + //OutRec1 is contained by OutRec2 ... + outrec2.IsHole = outrec.IsHole; + outrec.IsHole = !outrec2.IsHole; + outrec2.FirstLeft = outrec.FirstLeft; + outrec.FirstLeft = outrec2; + if (m_UsingPolyTree) FixupFirstLefts2(outrec, outrec2); + } + else + { + //the 2 polygons are separate ... + outrec2.IsHole = outrec.IsHole; + outrec2.FirstLeft = outrec.FirstLeft; + if (m_UsingPolyTree) FixupFirstLefts1(outrec, outrec2); + } + op2 = op; //ie get ready for the next iteration + } + op2 = op2.Next; + } + op = op.Next; + } + while (op != outrec.Pts); + } + } + //------------------------------------------------------------------------------ + + public static double Area(Path poly) + { + int cnt = (int)poly.Count; + if (cnt < 3) return 0; + double a = 0; + for (int i = 0, j = cnt - 1; i < cnt; ++i) + { + a += ((double)poly[j].X + poly[i].X) * ((double)poly[j].Y - poly[i].Y); + j = i; + } + return -a * 0.5; + } + //------------------------------------------------------------------------------ + + internal double Area(OutRec outRec) + { + return Area(outRec.Pts); + } + //------------------------------------------------------------------------------ + + internal double Area(OutPt op) + { + OutPt opFirst = op; + if (op == null) return 0; + double a = 0; + do + { + a = a + (double)(op.Prev.Pt.X + op.Pt.X) * (double)(op.Prev.Pt.Y - op.Pt.Y); + op = op.Next; + } while (op != opFirst); + return a * 0.5; + } + + //------------------------------------------------------------------------------ + // SimplifyPolygon functions ... + // Convert self-intersecting polygons into simple polygons + //------------------------------------------------------------------------------ + + public static Paths SimplifyPolygon(Path poly, + PolyFillType fillType = PolyFillType.pftEvenOdd) + { + Paths result = new Paths(); + Clipper c = new Clipper(); + c.StrictlySimple = true; + c.AddPath(poly, PolyType.ptSubject, true); + c.Execute(ClipType.ctUnion, result, fillType, fillType); + return result; + } + //------------------------------------------------------------------------------ + + public static Paths SimplifyPolygons(Paths polys, + PolyFillType fillType = PolyFillType.pftEvenOdd) + { + Paths result = new Paths(); + Clipper c = new Clipper(); + c.StrictlySimple = true; + c.AddPaths(polys, PolyType.ptSubject, true); + c.Execute(ClipType.ctUnion, result, fillType, fillType); + return result; + } + //------------------------------------------------------------------------------ + + private static double DistanceSqrd(IntPoint pt1, IntPoint pt2) + { + double dx = ((double)pt1.X - pt2.X); + double dy = ((double)pt1.Y - pt2.Y); + return (dx * dx + dy * dy); + } + //------------------------------------------------------------------------------ + + private static double DistanceFromLineSqrd(IntPoint pt, IntPoint ln1, IntPoint ln2) + { + //The equation of a line in general form (Ax + By + C = 0) + //given 2 points (x¹,y¹) & (x²,y²) is ... + //(y¹ - y²)x + (x² - x¹)y + (y² - y¹)x¹ - (x² - x¹)y¹ = 0 + //A = (y¹ - y²); B = (x² - x¹); C = (y² - y¹)x¹ - (x² - x¹)y¹ + //perpendicular distance of point (x³,y³) = (Ax³ + By³ + C)/Sqrt(A² + B²) + //see http://en.wikipedia.org/wiki/Perpendicular_distance + double A = ln1.Y - ln2.Y; + double B = ln2.X - ln1.X; + double C = A * ln1.X + B * ln1.Y; + C = A * pt.X + B * pt.Y - C; + return (C * C) / (A * A + B * B); + } + //--------------------------------------------------------------------------- + + private static bool SlopesNearCollinear(IntPoint pt1, + IntPoint pt2, IntPoint pt3, double distSqrd) + { + //this function is more accurate when the point that's GEOMETRICALLY + //between the other 2 points is the one that's tested for distance. + //nb: with 'spikes', either pt1 or pt3 is geometrically between the other pts + if (Math.Abs(pt1.X - pt2.X) > Math.Abs(pt1.Y - pt2.Y)) + { + if ((pt1.X > pt2.X) == (pt1.X < pt3.X)) + return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd; + else if ((pt2.X > pt1.X) == (pt2.X < pt3.X)) + return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd; + else + return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd; + } + else + { + if ((pt1.Y > pt2.Y) == (pt1.Y < pt3.Y)) + return DistanceFromLineSqrd(pt1, pt2, pt3) < distSqrd; + else if ((pt2.Y > pt1.Y) == (pt2.Y < pt3.Y)) + return DistanceFromLineSqrd(pt2, pt1, pt3) < distSqrd; + else + return DistanceFromLineSqrd(pt3, pt1, pt2) < distSqrd; + } + } + //------------------------------------------------------------------------------ + + private static bool PointsAreClose(IntPoint pt1, IntPoint pt2, double distSqrd) + { + double dx = (double)pt1.X - pt2.X; + double dy = (double)pt1.Y - pt2.Y; + return ((dx * dx) + (dy * dy) <= distSqrd); + } + //------------------------------------------------------------------------------ + + private static OutPt ExcludeOp(OutPt op) + { + OutPt result = op.Prev; + result.Next = op.Next; + op.Next.Prev = result; + result.Idx = 0; + return result; + } + //------------------------------------------------------------------------------ + + public static Path CleanPolygon(Path path, double distance = 1.415) + { + //distance = proximity in units/pixels below which vertices will be stripped. + //Default ~= sqrt(2) so when adjacent vertices or semi-adjacent vertices have + //both x & y coords within 1 unit, then the second vertex will be stripped. + + int cnt = path.Count; + + if (cnt == 0) return new Path(); + + OutPt[] outPts = new OutPt[cnt]; + for (int i = 0; i < cnt; ++i) outPts[i] = new OutPt(); + + for (int i = 0; i < cnt; ++i) + { + outPts[i].Pt = path[i]; + outPts[i].Next = outPts[(i + 1) % cnt]; + outPts[i].Next.Prev = outPts[i]; + outPts[i].Idx = 0; + } + + double distSqrd = distance * distance; + OutPt op = outPts[0]; + while (op.Idx == 0 && op.Next != op.Prev) + { + if (PointsAreClose(op.Pt, op.Prev.Pt, distSqrd)) + { + op = ExcludeOp(op); + cnt--; + } + else if (PointsAreClose(op.Prev.Pt, op.Next.Pt, distSqrd)) + { + ExcludeOp(op.Next); + op = ExcludeOp(op); + cnt -= 2; + } + else if (SlopesNearCollinear(op.Prev.Pt, op.Pt, op.Next.Pt, distSqrd)) + { + op = ExcludeOp(op); + cnt--; + } + else + { + op.Idx = 1; + op = op.Next; + } + } + + if (cnt < 3) cnt = 0; + Path result = new Path(cnt); + for (int i = 0; i < cnt; ++i) + { + result.Add(op.Pt); + op = op.Next; + } + outPts = null; + return result; + } + //------------------------------------------------------------------------------ + + public static Paths CleanPolygons(Paths polys, + double distance = 1.415) + { + Paths result = new Paths(polys.Count); + for (int i = 0; i < polys.Count; i++) + result.Add(CleanPolygon(polys[i], distance)); + return result; + } + //------------------------------------------------------------------------------ + + internal static Paths Minkowski(Path pattern, Path path, bool IsSum, bool IsClosed) + { + int delta = (IsClosed ? 1 : 0); + int polyCnt = pattern.Count; + int pathCnt = path.Count; + Paths result = new Paths(pathCnt); + if (IsSum) + for (int i = 0; i < pathCnt; i++) + { + Path p = new Path(polyCnt); + foreach (IntPoint ip in pattern) + p.Add(new IntPoint(path[i].X + ip.X, path[i].Y + ip.Y)); + result.Add(p); + } + else + for (int i = 0; i < pathCnt; i++) + { + Path p = new Path(polyCnt); + foreach (IntPoint ip in pattern) + p.Add(new IntPoint(path[i].X - ip.X, path[i].Y - ip.Y)); + result.Add(p); + } + + Paths quads = new Paths((pathCnt + delta) * (polyCnt + 1)); + for (int i = 0; i < pathCnt - 1 + delta; i++) + for (int j = 0; j < polyCnt; j++) + { + Path quad = new Path(4); + quad.Add(result[i % pathCnt][j % polyCnt]); + quad.Add(result[(i + 1) % pathCnt][j % polyCnt]); + quad.Add(result[(i + 1) % pathCnt][(j + 1) % polyCnt]); + quad.Add(result[i % pathCnt][(j + 1) % polyCnt]); + if (!Orientation(quad)) quad.Reverse(); + quads.Add(quad); + } + return quads; + } + //------------------------------------------------------------------------------ + + public static Paths MinkowskiSum(Path pattern, Path path, bool pathIsClosed) + { + Paths paths = Minkowski(pattern, path, true, pathIsClosed); + Clipper c = new Clipper(); + c.AddPaths(paths, PolyType.ptSubject, true); + c.Execute(ClipType.ctUnion, paths, PolyFillType.pftNonZero, PolyFillType.pftNonZero); + return paths; + } + //------------------------------------------------------------------------------ + + private static Path TranslatePath(Path path, IntPoint delta) + { + Path outPath = new Path(path.Count); + for (int i = 0; i < path.Count; i++) + outPath.Add(new IntPoint(path[i].X + delta.X, path[i].Y + delta.Y)); + return outPath; + } + //------------------------------------------------------------------------------ + + public static Paths MinkowskiSum(Path pattern, Paths paths, bool pathIsClosed) + { + Paths solution = new Paths(); + Clipper c = new Clipper(); + for (int i = 0; i < paths.Count; ++i) + { + Paths tmp = Minkowski(pattern, paths[i], true, pathIsClosed); + c.AddPaths(tmp, PolyType.ptSubject, true); + if (pathIsClosed) + { + Path path = TranslatePath(paths[i], pattern[0]); + c.AddPath(path, PolyType.ptClip, true); + } + } + c.Execute(ClipType.ctUnion, solution, + PolyFillType.pftNonZero, PolyFillType.pftNonZero); + return solution; + } + //------------------------------------------------------------------------------ + + public static Paths MinkowskiDiff(Path poly1, Path poly2) + { + Paths paths = Minkowski(poly1, poly2, false, true); + Clipper c = new Clipper(); + c.AddPaths(paths, PolyType.ptSubject, true); + c.Execute(ClipType.ctUnion, paths, PolyFillType.pftNonZero, PolyFillType.pftNonZero); + return paths; + } + //------------------------------------------------------------------------------ + + internal enum NodeType { ntAny, ntOpen, ntClosed }; + + public static Paths PolyTreeToPaths(PolyTree polytree) + { + + Paths result = new Paths(); + result.Capacity = polytree.Total; + AddPolyNodeToPaths(polytree, NodeType.ntAny, result); + return result; + } + //------------------------------------------------------------------------------ + + internal static void AddPolyNodeToPaths(PolyNode polynode, NodeType nt, Paths paths) + { + bool match = true; + switch (nt) + { + case NodeType.ntOpen: return; + case NodeType.ntClosed: match = !polynode.IsOpen; break; + default: break; + } + + if (polynode.m_polygon.Count > 0 && match) + paths.Add(polynode.m_polygon); + foreach (PolyNode pn in polynode.Childs) + AddPolyNodeToPaths(pn, nt, paths); + } + //------------------------------------------------------------------------------ + + public static Paths OpenPathsFromPolyTree(PolyTree polytree) + { + Paths result = new Paths(); + result.Capacity = polytree.ChildCount; + for (int i = 0; i < polytree.ChildCount; i++) + if (polytree.Childs[i].IsOpen) + result.Add(polytree.Childs[i].m_polygon); + return result; + } + //------------------------------------------------------------------------------ + + public static Paths ClosedPathsFromPolyTree(PolyTree polytree) + { + Paths result = new Paths(); + result.Capacity = polytree.Total; + AddPolyNodeToPaths(polytree, NodeType.ntClosed, result); + return result; + } + //------------------------------------------------------------------------------ + + } //end Clipper + + public class ClipperOffset + { + private Paths m_destPolys; + private Path m_srcPoly; + private Path m_destPoly; + private List m_normals = new List(); + private double m_delta, m_sinA, m_sin, m_cos; + private double m_miterLim, m_StepsPerRad; + + private IntPoint m_lowest; + private PolyNode m_polyNodes = new PolyNode(); + + public double ArcTolerance { get; set; } + public double MiterLimit { get; set; } + + private const double two_pi = Math.PI * 2; + private const double def_arc_tolerance = 0.25; + + public ClipperOffset( + double miterLimit = 2.0, double arcTolerance = def_arc_tolerance) + { + MiterLimit = miterLimit; + ArcTolerance = arcTolerance; + m_lowest.X = -1; + } + //------------------------------------------------------------------------------ + + public void Clear() + { + m_polyNodes.Childs.Clear(); + m_lowest.X = -1; + } + //------------------------------------------------------------------------------ + + internal static cInt Round(double value) + { + return value < 0 ? (cInt)(value - 0.5) : (cInt)(value + 0.5); + } + //------------------------------------------------------------------------------ + + public void AddPath(Path path, JoinType joinType, EndType endType) + { + int highI = path.Count - 1; + if (highI < 0) return; + PolyNode newNode = new PolyNode(); + newNode.m_jointype = joinType; + newNode.m_endtype = endType; + + //strip duplicate points from path and also get index to the lowest point ... + if (endType == EndType.etClosedLine || endType == EndType.etClosedPolygon) + while (highI > 0 && path[0] == path[highI]) highI--; + newNode.m_polygon.Capacity = highI + 1; + newNode.m_polygon.Add(path[0]); + int j = 0, k = 0; + for (int i = 1; i <= highI; i++) + if (newNode.m_polygon[j] != path[i]) + { + j++; + newNode.m_polygon.Add(path[i]); + if (path[i].Y > newNode.m_polygon[k].Y || + (path[i].Y == newNode.m_polygon[k].Y && + path[i].X < newNode.m_polygon[k].X)) k = j; + } + if (endType == EndType.etClosedPolygon && j < 2) return; + + m_polyNodes.AddChild(newNode); + + //if this path's lowest pt is lower than all the others then update m_lowest + if (endType != EndType.etClosedPolygon) return; + if (m_lowest.X < 0) + m_lowest = new IntPoint(m_polyNodes.ChildCount - 1, k); + else + { + IntPoint ip = m_polyNodes.Childs[(int)m_lowest.X].m_polygon[(int)m_lowest.Y]; + if (newNode.m_polygon[k].Y > ip.Y || + (newNode.m_polygon[k].Y == ip.Y && + newNode.m_polygon[k].X < ip.X)) + m_lowest = new IntPoint(m_polyNodes.ChildCount - 1, k); + } + } + //------------------------------------------------------------------------------ + + public void AddPaths(Paths paths, JoinType joinType, EndType endType) + { + foreach (Path p in paths) + AddPath(p, joinType, endType); + } + //------------------------------------------------------------------------------ + + private void FixOrientations() + { + //fixup orientations of all closed paths if the orientation of the + //closed path with the lowermost vertex is wrong ... + if (m_lowest.X >= 0 && + !Clipper.Orientation(m_polyNodes.Childs[(int)m_lowest.X].m_polygon)) + { + for (int i = 0; i < m_polyNodes.ChildCount; i++) + { + PolyNode node = m_polyNodes.Childs[i]; + if (node.m_endtype == EndType.etClosedPolygon || + (node.m_endtype == EndType.etClosedLine && + Clipper.Orientation(node.m_polygon))) + node.m_polygon.Reverse(); + } + } + else + { + for (int i = 0; i < m_polyNodes.ChildCount; i++) + { + PolyNode node = m_polyNodes.Childs[i]; + if (node.m_endtype == EndType.etClosedLine && + !Clipper.Orientation(node.m_polygon)) + node.m_polygon.Reverse(); + } + } + } + //------------------------------------------------------------------------------ + + internal static DoublePoint GetUnitNormal(IntPoint pt1, IntPoint pt2) + { + double dx = (pt2.X - pt1.X); + double dy = (pt2.Y - pt1.Y); + if ((dx == 0) && (dy == 0)) return new DoublePoint(); + + double f = 1 * 1.0 / Math.Sqrt(dx * dx + dy * dy); + dx *= f; + dy *= f; + + return new DoublePoint(dy, -dx); + } + //------------------------------------------------------------------------------ + + private void DoOffset(double delta) + { + m_destPolys = new Paths(); + m_delta = delta; + + //if Zero offset, just copy any CLOSED polygons to m_p and return ... + if (ClipperBase.near_zero(delta)) + { + m_destPolys.Capacity = m_polyNodes.ChildCount; + for (int i = 0; i < m_polyNodes.ChildCount; i++) + { + PolyNode node = m_polyNodes.Childs[i]; + if (node.m_endtype == EndType.etClosedPolygon) + m_destPolys.Add(node.m_polygon); + } + return; + } + + //see offset_triginometry3.svg in the documentation folder ... + if (MiterLimit > 2) m_miterLim = 2 / (MiterLimit * MiterLimit); + else m_miterLim = 0.5; + + double y; + if (ArcTolerance <= 0.0) + y = def_arc_tolerance; + else if (ArcTolerance > Math.Abs(delta) * def_arc_tolerance) + y = Math.Abs(delta) * def_arc_tolerance; + else + y = ArcTolerance; + //see offset_triginometry2.svg in the documentation folder ... + double steps = Math.PI / Math.Acos(1 - y / Math.Abs(delta)); + m_sin = Math.Sin(two_pi / steps); + m_cos = Math.Cos(two_pi / steps); + m_StepsPerRad = steps / two_pi; + if (delta < 0.0) m_sin = -m_sin; + + m_destPolys.Capacity = m_polyNodes.ChildCount * 2; + for (int i = 0; i < m_polyNodes.ChildCount; i++) + { + PolyNode node = m_polyNodes.Childs[i]; + m_srcPoly = node.m_polygon; + + int len = m_srcPoly.Count; + + if (len == 0 || (delta <= 0 && (len < 3 || + node.m_endtype != EndType.etClosedPolygon))) + continue; + + m_destPoly = new Path(); + + if (len == 1) + { + if (node.m_jointype == JoinType.jtRound) + { + double X = 1.0, Y = 0.0; + for (int j = 1; j <= steps; j++) + { + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[0].X + X * delta), + Round(m_srcPoly[0].Y + Y * delta))); + double X2 = X; + X = X * m_cos - m_sin * Y; + Y = X2 * m_sin + Y * m_cos; + } + } + else + { + double X = -1.0, Y = -1.0; + for (int j = 0; j < 4; ++j) + { + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[0].X + X * delta), + Round(m_srcPoly[0].Y + Y * delta))); + if (X < 0) X = 1; + else if (Y < 0) Y = 1; + else X = -1; + } + } + m_destPolys.Add(m_destPoly); + continue; + } + + //build m_normals ... + m_normals.Clear(); + m_normals.Capacity = len; + for (int j = 0; j < len - 1; j++) + m_normals.Add(GetUnitNormal(m_srcPoly[j], m_srcPoly[j + 1])); + if (node.m_endtype == EndType.etClosedLine || + node.m_endtype == EndType.etClosedPolygon) + m_normals.Add(GetUnitNormal(m_srcPoly[len - 1], m_srcPoly[0])); + else + m_normals.Add(new DoublePoint(m_normals[len - 2])); + + if (node.m_endtype == EndType.etClosedPolygon) + { + int k = len - 1; + for (int j = 0; j < len; j++) + OffsetPoint(j, ref k, node.m_jointype); + m_destPolys.Add(m_destPoly); + } + else if (node.m_endtype == EndType.etClosedLine) + { + int k = len - 1; + for (int j = 0; j < len; j++) + OffsetPoint(j, ref k, node.m_jointype); + m_destPolys.Add(m_destPoly); + m_destPoly = new Path(); + //re-build m_normals ... + DoublePoint n = m_normals[len - 1]; + for (int j = len - 1; j > 0; j--) + m_normals[j] = new DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y); + m_normals[0] = new DoublePoint(-n.X, -n.Y); + k = 0; + for (int j = len - 1; j >= 0; j--) + OffsetPoint(j, ref k, node.m_jointype); + m_destPolys.Add(m_destPoly); + } + else + { + int k = 0; + for (int j = 1; j < len - 1; ++j) + OffsetPoint(j, ref k, node.m_jointype); + + IntPoint pt1; + if (node.m_endtype == EndType.etOpenButt) + { + int j = len - 1; + pt1 = new IntPoint((cInt)Round(m_srcPoly[j].X + m_normals[j].X * + delta), (cInt)Round(m_srcPoly[j].Y + m_normals[j].Y * delta)); + m_destPoly.Add(pt1); + pt1 = new IntPoint((cInt)Round(m_srcPoly[j].X - m_normals[j].X * + delta), (cInt)Round(m_srcPoly[j].Y - m_normals[j].Y * delta)); + m_destPoly.Add(pt1); + } + else + { + int j = len - 1; + k = len - 2; + m_sinA = 0; + m_normals[j] = new DoublePoint(-m_normals[j].X, -m_normals[j].Y); + if (node.m_endtype == EndType.etOpenSquare) + DoSquare(j, k); + else + DoRound(j, k); + } + + //re-build m_normals ... + for (int j = len - 1; j > 0; j--) + m_normals[j] = new DoublePoint(-m_normals[j - 1].X, -m_normals[j - 1].Y); + + m_normals[0] = new DoublePoint(-m_normals[1].X, -m_normals[1].Y); + + k = len - 1; + for (int j = k - 1; j > 0; --j) + OffsetPoint(j, ref k, node.m_jointype); + + if (node.m_endtype == EndType.etOpenButt) + { + pt1 = new IntPoint((cInt)Round(m_srcPoly[0].X - m_normals[0].X * delta), + (cInt)Round(m_srcPoly[0].Y - m_normals[0].Y * delta)); + m_destPoly.Add(pt1); + pt1 = new IntPoint((cInt)Round(m_srcPoly[0].X + m_normals[0].X * delta), + (cInt)Round(m_srcPoly[0].Y + m_normals[0].Y * delta)); + m_destPoly.Add(pt1); + } + else + { + k = 1; + m_sinA = 0; + if (node.m_endtype == EndType.etOpenSquare) + DoSquare(0, 1); + else + DoRound(0, 1); + } + m_destPolys.Add(m_destPoly); + } + } + } + //------------------------------------------------------------------------------ + + public void Execute(ref Paths solution, double delta) + { + solution.Clear(); + FixOrientations(); + DoOffset(delta); + //now clean up 'corners' ... + Clipper clpr = new Clipper(); + clpr.AddPaths(m_destPolys, PolyType.ptSubject, true); + if (delta > 0) + { + clpr.Execute(ClipType.ctUnion, solution, + PolyFillType.pftPositive, PolyFillType.pftPositive); + } + else + { + IntRect r = Clipper.GetBounds(m_destPolys); + Path outer = new Path(4); + + outer.Add(new IntPoint(r.left - 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.top - 10)); + outer.Add(new IntPoint(r.left - 10, r.top - 10)); + + clpr.AddPath(outer, PolyType.ptSubject, true); + clpr.ReverseSolution = true; + clpr.Execute(ClipType.ctUnion, solution, PolyFillType.pftNegative, PolyFillType.pftNegative); + if (solution.Count > 0) solution.RemoveAt(0); + } + } + //------------------------------------------------------------------------------ + + public void Execute(ref PolyTree solution, double delta) + { + solution.Clear(); + FixOrientations(); + DoOffset(delta); + + //now clean up 'corners' ... + Clipper clpr = new Clipper(); + clpr.AddPaths(m_destPolys, PolyType.ptSubject, true); + if (delta > 0) + { + clpr.Execute(ClipType.ctUnion, solution, + PolyFillType.pftPositive, PolyFillType.pftPositive); + } + else + { + IntRect r = Clipper.GetBounds(m_destPolys); + Path outer = new Path(4); + + outer.Add(new IntPoint(r.left - 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.bottom + 10)); + outer.Add(new IntPoint(r.right + 10, r.top - 10)); + outer.Add(new IntPoint(r.left - 10, r.top - 10)); + + clpr.AddPath(outer, PolyType.ptSubject, true); + clpr.ReverseSolution = true; + clpr.Execute(ClipType.ctUnion, solution, PolyFillType.pftNegative, PolyFillType.pftNegative); + //remove the outer PolyNode rectangle ... + if (solution.ChildCount == 1 && solution.Childs[0].ChildCount > 0) + { + PolyNode outerNode = solution.Childs[0]; + solution.Childs.Capacity = outerNode.ChildCount; + solution.Childs[0] = outerNode.Childs[0]; + solution.Childs[0].m_Parent = solution; + for (int i = 1; i < outerNode.ChildCount; i++) + solution.AddChild(outerNode.Childs[i]); + } + else + solution.Clear(); + } + } + //------------------------------------------------------------------------------ + + void OffsetPoint(int j, ref int k, JoinType jointype) + { + //cross product ... + m_sinA = (m_normals[k].X * m_normals[j].Y - m_normals[j].X * m_normals[k].Y); + + if (Math.Abs(m_sinA * m_delta) < 1.0) + { + //dot product ... + double cosA = (m_normals[k].X * m_normals[j].X + m_normals[j].Y * m_normals[k].Y); + if (cosA > 0) // angle ==> 0 degrees + { + m_destPoly.Add(new IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta), + Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta))); + return; + } + //else angle ==> 180 degrees + } + else if (m_sinA > 1.0) m_sinA = 1.0; + else if (m_sinA < -1.0) m_sinA = -1.0; + + if (m_sinA * m_delta < 0) + { + m_destPoly.Add(new IntPoint(Round(m_srcPoly[j].X + m_normals[k].X * m_delta), + Round(m_srcPoly[j].Y + m_normals[k].Y * m_delta))); + m_destPoly.Add(m_srcPoly[j]); + m_destPoly.Add(new IntPoint(Round(m_srcPoly[j].X + m_normals[j].X * m_delta), + Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta))); + } + else + switch (jointype) + { + case JoinType.jtMiter: + { + double r = 1 + (m_normals[j].X * m_normals[k].X + + m_normals[j].Y * m_normals[k].Y); + if (r >= m_miterLim) DoMiter(j, k, r); else DoSquare(j, k); + break; + } + case JoinType.jtSquare: DoSquare(j, k); break; + case JoinType.jtRound: DoRound(j, k); break; + } + k = j; + } + //------------------------------------------------------------------------------ + + internal void DoSquare(int j, int k) + { + double dx = Math.Tan(Math.Atan2(m_sinA, + m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y) / 4); + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[j].X + m_delta * (m_normals[k].X - m_normals[k].Y * dx)), + Round(m_srcPoly[j].Y + m_delta * (m_normals[k].Y + m_normals[k].X * dx)))); + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[j].X + m_delta * (m_normals[j].X + m_normals[j].Y * dx)), + Round(m_srcPoly[j].Y + m_delta * (m_normals[j].Y - m_normals[j].X * dx)))); + } + //------------------------------------------------------------------------------ + + internal void DoMiter(int j, int k, double r) + { + double q = m_delta / r; + m_destPoly.Add(new IntPoint(Round(m_srcPoly[j].X + (m_normals[k].X + m_normals[j].X) * q), + Round(m_srcPoly[j].Y + (m_normals[k].Y + m_normals[j].Y) * q))); + } + //------------------------------------------------------------------------------ + + internal void DoRound(int j, int k) + { + double a = Math.Atan2(m_sinA, + m_normals[k].X * m_normals[j].X + m_normals[k].Y * m_normals[j].Y); + int steps = Math.Max((int)Round(m_StepsPerRad * Math.Abs(a)), 1); + + double X = m_normals[k].X, Y = m_normals[k].Y, X2; + for (int i = 0; i < steps; ++i) + { + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[j].X + X * m_delta), + Round(m_srcPoly[j].Y + Y * m_delta))); + X2 = X; + X = X * m_cos - m_sin * Y; + Y = X2 * m_sin + Y * m_cos; + } + m_destPoly.Add(new IntPoint( + Round(m_srcPoly[j].X + m_normals[j].X * m_delta), + Round(m_srcPoly[j].Y + m_normals[j].Y * m_delta))); + } + //------------------------------------------------------------------------------ + } + + class ClipperException : Exception + { + public ClipperException(string description) : base(description) { } + } + //------------------------------------------------------------------------------ + +} //end ClipperLib namespace diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/clipper.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/clipper.cs.meta new file mode 100644 index 0000000..27fe38e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/BoostClipper/clipper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e13902fa43e71754f9e04b2f44d5f71b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping.meta new file mode 100644 index 0000000..08d72a8 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be8365f59449a0a4aa11aa4ad834006f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Contour.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Contour.cs new file mode 100644 index 0000000..8ff7a43 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Contour.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class Contour : IEnumerable + { + public int VertexCount { get { return verts.Count; } } + public bool IsEmpty { get { return verts.Count == 0; } } + public bool IsClosed { get; private set; } + public List Verts => verts; + + private List verts; + + public Contour(List verticies, bool isClosed = true) + { + this.verts = verticies; + IsClosed = isClosed; + } + + public Contour(IEnumerable verticies, bool isClosed = true) + { + this.verts = new List(verticies); + IsClosed = isClosed; + } + + public Vector2 this[int key] + { + get { return verts[key]; } + } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable)verts).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)verts).GetEnumerator(); + } + + public double SignedArea() + { + double area = 0; + for (int i = 0, j = verts.Count - 1; i < verts.Count; j = i, i++) + area += (verts[i].x - verts[j].x) * + (verts[i].y + verts[j].y); + return area / 2.0; + } + + public double Area() + { + return Math.Abs(SignedArea()); + } + + public void MakeCW() + { + if (!IsCW()) + verts.Reverse(); + } + + public void Invert() + { + verts.Reverse(); + } + + public bool IsCW() + { + Vector2 lowestPoint = verts[0]; + int lowestPointIndex = 0; + for (int i = 1; i < VertexCount; i++) + { + if (lowestPoint.y > verts[i].y || + lowestPoint.y == verts[i].y && lowestPoint.x < verts[i].x) + { + lowestPoint = verts[i]; + lowestPointIndex = i; + } + } + + Vector2 prevPoint = lowestPointIndex == 0 ? verts[VertexCount - 1] : verts[lowestPointIndex - 1]; + Vector2 nextPoint = lowestPointIndex == VertexCount - 1 ? verts[0] : verts[lowestPointIndex + 1]; + + return ((lowestPoint.x - prevPoint.x) * (nextPoint.y - prevPoint.y) - (nextPoint.x - prevPoint.x) * (lowestPoint.y - prevPoint.y)) < 0; + } + + public bool PointInContour(Vector2 point) + { + bool c = false; + for (int i = 0, j = VertexCount - 1; i < VertexCount; j = i++) + { + if (((verts[i].y > point.y) != (verts[j].y > point.y)) && + (point.x < (verts[j].x - verts[i].x) * (point.y - verts[i].y) / (verts[j].y - verts[i].y) + verts[i].x)) + c = !c; + } + return c; + } + + public bool Contains(Contour other) + { + foreach (var v in other) + if (!PointInContour(v)) + return false; + return true; + } + + public void Draw() + { + for (int i = IsClosed ? 0 : 1, j = IsClosed ? VertexCount - 1 : 0; i < VertexCount; j = i, i++) + { + DebugDrawingExtensions.DrawArrow(verts[i], verts[j]); + } + } + + public void Simplify(float tolerance) + { + ExtendedGeometry.MergeCloseVerts(verts, tolerance); + this.verts = ExtendedGeometry.SimplifyContour(this.verts, tolerance); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Contour.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Contour.cs.meta new file mode 100644 index 0000000..543c78c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Contour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dad3920a5830b8e438bc7c5d3c92636d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/IClipper.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/IClipper.cs new file mode 100644 index 0000000..3e00883 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/IClipper.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PathBerserker2d +{ + public enum ResultType { NoOverlap, Clipped }; + public enum BoolOpType { INTERSECTION, UNION, DIFFERENCE }; + + interface IClipper + { + ResultType Compute(Polygon sp, Polygon cp, BoolOpType op, out List result, bool includeOpenPolygons = false); + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/IClipper.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/IClipper.cs.meta new file mode 100644 index 0000000..4e71a75 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/IClipper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6f0c0aa6263ff54ca7f6be8694b9fa7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Polygon.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Polygon.cs new file mode 100644 index 0000000..b869387 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Polygon.cs @@ -0,0 +1,162 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class Polygon : System.IEquatable, IEnumerable + { + public Contour Hull => hull; + public List Holes { get; set; } + public bool IsEmpty => hull.IsEmpty; + public float XMax => boundingRect.xMax; + public Rect BoundingRect => boundingRect; + + private Contour hull; + private Rect boundingRect; + + public Polygon(Contour hull, List holes) + { + this.hull = hull; + this.Holes = holes; + + UpdateBounds(); + } + + public Polygon(Contour hull) + { + this.hull = hull; + this.Holes = new List(0); + + UpdateBounds(); + } + + public Polygon() + { + this.hull = new Contour(new Vector2[0]); + this.Holes = new List(0); + } + + public bool Equals(Polygon other) + { + return other == this; + } + + public void AddAsChild(Polygon other) + { + this.Holes.Add(other.hull); + this.Holes.AddRange(other.Holes); + } + + public int TotalVertCount() + { + int result = hull.VertexCount; + foreach (var path in Holes) + { + result += path.VertexCount; + } + return result; + } + + public bool BoundsOverlap(Polygon other) + { + return boundingRect.Overlaps(other.boundingRect); + } + + public bool PointInPolyon(Vector2 point) + { + return boundingRect.Contains(point) && hull.PointInContour(point); + } + + public bool Contains(Polygon other) + { + foreach (var v in other.hull) + { + if (!PointInPolyon(v)) + return false; + } + return true; + } + + public bool Contains(Contour other) + { + foreach (var v in other) + { + if (!PointInPolyon(v)) + return false; + } + return true; + } + + public void Draw() + { + Gizmos.color = Color.green; + hull.Draw(); + + Gizmos.color = Color.yellow; + foreach (var contour in this.Holes) + { + contour.Draw(); + } + } + + public IEnumerator GetEnumerator() + { + yield return hull; + foreach (var hole in Holes) + yield return hole; + } + + IEnumerator IEnumerable.GetEnumerator() + { + yield return hull; + foreach (var hole in Holes) + yield return hole; + } + + public void UpdateBounds() + { + if (hull.VertexCount == 0) + return; + + Vector2 min = hull[0]; + Vector2 max = hull[0]; + for (int iVert = 1; iVert < hull.VertexCount; iVert++) + { + min = Vector2.Min(hull[iVert], min); + max = Vector2.Max(hull[iVert], max); + } + // add some fudge + Vector2 fudge = new Vector2(0.0001f, 0.0001f); + boundingRect = new Rect(min - fudge, max - min + fudge * 2); + } + + public void Simplify(float tolerance) + { + hull.Simplify(tolerance); + foreach (var hole in Holes) + { + hole.Simplify(tolerance); + } + UpdateBounds(); + } + + public double SignedArea() + { + double area = Hull.SignedArea(); + foreach (var hole in Holes) + area += hole.SignedArea(); + return area; + } + + public void EnsureCWOrdering() + { + if (Hull.IsCW()) + return; + + Hull.Invert(); + foreach (var child in Holes) + child.Invert(); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Polygon.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Polygon.cs.meta new file mode 100644 index 0000000..e69cee8 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Clipping/Polygon.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24eb0a7c0c44eff48b61ea1d3120dd18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes.meta new file mode 100644 index 0000000..221d48c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 81309357b39e41942b7819480b292f4a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ReadOnlyAttribute.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ReadOnlyAttribute.cs new file mode 100644 index 0000000..376e8f1 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ReadOnlyAttribute.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + internal class ReadOnlyAttribute : PropertyAttribute + { + + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ReadOnlyAttribute.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ReadOnlyAttribute.cs.meta new file mode 100644 index 0000000..731eff7 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ReadOnlyAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 334716afcf3386f4b8200ed669e80282 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ScriptExecutionOrderAttribute.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ScriptExecutionOrderAttribute.cs new file mode 100644 index 0000000..1b9dc4d --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ScriptExecutionOrderAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace PathBerserker2d +{ + [AttributeUsage(AttributeTargets.Class)] + internal class ScriptExecutionOrderAttribute : Attribute + { + private int order = 0; + + public ScriptExecutionOrderAttribute(int order) + { + this.order = order; + } + + public int GetOrder() + { + return order; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ScriptExecutionOrderAttribute.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ScriptExecutionOrderAttribute.cs.meta new file mode 100644 index 0000000..cc2d8a2 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/CustomAttributes/ScriptExecutionOrderAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 036645a6650ecf0478b961d469c7e935 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue.meta new file mode 100644 index 0000000..005f604 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68e576ad0cfa64743a23dd8e8db94b39 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/ExternalSortingFastPriorityQueueNode.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/ExternalSortingFastPriorityQueueNode.cs new file mode 100644 index 0000000..e62639e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/ExternalSortingFastPriorityQueueNode.cs @@ -0,0 +1,12 @@ +namespace Priority_Queue +{ + internal abstract class ExternalSortingFastPriorityQueueNode : System.IComparable + { + /// + /// Represents the current position in the queue + /// + public int QueueIndex { get; internal set; } + + public abstract int CompareTo(ExternalSortingFastPriorityQueueNode other); + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/ExternalSortingFastPriorityQueueNode.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/ExternalSortingFastPriorityQueueNode.cs.meta new file mode 100644 index 0000000..5614d3b --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/ExternalSortingFastPriorityQueueNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79ff18f1f5314034a980f4c7a9a66d56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueue.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueue.cs new file mode 100644 index 0000000..e0b26c3 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueue.cs @@ -0,0 +1,418 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace Priority_Queue +{ + /// + /// An implementation of a min-Priority Queue using a heap. Has O(1) .Contains()! + /// See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information + /// + /// The values in the queue. Must extend the FastPriorityQueueNode class + internal sealed class FastPriorityQueue : IFixedSizePriorityQueue + where T : FastPriorityQueueNode + { + private int _numNodes; + private T[] _nodes; + + /// + /// Instantiate a new Priority Queue + /// + /// The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) + public FastPriorityQueue(int maxNodes) + { +#if PBDEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("New queue size cannot be smaller than 1"); + } +#endif + + _numNodes = 0; + _nodes = new T[maxNodes + 1]; + } + + /// + /// Returns the number of nodes in the queue. + /// O(1) + /// + public int Count + { + get + { + return _numNodes; + } + } + + /// + /// Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), + /// attempting to enqueue another item will cause undefined behavior. O(1) + /// + public int MaxSize + { + get + { + return _nodes.Length - 1; + } + } + + /// + /// Removes every node from the queue. + /// O(n) (So, don't do this often!) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Clear() + { + Array.Clear(_nodes, 1, _numNodes); + _numNodes = 0; + } + + /// + /// Returns (in O(1)!) whether the given node is in the queue. O(1) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool Contains(T node) + { +#if PBDEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (node.QueueIndex < 0 || node.QueueIndex >= _nodes.Length) + { + throw new InvalidOperationException("node.QueueIndex has been corrupted. Did you change it manually? Or add this node to another queue?"); + } +#endif + + return (_nodes[node.QueueIndex] == node); + } + + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// If the queue is full, the result is undefined. + /// If the node is already enqueued, the result is undefined. + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Enqueue(T node, float priority) + { +#if PBDEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (_numNodes >= _nodes.Length - 1) + { + throw new InvalidOperationException("Queue is full - node cannot be added: " + node); + } + if (Contains(node)) + { + throw new InvalidOperationException("Node is already enqueued: " + node); + } +#endif + + node.Priority = priority; + _numNodes++; + _nodes[_numNodes] = node; + node.QueueIndex = _numNodes; + CascadeUp(_nodes[_numNodes]); + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void Swap(T node1, T node2) + { + //Swap the nodes + _nodes[node1.QueueIndex] = node2; + _nodes[node2.QueueIndex] = node1; + + //Swap their indicies + int temp = node1.QueueIndex; + node1.QueueIndex = node2.QueueIndex; + node2.QueueIndex = temp; + } + + //Performance appears to be slightly better when this is NOT inlined o_O + private void CascadeUp(T node) + { + //aka Heapify-up + int parent = node.QueueIndex / 2; + while (parent >= 1) + { + T parentNode = _nodes[parent]; + if (HasHigherPriority(parentNode, node)) + break; + + //Node has lower priority value, so move it up the heap + Swap(node, parentNode); //For some reason, this is faster with Swap() rather than (less..?) individual operations, like in CascadeDown() + + parent = node.QueueIndex / 2; + } + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void CascadeDown(T node) + { + //aka Heapify-down + T newParent; + int finalQueueIndex = node.QueueIndex; + while (true) + { + newParent = node; + int childLeftIndex = 2 * finalQueueIndex; + + //Check if the left-child is higher-priority than the current node + if (childLeftIndex > _numNodes) + { + //This could be placed outside the loop, but then we'd have to check newParent != node twice + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + + T childLeft = _nodes[childLeftIndex]; + if (HasHigherPriority(childLeft, newParent)) + { + newParent = childLeft; + } + + //Check if the right-child is higher-priority than either the current node or the left child + int childRightIndex = childLeftIndex + 1; + if (childRightIndex <= _numNodes) + { + T childRight = _nodes[childRightIndex]; + if (HasHigherPriority(childRight, newParent)) + { + newParent = childRight; + } + } + + //If either of the children has higher (smaller) priority, swap and continue cascading + if (newParent != node) + { + //Move new parent to its new index. node will be moved once, at the end + //Doing it this way is one less assignment operation than calling Swap() + _nodes[finalQueueIndex] = newParent; + + int temp = newParent.QueueIndex; + newParent.QueueIndex = finalQueueIndex; + finalQueueIndex = temp; + } + else + { + //See note above + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + } + } + + /// + /// Returns true if 'higher' has higher priority than 'lower', false otherwise. + /// Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private bool HasHigherPriority(T higher, T lower) + { + return (higher.Priority < lower.Priority); + } + + /// + /// Removes the head of the queue and returns it. + /// If queue is empty, result is undefined + /// O(log n) + /// + public T Dequeue() + { +#if PBDEBUG + if (_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + } + + if (!IsValidQueue()) + { + throw new InvalidOperationException("Queue has been corrupted (Did you update a node priority manually instead of calling UpdatePriority()?" + + "Or add the same node to two different queues?)"); + } +#endif + + T returnMe = _nodes[1]; + Remove(returnMe); + return returnMe; + } + + /// + /// Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + /// Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior + /// O(n) + /// + public void Resize(int maxNodes) + { +#if PBDEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("Queue size cannot be smaller than 1"); + } + + if (maxNodes < _numNodes) + { + throw new InvalidOperationException("Called Resize(" + maxNodes + "), but current queue contains " + _numNodes + " nodes"); + } +#endif + + T[] newArray = new T[maxNodes + 1]; + int highestIndexToCopy = Math.Min(maxNodes, _numNodes); + for (int i = 1; i <= highestIndexToCopy; i++) + { + newArray[i] = _nodes[i]; + } + _nodes = newArray; + } + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// If the queue is empty, behavior is undefined. + /// O(1) + /// + public T First + { + get + { +#if PBDEBUG + if (_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call .First on an empty queue"); + } +#endif + + return _nodes[1]; + } + } + + /// + /// This method must be called on a node every time its priority changes while it is in the queue. + /// Forgetting to call this method will result in a corrupted queue! + /// Calling this method on a node not in the queue results in undefined behavior + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void UpdatePriority(T node, float priority) + { +#if PBDEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call UpdatePriority() on a node which is not enqueued: " + node); + } +#endif + + node.Priority = priority; + OnNodeUpdated(node); + } + + private void OnNodeUpdated(T node) + { + //Bubble the updated node up or down as appropriate + int parentIndex = node.QueueIndex / 2; + T parentNode = _nodes[parentIndex]; + + if (parentIndex > 0 && HasHigherPriority(node, parentNode)) + { + CascadeUp(node); + } + else + { + //Note that CascadeDown will be called if parentNode == node (that is, node is the root) + CascadeDown(node); + } + } + + /// + /// Removes a node from the queue. The node does not need to be the head of the queue. + /// If the node is not in the queue, the result is undefined. If unsure, check Contains() first + /// O(log n) + /// + public void Remove(T node) + { +#if PBDEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + node); + } +#endif + + //If the node is already the last node, we can remove it immediately + if (node.QueueIndex == _numNodes) + { + _nodes[_numNodes] = null; + _numNodes--; + return; + } + + //Swap the node with the last node + T formerLastNode = _nodes[_numNodes]; + Swap(node, formerLastNode); + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) up or down as appropriate + OnNodeUpdated(formerLastNode); + } + + public IEnumerator GetEnumerator() + { + for (int i = 1; i <= _numNodes; i++) + yield return _nodes[i]; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Should not be called in production code. + /// Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + /// + public bool IsValidQueue() + { + for (int i = 1; i < _nodes.Length; i++) + { + if (_nodes[i] != null) + { + int childLeftIndex = 2 * i; + if (childLeftIndex < _nodes.Length && _nodes[childLeftIndex] != null && HasHigherPriority(_nodes[childLeftIndex], _nodes[i])) + return false; + + int childRightIndex = childLeftIndex + 1; + if (childRightIndex < _nodes.Length && _nodes[childRightIndex] != null && HasHigherPriority(_nodes[childRightIndex], _nodes[i])) + return false; + } + } + return true; + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueue.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueue.cs.meta new file mode 100644 index 0000000..fc93627 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueue.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 376b08cc68eb144468648ebcd4a478e6 +timeCreated: 1476131089 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueueNode.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueueNode.cs new file mode 100644 index 0000000..802e1ae --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueueNode.cs @@ -0,0 +1,16 @@ +namespace Priority_Queue +{ + internal class FastPriorityQueueNode + { + /// + /// The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, in the node's constructor). + /// Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead + /// + public float Priority { get; protected internal set; } + + /// + /// Represents the current position in the queue + /// + public int QueueIndex { get; internal set; } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueueNode.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueueNode.cs.meta new file mode 100644 index 0000000..62bef8e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/FastPriorityQueueNode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4bb5e6cfc638aca43a63a7304f2fe754 +timeCreated: 1476131089 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IFixedSizePriorityQueue.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IFixedSizePriorityQueue.cs new file mode 100644 index 0000000..6d1529e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IFixedSizePriorityQueue.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Priority_Queue +{ + /// + /// A helper-interface only needed to make writing unit tests a bit easier (hence the 'internal' access modifier) + /// + internal interface IFixedSizePriorityQueue : IPriorityQueue + { + /// + /// Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + /// Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior + /// + void Resize(int maxNodes); + + /// + /// Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), + /// attempting to enqueue another item will cause undefined behavior. + /// + int MaxSize { get; } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IFixedSizePriorityQueue.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IFixedSizePriorityQueue.cs.meta new file mode 100644 index 0000000..8f8e6dc --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IFixedSizePriorityQueue.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d9cacd2c305e5a94dbfeba14e25a0441 +timeCreated: 1476131089 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IPriorityQueue.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IPriorityQueue.cs new file mode 100644 index 0000000..125a2d9 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IPriorityQueue.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; + +namespace Priority_Queue +{ + /// + /// The IPriorityQueue interface. This is mainly here for purists, and in case I decide to add more implementations later. + /// For speed purposes, it is actually recommended that you *don't* access the priority queue through this interface, since the JIT can + /// (theoretically?) optimize method calls from concrete-types slightly better. + /// + internal interface IPriorityQueue : IEnumerable + { + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// See implementation for how duplicates are handled. + /// + void Enqueue(T node, float priority); + + /// + /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. + /// + T Dequeue(); + + /// + /// Removes every node from the queue. + /// + void Clear(); + + /// + /// Returns whether the given node is in the queue. + /// + bool Contains(T node); + + /// + /// Removes a node from the queue. The node does not need to be the head of the queue. + /// + void Remove(T node); + + /// + /// Call this method to change the priority of a node. + /// + void UpdatePriority(T node, float priority); + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// + T First { get; } + + /// + /// Returns the number of nodes in the queue. + /// + int Count { get; } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IPriorityQueue.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IPriorityQueue.cs.meta new file mode 100644 index 0000000..a522987 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/IPriorityQueue.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 722bac7805cf3b74590b5eecfe9ff7f0 +timeCreated: 1476131089 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SimplePriorityQueue.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SimplePriorityQueue.cs new file mode 100644 index 0000000..fd0d00d --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SimplePriorityQueue.cs @@ -0,0 +1,229 @@ +using System; +using System.Collections; +using System.Collections.Generic; + +namespace Priority_Queue +{ + /// + /// A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of being slightly slower than + /// FastPriorityQueue + /// + /// The type to enqueue + internal sealed class SimplePriorityQueue : IPriorityQueue + { + private class SimpleNode : StablePriorityQueueNode + { + public T Data { get; private set; } + + public SimpleNode(T data) + { + Data = data; + } + } + + private const int INITIAL_QUEUE_SIZE = 10; + private readonly StablePriorityQueue _queue; + + public SimplePriorityQueue() + { + _queue = new StablePriorityQueue(INITIAL_QUEUE_SIZE); + } + + /// + /// Given an item of type T, returns the exist SimpleNode in the queue + /// + private SimpleNode GetExistingNode(T item) + { + var comparer = EqualityComparer.Default; + foreach (var node in _queue) + { + if (comparer.Equals(node.Data, item)) + { + return node; + } + } + throw new InvalidOperationException("Item cannot be found in queue: " + item); + } + + /// + /// Returns the number of nodes in the queue. + /// O(1) + /// + public int Count + { + get + { + lock (_queue) + { + return _queue.Count; + } + } + } + + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// Throws an exception when the queue is empty. + /// O(1) + /// + public T First + { + get + { + lock (_queue) + { + if (_queue.Count <= 0) + { + throw new InvalidOperationException("Cannot call .First on an empty queue"); + } + + SimpleNode first = _queue.First; + return (first != null ? first.Data : default(T)); + } + } + } + + /// + /// Removes every node from the queue. + /// O(n) + /// + public void Clear() + { + lock (_queue) + { + _queue.Clear(); + } + } + + /// + /// Returns whether the given item is in the queue. + /// O(n) + /// + public bool Contains(T item) + { + lock (_queue) + { + var comparer = EqualityComparer.Default; + foreach (var node in _queue) + { + if (comparer.Equals(node.Data, item)) + { + return true; + } + } + return false; + } + } + + /// + /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. + /// If queue is empty, throws an exception + /// O(log n) + /// + public T Dequeue() + { + lock (_queue) + { + if (_queue.Count <= 0) + { + throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + } + + SimpleNode node = _queue.Dequeue(); + return node.Data; + } + } + + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// This queue automatically resizes itself, so there's no concern of the queue becoming 'full'. + /// Duplicates are allowed. + /// O(log n) + /// + public void Enqueue(T item, float priority) + { + lock (_queue) + { + SimpleNode node = new SimpleNode(item); + if (_queue.Count == _queue.MaxSize) + { + _queue.Resize(_queue.MaxSize * 2 + 1); + } + _queue.Enqueue(node, priority); + } + } + + /// + /// Removes an item from the queue. The item does not need to be the head of the queue. + /// If the item is not in the queue, an exception is thrown. If unsure, check Contains() first. + /// If multiple copies of the item are enqueued, only the first one is removed. + /// O(n) + /// + public void Remove(T item) + { + lock (_queue) + { + try + { + _queue.Remove(GetExistingNode(item)); + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + item, ex); + } + } + } + + /// + /// Call this method to change the priority of an item. + /// Calling this method on a item not in the queue will throw an exception. + /// If the item is enqueued multiple times, only the first one will be updated. + /// (If your requirements are complex enough that you need to enqueue the same item multiple times and be able + /// to update all of them, please wrap your items in a wrapper class so they can be distinguished). + /// O(n) + /// + public void UpdatePriority(T item, float priority) + { + lock (_queue) + { + try + { + SimpleNode updateMe = GetExistingNode(item); + _queue.UpdatePriority(updateMe, priority); + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException("Cannot call UpdatePriority() on a node which is not enqueued: " + item, ex); + } + } + } + + public IEnumerator GetEnumerator() + { + List queueData = new List(); + lock (_queue) + { + //Copy to a separate list because we don't want to 'yield return' inside a lock + foreach (var node in _queue) + { + queueData.Add(node.Data); + } + } + + return queueData.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public bool IsValidQueue() + { + lock (_queue) + { + return _queue.IsValidQueue(); + } + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SimplePriorityQueue.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SimplePriorityQueue.cs.meta new file mode 100644 index 0000000..6095328 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SimplePriorityQueue.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1daaf3be153500e4d80b80fe17ccc211 +timeCreated: 1476131088 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueue.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueue.cs new file mode 100644 index 0000000..1221897 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueue.cs @@ -0,0 +1,423 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; + +namespace Priority_Queue +{ + /// + /// A copy of FastPriorityQueue which is also stable - that is, when two nodes are enqueued with the same priority, they + /// are always dequeued in the same order. + /// See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information + /// + /// The values in the queue. Must extend the StablePriorityQueueNode class + internal sealed class StablePriorityQueue : IFixedSizePriorityQueue + where T : StablePriorityQueueNode + { + private int _numNodes; + private T[] _nodes; + private long _numNodesEverEnqueued; + + /// + /// Instantiate a new Priority Queue + /// + /// The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) + public StablePriorityQueue(int maxNodes) + { +#if PBDEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("New queue size cannot be smaller than 1"); + } +#endif + + _numNodes = 0; + _nodes = new T[maxNodes + 1]; + _numNodesEverEnqueued = 0; + } + + /// + /// Returns the number of nodes in the queue. + /// O(1) + /// + public int Count + { + get + { + return _numNodes; + } + } + + /// + /// Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), + /// attempting to enqueue another item will cause undefined behavior. O(1) + /// + public int MaxSize + { + get + { + return _nodes.Length - 1; + } + } + + /// + /// Removes every node from the queue. + /// O(n) (So, don't do this often!) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Clear() + { + Array.Clear(_nodes, 1, _numNodes); + _numNodes = 0; + } + + /// + /// Returns (in O(1)!) whether the given node is in the queue. O(1) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public bool Contains(T node) + { +#if PBDEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (node.QueueIndex < 0 || node.QueueIndex >= _nodes.Length) + { + throw new InvalidOperationException("node.QueueIndex has been corrupted. Did you change it manually? Or add this node to another queue?"); + } +#endif + + return (_nodes[node.QueueIndex] == node); + } + + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// If the queue is full, the result is undefined. + /// If the node is already enqueued, the result is undefined. + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void Enqueue(T node, float priority) + { +#if PBDEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (_numNodes >= _nodes.Length - 1) + { + throw new InvalidOperationException("Queue is full - node cannot be added: " + node); + } + if (Contains(node)) + { + throw new InvalidOperationException("Node is already enqueued: " + node); + } +#endif + + node.Priority = priority; + _numNodes++; + _nodes[_numNodes] = node; + node.QueueIndex = _numNodes; + node.InsertionIndex = _numNodesEverEnqueued++; + CascadeUp(_nodes[_numNodes]); + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void Swap(T node1, T node2) + { + //Swap the nodes + _nodes[node1.QueueIndex] = node2; + _nodes[node2.QueueIndex] = node1; + + //Swap their indicies + int temp = node1.QueueIndex; + node1.QueueIndex = node2.QueueIndex; + node2.QueueIndex = temp; + } + + //Performance appears to be slightly better when this is NOT inlined o_O + private void CascadeUp(T node) + { + //aka Heapify-up + int parent = node.QueueIndex / 2; + while (parent >= 1) + { + T parentNode = _nodes[parent]; + if (HasHigherPriority(parentNode, node)) + break; + + //Node has lower priority value, so move it up the heap + Swap(node, parentNode); //For some reason, this is faster with Swap() rather than (less..?) individual operations, like in CascadeDown() + + parent = node.QueueIndex / 2; + } + } + +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private void CascadeDown(T node) + { + //aka Heapify-down + T newParent; + int finalQueueIndex = node.QueueIndex; + while (true) + { + newParent = node; + int childLeftIndex = 2 * finalQueueIndex; + + //Check if the left-child is higher-priority than the current node + if (childLeftIndex > _numNodes) + { + //This could be placed outside the loop, but then we'd have to check newParent != node twice + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + + T childLeft = _nodes[childLeftIndex]; + if (HasHigherPriority(childLeft, newParent)) + { + newParent = childLeft; + } + + //Check if the right-child is higher-priority than either the current node or the left child + int childRightIndex = childLeftIndex + 1; + if (childRightIndex <= _numNodes) + { + T childRight = _nodes[childRightIndex]; + if (HasHigherPriority(childRight, newParent)) + { + newParent = childRight; + } + } + + //If either of the children has higher (smaller) priority, swap and continue cascading + if (newParent != node) + { + //Move new parent to its new index. node will be moved once, at the end + //Doing it this way is one less assignment operation than calling Swap() + _nodes[finalQueueIndex] = newParent; + + int temp = newParent.QueueIndex; + newParent.QueueIndex = finalQueueIndex; + finalQueueIndex = temp; + } + else + { + //See note above + node.QueueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + } + } + + /// + /// Returns true if 'higher' has higher priority than 'lower', false otherwise. + /// Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + private bool HasHigherPriority(T higher, T lower) + { + return (higher.Priority < lower.Priority || + (higher.Priority == lower.Priority && higher.InsertionIndex < lower.InsertionIndex)); + } + + /// + /// Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it. + /// If queue is empty, result is undefined + /// O(log n) + /// + public T Dequeue() + { +#if PBDEBUG + if (_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + } + + if (!IsValidQueue()) + { + throw new InvalidOperationException("Queue has been corrupted (Did you update a node priority manually instead of calling UpdatePriority()?" + + "Or add the same node to two different queues?)"); + } +#endif + + T returnMe = _nodes[1]; + Remove(returnMe); + return returnMe; + } + + /// + /// Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + /// Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior + /// O(n) + /// + public void Resize(int maxNodes) + { +#if PBDEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("Queue size cannot be smaller than 1"); + } + + if (maxNodes < _numNodes) + { + throw new InvalidOperationException("Called Resize(" + maxNodes + "), but current queue contains " + _numNodes + " nodes"); + } +#endif + + T[] newArray = new T[maxNodes + 1]; + int highestIndexToCopy = Math.Min(maxNodes, _numNodes); + for (int i = 1; i <= highestIndexToCopy; i++) + { + newArray[i] = _nodes[i]; + } + _nodes = newArray; + } + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// If the queue is empty, behavior is undefined. + /// O(1) + /// + public T First + { + get + { +#if PBDEBUG + if (_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call .First on an empty queue"); + } +#endif + + return _nodes[1]; + } + } + + /// + /// This method must be called on a node every time its priority changes while it is in the queue. + /// Forgetting to call this method will result in a corrupted queue! + /// Calling this method on a node not in the queue results in undefined behavior + /// O(log n) + /// +#if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] +#endif + public void UpdatePriority(T node, float priority) + { +#if PBDEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call UpdatePriority() on a node which is not enqueued: " + node); + } +#endif + + node.Priority = priority; + OnNodeUpdated(node); + } + + private void OnNodeUpdated(T node) + { + //Bubble the updated node up or down as appropriate + int parentIndex = node.QueueIndex / 2; + T parentNode = _nodes[parentIndex]; + + if (parentIndex > 0 && HasHigherPriority(node, parentNode)) + { + CascadeUp(node); + } + else + { + //Note that CascadeDown will be called if parentNode == node (that is, node is the root) + CascadeDown(node); + } + } + + /// + /// Removes a node from the queue. The node does not need to be the head of the queue. + /// If the node is not in the queue, the result is undefined. If unsure, check Contains() first + /// O(log n) + /// + public void Remove(T node) + { +#if PBDEBUG + if (node == null) + { + throw new ArgumentNullException("node"); + } + if (!Contains(node)) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + node); + } +#endif + + //If the node is already the last node, we can remove it immediately + if (node.QueueIndex == _numNodes) + { + _nodes[_numNodes] = null; + _numNodes--; + return; + } + + //Swap the node with the last node + T formerLastNode = _nodes[_numNodes]; + Swap(node, formerLastNode); + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) up or down as appropriate + OnNodeUpdated(formerLastNode); + } + + public IEnumerator GetEnumerator() + { + for (int i = 1; i <= _numNodes; i++) + yield return _nodes[i]; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + /// + /// Should not be called in production code. + /// Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + /// + public bool IsValidQueue() + { + for (int i = 1; i < _nodes.Length; i++) + { + if (_nodes[i] != null) + { + int childLeftIndex = 2 * i; + if (childLeftIndex < _nodes.Length && _nodes[childLeftIndex] != null && HasHigherPriority(_nodes[childLeftIndex], _nodes[i])) + return false; + + int childRightIndex = childLeftIndex + 1; + if (childRightIndex < _nodes.Length && _nodes[childRightIndex] != null && HasHigherPriority(_nodes[childRightIndex], _nodes[i])) + return false; + } + } + return true; + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueue.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueue.cs.meta new file mode 100644 index 0000000..aea6d73 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueue.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9e4182f1acbb9fc40b5e9356cebb9685 +timeCreated: 1476131089 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueueNode.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueueNode.cs new file mode 100644 index 0000000..22dd00c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueueNode.cs @@ -0,0 +1,10 @@ +namespace Priority_Queue +{ + internal class StablePriorityQueueNode : FastPriorityQueueNode + { + /// + /// Represents the order the node was inserted in + /// + public long InsertionIndex { get; internal set; } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueueNode.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueueNode.cs.meta new file mode 100644 index 0000000..0911834 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/StablePriorityQueueNode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 316bff9a2da34f5489becd70b0065188 +timeCreated: 1476131088 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SweepEventPriorityQueue.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SweepEventPriorityQueue.cs new file mode 100644 index 0000000..9bd6a52 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SweepEventPriorityQueue.cs @@ -0,0 +1,386 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using static PathBerserker2d.PolygonClipper; + +namespace Priority_Queue +{ + /// + /// An implementation of a min-Priority Queue using a heap. Has O(1) .Contains()! + /// See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information + /// + internal sealed class SweepEventPriorityQueue + { + private int _numNodes; + private SweepEvent[] _nodes; + + /// + /// Instantiate a new Priority Queue + /// + /// The max nodes ever allowed to be enqueued (going over this will cause undefined behavior) + public SweepEventPriorityQueue(int maxNodes) + { + #if QUEUE_DEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("New queue size cannot be smaller than 1"); + } + #endif + + _numNodes = 0; + _nodes = new SweepEvent[maxNodes + 1]; + } + + /// + /// Returns the number of nodes in the queue. + /// O(1) + /// + public int Count + { + get + { + return _numNodes; + } + } + + /// + /// Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize), + /// attempting to enqueue another item will cause undefined behavior. O(1) + /// + public int MaxSize + { + get + { + return _nodes.Length - 1; + } + } + + /// + /// Removes every node from the queue. + /// O(n) (So, don't do this often!) + /// + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + public void Clear() + { + Array.Clear(_nodes, 1, _numNodes); + _numNodes = 0; + } + + /// + /// Returns (in O(1)!) whether the given node is in the queue. O(1) + /// + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + public bool Contains(SweepEvent node) + { +#if QUEUE_DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if(node.QueueIndex < 0 || node.QueueIndex >= _nodes.Length) + { + throw new InvalidOperationException("node.QueueIndex has been corrupted. Did you change it manually? Or add this node to another queue?"); + } +#endif + + return (_nodes[node.queueIndex] == node); + } + + /// + /// Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out. + /// If the queue is full, the result is undefined. + /// If the node is already enqueued, the result is undefined. + /// O(log n) + /// + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + public void Enqueue(SweepEvent node) + { +#if QUEUE_DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if (Contains(node)) + { + throw new InvalidOperationException("Node is already enqueued: " + node); + } +#endif + if (_numNodes >= _nodes.Length - 1) + { + // double _node array + Array.Resize(ref _nodes, _nodes.Length * 2); + } + + _numNodes++; + _nodes[_numNodes] = node; + node.queueIndex = _numNodes; + CascadeUp(_nodes[_numNodes]); + } + + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + private void Swap(SweepEvent node1, SweepEvent node2) + { + //Swap the nodes + _nodes[node1.queueIndex] = node2; + _nodes[node2.queueIndex] = node1; + + //Swap their indicies + int temp = node1.queueIndex; + node1.queueIndex = node2.queueIndex; + node2.queueIndex = temp; + } + + //Performance appears to be slightly better when this is NOT inlined o_O + private void CascadeUp(SweepEvent node) + { + //aka Heapify-up + int parent = node.queueIndex / 2; + while(parent >= 1) + { + SweepEvent parentNode = _nodes[parent]; + if(HasHigherPriority(parentNode, node)) + break; + + //Node has lower priority value, so move it up the heap + Swap(node, parentNode); //For some reason, this is faster with Swap() rather than (less..?) individual operations, like in CascadeDown() + + parent = node.queueIndex / 2; + } + } + + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + private void CascadeDown(SweepEvent node) + { + //aka Heapify-down + SweepEvent newParent; + int finalQueueIndex = node.queueIndex; + while(true) + { + newParent = node; + int childLeftIndex = 2 * finalQueueIndex; + + //Check if the left-child is higher-priority than the current node + if(childLeftIndex > _numNodes) + { + //This could be placed outside the loop, but then we'd have to check newParent != node twice + node.queueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + + SweepEvent childLeft = _nodes[childLeftIndex]; + if(HasHigherPriority(childLeft, newParent)) + { + newParent = childLeft; + } + + //Check if the right-child is higher-priority than either the current node or the left child + int childRightIndex = childLeftIndex + 1; + if(childRightIndex <= _numNodes) + { + SweepEvent childRight = _nodes[childRightIndex]; + if(HasHigherPriority(childRight, newParent)) + { + newParent = childRight; + } + } + + //If either of the children has higher (smaller) priority, swap and continue cascading + if(newParent != node) + { + //Move new parent to its new index. node will be moved once, at the end + //Doing it this way is one less assignment operation than calling Swap() + _nodes[finalQueueIndex] = newParent; + + int temp = newParent.queueIndex; + newParent.queueIndex = finalQueueIndex; + finalQueueIndex = temp; + } + else + { + //See note above + node.queueIndex = finalQueueIndex; + _nodes[finalQueueIndex] = node; + break; + } + } + } + + /// + /// Returns true if 'higher' has higher priority than 'lower', false otherwise. + /// Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false + /// + #if NET_VERSION_4_5 + [MethodImpl(MethodImplOptions.AggressiveInlining)] + #endif + private bool HasHigherPriority(SweepEvent higher, SweepEvent lower) + { + return higher.CompareTo(lower) < 0; + } + + /// + /// Removes the head of the queue and returns it. + /// If queue is empty, result is undefined + /// O(log n) + /// + public SweepEvent Dequeue() + { +#if QUEUE_DEBUG + if(_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call Dequeue() on an empty queue"); + } + + if(!IsValidQueue()) + { + throw new InvalidOperationException("Queue has been corrupted (Did you update a node priority manually instead of calling UpdatePriority()?" + + "Or add the same node to two different queues?)"); + } +#endif + + SweepEvent returnMe = _nodes[1]; + Remove(returnMe); + return returnMe; + } + + /// + /// Resize the queue so it can accept more nodes. All currently enqueued nodes are remain. + /// Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior + /// O(n) + /// + public void Resize(int maxNodes) + { +#if QUEUE_DEBUG + if (maxNodes <= 0) + { + throw new InvalidOperationException("Queue size cannot be smaller than 1"); + } + + if (maxNodes < _numNodes) + { + throw new InvalidOperationException("Called Resize(" + maxNodes + "), but current queue contains " + _numNodes + " nodes"); + } +#endif + + SweepEvent[] newArray = new SweepEvent[maxNodes + 1]; + int highestIndexToCopy = Math.Min(maxNodes, _numNodes); + for (int i = 1; i <= highestIndexToCopy; i++) + { + newArray[i] = _nodes[i]; + } + _nodes = newArray; + } + + /// + /// Returns the head of the queue, without removing it (use Dequeue() for that). + /// If the queue is empty, behavior is undefined. + /// O(1) + /// + public SweepEvent First + { + get + { +#if QUEUE_DEBUG + if(_numNodes <= 0) + { + throw new InvalidOperationException("Cannot call .First on an empty queue"); + } +#endif + + return _nodes[1]; + } + } + + private void OnNodeUpdated(SweepEvent node) + { + //Bubble the updated node up or down as appropriate + int parentIndex = node.queueIndex / 2; + SweepEvent parentNode = _nodes[parentIndex]; + + if(parentIndex > 0 && HasHigherPriority(node, parentNode)) + { + CascadeUp(node); + } + else + { + //Note that CascadeDown will be called if parentNode == node (that is, node is the root) + CascadeDown(node); + } + } + + /// + /// Removes a node from the queue. The node does not need to be the head of the queue. + /// If the node is not in the queue, the result is undefined. If unsure, check Contains() first + /// O(log n) + /// + public void Remove(SweepEvent node) + { +#if QUEUE_DEBUG + if(node == null) + { + throw new ArgumentNullException("node"); + } + if(!Contains(node)) + { + throw new InvalidOperationException("Cannot call Remove() on a node which is not enqueued: " + node); + } +#endif + + //If the node is already the last node, we can remove it immediately + if (node.queueIndex == _numNodes) + { + _nodes[_numNodes] = null; + _numNodes--; + return; + } + + //Swap the node with the last node + SweepEvent formerLastNode = _nodes[_numNodes]; + Swap(node, formerLastNode); + _nodes[_numNodes] = null; + _numNodes--; + + //Now bubble formerLastNode (which is no longer the last node) up or down as appropriate + OnNodeUpdated(formerLastNode); + } + + public IEnumerator GetEnumerator() + { + for(int i = 1; i <= _numNodes; i++) + yield return _nodes[i]; + } + + /// + /// Should not be called in production code. + /// Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue. + /// + public bool IsValidQueue() + { + for(int i = 1; i < _nodes.Length; i++) + { + if(_nodes[i] != null) + { + int childLeftIndex = 2 * i; + if(childLeftIndex < _nodes.Length && _nodes[childLeftIndex] != null && HasHigherPriority(_nodes[childLeftIndex], _nodes[i])) + return false; + + int childRightIndex = childLeftIndex + 1; + if(childRightIndex < _nodes.Length && _nodes[childRightIndex] != null && HasHigherPriority(_nodes[childRightIndex], _nodes[i])) + return false; + } + } + return true; + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SweepEventPriorityQueue.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SweepEventPriorityQueue.cs.meta new file mode 100644 index 0000000..e295762 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/High-Speed-Priority-Queue/SweepEventPriorityQueue.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db62ab1d9d5098f47ab5393ae603107a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/IVelocityProvider.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/IVelocityProvider.cs new file mode 100644 index 0000000..65cbc1e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/IVelocityProvider.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + public interface IVelocityProvider + { + /// + /// Current velocity relative to the world. + /// + Vector2 WorldVelocity { get; } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/IVelocityProvider.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/IVelocityProvider.cs.meta new file mode 100644 index 0000000..816d3c5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/IVelocityProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3b2c212f6466574c8c5641690193a96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent.meta new file mode 100644 index 0000000..9d451bc --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 32a41e6786a58fc4b8936609634bae30 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgent.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgent.cs new file mode 100644 index 0000000..6ce3a13 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgent.cs @@ -0,0 +1,954 @@ +using UnityEngine; +using System; +using System.Collections.Generic; + +namespace PathBerserker2d +{ + /// + /// Represents a pathfinding entity. + /// + /// + /// This components handles the interaction with the asynchronous pathfinding system. + /// It assumes the agent is a point located at transform.position. + /// Automatic movement will directly modify the transform this script is attached to. See \ref navagent_movement "NavAgent's build-in movement" for more detail on movement. + /// ## States + /// At heart the NavAgent is a state machine with the following states: + /// + /// + /// Idle\n + /// + /// In this state the agent does nothing and is ready to path to a new location. + /// + /// + /// + /// Planning\n + /// + /// The agent has made a path request and is now waiting for its result. + /// A call to for example would make the agent switch to this state. + /// If the path calculation succeeded, the agent switches into the FollowPath state. + /// If it didn't succeed however, the agent will switch back into the Idle state. + /// + /// + /// + /// FollowPath\n + /// + /// The agent will follow the a previously calculated path. Depending on whether or is set, + /// the path will be followed automatically. The agent has build-in ways to traverse the build-in link types. They don't make use of the physics system. + /// The path will be recalculated at a set interval determined by . This is to ensure the path is up to date with changes in the world. + /// No reactions to changes in the world between recalculations is possible. + /// + /// Following a path is further subdivided into three states: + /// + /// + /// Segment movement\n + /// + /// The agent moves on a line segment. + /// If you move the agent manually, call to switch to the next state. + /// + /// + /// + /// Wait for link\n + /// + /// This state is only entered if after the agent finshes moving on a segment, the link it wants to take is currently not traversable. + /// The agent will wait for the link to become traversable again. + /// + /// + /// + /// Traverse link\n + /// + /// The agent will move on the link. + /// If you move the agent manually, call to begin traversing the next segment. + /// + /// + /// + /// + /// + /// + /// LostPath\n + /// + /// The agent was previously in the FollowPath state, but was called. + /// In this state, the agent will periodically attempt to find a path to its last goal. + /// This is useful, for if the agent unexpectedly was moved of its previously followed path, it can still attempt to reach its goal. + /// This state is only entered, when in state FollowPath and is called. + /// + /// + /// + /// ## Pathfinding properties + /// A NavAgent has a few properties relevant to the pathfinder. + /// + /// + /// \n + /// + /// Only segments and links with enough free space are considered. + /// + /// + /// + /// \n + /// + /// Only segments that don't exceed this angle are considered traversable. + /// 0° = ground, 90° = straight walls and 180° = ceiling. + /// + /// + /// + /// \n + /// + /// For each link one multiplier from this array is applied to its traversal costs. + /// With multiplier values <= 0 you can completely exclude certain link types from traversal. + /// + /// + /// + /// \n + /// + /// Links and parts of segments can be tagged with a NavTag. NavTag with index 0 is considered the default and applied to all segments + /// that don't have another NavTag. + /// As with multiplier values <= 0 completely exclude NavTags from traversal. + /// + /// + /// + /// + [AddComponentMenu("PathBerserker2d/Nav Agent")] + [ScriptExecutionOrder(-50)] + public class NavAgent : MonoBehaviour + { + public enum State + { + /// Agent is doing nothing. + Idle, + /// Agent is following a path. + FollowPath, + } + + private enum MovementState + { + OnSegment, + OnLink, + WaitForLinkOnSegment, + } + + public State CurrentStatus => status; + public bool IsIdle => status == State.Idle && currentPathRequest?.Status == PathRequest.RequestState.Draft; + public bool IsFollowingAPath => status == State.FollowPath; + + public float Height => height; + public float MaxSlopeAngle => maxSlopeAngle; + public bool IsOnLink => IsFollowingAPath && movementState == MovementState.OnLink; + public bool IsMovingOnSegment => IsFollowingAPath && movementState == MovementState.OnSegment; + public bool IsWaitingForLink => IsFollowingAPath && movementState == MovementState.WaitForLinkOnSegment; + + /// + /// If true, either IsMovingOnSegment is true, or the agent is waiting to traverse an untraversable link. + /// + public bool IsOnSegment => IsFollowingAPath && movementState != MovementState.OnLink; + + /// + /// Check, if the current mapped position of the agent is valid. The mapped position can only be valid, if the agent is close to the ground. (Close, not necessarily directly on the ground) + /// + public bool HasValidPosition => !currentMappedPosition.IsInvalid(); + + /// + /// True, if Stop() was called and agent hasn't yet stopped + /// + public bool IsStopping => stopRequested; + + /// + /// True, if the agent is on the last segment of its path. + /// + public bool IsOnGoalSegment => IsOnSegment && !Path.HasNext; + + /// + /// Link of the path segment the agent is on, or null. + /// + [Obsolete("Use CurrentPathSegment.link")] + public INavLinkInstance CurrentLink => currentPath?.Current.link ?? null; + + /// + /// Link type of the path segment the agent is on, or "" + /// + [Obsolete("Use CurrentPathSegment.link.LinkTypeName")] + public string CurrentLinkType => currentPath?.Current.link?.LinkTypeName ?? ""; + + /// + /// Link start of the path segment the agent is on, or Vector2.zero. Can change each frame, if the link start is on a moving platform. + /// + [Obsolete("Use CurrentPathSegment.LinkStart")] + public Vector2 CurrentLinkStart => currentPath?.Current.LinkStart ?? Vector2.zero; + + /// + /// Segment normal of the path segment the agent is or normal of the currently mapped position, or Vector2.up + /// + public Vector2 CurrentSegmentNormal => IsFollowingAPath ? currentPath.Current.Normal : (currentMappedPosition.IsValid() ? currentMappedPosition.Normal : Vector2.up); + + /// + /// Current path segment if agent follows a path or null. + /// + public PathSegment CurrentPathSegment => currentPath?.Current; + + /// + /// Segment normal of the next segment on the path, or Vector2.zero + /// + [Obsolete("Use CurrentPathSegment.Next.Normal")] + public Vector2 NextSegmentNormal => currentPath?.NextSegment?.Normal ?? Vector2.zero; + + /// + /// Current subgoal the agent is moving towards. May either be a link start or a link end. If it lies on a moving platform, the value may change from frame to frame. + /// + public Vector2 PathSubGoal + { + get + { + if (IsFollowingAPath) + { + if (movementState == MovementState.OnLink) + return currentPath.Current.LinkEnd; + else + return currentPath.Current.LinkStart; + } + return Vector2.zero; + } + } + /// + /// Overall goal of the path the agent is on + /// + public Vector2? PathGoal => currentPath?.Goal; + + /// + /// Shorthand for transform.position + /// + public Vector2 Position + { + get => transform.position; + set => transform.position = new Vector3(value.x, value.y, transform.position.z); + } + + /// + /// Combination of all NavTags at the position of the agent. + /// + public int CurrentNavTagVector => IsFollowingAPath ? currentPath.Current.GetTagVector(Position) : (currentMappedPosition.cluster?.GetNavTagVector(currentMappedPosition.t) ?? 0); + + /// + /// Time agent spend on link. Does not include waiting for link to become traversable. + /// + public float TimeOnLink { get; private set; } + + + public delegate void FailedToFindPathDelegate(NavAgent agent); + + /// + /// Fired when agent begins moving on a link. + /// + public event Action OnStartLinkTraversal; + + /// + /// Fired when agent is moving on a link. + /// + public event Action OnLinkTraversal; + + /// + /// Fired when agent start moving on a segment. + /// + public event Action OnStartSegmentTraversal; + + /// + /// Fired when agent is moving on a segment. + /// + public event Action OnSegmentTraversal; + + /// + /// Fired when the agent fails to find a path + /// + public event Action OnFailedToFindPath; + + /// + /// Fired when agent stops after Stop() or ForceStop() was called. For ForceStop() this happens instantly. For Stop() this happens after the agent stopped. + /// + public event Action OnStop; + + /// + /// Fired when agent reaches its current goal. + /// + public event Action OnReachedGoal; + + /// + /// Called when the agent starts following a new path. + /// NOTE: Also called, after successfully recalculating a path, even if the path itself does not change. + /// + public event Action OnStartFollowingNewPath; + + internal Path Path => currentPath; + internal int NavTagMask => navTagMask; + + + + [Header("Pathplanning")] + [SerializeField] + // protect! should not be changeable, unless not making a path request + private float height = 1; + [SerializeField] + // protect! should not be changeable, unless not making a path request + // 90 = doesnt matter + [Range(0, 180)] + [Tooltip("Maximum slope the agent can walk on. 180 = unlimited")] + private float maxSlopeAngle = 180; + + /// + /// Delay in seconds between recalculations of current path. This enables the agent to react to changes in the world. Higher values are better for performance. + /// + [Tooltip("Interval at which an agent will recalculate its current path to react to world changes in seconds. Higher value improves performance.")] + [SerializeField] + float autoRepathIntervall = 1f; + [Tooltip("Maximum distance an agent can be from the start of a calculated path, to start following it. If the distance is to large, the path is thrown out.")] + [SerializeField] + float maximumDistanceToPathStart = 0.7f; + + [SerializeField] + float[] linkTraversalCostMultipliers; + + /// + /// If true and no path exists between start and goal, the NavAgent will try to find a path to the closest reachable position instead. Does not work with multiple targets! + /// + [Tooltip("If true and no path exists between start and goal, will try to find a path to the closest reachable position instead. Does not work with multiple targets!")] + [SerializeField] + bool allowCloseEnoughPath = false; + + [Obsolete("Moved to out and into a separate component. Only for migration purposes.", true)] + [Tooltip("Speed on segments in unit/s.")] + [SerializeField] + public float movementSpeed = 5; + + + [Obsolete("Moved to out and into a separate component. Only for migration purposes.", true)] + [Tooltip("Speed on corner links in degrees/s.")] + [SerializeField] + public float cornerSpeed = 100; + + [Obsolete("Moved to out and into a separate component. Only for migration purposes.", true)] + [Tooltip("Speed on jump links in unit/s.")] + [SerializeField] + public float jumpSpeed = 5; + + [Obsolete("Moved to out and into a separate component. Only for migration purposes.", true)] + [Tooltip("Speed on fall links in unit/s.")] + [SerializeField] + public float fallSpeed = 5; + + [Obsolete("Moved to out and into a separate component. Only for migration purposes.", true)] + [Tooltip("Speed on climb links in unit/s.")] + [SerializeField] + public float climbSpeed = 5; + + [Tooltip("If true, will print debug messages.")] + [SerializeField] + public bool enableDebugMessages = false; + + + /// + /// Traversal cost multipliers for nav tags. A value less or equal to 0 prohibits the agent from traversing that tag. + /// + [SerializeField] + float[] navTagTraversalCostMultipliers; + + + [SerializeField, ReadOnly] + private State status; + + [SerializeField, HideInInspector] + private int navTagMask; + + internal NavSegmentPositionPointer currentMappedPosition; + internal PathRequest currentPathRequest; + + private Path currentPath = null; + private PathRequest repathPathRequest; + private float lastRepathTime; + private MovementState movementState; + private bool traversedLinkSinceLastRepath; + private bool traversedLinkSinceLastPath; + private bool stopRequested; + + #region UNITY_METHODS + private void OnEnable() + { + status = State.Idle; + currentPathRequest = new PathRequest(this); + repathPathRequest = new PathRequest(this); + } + + private void Start() + { + UpdateMappedPosition(); + } + + private void OnValidate() + { + if (linkTraversalCostMultipliers == null) + linkTraversalCostMultipliers = new float[0]; + if (navTagTraversalCostMultipliers == null) + navTagTraversalCostMultipliers = new float[0]; + + if (linkTraversalCostMultipliers.Length != PathBerserker2dSettings.NavLinkTypeNames.Length) + { + Utility.ResizeWithDefault(ref linkTraversalCostMultipliers, PathBerserker2dSettings.NavLinkTypeNames.Length, 1); + } + if (navTagTraversalCostMultipliers.Length != PathBerserker2dSettings.NavTags.Length) + { + Utility.ResizeWithDefault(ref navTagTraversalCostMultipliers, PathBerserker2dSettings.NavTags.Length, 1); + } + + navTagMask = GetNavTagMask(); + } + + private void Update() + { + UpdateMappedPosition(); + HandlePathRequest(); + + switch (status) + { + case State.FollowPath: + Repath(); + + if (movementState == MovementState.OnLink) + { + //check if link still exists + if (CurrentPathSegment.link == null) + { + // link was destroyed. Wait for repath + break; + } + + TimeOnLink += Time.deltaTime; + OnLinkTraversal?.Invoke(this); + } + else if (movementState == MovementState.OnSegment) + { + if (stopRequested) + { + status = State.Idle; + stopRequested = false; + OnStop?.Invoke(this); + } + else + { + OnSegmentTraversal?.Invoke(this); + } + } + else + { + if (currentPath.Current.link.IsTraversable) + { + StartTraversingLink(); + } + } + break; + } + } + #endregion + + /// + /// Repositions the agent at the nearest segment the agent could be standing at. Segments the agent could not be at do to its tag or slope will be ignored. + /// + /// True, if warping was successful + public bool WarpToNearestSegment(float maximumWarpDistance = 10) + { + if (!currentMappedPosition.IsInvalid()) + { + // already close enough + this.Position = currentMappedPosition.Position; + return true; + } + + NavSegmentPositionPointer p; + if (PBWorld.TryMapPoint(Position, maximumWarpDistance, this, out p)) + { + this.Position = p.Position; + return true; + } + return false; + } + + /// + /// Starts the process of pathfinding to the closest of the given goals. + /// NOTE: Do not call this method every frame. Calculating a path takes longer than a frame, so the agent will never start moving. + /// + /// + /// Goals to pathfind to. + /// True, if the at least 1 goal and the agents own position could be mapped. This does not mean, that a path towards a goal exists. + public bool PathTo(params Vector2[] goals) + { + Stop(); + return UpdatePath(goals); + } + + /// + /// Starts the process of pathfinding to the given goal. + /// NOTE: Do not call this method every frame. Calculating a path takes longer than a frame, so the agent will never start moving. + /// + /// + /// Goals to pathfind to. + /// True, if the at least 1 goal and the agents own position could be mapped. This does not mean, that a path towards a goal exists. + public bool PathTo(Vector2 goal) + { + Stop(); + return UpdatePath(goal); + } + + /// + /// Starts the process of pathfinding to the closest given goal. + /// NOTE: Do not call this method every frame. Calculating a path takes longer than a frame, so the agent will never start moving. + /// + /// True, the agents own position could be mapped. This does not mean, that a path towards the goal exists. + private bool PathTo(IList goalPs) + { + Stop(); + return UpdatePath(goalPs); + } + + /// + /// Starts the process of pathfinding to the closest of the given goals. Will continue moving until the calculations for the new path are completed. + /// NOTE: Do not call this method every frame. Calculating a path takes longer than a frame, so the agent will never start moving. + /// + /// + /// Goals to pathfind to. + /// True, if the at least 1 goal and the agents own position could be mapped. This does not mean, that a path towards a goal exists. + public bool UpdatePath(params Vector2[] goals) + { + if (currentMappedPosition.IsInvalid()) + return false; + + List goalPs = new List(goals.Length); + NavSegmentPositionPointer p; + for (int i = 0; i < goals.Length; i++) + { + float maxDist = Vector2.Distance(Position, goals[i]) + 0.1f; + if (PBWorld.TryMapPoint(goals[i], maxDist, out p) && (allowCloseEnoughPath || CouldBeLocatedAt(p))) + { + goalPs.Add(p); + } + } + return UpdatePath(goalPs); + } + + /// + /// Starts the process of pathfinding to the given goal. Will continue moving until the calculations for the new path are completed. + /// NOTE: Do not call this method every frame. Calculating a path takes longer than a frame, so the agent will never start moving. + /// + /// + /// Goals to pathfind to. + /// True, if the at least 1 goal and the agents own position could be mapped. This does not mean, that a path towards a goal exists. + public bool UpdatePath(Vector2 goal) + { + if (currentMappedPosition.IsInvalid()) + return false; + + float maxDist = Vector2.Distance(Position, goal) + 0.1f; + NavSegmentPositionPointer p; + if (!PBWorld.TryMapPoint(goal, maxDist, out p) || (!allowCloseEnoughPath && !CouldBeLocatedAt(p))) + return false; + + return UpdatePath(new NavSegmentPositionPointer[] { p }); + } + + /// + /// Simple distance check between agent and CurrentSubGoal. + /// + /// True, if distance is less than maxDist + public bool HasReachedCurrentSubGoal(float maxDist = 0.05f) + { + Vector2 delta = PathSubGoal - Position; + float distance = delta.magnitude; + return distance < maxDist; + } + + /// + /// Starts the process of pathfinding to the closest given goal. Will continue moving until the calculations for the new path are completed. + /// + /// True, the agents own position could be mapped. This does not mean, that a path towards the goal exists. + private bool UpdatePath(IList goalPs) + { + if (currentPathRequest.Status == PathRequest.RequestState.Pending) + return false; + + if (goalPs.Count == 0) + return false; + + if (currentMappedPosition.IsInvalid()) + return false; + + currentPathRequest.start = currentMappedPosition; + currentPathRequest.goals = goalPs; + PBWorld.PathTo(currentPathRequest); + traversedLinkSinceLastPath = false; + return true; + } + + /// + /// Start pathfinding to a random position on the NavGraph. It cannot grantee that this position is reachable. Does the agent might not move after this is called. + /// + /// + public bool SetRandomDestination() + { + if (currentMappedPosition.IsInvalid()) + return false; + + Vector2 goal = PBWorld.GetRandomPointOnGraph(); + return PathTo(goal); + } + + + /// + /// If you implement link traversal yourself, call this to complete a link traversal. + /// + public void CompleteLinkTraversal() + { + if (IsOnLink) + { + currentPath.MoveNext(); + StartTraversingSegment(); + } + } + + /// + /// If you implement segment traversal yourself, call this to complete a segment traversal. + /// + public void CompleteSegmentTraversal() + { + if (movementState == MovementState.OnSegment) + { + if (currentPath.HasNext) + { + if (CurrentPathSegment.link.IsTraversable) + { + StartTraversingLink(); + } + else + { + movementState = MovementState.WaitForLinkOnSegment; + } + } + else + { + status = State.Idle; + OnReachedGoal?.Invoke(this); + } + } + } + + /// + /// Determines, if in this agent is allowed to traverse the given link. + /// + public bool CanTraverseLink(INavLinkInstance link) + { + int linkType = link.LinkType; + return linkType == -1 || (GetLinkTraversalMultiplier(linkType) > 0 && height <= link.Clearance); + } + + /// + /// Get the traversal cost multiplier for a given link type. + /// + public float GetLinkTraversalMultiplier(int linkType) + { + return linkTraversalCostMultipliers[linkType]; + } + + /// + /// Get the traversal cost multiplier for a given nav tag. + /// + public float GetNavTagTraversalMultiplier(int navTag) + { + return navTagTraversalCostMultipliers[navTag] <= 0 ? float.PositiveInfinity : navTagTraversalCostMultipliers[navTag]; + } + + /// + /// Whether the agents current position contains the given NavTag. NOTE: Does not work, if the agent is not currently moving on a path. + /// + /// True, if current position has supplied NavTag. + public bool IsOnSegmentWithTag(int navTag) + { + if (IsOnSegment) + return (CurrentNavTagVector & (1 << navTag)) != 0; + else + return false; + } + + /// + /// Stops the current path following at the first opportunity. Link traversal will be completed before the agent stops. + /// + public void Stop() + { + stopRequested = true; + if (currentPathRequest.Status == PathRequest.RequestState.Pending) + currentPathRequest = new PathRequest(this); + } + + /// + /// Stops the current path following instantly. Agent might stop wihle traversing a link (e.g. while jumping in mid air) + /// + public void ForceStop() + { + status = State.Idle; + currentPathRequest = new PathRequest(this); + OnStop?.Invoke(this); + } + + /// + /// Tries to map the "other" and checks if the agent is mapped to the same segment. + /// If "other" can't be mapped this will return null. + /// Agents on a link will always return false. + /// If this agent currently can't be mapped this will return null. + /// + /// + public bool? IsOnSameSegmentAs(Vector2 other) + { + if (IsOnLink) + return false; + + NavSegmentPositionPointer p; + if (!PBWorld.TryMapPoint(other, out p) || currentMappedPosition.IsInvalid()) + return null; + return currentMappedPosition.surface == p.surface && currentMappedPosition.cluster == p.cluster; + } + + /// + /// Enumerates the points on the currently followed path. Corner links will result in the same point being enumerated twice in a row. First point will be the agents current position. + /// + public IEnumerable PathPoints() + { + if (!IsFollowingAPath) + yield break; + + yield return Position; + + var seg = currentPath.Current; + if (IsOnSegment) + yield return seg.LinkStart; + + if (seg.Next != null) + { + yield return seg.LinkEnd; + + seg = seg.Next; + while (seg.Next != null) + { + yield return seg.LinkStart; + yield return seg.LinkEnd; + seg = seg.Next; + } + + yield return seg.LinkStart; + } + } + + + + /// + /// Creates a pathrequest for this agent using the specified start and goal. The PathRequest is for your own use. The agent will take no further action. Use it to plan theoretical paths, without the agent moving. See also PBWorld.PathTo() + /// + /// A PathRequest or null, if start or goal couldn't be mapped. + public PathRequest CreatePathRequest(Vector2 start, Vector2 goal) + { + float maxDist = Vector2.Distance(Position, goal) + 0.1f; + NavSegmentPositionPointer startPointer; + if (!PBWorld.TryMapPoint(start, maxDist, this, out startPointer)) + return null; + + NavSegmentPositionPointer goalPointer; + if (!PBWorld.TryMapPoint(goal, maxDist, out goalPointer) || (!allowCloseEnoughPath && !CouldBeLocatedAt(goalPointer))) + return null; + + PathRequest request = new PathRequest(this); + request.start = startPointer; + request.goals = new[] { goalPointer }; + + return request; + } + + /// + /// Convenience function that will return if the agent could reach the given point from it's current location. It runs synchronously which is not optimal for performance. + /// + public bool CanReach(Vector2 goal) + { + var pr = CreatePathRequest(Position, goal); + PBWorld.PathTo(pr); + + while (pr.Status != PathRequest.RequestState.Finished && pr.Status != PathRequest.RequestState.Failed) + { + // fast spinning + } + return pr.Status == PathRequest.RequestState.Finished; + } + + private int GetNavTagMask() + { + int navTagMask = 0; + for (int i = 0; i < navTagTraversalCostMultipliers.Length; i++) + { + if (navTagTraversalCostMultipliers[i] <= 0) + navTagMask |= 1 << i; + } + return ~navTagMask; + } + + internal bool CanTraverseSegment(Vector2 segNormal, float minClearance) + { + return Vector2.Angle(Vector2.up, segNormal) <= maxSlopeAngle && minClearance >= height; + } + + internal bool CouldBeLocatedAt(NavSegmentPositionPointer positionPointer) + { + return Vector2.Angle(Vector2.up, positionPointer.Normal) <= maxSlopeAngle && positionPointer.cluster.GetClearanceAlongSegment(positionPointer.t) >= height && (positionPointer.cluster.GetNavTagVector(positionPointer.t) & ~navTagMask) == 0; + } + + private void StartTraversingLink() + { + movementState = MovementState.OnLink; + traversedLinkSinceLastRepath = true; + traversedLinkSinceLastPath = true; + TimeOnLink = 0; + OnStartLinkTraversal?.Invoke(this); + } + + private void StartTraversingSegment() + { + movementState = MovementState.OnSegment; + OnStartSegmentTraversal?.Invoke(this); + } + + private void UpdateMappedPosition() + { + // probably not on ground when on link + if (IsOnLink) + { + // make sure to set the path to invalid + currentMappedPosition = NavSegmentPositionPointer.Invalid; + return; + } + //if (Time.time >= timeToRemapPosition) + //{ + // timeToRemapPosition = Time.time + 0.2f + UnityEngine.Random.value * 0.1f; + + PBWorld.TryMapAgent(Position, currentMappedPosition, this, out currentMappedPosition); + + // edge case fix + // happens if the navagent is on a corner and mapping disagrees with path + if (IsFollowingAPath && currentMappedPosition.cluster != currentPath.Current.cluster) + { + if (currentMappedPosition.t <= 0.05f) + { + currentMappedPosition = new NavSegmentPositionPointer(currentMappedPosition.surface, currentPath.Current.cluster, 0); + } + else if (currentMappedPosition.t >= currentMappedPosition.cluster.Length - 0.05f) + { + currentMappedPosition = new NavSegmentPositionPointer(currentMappedPosition.surface, currentPath.Current.cluster, currentPath.Current.cluster.Length); + } + } + } + + private void Repath() + { + switch (repathPathRequest.Status) + { + case PathRequest.RequestState.Draft: + if (IsOnSegment && !currentMappedPosition.IsInvalid() && Time.time - lastRepathTime >= Mathf.Max(0.1f, autoRepathIntervall)) + { + repathPathRequest.start = currentMappedPosition; + repathPathRequest.goals = currentPathRequest.goals; + + PBWorld.PathTo(repathPathRequest); + + lastRepathTime = Time.time; + traversedLinkSinceLastRepath = false; + } + break; + case PathRequest.RequestState.Failed: + if (repathPathRequest.FailReason == PathRequest.RequestFailReason.NoPathFromStartToGoal + || repathPathRequest.FailReason == PathRequest.RequestFailReason.WorldWasDestroyed) + { + Stop(); + OnFailedToFindPath?.Invoke(this); + } + + repathPathRequest.Reset(); + break; + case PathRequest.RequestState.Finished: + if (!traversedLinkSinceLastRepath && currentPathRequest.goals == repathPathRequest.goals) + { + StartFollowingPath(repathPathRequest); + } + + repathPathRequest.Reset(); + break; + } + } + + private void HandlePathRequest() + { + switch (currentPathRequest.Status) + { + case PathRequest.RequestState.Failed: + + if (!allowCloseEnoughPath) + { + Stop(); + + if (currentPathRequest.Status == PathRequest.RequestState.Failed && enableDebugMessages) + Debug.Log($"{name}: Pathrequest failed because: {currentPathRequest.FailReason}"); + + OnFailedToFindPath?.Invoke(this); + currentPathRequest.Reset(); + } + else if (currentPathRequest.FailReason == PathRequest.RequestFailReason.NoPathFromStartToGoal && !currentPathRequest.closestReachablePosition.IsInvalid()) + { + float maxDistance = 10; + float distance = Vector2.Distance(currentPathRequest.closestReachablePosition.Position, Position); + if (distance < maxDistance) + { + UpdatePath(new List() { currentPathRequest.closestReachablePosition }); + } + OnFailedToFindPath?.Invoke(this); + } + break; + case PathRequest.RequestState.Finished: + if (!traversedLinkSinceLastPath) + { + StartFollowingPath(currentPathRequest); + currentPathRequest.Reset(); + } + else + { + traversedLinkSinceLastPath = false; + // retry + if (IsOnSegment && !currentMappedPosition.IsInvalid()) + PathTo(currentPathRequest.goals); + } + break; + } + } + + private bool StartFollowingPath(PathRequest request) + { +#if PBDEBUG + Debug.Log("Pathrequest succeed. " + request.Path); + Debug.Assert(request.Status == PathRequest.RequestState.Finished); +#endif + // check that we are close to the path start + if (Vector2.Distance(request.start.Position, Position) > maximumDistanceToPathStart) + { +#if PBDEBUG + Debug.Log("Moved to far away from path start. Not using that path"); +#endif + request.Fail(PathRequest.RequestFailReason.ToFarFromStart); + return false; + } + + stopRequested = false; + lastRepathTime = Time.time; + this.status = State.FollowPath; + currentPath = request.Path; + + StartTraversingSegment(); + + OnStartFollowingNewPath?.Invoke(this); + return true; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgent.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgent.cs.meta new file mode 100644 index 0000000..74d2c05 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3864fd1487d130847b11b82f276d11b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: -50 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers.meta new file mode 100644 index 0000000..8571069 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 19f72ec82365a48439101af4e8b29c4e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/AdjustRotation.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/AdjustRotation.cs new file mode 100644 index 0000000..744f0ca --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/AdjustRotation.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Adjust the NavAgents rotation to match the segments rotation. + /// + public class AdjustRotation : MonoBehaviour + { + [SerializeField] + public NavAgent agent; + + /// + /// Speed at which the agent is rotated. + /// + [SerializeField, Tooltip("Speed at which the agent is rotated.")] + public float rotationSpeed = 20; + + private void Update() + { + if (!agent.IsOnLink || agent.CurrentPathSegment?.link?.LinkTypeName != "corner") + { + this.transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.forward, this.agent.CurrentSegmentNormal), Time.deltaTime * rotationSpeed); + } + } + + private void Reset() + { + agent = GetComponent(); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/AdjustRotation.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/AdjustRotation.cs.meta new file mode 100644 index 0000000..f1c3664 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/AdjustRotation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f33302ff91c92994e9d60e1cf7668b8f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/Follower.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/Follower.cs new file mode 100644 index 0000000..e74b1eb --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/Follower.cs @@ -0,0 +1,93 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Makes a NavAgent follow another. + /// + public class Follower : MonoBehaviour + { + [SerializeField] + public NavAgent navAgent = null; + [SerializeField] + public Transform target = null; + + /// + /// Radius when agent should start moving towards the target. Should be >= travelStopRadius + /// + [SerializeField, Tooltip("Radius when agent should start moving towards the target. Should be >= travelStopRadius")] + public float closeEnoughRadius = 3; + + /// + /// Radius when agent should stop moving towards the target. + /// + [SerializeField, Tooltip("Radius when agent should stop moving towards the target")] + public float travelStopRadius = 1; + + /// + /// Using the targets velocity, predicts the targets position in the future and uses this prediction as pathfinding goal. Useful for fast moving enemies. Only works when the target has a Rigidbody2d component or a component that implements IVelocityProvider. (NavAgent does not!) + /// + [SerializeField] + [Tooltip("Using the targets velocity, predicts the targets position in the future and uses this prediction as pathfinding goal. Useful for fast moving enemies. Only works when the target has a Rigidbody2d component or a component that implements IVelocityProvider. (NavAgent does not!)")] + public float targetPredictionTime = 0; + + void Update() + { + if (target == null) + return; + + Vector2 targetPos = GetTargetPosition(); + float distToTarget = Vector2.Distance(transform.position, targetPos); + + if (distToTarget > closeEnoughRadius && + !(navAgent.PathGoal.HasValue && Vector2.Distance(navAgent.PathGoal.Value, targetPos) < travelStopRadius)) + { + if (!navAgent.UpdatePath(targetPos) && targetPredictionTime > 0) + { + navAgent.UpdatePath(target.position); + } + } + else if (distToTarget < travelStopRadius) + { + navAgent.Stop(); + } + } + + private void OnDrawGizmosSelected() + { + Gizmos.color = Color.green; + Gizmos.DrawWireSphere(transform.position, closeEnoughRadius); + + Gizmos.color = Color.blue; + Gizmos.DrawWireSphere(transform.position, travelStopRadius); + } + + private void OnValidate() + { + closeEnoughRadius = Mathf.Max(travelStopRadius, closeEnoughRadius); + } + + private void Reset() + { + navAgent = GetComponent(); + } + + private Vector2 GetTargetPosition() + { + Vector2 tpos = target.position; + if (targetPredictionTime > 0) + { + IVelocityProvider velocityProvider = target.GetComponent(); + if (velocityProvider != null) + return tpos + velocityProvider.WorldVelocity * targetPredictionTime; + + Rigidbody2D rigidbody = target.GetComponent(); + if (rigidbody != null) + return tpos + rigidbody.velocity * targetPredictionTime; + } + return tpos; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/Follower.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/Follower.cs.meta new file mode 100644 index 0000000..adc01c5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/Follower.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3b58755f80ab91479f1f9314acdea17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/FootStepSounds.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/FootStepSounds.cs new file mode 100644 index 0000000..9edbbde --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/FootStepSounds.cs @@ -0,0 +1,90 @@ +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Play foot steps depending on the NavTags at the agents current position. + /// + public class FootStepSounds : MonoBehaviour + { + public AudioClip[] FootStepSoundClips + { + get => footstepSounds; + set + { + if (value == null) + throw new ArgumentNullException(); + if (value.Length != PathBerserker2dSettings.NavTags.Length) + throw new ArgumentException($"FootStepSoundClips needs to be an array of length equal to the amount of NavTags ({PathBerserker2dSettings.NavTags.Length})."); + + footstepSounds = value; + } + } + + [SerializeField] + public AudioSource audioSource = null; + + [SerializeField] + public NavAgent agent = null; + + /// + /// Delay between playing of footstep sounds. + /// + [SerializeField] + public float footStepDelay = 1f; + + /// + /// Used when no NavTag specific footStep was found, or if the current segment has no NavTag. + /// + [SerializeField] + public AudioClip defaultFootstep = null; + + /// + /// Footsteps to use for each NavTag. + /// + [SerializeField] + AudioClip[] footstepSounds = null; + + private float lastFootStepTime; + + void Update() + { + // time to play next step? Is agent moving on segment? + if (Time.time - lastFootStepTime >= footStepDelay && agent.IsMovingOnSegment) + { + lastFootStepTime = Time.time; + int navTagV = agent.CurrentNavTagVector; + + AudioClip chosenClip = defaultFootstep; + // chose the first step sound with matching NavTag + for (int i = 0; i < footstepSounds.Length; i++) + { + if ((navTagV & (1 << i)) != 0) + { + chosenClip = footstepSounds[i]; + break; + } + } + audioSource.PlayOneShot(chosenClip); + } + } + + private void OnValidate() + { + if (footstepSounds == null) + { + footstepSounds = new AudioClip[PathBerserker2dSettings.NavTags.Length]; + } + if (footstepSounds.Length != PathBerserker2dSettings.NavTags.Length) + { + System.Array.Resize(ref footstepSounds, PathBerserker2dSettings.NavTags.Length); + } + } + + private void Reset() + { + agent = GetComponent(); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/FootStepSounds.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/FootStepSounds.cs.meta new file mode 100644 index 0000000..fe65915 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/FootStepSounds.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5f023eaead09b849a79459b344a457f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/KeepGrounded.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/KeepGrounded.cs new file mode 100644 index 0000000..daf409f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/KeepGrounded.cs @@ -0,0 +1,35 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Keeps the agent on moving platforms, by parenting the agent to them. + /// + public class KeepGrounded : MonoBehaviour + { + [SerializeField] + public LayerMask movingPlatformLayermask = 0; + + Transform originalParent; + + private void Awake() + { + originalParent = transform.parent; + } + + void FixedUpdate() + { + var hit = Physics2D.Raycast(transform.position + transform.up * 0.1f, -transform.up, 0.4f, movingPlatformLayermask); + if (hit.collider != null) + { + // we hit a moving platform -> parent + transform.SetParent(hit.collider.transform, true); + } + else + { + // we didn't hit a moving platform -> unparent + transform.SetParent(originalParent, true); + } + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/KeepGrounded.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/KeepGrounded.cs.meta new file mode 100644 index 0000000..bde6e43 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/KeepGrounded.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db3357009171fec4db2b712ce84cd1b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MouseWalker.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MouseWalker.cs new file mode 100644 index 0000000..25526ce --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MouseWalker.cs @@ -0,0 +1,45 @@ +using UnityEngine; +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER +using UnityEngine.InputSystem; +#endif + +namespace PathBerserker2d +{ + /// + /// Let the NavAgent walk to a mouse click. + /// + class MouseWalker : MonoBehaviour + { + [SerializeField] + public NavAgent navAgent; + + void Update() + { + // mouse click occurred? +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + if (Mouse.current.leftButton.wasPressedThisFrame) +#else + if (Input.GetMouseButtonDown(0)) +#endif + { +#if ENABLE_INPUT_SYSTEM && !ENABLE_LEGACY_INPUT_MANAGER + Vector2 pos = Camera.main.ScreenToWorldPoint(Mouse.current.position.ReadValue()); +#else + Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition); +#endif + if (!navAgent.PathTo(pos)) + { + if (navAgent.HasValidPosition) + Debug.Log($"{name}: Pathfinding failed."); + else + Debug.Log($"{name}: Agent is not on a NavSurface."); + } + } + } + + private void Reset() + { + navAgent = GetComponent(); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MouseWalker.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MouseWalker.cs.meta new file mode 100644 index 0000000..d3814b7 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MouseWalker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a20f61a67733b34ba53481d70603e95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MultiGoalWalker.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MultiGoalWalker.cs new file mode 100644 index 0000000..2415940 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MultiGoalWalker.cs @@ -0,0 +1,52 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Let the agent walk to the closest of the given goals. + /// + public class MultiGoalWalker : MonoBehaviour + { + [SerializeField] + public NavAgent navAgent; + [SerializeField] + Transform[] goals = null; + [SerializeField] + public bool activateOnStart = true; + + void Start() + { + if (activateOnStart) + { + MoveToClosestGoal(); + } + } + + private void Reset() + { + navAgent = GetComponent(); + } + + /// + /// Starts moving to closest of this.goals. + /// + public void MoveToClosestGoal() + { + Vector2[] vs = new Vector2[goals.Length]; + for (int i = 0; i < goals.Length; i++) + vs[i] = goals[i].position; + navAgent.PathTo(vs); + } + + /// + /// Starts moving to closest of supplied goals. + /// + public void MoveToClosestGoal(Transform[] goals) + { + Vector2[] vs = new Vector2[goals.Length]; + for (int i = 0; i < goals.Length; i++) + vs[i] = goals[i].position; + navAgent.PathTo(vs); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MultiGoalWalker.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MultiGoalWalker.cs.meta new file mode 100644 index 0000000..dbb1ee3 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/MultiGoalWalker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65ba0666f6ead714a9a712c134268969 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/PatrolWalker.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/PatrolWalker.cs new file mode 100644 index 0000000..af17355 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/PatrolWalker.cs @@ -0,0 +1,79 @@ +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Let the NavAgent walk to a series of goals in a loop. + /// + public class PatrolWalker : MonoBehaviour + { + /// + /// Radius at which the agent starts calculating path to next goal on patrol route. Must be >= 0. + /// + public float CalcNextPathRad + { + get => calcNextPathRad; + set + { + if (calcNextPathRad < 0) + throw new ArgumentException("CalcNextPathRad must be greater or equal to 0"); + calcNextPathRad = value; + } + } + + public Transform[] PatrolRoute + { + get => goals; + set + { + this.goals = value; + this.currentGoal = 0; + } + } + + [SerializeField] + public NavAgent navAgent; + [SerializeField] + Transform[] goals = null; + [SerializeField] + float calcNextPathRad = 0.2f; + + private Transform goal => goals[currentGoal]; + + int currentGoal = 0; + + private void Start() + { + navAgent.PathTo(goal.position); + } + + void Update() + { + if (goals == null) + return; + + // close enough move to next + float dist = Vector2.Distance(navAgent.Position, goal.position); + if (dist < calcNextPathRad) + { + currentGoal++; + if (currentGoal >= goals.Length) + { + currentGoal = 0; + } + navAgent.UpdatePath(goal.position); + } + } + + private void OnValidate() + { + calcNextPathRad = Mathf.Max(calcNextPathRad, 0.1f); + } + + private void Reset() + { + navAgent = GetComponent(); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/PatrolWalker.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/PatrolWalker.cs.meta new file mode 100644 index 0000000..326d581 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/PatrolWalker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2c32017511f38b48a9b544492b5d0f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/RandomWalker.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/RandomWalker.cs new file mode 100644 index 0000000..4cd494f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/RandomWalker.cs @@ -0,0 +1,53 @@ +using System.Collections; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Lets the NavAgent walk to a random point + /// + public class RandomWalker : MonoBehaviour + { + [SerializeField] + public NavAgent navAgent; + + /// + /// The random destination my not always be reachable. RetryCount determines the maximum amount of rolls for a random reachable position. + /// + [SerializeField, Tooltip("The random destination may not always be reachable. RetryCount determines the maximum amount of rolls each update for a random reachable position.")] + public int retryCount = 10; + + /// + /// Will make the agent pick a new random position to walk to, after reaching the previous one. Makes the agent walk between random points, until its set to false. + /// + [SerializeField] + public bool keepWalkingRandomly = true; + + void Update() + { + if (keepWalkingRandomly && navAgent.IsIdle) + { + StartRandomWalk(); + } + } + + private void Reset() + { + navAgent = GetComponent(); + } + + /// + /// Picks a random position and makes the NavAgent walk to it. + /// + /// True, if a random reachable position was found within a maximum of retryCount tries. + public bool StartRandomWalk() + { + for (int i = 0; i < retryCount && !navAgent.SetRandomDestination(); i++) + { + + } + + return !navAgent.IsIdle; + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/RandomWalker.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/RandomWalker.cs.meta new file mode 100644 index 0000000..c2374e1 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/NavAgentUsers/RandomWalker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9fc605c0d97145a45be2755ef52445e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/TransformBasedMovement.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/TransformBasedMovement.cs new file mode 100644 index 0000000..c7c5615 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/TransformBasedMovement.cs @@ -0,0 +1,369 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Moves a NavAgent by manipulating its transform. + /// + public class TransformBasedMovement : MonoBehaviour + { + [System.Flags] + public enum FeatureFlags + { + SegmentMovement = 1, + JumpLinks = 2, + CornerLinks = 4, + FallLinks = 8, + TeleportLinks = 16, + ClimbLinks = 32, + ElevatorLinks = 64, + OtherLinks = 128, + } + + [Tooltip("Speed on segments in unit/s.")] + [SerializeField] + public float movementSpeed = 5; + + [Tooltip("Speed on corner links in degrees/s.")] + [SerializeField] + public float cornerSpeed = 100; + + [Tooltip("Speed on jump links in unit/s.")] + [SerializeField] + public float jumpSpeed = 5; + + [Tooltip("Speed on fall links in unit/s.")] + [SerializeField] + public float fallSpeed = 5; + + [Tooltip("Speed on climb links in unit/s.")] + [SerializeField] + public float climbSpeed = 5; + + /// + /// If false, agent will not be rotated. + /// + [Tooltip("Controls whether the default movement handler is allowed to rotate the agent.")] + [SerializeField] + public bool enableAgentRotation = true; + + /// + /// Sets which links and segments this component will handle. Useful to override an Agents default behavior for a certain link type or segment. + /// + [Tooltip("Enable features by setting the flag.")] + [SerializeField] + public FeatureFlags enabledFeatures = (FeatureFlags)int.MaxValue; + + private float timeOnLink; + private float timeToCompleteLink; + private Vector2 direction; + private int state = 0; + private Transform elevatorTrans; + private float deltaDistance; + private bool handleLinkMovement; + private int minNumberOfLinkExecutions; + private Vector2 storedLinkStart; + + private void OnEnable() + { + var agent = GetComponent(); + agent.OnStartLinkTraversal += Agent_StartLinkTraversalEvent; + agent.OnStartSegmentTraversal += Agent_OnStartSegmentTraversal; + agent.OnSegmentTraversal += Agent_OnSegmentTraversal; + agent.OnLinkTraversal += Agent_OnLinkTraversal; + } + + private void OnDisable() + { + var agent = GetComponent(); + agent.OnStartLinkTraversal -= Agent_StartLinkTraversalEvent; + agent.OnStartSegmentTraversal -= Agent_OnStartSegmentTraversal; + agent.OnSegmentTraversal -= Agent_OnSegmentTraversal; + agent.OnLinkTraversal -= Agent_OnLinkTraversal; + } + + private void OnValidate() + { + if (jumpSpeed <= 0) + jumpSpeed = 0.01f; + if (fallSpeed <= 0) + fallSpeed = 0.01f; + if (climbSpeed <= 0) + climbSpeed = 0.01f; + } + + private void Agent_OnStartSegmentTraversal(NavAgent agent) + { + + } + + private void Agent_OnSegmentTraversal(NavAgent agent) + { + if (!enabledFeatures.HasFlag(FeatureFlags.SegmentMovement)) + return; + + Vector2 newPos; + bool reachedGoal = MoveAlongSegment(agent.Position, agent.PathSubGoal, agent.CurrentPathSegment.Point, agent.CurrentPathSegment.Tangent, Time.deltaTime * movementSpeed, out newPos); + agent.Position = newPos; + + if (reachedGoal) + { + agent.CompleteSegmentTraversal(); + } + } + + private void Agent_StartLinkTraversalEvent(NavAgent agent) + { + string linkType = agent.CurrentPathSegment.link.LinkTypeName; + + bool unknownLinkType = linkType != "corner" && linkType != "fall" && linkType != "jump" && linkType != "elevator" && linkType != "teleport" && linkType != "climb"; + + handleLinkMovement = + (unknownLinkType && enabledFeatures.HasFlag(FeatureFlags.OtherLinks)) || + (linkType == "corner" && enabledFeatures.HasFlag(FeatureFlags.CornerLinks)) || + (linkType == "fall" && enabledFeatures.HasFlag(FeatureFlags.FallLinks)) || + (linkType == "jump" && enabledFeatures.HasFlag(FeatureFlags.JumpLinks)) || + (linkType == "elevator" && enabledFeatures.HasFlag(FeatureFlags.ElevatorLinks)) || + (linkType == "teleport" && enabledFeatures.HasFlag(FeatureFlags.TeleportLinks)) || + (linkType == "climb" && enabledFeatures.HasFlag(FeatureFlags.ClimbLinks)); + + if (!handleLinkMovement) + return; + + timeOnLink = 0; + Vector2 delta = agent.PathSubGoal - agent.CurrentPathSegment.LinkStart; + deltaDistance = delta.magnitude; + direction = delta / deltaDistance; + minNumberOfLinkExecutions = 1; + storedLinkStart = agent.CurrentPathSegment.LinkStart; + + float speed = 1; + switch (agent.CurrentPathSegment.link.LinkTypeName) + { + case "corner": + if (!enableAgentRotation) + { + agent.CompleteLinkTraversal(); + break; + } + speed = cornerSpeed; + deltaDistance = agent.CurrentPathSegment.link.TravelCosts(Vector2.zero, Vector2.zero); + break; + case "fall": + speed = fallSpeed; + break; + case "climb": + speed = climbSpeed; + + Vector2 pos = agent.CurrentPathSegment.link.GameObject.transform.position; + Vector2 dir = agent.CurrentPathSegment.link.GameObject.transform.up; + + Vector2 start = Geometry.ProjectPointOnLine(agent.CurrentPathSegment.LinkStart, pos, dir); + Vector2 end = Geometry.ProjectPointOnLine(agent.PathSubGoal, pos, dir); + deltaDistance = Vector2.Distance(start, pos) + Vector2.Distance(start, end) + Vector2.Distance(end, agent.PathSubGoal); + + state = 0; + minNumberOfLinkExecutions = 3; + break; + case "jump": + speed = jumpSpeed; + break; + case "elevator": + speed = movementSpeed; + state = 0; + minNumberOfLinkExecutions = 4; + elevatorTrans = agent.CurrentPathSegment.link.GameObject.transform; + var childTrans = agent.CurrentPathSegment.link.GameObject.GetComponentsInChildren(); + foreach (var t in childTrans) + { + if (t.gameObject.layer == 8) + { + elevatorTrans = t; + break; + } + } + break; + } + + if (agent.CurrentPathSegment.link.LinkTypeName == "elevator") + timeToCompleteLink = float.PositiveInfinity; + else + timeToCompleteLink = (deltaDistance / speed); + } + + private void Agent_OnLinkTraversal(NavAgent agent) + { + if (!handleLinkMovement) + return; + + timeOnLink += Time.deltaTime; + timeOnLink = Mathf.Min(timeToCompleteLink, timeOnLink); + + switch (agent.CurrentPathSegment.link.LinkTypeName) + { + case "corner": + Corner(agent); + break; + case "jump": + Jump(agent); + break; + case "fall": + Fall(agent); + break; + case "teleport": + Teleport(agent); + timeOnLink = timeToCompleteLink + 1; + break; + case "climb": + Climb(agent); + break; + case "elevator": + Elevator(agent); + break; + default: + Jump(agent); + break; + } + + minNumberOfLinkExecutions--; + if (timeOnLink >= timeToCompleteLink && minNumberOfLinkExecutions <= 0) + { + agent.CompleteLinkTraversal(); + return; + } + } + + private void Corner(NavAgent agent) + { + var from = Quaternion.LookRotation(Vector3.forward, agent.CurrentPathSegment.Normal); + var to = Quaternion.LookRotation(Vector3.forward, agent.CurrentPathSegment.Next.Normal); + + + agent.transform.rotation = Quaternion.Slerp( + from, + to, + agent.TimeOnLink / (deltaDistance / cornerSpeed)); + } + + private void Jump(NavAgent agent) + { + Vector2 newPos = storedLinkStart + direction * timeOnLink * jumpSpeed; + newPos.y += deltaDistance * 0.3f * Mathf.Sin(Mathf.PI * timeOnLink / timeToCompleteLink); + agent.Position = newPos; + } + + private void Fall(NavAgent agent) + { + Vector2 newPos = storedLinkStart + direction * timeOnLink * fallSpeed; + agent.Position = newPos; + } + + private void Climb(NavAgent agent) + { + Vector2 linkPos = agent.CurrentPathSegment.link.GameObject.transform.position; + Vector2 linkDir = agent.CurrentPathSegment.link.GameObject.transform.up; + + Vector2 newPos = Vector2.zero; + switch (state) + { + case 0: + Vector2 start = Geometry.ProjectPointOnLine(agent.CurrentPathSegment.LinkStart, linkPos, linkDir); + if (MoveTo(agent.Position, start, climbSpeed * Time.deltaTime, out newPos)) + { + state = 1; + } + break; + case 1: + Vector2 end = Geometry.ProjectPointOnLine(agent.PathSubGoal, linkPos, linkDir); + if (MoveTo(agent.Position, end, climbSpeed * Time.deltaTime, out newPos)) + { + state = 2; + } + break; + case 2: + if (MoveTo(agent.Position, agent.PathSubGoal, climbSpeed * Time.deltaTime, out newPos)) + { + // force early exit + timeToCompleteLink = 0; + } + break; + } + agent.Position = newPos; + } + + private void Elevator(NavAgent agent) + { + // 3 phase + // 1. move on elevator + // 2. wait to reach destination + // 3. leave + + Vector2 newPos = agent.Position; + switch (state) + { + case 0: + Vector2 target = elevatorTrans.position; + if (agent.CurrentPathSegment.link.IsTraversable && Mathf.Abs(newPos.y - target.y) < 0.1f) + { + state = 1; + newPos.y = target.y; + direction = Vector2.right * Mathf.Sign(target.x - storedLinkStart.x); + } + break; + case 1: + newPos += movementSpeed * direction * Time.deltaTime; + + float targetX = agent.CurrentPathSegment.link.GameObject.transform.position.x; + if ((newPos.x - targetX) * direction.x >= 0) + { + state = 2; + newPos.x = targetX; + } + break; + case 2: + // wait till y matches elevation + // cast ray downwards to move with platform + float targetY = agent.PathSubGoal.y; + if (agent.CurrentPathSegment.link.IsTraversable && Mathf.Abs(newPos.y - targetY) < 0.1f) + { + state = 3; + newPos.y = targetY; + direction = Vector2.right * Mathf.Sign(agent.PathSubGoal.x - newPos.x); + timeOnLink = 0; + timeToCompleteLink = Mathf.Abs(agent.PathSubGoal.x - newPos.x) / movementSpeed; + } + break; + case 3: + newPos += movementSpeed * direction * Time.deltaTime; + break; + } + agent.Position = newPos; + } + + private void Teleport(NavAgent agent) + { + agent.Position = agent.PathSubGoal; + } + + private static bool MoveAlongSegment(Vector2 pos, Vector2 goal, Vector2 segPoint, Vector2 segTangent, float amount, out Vector2 newPos) + { + pos = Geometry.ProjectPointOnLine(pos, segPoint, segTangent); + goal = Geometry.ProjectPointOnLine(goal, segPoint, segTangent); + return MoveTo(pos, goal, amount, out newPos); + } + + private static bool MoveTo(Vector2 pos, Vector2 goal, float amount, out Vector2 newPos) + { + Vector2 dir = goal - pos; + float distance = dir.magnitude; + if (distance <= amount) + { + newPos = goal; + return true; + } + + newPos = pos + dir * amount / distance; + return false; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/TransformBasedMovement.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/TransformBasedMovement.cs.meta new file mode 100644 index 0000000..df66c74 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavAgent/TransformBasedMovement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77030faff3812a7429edeaca91e9c873 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph.meta new file mode 100644 index 0000000..e5ac780 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cd0d5b7789d46e742afeb4aa400c1822 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraph.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraph.cs new file mode 100644 index 0000000..8f75ef7 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraph.cs @@ -0,0 +1,831 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using UnityEngine; +using UnityEngine.XR.WSA; + +namespace PathBerserker2d +{ + public enum NavGraphChange + { + NavSurfaceAdded, + NavSurfaceRemoved, + NavLinkAdded, + NavLinkRemoved, + SegmentModifierAdded, + SegmentModifierRemoved, + NavLinkMoved + } + + public interface INavGraphChangeSource + { + /// + /// Called after a group of changes has been applied to the NavGraph. When this is called, the changes are already applied and ready for use. For example NavSurfaceAdded means that that NavSurface is ready to be pathfinded on from now on, link mapping will work etc. + /// This may be called multiple times for the segment modifier related events as one SegmentModifier GameObject can produce multiple SegmentModifier changes. + /// Parameters: + /// - Change type + /// - the PBComponentId of the component (NavSurface, Link, SegmentModifier, ...) had. PBComponentId is a custom id that PathBerserker gives each component. Each component (NavSurface, Link, SegmentModifier, ...) has a PBComponentId property you can query to get its id. + /// + event Action OnGraphChange; + } + + internal class NavGraph : INavGraphChangeSource + { + public ReaderWriterLock graphLock = new ReaderWriterLock(); + public event Action OnGraphChange; + + internal readonly Dictionary segmentTrees = new Dictionary(); + + List changes = new List(20); + List stagedNewSurfaces = new List(4); + + private int pathfinderThreadCount; + + public NavGraph(int pathfinderThreadCount) + { + this.pathfinderThreadCount = pathfinderThreadCount; + } + + public void AddNavSurface(NavSurface surface) + { + var addSurface = new AddNavSurfaceChange(surface, pathfinderThreadCount); + if (!stagedNewSurfaces.Any(item => item.surface == surface)) + stagedNewSurfaces.Add(addSurface); + changes.Add(addSurface); + } + + public void RemoveNavSurface(NavSurface surface) + { + changes.Add(new RemoveNavSurfaceChange(surface)); + } + + public void AddNavLink(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal) + { + changes.Add(new AddNavLinkChange(link, start, goal)); + } + + public void RemoveNavLink(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal) + { + changes.Add(new RemoveNavLinkChange(link, start, goal)); + } + + public void MoveNavLinkStart(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal, NavSegmentPositionPointer oldStart) + { + changes.Add(new MoveNavLinkStartChange(link, start, goal, oldStart)); + } + + public void MoveNavLinkGoal(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal, NavSegmentPositionPointer oldGoal) + { + changes.Add(new MoveNavLinkGoalChange(link, start, goal, oldGoal)); + } + + public void AddSegmentModifier(NavAreaMarkerInstance modifier) + { + changes.Add(new AddSegmentModifierChange(modifier)); + } + + public void RemoveSegmentModifier(NavAreaMarkerInstance modifier) + { + changes.Add(new RemoveSegmentModifierChange(modifier)); + } + + public void Update() + { + // update navsurface position matricies + foreach (var entry in segmentTrees) + { + if (entry.Key != null) + entry.Value.LocalToWorld = entry.Key.LocalToWorldMatrix; + } + + if (changes.Count + stagedNewSurfaces.Count == 0) + return; + + graphLock.AcquireWriterLock(-1); + try + { + for (int i = 0; i < changes.Count; i++) + changes[i].Apply(this); + } + finally + { + graphLock.ReleaseWriterLock(); + } + + // fire events + if (OnGraphChange != null) + { + for (int i = 0; i < changes.Count; i++) + { + try + { + OnGraphChange(changes[i].ChangeType, changes[i].ChangeSource); + } + catch (Exception e) + { + // we don't want listener exceptions to take down the pathfinding system with it + Debug.LogError(e); + } + } + } + + stagedNewSurfaces.Clear(); + changes.Clear(); + } + + public void ForceApplyChanges() + { + for (int i = 0; i < changes.Count; i++) + changes[i].Apply(this); + + stagedNewSurfaces.Clear(); + changes.Clear(); + } + + public bool TryMapAgent(Vector2 position, NavSegmentPositionPointer pointer, NavAgent agent, out NavSegmentPositionPointer result) + { + if (!pointer.IsInvalid() && agent.CouldBeLocatedAt(pointer)) + { + NavGraphNodeCluster cluster; + if (TryGetClusterAt(pointer, out cluster)) + { + Vector2 localPos = pointer.surface.WorldToLocal(position); + float t = cluster.DistanceOfPointAlongSegment(localPos); + Vector2 proj = cluster.GetPositionAlongSegment(t); + float dist = (proj - localPos).sqrMagnitude; + + if (dist < 0.001f) + { + result = new NavSegmentPositionPointer(pointer.surface, pointer.cluster, cluster.DistanceOfPointAlongSegment(localPos)); + return true; + } + } + } + + return TryMapPoint(position, agent.CouldBeLocatedAt, out result); + } + + public bool TryMapPoint(Vector2 position, out NavSegmentPositionPointer pointer) + { + return TryMapPoint(position, (p) => true, out pointer); + } + + public bool TryMapPoint(Vector2 position, Func pointFilter, out NavSegmentPositionPointer pointer) + { + return TryMapPoint(position, pointFilter, PathBerserker2dSettings.PointMappingDistance, out pointer); + } + + public bool TryMapPoint(Vector2 position, Func pointFilter, float pointMapDistance, out NavSegmentPositionPointer result) + { + float halfPointMapDistance = pointMapDistance / 2f; + Rect queryAABB = new Rect(position - new Vector2(halfPointMapDistance, halfPointMapDistance), new Vector2(pointMapDistance, pointMapDistance)); + float minDistance = pointMapDistance; + result = NavSegmentPositionPointer.Invalid; + foreach (var pair in segmentTrees) + { + TryMapPointSurface(pair.Key, pair.Value.Clusters, queryAABB, position, pointFilter, ref minDistance, ref result); + } + + return result.IsValid(); + } + + public bool TryMapPointWithStaged(Vector2 position, out NavSegmentPositionPointer result) + { + if (TryMapPoint(position, out result)) + return true; + + float pointMapDistance = PathBerserker2dSettings.PointMappingDistance; + float halfPointMapDistance = pointMapDistance / 2f; + Rect queryAABB = new Rect(position - new Vector2(halfPointMapDistance, halfPointMapDistance), new Vector2(pointMapDistance, pointMapDistance)); + float minDistance = pointMapDistance; + result = NavSegmentPositionPointer.Invalid; + foreach (var change in stagedNewSurfaces) + { + TryMapPointSurface(change.surface, change.record.Clusters, queryAABB, position, (p) => true, ref minDistance, ref result); + } + + return result.IsValid(); + } + + public List BoxCast(Rect rect, float rotation, float filterAngleFrom, float filterAngleTo) + { + List results = new List(); + + // find bb of rect + Vector2[] rotCorn = ExtendedGeometry.RotateRectangle(rect, rotation); + + Vector2 min = Vector2.Min(Vector2.Min(Vector2.Min(rotCorn[0], rotCorn[1]), rotCorn[2]), rotCorn[3]); + Vector2 max = Vector2.Max(Vector2.Max(Vector2.Max(rotCorn[0], rotCorn[1]), rotCorn[2]), rotCorn[3]); + Rect boundingRect = new Rect(min, max - min); + + Matrix4x4 rotationMatrix = Matrix4x4.Rotate(Quaternion.Euler(0, 0, rotation)); + + foreach (var pair in segmentTrees) + { + BoxCastSurface(pair.Key, pair.Value.Clusters, rect, boundingRect, rotationMatrix, filterAngleFrom, filterAngleTo, ref results); + } + return results; + } + + public List BoxCastWithStaged(Rect rect, float rotation, float filterAngleFrom, float filterAngleTo) + { + List results = BoxCast(rect, rotation, filterAngleFrom, filterAngleTo); + + // find bb of rect + Vector2[] rotCorn = ExtendedGeometry.RotateRectangle(rect, rotation); + + Vector2 min = Vector2.Min(Vector2.Min(Vector2.Min(rotCorn[0], rotCorn[1]), rotCorn[2]), rotCorn[3]); + Vector2 max = Vector2.Max(Vector2.Max(Vector2.Max(rotCorn[0], rotCorn[1]), rotCorn[2]), rotCorn[3]); + Rect boundingRect = new Rect(min, max - min); + + Matrix4x4 rotationMatrix = Matrix4x4.Rotate(Quaternion.Euler(0, 0, rotation)); + + foreach (var change in stagedNewSurfaces) + { + BoxCastSurface(change.surface, change.record.Clusters, rect, boundingRect, rotationMatrix, filterAngleFrom, filterAngleTo, ref results); + } + return results; + } + + [Obsolete("Use TryMapPoint instead")] + public bool TryFindClosestPointTo(Vector2 position, float maxMappingDistance, out NavSegmentPositionPointer pointer) + { + return TryMapPoint(position, (p) => true, maxMappingDistance, out pointer); + } + + public Vector2 GetRandomPointOnGraph() + { + if (segmentTrees.Count == 0) + return Vector2.zero; + + var surf = Utility.WeightedRandomChoice(segmentTrees.Keys, + segmentTrees.Keys.Select(s => s.TotalLineLength)); + + var seg = Utility.WeightedRandomChoice(surf.NavSegments, + surf.NavSegments.Select(s => s.Length), surf.TotalLineLength); + + var t = UnityEngine.Random.Range(0, seg.Length); + + return surf.LocalToWorld(seg.GetPositionAlongSegment(t)); + } + + private void TryMapPointSurface(NavSurface surface, B2DynamicTree tree, Rect queryAABB, Vector2 position, Func filter, ref float minDistance, ref NavSegmentPositionPointer result) + { + if (!surface.WorldBounds.Overlaps(queryAABB)) + { + return; + } + + Vector2 localPoint = surface.WorldToLocal(position); + Rect localQuery = new Rect(surface.WorldToLocal(queryAABB.position), queryAABB.size); + + var iterator = tree.Query(localQuery); + while (iterator.MoveNext()) + { + var clusterCandidate = tree.GetUserData(iterator.Current); + float t = clusterCandidate.DistanceOfPointAlongSegment(localPoint); + Vector2 proj = clusterCandidate.GetPositionAlongSegment(t); + float dist = (proj - localPoint).magnitude; + + if (dist >= minDistance) + // closest point is already to far away + continue; + + if (filter(new NavSegmentPositionPointer(surface, clusterCandidate, t))) + { + minDistance = dist; + result = new NavSegmentPositionPointer(surface, clusterCandidate, t); + } + else + { + // sub sample segment + for (t = 0; t < clusterCandidate.Length; t += 0.5f) + { + if (filter(new NavSegmentPositionPointer(surface, clusterCandidate, t))) + { + proj = clusterCandidate.GetPositionAlongSegment(t); + dist = (proj - localPoint).magnitude; + + if (dist >= minDistance) + continue; + + result = new NavSegmentPositionPointer(surface, clusterCandidate, t); + minDistance = dist; + break; + } + } + } + } + } + + private void BoxCastSurface(NavSurface surface, B2DynamicTree tree, Rect rect, Rect boundingRect, Matrix4x4 rotationMatrix, float filterAngleFrom, float filterAngleTo, ref List results) + { + if (!surface.WorldBounds.Overlaps(boundingRect)) + return; + + Rect localQuery = new Rect(boundingRect); + localQuery.center = surface.WorldToLocal(localQuery.center); + + Rect localCast = new Rect(rect); + //localCast.center = surface.WorldToLocal(localCast.center); + + float u1, u2; + var iterator = tree.Query(localQuery); + while (iterator.MoveNext()) + { + var segCandidate = tree.GetUserData(iterator.Current); + + float angle = Vector2.SignedAngle(segCandidate.Tangent, Vector2.up); + if (!ExtendedGeometry.IsAngleBetweenAngles(filterAngleFrom, filterAngleTo, angle)) + continue; + + // test for rect intersection + Vector2 rotatedStart = rotationMatrix * surface.LocalToWorld(segCandidate.Start); + Vector2 rotatedEnd = rotationMatrix * surface.LocalToWorld(segCandidate.End); + if (ExtendedGeometry.RectLineIntersection(localCast, rotatedStart, rotatedEnd, out u1, out u2)) + { + u1 = u1 < 0 ? 0 : u1; + u2 = u2 > 1 ? 1 : u2; + u1 *= segCandidate.Length; + u2 *= segCandidate.Length; + + results.Add(new NavSubsegmentPointer(surface, iterator.Current, u1, u2 - u1)); + } + } + } + + private void InternalAddNavSurface(NavSurface surface, + NavSurfaceRecord record, int[] proxyIndecies) + { + if (segmentTrees.ContainsKey(surface)) + { +#if PBDEBUG + Debug.Log("AddNavSurface called but surface was already added!"); +#endif + return; + } + + // add corner links for connected segments + for (int iSeg = 0; iSeg < surface.NavSegments.Count; iSeg++) + { + var seg = surface.NavSegments[iSeg]; + var cluster = record.Clusters.GetUserData(proxyIndecies[iSeg]); + + if (seg.HasNext) + { + var goalCluster = record.Clusters.GetUserData(proxyIndecies[seg.NextSegmentIndex]); + + AddCornerLink(cluster, cluster.Length, surface, goalCluster, 0); + } + if (seg.HasPrev) + { + var goalCluster = record.Clusters.GetUserData(proxyIndecies[seg.PrevSegmentIndex]); + + AddCornerLink(cluster, 0, surface, goalCluster, goalCluster.Length); + } + } + + // add corner links for touching segments + for (int iSeg = 0; iSeg < surface.NavSegments.Count; iSeg++) + { + var seg = surface.NavSegments[iSeg]; + int proxyIndex = proxyIndecies[iSeg]; + var startCluster = record.Clusters.GetUserData(proxyIndex); + + CreateCornerLinksForClosePoints(seg.Start, startCluster, proxyIndex, record.Clusters, proxyIndecies, surface); + CreateCornerLinksForClosePoints(seg.End, startCluster, proxyIndex, record.Clusters, proxyIndecies, surface); + } + + segmentTrees.Add(surface, record); + } + + private void AddCornerLink(NavGraphNodeCluster startCluster, float startT, NavSurface startSurface, NavGraphNodeCluster goalCluster, float goalT) + { + float angle = Vector2.Angle(startCluster.Normal, goalCluster.Normal); + angle = angle < 0 ? 360 - angle : angle; + + var start = new NavSegmentPositionPointer(startSurface, startCluster, startT); + var goal = new NavSegmentPositionPointer(startSurface, goalCluster, goalT); + + startCluster.AddNode(pathfinderThreadCount, start.t, goal.cluster, goal.t, new CornerLink(start, goal, angle)); + } + + private void CreateCornerLinksForClosePoints(Vector2 point, NavGraphNodeCluster pointOwner, int pointOwnerProxyIndex, B2DynamicTree clusterTree, int[] proxyIndicies, NavSurface surface) + { + int prevSegProxyIndex = pointOwner.HasPrev ? proxyIndicies[pointOwner.PrevSegmentIndex] : -1; + + Vector2 queryRectSize = new Vector2(0.01f, 0.01f); + Rect query = new Rect(point - queryRectSize, point + queryRectSize); + var iterator = clusterTree.Query(query); + + while (iterator.MoveNext()) + { + if (prevSegProxyIndex == iterator.Current || iterator.Current == pointOwnerProxyIndex) + continue; + + var goalCluster = clusterTree.GetUserData(iterator.Current); + if (goalCluster.PointDistance(point) < 0.01f) + { + float startT = pointOwner.DistanceOfPointAlongSegment(point); + float goalT = goalCluster.DistanceOfPointAlongSegment(point); + + AddCornerLink(pointOwner, startT, surface, goalCluster, goalT); + AddCornerLink(goalCluster, goalT, surface, pointOwner, startT); + } + } + } + + private bool DoesLinkExist(INavLinkInstance link, NavSegmentPositionPointer start) + { + NavGraphNodeCluster cluster; + if (!TryGetClusterAt(start, out cluster)) + { + return false; + } + return cluster.DoesNodeExist(link); + } + + private void InternalRemoveNavSurface(NavSurface surface) + { + NavSurfaceRecord record = null; + try + { + record = segmentTrees[surface]; + + } + catch (KeyNotFoundException) + { +#if PBDEBUG + Debug.Log("RemoveNavSurface called but surface doesn't exist!"); +#endif + return; + } + record.Destroy(this); + segmentTrees.Remove(surface); + } + + private void InternalAddNavLink(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal) + { + start.cluster.AddNode( + pathfinderThreadCount, + start.t, + goal.cluster, + goal.t, + link); + + CreateSoftRefLink(link, start.surface); + if (start.surface != goal.surface) + { + CreateSoftRefLink(link, goal.surface); + } + } + + private void CreateSoftRefLink(INavLinkInstance link, NavSurface targetSurface) + { + try + { + segmentTrees[targetSurface].AddSoftRefLink(link); + } + catch (KeyNotFoundException) + { + // must be still staged + for (int i = 0; i < stagedNewSurfaces.Count; i++) + { + if (stagedNewSurfaces[i].surface == targetSurface) + { + stagedNewSurfaces[i].record.AddSoftRefLink(link); + return; + } + } + + throw new KeyNotFoundException(); + } + } + + private void RemoveSoftRefLink(INavLinkInstance link, NavSurface targetSurface) + { + if (targetSurface == null) + return; + try + { + segmentTrees[targetSurface].RemoveSoftRefLink(link); + } + catch (KeyNotFoundException) + { + // must be still staged + for (int i = 0; i < stagedNewSurfaces.Count; i++) + { + if (stagedNewSurfaces[i].surface == targetSurface) + { + stagedNewSurfaces[i].record.RemoveSoftRefLink(link); + return; + } + } + + throw new KeyNotFoundException(); + } + } + + internal void InternalRemoveNavLink(INavLinkInstance link, NavSegmentPositionPointer start, + NavSegmentPositionPointer goal) + { + if (start.surface == null || !DoesLinkExist(link, start)) + return; + + start.cluster.RemoveNode(link); + RemoveSoftRefLink(link, start.surface); + if (start.surface != goal.surface && segmentTrees.ContainsKey(goal.surface)) + RemoveSoftRefLink(link, goal.surface); + + link.OnRemove(); + } + + private void InternalMoveNavLinkStart(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal, NavSegmentPositionPointer oldStart) + { + if (oldStart.surface == start.surface && oldStart.cluster == start.cluster) + { + oldStart.cluster.MoveNode(link, start.t); + } + else + { + oldStart.cluster.RemoveNode(link); + RemoveSoftRefLink(link, oldStart.surface); + if (oldStart.surface != goal.surface) + RemoveSoftRefLink(link, goal.surface); + + InternalAddNavLink(link, start, goal); + } + } + + private void InternalMoveNavLinkGoal(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal, NavSegmentPositionPointer oldGoal) + { + var node = start.cluster.GetNode(link); + if (oldGoal.surface != goal.surface || oldGoal.cluster != goal.cluster) + node.LinkTarget = goal.cluster; + node.LinkTargetT = goal.t; + + if (goal.surface != oldGoal.surface) + { + if (start.surface != oldGoal.surface) + RemoveSoftRefLink(link, oldGoal.surface); + + if (start.surface != goal.surface) + CreateSoftRefLink(link, goal.surface); + } + } + + private void InternalAddSegmentModifier(NavAreaMarkerInstance mod) + { + if (TryGetClusterAt(mod.position, out var cluster)) + cluster.AddNodeClusterModifier(mod); + } + + private void InternalRemoveSegmentModifier(NavAreaMarkerInstance mod) + { + if (TryGetClusterAt(mod.position, out var cluster)) + cluster.RemoveNodeClusterModifier(mod); + } + + public bool TryGetClusterAt(NavSegmentPositionPointer tPoint, out NavGraphNodeCluster cluster) + { + if (tPoint.IsInvalid() || !segmentTrees.TryGetValue(tPoint.surface, out _)) + { + cluster = null; + return false; + } + + cluster = tPoint.cluster; + return true; + } + + public bool TryGetClusterAt(NavSubsegmentPointer tPoint, out NavGraphNodeCluster cluster) + { + NavSurfaceRecord navRec; + if (tPoint.IsInvalid() || !segmentTrees.TryGetValue(tPoint.surface, out navRec)) + { + cluster = null; + return false; + } + + cluster = navRec.Clusters.GetUserData(tPoint.proxyDataIndex); + return true; + } + + interface IGraphChange + { + NavGraphChange ChangeType { get; } + int ChangeSource { get; } + void Apply(NavGraph graph); + } + + class AddNavSurfaceChange : IGraphChange + { + public NavGraphChange ChangeType => NavGraphChange.NavSurfaceAdded; + public int ChangeSource { get; } + + public readonly NavSurfaceRecord record; + public readonly NavSurface surface; + int[] proxyIndecies; + + public AddNavSurfaceChange(NavSurface surface, int threadCount) + { + this.surface = surface; + this.ChangeSource = surface.PBComponentId; + + var tree = new B2DynamicTree(surface.NavSegments.Count + 10); + + proxyIndecies = new int[surface.NavSegments.Count]; + record = new NavSurfaceRecord(tree, surface.LocalToWorldMatrix, surface); + int fill = 0; + foreach (var seg in surface.NavSegments) + { + proxyIndecies[fill++] = tree.CreateProxy(seg.AABB, new NavGraphNodeCluster(seg, threadCount, record)); + } + } + + public void Apply(NavGraph graph) + { +#if PBDEBUG + Debug.Log("Added surface to graph"); +#endif + graph.InternalAddNavSurface(surface, record, proxyIndecies); + } + } + + class RemoveNavSurfaceChange : IGraphChange + { + public NavGraphChange ChangeType => NavGraphChange.NavSurfaceRemoved; + public int ChangeSource { get; } + + NavSurface surface; + GameObject changeSource; + + public RemoveNavSurfaceChange(NavSurface surface) + { + this.surface = surface; + this.ChangeSource = surface.PBComponentId; + } + + public void Apply(NavGraph graph) + { +#if PBDEBUG + Debug.Log("Removed surface from graph"); +#endif + graph.InternalRemoveNavSurface(surface); + } + } + + class AddNavLinkChange : IGraphChange + { + public NavGraphChange ChangeType => NavGraphChange.NavLinkAdded; + public int ChangeSource { get; } + + INavLinkInstance link; + NavSegmentPositionPointer start; + NavSegmentPositionPointer goal; + + public AddNavLinkChange(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal) + { + this.link = link; + this.start = start; + this.goal = goal; + ChangeSource = link.PBComponentId; + } + + public void Apply(NavGraph graph) + { +#if PBDEBUG + Debug.Log("Added link to graph"); +#endif + graph.InternalAddNavLink(link, start, goal); + } + } + + class RemoveNavLinkChange : IGraphChange + { + public NavGraphChange ChangeType => NavGraphChange.NavLinkRemoved; + public int ChangeSource { get; } + + INavLinkInstance link; + NavSegmentPositionPointer start; + NavSegmentPositionPointer goal; + + public RemoveNavLinkChange(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal) + { + this.link = link; + this.start = start; + this.goal = goal; + ChangeSource = link.PBComponentId; + } + + public void Apply(NavGraph graph) + { +#if PBDEBUG + Debug.Log("Removed link from graph"); +#endif + graph.InternalRemoveNavLink(link, start, goal); + } + } + + class MoveNavLinkStartChange : IGraphChange + { + public NavGraphChange ChangeType => NavGraphChange.NavLinkMoved; + public int ChangeSource { get; } + + INavLinkInstance link; + NavSegmentPositionPointer start; + NavSegmentPositionPointer goal; + NavSegmentPositionPointer oldStart; + + public MoveNavLinkStartChange(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal, NavSegmentPositionPointer oldStart) + { + this.link = link; + this.start = start; + this.goal = goal; + this.oldStart = oldStart; + ChangeSource = link.PBComponentId; + } + + public void Apply(NavGraph graph) + { +#if PBDEBUG + Debug.Log("Moved link start in graph"); +#endif + graph.InternalMoveNavLinkStart(link, start, goal, oldStart); + } + } + + class MoveNavLinkGoalChange : IGraphChange + { + public NavGraphChange ChangeType => NavGraphChange.NavLinkMoved; + public int ChangeSource { get; } + + INavLinkInstance link; + NavSegmentPositionPointer start; + NavSegmentPositionPointer goal; + NavSegmentPositionPointer oldGoal; + + public MoveNavLinkGoalChange(INavLinkInstance link, NavSegmentPositionPointer start, NavSegmentPositionPointer goal, NavSegmentPositionPointer oldGoal) + { + this.link = link; + this.start = start; + this.goal = goal; + this.oldGoal = oldGoal; + ChangeSource = link.PBComponentId; + } + + public void Apply(NavGraph graph) + { +#if PBDEBUG + Debug.Log("Moved link goal in graph"); +#endif + graph.InternalMoveNavLinkGoal(link, start, goal, oldGoal); + } + } + + class AddSegmentModifierChange : IGraphChange + { + public NavGraphChange ChangeType => NavGraphChange.SegmentModifierAdded; + public int ChangeSource { get; } + + NavAreaMarkerInstance mod; + + public AddSegmentModifierChange(NavAreaMarkerInstance mod) + { + this.mod = mod; + ChangeSource = mod.PBComponentId; + } + + public void Apply(NavGraph graph) + { +#if PBDEBUG + Debug.Log("Added modifier to graph"); +#endif + graph.InternalAddSegmentModifier(mod); + } + } + + class RemoveSegmentModifierChange : IGraphChange + { + public NavGraphChange ChangeType => NavGraphChange.SegmentModifierRemoved; + public int ChangeSource { get; } + + NavAreaMarkerInstance mod; + + public RemoveSegmentModifierChange(NavAreaMarkerInstance mod) + { + this.mod = mod; + ChangeSource = mod.PBComponentId; + } + + public void Apply(NavGraph graph) + { +#if PBDEBUG + Debug.Log("Removed modifier to graph"); +#endif + graph.InternalRemoveSegmentModifier(mod); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraph.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraph.cs.meta new file mode 100644 index 0000000..2785088 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraph.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 026f93314fe2afa4db089d933acfcb9b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNode.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNode.cs new file mode 100644 index 0000000..55509d4 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNode.cs @@ -0,0 +1,96 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class NavGraphNode + { + public float LinkTargetT { get; set; } + public NavGraphNodeCluster LinkTarget { get; set; } + + // location + public readonly NavGraphNodeCluster cluster; + public float t; + + public readonly INavLinkInstance link; + public PathValues[] pathValues; + + public bool IsGoal => link.LinkType == -1; + + public NavGraphNode(int threadCount, NavGraphNodeCluster owner, float t, NavGraphNodeCluster linkTarget, float linkTargetT, INavLinkInstance original) + { + this.cluster = owner; + this.t = t; + + this.LinkTargetT = linkTargetT; + this.LinkTarget = linkTarget; + + this.link = original; + + this.pathValues = new PathValues[threadCount]; + InitializePathValueArray(); + } + + public NavGraphNode(int threadCount, NavGraphNodeCluster owner, float t) + { + this.cluster = owner; + this.t = t; + this.link = new ArtificialLink(-1); + this.LinkTarget = cluster; + this.LinkTargetT = t; + + this.pathValues = new PathValues[threadCount]; + InitializePathValueArray(); + } + + public IEnumerable GetConnections(NavAgent agent, IList goals, int pathValueId) + { + return LinkTarget.EnumerateReachableNavVerts(LinkTargetT, agent, goals, pathValueId); + } + + // param must be local + public float HeuristicalCostsToGoal(Vector2 goal) + { + return Vector2.Distance(goal, GoalPosition()); + } + + public Vector2 GoalPosition() + { + return LinkTarget.GetPositionAlongSegment(LinkTargetT); + } + + public Vector2 WGoalPosition() + { + return LinkTarget.owner.LocalToWorld.MultiplyPoint3x4(LinkTarget.GetPositionAlongSegment(LinkTargetT)); + } + + public Vector2 Position() { + return cluster.GetPositionAlongSegment(t); + } + + public Vector2 WPosition() + { + return cluster.owner.LocalToWorld.MultiplyPoint3x4(cluster.GetPositionAlongSegment(t)); + } + + private void InitializePathValueArray() + { + for (int i = 0; i < pathValues.Length; i++) + { + pathValues[i] = new PathValues(this); + } + } + } + + internal struct NavConnection + { + public readonly NavGraphNode end; + public readonly float traversalCosts; + + public NavConnection(NavGraphNode end, float traversalCosts) + { + this.end = end; + this.traversalCosts = traversalCosts; + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNode.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNode.cs.meta new file mode 100644 index 0000000..b3f161f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a5c4fab1500104040b48a3bb6aa7ba98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNodeCluster.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNodeCluster.cs new file mode 100644 index 0000000..4e9eead --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNodeCluster.cs @@ -0,0 +1,155 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class NavGraphNodeCluster : LineSegmentWithClearance + { + internal readonly List nodes = new List(); + // unsorted + internal readonly List modifiers = new List(1); + internal readonly bool[] containsGoal; + public readonly NavSurfaceRecord owner; + + public NavGraphNodeCluster(NavSegment segment, int threadCount, NavSurfaceRecord owner) : base(segment) + { + containsGoal = new bool[threadCount]; + this.owner = owner; + } + + public IEnumerable EnumerateReachableNavVerts(float t, NavAgent agent, IList goals, int pathValueId) + { + for (int iNode = 0; iNode < nodes.Count; iNode++) + { + var node = nodes[iNode]; + if (!IsAgentAbleToTraverse(agent, t, node)) + continue; + + yield return new NavConnection(node, node.link.TravelCosts(node.WPosition(), node.WGoalPosition()) * agent.GetLinkTraversalMultiplier(node.link.LinkType) * agent.GetNavTagTraversalMultiplier(node.link.NavTag) + TraversalCosts(t, node.t, agent)); + } + if (containsGoal[pathValueId]) + { + for (int iGoal = 0; iGoal < goals.Count; iGoal++) + { + if (goals[iGoal].cluster == this && IsAgentAbleToTraverse(agent, t, goals[iGoal])) + yield return new NavConnection(goals[iGoal], TraversalCosts(t, goals[iGoal].t, agent)); + } + } + } + + public void AddNode(int pathValueCount, float t, NavGraphNodeCluster linkTarget, float linkTargetT, + INavLinkInstance link) + { + nodes.Add( + new NavGraphNode( + pathValueCount, + this, + t, + linkTarget, linkTargetT, + link + )); + } + + public void RemoveNode(INavLinkInstance link) + { + int index = nodes.FindIndex(node => node.link == link); + if (index != -1) + nodes.RemoveAt(index); + } + + public void MoveNode(INavLinkInstance link, float newT) + { + int index = nodes.FindIndex(node => node.link == link); + nodes[index].t = newT; + } + + public NavGraphNode GetNode(INavLinkInstance link) + { + return nodes.Find(node => node.link == link); + } + + public bool DoesNodeExist(INavLinkInstance link) + { + return nodes.Exists(node => node.link == link); + } + + public void ApplyCellClearances(float[] differentClearances) + { + for (int i = 0; i < cellClearances.Length; i++) + { + cellClearances[i] = Mathf.Min(cellClearances[i], differentClearances[i]); + } + } + + public void AddNodeClusterModifier(NavAreaMarkerInstance mod) + { + modifiers.Add(mod); + } + + public void RemoveNodeClusterModifier(NavAreaMarkerInstance mod) + { + modifiers.Remove(mod); + } + + public int GetNavTagVector(float pos) + { + int vector = 0; + foreach (var mod in modifiers) + { + if (mod.T <= pos && mod.T + mod.Length >= pos) + vector |= (1 << mod.NavTag); + } + return vector; + } + + public int GetNavTagVector(Vector2 pos) + { + return GetNavTagVector(DistanceOfPointAlongSegment(pos)); + } + + public bool CanAgentReachPoint(NavAgent agent, float startT, float goalT) + { + return agent.CanTraverseSegment(owner.LocalToWorld.MultiplyVector(Normal), GetMinClearanceTo(startT, goalT)); + } + + public bool CanAgentBeAtPoint(NavAgent agent, float t) + { + return Vector2.Angle(Vector2.up, owner.LocalToWorld.MultiplyVector(Normal)) <= agent.MaxSlopeAngle && GetClearanceAlongSegment(t) >= agent.Height && (GetNavTagVector(t) & ~agent.NavTagMask) == 0; + } + + private bool IsAgentAbleToTraverse(NavAgent agent, float startT, NavGraphNode node) + { + return agent.CanTraverseLink(node.link) && CanAgentReachPoint(agent, startT, node.t); + } + + private float TraversalCosts(float t, float goal, NavAgent agent) + { + float a, b; + if (t < goal) + { + a = t; + b = goal; + } + else + { + a = goal; + b = t; + } + if (modifiers.Count == 0) + { + return b - a; + } + + float costs = b - a; + foreach (var mod in modifiers) + { + if (mod.T + mod.Length <= a || mod.T >= b) + continue; + + // some overlap exists + costs += (Mathf.Min(mod.T + mod.Length, b) - Mathf.Max(mod.T, a)) * agent.GetNavTagTraversalMultiplier(mod.NavTag); + } + return costs; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNodeCluster.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNodeCluster.cs.meta new file mode 100644 index 0000000..824017e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavGraphNodeCluster.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09696d0a858d6a249aac9a2ffc71fd9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavSurfaceRecord.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavSurfaceRecord.cs new file mode 100644 index 0000000..35a73cc --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavSurfaceRecord.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class NavSurfaceRecord + { + public B2DynamicTree Clusters { get; private set; } + public List SoftRefLinks { get; private set; } + + public Matrix4x4 LocalToWorld { get => localToWorld; set { + localToWorld = value; + worldToLocal = localToWorld.inverse; + } } + public Matrix4x4 WorldToLocal => worldToLocal; + public readonly NavSurface navSurface; + public readonly int bakeIteration; + + private Matrix4x4 localToWorld; + private Matrix4x4 worldToLocal; + + public NavSurfaceRecord(B2DynamicTree tree, Matrix4x4 localToWorld, NavSurface navSurface) + { + this.Clusters = tree; + SoftRefLinks = new List(); + this.localToWorld = localToWorld; + this.navSurface = navSurface; + this.bakeIteration = navSurface.BakeIteration; + } + + public void AddSoftRefLink(INavLinkInstance instance) + { + SoftRefLinks.Add(instance); + } + + public void RemoveSoftRefLink(INavLinkInstance instance) + { + SoftRefLinks.Remove(instance); + } + + public void Destroy(NavGraph graph) + { + foreach (var ls in SoftRefLinks) + { + ls.OnRemove(); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavSurfaceRecord.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavSurfaceRecord.cs.meta new file mode 100644 index 0000000..1d27181 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavGraph/NavSurfaceRecord.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6641bbd92fce18c489cab9aaaee6d4f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects.meta new file mode 100644 index 0000000..909fe0a --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c37197ee5c1fb446ac98c67d0aa09bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/ArtificialLink.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/ArtificialLink.cs new file mode 100644 index 0000000..0730092 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/ArtificialLink.cs @@ -0,0 +1,41 @@ +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class ArtificialLink : INavLinkInstance + { + public NavSegmentPositionPointer Start => throw new NotImplementedException(); + + public NavSegmentPositionPointer Goal => throw new NotImplementedException(); + + public int LinkType => linkType; + + public string LinkTypeName => throw new NotImplementedException(); + + public GameObject GameObject => throw new NotImplementedException(); + + public float Clearance => float.MaxValue; + + public int NavTag => 0; + + public bool IsTraversable => true; + public int PBComponentId => 0; + + private int linkType; + + public ArtificialLink(int linkType) + { + this.linkType = linkType; + } + + public float TravelCosts(Vector2 start, Vector2 goal) + { + return 0; + } + + public void OnRemove() + { + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/ArtificialLink.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/ArtificialLink.cs.meta new file mode 100644 index 0000000..e358b99 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/ArtificialLink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37b5756b029e50e409aec9ab1f691b6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/BaseNavLink.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/BaseNavLink.cs new file mode 100644 index 0000000..f95b720 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/BaseNavLink.cs @@ -0,0 +1,109 @@ +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Common basis for NavLink and NavLinkCluster. + /// + public abstract class BaseNavLink : MonoBehaviour, INavLinkInstanceCreator + { + public int LinkType + { + get { return linkType; } + set { + if (value < 0 || value >= PathBerserker2dSettings.NavLinkTypeNames.Length) + throw new ArgumentOutOfRangeException($"{value} is not a valid link type."); + linkType = value; + } + } + public string LinkTypeName + { + get { return PathBerserker2dSettings.NavLinkTypeNames[linkType]; } + set { linkType = PathBerserker2dSettings.GetLinkTypeFromName(value); } + } + public float Clearance + { + get { return clearance; } + set { clearance = value; } + } + public float AvgWaitTime + { + get { return avgWaitTime; } + set { avgWaitTime = value; } + } + public float CostOverride + { + get { return costOverride; } + set { costOverride = value; } + } + public GameObject GameObject => gameObject; + public int NavTag + { + get { return navTag; } + set { navTag = PathBerserker2dSettings.EnsureNavTagExists(value); } + } + public float MaxTraversableDistance + { + get { return maxTraversableDistance; } + set { maxTraversableDistance = value; } + } + + public int PBComponentId { get; protected set; } + + [Tooltip("Cost of traversing this link. If this is <= 0 the distance between start and goal is used instead.")] + [SerializeField] + protected float costOverride = -1; + + [SerializeField] + protected int linkType = 1; + + [Tooltip("Maximum height an agent can be to traverse this link.")] + [SerializeField] + protected float clearance = 2; + + [SerializeField] + protected int navTag = 0; + + [Tooltip("Average time an agent has to wait before starting to traverse this link. This is purely to tune the pathfinding algorithm.")] + [SerializeField] + protected float avgWaitTime = 0; + + [Tooltip("Maximum distances between start and goal, that is considered traversable. If this distance is exceeded (e.g. on a moving platform) an agent will wait to traverse this link.")] + [SerializeField] + protected float maxTraversableDistance = 0; + + /// + /// Should this link be automatically mapped. If not, you have to call UpdateMapping() yourself. + /// + [SerializeField, Tooltip("Should this link be automatically mapped. If not, you have to call UpdateMapping() yourself.")] + public bool autoMap = true; + + protected virtual void Awake() + { + PBComponentId = PBWorld.GeneratePBComponentId(); + } + + protected virtual void OnValidate() + { + linkType = PathBerserker2dSettings.EnsureNavLinkTypeExists(linkType); + navTag = PathBerserker2dSettings.EnsureNavTagExists(navTag); + } + + /// + /// MUST BE THREAD SAFE! + /// Calculates the cost of traversing from start to goal. + /// + /// + /// + /// + public float TravelCosts(Vector2 start, Vector2 goal) + { + float costOverride = this.costOverride; + if (costOverride >= 0) + return costOverride + avgWaitTime; + else + return Mathf.Max(maxTraversableDistance, Vector2.Distance(start, goal)) + avgWaitTime; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/BaseNavLink.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/BaseNavLink.cs.meta new file mode 100644 index 0000000..dccc86d --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/BaseNavLink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec2706faa1499754ab7972b2ce01acf5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/DynamicObstacle.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/DynamicObstacle.cs new file mode 100644 index 0000000..99ad02c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/DynamicObstacle.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Attach to GameObject to mark it as dynamic. + /// Dynamic objects are ignored while baking a NavSurface. + /// + public class DynamicObstacle : MonoBehaviour + { + // ignored for baking + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/DynamicObstacle.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/DynamicObstacle.cs.meta new file mode 100644 index 0000000..ba161cf --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/DynamicObstacle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 098039b2e353c6242b6b156886f24db4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLink.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLink.cs new file mode 100644 index 0000000..8e1311a --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLink.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Internal instance of a NavLink. + /// + /// + /// An instance is deliberately kept very basic. It links from a given start to a given goal. + /// + public interface INavLinkInstance + { + //NavSegmentPositionPointer Start { get; } + //NavSegmentPositionPointer Goal { get; } + int LinkType { get; } + int NavTag { get; } + + bool IsTraversable { get; } + + string LinkTypeName { get; } + + GameObject GameObject { get; } + + float Clearance { get; } + int PBComponentId { get; } + + float TravelCosts(Vector2 start, Vector2 goal); + + void OnRemove(); + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLink.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLink.cs.meta new file mode 100644 index 0000000..a9e17fc --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb4c816f3b23aac42a66b17253265a5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLinkInstanceCreator.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLinkInstanceCreator.cs new file mode 100644 index 0000000..f77dc2a --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLinkInstanceCreator.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + internal interface INavLinkInstanceCreator + { + int LinkType { get; } + int NavTag { get; } + int PBComponentId { get; } + + GameObject GameObject { get; } + float Clearance { get; } + float TravelCosts(Vector2 start, Vector2 goal); + float CostOverride { get; } + + float AvgWaitTime { get; } + float MaxTraversableDistance { get; } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLinkInstanceCreator.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLinkInstanceCreator.cs.meta new file mode 100644 index 0000000..f061bcf --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/INavLinkInstanceCreator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7dfb46afa8de8f4fb172b5323f315e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavAreaMarker.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavAreaMarker.cs new file mode 100644 index 0000000..7d565e2 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavAreaMarker.cs @@ -0,0 +1,173 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace PathBerserker2d +{ + /// + /// Marks all segments within an area with a specific NavTag. + /// + [RequireComponent(typeof(RectTransform))] + [AddComponentMenu("PathBerserker2d/Nav Area Marker")] + [HelpURL("https://oribow.github.io/PathBerserker2dDemo/Documentation/classPathBerserker2d_1_1NavAreaMarker.html")] + public class NavAreaMarker : MonoBehaviour + { + public int NavTag + { + get => navTag; + set + { + navTag = PathBerserker2dSettings.EnsureNavTagExists(value); + } + } + public Color MarkerColor => PathBerserker2dSettings.GetNavTagColor(navTag); + + [SerializeField] + int navTag = 0; + + [Tooltip("Minimum angle between the segment tangent and up. Use this to only mark segments with certain angles.")] + [SerializeField, Range(0, 360)] + float minAngle = 0; + + [Tooltip("Maximum angle between the segment tangent and up. Use this to only mark segments with certain angles.")] + [SerializeField, Range(0, 360)] + float maxAngle = 360; + + /// + /// Updates the modified marked area after a continuous time period of no movement. + /// + [Tooltip("Updates the modified marked area after a continuous time period of no movement.")] + [SerializeField] + public float updateAfterTimeOfNoMovement = 0.2f; + + /// + /// Updates the modified marked area after this amount of time passed. + /// + [Tooltip("Updates the modified marked area after this amount of time passed.")] + [SerializeField] + public float updateAfterTime = 1; + + public int PBComponentId { get; } + + private RectTransform rectTransform; + private List instances; + private float lastMovementTime; + private float isDirtySince; + private bool isDirty = false; + + #region UNITY + private void OnEnable() + { + rectTransform = GetComponent(); + instances = new List(); + transform.hasChanged = false; + AddToGraph(); + } + + private void OnDisable() + { + RemoveFromGraph(); + } + + private void Update() + { + if (transform.hasChanged) + { + if (!isDirty) + isDirtySince = Time.time; + + isDirty = true; + transform.hasChanged = false; + lastMovementTime = Time.time; + } + + if (isDirty && + (Time.time - lastMovementTime > updateAfterTimeOfNoMovement + || Time.time - isDirtySince > updateAfterTime)) + { + AddToGraph(); + lastMovementTime = float.MaxValue; + } + } + + private void OnValidate() + { + navTag = PathBerserker2dSettings.EnsureNavTagExists(navTag); + updateAfterTimeOfNoMovement = Mathf.Max(0, updateAfterTimeOfNoMovement); + updateAfterTime = Mathf.Max(0, updateAfterTime); + } + + private void Reset() + { + // only modify sizeDelta, if its at default value + var rt = GetComponent(); + if (rt.sizeDelta == new Vector2(100, 100)) + rt.sizeDelta = Vector2.one; + } + #endregion + + /// + /// Updates area of effect mapping. Call after modifying NavAreaMarker transform. + /// Alternatively, instead of calling this function, set transform.hasChanged to true. + /// + public void UpdateMappings() + { + AddToGraph(); + lastMovementTime = float.MaxValue; + } + + private void AddToGraph() + { + isDirty = false; + if (instances.Count > 0) + RemoveFromGraph(); + + var r = rectTransform.rect; + Vector2 scaleFactor = rectTransform.lossyScale * r.size * 0.5f; + Vector2 center = r.center; + + r.min = center - scaleFactor + (Vector2)rectTransform.position; + r.max = center + scaleFactor + (Vector2)rectTransform.position; + + var results = PBWorld.BoxCastWithStaged(r, rectTransform.rotation.eulerAngles.z, minAngle, maxAngle); + + foreach (var pointer in results) + { + var instance = new NavAreaMarkerInstance(this, pointer); + PBWorld.NavGraph.AddSegmentModifier(instance); + instances.Add(instance); + } + } + + private void RemoveFromGraph() + { + foreach (var instance in instances) + { + PBWorld.NavGraph.RemoveSegmentModifier(instance); + } + instances.Clear(); + } + } + + internal class NavAreaMarkerInstance + { + public int NavTag => original.NavTag; + public float T => position.t; + public float Length => position.length; + + public NavSubsegmentPointer position; + public int PBComponentId => original.PBComponentId; + + NavAreaMarker original; + + public NavAreaMarkerInstance(NavAreaMarker original) + { + this.original = original; + } + + public NavAreaMarkerInstance(NavAreaMarker original, NavSubsegmentPointer position) + { + this.original = original; + this.position = position; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavAreaMarker.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavAreaMarker.cs.meta new file mode 100644 index 0000000..de12972 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavAreaMarker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd188745fa9d851459105e6651b2b80a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLink.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLink.cs new file mode 100644 index 0000000..ae1163c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLink.cs @@ -0,0 +1,207 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// A link from one segment to another. + /// + /// + /// NavLink gets added to the pathfinder at runtime. + /// It can be loaded and unloaded by enabling / disabling the component + /// After being loaded and added to the pathfinder, the position of the link will not be updated. + /// For example that means, if your link start position gets mapped to a position on a moving platform, the initial mapping of the link start to the segment won't change. + /// The mapped position is relative to the NavSurface containing the moving platform. + /// It will follow the movements of the platform, even though the start marker of the link will not. + /// ## Mapping + /// You can update the links mapping by calling + /// + /// Internally, when moving the start and end marker around in scene view while the game is playing, is called. + /// That means you can move the markers around and the link will update its mapping. + /// If you move them around by any other means however, you have to call afterwards. + /// ## Visualization + /// Everything visualization related is purely for you and is not meant to accessed at runtime. + /// Visualizations like bezier or projectile are meant to allow you to figure out a good clearance value. + /// ## Traversable + /// When a link is marked bidirectional, internally two links get added to the pathfinder. One for each direction. + /// Both links traversable can be set separately with and . + /// + /// **Not being traversable should always be temporary.** In the sense of, **"this link is not traversable right now, but will be in the future"**. + /// NavAgents will wait indefinitely for the link to become traversable again. + /// You can adjust AvgWaitTime to increase the cost of such not alway traversable links. + /// The pathfinder will add it to the cost of traversal. + /// The pathfinder does not care if a link is marked as traversable or not. It only cares about the cost of traversal. + /// If you want to disable a link for a longer time, consider disabling the link component. Then it will be unloaded and not considered for any pathfinding. + /// + [AddComponentMenu("PathBerserker2d/Nav Link")] + public sealed class NavLink : BaseNavLink + { + public enum VisualizationType + { + Linear = 0, + QuadradticBezier = 1, + Projectile = 2, + Teleport = 3, + None = 4, + TransformBasedMovement = 5 + } + + public Vector2 GoalWorldPosition + { + get + { + return transform.TransformPoint(goal); + } + set + { + goal = transform.InverseTransformPoint(value); + } + } + public Vector2 StartWorldPosition + { + get + { + return transform.TransformPoint(start); + } + set + { + start = transform.InverseTransformPoint(value); + } + } + public Vector2 StartLocalPosition + { + get + { + return start; + } + set + { + start = value; + } + } + public Vector2 GoalLocalPosition + { + get + { + return goal; + } + set + { + goal = value; + } + } + + public VisualizationType CurrentVisualizationType { get { return visualizationType; } } + + public bool IsBidirectional + { + get { return isBidirectional; } + set + { + if (isBidirectional != value && !value) + { + linkGoalToStart.RemoveFromWorld(); + } + isBidirectional = value; + } + } + + public bool IsAddedToWorld => linkStartToGoal?.IsAdded ?? false; + + internal float HorizontalSpeed => horizontalSpeed; + internal float TraversalAngle => traversalAngle; + internal Vector2 BezierControlPoint { get => bezierControlPoint; set => bezierControlPoint = value; } + + [Header("Location")] + [SerializeField] + Vector2 start = Vector2.left * 2; + [SerializeField] + Vector2 goal = Vector2.right * 2; + [SerializeField] + bool isBidirectional = true; + [SerializeField] + VisualizationType visualizationType = VisualizationType.TransformBasedMovement; + [SerializeField] + float traversalAngle = 0; + [SerializeField] + float horizontalSpeed = 1; + [SerializeField, HideInInspector] + Vector2 bezierControlPoint = Vector2.up * 3; + + private NavLinkInstance linkStartToGoal; + private NavLinkInstance linkGoalToStart; + + #region UNITY + private void OnEnable() + { + if (linkStartToGoal == null) + linkStartToGoal = new NavLinkInstance(this); + if (linkGoalToStart == null) + linkGoalToStart = new NavLinkInstance(this); + + AutoUpdateMapping(); + } + + private void OnDisable() + { + linkStartToGoal.RemoveFromWorld(); + linkGoalToStart.RemoveFromWorld(); + } + + protected override void OnValidate() + { + base.OnValidate(); + if (linkGoalToStart != null && (!linkGoalToStart.IsAdded || linkStartToGoal != null)) + { + AutoUpdateMapping(); + + if (!isBidirectional) + linkGoalToStart.RemoveFromWorld(); + } + } + #endregion + + /// + /// Update the mapping for both link instances. Call after link positions have been changed. + /// + public void UpdateMapping() + { + NavSegmentPositionPointer navStart, navGoal; + if (PBWorld.TryMapPointWithStaged(StartWorldPosition, out navStart) + && PBWorld.TryMapPointWithStaged(GoalWorldPosition, out navGoal)) + { + linkStartToGoal.UpdateMapping(navStart, navGoal, StartWorldPosition, GoalWorldPosition); + linkGoalToStart.UpdateMapping(navGoal, navStart, GoalWorldPosition, StartWorldPosition); + + linkStartToGoal.AddToWorld(); + if (isBidirectional) linkGoalToStart.AddToWorld(); + } + else + { + linkStartToGoal.RemoveFromWorld(); + linkGoalToStart.RemoveFromWorld(); + } + } + + /// + /// Set the link instance from start point to goal traversable. + /// + public void SetStartToGoalLinkTraversable(bool traversable) + { + this.linkStartToGoal.IsTraversable = traversable; + } + + /// + /// Set the link instance from goal point to start traversable. This link only exist, if the link is bidirectional. + /// + public void SetGoalToStartLinkTraversable(bool traversable) + { + this.linkGoalToStart.IsTraversable = traversable; + } + + private void AutoUpdateMapping() + { + if (autoMap) + UpdateMapping(); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLink.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLink.cs.meta new file mode 100644 index 0000000..1e63c14 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87d47b3e0cb42914b8b2ae885bebf30b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 579b19e3fcbb57e43adcf1e3f754f5ef, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkCluster.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkCluster.cs new file mode 100644 index 0000000..a6a110e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkCluster.cs @@ -0,0 +1,118 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace PathBerserker2d +{ + /// + /// Creates links to interconnect a collection. + /// + /// + /// Consists of a list of points. + /// At runtime a link is generated for each point to connect it with each other point. + /// This is a convenience component. It drastically reduces the amount of work required to setup an elevator or ladder for example. + /// + /// Otherwise it functions and behaves the same as a NavLink. + /// Reference the documentation for NavLink for further details. + /// + [AddComponentMenu("PathBerserker2d/Nav Link Cluster")] + public sealed class NavLinkCluster : BaseNavLink + { + internal enum PointTraversalType + { + Exit, + Entry, + Both + } + + internal LinkPoint[] LinkPoints => linkPoints; + + [SerializeField] + internal LinkPoint[] linkPoints = new LinkPoint[] { new LinkPoint(Vector2.left * 2), new LinkPoint(Vector2.right * 2) }; + + private List linkInstances; + + #region UNITY + private void OnEnable() + { + if (linkInstances == null) + linkInstances = new List(); + + if (autoMap) + UpdateMapping(); + } + + private void OnDisable() + { + foreach (var li in linkInstances) + li.RemoveFromWorld(); + } + #endregion + + /// + /// Update the mapping for all link instances. Call after link positions have been changed. + /// + public void UpdateMapping() + { + NavSegmentPositionPointer navStart, navGoal; + int instanceCounter = 0; + foreach (var startPoint in linkPoints) + { + if (startPoint.traversalType == PointTraversalType.Exit) + continue; + + Vector2 worldStart = transform.TransformPoint(startPoint.point); + foreach (var goalPoint in linkPoints) + { + if (goalPoint.traversalType == PointTraversalType.Entry || goalPoint.point == startPoint.point) + continue; + + Vector2 worldGoal = transform.TransformPoint(goalPoint.point); + if (instanceCounter >= linkInstances.Count) + { + linkInstances.Add(new NavLinkInstance(this)); + } + var linkInstance = linkInstances[instanceCounter++]; + + if (PBWorld.TryMapPointWithStaged(worldStart, out navStart) + && PBWorld.TryMapPointWithStaged(worldGoal, out navGoal)) + { + linkInstance.UpdateMapping(navStart, navGoal, worldStart, worldGoal); + linkInstance.AddToWorld(); + } + else + { + linkInstance.RemoveFromWorld(); + } + } + } + } + + /// + /// Set link instances to be traversable based on their start and end points. + /// + /// Determines whether to enable or disable the given link instance. Link instance is given as its start and goal position. + public void SetLinksTraversable(System.Func traversableFunc) + { + foreach (var link in linkInstances) + { + if (link.IsAdded) + link.IsTraversable = traversableFunc(link.Start.Position, link.Goal.Position); + } + } + + [System.Serializable] + internal struct LinkPoint + { + [SerializeField] + public Vector2 point; + [SerializeField] + public PointTraversalType traversalType; + + public LinkPoint(Vector2 point) + { + this.point = point; + this.traversalType = PointTraversalType.Both; + } + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkCluster.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkCluster.cs.meta new file mode 100644 index 0000000..ac275dd --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkCluster.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be2a77a7bf2e29d438041e3d46dd5667 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkInstance.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkInstance.cs new file mode 100644 index 0000000..85e123e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkInstance.cs @@ -0,0 +1,106 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + internal sealed class NavLinkInstance : INavLinkInstance + { + public NavSegmentPositionPointer Start => start; + public NavSegmentPositionPointer Goal => goal; + public int LinkType => creator.LinkType; + public string LinkTypeName => PathBerserker2dSettings.GetLinkTypeName(creator.LinkType); + public GameObject GameObject => creator.GameObject; + public bool IsAdded => isAdded; + public float Clearance => creator.Clearance; + public float CostOverride => creator.CostOverride; + public int NavTag => creator.NavTag; + public bool IsTraversable + { + get + { + return isTraversable && (creator.MaxTraversableDistance <= 0 || Vector2.Distance(Start.Position, Goal.Position) <= creator.MaxTraversableDistance); + } + set + { + isTraversable = value; + } + } + public int PBComponentId => creator.PBComponentId; + internal INavLinkInstanceCreator Creator => creator; + + + private INavLinkInstanceCreator creator; + private NavSegmentPositionPointer start; + private Vector2 startPos; + private NavSegmentPositionPointer goal; + private Vector2 goalPos; + private bool isAdded = false; + private bool isTraversable = true; + + public NavLinkInstance(INavLinkInstanceCreator creator) + { + this.creator = creator; + } + + public float TravelCosts(Vector2 start, Vector2 goal) + { + return creator.TravelCosts(start, goal); + } + + + + public void AddToWorld() + { + if (!isAdded) + { + PBWorld.NavGraph.AddNavLink(this, start, goal); + isAdded = true; + } + } + + public void RemoveFromWorld() + { + if (isAdded) + { + PBWorld.NavGraph.RemoveNavLink(this, start, goal); + isAdded = false; + } + } + + public void UpdateMapping(NavSegmentPositionPointer start, NavSegmentPositionPointer goal, Vector2 startPos, Vector2 goalPos) + { + this.startPos = startPos; + this.goalPos = goalPos; + + if (isAdded) + { + if (start != this.start) + { + var oldPos = this.start; + this.start = start; + + PBWorld.NavGraph.MoveNavLinkStart(this, start, goal, oldPos); + } + if (goal != this.goal) + { + var oldPos = this.goal; + this.goal = goal; + + PBWorld.NavGraph.MoveNavLinkGoal(this, start, goal, oldPos); + } + } + else + { + this.start = start; + this.goal = goal; + } + } + + public void OnRemove() + { + if (start.surface != null) + RemoveFromWorld(); + else + isAdded = false; + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkInstance.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkInstance.cs.meta new file mode 100644 index 0000000..7e3c51f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavLinkInstance.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8d40862c6107ef4a856664b359e51b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavSegmentSubstractor.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavSegmentSubstractor.cs new file mode 100644 index 0000000..f87bca2 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavSegmentSubstractor.cs @@ -0,0 +1,25 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Marks with its RectTransform an area to remove segments from. + /// + [RequireComponent(typeof(RectTransform))] + public class NavSegmentSubstractor : MonoBehaviour + { + /// + /// Minimum angle between the segment tangent and up. Use this to only remove segments with certain angles. + /// + [Tooltip("Minimum angle between the segment tangent and up. Use this to only remove segments with certain angles.")] + [SerializeField, Range(0, 360)] + public float fromAngle = 0; + + /// + /// Maximum angle between the segment tangent and up. Use this to only remove segments with certain angles. + /// + [Tooltip("Maximum angle between the segment tangent and up. Use this to only remove segments with certain angles.")] + [SerializeField, Range(0, 360)] + public float toAngle = 360; + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavSegmentSubstractor.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavSegmentSubstractor.cs.meta new file mode 100644 index 0000000..7d8df84 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/NavSegmentSubstractor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a276efee5bef16c408d4567ee5ed9369 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/SegmentConnectionLink.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/SegmentConnectionLink.cs new file mode 100644 index 0000000..4c59d41 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/SegmentConnectionLink.cs @@ -0,0 +1,45 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + internal class CornerLink : INavLinkInstance + { + public NavSegmentPositionPointer Start => start; + + public NavSegmentPositionPointer Goal => goal; + + public int LinkType => 0; + + public string LinkTypeName => PathBerserker2dSettings.GetLinkTypeName(0); + + public GameObject GameObject => null; + + public float Clearance => float.MaxValue; + + public int NavTag => 0; + + public bool IsTraversable => true; + public int PBComponentId => 0; + + private NavSegmentPositionPointer start; + private NavSegmentPositionPointer goal; + private float angle; + + public CornerLink(NavSegmentPositionPointer start, NavSegmentPositionPointer goal, float angle) + { + this.start = start; + this.goal = goal; + this.angle = angle; + } + + public float TravelCosts(Vector2 start, Vector2 goal) + { + return angle; + } + + public void OnRemove() + { + + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/SegmentConnectionLink.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/SegmentConnectionLink.cs.meta new file mode 100644 index 0000000..1500590 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavObjects/SegmentConnectionLink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3c7717cb27cab34d9ec825e3cbc10ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface.meta new file mode 100644 index 0000000..6058cfc --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 874b67fb230896a43a6d44a87da38828 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/ColliderLayerFilter.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/ColliderLayerFilter.cs new file mode 100644 index 0000000..2357077 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/ColliderLayerFilter.cs @@ -0,0 +1,26 @@ +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + +namespace PathBerserker2d +{ + internal class ColliderLayerFilter : IColliderFilter + { + private LayerMask layerMask; + private bool onlyStatic; + + public ColliderLayerFilter(LayerMask layerMask, bool onlyStatic) + { + this.layerMask = layerMask; + this.onlyStatic = onlyStatic; + } + + public IEnumerable Filter(IEnumerable colliders) + { + return colliders.Where( + (col) => layerMask.IsLayerWithinMask(col.gameObject.layer) && + !col.GetComponent() && + (!onlyStatic || col.gameObject.isStatic)); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/ColliderLayerFilter.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/ColliderLayerFilter.cs.meta new file mode 100644 index 0000000..658ad22 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/ColliderLayerFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 548bcd56f78f38e418eb0a3ec41825a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation.meta new file mode 100644 index 0000000..951c747 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8083133de4af48e48b87fdb05b356ca2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/ColliderConverter.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/ColliderConverter.cs new file mode 100644 index 0000000..42f47a6 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/ColliderConverter.cs @@ -0,0 +1,236 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class ColliderConverter + { + public Polygon[] Convert(Collider2D collider) + { + Polygon[] cachedPolys; + bool hasRigidbody = collider.GetComponentInParent(); + + if (collider is PolygonCollider2D && PathBerserker2dSettings.UsePolygonCollider2dPathsForBaking) + { + cachedPolys = PolygonColliderToPolygon((PolygonCollider2D)collider); + } + else + { + var mesh = collider.CreateMesh(hasRigidbody, hasRigidbody); + if (mesh == null) + { + if (collider.GetType() == typeof(EdgeCollider2D)) + { + //special handling for an open edge collider + cachedPolys = EdgeColliderToPolygon(collider as EdgeCollider2D); + } + else + { + Debug.LogWarning(string.Format("Unity's 'CreateMesh' returned null for Collider {0}({1}). Will ignore this collider.", collider.name, collider.GetType())); + + cachedPolys = new Polygon[0]; + } + } + else + { + cachedPolys = MeshToPolygons(mesh); + } + } + return cachedPolys; + } + + private static Polygon[] EdgeColliderToPolygon(EdgeCollider2D edgeCollider2D) + { + Matrix4x4 localToWorld = edgeCollider2D.transform.localToWorldMatrix * Matrix4x4.Translate(edgeCollider2D.offset); + return new Polygon[1] { + new Polygon( + new Contour( + Array.ConvertAll(edgeCollider2D.points, (v) => (Vector2)localToWorld.MultiplyPoint3x4(v)), + false)) + }; + } + + private static Polygon[] MeshToPolygons(Mesh mesh) + { + // 1. find connected regions of mesh + var verts = mesh.vertices; + var triangles = mesh.triangles; + + MonoBehaviour.DestroyImmediate(mesh); + + List[] graph = new List[verts.Length]; + for (int i = 0; i < graph.Length; i++) + graph[i] = new List(3); + + for (int iTris = 0; iTris < triangles.Length; iTris += 3) + { + int a = triangles[iTris]; + int b = triangles[iTris + 1]; + int c = triangles[iTris + 2]; + + AddEdgeToGraph(graph, a, b); + AddEdgeToGraph(graph, b, c); + AddEdgeToGraph(graph, c, a); + } + + int nextRegion = 1; + int[] regionMap = new int[verts.Length]; + for (int iVert = 0; iVert < verts.Length; iVert++) + { + if (regionMap[iVert] == 0) + { + Flood(nextRegion++, regionMap, graph, iVert); + } + } + + StableConnector[] connectors = new StableConnector[nextRegion - 1]; + for (int i = 0; i < connectors.Length; i++) + connectors[i] = new StableConnector(); + + for (int iVert = 0; iVert < verts.Length; iVert++) + { + var connections = graph[iVert]; + foreach (var conn in connections) + { + var other = graph[conn]; + if (!other.Contains(iVert)) + { + connectors[regionMap[iVert] - 1].Add(iVert, conn); + } + } + } + + List polygons = new List(connectors.Length); + for (int i = 0; i < connectors.Length; i++) + { + ConnectorToContours(connectors[i], verts, ref polygons); + } + // some polygons are contained by other polygons, make a check + for (int iPoly = 0; iPoly < polygons.Count; iPoly++) + { + var poly = polygons[iPoly]; + for (int iOtherPoly = iPoly + 1; iOtherPoly < polygons.Count; iOtherPoly++) + { + if (poly.Contains(polygons[iOtherPoly])) + { + poly.AddAsChild(polygons[iOtherPoly]); + polygons.RemoveAt(iOtherPoly); + iOtherPoly--; + } + } + } + return polygons.ToArray(); + } + + private static Polygon[] PolygonColliderToPolygon(PolygonCollider2D collider) + { + if (collider.pathCount == 0) + return new Polygon[0]; + + var path = collider.GetPath(0); + if (path.Length < 3) + return new Polygon[0]; + + var worldPath = path.Select(vert => (Vector2)collider.transform.TransformPoint(vert)).Reverse(); + return new Polygon[] { + new Polygon(new Contour(worldPath)) + }; + } + + private static void AddEdgeToGraph(List[] graph, int a, int b) + { + graph[a].Add(b); + } + + private static void Flood(int id, int[] regionMap, List[] graph, int start) + { + regionMap[start] = id; + + Stack indiciesToProcess = new Stack(10); + + indiciesToProcess.Push(start); + + while (indiciesToProcess.Count > 0) + { + int i = indiciesToProcess.Pop(); + + var connections = graph[i]; + foreach (var conn in connections) + { + if (regionMap[conn] != id) + { + regionMap[conn] = id; + indiciesToProcess.Push(conn); + } + } + } + } + + private static void ConnectorToContours(StableConnector connector, Vector3[] verts, ref List polygons) + { + List holes = new List(1); + List> hulls = new List>(1); + foreach (var chain in connector.closedPolygons) + { + List points = new List(chain.points.Count); + foreach (var p in chain.points) + { + points.Add(verts[p]); + } + + // simplification moved to later step in pipeline + //points = ExtendedGeometry.SimplifyContour(points, 0.1f); + /* + for (int i = 0; i < points.Count; i++) + { + points[i] = new Vector2((float)Math.Round(points[i].x, 3), + (float)Math.Round(points[i].y, 3)); ; + }*/ + + Contour c = new Contour(points); + double area = c.SignedArea(); + if (area > 0) + hulls.Add(new Tuple(area, new Polygon(c))); + else + holes.Add(c); + } + if (hulls.Count == 1) + { + hulls[0].Item2.Holes = holes; + polygons.Add(hulls[0].Item2); + } + else + { + hulls.Sort((a, b) => b.Item1.CompareTo(a.Item1)); + + for (int iHull = 0; iHull < hulls.Count; iHull++) + { + for (int iHull2 = iHull + 1; iHull2 < hulls.Count; iHull2++) + { + if (hulls[iHull].Item2.Contains(hulls[iHull2].Item2)) + { + hulls[iHull].Item2.AddAsChild(hulls[iHull2].Item2); + hulls.RemoveAt(iHull2); + iHull2--; + } + } + } + foreach (var hull in hulls) + { + for (int iHole = 0; iHole < holes.Count; iHole++) + { + if (hull.Item2.Contains(holes[iHole])) + { + hull.Item2.Holes.Add(holes[iHole]); + holes.RemoveAt(iHole); + iHole--; + } + } + } + polygons.AddRange(hulls.ConvertAll(t => t.Item2)); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/ColliderConverter.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/ColliderConverter.cs.meta new file mode 100644 index 0000000..c6c2133 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/ColliderConverter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7608182b2081ee14db7b159b5c2f0267 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/IntersectionTester.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/IntersectionTester.cs new file mode 100644 index 0000000..e677149 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/IntersectionTester.cs @@ -0,0 +1,639 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using System; +using System.Linq; + +namespace PathBerserker2d +{ + internal class IntersectionTester + { + // 1,23456 -> 1234 + private const float FUDGE_FACTOR = 0.01f; + + public IClipper Clipper { get => clipper; } + + IClipper clipper; + ColliderConverter colliderConverter; + INavSegmentCreationParamProvider paramProvider; + Matrix4x4 surfaceWorldToLocal; + + public IntersectionTester(INavSegmentCreationParamProvider paramProvider, Matrix4x4 surfaceWorldToLocal) + { + this.clipper = new ClipperWrapper(); + this.colliderConverter = new ColliderConverter(); + this.paramProvider = paramProvider; + this.surfaceWorldToLocal = surfaceWorldToLocal; + } + + public Polygon[] ColliderToPolygon(Collider2D col) + { + return colliderConverter.Convert(col); + } + + public void MarkContour(Contour contour, NavSurface owner, PolygonSet polySet, List navSegments) + { + int prevSegIndex = -1; + int firstNavSegIndex = navSegments.Count; + bool lastSegTouchesLastPoint = false; + + for (int iPrevLine = contour.IsClosed ? contour.VertexCount - 1 : 0, iLine = contour.IsClosed ? 0 : 1; iLine < contour.VertexCount; iPrevLine = iLine, iLine++) + { + Vector2 a = contour[iPrevLine]; + Vector2 b = contour[iLine]; + + Vector2 dir = b - a; + float length = dir.magnitude; + dir /= length; + Vector2 normal = new Vector2(-dir.y, dir.x); + + int cellCount = Math.Max(1, Mathf.RoundToInt(length / paramProvider.CellSize)); + + Vector2 fudgedA = a + normal * FUDGE_FACTOR; + Vector2 fudgedB = b + normal * FUDGE_FACTOR; + Vector2 cellHeight = normal * paramProvider.MaxClearance; + + List cellSpace = new List(4); + cellSpace.Add(fudgedB); + cellSpace.Add(fudgedA); + cellSpace.Add(fudgedA + cellHeight); + cellSpace.Add(fudgedB + cellHeight); + + Polygon walkSpacePolygon = new Polygon(new Contour(cellSpace)); + + //var ts = new Polygon(new Contour(cellSpace.ToList())); + //GizmosQueue.Instance.Enqueue(5, () => + //{ + // Gizmos.color = Color.gray; + // ts.Draw(); + //}); + + List intersections = new List(5); + foreach (var testCandidate in polySet.Query(walkSpacePolygon.BoundingRect)) + { + if (testCandidate.Hull.IsClosed) + { + //GizmosQueue.Instance.Enqueue(5, () => + //{ + // Gizmos.color = Color.red; + // //testCandidate.Draw(); + //}); + + clipper.Compute(testCandidate, walkSpacePolygon, BoolOpType.INTERSECTION, out var clipResult); + intersections.AddRange(clipResult); + } + else + intersections.Add(testCandidate); + } + //could do a union now; to evaluate + // this is nonsense, but better leave as is. It ensures that all cells are the same size + if (intersections.Count == -1) + { + var newSeg = CreateFreeSegment(cellCount, owner, a, dir, length); + if (prevSegIndex != -1) + { + navSegments[prevSegIndex].NextSegmentIndex = navSegments.Count; + newSeg.PrevSegmentIndex = prevSegIndex; + } + prevSegIndex = navSegments.Count; + navSegments.Add(newSeg); + lastSegTouchesLastPoint = true; + } + else + { + float correctedCellSize = length / cellCount; + + Vector2 cellOffset = dir * correctedCellSize; + + cellSpace[0] = (fudgedA + cellOffset); + cellSpace[1] = (fudgedA); + cellSpace[2] = (fudgedA + cellHeight); + cellSpace[3] = (cellSpace[0] + cellHeight); + + List cellClearances = new List(cellCount); + bool searchForHead = true; + float segmentStart = 0; + for (int iCell = 0; iCell < cellCount; iCell++) + { + + var poly = new Polygon(new Contour(new List(cellSpace))); + walkSpacePolygon.UpdateBounds(); + + //GizmosQueue.Instance.Enqueue(5, () => { poly.Draw(); }); + + float clearance = CalculateCellClearance(walkSpacePolygon, normal, paramProvider.MinClearance, paramProvider.MaxClearance, intersections); + if (searchForHead) + { + if (clearance >= paramProvider.MinClearance) + { + segmentStart = iCell * correctedCellSize; + searchForHead = false; + cellClearances.Add(clearance); + } + else + { + prevSegIndex = -1; + } + } + else + { + if (clearance < paramProvider.MinClearance) + { + var newSeg = new NavSegment( + owner, + surfaceWorldToLocal.MultiplyPoint3x4(segmentStart * dir + a), + surfaceWorldToLocal.MultiplyVector(dir), + iCell * correctedCellSize - segmentStart, + cellClearances.ToArray() + ); + if (prevSegIndex != -1) + { + navSegments[prevSegIndex].NextSegmentIndex = navSegments.Count; + newSeg.PrevSegmentIndex = prevSegIndex; + } + prevSegIndex = -1; + navSegments.Add(newSeg); + + cellClearances.Clear(); + searchForHead = true; + + } + else + { + cellClearances.Add(clearance); + } + } + cellSpace[1] = fudgedA + cellOffset * iCell; + cellSpace[2] = fudgedA + cellHeight + cellOffset * iCell; + if (iCell < cellCount - 2) + { + cellSpace[0] = fudgedA + cellOffset * (iCell + 1); + cellSpace[3] = fudgedA + cellHeight + cellOffset * (iCell + 1); + } + else + { + cellSpace[0] = b + normal * FUDGE_FACTOR; + cellSpace[3] = cellSpace[0] + cellHeight; + } + } + if (!searchForHead) + { + var newSeg = new NavSegment( + owner, + surfaceWorldToLocal.MultiplyPoint3x4(segmentStart * dir + a), + surfaceWorldToLocal.MultiplyVector(dir), + length - segmentStart, + cellClearances.ToArray() + ); + + if (prevSegIndex != -1) + { + navSegments[prevSegIndex].NextSegmentIndex = navSegments.Count; + newSeg.PrevSegmentIndex = prevSegIndex; + } + prevSegIndex = navSegments.Count; + navSegments.Add(newSeg); + + } + lastSegTouchesLastPoint = !searchForHead; + } + } + //check for reach around + if (firstNavSegIndex < navSegments.Count && + lastSegTouchesLastPoint && + (navSegments[firstNavSegIndex].Start + - navSegments[navSegments.Count - 1].End).sqrMagnitude < 0.01f * 0.01f + ) + { + navSegments[firstNavSegIndex].PrevSegmentIndex = navSegments.Count - 1; + navSegments[navSegments.Count - 1].NextSegmentIndex = firstNavSegIndex; + } + } + + private NavSegment CreateFreeSegment(int cellCount, NavSurface owner, Vector2 a, Vector2 dir, float length) + { + float[] cellClearances = new float[cellCount]; + for (int i = 0; i < cellCount; i++) + cellClearances[i] = paramProvider.MaxClearance; + + return new NavSegment(owner, surfaceWorldToLocal.MultiplyPoint3x4(a), surfaceWorldToLocal.MultiplyVector(dir), length, cellClearances); + } + +#if false + public static void UpdateNavObstacle(IEnumerable surfaces, NavObstacle obstacle, Clipper clipper, NavSegmentCreationSettings settings) + { + foreach (var surface in surfaces) + { + UpdateNavObstacle(surface, obstacle, clipper, settings); + } + } + + public static void UpdateNavObstacle(NavSurface surface, NavObstacle obstacle, Clipper clipper, NavSegmentCreationSettings settings) + { + var obstacleBounds = obstacle.Bounds; + var surfBounds = surface.WorldBounds; + surfBounds.size += new Vector2(settings.AgentHeight, settings.AgentHeight) * 2; + if (surfBounds.Overlaps(obstacleBounds)) + { + for (int iSeg = 0; iSeg < surface.NavSegments.Count; iSeg++) + { + var seg = surface.NavSegments[iSeg]; + // is within effected bounds? + Vector2 min = seg.Start; + Vector2 max = seg.Start; + min = Vector2.Min(min, seg.End); + max = Vector2.Max(max, seg.End); + min = Vector2.Min(min, seg.End + seg.Normal * settings.AgentHeight); + max = Vector2.Max(max, seg.End + seg.Normal * settings.AgentHeight); + min = Vector2.Min(min, seg.Start + seg.Normal * settings.AgentHeight); + max = Vector2.Max(max, seg.Start + seg.Normal * settings.AgentHeight); + + Rect segBounds = new Rect(min.x, min.y, max.x - min.x, max.y - min.y); + /*GizmosQueue.Instance.Enqueue(10, () => + { + Gizmos.color = Color.red; + ABC.Utility.DrawRect(segBounds.position, segBounds.size); + });*/ + + if (obstacleBounds.Overlaps(segBounds)) + { + float[] clearances; + if (UpdateMarkOfNavSegment(seg, obstacle, settings, clipper, out clearances)) + { + obstacle.EffectedNavSegments.Add(new Tuple(new NavSegmentDataPointer(surface, iSeg), clearances)); + } + } + } + } + } + + public static void UpdateNavAreaMarker(IEnumerable surfaces, NavAreaMarker marker) + { + Matrix4x4 worldToMarker = marker.transform.worldToLocalMatrix; + + Rect rect = marker.Bounds; + marker.EffectedNavSegments.Clear(); + + foreach (var surf in surfaces) + { + for (int iSeg = 0; iSeg < surf.SegmentCount; iSeg++) + { + var seg = surf.NavSegments[iSeg]; + float u1, u2; + + /* + GizmosQueue.Instance.Enqueue(5, () => + { + + var old = Gizmos.matrix; + Gizmos.color = Color.magenta; + ABC.Utility.DrawRect(rect.position, rect.size); + Gizmos.matrix = marker.transform.localToWorldMatrix; + Gizmos.color = Color.red; + ABC.Utility.DrawRect(rect.position, rect.size); + Gizmos.color = Color.magenta; + Gizmos.matrix = worldToMarker; + Gizmos.DrawLine(seg.Start, seg.End); + Gizmos.matrix = old; + });*/ + + if (RectLineIntersection(rect, worldToMarker.MultiplyPoint(seg.Start), worldToMarker.MultiplyPoint(seg.End), out u1, out u2)) + { + // entirely inside + if (u1 < 0 && 1 < u2) + { + marker.EffectedNavSegments.Add(new Tuple( + new NavSegmentDataPointer(surf, iSeg), new Vector2(0, seg.Length))); + } + + // 2 intersections + else if (0 <= u1 && u1 < u2 && u2 <= 1) + { + marker.EffectedNavSegments.Add(new Tuple( + new NavSegmentDataPointer(surf, iSeg), + new Vector2(u1 * seg.Length, u2 * seg.Length))); + } + + // 1 intersection + else if (0 <= u1 && u1 <= 1) + { + marker.EffectedNavSegments.Add(new Tuple( + new NavSegmentDataPointer(surf, iSeg), + new Vector2(u1 * seg.Length, seg.Length))); + } + else if (0 <= u2 && u2 <= 1) + { + marker.EffectedNavSegments.Add(new Tuple( + new NavSegmentDataPointer(surf, iSeg), + new Vector2(0, u2 * seg.Length))); + } + } + } + } + } +#endif + + +#if false + public static void UpdateMarkAddNavSurface(IEnumerable navSegments, NavSurface navSurface, NavSegmentCreationSettings settings, Clipper clipper) + { + //1. find bounds of navSurface + var surfaceBounds = navSurface.Bounds; + var filter = new NavSurfaceColliderFilter(navSurface); + + foreach (var seg in navSegments) + { + // is within effected bounds? + + Vector2 min = seg.Start; + Vector2 max = seg.Start; + min = Vector2.Min(min, seg.End); + max = Vector2.Max(max, seg.End); + min = Vector2.Min(min, seg.End + seg.Normal * settings.AgentHeight); + max = Vector2.Max(max, seg.End + seg.Normal * settings.AgentHeight); + min = Vector2.Min(min, seg.Start + seg.Normal * settings.AgentHeight); + max = Vector2.Max(max, seg.Start + seg.Normal * settings.AgentHeight); + + if (surfaceBounds.Overlaps(new Rect(min.x, min.y, max.x - min.x, max.y - min.y))){ + UpdateMarkOfNavSegment(seg, filter, settings, clipper); + } + } + } +#endif +#if false + // filter needs to filter out non new colliders + public static bool UpdateMarkOfNavSegment(NavSegment navSegment, NavObstacle obstacle, NavSegmentCreationSettings settings, Clipper clipper, out float[] clearanceValues) + { + + List polygonToTestAgainst = ConvertHullToClipperFormat(HullFromCollider(obstacle.Collider, settings, obstacle.transform.localToWorldMatrix), settings.FloatToIntMultiplier); + + float correctedCellSize = navSegment.Length / navSegment.CellCount; + float f2iCellSize = CIntConversion.FloatToCInt(correctedCellSize); + float f2iMinClearance = settings.FloatToIntMultiplier * settings.MinClearance; + float f2iMaxClearance = settings.FloatToIntMultiplier * settings.AgentHeight; + IntPoint f2iA = CIntConversion.Vector2ToIntPoint(navSegment.LStart); + + IntPoint cellOffset = new IntPoint(navSegment.Tangent.x * f2iCellSize, navSegment.Tangent.y * f2iCellSize); + + List cellSpace = new List(4); + cellSpace.Add(f2iA + cellOffset); + cellSpace.Add(f2iA); + cellSpace.Add(f2iA); + cellSpace.Add(f2iA); + + clearanceValues = new float[navSegment.CellCount]; + bool segmentWasChanged = false; + for (int iCell = 0; iCell < navSegment.CellCount; iCell++) + { + float prevClearance = navSegment.GetCellClearance(iCell); + if (prevClearance <= settings.MinClearance) + continue; + + IntPoint cellHeight = CIntConversion.Vector2ToIntPoint(navSegment.Normal * prevClearance); + cellSpace[2] = cellSpace[1] + cellHeight; + cellSpace[3] = cellSpace[0] + cellHeight; + + /* + var clone = new List(cellSpace); + GizmosQueue.Instance.Enqueue(5, () => + { + Gizmos.DrawLine(CIntConversion.IntPointToVector2(clone[0], settings.FloatToIntMultiplier), CIntConversion.IntPointToVector2(clone[1], settings.FloatToIntMultiplier)); + Gizmos.DrawLine(CIntConversion.IntPointToVector2(clone[1], settings.FloatToIntMultiplier), CIntConversion.IntPointToVector2(clone[2], settings.FloatToIntMultiplier)); + Gizmos.DrawLine(CIntConversion.IntPointToVector2(clone[2], settings.FloatToIntMultiplier), CIntConversion.IntPointToVector2(clone[3], settings.FloatToIntMultiplier)); + Gizmos.DrawLine(CIntConversion.IntPointToVector2(clone[3], settings.FloatToIntMultiplier), CIntConversion.IntPointToVector2(clone[0], settings.FloatToIntMultiplier)); + }); + */ + + float clearance = CalculateCellClearance(cellSpace, navSegment.Normal, f2iMinClearance, prevClearance * settings.FloatToIntMultiplier, polygonToTestAgainst, clipper) / settings.FloatToIntMultiplier; + segmentWasChanged = clearance < prevClearance || segmentWasChanged; + clearanceValues[iCell] = clearance; + + cellSpace[1] += cellOffset; + if (iCell < navSegment.CellCount - 2) + { + cellSpace[0] += cellOffset; + } + else + { + cellSpace[0] = CIntConversion.Vector2ToIntPoint(navSegment.LEnd); + } + } + return segmentWasChanged; + } +#endif +#if false + public static bool UpdateMarkOfNavSegmentComplete(NavSegment navSegment, IColliderFilter filter, NavSegmentCreationSettings settings, Clipper clipper) + { + Vector2 oBoxPoint = navSegment.Start + navSegment.Tangent * navSegment.Length * 0.5f + navSegment.Normal * settings.AgentHeight * 0.5f; + Vector2 oBoxSize = new Vector2(navSegment.Length, settings.AgentHeight); + float oBoxAngle = Vector2.SignedAngle(Vector2.up, navSegment.Normal); + + Collider2D[] touchedColliders = Physics2D.OverlapBoxAll(oBoxPoint, oBoxSize, oBoxAngle, settings.IncludeLayers); + + List> polygonsToTestAgainst = new List>(touchedColliders.Length); + foreach (var col in filter.Filter(touchedColliders)) + { + polygonsToTestAgainst.Add(ConvertHullToClipperFormat(HullFromCollider(col, settings), settings.FloatToIntMultiplier)); + } + + float correctedCellSize = navSegment.Length / navSegment.CellCount; + float f2iCellSize = CIntConversion.FloatToCInt(correctedCellSize, settings.FloatToIntMultiplier); + float f2iMinClearance = settings.FloatToIntMultiplier * settings.MinClearance; + float f2iMaxClearance = settings.FloatToIntMultiplier * settings.AgentHeight; + IntPoint f2iA = CIntConversion.Vector2ToIntPoint(navSegment.Start, settings.FloatToIntMultiplier); + + Vector2 normal = navSegment.Normal; + IntPoint cellOffset = new IntPoint(navSegment.Tangent.x * f2iCellSize, navSegment.Tangent.y * f2iCellSize); + IntPoint cellHeight = new IntPoint(Mathf.RoundToInt(normal.x * settings.AgentHeight * settings.FloatToIntMultiplier), + Mathf.RoundToInt(normal.y * settings.AgentHeight * settings.FloatToIntMultiplier)); + + List cellSpace = new List(4); + cellSpace.Add(f2iA + cellOffset); + cellSpace.Add(f2iA); + cellSpace.Add(f2iA); + cellSpace.Add(f2iA); + + bool segmentWasChanged = false; + for (int iCell = 0; iCell < navSegment.CellCount; iCell++) + { + float prevClearance = navSegment.GetCellClearance(iCell); + + cellSpace[2] = cellSpace[1] + cellHeight; + cellSpace[3] = cellSpace[0] + cellHeight; + + /* + var clone = new List(cellSpace); + GizmosQueue.Instance.Enqueue(5, () => + { + Gizmos.DrawLine(CIntConversion.IntPointToVector2(clone[0], settings.FloatToIntMultiplier), CIntConversion.IntPointToVector2(clone[1], settings.FloatToIntMultiplier)); + Gizmos.DrawLine(CIntConversion.IntPointToVector2(clone[1], settings.FloatToIntMultiplier), CIntConversion.IntPointToVector2(clone[2], settings.FloatToIntMultiplier)); + Gizmos.DrawLine(CIntConversion.IntPointToVector2(clone[2], settings.FloatToIntMultiplier), CIntConversion.IntPointToVector2(clone[3], settings.FloatToIntMultiplier)); + Gizmos.DrawLine(CIntConversion.IntPointToVector2(clone[3], settings.FloatToIntMultiplier), CIntConversion.IntPointToVector2(clone[0], settings.FloatToIntMultiplier)); + }); + */ + + float clearance = CalculateCellClearance(cellSpace, navSegment.Normal, f2iMinClearance, f2iMaxClearance, polygonsToTestAgainst, clipper) / settings.FloatToIntMultiplier; + segmentWasChanged = clearance != prevClearance || segmentWasChanged; + navSegment.SetCellClearanceAt(iCell, clearance); + + cellSpace[1] += cellOffset; + if (iCell < navSegment.CellCount - 2) + { + cellSpace[0] += cellOffset; + } + else + { + cellSpace[0] = CIntConversion.Vector2ToIntPoint(navSegment.End, settings.FloatToIntMultiplier); + } + } + return segmentWasChanged; + } +#endif + private float CalculateCellClearance(Polygon cell, Vector2 lineNormalNorm, float minClearance, float maxClearance, List otherPolygons) + { + float clearance = maxClearance; + foreach (var testCandidate in otherPolygons) + { + if (testCandidate.Hull.IsClosed) + { + var resultType = clipper.Compute(cell, testCandidate, BoolOpType.INTERSECTION, out var resultPolygon); + + /*var a = cell; + var b = testCandidate; + GizmosQueue.Instance.Enqueue(5, () => + { + Gizmos.color = Color.red; + a.Draw(); + Gizmos.color = Color.blue; + b.Draw(); + });*/ + + if (resultType == ResultType.NoOverlap) + continue; + + double combinedArea = 0; + for (int i = 0; i < resultPolygon.Count; i++) + { + combinedArea += resultPolygon[i].Hull.Area(); + } + if (combinedArea < 0.001) + continue; + + foreach (var intersectionPolygon in resultPolygon) + { + foreach (var point in intersectionPolygon.Hull) + { + float dot = DistancePointLine(point, cell.Hull[1], lineNormalNorm); + if (dot < clearance) + { + clearance = dot; + if (clearance < minClearance) + { + return 0; + } + } + } + } + } + else + { + float c = OpenPolygonClearanceClipping( + testCandidate, cell, lineNormalNorm, minClearance, maxClearance); + if (c < clearance) + { + clearance = c; + if (clearance < minClearance) + { + return 0; + } + } + } + } + return clearance; + } + + private float OpenPolygonClearanceClipping(Polygon openPoly, Polygon target, Vector2 lineNormalNorm, float minClearance, float maxClearance) + { + float clearance = maxClearance; + bool inside = target.PointInPolyon(openPoly.Hull[0]); + bool prevNormalCheck = false; + for (int i = 0; i < openPoly.Hull.VertexCount - 1; i++) + { + Vector2 a = openPoly.Hull[i]; + Vector2 b = openPoly.Hull[i + 1]; + + clearance = EdgePolygonClearanceClipping(openPoly.Hull[i], + openPoly.Hull[i + 1], + lineNormalNorm, + target, + minClearance, + maxClearance, + clearance, + ref inside, + ref prevNormalCheck); + + if (clearance < minClearance) + { + return 0; + } + } + return clearance; + } + + private float EdgePolygonClearanceClipping(Vector2 a, Vector2 b, Vector2 lineNormal, Polygon target, + float minClearance, float maxClearance, float clearance, ref bool inside, ref bool prevNormalCheck) + { + Vector2 dir = b - a; + Vector2 normal = new Vector2(-dir.y, dir.x); + + bool normalCheck = Vector2.Dot(normal, lineNormal) < 0; + + + if (inside && (normalCheck || prevNormalCheck)) + { + float dist = DistancePointLine(a, target.Hull[1], lineNormal); + if (dist < clearance) + { + clearance = dist; + if (clearance < minClearance) + { + return 0; + } + } + } + prevNormalCheck = normalCheck; + + Vector2 inter; + if ((ExtendedGeometry.FindLineIntersection(a, b, target.Hull[0], target.Hull[1], out inter) + || ExtendedGeometry.FindLineIntersection(a, b, target.Hull[1], target.Hull[2], out inter) + || ExtendedGeometry.FindLineIntersection(a, b, target.Hull[2], target.Hull[3], out inter) + || ExtendedGeometry.FindLineIntersection(a, b, target.Hull[3], target.Hull[0], out inter)) + && inter != a && inter != b) + { + if (normalCheck) + { + float dist = DistancePointLine(inter, target.Hull[1], lineNormal); + if (dist < clearance) + { + clearance = dist; + if (clearance < minClearance) + { + return 0; + } + } + } + inside = !inside; + + clearance = EdgePolygonClearanceClipping( + inter, b, lineNormal, target, minClearance, maxClearance, clearance, + ref inside, ref prevNormalCheck); + } + return clearance; + } + + private float DistancePointLine(Vector2 point, Vector2 la, Vector2 lNormal) + { + return lNormal.x * (point.x - la.x) + lNormal.y * (point.y - la.y); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/IntersectionTester.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/IntersectionTester.cs.meta new file mode 100644 index 0000000..0bc7bce --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/IntersectionTester.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5a6b159837bdea438010d88de208dfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/NavSurfaceBakeJob.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/NavSurfaceBakeJob.cs new file mode 100644 index 0000000..0f535fe --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/NavSurfaceBakeJob.cs @@ -0,0 +1,311 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Linq; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class NavSurfaceBakeJob + { + public bool IsFinished { get { return bakeThread != null && !bakeThread.IsAlive; } } + public bool IsRunning { get { return bakeThread != null && bakeThread.IsAlive; } } + public float Progress { get { return progress; } } + public float TotalBakeTime { get; private set; } + + public List navSegments; + public Rect bounds; + + private Polygon[][] polygons; + private IntersectionTester it; + private NavSurface owner; + private Tuple[] subtractors; + Matrix4x4 surfaceWorldToLocal; + Matrix4x4 surfaceLocalToWorld; + + private Thread bakeThread; + private volatile float progress = 0; + private volatile bool aborted; + + public NavSurfaceBakeJob(NavSurface owner) + { + this.owner = owner; + } + + public void Start(Polygon[][] polygons, IntersectionTester it, Tuple[] subtractors, Matrix4x4 surfaceWorldToLocal) + { + this.polygons = polygons; + this.it = it; + this.subtractors = subtractors; + this.surfaceWorldToLocal = surfaceWorldToLocal; + this.surfaceLocalToWorld = surfaceWorldToLocal.inverse; + + aborted = false; + progress = 0; + + bakeThread = new Thread(Bake); + bakeThread.IsBackground = true; + bakeThread.Start(); + } + + public void AbortJoin() + { + if (bakeThread != null && bakeThread.IsAlive) + { + this.aborted = true; + bakeThread.Join(); + } + } + + private void Bake() + { + // filter out empty polygons + polygons = polygons.Where(p => p.Length > 0).ToArray(); + + if (polygons.Length == 0) + { + navSegments = new List(0); + bounds = new Rect(); + return; + } + + var sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + + var polySet = new PolygonSet(); + foreach (var polys in polygons) + { + foreach (var poly in polys) + { + polySet.AddPolygon(it.Clipper, poly); + } + } + + //pre process, simplify countours + bounds = polySet.First().BoundingRect; + foreach (var poly in polySet) + { + poly.Simplify(owner.SmallestDistanceYouCareAbout); + bounds = bounds.CombineWith(poly.BoundingRect); + } + + float totalContourCount = 0; + foreach (var poly in polySet) + { + totalContourCount += poly.Holes.Count + 1; + } + + navSegments = new List((int)totalContourCount * 5); + float processedContourCount = 0; + foreach (var poly in polySet) + { + foreach (var contour in poly) + { + it.MarkContour(contour, owner, polySet, navSegments); + + processedContourCount++; + progress = processedContourCount / totalContourCount; + + if (aborted) + goto End; + } + } + + // post process + // 1. filter slopes + FilterSlopes(); + + // 2. substract substractors + FilterSubtractors(); + + // 3. filter by length + FilterSmallSegments(); + + End: + sw.Stop(); + TotalBakeTime = sw.ElapsedMilliseconds; + } + + private void RemoveSegmentAt(int index) + { + if (navSegments[index].HasNext) + { + navSegments[navSegments[index].NextSegmentIndex].PrevSegmentIndex = -1; + } + if (navSegments[index].HasPrev) + { + navSegments[navSegments[index].PrevSegmentIndex].NextSegmentIndex = -1; + } + + int lastIndex = navSegments.Count - 1; + if (lastIndex != index) + { + if (navSegments[lastIndex].HasNext) + { + navSegments[navSegments[lastIndex].NextSegmentIndex].PrevSegmentIndex = index; + } + if (navSegments[lastIndex].HasPrev) + { + navSegments[navSegments[lastIndex].PrevSegmentIndex].NextSegmentIndex = index; + } + navSegments[index] = navSegments[lastIndex]; + } + navSegments.RemoveAt(lastIndex); + } + + private void FilterSlopes() + { + for (int i = 0; i < navSegments.Count; i++) + { + var seg = navSegments[i]; + if (Vector2.Angle(Vector2.up, surfaceLocalToWorld.MultiplyVector(seg.Normal)) > owner.MaxSlopeAngle) + { + RemoveSegmentAt(i); + i--; + } + } + } + + private void FilterSubtractors() + { + float i1, i2; + for (int i = 0; i < navSegments.Count; i++) + { + float angle = Vector2.SignedAngle(navSegments[i].Tangent, Vector2.up); + + foreach (var s in subtractors) + { + if (!ExtendedGeometry.IsAngleBetweenAngles(s.Item2.x, s.Item2.y, angle)) + continue; + + if (ExtendedGeometry.RectLineIntersection(s.Item1, surfaceLocalToWorld.MultiplyPoint3x4(navSegments[i].GetPositionAlongSegment(0)), surfaceLocalToWorld.MultiplyPoint3x4(navSegments[i].GetPositionAlongSegment(navSegments[i].Length)), out i1, out i2)) + { + // entirely inside + if (i1 < 0 && i2 > 1) + { + RemoveSegmentAt(i); + i--; + break; + } + else if (i1 > 0 || i2 < 1) + { + // inside, 2 intersections, subdiv + float cellSize = (float)navSegments[i].Length / (float)navSegments[i].CellCount; + float[] clearances = navSegments[i].CloneCellClearances(); + + NavSegment segA = null; + NavSegment segB = null; + + if (i1 > 0 && i1 < 1) + { + int cellCountA = Mathf.CeilToInt(navSegments[i].CellCount * i1); + float cellSizeA = (float)(i1 * navSegments[i].Length) / (float)cellCountA; + float cellConvA = cellSizeA / cellSize; + bool cellSizeEqual = Mathf.Abs(cellSizeA - cellSize) < 0.001f; + + float[] clearancesA = new float[cellCountA]; + + for (int iCell = 0; iCell < clearancesA.Length; iCell++) + { + int a = Mathf.FloorToInt(iCell * cellConvA); + + if (cellSizeEqual) + clearancesA[iCell] = clearances[a]; + else + { + int b = Mathf.FloorToInt((iCell + 1) * cellConvA); + + // prevents rounding issue + if (b >= clearances.Length) + b--; + + clearancesA[iCell] = Mathf.Min(clearances[a], clearances[b]); + } + } + + Vector2 newStart = surfaceLocalToWorld.MultiplyPoint3x4(navSegments[i].Start); + segA = new NavSegment(owner, surfaceWorldToLocal.MultiplyPoint3x4(newStart), navSegments[i].Tangent, i1 * navSegments[i].Length, clearancesA); + } + + if (i2 > 0 && i2 < 1) + { + int cellCountB = Mathf.CeilToInt(navSegments[i].CellCount * (1f - i2)); + + float cellSizeB = (float)((1f - i2) * navSegments[i].Length) / (float)cellCountB; + float cellConvB = cellSizeB / cellSize; + float cellOffset = ((navSegments[i].Length / cellSizeB) - cellCountB) * cellConvB; + bool cellSizeEqual = Mathf.Abs(cellSizeB - cellSize) < 0.001f; + + float[] clearancesB = new float[cellCountB]; + + for (int iCell = 0; iCell < clearancesB.Length; iCell++) + { + int a = Mathf.FloorToInt(cellOffset + iCell * cellConvB); + + + //happens when cellsizes match exactly + if (cellSizeEqual) + clearancesB[iCell] = clearances[a]; + else + { + int b = Mathf.FloorToInt(cellOffset + (iCell + 1) * cellConvB); + + // prevents rounding issue + if (b >= clearances.Length) + b--; + + clearancesB[iCell] = Mathf.Min(clearances[a], clearances[b]); + } + } + + Vector2 newStart = navSegments[i].Start + navSegments[i].Tangent * i2 * navSegments[i].Length; + segB = new NavSegment(owner, newStart, navSegments[i].Tangent, (1f - i2) * navSegments[i].Length, clearancesB); + } + + if (segA != null && segB != null) + { + if (navSegments[i].HasNext) + navSegments[navSegments[i].NextSegmentIndex].PrevSegmentIndex = navSegments.Count; + + segA.PrevSegmentIndex = navSegments[i].PrevSegmentIndex; + segB.NextSegmentIndex = navSegments[i].NextSegmentIndex; + + navSegments[i] = segA; + navSegments.Add(segB); + } + else if (segA != null) + { + if (navSegments[i].HasNext) + navSegments[navSegments[i].NextSegmentIndex].PrevSegmentIndex = -1; + + segA.PrevSegmentIndex = navSegments[i].PrevSegmentIndex; + navSegments[i] = segA; + } + else if (segB != null) + { + if (navSegments[i].HasPrev) + navSegments[navSegments[i].PrevSegmentIndex].NextSegmentIndex = -1; + + segB.NextSegmentIndex = navSegments[i].NextSegmentIndex; + navSegments[i] = segB; + } + } + } + } + } + } + + private void FilterSmallSegments() + { + for (int i = 0; i < navSegments.Count; i++) + { + var seg = navSegments[i]; + if (seg.Length < owner.MinSegmentLength) + { + RemoveSegmentAt(i); + i--; + } + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/NavSurfaceBakeJob.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/NavSurfaceBakeJob.cs.meta new file mode 100644 index 0000000..85886e5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/NavSurfaceBakeJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e80d421fda183c14f9f8fceb48c6d850 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/PolygonSet.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/PolygonSet.cs new file mode 100644 index 0000000..1acc553 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/PolygonSet.cs @@ -0,0 +1,91 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class PolygonSet : IEnumerable + { + private B2DynamicTree polygonTree = new B2DynamicTree(); + + public void AddPolygon(IClipper clipper, Polygon newPoly) + { + if (newPoly.Hull.IsClosed) + { + // try to merge the new polygon with the existing once + List polygonsToInsert = new List(4); + var iterator = polygonTree.Query(newPoly.BoundingRect); + while (iterator.MoveNext()) + { + var poly = polygonTree.GetUserData(iterator.Current); + if (poly.Hull.IsClosed) + { + var resultType = clipper.Compute(poly, newPoly, BoolOpType.UNION, out var resultPolys); + if (resultType == ResultType.Clipped) + { + // delete poly + polygonTree.RemoveProxy(iterator.Current); + newPoly = resultPolys[0]; + } + } + else + { + var resultType = clipper.Compute(poly, newPoly, BoolOpType.DIFFERENCE, out var resultPolys, true); + if (resultType == ResultType.Clipped) + { + polygonsToInsert.AddRange(resultPolys); + polygonTree.RemoveProxy(iterator.Current); + } + } + } + foreach (var poly in polygonsToInsert) + polygonTree.CreateProxy(poly.BoundingRect, poly); + polygonTree.CreateProxy(newPoly.BoundingRect, newPoly); + } + else + { + List workList = new List(); + List polygonsToTest = new List(); + + polygonsToTest.Add(newPoly); + + var iterator = polygonTree.Query(newPoly.BoundingRect); + while (iterator.MoveNext()) + { + var poly = polygonTree.GetUserData(iterator.Current); + if (!poly.Hull.IsClosed) + continue; + foreach (var polyToTest in polygonsToTest) + { + var resultType = clipper.Compute(polyToTest, poly, BoolOpType.DIFFERENCE, out var result, true); + workList.AddRange(result); + } + var swap = polygonsToTest; + polygonsToTest = workList; + workList = swap; + workList.Clear(); + } + + foreach (var poly in polygonsToTest) + polygonTree.CreateProxy(poly.BoundingRect, poly); + } + } + + public IEnumerable Query(Rect aabb) + { + var iterator = polygonTree.Query(aabb); + while (iterator.MoveNext()) + yield return polygonTree.GetUserData(iterator.Current); + } + + public IEnumerator GetEnumerator() + { + return ((IEnumerable)polygonTree).GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return ((IEnumerable)polygonTree).GetEnumerator(); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/PolygonSet.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/PolygonSet.cs.meta new file mode 100644 index 0000000..8223d80 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/PolygonSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b932c82fe004d5241a91ddc0c3110368 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StableConnector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StableConnector.cs new file mode 100644 index 0000000..08d15b7 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StableConnector.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; + +namespace PathBerserker2d +{ + internal class StableConnector where T : System.IEquatable + { + public void Add(T a, T b) + { + LinkedListNode> current = openPolygons.First; + + while (current != null) + { + LinkedListNode> next = current.Next; + + StablePointChain currentChain = current.Value; + + if (currentChain.LinkSegment(a, b)) + { + if (currentChain.IsClosed()) + { + closedPolygons.AddLast(currentChain); + openPolygons.Remove(current); + return; + } + else + { + LinkedListNode> innerCurrent = current.Next; + + while (innerCurrent != null) + { + LinkedListNode> innerNext = innerCurrent.Next; + + if (currentChain.LinkPointChain(innerCurrent.Value)) + { + openPolygons.Remove(innerCurrent); + break; + } + innerCurrent = innerNext; + } + } + return; + } + current = next; + } + openPolygons.AddLast(new StablePointChain(a, b)); + return; + } + + LinkedListNode> begin() { return closedPolygons.First; } + LinkedListNode> end() { return closedPolygons.Last; } + + public void Clear() + { + closedPolygons.Clear(); + openPolygons.Clear(); + } + + public int GetNumClosedPolygons() { return closedPolygons.Count; } + + LinkedList> openPolygons = new LinkedList>(); + public LinkedList> closedPolygons = new LinkedList>(); + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StableConnector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StableConnector.cs.meta new file mode 100644 index 0000000..72a7fd4 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StableConnector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 303b1b9f64c54d14fb937b565d682481 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StablePointChain.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StablePointChain.cs new file mode 100644 index 0000000..d2ee336 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StablePointChain.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using System; + +namespace PathBerserker2d +{ + internal class StablePointChain where T : IEquatable + { + public LinkedList points = new LinkedList(); + + bool closed; // is the first point linked with the last one + + public StablePointChain(T a, T b) + { + closed = false; + + Add(a, b); + } + + public void Add(T a, T b) + { + points.AddLast(a); + points.AddLast(b); + } + + public bool LinkSegment(T a, T b) + { + if (b.Equals(points.First.Value)) + { + if (a.Equals(points.Last.Value)) + closed = true; + else + points.AddFirst(a); + return true; + } + if (a.Equals(points.Last.Value)) + { + if (b.Equals(points.First.Value)) + closed = true; + else + points.AddLast(b); + return true; + } + return false; + } + + public bool LinkPointChain(StablePointChain chain) + { + if (chain.points.First.Value.Equals(points.Last.Value)) + { + chain.points.RemoveFirst(); + AppendRange(chain.points); + + return true; + } + if (chain.points.Last.Value.Equals(points.First.Value)) + { + points.RemoveFirst(); + PrependRange(chain.points); + + return true; + } + return false; + } + + private void PrependRange(LinkedList list) + { + var node = list.Last; + do + { + this.points.AddFirst(node.Value); + } while ((node = node.Previous) != null); + } + + private void AppendRange(LinkedList list) + { + var node = list.First; + do + { + this.points.AddLast(node.Value); + } while ((node = node.Next) != null); + } + + public LinkedListNode First { get { return points.First; } } + public LinkedListNode Last { get { return points.Last; } } + + public bool IsClosed() { return closed; } + public void Clear() { points.Clear(); } + public int GetNumPoints() { return points.Count; } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StablePointChain.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StablePointChain.cs.meta new file mode 100644 index 0000000..67c7a12 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/Creation/StablePointChain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0d953896d15cb447b92d08cd1972cfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/IColliderFilter.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/IColliderFilter.cs new file mode 100644 index 0000000..45110a9 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/IColliderFilter.cs @@ -0,0 +1,10 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace PathBerserker2d +{ + internal interface IColliderFilter + { + IEnumerable Filter(IEnumerable colliders); + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/IColliderFilter.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/IColliderFilter.cs.meta new file mode 100644 index 0000000..1724533 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/IColliderFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c3d0be58d090604f8d8340d3fcb51d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/INavSegmentCreationParamProvider.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/INavSegmentCreationParamProvider.cs new file mode 100644 index 0000000..61a4875 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/INavSegmentCreationParamProvider.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + internal interface INavSegmentCreationParamProvider + { + float MaxClearance { get; } + float MinClearance { get; } + float CellSize { get; } + LayerMask ColliderMask { get; } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/INavSegmentCreationParamProvider.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/INavSegmentCreationParamProvider.cs.meta new file mode 100644 index 0000000..fa37f56 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/INavSegmentCreationParamProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: feb0a5de8c6910c4cbf247bff903f262 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments.meta new file mode 100644 index 0000000..9fc5f6b --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9ba631cc202a4d44a0f62ae74788b74 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegment.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegment.cs new file mode 100644 index 0000000..121eb40 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegment.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + [System.Serializable] + internal class NavSegment : LineSegmentWithClearance, System.IEquatable + { + public NavSurface Owner { get { return owner; } } + + [SerializeField] + private NavSurface owner; + + public NavSegment(NavSurface owner, Vector2 start, Vector2 dirNorm, float length, float[] cellClearances) : base(start, dirNorm, length, cellClearances) + { + this.owner = owner; + } + + public bool Equals(NavSegment other) + { + return ReferenceEquals(other, this); + } + + public override string ToString() + { + return $"NavSegment({Start} -{Tangent}> {End})"; + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegment.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegment.cs.meta new file mode 100644 index 0000000..b569ff6 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1edc43a078c650468d85cf0e014d7d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPointer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPointer.cs new file mode 100644 index 0000000..cd968d5 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPointer.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; + +namespace PathBerserker2d +{ + /// + /// Points to a segment. + /// + public struct NavSegmentPointer : IEquatable + { + public static NavSegmentPointer Invalid { get { return new NavSegmentPointer(null, 0); } } + + public readonly int proxyDataIndex; + public readonly NavSurface surface; + + public NavSegmentPointer(NavSurface surface, int proxyDataIndex) + { + this.surface = surface; + this.proxyDataIndex = proxyDataIndex; + } + + public static bool operator ==(NavSegmentPointer a, NavSegmentPointer b) + { + return a.surface == b.surface && a.proxyDataIndex == b.proxyDataIndex; + } + + public static bool operator !=(NavSegmentPointer a, NavSegmentPointer b) + { + return a.surface != b.surface || a.proxyDataIndex != b.proxyDataIndex; + } + + public override bool Equals(object obj) + { + return obj is NavSegmentPointer && Equals((NavSegmentPointer)obj); + } + + public bool Equals(NavSegmentPointer other) + { + return proxyDataIndex == other.proxyDataIndex && + EqualityComparer.Default.Equals(surface, other.surface); + } + + public override int GetHashCode() + { + var hashCode = 1340906973; + hashCode = hashCode * -1521134295 + proxyDataIndex.GetHashCode(); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(surface); + return hashCode; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPointer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPointer.cs.meta new file mode 100644 index 0000000..248ebb4 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPointer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e41ae4e12fece74ea72adcba77c7b39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPositionPointer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPositionPointer.cs new file mode 100644 index 0000000..94acd2f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPositionPointer.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Points to a position on a segment. + /// + public struct NavSegmentPositionPointer : IEquatable + { + public static NavSegmentPositionPointer Invalid { get { return new NavSegmentPositionPointer(null, null, 0); } } + + public Vector2 Position => cluster.owner.LocalToWorld.MultiplyPoint3x4(cluster.GetPositionAlongSegment(t)); + public Vector2 Normal => surface.LocalToWorldMatrix.MultiplyVector(cluster.Normal); + + internal readonly float t; + internal readonly NavGraphNodeCluster cluster; + internal readonly NavSurface surface; + // used to detect if the surface has changed + internal readonly int bakeIteration; + + internal NavSegmentPositionPointer(NavSurface surface, NavGraphNodeCluster cluster, float t) + { + this.surface = surface; + this.cluster = cluster; + this.t = t; + this.bakeIteration = surface != null ? surface.BakeIteration : -1; + } + + public static bool operator ==(NavSegmentPositionPointer a, NavSegmentPositionPointer b) + { + return a.surface == b.surface && a.cluster == b.cluster && a.t == b.t; + } + + public static bool operator !=(NavSegmentPositionPointer a, NavSegmentPositionPointer b) + { + return a.surface != b.surface || a.cluster != b.cluster || a.t != b.t; + } + + [Obsolete("Use the property Position instead.")] + public Vector2 GetPosition() + { + return cluster.owner.LocalToWorld.MultiplyPoint3x4(cluster.GetPositionAlongSegment(t)); + } + + public bool IsInvalid() + { + return surface == null || bakeIteration != surface.BakeIteration; + } + + public bool IsValid() + { + return surface != null && surface.BakeIteration == bakeIteration; + } + + public bool Equals(NavSegmentPositionPointer other) + { + return other != null && t == other.t && + cluster == other.cluster && + surface == other.surface; + } + + + public override bool Equals(object obj) + { + if ((obj == null) || !this.GetType().Equals(obj.GetType())) + { + return false; + } + else + { + var p = (NavSegmentPositionPointer)obj; + return Equals(p); + } + } + + public override string ToString() + { + if (IsInvalid()) + return $"NSP is invalid"; + return $"NSP points at " + Position; + } + + public override int GetHashCode() + { + int hashCode = 1774642579; + hashCode = hashCode * -1521134295 + t.GetHashCode(); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(cluster); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(surface); + hashCode = hashCode * -1521134295 + bakeIteration.GetHashCode(); + return hashCode; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPositionPointer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPositionPointer.cs.meta new file mode 100644 index 0000000..e18da5c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSegmentPositionPointer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e51973dfb11a2024f865147ad3348ab4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSubsegmentPointer.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSubsegmentPointer.cs new file mode 100644 index 0000000..28a1af7 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSubsegmentPointer.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Points to a subsection on a segment. It has a start point on the target segment and a length. + /// + public struct NavSubsegmentPointer : IEquatable + { + public static NavSubsegmentPointer Invalid { get { return new NavSubsegmentPointer(null, 0, 0, 0); } } + + public readonly float t; + public readonly float length; + public readonly int proxyDataIndex; + public readonly NavSurface surface; + public readonly int bakeIteration; + + public NavSubsegmentPointer(NavSurface surface, int proxyDataIndex, float t, float length) + { + this.surface = surface; + this.proxyDataIndex = proxyDataIndex; + this.t = t; + this.length = length; + this.bakeIteration = surface != null ? surface.BakeIteration : -1; + } + + public static bool operator ==(NavSubsegmentPointer a, NavSubsegmentPointer b) + { + return a.surface == b.surface && a.proxyDataIndex == b.proxyDataIndex && a.t == b.t && a.length == b.length; + } + + public static bool operator !=(NavSubsegmentPointer a, NavSubsegmentPointer b) + { + return a.surface != b.surface || a.proxyDataIndex != b.proxyDataIndex || a.t != b.t || a.length != b.length; + } + + public override bool Equals(object obj) + { + return obj is NavSubsegmentPointer && Equals((NavSubsegmentPointer)obj); + } + + public bool Equals(NavSubsegmentPointer other) + { + return t == other.t && + length == other.length && + proxyDataIndex == other.proxyDataIndex && + EqualityComparer.Default.Equals(surface, other.surface); + } + + public bool IsInvalid() + { + return surface == null || bakeIteration != surface.BakeIteration; + } + + public override int GetHashCode() + { + var hashCode = -1731056371; + hashCode = hashCode * -1521134295 + t.GetHashCode(); + hashCode = hashCode * -1521134295 + length.GetHashCode(); + hashCode = hashCode * -1521134295 + proxyDataIndex.GetHashCode(); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(surface); + return hashCode; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSubsegmentPointer.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSubsegmentPointer.cs.meta new file mode 100644 index 0000000..0db7115 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSegments/NavSubsegmentPointer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b6e634508177a64192239519f0e2e07 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSurface.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSurface.cs new file mode 100644 index 0000000..9a478a0 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSurface.cs @@ -0,0 +1,321 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// A collection of line segments to traverse on. + /// + /// + /// NavSurfaces are independent collections of segments. At runtime their data gets added to the pathfinder. + /// You can load and unload NavSurfaces at runtime. This allows you to setup Prefabs with navigation data and stream them in at runtime. + /// Loading and unloading is as simple as enabling and disabling a NavSurface script. + /// ## Baking + /// The bake process **only consideres colliders that are children of the NavSurface**. + /// This also extends to the clearance calculation of segment cells. + /// Baking is currently limited to editor mode only. You can't bake at runtime. + /// ## Transformations + /// All baked postion data is relative to the current NavSurface transformation. + /// Segments in calculated paths remain relative to the NavSurface of origin. + /// If you pathfind on a NavSurface and then move it, the path will reflect that transformation, without any extra calculations. + /// + /// See also \ref cc_navagent "Core concepts: NavAgent". + /// + [ScriptExecutionOrder(-55)] + [AddComponentMenu("PathBerserker2d/Nav Surface")] + public class NavSurface : MonoBehaviour, INavSegmentCreationParamProvider + { + internal const int CurrentBakeVersion = 2; + + public Rect WorldBounds => Geometry.EnlargeRect(Geometry.TransformBoundingRect(localBoundingRect, LocalToWorldMatrix), PathBerserker2dSettings.PointMappingDistance); + + public float MaxClearance => maxClearance; + + public float MinClearance => minClearance; + + public float CellSize => cellSize; + + public LayerMask ColliderMask + { + get => includedColliders; + set => includedColliders = value; + } + + /// + /// Length of all segments combined + /// + public float TotalLineLength => totalLineLength; + + /// + /// Segments exceeding this angle are removed from the bake output. Should equal the highest slope angle of your NavAgents. + /// + public float MaxSlopeAngle => maxSlopeAngle; + + /// + /// Parameter for the line simplifier (Ramer-Douglas-Peucker). Higher values reduce overall segment count at the expense of fitting the original collider shape. + /// + public float SmallestDistanceYouCareAbout => smallestDistanceYouCareAbout; + + /// + /// Segments shorter than this will be removed from the bake output. + /// + public float MinSegmentLength => minSegmentLength; + + /// + /// Gets fired after a BakeJob initiated by a call to Bake() completes. + /// THIS DOES NOT mean that the changes are already available to the pathfinder. That will happen later. + /// Use OnReadyToPathfind for that instead. This only really tells you when you may start a new bake. + /// + public event Action OnBakingCompleted; + + /// Called after the NavSurface has been added to the pathfinder. Usually sometime after OnBakingCompleted has been called. Only know are the changes from baking actually visible in the pathfinder. + /// IF THERE ARE MULTIPLE NavSurface Components on this GameObject you are ass out. These events will fire for both of them always. Don't put 2 NavSurfaces on the same GameObject! + public event Action OnReadyToPathfind; + + /// Called after the NavSurface is removed from the pathfinder. Usually after the NavSurface is deleted OR REBAKED! Removing the old NavSurface data to replace it with new baked data will trigger this event. When this event is called, you can be sure that the old data NavData is no longer in use for anything. + /// IF THERE ARE MULTIPLE NavSurface Components on this GameObject you are ass out. These events will fire for both of them always. Don't put 2 NavSurfaces on the same GameObject! + public event Action OnRemovedFromPathfinding; + + internal List NavSegments => navSegments; + internal NavSurfaceBakeJob BakeJob { get; private set; } + internal bool hasDataChanged; + internal int BakeVersion => bakeVersion; + internal int BakeIteration => bakeIteration; + internal int PBComponentId { get; private set; } + + [Header("Bake Settings")] + [Tooltip("Maximum height that gets checked for potential obstructions. Should equal the height of your largest NavAgent.")] + [SerializeField] + float maxClearance = 1.8f; + + [Tooltip("Parts of segments with less unobstructed space will be erased. Should equal the height of your smallest NavAgent.")] + [SerializeField] + float minClearance = 0.1f; + + [Tooltip("Size of a single segment part. Smaller numbers increase the accuracy of obstruction calculations at the expense of both bake and runtime performance.")] + [SerializeField] + float cellSize = 0.1f; + + [Tooltip("Colliders to consider for the bake process.")] + [SerializeField] + LayerMask includedColliders = ~0; + + + [Tooltip("Use only colliders from gameobjects marked static.")] + [SerializeField] + bool onlyStaticColliders = false; + + [Tooltip("Segments exceeding this angle are removed from the bake output. Should equal the highest slope angle of your NavAgents.")] + [SerializeField] + [Range(0, 180)] + float maxSlopeAngle = 180f; + + [Tooltip("Parameter for the line simplifier (Ramer-Douglas-Peucker). Higher values reduce overall segment count at the expense of fitting the original collider shape.")] + [SerializeField] + float smallestDistanceYouCareAbout = 0.1f; + + [Tooltip("Segments shorter than this will be removed from the bake output.")] + [SerializeField] + float minSegmentLength = 0.1f; + + [SerializeField] + private List navSegments = new List(); + + [SerializeField, HideInInspector] + private Rect localBoundingRect; + [SerializeField, HideInInspector] + private float totalLineLength; + [SerializeField, HideInInspector] + // version of bake algorithm this surface was last baked with + private int bakeVersion = 0; + [SerializeField, HideInInspector] + // number of distinct bakes + private int bakeIteration = 0; + + Matrix4x4 localToWorldMat; + + #region Unity_Methods + private void Awake() + { + UpdateLocalMatrix(); + PBComponentId = PBWorld.GeneratePBComponentId(); + PBWorld.NavGraphChangeSource.OnGraphChange += NavGraphChangeSource_OnGraphChange; + } + + private void OnEnable() + { + if (navSegments != null && navSegments.Count > 0) + { + PBWorld.NavGraph.AddNavSurface(this); + } + } + + private void OnDisable() + { + PBWorld.NavGraph.RemoveNavSurface(this); + } + + private void OnValidate() + { + if (minClearance <= 0) + minClearance = 0.1f; + if (maxClearance <= minClearance) + maxClearance = minClearance + 0.1f; + if (cellSize <= 0) + cellSize = 0.1f; + + BakeJob = new NavSurfaceBakeJob(this); + hasDataChanged = true; + } + + private void Update() + { + UpdateLocalMatrix(); + } + + #endregion + + public Vector2 LocalToWorld(Vector2 pos) + { + return LocalToWorldMatrix.MultiplyPoint3x4(pos); + } + + public Matrix4x4 LocalToWorldMatrix + { + get + { + return localToWorldMat; + } + } + + internal Matrix4x4 LocalToWorldMatrixEditor + { + get + { + return Matrix4x4.TRS(transform.position, Quaternion.Euler(0, 0, transform.rotation.eulerAngles.z), Vector3.one); ; + } + } + + public Vector2 WorldToLocal(Vector2 pos) + { + return WorldToLocalMatrix.MultiplyPoint3x4(pos); + } + + public Matrix4x4 WorldToLocalMatrix => LocalToWorldMatrix.inverse; + + /// + /// Updates NavSurface baked data. Baking largely runs in a different thread. This function should be run as a Coroutine. NavSurface will be removed from World first and added back, when baking is completed. + /// Calling this function before the previous bake job completed, will abort the previous job. + /// + public IEnumerator Bake() + { + PBWorld.NavGraph.RemoveNavSurface(this); + StartBakeJob(); + + while (!BakeJob.IsFinished) + { + yield return null; + } + UpdateInternalData(BakeJob.navSegments, BakeJob.bounds); + PBWorld.NavGraph.AddNavSurface(this); + + OnBakingCompleted?.Invoke(); + } + + internal void StartBakeJob() + { + UpdateLocalMatrix(); + if (BakeJob == null) + BakeJob = new NavSurfaceBakeJob(this); + else + BakeJob.AbortJoin(); + + var subtractors = GetComponentsInChildren(); + Tuple[] substractorRects = new Tuple[subtractors.Length]; + for (int i = 0; i < subtractors.Length; i++) + { + var rT = subtractors[i].GetComponent(); + var rect = rT.rect; + Vector2 scaleFactor = rT.lossyScale * rect.size * 0.5f; + Vector2 center = rect.center; + + rect.min = center - scaleFactor + (Vector2)rT.position; + rect.max = center + scaleFactor + (Vector2)rT.position; + + substractorRects[i] = new Tuple(rect, new Vector2(subtractors[i].fromAngle, subtractors[i].toAngle)); + } + + var filter = new ColliderLayerFilter(includedColliders, onlyStaticColliders); + var allColliders = filter.Filter(this.GetComponentsInChildren()).ToArray(); + + var it = new IntersectionTester(this, WorldToLocalMatrix); + Polygon[][] polygons = new Polygon[allColliders.Length][]; + for (int i = 0; i < allColliders.Length; i++) + { + var col = allColliders[i]; + polygons[i] = it.ColliderToPolygon(col); + } + + BakeJob.Start(polygons, it, substractorRects, WorldToLocalMatrix); + } + + internal NavSegment GetSegment(int index) + { + return navSegments[index]; + } + + internal void UpdateInternalData(List segments, Rect bounds) + { + if (segments == null) + { + Debug.LogError("Updating NavSurface failed. Got null as segments"); + return; + } + + this.localBoundingRect = Geometry.TransformBoundingRect(bounds, WorldToLocalMatrix); + + this.totalLineLength = 0; + foreach (var seg in segments) + totalLineLength += seg.Length; + + this.navSegments = segments; + bakeVersion = CurrentBakeVersion; + hasDataChanged = true; + bakeIteration++; + } + + /// + /// Filters and rethrows change events that have this NavSurface as target. It's a convenience feature. + /// You may also just subscribe to PBWorld.NavGraphChangeSource.OnGraphChange and filter the changes yourself. + /// + /// + /// + /// + private void NavGraphChangeSource_OnGraphChange(NavGraphChange arg1, int srcCompId) + { + if (srcCompId == PBComponentId) + { + switch (arg1) + { + case NavGraphChange.NavSurfaceAdded: + OnReadyToPathfind?.Invoke(); + break; + case NavGraphChange.NavSurfaceRemoved: + OnRemovedFromPathfinding?.Invoke(); + break; + default: + // this could happen if there is another component on this gameobject which the change event was directed at. Just ignore it. + break; + } + } + } + + private void UpdateLocalMatrix() + { + localToWorldMat = Matrix4x4.TRS(transform.position, Quaternion.Euler(0, 0, transform.rotation.eulerAngles.z), Vector3.one); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSurface.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSurface.cs.meta new file mode 100644 index 0000000..afd2205 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/NavSurface/NavSurface.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7616445e6074b27418ea1cd9bf9902f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: -55 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/PBWorld.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PBWorld.cs new file mode 100644 index 0000000..865e695 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PBWorld.cs @@ -0,0 +1,235 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Threading; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace PathBerserker2d +{ + /// + /// Singleton managing the global NavGraph instance. + /// + /// + /// Is instantiated automatically on scene load. + /// + /// Use it to access the NavGraph, which is the graph the pathfinder works on. + /// + [ScriptExecutionOrder(-100), AddComponentMenu("")] + public class PBWorld : MonoBehaviour + { + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + private static void Initialize() + { + PathBerserker2dSettings.instance = Resources.Load(PathBerserker2dSettings.GlobalSettingsFile); + var world = new GameObject("PBWorld").AddComponent(); + DontDestroyOnLoad(world); + instance = world; + } + + private static PBWorld instance; + + internal static NavGraph NavGraph { get; set; } + public static INavGraphChangeSource NavGraphChangeSource => NavGraph; + + // threading stuff + CancellationTokenSource pathfinderThreadCancelationSource; + ConcurrentQueue pathRequestQueue; + + private float lastGraphUpdate = -100; + + #region UNITY_METHODS + private void Awake() + { + SceneManager.sceneUnloaded += SceneManager_sceneUnloaded; + } + + private void SceneManager_sceneUnloaded(Scene arg0) + { + // cycle the navgraph one more time to remove all unloaded navgraphs in case the scene is just reloaded + NavGraph.ForceApplyChanges(); + } + + private void OnEnable() + { + NavGraph = new NavGraph(PathBerserker2dSettings.PathfinderThreadCount); + + // create pathfinder threads + pathRequestQueue = new ConcurrentQueue(); + pathfinderThreadCancelationSource = new CancellationTokenSource(); + StartPathfinderThreads(); + } + + private void Start() + { + NavGraph.Update(); + } + + private void OnDisable() + { + pathfinderThreadCancelationSource.Cancel(); + } + + private void Update() + { + if (Time.time - lastGraphUpdate > PathBerserker2dSettings.InitiateUpdateInterval) + { + NavGraph.Update(); + lastGraphUpdate = Time.time; + } + } + + private void Reset() + { + Debug.LogError("This component should not be added manually. It will be automatically instantiated at runtime."); + DestroyImmediate(this); + } + #endregion + + /// + /// Tries to map a point to a navigation position. The distance a point can be away from the nearest segment is specified by .PointMappingDistance + /// + /// Position to map + /// Pointer to mapped position or an invalid pointer, if mapping failed. + /// True, if mapping succeeded + public static bool TryMapPoint(Vector2 position, out NavSegmentPositionPointer pointer) + { + return NavGraph.TryMapPoint(position, out pointer); + } + + /// + /// Tries to map a point to a navigation position. The distance a point can be away is determined by searchRadius + /// + /// Position to map + /// Pointer to mapped position or an invalid pointer, if mapping failed. + /// Maxium search distance when trying to map. + /// True, if mapping succeeded + public static bool TryMapPoint(Vector2 position, float searchRadius, out NavSegmentPositionPointer pointer) + { + return NavGraph.TryMapPoint(position, p => true, searchRadius, out pointer); + } + + /// + /// Tries to map a point to a navigation position. The distance a point can be away is determined by searchRadius. Also makes sure that the point is traversable for the supplied NavAgent. + /// + /// Position to map + /// Pointer to mapped position or an invalid pointer, if mapping failed. + /// Maxium search distance when trying to map. + /// Maxium search distance when trying to map. + /// True, if mapping succeeded + public static bool TryMapPoint(Vector2 position, float searchRadius, NavAgent agent, out NavSegmentPositionPointer pointer) + { + return NavGraph.TryMapPoint(position, p => agent.CouldBeLocatedAt(p), searchRadius, out pointer); + } + + /// + /// Tries to map an Agent to a navigation position. Uses last mapping to speed up search. Will only map the agent to a surface it could traverse. + /// + /// Position to map + /// Pointer with the previously mapped position. Taken as start for search. + /// True, if mapping succeeded + internal static bool TryMapAgent(Vector2 position, NavSegmentPositionPointer lastMapping, NavAgent agent, out NavSegmentPositionPointer result) + { + return NavGraph.TryMapAgent(position, lastMapping, agent, out result); + } + + internal static bool TryMapPointWithStaged(Vector2 position, out NavSegmentPositionPointer pointer) + { + return NavGraph.TryMapPointWithStaged(position, out pointer); + } + + /// Random point on NavGraph. Might not be reachable. + public static Vector2 GetRandomPointOnGraph() + { + return NavGraph.GetRandomPointOnGraph(); + } + + /// + /// Enqueues a . The path will be solved async. Use the PathRequest object to check its status. + /// + /// PathRequest object representing the pathfinding job. + public static void PathTo(PathRequest pathRequest) + { + pathRequest.SetToPending(); +#if PBDEBUG + Debug.Log($"PathRequest from: {pathRequest.start.GetPosition()} to: {pathRequest.goals[0].GetPosition()}"); +#endif + instance.pathRequestQueue.Enqueue(pathRequest); + } + + /// + /// Get all segments intersecting a rotated box. Segments can additionally be filtered by angle. + /// + /// Intersection rect. + /// The rotation of the rect around its center. + /// Minium angle in degree of returned segments. + /// Maximum angle in degree of returned segments. + public static List BoxCast(Rect rect, float rotation, float filterFromAngle, float filterToAngle) + { + filterFromAngle = ClampAngle(filterFromAngle); + filterToAngle = ClampAngle(filterToAngle); + return NavGraph.BoxCast(rect, rotation, filterFromAngle, filterToAngle); + } + + internal static List BoxCastWithStaged(Rect rect, float rotation, float filterFromAngle, float filterToAngle) + { + return NavGraph.BoxCastWithStaged(rect, rotation, filterFromAngle, filterToAngle); + } + + /// + /// Similar to TryMapPoint, but meant for mapping goal positions. Has a configurable search radius. + /// + /// Position to map + /// Maximum distance away from position a mapping is allowed to be. + /// Mapped pointer + /// True, if successfully mapped. + [Obsolete("Use TryMapPoint instead")] + public static bool TryFindClosestPointTo(Vector2 position, float maxMappingDistance, out NavSegmentPositionPointer pointer) + { + return NavGraph.TryMapPoint(position, (p) => true, maxMappingDistance, out pointer); + } + + /// + /// Get the position the is pointing at. + /// + internal static NavGraphNodeCluster GetClusterFromPositionPointer(NavSegmentPositionPointer pointer) + { + NavGraphNodeCluster cluster = null; + NavGraph.TryGetClusterAt(pointer, out cluster); + return cluster; + } + + private static int nextFreeComponentId = 1; + internal static int GeneratePBComponentId() + { + return nextFreeComponentId++; + } + + private void StartPathfinderThreads() + { + if (Application.platform == RuntimePlatform.WebGLPlayer) + { + PathfinderThread p = new PathfinderThread(pathfinderThreadCancelationSource.Token, pathRequestQueue, NavGraph, 0); + StartCoroutine(p.CoroutineRun()); + } + else + { + for (int i = 0; i < PathBerserker2dSettings.PathfinderThreadCount; i++) + { + PathfinderThread p = new PathfinderThread(pathfinderThreadCancelationSource.Token, pathRequestQueue, NavGraph, i); + Thread t = new Thread(p.Run); + t.Start(); + } + } + } + + private static float ClampAngle(float angle) + { + while (angle > 360) + angle -= 360; + while (angle < 0) + angle += 360; + return angle; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/PBWorld.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PBWorld.cs.meta new file mode 100644 index 0000000..ee2ff04 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PBWorld.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2048e50ad4fa22d40b52f955baa925d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: -100 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2d.asmdef b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2d.asmdef new file mode 100644 index 0000000..0f938ca --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2d.asmdef @@ -0,0 +1,15 @@ +{ + "name": "PathBerserker2d", + "references": [ + "GUID:75469ad4d38634e559750d17036d5f7c" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2d.asmdef.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2d.asmdef.meta new file mode 100644 index 0000000..4d6ad38 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2d.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f483b8ed1e509354483048b0c7a56768 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2dSettings.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2dSettings.cs new file mode 100644 index 0000000..649572c --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2dSettings.cs @@ -0,0 +1,298 @@ +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Contains all project wide settings for PathBerserker2d. + /// + /// + /// Find it at *Edit/Project Settings/PathBerserker2d* + /// + public class PathBerserker2dSettings : ScriptableObject + { + public const string GlobalSettingsFolder = "Assets/PathBerserker2d/Resources"; + public const string GlobalSettingsFile = "PathBerserker2dSettings"; + + internal readonly static string[] buildinNavLinkTypeNames = new string[] { + "corner", // -1 + "jump", + "fall", + "teleport", + "climb", + "elevator" + }; + + internal static PathBerserker2dSettings instance; + + /// + /// Should unselected links be drawn? Only relevant when not in play mode. + /// + public static bool DrawUnselectedLinks { get { return instance.drawUnselectedLinks; } } + + /// + /// Array of all link type names + /// + public static string[] NavLinkTypeNames { get { return instance.navLinkTypeNames; } } + + /// + /// Array of all NavTag colors + /// + public static Color[] NavLinkTypeColors { get { return instance.navLinkTypeColors; } } + + /// + /// Array of all NavTag names + /// + public static string[] NavTags { get { return instance.navTags; } } + + /// + /// Array of all NavTag colors + /// + public static Color[] NavTagColors { get { return instance.navTagColors; } } + + /// + /// Should unselected surfaces be drawn? Only relevant when not in play mode. + /// + public static bool DrawUnselectedSurfaces { get { return instance.drawUnselectedSurfaces; } } + + /// + /// Should unselected substractors be drawn? Only relevant when not in play mode. + /// + public static bool DrawUnselectedSubstractors { get { return instance.drawUnselectedSubstractors; } } + + /// + /// Should unselected area markers be drawn? Only relevant when not in play mode. + /// + public static bool DrawUnselectedAreaMarkers { get { return instance.drawUnselectedAreaMarkers; } } + + /// + /// Maximum distance a point will try to be mapped to the NavGraph. Used in performance critical functions (e.g. mapping a NavAgents position) and should be as small as possible. + /// + public static float PointMappingDistance { get { return instance.pointMappingDistance; } } + + /// + /// Time between NavGraph updates. NavGraph queues changes to apply them in batch at this interval. Lower values will lower performance. + /// + public static float InitiateUpdateInterval { get { return instance.initiateUpdateInterval; } } + + /// + /// Amount of threads used for pathfinding. NOTE: WebGL doesn't support threads. If you build for WebGL this number is meaningless. + /// + public static int PathfinderThreadCount + { + get + { + if (Application.platform == RuntimePlatform.WebGLPlayer) + return 1; + return instance.pathfinderThreadCount; + } + } + + /// + /// Draw the NavGraph while in play mode? + /// + public static bool DrawGraphWhilePlaying { get { return instance.drawGraphWhilePlaying; } } + + /// + /// Maximum distance to search for the nearest NavGraph position to a point. Used in functions to e.g. map a mouse cursor click to a nav position. Make it as large as you want. + /// + [System.Obsolete] + public static float ClosestToSegmentMaxDistance { get { return instance.closestToSegmentMaxDistance; } } + + /// + /// Line width of NavGraph/NavSurface visualization. + /// + public static float NavSurfaceLineWidth { get { return instance.navSurfaceLineWidth; } } + + /// + /// Line width of NavAreaMarker visualization (only visible in playmode) + /// + public static float NavAreaMarkerLineWidth { get { return instance.navAreaMarkerLineWidth; } } + + /// + /// Whether to convert a PolygonCollider2d to a polygon with CreateMesh() or by reading its first Path. + /// + public static bool UsePolygonCollider2dPathsForBaking { get { return instance.usePolygonCollider2dPathsForBaking; } } + + /// + /// Converts a link type name to its corresponding integer. Throws an ArgumentException if name is not a valid link type name. + /// + public static int GetLinkTypeFromName(string name) + { + var names = NavLinkTypeNames; + for (int i = 0; i < names.Length; i++) + { + if (name == names[i]) + return i; + } + throw new ArgumentException(name + "is not a valid link type name. (case sensitive!)"); + } + + [Tooltip("Maximum distance a point will try to be mapped to the NavGraph. Used in performance critical functions (e.g. mapping a NavAgents position) and should be as small as possible.")] + [Header("Pathfinding")] + [SerializeField, HideInInspector] + private float pointMappingDistance = 0.1f; + + [SerializeField, HideInInspector] + private int pathfinderThreadCount = 1; + + [Tooltip("Time between NavGraph updates. NavGraph queues changes to apply them in batch at this interval. Lower values will lower performance.")] + [SerializeField, HideInInspector] + private float initiateUpdateInterval = 0.1f; + + [Tooltip("Maximum distance to search for the nearest NavGraph position to a point. Used in functions to e.g. map a mouse cursor click to a nav position. Make it as large as you want.")] + [SerializeField, HideInInspector] + private float closestToSegmentMaxDistance = 20; + + [Header("NavLinks")] + [SerializeField, HideInInspector] + private string[] navLinkTypeNames = new string[] { }; + [SerializeField, HideInInspector] + private Color[] navLinkTypeColors = new Color[] { }; + + [Header("NavSegments")] + [SerializeField, HideInInspector] + private string[] navTags = new string[] { "default" }; + [SerializeField, HideInInspector] + private Color[] navTagColors = new Color[] { Color.clear }; + + [Tooltip("Should unselected links be drawn? Only relevant when not in play mode.")] + [Header("Visualization")] + [SerializeField, HideInInspector] + private bool drawUnselectedLinks = true; + + [Tooltip("Should unselected surfaces be drawn? Only relevant when not in play mode.")] + [SerializeField, HideInInspector] + private bool drawUnselectedSurfaces = true; + + [Tooltip("Should unselected substractors be drawn? Only relevant when not in play mode.")] + [SerializeField, HideInInspector] + private bool drawUnselectedSubstractors = true; + + [Tooltip("Should unselected area markers be drawn? Only relevant when not in play mode.")] + [SerializeField, HideInInspector] + private bool drawUnselectedAreaMarkers = true; + + [Tooltip("Draw the NavGraph while in play mode?")] + [SerializeField, HideInInspector] + private bool drawGraphWhilePlaying = true; + + [Tooltip("Line width of NavGraph/NavSurface visualization")] + [SerializeField, HideInInspector] + private float navSurfaceLineWidth = 0.04f; + + [Tooltip("Line width of NavAreaMarker visualization (only visible in playmode)")] + [SerializeField, HideInInspector] + private float navAreaMarkerLineWidth = 0.04f; + + [Tooltip("Whether to convert a PolygonCollider2d to a polygon with CreateMesh() or by reading its first Path.")] + [SerializeField, HideInInspector] + private bool usePolygonCollider2dPathsForBaking = false; + + internal void OnValidate() + { + ValidateLinkTypeNames(); + pointMappingDistance = Mathf.Max(0.001f, pointMappingDistance); + pathfinderThreadCount = Mathf.Max(1, pathfinderThreadCount); + initiateUpdateInterval = Mathf.Max(0.1f, initiateUpdateInterval); + + navTags[0] = "default"; + navTagColors[0] = Color.clear; + if (navTags.Length > 32) + { + System.Array.Resize(ref navTags, 32); + } + if (navTagColors.Length != navTags.Length) + { + int oldLength = navTagColors.Length; + System.Array.Resize(ref navTagColors, navTags.Length); + for (int i = oldLength; i < navTags.Length; i++) + navTagColors[i] = DifferentColors.GetColor(i); + } + } + + internal void ValidateLinkTypeNames() + { + if (navLinkTypeNames.Length < buildinNavLinkTypeNames.Length) + { + navLinkTypeNames = new string[buildinNavLinkTypeNames.Length]; + } + if (navLinkTypeNames.Length > 32) + { + System.Array.Resize(ref navLinkTypeNames, 32); + } + if (navLinkTypeColors.Length != navLinkTypeNames.Length) + { + int oldLength = navLinkTypeColors.Length; + System.Array.Resize(ref navLinkTypeColors, navLinkTypeNames.Length); + for (int i = oldLength; i < navLinkTypeNames.Length; i++) + navLinkTypeColors[i] = DifferentColors.GetColor(i); + } + + for (int i = 0; i < buildinNavLinkTypeNames.Length; i++) + { + navLinkTypeNames[i] = buildinNavLinkTypeNames[i]; + } + } + + /// + /// Get the human readable name of a specific link type. + /// + public static string GetLinkTypeName(int linkType) + { + return instance.navLinkTypeNames[linkType]; + } + + /// + /// Get color associated with specific link type. + /// + public static Color GetLinkTypeColor(int linkType) + { + return instance.navLinkTypeColors[linkType]; + } + + /// + /// Set the color of a specific NavLinkType. + /// + internal static void SetLinkTypeColor(int navTag, Color color) + { + instance.navLinkTypeColors[navTag] = color; + } + + /// + /// Get the assigned color of a specific NavTag. + /// + public static Color GetNavTagColor(int navTag) + { + return instance.navTagColors[navTag]; + } + + /// + /// If the NavTag does not exists, returns 0 + /// + public static int EnsureNavTagExists(int navTag) + { + if (navTag < 0 || navTag >= NavTags.Length) + return 0; + return navTag; + } + + /// + /// Set the color of a specific NavTag. + /// + internal static void SetNavTagColor(int navTag, Color color) + { + instance.navTagColors[navTag] = color; + } + + /// + /// If the linkType does not exists, returns 0 + /// + public static int EnsureNavLinkTypeExists(int linkType) + { + if (linkType < 0 || linkType >= NavLinkTypeNames.Length) + return 1; + return linkType; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2dSettings.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2dSettings.cs.meta new file mode 100644 index 0000000..b611701 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/PathBerserker2dSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 393b1ec75130eb047bc70f7635277936 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder.meta new file mode 100644 index 0000000..e975e82 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: df7508c295beef243878bd13a3a37d46 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Path.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Path.cs new file mode 100644 index 0000000..57fec3a --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Path.cs @@ -0,0 +1,111 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// A path ready to be traversed + /// + public class Path : IEnumerator + { + public PathSegment Current { get; private set; } + object IEnumerator.Current => Current; + + public PathSegment NextSegment { get { return Current.Next; } } + public bool HasNext { get { return Current.Next != null; } } + + public Vector2 Goal => lastSeg.LinkStart; + public Vector2 Start => start; + public readonly float totalCosts; + + private readonly PathSegment firstSeg; + private readonly PathSegment lastSeg; + private readonly int segmentCount; + private readonly Vector2 start; + private int remainingSegmentCount; + + internal Path(PathSegment firstSeg, PathSegment lastSeg, Vector2 start, int segCount, float totalCosts) + { + this.firstSeg = firstSeg; + this.lastSeg = lastSeg; + this.Current = firstSeg; + this.segmentCount = segCount; + this.remainingSegmentCount = segCount; + this.totalCosts = totalCosts; + this.start = start; + } + + public override string ToString() + { + return string.Format("Path (VertCount: {0}, Costs: {1})", segmentCount, totalCosts); + } + + public void Dispose() + { + + } + + /// + /// Advanced the path by 1 segment. + /// + public bool MoveNext() + { + if (Current.Next != null) + { + Current = Current.Next; + remainingSegmentCount--; + return true; + } + return false; + } + + public void Reset() + { + remainingSegmentCount = segmentCount; + Current = firstSeg; + } + + /// + /// Creates a list of all path points. Current enumerator progress is ignored. + /// List starts with path start and ends with path goal. Corner links will result in the same point being enumerated twice in a row. + /// + public List AllPathPoints() + { + List pathPoints = new List(segmentCount * 2 + 2); + pathPoints.Add(Start); + + var seg = firstSeg; + while (seg.Next != null) + { + pathPoints.Add(seg.LinkStart); + pathPoints.Add(seg.LinkEnd); + seg = seg.Next; + } + pathPoints.Add(Goal); + return pathPoints; + } + + /// + /// Creates a list of all path points, starting from current segment. + /// List starts with current.linkstart and ends with path goal. If these points are equivalent, only goal will be returned. Corner links will result in the same point being enumerated twice in a row. + /// + public List RemainingPathPoints() + { + List pathPoints = new List(remainingSegmentCount * 2 + 2); + pathPoints.Add(Current.LinkStart); + + var seg = Current; + while (seg.Next != null) + { + pathPoints.Add(seg.LinkStart); + pathPoints.Add(seg.LinkEnd); + seg = seg.Next; + } + + if (Current.Next != null) + pathPoints.Add(Goal); + return pathPoints; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Path.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Path.cs.meta new file mode 100644 index 0000000..3c85bf9 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Path.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58dedc7e6d80873469cc62eee12e4a34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathRequest.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathRequest.cs new file mode 100644 index 0000000..6dd2655 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathRequest.cs @@ -0,0 +1,90 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Represents an async path request. + /// + public class PathRequest + { + public enum RequestState { + Draft, + Pending, + Finished, + Failed + } + + public enum RequestFailReason { + CouldntMapStart, + CouldntMapGoal, + MappedStartChanged, + AllMappedGoalsChanged, + NoPathFromStartToGoal, + WorldWasDestroyed, + ToFarFromStart, + } + + /// + /// Status of the processing of the request. + /// + public RequestState Status{ get { return status; } } + /// + /// If the request failed, it will set this field to the cause of failure. + /// + public RequestFailReason FailReason { get; private set; } + /// + /// If the request succeeded, this is found path. + /// + public Path Path { get; private set; } + + /// + /// Start of the requested path + /// + public NavSegmentPositionPointer start; + /// + /// Goals of the requested path. + /// + public IList goals; + /// + /// NavAgent the calculated path should be usable by. + /// + public NavAgent client; + + /// + /// If the request failed, this will contain the closest reachable position found to the goal. This does NOT work when multiple goals where specified. + /// + public NavSegmentPositionPointer closestReachablePosition; + private volatile RequestState status = RequestState.Draft; + + public PathRequest(NavAgent client) + { + this.client = client; + this.start = client.currentMappedPosition; + } + + internal void SetToPending() + { + status = RequestState.Pending; + } + + internal void Reset() + { + Debug.Assert(status != RequestState.Pending); + status = RequestState.Draft; + } + + internal void Fulfill(Path path) { + this.Path = path; + this.status = RequestState.Finished; + } + + internal void Fail(RequestFailReason requestFailReason) { + this.FailReason = requestFailReason; + this.status = RequestState.Failed; +#if PBDEBUG + Debug.Log("Pathrequest failed because " + requestFailReason); +#endif + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathRequest.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathRequest.cs.meta new file mode 100644 index 0000000..4a76ed3 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2750643c1f0175e4891d9493e72b9cc6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathSegment.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathSegment.cs new file mode 100644 index 0000000..47e8b64 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathSegment.cs @@ -0,0 +1,77 @@ +using UnityEngine; + +namespace PathBerserker2d +{ + /// + /// Encapsulates the movement on a segment to a link and the traversal of that link. + /// + /// + /// Only the last PathSegment does not have a link. + /// + public class PathSegment + { + public PathSegment Next { get; internal set; } + /// + /// World position of the link start. May change from frame to frame, if corresponding NavSurface moves. + /// + public Vector2 LinkStart { get { return owner.LocalToWorld(linkStart); } } + /// + /// World position of the link end. May change from frame to frame, if corresponding NavSurface moves. + /// + public Vector2 LinkEnd { get { return Next.owner.LocalToWorld(linkEnd); } } + /// + /// Segments normal. May change from frame to frame, if corresponding NavSurface moves. + /// + public Vector2 Normal => owner.LocalToWorldMatrix.MultiplyVector(cluster.Normal); + /// + /// Segments tangent. May change from frame to frame, if corresponding NavSurface moves. + /// + public Vector2 Tangent => owner.LocalToWorldMatrix.MultiplyVector(cluster.Tangent); + /// + /// Point on segment that together with Tangent defines the segments line equation. May change from frame to frame, if corresponding NavSurface moves. + /// + public Vector2 Point => owner.LocalToWorldMatrix.MultiplyPoint3x4(cluster.Start); + + public readonly INavLinkInstance link; + public readonly NavSurface owner; + private Vector2 linkStart; + private Vector2 linkEnd; + internal NavGraphNodeCluster cluster; + + internal PathSegment(Vector2 linkStart, Vector2 linkEnd, NavSurface owner, INavLinkInstance link, NavGraphNodeCluster cluster) + { + this.linkStart = linkStart; + this.linkEnd = linkEnd; + this.owner = owner; + this.link = link; + this.cluster = cluster; + } + + /// + /// Get the NavTag vector at a distance along the segment. + /// + /// Distance along segment. + /// Integer with bits set to the existence of the corresponding nav tag at that position. + public int GetTagVector(float t) + { + return cluster.GetNavTagVector(t); + } + + /// + /// Like GetTagVector, but works by projecting the parameter on the segment. + /// + /// Integer with bits set to the existence of the corresponding nav tag at that position. + public int GetTagVector(Vector2 pos) + { + return cluster.GetNavTagVector(owner.WorldToLocal(pos)); + } + + /// + /// Projects a position on the segment and returns its distance from the segment start Result may change from frame to frame, if corresponding NavSurface moves. + /// + public float DistanceAlongSegment(Vector2 pos) + { + return Vector2.Dot(cluster.Tangent, owner.WorldToLocal(pos) - cluster.Start); + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathSegment.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathSegment.cs.meta new file mode 100644 index 0000000..2c156e0 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathSegment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad1de11ac5ee257459efc73dd2bb1eaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathValues.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathValues.cs new file mode 100644 index 0000000..468ccf9 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathValues.cs @@ -0,0 +1,17 @@ +using Priority_Queue; + +namespace PathBerserker2d +{ + internal class PathValues : FastPriorityQueueNode + { + public NavGraphNode node; + public NavGraphNode parent; + public float costSoFar; + public float estimatedFutherPath; + + public PathValues(NavGraphNode node) + { + this.node = node; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathValues.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathValues.cs.meta new file mode 100644 index 0000000..0e788af --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathValues.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4eeeecfc6e39a704f89e7c3539b74bf6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Pathfinder.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Pathfinder.cs new file mode 100644 index 0000000..67fad4b --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Pathfinder.cs @@ -0,0 +1,339 @@ +using Priority_Queue; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class Pathfinder + { + FastPriorityQueue openList = new FastPriorityQueue(1000); + HashSet closedList = new HashSet(); + NavGraph navGraph; + int pathValueId; + + float maxHeuristicAllowed; + NavSegmentPositionPointer closestReachablePosition; + NavAgent agent; + + public Pathfinder(NavGraph navGraph, int pathValueId) + { + this.navGraph = navGraph; + this.pathValueId = pathValueId; + } + + public void ProcessPathRequest(PathRequest request) + { + Path path = null; + this.agent = request.client; + + navGraph.graphLock.AcquireReaderLock(-1); + try + { + NavGraphNodeCluster startCluster; + if (!navGraph.TryGetClusterAt(request.start, out startCluster)) + { + request.Fail(PathRequest.RequestFailReason.MappedStartChanged); + return; + } + NavGraphNode nvStart = new NavGraphNode(pathValueId + 1, startCluster, request.start.t); + closestReachablePosition = request.start; + + IList nvGoals = new List(request.goals.Count); + NavGraphNodeCluster goalCluster; + for (int iGoal = 0; iGoal < request.goals.Count; iGoal++) + { + if (navGraph.TryGetClusterAt(request.goals[iGoal], out goalCluster)) + { + nvGoals.Add(new NavGraphNode(pathValueId + 1, goalCluster, request.goals[iGoal].t)); + goalCluster.containsGoal[pathValueId] = true; + } + } + if (nvGoals.Count == 0) + { + request.Fail(PathRequest.RequestFailReason.AllMappedGoalsChanged); + return; + } + + if (nvGoals.Count == 1) + { + path = this.FindPathSingleGoal(nvStart, nvGoals); + } + else + { + path = this.FindPathMultiGoal(nvStart, nvGoals); + } + maxHeuristicAllowed = float.MaxValue; + + for (int iGoal = 0; iGoal < nvGoals.Count; iGoal++) + { + nvGoals[iGoal].cluster.containsGoal[pathValueId] = false; + } + } + finally + { + navGraph.graphLock.ReleaseReaderLock(); + } + + if (path == null) + { + request.closestReachablePosition = closestReachablePosition; + request.Fail(PathRequest.RequestFailReason.NoPathFromStartToGoal); + } + else + { + request.Fulfill(path); + } + + } + + private Path FindPathSingleGoal(NavGraphNode start, IList goals) + { + Vector2 goalPos = goals[0].WPosition(); + Path path = null; + float closestH = float.MaxValue; + + Restart: + foreach (var conn in start.cluster.EnumerateReachableNavVerts(start.t, agent, goals, pathValueId)) + { + Expand(conn, start, goalPos); + } + UpdateClosestPositionToGoal(start, goalPos, ref closestH); + +#if PBDEBUG + int iterationCount = 0; +#endif + while (openList.Count > 0) + { +#if PBDEBUG + iterationCount++; +#endif + var vert = openList.Dequeue(); + var node = vert.node; + /*GizmosQueue.Instance.Enqueue(1, () => + { + Gizmos.color = Color.yellow; + Vector3 v = vert.WPosition(); + v.z = 5; + DebugDrawingExtensions.DrawCircle(v, 0.1f); + });*/ + if (node.IsGoal) + { + // reached goal !! + if (vert.costSoFar < 0) + { + Debug.LogError("Path found with negative values. This breaks pathfinding. Found path will be thrown away."); + return path; + } + + float v = CheckHeuristicValidity(start, node); + if (v != 0) + { + // heuristic was violated! start over. +#if PBDEBUG + Debug.Log("Heuristic was violated. Retrying with upper bound."); +#endif + maxHeuristicAllowed = v; + openList.Clear(); + closedList.Clear(); + + goto Restart; + } + + path = GatherPath(start, node); + break; + } + + closedList.Add(node); + + UpdateClosestPositionToGoal(node, goalPos, ref closestH); + + foreach (var conn in vert.node.GetConnections(agent, goals, pathValueId)) + { + Expand(conn, node, goalPos); + } + } + + openList.Clear(); + closedList.Clear(); +#if NOPE_DEBUG + if (path != null) + Debug.Log(string.Format( + "Found in {0} iteration the path: {1}", iterationCount, path)); + else + { + Debug.Log(string.Format( + "Found no path in {0} iteration.", iterationCount)); + } +#endif + + return path; + } + + private Path FindPathMultiGoal(NavGraphNode start, IList goals) + { + Path path = null; + + foreach (var conn in start.cluster.EnumerateReachableNavVerts(start.t, agent, goals, pathValueId)) + { + ExpandZeroH(conn, start); + } + +#if PBDEBUG + int iterationCount = 0; +#endif + while (openList.Count > 0) + { +#if PBDEBUG + iterationCount++; +#endif + var vert = openList.Dequeue(); + var node = vert.node; + if (node.IsGoal) + { + // reached goal !! + if (vert.costSoFar < 0) + { + Debug.LogError("Path found with negative values. This breaks pathfinding. Found path will be thrown away."); + return path; + } + + path = GatherPath(start, node); + break; + } + + closedList.Add(node); + foreach (var conn in node.GetConnections(agent, goals, pathValueId)) + { + ExpandZeroH(conn, node); + } + } + + openList.Clear(); + closedList.Clear(); +#if PBDEBUG + if (path != null) + Debug.Log(string.Format( + "Found in {0} iteration the path: {1}", iterationCount, path)); + else + { + Debug.Log(string.Format( + "Found no path in {0} iteration.", iterationCount)); + } +#endif + return path; + } + + private void Expand(NavConnection conn, NavGraphNode vert, Vector2 goalPos) + { + if (float.IsPositiveInfinity(conn.traversalCosts) || closedList.Contains(conn.end)) + return; + + + float costSoFar = vert.pathValues[pathValueId].costSoFar + conn.traversalCosts; + var pathValue = conn.end.pathValues[pathValueId]; + + bool isOpen = openList.Contains(pathValue); + if (isOpen && pathValue.costSoFar <= costSoFar) + { + // we know about this vert and have a faster way of accessing it + return; + } + + pathValue.parent = vert; + pathValue.costSoFar = costSoFar; + + float estimate = conn.end.HeuristicalCostsToGoal(vert.cluster.owner.WorldToLocal.MultiplyPoint3x4(goalPos)); + if (estimate > maxHeuristicAllowed) + estimate = maxHeuristicAllowed; + pathValue.estimatedFutherPath = estimate; + float totalCosts = costSoFar + estimate; + if (isOpen) + { + openList.UpdatePriority(pathValue, totalCosts); + } + else + { + openList.Enqueue(pathValue, totalCosts); + } + } + + private void ExpandZeroH(NavConnection conn, NavGraphNode vert) + { + if (float.IsPositiveInfinity(conn.traversalCosts) || closedList.Contains(conn.end)) + return; + + float costSoFar = vert.pathValues[pathValueId].costSoFar + conn.traversalCosts; + var pathValue = conn.end.pathValues[pathValueId]; + + bool isOpen = openList.Contains(pathValue); + if (isOpen && pathValue.costSoFar <= costSoFar) + { + // we know about this vert and have a faster way of accessing it + return; + } + + pathValue.parent = vert; + pathValue.costSoFar = costSoFar; + + if (isOpen) + { + openList.UpdatePriority(pathValue, costSoFar); + } + else + { + openList.Enqueue(pathValue, costSoFar); + } + } + + private Path GatherPath(NavGraphNode startVert, NavGraphNode goalVert) + { + int segCount = 1; + NavGraphNode vert = goalVert; + PathSegment lastSeg = new PathSegment(goalVert.Position(), Vector2.zero, goalVert.cluster.owner.navSurface, null, vert.cluster); + PathSegment prevSeg = lastSeg; + + while ((vert = vert.pathValues[pathValueId].parent) != startVert) + { + var seg = new PathSegment( + vert.Position(), + vert.LinkTarget.GetPositionAlongSegment(vert.LinkTargetT), + vert.cluster.owner.navSurface, + vert.link, + vert.cluster); + seg.Next = prevSeg; + prevSeg = seg; + + segCount++; + } + return new Path(prevSeg, lastSeg, startVert.Position(), segCount, goalVert.pathValues[pathValueId].costSoFar); + } + + private float CheckHeuristicValidity(NavGraphNode startVert, NavGraphNode goalVert) + { + float totalCosts = goalVert.pathValues[pathValueId].costSoFar; + NavGraphNode vert = goalVert; + while ((vert = vert.pathValues[pathValueId].parent) != startVert) + { + if (vert.pathValues[pathValueId].estimatedFutherPath > totalCosts) + { + return totalCosts; + } + } + return 0; + } + + private void UpdateClosestPositionToGoal(NavGraphNode node, Vector2 goalPos, ref float closestH) + { + float minDist = node.cluster.PointDistance(goalPos); + if (minDist < closestH) + { + closestH = minDist; + float t = node.cluster.DistanceOfPointAlongSegment(node.cluster.owner.WorldToLocal.MultiplyPoint3x4(goalPos)); + if (node.cluster.CanAgentReachPoint(agent, node.t, t)) + { + closestReachablePosition = new NavSegmentPositionPointer(node.cluster.owner.navSurface, node.cluster, t); + } + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Pathfinder.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Pathfinder.cs.meta new file mode 100644 index 0000000..db2d4e8 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/Pathfinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79dde31c2ed068841b732c032be29020 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathfinderThread.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathfinderThread.cs new file mode 100644 index 0000000..cf4900a --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathfinderThread.cs @@ -0,0 +1,55 @@ +using System.Collections; +using System.Collections.Concurrent; +using System.Threading; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class PathfinderThread + { + CancellationToken cancelToken; + ConcurrentQueue pathRequestQueue; + Pathfinder pathfinder; + + public PathfinderThread(CancellationToken cancelToken, + ConcurrentQueue pathRequestQueue, NavGraph navGraph, int id) + { + this.cancelToken = cancelToken; + this.pathRequestQueue = pathRequestQueue; + this.pathfinder = new Pathfinder(navGraph, id); + } + + public void Run() + { + while (!cancelToken.IsCancellationRequested) + { + // will process a path or sleep for 0.1sec + PathRequest request; + if (pathRequestQueue.TryDequeue(out request)) + { + pathfinder.ProcessPathRequest(request); + } + else + { + Thread.Sleep(100); + } + } + } + + public IEnumerator CoroutineRun() + { + while (!cancelToken.IsCancellationRequested) + { + // will process a path or sleep for 0.1sec + PathRequest request; + if (pathRequestQueue.TryDequeue(out request)) + { + pathfinder.ProcessPathRequest(request); + yield return null; + } + else + yield return new WaitForSecondsRealtime(0.1f); + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathfinderThread.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathfinderThread.cs.meta new file mode 100644 index 0000000..3f14e00 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Pathfinder/PathfinderThread.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d35f8bee578d72940a6e7061df49850e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities.meta new file mode 100644 index 0000000..5ee049f --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ca86d6ef0e3c0146984f0794920e007 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/B2DynamicTree.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/B2DynamicTree.cs new file mode 100644 index 0000000..a18c83d --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/B2DynamicTree.cs @@ -0,0 +1,959 @@ + +// MIT License + +// Copyright (c) 2019 Erin Catto + +// 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. + +// ported by me, orignal source: https://github.com/erincatto/box2d/blob/master/src/collision/b2_dynamic_tree.cpp + +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + /// A node in the dynamic tree. The client does not interact with this directly. + internal struct B2TreeNode + { + /// Enlarged AABB + public Rect aabb; + + public T userData; + + public int parent; + public int child1; + public int child2; + public int next; + + // leaf = 0, free node = -1 + public int height; + + public bool moved; + + public bool IsLeaf() + { + return child1 == -1; + } + } + + internal class B2DynamicTree : IEnumerable + { + public int NodeCount => nodeCount; + + private readonly float AABBExtension = 0.1f; + private readonly float AABBMultiplier = 4.0f; + + int root = -1; + B2TreeNode[] nodes; + int nodeCount = 0; + int nextFreeNode = 0; + + public B2DynamicTree(int capacity = 16) + { + nodes = new B2TreeNode[capacity]; + + // Build a linked list for the free list. + for (int i = 0; i < nodes.Length - 1; ++i) + { + nodes[i].next = i + 1; + nodes[i].height = -1; + } + nodes[nodes.Length - 1].next = -1; + nodes[nodes.Length - 1].height = -1; + } + + // Allocate a node from the pool. Grow the pool if necessary. + private int AllocateNode() + { + // Expand the node pool as needed. + if (nextFreeNode == -1) + { +#if PBDEBUG + Debug.Assert(nodes.Length == nodeCount); +#endif + + // The free list is empty. Rebuild a bigger pool. + Array.Resize(ref nodes, nodes.Length * 2); + + // Build a linked list for the free list. The parent + // pointer becomes the "next" pointer. + for (int i = nodeCount; i < nodes.Length - 1; ++i) + { + nodes[i].next = i + 1; + nodes[i].height = -1; + } + nodes[nodes.Length - 1].next = -1; + nodes[nodes.Length - 1].height = -1; + nextFreeNode = nodeCount; + } + + // Peel a node off the free list. + int nodeId = nextFreeNode; + nextFreeNode = nodes[nodeId].next; + nodes[nodeId].parent = -1; + nodes[nodeId].child1 = -1; + nodes[nodeId].child2 = -1; + nodes[nodeId].height = 0; + nodes[nodeId].userData = default(T); + nodes[nodeId].moved = false; + ++nodeCount; + return nodeId; + } + + // Return a node to the pool. + private void FreeNode(int nodeId) + { +#if PBDEBUG + Debug.Assert(0 <= nodeId && nodeId < nodes.Length); + Debug.Assert(0 < nodeCount); +#endif + nodes[nodeId].next = nextFreeNode; + nodes[nodeId].height = -1; + nextFreeNode = nodeId; + --nodeCount; + } + + // Create a proxy in the tree as a leaf node. We return the index + // of the node instead of a pointer so that we can grow + // the node pool. + public int CreateProxy(Rect aabb, T userData) + { + int proxyId = AllocateNode(); + + // Fatten the aabb. + Vector2 r = new Vector2(AABBExtension, AABBExtension); + nodes[proxyId].aabb.min = aabb.min - r; + nodes[proxyId].aabb.max = aabb.max + r; + nodes[proxyId].userData = userData; + nodes[proxyId].height = 0; + nodes[proxyId].moved = true; + + InsertLeaf(proxyId); + + return proxyId; + } + + public void RemoveProxy(int proxyId) + { +#if PBDEBUG + Debug.Assert(0 <= proxyId && proxyId < nodes.Length); + Debug.Assert(nodes[proxyId].IsLeaf()); +#endif + + if (!nodes[proxyId].IsLeaf()) + throw new Exception("Tried to remove non leaf node"); + + RemoveLeaf(proxyId); + FreeNode(proxyId); + } + + public bool MoveProxy(int proxyId, Rect aabb, Vector2 displacement) + { +#if PBDEBUG + Debug.Assert(0 <= proxyId && proxyId < nodes.Length); + Debug.Assert(nodes[proxyId].IsLeaf()); +#endif + + // Extend AABB + + Vector2 r = new Vector2(AABBExtension, AABBExtension); + Rect fatAABB = new Rect(aabb.min - r, aabb.size + 2 * r); + + // Predict AABB movement + Vector2 d = AABBMultiplier * displacement; + + if (d.x < 0.0f) + { + fatAABB.xMin += d.x; + } + else + { + fatAABB.xMax += d.x; + } + + if (d.y < 0.0f) + { + fatAABB.yMin += d.y; + } + else + { + fatAABB.yMin += d.y; + } + + Rect treeAABB = nodes[proxyId].aabb; + if (treeAABB.ContainsBounds(aabb)) + { + // The tree AABB still contains the object, but it might be too large. + // Perhaps the object was moving fast but has since gone to sleep. + // The huge AABB is larger than the new fat AABB. + Rect hugeAABB = new Rect(fatAABB.min - 4.0f * r, fatAABB.size + 8 * r); + + if (hugeAABB.ContainsBounds(treeAABB)) + { + // The tree AABB contains the object AABB and the tree AABB is + // not too large. No tree update needed. + return false; + } + + // Otherwise the tree AABB is huge and needs to be shrunk + } + + RemoveLeaf(proxyId); + + nodes[proxyId].aabb = fatAABB; + + InsertLeaf(proxyId); + + nodes[proxyId].moved = true; + + return true; + } + + + private void InsertLeaf(int leaf) + { + if (root == -1) + { + root = leaf; + nodes[root].parent = -1; + return; + } + + // Find the best sibling for this node + Rect leafAABB = nodes[leaf].aabb; + int index = root; + while (nodes[index].IsLeaf() == false) + { + int child1 = nodes[index].child1; + int child2 = nodes[index].child2; + + float area = nodes[index].aabb.Area(); + + Rect combinedAABB = leafAABB.CombineWith(nodes[index].aabb); + float combinedArea = combinedAABB.Area(); + + // Cost of creating a new parent for this node and the new leaf + float cost = 2.0f * combinedArea; + + // Minimum cost of pushing the leaf further down the tree + float inheritanceCost = 2.0f * (combinedArea - area); + + // Cost of descending into child1 + float cost1; + if (nodes[child1].IsLeaf()) + { + Rect aabb = leafAABB.CombineWith(nodes[child1].aabb); + cost1 = aabb.Area() + inheritanceCost; + } + else + { + Rect aabb = leafAABB.CombineWith(nodes[child1].aabb); + float oldArea = nodes[child1].aabb.Area(); + float newArea = aabb.Area(); + cost1 = (newArea - oldArea) + inheritanceCost; + } + + // Cost of descending into child2 + float cost2; + if (nodes[child2].IsLeaf()) + { + Rect aabb = leafAABB.CombineWith(nodes[child2].aabb); + cost2 = aabb.Area() + inheritanceCost; + } + else + { + Rect aabb = leafAABB.CombineWith(nodes[child2].aabb); + float oldArea = nodes[child2].aabb.Area(); + float newArea = aabb.Area(); + cost2 = newArea - oldArea + inheritanceCost; + } + + // Descend according to the minimum cost. + if (cost < cost1 && cost < cost2) + { + break; + } + + // Descend + if (cost1 < cost2) + { + index = child1; + } + else + { + index = child2; + } + } + + int sibling = index; + + // Create a new parent. + int oldParent = nodes[sibling].parent; + int newParent = AllocateNode(); + nodes[newParent].parent = oldParent; + nodes[newParent].userData = default(T); + nodes[newParent].aabb = leafAABB.CombineWith(nodes[sibling].aabb); + nodes[newParent].height = nodes[sibling].height + 1; + + if (oldParent != -1) + { + // The sibling was not the root. + if (nodes[oldParent].child1 == sibling) + { + nodes[oldParent].child1 = newParent; + } + else + { + nodes[oldParent].child2 = newParent; + } + + nodes[newParent].child1 = sibling; + nodes[newParent].child2 = leaf; + nodes[sibling].parent = newParent; + nodes[leaf].parent = newParent; + } + else + { + // The sibling was the root. + nodes[newParent].child1 = sibling; + nodes[newParent].child2 = leaf; + nodes[sibling].parent = newParent; + nodes[leaf].parent = newParent; + root = newParent; + } + + // Walk back up the tree fixing heights and AABBs + index = nodes[leaf].parent; + while (index != -1) + { + index = Balance(index); + + int child1 = nodes[index].child1; + int child2 = nodes[index].child2; + +#if PBDEBUG + Debug.Assert(child1 != -1); + Debug.Assert(child2 != -1); +#endif + + nodes[index].height = 1 + Mathf.Max(nodes[child1].height, nodes[child2].height); + nodes[index].aabb = nodes[child1].aabb.CombineWith(nodes[child2].aabb); + + index = nodes[index].parent; + } + + //Validate(); + } + + private void RemoveLeaf(int leaf) + { + if (leaf == root) + { + root = -1; + return; + } + + int parent = nodes[leaf].parent; + int grandParent = nodes[parent].parent; + int sibling; + if (nodes[parent].child1 == leaf) + { + sibling = nodes[parent].child2; + } + else + { + sibling = nodes[parent].child1; + } + + if (grandParent != -1) + { + // Destroy parent and connect sibling to grandParent. + if (nodes[grandParent].child1 == parent) + { + nodes[grandParent].child1 = sibling; + } + else + { + nodes[grandParent].child2 = sibling; + } + nodes[sibling].parent = grandParent; + FreeNode(parent); + + // Adjust ancestor bounds. + int index = grandParent; + while (index != -1) + { + index = Balance(index); + + int child1 = nodes[index].child1; + int child2 = nodes[index].child2; + + nodes[index].aabb = nodes[child1].aabb.CombineWith(nodes[child2].aabb); + nodes[index].height = 1 + Mathf.Max(nodes[child1].height, nodes[child2].height); + + index = nodes[index].parent; + } + } + else + { + root = sibling; + nodes[sibling].parent = -1; + FreeNode(parent); + } + + //Validate(); + } + + // Perform a left or right rotation if node A is imbalanced. + // Returns the new root index. + private int Balance(int iA) + { +#if PBDEBUG + Debug.Assert(iA != -1); +#endif + + if (nodes[iA].IsLeaf() || nodes[iA].height < 2) + { + return iA; + } + + int iB = nodes[iA].child1; + int iC = nodes[iA].child2; +#if PBDEBUG + Debug.Assert(0 <= iB && iB < nodes.Length); + Debug.Assert(0 <= iC && iC < nodes.Length); +#endif + + int balance = nodes[iC].height - nodes[iB].height; + + // Rotate C up + if (balance > 1) + { + int iF = nodes[iC].child1; + int iG = nodes[iC].child2; + +#if PBDEBUG + Debug.Assert(0 <= iF && iF < nodes.Length); + Debug.Assert(0 <= iG && iG < nodes.Length); +#endif + + // Swap A and C + nodes[iC].child1 = iA; + nodes[iC].parent = nodes[iA].parent; + nodes[iA].parent = iC; + + // A's old parent should point to C + if (nodes[iC].parent != -1) + { + if (nodes[nodes[iC].parent].child1 == iA) + { + nodes[nodes[iC].parent].child1 = iC; + } + else + { +#if PBDEBUG + Debug.Assert(nodes[nodes[iC].parent].child2 == iA); +#endif + nodes[nodes[iC].parent].child2 = iC; + } + } + else + { + root = iC; + } + + // Rotate + if (nodes[iF].height > nodes[iG].height) + { + nodes[iC].child2 = iF; + nodes[iA].child2 = iG; + nodes[iG].parent = iA; + nodes[iA].aabb = nodes[iB].aabb.CombineWith(nodes[iG].aabb); + nodes[iC].aabb = nodes[iA].aabb.CombineWith(nodes[iF].aabb); + + nodes[iA].height = 1 + Mathf.Max(nodes[iB].height, nodes[iG].height); + nodes[iC].height = 1 + Mathf.Max(nodes[iA].height, nodes[iF].height); + } + else + { + nodes[iC].child2 = iG; + nodes[iA].child2 = iF; + nodes[iF].parent = iA; + nodes[iA].aabb = nodes[iB].aabb.CombineWith(nodes[iF].aabb); + nodes[iC].aabb = nodes[iA].aabb.CombineWith(nodes[iG].aabb); + + nodes[iA].height = 1 + Mathf.Max(nodes[iB].height, nodes[iF].height); + nodes[iC].height = 1 + Mathf.Max(nodes[iA].height, nodes[iG].height); + } + + return iC; + } + + // Rotate B up + if (balance < -1) + { + int iD = nodes[iB].child1; + int iE = nodes[iB].child2; + +#if PBDEBUG + Debug.Assert(0 <= iD && iD < nodes.Length); + Debug.Assert(0 <= iE && iE < nodes.Length); +#endif + + // Swap A and B + nodes[iB].child1 = iA; + nodes[iB].parent = nodes[iA].parent; + nodes[iA].parent = iB; + + // A's old parent should point to B + if (nodes[iB].parent != -1) + { + if (nodes[nodes[iB].parent].child1 == iA) + { + nodes[nodes[iB].parent].child1 = iB; + } + else + { +#if PBDEBUG + Debug.Assert(nodes[nodes[iB].parent].child2 == iA); +#endif + nodes[nodes[iB].parent].child2 = iB; + } + } + else + { + root = iB; + } + + // Rotate + if (nodes[iD].height > nodes[iE].height) + { + nodes[iB].child2 = iD; + nodes[iA].child1 = iE; + nodes[iE].parent = iA; + nodes[iA].aabb = nodes[iC].aabb.CombineWith(nodes[iE].aabb); + nodes[iB].aabb = nodes[iA].aabb.CombineWith(nodes[iD].aabb); + + nodes[iA].height = 1 + Mathf.Max(nodes[iC].height, nodes[iE].height); + nodes[iB].height = 1 + Mathf.Max(nodes[iA].height, nodes[iD].height); + } + else + { + nodes[iB].child2 = iE; + nodes[iA].child1 = iD; + nodes[iD].parent = iA; + nodes[iA].aabb = nodes[iC].aabb.CombineWith(nodes[iD].aabb); + nodes[iB].aabb = nodes[iA].aabb.CombineWith(nodes[iE].aabb); + + nodes[iA].height = 1 + Mathf.Max(nodes[iC].height, nodes[iD].height); + nodes[iB].height = 1 + Mathf.Max(nodes[iA].height, nodes[iE].height); + } + + return iB; + } + + return iA; + } + + public int GetHeight() + { + if (root == -1) + { + return 0; + } + + return nodes[root].height; + } + + // + public float GetAreaRatio() + { + if (root == -1) + { + return 0.0f; + } + + float rootArea = nodes[root].aabb.Area(); + + float totalArea = 0.0f; + for (int i = 0; i < nodes.Length; ++i) + { + if (nodes[i].height < 0) + { + // Free node in pool + continue; + } + + totalArea += nodes[i].aabb.Area(); + } + + return totalArea / rootArea; + } + + // Compute the height of a sub-tree. + private int ComputeHeight(int nodeId) + { +#if PBDEBUG + Debug.Assert(0 <= nodeId && nodeId < nodes.Length); +#endif + + if (nodes[nodeId].IsLeaf()) + { + return 0; + } + + int height1 = ComputeHeight(nodes[nodeId].child1); + int height2 = ComputeHeight(nodes[nodeId].child2); + return 1 + Mathf.Max(height1, height2); + } + + private int ComputeHeight() + { + int height = ComputeHeight(root); + return height; + } + + private void ValidateStructure(int index) + { + if (index == -1) + { + return; + } + + if (index == root) + { + Debug.Assert(nodes[index].parent == -1); + } + + int child1 = nodes[index].child1; + int child2 = nodes[index].child2; + + if (nodes[index].IsLeaf()) + { + Debug.Assert(child1 == -1); + Debug.Assert(child2 == -1); + Debug.Assert(nodes[index].height == 0); + return; + } + + Debug.Assert(0 <= child1 && child1 < nodes.Length); + Debug.Assert(0 <= child2 && child2 < nodes.Length); + + Debug.Assert(nodes[child1].parent == index); + Debug.Assert(nodes[child2].parent == index); + + ValidateStructure(child1); + ValidateStructure(child2); + } + + private void ValidateMetrics(int index) + { + if (index == -1) + { + return; + } + + int child1 = nodes[index].child1; + int child2 = nodes[index].child2; + + if (nodes[index].IsLeaf()) + { + Debug.Assert(child1 == -1); + Debug.Assert(child2 == -1); + Debug.Assert(nodes[index].height == 0); + return; + } + + Debug.Assert(0 <= child1 && child1 < nodes.Length); + Debug.Assert(0 <= child2 && child2 < nodes.Length); + + int height1 = nodes[child1].height; + int height2 = nodes[child2].height; + int height; + height = 1 + Mathf.Max(height1, height2); + Debug.Assert(nodes[index].height == height); + + Rect aabb = nodes[child1].aabb.CombineWith(nodes[child2].aabb); + + Debug.Assert(aabb.min == nodes[index].aabb.min); + Debug.Assert(aabb.max == nodes[index].aabb.max); + + ValidateMetrics(child1); + ValidateMetrics(child2); + } + + public void Validate() + { +#if b2DEBUG + ValidateStructure(root); + ValidateMetrics(root); + + int freeCount = 0; + int freeIndex = nextFreeNode; + while (freeIndex != -1) + { + Debug.Assert(0 <= freeIndex && freeIndex < nodes.Length); + freeIndex = nodes[freeIndex].next; + ++freeCount; + } + + Debug.Assert(GetHeight() == ComputeHeight()); + + Debug.Assert(nodeCount + freeCount == nodes.Length); +#endif + } + + public int GetMaxBalance() + { + int maxBalance = 0; + for (int i = 0; i < nodes.Length; ++i) + { + if (nodes[i].height <= 1) + { + continue; + } + +#if PBDEBUG + Debug.Assert(nodes[i].IsLeaf() == false); +#endif + + int child1 = nodes[i].child1; + int child2 = nodes[i].child2; + int balance = Mathf.Abs(nodes[child2].height - nodes[child1].height); + maxBalance = Mathf.Max(maxBalance, balance); + } + + return maxBalance; + } + + public void RebuildBottomUp() + { + int[] nodeIndecies = new int[nodeCount]; + int count = 0; + + // Build array of leaves. Free the rest. + for (int i = 0; i < nodes.Length; ++i) + { + if (nodes[i].height < 0) + { + // free node in pool + continue; + } + + if (nodes[i].IsLeaf()) + { + nodes[i].parent = -1; + nodeIndecies[count] = i; + ++count; + } + else + { + FreeNode(i); + } + } + + while (count > 1) + { + float minCost = float.MaxValue; + int iMin = -1, jMin = -1; + for (int i = 0; i < count; ++i) + { + Rect aabbi = nodes[nodeIndecies[i]].aabb; + + for (int j = i + 1; j < count; ++j) + { + Rect aabbj = nodes[nodeIndecies[j]].aabb; + Rect b = aabbi.CombineWith(aabbj); + float cost = b.Area(); + if (cost < minCost) + { + iMin = i; + jMin = j; + minCost = cost; + } + } + } + + int index1 = nodeIndecies[iMin]; + int index2 = nodeIndecies[jMin]; + + int parentIndex = AllocateNode(); + nodes[parentIndex].child1 = index1; + nodes[parentIndex].child2 = index2; + nodes[parentIndex].height = 1 + Mathf.Max(nodes[index1].height, nodes[index2].height); + nodes[parentIndex].aabb = nodes[index1].aabb.CombineWith(nodes[index2].aabb); + nodes[parentIndex].parent = -1; + + nodes[index1].parent = parentIndex; + nodes[index2].parent = parentIndex; + + nodeIndecies[jMin] = nodeIndecies[count - 1]; + nodeIndecies[iMin] = parentIndex; + --count; + } + + root = nodeIndecies[0]; + + Validate(); + } + + public void ShiftOrigin(Vector2 newOrigin) + { + // Build array of leaves. Free the rest. + for (int i = 0; i < nodes.Length; ++i) + { + nodes[i].aabb.min -= newOrigin; + nodes[i].aabb.max -= newOrigin; + } + } + + public T GetUserData(int proxyId) + { +#if PBDEBUG + Debug.Assert(0 <= proxyId && proxyId < nodes.Length); +#endif + return nodes[proxyId].userData; + } + + public bool TryGetUserData(int proxyId, out T data) + { + if (proxyId < 0 || proxyId >= nodes.Length) + { + data = default(T); + return false; + } + data = nodes[proxyId].userData; + return true; + } + + public bool WasMoved(int proxyId) + { +#if PBDEBUG + Debug.Assert(0 <= proxyId && proxyId < nodes.Length); +#endif + return nodes[proxyId].moved; + } + + public void ClearMoved(int proxyId) + { +#if PBDEBUG + Debug.Assert(0 <= proxyId && proxyId < nodes.Length); +#endif + nodes[proxyId].moved = false; + } + + public Rect GetFatAABB(int proxyId) + { +#if PBDEBUG + Debug.Assert(0 <= proxyId && proxyId < nodes.Length); +#endif + return nodes[proxyId].aabb; + } + + Stack queryStack = new Stack(); + public QueryEnumerator Query(Rect aabb) + { + return new QueryEnumerator(this, aabb); + } + + public IEnumerator GetEnumerator() + { + // Build array of leaves. Free the rest. + for (int i = 0; i < nodes.Length; ++i) + { + if (nodes[i].height >= 0 && nodes[i].IsLeaf()) + { + yield return nodes[i].userData; + } + } + } + + IEnumerator IEnumerable.GetEnumerator() + { + return this.GetEnumerator(); + } + + public void Draw() + { + Draw(root); + } + + private void Draw(int index) + { + if (index == -1) + { + return; + } + + Gizmos.color = nodes[index].IsLeaf() ? Color.green : Color.red; + DebugDrawingExtensions.DrawRect(nodes[index].aabb); + + Draw(nodes[index].child1); + Draw(nodes[index].child2); + } + + public struct QueryEnumerator { + + B2DynamicTree tree; + Rect aabb; + + public QueryEnumerator(B2DynamicTree tree, Rect aabb) + { + this.tree = tree; + this.aabb = aabb; + Current = 0; + tree.queryStack.Push(tree.root); + } + + public int Current { + get; + private set; + } + + public bool MoveNext() + { + while (tree.queryStack.Count > 0) + { + int nodeId = tree.queryStack.Pop(); + if (nodeId == -1) + { + continue; + } + + if (tree.nodes[nodeId].aabb.Overlaps(aabb)) + { + if (tree.nodes[nodeId].IsLeaf()) + { + Current = nodeId; + return true; + } + else + { + tree.queryStack.Push(tree.nodes[nodeId].child1); + tree.queryStack.Push(tree.nodes[nodeId].child2); + } + } + } + return false; + } + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/B2DynamicTree.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/B2DynamicTree.cs.meta new file mode 100644 index 0000000..4584457 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/B2DynamicTree.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50260b47c6ab16343834ce0701e7a454 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DebugDrawingExtensions.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DebugDrawingExtensions.cs new file mode 100644 index 0000000..b56d0d9 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DebugDrawingExtensions.cs @@ -0,0 +1,192 @@ +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class DebugDrawingExtensions + { + public static void DrawArrowHead(Vector2 basePos, Vector2 dir, float size) + { + dir.Normalize(); + Vector2 normal = new Vector2(-dir.y, dir.x) * size; + Gizmos.DrawLine(basePos - normal, basePos + normal); + Gizmos.DrawLine(basePos - normal, basePos + dir * size); + Gizmos.DrawLine(basePos + normal, basePos + dir * size); + } + + public static void DrawArrowHeadFromSpike(Vector2 pointyPos, Vector2 dir, float size) + { + dir.Normalize(); + pointyPos -= dir * size; + Vector2 normal = new Vector2(-dir.y, dir.x) * size; + Gizmos.DrawLine(pointyPos - normal, pointyPos + normal); + Gizmos.DrawLine(pointyPos - normal, pointyPos + dir * size); + Gizmos.DrawLine(pointyPos + normal, pointyPos + dir * size); + } + + public static void DrawArrow(Vector2 start, Vector2 end) + { + Vector2 dir = end - start; + float length = dir.magnitude; + dir /= length; + Vector2 baseA = start + dir * (length - 0.1f); + Gizmos.DrawLine(start, baseA); + + Vector2 normal = new Vector2(-dir.y, dir.x) * 0.1f; + Gizmos.DrawLine(baseA - normal, baseA + normal); + Gizmos.DrawLine(baseA - normal, end); + Gizmos.DrawLine(baseA + normal, end); + } + + public static void DrawCircle(Vector2 center, float radius = 0.05f) + { + int segmentCount = 10; + Vector2 prevPoint = center + Vector2.up * radius; + + for (float t = 1; t <= segmentCount; t++) + { + float x = (t / segmentCount) * Mathf.PI * 2.0f; + float cx = Mathf.Sin(x); + float cy = Mathf.Cos(x); + + Vector2 point = center + new Vector2(cx, cy) * radius; + Gizmos.DrawLine(prevPoint, point); + prevPoint = point; + } + Gizmos.DrawLine(prevPoint, center + Vector2.up * radius); + } + + public static void DrawBezierConnection(Vector2 start, Vector2 end, bool biDirectional) + { + Vector2 cp; + var tangent = (end - start); + var length = tangent.magnitude; + var normal = new Vector2(-tangent.y, tangent.x) / length; + cp = start + tangent * 0.5f + normal * (length / 5f); + + DrawBezierConnection(start, end, cp, biDirectional); + } + + public static void DrawBezierConnection(Vector2 start, Vector2 end, Vector2 cp, bool biDirectional) + { + float arcLength = (Vector2.Distance(end, start) * 2 + Vector2.Distance(end, cp) + Vector2.Distance(start, cp)) / 3f; + int numberOfSegments = Mathf.CeilToInt(arcLength); + Vector2 prev = start; + float t; + for (t = 1; t <= numberOfSegments; t++) + { + Vector2 v = QuadraticBezierCurve(t / numberOfSegments, start, cp, end); + Gizmos.DrawLine(prev, v); + prev = v; + } + + //draw arrows + t = (numberOfSegments - 1) / (float)numberOfSegments; + Vector2 dir = end - QuadraticBezierCurve(t, start, cp, end); + DrawArrowHeadFromSpike(end, dir, 0.3f); + if (biDirectional) + { + dir = start - QuadraticBezierCurve(1f / numberOfSegments, start, cp, end); + DrawArrowHeadFromSpike(start, dir, 0.3f); + } + } + + public static void DrawBezierConnectionWithOffset(Vector2 start, Vector2 end, Vector2 cp, Vector2 offset) + { + float arcLength = (Vector2.Distance(end, start) * 2 + Vector2.Distance(end, cp) + Vector2.Distance(start, cp)) / 3f; + int numberOfSegments = Mathf.CeilToInt(arcLength); + Vector2 prev = start + offset; + Gizmos.DrawLine(start, prev); + float t; + for (t = 1; t <= numberOfSegments; t++) + { + Vector2 v = QuadraticBezierCurve(t / numberOfSegments, start, cp, end) + offset; + Gizmos.DrawLine(v, v - offset); + Gizmos.DrawLine(prev, v); + prev = v; + } + } + + public static void DrawProjectileArc(Vector2 start, Vector2 end, float hSpeed, bool isBidiretional) + { + float hDelta = end.x - start.x; + float t = hDelta / hSpeed; + int numberOfSegments = Mathf.CeilToInt(t) + 4; + float p0 = start.y - end.y; + float v0 = 9.81f * t * 0.5f - p0 / t; + + Func func = x => 0.5f * -9.81f * x * x + v0 * x + p0; + + Vector2 prev = start; + float z; + float timePerSegment = t / numberOfSegments; + for (z = 1; z <= numberOfSegments; z++) + { + Vector2 v = new Vector2(start.x + z * timePerSegment * hSpeed, end.y + func(z * timePerSegment)); + Gizmos.DrawLine(prev, v); + prev = v; + } + + Vector2 dir = end - new Vector2(start.x + (numberOfSegments - 1) * timePerSegment * hSpeed, end.y + func((numberOfSegments - 1) * timePerSegment)); + DrawArrowHeadFromSpike(end, dir, 0.3f); + if (isBidiretional) + { + dir = start - new Vector2(start.x + timePerSegment * hSpeed, end.y + func(timePerSegment)); + DrawArrowHeadFromSpike(start, dir, 0.3f); + } + } + + public static void DrawProjectileArcWithOffset(Vector2 start, Vector2 end, float hSpeed, Vector2 offset) + { + float hDelta = end.x - start.x; + float t = hDelta / hSpeed; + int numberOfSegments = Mathf.CeilToInt(t) + 4; + float p0 = start.y - end.y; + float v0 = 9.81f * t * 0.5f - p0 / t; + + Func func = x => 0.5f * -9.81f * x * x + v0 * x + p0; + + Vector2 prev = start + offset; + Gizmos.DrawLine(start, prev); + float z; + float timePerSegment = t / numberOfSegments; + for (z = 1; z <= numberOfSegments; z++) + { + Vector2 v = new Vector2(start.x + z * timePerSegment * hSpeed, end.y + func(z * timePerSegment)) + offset; + Gizmos.DrawLine(prev, v); + Gizmos.DrawLine(v, v - offset); + prev = v; + } + } + + private static Vector2 QuadraticBezierCurve(float t, Vector2 a, Vector2 b, Vector2 c) + { + return (1 - t) * (1 - t) * a + 2 * (1 - t) * t * b + t * t * c; + } + + public static Color LinearBlendBetweenColors(float value, params Color[] colors) + { + value = Mathf.Clamp01(value); + int index = (int)(value * (colors.Length - 1)); + float t = (value * (colors.Length - 1)) - index; + Color b = index >= colors.Length - 1 ? colors[index] : colors[index + 1]; + return Color.Lerp(colors[index], b, t); + } + + public static void DrawRect(Vector2 position, Vector2 size) + { + Gizmos.DrawLine(position + size, new Vector3(position.x, position.y + size.y)); + Gizmos.DrawLine(position, new Vector3(position.x, position.y + size.y)); + Gizmos.DrawLine(position + size, new Vector3(position.x + size.x, position.y)); + Gizmos.DrawLine(position, new Vector3(position.x + size.x, position.y)); + } + + public static void DrawRect(Rect rect) + { + Gizmos.DrawLine(rect.position + rect.size, new Vector3(rect.position.x, rect.position.y + rect.size.y)); + Gizmos.DrawLine(rect.position, new Vector3(rect.position.x, rect.position.y + rect.size.y)); + Gizmos.DrawLine(rect.position + rect.size, new Vector3(rect.position.x + rect.size.x, rect.position.y)); + Gizmos.DrawLine(rect.position, new Vector3(rect.position.x + rect.size.x, rect.position.y)); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DebugDrawingExtensions.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DebugDrawingExtensions.cs.meta new file mode 100644 index 0000000..be92961 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DebugDrawingExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a74ed22fccf86e4ebb67f3dda822eb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DifferentColors.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DifferentColors.cs new file mode 100644 index 0000000..6d22211 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DifferentColors.cs @@ -0,0 +1,767 @@ +using System.Globalization; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class DifferentColors + { + public static Color32 GetRandomColor() + { + int id = Random.Range(0, colors.Length - 1); + return GetColor(id); + } + + public static Color32 GetColor(int id) + { + if (id < 0) + return Color.white; + while (id >= colors.Length) + { + id -= colors.Length; + } + int rgb = System.Int32.Parse(colors[id], NumberStyles.HexNumber); + return ToColor(rgb); + } + + static Color32 ToColor(int HexVal) + { + byte R = (byte)((HexVal >> 16) & 0xFF); + byte G = (byte)((HexVal >> 8) & 0xFF); + byte B = (byte)((HexVal) & 0xFF); + return new Color32(R, G, B, 255); + } + + readonly static string[] colors = new string[] + { + "9BC4E5", +"310106", +"04640D", +"FEFB0A", +"FB5514", +"E115C0", +"00587F", +"0BC582", +"FEB8C8", +"9E8317", +"01190F", +"847D81", +"58018B", +"B70639", +"703B01", +"F7F1DF", +"118B8A", +"4AFEFA", +"FCB164", +"796EE6", +"000D2C", +"53495F", +"F95475", +"61FC03", +"5D9608", +"DE98FD", +"98A088", +"4F584E", +"248AD0", +"5C5300", +"9F6551", +"BCFEC6", +"932C70", +"2B1B04", +"B5AFC4", +"D4C67A", +"AE7AA1", +"C2A393", +"0232FD", +"6A3A35", +"BA6801", +"168E5C", +"16C0D0", +"C62100", +"014347", +"233809", +"42083B", +"82785D", +"023087", +"B7DAD2", +"196956", +"8C41BB", +"ECEDFE", +"2B2D32", +"94C661", +"F8907D", +"895E6B", +"788E95", +"FB6AB8", +"576094", +"DB1474", +"8489AE", +"860E04", +"FBC206", +"6EAB9B", +"F2CDFE", +"645341", +"760035", +"647A41", +"496E76", +"E3F894", +"F9D7CD", +"876128", +"A1A711", +"01FB92", +"FD0F31", +"BE8485", +"C660FB", +"120104", +"D48958", +"05AEE8", +"C3C1BE", +"9F98F8", +"1167D9", +"D19012", +"B7D802", +"826392", +"5E7A6A", +"B29869", +"1D0051", +"8BE7FC", +"76E0C1", +"BACFA7", +"11BA09", +"462C36", +"65407D", +"491803", +"F5D2A8", +"03422C", +"72A46E", +"128EAC", +"47545E", +"B95C69", +"A14D12", +"C4C8FA", +"372A55", +"3F3610", +"D3A2C6", +"719FFA", +"0D841A", +"4C5B32", +"9DB3B7", +"B14F8F", +"747103", +"9F816D", +"D26A5B", +"8B934B", +"F98500", +"002935", +"D7F3FE", +"FCB899", +"1C0720", +"6B5F61", +"F98A9D", +"9B72C2", +"A6919D", +"2C3729", +"D7C70B", +"9F9992", +"EFFBD0", +"FDE2F1", +"923A52", +"5140A7", +"BC14FD", +"6D706C", +"0007C4", +"C6A62F", +"000C14", +"904431", +"600013", +"1C1B08", +"693955", +"5E7C99", +"6C6E82", +"D0AFB3", +"493B36", +"AC93CE", +"C4BA9C", +"09C4B8", +"69A5B8", +"374869", +"F868ED", +"E70850", +"C04841", +"C36333", +"700366", +"8A7A93", +"52351D", +"B503A2", +"D17190", +"A0F086", +"7B41FC", +"0EA64F", +"017499", +"08A882", +"7300CD", +"A9B074", +"4E6301", +"AB7E41", +"547FF4", +"134DAC", +"FDEC87", +"056164", +"FE12A0", +"C264BA", +"939DAD", +"0BCDFA", +"277442", +"1BDE4A", +"826958", +"977678", +"BAFCE8", +"7D8475", +"8CCF95", +"726638", +"FEA8EB", +"EAFEF0", +"6B9279", +"C2FE4B", +"304041", +"1EA6A7", +"022403", +"062A47", +"054B17", +"F4C673", +"02FEC7", +"9DBAA8", +"775551", +"835536", +"565BCC", +"80D7D2", +"7AD607", +"696F54", +"87089A", +"664B19", +"242235", +"7DB00D", +"BFC7D6", +"D5A97E", +"433F31", +"311A18", +"FDB2AB", +"D586C9", +"7A5FB1", +"32544A", +"EFE3AF", +"859D96", +"2B8570", +"8B282D", +"E16A07", +"4B0125", +"021083", +"114558", +"F707F9", +"C78571", +"7FB9BC", +"FC7F4B", +"8D4A92", +"6B3119", +"884F74", +"994E4F", +"9DA9D3", +"867B40", +"CED5C4", +"1CA2FE", +"D9C5B4", +"FEAA00", +"507B01", +"A7D0DB", +"53858D", +"588F4A", +"FBEEEC", +"FC93C1", +"D7CCD4", +"3E4A02", +"C8B1E2", +"7A8B62", +"9A5AE2", +"896C04", +"B1121C", +"402D7D", +"858701", +"D498A6", +"B484EF", +"5C474C", +"067881", +"C0F9FC", +"726075", +"8D3101", +"6C93B2", +"A26B3F", +"AA6582", +"4F4C4F", +"5A563D", +"E83005", +"32492D", +"FC7272", +"B9C457", +"552A5B", +"B50464", +"616E79", +"DCE2E4", +"CF8028", +"0AE2F0", +"4F1E24", +"FD5E46", +"4B694E", +"C5DEFC", +"5DC262", +"022D26", +"7776B8", +"FD9F66", +"B049B8", +"988F73", +"BE385A", +"2B2126", +"54805A", +"141B55", +"67C09B", +"456989", +"DDC1D9", +"166175", +"C1E29C", +"A397B5", +"2E2922", +"ABDBBE", +"B4A6A8", +"A06B07", +"A99949", +"0A0618", +"B14E2E", +"60557D", +"D4A556", +"82A752", +"4A005B", +"3C404F", +"6E6657", +"7E8BD5", +"1275B8", +"D79E92", +"230735", +"661849", +"7A8391", +"FE0F7B", +"B0B6A9", +"629591", +"D05591", +"97B68A", +"97939A", +"035E38", +"53E19E", +"DFD7F9", +"02436C", +"525A72", +"059A0E", +"3E736C", +"AC8E87", +"D10C92", +"B9906E", +"66BDFD", +"C0ABFD", +"0734BC", +"341224", +"8AAAC1", +"0E0B03", +"414522", +"6A2F3E", +"2D9A8A", +"4568FD", +"FDE6D2", +"FEE007", +"9A003C", +"AC8190", +"DCDD58", +"B7903D", +"1F2927", +"9B02E6", +"827A71", +"878B8A", +"8F724F", +"AC4B70", +"37233B", +"385559", +"F347C7", +"9DB4FE", +"D57179", +"DE505A", +"37F7DD", +"503500", +"1C2401", +"DD0323", +"00A4BA", +"955602", +"FA5B94", +"AA766C", +"B8E067", +"6A807E", +"4D2E27", +"73BED7", +"D7BC8A", +"614539", +"526861", +"716D96", +"829A17", +"210109", +"436C2D", +"784955", +"987BAB", +"8F0152", +"0452FA", +"B67757", +"A1659F", +"D4F8D8", +"48416F", +"DEBAAF", +"A5A9AA", +"8C6B83", +"403740", +"70872B", +"D9744D", +"151E2C", +"5C5E5E", +"B47C02", +"F4CBD0", +"E49D7D", +"DD9954", +"B0A18B", +"2B5308", +"EDFD64", +"9D72FC", +"2A3351", +"68496C", +"C94801", +"EED05E", +"826F6D", +"E0D6BB", +"5B6DB4", +"662F98", +"0C97CA", +"C1CA89", +"755A03", +"DFA619", +"CD70A8", +"BBC9C7", +"F6BCE3", +"A16462", +"01D0AA", +"87C6B3", +"E7B2FA", +"D85379", +"643AD5", +"D18AAE", +"13FD5E", +"B3E3FD", +"C977DB", +"C1A7BB", +"9286CB", +"A19B6A", +"8FFED7", +"6B1F17", +"DF503A", +"10DDD7", +"9A8457", +"60672F", +"7D327D", +"DD8782", +"59AC42", +"82FDB8", +"FC8AE7", +"909F6F", +"B691AE", +"B811CD", +"BCB24E", +"CB4BD9", +"2B2304", +"AA9501", +"5D5096", +"403221", +"F9FAB4", +"3990FC", +"70DE7F", +"95857F", +"84A385", +"50996F", +"797B53", +"7B6142", +"81D5FE", +"9CC428", +"0B0438", +"3E2005", +"4B7C91", +"523854", +"005EA9", +"F0C7AD", +"ACB799", +"FAC08E", +"502239", +"BFAB6A", +"2B3C48", +"0EB5D8", +"8A5647", +"49AF74", +"067AE9", +"F19509", +"554628", +"4426A4", +"7352C9", +"3F4287", +"8B655E", +"B480BF", +"9BA74C", +"5F514C", +"CC9BDC", +"BA7942", +"1C4138", +"3C3C3A", +"29B09C", +"02923F", +"701D2B", +"36577C", +"3F00EA", +"3D959E", +"440601", +"8AEFF3", +"6D442A", +"BEB1A8", +"A11C02", +"8383FE", +"A73839", +"DBDE8A", +"0283B3", +"888597", +"32592E", +"F5FDFA", +"01191B", +"AC707A", +"B6BD03", +"027B59", +"7B4F08", +"957737", +"83727D", +"035543", +"6F7E64", +"C39999", +"52847A", +"925AAC", +"77CEDA", +"516369", +"E0D7D0", +"FCDD97", +"555424", +"96E6B6", +"85BB74", +"5E2074", +"BD5E48", +"9BEE53", +"1A351E", +"3148CD", +"71575F", +"69A6D0", +"391A62", +"E79EA0", +"1C0F03", +"1B1636", +"D20C39", +"765396", +"7402FE", +"447F3E", +"CFD0A8", +"3A2600", +"685AFC", +"A4B3C6", +"534302", +"9AA097", +"FD5154", +"9B0085", +"403956", +"80A1A7", +"6E7A9A", +"605E6A", +"86F0E2", +"5A2B01", +"7E3D43", +"ED823B", +"32331B", +"424837", +"40755E", +"524F48", +"B75807", +"B40080", +"5B8CA1", +"FDCFE5", +"CCFEAC", +"755847", +"CAB296", +"C0D6E3", +"2D7100", +"D5E4DE", +"362823", +"69C63C", +"AC3801", +"163132", +"4750A6", +"61B8B2", +"FCC4B5", +"DEBA2E", +"FE0449", +"737930", +"8470AB", +"687D87", +"D7B760", +"6AAB86", +"8398B8", +"B7B6BF", +"92C4A1", +"B6084F", +"853B5E", +"D0BCBA", +"92826D", +"C6DDC6", +"BE5F5A", +"280021", +"435743", +"874514", +"63675A", +"E97963", +"8F9C9E", +"985262", +"909081", +"023508", +"DDADBF", +"D78493", +"363900", +"5B0120", +"603C47", +"C3955D", +"AC61CB", +"FD7BA7", +"716C74", +"8D895B", +"071001", +"82B4F2", +"B6BBD8", +"71887A", +"8B9FE3", +"997158", +"65A6AB", +"2E3067", +"321301", +"FEECCB", +"3B5E72", +"C8FE85", +"A1DCDF", +"CB49A6", +"B1C5E4", +"3E5EB0", +"88AEA7", +"04504C", +"975232", +"6786B9", +"068797", +"9A98C4", +"A1C3C2", +"1C3967", +"DBEA07", +"789658", +"E7E7C6", +"A6C886", +"957F89", +"752E62", +"171518", +"A75648", +"01D26F", +"0F535D", +"047E76", +"C54754", +"5D6E88", +"AB9483", +"803B99", +"FA9C48", +"4A8A22", +"654A5C", +"965F86", +"9D0CBB", +"A0E8A0", +"D3DBFA", +"FD908F", +"AEAB85", +"A13B89", +"F1B350", +"066898", +"948A42", +"C8BEDE", +"19252C", +"7046AA", +"E1EEFC", +"3E6557", +"CD3F26", +"2B1925", +"DDAD94", +"C0B109", +"37DFFE", +"039676", +"907468", +"9E86A5", +"3A1B49", +"BEE5B7", +"C29501", +"9E3645", +"DC580A", +"645631", +"444B4B", +"FD1A63", +"DDE5AE", +"887800", +"36006F", +"3A6260", +"784637", +"FEA0B7", +"A3E0D2", +"6D6316", +"5F7172", +"B99EC7", +"777A7E", +"E0FEFD", +"E16DC5", +"01344B", +"F8F8FC", +"9F9FB5", +"182617", +"FE3D21", +"7D0017", +"822F21", +"EFD9DC", +"6E68C4", +"35473E", +"007523", +"767667", +"A6825D", +"83DC5F", +"227285", +"A95E34", +"526172", +"979730", +"756F6D", +"716259", +"E8B2B5", +"B6C9BB", +"9078DA", +"4F326E", +"B2387B", +"888C6F", +"314B5F", +"E5B678", +"38A3C6", +"586148", +"5C515B", +"CDCCE1", +"C8977F" + }; + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DifferentColors.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DifferentColors.cs.meta new file mode 100644 index 0000000..bd0c4ef --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/DifferentColors.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecd1377c04d5d854aafa2aecdbf09094 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/ExtensionMethods.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/ExtensionMethods.cs new file mode 100644 index 0000000..48a78d1 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/ExtensionMethods.cs @@ -0,0 +1,101 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class ExtensionMethods + { + + #region LinkedList + + public static void AppendRange(this LinkedList source, IEnumerable items) + { + foreach (T item in items) + { + source.AddLast(item); + } + } + + public static void PrependRange(this LinkedList source, IEnumerable items) + { + LinkedListNode first = source.First; + foreach (T item in items) + { + source.AddBefore(first, item); + } + } + + public static T[] ToArray(this LinkedList source) + { + T[] result = new T[source.Count]; + LinkedListNode cNode = source.First; + int index = 0; + do + { + result[index] = cNode.Value; + index++; + } while ((cNode = cNode.Next) != null); + return result; + } + + public static void Reverse(this LinkedList source) + { + var head = source.First; + while (head.Next != null) + { + var next = head.Next; + source.Remove(next); + source.AddFirst(next.Value); + } + } + #endregion + + public static bool IsLayerWithinMask(this LayerMask source, int other) + { + return source == (source | (1 << other)); + } + + public static Vector2 Rotate(this Vector2 v, float degrees) + { + float sin = Mathf.Sin(degrees * Mathf.Deg2Rad); + float cos = Mathf.Cos(degrees * Mathf.Deg2Rad); + + float tx = v.x; + float ty = v.y; + v.x = (cos * tx) - (sin * ty); + v.y = (sin * tx) + (cos * ty); + return v; + } + + public static Vector2 RotateRad(this Vector2 v, float rads) + { + float sin = Mathf.Sin(rads); + float cos = Mathf.Cos(rads); + + float tx = v.x; + float ty = v.y; + v.x = (cos * tx) - (sin * ty); + v.y = (sin * tx) + (cos * ty); + return v; + } + + public static bool ContainsBounds(this Rect source, Rect other) + { + return source.Contains(other.min) && source.Contains(other.max); + } + + public static Rect CombineWith(this Rect source, Rect other) + { + return Rect.MinMaxRect( + Mathf.Min(source.xMin, other.xMin), + Mathf.Min(source.yMin, other.yMin), + Mathf.Max(source.xMax, other.xMax), + Mathf.Max(source.yMax, other.yMax)); + } + + public static float Area(this Rect source) + { + return source.x * source.y; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/ExtensionMethods.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/ExtensionMethods.cs.meta new file mode 100644 index 0000000..9596bed --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/ExtensionMethods.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 725e57c874bd99c44bb3ff3513a4e6e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Geometry.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Geometry.cs new file mode 100644 index 0000000..3915aab --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Geometry.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + public static class Geometry + { + public static float DistancePointLineSegment(Vector2 p, Vector2 a, Vector2 b) + { + return Vector2.Distance(p, ProjectPointOnLineSegment(p, a, b)); + } + + /// + /// Finds closest point to p on line a -> b + /// + public static Vector2 ProjectPointOnLineSegment(Vector2 p, Vector2 a, Vector2 b) + { + Vector2 dir = b - a; + float l2 = dir.sqrMagnitude; + if (l2 == 0.0) + return a; + + float t = Mathf.Clamp01(Vector2.Dot(p - a, dir) / l2); + Vector2 projection = a + t * dir; + return projection; + } + + /// + /// Project point on line. + /// + /// Point to proejct + /// Point on line + /// Line tangent. Must be normalized! + /// Closets point on line to p + public static Vector2 ProjectPointOnLine(Vector2 p, Vector2 a, Vector2 dir) + { + float t = Vector2.Dot(p - a, dir); + return a + t * dir; + } + + public static bool IsPointOnPositiveSideOfLine(Vector2 point, Vector2 linePointA, Vector2 normal) + { + return Vector2.Dot(point - linePointA, normal) >= 0; + } + + /// + /// Returns a rect that encapsulates the passed in rect after being transformed. + /// + public static Rect TransformBoundingRect(Rect bounds, Matrix4x4 transformation) + { + // bounds -> extract 2 diagonal corners + // transform corners + Vector2 a = transformation.MultiplyPoint3x4(bounds.min); + Vector2 b = transformation.MultiplyPoint3x4(bounds.max); + Vector2 c = transformation.MultiplyPoint3x4(new Vector2(bounds.xMin, bounds.yMax)); + Vector2 d = transformation.MultiplyPoint3x4(new Vector2(bounds.xMax, bounds.yMin)); + + // create new box containing corners + Vector2 min = Vector2.Min(d, Vector2.Min(c, Vector2.Min(a, b))); + Vector2 max = Vector2.Max(d, Vector2.Max(c, Vector2.Max(a, b))); + + return new Rect(min, max - min); + } + + public static Rect EnlargeRect(Rect rect, float amount) + { + return new Rect(rect.position - Vector2.one * amount, rect.size + Vector2.one * amount * 2); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Geometry.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Geometry.cs.meta new file mode 100644 index 0000000..baaed66 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Geometry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f2df2ee5a1fccc4f86bb36c3db1860f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegment.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegment.cs new file mode 100644 index 0000000..aa3953b --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegment.cs @@ -0,0 +1,67 @@ +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + [System.Serializable] + internal class LineSegment + { + public Vector2 Start { get { return start; } } + public Vector2 End { get { return GetPositionAlongSegment(Length); } } + public Vector2 Normal { get { return new Vector2(-Tangent.y, Tangent.x); } } + public Vector2 Tangent { get { return dirNorm; } } + public float Length { get { return length; } } + + public Rect AABB + { + get + { + Vector2 min = Vector2.Min(Start, End); + Vector2 max = Vector2.Max(Start, End); + return new Rect(min, max - min); + } + } + + [SerializeField] + private Vector2 start; + [SerializeField] + private float length; + [SerializeField] + private Vector2 dirNorm; + + public LineSegment(Vector2 start, Vector2 dirNorm, float length) + { + this.start = start; + this.length = length; + this.dirNorm = dirNorm; + } + + public LineSegment(LineSegment other) + { + this.start = other.start; + this.length = other.length; + this.dirNorm = other.dirNorm; + } + + public Vector2 GetPositionAlongSegment(float t) + { + return Start + Tangent * t; + } + + public Vector2 ProjectPointOnSegment(Vector2 lPoint) + { + return Start + DistanceOfPointAlongSegment(lPoint) * Tangent; + } + + public float DistanceOfPointAlongSegment(Vector2 lPoint) + { + Vector2 ap = lPoint - Start; + return Mathf.Clamp(Vector2.Dot(Tangent, ap), 0, Length); + } + + public float PointDistance(Vector2 position) + { + return Vector2.Distance(position, ProjectPointOnSegment(position)); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegment.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegment.cs.meta new file mode 100644 index 0000000..5502b4b --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21f708fb1003baa43a6477a00ed8fa0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegmentWithClearance.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegmentWithClearance.cs new file mode 100644 index 0000000..9c4f320 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegmentWithClearance.cs @@ -0,0 +1,93 @@ +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + [System.Serializable] + internal class LineSegmentWithClearance : LineSegment + { + public int CellCount { get { return cellClearances.Length; } } + public int NextSegmentIndex { get => nextSegIndex; internal set => nextSegIndex = value; } + public int PrevSegmentIndex { get => prevSegIndex; internal set => prevSegIndex = value; } + + public bool HasNext => nextSegIndex >= 0; + public bool HasPrev => prevSegIndex >= 0; + + [SerializeField] + protected float[] cellClearances; + [SerializeField] + private int prevSegIndex = -1; + [SerializeField] + private int nextSegIndex = -1; + + public LineSegmentWithClearance(Vector2 start, Vector2 dirNorm, float length, float[] cellClearances) : base(start, dirNorm, length) + { + this.cellClearances = cellClearances; + } + + public LineSegmentWithClearance(LineSegmentWithClearance other) : base(other) + { + this.prevSegIndex = other.prevSegIndex; + this.nextSegIndex = other.nextSegIndex; + this.cellClearances = (float[])other.cellClearances.Clone(); + } + + public float GetClearanceAlongSegment(float dist) + { + return cellClearances[CellIndexOf(dist)]; + } + + public bool DoesClearanceAllowTraversal(float startT, float endT, float agentHeight) + { + return GetMinClearanceTo(startT, endT) < agentHeight; + } + + private int CellIndexOf(float t) + { + if (t >= Length) + return cellClearances.Length - 1; + else if (t <= 0) + return 0; + else + return Mathf.FloorToInt(t * (cellClearances.Length / Length)); + } + + public float GetMinClearanceTo(float from, float to) + { + int cellFrom = CellIndexOf(from); + int cellTo = CellIndexOf(to); + + int dir = cellTo - cellFrom; + if (dir == 0) + { + // same cell + return cellClearances[cellFrom]; + } + else if (dir < 0) + { + float minClearance = cellClearances[cellFrom]; + for (int iCell = cellFrom - 1; iCell >= cellTo; iCell--) + { + if (minClearance > cellClearances[iCell]) + minClearance = cellClearances[iCell]; + } + return minClearance; + } + else + { + float minClearance = cellClearances[cellFrom]; + for (int iCell = cellFrom + 1; iCell <= cellTo; iCell++) + { + if (minClearance > cellClearances[iCell]) + minClearance = cellClearances[iCell]; + } + return minClearance; + } + } + + public float[] CloneCellClearances() + { + return (float[])cellClearances.Clone(); + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegmentWithClearance.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegmentWithClearance.cs.meta new file mode 100644 index 0000000..51cfdd0 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/LineSegmentWithClearance.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdad88f454070c84d91ea61e5041129d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Utility.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Utility.cs new file mode 100644 index 0000000..1bad545 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Utility.cs @@ -0,0 +1,49 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal static class Utility + { + public static T WeightedRandomChoice(IEnumerable values, IEnumerable weights) + { + float total = 0; + foreach (var w in weights) + { + total += w; + } + return WeightedRandomChoice(values, weights, total); + } + + public static T WeightedRandomChoice(IEnumerable values, IEnumerable weights, float totalWeight) + { + float total = 0; + foreach (var w in weights) + { + total += w; + } + + float r = Random.value * total; + IEnumerator enumerator = values.GetEnumerator(); + foreach (var w in weights) + { + enumerator.MoveNext(); + if (w >= r) + return enumerator.Current; + + r -= w; + } + throw new System.Exception(); + } + + public static void ResizeWithDefault(ref T[] array, int newLength, T defaultElem) + { + int oldLength = array.Length; + System.Array.Resize(ref array, newLength); + for (int i = oldLength; i < newLength; i++) + { + array[i] = defaultElem; + } + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Utility.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Utility.cs.meta new file mode 100644 index 0000000..6666862 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/Utilities/Utility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d37807132db5f144aa8a58209a65a9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library.meta new file mode 100644 index 0000000..48dc3c0 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6c542d4b9468044a94955f41f82e1b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/Connector.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/Connector.cs new file mode 100644 index 0000000..70ab756 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/Connector.cs @@ -0,0 +1,65 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class Connector + { + public void Add(Vector2 a, Vector2 b) + { + LinkedListNode current = openPolygons.First; + + while (current != null) + { + LinkedListNode next = current.Next; + + PointChain currentChain = current.Value; + + if (currentChain.LinkSegment(a, b)) + { + if (currentChain.IsClosed()) + { + closedPolygons.AddLast(currentChain); + openPolygons.Remove(current); + return; + } + else + { + LinkedListNode innerCurrent = current.Next; + + while (innerCurrent != null) + { + LinkedListNode innerNext = innerCurrent.Next; + + if (currentChain.LinkPointChain(innerCurrent.Value)) + { + openPolygons.Remove(innerCurrent); + break; + } + innerCurrent = innerNext; + } + } + return; + } + current = next; + } + openPolygons.AddLast(new PointChain(a, b)); + return; + } + + LinkedListNode begin() { return closedPolygons.First; } + LinkedListNode end() { return closedPolygons.Last; } + + public void Clear() + { + closedPolygons.Clear(); + openPolygons.Clear(); + } + + public int GetNumClosedPolygons() { return closedPolygons.Count; } + public int GetNumOpenPolygons() { return openPolygons.Count; } + + public LinkedList openPolygons = new LinkedList(); + public LinkedList closedPolygons = new LinkedList(); + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/Connector.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/Connector.cs.meta new file mode 100644 index 0000000..70f07d8 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/Connector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb67e4c79a6b6a24798f174e0ff3368b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/ExtendedGeometry.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/ExtendedGeometry.cs new file mode 100644 index 0000000..6c3da2b --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/ExtendedGeometry.cs @@ -0,0 +1,452 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace PathBerserker2d +{ + internal class ExtendedGeometry + { + public static float SignedArea(Vector2 a, Vector2 b, Vector2 c) + { + return (a.x - c.x) * (b.y - c.y) - (b.x - c.x) * (a.y - c.y); + } + + /** Signed area of the triangle ( (0,0), p1, p2) */ + public static float SignedArea(Vector2 b, Vector2 c) + { + return -c.x * (b.y - c.y) - -c.y * (b.x - c.x); + } + + /** Sign of triangle (p1, p2, o) */ + public static int Sign(Vector2 a, Vector2 b, Vector2 o) + { + float det = (a.x - o.x) * (b.y - o.y) - (b.x - o.x) * (a.y - o.y); + return (det < 0 ? -1 : (det > 0 ? +1 : 0)); + } + + public static float SignedAreaDoubledTris(Vector2 a, Vector2 b, Vector2 c) + { + return (a.x - c.x) * (b.y - c.y) - (b.x - c.x) * (a.y - c.y); + } + + /** Signed area of the triangle ( (0,0), p1, p2) */ + public static float SignedAreaDoubledTris(Vector2 b, Vector2 c) + { + return -c.x * (b.y - c.y) - -c.y * (b.x - c.x); + } + + /** Sign of triangle (p1, p2, o) */ + public static int SignTris(Vector2 a, Vector2 b, Vector2 o) + { + float det = (a.x - o.x) * (b.y - o.y) - (b.x - o.x) * (a.y - o.y); + return (det < 0 ? -1 : (det > 0 ? +1 : 0)); + } + + public static float SignedAreaDoubledRect(Vector2 a, Vector2 b, Vector2 c, Vector2 d) + { + return (a.y - c.y) * (d.x - b.x) + (b.y - d.y) * (a.x - c.x); + } + + public static bool DoesLineIntersectBounds(Vector2 pA, Vector2 pB, Bounds bounds) + { + if (pA.x > bounds.max.x && pB.x > bounds.max.x) return false; + if (pA.x < bounds.min.x && pB.x < bounds.min.x) return false; + if (pA.y > bounds.max.y && pB.y > bounds.max.y) return false; + if (pA.y < bounds.min.y && pB.y < bounds.min.y) return false; + + float z = pB.x * pA.y - pA.x * pB.y; + float x = pB.y - pA.y; + float y = pA.x - pB.x; + + float sign = Mathf.Sign(bounds.max.x * x + bounds.max.y * y + z); + return (sign == Mathf.Sign(bounds.min.x * x + bounds.max.y * y + z) && sign == Mathf.Sign(bounds.max.x * x + bounds.max.y * y + z) && sign == Mathf.Sign(bounds.max.x * x + bounds.max.y * y + z)); + } + + + public static bool IsOnLeftSideOfLine(Vector2 pA, Vector2 pB, Vector2 point) + { + return ((pB.x - pA.x) * (point.y - pA.y) - (pB.y - pA.y) * (point.x - pA.x)) > 0; + } + + const float LineCircle_FudgeFactor = 0.00001f; + // -1 = line is completly outside of the circle + // 0 = 0 intersections found, line is completly inside of circle + // 1 = 1 intersection found (i1) + // 2 = 2 intersections found (i1, i2) + public static int DoesLineIntersectWithCircle(Vector2 lA, Vector2 lB, Vector2 circleCenter, float radius, out Vector2 i1, out Vector2 i2) + { + i1 = Vector2.zero; + i2 = Vector2.zero; + + Vector2 dir = (lB - lA); + float distL = dir.magnitude; + dir /= distL; + + float t = dir.x * (circleCenter.x - lA.x) + dir.y * (circleCenter.y - lA.y); + + Vector2 tangent = t * dir + lA; + float distToCenter = (tangent - circleCenter).sqrMagnitude; + float radSquared = radius * radius; + + if (distToCenter < radSquared) + { + float dt = Mathf.Sqrt(radSquared - distToCenter); + float tMinDt = t - dt; + if (tMinDt > 0 + LineCircle_FudgeFactor || tMinDt < distL - LineCircle_FudgeFactor) + { + i1 = tMinDt * dir + lA - circleCenter; + + tMinDt = t + dt; + if (tMinDt > 0 + LineCircle_FudgeFactor || tMinDt < distL - LineCircle_FudgeFactor) + { + i2 = tMinDt * dir + lA - circleCenter; + return 2; + } + return 1; + } + tMinDt = t + dt; + if (tMinDt > 0 + LineCircle_FudgeFactor || tMinDt < distL - LineCircle_FudgeFactor) + { + i1 = tMinDt * dir + lA - circleCenter; + return 1; + } + return 0; + } + else if (distToCenter == radSquared) + { + i1 = tangent - circleCenter; + return 1; + } + else + { + return -1; + } + } + + public static bool FindLineIntersection(Vector2 l1a, Vector2 l1b, Vector2 l2a, Vector2 l2b, out Vector2 inter) + { + inter = Vector2.zero; + var d = (l2b.y - l2a.y) * (l1b.x - l1a.x) - (l2b.x - l2a.x) * (l1b.y - l1a.y); + + //n_a and n_b are calculated as seperate values for readability + var n_a = + (l2b.x - l2a.x) * (l1a.y - l2a.y) + - + (l2b.y - l2a.y) * (l1a.x - l2a.x); + + var n_b = + (l1b.x - l1a.x) * (l1a.y - l2a.y) + - + (l1b.y - l1a.y) * (l1a.x - l2a.x); + + // Make sure there is not a division by zero - this also indicates that + // the lines are parallel. + // If n_a and n_b were both equal to zero the lines would be on top of each + // other (coincidental). This check is not done because it is not + // necessary for this implementation (the parallel check accounts for this). + if (d == 0) + return false; + + // Calculate the intermediate fractional point that the lines potentially intersect. + var ua = n_a / d; + var ub = n_b / d; + + // The fractional point will be between 0 and 1 inclusive if the lines + // intersect. If the fractional calculation is larger than 1 or smaller + // than 0 the lines would need to be longer to intersect. + if (ua >= 0.0 && ua <= 1.0 && ub >= 0.0 && ub <= 1.0) + { + inter.x = l1a.x + (ua * (l1b.x - l1a.x)); + inter.y = l1a.y + (ua * (l1b.y - l1a.y)); + return true; + } + return false; + } + + //https://gist.github.com/ChickenProp/3194723 + public static bool RectLineIntersection(Rect rect, Vector2 la, Vector2 lb, out float u1, out float u2) + { + Vector2 lDelta = lb - la; + + float[] p = new float[4] { + -lDelta.x, + lDelta.x, + -lDelta.y, + lDelta.y + }; + + float[] q = new float[4] { + la.x - rect.xMin, + rect.xMax - la.x, + la.y - rect.yMin, + rect.yMax - la.y, + }; + + u1 = Mathf.NegativeInfinity; + u2 = Mathf.Infinity; + for (int i = 0; i < 4; i++) + { + if (p[i] == 0) + { + if (q[i] < 0) + return false; + } + else + { + var t = q[i] / p[i]; + if (p[i] < 0 && u1 < t) + { + u1 = t; + } + else if (p[i] > 0 && u2 > t) + { + u2 = t; + } + } + } + return u1 <= u2; + + /* + // entirely outside + if (u1 > u2) + { + return false; + } + + // entirely inside + if (u1 < 0 && 1 < u2) + { + return 0; + } + + // 2 intersections + if (0 < u1 && u1 < u2 && u2 < 1) + { + return 3; + } + + // 1 intersection + if (0 < u1 && u1 < 1) + { + return 1; + } + return 2;*/ + } + + public static void MergeCloseVerts(List points, float maxDistance) + { + float maxDistSq = maxDistance * maxDistance; + for (int i = 0, j = points.Count - 1; i < points.Count && points.Count > 3; j = i, i++) + { + float dist = (points[i] - points[j]).sqrMagnitude; + + if (dist <= maxDistSq) + { + Vector2 avg = (points[i] + points[j]) / 2f; + points[j] = avg; + points.RemoveAt(i); + + MergeCloseVerts(points, maxDistance); + return; + } + } + } + + public static List SimplifyContour(List points, float tolerance) + { + if (points == null || points.Count < 3) + return points; + + List pointIndeciesToKeep = new List(); + + int firstPoint = 0; + + //find furthest point to first point + int lastPoint = FurthestPointFrom(points, firstPoint); + + pointIndeciesToKeep.Add(firstPoint); + + DouglasPeuckerReduction(points, firstPoint, lastPoint, + tolerance, pointIndeciesToKeep); + + pointIndeciesToKeep.Add(lastPoint); + + DouglasPeuckerReductionReverse(points, lastPoint, firstPoint + points.Count, tolerance, pointIndeciesToKeep); + + + + if (pointIndeciesToKeep.Count < 3) + { +#if PBDEBUG + Debug.LogWarning("Simplification failed!"); +#endif + return points; + } + List returnPoints = new List(); + foreach (int index in pointIndeciesToKeep) + { + returnPoints.Add(points[index]); + } +#if PBDEBUG + Debug.Log(string.Format("Reduced vert count from {0}, to {1} with douglas peucker.", points.Count, returnPoints.Count)); +#endif + return returnPoints; + } + + private static void DouglasPeuckerReduction(List points, int firstPoint, int lastPoint, float tolerance, List pointsToKeep) + { + float dmax = tolerance; + int index = -1; + + for (int i = firstPoint + 1; i < lastPoint; i++) + { + float distance = PerpendicularDistance + (points[firstPoint], points[lastPoint], points[i]); + if (distance > dmax) + { + dmax = distance; + index = i; + } + } + + if (index != -1) + { + //Add the largest point that exceeds the tolerance + DouglasPeuckerReduction(points, firstPoint, index, tolerance, pointsToKeep); + pointsToKeep.Add(index); + DouglasPeuckerReduction(points, index, lastPoint, tolerance, pointsToKeep); + } + } + + private static void DouglasPeuckerReductionReverse(List points, int firstPoint, int lastPoint, float tolerance, List pointsToKeep) + { + float dmax = tolerance; + int index = -1; + int workingLastPoint = lastPoint >= points.Count ? lastPoint - points.Count : lastPoint; + + for (int i = firstPoint + 1; i < lastPoint; i++) + { + float distance = PerpendicularDistance + (points[firstPoint], points[workingLastPoint], points[i >= points.Count ? i - points.Count : i]); + if (distance > dmax) + { + dmax = distance; + index = i; + } + } + + if (index != -1) + { + //Add the largest point that exceeds the tolerance + DouglasPeuckerReductionReverse(points, firstPoint, index, tolerance, pointsToKeep); + pointsToKeep.Add(index >= points.Count ? index - points.Count : index); + DouglasPeuckerReductionReverse(points, index, lastPoint, tolerance, pointsToKeep); + } + } + + private static int FurthestPointFrom(List points, int index) + { + Vector2 v = points[index]; + float maxDistanceSq = 0; + int furthestIndex = -1; + + for (int i = 0; i < points.Count; i++) + { + if (i == index) + continue; + + float dist = (v - points[i]).sqrMagnitude; + if (dist > maxDistanceSq) + { + furthestIndex = i; + maxDistanceSq = dist; + } + } + return furthestIndex; + } + + private static float PerpendicularDistance(Vector2 a, Vector2 b, Vector2 p) + { + Vector2 ab = (b - a).normalized; + Vector2 ap = p - a; + + float dot = Vector2.Dot(ab, ap); + Vector2 proj = ap - dot * ab; + return proj.magnitude; + } + + public static void RemoveCollinearEdges(List points) + { + if (points.Count <= 3) + return; + + for (int i = 0, j = points.Count - 1, k = points.Count - 2; i < points.Count; k = j, j = i, i++) + { + while (SlopesEqual(points[k], points[j], points[j], points[i])) + { + points.RemoveAt(j); + } + } + } + + public static bool SlopesEqual(Vector2 a, Vector2 b, Vector2 x, Vector2 y) + { + return Vector2.Dot(b - a, y - x) == 0; + } + + public static bool ContainsPoint(IEnumerable path, Vector2 lastPointInPath, Vector2 point) + { + bool c = false; + foreach (var p in path) + { + if (((p.y > point.y) != (lastPointInPath.y > point.y)) && + (point.x < (lastPointInPath.x - p.x) * (point.y - p.y) / (lastPointInPath.y - p.y) + p.x)) + c = !c; + + lastPointInPath = p; + } + return c; + } + + /* + * angle in degrees + */ + public static Vector2[] RotateRectangle(Rect rect, float angle) + { + Vector2[] rotatedCorners = new Vector2[4]; + Vector2 center = rect.center; + Rect boundingRect = new Rect(center, Vector2.zero); + + float rotationInRad = Mathf.Deg2Rad * angle; + float angleCos = Mathf.Cos(rotationInRad); + float angleSin = Mathf.Sin(rotationInRad); + + rotatedCorners[0] = new Vector2( + ((rect.xMin - center.x) * angleCos) - ((rect.yMin - center.y) * angleSin), + ((rect.xMin - center.x) * angleSin) + ((rect.yMin - center.y) * angleCos)); + + rotatedCorners[1] = new Vector2( + ((rect.xMax - center.x) * angleCos) - ((rect.yMin - center.y) * angleSin), + ((rect.xMax - center.x) * angleSin) + ((rect.yMin - center.y) * angleCos)); + rotatedCorners[2] = -rotatedCorners[0]; + rotatedCorners[3] = -rotatedCorners[2]; + + for (int i = 0; i < 4; i++) + rotatedCorners[i] += center; + + return rotatedCorners; + } + + public static bool IsAngleBetweenAngles(float from, float to, float angle) + { + angle = angle < 0 ? angle + 360 : angle; + + to = to - from; + to = to < 0 ? to + 360 : to; + + angle = angle - from; + angle = angle < 0 ? angle + 360 : angle; + + return angle < to; + } + } +} diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/ExtendedGeometry.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/ExtendedGeometry.cs.meta new file mode 100644 index 0000000..177932e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/ExtendedGeometry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb94fa6d3d7bd714cb89e9e11f4e7c1f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PointChain.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PointChain.cs new file mode 100644 index 0000000..1cee401 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PointChain.cs @@ -0,0 +1,109 @@ +using System.Collections.Generic; +using System; +using UnityEngine; + +namespace PathBerserker2d +{ + internal class PointChain + { + public LinkedList points = new LinkedList(); + + bool closed; // is the first point linked with the last one + + public PointChain(Vector2 a, Vector2 b) + { + closed = false; + + Add(a, b); + } + + public void Add(Vector2 a, Vector2 b) + { + points.AddLast(a); + points.AddLast(b); + } + + public bool LinkSegment(Vector2 a, Vector2 b) + { + if (b == points.First.Value) + { + if (a == points.Last.Value) + closed = true; + else + points.AddFirst(a); + return true; + } + if (a == points.Last.Value) + { + if (b.Equals(points.First.Value)) + closed = true; + else + points.AddLast(b); + return true; + } + return false; + } + + public bool LinkPointChain(PointChain chain) + { + if (chain.points.First.Value == (points.Last.Value)) + { + chain.points.RemoveFirst(); + AppendRange(chain.points); + + return true; + } + if (chain.points.Last.Value == (points.First.Value)) + { + points.RemoveFirst(); + PrependRange(chain.points); + + return true; + } + return false; + } + + private void PrependRange(LinkedList list) + { + var node = list.Last; + do + { + this.points.AddFirst(node.Value); + } while ((node = node.Previous) != null); + } + + private void PrependRangeReverse(LinkedList list) + { + var node = list.First; + do + { + this.points.AddFirst(node.Value); + } while ((node = node.Next) != null); + } + + private void AppendRange(LinkedList list) + { + var node = list.First; + do + { + this.points.AddLast(node.Value); + } while ((node = node.Next) != null); + } + + private void AppendRangeReverse(LinkedList list) + { + var node = list.Last; + do + { + this.points.AddLast(node.Value); + } while ((node = node.Previous) != null); + } + + public LinkedListNode First { get { return points.First; } } + public LinkedListNode Last { get { return points.Last; } } + + public bool IsClosed() { return closed; } + public void Clear() { points.Clear(); } + public int GetNumPoints() { return points.Count; } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PointChain.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PointChain.cs.meta new file mode 100644 index 0000000..c3c70fd --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PointChain.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d85c6281176d71c4c99634fd33cc0bcb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PolygonClipper.cs b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PolygonClipper.cs new file mode 100644 index 0000000..f7edaa1 --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PolygonClipper.cs @@ -0,0 +1,684 @@ +using UnityEngine; +using System.Collections.Generic; +using Priority_Queue; +using System; + +namespace PathBerserker2d +{ + internal class PolygonClipper : IClipper + { + public enum EdgeType { NORMAL, NON_CONTRIBUTING, SAME_TRANSITION, DIFFERENT_TRANSITION }; + public enum PolygonType { SUBJECT, CLIPPING }; + + private SweepEventPriorityQueue eventQueue = new SweepEventPriorityQueue(50); + private SweepEvent[] sweepEventPool = new SweepEvent[100]; + private int usedSweepEventCount = 0; + private SweepRay sweepRay = new SweepRay(20); + + public PolygonClipper() + { + for (int i = 0; i < sweepEventPool.Length; i++) + sweepEventPool[i] = new SweepEvent(); + } + + public ResultType Compute(Polygon sp, Polygon cp, BoolOpType op, out List result, bool includeOpenPolygons = false) + { + result = new List(); + if (sp.IsEmpty || cp.IsEmpty) + { + return ResultType.NoOverlap; + } + + //Trivial case: The polygons cannot intersect each other. + if (!sp.BoundsOverlap(cp)) + { + return ResultType.NoOverlap; + } + + //Init the event queue with the polygon edges + usedSweepEventCount = 0; + eventQueue.Clear(); + InsertPolygon(sp, PolygonType.SUBJECT); + InsertPolygon(cp, PolygonType.CLIPPING); + + sweepRay.Clear(); + SweepEvent cEvent; + float minRightBounds = Mathf.Min(sp.XMax, cp.XMax) + 0.01f; + Connector connector = new Connector(); + bool intersectionHappened = false; + + while (eventQueue.Count != 0) + { + cEvent = eventQueue.Dequeue(); + if ((op == BoolOpType.INTERSECTION && cEvent.point.x > minRightBounds) || + (op == BoolOpType.DIFFERENCE && cEvent.point.x > sp.XMax)) + { + //Exit the loop. No more intersections are to be found. + // Create a polygon out of the pointchain + return EvaluateResult(connector, op, intersectionHappened, includeOpenPolygons, ref result); + } + if (op == BoolOpType.UNION && cEvent.point.x > minRightBounds) + { + if (!cEvent.Left) + { + AddEventToConnector(connector, cEvent); + } + while (eventQueue.Count != 0) + { + cEvent = eventQueue.Dequeue(); + if (!cEvent.Left) + { + AddEventToConnector(connector, cEvent); + } + } + return EvaluateResult(connector, op, intersectionHappened, includeOpenPolygons, ref result); + } + + if (cEvent.Left) + {// the line segment must be inserted into S + int pos = sweepRay.Add(cEvent); + SweepEvent prev = sweepRay.Previous(pos); + if (prev == null) + cEvent.Inside = cEvent.InOut = false; + else if (prev.EdgeType != EdgeType.NORMAL) + { + if (pos - 1 == 0) + { + cEvent.Inside = true; + cEvent.InOut = false; + } + else + { + SweepEvent sliEvent = sweepRay.Previous(pos - 1); + if (prev.PolyType == cEvent.PolyType) + { + cEvent.InOut = !prev.InOut; + cEvent.Inside = !sliEvent.InOut; + } + else + { + cEvent.InOut = !sliEvent.InOut; + cEvent.Inside = !prev.InOut; + } + } + } + else if (cEvent.PolyType == prev.PolyType) + { // previous line segment in S belongs to the same polygon that "cEvent" belongs to + cEvent.Inside = prev.Inside; + cEvent.InOut = !prev.InOut; + } + else + { // previous line segment in S belongs to a different polygon that "cEvent" belongs to + cEvent.Inside = !prev.InOut; + cEvent.InOut = prev.Inside; + } + + SweepEvent nextEvent = sweepRay.Next(pos); + if (nextEvent != null) + intersectionHappened |= HandlePossibleIntersection(cEvent, nextEvent); + if (prev != null) + intersectionHappened |= HandlePossibleIntersection(cEvent, prev); + } + else + {// the line segment must be removed from S + int pos = sweepRay.Find(cEvent.other); + switch (cEvent.EdgeType) + { + case EdgeType.NORMAL: + switch (op) + { + case BoolOpType.INTERSECTION: + if (cEvent.other.Inside) + AddEventToConnector(connector, cEvent); + break; + case BoolOpType.UNION: + if (!cEvent.other.Inside) + AddEventToConnector(connector, cEvent); + break; + case BoolOpType.DIFFERENCE: + if (cEvent.PolyType == PolygonType.SUBJECT && !cEvent.other.Inside) + AddEventToConnector(connector, cEvent); + break; + } + break; + case EdgeType.SAME_TRANSITION: + if (op == BoolOpType.INTERSECTION || op == BoolOpType.UNION) + AddEventToConnector(connector, cEvent); + break; + case EdgeType.DIFFERENT_TRANSITION: + if (op == BoolOpType.DIFFERENCE) + AddEventToConnector(connector, cEvent); + break; + } + // delete line segment associated to e from S and check for intersection between the neighbors of "e" in S + SweepEvent next = sweepRay.Next(pos), prev = sweepRay.Previous(pos); + sweepRay.RemoveAt(pos); + if (next != null && prev != null) + intersectionHappened |= HandlePossibleIntersection(prev, next); + } + } + + return EvaluateResult(connector, op, intersectionHappened, includeOpenPolygons, ref result); + } + + private void AddEventToConnector(Connector connector, SweepEvent ev) + { + if (ev.WrapWiseLeft) connector.Add(ev.point, ev.other.point); else connector.Add(ev.other.point, ev.point); + } + + private ResultType EvaluateResult(Connector connector, BoolOpType opType, bool intersectionHappened, bool includeOpenPaths, ref List result) + { + if (!intersectionHappened && (opType == BoolOpType.INTERSECTION || (opType == BoolOpType.UNION && !includeOpenPaths))) + return ResultType.NoOverlap; + + Contour[] contours = new Contour[connector.GetNumClosedPolygons() + (includeOpenPaths ? connector.GetNumOpenPolygons() : 0)]; + + int fill = 0; + foreach (var closedPoly in connector.closedPolygons) + { + contours[fill++] = new Contour(closedPoly.points, true); + } + if (includeOpenPaths) + { + foreach (var openPoly in connector.openPolygons) + { + contours[fill++] = new Contour(openPoly.points, false); + } + } + + if (opType == BoolOpType.UNION) + { + if (connector.GetNumClosedPolygons() == 0) + return ResultType.NoOverlap; + + List holes = new List(contours.Length - 1); + Contour hull = null; + double largestArea = 0; + + foreach (var contour in contours) + { + double area = contour.Area(); + + if (area > largestArea) + { + if (hull != null) + { + holes.Add(hull); + } + hull = contour; + largestArea = area; + } + } + result.Add(new Polygon(hull, holes)); + } + else if (opType == BoolOpType.INTERSECTION || opType == BoolOpType.DIFFERENCE) + { + for (int i = 0; i < contours.Length; i++) + { + if (contours[i].IsClosed) + { + for (int j = i + 1; j < contours.Length; j++) + { + foreach (var cp in contours[j]) + { + if (ExtendedGeometry.ContainsPoint(contours[i], contours[i].Verts[contours[i].VertexCount - 1], cp) + ) + { + goto label1; + } + } + } + } + result.Add(new Polygon(contours[i])); + label1: + continue; + } + } + return ResultType.Clipped; + } + + private void InsertPolygon(Polygon polygon, PolygonType polygonType) + { + int sweepIndex = RequestSweepEvents(polygon.TotalVertCount() * 2); + foreach (var contour in polygon) + { + Vector2 cVal; + Vector2 cPrevVal = contour[contour.IsClosed ? contour.VertexCount - 1 : 0]; + for (int iVert = contour.IsClosed ? 0 : 1; iVert < contour.VertexCount; iVert++) + { + cVal = contour[iVert]; + if (cVal.x < cPrevVal.x || (cVal.x == cPrevVal.x && cVal.y < cPrevVal.y)) + { + sweepEventPool[sweepIndex++].SetData(cVal, true, false, polygonType); + sweepEventPool[sweepIndex++].SetData(cPrevVal, false, true, polygonType); + } + else + { + sweepEventPool[sweepIndex++].SetData(cVal, false, false, polygonType); + sweepEventPool[sweepIndex++].SetData(cPrevVal, true, true, polygonType); + } + sweepEventPool[sweepIndex - 1].other = sweepEventPool[sweepIndex - 2]; + sweepEventPool[sweepIndex - 2].other = sweepEventPool[sweepIndex - 1]; + cPrevVal = cVal; + + eventQueue.Enqueue(sweepEventPool[sweepIndex - 1]); + eventQueue.Enqueue(sweepEventPool[sweepIndex - 2]); + } + } + } + + private int RequestSweepEvents(int count) + { + if (sweepEventPool.Length - usedSweepEventCount < count) + { + int i = sweepEventPool.Length; + System.Array.Resize(ref sweepEventPool, usedSweepEventCount + count + 10); + + for (; i < sweepEventPool.Length; i++) + { + sweepEventPool[i] = new SweepEvent(); + } + } + usedSweepEventCount += count; + return usedSweepEventCount - count; + } + + private int FindIntersection(SweepEvent se1, SweepEvent se2, out Vector2 pA, out Vector2 pB) + { + //Assign the resulting points some dummy values + pA = Vector2.zero; + pB = Vector2.zero; + Vector2 se1_Begin = (se1.Left) ? se1.point : se1.other.point; + Vector2 se1_End = (se1.Left) ? se1.other.point : se1.point; + Vector2 se2_Begin = (se2.Left) ? se2.point : se2.other.point; + Vector2 se2_End = (se2.Left) ? se2.other.point : se2.point; + + Vector2 d0 = se1_End - se1_Begin; + Vector2 d1 = se2_End - se2_Begin; + Vector2 e = se2_Begin - se1_Begin; + + const double sqrEpsilon = 0.000001; + const double epsilon = 0.00001; + + double kross = d0.x * d1.y - d0.y * d1.x; + double sqrKross = kross * kross; + double sqrLen0 = d0.sqrMagnitude; + double sqrLen1 = d1.sqrMagnitude; + + if (sqrKross > sqrEpsilon * sqrLen0 * sqrLen1) + { + // lines of the segments are not parallel + double s = (e.x * d1.y - e.y * d1.x) / kross; + if ((s < 0) || (s > 1)) + { + return 0; + } + double t = (e.x * d0.y - e.y * d0.x) / kross; + if ((t < 0) || (t > 1)) + { + return 0; + } + // intersection of lines is a point an each segment + pA = new Vector2((float)(se1_Begin.x + s * d0.x), (float)(se1_Begin.y + s * d0.y)); + if ((pA - se1_Begin).magnitude < epsilon) pA = se1_Begin; + if ((pA - se1_End).magnitude < epsilon) pA = se1_End; + if ((pA - se2_Begin).magnitude < epsilon) pA = se2_Begin; + if ((pA - se2_End).magnitude < epsilon) pA = se2_End; + return 1; + } + + // lines of the segments are parallel + double sqrLenE = e.sqrMagnitude; + kross = e.x * d0.y - e.y * d0.x; + sqrKross = kross * kross; + if (sqrKross > sqrEpsilon * sqrLen0 * sqrLenE) + { + // lines of the segment are different + return 0; + } + + // Lines of the segments are the same. Need to test for overlap of segments. + double s0 = (d0.x * e.x + d0.y * e.y) / sqrLen0; // so = Dot (D0, E) * sqrLen0 + double s1 = s0 + (d0.x * d1.x + d0.y * d1.y) / sqrLen0; // s1 = s0 + Dot (D0, D1) * sqrLen0 + double smin = Math.Min(s0, s1); + double smax = Math.Max(s0, s1); + double[] w = new double[2]; + int imax = FindIntersection(0.0, 1.0, smin, smax, w); + + if (imax > 0) + { + pA = new Vector2((float)(se1_Begin.x + w[0] * d0.x), (float)(se1_Begin.y + w[0] * d0.y)); + if ((pA - se1_Begin).magnitude < epsilon) pA = se1_Begin; + if ((pA - se1_End).magnitude < epsilon) pA = se1_End; + if ((pA - se2_Begin).magnitude < epsilon) pA = se2_Begin; + if ((pA - se2_End).magnitude < epsilon) pA = se2_End; + if (imax > 1) + { + pB = new Vector2((float)(se1_Begin.x + w[1] * d0.x), (float)(se1_Begin.y + w[1] * d0.y)); + } + } + return imax; + } + + private int FindIntersection(double u0, double u1, double v0, double v1, double[] w) + { + if ((u1 < v0) || (u0 > v1)) + return 0; + if (u1 > v0) + { + if (u0 < v1) + { + w[0] = (u0 < v0) ? v0 : u0; + w[1] = (u1 > v1) ? v1 : u1; + return 2; + } + else + { + // u0 == v1 + w[0] = u0; + return 1; + } + } + else + { + // u1 == v0 + w[0] = u1; + return 1; + } + } + + private bool HandlePossibleIntersection(SweepEvent e1, SweepEvent e2) + { + /* + Vector2 ip1, ip2; // intersection points + int nintersections; + + if ((nintersections = FindIntersection(e1, e2, out ip1, out ip2)) == 0) + return false; + + if ((nintersections == 1) && ( + (e1.point == e2.point) || + (e1.other.point == e2.other.point) || + (e1.other.point == e2.point) || + (e2.point == e2.other.point))) + return false; // the line segments intersect at an endpoint of both line segments + + if (nintersections == 2 && e1.PolyType == e2.PolyType) + return false; // the line segments overlap, but they belong to the same polygon + */ + + if (e1.PolyType == e2.PolyType) + return false; // the line segments belong to the same polygon + + Vector2 ip1, ip2; // intersection points + int nintersections; + + if ((nintersections = FindIntersection(e1, e2, out ip1, out ip2)) == 0) + return false; + + if ((nintersections == 1) && ( + (e1.point == e2.point) || + (e1.other.point == e2.other.point) || + (e1.other.point == e2.point) || + (e2.point == e2.other.point))) + return true; // the line segments intersect at an endpoint of both line segments + + + + // The line segments associated to e1 and e2 intersect + if (nintersections == 1) + { + if (e1.point != ip1 && e1.other.point != ip1) // if ip1 is not an endpoint of the line segment associated to e1 then divide "e1" + DivideEdge(e1, ip1); + if (e2.point != ip1 && e2.other.point != ip1) // if ip1 is not an endpoint of the line segment associated to e2 then divide "e2" + DivideEdge(e2, ip1); + return true; + } + + // The line segments overlap + List sortedEvents = new List(2); + if (e1.point == e2.point) + { + sortedEvents.Add(null); + } + else if (e1.CompareTo(e2) > 0) + { + sortedEvents.Add(e2); + sortedEvents.Add(e1); + } + else + { + sortedEvents.Add(e1); + sortedEvents.Add(e2); + } + + if (e1.other.point == e2.other.point) + { + sortedEvents.Add(null); + } + else if (e1.other.CompareTo(e2.other) > 0) + { + sortedEvents.Add(e2.other); + sortedEvents.Add(e1.other); + } + else + { + sortedEvents.Add(e1.other); + sortedEvents.Add(e2.other); + } + + if (sortedEvents.Count == 2) + { // are both line segments equal? + e1.EdgeType = e1.other.EdgeType = EdgeType.NON_CONTRIBUTING; + e2.EdgeType = e2.other.EdgeType = (e1.InOut == e2.InOut) ? EdgeType.SAME_TRANSITION : EdgeType.DIFFERENT_TRANSITION; + return true; + } + if (sortedEvents.Count == 3) + { // the line segments share an endpoint + sortedEvents[1].EdgeType = sortedEvents[1].other.EdgeType = EdgeType.NON_CONTRIBUTING; + if (sortedEvents[0] != null) // is the right endpoint the shared point? + sortedEvents[0].other.EdgeType = (e1.InOut == e2.InOut) ? EdgeType.SAME_TRANSITION : EdgeType.DIFFERENT_TRANSITION; + else // the shared point is the left endpoint + sortedEvents[2].other.EdgeType = (e1.InOut == e2.InOut) ? EdgeType.SAME_TRANSITION : EdgeType.DIFFERENT_TRANSITION; + DivideEdge(sortedEvents[0] != null ? sortedEvents[0] : sortedEvents[2].other, sortedEvents[1].point); + return true; + } + if (sortedEvents[0] != sortedEvents[3].other) + { // no line segment includes totally the other one + sortedEvents[1].EdgeType = EdgeType.NON_CONTRIBUTING; + sortedEvents[2].EdgeType = (e1.InOut == e2.InOut) ? EdgeType.SAME_TRANSITION : EdgeType.DIFFERENT_TRANSITION; + DivideEdge(sortedEvents[0], sortedEvents[1].point); + DivideEdge(sortedEvents[1], sortedEvents[2].point); + return true; + } + // one line segment includes the other one + sortedEvents[1].EdgeType = sortedEvents[1].other.EdgeType = EdgeType.NON_CONTRIBUTING; + DivideEdge(sortedEvents[0], sortedEvents[1].point); + sortedEvents[3].other.EdgeType = (e1.InOut == e2.InOut) ? EdgeType.SAME_TRANSITION : EdgeType.DIFFERENT_TRANSITION; + DivideEdge(sortedEvents[3].other, sortedEvents[2].point); + + return true; + } + + private void DivideEdge(SweepEvent e, Vector2 p) + { + int sweepIndex = RequestSweepEvents(2); + + // "Right event" of the "left line segment" resulting from dividing e (the line segment associated to e) + SweepEvent r = sweepEventPool[sweepIndex++]; + r.SetData(p, false, e.other.WrapWiseLeft, e.PolyType); + r.EdgeType = e.EdgeType; + r.other = e; + + // "Left event" of the "right line segment" resulting from dividing e (the line segment associated to e) + SweepEvent l = sweepEventPool[sweepIndex]; + l.SetData(p, true, e.WrapWiseLeft, e.PolyType); + l.EdgeType = e.other.EdgeType; + l.other = e.other; + + if (l.CompareTo(e.other) > 0) + { // avoid a rounding error. The left event would be processed after the right event + e.other.Left = true; + l.Left = false; + } + e.other.other = l; + e.other = r; + eventQueue.Enqueue(r); + eventQueue.Enqueue(l); + } + + public class SweepEvent + { + public int queueIndex; + public Vector2 point; // point associated with the event + public SweepEvent other; // Event associated to the other endpoint of the segment + + public bool Left { get { return (data & 1) == 1; } set { data = (byte)(value ? (data | 1) : (data & ~1)); } } // is the point the left endpoint of the segment (p, other.p)? + public bool InOut { get { return (data & (1 << 1)) == 1 << 1; } set { data = (byte)(value ? (data | (1 << 1)) : (data & ~(1 << 1))); } } // Does the segment (p, other.p) represent an inside-outside transition in the polygon for a vertical ray from (p.x, -infinite) that crosses the segment? + public bool Inside { get { return (data & (1 << 2)) == 1 << 2; } set { data = (byte)(value ? (data | (1 << 2)) : (data & ~(1 << 2))); } } // Only used in "left" events. Is the segment (p, other.p) inside the other polygon? + public bool WrapWiseLeft { get { return (data & (1 << 3)) == 1 << 3; } set { data = (byte)(value ? (data | (1 << 3)) : (data & ~(1 << 3))); } } + + public PolygonType PolyType + { + get { return (data & (1 << 4)) != 0 ? PolygonType.CLIPPING : PolygonType.SUBJECT; } + set { data = (byte)(value == PolygonType.CLIPPING ? (data | (1 << 4)) : (data & ~(1 << 4))); } + } // Polygon to which the associated segment belongs to + + public EdgeType EdgeType + { + get + { + return (EdgeType)(data >> 5); + } + set + { + data = (byte)(data & ~(3 << 5) | (((int)value) << 5)); + } + } + + private byte data; + + public void SetData(Vector2 point, bool left, bool wrapwiseLeft, PolygonType polyType) + { + this.data = 0; + this.point = point; + this.Left = left; + this.WrapWiseLeft = wrapwiseLeft; + this.PolyType = polyType; + } + + /** Is the line segment (p, other.p) below point x */ + public bool IsBelow(Vector2 o) { return (Left) ? ExtendedGeometry.SignedAreaDoubledTris(point, other.point, o) > 0 : ExtendedGeometry.SignedAreaDoubledTris(other.point, point, o) > 0; } + /** Is the line segment (p, other.p) above point x */ + public bool IsAbove(Vector2 o) { return !IsBelow(o); } + + public override string ToString() + { + return "SE (p = " + point + ", l = " + Left + ", pl = " + PolyType + ", inOut = " + ((Left) ? InOut : other.InOut) + ", inside = " + ((Left) ? Inside : other.Inside) + ", other.p = " + other.point + ")"; + } + + // Return true(1) means that e1 is placed at the event queue after e2, i.e,, e1 is processed by the algorithm after e2 + public int CompareTo(SweepEvent other) + { + if (point.x > other.point.x) + return 1; + if (point.x < other.point.x) + return -1; + if (point.y > other.point.y) + return 1; + if (point.y < other.point.y) + return -1; + if (Left != other.Left) + { + if (Left) + return 1; + return -1; + } + if (IsAbove(other.other.point)) + return 1; + return -1; + } + } + + class SweepRay + { + List s; + + public SweepRay(int capacity) + { + s = new List(capacity); + } + + public int Add(SweepEvent e) + { + for (int i = 0; i < s.Count; i++) + { + SweepEvent se = s[i]; + if (IsEventOneMoreImportant(se, e)) + continue; + s.Insert(i, e); + return i; + } + s.Add(e); + return s.Count - 1; + } + + public int Find(SweepEvent e) + { + return s.IndexOf(e); + } + + public void RemoveAt(int index) + { + s.RemoveAt(index); + } + + public SweepEvent Next(int index) + { + index++; + if (index < s.Count) + return s[index]; + return null; + } + + public SweepEvent Previous(int index) + { + index--; + if (index >= 0) + return s[index]; + return null; + } + + public override string ToString() + { + string result = "[" + s.Count + "] "; + foreach (SweepEvent se in s) + result += ((se.Left) ? "l" : "r") + se.ToString() + ", "; + return result; + } + + private bool IsEventOneMoreImportant(SweepEvent se1, SweepEvent se2) + { + if (se1 == se2) + return false; + if (ExtendedGeometry.SignedAreaDoubledTris(se1.point, se1.other.point, se2.point) != 0 || ExtendedGeometry.SignedAreaDoubledTris(se1.point, se1.other.point, se2.other.point) != 0) + { + if (se1.point == se2.point) + return se1.IsBelow(se2.other.point); + + if (se1.CompareTo(se2) > 0) + return se2.IsAbove(se1.point); + return se1.IsBelow(se2.point); + } + if (se1.point == se2.point) + return false; //Not sure here. Seems like lines exactly overlap each other. Didnt found the < operator though. + return se1.CompareTo(se2) > 0; + } + + internal void Clear() + { + s.Clear(); + } + } + } +} \ No newline at end of file diff --git a/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PolygonClipper.cs.meta b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PolygonClipper.cs.meta new file mode 100644 index 0000000..2896a1e --- /dev/null +++ b/Assets/PathBerserker2d/Scripts/PathBerserker2d/clipper_library/PolygonClipper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 237a9eb53886ee140b07c9b3e311e62e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Shaders.meta b/Assets/PathBerserker2d/Shaders.meta new file mode 100644 index 0000000..a7a181b --- /dev/null +++ b/Assets/PathBerserker2d/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 035cbf4ff2241d046806e6a8ee3bed35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Shaders/UnlitSegmented.shader b/Assets/PathBerserker2d/Shaders/UnlitSegmented.shader new file mode 100644 index 0000000..ebb7e8a --- /dev/null +++ b/Assets/PathBerserker2d/Shaders/UnlitSegmented.shader @@ -0,0 +1,57 @@ +Shader "Hidden/PB_UnlitSegmented" +{ + Properties + { + _SegmentSize ("Segment Size", Float) = 0.14 + _PauseSize ("Pause Size", Float) = 0.14 + _XOffset ("X Offset", Float) = 0 + _Color ("Color", Color) = (0, 0, 1, 1) + } + SubShader + { + Tags {"Queue" = "AlphaTest" "IgnoreProjector" = "True" "RenderType" = "TransparentCutout"} + LOD 100 + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + float4 worldPos : TEXCOORD1; + }; + + float _SegmentSize; + float _PauseSize; + float _XOffset; + half4 _Color; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.worldPos = mul(unity_ObjectToWorld, v.vertex); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + float seg = step(frac((i.worldPos.x - i.worldPos.y + _XOffset) / (_SegmentSize + _PauseSize)) * (_SegmentSize + _PauseSize), _SegmentSize); + half4 c = lerp(half4(0, 0, 0, 0), _Color, seg); + clip(c.a - 0.5); + return c; + } + ENDCG + } + } +} diff --git a/Assets/PathBerserker2d/Shaders/UnlitSegmented.shader.meta b/Assets/PathBerserker2d/Shaders/UnlitSegmented.shader.meta new file mode 100644 index 0000000..07f63a0 --- /dev/null +++ b/Assets/PathBerserker2d/Shaders/UnlitSegmented.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 02231c64b2135af49a06a478a9b08321 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Shaders/UnlitTransparentTinted.shader b/Assets/PathBerserker2d/Shaders/UnlitTransparentTinted.shader new file mode 100644 index 0000000..2b5fa31 --- /dev/null +++ b/Assets/PathBerserker2d/Shaders/UnlitTransparentTinted.shader @@ -0,0 +1,47 @@ +Shader "Hidden/PB_UnlitTransparentTinted" +{ + Properties + { + _Color("Color", Color) = (0, 0, 1, 0.5) + } + + SubShader + { + Tags { "Queue" = "AlphaTest" "RenderType" = "TransparentCutout" } + Blend SrcAlpha OneMinusSrcAlpha + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + }; + + half4 _Color; + + v2f vert(appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + return _Color; + } + ENDCG + } + } +} diff --git a/Assets/PathBerserker2d/Shaders/UnlitTransparentTinted.shader.meta b/Assets/PathBerserker2d/Shaders/UnlitTransparentTinted.shader.meta new file mode 100644 index 0000000..00a13eb --- /dev/null +++ b/Assets/PathBerserker2d/Shaders/UnlitTransparentTinted.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d785db0244148c0498e9263bae01787c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Shaders/UnlitVertexColor.shader b/Assets/PathBerserker2d/Shaders/UnlitVertexColor.shader new file mode 100644 index 0000000..5fe751d --- /dev/null +++ b/Assets/PathBerserker2d/Shaders/UnlitVertexColor.shader @@ -0,0 +1,42 @@ +Shader "Hidden/PB_UnlitVertexColor" +{ + SubShader + { + Tags { "RenderType"="Opaque" } + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.color = v.color; + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + return i.color; + } + ENDCG + } + } +} diff --git a/Assets/PathBerserker2d/Shaders/UnlitVertexColor.shader.meta b/Assets/PathBerserker2d/Shaders/UnlitVertexColor.shader.meta new file mode 100644 index 0000000..7f20ad6 --- /dev/null +++ b/Assets/PathBerserker2d/Shaders/UnlitVertexColor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 61c630180c122d44d861fe528a32f3e5 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PathBerserker2d/Shaders/UnlitVertexColorTransparent.shader b/Assets/PathBerserker2d/Shaders/UnlitVertexColorTransparent.shader new file mode 100644 index 0000000..5b28bbb --- /dev/null +++ b/Assets/PathBerserker2d/Shaders/UnlitVertexColorTransparent.shader @@ -0,0 +1,43 @@ +Shader "Hidden/PB_UnlitVertexColorTransparent" +{ + SubShader + { + Tags { "Queue" = "Transparent" "RenderType" = "Transparent" } + Blend SrcAlpha OneMinusSrcAlpha + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float4 color : COLOR; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + float4 color : COLOR; + }; + + v2f vert(appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.color = v.color; + return o; + } + + fixed4 frag(v2f i) : SV_Target + { + return i.color; + } + ENDCG + } + } +} diff --git a/Assets/PathBerserker2d/Shaders/UnlitVertexColorTransparent.shader.meta b/Assets/PathBerserker2d/Shaders/UnlitVertexColorTransparent.shader.meta new file mode 100644 index 0000000..50f10c2 --- /dev/null +++ b/Assets/PathBerserker2d/Shaders/UnlitVertexColorTransparent.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 94d50acc24004424499c21186a02bb71 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..f68b306 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d04c91966c591ee4d8e7f3ec34b5aea0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant.meta b/Assets/Plugins/Demigiant.meta new file mode 100644 index 0000000..cfb2591 --- /dev/null +++ b/Assets/Plugins/Demigiant.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 9f80792dcd2829e41b1f075e7245ca5b +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- VisualScripting +- VisualEditor +- iTween +- Ease +- Easing +- Shake +- Punch +- 2DToolkit +- TextMeshPro +- Text +- LeanTween +- DFTween +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween.meta b/Assets/Plugins/Demigiant/DOTween.meta new file mode 100644 index 0000000..cbebc39 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: a50bd9a009c8dfc4ebd88cc8101225a7 +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- iTween +- DFTween +- LeanTween +- Ease +- Easing +- Shake +- Punch +- 2DToolkit +- TextMeshPro +- Text +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.XML b/Assets/Plugins/Demigiant/DOTween/DOTween.XML new file mode 100644 index 0000000..f56085a --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.XML @@ -0,0 +1,3107 @@ + + + + DOTween + + + + + Types of autoPlay behaviours + + + + No tween is automatically played + + + Only Sequences are automatically played + + + Only Tweeners are automatically played + + + All tweens are automatically played + + + + What axis to constrain in case of Vector tweens + + + + Called the first time the tween is set in a playing state, after any eventual delay + + + + Used in place of System.Func, which is not available in mscorlib. + + + + + Used in place of System.Action. + + + + + Public so it can be used by lose scripts related to DOTween (like DOTweenAnimation) + + + + + Used to separate DOTween class from the MonoBehaviour instance (in order to use static constructors on DOTween). + Contains all instance-based methods + + + + Used internally inside Unity Editor, as a trick to update DOTween's inspector at every frame + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + This class contains a C# port of the easing equations created by Robert Penner (http://robertpenner.com/easing). + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected. + Use this method if you don't care about , otherwise use + + + + + USE THIS FOR CUSTOM PLUGINS when you want to be able to use . + Returns a value that is from 0 to 1 if is not incremental, otherwise from 0 to (1 * completed loops) + + + + + Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected + + + + + Used to interpret AnimationCurves as eases. + Public so it can be used by external ease factories + + + + + Behaviour in case a tween nested inside a Sequence fails and is captured by safe mode + + + + If the Sequence contains other elements, kill the failed tween but preserve the rest + + + Kill the whole Sequence + + + + Log types thrown by errors captured and prevented by safe mode + + + + No logs. NOT RECOMMENDED + + + Throw a normal log + + + Throw a warning log (default) + + + Throw an error log + + + + Additional notices passed to plugins when updating. + Public so it can be used by custom plugins. Internally, only PathPlugin uses it + + + + + None + + + + + Lets the plugin know that we restarted or rewinded + + + + + OnRewind callback behaviour (can only be set via DOTween's Utility Panel) + + + + + When calling Rewind or PlayBackwards/SmoothRewind, OnRewind callbacks will be fired only if the tween isn't already rewinded + + + + + When calling Rewind, OnRewind callbacks will always be fired, even if the tween is already rewinded. + When calling PlayBackwards/SmoothRewind instead, OnRewind callbacks will be fired only if the tween isn't already rewinded + + + + + When calling Rewind or PlayBackwards/SmoothRewind, OnRewind callbacks will always be fired, even if the tween is already rewinded + + + + + Public only so custom shortcuts can access some of these methods + + + + + INTERNAL: used by DO shortcuts and Modules to set special startup mode + + + + + INTERNAL: used by DO shortcuts and Modules to set the tween as blendable + + + + + INTERNAL: used by DO shortcuts and Modules to prevent a tween from using a From setup even if passed + + + + + Used to dispatch commands that need to be captured externally, usually by Modules + + + + + Various utils + + + + + Returns a Vector3 with z = 0 + + + + + Returns the 2D angle between two vectors + + + + + Returns a point on a circle with the given center and radius, + using Unity's circle coordinates (0° points up and increases clockwise) + + + + + Uses approximate equality on each axis instead of Unity's Vector3 equality, + because the latter fails (in some cases) when assigning a Vector3 to a transform.position and then checking it. + + + + + Looks for the type within all possible project assembly names + + + + NO-GC METHOD: changes the start value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + If bigger than 0 applies it as the new tween duration + + + NO-GC METHOD: changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + NO-GC METHOD: changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If bigger than 0 applies it as the new tween duration + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + NO-GC METHOD: changes the start and end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + The new end value + If bigger than 0 applies it as the new tween duration + + + + Struct that stores two colors (used for LineRenderer tweens) + + + + + Used for tween callbacks + + + + + Used for tween callbacks + + + + + Used for custom and animationCurve-based ease functions. Must return a value between 0 and 1. + + + + + Straight Quaternion plugin. Instead of using Vector3 values accepts Quaternion values directly. + Beware: doesn't work with LoopType.Incremental (neither directly nor if inside a LoopType.Incremental Sequence). + To use it, call DOTween.To with the plugin parameter overload, passing it PureQuaternionPlugin.Plug() as first parameter + (do not use any of the other public PureQuaternionPlugin methods): + DOTween.To(PureQuaternionPlugin.Plug(), ()=> myQuaternionProperty, x=> myQuaternionProperty = x, myQuaternionEndValue, duration); + + + + + Plug this plugin inside a DOTween.To call. + Example: + DOTween.To(PureQuaternionPlugin.Plug(), ()=> myQuaternionProperty, x=> myQuaternionProperty = x, myQuaternionEndValue, duration); + + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + + Extra non-tweening-related curve methods + + + + + Cubic bezier curve methods + + + + + Calculates a point along the given Cubic Bezier segment-curve. + + Segment start point + Start point's control point/handle + Segment end point + End point's control point/handle + 0-1 percentage along which to retrieve point + + + + Returns an array containing a series of points along the given Cubic Bezier segment-curve. + + Start point + Start point's control point/handle + End point + End point's control point/handle + Cloud resolution (min: 2) + + + + Calculates a series of points along the given Cubic Bezier segment-curve and adds them to the given list. + + Start point + Start point's control point/handle + End point + End point's control point/handle + Cloud resolution (min: 2) + + + + Main DOTween class. Contains static methods to create and control tweens in a generic way + + + + DOTween's version + + + If TRUE (default) makes tweens slightly slower but safer, automatically taking care of a series of things + (like targets becoming null while a tween is playing). + Default: TRUE + + + Log type when safe mode reports capturing an error and preventing it + + + Behaviour in case a tween nested inside a Sequence fails (and is caught by safe mode). + Default: NestedTweenFailureBehaviour.TryToPreserveSequence + + + If TRUE you will get a DOTween report when exiting play mode (only in the Editor). + Useful to know how many max Tweeners and Sequences you reached and optimize your final project accordingly. + Beware, this will slightly slow down your tweens while inside Unity Editor. + Default: FALSE + + + Global DOTween global timeScale (default: 1). + The final timeScale of a non-timeScaleIndependent tween is: + Unity's Time.timeScale * DOTween.timeScale * tween.timeScale + while the final timeScale of a timeScaleIndependent tween is: + DOTween.unscaledTimeScale * DOTween.timeScale * tween.timeScale + + + DOTween timeScale applied only to timeScaleIndependent tweens (default: 1). + The final timeScale of a timeScaleIndependent tween is: + DOTween.unscaledTimeScale * DOTween.timeScale * tween.timeScale + + + If TRUE, DOTween will use Time.smoothDeltaTime instead of Time.deltaTime for UpdateType.Normal and UpdateType.Late tweens + (unless they're set as timeScaleIndependent, in which case a value between the last timestep + and will be used instead). + Setting this to TRUE will lead to smoother animations. + Default: FALSE + + + If is TRUE, this indicates the max timeStep that an independent update call can last. + Setting this to TRUE will lead to smoother animations. + Default: FALSE + + + DOTween's log behaviour. + Default: LogBehaviour.ErrorsOnly + + + Used to intercept DOTween's logs. If this method isn't NULL, DOTween will call it before writing a log via Unity's own Debug log methods. + Return TRUE if you want DOTween to proceed with the log, FALSE otherwise. + This method must return a bool and accept two parameters: + - LogType: the type of Unity log that DOTween is trying to log + - object: the log message that DOTween wants to log + + + If TRUE draws path gizmos in Unity Editor (if the gizmos button is active). + Deactivate this if you want to avoid gizmos overhead while in Unity Editor + + + Gets/sets the max Tweeners capacity (automatically increased by DOTween when necessary). + You can also set both Tweeners and Sequences capacity via the static method + + + Gets/sets the max Sequences capacity (automatically increased by DOTween when necessary). + You can also set both Tweeners and Sequences capacity via the static method + + + If TRUE activates various debug options + + + Stores the target id so it can be used to give more info in case of safeMode error capturing. + Only active if both debugMode and useSafeMode are TRUE + + + Default updateType for new tweens. + Default: UpdateType.Normal + + + Sets whether Unity's timeScale should be taken into account by default or not. + Default: false + + + Default autoPlay behaviour for new tweens. + Default: AutoPlay.All + + + Default autoKillOnComplete behaviour for new tweens. + Default: TRUE + + + Default loopType applied to all new tweens. + Default: LoopType.Restart + + + If TRUE all newly created tweens are set as recyclable, otherwise not. + Default: FALSE + + + Default ease applied to all new Tweeners (not to Sequences which always have Ease.Linear as default). + Default: Ease.InOutQuad + + + Default overshoot/amplitude used for eases + Default: 1.70158f + + + Default period used for eases + Default: 0 + + + Used internally. Assigned/removed by DOTweenComponent.Create/DestroyInstance + + + + Must be called once, before the first ever DOTween call/reference, + otherwise it will be called automatically and will use default options. + Calling it a second time won't have any effect. + You can chain SetCapacity to this method, to directly set the max starting size of Tweeners and Sequences: + DOTween.Init(false, false, LogBehaviour.Default).SetCapacity(100, 20); + + If TRUE all new tweens will be set for recycling, meaning that when killed, + instead of being destroyed, they will be put in a pool and reused instead of creating new tweens. This option allows you to avoid + GC allocations by reusing tweens, but you will have to take care of tween references, since they might result active + even if they were killed (since they might have been respawned and are now being used for other tweens). + If you want to automatically set your tween references to NULL when a tween is killed + you can use the OnKill callback like this: + .OnKill(()=> myTweenReference = null) + You can change this setting at any time by changing the static property, + or you can set the recycling behaviour for each tween separately, using: + SetRecyclable(bool recyclable) + Default: FALSE + If TRUE makes tweens slightly slower but safer, automatically taking care of a series of things + (like targets becoming null while a tween is playing). + You can change this setting at any time by changing the static property. + Default: FALSE + Type of logging to use. + You can change this setting at any time by changing the static property. + Default: ErrorsOnly + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + Kills all tweens, clears all cached tween pools and plugins and resets the max Tweeners/Sequences capacities to the default values. + + If TRUE also destroys DOTween's gameObject and resets its initializiation, default settings and everything else + (so that next time you use it it will need to be re-initialized) + + + + Clears all cached tween pools. + + + + + Checks all active tweens to find and remove eventually invalid ones (usually because their targets became NULL) + and returns the total number of invalid tweens found and removed. + IMPORTANT: this will cause an error on UWP platform, so don't use it there + BEWARE: this is a slightly expensive operation so use it with care + + + + + Updates all tweens that are set to . + + Manual deltaTime + Unscaled delta time (used with tweens set as timeScaleIndependent) + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using a custom plugin + The plugin to use. Each custom plugin implements a static Get() method + you'll need to call to assign the correct plugin in the correct way, like this: + CustomPlugin.Get() + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens only one axis of a Vector3 to the given value using default plugins. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + The axis to tween + + + Tweens only the alpha of a Color to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a virtual property from the given start to the given end value + and implements a setter that allows to use that value with an external method or a lambda + Example: + To(MyMethod, 0, 12, 0.5f); + Where MyMethod is a function that accepts a float parameter (which will be the result of the virtual tween) + The action to perform with the tweened value + The value to start from + The end value to reach + The duration of the virtual tween + + + + Punches a Vector3 towards the given direction and then back to the starting one + as if it was connected to the starting position via an elastic. + This tween type generates some GC allocations at startup + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The direction and strength of the punch + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + 1 creates a full oscillation between the direction and the opposite decaying direction, + while 0 oscillates only between the starting position and the decaying direction + + + Shakes a Vector3 with the given values. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction and behave like a random punch. + If TRUE only shakes on the X Y axis (looks better with things like cameras). + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Vector3 with the given values. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction and behave like a random punch. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a property or field to the given values using default plugins. + Ease is applied between each segment and not as a whole. + This tween type generates some GC allocations at startup + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end values to reach for each segment. This array must have the same length as durations + The duration of each segment. This array must have the same length as endValues + + + + Returns a new to be used for tween groups. + Mind that Sequences don't have a target applied automatically like Tweener creation shortcuts, + so if you want to be able to kill this Sequence when calling DOTween.Kill(target) you'll have to add + the target manually; you can do that directly by using the overload instead of this one + + + + + Returns a new to be used for tween groups, and allows to set a target + (because Sequences don't have their target set automatically like Tweener creation shortcuts). + That way killing/controlling tweens by target will apply to this Sequence too. + + The target of the Sequence. Relevant only for static target-based methods like DOTween.Kill(target), + useless otherwise + + + Completes all tweens and returns the number of actual tweens completed + (meaning tweens that don't have infinite loops and were not already complete) + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Completes all tweens with the given ID or target and returns the number of actual tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + For Sequences only: if TRUE internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Flips all tweens (changing their direction to forward if it was backwards and viceversa), + then returns the number of actual tweens flipped + + + Flips the tweens with the given ID or target (changing their direction to forward if it was backwards and viceversa), + then returns the number of actual tweens flipped + + + Sends all tweens to the given position (calculating also eventual loop cycles) and returns the actual tweens involved + + + Sends all tweens with the given ID or target to the given position (calculating also eventual loop cycles) + and returns the actual tweens involved + + + Kills all tweens and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Kills all tweens and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + Eventual IDs or targets to exclude from the killing + + + Kills all tweens with the given ID or target and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Kills all tweens with the given target and the given ID, and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Pauses all tweens and returns the number of actual tweens paused + + + Pauses all tweens with the given ID or target and returns the number of actual tweens paused + (meaning the tweens that were actually playing and have been paused) + + + Plays all tweens and returns the number of actual tweens played + (meaning tweens that were not already playing or complete) + + + Plays all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + + + Plays all tweens with the given target and the given ID, and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + + + Plays backwards all tweens and returns the number of actual tweens played + (meaning tweens that were not already started, playing backwards or rewinded) + + + Plays backwards all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Plays backwards all tweens with the given target and ID and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Plays forward all tweens and returns the number of actual tweens played + (meaning tweens that were not already playing forward or complete) + + + Plays forward all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already playing forward or complete) + + + Plays forward all tweens with the given target and ID and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Restarts all tweens, then returns the number of actual tweens restarted + + + Restarts all tweens with the given ID or target, then returns the number of actual tweens restarted + If TRUE includes the eventual tweens delays, otherwise skips them + If >= 0 changes the startup delay of all involved tweens to this value, otherwise doesn't touch it + + + Restarts all tweens with the given target and the given ID, and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + If TRUE includes the eventual tweens delays, otherwise skips them + If >= 0 changes the startup delay of all involved tweens to this value, otherwise doesn't touch it + + + Rewinds and pauses all tweens, then returns the number of actual tweens rewinded + (meaning tweens that were not already rewinded) + + + Rewinds and pauses all tweens with the given ID or target, then returns the number of actual tweens rewinded + (meaning the tweens that were not already rewinded) + + + Smoothly rewinds all tweens (delays excluded), then returns the number of actual tweens rewinding/rewinded + (meaning tweens that were not already rewinded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Smoothly rewinds all tweens (delays excluded) with the given ID or target, then returns the number of actual tweens rewinding/rewinded + (meaning the tweens that were not already rewinded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Toggles the play state of all tweens and returns the number of actual tweens toggled + (meaning tweens that could be played or paused, depending on the toggle state) + + + Toggles the play state of all tweens with the given ID or target and returns the number of actual tweens toggled + (meaning the tweens that could be played or paused, depending on the toggle state) + + + + Returns TRUE if a tween with the given ID or target is active. + You can also use this to know if a shortcut tween is active for a given target. + Example: + transform.DOMoveX(45, 1); // transform is automatically added as the tween target + DOTween.IsTweening(transform); // Returns true + + The target or ID to look for + If FALSE (default) returns TRUE as long as a tween for the given target/ID is active, + otherwise also requires it to be playing + + + + Returns the total number of active tweens (so both Tweeners and Sequences). + A tween is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active Tweeners. + A Tweener is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active Sequences. + A Sequence is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active and playing tweens. + A tween is considered as playing even if its delay is actually playing + + + + + Returns a the total number of active tweens with the given id. + + If TRUE returns only the tweens with the given ID that are currently playing + + + + Returns a list of all active tweens in a playing state. + Returns NULL if there are no active playing tweens. + Beware: each time you call this method a new list is generated, so use it for debug only + + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens in a paused state. + Returns NULL if there are no active paused tweens. + Beware: each time you call this method a new list is generated, so use it for debug only + + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens with the given id. + Returns NULL if there are no active tweens with the given id. + Beware: each time you call this method a new list is generated + + If TRUE returns only the tweens with the given ID that are currently playing + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens with the given target. + Returns NULL if there are no active tweens with the given target. + Beware: each time you call this method a new list is generated + If TRUE returns only the tweens with the given target that are currently playing + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + + Creates virtual tweens that can be used to change other elements via their OnUpdate calls + + + + + Tweens a virtual float. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type float, called at each update + + + + Tweens a virtual int. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type int, called at each update + + + + Tweens a virtual Vector2. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Vector3, called at each update + + + + Tweens a virtual Vector3. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Vector3, called at each update + + + + Tweens a virtual Color. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Color, called at each update + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual overshoot to use with Back ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual amplitude to use with Elastic easeType + Eventual period to use with Elastic easeType + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The AnimationCurve to use for ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual overshoot to use with Back ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual amplitude to use with Elastic easeType + Eventual period to use with Elastic easeType + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The AnimationCurve to use for ease + + + Fires the given callback after the given time. + Callback delay + Callback to fire when the delay has expired + If TRUE (default) ignores Unity's timeScale + + + + Don't assign this! It's assigned automatically when creating 0 duration tweens + + + + + Don't assign this! It's assigned automatically when setting the ease to an AnimationCurve or to a custom ease function + + + + + Allows to wrap ease method in special ways, adding extra features + + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + Ease type + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + AnimationCurve to use for the ease + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + Custom ease function to use + + + + Used to allow method chaining with DOTween.Init + + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + Behaviour that can be assigned when chaining a SetLink to a tween + + + + Pauses the tween when the link target is disabled + + + Pauses the tween when the link target is disabled, plays it when it's enabled + + + Pauses the tween when the link target is disabled, restarts it when it's enabled + + + Plays the tween when the link target is enabled + + + Restarts the tween when the link target is enabled + + + Kills the tween when the link target is disabled + + + Kills the tween when the link target is destroyed (becomes NULL). This is always active even if another behaviour is chosen + + + Completes the tween when the link target is disabled + + + Completes and kills the tween when the link target is disabled + + + Rewinds the tween (delay excluded) when the link target is disabled + + + Rewinds and kills the tween when the link target is disabled + + + + Path mode (used to determine correct LookAt orientation) + + + + Ignores the path mode (and thus LookAt behaviour) + + + Regular 3D path + + + 2D top-down path + + + 2D side-scroller path + + + + Type of path to use with DOPath tweens + + + + Linear, composed of straight segments between each waypoint + + + Curved path (which uses Catmull-Rom curves) + + + EXPERIMENTAL: Curved path (which uses Cubic Bezier curves, where each point requires two extra control points) + + + + Tweens a Vector2 along a circle. + EndValue represents the center of the circle, start and end value degrees are inside options + ChangeValue x is changeValue°, y is unused + + + + + Path control point + + + + + Path waypoints (modified by PathPlugin when setting relative end/change value or by CubicBezierDecoder) and by DOTweenPathInspector + + + + + Minimum input points necessary to create the path (doesn't correspond to actual waypoints required) + + + + + Gets the point on the path at the given percentage (0 to 1) + + The percentage (0 to 1) at which to get the point + If TRUE constant speed is taken into account, otherwise not + + + + Base interface for all tween plugins options + + + + Resets the plugin + + + + This plugin generates some GC allocations at startup + + + + + Path plugin works exclusively with Transforms + + + + + Rotation mode used with DORotate methods + + + + + Fastest way that never rotates beyond 360° + + + + + Fastest way that rotates beyond 360° + + + + + Adds the given rotation to the transform using world axis and an advanced precision mode + (like when using transform.Rotate(Space.World)). + In this mode the end value is is always considered relative + + + + + Adds the given rotation to the transform's local axis + (like when rotating an object with the "local" switch enabled in Unity's editor or using transform.Rotate(Space.Self)). + In this mode the end value is is always considered relative + + + + + Type of scramble to apply to string tweens + + + + + No scrambling of characters + + + + + A-Z + a-z + 0-9 characters + + + + + A-Z characters + + + + + a-z characters + + + + + 0-9 characters + + + + + Custom characters + + + + + Type of randomness to apply to a shake tween + + + + Default, full randomness + + + Creates a more balanced randomness that looks more harmonic + + + + Methods that extend Tween objects and allow to control or get data from them + + + + Completes the tween + + + Completes the tween + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Optional: indicates that the tween creation has ended, to be used (optionally) as the last element of tween chaining creation.
+ This method won't do anything except in case of 0-duration tweens, + where it will complete them immediately instead of waiting for the next internal update routine + (unless they're nested in a Sequence, in which case the Sequence will still be the one in control and this method will be ignored)
+
+ + Flips the direction of this tween (backwards if it was going forward or viceversa) + + + Forces the tween to initialize its settings immediately + + + Send the tween to the given position in time + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + Send the tween to the given position in time while also executing any callback between the previous time position and the new one + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + Kills the tween + If TRUE completes the tween before killing it + + + + Forces this tween to update manually, regardless of the set via SetUpdate. + Note that the tween will still be subject to normal tween rules, so if for example it's paused this method will do nothing. + Also note that if you only want to update this tween instance manually you'll have to set it to anyway, + so that it's not updated automatically. + + Manual deltaTime + Unscaled delta time (used with tweens set as timeScaleIndependent) + + + Pauses the tween + + + Plays the tween + + + Sets the tween in a backwards direction and plays it + + + Sets the tween in a forward direction and plays it + + + Restarts the tween from the beginning + Ignored in case of Sequences. If TRUE includes the eventual tween delay, otherwise skips it + Ignored in case of Sequences. If >= 0 changes the startup delay to this value, otherwise doesn't touch it + + + Rewinds and pauses the tween + Ignored in case of Sequences. If TRUE includes the eventual tween delay, otherwise skips it + + + Smoothly rewinds the tween (delays excluded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + If called on a tween who is still waiting for its delay to happen, it will simply set the delay to 0 and pause the tween. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Plays the tween if it was paused, pauses it if it was playing + + + Send a path tween to the given waypoint. + Has no effect if this is not a path tween. + BEWARE, this is a special utility method: + it works only with Linear eases. Also, the lookAt direction might be wrong after calling this and might need to be set manually + (because it relies on a smooth path movement and doesn't work well with jumps that encompass dramatic direction changes) + Waypoint index to reach + (if higher than the max waypoint index the tween will simply go to the last one) + If TRUE will play the tween after reaching the given waypoint, otherwise it will pause it + + + + Creates a yield instruction that waits until the tween is killed or complete. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForCompletion(); + + + + + Creates a yield instruction that waits until the tween is killed or rewinded. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForRewind(); + + + + + Creates a yield instruction that waits until the tween is killed. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForKill(); + + + + + Creates a yield instruction that waits until the tween is killed or has gone through the given amount of loops. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForElapsedLoops(2); + + Elapsed loops to wait for + + + + Creates a yield instruction that waits until the tween is killed or has reached the given position (loops included, delays excluded). + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForPosition(2.5f); + + Position (loops included, delays excluded) to wait for + + + + Creates a yield instruction that waits until the tween is killed or started + (meaning when the tween is set in a playing state the first time, after any eventual delay). + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForStart(); + + + + Returns the total number of loops completed by this tween + + + Returns the eventual delay set for this tween + + + Returns the eventual elapsed delay set for this tween + + + Returns the duration of this tween (delays excluded). + NOTE: when using settings like SpeedBased, the duration will be recalculated when the tween starts + If TRUE returns the full duration loops included, + otherwise the duration of a single loop cycle + + + Returns the elapsed time for this tween (delays exluded) + If TRUE returns the elapsed time since startup loops included, + otherwise the elapsed time within the current loop cycle + + + Returns the elapsed percentage (0 to 1) of this tween (delays exluded) + If TRUE returns the elapsed percentage since startup loops included, + otherwise the elapsed percentage within the current loop cycle + + + Returns the elapsed percentage (0 to 1) of this tween (delays exluded), + based on a single loop, and calculating eventual backwards Yoyo loops as 1 to 0 instead of 0 to 1 + + + Returns FALSE if this tween has been killed or is NULL, TRUE otherwise. + BEWARE: if this tween is recyclable it might have been spawned again for another use and thus return TRUE anyway. + When working with recyclable tweens you should take care to know when a tween has been killed and manually set your references to NULL. + If you want to be sure your references are set to NULL when a tween is killed you can use the OnKill callback like this: + .OnKill(()=> myTweenReference = null) + + + Returns TRUE if this tween was reversed and is set to go backwards + + + NOTE: To check if a tween was simply set to go backwards see . + Returns TRUE if this tween is going backwards for any of these reasons: + - The tween was reversed and is going backwards on a straight loop + - The tween was reversed and is going backwards on an odd Yoyo loop + - The tween is going forward but on an even Yoyo loop + IMPORTANT: if used inside a tween's callback, this will return a result concerning the exact frame when it's asked, + so for example in a callback at the end of a Yoyo loop step this method will never return FALSE + because the frame will never end exactly there and the tween will already be going backwards when the callback is fired + + + Returns TRUE if the tween is complete + (silently fails and returns FALSE if the tween has been killed) + + + Returns TRUE if this tween was set to be timeScale independent via the tween.SetUpdate method + + + Returns TRUE if this tween has been initialized + + + Returns TRUE if this tween is playing + + + Returns the total number of loops set for this tween + (returns -1 if the loops are infinite) + + + + Returns a point on a path based on the given path percentage. + Returns Vector3.zero if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + Percentage of the path (0 to 1) on which to get the point + + + + Returns an array of points that can be used to draw the path. + Note that this method generates allocations, because it creates a new array. + Returns NULL if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + How many points to create for each path segment (waypoint to waypoint). + Only used in case of non-Linear paths + + + + Returns the length of a path. + Returns -1 if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + + + + Types of loop + + + + Each loop cycle restarts from the beginning + + + The tween moves forward and backwards at alternate cycles + + + Continuously increments the tween at the end of each loop cycle (A to B, B to B+(A-B), and so on), thus always moving "onward". + In case of String tweens works only if the tween is set as relative + + + + Controls other tweens as a group + + + + + Methods that extend known Unity objects and allow to directly create and control tweens from their instances + + + + Tweens a Camera's aspect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's backgroundColor to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's farClipPlane to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's fieldOfView to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's nearClipPlane to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's orthographicSize to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's pixelRect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's rect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Shakes a Camera's localPosition along its relative X Y axes with the given values. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localPosition along its relative X Y axes with the given values. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localRotation. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localRotation. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a Light's color to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's intensity to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's shadowStrength to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a LineRenderer's color to the given value. + Also stores the LineRenderer as the tween's target so it can be used for filtered operations. + Note that this method requires to also insert the start colors for the tween, + since LineRenderers have no way to get them. + The start value to tween from + The end value to reachThe duration of the tween + + + Tweens a Material's color to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Material's named color property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's named color property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's alpha color to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Material's alpha color to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's alpha color with the given ID to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's named float property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named float property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's texture offset to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The duration of the tween + + + Tweens a Material's named texture offset property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's texture scale to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The duration of the tween + + + Tweens a Material's named texture scale property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named Vector property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named Vector property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a TrailRenderer's startWidth/endWidth to the given value. + Also stores the TrailRenderer as the tween's target so it can be used for filtered operations + The end startWidth to reachThe end endWidth to reach + The duration of the tween + + + Tweens a TrailRenderer's time to the given value. + Also stores the TrailRenderer as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's X position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Y position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Z position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's X localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Y localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Z localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's rotation to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + Rotation mode + + + Tweens a Transform's rotation to the given value using pure quaternion values. + Also stores the transform as the tween's target so it can be used for filtered operations. + PLEASE NOTE: DORotate, which takes Vector3 values, is the preferred rotation method. + This method was implemented for very special cases, and doesn't support LoopType.Incremental loops + (neither for itself nor if placed inside a LoopType.Incremental Sequence) + + The end value to reachThe duration of the tween + + + Tweens a Transform's localRotation to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + Rotation mode + + + Tweens a Transform's rotation to the given value using pure quaternion values. + Also stores the transform as the tween's target so it can be used for filtered operations. + PLEASE NOTE: DOLocalRotate, which takes Vector3 values, is the preferred rotation method. + This method was implemented for very special cases, and doesn't support LoopType.Incremental loops + (neither for itself nor if placed inside a LoopType.Incremental Sequence) + + The end value to reachThe duration of the tween + + + Tweens a Transform's localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's localScale uniformly to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's X localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's Y localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's Z localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's rotation so that it will look towards the given world position. + Also stores the transform as the tween's target so it can be used for filtered operations + The position to look atThe duration of the tween + Eventual axis constraint for the rotation + The vector that defines in which direction up is (default: Vector3.up) + + + EXPERIMENTAL Tweens a Transform's rotation so that it will look towards the given world position, + while also updating the lookAt position every frame + (contrary to which calculates the lookAt rotation only once, when the tween starts). + Also stores the transform as the tween's target so it can be used for filtered operations + The position to look atThe duration of the tween + Eventual axis constraint for the rotation + The vector that defines in which direction up is (default: Vector3.up) + + + Punches a Transform's localPosition towards the given direction and then back to the starting one + as if it was connected to the starting position via an elastic. + The direction and strength of the punch (added to the Transform's current position) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + 1 creates a full oscillation between the punch direction and the opposite direction, + while 0 oscillates only between the punch and the start position + If TRUE the tween will smoothly snap all values to integers + + + Punches a Transform's localScale towards the given size and then back to the starting one + as if it was connected to the starting scale via an elastic. + The punch strength (added to the Transform's current scale) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting size when bouncing backwards. + 1 creates a full oscillation between the punch scale and the opposite scale, + while 0 oscillates only between the punch scale and the start scale + + + Punches a Transform's localRotation towards the given size and then back to the starting one + as if it was connected to the starting rotation via an elastic. + The punch strength (added to the Transform's current rotation) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting rotation when bouncing backwards. + 1 creates a full oscillation between the punch rotation and the opposite rotation, + while 0 oscillates only between the punch and the start rotation + + + Shakes a Transform's localPosition with the given values. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the tween will smoothly snap all values to integers + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localPosition with the given values. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the tween will smoothly snap all values to integers + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localRotation. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localRotation. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localScale. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localScale. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a Transform's position to the given value, while also applying a jump effect along the Y axis. + Returns a Sequence instead of a Tweener. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reach + Power of the jump (the max height of the jump is represented by this plus the final Y offset) + Total number of jumps + The duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition to the given value, while also applying a jump effect along the Y axis. + Returns a Sequence instead of a Tweener. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reach + Power of the jump (the max height of the jump is represented by this plus the final Y offset) + Total number of jumps + The duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's position through the given path waypoints, using the chosen path algorithm. + Also stores the transform as the tween's target so it can be used for filtered operations + The waypoints to go through + The duration of the tween + The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + The path mode: 3D, side-scroller 2D, top-down 2D + The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + The color of the path (shown when gizmos are active in the Play panel and the tween is running) + + + Tweens a Transform's localPosition through the given path waypoints, using the chosen path algorithm. + Also stores the transform as the tween's target so it can be used for filtered operations + The waypoint to go through + The duration of the tween + The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + The path mode: 3D, side-scroller 2D, top-down 2D + The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + The color of the path (shown when gizmos are active in the Play panel and the tween is running) + + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's position via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's localPosition via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + + + Tweens a Tween's timeScale to the given value. + Also stores the Tween as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's color to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Light as the tween's target so it can be used for filtered operations + The value to tween toThe duration of the tween + + + Tweens a Material's color to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween toThe duration of the tween + + + Tweens a Material's named color property to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween to + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's named color property with the given ID to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween to + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Transform's position BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableMove tweens to work together on the same target, + instead than fight each other as multiple DOMove would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableMove tweens to work together on the same target, + instead than fight each other as multiple DOMove would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + EXPERIMENTAL METHOD - Tweens a Transform's rotation BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableRotate tweens to work together on the same target, + instead than fight each other as multiple DORotate would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + Rotation mode + + + EXPERIMENTAL METHOD - Tweens a Transform's lcoalRotation BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableRotate tweens to work together on the same target, + instead than fight each other as multiple DORotate would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + Rotation mode + + + Punches a Transform's localRotation BY the given value and then back to the starting one + as if it was connected to the starting rotation via an elastic. Does it in a way that allows other + DOBlendableRotate tweens to work together on the same target + The punch strength (added to the Transform's current rotation) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting rotation when bouncing backwards. + 1 creates a full oscillation between the punch rotation and the opposite rotation, + while 0 oscillates only between the punch and the start rotation + + + Tweens a Transform's localScale BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableScale tweens to work together on the same target, + instead than fight each other as multiple DOScale would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + + + + Completes all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + + Completes all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + + Kills all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens killed. + + If TRUE completes the tween before killing it + + + + Kills all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens killed. + + If TRUE completes the tween before killing it + + + + Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens flipped. + + + + + Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens flipped. + + + + + Sends to the given position all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + + Sends to the given position all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + + Pauses all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens paused. + + + + + Pauses all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens paused. + + + + + Plays all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays backwards all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays backwards all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays forward all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays forward all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Restarts all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens restarted. + + + + + Restarts all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens restarted. + + + + + Rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Smoothly rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Smoothly rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + + + + Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + + + + This class serves only as a utility class to store tween settings to apply on multiple tweens. + It is in no way needed otherwise, since you can directly apply tween settings to a tween via chaining + + + + A variable you can eventually Clear and reuse when needed, + to avoid instantiating TweenParams objects + + + Creates a new TweenParams object, which you can use to store tween settings + to pass to multiple tweens via myTween.SetAs(myTweenParms) + + + Clears and resets this TweenParams instance using default values, + so it can be reused without instantiating another one + + + Sets the autoKill behaviour of the tween. + Has no effect if the tween has already started + If TRUE the tween will be automatically killed when complete + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the target for the tween, which can then be used as a filter with DOTween's static methods. + IMPORTANT: use it with caution. If you just want to set an ID for the tween use SetId instead. + When using shorcuts the shortcut target is already assigned as the tween's target, + so using this method will overwrite it and prevent shortcut-operations like myTarget.DOPause from working correctly. + The target to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + Loop behaviour type (default: LoopType.Restart) + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + Eventual overshoot or amplitude to use with Back or Elastic easeType (default is 1.70158) + Eventual period to use with Elastic easeType (default is 0) + + + Sets the ease of the tween using an AnimationCurve. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween using a custom ease function. + If applied to Sequences eases the whole sequence animation + + + Sets the recycling behaviour for the tween. + If TRUE the tween will be recycled after being killed, otherwise it will be destroyed. + + + Sets the update type to the one defined in DOTween.defaultUpdateType (UpdateType.Normal unless changed) + and lets you choose if it should be independent from Unity's Time.timeScale + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the type of update (default or independent) for the tween + The type of update (default: UpdateType.Normal) + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the onStart callback for the tween. + Called the first time the tween is set in a playing state, after any eventual delay + + + Sets the onPlay callback for the tween. + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Sets the onRewind callback for the tween. + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Sets the onUpdate callback for the tween. + Called each time the tween updates + + + Sets the onStepComplete callback for the tween. + Called the moment the tween completes one loop cycle, even when going backwards + + + Sets the onComplete callback for the tween. + Called the moment the tween reaches its final forward position, loops included + + + Sets the onKill callback for the tween. + Called the moment the tween is killed + + + Sets the onWaypointChange callback for the tween. + Called when a path tween reaches a new waypoint + + + Sets a delayed startup for the tween. + Has no effect on Sequences or if the tween has already started + + + If isRelative is TRUE sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + + Methods that extend Tween objects and allow to set their parameters + + + + Sets the autoKill behaviour of the tween to TRUE. + Has no effect if the tween has already started or if it's added to a Sequence + + + Sets the autoKill behaviour of the tween. + Has no effect if the tween has already started or if it's added to a Sequence + If TRUE the tween will be automatically killed when complete + + + Sets an ID for the tween (), which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets a string ID for the tween (), which can then be used as a filter with DOTween's static methods. + Filtering via string is 2X faster than using an object as an ID (using the alternate obejct overload) + The string ID to assign to this tween. + + + Sets an int ID for the tween (), which can then be used as a filter with DOTween's static methods. + Filtering via int is 4X faster than via object, 2X faster than via string (using the alternate object/string overloads) + The int ID to assign to this tween. + + + Allows to link this tween to a GameObject + so that it will be automatically killed when the GameObject is destroyed. + Has no effect if the tween is added to a Sequence + The link target (unrelated to the target set via SetTarget) + + + Allows to link this tween to a GameObject and assign a behaviour depending on it. + This will also automatically kill the tween when the GameObject is destroyed. + Has no effect if the tween is added to a Sequence + The link target (unrelated to the target set via SetTarget) + The behaviour to use ( is always evaluated even if you choose another one) + + + Sets the target for the tween, which can then be used as a filter with DOTween's static methods. + IMPORTANT: use it with caution. If you just want to set an ID for the tween use SetId instead. + When using shorcuts the shortcut target is already assigned as the tween's target, + so using this method will overwrite it and prevent shortcut-operations like myTarget.DOPause from working correctly. + The target to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + Loop behaviour type (default: LoopType.Restart) + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + + Eventual overshoot to use with Back or Flash ease (default is 1.70158 - 1 for Flash). + In case of Flash ease it must be an intenger and sets the total number of flashes that will happen. + Using an even number will complete the tween on the starting value, while an odd one will complete it on the end value. + + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + Eventual amplitude to use with Elastic easeType or overshoot to use with Flash easeType (default is 1.70158 - 1 for Flash). + In case of Flash ease it must be an integer and sets the total number of flashes that will happen. + Using an even number will complete the tween on the starting value, while an odd one will complete it on the end value. + + Eventual period to use with Elastic or Flash easeType (default is 0). + In case of Flash ease it indicates the power in time of the ease, and must be between -1 and 1. + 0 is balanced, 1 weakens the ease with time, -1 starts the ease weakened and gives it power towards the end. + + + + Sets the ease of the tween using an AnimationCurve. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween using a custom ease function (which must return a value between 0 and 1). + If applied to Sequences eases the whole sequence animation + + + Allows the tween to be recycled after being killed. + + + Sets the recycling behaviour for the tween. + If TRUE the tween will be recycled after being killed, otherwise it will be destroyed. + + + Sets the update type to UpdateType.Normal and lets you choose if it should be independent from Unity's Time.timeScale + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the type of update for the tween + The type of update (defalt: UpdateType.Normal) + + + Sets the type of update for the tween and lets you choose if it should be independent from Unity's Time.timeScale + The type of update + If TRUE the tween will ignore Unity's Time.timeScale + + + EXPERIMENTAL: inverts this tween, so that it will play from the end to the beginning + (playing it backwards will actually play it from the beginning to the end). + Has no effect if the tween has already started or if it's added to a Sequence + + + EXPERIMENTAL: inverts this tween, so that it will play from the end to the beginning + (playing it backwards will actually play it from the beginning to the end). + Has no effect if the tween has already started or if it's added to a Sequence + If TRUE the tween will be inverted, otherwise it won't + + + Sets the onStart callback for the tween, clearing any previous onStart callback that was set. + Called the first time the tween is set in a playing state, after any eventual delay + + + Sets the onPlay callback for the tween, clearing any previous onPlay callback that was set. + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Sets the onPause callback for the tween, clearing any previous onPause callback that was set. + Called when the tween state changes from playing to paused. + If the tween has autoKill set to FALSE, this is called also when the tween reaches completion. + + + Sets the onRewind callback for the tween, clearing any previous onRewind callback that was set. + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Sets the onUpdate callback for the tween, clearing any previous onUpdate callback that was set. + Called each time the tween updates + + + Sets the onStepComplete callback for the tween, clearing any previous onStepComplete callback that was set. + Called the moment the tween completes one loop cycle, even when going backwards + + + Sets the onComplete callback for the tween, clearing any previous onComplete callback that was set. + Called the moment the tween reaches its final forward position, loops included + + + Sets the onKill callback for the tween, clearing any previous onKill callback that was set. + Called the moment the tween is killed + + + Sets the onWaypointChange callback for the tween, clearing any previous onWaypointChange callback that was set. + Called when a path tween's current waypoint changes + + + Sets the parameters of the tween (id, ease, loops, delay, timeScale, callbacks, etc) as the parameters of the given one. + Doesn't copy specific SetOptions settings: those will need to be applied manually each time. + Has no effect if the tween has already started. + NOTE: the tween's target will not be changed + Tween from which to copy the parameters + + + Sets the parameters of the tween (id, ease, loops, delay, timeScale, callbacks, etc) as the parameters of the given TweenParams. + Has no effect if the tween has already started. + TweenParams from which to copy the parameters + + + Adds the given tween to the end of the Sequence. + Has no effect if the Sequence has already started + The tween to append + + + Adds the given tween to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The tween to prepend + + + Inserts the given tween at the same time position of the last tween, callback or interval added to the Sequence. + Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes. + Has no effect if the Sequence has already started + + + Inserts the given tween at the given time position in the Sequence, + automatically adding an interval if needed. + Has no effect if the Sequence has already started + The time position where the tween will be placed + The tween to insert + + + Adds the given interval to the end of the Sequence. + Has no effect if the Sequence has already started + The interval duration + + + Adds the given interval to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The interval duration + + + Adds the given callback to the end of the Sequence. + Has no effect if the Sequence has already started + The callback to append + + + Adds the given callback to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The callback to prepend + + + Inserts the given callback at the same time position of the last tween, callback or interval added to the Sequence. + Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes. + Has no effect if the Sequence has already started + /// <param name="callback">The callback to prepend</param> + + + Inserts the given callback at the given time position in the Sequence, + automatically adding an interval if needed. + Has no effect if the Sequence has already started + The time position where the callback will be placed + The callback to insert + + + Changes a TO tween into a FROM tween: sets the current target's position as the tween's endValue + then immediately sends the target to the previously set endValue. + + + Changes a TO tween into a FROM tween: sets the current target's position as the tween's endValue + then immediately sends the target to the previously set endValue. + If TRUE the FROM value will be calculated as relative to the current one + + + Changes a TO tween into a FROM tween: sets the current value of the target as the endValue, + and the previously passed endValue as the actual startValue. + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM value will be calculated as relative to the current one + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Alpha value to start from (in case of Fade tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from (in case of Vector tweens that act on a single coordinate or scale tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from (in case of Vector tweens that act on a single coordinate or scale tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Sets a delayed startup for the tween. + In case of Sequences behaves the same as , + which means the delay will repeat in case of loops (while with tweens it's ignored after the first loop cycle). + Has no effect if the tween has already started + + + EXPERIMENTAL: implemented in v1.2.340. + Sets a delayed startup for the tween with options to choose how the delay is applied in case of Sequences. + Has no effect if the tween has already started + Only used by types: If FALSE sets the delay as a one-time occurrence + (defaults to this for types), + otherwise as a Sequence interval which will repeat at the beginning of every loop cycle + + + Sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isRelative is TRUE sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + Options for float tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector2 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector2 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Quaternion tweens + If TRUE (default) the rotation will take the shortest route, and will not rotate more than 360°. + If FALSE the rotation will be fully accounted. Is always FALSE if the tween is set as relative + + + Options for Color tweens + If TRUE only the alpha value of the color will be tweened + + + Options for Vector4 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + If TRUE, rich text will be interpreted correctly while animated, + otherwise all tags will be considered as normal text + The type of scramble to use, if any + A string containing the characters to use for scrambling. + Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + Leave it to NULL to use default ones + + + Options for Vector3Array tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3Array tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for ShapeCircle tweens + If TRUE the center you set in the DOTween.To method will be considered as relative + to the starting position of the target + If TRUE the tween will smoothly snap all values to integers + + + Options for Path tweens (created via the DOPath shortcut) + The eventual movement axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + The eventual rotation axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + + + Options for Path tweens (created via the DOPath shortcut) + If TRUE the path will be automatically closed + The eventual movement axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + The eventual rotation axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards the given position. + Must be chained directly to the tween creation method or to a SetOptions + The position to look at + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards the given position with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The position to look at + If TRUE doesn't rotate the target along the Z axis + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards another transform. + Must be chained directly to the tween creation method or to a SetOptions + The transform to look at + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards another transform with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The transform to look at + If TRUE doesn't rotate the target along the Z axis + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target to the path, with the given lookAhead. + Must be chained directly to the tween creation method or to a SetOptions + The percentage of lookAhead to use (0 to 1) + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the path with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The percentage of lookAhead to use (0 to 1) + If TRUE doesn't rotate the target along the Z axis + + + + Types of log behaviours + + + + Log only warnings and errors + + + Log warnings, errors and additional infos + + + Log only errors + + + + Indicates either a Tweener or a Sequence + + + + TimeScale for the tween + + + If TRUE the tween will play backwards + + + If TRUE the tween is completely inverted but without playing it backwards + (play backwards will actually play the tween in the original direction) + + + Object ID (usable for filtering with DOTween static methods). Can be anything except a string or an int + (use or for those) + + + String ID (usable for filtering with DOTween static methods). 2X faster than using an object id + + + Int ID (usable for filtering with DOTween static methods). 4X faster than using an object id, 2X faster than using a string id. + Default is -999 so avoid using an ID like that or it will capture all unset intIds + + + Tween target (usable for filtering with DOTween static methods). Automatically set by tween creation shortcuts + + + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Called when the tween state changes from playing to paused. + If the tween has autoKill set to FALSE, this is called also when the tween reaches completion. + + + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Called each time the tween updates + + + Called the moment the tween completes one loop cycle + + + Called the moment the tween reaches completion (loops included) + + + Called the moment the tween is killed + + + Called when a path tween's current waypoint changes + + + Tweeners-only (ignored by Sequences), returns TRUE if the tween was set as relative + + + + Set by SetTarget if DOTween's Debug Mode is on (see DOTween Utility Panel -> "Store GameObject's ID" debug option + + + + FALSE when tween is (or should be) despawned - set only by TweenManager + + + Gets and sets the time position (loops included, delays excluded) of the tween + + + Returns TRUE if the tween is set to loop (either a set number of times or infinitely) + + + TRUE after the tween was set in a play state at least once, AFTER any delay is elapsed + + + Time position within a single loop cycle + + + + Animates a single value + + + + Changes the start value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + If bigger than 0 applies it as the new tween duration + + + Changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If bigger than 0 applies it as the new tween duration + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + Changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + Changes the start and end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + The new end value + If bigger than 0 applies it as the new tween duration + + + + Used internally + + + + + Update type + + + + Updates every frame during Update calls + + + Updates every frame during LateUpdate calls + + + Updates using FixedUpdate calls + + + Updates using manual update calls + +
+
diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta b/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta new file mode 100644 index 0000000..7a866b5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 34192c5e0d14aee43a0e86cc4823268a +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.dll b/Assets/Plugins/Demigiant/DOTween/DOTween.dll new file mode 100644 index 0000000..1b0c4c7 Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTween/DOTween.dll differ diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.dll.mdb.meta b/Assets/Plugins/Demigiant/DOTween/DOTween.dll.mdb.meta new file mode 100644 index 0000000..f64a22a --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.dll.mdb.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 4f007001a22b3d24dae350342c4d19c8 +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.dll.meta b/Assets/Plugins/Demigiant/DOTween/DOTween.dll.meta new file mode 100644 index 0000000..482dbb8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a811bde74b26b53498b4f6d872b09b6d +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 1 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor.meta b/Assets/Plugins/Demigiant/DOTween/Editor.meta new file mode 100644 index 0000000..532edfb --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: b27f58ae5d5c33a4bb2d1f4f34bd036d +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML new file mode 100644 index 0000000..b893a67 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML @@ -0,0 +1,165 @@ + + + + DOTweenEditor + + + + + Contains compatibility methods taken from DemiEditor (for when DOTween is without it) + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Starts the update loop of tween in the editor. Has no effect during playMode. + + Eventual callback to call after every update + + + + Stops the update loop and clears the onPreviewUpdated callback. + + If TRUE also resets the tweened objects to their original state. + Note that this works by calling Rewind on all tweens, so it will work correctly + only if you have a single tween type per object and it wasn't killed + If TRUE also kills any cached tween + + + + Readies the tween for editor preview by setting its UpdateType to Manual plus eventual extra settings. + + The tween to ready + If TRUE (recommended) removes all callbacks (OnComplete/Rewind/etc) + If TRUE prevents the tween from being auto-killed at completion + If TRUE starts playing the tween immediately + + + Full major version + first minor version (ex: 2018.1f) + + + Major version + + + First minor version (ex: in 2018.1 it would be 1) + + + + Checks that the given editor texture use the correct import settings, + and applies them if they're incorrect. + + + + + Returns TRUE if setup is required + + + + + Returns TRUE if the file/directory at the given path exists. + + Path, relative to Unity's project folder + + + + + Converts the given project-relative path to a full path, + with backward (\) slashes). + + + + + Converts the given full path to a path usable with AssetDatabase methods + (relative to Unity's project folder, and with the correct Unity forward (/) slashes). + + + + + Connects to a asset. + If the asset already exists at the given path, loads it and returns it. + Otherwise, either returns NULL or automatically creates it before loading and returning it + (depending on the given parameters). + + Asset type + File path (relative to Unity's project folder) + If TRUE and the requested asset doesn't exist, forces its creation + + + + Full path for the given loaded assembly, assembly file included + + + + + Adds the given global define if it's not already present + + + + + Removes the given global define if it's present + + + + + Returns TRUE if the given global define is present in all the + or only in the given , depending on passed parameters. + + + to use. Leave NULL to check in all of them. + + + + Not used as menu item anymore, but as a utility function + + + + Sets the modules bool values to the current defines state + + + Refreshes the enabled state of all defines + + + Applies the guiEnabled value state to each define, adding or removing them based on that + + + Removes all DOTween defines including the ones for external assets + + + Removes all legacy defines + + + Removes the define if present + + + Adds the define if it's not already present + + + Full major version + first minor version (ex: 2018.1f) + + + Major version + + + First minor version (ex: in 2018.1 it would be 1) + + + diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta new file mode 100644 index 0000000..7cec113 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 2e2c6224d345d9249acfa6e8ef40bb2d +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll new file mode 100644 index 0000000..8cec399 Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll differ diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.mdb.meta b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.mdb.meta new file mode 100644 index 0000000..bf461f3 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.mdb.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 8f46310a8b0a8f04a92993c37c713243 +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta new file mode 100644 index 0000000..53590f3 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 45d5034162d6cf04dbe46da84fc7d074 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta new file mode 100644 index 0000000..a81ba5f --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 0034ebae0c2a9344e897db1160d71b6d +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png new file mode 100644 index 0000000..d06fc7c Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png differ diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta new file mode 100644 index 0000000..61c3cce --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8da095e39e9b4df488dfd436f81116d6 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png new file mode 100644 index 0000000..7cd74c1 Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png differ diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta new file mode 100644 index 0000000..c343a61 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 61521df2e071645488ba3d05e49289ae +timeCreated: 1602317874 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png new file mode 100644 index 0000000..e29d02f Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png differ diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta new file mode 100644 index 0000000..7ca1911 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 7051dba417b3d53409f2918f1ea4938d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 256 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png new file mode 100644 index 0000000..e48db5e Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png differ diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta new file mode 100644 index 0000000..031a2b5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 519694efe2bb2914788b151fbd8c01f4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg new file mode 100644 index 0000000..4d710d7 Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg differ diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta new file mode 100644 index 0000000..26e4255 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 78a59ca99f8987941adb61f9e14a06a7 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 512 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules.meta b/Assets/Plugins/Demigiant/DOTween/Modules.meta new file mode 100644 index 0000000..24cd2ac --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 143604b8bad857d47a6f7cc7a533e2dc +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs new file mode 100644 index 0000000..ada1879 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs @@ -0,0 +1,198 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if !DOTWEEN_NOAUDIO // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +using UnityEngine; +using UnityEngine.Audio; // Required for AudioMixer + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleAudio + { + #region Shortcuts + + #region Audio + + /// Tweens an AudioSource's volume to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static TweenerCore DOFade(this AudioSource target, float endValue, float duration) + { + if (endValue < 0) endValue = 0; + else if (endValue > 1) endValue = 1; + TweenerCore t = DOTween.To(() => target.volume, x => target.volume = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an AudioSource's pitch to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPitch(this AudioSource target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pitch, x => target.pitch = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region AudioMixer + + /// Tweens an AudioMixer's exposed float to the given value. + /// Also stores the AudioMixer as the tween's target so it can be used for filtered operations. + /// Note that you need to manually expose a float in an AudioMixerGroup in order to be able to tween it from an AudioMixer. + /// Name given to the exposed float to set + /// The end value to reachThe duration of the tween + public static TweenerCore DOSetFloat(this AudioMixer target, string floatName, float endValue, float duration) + { + TweenerCore t = DOTween.To(()=> { + float currVal; + target.GetFloat(floatName, out currVal); + return currVal; + }, x=> target.SetFloat(floatName, x), endValue, duration); + t.SetTarget(target); + return t; + } + + #region Operation Shortcuts + + /// + /// Completes all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens completed + /// (meaning the tweens that don't have infinite loops and were not already complete) + /// + /// For Sequences only: if TRUE also internal Sequence callbacks will be fired, + /// otherwise they will be ignored + public static int DOComplete(this AudioMixer target, bool withCallbacks = false) + { + return DOTween.Complete(target, withCallbacks); + } + + /// + /// Kills all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens killed. + /// + /// If TRUE completes the tween before killing it + public static int DOKill(this AudioMixer target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + /// + /// Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens flipped. + /// + public static int DOFlip(this AudioMixer target) + { + return DOTween.Flip(target); + } + + /// + /// Sends to the given position all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + /// Time position to reach + /// (if higher than the whole tween duration the tween will simply reach its end) + /// If TRUE will play the tween after reaching the given position, otherwise it will pause it + public static int DOGoto(this AudioMixer target, float to, bool andPlay = false) + { + return DOTween.Goto(target, to, andPlay); + } + + /// + /// Pauses all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens paused. + /// + public static int DOPause(this AudioMixer target) + { + return DOTween.Pause(target); + } + + /// + /// Plays all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlay(this AudioMixer target) + { + return DOTween.Play(target); + } + + /// + /// Plays backwards all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayBackwards(this AudioMixer target) + { + return DOTween.PlayBackwards(target); + } + + /// + /// Plays forward all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayForward(this AudioMixer target) + { + return DOTween.PlayForward(target); + } + + /// + /// Restarts all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens restarted. + /// + public static int DORestart(this AudioMixer target) + { + return DOTween.Restart(target); + } + + /// + /// Rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DORewind(this AudioMixer target) + { + return DOTween.Rewind(target); + } + + /// + /// Smoothly rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DOSmoothRewind(this AudioMixer target) + { + return DOTween.SmoothRewind(target); + } + + /// + /// Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + public static int DOTogglePause(this AudioMixer target) + { + return DOTween.TogglePause(target); + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta new file mode 100644 index 0000000..50aa010 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b766d08851589514b97afb23c6f30a70 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs new file mode 100644 index 0000000..4eb7b77 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs @@ -0,0 +1,146 @@ +using UnityEngine; + +#if DOTWEEN_EPO || EPO_DOTWEEN // MODULE_MARKER + +using EPOOutline; +using DG.Tweening.Plugins.Options; +using DG.Tweening; +using DG.Tweening.Core; + +namespace DG.Tweening +{ + public static class DOTweenModuleEPOOutline + { + public static int DOKill(this SerializedPass target, bool complete) + { + return DOTween.Kill(target, complete); + } + + public static TweenerCore DOFloat(this SerializedPass target, string propertyName, float endValue, float duration) + { + var tweener = DOTween.To(() => target.GetFloat(propertyName), x => target.SetFloat(propertyName, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFade(this SerializedPass target, string propertyName, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.GetColor(propertyName), x => target.SetColor(propertyName, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOColor(this SerializedPass target, string propertyName, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.GetColor(propertyName), x => target.SetColor(propertyName, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOVector(this SerializedPass target, string propertyName, Vector4 endValue, float duration) + { + var tweener = DOTween.To(() => target.GetVector(propertyName), x => target.SetVector(propertyName, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFloat(this SerializedPass target, int propertyId, float endValue, float duration) + { + var tweener = DOTween.To(() => target.GetFloat(propertyId), x => target.SetFloat(propertyId, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFade(this SerializedPass target, int propertyId, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.GetColor(propertyId), x => target.SetColor(propertyId, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOColor(this SerializedPass target, int propertyId, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.GetColor(propertyId), x => target.SetColor(propertyId, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOVector(this SerializedPass target, int propertyId, Vector4 endValue, float duration) + { + var tweener = DOTween.To(() => target.GetVector(propertyId), x => target.SetVector(propertyId, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static int DOKill(this Outlinable.OutlineProperties target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + public static int DOKill(this Outliner target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + /// + /// Controls the alpha (transparency) of the outline + /// + public static TweenerCore DOFade(this Outlinable.OutlineProperties target, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.Color, x => target.Color = x, endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + /// + /// Controls the color of the outline + /// + public static TweenerCore DOColor(this Outlinable.OutlineProperties target, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.Color, x => target.Color = x, endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of blur applied to the outline + /// + public static TweenerCore DOBlurShift(this Outlinable.OutlineProperties target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.BlurShift, x => target.BlurShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of blur applied to the outline + /// + public static TweenerCore DOBlurShift(this Outliner target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.BlurShift, x => target.BlurShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of dilation applied to the outline + /// + public static TweenerCore DODilateShift(this Outlinable.OutlineProperties target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.DilateShift, x => target.DilateShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of dilation applied to the outline + /// + public static TweenerCore DODilateShift(this Outliner target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.DilateShift, x => target.DilateShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta new file mode 100644 index 0000000..4b8991f --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e944529dcaee98f4e9498d80e541d93e +timeCreated: 1602593330 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs new file mode 100644 index 0000000..51786e3 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs @@ -0,0 +1,216 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if !DOTWEEN_NOPHYSICS // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics + { + #region Shortcuts + + #region Rigidbody + + /// Tweens a Rigidbody's position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this Rigidbody target, Vector3 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's X position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveX(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's Y position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveY(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's Z position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveZ(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's rotation to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// Rotation mode + public static TweenerCore DORotate(this Rigidbody target, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + t.plugOptions.rotateMode = mode; + return t; + } + + /// Tweens a Rigidbody's rotation so that it will look towards the given position. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The position to look atThe duration of the tween + /// Eventual axis constraint for the rotation + /// The vector that defines in which direction up is (default: Vector3.up) + public static TweenerCore DOLookAt(this Rigidbody target, Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3? up = null) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, towards, duration) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetLookAt); + t.plugOptions.axisConstraint = axisConstraint; + t.plugOptions.up = (up == null) ? Vector3.up : (Vector3)up; + return t; + } + + #region Special + + /// Tweens a Rigidbody's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody target, Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, jumpPower, 0), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue.x, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue.z), duration) + .SetOptions(AxisConstraint.Z, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta new file mode 100644 index 0000000..0ce0d75 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dae9aa560b4242648a3affa2bfabc365 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs new file mode 100644 index 0000000..045eccc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs @@ -0,0 +1,193 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if !DOTWEEN_NOPHYSICS2D // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics2D + { + #region Shortcuts + + #region Rigidbody2D Shortcuts + + /// Tweens a Rigidbody2D's position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this Rigidbody2D target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's X position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveX(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's Y position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveY(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's rotation to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DORotate(this Rigidbody2D target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + return t; + } + + #region Special + + /// Tweens a Rigidbody2D's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. + /// IMPORTANT: a rigidbody2D can't be animated in a jump arc using MovePosition, so the tween will directly set the position + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody2D target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, x => target.position = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, x => target.position = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody2D's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a Rigidbody2D correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody2D target, Vector2[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + int len = path.Length; + Vector3[] path3D = new Vector3[len]; + for (int i = 0; i < len; ++i) path3D[i] = path[i]; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, x => target.MovePosition(x), new Path(pathType, path3D, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody2D's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// NOTE: to tween a Rigidbody2D correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody2D target, Vector2[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + int len = path.Length; + Vector3[] path3D = new Vector3[len]; + for (int i = 0; i < len; ++i) path3D[i] = path[i]; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path3D, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody2D target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, x => target.MovePosition(x), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody2D target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta new file mode 100644 index 0000000..ca9ed29 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 230fe34542e175245ba74b4659dae700 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs new file mode 100644 index 0000000..4d4a0c4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs @@ -0,0 +1,93 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if !DOTWEEN_NOSPRITES // MODULE_MARKER +using System; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleSprite + { + #region Shortcuts + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this SpriteRenderer target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Material's alpha color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this SpriteRenderer target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a SpriteRenderer's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this SpriteRenderer target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region Blendables + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the SpriteRenderer as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this SpriteRenderer target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta new file mode 100644 index 0000000..a0c67c4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 188918ab119d93148aa0de59ccf5286b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs new file mode 100644 index 0000000..4708449 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs @@ -0,0 +1,662 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if !DOTWEEN_NOUI // MODULE_MARKER + +using System; +using System.Globalization; +using UnityEngine; +using UnityEngine.UI; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Options; +using Outline = UnityEngine.UI.Outline; +using Text = UnityEngine.UI.Text; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleUI + { + #region Shortcuts + + #region CanvasGroup + + /// Tweens a CanvasGroup's alpha color to the given value. + /// Also stores the canvasGroup as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this CanvasGroup target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.alpha, x => target.alpha = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region Graphic + + /// Tweens an Graphic's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Graphic target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Graphic's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Graphic target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region Image + + /// Tweens an Image's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Image target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Image target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's fillAmount to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static TweenerCore DOFillAmount(this Image target, float endValue, float duration) + { + if (endValue > 1) endValue = 1; + else if (endValue < 0) endValue = 0; + TweenerCore t = DOTween.To(() => target.fillAmount, x => target.fillAmount = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's colors using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Image target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region LayoutElement + + /// Tweens an LayoutElement's flexibleWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOFlexibleSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.flexibleWidth, target.flexibleHeight), x => { + target.flexibleWidth = x.x; + target.flexibleHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens an LayoutElement's minWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMinSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.minWidth, target.minHeight), x => { + target.minWidth = x.x; + target.minHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens an LayoutElement's preferredWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOPreferredSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.preferredWidth, target.preferredHeight), x => { + target.preferredWidth = x.x; + target.preferredHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + #endregion + + #region Outline + + /// Tweens a Outline's effectColor to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Outline target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.effectColor, x => target.effectColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Outline's effectColor alpha to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Outline target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.effectColor, x => target.effectColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Outline's effectDistance to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScale(this Outline target, Vector2 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.effectDistance, x => target.effectDistance = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region RectTransform + + /// Tweens a RectTransform's anchoredPosition to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPosX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPosY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchoredPosition3D to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3D(this RectTransform target, Vector3 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D Z to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DZ(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchorMax to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorMax(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchorMax, x => target.anchorMax = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchorMin to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorMin(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchorMin, x => target.anchorMin = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's pivot to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivot(this RectTransform target, Vector2 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a RectTransform's pivot X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivotX(this RectTransform target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X).SetTarget(target); + return t; + } + /// Tweens a RectTransform's pivot Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivotY(this RectTransform target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's sizeDelta to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOSizeDelta(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.sizeDelta, x => target.sizeDelta = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Punches a RectTransform's anchoredPosition towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The direction and strength of the punch (added to the RectTransform's current position) + /// The duration of the tween + /// Indicates how much will the punch vibrate + /// Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + /// 1 creates a full oscillation between the punch direction and the opposite direction, + /// while 0 oscillates only between the punch and the start position + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOPunchAnchorPos(this RectTransform target, Vector2 punch, float duration, int vibrato = 10, float elasticity = 1, bool snapping = false) + { + return DOTween.Punch(() => target.anchoredPosition, x => target.anchoredPosition = x, punch, duration, vibrato, elasticity) + .SetTarget(target).SetOptions(snapping); + } + + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + /// Randomness mode + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, float strength = 100, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, true, fadeOut, randomnessMode) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength on each axis + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + /// Randomness mode + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, Vector2 strength, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, fadeOut, randomnessMode) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + + #region Special + + /// Tweens a RectTransform's anchoredPosition to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJumpAnchorPos(this RectTransform target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + + // Separate Y Tween so we can elaborate elapsedPercentage on that insted of on the Sequence + // (in case users add a delay or other elements to the Sequence) + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(()=> startPosY = target.anchoredPosition.y); + s.Append(DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + s.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector2 pos = target.anchoredPosition; + pos.y += DOVirtual.EasedValue(0, offsetY, s.ElapsedDirectionalPercentage(), Ease.OutQuad); + target.anchoredPosition = pos; + }); + return s; + } + + #endregion + + #endregion + + #region ScrollRect + + /// Tweens a ScrollRect's horizontal/verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DONormalizedPos(this ScrollRect target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.horizontalNormalizedPosition, target.verticalNormalizedPosition), + x => { + target.horizontalNormalizedPosition = x.x; + target.verticalNormalizedPosition = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's horizontalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOHorizontalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.horizontalNormalizedPosition, x => target.horizontalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOVerticalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.verticalNormalizedPosition, x => target.verticalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Slider + + /// Tweens a Slider's value to the given value. + /// Also stores the Slider as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOValue(this Slider target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.value, x => target.value = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + #endregion + + #region Text + + /// Tweens a Text's color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Text target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// + /// Tweens a Text's text from one integer to another, with options for thousands separators + /// + /// The value to start from + /// The end value to reach + /// The duration of the tween + /// If TRUE (default) also adds thousands separators + /// The to use (InvariantCulture if NULL) + public static TweenerCore DOCounter( + this Text target, int fromValue, int endValue, float duration, bool addThousandsSeparator = true, CultureInfo culture = null + ){ + int v = fromValue; + CultureInfo cInfo = !addThousandsSeparator ? null : culture ?? CultureInfo.InvariantCulture; + TweenerCore t = DOTween.To(() => v, x => { + v = x; + target.text = addThousandsSeparator + ? v.ToString("N0", cInfo) + : v.ToString(); + }, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Text's alpha color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Text target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Text's text to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end string to tween toThe duration of the tween + /// If TRUE (default), rich text will be interpreted correctly while animated, + /// otherwise all tags will be considered as normal text + /// The type of scramble mode to use, if any + /// A string containing the characters to use for scrambling. + /// Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + /// Leave it to NULL (default) to use default ones + public static TweenerCore DOText(this Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + if (endValue == null) { + if (Debugger.logPriority > 0) Debugger.LogWarning("You can't pass a NULL string to DOText: an empty string will be used instead to avoid errors"); + endValue = ""; + } + TweenerCore t = DOTween.To(() => target.text, x => target.text = x, endValue, duration); + t.SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + return t; + } + + #endregion + + #region Blendables + + #region Graphic + + /// Tweens a Graphic's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Graphic as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Graphic target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Image + + /// Tweens a Image's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Image as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Image target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Text + + /// Tweens a Text's color BY the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Text target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #region Shapes + + /// Tweens a RectTransform's anchoredPosition so that it draws a circle around the given center. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations. + /// IMPORTANT: SetFrom(value) requires a instead of a float, where the X property represents the "from degrees value" + /// Circle-center/pivot around which to rotate (in UI anchoredPosition coordinates) + /// The end value degrees to reach (to rotate counter-clockwise pass a negative value) + /// The duration of the tween + /// If TRUE the coordinates will be considered as relative to the target's current anchoredPosition + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOShapeCircle( + this RectTransform target, Vector2 center, float endValueDegrees, float duration, bool relativeCenter = false, bool snapping = false + ) + { + TweenerCore t = DOTween.To( + CirclePlugin.Get(), () => target.anchoredPosition, x => target.anchoredPosition = x, center, duration + ); + t.SetOptions(endValueDegrees, relativeCenter, snapping).SetTarget(target); + return t; + } + + #endregion + + #endregion + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Utils + { + /// + /// Converts the anchoredPosition of the first RectTransform to the second RectTransform, + /// taking into consideration offset, anchors and pivot, and returns the new anchoredPosition + /// + public static Vector2 SwitchToRectTransform(RectTransform from, RectTransform to) + { + Vector2 localPoint; + Vector2 fromPivotDerivedOffset = new Vector2(from.rect.width * 0.5f + from.rect.xMin, from.rect.height * 0.5f + from.rect.yMin); + Vector2 screenP = RectTransformUtility.WorldToScreenPoint(null, from.position); + screenP += fromPivotDerivedOffset; + RectTransformUtility.ScreenPointToLocalPointInRectangle(to, screenP, null, out localPoint); + Vector2 pivotDerivedOffset = new Vector2(to.rect.width * 0.5f + to.rect.xMin, to.rect.height * 0.5f + to.rect.yMin); + return to.anchoredPosition + localPoint - pivotDerivedOffset; + } + } + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta new file mode 100644 index 0000000..60d55ef --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a060394c03331a64392db53a10e7f2d1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUIToolkit.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUIToolkit.cs new file mode 100644 index 0000000..7f07708 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUIToolkit.cs @@ -0,0 +1,161 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2026/01/08 + +#if DOTWEEN_UITOOLKIT && UNITY_2021_3_OR_NEWER // MODULE_MARKER + +using UnityEngine; +using UnityEngine.UIElements; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleUIToolkit + { + #region Shortcuts + + #region VisualElement + + /// Tweens a VisualElement's position (via style.translate) to the given value. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this VisualElement target, Vector3 endValue, float duration, bool snapping = false) + { + TweenerCore t + = DOTween.To(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + /// Tweens a VisualElement's position (via style.translate) to the given value. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this VisualElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t + = DOTween.To(() => (Vector2)target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, 0), endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + /// Tweens a VisualElement's X position (via style.translate) to the given value. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveX(this VisualElement target, float endValue, float duration, bool snapping = false) + { + TweenerCore t + = DOTween.To(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + /// Tweens a VisualElement's Y position (via style.translate) to the given value. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveY(this VisualElement target, float endValue, float duration, bool snapping = false) + { + TweenerCore t + = DOTween.To(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + /// Tweens a VisualElement's Z position (via style.translate) to the given value. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveZ(this VisualElement target, float endValue, float duration, bool snapping = false) + { + TweenerCore t + = DOTween.To(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + return t; + } + + /// Tweens a VisualElement's scale (via style.scale) to the given value. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScale(this VisualElement target, Vector2 endValue, float duration) + { + TweenerCore t + = DOTween.To(() => (Vector2)target.resolvedStyle.scale.value, x => target.style.scale = new Scale(x), endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a VisualElement's scale (via style.scale) to the given value. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScale(this VisualElement target, float endValue, float duration) + { + TweenerCore t + = DOTween.To(() => (Vector2)target.resolvedStyle.scale.value, x => target.style.scale = new Scale(x), new Vector2(endValue, endValue), duration); + t.SetTarget(target); + return t; + } + + /// Tweens a VisualElement's rotation (via style.rotate) to the given value. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DORotate(this VisualElement target, float endValue, float duration) + { + TweenerCore t + = DOTween.To(() => target.resolvedStyle.rotate.angle.value, x => target.style.rotate = new Rotate(x), endValue, duration); + t.SetTarget(target); + return t; + } + + /// Punches a VisualElement's position towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The direction and strength of the punch (added to the VisualElement's current position) + /// The duration of the tween + /// Indicates how much will the punch vibrate + /// Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + /// 1 creates a full oscillation between the punch direction and the opposite direction, + /// while 0 oscillates only between the punch and the start position + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOPunch(this VisualElement target, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1, bool snapping = false) + { + return DOTween.Punch(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), punch, duration, vibrato, elasticity) + .SetTarget(target).SetOptions(snapping); + } + + /// Shakes a VisualElement's position with the given values. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + /// Randomness mode + public static Tweener DOShake(this VisualElement target, float duration, float strength = 100, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full) + { + return DOTween.Shake(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), duration, strength, vibrato, randomness, true, fadeOut, randomnessMode) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + /// Shakes a VisualElement's position with the given values. + /// Also stores the VisualElement as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength on each axis + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + /// Randomness mode + public static Tweener DOShake(this VisualElement target, float duration, Vector2 strength, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full) + { + return DOTween.Shake(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), duration, strength, vibrato, randomness, fadeOut, randomnessMode) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUIToolkit.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUIToolkit.cs.meta new file mode 100644 index 0000000..8a7c7bf --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUIToolkit.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c0a6d2683fb84e4193f2aa968264881 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs new file mode 100644 index 0000000..8f818ba --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs @@ -0,0 +1,389 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +//#if UNITY_2018_1_OR_NEWER && (NET_4_6 || NET_STANDARD_2_0) +//using Task = System.Threading.Tasks.Task; +//#endif + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Shortcuts/functions that are not strictly related to specific Modules + /// but are available only on some Unity versions + /// + public static class DOTweenModuleUnityVersion + { + #region Material + + /// Tweens a Material's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + /// Tweens a Material's named color property using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to use + /// The name of the material property to tween (like _Tint or _SpecColor) + /// The duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, string property, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.SetColor(property, c.color); + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, property, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region CustomYieldInstructions + + /// + /// Returns a that waits until the tween is killed or complete. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForCompletion(true); + /// + public static CustomYieldInstruction WaitForCompletion(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForCompletion(t); + } + + /// + /// Returns a that waits until the tween is killed or rewinded. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForRewind(); + /// + public static CustomYieldInstruction WaitForRewind(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForRewind(t); + } + + /// + /// Returns a that waits until the tween is killed. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForKill(); + /// + public static CustomYieldInstruction WaitForKill(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForKill(t); + } + + /// + /// Returns a that waits until the tween is killed or has gone through the given amount of loops. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForElapsedLoops(2); + /// + /// Elapsed loops to wait for + public static CustomYieldInstruction WaitForElapsedLoops(this Tween t, int elapsedLoops, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForElapsedLoops(t, elapsedLoops); + } + + /// + /// Returns a that waits until the tween is killed + /// or has reached the given time position (loops included, delays excluded). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForPosition(2.5f); + /// + /// Position (loops included, delays excluded) to wait for + public static CustomYieldInstruction WaitForPosition(this Tween t, float position, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForPosition(t, position); + } + + /// + /// Returns a that waits until the tween is killed or started + /// (meaning when the tween is set in a playing state the first time, after any eventual delay). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForStart(); + /// + public static CustomYieldInstruction WaitForStart(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForStart(t); + } + + #endregion + +#if UNITY_2018_1_OR_NEWER + #region Unity 2018.1 or Newer + + #region Material + + /// Tweens a Material's named texture offset property with the given ID to the given value. + /// Also stores the material as the tween's target so it can be used for filtered operations + /// The end value to reach + /// The ID of the material property to tween (also called nameID in Unity's manual) + /// The duration of the tween + public static TweenerCore DOOffset(this Material target, Vector2 endValue, int propertyID, float duration) + { + if (!target.HasProperty(propertyID)) { + if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID); + return null; + } + TweenerCore t = DOTween.To(() => target.GetTextureOffset(propertyID), x => target.SetTextureOffset(propertyID, x), endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Material's named texture scale property with the given ID to the given value. + /// Also stores the material as the tween's target so it can be used for filtered operations + /// The end value to reach + /// The ID of the material property to tween (also called nameID in Unity's manual) + /// The duration of the tween + public static TweenerCore DOTiling(this Material target, Vector2 endValue, int propertyID, float duration) + { + if (!target.HasProperty(propertyID)) { + if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID); + return null; + } + TweenerCore t = DOTween.To(() => target.GetTextureScale(propertyID), x => target.SetTextureScale(propertyID, x), endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region .NET 4.6 or Newer + +#if UNITY_2018_1_OR_NEWER && (NET_4_6 || NET_STANDARD_2_0) + + #region Async Instructions + + /// + /// Returns an async that waits until the tween is killed or complete. + /// It can be used inside an async operation. + /// Example usage:await myTween.WaitForCompletion(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForCompletion(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && !t.IsComplete()) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or rewinded. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForRewind(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForRewind(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0)) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForKill(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForKill(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or has gone through the given amount of loops. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForElapsedLoops(); + /// + /// Elapsed loops to wait for + public static async System.Threading.Tasks.Task AsyncWaitForElapsedLoops(this Tween t, int elapsedLoops) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && t.CompletedLoops() < elapsedLoops) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or started + /// (meaning when the tween is set in a playing state the first time, after any eventual delay). + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForPosition(); + /// + /// Position (loops included, delays excluded) to wait for + public static async System.Threading.Tasks.Task AsyncWaitForPosition(this Tween t, float position) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && t.position * (t.CompletedLoops() + 1) < position) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForKill(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForStart(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && !t.playedOnce) await System.Threading.Tasks.Task.Yield(); + } + + #endregion +#endif + + #endregion + + #endregion +#endif + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class DOTweenCYInstruction + { + public class WaitForCompletion : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.IsComplete(); + }} + readonly Tween t; + public WaitForCompletion(Tween tween) + { + t = tween; + } + } + + public class WaitForRewind : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0); + }} + readonly Tween t; + public WaitForRewind(Tween tween) + { + t = tween; + } + } + + public class WaitForKill : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active; + }} + readonly Tween t; + public WaitForKill(Tween tween) + { + t = tween; + } + } + + public class WaitForElapsedLoops : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.CompletedLoops() < elapsedLoops; + }} + readonly Tween t; + readonly int elapsedLoops; + public WaitForElapsedLoops(Tween tween, int elapsedLoops) + { + t = tween; + this.elapsedLoops = elapsedLoops; + } + } + + public class WaitForPosition : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.position * (t.CompletedLoops() + 1) < position; + }} + readonly Tween t; + readonly float position; + public WaitForPosition(Tween tween, float position) + { + t = tween; + this.position = position; + } + } + + public class WaitForStart : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.playedOnce; + }} + readonly Tween t; + public WaitForStart(Tween tween) + { + t = tween; + } + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta new file mode 100644 index 0000000..290189f --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 63c02322328255542995bd02b47b0457 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs new file mode 100644 index 0000000..5872cc7 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs @@ -0,0 +1,167 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using System.Reflection; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Utility functions that deal with available Modules and rewrite them. + /// Modules defines: + /// - DOTAUDIO + /// - DOTPHYSICS + /// - DOTPHYSICS2D + /// - DOTSPRITE + /// - DOTUI + /// Extra defines set and used for implementation of external assets: + /// - DOTWEEN_TMP ► TextMesh Pro + /// - DOTWEEN_TK2D ► 2D Toolkit + /// + public static class DOTweenModuleUtils + { + static bool _initialized; + + #region Reflection + + /// + /// Called via Reflection by DOTweenComponent on Awake + /// +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static void Init() + { + if (_initialized) return; + + _initialized = true; + DOTweenExternalCommand.SetOrientationOnPath += Physics.SetOrientationOnPath; + +#if UNITY_EDITOR +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1 + UnityEditor.EditorApplication.playmodeStateChanged += PlaymodeStateChanged; +#else + UnityEditor.EditorApplication.playModeStateChanged += PlaymodeStateChanged; +#endif +#endif + } + +#if UNITY_2018_1_OR_NEWER +#pragma warning disable + [UnityEngine.Scripting.Preserve] + // Just used to preserve methods when building, never called + static void Preserver() + { + Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + MethodInfo mi = typeof(MonoBehaviour).GetMethod("Stub"); + } +#pragma warning restore +#endif + + #endregion + +#if UNITY_EDITOR + // Fires OnApplicationPause in DOTweenComponent even when Editor is paused (otherwise it's only fired at runtime) +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1 + static void PlaymodeStateChanged() + #else + static void PlaymodeStateChanged(UnityEditor.PlayModeStateChange state) +#endif + { + if (DOTween.instance == null) return; + DOTween.instance.OnApplicationPause(UnityEditor.EditorApplication.isPaused); + } +#endif + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Physics + { + // Called via DOTweenExternalCommand callback + public static void SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans) + { +#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER + if (options.isRigidbody) ((Rigidbody)t.target).rotation = newRot; + else trans.rotation = newRot; +#else + trans.rotation = newRot; +#endif + } + + // Returns FALSE if the DOTween's Physics2D Module is disabled, or if there's no Rigidbody2D attached + public static bool HasRigidbody2D(Component target) + { +#if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER + return target.GetComponent() != null; +#else + return false; +#endif + } + + #region Called via Reflection + + + // Called via Reflection by DOTweenPathInspector + // Returns FALSE if the DOTween's Physics Module is disabled, or if there's no rigidbody attached +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static bool HasRigidbody(Component target) + { +#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER + return target.GetComponent() != null; +#else + return false; +#endif + } + + // Called via Reflection by DOTweenPath +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static TweenerCore CreateDOTweenPathTween( + MonoBehaviour target, bool tweenRigidbody, bool isLocal, Path path, float duration, PathMode pathMode + ){ + TweenerCore t = null; + bool rBodyFoundAndTweened = false; +#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER + if (tweenRigidbody) { + Rigidbody rBody = target.GetComponent(); + if (rBody != null) { + rBodyFoundAndTweened = true; + t = isLocal + ? rBody.DOLocalPath(path, duration, pathMode) + : rBody.DOPath(path, duration, pathMode); + } + } +#endif +#if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER + if (!rBodyFoundAndTweened && tweenRigidbody) { + Rigidbody2D rBody2D = target.GetComponent(); + if (rBody2D != null) { + rBodyFoundAndTweened = true; + t = isLocal + ? rBody2D.DOLocalPath(path, duration, pathMode) + : rBody2D.DOPath(path, duration, pathMode); + } + } +#endif + if (!rBodyFoundAndTweened) { + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); + } + return t; + } + + #endregion + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta new file mode 100644 index 0000000..ab62186 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7bcaf917d9cf5b84090421a5a2abe42e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/readme.txt b/Assets/Plugins/Demigiant/DOTween/readme.txt new file mode 100644 index 0000000..37ff7ef --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/readme.txt @@ -0,0 +1,29 @@ +DOTween and DOTween Pro are copyright (c) 2014-2018 Daniele Giardini - Demigiant + +// IMPORTANT!!! ///////////////////////////////////////////// +// Upgrading DOTween from versions older than 1.2.000 /////// +// (or DOTween Pro older than 1.0.000) ////////////////////// +------------------------------------------------------------- +If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. +1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry +2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath +3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup +4) From the Add/Remove Modules panel that opens, activate/deactivate Modules for Unity systems and for external assets (Pro version only) + +// GET STARTED ////////////////////////////////////////////// + +- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. +- In your code, add "using DG.Tweening" to each class where you want to use DOTween. +- You're ready to tween. Check out the links below for full documentation and license info. + + +// LINKS /////////////////////////////////////////////////////// + +DOTween website (documentation, examples, etc): http://dotween.demigiant.com +DOTween license: http://dotween.demigiant.com/license.php +DOTween repository (Google Code): https://code.google.com/p/dotween/ +Demigiant website (documentation, examples, etc): http://www.demigiant.com + +// NOTES ////////////////////////////////////////////////////// + +- DOTween's Utility Panel can be found under "Tools > Demigiant > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file diff --git a/Assets/Plugins/Demigiant/DOTween/readme.txt.meta b/Assets/Plugins/Demigiant/DOTween/readme.txt.meta new file mode 100644 index 0000000..3799165 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/readme.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: fccfc62abf2eb0a4db614853430894fd +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro.meta b/Assets/Plugins/Demigiant/DOTweenPro.meta new file mode 100644 index 0000000..659537c --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: af55cfd0e7084ab4884c5a4f29b62d9f +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- VisualScripting +- VisualEditor +- iTween +- DFTween +- LeanTween +- Ease +- Easing +- Shake +- Punch +- 2DToolkit +- TextMeshPro +- Text +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs new file mode 100644 index 0000000..c9977a1 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs @@ -0,0 +1,917 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/12 15:55 + +using System; +using System.Collections.Generic; +using DG.Tweening.Core; +using UnityEngine; +#if !DOTWEEN_NOUI // UI_MARKER +using UnityEngine.UI; +#endif +#if DOTWEEN_TEXTMESHPRO // TEXTMESHPRO_MARKER +using TMPro; +#endif + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Attach this to a GameObject to create a tween + /// + [AddComponentMenu("DOTween/DOTween Animation")] + public class DOTweenAnimation : ABSAnimationComponent + { + public enum AnimationType + { + None, + Move, LocalMove, + Rotate, LocalRotate, + Scale, + Color, Fade, + Text, + PunchPosition, PunchRotation, PunchScale, + ShakePosition, ShakeRotation, ShakeScale, + CameraAspect, CameraBackgroundColor, CameraFieldOfView, CameraOrthoSize, CameraPixelRect, CameraRect, + UIWidthHeight, + FillAmount + } + + public enum TargetType + { + Unset, + + Camera, + CanvasGroup, + Image, + Light, + RectTransform, + Renderer, SpriteRenderer, + Rigidbody, Rigidbody2D, + Text, + Transform, + + tk2dBaseSprite, + tk2dTextMesh, + + TextMeshPro, + TextMeshProUGUI + } + + #region EVENTS - EDITOR-ONLY + + /// Used internally by the editor + public static event Action OnReset; + static void Dispatch_OnReset(DOTweenAnimation anim) { if (OnReset != null) OnReset(anim); } + + #endregion + + public bool targetIsSelf = true; // If FALSE allows to set the target manually + public GameObject targetGO = null; // Used in case targetIsSelf is FALSE + // If FALSE always uses the GO containing this DOTweenAnimation (and not the one containing the target) as DOTween's SetTarget target + public bool tweenTargetIsTargetGO = true; + + public float delay; + public float duration = 1; + public Ease easeType = Ease.OutQuad; + public AnimationCurve easeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1)); + public LoopType loopType = LoopType.Restart; + public int loops = 1; + public string id = ""; + public bool isRelative; + public bool isFrom; + public bool isIndependentUpdate = false; + public bool autoKill = true; + public bool autoGenerate = true; // If TRUE automatically creates the tween at startup + + public bool isActive = true; + public bool isValid; + public Component target; + public AnimationType animationType; + public TargetType targetType; + public TargetType forcedTargetType; // Used when choosing between multiple targets + public bool autoPlay = true; + public bool useTargetAsV3; + + public float endValueFloat; + public Vector3 endValueV3; + public Vector2 endValueV2; + public Color endValueColor = new Color(1, 1, 1, 1); + public string endValueString = ""; + public Rect endValueRect = new Rect(0, 0, 0, 0); + public Transform endValueTransform; + + public bool optionalBool0, optionalBool1; + public float optionalFloat0; + public int optionalInt0; + public RotateMode optionalRotationMode = RotateMode.Fast; + public ScrambleMode optionalScrambleMode = ScrambleMode.None; + public ShakeRandomnessMode optionalShakeRandomnessMode = ShakeRandomnessMode.Full; + public string optionalString; + + bool _tweenAutoGenerationCalled; // TRUE after the tweens have been autoGenerated + int _playCount = -1; // Used when calling DOPlayNext + readonly List _tmpTweens = new List(); + + #region Unity Methods + + void Awake() + { + if (!isActive || !autoGenerate) return; + + if (animationType != AnimationType.Move || !useTargetAsV3) { + // Don't create tweens if we're using a RectTransform as a Move target, + // because that will work only inside Start + CreateTween(false, autoPlay); + _tweenAutoGenerationCalled = true; + } + } + + void Start() + { + if (_tweenAutoGenerationCalled || !isActive || !autoGenerate) return; + + CreateTween(false, autoPlay); + _tweenAutoGenerationCalled = true; + } + + void Reset() + { + Dispatch_OnReset(this); + } + + void OnDestroy() + { + if (tween != null && tween.active) tween.Kill(); + tween = null; + } + + /// + /// Creates/recreates the tween without playing it, but first rewinding and killing the existing one if present. + /// + public void RewindThenRecreateTween() + { + if (tween != null && tween.active) tween.Rewind(); + CreateTween(true, false); + } + /// + /// Creates/recreates the tween and plays it, first rewinding and killing the existing one if present. + /// + public void RewindThenRecreateTweenAndPlay() + { + if (tween != null && tween.active) tween.Rewind(); + CreateTween(true, true); + } + /// + /// Creates/recreates the tween from its target's current value without playing it, but first killing the existing one if present. + /// + public void RecreateTween() + { CreateTween(true, false); } + /// + /// Creates/recreates the tween from its target's current value and plays it, first killing the existing one if present. + /// + public void RecreateTweenAndPlay() + { CreateTween(true, true); } + // Used also by DOTweenAnimationInspector when applying runtime changes and restarting + /// + /// Creates the tween manually (called automatically if AutoGenerate is set in the Inspector) + /// from its target's current value. + /// + /// If TRUE and an existing tween was already created (and not killed), kills it and recreates it with the current + /// parameters. Otherwise, if a tween already exists, does nothing. + /// If TRUE also plays the tween, otherwise only creates it + public void CreateTween(bool regenerateIfExists = false, bool andPlay = true) + { + if (!isValid) { + if (regenerateIfExists) { // Called manually: warn users + Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation isn't valid and its tween won't be created", this.gameObject.name), this.gameObject); + } + return; + } + if (tween != null) { + if (tween.active) { + if (regenerateIfExists) tween.Kill(); + else return; + } + tween = null; + } + +// if (target == null) { +// Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation's target is NULL, because the animation was created with a DOTween Pro version older than 0.9.255. To fix this, exit Play mode then simply select this object, and it will update automatically", this.gameObject.name), this.gameObject); +// return; +// } + + GameObject tweenGO = GetTweenGO(); + if (target == null || tweenGO == null) { + if (targetIsSelf && target == null) { + // Old error caused during upgrade from DOTween Pro 0.9.255 + Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation's target is NULL, because the animation was created with a DOTween Pro version older than 0.9.255. To fix this, exit Play mode then simply select this object, and it will update automatically", this.gameObject.name), this.gameObject); + } else { + // Missing non-self target + Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation's target/GameObject is unset: the tween will not be created.", this.gameObject.name), this.gameObject); + } + return; + } + + if (forcedTargetType != TargetType.Unset) targetType = forcedTargetType; + if (targetType == TargetType.Unset) { + // Legacy DOTweenAnimation (made with a version older than 0.9.450) without stored targetType > assign it now + targetType = TypeToDOTargetType(target.GetType()); + } + + switch (animationType) { + case AnimationType.None: + break; + case AnimationType.Move: + if (useTargetAsV3) { + isRelative = false; + if (endValueTransform == null) { + Debug.LogWarning(string.Format("{0} :: This tween's TO target is NULL, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); + endValueV3 = Vector3.zero; + } else { +#if !DOTWEEN_NOUI // UI_MARKER + if (targetType == TargetType.RectTransform) { + RectTransform endValueT = endValueTransform as RectTransform; + if (endValueT == null) { + Debug.LogWarning(string.Format("{0} :: This tween's TO target should be a RectTransform, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); + endValueV3 = Vector3.zero; + } else { + RectTransform rTarget = target as RectTransform; + if (rTarget == null) { + Debug.LogWarning(string.Format("{0} :: This tween's target and TO target are not of the same type. Please reassign the values", this.gameObject.name), this.gameObject); + } else { + // Problem: doesn't work inside Awake (ararargh!) + endValueV3 = DOTweenModuleUI.Utils.SwitchToRectTransform(endValueT, rTarget); + } + } + } else +#endif + endValueV3 = endValueTransform.position; + } + } + switch (targetType) { + case TargetType.Transform: + tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); + break; + case TargetType.RectTransform: +#if !DOTWEEN_NOUI // UI_MARKER + tween = ((RectTransform)target).DOAnchorPos3D(endValueV3, duration, optionalBool0); +#else + tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); +#endif + break; + case TargetType.Rigidbody: +#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER + tween = ((Rigidbody)target).DOMove(endValueV3, duration, optionalBool0); +#else + tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); +#endif + break; + case TargetType.Rigidbody2D: +#if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER + tween = ((Rigidbody2D)target).DOMove(endValueV3, duration, optionalBool0); +#else + tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); +#endif + break; + } + break; + case AnimationType.LocalMove: + tween = tweenGO.transform.DOLocalMove(endValueV3, duration, optionalBool0); + break; + case AnimationType.Rotate: + switch (targetType) { + case TargetType.Transform: + tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode); + break; + case TargetType.Rigidbody: +#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER + tween = ((Rigidbody)target).DORotate(endValueV3, duration, optionalRotationMode); +#else + tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode); +#endif + break; + case TargetType.Rigidbody2D: +#if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER + tween = ((Rigidbody2D)target).DORotate(endValueFloat, duration); +#else + tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode); +#endif + break; + } + break; + case AnimationType.LocalRotate: + tween = tweenGO.transform.DOLocalRotate(endValueV3, duration, optionalRotationMode); + break; + case AnimationType.Scale: + switch (targetType) { +#if DOTWEEN_TK2D // TK2D_MARKER + case TargetType.tk2dTextMesh: + tween = ((tk2dTextMesh)target).DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); + break; + case TargetType.tk2dBaseSprite: + tween = ((tk2dBaseSprite)target).DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); + break; +#endif + default: + tween = tweenGO.transform.DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); + break; + } + break; +#if !DOTWEEN_NOUI // UI_MARKER + case AnimationType.UIWidthHeight: + tween = ((RectTransform)target).DOSizeDelta(optionalBool0 ? new Vector2(endValueFloat, endValueFloat) : endValueV2, duration); + break; + case AnimationType.FillAmount: + tween = ((Image)target).DOFillAmount(endValueFloat, duration); + break; +#endif + case AnimationType.Color: + isRelative = false; + switch (targetType) { + case TargetType.Renderer: + tween = ((Renderer)target).material.DOColor(endValueColor, duration); + break; + case TargetType.Light: + tween = ((Light)target).DOColor(endValueColor, duration); + break; +#if !DOTWEEN_NOSPRITES // SPRITE_MARKER + case TargetType.SpriteRenderer: + tween = ((SpriteRenderer)target).DOColor(endValueColor, duration); + break; +#endif +#if !DOTWEEN_NOUI // UI_MARKER + case TargetType.Image: + tween = ((Graphic)target).DOColor(endValueColor, duration); + break; + case TargetType.Text: + tween = ((Text)target).DOColor(endValueColor, duration); + break; +#endif +#if DOTWEEN_TK2D // TK2D_MARKER + case TargetType.tk2dTextMesh: + tween = ((tk2dTextMesh)target).DOColor(endValueColor, duration); + break; + case TargetType.tk2dBaseSprite: + tween = ((tk2dBaseSprite)target).DOColor(endValueColor, duration); + break; +#endif +#if DOTWEEN_TEXTMESHPRO // TEXTMESHPRO_MARKER + case TargetType.TextMeshProUGUI: + tween = ((TextMeshProUGUI)target).DOColor(endValueColor, duration); + break; + case TargetType.TextMeshPro: + tween = ((TextMeshPro)target).DOColor(endValueColor, duration); + break; +#endif + } + break; + case AnimationType.Fade: + isRelative = false; + switch (targetType) { + case TargetType.Renderer: + tween = ((Renderer)target).material.DOFade(endValueFloat, duration); + break; + case TargetType.Light: + tween = ((Light)target).DOIntensity(endValueFloat, duration); + break; +#if !DOTWEEN_NOSPRITES // SPRITE_MARKER + case TargetType.SpriteRenderer: + tween = ((SpriteRenderer)target).DOFade(endValueFloat, duration); + break; +#endif +#if !DOTWEEN_NOUI // UI_MARKER + case TargetType.Image: + tween = ((Graphic)target).DOFade(endValueFloat, duration); + break; + case TargetType.Text: + tween = ((Text)target).DOFade(endValueFloat, duration); + break; + case TargetType.CanvasGroup: + tween = ((CanvasGroup)target).DOFade(endValueFloat, duration); + break; +#endif +#if DOTWEEN_TK2D // TK2D_MARKER + case TargetType.tk2dTextMesh: + tween = ((tk2dTextMesh)target).DOFade(endValueFloat, duration); + break; + case TargetType.tk2dBaseSprite: + tween = ((tk2dBaseSprite)target).DOFade(endValueFloat, duration); + break; +#endif +#if DOTWEEN_TEXTMESHPRO // TEXTMESHPRO_MARKER + case TargetType.TextMeshProUGUI: + tween = ((TextMeshProUGUI)target).DOFade(endValueFloat, duration); + break; + case TargetType.TextMeshPro: + tween = ((TextMeshPro)target).DOFade(endValueFloat, duration); + break; +#endif + } + break; + case AnimationType.Text: +#if !DOTWEEN_NOUI // UI_MARKER + switch (targetType) { + case TargetType.Text: + tween = ((Text)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); + break; + } +#endif +#if DOTWEEN_TK2D // TK2D_MARKER + switch (targetType) { + case TargetType.tk2dTextMesh: + tween = ((tk2dTextMesh)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); + break; + } +#endif +#if DOTWEEN_TEXTMESHPRO // TEXTMESHPRO_MARKER + switch (targetType) { + case TargetType.TextMeshProUGUI: + tween = ((TextMeshProUGUI)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); + break; + case TargetType.TextMeshPro: + tween = ((TextMeshPro)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); + break; + } +#endif + break; + case AnimationType.PunchPosition: + switch (targetType) { + case TargetType.Transform: + tween = ((Transform)target).DOPunchPosition(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0); + break; +#if !DOTWEEN_NOUI // UI_MARKER + case TargetType.RectTransform: + tween = ((RectTransform)target).DOPunchAnchorPos(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0); + break; +#endif + } + break; + case AnimationType.PunchScale: + tween = tweenGO.transform.DOPunchScale(endValueV3, duration, optionalInt0, optionalFloat0); + break; + case AnimationType.PunchRotation: + tween = tweenGO.transform.DOPunchRotation(endValueV3, duration, optionalInt0, optionalFloat0); + break; + case AnimationType.ShakePosition: + switch (targetType) { + case TargetType.Transform: + tween = ((Transform)target).DOShakePosition(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0, optionalBool1, optionalShakeRandomnessMode); + break; +#if !DOTWEEN_NOUI // UI_MARKER + case TargetType.RectTransform: + tween = ((RectTransform)target).DOShakeAnchorPos(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0, optionalBool1, optionalShakeRandomnessMode); + break; +#endif + } + break; + case AnimationType.ShakeScale: + tween = tweenGO.transform.DOShakeScale(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool1, optionalShakeRandomnessMode); + break; + case AnimationType.ShakeRotation: + tween = tweenGO.transform.DOShakeRotation(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool1, optionalShakeRandomnessMode); + break; + case AnimationType.CameraAspect: + tween = ((Camera)target).DOAspect(endValueFloat, duration); + break; + case AnimationType.CameraBackgroundColor: + tween = ((Camera)target).DOColor(endValueColor, duration); + break; + case AnimationType.CameraFieldOfView: + tween = ((Camera)target).DOFieldOfView(endValueFloat, duration); + break; + case AnimationType.CameraOrthoSize: + tween = ((Camera)target).DOOrthoSize(endValueFloat, duration); + break; + case AnimationType.CameraPixelRect: + tween = ((Camera)target).DOPixelRect(endValueRect, duration); + break; + case AnimationType.CameraRect: + tween = ((Camera)target).DORect(endValueRect, duration); + break; + } + + if (tween == null) return; + + // Created + + if (isFrom) { + ((Tweener)tween).From(isRelative); + } else { + tween.SetRelative(isRelative); + } + GameObject setTarget = GetTweenTarget(); + tween.SetTarget(setTarget).SetDelay(delay).SetLoops(loops, loopType).SetAutoKill(autoKill) + .OnKill(()=> tween = null); + if (isSpeedBased) tween.SetSpeedBased(); + if (easeType == Ease.INTERNAL_Custom) tween.SetEase(easeCurve); + else tween.SetEase(easeType); + if (!string.IsNullOrEmpty(id)) tween.SetId(id); + tween.SetUpdate(isIndependentUpdate); + + if (hasOnStart) { + if (onStart != null) tween.OnStart(onStart.Invoke); + } else onStart = null; + if (hasOnPlay) { + if (onPlay != null) tween.OnPlay(onPlay.Invoke); + } else onPlay = null; + if (hasOnUpdate) { + if (onUpdate != null) tween.OnUpdate(onUpdate.Invoke); + } else onUpdate = null; + if (hasOnStepComplete) { + if (onStepComplete != null) tween.OnStepComplete(onStepComplete.Invoke); + } else onStepComplete = null; + if (hasOnComplete) { + if (onComplete != null) tween.OnComplete(onComplete.Invoke); + } else onComplete = null; + if (hasOnRewind) { + if (onRewind != null) tween.OnRewind(onRewind.Invoke); + } else onRewind = null; + + if (andPlay) tween.Play(); + else tween.Pause(); + + if (hasOnTweenCreated && onTweenCreated != null) onTweenCreated.Invoke(); + } + + #endregion + + #region Public Methods + + #region Special + + /// + /// Returns the tweens (if generated and not killed) created by all DOTweenAnimations on this gameObject, + /// in the same order as they appear in the Inspector (top to bottom). + /// Note that a tween is generated inside the Awake call (except RectTransform tweens which are generated inside Start), + /// so this method won't return them before that + /// + public List GetTweens() + { + List result = new List(); + DOTweenAnimation[] anims = this.GetComponents(); + foreach (DOTweenAnimation anim in anims) { + if (anim.tween != null && anim.tween.active) result.Add(anim.tween); + } + return result; + } + + /// + /// Sets the animation target (which must be of the same type of the one set in the Inspector). + /// This is useful if you want to change it BEFORE this + /// creates a tween, while after that it won't have any effect. + /// Consider that a creates its tween inside its Awake (except for special tweens), + /// so you will need to sure your code runs before this object's Awake (via ScriptExecutionOrder or enabling/disabling methods) + /// + /// + /// New target for the animation (must be of the same type of the previous one) + /// If TRUE also uses tweenTarget's gameObject when settings the target-ID of the tween + /// (which is used with DOPlay/DORestart/etc to apply the same operation on all tweens that have the same target-id). + /// You should usually leave this to TRUE if you change the target. + /// + public void SetAnimationTarget(Component tweenTarget, bool useTweenTargetGameObjectForGroupOperations = true) + { + TargetType newTargetType = TypeToDOTargetType(target.GetType()); + if (newTargetType != targetType) { + Debug.LogError("DOTweenAnimation ► SetAnimationTarget: the new target is of a different type from the one set in the Inspector"); + return; + } + target = tweenTarget; + targetGO = target.gameObject; + tweenTargetIsTargetGO = useTweenTargetGameObjectForGroupOperations; + } + + #endregion + + /// + /// Plays all tweens whose target-id is the same as the one set by this animation + /// + public override void DOPlay() + { + DOTween.Play(GetTweenTarget()); + } + + /// + /// Plays backwards all tweens whose target-id is the same as the one set by this animation + /// + public override void DOPlayBackwards() + { + DOTween.PlayBackwards(GetTweenTarget()); + } + + /// + /// Plays foward all tweens whose target-id is the same as the one set by this animation + /// + public override void DOPlayForward() + { + DOTween.PlayForward(GetTweenTarget()); + } + + /// + /// Pauses all tweens whose target-id is the same as the one set by this animation + /// + public override void DOPause() + { + DOTween.Pause(GetTweenTarget()); + } + + /// + /// Pauses/unpauses (depending on the current state) all tweens whose target-id is the same as the one set by this animation + /// + public override void DOTogglePause() + { + DOTween.TogglePause(GetTweenTarget()); + } + + /// + /// Rewinds all tweens created by this animation in the correct order + /// + public override void DORewind() + { + _playCount = -1; + // Rewind using Components order (in case there are multiple animations on the same property) + DOTweenAnimation[] anims = this.gameObject.GetComponents(); + for (int i = anims.Length - 1; i > -1; --i) { + Tween t = anims[i].tween; + if (t != null && t.IsInitialized()) anims[i].tween.Rewind(); + } + // DOTween.Rewind(GetTweenTarget()); + } + + /// + /// Restarts all tweens whose target-id is the same as the one set by this animation + /// + public override void DORestart() + { DORestart(false); } + /// + /// Restarts all tweens whose target-id is the same as the one set by this animation + /// + /// If TRUE, re-evaluates the tween's start and end values from its current position. + /// Set it to TRUE when spawning the same DOTweenAnimation in different positions (like when using a pooling system) + public override void DORestart(bool fromHere) + { + _playCount = -1; + if (tween == null) { + if (Debugger.logPriority > 1) Debugger.LogNullTween(tween); return; + } + if (fromHere && isRelative) ReEvaluateRelativeTween(); + DOTween.Restart(GetTweenTarget()); + } + + /// + /// Completes all tweens whose target-id is the same as the one set by this animation + /// + public override void DOComplete() + { + DOTween.Complete(GetTweenTarget()); + } + + /// + /// Sends to the given time (and pauses) all the tweens whose target-id is the one set by this animation + /// + /// Time to send the tween to + public override void DOGotoAndPause(float time) + { DOGoto(time, false); } + /// + /// Sends to the given time (and plays) all the tweens whose target-id is the one set by this animation + /// + /// Time to send the tween to + public override void DOGotoAndPlay(float time) + { DOGoto(time, true); } + void DOGoto(float time, bool andPlay) + { + _tmpTweens.Clear(); + DOTween.TweensByTarget(GetTweenTarget(), false, _tmpTweens); + int len = _tmpTweens.Count; + if (len == 0) { + Debugger.LogWarning((andPlay ? "DOGotoAndPlay" : "DoGotoAndPause") + " ► tween doesn't exist"); + } else { + for (int i = 0; i < _tmpTweens.Count; ++i) { + _tmpTweens[i].Goto(time, andPlay); + } + } + _tmpTweens.Clear(); + } + + /// + /// Kills all tweens whose target-id is the same as the one set by this animation + /// + public override void DOKill() + { + DOTween.Kill(GetTweenTarget()); + tween = null; + } + + #region Specifics + + /// + /// Plays all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DOPlayById(string id) + { + DOTween.Play(GetTweenTarget(), id); + } + /// + /// Plays all tweens with the given ID (regardless of their target gameObject) + /// + public void DOPlayAllById(string id) + { + DOTween.Play(id); + } + + /// + /// Pauses all tweens that with the given ID (regardless of their target gameObject) + /// + public void DOPauseAllById(string id) + { + DOTween.Pause(id); + } + + /// + /// Plays backwards all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DOPlayBackwardsById(string id) + { + DOTween.PlayBackwards(GetTweenTarget(), id); + } + /// + /// Plays backwards all tweens with the given ID (regardless of their target gameObject) + /// + public void DOPlayBackwardsAllById(string id) + { + DOTween.PlayBackwards(id); + } + + /// + /// Plays forward all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DOPlayForwardById(string id) + { + DOTween.PlayForward(GetTweenTarget(), id); + } + /// + /// Plays forward all tweens with the given ID (regardless of their target gameObject) + /// + public void DOPlayForwardAllById(string id) + { + DOTween.PlayForward(id); + } + + /// + /// Plays the next animation on this animation's gameObject (if any) + /// + public void DOPlayNext() + { + DOTweenAnimation[] anims = this.GetComponents(); + while (_playCount < anims.Length - 1) { + _playCount++; + DOTweenAnimation anim = anims[_playCount]; + if (anim != null && anim.tween != null && anim.tween.active && !anim.tween.IsPlaying() && !anim.tween.IsComplete()) { + anim.tween.Play(); + break; + } + } + } + + /// + /// Rewinds all tweens with the given ID and whose target-id is the same as the one set by this animation, + /// then plays the next animation on this animation's gameObject (if any) + /// + public void DORewindAndPlayNext() + { + _playCount = -1; + DOTween.Rewind(GetTweenTarget()); + DOPlayNext(); + } + + /// + /// Rewinds all tweens with the given ID (regardless of their target gameObject) + /// + public void DORewindAllById(string id) + { + _playCount = -1; + DOTween.Rewind(id); + } + + /// + /// Restarts all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DORestartById(string id) + { + _playCount = -1; + DOTween.Restart(GetTweenTarget(), id); + } + /// + /// Restarts all tweens with the given ID (regardless of their target gameObject) + /// + public void DORestartAllById(string id) + { + _playCount = -1; + DOTween.Restart(id); + } + + /// + /// Kills all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DOKillById(string id) + { + DOTween.Kill(GetTweenTarget(), id); + } + /// + /// Kills all tweens with the given ID (regardless of their target gameObject) + /// + public void DOKillAllById(string id) + { + DOTween.Kill(id); + } + + #endregion + + #region Internal (also used by Inspector) + + public static TargetType TypeToDOTargetType(Type t) + { + string str = t.ToString(); + int dotIndex = str.LastIndexOf("."); + if (dotIndex != -1) str = str.Substring(dotIndex + 1); + if (str.IndexOf("Renderer") != -1 && (str != "SpriteRenderer")) str = "Renderer"; +//#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER +// if (str == "Rigidbody") str = "Transform"; +//#endif +//#if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER +// if (str == "Rigidbody2D") str = "Transform"; +//#endif +#if !DOTWEEN_NOUI // UI_MARKER +// if (str == "RectTransform") str = "Transform"; + if (str == "RawImage" || str == "Graphic") str = "Image"; // RawImages/Graphics are managed like Images for DOTweenAnimation (color and fade use Graphic target anyway) +#endif + return (TargetType)Enum.Parse(typeof(TargetType), str); + } + + // Editor preview system + /// + /// Previews the tween in the editor. Only for DOTween internal usage: don't use otherwise. + /// + public Tween CreateEditorPreview() + { + if (Application.isPlaying) return null; + + // CHANGE: first param switched to TRUE otherwise changing an animation and replaying in editor would still play old one + CreateTween(true, autoPlay); + return tween; + } + + #endregion + + #endregion + + #region Private + + /// + /// Returns the gameObject whose target component should be animated + /// + /// + GameObject GetTweenGO() + { + return targetIsSelf ? this.gameObject : targetGO; + } + + /// + /// Returns the GameObject which should be used/retrieved for SetTarget + /// + GameObject GetTweenTarget() + { + return targetIsSelf || !tweenTargetIsTargetGO ? this.gameObject : targetGO; + } + + // Re-evaluate relative position of path + void ReEvaluateRelativeTween() + { + GameObject tweenGO = GetTweenGO(); + if (tweenGO == null) { + Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation's target/GameObject is unset: the tween will not be created.", this.gameObject.name), this.gameObject); + return; + } + if (animationType == AnimationType.Move) { + ((Tweener)tween).ChangeEndValue(tweenGO.transform.position + endValueV3, true); + } else if (animationType == AnimationType.LocalMove) { + ((Tweener)tween).ChangeEndValue(tweenGO.transform.localPosition + endValueV3, true); + } + } + + #endregion + } + + public static class DOTweenAnimationExtensions + { +// // Doesn't work on Win 8.1 +// public static bool IsSameOrSubclassOf(this Type t, Type tBase) +// { +// return t.IsSubclassOf(tBase) || t == tBase; +// } + + public static bool IsSameOrSubclassOf(this Component t) + { + return t is T; + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs.meta new file mode 100644 index 0000000..a10ceea --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d0390bd8b8ffd640b34fe25065ff1df +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs new file mode 100644 index 0000000..3507c8e --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs @@ -0,0 +1,9 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/27 19:02 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + + +#if DOTWEEN_DEAUDIO // MODULE_MARKER +#endif diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs.meta new file mode 100644 index 0000000..32c1ec8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1d1aa01bacf85c04ea18116651a7f0db +timeCreated: 1587116610 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs new file mode 100644 index 0000000..3e342fb --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs @@ -0,0 +1,9 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/27 19:02 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + + +#if DOTWEEN_DEUNITYEXTENDED // MODULE_MARKER +#endif diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs.meta new file mode 100644 index 0000000..9cba4ea --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0a0cc3e90c4a6ea41bb14d7f35c577c3 +timeCreated: 1587116610 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML new file mode 100644 index 0000000..8179cfe --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML @@ -0,0 +1,80 @@ + + + + DOTweenPro + + + + + Restarts the tween + + + + + Restarts the tween + + If TRUE, re-evaluates the tween's start and end values from its current position. + Set it to TRUE when spawning the same DOTweenPath in different positions (like when using a pooling system) + + + + Attach this to a GameObject to create and assign a path to it + + + + Used internally by the editor + + + + Restarts the tween + + + + + Restarts the tween + + If TRUE, re-evaluates the tween's start and end values from its current position. + Set it to TRUE when spawning the same DOTweenPath in different positions (like when using a pooling system) + + + + Sends the tween to the given time then pauses it + + Time to send the tween to + + + + Sends the tween to the given time then plays it + + Time to send the tween to + + + + Kills all tweens (path/animations/etc.) with the given ID (regardless of their target gameObject) + + + + + Returns a list of points that are used to draw the path inside the editor, + or NULL if the path hasn't been initialized yet or if its tween has been killed + + + + + Tweens a Vector3 along a spiral. + EndValue represents the direction of the spiral + + + + + Spiral tween mode + + + + The spiral motion will expand outwards for the whole the tween + + + The spiral motion will expand outwards for half the tween and then will spiral back to the starting position + + + diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML.meta new file mode 100644 index 0000000..ddc78e5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: db7d7ef84c388bc4fbc3835d31a15306 +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll new file mode 100644 index 0000000..5c4a5a1 Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll differ diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.mdb.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.mdb.meta new file mode 100644 index 0000000..6979090 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.mdb.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: d719ed2e2c87eae4e8dd520e2df659c1 +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.meta new file mode 100644 index 0000000..9ecbfd3 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: aa0b1eebb5db27a419fa4564bbe5c9c5 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 1 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs new file mode 100644 index 0000000..66a4ed0 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs @@ -0,0 +1,90 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using DG.Tweening.Core; +using DG.Tweening.Plugins; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenProShortcuts + { + static DOTweenProShortcuts() + { + // Create stub instances of custom plugins, in order to allow IL2CPP to understand they must be included in the build +#pragma warning disable 219 + SpiralPlugin stub = new SpiralPlugin(); +#pragma warning restore 219 + } + + #region Shortcuts + + #region Transform + + /// Tweens a Transform's localPosition in a spiral shape. + /// Also stores the transform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The axis around which the spiral will rotate + /// The type of spiral movement + /// Speed of the rotations + /// Frequency of the rotation. Lower values lead to wider spirals + /// Indicates how much the tween should move along the spiral's axis + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOSpiral( + this Transform target, float duration, Vector3? axis = null, SpiralMode mode = SpiralMode.Expand, + float speed = 1, float frequency = 10, float depth = 0, bool snapping = false + ) { + if (Mathf.Approximately(speed, 0)) speed = 1; + if (axis == null || axis == Vector3.zero) axis = Vector3.forward; + + TweenerCore t = DOTween.To(SpiralPlugin.Get(), () => target.localPosition, x => target.localPosition = x, (Vector3)axis, duration) + .SetTarget(target); + + t.plugOptions.mode = mode; + t.plugOptions.speed = speed; + t.plugOptions.frequency = frequency; + t.plugOptions.depth = depth; + t.plugOptions.snapping = snapping; + return t; + } + + #endregion + +#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER + #region Rigidbody + + /// Tweens a Rigidbody's position in a spiral shape. + /// Also stores the transform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The axis around which the spiral will rotate + /// The type of spiral movement + /// Speed of the rotations + /// Frequency of the rotation. Lower values lead to wider spirals + /// Indicates how much the tween should move along the spiral's axis + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOSpiral( + this Rigidbody target, float duration, Vector3? axis = null, SpiralMode mode = SpiralMode.Expand, + float speed = 1, float frequency = 10, float depth = 0, bool snapping = false + ) { + if (Mathf.Approximately(speed, 0)) speed = 1; + if (axis == null || axis == Vector3.zero) axis = Vector3.forward; + + TweenerCore t = DOTween.To(SpiralPlugin.Get(), () => target.position, target.MovePosition, (Vector3)axis, duration) + .SetTarget(target); + + t.plugOptions.mode = mode; + t.plugOptions.speed = speed; + t.plugOptions.frequency = frequency; + t.plugOptions.depth = depth; + t.plugOptions.snapping = snapping; + return t; + } + + #endregion +#endif + + #endregion + } +} diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs.meta new file mode 100644 index 0000000..bc6e863 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c3190a1a1c53f449926f6d5542b4ce5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs new file mode 100644 index 0000000..f715f36 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs @@ -0,0 +1,1037 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/27 19:02 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + + +#if DOTWEEN_TEXTMESHPRO // MODULE_MARKER +using System; +using System.Globalization; +using System.Collections.Generic; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +using UnityEngine; +using TMPro; +using Object = UnityEngine.Object; + +namespace DG.Tweening +{ + public enum TMPSkewSpanMode + { + /// Applies the skew as-is (like normal skew works): the longer the text-span the higher the last character will be + Default, + /// Applies the skew scaled by the size of the text-span: the max skew/displacement will be the given skew factor + AsMaxSkewFactor + } + + /// + /// Methods that extend TMP_Text objects and allow to directly create and control tweens from their instances. + /// + public static class ShortcutExtensionsTMPText + { + #region Colors + + /// Tweens a TextMeshPro's color to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this TMP_Text target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's faceColor to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFaceColor(this TMP_Text target, Color32 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.faceColor, x => target.faceColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's outlineColor to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOOutlineColor(this TMP_Text target, Color32 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.outlineColor, x => target.outlineColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's glow color to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE will use the fontSharedMaterial instead than the fontMaterial + public static TweenerCore DOGlowColor(this TMP_Text target, Color endValue, float duration, bool useSharedMaterial = false) + { + TweenerCore t = useSharedMaterial + ? target.fontSharedMaterial.DOColor(endValue, "_GlowColor", duration) + : target.fontMaterial.DOColor(endValue, "_GlowColor", duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's alpha color to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this TMP_Text target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro faceColor's alpha to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFaceFade(this TMP_Text target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.faceColor, x => target.faceColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region Other + + /// Tweens a TextMeshPro's scale to the given value (using correct uniform scale as TMP requires). + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScale(this TMP_Text target, float endValue, float duration) + { + Transform trans = target.transform; + Vector3 endValueV3 = new Vector3(endValue, endValue, endValue); + TweenerCore t = DOTween.To(() => trans.localScale, x => trans.localScale = x, endValueV3, duration); + t.SetTarget(target); + return t; + } + + /// + /// Tweens a TextMeshPro's text from one integer to another, with options for thousands separators + /// + /// The value to start from + /// The end value to reach + /// The duration of the tween + /// If TRUE (default) also adds thousands separators + /// The to use (InvariantCulture if NULL) + public static TweenerCore DOCounter( + this TMP_Text target, int fromValue, int endValue, float duration, bool addThousandsSeparator = true, CultureInfo culture = null + ){ + int v = fromValue; + CultureInfo cInfo = !addThousandsSeparator ? null : culture ?? CultureInfo.InvariantCulture; + TweenerCore t = DOTween.To(() => v, x => { + v = x; + target.text = addThousandsSeparator + ? v.ToString("N0", cInfo) + : v.ToString(); + }, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's fontSize to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFontSize(this TMP_Text target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.fontSize, x => target.fontSize = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's maxVisibleCharacters to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOMaxVisibleCharacters(this TMP_Text target, int endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.maxVisibleCharacters, x => target.maxVisibleCharacters = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's text to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end string to tween toThe duration of the tween + /// If TRUE (default), rich text will be interpreted correctly while animated, + /// otherwise all tags will be considered as normal text + /// The type of scramble mode to use, if any + /// A string containing the characters to use for scrambling. + /// Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + /// Leave it to NULL (default) to use default ones + public static TweenerCore DOText(this TMP_Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + TweenerCore t = DOTween.To(() => target.text, x => target.text = x, endValue, duration); + t.SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + return t; + } + + #endregion + } + + #region DOTweenTMPAnimator + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ CLASS ███████████████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + /// + /// Wrapper for objects that enables per-character tweening + /// (you don't need this if instead you want to animate the whole text object). + /// It also contains various handy methods to simply deform text without animating it ;) + /// EXAMPLE: + /// DOTweenTMPAnimator animator = new DOTweenTMPAnimator(myTextMeshProTextField); + /// Tween tween = animator.DOCharScale(characterIndex, scaleValue, duration); + /// + /// + public class DOTweenTMPAnimator : IDisposable + { + static readonly Dictionary _targetToAnimator = new Dictionary(); + + /// that this animator is linked to + public TMP_Text target { get; private set; } + public TMP_TextInfo textInfo { get; private set; } + readonly List _charTransforms = new List(); + TMP_MeshInfo[] _cachedMeshInfos; + bool _ignoreTextChangedEvent; + + /// + /// Creates a new instance of the , which is necessary to animate by single characters. + /// If a already exists for the same object it will be disposed + /// (but not its tweens, those you will have to kill manually). + /// If you want to animate the whole text object you don't need this, and you can use direct DO shortcuts instead. + /// IMPORTANT: the target must have been enabled/activated at least once before you can use it with this + /// + /// The that will be linked to this animator + public DOTweenTMPAnimator(TMP_Text target) + { + if (target == null) { + Debugger.LogError("DOTweenTMPAnimator target can't be null"); + return; + } + if (!target.gameObject.activeInHierarchy) { + Debugger.LogError("You can't create a DOTweenTMPAnimator if its target is disabled"); + return; + } + // Verify that there's no other animators for the same target, and in case dispose them + if (_targetToAnimator.ContainsKey(target)) { + if (Debugger.logPriority >= 2) { + Debugger.Log(string.Format( + "A DOTweenTMPAnimator for \"{0}\" already exists: disposing it because you can't have more than one DOTweenTMPAnimator" + + " for the same TextMesh Pro object. If you have tweens running on the disposed DOTweenTMPAnimator you should kill them manually", + target + )); + } + _targetToAnimator[target].Dispose(); + _targetToAnimator.Remove(target); + } + // + this.target = target; + _targetToAnimator.Add(target, this); + Refresh(); + // Listeners + TMPro_EventManager.TEXT_CHANGED_EVENT.Add(OnTextChanged); + } + + /// + /// If a instance exists for the given target disposes it + /// + public static void DisposeInstanceFor(TMP_Text target) + { + if (!_targetToAnimator.ContainsKey(target)) return; + _targetToAnimator[target].Dispose(); + _targetToAnimator.Remove(target); + } + + /// + /// Clears and disposes of this object + /// + public void Dispose() + { + target = null; + _charTransforms.Clear(); + textInfo = null; + _cachedMeshInfos = null; + TMPro_EventManager.TEXT_CHANGED_EVENT.Remove(OnTextChanged); + } + + /// + /// Refreshes the animator text data and resets all transformation data. Call this after you change the target + /// + public void Refresh() + { + _ignoreTextChangedEvent = true; + target.ForceMeshUpdate(true); + textInfo = target.textInfo; + _cachedMeshInfos = textInfo.CopyMeshInfoVertexData(); + int totChars = textInfo.characterCount; + int totCurrent = _charTransforms.Count; + if (totCurrent > totChars) { + _charTransforms.RemoveRange(totChars, totCurrent - totChars); + totCurrent = totChars; + } + for (int i = 0; i < totCurrent; ++i) { + CharTransform c = _charTransforms[i]; + c.ResetTransformationData(); + c.Refresh(textInfo, _cachedMeshInfos); + _charTransforms[i] = c; + } + for (int i = totCurrent; i < totChars; ++i) _charTransforms.Add(new CharTransform(i, textInfo, _cachedMeshInfos)); + _ignoreTextChangedEvent = false; + } + + /// + /// Resets all deformations + /// + public void Reset() + { + int totCurrent = _charTransforms.Count; + for (int i = 0; i < totCurrent; ++i) _charTransforms[i].ResetAll(target, textInfo.meshInfo, _cachedMeshInfos); + } + + void OnTextChanged(Object obj) + { + if (_ignoreTextChangedEvent || target == null || obj != target) return; + Refresh(); + } + + bool ValidateChar(int charIndex, bool isTween = true) + { + if (textInfo.characterCount <= charIndex) { + Debugger.LogError(string.Format("CharIndex {0} doesn't exist", charIndex)); + return false; + } + if (!textInfo.characterInfo[charIndex].isVisible) { + if (Debugger.logPriority > 1) { + if (isTween) { + Debugger.Log(string.Format( + "CharIndex {0} isn't visible, ignoring it and returning an empty tween (TextMesh Pro will behave weirdly if invisible chars are included in the animation)", + charIndex + )); + } else { + Debugger.Log(string.Format("CharIndex {0} isn't visible, ignoring it", charIndex)); + } + } + return false; + } + return true; + } + + bool ValidateSpan(int fromCharIndex, int toCharIndex, out int firstVisibleCharIndex, out int lastVisibleCharIndex) + { + firstVisibleCharIndex = -1; // First visible/existing charIndex from given index + lastVisibleCharIndex = -1; // Last visible/existing charIndex backwards from given index + int charCount = textInfo.characterCount; + if (fromCharIndex >= charCount) return false; + if (toCharIndex >= charCount) toCharIndex = charCount - 1; + for (int i = fromCharIndex; i < toCharIndex + 1; ++i) { + if (!_charTransforms[i].isVisible) continue; + firstVisibleCharIndex = i; + break; + } + if (firstVisibleCharIndex == -1) return false; + for (int i = toCharIndex; i > firstVisibleCharIndex - 1; --i) { + if (!_charTransforms[i].isVisible) continue; + lastVisibleCharIndex = i; + break; + } + if (lastVisibleCharIndex == -1) return false; + return true; + } + + #region Word Setters + + /// + /// Skews a span of characters uniformly (like normal skew works in graphic applications) + /// + /// First char index of the span to skew + /// Last char index of the span to skew + /// Skew factor + /// If TRUE skews the top side of the span, otherwise the bottom one + public void SkewSpanX(int fromCharIndex, int toCharIndex, float skewFactor, bool skewTop = true) + { + int firstVisibleCharIndex, lastVisibleCharIndex; + if (!ValidateSpan(fromCharIndex, toCharIndex, out firstVisibleCharIndex, out lastVisibleCharIndex)) return; + for (int i = firstVisibleCharIndex; i < lastVisibleCharIndex + 1; ++i) { + if (!_charTransforms[i].isVisible) continue; + CharVertices v = _charTransforms[i].GetVertices(); + float skew = SkewCharX(i, skewFactor, skewTop); + } + } + + /// + /// Skews a span of characters uniformly (like normal skew works in graphic applications) + /// + /// First char index of the span to skew + /// Last char index of the span to skew + /// Skew factor + /// Skew mode + /// If TRUE skews the right side of the span, otherwise the left one + public void SkewSpanY( + int fromCharIndex, int toCharIndex, float skewFactor, + TMPSkewSpanMode mode = TMPSkewSpanMode.Default, bool skewRight = true + ){ + int firstVisibleCharIndex, lastVisibleCharIndex; + if (!ValidateSpan(fromCharIndex, toCharIndex, out firstVisibleCharIndex, out lastVisibleCharIndex)) return; + if (mode == TMPSkewSpanMode.AsMaxSkewFactor) { + CharVertices firstVisibleCharVertices = _charTransforms[firstVisibleCharIndex].GetVertices(); + CharVertices lastVisibleCharVertices = _charTransforms[lastVisibleCharIndex].GetVertices(); + float spanW = Mathf.Abs(lastVisibleCharVertices.bottomRight.x - firstVisibleCharVertices.bottomLeft.x); + float spanH = Mathf.Abs(lastVisibleCharVertices.topRight.y - lastVisibleCharVertices.bottomRight.y); + float ratio = spanH / spanW; + skewFactor *= ratio; + } + float offsetY = 0; + CharVertices prevCharVertices = new CharVertices(); + float prevCharSkew = 0; + if (skewRight) { + for (int i = firstVisibleCharIndex; i < lastVisibleCharIndex + 1; ++i) { + if (!_charTransforms[i].isVisible) continue; + CharVertices v = _charTransforms[i].GetVertices(); + float skew = SkewCharY(i, skewFactor, skewRight); + if (i > firstVisibleCharIndex) { + float prevCharW = Mathf.Abs(prevCharVertices.bottomLeft.x - prevCharVertices.bottomRight.x); + float charsDist = Mathf.Abs(v.bottomLeft.x - prevCharVertices.bottomRight.x); + offsetY += prevCharSkew + (prevCharSkew * charsDist) / prevCharW; + SetCharOffset(i, new Vector3(0, _charTransforms[i].offset.y + offsetY, 0)); + } + prevCharVertices = v; + prevCharSkew = skew; + } + } else { + for (int i = lastVisibleCharIndex; i > firstVisibleCharIndex - 1; --i) { + if (!_charTransforms[i].isVisible) continue; + CharVertices v = _charTransforms[i].GetVertices(); + float skew = SkewCharY(i, skewFactor, skewRight); + if (i < lastVisibleCharIndex) { + float prevCharW = Mathf.Abs(prevCharVertices.bottomLeft.x - prevCharVertices.bottomRight.x); + float charsDist = Mathf.Abs(v.bottomRight.x - prevCharVertices.bottomLeft.x); + offsetY += prevCharSkew + (prevCharSkew * charsDist) / prevCharW; + SetCharOffset(i, new Vector3(0, _charTransforms[i].offset.y + offsetY, 0)); + } + prevCharVertices = v; + prevCharSkew = skew; + } + } + } + + #endregion + + #region Char Getters + + /// + /// Returns the current color of the given character, if it exists and is visible. + /// + /// Character index + public Color GetCharColor(int charIndex) + { + if (!ValidateChar(charIndex)) return Color.white; + return _charTransforms[charIndex].GetColor(textInfo.meshInfo); + } + + /// + /// Returns the current offset of the given character, if it exists and is visible. + /// + /// Character index + public Vector3 GetCharOffset(int charIndex) + { + if (!ValidateChar(charIndex)) return Vector3.zero; + return _charTransforms[charIndex].offset; + } + + /// + /// Returns the current rotation of the given character, if it exists and is visible. + /// + /// Character index + public Vector3 GetCharRotation(int charIndex) + { + if (!ValidateChar(charIndex)) return Vector3.zero; + return _charTransforms[charIndex].rotation.eulerAngles; + } + + /// + /// Returns the current scale of the given character, if it exists and is visible. + /// + /// Character index + public Vector3 GetCharScale(int charIndex) + { + if (!ValidateChar(charIndex)) return Vector3.zero; + return _charTransforms[charIndex].scale; + } + + #endregion + + #region Char Setters + + /// + /// Immediately sets the color of the given character. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Color to set + public void SetCharColor(int charIndex, Color32 color) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.UpdateColor(target, color, textInfo.meshInfo); + _charTransforms[charIndex] = c; + } + + /// + /// Immediately sets the offset of the given character. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Offset to set + public void SetCharOffset(int charIndex, Vector3 offset) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.UpdateGeometry(target, offset, c.rotation, c.scale, _cachedMeshInfos); + _charTransforms[charIndex] = c; + } + + /// + /// Immediately sets the rotation of the given character. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Rotation to set + public void SetCharRotation(int charIndex, Vector3 rotation) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.UpdateGeometry(target, c.offset, Quaternion.Euler(rotation), c.scale, _cachedMeshInfos); + _charTransforms[charIndex] = c; + } + + /// + /// Immediately sets the scale of the given character. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Scale to set + public void SetCharScale(int charIndex, Vector3 scale) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.UpdateGeometry(target, c.offset, c.rotation, scale, _cachedMeshInfos); + _charTransforms[charIndex] = c; + } + + /// + /// Immediately shifts the vertices of the given character by the given factor. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Top left offset + /// Top right offset + /// Bottom left offset + /// Bottom right offset + public void ShiftCharVertices(int charIndex, Vector3 topLeftShift, Vector3 topRightShift, Vector3 bottomLeftShift, Vector3 bottomRightShift) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.ShiftVertices(target, topLeftShift, topRightShift, bottomLeftShift, bottomRightShift); + _charTransforms[charIndex] = c; + } + + /// + /// Skews the given character horizontally along the X axis and returns the skew amount applied (based on the character's size) + /// + /// Character index + /// skew amount + /// If TRUE skews the top side of the character, otherwise the bottom one + public float SkewCharX(int charIndex, float skewFactor, bool skewTop = true) + { + if (!ValidateChar(charIndex)) return 0; + Vector3 skewV = new Vector3(skewFactor, 0, 0); + CharTransform c = _charTransforms[charIndex]; + if (skewTop) c.ShiftVertices(target, skewV, skewV, Vector3.zero, Vector3.zero); + else c.ShiftVertices(target, Vector3.zero, Vector3.zero, skewV, skewV); + _charTransforms[charIndex] = c; + return skewFactor; + } + + /// + /// Skews the given character vertically along the Y axis and returns the skew amount applied (based on the character's size) + /// + /// Character index + /// skew amount + /// If TRUE skews the right side of the character, otherwise the left one + /// If TRUE applies exactly the given , + /// otherwise modifies it based on the aspectRation of the character + public float SkewCharY(int charIndex, float skewFactor, bool skewRight = true, bool fixedSkew = false) + { + if (!ValidateChar(charIndex)) return 0; + float skew = fixedSkew ? skewFactor : skewFactor * textInfo.characterInfo[charIndex].aspectRatio; + Vector3 skewV = new Vector3(0, skew, 0); + CharTransform c = _charTransforms[charIndex]; + if (skewRight) c.ShiftVertices(target, Vector3.zero, skewV, Vector3.zero, skewV); + else c.ShiftVertices(target, skewV, Vector3.zero, skewV, Vector3.zero); + _charTransforms[charIndex] = c; + return skew; + } + + /// + /// Resets the eventual vertices shift applied to the given character via . + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + public void ResetVerticesShift(int charIndex) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.ResetVerticesShift(target); + _charTransforms[charIndex] = c; + } + + #endregion + + #region Char Tweens + + /// Tweens a character's alpha to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOFadeChar(int charIndex, float endValue, float duration) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.ToAlpha(() => _charTransforms[charIndex].GetColor(textInfo.meshInfo), x => { + _charTransforms[charIndex].UpdateAlpha(target, x, textInfo.meshInfo); + }, endValue, duration); + return t; + } + + /// Tweens a character's color to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOColorChar(int charIndex, Color endValue, float duration) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.To(() => _charTransforms[charIndex].GetColor(textInfo.meshInfo), x => { + _charTransforms[charIndex].UpdateColor(target, x, textInfo.meshInfo); + }, endValue, duration); + return t; + } + + /// Tweens a character's offset to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOOffsetChar(int charIndex, Vector3 endValue, float duration) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.To(() => _charTransforms[charIndex].offset, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, x, charT.rotation, charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, endValue, duration); + return t; + } + + /// Tweens a character's rotation to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + /// Rotation mode + public TweenerCore DORotateChar(int charIndex, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.To(() => _charTransforms[charIndex].rotation, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, x, charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, endValue, duration); + t.plugOptions.rotateMode = mode; + return t; + } + + /// Tweens a character's scale to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOScaleChar(int charIndex, float endValue, float duration) + { + return DOScaleChar(charIndex, new Vector3(endValue, endValue, endValue), duration); + } + /// Tweens a character's color to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOScaleChar(int charIndex, Vector3 endValue, float duration) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.To(() => _charTransforms[charIndex].scale, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, charT.rotation, x, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, endValue, duration); + return t; + } + + /// Punches a character's offset towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The punch strength + /// The duration of the tween + /// Indicates how much will the punch vibrate per second + /// Represents how much (0 to 1) the vector will go beyond the starting size when bouncing backwards. + /// 1 creates a full oscillation between the punch offset and the opposite offset, + /// while 0 oscillates only between the punch offset and the start offset + public Tweener DOPunchCharOffset(int charIndex, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Punch(() => _charTransforms[charIndex].offset, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, x, charT.rotation, charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, punch, duration, vibrato, elasticity); + } + + /// Punches a character's rotation towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The punch strength + /// The duration of the tween + /// Indicates how much will the punch vibrate per second + /// Represents how much (0 to 1) the vector will go beyond the starting size when bouncing backwards. + /// 1 creates a full oscillation between the punch rotation and the opposite rotation, + /// while 0 oscillates only between the punch rotation and the start rotation + public Tweener DOPunchCharRotation(int charIndex, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Punch(() => _charTransforms[charIndex].rotation.eulerAngles, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, Quaternion.Euler(x), charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, punch, duration, vibrato, elasticity); + } + + /// Punches a character's scale towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The punch strength (added to the character's current scale) + /// The duration of the tween + /// Indicates how much will the punch vibrate per second + /// Represents how much (0 to 1) the vector will go beyond the starting size when bouncing backwards. + /// 1 creates a full oscillation between the punch scale and the opposite scale, + /// while 0 oscillates only between the punch scale and the start scale + public Tweener DOPunchCharScale(int charIndex, float punch, float duration, int vibrato = 10, float elasticity = 1) + { + return DOPunchCharScale(charIndex, new Vector3(punch, punch, punch), duration, vibrato, elasticity); + } + /// Punches a character's scale towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The punch strength (added to the character's current scale) + /// The duration of the tween + /// Indicates how much will the punch vibrate per second + /// Represents how much (0 to 1) the vector will go beyond the starting size when bouncing backwards. + /// 1 creates a full oscillation between the punch scale and the opposite scale, + /// while 0 oscillates only between the punch scale and the start scale + public Tweener DOPunchCharScale(int charIndex, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Punch(() => _charTransforms[charIndex].scale, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, charT.rotation, x, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, punch, duration, vibrato, elasticity); + } + + /// Shakes a character's offset with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public Tweener DOShakeCharOffset(int charIndex, float duration, float strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + return DOShakeCharOffset(charIndex, duration, new Vector3(strength, strength, strength), vibrato, randomness, fadeOut); + } + /// Shakes a character's offset with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public Tweener DOShakeCharOffset(int charIndex, float duration, Vector3 strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Shake(() => _charTransforms[charIndex].offset, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, x, charT.rotation, charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, duration, strength, vibrato, randomness, fadeOut); + } + + /// Shakes a character's rotation with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public Tweener DOShakeCharRotation(int charIndex, float duration, Vector3 strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Shake(() => _charTransforms[charIndex].rotation.eulerAngles, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, Quaternion.Euler(x), charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, duration, strength, vibrato, randomness, fadeOut); + } + + /// Shakes a character's scale with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public Tweener DOShakeCharScale(int charIndex, float duration, float strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + return DOShakeCharScale(charIndex, duration, new Vector3(strength, strength, strength), vibrato, randomness, fadeOut); + } + /// Shakes a character's scale with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + public Tweener DOShakeCharScale(int charIndex, float duration, Vector3 strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Shake(() => _charTransforms[charIndex].scale, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, charT.rotation, x, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, duration, strength, vibrato, randomness, fadeOut); + } + + #endregion + + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + + struct CharVertices + { + public Vector3 bottomLeft, topLeft, topRight, bottomRight; + + public CharVertices(Vector3 bottomLeft, Vector3 topLeft, Vector3 topRight, Vector3 bottomRight) + { + this.bottomLeft = bottomLeft; + this.topLeft = topLeft; + this.topRight = topRight; + this.bottomRight = bottomRight; + } + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + // Vertices of each character are: + // 0 : bottom left, 1 : top left, 2 : top right, 3 : bottom right + struct CharTransform + { + public int charIndex; + public bool isVisible { get; private set; } // FALSE both if it's invisible or if it's a space + public Vector3 offset; + public Quaternion rotation; + public Vector3 scale; + Vector3 _topLeftShift, _topRightShift, _bottomLeftShift, _bottomRightShift; + Vector3 _charMidBaselineOffset; + int _matIndex, _firstVertexIndex; + TMP_MeshInfo _meshInfo; + + public CharTransform(int charIndex, TMP_TextInfo textInfo, TMP_MeshInfo[] cachedMeshInfos) : this() + { + this.charIndex = charIndex; + offset = Vector3.zero; + rotation = Quaternion.identity; + scale = Vector3.one; + Refresh(textInfo, cachedMeshInfos); + } + + public void Refresh(TMP_TextInfo textInfo, TMP_MeshInfo[] cachedMeshInfos) + { + TMP_CharacterInfo charInfo = textInfo.characterInfo[charIndex]; + bool isSpaceChar = charInfo.character == ' '; + isVisible = charInfo.isVisible && !isSpaceChar; + _matIndex = charInfo.materialReferenceIndex; + _firstVertexIndex = charInfo.vertexIndex; + _meshInfo = textInfo.meshInfo[_matIndex]; + Vector3[] cachedVertices = cachedMeshInfos[_matIndex].vertices; + _charMidBaselineOffset = isSpaceChar + ? Vector3.zero + : (cachedVertices[_firstVertexIndex] + cachedVertices[_firstVertexIndex + 2]) * 0.5f; + } + + public void ResetAll(TMP_Text target, TMP_MeshInfo[] meshInfos, TMP_MeshInfo[] cachedMeshInfos) + { + ResetGeometry(target, cachedMeshInfos); + ResetColors(target, meshInfos); + } + + public void ResetTransformationData() + { + offset = Vector3.zero; + rotation = Quaternion.identity; + scale = Vector3.one; + _topLeftShift = _topRightShift = _bottomLeftShift = _bottomRightShift = Vector3.zero; + } + + public void ResetGeometry(TMP_Text target, TMP_MeshInfo[] cachedMeshInfos) + { + ResetTransformationData(); + Vector3[] destinationVertices = _meshInfo.vertices; + Vector3[] cachedVertices = cachedMeshInfos[_matIndex].vertices; + destinationVertices[_firstVertexIndex + 0] = cachedVertices[_firstVertexIndex + 0]; + destinationVertices[_firstVertexIndex + 1] = cachedVertices[_firstVertexIndex + 1]; + destinationVertices[_firstVertexIndex + 2] = cachedVertices[_firstVertexIndex + 2]; + destinationVertices[_firstVertexIndex + 3] = cachedVertices[_firstVertexIndex + 3]; + _meshInfo.mesh.vertices = _meshInfo.vertices; + target.UpdateGeometry(_meshInfo.mesh, _matIndex); + } + + public void ResetColors(TMP_Text target, TMP_MeshInfo[] meshInfos) + { + Color color = target.color; + Color32[] vertexCols = meshInfos[_matIndex].colors32; + vertexCols[_firstVertexIndex] = color; + vertexCols[_firstVertexIndex + 1] = color; + vertexCols[_firstVertexIndex + 2] = color; + vertexCols[_firstVertexIndex + 3] = color; + target.UpdateVertexData(TMP_VertexDataUpdateFlags.Colors32); + } + + public Color32 GetColor(TMP_MeshInfo[] meshInfos) + { + return meshInfos[_matIndex].colors32[_firstVertexIndex]; + } + + public CharVertices GetVertices() + { + return new CharVertices( + _meshInfo.vertices[_firstVertexIndex], _meshInfo.vertices[_firstVertexIndex + 1], + _meshInfo.vertices[_firstVertexIndex + 2], _meshInfo.vertices[_firstVertexIndex + 3] + ); + } + + public void UpdateAlpha(TMP_Text target, Color alphaColor, TMP_MeshInfo[] meshInfos, bool apply = true) + { + byte alphaByte = (byte)(alphaColor.a * 255); + Color32[] vertexCols = meshInfos[_matIndex].colors32; + vertexCols[_firstVertexIndex].a = alphaByte; + vertexCols[_firstVertexIndex + 1].a = alphaByte; + vertexCols[_firstVertexIndex + 2].a = alphaByte; + vertexCols[_firstVertexIndex + 3].a = alphaByte; + if (apply) target.UpdateVertexData(TMP_VertexDataUpdateFlags.Colors32); + } + + public void UpdateColor(TMP_Text target, Color32 color, TMP_MeshInfo[] meshInfos, bool apply = true) + { + Color32[] vertexCols = meshInfos[_matIndex].colors32; + vertexCols[_firstVertexIndex] = color; + vertexCols[_firstVertexIndex + 1] = color; + vertexCols[_firstVertexIndex + 2] = color; + vertexCols[_firstVertexIndex + 3] = color; + if (apply) target.UpdateVertexData(TMP_VertexDataUpdateFlags.Colors32); + } + + public void UpdateGeometry(TMP_Text target, Vector3 offset, Quaternion rotation, Vector3 scale, TMP_MeshInfo[] cachedMeshInfos, bool apply = true) + { + this.offset = offset; + this.rotation = rotation; + this.scale = scale; + + if (!apply) return; + + Vector3[] destinationVertices = _meshInfo.vertices; + Vector3[] cachedVertices = cachedMeshInfos[_matIndex].vertices; + destinationVertices[_firstVertexIndex] = cachedVertices[_firstVertexIndex + 0] - _charMidBaselineOffset; + destinationVertices[_firstVertexIndex + 1] = cachedVertices[_firstVertexIndex + 1] - _charMidBaselineOffset; + destinationVertices[_firstVertexIndex + 2] = cachedVertices[_firstVertexIndex + 2] - _charMidBaselineOffset; + destinationVertices[_firstVertexIndex + 3] = cachedVertices[_firstVertexIndex + 3] - _charMidBaselineOffset; + Matrix4x4 matrix = Matrix4x4.TRS(this.offset, this.rotation, this.scale); + destinationVertices[_firstVertexIndex] + = matrix.MultiplyPoint3x4(destinationVertices[_firstVertexIndex + 0]) + _charMidBaselineOffset + _bottomLeftShift; + destinationVertices[_firstVertexIndex + 1] + = matrix.MultiplyPoint3x4(destinationVertices[_firstVertexIndex + 1]) + _charMidBaselineOffset + _topLeftShift; + destinationVertices[_firstVertexIndex + 2] + = matrix.MultiplyPoint3x4(destinationVertices[_firstVertexIndex + 2]) + _charMidBaselineOffset + _topRightShift; + destinationVertices[_firstVertexIndex + 3] + = matrix.MultiplyPoint3x4(destinationVertices[_firstVertexIndex + 3]) + _charMidBaselineOffset + _bottomRightShift; + _meshInfo.mesh.vertices = _meshInfo.vertices; + target.UpdateGeometry(_meshInfo.mesh, _matIndex); + } + + public void ShiftVertices(TMP_Text target, Vector3 topLeftShift, Vector3 topRightShift, Vector3 bottomLeftShift, Vector3 bottomRightShift) + { + _topLeftShift += topLeftShift; + _topRightShift += topRightShift; + _bottomLeftShift += bottomLeftShift; + _bottomRightShift += bottomRightShift; + Vector3[] destinationVertices = _meshInfo.vertices; + destinationVertices[_firstVertexIndex] = destinationVertices[_firstVertexIndex] + _bottomLeftShift; + destinationVertices[_firstVertexIndex + 1] = destinationVertices[_firstVertexIndex + 1] + _topLeftShift; + destinationVertices[_firstVertexIndex + 2] = destinationVertices[_firstVertexIndex + 2] + _topRightShift; + destinationVertices[_firstVertexIndex + 3] = destinationVertices[_firstVertexIndex + 3] + _bottomRightShift; + _meshInfo.mesh.vertices = _meshInfo.vertices; + target.UpdateGeometry(_meshInfo.mesh, _matIndex); + } + + public void ResetVerticesShift(TMP_Text target) + { + Vector3[] destinationVertices = _meshInfo.vertices; + destinationVertices[_firstVertexIndex] = destinationVertices[_firstVertexIndex] - _bottomLeftShift; + destinationVertices[_firstVertexIndex + 1] = destinationVertices[_firstVertexIndex + 1] - _topLeftShift; + destinationVertices[_firstVertexIndex + 2] = destinationVertices[_firstVertexIndex + 2] - _topRightShift; + destinationVertices[_firstVertexIndex + 3] = destinationVertices[_firstVertexIndex + 3] - _bottomRightShift; + _meshInfo.mesh.vertices = _meshInfo.vertices; + target.UpdateGeometry(_meshInfo.mesh, _matIndex); + _topLeftShift = _topRightShift = _bottomLeftShift = _bottomRightShift = Vector3.zero; + } + } + } + + #endregion +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs.meta new file mode 100644 index 0000000..613cdbc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8fb0d65aa5b048649a3a785b82b8f8db +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs new file mode 100644 index 0000000..d1ca5fc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs @@ -0,0 +1,247 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2014/10/27 15:59 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + +#if DOTWEEN_TK2D // MODULE_MARKER +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +namespace DG.Tweening +{ + /// + /// Methods that extend 2D Toolkit objects and allow to directly create and control tweens from their instances. + /// + public static class ShortcutExtensionsTk2d + { + #region Sprite + + /// Tweens a 2D Toolkit Sprite's dimensions to the given value. + /// Also stores the Sprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScale(this tk2dBaseSprite target, Vector3 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a Sprite's dimensions to the given value. + /// Also stores the Sprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleX(this tk2dBaseSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X) + .SetTarget(target); + return t; + } + /// Tweens a Sprite's dimensions to the given value. + /// Also stores the Sprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleY(this tk2dBaseSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y) + .SetTarget(target); + return t; + } + /// Tweens a Sprite's dimensions to the given value. + /// Also stores the Sprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleZ(this tk2dBaseSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z) + .SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit Sprite's color to the given value. + /// Also stores the Sprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this tk2dBaseSprite target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit Sprite's alpha color to the given value. + /// Also stores the Sprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this tk2dBaseSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit Sprite's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this tk2dBaseSprite target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region tk2dSlicedSprite + + /// Tweens a 2D Toolkit SlicedSprite's dimensions to the given value. + /// Also stores the SlicedSprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleDimensions(this tk2dSlicedSprite target, Vector2 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.dimensions, x => target.dimensions = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a SlicedSprite's dimensions to the given value. + /// Also stores the SlicedSprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleDimensionsX(this tk2dSlicedSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.dimensions, x => target.dimensions = x, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X) + .SetTarget(target); + return t; + } + /// Tweens a SlicedSprite's dimensions to the given value. + /// Also stores the SlicedSprite as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleDimensionsY(this tk2dSlicedSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.dimensions, x => target.dimensions = x, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y) + .SetTarget(target); + return t; + } + + #endregion + + #region TextMesh + + /// Tweens a 2D Toolkit TextMesh's dimensions to the given value. + /// Also stores the TextMesh as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScale(this tk2dTextMesh target, Vector3 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a 2D Toolkit TextMesh's dimensions to the given value. + /// Also stores the TextMesh as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleX(this tk2dTextMesh target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X) + .SetTarget(target); + return t; + } + /// Tweens a 2D Toolkit TextMesh's dimensions to the given value. + /// Also stores the TextMesh as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleY(this tk2dTextMesh target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y) + .SetTarget(target); + return t; + } + /// Tweens a 2D Toolkit TextMesh's dimensions to the given value. + /// Also stores the TextMesh as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScaleZ(this tk2dTextMesh target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z) + .SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit TextMesh's color to the given value. + /// Also stores the TextMesh as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this tk2dTextMesh target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit TextMesh's alpha color to the given value. + /// Also stores the TextMesh as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this tk2dTextMesh target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit TextMesh's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this tk2dTextMesh target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + /// Tweens a tk2dTextMesh's text to the given value. + /// Also stores the tk2dTextMesh as the tween's target so it can be used for filtered operations + /// The end string to tween toThe duration of the tween + /// If TRUE (default), rich text will be interpreted correctly while animated, + /// otherwise all tags will be considered as normal text + /// The type of scramble mode to use, if any + /// A string containing the characters to use for scrambling. + /// Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + /// Leave it to NULL (default) to use default ones + public static TweenerCore DOText(this tk2dTextMesh target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + TweenerCore t = DOTween.To(() => target.text, x => target.text = x, endValue, duration); + t.SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + return t; + } + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs.meta new file mode 100644 index 0000000..c909f96 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b590cd7c24ffa5d4faa5b6fa993cccad +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor.meta new file mode 100644 index 0000000..e9164f7 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 34ca5bde92f87fa4dbeb9593d201fde2 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs new file mode 100644 index 0000000..5a8cf71 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs @@ -0,0 +1,764 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/12 16:03 + +using System; +using System.Collections.Generic; +using System.IO; +using DG.DemiEditor; +using DG.DOTweenEditor.Core; +using DG.DOTweenEditor.UI; +using DG.Tweening; +using DG.Tweening.Core; +using UnityEditor; +using UnityEngine; +using DOTweenSettings = DG.Tweening.Core.DOTweenSettings; +#if !DOTWEEN_NOUI // UI_MARKER +using UnityEngine.UI; +#endif +#if DOTWEEN_TEXTMESHPRO // TEXTMESHPRO_MARKER + using TMPro; +#endif + +namespace DG.DOTweenEditor +{ + [CustomEditor(typeof(DOTweenAnimation))] + public class DOTweenAnimationInspector : ABSAnimationInspector + { + enum FadeTargetType + { + CanvasGroup, + Image + } + + enum ChooseTargetMode + { + None, + BetweenCanvasGroupAndImage + } + + static readonly Dictionary _AnimationTypeToComponent = new Dictionary() { + { DOTweenAnimation.AnimationType.Move, new[] { +#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER + typeof(Rigidbody), +#endif +#if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER + typeof(Rigidbody2D), +#endif +#if !DOTWEEN_NOUI // UI_MARKER + typeof(RectTransform), +#endif + typeof(Transform) + }}, + { DOTweenAnimation.AnimationType.Rotate, new[] { +#if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER + typeof(Rigidbody), +#endif +#if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER + typeof(Rigidbody2D), +#endif + typeof(Transform) + }}, + { DOTweenAnimation.AnimationType.LocalMove, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.LocalRotate, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.Scale, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.Color, new[] { + typeof(Light), +#if !DOTWEEN_NOSPRITES // SPRITE_MARKER + typeof(SpriteRenderer), +#endif +#if !DOTWEEN_NOUI // UI_MARKER + typeof(Image), typeof(Text), typeof(RawImage), typeof(Graphic), +#endif + typeof(Renderer), + }}, + { DOTweenAnimation.AnimationType.Fade, new[] { + typeof(Light), +#if !DOTWEEN_NOSPRITES // SPRITE_MARKER + typeof(SpriteRenderer), +#endif +#if !DOTWEEN_NOUI // UI_MARKER + typeof(Image), typeof(Text), typeof(CanvasGroup), typeof(RawImage), typeof(Graphic), +#endif + typeof(Renderer), + }}, +#if !DOTWEEN_NOUI // UI_MARKER + { DOTweenAnimation.AnimationType.Text, new[] { typeof(Text) } }, +#endif + { DOTweenAnimation.AnimationType.PunchPosition, new[] { +#if !DOTWEEN_NOUI // UI_MARKER + typeof(RectTransform), +#endif + typeof(Transform) + }}, + { DOTweenAnimation.AnimationType.PunchRotation, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.PunchScale, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.ShakePosition, new[] { +#if !DOTWEEN_NOUI // UI_MARKER + typeof(RectTransform), +#endif + typeof(Transform) + }}, + { DOTweenAnimation.AnimationType.ShakeRotation, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.ShakeScale, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.CameraAspect, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraBackgroundColor, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraFieldOfView, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraOrthoSize, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraPixelRect, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraRect, new[] { typeof(Camera) } }, +#if !DOTWEEN_NOUI // UI_MARKER + { DOTweenAnimation.AnimationType.UIWidthHeight, new[] { typeof(RectTransform) } }, + { DOTweenAnimation.AnimationType.FillAmount, new[] { typeof(Image) } }, +#endif + }; + +#if DOTWEEN_TK2D // TK2D_MARKER + static readonly Dictionary _Tk2dAnimationTypeToComponent = new Dictionary() { + { DOTweenAnimation.AnimationType.Scale, new[] { typeof(tk2dBaseSprite), typeof(tk2dTextMesh) } }, + { DOTweenAnimation.AnimationType.Color, new[] { typeof(tk2dBaseSprite), typeof(tk2dTextMesh) } }, + { DOTweenAnimation.AnimationType.Fade, new[] { typeof(tk2dBaseSprite), typeof(tk2dTextMesh) } }, + { DOTweenAnimation.AnimationType.Text, new[] { typeof(tk2dTextMesh) } } + }; +#endif +#if DOTWEEN_TEXTMESHPRO // TEXTMESHPRO_MARKER + static readonly Dictionary _TMPAnimationTypeToComponent = new Dictionary() { + { DOTweenAnimation.AnimationType.Color, new[] { typeof(TextMeshPro), typeof(TextMeshProUGUI) } }, + { DOTweenAnimation.AnimationType.Fade, new[] { typeof(TextMeshPro), typeof(TextMeshProUGUI) } }, + { DOTweenAnimation.AnimationType.Text, new[] { typeof(TextMeshPro), typeof(TextMeshProUGUI) } } + }; +#endif + + static readonly string[] _AnimationType = new[] { + "None", + "Move", "LocalMove", + "Rotate", "LocalRotate", + "Scale", + "Color", "Fade", +#if !DOTWEEN_NOUI // UI_MARKER + "FillAmount", + "Text", +#endif +#if DOTWEEN_TK2D // TK2D_MARKER + "Text", +#endif +#if DOTWEEN_TEXTMESHPRO // TEXTMESHPRO_MARKER + "Text", +#endif +#if !DOTWEEN_NOUI // UI_MARKER + "UIWidthHeight", +#endif + "Punch/Position", "Punch/Rotation", "Punch/Scale", + "Shake/Position", "Shake/Rotation", "Shake/Scale", + "Camera/Aspect", "Camera/BackgroundColor", "Camera/FieldOfView", "Camera/OrthoSize", "Camera/PixelRect", "Camera/Rect" + }; + static string[] _animationTypeNoSlashes; // _AnimationType list without slashes in values + static string[] _datString; // String representation of DOTweenAnimation enum (here for caching reasons) + + DOTweenAnimation _src; + DOTweenSettings _settings; + bool _runtimeEditMode; // If TRUE allows to change and save stuff at runtime + bool _refreshRequired; // If TRUE refreshes components data + int _totComponentsOnSrc; // Used to determine if a Component is added or removed from the source + bool _isLightSrc; // Used to determine if we're tweening a Light, to set the max Fade value to more than 1 +#pragma warning disable 414 + ChooseTargetMode _chooseTargetMode = ChooseTargetMode.None; +#pragma warning restore 414 + + static readonly GUIContent _GuiC_selfTarget_true = new GUIContent( + "SELF", "Will animate components on this gameObject" + ); + static readonly GUIContent _GuiC_selfTarget_false = new GUIContent( + "OTHER", "Will animate components on the given gameObject instead than on this one" + ); + static readonly GUIContent _GuiC_tweenTargetIsTargetGO_true = new GUIContent( + "Use As Tween Target", "Will set the tween target (via SetTarget, used to control a tween directly from a target) to the \"OTHER\" gameObject" + ); + static readonly GUIContent _GuiC_tweenTargetIsTargetGO_false = new GUIContent( + "Use As Tween Target", "Will set the tween target (via SetTarget, used to control a tween directly from a target) to the gameObject containing this animation, not the \"OTHER\" one" + ); + + #region MonoBehaviour Methods + + void OnEnable() + { + _src = target as DOTweenAnimation; + _settings = DOTweenUtilityWindow.GetDOTweenSettings(); + + onStartProperty = base.serializedObject.FindProperty("onStart"); + onPlayProperty = base.serializedObject.FindProperty("onPlay"); + onUpdateProperty = base.serializedObject.FindProperty("onUpdate"); + onStepCompleteProperty = base.serializedObject.FindProperty("onStepComplete"); + onCompleteProperty = base.serializedObject.FindProperty("onComplete"); + onRewindProperty = base.serializedObject.FindProperty("onRewind"); + onTweenCreatedProperty = base.serializedObject.FindProperty("onTweenCreated"); + + // Convert _AnimationType to _animationTypeNoSlashes + int len = _AnimationType.Length; + _animationTypeNoSlashes = new string[len]; + for (int i = 0; i < len; ++i) { + string a = _AnimationType[i]; + a = a.Replace("/", ""); + _animationTypeNoSlashes[i] = a; + } + } + + void OnDisable() + { + DOTweenPreviewManager.StopAllPreviews(); + } + + override public void OnInspectorGUI() + { + base.OnInspectorGUI(); + + GUILayout.Space(3); + EditorGUIUtils.SetGUIStyles(); + + bool playMode = Application.isPlaying; + _runtimeEditMode = _runtimeEditMode && playMode; + + GUILayout.BeginHorizontal(); + EditorGUIUtils.InspectorLogo(); + GUILayout.Label(_src.animationType.ToString() + (string.IsNullOrEmpty(_src.id) ? "" : " [" + _src.id + "]"), EditorGUIUtils.sideLogoIconBoldLabelStyle); + // Up-down buttons + GUILayout.FlexibleSpace(); + if (GUILayout.Button("▲", DeGUI.styles.button.toolIco)) UnityEditorInternal.ComponentUtility.MoveComponentUp(_src); + if (GUILayout.Button("▼", DeGUI.styles.button.toolIco)) UnityEditorInternal.ComponentUtility.MoveComponentDown(_src); + GUILayout.EndHorizontal(); + + if (playMode) { + if (_runtimeEditMode) { + + } else { + GUILayout.Space(8); + GUILayout.Label("Animation Editor disabled while in play mode", EditorGUIUtils.wordWrapLabelStyle); + if (!_src.isActive) { + GUILayout.Label("This animation has been toggled as inactive and won't be generated", EditorGUIUtils.wordWrapLabelStyle); + GUI.enabled = false; + } + if (GUILayout.Button(new GUIContent("Activate Edit Mode", "Switches to Runtime Edit Mode, where you can change animations values and restart them"))) { + _runtimeEditMode = true; + } + GUILayout.Label("NOTE: when using DOPlayNext, the sequence is determined by the DOTweenAnimation Components order in the target GameObject's Inspector", EditorGUIUtils.wordWrapLabelStyle); + GUILayout.Space(10); + if (!_runtimeEditMode) return; + } + } + + Undo.RecordObject(_src, "DOTween Animation"); + Undo.RecordObject(_settings, "DOTween Animation"); + +// _src.isValid = Validate(); // Moved down + + EditorGUIUtility.labelWidth = 110; + + if (playMode) { + GUILayout.Space(4); + DeGUILayout.Toolbar("Edit Mode Commands"); + DeGUILayout.BeginVBox(DeGUI.styles.box.stickyTop); + GUILayout.BeginHorizontal(); + if (GUILayout.Button("TogglePause")) _src.tween.TogglePause(); + if (GUILayout.Button("Rewind")) _src.tween.Rewind(); + if (GUILayout.Button("Restart")) _src.tween.Restart(); + GUILayout.EndHorizontal(); + if (GUILayout.Button("Commit changes and restart")) { + _src.tween.Rewind(); + _src.tween.Kill(); + if (_src.isValid) { + _src.CreateTween(); + _src.tween.Play(); + } + } + GUILayout.Label("To apply your changes when exiting Play mode, use the Component's upper right menu and choose \"Copy Component\", then \"Paste Component Values\" after exiting Play mode", DeGUI.styles.label.wordwrap); + DeGUILayout.EndVBox(); + } else { + GUILayout.BeginHorizontal(); + bool hasManager = _src.GetComponent() != null; + EditorGUI.BeginChangeCheck(); + _settings.showPreviewPanel = hasManager + ? DeGUILayout.ToggleButton(_settings.showPreviewPanel, "Preview Controls", styles.custom.inlineToggle) + : DeGUILayout.ToggleButton(_settings.showPreviewPanel, "Preview Controls", styles.custom.inlineToggle, GUILayout.Width(120)); + if (EditorGUI.EndChangeCheck()) { + EditorUtility.SetDirty(_settings); + DOTweenPreviewManager.StopAllPreviews(); + } + if (!hasManager) { + if (GUILayout.Button(new GUIContent("Add Manager", "Adds a manager component which allows you to choose additional options for this gameObject"))) { + _src.gameObject.AddComponent(); + } + } + GUILayout.EndHorizontal(); + } + + // Preview in editor + bool isPreviewing = _settings.showPreviewPanel ? DOTweenPreviewManager.PreviewGUI(_src) : false; + + EditorGUI.BeginDisabledGroup(isPreviewing); + // Choose target + GUILayout.BeginHorizontal(); + _src.isActive = EditorGUILayout.Toggle(new GUIContent("", "If unchecked, this animation will not be created"), _src.isActive, GUILayout.Width(14)); + EditorGUI.BeginChangeCheck(); + EditorGUI.BeginChangeCheck(); + _src.targetIsSelf = DeGUILayout.ToggleButton( + _src.targetIsSelf, _src.targetIsSelf ? _GuiC_selfTarget_true : _GuiC_selfTarget_false, + new Color(1f, 0.78f, 0f), DeGUI.colors.bg.toggleOn, new Color(0.33f, 0.14f, 0.02f), DeGUI.colors.content.toggleOn, + null, GUILayout.Width(47) + ); + bool innerChanged = EditorGUI.EndChangeCheck(); + if (innerChanged) { + _src.targetGO = null; + GUI.changed = true; + } + if (_src.targetIsSelf) GUILayout.Label(_GuiC_selfTarget_true.tooltip); + else { + using (new DeGUI.ColorScope(null, null, _src.targetGO == null ? Color.red : Color.white)) { + _src.targetGO = (GameObject)EditorGUILayout.ObjectField(_src.targetGO, typeof(GameObject), true); + } + _src.tweenTargetIsTargetGO = DeGUILayout.ToggleButton( + _src.tweenTargetIsTargetGO, _src.tweenTargetIsTargetGO ? _GuiC_tweenTargetIsTargetGO_true : _GuiC_tweenTargetIsTargetGO_false, + GUILayout.Width(131) + ); + } + bool check = EditorGUI.EndChangeCheck(); + if (check) _refreshRequired = true; + GUILayout.EndHorizontal(); + + GameObject targetGO = _src.targetIsSelf ? _src.gameObject : _src.targetGO; + + if (targetGO == null) { + // Uses external target gameObject but it's not set + if (_src.targetGO != null || _src.target != null) { + _src.targetGO = null; + _src.target = null; + GUI.changed = true; + } + } else { + GUILayout.BeginHorizontal(); + DOTweenAnimation.AnimationType prevAnimType = _src.animationType; +// _src.animationType = (DOTweenAnimation.AnimationType)EditorGUILayout.EnumPopup(_src.animationType, EditorGUIUtils.popupButton); + GUI.enabled = GUI.enabled && _src.isActive; + _src.animationType = AnimationToDOTweenAnimationType(_AnimationType[EditorGUILayout.Popup(DOTweenAnimationTypeToPopupId(_src.animationType), _AnimationType)]); + _src.autoGenerate = DeGUILayout.ToggleButton(_src.autoGenerate, new GUIContent("AutoGenerate", "If selected, the tween will be generated at startup (during Start for RectTransform position tween, Awake for all the others)")); + if (_src.autoGenerate) { + _src.autoPlay = DeGUILayout.ToggleButton(_src.autoPlay, new GUIContent("AutoPlay", "If selected, the tween will play automatically")); + } + _src.autoKill = DeGUILayout.ToggleButton(_src.autoKill, new GUIContent("AutoKill", "If selected, the tween will be killed when it completes, and won't be reusable")); + GUILayout.EndHorizontal(); + if (prevAnimType != _src.animationType) { + // Set default optional values based on animation type + _src.endValueTransform = null; + _src.useTargetAsV3 = false; + switch (_src.animationType) { + case DOTweenAnimation.AnimationType.Move: + case DOTweenAnimation.AnimationType.LocalMove: + case DOTweenAnimation.AnimationType.Rotate: + case DOTweenAnimation.AnimationType.LocalRotate: + case DOTweenAnimation.AnimationType.Scale: + _src.endValueV3 = Vector3.zero; + _src.endValueFloat = 0; + _src.optionalBool0 = _src.animationType == DOTweenAnimation.AnimationType.Scale; + break; + case DOTweenAnimation.AnimationType.UIWidthHeight: + _src.endValueV3 = Vector3.zero; + _src.endValueFloat = 0; + _src.optionalBool0 = _src.animationType == DOTweenAnimation.AnimationType.UIWidthHeight; + break; + case DOTweenAnimation.AnimationType.FillAmount: + _src.endValueFloat = 1; + break; + case DOTweenAnimation.AnimationType.Color: + case DOTweenAnimation.AnimationType.Fade: + _isLightSrc = targetGO.GetComponent() != null; + _src.endValueFloat = 0; + break; + case DOTweenAnimation.AnimationType.Text: + _src.optionalBool0 = true; + break; + case DOTweenAnimation.AnimationType.PunchPosition: + case DOTweenAnimation.AnimationType.PunchRotation: + case DOTweenAnimation.AnimationType.PunchScale: + _src.endValueV3 = _src.animationType == DOTweenAnimation.AnimationType.PunchRotation ? new Vector3(0, 180, 0) : Vector3.one; + _src.optionalFloat0 = 1; + _src.optionalInt0 = 10; + _src.optionalBool0 = false; + break; + case DOTweenAnimation.AnimationType.ShakePosition: + case DOTweenAnimation.AnimationType.ShakeRotation: + case DOTweenAnimation.AnimationType.ShakeScale: + _src.endValueV3 = _src.animationType == DOTweenAnimation.AnimationType.ShakeRotation ? new Vector3(90, 90, 90) : Vector3.one; + _src.optionalInt0 = 10; + _src.optionalFloat0 = 90; + _src.optionalBool0 = false; + _src.optionalBool1 = true; + break; + case DOTweenAnimation.AnimationType.CameraAspect: + case DOTweenAnimation.AnimationType.CameraFieldOfView: + case DOTweenAnimation.AnimationType.CameraOrthoSize: + _src.endValueFloat = 0; + break; + case DOTweenAnimation.AnimationType.CameraPixelRect: + case DOTweenAnimation.AnimationType.CameraRect: + _src.endValueRect = new Rect(0, 0, 0, 0); + break; + } + } + if (_src.animationType == DOTweenAnimation.AnimationType.None) { + _src.isValid = false; + if (GUI.changed) EditorUtility.SetDirty(_src); + return; + } + + if (_refreshRequired || prevAnimType != _src.animationType || ComponentsChanged()) { + _refreshRequired = false; + _src.isValid = Validate(targetGO); + // See if we need to choose between multiple targets +#if !DOTWEEN_NOUI // UI_MARKER + if (_src.animationType == DOTweenAnimation.AnimationType.Fade && targetGO.GetComponent() != null && targetGO.GetComponent() != null) { + _chooseTargetMode = ChooseTargetMode.BetweenCanvasGroupAndImage; + // Reassign target and forcedTargetType if lost + if (_src.forcedTargetType == DOTweenAnimation.TargetType.Unset) _src.forcedTargetType = _src.targetType; + switch (_src.forcedTargetType) { + case DOTweenAnimation.TargetType.CanvasGroup: + _src.target = targetGO.GetComponent(); + break; + case DOTweenAnimation.TargetType.Image: + _src.target = targetGO.GetComponent(); + break; + } + } else { +#endif + _chooseTargetMode = ChooseTargetMode.None; + _src.forcedTargetType = DOTweenAnimation.TargetType.Unset; +#if !DOTWEEN_NOUI // UI_MARKER + } +#endif + } + + if (!_src.isValid) { + GUI.color = Color.red; + GUILayout.BeginVertical(GUI.skin.box); + GUILayout.Label("No valid Component was found for the selected animation", EditorGUIUtils.wordWrapLabelStyle); + GUILayout.EndVertical(); + GUI.color = Color.white; + if (GUI.changed) EditorUtility.SetDirty(_src); + return; + } + +#if !DOTWEEN_NOUI // UI_MARKER + // Special cases in which multiple target types could be used (set after validation) + if (_chooseTargetMode == ChooseTargetMode.BetweenCanvasGroupAndImage && _src.forcedTargetType != DOTweenAnimation.TargetType.Unset) { + FadeTargetType fadeTargetType = (FadeTargetType)Enum.Parse(typeof(FadeTargetType), _src.forcedTargetType.ToString()); + DOTweenAnimation.TargetType prevTargetType = _src.forcedTargetType; + _src.forcedTargetType = (DOTweenAnimation.TargetType)Enum.Parse(typeof(DOTweenAnimation.TargetType), EditorGUILayout.EnumPopup(_src.animationType + " Target", fadeTargetType).ToString()); + if (_src.forcedTargetType != prevTargetType) { + // Target type change > assign correct target + switch (_src.forcedTargetType) { + case DOTweenAnimation.TargetType.CanvasGroup: + _src.target = targetGO.GetComponent(); + break; + case DOTweenAnimation.TargetType.Image: + _src.target = targetGO.GetComponent(); + break; + } + } + } +#endif + + GUILayout.BeginHorizontal(); + _src.duration = EditorGUILayout.FloatField("Duration", _src.duration); + if (_src.duration < 0) _src.duration = 0; + _src.isSpeedBased = DeGUILayout.ToggleButton(_src.isSpeedBased, new GUIContent("SpeedBased", "If selected, the duration will count as units/degree x second"), DeGUI.styles.button.tool, GUILayout.Width(75)); + GUILayout.EndHorizontal(); + _src.delay = EditorGUILayout.FloatField("Delay", _src.delay); + if (_src.delay < 0) _src.delay = 0; + _src.isIndependentUpdate = EditorGUILayout.Toggle("Ignore TimeScale", _src.isIndependentUpdate); + _src.easeType = EditorGUIUtils.FilteredEasePopup("Ease", _src.easeType); + if (_src.easeType == Ease.INTERNAL_Custom) { + _src.easeCurve = EditorGUILayout.CurveField(" Ease Curve", _src.easeCurve); + } + _src.loops = EditorGUILayout.IntField(new GUIContent("Loops", "Set to -1 for infinite loops"), _src.loops); + if (_src.loops < -1) _src.loops = -1; + if (_src.loops > 1 || _src.loops == -1) + _src.loopType = (LoopType)EditorGUILayout.EnumPopup(" Loop Type", _src.loopType); + _src.id = EditorGUILayout.TextField("ID", _src.id); + + bool canBeRelative = true; + // End value and eventual specific options + switch (_src.animationType) { + case DOTweenAnimation.AnimationType.Move: + case DOTweenAnimation.AnimationType.LocalMove: + GUIEndValueV3(targetGO, _src.animationType == DOTweenAnimation.AnimationType.Move); + _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); + canBeRelative = !_src.useTargetAsV3; + break; + case DOTweenAnimation.AnimationType.Rotate: + case DOTweenAnimation.AnimationType.LocalRotate: + bool isRigidbody2D = DOTweenModuleUtils.Physics.HasRigidbody2D(_src); + if (isRigidbody2D) GUIEndValueFloat(); + else { + GUIEndValueV3(targetGO); + _src.optionalRotationMode = (RotateMode)EditorGUILayout.EnumPopup(" Rotation Mode", _src.optionalRotationMode); + } + break; + case DOTweenAnimation.AnimationType.Scale: + if (_src.optionalBool0) GUIEndValueFloat(); + else GUIEndValueV3(targetGO); + _src.optionalBool0 = EditorGUILayout.Toggle("Uniform Scale", _src.optionalBool0); + break; + case DOTweenAnimation.AnimationType.UIWidthHeight: + if (_src.optionalBool0) GUIEndValueFloat(); + else GUIEndValueV2(); + _src.optionalBool0 = EditorGUILayout.Toggle("Uniform Scale", _src.optionalBool0); + break; + case DOTweenAnimation.AnimationType.FillAmount: + GUIEndValueFloat(); + if (_src.endValueFloat < 0) _src.endValueFloat = 0; + if (_src.endValueFloat > 1) _src.endValueFloat = 1; + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.Color: + GUIEndValueColor(); + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.Fade: + GUIEndValueFloat(); + if (_src.endValueFloat < 0) _src.endValueFloat = 0; + if (!_isLightSrc && _src.endValueFloat > 1) _src.endValueFloat = 1; + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.Text: + GUIEndValueString(); + _src.optionalBool0 = EditorGUILayout.Toggle("Rich Text Enabled", _src.optionalBool0); + _src.optionalScrambleMode = (ScrambleMode)EditorGUILayout.EnumPopup("Scramble Mode", _src.optionalScrambleMode); + _src.optionalString = EditorGUILayout.TextField(new GUIContent("Custom Scramble", "Custom characters to use in case of ScrambleMode.Custom"), _src.optionalString); + break; + case DOTweenAnimation.AnimationType.PunchPosition: + case DOTweenAnimation.AnimationType.PunchRotation: + case DOTweenAnimation.AnimationType.PunchScale: + GUIEndValueV3(targetGO); + canBeRelative = false; + _src.optionalInt0 = EditorGUILayout.IntSlider(new GUIContent(" Vibrato", "How much will the punch vibrate"), _src.optionalInt0, 1, 50); + _src.optionalFloat0 = EditorGUILayout.Slider(new GUIContent(" Elasticity", "How much the vector will go beyond the starting position when bouncing backwards"), _src.optionalFloat0, 0, 1); + if (_src.animationType == DOTweenAnimation.AnimationType.PunchPosition) _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); + break; + case DOTweenAnimation.AnimationType.ShakePosition: + case DOTweenAnimation.AnimationType.ShakeRotation: + case DOTweenAnimation.AnimationType.ShakeScale: + GUIEndValueV3(targetGO); + canBeRelative = false; + _src.optionalInt0 = EditorGUILayout.IntSlider(new GUIContent(" Vibrato", "How much will the shake vibrate"), _src.optionalInt0, 1, 50); + using (new GUILayout.HorizontalScope()) { + _src.optionalFloat0 = EditorGUILayout.Slider(new GUIContent(" Randomness", "The shake randomness"), _src.optionalFloat0, 0, 90); + _src.optionalShakeRandomnessMode = (ShakeRandomnessMode)EditorGUILayout.EnumPopup(_src.optionalShakeRandomnessMode, GUILayout.Width(70)); + } + _src.optionalBool1 = EditorGUILayout.Toggle(new GUIContent(" FadeOut", "If selected the shake will fade out, otherwise it will constantly play with full force"), _src.optionalBool1); + if (_src.animationType == DOTweenAnimation.AnimationType.ShakePosition) _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); + break; + case DOTweenAnimation.AnimationType.CameraAspect: + case DOTweenAnimation.AnimationType.CameraFieldOfView: + case DOTweenAnimation.AnimationType.CameraOrthoSize: + GUIEndValueFloat(); + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.CameraBackgroundColor: + GUIEndValueColor(); + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.CameraPixelRect: + case DOTweenAnimation.AnimationType.CameraRect: + GUIEndValueRect(); + canBeRelative = false; + break; + } + + // Final settings + if (canBeRelative) _src.isRelative = EditorGUILayout.Toggle(" Relative", _src.isRelative); + + // Events + AnimationInspectorGUI.AnimationEvents(this, _src); + } + EditorGUI.EndDisabledGroup(); + + if (GUI.changed) EditorUtility.SetDirty(_src); + } + + #endregion + + #region Methods + + // Returns TRUE if the Component layout on the src gameObject changed (a Component was added or removed) + bool ComponentsChanged() + { + int prevTotComponentsOnSrc = _totComponentsOnSrc; + _totComponentsOnSrc = _src.gameObject.GetComponents().Length; + return prevTotComponentsOnSrc != _totComponentsOnSrc; + } + + // Checks if a Component that can be animated with the given animationType is attached to the src + bool Validate(GameObject targetGO) + { + if (_src.animationType == DOTweenAnimation.AnimationType.None) return false; + + Component srcTarget; + // First check for external plugins +#if DOTWEEN_TK2D // TK2D_MARKER + if (_Tk2dAnimationTypeToComponent.ContainsKey(_src.animationType)) { + foreach (Type t in _Tk2dAnimationTypeToComponent[_src.animationType]) { + srcTarget = targetGO.GetComponent(t); + if (srcTarget != null) { + _src.target = srcTarget; + _src.targetType = DOTweenAnimation.TypeToDOTargetType(t); + return true; + } + } + } +#endif +#if DOTWEEN_TEXTMESHPRO // TEXTMESHPRO_MARKER + if (_TMPAnimationTypeToComponent.ContainsKey(_src.animationType)) { + foreach (Type t in _TMPAnimationTypeToComponent[_src.animationType]) { + srcTarget = targetGO.GetComponent(t); + if (srcTarget != null) { + _src.target = srcTarget; + _src.targetType = DOTweenAnimation.TypeToDOTargetType(t); + return true; + } + } + } +#endif + // Then check for regular stuff + if (_AnimationTypeToComponent.ContainsKey(_src.animationType)) { + foreach (Type t in _AnimationTypeToComponent[_src.animationType]) { + srcTarget = targetGO.GetComponent(t); + if (srcTarget != null) { + _src.target = srcTarget; + _src.targetType = DOTweenAnimation.TypeToDOTargetType(t); + return true; + } + } + } + return false; + } + + DOTweenAnimation.AnimationType AnimationToDOTweenAnimationType(string animation) + { + if (_datString == null) _datString = Enum.GetNames(typeof(DOTweenAnimation.AnimationType)); + animation = animation.Replace("/", ""); + return (DOTweenAnimation.AnimationType)(Array.IndexOf(_datString, animation)); + } + int DOTweenAnimationTypeToPopupId(DOTweenAnimation.AnimationType animation) + { + return Array.IndexOf(_animationTypeNoSlashes, animation.ToString()); + } + + #endregion + + #region GUI Draw Methods + + void GUIEndValueFloat() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueFloat = EditorGUILayout.FloatField(_src.endValueFloat); + GUILayout.EndHorizontal(); + } + + void GUIEndValueColor() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueColor = EditorGUILayout.ColorField(_src.endValueColor); + GUILayout.EndHorizontal(); + } + + void GUIEndValueV3(GameObject targetGO, bool optionalTransform = false) + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + if (_src.useTargetAsV3) { + Transform prevT = _src.endValueTransform; + _src.endValueTransform = EditorGUILayout.ObjectField(_src.endValueTransform, typeof(Transform), true) as Transform; + if (_src.endValueTransform != prevT && _src.endValueTransform != null) { +#if !DOTWEEN_NOUI // UI_MARKER + // Check that it's a Transform for a Transform or a RectTransform for a RectTransform + if (targetGO.GetComponent() != null) { + if (_src.endValueTransform.GetComponent() == null) { + EditorUtility.DisplayDialog("DOTween Pro", "For Unity UI elements, the target must also be a UI element", "Ok"); + _src.endValueTransform = null; + } + } else if (_src.endValueTransform.GetComponent() != null) { + EditorUtility.DisplayDialog("DOTween Pro", "You can't use a UI target for a non UI object", "Ok"); + _src.endValueTransform = null; + } +#endif + } + } else { + _src.endValueV3 = EditorGUILayout.Vector3Field("", _src.endValueV3, GUILayout.Height(16)); + } + if (optionalTransform) { + if (GUILayout.Button(_src.useTargetAsV3 ? "target" : "value", EditorGUIUtils.sideBtStyle, GUILayout.Width(44))) _src.useTargetAsV3 = !_src.useTargetAsV3; + } + GUILayout.EndHorizontal(); +#if !DOTWEEN_NOUI // UI_MARKER + if (_src.useTargetAsV3 && _src.endValueTransform != null && _src.target is RectTransform) { + EditorGUILayout.HelpBox("NOTE: when using a UI target, the tween will be created during Start instead of Awake", MessageType.Info); + } +#endif + } + + void GUIEndValueV2() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueV2 = EditorGUILayout.Vector2Field("", _src.endValueV2, GUILayout.Height(16)); + GUILayout.EndHorizontal(); + } + + void GUIEndValueString() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueString = EditorGUILayout.TextArea(_src.endValueString, EditorGUIUtils.wordWrapTextArea); + GUILayout.EndHorizontal(); + } + + void GUIEndValueRect() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueRect = EditorGUILayout.RectField(_src.endValueRect); + GUILayout.EndHorizontal(); + } + + void GUIToFromButton() + { + if (GUILayout.Button(_src.isFrom ? "FROM" : "TO", EditorGUIUtils.sideBtStyle, GUILayout.Width(90))) _src.isFrom = !_src.isFrom; + GUILayout.Space(16); + } + + #endregion + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + [InitializeOnLoad] + static class Initializer + { + static Initializer() + { + DOTweenAnimation.OnReset += OnReset; + } + + static void OnReset(DOTweenAnimation src) + { + DOTweenSettings settings = DOTweenUtilityWindow.GetDOTweenSettings(); + if (settings == null) return; + + Undo.RecordObject(src, "DOTweenAnimation"); + src.autoPlay = settings.defaultAutoPlay == AutoPlay.All || settings.defaultAutoPlay == AutoPlay.AutoPlayTweeners; + src.autoKill = settings.defaultAutoKill; + EditorUtility.SetDirty(src); + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs.meta new file mode 100644 index 0000000..d2d7eee --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0203fd81362bab4d842d87ad09ee76e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs new file mode 100644 index 0000000..73d8a6b --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs @@ -0,0 +1,265 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/12 16:03 + +using System; +using System.Collections.Generic; +using DG.DemiEditor; +using DG.DemiLib; +using DG.Tweening; +using DG.Tweening.Core; +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace DG.DOTweenEditor +{ + public static class DOTweenPreviewManager + { + static bool _previewOnlyIfSetToAutoPlay = true; + static readonly Dictionary _AnimationToTween = new Dictionary(); + static readonly List _TmpKeys = new List(); + + #region Public Methods & GUI + + /// + /// Returns TRUE if its actually previewing animations + /// + public static bool PreviewGUI(DOTweenAnimation src) + { + if (EditorApplication.isPlaying) return false; + + Styles.Init(); + + bool isPreviewing = _AnimationToTween.Count > 0; + bool isPreviewingThis = isPreviewing && _AnimationToTween.ContainsKey(src); + + // Preview in editor + GUI.backgroundColor = isPreviewing + ? new DeSkinColor(new Color(0.49f, 0.8f, 0.86f), new Color(0.15f, 0.26f, 0.35f)) + : new DeSkinColor(Color.white, new Color(0.13f, 0.13f, 0.13f)); + GUILayout.BeginVertical(Styles.previewBox); + DeGUI.ResetGUIColors(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Preview Mode - Experimental", Styles.previewLabel); + _previewOnlyIfSetToAutoPlay = DeGUILayout.ToggleButton( + _previewOnlyIfSetToAutoPlay, + new GUIContent("AutoPlay only", "If toggled only previews animations that have AutoPlay turned ON"), + Styles.btOption + ); + GUILayout.EndHorizontal(); + GUILayout.Space(1); + // Preview - Play + GUILayout.BeginHorizontal(); + EditorGUI.BeginDisabledGroup( + isPreviewingThis || src.animationType == DOTweenAnimation.AnimationType.None + || !src.isActive || _previewOnlyIfSetToAutoPlay && !src.autoPlay + ); + if (GUILayout.Button("► Play", Styles.btPreview)) { + if (!isPreviewing) StartupGlobalPreview(); + AddAnimationToGlobalPreview(src); + } + EditorGUI.EndDisabledGroup(); + EditorGUI.BeginDisabledGroup(isPreviewing); + if (GUILayout.Button("► Play All on GameObject", Styles.btPreview)) { + if (!isPreviewing) StartupGlobalPreview(); + DOTweenAnimation[] anims = src.gameObject.GetComponents(); + foreach (DOTweenAnimation anim in anims) AddAnimationToGlobalPreview(anim); + } + if (GUILayout.Button("► Play All in Scene", Styles.btPreview)) { + if (!isPreviewing) StartupGlobalPreview(); + // DOTweenAnimation[] anims = Object.FindObjectsOfType(); // OBSOLETE + DOTweenAnimation[] anims = DeEditorCompatibilityUtils.FindObjectsOfType(); + foreach (DOTweenAnimation anim in anims) AddAnimationToGlobalPreview(anim); + } + EditorGUI.EndDisabledGroup(); + GUILayout.EndHorizontal(); + // Preview - Stop + GUILayout.BeginHorizontal(); + EditorGUI.BeginDisabledGroup(!isPreviewingThis); + if (GUILayout.Button("■ Stop", Styles.btPreview)) { + if (_AnimationToTween.ContainsKey(src)) StopPreview(_AnimationToTween[src].tween); + } + EditorGUI.EndDisabledGroup(); + EditorGUI.BeginDisabledGroup(!isPreviewing); + if (GUILayout.Button("■ Stop All on GameObject", Styles.btPreview)) { + StopPreview(src.gameObject); + } + if (GUILayout.Button("■ Stop All in Scene", Styles.btPreview)) { + StopAllPreviews(); + } + EditorGUI.EndDisabledGroup(); + GUILayout.EndHorizontal(); + if (isPreviewing) { + int playingTweens = 0; + int completedTweens = 0; + int pausedTweens = 0; + foreach (KeyValuePair kvp in _AnimationToTween) { + Tween t = kvp.Value.tween; + if (t.IsPlaying()) playingTweens++; + else if (t.IsComplete()) completedTweens++; + else pausedTweens++; + } + GUILayout.Label("Playing Tweens: " + playingTweens, Styles.previewStatusLabel); + GUILayout.Label("Completed Tweens: " + completedTweens, Styles.previewStatusLabel); +// GUILayout.Label("Paused Tweens: " + playingTweens); + } + GUILayout.EndVertical(); + + return isPreviewing; + } + +#if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5) + public static void StopAllPreviews(PlayModeStateChange state) + { + StopAllPreviews(); + } +#endif + + public static void StopAllPreviews() + { + _TmpKeys.Clear(); + foreach (KeyValuePair kvp in _AnimationToTween) { + _TmpKeys.Add(kvp.Key); + } + StopPreview(_TmpKeys); + _TmpKeys.Clear(); + _AnimationToTween.Clear(); + + DOTweenEditorPreview.Stop(); +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 + UnityEditor.EditorApplication.playmodeStateChanged -= StopAllPreviews; +#else + UnityEditor.EditorApplication.playModeStateChanged -= StopAllPreviews; +#endif +// EditorApplication.playmodeStateChanged -= StopAllPreviews; + + InternalEditorUtility.RepaintAllViews(); + } + +#endregion + +#region Methods + + static void StartupGlobalPreview() + { + DOTweenEditorPreview.Start(); +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 + UnityEditor.EditorApplication.playmodeStateChanged += StopAllPreviews; +#else + UnityEditor.EditorApplication.playModeStateChanged += StopAllPreviews; +#endif +// EditorApplication.playmodeStateChanged += StopAllPreviews; + } + + static void AddAnimationToGlobalPreview(DOTweenAnimation src) + { + if (!src.isActive) return; // Ignore sources whose tweens have been set to inactive + if (_previewOnlyIfSetToAutoPlay && !src.autoPlay) return; + + Tween t = src.CreateEditorPreview(); + if (t == null) return; + _AnimationToTween.Add(src, new TweenInfo(src, t, src.isFrom)); + // Tween setup + DOTweenEditorPreview.PrepareTweenForPreview(t); + } + + static void StopPreview(GameObject go) + { + _TmpKeys.Clear(); + foreach (KeyValuePair kvp in _AnimationToTween) { + if (kvp.Key.gameObject != go) continue; + _TmpKeys.Add(kvp.Key); + } + StopPreview(_TmpKeys); + _TmpKeys.Clear(); + + if (_AnimationToTween.Count == 0) StopAllPreviews(); + else InternalEditorUtility.RepaintAllViews(); + } + + static void StopPreview(Tween t) + { + TweenInfo tInfo = null; + foreach (KeyValuePair kvp in _AnimationToTween) { + if (kvp.Value.tween != t) continue; + tInfo = kvp.Value; + _AnimationToTween.Remove(kvp.Key); + break; + } + if (tInfo == null) { + Debug.LogWarning("DOTween Preview ► Couldn't find tween to stop"); + return; + } + if (tInfo.isFrom) { + int totLoops = tInfo.tween.Loops(); + if (totLoops < 0 || totLoops > 1) { + tInfo.tween.Goto(tInfo.tween.Duration(false)); + } else tInfo.tween.Complete(); + } else tInfo.tween.Rewind(); + tInfo.tween.Kill(); + EditorUtility.SetDirty(tInfo.animation); // Refresh views + + if (_AnimationToTween.Count == 0) StopAllPreviews(); + else InternalEditorUtility.RepaintAllViews(); + } + + // Stops while iterating inversely, which deals better with tweens that overwrite each other + static void StopPreview(List keys) + { + for (int i = keys.Count - 1; i > -1; --i) { + DOTweenAnimation anim = keys[i]; + TweenInfo tInfo = _AnimationToTween[anim]; + if (tInfo.isFrom) { + int totLoops = tInfo.tween.Loops(); + if (totLoops < 0 || totLoops > 1) { + tInfo.tween.Goto(tInfo.tween.Duration(false)); + } else tInfo.tween.Complete(); + } else tInfo.tween.Rewind(); + tInfo.tween.Kill(); + EditorUtility.SetDirty(anim); // Refresh views + _AnimationToTween.Remove(anim); + } + } + +#endregion + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + class TweenInfo + { + public DOTweenAnimation animation; + public Tween tween; + public bool isFrom; + public TweenInfo(DOTweenAnimation animation, Tween tween, bool isFrom) + { + this.animation = animation; + this.tween = tween; + this.isFrom = isFrom; + } + } + + static class Styles + { + static bool _initialized; + + public static GUIStyle previewBox, previewLabel, btOption, btPreview, previewStatusLabel; + + public static void Init() + { + if (_initialized) return; + + _initialized = true; + + previewBox = new GUIStyle(GUI.skin.box).Clone().Padding(1, 1, 0, 3) + .Background(DeStylePalette.squareBorderCurved_darkBorders).Border(7, 7, 7, 7); + previewLabel = new GUIStyle(GUI.skin.label).Clone(10, FontStyle.Bold).Padding(1, 0, 3, 0).Margin(3, 6, 0, 0).StretchWidth(false); + btOption = DeGUI.styles.button.bBlankBorderCompact.MarginBottom(2).MarginRight(4); + btPreview = EditorStyles.miniButton.Clone(Format.RichText); + previewStatusLabel = EditorStyles.miniLabel.Clone().Padding(4, 0, 0, 0).Margin(0); + } + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs.meta new file mode 100644 index 0000000..53780cc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22292a5f27a9a644ba9e6ad1bf863531 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML new file mode 100644 index 0000000..ad80aef --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML @@ -0,0 +1,18 @@ + + + + DOTweenProEditor + + + + + Custom colors + + + + + Needs to be overridden in order to initialize new styles added from inherited classes + + + + diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML.meta new file mode 100644 index 0000000..f37a133 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 753a4f4ed73b17143923101226957756 +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll new file mode 100644 index 0000000..429f3d6 Binary files /dev/null and b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll differ diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.mdb.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.mdb.meta new file mode 100644 index 0000000..f7149bc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.mdb.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: ee3a420017f129443896310d9fab256b +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.meta new file mode 100644 index 0000000..62ab8c0 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a6402d4311c862b4eb1325590d6466af +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/readme.txt b/Assets/Plugins/Demigiant/DOTweenPro/readme.txt new file mode 100644 index 0000000..9837c95 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/readme.txt @@ -0,0 +1,35 @@ +DOTween and DOTween Pro are copyright (c) 2014-2018 Daniele Giardini - Demigiant + +// IMPORTANT!!! ///////////////////////////////////////////// +// Upgrading DOTween from versions older than 1.2.000 /////// +// (or DOTween Pro older than 1.0.000) ////////////////////// +------------------------------------------------------------- +If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. +1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry +2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath +3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup +4) From the Add/Remove Modules panel that opens, activate/deactivate Modules for Unity systems and for external assets (like TextMesh Pro) + +// GET STARTED ////////////////////////////////////////////// + +- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. + +// VISUAL SCRIPTING (PRO ONLY) +- To animate a gameObject, select it and choose "Add Component > DOTween > DOTween Animation" +- To animate a gameObject along a path, select it and choose "Add Component > DOTween > DOTween Path" + +// SCRIPTING +- In your code, add "using DG.Tweening" to each class where you want to use DOTween. +- You're ready to tween. Check out the links below for full documentation and license info. + + +// LINKS /////////////////////////////////////////////////////// + +DOTween website (documentation, examples, etc): http://dotween.demigiant.com +DOTween license: http://dotween.demigiant.com/license.php +DOTween repository (Google Code): https://code.google.com/p/dotween/ +Demigiant website (documentation, examples, etc): http://www.demigiant.com + +// NOTES ////////////////////////////////////////////////////// + +- DOTween's Utility Panel can be found under "Tools > Demigiant > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file diff --git a/Assets/Plugins/Demigiant/DOTweenPro/readme.txt.meta b/Assets/Plugins/Demigiant/DOTweenPro/readme.txt.meta new file mode 100644 index 0000000..6a87c35 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/readme.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: aa8f07903bf128e44a7d0b91a63dedab +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib.meta b/Assets/Plugins/Demigiant/DemiLib.meta new file mode 100644 index 0000000..edcf2cc --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: 5a499e4809836274eb38cd99b370a2c1 +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- iTween +- DFTween +- LeanTween +- Ease +- Easing +- Shake +- Punch +- 2DToolkit +- TextMeshPro +- Text +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core.meta b/Assets/Plugins/Demigiant/DemiLib/Core.meta new file mode 100644 index 0000000..86e5075 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 03513cf143bb144409fbb3a51ec77b1b +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll new file mode 100644 index 0000000..1c11c90 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.mdb.meta b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.mdb.meta new file mode 100644 index 0000000..de5f720 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.mdb.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 995cf2d9b4a41f840b3a41712e9b3bc0 +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.meta b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.meta new file mode 100644 index 0000000..1ed9199 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 54be29b67d0d29a478da2c6e5c62f091 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 1 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml new file mode 100644 index 0000000..4c7a209 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml @@ -0,0 +1,252 @@ + + + + DemiLib + + + + + Property attribute + Shows a float/int value with a slider. + Works like Unity's Range attribute, but has extra options for custom label, and also works with DemiLib's Range structs + + + + + Shows a float/int value with a slider. + Works like Unity's Range attribute, but has extra options for custom label, and also works with DemiLib's Range structs + + Min value + Max value + Override field label + + + + Class attribute + Sets the script execution order index + + + + + Sets the script execution order for this class + + Script execution order index + + + + Set when calling DeGUI.BeginGUI + + + + + Stores a color palette, which can be passed to default DeGUI layouts when calling DeGUI.BeginGUI, + and changed at any time by calling DeGUI.ChangePalette. + You can inherit from this class to create custom color palettes with more hColor options. + + + + + Converts a HEX color to a Unity Color and returns it + + The HEX color, either with or without the initial # (accepts both regular and short format) + + + + Global colors + + + + + Background colors + + + + Editor background color + + + + Content colors + + + + + Toggle button specific colors + + + + + Various Input utils + + + + + Returns a number key int if a number key was pressed in this frame, or -1 otherwise + + + + + + Extend this to replicate Unity's Scope system with any Unity version. + Thanks to Dmitriy Yukhanov for pointing this out and creating an initial version. + Expand this class to create scopes. + Example: + public class VBoxScope : DeScope + { + public VBoxScope(GUIStyle style) + { + BeginVBox(style); + } + + protected override void CloseScope() + { + EndVBox(); + } + } + Usage: + using (new VBoxScope(myStyle) { + // Do something + } + + + + + Contains both free and pro skins color variations, + and automatically returns the correct one when converted to Color + + + + + Used by DeHierarchy + + + + + Returns a list of all items whose gameObject is NULL, or NULL if there's no missing gameObjects. + + + + + If the item exists sets it, otherwise first creates it and then sets it + + + + + If the item exists sets it, otherwise first creates it and then sets it + + + + + If the item exists sets it, otherwise first creates it and then sets it + + + + + Returns TRUE if the item existed and was removed. + + + + + Returns TRUE if the item existed and was changed. + + + + + Returns the customizedItem for the given gameObject, or NULL if none was found + + + + + Returns the color corresponding to the given + + + + Must be univocal + + + Node position in editor GUI + + + Ids of all forward connected nodes. Length indicates how many forward connections are allowed. + Min length represents available connections from node. + + + + A serializable struct including a min and a max int value + + + + Min value + + + Max value + + + + Creates a new Range + + + + + Returns a random value within this range (min/max included) + + + + + + + + A serializable struct including a min and a max float value + + + + Min value + + + Max value + + + + Creates a new Range + + + + + Returns a random value within this range (min/max included) + + + + + Returns a value within the range at the given 0-1 (clamped) percentage + + + + + + + + Returns ONLY the Components in the children, and ignores the parent. + + If TRUE also includes inactive children + + + + Returns the Component only if it's in a child, and ignores the parent. + + If TRUE also searches inactive children + + + + Returns a HEX version of the given Unity Color, without the initial # + + If TRUE, also converts the alpha value and returns a hex of 8 characters, + otherwise doesn't and returns a hex of 6 characters + + + + Returns a HEX version of the given Unity Color, without the initial # + + If TRUE, also converts the alpha value and returns a hex of 8 characters, + otherwise doesn't and returns a hex of 6 characters + + + diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml.meta b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml.meta new file mode 100644 index 0000000..473a9b5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 9bf2564c9817bb34988453ae948954d2 +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor.meta new file mode 100644 index 0000000..11f8e33 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 77fbbad1c51d68f4c844d26743104b07 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll new file mode 100644 index 0000000..97da643 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.mdb.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.mdb.meta new file mode 100644 index 0000000..b640c3e --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.mdb.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 2c20a7b4db3cd0a4a99bcf6218f92860 +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.meta new file mode 100644 index 0000000..aa20ddf --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 202f9ddaf2c1a8a429504f7f3cd7b84f +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml new file mode 100644 index 0000000..883818d --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml @@ -0,0 +1,2424 @@ + + + + DemiEditor + + + + + Utils to use the correct method based on Unity's version + + + + + Encodes to PNG using reflection to use correct method depending if editor is version 2017 or earlier + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Returns the prefab parent by using different code on Unity 2018 or later + + + + + Starts an editor coroutine. You can't use normal yield new WaitFor methods because + those are Unity runtime, but you can instead use . + Other than that, you can use normal yield null/etc. + Returns an (which you can use with to cancel the coroutine), + or NULL in case the coroutine completed immediately. + + + + + Stops the given coroutine generated by + + + + + To be used inside a coroutine as a yield instruction: waits for the given seconds + (replaces Unity's yield new WaitForSeconds because it's not available in-editor). + Example usage: + yield return DeEditorCoroutines.WaitForSeconds(1); + + + + + File utils + + + + Path slash for AssetDatabase format + + + Path slash to replace for AssetDatabase format + + + Current OS path slash + + + Path slash to replace on current OS + + + + Full path to project directory, without final slash. + + + + + Full path to project's Assets directory, without final slash. + + + + + Returns TRUE if the given path is an absolute path + + + + + Returns TRUE if the given path is an AssetDatabase path + + + + + Returns TRUE if the given GUID refers to a valid and existing project folder + + + + + Converts the given project-relative path to a full path + + + + + Converts the given full path to a project-relative path + + + + + Returns TRUE if the file/directory at the given path exists. + + Path, relative to Unity's project folder + + + + Validates the string as a valid fileName + (uses commonly accepted characters an all systems instead of system-specific ones). + BEWARE: doesn't check for reserved words + + string to replace + Minimum length for considering the string valid + + + + Returns TRUE if the given filepath is within this Unity project Assets folder + + Full file path + + + + Returns the given string stripped of any invalid filename characters. + BEWARE: doesn't check for reserved words + + string to replace + Character to use as replacement for invalid ones + + + + Returns the given path with all slashes converted to the correct ones used by the system + + + + + Returns the asset path of the given GUID (relative to Unity project's folder), + or an empty string if either the GUID is invalid or the related path doesn't exist. + + + + + Checks if the given directory (full path) is empty or not + + + + + Deletes all files and subdirectories from the given directory + + + + Returns the adb path to the given ScriptableObject + + + Returns the adb path to the given MonoBehaviour + + + Returns the adb directory that contains the given ScriptableObject without final slash + + + Returns the adb directory that contains the given MonoBehaviour without final slash + + + + Returns the adb paths to the selected folders in the Project panel, or NULL if there is none. + Contrary to Selection.activeObject, which only returns folders selected in the right side of the panel, + this method also works with folders selected in the left side. + + + + + Sets the script execution order of the given MonoBehaviour + + + + + Gets the script execution order of the given MonoBehaviour + + + + + Precisely returns the last controlId assigned to a GUI element + + + + + Framework used to fix missing monoScript reference in GameObjects when a script's meta guid changes + + + + + Retrieves the GUID in the given meta file and returns it, or NULL if it's not found + + Full filePath to the meta file + + + + Fixes all wrong Component GUIDs in scenes and prefabs + + objects to use for the operation + + + + Fixes all wrong Component GUIDs in the active scene and returns the total number of Components fixed + + objects to use for the operation + + + + Finds all MonoBehaviour/Behaviour/Component in the given scene/prefab file string + that contain the given + and replaces their GUID with the one passed (if different). + Returns the total number of Component GUIDs that were fixed + + + + + Dispatched when Unity has finished compiling code and updating the AssetDatabase + + + + + Utils to manage UnityPackages import/export and file mirroring + + + + + Stores all file paths (excluding metas) found in the given AssetDatabase directory and subdirectory + into the given AssetDatabase file (which will be created if missing), + writing them as relative to the given directory. + EXAMPLE: + adbReadFromDirPath = "Plugins/DOTween" + file "Assets/Plugins/DOTween/aScript.cs" stored as "aScript.cs" + file "Assets/Plugins/DOTween/Subdir/aScript.cs" stored as "Subdir/aScript.cs" + + + AssetDatabase path ("Assets/...") where the list should be written + AssetDatabase path ("Assets/...") from which the list of files should be retrieved, without final slash + If TRUE ignores ASMDEF files + + + + Parses a file list created via and removes any files not present in the list from the given directory + + Label to use when logging the result + AssetDatabase path ("Assets/...") to the file containing the list + AssetDatabase path ("Assets/...") to the directory to parse for extra files to remove + If TRUE ignores ASMDEF files + If TRUE only returns a report log and doesn't actually delete the files + + + + Utilities for Editor Panels. + + + + + Connects to a asset. + If the asset already exists at the given path, loads it and returns it. + Otherwise, depending on the given parameters, either returns NULL or automatically creates it before loading and returning it. + + Asset type + File path (relative to Unity's project folder) + If TRUE and the requested asset doesn't exist, forces its creation + If TRUE also creates the path folders if they don't exist + + + + Check if the at the given path exists and eventually if it's available + + File path (relative to Unity's project folder) + If TRUE also check if the file is available + (file can be unavailable if it was deleted outside Unity, or if Unity is just starting) + + + + + Returns TRUE if the given is dockable, FALSE if instead it's a utility window + + + + + + + Sets the icon and title of an editor window. Works with older versions of Unity, where the titleContent property wasn't available. + + Reference to the editor panel whose icon to set + Icon to apply + Title. If NULL doesn't change it + + + + Repaints the currently focues editor + + + + + Prefab utilities + + + + + Behaves as the Inspector's Apply button, applying any modification of this instance to the prefab parent + + + + + + Returns TRUe if a prefab instance has unapplied modifications, ignoring any modifications applied to the transform. + NOTE: this a somehow costly operation (since it generates GC) + + + + + Completely removes any prefab connection from the given prefab instances, by desotroing the original object and recreating it. + Returns a list with all the new elements created. + + Based on RodGreen's method (http://forum.unity3d.com/threads/82883-Breaking-connection-from-gameObject-to-prefab-for-good.?p=726602&viewfull=1#post726602) + + + + + + Completely removes any prefab connection from the given prefab instance, by desotroing the original object and recreating it. + + Based on RodGreen's method (http://forum.unity3d.com/threads/82883-Breaking-connection-from-gameObject-to-prefab-for-good.?p=726602&viewfull=1#post726602) + + + + + Returns TRUE if Unity editor is neither compiling code nor updating assets + + + Calls the given action after the given delay + + + + Return the size of the editor game view, eventual extra bars excluded (meaning the true size of the game area) + + + + + Returns a value from 1 to N (2 for 200% scaling) indicating the UI Scaling of Unity's editor. + The first time this is called it will store the scaling and keep it without refreshing, + since you need to restart Unity in order to apply a scaling change + + + + + Clears all logs from Unity's console + + + + + Adds the given global define (if it's not already present) to all the + or only to the given , depending on passed parameters, + and returns TRUE if it was added, FALSE otherwise. + NOTE: when adding to all of them some legacy warnings might appear, which you can ignore. + + + to use. Leave NULL to add to all of them. + + + + Adds the given list of global defines (if they're not already present) to all the + or only to the given , depending on passed parameters, + and returns TRUE if it was added, FALSE otherwise. + NOTE: when adding to all of them some legacy warnings might appear, which you can ignore. + + Defines to add + to use. Leave NULL to add to all of them. + + + + Removes the given global define (if present) from all the + or only from the given , depending on passed parameters, + and returns TRUE if it was removed, FALSE otherwise. + NOTE: when removing from all of them some legacy warnings might appear, which you can ignore. + + + to use. Leave NULL to remove from all of them. + + + + Removes the given global defines (if present) from all the + or only from the given , depending on passed parameters, + and returns TRUE if it was removed, FALSE otherwise. + NOTE: when removing from all of them some legacy warnings might appear, which you can ignore. + + Defines to remove + to use. Leave NULL to remove from all of them. + + + + Returns TRUE if the given global define is present in at least one of the + or only in the given , depending on passed parameters. + + + to use. Leave NULL to check in all of them for the first occurrence. + + + + Returns an array of all defines in the current . + + + + + Sets the gizmos icon visibility in the Scene and Game view for the given class names + + Visibility + Class names (no namespace), as many as you want separated by a comma + + + + Sets the gizmos icon visibility in the Scene and Game view for all custom icons + (for example icons created with HOTools) + + Visibility + + + + Returns all components of type T in the currently open scene, or NULL if none could be found. + If you're on Unity 5 or later, and have DeEditorTools, use DeEditorToolsUtils.FindAllComponentsOfType + instead, which is more efficient. + + + + + Shifts an item from an index to another, without modifying the list except than by moving elements around + + + + + Expands the given array and adds the given element as the last one + + + + + Removes the element at index from the given array, shifts everything after by -1 position and resizes the array + + + + Nothing is being dragged + + + Dragging + + + Dragging concluded and accepted + + + Dragging concluded but item position didn't change + + + Dragging canceled + + + Dragging concluced but not accepted because too short + + + Automatically determines if dragged elements are horizontal, vertical, or both + + + Forces vertical drag + + + Forces horizontal drag (useful to avoid initial wrong drag indicators + if the users starts dragging an horizontal system vertically) + + + + Manages the dragging of GUI elements + + + + + True if a GUI element is currently being dragged + + + + + Return the current item being dragged, or NULL if there is none + + + + + Type of current item being dragged, or NULL if there is none + + + + + Starting index of current item being dragged, or NULL if there is none + + + + + Retrieves the eventual optional data stored via the StartDrag method + + + + + Starts a drag operation on a GUI element. + + Reference to the current editor drawing the GUI (used when a Repaint is needed) + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Optional data that can be retrieved via the static property + + + + Starts a drag operation on a GUI element. + + ID for this drag operation (must be the same for both StartDrag and Drag + Reference to the current editor drawing the GUI (used when a Repaint is needed) + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Optional data that can be retrieved via the static property + + + + Starts a drag operation on a GUI element. + + Reference to the current editor drawing the GUI (used when a Repaint is needed) + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Optional data that can be retrieved via the static property + + + + Starts a drag operation on a GUI element. + + ID for this drag operation (must be the same for both StartDrag and Drag + Reference to the current editor drawing the GUI (used when a Repaint is needed) + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Optional data that can be retrieved via the static property + + + + Call this after each draggable GUI block, to calculate and draw the current drag state + (or complete it if the mouse was released). + + ID for this drag operation (must be the same for both StartDrag and Drag + List containing the draggable item and all other relative draggable items + Current index of the draggable item being drawn + If NULL will calculate this automatically using . + Pass this if you're creating a drag between elements that don't use GUILayout + Drag direction. You can leave it to + unless you want to skip eventual layout calculations + If TRUE (default) automatically reorders the given list + to reflect successful drag results. + Note that will be different if you apply the drag to the list or not + (in the former case it will reflect the current index after the change, in the latter it will reflect the desired position) + + + + Call this after each draggable GUI block, to calculate and draw the current drag state + (or complete it if the mouse was released). + + List containing the draggable item and all other relative draggable items + Current index of the draggable item being drawn + If NULL will calculate this automatically using . + Pass this if you're creating a drag between elements that don't use GUILayout + Drag direction. You can leave it to + unless you want to skip eventual layout calculations + If TRUE (default) automatically reorders the given list + to reflect successful drag results. + Note that will be different if you apply the drag to the list or not + (in the former case it will reflect the current index after the change, in the latter it will reflect the desired position) + + + + Call this after each draggable GUI block, to calculate and draw the current drag state + (or complete it if the mouse was released). + + ID for this drag operation (must be the same for both StartDrag and Drag + List containing the draggable item and all other relative draggable items + Current index of the draggable item being drawn + Color to use for drag divider and selection + If NULL will calculate this automatically using . + Pass this if you're creating a drag between elements that don't use GUILayout + Drag direction. You can leave it to + unless you want to skip eventual layout calculations + If TRUE (default) automatically reorders the given list + to reflect successful drag results. + Note that will be different if you apply the drag to the list or not + (in the former case it will reflect the current index after the change, in the latter it will reflect the desired position) + + + + Call this after each draggable GUI block, to calculate and draw the current drag state + (or complete it if the mouse was released). + + List containing the draggable item and all other relative draggable items + Current index of the draggable item being drawn + Color to use for drag divider and selection + If NULL will calculate this automatically using . + Pass this if you're creating a drag between elements that don't use GUILayout + Drag direction. You can leave it to + unless you want to skip eventual layout calculations + If TRUE (default) automatically reorders the given list + to reflect successful drag results. + Note that will be different if you apply the drag to the list or not + (in the former case it will reflect the current index after the change, in the latter it will reflect the desired position) + + + + Ends the drag operations, and eventually applies the drag outcome. + Returns TRUE if the position of the dragged item actually changed. + Called automatically by Drag method. Use it only if you want to force the end of a drag operation. + + If TRUE marks the drag as successful and applied it if set so, otherwise simply cancels the drag + If TRUE changes the list contents to reflect the drag result + + + + Abstract dynamic class used for every node of the same type + (meaning there is only a single recycled instance for all same-type nodes) + + + + Used to fill + + + Called when the node needs to be drawn + + + + The connectedNodesIds list will be automatically increased/decreased when adding/removing connections + (otherwise connectedNodesIds will have to be increased via custom code) + + + + + Requires only two connectedNodesIds (no more, no less), + uses regular CTRL+Drag to connect connection 0, CTRL+SPACE+Drag to connect connection 1 + + + + + Like , but with an extra connection as a last extra index, which is set when pressing CTRL+SPACE+Drag. + Must always have at least one element in connectedNodesIds + + + + Layout, Repaint, LayoutAndRepaint + + + + Stores cloned nodes for pasting + + + + + Returns a list of pasteable nodes, with their GUID recreated and their connections adapted + + + + + + Returns a deep clone of the given node but doesn't clone UnityEngine references. + A new ID will be automatically generated. + + + + + Always connects a node from BottomOrRight side to TopOrLeft side + + + + + Always connects from BottomOrRight side to TopOrLeft side. + If ALT is pressed shows the delete connection button. + Called during Repaint or MouseDown/Up. + Returns TRUE if the connection was deleted using the delete connection button. + + + + + Always connects a node from BottomOrRight side to TopOrLeft side + + + + + Always connects from BottomOrRight side to TopOrLeft side. + If ALT is pressed shows the delete connection button. + Called during Repaint or MouseDown/Up. + Returns TRUE if the connection was deleted using the delete connection button. + + + + + You can attach to this + + + + + Use this to add a content group to the Help Panel + + + + Regular note + + + Editable note (activated by setting to TRUE + (but you will have to save the result somewhere yourself) + + + If TRUE shows the textArea + + + + Add definition. Supports rich-text but also these special tags: + - [b][/b] + + + + + Add key, automatically formatting these special keys: + / + + + → + + If TRUE and there's other keys/targets, adds the new key on a new line preceded by a comma + + + + Recalculates all rects based on the given Y shift + + + + + One per . + Partially independent, mainly controlled by process. + + + + TRUE when read-to or dragging nodes + + + + Resets the interaction state + + + + Returns TRUE if the given node is currently being dragged + + + + Returns TRUE if a repaint is required + + + + + + Main class for DeGUI Node system. + Create it, then enclose your GUI node calls inside a . + CODING ORDER: + - Create a to use for your node system (create it once, obviously) + - Inside OnGUI, write all your nodes GUI code inside a + - To draw the nodes, loop through the list and call for each node + + + + Distance at which nodes will be placed when snapping next to each other + + + Full area without zeroed coordinates + + + Position with zeroed coordinates (used by all node GUI since it's inside a GUILayout(area)) + + + Contains the nodes passed to NodeProcessScope ordered by depth. + You should loop through this list when drawing nodes + + + + Creates a new NodeProcess. + + EditorWindow for this process + Callback called when one or more nodes are going to be deleted. + Return FALSE if you want the deletion to be canceled. + Can be NULL, in which case it will be ignored + Callback called when a node is cloned. + Return FALSE if you want the cloning to be canceled. + Can be NULL, in which case it will be ignored + + + + Needs to be called when loading a complete new series of nodes + + + + + Call this when the layout/size of one or more nodes changed because of external intervention + (if a whole new range of nodes has been loaded, just call instead) + + + + + Forces the refresh of the area calculations. Useful if you need them before the first GUI call has run + + + + + Shifts the visible are to the given coordinates and repaints on end + + + + + Shifts the visible are to the given coordinates and repaints on end + + + + + Resets the node process scale to 1 + + + + + Scales up the node process area (if not already at max scale) + + + + + Scales down the node process area (if not already at min scale) + + + + + Tells the process to repaint once the process has ended. + Calling this + + + + + Draws the given node using the given T editor GUINode type. + Returns the full area of the node + + + + + Opens the Help Panel + + + + + Closes the Help Panel + + + + + Opens or closes the Help panel based on its current state + + + + + Returns TRUE if the given area is visible (even if partially) inside the current nodeProcess area + + + + + Captures a screenshot of the node editor area and returns it when calling the onComplete method. + Sadly this requires a callback because if called immediately the capture will fail + with a "[d3d11] attempting to ReadPixels outside of RenderTexture bounds!" error in most cases + + Screenshot mode + A callback that accepts the generated Texture2D object + Screenshot scale factor (only used if screenshotMode is set to ) + If TRUE (default) displays a progress bar during the operation. + You'll want to set this to FALSE when you're already using a custom progressBar + and the screenshot is only part of a larger queue of operations + + + + Removes the node with the given ID from the list and removes all connections to it from other nodes. + Doesn't mark things dirty nor prepares them for undo + + + + + Use this to encapsulate node GUI operations. + Automatically manages various operations (press F1 to see them). + Sets GUI.changed to TRUE if the area is panned, a node is dragged, controlNodes change sorting or are deleted. + Wraps all content inside a GUILayout Area (nodeArea). + + The to use + Area within which the nodes will be drawn + Area shift (caused by dragging) + This list will be sorted based on current node draw order, + and changed in case one of its nodes is deleted. + IMPORTANT: this list should be part of your serialized class (MonoBehaviour or ScriptableObject), + so it will be stored as a reference and modifying one will modify the other. + Usually you want to pass all nodes to this except the eventual start node (or nodes that can't be sorted nor deleted). + + + + Set automatically when a selection ends up selecting a single node, + reset when deselecting all nodes, selecting multiple nodes, or resetting the + + + + + Returns TRUE if something was actually deselected, FALSE if there were no selected nodes + + + + + + Returns key modifiers currently pressed. + Requires to be updated at the beginning of every GUI call. + + + + Note: ALT isn't correctly interpreted as OPTION on OSX, contrary to what Unity manual states, + so using Command instead fixes that + + + + Call this method to update data required by softCtrl calculations. + Automatically called from within a . + Returns a object with the keys that were just pressed and just released + + Required to have the correct for the given target call + + + + Returns the given as an int, or -1 if it's not a number + + + + + Used code from Celtc on StackOverflow: https://stackoverflow.com/a/54044197/10151925 + + + + + Gets all fields from an object and its hierarchy inheritance + + + + + Perform a deep copy of the class + + + + + Does the copy + + + + + Returns by . + Contains properties and methods to manage non-layout scrollview better. + Remember to use or to increase or set the full content height + + + + Area used by ScrollView and its content + + + Full content area regardless if visible or not. Its height should be set manually based on the contents' height + + + Content area currently visible (scroll bars excluded) + + + Current scrollPosition + + + + Returns the current open, or an empty one if none is open. + + + + + Sets the width + + + + + Sets the height + + + + + Increase the height by the given amount + + + + + + Returns a Rect for a single line at the current scrollView yMax + + If less than 0 uses default line height, otherwise the value passed + if TRUE (default) automatically increases the height of the accordingly + + + + + Returns a Rect for a single line at the current scrollView yMax, as wide as the max visible rect width + + If less than 0 uses default line height, otherwise the value passed + if TRUE (default) automatically increases the height of the accordingly + + + + + Returns TRUE if the given rect is at least partially visible in the displayed scroll area + + + + + Contains both free and pro skins GUIStyle variations, + and automatically returns the correct one when converted to GUIStyle + + + + + Plays the given clip in the Editor + + + + + Stops playing the given clip. + + + + + Stops all clips playing. + + + + + A stopwatch whose time can be changed manually via + + + + + Start or resume playing + + + + + Stop the watch and reset the time + + + + + Restart measuring from zero + + + + + Pause the watch + + + + + Send the watch to the given time + + + + + Util to determine Unity editor version and store them as comparable numbers + + + + Full major version + first minor version (ex: 2018.1f) + + + Major version + + + First minor version (ex: in 2018.1 it would be 1) + + + + Assembly extensions + + + + + Full path to the assembly directory, without final slash + + + + + AssetDatabase path to the assembly directory, without final slash + + + + + GUI extension methods + + + + + Clones the style and adds the given formats to it. You can pass any of these types of values: + + Format:Rich-text, wordwrap + FontStyle:Font style + TextAnchor:Content anchor + int:Font size + Color/DeSkinColor:Font color + + + + + + Adds the given formats to the style. You can pass any of these types of values: + + Format:RichText, WordWrap + FontStyle:Font style + TextAnchor:Content anchor + int:Font size + Color/DeSkinColor:Font color + + + + + + Sets the border of the style + + + + + Sets the border of the style + + + + + Sets the border of the style + + + + + Sets the background of the style + + + + + Sets the background of the style + + + + + Sets the contentOffset of the style + + + + + Sets the contentOffset of the style + + + + + Sets the X contentOffset of the style + + + + + Sets the Y contentOffset of the style + + + + + Sets the margin of the style + + + + + Sets the margin of the style + + + + + Sets the margin of the style + + + + + Sets the left margin of the style + + + + + Sets the right margin of the style + + + + + Sets the top margin of the style + + + + + Sets the bottom margin of the style + + + + + Sets the overflow of the style + + + + + Sets the overflow of the style + + + + + Sets the overflow of the style + + + + + Sets the left overflow of the style + + + + + Sets the right overflow of the style + + + + + Sets the top overflow of the style + + + + + Sets the bottom overflow of the style + + + + + Sets the padding of the style + + + + + Sets the padding of the style + + + + + Sets the padding of the style + + + + + Sets the left padding of the style + + + + + Sets the right padding of the style + + + + + Sets the top padding of the style + + + + + Sets the bottom padding of the style + + + + + Sets the Y fixedWidth of the style + + + + + Sets the fixedHeight of the style + + + + + Sets the stretchHeight property of the style + + + + + Sets the stretchWidth property of the style + + + + + Stores a GUIStyle palette, which can be passed to default DeGUI layouts when calling DeGUI.BeginGUI, + and changed at any time by calling DeGUI.ChangePalette. + You can inherit from this class to create custom GUIStyle palettes with more options. + Each of the sub-options require a public Init method to initialize the styles, which will be called via Reflection. + + + + + Called automatically by DeGUI.BeginGUI. + Override when adding new style subclasses. + Returns TRUE if the styles were initialized or re-initialized + + + + + Extend any custom subpalettes from this, so they will be initialized correctly + + + + + GUILayout methods + + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you set a background to the button's GUIStyle). + Requires to be activated. + + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you set a background to the button's GUIStyle) + and also assigns different GUI colors based on the button's state and the given one. + Requires to be activated. + + Content + Default color + Style + GUILayout options + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you set a background to the button's GUIStyle) + and also assigns different GUI colors based on the button's state with options to eventually auto-generate them. + Requires to be activated. + + Content + Default color + Hover color (if NULL auto-generates it from the given one by making it brighter + Pressed color (if NULL auto-generates it from the given one by making it even brighter + Style + GUILayout options + + + Shaded button + + + Shaded button + + + Shaded button + + + Shaded button + + + Colored button + + + Colored button + + + Colored button + + + Colored button + + + + Draws a button that returns TRUE the first time it's pressed, instead than when its released. + + + + + Draws a button that returns TRUE the first time it's pressed, instead than when its released. + + + + + Draws a button that returns TRUE the first time the mouse moves over it while the mouse button is pressed, + even if it was pressed outside of the button first + + + + + Draws a button that returns TRUE the first time the mouse moves over it while the mouse button is pressed, + even if it was pressed outside of the button first + + + + Toolbar foldout button + + + Toolbar foldout button + + + Toolbar foldout button + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Begins an horizontal toolbar layout + + + Begins an horizontal toolbar layout + + + Begins an horizontal toolbar layout + + + Begins an horizontal toolbar layout + + + Ends an horizontal toolbar layout + + + A toolbar with a label + + + A toolbar with a label + + + A toolbar with a label + + + A toolbar with a label + + + A toolbar with a label + + + A toolbar with a label + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Auto-determines object type from the field's type + + + Returns TRUE if there's mixed values. Forces field to accept only objects of the given type + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Vertical box layout with style and color options + + + Vertical box layout with style and color options + + + End vertical box layout + + + Horizontal Divider + + + + A text field that becomes editable only on double-click + + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click + + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click and can also be dragged + + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Style for default (non-editing mode) appearance + Style for editing mode + + + + + A text field that becomes editable only on double-click and can also be dragged + + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Style for default (non-editing mode) appearance + Style for editing mode + + + + + Creates a Gradient field by using Unity 4.x hidden default one and Reflection. + + + + Scene field + + + Scene field + + + + Draws a dropdown for choosing a SortingLayer ID + + + + + Draws a dropdown for choosing a SortingLayer ID + + + + + Global Demigiant GUI manager. Call to initialize it inside GUI calls. + + + + + Default color palette + + + + + Default style palette + + + + TRUE if we're using the PRO skin + + + + Call this at the beginning of GUI methods. + Returns TRUE if the styles were initialized or re-initialized + + Eventual to use + Eventual to use + + + + Better implementation of GUI.BeginScrollView. + Returns the modified scrollView struct. + Must be closed by a DeGUI.. +
EXAMPLE
+            Rect scrollViewArea = ...;
+            Rect drawArea = scrollViewArea;
+            // Decrease the full drawing area to exclude scrollbars if necessary
+            if (_scrollView.fullContentArea.height > scrollViewArea.height) drawArea = drawArea.Shift(0, 0, -11, 0);
+            // Begin scrollView
+            _scrollView = DeGUI.BeginScrollView(scrollViewArea, _scrollView);
+            // Increase scrollView area correctly (or directly set it with SetFullContentHeight
+            _scrollView.IncreaseContentHeightBy(...)
+            // End
+            DeGUI.EndScrollView();
+            
+
+ Visible area used by the scrollView + target. You'll need to set its size to the correct full content height + (either within the Begin/ENd ScrollView calls or before them) + If TRUE (default) resets .height to 0 + after beginning the ScrollView +
+ + + Closes a DeGUI. correctly + + + + + Exits the current event correctly, also taking care of eventual drag operations + + + + + Removes focus from any GUI button/text/element that has focus + + + + + Changes the active palettes to the given ones + (or resets them to the default ones if NULL). + Returns TRUE if the styles were initialized or re-initialized + + + + + Resets the GUI colors to the default ones (only available if BeginGUI was called first) + + + + + Sets the GUI colors to the given ones + + + + + Opens a panel that previews the given texture (if not NULL) + + + + + Gets either black or white, depending on the color that would be most visible on the given one + + + + + Gets either black or white, depending on the color that would be most visible on the given one + + + + + Returns TRUE if the double-click text area/field with the given id is currently in editing mode + + + + + Sets the GUI cursor color to the given ones + + + + + Sets the GUI matrix to the given ones + + + + + Wrapper to set serialized fields with multiple sources selected: automatically sets GUI to show mixed values when necessary + and contains a fieldInfo which is set within the wrapper. + Note that you must set the property within the wrapper so that it's assigned correctly when closing the scope. + + + + Multi property scope + Name of the field so it can be found and set/get via Reflection + List of the sources containing the given field + If TRUE validates EditorGUI.EndChangeCheck before calling it + (fixes an issue which happens with advanced Undo usage in DOTween Timeline and ColorFields) + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you apply a background to the button's GUIStyle). + Requires to be activated. + + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you apply a background to the button's GUIStyle) + and also assigns different GUI colors based on the button's state and the given one. + Requires to be activated. + + Rect + Content + Default color + Style + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you apply a background to the button's GUIStyle) + and also assigns different GUI colors based on the button's state with options to eventually auto-generate them. + Requires to be activated. + + Rect + Content + Default color + Hover color (if NULL auto-generates it from the given one by making it brighter + Pressed color (if NULL auto-generates it from the given one by making it even brighter + Style + + + Shaded button + + + Shaded button + + + Shaded button + + + Shaded button + + + Colored button + + + Colored button + + + Colored button + + + Colored button + + + Toolbar foldout button which allows clicking even on its label + + + Foldout button + label (not intended to be used in toolbar) which allows click-to-foldout/foldin + + + + Draws a button that returns TRUE the first time it's pressed, instead than when its released. + + + + + Draws a button that returns TRUE the first time it's pressed, instead than when its released. + + + + + Draws a button that returns TRUE the first time the mouse moves over it while the mouse button is pressed, + even if it was pressed outside of the button first + + + + + Draws a button that returns TRUE the first time the mouse moves over it while the mouse button is pressed, + even if it was pressed outside of the button first + + + + Toolbar foldout button + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Scene field + + + Scene field + + + + Draws a background grid using the given grid texture + + Area rect + Offset from 0, 0 position (used when area has been dragged) + Texture to use for the grid + Eventual scale to apply to the grid + + + + Draws a background grid using default grid textures + + Area rect + Offset from 0, 0 position (used when area has been dragged) + If TRUE forces a dark skin, otherwise uses a skin that fits with the current Unity's one + Eventual scale to apply to the grid + + + Box with style and color options + + + + Can be used instead of EditorGUI.PropertyField, to draw a serializedProperty without its attributes + (very useful in case you want to use this from within a PropertyDrawer for that same property, + since otherwise bad infinite loops might happen) + + + + Draws a colored square + + + Draws the given texture tiled within the given rect + Rect + Texture + Eventual scale to apply + If not NULL, colorizes the texture with this color + + + + A text field that becomes editable only on double-click + + Area + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click + + Area + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click and can also be dragged + + Area + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click and can also be dragged + + Area + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Style for default (non-editing mode) appearance + Style for editing mode + + + + A textArea that becomes editable only on double-click + + Area + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A textArea that becomes editable only on double-click + + Area + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + Divider + + + + Draws a dropdown for choosing a SortingLayer ID + + + + + Draws a dropdown for choosing a SortingLayer ID + + + + Draws a Vector3Field that can have single axes disabled + + + Draws a Vector3Field that can have single axes disabled + + + Draws a Vector3Field that can have single axes disabled + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Supports using an int as an enum + + + Returns TRUE if there's mixed values. Supports using an int as an enum + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Supports also uint fields + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Auto-determines object type from the field's type + + + Returns TRUE if there's mixed values. Forces field to accept only objects of the given type + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Supports passing int values as bool (1 = true, 0 = false) + + + Returns TRUE if there's mixed values. Supports passing int values as bool (1 = true, 0 = false) + + + Returns TRUE if there's mixed values. Supports passing int values as bool (1 = true, 0 = false) + + + Returns TRUE if there's mixed values. Requires a SerializedProperty representation of each UnityEven field + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + + Returns a new color equal to the given one with changed brightness + + Color to evaluate + Brightness factor (multiplied by current brightness) + If set applies this alpha value + + + + Returns a new color equal to the given one with changed hue + + Color to evaluate + Hue angle to add to current hue (0 to 360) + If set applies this alpha value + + + + Returns a new color equal to the given one with changed saturation + + Color to evaluate + Saturation factor (multiplied by current brightness) + If set applies this alpha value + + + + Changes the alpha of this color and returns it + + + + + Returns a new color equal to the given one with changed alpha + + + + + Returns a HEX version of the given Unity Color, without the initial # + + If TRUE, also converts the alpha value and returns a hex of 8 characters, + otherwise doesn't and returns a hex of 6 characters + + + + Returns a HEX version of the given Unity Color, without the initial # + + If TRUE, also converts the alpha value and returns a hex of 8 characters, + otherwise doesn't and returns a hex of 6 characters + + + + Replicates parts of DeExtensions.ListExtensions for internal usage + + + + + Shifts an item from an index to another, without modifying the list except than by moving elements around + + + + + Shuffles the list + + + + + Replicates DeExtensions.RectExtensions for internal usage + + + + + Adds one rect into another, and returns the resulting a + + + + + Returns a copy or the Rect expanded around its center by the given amount + + Indicates how much to expand the rect on each size + + + + Returns a copy or the Rect expanded around its center by the given amount + + Indicates how much to expand the rect on each horizontal side + Indicates how much to expand the rect on each vertical side + + + + Returns a copy or the Rect contracted around its center by the given amount + + Indicates how much to contract the rect on each size + + + + Returns a copy or the Rect contracted around its center by the given amount + + Indicates how much to contract the rect on each horizontal side + Indicates how much to contract the rect on each vertical side + + + + Returns a copy of the Rect resized so it fits proportionally within the given size limits + + Width to fit + Height to fit + If TRUE (default) only shrinks the rect if needed, if FALSE also enlarges it to fit + + + + + Returns TRUE if the first rect includes the second one + + If TRUE, returns TRUE only if the second rect is fully included, + otherwise just if some part of it is included + + + + Returns TRUE if this rect intersects the given one, and also outputs the intersection area + + Intersection area + + + + Returns a copy of the Rect with its X/Y coordinates set to 0 + + + + + Sets this rect to the left of the given x position, with options for margin and width resize + + Distance between this rect and the given x position + If greater than zero resizes this rect to the given size + + + + Sets this rect to the right of the given x position and resizes it so that its xMax remains the same. + + Distance between this rect and the given x position + Extra offset to add to the resulting width + + + + Returns a copy of the Rect with its values shifted according the the given parameters + + + + + Returns a copy of the Rect with its X value shifted by the given value + + + + + Returns a copy of the Rect with its Y value shifted by the given value + + + + + Returns a copy of the Rect with its x shifted by the given value and its width shrinked/expanded accordingly + (so that the xMax value will stay the same as before) + + + + + Returns a copy of the Rect with its y shifted by the given value and its height shrinked/expanded accordingly + (so that the yMax value will stay the same as before) + + + + + Returns a copy of the Rect with its X property set to the given value + + + + + Returns a copy of the Rect with its Y property set to the given value + + + + + Returns a copy of the Rect with its height property set to the given value + + + + + Returns a copy of the Rect with its width property set to the given value + + + + + Returns a copy of the Rect with its X,Y properties set so the rect center corresponds to the given values + + + + + Returns a copy of the Rect with its X property set so the rect X center corresponds to the given value + + + + + Returns a copy of the Rect with its Y property set so the rect Y center corresponds to the given value + + + + + Returns the value of the given property (works like a cast to type). + Improved from HiddenMonk's functions (http://answers.unity3d.com/questions/627090/convert-serializedproperty-to-custom-class.html) + + + + + Returns TRUE if this property is inside an array + + + + + Returns -1 if the property is not inside an array, otherwise returns its index inside the array + + + + + Returns the height of a UnityEvent serializedProperty + + + + + Uses code from FlaShG's GitMerge: https://github.com/FlaShG/GitMerge-for-Unity/blob/master/Editor/SerializedPropertyExtensions.cs + + + + + Uses code from FlaShG's GitMerge: https://github.com/FlaShG/GitMerge-for-Unity/blob/master/Editor/SerializedPropertyExtensions.cs + + + + + String extensions + + + + + Returns TRUE if the string is null or empty + + If TRUE (default) and the string contains only spaces, considers it empty + + + + Compares a version string (in format #.#.###) with another of the same format, + and return TRUE if this one is minor. Boths trings must have the same number of dot separators. + + + + + Converts a HEX color to a Unity Color and returns it + + The HEX color, either with or without the initial # (accepts both regular and short format) + + + + Nicifies a string, replacing underscores with spaces, and adding a space before Uppercase letters (except the first character) + + + + + If the given string is a directory path, returns its parent + with or without final slash depending on the original directory format + + + + + If the string is a directory, returns the directory name, + if instead it's a file returns its name without extension. + Works better than Path.GetDirectoryName, which kind of sucks imho + + + + + Evaluates the string as a property or field and returns its value. + + If NULL considers the string as a static property, otherwise uses obj as the starting instance + + + + Texture extensions + + + + + Returns the full Rect of this texture, with options for position and scale + + + + + Checks that the texture uses the correct import settings, and applies them if they're incorrect. + + + + + Returns a clone of the event + + + + + Utility class. You can either use it as is via its constructor, which automatically retrieves all serializedProperties in the instance, + or you can extend it so you can add as many public SerializedProperties as the SerializedProperties you want to access + (their name must be the same as the serialized field they refer to) + + + + + Automatically retrieves all serializable properties on the given serializedObject, + or only specific ones if propNames is specified + + + + + Draws all property fields. Remember to wrap this within serializedObject.Update + and serializedObject.ApplyModifiedProperties + + +
+
diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml.meta new file mode 100644 index 0000000..d199425 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: d4a42b2e4e6f64d4ba01d35c5a3dafed +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs.meta new file mode 100644 index 0000000..24b1340 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 1efb03f507a60b949a70ed828ac18eb8 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png new file mode 100644 index 0000000..6fbcc51 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png.meta new file mode 100644 index 0000000..0a0a61c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 7ba4b2810f605d945af87e032ca2957b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha10.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha10.png new file mode 100644 index 0000000..21afc7b Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha10.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha10.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha10.png.meta new file mode 100644 index 0000000..488d14c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha10.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8c9cfa1dbe00a1d41ae9d14f5ac543ec +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha15.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha15.png new file mode 100644 index 0000000..3097db8 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha15.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha15.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha15.png.meta new file mode 100644 index 0000000..e907551 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha15.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 53d696c01f6ca524383f11fcc34dd13c +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png new file mode 100644 index 0000000..521e6dc Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png.meta new file mode 100644 index 0000000..2d94303 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: f7ff421f40d548444864a01cd7f47112 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png new file mode 100644 index 0000000..700b9de Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png.meta new file mode 100644 index 0000000..e3040e1 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: aa1d42dc6ff3e894da2208c6929d2165 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png new file mode 100644 index 0000000..f4a47c3 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png.meta new file mode 100644 index 0000000..ce709e4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 595b166389c8db546a199430284ebc9b +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png new file mode 100644 index 0000000..9d8a19a Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png.meta new file mode 100644 index 0000000..490a921 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 05cfe010378336646ad6c721f66543d1 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png new file mode 100644 index 0000000..3ed059a Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png.meta new file mode 100644 index 0000000..bc2ac36 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: af28470bd0e2e9543a6dfa9a1a4b348d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png new file mode 100644 index 0000000..f829461 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png.meta new file mode 100644 index 0000000..0055f30 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 522b0133a9838674ca9a12e0c6e5a59c +timeCreated: 1625322295 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png new file mode 100644 index 0000000..63ef49a Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png.meta new file mode 100644 index 0000000..774d702 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 789ef07ba2573f6448fa8b5dc5224c44 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png new file mode 100644 index 0000000..5c2feae Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png.meta new file mode 100644 index 0000000..ccb4643 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 93b1287b4a087f84c95c72f49ec94e83 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png new file mode 100644 index 0000000..5dc9a72 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png.meta new file mode 100644 index 0000000..9baf726 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d542f997a51000946873268e3546b6ba +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png new file mode 100644 index 0000000..9242a22 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png.meta new file mode 100644 index 0000000..f84830d --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 39cacc93c6c183f44992bf2421362f78 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png new file mode 100644 index 0000000..c06e167 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png.meta new file mode 100644 index 0000000..dff6533 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8b6b31f71cd528243b053cfc488e73f5 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png new file mode 100644 index 0000000..3118ab1 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png.meta new file mode 100644 index 0000000..b623d58 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 2cdc0bc527f7a434496c6be9236e636f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBL.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBL.png new file mode 100644 index 0000000..3ee1a48 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBL.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBL.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBL.png.meta new file mode 100644 index 0000000..fd7ccf1 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBL.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: abf8a615f379ef44b9ac872a13b7712f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png new file mode 100644 index 0000000..ce4cf47 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png.meta new file mode 100644 index 0000000..c3dd648 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: eeac3acbf7d1cd54fabfb1c4a12f9fc8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png new file mode 100644 index 0000000..c5f85cc Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png.meta new file mode 100644 index 0000000..75090ea --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8f0cb66458819764b94b93250bae94b6 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png new file mode 100644 index 0000000..39e1546 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png.meta new file mode 100644 index 0000000..b0e188a --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 2a8208d8e80f90944b8ff2978292b03b +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png new file mode 100644 index 0000000..9ec5557 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png.meta new file mode 100644 index 0000000..6223c1c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 6f504a3fa8848264bb4fb9bb7d582dd5 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png new file mode 100644 index 0000000..dc638a7 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png.meta new file mode 100644 index 0000000..7f4d729 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: b9e0e5a8836018e4c810fbceba55a1b4 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignL.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignL.png new file mode 100644 index 0000000..93c1812 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignL.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignL.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignL.png.meta new file mode 100644 index 0000000..c7e801b --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignL.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d18ceface0c20014b8db4bba05a41b83 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png new file mode 100644 index 0000000..c1aca04 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png.meta new file mode 100644 index 0000000..884fe5f --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 727ba41e4cc95fe4a98b07301e3ebfc8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png new file mode 100644 index 0000000..b4397c6 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png.meta new file mode 100644 index 0000000..30bc025 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: b4785ec6d937dab4fa59da70b69afc9d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png new file mode 100644 index 0000000..de6a933 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png.meta new file mode 100644 index 0000000..0d20edc --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 0f79253104349f44cb73978f6c8e93de +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png new file mode 100644 index 0000000..627b907 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png.meta new file mode 100644 index 0000000..cf3e9ab --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 6efe1c8569d975640ba0c9f2ac4a9d61 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png new file mode 100644 index 0000000..6a0d89d Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png.meta new file mode 100644 index 0000000..bb1b90d --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e01c0b07c87513844ab88bb432bcf85a +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png new file mode 100644 index 0000000..ec87ccf Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png.meta new file mode 100644 index 0000000..52134bf --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d1d45eadab0e41c4a82cdffb6396b1d7 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio.png new file mode 100644 index 0000000..83ea3cf Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio.png.meta new file mode 100644 index 0000000..a121bea --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 7ca5908fd6c3dd34181c26e6d543ab70 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio_border.png new file mode 100644 index 0000000..01d0d81 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio_border.png.meta new file mode 100644 index 0000000..3584a8a --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_audio_border.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: e79d03aaa0883d44ebf5ba732febde10 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png new file mode 100644 index 0000000..f146516 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png.meta new file mode 100644 index 0000000..e362a81 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 37639be6148186645bca3fce45d5aa22 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png new file mode 100644 index 0000000..bab977d Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png.meta new file mode 100644 index 0000000..234280c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 358cddede8023574191e0aae610a4645 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png new file mode 100644 index 0000000..b7f481e Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png.meta new file mode 100644 index 0000000..2a9bf06 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 7c83a08052c9e2f49b47897a637994de +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog_border.png new file mode 100644 index 0000000..30bdb8b Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog_border.png.meta new file mode 100644 index 0000000..d9323e2 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 6862027f2176eae40a3143c562466a1b +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png new file mode 100644 index 0000000..8735b7c Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png.meta new file mode 100644 index 0000000..1e64e47 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 622fdb780ae13e840938631c5ed708f2 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png new file mode 100644 index 0000000..d61a35d Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png.meta new file mode 100644 index 0000000..2f10151 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d98b8847646169c4fb5af28dd84c4179 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png new file mode 100644 index 0000000..85bb248 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png.meta new file mode 100644 index 0000000..31ad788 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 6b1f9e1e1c2cf004b8e3bdd3033a8e75 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png new file mode 100644 index 0000000..3445065 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png.meta new file mode 100644 index 0000000..6bac83d --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 229d0d11465a822449f78a50dbf7104d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo.png new file mode 100644 index 0000000..f6bc898 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo.png.meta new file mode 100644 index 0000000..b70c539 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 1c576f42a074cc4499197f57c29b966e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo_color.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo_color.png new file mode 100644 index 0000000..9b8b49c Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo_color.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo_color.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo_color.png.meta new file mode 100644 index 0000000..15470a8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiantLogo_color.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 49aff6a3a3f09e74dbfa52a8291f97d6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeHAlignT.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeHAlignT.png new file mode 100644 index 0000000..90dc9de Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeHAlignT.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeHAlignT.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeHAlignT.png.meta new file mode 100644 index 0000000..d5af1eb --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeHAlignT.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 1ccb12a4b0bf8f447b2cc114851732f5 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png new file mode 100644 index 0000000..a762110 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png.meta new file mode 100644 index 0000000..50dfd23 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 32eaa0efb2b38774ea9705b40fdcc00a +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png new file mode 100644 index 0000000..ed34625 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png.meta new file mode 100644 index 0000000..9d3c5d9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 4dd24a9f658e7a3438d4fa08fb85aba3 +timeCreated: 1648211899 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png new file mode 100644 index 0000000..b71eefe Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png.meta new file mode 100644 index 0000000..3580f68 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: a248c8288afb9184f953d9aa07a696b0 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png new file mode 100644 index 0000000..f4525da Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png.meta new file mode 100644 index 0000000..0708f25 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: c44ae4a96937e2c4b8be481648364682 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png new file mode 100644 index 0000000..df26539 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png.meta new file mode 100644 index 0000000..95147de --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 301c130dbb4bbba4e87072804939c861 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png new file mode 100644 index 0000000..50a913a Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png.meta new file mode 100644 index 0000000..fd5f474 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 18a5a7cde794cc04b9b446f0feedb3a0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png new file mode 100644 index 0000000..7ea0c06 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png.meta new file mode 100644 index 0000000..072d281 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d173388c1d9c32a418b5b777dd89d71a +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png new file mode 100644 index 0000000..a533084 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png.meta new file mode 100644 index 0000000..f7b7f22 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 669c487f3c9c5fe4abb6459f9c2628f0 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light.png new file mode 100644 index 0000000..5a60bd0 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light.png.meta new file mode 100644 index 0000000..849e0ad --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4f69b96f9308d8f4ea239773ef5b55c4 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light_border.png new file mode 100644 index 0000000..a29a859 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light_border.png.meta new file mode 100644 index 0000000..bd76a57 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 252f207d01ecc87419cdba1d1c0ab1ea +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png new file mode 100644 index 0000000..7b718a2 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png.meta new file mode 100644 index 0000000..b7bc6d4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e3d0592dad579e141924133869455c53 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png new file mode 100644 index 0000000..be85443 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png.meta new file mode 100644 index 0000000..a870de6 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8d60feae84bdb2d4eb16a0037056c588 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png new file mode 100644 index 0000000..e236c92 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png.meta new file mode 100644 index 0000000..aabc040 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4aa34055b1d36ef479af3d7b5701b28a +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png new file mode 100644 index 0000000..b4d864a Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png.meta new file mode 100644 index 0000000..029aabf --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 34f39b5a760ddbb4d8b8749852868335 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png new file mode 100644 index 0000000..1d89e2a Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png.meta new file mode 100644 index 0000000..560af25 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 62a48d93e78c63b4ea9b46537c7c0091 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png new file mode 100644 index 0000000..0608dcb Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png.meta new file mode 100644 index 0000000..483c5b7 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 2a563a43c33f0f3428d02b3a43886fc2 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png new file mode 100644 index 0000000..db4ac28 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png.meta new file mode 100644 index 0000000..e57aa67 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 45e128e1cf00555479ee7934ab11cadf +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png new file mode 100644 index 0000000..7e53975 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png.meta new file mode 100644 index 0000000..8d4e226 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 01976ad42d31f494e8040d3e32e283dc +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull_border.png new file mode 100644 index 0000000..6cc1c5f Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull_border.png.meta new file mode 100644 index 0000000..ae28986 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 6dfd924c0ba23844fb5d04ad1560de22 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png new file mode 100644 index 0000000..d280684 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png.meta new file mode 100644 index 0000000..59f2768 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 645aafe2260b2884a9df05b4bc01b1ec +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png new file mode 100644 index 0000000..4615829 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png.meta new file mode 100644 index 0000000..955bf42 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 18f3a26aa87fccc4cb5e211d4c6de662 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png new file mode 100644 index 0000000..8214de5 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png.meta new file mode 100644 index 0000000..6f04add --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: c561c878c05ceb1448966fe706740008 +timeCreated: 1648211899 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png new file mode 100644 index 0000000..afdcff3 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png.meta new file mode 100644 index 0000000..0d3bf2e --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: cb46e1d925af22d43a6f8bf0e1d459e6 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png new file mode 100644 index 0000000..6613a3d Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png.meta new file mode 100644 index 0000000..2ee6aab --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: c0c40ceac3c6df146a0fcd4e6b226540 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png new file mode 100644 index 0000000..56a1324 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png.meta new file mode 100644 index 0000000..8dced06 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 55c2b426022dac44f9b25f0cba28aa45 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png new file mode 100644 index 0000000..e1a2c91 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png.meta new file mode 100644 index 0000000..a0db454 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 0c0132429106c8a4d89d9d0a6b723ec3 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png new file mode 100644 index 0000000..c272180 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png.meta new file mode 100644 index 0000000..012525b --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 3e730492361eb6e45be5c5fdafac23be +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project.meta new file mode 100644 index 0000000..8ddc4ff --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 52bdbb53205da074d9937b996806e2e2 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png new file mode 100644 index 0000000..80dc387 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png.meta new file mode 100644 index 0000000..eddd2e8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e2279677842a8064fbae0bc889fb85ab +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png new file mode 100644 index 0000000..90c5212 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png.meta new file mode 100644 index 0000000..30cc40c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e1af8927fb6f5634896d59aed409a589 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png new file mode 100644 index 0000000..c418038 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png.meta new file mode 100644 index 0000000..66ef715 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 58676a985ae875646b7be748cf4499fd +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png new file mode 100644 index 0000000..fd589a0 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png.meta new file mode 100644 index 0000000..fa51749 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: fb605a2688b31194887f2e7a6769235b +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png new file mode 100644 index 0000000..a34a3e8 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png.meta new file mode 100644 index 0000000..529d85c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 3b67e53c8c2f8114b966c0e70d452419 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_demigiant.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_demigiant.png new file mode 100644 index 0000000..99d0cf9 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_demigiant.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_demigiant.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_demigiant.png.meta new file mode 100644 index 0000000..8276473 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_demigiant.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: f36ab42cc6fcdfd4187033279d3d14a9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png new file mode 100644 index 0000000..9bba7d0 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png.meta new file mode 100644 index 0000000..e0a5072 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4f2c4b43188596b47866d41e1dc13c8a +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png new file mode 100644 index 0000000..9ce1a4d Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png.meta new file mode 100644 index 0000000..996c26e --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: cf986943c88c2254780c17b2b5e3bc2f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png new file mode 100644 index 0000000..f7ebe72 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png.meta new file mode 100644 index 0000000..ead0de6 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 20794834c0a413f408b80110d0fc73b8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png new file mode 100644 index 0000000..5a4b7eb Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png.meta new file mode 100644 index 0000000..8e57f77 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e02713e10d7aced44a7a651231f0adef +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png new file mode 100644 index 0000000..42f1f23 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png.meta new file mode 100644 index 0000000..0195fcf --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 09a0cde07b4d75f49b4c817932791b81 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png new file mode 100644 index 0000000..3ffa475 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png.meta new file mode 100644 index 0000000..560f0dd --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8003873ab749935489bb11f23f830856 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png new file mode 100644 index 0000000..c441add Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png.meta new file mode 100644 index 0000000..2bef6e5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d8306b1e159c72c4ebc9a4fc31debe60 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png new file mode 100644 index 0000000..abc4353 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png.meta new file mode 100644 index 0000000..47f7775 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ed3789262161efa4fa33c85ca534590e +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png new file mode 100644 index 0000000..c79b668 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png.meta new file mode 100644 index 0000000..2b2bbf9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 96cbdf605b8ddb34da384703f2d0b849 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png new file mode 100644 index 0000000..ed3b4bb Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png.meta new file mode 100644 index 0000000..1d860ee --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: f252c69cd0163714eba038403f61b09e +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png new file mode 100644 index 0000000..22930f4 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png.meta new file mode 100644 index 0000000..68df579 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d563d6ce25cd2ca48b185ec47a74a3fb +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png new file mode 100644 index 0000000..90483b3 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png.meta new file mode 100644 index 0000000..f872413 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 21820ec6fc9dd0b4fbf42a3b93fdad4e +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png new file mode 100644 index 0000000..750996d Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png.meta new file mode 100644 index 0000000..946cabd --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4a091a7609ef2d34bbdfaa1a886deb18 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png new file mode 100644 index 0000000..6aae964 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png.meta new file mode 100644 index 0000000..c18d4ea --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 3e6b96a975eba1c43b2bad66fb7f8b4a +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png new file mode 100644 index 0000000..dd219ac Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png.meta new file mode 100644 index 0000000..96df50f --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: dc0ca9b32ae9fd049911671cf1a480bf +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png new file mode 100644 index 0000000..798457f Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png.meta new file mode 100644 index 0000000..299f17b --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: fbdd7ecf39c13bf48a5bd02a1159c90b +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png new file mode 100644 index 0000000..51afe67 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png.meta new file mode 100644 index 0000000..50cd914 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: afd7d0ddb1d6c744b9cb87ae49b2ce62 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderAlpha15.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderAlpha15.png new file mode 100644 index 0000000..7000d8f Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderAlpha15.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderAlpha15.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderAlpha15.png.meta new file mode 100644 index 0000000..0488aae --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderAlpha15.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: dfd33662d9f6f3849bd92f6e159ca226 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png new file mode 100644 index 0000000..768cc82 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png.meta new file mode 100644 index 0000000..9918b99 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 4896b5aa9d63dec498136c21ffce735b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png new file mode 100644 index 0000000..a1ed49d Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png.meta new file mode 100644 index 0000000..180331a --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ff88be84254fb1f4b9a81a27ae0b2e81 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png new file mode 100644 index 0000000..2b313e4 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png.meta new file mode 100644 index 0000000..dd83662 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e3ae01f12865ad54ba365963bda55759 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedAlpha.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedAlpha.png new file mode 100644 index 0000000..e56d3b7 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedAlpha.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedAlpha.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedAlpha.png.meta new file mode 100644 index 0000000..44abb4e --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedAlpha.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: a1606d34a052ed3449da93edd229743e +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty.png new file mode 100644 index 0000000..bbd3158 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty.png.meta new file mode 100644 index 0000000..922532f --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 4578222ee7a511446b0c340551bf8740 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty02.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty02.png new file mode 100644 index 0000000..57714a5 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty02.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty02.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty02.png.meta new file mode 100644 index 0000000..72910c0 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty02.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 7d504312fad10f040b95bd8836dc6fc6 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmptyThick.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmptyThick.png new file mode 100644 index 0000000..47b177f Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmptyThick.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmptyThick.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmptyThick.png.meta new file mode 100644 index 0000000..aa4b0a9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmptyThick.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: fc3b86627d5fe1c4d865b80627e2e37c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png new file mode 100644 index 0000000..b9450f2 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png.meta new file mode 100644 index 0000000..db7c113 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 25da15ac84743244ab4c860cf8798ec8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png new file mode 100644 index 0000000..4ddd37a Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png.meta new file mode 100644 index 0000000..a248e7c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: f536c51d3da3f2e4ca93ac8773ec2ad8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png new file mode 100644 index 0000000..188ed94 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png.meta new file mode 100644 index 0000000..365f54f --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8db54efcce998554c86b796b37a7cdfa +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty01.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty01.png new file mode 100644 index 0000000..188ed94 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty01.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty01.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty01.png.meta new file mode 100644 index 0000000..89544f5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty01.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: aa8dc9238ab21e54ca88fa22698e4679 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png new file mode 100644 index 0000000..ec9ead7 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png.meta new file mode 100644 index 0000000..c3564de --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 29b0e8156f6fb774faf129c83bc9ee33 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png new file mode 100644 index 0000000..ca376a8 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png.meta new file mode 100644 index 0000000..e41c3ad --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: c0a56b88a1b449045b3fe5f561aa12fa +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png new file mode 100644 index 0000000..ec9ead7 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png.meta new file mode 100644 index 0000000..89331d1 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: c456d5ac01d2aa843a63985497b04931 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png new file mode 100644 index 0000000..ca376a8 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png.meta new file mode 100644 index 0000000..7365c26 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 7acc6bd588627b046bc1c9b3cd78a6c7 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png new file mode 100644 index 0000000..38dc1bb Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png.meta new file mode 100644 index 0000000..17c7922 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: dec3ea647707588408ec0d11ab130b73 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png new file mode 100644 index 0000000..facdba9 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png.meta new file mode 100644 index 0000000..7f51fb8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ca2f91cc405eb144dad970eb23db2f72 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png new file mode 100644 index 0000000..8e17561 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png.meta new file mode 100644 index 0000000..890be39 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d1278357b25e10442b6ca6c24edc9781 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png new file mode 100644 index 0000000..c8cfc7f Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png.meta new file mode 100644 index 0000000..7edd20d --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: c99a391f381fe534c80a193fe9f307a0 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png new file mode 100644 index 0000000..7763091 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png.meta new file mode 100644 index 0000000..b26261d --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 018a5623a46db1d49b1e6ff2482b07ab +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png new file mode 100644 index 0000000..10755e3 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png.meta new file mode 100644 index 0000000..acb7d17 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 1954196ce2bc5c3478b215b39212c3cd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png new file mode 100644 index 0000000..c745068 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png.meta new file mode 100644 index 0000000..64add0e --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 4d338c631fa36f345b72a36f1c91ff9a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png new file mode 100644 index 0000000..768a2da Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png.meta new file mode 100644 index 0000000..afcc984 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ed7cb8f9a27664e48896c904189f0e2c +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png new file mode 100644 index 0000000..705c72b Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png.meta new file mode 100644 index 0000000..2758634 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 27df4ca974a8eaf40803907859421506 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png new file mode 100644 index 0000000..2a081f6 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png.meta new file mode 100644 index 0000000..8bfeba8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 039dc89c76661c344b7776f8a47cc5a4 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png new file mode 100644 index 0000000..afc2459 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png.meta new file mode 100644 index 0000000..e1c9ed9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: dfe6e0ac3e5f24740a17e14b65e08406 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png new file mode 100644 index 0000000..6480ee2 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png.meta new file mode 100644 index 0000000..77ed470 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 93b68213089b05943a651574eb7e2fb5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png new file mode 100644 index 0000000..e6f3c42 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png.meta new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 5510cdd48a6aaaa439c95ef5b2fe9e28 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png new file mode 100644 index 0000000..5219f2a Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png.meta new file mode 100644 index 0000000..aa003d9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png.meta @@ -0,0 +1,96 @@ +fileFormatVersion: 2 +guid: 511f6b24c50557a40a09633b12b8b8ef +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 32 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha50.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha50.png new file mode 100644 index 0000000..ad90433 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha50.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha50.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha50.png.meta new file mode 100644 index 0000000..103bbf1 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha50.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ef40b00a83f7bd34f84851386b3321f0 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha80.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha80.png new file mode 100644 index 0000000..def9ea9 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha80.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha80.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha80.png.meta new file mode 100644 index 0000000..4dd7287 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha80.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 11848dd30e516d846a02cd302634d317 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png new file mode 100644 index 0000000..fb54c9f Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png.meta new file mode 100644 index 0000000..8a6304e --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 070edb62059c27b408e16f28cb87f941 +timeCreated: 1604057757 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png new file mode 100644 index 0000000..c7ed49b Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png.meta new file mode 100644 index 0000000..45fdb5f --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 282d742ce2ddf9f458812ab84ea6fa88 +timeCreated: 1604057757 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png new file mode 100644 index 0000000..0f754e5 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png.meta new file mode 100644 index 0000000..27a1460 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: a40dc0d6372a9084fb45976308087290 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png new file mode 100644 index 0000000..c41f635 Binary files /dev/null and b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png differ diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png.meta new file mode 100644 index 0000000..54af05b --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 517a5bfe18f2ee04d9925db10be034e2 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/readme_DOTweenPro.txt b/Assets/Plugins/Demigiant/readme_DOTweenPro.txt new file mode 100644 index 0000000..9837c95 --- /dev/null +++ b/Assets/Plugins/Demigiant/readme_DOTweenPro.txt @@ -0,0 +1,35 @@ +DOTween and DOTween Pro are copyright (c) 2014-2018 Daniele Giardini - Demigiant + +// IMPORTANT!!! ///////////////////////////////////////////// +// Upgrading DOTween from versions older than 1.2.000 /////// +// (or DOTween Pro older than 1.0.000) ////////////////////// +------------------------------------------------------------- +If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. +1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry +2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath +3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup +4) From the Add/Remove Modules panel that opens, activate/deactivate Modules for Unity systems and for external assets (like TextMesh Pro) + +// GET STARTED ////////////////////////////////////////////// + +- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. + +// VISUAL SCRIPTING (PRO ONLY) +- To animate a gameObject, select it and choose "Add Component > DOTween > DOTween Animation" +- To animate a gameObject along a path, select it and choose "Add Component > DOTween > DOTween Path" + +// SCRIPTING +- In your code, add "using DG.Tweening" to each class where you want to use DOTween. +- You're ready to tween. Check out the links below for full documentation and license info. + + +// LINKS /////////////////////////////////////////////////////// + +DOTween website (documentation, examples, etc): http://dotween.demigiant.com +DOTween license: http://dotween.demigiant.com/license.php +DOTween repository (Google Code): https://code.google.com/p/dotween/ +Demigiant website (documentation, examples, etc): http://www.demigiant.com + +// NOTES ////////////////////////////////////////////////////// + +- DOTween's Utility Panel can be found under "Tools > Demigiant > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file diff --git a/Assets/Plugins/Demigiant/readme_DOTweenPro.txt.meta b/Assets/Plugins/Demigiant/readme_DOTweenPro.txt.meta new file mode 100644 index 0000000..ef7a8e9 --- /dev/null +++ b/Assets/Plugins/Demigiant/readme_DOTweenPro.txt.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: 24123b2fcdc15c943bed44e0c6beeec7 +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- VisualScripting +- VisualEditor +- iTween +- LeanTween +- DFTween +- Ease +- Easing +- Shake +- Punch +TextScriptImporter: + userData: diff --git a/Assets/Prefabs.meta b/Assets/Prefabs.meta new file mode 100644 index 0000000..439b5e1 --- /dev/null +++ b/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6ba9b65f12e56042899195d7651168c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Combat.meta b/Assets/Prefabs/Combat.meta new file mode 100644 index 0000000..449c693 --- /dev/null +++ b/Assets/Prefabs/Combat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fefb0bd56ac54b948a2cdfe52d8034b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Effects.meta b/Assets/Prefabs/Effects.meta new file mode 100644 index 0000000..d698340 --- /dev/null +++ b/Assets/Prefabs/Effects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ba46060b8c13464db8acb2b6a873c36 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Enemies.meta b/Assets/Prefabs/Enemies.meta new file mode 100644 index 0000000..8635994 --- /dev/null +++ b/Assets/Prefabs/Enemies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cb46fccfe8336d641b325f7fc45d1b78 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Persistent.meta b/Assets/Prefabs/Persistent.meta new file mode 100644 index 0000000..9ec7b1c --- /dev/null +++ b/Assets/Prefabs/Persistent.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e1bbdf75bc8418428b0b901a4ca6d38 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Player.meta b/Assets/Prefabs/Player.meta new file mode 100644 index 0000000..cdac6cf --- /dev/null +++ b/Assets/Prefabs/Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9db8a7a07469c744ab52e6d13d0c8fd4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI.meta b/Assets/Prefabs/UI.meta new file mode 100644 index 0000000..4451112 --- /dev/null +++ b/Assets/Prefabs/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 406e762d9282f1c4aa71c5d616a6ea4d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/World.meta b/Assets/Prefabs/World.meta new file mode 100644 index 0000000..b859df9 --- /dev/null +++ b/Assets/Prefabs/World.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1669e48764b4d3f4b8c053697f922e3a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..c5ae4c4 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59f4a993841f2f7408cc18db0c087f7a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/DOTweenSettings.asset b/Assets/Resources/DOTweenSettings.asset new file mode 100644 index 0000000..f6d1591 --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset @@ -0,0 +1,55 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 16995157, guid: a811bde74b26b53498b4f6d872b09b6d, type: 3} + m_Name: DOTweenSettings + m_EditorClassIdentifier: + useSafeMode: 1 + safeModeOptions: + logBehaviour: 2 + nestedTweenFailureBehaviour: 0 + timeScale: 1 + unscaledTimeScale: 1 + useSmoothDeltaTime: 0 + maxSmoothUnscaledTime: 0.15 + rewindCallbackMode: 0 + showUnityEditorReport: 0 + logBehaviour: 0 + drawGizmos: 1 + defaultRecyclable: 0 + defaultAutoPlay: 3 + defaultUpdateType: 0 + defaultTimeScaleIndependent: 0 + defaultEaseType: 6 + defaultEaseOvershootOrAmplitude: 1.70158 + defaultEasePeriod: 0 + defaultAutoKill: 1 + defaultLoopType: 0 + debugMode: 0 + debugStoreTargetId: 1 + showPreviewPanel: 1 + storeSettingsLocation: 0 + modules: + showPanel: 0 + audioEnabled: 1 + physicsEnabled: 1 + physics2DEnabled: 1 + spriteEnabled: 1 + uiEnabled: 1 + uiToolkitEnabled: 1 + textMeshProEnabled: 1 + tk2DEnabled: 0 + deAudioEnabled: 0 + deUnityExtendedEnabled: 0 + epoOutlineEnabled: 0 + createASMDEF: 0 + showPlayingTweens: 0 + showPausedTweens: 0 diff --git a/Assets/Resources/DOTweenSettings.asset.meta b/Assets/Resources/DOTweenSettings.asset.meta new file mode 100644 index 0000000..11c7501 --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9befe851e71f0e47942aa8eaa698c5c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes.meta b/Assets/Scenes.meta new file mode 100644 index 0000000..ee46714 --- /dev/null +++ b/Assets/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 109e9bdd0fcc649c5bc59085c35bdc83 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Persistent.unity b/Assets/Scenes/Persistent.unity new file mode 100644 index 0000000..3ae5be1 --- /dev/null +++ b/Assets/Scenes/Persistent.unity @@ -0,0 +1,221 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &835949346 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 835949349} + - component: {fileID: 835949348} + - component: {fileID: 835949347} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &835949347 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835949346} + m_Enabled: 1 +--- !u!20 &835949348 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835949346} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &835949349 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835949346} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 835949349} diff --git a/Assets/Scenes/Persistent.unity.meta b/Assets/Scenes/Persistent.unity.meta new file mode 100644 index 0000000..1ed9831 --- /dev/null +++ b/Assets/Scenes/Persistent.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 970b399c05a553947883805f7dad7770 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity new file mode 100644 index 0000000..b5b633b --- /dev/null +++ b/Assets/Scenes/SampleScene.unity @@ -0,0 +1,349 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &519420028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519420032} + - component: {fileID: 519420031} + - component: {fileID: 519420029} + - component: {fileID: 519420030} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &519420029 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 +--- !u!114 &519420030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 +--- !u!20 &519420031 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 34 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &519420032 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &619394800 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 619394802} + - component: {fileID: 619394801} + m_Layer: 0 + m_Name: Global Light 2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &619394801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 619394800} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ComponentVersion: 1 + m_LightType: 4 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_LightVolumeIntensity: 1 + m_LightVolumeIntensityEnabled: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowIntensityEnabled: 0 + m_ShadowIntensity: 0.75 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &619394802 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 619394800} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 519420032} + - {fileID: 619394802} diff --git a/Assets/Scenes/SampleScene.unity.meta b/Assets/Scenes/SampleScene.unity.meta new file mode 100644 index 0000000..963ff8e --- /dev/null +++ b/Assets/Scenes/SampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8c9cfa26abfee488c85f1582747f6a02 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts.meta b/Assets/Scripts.meta new file mode 100644 index 0000000..4ae76ba --- /dev/null +++ b/Assets/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: adbfc762b2774f041850f29fef66d4df +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animation.meta b/Assets/Scripts/Animation.meta new file mode 100644 index 0000000..f8e74bc --- /dev/null +++ b/Assets/Scripts/Animation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee09651b4ef333d4d826baf6fc2d3963 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animation/.gitkeep b/Assets/Scripts/Animation/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Animation/BaseGames.Animation.asmdef b/Assets/Scripts/Animation/BaseGames.Animation.asmdef new file mode 100644 index 0000000..a03c84e --- /dev/null +++ b/Assets/Scripts/Animation/BaseGames.Animation.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Animation", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Animation", + "references": [ + "BaseGames.Core.Events", + "Kybernetik.Animancer" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Animation/BaseGames.Animation.asmdef.meta b/Assets/Scripts/Animation/BaseGames.Animation.asmdef.meta new file mode 100644 index 0000000..e61f72e --- /dev/null +++ b/Assets/Scripts/Animation/BaseGames.Animation.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cc40540b9a6e12a4c81b5b0ee9132a3f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Animation/_Placeholder.cs b/Assets/Scripts/Animation/_Placeholder.cs new file mode 100644 index 0000000..3df68a3 --- /dev/null +++ b/Assets/Scripts/Animation/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Animation { } + diff --git a/Assets/Scripts/Animation/_Placeholder.cs.meta b/Assets/Scripts/Animation/_Placeholder.cs.meta new file mode 100644 index 0000000..4852d81 --- /dev/null +++ b/Assets/Scripts/Animation/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14d8a3e3d7371e54eb25a5d4dded4645 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio.meta b/Assets/Scripts/Audio.meta new file mode 100644 index 0000000..e79d3ea --- /dev/null +++ b/Assets/Scripts/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01d2e18a4097b5f408e821b493e20415 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio/.gitkeep b/Assets/Scripts/Audio/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Audio/AudioConfigSO.cs b/Assets/Scripts/Audio/AudioConfigSO.cs new file mode 100644 index 0000000..b8bb510 --- /dev/null +++ b/Assets/Scripts/Audio/AudioConfigSO.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using UnityEngine.Audio; + +namespace BaseGames.Audio +{ + /// + /// 音频全局配置 SO:区域 BGM 映射、Boss BGM 映射、特殊曲目。 + /// 资产路径:Assets/ScriptableObjects/Audio/AUD_Config.asset + /// + [CreateAssetMenu(menuName = "Audio/AudioConfig")] + public class AudioConfigSO : ScriptableObject + { + [System.Serializable] + public struct ZoneBGMEntry + { + public string ZoneId; + public AudioClip BGMClip; + public float FadeDuration; + } + + [System.Serializable] + public struct BossBGMEntry + { + public string BossId; + public AudioClip BGMClip; + } + + [Header("区域 BGM 映射")] + public ZoneBGMEntry[] ZoneBGMs; + + [Header("Boss BGM 映射")] + public BossBGMEntry[] BossBGMs; + + [Header("特殊曲目")] + public AudioClip MainMenuBGM; + public AudioClip GameOverSting; + public AudioClip VictoryStingBGM; + [Min(0.1f)] + public float VictoryStingDuration = 4f; + + public AudioClip GetZoneBGM(string zoneId) + { + if (ZoneBGMs == null) return null; + foreach (var e in ZoneBGMs) + if (e.ZoneId == zoneId) return e.BGMClip; + return null; + } + + public AudioClip GetBossBGM(string bossId) + { + if (BossBGMs == null) return null; + foreach (var e in BossBGMs) + if (e.BossId == bossId) return e.BGMClip; + return null; + } + } +} diff --git a/Assets/Scripts/Audio/AudioConfigSO.cs.meta b/Assets/Scripts/Audio/AudioConfigSO.cs.meta new file mode 100644 index 0000000..eed0e71 --- /dev/null +++ b/Assets/Scripts/Audio/AudioConfigSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af379c0184a345441914e3167376d39c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio/AudioManager.cs b/Assets/Scripts/Audio/AudioManager.cs new file mode 100644 index 0000000..9310b42 --- /dev/null +++ b/Assets/Scripts/Audio/AudioManager.cs @@ -0,0 +1,200 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.Audio; +using BaseGames.Core; +using BaseGames.Core.Events; + +namespace BaseGames.Audio +{ + /// + /// 音频管理器。 + /// 职责:BGM 双 Source 交叉淡入淡出、SFX 多源轮转池、AudioMixer 快照切换、音量控制。 + /// 挂在 Persistent 场景 [AudioManager] GameObject 上。 + /// + [DefaultExecutionOrder(-500)] + public class AudioManager : MonoBehaviour, IAudioService + { + [Header("AudioMixer")] + [SerializeField] private AudioMixer _mixer; + + [Header("BGM Sources(双 Source 交叉淡入淡出)")] + [SerializeField] private AudioSource _bgmSourceA; + [SerializeField] private AudioSource _bgmSourceB; + + [Header("SFX Pool(建议 6 个,均路由到 SFX MixerGroup)")] + [SerializeField] private AudioSource[] _sfxSources; + + [Header("Event Channels - Subscribe")] + [SerializeField] private VoidEventChannelSO _onPlayerDied; + + private AudioSource _activeBGMSource; + private AudioSource _inactiveBGMSource; + private Coroutine _crossfadeCoroutine; + private int _sfxRoundRobin; + + // ── 遗留单例(已废弃;新代码请使用 ServiceLocator.Get())──────────── + [System.Obsolete("Use ServiceLocator.Get() instead.")] + public static AudioManager Instance { get; private set; } + + private void Awake() + { +#pragma warning disable CS0618 + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; +#pragma warning restore CS0618 + + _activeBGMSource = _bgmSourceA; + _inactiveBGMSource = _bgmSourceB; + + // ServiceLocator 注册(覆盖 GameServiceRegistrar 的 NullAudioService 兜底) + ServiceLocator.Register(this); + } + + private void OnEnable() + { + if (_onPlayerDied != null) + _onPlayerDied.OnEventRaised += HandlePlayerDied; + } + + private void OnDisable() + { + if (_onPlayerDied != null) + _onPlayerDied.OnEventRaised -= HandlePlayerDied; + } + + // ── IAudioService string-key API(Phase 2 接入 AudioEventSO 后完整实现)───────────── + /// + /// 按 Addressable key 播放 BGM。Phase 2 接入 AudioEventSO 前为占位警告。 + /// + public void PlayBGM(string key) + => Debug.LogWarning($"[AudioManager] PlayBGM(key) 尚未接入 AudioEventSO(Phase 2)。key={key}"); + + /// + /// 按 Addressable key 播放 SFX。Phase 2 接入 AudioEventSO 前为占位警告。 + /// + public void PlaySFX(string key) + => Debug.LogWarning($"[AudioManager] PlaySFX(key) 尚未接入 AudioEventSO(Phase 2)。key={key}"); + + // ── 音量控制 ───────────────────────────────────────────────────────────── + /// + /// 将指定 Exposed Parameter 设置为 0-1 线性值(内部转换为 dB)。 + /// 唯一音量写入入口(同时满足 IAudioService.SetVolume 接口)。 + /// + public void SetVolume(string exposedParam, float linear) + => _mixer.SetFloat(exposedParam, LinearToDecibel(linear)); + + /// 读取 GlobalSettings 并应用所有音量初始值。 + public void Initialize() + { + // TODO: 从 SettingsManager / PlayerPrefs 读取保存的音量值并应用 + } + + // ── BGM ────────────────────────────────────────────────────────────────── + /// 播放 BGM,使用双 AudioSource 交叉淡入淡出。 + public void PlayBGM(AudioClip clip, float fadeOutDur = 1f, float fadeInDur = 1f) + { + if (clip == null) return; + if (_crossfadeCoroutine != null) StopCoroutine(_crossfadeCoroutine); + _crossfadeCoroutine = StartCoroutine(CrossfadeCoroutine(clip, fadeOutDur, fadeInDur)); + } + + /// 停止 BGM(带淡出)。 + public void StopBGM(float fadeDuration = 1f) + { + if (_crossfadeCoroutine != null) StopCoroutine(_crossfadeCoroutine); + _crossfadeCoroutine = StartCoroutine(FadeOutCoroutine(_activeBGMSource, fadeDuration)); + } + + // ── SFX ────────────────────────────────────────────────────────────────── + /// + /// 一次性播放 SFX,使用轮转多源池避免高密度战斗时音效相互戳断。 + /// + public void PlaySFX(AudioClip clip, float volumeScale = 1f) + { + if (clip == null) return; + var src = NextSFXSource(); + src.volume = volumeScale; + src.PlayOneShot(clip); + } + + /// 2D 游戏中位置无衰减,统一委托多源池播放。 + public void PlaySFXAtPosition(AudioClip clip, Vector2 pos, float volumeScale = 1f) + => PlaySFX(clip, volumeScale); + + // ── 快照切换 ───────────────────────────────────────────────────────────── + /// 切换 AudioMixer 快照(如 Default / Paused / Dead / BossFight)。 + public void TransitionToSnapshot(string snapshotName, float transitionTime = 0.5f) + { + var snapshot = _mixer.FindSnapshot(snapshotName); + if (snapshot != null) + snapshot.TransitionTo(transitionTime); + else + Debug.LogWarning($"[AudioManager] Snapshot '{snapshotName}' not found in mixer."); + } + + // ── 内部实现 ───────────────────────────────────────────────────────────── + private void HandlePlayerDied() + { + TransitionToSnapshot("Dead", 1.5f); + } + + private AudioSource NextSFXSource() + { + if (_sfxSources == null || _sfxSources.Length == 0) return _bgmSourceA; + return _sfxSources[_sfxRoundRobin++ % _sfxSources.Length]; + } + + private IEnumerator CrossfadeCoroutine(AudioClip newClip, float fadeOutDur, float fadeInDur) + { + // 淡出当前活跃 Source + float startVolume = _activeBGMSource.volume; + float elapsed = 0f; + while (elapsed < fadeOutDur) + { + elapsed += Time.unscaledDeltaTime; + _activeBGMSource.volume = Mathf.Lerp(startVolume, 0f, elapsed / fadeOutDur); + yield return null; + } + _activeBGMSource.Stop(); + _activeBGMSource.volume = 0f; + + // 切换到非活跃 Source 播放新曲目 + var temp = _activeBGMSource; + _activeBGMSource = _inactiveBGMSource; + _inactiveBGMSource = temp; + + _activeBGMSource.clip = newClip; + _activeBGMSource.volume = 0f; + _activeBGMSource.Play(); + + // 淡入新 Source + elapsed = 0f; + while (elapsed < fadeInDur) + { + elapsed += Time.unscaledDeltaTime; + _activeBGMSource.volume = Mathf.Lerp(0f, 1f, elapsed / fadeInDur); + yield return null; + } + _activeBGMSource.volume = 1f; + _crossfadeCoroutine = null; + } + + private IEnumerator FadeOutCoroutine(AudioSource source, float duration) + { + float startVolume = source.volume; + float elapsed = 0f; + while (elapsed < duration) + { + elapsed += Time.unscaledDeltaTime; + source.volume = Mathf.Lerp(startVolume, 0f, elapsed / duration); + yield return null; + } + source.Stop(); + source.volume = 0f; + _crossfadeCoroutine = null; + } + + private static float LinearToDecibel(float linear) + => linear > 0.0001f ? 20f * Mathf.Log10(linear) : -80f; + } +} diff --git a/Assets/Scripts/Audio/AudioManager.cs.meta b/Assets/Scripts/Audio/AudioManager.cs.meta new file mode 100644 index 0000000..123ba96 --- /dev/null +++ b/Assets/Scripts/Audio/AudioManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1230831ab62bdd84fbeb7df03e20c254 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio/AudioMixerKeys.cs b/Assets/Scripts/Audio/AudioMixerKeys.cs new file mode 100644 index 0000000..2638b4b --- /dev/null +++ b/Assets/Scripts/Audio/AudioMixerKeys.cs @@ -0,0 +1,15 @@ +namespace BaseGames.Audio +{ + /// + /// AudioMixer Exposed Parameter 字符串常量。 + /// 与 Assets/Audio/MainMixer.mixer 中的 Exposed Parameters 保持同步。 + /// 参数范围:-80 ~ 0 dB(代码通过 LinearToDecibel 转换后写入)。 + /// + public static class AudioMixerKeys + { + public const string Master = "MasterVolume"; + public const string BGM = "BGMVolume"; + public const string SFX = "SFXVolume"; + public const string Ambient = "AmbientVolume"; + } +} diff --git a/Assets/Scripts/Audio/AudioMixerKeys.cs.meta b/Assets/Scripts/Audio/AudioMixerKeys.cs.meta new file mode 100644 index 0000000..e1de5de --- /dev/null +++ b/Assets/Scripts/Audio/AudioMixerKeys.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8df8e995946cb24bb61b96c362bf58b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio/AudioZone.cs b/Assets/Scripts/Audio/AudioZone.cs new file mode 100644 index 0000000..53a095f --- /dev/null +++ b/Assets/Scripts/Audio/AudioZone.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Audio +{ + /// + /// 区域音效触发器:玩家进入 Collider2D 时广播 _onRegionEntered 事件频道。 + /// 挂在区域边界的 GameObject 上,Collider2D 设置为 Is Trigger。 + /// _zoneId 须与 AudioConfigSO.ZoneBGMs 中的 ZoneId 一致。 + /// + [RequireComponent(typeof(Collider2D))] + public class AudioZone : MonoBehaviour + { + [SerializeField] private string _zoneId; + [SerializeField] private StringEventChannelSO _onRegionEntered; + + private void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + if (_onRegionEntered != null) + _onRegionEntered.Raise(_zoneId); + } + } +} diff --git a/Assets/Scripts/Audio/AudioZone.cs.meta b/Assets/Scripts/Audio/AudioZone.cs.meta new file mode 100644 index 0000000..7a6c704 --- /dev/null +++ b/Assets/Scripts/Audio/AudioZone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11367ad39af3b9649af572aaa55891ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio/BGMController.cs b/Assets/Scripts/Audio/BGMController.cs new file mode 100644 index 0000000..21aa0ad --- /dev/null +++ b/Assets/Scripts/Audio/BGMController.cs @@ -0,0 +1,100 @@ +using System.Collections; +using UnityEngine; +using BaseGames.Core; +using BaseGames.Core.Events; + +namespace BaseGames.Audio +{ + /// BGM 状态机内部状态。 + public enum MusicState + { + Exploration, // 默认:区域探索 BGM + Boss, // Boss 战:Boss 主题 BGM + Victory, // Boss 击败后短暂胜利音乐 + None, // 过场/死亡/主菜单时由 BGMController 直接切换 + } + + /// + /// BGM 控制器:订阅世界/Boss/游戏状态事件,指挥 AudioManager 切换 BGM 和快照。 + /// 挂在 Persistent 场景 [AudioManager] 子对象上。 + /// + public class BGMController : MonoBehaviour + { + [SerializeField] private AudioManager _audioManager; + [SerializeField] private AudioConfigSO _config; + + [Header("Event Channels - Subscribe")] + [SerializeField] private GameStateEventChannelSO _onGameStateChanged; + [SerializeField] private BoolEventChannelSO _onBossFightToggled; // true=开始, false=结束 + [SerializeField] private StringEventChannelSO _onRegionEntered; + + private MusicState _musicState = MusicState.Exploration; + private string _currentRegion = string.Empty; + + private void OnEnable() + { + if (_onBossFightToggled != null) _onBossFightToggled.OnEventRaised += OnBossFightToggled; + if (_onRegionEntered != null) _onRegionEntered.OnEventRaised += OnRegionEntered; + if (_onGameStateChanged != null) _onGameStateChanged.OnEventRaised += HandleStateChanged; + } + + private void OnDisable() + { + if (_onBossFightToggled != null) _onBossFightToggled.OnEventRaised -= OnBossFightToggled; + if (_onRegionEntered != null) _onRegionEntered.OnEventRaised -= OnRegionEntered; + if (_onGameStateChanged != null) _onGameStateChanged.OnEventRaised -= HandleStateChanged; + } + + private void OnBossFightToggled(bool started) + { + if (started) + { + _musicState = MusicState.Boss; + var clip = _config != null ? _config.GetBossBGM(_currentRegion) : null; + _audioManager.PlayBGM(clip, fadeOutDur: 1f, fadeInDur: 0.5f); + _audioManager.TransitionToSnapshot("BossFight", 0.5f); + } + else + { + StartCoroutine(PlayVictoryThenRestore()); + } + } + + private IEnumerator PlayVictoryThenRestore() + { + _musicState = MusicState.Victory; + _audioManager.PlayBGM(_config != null ? _config.VictoryStingBGM : null, + fadeOutDur: 0.3f, fadeInDur: 0.1f); + float dur = _config != null ? _config.VictoryStingDuration : 4f; + yield return new WaitForSecondsRealtime(dur); + _musicState = MusicState.Exploration; + OnRegionEntered(_currentRegion); + _audioManager.TransitionToSnapshot("Default", 1.0f); + } + + private void OnRegionEntered(string regionId) + { + if (regionId == _currentRegion) return; + _currentRegion = regionId; + if (_musicState == MusicState.Exploration) + { + var clip = _config != null ? _config.GetZoneBGM(regionId) : null; + _audioManager.PlayBGM(clip, fadeOutDur: 1f, fadeInDur: 1f); + } + } + + private void HandleStateChanged(GameStateId state) + { + // ⚠️ GameStateId 是 struct,不能用 switch;使用 if/else + GameStates 常量 + if (state == GameStates.MainMenu) + _audioManager.PlayBGM(_config != null ? _config.MainMenuBGM : null, + fadeOutDur: 0.5f, fadeInDur: 1.0f); + else if (state == GameStates.Paused) + _audioManager.TransitionToSnapshot("Paused", 0.2f); + else if (state == GameStates.Dead) + _audioManager.TransitionToSnapshot("Dead", 1.5f); + else if (state == GameStates.Gameplay) + _audioManager.TransitionToSnapshot("Default", 0.3f); + } + } +} diff --git a/Assets/Scripts/Audio/BGMController.cs.meta b/Assets/Scripts/Audio/BGMController.cs.meta new file mode 100644 index 0000000..e0a4b66 --- /dev/null +++ b/Assets/Scripts/Audio/BGMController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eed9bb7d17336ae4c8e2636fbeeef6bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio/BaseGames.Audio.asmdef b/Assets/Scripts/Audio/BaseGames.Audio.asmdef new file mode 100644 index 0000000..b83fe9c --- /dev/null +++ b/Assets/Scripts/Audio/BaseGames.Audio.asmdef @@ -0,0 +1,18 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Audio", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Audio", + "references": [ + "BaseGames.Core.Events", + "BaseGames.Core", + "BaseGames.Combat" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Audio/BaseGames.Audio.asmdef.meta b/Assets/Scripts/Audio/BaseGames.Audio.asmdef.meta new file mode 100644 index 0000000..28703b7 --- /dev/null +++ b/Assets/Scripts/Audio/BaseGames.Audio.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bdbbbb51c06a54142b8bf1f9966fc408 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio/CombatSFXController.cs b/Assets/Scripts/Audio/CombatSFXController.cs new file mode 100644 index 0000000..bdf8124 --- /dev/null +++ b/Assets/Scripts/Audio/CombatSFXController.cs @@ -0,0 +1,85 @@ +using UnityEngine; +using BaseGames.Core.Events; +using BaseGames.Combat; + +namespace BaseGames.Audio +{ + /// + /// 订阅战斗/死亡事件,通过 AudioManager 播放对应 SFX。 + /// 挂载在 Persistent 场景的 [Systems] GameObject 上。 + /// + public class CombatSFXController : MonoBehaviour + { + [Header("Event Channels")] + [SerializeField] private HitConfirmedEventChannelSO _onHitConfirmed; + [SerializeField] private VoidEventChannelSO _onPlayerDied; + + [Header("Default Hit SFX")] + [SerializeField] private AudioClip _defaultHitSFX; + + [Header("Per-Type Hit SFX (optional, overrides default)")] + [SerializeField] private AudioClip _sparkHitSFX; + [SerializeField] private AudioClip _slashHitSFX; + [SerializeField] private AudioClip _bloodHitSFX; + [SerializeField] private AudioClip _magicHitSFX; + [SerializeField] private AudioClip _heavyHitSFX; + [SerializeField] private AudioClip _critHitSFX; + [SerializeField] private AudioClip _parryHitSFX; + [SerializeField] private AudioClip _fireHitSFX; + [SerializeField] private AudioClip _iceHitSFX; + + [Header("Death SFX")] + [SerializeField] private AudioClip _playerDeathSFX; + + private void OnEnable() + { + if (_onHitConfirmed != null) + _onHitConfirmed.OnEventRaised += HandleHit; + + if (_onPlayerDied != null) + _onPlayerDied.OnEventRaised += HandlePlayerDied; + } + + private void OnDisable() + { + if (_onHitConfirmed != null) + _onHitConfirmed.OnEventRaised -= HandleHit; + + if (_onPlayerDied != null) + _onPlayerDied.OnEventRaised -= HandlePlayerDied; + } + + private void HandleHit(HitInfo info) + { + AudioClip clip = ResolveHitClip(info.DamageInfo.FxType); + if (clip == null) return; + + AudioManager.Instance.PlaySFXAtPosition(clip, info.HitPoint); + } + + private void HandlePlayerDied() + { + if (_playerDeathSFX == null) return; + AudioManager.Instance.PlaySFX(_playerDeathSFX); + } + + private AudioClip ResolveHitClip(HitFxType fxType) + { + AudioClip perType = fxType switch + { + HitFxType.Spark => _sparkHitSFX, + HitFxType.Slash => _slashHitSFX, + HitFxType.Blood => _bloodHitSFX, + HitFxType.Magic => _magicHitSFX, + HitFxType.Heavy => _heavyHitSFX, + HitFxType.Crit => _critHitSFX, + HitFxType.Parry => _parryHitSFX, + HitFxType.Fire => _fireHitSFX, + HitFxType.Ice => _iceHitSFX, + _ => null + }; + + return perType != null ? perType : _defaultHitSFX; + } + } +} diff --git a/Assets/Scripts/Audio/CombatSFXController.cs.meta b/Assets/Scripts/Audio/CombatSFXController.cs.meta new file mode 100644 index 0000000..1b34e9c --- /dev/null +++ b/Assets/Scripts/Audio/CombatSFXController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9ab0a72bbabda44888a0bec8186bc27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Audio/_Placeholder.cs b/Assets/Scripts/Audio/_Placeholder.cs new file mode 100644 index 0000000..f7c4065 --- /dev/null +++ b/Assets/Scripts/Audio/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Audio { } + diff --git a/Assets/Scripts/Audio/_Placeholder.cs.meta b/Assets/Scripts/Audio/_Placeholder.cs.meta new file mode 100644 index 0000000..3f96efe --- /dev/null +++ b/Assets/Scripts/Audio/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7d6fe0521388084e83314560a394951 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera.meta b/Assets/Scripts/Camera.meta new file mode 100644 index 0000000..22fe909 --- /dev/null +++ b/Assets/Scripts/Camera.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0461abd63ce9f1a4cbe77b584ad89dbe +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/.gitkeep b/Assets/Scripts/Camera/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Camera/BaseGames.Camera.asmdef b/Assets/Scripts/Camera/BaseGames.Camera.asmdef new file mode 100644 index 0000000..63e0978 --- /dev/null +++ b/Assets/Scripts/Camera/BaseGames.Camera.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Camera", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Camera", + "references": [ + "BaseGames.Core.Events", + "Unity.Cinemachine" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Camera/BaseGames.Camera.asmdef.meta b/Assets/Scripts/Camera/BaseGames.Camera.asmdef.meta new file mode 100644 index 0000000..ffcedf7 --- /dev/null +++ b/Assets/Scripts/Camera/BaseGames.Camera.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5b9cbc0f2e569d64a862f3b7f417c7b6 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/CameraBlendProfileSO.cs b/Assets/Scripts/Camera/CameraBlendProfileSO.cs new file mode 100644 index 0000000..a11a5b6 --- /dev/null +++ b/Assets/Scripts/Camera/CameraBlendProfileSO.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using Unity.Cinemachine; + +namespace BaseGames.Camera +{ + [CreateAssetMenu(menuName = "Camera/BlendProfile")] + public class CameraBlendProfileSO : ScriptableObject + { + public CinemachineBlendDefinition.Styles Style = CinemachineBlendDefinition.Styles.EaseInOut; + public float BlendTime = 0.5f; + [Tooltip("Style = Custom 时使用")] + public AnimationCurve CustomCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f); + + /// 转换为 Cinemachine 混合定义。 + public CinemachineBlendDefinition ToBlendDefinition() + { + return new CinemachineBlendDefinition + { + Style = this.Style, + Time = this.BlendTime, + CustomCurve = this.Style == CinemachineBlendDefinition.Styles.Custom ? CustomCurve : null + }; + } + } +} diff --git a/Assets/Scripts/Camera/CameraBlendProfileSO.cs.meta b/Assets/Scripts/Camera/CameraBlendProfileSO.cs.meta new file mode 100644 index 0000000..4350e7a --- /dev/null +++ b/Assets/Scripts/Camera/CameraBlendProfileSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04f7b183b6d364d4ea85283d30339db7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/CameraConfigSO.cs b/Assets/Scripts/Camera/CameraConfigSO.cs new file mode 100644 index 0000000..15e5aab --- /dev/null +++ b/Assets/Scripts/Camera/CameraConfigSO.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace BaseGames.Camera +{ + [CreateAssetMenu(menuName = "Camera/CameraConfig")] + public class CameraConfigSO : ScriptableObject + { + [Header("跟随")] + public float FollowDamping = 0.15f; + public float LookAheadTime = 0.3f; + public float LookAheadSmoothing = 0.1f; + public Vector2 DeadZoneSize = new Vector2(1f, 0.5f); + public Vector2 SoftZoneSize = new Vector2(2.5f, 2f); + + [Header("偏移")] + public float LookDownOffset = -1.5f; + public float LookUpOffset = 1.5f; + + [Header("画面抖动默认强度")] + public float DefaultImpulseStrength = 0.3f; + } +} diff --git a/Assets/Scripts/Camera/CameraConfigSO.cs.meta b/Assets/Scripts/Camera/CameraConfigSO.cs.meta new file mode 100644 index 0000000..a3bd533 --- /dev/null +++ b/Assets/Scripts/Camera/CameraConfigSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b358a30ac16c6a34fb673ede0a288e48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/CameraStateController.cs b/Assets/Scripts/Camera/CameraStateController.cs new file mode 100644 index 0000000..f4ffa8f --- /dev/null +++ b/Assets/Scripts/Camera/CameraStateController.cs @@ -0,0 +1,87 @@ +using System.Collections.Generic; +using UnityEngine; +using Unity.Cinemachine; + +namespace BaseGames.Camera +{ + /// + /// 相机状态单例控制器。管理房间相机切换、限位器更新与屏幕抖动。 + /// 须放置在持久化场景中。 + /// + [DefaultExecutionOrder(-100)] + public class CameraStateController : MonoBehaviour + { + public static CameraStateController Instance { get; private set; } + + [Header("引用")] + [SerializeField] private CinemachineBrain _brain; + [SerializeField] private CinemachineImpulseSource _impulseSource; + + [Header("默认混合配置")] + [SerializeField] private CameraBlendProfileSO _defaultBlendProfile; + + // ── 注册表 ──────────────────────────────────────────────────────────── + private readonly HashSet _registeredCameras = new HashSet(); + private RoomCamera _activeCamera; + + // ── Unity Lifecycle ─────────────────────────────────────────────────── + private void Awake() + { + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + Instance = this; + } + + private void OnDestroy() + { + if (Instance == this) Instance = null; + } + + // ── 公开 API ────────────────────────────────────────────────────────── + + /// 向控制器注册一个房间相机(可选,也可由触发器直接调用 SwitchRoom)。 + public void RegisterRoomCamera(RoomCamera camera) + { + if (camera != null) _registeredCameras.Add(camera); + } + + /// 注销房间相机。 + public void UnregisterRoomCamera(RoomCamera camera) + { + if (camera != null) _registeredCameras.Remove(camera); + } + + /// 切换到目标房间相机,并应用对应的混合配置。 + public void SwitchRoom(RoomCamera targetCamera) + { + if (targetCamera == null || targetCamera == _activeCamera) return; + + // 应用混合配置到 Brain + if (_brain != null) + { + var profile = targetCamera.BlendProfile ?? _defaultBlendProfile; + if (profile != null) + _brain.DefaultBlend = profile.ToBlendDefinition(); + } + + // 禁用旧相机、启用新相机 + _activeCamera?.Deactivate(); + _activeCamera = targetCamera; + _activeCamera.Activate(); + } + + /// 触发屏幕抖动。 + public void TriggerImpulse(Vector3 velocity) + { + if (_impulseSource != null) + _impulseSource.GenerateImpulse(velocity); + } + + /// 以默认强度触发屏幕抖动。 + public void TriggerImpulse(float strength = 0.3f) + => TriggerImpulse(Vector3.down * strength); + } +} diff --git a/Assets/Scripts/Camera/CameraStateController.cs.meta b/Assets/Scripts/Camera/CameraStateController.cs.meta new file mode 100644 index 0000000..ab08257 --- /dev/null +++ b/Assets/Scripts/Camera/CameraStateController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49f718c655d71394ea13e312a2dd9eed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/CameraTriggerZone.cs b/Assets/Scripts/Camera/CameraTriggerZone.cs new file mode 100644 index 0000000..a188d5e --- /dev/null +++ b/Assets/Scripts/Camera/CameraTriggerZone.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace BaseGames.Camera +{ + /// + /// 相机区域切换触发器。玩家进入时通知 CameraStateController 切换到目标房间相机。 + /// [ExecuteAlways] 确保编辑器中 Gizmo 立即更新。 + /// + [ExecuteAlways] + [RequireComponent(typeof(BoxCollider2D))] + public class CameraTriggerZone : MonoBehaviour + { + [SerializeField] private RoomCamera _targetCamera; + [SerializeField] private string _playerTag = "Player"; + + private BoxCollider2D _collider; + + private void Awake() + { + _collider = GetComponent(); + _collider.isTrigger = true; + } + + private void OnTriggerEnter2D(Collider2D other) + { + if (!Application.isPlaying) return; + if (!other.CompareTag(_playerTag)) return; + if (_targetCamera != null) + CameraStateController.Instance?.SwitchRoom(_targetCamera); + } + + private void OnDrawGizmos() + { + if (_collider == null) _collider = GetComponent(); + Gizmos.color = new Color(0.2f, 0.8f, 1f, 0.25f); + Gizmos.matrix = transform.localToWorldMatrix; + Gizmos.DrawCube(_collider.offset, _collider.size); + Gizmos.color = new Color(0.2f, 0.8f, 1f, 0.8f); + Gizmos.DrawWireCube(_collider.offset, _collider.size); + } + } +} diff --git a/Assets/Scripts/Camera/CameraTriggerZone.cs.meta b/Assets/Scripts/Camera/CameraTriggerZone.cs.meta new file mode 100644 index 0000000..1843c90 --- /dev/null +++ b/Assets/Scripts/Camera/CameraTriggerZone.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 108d2b73047255f44a823dbcdea4a7fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/RoomCamera.cs b/Assets/Scripts/Camera/RoomCamera.cs new file mode 100644 index 0000000..588fcc1 --- /dev/null +++ b/Assets/Scripts/Camera/RoomCamera.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using Unity.Cinemachine; + +namespace BaseGames.Camera +{ + /// + /// 单房间虚拟相机。激活时提升优先级,停用时降为 0。 + /// 挂载在每个房间的 CinemachineCamera GameObject 上。 + /// + [RequireComponent(typeof(CinemachineCamera))] + public class RoomCamera : MonoBehaviour + { + [Header("房间设置")] + [SerializeField] private RoomVisibleArea _visibleArea; + [SerializeField] private Vector2 _cameraOffset = Vector2.zero; + [SerializeField] private CameraBlendProfileSO _blendProfile; + [SerializeField] private int _activePriority = 15; + + private CinemachineCamera _vcam; + + private void Awake() => _vcam = GetComponent(); + private void OnEnable() => _vcam.Priority = _activePriority; + private void OnDisable() => _vcam.Priority = 0; + + public PolygonCollider2D ConfinerCollider => _visibleArea?.Collider; + public Vector2 CameraOffset => _cameraOffset; + public CameraBlendProfileSO BlendProfile => _blendProfile; + + /// 在 CameraStateController 管理的激活流程中调用。 + public void Activate() => gameObject.SetActive(true); + public void Deactivate() => gameObject.SetActive(false); + } +} diff --git a/Assets/Scripts/Camera/RoomCamera.cs.meta b/Assets/Scripts/Camera/RoomCamera.cs.meta new file mode 100644 index 0000000..d2ee076 --- /dev/null +++ b/Assets/Scripts/Camera/RoomCamera.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af7e12583264b8c4da8dcd69df274793 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/RoomVisibleArea.cs b/Assets/Scripts/Camera/RoomVisibleArea.cs new file mode 100644 index 0000000..ce61ecf --- /dev/null +++ b/Assets/Scripts/Camera/RoomVisibleArea.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace BaseGames.Camera +{ + /// + /// 标记房间的可见区域(多边形)。供 CinemachineConfiner2D 使用。 + /// [ExecuteAlways] 确保编辑器中碰撞体立即更新。 + /// + [ExecuteAlways] + [RequireComponent(typeof(PolygonCollider2D))] + public class RoomVisibleArea : MonoBehaviour + { + private PolygonCollider2D _collider; + + private void Awake() + { + _collider = GetComponent(); + _collider.isTrigger = true; + } + + public PolygonCollider2D Collider + { + get + { + if (_collider == null) _collider = GetComponent(); + return _collider; + } + } + } +} diff --git a/Assets/Scripts/Camera/RoomVisibleArea.cs.meta b/Assets/Scripts/Camera/RoomVisibleArea.cs.meta new file mode 100644 index 0000000..e900815 --- /dev/null +++ b/Assets/Scripts/Camera/RoomVisibleArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38af2eabab7039c4a919181e4c507d12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Camera/_Placeholder.cs b/Assets/Scripts/Camera/_Placeholder.cs new file mode 100644 index 0000000..546b714 --- /dev/null +++ b/Assets/Scripts/Camera/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Camera { } + diff --git a/Assets/Scripts/Camera/_Placeholder.cs.meta b/Assets/Scripts/Camera/_Placeholder.cs.meta new file mode 100644 index 0000000..06b889d --- /dev/null +++ b/Assets/Scripts/Camera/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5097f44608b602a46a8b8304e2edf090 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat.meta b/Assets/Scripts/Combat.meta new file mode 100644 index 0000000..dd39790 --- /dev/null +++ b/Assets/Scripts/Combat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 878e5c61f6bb064449bf2399b70026b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/BaseGames.Combat.asmdef b/Assets/Scripts/Combat/BaseGames.Combat.asmdef new file mode 100644 index 0000000..07dafca --- /dev/null +++ b/Assets/Scripts/Combat/BaseGames.Combat.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Combat", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Combat", + "references": [ + "BaseGames.Core.Events", + "BaseGames.Parry" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Combat/BaseGames.Combat.asmdef.meta b/Assets/Scripts/Combat/BaseGames.Combat.asmdef.meta new file mode 100644 index 0000000..2db8e88 --- /dev/null +++ b/Assets/Scripts/Combat/BaseGames.Combat.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8746e0f9f33d5d84ea0b598962cc36ae +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/CombatEnums.cs b/Assets/Scripts/Combat/CombatEnums.cs new file mode 100644 index 0000000..cc0e09b --- /dev/null +++ b/Assets/Scripts/Combat/CombatEnums.cs @@ -0,0 +1,82 @@ +using System; + +namespace BaseGames.Combat +{ + // ── 元素/物理属性 ─────────────────────────────────────────────────────── + public enum DamageType { Normal, True, Fire, Poison, Ice, Lightning, Void } + + // ── 来源分类 ──────────────────────────────────────────────────────────── + public enum DamageCategory + { + NormalAttack = 0, + SoulSkill = 1, + SpiritSkill = 2, + Projectile = 3, + EnvironmentTrap = 4, + StatusEffect = 5, + FallDamage = 6, + Reflected = 7, + } + + // ── 行为标志 ──────────────────────────────────────────────────────────── + [Flags] + public enum DamageFlags + { + None = 0, + Unblockable = 1 << 0, + CanBeParried = 1 << 1, + IgnoreIFrame = 1 << 2, + PerfectParryOnly = 1 << 3, + IsProjectile = 1 << 4, + CanClash = 1 << 5, + ForceBreak = 1 << 6, + NoKnockback = 1 << 7, + } + + // ── 交互标签 ──────────────────────────────────────────────────────────── + [Flags] + public enum DamageTags : uint + { + None = 0, + MeleeHit = 1 << 0, + RangedHit = 1 << 1, + SkillHit = 1 << 2, + ElementFire = 1 << 3, + ElementPoison = 1 << 4, + ElementVoid = 1 << 5, + AfterParry = 1 << 6, + ChargedAttack = 1 << 7, + SkyFormOnly = 1 << 8, + EarthFormOnly = 1 << 9, + DeathFormOnly = 1 << 10, + BreakLight = 1 << 11, + BreakMedium = 1 << 12, + BreakHeavy = 1 << 13, + BreakBreaker = 1 << 14, + } + + public enum HitFxType { Spark, Slash, Blood, Magic, Heavy, Crit, Void, Heal, Parry, Fire, Ice } + + // ── 攻击方打断等级 ────────────────────────────────────────────────────── + public enum BreakLevel + { + None = 0, + Light = 1, + Medium = 2, + Heavy = 3, + Breaker = 4, + } + + // ── 承受方霸体等级 ────────────────────────────────────────────────────── + public enum PoiseLevel + { + None = 0, + Light = 1, + Medium = 2, + Heavy = 3, + Unbreakable = 100, + } + + // ── 攻击方向(PlayerCombat / WeaponSO 使用)──────────────────────────── + public enum AttackDirection { Ground, Up, Down, Air } +} diff --git a/Assets/Scripts/Combat/CombatEnums.cs.meta b/Assets/Scripts/Combat/CombatEnums.cs.meta new file mode 100644 index 0000000..9bf4e57 --- /dev/null +++ b/Assets/Scripts/Combat/CombatEnums.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca3858c58d2156f4fbc2d295c444bd40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/CombatInterfaces.cs b/Assets/Scripts/Combat/CombatInterfaces.cs new file mode 100644 index 0000000..a1caf79 --- /dev/null +++ b/Assets/Scripts/Combat/CombatInterfaces.cs @@ -0,0 +1,48 @@ +namespace BaseGames.Combat +{ + /// + /// 可受击实体接口。PlayerController 和 EnemyBase 实现此接口。 + /// HurtBox.Awake 通过 GetComponentInParent<IDamageable>() 注入。 + /// + public interface IDamageable + { + bool IsInvincible { get; } + int Defense { get; } + void TakeDamage(DamageInfo info); + } + + /// + /// 可持有霸体的实体接口。HurtBox 在 ReceiveDamage 中做等级比较。 + /// + public interface IPoiseSource + { + PoiseLevel GetCurrentPoiseLevel(); + } + + /// + /// 护盾接口(玩家专属)。由 PlayerController.Awake() 注入 HurtBox。 + /// AbsorbDamage 返回穿透量(0 = 全部吸收,>0 = 穿透量继续走 TakeDamage 流程)。 + /// + public interface IShieldable + { + bool HasShield { get; } + int AbsorbDamage(int amount); + } + + /// + /// 可破坏机关/障碍物接口。HitBox 在命中非 HurtBox 对象时尝试调用。 + /// + public interface IBreakable + { + void TryInteract(DamageInfo info); + } + + /// + /// 可施加状态效果的实体接口(避免 Combat 直接引用 StatusEffects 程序集)。 + /// StatusEffectManager 实现此接口;HurtBox.ReceiveDamage 步骤 8 通过此接口调用。 + /// + public interface IStatusEffectable + { + void ApplyStatusEffect(DamageType type); + } +} diff --git a/Assets/Scripts/Combat/CombatInterfaces.cs.meta b/Assets/Scripts/Combat/CombatInterfaces.cs.meta new file mode 100644 index 0000000..043bdeb --- /dev/null +++ b/Assets/Scripts/Combat/CombatInterfaces.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7881dd1e194f2944a87ec5d50686740e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/DamageInfo.cs b/Assets/Scripts/Combat/DamageInfo.cs new file mode 100644 index 0000000..d0d5bad --- /dev/null +++ b/Assets/Scripts/Combat/DamageInfo.cs @@ -0,0 +1,82 @@ +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Combat +{ + /// + /// 单次伤害信息。流水线:RawDamage → Amount(护盾修改)→ FinalDamage(防御减免后)。 + /// ⚠️ 非 readonly struct — Builder 就地写入字段。 + /// + [System.Serializable] + public struct DamageInfo + { + public int RawDamage; // HitBox 设定的原始值(Builder.SetRaw 写入一次) + public int Amount; // 流水线中被护盾/防御修改 + public int FinalDamage; // HurtBox 写入,最终 HP 扣除量 + public Vector2 KnockbackDirection; + public float KnockbackForce; + public float HitStunDuration; + public DamageType Type; + public DamageCategory Category; + public DamageFlags Flags; + public DamageTags Tags; + public Vector2 SourcePosition; + public int SourceLayer; + public HitFxType FxType; + public BreakLevel Break; + public string SourceId; + public string SkillId; + + // ── Builder ────────────────────────────────────────────────────────── + public class Builder + { + private DamageInfo _d; + + public Builder() { } + + // SetRaw 同步初始化 Amount(Amount 始终以 RawDamage 为起点) + public Builder SetRaw(int v) { _d.RawDamage = v; _d.Amount = v; return this; } + public Builder SetType(DamageType v) { _d.Type = v; return this; } + public Builder SetCategory(DamageCategory v){ _d.Category = v; return this; } + public Builder SetFlags(DamageFlags v) { _d.Flags = v; return this; } + public Builder SetTags(DamageTags v) { _d.Tags = v; return this; } + public Builder SetSkillId(string v) { _d.SkillId = v; return this; } + public Builder SetSourceId(string v) { _d.SourceId = v; return this; } + public Builder SetKnockback(Vector2 dir, float force) + { _d.KnockbackDirection = dir; _d.KnockbackForce = force; return this; } + public Builder SetStun(float dur) { _d.HitStunDuration = dur; return this; } + public Builder SetFx(HitFxType v) { _d.FxType = v; return this; } + public Builder SetBreak(BreakLevel v) { _d.Break = v; return this; } + public Builder SetSourcePos(Vector2 v) { _d.SourcePosition = v; return this; } + public Builder SetLayer(int v) { _d.SourceLayer = v; return this; } + public DamageInfo Build() => _d; + } + + /// + /// ⚡ 零堆分配工厂(热路径首选)。直接从 DamageSourceSO 填入基础字段。 + /// KnockbackDirection / SourcePosition / SourceLayer 等运行时字段由调用方就地赋值。 + /// + public static DamageInfo From(DamageSourceSO so) + { + int baseAmt = Mathf.RoundToInt(so.BaseDamage * so.DamageMultiplier); + return new DamageInfo + { + RawDamage = baseAmt, + Amount = baseAmt, + Type = so.Type, + Category = so.Category, + Flags = so.Flags, + Tags = so.Tags, + HitStunDuration = so.HitStunDuration, + FxType = so.FxType, + Break = so.BreakLevel, + SourceId = so.sourceId, + SkillId = so.skillId, + }; + } + } + + /// 伤害事件频道(EVT_DamageDealt)。 + [UnityEngine.CreateAssetMenu(menuName = "Events/DamageDealt")] + public class DamageInfoEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Combat/DamageInfo.cs.meta b/Assets/Scripts/Combat/DamageInfo.cs.meta new file mode 100644 index 0000000..a774d46 --- /dev/null +++ b/Assets/Scripts/Combat/DamageInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78a4c2420f838e74aa97697d5da09b72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/DamageSourceSO.cs b/Assets/Scripts/Combat/DamageSourceSO.cs new file mode 100644 index 0000000..ec1fbdc --- /dev/null +++ b/Assets/Scripts/Combat/DamageSourceSO.cs @@ -0,0 +1,52 @@ +using UnityEngine; + +namespace BaseGames.Combat +{ + /// + /// 攻击数据源 SO。描述单次攻击的基础伤害参数。 + /// ⚡ 热路径使用零分配工厂:DamageInfo.From(sourceSO)。 + /// 仅需链式覆盖多字段时才使用 CreateBuilder()。 + /// + [CreateAssetMenu(menuName = "Combat/DamageSource")] + public class DamageSourceSO : ScriptableObject + { + [Header("Identity")] + public string sourceId; + public string skillId; + + [Header("Base")] + public int BaseDamage = 10; + public float DamageMultiplier = 1.0f; + public DamageType Type = DamageType.Normal; + public DamageCategory Category = DamageCategory.NormalAttack; + public DamageFlags Flags = DamageFlags.CanBeParried; + public DamageTags Tags = DamageTags.MeleeHit; + + [Header("Physics")] + public float KnockbackForce = 5f; + public float HitStunDuration = 0.1f; + public BreakLevel BreakLevel = BreakLevel.Light; + + [Header("FX")] + public HitFxType FxType = HitFxType.Slash; + + [Header("Combo")] + public float ComboWindowDuration = 0.4f; + public float CancelWindowEnd = 0.5f; + + /// + /// 链式 Builder(特殊场景使用,热路径改用 DamageInfo.From(this))。 + /// + public DamageInfo.Builder CreateBuilder() => new DamageInfo.Builder() + .SetRaw(Mathf.RoundToInt(BaseDamage * DamageMultiplier)) + .SetType(Type) + .SetCategory(Category) + .SetFlags(Flags) + .SetTags(Tags) + .SetStun(HitStunDuration) + .SetFx(FxType) + .SetBreak(BreakLevel) + .SetSourceId(sourceId) + .SetSkillId(skillId); + } +} diff --git a/Assets/Scripts/Combat/DamageSourceSO.cs.meta b/Assets/Scripts/Combat/DamageSourceSO.cs.meta new file mode 100644 index 0000000..dee054d --- /dev/null +++ b/Assets/Scripts/Combat/DamageSourceSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96b10c11e6173394a8fa8d9c614b0035 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/HitBox.cs b/Assets/Scripts/Combat/HitBox.cs new file mode 100644 index 0000000..b5a4f56 --- /dev/null +++ b/Assets/Scripts/Combat/HitBox.cs @@ -0,0 +1,96 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace BaseGames.Combat +{ + /// + /// 攻击判定盒。挂载在武器 Prefab 或技能 HitBox Prefab 的子节点上。 + /// Phase 1 简化:直接挂在 Player Prefab 子节点 [HitBoxGround/Up/Down/Air]。 + /// Collider2D 需设 IsTrigger = true,Layer = PlayerHitBox 或 EnemyHitBox。 + /// + [RequireComponent(typeof(Collider2D))] + public class HitBox : MonoBehaviour + { + [SerializeField] private DamageSourceSO _defaultSource; + [SerializeField] private float _hitCooldown = 0.1f; + + private DamageSourceSO _currentSource; + private Transform _attackerTransform; + private bool _isActive; + + /// 命中确认委托(PlayerCombat / EnemyCombat 订阅)。 + public System.Action OnHitConfirmed; + + /// + /// 激活 HitBox。source/attacker 均可选,未传则使用 Inspector 默认值。 + /// ⚠️ 不存在 Activate(float duration) 重载。 + /// + public void Activate(DamageSourceSO source = null, Transform attacker = null) + { + _currentSource = source ?? _defaultSource; + _attackerTransform = attacker ?? transform; + _isActive = true; + } + + public void Deactivate() => _isActive = false; + + private void Awake() + { + // 确保 Collider2D 是 Trigger + var col = GetComponent(); + if (!col.isTrigger) + Debug.LogWarning($"[HitBox] {name}: Collider2D.isTrigger 应为 true。", this); + } + + private void OnDisable() + { + _isActive = false; + _hitCooldownTimers.Clear(); + } + + private void OnTriggerEnter2D(Collider2D other) + { + if (!_isActive) return; + if (_currentSource == null) + { + Debug.LogWarning($"[HitBox] {name}: 无 DamageSourceSO,跳过命中。", this); + return; + } + if (!CheckCooldown(other)) return; + + Vector2 knockDir = ((Vector2)other.bounds.center + - (Vector2)_attackerTransform.position).normalized; + + // ⚡ 零 GC:struct 工厂,就地赋值运行时字段 + var info = DamageInfo.From(_currentSource); + info.KnockbackDirection = knockDir; + info.KnockbackForce = _currentSource.KnockbackForce; + info.SourcePosition = _attackerTransform.position; + info.SourceLayer = _attackerTransform.gameObject.layer; + + // ① 命中 HurtBox + var hurtBox = other.GetComponent(); + if (hurtBox != null) + { + hurtBox.ReceiveDamage(info); + OnHitConfirmed?.Invoke(info); + return; + } + + // ② 命中 IBreakable(机关/障碍物) + other.GetComponent()?.TryInteract(info); + } + + // ── 同目标多帧命中冷却 ──────────────────────────────────────────────── + private readonly Dictionary _hitCooldownTimers = new(); + + private bool CheckCooldown(Collider2D other) + { + float now = Time.time; + if (_hitCooldownTimers.TryGetValue(other, out float last) && now - last < _hitCooldown) + return false; + _hitCooldownTimers[other] = now; + return true; + } + } +} diff --git a/Assets/Scripts/Combat/HitBox.cs.meta b/Assets/Scripts/Combat/HitBox.cs.meta new file mode 100644 index 0000000..1c11e74 --- /dev/null +++ b/Assets/Scripts/Combat/HitBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a655e2461396a8348a32a13144438e8e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/HitConfirmedEventChannelSO.cs b/Assets/Scripts/Combat/HitConfirmedEventChannelSO.cs new file mode 100644 index 0000000..250d762 --- /dev/null +++ b/Assets/Scripts/Combat/HitConfirmedEventChannelSO.cs @@ -0,0 +1,8 @@ +using BaseGames.Core.Events; +using UnityEngine; + +namespace BaseGames.Combat +{ + [CreateAssetMenu(menuName = "Events/HitConfirmed")] + public class HitConfirmedEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Combat/HitConfirmedEventChannelSO.cs.meta b/Assets/Scripts/Combat/HitConfirmedEventChannelSO.cs.meta new file mode 100644 index 0000000..085addb --- /dev/null +++ b/Assets/Scripts/Combat/HitConfirmedEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 86e5ffa3ce0537845b1b601c267d76ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/HitInfo.cs b/Assets/Scripts/Combat/HitInfo.cs new file mode 100644 index 0000000..971c9df --- /dev/null +++ b/Assets/Scripts/Combat/HitInfo.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Combat +{ + /// + /// 命中信息(HurtBox.ReceiveDamage 广播给 VFX/Audio/Feedback)。 + /// + public struct HitInfo + { + public DamageInfo DamageInfo; + public Vector3 HitPoint; + public Vector3 HitNormal; + public Transform HitTransform; + } + +} diff --git a/Assets/Scripts/Combat/HitInfo.cs.meta b/Assets/Scripts/Combat/HitInfo.cs.meta new file mode 100644 index 0000000..7f946ad --- /dev/null +++ b/Assets/Scripts/Combat/HitInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5933018bd81bef48be815337eef02af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/HurtBox.cs b/Assets/Scripts/Combat/HurtBox.cs new file mode 100644 index 0000000..f5508e5 --- /dev/null +++ b/Assets/Scripts/Combat/HurtBox.cs @@ -0,0 +1,106 @@ +using UnityEngine; +using BaseGames.Parry; + +namespace BaseGames.Combat +{ + /// + /// 受击盒组件。实现完整 8 步伤害流水线(架构 06_CombatModule §5)。 + /// 挂载在角色根节点或指定子节点上,Collider2D 需设 IsTrigger = true, + /// Layer = PlayerHurtBox 或 EnemyHurtBox。 + /// + [RequireComponent(typeof(Collider2D))] + public class HurtBox : MonoBehaviour + { + // ── 伤害接受方(Awake 注入)────────────────────────────────────────── + private IDamageable _owner; + private IShieldable _shieldable; // 由 PlayerController.Awake() 注入 + private ParrySystem _parrySystem; // Phase 2 由 PlayerController.Awake() 注入 + private IPoiseSource _poiseSource; // Phase 2 由 EnemyBase.Awake() 注入 + + private bool _isHurtBoxInvincible; + private bool _isActive = true; + + // ── 事件频道 ────────────────────────────────────────────────────────── + [SerializeField] private DamageInfoEventChannelSO _onDamageDealt; + [SerializeField] private HitConfirmedEventChannelSO _onHitConfirmed; + + // ── 注入接口 ────────────────────────────────────────────────────────── + public void SetShieldable(IShieldable shieldable) => _shieldable = shieldable; + public void SetParrySystem(ParrySystem ps) => _parrySystem = ps; + public void SetPoiseSource(IPoiseSource src) => _poiseSource = src; + public void SetInvincible(bool value) => _isHurtBoxInvincible = value; + public void SetActive(bool value) => _isActive = value; + + private void Awake() + { + _owner = GetComponentInParent(); + if (_owner == null) + Debug.LogWarning($"[HurtBox] {name}: 父节点中未找到 IDamageable 实现。", this); + } + + /// + /// 接受伤害(由 HitBox.OnTriggerEnter2D 直接调用)。 + /// ⚠️ 方法名必须为 ReceiveDamage。 + /// + public void ReceiveDamage(DamageInfo info) + { + if (!_isActive || _owner == null) return; + + // 1. 无敌帧检查 + if ((_owner.IsInvincible || _isHurtBoxInvincible) + && !info.Flags.HasFlag(DamageFlags.IgnoreIFrame)) return; + + // 2. 弹反检查(Phase 1 _parrySystem == null 跳过) + // ParrySystem 只暴露窗口状态,伤害数据留在 Combat 层,无跨程序集数据依赖。 + if (_parrySystem != null && info.Flags.HasFlag(DamageFlags.CanBeParried)) + if (_parrySystem.ConsumeParry()) return; + + // 3. 霸体检查(Phase 1 _poiseSource == null 跳过) + if (!info.Flags.HasFlag(DamageFlags.ForceBreak) && _poiseSource != null) + { + PoiseLevel curPoise = _poiseSource.GetCurrentPoiseLevel(); + if (curPoise == PoiseLevel.Unbreakable) return; + if ((int)info.Break < (int)curPoise) + { + _onHitConfirmed?.Raise(new HitInfo + { + DamageInfo = info, + HitPoint = transform.position, + }); + return; + } + } + + // 4. 护盾层拦截(玩家专属,在防御减免前) + if (_shieldable != null && _shieldable.HasShield) + { + int passThrough = _shieldable.AbsorbDamage(info.Amount); + if (passThrough <= 0) return; + info.Amount = passThrough; + } + + // 5. 计算 FinalDamage(防御减免,最低 1) + int finalDamage = UnityEngine.Mathf.Max(1, info.Amount - _owner.Defense); + info.Amount = finalDamage; + info.FinalDamage = finalDamage; + + // 6. 调用 _owner.TakeDamage + _owner.TakeDamage(info); + + // 7. 全局广播 + _onDamageDealt?.Raise(info); + _onHitConfirmed?.Raise(new HitInfo + { + DamageInfo = info, + HitPoint = transform.position, + }); + + // 8. 状态效果触发(DoT — Fire / Poison) + // 使用接口避免对 StatusEffects 程序集的直接依赖 + if (_owner is UnityEngine.MonoBehaviour mb) + { + mb.GetComponent()?.ApplyStatusEffect(info.Type); + } + } + } +} diff --git a/Assets/Scripts/Combat/HurtBox.cs.meta b/Assets/Scripts/Combat/HurtBox.cs.meta new file mode 100644 index 0000000..88075d2 --- /dev/null +++ b/Assets/Scripts/Combat/HurtBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7b7a233d7f70aa4f86b473412b826de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/ShieldComponent.cs b/Assets/Scripts/Combat/ShieldComponent.cs new file mode 100644 index 0000000..e6f874a --- /dev/null +++ b/Assets/Scripts/Combat/ShieldComponent.cs @@ -0,0 +1,20 @@ +using UnityEngine; + +namespace BaseGames.Combat +{ + /// + /// 护盾组件(Phase 1 存根)。实现 IShieldable 接口供 HurtBox 注入。 + /// Phase 2 实现完整护盾逻辑(护盾值、再生、破盾事件)。 + /// + public class ShieldComponent : MonoBehaviour, IShieldable + { + public bool HasShield { get; private set; } + + /// + /// 尝试以护盾吸收伤害。 + /// 返回穿透量(0 = 全部吸收,>0 = 穿透量继续走 TakeDamage 流程)。 + /// Phase 1:护盾不存在,全量穿透。 + /// + public int AbsorbDamage(int amount) => amount; + } +} diff --git a/Assets/Scripts/Combat/ShieldComponent.cs.meta b/Assets/Scripts/Combat/ShieldComponent.cs.meta new file mode 100644 index 0000000..c809dbf --- /dev/null +++ b/Assets/Scripts/Combat/ShieldComponent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f362045054d7c1945841c4ccbcb356e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/StatusEffects.meta b/Assets/Scripts/Combat/StatusEffects.meta new file mode 100644 index 0000000..5b96409 --- /dev/null +++ b/Assets/Scripts/Combat/StatusEffects.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37363fb905d771d45b74c104305f07dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/StatusEffects/.gitkeep b/Assets/Scripts/Combat/StatusEffects/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Combat/StatusEffects/BaseGames.Combat.StatusEffects.asmdef b/Assets/Scripts/Combat/StatusEffects/BaseGames.Combat.StatusEffects.asmdef new file mode 100644 index 0000000..a239957 --- /dev/null +++ b/Assets/Scripts/Combat/StatusEffects/BaseGames.Combat.StatusEffects.asmdef @@ -0,0 +1,16 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Combat.StatusEffects", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Combat.StatusEffects", + "references": [ + "BaseGames.Combat" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Combat/StatusEffects/BaseGames.Combat.StatusEffects.asmdef.meta b/Assets/Scripts/Combat/StatusEffects/BaseGames.Combat.StatusEffects.asmdef.meta new file mode 100644 index 0000000..022f1a8 --- /dev/null +++ b/Assets/Scripts/Combat/StatusEffects/BaseGames.Combat.StatusEffects.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dd947c06a464c1b4492d0417d28a8ccb +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/StatusEffects/StatusEffectManager.cs b/Assets/Scripts/Combat/StatusEffects/StatusEffectManager.cs new file mode 100644 index 0000000..b9a614a --- /dev/null +++ b/Assets/Scripts/Combat/StatusEffects/StatusEffectManager.cs @@ -0,0 +1,20 @@ +using UnityEngine; +using BaseGames.Combat; + +namespace BaseGames.Combat.StatusEffects +{ + /// + /// 状态效果管理器(Phase 1 桩)。 + /// 实现 IStatusEffectable 接口,由 HurtBox 通过接口调用,避免程序集循环依赖。 + /// Phase 2 实现完整的效果叠加、持续时间、DoT 伤害计算。 + /// + public class StatusEffectManager : MonoBehaviour, IStatusEffectable + { + // Phase 1:空实现 + public void ApplyStatusEffect(DamageType type) { } + } + + // ── Phase 1 占位效果类型 ────────────────────────────────────────────────── + public class FireEffect { } + public class PoisonEffect { } +} diff --git a/Assets/Scripts/Combat/StatusEffects/StatusEffectManager.cs.meta b/Assets/Scripts/Combat/StatusEffects/StatusEffectManager.cs.meta new file mode 100644 index 0000000..9d6377b --- /dev/null +++ b/Assets/Scripts/Combat/StatusEffects/StatusEffectManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 708938b7c3d75b244abcbd30ed589461 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/StatusEffects/_Placeholder.cs b/Assets/Scripts/Combat/StatusEffects/_Placeholder.cs new file mode 100644 index 0000000..20e1c1c --- /dev/null +++ b/Assets/Scripts/Combat/StatusEffects/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Combat.StatusEffects { } + diff --git a/Assets/Scripts/Combat/StatusEffects/_Placeholder.cs.meta b/Assets/Scripts/Combat/StatusEffects/_Placeholder.cs.meta new file mode 100644 index 0000000..84f8f33 --- /dev/null +++ b/Assets/Scripts/Combat/StatusEffects/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1dfc988231a6ac14a9aa035ba1719ab0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Combat/_Placeholder.cs b/Assets/Scripts/Combat/_Placeholder.cs new file mode 100644 index 0000000..9ca8578 --- /dev/null +++ b/Assets/Scripts/Combat/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Combat { } + diff --git a/Assets/Scripts/Combat/_Placeholder.cs.meta b/Assets/Scripts/Combat/_Placeholder.cs.meta new file mode 100644 index 0000000..341e9ff --- /dev/null +++ b/Assets/Scripts/Combat/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9c4356cd693b604bb0889f9538eb13e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core.meta b/Assets/Scripts/Core.meta new file mode 100644 index 0000000..7275055 --- /dev/null +++ b/Assets/Scripts/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c662316bc2330ed4ab6607d5f3a731d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Assets.meta b/Assets/Scripts/Core/Assets.meta new file mode 100644 index 0000000..4bec176 --- /dev/null +++ b/Assets/Scripts/Core/Assets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f475eab1c9fa38649bf17b8b68d06d68 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Assets/AddressKeyRegistry.cs b/Assets/Scripts/Core/Assets/AddressKeyRegistry.cs new file mode 100644 index 0000000..64414f9 --- /dev/null +++ b/Assets/Scripts/Core/Assets/AddressKeyRegistry.cs @@ -0,0 +1,84 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace BaseGames.Core.Assets +{ + /// + /// 运行时 Addressable Key 注册层(架构 13_AssetPoolModule §9)。 + /// 供 DLC / 扩展包在运行时动态注册额外地址键,不修改编译期常量类 。 + /// + /// 用法: + /// // 注册(DLC 模块 Awake 时) + /// AddressKeyRegistry.TryRegister("DLC_WeaponScythe", "DLC/WPN_Scythe"); + /// + /// // 查询(GlobalObjectPool.SpawnInternal 内部调用) + /// if (AddressKeyRegistry.TryResolve(key, out var addr)) { ... } + /// + public static class AddressKeyRegistry + { + private static readonly Dictionary _registry = new(); + + /// + /// 注册一个运行时 key → Addressable 地址映射。 + /// 若 key 已存在则跳过,返回 false。 + /// + public static bool TryRegister(string key, string address) + { + if (string.IsNullOrEmpty(key) || string.IsNullOrEmpty(address)) + { + Debug.LogWarning($"[AddressKeyRegistry] TryRegister: key 或 address 不能为空。key={key}, address={address}"); + return false; + } + + if (_registry.ContainsKey(key)) + { + Debug.LogWarning($"[AddressKeyRegistry] key 已存在,跳过注册:{key}"); + return false; + } + + _registry[key] = address; + return true; + } + + /// + /// 强制覆盖注册(用于测试 / 热更新覆盖)。 + /// + public static void ForceRegister(string key, string address) + { + _registry[key] = address; + } + + /// + /// 解析 key,返回对应的 Addressable 地址字符串。 + /// 若 key 未注册则返回原 key(兼容直接使用静态常量的调用方)。 + /// + public static string Resolve(string key) + { + return _registry.TryGetValue(key, out var address) ? address : key; + } + + /// + /// 尝试解析 key,成功时 out address 为注册的地址字符串,返回 true。 + /// 若 key 未注册则返回 false,address 为 null。 + /// + public static bool TryResolve(string key, out string address) + { + return _registry.TryGetValue(key, out address); + } + + /// + /// 移除指定 key 的注册(场景卸载/DLC 卸载时调用)。 + /// + public static void Unregister(string key) => _registry.Remove(key); + + /// + /// 清空所有注册(仅用于测试)。 + /// + public static void Clear() => _registry.Clear(); + + /// + /// 返回当前注册的所有 key 数量(调试用)。 + /// + public static int Count => _registry.Count; + } +} diff --git a/Assets/Scripts/Core/Assets/AddressKeyRegistry.cs.meta b/Assets/Scripts/Core/Assets/AddressKeyRegistry.cs.meta new file mode 100644 index 0000000..97caab9 --- /dev/null +++ b/Assets/Scripts/Core/Assets/AddressKeyRegistry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a64caba864b15a499c94f65e356e14e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Assets/AddressKeys.cs b/Assets/Scripts/Core/Assets/AddressKeys.cs new file mode 100644 index 0000000..2a197a0 --- /dev/null +++ b/Assets/Scripts/Core/Assets/AddressKeys.cs @@ -0,0 +1,52 @@ +namespace BaseGames.Core.Assets +{ + /// + /// 所有 Addressable 地址字符串的静态常量类。 + /// 禁止在代码中直接使用字面字符串,统一引用此处的 const。 + /// 与 Assets 的 Addressable 标签分配保持同步(AddressKeyValidator 工具验证)。 + /// + public static class AddressKeys + { + // ── Scenes ────────────────────────────────────────────────────── + public const string ScenePersistent = "Scene_Persistent"; + public const string SceneMainMenu = "Scene_MainMenu"; + + // ── Player ────────────────────────────────────────────────────── + public const string PrefabPlayer = "PLY_Player"; + + // ── Enemies ───────────────────────────────────────────────────── + public const string PrefabEnemyGrunt = "ENM_GruntWarrior"; + public const string PrefabEnemySkullArch = "ENM_SkullArcher"; + + // ── Projectiles ───────────────────────────────────────────────── + public const string PrefabProjArrow = "PROJ_Arrow"; + public const string PrefabProjFireball = "PROJ_Fireball"; + public const string PrefabProjSoulBall = "PROJ_SoulBall"; + + // ── VFX ───────────────────────────────────────────────────────── + public const string PrefabVFXHitSpark = "VFX_HitSpark"; + public const string PrefabVFXBloodSplat = "VFX_BloodSplat"; + public const string PrefabVFXExplosion = "VFX_Explosion"; + + // ── UI ─────────────────────────────────────────────────────────── + public const string PrefabUIFloatingDmgText = "UI_FloatingDamageText"; + + // ── Collectibles ───────────────────────────────────────────────── + public const string PrefabCollectibleGeo = "COL_Geo"; + public const string PrefabCollectibleHPOrb = "COL_HPOrb"; + + // ── Weapons ────────────────────────────────────────────────────── + public const string PrefabWeaponSkyBlade = "WPN_SkyBlade"; + public const string PrefabWeaponEarthClaw = "WPN_EarthClaw"; + public const string PrefabWeaponSoulStaff = "WPN_SoulStaff"; + + // ── Config ScriptableObjects ───────────────────────────────────── + public const string DataFootstepCatalog = "Config/FootstepCatalog"; + + // ── Labels(批量加载用)────────────────────────────────────────── + public const string LabelEnemy = "Enemy"; + public const string LabelPoolable = "Poolable"; + public const string LabelBGM = "BGM"; + public const string LabelCharms = "Charms"; + } +} diff --git a/Assets/Scripts/Core/Assets/AddressKeys.cs.meta b/Assets/Scripts/Core/Assets/AddressKeys.cs.meta new file mode 100644 index 0000000..4b8d4c6 --- /dev/null +++ b/Assets/Scripts/Core/Assets/AddressKeys.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: faaab8ae1b4f5584688d2c294fcffa1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Assets/AssetLoader.cs b/Assets/Scripts/Core/Assets/AssetLoader.cs new file mode 100644 index 0000000..8125494 --- /dev/null +++ b/Assets/Scripts/Core/Assets/AssetLoader.cs @@ -0,0 +1,53 @@ +using System.Collections; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.AsyncOperations; + +namespace BaseGames.Core.Assets +{ + /// + /// Addressables 运行时加载工具(薄封装)。 + /// 场景卸载时配合 批量 Release。 + /// + public static class AssetLoader + { + /// 异步加载资产,返回 handle 供 Release 使用。 + public static async Task<(T asset, AsyncOperationHandle handle)> LoadAsync(string addressKey) + { + var handle = Addressables.LoadAssetAsync(addressKey); + var result = await handle.Task; + return (result, handle); + } + + /// 释放一个已加载的 handle(引用计数 -1)。 + public static void Release(AsyncOperationHandle handle) + { + if (handle.IsValid()) Addressables.Release(handle); + } + + /// 释放一个 GameObject 实例(Addressables.ReleaseInstance)。 + public static bool ReleaseInstance(GameObject go) + => Addressables.ReleaseInstance(go); + } + + /// + /// 场景卸载时批量释放由 Addressables 加载的资产句柄。 + /// 挂在场景的根 GameObject 上;OnDestroy 时自动 Release 注册的所有 handle。 + /// + public class AssetReleaseTracker : MonoBehaviour + { + private readonly List _handles = new(); + + public void Track(AsyncOperationHandle handle) + => _handles.Add(handle); + + private void OnDestroy() + { + foreach (var h in _handles) + if (h.IsValid()) Addressables.Release(h); + _handles.Clear(); + } + } +} diff --git a/Assets/Scripts/Core/Assets/AssetLoader.cs.meta b/Assets/Scripts/Core/Assets/AssetLoader.cs.meta new file mode 100644 index 0000000..c738175 --- /dev/null +++ b/Assets/Scripts/Core/Assets/AssetLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b53704ca12a83b479fc3967704c642b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Assets/AssetReleaseTracker.cs b/Assets/Scripts/Core/Assets/AssetReleaseTracker.cs new file mode 100644 index 0000000..bc2d4b0 --- /dev/null +++ b/Assets/Scripts/Core/Assets/AssetReleaseTracker.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using BaseGames.Core.Events; +using BaseGames.Core.Assets; +using BaseGames.Core.Pool; + +namespace BaseGames.Core +{ + /// + /// 资产释放跟踪器。 + /// 事件驱动:监听 EVT_SceneLoadRequest,在新场景加载前清理旧场景的对象池缓存。 + /// ⚠️ 不使用显式注册 API;GlobalObjectPool.ClearPool 在场景切换时批量清理。 + /// + public class AssetReleaseTracker : MonoBehaviour + { + [Header("Event Channels")] + [SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; + + private string _lastLoadedScene; + + private void OnEnable() + { + if (_onSceneLoadRequest != null) + _onSceneLoadRequest.OnEventRaised += OnSceneLoadRequested; + } + + private void OnDisable() + { + if (_onSceneLoadRequest != null) + _onSceneLoadRequest.OnEventRaised -= OnSceneLoadRequested; + } + + private void OnSceneLoadRequested(SceneLoadRequest req) + { + if (string.IsNullOrEmpty(_lastLoadedScene)) { _lastLoadedScene = req.SceneName; return; } + + // 清除旧场景的敌人对象池缓存(按需扩展) + if (GlobalObjectPool.Instance != null) + { + GlobalObjectPool.Instance.ClearPool(AddressKeys.PrefabEnemyGrunt); + GlobalObjectPool.Instance.ClearPool(AddressKeys.PrefabEnemySkullArch); + } + + _lastLoadedScene = req.SceneName; + } + } +} diff --git a/Assets/Scripts/Core/Assets/AssetReleaseTracker.cs.meta b/Assets/Scripts/Core/Assets/AssetReleaseTracker.cs.meta new file mode 100644 index 0000000..e3ef120 --- /dev/null +++ b/Assets/Scripts/Core/Assets/AssetReleaseTracker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba91049904d9daa43a59032bc1481cd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/BaseGames.Core.asmdef b/Assets/Scripts/Core/BaseGames.Core.asmdef new file mode 100644 index 0000000..8234925 --- /dev/null +++ b/Assets/Scripts/Core/BaseGames.Core.asmdef @@ -0,0 +1,19 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Core", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Core", + "references": [ + "BaseGames.Core.Events", + "BaseGames.Core.Save", + "Unity.Addressables", + "Unity.ResourceManager" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Core/BaseGames.Core.asmdef.meta b/Assets/Scripts/Core/BaseGames.Core.asmdef.meta new file mode 100644 index 0000000..1a28d99 --- /dev/null +++ b/Assets/Scripts/Core/BaseGames.Core.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e41e18c796a92334c8eb801039fc7440 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/BuiltinGameStates.cs b/Assets/Scripts/Core/BuiltinGameStates.cs new file mode 100644 index 0000000..76801ab --- /dev/null +++ b/Assets/Scripts/Core/BuiltinGameStates.cs @@ -0,0 +1,141 @@ +using System.Collections.Generic; +using BaseGames.Core; +using BaseGames.Core.Events; + +namespace BaseGames.Core.States +{ + /// 初始化状态(应用启动时的第一个状态)。 + public class InitializingState : IGameState + { + public GameStateId Id => GameStates.Initializing; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet { GameStates.MainMenu }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } + + /// 主菜单状态。 + public class MainMenuState : IGameState + { + public GameStateId Id => GameStates.MainMenu; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet { GameStates.LoadingScene }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } + + /// 场景加载中状态。 + public class LoadingSceneState : IGameState + { + public GameStateId Id => GameStates.LoadingScene; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet { GameStates.MainMenu, GameStates.Gameplay }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } + + /// 正常游玩状态。 + public class GameplayState : IGameState + { + public GameStateId Id => GameStates.Gameplay; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet + { + GameStates.LoadingScene, + GameStates.BossFight, + GameStates.Paused, + GameStates.Dead, + GameStates.Cutscene, + }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } + + /// Boss 战状态。 + public class BossFightState : IGameState + { + public GameStateId Id => GameStates.BossFight; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet + { + GameStates.LoadingScene, + GameStates.Gameplay, + GameStates.Paused, + GameStates.Dead, + }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } + + /// 暂停状态。 + public class PausedState : IGameState + { + public GameStateId Id => GameStates.Paused; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet + { + GameStates.Gameplay, + GameStates.BossFight, + GameStates.MainMenu, + }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } + + /// 死亡状态。 + public class DeadState : IGameState + { + public GameStateId Id => GameStates.Dead; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet { GameStates.LoadingScene, GameStates.GameOver }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } + + /// 过场动画状态。 + public class CutsceneState : IGameState + { + public GameStateId Id => GameStates.Cutscene; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet { GameStates.Gameplay }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } + + /// Game Over 状态(SteelSoul 清档用)。 + public class GameOverState : IGameState + { + public GameStateId Id => GameStates.GameOver; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet { GameStates.MainMenu }; + + public void OnEnter(GameStateId prev) { } + public void OnExit(GameStateId next) { } + public void Tick(float dt) { } + } +} diff --git a/Assets/Scripts/Core/BuiltinGameStates.cs.meta b/Assets/Scripts/Core/BuiltinGameStates.cs.meta new file mode 100644 index 0000000..0f4262a --- /dev/null +++ b/Assets/Scripts/Core/BuiltinGameStates.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9bcf1a51cdbfa94a8e3d63c25626d34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/DeathRespawnService.cs b/Assets/Scripts/Core/DeathRespawnService.cs new file mode 100644 index 0000000..9237737 --- /dev/null +++ b/Assets/Scripts/Core/DeathRespawnService.cs @@ -0,0 +1,78 @@ +using System.Collections; +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// + /// 死亡/复活流程服务接口。 + /// + public interface IDeathRespawnService + { + /// 玩家死亡时由 GameManager 调用,启动死亡演出流程。 + IEnumerator StartDeathSequenceCoroutine(); + + /// DeathScreen 确认按钮点击后调用,执行复活流程。 + IEnumerator StartRespawnCoroutine(); + + /// SteelSoul 模式:HP 归零后直接清档并返回主菜单。 + IEnumerator StartGameOverCoroutine(); + } + + /// + /// 死亡/复活流程独立服务(Phase 0 骨架,Phase 1 完整实现)。 + /// + public class DeathRespawnService : MonoBehaviour, IDeathRespawnService + { + [Header("Config")] + [SerializeField] private float _deathAnimDuration = 1.2f; + [SerializeField] private float _deathScreenDelay = 0.5f; + [SerializeField] private float _respawnFadeDuration = 0.4f; + + [Header("Event Channels - Raise")] + [SerializeField] private VoidEventChannelSO _onRespawnStarted; + [SerializeField] private VoidEventChannelSO _onRespawnCompleted; + + [Header("Event Channels - Listen")] + [SerializeField] private VoidEventChannelSO _onDeathScreenConfirmed; + + private bool _deathConfirmed; + + private void OnEnable() + { + if (_onDeathScreenConfirmed != null) + _onDeathScreenConfirmed.OnEventRaised += HandleDeathScreenConfirmed; + } + + private void OnDisable() + { + if (_onDeathScreenConfirmed != null) + _onDeathScreenConfirmed.OnEventRaised -= HandleDeathScreenConfirmed; + } + + private void HandleDeathScreenConfirmed() => _deathConfirmed = true; + + public IEnumerator StartDeathSequenceCoroutine() + { + yield return new WaitForSeconds(_deathAnimDuration); + yield return new WaitForSeconds(_deathScreenDelay); + _deathConfirmed = false; + yield return new WaitUntil(() => _deathConfirmed); + } + + public IEnumerator StartRespawnCoroutine() + { + _onRespawnStarted?.Raise(); + yield return new WaitForSeconds(_respawnFadeDuration); + // Phase 1:加载存档场景(TODO) + yield return new WaitForSeconds(_respawnFadeDuration); + _onRespawnCompleted?.Raise(); + } + + public IEnumerator StartGameOverCoroutine() + { + // Phase 1:SteelSoul 清档并返回主菜单(TODO) + yield return null; + } + } +} diff --git a/Assets/Scripts/Core/DeathRespawnService.cs.meta b/Assets/Scripts/Core/DeathRespawnService.cs.meta new file mode 100644 index 0000000..5b0641b --- /dev/null +++ b/Assets/Scripts/Core/DeathRespawnService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 843f5718ab6dbb7418fa7a036a83efc9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events.meta b/Assets/Scripts/Core/Events.meta new file mode 100644 index 0000000..f720cab --- /dev/null +++ b/Assets/Scripts/Core/Events.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3771751cae7bcd04b96f7d9026a962aa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/.gitkeep b/Assets/Scripts/Core/Events/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Core/Events/BaseEventChannelSO.cs b/Assets/Scripts/Core/Events/BaseEventChannelSO.cs new file mode 100644 index 0000000..44f2330 --- /dev/null +++ b/Assets/Scripts/Core/Events/BaseEventChannelSO.cs @@ -0,0 +1,61 @@ +using System; +using UnityEngine; + +namespace BaseGames.Core.Events +{ + /// + /// 泛型 SO 事件频道基类。T 为负载类型。 + /// + public abstract class BaseEventChannelSO : ScriptableObject + { + [Multiline] public string description; + + public event Action OnEventRaised; + + public void Raise(T value) + { +#if UNITY_EDITOR + EventBusMonitor.Record(name, value?.ToString() ?? "null", + OnEventRaised?.GetInvocationList().Length ?? 0); +#endif + OnEventRaised?.Invoke(value); + } + + /// + /// 订阅并返回可 Dispose 的订阅句柄,配合 CompositeDisposable 使用。 + /// + public EventSubscription Subscribe(Action callback) + { + OnEventRaised += callback; + return new EventSubscription(() => OnEventRaised -= callback); + } + } + + /// + /// 无负载事件频道基类。 + /// + public abstract class VoidBaseEventChannelSO : ScriptableObject + { + [Multiline] public string description; + + public event Action OnEventRaised; + + public void Raise() + { +#if UNITY_EDITOR + EventBusMonitor.Record(name, "", + OnEventRaised?.GetInvocationList().Length ?? 0); +#endif + OnEventRaised?.Invoke(); + } + + /// + /// 订阅并返回可 Dispose 的订阅句柄。 + /// + public EventSubscription Subscribe(Action callback) + { + OnEventRaised += callback; + return new EventSubscription(() => OnEventRaised -= callback); + } + } +} diff --git a/Assets/Scripts/Core/Events/BaseEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/BaseEventChannelSO.cs.meta new file mode 100644 index 0000000..844491f --- /dev/null +++ b/Assets/Scripts/Core/Events/BaseEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adcb05b71d0e3f94f8c4446dee4c253b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/BaseGames.Core.Events.asmdef b/Assets/Scripts/Core/Events/BaseGames.Core.Events.asmdef new file mode 100644 index 0000000..7394f03 --- /dev/null +++ b/Assets/Scripts/Core/Events/BaseGames.Core.Events.asmdef @@ -0,0 +1,14 @@ +{ + "name": "BaseGames.Core.Events", + "rootNamespace": "BaseGames.Core.Events", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} diff --git a/Assets/Scripts/Core/Events/BaseGames.Core.Events.asmdef.meta b/Assets/Scripts/Core/Events/BaseGames.Core.Events.asmdef.meta new file mode 100644 index 0000000..703cf54 --- /dev/null +++ b/Assets/Scripts/Core/Events/BaseGames.Core.Events.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bf44e3f184fd4214eb09a80e6e04d7df +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/BossEvents.cs b/Assets/Scripts/Core/Events/BossEvents.cs new file mode 100644 index 0000000..589e79a --- /dev/null +++ b/Assets/Scripts/Core/Events/BossEvents.cs @@ -0,0 +1,22 @@ +namespace BaseGames.Core.Events +{ + /// + /// Boss 技能事件负载。 + /// + [System.Serializable] + public struct BossSkillEvent + { + public string BossId; + public string SkillId; + } + + /// + /// Boss 阶段切换事件负载。 + /// + [System.Serializable] + public struct BossPhaseEvent + { + public string BossId; + public int Phase; + } +} diff --git a/Assets/Scripts/Core/Events/BossEvents.cs.meta b/Assets/Scripts/Core/Events/BossEvents.cs.meta new file mode 100644 index 0000000..e176664 --- /dev/null +++ b/Assets/Scripts/Core/Events/BossEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac3dc174ca0e12544a31550b5f61e70b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/BossPhaseEventChannelSO.cs b/Assets/Scripts/Core/Events/BossPhaseEventChannelSO.cs new file mode 100644 index 0000000..7c86f58 --- /dev/null +++ b/Assets/Scripts/Core/Events/BossPhaseEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/BossPhase")] + public class BossPhaseEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/BossPhaseEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/BossPhaseEventChannelSO.cs.meta new file mode 100644 index 0000000..6a12caa --- /dev/null +++ b/Assets/Scripts/Core/Events/BossPhaseEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 647b6596e515ba64483b7ff337c76699 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/BossSkillEventChannelSO.cs b/Assets/Scripts/Core/Events/BossSkillEventChannelSO.cs new file mode 100644 index 0000000..d0579a8 --- /dev/null +++ b/Assets/Scripts/Core/Events/BossSkillEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/BossSkill")] + public class BossSkillEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/BossSkillEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/BossSkillEventChannelSO.cs.meta new file mode 100644 index 0000000..62966fd --- /dev/null +++ b/Assets/Scripts/Core/Events/BossSkillEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8230eab2acba8c24499b2d20df81adb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/ColorblindMode.cs b/Assets/Scripts/Core/Events/ColorblindMode.cs new file mode 100644 index 0000000..2cc7e6c --- /dev/null +++ b/Assets/Scripts/Core/Events/ColorblindMode.cs @@ -0,0 +1,14 @@ +namespace BaseGames.Core.Events +{ + /// + /// 色觉辅助模式枚举(16_SupportingModules §AccessibilityManager)。 + /// + public enum ColorblindMode + { + None = 0, + Protanopia = 1, + Deuteranopia = 2, + Tritanopia = 3, + Achromatopsia = 4 + } +} diff --git a/Assets/Scripts/Core/Events/ColorblindMode.cs.meta b/Assets/Scripts/Core/Events/ColorblindMode.cs.meta new file mode 100644 index 0000000..c820574 --- /dev/null +++ b/Assets/Scripts/Core/Events/ColorblindMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7f46e87b21f6a045bc324853efecf9c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/ColorblindModeEventChannelSO.cs b/Assets/Scripts/Core/Events/ColorblindModeEventChannelSO.cs new file mode 100644 index 0000000..bd7987a --- /dev/null +++ b/Assets/Scripts/Core/Events/ColorblindModeEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/ColorblindMode")] + public class ColorblindModeEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/ColorblindModeEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/ColorblindModeEventChannelSO.cs.meta new file mode 100644 index 0000000..df35f48 --- /dev/null +++ b/Assets/Scripts/Core/Events/ColorblindModeEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9227f70cba3e7949a837c0622653f33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/DamageInfo.cs b/Assets/Scripts/Core/Events/DamageInfo.cs new file mode 100644 index 0000000..2699bc8 --- /dev/null +++ b/Assets/Scripts/Core/Events/DamageInfo.cs @@ -0,0 +1,9 @@ +// 此文件已废弃。DamageInfo / DamageInfoEventChannelSO 已迁移至 +// Assets/Scripts/Combat/DamageInfo.cs (namespace BaseGames.Combat) +// 程序集 BaseGames.Combat.asmdef + +namespace BaseGames.Core.Events +{ + // 保留空命名空间,避免 .meta 文件冲突。 + // ReSharper disable once EmptyNamespace +} diff --git a/Assets/Scripts/Core/Events/DamageInfo.cs.meta b/Assets/Scripts/Core/Events/DamageInfo.cs.meta new file mode 100644 index 0000000..9ed737c --- /dev/null +++ b/Assets/Scripts/Core/Events/DamageInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94ca97e41a3560141a991928af7c1beb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/DifficultyChangedEventChannel.cs b/Assets/Scripts/Core/Events/DifficultyChangedEventChannel.cs new file mode 100644 index 0000000..8a51773 --- /dev/null +++ b/Assets/Scripts/Core/Events/DifficultyChangedEventChannel.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + /// + /// 难度变更事件频道。Phase 2 难度系统使用。 + /// 发布:DifficultyScalerSO / SettingsManager + /// 订阅:所有需要感知当前难度的系统 + /// + [CreateAssetMenu(menuName = "Events/DifficultyChanged")] + public class DifficultyChangedEventChannel : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/DifficultyChangedEventChannel.cs.meta b/Assets/Scripts/Core/Events/DifficultyChangedEventChannel.cs.meta new file mode 100644 index 0000000..9556ba5 --- /dev/null +++ b/Assets/Scripts/Core/Events/DifficultyChangedEventChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b3f48b426d66154797d7c9af9c6b02f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/DifficultyLevel.cs b/Assets/Scripts/Core/Events/DifficultyLevel.cs new file mode 100644 index 0000000..78699c9 --- /dev/null +++ b/Assets/Scripts/Core/Events/DifficultyLevel.cs @@ -0,0 +1,13 @@ +namespace BaseGames.Core.Events +{ + /// + /// 难度等级枚举。 + /// + public enum DifficultyLevel + { + Easy = 0, + Normal = 1, + Hard = 2, + SteelSoul = 3 // 一命模式 + } +} diff --git a/Assets/Scripts/Core/Events/DifficultyLevel.cs.meta b/Assets/Scripts/Core/Events/DifficultyLevel.cs.meta new file mode 100644 index 0000000..47fec1b --- /dev/null +++ b/Assets/Scripts/Core/Events/DifficultyLevel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa2ae8b438a843b458548868d0cfef3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/EventBusMonitor.cs b/Assets/Scripts/Core/Events/EventBusMonitor.cs new file mode 100644 index 0000000..49e8f52 --- /dev/null +++ b/Assets/Scripts/Core/Events/EventBusMonitor.cs @@ -0,0 +1,39 @@ +namespace BaseGames.Core.Events +{ + /// + /// 运行时事件总线监控(仅 Editor 下记录调用信息)。 + /// + public static class EventBusMonitor + { +#if UNITY_EDITOR + public struct EventRecord + { + public string ChannelName; + public string Payload; + public int ListenerCount; + public System.DateTime Timestamp; + } + + private static readonly System.Collections.Generic.Queue _records + = new System.Collections.Generic.Queue(256); + + public static System.Collections.Generic.IEnumerable Records => _records; + + public static void Record(string channelName, string payload, int listenerCount) + { + if (_records.Count >= 256) _records.Dequeue(); + _records.Enqueue(new EventRecord + { + ChannelName = channelName, + Payload = payload, + ListenerCount = listenerCount, + Timestamp = System.DateTime.Now + }); + } + + public static void Clear() => _records.Clear(); +#else + public static void Record(string channelName, string payload, int listenerCount) { } +#endif + } +} diff --git a/Assets/Scripts/Core/Events/EventBusMonitor.cs.meta b/Assets/Scripts/Core/Events/EventBusMonitor.cs.meta new file mode 100644 index 0000000..2ab072e --- /dev/null +++ b/Assets/Scripts/Core/Events/EventBusMonitor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d580e5431c172b34d8fc0252ff72774a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/EventChannelRegistry.cs b/Assets/Scripts/Core/Events/EventChannelRegistry.cs new file mode 100644 index 0000000..c9035e1 --- /dev/null +++ b/Assets/Scripts/Core/Events/EventChannelRegistry.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace BaseGames.Core.Events +{ + /// + /// 运行时事件频道注册表。 + /// 在 Persistent 场景 Awake 时由 EventChannelRegistrar 注册所有频道 SO, + /// 供不能持有 [SerializeField] 的动态对象(CharmEffect SO 等)按类型名查找频道。 + /// + public class EventChannelRegistry : MonoBehaviour, IEventChannelRegistry + { + public static EventChannelRegistry Instance { get; private set; } + + private readonly Dictionary _channels = new(); + + private void Awake() + { + if (Instance != null && Instance != this) + { + Destroy(gameObject); + return; + } + Instance = this; + DontDestroyOnLoad(gameObject); + } + + /// 由 EventChannelRegistrar 在场景初始化时批量注册频道 SO。 + public void Register(string key, ScriptableObject channel) + => _channels[key] = channel; + + /// + /// 按 key 查找频道。key = SO 资产文件名(不含扩展名),如 "EVT_HitConfirmed"。 + /// + public T Get(string key) where T : ScriptableObject + { + if (_channels.TryGetValue(key, out var ch) && ch is T typed) return typed; + Debug.LogError($"[EventChannelRegistry] Key '{key}' not found or wrong type ({typeof(T).Name})."); + return null; + } + + /// 尝试获取频道,不报错。 + public bool TryGet(string key, out T channel) where T : ScriptableObject + { + if (_channels.TryGetValue(key, out var ch) && ch is T typed) + { + channel = typed; + return true; + } + channel = null; + return false; + } + } +} diff --git a/Assets/Scripts/Core/Events/EventChannelRegistry.cs.meta b/Assets/Scripts/Core/Events/EventChannelRegistry.cs.meta new file mode 100644 index 0000000..41e5388 --- /dev/null +++ b/Assets/Scripts/Core/Events/EventChannelRegistry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 661043851605d4849bef40ea15c556b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/EventSubscription.cs b/Assets/Scripts/Core/Events/EventSubscription.cs new file mode 100644 index 0000000..6606373 --- /dev/null +++ b/Assets/Scripts/Core/Events/EventSubscription.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace BaseGames.Core.Events +{ + /// + /// 单条订阅的 Disposable 句柄。Dispose() 自动取消注册。 + /// + public readonly struct EventSubscription : IDisposable + { + private readonly Action _unsubscribe; + + public EventSubscription(Action unsubscribe) + => _unsubscribe = unsubscribe; + + public void Dispose() => _unsubscribe?.Invoke(); + } + + /// + /// 批量管理多条订阅,统一在 Dispose / Clear 时取消所有注册。 + /// 用法:OnEnable 调用 Subscribe,OnDisable 调用 Clear。 + /// + public sealed class CompositeDisposable : IDisposable + { + private readonly List _items = new(); + + public void Add(IDisposable item) => _items.Add(item); + + public void Clear() + { + foreach (var item in _items) item.Dispose(); + _items.Clear(); + } + + public void Dispose() => Clear(); + } + + /// + /// 扩展方法(架构 02 §8)。 + /// + public static class EventSubscriptionExtensions + { + /// + /// 将订阅句柄添加到集合中,统一生命周期管理。 + /// 用法:channel.Subscribe(Handler).AddTo(_subscriptions); + /// + public static EventSubscription AddTo(this EventSubscription subscription, + ICollection collection) + { + collection.Add(subscription); + return subscription; + } + + /// + /// 将订阅句柄添加到 中。 + /// + public static EventSubscription AddTo(this EventSubscription subscription, + CompositeDisposable compositeDisposable) + { + compositeDisposable.Add(subscription); + return subscription; + } + } +} diff --git a/Assets/Scripts/Core/Events/EventSubscription.cs.meta b/Assets/Scripts/Core/Events/EventSubscription.cs.meta new file mode 100644 index 0000000..b3ddea7 --- /dev/null +++ b/Assets/Scripts/Core/Events/EventSubscription.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15f50c6ab5d503b47bbcc8f73b32d3e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/FloatEventChannelSO.cs b/Assets/Scripts/Core/Events/FloatEventChannelSO.cs new file mode 100644 index 0000000..d3b3081 --- /dev/null +++ b/Assets/Scripts/Core/Events/FloatEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/Float")] + public class FloatEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/FloatEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/FloatEventChannelSO.cs.meta new file mode 100644 index 0000000..5671266 --- /dev/null +++ b/Assets/Scripts/Core/Events/FloatEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62f2d5b0575789048b6badd7d1608db3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/GameEventChannels.cs b/Assets/Scripts/Core/Events/GameEventChannels.cs new file mode 100644 index 0000000..73cb6fc --- /dev/null +++ b/Assets/Scripts/Core/Events/GameEventChannels.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/GameState")] + public class GameStateEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/GameEventChannels.cs.meta b/Assets/Scripts/Core/Events/GameEventChannels.cs.meta new file mode 100644 index 0000000..9acbb42 --- /dev/null +++ b/Assets/Scripts/Core/Events/GameEventChannels.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c060c20fe37837c408cc5a628f6d8863 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/GameStateId.cs b/Assets/Scripts/Core/Events/GameStateId.cs new file mode 100644 index 0000000..1c191b3 --- /dev/null +++ b/Assets/Scripts/Core/Events/GameStateId.cs @@ -0,0 +1,21 @@ +namespace BaseGames.Core.Events +{ + /// + /// 游戏状态 ID(值类型,替代旧版 GameState 枚举)。 + /// 具体实例由 GameStates 静态工厂创建。 + /// + public readonly struct GameStateId : System.IEquatable + { + public readonly string Id; + + public GameStateId(string id) => Id = id; + + public bool Equals(GameStateId other) => Id == other.Id; + public override bool Equals(object obj) => obj is GameStateId g && Equals(g); + public override int GetHashCode() => Id?.GetHashCode() ?? 0; + public override string ToString() => Id ?? ""; + + public static bool operator ==(GameStateId a, GameStateId b) => a.Equals(b); + public static bool operator !=(GameStateId a, GameStateId b) => !a.Equals(b); + } +} diff --git a/Assets/Scripts/Core/Events/GameStateId.cs.meta b/Assets/Scripts/Core/Events/GameStateId.cs.meta new file mode 100644 index 0000000..e54db45 --- /dev/null +++ b/Assets/Scripts/Core/Events/GameStateId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af0ccb15630f6ff419a4c526e96459f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/HitInfo.cs b/Assets/Scripts/Core/Events/HitInfo.cs new file mode 100644 index 0000000..9c85edb --- /dev/null +++ b/Assets/Scripts/Core/Events/HitInfo.cs @@ -0,0 +1,9 @@ +// 此文件已废弃。HitInfo / HitConfirmedEventChannelSO 已迁移至 +// Assets/Scripts/Combat/HitInfo.cs (namespace BaseGames.Combat) +// 程序集 BaseGames.Combat.asmdef + +namespace BaseGames.Core.Events +{ + // 保留空命名空间,避免 .meta 文件冲突。 + // ReSharper disable once EmptyNamespace +} diff --git a/Assets/Scripts/Core/Events/HitInfo.cs.meta b/Assets/Scripts/Core/Events/HitInfo.cs.meta new file mode 100644 index 0000000..99910e7 --- /dev/null +++ b/Assets/Scripts/Core/Events/HitInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a04b32343a49fe4c9a273b4d0d51b60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/IEventChannelRegistry.cs b/Assets/Scripts/Core/Events/IEventChannelRegistry.cs new file mode 100644 index 0000000..82d7e10 --- /dev/null +++ b/Assets/Scripts/Core/Events/IEventChannelRegistry.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + /// + /// SO 事件频道注册表接口。 + /// 允许 Core 层通过接口访问动态频道查找,而无需直接依赖 EventChannelRegistry 实现。 + /// + public interface IEventChannelRegistry + { + /// 注册一个事件频道 SO。key 通常为 SO 资产名(如 "EVT_HitConfirmed")。 + void Register(string key, ScriptableObject channel); + + /// + /// 按 key 查找事件频道。未找到或类型不匹配时返回 null 并输出错误日志。 + /// + T Get(string key) where T : ScriptableObject; + } +} diff --git a/Assets/Scripts/Core/Events/IEventChannelRegistry.cs.meta b/Assets/Scripts/Core/Events/IEventChannelRegistry.cs.meta new file mode 100644 index 0000000..a3f1ab2 --- /dev/null +++ b/Assets/Scripts/Core/Events/IEventChannelRegistry.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7c6211f04a78764c978bbdb3c5fc708 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/IntEventChannelSO.cs b/Assets/Scripts/Core/Events/IntEventChannelSO.cs new file mode 100644 index 0000000..2cd5294 --- /dev/null +++ b/Assets/Scripts/Core/Events/IntEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/Int")] + public class IntEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/IntEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/IntEventChannelSO.cs.meta new file mode 100644 index 0000000..2511e79 --- /dev/null +++ b/Assets/Scripts/Core/Events/IntEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce6e33f4353535944a0d2573df0a08d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/LiquidEvent.cs b/Assets/Scripts/Core/Events/LiquidEvent.cs new file mode 100644 index 0000000..f044666 --- /dev/null +++ b/Assets/Scripts/Core/Events/LiquidEvent.cs @@ -0,0 +1,29 @@ +namespace BaseGames.Core.Events +{ + /// + /// 液体区域事件负载。用于玩家进入/离开液体区域时传递区域信息。 + /// + public readonly struct LiquidEvent + { + /// 液体区域标识符(对应 LiquidZone SO 的 zoneId)。 + public readonly string ZoneId; + /// 液体类型(如 "Water" / "Acid" / "Lava")。 + public readonly string LiquidType; + + public LiquidEvent(string zoneId, string liquidType) + { + ZoneId = zoneId; + LiquidType = liquidType; + } + + public override string ToString() => $"LiquidEvent(Zone={ZoneId}, Type={LiquidType})"; + } + + /// + /// 液体进出事件频道(EVT_LiquidEntered / EVT_LiquidExited)。 + /// 发布:LiquidZone(OnTriggerEnter2D / OnTriggerExit2D) + /// 订阅:PlayerController(切换游泳状态)、DrownSystem、AudioManager + /// + [UnityEngine.CreateAssetMenu(menuName = "Events/LiquidEvent")] + public class LiquidEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/LiquidEvent.cs.meta b/Assets/Scripts/Core/Events/LiquidEvent.cs.meta new file mode 100644 index 0000000..1b1ccde --- /dev/null +++ b/Assets/Scripts/Core/Events/LiquidEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cf4419a1f1358d4583f21618396ff9d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/PrimitiveEventChannels.cs b/Assets/Scripts/Core/Events/PrimitiveEventChannels.cs new file mode 100644 index 0000000..8cfa35e --- /dev/null +++ b/Assets/Scripts/Core/Events/PrimitiveEventChannels.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/Bool")] + public class BoolEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/PrimitiveEventChannels.cs.meta b/Assets/Scripts/Core/Events/PrimitiveEventChannels.cs.meta new file mode 100644 index 0000000..c1a03ca --- /dev/null +++ b/Assets/Scripts/Core/Events/PrimitiveEventChannels.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3e424c1787e5be4fa918201b1830192 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/QuestEvents.cs b/Assets/Scripts/Core/Events/QuestEvents.cs new file mode 100644 index 0000000..06776f2 --- /dev/null +++ b/Assets/Scripts/Core/Events/QuestEvents.cs @@ -0,0 +1,36 @@ +namespace BaseGames.Core.Events +{ + /// + /// 任务状态枚举(22_QuestChallengeModule §QuestSO)。 + /// + public enum QuestState + { + Unavailable = 0, + Available = 1, + Active = 2, + Completed = 3, + Failed = 4 + } + + /// + /// 任务状态变更事件负载。 + /// + [System.Serializable] + public struct QuestStateChangedEvent + { + public string QuestId; + public QuestState State; + } + + /// + /// 任务目标进度事件负载。 + /// + [System.Serializable] + public struct QuestObjectiveEvent + { + public string QuestId; + public string ObjectiveId; + public int Progress; + public int Required; + } +} diff --git a/Assets/Scripts/Core/Events/QuestEvents.cs.meta b/Assets/Scripts/Core/Events/QuestEvents.cs.meta new file mode 100644 index 0000000..ab5e213 --- /dev/null +++ b/Assets/Scripts/Core/Events/QuestEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4badb3a03cabf941b030e5c0c45a442 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/QuestObjectiveEventChannelSO.cs b/Assets/Scripts/Core/Events/QuestObjectiveEventChannelSO.cs new file mode 100644 index 0000000..b94faa7 --- /dev/null +++ b/Assets/Scripts/Core/Events/QuestObjectiveEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/QuestObjective")] + public class QuestObjectiveEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/QuestObjectiveEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/QuestObjectiveEventChannelSO.cs.meta new file mode 100644 index 0000000..12aeb9a --- /dev/null +++ b/Assets/Scripts/Core/Events/QuestObjectiveEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a46bd0c0af9fcd4dae69a00c6565be5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/QuestStateChangedEventChannel.cs b/Assets/Scripts/Core/Events/QuestStateChangedEventChannel.cs new file mode 100644 index 0000000..b1cf5ed --- /dev/null +++ b/Assets/Scripts/Core/Events/QuestStateChangedEventChannel.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/QuestStateChanged")] + public class QuestStateChangedEventChannel : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/QuestStateChangedEventChannel.cs.meta b/Assets/Scripts/Core/Events/QuestStateChangedEventChannel.cs.meta new file mode 100644 index 0000000..f977a96 --- /dev/null +++ b/Assets/Scripts/Core/Events/QuestStateChangedEventChannel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9eeac19c9884b3144b390577d1c0c99f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/SceneLoadRequest.cs b/Assets/Scripts/Core/Events/SceneLoadRequest.cs new file mode 100644 index 0000000..cfb8a9f --- /dev/null +++ b/Assets/Scripts/Core/Events/SceneLoadRequest.cs @@ -0,0 +1,20 @@ +namespace BaseGames.Core.Events +{ + /// + /// 场景加载请求。 + /// + [System.Serializable] + public struct SceneLoadRequest + { + /// 目标场景名称(Addressable Key) + public string SceneName; + /// 进入点 ID(供 PlayerController 决定出生位置) + public string EntryId; + /// 玩家出生点 Transition ID(具体过渡门 ID,可为 null) + public string EntryTransitionId; + /// 是否显示加载画面 + public bool ShowLoadingScreen; + /// 死亡复活时为 true,不执行正常过渡动画 + public bool IsRespawn; + } +} diff --git a/Assets/Scripts/Core/Events/SceneLoadRequest.cs.meta b/Assets/Scripts/Core/Events/SceneLoadRequest.cs.meta new file mode 100644 index 0000000..12d43fb --- /dev/null +++ b/Assets/Scripts/Core/Events/SceneLoadRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05c1eca4b1ee3d24e80a4f42e4a19276 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/SceneLoadRequestEventChannelSO.cs b/Assets/Scripts/Core/Events/SceneLoadRequestEventChannelSO.cs new file mode 100644 index 0000000..090ad5c --- /dev/null +++ b/Assets/Scripts/Core/Events/SceneLoadRequestEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/SceneLoadRequest")] + public class SceneLoadRequestEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/SceneLoadRequestEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/SceneLoadRequestEventChannelSO.cs.meta new file mode 100644 index 0000000..6640738 --- /dev/null +++ b/Assets/Scripts/Core/Events/SceneLoadRequestEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b5bc8e9a164cd54ea37027bc06c37ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/ShopPurchaseEvent.cs b/Assets/Scripts/Core/Events/ShopPurchaseEvent.cs new file mode 100644 index 0000000..1006ca0 --- /dev/null +++ b/Assets/Scripts/Core/Events/ShopPurchaseEvent.cs @@ -0,0 +1,14 @@ +namespace BaseGames.Core.Events +{ + /// + /// 商店购买事件负载(架构 15_MapShopModule §2.3)。 + /// + [System.Serializable] + public struct ShopPurchaseEvent + { + /// 购买的商品 ID + public string ItemId; + /// 支付价格(Geo) + public int Price; + } +} diff --git a/Assets/Scripts/Core/Events/ShopPurchaseEvent.cs.meta b/Assets/Scripts/Core/Events/ShopPurchaseEvent.cs.meta new file mode 100644 index 0000000..344e2d6 --- /dev/null +++ b/Assets/Scripts/Core/Events/ShopPurchaseEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fa35acf32b4f9047af74c1514117951 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/ShopPurchaseEventChannelSO.cs b/Assets/Scripts/Core/Events/ShopPurchaseEventChannelSO.cs new file mode 100644 index 0000000..ea4506d --- /dev/null +++ b/Assets/Scripts/Core/Events/ShopPurchaseEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/ShopPurchase")] + public class ShopPurchaseEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/ShopPurchaseEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/ShopPurchaseEventChannelSO.cs.meta new file mode 100644 index 0000000..3b4df57 --- /dev/null +++ b/Assets/Scripts/Core/Events/ShopPurchaseEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3d88263c925f8347bf1e19b7fa71036 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/StatusEffectEventChannelSO.cs b/Assets/Scripts/Core/Events/StatusEffectEventChannelSO.cs new file mode 100644 index 0000000..1545588 --- /dev/null +++ b/Assets/Scripts/Core/Events/StatusEffectEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/StatusEffect")] + public class StatusEffectEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/StatusEffectEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/StatusEffectEventChannelSO.cs.meta new file mode 100644 index 0000000..38b9b7a --- /dev/null +++ b/Assets/Scripts/Core/Events/StatusEffectEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 933f8f3ce17ee54409502057bd1a8138 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/StatusEffectType.cs b/Assets/Scripts/Core/Events/StatusEffectType.cs new file mode 100644 index 0000000..04c6951 --- /dev/null +++ b/Assets/Scripts/Core/Events/StatusEffectType.cs @@ -0,0 +1,17 @@ +namespace BaseGames.Core.Events +{ + /// + /// 状态效果类型枚举(06_CombatModule §11)。 + /// + public enum StatusEffectType + { + None = 0, + Poison = 1, + Burn = 2, + Freeze = 3, + Stun = 4, + Stagger = 5, + Bleed = 6, + Wet = 7 // 液体相关(用于液体+火=蒸汽等组合效果) + } +} diff --git a/Assets/Scripts/Core/Events/StatusEffectType.cs.meta b/Assets/Scripts/Core/Events/StatusEffectType.cs.meta new file mode 100644 index 0000000..77e338a --- /dev/null +++ b/Assets/Scripts/Core/Events/StatusEffectType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c5ad21970f85f04494b553fc483546a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/StringEventChannelSO.cs b/Assets/Scripts/Core/Events/StringEventChannelSO.cs new file mode 100644 index 0000000..a7faeb4 --- /dev/null +++ b/Assets/Scripts/Core/Events/StringEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/String")] + public class StringEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/StringEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/StringEventChannelSO.cs.meta new file mode 100644 index 0000000..dc2a699 --- /dev/null +++ b/Assets/Scripts/Core/Events/StringEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23dad55c2f7bcc54a92ed61cc6f27c5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/ToolEvents.cs b/Assets/Scripts/Core/Events/ToolEvents.cs new file mode 100644 index 0000000..650dca7 --- /dev/null +++ b/Assets/Scripts/Core/Events/ToolEvents.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + /// + /// 工具使用事件负载(架构 09_ProgressionModule §7.5)。 + /// Tool 用地址键字符串标识,避免 Core.Events 依赖高层程序集。 + /// + [System.Serializable] + public struct ToolUsedPayload + { + /// 工具槽索引(0 = 主槽,1 = 副槽)。 + public int SlotIndex; + /// 工具的 Addressable 地址键(对应 AddressKeys 常量)。 + public string ToolId; + } + +} diff --git a/Assets/Scripts/Core/Events/ToolEvents.cs.meta b/Assets/Scripts/Core/Events/ToolEvents.cs.meta new file mode 100644 index 0000000..3c08244 --- /dev/null +++ b/Assets/Scripts/Core/Events/ToolEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a5d53ae78d3ec74c9ec1981117953e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/ToolUsedEventChannelSO.cs b/Assets/Scripts/Core/Events/ToolUsedEventChannelSO.cs new file mode 100644 index 0000000..e2142b9 --- /dev/null +++ b/Assets/Scripts/Core/Events/ToolUsedEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/Progression/ToolUsed")] + public class ToolUsedEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/ToolUsedEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/ToolUsedEventChannelSO.cs.meta new file mode 100644 index 0000000..5208309 --- /dev/null +++ b/Assets/Scripts/Core/Events/ToolUsedEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ab7a70182c725f4fad23afda850433e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/TransformEventChannelSO.cs b/Assets/Scripts/Core/Events/TransformEventChannelSO.cs new file mode 100644 index 0000000..7e5765d --- /dev/null +++ b/Assets/Scripts/Core/Events/TransformEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/Transform")] + public class TransformEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/TransformEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/TransformEventChannelSO.cs.meta new file mode 100644 index 0000000..8bdc2c3 --- /dev/null +++ b/Assets/Scripts/Core/Events/TransformEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19580b3794783e647be1e1c0771814d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/Vector2EventChannelSO.cs b/Assets/Scripts/Core/Events/Vector2EventChannelSO.cs new file mode 100644 index 0000000..4a48f4f --- /dev/null +++ b/Assets/Scripts/Core/Events/Vector2EventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/Vector2")] + public class Vector2EventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/Vector2EventChannelSO.cs.meta b/Assets/Scripts/Core/Events/Vector2EventChannelSO.cs.meta new file mode 100644 index 0000000..e476f53 --- /dev/null +++ b/Assets/Scripts/Core/Events/Vector2EventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d28df1b130e12348a582259a89fa4e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/VoidEventChannelSO.cs b/Assets/Scripts/Core/Events/VoidEventChannelSO.cs new file mode 100644 index 0000000..85a0867 --- /dev/null +++ b/Assets/Scripts/Core/Events/VoidEventChannelSO.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + [CreateAssetMenu(menuName = "Events/Void")] + public class VoidEventChannelSO : VoidBaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/VoidEventChannelSO.cs.meta b/Assets/Scripts/Core/Events/VoidEventChannelSO.cs.meta new file mode 100644 index 0000000..5e43e8b --- /dev/null +++ b/Assets/Scripts/Core/Events/VoidEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07c5881d0d5ca3c42949a79f40939c3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Events/WorldMarkerEvent.cs b/Assets/Scripts/Core/Events/WorldMarkerEvent.cs new file mode 100644 index 0000000..6a3e010 --- /dev/null +++ b/Assets/Scripts/Core/Events/WorldMarkerEvent.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace BaseGames.Core.Events +{ + /// + /// 世界导航标记事件负载。用于激活/失活地图标记点。 + /// + public readonly struct WorldMarkerEvent + { + /// 标记点唯一标识符。 + public readonly string MarkerId; + /// 标记点世界坐标。 + public readonly Vector3 Position; + + public WorldMarkerEvent(string markerId, Vector3 position) + { + MarkerId = markerId; + Position = position; + } + + public override string ToString() => $"WorldMarkerEvent(Id={MarkerId}, Pos={Position})"; + } + + /// + /// 导航标记激活/失活事件频道(EVT_WorldMarkerActivated / EVT_WorldMarkerDeactivated)。 + /// 发布:WorldMarker(OnTriggerEnter2D)、EventChainNode + /// 订阅:MapController(更新迷雾地图标记) + /// + [CreateAssetMenu(menuName = "Events/WorldMarker")] + public class WorldMarkerEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Core/Events/WorldMarkerEvent.cs.meta b/Assets/Scripts/Core/Events/WorldMarkerEvent.cs.meta new file mode 100644 index 0000000..a7aed20 --- /dev/null +++ b/Assets/Scripts/Core/Events/WorldMarkerEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3359e2b097190e49a4203dd215225f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/GameManager.cs b/Assets/Scripts/Core/GameManager.cs new file mode 100644 index 0000000..d65cf76 --- /dev/null +++ b/Assets/Scripts/Core/GameManager.cs @@ -0,0 +1,144 @@ +using System.Collections; +using UnityEngine; +using BaseGames.Core.Events; +using BaseGames.Core.States; + +namespace BaseGames.Core +{ + /// + /// 全局游戏管理器。 + /// 生命周期:Persistent → 第一个执行(DefaultExecutionOrder(-1000))。 + /// 持有 并协调所有顶层服务。 + /// + [DefaultExecutionOrder(-1000)] + public class GameManager : MonoBehaviour + { + // ── 单例 ────────────────────────────────────────────────────────── + public static GameManager Instance { get; private set; } + + // ── Inspector 引用 ──────────────────────────────────────────────── + [Header("Managers")] + [SerializeField] private SettingsManager _settingsManager; + [SerializeField] private DeathRespawnService _deathRespawnService; + [SerializeField] private SceneService _sceneService; + + [Header("Event Channels - Listen")] + [SerializeField] private VoidEventChannelSO _onPlayerDied; + [SerializeField] private VoidEventChannelSO _onPauseRequested; + [SerializeField] private VoidEventChannelSO _onResumeRequested; + [SerializeField] private StringEventChannelSO _onBossFightStarted; + [SerializeField] private BoolEventChannelSO _onBossFightEnded; + [SerializeField] private VoidEventChannelSO _onDeathScreenConfirmed; + + [Header("Event Channels - Raise")] + [SerializeField] private BaseEventChannelSO _onGameStateChanged; + [SerializeField] private VoidEventChannelSO _onPlayerRespawned; + + // ── 状态机 ──────────────────────────────────────────────────────── + private readonly GameStateMachine _fsm = new GameStateMachine(); + public GameStateId CurrentState => _fsm.CurrentStateId; + + // ────────────────────────────────────────────────────────────────── + private void Awake() + { + if (Instance != null && Instance != this) { Destroy(gameObject); return; } + Instance = this; + DontDestroyOnLoad(gameObject); + + RegisterServices(); + RegisterStates(); + _settingsManager?.Initialize(); + + _fsm.TransitionTo(GameStates.Initializing, out _); + } + + private void OnEnable() + { + if (_onPlayerDied) _onPlayerDied.OnEventRaised += HandlePlayerDied; + if (_onPauseRequested) _onPauseRequested.OnEventRaised += HandlePauseRequested; + if (_onResumeRequested) _onResumeRequested.OnEventRaised += HandleResumeRequested; + if (_onBossFightStarted) _onBossFightStarted.OnEventRaised += HandleBossFightStarted; + if (_onBossFightEnded) _onBossFightEnded.OnEventRaised += HandleBossFightEnded; + if (_onDeathScreenConfirmed) _onDeathScreenConfirmed.OnEventRaised += HandleDeathScreenConfirmed; + } + + private void OnDisable() + { + if (_onPlayerDied) _onPlayerDied.OnEventRaised -= HandlePlayerDied; + if (_onPauseRequested) _onPauseRequested.OnEventRaised -= HandlePauseRequested; + if (_onResumeRequested) _onResumeRequested.OnEventRaised -= HandleResumeRequested; + if (_onBossFightStarted) _onBossFightStarted.OnEventRaised -= HandleBossFightStarted; + if (_onBossFightEnded) _onBossFightEnded.OnEventRaised -= HandleBossFightEnded; + if (_onDeathScreenConfirmed) _onDeathScreenConfirmed.OnEventRaised -= HandleDeathScreenConfirmed; + } + + private void Update() => _fsm.Tick(Time.deltaTime); + + // ── 初始化 ──────────────────────────────────────────────────────── + private void RegisterServices() + { + if (_deathRespawnService) + ServiceLocator.Register(_deathRespawnService); + if (_sceneService) + ServiceLocator.Register(_sceneService); + } + + private void RegisterStates() + { + _fsm.Register(new InitializingState()); + _fsm.Register(new MainMenuState()); + _fsm.Register(new LoadingSceneState()); + _fsm.Register(new GameplayState()); + _fsm.Register(new BossFightState()); + _fsm.Register(new PausedState()); + _fsm.Register(new DeadState()); + _fsm.Register(new CutsceneState()); + _fsm.Register(new GameOverState()); + } + + // ── 状态转换公共 API ────────────────────────────────────────────── + public bool RequestTransition(GameStateId nextState) + { + if (_fsm.TransitionTo(nextState, out string error)) + { + // 通知 UI 等监听者(GameStateId in Core.Events 是 string-based) + _onGameStateChanged?.Raise(new Events.GameStateId(nextState.Id)); + return true; + } + Debug.LogWarning($"[GameManager] {error}"); + return false; + } + + // ── 事件处理 ────────────────────────────────────────────────────── + private void HandlePlayerDied() => StartCoroutine(DeathFlow()); + private void HandlePauseRequested() => RequestTransition(GameStates.Paused); + private void HandleResumeRequested() => RequestTransition(GameStates.Gameplay); + + private void HandleBossFightStarted(string bossId) + => RequestTransition(GameStates.BossFight); + + private void HandleBossFightEnded(bool victory) + { + if (victory) RequestTransition(GameStates.Gameplay); + else RequestTransition(GameStates.GameOver); + } + + private bool _deathScreenConfirmed; + private void HandleDeathScreenConfirmed() => _deathScreenConfirmed = true; + + private IEnumerator DeathFlow() + { + RequestTransition(GameStates.Dead); + var deathService = ServiceLocator.Get(); + yield return deathService.StartDeathSequenceCoroutine(); + + // 等待玩家在死亡画面点击重试 + _deathScreenConfirmed = false; + yield return new WaitUntil(() => _deathScreenConfirmed); + + yield return deathService.StartRespawnCoroutine(); + RequestTransition(GameStates.LoadingScene); + _onPlayerRespawned?.Raise(); + } + } +} diff --git a/Assets/Scripts/Core/GameManager.cs.meta b/Assets/Scripts/Core/GameManager.cs.meta new file mode 100644 index 0000000..3baf4fd --- /dev/null +++ b/Assets/Scripts/Core/GameManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45c1b813f057cfc4eb19a8c36643ead0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/GameServiceRegistrar.cs b/Assets/Scripts/Core/GameServiceRegistrar.cs new file mode 100644 index 0000000..64d19fb --- /dev/null +++ b/Assets/Scripts/Core/GameServiceRegistrar.cs @@ -0,0 +1,30 @@ +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// + /// 在 Awake 时(最早执行)向 ServiceLocator 注册所有服务。 + /// 挂载在 Persistent 场景的根 GameObject 上。 + /// + [DefaultExecutionOrder(-2000)] + public class GameServiceRegistrar : MonoBehaviour + { + [SerializeField] private DeathRespawnService _deathRespawnService; + [SerializeField] private SceneService _sceneService; + [SerializeField] private EventChannelRegistry _eventChannelRegistry; + + private void Awake() + { + // 注册 NullAudioService 作为兜底;Phase 2 Audio 模块 Awake 后会用真实实现覆盖 + ServiceLocator.RegisterIfAbsent(new NullAudioService()); + + if (_deathRespawnService) + ServiceLocator.Register(_deathRespawnService); + if (_sceneService) + ServiceLocator.Register(_sceneService); + if (_eventChannelRegistry) + ServiceLocator.Register(_eventChannelRegistry); + } + } +} diff --git a/Assets/Scripts/Core/GameServiceRegistrar.cs.meta b/Assets/Scripts/Core/GameServiceRegistrar.cs.meta new file mode 100644 index 0000000..f2fa92d --- /dev/null +++ b/Assets/Scripts/Core/GameServiceRegistrar.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d314e5c9b7077d8409f700a2f394bf29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/GameStateId.cs b/Assets/Scripts/Core/GameStateId.cs new file mode 100644 index 0000000..39dc330 --- /dev/null +++ b/Assets/Scripts/Core/GameStateId.cs @@ -0,0 +1,18 @@ +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// 内置游戏状态常量。 + public static class GameStates + { + public static readonly GameStateId Initializing = new GameStateId("Initializing"); + public static readonly GameStateId MainMenu = new GameStateId("MainMenu"); + public static readonly GameStateId LoadingScene = new GameStateId("LoadingScene"); + public static readonly GameStateId Gameplay = new GameStateId("Gameplay"); + public static readonly GameStateId BossFight = new GameStateId("BossFight"); + public static readonly GameStateId Paused = new GameStateId("Paused"); + public static readonly GameStateId Dead = new GameStateId("Dead"); + public static readonly GameStateId Cutscene = new GameStateId("Cutscene"); + public static readonly GameStateId GameOver = new GameStateId("GameOver"); + } +} diff --git a/Assets/Scripts/Core/GameStateId.cs.meta b/Assets/Scripts/Core/GameStateId.cs.meta new file mode 100644 index 0000000..8b12a34 --- /dev/null +++ b/Assets/Scripts/Core/GameStateId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0652f4270c7de949822392d63415a39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/GameStateMachine.cs b/Assets/Scripts/Core/GameStateMachine.cs new file mode 100644 index 0000000..957f56d --- /dev/null +++ b/Assets/Scripts/Core/GameStateMachine.cs @@ -0,0 +1,45 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// + /// 状态机核心,持有状态注册表与当前状态。 + /// GameManager 持有一个实例;状态对象在 Awake 注入。 + /// + public class GameStateMachine + { + private readonly Dictionary _states = new(); + private IGameState _current; + + public GameStateId CurrentStateId => _current?.Id ?? default; + + /// 注册状态实现(同 Id 注册多次以最后一次为准)。 + public void Register(IGameState state) => _states[state.Id] = state; + + /// 转换到目标状态。失败时返回 false 并填充 error 字符串。 + public bool TransitionTo(GameStateId nextId, out string error) + { + if (!_states.TryGetValue(nextId, out var next)) + { + error = $"[GameStateMachine] 未知状态 '{nextId}'"; + return false; + } + if (_current != null && !_current.ValidNextStates.Contains(nextId)) + { + error = $"[GameStateMachine] 非法转换 {_current.Id} → {nextId}"; + return false; + } + var prev = _current?.Id ?? default; + _current?.OnExit(nextId); + _current = next; + _current.OnEnter(prev); + error = null; + return true; + } + + public void Tick(float deltaTime) => _current?.Tick(deltaTime); + } +} diff --git a/Assets/Scripts/Core/GameStateMachine.cs.meta b/Assets/Scripts/Core/GameStateMachine.cs.meta new file mode 100644 index 0000000..827abe9 --- /dev/null +++ b/Assets/Scripts/Core/GameStateMachine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b89b31d9f10c6d4f876f3e03bca72c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/GlobalSettingsSO.cs b/Assets/Scripts/Core/GlobalSettingsSO.cs new file mode 100644 index 0000000..0d25abe --- /dev/null +++ b/Assets/Scripts/Core/GlobalSettingsSO.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// + /// 游戏全局设置数据(运行时值)。 + /// + [System.Serializable] + public class GlobalSettingsData + { + public float MasterVolume = 1f; + public float BGMVolume = 0.8f; + public float SFXVolume = 1f; + public float AmbientVolume = 0.8f; + + public bool VSync = true; + public int TargetFPS = 60; + public bool FullScreen = true; + + public string Language = "zh-CN"; + } + + /// + /// 全局设置默认值 SO(资产:Assets/Data/Settings/SET_GlobalSettings.asset)。 + /// + [CreateAssetMenu(menuName = "Settings/GlobalSettings")] + public class GlobalSettingsSO : ScriptableObject + { + [Header("Audio")] + public float DefaultMasterVolume = 1f; + public float DefaultBGMVolume = 0.8f; + public float DefaultSFXVolume = 1f; + public float DefaultAmbientVolume = 0.8f; + + [Header("Display")] + public bool DefaultVSync = true; + public int DefaultTargetFPS = 60; + public bool DefaultFullScreen = true; + + [Header("Language")] + public string DefaultLanguage = "zh-CN"; + + /// 将 SO 默认值填入 GlobalSettingsData。 + public GlobalSettingsData CreateDefault() => new GlobalSettingsData + { + MasterVolume = DefaultMasterVolume, + BGMVolume = DefaultBGMVolume, + SFXVolume = DefaultSFXVolume, + AmbientVolume = DefaultAmbientVolume, + VSync = DefaultVSync, + TargetFPS = DefaultTargetFPS, + FullScreen = DefaultFullScreen, + Language = DefaultLanguage, + }; + } +} diff --git a/Assets/Scripts/Core/GlobalSettingsSO.cs.meta b/Assets/Scripts/Core/GlobalSettingsSO.cs.meta new file mode 100644 index 0000000..0b6d57c --- /dev/null +++ b/Assets/Scripts/Core/GlobalSettingsSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5880f15e5fd4785468d296b6cdebf77b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/IAudioService.cs b/Assets/Scripts/Core/IAudioService.cs new file mode 100644 index 0000000..6c5e270 --- /dev/null +++ b/Assets/Scripts/Core/IAudioService.cs @@ -0,0 +1,21 @@ +namespace BaseGames.Core +{ + /// + /// 音频服务接口。 + /// 实现由 BaseGames.Audio 程序集提供;Core 层注册 NullAudioService 作为兜底。 + /// + public interface IAudioService + { + /// 播放背景音乐(循环)。key 对应 Addressables 地址或 Audio Mixer 键。 + void PlayBGM(string key); + + /// 停止背景音乐。fadeTime > 0 则淡出。 + void StopBGM(float fadeTime = 0f); + + /// 单次播放音效。 + void PlaySFX(string key); + + /// 设置混音器音量(0–1)。group 取 AudioMixerKeys 常量。 + void SetVolume(string group, float normalizedVolume); + } +} diff --git a/Assets/Scripts/Core/IAudioService.cs.meta b/Assets/Scripts/Core/IAudioService.cs.meta new file mode 100644 index 0000000..aff37b7 --- /dev/null +++ b/Assets/Scripts/Core/IAudioService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7e621b576dd8394c818cdc3c0312ca9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/IGameState.cs b/Assets/Scripts/Core/IGameState.cs new file mode 100644 index 0000000..2fea689 --- /dev/null +++ b/Assets/Scripts/Core/IGameState.cs @@ -0,0 +1,23 @@ +using System.Collections.Generic; +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// + /// 可插件化的游戏状态行为接口。 + /// + public interface IGameState + { + GameStateId Id { get; } + + /// 合法的后继状态集合。GameStateMachine.TransitionTo() 据此校验。 + IReadOnlyCollection ValidNextStates { get; } + + void OnEnter(GameStateId previousState); + void OnExit(GameStateId nextState); + + /// 每帧由 GameManager.Update() 调用(默认空实现)。 + void Tick(float deltaTime); + } + +} diff --git a/Assets/Scripts/Core/IGameState.cs.meta b/Assets/Scripts/Core/IGameState.cs.meta new file mode 100644 index 0000000..f21392c --- /dev/null +++ b/Assets/Scripts/Core/IGameState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1c472552f73d344587050a0d070c76a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/IGameStateFactory.cs b/Assets/Scripts/Core/IGameStateFactory.cs new file mode 100644 index 0000000..6920c3a --- /dev/null +++ b/Assets/Scripts/Core/IGameStateFactory.cs @@ -0,0 +1,16 @@ +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// + /// 游戏状态工厂接口。用于 DLC / 扩展模块向 GameStateMachine 注册自定义状态。 + /// + public interface IGameStateFactory + { + /// 根据 ID 创建对应的 IGameState 实例。 + IGameState Create(GameStateId id); + + /// 此工厂是否能创建指定 ID 的状态。 + bool CanCreate(GameStateId id); + } +} diff --git a/Assets/Scripts/Core/IGameStateFactory.cs.meta b/Assets/Scripts/Core/IGameStateFactory.cs.meta new file mode 100644 index 0000000..909471c --- /dev/null +++ b/Assets/Scripts/Core/IGameStateFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 172641e53b7fdb2479195caeefe16494 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/IRestoreOnSave.cs b/Assets/Scripts/Core/IRestoreOnSave.cs new file mode 100644 index 0000000..fba52e6 --- /dev/null +++ b/Assets/Scripts/Core/IRestoreOnSave.cs @@ -0,0 +1,15 @@ +namespace BaseGames.Core +{ + /// + /// 可在存档点被"恢复"的对象契约(依赖倒置接口)。 + /// 定义于 BaseGames.Core 使世界层无需引用玩家层。 + /// + public interface IRestoreOnSave + { + /// 完整恢复 HP(及其他满状态资源)。 + void FullRestore(); + + /// 恢复弹簧充能至满充。 + void RestoreSpring(); + } +} diff --git a/Assets/Scripts/Core/IRestoreOnSave.cs.meta b/Assets/Scripts/Core/IRestoreOnSave.cs.meta new file mode 100644 index 0000000..a07eda8 --- /dev/null +++ b/Assets/Scripts/Core/IRestoreOnSave.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7824b4eec013ec4fba39dcd231c6331 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/ISaveService.cs b/Assets/Scripts/Core/ISaveService.cs new file mode 100644 index 0000000..83bc6b7 --- /dev/null +++ b/Assets/Scripts/Core/ISaveService.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; + +namespace BaseGames.Core +{ + /// + /// 存档服务接口。对外暴露存档系统的高层操作,供其他模块通过 ServiceLocator 访问。 + /// 实现由 BaseGames.Core.Save 程序集的 SaveManager 提供。 + /// + public interface ISaveService + { + /// 将当前游戏状态写入指定存档槽。 + Task SaveAsync(int slot); + + /// 从指定存档槽加载游戏状态。成功返回 true,存档损坏/不存在返回 false。 + Task LoadAsync(int slot); + + /// 快速存档(覆盖当前活跃槽)。 + void QuickSave(); + + /// 快速读档(从当前活跃槽加载)。 + Task QuickLoadAsync(); + + /// 指定槽是否存在有效存档。 + bool HasSave(int slot); + + /// 当前活跃存档槽(0–2)。 + int ActiveSlot { get; } + } +} diff --git a/Assets/Scripts/Core/ISaveService.cs.meta b/Assets/Scripts/Core/ISaveService.cs.meta new file mode 100644 index 0000000..fe76f5d --- /dev/null +++ b/Assets/Scripts/Core/ISaveService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34a15efa01c41d44bb6f2f57044b395b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/NullAudioService.cs b/Assets/Scripts/Core/NullAudioService.cs new file mode 100644 index 0000000..7bae663 --- /dev/null +++ b/Assets/Scripts/Core/NullAudioService.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace BaseGames.Core +{ + /// + /// IAudioService 的空实现,作为兜底防止 NullReferenceException。 + /// 在 GameServiceRegistrar 中作为默认音频服务注册; + /// Phase 2 Audio 模块实现完整后替换。 + /// + public sealed class NullAudioService : IAudioService + { + public void PlayBGM(string key) + => Debug.LogWarning($"[NullAudioService] PlayBGM({key}) — 音频系统未初始化。"); + + public void StopBGM(float fadeTime = 0f) + => Debug.LogWarning("[NullAudioService] StopBGM — 音频系统未初始化。"); + + public void PlaySFX(string key) + => Debug.LogWarning($"[NullAudioService] PlaySFX({key}) — 音频系统未初始化。"); + + public void SetVolume(string group, float normalizedVolume) + => Debug.LogWarning($"[NullAudioService] SetVolume({group}, {normalizedVolume}) — 音频系统未初始化。"); + } +} diff --git a/Assets/Scripts/Core/NullAudioService.cs.meta b/Assets/Scripts/Core/NullAudioService.cs.meta new file mode 100644 index 0000000..07db1c7 --- /dev/null +++ b/Assets/Scripts/Core/NullAudioService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d2802f8ed4ba41408bebb2f8022f659 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Pool.meta b/Assets/Scripts/Core/Pool.meta new file mode 100644 index 0000000..ba4f9b4 --- /dev/null +++ b/Assets/Scripts/Core/Pool.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f55c3830adfab234b9f3ac3a89100e48 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Pool/GlobalObjectPool.cs b/Assets/Scripts/Core/Pool/GlobalObjectPool.cs new file mode 100644 index 0000000..6255eac --- /dev/null +++ b/Assets/Scripts/Core/Pool/GlobalObjectPool.cs @@ -0,0 +1,214 @@ +using System.Collections; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.AddressableAssets; + +namespace BaseGames.Core.Pool +{ + /// + /// 全局对象池(Persistent 场景)。 + /// 先调用 预热后,再通过 取出对象。 + /// + [DefaultExecutionOrder(-800)] + public class GlobalObjectPool : MonoBehaviour + { + public static GlobalObjectPool Instance { get; private set; } + + [System.Serializable] + public struct PoolConfig + { + public string AddressKey; + public int InitialCount; + /// 0 = 无上限;> 0 强制限制池中 + 活跃对象总数。 + public int MaxCount; + } + + [SerializeField] private PoolConfig[] _warmupConfigs; + + private readonly Dictionary> _pools = new(); + private readonly Dictionary> _alive = new(); + private readonly Dictionary _prefabCache = new(); + private readonly Dictionary _maxCounts = new(); + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + } + + // ── 预热 ────────────────────────────────────────────────────────── + /// 在场景加载完成后(StartCoroutine)调用预热。 + public IEnumerator WarmupCoroutine() + { + foreach (var cfg in _warmupConfigs) + { + _maxCounts[cfg.AddressKey] = cfg.MaxCount; + yield return WarmupSingleCoroutine(cfg.AddressKey, cfg.InitialCount); + } + } + + /// async Task 版本(可 await,供非 MonoBehaviour 调用)。 + public async Task WarmupAsync() + { + foreach (var cfg in _warmupConfigs) + { + _maxCounts[cfg.AddressKey] = cfg.MaxCount; + await WarmupSingleAsync(cfg.AddressKey, cfg.InitialCount); + } + } + + private IEnumerator WarmupSingleCoroutine(string key, int count) + { + var loadOp = Addressables.LoadAssetAsync(key); + yield return loadOp; + var prefab = loadOp.Result; + _prefabCache[key] = prefab; + EnsureCollections(key, count); + for (int i = 0; i < count; i++) + EnqueueNew(key, prefab); + } + + private async Task WarmupSingleAsync(string key, int count) + { + var prefab = await Addressables.LoadAssetAsync(key).Task; + _prefabCache[key] = prefab; + EnsureCollections(key, count); + for (int i = 0; i < count; i++) + EnqueueNew(key, prefab); + } + + private void EnsureCollections(string key, int capacity) + { + if (!_pools.ContainsKey(key)) _pools[key] = new Queue(capacity); + if (!_alive.ContainsKey(key)) _alive[key] = new List(); + } + + private void EnqueueNew(string key, GameObject prefab) + { + var go = Instantiate(prefab); + var po = go.GetComponent(); + if (po == null) po = go.AddComponent(); + po.Setup(key, this); + go.SetActive(false); + _pools[key].Enqueue(po); + } + + // ── Spawn ───────────────────────────────────────────────────────── + public T Spawn(string key, Vector3 position, Quaternion rotation) where T : Component + => SpawnInternal(key, position, rotation)?.GetComponentCached(); + + public GameObject Spawn(string key, Vector3 position, Quaternion rotation) + => SpawnInternal(key, position, rotation)?.gameObject; + + private PooledObject SpawnInternal(string key, Vector3 pos, Quaternion rot) + { + if (!_pools.TryGetValue(key, out var queue)) + { + Debug.LogError($"[GlobalObjectPool] '{key}' 未预热,请先调用 WarmupAsync/WarmupCoroutine。"); + return null; + } + + PooledObject po; + var aliveList = GetAliveList(key); + int maxCount = _maxCounts.GetValueOrDefault(key, 0); + + if (queue.Count > 0) + { + po = queue.Dequeue(); + } + else if (maxCount > 0 && aliveList.Count >= maxCount) + { + // 已达上限:LRU 回收最早 Spawn 的活跃对象 + po = aliveList[0]; + aliveList.RemoveAt(0); + po.ForceReturnToPool(); + Debug.LogWarning($"[GlobalObjectPool] '{key}' 已达 MaxCount={maxCount},LRU 回收中。"); + } + else + { + // 池空且未达上限:同步实例化,并在后台协程补池 + if (!_prefabCache.TryGetValue(key, out var pfx)) + { + Debug.LogError($"[GlobalObjectPool] '{key}' Prefab 未缓存。"); + return null; + } + var go = Instantiate(pfx); + po = go.GetComponent(); + if (po == null) po = go.AddComponent(); + po.Setup(key, this); + StartCoroutine(BackgroundRefillCoroutine(key, 1)); + } + + po.transform.SetPositionAndRotation(pos, rot); + po.gameObject.SetActive(true); + po.OnSpawn(); + aliveList.Add(po); + return po; + } + + // ── Despawn ─────────────────────────────────────────────────────── + public void Despawn(string key, PooledObject po) + { + var aliveList = GetAliveList(key); + aliveList.Remove(po); + po.gameObject.SetActive(false); + po.OnDespawn(); + + int maxCount = _maxCounts.GetValueOrDefault(key, 0); + int queueSize = _pools.TryGetValue(key, out var queue) ? queue.Count : 0; + + if (maxCount > 0 && queueSize + aliveList.Count >= maxCount) + { + Destroy(po.gameObject); + return; + } + + if (queue == null) { _pools[key] = queue = new Queue(); } + queue.Enqueue(po); + } + + // ── 后台补池 ────────────────────────────────────────────────────── + private IEnumerator BackgroundRefillCoroutine(string key, int count) + { + if (!_prefabCache.TryGetValue(key, out var pfx)) yield break; + for (int i = 0; i < count; i++) + { + yield return null; // 下一帧 + var go = Instantiate(pfx); + var po = go.GetComponent(); + if (po == null) po = go.AddComponent(); + po.Setup(key, this); + go.SetActive(false); + if (_pools.TryGetValue(key, out var q)) q.Enqueue(po); + } + } + + // ── 清空 ────────────────────────────────────────────────────────── + public void ClearPool(string key) + { + if (_pools.TryGetValue(key, out var queue)) + { + while (queue.Count > 0) + { + var po = queue.Dequeue(); + if (po != null) Destroy(po.gameObject); + } + _pools.Remove(key); + } + _alive.Remove(key); + if (_prefabCache.TryGetValue(key, out var pfx)) + { + Addressables.Release(pfx); + _prefabCache.Remove(key); + } + } + + private List GetAliveList(string key) + { + if (!_alive.TryGetValue(key, out var list)) + _alive[key] = list = new List(); + return list; + } + } +} diff --git a/Assets/Scripts/Core/Pool/GlobalObjectPool.cs.meta b/Assets/Scripts/Core/Pool/GlobalObjectPool.cs.meta new file mode 100644 index 0000000..61ab265 --- /dev/null +++ b/Assets/Scripts/Core/Pool/GlobalObjectPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a86b9bc162692145809a4f3514ab86e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Pool/PooledObject.cs b/Assets/Scripts/Core/Pool/PooledObject.cs new file mode 100644 index 0000000..7c0213c --- /dev/null +++ b/Assets/Scripts/Core/Pool/PooledObject.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace BaseGames.Core.Pool +{ + /// + /// 可池化对象组件,挂在每个可池化 Prefab 的根节点上。 + /// 实现 的子类可覆盖 OnSpawn/OnDespawn。 + /// + public class PooledObject : MonoBehaviour + { + public string AddressKey { get; private set; } + private GlobalObjectPool _pool; + + // 组件缓存(避免反复 GetComponent) + private readonly Dictionary _componentCache = new(); + + public void Setup(string key, GlobalObjectPool pool) + { + AddressKey = key; + _pool = pool; + } + + public virtual void OnSpawn() { } + public virtual void OnDespawn(){ } + + // ── 归还 API ────────────────────────────────────────────────────── + /// 立即归还到对象池。 + public void ReturnToPool() => _pool?.Despawn(AddressKey, this); + + /// 延迟 delay 秒后归还。 + public void ReturnToPoolDelayed(float delay) => StartCoroutine(DelayedReturn(delay)); + + /// + /// 由 GlobalObjectPool LRU 回收触发,不应由业务代码直接调用。 + /// + internal void ForceReturnToPool() + { + OnDespawn(); + gameObject.SetActive(false); + } + + // ── 组件缓存 ────────────────────────────────────────────────────── + /// 从缓存获取 Component,首次调用才执行 GetComponent。 + public T GetComponentCached() where T : Component + { + if (!_componentCache.TryGetValue(typeof(T), out var cached)) + _componentCache[typeof(T)] = cached = GetComponent(); + return (T)cached; + } + + private IEnumerator DelayedReturn(float delay) + { + yield return new WaitForSeconds(delay); + ReturnToPool(); + } + } + + /// + /// 可选接口:若池化对象需要在 Spawn/Despawn 时执行额外逻辑, + /// 由 PooledObject 子类或同 GameObject 上的其他 MonoBehaviour 实现, + /// 并在 PooledObject.OnSpawn/OnDespawn 中手动驱动。 + /// + public interface IPoolable + { + void OnSpawn(); + void OnDespawn(); + } +} diff --git a/Assets/Scripts/Core/Pool/PooledObject.cs.meta b/Assets/Scripts/Core/Pool/PooledObject.cs.meta new file mode 100644 index 0000000..d1b7e5c --- /dev/null +++ b/Assets/Scripts/Core/Pool/PooledObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a1abe6a66724ba4586a0d4f7ae5f6e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save.meta b/Assets/Scripts/Core/Save.meta new file mode 100644 index 0000000..416301a --- /dev/null +++ b/Assets/Scripts/Core/Save.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95a00461f91e89a429681c753c436146 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save/.gitkeep b/Assets/Scripts/Core/Save/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Core/Save/BaseGames.Core.Save.asmdef b/Assets/Scripts/Core/Save/BaseGames.Core.Save.asmdef new file mode 100644 index 0000000..bb791e2 --- /dev/null +++ b/Assets/Scripts/Core/Save/BaseGames.Core.Save.asmdef @@ -0,0 +1,22 @@ +{ + "name": "BaseGames.Core.Save", + "rootNamespace": "BaseGames.Core.Save", + "references": [ + "BaseGames.Core.Events" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.nuget.newtonsoft-json", + "expression": "", + "define": "NEWTONSOFT_JSON" + } + ], + "noEngineReferences": false +} diff --git a/Assets/Scripts/Core/Save/BaseGames.Core.Save.asmdef.meta b/Assets/Scripts/Core/Save/BaseGames.Core.Save.asmdef.meta new file mode 100644 index 0000000..032f83b --- /dev/null +++ b/Assets/Scripts/Core/Save/BaseGames.Core.Save.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d0538e003f3abea4782eb60e4d29f17d +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save/EmergencySaveService.cs b/Assets/Scripts/Core/Save/EmergencySaveService.cs new file mode 100644 index 0000000..3ca3c11 --- /dev/null +++ b/Assets/Scripts/Core/Save/EmergencySaveService.cs @@ -0,0 +1,51 @@ +using System.Threading.Tasks; +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Core.Save +{ + public class EmergencySaveService : MonoBehaviour + { + private const int EmergencySlot = 99; + + [SerializeField] private float _intervalSeconds = 120f; + [SerializeField] private SaveManager _saveManager; + [SerializeField] private BoolEventChannelSO _onGameplayActive; + + private bool _gameplayActive; + private float _timer; + + private void OnEnable() + { + if (_onGameplayActive != null) _onGameplayActive.OnEventRaised += OnGameplayActiveChanged; + } + + private void OnDisable() + { + if (_onGameplayActive != null) _onGameplayActive.OnEventRaised -= OnGameplayActiveChanged; + } + + private void OnGameplayActiveChanged(bool value) => _gameplayActive = value; + + private void Update() + { + if (!_gameplayActive || _saveManager == null) return; + _timer += Time.deltaTime; + if (_timer >= _intervalSeconds) + { + _timer = 0f; + _ = _saveManager.SaveAsync(EmergencySlot); + } + } + + public bool HasEmergencySave() + => _saveManager != null && _saveManager.SlotExists(EmergencySlot); + + public async Task PromoteToSlot(int targetSlot) + { + if (_saveManager == null) return; + // Phase 1 stub:完整实现在 Phase 2 LocalFileStorage API + await Task.CompletedTask; + } + } +} diff --git a/Assets/Scripts/Core/Save/EmergencySaveService.cs.meta b/Assets/Scripts/Core/Save/EmergencySaveService.cs.meta new file mode 100644 index 0000000..17ea246 --- /dev/null +++ b/Assets/Scripts/Core/Save/EmergencySaveService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68ee29c1506209d44bf695a6bd1687b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save/ISaveStorage.cs b/Assets/Scripts/Core/Save/ISaveStorage.cs new file mode 100644 index 0000000..21b2d4b --- /dev/null +++ b/Assets/Scripts/Core/Save/ISaveStorage.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace BaseGames.Core.Save +{ + /// 存档 I/O 抽象接口。 + public interface ISaveStorage + { + Task WriteAsync(int slotIndex, string json); + Task ReadAsync(int slotIndex); + Task DeleteAsync(int slotIndex); + bool Exists(int slotIndex); + IEnumerable GetExistingSlots(); + } +} diff --git a/Assets/Scripts/Core/Save/ISaveStorage.cs.meta b/Assets/Scripts/Core/Save/ISaveStorage.cs.meta new file mode 100644 index 0000000..9d60910 --- /dev/null +++ b/Assets/Scripts/Core/Save/ISaveStorage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7502422be575ad648885a485811ae81f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save/ISaveable.cs b/Assets/Scripts/Core/Save/ISaveable.cs new file mode 100644 index 0000000..38df4da --- /dev/null +++ b/Assets/Scripts/Core/Save/ISaveable.cs @@ -0,0 +1,12 @@ +namespace BaseGames.Core.Save +{ + /// + /// 各游戏系统组件实现此接口, + /// 向 SaveManager 提供/接受自己的存档数据。 + /// + public interface ISaveable + { + void OnSave(SaveData saveData); + void OnLoad(SaveData saveData); + } +} diff --git a/Assets/Scripts/Core/Save/ISaveable.cs.meta b/Assets/Scripts/Core/Save/ISaveable.cs.meta new file mode 100644 index 0000000..e94c324 --- /dev/null +++ b/Assets/Scripts/Core/Save/ISaveable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 516b89521df95184ca457b57d81a7523 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save/LocalFileStorage.cs b/Assets/Scripts/Core/Save/LocalFileStorage.cs new file mode 100644 index 0000000..31a5a7b --- /dev/null +++ b/Assets/Scripts/Core/Save/LocalFileStorage.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using UnityEngine; + +namespace BaseGames.Core.Save +{ + /// + /// 本地文件存档存储实现(PC / 主机)。 + /// 存档路径:/saves/save_{slot}.json + /// + public class LocalFileStorage : ISaveStorage + { + private readonly string _saveDir; + + public LocalFileStorage() + { + _saveDir = Path.Combine(Application.persistentDataPath, "saves"); + Directory.CreateDirectory(_saveDir); + } + + public async Task WriteAsync(int slotIndex, string json) + { + var path = GetPath(slotIndex); + // 先写临时文件再原子性替换,防止写入中途断电损坏存档 + var tmp = path + ".tmp"; + await File.WriteAllTextAsync(tmp, json); + File.Replace(tmp, path, path + ".bak", ignoreMetadataErrors: true); + } + + public async Task ReadAsync(int slotIndex) + { + var path = GetPath(slotIndex); + if (!File.Exists(path)) + { + // 尝试恢复备份 + var bak = path + ".bak"; + if (File.Exists(bak)) File.Copy(bak, path); + else return null; + } + return await File.ReadAllTextAsync(path); + } + + public Task DeleteAsync(int slotIndex) + { + var path = GetPath(slotIndex); + if (File.Exists(path)) File.Delete(path); + var bak = path + ".bak"; + if (File.Exists(bak)) File.Delete(bak); + return Task.CompletedTask; + } + + public bool Exists(int slotIndex) => File.Exists(GetPath(slotIndex)); + + public IEnumerable GetExistingSlots() + { + for (int i = 0; i < 3; i++) + if (Exists(i)) yield return i; + } + + private string GetPath(int slot) => Path.Combine(_saveDir, $"save_{slot}.json"); + } +} diff --git a/Assets/Scripts/Core/Save/LocalFileStorage.cs.meta b/Assets/Scripts/Core/Save/LocalFileStorage.cs.meta new file mode 100644 index 0000000..4a74574 --- /dev/null +++ b/Assets/Scripts/Core/Save/LocalFileStorage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 880e1ba90110b4f44aed86f117361f1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save/SaveData.cs b/Assets/Scripts/Core/Save/SaveData.cs new file mode 100644 index 0000000..92a4b96 --- /dev/null +++ b/Assets/Scripts/Core/Save/SaveData.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections.Generic; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +namespace BaseGames.Core.Save +{ + // ─── 顶层 ───────────────────────────────────────────────────────────────── + [Serializable] + public class SaveData + { + [JsonExtensionData] + public Dictionary ExtensionData = new(); + + public SaveMeta Meta = new(); + public PlayerSaveData Player = new(); + public EquipmentSaveData Equipment = new(); + public WorldSaveData World = new(); + public MapSaveData Map = new(); + public QuestSaveData Quests = new(); + public AchievementSaveData Achievements = new(); + public ToolsSaveData Tools = new(); + public ChallengeRoomsSaveData ChallengeRooms = new(); + public EventChainsSaveData EventChains = new(); + public ShopsSaveData Shops = new(); + public StatsSaveData Stats = new(); + public NGPlusSaveData NGPlus = null; // null = 非 NG+ 模式 + public Dictionary DLC = new(); + } + + // ─── Meta ───────────────────────────────────────────────────────────────── + [Serializable] + public class SaveMeta + { + public string Version = "2.1"; + public int SlotIndex; + public string LastSaved; // ISO 8601 + public float Playtime; + public string SavePointId; + public int NGPlusCount; + public int SaveCount; + public string Checksum; // HMAC-SHA256 + } + + // ─── Player ─────────────────────────────────────────────────────────────── + [Serializable] + public class PlayerSaveData + { + public float PosX, PosY; + public string Scene; + public int CurrentHP, MaxHP; + public int CurrentGeo, LifetimeGeo; + + // 能力解锁位掩码(AbilityType [Flags] uint bitmask) + public uint AbilityFlags = 0; + + public string ActiveFormId; + public List UnlockedFormIds = new(); + + public DeathShadeSaveData DeathShade; + + // 护盾:-1 = 满护盾(默认),>= 0 = 当前耐久值 + public int ShieldHP = -1; + public bool ShieldIsBroken = false; + } + + [Serializable] + public class DeathShadeSaveData + { + public float PosX, PosY; + public string SceneId; + public int GeoAmount; + } + + // ─── Equipment ──────────────────────────────────────────────────────────── + [Serializable] + public class EquipmentSaveData + { + public List EquippedCharmIds = new(); + public int NotchesUsed; + public int MaxNotches; + public List OwnedCharmIds = new(); + public List UpgradedCharmIds = new(); + } + + // ─── World ──────────────────────────────────────────────────────────────── + [Serializable] + public class WorldSaveData + { + public List VisitedScenes = new(); + public List ActivatedSavePoints = new(); + public List OpenedDoors = new(); + public List DefeatedBossIds = new(); + public List CollectedIds = new(); + public Dictionary Switches = new(); + public Dictionary NpcRelations = new(); + public HashSet ChallengeFirstClears = new(); + } + + // ─── Map ────────────────────────────────────────────────────────────────── + [Serializable] + public class MapSaveData + { + public Dictionary> DiscoveredRooms = new(); + public Dictionary MapPurchased = new(); + } + + // ─── Quests ─────────────────────────────────────────────────────────────── + [Serializable] + public class QuestSaveData + { + public Dictionary QuestStates = new(); + public List AvailableQuestIds = new(); + } + + [Serializable] + public class QuestState + { + public string Status; // "NotStarted"|"Active"|"Completed"|"Failed" + public int ObjectiveIndex; + public List ProgressCounts = new(); + public string GiverNpcId; + } + + // ─── Achievements ───────────────────────────────────────────────────────── + [Serializable] + public class AchievementSaveData + { + public List Unlocked = new(); + public Dictionary Progress = new(); + } + + [Serializable] + public class AchievementProgress + { + public int Count; + public float Percent; + } + + // ─── Stats ──────────────────────────────────────────────────────────────── + [Serializable] + public class StatsSaveData + { + public int EnemyKills, Deaths, ParrySuccess, ParryFail; + public int GeoEarned, GeoLost; + public float DistanceTraveled; + public int SaveCount; + public Dictionary SkillUseCounts = new(); + public Dictionary DeathsByBoss = new(); + } + + // ─── Tools ──────────────────────────────────────────────────────────────── + [Serializable] + public class ToolsSaveData + { + public string ToolSlot0; + public string ToolSlot1; + public List OwnedToolIds = new(); + public Dictionary ToolStates = new(); + } + + // ─── ChallengeRooms ─────────────────────────────────────────────────────── + [Serializable] + public class ChallengeRoomsSaveData + { + public Dictionary Records = new(); + } + + [Serializable] + public class ChallengeRoomRecord + { + public int BestScore; + public float BestTime; + public string BestRank; // "S"/"A"/"B"/"C" + public int CompletionCount; + } + + // ─── EventChains ────────────────────────────────────────────────────────── + [Serializable] + public class EventChainsSaveData + { + public Dictionary ChainStates = new(); + public Dictionary WorldFlags = new(); + } + + // ─── Shops ──────────────────────────────────────────────────────────────── + [Serializable] + public class ShopsSaveData + { + public Dictionary ShopRecords = new(); + } + + [Serializable] + public class ShopRecord + { + public List SoldUniqueItems = new(); + public Dictionary PurchaseCounts = new(); + } + + // ─── NGPlus ─────────────────────────────────────────────────────────────── + [Serializable] + public class NGPlusSaveData + { + public int NGPlusCount; + public bool SteelSoulMode; + public Dictionary NGPlusFlags = new(); + } + + // ─── SlotSummary(主菜单 UI 用)──────────────────────────────────────────── + public class SlotSummary + { + public int SlotIndex; + public float Playtime; + public string LastSaved; + public string SceneName; + public string ActiveFormId; + } +} diff --git a/Assets/Scripts/Core/Save/SaveData.cs.meta b/Assets/Scripts/Core/Save/SaveData.cs.meta new file mode 100644 index 0000000..7fc7721 --- /dev/null +++ b/Assets/Scripts/Core/Save/SaveData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c86ec3fc854db54da8ce69990da0497 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save/SaveManager.cs b/Assets/Scripts/Core/Save/SaveManager.cs new file mode 100644 index 0000000..e133d34 --- /dev/null +++ b/Assets/Scripts/Core/Save/SaveManager.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Newtonsoft.Json; +using UnityEngine; + +namespace BaseGames.Core.Save +{ + /// + /// 存档管理器(Phase 0 骨架)。 + /// 完整序列化/反序列化由 Newtonsoft.Json 驱动。 + /// + [DefaultExecutionOrder(-900)] + public class SaveManager : MonoBehaviour + { + public static SaveManager Instance { get; private set; } + + public const string MinCompatibleVersion = "1.0"; + private const int QuickSaveSlot = 98; + + [Header("Event Channels - Raise")] + [SerializeField] private BaseGames.Core.Events.BoolEventChannelSO _onSaveIndicatorVisible; + + private ISaveStorage _storage; + private readonly List _saveables = new(); + + private SaveData _current; + private int _currentSlot = 0; + + public static string LastCheckpointScene { get; private set; } + public static string LastCheckpointSpawnId { get; private set; } + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + + _storage = new LocalFileStorage(); + } + + // ── ISaveable 注册 ──────────────────────────────────────────────────── + public void Register(ISaveable s) => _saveables.Add(s); + public void Unregister(ISaveable s) => _saveables.Remove(s); + + // ── 存档 ────────────────────────────────────────────────────────────── + public async Task SaveAsync(int slot = -1) + { + int targetSlot = slot < 0 ? _currentSlot : slot; + _current ??= new SaveData(); + + _onSaveIndicatorVisible?.Raise(true); + foreach (var s in _saveables) s.OnSave(_current); + + _current.Meta.LastSaved = DateTime.UtcNow.ToString("o"); + _current.Meta.SlotIndex = targetSlot; + _current.Meta.SaveCount++; + + // 先清空 checksum,序列化并计算,再序列化含 checksum 的最终版本 + _current.Meta.Checksum = null; + string jsonForChecksum = JsonConvert.SerializeObject(_current, Formatting.Indented); + _current.Meta.Checksum = ComputeChecksum(jsonForChecksum); + string finalJson = JsonConvert.SerializeObject(_current, Formatting.Indented); + + await _storage.WriteAsync(targetSlot, finalJson); + + LastCheckpointScene = _current.Player?.Scene; + LastCheckpointSpawnId = _current.Meta?.SavePointId; + + _onSaveIndicatorVisible?.Raise(false); + } + + // ── 读档 ────────────────────────────────────────────────────────────── + public async Task LoadAsync(int slot) + { + if (!_storage.Exists(slot)) return false; + + string json = await _storage.ReadAsync(slot); + if (json == null) return false; + + SaveData loaded; + try { loaded = JsonConvert.DeserializeObject(json); } + catch (Exception e) + { + Debug.LogError($"[SaveManager] 存档解析失败 slot={slot}: {e.Message}"); + return false; + } + + if (!ValidateChecksum(loaded, json)) + { + Debug.LogWarning("[SaveManager] 存档 checksum 校验失败。"); + // 非 SteelSoul 模式仍允许加载(只是警告) + } + + loaded = SaveMigrator.Migrate(loaded); + _current = loaded; + _currentSlot = slot; + + foreach (var s in _saveables) s.OnLoad(_current); + + LastCheckpointScene = _current.Player?.Scene; + LastCheckpointSpawnId = _current.Meta?.SavePointId; + return true; + } + + public bool SlotExists(int slot) => _storage.Exists(slot); + public IEnumerable GetExistingSlots() => _storage.GetExistingSlots(); + + // ── 快速存档(挑战房间用)──────────────────────────────────────────── + public void QuickSave() => _ = SaveAsync(QuickSaveSlot); + public void QuickLoad() => _ = LoadAsync(QuickSaveSlot); + + // ── 世界标志 / EventChain ───────────────────────────────────────────── + public bool GetFlag(string flagId) + => _current?.EventChains.WorldFlags.TryGetValue(flagId, out var v) == true && v; + public void SetFlag(string flagId, bool value) + { _current ??= new SaveData(); _current.EventChains.WorldFlags[flagId] = value; } + + public void SetChainCompleted(string chainId) + { _current ??= new SaveData(); _current.EventChains.ChainStates[chainId] = "Completed"; } + public IEnumerable GetCompletedChains() + => _current?.EventChains.ChainStates.Keys ?? Enumerable.Empty(); + + public bool IsFirstClear(string challengeId) + { + if (_current == null) return false; + if (_current.World.ChallengeFirstClears.Contains(challengeId)) return false; + _current.World.ChallengeFirstClears.Add(challengeId); + return true; + } + public bool IsBossDefeated(string bossId) + => _current?.World.DefeatedBossIds.Contains(bossId) == true; + + // ── 存档槽摘要 ──────────────────────────────────────────────────────── + public async Task GetSlotSummaryAsync(int slotIndex) + { + if (!_storage.Exists(slotIndex)) return null; + string json = await _storage.ReadAsync(slotIndex); + if (json == null) return null; + try + { + var data = JsonConvert.DeserializeObject(json); + return new SlotSummary + { + SlotIndex = slotIndex, + Playtime = data.Meta.Playtime, + LastSaved = data.Meta.LastSaved, + SceneName = data.Player?.Scene, + ActiveFormId = data.Player?.ActiveFormId, + }; + } + catch { return null; } + } + + public void CreateSlot(int slotIndex) + { + _currentSlot = slotIndex; + _current = new SaveData(); + _current.Meta.SlotIndex = slotIndex; + } + + // ── 私有工具 ────────────────────────────────────────────────────────── + private string ComputeChecksum(string json) + { + var keyBytes = System.Text.Encoding.UTF8.GetBytes(GetHmacKey()); + using var hmac = new System.Security.Cryptography.HMACSHA256(keyBytes); + var dataBytes = System.Text.Encoding.UTF8.GetBytes(json); + return Convert.ToBase64String(hmac.ComputeHash(dataBytes)); + } + + private string GetHmacKey() + { + string deviceId = SystemInfo.deviceUniqueIdentifier; + const string salt = "ZelingV2SaveIntegrity_v1"; + return $"{deviceId}:{salt}"; + } + + private bool ValidateChecksum(SaveData data, string rawJson) + { + if (string.IsNullOrEmpty(data?.Meta?.Checksum)) return true; + var saved = data.Meta.Checksum; + data.Meta.Checksum = null; + string jsonNoChecksum = JsonConvert.SerializeObject(data, Formatting.Indented); + data.Meta.Checksum = saved; + return ComputeChecksum(jsonNoChecksum) == saved; + } + } +} diff --git a/Assets/Scripts/Core/Save/SaveManager.cs.meta b/Assets/Scripts/Core/Save/SaveManager.cs.meta new file mode 100644 index 0000000..94179c8 --- /dev/null +++ b/Assets/Scripts/Core/Save/SaveManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43469211fc3d9c24d879ddb3f6f5af5c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/Save/SaveMigrator.cs b/Assets/Scripts/Core/Save/SaveMigrator.cs new file mode 100644 index 0000000..df45252 --- /dev/null +++ b/Assets/Scripts/Core/Save/SaveMigrator.cs @@ -0,0 +1,60 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace BaseGames.Core.Save +{ + /// + /// 处理存档版本升级(旧版 → 新版数据结构)。 + /// + public static class SaveMigrator + { + private const string CurrentVersion = "2.1"; + + public static SaveData Migrate(SaveData data) + { + if (data?.Meta == null) return data; + switch (data.Meta.Version) + { + case "1.0": data = MigrateFrom1_0(data); goto case "1.1"; + case "1.1": data = MigrateFrom1_1(data); goto case "2.0"; + case "2.0": data = MigrateFrom2_0(data); goto case "2.1"; + case "2.1": break; + default: + Debug.LogWarning($"[SaveMigrator] 未知存档版本 '{data.Meta.Version}',跳过迁移。"); + break; + } + data.Meta.Version = CurrentVersion; + return data; + } + + private static SaveData MigrateFrom1_0(SaveData d) + { + d.Equipment ??= new EquipmentSaveData(); + d.Player ??= new PlayerSaveData(); + d.World ??= new WorldSaveData(); + d.Equipment.UpgradedCharmIds ??= new List(); + return d; + } + + private static SaveData MigrateFrom1_1(SaveData d) + { + d.Stats ??= new StatsSaveData(); + d.Stats.SkillUseCounts ??= new Dictionary(); + if (d.Player.ShieldHP == 0 && !d.Player.ShieldIsBroken) + d.Player.ShieldHP = -1; + return d; + } + + private static SaveData MigrateFrom2_0(SaveData d) + { + // 2.0 → 2.1:Player.AbilityFlags (uint bitmask) 替换旧版 Dictionary Abilities + // 旧版若 AbilityFlags 为 0 且 ExtensionData 含 "Abilities" 字段,则转换 + if (d.Player.AbilityFlags == 0 && d.ExtensionData.ContainsKey("Abilities")) + { + // 此处仅清除旧字段,具体位掩码由 AbilitySystem 在 OnLoad 时根据 ExtrensionData 转换 + d.ExtensionData.Remove("Abilities"); + } + return d; + } + } +} diff --git a/Assets/Scripts/Core/Save/SaveMigrator.cs.meta b/Assets/Scripts/Core/Save/SaveMigrator.cs.meta new file mode 100644 index 0000000..8008f31 --- /dev/null +++ b/Assets/Scripts/Core/Save/SaveMigrator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93959fd98c4359d4198062ec532c6025 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/SceneLoader.cs b/Assets/Scripts/Core/SceneLoader.cs new file mode 100644 index 0000000..b8626d4 --- /dev/null +++ b/Assets/Scripts/Core/SceneLoader.cs @@ -0,0 +1,77 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.AddressableAssets; +using UnityEngine.ResourceManagement.AsyncOperations; +using UnityEngine.ResourceManagement.ResourceProviders; +using UnityEngine.SceneManagement; +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// + /// Addressables 场景加载器(Phase 0 骨架)。 + /// 监听 EVT_SceneLoadRequest,Additive 加载指定场景,完成后发布 EVT_SceneLoaded。 + /// Phase 1 完整实现由 SceneService 包装调用。 + /// + [DefaultExecutionOrder(-950)] + public class SceneLoader : MonoBehaviour + { + [Header("Event Channels - Listen")] + [SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; + + [Header("Event Channels - Raise")] + [SerializeField] private StringEventChannelSO _onSceneLoaded; + + private string _currentRoomScene; + private AsyncOperationHandle _currentHandle; + + private void OnEnable() + { + if (_onSceneLoadRequest != null) + _onSceneLoadRequest.OnEventRaised += HandleRequest; + } + + private void OnDisable() + { + if (_onSceneLoadRequest != null) + _onSceneLoadRequest.OnEventRaised -= HandleRequest; + } + + private void HandleRequest(SceneLoadRequest request) + => StartCoroutine(LoadSceneCoroutine(request)); + + private IEnumerator LoadSceneCoroutine(SceneLoadRequest request) + { + // 卸载旧场景 + if (!string.IsNullOrEmpty(_currentRoomScene) && _currentHandle.IsValid()) + { + var unloadOp = Addressables.UnloadSceneAsync(_currentHandle); + yield return unloadOp; + } + + // 加载新场景(Additive) + var loadOp = Addressables.LoadSceneAsync(request.SceneName, LoadSceneMode.Additive); + yield return loadOp; + + if (loadOp.Status == AsyncOperationStatus.Succeeded) + { + _currentHandle = loadOp; + _currentRoomScene = request.SceneName; + _onSceneLoaded?.Raise(request.SceneName); + } + else + { + Debug.LogError($"[SceneLoader] 加载场景失败:{request.SceneName}"); + } + } + + /// 手动卸载当前房间场景(供 SceneService 调用)。 + public IEnumerator UnloadCurrentCoroutine() + { + if (!_currentHandle.IsValid()) yield break; + var unloadOp = Addressables.UnloadSceneAsync(_currentHandle); + yield return unloadOp; + _currentRoomScene = null; + } + } +} diff --git a/Assets/Scripts/Core/SceneLoader.cs.meta b/Assets/Scripts/Core/SceneLoader.cs.meta new file mode 100644 index 0000000..962a95d --- /dev/null +++ b/Assets/Scripts/Core/SceneLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b42831baa74dfd4ebec8521f99f9861 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/SceneService.cs b/Assets/Scripts/Core/SceneService.cs new file mode 100644 index 0000000..c826ea5 --- /dev/null +++ b/Assets/Scripts/Core/SceneService.cs @@ -0,0 +1,92 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.SceneManagement; +using BaseGames.Core.Events; + +namespace BaseGames.Core +{ + /// + /// 场景管理服务接口。 + /// + public interface ISceneService + { + /// 异步加载指定场景(Additive)。 + IEnumerator LoadSceneCoroutine(SceneLoadRequest request); + /// 卸载当前房间场景(保留 Persistent)。 + IEnumerator UnloadCurrentRoomCoroutine(); + /// 加载主菜单。 + IEnumerator LoadMainMenuCoroutine(); + } + + /// + /// 场景管理服务(Phase 0 骨架,Phase 1 完整实现)。 + /// + [DefaultExecutionOrder(-900)] + public class SceneService : MonoBehaviour, ISceneService + { + [Header("Event Channels - Listen")] + [SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; + + [Header("Event Channels - Raise")] + [SerializeField] private StringEventChannelSO _onSceneLoaded; + [SerializeField] private VoidEventChannelSO _onFadeInRequest; + [SerializeField] private VoidEventChannelSO _onFadeOutRequest; + + [SerializeField] private float _fadeDuration = 0.3f; + + private string _currentRoomScene; + + private void OnEnable() + { + if (_onSceneLoadRequest != null) + _onSceneLoadRequest.OnEventRaised += HandleSceneLoadRequest; + } + + private void OnDisable() + { + if (_onSceneLoadRequest != null) + _onSceneLoadRequest.OnEventRaised -= HandleSceneLoadRequest; + } + + private void HandleSceneLoadRequest(SceneLoadRequest request) + => StartCoroutine(LoadSceneCoroutine(request)); + + public IEnumerator LoadSceneCoroutine(SceneLoadRequest request) + { + _onFadeOutRequest?.Raise(); + yield return new WaitForSeconds(_fadeDuration); + + if (!string.IsNullOrEmpty(_currentRoomScene)) + { + var unload = SceneManager.UnloadSceneAsync(_currentRoomScene); + yield return new WaitUntil(() => unload.isDone); + } + + var load = SceneManager.LoadSceneAsync(request.SceneName, LoadSceneMode.Additive); + yield return new WaitUntil(() => load.isDone); + + _currentRoomScene = request.SceneName; + _onSceneLoaded?.Raise(request.SceneName); + _onFadeInRequest?.Raise(); + } + + public IEnumerator UnloadCurrentRoomCoroutine() + { + if (string.IsNullOrEmpty(_currentRoomScene)) yield break; + var op = SceneManager.UnloadSceneAsync(_currentRoomScene); + yield return new WaitUntil(() => op.isDone); + _currentRoomScene = null; + } + + public IEnumerator LoadMainMenuCoroutine() + { + yield return LoadSceneCoroutine(new SceneLoadRequest + { + SceneName = "MainMenu", + EntryTransitionId = null, + ShowLoadingScreen = false, + IsRespawn = false + }); + } + } +} diff --git a/Assets/Scripts/Core/SceneService.cs.meta b/Assets/Scripts/Core/SceneService.cs.meta new file mode 100644 index 0000000..215dde3 --- /dev/null +++ b/Assets/Scripts/Core/SceneService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b767c64d10b3674db4a49ca56d3a524 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/ServiceLocator.cs b/Assets/Scripts/Core/ServiceLocator.cs new file mode 100644 index 0000000..39a4a56 --- /dev/null +++ b/Assets/Scripts/Core/ServiceLocator.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace BaseGames.Core +{ + /// + /// 轻量服务定位器。通过类型键注册/查找服务,支持接口类型注册(依赖倒置)。 + /// + public static class ServiceLocator + { + private static readonly Dictionary _services = new(); + + /// 以接口类型 TInterface 注册实现 impl。 + public static void Register(TInterface impl) + => _services[typeof(TInterface)] = impl; + + /// 仅当尚未注册时才注册(防多场景重复注册同一服务)。 + public static void RegisterIfAbsent(TInterface impl) + { + if (!_services.ContainsKey(typeof(TInterface))) + _services[typeof(TInterface)] = impl; + } + + /// 查找服务。未注册时抛出 InvalidOperationException。 + public static TInterface Get() + { + if (_services.TryGetValue(typeof(TInterface), out var svc) && svc is TInterface typed) + return typed; + throw new InvalidOperationException( + $"[ServiceLocator] Service '{typeof(TInterface).Name}' is not registered. " + + "Ensure GameServiceRegistrar.Awake() has run before this call."); + } + + /// 安全版 Get:未注册时返回 fallback,不报错(适用于可选服务)。 + public static TInterface GetOrDefault(TInterface fallback = default) + => _services.TryGetValue(typeof(TInterface), out var svc) && svc is TInterface typed + ? typed : fallback; + +#if UNITY_EDITOR + /// 单元测试中替换服务实现。 + public static void OverrideForTest(TInterface mock) + => _services[typeof(TInterface)] = mock; + + /// 清空所有注册(测试用)。 + public static void Reset() => _services.Clear(); +#endif + } +} diff --git a/Assets/Scripts/Core/ServiceLocator.cs.meta b/Assets/Scripts/Core/ServiceLocator.cs.meta new file mode 100644 index 0000000..b16f4f6 --- /dev/null +++ b/Assets/Scripts/Core/ServiceLocator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89a62da88ff5fbf46872aaaf10f111e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Core/SettingsManager.cs b/Assets/Scripts/Core/SettingsManager.cs new file mode 100644 index 0000000..dcdd051 --- /dev/null +++ b/Assets/Scripts/Core/SettingsManager.cs @@ -0,0 +1,96 @@ +using System.IO; +using UnityEngine; + +namespace BaseGames.Core +{ + /// + /// 全局设置管理器。从 GlobalSettingsSO 读取默认值,从文件加载用户覆盖。 + /// + [DefaultExecutionOrder(-800)] + public class SettingsManager : MonoBehaviour + { + private const string SettingsFileName = "settings.json"; + + [SerializeField] private GlobalSettingsSO _defaultSettings; + + private GlobalSettingsData _current; + private string SettingsFilePath => Path.Combine(Application.persistentDataPath, SettingsFileName); + + public GlobalSettingsData Current => _current; + + /// 由 GameManager.Awake 调用。读取设置文件,应用音量/分辨率。 + public void Initialize() + { + _current = Load() ?? _defaultSettings?.CreateDefault() ?? new GlobalSettingsData(); + Apply(_current); + } + + private GlobalSettingsData Load() + { + if (!File.Exists(SettingsFilePath)) return null; + try + { + var json = File.ReadAllText(SettingsFilePath); + return JsonUtility.FromJson(json); + } + catch + { + return null; + } + } + + public void Save() + { + try + { + var json = JsonUtility.ToJson(_current, true); + File.WriteAllText(SettingsFilePath, json); + } + catch (System.Exception e) + { + Debug.LogWarning($"[SettingsManager] 设置保存失败: {e.Message}"); + } + } + + private void Apply(GlobalSettingsData data) + { + QualitySettings.vSyncCount = data.VSync ? 1 : 0; + if (!data.VSync) Application.targetFrameRate = data.TargetFPS; + + if (data.FullScreen) + Screen.fullScreenMode = FullScreenMode.FullScreenWindow; + } + + // ── 音量设置(调用 AudioManager,Phase 1 接通)──────────────────── + public void SetMasterVolume(float v) { _current.MasterVolume = v; Save(); } + public void SetBGMVolume(float v) { _current.BGMVolume = v; Save(); } + public void SetSFXVolume(float v) { _current.SFXVolume = v; Save(); } + public void SetAmbientVolume(float v) { _current.AmbientVolume = v; Save(); } + + // ── 画面设置 ────────────────────────────────────────────────────── + public void SetResolution(int w, int h, FullScreenMode mode) + { + Screen.SetResolution(w, h, mode); + _current.FullScreen = (mode != FullScreenMode.Windowed); + Save(); + } + public void SetVSync(bool enabled) + { + _current.VSync = enabled; + QualitySettings.vSyncCount = enabled ? 1 : 0; + Save(); + } + public void SetTargetFrameRate(int fps) + { + _current.TargetFPS = fps; + if (!_current.VSync) Application.targetFrameRate = fps; + Save(); + } + + public void SetLanguage(string localeCode) + { + _current.Language = localeCode; + Save(); + } + } +} diff --git a/Assets/Scripts/Core/SettingsManager.cs.meta b/Assets/Scripts/Core/SettingsManager.cs.meta new file mode 100644 index 0000000..0358375 --- /dev/null +++ b/Assets/Scripts/Core/SettingsManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7577622ae919cb4e93592d1350a727e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Cutscene.meta b/Assets/Scripts/Cutscene.meta new file mode 100644 index 0000000..ca7cccf --- /dev/null +++ b/Assets/Scripts/Cutscene.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24c087c3e8157f04294e62f21dc4d990 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Cutscene/.gitkeep b/Assets/Scripts/Cutscene/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Cutscene/BaseGames.Cutscene.asmdef b/Assets/Scripts/Cutscene/BaseGames.Cutscene.asmdef new file mode 100644 index 0000000..5c97df2 --- /dev/null +++ b/Assets/Scripts/Cutscene/BaseGames.Cutscene.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Cutscene", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Cutscene", + "references": [ + "BaseGames.Core.Events", + "BaseGames.Dialogue" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Cutscene/BaseGames.Cutscene.asmdef.meta b/Assets/Scripts/Cutscene/BaseGames.Cutscene.asmdef.meta new file mode 100644 index 0000000..1c5e1f8 --- /dev/null +++ b/Assets/Scripts/Cutscene/BaseGames.Cutscene.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 98658744f571e9648812bb41c49f672e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Cutscene/_Placeholder.cs b/Assets/Scripts/Cutscene/_Placeholder.cs new file mode 100644 index 0000000..92604f1 --- /dev/null +++ b/Assets/Scripts/Cutscene/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Cutscene { } + diff --git a/Assets/Scripts/Cutscene/_Placeholder.cs.meta b/Assets/Scripts/Cutscene/_Placeholder.cs.meta new file mode 100644 index 0000000..32606f8 --- /dev/null +++ b/Assets/Scripts/Cutscene/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cbf67024d1a0404183a606fe02f3e48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Dialogue.meta b/Assets/Scripts/Dialogue.meta new file mode 100644 index 0000000..71e5609 --- /dev/null +++ b/Assets/Scripts/Dialogue.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4c0d68ab08e411d429e801b937690c2d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Dialogue/.gitkeep b/Assets/Scripts/Dialogue/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Dialogue/BaseGames.Dialogue.asmdef b/Assets/Scripts/Dialogue/BaseGames.Dialogue.asmdef new file mode 100644 index 0000000..8c804ee --- /dev/null +++ b/Assets/Scripts/Dialogue/BaseGames.Dialogue.asmdef @@ -0,0 +1,16 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Dialogue", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Dialogue", + "references": [ + "BaseGames.Core.Events" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Dialogue/BaseGames.Dialogue.asmdef.meta b/Assets/Scripts/Dialogue/BaseGames.Dialogue.asmdef.meta new file mode 100644 index 0000000..b43959b --- /dev/null +++ b/Assets/Scripts/Dialogue/BaseGames.Dialogue.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bd8344dc5b8343745a71a109668ac156 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Dialogue/DialogueDataSO.cs b/Assets/Scripts/Dialogue/DialogueDataSO.cs new file mode 100644 index 0000000..5c77e18 --- /dev/null +++ b/Assets/Scripts/Dialogue/DialogueDataSO.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace BaseGames.Dialogue +{ + /// + /// 对话数据 ScriptableObject(存根)。 + /// Phase 3 Dialogue 模块实现时填充完整字段(对话行、Speaker、选项分支等)。 + /// 此处仅声明类型,供 DialogueEventChannelSO 引用。 + /// + [CreateAssetMenu(menuName = "Dialogue/DialogueData")] + public class DialogueDataSO : ScriptableObject + { + [Tooltip("对话资产的唯一标识符,对应存档中 NPC 对话进度记录。")] + public string dialogueId; + + [Tooltip("对话参与者名称(用于 HUD 说话人名牌)。")] + public string speakerName; + + [TextArea(3, 8)] + [Tooltip("Phase 3 前的占位文本;正式内容在 DialogueLineSO[] 中定义。")] + public string placeholderText; + } +} diff --git a/Assets/Scripts/Dialogue/DialogueDataSO.cs.meta b/Assets/Scripts/Dialogue/DialogueDataSO.cs.meta new file mode 100644 index 0000000..46f991f --- /dev/null +++ b/Assets/Scripts/Dialogue/DialogueDataSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eaa9eb52b2d83984ebfb2f7189e4f3f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Dialogue/DialogueEventChannelSO.cs b/Assets/Scripts/Dialogue/DialogueEventChannelSO.cs new file mode 100644 index 0000000..c381c8a --- /dev/null +++ b/Assets/Scripts/Dialogue/DialogueEventChannelSO.cs @@ -0,0 +1,14 @@ +using BaseGames.Core.Events; +using UnityEngine; + +namespace BaseGames.Dialogue +{ + /// + /// 对话请求事件频道(EVT_DialogueStartRequest)。 + /// ⚠️ 负载为 DialogueDataSO(SO 引用),不是 struct,避免序列化开销。 + /// 发布:NpcInteractable(玩家触发互动)、CutsceneTrigger + /// 订阅:DialogueController(弹出对话 UI 并开始播放) + /// + [CreateAssetMenu(menuName = "Events/Dialogue/DialogueStartRequest")] + public class DialogueEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Dialogue/DialogueEventChannelSO.cs.meta b/Assets/Scripts/Dialogue/DialogueEventChannelSO.cs.meta new file mode 100644 index 0000000..61138da --- /dev/null +++ b/Assets/Scripts/Dialogue/DialogueEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4929240a254c7d9418b239971866e6af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor.meta b/Assets/Scripts/Editor.meta new file mode 100644 index 0000000..5db3d41 --- /dev/null +++ b/Assets/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 98eaf746081380d4fa1838aac5e13dca +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor/.gitkeep b/Assets/Scripts/Editor/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Editor/AddressKeyValidator.cs b/Assets/Scripts/Editor/AddressKeyValidator.cs new file mode 100644 index 0000000..5f99b8d --- /dev/null +++ b/Assets/Scripts/Editor/AddressKeyValidator.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor.AddressableAssets; +using UnityEditor.AddressableAssets.Settings; +#endif + +namespace BaseGames.Editor +{ + /// + /// Editor 工具:验证 中所有常量 + /// 是否与 Addressable 分组中实际存在的地址同步(架构 13_AssetPoolModule §10)。 + /// + /// 菜单:BaseGames → Tools → Validate Address Keys + /// + public static class AddressKeyValidator + { + [MenuItem("BaseGames/Tools/Validate Address Keys")] + public static void ValidateAll() + { + var results = RunValidation(); + LogResults(results); + } + + /// + /// 执行验证,返回每个 key 的验证结果。供 Build Pre-process 或测试调用。 + /// + public static List RunValidation() + { + var results = new List(); + var registeredAddresses = GetAllAddressableAddresses(); + + // 通过反射取出 AddressKeys 中所有 public const string 字段 + var keyType = typeof(BaseGames.Core.Assets.AddressKeys); + var fields = keyType.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy) + .Where(f => f.IsLiteral && !f.IsInitOnly && f.FieldType == typeof(string)); + + foreach (var field in fields) + { + var value = (string)field.GetRawConstantValue(); + var exists = registeredAddresses.Contains(value); + results.Add(new ValidationResult(field.Name, value, exists)); + } + + return results; + } + + // ── Internal ────────────────────────────────────────────────────────── + + private static HashSet GetAllAddressableAddresses() + { + var addresses = new HashSet(StringComparer.Ordinal); + +#if UNITY_EDITOR + var settings = AddressableAssetSettingsDefaultObject.Settings; + if (settings == null) + { + Debug.LogWarning("[AddressKeyValidator] Addressable Settings 未找到,请先初始化 Addressables。"); + return addresses; + } + + foreach (var group in settings.groups) + { + if (group == null) continue; + foreach (var entry in group.entries) + { + if (entry != null) + addresses.Add(entry.address); + } + } +#endif + return addresses; + } + + private static void LogResults(List results) + { + int missing = 0; + foreach (var r in results) + { + if (!r.ExistsInAddressables) + { + Debug.LogWarning($"[AddressKeyValidator] ⚠ 孤儿 Key:AddressKeys.{r.FieldName} = \"{r.Value}\" — 未在 Addressable 分组中找到对应地址。"); + missing++; + } + } + + if (missing == 0) + Debug.Log($"[AddressKeyValidator] ✓ 所有 {results.Count} 个 AddressKeys 常量均在 Addressable 分组中存在。"); + else + Debug.LogWarning($"[AddressKeyValidator] 共 {results.Count} 个常量,发现 {missing} 个孤儿 Key,请检查 Addressable 分组配置。"); + } + + // ── 结果结构 ────────────────────────────────────────────────────────── + + public readonly struct ValidationResult + { + public readonly string FieldName; + public readonly string Value; + public readonly bool ExistsInAddressables; + + public ValidationResult(string fieldName, string value, bool exists) + { + FieldName = fieldName; + Value = value; + ExistsInAddressables = exists; + } + } + } + + /// + /// 资产导入后自动触发 AddressKey 验证(架构 13_AssetPoolModule §10)。 + /// 仅在 Addressable Group 资产发生变更时触发,避免每次导入都验证。 + /// + public class AddressKeyImportWatcher : AssetPostprocessor + { + private const string AddressableGroupAssetExt = ".asset"; + private const string AddressableGroupFolder = "Assets/AddressableAssetsData"; + + private static void OnPostprocessAllAssets( + string[] importedAssets, + string[] deletedAssets, + string[] movedAssets, + string[] movedFromAssetPaths) + { + bool addressablesChanged = false; + + foreach (var path in importedAssets) + { + if (path.StartsWith(AddressableGroupFolder, StringComparison.OrdinalIgnoreCase) + && path.EndsWith(AddressableGroupAssetExt, StringComparison.OrdinalIgnoreCase)) + { + addressablesChanged = true; + break; + } + } + + if (!addressablesChanged) + { + foreach (var path in deletedAssets) + { + if (path.StartsWith(AddressableGroupFolder, StringComparison.OrdinalIgnoreCase)) + { + addressablesChanged = true; + break; + } + } + } + + if (addressablesChanged) + { + // 延迟一帧执行,等待 AssetDatabase 完全刷新 + EditorApplication.delayCall += () => + { + Debug.Log("[AddressKeyImportWatcher] 检测到 Addressable 分组变更,自动触发 Key 验证..."); + AddressKeyValidator.ValidateAll(); + }; + } + } + } +} diff --git a/Assets/Scripts/Editor/AddressKeyValidator.cs.meta b/Assets/Scripts/Editor/AddressKeyValidator.cs.meta new file mode 100644 index 0000000..9726b8c --- /dev/null +++ b/Assets/Scripts/Editor/AddressKeyValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d43f71baaed2b5443a8c9f05f0a8e441 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor/BaseGames.Editor.asmdef b/Assets/Scripts/Editor/BaseGames.Editor.asmdef new file mode 100644 index 0000000..046e957 --- /dev/null +++ b/Assets/Scripts/Editor/BaseGames.Editor.asmdef @@ -0,0 +1,32 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Editor", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Editor", + "references": [ + "BaseGames.Core", + "BaseGames.Core.Events", + "Unity.Addressables", + "Unity.Addressables.Editor", + "BaseGames.Core.Save", + "BaseGames.Input", + "BaseGames.Combat", + "BaseGames.Player", + "BaseGames.Enemies", + "BaseGames.World", + "BaseGames.UI", + "BaseGames.Audio", + "BaseGames.Feedback", + "BaseGames.Dialogue", + "BaseGames.Progression" + ], + "autoReferenced": false, + "overrideReferences": false, + "includePlatforms": [ + "Editor" + ] +} diff --git a/Assets/Scripts/Editor/BaseGames.Editor.asmdef.meta b/Assets/Scripts/Editor/BaseGames.Editor.asmdef.meta new file mode 100644 index 0000000..2c47ba3 --- /dev/null +++ b/Assets/Scripts/Editor/BaseGames.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0cb7f1698076b424bbbf87d8789ca0ed +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor/CreateEventChannelAssets.cs b/Assets/Scripts/Editor/CreateEventChannelAssets.cs new file mode 100644 index 0000000..f2e5a47 --- /dev/null +++ b/Assets/Scripts/Editor/CreateEventChannelAssets.cs @@ -0,0 +1,141 @@ +using UnityEngine; +using UnityEditor; +using BaseGames.Core.Events; +using BaseGames.Combat; +using BaseGames.Player; +using BaseGames.Dialogue; +using BaseGames.Progression; +using System.IO; + +namespace BaseGames.Editor +{ + /// + /// Editor 工具:一键在 Assets/Data/Events/ 下生成所有全局事件频道 .asset 资产。 + /// 菜单:BaseGames → Tools → Create Event Channel Assets + /// 已存在的资产会自动跳过(幂等)。 + /// + public static class CreateEventChannelAssets + { + private const string RootPath = "Assets/Data/Events"; + + [MenuItem("BaseGames/Tools/Create Event Channel Assets")] + public static void CreateAll() + { + // ── Core 原始类型频道 ────────────────────────────────────────────── + CreateAsset ("Core", "EVT_Void"); + CreateAsset ("Core", "EVT_Bool"); + CreateAsset ("Core", "EVT_Int"); + CreateAsset ("Core", "EVT_Float"); + CreateAsset ("Core", "EVT_String"); + CreateAsset ("Core", "EVT_Vector2"); + CreateAsset ("Core", "EVT_Transform"); + CreateAsset ("Core", "EVT_GameState"); + CreateAsset("Core", "EVT_SceneLoadRequest"); + + // ── 难度 ────────────────────────────────────────────────────────── + CreateAsset("Difficulty", "EVT_DifficultyChanged"); + + // ── 战斗 ────────────────────────────────────────────────────────── + CreateAsset ("Combat", "EVT_HitConfirmed"); + CreateAsset ("Combat", "EVT_PlayerDied"); + CreateAsset ("Combat", "EVT_EnemyDied"); + CreateAsset ("Combat", "EVT_ParrySuccess"); + CreateAsset ("Combat", "EVT_PlayerRespawn"); + + // ── Boss ────────────────────────────────────────────────────────── + CreateAsset ("Boss", "EVT_BossSkill"); + CreateAsset ("Boss", "EVT_BossPhase"); + CreateAsset ("Boss", "EVT_StatusEffect"); + + // ── 任务 ────────────────────────────────────────────────────────── + CreateAsset("Quest", "EVT_QuestStateChanged"); + CreateAsset ("Quest", "EVT_QuestObjective"); + + // ── UI ──────────────────────────────────────────────────────────── + CreateAsset ("UI", "EVT_PauseRequested"); + CreateAsset ("UI", "EVT_PauseResumed"); + CreateAsset ("UI", "EVT_ColorblindMode"); + + // ── 对话/商店 ───────────────────────────────────────────────────── + CreateAsset ("Dialogue", "EVT_ShopPurchase"); + CreateAsset ("Dialogue", "EVT_DialogueStartRequest"); + CreateAsset ("Dialogue", "EVT_DialogueEnded"); + + // ── 玩家能力 ────────────────────────────────────────────────────── + CreateAsset ("Player", "EVT_AbilityUnlocked"); + CreateAsset ("Player", "EVT_AbilityUnlockedStr"); + + // ── 音频 ────────────────────────────────────────────────────────── + CreateAsset ("Audio", "EVT_BGMRequest"); + CreateAsset ("Audio", "EVT_BGMStop"); + + // ── 进度/成就 ───────────────────────────────────────────────────── + CreateAsset ("Progression", "EVT_ToolUsed"); + CreateAsset ("Progression", "EVT_AchievementUnlocked"); + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + Debug.Log("[CreateEventChannelAssets] 所有事件频道资产生成完毕。"); + } + + [MenuItem("BaseGames/Tools/Reimport Event Channel Assets")] + public static void ReimportAllEventAssets() + { + if (!AssetDatabase.IsValidFolder(RootPath)) + { + Debug.LogWarning($"[CreateEventChannelAssets] 未找到目录: {RootPath}"); + return; + } + + string absoluteRoot = Path.Combine(Directory.GetCurrentDirectory(), RootPath); + string[] files = Directory.GetFiles(absoluteRoot, "*.asset", SearchOption.AllDirectories); + + int count = 0; + foreach (string file in files) + { + string relativePath = "Assets" + file.Replace('\\', '/').Substring(Directory.GetCurrentDirectory().Length); + AssetDatabase.ImportAsset(relativePath, ImportAssetOptions.ForceUpdate); + count++; + } + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + Debug.Log($"[CreateEventChannelAssets] 已重导入 {count} 个事件资产。"); + } + + private static void CreateAsset(string subfolder, string assetName) where T : ScriptableObject + { + string folderPath = $"{RootPath}/{subfolder}"; + EnsureDirectory(folderPath); + + string fullPath = $"{folderPath}/{assetName}.asset"; + if (AssetDatabase.LoadAssetAtPath(fullPath) != null) + { + Debug.Log($"[CreateEventChannelAssets] 已跳过(已存在): {fullPath}"); + return; + } + + T asset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(asset, fullPath); + Debug.Log($"[CreateEventChannelAssets] 已创建: {fullPath}"); + } + + /// 递归创建所有缺失的中间文件夹(兼容 AssetDatabase)。 + private static void EnsureDirectory(string path) + { + if (AssetDatabase.IsValidFolder(path)) + return; + + string[] parts = path.Split('/'); + string current = parts[0]; + for (int i = 1; i < parts.Length; i++) + { + string next = $"{current}/{parts[i]}"; + if (!AssetDatabase.IsValidFolder(next)) + AssetDatabase.CreateFolder(current, parts[i]); + current = next; + } + } + } +} diff --git a/Assets/Scripts/Editor/CreateEventChannelAssets.cs.meta b/Assets/Scripts/Editor/CreateEventChannelAssets.cs.meta new file mode 100644 index 0000000..6a3a79a --- /dev/null +++ b/Assets/Scripts/Editor/CreateEventChannelAssets.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8c6f33a6c3ce1f6469e1a2ac17c95b6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Editor/_Placeholder.cs b/Assets/Scripts/Editor/_Placeholder.cs new file mode 100644 index 0000000..0cf4413 --- /dev/null +++ b/Assets/Scripts/Editor/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Editor { } + diff --git a/Assets/Scripts/Editor/_Placeholder.cs.meta b/Assets/Scripts/Editor/_Placeholder.cs.meta new file mode 100644 index 0000000..7ee37a3 --- /dev/null +++ b/Assets/Scripts/Editor/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efa269d575c20564089e0ae4009e7157 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies.meta b/Assets/Scripts/Enemies.meta new file mode 100644 index 0000000..7f90cdd --- /dev/null +++ b/Assets/Scripts/Enemies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ab0dc45380abbd4da3657fb569a62b8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/AI.meta b/Assets/Scripts/Enemies/AI.meta new file mode 100644 index 0000000..212118fc --- /dev/null +++ b/Assets/Scripts/Enemies/AI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 458bf9c7d1eae52438922d9630862656 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/AI/.gitkeep b/Assets/Scripts/Enemies/AI/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Enemies/AI/BD_Attack.cs b/Assets/Scripts/Enemies/AI/BD_Attack.cs new file mode 100644 index 0000000..814cf2b --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BD_Attack.cs @@ -0,0 +1,31 @@ +#if GRAPH_DESIGNER +using Opsive.BehaviorDesigner.Runtime.Tasks; +using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; +using BaseGames.Enemies; + +namespace BaseGames.Enemies.AI +{ + /// + /// BD Action:发动攻击。 + /// CanAttack() 检查通过后调用 BeginAttack,立即返回 Success。 + /// + public class BD_Attack : Action + { + private EnemyBase _enemy; + + public override void OnStart() + { + _enemy = GetComponent(); + } + + public override TaskStatus OnUpdate() + { + if (_enemy == null || !_enemy.CanAttack()) + return TaskStatus.Failure; + + _enemy.BeginAttack(AttackType.Melee); + return TaskStatus.Success; + } + } +} +#endif diff --git a/Assets/Scripts/Enemies/AI/BD_Attack.cs.meta b/Assets/Scripts/Enemies/AI/BD_Attack.cs.meta new file mode 100644 index 0000000..0cde3dd --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BD_Attack.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6129e08d8bc28a24ebfb02c246e2e744 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/AI/BD_IsPlayerInRange.cs b/Assets/Scripts/Enemies/AI/BD_IsPlayerInRange.cs new file mode 100644 index 0000000..1b7e5b5 --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BD_IsPlayerInRange.cs @@ -0,0 +1,31 @@ +#if GRAPH_DESIGNER +using Opsive.BehaviorDesigner.Runtime.Tasks; +using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; +using BaseGames.Enemies; + +namespace BaseGames.Enemies.AI +{ + /// + /// BD Conditional:检查玩家是否在指定范围内。 + /// 成功/失败直接驱动 BT 分支选择(Selector / Sequence 节点)。 + /// + public class BD_IsPlayerInRange : Conditional + { + /// 检测范围(Inspector 可配置,默认 6 米)。 + public float Range = 6f; + + private EnemyBase _enemy; + + public override void OnStart() + { + _enemy = GetComponent(); + } + + public override TaskStatus OnUpdate() + { + if (_enemy == null) return TaskStatus.Failure; + return _enemy.IsPlayerInRange(Range) ? TaskStatus.Success : TaskStatus.Failure; + } + } +} +#endif diff --git a/Assets/Scripts/Enemies/AI/BD_IsPlayerInRange.cs.meta b/Assets/Scripts/Enemies/AI/BD_IsPlayerInRange.cs.meta new file mode 100644 index 0000000..b763b14 --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BD_IsPlayerInRange.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d176aa20179c6b43a6798432eb073a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/AI/BD_MoveToPlayer.cs b/Assets/Scripts/Enemies/AI/BD_MoveToPlayer.cs new file mode 100644 index 0000000..7576c57 --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BD_MoveToPlayer.cs @@ -0,0 +1,41 @@ +#if GRAPH_DESIGNER +using UnityEngine; +using Opsive.BehaviorDesigner.Runtime.Tasks; +using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; +using BaseGames.Enemies; + +namespace BaseGames.Enemies.AI +{ + /// + /// BD Action:移向玩家。 + /// OnStart 缓存玩家 Transform,OnUpdate 每帧更新导航目标。 + /// + public class BD_MoveToPlayer : Action + { + private EnemyBase _enemy; + private Transform _playerTransform; + + public override void OnStart() + { + _enemy = GetComponent(); + var playerGO = GameObject.FindWithTag("Player"); + if (playerGO != null) _playerTransform = playerGO.transform; + } + + public override TaskStatus OnUpdate() + { + if (_enemy == null) return TaskStatus.Failure; + if (_playerTransform == null) return TaskStatus.Failure; + + _enemy.MoveTo(_playerTransform.position); + _enemy.FacePlayer(); + return TaskStatus.Running; + } + + public override void OnEnd() + { + _enemy?.StopMovement(); + } + } +} +#endif diff --git a/Assets/Scripts/Enemies/AI/BD_MoveToPlayer.cs.meta b/Assets/Scripts/Enemies/AI/BD_MoveToPlayer.cs.meta new file mode 100644 index 0000000..6112547 --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BD_MoveToPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67b2f5400ef71aa4fae183cf1ce1e649 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/AI/BD_Patrol.cs b/Assets/Scripts/Enemies/AI/BD_Patrol.cs new file mode 100644 index 0000000..4b33ca0 --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BD_Patrol.cs @@ -0,0 +1,35 @@ +#if GRAPH_DESIGNER +using Opsive.BehaviorDesigner.Runtime.Tasks; +using Opsive.BehaviorDesigner.Runtime.Tasks.Actions; +using BaseGames.Enemies; + +namespace BaseGames.Enemies.AI +{ + /// + /// BD Action:敌人巡逻行为(Phase 1 简单实现)。 + /// 挂在 BT 节点上,持续令敌人向当前朝向移动。 + /// + public class BD_Patrol : Action + { + private EnemyBase _enemy; + + public override void OnStart() + { + _enemy = GetComponent(); + } + + public override TaskStatus OnUpdate() + { + if (_enemy == null) return TaskStatus.Failure; + // Phase 1:固定向右巡逻;Phase 2 改为往返检测 + _enemy.MoveInDirection(1f); + return TaskStatus.Running; + } + + public override void OnEnd() + { + _enemy?.StopMovement(); + } + } +} +#endif diff --git a/Assets/Scripts/Enemies/AI/BD_Patrol.cs.meta b/Assets/Scripts/Enemies/AI/BD_Patrol.cs.meta new file mode 100644 index 0000000..304223a --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BD_Patrol.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0fd85d7c7ce18f4193bb3b70707d055 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef b/Assets/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef new file mode 100644 index 0000000..10693e8 --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Enemies.AI", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Enemies.AI", + "references": [ + "BaseGames.Enemies", + "Opsive.BehaviorDesigner.Runtime" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef.meta b/Assets/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef.meta new file mode 100644 index 0000000..4e3da5a --- /dev/null +++ b/Assets/Scripts/Enemies/AI/BaseGames.Enemies.AI.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c2f7ab9cf613d0c4fb44cdd94fea551f +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/AI/_Placeholder.cs b/Assets/Scripts/Enemies/AI/_Placeholder.cs new file mode 100644 index 0000000..9719981 --- /dev/null +++ b/Assets/Scripts/Enemies/AI/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Enemies.AI { } + diff --git a/Assets/Scripts/Enemies/AI/_Placeholder.cs.meta b/Assets/Scripts/Enemies/AI/_Placeholder.cs.meta new file mode 100644 index 0000000..8e790e9 --- /dev/null +++ b/Assets/Scripts/Enemies/AI/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e18876511cb4b9e4ab43cbce1215c72c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/BaseGames.Enemies.asmdef b/Assets/Scripts/Enemies/BaseGames.Enemies.asmdef new file mode 100644 index 0000000..4646174 --- /dev/null +++ b/Assets/Scripts/Enemies/BaseGames.Enemies.asmdef @@ -0,0 +1,21 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Enemies", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Enemies", + "references": [ + "BaseGames.Core", + "BaseGames.Core.Events", + "BaseGames.Combat", + "BaseGames.Feedback", + "MoreMountains.Tools", + "Kybernetik.Animancer" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Enemies/BaseGames.Enemies.asmdef.meta b/Assets/Scripts/Enemies/BaseGames.Enemies.asmdef.meta new file mode 100644 index 0000000..e8e56dd --- /dev/null +++ b/Assets/Scripts/Enemies/BaseGames.Enemies.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8ecc7c40216aa154f81faf49c6d655de +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/Boss.meta b/Assets/Scripts/Enemies/Boss.meta new file mode 100644 index 0000000..71f8fb7 --- /dev/null +++ b/Assets/Scripts/Enemies/Boss.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe0b3fb5ffe55d84a86db3085bd868f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/Boss/Patterns.meta b/Assets/Scripts/Enemies/Boss/Patterns.meta new file mode 100644 index 0000000..a881eff --- /dev/null +++ b/Assets/Scripts/Enemies/Boss/Patterns.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d8f5f23ee1dde046b1a7361ac1b6386 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/Boss/Patterns/.gitkeep b/Assets/Scripts/Enemies/Boss/Patterns/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Enemies/Boss/Patterns/BaseGames.Enemies.Boss.Patterns.asmdef b/Assets/Scripts/Enemies/Boss/Patterns/BaseGames.Enemies.Boss.Patterns.asmdef new file mode 100644 index 0000000..b0c0e55 --- /dev/null +++ b/Assets/Scripts/Enemies/Boss/Patterns/BaseGames.Enemies.Boss.Patterns.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Enemies.Boss.Patterns", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Enemies.Boss.Patterns", + "references": [ + "BaseGames.Enemies", + "BaseGames.Combat" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Enemies/Boss/Patterns/BaseGames.Enemies.Boss.Patterns.asmdef.meta b/Assets/Scripts/Enemies/Boss/Patterns/BaseGames.Enemies.Boss.Patterns.asmdef.meta new file mode 100644 index 0000000..0bab4b5 --- /dev/null +++ b/Assets/Scripts/Enemies/Boss/Patterns/BaseGames.Enemies.Boss.Patterns.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8bc3529e552a34a45998814c7cd056e6 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/Boss/Patterns/_Placeholder.cs b/Assets/Scripts/Enemies/Boss/Patterns/_Placeholder.cs new file mode 100644 index 0000000..1b5eb03 --- /dev/null +++ b/Assets/Scripts/Enemies/Boss/Patterns/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Enemies.Boss.Patterns { } + diff --git a/Assets/Scripts/Enemies/Boss/Patterns/_Placeholder.cs.meta b/Assets/Scripts/Enemies/Boss/Patterns/_Placeholder.cs.meta new file mode 100644 index 0000000..b5fbd1e --- /dev/null +++ b/Assets/Scripts/Enemies/Boss/Patterns/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 17b436090127a5d4b88e51b077f2cdb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/EnemyAnimationConfigSO.cs b/Assets/Scripts/Enemies/EnemyAnimationConfigSO.cs new file mode 100644 index 0000000..318d4b0 --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyAnimationConfigSO.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace BaseGames.Enemies +{ + /// + /// 敌人动画配置 SO(架构 07_EnemyModule §5)。 + /// 所有字段为 AnimationClip,由 Animancer 直接播放。 + /// + [CreateAssetMenu(menuName = "Enemies/AnimationConfig")] + public class EnemyAnimationConfigSO : ScriptableObject + { + [Header("基础")] + public AnimationClip Idle; + public AnimationClip Walk; + public AnimationClip Run; + + [Header("战斗")] + public AnimationClip Attack; + + [Header("受击")] + public AnimationClip Hurt; + public AnimationClip Dead; + } +} diff --git a/Assets/Scripts/Enemies/EnemyAnimationConfigSO.cs.meta b/Assets/Scripts/Enemies/EnemyAnimationConfigSO.cs.meta new file mode 100644 index 0000000..5b031ec --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyAnimationConfigSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7dd720bca19fcc49b22106fb65f7652 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/EnemyBase.cs b/Assets/Scripts/Enemies/EnemyBase.cs new file mode 100644 index 0000000..a71dbd6 --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyBase.cs @@ -0,0 +1,164 @@ +using UnityEngine; +using Animancer; +using BaseGames.Combat; + +namespace BaseGames.Enemies +{ + /// + /// 敌人基类(架构 07_EnemyModule §1)。 + /// 实现 IDamageable,为 Behavior Designer 任务提供统一虚方法接口。 + /// Phase 1 实现:完整骨架,BD 接口、受击、死亡流程。 + /// ⚠️ _nav 字段类型为 IPathAgent(在 BaseGames.Enemies.Navigation 中实现具体类)。 + /// + public class EnemyBase : MonoBehaviour, IDamageable + { + [Header("配置 SO")] + [SerializeField] protected EnemyStatsSO _statsSO; + [SerializeField] protected EnemyAnimationConfigSO _animConfig; + + [Header("子组件(Prefab Inspector 绑定)")] + [SerializeField] protected EnemyStats _stats; + [SerializeField] protected EnemyMovement _movement; + [SerializeField] protected EnemyCombat _combat; + [SerializeField] protected AnimancerComponent _animancer; + [SerializeField] protected EnemyFeedback _feedback; + [SerializeField] protected HurtBox _hurtBox; + + [Header("事件频道")] + [SerializeField] private BaseGames.Core.Events.TransformEventChannelSO _onEnemyDied; + + // ── 导航代理(IPathAgent;由 EnemyNavAgent 实现)─────────────────── + // Phase 1:通过接口引用,避免对 Navigation 程序集的直接依赖。 + // 由子类 / Inspector 注入,或者运行时 GetComponent() 获取。 + protected IPathAgent _nav; + + // ── 状态 ────────────────────────────────────────────────────────── + private EnemyStateType _currentState; + public EnemyStateType CurrentState => _currentState; + + // ── IDamageable ─────────────────────────────────────────────────── + public bool IsInvincible => _currentState == EnemyStateType.Dead; + public int Defense => _stats != null ? _stats.Defense : 0; + + public void TakeDamage(DamageInfo info) + { + if (_currentState == EnemyStateType.Dead) return; + + _stats?.TakeDamage(info.FinalDamage); + _feedback?.OnHit(info); + + if (_stats != null && _stats.CurrentHP <= 0) + { + Die(); + return; + } + + // Phase 2:根据霸体结果选 Stagger / Hurt + ForceState(EnemyStateType.Hurt); + } + + // ── BD 行为树接口(虚方法)──────────────────────────────────────── + + public virtual void MoveTo(Vector2 target) + => _nav?.RequestMoveTo(target); + + public virtual void MoveInDirection(float dir) + => _movement?.MoveHorizontal(dir); + + public virtual void StopMovement() + { + _nav?.StopNavigation(); + _movement?.StopHorizontal(); + } + + public virtual void BeginAttack(AttackType type) + { + _combat?.StartAttack(type); + _stats?.ResetAttackCooldown(); + } + + public virtual bool CanAttack() + => _stats != null && _stats.AttackCooldownTimer <= 0f; + + public virtual bool IsPlayerInRange(float range) + => _stats != null && _stats.DistanceToPlayer <= range; + + public virtual void FacePlayer() + { + if (_playerTransform != null) + _movement?.FaceTarget(_playerTransform.position); + } + + public virtual void Knockback(DamageInfo info) + { + if (info.Flags.HasFlag(DamageFlags.NoKnockback)) return; + _movement?.ApplyKnockback(info.KnockbackDirection, info.KnockbackForce); + } + + // ── 状态控制 ────────────────────────────────────────────────────── + public void ForceState(EnemyStateType newState) + { + _currentState = newState; + // Phase 2:根据状态播放对应动画 / 触发硬直计时 + } + + // ── Unity 生命周期 ──────────────────────────────────────────────── + protected virtual void Awake() + { + _nav = GetComponent() ?? new NullPathAgent(); + + if (_stats != null && _statsSO != null) + _stats.Initialize(_statsSO); + + // Phase 1:简单查找玩家;Phase 2 改为事件频道订阅 + var playerGO = GameObject.FindWithTag("Player"); + if (playerGO != null) _playerTransform = playerGO.transform; + } + + protected virtual void Update() + { + _stats?.TickAttackCooldown(Time.deltaTime); + + if (_playerTransform != null && _stats != null) + _stats.DistanceToPlayer = Vector2.Distance(transform.position, _playerTransform.position); + } + + protected virtual void Start() + { + // 播放 Idle 动画(若 Animancer 和配置都就绪) + if (_animancer != null && _animConfig != null && _animConfig.Idle != null) + _animancer.Play(_animConfig.Idle); + } + + // ── 内部 ────────────────────────────────────────────────────────── + private Transform _playerTransform; + + protected virtual void Die() + { + if (_currentState == EnemyStateType.Dead) return; + ForceState(EnemyStateType.Dead); + + // 禁用所有碰撞体 + foreach (var col in GetComponentsInChildren()) + col.enabled = false; + + // 播放死亡动画 + if (_animancer != null && _animConfig != null && _animConfig.Dead != null) + { + var state = _animancer.Play(_animConfig.Dead); + state.Events(this).OnEnd = () => Destroy(gameObject); + } + else + { + Destroy(gameObject, 1.5f); + } + + _feedback?.OnDeath(); + _onEnemyDied?.Raise(transform); + } + } + + // ── 枚举(架构 07 §1)──────────────────────────────────────────────── + public enum EnemyStateType { Controlled, Hurt, Stagger, Dead } + public enum AttackType { Melee, Ranged, Special } +} diff --git a/Assets/Scripts/Enemies/EnemyBase.cs.meta b/Assets/Scripts/Enemies/EnemyBase.cs.meta new file mode 100644 index 0000000..1734903 --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a2dbfbcc31a4c34cbd3ac893f02e07d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/EnemyCombat.cs b/Assets/Scripts/Enemies/EnemyCombat.cs new file mode 100644 index 0000000..5ff45d3 --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyCombat.cs @@ -0,0 +1,39 @@ +using UnityEngine; +using BaseGames.Combat; + +namespace BaseGames.Enemies +{ + /// + /// 敌人战斗组件(Phase 1 桩,架构 07_EnemyModule §4)。 + /// Phase 2 实现:HitBox 按 AttackType 索引管理、伤害来源 SO 注入。 + /// + public class EnemyCombat : MonoBehaviour + { + [SerializeField] private HitBox[] _hitBoxes; // Inspector 按 AttackType 索引绑定 + + public void StartAttack(AttackType type) + { + // Phase 1 桩:Phase 2 播放攻击动画,由 AnimationEvent 触发 HitBox On/Off + int idx = (int)type; + EnableHitBox(idx); + } + + public void EnableHitBox(int index) + { + if (_hitBoxes == null || index >= _hitBoxes.Length) return; + _hitBoxes[index]?.Activate(); + } + + public void DisableHitBox(int index) + { + if (_hitBoxes == null || index >= _hitBoxes.Length) return; + _hitBoxes[index]?.Deactivate(); + } + + public void DisableAllHitBoxes() + { + if (_hitBoxes == null) return; + foreach (var hb in _hitBoxes) hb?.Deactivate(); + } + } +} diff --git a/Assets/Scripts/Enemies/EnemyCombat.cs.meta b/Assets/Scripts/Enemies/EnemyCombat.cs.meta new file mode 100644 index 0000000..8802aae --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyCombat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b092975777446a24ba295c6d30470935 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/EnemyFeedback.cs b/Assets/Scripts/Enemies/EnemyFeedback.cs new file mode 100644 index 0000000..dab449e --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyFeedback.cs @@ -0,0 +1,62 @@ +using UnityEngine; +using MoreMountains.Feedbacks; +using BaseGames.Combat; +using BaseGames.Feedback; + +namespace BaseGames.Enemies +{ + /// + /// 敌人反馈播放器:实现 IFeedbackPlayer,将行为语义映射到 MMF_Player 实例。 + /// 同时保留 OnHit/OnDeath 语义方法供 EnemyBase 直接调用(转发给接口方法)。 + /// + public class EnemyFeedback : MonoBehaviour, IFeedbackPlayer + { + [Header("命中反馈")] + [SerializeField] private MMF_Player _onHitLight; + [SerializeField] private MMF_Player _onHitMedium; + [SerializeField] private MMF_Player _onHitHeavy; + + [Header("受伤 / 死亡反馈")] + [SerializeField] private MMF_Player _onTakeHit; + [SerializeField] private MMF_Player _onDeath; + + // ── IFeedbackPlayer ────────────────────────────────────────────────────── + public void PlayHit(HitWeight weight) + { + var player = weight switch + { + HitWeight.Light => _onHitLight, + HitWeight.Medium => _onHitMedium, + HitWeight.Heavy => _onHitHeavy, + _ => _onHitLight, + }; + player?.PlayFeedbacks(); + } + + public void PlayTakeHit() => _onTakeHit?.PlayFeedbacks(); + public void PlayDeath() => _onDeath?.PlayFeedbacks(); + + // 以下方法对敌人无意义,提供空实现保持接口完整 + public void PlayParrySuccess() { } + public void PlayHeal() { } + public void PlayLandImpact() { } + public void PlayAttackWhoosh() { } + public void PlayJumpLaunch() { } + public void TriggerPreset(string presetId) { } + public void PlaySFXById(string sfxId) { } + + // ── EnemyBase 语义方法(向前兼容)──────────────────────────────────────── + /// 受到伤害时调用(由 EnemyBase 触发)。 + public void OnHit(DamageInfo info) + { + PlayTakeHit(); + } + + /// 死亡时调用(由 EnemyBase 触发)。 + public void OnDeath() + { + PlayDeath(); + } + } +} + diff --git a/Assets/Scripts/Enemies/EnemyFeedback.cs.meta b/Assets/Scripts/Enemies/EnemyFeedback.cs.meta new file mode 100644 index 0000000..8756c8c --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyFeedback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9892874f77e34964092168ab0642a47c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/EnemyMovement.cs b/Assets/Scripts/Enemies/EnemyMovement.cs new file mode 100644 index 0000000..f064235 --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyMovement.cs @@ -0,0 +1,67 @@ +using UnityEngine; + +namespace BaseGames.Enemies +{ + /// + /// 敌人移动组件(架构 07_EnemyModule §3)。 + /// Phase 1 实现:水平移动、面向目标、击退。 + /// ⚠️ 使用 Rigidbody2D.velocity(Unity 2022 LTS)。 + /// + [RequireComponent(typeof(Rigidbody2D))] + public class EnemyMovement : MonoBehaviour + { + [SerializeField] private EnemyStatsSO _config; + + private Rigidbody2D _rb; + private int _facingDir = 1; + + public bool IsGrounded { get; private set; } + + private void Awake() + { + _rb = GetComponent(); + } + + /// 按 SO 配置速度水平移动。dir: +1 右 / -1 左 / 0 停止。 + public void MoveHorizontal(float dir) + { + if (_config == null) return; + float speed = _config.WalkSpeed; + _rb.velocity = new Vector2(dir * speed, _rb.velocity.y); + UpdateFacing(dir); + } + + /// 显式指定速度(BD 追击任务调用)。 + public void MoveWithSpeed(float dir, float speed) + { + _rb.velocity = new Vector2(dir * speed, _rb.velocity.y); + UpdateFacing(dir); + } + + public void FaceTarget(Vector2 targetPos) + { + float dir = targetPos.x < transform.position.x ? -1f : 1f; + UpdateFacing(dir); + } + + public void ApplyKnockback(Vector2 dir, float force) + { + _rb.velocity = dir.normalized * force; + } + + public void StopHorizontal() + { + _rb.velocity = new Vector2(0f, _rb.velocity.y); + } + + private void UpdateFacing(float dir) + { + if (Mathf.Approximately(dir, 0f)) return; + int newDir = dir > 0f ? 1 : -1; + if (newDir == _facingDir) return; + _facingDir = newDir; + Vector3 s = transform.localScale; + transform.localScale = new Vector3(Mathf.Abs(s.x) * newDir, s.y, s.z); + } + } +} diff --git a/Assets/Scripts/Enemies/EnemyMovement.cs.meta b/Assets/Scripts/Enemies/EnemyMovement.cs.meta new file mode 100644 index 0000000..e9319ea --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyMovement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20bd45717dc17a94581eee24814fe60c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/EnemyStats.cs b/Assets/Scripts/Enemies/EnemyStats.cs new file mode 100644 index 0000000..41d9c9a --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyStats.cs @@ -0,0 +1,45 @@ +using UnityEngine; + +namespace BaseGames.Enemies +{ + /// + /// 敌人运行时数值组件(架构 07_EnemyModule §2)。 + /// 由 EnemyBase.Awake() 通过 Initialize(EnemyStatsSO) 注入配置。 + /// + public class EnemyStats : MonoBehaviour + { + private EnemyStatsSO _config; + + public int MaxHP { get; private set; } + public int CurrentHP { get; private set; } + public int Defense { get; private set; } + public float AttackCooldownTimer { get; private set; } + + /// 每帧由 EnemyBase 更新(读取玩家位置后写入)。 + public float DistanceToPlayer { get; set; } + + public void Initialize(EnemyStatsSO so) + { + _config = so; + MaxHP = so.MaxHP; + CurrentHP = so.MaxHP; + Defense = so.Defense; + } + + public void TakeDamage(int amount) + { + CurrentHP = Mathf.Max(0, CurrentHP - amount); + } + + public void TickAttackCooldown(float dt) + { + if (AttackCooldownTimer > 0f) + AttackCooldownTimer -= dt; + } + + public void ResetAttackCooldown() + { + AttackCooldownTimer = _config != null ? _config.AttackCooldown : 1f; + } + } +} diff --git a/Assets/Scripts/Enemies/EnemyStats.cs.meta b/Assets/Scripts/Enemies/EnemyStats.cs.meta new file mode 100644 index 0000000..0e91c7a --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48bc7c82cd2c1df4ba7103160db48a11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/EnemyStatsSO.cs b/Assets/Scripts/Enemies/EnemyStatsSO.cs new file mode 100644 index 0000000..51a3836 --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyStatsSO.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace BaseGames.Enemies +{ + /// + /// 敌人属性配置 SO(架构 07_EnemyModule §2)。 + /// + [CreateAssetMenu(menuName = "Enemies/EnemyStats")] + public class EnemyStatsSO : ScriptableObject + { + [Header("生命")] + public int MaxHP = 50; + + [Header("防御")] + public int Defense = 0; + + [Header("移动")] + public float WalkSpeed = 2f; + public float RunSpeed = 4f; + + [Header("战斗")] + public int AttackDamage = 10; + public float AttackRange = 1.5f; + public float AttackCooldown = 1f; + public float DetectRange = 6f; + + [Header("击退(作为来源时)")] + public float KnockbackForce = 5f; + public float HitStunDuration = 0.3f; + } +} diff --git a/Assets/Scripts/Enemies/EnemyStatsSO.cs.meta b/Assets/Scripts/Enemies/EnemyStatsSO.cs.meta new file mode 100644 index 0000000..a6a1cb9 --- /dev/null +++ b/Assets/Scripts/Enemies/EnemyStatsSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed4391dfa14c0304c8932f1ef9f8ce63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/IPathAgent.cs b/Assets/Scripts/Enemies/IPathAgent.cs new file mode 100644 index 0000000..b5419bd --- /dev/null +++ b/Assets/Scripts/Enemies/IPathAgent.cs @@ -0,0 +1,42 @@ +using System; +using UnityEngine; + +namespace BaseGames.Enemies +{ + /// + /// 导航代理抽象接口(架构 07_EnemyModule §5)。 + /// EnemyBase 和 BD Task 只依赖此接口,不依赖具体导航库。 + /// 实现:EnemyNavAgent(PathBerserker2d);测试用 NullPathAgent。 + /// + public interface IPathAgent + { + /// 请求移动到世界坐标 target。 + void RequestMoveTo(Vector2 target); + + /// 立即停止导航(清除路径)。 + void StopNavigation(); + + /// 是否已到达目标(距离 ≤ stoppingDistance)。 + bool IsAtDestination(); + + /// 运行时覆盖移动速度。 + void SetSpeed(float speed); + + /// 当前帧是否在移动(速度 > 0.01 且有有效路径)。 + bool IsMoving { get; } + + /// 路径寻路失败事件(目标不可达时触发)。 + event Action OnNavPathFailed; + } + + // ── 无导航 / 测试用空实现 ───────────────────────────────────────────── + public sealed class NullPathAgent : IPathAgent + { + public void RequestMoveTo(Vector2 _) { } + public void StopNavigation() { } + public bool IsAtDestination() => true; + public void SetSpeed(float _) { } + public bool IsMoving => false; + public event Action OnNavPathFailed { add { } remove { } } + } +} diff --git a/Assets/Scripts/Enemies/IPathAgent.cs.meta b/Assets/Scripts/Enemies/IPathAgent.cs.meta new file mode 100644 index 0000000..b9f413e --- /dev/null +++ b/Assets/Scripts/Enemies/IPathAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99f648f6975de20469192afe7fcc4e0a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/Navigation.meta b/Assets/Scripts/Enemies/Navigation.meta new file mode 100644 index 0000000..897b6cc --- /dev/null +++ b/Assets/Scripts/Enemies/Navigation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f941b7883c1fd624387991a1d0edd709 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/Navigation/.gitkeep b/Assets/Scripts/Enemies/Navigation/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Enemies/Navigation/BaseGames.Enemies.Navigation.asmdef b/Assets/Scripts/Enemies/Navigation/BaseGames.Enemies.Navigation.asmdef new file mode 100644 index 0000000..97bce05 --- /dev/null +++ b/Assets/Scripts/Enemies/Navigation/BaseGames.Enemies.Navigation.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Enemies.Navigation", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Enemies.Navigation", + "references": [ + "BaseGames.Enemies", + "PathBerserker2d" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Enemies/Navigation/BaseGames.Enemies.Navigation.asmdef.meta b/Assets/Scripts/Enemies/Navigation/BaseGames.Enemies.Navigation.asmdef.meta new file mode 100644 index 0000000..20f01e2 --- /dev/null +++ b/Assets/Scripts/Enemies/Navigation/BaseGames.Enemies.Navigation.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f9c0925f2c3786343b319ae4706ebf20 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/Navigation/EnemyNavAgent.cs b/Assets/Scripts/Enemies/Navigation/EnemyNavAgent.cs new file mode 100644 index 0000000..6a9de43 --- /dev/null +++ b/Assets/Scripts/Enemies/Navigation/EnemyNavAgent.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using PathBerserker2d; +using BaseGames.Enemies; + +namespace BaseGames.Enemies.Navigation +{ + /// + /// PathBerserker2d 导航代理包装器(架构 07_EnemyModule §5)。 + /// 实现 IPathAgent 接口,使 EnemyBase 和 BD Task 无需直接依赖 PB2d 类型。 + /// PB2d API:UpdatePath(Vector2)、Stop()、TransformBasedMovement.movementSpeed、IsFollowingAPath。 + /// + [RequireComponent(typeof(NavAgent))] + [RequireComponent(typeof(TransformBasedMovement))] + public class EnemyNavAgent : MonoBehaviour, IPathAgent + { + private NavAgent _navAgent; + private TransformBasedMovement _movement; + + /// 正在沿路径移动时为 true。 + public bool IsMoving => _navAgent != null && _navAgent.IsFollowingAPath; + + public event System.Action OnNavPathFailed; + + private void Awake() + { + _navAgent = GetComponent(); + _movement = GetComponent(); + } + + public void RequestMoveTo(Vector2 target) + { + _navAgent?.UpdatePath(target); + } + + public void StopNavigation() + { + _navAgent?.Stop(); + } + + public bool IsAtDestination() + { + if (_navAgent == null) return true; + // 已停止 OR 在目标线段上且不再跟随路径 + return _navAgent.IsIdle; + } + + public void SetSpeed(float speed) + { + if (_movement != null) _movement.movementSpeed = speed; + } + } +} + diff --git a/Assets/Scripts/Enemies/Navigation/EnemyNavAgent.cs.meta b/Assets/Scripts/Enemies/Navigation/EnemyNavAgent.cs.meta new file mode 100644 index 0000000..46fd219 --- /dev/null +++ b/Assets/Scripts/Enemies/Navigation/EnemyNavAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44871319d7318de40b9ac21757b69c78 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/Navigation/_Placeholder.cs b/Assets/Scripts/Enemies/Navigation/_Placeholder.cs new file mode 100644 index 0000000..f352af2 --- /dev/null +++ b/Assets/Scripts/Enemies/Navigation/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Enemies.Navigation { } + diff --git a/Assets/Scripts/Enemies/Navigation/_Placeholder.cs.meta b/Assets/Scripts/Enemies/Navigation/_Placeholder.cs.meta new file mode 100644 index 0000000..dc49453 --- /dev/null +++ b/Assets/Scripts/Enemies/Navigation/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d27858cf5a8d193489516e0cc5bcc39a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enemies/_Placeholder.cs b/Assets/Scripts/Enemies/_Placeholder.cs new file mode 100644 index 0000000..4264fec --- /dev/null +++ b/Assets/Scripts/Enemies/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Enemies { } + diff --git a/Assets/Scripts/Enemies/_Placeholder.cs.meta b/Assets/Scripts/Enemies/_Placeholder.cs.meta new file mode 100644 index 0000000..521e133 --- /dev/null +++ b/Assets/Scripts/Enemies/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e2f632c03ad8b734e953d5fce3d5b048 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Equipment.meta b/Assets/Scripts/Equipment.meta new file mode 100644 index 0000000..36ac1b6 --- /dev/null +++ b/Assets/Scripts/Equipment.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b45d7569372d0a64f9acf5d5c6eb60a4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Equipment/.gitkeep b/Assets/Scripts/Equipment/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Equipment/BaseGames.Equipment.asmdef b/Assets/Scripts/Equipment/BaseGames.Equipment.asmdef new file mode 100644 index 0000000..6327d49 --- /dev/null +++ b/Assets/Scripts/Equipment/BaseGames.Equipment.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Equipment", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Equipment", + "references": [ + "BaseGames.Core.Events", + "BaseGames.Player" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Equipment/BaseGames.Equipment.asmdef.meta b/Assets/Scripts/Equipment/BaseGames.Equipment.asmdef.meta new file mode 100644 index 0000000..65739e1 --- /dev/null +++ b/Assets/Scripts/Equipment/BaseGames.Equipment.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7976fc11b66dac44ba4d4297eafe3448 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Equipment/_Placeholder.cs b/Assets/Scripts/Equipment/_Placeholder.cs new file mode 100644 index 0000000..06618f6 --- /dev/null +++ b/Assets/Scripts/Equipment/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Equipment { } + diff --git a/Assets/Scripts/Equipment/_Placeholder.cs.meta b/Assets/Scripts/Equipment/_Placeholder.cs.meta new file mode 100644 index 0000000..cd856ee --- /dev/null +++ b/Assets/Scripts/Equipment/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da2dd3b6ba3b910429dff21eaf870278 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Feedback.meta b/Assets/Scripts/Feedback.meta new file mode 100644 index 0000000..cf5239d --- /dev/null +++ b/Assets/Scripts/Feedback.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7dcbc1656039cb47a1c9b0779c8bf8b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Feedback/.gitkeep b/Assets/Scripts/Feedback/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Feedback/BaseGames.Feedback.asmdef b/Assets/Scripts/Feedback/BaseGames.Feedback.asmdef new file mode 100644 index 0000000..152b5f2 --- /dev/null +++ b/Assets/Scripts/Feedback/BaseGames.Feedback.asmdef @@ -0,0 +1,18 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Feedback", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Feedback", + "references": [ + "BaseGames.Core.Events", + "BaseGames.Combat", + "MoreMountains.Tools" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Feedback/BaseGames.Feedback.asmdef.meta b/Assets/Scripts/Feedback/BaseGames.Feedback.asmdef.meta new file mode 100644 index 0000000..b11436e --- /dev/null +++ b/Assets/Scripts/Feedback/BaseGames.Feedback.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4847ae647b0781e49b36458792d57902 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Feedback/FeedbackConfigSO.cs b/Assets/Scripts/Feedback/FeedbackConfigSO.cs new file mode 100644 index 0000000..222d85f --- /dev/null +++ b/Assets/Scripts/Feedback/FeedbackConfigSO.cs @@ -0,0 +1,20 @@ +using UnityEngine; + +namespace BaseGames.Feedback +{ + /// + /// Feedback 系统全局配置:闪白颜色/时长等通用参数。 + /// 资产路径:Assets/ScriptableObjects/Feedback/FeedbackConfig.asset + /// + [CreateAssetMenu(menuName = "Feedback/FeedbackConfig")] + public class FeedbackConfigSO : ScriptableObject + { + [Header("受伤闪白")] + [Tooltip("Shader _FlashColor 参数目标颜色。")] + public Color HurtFlashColor = Color.white; + + [Tooltip("闪白持续时间(秒)。")] + [Min(0.01f)] + public float HurtFlashDuration = 0.12f; + } +} diff --git a/Assets/Scripts/Feedback/FeedbackConfigSO.cs.meta b/Assets/Scripts/Feedback/FeedbackConfigSO.cs.meta new file mode 100644 index 0000000..c634e52 --- /dev/null +++ b/Assets/Scripts/Feedback/FeedbackConfigSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a13bc45e10182c46a145c59e379bb30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Feedback/IFeedbackPlayer.cs b/Assets/Scripts/Feedback/IFeedbackPlayer.cs new file mode 100644 index 0000000..99c3f0d --- /dev/null +++ b/Assets/Scripts/Feedback/IFeedbackPlayer.cs @@ -0,0 +1,68 @@ +namespace BaseGames.Feedback +{ + /// + /// 反馈播放器接口:封装所有角色反馈行为,解耦 Character 逻辑与 Feel/MMF_Player 的直接依赖。 + /// 由 PlayerFeedback(玩家)和 EnemyFeedback(敌人)分别实现; + /// NullFeedbackPlayer 用于测试/占位。 + /// + public interface IFeedbackPlayer + { + // ── 命中 ────────────────────────────────────────────────────────────────── + /// 对目标造成命中时播放对应力度的反馈(摄像机震屏 + 控制器振动等)。 + void PlayHit(HitWeight weight); + + /// 成功弹反(Parry)时播放反馈。 + void PlayParrySuccess(); + + // ── 受伤 / 死亡 ────────────────────────────────────────────────────────── + /// 角色受到伤害时播放反馈(闪白 + 轻微震屏等)。 + void PlayTakeHit(); + + /// 角色死亡时播放反馈(慢动作 + 震屏 + 音效)。 + void PlayDeath(); + + // ── 状态恢复 ───────────────────────────────────────────────────────────── + /// 治疗/恢复血量时播放反馈(粒子 + 音效)。 + void PlayHeal(); + + // ── 移动 / 动作 ────────────────────────────────────────────────────────── + /// 硬着陆时播放地面冲击反馈。 + void PlayLandImpact(); + + /// 攻击出手时播放破风反馈。 + void PlayAttackWhoosh(); + + /// 跳跃起跳时播放反馈。 + void PlayJumpLaunch(); + + // ── 通用 ───────────────────────────────────────────────────────────────── + /// 通过 presetId 触发在 Inspector 中配置的命名预设 MMF_Player。 + void TriggerPreset(string presetId); + + /// 通过 sfxId 触发单次音效(不带任何摄像机/振动反馈)。 + void PlaySFXById(string sfxId); + } + + /// 命中力度。 + public enum HitWeight { Light, Medium, Heavy } + + /// + /// 空对象模式实现:所有方法均为空操作,用于测试和不需要反馈的实体。 + /// + public class NullFeedbackPlayer : IFeedbackPlayer + { + public static readonly NullFeedbackPlayer Instance = new NullFeedbackPlayer(); + + public void PlayHit(HitWeight weight) { } + public void PlayParrySuccess() { } + public void PlayTakeHit() { } + public void PlayDeath() { } + public void PlayHeal() { } + public void PlayLandImpact() { } + public void PlayAttackWhoosh() { } + public void PlayJumpLaunch() { } + public void TriggerPreset(string presetId) { } + public void PlaySFXById(string sfxId) { } + } +} + diff --git a/Assets/Scripts/Feedback/IFeedbackPlayer.cs.meta b/Assets/Scripts/Feedback/IFeedbackPlayer.cs.meta new file mode 100644 index 0000000..22c2376 --- /dev/null +++ b/Assets/Scripts/Feedback/IFeedbackPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4baf6cd1a67e25347b18d8d8a13fbe02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Feedback/PlayerFeedback.cs b/Assets/Scripts/Feedback/PlayerFeedback.cs new file mode 100644 index 0000000..6c760a4 --- /dev/null +++ b/Assets/Scripts/Feedback/PlayerFeedback.cs @@ -0,0 +1,104 @@ +using System.Collections.Generic; +using UnityEngine; +using MoreMountains.Feedbacks; + +namespace BaseGames.Feedback +{ + /// + /// 玩家反馈播放器:实现 IFeedbackPlayer,将行为语义映射到 MMF_Player 实例。 + /// 挂在玩家 GameObject 上(或子对象 [Feedback] 上)。 + /// 所有 MMF_Player 字段均在 Inspector 中配置 Feel 反馈链。 + /// + public class PlayerFeedback : MonoBehaviour, IFeedbackPlayer + { + [Header("命中反馈")] + [SerializeField] private MMF_Player _onHitLight; + [SerializeField] private MMF_Player _onHitMedium; + [SerializeField] private MMF_Player _onHitHeavy; + [SerializeField] private MMF_Player _onParrySuccess; + + [Header("受伤 / 死亡反馈")] + [SerializeField] private MMF_Player _onTakeHit; + [SerializeField] private MMF_Player _onDeath; + + [Header("恢复反馈")] + [SerializeField] private MMF_Player _onHeal; + + [Header("移动 / 动作反馈")] + [SerializeField] private MMF_Player _onLandImpact; + [SerializeField] private MMF_Player _onAttackWhoosh; + [SerializeField] private MMF_Player _onJumpLaunch; + + [Header("命名预设(可选)")] + [SerializeField] private NamedFeedback[] _namedPresets; + + [Header("音效预设(可选)")] + [SerializeField] private NamedFeedback[] _sfxPresets; + + private Dictionary _presetMap; + private Dictionary _sfxMap; + + private void Awake() + { + _presetMap = BuildMap(_namedPresets); + _sfxMap = BuildMap(_sfxPresets); + } + + // ── IFeedbackPlayer ────────────────────────────────────────────────────── + public void PlayHit(HitWeight weight) + { + var player = weight switch + { + HitWeight.Light => _onHitLight, + HitWeight.Medium => _onHitMedium, + HitWeight.Heavy => _onHitHeavy, + _ => _onHitLight, + }; + player?.PlayFeedbacks(); + } + + public void PlayParrySuccess() => _onParrySuccess?.PlayFeedbacks(); + public void PlayTakeHit() => _onTakeHit?.PlayFeedbacks(); + public void PlayDeath() => _onDeath?.PlayFeedbacks(); + public void PlayHeal() => _onHeal?.PlayFeedbacks(); + public void PlayLandImpact() => _onLandImpact?.PlayFeedbacks(); + public void PlayAttackWhoosh() => _onAttackWhoosh?.PlayFeedbacks(); + public void PlayJumpLaunch() => _onJumpLaunch?.PlayFeedbacks(); + + public void TriggerPreset(string presetId) + { + if (_presetMap.TryGetValue(presetId, out var p)) + p?.PlayFeedbacks(); + else + Debug.LogWarning($"[PlayerFeedback] 未找到预设 '{presetId}'。"); + } + + public void PlaySFXById(string sfxId) + { + if (_sfxMap.TryGetValue(sfxId, out var p)) + p?.PlayFeedbacks(); + else + Debug.LogWarning($"[PlayerFeedback] 未找到 SFX 预设 '{sfxId}'。"); + } + + // ── 辅助 ───────────────────────────────────────────────────────────────── + private static Dictionary BuildMap(NamedFeedback[] entries) + { + var map = new Dictionary(); + if (entries == null) return map; + foreach (var e in entries) + { + if (!string.IsNullOrEmpty(e.id)) + map[e.id] = e.player; + } + return map; + } + } + + [System.Serializable] + public struct NamedFeedback + { + public string id; + public MMF_Player player; + } +} diff --git a/Assets/Scripts/Feedback/PlayerFeedback.cs.meta b/Assets/Scripts/Feedback/PlayerFeedback.cs.meta new file mode 100644 index 0000000..4cc4805 --- /dev/null +++ b/Assets/Scripts/Feedback/PlayerFeedback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2865735d009e06d4b88c8f81b149b7d0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Feedback/_Placeholder.cs b/Assets/Scripts/Feedback/_Placeholder.cs new file mode 100644 index 0000000..da19e84 --- /dev/null +++ b/Assets/Scripts/Feedback/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Feedback { } + diff --git a/Assets/Scripts/Feedback/_Placeholder.cs.meta b/Assets/Scripts/Feedback/_Placeholder.cs.meta new file mode 100644 index 0000000..cd5fd58 --- /dev/null +++ b/Assets/Scripts/Feedback/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e48c25f6e427fea4facf869cec33a9e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Input.meta b/Assets/Scripts/Input.meta new file mode 100644 index 0000000..1912345 --- /dev/null +++ b/Assets/Scripts/Input.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2aace100ffb48e24a8de6a2cbe367025 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Input/.gitkeep b/Assets/Scripts/Input/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Input/BaseGames.Input.asmdef b/Assets/Scripts/Input/BaseGames.Input.asmdef new file mode 100644 index 0000000..9962dc0 --- /dev/null +++ b/Assets/Scripts/Input/BaseGames.Input.asmdef @@ -0,0 +1,17 @@ +{ + "name": "BaseGames.Input", + "rootNamespace": "BaseGames.Input", + "references": [ + "BaseGames.Core.Events", + "Unity.InputSystem" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} diff --git a/Assets/Scripts/Input/BaseGames.Input.asmdef.meta b/Assets/Scripts/Input/BaseGames.Input.asmdef.meta new file mode 100644 index 0000000..c99bb16 --- /dev/null +++ b/Assets/Scripts/Input/BaseGames.Input.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e6434706d2660f5438b88ed83d273edb +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Input/InputBuffer.cs b/Assets/Scripts/Input/InputBuffer.cs new file mode 100644 index 0000000..5281140 --- /dev/null +++ b/Assets/Scripts/Input/InputBuffer.cs @@ -0,0 +1,73 @@ +using UnityEngine; + +namespace BaseGames.Input +{ + /// + /// 帧级输入缓冲。持续 _bufferDuration 秒,允许玩家提前输入跳跃/攻击/冲刺。 + /// 须与 PlayerController 在同一 GameObject 上。 + /// + public class InputBuffer : MonoBehaviour + { + [SerializeField] private InputReaderSO _inputReader; + [SerializeField] private float _jumpBufferDuration = 0.15f; + [SerializeField] private float _attackBufferDuration = 0.12f; + [SerializeField] private float _dashBufferDuration = 0.10f; + + private float _jumpBuffer; + private float _attackBuffer; + private float _dashBuffer; + + // ── Named handlers to allow proper unsubscription ───────────────────── + private void HandleJumpStarted() => _jumpBuffer = _jumpBufferDuration; + private void HandleAttackStarted() => _attackBuffer = _attackBufferDuration; + private void HandleDashStarted() => _dashBuffer = _dashBufferDuration; + + private void OnEnable() + { + if (_inputReader == null) return; + _inputReader.JumpStartedEvent += HandleJumpStarted; + _inputReader.AttackEvent += HandleAttackStarted; + _inputReader.DashEvent += HandleDashStarted; + } + + private void OnDisable() + { + if (_inputReader == null) return; + _inputReader.JumpStartedEvent -= HandleJumpStarted; + _inputReader.AttackEvent -= HandleAttackStarted; + _inputReader.DashEvent -= HandleDashStarted; + } + + private void Update() + { + float dt = Time.deltaTime; + _jumpBuffer = Mathf.Max(0f, _jumpBuffer - dt); + _attackBuffer = Mathf.Max(0f, _attackBuffer - dt); + _dashBuffer = Mathf.Max(0f, _dashBuffer - dt); + } + + /// 消耗跳跃缓冲(读取并清空)。 + public bool ConsumeJump() + { + if (_jumpBuffer <= 0f) return false; + _jumpBuffer = 0f; + return true; + } + + /// 消耗攻击缓冲(读取并清空)。 + public bool ConsumeAttack() + { + if (_attackBuffer <= 0f) return false; + _attackBuffer = 0f; + return true; + } + + /// 消耗冲刺缓冲(读取并清空)。 + public bool ConsumeDash() + { + if (_dashBuffer <= 0f) return false; + _dashBuffer = 0f; + return true; + } + } +} diff --git a/Assets/Scripts/Input/InputBuffer.cs.meta b/Assets/Scripts/Input/InputBuffer.cs.meta new file mode 100644 index 0000000..dff22f9 --- /dev/null +++ b/Assets/Scripts/Input/InputBuffer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 323fa3d8339022e4bbd37c12332f151a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Input/InputReaderSO.cs b/Assets/Scripts/Input/InputReaderSO.cs new file mode 100644 index 0000000..dab8774 --- /dev/null +++ b/Assets/Scripts/Input/InputReaderSO.cs @@ -0,0 +1,149 @@ +using System; +using UnityEngine; +using UnityEngine.InputSystem; +using BaseGames.Core.Events; + +namespace BaseGames.Input +{ + [CreateAssetMenu(menuName = "Input/InputReader")] + public class InputReaderSO : ScriptableObject + { + [SerializeField] private InputActionAsset _inputActions; + [SerializeField] private VoidEventChannelSO _onPauseRequested; + + // ── Gameplay Events ─────────────────────────────────────────────────── + public event Action MoveEvent; + public event Action JumpStartedEvent; + public event Action JumpCancelledEvent; + public event Action AttackEvent; + public event Action DownAttackEvent; + public event Action UpAttackEvent; + public event Action ParryEvent; + public event Action DashEvent; + public event Action UseSpringEvent; + public event Action SwitchSkyFormEvent; + public event Action SwitchEarthFormEvent; + public event Action SwitchDeathFormEvent; + public event Action SoulSkillEvent; + public event Action SpiritSkill1StartedEvent; + public event Action SpiritSkill1CancelledEvent; + public event Action SpiritSkill2StartedEvent; + public event Action SpiritSkill2CancelledEvent; + public event Action InteractEvent; + + // ── UI Events ───────────────────────────────────────────────────────── + public event Action PauseEvent; + public event Action NavigateEvent; + public event Action SubmitEvent; + public event Action CancelEvent; + public event Action PointEvent; + + // ── Polling ─────────────────────────────────────────────────────────── + public Vector2 MoveInput { get; private set; } + + // ── Runtime state ───────────────────────────────────────────────────── + private InputActionMap _gameplay; + private InputActionMap _ui; + private bool _isBound; + + private void OnEnable() + { + if (_inputActions == null) return; + _gameplay = _inputActions.FindActionMap("Gameplay", throwIfNotFound: false); + _ui = _inputActions.FindActionMap("UI", throwIfNotFound: false); + BindActions(); + } + + private void OnDisable() + { + _gameplay?.Disable(); + _ui?.Disable(); + _isBound = false; + } + + // ── Action Map Switching ────────────────────────────────────────────── + public void EnableGameplayInput() { _ui?.Disable(); _gameplay?.Enable(); } + public void EnableUIInput() { _gameplay?.Disable(); _ui?.Enable(); } + public void DisableAllInput() { _gameplay?.Disable(); _ui?.Disable(); } + + // ── Binding ─────────────────────────────────────────────────────────── + private void BindActions() + { + if (_gameplay == null || _isBound) return; + + BindPerformed(_gameplay, "Move", ctx => + { + MoveInput = ctx.ReadValue(); + MoveEvent?.Invoke(MoveInput); + }); + BindCanceled(_gameplay, "Move", _ => + { + MoveInput = Vector2.zero; + MoveEvent?.Invoke(Vector2.zero); + }); + + BindStarted(_gameplay, "Jump", () => JumpStartedEvent?.Invoke()); + BindCanceled(_gameplay, "Jump", () => JumpCancelledEvent?.Invoke()); + BindStarted(_gameplay, "Attack", () => AttackEvent?.Invoke()); + BindStarted(_gameplay, "DownAttack", () => DownAttackEvent?.Invoke()); + BindStarted(_gameplay, "UpAttack", () => UpAttackEvent?.Invoke()); + BindStarted(_gameplay, "Parry", () => ParryEvent?.Invoke()); + BindStarted(_gameplay, "Dash", () => DashEvent?.Invoke()); + BindStarted(_gameplay, "UseSpring", () => UseSpringEvent?.Invoke()); + BindStarted(_gameplay, "SwitchSkyForm", () => SwitchSkyFormEvent?.Invoke()); + BindStarted(_gameplay, "SwitchEarthForm", () => SwitchEarthFormEvent?.Invoke()); + BindStarted(_gameplay, "SwitchDeathForm", () => SwitchDeathFormEvent?.Invoke()); + BindStarted(_gameplay, "SoulSkill", () => SoulSkillEvent?.Invoke()); + BindStarted(_gameplay, "SpiritSkill1", () => SpiritSkill1StartedEvent?.Invoke()); + BindCanceled(_gameplay, "SpiritSkill1", () => SpiritSkill1CancelledEvent?.Invoke()); + BindStarted(_gameplay, "SpiritSkill2", () => SpiritSkill2StartedEvent?.Invoke()); + BindCanceled(_gameplay, "SpiritSkill2", () => SpiritSkill2CancelledEvent?.Invoke()); + BindStarted(_gameplay, "Interact", () => InteractEvent?.Invoke()); + BindStarted(_gameplay, "Pause", HandlePause); + + if (_ui != null) + { + BindPerformed(_ui, "Navigate", ctx => NavigateEvent?.Invoke(ctx.ReadValue())); + BindCanceled(_ui, "Navigate", _ => NavigateEvent?.Invoke(Vector2.zero)); + BindStarted(_ui, "Submit", () => SubmitEvent?.Invoke()); + BindStarted(_ui, "Cancel", () => CancelEvent?.Invoke()); + BindStarted(_ui, "Pause", HandlePause); + BindPerformed(_ui, "Point", ctx => PointEvent?.Invoke(ctx.ReadValue())); + } + + _isBound = true; + } + + private void HandlePause() + { + PauseEvent?.Invoke(); + _onPauseRequested?.Raise(); + } + + private static void BindStarted(InputActionMap map, string name, Action callback) + { + var action = map.FindAction(name, throwIfNotFound: false); + if (action != null) action.started += _ => callback(); + } + + private static void BindPerformed(InputActionMap map, string name, + Action callback) + { + var action = map.FindAction(name, throwIfNotFound: false); + if (action != null) action.performed += callback; + } + + private static void BindCanceled(InputActionMap map, string name, + Action callback) + { + var action = map.FindAction(name, throwIfNotFound: false); + if (action != null) action.canceled += callback; + } + + private static void BindCanceled(InputActionMap map, string name, Action callback) + { + var action = map.FindAction(name, throwIfNotFound: false); + if (action != null) action.canceled += _ => callback(); + } + } +} diff --git a/Assets/Scripts/Input/InputReaderSO.cs.meta b/Assets/Scripts/Input/InputReaderSO.cs.meta new file mode 100644 index 0000000..b93a068 --- /dev/null +++ b/Assets/Scripts/Input/InputReaderSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3945955c08d2670458e14d41e1236946 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Input/_Placeholder.cs b/Assets/Scripts/Input/_Placeholder.cs new file mode 100644 index 0000000..3630763 --- /dev/null +++ b/Assets/Scripts/Input/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Input { } + diff --git a/Assets/Scripts/Input/_Placeholder.cs.meta b/Assets/Scripts/Input/_Placeholder.cs.meta new file mode 100644 index 0000000..f4cf8da --- /dev/null +++ b/Assets/Scripts/Input/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ead9c6110166b424ab45c55ce99801c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Localization.meta b/Assets/Scripts/Localization.meta new file mode 100644 index 0000000..2c4beb5 --- /dev/null +++ b/Assets/Scripts/Localization.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 71384ddf8c8bec64088ca005467be8bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Localization/.gitkeep b/Assets/Scripts/Localization/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Localization/BaseGames.Localization.asmdef b/Assets/Scripts/Localization/BaseGames.Localization.asmdef new file mode 100644 index 0000000..6faa6e6 --- /dev/null +++ b/Assets/Scripts/Localization/BaseGames.Localization.asmdef @@ -0,0 +1,16 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Localization", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Localization", + "references": [ + "BaseGames.Core.Events" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Localization/BaseGames.Localization.asmdef.meta b/Assets/Scripts/Localization/BaseGames.Localization.asmdef.meta new file mode 100644 index 0000000..e1baf1a --- /dev/null +++ b/Assets/Scripts/Localization/BaseGames.Localization.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4301f7e41bea5e2439e642f571885e60 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Localization/_Placeholder.cs b/Assets/Scripts/Localization/_Placeholder.cs new file mode 100644 index 0000000..5f4f566 --- /dev/null +++ b/Assets/Scripts/Localization/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Localization { } + diff --git a/Assets/Scripts/Localization/_Placeholder.cs.meta b/Assets/Scripts/Localization/_Placeholder.cs.meta new file mode 100644 index 0000000..37ad541 --- /dev/null +++ b/Assets/Scripts/Localization/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 403ac6da4659e9948b5954277b21571a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Parry.meta b/Assets/Scripts/Parry.meta new file mode 100644 index 0000000..fb2e7f0 --- /dev/null +++ b/Assets/Scripts/Parry.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0258ef9a7891d944aaed321db6f984e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Parry/.gitkeep b/Assets/Scripts/Parry/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Parry/BaseGames.Parry.asmdef b/Assets/Scripts/Parry/BaseGames.Parry.asmdef new file mode 100644 index 0000000..9cfc39e --- /dev/null +++ b/Assets/Scripts/Parry/BaseGames.Parry.asmdef @@ -0,0 +1,14 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Parry", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Parry", + "references": [], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Parry/BaseGames.Parry.asmdef.meta b/Assets/Scripts/Parry/BaseGames.Parry.asmdef.meta new file mode 100644 index 0000000..c7ddcd7 --- /dev/null +++ b/Assets/Scripts/Parry/BaseGames.Parry.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 87e177cce09e78a44b5122b4acfe5763 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Parry/ParrySystem.cs b/Assets/Scripts/Parry/ParrySystem.cs new file mode 100644 index 0000000..f36d550 --- /dev/null +++ b/Assets/Scripts/Parry/ParrySystem.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace BaseGames.Parry +{ + /// + /// 弹反状态管理器。Phase 1 桩 — Phase 2 实现。 + /// 只负责维护「当前是否处于弹反窗口」,不感知任何伤害数据类型。 + /// HurtBox(Combat 层)主动调用 ConsumeParry() 来查询并消费弹反机会。 + /// + public class ParrySystem : MonoBehaviour + { + /// 当前是否处于弹反激活窗口。Phase 2 由输入/动画事件写入。 + public bool IsParrying { get; private set; } + + /// + /// 查询并消费一次弹反机会。 + /// 若处于弹反窗口则返回 true 并关闭窗口;否则返回 false。 + /// + public bool ConsumeParry() + { + if (!IsParrying) return false; + IsParrying = false; + return true; + } + + // Phase 2:由动画事件 / InputReader 调用以开启弹反窗口 + public void OpenParryWindow() => IsParrying = true; + public void CloseParryWindow() => IsParrying = false; + } +} diff --git a/Assets/Scripts/Parry/ParrySystem.cs.meta b/Assets/Scripts/Parry/ParrySystem.cs.meta new file mode 100644 index 0000000..87c3339 --- /dev/null +++ b/Assets/Scripts/Parry/ParrySystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14872ec0b53eece49a121f13ca519009 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Parry/_Placeholder.cs b/Assets/Scripts/Parry/_Placeholder.cs new file mode 100644 index 0000000..6c6da4a --- /dev/null +++ b/Assets/Scripts/Parry/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Parry { } + diff --git a/Assets/Scripts/Parry/_Placeholder.cs.meta b/Assets/Scripts/Parry/_Placeholder.cs.meta new file mode 100644 index 0000000..f8aefd5 --- /dev/null +++ b/Assets/Scripts/Parry/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 521bdf598b4b7c046a783ff8f0258c5e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Platform.meta b/Assets/Scripts/Platform.meta new file mode 100644 index 0000000..4e25b9a --- /dev/null +++ b/Assets/Scripts/Platform.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: edf6008c4efcffb469ed8ef6ad637e9e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Platform/.gitkeep b/Assets/Scripts/Platform/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Platform/BaseGames.Platform.asmdef b/Assets/Scripts/Platform/BaseGames.Platform.asmdef new file mode 100644 index 0000000..313fce8 --- /dev/null +++ b/Assets/Scripts/Platform/BaseGames.Platform.asmdef @@ -0,0 +1,16 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Platform", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Platform", + "references": [ + "BaseGames.Core.Events" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Platform/BaseGames.Platform.asmdef.meta b/Assets/Scripts/Platform/BaseGames.Platform.asmdef.meta new file mode 100644 index 0000000..a341531 --- /dev/null +++ b/Assets/Scripts/Platform/BaseGames.Platform.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4112498169fd0e149a7db033e78b5ecf +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Platform/_Placeholder.cs b/Assets/Scripts/Platform/_Placeholder.cs new file mode 100644 index 0000000..6bab9da --- /dev/null +++ b/Assets/Scripts/Platform/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Platform { } + diff --git a/Assets/Scripts/Platform/_Placeholder.cs.meta b/Assets/Scripts/Platform/_Placeholder.cs.meta new file mode 100644 index 0000000..9a29f97 --- /dev/null +++ b/Assets/Scripts/Platform/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6609e56f324e23e4ba79f7036c48af13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player.meta b/Assets/Scripts/Player.meta new file mode 100644 index 0000000..238cdb8 --- /dev/null +++ b/Assets/Scripts/Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4af52c7bbd461ac49a113519ad252256 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/AbilityType.cs b/Assets/Scripts/Player/AbilityType.cs new file mode 100644 index 0000000..0033c14 --- /dev/null +++ b/Assets/Scripts/Player/AbilityType.cs @@ -0,0 +1,48 @@ +using System; + +namespace BaseGames.Player +{ + /// + /// 玩家能力解锁标志位枚举([Flags] uint)。 + /// 每个 bit 对应一项可解锁能力,支持组合查询。 + /// 对应 Progression 模块中 AbilityManager 的解锁状态。 + /// + [Flags] + public enum AbilityType : uint + { + None = 0, + + // ── 移动能力 ────────────────────────────────────────────────────── + WallCling = 1u << 0, // 贴墙悬挂 + WallJump = 1u << 1, // 墙跳 + Dash = 1u << 2, // 地面冲刺 + AirDash = 1u << 3, // 空中冲刺(二段冲刺) + DoubleJump = 1u << 4, // 二段跳 + SuperJump = 1u << 5, // 超级跳(聚气跳) + Swim = 1u << 6, // 游泳(液体中自由移动) + Dive = 1u << 7, // 下劈(空中下突) + + // ── 法术能力 ────────────────────────────────────────────────────── + Spell1 = 1u << 8, // 法术槽 1(策划自定义) + Spell2 = 1u << 9, // 法术槽 2 + Spell3 = 1u << 10, // 法术槽 3 + + // ── 灵魄形态(泽灵特有)────────────────────────────────────────── + SpiritForm = 1u << 11, // 灵魄形态切换 + SpiritDash = 1u << 12, // 灵魄冲刺(穿透地形) + + // ── 战斗能力 ────────────────────────────────────────────────────── + Parry = 1u << 13, // 格挡/弹反 + ChargeAttack = 1u << 14, // 蓄力攻击 + DownSlash = 1u << 15, // 下斩 + + // ── 互动能力 ────────────────────────────────────────────────────── + Interact = 1u << 16, // 互动(NPC/机关) + FastTravel = 1u << 17, // 快速旅行解锁 + + // ── 组合掩码 ───────────────────────────────────────────────────── + AllMovement = WallCling | WallJump | Dash | AirDash | DoubleJump | SuperJump | Swim | Dive, + AllSpells = Spell1 | Spell2 | Spell3, + AllSpirit = SpiritForm | SpiritDash, + } +} diff --git a/Assets/Scripts/Player/AbilityType.cs.meta b/Assets/Scripts/Player/AbilityType.cs.meta new file mode 100644 index 0000000..c1ec83d --- /dev/null +++ b/Assets/Scripts/Player/AbilityType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ecb590541d6e9c54f9a4d0524ef78292 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/AbilityTypeEventChannelSO.cs b/Assets/Scripts/Player/AbilityTypeEventChannelSO.cs new file mode 100644 index 0000000..2f31c81 --- /dev/null +++ b/Assets/Scripts/Player/AbilityTypeEventChannelSO.cs @@ -0,0 +1,15 @@ +using BaseGames.Core.Events; +using UnityEngine; + +namespace BaseGames.Player +{ + /// + /// 能力解锁事件频道(内部类型保留)。 + /// ⚠️ EVT_AbilityUnlocked 资产实际使用 StringEventChannelSO(abilityId 字符串), + /// 本频道供需要类型安全枚举的内部系统(如 FormController)使用。 + /// 发布:AbilityManager.UnlockAbility() + /// 订阅:PlayerController(刷新可用动作集)、HUDController(更新技能面板) + /// + [CreateAssetMenu(menuName = "Events/Player/AbilityType")] + public class AbilityTypeEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Player/AbilityTypeEventChannelSO.cs.meta b/Assets/Scripts/Player/AbilityTypeEventChannelSO.cs.meta new file mode 100644 index 0000000..94a3339 --- /dev/null +++ b/Assets/Scripts/Player/AbilityTypeEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c8eab760bd9b37468f12fa79d3d0693 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/BaseGames.Player.asmdef b/Assets/Scripts/Player/BaseGames.Player.asmdef new file mode 100644 index 0000000..e8ef67e --- /dev/null +++ b/Assets/Scripts/Player/BaseGames.Player.asmdef @@ -0,0 +1,23 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Player", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Player", + "references": [ + "BaseGames.Core", + "BaseGames.Core.Save", + "BaseGames.Core.Events", + "BaseGames.Input", + "BaseGames.Combat", + "BaseGames.Parry", + "BaseGames.Feedback", + "Kybernetik.Animancer" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Player/BaseGames.Player.asmdef.meta b/Assets/Scripts/Player/BaseGames.Player.asmdef.meta new file mode 100644 index 0000000..0a2d632 --- /dev/null +++ b/Assets/Scripts/Player/BaseGames.Player.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a7ddc97eeb30a5a408e5fb7e472ff6fa +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/FormConfigSO.cs b/Assets/Scripts/Player/FormConfigSO.cs new file mode 100644 index 0000000..5ffd530 --- /dev/null +++ b/Assets/Scripts/Player/FormConfigSO.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace BaseGames.Player +{ + /// + /// 形态切换配置 ScriptableObject。 + /// Phase 1 骨架 — Phase 2 FormController 实现三形态切换时补充字段。 + /// + [CreateAssetMenu(menuName = "Player/FormConfig")] + public class FormConfigSO : ScriptableObject + { + // Phase 2: 填入 Normal / Soul / Spirit 三形态参数 + } +} diff --git a/Assets/Scripts/Player/FormConfigSO.cs.meta b/Assets/Scripts/Player/FormConfigSO.cs.meta new file mode 100644 index 0000000..7d0ba56 --- /dev/null +++ b/Assets/Scripts/Player/FormConfigSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59dd9c303ae12724085e79b1e9b55645 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/FormController.cs b/Assets/Scripts/Player/FormController.cs new file mode 100644 index 0000000..c6f7b71 --- /dev/null +++ b/Assets/Scripts/Player/FormController.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Player +{ + /// 形态控制器。Phase 1 桩 — Phase 2 实现。 + public class FormController : MonoBehaviour { } +} diff --git a/Assets/Scripts/Player/FormController.cs.meta b/Assets/Scripts/Player/FormController.cs.meta new file mode 100644 index 0000000..6fcf3b4 --- /dev/null +++ b/Assets/Scripts/Player/FormController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbcc6974256e3fb40879694b4bf2d2dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerAnimationConfigSO.cs b/Assets/Scripts/Player/PlayerAnimationConfigSO.cs new file mode 100644 index 0000000..43d1328 --- /dev/null +++ b/Assets/Scripts/Player/PlayerAnimationConfigSO.cs @@ -0,0 +1,44 @@ +using UnityEngine; + +namespace BaseGames.Player +{ + [CreateAssetMenu(menuName = "Player/AnimationConfig")] + public class PlayerAnimationConfigSO : ScriptableObject + { + [Header("移动")] + public AnimationClip Idle; + public AnimationClip Run; + public AnimationClip Jump; + public AnimationClip Fall; + public AnimationClip Dash; + + [Header("墙")] + public AnimationClip WallSlide; + + [Header("受伤 / 死亡")] + public AnimationClip Hurt; + public AnimationClip Dead; + + [Header("弹簧")] + public AnimationClip UseSpring; + + [Header("地面攻击(连招序列)")] + public AnimationClip[] GroundAttacks; + + [Header("空中攻击")] + public AnimationClip AirAttack; + public AnimationClip UpAttack; + public AnimationClip DownAttack; // 戳击 (Pogo) + + [Header("弹反")] + public AnimationClip ParryStart; + public AnimationClip ParrySuccess; + + /// 按连招步骤取地面攻击动画,越界自动取最后一个。 + public AnimationClip GetAttackClip(int step) + { + if (GroundAttacks == null || GroundAttacks.Length == 0) return null; + return step < GroundAttacks.Length ? GroundAttacks[step] : GroundAttacks[^1]; + } + } +} diff --git a/Assets/Scripts/Player/PlayerAnimationConfigSO.cs.meta b/Assets/Scripts/Player/PlayerAnimationConfigSO.cs.meta new file mode 100644 index 0000000..81c13f1 --- /dev/null +++ b/Assets/Scripts/Player/PlayerAnimationConfigSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ec15df6b0d345c4f92ba459e89dc02f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerCombat.cs b/Assets/Scripts/Player/PlayerCombat.cs new file mode 100644 index 0000000..b3a3823 --- /dev/null +++ b/Assets/Scripts/Player/PlayerCombat.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using BaseGames.Combat; + +namespace BaseGames.Player +{ + /// + /// 玩家战斗组件(Phase 1 实现)。 + /// 架构 05_PlayerModule §5:HitBox 直接挂在 Player Prefab 子节点上,不经过 WeaponInstance。 + /// 节点:[HitBoxGround]、[HitBoxUp]、[HitBoxDown]、[HitBoxAir]。 + /// + public class PlayerCombat : MonoBehaviour + { + [SerializeField] private WeaponManager _weaponManager; + + [Header("HitBox(Player Prefab 子节点)")] + [SerializeField] private HitBox _hitBoxGround; + [SerializeField] private HitBox _hitBoxUp; + [SerializeField] private HitBox _hitBoxDown; + [SerializeField] private HitBox _hitBoxAir; + + // ── HitBox 激活(由 AttackState / Animancer 帧事件调用)───────────── + public void EnableWeaponHitBox(AttackDirection dir) + { + var source = _weaponManager != null + ? _weaponManager.ActiveWeapon?.GetSourceByDir(dir) + : null; + GetHitBox(dir)?.Activate(source, transform); + } + + public void DisableWeaponHitBox(AttackDirection dir) + => GetHitBox(dir)?.Deactivate(); + + public void DisableAllWeaponHitBoxes() + { + _hitBoxGround?.Deactivate(); + _hitBoxUp?.Deactivate(); + _hitBoxDown?.Deactivate(); + _hitBoxAir?.Deactivate(); + } + + /// 命中回调(Phase 2 §2.3 补全:增加灵力)。 + internal void OnHitConfirmed(DamageInfo info) { /* Phase 2:增加灵力 */ } + + private HitBox GetHitBox(AttackDirection dir) => dir switch + { + AttackDirection.Ground => _hitBoxGround, + AttackDirection.Up => _hitBoxUp, + AttackDirection.Down => _hitBoxDown, + AttackDirection.Air => _hitBoxAir, + _ => null, + }; + } +} diff --git a/Assets/Scripts/Player/PlayerCombat.cs.meta b/Assets/Scripts/Player/PlayerCombat.cs.meta new file mode 100644 index 0000000..e4f1018 --- /dev/null +++ b/Assets/Scripts/Player/PlayerCombat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d978725c6a901c4da85041223e2b0ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerMovement.cs b/Assets/Scripts/Player/PlayerMovement.cs new file mode 100644 index 0000000..0edf7e5 --- /dev/null +++ b/Assets/Scripts/Player/PlayerMovement.cs @@ -0,0 +1,153 @@ +using UnityEngine; + +namespace BaseGames.Player +{ + /// + /// 玩家物理移动组件。封装 Rigidbody2D 操作,提供跑动、跳跃、击退等接口。 + /// Phase 2 功能(冲刺、单向平台)在此留存桩方法。 + /// + [RequireComponent(typeof(Rigidbody2D))] + public class PlayerMovement : MonoBehaviour + { + [Header("配置")] + [SerializeField] private PlayerMovementConfigSO _config; + + [Header("地面检测")] + [SerializeField] private Transform _groundCheck; + [SerializeField] private Vector2 _groundCheckSize = new Vector2(0.8f, 0.05f); + [SerializeField] private LayerMask _groundLayer; + + // ── 运行时状态 ──────────────────────────────────────────────────────── + private Rigidbody2D _rb; + private float _coyoteTimer; + private bool _isGrounded; + private bool _isWallLeft; + private bool _isWallRight; + private bool _onOneWayPlatform; + private int _facingDirection = 1; + private bool _cancelWindowOpen; + private SurfaceType _currentSurface = SurfaceType.Ground; + + public bool IsGrounded => _isGrounded; + public bool HasCoyoteTime => _coyoteTimer > 0f; + public bool IsWallLeft => _isWallLeft; + public bool IsWallRight => _isWallRight; + public bool OnOneWayPlatform => _onOneWayPlatform; + public int FacingDirection => _facingDirection; + public Rigidbody2D Rb => _rb; + public bool CancelWindowOpen => _cancelWindowOpen; + public SurfaceType CurrentSurface => _currentSurface; + + private void Awake() => _rb = GetComponent(); + + private void FixedUpdate() + { + CheckGrounded(); + CheckWalls(); + + if (_isGrounded) + _coyoteTimer = _config != null ? _config.CoyoteTime : 0.12f; + else + _coyoteTimer = Mathf.Max(0f, _coyoteTimer - Time.fixedDeltaTime); + } + + // ── 移动 ────────────────────────────────────────────────────────────── + public void Move(float speedX) + { + if (_config == null) return; + float target = speedX; + float current = _rb.velocity.x; + float accel = Mathf.Abs(speedX) > 0.01f ? _config.Acceleration : _config.Deceleration; + float newX = Mathf.MoveTowards(current, target, accel * Time.fixedDeltaTime); + _rb.velocity = new Vector2(newX, _rb.velocity.y); + } + + // ── 跳跃 ────────────────────────────────────────────────────────────── + public void Jump(bool isVariable = true) + { + float force = _config != null ? _config.JumpForce : 18f; + _rb.velocity = new Vector2(_rb.velocity.x, force); + _coyoteTimer = 0f; + } + + public void CutJump() + { + if (_rb.velocity.y > 0f) + _rb.velocity = new Vector2(_rb.velocity.x, _rb.velocity.y * 0.5f); + } + + // ── 重力 ────────────────────────────────────────────────────────────── + public void SetGravityScale(float scale) => _rb.gravityScale = scale; + + // ── 击退 ────────────────────────────────────────────────────────────── + public void ApplyKnockback(Vector2 direction, float force) + => _rb.velocity = direction.normalized * force; + + // ── 速度控制 ────────────────────────────────────────────────────────── + public void ZeroVelocity() => _rb.velocity = Vector2.zero; + public void ZeroHorizontalVelocity() => _rb.velocity = new Vector2(0f, _rb.velocity.y); + + // ── 朝向 ────────────────────────────────────────────────────────────── + public void UpdateFacing() + { + float vx = _rb.velocity.x; + if (Mathf.Abs(vx) < 0.1f) return; + int dir = vx > 0f ? 1 : -1; + if (dir == _facingDirection) return; + _facingDirection = dir; + Vector3 s = transform.localScale; + transform.localScale = new Vector3(Mathf.Abs(s.x) * dir, s.y, s.z); + } + + // ── 取消窗口 ────────────────────────────────────────────────────────── + public void SetCancelWindowOpen(bool open) => _cancelWindowOpen = open; + + // ── Phase 2 桩 ──────────────────────────────────────────────────────── + /// Phase 2 实现冲刺。 + public void Dash(Vector2 direction, float speed) { } + + /// Phase 2 实现单向平台穿透。 + public void DropThroughPlatform() { } + + // ── Physics 检测 ────────────────────────────────────────────────────── + private void CheckGrounded() + { + bool wasGrounded = _isGrounded; + Vector2 origin = _groundCheck != null + ? (Vector2)_groundCheck.position + : (Vector2)transform.position + Vector2.down * 0.5f; + + _isGrounded = Physics2D.OverlapBox(origin, _groundCheckSize, 0f, _groundLayer); + + if (_isGrounded && !wasGrounded) + _coyoteTimer = _config != null ? _config.CoyoteTime : 0.12f; + } + + private void CheckWalls() + { + if (_config == null) return; + float len = _config.WallRayLength; + float offY = _config.WallRayOffsetY; + Vector2 pos = (Vector2)transform.position + Vector2.up * offY; + + _isWallLeft = Physics2D.Raycast(pos, Vector2.left, len, _groundLayer); + _isWallRight = Physics2D.Raycast(pos, Vector2.right, len, _groundLayer); + } + + private void OnDrawGizmosSelected() + { + if (_groundCheck == null) return; + Gizmos.color = Color.green; + Gizmos.DrawWireCube(_groundCheck.position, _groundCheckSize); + } + } + + /// 当前所在地面类型(用于脚步声等反馈)。 + public enum SurfaceType + { + Ground, + OneWayPlatform, + Slope, + Ice, + } +} diff --git a/Assets/Scripts/Player/PlayerMovement.cs.meta b/Assets/Scripts/Player/PlayerMovement.cs.meta new file mode 100644 index 0000000..938f41d --- /dev/null +++ b/Assets/Scripts/Player/PlayerMovement.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 263a07a0eb148924cbcf284def379a3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerMovementConfigSO.cs b/Assets/Scripts/Player/PlayerMovementConfigSO.cs new file mode 100644 index 0000000..8208c94 --- /dev/null +++ b/Assets/Scripts/Player/PlayerMovementConfigSO.cs @@ -0,0 +1,38 @@ +using UnityEngine; + +namespace BaseGames.Player +{ + [CreateAssetMenu(menuName = "Player/MovementConfig")] + public class PlayerMovementConfigSO : ScriptableObject + { + [Header("地面移动")] + public float RunSpeed = 7f; + public float Acceleration = 50f; + public float Deceleration = 80f; + + [Header("跳跃")] + public float JumpForce = 18f; + public float CoyoteTime = 0.12f; + public float FallGravityMult = 2.5f; + public float MaxFallSpeed = 20f; + + [Header("冲刺")] + public float DashSpeed = 20f; + public float DashDuration = 0.18f; + public float DashCooldown = 0.4f; + public int MaxAerialDashes = 1; + + [Header("蹬墙 / 壁滑")] + public float WallSlideSpeed = 2f; + public float WallJumpForceX = 12f; + public float WallJumpForceY = 16f; + public float WallRayLength = 0.55f; + public float WallRayOffsetY = 0.2f; + public float WallGrabMaxHeightGain = 0.5f; + public float WallGrabReleaseDelay = 0.08f; + public float WallJumpBackForceX = 14f; + public float WallJumpAwayForceX = 10f; + public float WallJumpAwayForceY = 18f; + public float WallJumpInputLockDuration = 0.15f; + } +} diff --git a/Assets/Scripts/Player/PlayerMovementConfigSO.cs.meta b/Assets/Scripts/Player/PlayerMovementConfigSO.cs.meta new file mode 100644 index 0000000..d0fc675 --- /dev/null +++ b/Assets/Scripts/Player/PlayerMovementConfigSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81da55e0fcf99d34693cbc5a348225c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerStats.cs b/Assets/Scripts/Player/PlayerStats.cs new file mode 100644 index 0000000..5825bff --- /dev/null +++ b/Assets/Scripts/Player/PlayerStats.cs @@ -0,0 +1,235 @@ +using UnityEngine; +using BaseGames.Core.Events; +using BaseGames.Core.Save; + +namespace BaseGames.Player +{ + /// + /// 玩家数值管理组件。负责 HP、灵魂、灵气、弹簧充能、Geo、能力解锁与存档读写。 + /// + public class PlayerStats : MonoBehaviour, ISaveable, BaseGames.Core.IRestoreOnSave + { + [Header("配置")] + [SerializeField] private PlayerStatsSO _config; + + [Header("事件频道")] + [SerializeField] private IntEventChannelSO _onHPChanged; + [SerializeField] private IntEventChannelSO _onMaxHPChanged; + [SerializeField] private IntEventChannelSO _onSoulPowerChanged; + [SerializeField] private IntEventChannelSO _onSpiritPowerChanged; + [SerializeField] private IntEventChannelSO _onSpringChargesChanged; + [SerializeField] private IntEventChannelSO _onGeoChanged; + [SerializeField] private AbilityTypeEventChannelSO _onAbilityUnlocked; + [SerializeField] private VoidEventChannelSO _onPlayerDied; + + // ── 运行时数值 ───────────────────────────────────────────────────────── + public int CurrentHP { get; private set; } + public int MaxHP { get; private set; } + public int CurrentSoulPower { get; private set; } + public int MaxSoulPower { get; private set; } + public int CurrentSpiritPower { get; private set; } + public int MaxSpiritPower { get; private set; } + public int CurrentSpringCharges { get; private set; } + public int MaxSpringCharges { get; private set; } + public int SpringKillPoints { get; private set; } + public int CurrentGeo { get; private set; } + + public bool IsInvincible => _invincibleTimer > 0f; + public bool IsAlive => CurrentHP > 0; + + private float _invincibleTimer; + private float _spiritRegenTimer; + private AbilityType _unlockedAbilities = AbilityType.None; + + private void Awake() + { + if (_config == null) + { + Debug.LogWarning("[PlayerStats] PlayerStatsSO not assigned.", this); + return; + } + MaxHP = _config.MaxHP; + CurrentHP = MaxHP; + MaxSoulPower = _config.MaxSoulPower; + MaxSpiritPower = _config.MaxSpiritPower; + MaxSpringCharges = _config.MaxSpringCharges; + CurrentSpringCharges = MaxSpringCharges; + CurrentGeo = _config.InitialGeo; + } + + private void Update() + { + float dt = Time.deltaTime; + + if (_invincibleTimer > 0f) + _invincibleTimer -= dt; + + if (_config != null && _config.SpiritRegenRate > 0) + { + _spiritRegenTimer += dt; + if (_spiritRegenTimer >= 1f) + { + _spiritRegenTimer -= 1f; + AddSpiritPower(_config.SpiritRegenRate); + } + } + } + + // ── HP ──────────────────────────────────────────────────────────────── + public void TakeDamage(int amount) + { + if (IsInvincible || !IsAlive || amount <= 0) return; + CurrentHP = Mathf.Max(0, CurrentHP - amount); + _onHPChanged?.Raise(CurrentHP); + if (CurrentHP == 0) + _onPlayerDied?.Raise(); + } + + public void FullHeal() + { + if (!IsAlive) return; + CurrentHP = MaxHP; + _onHPChanged?.Raise(CurrentHP); + } + + // ── IRestoreOnSave ──────────────────────────────────────────────────── + void BaseGames.Core.IRestoreOnSave.FullRestore() => FullHeal(); + void BaseGames.Core.IRestoreOnSave.RestoreSpring() => RestoreSpringCharges(); + + public void HealHP(int amount) + { + if (!IsAlive || amount <= 0) return; + CurrentHP = Mathf.Min(MaxHP, CurrentHP + amount); + _onHPChanged?.Raise(CurrentHP); + } + + public void SetMaxHP(int newMax) + { + MaxHP = Mathf.Max(1, newMax); + CurrentHP = Mathf.Min(CurrentHP, MaxHP); + _onMaxHPChanged?.Raise(MaxHP); + _onHPChanged?.Raise(CurrentHP); + } + + // ── Soul Power ──────────────────────────────────────────────────────── + public void AddSoulPower(int amount) + { + if (amount <= 0) return; + CurrentSoulPower = Mathf.Min(MaxSoulPower, CurrentSoulPower + amount); + _onSoulPowerChanged?.Raise(CurrentSoulPower); + } + + public bool ConsumeSoulPower(int amount) + { + if (CurrentSoulPower < amount) return false; + CurrentSoulPower -= amount; + _onSoulPowerChanged?.Raise(CurrentSoulPower); + return true; + } + + // ── Spirit Power ────────────────────────────────────────────────────── + public void AddSpiritPower(int amount) + { + if (amount <= 0) return; + CurrentSpiritPower = Mathf.Min(MaxSpiritPower, CurrentSpiritPower + amount); + _onSpiritPowerChanged?.Raise(CurrentSpiritPower); + } + + public bool ConsumeSpiritPower(int amount) + { + if (CurrentSpiritPower < amount) return false; + CurrentSpiritPower -= amount; + _onSpiritPowerChanged?.Raise(CurrentSpiritPower); + return true; + } + + // ── Spring ──────────────────────────────────────────────────────────── + public bool UseSpring() + { + if (CurrentSpringCharges <= 0) return false; + CurrentSpringCharges--; + _onSpringChargesChanged?.Raise(CurrentSpringCharges); + if (_config != null) + HealHP(_config.SpringHealAmount); + return true; + } + + public void RestoreSpringCharges(int amount = -1) + { + if (amount < 0) amount = MaxSpringCharges; + CurrentSpringCharges = Mathf.Min(MaxSpringCharges, CurrentSpringCharges + amount); + _onSpringChargesChanged?.Raise(CurrentSpringCharges); + } + + public void AddKillPoints(int points = 1) + { + if (_config == null) return; + SpringKillPoints += points; + if (SpringKillPoints >= _config.SpringKillThreshold) + { + SpringKillPoints = 0; + RestoreSpringCharges(1); + } + } + + // ── Geo ─────────────────────────────────────────────────────────────── + public void AddGeo(int amount) + { + if (amount <= 0) return; + CurrentGeo += amount; + _onGeoChanged?.Raise(CurrentGeo); + } + + public bool SpendGeo(int amount) + { + if (CurrentGeo < amount) return false; + CurrentGeo -= amount; + _onGeoChanged?.Raise(CurrentGeo); + return true; + } + + // ── Invincibility ───────────────────────────────────────────────────── + public void BeginInvincibility(float duration = -1f) + { + float d = duration >= 0f ? duration : (_config != null ? _config.InvincibilityDuration : 0.6f); + _invincibleTimer = Mathf.Max(_invincibleTimer, d); + } + + // ── Abilities ───────────────────────────────────────────────────────── + public bool HasAbility(AbilityType ability) + => (_unlockedAbilities & ability) == ability; + + public void UnlockAbility(AbilityType ability) + { + if (HasAbility(ability)) return; + _unlockedAbilities |= ability; + _onAbilityUnlocked?.Raise(ability); + } + + public void LockAbility(AbilityType ability) + => _unlockedAbilities &= ~ability; + + // ── ISaveable ───────────────────────────────────────────────────────── + public void OnSave(SaveData saveData) + { + var p = saveData.Player; + p.CurrentHP = CurrentHP; + p.MaxHP = MaxHP; + p.CurrentGeo = CurrentGeo; + p.AbilityFlags = (uint)_unlockedAbilities; + } + + public void OnLoad(SaveData saveData) + { + var p = saveData.Player; + MaxHP = p.MaxHP; + CurrentHP = Mathf.Clamp(p.CurrentHP, 0, MaxHP); + CurrentGeo = p.CurrentGeo; + _unlockedAbilities = (AbilityType)p.AbilityFlags; + + _onHPChanged?.Raise(CurrentHP); + _onMaxHPChanged?.Raise(MaxHP); + _onGeoChanged?.Raise(CurrentGeo); + } + } +} diff --git a/Assets/Scripts/Player/PlayerStats.cs.meta b/Assets/Scripts/Player/PlayerStats.cs.meta new file mode 100644 index 0000000..93e7184 --- /dev/null +++ b/Assets/Scripts/Player/PlayerStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edd28a350d3cebe46a72e7550ffb1b93 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerStatsSO.cs b/Assets/Scripts/Player/PlayerStatsSO.cs new file mode 100644 index 0000000..0d2872b --- /dev/null +++ b/Assets/Scripts/Player/PlayerStatsSO.cs @@ -0,0 +1,29 @@ +using UnityEngine; + +namespace BaseGames.Player +{ + [CreateAssetMenu(menuName = "Player/Stats")] + public class PlayerStatsSO : ScriptableObject + { + [Header("HP")] + public int MaxHP = 5; + + [Header("Soul")] + public int MaxSoulPower = 100; + + [Header("Spirit")] + public int MaxSpiritPower = 100; + public int SpiritRegenRate = 5; // 每秒回复量 + + [Header("Spring (治愈弹簧)")] + public int MaxSpringCharges = 3; + public int SpringHealAmount = 2; + public int SpringKillThreshold = 4; // 击杀数触发弹簧恢复 + + [Header("无敌帧")] + public float InvincibilityDuration = 0.6f; + + [Header("初始货币")] + public int InitialGeo = 0; + } +} diff --git a/Assets/Scripts/Player/PlayerStatsSO.cs.meta b/Assets/Scripts/Player/PlayerStatsSO.cs.meta new file mode 100644 index 0000000..4bc8c14 --- /dev/null +++ b/Assets/Scripts/Player/PlayerStatsSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31a9f22bef1315643bf5a49f2a6edd2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/SkillManager.cs b/Assets/Scripts/Player/SkillManager.cs new file mode 100644 index 0000000..81217f9 --- /dev/null +++ b/Assets/Scripts/Player/SkillManager.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Player +{ + /// 技能管理器。Phase 1 桩 — Phase 2 实现。 + public class SkillManager : MonoBehaviour { } +} diff --git a/Assets/Scripts/Player/SkillManager.cs.meta b/Assets/Scripts/Player/SkillManager.cs.meta new file mode 100644 index 0000000..0b936a9 --- /dev/null +++ b/Assets/Scripts/Player/SkillManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 204560c2bc6841f44b27b50f3ff51fbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/SpringSystem.cs b/Assets/Scripts/Player/SpringSystem.cs new file mode 100644 index 0000000..e8cc7b2 --- /dev/null +++ b/Assets/Scripts/Player/SpringSystem.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace BaseGames.Player +{ + /// 治愈弹簧系统。Phase 1 桩 — Phase 1 Week 3 实现。 + public class SpringSystem : MonoBehaviour { } +} diff --git a/Assets/Scripts/Player/SpringSystem.cs.meta b/Assets/Scripts/Player/SpringSystem.cs.meta new file mode 100644 index 0000000..497eff5 --- /dev/null +++ b/Assets/Scripts/Player/SpringSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f57bdff3327d2d478779d844b114c83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States.meta b/Assets/Scripts/Player/States.meta new file mode 100644 index 0000000..a1539ac --- /dev/null +++ b/Assets/Scripts/Player/States.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef1d46e50aa9602449145ec8cfb71edf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/.gitkeep b/Assets/Scripts/Player/States/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Player/States/AttackState.cs b/Assets/Scripts/Player/States/AttackState.cs new file mode 100644 index 0000000..a86b07b --- /dev/null +++ b/Assets/Scripts/Player/States/AttackState.cs @@ -0,0 +1,65 @@ +using BaseGames.Combat; + +namespace BaseGames.Player.States +{ + /// + /// 地面攻击状态(3 段连击)。 + /// 由 PlayerController 实例化,AttackEvent 触发切换。 + /// 通过 Animancer 帧事件驱动 HitBox 激活/关闭。 + /// + public class AttackState : PlayerStateBase + { + private int _comboIndex; + + public AttackState(PlayerController owner) : base(owner) { } + + public override void OnStateEnter() + { + _comboIndex = 0; + PlayAttackClip(); + Input.AttackEvent += OnAttackInput; + } + + public override void OnStateExit() + { + Input.AttackEvent -= OnAttackInput; + Owner.Combat?.DisableAllWeaponHitBoxes(); + } + + public override void OnStateUpdate() { } + public override void OnStateFixedUpdate() { } + + // ── 内部 ────────────────────────────────────────────────────────────── + + private void PlayAttackClip() + { + // ⚠️ 字段名 GroundAttacks(非 AttackChainClips) + var clip = AnimCfg.GroundAttacks[_comboIndex]; + var state = Anim.Play(clip); + var events = state.Events(this); + events.OnEnd = OnClipEnd; + + // HitBox 由 Animancer 归一化时间事件驱动 + events.Add(0.3f, + () => Owner.Combat?.EnableWeaponHitBox(AttackDirection.Ground)); + events.Add(0.6f, + () => Owner.Combat?.DisableAllWeaponHitBoxes()); + } + + private void OnClipEnd() + { + Input.AttackEvent -= OnAttackInput; + Owner.Combat?.DisableAllWeaponHitBoxes(); + Owner.TryTransitionState(Owner.IdleState); + } + + private void OnAttackInput() + { + if (_comboIndex < 2) + { + _comboIndex++; + PlayAttackClip(); + } + } + } +} diff --git a/Assets/Scripts/Player/States/AttackState.cs.meta b/Assets/Scripts/Player/States/AttackState.cs.meta new file mode 100644 index 0000000..313382c --- /dev/null +++ b/Assets/Scripts/Player/States/AttackState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7d976cdcc6a9c44ba569bff0147f6c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/BaseGames.Player.States.asmdef b/Assets/Scripts/Player/States/BaseGames.Player.States.asmdef new file mode 100644 index 0000000..93bd126 --- /dev/null +++ b/Assets/Scripts/Player/States/BaseGames.Player.States.asmdef @@ -0,0 +1,22 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Player.States", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Player.States", + "references": [ + "BaseGames.Player", + "BaseGames.Core.Events", + "BaseGames.Input", + "BaseGames.Combat", + "BaseGames.Parry", + "BaseGames.Feedback", + "Kybernetik.Animancer" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Player/States/BaseGames.Player.States.asmdef.meta b/Assets/Scripts/Player/States/BaseGames.Player.States.asmdef.meta new file mode 100644 index 0000000..16cc3fc --- /dev/null +++ b/Assets/Scripts/Player/States/BaseGames.Player.States.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c336a32eed62ced4280d1d4c9782ec91 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/FallState.cs b/Assets/Scripts/Player/States/FallState.cs new file mode 100644 index 0000000..7f5622b --- /dev/null +++ b/Assets/Scripts/Player/States/FallState.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +namespace BaseGames.Player.States +{ + /// 下落状态。着地后转为 Idle 或 Run,持有郊狼时间允许跳跃。 + public class FallState : PlayerStateBase + { + public FallState(PlayerController owner) : base(owner) { } + + public override void OnStateEnter() + { + if (AnimCfg?.Fall != null) + Anim.Play(AnimCfg.Fall); + } + + public override void OnStateUpdate() + { + // 郊狼时间跳跃 + if (Buffer.ConsumeJump() && Move.HasCoyoteTime) + { + _owner.TransitionTo(_owner.JumpState); + return; + } + + // 着地 + if (Move.IsGrounded) + { + Move.ZeroVelocity(); + if (Mathf.Abs(Input.MoveInput.x) > 0.1f) + _owner.TransitionTo(_owner.RunState); + else + _owner.TransitionTo(_owner.IdleState); + return; + } + + // 空中水平移动 + if (Mathf.Abs(Input.MoveInput.x) > 0.01f) + Move.Move(Input.MoveInput.x * (Cfg != null ? Cfg.RunSpeed : 7f)); + } + + public override void OnStateFixedUpdate() + { + // 增强下落重力 + if (Cfg != null && Move.Rb.velocity.y < 0f) + { + float extraGrav = Physics2D.gravity.y * (Cfg.FallGravityMult - 1f) * Time.fixedDeltaTime; + Move.Rb.velocity = new Vector2( + Move.Rb.velocity.x, + Mathf.Max(Move.Rb.velocity.y + extraGrav, -Cfg.MaxFallSpeed)); + } + } + } +} diff --git a/Assets/Scripts/Player/States/FallState.cs.meta b/Assets/Scripts/Player/States/FallState.cs.meta new file mode 100644 index 0000000..72ca411 --- /dev/null +++ b/Assets/Scripts/Player/States/FallState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d81f2601a90beeb4382680e53e18be63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/IdleState.cs b/Assets/Scripts/Player/States/IdleState.cs new file mode 100644 index 0000000..156b779 --- /dev/null +++ b/Assets/Scripts/Player/States/IdleState.cs @@ -0,0 +1,35 @@ +using UnityEngine; + +namespace BaseGames.Player.States +{ + /// 闲置状态。默认入口状态,播放 Idle 动画。 + public class IdleState : PlayerStateBase + { + public IdleState(PlayerController owner) : base(owner) { } + + public override void OnStateEnter() + { + if (AnimCfg?.Idle != null) + Anim.Play(AnimCfg.Idle); + Move?.ZeroHorizontalVelocity(); + } + + public override void OnStateUpdate() + { + if (!Move.IsGrounded) + { + _owner.TransitionTo(_owner.FallState); + return; + } + if (Buffer.ConsumeJump()) + { + _owner.TransitionTo(_owner.JumpState); + return; + } + if (Mathf.Abs(Input.MoveInput.x) > 0.1f) + { + _owner.TransitionTo(_owner.RunState); + } + } + } +} diff --git a/Assets/Scripts/Player/States/IdleState.cs.meta b/Assets/Scripts/Player/States/IdleState.cs.meta new file mode 100644 index 0000000..95e5ca8 --- /dev/null +++ b/Assets/Scripts/Player/States/IdleState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 84b6b9fa502d3d34a8d7284831404d75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/JumpState.cs b/Assets/Scripts/Player/States/JumpState.cs new file mode 100644 index 0000000..46b7eb9 --- /dev/null +++ b/Assets/Scripts/Player/States/JumpState.cs @@ -0,0 +1,38 @@ +using UnityEngine; + +namespace BaseGames.Player.States +{ + /// 跳跃状态。在 OnStateEnter 触发跳跃,速度降为零时转为 FallState。 + public class JumpState : PlayerStateBase + { + public JumpState(PlayerController owner) : base(owner) { } + + public override void OnStateEnter() + { + if (AnimCfg?.Jump != null) + Anim.Play(AnimCfg.Jump); + Move.Jump(); + Input.JumpCancelledEvent += OnJumpCancelled; + } + + public override void OnStateUpdate() + { + // 上升结束时转为下落 + if (Move.Rb.velocity.y <= 0f) + { + _owner.TransitionTo(_owner.FallState); + return; + } + // 水平移动 + if (Mathf.Abs(Input.MoveInput.x) > 0.01f) + Move.Move(Input.MoveInput.x * (Cfg != null ? Cfg.RunSpeed : 7f)); + } + + public override void OnStateExit() + { + Input.JumpCancelledEvent -= OnJumpCancelled; + } + + private void OnJumpCancelled() => Move.CutJump(); + } +} diff --git a/Assets/Scripts/Player/States/JumpState.cs.meta b/Assets/Scripts/Player/States/JumpState.cs.meta new file mode 100644 index 0000000..71ec027 --- /dev/null +++ b/Assets/Scripts/Player/States/JumpState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 643f44aee61bd684ebd893779e1122aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/PlayerController.cs b/Assets/Scripts/Player/States/PlayerController.cs new file mode 100644 index 0000000..3e1f4b6 --- /dev/null +++ b/Assets/Scripts/Player/States/PlayerController.cs @@ -0,0 +1,151 @@ +using UnityEngine; +using Animancer; +using BaseGames.Core.Events; +using BaseGames.Input; +using BaseGames.Combat; +using BaseGames.Parry; + +namespace BaseGames.Player.States +{ + /// + /// 玩家主控制器(协调器)。位于 Player/States/ 程序集,以便引用所有具体状态类型。 + /// 实现 IDamageable:IsInvincible/Defense 委托 PlayerStats,TakeDamage 委托 _stats。 + /// 依赖注入:所有子系统通过 [SerializeField] 字段在 Inspector 中绑定。 + /// + [DefaultExecutionOrder(-100)] + [RequireComponent(typeof(InputBuffer))] + public class PlayerController : MonoBehaviour, IDamageable + { + // ── 移动 & 数值 ─────────────────────────────────────────────────────── + [Header("核心组件")] + [SerializeField] private PlayerMovement _movement; + [SerializeField] private PlayerStats _stats; + [SerializeField] private AnimancerComponent _animancer; + + // ── 配置 SO ─────────────────────────────────────────────────────────── + [Header("配置")] + [SerializeField] private PlayerMovementConfigSO _movementConfig; + [SerializeField] private PlayerAnimationConfigSO _animConfig; + [SerializeField] private InputReaderSO _inputReader; [SerializeField] private PlayerStatsSO _statsConfig; // 数值基准(HP/弹簧等初始化用) + [SerializeField] private FormConfigSO _formConfig; // Phase 2:三形态切换参数 + // ── 战斗组件 ────────────────────────────────────────────────────────── + [Header("战斗")] + [SerializeField] private PlayerCombat _combat; + [SerializeField] private FormController _formController; + [SerializeField] private WeaponManager _weaponManager; + [SerializeField] private SkillManager _skillManager; + [SerializeField] private SpringSystem _springSystem; + [SerializeField] private ParrySystem _parrySystem; + [SerializeField] private HurtBox _hurtBox; + [SerializeField] private ShieldComponent _shield; + + // ── 事件频道 ────────────────────────────────────────────────────────── + [Header("事件频道")] + [SerializeField] private VoidEventChannelSO _onPlayerDied; + [SerializeField] private IntEventChannelSO _onHPChanged; + + // ── 运行时 ──────────────────────────────────────────────────────────── + private InputBuffer _inputBuffer; + + // ── 状态实例 ────────────────────────────────────────────────────────── + private PlayerStateBase _currentState; + + private IdleState _idleState; + private RunState _runState; + private JumpState _jumpState; + private FallState _fallState; + private AttackState _attackState; + + // ── IDamageable 实现 ────────────────────────────────────────────────── + public bool IsInvincible => _stats != null && _stats.IsInvincible; + public int Defense => 0; // Phase 2:从 PlayerStatsSO 读取 + + public void TakeDamage(DamageInfo info) + { + if (_stats == null) return; + _stats.TakeDamage(info.FinalDamage); + // Phase 2:若非 DashState,切换 HurtState + } + + // ── 公开属性(供状态类访问)────────────────────────────────────────── + public PlayerMovement Movement => _movement; + public PlayerStats Stats => _stats; + public AnimancerComponent Animancer => _animancer; + public PlayerMovementConfigSO MovConfig => _movementConfig; + public PlayerAnimationConfigSO AnimConfig => _animConfig; + public InputReaderSO Input => _inputReader; + public InputBuffer Buffer => _inputBuffer; + + public PlayerCombat Combat => _combat; + public FormController Form => _formController; + public WeaponManager Weapon => _weaponManager; + public SkillManager Skill => _skillManager; + public SpringSystem Spring => _springSystem; + public ParrySystem Parry => _parrySystem; + public HurtBox HurtBox => _hurtBox; + public ShieldComponent Shield => _shield; + + public bool IsGrounded => _movement != null && _movement.IsGrounded; + public int FacingDirection => _movement != null ? _movement.FacingDirection : 1; + + // ── Unity Lifecycle ─────────────────────────────────────────────────── + private void Awake() + { + _inputBuffer = GetComponent(); + + // 注入 HurtBox 依赖(Phase 1:只注入护盾;弹反/霸体 Phase 2) + if (_hurtBox != null && _shield != null) + _hurtBox.SetShieldable(_shield); + + InitializeStates(); + } + + private void Start() + { + TransitionTo(_idleState); + } + + private void Update() + { + _currentState?.OnStateUpdate(); + } + + private void FixedUpdate() + { + _currentState?.OnStateFixedUpdate(); + } + + private void LateUpdate() + { + _movement?.UpdateFacing(); + } + + // ── 状态机 ──────────────────────────────────────────────────────────── + public void TransitionTo(PlayerStateBase newState) + { + _currentState?.OnStateExit(); + _currentState = newState; + _currentState?.OnStateEnter(); + } + + /// 尝试切换状态(供状态内部的条件转换使用)。 + public void TryTransitionState(PlayerStateBase newState) + => TransitionTo(newState); + + private void InitializeStates() + { + _idleState = new IdleState(this); + _runState = new RunState(this); + _jumpState = new JumpState(this); + _fallState = new FallState(this); + _attackState = new AttackState(this); + } + + // ── 状态访问器 ──────────────────────────────────────────────────────── + public IdleState IdleState => _idleState; + public RunState RunState => _runState; + public JumpState JumpState => _jumpState; + public FallState FallState => _fallState; + public AttackState AttackState => _attackState; + } +} diff --git a/Assets/Scripts/Player/States/PlayerController.cs.meta b/Assets/Scripts/Player/States/PlayerController.cs.meta new file mode 100644 index 0000000..4043aaa --- /dev/null +++ b/Assets/Scripts/Player/States/PlayerController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e20d2200567c4ca4d8fa1a047c7bbd58 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/PlayerStateBase.cs b/Assets/Scripts/Player/States/PlayerStateBase.cs new file mode 100644 index 0000000..d8fb216 --- /dev/null +++ b/Assets/Scripts/Player/States/PlayerStateBase.cs @@ -0,0 +1,32 @@ +using Animancer; +using BaseGames.Input; +using BaseGames.Player; + +namespace BaseGames.Player.States +{ + /// + /// 所有玩家状态的抽象基类。持有 PlayerController 引用并提供便捷属性访问。 + /// 状态不继承 MonoBehaviour,生命周期由 PlayerController 驱动。 + /// + public abstract class PlayerStateBase + { + protected PlayerController _owner; + + protected PlayerStateBase(PlayerController owner) => _owner = owner; + + public virtual void OnStateEnter() { } + public virtual void OnStateUpdate() { } + public virtual void OnStateFixedUpdate() { } + public virtual void OnStateExit() { } + + // ── 便捷属性 ────────────────────────────────────────────────────────── + protected PlayerController Owner => _owner; + protected InputReaderSO Input => _owner.Input; + protected InputBuffer Buffer => _owner.Buffer; + protected PlayerMovement Move => _owner.Movement; + protected PlayerStats Stats => _owner.Stats; + protected AnimancerComponent Anim => _owner.Animancer; + protected PlayerMovementConfigSO Cfg => _owner.MovConfig; + protected PlayerAnimationConfigSO AnimCfg => _owner.AnimConfig; + } +} diff --git a/Assets/Scripts/Player/States/PlayerStateBase.cs.meta b/Assets/Scripts/Player/States/PlayerStateBase.cs.meta new file mode 100644 index 0000000..fe598f8 --- /dev/null +++ b/Assets/Scripts/Player/States/PlayerStateBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0e192113c871fe44ba2d9d56c95c27e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/RunState.cs b/Assets/Scripts/Player/States/RunState.cs new file mode 100644 index 0000000..dda4227 --- /dev/null +++ b/Assets/Scripts/Player/States/RunState.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace BaseGames.Player.States +{ + /// 跑步状态。播放 Run 动画并驱动水平移动。 + public class RunState : PlayerStateBase + { + public RunState(PlayerController owner) : base(owner) { } + + public override void OnStateEnter() + { + if (AnimCfg?.Run != null) + Anim.Play(AnimCfg.Run); + } + + public override void OnStateUpdate() + { + if (!Move.IsGrounded) + { + _owner.TransitionTo(_owner.FallState); + return; + } + if (Buffer.ConsumeJump()) + { + _owner.TransitionTo(_owner.JumpState); + return; + } + if (Mathf.Abs(Input.MoveInput.x) < 0.1f) + { + _owner.TransitionTo(_owner.IdleState); + return; + } + + Move.Move(Input.MoveInput.x * (Cfg != null ? Cfg.RunSpeed : 7f)); + } + + public override void OnStateFixedUpdate() + { + Move.Move(Input.MoveInput.x * (Cfg != null ? Cfg.RunSpeed : 7f)); + } + } +} diff --git a/Assets/Scripts/Player/States/RunState.cs.meta b/Assets/Scripts/Player/States/RunState.cs.meta new file mode 100644 index 0000000..54ccab4 --- /dev/null +++ b/Assets/Scripts/Player/States/RunState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f695c81f3a6b0bc4eafc75125bbf47aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/States/_Placeholder.cs b/Assets/Scripts/Player/States/_Placeholder.cs new file mode 100644 index 0000000..6ad9d57 --- /dev/null +++ b/Assets/Scripts/Player/States/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Player.States { } + diff --git a/Assets/Scripts/Player/States/_Placeholder.cs.meta b/Assets/Scripts/Player/States/_Placeholder.cs.meta new file mode 100644 index 0000000..9b1331a --- /dev/null +++ b/Assets/Scripts/Player/States/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee579de5ae36a9448b7463976699bc20 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/WeaponManager.cs b/Assets/Scripts/Player/WeaponManager.cs new file mode 100644 index 0000000..89c4180 --- /dev/null +++ b/Assets/Scripts/Player/WeaponManager.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; + +namespace BaseGames.Player +{ + /// + /// 武器管理器(Phase 1 实现)。 + /// 架构 05_PlayerModule §7:ActiveWeapon(WeaponSO),OnWeaponChanged 事件。 + /// ⚠️ 无 Equip() 方法,无 WeaponInstance 类。 + /// Phase 2 §2.3:接入 FormController.OnFormChanged。 + /// + public class WeaponManager : MonoBehaviour + { + [SerializeField] private WeaponSO _startingWeapon; + + public WeaponSO ActiveWeapon { get; private set; } + public event Action OnWeaponChanged; + + private void Start() + { + if (_startingWeapon != null) + { + ActiveWeapon = _startingWeapon; + OnWeaponChanged?.Invoke(ActiveWeapon); + } + } + } +} diff --git a/Assets/Scripts/Player/WeaponManager.cs.meta b/Assets/Scripts/Player/WeaponManager.cs.meta new file mode 100644 index 0000000..01337b0 --- /dev/null +++ b/Assets/Scripts/Player/WeaponManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6620d87234b5a9b4c811905861cd32fd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/WeaponSO.cs b/Assets/Scripts/Player/WeaponSO.cs new file mode 100644 index 0000000..1eeaf48 --- /dev/null +++ b/Assets/Scripts/Player/WeaponSO.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using BaseGames.Combat; + +namespace BaseGames.Player +{ + /// + /// 武器数据 SO(纯数据,不含 Prefab 引用)。 + /// 每个攻击方向对应一个 DamageSourceSO。 + /// + [CreateAssetMenu(menuName = "Player/Weapon")] + public class WeaponSO : ScriptableObject + { + public string WeaponName; + public DamageSourceSO GroundSource; + public DamageSourceSO AirSource; + public DamageSourceSO UpSource; + public DamageSourceSO DownSource; + + public DamageSourceSO GetSourceByDir(AttackDirection dir) => dir switch + { + AttackDirection.Ground => GroundSource, + AttackDirection.Air => AirSource, + AttackDirection.Up => UpSource, + AttackDirection.Down => DownSource, + _ => GroundSource, + }; + } +} diff --git a/Assets/Scripts/Player/WeaponSO.cs.meta b/Assets/Scripts/Player/WeaponSO.cs.meta new file mode 100644 index 0000000..f313845 --- /dev/null +++ b/Assets/Scripts/Player/WeaponSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2443d04d1c179d4d8a4f36e7ca7156e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Progression.meta b/Assets/Scripts/Progression.meta new file mode 100644 index 0000000..f184f52 --- /dev/null +++ b/Assets/Scripts/Progression.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e7d3fcc152a7a34ab3bdedf29eed52f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Progression/.gitkeep b/Assets/Scripts/Progression/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Progression/AchievementEventChannelSO.cs b/Assets/Scripts/Progression/AchievementEventChannelSO.cs new file mode 100644 index 0000000..7603b4f --- /dev/null +++ b/Assets/Scripts/Progression/AchievementEventChannelSO.cs @@ -0,0 +1,8 @@ +using BaseGames.Core.Events; +using UnityEngine; + +namespace BaseGames.Progression +{ + [CreateAssetMenu(menuName = "Events/Progression/AchievementUnlocked")] + public class AchievementEventChannelSO : BaseEventChannelSO { } +} diff --git a/Assets/Scripts/Progression/AchievementEventChannelSO.cs.meta b/Assets/Scripts/Progression/AchievementEventChannelSO.cs.meta new file mode 100644 index 0000000..8c79bb4 --- /dev/null +++ b/Assets/Scripts/Progression/AchievementEventChannelSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7432d3960c5c3f4f865bb5e0ec84bb5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Progression/AchievementSO.cs b/Assets/Scripts/Progression/AchievementSO.cs new file mode 100644 index 0000000..01234d5 --- /dev/null +++ b/Assets/Scripts/Progression/AchievementSO.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using BaseGames.Core.Events; + +namespace BaseGames.Progression +{ + /// + /// 成就数据 ScriptableObject(架构 16_SupportingModules §2.3)。 + /// Phase 0 骨架:仅包含基础标识字段,Phase 4 扩充完整逻辑。 + /// + [CreateAssetMenu(menuName = "Progression/Achievement", fileName = "ACH_")] + public class AchievementSO : ScriptableObject + { + [Tooltip("平台成就唯一标识符(与 Steam/平台后端同步)")] + public string achievementId; + + [Tooltip("成就显示名称")] + public string displayName; + + [TextArea(2, 4)] + [Tooltip("成就描述")] + public string description; + + [Tooltip("成就图标")] + public Sprite icon; + } + +} diff --git a/Assets/Scripts/Progression/AchievementSO.cs.meta b/Assets/Scripts/Progression/AchievementSO.cs.meta new file mode 100644 index 0000000..b96a9dc --- /dev/null +++ b/Assets/Scripts/Progression/AchievementSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d106f8e9164a82458c7d5dffa4eb5e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Progression/BaseGames.Progression.asmdef b/Assets/Scripts/Progression/BaseGames.Progression.asmdef new file mode 100644 index 0000000..eb15892 --- /dev/null +++ b/Assets/Scripts/Progression/BaseGames.Progression.asmdef @@ -0,0 +1,18 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Progression", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Progression", + "references": [ + "BaseGames.Core", + "BaseGames.Core.Events", + "BaseGames.Player" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Progression/BaseGames.Progression.asmdef.meta b/Assets/Scripts/Progression/BaseGames.Progression.asmdef.meta new file mode 100644 index 0000000..930f457 --- /dev/null +++ b/Assets/Scripts/Progression/BaseGames.Progression.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7a5929ec2ba94bb48b37a56e32c2ba97 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Progression/_Placeholder.cs b/Assets/Scripts/Progression/_Placeholder.cs new file mode 100644 index 0000000..a000468 --- /dev/null +++ b/Assets/Scripts/Progression/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Progression { } + diff --git a/Assets/Scripts/Progression/_Placeholder.cs.meta b/Assets/Scripts/Progression/_Placeholder.cs.meta new file mode 100644 index 0000000..e8ea293 --- /dev/null +++ b/Assets/Scripts/Progression/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d780bf52980df49418bfbb9521410cd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Spells.meta b/Assets/Scripts/Spells.meta new file mode 100644 index 0000000..41a9ee3 --- /dev/null +++ b/Assets/Scripts/Spells.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc568d38bab98ee4d9b5c8cdc508f449 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Spells/.gitkeep b/Assets/Scripts/Spells/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Spells/BaseGames.Spells.asmdef b/Assets/Scripts/Spells/BaseGames.Spells.asmdef new file mode 100644 index 0000000..558b53e --- /dev/null +++ b/Assets/Scripts/Spells/BaseGames.Spells.asmdef @@ -0,0 +1,18 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Spells", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Spells", + "references": [ + "BaseGames.Core.Events", + "BaseGames.Player", + "BaseGames.Combat" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Spells/BaseGames.Spells.asmdef.meta b/Assets/Scripts/Spells/BaseGames.Spells.asmdef.meta new file mode 100644 index 0000000..b6c6621 --- /dev/null +++ b/Assets/Scripts/Spells/BaseGames.Spells.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2bd9f31896eb6c5489e2e4fd357f2132 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Spells/_Placeholder.cs b/Assets/Scripts/Spells/_Placeholder.cs new file mode 100644 index 0000000..8d4ad0c --- /dev/null +++ b/Assets/Scripts/Spells/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Spells { } + diff --git a/Assets/Scripts/Spells/_Placeholder.cs.meta b/Assets/Scripts/Spells/_Placeholder.cs.meta new file mode 100644 index 0000000..0d3a517 --- /dev/null +++ b/Assets/Scripts/Spells/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49d899df890f706468f364678718a3eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Tutorial.meta b/Assets/Scripts/Tutorial.meta new file mode 100644 index 0000000..a686f79 --- /dev/null +++ b/Assets/Scripts/Tutorial.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8d00a2fe1158a043a8e7a972c4cd0e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Tutorial/.gitkeep b/Assets/Scripts/Tutorial/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/Tutorial/BaseGames.Tutorial.asmdef b/Assets/Scripts/Tutorial/BaseGames.Tutorial.asmdef new file mode 100644 index 0000000..27bb6d9 --- /dev/null +++ b/Assets/Scripts/Tutorial/BaseGames.Tutorial.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.Tutorial", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.Tutorial", + "references": [ + "BaseGames.Core.Events", + "BaseGames.World" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/Tutorial/BaseGames.Tutorial.asmdef.meta b/Assets/Scripts/Tutorial/BaseGames.Tutorial.asmdef.meta new file mode 100644 index 0000000..66c1ce6 --- /dev/null +++ b/Assets/Scripts/Tutorial/BaseGames.Tutorial.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 69e13da9aec864e4dad1e8db7d75f12d +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Tutorial/_Placeholder.cs b/Assets/Scripts/Tutorial/_Placeholder.cs new file mode 100644 index 0000000..59b2ccf --- /dev/null +++ b/Assets/Scripts/Tutorial/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.Tutorial { } + diff --git a/Assets/Scripts/Tutorial/_Placeholder.cs.meta b/Assets/Scripts/Tutorial/_Placeholder.cs.meta new file mode 100644 index 0000000..7ff1463 --- /dev/null +++ b/Assets/Scripts/Tutorial/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0851e8ef85bfc0b4bafdd785b886834c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI.meta b/Assets/Scripts/UI.meta new file mode 100644 index 0000000..ac793d3 --- /dev/null +++ b/Assets/Scripts/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afb67deffa2c8314b881215ca38a297b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/.gitkeep b/Assets/Scripts/UI/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/UI/BaseGames.UI.asmdef b/Assets/Scripts/UI/BaseGames.UI.asmdef new file mode 100644 index 0000000..a08c712 --- /dev/null +++ b/Assets/Scripts/UI/BaseGames.UI.asmdef @@ -0,0 +1,18 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.UI", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.UI", + "references": [ + "BaseGames.Core", + "BaseGames.Core.Events", + "Unity.TextMeshPro" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/UI/BaseGames.UI.asmdef.meta b/Assets/Scripts/UI/BaseGames.UI.asmdef.meta new file mode 100644 index 0000000..0576aef --- /dev/null +++ b/Assets/Scripts/UI/BaseGames.UI.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 227d8c9f56b569340aed5e35153e22a6 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/HUD.meta b/Assets/Scripts/UI/HUD.meta new file mode 100644 index 0000000..f83d3f4 --- /dev/null +++ b/Assets/Scripts/UI/HUD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9ae9298ea861bc47b2e8d8d746943d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/HUD/HUDController.cs b/Assets/Scripts/UI/HUD/HUDController.cs new file mode 100644 index 0000000..24051c7 --- /dev/null +++ b/Assets/Scripts/UI/HUD/HUDController.cs @@ -0,0 +1,130 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using TMPro; +using BaseGames.Core.Events; + +namespace BaseGames.UI.HUD +{ + public class HUDController : MonoBehaviour + { + [Header("HP")] + [SerializeField] private Transform _hpContainer; + [SerializeField] private GameObject _hpCellPrefab; + + [Header("Gauges")] + [SerializeField] private Image _soulGaugeFill; + [SerializeField] private Image _spiritGaugeFill; + [SerializeField] private TMP_Text _geoText; + + [Header("Spring Charges")] + [SerializeField] private Transform _springContainer; + [SerializeField] private GameObject _springIconPrefab; + + [Header("Form")] + [SerializeField] private Image[] _formIcons; + + [Header("Interact Prompt")] + [SerializeField] private TMP_Text _interactText; + [SerializeField] private GameObject _interactPromptRoot; + + [Header("Event Channels - Subscribe")] + [SerializeField] private IntEventChannelSO _onHPChanged; + [SerializeField] private IntEventChannelSO _onMaxHPChanged; + [SerializeField] private IntEventChannelSO _onSoulPowerChanged; + [SerializeField] private IntEventChannelSO _onSpiritPowerChanged; + [SerializeField] private IntEventChannelSO _onGeoChanged; + [SerializeField] private IntEventChannelSO _onSpringChargesChanged; + [SerializeField] private IntEventChannelSO _onFormChanged; + [SerializeField] private StringEventChannelSO _onShowInteractPrompt; + [SerializeField] private VoidEventChannelSO _onHideInteractPrompt; + + private readonly List _hpCells = new(); + private readonly List _springIcons = new(); + + private void OnEnable() + { + if (_onHPChanged != null) _onHPChanged.OnEventRaised += UpdateHP; + if (_onMaxHPChanged != null) _onMaxHPChanged.OnEventRaised += RebuildHPCells; + if (_onSoulPowerChanged != null) _onSoulPowerChanged.OnEventRaised += UpdateSoul; + if (_onSpiritPowerChanged != null) _onSpiritPowerChanged.OnEventRaised += UpdateSpirit; + if (_onGeoChanged != null) _onGeoChanged.OnEventRaised += UpdateGeo; + if (_onSpringChargesChanged != null) _onSpringChargesChanged.OnEventRaised += RebuildSpringIcons; + if (_onFormChanged != null) _onFormChanged.OnEventRaised += UpdateFormIcon; + if (_onShowInteractPrompt != null) _onShowInteractPrompt.OnEventRaised += ShowInteractPrompt; + if (_onHideInteractPrompt != null) _onHideInteractPrompt.OnEventRaised += HideInteractPrompt; + } + + private void OnDisable() + { + if (_onHPChanged != null) _onHPChanged.OnEventRaised -= UpdateHP; + if (_onMaxHPChanged != null) _onMaxHPChanged.OnEventRaised -= RebuildHPCells; + if (_onSoulPowerChanged != null) _onSoulPowerChanged.OnEventRaised -= UpdateSoul; + if (_onSpiritPowerChanged != null) _onSpiritPowerChanged.OnEventRaised -= UpdateSpirit; + if (_onGeoChanged != null) _onGeoChanged.OnEventRaised -= UpdateGeo; + if (_onSpringChargesChanged != null) _onSpringChargesChanged.OnEventRaised -= RebuildSpringIcons; + if (_onFormChanged != null) _onFormChanged.OnEventRaised -= UpdateFormIcon; + if (_onShowInteractPrompt != null) _onShowInteractPrompt.OnEventRaised -= ShowInteractPrompt; + if (_onHideInteractPrompt != null) _onHideInteractPrompt.OnEventRaised -= HideInteractPrompt; + } + + private void UpdateHP(int current) + { + for (int i = 0; i < _hpCells.Count; i++) + if (_hpCells[i] != null) _hpCells[i].SetActive(i < current); + } + + private void RebuildHPCells(int max) + { + foreach (var cell in _hpCells) + if (cell != null) Destroy(cell); + _hpCells.Clear(); + if (_hpContainer == null || _hpCellPrefab == null) return; + for (int i = 0; i < max; i++) + _hpCells.Add(Instantiate(_hpCellPrefab, _hpContainer)); + } + + private void UpdateSoul(int val) + { + if (_soulGaugeFill != null) _soulGaugeFill.fillAmount = val / 100f; + } + + private void UpdateSpirit(int val) + { + if (_spiritGaugeFill != null) _spiritGaugeFill.fillAmount = val / 100f; + } + + private void UpdateGeo(int val) + { + if (_geoText != null) _geoText.text = val.ToString(); + } + + private void RebuildSpringIcons(int charges) + { + foreach (var icon in _springIcons) + if (icon != null) Destroy(icon); + _springIcons.Clear(); + if (_springContainer == null || _springIconPrefab == null) return; + for (int i = 0; i < charges; i++) + _springIcons.Add(Instantiate(_springIconPrefab, _springContainer)); + } + + private void UpdateFormIcon(int formIndex) + { + if (_formIcons == null) return; + for (int i = 0; i < _formIcons.Length; i++) + if (_formIcons[i] != null) _formIcons[i].enabled = (i == formIndex); + } + + private void ShowInteractPrompt(string text) + { + if (_interactText != null) _interactText.text = text; + if (_interactPromptRoot != null) _interactPromptRoot.SetActive(true); + } + + private void HideInteractPrompt() + { + if (_interactPromptRoot != null) _interactPromptRoot.SetActive(false); + } + } +} diff --git a/Assets/Scripts/UI/HUD/HUDController.cs.meta b/Assets/Scripts/UI/HUD/HUDController.cs.meta new file mode 100644 index 0000000..9907cb7 --- /dev/null +++ b/Assets/Scripts/UI/HUD/HUDController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 533b885673d509d419e441a7264261a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/Menus.meta b/Assets/Scripts/UI/Menus.meta new file mode 100644 index 0000000..464c13f --- /dev/null +++ b/Assets/Scripts/UI/Menus.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cce9781f030e49648ba1939ca3cfdaa5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/Menus/DeathScreenController.cs b/Assets/Scripts/UI/Menus/DeathScreenController.cs new file mode 100644 index 0000000..c6cf494 --- /dev/null +++ b/Assets/Scripts/UI/Menus/DeathScreenController.cs @@ -0,0 +1,52 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.UI; +using TMPro; +using BaseGames.Core.Events; + +namespace BaseGames.UI.Menus +{ + public class DeathScreenController : MonoBehaviour + { + [SerializeField] private TMP_Text _deathMessage; + [SerializeField] private Button _btnRespawn; + + [Header("Event Channels")] + [SerializeField] private VoidEventChannelSO _onPlayerDied; + [SerializeField] private VoidEventChannelSO _onDeathScreenConfirmed; + + private void OnEnable() + { + if (_onPlayerDied != null) _onPlayerDied.OnEventRaised += OnPlayerDied; + } + + private void OnDisable() + { + if (_onPlayerDied != null) _onPlayerDied.OnEventRaised -= OnPlayerDied; + } + + private void OnPlayerDied() => StartCoroutine(ShowAfterDelay(1.5f)); + + private IEnumerator ShowAfterDelay(float delay) + { + yield return new WaitForSeconds(delay); + Show(); + } + + private void Show() + { + gameObject.SetActive(true); + if (_btnRespawn != null) + { + _btnRespawn.onClick.RemoveAllListeners(); + _btnRespawn.onClick.AddListener(Confirm); + } + } + + private void Confirm() + { + gameObject.SetActive(false); + _onDeathScreenConfirmed?.Raise(); + } + } +} diff --git a/Assets/Scripts/UI/Menus/DeathScreenController.cs.meta b/Assets/Scripts/UI/Menus/DeathScreenController.cs.meta new file mode 100644 index 0000000..975433d --- /dev/null +++ b/Assets/Scripts/UI/Menus/DeathScreenController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b6773e585eac299448529521e4b090c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/UIManager.cs b/Assets/Scripts/UI/UIManager.cs new file mode 100644 index 0000000..0d6e9ee --- /dev/null +++ b/Assets/Scripts/UI/UIManager.cs @@ -0,0 +1,81 @@ +using System.Collections.Generic; +using UnityEngine; +using BaseGames.Core; +using BaseGames.Core.Events; + +namespace BaseGames.UI +{ + [DefaultExecutionOrder(+50)] + public class UIManager : MonoBehaviour + { + [Header("Canvas Roots")] + [SerializeField] private GameObject _hudRoot; + [SerializeField] private GameObject _pauseMenuRoot; + [SerializeField] private GameObject _deathScreenRoot; + [SerializeField] private GameObject _settingsRoot; + [SerializeField] private GameObject _mapRoot; + [SerializeField] private GameObject _shopRoot; + + [Header("Event Channels")] + [SerializeField] private GameStateEventChannelSO _onGameStateChanged; + [SerializeField] private VoidEventChannelSO _onPauseRequested; + [SerializeField] private VoidEventChannelSO _onFastTravelOpen; + [SerializeField] private StringEventChannelSO _onShopOpen; + [SerializeField] private VoidEventChannelSO _onMapOpen; + + private readonly Stack _panelStack = new(); + + private void OnEnable() + { + if (_onGameStateChanged != null) _onGameStateChanged.OnEventRaised += HandleGameStateChanged; + if (_onPauseRequested != null) _onPauseRequested.OnEventRaised += TogglePause; + if (_onFastTravelOpen != null) _onFastTravelOpen.OnEventRaised += OpenMap; + if (_onShopOpen != null) _onShopOpen.OnEventRaised += OpenShop; + if (_onMapOpen != null) _onMapOpen.OnEventRaised += OpenMap; + } + + private void OnDisable() + { + if (_onGameStateChanged != null) _onGameStateChanged.OnEventRaised -= HandleGameStateChanged; + if (_onPauseRequested != null) _onPauseRequested.OnEventRaised -= TogglePause; + if (_onFastTravelOpen != null) _onFastTravelOpen.OnEventRaised -= OpenMap; + if (_onShopOpen != null) _onShopOpen.OnEventRaised -= OpenShop; + if (_onMapOpen != null) _onMapOpen.OnEventRaised -= OpenMap; + } + + private void HandleGameStateChanged(GameStateId state) + { + // GameStateId 是 struct,用 if/else 而非 switch + bool showHud = state == GameStates.Gameplay || state == GameStates.BossFight; + if (_hudRoot != null) _hudRoot.SetActive(showHud); + + if (state == GameStates.Dead) + { + if (_deathScreenRoot != null) _deathScreenRoot.SetActive(true); + } + else if (state == GameStates.Cutscene) + { + if (_hudRoot != null) _hudRoot.SetActive(false); + } + } + + public void OpenPanel(GameObject panel) + { + if (panel == null) return; + if (_panelStack.Count > 0) _panelStack.Peek().SetActive(false); + panel.SetActive(true); + _panelStack.Push(panel); + } + + public void CloseTopPanel() + { + if (_panelStack.Count == 0) return; + _panelStack.Pop().SetActive(false); + if (_panelStack.Count > 0) _panelStack.Peek().SetActive(true); + } + + private void TogglePause() => OpenPanel(_pauseMenuRoot); + private void OpenShop(string _) => OpenPanel(_shopRoot); + private void OpenMap() => OpenPanel(_mapRoot); + } +} diff --git a/Assets/Scripts/UI/UIManager.cs.meta b/Assets/Scripts/UI/UIManager.cs.meta new file mode 100644 index 0000000..158ea45 --- /dev/null +++ b/Assets/Scripts/UI/UIManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b9dc4d5fa79326428150ef020e32fe4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/_Placeholder.cs b/Assets/Scripts/UI/_Placeholder.cs new file mode 100644 index 0000000..374ef2c --- /dev/null +++ b/Assets/Scripts/UI/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.UI { } + diff --git a/Assets/Scripts/UI/_Placeholder.cs.meta b/Assets/Scripts/UI/_Placeholder.cs.meta new file mode 100644 index 0000000..a3bb44d --- /dev/null +++ b/Assets/Scripts/UI/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2087fe261337fef4d9be0845a93bc890 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/VFX.meta b/Assets/Scripts/VFX.meta new file mode 100644 index 0000000..43a094f --- /dev/null +++ b/Assets/Scripts/VFX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17142657c32202b41a353e2dbe4fd09d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/VFX/BaseGames.VFX.asmdef b/Assets/Scripts/VFX/BaseGames.VFX.asmdef new file mode 100644 index 0000000..d8e9e5e --- /dev/null +++ b/Assets/Scripts/VFX/BaseGames.VFX.asmdef @@ -0,0 +1,21 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.VFX", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.VFX", + "references": [ + "BaseGames.Core.Events", + "BaseGames.Core", + "BaseGames.Combat", + "BaseGames.Feedback", + "Unity.Addressables", + "Unity.ResourceManager" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/VFX/BaseGames.VFX.asmdef.meta b/Assets/Scripts/VFX/BaseGames.VFX.asmdef.meta new file mode 100644 index 0000000..ea4c527 --- /dev/null +++ b/Assets/Scripts/VFX/BaseGames.VFX.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c71c756e9181e714aa56edbbf35d4df2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/VFX/HitFXSpawner.cs b/Assets/Scripts/VFX/HitFXSpawner.cs new file mode 100644 index 0000000..0d53c55 --- /dev/null +++ b/Assets/Scripts/VFX/HitFXSpawner.cs @@ -0,0 +1,42 @@ +using UnityEngine; +using BaseGames.Combat; + +namespace BaseGames.VFX +{ + /// + /// 全局命中特效派发器:订阅 HitConfirmedEventChannel, + /// 根据 DamageInfo.FxType 从 VFXCatalog 查找并播放特效。 + /// 放置在 Persistent 场景的 [Systems] GameObject 上。 + /// + public class HitFXSpawner : MonoBehaviour + { + [SerializeField] private HitConfirmedEventChannelSO _onHitConfirmed; + [SerializeField] private VFXCatalogSO _catalog; + + private void Awake() + { + if (_catalog != null) + _catalog.Initialize(); + } + + private void OnEnable() + { + if (_onHitConfirmed != null) + _onHitConfirmed.OnEventRaised += HandleHit; + } + + private void OnDisable() + { + if (_onHitConfirmed != null) + _onHitConfirmed.OnEventRaised -= HandleHit; + } + + private void HandleHit(HitInfo info) + { + if (_catalog == null || VFXPool.Instance == null) return; + + if (_catalog.TryGetHitFX(info.DamageInfo.FxType, out var vfxRef)) + VFXPool.Instance.Play(vfxRef, info.HitPoint); + } + } +} diff --git a/Assets/Scripts/VFX/HitFXSpawner.cs.meta b/Assets/Scripts/VFX/HitFXSpawner.cs.meta new file mode 100644 index 0000000..2447a85 --- /dev/null +++ b/Assets/Scripts/VFX/HitFXSpawner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6380807294a34ad4cb0a2b7099712163 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/VFX/HurtFlashController.cs b/Assets/Scripts/VFX/HurtFlashController.cs new file mode 100644 index 0000000..6e220dc --- /dev/null +++ b/Assets/Scripts/VFX/HurtFlashController.cs @@ -0,0 +1,56 @@ +using System.Collections; +using UnityEngine; +using BaseGames.Feedback; + +namespace BaseGames.VFX +{ + /// + /// 受伤闪白效果控制器。 + /// 通过 MaterialPropertyBlock 修改 SpriteRenderer 材质的 _FlashAmount 参数(0~1); + /// 对应 Shader 需暴露 _FlashColor 与 _FlashAmount 两个属性。 + /// 调用 Flash() 触发一次闪白动画(Coroutine 实现,不依赖 UniTask)。 + /// + public class HurtFlashController : MonoBehaviour + { + [SerializeField] private SpriteRenderer _renderer; + [SerializeField] private FeedbackConfigSO _config; + + private static readonly int FlashColorID = Shader.PropertyToID("_FlashColor"); + private static readonly int FlashAmountID = Shader.PropertyToID("_FlashAmount"); + + private MaterialPropertyBlock _block; + private Coroutine _flashCoroutine; + + private void Awake() + { + if (_renderer == null) + _renderer = GetComponent(); + _block = new MaterialPropertyBlock(); + } + + /// 触发一次闪白动画。若上一次闪白未结束则重置计时器。 + public void Flash() + { + if (_flashCoroutine != null) + StopCoroutine(_flashCoroutine); + _flashCoroutine = StartCoroutine(FlashCoroutine()); + } + + private IEnumerator FlashCoroutine() + { + SetFlash(1f); + yield return new WaitForSeconds(_config != null ? _config.HurtFlashDuration : 0.12f); + SetFlash(0f); + _flashCoroutine = null; + } + + private void SetFlash(float amount) + { + _renderer.GetPropertyBlock(_block); + if (_config != null) + _block.SetColor(FlashColorID, _config.HurtFlashColor); + _block.SetFloat(FlashAmountID, amount); + _renderer.SetPropertyBlock(_block); + } + } +} diff --git a/Assets/Scripts/VFX/HurtFlashController.cs.meta b/Assets/Scripts/VFX/HurtFlashController.cs.meta new file mode 100644 index 0000000..50091fc --- /dev/null +++ b/Assets/Scripts/VFX/HurtFlashController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0913d359cdb3e3849b286bc6e7cc311f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/VFX/VFXCatalogSO.cs b/Assets/Scripts/VFX/VFXCatalogSO.cs new file mode 100644 index 0000000..307081c --- /dev/null +++ b/Assets/Scripts/VFX/VFXCatalogSO.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.AddressableAssets; +using BaseGames.Combat; + +namespace BaseGames.VFX +{ + /// + /// VFX 资产映射字典:HitFxType → VFX Prefab Addressable 引用。 + /// 在 GameManager.OnGameplayStarted 中调用 Initialize() 建立快速查表。 + /// 资产路径:Assets/ScriptableObjects/VFX/VFX_Catalog.asset + /// + [CreateAssetMenu(menuName = "VFX/VFXCatalog")] + public class VFXCatalogSO : ScriptableObject + { + [Header("命中特效映射")] + public VFXEntry[] hitEffects; + + [Header("预热配置")] + public VFXWarmupEntry[] warmups; + + private Dictionary _map; + + /// 建立快速查表字典。在 Gameplay 开始前调用一次。 + public void Initialize() + { + _map = new Dictionary(); + if (hitEffects == null) return; + foreach (var e in hitEffects) + _map[e.type] = e.vfxRef; + } + + /// 根据 HitFxType 查找对应 VFX Prefab 引用。 + public bool TryGetHitFX(HitFxType type, out AssetReferenceGameObject vfxRef) + { + if (_map != null) + return _map.TryGetValue(type, out vfxRef); + + // 未初始化时回退至线性查找 + if (hitEffects != null) + { + foreach (var e in hitEffects) + { + if (e.type == type) { vfxRef = e.vfxRef; return true; } + } + } + vfxRef = default; + return false; + } + } + + [Serializable] + public struct VFXEntry + { + public HitFxType type; + public AssetReferenceGameObject vfxRef; + } + + [Serializable] + public struct VFXWarmupEntry + { + public AssetReferenceGameObject vfxRef; + [Min(1)] public int warmupCount; + } +} diff --git a/Assets/Scripts/VFX/VFXCatalogSO.cs.meta b/Assets/Scripts/VFX/VFXCatalogSO.cs.meta new file mode 100644 index 0000000..a89eaf2 --- /dev/null +++ b/Assets/Scripts/VFX/VFXCatalogSO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a55d31d8ca14fa5498d42bc28a4189f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/VFX/VFXPool.cs b/Assets/Scripts/VFX/VFXPool.cs new file mode 100644 index 0000000..465b869 --- /dev/null +++ b/Assets/Scripts/VFX/VFXPool.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.AddressableAssets; + +namespace BaseGames.VFX +{ + /// + /// ParticleSystem 专用对象池。挂在 Persistent 场景 [VFXPool] GameObject 上。 + /// 粒子播放完成(或超过 MaxLifetime)后自动回池,调用方无需手动归还。 + /// 不依赖 UniTask,使用 Coroutine 驱动回收。 + /// + public class VFXPool : MonoBehaviour + { + public static VFXPool Instance { get; private set; } + + /// 全局兜底超时(秒)。防止循环粒子永不回池。 + [SerializeField, Min(1f)] private float _globalMaxLifetime = 10f; + + private readonly Dictionary> _pools + = new Dictionary>(); + + private void Awake() => Instance = this; + + /// + /// 在世界坐标播放一次特效(Fire-and-forget,Coroutine 自动回池)。 + /// + /// >0 时覆盖全局超时;≤0 时使用 _globalMaxLifetime。 + public void Play(AssetReferenceGameObject vfxRef, + Vector3 position, + Quaternion rotation = default, + float maxLifetime = 0f) + { + StartCoroutine(PlayCoroutine(vfxRef, position, rotation, maxLifetime)); + } + + /// 预热:预先创建若干实例避免首次播放卡顿。 + public void Warmup(AssetReferenceGameObject vfxRef, int count) + { + StartCoroutine(WarmupCoroutine(vfxRef, count)); + } + + // ── 内部实现 ───────────────────────────────────────────────────────────── + private IEnumerator PlayCoroutine(AssetReferenceGameObject vfxRef, + Vector3 position, + Quaternion rotation, + float maxLifetime) + { + ParticleSystem ps = null; + + // 从池中取或异步创建 + if (TryDequeue(vfxRef, out ps)) + { + // 直接使用 + } + else + { + // 异步加载并实例化 + var op = Addressables.InstantiateAsync(vfxRef, transform); + yield return op; + if (op.Result == null) + { + Debug.LogError($"[VFXPool] Failed to instantiate VFX: {vfxRef.RuntimeKey}"); + yield break; + } + ps = op.Result.GetComponent(); + if (ps == null) + { + Debug.LogError($"[VFXPool] No ParticleSystem on VFX prefab: {vfxRef.RuntimeKey}"); + Addressables.ReleaseInstance(op.Result); + yield break; + } + ps.gameObject.SetActive(false); + } + + // 播放 + ps.transform.SetPositionAndRotation(position, rotation); + ps.gameObject.SetActive(true); + ps.Play(); + + float limit = maxLifetime > 0f ? maxLifetime : _globalMaxLifetime; + float elapsed = 0f; + + // 等待粒子结束或超时 + while (elapsed < limit && ps.IsAlive(true)) + { + elapsed += Time.deltaTime; + yield return null; + } + + if (ps.IsAlive(true)) + { + ps.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear); + Debug.LogWarning( + $"[VFXPool] '{vfxRef.RuntimeKey}' 超过 {limit:F1}s 强制回收。" + + " 请检查粒子是否设为 Loop 或 Duration 过长。"); + } + + ps.gameObject.SetActive(false); + Enqueue(vfxRef, ps); + } + + private IEnumerator WarmupCoroutine(AssetReferenceGameObject vfxRef, int count) + { + for (int i = 0; i < count; i++) + { + var op = Addressables.InstantiateAsync(vfxRef, transform); + yield return op; + if (op.Result == null) continue; + var ps = op.Result.GetComponent(); + if (ps == null) { Addressables.ReleaseInstance(op.Result); continue; } + ps.gameObject.SetActive(false); + Enqueue(vfxRef, ps); + } + } + + private bool TryDequeue(AssetReferenceGameObject key, out ParticleSystem ps) + { + ps = null; + return _pools.TryGetValue(key, out var q) && q.Count > 0 && (ps = q.Dequeue()) != null; + } + + private void Enqueue(AssetReferenceGameObject key, ParticleSystem ps) + { + if (!_pools.ContainsKey(key)) + _pools[key] = new Queue(); + _pools[key].Enqueue(ps); + } + } +} diff --git a/Assets/Scripts/VFX/VFXPool.cs.meta b/Assets/Scripts/VFX/VFXPool.cs.meta new file mode 100644 index 0000000..f1a43c4 --- /dev/null +++ b/Assets/Scripts/VFX/VFXPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f2e57f42abd15c419f9013416d4a6d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World.meta b/Assets/Scripts/World.meta new file mode 100644 index 0000000..59ecb55 --- /dev/null +++ b/Assets/Scripts/World.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c98600892b76a546b98042fd1fac881 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/BaseGames.World.asmdef b/Assets/Scripts/World/BaseGames.World.asmdef new file mode 100644 index 0000000..7b35182 --- /dev/null +++ b/Assets/Scripts/World/BaseGames.World.asmdef @@ -0,0 +1,18 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.World", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.World", + "references": [ + "BaseGames.Core", + "BaseGames.Core.Events", + "BaseGames.Core.Save" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/World/BaseGames.World.asmdef.meta b/Assets/Scripts/World/BaseGames.World.asmdef.meta new file mode 100644 index 0000000..ef2097d --- /dev/null +++ b/Assets/Scripts/World/BaseGames.World.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 81558e1e6a01fa943bcce6d66566ed7b +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/IInteractable.cs b/Assets/Scripts/World/IInteractable.cs new file mode 100644 index 0000000..84d7386 --- /dev/null +++ b/Assets/Scripts/World/IInteractable.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace BaseGames.World +{ + public interface IInteractable + { + bool CanInteract { get; } + string InteractPrompt { get; } + void Interact(Transform player); + void OnPlayerEnterRange(Transform player); + void OnPlayerExitRange(); + } +} diff --git a/Assets/Scripts/World/IInteractable.cs.meta b/Assets/Scripts/World/IInteractable.cs.meta new file mode 100644 index 0000000..86fe0a1 --- /dev/null +++ b/Assets/Scripts/World/IInteractable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36d04dce72e906e4bb052f5ff04894bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/Map.meta b/Assets/Scripts/World/Map.meta new file mode 100644 index 0000000..c6ce064 --- /dev/null +++ b/Assets/Scripts/World/Map.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 707a251ab7e42284dbb474e17c76c801 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/Map/.gitkeep b/Assets/Scripts/World/Map/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/World/Map/BaseGames.World.Map.asmdef b/Assets/Scripts/World/Map/BaseGames.World.Map.asmdef new file mode 100644 index 0000000..89de9a6 --- /dev/null +++ b/Assets/Scripts/World/Map/BaseGames.World.Map.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.World.Map", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.World.Map", + "references": [ + "BaseGames.World", + "BaseGames.Core.Save" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/World/Map/BaseGames.World.Map.asmdef.meta b/Assets/Scripts/World/Map/BaseGames.World.Map.asmdef.meta new file mode 100644 index 0000000..c1d2ded --- /dev/null +++ b/Assets/Scripts/World/Map/BaseGames.World.Map.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ae09ef3fe95109847963c055501f16bc +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/Map/_Placeholder.cs b/Assets/Scripts/World/Map/_Placeholder.cs new file mode 100644 index 0000000..56092f8 --- /dev/null +++ b/Assets/Scripts/World/Map/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.World.Map { } + diff --git a/Assets/Scripts/World/Map/_Placeholder.cs.meta b/Assets/Scripts/World/Map/_Placeholder.cs.meta new file mode 100644 index 0000000..6410677 --- /dev/null +++ b/Assets/Scripts/World/Map/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f152c8530651afe41979707db9a5c2fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/SavePoint.cs b/Assets/Scripts/World/SavePoint.cs new file mode 100644 index 0000000..ed6540c --- /dev/null +++ b/Assets/Scripts/World/SavePoint.cs @@ -0,0 +1,58 @@ +using UnityEngine; +using BaseGames.Core; +using BaseGames.Core.Events; +using BaseGames.Core.Save; + +namespace BaseGames.World +{ + public class SavePoint : MonoBehaviour, IInteractable, ISaveable + { + [Header("Config")] + [SerializeField] private string _savePointId; + [SerializeField] private bool _restoreSpring = true; + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onSavePointActivated; + [SerializeField] private VoidEventChannelSO _onFastTravelOpen; + + private bool _isActivated; + + // ── IInteractable ────────────────────────────────────────────────────── + public bool CanInteract => true; + public string InteractPrompt => _isActivated ? "休息" : "激活"; + + public void Interact(Transform player) + { + _isActivated = true; + var restorer = player.GetComponentInChildren(); + if (restorer != null) + { + restorer.FullRestore(); + if (_restoreSpring) restorer.RestoreSpring(); + } + + _onSavePointActivated?.Raise(_savePointId); + _onFastTravelOpen?.Raise(); + } + + public void OnPlayerEnterRange(Transform player) { } + public void OnPlayerExitRange() { } + + // ── 存档集成 ──────────────────────────────────────────────────────────── + public bool IsActivated => _isActivated; + public void SetActivated(bool val) => _isActivated = val; + + public void OnSave(SaveData data) + { + if (_isActivated && !string.IsNullOrEmpty(_savePointId) + && !data.World.ActivatedSavePoints.Contains(_savePointId)) + data.World.ActivatedSavePoints.Add(_savePointId); + } + + public void OnLoad(SaveData data) + { + _isActivated = !string.IsNullOrEmpty(_savePointId) + && data.World.ActivatedSavePoints.Contains(_savePointId); + } + } +} diff --git a/Assets/Scripts/World/SavePoint.cs.meta b/Assets/Scripts/World/SavePoint.cs.meta new file mode 100644 index 0000000..4a11841 --- /dev/null +++ b/Assets/Scripts/World/SavePoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 041d16d10df125a48b5878935b56f3c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/Shop.meta b/Assets/Scripts/World/Shop.meta new file mode 100644 index 0000000..d8e432f --- /dev/null +++ b/Assets/Scripts/World/Shop.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d96c699a4f27e434a9d84107415cb90c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/Shop/.gitkeep b/Assets/Scripts/World/Shop/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/Assets/Scripts/World/Shop/BaseGames.World.Shop.asmdef b/Assets/Scripts/World/Shop/BaseGames.World.Shop.asmdef new file mode 100644 index 0000000..d614918 --- /dev/null +++ b/Assets/Scripts/World/Shop/BaseGames.World.Shop.asmdef @@ -0,0 +1,17 @@ +{ + "excludePlatforms": [], + "allowUnsafeCode": false, + "precompiledReferences": [], + "name": "BaseGames.World.Shop", + "defineConstraints": [], + "noEngineReferences": false, + "versionDefines": [], + "rootNamespace": "BaseGames.World.Shop", + "references": [ + "BaseGames.World", + "BaseGames.Core.Events" + ], + "autoReferenced": true, + "overrideReferences": false, + "includePlatforms": [] +} diff --git a/Assets/Scripts/World/Shop/BaseGames.World.Shop.asmdef.meta b/Assets/Scripts/World/Shop/BaseGames.World.Shop.asmdef.meta new file mode 100644 index 0000000..159d501 --- /dev/null +++ b/Assets/Scripts/World/Shop/BaseGames.World.Shop.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7a7d22d0f9f2487469fc0d7e24aecc5c +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/Shop/_Placeholder.cs b/Assets/Scripts/World/Shop/_Placeholder.cs new file mode 100644 index 0000000..1e6278a --- /dev/null +++ b/Assets/Scripts/World/Shop/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.World.Shop { } + diff --git a/Assets/Scripts/World/Shop/_Placeholder.cs.meta b/Assets/Scripts/World/Shop/_Placeholder.cs.meta new file mode 100644 index 0000000..65e6b9b --- /dev/null +++ b/Assets/Scripts/World/Shop/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5aaebdd34d7a805429f8fb1ddfe7036c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/World/_Placeholder.cs b/Assets/Scripts/World/_Placeholder.cs new file mode 100644 index 0000000..21e9c80 --- /dev/null +++ b/Assets/Scripts/World/_Placeholder.cs @@ -0,0 +1,3 @@ +// Placeholder to prevent asmdef-no-scripts warning. +namespace BaseGames.World { } + diff --git a/Assets/Scripts/World/_Placeholder.cs.meta b/Assets/Scripts/World/_Placeholder.cs.meta new file mode 100644 index 0000000..4ea928a --- /dev/null +++ b/Assets/Scripts/World/_Placeholder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff42efce602d87546a55c9b1c9d5f778 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings.meta b/Assets/Settings.meta new file mode 100644 index 0000000..b36ca5e --- /dev/null +++ b/Assets/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0220aab0833d04faeb927d84ca6cc40c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Lit2DSceneTemplate.scenetemplate b/Assets/Settings/Lit2DSceneTemplate.scenetemplate new file mode 100644 index 0000000..57b5b8f --- /dev/null +++ b/Assets/Settings/Lit2DSceneTemplate.scenetemplate @@ -0,0 +1,71 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!28 &-3604256930052969394 +Texture2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Lit 2D + m_ImageContentsHash: + serializedVersion: 2 + Hash: 3eb422a44b812e16b34078a6083bea48 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 1 + serializedVersion: 2 + m_Width: 1068 + m_Height: 615 + m_CompleteImageSize: 1970460 + m_MipsStripped: 0 + m_TextureFormat: 3 + m_MipCount: 1 + m_IsReadable: 1 + m_IsPreProcessed: 0 + m_IgnoreMasterTextureLimit: 0 + m_StreamingMipmaps: 0 + m_StreamingMipmapsPriority: 0 + m_VTOnly: 0 + m_AlphaIsTransparency: 1 + m_ImageCount: 1 + m_TextureDimension: 2 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 1 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_LightmapFormat: 6 + m_ColorSpace: 1 + m_PlatformBlob: + image data: 1970460 + _typelessdata: 4646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454444444444444444444444444444444444444444444545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444444444444444343434343434343434343434343434343434343434343434444444444444444444444444545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444444444343434343434343434242424242424242424141414141414141414141414242424242424242424242424343434343434343434444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434343434242424242424141414141414040404040404040404040403f3f3f3f3f3f3f3f3f4040404040404040404040404141414141414242424343434343434444444444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434343434242424141414141414040403f3f3f3f3f3f3e3e3e3e3e3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3e3e3e3e3e3f3f3f3f3f3f4040404141414242424242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424141414040403f3f3f3f3f3f3e3e3e3d3d3d3c3c3c3c3c3c3b3b3b3b3b3b3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3b3b3b3b3b3b3c3c3c3c3c3c3d3d3d3e3e3e3f3f3f4040404141414141414242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141414040403f3f3f3e3e3e3d3d3d3c3c3c3b3b3b3a3a3a3939393939393838383838383838383838383939393838383838383838383838383939393a3a3a3a3a3a3b3b3b3c3c3c3d3d3d3f3f3f4040404141414242424343434343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424141414040403e3e3e3d3d3d3c3c3c3b3b3b3939393838383737373a3a3a4343434949494f4f4f6060606c6c6c7373736969695c5c5c4c4c4c4747473f3f3f3838383737373939393a3a3a3b3b3b3c3c3c3d3d3d3f3f3f4040404141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424040403f3f3f3e3e3e3c3c3c3b3b3b3939393838383737374343436666668e8e8ebfbfbfe3e3e3f8f8f8fffffffffffffffffffffffffefefef3f3f3dadadab1b1b17f7f7f5a5a5a3d3d3d3838383838383a3a3a3b3b3b3d3d3d3e3e3e3f3f3f4141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454545454545454545454545454444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444545454545454545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434141414040403f3f3f3d3d3d3b3b3b3a3a3a383838393939494949868686cbcbcbeeeeeefdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfbe6e6e6b7b7b76d6d6d4141413737373939393a3a3a3c3c3c3e3e3e3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454444444444444444444444444444444444444444444444444343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434444444444444444444444444444444444444444444545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434141414040403e3e3e3d3d3d3b3b3b3939393737374343437e7e7ed6d6d6fafafafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefef5f5f5bfbfbf6666663b3b3b3838383a3a3a3b3b3b3d3d3d3f3f3f4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454444444444444444444444444343434343434343434343434343434242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424343434343434343434343434444444444444444444444444545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c3a3a3a383838383838585858b5b5b5f4f4f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebebeb9898984747473838383939393b3b3b3d3d3d3f3f3f4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444444444343434343434343434242424242424242424141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414242424242424242424343434343434343434444444444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c3a3a3a3838383b3b3b6e6e6edbdbdbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f9bdbdbd5454543838383939393b3b3b3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444444444343434343434242424242424141414141414141414040404040404040404040403f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f4040404040404040404040404141414141414141414242424242424343434343434444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141413f3f3f3d3d3d3b3b3b3838383c3c3c7d7d7de8e8e8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdd3d3d35c5c5c3939393939393b3b3b3d3d3d3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444444444343434242424242424141414141414040404040403f3f3f3f3f3f3e3e3e3e3e3e3e3e3e3e3e3e3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3e3e3e3e3e3e3e3e3e3e3e3e3f3f3f3f3f3f3f3f3f4040404141414141414242424242424343434444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3b3b3b3939393b3b3b7a7a7af1f1f1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefed1d1d15959593838383939393c3c3c3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434343434242424141414141414040403f3f3f3e3e3e3d3d3d3d3d3d3c3c3c3c3c3c3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3c3c3c3c3c3c3c3c3c3d3d3d3e3e3e3e3e3e3f3f3f4040404141414141414242424343434343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c393939373737656565e5e5e5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefec7c7c74a4a4a3737373a3a3a3c3c3c3f3f3f4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434343434242424141414040403f3f3f3e3e3e3d3d3d3c3c3c3b3b3b3a3a3a3a3a3a3939393939393838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383939393939393a3a3a3a3a3a3b3b3b3c3c3c3d3d3d3e3e3e3f3f3f4040404141414242424343434343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424141413f3f3f3c3c3c3a3a3a383838505050d1d1d1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfca3a3a34040403838383b3b3b3d3d3d3f3f3f4141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424141413f3f3f3e3e3e3d3d3d3b3b3b3a3a3a3939393838383737373636363535353535353535353434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343535353535353636363737373838383939393a3a3a3b3b3b3d3d3d3e3e3e3f3f3f4141414242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141414040403d3d3d3b3b3b3838383d3d3daaaaaafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f87979793838383939393c3c3c3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424141413f3f3f3d3d3d3c3c3c3a3a3a3939393737373636363434343333333232323131313131313030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303131313131313232323333333434343636363737373939393a3a3a3c3c3c3e3e3e3f3f3f4141414242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424141413f3f3f3c3c3c3a3a3a3737376a6a6aedededffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcf4e4e4e3838383a3a3a3d3d3d3f3f3f4141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141413f3f3f3d3d3d3b3b3b3939393737373636363434343232323030302f2f2f2e2e2e2d2d2d2c2c2c2c2c2c2c2c2c2c2c2c2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2c2c2c2c2c2c2c2c2c2d2d2d2d2d2d2e2e2e2f2f2f3030303232323434343636363737373a3a3a3c3c3c3e3e3e3f3f3f4141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3b3b3b383838424242bcbcbcfefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc8686863939393939393c3c3c3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141414040403e3e3e3b3b3b3939393737373434343232323030302e2e2e2c2c2c2a2a2a2929292929292828282727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272828282929292929292b2b2b2c2c2c2e2e2e3030303232323434343737373939393c3c3c3e3e3e4040404141414343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a383838696969f4f4f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7d7d74848483838383b3b3b3d3d3d4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c3939393737373434343131312e2e2e2c2c2c2929292828282626262525252424242323232323232222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222323232323232424242525252626262828282a2a2a2c2c2c2e2e2e3131313434343737373939393c3c3c3e3e3e4040404242424343434444444545454545454545454646464646464646464646464646464545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3c3c3c3939393c3c3cadadadfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f87c7c7c3737373a3a3a3c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424141413f3f3f3d3d3d3a3a3a3737373434343030302d2d2d2a2a2a2727272525253030304343434d4d4d5353535252525252525353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535252525353535252524d4d4d4242422e2e2e2525252828282a2a2a2d2d2d3131313434343737373a3a3a3d3d3d3f3f3f4141414242424444444444444545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3b3b3b3838384a4a4ae3e3e3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3b3b33c3c3c3939393c3c3c3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3b3b3b3838383434343131312d2d2d2929292a2a2a4747478b8b8bbcbcbcd5d5d5dfdfdfe5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5e5dfdfdfd6d6d6b9b9b98484844141412c2c2c2a2a2a2d2d2d3131313434343838383b3b3b3e3e3e4040404242424343434444444545454545454545454545454545454545454444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737737373f5f5f5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdadada5151513838383b3b3b3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3c3c3c3939393535353232322d2d2d2a2a2a3636367f7f7fddddddf8f8f8fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcf5f5f5d8d8d87d7d7d3131312a2a2a2e2e2e3232323636363939393c3c3c3f3f3f4141414242424343434444444444444444444444444444444444444444444444444343434343434343434343434343434343434343434343434343434343434343434343434343434444444444444444444444444545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3c3c3c3939393636369c9c9cfbfbfbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f3f36565653737373a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3b3b3b3737373333332f2f2f2a2a2a3c3c3c9f9f9ff5f5f5fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf2f2f29a9a9a3535352b2b2b2f2f2f3333333737373b3b3b3e3e3e4040404242424343434343434444444444444444444343434343434343434242424242424242424242424242424242424141414141414242424242424242424242424242424242424343434343434343434444444444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403e3e3e3c3c3c3939393b3b3bbababafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefe7c7c7c3838383a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403d3d3d3939393636363131312c2c2c333333989898f7f7f7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf6f6f69090903131312d2d2d3131313535353939393c3c3c3f3f3f4141414242424343434343434343434343434242424242424242424141414141414141414040404040404040404040404040404040404040404040404141414141414141414242424242424242424343434343434444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3b3b3b383838484848d1d1d1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c9c9c3c3c3c3939393c3c3c3f3f3f4141414242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413f3f3f3c3c3c3838383434342f2f2f2d2d2d6c6c6cf3f3f3fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdebebeb6969692b2b2b2f2f2f3333333838383b3b3b3e3e3e4040404141414242424242424242424242424141414141414040404040403f3f3f3f3f3f3f3f3f3f3f3f3e3e3e3e3e3e3e3e3e3e3e3e3f3f3f3f3f3f3f3f3f4040404040404040404141414141414242424343434343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403e3e3e3b3b3b383838515151dbdbdbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0b0b03e3e3e3939393c3c3c3e3e3e4141414242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413e3e3e3b3b3b3737373232322d2d2d393939cbcbcbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcbababa3a3a3a2d2d2d3232323636363a3a3a3d3d3d3f3f3f4040404141414141414141414040404040403f3f3f3e3e3e3e3e3e3d3d3d3d3d3d3d3d3d3d3d3d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3d3d3d3d3d3d3e3e3e3e3e3e3f3f3f3f3f3f4040404141414242424343434343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3b3b3b373737555555e1e1e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbababa3f3f3f3939393b3b3b3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434040403d3d3d3a3a3a3636363131312c2c2c686868f2f2f2fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdededed5454542b2b2b3030303535353838383b3b3b3d3d3d3f3f3f3f3f3f3f3f3f3f3f3f3e3e3e3d3d3d3d3d3d3c3c3c3b3b3b3b3b3b3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3b3b3b3b3b3b3c3c3c3c3c3c3d3d3d3e3e3e3f3f3f4040404141414242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141414040403d3d3d3a3a3a373737595959e5e5e5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbcbcbc3f3f3f3838383b3b3b3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403d3d3d3939393434342f2f2f2b2b2b999999f9f9f9fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd8484842e2e2e2e2e2e3333333737373a3a3a3c3c3c3d3d3d3e3e3e3d3d3d3d3d3d3c3c3c3b3b3b3a3a3a3939393838383838383737373737373636363636363636363636363636363636363737373737373838383939393939393b3b3b3c3c3c3d3d3d3f3f3f4040404141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737375a5a5ae6e6e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbcbcbc3f3f3f3838383b3b3b3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444242423f3f3f3c3c3c3838383333332e2e2e2c2c2cb4b4b4fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfda9a9a93030302d2d2d3131313535353838383a3a3a3b3b3b3c3c3c3b3b3b3a3a3a3939393838383737373636363535353434343333333333333232323232323232323232323232323232323333333333333434343535353636363838383939393b3b3b3d3d3d3f3f3f4040404141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737375a5a5ae6e6e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbcbcbc3f3f3f3838383b3b3b3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454444444343434141413f3f3f3b3b3b3737373232322d2d2d303030c0c0c0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb7b7b73030302b2b2b3030303434343636363838383939393939393939393838383636363535353333333232323131313030302f2f2f2e2e2e2e2e2e2e2e2e2d2d2d2d2d2d2e2e2e2e2e2e2f2f2f2f2f2f3030303131313333333535353636363838383b3b3b3d3d3d3f3f3f4141414242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737375a5a5ae6e6e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbcbcbc3f3f3f3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454444444444444343434242424040403e3e3e3a3a3a3636363131312c2c2c323232c3c3c3fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2f2f2f2a2a2a2f2f2f3232323535353636363737373737373636363434343333333131312f2f2f2e2e2e2c2c2c2b2b2b2b2b2b2a2a2a2929292929292929292929292929292a2a2a2a2a2a2b2b2b2c2c2c2d2d2d2f2f2f3131313333333636363939393b3b3b3d3d3d4040404141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737375a5a5ae6e6e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbcbcbc3f3f3f3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454444444444444444444444444343434242424141413f3f3f3d3d3d3939393535353030302b2b2b323232c3c3c3fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2e2e2e2929292d2d2d3030303333333434343434343434343333333131312f2f2f2d2d2d2b2b2b2929292828282727272626262525252525252525252424242424242525252525252626262727272828282929292b2b2b2e2e2e3030303333333636363939393c3c3c3e3e3e4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737375a5a5ae6e6e6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbcbcbc3f3f3f3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454444444444444444444343434343434343434242424141414040403e3e3e3b3b3b3838383434342f2f2f2a2a2a313131c4c4c4fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2e2e2e2828282b2b2b2e2e2e3030303131313131313030302f2f2f2d2d2d2a2a2a2828282626262525252323232222222121212121212020202020202020202020202020202020202121212222222323232525252727272a2a2a2d2d2d3030303434343737373a3a3a3d3d3d4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737375a5a5ae6e6e6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcfafafaf4f4f4e5e5e5d1d1d1c0c0c0b7b7b7afafafacacacb1b1b1b9b9b9c5c5c5d8d8d8ebebebf5f5f5fafafafcfcfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbcbcbc3f3f3f3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444444444343434343434242424242424141414141414040403f3f3f3d3d3d3a3a3a3737373333332e2e2e292929313131c4c4c4fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2d2d2d2626262a2a2a2c2c2c2e2e2e2e2e2e2e2e2e2d2d2d2b2b2b282828262626262626585858a0a0a0aaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaa9a9a9a8a8a8a7a7a7a5a5a57575753333333535353939393c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3838385a5a5ae6e6e6fffffffffffffffffffffffffffffffffffffffffffffffffefefef4f4f4dededebcbcbc9898987474745151514343434141413f3f3f3e3e3e3d3d3d3d3d3d3d3d3d3e3e3e3f3f3f4242424545455a5a5a7f7f7fa3a3a3c8c8c8e6e6e6fafafaffffffffffffffffffffffffffffffffffffffffffffffffffffffbcbcbc4040403939393b3b3b3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444444444343434343434242424242424141414141414040403f3f3f3e3e3e3d3d3d3b3b3b3939393535353232322d2d2d282828303030c4c4c4fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2c2c2c2424242727272a2a2a2b2b2b2b2b2b2a2a2a2929292626262424242f2f2f717171e2e2e2fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad3232323333333737373b3b3b3e3e3e4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3b3b3b3838385a5a5ae6e6e6fffffffffffffffffffffffffffffffffffffcfcfce3e3e3a6a6a67070705353533a3a3a3535353535353535353636363636363636363636363636363636363636363636363636363636363535353535353535353535353f3f3f5b5b5b7c7c7cbbbbbbf0f0f0fefefeffffffffffffffffffffffffffffffffffffbcbcbc4040403939393c3c3c3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444343434343434242424141414141414040404040403f3f3f3e3e3e3d3d3d3d3d3d3b3b3b3939393737373434343030302c2c2c2727272f2f2fc4c4c4fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2b2b2b222222252525272727272727272727262626252525222222383838939393efefeffdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcacacac3030303232323636363a3a3a3e3e3e4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3b3b3b3939395a5a5ae6e6e6fffffffffffffffffffefefef3f3f3c9c9c97c7c7c4b4b4b3c3c3c353535353535363636363636373737373737383838383838383838383838383838383838383838383838383838383838373737373737373737363636353535353535353535404040555555979797d8d8d8f8f8f8ffffffffffffffffffffffffbcbcbc4040403a3a3a3c3c3c3f3f3f4141414242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444343434343434242424242424141414040403f3f3f3e3e3e3d3d3d3d3d3d3c3c3c3b3b3b3a3a3a3939393737373434343131312e2e2e2a2a2a2525252e2e2ec4c4c4fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2a2a2a2020202323232424242424242424242222222525254b4b4bb9b9b9f7f7f7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcacacac2f2f2f3030303535353939393d3d3d4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403e3e3e3c3c3c3a3a3a5a5a5ae6e6e6fffffffffffff8f8f8bababa7171714141413535353535353535353636363737373737373838383838383939393939393939393939393939393a3a3a3a3a3a3a3a3a3939393939393939393939393939393838383838383737373737373636363535353535353636364c4c4c848484d3d3d3fefefeffffffffffffbcbcbc4141413b3b3b3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444343434242424242424141414040403f3f3f3e3e3e3d3d3d3c3c3c3b3b3b3a3a3a3939393838383737373636363434343131312e2e2e2b2b2b2727272323232d2d2dc5c5c5fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2929291e1e1e202020202020212121202020272727616161d3d3d3fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2d2d2d2f2f2f3434343939393d3d3d4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424141413f3f3f3d3d3d3b3b3b5a5a5ae6e6e6fcfcfccecece7070704242423535353434343535353636363737373737373838383939393939393939393a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3939393939393838383838383737373737373636363535353434343737374c4c4c919191e2e2e2fefefebdbdbd4242423b3b3b3e3e3e4040404141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444343434242424141414040403f3f3f3e3e3e3d3d3d3c3c3c3b3b3b3939393838383737373636363535353333333232323030302e2e2e2b2b2b2828282525252121212c2c2cc5c5c5fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2929291c1c1c1d1d1d1d1d1d1e1e1e2f2f2f878787e7e7e7fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2d2d2d2e2e2e3434343838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3e3e3e3b3b3b5a5a5ad1d1d19393934a4a4a3737373535353535353636363636363737373838383838383939393939393939393939393a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a393939393939393939393939383838383838373737363636363636353535353535393939585858afafafb7b7b74242423c3c3c3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444343434242424141414040403f3f3f3d3d3d3c3c3c3b3b3b3939393838383636363535353333333232323131312f2f2f2e2e2e2c2c2c2a2a2a2727272525252222221f1f1f2b2b2bc5c5c5fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2929291c1c1c1c1c1c1e1e1e3d3d3da4a4a4f3f3f3fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2e2e2e3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141414040403e3e3e3c3c3c4b4b4b5b5b5b3e3e3e3737373737373636363636363737373737373838383838383838383939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393939393838383838383838383737373737373737373636363636363737373737374343435e5e5e3f3f3f3d3d3d3f3f3f4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444343434343434242424141413f3f3f3e3e3e3d3d3d3b3b3b3a3a3a3838383636363535353333333131312f2f2f2e2e2e2c2c2c2b2b2b2929292828282626262323232121211f1f1f1d1d1d2a2a2ac5c5c5fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2828281b1b1b202020585858c7c7c7fafafafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141414040403e3e3e3d3d3d3c3c3c3a3a3a3838383838383737373737373737373737373737373737373737373838383838383838383838383737373737373737373737373737373737373737373737373737373737373737373737373737373737373838383838383838383838383838383737373737373737373737373737373737373737373838383939393b3b3b3c3c3c3d3d3d3f3f3f4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434343434242424040403f3f3f3e3e3e3c3c3c3a3a3a3838383737373535353333333131312f2f2f2d2d2d2b2b2b292929282828262626252525232323222222202020212121202020202020313131c7c7c7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb282828252525747474dbdbdbfcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141414040403e3e3e3d3d3d3b3b3b3a3a3a3939393838383737373737373636363636363636363636363636363636363636363636363636363636363737373737373737373737373737373737373838383737373737373737373737373737373737373636363636363636363636363636363636363636363636363636363737373737373737373838383939393a3a3a3c3c3c3d3d3d3f3f3f4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424040403f3f3f3d3d3d3c3c3c3a3a3a3838383636363333333131312f2f2f2d2d2d2a2a2a2828282727272525252323232323232e2e2e3b3b3b4343434f4f4f6767677070707a7a7a959595e5e5e5fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbdbdbd464646909090f0f0f0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424040403f3f3f3d3d3d3c3c3c3b3b3b3939393838383737373636363636363535353535353535353535353535353939394040404646464a4a4a5b5b5b767676898989989898a4a4a4acacacb0b0b0b3b3b3aeaeaeaaaaaaa1a1a19393938585856e6e6e5454544848484444443e3e3e3737373434343535353535353535353636363636363737373737373838383a3a3a3b3b3b3d3d3d3e3e3e3f3f3f4141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424040403f3f3f3d3d3d3b3b3b3939393737373535353232322f2f2f2d2d2d2a2a2a2828282626262424242424243030305858587c7c7ca8a8a8cdcdcde4e4e4f9f9f9fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddfdfdfc5c5c5f9f9f9fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424141413f3f3f3e3e3e3c3c3c3b3b3b3939393838383737373636363535353434343434343434344141415b5b5b727272959595bbbbbbd9d9d9f2f2f2fcfcfcfdfdfdfdfdfdfefefefefefefefefefefefefefefefefefefefefefefefefefefefdfdfdfdfdfdfafafaecececd1d1d1b0b0b08a8a8a6b6b6b5252523a3a3a3434343434343535353535353636363737373838383a3a3a3b3b3b3d3d3d3e3e3e4040404141414242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424040403f3f3f3d3d3d3b3b3b3939393636363434343131312e2e2e2c2c2c2929292626262424242a2a2a434343838383c2c2c2e6e6e6f7f7f7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbfbfbfcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141414040403f3f3f3e3e3e3c3c3c3b3b3b3939393838383636363535353535353a3a3a4444446c6c6ca1a1a1cacacae5e5e5f7f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdf2f2f2dfdfdfc0c0c09090905b5b5b4040403838383535353636363737373838383a3a3a3b3b3b3d3d3d3e3e3e3f3f3f4141414242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424141413f3f3f3d3d3d3b3b3b3838383636363333333030302d2d2d2a2a2a272727242424292929505050949494e2e2e2f9f9f9fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424141414040403f3f3f3d3d3d3c3c3c3a3a3a3939393737373636363636364444446666669f9f9fdbdbdbf7f7f7fdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefefbfbfbf2f2f2cdcdcd8d8d8d5a5a5a3c3c3c3535353636363838383939393b3b3b3c3c3c3e3e3e3f3f3f4040404141414242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141413f3f3f3d3d3d3b3b3b3838383636363333333030302c2c2c2929292626262525253f3f3f919191dededefcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141414040403f3f3f3e3e3e3c3c3c3b3b3b3939393838383636363939394d4d4d8a8a8ac7c7c7f1f1f1fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfde9e9e9b7b7b77272724242423939393737373838383a3a3a3b3b3b3d3d3d3e3e3e4040404141414242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444242424141414040403e3e3e3b3b3b3939393636363333332f2f2f2c2c2c2828282525252f2f2f696969d1d1d1fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424141414040403e3e3e3d3d3d3b3b3b3a3a3a383838373737393939545454939393dfdfdffbfbfbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdf4f4f4cdcdcd7d7d7d4949493636363737373939393a3a3a3c3c3c3d3d3d3f3f3f4040404141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424040403e3e3e3c3c3c3939393636363333332f2f2f2c2c2c282828252525373737969696f0f0f0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424040403f3f3f3e3e3e3c3c3c3a3a3a393939373737383838515151959595dfdfdffdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafacdcdcd7c7c7c4343433838383838383939393b3b3b3d3d3d3e3e3e3f3f3f4141414242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141413f3f3f3d3d3d3a3a3a3737373333333030302c2c2c282828262626474747b8b8b8f7f7f7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141414040403e3e3e3d3d3d3b3b3b3a3a3a383838373737464646828282dededefdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5f5c5c5c56b6b6b3d3d3d3737373838383a3a3a3c3c3c3d3d3d3f3f3f4040404242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434141413f3f3f3d3d3d3b3b3b3838383434343030302c2c2c2828282727274f4f4fc5c5c5fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141413f3f3f3e3e3e3c3c3c3b3b3b3939393737373b3b3b686868c2c2c2fafafafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f2f2a1a1a15252523838383838383939393b3b3b3d3d3d3e3e3e4040404141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c3939393535353131312d2d2d292929272727525252d1d1d1fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141413f3f3f3e3e3e3c3c3c3a3a3a383838373737484848949494eaeaeafefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdd7d7d77979794040403737373939393b3b3b3c3c3c3e3e3e4040404141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3a3a3a3636363333332e2e2e2a2a2a272727474747c7c7c7fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424040403f3f3f3d3d3d3b3b3b393939383838383838606060c6c6c6fcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f7a4a4a44a4a4a3737373838383a3a3a3c3c3c3e3e3e3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3b3b3b3838383434343030302b2b2b2727273b3b3bbebebefbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3232323838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424040403f3f3f3d3d3d3b3b3b3939393737373f3f3f7c7c7ce0e0e0fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfccacaca5f5f5f3a3a3a3838383a3a3a3c3c3c3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3a3a3a3636363131312d2d2d2828283131319b9b9bf8f8f8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424040403f3f3f3d3d3d3b3b3b3939393737374444449a9a9af5f5f5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefee1e1e17878783b3b3b3737373939393b3b3b3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444444444242424040403e3e3e3b3b3b3838383333332f2f2f2a2a2a292929737373f0f0f0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403f3f3f3d3d3d3b3b3b3838383737374c4c4cb0b0b0f8f8f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefef8787873f3f3f3737373939393b3b3b3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403d3d3d3a3a3a3636363131312c2c2c272727444444d4d4d4fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2d2d2d3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403f3f3f3d3d3d3b3b3b3838383737374f4f4fbebebefdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f3f39a9a9a4040403737373939393b3b3b3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3c3c3c3838383434342f2f2f2a2a2a2f2f2f999999f9f9f9fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2e2e2e3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403f3f3f3d3d3d3b3b3b383838373737555555c6c6c6fcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f89c9c9c4242423737373939393b3b3b3d3d3d3f3f3f4141414242424444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3a3a3a3636363232322d2d2d292929545454ebebebfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde2e2e2cbcbcbfafafafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2e2e2e3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141413f3f3f3d3d3d3b3b3b393939373737505050c8c8c8fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8a3a3a33f3f3f3737373939393c3c3c3e3e3e4040404141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403d3d3d3939393535353030302b2b2b2e2e2ea6a6a6fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbcbcbc4d4d4d9e9e9eeeeeeefdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2c2c2c2e2e2e3434343838383d3d3d4040404343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444242424141413f3f3f3d3d3d3b3b3b3939393737374e4e4ec5c5c5fcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f79898983e3e3e3737373a3a3a3c3c3c3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3c3c3c3838383333332e2e2e282828505050e6e6e6fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2e2e2e2e2e2e787878dfdfdffcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2d2d2d2f2f2f3434343939393d3d3d4040404343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141414040403e3e3e3c3c3c393939373737484848b9b9b9fdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f4f48d8d8d3b3b3b3838383a3a3a3c3c3c3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413e3e3e3a3a3a3636363131312c2c2c292929979797f8f8f8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2d2d2d2323232727275a5a5ac9c9c9fafafafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2d2d2d2f2f2f3434343939393d3d3d4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c3a3a3a373737404040a4a4a4fbfbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefef7979793a3a3a3838383a3a3a3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403d3d3d3939393535353030302b2b2b3f3f3fd0d0d0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2d2d2d232323242424272727424242a7a7a7f2f2f2fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad2e2e2e3030303535353a3a3a3e3e3e4141414343434545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424141413f3f3f3d3d3d3a3a3a3838383b3b3b8a8a8af6f6f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5e5e56363633737373939393b3b3b3d3d3d3f3f3f4141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403d3d3d3939393434342f2f2f2929295f5f5ff0f0f0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2d2d2d242424252525272727282828343434848484e7e7e7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcacacac2f2f2f3131313636363a3a3a3e3e3e4141414343434545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3b3b3b3838383737376d6d6deeeeeefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefecdcdcd4e4e4e3737373939393c3c3c3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242423f3f3f3c3c3c3838383333332d2d2d2d2d2d8a8a8afcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2e2e2e2525252828282a2a2a2b2b2b2b2b2b303030646464d2d2d2fafafafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcacacac3030303232323737373b3b3b3f3f3f4141414343434545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c393939373737525252d3d3d3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfda8a8a84242423737373a3a3a3c3c3c3f3f3f4141414242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413f3f3f3b3b3b3737373232322c2c2c353535bebebefdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2e2e2e2828282b2b2b2e2e2e2f2f2f2f2f2f2e2e2e2f2f2f494949b3b3b3f5f5f5fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcacacac3131313333333838383c3c3c3f3f3f4242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444444444242424141413f3f3f3d3d3d3a3a3a3838383f3f3faaaaaafdfdfdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6f67d7d7d3737373838383b3b3b3d3d3d3f3f3f4141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413e3e3e3b3b3b3636363131312c2c2c3c3c3ce7e7e7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb2f2f2f2a2a2a2e2e2e3131313333333333333333333131312f2f2f3b3b3b8d8d8defefeffdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcadadad3333333535353939393d3d3d4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141414040403d3d3d3b3b3b3838383939397d7d7df7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0e0e05858583737373939393c3c3c3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413e3e3e3a3a3a3535353030302c2c2c535353f8f8f8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb3030302c2c2c3030303434343636363737373737373636363333333030303434346a6a6ad8d8d8fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcacacac3434343737373a3a3a3e3e3e4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3c3c3c393939373737515151d8d8d8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeaeaeae3f3f3f3838383a3a3a3d3d3d3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413e3e3e3a3a3a3535353030302c2c2c737373fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb3131312d2d2d3232323636363838383a3a3a3b3b3b3a3a3a383838353535323232313131505050b9b9b9f9f9f9fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcacacac3636363838383c3c3c3f3f3f4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3b3b3b3838383d3d3da4a4a4fbfbfbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f4f47171713737373939393b3b3b3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454343434141413e3e3e3a3a3a3535352f2f2f2d2d2d8b8b8bfbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb3131312e2e2e3333333737373a3a3a3c3c3c3d3d3d3d3d3d3b3b3b393939373737343434313131414141989898efefeff9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f8f8f8aaaaaa3838383b3b3b3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3c3c3c393939383838636363efefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccccc4848483737373a3a3a3c3c3c3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454343434141413d3d3d3939393535352f2f2f2d2d2d979797fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb3232322f2f2f3434343939393c3c3c3e3e3e4040404040403f3f3f3d3d3d3b3b3b3838383636363434343737373f3f3f4040403f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f4040404040404040404040403f3f3f3a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3a3a3a3838383f3f3fc0c0c0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfb8e8e8e3838383838383b3b3b3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454343434141413e3e3e3939393535352f2f2f2d2d2da0a0a0fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbbbbbb3333333131313636363a3a3a3d3d3d4040404141414242424141414040403e3e3e3c3c3c3a3a3a3939393737373535353434343333333232323131313131313131313030303030303131313131313232323434343535353636363838383b3b3b3d3d3d3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3c3c3c3939393737376d6d6df1f1f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4d4d45050503737373a3a3a3c3c3c3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454343434141413e3e3e3a3a3a3535352f2f2f2d2d2da6a6a6fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb6b6b63333333232323737373b3b3b3f3f3f4141414343434343434343434242424141413f3f3f3e3e3e3d3d3d3b3b3b3a3a3a3939393838383737373737373636363636363636363636363636363737373737373838383939393b3b3b3c3c3c3e3e3e3f3f3f4141414242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a383838424242bfbfbffefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafa8989893939393838383b3b3b3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454343434141413e3e3e3a3a3a3535353030302d2d2da0a0a0fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfda5a5a53434343333333838383c3c3c4040404242424343434444444444444444444343434242424141414040403f3f3f3e3e3e3d3d3d3c3c3c3c3c3c3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3c3c3c3c3c3c3d3d3d3e3e3e3f3f3f4040404141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3c3c3c3939393737376a6a6af3f3f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9d9d94848483737373a3a3a3d3d3d3f3f3f4141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444141413e3e3e3a3a3a3636363030302e2e2e969696fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfc7979793333333535353939393d3d3d4040404343434444444545454545454545454444444444444343434242424141414141414040404040403f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f3f4040404040404141414141414242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3b3b3b3838383e3e3eb5b5b5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f98484843636363939393c3c3c3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444141413f3f3f3b3b3b3636363131312e2e2e898989fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde8e8e84d4d4d3232323737373b3b3b3e3e3e4141414343434545454545454646464545454545454545454444444444444343434343434343434242424242424242424242424242424242424242424242424242424242424242424343434343434343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3c3c3c3a3a3a373737595959edededffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5c5c54343433838383b3b3b3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242423f3f3f3b3b3b3737373232322e2e2e727272fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfafafaa7a7a73939393434343939393c3c3c4040404242424444444545454646464646464646464646464545454545454545454545454545454444444444444444444444444444444444444444444444444444444444444444444444444444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403e3e3e3b3b3b393939373737989898fbfbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeeeee6868683737373939393c3c3c3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403c3c3c3838383333332e2e2e505050f9f9f9fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddedede5454543232323737373b3b3b3e3e3e4141414343434444444545454646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454545454545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737494949d3d3d3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefea0a0a03c3c3c3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454343434040403d3d3d3939393434342f2f2f3e3e3ee6e6e6fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdececec7676763535353535353939393d3d3d4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3c3c3c3939393737376b6b6bf3f3f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdcdcdc4848483737373a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454343434141413e3e3e3a3a3a353535303030373737bdbdbdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfce5e5e57979793737373434343838383c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3b3b3b3838383c3c3c9f9f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfb6c6c6c3737373939393c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242423f3f3f3b3b3b373737323232303030888888fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf9f9f9f1f1f1b2b2b25656563636363535353838383b3b3b3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3b3b3b383838454545d8d8d8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefea7a7a73838383838383b3b3b3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403c3c3c3838383333332e2e2e5f5f5fefefeffdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfafafadadadacbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbcbc3c3c3b1b1b19191915c5c5c3a3a3a3434343636363939393b3b3b3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737375d5d5df8f8f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3d3d34444443838383b3b3b3d3d3d4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413e3e3e3a3a3a353535303030414141cdcdcdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf9f9f99c9c9c3d3d3d3535353636363737373838383838383939393a3a3a3c3c3c3d3d3d3838382f2f2f3131313333333535353737373a3a3a3c3c3c3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424141413e3e3e3c3c3c393939383838919191fdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffececec6363633737373a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242423f3f3f3b3b3b3737373232322f2f2f969696fafafafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde8e8e86262622323232020202121212323232626262929292c2c2c2e2e2e3030303232323434343636363838383939393b3b3b3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403e3e3e3b3b3b383838393939bcbcbcfefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafa7f7f7f3737373939393c3c3c3f3f3f4141414242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403d3d3d3939393434342f2f2f535353e7e7e7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcd3d3d34949492020202121212525252828282c2c2c2f2f2f3232323434343636363838383a3a3a3c3c3c3d3d3d3f3f3f4040404141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3b3b3b383838494949dadadaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa5a5a53d3d3d3838383b3b3b3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413e3e3e3b3b3b363636313131323232a2a2a2fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdacacac2e2e2e2222222626262a2a2a2e2e2e3232323535353737373a3a3a3c3c3c3d3d3d3f3f3f4040404141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737626262ecececffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdcdcd4646463838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403d3d3d3939393434342f2f2f515151e8e8e8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf2f2f27474742424242626262b2b2b2f2f2f3333333737373a3a3a3c3c3c3e3e3e4040404141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3c3c3c393939363636767676f6f6f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe9e9e94c4c4c3737373a3a3a3d3d3d3f3f3f4242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413e3e3e3b3b3b373737323232353535969696f8f8f8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdcccccc4040402626262b2b2b2f2f2f3434343838383b3b3b3e3e3e4040404141414343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424141413e3e3e3c3c3c3939393838388d8d8dfefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc5959593737373a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403d3d3d393939353535303030474747d0d0d0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf8f8f88181812b2b2b2a2a2a2f2f2f3434343838383c3c3c3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3b3b3b3838383e3e3eadadadffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7878783838383939393c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3b3b3b373737333333313131707070efefeffdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdd4d4d43e3e3e2929292e2e2e3333333838383b3b3b3e3e3e4141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3b3b3b383838434343c4c4c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9292923939393939393c3c3c3e3e3e4141414242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403e3e3e3a3a3a363636323232343434949494f8f8f8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf9f9f97d7d7d2929292d2d2d3232323636363b3b3b3e3e3e4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403d3d3d3b3b3b383838484848d7d7d7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaaaaaa3939393939393c3c3c3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242423f3f3f3d3d3d393939353535313131414141b6b6b6fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf5f5f5d2d2d2edededfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcbebebe3232322b2b2b3030303535353939393d3d3d4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3a3a3a3737374b4b4be5e5e5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbababa3939393838383b3b3b3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3c3c3c3838383434343030304c4c4cc6c6c6fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf7f7f79999993e3e3ea3a3a3fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde6e6e65959592929292f2f2f3434343939393c3c3c4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737374d4d4df0f0f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8c8c83a3a3a3838383b3b3b3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424141413e3e3e3b3b3b373737333333303030505050d0d0d0fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf8f8f8a2a2a23535353d3d3dccccccfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf9f9f98484842b2b2b2d2d2d3333333838383c3c3c3f3f3f4242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737374f4f4ff8f8f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3d3d33a3a3a3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3b3b3b3737373333333131314f4f4fc2c2c2fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf2f2f2989898363636222222525252f1f1f1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb7b7b73737372c2c2c3232323737373b3b3b3f3f3f4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737505050fdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9d9d93a3a3a3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3b3b3b3737373333333030304a4a4ab2b2b2f9f9f9fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeeeeee8c8c8c3333332323232727277b7b7bfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfddedede4242422b2b2b3131313636363a3a3a3e3e3e4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737505050ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdcdcdc3a3a3a3838383b3b3b3d3d3d4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3b3b3b3838383434343131313d3d3d919191e9e9e9fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbfbfbd6d6d66868682d2d2d2424242323232b2b2ba7a7a7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf8f8f84f4f4f2b2b2b3030303535353a3a3a3e3e3e4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737505050ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdcdcdc3a3a3a3838383b3b3b3d3d3d4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3b3b3b383838353535323232333333676767cacacaf8f8f8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcefefefababab4f4f4f2a2a2a2626262525252323232e2e2ec9c9c9fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd7272722d2d2d2f2f2f3535353939393d3d3d4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737505050fefefeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbdbdb3a3a3a3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c3939393636363333333131314141418c8c8ce3e3e3fafafafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf9f9f9c8c8c86969693535352b2b2b2b2b2b292929272727252525313131e1e1e1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd9292922e2e2e2f2f2f3434343939393d3d3d4040404343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737374f4f4ff9f9f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd5d5d53a3a3a3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141413f3f3f3c3c3c3a3a3a373737343434313131343434484848959595d7d7d7f5f5f5fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfceeeeeec4c4c47474743f3f3f3131312f2f2f2f2f2f2f2f2f2d2d2d2a2a2a2727273d3d3debebebfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfda7a7a72f2f2f2f2f2f3434343939393d3d3d4040404343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737374e4e4ef3f3f3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdcdcd3a3a3a3838383b3b3b3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454343434242424141413f3f3f3d3d3d3b3b3b393939363636343434323232313131484848787878b6b6b6e8e8e8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf8f8f8dadadaa0a0a06868683d3d3d3131313131313333333434343333333232323030302c2c2c2929294c4c4ceeeeeefdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb5b5b52f2f2f2e2e2e3434343939393d3d3d4040404343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3a3a3a3737374c4c4ce8e8e8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0c0c03a3a3a3838383b3b3b3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403f3f3f3d3d3d3b3b3b3838383636363434343232323131313a3a3a4b4b4b717171a6a6a6d2d2d2e8e8e8efefeff4f4f4f5f5f5f7f7f7f7f7f7f7f7f7f4f4f4f3f3f3efefefe1e1e1c3c3c39393935d5d5d4646463636363030303232323434343636363838383838383737373535353232322e2e2e2a2a2a555555f0f0f0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbdbdbd3030302e2e2e3434343939393d3d3d4040404343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3b3b3b383838494949dcdcdcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0b0b03939393939393c3c3c3e3e3e4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141414040403e3e3e3d3d3d3b3b3b3939393737373535353333333232323232323434343535353e3e3e5858586d6d6d7878788585858686868383837272726868685050503737373535353434343131313232323434343636363737373939393b3b3b3b3b3b3b3b3b3a3a3a3737373434343030302b2b2b565656f0f0f0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdbebebe3030302f2f2f3434343939393d3d3d4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403e3e3e3b3b3b383838454545cacacaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9b9b9b3939393939393c3c3c3e3e3e4141414242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141414040403e3e3e3d3d3d3b3b3b3a3a3a3838383737373535353434343333333232323232323131313131313131313030303131313131313131313232323333333434343535353636363737373939393a3a3a3c3c3c3d3d3d3e3e3e3e3e3e3e3e3e3c3c3c3a3a3a3636363131312c2c2c515151efefeffdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdb9b9b93030302f2f2f3535353939393e3e3e4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3b3b3b383838404040b4b4b4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181813838383939393c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424141414040403f3f3f3e3e3e3d3d3d3b3b3b3a3a3a3939393838383737373737373636363636363636363636363636363636363636363737373838383939393939393b3b3b3c3c3c3d3d3d3e3e3e3f3f3f4040404141414141414040403e3e3e3b3b3b3737373232322d2d2d444444ecececfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdacacac3030303030303535353a3a3a3e3e3e4141414343434545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424141413e3e3e3c3c3c3939393a3a3a979797ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6363633838383a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434343434242424141414040403f3f3f3e3e3e3d3d3d3d3d3d3c3c3c3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3c3c3c3c3c3c3d3d3d3e3e3e3e3e3e3f3f3f4040404141414242424242424343434343434242423f3f3f3c3c3c3838383333332e2e2e373737e4e4e4fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd9a9a9a3030303131313636363a3a3a3e3e3e4141414444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3c3c3c3939393636367c7c7cfafafafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0f0f04e4e4e3737373a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424242424141414141414040404040403f3f3f3f3f3f3f3f3f3f3f3f3e3e3e3f3f3f3f3f3f3f3f3f3f3f3f4040404040404141414141414242424343434343434444444444444444444444444343434040403d3d3d3939393535352f2f2f333333cfcfcffdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfd7e7e7e2f2f2f3232323737373b3b3b3f3f3f4242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737376a6a6aefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7d7d74747473838383b3b3b3d3d3d4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444343434343434343434242424242424242424242424242424242424242424242424242424242424242424343434343434444444444444444444545454545454545454545454545454343434141413e3e3e3a3a3a363636303030323232afafaffdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbfbfb5959592e2e2e3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737525252e1e1e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb3b3b33f3f3f3838383b3b3b3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454444444444444444444444444444444444444444444444444444444444444444444444444444444545454545454545454545454646464646464646464646464545454444444242423f3f3f3b3b3b373737323232303030838383fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde5e5e54545452e2e2e3434343939393d3d3d4040404343434444444646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403e3e3e3b3b3b3838383c3c3cc7c7c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc8989893737373939393c3c3c3e3e3e4141414242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464545454444444242424040403c3c3c3838383333332e2e2e565656f4f4f4fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdc0c0c03a3a3a3030303535353a3a3a3e3e3e4141414343434545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424040403e3e3e3c3c3c393939373737a0a0a0fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1f1f16b6b6b3737373a3a3a3c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464444444343434040403d3d3d3939393535352f2f2f444444d6d6d6fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbfbfb8f8f8f3030303232323737373b3b3b3f3f3f4242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3c3c3c3939393737376b6b6bfbfbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdcdcdc4c4c4c3737373a3a3a3d3d3d4040404141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444141413e3e3e3b3b3b363636313131343434a3a3a3fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdededed6363632e2e2e3333333838383c3c3c4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a3737374a4a4ae5e5e5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefeb6b6b63a3a3a3838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403c3c3c3838383333332e2e2e6d6d6df0f0f0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfccacaca3c3c3c3030303535353a3a3a3e3e3e4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403e3e3e3b3b3b3838383f3f3fb3b3b3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfc8080803838383939393c3c3c3e3e3e4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413d3d3d3a3a3a353535303030414141d1d1d1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf9f9f99090902f2f2f3232323737373b3b3b3f3f3f4242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424141413e3e3e3c3c3c3939393737377a7a7af8f8f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebebeb4f4f4f3737373a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242423f3f3f3b3b3b3737373232322f2f2f8a8a8afafafafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde3e3e34a4a4a3030303434343939393d3d3d4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a373737535353dededeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5b5b53f3f3f3838383b3b3b3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434040403d3d3d3939393535352f2f2f444444ddddddfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbfbfb9999993333333232323737373b3b3b3e3e3e4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3b3b3b3838383a3a3aaeaeaefefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f7f77676763838383939393c3c3c3e3e3e4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413f3f3f3b3b3b373737323232323232878787f8f8f8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde0e0e04e4e4e2f2f2f3434343939393d3d3d4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424141413f3f3f3c3c3c3939393636366c6c6cf5f5f5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd6d6d64c4c4c3737373a3a3a3d3d3d3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403d3d3d393939353535303030424242c7c7c7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf6f6f68585853131313232323737373b3b3b3f3f3f4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3d3d3d3a3a3a383838414141cacacafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfb9999993737373838383b3b3b3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434141413f3f3f3c3c3c3838383333332f2f2f6c6c6cf1f1f1fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdc7c7c73f3f3f3030303535353939393d3d3d4040404242424444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403e3e3e3c3c3c3939393838387c7c7cf9f9f9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8e8e85454543737373a3a3a3c3c3c3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434040403e3e3e3a3a3a363636313131353535989898fafafafdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde9e9e95e5e5e3030303434343838383c3c3c3f3f3f4141414343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3a3a3a3737374c4c4cd1d1d1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefea4a4a43d3d3d3838383b3b3b3d3d3d4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242423f3f3f3d3d3d393939353535303030434343c0c0c0fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf4f4f47d7d7d3232323232323737373b3b3b3e3e3e4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3b3b3b3939393737378b8b8bfafafaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeaea5c5c5c3737373939393c3c3c3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434141413f3f3f3c3c3c383838343434303030505050d4d4d4fcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf6f6f69c9c9c3a3a3a3131313535353a3a3a3d3d3d4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3a3a3a373737494949d3d3d3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfba4a4a43b3b3b3838383b3b3b3d3d3d4040404141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444242424040403e3e3e3b3b3b3737373333333030305e5e5eddddddfcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbfbfbadadad3e3e3e3131313535353939393c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3b3b3b393939373737797979f7f7f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1e1e15353533737373939393c3c3c3e3e3e4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454343434242424040403d3d3d3a3a3a373737333333323232646464ddddddfcfcfcfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf7f7f7b0b0b04444443030303434343838383c3c3c3f3f3f4141414343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3a3a3a373737454545bdbdbdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfbfb9090903b3b3b3838383b3b3b3d3d3d4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3a3a3a3636363333333232325d5d5dd8d8d8fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdf8f8f8a4a4a43f3f3f3030303434343838383b3b3b3e3e3e4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3c3c3c393939373737686868edededffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcacaca4848483737373a3a3a3c3c3c3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403d3d3d3a3a3a373737333333313131525252c2c2c2f7f7f7fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdeeeeee8c8c8c3d3d3d3131313434343838383b3b3b3e3e3e4040404242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3b3b3b3838383c3c3c969696fdfdfdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffececec6c6c6c3737373939393b3b3b3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3a3a3a3737373333333131313f3f3f989898f0f0f0fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfbfbfbd0d0d06868683333333131313535353838383b3b3b3e3e3e4040404242424343434545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444343434242424040403e3e3e3c3c3c3a3a3a3737374a4a4accccccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefea2a2a23c3c3c3838383a3a3a3d3d3d3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141413f3f3f3d3d3d3b3b3b383838343434313131363636636363c8c8c8f6f6f6fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcededed9a9a9a4c4c4c3131313333333636363939393c3c3c3e3e3e4040404242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141414040403e3e3e3b3b3b393939383838696969e8e8e8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefecacaca4c4c4c3737373939393c3c3c3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3b3b3b3939393636363333333131313f3f3f848484d2d2d2f6f6f6fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfcecececb7b7b76161613535353131313434343737373a3a3a3c3c3c3f3f3f4141414242424343434444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444242424141413f3f3f3d3d3d3a3a3a383838393939898989fbfbfbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe5e5e56161613737373939393b3b3b3e3e3e4040404141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403f3f3f3c3c3c3a3a3a373737353535323232323232444444808080c9c9c9f5f5f5fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfcfcfce6e6e6a9a9a96262623838383131313333333636363838383b3b3b3d3d3d3f3f3f4141414242424444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c3a3a3a373737434343afafaffcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6f68181813a3a3a3838383b3b3b3d3d3d3f3f3f4141414242424444444444444545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141413f3f3f3d3d3d3b3b3b3939393737373434343232323232323e3e3e5c5c5ca1a1a1d7d7d7edededf6f6f6fbfbfbfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfafafaf4f4f4e9e9e9c2c2c27e7e7e4949493939393131313333333535353838383a3a3a3c3c3c3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141414040403e3e3e3c3c3c3939393737374d4d4dc7c7c7fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f9f99e9e9e4040403737373a3a3a3c3c3c3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424040403f3f3f3d3d3d3b3b3b393939373737353535333333323232333333383838565656828282a1a1a1c0c0c0cfcfcfd8d8d8d9d9d9e5e5e5dfdfdfd8d8d8d6d6d6c6c6c6aaaaaa9696967373734848483333333232323131313333333535353838383a3a3a3c3c3c3e3e3e3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454444444444444343434141413f3f3f3d3d3d3b3b3b3939393636365b5b5bd7d7d7fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcaeaeae4343433737373939393c3c3c3e3e3e4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141414040403e3e3e3d3d3d3b3b3b3939393737373636363434343333333131313030302f2f2f3939394343434949494a4a4a5353535050504a4a4a4848483e3e3e3030302f2f2f3131313232323333333535353737373838383a3a3a3c3c3c3e3e3e3f3f3f4040404242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424141413f3f3f3d3d3d3b3b3b383838383838646464e1e1e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdc0c0c04d4d4d3737373939393b3b3b3d3d3d3f3f3f4141414343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141414040403f3f3f3d3d3d3c3c3c3a3a3a3939393838383737373535353535353434343333333232323232323232323232323232323333333333333434343535353636363737373838383a3a3a3b3b3b3d3d3d3e3e3e3f3f3f4040404242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403f3f3f3d3d3d3a3a3a383838393939707070e5e5e5fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdc5c5c55151513737373939393b3b3b3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464747474949494c4c4c4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4c4c4c4c4c4c4c4c4c4b4b4b4a4a4a4a4a4a4949494848484646464444444141413e3e3e3b3b3b3a3a3a3939393939393838383838383838383737373737373838383838383838383939393a3a3a3b3b3b3c3c3c3d3d3d3e3e3e3f3f3f4040404141414242424343434343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434242424040403e3e3e3c3c3c3a3a3a3838383a3a3a6e6e6ee4e4e4fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdc5c5c55353533737373939393b3b3b3d3d3d3f3f3f4141414242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464444443d3d3d3434342a2a2a2525252424242424242424242424242424242424242424242424242424242424242424242323232323232323232323232323232626262e2e2e3737373c3c3c3e3e3e3e3e3e3d3d3d3d3d3d3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3d3d3d3d3d3d3e3e3e3e3e3e3f3f3f4040404141414242424242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444343434141414040403e3e3e3c3c3c3a3a3a3838383939396e6e6ee4e4e4fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcc3c3c35151513838383939393b3b3b3d3d3d3f3f3f4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545453d3d3d2828281515150808080404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040404040505051111112222223636364040404141414040404040404040404040404040404040404040404040404040404141414141414242424242424343434343434444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434141414040403e3e3e3c3c3c3a3a3a383838393939646464d5d5d5fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffafafab3b3b34d4d4d3737373939393b3b3b3d3d3d3f3f3f4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464343432e2e2e0b0b0b0202020b0b0b1212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212120d0d0d0303030606062424243e3e3e4141414040404040404040404040404040404242424242424343434343434343434343434444444444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434141414040403e3e3e3c3c3c3a3a3a383838383838565656c5c5c5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f6f6a1a1a14444443737373939393b3b3b3d3d3d3f3f3f4040404242424343434444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464040401c1c1c0808085d5d5db5b5b5c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4bdbdbd6f6f6f1010101111113131313535352e2e2e2a2a2a2b2b2b3131313939394040404444444444444545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434141414040403e3e3e3c3c3c3a3a3a3838383636364d4d4dabababf4f4f4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffececec8484844040403737373939393b3b3b3d3d3d3f3f3f4040404242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545453c3c3c1414143c3c3ce4e4e4fdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfdfde9e9e96868680404041515151313130a0a0a0606060808081111112323233939394646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434141414040403e3e3e3d3d3d3b3b3b393939373737404040838383e8e8e8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfdfdcdcdcd6868683b3b3b3737373939393b3b3b3d3d3d3f3f3f4040404242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464343433d3d3d2d2d2d0b0b0b6c6c6cf6f6f6fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfca4a4a40606060000000101010404040404040404040404040707072929294545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434141414040403f3f3f3d3d3d3b3b3b393939373737393939636363c6c6c6f8f8f8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f5f5a5a5a54f4f4f3737373838383a3a3a3c3c3c3d3d3d3f3f3f4141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464444443d3d3d313131222222111111020202717171f6f6f6fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfca6a6a60808081212126161619b9b9b9e9e9e9e9e9e8686861414141e1e1e4545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424040403f3f3f3d3d3d3c3c3c3a3a3a383838383838464646909090e8e8e8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfcfcd0d0d07474743d3d3d3737373939393a3a3a3c3c3c3e3e3e3f3f3f4141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464343433737372323230e0e0e030303010101020202737373f6f6f6fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfbfbfba5a5a5313131929292efefeffbfbfbfbfbfbfbfbfbdbdbdb2222221a1a1a4545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141413f3f3f3e3e3e3c3c3c3b3b3b3939393737373a3a3a5f5f5fb7b7b7f3f3f3fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefee8e8e89494944e4e4e3838383838383939393b3b3b3d3d3d3e3e3e4040404141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464444443939391c1c1c0606060202021b1b1b4e4e4e7b7b7bc0c0c0f9f9f9fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfafafacfcfcfc0c0c0f8f8f8fcfcfcfcfcfcfcfcfcfcfcfcdedede2222221919194545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434242424141414040403e3e3e3d3d3d3b3b3b3a3a3a383838373737414141707070c4c4c4f6f6f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeaeaeaafafaf5d5d5d3b3b3b3737373939393a3a3a3c3c3c3d3d3d3f3f3f4040404141414343434343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463e3e3e2525250707070f0f0f545454c1c1c1ebebebf5f5f5fafafafcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf9f9f9fbfbfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcdedede2222221919194545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434343434242424040403f3f3f3e3e3e3c3c3c3b3b3b3939393838383636364444447a7a7ac9c9c9f8f8f8fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefef0f0f0afafaf6666663d3d3d3737373838383a3a3a3b3b3b3d3d3d3e3e3e3f3f3f4141414242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464444443232320c0c0c101010878787e8e8e8fdfdfdfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcdedede2222221919194545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454444444444444343434242424141414040403e3e3e3d3d3d3c3c3c3a3a3a3939393737373838384444446f6f6fbababae9e9e9fcfcfcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8f8f8dededea6a6a65d5d5d3e3e3e3737373838383939393b3b3b3c3c3c3e3e3e3f3f3f4040404141414242424343434444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464141412323230505056e6e6eefefeffcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfafafaf9f9f9fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcdedede2222221919194545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434343434242424040403f3f3f3e3e3e3d3d3d3c3c3c3a3a3a3939393838383737373c3c3c5e5e5e949494d5d5d5fafafafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f2f2c1c1c18282825252523939393737373838383939393b3b3b3c3c3c3d3d3d3f3f3f4040404141414242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464747473c3c3c121212262626c7c7c7fdfdfdfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfbfbfbcacacaadadadf6f6f6fdfdfdfcfcfcfcfcfcfdfdfddedede2121211c1c1c4545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434242424141414040403f3f3f3e3e3e3d3d3d3c3c3c3a3a3a3939393838383737373a3a3a464646656565a1a1a1d2d2d2ebebebf8f8f8fefefefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefef6f6f6e7e7e7c4c4c48c8c8c5656564343433838383737373838383939393b3b3b3c3c3c3d3d3d3e3e3e3f3f3f4141414242424242424343434444444444444545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464747473737370b0b0b4f4f4ff4f4f4fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfca4a4a41b1b1b808080e7e7e7fcfcfcfdfdfdfdfdfddedede2020202020204545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444343434343434242424141414040403f3f3f3e3e3e3d3d3d3c3c3c3b3b3b3a3a3a3939393838383838383939394040405f5f5f808080a5a5a5cccccce6e6e6fafafafffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefefef5f5f5dededec0c0c09898987878785555553c3c3c3838383737373838383939393a3a3a3b3b3b3c3c3c3d3d3d3e3e3e3f3f3f4040404141414242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464747473434340d0d0d6c6c6cfdfdfdfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfca6a6a60707070f0f0f575757c1c1c1d6d6d6d6d6d6b9b9b92020202d2d2d4646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434343434242424141414040403f3f3f3e3e3e3d3d3d3c3c3c3b3b3b3a3a3a3a3a3a3939393838383737373636363b3b3b4646464f4f4f5c5c5c7a7a7a969696b0b0b0c2c2c2cfcfcfdbdbdbe1e1e1e6e6e6e6e6e6e5e5e5dfdfdfd8d8d8cacacabcbcbca7a7a78c8c8c6e6e6e5656564d4d4d4444443939393636363737373838383939393a3a3a3b3b3b3c3c3c3d3d3d3e3e3e3f3f3f4040404141414141414242424343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464747473535350f0f0f777777fdfdfdfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfbfbfb9e9e9e0e0e0e2525251b1b1b1e1e1e1e1e1e1d1d1d1f1f1f2020203b3b3b4646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434343434242424141414040404040403f3f3f3e3e3e3d3d3d3c3c3c3b3b3b3b3b3b3a3a3a3939393939393838383737373737373939393a3a3a3a3a3a3b3b3b3b3b3b3b3b3b3c3c3c3c3c3c3c3c3c3c3c3c3b3b3b3b3b3b3b3b3b3b3b3b3a3a3a3939393838383737373737373838383939393939393a3a3a3b3b3b3c3c3c3c3c3c3d3d3d3e3e3e3f3f3f4040404141414141414242424343434343434444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463b3b3b0f0f0f696969fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfbfbfbfcfcfcfbfbfbe1e1e15252521b1b1b4040404141413c3c3c3939393838383c3c3c4040404545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444343434343434242424242424141414040403f3f3f3f3f3f3e3e3e3d3d3d3d3d3d3c3c3c3b3b3b3b3b3b3a3a3a3a3a3a3939393939393939393838383838383838383838383838383838383838383838383838383838383838383939393939393939393a3a3a3a3a3a3b3b3b3c3c3c3c3c3c3d3d3d3e3e3e3e3e3e3f3f3f4040404040404141414242424242424343434444444444444444444545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464040401515154b4b4bf0f0f0fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcedededb7b7b7acacaca0a0a05454541414142f2f2f4545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454444444444444444444343434343434242424141414141414040404040403f3f3f3f3f3f3e3e3e3e3e3e3d3d3d3d3d3d3c3c3c3c3c3c3c3c3c3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3b3c3c3c3c3c3c3c3c3c3d3d3d3d3d3d3e3e3e3e3e3e3f3f3f3f3f3f4040404040404141414242424242424343434343434444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545452a2a2a252525c2c2c2fdfdfdfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceeeeee6666660808080a0a0a1d1d1d3434344343434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444444444343434343434242424242424141414141414040404040403f3f3f3f3f3f3f3f3f3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3d3d3d3d3d3d3d3d3d3d3d3d3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3f3f3f3f3f3f3f3f3f4040404040404040404141414141414242424242424343434343434444444444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463b3b3b171717636363e5e5e5fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf3f3f3fbfbfbfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfdfdfdcacaca1f1f1f1313133a3a3a4545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444444444343434343434343434242424242424141414141414141414141414040404040404040404040404040404040404040404040404040404040404040404040404040404141414141414141414242424242424242424343434343434343434444444444444444444545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545452e2e2e131313717171dcdcdcfdfdfdfdfdfdfcfcfcfcfcfcfcfcfcfdfdfdf9f9f9cccccc949494f0f0f0fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf2f2f25858580e0e0e3939394646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454444444444444444444444444343434343434343434343434242424242424242424242424242424242424242424242424242424242424242424242424242424242424343434343434343434343434343434444444444444444444545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464242422a2a2a121212454545b0b0b0eeeeeef5f5f5f7f7f7f6f6f6dedede8a8a8a303030515151f0f0f0fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf9f9f98d8d8d0a0a0a3737374646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454444444444444444444444444444444444444444444343434343434343434343434343434343434343434444444444444444444444444444444444444444444545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464242423232321919191b1b1b3838385a5a5a6868685252522f2f2f121212040404555555f2f2f2fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfafafa9a9a9a0c0c0c3838384646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545453e3e3e3131312626261c1c1c1b1b1b1e1e1e282828303030151515494949f0f0f0fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcf6f6f67f7f7f1111113d3d3d4646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454545454545454545454545454545454545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545454343434343434444444545454444442727272c2c2ce4e4e4fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfceeeeee4545451a1a1a424242464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646373737151515969696fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfdfdfdbbbbbb1c1c1c2727274545454646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464343431e1e1e2d2d2dc7c7c7fcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcfcd9d9d94040401616163c3c3c4646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646463737371414143e3e3ec8c8c8fafafafdfdfdfcfcfcfcfcfcfcfcfcfcfcfcfbfbfbdddddd656565121212323232454545464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646444444333333181818313131919191c4c4c4e8e8e8f6f6f6edededcecece9e9e9e4b4b4b1616162e2e2e4343434646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464545453c3c3c2323231313132323234444445555554b4b4b2d2d2d1313131f1f1f3737374444444646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464242423838382c2c2c2222221e1e1e1f1f1f282828363636404040454545464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646474747484848474747464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 13966, guid: 0000000000000000e000000000000000, type: 0} + m_Name: Lit2DSceneTemplate + m_EditorClassIdentifier: + templateScene: {fileID: 102900000, guid: 2cda990e2423bbf4892e6590ba056729, type: 3} + templateName: Lit 2D (URP) + description: Contains an orthographic camera and a Global Light 2D. Works with + the 2D Renderer in Universal RP. + preview: {fileID: -3604256930052969394} + dependencies: + - dependency: {fileID: 2800000, guid: b3ab972b21db85d48ade9657efdd4771, type: 3} + instantiationMode: 1 + templatePipeline: {fileID: 0} + addToDefaults: 1 diff --git a/Assets/Settings/Lit2DSceneTemplate.scenetemplate.meta b/Assets/Settings/Lit2DSceneTemplate.scenetemplate.meta new file mode 100644 index 0000000..0364f69 --- /dev/null +++ b/Assets/Settings/Lit2DSceneTemplate.scenetemplate.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d03ed43fc9d8a4f2e9fa70c1c7916eb9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/PlayerInputActions.inputactions b/Assets/Settings/PlayerInputActions.inputactions new file mode 100644 index 0000000..3614f32 --- /dev/null +++ b/Assets/Settings/PlayerInputActions.inputactions @@ -0,0 +1,919 @@ +{ + "name": "PlayerInputActions", + "maps": [ + { + "name": "Gameplay", + "id": "a1b2c3d4-0001-0000-0000-000000000000", + "actions": [ + { + "name": "Move", + "type": "Value", + "id": "a1b2c3d4-0001-0001-0000-000000000000", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Jump", + "type": "Button", + "id": "a1b2c3d4-0001-0002-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "Attack", + "type": "Button", + "id": "a1b2c3d4-0001-0003-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "DownAttack", + "type": "Button", + "id": "a1b2c3d4-0001-0004-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "UpAttack", + "type": "Button", + "id": "a1b2c3d4-0001-0005-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "Parry", + "type": "Button", + "id": "a1b2c3d4-0001-0006-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "Dash", + "type": "Button", + "id": "a1b2c3d4-0001-0007-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "UseSpring", + "type": "Button", + "id": "a1b2c3d4-0001-0008-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "SwitchSkyForm", + "type": "Button", + "id": "a1b2c3d4-0001-0009-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "SwitchEarthForm", + "type": "Button", + "id": "a1b2c3d4-0001-000a-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "SwitchDeathForm", + "type": "Button", + "id": "a1b2c3d4-0001-000b-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "SoulSkill", + "type": "Button", + "id": "a1b2c3d4-0001-000c-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "SpiritSkill1", + "type": "Button", + "id": "a1b2c3d4-0001-000d-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "SpiritSkill2", + "type": "Button", + "id": "a1b2c3d4-0001-000e-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "Interact", + "type": "Button", + "id": "a1b2c3d4-0001-000f-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "Pause", + "type": "Button", + "id": "a1b2c3d4-0001-0010-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + } + ], + "bindings": [ + { + "name": "WASD", + "id": "b0000001-0001-0000-0000-000000000000", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "b0000001-0001-0001-0000-000000000000", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "b0000001-0001-0002-0000-000000000000", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "b0000001-0001-0003-0000-000000000000", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "b0000001-0001-0004-0000-000000000000", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "Arrows", + "id": "b0000001-0001-0005-0000-000000000000", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "b0000001-0001-0006-0000-000000000000", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "b0000001-0001-0007-0000-000000000000", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "b0000001-0001-0008-0000-000000000000", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "b0000001-0001-0009-0000-000000000000", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Move", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "b0000002-0001-0000-0000-000000000000", + "path": "/leftStick", + "interactions": "", + "processors": "StickDeadzone", + "groups": "Gamepad", + "action": "Move", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0002-0000-0000-000000000000", + "path": "/space", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0002-0001-0000-000000000000", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Jump", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0003-0000-0000-000000000000", + "path": "/j", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0003-0001-0000-000000000000", + "path": "/buttonWest", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Attack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0004-0000-0000-000000000000", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "DownAttack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0004-0001-0000-000000000000", + "path": "/dpad/down", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "DownAttack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0005-0000-0000-000000000000", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "UpAttack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0005-0001-0000-000000000000", + "path": "/dpad/up", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "UpAttack", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0006-0000-0000-000000000000", + "path": "/k", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Parry", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0006-0001-0000-000000000000", + "path": "/buttonEast", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Parry", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0007-0000-0000-000000000000", + "path": "/leftShift", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Dash", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0007-0001-0000-000000000000", + "path": "/buttonNorth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Dash", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0008-0000-0000-000000000000", + "path": "/e", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "UseSpring", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0008-0001-0000-000000000000", + "path": "/leftShoulder", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "UseSpring", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0009-0000-0000-000000000000", + "path": "/1", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "SwitchSkyForm", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0009-0001-0000-000000000000", + "path": "/dpad/up", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "SwitchSkyForm", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000a-0000-0000-000000000000", + "path": "/2", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "SwitchEarthForm", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000a-0001-0000-000000000000", + "path": "/dpad/left", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "SwitchEarthForm", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000b-0000-0000-000000000000", + "path": "/3", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "SwitchDeathForm", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000b-0001-0000-000000000000", + "path": "/dpad/right", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "SwitchDeathForm", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000c-0000-0000-000000000000", + "path": "/q", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "SoulSkill", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000c-0001-0000-000000000000", + "path": "/leftTrigger", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "SoulSkill", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000d-0000-0000-000000000000", + "path": "/r", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "SpiritSkill1", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000d-0001-0000-000000000000", + "path": "/rightTrigger", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "SpiritSkill1", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000e-0000-0000-000000000000", + "path": "/f", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "SpiritSkill2", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000e-0001-0000-000000000000", + "path": "/rightShoulder", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "SpiritSkill2", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000f-0000-0000-000000000000", + "path": "/f", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Interact", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-000f-0001-0000-000000000000", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Interact", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0010-0000-0000-000000000000", + "path": "/escape", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Pause", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "b0000003-0010-0001-0000-000000000000", + "path": "/start", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Pause", + "isComposite": false, + "isPartOfComposite": false + } + ] + }, + { + "name": "UI", + "id": "a1b2c3d4-0002-0000-0000-000000000000", + "actions": [ + { + "name": "Navigate", + "type": "Value", + "id": "a1b2c3d4-0002-0001-0000-000000000000", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + }, + { + "name": "Submit", + "type": "Button", + "id": "a1b2c3d4-0002-0002-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "Cancel", + "type": "Button", + "id": "a1b2c3d4-0002-0003-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "Pause", + "type": "Button", + "id": "a1b2c3d4-0002-0004-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + }, + { + "name": "Point", + "type": "Value", + "id": "a1b2c3d4-0002-0005-0000-000000000000", + "expectedControlType": "Vector2", + "processors": "", + "interactions": "", + "initialStateCheck": true + } + ], + "bindings": [ + { + "name": "WASD", + "id": "c0000001-0001-0000-0000-000000000000", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "c0000001-0001-0001-0000-000000000000", + "path": "/w", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "c0000001-0001-0002-0000-000000000000", + "path": "/s", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "c0000001-0001-0003-0000-000000000000", + "path": "/a", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "c0000001-0001-0004-0000-000000000000", + "path": "/d", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "Arrows", + "id": "c0000001-0001-0005-0000-000000000000", + "path": "2DVector", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": true, + "isPartOfComposite": false + }, + { + "name": "up", + "id": "c0000001-0001-0006-0000-000000000000", + "path": "/upArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "down", + "id": "c0000001-0001-0007-0000-000000000000", + "path": "/downArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "left", + "id": "c0000001-0001-0008-0000-000000000000", + "path": "/leftArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "right", + "id": "c0000001-0001-0009-0000-000000000000", + "path": "/rightArrow", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": true + }, + { + "name": "", + "id": "c0000002-0001-0000-0000-000000000000", + "path": "/leftStick", + "interactions": "", + "processors": "StickDeadzone", + "groups": "Gamepad", + "action": "Navigate", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c0000003-0002-0000-0000-000000000000", + "path": "/enter", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Submit", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c0000003-0002-0001-0000-000000000000", + "path": "/space", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Submit", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c0000003-0002-0002-0000-000000000000", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Submit", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c0000003-0003-0000-0000-000000000000", + "path": "/escape", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Cancel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c0000003-0003-0001-0000-000000000000", + "path": "/buttonEast", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Cancel", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c0000003-0004-0000-0000-000000000000", + "path": "/escape", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Pause", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c0000003-0004-0001-0000-000000000000", + "path": "/start", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Pause", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "c0000003-0005-0000-0000-000000000000", + "path": "/position", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Point", + "isComposite": false, + "isPartOfComposite": false + } + ] + }, + { + "name": "Cutscene", + "id": "a1b2c3d4-0003-0000-0000-000000000000", + "actions": [ + { + "name": "Skip", + "type": "Button", + "id": "a1b2c3d4-0003-0001-0000-000000000000", + "expectedControlType": "Button", + "processors": "", + "interactions": "" + } + ], + "bindings": [ + { + "name": "", + "id": "d0000003-0001-0000-0000-000000000000", + "path": "/space", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Skip", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "d0000003-0001-0001-0000-000000000000", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Skip", + "isComposite": false, + "isPartOfComposite": false + } + ] + } + ], + "controlSchemes": [ + { + "name": "Keyboard&Mouse", + "bindingGroup": "Keyboard&Mouse", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + }, + { + "devicePath": "", + "isOptional": true, + "isOR": false + } + ] + }, + { + "name": "Gamepad", + "bindingGroup": "Gamepad", + "devices": [ + { + "devicePath": "", + "isOptional": false, + "isOR": false + } + ] + } + ] +} diff --git a/Assets/Settings/PlayerInputActions.inputactions.meta b/Assets/Settings/PlayerInputActions.inputactions.meta new file mode 100644 index 0000000..e75af15 --- /dev/null +++ b/Assets/Settings/PlayerInputActions.inputactions.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 6d0341a640ba64043a8cd70f771b962d +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3} + generateWrapperCode: 0 + wrapperCodePath: + wrapperClassName: + wrapperCodeNamespace: diff --git a/Assets/Settings/Renderer2D.asset b/Assets/Settings/Renderer2D.asset new file mode 100644 index 0000000..47cf6bd --- /dev/null +++ b/Assets/Settings/Renderer2D.asset @@ -0,0 +1,60 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11145981673336645838492a2d98e247, type: 3} + m_Name: Renderer2D + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, type: 3} + m_RendererFeatures: [] + m_RendererFeatureMap: + m_UseNativeRenderPass: 0 + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 1, z: 0} + m_HDREmulationScale: 1 + m_LightRenderTextureScale: 0.5 + m_LightBlendStyles: + - name: Multiply + maskTextureChannel: 0 + blendMode: 1 + - name: Additive + maskTextureChannel: 0 + blendMode: 0 + - name: Multiply with Mask + maskTextureChannel: 1 + blendMode: 1 + - name: Additive with Mask + maskTextureChannel: 1 + blendMode: 0 + m_UseDepthStencilBuffer: 1 + m_UseCameraSortingLayersTexture: 0 + m_CameraSortingLayersTextureBound: -1 + m_CameraSortingLayerDownsamplingMethod: 0 + m_MaxLightRenderTextureCount: 16 + m_MaxShadowRenderTextureCount: 1 + m_ShapeLightShader: {fileID: 4800000, guid: d79e1c784eaf80c4585c0be7391f757a, type: 3} + m_ShapeLightVolumeShader: {fileID: 4800000, guid: 7e60080c8cd24a2468cb08b4bfee5606, type: 3} + m_PointLightShader: {fileID: 4800000, guid: e35a31e1679aeff489e202f5cc4853d5, type: 3} + m_PointLightVolumeShader: {fileID: 4800000, guid: c7d04ca57e5449d49ad9cee1c604bc26, type: 3} + m_CoreBlitShader: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + m_SamplingShader: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + m_ProjectedShadowShader: {fileID: 4800000, guid: ce09d4a80b88c5a4eb9768fab4f1ee00, type: 3} + m_SpriteShadowShader: {fileID: 4800000, guid: 44fc62292b65ab04eabcf310e799ccf6, type: 3} + m_SpriteUnshadowShader: {fileID: 4800000, guid: de02b375720b5c445afe83cd483bedf3, type: 3} + m_GeometryUnshadowShader: {fileID: 4800000, guid: 77774d9009bb81447b048c907d4c6273, type: 3} + m_FallbackErrorShader: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_FallOffLookup: {fileID: 2800000, guid: 5688ab254e4c0634f8d6c8e0792331ca, type: 3} + m_DefaultMaterialType: 0 + m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultLitMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_DefaultUnlitMaterial: {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2} + m_DefaultMaskMaterial: {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} diff --git a/Assets/Settings/Renderer2D.asset.meta b/Assets/Settings/Renderer2D.asset.meta new file mode 100644 index 0000000..99dc6c5 --- /dev/null +++ b/Assets/Settings/Renderer2D.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 424799608f7334c24bf367e4bbfa7f9a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Scenes.meta b/Assets/Settings/Scenes.meta new file mode 100644 index 0000000..65e05a4 --- /dev/null +++ b/Assets/Settings/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d574b2fb4661c408f80aa76c0182931f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/Scenes/URP2DSceneTemplate.unity b/Assets/Settings/Scenes/URP2DSceneTemplate.unity new file mode 100644 index 0000000..10756af --- /dev/null +++ b/Assets/Settings/Scenes/URP2DSceneTemplate.unity @@ -0,0 +1,350 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &519420028 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519420032} + - component: {fileID: 519420031} + - component: {fileID: 519420029} + - component: {fileID: 519420030} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &519420029 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 +--- !u!114 &519420030 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 +--- !u!20 &519420031 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 34 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 0 + m_HDR: 1 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 0 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &519420032 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519420028} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &619394800 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 619394802} + - component: {fileID: 619394801} + m_Layer: 0 + m_Name: Global Light 2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &619394801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 619394800} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ComponentVersion: 1 + m_LightType: 4 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_LightVolumeIntensity: 1 + m_LightVolumeIntensityEnabled: 0 + m_ApplyToSortingLayers: 00000000 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowIntensityEnabled: 0 + m_ShadowIntensity: 0.75 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_Vertices: + - position: {x: 0.9985302, y: 0.9985302, z: 0} + color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} + uv: {x: 0, y: 0} + - position: {x: 0.9985302, y: 0.9985302, z: 0} + color: {r: 0, g: 0, b: 0, a: 1} + uv: {x: 0, y: 0} + - position: {x: -0.9985302, y: 0.9985302, z: 0} + color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} + uv: {x: 0, y: 0} + - position: {x: -0.9985302, y: 0.9985302, z: 0} + color: {r: 0, g: 0, b: 0, a: 1} + uv: {x: 0, y: 0} + - position: {x: -0.99853003, y: -0.9985304, z: 0} + color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} + uv: {x: 0, y: 0} + - position: {x: -0.99853003, y: -0.9985304, z: 0} + color: {r: 0, g: 0, b: 0, a: 1} + uv: {x: 0, y: 0} + - position: {x: 0.99853003, y: -0.9985304, z: 0} + color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} + uv: {x: 0, y: 0} + - position: {x: 0.99853003, y: -0.9985304, z: 0} + color: {r: 0, g: 0, b: 0, a: 1} + uv: {x: 0, y: 0} + - position: {x: 0, y: 0, z: 0} + color: {r: 0, g: 0, b: 0, a: 1} + uv: {x: 0, y: 0} + m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &619394802 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 619394800} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Settings/Scenes/URP2DSceneTemplate.unity.meta b/Assets/Settings/Scenes/URP2DSceneTemplate.unity.meta new file mode 100644 index 0000000..c1e3c88 --- /dev/null +++ b/Assets/Settings/Scenes/URP2DSceneTemplate.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2cda990e2423bbf4892e6590ba056729 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/UniversalRP.asset b/Assets/Settings/UniversalRP.asset new file mode 100644 index 0000000..01b1944 --- /dev/null +++ b/Assets/Settings/UniversalRP.asset @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf2edee5c58d82540a51f03df9d42094, type: 3} + m_Name: UniversalRP + m_EditorClassIdentifier: + k_AssetVersion: 11 + k_AssetPreviousVersion: 11 + m_RendererType: 1 + m_RendererData: {fileID: 0} + m_RendererDataList: + - {fileID: 11400000, guid: 424799608f7334c24bf367e4bbfa7f9a, type: 2} + m_DefaultRendererIndex: 0 + m_RequireDepthTexture: 0 + m_RequireOpaqueTexture: 0 + m_OpaqueDownsampling: 1 + m_SupportsTerrainHoles: 1 + m_SupportsHDR: 1 + m_HDRColorBufferPrecision: 0 + m_MSAA: 1 + m_RenderScale: 1 + m_UpscalingFilter: 0 + m_FsrOverrideSharpness: 0 + m_FsrSharpness: 0.92 + m_EnableLODCrossFade: 1 + m_LODCrossFadeDitheringType: 1 + m_MainLightRenderingMode: 1 + m_MainLightShadowsSupported: 1 + m_MainLightShadowmapResolution: 2048 + m_AdditionalLightsRenderingMode: 1 + m_AdditionalLightsPerObjectLimit: 4 + m_AdditionalLightShadowsSupported: 0 + m_AdditionalLightsShadowmapResolution: 2048 + m_AdditionalLightsShadowResolutionTierLow: 512 + m_AdditionalLightsShadowResolutionTierMedium: 1024 + m_AdditionalLightsShadowResolutionTierHigh: 2048 + m_ReflectionProbeBlending: 0 + m_ReflectionProbeBoxProjection: 0 + m_ShadowDistance: 50 + m_ShadowCascadeCount: 1 + m_Cascade2Split: 0.25 + m_Cascade3Split: {x: 0.1, y: 0.3} + m_Cascade4Split: {x: 0.067, y: 0.2, z: 0.467} + m_CascadeBorder: 0.1 + m_ShadowDepthBias: 1 + m_ShadowNormalBias: 1 + m_SoftShadowsSupported: 0 + m_ConservativeEnclosingSphere: 0 + m_NumIterationsEnclosingSphere: 64 + m_AdditionalLightsCookieResolution: 2048 + m_AdditionalLightsCookieFormat: 3 + m_UseSRPBatcher: 1 + m_SupportsDynamicBatching: 0 + m_MixedLightingSupported: 1 + m_SupportsLightCookies: 1 + m_SupportsLightLayers: 0 + m_DebugLevel: 0 + m_StoreActionsOptimization: 0 + m_EnableRenderGraph: 0 + m_UseAdaptivePerformance: 1 + m_ColorGradingMode: 0 + m_ColorGradingLutSize: 32 + m_UseFastSRGBLinearConversion: 0 + m_ShadowType: 1 + m_LocalShadowsSupported: 0 + m_LocalShadowsAtlasResolution: 256 + m_MaxPixelLights: 0 + m_ShadowAtlasResolution: 256 + m_VolumeFrameworkUpdateMode: 0 + m_Textures: + blueNoise64LTex: {fileID: 2800000, guid: e3d24661c1e055f45a7560c033dbb837, type: 3} + bayerMatrixTex: {fileID: 2800000, guid: f9ee4ed84c1d10c49aabb9b210b0fc44, type: 3} + m_ShaderVariantLogLevel: 0 + m_ShadowCascades: 0 diff --git a/Assets/Settings/UniversalRP.asset.meta b/Assets/Settings/UniversalRP.asset.meta new file mode 100644 index 0000000..6f92f2d --- /dev/null +++ b/Assets/Settings/UniversalRP.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 681886c5eb7344803b6206f758bf0b1c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UI Toolkit.meta b/Assets/UI Toolkit.meta new file mode 100644 index 0000000..71cb2a9 --- /dev/null +++ b/Assets/UI Toolkit.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 685568651ebf19d4db5a2a49a1a4e17c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UI Toolkit/PanelSettings.asset b/Assets/UI Toolkit/PanelSettings.asset new file mode 100644 index 0000000..ffca29d --- /dev/null +++ b/Assets/UI Toolkit/PanelSettings.asset @@ -0,0 +1,38 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 19101, guid: 0000000000000000e000000000000000, type: 0} + m_Name: PanelSettings + m_EditorClassIdentifier: + themeUss: {fileID: -4733365628477956816, guid: 05509efa034bfd646923268c00f738ab, type: 3} + m_TargetTexture: {fileID: 0} + m_ScaleMode: 1 + m_ReferenceSpritePixelsPerUnit: 100 + m_Scale: 1 + m_ReferenceDpi: 96 + m_FallbackDpi: 96 + m_ReferenceResolution: {x: 1200, y: 800} + m_ScreenMatchMode: 0 + m_Match: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 + m_ClearDepthStencil: 1 + m_ClearColor: 0 + m_ColorClearValue: {r: 0, g: 0, b: 0, a: 0} + m_DynamicAtlasSettings: + m_MinAtlasSize: 64 + m_MaxAtlasSize: 4096 + m_MaxSubTextureSize: 64 + m_ActiveFilters: 31 + m_AtlasBlitShader: {fileID: 9101, guid: 0000000000000000f000000000000000, type: 0} + m_RuntimeShader: {fileID: 9100, guid: 0000000000000000f000000000000000, type: 0} + m_RuntimeWorldShader: {fileID: 9102, guid: 0000000000000000f000000000000000, type: 0} + textSettings: {fileID: 0} diff --git a/Assets/UI Toolkit/PanelSettings.asset.meta b/Assets/UI Toolkit/PanelSettings.asset.meta new file mode 100644 index 0000000..0abd420 --- /dev/null +++ b/Assets/UI Toolkit/PanelSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f2e91a1954a2a6c48ae0e0b2c95049c4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UI Toolkit/UnityThemes.meta b/Assets/UI Toolkit/UnityThemes.meta new file mode 100644 index 0000000..7e67165 --- /dev/null +++ b/Assets/UI Toolkit/UnityThemes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a514fe4d73d66cf44b1f03d3d0310d8f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss b/Assets/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss new file mode 100644 index 0000000..1056e07 --- /dev/null +++ b/Assets/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss @@ -0,0 +1 @@ +@import url("unity-theme://default"); \ No newline at end of file diff --git a/Assets/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss.meta b/Assets/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss.meta new file mode 100644 index 0000000..96ac257 --- /dev/null +++ b/Assets/UI Toolkit/UnityThemes/UnityDefaultRuntimeTheme.tss.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05509efa034bfd646923268c00f738ab +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12388, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 diff --git a/Assets/UniversalRenderPipelineGlobalSettings.asset b/Assets/UniversalRenderPipelineGlobalSettings.asset new file mode 100644 index 0000000..2db3acb --- /dev/null +++ b/Assets/UniversalRenderPipelineGlobalSettings.asset @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2ec995e51a6e251468d2a3fd8a686257, type: 3} + m_Name: UniversalRenderPipelineGlobalSettings + m_EditorClassIdentifier: + k_AssetVersion: 3 + lightLayerName0: + lightLayerName1: + lightLayerName2: + lightLayerName3: + lightLayerName4: + lightLayerName5: + lightLayerName6: + lightLayerName7: + m_StripDebugVariants: 1 + m_StripUnusedPostProcessingVariants: 0 + m_StripUnusedVariants: 1 + supportRuntimeDebugDisplay: 0 diff --git a/Assets/UniversalRenderPipelineGlobalSettings.asset.meta b/Assets/UniversalRenderPipelineGlobalSettings.asset.meta new file mode 100644 index 0000000..46b340a --- /dev/null +++ b/Assets/UniversalRenderPipelineGlobalSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93b439a37f63240aca3dd4e01d978a9f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Docs/Architecture/00_CoverageIndex.md b/Docs/Architecture/00_CoverageIndex.md new file mode 100644 index 0000000..8da5472 --- /dev/null +++ b/Docs/Architecture/00_CoverageIndex.md @@ -0,0 +1,181 @@ +# 架构文档索引 / Design 覆盖矩阵 + +> **建立日期**:2026-04-29 +> **对比对象**:`Docs/Design/`(74 份设计文档)←→ `Docs/Architecture/`(24 份架构文档) +> **用途**:查询某 Design 文档对应哪份 Architecture 文档及章节;开发 code review checklist + +--- + +## ✅ 当前状态:**架构完整度 100%** + +--- + +## 一、总体评分 + +| 维度 | 状态 | +|------|------| +| 核心游戏循环(移动/战斗/存档) | ✅ 完整 | +| 敌人与 Boss 基础框架 | ✅ 完整(含 BossSkillModule §23) | +| UI / 音频 / 事件系统 | ✅ 完整 | +| 世界交互与地图 | ✅ 完整(含 MovingPlatform/CrumblePlatform/SkillInteractable §11-15) | +| 进度/装备/技能 | ✅ 完整 | +| 叙事与对话 | ✅ 完整(含 CutsceneSO/CutsceneTrigger) | +| 玩家能力扩展系统 | ✅ 完整(Shield §20、SwimState §21、DifficultyModule §19) | +| 世界互动机制 | ✅ 完整(Puzzle §21、LootSystem §07、LiquidSwim §21) | +| 游戏系统层 | ✅ 完整(Difficulty §19、SpeedrunTimer §16、CrashRecovery §12) | +| 视觉反馈层 | ✅ 完整(VFXFeedback §18、CameraModule §17、AnimEvent §24) | + +--- + +## 二、逐 Design 文档覆盖矩阵 + +> 标记说明:✅ 覆盖 | ⚠️ 部分覆盖 | ❌ 未覆盖 | 📖 非技术文档(艺术/叙事/策划,不需要 Architecture) + +| # | Design 文档 | Architecture 对应 | 状态 | 说明 | +|---|------------|-----------------|------|------| +| 01 | InputSystem | 04_InputModule | ✅ | 完整(含 RebindPanel/ConflictDetector §6) | +| 02 | CameraSystem | **17_CameraModule** | ✅ | CameraStateController/RoomVisibleArea/CameraTriggerZone 全部定义 | +| 03 | PlayerSystem | 05_PlayerModule | ✅ | 完整(含 SwimState、ShieldComponent 引用) | +| 04 | CombatSystem | 06_CombatModule | ✅ | 完整(含 ProjectileConfigSO/LinearProjectile/ParryableProjectile) | +| 05 | ParrySystem | 06_CombatModule §4 | ✅ | 完整 | +| 06 | EnemySystem | 07_EnemyModule | ✅ | 完整(含 LootTableSO/LootResolver/LootPickup) | +| 07 | FeedbackSystem | **18_VFXFeedbackModule** | ✅ | FeedbackConfigSO/VFXPool/HitFXSpawner 全部定义 | +| 08 | WorldSystem | 08_WorldModule | ✅ | 完整(含 §11-15 MovingPlatform/MagicWall/SoftTerrain/PhantomInteractable) | +| 09 | EditorExtensions | — | 📖 | 编辑器工具指南,无需独立 Architecture | +| 10 | UISystem | 10_UIModule | ✅ | 完整 | +| 11 | GameManager | 03_CoreModule | ✅ | 完整(含 DifficultyManager 初始化顺序引用) | +| 12 | AudioSystem | 11_AudioModule | ✅ | 完整 | +| 13 | ProjectileSystem | 06_CombatModule §5 | ✅ | ProjectileConfigSO、LinearProjectile、ParryableProjectile 已定义 | +| 14 | ProgressionSystem | 09_ProgressionModule | ✅ | 完整 | +| 15 | DialogueSystem | 14_NarrativeModule | ✅ | 完整(含 CutsceneSO/CutsceneTrigger) | +| 16 | MapSystem | 15_MapShopModule §1 | ✅ | 完整 | +| 17 | EquipmentSystem | 09_ProgressionModule | ✅ | 完整 | +| 18 | CutsceneSystem | 14_NarrativeModule §7 | ✅ | CutsceneTrigger/CutsceneSO 已定义 | +| 19 | BossPatternLibrary | **23_BossSkillModule** | ✅ | BossSkillSO/SkillSequenceSO/WeakPointSystem 全部定义 | +| 20 | AnimationEventSystem | **24_AnimEventModule** | ✅ | PlayerAnimationEvents/EnemyAnimationEvents/AnimationEventBinder 全部定义 | +| 21 | SpellSystem | 09_ProgressionModule | ✅ | 完整 | +| 22 | LocalizationSystem | 16_SupportingModules §1 | ✅ | 完整 | +| 23 | GameFeelTuningGuide | — | 📖 | 数值调参指南,无需 Architecture | +| 24 | GroundDetectionSystem | 05_PlayerModule §3 | ✅ | 合并入 PlayerMovement,GroundDetectionConfigSO 已定义 | +| 25 | InputRebindingUI | 04_InputModule §6 | ✅ | RebindPanel/ConflictDetector/RebindPersistence 已定义 | +| 26 | WallMechanicsSystem | 05_PlayerModule §3 | ✅ | 合并入 PlayerMovement,WallMechanicsConfigSO 已定义 | +| 27 | PerformanceBudgetGuide | — | 📖 | 性能预算指南,无需 Architecture | +| 28 | ShopSystem | 15_MapShopModule §2 | ✅ | 完整 | +| 29 | DifficultyModesGuide | **19_DifficultyModule** | ✅ | DifficultyLevel enum/DifficultyScalerSO/DifficultyManager 全部定义 | +| 30 | ShieldMechanicsSystem | **20_ShieldModule** | ✅ | ShieldComponent/ShieldConfigSO/IShieldable 全部定义;HurtBox 护盾管道已修正 | +| 31 | SaveDataSchema | 12_SaveModule | ✅ | 完整(含 EmergencySaveService/CrashReporter §9) | +| 32 | AchievementSystem | 16_SupportingModules §2 | ✅ | 完整 | +| 33 | EnemyLootSystem | 07_EnemyModule §14 | ✅ | LootTableSO/LootResolver/LootPickup 已定义;EnemyBase.Die() 已集成 | +| 34 | EventChainSystem | 14_NarrativeModule §5-6 | ✅ | 完整 | +| 35 | PuzzleArchitecture | **21_LiquidPuzzleModule** Part B | ✅ | ISwitchable/IActivatable/PuzzleSwitch/PuzzleReceiver/PuzzleWire 全部定义 | +| 36 | NavigationHintSystem | **21_LiquidPuzzleModule** §NavHint | ✅ | WorldMarker/BreadcrumbTracker 已定义 | +| 37 | ToolSystem | 09_ProgressionModule §7.5 | ✅ | ToolSlotManager/ToolHUD 已补充 | +| 38 | QuestSystem | **22_QuestChallengeModule** Part A | ✅ | QuestSO/QuestManager/QuestGiver/RewardSO 全部定义 | +| 39 | ChallengeRoomSystem | **22_QuestChallengeModule** Part B | ✅ | ChallengeRoomSO/ChallengeRoomManager 全部定义 | +| 40 | LiquidSwimSystem | **21_LiquidPuzzleModule** Part A | ✅ | LiquidZone/SwimState/LiquidPhysicsConfigSO 全部定义;FSM 已补 SwimState | +| 41 | VFXArchitecture | **18_VFXFeedbackModule** | ✅ | VFXPool/HitFXSpawner/HurtFlashController/VFXCatalogSO/FeedbackConfigSO 全部定义 | +| 42 | DebugCheatSystem | 16_SupportingModules §4 | ✅ | 完整 | +| 43 | AddressablesWorkflow | 13_AssetPoolModule | ✅ | 完整 | +| 44 | LevelDesignGuide | — | 📖 | 关卡设计规范,无需 Architecture | +| 45 | TutorialSystem | **21_LiquidPuzzleModule** §Tutorial | ✅ | TutorialManager/ContextualHintTrigger 已定义 | +| 46 | PlatformIntegration | 16_SupportingModules §3 | ✅ | IPlatformService/SteamPlatformService/NullPlatformService(ServiceLocator 模式)已定义 | +| 47 | BossSkillSystem | **23_BossSkillModule** | ✅ | BossSkillSO/SkillSequenceSO/BossSkillExecutor/WeakPointSystem 全部定义 | +| 48 | EnemyRoster | — | 📖 | 敌人名单(策划),无需 Architecture | +| 49 | AntiSoftlockSystem | 16_SupportingModules §5 | ✅ | 完整 | +| 50 | NarrativeDesignSystem | — | 📖 | 叙事结构设计,无需 Architecture | +| 51 | EconomyBalanceDesign | — | 📖 | 经济平衡设计,无需 Architecture | +| 52 | CompletionEndingDesign | — | 📖 | 结局设计,无需 Architecture | +| 53 | WeaponSystem | 05_PlayerModule §5-7 | ✅ | WeaponSO(per-attack ClipTransition + DamageSourceSO + WeaponVFXConfig)/ WeaponManager(FormSO 事件驱动 + override 词典)/ FormSO.defaultWeapon / WeaponOverrideEffect 均已定义 | +| 54 | PoiseSystem | 06_CombatModule **§13** | ✅ | 已重写为等级比较系统(PoiseLevel/BreakLevel 独立枚举,玩家+敌人均支持,IPoiseSource/PoiseWindowConfig/PoiseOverrideTableSO)| +| 55 | AnalyticsTelemetrySystem | 16_SupportingModules **§8** | ✅ | AnalyticsManager/IAnalyticsBackend 已定义 | +| 56 | CrashRecoverySystem | 12_SaveModule §9 | ✅ | EmergencySaveService/CrashReporter 已定义 | +| 57 | PhysicsLayerMatrix | 06_CombatModule **§12** | ✅ | 完整(含 32 层 Layer ID 表、Ghost/MagicWall/PhantomBody 补充矩阵)| +| 58 | SpeedrunModeSystem | 16_SupportingModules **§9** | ✅ | SpeedrunTimer IGT/RTA 已定义 | +| 59 | QATestingFramework | — | 📖 | QA 流程文档 | +| 60-61 | (Lore/Art 等) | — | 📖 | 非技术文档 | +| 62 | Accessibility_System | 16_SupportingModules **§6** | ✅ | AccessibilitySettingsSO(视觉/运动/字幕/输入辅助/音频)/ AccessibilityManager / ColorBlindFilter(URP ScriptableRendererFeature)已完整定义 | +| 63-73 | (Music/UI-Flow 等) | — | 📖 | 非技术文档 | +| 74 | UIScreenFlowDocument | 10_UIModule | ✅ | 流程覆盖 | + +--- + +## 三、设计理念对齐检查(当前状态) + +### ✅ 全部对齐 + +| 设计原则 | 状态 | +|---------|------| +| 零耦合:禁止 `FindObjectOfType`、禁止直接 `GetComponent` 跨 GO | ✅ 所有 Module 使用 SO 事件频道 | +| 数据驱动:所有数值均在 SO 中配置 | ✅ 每个系统均有对应 ConfigSO | +| 对象池:所有运行时 Prefab 通过 `ObjectPoolManager` | ✅ 13_AssetPoolModule 完整定义 | +| Addressables:禁止 `Resources.Load`,使用 `AddressKeys` | ✅ 13_AssetPoolModule 覆盖 | +| Animancer 双层动画 | ✅ 05_PlayerModule §14 | +| 伤害管道:HurtBox → Shield → IDamageable | ✅ 20_ShieldModule 已修正管道 | +| 难度系数穿透:EnemyStats/PlayerStats/Shop 均订阅 EVT_DifficultyChanged | ✅ 19_DifficultyModule 已定义 | +| FSM 完整:SwimState 覆盖液体入水 | ✅ 21_LiquidPuzzleModule 已补充 | +| VFX 落地:HitFxType 有消费者 HitFXSpawner | ✅ 18_VFXFeedbackModule 已定义 | +| 平台抽象:IPlatformService ServiceLocator | ✅ 16_SupportingModules §3 已重构 | + +--- + +## 四、架构文档新增历史 + +| 文件 | 覆盖 Design 文档 | 内容摘要 | +|------|----------------|---------| +| [17_CameraModule.md](17_CameraModule.md) | 02 | CameraStateController、RoomVisibleArea、CameraTriggerZone、CameraConfigSO | +| [18_VFXFeedbackModule.md](18_VFXFeedbackModule.md) | 41、07 | VFXPool、HitFXSpawner、HurtFlashController、VFXCatalogSO、FeedbackConfigSO | +| [19_DifficultyModule.md](19_DifficultyModule.md) | 29 | DifficultyLevel enum、DifficultyScalerSO、DifficultyManager | +| [20_ShieldModule.md](20_ShieldModule.md) | 30 | ShieldComponent、ShieldConfigSO、IShieldable、伤害管道修正 | +| [21_LiquidPuzzleModule.md](21_LiquidPuzzleModule.md) | 40、35、36、45 | LiquidZone、SwimState、PuzzleSwitch/Receiver/Wire、WorldMarker、TutorialManager | +| [22_QuestChallengeModule.md](22_QuestChallengeModule.md) | 38、39 | QuestSO、QuestManager、QuestGiver、ChallengeRoomSO、ChallengeRoomManager | +| [23_BossSkillModule.md](23_BossSkillModule.md) | 47、19 | BossSkillSO、SkillSequenceSO、BossSkillExecutor、WeakPointSystem | +| [24_AnimEventModule.md](24_AnimEventModule.md) | 20 | PlayerAnimationEvents、EnemyAnimationEvents、AnimationEventBinder | + +--- + +## 五、现有文档已应用的 Patch(历史记录) + +| 文件 | 应用内容 | 状态 | +|------|---------|------| +| [05_PlayerModule.md](05_PlayerModule.md) | SwimState 加入 FSM 列表;PlayerController 添加 ShieldComponent 引用 | ✅ 已应用 | +| [06_CombatModule.md](06_CombatModule.md) | ProjectileConfigSO、LinearProjectile、ParryableProjectile;HurtBox 护盾检查步骤 | ✅ 已应用 | +| [07_EnemyModule.md](07_EnemyModule.md) | EnemyBase._lootTable 字段;Die() 调用 LootResolver;§14 LootTableSO/LootResolver/LootPickup | ✅ 已应用 | +| [09_ProgressionModule.md](09_ProgressionModule.md) | §7.5 ToolSlotManager(两槽 + 冷却)+ ToolHUD | ✅ 已应用 | +| [12_SaveModule.md](12_SaveModule.md) | §9 EmergencySaveService + CrashReporter | ✅ 已应用 | +| [04_InputModule.md](04_InputModule.md) | §6 RebindPanel、ConflictDetector、RebindPersistence | ✅ 已应用 | +| [14_NarrativeModule.md](14_NarrativeModule.md) | §7.5 CutsceneSO + CutsceneTrigger | ✅ 已应用 | +| [16_SupportingModules.md](16_SupportingModules.md) | §3 IPlatformService 补全(IncrementStat/GetStat/IsAchievementUnlocked/RichPresence/Rumble/Lifecycle);§6 AccessibilityManager 全面重写(AccessibilitySettingsSO + ColorBlindFilter);**§8** AnalyticsManager;**§9** SpeedrunTimer | ✅ 已应用 | +| [05_PlayerModule.md](05_PlayerModule.md) | §5 PlayerCombat 更新(HitBox 挂角色/RefreshWeaponData/SetComboSegmentSource);§6 FormController 改 CurrentForm→FormSO + C# event;§7 WeaponManager 全面重写(FormSO 驱动/override 词典);WeaponSO 改为纯数据 SO;FormSO.defaultWeapon;WeaponOverrideEffect;§18 FormConfigSO 改为 forms:FormSO[];AttackState 更新连击读取逻辑 | ✅ 已应用 | +| [06_CombatModule.md](06_CombatModule.md) | §12 Layer 矩阵重写(PlayerHitBox/EnemyHitBox 正确命名;完整 32 层 Layer ID 表;Ghost/MagicWall/PhantomBody 补充矩阵) | ✅ 已应用 | +| [03_CoreModule.md](03_CoreModule.md) | §10 初始化序列注释 DifficultyManager 加载顺序与事件广播说明 | ✅ 已应用 | +| [02_EventSystem.md](02_EventSystem.md) | `EVT_AbilityUnlocked` 类型从 `AbilityTypeEventChannelSO` 改为 `StringEventChannelSO`(payload 改为 abilityId string);订阅方补充 `AbilityGate` | ✅ 已应用 | +| [09_ProgressionModule.md](09_ProgressionModule.md) | §2 AbilityGate 重写(StringEventChannelSO、_hintUI、_saveData 注入、OnEnable/OnDisable 订阅、handler 改为 string 参数);§4 EquipmentContext 改 class→struct、字段对齐 Design/17;§5 内置魅力效果全面更新(StatModifierEffect/AttackSpeedEffect/OnHitEffect API 对齐 Design;新增 SoulSpellEffect、SkillSlotOverrideEffect、WeaponOverrideEffect);§6 EquipmentManager 改 TryEquipCharm/UnequipCharm、返回 string|null、_ctx 在 Awake 初始化、添加 CharmEventChannelSO 频道;§15 事件表 EVT_AbilityUnlocked 类型同步 | ✅ 已应用 | +| [10_UIModule.md](10_UIModule.md) | §4 BossHPBar 事件频道从 StringEventChannelSO _onBossFightStarted + BoolEventChannelSO _onBossFightEnded + FloatEventChannelSO _onBossHPRatioChanged 改为 BoolEventChannelSO _onBossFightToggled + IntEventChannelSO _onBossHPChanged + StringEventChannelSO _onBossNameSet + IntEventChannelSO _onBossHPMaxSet;同步底部事件表;EVT_AbilityUnlocked 类型同步 | ✅ 已应用 | +| [11_AudioModule.md](11_AudioModule.md) | §3 BGMController 字段 _onAudioZoneEntered→_onRegionEntered、_currentZoneId→_currentRegion、方法 SwitchZoneBGM→OnRegionEntered;§3.5 状态机图同步;§4 AudioZone _onAudioZoneEntered→_onRegionEntered;事件表 EVT_AudioZoneEntered→EVT_RegionEntered | ✅ 已应用 | +| [14_NarrativeModule.md](14_NarrativeModule.md) | 头部命名空间/路径新增 `BaseGames.EventChain`;**§5 EventChain 完全重写**:Step-based(IEventChainStep/ECS_*/EventChainContext)→ Condition+Action SO 驱动(7 种 ChainCondition + 10 种 ChainAction,含 BossDefeatedCondition/FlagSetCondition/AbilityUnlockedCondition 等);**§6 EventChainManager 完全重写**:路径从 Cutscene/ 改为 EventChain/,字段改为 `EventChainSO[] _chains` + 5 个 StringEventChannelSO,中继 C# 事件供 ChainCondition.Register(),EvaluateAll()+ExecuteChain() 自动评估执行,`_completedChains HashSet` 持久化,`OnChainCompleted` 事件广播;**§6.1** SaveData 集成说明 | ✅ 已应用 | +| [02_EventSystem.md](02_EventSystem.md) | 战斗系统表新增 `EVT_BossFightToggled`(BoolEventChannelSO)、`EVT_BossHPChanged`(IntEventChannelSO)、`EVT_BossNameSet`(StringEventChannelSO)、`EVT_BossHPMaxSet`(IntEventChannelSO)四条 BossHPBar 所需频道;音频系统表 `EVT_AudioZoneEntered`→`EVT_RegionEntered`(对齐 Architecture/11);新增 **§ 事件链/EventChain** 区段(EVT_ChainCompleted / EVT_DoorOpened / EVT_FlagChanged) | ✅ 已应用 | +| [09_ProgressionModule.md](09_ProgressionModule.md) | AbilityType 枚举新增 `AerialDash`(空中冲刺,默认锁定)和 `InvincibleDash`(冲刺全程无敌);§10 SkillModifierRegistry 新增 `GetEffectiveParams(FormSkillSO)→EffectiveSkillParams` 主 API 及 `EffectiveSkillParams` 结构体(含 effectiveCost/effectiveCooldown/damageMult/rangeMult/effectiveFeedback/effectiveAnimation 字段),保留 `GetModifiedValue()` 向后兼容 | ✅ 已应用 | +| [11_AudioModule.md](11_AudioModule.md) | **§9** 脚步声材质分层系统(FootstepMaterial 枚举、FootstepAudioConfigSO、FootstepMaterialMarker、播放时机说明);**§10** 水下音效处理(UnderwaterAudioController、Underwater Snapshot DSP 配置、水下专属 SFX 对照表) | ✅ 已应用 | +| [12_SaveModule.md](12_SaveModule.md) | **§10** SaveValidator 静态类(Result 结构体、HP/Geo/Scene/Version 四项校验规则,SaveAsync 前调用);**§11** IDlcSaveExtension 接口(DlcId/Serialize/Deserialize/MigrateIfNeeded/OnNgPlusReset 五个成员)及 SaveManager 集成(RegisterDlcExtension、SaveAsync/LoadAsync 循环调用) | ✅ 已应用 | +| [14_NarrativeModule.md](14_NarrativeModule.md) | **§7.6** SignalEmitterClip 自定义 PlayableAsset(零耦合 Timeline→SO 事件桥接):SignalEmitterClip(PlayableAsset/ITimelineClipAsset)+ SignalEmitterBehaviour(PlayableBehaviour,含 _fired 防重复机制)及使用场景示例 | ✅ 已应用 | +| [16_SupportingModules.md](16_SupportingModules.md) | **§1.1** LanguageManagerSO(SO 单例,PlayerPrefs 持久化,SetLocale/GetCurrentLocaleCode/LoadSavedLocale 三方法);与静态 LocalizationManager 职责对比说明(文本查询 vs 语言切换+持久化) | ✅ 已应用 | +| [12_SaveModule.md](12_SaveModule.md) | EquipmentSaveData 移除重复工具字段(ToolSlot0/ToolSlot1/OwnedToolIds/ToolStates)——这些字段仅属于 ToolsSaveData(顶层 SaveData.Tools);添加注释说明归属 | ✅ 已应用 | +| [09_ProgressionModule.md](09_ProgressionModule.md) | ToolSlotManager.OnSave() 数据写入路径从 `data.Equipment.ToolSlotX` 修正为 `data.Tools.ToolSlotX`;OnLoad 注释同步为"从 data.Tools 恢复" | ✅ 已应用 | +| [23_BossSkillModule.md](23_BossSkillModule.md) | BossSkillSO 补全 `attackPatterns: AttackPatternSO[]`、`counterResponses: PlayerCounterResponse[]`、`arenaEvents: ArenaEventTrigger[]`、`resourceCost: BossResourceCost`、`buildsRage: bool`、`poiseWindow: PoiseWindowConfig` 六个缺失字段;新增 §4.1 PlayerCounterResponse + CounterType 枚举、§4.2 ArenaEventTrigger/ArenaEventType/ArenaEventParams/ArenaEventData/IArenaInteractable、§4.3 BossResourceCost + BossResourceConfigSO 定义 | ✅ 已应用 | +| [16_SupportingModules.md](16_SupportingModules.md) | §2 AchievementManager 完全重写(对齐 Design/32 SO 策略模式):AchievementDef/AchievementDatabaseSO 替换为 AchievementSO + AchievementType/AchievementTier 枚举 + AchievementCondition 抽象基类(RegisterListeners/UnregisterListeners/IsMet)+ 内置 12 种条件类型表 + DefeatedBossCondition 示例 + AchievementManager(_allAchievements: AchievementSO[],中继 C# 事件,EvaluateAll/Unlock)+ AchievementRuntimeState | ✅ 已应用 | +| [24_AnimEventModule.md](24_AnimEventModule.md) | `IAnimEventReceiver` 重命名为 `IAnimationEventHandler`;方法签名 `OnAnimationEvent(type, data)` 改为 `HandleEvent(type, payload)`;AnimationEventBinder.Bind() 参数类型、PlayerAnimationEvents/EnemyAnimationEvents 实现声明及方法体内 payload 用法全部同步 | ✅ 已应用 | +| [16_SupportingModules.md](16_SupportingModules.md) | §5 AntiSoftlockSystem 后新增 §5.1 RoomEscapeInfoSO(设计时房间逃离 SO,含 EscapeRoute 嵌套类,对齐 Design/49 §3)+ §5.2 HardAbilityGate(AbilityGate 子类,_requirePhysicalValidation + _sequenceBreakRisk,对齐 Design/49 §4.2) | ✅ 已应用 | +| [13_AssetPoolModule.md](13_AssetPoolModule.md) | AddressKeys 常量从下划线分隔(`Scene_Persistent`/`Pfx_Enemy_Grunt`/`Label_Enemy` 等)改为驼峰式无下划线(`ScenePersistent`/`PrefabEnemyGrunt`/`LabelEnemy` 等),对齐 Design/43 §8 命名规范;`ScenePersistent` 值修正 `"Persistent"` → `"Scene_Persistent"`;`ObjectPoolManager` 类全部重命名为 `GlobalObjectPool`(类名/Instance/PooledObject.Setup 参数/内部 _pool 字段/文件路径注释均更新) | ✅ 已应用 | +| [14_NarrativeModule.md](14_NarrativeModule.md) | §1 IInteractable 命名空间从 `BaseGames.Dialogue` 修正为 `BaseGames.World`,文件路径从 `Dialogue/` 改为 `World/`;新增 §2 InteractionPromptController(提示图标组件,Show/Hide/图标切换);DialogueLineSO 段补加 §3 标题;§4 DialogueManager 重编号(原§3);新增 §5 DialogueUI(ShowLine/SkipTyping/Hide + StringBuilder 打字机零分配实现);§6 InteractableNPC 重编号并添加 `Interact_Internal`/`GetCurrentDialogue` 虚方法;新增 §7 NarrativeNPC(DialogueVersion[],CheckConditions 条件对话)+ DialogueVersion 结构体;新增 §8 WorldStateRegistry(SO 形式,HashSet 存储,SetFlag/HasFlag/LoadFromSave/GetAllFlags);EventChain/EventChainManager 等段落重编号为 §9-12;CutsceneTrigger 修正:改用 `[SerializeField] WorldStateRegistry _worldState` SO 注入,将 `WorldStateRegistry.Instance.IsFlagSet` 替换为 `_worldState.HasFlag`,将 `SetFlag(..., true)` 改为单参数 `SetFlag(...)` | ✅ 已应用 | +| [20_ShieldModule.md](20_ShieldModule.md) | `IShieldable.AbsorbDamage` 签名从 `void AbsorbDamage(ref DamageInfo info)` 改为 `int AbsorbDamage(int incomingDamage)`(返回穿透伤害剩余量,对齐 Design/30 §2.3);ShieldComponent 实现同步(移除 ref 参数,return passThrough,注释更新);HurtBox 调用方式更新:`_shieldable.AbsorbDamage(info.Amount)` 取返回值再 TakeDamage | ✅ 已应用 | +| [21_LiquidPuzzleModule.md](21_LiquidPuzzleModule.md) | PuzzleWire 中 `WireLogic` 枚举重命名为 `LogicType`(对齐 Design/35);字段 `_logic: WireLogic` 更新为 `_logic: LogicType`;switch case 常量同步 | ✅ 已应用 | +| [22_QuestChallengeModule.md](22_QuestChallengeModule.md) | §3 QuestObjectiveSO 从单类+ObjectiveType 枚举重写为多态体系(抽象基类 + TalkToNPCObjective/DefeatEnemyObjective/CollectItemObjective/ReachAreaObjective/UseSkillObjective 五个子类,对齐 Design/38 §3);QuestManager.IsObjectiveComplete 改用 `obj.EvaluateCompletion(state)` 多态调用;§6 QuestGiver 从 `[RequireComponent] MonoBehaviour` 改为 `QuestGiver : InteractableNPC`(继承方式),字段改为 `QuestSO[] _offeredQuests` 数组,通过 `override Interact_Internal`+`override GetCurrentDialogue` 实现任务接受/完成和对话切换(对齐 Design/38 §5) | ✅ 已应用 | +| [08_WorldModule.md](08_WorldModule.md) | §7 IInteractable 命名空间从 `BaseGames.Dialogue` 修正为 `BaseGames.World`,文件路径注释从 `Assets/Scripts/Dialogue/IInteractable.cs(位于 Dialogue 命名空间,World 引用它)` 改为 `Assets/Scripts/World/IInteractable.cs`(对齐 Architecture/14 §1 权威定义) | ✅ 已应用 | +| [04_InputModule.md](04_InputModule.md) | §4 InputBuffer 从单一 `_bufferTime = 0.15f` 改为三个独立缓冲时长字段(`_jumpBufferDuration=0.15f`/`_attackBufferDuration=0.12f`/`_dashBufferDuration=0.10f`),对齐 Design/01 §4 缓冲时长配置表;注释补充弹反/UseSpring/SpiritSkill 不缓冲说明;OnEnable/OnDisable 订阅改用各自独立时长字段 | ✅ 已应用 | +| [06_CombatModule.md](06_CombatModule.md) | §5 HurtBox ReceiveDamage 步骤 4 护盾拦截:移除旧 `_shieldable.AbsorbDamage(ref info)` + `return` 模式,改为 `int passThrough = _shieldable.AbsorbDamage(info.Amount)`,passThrough ≤ 0 时 return,否则将穿透量赋回 `info.Amount` 继续走后续防御减免→TakeDamage 流程(对齐 Architecture/20 IShieldable 新签名) | ✅ 已应用 | +| [07_EnemyModule.md](07_EnemyModule.md) | §1 EnemyBase 新增 `public virtual void Knockback(DamageInfo info)` 方法(检查 DamageFlags.NoKnockback,调用 `_movement.ApplyKnockback`,对齐 Design/06 §2 方法表);§6 EnemyStatsSO `[Header("Attack")]` 后新增 `[Range(0f,1f)] public float StaggerResistance = 0f` 字段(0=正常硬直,1=完全免疫,对齐 Design/06 §3 属性表) | ✅ 已应用 | +| [01_ProjectStructure.md](01_ProjectStructure.md) | §5 AddressKeys 类常量名从下划线分隔(`Pfx_Player_Main`/`Pfx_UI_HUD`/`Pfx_VFX_HitSpark` 等)全部改为驼峰式(`PrefabPlayer`/`PrefabUIHUD`/`PrefabVFXHitSpark` 等),命名规范注释同步;§6 推荐模式代码示例 `AddressKeys.Pfx_Player_Main` 改为 `AddressKeys.PrefabPlayer`,`ObjectPoolManager.Instance.Spawn` 改为 `GlobalObjectPool.Instance.Spawn`,常量引用同步 | ✅ 已应用 | +| [18_VFXFeedbackModule.md](18_VFXFeedbackModule.md) | 头部依赖说明 `BaseGames.Core(ObjectPoolManager)` 改为 `BaseGames.Core(GlobalObjectPool)`,对齐 Architecture/13 全局对象池命名 | ✅ 已应用 | +| [05_PlayerModule.md](05_PlayerModule.md) | §1 设计原则从「HitBox 不挂载在 Player Prefab 本体上 / 独立武器 Prefab」改为「HitBox 固定挂载于 Player Prefab / PlayerCombat 管理四向 HitBox / WeaponSO 纯数据驱动」,对齐 §5 PlayerCombat 及 §7 WeaponManager 的实际实现(注释一致性修正) | ✅ 已应用 | +| [06_CombatModule.md](06_CombatModule.md) | §1 DamageInfo 结构体字段:移除所有 `readonly` 关键字(Builder 类需从外部为 `_d` 的字段赋值,C# 禁止为 class 内嵌 struct 的 readonly 字段赋值);注释改为「Builder 工具类负责逐字段构建,Amount/FinalDamage 在 HurtBox 流水线内可就地修改(局部变量)」,确保代码可编译 | ✅ 已应用 | +| [02_EventSystem.md](02_EventSystem.md) | 末尾新增 §7 EventChannelRegistry(全文定义:MonoBehaviour 单例,Dictionary 注册表,Register/Get 两方法,DontDestroyOnLoad,注册时机说明);对齐 Architecture/09 §4 EquipmentContext.Events 字段及 EquipmentManager.Awake() 的 `EventChannelRegistry.Instance` 调用 | ✅ 已应用 | diff --git a/Docs/Architecture/01_ProjectStructure.md b/Docs/Architecture/01_ProjectStructure.md new file mode 100644 index 0000000..cb57cfe --- /dev/null +++ b/Docs/Architecture/01_ProjectStructure.md @@ -0,0 +1,473 @@ +# 01 · 项目结构与规范 + +> **作用**:定义文件夹布局、Assembly Definition 清单、命名规范、ScriptableObject 资产路径、代码风格约束。 +> **所有程序员必读**,开始任何模块开发前先阅读本文档。 + +--- + +## 目录 + +1. [文件夹布局](#1-文件夹布局) +2. [Assembly Definitions(asmdef)](#2-assembly-definitions) +3. [命名规范](#3-命名规范) +4. [ScriptableObject 资产组织](#4-scriptableobject-资产组织) +5. [Addressables 资产组织](#5-addressables-资产组织) +6. [代码风格约束](#6-代码风格约束) +7. [Prefab 组织规范](#7-prefab-组织规范) +8. [场景组织规范](#8-场景组织规范) + +--- + +## 1. 文件夹布局 + +``` +Assets/ +├── Scripts/ ← 所有游戏代码(按模块分文件夹) +│ ├── Core/ BaseGames.Core + BaseGames.Core.Events +│ │ ├── Events/ SO 事件频道类型 +│ │ └── Save/ SaveManager + ISaveStorage + SaveData +│ ├── Input/ BaseGames.Input +│ ├── Camera/ BaseGames.Camera +│ ├── Player/ BaseGames.Player +│ │ └── States/ BaseGames.Player.States +│ ├── Combat/ BaseGames.Combat +│ │ └── StatusEffects/ BaseGames.Combat.StatusEffects +│ ├── Parry/ BaseGames.Parry +│ ├── Enemies/ BaseGames.Enemies +│ │ ├── AI/ BaseGames.Enemies.AI(Behavior Designer Tasks) +│ │ ├── Boss/ +│ │ │ └── Patterns/ BaseGames.Enemies.Boss.Patterns +│ │ └── Navigation/ BaseGames.Enemies.Navigation +│ ├── Feedback/ BaseGames.Feedback +│ ├── World/ BaseGames.World +│ │ ├── Map/ BaseGames.World.Map +│ │ └── Shop/ BaseGames.World.Shop +│ ├── UI/ BaseGames.UI +│ ├── Audio/ BaseGames.Audio +│ ├── Progression/ BaseGames.Progression +│ ├── Dialogue/ BaseGames.Dialogue +│ ├── Equipment/ BaseGames.Equipment +│ ├── Cutscene/ BaseGames.Cutscene +│ ├── Animation/ BaseGames.Animation +│ ├── Spells/ BaseGames.Spells +│ ├── Localization/ BaseGames.Localization +│ ├── Tutorial/ BaseGames.Tutorial +│ ├── Platform/ BaseGames.Platform +│ └── Editor/ BaseGames.Editor(Editor Only) +│ +├── Data/ ← ScriptableObject 资产(按模块分文件夹) +│ ├── Events/ 所有事件频道 SO +│ ├── Player/ PlayerStatsSO、PlayerMovementConfigSO 等 +│ ├── Combat/ WeaponSO、ProjectileConfigSO 等 +│ ├── Enemies/ EnemyStatsSO、AttackPatternSO 等 +│ ├── Progression/ SkillSO、CharmSO、AbilityConfigSO 等 +│ ├── Audio/ AudioCueSO、BGMPlaylistSO 等 +│ ├── World/ MapRoomDataSO、ShopInventorySO 等 +│ ├── UI/ UIConfigSO 等 +│ └── Settings/ GlobalSettingsSO +│ +├── Prefabs/ ← 预制体 +│ ├── Player/ +│ ├── Enemies/ +│ ├── World/ +│ ├── UI/ +│ ├── Combat/ HitBox、HurtBox、Projectile 等 +│ ├── Effects/ VFX Prefabs +│ └── Persistent/ Persistent 场景专用 Prefabs +│ +├── Scenes/ +│ ├── Persistent.unity 常驻场景 +│ ├── MainMenu.unity +│ ├── Room_*/ 各关卡房间场景 +│ └── Boss_*/ Boss 战场景 +│ +├── Art/ 美术资源(不在此文档范围) +├── Audio/ 音频资源(FMOD 项目) +└── StreamingAssets/ FMOD 音频包等 +``` + +--- + +## 2. Assembly Definitions + +所有 asmdef 均位于对应的 `Scripts/` 子文件夹下,文件名与程序集名称一致。 + +### 依赖层次(底层 → 上层) + +``` +BaseGames.Core.Events + └─→ BaseGames.Core + ├─→ BaseGames.Input + ├─→ BaseGames.Camera + ├─→ BaseGames.Audio + ├─→ BaseGames.Localization + ├─→ BaseGames.Platform + ├─→ BaseGames.World + │ └─→ BaseGames.World.Map + │ └─→ BaseGames.World.Shop + └─→ BaseGames.Combat + ├─→ BaseGames.Parry + ├─→ BaseGames.Combat.StatusEffects + └─→ BaseGames.Player + ├─→ BaseGames.Player.States + ├─→ BaseGames.Progression + ├─→ BaseGames.Equipment + ├─→ BaseGames.Spells + └─→ BaseGames.Enemies + ├─→ BaseGames.Enemies.AI + ├─→ BaseGames.Enemies.Navigation + └─→ BaseGames.Enemies.Boss.Patterns + +BaseGames.Feedback(依赖:Core.Events、Player、Enemies) +BaseGames.Animation(依赖:Core.Events、Player) +BaseGames.UI(依赖:Core.Events、Core、Progression) +BaseGames.Dialogue(依赖:Core.Events、UI) +BaseGames.Cutscene(依赖:Core.Events、UI、Dialogue) +BaseGames.Tutorial(依赖:Core.Events、Progression) +BaseGames.Editor(Editor Only,依赖全部运行时程序集) +``` + +### asmdef 文件清单 + +| 文件名 | 程序集名称 | 编辑器 | 关键外部引用 | +|--------|----------|--------|------------| +| `BaseGames.Core.Events.asmdef` | `BaseGames.Core.Events` | ✗ | — | +| `BaseGames.Core.asmdef` | `BaseGames.Core` | ✗ | `Newtonsoft.Json` | +| `BaseGames.Input.asmdef` | `BaseGames.Input` | ✗ | `Unity.InputSystem` | +| `BaseGames.Camera.asmdef` | `BaseGames.Camera` | ✗ | `Cinemachine` | +| `BaseGames.Audio.asmdef` | `BaseGames.Audio` | ✗ | `FMODUnity`(可选) | +| `BaseGames.Localization.asmdef` | `BaseGames.Localization` | ✗ | `Unity.Localization` | +| `BaseGames.Platform.asmdef` | `BaseGames.Platform` | ✗ | `Steamworks.NET`(条件编译) | +| `BaseGames.Combat.asmdef` | `BaseGames.Combat` | ✗ | — | +| `BaseGames.Combat.StatusEffects.asmdef` | `BaseGames.Combat.StatusEffects` | ✗ | — | +| `BaseGames.Parry.asmdef` | `BaseGames.Parry` | ✗ | — | +| `BaseGames.World.asmdef` | `BaseGames.World` | ✗ | — | +| `BaseGames.World.Map.asmdef` | `BaseGames.World.Map` | ✗ | — | +| `BaseGames.World.Shop.asmdef` | `BaseGames.World.Shop` | ✗ | — | +| `BaseGames.Player.asmdef` | `BaseGames.Player` | ✗ | `Kybernetik.Animancer` | +| `BaseGames.Player.States.asmdef` | `BaseGames.Player.States` | ✗ | `Kybernetik.Animancer` | +| `BaseGames.Progression.asmdef` | `BaseGames.Progression` | ✗ | — | +| `BaseGames.Equipment.asmdef` | `BaseGames.Equipment` | ✗ | — | +| `BaseGames.Spells.asmdef` | `BaseGames.Spells` | ✗ | — | +| `BaseGames.Enemies.asmdef` | `BaseGames.Enemies` | ✗ | `Kybernetik.Animancer` | +| `BaseGames.Enemies.AI.asmdef` | `BaseGames.Enemies.AI` | ✗ | `BehaviorDesigner.Runtime` | +| `BaseGames.Enemies.Navigation.asmdef` | `BaseGames.Enemies.Navigation` | ✗ | `PathBerserker2d` | +| `BaseGames.Enemies.Boss.Patterns.asmdef` | `BaseGames.Enemies.Boss.Patterns` | ✗ | — | +| `BaseGames.Feedback.asmdef` | `BaseGames.Feedback` | ✗ | `MoreMountains.Tools`, `MoreMountains.Feedbacks` | +| `BaseGames.Animation.asmdef` | `BaseGames.Animation` | ✗ | `Kybernetik.Animancer` | +| `BaseGames.UI.asmdef` | `BaseGames.UI` | ✗ | — | +| `BaseGames.Dialogue.asmdef` | `BaseGames.Dialogue` | ✗ | `Unity.Localization` | +| `BaseGames.Cutscene.asmdef` | `BaseGames.Cutscene` | ✗ | `Unity.Timeline` | +| `BaseGames.Tutorial.asmdef` | `BaseGames.Tutorial` | ✗ | — | +| `BaseGames.Editor.asmdef` | `BaseGames.Editor` | ✓ | 所有运行时程序集 | + +--- + +## 3. 命名规范 + +### 类型名称 + +| 类型 | 后缀 / 规则 | 示例 | +|------|-----------|------| +| MonoBehaviour 组件 | 无后缀 | `PlayerController`、`EnemyBase` | +| ScriptableObject | `SO` 后缀 | `PlayerStatsSO`、`ShopItemSO` | +| 事件频道 SO | `EventChannelSO` 后缀 | `VoidEventChannelSO`、`IntEventChannelSO` | +| 接口 | `I` 前缀 | `ISaveable`、`IInteractable`、`ICharmEffect` | +| 枚举 | PascalCase 无后缀 | `GameState`、`AbilityType`、`DamageType` | +| 泛型基类 | `Base` 后缀 | `PlayerStateBase`、`EnemyStateBase` | +| Editor 扩展 | `Editor` 后缀 | `PlayerControllerEditor`、`EnemyBaseEditor` | +| 协程方法 | `Coroutine` 后缀 | `LoadSceneCoroutine()`、`DeathSequenceCoroutine()` | + +### 字段命名 + +```csharp +// 私有序列化字段:_camelCase(下划线前缀) +[SerializeField] private PlayerMovementConfigSO _movementConfig; + +// 私有非序列化字段:_camelCase +private float _currentSpeed; + +// 属性:PascalCase +public float CurrentSpeed => _currentSpeed; + +// 常量:ALL_CAPS +private const float MAX_SPEED = 10f; + +// 局部变量:camelCase +float deltaSpeed = targetSpeed - _currentSpeed; +``` + +### 文件命名 + +| 类型 | 规则 | 示例 | +|------|------|------| +| C# 脚本 | 与类名完全一致 | `PlayerController.cs` | +| SO 资产 | `[SystemPrefix]_[Name]` | `PLY_Stats_Default.asset`、`EVT_PlayerDied.asset` | +| Prefab | `[SystemPrefix]_[Name]` | `PLY_Player.prefab`、`ENM_GruntWarrior.prefab` | +| 场景 | `Room_{Region}_{Index:D2}` | `Room_Forest_01.unity` | +| asmdef | 与程序集名称一致 | `BaseGames.Player.asmdef` | + +### SO 资产前缀表 + +| 前缀 | 系统 | +|------|------| +| `EVT_` | 事件频道 | +| `PLY_` | 玩家配置 | +| `CMB_` | 战斗配置 | +| `ENM_` | 敌人配置 | +| `WPN_` | 武器配置 | +| `SKL_` | 技能 / 法术 | +| `CHM_` | 护身符 | +| `SHP_` | 商店 | +| `MAP_` | 地图 | +| `AUD_` | 音频 | +| `UI_` | UI 配置 | +| `SET_` | 设置 | + +--- + +## 4. ScriptableObject 资产组织 + +### 目录结构(`Assets/Data/`) + +``` +Assets/Data/ +├── Events/ +│ ├── Core/ EVT_GameStateChanged.asset, EVT_SceneLoadRequest.asset … +│ ├── Player/ EVT_PlayerDied.asset, EVT_HPChanged.asset … +│ ├── Combat/ EVT_DamageDealt.asset … +│ ├── World/ EVT_RoomTransition.asset … +│ └── UI/ EVT_ShowPanel.asset … +├── Player/ +│ ├── PLY_Stats_Default.asset +│ ├── PLY_MovementConfig.asset +│ ├── PLY_AnimConfig.asset +│ └── PLY_FormConfig.asset +├── Combat/ +│ ├── CMB_WeaponBase.asset +│ └── CMB_ProjectileConfig_*.asset +├── Enemies/ +│ ├── ENM_Stats_*.asset +│ └── ENM_AttackPattern_*.asset +├── Progression/ +│ ├── SKL_SoulSpell_*.asset +│ ├── CHM_Charm_*.asset +│ └── ABL_AbilityConfig_*.asset +├── Audio/ +│ ├── AUD_BGMPlaylist_*.asset +│ └── AUD_SFXCue_*.asset +├── World/ +│ ├── MAP_RoomData_*.asset +│ └── SHP_ShopInventory_*.asset +└── Settings/ + └── SET_GlobalSettings.asset +``` + +--- + +## 5. Addressables 资产组织 + +### AddressKeys 静态类(路径:`Scripts/Core/AddressKeys.cs`) + +```csharp +// 路径: Assets/Scripts/Core/Assets/AddressKeys.cs +// ⚠️ 命名规范:驼峰式,无下划线分隔(`PrefabPlayer` 不是 `Pfx_Player_Main`) +// 地址值与 Addressables Groups 窗口 Address 列保持完全一致 +namespace BaseGames.Core +{ + public static class AddressKeys + { + // ── Scenes ────────────────────────────────────────────── + public const string ScenePersistent = "Scene_Persistent"; + public const string SceneMainMenu = "Scene_MainMenu"; + public const string SceneRoomPrefix = "Room_"; + public const string SceneBossPrefix = "Boss_"; + + // ── Player ────────────────────────────────────────────── + public const string PrefabPlayer = "PLY_Player"; + + // ── UI ────────────────────────────────────────────────── + public const string PrefabUIHUD = "UI_HUD"; + public const string PrefabUIPauseMenu = "UI_PauseMenu"; + public const string PrefabUIDeathScreen = "UI_DeathScreen"; + public const string PrefabUILoadingScreen = "UI_LoadingScreen"; + + // ── VFX ───────────────────────────────────────────────── + public const string PrefabVFXHitSpark = "VFX_HitSpark"; + public const string PrefabVFXDeathBurst = "VFX_DeathBurst"; + public const string PrefabVFXParryFlash = "VFX_ParryFlash"; + + // ── Audio ──────────────────────────────────────────────── + public const string PrefabAudioMasterMixer = "MasterMixer"; + + // ── Labels(用于 Addressables.LoadAssetsAsync 批量加载)─── + public const string LabelEnemy = "Enemy"; + public const string LabelPoolable = "Poolable"; + public const string LabelBGM = "BGM"; + public const string LabelCharms = "Charms"; + } +} +``` + +> **完整 `AddressKeys` 定义见 `13_AssetPoolModule.md §2`**,本节仅展示命名约定示例。 + +### Addressables 分组策略 + +| 组名 | 内容 | 加载时机 | +|------|------|---------| +| `DefaultLocalGroup` | 常驻资源(GameManager Prefab、HUD 等) | 启动时预加载 | +| `Room_{Region}` | 各区域房间所有资产 | 进入区域时加载 | +| `Boss_{Name}` | Boss 战专属资产 | Boss 战开始前加载 | +| `UI` | 所有 UI Prefab | 启动时预加载 | +| `VFX_Common` | 通用特效 | 启动时预加载 | +| `Audio_Music` | BGM(FMOD 包) | 按需加载 | + +--- + +## 6. 代码风格约束 + +### 禁止模式 + +```csharp +// ❌ 禁止:FindObjectOfType +var player = FindObjectOfType(); + +// ❌ 禁止:跨 GameObject GetComponent(组件不在同一 Prefab 内) +var stats = otherGO.GetComponent(); + +// ❌ 禁止:静态单例暴露子系统 +public static AudioManager Instance { get; private set; } // 禁止全局访问 + +// ❌ 禁止:Resources.Load +var sprite = Resources.Load("Enemies/goblin"); + +// ❌ 禁止:跨系统 Inspector 序列化引用 +[SerializeField] private PlayerController _player; // 在 EnemyBase 中引用玩家 ❌ + +// ❌ 禁止:硬编码 Addressable 字符串 +var handle = Addressables.LoadAsset("PLY_Player"); // ❌ 用 AddressKeys 常量 +``` + +### 推荐模式 + +```csharp +// ✅ SO 事件频道(跨模块通信) +[SerializeField] private VoidEventChannelSO _onPlayerDied; +private void OnEnable() => _onPlayerDied.OnEventRaised += HandlePlayerDied; +private void OnDisable() => _onPlayerDied.OnEventRaised -= HandlePlayerDied; + +// ✅ Inspector 序列化(同 Prefab 内) +[SerializeField] private PlayerMovement _movement; // 在 PlayerController 中 ✅ + +// ✅ Addressables 加载 +Addressables.InstantiateAsync(AddressKeys.PrefabPlayer).Completed += OnPlayerLoaded; + +// ✅ 对象池 +GlobalObjectPool.Instance.Spawn(AddressKeys.PrefabVFXHitSpark, position, rotation); +``` + +### OnEnable / OnDisable 规则 + +每个订阅 SO 事件频道的组件**必须**在 `OnDisable` 中取消订阅,防止内存泄漏: + +```csharp +private void OnEnable() +{ + _channel.OnEventRaised += HandleEvent; +} + +private void OnDisable() +{ + _channel.OnEventRaised -= HandleEvent; +} +``` + +--- + +## 7. Prefab 组织规范 + +### Player Prefab 层级 + +``` +[PLY_Player] ← PlayerController(协调器) +├── PlayerMovement ← Rigidbody2D 封装 +├── PlayerStats ← 属性容器 +├── PlayerCombat ← 攻击逻辑 +├── FormController ← 形态管理 +├── WeaponManager ← 武器切换 +├── SkillManager ← 技能执行 +├── SpringSystem ← 灵泉管理 +├── ParrySystem ← 弹反逻辑 +├── AnimancerComponent ← Animancer 入口 +├── PlayerFeedback ← MMF_Player +├── HurtBox ← Composite Collider 受击区域 +├── HitBox_Ground ← BoxCollider2D 地面攻击判定 +├── HitBox_Up ← BoxCollider2D 上劈判定 +├── HitBox_Down ← BoxCollider2D 下劈判定 +├── HitBox_Air ← BoxCollider2D 空中判定 +└── SpriteRenderer +``` + +### Enemy Prefab 通用层级 + +``` +[ENM_{EnemyName}] ← EnemyBase(协调器)+ BehaviorTree +├── EnemyMovement ← PathBerserker2d EnemyNavAgent 封装 +├── EnemyStats ← HP/攻击等属性 +├── EnemyCombat ← HitBox 管理 +├── AnimancerComponent ← 动画 +├── EnemyFeedback ← MMF_Player +├── HurtBox ← 受击区域 +└── HitBox_{N} ← 各攻击 HitBox +``` + +--- + +## 8. 场景组织规范 + +### 场景文件命名 + +``` +Persistent ← 常驻场景(GameManager、AudioManager 等单例) +MainMenu ← 主菜单 +Room_{Region}_{Index:D2} ← 关卡房间 例: Room_Forest_01 +Boss_{Region} ← Boss 战 例: Boss_Forest +Hub_Town ← 区域枢纽 例: Hub_RestCamp +``` + +### 房间场景层级结构 + +``` +Scene: Room_{Region}_{Index} +├── [Level] +│ ├── Tilemap_Ground +│ ├── Tilemap_Background +│ ├── Tilemap_Foreground +│ ├── Tilemap_OneWay +│ └── Tilemap_Destructible +├── [NavMesh] +│ ├── NavSurface +│ └── NavLink_{N} +├── [Enemies] +│ └── Enemy_*(Prefab 实例) +├── [World] +│ ├── RoomTransition_{Direction} +│ ├── SavePoint(可选) +│ └── Collectible_* +├── [Camera] +│ ├── CinemachineVirtualCamera +│ └── CameraConfiner(PolygonCollider2D) +└── [Lighting] + └── GlobalLight2D +``` + +### Persistent 场景组织 + +``` +Scene: Persistent +├── GameManager ← DontDestroyOnLoad 协调器 +├── AudioManager ← FMOD 封装 +├── ObjectPoolManager ← 对象池 +├── SettingsManager ← 设置管理 +└── InputReader ← InputReaderSO(持久化) +``` diff --git a/Docs/Architecture/02_EventSystem.md b/Docs/Architecture/02_EventSystem.md new file mode 100644 index 0000000..4b52d59 --- /dev/null +++ b/Docs/Architecture/02_EventSystem.md @@ -0,0 +1,797 @@ +# 02 · SO 事件系统 + +> **命名空间** `BaseGames.Core.Events` +> **程序集** `BaseGames.Core.Events`(无任何运行时依赖,最底层) +> **路径** `Assets/Scripts/Core/Events/` + +--- + +## 目录 + +1. [设计原则](#1-设计原则) +2. [泛型事件频道基类](#2-泛型事件频道基类) +3. [所有事件频道类型](#3-所有事件频道类型) +4. [全局事件频道 SO 资产清单](#4-全局事件频道-so-资产清单) +5. [发布 / 订阅模式](#5-发布--订阅模式) +6. [MMEventManager(备用广播)](#6-mmeventmanager) +7. [EventChannelRegistry](#7-eventchannelregistry) +8. [事件订阅生命周期管理 — 自动注销机制](#8-事件订阅生命周期管理--自动注销机制) +9. [EventBusMonitorWindow — 运行时事件监控面板](#9-eventbusmonitorwindow--运行时事件监控面板) + +--- + +## 1. 设计原则 + +- 每个事件频道是一个 **ScriptableObject**,在 `Assets/Data/Events/` 下预建资产,Inspector 拖拽引用 +- 发布者和订阅者**只持有频道 SO 的引用**,彼此完全不知道对方的存在 +- 事件频道**不存储状态**;仅在 `Raise()` 调用时执行 C# Action 委托链 +- **禁止在代码中 `new` 出事件频道**;必须使用预建的 `.asset` 资产 +- 所有频道订阅在 `OnEnable` 注册,在 `OnDisable` 取消注册 + +--- + +## 2. 泛型事件频道基类 + +### 文件:`Assets/Scripts/Core/Events/BaseEventChannelSO.cs` + +```csharp +using System; +using UnityEngine; + +namespace BaseGames.Core.Events +{ + /// + /// 泛型 SO 事件频道基类。T 为负载类型。 + /// + public abstract class BaseEventChannelSO : ScriptableObject + { + // Editor 备注(Inspector 可见) + [Multiline] public string description; + + public event Action OnEventRaised; + + /// + /// 发布事件,执行所有订阅委托。 + /// + public void Raise(T value) + { + OnEventRaised?.Invoke(value); + } + } + + /// + /// 无负载事件频道基类。 + /// + public abstract class VoidBaseEventChannelSO : ScriptableObject + { + [Multiline] public string description; + + public event Action OnEventRaised; + + public void Raise() + { + OnEventRaised?.Invoke(); +#if UNITY_EDITOR + EventBusMonitor.Record(name, "", + OnEventRaised?.GetInvocationList().Length ?? 0); +#endif + } + } +} +``` + +--- + +## 3. 所有事件频道类型 + +### 基础类型频道 + +```csharp +// Assets/Scripts/Core/Events/VoidEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/Void")] +public class VoidEventChannelSO : VoidBaseEventChannelSO { } + +// Assets/Scripts/Core/Events/BoolEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/Bool")] +public class BoolEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/IntEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/Int")] +public class IntEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/FloatEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/Float")] +public class FloatEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/StringEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/String")] +public class StringEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/Vector2EventChannelSO.cs +[CreateAssetMenu(menuName = "Events/Vector2")] +public class Vector2EventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/TransformEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/Transform")] +public class TransformEventChannelSO : BaseEventChannelSO { } +``` + +### 游戏专用负载频道 + +```csharp +// Assets/Scripts/Core/Events/GameStateEventChannelSO.cs +// ⚠️ payload 类型为 GameStateId(值类型 struct),非旧 GameState 枚举 +[CreateAssetMenu(menuName = "Events/GameState")] +public class GameStateEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/SceneLoadRequestEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/SceneLoadRequest")] +public class SceneLoadRequestEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/DamageInfoEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/DamageInfo")] +public class DamageInfoEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/ShopPurchaseEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/ShopPurchase")] +public class ShopPurchaseEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/DialogueEventChannelSO.cs +[CreateAssetMenu(menuName = "Events/DialogueRequest")] +public class DialogueEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/BossSkillEventChannelSO.cs +[System.Serializable] +public struct BossSkillEvent { public string BossId; public string SkillId; } +[CreateAssetMenu(menuName = "Events/BossSkill")] +public class BossSkillEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/BossPhaseEventChannelSO.cs +[System.Serializable] +public struct BossPhaseEvent { public string BossId; public int Phase; } +[CreateAssetMenu(menuName = "Events/BossPhase")] +public class BossPhaseEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/AbilityTypeEventChannelSO.cs +// AbilityType 定义于 09_ProgressionModule §1(enum AbilityType) +[CreateAssetMenu(menuName = "Events/AbilityType")] +public class AbilityTypeEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/HitConfirmedEventChannelSO.cs +[System.Serializable] +public struct HitInfo { public DamageInfo DamageInfo; public Vector3 HitPoint; } +[CreateAssetMenu(menuName = "Events/HitConfirmed")] +public class HitConfirmedEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/ColorblindModeEventChannelSO.cs +// ColorblindMode 枚举定义于 16_SupportingModules §AccessibilityManager +[CreateAssetMenu(menuName = "Events/ColorblindMode")] +public class ColorblindModeEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/DifficultyChangedEventChannel.cs +// ⚠️ 命名按 Architecture 19 约定:不加 "SO" 后缀(与其他频道类有意区分以标识自定义 payload) +// DifficultyScalerSO 定义于 19_DifficultyModule §3 +[CreateAssetMenu(menuName = "Events/DifficultyChanged")] +public class DifficultyChangedEventChannel : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/LiquidEventChannelSO.cs +// LiquidZone 定义于 21_LiquidPuzzleModule §4 +[CreateAssetMenu(menuName = "Events/LiquidZone")] +public class LiquidEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/WorldMarkerEventChannelSO.cs +// WorldMarker 定义于 21_LiquidPuzzleModule §14 +[CreateAssetMenu(menuName = "Events/WorldMarker")] +public class WorldMarkerEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/QuestStateChangedEventChannel.cs +// QuestState 枚举定义于 22_QuestChallengeModule §QuestSO +[System.Serializable] +public struct QuestStateChangedEvent { public string QuestId; public QuestState State; } +[CreateAssetMenu(menuName = "Events/QuestStateChanged")] +public class QuestStateChangedEventChannel : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/QuestObjectiveEventChannelSO.cs +// 任务目标进度频道(用于 QuestManager 逐目标通知订阅者) +[System.Serializable] +public struct QuestObjectiveEvent { public string QuestId; public string ObjectiveId; public int Progress; public int Required; } +[CreateAssetMenu(menuName = "Events/QuestObjective")] +public class QuestObjectiveEventChannelSO : BaseEventChannelSO { } + +// Assets/Scripts/Core/Events/StatusEffectEventChannelSO.cs +// 状态效果频道(StatusEffectManager 施加/过期时广播;StatusEffectType 定义于 06_CombatModule §11) +[CreateAssetMenu(menuName = "Events/StatusEffect")] +public class StatusEffectEventChannelSO : BaseEventChannelSO { } +``` + +--- + +## 4. 全局事件频道 SO 资产清单 + +所有频道资产预建于 `Assets/Data/Events/`,资产文件名格式:`EVT_{描述}.asset` + +### Core 系统 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_GameStateChanged` | `GameStateEventChannelSO` | `GameManager` | `UIManager`、`AudioManager`、`InputManager` | +| `EVT_SceneLoadRequest` | `SceneLoadRequestEventChannelSO` | `RoomTransition`、`GameManager` | `SceneLoader` | +| `EVT_SceneLoaded` | `StringEventChannelSO` | `SceneLoader` | `GameManager`、`MapManager` | +| `EVT_PauseRequested` | `VoidEventChannelSO` | `InputReader`(Pause 键) | `GameManager` | +| `EVT_DifficultyChanged` | `DifficultyChangedEventChannel` | `DifficultyManager.Apply()` | `PlayerStats`、`EnemyStats`(缩放属性) | + +### 玩家系统 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_PlayerDied` | `VoidEventChannelSO` | `PlayerStats`(HP ≤ 0) | `GameManager`、`UIManager`、`AudioManager` | +| `EVT_DeathScreenConfirmed` | `VoidEventChannelSO` | `DeathScreenController`(Respawn 按钮) | `GameManager`(启动 RespawnCoroutine) | +| `EVT_PlayerRespawned` | `VoidEventChannelSO` | `GameManager`(复活流程末) | `UIManager`、`AudioManager` | +| `EVT_HPChanged` | `IntEventChannelSO` | `PlayerStats.TakeDamage/HealHP` | `HUDController`(血量 UI) | +| `EVT_MaxHPChanged` | `IntEventChannelSO` | `PlayerStats.UnlockHP` | `HUDController` | +| `EVT_SoulPowerChanged` | `IntEventChannelSO` | `PlayerStats.AddSoulPower` | `HUDController` | +| `EVT_SpiritPowerChanged` | `IntEventChannelSO` | `PlayerStats.AddSpiritPower` | `HUDController` | +| `EVT_SpringChargesChanged` | `IntEventChannelSO` | `PlayerStats.UseSpring/RestoreSpring` | `HUDController` | +| `EVT_GeoChanged` | `IntEventChannelSO` | `PlayerStats.AddGeo` | `HUDController` | +| `EVT_AbilityUnlocked` | `StringEventChannelSO`(abilityId) | `PlayerStats.UnlockAbility` | `AbilityGate`、`HUDController`、`TutorialManager` | +| `EVT_PlayerFormChanged` | `IntEventChannelSO`(FormType) | `FormController` | `HUDController`、`AudioManager` | +| `EVT_SkillSetChanged` | `VoidEventChannelSO` | `FormController` | `SkillHUD`(刷新技能栏 UI) | +| `EVT_ParrySuccess` | `VoidEventChannelSO` | `ParrySystem` | `PlayerStats`(+20 SoulPower)、`Feedback`、`AudioManager` | +| `EVT_ShieldHPChanged` | `IntEventChannelSO` | `ShieldComponent`(盾牌受击/修复) | `HUDController`(盾槽 UI) | + +### 战斗系统 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_EnemyDied` | `TransformEventChannelSO` | `EnemyBase`(HP ≤ 0) | `PlayerStats`(击杀点)、`QuestManager` | +| `EVT_HitConfirmed` | `HitConfirmedEventChannelSO`(HitInfo) | `HurtBox.ReceiveDamage` | `HitFXSpawner`、`AudioManager`、`PlayerFeedback`(受击方) | +| `EVT_DamageDealt` | `DamageInfoEventChannelSO` | `HurtBox.ReceiveDamage` | `AnalyticsManager` | +| `EVT_BossFightStarted` | `StringEventChannelSO`(bossId) | `BossOrchestrator` | `GameManager`(切换 BossFight 状态)、`AudioManager` | +| `EVT_BossFightEnded` | `BoolEventChannelSO`(胜利/失败) | `BossBase.Die()` | `GameManager`、`AudioManager`、`UIManager` | +| `EVT_BossFightToggled` | `BoolEventChannelSO`(true=开始,false=结束) | `BossOrchestrator`(开始)、`BossBase.Die()`(结束) | `BossHPBar`(显示/隐藏 Boss 血条) | +| `EVT_BossHPChanged` | `IntEventChannelSO` | `BossBase`(受击/回血) | `BossHPBar`(HP 进度条更新) | +| `EVT_BossNameSet` | `StringEventChannelSO`(bossName) | `BossOrchestrator`(战斗开始时) | `BossHPBar`(显示 Boss 名称标签) | +| `EVT_BossHPMaxSet` | `IntEventChannelSO` | `BossOrchestrator`(战斗开始时) | `BossHPBar`(初始化满血值) | +| `EVT_BossPhaseChanged` | `BossPhaseEventChannelSO`(bossId, phase) | `BossBase.EnterPhase()` | `BossHUD`(相机切换通过 `CameraStateController.Instance` 直接调用,不订阅事件)| +| `EVT_BossSkillStarted` | `BossSkillEventChannelSO`(bossId, skillId) | `BossSkillExecutor` | `BossHUD`(显示技能名)(震动通过 `CameraStateController.Instance.TriggerImpulse()` 直接调用)| +| `EVT_BossSkillEnded` | `BossSkillEventChannelSO`(bossId, skillId) | `BossSkillExecutor` | `BossOrchestrator`(BD 决策推进) | +| `EVT_BossVulnerabilityWindowOpened` | `StringEventChannelSO`(bossId) | `WeakPointSystem` | `PlayerFeedback`(提示音效)、`HUDController` | +| `EVT_NailClash` | `VoidEventChannelSO` | `ClashResolver`(玩家与敌人 HitBox 对碰) | `VFXSpawner`(拼刀特效)、`AudioManager`(拼刀音效)、`CameraStateController`(轻振动) | +| `EVT_StatusEffectApplied` | `StatusEffectEventChannelSO` | `StatusEffectManager.ApplyEffect()` | `HUDController`(状态图标)、`PlayerFeedback`(特效) | +| `EVT_StatusEffectExpired` | `StatusEffectEventChannelSO` | `StatusEffectManager.Tick()` | `HUDController`(移除状态图标) | + +### 世界系统 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_RoomTransitionRequest` | `SceneLoadRequestEventChannelSO` | `RoomTransition` | `SceneLoader` | +| `EVT_SavePointActivated` | `StringEventChannelSO`(saveId) | `SavePoint` | `GameManager`(触发存档)、`HUDController` | +| `EVT_FastTravelOpen` | `VoidEventChannelSO` | `SavePoint`(快速旅行已解锁) | `UIManager`(显示快速旅行面板) | +| `EVT_CollectiblePickup` | `StringEventChannelSO`(itemId) | `Collectible` | `PlayerStats`、`QuestManager`、`AnalyticsManager` | +| `EVT_GeoRecovered` | `StringEventChannelSO`(sceneId) | `DeathShade.Interact()` | `SaveManager`(标记该场景遗骸已回收) | +| `EVT_ShowInteractPrompt` | `StringEventChannelSO`(promptText) | `InteractableDetector` | `HUDController`(显示交互提示 UI) | +| `EVT_HideInteractPrompt` | `VoidEventChannelSO` | `InteractableDetector` | `HUDController`(隐藏交互提示 UI) | + +### UI / 对话 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_DialogueStartRequest` | `DialogueEventChannelSO` | `InteractableNPC` | `DialogueManager` | +| `EVT_DialogueStarted` | `VoidEventChannelSO` | `DialogueManager`(对话正式开始) | `InputReaderSO`(切 UI 输入)、`PlayerController`(锁定输入) | +| `EVT_DialogueEnded` | `VoidEventChannelSO` | `DialogueManager` | `GameManager`(恢复 Gameplay)、`InputReaderSO`(切回 Gameplay) | +| `EVT_NpcDialogueCompleted` | `StringEventChannelSO`(npcId) | `DialogueManager`(与特定 NPC 对话结束) | `QuestManager`(任务目标进度追踪) | +| `EVT_CutsceneStarted` | `VoidEventChannelSO` | `CutsceneManager` | `HUDController`(隐藏 HUD)、`InputReaderSO`(禁用输入) | +| `EVT_CutsceneEnded` | `VoidEventChannelSO` | `CutsceneManager` | `HUDController`(恢复 HUD) | +| `EVT_ShowPanel` | `StringEventChannelSO`(panelId) | 各触发源 | `UIManager` | +| `EVT_HidePanel` | `StringEventChannelSO`(panelId) | 各触发源 | `UIManager` | + +### 商店系统 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_ShopOpened` | `StringEventChannelSO`(shopId) | `ShopController.Open()` | `UIManager`(显示 ShopPanel) | +| `EVT_ShopClosed` | `VoidEventChannelSO` | `ShopPanel` 关闭按钮 | `UIManager`(隐藏 ShopPanel) | +| `EVT_ItemPurchased` | `ShopPurchaseEventChannelSO` | `ShopController` | `PlayerStats`(扣 Geo)、`AchievementManager`(购买成就) | + +### 存档系统 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_SaveIndicatorVisible` | `BoolEventChannelSO`(true=显示,false=隐藏) | `SaveManager.SaveAsync()` | `HUDController`(显示/隐藏保存中图标) | + +### 音频系统 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_RegionEntered` | `StringEventChannelSO`(zoneId) | `AudioZone` | `BGMController`(按 zoneId 查 AudioConfigSO 切换 BGM) | +| `EVT_PlayBGM` | `StringEventChannelSO`(bgmKey) | `GameManager` 等非区域触发源 | `BGMController` | +| `EVT_StopBGM` | `VoidEventChannelSO` | `GameManager` | `BGMController` | +| `EVT_PlaySFX` | `StringEventChannelSO`(sfxKey) | 各触发源 | `AudioManager` | + +### 可访问性 / 成就 / 防软锁 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_AchievementUnlocked` | `StringEventChannelSO`(achievementId) | `AchievementManager` | `ToastManager`(显示成就 Toast) | +| `EVT_SoftlockDetected` | `VoidEventChannelSO` | `AntiSoftlockSystem` | `UIManager`(显示确认对话框) | +| `EVT_ColorblindModeChanged` | `ColorblindModeEventChannelSO` | `AccessibilityManager` | URP Feature(色觉 LUT 切换) | +| `EVT_SubtitlesToggled` | `BoolEventChannelSO` | `AccessibilityManager` | `DialogueBox`(字幕显隐) | +| `EVT_HighContrastToggled` | `BoolEventChannelSO` | `AccessibilityManager` | `UIManager`(高对比度 UI Theme 切换) | + +### 液体 / 导航标记 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_LiquidEntered` | `LiquidEventChannelSO`(LiquidZone) | `LiquidZone.OnTriggerEnter2D()` | `PlayerController`(切换 SwimState) | +| `EVT_LiquidExited` | `LiquidEventChannelSO`(LiquidZone) | `LiquidZone.OnTriggerExit2D()` | `PlayerController`(退出 SwimState) | +| `EVT_DrownProgress` | `FloatEventChannelSO`(0–1 进度) | `LiquidZone`(窒息计时器每帧) | `HUDController`(窒息条 UI) | +| `EVT_PlayerDrowned` | `VoidEventChannelSO` | `LiquidZone`(窒息计时器归零) | `GameManager`(触发死亡流程) | +| `EVT_WorldMarkerActivated` | `WorldMarkerEventChannelSO`(WorldMarker) | `WorldMarker.Activate()` | `HUDController`(指引箭头)、`MapManager`(地图图标) | +| `EVT_WorldMarkerDeactivated` | `WorldMarkerEventChannelSO`(WorldMarker) | `WorldMarker.Deactivate()` | `HUDController`、`MapManager` | + +### 任务 / 挑战 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_QuestStarted` | `StringEventChannelSO`(questId) | `QuestManager.StartQuest()` | `QuestLogUI`(新增条目)、`HUDController`(Toast 提示) | +| `EVT_QuestCompleted` | `StringEventChannelSO`(questId) | `QuestManager.CompleteQuest()` | `QuestGiver`(刷新对话)、`QuestLogUI`、`AchievementManager` | +| `EVT_QuestFailed` | `StringEventChannelSO`(questId) | `QuestManager.FailQuest()` | `QuestLogUI`(标记失败)、`HUDController`(失败提示) | +| `EVT_ObjectiveUpdated` | `QuestObjectiveEventChannelSO`(QuestObjectiveEvent) | `QuestManager.UpdateObjective()` | `QuestLogUI`(进度刷新)、`HUDController`(目标追踪 UI) | +| `EVT_ChallengeCompleted` | `StringEventChannelSO`(challengeId) | `ChallengeRoomManager` | `HUDController`(结算界面)、`AchievementManager` | +| `EVT_ChallengeFailed` | `StringEventChannelSO`(challengeId) | `ChallengeRoomManager` | `SaveManager`(触发读档)、`HUDController` | + +### 事件链 / EventChain + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_ChainCompleted` | `StringEventChannelSO`(chainId) | `EventChainManager` | `ChainCompletedCondition`(链间依赖) | +| `EVT_DoorOpened` | `StringEventChannelSO`(doorId) | `OpenDoorAction` | `DoorController`(物理开门动画) | +| `EVT_FlagChanged` | `StringEventChannelSO`(flagId) | `SetFlagAction` | `InteractableNPC`(条件对话刷新) | + +--- + +## 5. 发布 / 订阅模式 + +### 标准订阅写法 + +```csharp +public class HUDController : MonoBehaviour +{ + [SerializeField] private IntEventChannelSO _onHPChanged; + [SerializeField] private IntEventChannelSO _onSoulPowerChanged; + + private void OnEnable() + { + _onHPChanged.OnEventRaised += UpdateHPBar; + _onSoulPowerChanged.OnEventRaised += UpdateSoulBar; + } + + private void OnDisable() + { + _onHPChanged.OnEventRaised -= UpdateHPBar; + _onSoulPowerChanged.OnEventRaised -= UpdateSoulBar; + } + + private void UpdateHPBar(int newHP) { /* ... */ } + private void UpdateSoulBar(int newSoul) { /* ... */ } +} +``` + +### 标准发布写法 + +```csharp +public class PlayerStats : MonoBehaviour +{ + [SerializeField] private IntEventChannelSO _onHPChanged; + + public void TakeDamage(int amount) + { + _currentHP = Mathf.Max(0, _currentHP - amount); + _onHPChanged.Raise(_currentHP); + + if (_currentHP == 0) + _onPlayerDied.Raise(); + } +} +``` + +--- + +## 6. MMEventManager(备用广播) + +用于**无需预建 SO 资产的临时广播**,或 Feel 框架自带事件(如 `MMTopDownEngineEvent`)。 + +```csharp +// 发布(任意位置) +MMEventManager.TriggerEvent(new PlayerDiedEvent()); + +// 订阅(实现 MMEventListener) +public class AudioManager : MonoBehaviour, MMEventListener +{ + private void OnEnable() => this.MMEventStartListening(); + private void OnDisable() => this.MMEventStopListening(); + + public void OnMMEvent(PlayerDiedEvent eventType) + { + // 响应 + } +} +``` + +**仅在 Feel 框架集成场景下使用**;其他跨系统通信统一使用 SO 事件频道。 + +--- + +## 7. EventChannelRegistry + +`EventChannelRegistry` 是运行时频道查找辅助单例,专为**无法在 Inspector 中序列化 SO 引用的动态场景**设计(典型用例:`ICharmEffect` SO 实例需要在运行时订阅事件频道)。 + +```csharp +// 路径: Assets/Scripts/Core/Events/EventChannelRegistry.cs +namespace BaseGames.Core.Events +{ + /// + /// 运行时事件频道注册表。 + /// 在 Persistent 场景 Awake 时由 EventChannelRegistrar 注册所有频道 SO, + /// 供不能持有 [SerializeField] 的动态对象(CharmEffect SO 等)按类型名查找频道。 + /// + public class EventChannelRegistry : MonoBehaviour + { + public static EventChannelRegistry Instance { get; private set; } + + private readonly Dictionary _channels = new(); + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + DontDestroyOnLoad(gameObject); + } + + /// 由 EventChannelRegistrar 在场景初始化时批量注册频道 SO。 + public void Register(string key, ScriptableObject channel) + => _channels[key] = channel; + + /// + /// 按 key 查找频道。key 约定 = SO 资产文件名(不含扩展名),如 "EVT_OnHitConfirmed"。 + /// 找不到时输出 Error 并返回 null。 + /// + public T Get(string key) where T : ScriptableObject + { + if (_channels.TryGetValue(key, out var ch) && ch is T typed) return typed; + Debug.LogError($"[EventChannelRegistry] Key '{key}' not found or wrong type."); + return null; + } + } +} +``` + +> **注册时机**:Persistent 场景中的 `EventChannelRegistrar` 组件在 `Awake`(最早执行)时调用 +> `EventChannelRegistry.Instance.Register(key, channelSO)` 完成全部频道注册, +> 确保 `EquipmentManager.Awake()` 构建 `EquipmentContext` 时 `Instance` 已就绪。 +> 普通 MonoBehaviour 仍优先使用 `[SerializeField]` 直接引用 SO,Registry 仅供动态 SO 对象使用。 + +--- + +## 8. 事件订阅生命周期管理 — 自动注销机制 + +> **P1 优化**:手动在 `OnDisable` 配对 `OnEnable` 的取消注册,在多场景 Additive 加载时易遗漏导致重复注册或 NullRef。引入 `EventSubscription` / `CompositeDisposable` 模式统一管理。 + +### 8.1 EventSubscription — 单订阅 Disposable + +```csharp +// 路径: Assets/Scripts/Core/Events/EventSubscription.cs +namespace BaseGames.Core.Events +{ + /// + /// 单条订阅的 Disposable 句柄。Dispose() 自动取消注册。 + /// 配合 using 块或 CompositeDisposable 批量释放。 + /// + public readonly struct EventSubscription : System.IDisposable + { + private readonly System.Action _unsubscribe; + + public EventSubscription(System.Action unsubscribe) + => _unsubscribe = unsubscribe; + + public void Dispose() => _unsubscribe?.Invoke(); + } +} +``` + +### 8.2 CompositeDisposable — 批量注销容器 + +```csharp +// 路径: Assets/Scripts/Core/Events/CompositeDisposable.cs +namespace BaseGames.Core.Events +{ + /// + /// 批量管理多条订阅,统一在 Dispose / Clear 时取消所有注册。 + /// MonoBehaviour 生命周期:OnEnable 调用 Subscribe,OnDisable 调用 Clear。 + /// + public sealed class CompositeDisposable : System.IDisposable + { + private readonly List _items = new(); + + public void Add(System.IDisposable item) => _items.Add(item); + + public void Clear() + { + foreach (var item in _items) item.Dispose(); + _items.Clear(); + } + + public void Dispose() => Clear(); + } +} +``` + +### 8.3 BaseEventChannelSO — Subscribe 扩展重载 + +```csharp +// 追加到 BaseEventChannelSO(路径: Assets/Scripts/Core/Events/BaseEventChannelSO.cs) +namespace BaseGames.Core.Events +{ + public abstract class BaseEventChannelSO : ScriptableObject + { + public event Action OnEventRaised; + + public void Raise(T value) => OnEventRaised?.Invoke(value); + + /// + /// 订阅并返回可 Dispose 的订阅句柄。 + /// 推荐与 CompositeDisposable 配合使用,代替手动 OnDisable 取消注册。 + /// + public EventSubscription Subscribe(Action callback) + { + OnEventRaised += callback; + return new EventSubscription(() => OnEventRaised -= callback); + } + } +} +``` + +### 8.4 使用模式 + +**标准用法**(替代 OnEnable/OnDisable 手动配对): + +```csharp +public class HUDController : MonoBehaviour +{ + [SerializeField] VoidEventChannelSO _onCutsceneStarted; + [SerializeField] VoidEventChannelSO _onCutsceneEnded; + [SerializeField] IntEventChannelSO _onHealthChanged; + + private readonly CompositeDisposable _subs = new(); + + // ── 只写 OnEnable,OnDisable 统一 Clear ────────────────────────── + private void OnEnable() + { + _subs.Add(_onCutsceneStarted.Subscribe(_ => HideHUD())); + _subs.Add(_onCutsceneEnded.Subscribe(_ => ShowHUD())); + _subs.Add(_onHealthChanged.Subscribe(UpdateHealthBar)); + } + + private void OnDisable() => _subs.Clear(); +} +``` + +**动态订阅**(运行时按需订阅,对象销毁时自动取消): + +```csharp +// CharmEffect SO 动态订阅(不持有 MonoBehaviour 生命周期) +public class CharmEffect : StatusEffectSO +{ + private EventSubscription _sub; + + public override void OnApply(GameObject target) + { + var channel = EventChannelRegistry.Instance + .Get("EVT_CharmExpired"); + _sub = channel.Subscribe(_ => OnCharmExpired()); + } + + public override void OnRemove(GameObject target) + { + _sub.Dispose(); // 精确注销,无需持有 channel 引用 + } +} +``` + +### 8.5 迁移规范 + +| 旧模式 | 新模式 | 备注 | +|--------|--------|------| +| `OnEnable` + `OnDisable` 手动 `+=` / `-=` | `CompositeDisposable` + `Subscribe()` | 一对多订阅的 MonoBehaviour | +| 单条订阅 + 手动 `-=` | `EventSubscription` (`using` 或字段) | 精确生命周期控制 | +| SO 内部动态订阅 | `EventSubscription` 字段 + `OnRemove Dispose` | CharmEffect 等运行时 SO | + +> **注意**:`VoidEventChannelSO`(无参版)不继承 `BaseEventChannelSO`,需补充等价 `Subscribe(Action callback)` 方法。原有 `OnEnable/OnDisable` 写法仍合法,迁移以新增代码为主,不强制改旧代码。 + +--- + +## 9. EventBusMonitorWindow — 运行时事件监控面板 + +> **P0 优化**:生产级调试能力。调试"玩家死了但死亡画面没有弹出"、"Boss HP 归零但胜利 +> 事件未触发"等问题时,依靠 `Debug.Log` 逐行追踪效率极低。 +> `EventBusMonitorWindow` 在 Play Mode 中实时显示所有 SO 事件频道的最近触发记录, +> 一眼定位"谁 Raise 了什么事件、何时触发、订阅者当前有几个"。 + +### 9.1 运行时埋点 — BaseEventChannelSO 修改 + +```csharp +// 修改: Assets/Scripts/Core/Events/BaseEventChannelSO.cs +public abstract class BaseEventChannelSO : ScriptableObject +{ + [Multiline] public string description; + public event Action OnEventRaised; + + public void Raise(T value) + { + OnEventRaised?.Invoke(value); +#if UNITY_EDITOR + EventBusMonitor.Record(name, value?.ToString() ?? "", + OnEventRaised?.GetInvocationList().Length ?? 0); +#endif + } + // Subscribe() 见 §8.3 +} + +// ✅ VoidBaseEventChannelSO.Raise() 已同步添加 EventBusMonitor.Record(见 §2 VoidBaseEventChannelSO) +``` + +### 9.2 EventBusMonitor — 静态记录缓冲 + +```csharp +// 路径: Assets/Scripts/Core/Events/Editor/EventBusMonitor.cs +#if UNITY_EDITOR +namespace BaseGames.Core.Events.Editor +{ + /// + /// 运行时事件触发记录(仅 Editor)。 + /// BaseEventChannelSO.Raise() 内部调用,CircularBuffer 避免无限增长。 + /// + public static class EventBusMonitor + { + public const int MaxRecords = 200; + + public struct EventRecord + { + public double Timestamp; // Time.realtimeSinceStartupAsDouble + public string ChannelName; // SO 资产名称(如 "EVT_PlayerDied") + public string PayloadText; // value.ToString() + public int SubscriberCount; // 触发时订阅者数量 + public int Frame; // Time.frameCount + } + + private static readonly Queue _records = new(MaxRecords + 1); + public static IReadOnlyCollection Records => _records; + + // 供 EditorWindow 订阅"有新记录"通知 + public static event System.Action OnRecordAdded; + + public static void Record(string channelName, string payload, int subCount) + { + if (_records.Count >= MaxRecords) _records.Dequeue(); + _records.Enqueue(new EventRecord + { + Timestamp = UnityEngine.Time.realtimeSinceStartupAsDouble, + ChannelName = channelName, + PayloadText = payload, + SubscriberCount = subCount, + Frame = UnityEngine.Time.frameCount, + }); + OnRecordAdded?.Invoke(); + } + + public static void Clear() => _records.Clear(); + + // 搜索过滤(大小写不敏感) + public static IEnumerable Filter(string keyword) + => string.IsNullOrEmpty(keyword) + ? _records + : _records.Where(r => r.ChannelName.IndexOf(keyword, + System.StringComparison.OrdinalIgnoreCase) >= 0); + } +} +#endif +``` + +### 9.3 EventBusMonitorWindow — EditorWindow + +```csharp +// 路径: Assets/Scripts/Editor/EventBusMonitorWindow.cs +#if UNITY_EDITOR +namespace BaseGames.Editor +{ + /// + /// 菜单路径: BaseGames/Tools/Event Bus Monitor + /// 快捷键: Ctrl+Shift+E + /// + public class EventBusMonitorWindow : EditorWindow + { + [MenuItem("BaseGames/Tools/Event Bus Monitor %#e")] + public static void Open() + => GetWindow("Event Bus Monitor"); + + // ── UI 状态 ──────────────────────────────────────────────────────── + private string _filterText = ""; + private bool _autoScroll = true; + private bool _pauseCapture = false; + private Vector2 _scrollPos; + private static readonly Color _zeroSubColor = new Color(1f, 0.4f, 0.4f); // 红:零订阅者触发 + private static readonly Color _normalColor = Color.white; + + private void OnEnable() + => EventBusMonitor.OnRecordAdded += Repaint; + private void OnDisable() + => EventBusMonitor.OnRecordAdded -= Repaint; + + private void OnGUI() + { + // ── 工具栏 ────────────────────────────────────────────────── + using (new EditorGUILayout.HorizontalScope(EditorStyles.toolbar)) + { + GUILayout.Label("Filter:", GUILayout.Width(40)); + _filterText = EditorGUILayout.TextField(_filterText, + EditorStyles.toolbarSearchField, GUILayout.Width(200)); + + GUILayout.FlexibleSpace(); + + _pauseCapture = GUILayout.Toggle(_pauseCapture, "Pause", + EditorStyles.toolbarButton, GUILayout.Width(50)); + _autoScroll = GUILayout.Toggle(_autoScroll, "Auto Scroll", + EditorStyles.toolbarButton, GUILayout.Width(80)); + + if (GUILayout.Button("Clear", EditorStyles.toolbarButton, GUILayout.Width(45))) + EventBusMonitor.Clear(); + } + + // ── 列标题 ────────────────────────────────────────────────── + using (new EditorGUILayout.HorizontalScope()) + { + EditorGUILayout.LabelField("Time", GUILayout.Width(70)); + EditorGUILayout.LabelField("Frame", GUILayout.Width(55)); + EditorGUILayout.LabelField("Channel", GUILayout.Width(220)); + EditorGUILayout.LabelField("Payload", GUILayout.MinWidth(120)); + EditorGUILayout.LabelField("Subs", GUILayout.Width(40)); + } + EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); + + // ── 记录列表 ───────────────────────────────────────────────── + using var scroll = new EditorGUILayout.ScrollViewScope(_scrollPos); + _scrollPos = scroll.scrollPosition; + + var records = EventBusMonitor.Filter(_filterText).ToArray(); + foreach (var r in records) + { + var prevColor = GUI.color; + GUI.color = r.SubscriberCount == 0 ? _zeroSubColor : _normalColor; + using (new EditorGUILayout.HorizontalScope()) + { + EditorGUILayout.LabelField($"{r.Timestamp:F2}s", GUILayout.Width(70)); + EditorGUILayout.LabelField($"#{r.Frame}", GUILayout.Width(55)); + EditorGUILayout.LabelField(r.ChannelName, GUILayout.Width(220)); + EditorGUILayout.LabelField(r.PayloadText, GUILayout.MinWidth(120)); + EditorGUILayout.LabelField(r.SubscriberCount.ToString(), GUILayout.Width(40)); + } + GUI.color = prevColor; + } + + if (_autoScroll && Application.isPlaying) + _scrollPos.y = float.MaxValue; + } + } +} +#endif +``` + +### 9.4 使用指南 + +| 场景 | 操作 | +|------|------| +| 调试事件未触发 | Filter 输入频道名,观察 Records;空 = Raise 从未调用 | +| 调试无响应(Subs=0) | 行显示红色 = 有 Raise 但零订阅者,检查 OnEnable 注册 | +| 调试重复触发 | 观察同一频道在同一 Frame 内多次出现 | +| 性能分析 | 高频帧内 Raise 次数过多时考虑节流 | +| 生产构建 | `#if UNITY_EDITOR` 包裹,零运行时开销 | diff --git a/Docs/Architecture/03_CoreModule.md b/Docs/Architecture/03_CoreModule.md new file mode 100644 index 0000000..f3daf23 --- /dev/null +++ b/Docs/Architecture/03_CoreModule.md @@ -0,0 +1,967 @@ +# 03 · Core 核心模块 + +> **命名空间** `BaseGames.Core` +> **程序集** `BaseGames.Core` +> **路径** `Assets/Scripts/Core/` +> **依赖** `BaseGames.Core.Events`、`Newtonsoft.Json` + +--- + +## 目录 + +1. [GameManager](#1-gamemanager) +2. [GameState 枚举与合法转换表](#2-gamestate-枚举与合法转换表) +3. [SceneLoader](#3-sceneloader) +4. [SceneLoadRequest 数据结构](#4-sceneloadrequest-数据结构) +5. [GlobalObjectPool(引用 13_AssetPoolModule)](#5-globalobjectpool) +6. [SettingsManager](#6-settingsmanager) +7. [GlobalSettingsSO](#7-globalsettingsso) +8. [死亡复活流程(时序)](#8-死亡复活流程时序) +9. [Boss 战切换流程(时序)](#9-boss-战切换流程时序) +10. [初始化序列(ExecutionOrder)](#10-初始化序列) +11. [ServiceLocator — 轻量依赖注入](#11-servicelocator--轻量依赖注入) +12. [DeathRespawnService — 死亡/复活服务拆分](#12-deathrespawnservice--死亡复活服务拆分) +13. [SceneService — 场景管理服务拆分](#13-sceneservice--场景管理服务拆分) + +--- + +## 1. GameManager + +``` +路径: Assets/Scripts/Core/GameManager.cs +程序集: BaseGames.Core +[DefaultExecutionOrder(-1000)] +``` + +### 字段 + +```csharp +[Header("Event Channels - Listen")] +[SerializeField] private VoidEventChannelSO _onPlayerDied; +[SerializeField] private VoidEventChannelSO _onSavePointActivated; +[SerializeField] private StringEventChannelSO _onBossFightStarted; +[SerializeField] private BoolEventChannelSO _onBossFightEnded; +[SerializeField] private VoidEventChannelSO _onPauseRequested; +[SerializeField] private StringEventChannelSO _onSceneLoaded; +[SerializeField] private VoidEventChannelSO _onDeathScreenConfirmed; // DeathScreenController 按钮点击 + +[Header("Event Channels - Raise")] +[SerializeField] private GameStateEventChannelSO _onGameStateChanged; +[SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; +[SerializeField] private VoidEventChannelSO _onPlayerRespawned; + +[Header("Sub Managers(同 Persistent 场景内引用)")] +[SerializeField] private SceneLoader _sceneLoader; +[SerializeField] private GlobalObjectPool _objectPool; // ⚠️ 权威类名为 GlobalObjectPool(见 13_AssetPoolModule §3) +[SerializeField] private SettingsManager _settingsManager; +// SaveManager 是独立单例,不通过 GameManager 暴露 + +private GameState _currentState = GameState.Initializing; +private string _lastSavePointId; +private string _currentSceneName; +``` + +### 公开接口 + +```csharp +// 状态管理 +public GameState CurrentState => _currentState; +public void TransitionTo(GameState newState); // 内含合法性检查,发布 _onGameStateChanged + +// 场景控制(通过 SceneLoader 编排) +public void LoadRoom(string roomSceneName, string entryTransitionId = null); +public void ReturnToMainMenu(); + +// 暂停 +public void Pause(); +public void Resume(); + +// 复活(由死亡流程 Coroutine 最终调用) +internal void CompleteRespawn(); +``` + +### 私有/内部方法 + +```csharp +// 生命周期 +private void Awake(); // 初始化序列(见 §10) +private void Start(); // 首帧后跳转 MainMenu + +// 事件处理 +private void HandlePlayerDied(); // → TransitionTo(Dead) → 启动 DeathCoroutine +private void HandleSavePointActivated(string saveId); // → SaveManager.SaveAsync() +private void HandleBossFightStarted(string bossId); // → TransitionTo(BossFight) +private void HandleBossFightEnded(bool victory); // → 根据结果决策 +private void HandlePauseRequested(); // → Pause() / Resume() 切换 + +// Coroutines +private IEnumerator DeathSequenceCoroutine(); // 死亡动画 → 显示 DeathScreen → 等待输入 +private IEnumerator RespawnCoroutine(); // 淡出 → LoadLastSaveScene → 淡入 → 初始化 +private IEnumerator LoadSceneCoroutine(SceneLoadRequest request); +``` + +--- + +## 2. GameState 插件化状态机 + +> **设计动机**:原 `enum GameState` 在编译期固定,DLC 若需引入新游戏模式必须修改核心枚举,违反开闭原则。本节将状态机改为 **`IGameState` 接口 + 运行时注册表**,内置 8 个状态保持不变,外部模块可通过 `RuntimeInitializeOnLoad` 注入新状态,无需重新编译核心程序集。 + +### 2.1 GameStateId — 运行时可注册状态标识 + +```csharp +// 路径: Assets/Scripts/Core/GameStateId.cs +namespace BaseGames.Core +{ + /// + /// 轻量状态标识符(值类型,无堆分配)。 + /// 内置状态通过 静态字段访问, + /// 扩展状态在 [RuntimeInitializeOnLoad] 中调用 Register() 注入。 + /// + public readonly struct GameStateId : System.IEquatable + { + public readonly int Value; + private GameStateId(int v) => Value = v; + + private static int _nextId; + private static readonly System.Collections.Generic.Dictionary + _registry = new(); + + /// 注册状态;已注册则返回现有 ID(幂等)。 + public static GameStateId Register(string name) + { + if (_registry.TryGetValue(name, out var existing)) return existing; + var id = new GameStateId(_nextId++); + _registry[name] = id; + return id; + } + + public static bool TryResolve(string name, out GameStateId id) + => _registry.TryGetValue(name, out id); + + public static IEnumerable All => _registry.Values; + + public bool Equals(GameStateId other) => Value == other.Value; + public override bool Equals(object obj) => obj is GameStateId g && Equals(g); + public override int GetHashCode() => Value; + public static bool operator ==(GameStateId a, GameStateId b) => a.Value == b.Value; + public static bool operator !=(GameStateId a, GameStateId b) => a.Value != b.Value; + public override string ToString() + { + foreach (var kv in _registry) + if (kv.Value == this) return kv.Key; + return $"GameState({Value})"; + } + } + + /// 内置状态常量(静态初始化顺序确保在任何 Awake 前完成)。 + public static class GameStates + { + public static readonly GameStateId Initializing = GameStateId.Register("Initializing"); + public static readonly GameStateId MainMenu = GameStateId.Register("MainMenu"); + public static readonly GameStateId LoadingScene = GameStateId.Register("LoadingScene"); + public static readonly GameStateId Gameplay = GameStateId.Register("Gameplay"); + public static readonly GameStateId BossFight = GameStateId.Register("BossFight"); + public static readonly GameStateId Paused = GameStateId.Register("Paused"); + public static readonly GameStateId Dead = GameStateId.Register("Dead"); + public static readonly GameStateId Cutscene = GameStateId.Register("Cutscene"); + } +} +``` + +### 2.2 IGameState — 状态行为接口 + +```csharp +// 路径: Assets/Scripts/Core/IGameState.cs +namespace BaseGames.Core +{ + /// + /// 可插件化的游戏状态行为接口。 + /// 每个状态封装自身的进入/退出/Tick 逻辑,不再依赖 GameManager 中的 switch 分支。 + /// + public interface IGameState + { + GameStateId Id { get; } + + /// 合法的后继状态集合。GameManager.TransitionTo() 据此校验。 + IReadOnlyCollection ValidNextStates { get; } + + void OnEnter(GameStateId previousState); + void OnExit(GameStateId nextState); + + /// 每帧由 GameManager.Update() 调用(可为空实现)。 + void Tick(float deltaTime) { } + } +} +``` + +### 2.3 GameStateMachine — 轻量状态机核心 + +```csharp +// 路径: Assets/Scripts/Core/GameStateMachine.cs +namespace BaseGames.Core +{ + /// + /// 状态机核心,持有状态注册表与当前状态。 + /// GameManager 持有一个实例;状态对象在 Awake 注入(内置 + 可选 DLC 追加)。 + /// + public class GameStateMachine + { + private readonly Dictionary _states = new(); + private IGameState _current; + + public GameStateId CurrentStateId => _current?.Id ?? default; + + /// 注册状态实现(同 Id 注册多次以最后一次为准)。 + public void Register(IGameState state) => _states[state.Id] = state; + + public bool TransitionTo(GameStateId nextId, out string error) + { + if (!_states.TryGetValue(nextId, out var next)) + { + error = $"[GameStateMachine] 未知状态 '{nextId}'"; + return false; + } + if (_current != null && !_current.ValidNextStates.Contains(nextId)) + { + error = $"[GameStateMachine] 非法转换 {_current.Id} → {nextId}"; + return false; + } + var prev = _current?.Id ?? default; + _current?.OnExit(nextId); + _current = next; + _current.OnEnter(prev); + error = null; + return true; + } + + public void Tick(float deltaTime) => _current?.Tick(deltaTime); + } +} +``` + +### 2.4 GameManager 集成 + +```csharp +// GameManager.cs — 关键修改(其余字段不变) +public class GameManager : MonoBehaviour +{ + // 状态机实例(不再使用 enum currentState) + private readonly GameStateMachine _fsm = new(); + + private void Awake() + { + // 注册内置状态 + _fsm.Register(new InitializingState()); + _fsm.Register(new MainMenuState(_onMainMenuEntered)); + _fsm.Register(new LoadingSceneState(_onLoadingStarted)); + _fsm.Register(new GameplayState(_inputReader, _onGameplayStarted)); + _fsm.Register(new BossFightState(_onBossFightEntered)); + _fsm.Register(new PausedState(_onGamePaused)); + _fsm.Register(new DeadState(_onPlayerDied)); + _fsm.Register(new CutsceneState(_onCutsceneStarted)); + + // DLC / 模块注入(可选;通过 [RuntimeInitializeOnLoad] 在 Awake 前注入) + foreach (var ext in _externalStateFactories) + _fsm.Register(ext.Create()); + + _fsm.TransitionTo(GameStates.Initializing, out _); + } + + // 对外仍使用 GameStateId(或兼容属性) + public GameStateId CurrentState => _fsm.CurrentStateId; + + public void TransitionTo(GameStateId nextState) + { + if (!_fsm.TransitionTo(nextState, out var err)) + Debug.LogWarning(err); + else + _onGameStateChanged.Raise(nextState); + } + + private void Update() => _fsm.Tick(Time.deltaTime); + + // ── DLC 扩展点 ──────────────────────────────────────────────────────── + // 外部模块在 [RuntimeInitializeOnLoad(RuntimeInitializeLoadType.BeforeSceneLoad)] + // 调用 GameManager.RegisterStateFactory(factory) 注入新状态 + private static readonly List _externalStateFactories = new(); + public static void RegisterStateFactory(IGameStateFactory factory) + => _externalStateFactories.Add(factory); +} + +/// DLC 模块实现此接口以注入新游戏状态。 +public interface IGameStateFactory +{ + IGameState Create(); +} +``` + +### 2.5 内置状态示例 + +```csharp +// 路径: Assets/Scripts/Core/States/GameplayState.cs +public class GameplayState : IGameState +{ + private readonly VoidEventChannelSO _onEnterChannel; + private readonly InputReaderSO _inputReader; + + public GameplayState(InputReaderSO input, VoidEventChannelSO onEnter) + { + _inputReader = input; + _onEnterChannel = onEnter; + } + + public GameStateId Id => GameStates.Gameplay; + + public IReadOnlyCollection ValidNextStates { get; } = + new HashSet + { + GameStates.LoadingScene, + GameStates.BossFight, + GameStates.Paused, + GameStates.Dead, + GameStates.Cutscene, + }; + + public void OnEnter(GameStateId prev) + { + _inputReader.EnableGameplayMap(); + _onEnterChannel.Raise(); + } + + public void OnExit(GameStateId next) + { + if (next == GameStates.Paused) return; // 暂停不禁用 Gameplay map + _inputReader.DisableGameplayMap(); + } +} +``` + +**合法转换一览(同前)**: + +``` +Initializing → MainMenu +MainMenu → LoadingScene +LoadingScene → MainMenu | Gameplay +Gameplay → LoadingScene | BossFight | Paused | Dead | Cutscene +BossFight → LoadingScene | Gameplay | Paused | Dead +Paused → Gameplay | BossFight | MainMenu +Dead → LoadingScene +Cutscene → Gameplay +``` + +> **向后兼容**:现有订阅 `GameStateEventChannelSO`(泛型参数改为 `GameStateId`)的代码,将事件类型从 `GameState`(enum)替换为 `GameStateId`(struct)即可,API 形态不变。`GameStateId == GameStateId` 值比较性能与 enum 相同(int 比较)。 + + + +``` +路径: Assets/Scripts/Core/SceneLoader.cs +程序集: BaseGames.Core +``` + +### 职责 + +- 监听 `EVT_SceneLoadRequest` 频道,执行异步加载 +- 管理 Persistent 场景常驻(加法加载/卸载) +- 加载完成后发布 `EVT_SceneLoaded` + +### 字段 + +```csharp +[SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; +[SerializeField] private StringEventChannelSO _onSceneLoaded; +[SerializeField] private VoidEventChannelSO _onFadeInRequest; // 触发 UI 淡入 +[SerializeField] private VoidEventChannelSO _onFadeOutRequest; // 触发 UI 淡出 +[SerializeField] private float _fadeDuration = 0.3f; + +private string _currentRoomScene; // 当前已加载的房间场景名 +``` + +### 接口 + +```csharp +// 由 GameManager 或 RoomTransition 触发 +public void RequestLoad(SceneLoadRequest request); + +// 内部流程 +private IEnumerator LoadSceneCoroutine(SceneLoadRequest request); +// 1. Raise FadeOut +// 2. yield LoadSceneAsync(房间场景) +// 3. 卸载旧房间场景(保留 Persistent) +// 4. 激活新场景 +// 5. Raise SceneLoaded(供 GameManager 切状态、MapManager 更新) +// 6. Raise FadeIn +``` + +--- + +## 4. SceneLoadRequest 数据结构 + +```csharp +// 路径: Assets/Scripts/Core/SceneLoadRequest.cs +namespace BaseGames.Core +{ + [System.Serializable] + public struct SceneLoadRequest + { + public string SceneName; // Addressable 场景键(AddressKeys 常量) + public string EntryTransitionId; // 玩家出生点 ID(RoomTransition 与之匹配) + public bool ShowLoadingScreen; // 跨大区域时 true + public bool IsRespawn; // 死亡复活时 true,不执行过渡动画 + } +} +``` + +--- + +## 5. GlobalObjectPool + +> ⚠️ **权威实现见 [`13_AssetPoolModule.md §3`](../Architecture/13_AssetPoolModule.md)** +> 类名为 `GlobalObjectPool`(命名空间 `BaseGames.Core`)。 +> 本模块不重复定义,以下仅列出与 CoreModule 相关的调用入口摘要。 + +```csharp +// 使用方式(CoreModule 内部调用) +GlobalObjectPool.Instance.WarmupAsync(); // SceneLoader 步骤 4 调用 +GlobalObjectPool.Instance.Spawn(addressKey, pos, rot); // 取出实例 +GlobalObjectPool.Instance.Despawn(addressKey, instance); // 归还实例 +GlobalObjectPool.Instance.ClearPool(addressKey); // 场景卸载时清除指定池 +``` + +--- + +## 6. SettingsManager + +``` +路径: Assets/Scripts/Core/SettingsManager.cs +程序集: BaseGames.Core +[DefaultExecutionOrder(-800)] +``` + +### 职责 + +- 从 `GlobalSettingsSO` 读取默认值,从 PlayerPrefs / 独立设置文件加载用户覆盖 +- 应用设置到 AudioMixer、Screen、InputSystem +- 提供运行时修改接口(供 SettingsPanel 调用) + +### 字段 + +```csharp +[SerializeField] private GlobalSettingsSO _defaultSettings; +[SerializeField] private FloatEventChannelSO _onMasterVolumeChanged; // 同步 HUD + +private GlobalSettingsData _current; // 运行时值(从文件读取) +``` + +### 接口 + +```csharp +public void Initialize(); // GameManager.Awake 调用 + +// 音量(0-1 线性;内部调用 AudioManager.Instance.SetVolume(AudioMixerKeys.*, value) 写入 AudioMixer) +public void SetMasterVolume(float value) => AudioManager.Instance.SetVolume(AudioMixerKeys.Master, value); +public void SetBGMVolume(float value) => AudioManager.Instance.SetVolume(AudioMixerKeys.BGM, value); +public void SetSFXVolume(float value) => AudioManager.Instance.SetVolume(AudioMixerKeys.SFX, value); +public void SetAmbientVolume(float value) => AudioManager.Instance.SetVolume(AudioMixerKeys.Ambient, value); + +// 画面 +public void SetResolution(int width, int height, FullScreenMode mode); +public void SetVSync(bool enabled); +public void SetTargetFrameRate(int fps); // 仅非 VSync 时生效 + +// 语言 +public void SetLanguage(string localeCode); // 调用 LocalizationSettings.SelectedLocale + +// 保存(写入独立设置文件) +public void Save(); + +// 当前值访问 +public GlobalSettingsData Current => _current; +``` + +--- + +## 7. GlobalSettingsSO + +``` +路径: Assets/Scripts/Core/GlobalSettingsSO.cs +资产: Assets/Data/Settings/SET_GlobalSettings.asset +``` + +```csharp +[CreateAssetMenu(menuName = "Settings/GlobalSettings")] +public class GlobalSettingsSO : ScriptableObject +{ + [Header("Audio")] + public float DefaultMasterVolume = 1f; + public float DefaultBGMVolume = 0.8f; + public float DefaultSFXVolume = 1f; + public float DefaultAmbientVolume = 0.8f; // ⚠️ 与 AudioMixerKeys.Ambient 对应 + + [Header("Display")] + public int DefaultTargetFPS = 60; + public bool DefaultVSync = false; + + [Header("Language")] + public string DefaultLocaleCode = "zh-CN"; + + [Header("Accessibility")] + public bool DefaultHighContrast = false; + public bool DefaultScreenShake = true; +} + +[System.Serializable] +public class GlobalSettingsData +{ + public float MasterVolume; + public float BGMVolume; + public float SFXVolume; + public float AmbientVolume; // ⚠️ 与 AudioMixerKeys.Ambient 对应 + public int TargetFPS; + public bool VSync; + public string LocaleCode; + public bool HighContrast; + public bool ScreenShake; +} +``` + +--- + +## 8. 死亡复活流程(时序) + +``` +[PlayerStats] HP ≤ 0 + → Raise EVT_PlayerDied + +[GameManager] HandlePlayerDied() + → TransitionTo(GameState.Dead) + → Raise EVT_GameStateChanged(Dead) + ← [UIManager] 禁用 HUD 输入 + ← [AudioManager] 播放死亡音乐/SFX + → StartCoroutine(DeathSequenceCoroutine) + 1. 等待死亡动画完成(约 1.5s) + 2. (DeathScreenController 订阅 EVT_PlayerDied,延迟 1.5s 后自动显示死亡画面;无需 GameManager 直接调用 UI) + 3. 等待玩家按下"重试"(监听 EVT_DeathScreenConfirmed) + +[GameManager] RespawnCoroutine() + → TransitionTo(GameState.LoadingScene) + → SceneLoader.RequestLoad(lastSaveScene, isRespawn: true) + → 淡出 + → 卸载当前房间场景 + → 加载存档点对应场景 + → SaveManager 恢复玩家状态(HP = MaxHP×0.67,灵泉=1) + → 淡入 + → TransitionTo(GameState.Gameplay) + → Raise EVT_PlayerRespawned +``` + +--- + +## 9. Boss 战切换流程(时序) + +``` +[BossOrchestrator] 玩家进入 Boss 房间触发器 + → Raise EVT_BossFightStarted("boss_forest") + +[GameManager] HandleBossFightStarted(bossId) + → TransitionTo(GameState.BossFight) + ← [AudioManager] 切换 Boss BGM(AudioMixer 快照) + ← [UIManager] 显示 Boss 血量条 + ← [CinemachineCamera] 切换为 BossCamera 虚拟摄像机 + +[BossOrchestrator] Boss 死亡 + → Raise EVT_BossFightEnded(victory: true) + +[GameManager] HandleBossFightEnded(true) + → TransitionTo(GameState.Gameplay) + ← [AudioManager] 恢复常规 BGM + ← [UIManager] 隐藏 Boss 血量条 + → 触发剧情 / 过场(如有) +``` + +--- + +## 10. 初始化序列 + +```csharp +// GameManager.Awake() +[DefaultExecutionOrder(-1000)] +private void Awake() +{ + DontDestroyOnLoad(gameObject); // Persistent 场景随 GameManager 常驻 + + Application.targetFrameRate = 60; + Physics2D.simulationMode = SimulationMode2D.Script; // 手动物理步进 + + // 子系统初始化(按依赖顺序) + _settingsManager.Initialize(); // 1. 读取设置文件,应用音量/分辨率 + // SaveManager 自初始化(SaveManager.Awake 先于 GameManager.Start) + // GlobalObjectPool 无 Initialize() 方法;预热由 SceneLoader.LoadSceneCoroutine 步骤 4 + // 调用 GlobalObjectPool.Instance.WarmupAsync() 触发(见 13_AssetPoolModule §6) + // DifficultyManager 自初始化(DefaultExecutionOrder: -900,早于本 Awake) + // → 读取 SaveData.Meta.CurrentDifficulty + // → Apply(level) → 广播 EVT_DifficultyChanged + // → EnemyStats / PlayerStats / ShopController 等系统订阅此事件后注入难度系数 + // → 详见 19_DifficultyModule.md + + TransitionTo(GameState.Initializing); +} + +private IEnumerator Start() +{ + yield return null; // 等待首帧渲染 + TransitionTo(GameState.MainMenu); + // → UIManager 收到 EVT_GameStateChanged(MainMenu) → 显示 MainMenuPanel + // → AudioManager 收到 → 播放主菜单 BGM +} +``` + +--- + +## 11. ServiceLocator — 轻量依赖注入 + +> **P0 优化**:原项目中 `AudioManager.Instance`、`EventChannelRegistry.Instance`、`SaveManager` 等均为静态单例, +> 在多场景 Play Mode 快速进入(Direct Play from Room scene)时若 Persistent 场景未加载, +> `Instance` 为 null 导致崩溃;测试时也无法替换为 Mock 实现。 +> 引入 `ServiceLocator` 替代所有硬编码 `Instance`,保留 Inspector 序列化注入路径(无需引入 Zenject/VContainer 等外部 DI 框架)。 + +### 11.1 ServiceLocator 核心 + +```csharp +// 路径: Assets/Scripts/Core/ServiceLocator.cs +namespace BaseGames.Core +{ + /// + /// 轻量服务定位器。 + /// - 通过类型键注册/查找服务,支持接口类型注册(依赖倒置) + /// - 在 Persistent 场景 Awake(ExecutionOrder -2000)批量注册全局服务 + /// - 支持 Fallback:找不到服务时返回 NullObject 而非 null(防崩溃) + /// - Editor 下 Play Mode "Enter Play Mode Without Domain Reload" 友好(静态字典不清空) + /// + public static class ServiceLocator + { + private static readonly Dictionary _services = new(); + + // ── 注册 ──────────────────────────────────────────────────────── + /// 以接口类型 TInterface 注册实现 impl。 + public static void Register(TInterface impl) + => _services[typeof(TInterface)] = impl; + + /// 仅当尚未注册时才注册(防多场景重复注册同一服务)。 + public static void RegisterIfAbsent(TInterface impl) + { + if (!_services.ContainsKey(typeof(TInterface))) + _services[typeof(TInterface)] = impl; + } + + // ── 查找 ──────────────────────────────────────────────────────── + /// + /// 查找服务。未注册时返回 default(T为class则为null)并输出LogError。 + /// + public static TInterface Get() + { + if (_services.TryGetValue(typeof(TInterface), out var svc) && svc is TInterface typed) + return typed; + // 未注册时抛出明确异常(带上下文),而非返回 null 造成延迟 NullReferenceException + throw new InvalidOperationException( + $"[ServiceLocator] Service '{typeof(TInterface).Name}' is not registered. " + + "Ensure GameServiceRegistrar.Awake() has run before this call " + + "(ExecutionOrder -2000). For optional services use GetOrDefault()."); + } + + /// 安全版 Get:未注册时返回 fallback,不报错(适用于可选服务)。 + public static TInterface GetOrDefault(TInterface fallback = default) + => _services.TryGetValue(typeof(TInterface), out var svc) && svc is TInterface typed + ? typed : fallback; + + // ── 测试支持 ───────────────────────────────────────────────────── + /// 单元测试中替换服务实现(仅在 UNITY_EDITOR 或 TEST 编译条件下可用)。 + [System.Diagnostics.Conditional("UNITY_EDITOR")] + public static void OverrideForTest(TInterface mock) + => _services[typeof(TInterface)] = mock; + + [System.Diagnostics.Conditional("UNITY_EDITOR")] + public static void Reset() => _services.Clear(); + } +} +``` + +### 11.2 全局服务接口清单 + +| 接口 | 实现类 | NullObject 实现 | +|------|--------|----------------| +| `IAudioService` | `AudioManager` | `NullAudioService` | +| `ISaveService` | `SaveManager` | — | +| `ISceneService` | `SceneService`(见 §13) | — | +| `IDeathRespawnService` | `DeathRespawnService`(见 §12) | — | +| `IEventChannelRegistry` | `EventChannelRegistry` | — | + +### 11.3 服务注册器 + +```csharp +// 路径: Assets/Scripts/Core/GameServiceRegistrar.cs +// Persistent 场景内挂载,最早执行(ExecutionOrder -2000) +[DefaultExecutionOrder(-2000)] +public class GameServiceRegistrar : MonoBehaviour +{ + [Header("服务实现引用(Inspector 拖拽)")] + [SerializeField] private AudioManager _audioManager; + [SerializeField] private SaveManager _saveManager; + [SerializeField] private SceneService _sceneService; + [SerializeField] private DeathRespawnService _deathRespawnService; + [SerializeField] private EventChannelRegistry _eventChannelRegistry; + + private void Awake() + { + ServiceLocator.Register(_audioManager); + ServiceLocator.Register(_saveManager); + ServiceLocator.Register(_sceneService); + ServiceLocator.Register(_deathRespawnService); + ServiceLocator.Register(_eventChannelRegistry); + } +} +``` + +### 11.4 消费示例(替代旧 Singleton) + +```csharp +// ❌ 旧写法(直接单例,测试不友好) +AudioManager.Instance.PlaySFX(clip); + +// ✅ 新写法(ServiceLocator,可 Mock) +ServiceLocator.Get().PlaySFX(clip); + +// ✅ 可选服务(如 PlatformManager 仅 Steam 平台存在) +ServiceLocator.GetOrDefault(NullPlatformService.Instance) + .UnlockAchievement("ACH_FirstKill"); +``` + +### 11.5 IAudioService 接口 + +```csharp +// 路径: Assets/Scripts/Audio/IAudioService.cs +namespace BaseGames.Audio +{ + public interface IAudioService + { + void PlayBGM(AudioCueSO cue, float fadeInTime = 1.0f); + void StopBGM(float fadeOutTime = 1.0f); + void PlaySFX(AudioCueSO cue); + void PlaySFXAtPosition(AudioCueSO cue, Vector2 position); + void SetMixerVolume(string paramName, float linearVolume); // 0..1 → dB + void TransitionToSnapshot(string snapshotName, float transitionTime); + AudioCueSO GetCurrentBGM(); + } + + /// 静默实现,用于测试和 BGM 静默场景。 + public class NullAudioService : IAudioService + { + public static readonly NullAudioService Instance = new(); + public void PlayBGM(AudioCueSO c, float t = 1f) { } + public void StopBGM(float t = 1f) { } + public void PlaySFX(AudioCueSO c) { } + public void PlaySFXAtPosition(AudioCueSO c, Vector2 p) { } + public void SetMixerVolume(string n, float v) { } + public void TransitionToSnapshot(string n, float t) { } + public AudioCueSO GetCurrentBGM() => null; + } +} +``` + +--- + +## 12. DeathRespawnService — 死亡/复活服务拆分 + +> **P1 优化**:原 `GameManager` 同时管理状态机 + 死亡序列协程 + 场景切换,违反 SRP。 +> 将死亡/复活流程提取为独立的 `DeathRespawnService`,GameManager 只负责 +> 监听事件 → 委托给对应服务 → 进行状态转换。 + +### 12.1 IDeathRespawnService 接口 + +```csharp +// 路径: Assets/Scripts/Core/IDeathRespawnService.cs +namespace BaseGames.Core +{ + public interface IDeathRespawnService + { + /// 玩家死亡时由 GameManager 调用,启动死亡演出流程。 + UniTask StartDeathSequenceAsync(CancellationToken ct = default); + + /// DeathScreen 确认按钮点击后调用,执行复活流程。 + UniTask StartRespawnAsync(CancellationToken ct = default); + + /// SteelSoul 模式:HP 归零后直接清档并返回主菜单。 + UniTask StartGameOverAsync(CancellationToken ct = default); + } +} +``` + +### 12.2 DeathRespawnService 实现 + +```csharp +// 路径: Assets/Scripts/Core/DeathRespawnService.cs +namespace BaseGames.Core +{ + /// + /// 死亡 / 复活流程的独立服务。 + /// 依赖:ISceneService(场景切换)、ISaveService(加载存档)、 + /// GameStateMachine(状态转换通知)、LoadingOverlay(淡入淡出)。 + /// 所有依赖由 ServiceLocator 在 Awake 时解析,不持有 GameManager 引用。 + /// + public class DeathRespawnService : MonoBehaviour, IDeathRespawnService + { + [Header("Config")] + [SerializeField] private float _deathAnimDuration = 1.2f; // 死亡动画时长 + [SerializeField] private float _deathScreenDelay = 0.5f; // 动画结束 → 死亡画面 + [SerializeField] private float _respawnFadeDuration = 0.4f; // 淡出/淡入时长 + + [Header("Event Channels - Raise")] + [SerializeField] private VoidEventChannelSO _onRespawnStarted; + [SerializeField] private VoidEventChannelSO _onRespawnCompleted; + + [Header("Event Channels - Listen")] + [SerializeField] private VoidEventChannelSO _onDeathScreenConfirmed; + + // 内部等待 DeathScreen 用户确认 + private UniTaskCompletionSource _deathConfirmTcs; + + private void OnEnable() + => _onDeathScreenConfirmed.OnEventRaised += HandleDeathScreenConfirmed; + private void OnDisable() + => _onDeathScreenConfirmed.OnEventRaised -= HandleDeathScreenConfirmed; + private void HandleDeathScreenConfirmed() + => _deathConfirmTcs?.TrySetResult(); + + // ── IDeathRespawnService ────────────────────────────────────── + public async UniTask StartDeathSequenceAsync(CancellationToken ct = default) + { + // 1. 等待死亡动画 + await UniTask.Delay(TimeSpan.FromSeconds(_deathAnimDuration), cancellationToken: ct); + // 2. 等待 DeathScreen 延迟 + await UniTask.Delay(TimeSpan.FromSeconds(_deathScreenDelay), cancellationToken: ct); + // 3. 等待玩家在死亡画面确认(UI → EVT_DeathScreenConfirmed) + _deathConfirmTcs = new UniTaskCompletionSource(); + await _deathConfirmTcs.Task.AttachExternalCancellation(ct); + } + + public async UniTask StartRespawnAsync(CancellationToken ct = default) + { + var sceneService = ServiceLocator.Get(); + var saveService = ServiceLocator.Get(); + + _onRespawnStarted.Raise(); + // 1. 淡出 + await ServiceLocator.Get().FadeOutAsync(_respawnFadeDuration, ct); + // 2. 加载最后存档场景 + var saveData = await saveService.LoadCurrentSlotAsync(ct); + await sceneService.LoadSceneAsync(new SceneLoadRequest + { + SceneName = saveData.Player.Scene, + EntryTransitionId = saveData.Meta.SavePointId, + IsRespawn = true, + }, ct); + // 3. 淡入 + await ServiceLocator.Get().FadeInAsync(_respawnFadeDuration, ct); + _onRespawnCompleted.Raise(); + } + + public async UniTask StartGameOverAsync(CancellationToken ct = default) + { + // SteelSoul:清档 → 返回主菜单 + await ServiceLocator.Get().DeleteCurrentSlotAsync(ct); + await ServiceLocator.Get().LoadMainMenuAsync(ct); + } + } +} +``` + +### 12.3 重构后 GameManager 变化 + +```csharp +// GameManager 精简为:事件监听 → 委托服务 → 状态转换 +private async UniTaskVoid HandlePlayerDied() +{ + _stateMachine.TransitionTo(GameStates.Dead); + await ServiceLocator.Get().StartDeathSequenceAsync(_cts.Token); + // DeathScreen 确认后触发复活 + _stateMachine.TransitionTo(GameStates.Loading); + await ServiceLocator.Get().StartRespawnAsync(_cts.Token); + _stateMachine.TransitionTo(GameStates.Playing); +} +``` + +> **协程 → UniTask 迁移**:`DeathRespawnService` 全程使用 UniTask,消除 `IEnumerator` 混用问题。 +> `GameManager.Start()` 改为 `private async UniTaskVoid Start()`。 +> `_cts = new CancellationTokenSource()` 在 `OnDestroy()` 时 `.Cancel()` + `.Dispose()`。 + +--- + +## 13. SceneService — 场景管理服务拆分 + +> **P1 优化**:原 `GameManager.LoadSceneCoroutine` 内嵌了场景加载、LoadingOverlay 控制、 +> Addressables 预热触发等逻辑。提取为独立的 `SceneService`,GameManager 调用 +> `ServiceLocator.Get().LoadSceneAsync()` 即可。 + +### 13.1 ISceneService 接口 + +```csharp +// 路径: Assets/Scripts/Core/ISceneService.cs +namespace BaseGames.Core +{ + public interface ISceneService + { + /// 通用场景加载(带 LoadingOverlay + Addressables 预热)。 + UniTask LoadSceneAsync(SceneLoadRequest request, CancellationToken ct = default); + + /// 返回主菜单(清理所有 Additive 场景后加载 MainMenu)。 + UniTask LoadMainMenuAsync(CancellationToken ct = default); + + /// 当前已加载场景名称(Persistent 除外)。 + string CurrentSceneName { get; } + } +} +``` + +### 13.2 SceneService 实现 + +```csharp +// 路径: Assets/Scripts/Core/SceneService.cs +[DefaultExecutionOrder(-900)] +public class SceneService : MonoBehaviour, ISceneService +{ + [Header("Config")] + [SerializeField] private WarmupManifestSO _warmupManifest; // 见 13_AssetPoolModule §12 + [SerializeField] private LoadingOverlay _loadingOverlay; + + public string CurrentSceneName { get; private set; } + + public async UniTask LoadSceneAsync(SceneLoadRequest request, CancellationToken ct = default) + { + // 1. 淡出 + await _loadingOverlay.FadeOutAsync(0.3f, ct); + + // 2. 卸载当前场景(保留 Persistent) + if (!string.IsNullOrEmpty(CurrentSceneName)) + await Addressables.UnloadSceneAsync(CurrentSceneName).ToUniTask(ct); + + // 3. 加载新场景 + var handle = Addressables.LoadSceneAsync(request.SceneName, + LoadSceneMode.Additive, activateOnLoad: false); + await handle.ToUniTask(ct); + + // 4. Addressables 预热(见 13_AssetPoolModule §9) + await ServiceLocator.Get() + .WarmupFromManifestAsync(_warmupManifest, ct); + + // 5. 激活场景 + await handle.Result.ActivateAsync().ToUniTask(ct); + CurrentSceneName = request.SceneName; + + // 6. 淡入 + await _loadingOverlay.FadeInAsync(0.3f, ct); + } + + public async UniTask LoadMainMenuAsync(CancellationToken ct = default) + => await LoadSceneAsync(new SceneLoadRequest + { SceneName = AddressKeys.SceneMainMenu }, ct); +} +``` diff --git a/Docs/Architecture/04_InputModule.md b/Docs/Architecture/04_InputModule.md new file mode 100644 index 0000000..4cdc156 --- /dev/null +++ b/Docs/Architecture/04_InputModule.md @@ -0,0 +1,503 @@ +# 04 · 输入模块 + +> **命名空间** `BaseGames.Input` +> **程序集** `BaseGames.Input` +> **路径** `Assets/Scripts/Input/` +> **依赖** `BaseGames.Core.Events`、`Unity.InputSystem` + +--- + +## 目录 + +1. [InputReaderSO](#1-inputreaderso) +2. [InputReaderSO 字段与事件完整列表](#2-inputreaderso-字段与事件完整列表) +3. [Input Actions 资产结构](#3-input-actions-资产结构) +4. [InputBuffer — 输入缓冲](#4-inputbuffer--输入缓冲) +5. [Action Map 切换规则](#5-action-map-切换规则) +6. [按键重绑定接口](#6-按键重绑定接口) +7. [Persistent 场景挂载](#7-persistent-场景挂载) + +--- + +## 1. InputReaderSO + +``` +路径: Assets/Scripts/Input/InputReaderSO.cs +资产: Assets/Data/Player/PLY_InputReader.asset(全局单例 SO) +程序集: BaseGames.Input +``` + +`InputReaderSO` 是输入系统的**唯一门面**。内部持有生成的 `PlayerInputActions` C# 类,向外暴露纯 C# `event Action` 委托,各游戏系统通过订阅这些事件获取输入,**不直接持有 `PlayerInput` 组件引用**。 + +```csharp +[CreateAssetMenu(menuName = "Input/InputReader")] +public class InputReaderSO : ScriptableObject, IInputActionCollection2 +{ + // 内部持有生成的 Input Actions + private PlayerInputActions _actions; + + // EventChannel 引用(SO→SO 注入,供无法直接订阅 C# 事件的全局系统使用) + [SerializeField] private VoidEventChannelSO _onPauseRequested; // → EVT_PauseRequested(GameManager 订阅) + + // 在首次访问时懒初始化(OnEnable 兜底) + private void OnEnable() => _actions ??= new PlayerInputActions(); +} +``` + +--- + +## 2. InputReaderSO 字段与事件完整列表 + +### 移动 + +```csharp +public event Action MoveEvent; // 持续:方向向量 +public Vector2 MoveInput { get; } // 当前帧值(Polling 用) +``` + +### 跳跃 + +```csharp +public event Action JumpStartedEvent; // 按下(触发跳跃) +public event Action JumpCancelledEvent; // 松开(可变跳跃高度 CutJump) +``` + +### 攻击 + +```csharp +public event Action AttackEvent; // 普通攻击按下 +public event Action DownAttackEvent; // 下劈(按住下+攻击,或独立键位) +public event Action UpAttackEvent; // 上劈(按住上+攻击,或独立键位) +``` + +### 弹反 + +```csharp +public event Action ParryEvent; // 弹反按下 +``` + +### 冲刺 + +```csharp +public event Action DashEvent; // 冲刺按下 +``` + +### 灵泉 + +```csharp +public event Action UseSpringEvent; // 使用灵泉(消耗 SpringCharges) +``` + +### 形态切换 + +```csharp +public event Action SwitchSkyFormEvent; // 天魂形态 +public event Action SwitchEarthFormEvent; // 地魂形态 +public event Action SwitchDeathFormEvent; // 命魂形态 +``` + +### 技能 + +```csharp +public event Action SoulSkillEvent; // 当前形态魂技能(消耗灵力) +public event Action SpiritSkill1StartedEvent; // 魄技能 1 按下 +public event Action SpiritSkill1CancelledEvent; // 魄技能 1 松开(蓄力型) +public event Action SpiritSkill2StartedEvent; // 魄技能 2 按下 +public event Action SpiritSkill2CancelledEvent; // 魄技能 2 松开(蓄力型) +``` + +### 交互 + +```csharp +public event Action InteractEvent; // 与 NPC/物件交互 +``` + +### UI + +```csharp +public event Action PauseEvent; // 暂停键:同时 Raise _onPauseRequested(→ EVT_PauseRequested) +public event Action NavigateEvent; // UI 导航 +public event Action SubmitEvent; // 确认 +public event Action CancelEvent; // 取消 +public event Action PointEvent; // 鼠标/触摸位置(UI Action Map Point) +``` + +### Action Map 切换 + +```csharp +public void EnableGameplayInput(); // 启用 Gameplay Map,禁用 UI Map +public void EnableUIInput(); // 启用 UI Map,禁用 Gameplay Map +public void DisableAllInput(); // 全部禁用(过场/加载中) +``` + +--- + +## 3. Input Actions 资产结构 + +``` +资产路径: Assets/Settings/PlayerInputActions.inputactions +``` + +### Gameplay Action Map + +| Action 名 | 类型 | 绑定(键盘/手柄) | +|-----------|------|----------------| +| `Move` | Value Vector2 | WASD / 左摇杆 | +| `Jump` | Button | Space / 南键(×/A) | +| `Attack` | Button | J / 西键(□/X) | +| `Parry` | Button | K / 北键(△/Y) | +| `Dash` | Button | L / 东键(○/B) | +| `UseSpring` | Button | H / R1 | +| `SwitchSkyForm` | Button | 1 / D-Pad Up | +| `SwitchEarthForm` | Button | 2 / D-Pad Down | +| `SwitchDeathForm` | Button | 3 / D-Pad Right | +| `SoulSkill` | Button | U / L2 | +| `SpiritSkill1` | Button | I / R2(带 hold 取消事件)| +| `SpiritSkill2` | Button | O / L1(带 hold 取消事件)| +| `Interact` | Button | F / D-Pad Left | +| `Pause` | Button | Esc / Start | + +### UI Action Map + +| Action 名 | Value 类型 | 绑定 | +|-----------|-----------|------| +| `Navigate` | Vector2 | 方向键 / 左摇杆 | +| `Submit` | Button | Enter / 南键 | +| `Cancel` | Button | Esc / 东键 | +| `Pause` | Button | Esc / Start | +| `Point` | Value (Vector2) | 鼠标/触摸位置(UI 点击坐标) | + +--- + +## 4. InputBuffer — 输入缓冲 + +`InputBuffer` 是挂在 `PlayerController` 同一 GameObject 上的组件,不独立存在。 + +```csharp +// 路径: Assets/Scripts/Input/InputBuffer.cs +public class InputBuffer : MonoBehaviour +{ + // 各动作独立缓冲时长(与 Design/01 §4 缓冲时长配置表一致) + [SerializeField] private float _jumpBufferDuration = 0.15f; // 跳跃:宽容窗口 + [SerializeField] private float _attackBufferDuration = 0.12f; // 攻击:接续连段 + [SerializeField] private float _dashBufferDuration = 0.10f; // 冲刺:小量容错 + // 弹反 / UseSpring / SoulSkill / SpiritSkill 缓冲时长为 0s(不缓冲) + [SerializeField] private InputReaderSO _inputReader; + + // 各动作的缓冲计时器 + private float _jumpBuffer; + private float _attackBuffer; + private float _dashBuffer; + + private void Update() + { + // 每帧倒计时 + _jumpBuffer = Mathf.Max(0, _jumpBuffer - Time.deltaTime); + _attackBuffer = Mathf.Max(0, _attackBuffer - Time.deltaTime); + _dashBuffer = Mathf.Max(0, _dashBuffer - Time.deltaTime); + } + + // 检测(各 State 在 OnStateEnter 调用) + public bool ConsumeJump() { if (_jumpBuffer > 0) { _jumpBuffer = 0; return true; } return false; } + public bool ConsumeAttack() { if (_attackBuffer > 0) { _attackBuffer = 0; return true; } return false; } + public bool ConsumeDash() { if (_dashBuffer > 0) { _dashBuffer = 0; return true; } return false; } + + // 写入(订阅 InputReaderSO 事件) + private void OnEnable() + { + _inputReader.JumpStartedEvent += () => _jumpBuffer = _jumpBufferDuration; + _inputReader.AttackEvent += () => _attackBuffer = _attackBufferDuration; + _inputReader.DashEvent += () => _dashBuffer = _dashBufferDuration; + } + + private void OnDisable() + { + _inputReader.JumpStartedEvent -= () => _jumpBuffer = _jumpBufferDuration; + _inputReader.AttackEvent -= () => _attackBuffer = _attackBufferDuration; + _inputReader.DashEvent -= () => _dashBuffer = _dashBufferDuration; + } +} +``` + +**Coyote Time** 实现位于 `PlayerMovement`(不在此模块),见[05_PlayerModule.md](./05_PlayerModule.md)。 + +--- + +## 5. Action Map 切换规则 + +| 游戏状态(GameState) | 输入 Map | 调用方 | +|----------------------|---------|--------| +| `Initializing` / `LoadingScene` | `DisableAllInput()` | `GameManager`(订阅 EVT_GameStateChanged) | +| `MainMenu` | `EnableUIInput()` | `GameManager` | +| `Gameplay` / `BossFight` | `EnableGameplayInput()` | `GameManager` | +| `Paused` | `EnableUIInput()` | `GameManager` | +| `Dead` | `DisableAllInput()`,然后 DeathScreen 出现后 `EnableUIInput()` | `GameManager` | +| `Cutscene` | `DisableAllInput()` | `GameManager` / `CutsceneManager` | +| 对话(Dialogue)中 | `EnableUIInput()` | `DialogueManager`(对话开始/结束时调用)| + +--- + +## 6. 按键重绑定接口 + +```csharp +// InputReaderSO 提供的重绑定 API(供 SettingsPanel 调用) +public class InputReaderSO : ScriptableObject +{ + // 开始交互式重绑定(返回 RebindOperation,调用方负责 Dispose) + public InputActionRebindingExtensions.RebindingOperation + StartRebinding(string actionName, int bindingIndex, Action onComplete, Action onCancel); + + // 保存当前绑定覆盖(JSON)→ PlayerPrefs + public void SaveBindingOverrides(); + + // 从 PlayerPrefs 加载并应用绑定覆盖 + public void LoadBindingOverrides(); + + // 重置为默认绑定 + public void ResetBindings(); +} +``` + +### RebindPanel — 完整重绑定 UI + +```csharp +// 路径: Assets/Scripts/UI/Settings/RebindPanel.cs +// 设置界面中的完整按键重绑定面板 +// 每个可绑定 Action 对应一行 RebindActionRow +public class RebindPanel : MonoBehaviour +{ + [SerializeField] private InputReaderSO _inputReader; + [SerializeField] private RebindActionRow[] _rows; // Inspector 配置,顺序对应 HUD 布局 + [SerializeField] private Button _resetAllButton; + [SerializeField] private ConflictDetector _conflictDetector; + + private void Awake() + { + _resetAllButton.onClick.AddListener(OnResetAll); + foreach (var row in _rows) + row.Initialize(_inputReader, _conflictDetector, OnRebindRequested); + } + + private void OnRebindRequested(RebindActionRow row) + { + // 禁用其他行的交互,防止同时启动多个重绑定操作 + foreach (var r in _rows) r.SetInteractable(r == row); + row.StartRebind(onFinished: () => + { + foreach (var r in _rows) r.SetInteractable(true); + _inputReader.SaveBindingOverrides(); + }); + } + + private void OnResetAll() + { + _inputReader.ResetBindings(); + _inputReader.SaveBindingOverrides(); + foreach (var row in _rows) row.RefreshDisplay(); + } +} + +// 路径: Assets/Scripts/UI/Settings/RebindActionRow.cs +// 单行:Action 名 + 当前绑定显示 + 点击启动重绑定 +public class RebindActionRow : MonoBehaviour +{ + [SerializeField] private string _actionName; // Input Action 名称 + [SerializeField] private int _bindingIndex; // 0 = 主绑定,1 = 副绑定 + [SerializeField] private TMP_Text _actionLabel; + [SerializeField] private Button _bindButton; + [SerializeField] private TMP_Text _currentBindingText; + + private InputReaderSO _inputReader; + private ConflictDetector _conflictDetector; + private Action _onRebindRequested; + + public void Initialize( + InputReaderSO reader, + ConflictDetector detector, + Action onRequest) + { + _inputReader = reader; + _conflictDetector = detector; + _onRebindRequested = onRequest; + _bindButton.onClick.AddListener(() => _onRebindRequested?.Invoke(this)); + RefreshDisplay(); + } + + public void StartRebind(Action onFinished) + { + _currentBindingText.text = "按下新按键…"; + _inputReader.StartRebinding(_actionName, _bindingIndex, + onComplete: () => { RefreshDisplay(); CheckConflicts(); onFinished?.Invoke(); }, + onCancel: () => { RefreshDisplay(); onFinished?.Invoke(); }); + } + + public void RefreshDisplay() + { + var action = _inputReader.FindAction(_actionName); + _currentBindingText.text = action != null + ? InputControlPath.ToHumanReadableString( + action.bindings[_bindingIndex].effectivePath, + InputControlPath.HumanReadableStringOptions.OmitDevice) + : "—"; + } + + public void SetInteractable(bool interactable) => _bindButton.interactable = interactable; + + private void CheckConflicts() + { + var conflicts = _conflictDetector.FindConflicts(_inputReader.GetAllActionMap()); + // 高亮冲突行(通过 ConflictDetector 回调) + foreach (var row in FindObjectsOfType()) + row.SetConflictHighlight(conflicts.Contains(row._actionName)); + } + + public void SetConflictHighlight(bool conflict) + => _currentBindingText.color = conflict ? Color.red : Color.white; +} +``` + +### ConflictDetector — 冲突检测 + +```csharp +// 路径: Assets/Scripts/Input/ConflictDetector.cs +// 检测两个 Action 是否绑定了相同的按键路径 +public class ConflictDetector : MonoBehaviour +{ + // 返回存在冲突的 Action 名称集合 + public HashSet FindConflicts(IEnumerable actions) + { + var pathToActions = new Dictionary>(); + + foreach (var action in actions) + { + foreach (var binding in action.bindings) + { + if (binding.isComposite || string.IsNullOrEmpty(binding.effectivePath)) continue; + + if (!pathToActions.ContainsKey(binding.effectivePath)) + pathToActions[binding.effectivePath] = new List(); + pathToActions[binding.effectivePath].Add(action.name); + } + } + + var conflicted = new HashSet(); + foreach (var kv in pathToActions) + if (kv.Value.Count > 1) + foreach (var name in kv.Value) + conflicted.Add(name); + + return conflicted; + } +} +``` + +### RebindPersistence — 持久化绑定 + +```csharp +// InputReaderSO 内部的持久化实现(扩展上方 SaveBindingOverrides/LoadBindingOverrides) +// 序列化格式: PlayerPrefs key = "InputBindings", value = JSON 覆盖字符串 + +public partial class InputReaderSO : ScriptableObject +{ + private const string PrefKey = "InputBindings"; + + public void SaveBindingOverrides() + { + string json = _actions.asset.SaveBindingOverridesAsJson(); + PlayerPrefs.SetString(PrefKey, json); + PlayerPrefs.Save(); + } + + public void LoadBindingOverrides() + { + if (PlayerPrefs.HasKey(PrefKey)) + { + string json = PlayerPrefs.GetString(PrefKey); + _actions.asset.LoadBindingOverridesFromJson(json); + } + } + + public void ResetBindings() + { + _actions.asset.RemoveAllBindingOverrides(); + PlayerPrefs.DeleteKey(PrefKey); + } + + // 辅助:获取当前 Gameplay map 所有 InputAction(供 ConflictDetector 使用) + public IEnumerable GetAllActionMap() + => _actions.asset.FindActionMap("Gameplay").actions; +} +``` + +--- + +## 7. Persistent 场景挂载 + +`InputReaderSO` 本身是 ScriptableObject(Asset),不需要 GameObject 挂载。 +但 Unity InputSystem 的 `PlayerInput` 组件可选(InputReaderSO 直接 `new PlayerInputActions()` 即可,无需 `PlayerInput` 组件)。 + +``` +Scene: Persistent +└── InputReader (GameObject) + └── InputReaderInitializer.cs + ├── [SerializeField] InputReaderSO _inputReader + └── Awake(): + _inputReader.Initialize(); // 创建 PlayerInputActions 实例 + _inputReader.LoadBindingOverrides(); // 加载用户重映射 + _inputReader.EnableGameplayInput(); // 默认游戏play输入 +``` + +--- + +## 8. KeyDisplayNameResolver — 按键名本地化 + +`KeyDisplayNameResolver` 将 InputSystem 返回的英文按键路径名转换为本地化显示字符串,供 `RebindActionRow` 渲染到 UI。 + +```csharp +// 路径: Assets/Scripts/Input/KeyDisplayNameResolver.cs +public static class KeyDisplayNameResolver +{ + // 中文覆盖字典(键 = InputControlPath 的 Human-Readable 片段,值 = 中文显示名) + private static readonly Dictionary _overrides = new Dictionary + { + { "Space", "空格" }, + { "Enter", "回车" }, + { "Backspace", "退格" }, + { "Escape", "退出" }, + { "Left Arrow","←" }, + { "Right Arrow","→" }, + { "Up Arrow", "↑" }, + { "Down Arrow","↓" }, + { "Left Shift","左 Shift" }, + { "Right Shift","右 Shift" }, + { "Left Ctrl", "左 Ctrl" }, + { "Right Ctrl","右 Ctrl" }, + { "Left Alt", "左 Alt" }, + { "Right Alt", "右 Alt" }, + { "Tab", "Tab" }, + { "Caps Lock", "大写锁定" }, + }; + + /// + /// 将 effectivePath 转换为本地化显示字符串。 + /// 中文覆盖优先;未找到覆盖时回落到 InputControlPath.ToHumanReadableString。 + /// + public static string Resolve(string effectivePath) + { + if (string.IsNullOrEmpty(effectivePath)) return "—"; + + string human = InputControlPath.ToHumanReadableString( + effectivePath, + InputControlPath.HumanReadableStringOptions.OmitDevice); + + return _overrides.TryGetValue(human, out string localized) ? localized : human; + } +} +``` + +`RebindActionRow.RefreshDisplay()` 改为调用 `KeyDisplayNameResolver.Resolve()` 替代直接的 `ToHumanReadableString`: + +```csharp +_currentBindingText.text = KeyDisplayNameResolver.Resolve( + action.bindings[_bindingIndex].effectivePath); +``` diff --git a/Docs/Architecture/05_PlayerModule.md b/Docs/Architecture/05_PlayerModule.md new file mode 100644 index 0000000..3a8c6ee --- /dev/null +++ b/Docs/Architecture/05_PlayerModule.md @@ -0,0 +1,1714 @@ +# 05 · 玩家模块 + +> **命名空间** `BaseGames.Player`、`BaseGames.Player.States` +> **程序集** `BaseGames.Player`、`BaseGames.Player.States` +> **路径** `Assets/Scripts/Player/` +> **依赖** `BaseGames.Core`、`BaseGames.Input`、`BaseGames.Combat`、`BaseGames.Parry`、`Kybernetik.Animancer` + +--- + +## 目录 + +1. [Player Prefab 层级(完整)](#1-player-prefab-层级) +2. [PlayerController(协调器)](#2-playercontroller) +3. [PlayerMovement](#3-playermovement) +4. [PlayerStats](#4-playerstats) +5. [PlayerCombat](#5-playercombat) +6. [FormController](#6-formcontroller) +7. [WeaponManager](#7-weaponmanager) +8. [SkillManager](#8-skillmanager) +9. [SpringSystem](#9-springsystem) +10. [ParrySystem(见 CombatModule)](#10-parrysystem) +11. [FSM 状态基类与状态机](#11-fsm-状态基类与状态机) +12. [所有 State 类列表](#12-所有-state-类列表) +13. [关键 State 详细设计](#13-关键-state-详细设计) +14. [Animancer 动画系统](#14-animancer-动画系统) +15. [PlayerMovementConfigSO](#15-playermovementconfigso) +16. [PlayerStatsSO](#16-playerstatsso) +17. [PlayerAnimationConfigSO](#17-playeranimationconfigso) +18. [FormConfigSO](#18-formconfigso) +19. [InputBuffer — 输入缓冲系统](#19-inputbuffer--输入缓冲系统) +20. [FSMTransitionTableSO — 数据驱动状态跳转](#20-fsmtransitiontableso--数据驱动状态跳转) + +--- + +## 1. Player Prefab 层级 + +``` +Assets/Prefabs/Player/PLY_Player.prefab +│ +[PLY_Player] ← PlayerController + InputBuffer +├── PlayerMovement ← Rigidbody2D(Dynamic, Freeze Z) +├── PlayerStats +├── PlayerCombat +├── FormController +├── WeaponManager +├── SkillManager +├── SpringSystem +├── ParrySystem +├── AnimancerComponent ← Animancer Pro +├── [HurtBox] ← BoxCollider2D, IsTrigger, Layer: PlayerHurtBox +│ └── HurtBox.cs +├── [WeaponSocket] ← 空 Transform,武器 Prefab 实例化后挂载于此 +├── [SkillSocket] ← 空 Transform,技能 HitBox Prefab 实例化后挂载于此 +├── [Shield] ← ShieldComponent.cs(见 20_ShieldModule) +├── [Animation] ← PlayerAnimationEvents.cs(见 24_AnimEventModule) +├── [Feedback] ← PlayerFeedback.cs(实现 IFeedbackPlayer,见 18_VFXFeedbackModule) +└── SpriteRenderer +``` + +> **设计原则**:HitBox **固定挂载在 Player Prefab 上**(`PlayerCombat` 管理四向 HitBox:Ground / Up / Down / Air)。 +> `WeaponSO` 是纯数据 SO(不含 Prefab 引用),武器切换时 `PlayerCombat.RefreshWeaponData()` 自动 +> 刷新 HitBox 的 `DamageSource` 与尺寸覆盖,确保碰撞盒伤害属性完全由武器数据驱动。 +> 技能 HitBox 由 `SkillManager.ExecuteSkill()` 在 `[SkillSocket]` 处动态实例化(独立 Prefab)。 + +--- + +## 2. PlayerController + +```csharp +// 路径: Assets/Scripts/Player/PlayerController.cs +[RequireComponent(typeof(InputBuffer))] +public class PlayerController : MonoBehaviour +{ + // ──── Inspector 序列化引用(同 Prefab 内)──────────────────────────────── + [Header("Sub Components")] + [SerializeField] private PlayerMovement _movement; + [SerializeField] private PlayerStats _stats; + [SerializeField] private PlayerCombat _combat; + [SerializeField] private FormController _formController; + [SerializeField] private WeaponManager _weaponManager; + [SerializeField] private SkillManager _skillManager; + [SerializeField] private SpringSystem _springSystem; + [SerializeField] private ParrySystem _parrySystem; + [SerializeField] private AnimancerComponent _animancer; + [SerializeField] private IFeedbackPlayer _feedback; // [Feedback] 子节点实现 + [SerializeField] private HurtBox _hurtBox; + [SerializeField] private ShieldComponent _shield; // [Shield] 子节点,见 20_ShieldModule + + [Header("Config SOs")] + [SerializeField] private InputReaderSO _inputReader; + [SerializeField] private PlayerMovementConfigSO _movementConfig; + [SerializeField] private PlayerAnimationConfigSO _animConfig; + [SerializeField] private PlayerStatsSO _statsConfig; + [SerializeField] private FormConfigSO _formConfig; + + [Header("Event Channels - Raise")] + [SerializeField] private VoidEventChannelSO _onPlayerDied; + [SerializeField] private IntEventChannelSO _onHPChanged; + + // ──── 运行时 FSM 状态机 ────────────────────────────────────────────────── + private PlayerStateBase _currentState; + + // 预创建状态实例(避免 GC) + private IdleState _idleState; + private RunState _runState; + private JumpState _jumpState; + private FallState _fallState; + private DashState _dashState; + private AttackState _attackState; + private AirAttackState _airAttackState; + private HurtState _hurtState; + private DeadState _deadState; + private ParryState _parryState; + private WallSlideState _wallSlideState; + private SpringState _springState; + private SwimState _swimState; // 游泳状态(需 AbilityType.Swim 解锁) + // ... 更多状态 + + // ──── 公开只读属性(供 State 使用)──────────────────────────────────── + public PlayerMovement Movement => _movement; + public PlayerStats Stats => _stats; + public PlayerCombat Combat => _combat; + public FormController Form => _formController; + public WeaponManager Weapon => _weaponManager; + public SkillManager Skill => _skillManager; + public SpringSystem Spring => _springSystem; + public InputReaderSO Input => _inputReader; + public InputBuffer Buffer => _inputBuffer; // GetComponent 缓存 + public AnimancerComponent Animancer => _animancer; + public PlayerMovementConfigSO MovConfig => _movementConfig; + public PlayerAnimationConfigSO AnimConfig => _animConfig; + public bool IsGrounded => _movement.IsGrounded; + public int FacingDirection => _movement.FacingDirection; + public ShieldComponent Shield => _shield; // 供 UI / 技能判断护盾状态 + +### 2.1 State 上下文接口分组 + +> **架构决策(2026-05)**:PlayerController 将所有子系统统一暴露,任何状态都可访问任何子系统——这破坏了最小权限原则,并让 State 之间的隐式依赖难以追踪。改用接口分组后,每个 State 只声明它实际使用的接口,编译器强制隔离。PlayerController 同时实现所有接口,现有代码无需迁移。 + +```csharp +// 路径: Assets/Scripts/Player/StateContexts.cs +// 各状态按需依赖最小接口,PlayerController 统一实现 + +/// 与移动相关的上下文:地面检测、朝向、移动驱动 +public interface IMovementContext +{ + PlayerMovement Movement { get; } + PlayerMovementConfigSO MovConfig { get; } + bool IsGrounded { get; } + int FacingDirection { get; } +} + +/// 与战斗相关的上下文:武器、技能、特殊机制 +public interface ICombatContext +{ + PlayerCombat Combat { get; } + WeaponManager Weapon { get; } + SkillManager Skill { get; } + SpringSystem Spring { get; } + ShieldComponent Shield { get; } +} + +/// 与动画相关的上下文:Animancer + AnimConfig +public interface IAnimationContext +{ + AnimancerComponent Animancer { get; } + PlayerAnimationConfigSO AnimConfig { get; } +} + +/// 与输入相关的上下文:InputReader + InputBuffer +public interface IInputContext +{ + InputReaderSO Input { get; } + InputBuffer Buffer { get; } +} + +/// 与玩家属性相关的上下文:stats + 能力查询 +public interface IStatsContext +{ + PlayerStats Stats { get; } +} + +// PlayerController 统一实现所有接口(向后兼容,现有 State 通过 PlayerController 拿到任何子系统的路径仍有效) +public class PlayerController : MonoBehaviour, + IMovementContext, ICombatContext, IAnimationContext, IInputContext, IStatsContext +``` + +**State 推荐依赖声明**(在构造 / 注入时传入最小接口而非整个 PlayerController): + +| State 类 | 实际使用接口 | +|----------|------------| +| `IdleState` | `IMovementContext`, `IInputContext` | +| `RunState` | `IMovementContext`, `IInputContext`, `IAnimationContext` | +| `JumpState` | `IMovementContext`, `IInputContext`, `IAnimationContext`, `IStatsContext` | +| `AttackState` | `ICombatContext`, `IAnimationContext`, `IInputContext` | +| `ParryState` | `ICombatContext`, `IAnimationContext`, `IInputContext` | +| `HurtState` | `IMovementContext`, `IAnimationContext` | +| `DashState` | `IMovementContext`, `IStatsContext`, `IAnimationContext`, `IInputContext` | +| `SpringState` | `ICombatContext`, `IAnimationContext`, `IMovementContext` | +| `SwimState` | `IMovementContext`, `IInputContext`, `IAnimationContext` | + +> **渐进迁移策略**:新增 State 时直接依赖接口;已有 State 可在重构时逐步将 `PlayerController` 参数改为具体接口组合,不必一次全改。 + + // ──── 公开接口 ────────────────────────────────────────────────────────── + // 正常状态切换(各 State 调用,含优先级检查) + public void TryTransitionState(PlayerStateBase newState); + + // 强制切换(HurtBox/ParrySystem 调用,无视当前状态) + public void ForceState(PlayerStateBase newState); + + // 初始化(由 Awake 执行) + private void InitializeStates(); + private void Awake() + { + // ... 其他初始化 ... + _hurtBox.SetShieldable(_shield); // 将护盾注入 HurtBox,拦截伤害管线 + } + private void Update() => _currentState?.OnStateUpdate(); + private void FixedUpdate() => _currentState?.OnStateFixedUpdate(); + private void LateUpdate() => _movement.UpdateFacing(); +} +``` + +--- + +## 3. PlayerMovement + +```csharp +// 路径: Assets/Scripts/Player/PlayerMovement.cs +[RequireComponent(typeof(Rigidbody2D))] +public class PlayerMovement : MonoBehaviour +{ + [SerializeField] private PlayerMovementConfigSO _config; + + // ──── 内部状态 ────────────────────────────────────────────────────────── + private Rigidbody2D _rb; + private float _coyoteTimer; + private bool _isGrounded; + private bool _isWallLeft; + private bool _isWallRight; + private bool _onOneWayPlatform; + private int _facingDirection = 1; // +1 右, -1 左 + + // ──── 公开只读属性 ────────────────────────────────────────────────────── + public bool IsGrounded => _isGrounded; + public bool HasCoyoteTime => _coyoteTimer > 0; + public bool IsWallLeft => _isWallLeft; + public bool IsWallRight => _isWallRight; + public int FacingDirection => _facingDirection; + public Rigidbody2D Rb => _rb; + + // ──── 物理接口(供各 State 调用)──────────────────────────────────────── + public void Move(float speedX); // 设置水平速度,自动翻转 SpriteRenderer + public void Jump(bool isVariable = true); // 施加跳跃冲量(isVariable 允许 CutJump) + public void CutJump(); // 减半垂直速度(松开跳跃键调用) + public void Dash(Vector2 dir, float speed); // 施加冲刺速度(临时忽略重力) + public void ApplyKnockback(Vector2 dir, float force); + public void ZeroVelocity(); + public void ZeroHorizontalVelocity(); + public void SetGravityScale(float scale); // 下坠时增大重力用 + public void DropThroughPlatform(); // 单向平台向下穿越(短暂忽略 OneWay Layer) + + // ──── 检测(每帧 FixedUpdate 更新)────────────────────────────────────── + private void CheckGrounded(); // Physics2D.OverlapBox at feet + private void CheckWalls(); // 每侧发射两根射线(上/下偏移),均命中才算贴墙(防卡角) + // 由 PlayerWallDetector 组件封装,见 §3.1 + public void UpdateFacing(); // 根据速度方向更新 _facingDirection + SpriteRenderer.flipX + + // ──── 可取消帧窗口(Cancel Window)─────────────────────────────────────── + // 由 PlayerAnimationEvents 的 CancelWindowOpen / CancelWindowClose 事件驱动 + // (见 24_AnimEventModule §9) + private bool _cancelWindowOpen; + public bool CancelWindowOpen => _cancelWindowOpen; + public void SetCancelWindowOpen(bool open) => _cancelWindowOpen = open; + + // ──── 地面材质(脚步系统)───────────────────────────────────────── + // 由 FootstepSystem 读取(见 24_AnimEventModule §8) + public SurfaceType CurrentSurface { get; private set; } +} +``` + +### 物理参数来自 `PlayerMovementConfigSO`(见 §15)。 + +--- + +## 4. PlayerStats + +```csharp +// 路径: Assets/Scripts/Player/PlayerStats.cs +public class PlayerStats : MonoBehaviour +{ + [SerializeField] private PlayerStatsSO _config; + + // Event Channels(Raise 方) + [SerializeField] private IntEventChannelSO _onHPChanged; + [SerializeField] private IntEventChannelSO _onMaxHPChanged; + [SerializeField] private IntEventChannelSO _onSoulPowerChanged; + [SerializeField] private IntEventChannelSO _onSpiritPowerChanged; + [SerializeField] private IntEventChannelSO _onSpringChargesChanged; + [SerializeField] private IntEventChannelSO _onGeoChanged; + [SerializeField] private AbilityTypeEventChannelSO _onAbilityUnlocked; + [SerializeField] private VoidEventChannelSO _onPlayerDied; + + // ──── 运行时属性 ────────────────────────────────────────────────────── + public int CurrentHP { get; private set; } + public int MaxHP { get; private set; } + public int CurrentSoulPower { get; private set; } + public int MaxSoulPower { get; private set; } // = 100 + public int CurrentSpiritPower { get; private set; } + public int MaxSpiritPower { get; private set; } + public int CurrentSpringCharges { get; private set; } + public int MaxSpringCharges { get; private set; } + public int SpringKillPoints { get; private set; } + public int CurrentGeo { get; private set; } + public bool IsInvincible => _invincibleTimer > 0; + + private float _invincibleTimer; + private float _spiritRegenTimer; + private HashSet _unlockedAbilities = new(); + + // ──── HP ────────────────────────────────────────────────────────────── + public void TakeDamage(int amount); // 扣血 → 发布 EVT_HPChanged → 若 = 0 发布 EVT_PlayerDied + public void HealHP(int amount); // 回血(上限 MaxHP)→ 发布 EVT_HPChanged + + // ──── 能量资源 ───────────────────────────────────────────────────────── + public void AddSoulPower(int amount); // 灵力 +amount(上限 MaxSoulPower) + public bool ConsumeSoulPower(int amount); // 消耗灵力,返回是否足够 + public void AddSpiritPower(int amount); // 魄元 +amount(上限) + public bool ConsumeSpiritPower(int amount); // 消耗魄元,返回是否足够 + + // ──── 灵泉 ──────────────────────────────────────────────────────────── + public bool UseSpring(); // 消耗 1 次,返回是否成功(charges > 0) + public void RestoreSpringCharges(); // 恢复至 MaxSpringCharges(存档点触发) + public void AddKillPoints(int pts); // 击杀积分 → 自动检查是否增加 SpringCharges + + // ──── 货币 ──────────────────────────────────────────────────────────── + public void AddGeo(int amount); + public bool SpendGeo(int amount); // 返回是否足够 + + // ──── 无敌帧 ─────────────────────────────────────────────────────────── + public void BeginInvincibility(float duration); + + // ──── 能力 ──────────────────────────────────────────────────────────── + // 内部 bitmask(AbilityType [Flags] uint,见 09_ProgressionModule §1) + private AbilityType _unlockedAbilities = AbilityType.None; + + public bool HasAbility(AbilityType ability) => (_unlockedAbilities & ability) != 0; + public void UnlockAbility(AbilityType ability) + { + _unlockedAbilities |= ability; + _onAbilityUnlocked.Raise(ability); // AbilityTypeEventChannelSO(触发 AbilityGate 等监听) + } + public void LockAbility(AbilityType ability) => _unlockedAbilities &= ~ability; // NG+ 重置用 + + // ──── 存档集成 ───────────────────────────────────────────────────────── + public PlayerSaveData GetSaveData() + { + var d = new PlayerSaveData { /* ...其他字段... */ }; + d.AbilityFlags = (uint)_unlockedAbilities; // 位掩码直接赋值,无 ToString/字典开销 + return d; + } + public void LoadSaveData(PlayerSaveData data) + { + _unlockedAbilities = (AbilityType)data.AbilityFlags; + // ...其他字段加载... + } + + // ──── Update ─────────────────────────────────────────────────────────── + private void Update() + { + // 无敌帧倒计时 + if (_invincibleTimer > 0) _invincibleTimer -= Time.deltaTime; + // 魄元自动回复 + _spiritRegenTimer += Time.deltaTime; + if (_spiritRegenTimer >= 1f) + { + _spiritRegenTimer = 0; + AddSpiritPower(_config.SpiritRegenRate); + } + } +} +``` + +--- + +## 5. PlayerCombat + +```csharp +// 路径: Assets/Scripts/Player/PlayerCombat.cs +public class PlayerCombat : MonoBehaviour +{ + [SerializeField] private WeaponManager _weaponManager; + [SerializeField] private SkillManager _skillManager; + + // ── 玩家角色 Prefab 上的 HitBox(固定挂载,不依赖武器 Prefab)──────────── + [SerializeField] private HitBox _hitBoxGround; + [SerializeField] private HitBox _hitBoxUp; + [SerializeField] private HitBox _hitBoxDown; + [SerializeField] private HitBox _hitBoxAir; + + // ── 当前武器片段缓存(由 WeaponManager.OnWeaponChanged 触发刷新)───────── + private ClipTransition _attack1Clip, _attack2Clip, _attack3Clip; + private ClipTransition _airAttackClip, _upAttackClip, _downAttackClip; + + void OnEnable() + { + _weaponManager.OnWeaponChanged += RefreshWeaponData; + if (_weaponManager.ActiveWeapon != null) + RefreshWeaponData(_weaponManager.ActiveWeapon); + } + + void OnDisable() => _weaponManager.OnWeaponChanged -= RefreshWeaponData; + + void RefreshWeaponData(WeaponSO weapon) + { + if (weapon == null) return; + // 缓存动画片段 + _attack1Clip = weapon.attack1Clip; + _attack2Clip = weapon.attack2Clip; + _attack3Clip = weapon.attack3Clip; + _airAttackClip = weapon.airAttackClip; + _upAttackClip = weapon.upAttackClip; + _downAttackClip = weapon.downAttackClip; + // 刷新 HitBox DamageSource(初始段) + _hitBoxGround.SetDamageSource(weapon.attack1Source); + // 刷新 HitBox 尺寸(零向量 = 使用默认) + if (weapon.hitBoxSizeOverride != Vector2.zero) + _hitBoxGround.SetSizeOverride(weapon.hitBoxSizeOverride, weapon.hitBoxOffsetOverride); + else + _hitBoxGround.ClearSizeOverride(); + ResetCombo(); + } + + // AttackState 在每段攻击开始时调用,切换当前段 DamageSource + public void SetComboSegmentSource(ComboState segment) + { + WeaponSO w = _weaponManager.ActiveWeapon; + DamageSourceSO src = segment switch + { + ComboState.Attack1 => w?.attack1Source, + ComboState.Attack2 => w?.attack2Source, + ComboState.Attack3 => w?.attack3Source, + ComboState.AirAttack => w?.airAttackSource, + ComboState.UpAttack => w?.upAttackSource, + ComboState.DownAttack => w?.downAttackSource, + _ => null, + }; + if (src != null) _hitBoxGround.SetDamageSource(src); + } + + // ── HitBox 激活(供 AttackState / AnimationEvent 调用)───────────────── + public void EnableWeaponHitBox(AttackDirection dir) + => GetHitBox(dir)?.Activate(_weaponManager.ActiveWeapon?.GetSourceByDir(dir), transform); + + public void DisableWeaponHitBox(AttackDirection dir) + => GetHitBox(dir)?.Deactivate(); + + public void DisableAllWeaponHitBoxes() + { + _hitBoxGround?.Deactivate(); + _hitBoxUp?.Deactivate(); + _hitBoxDown?.Deactivate(); + _hitBoxAir?.Deactivate(); + } + + // ── 技能 HitBox 由 SkillManager.ExecuteSkill() 直接控制(见 §8)────────── + + // 命中回调 → 增加灵力 + internal void OnHitConfirmed(DamageInfo info) { /* 增加灵力 */ } + + private void ResetCombo() { /* 重置连击计数 */ } + + private HitBox GetHitBox(AttackDirection dir) => dir switch + { + AttackDirection.Ground => _hitBoxGround, + AttackDirection.Up => _hitBoxUp, + AttackDirection.Down => _hitBoxDown, + AttackDirection.Air => _hitBoxAir, + _ => null, + }; +} + +public enum AttackDirection { Ground, Up, Down, Air } + +/// 连击段枚举(供 SetComboSegmentSource 使用) +public enum ComboState { Attack1, Attack2, Attack3, AirAttack, UpAttack, DownAttack } +``` + +--- + +## 6. FormController + +> **参见** Design/53_WeaponSystem.md §4 — FormSO 结构说明 + +```csharp +// 路径: Assets/Scripts/Player/FormController.cs +public class FormController : MonoBehaviour +{ + [SerializeField] private FormConfigSO _config; + [SerializeField] private IntEventChannelSO _onFormChanged; // UI / Save 用(int 索引) + [SerializeField] private SkillManager _skillManager; + [SerializeField] private VoidEventChannelSO _onSkillSetChanged; // 通知 SkillHUD(见 09_ProgressionModule §11) + [SerializeField] private PaletteSwapSystem _paletteSwapSystem; // 见 18_VFXFeedbackModule §10 + + // ── 运行时状态 ──────────────────────────────────────────────────────── + public FormSO CurrentForm { get; private set; } + + /// + /// C# 事件:WeaponManager / SkillManager 订阅以响应形态切换。 + /// 不直接注入这些系统——它们在 OnEnable 中自行订阅。 + /// + public event Action OnFormChanged; + + /// 所有形态列表(来自 FormConfigSO.forms)。供 WeaponManager 枚举 override 时使用。 + public IReadOnlyList AllForms => _config.forms; + + // ── 公开 API ────────────────────────────────────────────────────────── + public void SwitchForm(FormSO newForm) + { + if (newForm == null || newForm == CurrentForm) return; + if (!IsFormUnlocked(newForm)) return; + + CurrentForm = newForm; + // ① 发布事件频道(UI/Save 监听) + _onFormChanged.Raise(_config.GetFormIndex(newForm)); + // ② 触发 C# 事件(WeaponManager / SkillManager 等系统监听) + OnFormChanged?.Invoke(); + // ③ 形态过场(调色板、技能集变更通知) + _paletteSwapSystem?.ApplyPalette(newForm.formAccentColor); + _skillManager?.UpdateSkillSet(newForm.soulSkill, newForm.spiritSkill1, newForm.spiritSkill2); + _onSkillSetChanged?.Raise(); + } + + public bool IsFormUnlocked(FormSO form) + => _config.IsUnlocked(form.formId); +} +``` + +### FormSO(形态数据 SO) + +```csharp +// 路径: Assets/ScriptableObjects/Player/Forms/Form_{Name}.asset +[CreateAssetMenu(menuName = "Player/Form")] +public class FormSO : ScriptableObject +{ + [Header("形态标识")] + public string formId; // "SkyForm" / "EarthForm" / "DeathForm" + public string displayName; // "天魂" / "地魂" / "命魂" + public Sprite formIcon; + public Color formAccentColor; // 天魂青色 / 地魂橙色 / 命魂紫色(拖尾/UI 染色) + + [Header("默认武器")] + /// FormAttackConfig(旧内联结构体)已废弃,其所有字段迁移至 WeaponSO。 + public WeaponSO defaultWeapon; + + [Header("技能配置")] + public SoulSpellSO soulSkill; + public FormSkillSO spiritSkill1; + public FormSkillSO spiritSkill2; +} +``` + +--- + +## 7. WeaponManager + +> **参见** Design/53_WeaponSystem.md §3 — 完整说明 +> HitBox 现挂载于**角色 Prefab**(`PlayerCombat` 管理),**不使用独立武器 Prefab**。`WeaponSO` 是纯数据 SO,不含 Prefab 引用。 + +```csharp +// 路径: Assets/Scripts/Player/WeaponManager.cs +public class WeaponManager : MonoBehaviour +{ + [SerializeField] private FormController _formController; + + /// 当前激活的武器 SO。PlayerCombat / AttackState 从此读取攻击数据。 + public WeaponSO ActiveWeapon { get; private set; } + + /// 武器切换时广播(PlayerCombat / VFX 监听) + public event Action OnWeaponChanged; + + // 护符注入的武器覆盖:Key = FormSO.formId,Value = 替换武器 + readonly Dictionary _overrides = new(); + + void Awake() + { + if (_formController.CurrentForm != null) + ApplyWeapon(_formController.CurrentForm); + } + + void OnEnable() => _formController.OnFormChanged += HandleFormChanged; + void OnDisable() => _formController.OnFormChanged -= HandleFormChanged; + + void HandleFormChanged() => ApplyWeapon(_formController.CurrentForm); + + void ApplyWeapon(FormSO form) + { + WeaponSO next = _overrides.TryGetValue(form.formId, out var ov) + ? ov + : form.defaultWeapon; + + if (next == ActiveWeapon) return; + ActiveWeapon = next; + OnWeaponChanged?.Invoke(next); + next?.vfxConfig.onEquipFeedback?.PlayFeedbacks(gameObject); + } + + // ─────────── 护符 Override API(由 WeaponOverrideEffect 调用)─────────── + + /// 为指定形态设置武器覆盖。formId 为空 = 覆盖所有形态。 + public void SetOverride(string formId, WeaponSO weapon) + { + if (string.IsNullOrEmpty(formId)) + foreach (var f in _formController.AllForms) _overrides[f.formId] = weapon; + else + _overrides[formId] = weapon; + ApplyWeapon(_formController.CurrentForm); + } + + /// 移除覆盖,恢复默认武器。formId 为空 = 移除所有形态覆盖。 + public void ClearOverride(string formId) + { + if (string.IsNullOrEmpty(formId)) + foreach (var f in _formController.AllForms) _overrides.Remove(f.formId); + else + _overrides.Remove(formId); + ApplyWeapon(_formController.CurrentForm); + } +} +``` + +### WeaponSO + +```csharp +// 路径: Assets/Scripts/Combat/WeaponSO.cs +// 资产路径: Assets/ScriptableObjects/Combat/Weapons/Weapon_{Name}.asset +[CreateAssetMenu(menuName = "Combat/Weapon")] +public class WeaponSO : ScriptableObject +{ + [Header("基础信息")] + public string weaponId; // 全局唯一 ID,如 "Weapon_SkyBlade" + public string displayName; // "天裂刃" + public Sprite icon; + public WeaponType weaponType; + + [Header("连击动画(Animancer ClipTransition)")] + public ClipTransition attack1Clip; + public ClipTransition attack2Clip; + public ClipTransition attack3Clip; + public ClipTransition airAttackClip; + public ClipTransition upAttackClip; + public ClipTransition downAttackClip; + + [Header("伤害来源(每段独立 DamageSourceSO)")] + public DamageSourceSO attack1Source; + public DamageSourceSO attack2Source; + public DamageSourceSO attack3Source; + public DamageSourceSO airAttackSource; + public DamageSourceSO upAttackSource; + public DamageSourceSO downAttackSource; + + [Header("HitBox 配置")] + /// 零向量 = 使用 PlayerCombat 中的默认尺寸 + public Vector2 hitBoxSizeOverride; + public Vector2 hitBoxOffsetOverride; + + [Header("武器特效")] + public WeaponVFXConfig vfxConfig; + + /// 根据攻击方向返回对应 DamageSourceSO(便捷方法) + public DamageSourceSO GetSourceByDir(AttackDirection dir) => dir switch + { + AttackDirection.Ground => attack1Source, // ground 当前段由 SetComboSegmentSource 动态切换 + AttackDirection.Up => upAttackSource, + AttackDirection.Down => downAttackSource, + AttackDirection.Air => airAttackSource, + _ => null, + }; +} + +public enum WeaponType +{ + SkyBlade, // 天魂:裂空刃(高频轻击) + EarthHammer, // 地魂:地震锤(低频重击,范围大) + LifeScythe, // 命魂:命镰(穿透,直线斩) + Custom, // 护符替换或未来扩展武器 +} + +[Serializable] +public class WeaponVFXConfig +{ + [Tooltip("切换到此武器时播放的特效(形态切换音效/粒子)")] + public FeedbackPresetSO onEquipFeedback; + + [Tooltip("武器挥斩拖尾 Prefab(null = 不显示拖尾)")] + public GameObject weaponTrailPrefab; + + public Color trailColor = Color.white; + + [Tooltip("命中特效类型覆盖(null = 使用 DamageSourceSO.HitFxType)")] + public HitFxType? hitFxOverride; +} +``` + +### WeaponOverrideEffect(护符效果,位于装备系统) + +```csharp +// 路径: Assets/Scripts/Equipment/CharmEffects/WeaponOverrideEffect.cs +// 见 Design/53_WeaponSystem.md §6 及 17_EquipmentSystem §3 +namespace BaseGames.Equipment +{ + [Serializable] + public class WeaponOverrideEffect : ICharmEffect + { + [Tooltip("目标形态 ID(留空 = 所有形态)")] + public string targetFormId; + + [Tooltip("替换武器 SO")] + public WeaponSO replacementWeapon; + + public void OnEquip(EquipmentContext ctx) + => ctx.WeaponMgr.SetOverride(targetFormId, replacementWeapon); + + public void OnUnequip(EquipmentContext ctx) + => ctx.WeaponMgr.ClearOverride(targetFormId); + + public string GetEffectDescription() + { + string formStr = string.IsNullOrEmpty(targetFormId) ? "所有形态" : targetFormId; + string wName = replacementWeapon != null ? replacementWeapon.displayName : "null"; + return $"{formStr}的武器替换为 [{wName}]"; + } + } +} +// EquipmentContext 需新增 WeaponManager WeaponMgr 字段(见 17_EquipmentSystem §3) +``` + +--- + +## 8. SkillManager + +```csharp +// 路径: Assets/Scripts/Player/SkillManager.cs +public class SkillManager : MonoBehaviour +{ + [SerializeField] private InputReaderSO _inputReader; + [SerializeField] private PlayerStats _stats; + [SerializeField] private FormConfigSO _formConfig; + + // 魂技能(消耗灵力) + private void OnSoulSkill(); // 根据 CurrentForm 从 FormConfigSO 获取 SoulSpellSO 并执行 + + // 魄技能(消耗魄元) + private void OnSpiritSkill1Started(); + private void OnSpiritSkill1Cancelled(); + private void OnSpiritSkill2Started(); + private void OnSpiritSkill2Cancelled(); +} +``` + +--- + +## 9. SpringSystem + +```csharp +// 路径: Assets/Scripts/Player/SpringSystem.cs +// 灵泉(快速回血物品,使用次数有限) +public class SpringSystem : MonoBehaviour +{ + [SerializeField] private PlayerStats _stats; + [SerializeField] private PlayerController _controller; + [SerializeField] private VoidEventChannelSO _onSpringUsed; // 触发 SpringState + + // 由 InputReader 触发 + public void TryUseSpring(); // 检查 charges > 0 且 _stats.ConsumeSoulPower(触发消耗) → ForceState(SpringState) +} +``` + +--- + +## 10. ParrySystem + +见 [06_CombatModule.md](./06_CombatModule.md) §4。 + +--- + +## 11. FSM 状态基类与状态机 + +```csharp +// 路径: Assets/Scripts/Player/States/PlayerStateBase.cs +public abstract class PlayerStateBase +{ + protected PlayerController _owner; + + // 构造时注入 Controller + protected PlayerStateBase(PlayerController owner) => _owner = owner; + + public virtual void OnStateEnter() { } + public virtual void OnStateUpdate() { } + public virtual void OnStateFixedUpdate() { } + public virtual void OnStateExit() { } + + // 便捷属性 + protected InputReaderSO Input => _owner.Input; + protected InputBuffer Buffer => _owner.Buffer; + protected PlayerMovement Move => _owner.Movement; + protected PlayerStats Stats => _owner.Stats; + protected AnimancerComponent Anim => _owner.Animancer; + protected PlayerMovementConfigSO Cfg => _owner.MovConfig; +} +``` + +--- + +## 12. 所有 State 类列表 + +| 类名 | 命名空间 | 触发条件 | 退出条件 | +|------|---------|---------|---------| +| `IdleState` | States | 落地 + 无输入 | 有移动输入 / 跳跃 / 攻击 / 冲刺 | +| `RunState` | States | 落地 + 水平输入 | 停止输入 / 跳跃 / 攻击 / 冲刺 | +| `JumpState` | States | 地面 Jump 输入(或 CoyoteTime 内) | 速度 ≤ 0(→ FallState) | +| `FallState` | States | 离地 + 下落 | 落地 / 跳跃缓冲(已有缓冲则跳跃) | +| `DashState` | States | Dash 输入(有冲刺解锁) | 冲刺时长结束 | +| `AerialDashState` | States | 空中 Dash 输入 | 冲刺时长结束 | +| `AttackState` | States | 地面 Attack 输入 | 动画完成 / 连击超时 | +| `AirAttackState` | States | 空中 Attack 输入 | 动画完成 | +| `UpAttackState` | States | 地面 UpAttack 输入 | 动画完成 | +| `DownAttackState` | States | 空中 DownAttack(Pogo)输入 | 动画完成 | +| `HurtState` | States | HurtBox.ReceiveDamage(ForceState) | 硬直时长结束 | +| `DeadState` | States | PlayerStats.HP = 0(ForceState) | 永不自动退出 | +| `ParryState` | States | Parry 输入 | 弹反窗口关闭 | +| `WallSlideState` | States | 空中 + 贴墙 + 下落 | 离墙 / 跳跃 | +| `WallJumpState` | States | WallSlide 中 Jump 输入 | 速度方向改变 | +| `SpringState` | States | SpringSystem.TryUseSpring(ForceState) | 回血动画完成 | +| `CutsceneState` | States | CutsceneManager 触发 | EVT_CutsceneEnded | +| `SwimState` | States | `EVT_LiquidEntered` + `abilities.swim == true` | `EVT_LiquidExited` / 离开液体区域 | + +--- + +## 13. 关键 State 详细设计 + +### AttackState(连击链) + +```csharp +public class AttackState : PlayerStateBase +{ + private int _comboStep = 0; // 当前连击步(0-based,最大 2 = 三段连击) + private float _comboTimer; // 连击窗口倒计时 + private float _cancelWindowEnd; // 允许接受下一击输入的时间窗口 + private bool _nextAttackBuffered; + + // 最大连击段数由 WeaponSO 决定(若 attack3Clip 为 null 则最大 2 段) + private int MaxComboSteps => GetMaxCombo(_owner.Weapon.ActiveWeapon); + + private static int GetMaxCombo(WeaponSO w) + { + if (w == null) return 1; + if (w.attack3Clip?.Clip != null) return 3; + if (w.attack2Clip?.Clip != null) return 2; + return 1; + } + + public override void OnStateEnter() + { + var weapon = _owner.Weapon.ActiveWeapon; + // 根据当前连击段切换 DamageSource 并播放对应片段 + var segment = _comboStep switch { 0 => ComboState.Attack1, 1 => ComboState.Attack2, _ => ComboState.Attack3 }; + _owner.Combat.SetComboSegmentSource(segment); + + var clip = _comboStep switch { 0 => weapon?.attack1Clip, 1 => weapon?.attack2Clip, _ => weapon?.attack3Clip }; + if (clip != null) Anim.Play(clip); + + _owner.Combat.EnableWeaponHitBox(AttackDirection.Ground); // AnimationEvent 控制开关更精确时改为 AnimEvent + + var src = _comboStep switch + { + 0 => weapon?.attack1Source, 1 => weapon?.attack2Source, _ => weapon?.attack3Source + }; + _comboTimer = src?.ComboWindowDuration ?? 0.5f; + _cancelWindowEnd = src?.CancelWindowEnd ?? 0f; + } + + public override void OnStateUpdate() + { + _comboTimer -= Time.deltaTime; + + // 在取消窗口内检测下一击输入 + if (Time.time < _cancelWindowEnd && Buffer.ConsumeAttack()) + _nextAttackBuffered = true; + + // 动画播放完毕 + if (!Anim.IsPlaying) + { + if (_nextAttackBuffered && _comboStep < MaxComboSteps - 1) + { + _comboStep++; + _nextAttackBuffered = false; + OnStateEnter(); // 继续连击 + } + else + { + _comboStep = 0; + _owner.TryTransitionState(_owner.IsGrounded ? (PlayerStateBase)_idleState : _fallState); + } + } + + // 连击窗口超时 + if (_comboTimer <= 0) _comboStep = 0; + } + + public override void OnStateExit() => _owner.Combat.DisableAllWeaponHitBoxes(); +} +``` + +### HurtState + +```csharp +public class HurtState : PlayerStateBase +{ + private float _stunTimer; + + public void Configure(DamageInfo info) // ForceState 前由 HurtBox 调用 + { + _stunTimer = info.HitStunDuration; + } + + public override void OnStateEnter() + { + Move.ApplyKnockback(info.KnockbackDirection, info.KnockbackForce); + Move.ZeroHorizontalVelocity(); + Stats.BeginInvincibility(Stats.InvincibilityDuration); + Anim.Play(_owner.AnimConfig.HurtClip); + } + + public override void OnStateUpdate() + { + _stunTimer -= Time.deltaTime; + if (_stunTimer <= 0) + _owner.TryTransitionState(Move.IsGrounded ? (PlayerStateBase)_idleState : _fallState); + } +} +``` + +--- + +### WallSlideState(贴墙下滑) + +```csharp +// 进入条件:空中 + 贴墙(PlayerWallDetector.IsTouchingWall)+ 下落速度 < 0 +// 退出条件:离墙 / 跳跃输入 / 落地 +public class WallSlideState : PlayerStateBase +{ + private float _wallGrabY; // 进入贴墙时的 Y 坐标,用于防无限蹬墙 + + public override void OnStateEnter() + { + _wallGrabY = _owner.transform.position.y; + Move.SetGravityScale(0f); // 关闭重力,自行控制下滑速度 + Anim.Play(_clips.WallSlide); + } + + public override void OnStateUpdate() + { + // 防无限蹬墙:如果高度超出进入时超过阈值,立即离墙 + float heightGain = _owner.transform.position.y - _wallGrabY; + if (heightGain > _config.WallGrabMaxHeightGain) + { + _owner.TryTransitionState(_fallState); + return; + } + + // 贴墙下滑(固定向下速度) + Move.SetVelocityY(-_config.WallSlideSpeed); + + // 跳跃输入 → WallJumpState + if (Input.Jump.WasPressedThisFrame()) + { + _owner.TryTransitionState(_wallJumpState); + return; + } + + // 离墙检查(PlayerWallDetector 刷新结果) + if (!_owner.WallDetector.IsTouchingWall || Move.IsGrounded) + _owner.TryTransitionState(_fallState); + } + + public override void OnStateExit() + { + Move.SetGravityScale(_config.DefaultGravityScale); // 恢复重力 + } +} +``` + +**PlayerWallDetector**(独立组件,保持 PlayerMovement 整洁): + +```csharp +// 路径: Assets/Scripts/Player/PlayerWallDetector.cs +// 每 FixedUpdate 发射双射线(TopRay + BottomRay);两根均命中才判定为贴墙 +[RequireComponent(typeof(PlayerMovement))] +public class PlayerWallDetector : MonoBehaviour +{ + [SerializeField] private PlayerMovementConfigSO _config; + + public bool IsTouchingWall { get; private set; } + public int WallDirection { get; private set; } // +1 = 右墙,-1 = 左墙 + + private void FixedUpdate() + { + bool rightWall = CheckSide(Vector2.right); + bool leftWall = CheckSide(Vector2.left); + + IsTouchingWall = rightWall || leftWall; + WallDirection = rightWall ? 1 : leftWall ? -1 : 0; + } + + // 每侧发两根射线(TopRay + BottomRay),两根均命中才返回 true + private bool CheckSide(Vector2 dir) + { + Vector2 center = transform.position; + float len = _config.WallRayLength; + float oy = _config.WallRayOffsetY; + int layer = LayerMask.GetMask("Wall"); // Layer 10(见 06_CombatModule §12) + + bool top = Physics2D.Raycast(center + Vector2.up * oy, dir, len, layer); + bool bot = Physics2D.Raycast(center + Vector2.down * oy, dir, len, layer); + return top && bot; + } +} +``` + +--- + +### WallJumpState(蹬墙跳) + +两种跳跃类型(根据玩家输入方向自动判断): + +| 类型 | 条件 | 水平速度 | 垂直速度 | 说明 | +|------|------|----------|----------|------| +| **背墙跳**(Wall-bounce) | 无水平输入 / 同向输入 | `WallJumpBackForceX`(同向) | `WallJumpForceY` | 沿墙弹出,常用于小幅度调整 | +| **对墙跳**(Wall-fly) | 反向输入 | `WallJumpAwayForceX`(反向) | `WallJumpAwayForceY` | 快速飞离墙壁,有短暂输入锁定 | + +```csharp +public class WallJumpState : PlayerStateBase +{ + private float _inputLockTimer; // 对墙跳后短暂锁定水平输入 + private int _jumpDirection; // 起跳时的墙壁方向(-1/+1) + + public override void OnStateEnter() + { + _jumpDirection = _owner.WallDetector.WallDirection; + float inputX = Input.Move.x; + + bool isWallFly = (inputX != 0) && (Mathf.Sign(inputX) != Mathf.Sign(_jumpDirection)); + + if (isWallFly) + { + // 对墙跳:反向飞出 + 短暂水平输入锁 + Move.SetVelocity(new Vector2(-_jumpDirection * _config.WallJumpAwayForceX, + _config.WallJumpAwayForceY)); + _inputLockTimer = _config.WallJumpInputLockDuration; + } + else + { + // 背墙跳:同向弹出 + Move.SetVelocity(new Vector2(-_jumpDirection * _config.WallJumpBackForceX, + _config.WallJumpForceY)); + _inputLockTimer = 0f; + } + + Anim.Play(_clips.Jump); + } + + public override void OnStateUpdate() + { + _inputLockTimer -= Time.deltaTime; + bool canControl = _inputLockTimer <= 0f; + + if (canControl) + { + float inputX = Input.Move.x; + Move.ApplyHorizontalAcceleration(inputX); // 恢复正常空中操控 + } + + // 松开跳跃键 → 截断跳跃 + if (Input.Jump.WasReleasedThisFrame()) + Move.CutJump(); + + // 转为下落状态 + if (Move.Velocity.y < 0) + _owner.TryTransitionState(_fallState); + } +} +``` + +--- + +玩家使用 **Animancer Pro** 的 `AnimancerComponent`,采用**双层动画**模式: + +| 层 | 作用 | 示例 | +|----|------|------| +| Base Layer(0) | 全身状态动画(移动/攻击/受伤/死亡) | Idle、Run、Attack_01 | +| Overlay Layer(1) | 上半身叠加层(边移动边施法) | SoulSpell、UseSpring | + +每个 AnimancerState 对应一个 `AnimationClip`,由 `PlayerAnimationConfigSO` 统一配置。 + +--- + +## 15. PlayerMovementConfigSO + +```csharp +[CreateAssetMenu(menuName = "Player/MovementConfig")] +public class PlayerMovementConfigSO : ScriptableObject +{ + [Header("Ground Movement")] + public float RunSpeed = 7f; + public float Acceleration = 50f; + public float Deceleration = 80f; + + [Header("Jump")] + public float JumpForce = 18f; + public float CoyoteTime = 0.12f; // 秒 + public float FallGravityMult = 2.5f; // 下落时额外重力倍率 + public float MaxFallSpeed = 20f; + + [Header("Dash")] + public float DashSpeed = 20f; + public float DashDuration = 0.18f; // 秒 + public float DashCooldown = 0.4f; // 秒 + public int MaxAerialDashes = 1; // 空中冲刺次数(升级后可增加) + + [Header("Wall")] + public float WallSlideSpeed = 2f; + public float WallJumpForceX = 12f; + public float WallJumpForceY = 16f; + + [Header("Wall — 检测")] + public float WallRayLength = 0.55f; // 墙壁射线长度 + public float WallRayOffsetY = 0.2f; // 上/下两根射线相对中心的 Y 偏移(双射线检测) + + [Header("Wall — WallGrab")] + public float WallGrabMaxHeightGain = 0.5f; // 允许的最大垂直高度增益(防无限蹬墙) + public float WallGrabReleaseDelay = 0.08f; // 离开墙面后的延迟释放(避免误判) + + [Header("Wall — WallJump")] + public float WallJumpBackForceX = 14f; // 背墙跳(同向)水平速度 + public float WallJumpAwayForceX = 10f; // 对墙跳(反向)水平速度 + public float WallJumpAwayForceY = 18f; // 对墙跳垂直速度 + public float WallJumpInputLockDuration = 0.15f; // 对墙跳后短暂锁定水平输入(防立即转向) +} +``` + +--- + +## 16. PlayerStatsSO + +```csharp +[CreateAssetMenu(menuName = "Player/Stats")] +public class PlayerStatsSO : ScriptableObject +{ + [Header("HP")] + public int MaxHP = 5; // 初始心脏容器数 × 2(半格为1) + + [Header("Soul Power")] + public int MaxSoulPower = 100; + + [Header("Spirit Power")] + public int MaxSpiritPower = 100; + public int SpiritRegenRate = 5; // 每秒回复量 + + [Header("Spring")] + public int MaxSpringCharges = 3; // 初始灵泉次数上限 + public int SpringHealAmount = 2; // 每次回复 HP 量(半格) + public int SpringKillThreshold = 4; // 增加 1 次灵泉所需击杀点数 + + [Header("Invincibility")] + public float InvincibilityDuration = 0.6f; + + [Header("Geo")] + public int InitialGeo = 0; +} +``` + +--- + +## 17. PlayerAnimationConfigSO + +```csharp +[CreateAssetMenu(menuName = "Player/AnimationConfig")] +public class PlayerAnimationConfigSO : ScriptableObject +{ + [Header("Base Layer Clips")] + public AnimationClip Idle; + public AnimationClip Run; + public AnimationClip Jump; + public AnimationClip Fall; + public AnimationClip Dash; + public AnimationClip WallSlide; + public AnimationClip Hurt; + public AnimationClip Dead; + public AnimationClip UseSpring; + + [Header("Attack Combo Clips(按连击序索引)")] + public AnimationClip[] GroundAttacks; // [0] = combo1, [1] = combo2, [2] = combo3 + public AnimationClip AirAttack; + public AnimationClip UpAttack; + public AnimationClip DownAttack; // Pogo + + [Header("Parry")] + public AnimationClip ParryStart; + public AnimationClip ParrySuccess; + + // 根据连击步获取动画 + public AnimationClip GetAttackClip(int step) => + step < GroundAttacks.Length ? GroundAttacks[step] : GroundAttacks[^1]; +} +``` + +--- + +## 18. FormConfigSO + +```csharp +[CreateAssetMenu(menuName = "Player/FormConfig")] +public class FormConfigSO : ScriptableObject +{ + [Header("形态列表(按解锁顺序排列)")] + // forms[0] = 天魂, forms[1] = 地魂, forms[2] = 命魂 + // 每个 FormSO 包含:formId / displayName / formIcon / formAccentColor + // defaultWeapon / soulSkill / spiritSkill1 / spiritSkill2 + public FormSO[] forms; + + [Header("初始解锁状态")] + // 与 forms[] 对应:true = 初始解锁,false = 需要在游戏内解锁 + public bool[] initialUnlocked; // initialUnlocked[0] = true(天魂初始解锁) + + // ── 编辑器便利方法 ───────────────────────────────────────────────────── + public int GetFormIndex(FormSO form) + { + for (int i = 0; i < forms.Length; i++) + if (forms[i] == form) return i; + return -1; + } + + public bool IsUnlocked(string formId) + { + for (int i = 0; i < forms.Length; i++) + if (forms[i].formId == formId) return i < initialUnlocked.Length && initialUnlocked[i]; + return false; + } +} +``` + +> **旧字段(`SkyFormSoulSpell` / `EarthFormSoulSpell` 等独立字段)已迁移至各 `FormSO` 的 `soulSkill` / `spiritSkill1` / `spiritSkill2` 字段中。** + +--- + +## 19. InputBuffer — 输入缓冲系统 + +> **P2 优化**:原 `InputBuffer` 的缓冲窗口时长硬编码为 `0.1f`,无障碍需求(高延迟玩家、手残模式)或竞技模式(精确 0 容忍)无法调整。将缓冲时长提取至 `AccessibilitySettingsSO`,运行时可动态覆盖。 + +```csharp +// 路径: Assets/Scripts/Player/Input/InputBuffer.cs +namespace BaseGames.Player +{ + /// + /// 单帧输入缓冲系统:记录"提前输入的指令",在接受窗口开启时消费。 + /// 典型用例:攻击收招前 0.1s 内按下跳跃 → 收招结束后立即起跳。 + /// + public class InputBuffer : MonoBehaviour + { + // ── 配置 ────────────────────────────────────────────────────────── + /// + /// 缓冲窗口基准时长(秒)。由 AccessibilitySettingsSO 在初始化时注入, + /// 默认 0.1f,无障碍模式最高可扩展至 0.3f。 + /// + [SerializeField, Min(0f), Tooltip("基准缓冲时长(秒),AccessibilitySettingsSO 会覆盖此值")] + private float _baseDuration = 0.1f; + + /// 运行时有效缓冲时长 = _baseDuration × AccessibilityMultiplier。 + private float _effectiveDuration; + + // ── 运行时状态 ──────────────────────────────────────────────────── + private InputActionType _bufferedAction; + private float _bufferExpiry; // Time.time 过期时刻 + + // ── 初始化 ──────────────────────────────────────────────────────── + public void Initialize(AccessibilitySettingsSO accessibility) + { + _effectiveDuration = _baseDuration * + (accessibility != null ? accessibility.InputBufferMultiplier : 1f); + } + + // ── 写入(InputReaderSO 事件回调中调用)────────────────────────── + public void Buffer(InputActionType action) + { + _bufferedAction = action; + _bufferExpiry = Time.time + _effectiveDuration; + } + + // ── 读取 & 消费(State.OnEnter / State.OnUpdate 中调用)────────── + /// 若缓冲指令与 匹配且未过期,消费并返回 true。 + public bool ConsumeIfMatch(InputActionType expected) + { + if (_bufferedAction == expected && Time.time <= _bufferExpiry) + { + _bufferedAction = InputActionType.None; + _bufferExpiry = 0f; + return true; + } + return false; + } + + /// 无条件清除缓冲(状态切换时调用,防止残留输入污染新状态)。 + public void Clear() + { + _bufferedAction = InputActionType.None; + _bufferExpiry = 0f; + } + } +} +``` + +**`AccessibilitySettingsSO` 相关字段**: + +```csharp +// 路径: Assets/Scripts/Core/Settings/AccessibilitySettingsSO.cs(新增字段) +[CreateAssetMenu(menuName = "Settings/AccessibilitySettings")] +public class AccessibilitySettingsSO : ScriptableObject +{ + [Header("输入辅助")] + [SerializeField, Range(0.5f, 3.0f), + Tooltip("输入缓冲时长倍率。1.0 = 标准;2.0 = 宽松模式(约 0.2s 缓冲);0.5 = 精确模式")] + public float InputBufferMultiplier = 1.0f; +} +``` + +**初始化时机**:`PlayerController.Awake()` 中调用 `_inputBuffer.Initialize(_accessibilitySettings)`,`_accessibilitySettings` 通过 `[SerializeField]` 注入。 + +**缓冲时长参考值**: + +| 模式 | `InputBufferMultiplier` | 有效缓冲时长 | +|------|------------------------|-------------| +| 标准(默认) | `1.0` | 100ms | +| 无障碍宽松 | `2.0` | 200ms | +| 无障碍超宽松 | `3.0` | 300ms | +| 精确 / 竞技 | `0.5` | 50ms | + +--- + +## 20. FSMTransitionTableSO — 数据驱动状态跳转 + +> **P1 优化**:当前 `PlayerStateMachine` 内各 State 的 `OnStateUpdate()` 里硬编码 +> `if (condition) _sm.ChangeState(new XxxState(_owner))` 跳转逻辑, +> 增减状态时需修改多个类,设计师无法通过 Inspector 调整跳转优先级。 +> 引入 `FSMTransitionTableSO`,将跳转规则外化为可配置资产, +> 实现 "0 代码改动增加新跳转条件" 的设计师友好工作流。 + +### 20.1 数据结构 + +```csharp +// 路径: Assets/Scripts/Player/FSM/FSMTransitionTableSO.cs +[CreateAssetMenu(menuName = "Player/FSM Transition Table")] +public class FSMTransitionTableSO : ScriptableObject +{ + [System.Serializable] + public struct TransitionDefinition + { + [Tooltip("从哪个状态触发(空 = 任意状态)")] + public string FromState; // 类型名,如 "IdleState" + + [Tooltip("跳转到哪个状态")] + public string ToState; // 类型名,如 "JumpState" + + [Tooltip("触发条件(与条件注册表中的键对应)")] + public string Condition; // 如 "JumpPressed", "Grounded" + + [Tooltip("优先级,数值越高越优先(默认 0,负数表示最低优先级)")] + public int Priority; + + [Tooltip("是否覆盖同方向的硬编码跳转(true = 本 SO 优先;false = 仅作为补充)")] + public bool Override; + } + + public TransitionDefinition[] Transitions; +} +``` + +### 20.2 条件注册表 + +```csharp +// 路径: Assets/Scripts/Player/FSM/FSMConditionRegistry.cs +/// +/// 静态条件函数注册中心。 +/// 条件函数在 PlayerController.Awake() 中注册,保证初始化顺序。 +/// +public static class FSMConditionRegistry +{ + // key = 条件名(与 TransitionDefinition.Condition 对应) + // value = 谓词,接收 PlayerController 上下文,返回是否满足 + private static readonly Dictionary> _conditions = new(); + + public static void Register(string key, Func predicate) + => _conditions[key] = predicate; + + public static bool Evaluate(string key, PlayerController ctx) + => _conditions.TryGetValue(key, out var fn) && fn(ctx); +} +``` + +**内置条件(PlayerController.Awake() 中注册):** + +```csharp +// PlayerController.Awake() — 注册基础条件 +void RegisterDefaultConditions() +{ + FSMConditionRegistry.Register("JumpPressed", ctx => ctx.Buffer.WasPressed(InputAction.Jump)); + FSMConditionRegistry.Register("Grounded", ctx => ctx.Movement.IsGrounded); + FSMConditionRegistry.Register("Airborne", ctx => !ctx.Movement.IsGrounded); + FSMConditionRegistry.Register("DashPressed", ctx => ctx.Buffer.WasPressed(InputAction.Dash)); + FSMConditionRegistry.Register("AttackPressed", ctx => ctx.Buffer.WasPressed(InputAction.Attack)); + FSMConditionRegistry.Register("MoveInputActive", ctx => Mathf.Abs(ctx.Input.Move.x) > 0.1f); + FSMConditionRegistry.Register("NoMoveInput", ctx => Mathf.Abs(ctx.Input.Move.x) <= 0.1f); + FSMConditionRegistry.Register("FallVelocity", ctx => ctx.Movement.Velocity.y < -0.5f); + // 扩展:技能解锁条件 + FSMConditionRegistry.Register("WallSlideUnlocked", + ctx => ctx.Stats.HasAbility(AbilityType.WallSlide)); +} +``` + +### 20.3 PlayerStateMachine 集成 + +```csharp +// PlayerStateMachine.cs — 改动(最小侵入) +public class PlayerStateMachine +{ + private readonly PlayerController _owner; + private FSMTransitionTableSO _transitionTable; // 可选,可为 null + private PlayerStateBase _currentState; + + // 构造时可选注入 TransitionTable + public PlayerStateMachine(PlayerController owner, FSMTransitionTableSO table = null) + { + _owner = owner; + _transitionTable = table; + } + + public void Tick() + { + // 1. 先检查 TransitionTable(Override 条目最优先) + if (TryTableTransition(overrideOnly: true)) return; + + // 2. 执行硬编码跳转(各 State.OnStateUpdate() 内部 ChangeState 调用) + _currentState?.OnStateUpdate(); + + // 3. 再检查 TransitionTable(非 Override 条目作为补充) + TryTableTransition(overrideOnly: false); + } + + private bool TryTableTransition(bool overrideOnly) + { + if (_transitionTable == null) return false; + string currentName = _currentState?.GetType().Name ?? ""; + + // 按优先级排序(降序),取第一个满足的 + foreach (var def in _transitionTable.Transitions + .Where(d => d.Override == overrideOnly) + .Where(d => string.IsNullOrEmpty(d.FromState) || d.FromState == currentName) + .OrderByDescending(d => d.Priority)) + { + if (FSMConditionRegistry.Evaluate(def.Condition, _owner)) + { + var targetType = FSMStateFactory.Create(def.ToState, _owner); + if (targetType != null) + { + ChangeState(targetType); + return true; + } + } + } + return false; + } + + public void ChangeState(PlayerStateBase newState) + { + _currentState?.OnStateExit(); + _currentState = newState; + _currentState.OnStateEnter(); + } +} +``` + +### 20.4 FSMStateFactory — 基于 Attribute 的自动注册 + +```csharp +// 路径: Assets/Scripts/Player/FSM/FSMStateAttribute.cs +/// +/// 标记一个 PlayerStateBase 子类可被 FSMStateFactory 自动发现。 +/// 参数为状态在 TransitionDefinition.ToState 中使用的字符串 key。 +/// 示例:[FSMState("DashState")] +/// +[AttributeUsage(AttributeTargets.Class, Inherited = false)] +public sealed class FSMStateAttribute : Attribute +{ + public string Key { get; } + public FSMStateAttribute(string key) => Key = key; +} + +// 路径: Assets/Scripts/Player/FSM/FSMStateFactory.cs +/// +/// 扫描程序集中所有标注了 [FSMState] 的 PlayerStateBase 子类, +/// 自动注册到工厂字典,新增状态只需添加 Attribute,无需修改本类。 +/// +public static class FSMStateFactory +{ + private static Dictionary> _registry; + + /// + /// 通过反射扫描 Assembly-CSharp 中所有 [FSMState] 标注类并注册。 + /// 仅在 Initialize 时调用一次(无运行时反射开销)。 + /// + public static void Initialize() + { + _registry = new(); + var baseType = typeof(PlayerStateBase); + foreach (var type in typeof(FSMStateFactory).Assembly.GetTypes()) + { + if (!type.IsClass || type.IsAbstract || !baseType.IsAssignableFrom(type)) continue; + var attr = type.GetCustomAttribute(); + if (attr == null) continue; + + // 构造器缓存(避免重复反射) + var ctor = type.GetConstructor(new[] { typeof(PlayerController) }); + if (ctor == null) + { + Debug.LogError($"[FSMStateFactory] {type.Name} 缺少 (PlayerController) 构造器"); + continue; + } + var key = attr.Key; + _registry[key] = owner => (PlayerStateBase)ctor.Invoke(new object[] { owner }); + } +#if UNITY_EDITOR + Debug.Log($"[FSMStateFactory] 已注册 {_registry.Count} 个状态: " + + string.Join(", ", _registry.Keys)); +#endif + } + + public static PlayerStateBase Create(string stateName, PlayerController owner) + { + if (_registry == null) Initialize(); + if (_registry.TryGetValue(stateName, out var factory)) return factory(owner); + Debug.LogError($"[FSMStateFactory] 未找到状态 '{stateName}'," + + "请检查该 State 类是否添加了 [FSMState(\"" + stateName + "\")]。"); + return null; + } + + /// 返回所有已注册的状态 key(供 PropertyDrawer 生成下拉列表)。 + public static IReadOnlyCollection GetRegisteredKeys() + { + if (_registry == null) Initialize(); + return _registry.Keys; + } +} +``` + +**标注示例(各 State 类添加一行):** + +```csharp +[FSMState("IdleState")] public class IdleState : PlayerStateBase { ... } +[FSMState("RunState")] public class RunState : PlayerStateBase { ... } +[FSMState("JumpState")] public class JumpState : PlayerStateBase { ... } +[FSMState("FallState")] public class FallState : PlayerStateBase { ... } +[FSMState("DashState")] public class DashState : PlayerStateBase { ... } +// 新增状态只需加 [FSMState("XxxState")],工厂自动感知,无需修改 FSMStateFactory +``` + +### 20.4b FSMConditionPropertyDrawer — Inspector 下拉验证 + +```csharp +// 路径: Assets/Scripts/Player/FSM/Editor/FSMConditionPropertyDrawer.cs +#if UNITY_EDITOR +using UnityEditor; + +/// +/// 为 TransitionDefinition.Condition 字符串字段显示下拉列表, +/// 防止手填字符串拼写错误导致条件静默失败。 +/// +[CustomPropertyDrawer(typeof(FSMConditionKeyAttribute))] +public class FSMConditionPropertyDrawer : PropertyDrawer +{ + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + if (property.propertyType != SerializedPropertyType.String) + { + EditorGUI.PropertyField(position, property, label); + return; + } + + var keys = new List(FSMConditionRegistry.GetRegisteredKeys()); + keys.Insert(0, "(none)"); + + int currentIndex = keys.IndexOf(property.stringValue); + if (currentIndex < 0) currentIndex = 0; + + EditorGUI.BeginChangeCheck(); + int selected = EditorGUI.Popup(position, label.text, currentIndex, + keys.Select(k => new GUIContent(k)).ToArray()); + if (EditorGUI.EndChangeCheck()) + property.stringValue = selected == 0 ? string.Empty : keys[selected]; + } +} +#endif + +// 配套 Attribute,标注 TransitionDefinition.Condition 字段 +public sealed class FSMConditionKeyAttribute : PropertyAttribute { } +``` + +**TransitionDefinition 更新(添加 Attribute):** + +```csharp + [System.Serializable] + public struct TransitionDefinition + { + [Tooltip("从哪个状态触发(空 = 任意状态)")] + public string FromState; + + [Tooltip("跳转到哪个状态")] + public string ToState; + + // ✅ 加上 [FSMConditionKey] 后 Inspector 变为条件下拉列表 + [FSMConditionKey] + [Tooltip("触发条件(与条件注册表中的键对应)")] + public string Condition; + + [Tooltip("优先级,数值越高越优先(默认 0,负数表示最低优先级)")] + public int Priority; + + [Tooltip("是否覆盖同方向的硬编码跳转(true = 本 SO 优先;false = 仅作为补充)")] + public bool Override; + } +``` + +**FSMConditionRegistry 补充 `GetRegisteredKeys()`(供 PropertyDrawer 查询):** + +```csharp +public static class FSMConditionRegistry +{ + private static readonly Dictionary> _conditions = new(); + + public static void Register(string key, Func predicate) + => _conditions[key] = predicate; + + public static bool Evaluate(string key, PlayerController ctx) + { + if (_conditions.TryGetValue(key, out var fn)) return fn(ctx); + Debug.LogWarning($"[FSMConditionRegistry] 条件 '{key}' 未注册,跳过。" + + " 请检查 PlayerController.RegisterDefaultConditions() 或自定义注册。"); + return false; + } + + /// 返回所有已注册条件的 key(供 PropertyDrawer 生成下拉列表)。 + public static IReadOnlyCollection GetRegisteredKeys() => _conditions.Keys; +} +``` + +### 20.5 设计师工作流 + +``` +1. Project 窗口右键 → Create → Player → FSM Transition Table + → 生成 "DefaultTransitionTable.asset" + +2. Inspector 中展开 Transitions 数组,添加新条目例如: + From: "IdleState" To: "DashState" + Condition: "DashPressed" Priority: 10 Override: false + +3. 将 asset 拖入 PlayerController 的 "Transition Table" 槽位 + +4. Play Mode 测试,无需修改任何 C# 代码 +``` + +### 20.6 向后兼容保证 + +| 场景 | 行为 | +|------|------| +| `_transitionTable` 为 null | 完全走原有硬编码路径,无影响 | +| 条目 Override=false | 仅在硬编码路径未触发跳转时才作为补充 | +| 条目 Override=true | 在 `OnStateUpdate()` 执行前拦截并优先跳转 | +| 条件名未注册 | `FSMConditionRegistry.Evaluate` 输出 Warning 并返回 false | +| 状态名未注册 | `FSMStateFactory.Create` 输出 Error 并返回 null,跳过本条目 | +| 新增状态类 | 只需添加 `[FSMState("XxxState")]`,工厂自动发现,无需修改工厂 | + +### 20.7 PlayerStateBase 依赖声明建议 + +> **设计意图**(Beta 前重构建议):`PlayerStateBase` 当前构造器接受整个 `PlayerController`, +> 状态可访问 Controller 所有属性。P1-3 建议逐步将各 State 类约束到最小接口集: + +```csharp +// 推荐做法:State 声明自己实际依赖的上下文接口(编译时约束) +// 例:DashState 只需要 IMovementContext + IInputContext +public class DashState : PlayerStateBase +{ + private readonly IMovementContext _move; + private readonly IInputContext _input; + + // 保持与 PlayerStateBase(PlayerController) 兼容,同时做接口分解 + public DashState(PlayerController owner) : base(owner) + { + _move = owner; // PlayerController 实现 IMovementContext + _input = owner; // PlayerController 实现 IInputContext + } + // ... 内部只使用 _move / _input,不直接访问 _owner 其余属性 +} +``` + +迁移原则:**新增状态类直接按接口分组声明依赖;旧 State 类在需要维护时按需迁移**,无需一次性重构。 diff --git a/Docs/Architecture/06_CombatModule.md b/Docs/Architecture/06_CombatModule.md new file mode 100644 index 0000000..3388f05 --- /dev/null +++ b/Docs/Architecture/06_CombatModule.md @@ -0,0 +1,1712 @@ +# 06 · 战斗模块 + +> **命名空间** `BaseGames.Combat`、`BaseGames.Combat.StatusEffects`、`BaseGames.Parry` +> **程序集** `BaseGames.Combat`、`BaseGames.Combat.StatusEffects`、`BaseGames.Parry` +> **路径** `Assets/Scripts/Combat/`、`Assets/Scripts/Parry/` +> **依赖** `BaseGames.Core.Events` + +--- + +## 目录 + +1. [DamageInfo 结构体](#1-damageinfo-结构体) +2. [DamageType / DamageCategory / DamageFlags / DamageTags / HitFxType / BreakLevel 枚举](#2-枚举定义) +3. [DamageSourceSO](#3-damagesourceso) +4. [HitBox](#4-hitbox) +5. [HurtBox](#5-hurtbox) +6. [伤害流水线(完整时序)](#6-伤害流水线) +7. [Projectile(弹射物)](#7-projectile) +8. [ParrySystem](#8-parrysystem) +9. [ParryConfigSO](#9-parryconfigso) +10. [StatusEffectManager](#10-statuseffectmanager) +11. [StatusEffect 基类与具体状态效果](#11-statuseffect-基类与具体状态效果) +12. [Layer 矩阵配置](#12-layer-矩阵配置) +13. [PoiseSystem(霸体系统)](#13-poisesystem) +14. [IBreakable — 机关/障碍物交互](#14-ibreakable--机关障碍物交互系统) +15. [ClashResolver — 拼刀系统](#15-clashresolver--拼刀系统) + +--- + +## 1. DamageInfo 结构体 + +```csharp +// 路径: Assets/Scripts/Combat/DamageInfo.cs +namespace BaseGames.Combat +{ + // Builder 工具类负责逐字段构建,构建后通过 Build() 拿到值类型快照。 + // Amount / FinalDamage 在 HurtBox/ShieldComponent 流水线内可被就地修改(局部变量)。 + [System.Serializable] + public struct DamageInfo + { + public int RawDamage; // HitBox 设定的原始值(概念只读,由 Builder.SetRaw 写入一次) + public int Amount; // 当前待处理伤害量(初始=RawDamage,护盾/防御后递减) + public int FinalDamage; // 经防御减免后最终 HP 扣除量(HurtBox 写入) + public Vector2 KnockbackDirection; // 归一化 + public float KnockbackForce; + public float HitStunDuration; // 秒 + public DamageType Type; // 元素属性:Normal / Fire / Poison … + public DamageCategory Category; // 来源分类:NormalAttack / Skill / Trap … + public DamageFlags Flags; // 行为标志:Unblockable / CanBeParried … + public DamageTags Tags; // 交互标签:用于机关/障碍物判定 + public Vector2 SourcePosition; // 用于计算击退方向 + public int SourceLayer; // 攻击者 Layer + public HitFxType FxType; + public BreakLevel Break; + public string SourceId; // DamageSourceSO.sourceId + public string SkillId; // 触发此次伤害的技能 ID(普通攻击为空) + + // Builder 工具类(避免构造器参数爆炸) + public class Builder + { + private DamageInfo _d; + // SetRaw 同步初始化 Amount(Amount 始终以 RawDamage 为起点) + public Builder SetRaw(int v) { _d.RawDamage = v; _d.Amount = v; return this; } + public Builder SetType(DamageType v) { _d.Type = v; return this; } + public Builder SetCategory(DamageCategory v) { _d.Category = v; return this; } + public Builder SetFlags(DamageFlags v) { _d.Flags = v; return this; } + public Builder SetTags(DamageTags v) { _d.Tags = v; return this; } + public Builder SetSkillId(string v) { _d.SkillId = v; return this; } + public Builder SetSourceId(string v) { _d.SourceId = v; return this; } + public Builder SetKnockback(Vector2 dir, float force) + { _d.KnockbackDirection = dir; _d.KnockbackForce = force; return this; } + public Builder SetStun(float dur) { _d.HitStunDuration = dur; return this; } + public Builder SetFx(HitFxType v) { _d.FxType = v; return this; } + public Builder SetBreak(BreakLevel v) { _d.Break = v; return this; } + public Builder SetSourcePos(Vector2 v) { _d.SourcePosition = v; return this; } + public Builder SetLayer(int v) { _d.SourceLayer = v; return this; } + public DamageInfo Build() => _d; + } + + /// + /// 零堆分配工厂(热路径首选)。直接从 填入基础字段; + /// KnockbackDirection / SourcePosition / SourceLayer 等运行时字段由调用方就地赋值—— + /// struct 是值类型,局部变量字段写入无任何堆分配。 + ///
⚡ HitBox.OnTriggerEnter2D 等高频路径必须使用此方法; + /// 仅在需要链式覆盖多字段的复杂场景(如 Boss 特殊相位攻击)才使用 Builder。 + ///
+ public static DamageInfo From(DamageSourceSO so) + { + int baseAmt = Mathf.RoundToInt(so.BaseDamage * so.DamageMultiplier); + return new DamageInfo + { + RawDamage = baseAmt, + Amount = baseAmt, + Type = so.Type, + Category = so.Category, + Flags = so.Flags, + Tags = so.Tags, + HitStunDuration = so.HitStunDuration, + FxType = so.FxType, + Break = so.BreakLevel, + SourceId = so.sourceId, + SkillId = so.skillId, + }; + } + } +} +``` + +> **字段语义**:`RawDamage`(初始原始值,只读) → `Amount`(流水线中被护盾/防御修改) → `FinalDamage`(HurtBox 写入,最终 HP 扣除量)。 +> 下游 IDamageable.TakeDamage 接收时,`Amount == FinalDamage`(已被 HurtBox 写入);`EnemyBase.TakeDamage` 用 `info.FinalDamage` 正确。 + +--- + +## 2. 枚举定义 + +```csharp +// ── 元素/物理属性(决定抗性、特效) ───────────────────────────────────────────── +public enum DamageType { Normal, True, Fire, Poison, Ice, Lightning, Void } + +// ── 来源分类(决定哪类机关/护盾/BUFF 响应) ─────────────────────────────────────── +public enum DamageCategory +{ + NormalAttack = 0, // 武器普通攻击(连击链) + SoulSkill = 1, // 魂技能(消耗灵力的主动技) + SpiritSkill = 2, // 魄技能(消耗魄元的主动技) + Projectile = 3, // 弹射物命中(含弹反后的投射物) + EnvironmentTrap = 4, // 环境陷阱/机关(不属于角色主动攻击) + StatusEffect = 5, // 持续状态效果(中毒、燃烧…) + FallDamage = 6, // 坠落伤害 + Reflected = 7, // 弹反后反弹给攻击方的伤害 +} + +// ── 行为标志(多值叠加,控制伤害管线分支) ──────────────────────────────────────── +[System.Flags] +public enum DamageFlags +{ + None = 0, + Unblockable = 1 << 0, // 无法弹反/格挡 + CanBeParried = 1 << 1, + IgnoreIFrame = 1 << 2, + PerfectParryOnly= 1 << 3, + IsProjectile = 1 << 4, + CanClash = 1 << 5, // 近战可参与拼刀 + ForceBreak = 1 << 6, // 强制打断,无视霸体 + NoKnockback = 1 << 7, +} + +// ── 交互标签(用于机关/障碍物破坏条件判定,可多选) ───────────────────────────────── +// 机关 BreakConditionSO 指定「需要命中的 Tags 位集合」,HitBox 发出的 DamageInfo.Tags +// 必须覆盖(包含)该位集合,机关才响应 +[System.Flags] +public enum DamageTags : uint +{ + None = 0, + // 来源类型 + MeleeHit = 1 << 0, // 近战命中 + RangedHit = 1 << 1, // 远程/投射物命中 + SkillHit = 1 << 2, // 任意主动技能命中 + // 元素附加 + ElementFire = 1 << 3, + ElementPoison = 1 << 4, + ElementVoid = 1 << 5, + // 特殊能力 + AfterParry = 1 << 6, // 弹反后产生的攻击 + ChargedAttack = 1 << 7, // 蓄力攻击 + SkyFormOnly = 1 << 8, // 仅天形攻击 + EarthFormOnly = 1 << 9, // 仅地形攻击 + DeathFormOnly = 1 << 10, // 仅死形攻击 + // 破坏强度(与 BreakLevel 对应) + BreakLight = 1 << 11, // 对应 BreakLevel.Light + BreakMedium = 1 << 12, // 对应 BreakLevel.Medium + BreakHeavy = 1 << 13, // 对应 BreakLevel.Heavy + BreakBreaker = 1 << 14, // 对应 BreakLevel.Breaker +} + +public enum HitFxType { Spark, Slash, Blood, Magic, Heavy, Crit, Void, Heal, Parry, Fire, Ice } + +// 攻击方的「打断等级」:此次攻击能打断多高的霸体 +// DamageInfo.Break 字段使用此枚举;HitBox / DamageSourceSO 配置 +public enum BreakLevel +{ + None = 0, // 无打断能力(不触发霸体检查) + Light = 1, // 打断 Light 以下霸体(普通小怪) + Medium = 2, // 打断 Medium 以下霸体 + Heavy = 3, // 打断 Heavy 以下霸体(Boss 普通超甲) + Breaker = 4, // 强力打断,仅 Unbreakable 无法抵挡 +} + +// 承受方的「霸体等级」:当前状态能抵抗多低的打断 +// HurtBox 判定:(int)info.Break >= (int)currentPoiseLevel → 打断成功 +// PlayerController(攻击期间)和 EnemyBase(超甲状态)均可激活 +public enum PoiseLevel +{ + None = 0, // 无霸体(普通状态,任何打断均有效) + Light = 1, // 轻霸体(Light=0 的攻击无法打断) + Medium = 2, // 中霸体(Light/Medium 打断无效) + Heavy = 3, // 重霸体(Light/Medium/Heavy 打断无效) + Unbreakable = 100, // 不可打断(只有特殊机制可打断) +} +``` + +--- + +## 3. DamageSourceSO + +```csharp +// 路径: Assets/Scripts/Combat/DamageSourceSO.cs +[CreateAssetMenu(menuName = "Combat/DamageSource")] +public class DamageSourceSO : ScriptableObject +{ + [Header("Identity")] + public string sourceId; // 唯一标识(用于 PoiseOverrideTable) + // 触发此 Source 的技能 ID(普通武器连击留空;技能填入 FormSkillSO.skillId) + // 构建 DamageInfo 时自动写入 DamageInfo.SkillId + public string skillId; + + [Header("Base")] + public int BaseDamage; + public float DamageMultiplier = 1.0f; // 连击倍率(Attack3=×2.0, ParryCounter=×3.0) + public DamageType Type; // 元素属性 + public DamageCategory Category; // 来源分类(武器填 NormalAttack,技能填 SoulSkill 等) + public DamageFlags Flags; // 行为标志 + public DamageTags Tags; // 交互标签(决定能触发哪些机关) + + [Header("Physics")] + public float KnockbackForce; + public float HitStunDuration; + public BreakLevel BreakLevel; + + [Header("FX")] + public HitFxType FxType; + + [Header("Combo")] + public float ComboWindowDuration; // 连击窗口持续时间 + public float CancelWindowEnd; // 动画归一化时间,到此可接受下一击输入 + + // 便捷方法:根据此 SO 构建初始 DamageInfo(方向/击退等由 HitBox 补全) + // ⚡ 热路径请改用零分配工厂:DamageInfo.From(sourceSO),直接返回 struct,无堆分配。 + // 本方法保留用于需链式覆盖多字段的特殊场景(如 Boss 特殊相位攻击修改 Flags/Tags)。 + public DamageInfo.Builder CreateBuilder() => new DamageInfo.Builder() + .SetRaw(Mathf.RoundToInt(BaseDamage * DamageMultiplier)) + .SetType(Type) + .SetCategory(Category) + .SetFlags(Flags) + .SetTags(Tags) + .SetStun(HitStunDuration) + .SetFx(FxType) + .SetBreak(BreakLevel) + .SetSourceId(sourceId) + .SetSkillId(skillId); +} +``` + +--- + +## 4. HitBox + +> **寄宿规则**:`HitBox` **不挂载在角色 Prefab 本体上**,而是作为**武器 Prefab**(`WPN_*.prefab`)或 +> **技能 HitBox Prefab**(`SKL_*_HitBox.prefab`)的子节点存在。 +> - **武器**:`WeaponManager.Equip()` 时 Instantiate 武器 Prefab 并挂至 `[WeaponSocket]`;卸装时 Destroy。 +> - **技能**:`SkillManager.TrySoulSkill()` 等施放时 Instantiate HitBox Prefab 并挂至 `[SkillSocket]`;持续时间结束后 Destroy。 +> - **投射物**:`Projectile` 自身携带 HitBox(见 §7),随 Projectile 生命周期销毁。 +> 这样碰撞盒的**形状、大小、偏移**完全由各武器/技能的 Prefab 决定,角色本体无需改动。 + +```csharp +// 路径: Assets/Scripts/Combat/HitBox.cs +[RequireComponent(typeof(Collider2D))] +public class HitBox : MonoBehaviour +{ + [SerializeField] private DamageSourceSO _defaultSource; // Inspector 默认值 + [SerializeField] private float _hitCooldown = 0.1f; // 同目标多帧冷却 + + // 运行时注入(AttackState / Projectile 覆盖默认 SO) + private DamageSourceSO _currentSource; + private Transform _attackerTransform; + private bool _isActive; + + // 命中确认委托(PlayerCombat / EnemyCombat 订阅) + public System.Action OnHitConfirmed; + + // 激活 / 关闭 + public void Activate(DamageSourceSO source = null, Transform attacker = null); + public void Deactivate(); + + // 内部 + private void OnTriggerEnter2D(Collider2D other) + { + if (!_isActive) return; + if (!CheckCooldown(other)) return; + + var knockDir = ((Vector2)other.bounds.center - (Vector2)_attackerTransform.position).normalized; + // ⚡ 零 GC:struct 工厂返回值类型,就地修改运行时字段,无堆分配 + var info = DamageInfo.From(_currentSource); + info.KnockbackDirection = knockDir; + info.KnockbackForce = _currentSource.KnockbackForce; + info.SourcePosition = _attackerTransform.position; + info.SourceLayer = _attackerTransform.gameObject.layer; + + // ① 命中 HurtBox(敌人/玩家受击) + var hurtBox = other.GetComponent(); + if (hurtBox != null) + { + hurtBox.ReceiveDamage(info); + OnHitConfirmed?.Invoke(info); + return; + } + + // ② 命中 IBreakable(机关/障碍物)——Category/Tags 满足条件才响应 + var breakable = other.GetComponent(); + breakable?.TryInteract(info); + // 注意:机关命中不触发 OnHitConfirmed(不给灵力),如需特殊处理可扩展 + } + + private Dictionary _hitCooldownTimers = new(); + private bool CheckCooldown(Collider2D other) + { + float now = Time.time; + if (_hitCooldownTimers.TryGetValue(other, out float last) && now - last < _hitCooldown) + return false; + _hitCooldownTimers[other] = now; + return true; + } +} +``` + +--- + +## 5. HurtBox + +```csharp +// 路径: Assets/Scripts/Combat/HurtBox.cs +[RequireComponent(typeof(Collider2D))] +public class HurtBox : MonoBehaviour +{ + // 伤害接受方的引用(接口,避免直接依赖具体类型) + private IDamageable _owner; // PlayerController 或 EnemyBase 实现 + private IShieldable _shieldable; // 可选,由 PlayerController.Awake() 注入 + + [SerializeField] private DamageInfoEventChannelSO _onDamageDealt; // EVT_DamageDealt(AnalyticsManager) + [SerializeField] private HitConfirmedEventChannelSO _onHitConfirmed; // EVT_HitConfirmed(VFX/Audio/Feedback) + + // 由 PlayerController.Awake() 调用,注入护盾层 + public void SetShieldable(IShieldable shieldable) => _shieldable = shieldable; + + // 由 PlayerController.Awake() 调用,注入弹反系统(仅玩家侧 HurtBox) + private ParrySystem _parrySystem; + public void SetParrySystem(ParrySystem ps) => _parrySystem = ps; + + // 由 PlayerAnimationEvents 的 EnableIFrame / DisableIFrame 动画事件调用 + // (见 24_AnimEventModule §5) + private bool _isHurtBoxInvincible; + public void SetInvincible(bool value) => _isHurtBoxInvincible = value; + + // PoiseSystem 引用(由 EnemyBase.Awake() 注入;玩家侧由 PlayerController 实现 IPoiseSource) + private IPoiseSource _poiseSource; // 可选:实体若实现 IPoiseSource 则持有此引用 + public void SetPoiseSource(IPoiseSource src) => _poiseSource = src; + + // 由 HitBox 直接调用 + public void ReceiveDamage(DamageInfo info) + { + if (!_isActive) return; // HurtBox 被禁用时忽略 + + // 1. 无敌帧检查 + if ((_owner.IsInvincible || _isHurtBoxInvincible) && !info.Flags.HasFlag(DamageFlags.IgnoreIFrame)) return; + + // 2. 弹反检查(须在伤害计算前;仅玩家侧 HurtBox 注入了 _parrySystem) + // Phase 1:状态查询模式 — ConsumeParry() 不感知 DamageInfo,避免 Parry ↔ Combat 循环依赖。 + // Phase 2:若需完美弹反判断等,提取 BaseGames.Combat.Data 子程序集。 + if (_parrySystem != null && info.Flags.HasFlag(DamageFlags.CanBeParried)) + if (_parrySystem.ConsumeParry()) return; + + // 3. 霸体检查(BreakLevel vs PoiseLevel) + // 若实体当前有霸体且攻击等级不足,仅播放受击 VFX,不扣血不打断 + if (!info.Flags.HasFlag(DamageFlags.ForceBreak) && _poiseSource != null) + { + PoiseLevel curPoise = _poiseSource.GetCurrentPoiseLevel(); + if (curPoise != PoiseLevel.None && curPoise == PoiseLevel.Unbreakable) + return; // 完全无法打断 + if ((int)info.Break < (int)curPoise) + { + // 打断等级不足:触发受击 VFX 但跳过伤害 + _onHitConfirmed.Raise(new HitInfo { DamageInfo = info, HitPoint = transform.position }); + return; + } + } + + // 4. 护盾层拦截(玩家专属,在防御减免之前) + // AbsorbDamage 返回穿透量(int):0 表示全部被护盾吸收,>0 表示穿透量继续走后续 TakeDamage 流程 + if (_shieldable != null && _shieldable.HasShield) + { + int passThrough = _shieldable.AbsorbDamage(info.Amount); + if (passThrough <= 0) return; // 全部被护盾吸收,终止后续伤害 + info.Amount = passThrough; // 穿透量继续走防御减免 → TakeDamage + } + + // 5. 计算 FinalDamage(防御减免,最低 1) + int finalDamage = Mathf.Max(1, info.Amount - _owner.Defense); + info.Amount = finalDamage; + info.FinalDamage = finalDamage; + + // 6. 调用 _owner.TakeDamage + _owner.TakeDamage(info); + + // 7. 全局广播 + _onDamageDealt.Raise(info); + _onHitConfirmed.Raise(new HitInfo { DamageInfo = info, HitPoint = transform.position }); + + // 8. 状态效果触发(DoT — Fire / Poison) + if (_owner is MonoBehaviour mb) + { + var sem = mb.GetComponent(); + if (sem != null) + { + if (info.Type == DamageType.Fire) sem.ApplyEffect(new FireEffect()); + else if (info.Type == DamageType.Poison) sem.ApplyEffect(new PoisonEffect()); + } + } + } + + // HurtBox 激活状态(用于 IFrame 动画事件之外的整体开关) + private bool _isActive = true; + public void SetActive(bool value) => _isActive = value; +} + +// 所有可受击对象实现的接口 +public interface IDamageable +{ + bool IsInvincible { get; } + int Defense { get; } // 用于 FinalDamage 计算 + void TakeDamage(DamageInfo info); +} + +// 可持有霸体的实体实现此接口(PlayerController 攻击期间、EnemyBase 超甲状态) +// HurtBox 持有 IPoiseSource 引用,在 ReceiveDamage 中做等级比较 +// 参见 §13 PoiseSystem 和 Design/54_PoiseSystem.md +public interface IPoiseSource +{ + /// 返回当前帧的霸体等级(受时间窗口/状态机控制) + PoiseLevel GetCurrentPoiseLevel(); +} +``` + +--- + +## 6. 伤害流水线 + +``` +[AttackState.OnStateEnter] + → PlayerCombat.EnableWeaponHitBox(dir) + → HitBox.Activate(source, attackerTransform) + → Collider2D enabled = true + +[Physics2D OnTriggerEnter2D: HitBox → HurtBox] + → HitBox.OnTriggerEnter2D(hurtBoxCollider) + → 检查 hitCooldown + → 构建 DamageInfo + knockDir = (target.pos - attacker.pos).normalized [见下方特殊情况处理] + → HurtBox.ReceiveDamage(info) + → 1. 检查无敌帧(IgnoreIFrame flag) + → 2. 检查弹反(CanBeParried && _parrySystem.ConsumeParry() → return) + → 3. 检查霸体(BreakLevel vs Poise) + → 4. 护盾层拦截(仅玩家) + → 5. 计算 FinalDamage = RawDamage - Defense(最低 1) + → 6. _owner.TakeDamage(finalInfo) + → PlayerStats.TakeDamage(amt) → EVT_HPChanged + → ForceState(HurtState) [if not DashState] + → 7. _onDamageDealt.Raise(finalInfo) [全局广播] + ← PlayerStats.AddSoulPower(+10) [if player hit enemy] + ← EnemyFeedback.OnHit(info) + ← AnalyticsManager.OnDamage(info) + → 8. DoT 触发(Fire/Poison → StatusEffectManager.ApplyEffect) + +[AttackState.OnStateExit] + → PlayerCombat.DisableAllWeaponHitBoxes() +``` + +### 击退特殊情况处理 + +$$\vec{Knockback} = \text{normalize}(\text{HurtPos} - \text{SourcePos}) \times \text{KnockbackForce}$$ + +> `NoKnockback` 标记的攻击直接设为 `Vector2.zero`。 + +| 情况 | 处理方式 | +|------|---------| +| 玩家被正下方攻击(地刺:SourcePos.y < HurtPos.y 且水平偏差 < 阈值)| 方向强制为 `(0, 1)` 向上 | +| 玩家贴墙被打(`Physics2D.Raycast` 向击退水平方向检测到墙壁)| 水平分量减为 50%,保留垂直分量 | +| Boss 固定击退(`DamageInfo.Flags` 含 `FixedKnockback` 或由 DamageSourceSO 配置)| 直接使用 `DamageInfo.KnockbackDirection`,不动态重算 | + +--- + +## 7. Projectile + +```csharp +// 路径: Assets/Scripts/Combat/ProjectileConfigSO.cs +// 弹射物静态配置(数据与运行时实例分离) +[CreateAssetMenu(menuName = "Combat/ProjectileConfig")] +public class ProjectileConfigSO : ScriptableObject +{ + public DamageSourceSO DamageSource; // 伤害来源(普通模式) + [Header("运动")] + public float speed = 12f; // 飞行速度 (m/s) + public float lifetime = 5f; // 生存时间 (s) + public float launchAngleDeg = 45f; // ArcProjectile 发射角(度) + public float gravityScale = 1f; // ArcProjectile 重力缩放 + public float homingStrength = 4f; // HomingProjectile 追踪角速度(弧度/秒) + [Header("对象池")] + public string poolKey; // AddressKeys 常量,用于 ObjectPoolManager + [Header("弹反")] + public float parrySpeedMultiplier = 1.2f; // 弹反后速度倍率 + public float parryDamageMultiplier = 2.0f; // 弹反伤害倍率(对攻击者) +} + +// 路径: Assets/Scripts/Combat/Projectile.cs +[RequireComponent(typeof(Rigidbody2D), typeof(HitBox))] +public class Projectile : MonoBehaviour +{ + [HideInInspector] public DamageInfo DamageInfo; // 由发射方注入(携带完整伤害信息) + [HideInInspector] public Vector2 Direction; // 归一化发射方向 + + protected ProjectileConfigSO _config; + protected Rigidbody2D _rb; + protected HitBox _hitBox; + protected float _aliveTimer; + + // 对象池取出时调用(替代 Awake/Start) + public virtual void Initialize(ProjectileConfigSO config, DamageInfo damageInfo, Vector2 direction) + { + _config = config; + DamageInfo = damageInfo; + Direction = direction.normalized; + _aliveTimer = 0f; + _rb = GetComponent(); + _hitBox = GetComponent(); + OnInitialized(); + } + + protected virtual void OnInitialized() { } + + protected virtual void Update() + { + _aliveTimer += Time.deltaTime; + if (_aliveTimer >= _config.lifetime) ReturnToPool(); + } + + protected virtual void OnTriggerEnter2D(Collider2D other) + { + // 碰到地面 / 墙壁也消失 + if (other.gameObject.layer == LayerMask.NameToLayer("Ground")) + ReturnToPool(); + } + + protected void ReturnToPool() + { + gameObject.SetActive(false); + ObjectPoolManager.Instance.Despawn(_config.poolKey, gameObject); + } +} + +// ── 直线弹射物(默认实现)──────────────────────────────────────────────────────── +public class LinearProjectile : Projectile +{ + protected override void OnInitialized() + => _rb.velocity = Direction * _config.speed; +} + +// ── 抛物线弹射物 ───────────────────────────────────────────────────────────────── +// 用途:投石、毒液弹、炸弹投掷。 +public class ArcProjectile : Projectile +{ + protected override void OnInitialized() + { + float angle = _config.launchAngleDeg * Mathf.Deg2Rad; + _rb.velocity = new Vector2( + Direction.x * _config.speed * Mathf.Cos(angle), + _config.speed * Mathf.Sin(angle) + ); + _rb.gravityScale = _config.gravityScale; + } +} + +// ── 追踪弹射物 ────────────────────────────────────────────────────────────────── +// 追踪目标通过 TransformEventChannelSO 注入,零耦合(不使用 FindGameObjectWithTag) +// 用途:追踪蜂群、Boss 阶段特殊弹。 +public class HomingProjectile : Projectile +{ + [SerializeField] TransformEventChannelSO _onPlayerSpawned; + + Transform _target; + + void OnEnable() => _onPlayerSpawned.OnEventRaised += t => _target = t; + void OnDisable() => _onPlayerSpawned.OnEventRaised -= t => _target = t; + + // 发射方可通过 ProjectileManager.LaunchHoming 直接注入已缓存的 Transform + public void SetTarget(Transform t) => _target = t; + + protected override void OnInitialized() + => _rb.velocity = Direction * _config.speed; + + protected override void Update() + { + base.Update(); + if (_target == null) return; + Vector2 toTarget = ((Vector2)_target.position - (Vector2)transform.position).normalized; + Vector2 newVel = Vector2.MoveTowards( + _rb.velocity.normalized, toTarget, + _config.homingStrength * Time.deltaTime) * _config.speed; + _rb.velocity = newVel; + } +} + +// ── ProjectileManager — 追踪弹辅助缓存 ───────────────────────────────────────── +// 常驻 Persistent 场景;在发射追踪弹时注入已缓存的玩家 Transform, +// 保证即使玩家与弹射物同帧出生也能立即锁定目标。 +public class ProjectileManager : MonoBehaviour +{ + [SerializeField] TransformEventChannelSO _onPlayerSpawned; + Transform _playerTransform; + + void OnEnable() => _onPlayerSpawned.OnEventRaised += t => _playerTransform = t; + void OnDisable() => _onPlayerSpawned.OnEventRaised -= t => _playerTransform = t; + + public Transform PlayerTransform => _playerTransform; + + public void LaunchHoming(HomingProjectile proj, Vector2 origin, Vector2 direction, + ProjectileConfigSO config, DamageInfo damageInfo) + { + proj.Initialize(config, damageInfo, direction); + proj.SetTarget(_playerTransform); // 直接注入缓存值 + } +} + +// ── 可被弹反的弹射物 ───────────────────────────────────────────────────────────── +// ParrySystem.HandleSuccessfulParry 直接调用 OnParried(),不通过事件频道间接回调。 +public class ParryableProjectile : LinearProjectile +{ + bool _isParried = false; + + // 由 ParrySystem.HandleSuccessfulParry() 直接调用 + public void OnParried(Transform parryer) + { + if (_isParried) return; + _isParried = true; + + // 1. 方向反转,速度提升(parrySpeedMultiplier) + Direction = -Direction; + _rb.velocity = Direction * _config.speed * _config.parrySpeedMultiplier; + + // 2. 更新 DamageInfo:攻击者变为玩家,伤害乘以反弹倍率 + DamageInfo = new DamageInfo.Builder() + .SetRaw(Mathf.RoundToInt(DamageInfo.RawDamage * _config.parryDamageMultiplier)) + .SetFlags(DamageFlags.IsProjectile | DamageFlags.Unblockable) + .SetKnockback(Direction, DamageInfo.KnockbackForce * _config.parrySpeedMultiplier) + .Build(); + + // 3. 切换碰撞层:现在只伤害敌人 + gameObject.layer = LayerMask.NameToLayer("Projectile"); + } +} +``` + +--- + +## 8. ParrySystem + +弹反系统使用 **5 阶段状态机**(参见 Design/05_ParrySystem.md): + +``` +Inactive → [按弹反键] → Startup(0.05s) → Active(0.28s) → [命中可弹反攻击] → ParrySuccess + ↓(Startup/Active 超时) ↓ + EndLag(0.10s) → Inactive CounterWindow(0.5s) → Inactive +``` + +```csharp +// 路径: Assets/Scripts/Parry/ParrySystem.cs + +/// 弹反成功时通过 OnParrySuccess 频道广播的载荷,供反击伤害计算、VFX 使用 +public struct ParryInfo +{ + public DamageInfo OriginalDamage; // 被弹反的原始攻击信息 + public bool IsPerfect; // 是否为完美弹反 + public Projectile HitProjectile; // 若弹反了投射物,此字段非 null + public DamageSourceSO ReflectDamageSource; // 反击伤害来源(ParryCounterMultiplier 倍率已应用) +} + +public enum ParryPhase { Inactive, Startup, Active, EndLag, CounterWindow } // Phase 2 预留 + +// ────────────────────────────────────────────────────────────────── +// Phase 1 实现(当前):状态查询模式 +// ────────────────────────────────────────────────────────────────── +// 架构决策:Parry 程序集不引用 BaseGames.Combat,避免循环依赖。 +// HurtBox(Combat 层)主动调用 ConsumeParry() 查询状态,无需传入 DamageInfo。 +// Phase 2:若需完美弹反判断,提取 BaseGames.Combat.Data(含 DamageInfo) +// 作为共享子程序集,Parry 和 Combat 同时引用,无循环。 + +public class ParrySystem : MonoBehaviour +{ + /// 当前是否处于弹反激活窗口。Phase 2 由输入/动画事件写入。 + public bool IsParrying { get; private set; } + + /// + /// 查询并消费一次弹反机会。 + /// 若处于弹反窗口则返回 true 并关闭窗口;否则返回 false。 + /// + public bool ConsumeParry() + { + if (!IsParrying) return false; + IsParrying = false; + return true; + } + + // Phase 2:由动画事件 / InputReader 调用以开启弹反窗口 + public void OpenParryWindow() => IsParrying = true; + public void CloseParryWindow() => IsParrying = false; +} + +// ────────────────────────────────────────────────────────────────── +// Phase 2 设计规划(待实现) +// ────────────────────────────────────────────────────────────────── +// ParrySystem Phase 2 扩展: +// - 接收 InputReader.ParryEvent,管理 Startup → Active → EndLag/CounterWindow 阶段 +// - Active 窗口内 ConsumeParry() 升级为 TryParryDamage(DamageInfo)(需 Combat.Data) +// - 完美弹反判断(PerfectParryThreshold)、灵力奖励、子弹时间、反击窗口 +// - 广播 _onParrySuccess 事件(VFX / Audio / 连击展开) +// - ParryConfigSO 控制各阶段时长与参数(见 §9) +``` + +--- + +## 9. ParryConfigSO + +```csharp +[CreateAssetMenu(menuName = "Combat/ParryConfig")] +public class ParryConfigSO : ScriptableObject +{ + [Header("阶段时长")] + public float StartupDuration = 0.05f; // 前摇(Startup)时长(秒) + public float WindowDuration = 0.28f; // 弹反有效窗口(Active)时长(秒) + public float EndlagDuration = 0.10f; // 后摇(EndLag)时长(秒) + public float CounterWindowDuration = 0.5f; // 弹反成功后反击窗口时长(秒) + + [Header("完美弹反判定")] + public float PerfectParryThreshold = 0.05f; // Active 阶段开始后的完美弹反窗口(秒) + + [Header("冷却")] + public float ParryCooldown = 0.3f; // 弹反动作冷却(秒) + + [Header("灵力奖励")] + public int SoulGainOnParry = 33; // 普通弹反获得灵力 + public int SoulGainOnPerfect = 50; // 完美弹反额外获得灵力(累计 +83) + + [Header("反击伤害")] + public float ParryCounterMultiplier = 3.0f; // 弹反反击伤害倍率(作用于原始攻击伤害) + + [Header("子弹时间(完美弹反)")] + public float BulletTimeScale = 0.25f; // 完美弹反触发时的时间缩放 + public float BulletTimeDuration = 0.2f; // 子弹时间持续时长(秒,实际时间) + + [Header("硬直")] + public float StaggerDuration = 0.8f; // 被弹反敌人的受击硬直时长(秒) +} +``` + +--- + +## 10. StatusEffectManager + +```csharp +// 路径: Assets/Scripts/Combat/StatusEffects/StatusEffectManager.cs +namespace BaseGames.Combat.StatusEffects +{ + [RequireComponent(typeof(SpriteRenderer))] + public class StatusEffectManager : MonoBehaviour + { + [Header("事件频道")] + [SerializeField] StatusEffectEventChannelSO _onStatusEffectApplied; + [SerializeField] StatusEffectEventChannelSO _onStatusEffectExpired; + + // 双结构:List 用于有序 Update 遍历;Dictionary 用于 O(1) 查找 + readonly List _activeList = new(); + readonly Dictionary _activeIndex = new(); + + SpriteRenderer _renderer; + MaterialPropertyBlock _propBlock; + + void Awake() + { + _renderer = GetComponent(); + _propBlock = new MaterialPropertyBlock(); + } + + void Update() + { + for (int i = _activeList.Count - 1; i >= 0; i--) + { + var effect = _activeList[i]; + effect.Update(Time.deltaTime); + if (effect.IsExpired) + { + effect.OnExpire(); + _activeIndex.Remove(effect.EffectType); + _activeList.RemoveAt(i); + _onStatusEffectExpired?.Raise(effect.EffectType); + } + } + } + + /// 施加状态效果。已有相同类型时叠层/刷新(O(1) 查找)。 + public void ApplyEffect(StatusEffect newEffect) + { + if (_activeIndex.TryGetValue(newEffect.EffectType, out var existing)) + { + existing.OnStack(); + } + else + { + newEffect.OnApply(this); + _activeList.Add(newEffect); + _activeIndex[newEffect.EffectType] = newEffect; + _onStatusEffectApplied?.Raise(newEffect.EffectType); + } + } + + /// 净化指定类型的状态效果(O(1) 查找)。 + public void CleanseEffect(StatusEffectType type) + { + if (!_activeIndex.TryGetValue(type, out var effect)) return; + effect.OnExpire(); + _activeIndex.Remove(type); + _activeList.Remove(effect); + _onStatusEffectExpired?.Raise(type); + } + + public void CleanseAll() + { + foreach (var e in _activeList) e.OnExpire(); + _activeList.Clear(); + _activeIndex.Clear(); + } + + /// 由状态效果调用,直接扣 HP(True 伤害,绕过 HurtBox)。 + public void ApplyDirectDamage(DamageInfo info) + => GetComponent()?.TakeDamage(info); + + /// 由状态效果调用,设置 Shader 参数(MaterialPropertyBlock,不修改共享材质)。 + public void SetShaderParam(string param, float value) + { + _renderer.GetPropertyBlock(_propBlock); + _propBlock.SetFloat(param, value); + _renderer.SetPropertyBlock(_propBlock); + } + + public bool HasEffect(StatusEffectType type) => _activeIndex.ContainsKey(type); + } +} +``` + +--- + +## 11. StatusEffect 基类与具体状态效果 + +```csharp +// 路径: Assets/Scripts/Combat/StatusEffects/StatusEffect.cs +namespace BaseGames.Combat.StatusEffects +{ + public enum StatusEffectType { Fire, Poison, Freeze, Stun } + + public abstract class StatusEffect + { + public abstract StatusEffectType EffectType { get; } + public abstract int MaxStacks { get; } // 最大叠加层数(1 = 不可叠加) + + public int StackCount { get; protected set; } = 1; + public float Duration { get; protected set; } // 当前剩余持续时间 + public float TickInterval { get; protected set; } // 每次 Tick 的间隔秒数 + float _tickTimer; + + protected StatusEffectManager Owner; // 宿主(由 OnApply 注入) + + public virtual void OnApply(StatusEffectManager owner) + { + Owner = owner; + Duration = GetBaseDuration(); + } + + /// 同类型效果再次施加时(叠层/刷新)。 + public virtual void OnStack() + { + Duration = GetBaseDuration(); + StackCount = Mathf.Min(StackCount + 1, MaxStacks); + } + + public virtual void OnTick() { } + public virtual void OnExpire() { } + + public virtual bool IsExpired => Duration <= 0f; + + public void Update(float delta) + { + Duration -= delta; + _tickTimer += delta; + if (_tickTimer >= TickInterval) + { + _tickTimer -= TickInterval; + OnTick(); + } + } + + protected abstract float GetBaseDuration(); + public abstract string GetDisplayName(); + } + + // ── 燃烧效果 ──────────────────────────────────────────────────────────────── + // 3 秒 · 0.5s / Tick · 1 点 True 伤害/Tick = 2 DPS(不可叠加,触发时刷新) + public class FireEffect : StatusEffect + { + public override StatusEffectType EffectType => StatusEffectType.Fire; + public override int MaxStacks => 1; + + public FireEffect() => TickInterval = 0.5f; + protected override float GetBaseDuration() => 3.0f; + + public override void OnApply(StatusEffectManager owner) + { + base.OnApply(owner); + owner.SetShaderParam("_FireGlow", 1f); + } + + public override void OnTick() + { + var info = new DamageInfo.Builder() + .SetRaw(1) + .SetType(DamageType.True) + .SetFlags(DamageFlags.IgnoreIFrame) + .Build(); + Owner.ApplyDirectDamage(info); + } + + public override void OnExpire() => Owner.SetShaderParam("_FireGlow", 0f); + public override string GetDisplayName() => "燃烧"; + } + + // ── 中毒效果 ──────────────────────────────────────────────────────────────── + // 5 秒 / 层 · 1s / Tick · 1×StackCount 点 True 伤害/Tick(最多叠 3 层 → 3 DPS) + public class PoisonEffect : StatusEffect + { + public override StatusEffectType EffectType => StatusEffectType.Poison; + public override int MaxStacks => 3; + + public PoisonEffect() => TickInterval = 1.0f; + protected override float GetBaseDuration() => 5.0f; + + public override void OnApply(StatusEffectManager owner) + { + base.OnApply(owner); + UpdateShader(); + } + + public override void OnStack() { base.OnStack(); UpdateShader(); } + + public override void OnTick() + { + var info = new DamageInfo.Builder() + .SetRaw(StackCount) // 叠层越多伤害越高 + .SetType(DamageType.True) + .SetFlags(DamageFlags.IgnoreIFrame) + .Build(); + Owner.ApplyDirectDamage(info); + } + + public override void OnExpire() + { + StackCount = 0; + Owner.SetShaderParam("_PoisonGlow", 0f); + } + + void UpdateShader() + => Owner.SetShaderParam("_PoisonGlow", StackCount / (float)MaxStacks); + + public override string GetDisplayName() => $"中毒 x{StackCount}"; + } +} +``` + +### 11.1 视觉效果汇总 + +| 状态 | Shader 参数 | 效果描述 | +|------|------------|---------| +| `Fire` | `_FireGlow: 0→1` | 角色轮廓橙红色自发光,强度随时间衰减 | +| `Poison x1` | `_PoisonGlow: 0.33` | 轻微绿色色调叠加 | +| `Poison x3` | `_PoisonGlow: 1.0` | 强绿色,角色变色明显 | +| `Stun` | `_StunFlash: 1` | 黄白色闪烁(0.1s 间隔)| + +> Shader 参数通过 `MaterialPropertyBlock` 修改,**不影响共享材质**。 + +### 11.2 净化条件 + +| 效果 | 净化方式 | +|------|---------| +| `Fire` | 进入水域(`WaterZone` 触发 `CleanseEffect(Fire)`)| +| `Poison` | 装备「解毒魅」(`OnEquip` 时订阅 `OnStatusEffectApplied`,自动触发净化)| +| 所有效果 | 存档点激活时,`SavePoint.OnInteract` 调用 `CleanseAll()` | + +--- + +## 12. Layer 矩阵配置 + +> **参见** Design/57_PhysicsLayerMatrix.md — 完整 Layer ID 表与规则说明 +> 在 `Physics2D Settings`(`ProjectSettings/Physics2D.asset`)中配置碰撞矩阵。 + +### Layer 定义总表(固定分配,禁止随意挪用) + +| Layer ID | 名称 | 用途 | +|---------|------|------| +| 0 | `Default` | 无物理需求的装饰物 | +| 8 | `Ground` | 地面/实体平台 | +| 9 | `OneWayPlatform` | 单向平台(可从下方穿越) | +| 10 | `Wall` | 垂直可抓附墙壁 | +| 11 | `Hazard` | 伤害区域(荆棘/熔岩),仅 Trigger | +| 12 | `Player` | 玩家主体 Collider | +| 13 | `PlayerHitBox` | 玩家攻击判定(HitBox) | +| 14 | `PlayerHurtBox` | 玩家受击区(HurtBox) | +| 15 | `Enemy` | 敌人主体 Collider | +| 16 | `EnemyHitBox` | 敌人攻击判定(HitBox) | +| 17 | `EnemyHurtBox` | 敌人受击区(HurtBox) | +| 18 | `Projectile` | 玩家弹射物 | +| 19 | `EnemyProjectile` | 敌人弹射物 | +| 20 | `ParryTarget` | 可弹反的弹射物 | +| 21 | `Interactable` | 可交互物件触发区 | +| 22 | `LiquidZone` | 液态区域 Trigger | +| 23 | `AbilityGate` | 能力门触发区 | +| 24 | `Pickup` | 掉落物(靠近自动吸附) | +| 25 | `Room` | 房间边界(触发场景加载) | +| 26 | `CameraZone` | Cinemachine 约束区域 | +| 27 | `VFX` | 粒子特效,不参与碰撞 | +| 28 | `NavMesh` | PathBerserker2d 寻路专属 | +| 29 | `MagicWall` | 魔法障壁(Ghost 层忽略) | +| 30 | `Ghost` | 太虚斩/地行术激活期间的玩家层 | +| 31 | `PhantomBody` | 残阴术灵体层 | + +### 碰撞矩阵(✅ = 检测,─ = 忽略;(T) = 仅 Trigger) + +| | Ground | OWPlat | Wall | Hazard | Player | PlayerHB | PlayerHurtB | Enemy | EnemyHB | EnemyHurtB | Proj | EnemyProj | ParryTarget | Interactable | LiquidZone | Pickup | Room | +|--|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| **Ground** | ─ | ─ | ─ | ─ | ✅ | ─ | ─ | ✅ | ─ | ─ | ✅ | ✅ | ─ | ─ | ─ | ─ | ─ | +| **OWPlat** | ─ | ─ | ─ | ─ | ✅ | ─ | ─ | ✅ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | +| **Wall** | ─ | ─ | ─ | ─ | ✅ | ─ | ─ | ✅ | ─ | ─ | ✅ | ✅ | ─ | ─ | ─ | ─ | ─ | +| **Hazard** | ─ | ─ | ─ | ─ | ✅(T) | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | +| **Player** | ✅ | ✅ | ✅ | ✅(T) | ─ | ─ | ─ | ─ | ✅(T) | ─ | ─ | ✅(T) | ─ | ✅(T) | ✅(T) | ✅(T) | ✅(T) | +| **PlayerHitBox** | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ✅(T) | ─ | ─ | ─ | ─ | ─ | ─ | ─ | +| **PlayerHurtBox** | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ✅(T) | ─ | ─ | ✅(T) | ✅(T) | ─ | ─ | ─ | ─ | +| **Enemy** | ✅ | ✅ | ✅ | ─ | ─ | ✅(T) | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | +| **EnemyHitBox** | ─ | ─ | ─ | ─ | ─ | ─ | ✅(T) | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | +| **EnemyHurtBox** | ─ | ─ | ─ | ─ | ─ | ✅(T) | ─ | ─ | ─ | ─ | ✅(T) | ─ | ─ | ─ | ─ | ─ | ─ | +| **Projectile** | ✅ | ─ | ✅ | ─ | ─ | ─ | ✅(T) | ─ | ─ | ✅(T) | ─ | ─ | ─ | ─ | ─ | ─ | ─ | +| **EnemyProj** | ✅ | ─ | ✅ | ─ | ✅(T) | ─ | ✅(T) | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | +| **ParryTarget** | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | ─ | + +### Ghost / MagicWall / PhantomBody 补充矩阵 + +| | Ground | OWPlat | Wall | MagicWall | Interactable | PhantomInteractable | +|--|:---:|:---:|:---:|:---:|:---:|:---:| +| **Ghost** | ✅ | ✅ | ✅ | ─ 忽略 | ✅(T) | ✅(T) | +| **MagicWall** | ─ | ─ | ─ | ─ | ─ | ─ | +| **PhantomBody** | ─ 忽略 | ─ 忽略 | ─ 忽略 | ─ 忽略 | ─ | ✅(T) | + +> - `Ghost`:太虚斩/地行术激活期间玩家切换到此层,穿越 `MagicWall`,但仍与地面/墙壁碰撞(地行术需站在地面遁行) +> - `PhantomBody`:残阴术灵体,完全忽略地面/墙壁,仅触发 `PhantomInteractable` +> - `SoftTerrain` **不需要独立物理层**:使用 `Ground` 层,通过检查 `SoftTerrain` 组件来判断地形类型 + +--- + +## 13. PoiseSystem(霸体系统) + +> **参见** Design/54_PoiseSystem.md — 完整规则说明 +> **核心机制**:霸体使用**等级比较**,而非数值耐久条。 +> - 攻击方:`DamageInfo.Break`(`BreakLevel` 枚举)——此次攻击能打断多高的霸体 +> - 承受方:`IPoiseSource.GetCurrentPoiseLevel()`(`PoiseLevel` 枚举)——当前帧拥有多高的霸体 +> - 判定公式:`(int)info.Break >= (int)currentPoise` → 打断成功 +> - **玩家和敌人均可拥有霸体**(玩家在攻击/技能动画的特定帧,敌人在超甲状态) + +--- + +### PoiseWindowConfig(时间窗口霸体) + +```csharp +// 路径: Assets/Scripts/Combat/PoiseWindowConfig.cs +// 描述某个状态/技能在特定动画时间段内的霸体等级 +[System.Serializable] +public struct PoiseWindowConfig +{ + public PoiseLevel Level; // 此窗口期间的霸体等级 + public float NormalizedStart; // 动画归一化时间起点(0~1) + public float NormalizedEnd; // 动画归一化时间终点(0~1) +} +``` + +--- + +### PoiseOverrideTableSO(精细控制资产) + +```csharp +// 路径: Assets/ScriptableObjects/Combat/PoiseOverrideTable.asset +// 用于特殊规则:某个特定 sourceId 对某类目标的打断规则覆盖(无视常规等级比较) +[CreateAssetMenu(menuName = "Combat/PoiseOverrideTable")] +public class PoiseOverrideTableSO : ScriptableObject +{ + [System.Serializable] + public struct OverrideEntry + { + public string SourceId; // DamageSourceSO.sourceId(攻击来源) + public string TargetTag; // 目标 GameObject Tag(如 "Boss") + public BreakLevel OverrideBreak; // 覆盖使用的打断等级(忽略 DamageInfo.Break) + } + + public List Entries; + + public bool TryGetOverride(string sourceId, string targetTag, out BreakLevel result) + { + foreach (var e in Entries) + { + if (e.SourceId == sourceId && e.TargetTag == targetTag) + { + result = e.OverrideBreak; + return true; + } + } + result = default; + return false; + } +} +``` + +**资产路径**:`Assets/ScriptableObjects/Combat/PoiseOverrideTable.asset` + +--- + +### PlayerController 实现 IPoiseSource + +```csharp +// PlayerController 在攻击/技能特定动画帧激活霸体 +// 各 AttackState / SkillState 在 OnStateEnter 时调用 SetPoiseWindow() +public partial class PlayerController : MonoBehaviour, IPoiseSource +{ + private PoiseWindowConfig _currentPoiseWindow; + private Animancer.AnimancerState _activeState; // 由 Animancer 提供当前动画状态 + + public void SetPoiseWindow(PoiseWindowConfig window) + => _currentPoiseWindow = window; + + public void ClearPoiseWindow() + => _currentPoiseWindow = default; + + // IPoiseSource 实现:每帧查询当前霸体等级 + public PoiseLevel GetCurrentPoiseLevel() + { + if (_currentPoiseWindow.Level == PoiseLevel.None) return PoiseLevel.None; + if (_activeState == null) return PoiseLevel.None; + + float t = _activeState.NormalizedTime % 1f; + bool inWindow = t >= _currentPoiseWindow.NormalizedStart + && t <= _currentPoiseWindow.NormalizedEnd; + return inWindow ? _currentPoiseWindow.Level : PoiseLevel.None; + } +} +``` + +--- + +### EnemyPoiseComponent(敌人霸体) + +```csharp +// 路径: Assets/Scripts/Enemies/EnemyPoiseComponent.cs +// 挂在 EnemyBase 上,实现 IPoiseSource +// 敌人的霸体通常由行为树 Task(如 SuperArmorTask)全局开启/关闭 +[RequireComponent(typeof(EnemyBase))] +public class EnemyPoiseComponent : MonoBehaviour, IPoiseSource +{ + [SerializeField] private PoiseLevel _defaultPoiseLevel = PoiseLevel.None; + + private PoiseLevel _currentPoiseLevel; + + private void Awake() + { + _currentPoiseLevel = _defaultPoiseLevel; + // 向同节点 HurtBox 注入自身 + if (TryGetComponent(out var hurtBox)) + hurtBox.SetPoiseSource(this); + } + + // 由行为树 Task 或 Boss 状态机调用 + public void SetPoiseLevel(PoiseLevel level) => _currentPoiseLevel = level; + + // IPoiseSource 实现 + public PoiseLevel GetCurrentPoiseLevel() => _currentPoiseLevel; +} +``` + +--- + +### HurtBox 中的霸体判定调用(已在 §5 实现,此处说明流程) + +``` +HurtBox.ReceiveDamage(info) + ↓ + 2. 霸体检查 + ├─ _poiseSource == null → 跳过(无霸体实体) + ├─ info.Flags has ForceBreak → 强制打断,跳过检查 + ├─ info.Break == BreakLevel.None → 不触发霸体检查 + ├─ _overrideTable.TryGetOverride(info.SourceId, tag, out lvl) → 使用覆盖等级 + └─ (int)effectiveBreak >= (int)currentPoise → 打断,继续受击流程 + (int)effectiveBreak < (int)currentPoise → 霸体生效,播放受击 VFX 但跳出 +``` + +--- + +## 14. IBreakable — 机关 / 障碍物交互系统 + +> 游戏中某些机关(晶石、封印门、毒液容器……)**只能被特定类别/标签的攻击击碎**。 +> 这类物体实现 `IBreakable` 而非 `IDamageable`,`HitBox.OnTriggerEnter2D` 会把 `DamageInfo` +> 传给 `IBreakable.TryInteract(info)` 而非 `HurtBox`,由物体本身决定是否响应。 + +### BreakConditionSO + +```csharp +// 路径: Assets/Scripts/Combat/BreakConditionSO.cs +// 一个 ScriptableObject 描述"哪些攻击能触发此机关" +// 可共享(多个机关引用同一 Condition),也可单独配置 +[CreateAssetMenu(menuName = "Combat/BreakCondition")] +public class BreakConditionSO : ScriptableObject +{ + [Header("Category 白名单(空 = 不限类别)")] + // DamageInfo.Category 必须在此集合中 + public DamageCategory[] AllowedCategories; + + [Header("Tags 必须位(位掩码 AND)")] + // DamageInfo.Tags 必须包含以下所有标签(AND 逻辑) + public DamageTags RequiredTags; + + [Header("Tags 禁止位(位掩码 AND NOT)")] + // DamageInfo.Tags 包含以下任意标签时拒绝 + public DamageTags ForbiddenTags; + + [Header("DamageType 白名单(空 = 不限元素)")] + public DamageType[] AllowedTypes; + + [Header("技能 ID 白名单(空 = 不限技能)")] + // 若填写则 DamageInfo.SkillId 必须在此列表中 + public string[] AllowedSkillIds; + + // 核心判定:DamageInfo 是否满足本条件 + public bool Evaluate(in DamageInfo info) + { + // 1. Category 检查 + if (AllowedCategories is { Length: > 0 } + && System.Array.IndexOf(AllowedCategories, info.Category) < 0) + return false; + + // 2. RequiredTags 检查(必须全包含) + if (RequiredTags != DamageTags.None + && (info.Tags & RequiredTags) != RequiredTags) + return false; + + // 3. ForbiddenTags 检查(不能包含任何禁止标签) + if (ForbiddenTags != DamageTags.None + && (info.Tags & ForbiddenTags) != 0) + return false; + + // 4. DamageType 检查 + if (AllowedTypes is { Length: > 0 } + && System.Array.IndexOf(AllowedTypes, info.Type) < 0) + return false; + + // 5. SkillId 检查 + if (AllowedSkillIds is { Length: > 0 } + && System.Array.IndexOf(AllowedSkillIds, info.SkillId) < 0) + return false; + + return true; + } +} +``` + +### IBreakable 接口 + +```csharp +// 路径: Assets/Scripts/Combat/IBreakable.cs +// 机关、障碍物实现此接口,而非 IDamageable +// Layer 建议: "Breakable"(见 §12 Layer 矩阵) +public interface IBreakable +{ + // 由 HitBox.OnTriggerEnter2D 调用 + // 返回 true 表示成功触发,false 表示条件不满足(静默忽略) + bool TryInteract(in DamageInfo info); +} +``` + +### BreakableProp(通用实现) + +```csharp +// 路径: Assets/Scripts/Combat/BreakableProp.cs +// 通用可破坏/可交互物体(挂在机关 Prefab 上) +// 满足 BreakCondition 时扣血;HP ≤ 0 时触发 Break 事件 +public class BreakableProp : MonoBehaviour, IBreakable +{ + [SerializeField] private BreakConditionSO _condition; + [SerializeField] private int _maxHp = 1; // 默认单次即碎 + [SerializeField] private VoidEventChannelSO _onBroken; // 全局广播(开门、切换场景等) + [SerializeField] private FeedbackPresetSO _hitFeedback; + [SerializeField] private FeedbackPresetSO _breakFeedback; + + // 拒绝响应时播放(提示玩家"这里需要特定能力") + [SerializeField] private FeedbackPresetSO _rejectFeedback; + + private int _currentHp; + + private void Awake() => _currentHp = _maxHp; + + public bool TryInteract(in DamageInfo info) + { + if (!_condition.Evaluate(info)) + { + // 条件不满足:播放拒绝反馈(闪烁、音效提示等) + _rejectFeedback?.Play(transform.position); + return false; + } + + _currentHp -= info.FinalDamage > 0 ? info.FinalDamage : 1; + _hitFeedback?.Play(transform.position); + + if (_currentHp <= 0) + { + _breakFeedback?.Play(transform.position); + _onBroken?.Raise(); + gameObject.SetActive(false); // 或 Destroy / 动画 + } + return true; + } +} +``` + +### 机关配置示例(数据驱动) + +| 机关 | AllowedCategories | RequiredTags | AllowedTypes | 说明 | +|------|-------------------|--------------|--------------|------| +| 毒液晶石 | — | `ElementPoison` | `Poison` | 任何毒属性攻击 | +| 封印门 | `SoulSkill` | `SkyFormOnly` | — | 仅天形魂技能 | +| 弱点晶球 | `NormalAttack`, `SoulSkill` | `AfterParry` | — | 弹反后才能击碎 | +| 普通木箱 | `NormalAttack`, `SoulSkill`, `SpiritSkill` | `MeleeHit` | — | 任意近战 | +| 冰封机关 | — | `ElementFire` | `Fire` | 任何火属性 | +| 地形炸弹 | — | `BreakHeavy` \| `BreakSuper` | — | 需要重击/超级破 | + +--- + +## 15. ClashResolver — 拼刀系统 + +当**玩家与敌人的近战 HitBox 同时激活并相互重叠**时触发拼刀:双方武器碰撞,均不扣血,各自弹开,播放拼刀特效与音效。 + +> 仅携带 `CanClash` 标记(`DamageFlags.CanClash`)的 HitBox 才参与拼刀检测。弹射物、环境伤害、DoT 无此标记,永远不触发拼刀。 + +### 检测流程 + +``` +HitBox.OnTriggerEnter2D(Collider2D other) + │ + ├─ other.Layer == HurtBox → 正常伤害流水线 + │ + └─ other.Layer == 对立 HitBox Layer + └─ TryGetComponent(other, out rivalHitBox) + └─ rivalHitBox.IsActive + && rivalHitBox.CanClash (Flags.HasFlag CanClash) + && this.CanClash + └─ ClashResolver.Instance.ResolveClash(this, rivalHitBox) + → 中止伤害,触发拼刀效果 +``` + +### ClashResolver 类 + +```csharp +// 路径: Assets/Scripts/Combat/ClashResolver.cs +// 单例服务,常驻 Persistent 场景(由 GameManager 持有) +[DefaultExecutionOrder(-500)] +public class ClashResolver : MonoBehaviour +{ + public static ClashResolver Instance { get; private set; } + + [SerializeField] VoidEventChannelSO _onNailClash; + [SerializeField] ClashConfigSO _config; + + // 防止同一碰撞在同帧被双方 HitBox 各触发一次(去重) + readonly HashSet _processedThisFrame = new(); + + void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + } + + void LateUpdate() => _processedThisFrame.Clear(); + + public void ResolveClash(HitBox playerHitBox, HitBox enemyHitBox) + { + int key = playerHitBox.GetInstanceID() ^ enemyHitBox.GetInstanceID(); + if (!_processedThisFrame.Add(key)) return; // 本帧已处理,去重 + + // 1. 拼刀 HitStop(1 帧,比普通命中的 2 帧更短) + HitStopManager.FreezeFrames(_config.ClashFreezeFrames); + + // 2. 双方弹开 + ApplyClashKnockback(playerHitBox.OwnerRigidbody, enemyHitBox.transform.position); + ApplyClashKnockback(enemyHitBox.OwnerRigidbody, playerHitBox.transform.position); + + // 3. 广播事件(VFX / Audio / CameraImpulse 订阅) + _onNailClash?.Raise(); + } + + void ApplyClashKnockback(Rigidbody2D rb, Vector2 oppositePos) + { + if (rb == null) return; + var dir = ((Vector2)rb.transform.position - oppositePos).normalized; + rb.AddForce(dir * _config.ClashKnockbackForce, ForceMode2D.Impulse); + } +} +``` + +### ClashConfigSO + +```csharp +// 路径: Assets/ScriptableObjects/Config/Combat/ClashConfigSO.asset +[CreateAssetMenu(menuName = "Combat/ClashConfig")] +public class ClashConfigSO : ScriptableObject +{ + [Header("HitStop")] + public int ClashFreezeFrames = 1; // 拼刀冻帧(比命中的 2 帧更短) + + [Header("弹开")] + public float ClashKnockbackForce = 6.0f; // 拼刀弹开力度 + + [Header("Camera Impulse")] + public float ClashImpulseStrength = 0.3f; // Cinemachine Impulse 强度(轻微) +} +``` + +### 拼刀判定规则 + +| 情况 | 结果 | +|------|------| +| 双方 HitBox 均激活 + 均 `CanClash = true` | 触发拼刀,双方弹开,不扣血 | +| 仅玩家 HitBox 激活,敌人 HitBox 未激活 | 正常命中敌人 HurtBox | +| 敌人攻击标记为 `CanClash = false`(如 Boss 重击)| 不触发拼刀,正常伤害玩家 | +| 同帧多次碰撞 | `HashSet` 去重,每对 HitBox 每帧只触发一次 | + +> **设计意图**:普通近战攻击默认 `CanClash = true`,让拼刀自然发生。Boss 特殊重击设 `CanClash = false`,迫使玩家闪避而非硬拼。 + +--- + +## 16. HitBox / HurtBox 编辑器可视化 + +> **痛点**:HitBox 和 HurtBox 都依赖运行时 `Collider2D` 启用/禁用,Scene 视图中看不到当前有效的攻击范围和伤害接受范围,策划调整数值时必须靠猜。通过自定义 `[CustomEditor]` 在 Scene View 中绘制彩色标注,显著降低调整迭代成本。 + +### HitBoxEditor + +```csharp +// 路径: Assets/Scripts/Editor/Combat/HitBoxEditor.cs +// 程序集: BaseGames.Editor(Editor Only) +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace BaseGames.Editor.Combat +{ + [CustomEditor(typeof(HitBox))] + [CanEditMultipleObjects] + public class HitBoxEditor : UnityEditor.Editor + { + private static readonly Color ActiveColor = new(1f, 0.2f, 0.2f, 0.35f); // 红色(激活) + private static readonly Color InactiveColor = new(1f, 0.2f, 0.2f, 0.10f); // 红色(非激活,淡显) + private static readonly Color OutlineColor = new(1f, 0.0f, 0.0f, 0.90f); + + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + + var hb = (HitBox)target; + if (hb.IsActive) + { + EditorGUILayout.HelpBox("HitBox 当前激活中", MessageType.None); + } + } + + // Scene View 绘制 + private void OnSceneGUI() + { + var hb = (HitBox)target; + var col = hb.GetComponent(); + if (col == null) return; + + Color fill = hb.IsActive ? ActiveColor : InactiveColor; + Color outline = OutlineColor; + outline.a = hb.IsActive ? 1f : 0.4f; + + Handles.color = fill; + + if (col is BoxCollider2D box) + { + Vector3 center = hb.transform.TransformPoint(box.offset); + Vector3 size = new Vector3(box.size.x, box.size.y, 0f); + size = Vector3.Scale(size, hb.transform.lossyScale); + Handles.DrawSolidRectangleWithOutline( + GetBoxVerts(center, size, hb.transform.rotation), fill, outline); + } + else if (col is CircleCollider2D circle) + { + Vector3 center = hb.transform.TransformPoint(circle.offset); + float radius = circle.radius * Mathf.Max(hb.transform.lossyScale.x, + hb.transform.lossyScale.y); + Handles.DrawSolidArc(center, Vector3.forward, Vector3.right, 360f, radius); + } + + // 伤害数值标注(在 Scene View 中叠加显示) + var dmgSrc = hb.CurrentDamageSource; + if (dmgSrc != null) + { + Vector3 labelPos = hb.transform.position + Vector3.up * 0.4f; + Handles.Label(labelPos, + $"⚔ {dmgSrc.BaseDamage} Break:{dmgSrc.BreakLevel}", + new GUIStyle(GUI.skin.label) + { + fontSize = 10, + normal = { textColor = Color.red }, + fontStyle = FontStyle.Bold, + }); + } + } + + private static Vector3[] GetBoxVerts(Vector3 center, Vector3 size, Quaternion rot) + { + Vector3 half = size * 0.5f; + var verts = new Vector3[] + { + center + rot * new Vector3(-half.x, -half.y), + center + rot * new Vector3( half.x, -half.y), + center + rot * new Vector3( half.x, half.y), + center + rot * new Vector3(-half.x, half.y), + }; + return verts; + } + } +} +#endif +``` + +### HurtBoxEditor + +```csharp +// 路径: Assets/Scripts/Editor/Combat/HurtBoxEditor.cs +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace BaseGames.Editor.Combat +{ + [CustomEditor(typeof(HurtBox))] + [CanEditMultipleObjects] + public class HurtBoxEditor : UnityEditor.Editor + { + private static readonly Color ActiveColor = new(0.2f, 0.5f, 1f, 0.30f); // 蓝色(正常) + private static readonly Color IFrameColor = new(0.2f, 1f, 0.5f, 0.30f); // 绿色(无敌帧) + private static readonly Color OutlineColor = new(0.0f, 0.3f, 1.0f, 0.90f); + + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + var hb = (HurtBox)target; + if (hb.IsInvincible) + EditorGUILayout.HelpBox("⚡ 无敌帧激活中", MessageType.Warning); + } + + private void OnSceneGUI() + { + var hb = (HurtBox)target; + var col = hb.GetComponent(); + if (col == null) return; + + Color fill = hb.IsInvincible ? IFrameColor : ActiveColor; + Color outline = hb.IsInvincible + ? new Color(0.2f, 1f, 0.5f, 0.9f) : OutlineColor; + + Handles.color = fill; + + if (col is BoxCollider2D box) + { + Vector3 center = hb.transform.TransformPoint(box.offset); + Vector3 size = Vector3.Scale( + new Vector3(box.size.x, box.size.y, 0f), hb.transform.lossyScale); + Handles.DrawSolidRectangleWithOutline( + GetBoxVerts(center, size, hb.transform.rotation), fill, outline); + } + else if (col is CircleCollider2D circle) + { + Vector3 center = hb.transform.TransformPoint(circle.offset); + float radius = circle.radius * Mathf.Max(hb.transform.lossyScale.x, + hb.transform.lossyScale.y); + Handles.DrawSolidArc(center, Vector3.forward, Vector3.right, 360f, radius); + } + + // 状态标签 + if (hb.IsInvincible) + Handles.Label(hb.transform.position + Vector3.up * 0.5f, "I-Frame", + new GUIStyle { fontSize = 9, normal = { textColor = Color.green }, + fontStyle = FontStyle.Bold }); + } + + private static Vector3[] GetBoxVerts(Vector3 center, Vector3 size, Quaternion rot) + { + Vector3 half = size * 0.5f; + return new Vector3[] + { + center + rot * new Vector3(-half.x, -half.y), + center + rot * new Vector3( half.x, -half.y), + center + rot * new Vector3( half.x, half.y), + center + rot * new Vector3(-half.x, half.y), + }; + } + } +} +#endif +``` + +> **使用说明**:两个 Editor 脚本放入 `Assets/Scripts/Editor/Combat/`,对应的 asmdef `BaseGames.Editor` 需将 `Editor Only` 勾选。HitBox 激活时显示红色实心框 + 伤害数值标注;HurtBox 无敌帧期间变为绿色;未激活/非无敌帧时半透明浅色显示。 + +--- + +## 17. StatusEffectManager — 统一 Tick 驱动 + +> **架构决策(2026-05)**:原设计未明确 StatusEffect 的 Tick 调用方,如果各 Tick 逻辑分散在各 MonoBehaviour.Update 内,当单帧存在数十个状态效果实例时,引擎调度开销(每帧数十次 MonoBehaviour.Update 虚调用)将显著优于统一 Tick 的批处理。 + +### 驱动模式:Manager 集中 Tick + +```csharp +// StatusEffectManager 扩展(原 §10 实现基础上新增 Tick 集中调度) +// 路径: Assets/Scripts/Combat/StatusEffectManager.cs + +// ────────────────────────────────────────────────────────────────── +// 每帧由 StatusEffectManager.Update() 统一推进,StatusEffect 子类 +// 自身不挂 MonoBehaviour,不持有 Update/Coroutine +// ────────────────────────────────────────────────────────────────── + +public class StatusEffectManager : MonoBehaviour, IDamageable +{ + // 运行中的效果列表(复用 §10 的 _activeEffects) + private readonly List _activeEffects = new(); + + // ── 集中 Tick(替代各 Effect 自持 Coroutine)──────────────────── + private void Update() + { + float dt = Time.deltaTime; + // 倒序遍历,方便 RemoveAt(避免索引越界) + for (int i = _activeEffects.Count - 1; i >= 0; i--) + { + var effect = _activeEffects[i]; + effect.RemainingDuration -= dt; + effect.TickTimer -= dt; + + if (effect.TickTimer <= 0f) + { + effect.TickTimer += effect.TickInterval; + effect.OnTick(); + } + + if (effect.RemainingDuration <= 0f) + { + effect.OnExpire(); + _activeEffects.RemoveAt(i); + } + } + } + + // ApplyEffect / RemoveEffect / Clear 与 §10 相同,此处不重复 +} + +// StatusEffect 基类需将计时字段改为 Manager 驱动 +public abstract class StatusEffect +{ + public StatusEffectType EffectType { get; } + public abstract int MaxStacks { get; } + public int StackCount { get; protected set; } = 1; + + // 由 Manager.Update 驱动,子类只读 + public float RemainingDuration { get; set; } + public float TickInterval { get; protected set; } = 1.0f; // 默认 1s/Tick + public float TickTimer { get; set; } // 与 TickInterval 对齐,倒计时 + + // 生命周期钩子(由 Manager 调用,非 MonoBehaviour) + public abstract void OnApply(StatusEffectManager owner); + public virtual void OnStack() => StackCount++; + public abstract void OnTick(); + public abstract void OnExpire(); + public abstract string GetDisplayName(); + + protected StatusEffectManager Owner { get; private set; } + + // Manager 内部调用,注入宿主引用 + internal void Bind(StatusEffectManager owner) + { + Owner = owner; + TickTimer = TickInterval; // 首次 Tick 将在 TickInterval 秒后触发 + } +} +``` + +**迁移说明**:原 `FireEffect`/`PoisonEffect` 等子类中移除所有 `Coroutine` 调用,将 `duration` 字段更名为 `RemainingDuration`(Manager 负责倒计时);`TickInterval` 字段保持不变,含义从"协程 WaitForSeconds 参数"转为"Manager Tick 间隔"。 + diff --git a/Docs/Architecture/07_EnemyModule.md b/Docs/Architecture/07_EnemyModule.md new file mode 100644 index 0000000..da10849 --- /dev/null +++ b/Docs/Architecture/07_EnemyModule.md @@ -0,0 +1,1112 @@ +# 07 · 敌人模块 + +> **命名空间** `BaseGames.Enemies`、`BaseGames.Enemies.AI`、`BaseGames.Enemies.Navigation`、`BaseGames.Enemies.Boss.Patterns` +> **程序集** 见各 asmdef +> **路径** `Assets/Scripts/Enemies/` +> **依赖** `BaseGames.Combat`、`Kybernetik.Animancer`、`BehaviorDesigner.Runtime`、`PathBerserker2d` + +--- + +## 目录 + +1. [EnemyBase](#1-enemybase) +2. [EnemyStats](#2-enemystats) +3. [EnemyMovement](#3-enemymovement) +4. [EnemyCombat](#4-enemycombat) +5. [EnemyNavAgent](#5-enemynavagent) +6. [EnemyStatsSO](#6-enemystatsso) +7. [EnemyAnimationConfigSO](#7-enemyanimationconfigso) +8. [Behavior Designer 任务类目录](#8-behavior-designer-任务类目录) +9. [BossBase](#9-bossbase) +10. [BossOrchestrator](#10-bossorchestrator) +11. [AttackPatternSO 与 TelegraphSystem](#11-attackpatternso-与-telegraphsystem) +12. [DeathShade(死亡遗骸)](#12-deathshade) +13. [Enemy Prefab 层级结构](#13-enemy-prefab-层级结构) +14. [LootTableSO 与 LootResolver](#14-loottableso-与-lootresolver) +15. [BatchLOSSystem — Burst/Jobs 批量视线检测](#15-batchlossystem--burstjobs-批量视线检测) + +--- + +## 1. EnemyBase + +```csharp +// 路径: Assets/Scripts/Enemies/EnemyBase.cs +// 实现 IDamageable 接口(定义于 BaseGames.Combat) +public class EnemyBase : MonoBehaviour, IDamageable +{ + [Header("Config")] + [SerializeField] protected EnemyStatsSO _statsSO; + [SerializeField] protected EnemyAnimationConfigSO _animConfig; + + [Header("Sub Components(Inspector 引用,同 Prefab)")] + [SerializeField] protected EnemyStats _stats; + [SerializeField] protected EnemyMovement _movement; + [SerializeField] protected EnemyCombat _combat; + [SerializeField] protected EnemyNavAgent _nav; + [SerializeField] protected AnimancerComponent _animancer; + [SerializeField] protected EnemyFeedback _feedback; + [SerializeField] protected HurtBox _hurtBox; + [SerializeField] protected StatusEffectManager _statusEffects; + [SerializeField] protected PoiseSystem _poise; + [SerializeField] protected LootTableSO _lootTable; // 战利品掉落表 + + [Header("Event Channels - Raise")] + [SerializeField] private TransformEventChannelSO _onEnemyDied; + + // ──── 缓存组件(Awake 初始化,消除热路径 GetComponent) ───────────────────── + private BehaviorTree _behaviorTree; // GetComponent() 缓存,Awake 写入 + + // ──── IDamageable 实现 ─────────────────────────────────────────────── + public bool IsInvincible => _currentState == EnemyStateType.Dead; + public bool IsDead => _currentState == EnemyStateType.Dead; + public bool IsStaggered => _currentState == EnemyStateType.Stagger; + public int Defense => _stats.Defense; + public void TakeDamage(DamageInfo info); + // 1. 霸体检查:_poise.TryBreak(info) + // 2. _stats.CurrentHP -= info.FinalDamage + // 3. 若 HP ≤ 0 → Die() + // 4. 若霸体被打断 → ForceState(EnemyStateType.Stagger) + // 5. 否则 → ForceState(EnemyStateType.Hurt)(短硬直) + + // ──── 状态控制 ────────────────────────────────────────────────────── + public EnemyStateType CurrentState { get; private set; } + public void ForceState(EnemyStateType newState); + + // ──── BD 行为树接口(虚方法,子类可覆盖)────────────────────────── + public virtual void MoveTo(Vector2 target) => _nav.RequestMoveTo(target); + public virtual void MoveInDirection(float dir) => _movement.MoveHorizontal(dir); + public virtual void StopMovement() => _nav.StopNavigation(); + public virtual void BeginAttack(AttackType type) => _combat.StartAttack(type); + public virtual bool CanAttack() => _stats.AttackCooldownTimer <= 0; + public virtual bool IsPlayerInRange(float range) => _stats.DistanceToPlayer <= range; + public virtual bool IsPlayerVisible() => CheckLineOfSight(); + public virtual void FacePlayer() => _movement.FaceTarget(GetPlayerPosition()); + public virtual void JumpTo(Vector2 target) => _movement.JumpToTarget(target); + // ──── HurtBox 接口(受击击退,不由 BD 控制)──────────────────────── + // 由 HurtBox.ReceiveDamage 在伤害流程结束后调用(见 06_CombatModule §5) + public virtual void Knockback(DamageInfo info) + { + if (info.Flags.HasFlag(DamageFlags.NoKnockback)) return; + _movement.ApplyKnockback(info.KnockbackDirection, info.KnockbackForce); + } + + // ──── EnemyAnimationEvents 接口(虚方法,Boss 子类覆盖)────────── + // 由 EnemyAnimationEvents.OnAnimationEvent 在对应动画帧触发时调用(见 24_AnimEventModule §6) + public virtual void SpawnProjectile(string data) { } + public virtual void TriggerPhaseTwo() { } + public virtual void OnAnimationComplete(string data) { } + // ⚡ BD 每帧 Tick 调用 Blackboard 读写 SharedVariable;Awake 缓存、消除 GetComponent 热开销 + public BehaviorTree Blackboard => _behaviorTree; + + // ──── 生死 ────────────────────────────────────────────────────────── + protected virtual void Die(); + // 1. ForceState(EnemyStateType.Dead) + // 2. 禁用所有碰撞体 + // 3. BehaviorTree.DisableBehavior() + // 4. 播放死亡动画(Animancer) + // 5. 掉落战利品 LootResolver.Resolve(_lootTable, transform.position) + // 6. 掉落 Geo(Collectible Spawn) + // 7. Raise _onEnemyDied(广播 Transform) + // 8. 延迟归还到对象池 or 销毁 + + // ──── 内部 ────────────────────────────────────────────────────────── + // ⚠️ DEPRECATED: 以下 3 帧节流 LOS 实现已被 BatchLOSSystem 取代(见 §15)。 + // 在敌人实现 ILOSRequester 接口后,_losCache/_losLastFrame 字段及 + // CheckLineOfSight() 方法应移除,改为读取 _losResult 字段(由 BatchLOSSystem 每帧写入)。 + // 保留此段仅供 <4 个活跃敌人的场景或 BatchLOSSystem 未挂载时降级回退使用。 + // + // ─── 旧实现(保留作降级回退,不得在新敌人中直接使用)───────────────────── + // [System.Obsolete("使用 ILOSRequester + BatchLOSSystem 替代(见 §15)")] + private bool _losCache; + private int _losLastFrame = -99; + private const int LOS_REFRESH_INTERVAL = 3; + + // [System.Obsolete("使用 ILOSRequester + BatchLOSSystem 替代(见 §15)")] + private bool CheckLineOfSight() + { + if (Time.frameCount - _losLastFrame < LOS_REFRESH_INTERVAL) + return _losCache; // 返回缓存结果 + + _losLastFrame = Time.frameCount; + var playerPos = GetPlayerPosition(); + var origin = (Vector2)transform.position; + var dir = (playerPos - origin).normalized; + var dist = Vector2.Distance(origin, playerPos); + var hit = Physics2D.Raycast(origin, dir, dist, LayerMask.GetMask("Terrain")); + _losCache = (hit.collider == null); + return _losCache; + } + // ─── 新实现(ILOSRequester 适配后使用此字段)───────────────────────────── + // private bool _losResult; // 由 BatchLOSSystem.ReceiveLOSResult() 写入 + // public virtual bool IsPlayerVisible() => _losResult; // 覆盖上方虚方法 + + // 玩家位置来源——统一通过 PlayerPositionEventChannelSO 订阅更新到黑板 SharedVariable + // 不直接引用 PlayerController,保持模块边界隔离。 + // EnemyBase.Awake 中订阅 EVT_PlayerPositionUpdated ,将坐标写入 BD SharedVar “PlayerPosition” + private Vector2 GetPlayerPosition() + => ((SharedVector2)_behaviorTree.GetVariable("PlayerPosition")).Value; +} + +public enum EnemyStateType { Controlled, Hurt, Stagger, Dead } +public enum AttackType { Melee, Ranged, Special } +``` + +--- + +## 2. EnemyStats + +```csharp +// 路径: Assets/Scripts/Enemies/EnemyStats.cs +public class EnemyStats : MonoBehaviour +{ + private EnemyStatsSO _config; // 由 EnemyBase.Awake 注入 + + public int MaxHP { get; private set; } + public int CurrentHP { get; private set; } + public int Defense { get; private set; } + public float AttackCooldownTimer { get; private set; } + public float DistanceToPlayer { get; set; } // 每帧由 EnemyBase 更新 + + public void Initialize(EnemyStatsSO so); + public void TakeDamage(int amount); + public void TickAttackCooldown(float dt); + public void ResetAttackCooldown(); + + // 存档集成 + public EnemySaveData GetSaveData(); + public void LoadSaveData(EnemySaveData data); +} +``` + +--- + +## 3. EnemyMovement + +```csharp +// 路径: Assets/Scripts/Enemies/EnemyMovement.cs +[RequireComponent(typeof(Rigidbody2D))] +public class EnemyMovement : MonoBehaviour +{ + [SerializeField] private EnemyStatsSO _config; + + private Rigidbody2D _rb; + private int _facingDir = 1; + + public bool IsGrounded { get; private set; } + + public void MoveHorizontal(float dir); + // dir: +1 右, -1 左, 0 停止 + // 速度 = dir * _config.WalkSpeed(追击时用 RunSpeed,BD 任务设置 speed 参数) + + public void MoveWithSpeed(float dir, float speed); // BD 任务显式传速度 + + public void FaceTarget(Vector2 targetPos); + // SpriteRenderer.flipX = (targetPos.x < transform.position.x) + + public void ApplyKnockback(Vector2 dir, float force); + public void StopHorizontal(); + + private void FixedUpdate() + { + CheckGrounded(); + } +} +``` + +--- + +## 4. EnemyCombat + +```csharp +// 路径: Assets/Scripts/Enemies/EnemyCombat.cs +public class EnemyCombat : MonoBehaviour +{ + [SerializeField] private HitBox[] _hitBoxes; // 按 AttackType 索引 + + // 由 EnemyBase.BeginAttack 调用(通常由 AnimationEvent 控制 On/Off) + public void StartAttack(AttackType type); + public void EnableHitBox(int index); + public void DisableHitBox(int index); + public void DisableAllHitBoxes(); +} +``` + +--- + +## 5. IPathAgent — 导航中间件接口 + +> **P2 优化**:`EnemyNavAgent` 直接依赖 `PB2dAgent`(PathBerserker2d 具体类型),一旦切换导航中间件需改全部 BD Task。通过接口隔离实现导航层可替换。 + +```csharp +// 路径: Assets/Scripts/Enemies/Navigation/IPathAgent.cs +namespace BaseGames.Enemy +{ + /// + /// 导航代理抽象接口。BD Task 和 EnemyBase 只依赖此接口,不依赖具体导航库。 + /// 实现:EnemyNavAgent(PathBerserker2d);测试用 NullPathAgent(无移动)。 + /// + public interface IPathAgent + { + /// 请求移动到世界坐标 + void RequestMoveTo(Vector2 target); + + /// 立即停止导航(清除路径)。 + void StopNavigation(); + + /// 是否已到达目标(距离 ≤ stoppingDistance)。 + bool IsAtDestination(); + + /// 运行时覆盖移动速度。 + void SetSpeed(float speed); + + /// 当前帧是否在移动(速度 > 0.01 且有有效路径)。 + bool IsMoving { get; } + + /// 路径寻路失败事件(目标不可达时触发)。 + event System.Action OnNavPathFailed; + } + + // ── 测试 / 无导航敌人用 ──────────────────────────────────────────── + public sealed class NullPathAgent : IPathAgent + { + public void RequestMoveTo(Vector2 _) { } + public void StopNavigation() { } + public bool IsAtDestination() => true; + public void SetSpeed(float _) { } + public bool IsMoving => false; + public event System.Action OnNavPathFailed { add { } remove { } } + } +} +``` + +--- + +## 5.1 EnemyNavAgent + +```csharp +// 路径: Assets/Scripts/Enemies/Navigation/EnemyNavAgent.cs +// 封装 PathBerserker2d 的 PB2dAgent 组件,实现 IPathAgent +[RequireComponent(typeof(PB2dAgent))] +public class EnemyNavAgent : MonoBehaviour, IPathAgent +{ + private PB2dAgent _agent; + + public bool IsMoving { get; private set; } + + // ── IPathAgent 实现 ─────────────────────────────────────────────── + public void RequestMoveTo(Vector2 target); // 设置 PathBerserker2d 目标 + public void StopNavigation(); // 停止导航 + public bool IsAtDestination(); // 是否已到达目标位置 + public void SetSpeed(float speed); // 运行时覆盖 PB2dAgent.speed + + public event System.Action OnNavPathFailed; // 路径寻路失败 + + // 边缘/跌落检测(用于 BD Conditional) + public bool IsNearEdge(float checkDist = 0.5f); +} +``` + +> **BD Task 调用示例**:BD 中 `MoveToTarget` 任务声明 `[RequireComponent] IPathAgent _nav`(通过 `GetComponent()` 获取),不直接引用 `EnemyNavAgent` 或 `PB2dAgent`。 + +--- + +## 6. EnemyStatsSO + +```csharp +[CreateAssetMenu(menuName = "Enemies/EnemyStats")] +public class EnemyStatsSO : ScriptableObject +{ + [Header("Identity")] + public string DisplayName; + public string EnemyId; // 全局唯一 ID(存档用) + + [Header("HP & Defense")] + public int MaxHP; + public int DefenseStat; + + [Header("Movement")] + public float WalkSpeed = 3f; + public float RunSpeed = 5f; + public float PatrolDistance = 5f; + + [Header("Detection")] + public float DetectionRange = 8f; + public float LoseAggroRange = 12f; + public LayerMask SightBlockMask; + + [Header("Combat")] + public float AttackRange = 1.5f; + public float AttackCooldown = 1.5f; + [Range(0f, 1f)] + public float StaggerResistance = 0f; // 0=正常受硬直,1=完全免疫 Stagger(精英怪用) + + [Header("Drops")] + public int GeoDropAmount = 3; + public int GeoDropVariance = 2; + public int KillPoints = 1; // 贡献给 PlayerStats.SpringKillPoints + + // ⚠️ MaxPoise / PoiseRegenDelay 已移至 PoiseSystem 组件,EnemyStatsSO 不再重复定义 +} +``` + +--- + +## 7. EnemyAnimationConfigSO + +```csharp +[CreateAssetMenu(menuName = "Enemies/AnimationConfig")] +public class EnemyAnimationConfigSO : ScriptableObject +{ + public AnimationClip Idle; + public AnimationClip Walk; + public AnimationClip Run; + public AnimationClip Alert; // 警觉动画(发现玩家时短暂播放) + public AnimationClip Attack_Melee; // 近战攻击动画 + public AnimationClip Attack_Ranged; // 远程攻击动画(无则留空) + public AnimationClip[] AttackVariants; // 多段/多种攻击变体 + public AnimationClip Hurt; + public AnimationClip Stagger; + public AnimationClip Dead; +} +``` + +--- + +## 8. Behavior Designer 任务类目录 + +所有 BD 任务位于 `Assets/Scripts/Enemies/AI/`,命名格式:`BD_{功能}.cs` + +### Action 任务 + +| 类名 | 功能 | 关键 SharedVariable | +|------|------|-------------------| +| `BD_MoveTo` | 移动到 Target 位置 | `SharedVector2 Target` | +| `BD_MoveToPlayer` | 持续追踪玩家(调用 `RequestMoveTo` + 实时更新) | `SharedTransform playerTransform` | +| `BD_Patrol` | 在出生点±PatrolDistance 间往返 | `SharedFloat PatrolRange` | +| `BD_Wait` | 等待固定秒数 | `SharedFloat Duration` | +| `BD_WaitRandom` | 等待随机秒数(最小/最大范围) | `SharedFloat Min`, `SharedFloat Max` | +| `BD_SetAlert` | 设置警觉状态并播放 Alert 动画 | `SharedBool isAlerted` | +| `BD_FaceTarget` | 朝向玩家 | — | +| `BD_StopMovement` | 停止移动 | — | +| `BD_Attack` | 触发攻击(调用 `EnemyBase.BeginAttack`) | `SharedInt AttackType` | +| `BD_WaitForAnimation` | 等待当前动画播放完毕 | — | +| `BD_PlayAnimation` | 播放指定 Animancer 动画 | `SharedString ClipName` | +| `BD_TelegraphAttack` | 发出攻击预警(见 TelegraphSystem) | `SharedFloat Duration` | +| `BD_SpawnProjectile` | 生成弹射物 | `SharedVector2 Direction`, `SharedString ProjectileKey` | +| `BD_JumpTo` | 跳跃至目标 | `SharedVector2 Target` | +| `BD_TeleportTo` | 瞬移到目标坐标(Boss 专用) | `SharedVector2 Target` | +| `BD_SummonMinions` | Boss 召唤小兵 | `SharedString MinionPrefabKey` | +| `BD_EnterPhase` | Boss 切换阶段 | `SharedInt PhaseIndex` | + +### Conditional 任务 + +| 类名 | 功能 | +|------|------| +| `BD_IsPlayerInRange` | 玩家在攻击范围内 | +| `BD_IsPlayerVisible` | 玩家可见(LOS 检测) | +| `BD_CanAttack` | 攻击冷却完毕 | +| `BD_IsHPBelow` | HP 低于阈值(Boss 换相) | +| `BD_IsGrounded` | 处于地面 | +| `BD_IsNearEdge` | 靠近平台边缘 | +| `BD_IsStateMatch` | 当前 EnemyStateType 匹配 | + +### BD SharedVariables(行为树全局变量) + +所有 `EnemyBase` 挂载的 `BehaviorTree` 共用以下 SharedVariables,由 `EnemyBase.Awake()` 通过 `BehaviorTree.GetVariable()` 注入: + +| 变量名 | 类型 | 说明 | +|--------|------|------| +| `playerTransform` | `SharedTransform` | 玩家 Transform 引用,由 `EnemyBase` 在每帧更新 | +| `selfTransform` | `SharedTransform` | 敌人自身 Transform(初始化时注入)| +| `patrolPointA` | `SharedVector2` | 巡逻左端点(EnemyBase 根据出生位置计算)| +| `patrolPointB` | `SharedVector2` | 巡逻右端点 | +| `isAlerted` | `SharedBool` | 是否处于警觉状态(`BD_SetAlert` 写入)| +| `targetPosition` | `SharedVector2` | 当前导航目标(各 Action 任务写入)| +| `hpThreshold` | `SharedFloat` | 当前 HP 比例(每帧由 EnemyBase 更新,供 `BD_IsHPBelow` 读取)| + +--- + +## 9. BossBase + +```csharp +// 路径: Assets/Scripts/Enemies/Boss/BossBase.cs +// 继承 EnemyBase,添加 Boss 专用逻辑 +public class BossBase : EnemyBase +{ + [SerializeField] protected BossOrchestrator _orchestrator; + [SerializeField] protected TelegraphSystem _telegraph; + + [Header("Boss 识别")] + [SerializeField] private string _bossId; // Boss 资产唯一 ID + + [Header("Event Channels")] + [SerializeField] private BoolEventChannelSO _onBossFightEnded; // 发布胜负 + [SerializeField] private BossPhaseEventChannelSO _onBossPhaseChanged; // 发布阶段切换 + + public string BossId => _bossId; + protected int _currentPhase = 0; + + // Boss 专属接口(由 BD_EnterPhase 任务调用) + public virtual void EnterPhase(int phase) + { + _currentPhase = phase; + // 1. 短暂无敌帧 + // 2. 播放 Phase 过渡演出动画 + _onBossPhaseChanged.Raise(new BossPhaseEvent { BossId = _bossId, Phase = phase }); + } + + public override void Die() + { + base.Die(); + _onBossFightEnded.Raise(true); // 广播胜利 + // 触发死亡过场(EventChain) + } + + // HP 阈值检查(BD_IsHPBelow 使用) + public bool IsHPBelow(float ratio) => (float)_stats.CurrentHP / _stats.MaxHP < ratio; +} + +// ─── BossPhaseConfigSO ────────────────────────────────────────────────────── +// 每个 Boss 的各阶段独立配置(挂载在 BossBase 的 phaseConfigs[] 数组中) +[CreateAssetMenu(menuName = "Enemies/Boss/PhaseConfig")] +public class BossPhaseConfigSO : ScriptableObject +{ + public int PhaseIndex; // 阶段编号(从 0 开始) + [Range(0f, 1f)] + public float HPThreshold; // HP 低于此比例时切换(0 = 从不自动切换) + public ExternalBehaviorTree BehaviorTreeAsset; // 该阶段使用的行为树资产 + public AudioClip MusicTrack; // 该阶段 BGM(可为 null) + public MMF_Player PhaseTransitionFeedback; // 切换阶段时播放的 Feel 特效 +} +``` + +--- + +## 10. BossOrchestrator + +```csharp +// 路径: Assets/Scripts/Enemies/Boss/Patterns/BossOrchestrator.cs +// 协调 Boss 阶段、技能执行、进场/退场表演 +public class BossOrchestrator : MonoBehaviour +{ + [SerializeField] private BossBase _boss; + [SerializeField] private TelegraphSystem _telegraph; + [SerializeField] private BoxCollider2D _arenaBlocker; // 进入 Boss 房间后关闭出口 + + [Header("Boss 技能(Phase 4 BossSkillModule 添加)")] + [SerializeField] private BossSkillSO[] _phaseOneSkills; // 一阶技能列表 + [SerializeField] private BossSkillSO[] _phaseTwoSkills; // 二阶技能列表 + [SerializeField] private BossSkillExecutor _executor; + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onBossFightStarted; // 发布战斗开始 + + int _currentPhase = 1; + CancellationTokenSource _cts; + + // 玩家进入触发器时调用 + public void StartBossFight() + { + _arenaBlocker.enabled = true; + _onBossFightStarted.Raise(_boss.BossId); + _boss.GetComponent().EnableBehavior(); + } + + // BD Task 节点调用:ExecuteSkillById(skillId) + public async UniTask ExecuteSkillById(string skillId) + { + var skills = _currentPhase == 1 ? _phaseOneSkills : _phaseTwoSkills; + var skill = System.Array.Find(skills, s => s.skillId == skillId); + if (skill == null) return; + _cts?.Cancel(); + _cts = new CancellationTokenSource(); + await _executor.ExecuteSkill(skill, _cts.Token); + } + + public void EnterPhaseTwo() + { + _currentPhase = 2; + _cts?.Cancel(); // 打断当前技能 + // 阶段切换由 BossBase.EnterPhase(2) 调用并广播 EVT_BossPhaseChanged + } +} +``` + +--- + +## 11. AttackPatternSO 与 TelegraphSystem + +```csharp +// 路径: Assets/Scripts/Enemies/Boss/Patterns/AttackPatternSO.cs +[CreateAssetMenu(menuName = "Enemies/Boss/AttackPattern")] +public class AttackPatternSO : ScriptableObject +{ + [System.Serializable] + public struct AttackEntry + { + public string AttackId; // BD 任务通过此 ID 触发 + public float Weight; // 随机权重(模式随机选择) + public float Cooldown; + public float TelegraphDuration; // 0 = 无预警 + public string TelegraphVfxKey; // Addressable 键 + public DamageSourceSO DamageSource; + } + + public AttackEntry[] Attacks; + public float PhaseSpeedMultiplier = 1f; // 此阶段移速倍率 +} + +// 路径: Assets/Scripts/Enemies/Boss/Patterns/TelegraphSystem.cs +// 攻击预警系统:在攻击前若干帧显示视觉提示 +public class TelegraphSystem : MonoBehaviour +{ + [SerializeField] private ObjectPoolManager _pool; + + // 开始预警(BD_TelegraphAttack 调用) + public IEnumerator ShowTelegraph(string vfxKey, float duration, Vector2 position); + // 1. 从对象池取出预警 VFX + // 2. 等待 duration 秒 + // 3. 归还 VFX(攻击开始) +} +``` + +--- + +### 11.1 AttackPatternEditor(命中帧可视化 Inspector) + +> **路径**:`Assets/Editor/Enemies/AttackPatternEditor.cs` +> **目标用户**:Boss 战斗设计师(配置攻击权重、预警时长、伤害数值时,无需对照原始 Inspector 多层嵌套) + +```csharp +[CustomEditor(typeof(AttackPatternSO))] +public class AttackPatternEditor : UnityEditor.Editor +{ + // ── 折叠状态 ───────────────────────────────────────────────────── + private bool[] _foldouts; + + public override void OnInspectorGUI() + { + var so = (AttackPatternSO)target; + var prop = serializedObject; + prop.Update(); + + // ── 整体参数 ───────────────────────────────────────────────── + EditorGUILayout.PropertyField(prop.FindProperty("PhaseSpeedMultiplier")); + EditorGUILayout.Space(6); + + // ── 攻击条目列表(可视化条形图 + 折叠面板) ───────────────── + EditorGUILayout.LabelField("AttackEntries", EditorStyles.boldLabel); + var attacks = so.Attacks; + if (attacks == null || attacks.Length == 0) + { + EditorGUILayout.HelpBox("尚无攻击条目。", MessageType.Info); + } + else + { + if (_foldouts == null || _foldouts.Length != attacks.Length) + _foldouts = new bool[attacks.Length]; + + float totalWeight = 0f; + foreach (var a in attacks) totalWeight += Mathf.Max(a.Weight, 0.001f); + + for (int i = 0; i < attacks.Length; i++) + { + var entry = attacks[i]; + float ratio = entry.Weight / totalWeight; + + // 折叠标题行:「[Bar████░░] AttackId 权重%」 + EditorGUILayout.BeginHorizontal(); + var barRect = GUILayoutUtility.GetRect(0, 16, GUILayout.Width(80)); + EditorGUI.DrawRect(barRect, new Color(0.2f, 0.4f, 0.8f, 0.3f)); + EditorGUI.DrawRect(new Rect(barRect.x, barRect.y, barRect.width * ratio, barRect.height), + new Color(0.2f, 0.6f, 1f, 0.8f)); + + _foldouts[i] = EditorGUILayout.Foldout(_foldouts[i], + $" {entry.AttackId} ({ratio:P0})", true); + EditorGUILayout.EndHorizontal(); + + if (_foldouts[i]) + { + EditorGUI.indentLevel++; + var arrayProp = prop.FindProperty("Attacks").GetArrayElementAtIndex(i); + EditorGUILayout.PropertyField(arrayProp.FindPropertyRelative("AttackId")); + EditorGUILayout.PropertyField(arrayProp.FindPropertyRelative("Weight")); + EditorGUILayout.PropertyField(arrayProp.FindPropertyRelative("Cooldown")); + + // 预警时长:0 = 无预警(灰色提示) + float tele = entry.TelegraphDuration; + EditorGUILayout.PropertyField(arrayProp.FindPropertyRelative("TelegraphDuration")); + if (tele <= 0f) + EditorGUILayout.HelpBox("TelegraphDuration = 0:此攻击无预警(即时)", MessageType.None); + + EditorGUILayout.PropertyField(arrayProp.FindPropertyRelative("TelegraphVfxKey")); + EditorGUILayout.PropertyField(arrayProp.FindPropertyRelative("DamageSource")); + + // 快速展示 DamageSource 摘要(避免策划必须展开嵌套 SO) + if (entry.DamageSource != null) + { + EditorGUI.indentLevel++; + EditorGUILayout.LabelField( + $"伤害预览: {entry.DamageSource.BaseDamage} × {entry.DamageSource.DamageMultiplier:F1} " + + $"= {Mathf.RoundToInt(entry.DamageSource.BaseDamage * entry.DamageSource.DamageMultiplier)} [{entry.DamageSource.Type}]", + EditorStyles.miniLabel); + EditorGUI.indentLevel--; + } + + // 一键 Ping 关联 SO + if (entry.DamageSource != null && GUILayout.Button("Ping DamageSourceSO", GUILayout.Height(18))) + EditorGUIUtility.PingObject(entry.DamageSource); + + EditorGUI.indentLevel--; + } + } + } + + prop.ApplyModifiedProperties(); + } +} +``` + +**提供能力一览**: + +| 功能 | 收益 | +|------|------| +| 随机权重百分比 + 条形图 | 策划直观感受攻击频率分布 | +| TelegraphDuration=0 警告 | 防止无意做成即时攻击 | +| DamageSource 内联摘要 | 查看伤害值无需展开嵌套 SO | +| Ping 关联 SO 按钮 | 快速定位引用资产 | + +--- + +## 12. DeathShade(死亡遗骸) + +```csharp +// 路径: Assets/Scripts/World/DeathShade.cs(位于 World 命名空间) +// 玩家死亡时在最后位置生成,携带死亡时的 Geo;与之交互可回收 Geo +public class DeathShade : MonoBehaviour, IInteractable +{ + [SerializeField] private StringEventChannelSO _onGeoRecovered; + + private int _storedGeo; + private string _sceneId; + private Vector2 _worldPosition; + + public void Initialize(int geo, string sceneId, Vector2 pos); + + public void Interact(Transform player) + { + // ⚠️ IInteractable 规范:参数为 Transform;需要 PlayerStats 时通过 player.GetComponent() 获取(PlayerController 无 Instance) + var pc = player.GetComponent(); + if (pc != null) pc.Stats.AddGeo(_storedGeo); + _onGeoRecovered.Raise(_sceneId); + // 归还对象池 or 销毁 + } + + // 存档集成(世界状态) + public DeathShadeSaveData GetSaveData(); + public void LoadSaveData(DeathShadeSaveData data); +} +``` + +--- + +## 13. Enemy Prefab 层级结构 + +``` +Assets/Prefabs/Enemies/ENM_{EnemyName}.prefab + +[ENM_GruntWarrior] ← EnemyBase + AnimancerComponent +├── EnemyStats +├── EnemyMovement ← Rigidbody2D (Dynamic) +├── EnemyCombat +├── EnemyNavAgent ← PB2dAgent +├── EnemyAnimator ← 管理 Animancer 状态机调用(监听 EnemyStateType 变化) +├── EnemyFeedback ← MMF_Player +├── StatusEffectManager +├── PoiseSystem +├── BehaviorTree ← Behavior Designer +├── [Body] ← SpriteRenderer +├── [DetectionRange] ← CircleCollider2D Trigger, Layer: Default(视野检测) +│ └── EnemyDetection.cs(检测玩家进入/离开,设置 SharedBool isAlerted) +├── [HurtBox] ← BoxCollider2D Trigger, Layer: EnemyHurtBox +│ └── HurtBox.cs +└── [HitBox_Melee] ← BoxCollider2D Trigger, Layer: EnemyAttack + └── HitBox.cs +``` + +--- + +## 13.5 Behavior Designer 性能规范 + +> **P1 优化**:BD 行为树无约束时容易演变为超深树(>10 层)和全帧 Tick 模式,导致 CPU 超预算。以下规范为强制规范,CodeReview 时核查。 + +### 行为树结构约束 + +| 约束项 | 限制值 | 原因 | +|--------|--------|------| +| 树最大深度 | ≤ **5 层** | 超深树调试困难,用子树(SubtreeBehavior)平拆 | +| 单棵树 Task 总数 | ≤ **30 个** | 超过时拆为主树 + 子树 | +| SharedVariable 总数/敌人 | ≤ **20 个** | 超过说明数据粒度过细,应合并 | +| 嵌套 SubtreeBehavior 层数 | ≤ **2 层** | 防止子树递归深度失控 | + +### Tick 频率规范 + +```csharp +// 路径: Assets/Scripts/Enemies/Base/EnemyBase.cs(BehaviorTree 初始化段) +void InitBehaviorTree() +{ + _behaviorTree = GetComponent(); + _behaviorTree.StartWhenEnabled = false; + _behaviorTree.RestartWhenComplete = true; + + // 非警觉状态:每 2 帧 Tick 一次(巡逻/Idle 敌人) + // 警觉状态:恢复每帧 Tick + _behaviorTree.UpdateInterval = UpdateIntervalType.EveryNFrames; + _behaviorTree.UpdateIntervalFrame = NON_AGGRO_TICK_INTERVAL; + + _behaviorTree.EnableBehavior(); +} + +/// +/// 警觉状态变更时调用(由 DetectionRange 触发)。 +/// 非警觉:每 2 帧 Tick;警觉:每帧 Tick。 +/// +public void SetAggroTickRate(bool isAggro) +{ + _behaviorTree.UpdateIntervalFrame = isAggro ? 1 : NON_AGGRO_TICK_INTERVAL; +} + +private const int NON_AGGRO_TICK_INTERVAL = 2; +``` + +### 同屏敌人数量限制 + +```csharp +// 路径: Assets/Scripts/Enemies/EnemyQuotaManager.cs +namespace BaseGames.Enemy +{ + /// + /// 管控同时激活的 BehaviorTree 敌人数量,超出配额时暂停最远敌人 BT。 + /// 防止大量敌人在屏幕外全速 Tick 消耗 CPU。 + /// + public class EnemyQuotaManager : MonoBehaviour + { + [SerializeField, Min(1)] int _maxActiveBehaviorTrees = 12; + + // 每 10 帧重新评估(避免每帧排序) + private const int REBALANCE_INTERVAL = 10; + private int _frameCount; + private readonly List _registered = new(); + + public void Register(EnemyBase enemy) => _registered.Add(enemy); + public void Unregister(EnemyBase enemy) => _registered.Remove(enemy); + + void Update() + { + if (++_frameCount % REBALANCE_INTERVAL != 0) return; + Rebalance(); + } + + private void Rebalance() + { + var playerPos = PlayerController.Instance != null + ? PlayerController.Instance.transform.position + : Vector3.zero; + + // 按距离排序,近的优先激活 + _registered.Sort((a, b) => + Vector3.SqrMagnitude(a.transform.position - playerPos) + .CompareTo(Vector3.SqrMagnitude(b.transform.position - playerPos))); + + for (int i = 0; i < _registered.Count; i++) + { + bool active = i < _maxActiveBehaviorTrees; + var bt = _registered[i].BehaviorTree; + if (bt.enabled != active) bt.enabled = active; + } + } + } +} +``` + +### Profiler 标记规范 + +所有 BD Task 的 `OnUpdate()` 应包裹 Profiler Marker,格式:`BD.TaskName`: + +```csharp +// BD Task 示例 +public class MoveToPlayer : Action +{ + private static readonly ProfilerMarker k_Marker = + new(ProfilerCategory.AI, "BD.MoveToPlayer"); + + public override TaskStatus OnUpdate() + { + using var _ = k_Marker.Auto(); + // ... 导航逻辑 + return TaskStatus.Running; + } +} +``` + +### 性能检查清单(Code Review) + +- [ ] 行为树深度 ≤ 5 层(Inspector 或 BD Editor 目测) +- [ ] 非警觉敌人 `UpdateIntervalFrame` ≥ 2 +- [ ] 同场景敌人受 `EnemyQuotaManager` 管控 +- [ ] 没有在 `OnUpdate()` 中调用 `FindObjectsOfType`、`GetComponentsInChildren` 等高开销 API +- [ ] LOS 实现路径:≤4 活跃敌人时允许使用 3 帧节流降级回退;>4 活跃敌人时**必须**实现 `ILOSRequester` 并注册到 `BatchLOSSystem`(见 §15) +- [ ] 所有 BD Task 包含 `ProfilerMarker` + +--- + +## 14. LootTableSO 与 LootResolver + +```csharp +// 路径: Assets/Scripts/Enemies/Loot/LootTableSO.cs +// 战利品掉落配置(概率 + 难度系数) +[CreateAssetMenu(menuName = "Enemies/LootTable")] +public class LootTableSO : ScriptableObject +{ + [System.Serializable] + public struct LootEntry + { + public string ItemId; // "" 表示 Geo 掉落 + public int GeoAmount; // ItemId 为空时使用 + public float BaseWeight; // 基础权重 + public bool ScaleWithDifficulty; // true → Hard 难度权重 × 1.5 + } + + public LootEntry[] Entries; + public int GuaranteedGeoMin; // 死亡时必掉的最低 Geo + public int GuaranteedGeoMax; +} + +// 路径: Assets/Scripts/Enemies/Loot/LootResolver.cs +// static 工具类,按概率掷骰,调用 Collectible 系统生成掉落物 +public static class LootResolver +{ + /// + /// 根据 LootTableSO 在 worldPosition 处生成战利品 + /// + public static void Resolve(LootTableSO table, Vector2 worldPosition) + { + if (table == null) return; + + // 1. 掉落保底 Geo + int geo = Random.Range(table.GuaranteedGeoMin, table.GuaranteedGeoMax + 1); + if (geo > 0) + CollectibleSpawner.SpawnGeo(worldPosition, geo); + + // 2. 按权重随机掉落条目 + float totalWeight = 0f; + var difficulty = DifficultyManager.Instance.CurrentLevel; + foreach (var entry in table.Entries) + { + float w = entry.BaseWeight; + if (entry.ScaleWithDifficulty && difficulty >= DifficultyLevel.Hard) w *= 1.5f; + totalWeight += w; + } + + float roll = Random.Range(0f, totalWeight); + float cumulative = 0f; + foreach (var entry in table.Entries) + { + float w = entry.BaseWeight; + if (entry.ScaleWithDifficulty && difficulty >= DifficultyLevel.Hard) w *= 1.5f; + cumulative += w; + if (roll <= cumulative) + { + if (!string.IsNullOrEmpty(entry.ItemId)) + CollectibleSpawner.SpawnItem(worldPosition, entry.ItemId); + break; + } + } + } +} +``` + +--- + +## 15. BatchLOSSystem — Burst/Jobs 批量视线检测 + +> **P1 优化**:场景中同时存在 8–20 个活跃敌人时,每个 `EnemyBase.CheckLineOfSight()` 各自 +> 调用一次 `Physics2D.Raycast`,即使添加了 3 帧节流(§13.5),单帧仍可有 6–7 次 +> 主线程 Raycast 调用。 +> 引入 `BatchLOSSystem`,把全部视线检测合并为一次 `RaycastCommand` 批处理作业, +> 由 `IJobParallelFor` + Burst 编译器在工作线程执行,主线程无阻塞。 + +### 15.1 设计原则 + +``` +BatchLOSSystem 职责: + ├─ 每帧(固定 FixedUpdate)收集所有 ILOSRequester 的查询请求 + ├─ 批量调用 Physics2D.RaycastCommand → JobHandle(Jobs + Burst) + ├─ 下一帧回调各 ILOSRequester 写入结果,敌人读取缓存值 + └─ EnemyBase 的 CheckLineOfSight() 改为读缓存,不再直接 Raycast + +零改动原则:EnemyBase.IsPlayerVisible() 外部签名不变; +内部由 "直接 Raycast" 改为 "读 _losResult 字段(BatchLOSSystem 每帧写入)"。 +``` + +### 15.2 ILOSRequester 接口 + +```csharp +// 路径: Assets/Scripts/Enemies/AI/ILOSRequester.cs +namespace BaseGames.Enemies.AI +{ + /// + /// 需要视线检测的组件实现此接口,由 BatchLOSSystem 统一管理。 + /// + public interface ILOSRequester + { + /// 射线起点(通常为敌人眼睛位置)。 + Vector2 LOSOrigin { get; } + + /// 射线终点(通常为玩家质心)。 + Vector2 LOSTarget { get; } + + /// 遮挡层遮罩(只检测地形层)。 + LayerMask LOSBlockingMask { get; } + + /// + /// 由 BatchLOSSystem 在作业完成后回调,写入本帧视线检测结果。 + /// + void ReceiveLOSResult(bool hasLineOfSight); + } +} +``` + +### 15.3 BatchLOSSystem 核心 + +```csharp +// 路径: Assets/Scripts/Enemies/AI/BatchLOSSystem.cs +using Unity.Collections; +using Unity.Jobs; +using UnityEngine; + +namespace BaseGames.Enemies.AI +{ + /// + /// 全局批量视线检测系统。Persistent 场景常驻,或由 EnemyManager 初始化。 + /// + public class BatchLOSSystem : MonoBehaviour + { + // 同时注册的最大请求方(场景内活跃敌人 + Boss 通常 ≤ 24) + private const int MAX_REQUESTERS = 32; + + private readonly List _requesters = new(MAX_REQUESTERS); + private NativeArray _commands; + private NativeArray _results; + private JobHandle _jobHandle; + private bool _jobScheduled; + + // ── 注册 / 注销(EnemyBase.Awake / OnDestroy 调用)───────────────── + public void Register(ILOSRequester requester) => _requesters.Add(requester); + public void Unregister(ILOSRequester requester) => _requesters.Remove(requester); + + private void Awake() + { + _commands = new NativeArray(MAX_REQUESTERS, Allocator.Persistent); + _results = new NativeArray(MAX_REQUESTERS, Allocator.Persistent); + } + + private void OnDestroy() + { + if (_jobScheduled) _jobHandle.Complete(); + _commands.Dispose(); + _results.Dispose(); + } + + // ── FixedUpdate:收集请求 → 调度作业 ──────────────────────────────── + private void FixedUpdate() + { + // 1. 完成上一帧作业,读取结果 + if (_jobScheduled) + { + _jobHandle.Complete(); + _jobScheduled = false; + for (int i = 0; i < _requesters.Count; i++) + { + bool hit = _results[i].collider != null; + // hit = 射线被地形拦截 → 无视线;未命中 → 有视线 + _requesters[i].ReceiveLOSResult(!hit); + } + } + + // 2. 构建本帧 RaycastCommand 批次 + int count = _requesters.Count; + for (int i = 0; i < count; i++) + { + var req = _requesters[i]; + Vector2 dir = req.LOSTarget - req.LOSOrigin; + float dist = dir.magnitude; + // QueryParameters 指定层遮罩,hitMultipleFaces=false 只取第一个碰撞体 + _commands[i] = new RaycastCommand( + from: req.LOSOrigin, + direction: dir.normalized, + queryParameters: new QueryParameters(req.LOSBlockingMask, false, false, false), + distance: dist + ); + } + + // 3. 调度并行 Raycast 作业(Burst 编译,工作线程执行) + if (count > 0) + { + _jobHandle = RaycastCommand.ScheduleBatch(_commands.GetSubArray(0, count), + _results.GetSubArray(0, count), + minCommandsPerJob: 4); // 每 Job 处理 4 条射线 + _jobScheduled = true; + } + } + } +} +``` + +### 15.4 EnemyBase 适配 + +```csharp +// EnemyBase.cs — 改动点(最小侵入) +// 新增字段 +private bool _losResult; // BatchLOSSystem 每帧写入 + +// 实现 ILOSRequester(新增接口) +public Vector2 LOSOrigin => (Vector2)transform.position + _statsSO.EyeOffset; +public Vector2 LOSTarget => _playerTransform.position; +public LayerMask LOSBlockingMask => _statsSO.LOSBlockingMask; +public void ReceiveLOSResult(bool hasLOS) => _losResult = hasLOS; + +// CheckLineOfSight() 改为读缓存(不再直接 Raycast) +private bool CheckLineOfSight() => _losResult; + +// Awake 中注册 +private void Awake() +{ + _behaviorTree = GetComponent(); + _batchLOS = ServiceLocator.Get(); // 或通过 FindObjectOfType 降级 + _batchLOS?.Register(this); +} + +private void OnDestroy() => _batchLOS?.Unregister(this); +``` + +### 15.5 性能对比 + +| 场景 | 原方案(逐帧单条 Raycast) | 新方案(BatchLOSSystem) | +|------|--------------------------|------------------------| +| 12 活跃敌人,3 帧节流 | 主线程 4 次/帧 Raycast2D | 主线程 0 次,工作线程 Burst 批处理 | +| 20 活跃敌人,无节流 | 主线程 20 次/帧 | 主线程 0 次,单次 JobHandle 调度 | +| GC | 无 | 无(NativeArray Persistent) | +| 结果延迟 | 即时 | 1 帧延迟(FixedUpdate → 下一 FixedUpdate 回调) | + +> **1 帧延迟可接受**:LOS 结果用于 BD 决策树(Aggro/非 Aggro 切换),1 帧延迟(~16ms) +> 在游戏感知层面不可察觉。如需零延迟(如弹幕激活),继续使用 `Physics2D.Raycast`。 + +### 15.6 EnemyStatsSO 新增字段 + +```csharp +// EnemyStatsSO 新增(见 §6): +[Header("视线检测")] +public Vector2 EyeOffset = new Vector2(0f, 0.5f); // 眼睛相对 Transform 偏移 +public LayerMask LOSBlockingMask; // Inspector 配置:勾选 Ground + Wall +``` diff --git a/Docs/Architecture/08_WorldModule.md b/Docs/Architecture/08_WorldModule.md new file mode 100644 index 0000000..ba8b3d6 --- /dev/null +++ b/Docs/Architecture/08_WorldModule.md @@ -0,0 +1,922 @@ +# 08 · 世界模块 + +> **命名空间** `BaseGames.World` +> **程序集** `BaseGames.World` +> **路径** `Assets/Scripts/World/` +> **依赖** `BaseGames.Core`、`BaseGames.Core.Events`、`BaseGames.Core.Save` +> (通过 `IRestoreOnSave`(定义于 Core)与玩家层解耦,无需直接引用 `BaseGames.Player`) + +--- + +## 目录 + +1. [场景结构规范(总览)](#1-场景结构规范) +2. [RoomTransition](#2-roomtransition) +3. [SavePoint](#3-savepoint) +4. [HazardZone](#4-hazardzone) +5. [Collectible](#5-collectible) +6. [AbilityUnlock](#6-abilityunlock) +7. [IInteractable 接口](#7-iinteractable-接口) +8. [InteractableDetector](#8-interactabledetector) +9. [WorldStateRegistry](#9-worldstateregistry) +10. [DestructibleTile](#10-destructibletile) +11. [MovingPlatform](#11-movingplatform) +12. [DirectionalDestructible — 单向可破坏墙](#12-directionaldestructible--单向可破坏墙) +13. [DirectionalInteractable — 单向触发机关](#13-directionalinteractable--单向触发机关) +14. [CrumblePlatform — 碎裂平台](#14-crumbleplatform--碎裂平台) +15. [SkillInteractable — 技能专属交互物](#15-skillinteractable--技能专属交互物) +16. [世界事件频道清单](#16-世界事件频道清单) + +--- + +## 1. 场景结构规范 + +**场景命名**(见 [01_ProjectStructure.md](./01_ProjectStructure.md) §8)。 + +**房间场景标准层级**(详见 Architecture README)。 +重要约束: + +- 每个房间场景必须包含 `RoomController` 组件(挂在 `[RoomRoot]` GameObject 上) +- 必须有至少一个 `RoomTransition`(出入口) +- 玩家出生点:`PlayerSpawnPoint` 组件,由 `SceneLoadRequest.EntryTransitionId` 匹配 + +--- + +## 2. RoomTransition + +```csharp +// 路径: Assets/Scripts/World/RoomTransition.cs +// 挂在出入口 Trigger Collider2D 上 +[RequireComponent(typeof(Collider2D))] +public class RoomTransition : MonoBehaviour +{ + [Header("Config")] + [SerializeField] private string _transitionId; // 唯一 ID(目标出口用于匹配出生点) + [SerializeField] private string _targetSceneName; // 目标场景(AddressKeys 常量) + [SerializeField] private string _targetTransitionId; // 目标场景中对应出口的 ID + [SerializeField] private bool _requiresKeyItem; // 是否需要持有钥匙物品 + [SerializeField] private string _requiredItemId; // 钥匙物品 ID + + [Header("Event Channel")] + [SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; + + // 玩家进入触发器 + private void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + if (_requiresKeyItem && !HasItem(_requiredItemId)) return; + + _onSceneLoadRequest.Raise(new SceneLoadRequest + { + SceneName = _targetSceneName, + EntryTransitionId = _targetTransitionId, + ShowLoadingScreen = false, + IsRespawn = false + }); + } + + private bool HasItem(string itemId); // 查询 PlayerStats 或 Inventory + + // Editor:在 Scene View 显示箭头 Gizmo + private void OnDrawGizmos(); +} + +// 玩家出生点,与 RoomTransition.transitionId 对应 +public class PlayerSpawnPoint : MonoBehaviour +{ + public string TransitionId; + public Vector2 SpawnPosition => transform.position; + public int FacingDirection = 1; // +1 右, -1 左 + + private void OnDrawGizmos() { /* 绿色标记 */ } +} +``` + +--- + +## 3. SavePoint + +```csharp +// 路径: Assets/Scripts/World/SavePoint.cs +// 实现 IInteractable + ISaveable,玩家交互时触发存档 +// 架构决策:通过 IRestoreOnSave(定义于 BaseGames.Core)调用玩家回血/灵泉, +// 避免 World 层反向依赖 BaseGames.Player,World.asmdef 无需引用 Player 程序集。 +public class SavePoint : MonoBehaviour, IInteractable, ISaveable +{ + [Header("Config")] + [SerializeField] private string _savePointId; + [SerializeField] private bool _restoreSpring = true; + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onSavePointActivated; + [SerializeField] private VoidEventChannelSO _onFastTravelOpen; + + private bool _isActivated; + + // IInteractable(⚠️ 参数为 Transform,与 14_NarrativeModule §1 / 07 §7 对齐) + public bool CanInteract => true; + public string InteractPrompt => _isActivated ? "休息" : "激活"; + public void Interact(Transform player) + { + _isActivated = true; + // 1. 通过 IRestoreOnSave 恢复玩家(World 不感知具体 Player 类型) + var restorer = player.GetComponentInChildren(); + if (restorer != null) + { + restorer.FullRestore(); + if (_restoreSpring) restorer.RestoreSpring(); + } + // 2. 广播存档点激活(GameManager 响应并调用 SaveManager.SaveAsync) + _onSavePointActivated?.Raise(_savePointId); + // 3. 若该场景已有多个存档点激活,打开快速旅行 UI + // 4. 播放激活动画 / 特效 + } + + // ISaveable 存档集成 + public bool IsActivated => _isActivated; + public void SetActivated(bool val) => _isActivated = val; +} +``` + +> **IRestoreOnSave 接口**(`Assets/Scripts/Core/IRestoreOnSave.cs`,命名空间 `BaseGames.Core`) +> `PlayerStats` 显式实现:`FullRestore()` → `FullHeal()`,`RestoreSpring()` → `RestoreSpringCharges()`。 +> 同一接口可扩展至其他可被存档点恢复的对象(伙伴、坐骑等),无需修改 SavePoint 本身。 + +--- + +## 4. HazardZone + +```csharp +// 路径: Assets/Scripts/World/HazardZone.cs +// 即死区域(深坑、岩浆等) +[RequireComponent(typeof(Collider2D))] +public class HazardZone : MonoBehaviour +{ + public enum RespawnType { AtLastSavePoint, AtRoomEntry } + + [SerializeField] private bool _isInstantKill = true; + [SerializeField] private int _damage = 9999; + [SerializeField] private RespawnType _respawnType = RespawnType.AtLastSavePoint; + + private void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + + var stats = other.GetComponentInParent(); + if (stats == null) return; + + if (_isInstantKill) + stats.TakeDamage(stats.MaxHP * 2); // 确保即死 + else + stats.TakeDamage(_damage); + } +} +``` + +--- + +## 5. Collectible + +```csharp +// 路径: Assets/Scripts/World/Collectible.cs +// Geo 货币 / 物品掉落 +public class Collectible : MonoBehaviour +{ + [Header("Config")] + [SerializeField] private CollectibleType _type; + [SerializeField] private int _geoAmount; // type = Geo 时 + [SerializeField] private string _itemId; // type = Item 时 + [SerializeField] private bool _isPersistent; // false = 敌人掉落(不存档); true = 固定位置(存档) + + [Header("Physics")] + [SerializeField] private float _bounceForce = 5f; + + [Header("Event Channel")] + [SerializeField] private StringEventChannelSO _onCollectiblePickup; + + private string _collectibleId; // 用于存档(持久化 Collectible 专用) + + private void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + + var player = other.GetComponentInParent(); + if (player == null) return; + + switch (_type) + { + case CollectibleType.Geo: + player.Stats.AddGeo(_geoAmount); + break; + case CollectibleType.Item: + // 通知 Inventory / QuestManager + _onCollectiblePickup.Raise(_itemId); + break; + } + + if (_isPersistent) + _onCollectiblePickup.Raise(_collectibleId); // 存档标记 + + Despawn(); + } + + private void Despawn(); // 归还对象池 + + // 敌人死亡时生成 Geo Collectible(由 EnemyBase 调用) + public static void SpawnGeo(Vector2 position, int amount, ObjectPoolManager pool); +} + +public enum CollectibleType { Geo, Item, HPOrb } +``` + +--- + +## 6. AbilityUnlock + +```csharp +// 路径: Assets/Scripts/World/AbilityUnlock.cs +// 世界中固定位置的能力解锁物(获取新技能) +public class AbilityUnlock : MonoBehaviour, IInteractable +{ + [SerializeField] private AbilityType _abilityToUnlock; + [SerializeField] private string _unlockId; // 存档用 + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onCollectiblePickup; // 通知存档已拾取 + + private bool _isCollected = false; + + public bool CanInteract => !_isCollected; + public string InteractPrompt => "获得能力"; + + public void Interact(Transform player) + { + if (_isCollected) return; + _isCollected = true; + // ⚠️ PlayerController 无 Instance;通过 player 参数获取 + player.GetComponent()?.Stats.UnlockAbility(_abilityToUnlock); + _onCollectiblePickup.Raise(_unlockId); + // 触发解锁演出(Cutscene / UI 提示) + gameObject.SetActive(false); + } + + public void SetCollected(bool val) + { + _isCollected = val; + if (val) gameObject.SetActive(false); + } +} +``` + +--- + +## 7. IInteractable 接口 + +```csharp +// 路径: Assets/Scripts/World/IInteractable.cs +// ⚠️ 与 14_NarrativeModule §1 对齐(权威定义):Transform 参数 + 5 成员 +namespace BaseGames.World +{ + public interface IInteractable + { + bool CanInteract { get; } // 当前是否可交互 + string InteractPrompt { get; } // 显示在交互提示 UI 上的文字 + void Interact(Transform player); // 传入玩家 Transform;需要 PlayerController 时通过 player.GetComponent() 获取(PlayerController 无 Instance) + void OnPlayerEnterRange(Transform player); // 进入检测范围 + void OnPlayerExitRange(); // 离开检测范围 + } +} +``` + +--- + +## 8. InteractableDetector + +```csharp +// 路径: Assets/Scripts/World/InteractableDetector.cs +// 挂在玩家上,检测周围可交互物并驱动交互 UI +public class InteractableDetector : MonoBehaviour +{ + [SerializeField] private float _detectRadius = 1.5f; + [SerializeField] private LayerMask _interactableLayer; + [SerializeField] private InputReaderSO _inputReader; + [SerializeField] private StringEventChannelSO _onShowInteractPrompt; // 发布:显示交互提示 + [SerializeField] private VoidEventChannelSO _onHideInteractPrompt; // 发布:隐藏交互提示 + + private IInteractable _nearest; + private IInteractable _previousNearest; + + private void OnEnable() => _inputReader.InteractEvent += TryInteract; + private void OnDisable() => _inputReader.InteractEvent -= TryInteract; + + private void Update() + { + // OverlapCircle → 找最近 IInteractable + var hits = Physics2D.OverlapCircleAll(transform.position, _detectRadius, _interactableLayer); + _nearest = FindNearest(hits); + if (_nearest != _previousNearest) + { + if (_previousNearest != null) { _previousNearest.OnPlayerExitRange(); _onHideInteractPrompt.Raise(); } + if (_nearest != null) { _nearest.OnPlayerEnterRange(transform); _onShowInteractPrompt.Raise(_nearest.InteractPrompt); } + _previousNearest = _nearest; + } + } + + private void TryInteract() + { + _nearest?.Interact(transform); // 传入玩家自身 Transform;IInteractable 内部通过 player.GetComponent() 获取组件(PlayerController 无 Instance) + } +} +``` + +--- + +## 9. WorldStateRegistry + +> **⚠️ 与 `14_NarrativeModule §8` 统一**:`WorldStateRegistry` 已改为 **ScriptableObject**(`CreateAssetMenu`), +> 通过 `[SerializeField]` 注入,不再使用静态 `Instance`。`HasFlag` / `SetFlag(key)` 接口与 Architecture 14 §8 保持一致。 + +```csharp +// 路径: Assets/Scripts/World/Narrative/WorldStateRegistry.cs +// 管理世界持久化状态(已收集物、已激活存档点、已开门、已销毁对象、通用标志) +// ScriptableObject 形式,各组件通过 [SerializeField] 注入,零耦合;与 14_NarrativeModule §8 统一 +namespace BaseGames.World +{ + [CreateAssetMenu(menuName = "World/WorldStateRegistry")] + public class WorldStateRegistry : ScriptableObject + { + private HashSet _collectedIds = new(); + private HashSet _activatedSavePoints = new(); + private HashSet _openedDoors = new(); + private HashSet _destroyedObjects = new(); + + public bool IsCollected(string id) => _collectedIds.Contains(id); + public void MarkCollected(string id) => _collectedIds.Add(id); + + public bool IsSavePointActivated(string id) => _activatedSavePoints.Contains(id); + public void MarkSavePointActivated(string id) => _activatedSavePoints.Add(id); + + public bool IsDestroyed(string id) => _destroyedObjects.Contains(id); + public void MarkDestroyed(string id) => _destroyedObjects.Add(id); + + public bool IsDoorOpened(string id) => _openedDoors.Contains(id); + public void MarkDoorOpened(string id) => _openedDoors.Add(id); + + // 通用世界状态标记(过场记录、剧情事件等) + // ⚠️ 接口与 14_NarrativeModule §8 统一:HasFlag(非 IsFlagSet);SetFlag(key) 单参数添加 + private HashSet _flags = new(); + public bool HasFlag(string key) => _flags.Contains(key); + public void SetFlag(string key) => _flags.Add(key); + + // SaveManager 集成(非 ISaveable,由 SaveManager 在 SaveAsync/LoadAsync 中直接调用) + public void LoadFromSave(WorldSaveData data); + public HashSet GetAllFlags(); + } +} +``` + +> **SaveManager 集成**:`WorldStateRegistry` 不实现 `ISaveable` 接口(ScriptableObject,非 MonoBehaviour)。 +> `SaveManager` 在保存/加载时直接调用: +> ```csharp +> // SaveManager.CollectAllData() 内: +> saveData.World = WorldStateRegistry.Instance.GetSaveData(); // 通过 SO 引用而非静态 Instance +> +> // SaveManager.ApplyLoadedData() 内: +> WorldStateRegistry.Instance.LoadFromSave(saveData.World); +> ``` +> `WorldStateRegistry` SO 资产路径:`Assets/Data/World/WorldStateRegistry.asset`。 + +--- + +## 10. DestructibleTile + +```csharp +// 路径: Assets/Scripts/World/DestructibleTile.cs +// 可被攻击破坏的地形块(影响导航网格) +public class DestructibleTile : MonoBehaviour, IDamageable +{ + [SerializeField] private int _maxHP = 1; + [SerializeField] private string _destructedId; // 存档唯一 ID + + private bool _isDestroyed = false; + + // IDamageable + public bool IsInvincible => _isDestroyed; + public int Defense => 0; + public void TakeDamage(DamageInfo info) + { + if (_isDestroyed) return; + if (!CheckDestroyCondition(info)) return; // 子类可覆盖(DirectionalDestructible 方向校验) + _isDestroyed = true; + // 禁用 Renderer + 碰撞体 + // 通知 PathBerserker2d 重新烘焙局部导航网格 + // 记录到 WorldStateRegistry + } + + // 子类覆盖以附加销毁前提条件(默认:无条件销毁) + protected virtual bool CheckDestroyCondition(DamageInfo info) => true; +} +``` + +--- + +## 11. MovingPlatform + +```csharp +// 路径: Assets/Scripts/World/MovingPlatform.cs +// 动态移动平台:Kinematic Rigidbody2D,乘客自动跟随(Passenger Pattern) +[RequireComponent(typeof(Rigidbody2D))] +public class MovingPlatform : MonoBehaviour +{ + public enum MoveType { LinearAB, WayPoints, TriggeredLinear } + + [Header("移动配置")] + [SerializeField] private MoveType _moveType = MoveType.LinearAB; + [SerializeField] private Transform[] _wayPoints; // LinearAB 仅用 [0][1] + [SerializeField] private float _speed = 3f; // u/s + [SerializeField] private float _waitAtEndpoint = 0.5f; // 端点停留秒数 + + [Header("TriggeredLinear 模式")] + [SerializeField] private VoidEventChannelSO _activationChannel; // 接收信号后单程运动 + + // 乘客检测:顶面上方 0.05f 的 IsTrigger BoxCollider2D,检测到 Player/Enemy 层 + [Header("乘客检测")] + [SerializeField] private BoxCollider2D _passengerSensor; // Trigger,仅用于检测 + + private Rigidbody2D _rb; + private List _passengers = new(); + private int _waypointIndex; + private bool _movingForward = true; + private bool _triggered; + + private void Awake() => _rb = GetComponent(); + + private void FixedUpdate() + { + if (_moveType == MoveType.TriggeredLinear && !_triggered) return; + MoveTowardsNextWaypoint(); + } + + private void MoveTowardsNextWaypoint() + { + var target = _wayPoints[_waypointIndex].position; + var next = Vector2.MoveTowards(_rb.position, target, _speed * Time.fixedDeltaTime); + _rb.MovePosition(next); + + if (Vector2.Distance(_rb.position, target) < 0.02f) + StartCoroutine(WaitAndAdvance()); + } + + private IEnumerator WaitAndAdvance() + { + yield return new WaitForSeconds(_waitAtEndpoint); + AdvanceWaypoint(); + } + + private void AdvanceWaypoint() + { + // LinearAB: 往返; WayPoints: 环形; TriggeredLinear: 到达终点后停止 + if (_moveType == MoveType.TriggeredLinear) + { + _waypointIndex = Mathf.Min(_waypointIndex + 1, _wayPoints.Length - 1); + if (_waypointIndex == _wayPoints.Length - 1) _triggered = false; + return; + } + if (_moveType == MoveType.LinearAB) + { + _movingForward = !_movingForward; + _waypointIndex = _movingForward ? 1 : 0; + } + else // WayPoints + { + _waypointIndex = (_waypointIndex + 1) % _wayPoints.Length; + } + } + + // ── 乘客跟随(Passenger Pattern)───────────────────────────────── + private void OnTriggerEnter2D(Collider2D other) + { + if ((1 << other.gameObject.layer & LayerMask.GetMask("Player", "Enemy")) == 0) return; + other.transform.SetParent(transform); + _passengers.Add(other.transform); + } + + private void OnTriggerExit2D(Collider2D other) + { + if (!_passengers.Contains(other.transform)) return; + other.transform.SetParent(null); + _passengers.Remove(other.transform); + // 继承平台当前速度(仅玩家) + if (other.CompareTag("Player")) + other.GetComponentInParent()?.AddForce( + _rb.velocity, ForceMode2D.Impulse); + } + + private void OnEnable() + { + if (_activationChannel != null) + _activationChannel.OnEventRaised += OnTriggered; + } + private void OnDisable() + { + if (_activationChannel != null) + _activationChannel.OnEventRaised -= OnTriggered; + } + private void OnTriggered() => _triggered = true; +} +``` + +**MoveType 说明**: + +| 类型 | 行为 | +|------|------| +| `LinearAB` | `_wayPoints[0]` ↔ `[1]` 往返循环 | +| `WayPoints` | 按 `_wayPoints[]` 顺序环形循环 | +| `TriggeredLinear` | 监听 `_activationChannel`,收到信号后单程 `[0]→[n-1]`,到达后停止 | + +> **NavSurface 联动**:每个移动平台挂载独立 `LocalNavSurface`(局部坐标系),附着其上的敌人 NavAgent 使用该 LocalNavSurface 寻路;参见 Guides/PathBerserker2d_Technical_Evaluation.md §5。 + +--- + +## 12. DirectionalDestructible — 单向可破坏墙 + +继承 `DestructibleTile`,在其基础上增加**攻击方向校验**: + +```csharp +// 路径: Assets/Scripts/World/DirectionalDestructible.cs +public class DirectionalDestructible : DestructibleTile +{ + public enum AttackSide { Left, Right, Top, Bottom, Any } + + [SerializeField] private AttackSide _validAttackSide = AttackSide.Any; + + protected override bool CheckDestroyCondition(DamageInfo info) + { + if (_validAttackSide == AttackSide.Any) + return base.CheckDestroyCondition(info); + + // 判断攻击来源方向(info.SourcePosition 由 HitBox 传入) + var dir = (info.SourcePosition - (Vector2)transform.position).normalized; + bool valid = _validAttackSide switch + { + AttackSide.Left => dir.x < -0.5f, + AttackSide.Right => dir.x > 0.5f, + AttackSide.Top => dir.y > 0.5f, + AttackSide.Bottom => dir.y < -0.5f, + _ => true + }; + return valid && base.CheckDestroyCondition(info); + } + +#if UNITY_EDITOR + private void OnDrawGizmos() + { + // 有效攻击方向:橙色箭头;无效方向:灰色叉号 + var arrow = _validAttackSide switch + { + AttackSide.Left => Vector2.left, + AttackSide.Right => Vector2.right, + AttackSide.Top => Vector2.up, + AttackSide.Bottom => Vector2.down, + _ => Vector2.zero + }; + if (arrow == Vector2.zero) return; + Gizmos.color = new Color(1f, 0.5f, 0f, 0.9f); + var origin = (Vector2)transform.position; + Gizmos.DrawLine(origin, origin + arrow * 0.8f); + } +#endif +} +``` + +| 典型场景 | 配置 | +|---------|------| +| 地板薄板:只能从下方砸穿 | `_validAttackSide = Bottom` | +| 密室封墙:仅能从房间内打开 | `_validAttackSide = Right`(依据朝向) | +| 普通脆弱墙 | 基类 `DestructibleTile`(`AnyAttack`)即可,不需此子类 | + +--- + +## 13. DirectionalInteractable — 单向触发机关 + +```csharp +// 路径: Assets/Scripts/World/DirectionalInteractable.cs +// 可从特定方向触发的单向机关(零耦合:通过 SO 事件频道连接受体) +[RequireComponent(typeof(Collider2D))] +public class DirectionalInteractable : MonoBehaviour, IInteractable +{ + public enum TriggerSide { Left, Right, Top, Any } + public enum TriggerCondition { PlayerAttack, PlayerBody, InteractKey } + + [Header("触发条件")] + [SerializeField] private TriggerSide _triggerSide = TriggerSide.Any; + [SerializeField] private TriggerCondition _triggerCondition = TriggerCondition.InteractKey; + + [Header("行为")] + [SerializeField] private bool _isOneShot; // 一次性,触发后永久激活 + [SerializeField] private string _interactableId; // 存档用唯一 ID + + [Header("事件频道(零耦合连接关卡受体)")] + [SerializeField] private VoidEventChannelSO _activationChannel; + [SerializeField] private VoidEventChannelSO _deactivationChannel; // 非 OneShot 离开时 + + [Header("反馈")] + [SerializeField] private MMF_Player _activateFeedback; + + private bool _activated; + + // ── IInteractable(InteractKey 模式)───────────────────────────── + public string InteractPrompt => _activated ? "已激活" : "交互"; + public void Interact(Transform player) // ⚠️ Transform 参数(与 §7 IInteractable 对齐) + { + if (_triggerCondition != TriggerCondition.InteractKey) return; + if (!CheckSide(player.position)) return; + TryActivate(); + } + + // ── PlayerBody / PlayerAttack 模式 ─────────────────────────────── + // PlayerBody:OnTriggerEnter2D(Collider IsTrigger) + // PlayerAttack:挂配套 HurtBox → DamageInfo → TryInteractFromDamage + private void OnTriggerEnter2D(Collider2D other) + { + if (_triggerCondition != TriggerCondition.PlayerBody) return; + if (!other.CompareTag("Player")) return; + if (!CheckSide(other.transform.position)) return; + TryActivate(); + } + + private void OnTriggerExit2D(Collider2D other) + { + if (_triggerCondition != TriggerCondition.PlayerBody) return; + if (!other.CompareTag("Player") || _isOneShot) return; + _activated = false; + _deactivationChannel?.Raise(); + } + + // 由外部 HurtBox 转发(PlayerAttack 模式) + public void TryInteractFromDamage(DamageInfo info) + { + if (_triggerCondition != TriggerCondition.PlayerAttack) return; + if (!CheckSide(info.SourcePosition)) return; + TryActivate(); + } + + private void TryActivate() + { + if (_isOneShot && _activated) return; + _activated = true; + _activateFeedback?.PlayFeedbacks(); + _activationChannel?.Raise(); + if (_isOneShot) + { + // 持久化 + SaveManager.Instance?.SetMechanismState(_interactableId, true); + } + } + + private bool CheckSide(Vector2 sourcePos) + { + if (_triggerSide == TriggerSide.Any) return true; + var dir = (sourcePos - (Vector2)transform.position).normalized; + return _triggerSide switch + { + TriggerSide.Left => dir.x < -0.4f, + TriggerSide.Right => dir.x > 0.4f, + TriggerSide.Top => dir.y > 0.4f, + _ => true + }; + } + + private void Start() + { + // 读档恢复 + if (_isOneShot && !string.IsNullOrEmpty(_interactableId) + && (SaveManager.Instance?.GetMechanismState(_interactableId) ?? false)) + { + _activated = true; + _activationChannel?.Raise(); // 静默恢复联动状态 + } + } +} +``` + +**零耦合连接示例**(Inspector 拖入同一 SO 资产): + +``` +Switch_Forest_01._activationChannel ──► MovingPlatform._activationChannel + ──► Door_Locked._openChannel + ──► HazardZone_Spikes._disableChannel +``` + +--- + +## 14. CrumblePlatform — 碎裂平台 + +```csharp +// 路径: Assets/Scripts/World/CrumblePlatform.cs +[RequireComponent(typeof(BoxCollider2D))] +public class CrumblePlatform : MonoBehaviour +{ + [SerializeField] private float _warningDuration = 0.6f; // 踩上后警告时长(抖动) + [SerializeField] private float _crumbleDuration = 0.3f; // 碎裂动画时长 + [SerializeField] private float _respawnDelay = 3.0f; // 0 = 永久消失 + [SerializeField] private bool _isOneShot = false; // true = 碎裂后永久消失 + [SerializeField] private MMF_Player _crumbleFeedback; // 预警震动 + 碎裂粒子 + 音效 + [SerializeField] private BoxCollider2D _passengerSensor; // Trigger,检测玩家踩踏 + + private BoxCollider2D _col; + private SpriteRenderer _sr; + private bool _isCrumbling; + + private static readonly int[] StateFrames = { 0, 1, 2, 3 }; // Idle/Warning/Crumbling/Gone + + private void Awake() + { + _col = GetComponent(); + _sr = GetComponent(); + } + + private void OnTriggerEnter2D(Collider2D other) + { + if (_isCrumbling || !other.CompareTag("Player")) return; + StartCoroutine(CrumbleSequence()); + } + + private IEnumerator CrumbleSequence() + { + _isCrumbling = true; + + // 1. Warning(抖动) + _crumbleFeedback?.PlayFeedbacks(); + yield return new WaitForSeconds(_warningDuration); + + // 2. Crumbling + yield return new WaitForSeconds(_crumbleDuration); + + // 3. Gone:禁用碰撞体 + 隐藏 Sprite + _col.enabled = false; + _sr.enabled = false; + _passengerSensor.enabled = false; + + if (_isOneShot || _respawnDelay <= 0f) + { + yield break; // 永久消失 + } + + // 4. Respawn + yield return new WaitForSeconds(_respawnDelay); + _col.enabled = true; + _sr.enabled = true; + _passengerSensor.enabled = true; + _isCrumbling = false; + } +} +``` + +**状态机**: + +``` + [玩家踩上] +Idle ────────────► Warning ──[warningDuration]──► Crumbling ──[动画]──► Gone + 抖动 │ + ←──[respawnDelay,非 OneShot]─┘ +``` + +--- + +## 15. SkillInteractable — 技能专属交互物 + +> 这类物体不走伤害管线,而是监听**角色技能状态**或**物理层叠加**实现交互。 +> 三种类型对应游戏内三个形态的专属技能机关。 + +### 15.1 MagicWall — 魔法障壁(太虚斩专属) + +太虚斩(命魂 SoulSkill)施放时,玩家进入 `PhysicsLayer: Ghost`;`MagicWall` 对 `Ghost` 层**无碰撞**,允许穿越。 + +```csharp +// 路径: Assets/Scripts/World/MagicWall.cs +// 组件挂法:MagicWall GO 同时挂 TilemapCollider2D / BoxCollider2D +// 不与 Ghost 层碰撞(Physics Layer Matrix 配置,非代码控制) +// 脚本职责:Gizmo 可视化 + 颜色联动(普通/幽灵两态视觉区分) +[ExecuteAlways] +public class MagicWall : MonoBehaviour +{ + [SerializeField] private Color _normalColor = new(0.4f, 0.2f, 1f, 0.8f); // 紫色(可见) + [SerializeField] private Color _ghostColor = new(0.4f, 0.2f, 1f, 0.15f); // 淡紫(穿越提示) + + // 在 FormSkillSO(太虚斩)canPassMagicWalls = true 时, + // SkillManager 在技能开始/结束时切换玩家的物理层: + // 开始: player.gameObject.layer = LayerMask.NameToLayer("Ghost") + // 结束: player.gameObject.layer = LayerMask.NameToLayer("Player") + // Physics Layer Matrix 设置: Ghost vs MagicWall = IgnoreCollision + // 因此 MagicWall 本身无需额外代码,只靠层矩阵实现穿越。 + +#if UNITY_EDITOR + private void OnDrawGizmos() + { + Gizmos.color = _normalColor; + var b = GetComponent(); + if (b != null) + Gizmos.DrawWireCube(transform.position, b.bounds.size); + } +#endif +} +``` + +**Physics Layer Matrix 配置**: + +| Layer A | Layer B | 碰撞 | +|---------|---------|------| +| `Player` | `MagicWall` | ✅ 碰撞(正常阻挡)| +| `Ghost` | `MagicWall` | ❌ 忽略(太虚斩穿越)| +| `Enemy` | `MagicWall` | ✅ 碰撞(敌人不能穿越)| + +> 参见 [57_PhysicsLayerMatrix.md](../Design/57_PhysicsLayerMatrix.md)。 +> `SkillManager.TrySoulSkill()` 在技能激活/结束时调用 `SetPlayerLayer("Ghost"/"Player")`。 + +--- + +### 15.2 SoftTerrain — 松软地面(地行术专属) + +地行术(地魂 SoulSkill)的 `GroundDive` 状态中,玩家进入地面移动。`SoftTerrain` 地块降低地行术**灵力消耗速率**(松软地面不消耗灵力)。 + +```csharp +// 路径: Assets/Scripts/World/SoftTerrain.cs +// 挂在松软地面的 Tilemap/GameObject 上 +// GroundDiveState 通过 OverlapPoint 检测当前站立/穿行瓦片,查询是否 IsSoftTerrain +public class SoftTerrain : MonoBehaviour +{ + // Marker 组件——无逻辑,仅用于 GetComponent() 检测 + // GroundDiveState(PlayerFSM)在每帧对角色脚下 Physics2D.OverlapPoint() 检测: + // 若碰到实现了 SoftTerrain 的 Tilemap → SetSoulDrainRate(0) + // 否则 → SetSoulDrainRate(FormSkillSO.soulCostPerSecond) +} +``` + +**关卡搭建**: +- 在 `[Level]` 下新增 `Tilemap_SoftGround` 层,铺设松软地面 Tile +- 该 Tilemap GameObject 挂载 `SoftTerrain` 组件 +- `TilemapCollider2D.isTrigger = false`(正常地面碰撞,`GroundDiveState` 穿越时物理层切换为 `Ghost` 忽略该层) + +**与 MagicWall 的关键区别**: + +| | MagicWall | SoftTerrain | +|-|-----------|-------------| +| 穿越条件 | 太虚斩激活(`Ghost` 层)| 地行术激活(另一 `Ghost` 变体层)| +| 其余情况 | 实体阻挡 | 实体地面 | +| 游戏效果 | 到达秘密区域 / 跑图捷径 | 降低灵力消耗 / 速度加成 | + +--- + +### 15.3 PhantomInteractable — 幻影机关(残阴术专属) + +残阴术(命魂 SpiritSkill1)在原地留下灵体,灵体可代替玩家触发特定机关。 +普通 `PressurePlate` 仅响应玩家,`PhantomInteractable` 额外响应 `PhantomBody` 层。 + +```csharp +// 路径: Assets/Scripts/World/PhantomInteractable.cs +// 继承 DirectionalInteractable,额外监听 PhantomBody 层的 Collider 进入 +// 用途:需要延迟触发的机关(先放灵体踩住,再操控玩家本体做其他事) +public class PhantomInteractable : DirectionalInteractable +{ + // 残阴术(SpiritSkill1)实例化 PhantomBody Prefab, + // PhantomBody 挂载 Rigidbody2D,Layer = "PhantomBody" + // 本组件的 Collider(Trigger)对 PhantomBody 层同样响应 + + private new void OnTriggerEnter2D(Collider2D other) + { + bool isPlayer = other.CompareTag("Player"); + bool isPhantom = other.gameObject.layer == + LayerMask.NameToLayer("PhantomBody"); + if (!isPlayer && !isPhantom) return; + + // 方向校验:幻影机关通常 TriggerSide = Any(灵体无方向约束) + TryActivate(); + } +} +``` + +**典型谜题**: + +``` +场景设置: + PhantomInteractable(PressurePlate 型)── _activationChannel ──► Door + +解谜流程: + 1. 玩家施放残阴术 → 留下灵体踩住 PhantomInteractable → 门打开 + 2. 玩家快速通过门洞 + 3. 残阴术持续时间结束 → 灵体消失 → PhantomInteractable 失活 → 门关闭(若非 OneShot) +``` + +--- + +## 16. 世界事件频道清单 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_SavePointActivated` | `StringEventChannelSO` | `SavePoint` | `GameManager`(触发存档)、`HUDController`(显示提示) | +| `EVT_RoomTransitionRequest` | `SceneLoadRequestEventChannelSO` | `RoomTransition` | `SceneLoader` | +| `EVT_CollectiblePickup` | `StringEventChannelSO` | `Collectible`、`AbilityUnlock` | `WorldStateRegistry`、`QuestManager`、`AnalyticsManager` | +| `EVT_FastTravelOpen` | `VoidEventChannelSO` | `SavePoint` | `UIManager`(显示 FastTravel 面板) | +| `EVT_ShowInteractPrompt` | `StringEventChannelSO` | `InteractableDetector` | `HUDController` | +| `EVT_HideInteractPrompt` | `VoidEventChannelSO` | `InteractableDetector` | `HUDController` | diff --git a/Docs/Architecture/09_ProgressionModule.md b/Docs/Architecture/09_ProgressionModule.md new file mode 100644 index 0000000..31c0e5d --- /dev/null +++ b/Docs/Architecture/09_ProgressionModule.md @@ -0,0 +1,1021 @@ +# 09 · 进度模块 + +> **命名空间** `BaseGames.Equipment`、`BaseGames.Skills`、`BaseGames.Progression` +> **程序集** `BaseGames.Equipment`、`BaseGames.Skills` +> **路径** `Assets/Scripts/Equipment/`、`Assets/Scripts/Skills/` +> **依赖** `BaseGames.Core.Events`、`BaseGames.Combat`、`BaseGames.Player` + +--- + +## 目录 + +1. [AbilityType 枚举](#1-abilitytype-枚举) +2. [AbilityGate(能力门禁)](#2-abilitygate) +3. [装备系统 — CharmSO](#3-装备系统--charmso) +4. [ICharmEffect 接口](#4-icharmeffect-接口) +5. [内置 CharmEffect 实现](#5-内置-charmeffect-实现) +6. [EquipmentManager](#6-equipmentmanager) +7. [ToolSO(主动工具)](#7-toolso) +8. [技能系统 — FormSkillSO](#8-技能系统--formskillso) +9. [SkillManager](#9-skillmanager) +10. [SkillModifierRegistry](#10-skillmodifierregistry) +11. [RegionDefinitionSO](#11-regiondefinitionso区域定义) +12. [ProgressLock](#12-progresslock进程锁) +13. [BossProgressTracker](#13-bossprogresstracker) +14. [HPContainerPickup](#14-hpcontainerpickup) +15. [ProgressionEventChannel 清单](#15-progression-事件频道清单) + +--- + +## 1. AbilityType 枚举 + +> **架构决策 (2026-05):改为 `[Flags] uint` bitmask** +> - 原 `Dictionary` 存档方案每次查询需 `.ToString()` 装箱 + 字典哈希,在 AbilityGate.Start() 及 ParrySystem.TryActivateParry() 等热路径产生不必要开销 +> - 改为 bitmask 后:存档只存一个 `uint`,查询为单次位运算 `(_flags & ability) != 0`,兼容序列化 +> - **新增能力只需追加新的 `1 << N`,禁止修改已有枚举值**(防止存档数据错位) + +```csharp +// 路径: Assets/Scripts/Player/AbilityType.cs +// 所有可解锁能力的位标志枚举;PlayerStats.HasAbility() 依赖此 +[System.Flags] +public enum AbilityType : uint +{ + None = 0, + + // 移动 + WallCling = 1u << 0, + WallJump = 1u << 1, + Dash = 1u << 2, + AerialDash = 1u << 3, // 空中冲刺(默认锁定,升级后解锁) + InvincibleDash= 1u << 4, // 冲刺全程无敌(Dash 的升级版,默认锁定) + DoubleJump = 1u << 5, + ClimbVines = 1u << 6, + Swim = 1u << 7, // 游泳(LiquidZone 内切换 SwimState) + + // 战斗 + Parry = 1u << 8, + Spring = 1u << 9, // 灵泉反弹 + UseTools = 1u << 10, + + // 互动 + ReadShrine = 1u << 11, + UseGrapple = 1u << 12, + + // 预留扩展位(13~31):新能力在此追加,禁止复用已有值 +} + +// ── SaveMigrator 兼容说明 ───────────────────────────────────────────────── +// SaveMeta.Version < "2.1" 的存档仍持有 Dictionary Abilities +// SaveMigrator.MigrateV2ToV21 负责将其转换为 AbilityFlags uint: +// foreach (var kv in old.Abilities) +// if (kv.Value && Enum.TryParse(kv.Key, out var a)) +// newFlags |= (uint)a; +``` + +--- + +## 2. AbilityGate + +```csharp +// 路径: Assets/Scripts/World/AbilityGate.cs +// 物理关卡障碍,阻挡未解锁某能力的玩家 +[RequireComponent(typeof(Collider2D))] +public class AbilityGate : MonoBehaviour +{ + [SerializeField] private AbilityType _requiredAbility; + [SerializeField] private GameObject _blockingObject; // 关卡障碍物 GO(禁/启用) + [SerializeField] private GameObject _hintUI; // 提示 UI(如能力图标 + "???") + [SerializeField] private string _gateId; // 存档用 + + [Header("Event Channels")] + // AbilityTypeEventChannelSO 已在 02_EventSystem §3 定义(替换旧 StringEventChannelSO) + [SerializeField] private AbilityTypeEventChannelSO _onAbilityUnlocked; // EVT_AbilityUnlocked + + // _saveData 由 GameInitializer 在 Awake 时注入(零耦合,避免 SaveManager.Instance) + private SaveData _saveData; + + private void Start() + { + // 位运算查询:无需 ToString + 字典哈希 + bool hasAbility = _saveData != null + && (_saveData.Player.AbilityFlags & (uint)_requiredAbility) != 0; + _blockingObject.SetActive(!hasAbility); + if (_hintUI != null) _hintUI.SetActive(!hasAbility); + } + + private void OnEnable() => _onAbilityUnlocked.OnEventRaised += OnAbilityUnlocked; + private void OnDisable() => _onAbilityUnlocked.OnEventRaised -= OnAbilityUnlocked; + + private void OnAbilityUnlocked(AbilityType ability) + { + if (ability != _requiredAbility) return; + _blockingObject.SetActive(false); + if (_hintUI != null) _hintUI.SetActive(false); + // P1:播放解锁动画(如荆棘收缩、道路开通特效) + } + + public void Open() => _blockingObject.SetActive(false); +} +``` + +--- + +## 3. 装备系统 — CharmSO + +```csharp +// 路径: Assets/Scripts/Equipment/CharmSO.cs +[CreateAssetMenu(menuName = "Equipment/Charm")] +public class CharmSO : ScriptableObject +{ + [Header("Identity")] + public string charmId; // 全局唯一 ID,如 "Charm_QuickSlash" + public string displayNameKey; // 本地化 Key + [TextArea(2,4)] + public string descriptionKey; + + [Header("Visual")] + public Sprite icon; + public Color glowColor; + + [Header("Slot Cost")] + [Range(1,4)] + public int notchCost; // 占用笔记数(1~4) + + [Header("Effects")] + [SerializeReference] + public List effects; // 多态序列化([SerializeReference]) + + [Header("Lore")] + public bool isUnique; // 唯一物品 + public string unlockHint; +} +``` + +**资产路径**:`Assets/ScriptableObjects/Equipment/Charms/` +**命名**:`Charm_{Name}.asset` + +--- + +## 4. ICharmEffect 接口 + +```csharp +// 路径: Assets/Scripts/Equipment/ICharmEffect.cs +[System.Serializable] +public interface ICharmEffect +{ + void OnEquip(EquipmentContext ctx); + void OnUnequip(EquipmentContext ctx); + string GetEffectDescription(); +} + +// 上下文:避免接口直接依赖具体类 +public struct EquipmentContext +{ + public PlayerStats Stats; + public PlayerFeedback Feedback; + public EventChannelRegistry Events; // SO 事件频道注册表 + public SkillModifierRegistry SkillMods; // 技能修改器注册表 + public WeaponManager WeaponMgr; // 武器切换管理器 +} +``` + +### 4.1 CharmEffectDrawer — 自定义 PropertyDrawer + +> **痛点**:Unity 默认的 `[SerializeReference]` Inspector 体验极差——添加/删除效果需要右键 "Manage References",类型名显示 C# 全称。策划每日在 CharmSO Inspector 中增减效果,该 Drawer 是必须的。 + +```csharp +// 路径: Assets/Scripts/Editor/Equipment/CharmEffectDrawer.cs +// 程序集: BaseGames.Editor(Editor Only) +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace BaseGames.Editor.Equipment +{ + /// + /// 为 CharmSO.effects(List<ICharmEffect>)提供友好的 Inspector 体验: + /// - 下拉菜单选类型(显示中文名而非 C# 全称) + /// - 每条效果展开显示字段 + GetEffectDescription() 预览文字 + /// - 支持拖动重排、单条删除 + /// + [CustomEditor(typeof(CharmSO))] + public class CharmSOEditor : UnityEditor.Editor + { + // 已注册的所有 ICharmEffect 实现类型(反射收集,仅 Editor 运行) + private static readonly System.Type[] _effectTypes = CollectEffectTypes(); + + // 每种类型的显示名(对应策划友好名称) + private static readonly Dictionary _typeLabels = new() + { + { typeof(StatModifierEffect), "属性加成" }, + { typeof(AttackSpeedEffect), "攻击速度" }, + { typeof(OnHitEffect), "命中触发" }, + { typeof(OnTakeDamageEffect), "受击触发" }, + { typeof(SoulGainEffect), "灵力获取" }, + { typeof(InvincibilityEffect), "无敌帧延长" }, + // 新增效果类型在此追加 + }; + + private SerializedProperty _effectsProp; + + void OnEnable() => _effectsProp = serializedObject.FindProperty("effects"); + + public override void OnInspectorGUI() + { + serializedObject.Update(); + DrawPropertiesExcluding(serializedObject, "effects"); + + EditorGUILayout.Space(8); + EditorGUILayout.LabelField("Effects", EditorStyles.boldLabel); + + for (int i = 0; i < _effectsProp.arraySize; i++) + { + var elemProp = _effectsProp.GetArrayElementAtIndex(i); + var effect = elemProp.managedReferenceValue as ICharmEffect; + string label = effect != null && _typeLabels.TryGetValue(effect.GetType(), out var n) + ? n : (effect?.GetType().Name ?? "null"); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(label, EditorStyles.boldLabel); + + // 删除按钮 + if (GUILayout.Button("✕", GUILayout.Width(24))) + { + _effectsProp.DeleteArrayElementAtIndex(i); + serializedObject.ApplyModifiedProperties(); + break; + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.PropertyField(elemProp, GUIContent.none, true); + + // 预览描述文字 + if (effect != null) + EditorGUILayout.LabelField(effect.GetEffectDescription(), + EditorStyles.miniLabel); + + EditorGUILayout.EndVertical(); + EditorGUILayout.Space(2); + } + + // 添加按钮(下拉菜单) + if (GUILayout.Button("+ 添加效果")) + { + var menu = new GenericMenu(); + foreach (var t in _effectTypes) + { + var captured = t; + string label = _typeLabels.GetValueOrDefault(t, t.Name); + menu.AddItem(new GUIContent(label), false, () => + { + _effectsProp.arraySize++; + _effectsProp.GetArrayElementAtIndex(_effectsProp.arraySize - 1) + .managedReferenceValue = System.Activator.CreateInstance(captured); + serializedObject.ApplyModifiedProperties(); + }); + } + menu.ShowAsContext(); + } + + serializedObject.ApplyModifiedProperties(); + } + + private static System.Type[] CollectEffectTypes() + { + var baseType = typeof(ICharmEffect); + return System.AppDomain.CurrentDomain.GetAssemblies() + .SelectMany(a => a.GetTypes()) + .Where(t => t.IsClass && !t.IsAbstract && baseType.IsAssignableFrom(t)) + .ToArray(); + } + } +} +#endif +``` + +--- + +## 5. 内置 CharmEffect 实现 + +```csharp +// 路径: Assets/Scripts/Equipment/Effects/ + +// ── 属性加成 ───────────────────────────────────────────── +[Serializable] +public class StatModifierEffect : ICharmEffect +{ + public StatType statType; // MaxHP / AttackDamage / MoveSpeed / JumpHeight / SoulGain / Defense + public float flatBonus; // 固定加成(如 +1 HP) + public float percentBonus; // 百分比加成(如 +0.2 = +20%) + + public void OnEquip(EquipmentContext ctx) => ctx.Stats.AddModifier(statType, flatBonus, percentBonus); + public void OnUnequip(EquipmentContext ctx) => ctx.Stats.RemoveModifier(statType, flatBonus, percentBonus); + public string GetEffectDescription() => $"{statType}: +{flatBonus} +{percentBonus*100:0}%"; +} + +// ── 攻击速度加成 ────────────────────────────────────────── +[Serializable] +public class AttackSpeedEffect : ICharmEffect +{ + [Range(0.1f, 2.0f)] + public float speedMultiplier = 1.2f; // 动画速度倍率(如 1.2 = 加速 20%) + public void OnEquip(EquipmentContext ctx) => ctx.Stats.AnimatorSpeedMultiplier += (speedMultiplier - 1f); + public void OnUnequip(EquipmentContext ctx) => ctx.Stats.AnimatorSpeedMultiplier -= (speedMultiplier - 1f); + public string GetEffectDescription() => $"攻击速度 +{(speedMultiplier - 1) * 100:0}%"; +} + +// ── 命中触发效果 ────────────────────────────────────────── +[Serializable] +public class OnHitEffect : ICharmEffect +{ + public OnHitEffectType effectType; // ApplyPoison / ApplyFire / KnockbackBoost + [Range(0f, 1f)] + public float chance; // 触发概率(0~1) + + private DamageInfoEventChannelSO _onHitChannel; + + public void OnEquip(EquipmentContext ctx) + { + _onHitChannel = ctx.Events.Get("OnHitConfirmed"); + _onHitChannel.OnEventRaised += HandleHit; + } + public void OnUnequip(EquipmentContext ctx) => _onHitChannel.OnEventRaised -= HandleHit; + + private void HandleHit(DamageInfo info) + { + if (UnityEngine.Random.value > chance) return; + // 触发对应效果(由 StatusEffectManager 处理,见 06_CombatModule §12) + } + public string GetEffectDescription() => $"命中时 {chance * 100:0}% 概率附加 {effectType}"; +} + +// ── 灵魂法术强化 ────────────────────────────────────────── +[Serializable] +public class SoulSpellEffect : ICharmEffect +{ + public SpellType spellType; // SoulAttack / HealingWave + public int soulCostReduction; // 减少消耗 Soul 点数 + + public void OnEquip(EquipmentContext ctx) + => ctx.Stats.RegisterSpellModifier(spellType, soulCostReduction, 0f); + public void OnUnequip(EquipmentContext ctx) + => ctx.Stats.UnregisterSpellModifier(spellType, soulCostReduction, 0f); + public string GetEffectDescription() => $"{spellType} 消耗减少 {soulCostReduction} Soul"; +} + +// ── 技能数值修改 ────────────────────────────────────────── +[Serializable] +public class SkillNumericModifierEffect : ICharmEffect +{ + public string TargetSkillId; + public SkillStat Stat; // enum: Damage, Cost, Cooldown, Range, Duration + public float Delta; + public bool IsPercent; + + public void OnEquip(EquipmentContext ctx) => ctx.SkillMods.Register(TargetSkillId, Stat, Delta, IsPercent); + public void OnUnequip(EquipmentContext ctx) => ctx.SkillMods.Unregister(TargetSkillId, Stat, Delta, IsPercent); + public string GetEffectDescription() => $"{TargetSkillId}.{Stat} {(Delta >= 0 ? "+" : "")}{Delta}"; +} + +// ── 技能插槽替换 ────────────────────────────────────────── +[Serializable] +public class SkillSlotOverrideEffect : ICharmEffect +{ + public SkillSlotOverride overrideData; // targetForm / targetSlot / replacementSkill / priority + + public void OnEquip(EquipmentContext ctx) => ctx.SkillMods.AddSlotOverride(overrideData); + public void OnUnequip(EquipmentContext ctx) => ctx.SkillMods.RemoveSlotOverride(overrideData); + public string GetEffectDescription() + { + string formStr = overrideData.targetForm != null ? overrideData.targetForm.name : "所有形态"; + string skillName = overrideData.replacementSkill != null ? overrideData.replacementSkill.displayNameKey : "null"; + return $"{formStr}的 {overrideData.targetSlot} 替换为 [{skillName}]"; + } +} + +// ── 武器替换 ────────────────────────────────────────────── +[Serializable] +public class WeaponOverrideEffect : ICharmEffect +{ + public string targetFormId; // 目标形态 ID(留空 = 所有形态) + public WeaponSO replacementWeapon; // 替换武器 SO + + public void OnEquip(EquipmentContext ctx) => ctx.WeaponMgr.SetOverride(targetFormId, replacementWeapon); + public void OnUnequip(EquipmentContext ctx) => ctx.WeaponMgr.ClearOverride(targetFormId); + public string GetEffectDescription() + { + string formStr = string.IsNullOrEmpty(targetFormId) ? "所有形态" : targetFormId; + string wName = replacementWeapon != null ? replacementWeapon.displayName : "null"; + return $"{formStr}的武器替换为 [{wName}]"; + } +} +``` + +--- + +## 6. EquipmentManager + +```csharp +// 路径: Assets/Scripts/Equipment/EquipmentManager.cs +public class EquipmentManager : MonoBehaviour +{ + [Header("配置")] + [SerializeField] private EquipmentConfigSO _config; // 初始 Notch 数量等 + + [Header("Event Channels")] + [SerializeField] private CharmEventChannelSO _onCharmEquipped; + [SerializeField] private CharmEventChannelSO _onCharmUnequipped; + [SerializeField] private VoidEventChannelSO _onEquipmentChanged; + + private List _equipped = new(4); + private List _collected = new(32); + private int _currentNotchCapacity; + + private EquipmentContext _ctx; + + private void Awake() + { + _ctx = new EquipmentContext + { + Stats = GetComponent(), + Feedback = GetComponent(), + Events = EventChannelRegistry.Instance, + SkillMods = GetComponent(), + WeaponMgr = GetComponent(), + }; + _currentNotchCapacity = _config != null ? _config.initialNotchCount : 3; + } + + public int UsedNotches => _equipped.Sum(c => c.notchCost); + public int TotalNotches => _currentNotchCapacity; + public IReadOnlyList Equipped => _equipped; + public IReadOnlyList Collected => _collected; + + /// 装备魅力。返回失败原因(null = 成功) + public string TryEquipCharm(CharmSO charm) + { + if (_equipped.Contains(charm)) return "已经装备"; + if (!_collected.Contains(charm)) return "尚未收集此魅力"; + if (UsedNotches + charm.notchCost > _currentNotchCapacity) + return $"笔记不足(需要 {charm.notchCost},剩余 {_currentNotchCapacity - UsedNotches})"; + + _equipped.Add(charm); + foreach (var fx in charm.effects) fx.OnEquip(_ctx); + _onCharmEquipped.Raise(charm); + _onEquipmentChanged.Raise(); + return null; + } + + public void UnequipCharm(CharmSO charm) + { + if (!_equipped.Remove(charm)) return; + foreach (var fx in charm.effects) fx.OnUnequip(_ctx); + _onCharmUnequipped.Raise(charm); + _onEquipmentChanged.Raise(); + } + + public void AddToCollection(string charmId); // 加入收藏(存档) + + public void IncreaseNotches(int amount) => _currentNotchCapacity += amount; + + // 存档集成 + public EquipmentSaveData GetSaveData(); + public void LoadSaveData(EquipmentSaveData data); +} +``` + +--- + +## 7. ToolSO + +```csharp +// 路径: Assets/Scripts/Equipment/ToolSO.cs +// 主动工具(道具类,通常有限使用次数) +[CreateAssetMenu(menuName = "Equipment/Tool")] +public class ToolSO : ScriptableObject +{ + public string toolId; + public string displayNameKey; + public Sprite icon; + public int maxUses; // -1 = 无限 + + [SerializeReference] + public IToolEffect effect; // 工具使用效果(多态) +} + +public interface IToolEffect +{ + void Use(PlayerController player); +} + +// 典型实现:治疗药水 +[Serializable] +public class HealToolEffect : IToolEffect +{ + public int HealAmount; + public void Use(PlayerController player) => player.Stats.HealHP(HealAmount); +} +``` + +--- + +## 7.5 ToolSlotManager 与 ToolHUD + +```csharp +// 路径: Assets/Scripts/Equipment/ToolSlotManager.cs +// 管理玩家的 2 个工具槽(装备、使用、冷却) +public class ToolSlotManager : MonoBehaviour, ISaveable +{ + private const int SlotCount = 2; + + [SerializeField] private ToolSO[] _slots = new ToolSO[SlotCount]; + [SerializeField] private int[] _remainingUses = new int[SlotCount]; // -1 = 无限 + [SerializeField] private ToolUsedEventChannelSO _onToolUsed; + + // 当前冷却倒计时(秒) + private float[] _cooldowns = new float[SlotCount]; + + // ── 装备 ──────────────────────────────────────────────────────────── + public void EquipTool(int slotIndex, ToolSO tool) + { + if (slotIndex < 0 || slotIndex >= SlotCount) return; + _slots[slotIndex] = tool; + _remainingUses[slotIndex] = tool != null ? tool.maxUses : 0; + _cooldowns[slotIndex] = 0f; + } + + // ── 使用 ──────────────────────────────────────────────────────────── + public bool TryUseTool(int slotIndex, PlayerController player) + { + if (slotIndex < 0 || slotIndex >= SlotCount) return false; + var tool = _slots[slotIndex]; + if (tool == null) return false; + if (_cooldowns[slotIndex] > 0) return false; + if (_remainingUses[slotIndex] == 0) return false; // 已耗尽(无限 = -1 不触发) + + tool.effect.Use(player); + + if (_remainingUses[slotIndex] > 0) _remainingUses[slotIndex]--; + _cooldowns[slotIndex] = tool is IToolCooldown tc ? tc.CooldownDuration : 0f; + + _onToolUsed.Raise(new ToolUsedPayload { SlotIndex = slotIndex, Tool = tool }); + return true; + } + + private void Update() + { + for (int i = 0; i < SlotCount; i++) + if (_cooldowns[i] > 0f) _cooldowns[i] -= Time.deltaTime; + } + + // ── 查询 ──────────────────────────────────────────────────────────── + public ToolSO GetTool(int slotIndex) => _slots[slotIndex]; + public float GetCooldownRatio(int slotIndex) => + _slots[slotIndex] is IToolCooldown tc && tc.CooldownDuration > 0 + ? _cooldowns[slotIndex] / tc.CooldownDuration : 0f; + public int GetRemainingUses(int slotIndex) => _remainingUses[slotIndex]; + + // ── ISaveable ──────────────────────────────────────────────────────── + public void OnSave(SaveData data) + { + data.Tools.ToolSlot0 = _slots[0]?.toolId; // 注:工具数据归属 SaveData.Tools,不在 Equipment + data.Tools.ToolSlot1 = _slots[1]?.toolId; + } + public void OnLoad(SaveData data) { /* 从 data.Tools 恢复 ToolSO 引用 */ } +} + +// 可选接口:带冷却时间的工具 +public interface IToolCooldown +{ + float CooldownDuration { get; } +} + +// 路径: Assets/Scripts/UI/ToolHUD.cs +// HUD 层:显示 2 个工具槽的图标 + 剩余次数 + 冷却遮罩 +public class ToolHUD : MonoBehaviour +{ + [SerializeField] private ToolSlotUI[] _slots; // 2 个 ToolSlotUI 组件 + [SerializeField] private ToolSlotManager _slotManager; + [SerializeField] private ToolUsedEventChannelSO _onToolUsed; + + private void OnEnable() => _onToolUsed.OnEventRaised += RefreshSlot; + private void OnDisable() => _onToolUsed.OnEventRaised -= RefreshSlot; + + private void RefreshSlot(ToolUsedPayload payload) + => _slots[payload.SlotIndex].Refresh( + _slotManager.GetTool(payload.SlotIndex), + _slotManager.GetRemainingUses(payload.SlotIndex), + _slotManager.GetCooldownRatio(payload.SlotIndex)); + + private void Update() + { + // 实时更新冷却遮罩 + for (int i = 0; i < _slots.Length; i++) + _slots[i].SetCooldownFill(_slotManager.GetCooldownRatio(i)); + } +} + +// 单个槽 UI(图标 + 剩余次数文本 + 冷却遮罩 Image) +public class ToolSlotUI : MonoBehaviour +{ + [SerializeField] private Image _icon; + [SerializeField] private TMP_Text _usesText; + [SerializeField] private Image _cooldownMask; // FillAmount 冷却遮罩 + + public void Refresh(ToolSO tool, int remainingUses, float cooldownRatio) + { + _icon.sprite = tool != null ? tool.icon : null; + _usesText.text = remainingUses < 0 ? "∞" : remainingUses.ToString(); + SetCooldownFill(cooldownRatio); + } + + public void SetCooldownFill(float ratio) => _cooldownMask.fillAmount = ratio; +} +``` + +--- + +## 8. 技能系统 — FormSkillSO + +```csharp +// 路径: Assets/Scripts/Skills/FormSkillSO.cs +[CreateAssetMenu(menuName = "Skills/FormSkill")] +public class FormSkillSO : ScriptableObject +{ + [Header("Identity")] + public string skillId; + public string displayNameKey; + [TextArea(1,3)] public string descriptionKey; + public Sprite icon; + + [Header("Resource")] + public SkillResourceType resourceType; // SoulPower / SpiritPower + public int baseCost; + public float cooldown; + + [Header("Animation")] + public ClipTransition castAnimation; + public float castLockDuration; // 秒 + + [Header("Effect")] + public SkillEffectType effectType; + public DamageSourceSO damageSource; + + [Header("Projectile")] + public ProjectileConfigSO projectileConfig; + public bool isHoming; + public bool holdForContinuous; + + [Header("Dash")] + public float dashForce; + public float dashDuration; + public bool isInvincibleDuringDash; + + [Header("Explosion")] + public float explosionDelay; + public float explosionRadius; + + [Header("Feedback")] + public FeedbackPresetSO castFeedback; + + [Header("HitBox Prefab")] + // 近战/爆炸技能的命中盒 Prefab,内含 SkillHitBoxInstance + HitBox 组件 + // 投射物技能此字段留空——由 ProjectileConfigSO.WeaponPrefab 负责 + // 命名规范: Assets/Prefabs/Skills/SKL_{skillId}_HitBox.prefab + public GameObject SkillHitBoxPrefab; +} + +public enum SkillResourceType { SoulPower, SpiritPower } +public enum SkillEffectType +{ + MeleeAoE, Projectile, BarrierAura, GroundDive, + DragonKick, WraithDash, ShadowDecoy, DelayedExplosion +} +``` + +--- + +## 9. SkillManager + +```csharp +// 路径: Assets/Scripts/Skills/SkillManager.cs +// 挂在 Player 上,处理所有技能逻辑 +public class SkillManager : MonoBehaviour +{ + [SerializeField] private PlayerStats _stats; + [SerializeField] private PlayerController _controller; + [SerializeField] private InputReaderSO _input; + [SerializeField] private SkillModifierRegistry _modifiers; + [SerializeField] private ObjectPoolManager _pool; + + private FormSkillSO _soulSkill, _spirit1, _spirit2; // 当前形态技能 + private float _soulCooldown, _spirit1Cooldown, _spirit2Cooldown; + + private void OnEnable() + { + _input.SoulSkillEvent += TrySoulSkill; + _input.SpiritSkill1StartedEvent += TrySpiritSkill1; + _input.SpiritSkill2StartedEvent += TrySpiritSkill2; + } + private void OnDisable() + { + _input.SoulSkillEvent -= TrySoulSkill; + _input.SpiritSkill1StartedEvent -= TrySpiritSkill1; + _input.SpiritSkill2StartedEvent -= TrySpiritSkill2; + } + + // 切换形态时由 FormController 调用 + public void UpdateSkillSet(FormSkillSO soul, FormSkillSO spirit1, FormSkillSO spirit2); + + private void TrySoulSkill(); + // 1. 校验 cooldown + // 2. _stats.ConsumeSoulPower(finalCost) → 失败 return + // 3. _controller.ForceState(SoulSkillState) + // 4a. 如果 skill.SkillHitBoxPrefab != null: + // Instantiate(skill.SkillHitBoxPrefab, _skillSocket) → 获取 SkillHitBoxInstance + // inst.Activate(skill.damageSource, transform) + // inst.AutoDestroyAfter(skill.castLockDuration) + // 4b. 如果 skill.projectileConfig != null:由 Projectile 系统负责(见 06_CombatModule §7) + + private int GetFinalCost(FormSkillSO skill); + // baseCost 经 SkillModifierRegistry 调整后的最终消耗 + + [SerializeField] private Transform _skillSocket; // [SkillSocket] 子节点引用 +} +``` + +### SkillHitBoxInstance + +```csharp +// 路径: Assets/Scripts/Combat/SkillHitBoxInstance.cs +// 挂载于技能 HitBox Prefab 根节点(与 WeaponInstance 对应,但生命周期更短) +// 命名规范: Assets/Prefabs/Skills/SKL_{skillId}_HitBox.prefab +// +// Prefab 内部层级示例(近战 AoE 技能): +// [SKL_SkySlash_HitBox] +// └── [HitBox] ← 扇形/圆形 PolygonCollider2D,形状由美术决定 +// └── HitBox.cs +public class SkillHitBoxInstance : MonoBehaviour +{ + [SerializeField] private HitBox[] _hitBoxes; // 技能可有多个 HitBox(多段伤害) + + public System.Action OnHitConfirmed; + + private void Awake() + { + foreach (var hb in _hitBoxes) + hb.OnHitConfirmed += info => OnHitConfirmed?.Invoke(info); + } + + // 激活所有 HitBox,持续 duration 秒后自动 Destroy + public void Activate(DamageSourceSO source, Transform attacker) + { + foreach (var hb in _hitBoxes) + hb.Activate(source, attacker); + } + + public void AutoDestroyAfter(float duration) + => Destroy(gameObject, duration); + + private void OnDestroy() + { + foreach (var hb in _hitBoxes) hb.Deactivate(); + } +} +``` +``` + +--- + +## 10. SkillModifierRegistry + +```csharp +// 路径: Assets/Scripts/Skills/SkillModifierRegistry.cs +// 收集所有魅力对技能数值的修改;SkillManager 查询最终有效参数 +public class SkillModifierRegistry +{ + private Dictionary> _overrides = new(); + + public void Register(string skillId, SkillStat stat, float delta, bool isPercent); + public void Unregister(string skillId, SkillStat stat, float delta, bool isPercent); + + /// + /// 对给定技能叠加所有已注册修改器,返回一次性快照供 SkillManager 使用。 + /// 替代逐字段查询的 GetModifiedValue(),一次调用即可获取全部有效参数。 + /// + public EffectiveSkillParams GetEffectiveParams(FormSkillSO skill); + + // 向后兼容:单字段查询(内部调用 GetEffectiveParams 后提取) + public float GetModifiedValue(string skillId, SkillStat stat, float baseVal); +} + +public enum SkillStat { Damage, Cost, Cooldown, Range, Duration } + +/// +/// 所有数值修改器叠加后的运行时参数快照,由 SkillModifierRegistry.GetEffectiveParams() 生成, +/// 传入 SkillManager.CastRoutine() 和 ExecuteEffect()。 +/// +public struct EffectiveSkillParams +{ + public FormSkillSO baseSkill; // 原始 SO 引用(不变,供判断 effectType) + public int effectiveCost; // 修改后消耗量 + public float effectiveCooldown; // 修改后冷却(秒) + public float damageMult; // 伤害倍率(1.0 = 无增益) + public float rangeMult; // 范围倍率(AoE 半径 / 障壁半径 / 爆炸半径) + public FeedbackPresetSO effectiveFeedback; // 最终特效预设(护符可替换,null = 回退原始) + public ClipTransition effectiveAnimation; // 最终施法动画(护符可替换,null = 回退原始) + + /// 以技能 SO 默认值初始化,无任何修改器加成。 + public static EffectiveSkillParams FromBase(FormSkillSO skill) => new() + { + baseSkill = skill, + effectiveCost = skill.baseCost, + effectiveCooldown = skill.cooldown, + damageMult = 1f, + rangeMult = 1f, + effectiveFeedback = null, + effectiveAnimation = null, + }; +} +``` + +--- + +## 11. RegionDefinitionSO(区域定义) + +```csharp +// 路径: Assets/Scripts/Progression/RegionDefinitionSO.cs +// 每个区域一个 SO 资产,集中管理区域元数据 +[CreateAssetMenu(menuName = "Progression/RegionDefinition")] +public class RegionDefinitionSO : ScriptableObject +{ + public string regionId; // 如 "Cave"(与 AudioZone.regionId 一致) + public string displayName; // 如 "腐蚀洞穴" + public Color mapColor; // 地图 UI 上该区域的颜色标识 + public Sprite mapIconSprite; // P1:地图图标 + + [Header("解锁条件")] + public string requiredBossDefeated; // 空字符串 = 无条件 + public AbilityType requiredAbility; // None = 无要求(默认值 0) + + [Header("关联房间")] + public string[] roomSceneNames; // 该区域包含的所有场景名 + public string bossSceneName; // Boss 房间场景名 + public string entrySceneName; // 从外部进入该区域的第一个房间 +} +``` + +**资产路径**:`Assets/ScriptableObjects/Progression/Regions/` +**命名**:`Region_{RegionId}.asset`(如 `Region_Forest.asset`) + +**区域 ID 对照表**: + +| 区域 ID | 中文名 | Boss | 开放条件 | +|---------|--------|------|---------| +| `Forest` | 扎根森林 | Boss_SpiderGuard | 无(起始区域)| +| `Cave` | 腐蚀洞穴 | Boss_CorrosionWorm | 击败 Boss_SpiderGuard | +| `Ruins` | 坍塌废墟 | Boss_RuinsKnight | 获得 Dash 能力 | +| `Abyss` | 深渊裂隙 | Boss_AbyssThroat | 击败 Boss_RuinsKnight | +| `Core` | 核心熔炉 | FinalBoss | 击败 Boss_AbyssThroat | + +--- + +## 12. ProgressLock(进程锁) + +```csharp +// 路径: Assets/Scripts/Progression/ProgressLock.cs +// 单向/永久性阻挡,需满足特定条件(击败 Boss 或持有道具)才能解锁 +public class ProgressLock : MonoBehaviour +{ + [Header("解锁条件")] + [SerializeField] private string _requiredBossId; // 空 = 不检查 Boss + [SerializeField] private string _requiredItemId; // 空 = 不检查道具(P1) + + [Header("物理表现")] + [SerializeField] private GameObject _lockedVisuals; // 锁住状态视觉 + [SerializeField] private GameObject _unlockedVisuals; // 开启状态视觉(可 null) + [SerializeField] private Collider2D _blockCollider; + + [Header("存档")] + [SerializeField] private string _lockId; // 唯一 ID,存档记录开启状态 + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onBossDefeated; // EVT_BossDefeated + + private void Start() + { + bool isUnlocked = CheckUnlocked(); + ApplyState(isUnlocked); + if (!isUnlocked) + _onBossDefeated.OnEventRaised += OnBossDefeated; + } + + private void OnDestroy() => _onBossDefeated.OnEventRaised -= OnBossDefeated; + + private void OnBossDefeated(string bossId) + { + if (_requiredBossId == bossId && CheckUnlocked()) + ApplyState(true); + } + + private bool CheckUnlocked() + { + var save = SaveManager.Instance.Data; + if (!string.IsNullOrEmpty(_requiredBossId) && !save.World.DefeatedBossIds.Contains(_requiredBossId)) + return false; + return save.World.OpenedDoors.Contains(_lockId); + } + + private void ApplyState(bool unlocked) + { + _blockCollider.enabled = !unlocked; + _lockedVisuals.SetActive(!unlocked); + if (_unlockedVisuals != null) + _unlockedVisuals.SetActive(unlocked); + } +} +``` + +--- + +## 13. BossProgressTracker + +```csharp +// 路径: Assets/Scripts/Progression/BossProgressTracker.cs +// 轻量辅助组件,挂载在 Boss 房间的 BossTrigger 同一对象上 +public class BossProgressTracker : MonoBehaviour +{ + [SerializeField] private string _bossId; // 如 "Boss_SpiderGuard" + [SerializeField] private string[] _unlocksProgressLockIds; // 击败后解锁哪些 ProgressLock + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onBossDefeated; // 监听 + [SerializeField] private StringEventChannelSO _onBossDefeatedForSave; // 广播→SaveSystem + + private void OnEnable() => _onBossDefeated.OnEventRaised += OnBossDefeated; + private void OnDisable() => _onBossDefeated.OnEventRaised -= OnBossDefeated; + + private void OnBossDefeated(string bossId) + { + if (bossId != _bossId) return; + // 1. 通过事件频道通知 SaveSystem(零耦合) + _onBossDefeatedForSave.Raise(bossId); + // SaveSystem 收到后:data.World.DefeatedBossIds.Add(bossId); 并解锁相关 ProgressLock + } +} +``` + +--- + +## 14. HPContainerPickup + +```csharp +// 路径: Assets/Scripts/Progression/HPContainerPickup.cs +// HP 容器:永久 MaxHP +2 的可拾取物件 +public class HPContainerPickup : MonoBehaviour +{ + [SerializeField] private string _collectibleId; // 存档用唯一 ID + [SerializeField] private InputReaderSO _inputReader; + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onMaxHPContainerPickedUp; // → SaveSystem + [SerializeField] private IntEventChannelSO _onMaxHPChanged; // → HUDController + + private void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + var save = SaveManager.Instance.Data; + if (save != null && save.World.CollectedIds.Contains(_collectibleId)) return; + StartCoroutine(PickupSequence()); + } + + private IEnumerator PickupSequence() + { + _inputReader.EnableGameplayInput(false); + gameObject.SetActive(false); + + // Feel MMF_Player 播放获取特效(外部引用或 GetComponent) + yield return new WaitForSeconds(0.8f); + + // 零耦合:通过事件频道通知 SaveSystem + _onMaxHPContainerPickedUp.Raise(_collectibleId); + // SaveSystem:data.Player.MaxHP += 2; data.World.CollectedIds.Add(id); Save(); + + yield return new WaitForSeconds(0.5f); + _inputReader.EnableGameplayInput(true); + } +} +``` + +--- + +## 15. Progression 事件频道清单 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_CharmEquipped` | `VoidEventChannelSO` | `EquipmentManager` | `HUDController`(更新 HUD)、`AnalyticsManager` | +| `EVT_CharmCollected` | `StringEventChannelSO` | `Collectible` | `EquipmentManager`(加入收藏)、`AchievementManager` | +| `EVT_AbilityUnlocked` | `StringEventChannelSO`(abilityId) | `PlayerStats.UnlockAbility` | `AbilityGate`、`HUDController`(弹窗)、`AchievementManager` | +| `EVT_NotchIncreased` | `IntEventChannelSO` | `ShopController` | `EquipmentManager` | +| `EVT_SkillSetChanged` | `VoidEventChannelSO` | `FormController` | `SkillHUD` | diff --git a/Docs/Architecture/10_UIModule.md b/Docs/Architecture/10_UIModule.md new file mode 100644 index 0000000..1f140ab --- /dev/null +++ b/Docs/Architecture/10_UIModule.md @@ -0,0 +1,694 @@ +# 10 · UI 模块 + +> **命名空间** `BaseGames.UI` +> **程序集** `BaseGames.UI` +> **路径** `Assets/Scripts/UI/` +> **依赖** `BaseGames.Core.Events`、`TextMeshPro` + +--- + +## 目录 + +1. [Canvas 架构(Persistent 场景内)](#1-canvas-架构) +2. [UIManager](#2-uimanager) +3. [HUDController](#3-hudcontroller) +4. [BossHPBar](#4-bosshpbar) +5. [PauseMenuController](#5-pausemenucontroller) +6. [DeathScreenController](#6-deathscreencontroller) +7. [SettingsPanelController](#7-settingspanelcontroller) +8. [SaveSlotController](#75-saveslotcontroller) +9. [SaveIndicator](#76-saveindicator) +10. [LoadingScreenManager](#77-loadingscreenmanager) +11. [IBossHPProvider 接口](#78-ibosshpprovider-接口) +12. [LoadingOverlay](#8-loadingoverlay) +13. [DialogueBox(HUD Overlay)](#9-dialoguebox) +10. [FloatingDamageText(伤害数字)](#10-floatingdamagetext) +11. [ToastNotification(通知弹窗)](#11-toastnotification) +12. [InputDeviceIconSwitcher](#12-inputdeviceiconswitcher) +13. [PanelStack(控制器导航)](#13-panelstack) +14. [UI 事件频道清单](#14-ui-事件频道清单) + +--- + +## 1. Canvas 架构 + +所有 Canvas 挂在 **Persistent 场景**内,全程常驻: + +``` +[UIRoot] +├── Canvas_HUD Sorting Order: 10 (Screen Space - Overlay) +│ ├── HPContainer ← HP 格子列表(水平 HorizontalLayoutGroup) +│ ├── SoulGauge ← 灵力弧形进度条(Image.fillAmount) +│ ├── SpiritGauge ← 魄元进度条 +│ ├── GeoCounter ← TMP 数字 + 图标 +│ ├── SpringCharges ← 灵泉次数图标列 +│ ├── FormIndicator ← 当前形态图标(3 种形态) +│ ├── ToolSlotHUD ← 工具槽图标 + 次数 +│ ├── AbilityHints ← 已解锁技能图标 +│ ├── BossHPBar ← 默认隐藏 +│ └── InteractPrompt ← 交互提示文字(默认隐藏) +│ +├── Canvas_Menu Sorting Order: 20 (Screen Space - Overlay) +│ ├── MainMenuPanel ← 主菜单(游戏启动时显示) +│ ├── SaveSlotPanel ← 存档槽选择(新游戏/继续,主菜单子面板) +│ ├── PauseMenuPanel ← 暂停菜单(默认隐藏) +│ ├── DeathScreenPanel ← 死亡画面(默认隐藏) +│ ├── SettingsPanel ← 设置菜单(默认隐藏) +│ ├── MapPanel ← 地图(默认隐藏) +│ └── ShopPanel ← 商店(默认隐藏) +│ +└── Canvas_Overlay Sorting Order: 30 (Screen Space - Overlay) + ├── LoadingOverlay ← 全屏黑幕(过场遮罩) + ├── DialogueBox ← 对话框(底部) + └── ToastContainer ← 通知弹窗容器(右上) +``` + +**SaveSlotPanel** 展示 3 个存档槽卡片,每张卡片显示角色形态图标、区域名称、游玩时长、存档时间、完成度百分比;由 `SaveSlotController` 驱动(`SaveManager.GetSlotSummaryAsync(slotIndex)` 提供数据)。 + +**SaveIndicator**:右下角小图标(软盘 + 旋转动画),在自动存档流程中显示(订阅 `EVT_SaveIndicatorVisible` BoolEventChannelSO,`true` 触发淡入,`false` 触发淡出),告知玩家正在保存中。 + +--- + +## 2. UIManager + +```csharp +// 路径: Assets/Scripts/UI/UIManager.cs +[DefaultExecutionOrder(+50)] +public class UIManager : MonoBehaviour +{ + [Header("Canvas Roots")] + [SerializeField] private GameObject _hudRoot; + [SerializeField] private GameObject _pauseMenuRoot; + [SerializeField] private GameObject _deathScreenRoot; + [SerializeField] private GameObject _settingsRoot; + [SerializeField] private GameObject _mapRoot; + [SerializeField] private GameObject _shopRoot; + + [Header("Event Channels - Subscribe")] + [SerializeField] private GameStateEventChannelSO _onGameStateChanged; + [SerializeField] private VoidEventChannelSO _onPauseRequested; + [SerializeField] private VoidEventChannelSO _onFastTravelOpen; + [SerializeField] private StringEventChannelSO _onShopOpen; + [SerializeField] private VoidEventChannelSO _onMapOpen; + + private Stack _panelStack = new(); + + private void OnEnable() + { + _onGameStateChanged.OnEventRaised += HandleGameStateChanged; + _onPauseRequested.OnEventRaised += TogglePause; + _onFastTravelOpen.OnEventRaised += OpenMap; + _onShopOpen.OnEventRaised += OpenShop; + _onMapOpen.OnEventRaised += OpenMap; + } + private void OnDisable() + { + _onGameStateChanged.OnEventRaised -= HandleGameStateChanged; + _onPauseRequested.OnEventRaised -= TogglePause; + _onFastTravelOpen.OnEventRaised -= OpenMap; + _onShopOpen.OnEventRaised -= OpenShop; + _onMapOpen.OnEventRaised -= OpenMap; + } + + private void HandleGameStateChanged(GameStateId state) + { + // HUD 在 Gameplay 和 BossFight 状态下均显示 + bool showHud = state == GameStates.Gameplay || state == GameStates.BossFight; + _hudRoot.SetActive(showHud); + + // ⚠️ GameStateId 为 struct,不可用 switch;用 if/else 比较 + if (state == GameStates.Dead) + _deathScreenRoot.SetActive(true); + else if (state == GameStates.Cutscene) + _hudRoot.SetActive(false); // 过场动画隐藏 HUD + } + + public void OpenPanel(GameObject panel) + { + if (_panelStack.Count > 0) _panelStack.Peek().SetActive(false); + panel.SetActive(true); + _panelStack.Push(panel); + } + + public void CloseTopPanel() + { + if (_panelStack.Count == 0) return; + _panelStack.Pop().SetActive(false); + if (_panelStack.Count > 0) _panelStack.Peek().SetActive(true); + } + + private void TogglePause() => OpenPanel(_pauseMenuRoot); + private void OpenShop(string npcId) => OpenPanel(_shopRoot); + private void OpenMap() => OpenPanel(_mapRoot); +} +``` + +--- + +## 3. HUDController + +```csharp +// 路径: Assets/Scripts/UI/HUD/HUDController.cs +public class HUDController : MonoBehaviour +{ + [Header("HP")] + [SerializeField] private Transform _hpContainer; + [SerializeField] private GameObject _hpCellPrefab; // 单格 HP 图标 + + [Header("Gauges")] + [SerializeField] private Image _soulGaugeFill; + [SerializeField] private Image _spiritGaugeFill; + [SerializeField] private TMP_Text _geoText; + + [Header("Spring Charges")] + [SerializeField] private Transform _springContainer; + [SerializeField] private GameObject _springIconPrefab; + + [Header("Form")] + [SerializeField] private Image[] _formIcons; // 3 forms + + [Header("Interact Prompt")] + [SerializeField] private TMP_Text _interactText; + [SerializeField] private GameObject _interactPromptRoot; + + [Header("Event Channels - Subscribe")] + [SerializeField] private IntEventChannelSO _onHPChanged; + [SerializeField] private IntEventChannelSO _onMaxHPChanged; + [SerializeField] private IntEventChannelSO _onSoulPowerChanged; + [SerializeField] private IntEventChannelSO _onSpiritPowerChanged; + [SerializeField] private IntEventChannelSO _onGeoChanged; + [SerializeField] private IntEventChannelSO _onSpringChargesChanged; + [SerializeField] private IntEventChannelSO _onFormChanged; + [SerializeField] private StringEventChannelSO _onShowInteractPrompt; + [SerializeField] private VoidEventChannelSO _onHideInteractPrompt; + + private void OnEnable() + { + _onHPChanged.OnEventRaised += UpdateHP; + _onMaxHPChanged.OnEventRaised += RebuildHPCells; + _onSoulPowerChanged.OnEventRaised += val => _soulGaugeFill.fillAmount = val / 100f; + _onSpiritPowerChanged.OnEventRaised += val => _spiritGaugeFill.fillAmount = val / 100f; + _onGeoChanged.OnEventRaised += val => _geoText.text = val.ToString(); + _onSpringChargesChanged.OnEventRaised += RebuildSpringIcons; + _onFormChanged.OnEventRaised += UpdateFormIcon; + _onShowInteractPrompt.OnEventRaised += ShowInteractPrompt; + _onHideInteractPrompt.OnEventRaised += HideInteractPrompt; + } + private void OnDisable() { /* 对称 -= */ } + + private void UpdateHP(int current); // 更新 HP 格子激活/灰化状态 + private void RebuildHPCells(int max); // 重建 HP 格子列表(MaxHP 改变时) + private void RebuildSpringIcons(int charges); + private void UpdateFormIcon(int formIndex); + private void ShowInteractPrompt(string text); + private void HideInteractPrompt(); +} +``` + +--- + +## 4. BossHPBar + +```csharp +// 路径: Assets/Scripts/UI/HUD/BossHPBar.cs +public class BossHPBar : MonoBehaviour +{ + [SerializeField] private TMP_Text _bossNameText; + [SerializeField] private Image _hpFill; + [SerializeField] private Transform _phaseMarkersRoot; + [SerializeField] private GameObject _phaseMarkerPrefab; + + [Header("Event Channels")] + [SerializeField] private BoolEventChannelSO _onBossFightToggled; // true=开始,false=结束 + [SerializeField] private IntEventChannelSO _onBossHPChanged; + [SerializeField] private StringEventChannelSO _onBossNameSet; + [SerializeField] private IntEventChannelSO _onBossHPMaxSet; + + private int _maxHP; + + private void OnEnable() + { + _onBossFightToggled.OnEventRaised += OnBossFightToggled; + _onBossHPChanged.OnEventRaised += hp => _hpFill.fillAmount = (float)hp / _maxHP; + _onBossNameSet.OnEventRaised += name => _bossNameText.text = name; + _onBossHPMaxSet.OnEventRaised += max => _maxHP = max; + } + private void OnDisable() + { + _onBossFightToggled.OnEventRaised -= OnBossFightToggled; + _onBossHPChanged.OnEventRaised -= hp => _hpFill.fillAmount = (float)hp / _maxHP; + _onBossNameSet.OnEventRaised -= name => _bossNameText.text = name; + _onBossHPMaxSet.OnEventRaised -= max => _maxHP = max; + } + + private void OnBossFightToggled(bool started) + { + if (started) StartCoroutine(SlideIn()); + else StartCoroutine(SlideOut()); + } + + private IEnumerator SlideIn(); // 动画:Boss 血条从屏幕底部滑入 + private IEnumerator SlideOut(); // 动画:Boss 血条滑出并隐藏 +} +``` + +--- + +## 5. PauseMenuController + +```csharp +// 路径: Assets/Scripts/UI/Menus/PauseMenuController.cs +public class PauseMenuController : MonoBehaviour +{ + [SerializeField] private UIManager _uiManager; + [SerializeField] private Button _btnResume; + [SerializeField] private Button _btnSettings; + [SerializeField] private Button _btnMainMenu; + [SerializeField] private Button _btnQuit; + + [Header("Event Channels")] + [SerializeField] private GameStateEventChannelSO _onGameStateChanged; + [SerializeField] private VoidEventChannelSO _onResumeRequested; + + private void Awake() + { + _btnResume.onClick.AddListener(Resume); + _btnSettings.onClick.AddListener(() => _uiManager.OpenPanel(_settingsRoot)); + _btnMainMenu.onClick.AddListener(GoToMainMenu); + _btnQuit.onClick.AddListener(Application.Quit); + } + + private void Resume() + { + _onResumeRequested.Raise(); + _uiManager.CloseTopPanel(); + } + + private void GoToMainMenu(); + // 广播 EVT_SceneLoadRequest(目标 = MainMenuScene) +} +``` + +--- + +## 6. DeathScreenController + +```csharp +// 路径: Assets/Scripts/UI/Menus/DeathScreenController.cs +public class DeathScreenController : MonoBehaviour +{ + [SerializeField] private TMP_Text _deathMessage; + [SerializeField] private Button _btnRespawn; + + [Header("Event Channels")] + [SerializeField] private VoidEventChannelSO _onPlayerDied; + [SerializeField] private VoidEventChannelSO _onDeathScreenConfirmed; // Raise → GameManager.RespawnCoroutine + + private void OnEnable() => _onPlayerDied.OnEventRaised += OnPlayerDied; + private void OnDisable() => _onPlayerDied.OnEventRaised -= OnPlayerDied; + + // ⚠️ EVT_PlayerDied 发出后需等待 1.5s 死亡动画,否则死亡画面会提前弹出 + private void OnPlayerDied() => StartCoroutine(ShowAfterDelay(1.5f)); + + private IEnumerator ShowAfterDelay(float delay) + { + yield return new WaitForSeconds(delay); + Show(); + } + + private void Show() + { + gameObject.SetActive(true); + _btnRespawn.onClick.RemoveAllListeners(); + _btnRespawn.onClick.AddListener(Confirm); + } + + private void Confirm() + { + gameObject.SetActive(false); + _onDeathScreenConfirmed.Raise(); // GameManager 监听后执行 RespawnCoroutine + } +} +``` + +--- + +## 7. SettingsPanelController + +```csharp +// 路径: Assets/Scripts/UI/Menus/SettingsPanelController.cs +// 驱动 SettingsManager 的全部 Set* 方法 +public class SettingsPanelController : MonoBehaviour +{ + [SerializeField] private SettingsManager _settings; + + [Header("Audio")] + [SerializeField] private Slider _masterVolume; + [SerializeField] private Slider _bgmVolume; + [SerializeField] private Slider _sfxVolume; + [SerializeField] private Slider _ambientVolume; + + [Header("Video")] + [SerializeField] private Toggle _vSyncToggle; + [SerializeField] private TMP_Dropdown _fpsDropdown; + [SerializeField] private TMP_Dropdown _resolutionDropdown; + + private void Start() + { + // 从 SettingsManager 读取当前值并填充控件 + // 绑定 onChange 事件 → 调用对应 _settings.Set*() + } +} +``` + +--- + +## 7.5 SaveSlotController + +```csharp +// 路径: Assets/Scripts/UI/Menus/SaveSlotController.cs +// 驱动主菜单存档槽选择(新游戏 / 继续) +public class SaveSlotController : MonoBehaviour +{ + [SerializeField] private SaveSlotUI[] _slotUIs; // 3 个存档槽 UI + [SerializeField] private SaveManager _saveManager; + + public async UniTask RefreshAsync() + { + for (int i = 0; i < 3; i++) + { + var summary = await _saveManager.GetSlotSummaryAsync(i); + _slotUIs[i].Refresh(summary); // null = 空槽(显示“新局”) + } + } + + public void OnSlotSelected(int slotIndex); + // 新局:_saveManager.CreateSlot(slotIndex) → 启动游戏 + // 继续:_saveManager.LoadAsync(slotIndex) → 载入存档 +} + +// 单个存档槽卡片组件 +public class SaveSlotUI : MonoBehaviour +{ + [SerializeField] private TMP_Text _playtimeText; + [SerializeField] private TMP_Text _regionText; + [SerializeField] private TMP_Text _percentText; + [SerializeField] private Image _formIcon; + [SerializeField] private TMP_Text _lastSavedText; + [SerializeField] private GameObject _emptyIndicator; // 空槽提示 + + public void Refresh(SlotSummary summary); +} +``` + +--- + +## 7.6 SaveIndicator + +```csharp +// 路径: Assets/Scripts/UI/SaveIndicator.cs +// 右下角存档进行中提示字 +[RequireComponent(typeof(CanvasGroup))] +public class SaveIndicator : MonoBehaviour +{ + [SerializeField] private CanvasGroup _cg; + [SerializeField] private float _fadeDuration = 0.2f; + + [Header("Event Channels")] + // ⚠️ 统一使用单一 BoolEventChannelSO(对齐 02_EventSystem §4 EVT_SaveIndicatorVisible 和 12_SaveModule §4/§6) + [SerializeField] private BoolEventChannelSO _onSaveIndicatorVisible; // → EVT_SaveIndicatorVisible + + private void OnEnable() + { + _onSaveIndicatorVisible.OnEventRaised += visible => FadeTo(visible ? 1f : 0f); + } + private void OnDisable() + { + _onSaveIndicatorVisible.OnEventRaised -= visible => FadeTo(visible ? 1f : 0f); + } + + private void FadeTo(float target) => StartCoroutine(FadeCoroutine(target)); + private IEnumerator FadeCoroutine(float target) + { + float start = _cg.alpha; + float t = 0; + while (t < _fadeDuration) + { + _cg.alpha = Mathf.Lerp(start, target, t / _fadeDuration); + t += Time.unscaledDeltaTime; + yield return null; + } + _cg.alpha = target; + } +} +``` + +--- + +## 7.7 LoadingScreenManager + +```csharp +// 路径: Assets/Scripts/UI/LoadingScreenManager.cs +// 全屏加载面:进度条 + 提示文字 + 随机背景图 +public class LoadingScreenManager : MonoBehaviour +{ + [SerializeField] private GameObject _loadingRoot; + [SerializeField] private Image _progressFill; // 进度条 fillAmount + [SerializeField] private TMP_Text _tipText; // 载入提示 + [SerializeField] private Image[] _backgroundArts; // 随机切换的背景图 + [SerializeField] private string[] _tipKeys; // 本地化 Key 数组 + [SerializeField] private float _minDisplayTime = 0.5f; // 载入面最少展示时长 + + [Header("Event Channels")] + [SerializeField] private VoidEventChannelSO _onLoadingStarted; + [SerializeField] private VoidEventChannelSO _onLoadingComplete; + [SerializeField] private FloatEventChannelSO _onLoadingProgressUpdated; // 0–1 + + private void OnEnable() + { + _onLoadingStarted.OnEventRaised += Show; + _onLoadingComplete.OnEventRaised += Hide; + _onLoadingProgressUpdated.OnEventRaised += SetProgress; + } + private void OnDisable() + { + _onLoadingStarted.OnEventRaised -= Show; + _onLoadingComplete.OnEventRaised -= Hide; + _onLoadingProgressUpdated.OnEventRaised -= SetProgress; + } + + private void Show() + { + _loadingRoot.SetActive(true); + _progressFill.fillAmount = 0f; + // 随机选取背景图和提示文字 + foreach (var bg in _backgroundArts) bg.enabled = false; + _backgroundArts[Random.Range(0, _backgroundArts.Length)].enabled = true; + _tipText.text = LocalizationManager.Get(_tipKeys[Random.Range(0, _tipKeys.Length)]); + } + + private void Hide() => StartCoroutine(HideAfterMinTime()); + private IEnumerator HideAfterMinTime() + { + // 确保载入面至少展示 _minDisplayTime 秒 + yield return new WaitForSecondsRealtime(_minDisplayTime); + _loadingRoot.SetActive(false); + } + + private void SetProgress(float value) => _progressFill.fillAmount = value; +} +``` + +--- + +## 7.8 IBossHPProvider 接口 + +```csharp +// 路径: Assets/Scripts/UI/HUD/IBossHPProvider.cs +// 解耦接口:让 BossHPBar 不直接依赖 BossBase(UI → Combat 逆向耐合) +// BossBase 在运行时实现此接口,BossOrchestrator 配置到 BossHPBar._provider 中 +public interface IBossHPProvider +{ + string BossId { get; } // Boss 前缀 ID + string BossNameKey { get; } // 本地化 Key + float HPRatio { get; } // 0–1 实时 HP 比例 + int TotalPhases { get; } // Boss 总阶段数为阶段标记数 + float[] PhaseThresholds { get; } // 各阶段切换 HP 阈值 +} +``` + +--- + +## 8. LoadingOverlay + +```csharp +// 路径: Assets/Scripts/UI/LoadingOverlay.cs +// 由 SceneLoader 直接调用(或通过事件),控制全屏黑幕渐入渐出 +public class LoadingOverlay : MonoBehaviour +{ + [SerializeField] private CanvasGroup _canvasGroup; + [SerializeField] private float _fadeDuration = 0.3f; + + [Header("Event Channels")] + [SerializeField] private BoolEventChannelSO _onLoadingOverlayRequested; + + private void OnEnable() => _onLoadingOverlayRequested.OnEventRaised += SetVisible; + private void OnDisable() => _onLoadingOverlayRequested.OnEventRaised -= SetVisible; + + private void SetVisible(bool visible) => StartCoroutine(FadeCoroutine(visible ? 1f : 0f)); + + private IEnumerator FadeCoroutine(float target) + { + float start = _canvasGroup.alpha; + float t = 0; + while (t < _fadeDuration) + { + _canvasGroup.alpha = Mathf.Lerp(start, target, t / _fadeDuration); + t += Time.unscaledDeltaTime; + yield return null; + } + _canvasGroup.alpha = target; + _canvasGroup.blocksRaycasts = target > 0.5f; + } +} +``` + +--- + +## 9. DialogueBox + +```csharp +// 路径: Assets/Scripts/UI/DialogueBox.cs +// 挂在 Canvas_Overlay 下;由 DialogueManager 控制(见 14_NarrativeModule.md) +public class DialogueBox : MonoBehaviour +{ + [SerializeField] private TMP_Text _speakerNameText; + [SerializeField] private TMP_Text _dialogueText; + [SerializeField] private GameObject _continuePrompt; + + // DialogueManager 直接调用(不通过事件频道,避免帧延迟) + public void Show(string speakerName, string text, bool showContinue); + public void Hide(); + + // 文字逐字打印协程 + public IEnumerator TypeText(string text, float charDelay = 0.03f); +} +``` + +--- + +## 10. FloatingDamageText + +```csharp +// 路径: Assets/Scripts/UI/FloatingDamageText.cs +// 从对象池取出,显示伤害数字,向上飘动后归还 +public class FloatingDamageText : MonoBehaviour +{ + [SerializeField] private TMP_Text _text; + [SerializeField] private float _floatDistance = 1.5f; + [SerializeField] private float _duration = 0.8f; + + private string _poolKey = AddressKeys.UI_FloatingDmgText; + + public void Show(Vector2 worldPosition, int damage, DamageType type); + // 1. 设置世界坐标(Camera.main.WorldToScreenPoint → RectTransform) + // 2. 颜色:Normal=白, Fire=橙, Poison=绿, True=黄 + // 3. 协程向上漂移 + alpha 淡出 + // 4. 归还对象池 + + // 由 EVT_DamageDealt 频道触发(HUDController 订阅后调用) +} +``` + +--- + +## 11. ToastNotification + +```csharp +// 路径: Assets/Scripts/UI/ToastNotification.cs +// 右上角通知弹窗(能力解锁、成就、提示) +public class ToastNotification : MonoBehaviour +{ + [SerializeField] private TMP_Text _titleText; + [SerializeField] private TMP_Text _bodyText; + [SerializeField] private Image _icon; + [SerializeField] private float _displayDuration = 3f; + + public void Show(string title, string body, Sprite icon = null); + private IEnumerator AutoHide(); +} + +// ToastManager:管理通知队列(一次只显示一条) +public class ToastManager : MonoBehaviour +{ + [SerializeField] private ToastNotification _toast; + private Queue<(string title, string body, Sprite icon)> _queue = new(); + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onAchievementUnlocked; // 广播成就名 + // ... 其他通知来源 + + public void Enqueue(string title, string body, Sprite icon = null); +} +``` + +--- + +## 12. InputDeviceIconSwitcher + +```csharp +// 路径: Assets/Scripts/UI/InputDeviceIconSwitcher.cs +// 检测输入设备切换(KB/手柄),自动替换 UI 按键图标 +public class InputDeviceIconSwitcher : MonoBehaviour +{ + [SerializeField] private InputDeviceIconSetSO _kbIconSet; + [SerializeField] private InputDeviceIconSetSO _padIconSet; + + [Header("Event Channel")] + [SerializeField] private BoolEventChannelSO _onDeviceChanged; // true=手柄 + + private void OnEnable() => _onDeviceChanged.OnEventRaised += SwitchIconSet; + private void OnDisable() => _onDeviceChanged.OnEventRaised -= SwitchIconSet; + + private void SwitchIconSet(bool isGamepad); + // 广播给所有 InputIconImage 组件(自行从 IconSet 查找对应 Sprite) +} +``` + +--- + +## 13. PanelStack + +```csharp +// 已集成在 UIManager 内部(OpenPanel / CloseTopPanel) +// 控制器导航规则: +// - 每次 OpenPanel 时设置 EventSystem.SetSelectedGameObject(panel.defaultButton) +// - Escape / 手柄 B 键 → 触发 CloseTopPanel +// - Stack 为空时 → 若在 Gameplay 状态则无操作,若在 MainMenu 则弹出退出确认 +``` + +--- + +## 14. UI 事件频道清单 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_GameStateChanged` | `GameStateEventChannelSO` | `GameManager` | `UIManager` | +| `EVT_PlayerDied` | `VoidEventChannelSO` | `PlayerStats` | `DeathScreenController`、`GameManager` | +| `EVT_DeathScreenConfirmed` | `VoidEventChannelSO` | `DeathScreenController`(Respawn 按钮) | `GameManager`(启动 RespawnCoroutine) | +| `EVT_ShowInteractPrompt` | `StringEventChannelSO` | `InteractableDetector` | `HUDController` | +| `EVT_HideInteractPrompt` | `VoidEventChannelSO` | `InteractableDetector` | `HUDController` | +| `EVT_BossFightToggled` | `BoolEventChannelSO`(true=开始,false=结束) | `BossOrchestrator` | `BossHPBar`、`AudioManager`(切 Boss BGM) | +| `EVT_BossHPChanged` | `IntEventChannelSO` | `BossBase` | `BossHPBar` | +| `EVT_BossNameSet` | `StringEventChannelSO` | `BossOrchestrator` | `BossHPBar` | +| `EVT_BossHPMaxSet` | `IntEventChannelSO` | `BossBase` | `BossHPBar` | +| `EVT_LoadingOverlay` | `BoolEventChannelSO` | `SceneLoader` | `LoadingOverlay` | +| `EVT_DamageDealt` | `DamageInfoEventChannelSO` | `HurtBox` | `HUDController`(生成伤害数字)、`AchievementManager` | +| `EVT_AchievementUnlocked` | `StringEventChannelSO` | `AchievementManager` | `ToastManager` | +| `EVT_AbilityUnlocked` | `StringEventChannelSO`(abilityId) | `PlayerStats.UnlockAbility` | `ToastManager`、`HUDController` | +| `EVT_PlayerFormChanged` | `IntEventChannelSO` | `FormController` | `HUDController`、`SkillHUD` | +| `EVT_InputDeviceChanged` | `BoolEventChannelSO` | 输入系统(设备切换回调) | `InputDeviceIconSwitcher` | +| `EVT_LoadingStarted` | `VoidEventChannelSO` | `SceneLoader` | `LoadingScreenManager` | +| `EVT_LoadingComplete` | `VoidEventChannelSO` | `SceneLoader` | `LoadingScreenManager` | +| `EVT_LoadingProgressUpdated` | `FloatEventChannelSO` | `SceneLoader` | `LoadingScreenManager` | +| `EVT_SaveIndicatorVisible` | `BoolEventChannelSO`(true=显示,false=隐藏) | `SaveManager.SaveAsync()` | `SaveIndicator` | diff --git a/Docs/Architecture/11_AudioModule.md b/Docs/Architecture/11_AudioModule.md new file mode 100644 index 0000000..7269d7c --- /dev/null +++ b/Docs/Architecture/11_AudioModule.md @@ -0,0 +1,526 @@ +# 11 · 音频模块 + +> **命名空间** `BaseGames.Audio` +> **程序集** `BaseGames.Audio` +> **路径** `Assets/Scripts/Audio/` +> **依赖** `BaseGames.Core.Events`、`Unity AudioMixer` + +--- + +## 目录 + +1. [AudioMixer 架构](#1-audiomixer-架构) +2. [AudioManager](#2-audiomanager) +3. [BGMController](#3-bgmcontroller) +4. [AudioZone](#4-audiozone) +5. [AudioEventSO(SFX 集成)](#5-audioeventsso) +6. [GlobalSFXPlayer](#6-globalsfxplayer) +7. [AudioConfigSO](#7-audioconfigso) +8. [音频事件频道清单](#8-音频事件频道清单) + +--- + +## 1. AudioMixer 架构 + +**资产路径**:`Assets/Audio/MainMixer.mixer` + +### 混音组层级 + +``` +Master +├── BGM (背景音乐) +├── SFX (所有音效) +│ ├── SFX_Player +│ ├── SFX_Enemy +│ └── SFX_World +└── Ambient (环境音) +``` + +### Exposed Parameters(代码用字符串常量) + +```csharp +// 路径: Assets/Scripts/Audio/AudioMixerKeys.cs +public static class AudioMixerKeys +{ + public const string Master = "MasterVolume"; + public const string BGM = "BGMVolume"; + public const string SFX = "SFXVolume"; + public const string Ambient = "AmbientVolume"; +} +``` + +所有参数范围:`-80 ~ 0 dB` + +### AudioMixer 快照 + +| 快照名 | 触发条件 | 主要差异 | +|--------|---------|---------| +| `Default` | 正常 Gameplay | 全组正常 | +| `Paused` | `GameState.Paused` | BGM/SFX -12 dB + 低通滤波 | +| `Dead` | 玩家死亡 | BGM 渐出 -80 dB(1.5s)| +| `BossFight` | Boss 战开始 | Ambient -20 dB | + +切换方式: +```csharp +_mixer.TransitionToSnapshots(new[] { snapshot }, new[] { 1f }, transitionTime); +``` + +--- + +## 2. AudioManager + +```csharp +// 路径: Assets/Scripts/Audio/AudioManager.cs +[DefaultExecutionOrder(-500)] +public class AudioManager : MonoBehaviour +{ + [Header("AudioMixer")] + [SerializeField] private AudioMixer _mixer; + + [Header("BGM Sources(双 Source 交叉淡入淡出)")] + [SerializeField] private AudioSource _bgmSourceA; + [SerializeField] private AudioSource _bgmSourceB; + + [Header("SFX Pool(4~8 源轮转,防高密度战斗音效戳断)")] + [SerializeField] private AudioSource[] _sfxSources; // Inspector 预挂,建议 6 个,均路由到 SFX MixerGroup + private int _sfxRoundRobin; // 轮转指针(无锁) + + [Header("Event Channels - Subscribe")] + [SerializeField] private GameStateEventChannelSO _onGameStateChanged; + [SerializeField] private StringEventChannelSO _onBossFightStarted; // ⚠️ bossId: string(与 02_EventSystem §4 / §3 BGMController 一致) + + // ── Singleton(已废弃:新代码请使用 ServiceLocator.Get())───────────── + /// + /// 已废弃。请改用 ServiceLocator.Get<IAudioService>() 访问音频服务。 + /// 保留此属性仅为历史层兴范过渡期兼容,将在下一个大版本移除。 + /// + [System.Obsolete("Use ServiceLocator.Get() instead. AudioManager.Instance will be removed in a future version.")] + public static AudioManager Instance { get; private set; } + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + _activeBGMSource = _bgmSourceA; + _inactiveBGMSource = _bgmSourceB; + } + + private AudioSource _activeBGMSource; + private AudioSource _inactiveBGMSource; + private Coroutine _crossfadeCoroutine; + + // ── 音量(统一入口;SettingsManager / 设置面板调用)──────────── + public void Initialize(); // 读取 GlobalSettings 并应用所有音量 + + /// + /// 将指定混音器参数设置为 0-1 线性值(内部转换为 dB)。 + /// 唯一音量写入入口——所有调用方均使用此方法。 + /// + /// AudioMixerKeys.* 常量(Master / BGM / SFX / Ambient) + public void SetVolume(string exposedParam, float linear) + => _mixer.SetFloat(exposedParam, LinearToDecibel(linear)); + + // BGM 播放(带两段淡变时长) + public void PlayBGM(AudioClip clip, float fadeOutDur = 1f, float fadeInDur = 1f); + public void StopBGM(float fadeDuration = 1f); + + // SFX 一次性播放(轮转多源,避免高密度战斗时音效相互戳断) + public void PlaySFX(AudioClip clip, float volumeScale = 1f) + { + var src = NextSFXSource(); + src.volume = volumeScale; + src.PlayOneShot(clip); // PlayOneShot 不打断当前正在播放的其他音效 + } + + // 2D 游戏中位置参数不做 3D 衰减,统一个多源池路由 + public void PlaySFXAtPosition(AudioClip clip, Vector2 pos, float volumeScale = 1f) + => PlaySFX(clip, volumeScale); + + // 轮转返回下一个 AudioSource;PlayOneShot 下无需检查 isPlaying + private AudioSource NextSFXSource() + => _sfxSources[_sfxRoundRobin++ % _sfxSources.Length]; + + // 快照切换 + public void TransitionToSnapshot(string snapshotName, float transitionTime = 0.5f); + + private IEnumerator CrossfadeCoroutine(AudioClip newClip, float fadeOutDur, float fadeInDur); + private static float LinearToDecibel(float linear) + => linear > 0.0001f ? 20f * Mathf.Log10(linear) : -80f; +} +``` + +--- + +## 3. BGMController + +```csharp +// 路径: Assets/Scripts/Audio/BGMController.cs +// 订阅世界 / Boss 事件,指挥 AudioManager 切换 BGM +public class BGMController : MonoBehaviour +{ + [SerializeField] private AudioManager _audioManager; + [SerializeField] private AudioConfigSO _config; + + [Header("Event Channels - Subscribe")] + [SerializeField] private GameStateEventChannelSO _onGameStateChanged; + [SerializeField] private BoolEventChannelSO _onBossFightToggled; // true=开始, false=结束 + [SerializeField] private StringEventChannelSO _onRegionEntered; // region id + + private MusicState _musicState = MusicState.Exploration; + + private string _currentRegion = "Forest"; + + private void OnEnable() + { + _onBossFightToggled.OnEventRaised += OnBossFightToggled; + _onRegionEntered.OnEventRaised += OnRegionEntered; + _onGameStateChanged.OnEventRaised += HandleStateChanged; + } + private void OnDisable() { /* -= */ } + + private void OnBossFightToggled(bool started) + { + if (started) + { + _musicState = MusicState.Boss; + var clip = _config.GetBossBGM(_currentRegion); + _audioManager.PlayBGM(clip, fadeOutDur: 1f, fadeInDur: 0.5f); + _audioManager.TransitionToSnapshot("BossFight", 0.5f); + } + else + { + StartCoroutine(PlayVictoryThenRestore()); + } + } + + private IEnumerator PlayVictoryThenRestore() + { + _musicState = MusicState.Victory; + _audioManager.PlayBGM(_config.VictoryStingBGM, fadeOutDur: 0.3f, fadeInDur: 0.1f); + yield return new WaitForSecondsRealtime(_config.VictoryStingDuration); + _musicState = MusicState.Exploration; + OnRegionEntered(_currentRegion); + _audioManager.TransitionToSnapshot("Default", 1.0f); + } + + private void OnRegionEntered(string regionId) + { + if (regionId == _currentRegion) return; + _currentRegion = regionId; + if (_musicState == MusicState.Exploration) + { + var clip = _config.GetZoneBGM(regionId); + _audioManager.PlayBGM(clip, fadeOutDur: 1f, fadeInDur: 1f); + } + } + + private void HandleStateChanged(GameStateId state) + { + // ⚠️ GameStateId 是 struct,不能用 switch;使用 if/else + GameStates 常量(架构 03_CoreModule §2) + if (state == GameStates.MainMenu) + _audioManager.PlayBGM(_config.MainMenuBGM, fadeOutDur: 0.5f, fadeInDur: 1.0f); + else if (state == GameStates.Paused) + _audioManager.TransitionToSnapshot("Paused", 0.2f); + else if (state == GameStates.Dead) + _audioManager.TransitionToSnapshot("Dead", 1.5f); + else if (state == GameStates.Gameplay) + _audioManager.TransitionToSnapshot("Default", 0.3f); + } +} +``` + +--- + +## 3.5 MusicState 音乐状态机 + +```csharp +// 路径: Assets/Scripts/Audio/BGMController.cs +// 由 BGMController 内部维护,控制 BGM 切换逻辑 +public enum MusicState +{ + Exploration, // 默认:区域探索 BGM + Boss, // Boss 战:Boss 主题 BGM + Victory, // Boss 击败后短暂胜利音乐 + None, // 过场/死亡/主菜单时由 BGMController 直接切换 +} +``` + +**状态转换**: + +``` +Exploration ──[开始 Boss 战]─────────────► Boss + ◄─[结束 Boss 战]────────────── +Boss ──[Boss 击败]────────────────► Victory +Victory ──[VictorySting 播放完毕]─────► Exploration +Exploration ──[OnRegionEntered]─────────► Exploration(切换同状态内不同曲目) +``` + +--- + +## 4. AudioZone + +```csharp +// 路径: Assets/Scripts/Audio/AudioZone.cs +// 触发器:进入区域时切换 BGM +[RequireComponent(typeof(Collider2D))] +public class AudioZone : MonoBehaviour +{ + [SerializeField] private string _zoneId; // 与 AudioConfigSO 中的 key 对应 + + [Header("Event Channel")] + [SerializeField] private StringEventChannelSO _onRegionEntered; + + private void OnTriggerEnter2D(Collider2D other) + { + if (other.CompareTag("Player")) + _onRegionEntered.Raise(_zoneId); + } +} +``` + +--- + +## 5. AudioEventSO + +```csharp +// 路径: Assets/Scripts/Audio/AudioEventSO.cs +// 可在 Inspector 配置的 SFX 数据:支持随机音量/音调、随机片段 +[CreateAssetMenu(menuName = "Audio/AudioEvent")] +public class AudioEventSO : ScriptableObject +{ + public AudioClip[] Clips; // 随机挑选一个播放 + [Range(0f, 1f)] + public float VolumeMin = 0.9f; + [Range(0f, 1f)] + public float VolumeMax = 1.0f; + [Range(0.5f, 2f)] + public float PitchMin = 0.95f; + [Range(0.5f, 2f)] + public float PitchMax = 1.05f; + public AudioMixerGroup MixerGroup; // 指定路由到哪个子混音组(如 SFX_Player) + + public void Play(AudioSource source) + { + if (Clips == null || Clips.Length == 0) return; + source.outputAudioMixerGroup = MixerGroup; + source.clip = Clips[Random.Range(0, Clips.Length)]; + source.volume = Random.Range(VolumeMin, VolumeMax); + source.pitch = Random.Range(PitchMin, PitchMax); + source.Play(); + } + + public void PlayOneShot(AudioSource source) + { + if (Clips == null || Clips.Length == 0) return; + var clip = Clips[Random.Range(0, Clips.Length)]; + source.outputAudioMixerGroup = MixerGroup; + source.PlayOneShot(clip, Random.Range(VolumeMin, VolumeMax)); + } +} +``` + +**资产路径**:`Assets/ScriptableObjects/Audio/` +**命名规范**:`AUD_{Category}_{Name}.asset`(例 `AUD_Player_SwordSlash.asset`) + +--- + +## 6. GlobalSFXPlayer + +```csharp +// 路径: Assets/Scripts/Audio/GlobalSFXPlayer.cs +// 提供静态方法入口,配合 AudioEventSO 在任何地方播放 SFX +// Feel(MMF_Player)的 MMSoundManagerSoundSO 也通过此路由 +public class GlobalSFXPlayer : MonoBehaviour +{ + private static GlobalSFXPlayer _instance; + + [SerializeField] private AudioMixerGroup _sfxGroup; + + private void Awake() + { + if (_instance != null) { Destroy(gameObject); return; } + _instance = this; + } + + // 路由到 AudioManager.PlaySFX(多源轮转池,见 §2) + // AudioEventSO.GetClip() 返回对应音频片段(含随机变体支持) + public static void Play(AudioEventSO audioEvent, Vector2? worldPos = null) + { + // 2D 游戏不需要 3D 空间音效衰减;统一委托 AudioManager 多源池播放 + var clip = audioEvent.GetClip(); + if (clip != null) + AudioManager.Instance.PlaySFX(clip); + } +} +``` + +--- + +## 7. AudioConfigSO + +```csharp +// 路径: Assets/Scripts/Audio/AudioConfigSO.cs +[CreateAssetMenu(menuName = "Audio/AudioConfig")] +public class AudioConfigSO : ScriptableObject +{ + [System.Serializable] + public struct ZoneBGMEntry + { + public string ZoneId; + public AudioClip BGMClip; + public float FadeDuration; + } + + [System.Serializable] + public struct BossBGMEntry + { + public string BossId; + public AudioClip BGMClip; + } + + public ZoneBGMEntry[] ZoneBGMs; + public BossBGMEntry[] BossBGMs; + public AudioClip MainMenuBGM; + public AudioClip GameOverSting; // 死亡时短音乐片段 + public AudioClip VictoryStingBGM; // Boss 击败后胜利音乐片段 + public float VictoryStingDuration = 4f; // 胜利音乐播放时长(秒) + + public AudioClip GetZoneBGM(string zoneId) + { + foreach (var e in ZoneBGMs) + if (e.ZoneId == zoneId) return e.BGMClip; + return null; + } + + public AudioClip GetBossBGM(string bossId) + { + foreach (var e in BossBGMs) + if (e.BossId == bossId) return e.BGMClip; + return null; + } +} +``` + +**资产路径**:`Assets/ScriptableObjects/Audio/AUD_Config.asset` + +--- + +## 8. 音频事件频道清单 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_RegionEntered` | `StringEventChannelSO` | `AudioZone` | `BGMController` | +| `EVT_BossFightStarted` | `StringEventChannelSO` | `BossOrchestrator` | `BGMController`、`BossHPBar` | +| `EVT_BossFightEnded` | `BoolEventChannelSO` | `BossBase` | `BGMController` | +| `EVT_GameStateChanged` | `GameStateEventChannelSO` | `GameManager` | `BGMController`(暂停/恢复)、`AudioManager`(快照) | +| `EVT_PlayerDied` | `VoidEventChannelSO` | `PlayerStats` | `AudioManager`(播放 GameOverSting、切 Dead 快照) | + +--- + +## 9. 脚步声材质分层(Footstep Material System) + +> **Design 来源**:[12_AudioSystem](../Design/12_AudioSystem.md) §14 + +脚步声根据脚下地面材质动态切换,不使用单一 SFX 以增强环境真实感。 + +```csharp +// 路径: Assets/Scripts/Audio/FootstepMaterial.cs +public enum FootstepMaterial +{ + Stone, // 石板地(默认) + Dirt, // 泥土/草地 + Wood, // 木板 + Metal, // 金属格栅 + Water, // 浅水区(溅水声) + Sand, // 沙地 + Grass, // 草丛 + Cave, // 洞穴(回响加强) +} + +// 路径: Assets/Scripts/Audio/FootstepAudioConfigSO.cs +[CreateAssetMenu(menuName = "BaseGames/Audio/FootstepAudioConfig")] +public class FootstepAudioConfigSO : ScriptableObject +{ + [System.Serializable] + public struct MaterialEntry + { + public FootstepMaterial material; + public AudioClip[] clips; // 随机选一个,防止重复感 + [Range(0f, 1f)] public float volume; + [Range(0.8f, 1.2f)] public float pitchVariance; // 每次随机 pitch 偏移范围 + } + + public MaterialEntry[] entries; + + public MaterialEntry? GetEntry(FootstepMaterial mat) + { + foreach (var e in entries) + if (e.material == mat) return e; + return null; + } +} + +// 路径: Assets/Scripts/Audio/FootstepMaterialMarker.cs +// 挂载到地面碰撞体所在 GameObject(Tilemap 图层 or 单体地形 Prefab) +public class FootstepMaterialMarker : MonoBehaviour +{ + public FootstepMaterial material; +} +``` + +**播放时机**: +- **落地**:`PlayerController.OnLanded()` 触发(同 MaterialEntry,音量 ×1.5) +- **行走**:Animancer 动画事件 `FootstepL` / `FootstepR`(见 `24_AnimEventModule`)触发 +- **冲刺起步**:Dash 动画第 2 帧触发专属 `DashSFX`(不走 Footstep 通道) + +玩家若脚下 GameObject 无 `FootstepMaterialMarker`,默认使用 `Stone`。 + +--- + +## 10. 水下音效处理(Underwater Audio) + +> **Design 来源**:[12_AudioSystem](../Design/12_AudioSystem.md) §15 + +进入 `LiquidZone`(见 `21_LiquidPuzzleModule`)时,全局音效自动应用水下 DSP 处理。 + +```csharp +// 路径: Assets/Scripts/Audio/UnderwaterAudioController.cs +// 挂载于 PlayerController 所在 GameObject;LiquidZone 调用 EnterWater/ExitWater +public class UnderwaterAudioController : MonoBehaviour +{ + [SerializeField] AudioMixer _mixer; + [SerializeField] float _transitionDuration = 0.3f; + + /// LiquidZone.OnTriggerEnter2D 时调用 + public void EnterWater() + { + _mixer.FindSnapshot("Underwater") + .TransitionTo(_transitionDuration); + } + + /// LiquidZone.OnTriggerExit2D 时调用 + public void ExitWater() + { + _mixer.FindSnapshot("Default") + .TransitionTo(_transitionDuration); + } +} +``` + +**Underwater Snapshot DSP 配置**(AudioMixer 中预设): + +| Bus | 处理 | +|-----|------| +| BGM | Low-Pass 800 Hz(水下声音沉闷)| +| SFX | Low-Pass 1200 Hz + Volume ×0.7 | +| Ambient | Volume ×0,替换为水下环境音(气泡声)| +| PlayerSFX | Low-Pass 1000 Hz | + +**水下专属 SFX 对照**: + +| 动作 | 水上 SFX | 水下 SFX | +|------|---------|---------| +| 攻击 | `sfx_player_slash` | `sfx_player_slash_underwater` | +| 浮出水面 | — | `sfx_splash_exit` | +| 入水 | — | `sfx_splash_enter` | +| 游泳移动 | — | `sfx_swim_loop`(循环,pitch 随速度变化)| diff --git a/Docs/Architecture/12_SaveModule.md b/Docs/Architecture/12_SaveModule.md new file mode 100644 index 0000000..738cad5 --- /dev/null +++ b/Docs/Architecture/12_SaveModule.md @@ -0,0 +1,1123 @@ +# 12 · 存档模块 + +> **命名空间** `BaseGames.Core.Save` +> **程序集** `BaseGames.Core.Save` +> **路径** `Assets/Scripts/Core/Save/` +> **依赖** `Newtonsoft.Json`(`com.unity.nuget.newtonsoft-json`) + +--- + +## 目录 + +1. [SaveData C# 数据结构](#1-savedata-c-数据结构) +2. [ISaveStorage 接口](#2-isavestorage-接口) +3. [ISaveable 接口](#3-isaveable-接口) +4. [SaveManager](#4-savemanager) +5. [SaveMigrator](#5-savemigrator) +6. [保存流程(详细时序)](#6-保存流程) +7. [加载流程(详细时序)](#7-加载流程) +8. [存档路径与文件规范](#8-存档路径与文件规范) + +--- + +## 1. SaveData C# 数据结构 + +所有数据类使用 `[Serializable]`,由 Newtonsoft.Json 序列化为 JSON。 + +```csharp +namespace BaseGames.Core.Save +{ + // ─── 顶层 ────────────────────────────────────────────────── + [Serializable] + public class SaveData + { + [JsonExtensionData] + public Dictionary ExtensionData = new(); + + public SaveMeta Meta = new(); + public PlayerSaveData Player = new(); + public EquipmentSaveData Equipment = new(); + public WorldSaveData World = new(); + public MapSaveData Map = new(); + public QuestSaveData Quests = new(); + public AchievementSaveData Achievements = new(); + public ToolsSaveData Tools = new(); + public ChallengeRoomsSaveData ChallengeRooms = new(); + public EventChainsSaveData EventChains = new(); + public ShopsSaveData Shops = new(); + public StatsSaveData Stats = new(); + public NGPlusSaveData NGPlus = null; // null = 非 NG+ 模式 + public Dictionary DLC = new(); + } + + // ─── Meta ─────────────────────────────────────────────────── + [Serializable] + public class SaveMeta + { + public string Version = "2.1"; // 2.1: AbilityFlags uint 替换 Dictionary + public int SlotIndex; + public string LastSaved; // ISO 8601 + public float Playtime; + public string SavePointId; + public int NGPlusCount; + public string Checksum; // SHA256 of 序列化后 JSON(不含 checksum 字段) + } + + // ─── Player ───────────────────────────────────────────────── + [Serializable] + public class PlayerSaveData + { + public float PosX, PosY; + public string Scene; + public int CurrentHP, MaxHP; + public int CurrentGeo, LifetimeGeo; + + // 能力解锁位掩码(AbilityType [Flags] uint bitmask,见 09_ProgressionModule §1) + // 存档版本 <2.1 的旧 Dictionary Abilities 由 SaveMigrator.MigrateV2ToV21 自动转换 + public uint AbilityFlags = 0; + + // 形态 + public string ActiveFormId; + public List UnlockedFormIds = new(); + + // 死亡遗骸 + public DeathShadeSaveData DeathShade; + + // 护盾状态(见 20_ShieldModule §9) + // -1 = 满护盾(默认),>=0 = 当前耐久值 + public int ShieldHP = -1; + public bool ShieldIsBroken = false; + } + + [Serializable] + public class DeathShadeSaveData + { + public float PosX, PosY; + public string SceneId; + public int GeoAmount; + } + + // ─── Equipment ────────────────────────────────────────────── + [Serializable] + public class EquipmentSaveData + { + public List EquippedCharmIds = new(); + public int NotchesUsed; + public int MaxNotches; + public List OwnedCharmIds = new(); + public List UpgradedCharmIds = new(); + // 注:工具槽数据在独立的 ToolsSaveData(顶层 SaveData.Tools),不在此处重复 + } + + // ─── World ────────────────────────────────────────────────── + [Serializable] + public class WorldSaveData + { + public List VisitedScenes = new(); + public List ActivatedSavePoints = new(); + public List OpenedDoors = new(); + public List DefeatedBossIds = new(); + public List CollectedIds = new(); // Collectibles + public Dictionary Switches = new(); // Levers/Buttons + public Dictionary NpcRelations = new(); + public HashSet ChallengeFirstClears = new(); // 已首次通关的挑战 ID + } + + // ─── Map ──────────────────────────────────────────────────── + [Serializable] + public class MapSaveData + { + // key = 场景名,value = 已探索房间 index 列表 + public Dictionary> DiscoveredRooms = new(); + public Dictionary MapPurchased = new(); + } + + // ─── Quests ───────────────────────────────────────────────── + [Serializable] + public class QuestSaveData + { + public Dictionary QuestStates = new(); + public List AvailableQuestIds = new(); + } + + [Serializable] + public class QuestState + { + public string Status; // "NotStarted"|"Active"|"Completed"|"Failed" + public int ObjectiveIndex; + public List ProgressCounts = new(); + public string GiverNpcId; + } + + // ─── Achievements ─────────────────────────────────────────── + [Serializable] + public class AchievementSaveData + { + public List Unlocked = new(); + public Dictionary Progress = new(); + } + + [Serializable] + public class AchievementProgress + { + public int Count; + public float Percent; + } + + // ─── Stats ────────────────────────────────────────────────── + [Serializable] + public class StatsSaveData + { + public int EnemyKills, Deaths, ParrySuccess, ParryFail; + public int GeoEarned, GeoLost; + public float DistanceTraveled; + public int SaveCount; + public Dictionary SkillUseCounts = new(); + public Dictionary DeathsByBoss = new(); + } + + // ─── ToolsSaveData ─────────────────────────────────────────── + [Serializable] + public class ToolsSaveData + { + public string ToolSlot0; + public string ToolSlot1; + public List OwnedToolIds = new(); + public Dictionary ToolStates = new(); + } + + // ─── ChallengeRoomsSaveData ────────────────────────────────── + [Serializable] + public class ChallengeRoomsSaveData + { + // key = 挑战房间 ID + public Dictionary Records = new(); + } + + [Serializable] + public class ChallengeRoomRecord + { + public int BestScore; + public float BestTime; + public string BestRank; // "S"/"A"/"B"/"C" + public int CompletionCount; + } + + // ─── EventChainsSaveData ───────────────────────────────────── + [Serializable] + public class EventChainsSaveData + { + // key = EventChain ID,value = 当前阶段名称(如 "Step2" / "Completed") + public Dictionary ChainStates = new(); + // 世界状态标志(跨系统布尔标志,如 "ForestBossDefeated") + public Dictionary WorldFlags = new(); + } + + // ─── ShopsSaveData ─────────────────────────────────────────── + [Serializable] + public class ShopsSaveData + { + // key = 商店 ID(如 "Shop_Forest_Merchant") + public Dictionary ShopRecords = new(); + } + + [Serializable] + public class ShopRecord + { + public List SoldUniqueItems = new(); // 已售出的唯一物品 ID + public Dictionary PurchaseCounts = new(); // 消耗品购买次数 + } + + // ─── NGPlusSaveData ────────────────────────────────────────── + [Serializable] + public class NGPlusSaveData + { + public int NGPlusCount; // NG+ 轮次(1 = 第一次 NG+) + public bool SteelSoulMode; // 钢铁之魂(死亡即删档) + public Dictionary NGPlusFlags = new(); // 专属标志 + } +} +``` + +--- + +## 2. ISaveStorage 接口 + +```csharp +// 路径: Assets/Scripts/Core/Save/ISaveStorage.cs +public interface ISaveStorage +{ + Task WriteAsync(int slotIndex, string json); + Task ReadAsync(int slotIndex); + Task DeleteAsync(int slotIndex); + bool Exists(int slotIndex); + IEnumerable GetExistingSlots(); +} + +// 本地文件实现(PC / Console) +public class LocalFileStorage : ISaveStorage +{ + private readonly string _saveDir; // Application.persistentDataPath/saves/ + + public LocalFileStorage() + { + _saveDir = Path.Combine(Application.persistentDataPath, "saves"); + Directory.CreateDirectory(_saveDir); + } + + public async Task WriteAsync(int slotIndex, string json) + { + var path = GetPath(slotIndex); + await File.WriteAllTextAsync(path, json); + } + + public async Task ReadAsync(int slotIndex) + => await File.ReadAllTextAsync(GetPath(slotIndex)); + + public Task DeleteAsync(int slotIndex) + { + File.Delete(GetPath(slotIndex)); + return Task.CompletedTask; + } + + public bool Exists(int slotIndex) => File.Exists(GetPath(slotIndex)); + public IEnumerable GetExistingSlots() + { + for (int i = 0; i < 3; i++) + if (Exists(i)) yield return i; + } + + private string GetPath(int slot) => Path.Combine(_saveDir, $"save_{slot}.json"); +} +``` + +--- + +## 3. ISaveable 接口 + +```csharp +// 路径: Assets/Scripts/Core/Save/ISaveable.cs +// 各系统组件实现,向 SaveManager 提供/接受自己的存档数据 +public interface ISaveable +{ + // 提取当前运行时状态 → 存入对应 SaveData 子结构 + void OnSave(SaveData saveData); + + // 从 saveData 恢复运行时状态 + void OnLoad(SaveData saveData); +} + +// 示例实现(PlayerStats) +// public class PlayerStats : MonoBehaviour, ISaveable +// { +// public void OnSave(SaveData d) => d.Player = GetSaveData(); +// public void OnLoad(SaveData d) => LoadSaveData(d.Player); +// } +``` + +--- + +## 4. SaveManager + +```csharp +// 路径: Assets/Scripts/Core/Save/SaveManager.cs +[DefaultExecutionOrder(-900)] +public class SaveManager : MonoBehaviour +{ + [SerializeField] private ISaveStorage _storage; // Inspector 绑定实现类型 + [SerializeField] private BoolEventChannelSO _onSaveIndicatorVisible; // → EVT_SaveIndicatorVisible(HUDController 订阅) + + // ── Singleton ──────────────────────────────────────── + public static SaveManager Instance { get; private set; } + + // 最低兼容版本(SaveValidator 使用) + public const string MinCompatibleVersion = "1.0"; + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + } + + // 注册的所有 ISaveable(各系统在 OnEnable 时注册) + private readonly List _saveables = new(); + + // 当前加载的存档数据(运行时缓存) + private SaveData _current; + private int _currentSlot = 0; + + // 用于 DeathScreen 的 Respawn 信息 + public static string LastCheckpointScene { get; private set; } + public static string LastCheckpointSpawnId { get; private set; } + + public void Register(ISaveable saveable) => _saveables.Add(saveable); + public void Unregister(ISaveable saveable) => _saveables.Remove(saveable); + + // 存档(由 EVT_SavePointActivated 触发) + public async Task SaveAsync(int slot = -1) + { + int targetSlot = slot < 0 ? _currentSlot : slot; + _current ??= new SaveData(); + + foreach (var s in _saveables) s.OnSave(_current); + + _current.Meta.LastSaved = DateTime.UtcNow.ToString("o"); + _current.Meta.SlotIndex = targetSlot; + _current.Meta.SaveCount++; + + string json = JsonConvert.SerializeObject(_current, Formatting.Indented); + _current.Meta.Checksum = ComputeChecksum(json); + json = JsonConvert.SerializeObject(_current, Formatting.Indented); // 含 checksum + + await _storage.WriteAsync(targetSlot, json); + + LastCheckpointScene = _current.Player.Scene; + LastCheckpointSpawnId = _current.Meta.SavePointId; + } + + // 读取存档(游戏启动 / 重生) + public async Task LoadAsync(int slot) + { + if (!_storage.Exists(slot)) return false; + + string json = await _storage.ReadAsync(slot); + var loaded = JsonConvert.DeserializeObject(json); + + if (!ValidateChecksum(loaded, json)) return false; // 校验失败 + + loaded = SaveMigrator.Migrate(loaded); // 版本迁移 + + _current = loaded; + _currentSlot = slot; + + foreach (var s in _saveables) s.OnLoad(_current); + + LastCheckpointScene = _current.Player.Scene; + LastCheckpointSpawnId = _current.Meta.SavePointId; + return true; + } + + public bool SlotExists(int slot) => _storage.Exists(slot); + public IEnumerable GetExistingSlots() => _storage.GetExistingSlots(); + + // ── 挑战房间快速存读档 ──────────────────────────────────────────── + private const int QuickSaveSlot = 98; // 专用快速存档槽(不覆盖普通存档) + + /// 挑战房间开始时调用,保存挑战入口状态(不阻塞)。 + public void QuickSave() => _ = SaveAsync(QuickSaveSlot); + + /// 挑战失败时调用,读取快速存档回挑战入口(不阻塞)。 + public void QuickLoad() => _ = LoadAsync(QuickSaveSlot); + + /// + /// 判断指定挑战是否为首次通关,并将其标记为已通关(幂等:重复调用返回 false)。 + /// 首次调用返回 true(触发首通奖励),后续调用返回 false(触发重复奖励)。 + /// + public bool IsFirstClear(string challengeId) + { + if (_current == null) return false; + if (_current.World.ChallengeFirstClears.Contains(challengeId)) return false; + _current.World.ChallengeFirstClears.Add(challengeId); + return true; + } + + /// + /// 判断指定 Boss 是否已被击败(查询 World.DefeatedBossIds 列表)。 + /// 由 ChallengeRoomTrigger 解锁条件校验使用。 + /// + public bool IsBossDefeated(string bossId) + { + if (_current == null) return false; + return _current.World.DefeatedBossIds.Contains(bossId); + } + + // ── EventChain / WorldFlag 集成(参见 14_NarrativeModule §6.1)──────────────────── + + /// 返回所有已完成的 EventChain ID。 + public IEnumerable GetCompletedChains() + => _current?.EventChains.ChainStates.Keys ?? Enumerable.Empty(); + + /// 将指定 EventChain 标记为 "Completed"。 + public void SetChainCompleted(string chainId) + { + _current ??= new SaveData(); + _current.EventChains.ChainStates[chainId] = "Completed"; + } + + /// 读取世界状态布尔标志(EventChains.WorldFlags)。 + public bool GetFlag(string flagId) + => _current?.EventChains.WorldFlags.TryGetValue(flagId, out var v) == true && v; + + /// 写入世界状态布尔标志(EventChains.WorldFlags)。 + public void SetFlag(string flagId, bool value) + { + _current ??= new SaveData(); + _current.EventChains.WorldFlags[flagId] = value; + } + + // ── 存档槽摘要(参见 10_UIModule §7.5)────────────────────────────────────── + + /// 异步读取指定槽的摘要信息,用于主菜单存档槽 UI 显示。槽不存在时返回 null。 + public async Task GetSlotSummaryAsync(int slotIndex) + { + if (!_storage.Exists(slotIndex)) return null; + string json = await _storage.ReadAsync(slotIndex); + var data = JsonConvert.DeserializeObject(json); + return new SlotSummary + { + SlotIndex = slotIndex, + Playtime = data.Meta.Playtime, + LastSaved = data.Meta.LastSaved, + SceneName = data.Player.Scene, + ActiveFormId = data.Player.ActiveFormId, + }; + } + + /// 创建新存档槽:重置运行时缓存并绑定槽索引。由主菜单"新建存档"调用。 + public void CreateSlot(int slotIndex) + { + _currentSlot = slotIndex; + _current = new SaveData(); + _current.Meta.SlotIndex = slotIndex; + } + + private string ComputeChecksum(string json) + { + // HMAC-SHA256:密鑅 = 设备 GUID(PC)或 Steam UserId 绑定,防止将存档文件复制到其他设备后绕过 SteelSoul 限制 + var keyBytes = System.Text.Encoding.UTF8.GetBytes(GetHmacKey()); + using var hmac = new System.Security.Cryptography.HMACSHA256(keyBytes); + var dataBytes = System.Text.Encoding.UTF8.GetBytes(json); + return Convert.ToBase64String(hmac.ComputeHash(dataBytes)); + } + + /// + /// 获取 HMAC 密鑅。密鑅由设备唯一标识符派生,绑定到设备, + /// 防止玩家把存档文件复制到其他设备来绕过 SteelSoul 。 + /// + private string GetHmacKey() + { + // 优先使用 IPlatformService 提供的用户 ID(Steam UserId等)作为密酅的一部分 + string platformId = ServiceLocator + .GetOrDefault(NullPlatformService.Instance) + .GetUserId(); // 平台无效时返回空字符串 + + // 回退层:使用设备 GUID(跨退出平台级绑定到设备) + string deviceId = string.IsNullOrEmpty(platformId) + ? SystemInfo.deviceUniqueIdentifier + : platformId; + + // 加盐:防止已知设备 ID 列表爆力 + const string salt = "ZelingV2SaveIntegrity_v1"; + return $"{deviceId}:{salt}"; + } + + private bool ValidateChecksum(SaveData data, string rawJson) + { + if (string.IsNullOrEmpty(data.Meta.Checksum)) return true; // 旧存档兄容 + + // 重新序列化时暂时置空 checksum 字段,再计算 + var savedChecksum = data.Meta.Checksum; + data.Meta.Checksum = null; + string jsonWithoutChecksum = JsonConvert.SerializeObject(data, Formatting.Indented); + data.Meta.Checksum = savedChecksum; // 恢复 + + string expected = ComputeChecksum(jsonWithoutChecksum); + if (expected != savedChecksum) + { + Debug.LogWarning("[SaveManager] 存档校验失败——存档文件可能被篹改或来自不同设备。"); + return false; + } + return true; + } +} + +// ── 存档槽摘要(主菜单 UI 使用,参见 10_UIModule §7.5)────────────────────────── +// 路径: Assets/Scripts/Core/Save/SlotSummary.cs(或与 SaveManager 同文件) +/// 存档槽摘要数据,由 SaveManager.GetSlotSummaryAsync 返回。null = 空槽(显示"新局")。 +public class SlotSummary +{ + public int SlotIndex; + public float Playtime; + public string LastSaved; // ISO 8601 + public string SceneName; // 最后存档时的场景名 + public string ActiveFormId; // 当前形态 ID(用于显示图标) +} +``` + +--- + +## 5. SaveMigrator + +```csharp +// 路径: Assets/Scripts/Core/Save/SaveMigrator.cs +// 处理存档版本升级(旧版 → 新版数据结构) +public static class SaveMigrator +{ + private const string CurrentVersion = "2.0"; + + public static SaveData Migrate(SaveData data) + { + switch (data.Meta.Version) + { + case "1.0": data = MigrateFrom1_0(data); goto case "1.1"; + case "1.1": data = MigrateFrom1_1(data); goto case "2.0"; + case "2.0": break; // 当前版本,无需迁移 + default: Debug.LogWarning($"Unknown save version: {data.Meta.Version}"); break; + } + data.Meta.Version = CurrentVersion; + return data; + } + + private static SaveData MigrateFrom1_0(SaveData d) + { + // 防御性 null-check:若旧版本缺少整个子结构体,先补全对象 + d.Equipment ??= new EquipmentSaveData(); + d.Player ??= new PlayerSaveData(); + d.World ??= new WorldSaveData(); + // 1.0 → 1.1:新增 Equipment.UpgradedCharmIds 字段,旧存档初始化为空列表 + d.Equipment.UpgradedCharmIds ??= new List(); + return d; + } + + private static SaveData MigrateFrom1_1(SaveData d) + { + // 防御性 null-check:子结构体若为 null 先补全 + d.Stats ??= new StatsSaveData(); + // 1.1 → 2.0:Stats 新增 SkillUseCounts + d.Stats.SkillUseCounts ??= new Dictionary(); + // 1.1 → 2.0:Player 新增护盾字段(-1 = 满护盾) + // ShieldHP 为 int,默认 0(值类型),用 -1 作哨兵值表示"未记录"→恢复满护盾 + if (d.Player.ShieldHP == 0 && !d.Player.ShieldIsBroken) + d.Player.ShieldHP = -1; // 旧存档没有护盾字段时恢复为满护盾 + return d; + } +} +``` + +--- + +## 6. 保存流程 + +``` +[玩家激活存档点] + ↓ SavePoint.Interact() + ↓ EVT_SavePointActivated.Raise(savePointId) + ← GameManager 订阅 + → GameManager 调用 SaveManager.SaveAsync(currentSlot) + → 遍历 _saveables,收集数据 + → 序列化 JSON + → 计算 Checksum + → ISaveStorage.WriteAsync(slot, json) + → 写入磁盘(async,不阻塞主线程) + → 更新 LastCheckpointScene / LastCheckpointSpawnId + → EVT_SaveIndicatorVisible.Raise(true) → HUD 显示保存中图标 + → (完成后)EVT_SaveIndicatorVisible.Raise(false) +``` + +--- + +## 7. 加载流程 + +``` +[游戏启动 / 选择存档槽] + ↓ GameManager.StartGame(slotIndex) + → SaveManager.LoadAsync(slotIndex) + → ISaveStorage.ReadAsync(slot) + → JsonConvert.DeserializeObject(json) + → ValidateChecksum → 失败则提示损坏 + → SaveMigrator.Migrate(data) + → 遍历 _saveables,调用 OnLoad(data) + ← PlayerStats.LoadSaveData(data.Player) + ← EquipmentManager.LoadSaveData(data.Equipment) + ← WorldStateRegistry.LoadSaveData(data.World) + ← QuestManager.LoadSaveData(data.Quests) + ← ... + → SceneLoader.LoadScene(data.Player.Scene, respawnId) + +[重生(死亡后)] + ↓ DeathScreenController.Respawn() + → 发送 SceneLoadRequest(IsRespawn = true) + → SceneLoader 加载最后存档场景 + → 各系统从缓存的 _current(内存中最后存档)恢复 + → 无需重新读取磁盘 +``` + +--- + +## 8. 存档路径与文件规范 + +| 平台 | 存档目录 | 文件名 | +|-----|---------|-------| +| Windows / Mac / Linux | `Application.persistentDataPath/saves/` | `save_0.json`、`save_1.json`、`save_2.json` | +| Steam 云存档 | SteamRemoteStorage(`ISteamRemoteStorage.FileWrite`) | 同文件名 | + +**设置文件**(独立于存档槽,全局唯一): +`Application.persistentDataPath/settings.json` +由 `SettingsManager` 管理,不经过 `SaveManager`。 + +**自动备份**:每次 `WriteAsync` 前将旧文件重命名为 `save_{slot}.bak`,提供一份备份。 + +--- + +## 9. EmergencySaveService 与 CrashReporter + +```csharp +// 路径: Assets/Scripts/Core/Save/EmergencySaveService.cs +// 定期自动保存到独立的紧急存档槽(不覆盖玩家主存档) +// 用途:游戏崩溃后可提示玩家恢复进度 +public class EmergencySaveService : MonoBehaviour +{ + private const int EmergencySlot = 99; // 独立槽,不显示在存档选择界面 + + [SerializeField] private float _intervalSeconds = 120f; // 每 2 分钟 + [SerializeField] private SaveManager _saveManager; + [SerializeField] private BoolEventChannelSO _onGameplayActive; // 仅 Gameplay 状态下才保存 + + private bool _gameplayActive; + private float _timer; + + private void OnEnable() => _onGameplayActive.OnEventRaised += v => _gameplayActive = v; + private void OnDisable() => _onGameplayActive.OnEventRaised -= v => _gameplayActive = v; + + private void Update() + { + if (!_gameplayActive) return; + _timer += Time.deltaTime; + if (_timer >= _intervalSeconds) + { + _timer = 0f; + // Fire-and-forget,不阻塞主线程 + _ = _saveManager.SaveAsync(EmergencySlot); + } + } + + // 判断是否存在未读的紧急存档(启动时检查) + public bool HasEmergencySave() => _saveManager.SlotExists(EmergencySlot); + + // 将紧急存档提升为指定主存档槽(玩家确认恢复后调用) + public async Task PromoteToSlot(int targetSlot) + { + var json = await ((LocalFileStorage)GetComponent()) + .ReadAsync(EmergencySlot); + // 写入目标槽,删除紧急槽 + await ((LocalFileStorage)GetComponent()).WriteAsync(targetSlot, json); + await ((LocalFileStorage)GetComponent()).DeleteAsync(EmergencySlot); + } +} + +// 路径: Assets/Scripts/Core/Save/CrashReporter.cs +// 监听 Application.quitting 与 Application.logMessageReceived +// 崩溃时触发紧急存档并写入诊断日志 +public class CrashReporter : MonoBehaviour +{ + [SerializeField] private SaveManager _saveManager; + [SerializeField] private EmergencySaveService _emergencyService; + + private bool _cleanExit; // OnApplicationQuit 正常退出时置 true + + private void OnEnable() + { + Application.logMessageReceived += OnLogMessage; + Application.quitting += OnCleanQuit; + } + + private void OnDisable() + { + Application.logMessageReceived -= OnLogMessage; + Application.quitting -= OnCleanQuit; + } + + private void OnCleanQuit() => _cleanExit = true; + + private void OnLogMessage(string condition, string stackTrace, LogType type) + { + if (type == LogType.Exception || type == LogType.Error) + { + WriteDiagnosticLog(condition, stackTrace); + } + } + + // 写入诊断日志文件(不含存档数据,仅 stacktrace + 时间戳) + private void WriteDiagnosticLog(string condition, string stackTrace) + { + var logPath = Path.Combine( + Application.persistentDataPath, + $"crash_{DateTime.UtcNow:yyyyMMdd_HHmmss}.log"); + + var content = $"[{DateTime.UtcNow:o}] {condition}\n{stackTrace}"; + File.WriteAllText(logPath, content); // 同步写,崩溃时 async 不可靠 + } + + // 程序退出前若为非正常退出则触发紧急存档 + private void OnApplicationPause(bool pauseStatus) + { + if (pauseStatus && !_cleanExit) + _ = _saveManager.SaveAsync(99); // EmergencySlot + } +} +``` + +### 紧急存档启动流程 + +``` +[游戏启动] + ↓ MainMenuController.Start() + → CrashReporter.HasEmergencySave() + → true: 显示"检测到上次异常退出,是否恢复进度?"对话框 + → 玩家确认: EmergencySaveService.PromoteToSlot(lastUsedSlot) + → 正常 LoadAsync(lastUsedSlot) + → 玩家拒绝: DeleteAsync(EmergencySlot) + → false: 正常主菜单流程 +``` + +--- + +## 10. SaveValidator — 写入前数据校验 + +> **Design 来源**:[31_SaveLoadSystem](../Design/31_SaveLoadSystem.md) §10 +> **P2 优化**:原 `Validate()` 同步执行 SHA256 + JSON 反序列化,大存档可阻塞主线程 >16ms。拆分为快速同步校验(字段范围检查)+ 异步完整性校验(SHA256 + 反序列化),加载时在后台线程运行。 + +```csharp +// 路径: Assets/Scripts/Save/SaveValidator.cs +namespace BaseGames.Save +{ + public static class SaveValidator + { + public readonly struct Result + { + public readonly bool IsValid; + public readonly string Error; + + public Result(bool isValid, string error = null) + { + IsValid = isValid; + Error = error; + } + } + + // ── 同步快速校验(SaveAsync 序列化前调用,< 1ms)────────────── + /// + /// 轻量字段校验,不涉及 IO 或加密运算,可安全在主线程调用。 + /// SaveManager.SaveAsync() 在序列化前调用此方法。 + /// + public static Result ValidateFields(SaveData data) + { + if (data.Player.CurrentHP < 0 || data.Player.CurrentHP > data.Player.MaxHP) + return new Result(false, $"HP 越界: {data.Player.CurrentHP}/{data.Player.MaxHP}"); + + if (data.Player.CurrentGeo < 0) + return new Result(false, $"Geo 为负值: {data.Player.CurrentGeo}"); + + if (string.IsNullOrEmpty(data.Player.Scene)) + return new Result(false, "场景名为空"); + + if (string.Compare(data.Meta.Version, SaveManager.MinCompatibleVersion, + StringComparison.Ordinal) < 0) + return new Result(false, $"存档版本过旧: {data.Meta.Version}"); + + return new Result(true); + } + + // ── 异步完整性校验(LoadAsync 加载后调用,后台线程)───────────── + /// + /// 包含 SHA256 校验和 + JSON 反序列化健壮性验证。 + /// 运行在后台线程(Task.Run),不阻塞主线程。 + /// SaveManager.LoadAsync() 在反序列化后、应用存档前调用此方法。 + /// + public static UniTask ValidateIntegrityAsync(string rawJson) + => UniTask.RunOnThreadPool(() => ValidateIntegrityInternal(rawJson)); + + private static Result ValidateIntegrityInternal(string rawJson) + { + try + { + // 1. 反序列化健壮性:确保 JSON 完整可解析 + var data = Newtonsoft.Json.JsonConvert.DeserializeObject(rawJson); + if (data == null) + return new Result(false, "JSON 反序列化结果为 null"); + + // 2. SHA256 校验和(保存时写入 data.Meta.Checksum) + if (!string.IsNullOrEmpty(data.Meta.Checksum)) + { + string computed = ComputeChecksum(rawJson, data.Meta.Checksum); + if (computed != data.Meta.Checksum) + return new Result(false, "SHA256 校验失败:存档数据可能被篡改"); + } + + return new Result(true); + } + catch (System.Exception ex) + { + return new Result(false, $"完整性校验异常: {ex.Message}"); + } + } + + /// + /// 计算 rawJson 去除 checksum 字段后的 SHA256 十六进制字符串。 + /// + internal static string ComputeChecksum(string rawJson, string existingChecksum = null) + { + // 移除 checksum 字段再计算,避免循环依赖 + var jo = Newtonsoft.Json.Linq.JObject.Parse(rawJson); + jo["Meta"]?["Checksum"]?.Parent?.Remove(); + var canonical = jo.ToString(Newtonsoft.Json.Formatting.None); + + using var sha = System.Security.Cryptography.SHA256.Create(); + var hash = sha.ComputeHash(System.Text.Encoding.UTF8.GetBytes(canonical)); + return System.BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant(); + } + } +} +``` + +**SaveManager 调用点**: + +```csharp +// SaveManager.SaveAsync() — 序列化前快速校验 +var fieldResult = SaveValidator.ValidateFields(data); +if (!fieldResult.IsValid) +{ + Debug.LogError($"[SaveManager] 存档数据非法,中止写入:{fieldResult.Error}"); + return; +} +// … 序列化 → 写入文件 … + +// SaveManager.LoadAsync() — 读取文件后异步完整性校验(不阻塞) +string rawJson = await storage.ReadAsync(slot); +var integrityResult = await SaveValidator.ValidateIntegrityAsync(rawJson); +if (!integrityResult.IsValid) +{ + Debug.LogError($"[SaveManager] 存档完整性校验失败:{integrityResult.Error}"); + // 降级:提示用户存档损坏,加载 BackupSave + return; +} +``` + +--- + +## 11. IDlcSaveExtension — DLC 存档扩展接口 + +> **Design 来源**:[31_SaveLoadSystem](../Design/31_SaveLoadSystem.md) §13 + +DLC 内容通过此接口挂载到 `SaveData.DLC`(`Dictionary`),与核心存档完全解耦。 + +```csharp +// 路径: Assets/Scripts/Save/IDlcSaveExtension.cs +public interface IDlcSaveExtension +{ + /// 唯一标识符,对应 SaveData.DLC 字典的键 + string DlcId { get; } + + /// 将 DLC 数据序列化写入 dlcData + void Serialize(ref JObject dlcData, SaveData fullData); + + /// 从 dlcData 读取并应用到游戏状态 + void Deserialize(JObject dlcData, SaveData fullData); + + /// 版本迁移,fromVersion 为旧存档版本号 + void MigrateIfNeeded(int fromVersion, ref JObject dlcData); + + /// NG+ 开始时重置 DLC 存档数据 + void OnNgPlusReset(ref JObject dlcData); +} +``` + +**SaveManager 集成**: + +```csharp +// SaveManager 内新增字段与注册方法 +private readonly List _dlcExtensions = new(); + +public void RegisterDlcExtension(IDlcSaveExtension ext) + => _dlcExtensions.Add(ext); + +// SaveAsync() 内调用: +foreach (var ext in _dlcExtensions) +{ + var dlcData = new JObject(); + ext.Serialize(ref dlcData, saveData); + saveData.DLC[ext.DlcId] = dlcData; +} + +// LoadAsync() 内调用: +foreach (var ext in _dlcExtensions) +{ + if (saveData.DLC.TryGetValue(ext.DlcId, out var dlcData)) + ext.Deserialize(dlcData, saveData); +} +``` + +--- + +## 10. SaveInspectorWindow — 运行时存档调试工具 + +> **痛点**:开发调试期间需要频繁查看/修改存档状态(如解锁所有能力、传送到指定场景、修改 HP/Geo)。若通过修改 JSON 文件来调试,需要:关游戏 → 找文件 → 编辑 → 重启,效率极低。`SaveInspectorWindow` 在 **Play Mode** 下提供实时存档数据浏览与热修改,减少调试迭代成本。 + +### 10.1 功能规格 + +| 功能 | 说明 | +|------|------| +| 实时显示 | 运行时读取 `SaveManager._current`(反射或接口)展示当前存档数据 | +| 分节折叠 | 按 Player / World / Achievements / EventChains / DLC 分节,各自可折叠 | +| 热写入 | 修改字段后点击 "应用" 按钮立即写入 `SaveManager._current` 并调用 `ISaveable.OnLoad` 广播 | +| 能力位掩码 | AbilityFlags 以复选框列表显示(每个 AbilityType 一个 Toggle),一键"解锁全部" | +| 快速存档/读档 | 一键 "立即存档(Slot 0)" / "立即读档(Slot 0)" 调用 `SaveManager.SaveAsync/LoadAsync` | +| 截图存档 | 将当前存档数据格式化为 JSON 并复制到剪贴板,方便粘贴到 Bug 报告 | +| 存档路径 | 显示当前平台存档目录路径,双击打开文件夹 | + +### 10.2 实现规范 + +```csharp +// 路径: Assets/Scripts/Editor/Save/SaveInspectorWindow.cs +// 程序集: BaseGames.Editor(Editor Only) +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; +using Newtonsoft.Json; + +namespace BaseGames.Editor.Save +{ + public class SaveInspectorWindow : EditorWindow + { + [MenuItem("BaseGames/Tools/Save Inspector")] + public static void Open() => GetWindow("存档检视器"); + + private Vector2 _scroll; + private bool _showPlayer = true; + private bool _showWorld = true; + private bool _showAch = false; + private bool _showChains = false; + + private void OnGUI() + { + if (!Application.isPlaying) + { + EditorGUILayout.HelpBox("仅在 Play Mode 下可用", MessageType.Warning); + return; + } + + var mgr = FindObjectOfType(); + if (mgr == null) + { + EditorGUILayout.HelpBox("场景中未找到 SaveManager", MessageType.Error); + return; + } + + DrawToolbar(mgr); + _scroll = EditorGUILayout.BeginScrollView(_scroll); + DrawPlayerSection(mgr); + DrawWorldSection(mgr); + DrawAchievementsSection(mgr); + DrawEventChainsSection(mgr); + EditorGUILayout.EndScrollView(); + } + + private void DrawToolbar(SaveManager mgr) + { + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); + + if (GUILayout.Button("💾 立即存档", EditorStyles.toolbarButton, GUILayout.Width(90))) + _ = mgr.SaveAsync(0); + + if (GUILayout.Button("📂 读取 Slot0", EditorStyles.toolbarButton, GUILayout.Width(90))) + _ = mgr.LoadAsync(0); + + if (GUILayout.Button("📋 复制 JSON", EditorStyles.toolbarButton, GUILayout.Width(90))) + { + var json = JsonConvert.SerializeObject(mgr.CurrentData, Formatting.Indented); + GUIUtility.systemCopyBuffer = json; + Debug.Log("[SaveInspector] 存档 JSON 已复制到剪贴板"); + } + + GUILayout.FlexibleSpace(); + if (GUILayout.Button("📁 存档目录", EditorStyles.toolbarButton, GUILayout.Width(80))) + EditorUtility.RevealInFinder( + System.IO.Path.Combine(Application.persistentDataPath, "saves")); + + EditorGUILayout.EndHorizontal(); + } + + private void DrawPlayerSection(SaveManager mgr) + { + _showPlayer = EditorGUILayout.Foldout(_showPlayer, "Player", true, EditorStyles.foldoutHeader); + if (!_showPlayer) return; + + var p = mgr.CurrentData?.Player; + if (p == null) { EditorGUILayout.LabelField("(无存档数据)"); return; } + + EditorGUI.indentLevel++; + p.CurrentHP = EditorGUILayout.IntField("Current HP", p.CurrentHP); + p.MaxHP = EditorGUILayout.IntField("Max HP", p.MaxHP); + p.CurrentGeo = EditorGUILayout.IntField("Geo", p.CurrentGeo); + p.Scene = EditorGUILayout.TextField("Scene", p.Scene); + p.ActiveFormId = EditorGUILayout.TextField("Form ID", p.ActiveFormId); + + EditorGUILayout.Space(4); + EditorGUILayout.LabelField("AbilityFlags", EditorStyles.boldLabel); + foreach (AbilityType ability in System.Enum.GetValues(typeof(AbilityType))) + { + if (ability == AbilityType.None) continue; + bool has = (p.AbilityFlags & (uint)ability) != 0; + bool newHas = EditorGUILayout.Toggle(ability.ToString(), has); + if (newHas != has) + p.AbilityFlags = newHas + ? p.AbilityFlags | (uint)ability + : p.AbilityFlags & ~(uint)ability; + } + if (GUILayout.Button("解锁全部能力")) + p.AbilityFlags = uint.MaxValue; + if (GUILayout.Button("重置全部能力")) + p.AbilityFlags = 0; + + EditorGUI.indentLevel--; + } + + private void DrawWorldSection(SaveManager mgr) + { + _showWorld = EditorGUILayout.Foldout(_showWorld, "World", true, EditorStyles.foldoutHeader); + if (!_showWorld) return; + var w = mgr.CurrentData?.World; + if (w == null) return; + EditorGUI.indentLevel++; + EditorGUILayout.LabelField($"已解锁地图节点数: {w.UnlockedMapNodes?.Count ?? 0}"); + EditorGUILayout.LabelField($"已开启传送点数: {w.OpenedTeleports?.Count ?? 0}"); + EditorGUILayout.LabelField($"已击败 Boss 数: {w.DefeatedBossIds?.Count ?? 0}"); + EditorGUI.indentLevel--; + } + + private void DrawAchievementsSection(SaveManager mgr) + { + _showAch = EditorGUILayout.Foldout(_showAch, "Achievements", true, EditorStyles.foldoutHeader); + if (!_showAch) return; + var ach = mgr.CurrentData?.Achievements; + if (ach == null) return; + EditorGUI.indentLevel++; + EditorGUILayout.LabelField($"已解锁: {ach.Unlocked?.Count ?? 0} 项"); + if (ach.Unlocked != null) + foreach (var id in ach.Unlocked) + EditorGUILayout.LabelField(" ✓ " + id); + EditorGUI.indentLevel--; + } + + private void DrawEventChainsSection(SaveManager mgr) + { + _showChains = EditorGUILayout.Foldout(_showChains, "EventChains / WorldFlags", + true, EditorStyles.foldoutHeader); + if (!_showChains) return; + var ec = mgr.CurrentData?.EventChains; + if (ec == null) return; + EditorGUI.indentLevel++; + EditorGUILayout.LabelField($"Chain 数: {ec.ChainStates?.Count ?? 0}"); + EditorGUILayout.LabelField($"WorldFlag 数: {ec.WorldFlags?.Count ?? 0}"); + EditorGUI.indentLevel--; + } + + // 每帧刷新(数据可能在游戏逻辑中被修改) + private void OnInspectorUpdate() => Repaint(); + } +} +#endif +``` + +> **注意**:`SaveManager` 需将 `_current` 暴露为只读属性 `public SaveData CurrentData => _current;` 以供 EditorWindow 访问。热修改后如需立即生效,可调用 `mgr.BroadcastLoad()`(向所有 `ISaveable` 广播 `OnLoad`,使游戏状态与修改后的 `_current` 保持一致)。 + diff --git a/Docs/Architecture/13_AssetPoolModule.md b/Docs/Architecture/13_AssetPoolModule.md new file mode 100644 index 0000000..dada749 --- /dev/null +++ b/Docs/Architecture/13_AssetPoolModule.md @@ -0,0 +1,1105 @@ +# 13 · 资源与对象池模块 + +> **命名空间** `BaseGames.Core.Pool`、`BaseGames.Core.Assets` +> **程序集** `BaseGames.Core` +> **路径** `Assets/Scripts/Core/Pool/`、`Assets/Scripts/Core/Assets/` +> **依赖** `UnityEngine.AddressableAssets`、`BaseGames.Core.Events` + +--- + +## 目录 + +1. [Addressables 工作流概述](#1-addressables-工作流概述) +2. [AddressKeys(地址常量)](#2-addresskeys) +3. [GlobalObjectPool](#3-globalobjectpool) +4. [PooledObject 组件](#4-pooledobject-组件) +5. [AssetLoader(运行时资产加载工具)](#5-assetloader) +6. [对象池预热(Warmup)流程](#6-对象池预热流程) +7. [Addressables 资产分组策略](#7-addressables-资产分组策略) +8. [AssetReleaseTracker](#8-assetreleasetracker) +9. [AddressKeyRegistry — 运行时动态注册](#9-addresskeyregistry--运行时动态注册) +10. [AddressKeyValidator — 构建前常量合法性校验](#10-addresskeyvalidator--构建前常量合法性校验) +11. [AddressReferenceGraphWindow — Addressables 依赖图工具](#11-addressreferencegraphwindow--addressables-依赖图工具) +12. [WarmupManifestSO — Addressables 预热策略](#12-warmupmanifestso--addressables-预热策略) + +--- + +## 1. Addressables 工作流概述 + +**核心原则**: +- **禁止使用 `Resources.Load`**,所有运行时加载通过 Addressables(包括 Prefab、ScriptableObject、Sprite、AudioClip) +- 禁止在代码中直接写地址字符串,统一使用 `AddressKeys` 常量类 +- 所有场景异步加载(`Addressables.LoadSceneAsync`) +- 场景切换后及时 `Addressables.Release` 卸载已卸载场景的资产 +- 武器 Prefab(`WPN_*`)在角色进入场景时预热,通过 `WeaponManager.EquipAsync` 异步装备 + +--- + +## 2. AddressKeys + +```csharp +// 路径: Assets/Scripts/Core/Assets/AddressKeys.cs +// 所有 Addressable 地址字符串的静态常量类 +// 与 Assets 的 Addressable 分配保持同步(Editor 自动验证工具,见下方) +// 命名规范:所有 const string 以类型前缀命名(Prefab / Scene / Label / Data),驼峰式,无下划线 +public static class AddressKeys +{ + // ── Scenes ────────────────────────────────────────────── + public const string ScenePersistent = "Scene_Persistent"; + public const string SceneMainMenu = "Scene_MainMenu"; + public const string SceneCrossroadsA = "Scene_ForgottenCrossroads_A"; + // ... 所有游戏场景 + + // ── Player ────────────────────────────────────────────── + public const string PrefabPlayer = "PLY_Player"; + + // ── Enemies ───────────────────────────────────────────── + public const string PrefabEnemyGrunt = "ENM_GruntWarrior"; + public const string PrefabEnemySkullArch = "ENM_SkullArcher"; + // ... 所有敌人 Prefab + + // ── Projectiles ───────────────────────────────────────── + public const string PrefabProjArrow = "PROJ_Arrow"; + public const string PrefabProjFireball = "PROJ_Fireball"; + public const string PrefabProjSoulBall = "PROJ_SoulBall"; + + // ── VFX ───────────────────────────────────────────────── + public const string PrefabVFXHitSpark = "VFX_HitSpark"; + public const string PrefabVFXBloodSplat = "VFX_BloodSplat"; + public const string PrefabVFXExplosion = "VFX_Explosion"; + + // ── UI ────────────────────────────────────────────────── + public const string PrefabUIFloatingDmgText = "UI_FloatingDamageText"; + + // ── Collectibles ──────────────────────────────────────── + public const string PrefabCollectibleGeo = "COL_Geo"; + public const string PrefabCollectibleHPOrb = "COL_HPOrb"; + + // ── Weapons ───────────────────────────────────────────── + // 命名规范: PrefabWeapon{Id} 对应 Assets/Prefabs/Weapons/WPN_*.prefab + public const string PrefabWeaponSkyBlade = "WPN_SkyBlade"; + public const string PrefabWeaponEarthClaw = "WPN_EarthClaw"; + public const string PrefabWeaponSoulStaff = "WPN_SoulStaff"; + // ... 其余武器按同一规范追加 + + // ── Config ScriptableObjects ───────────────────────────── + // SO 资产用 Addressables 的场景:SO 数量极多(100+)或 DLC 扩展内容 + // 大多数 SO 通过 Inspector 直接序列化,不走 Addressable + // 禁止通过 Resources.Load 加载,统一走 Addressables + public const string DataFootstepCatalog = "Config/FootstepCatalog"; + + // ── Audio ──────────────────────────────────────────────── + // (AudioClip 通过 AudioEventSO 内嵌引用,不需要 Addressable key) + + // ── Labels(用于 Addressables.LoadAssetsAsync 批量加载)─── + public const string LabelEnemy = "Enemy"; + public const string LabelPoolable = "Poolable"; + public const string LabelBGM = "BGM"; + public const string LabelCharms = "Charms"; +} +``` + +--- + +## 3. GlobalObjectPool + +> **架构改进(2026-05)**:原 SpawnInternal 在池空时同步 `Instantiate`,且每次 Spawn/Despawn 都通过 `GetComponent()` 查询;`MaxCount` 字段虽已声明但从未强制执行。以下版本修复这三个问题: +> 1. **缓存 PooledObject 引用**:Warmup 和 Instantiate 时就存入辅助字典,Spawn/Despawn 不再 GetComponent +> 2. **MaxCount 强制执行**:Despawn 时若存活总数超过上限,Destroy 而非入队;Spawn 池空时若已达上限,回收最近最少使用(LRU)的活跃对象 +> 3. **异步后台补池**:同步 Instantiate 后立即触发后台 UniTask 补足到 `InitialCount`,避免后续 Spawn 仍走同步路径 + +```csharp +// 路径: Assets/Scripts/Core/Pool/GlobalObjectPool.cs +[DefaultExecutionOrder(-800)] +public class GlobalObjectPool : MonoBehaviour +{ + // 单例(Persistent 场景内) + public static GlobalObjectPool Instance { get; private set; } + + [System.Serializable] + public struct PoolConfig + { + public string AddressKey; // AddressKeys 常量 + public int InitialCount; + public int MaxCount; // 0 = 无上限;> 0 强制限制池中 + 活跃对象总数 + } + + [SerializeField] private PoolConfig[] _warmupConfigs; + + // key = AddressKeys 常量, value = 空闲队列 + private readonly Dictionary> _pools = new(); + // key = addressKey, value = 活跃中的对象列表(按 Spawn 时间先后排序,用于 LRU 回收) + private readonly Dictionary> _alive = new(); + private readonly Dictionary _prefabCache = new(); + private readonly Dictionary _maxCounts = new(); + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + } + + // ── 预热(场景加载完成后调用)──────────────────────────────────── + public async Task WarmupAsync() + { + foreach (var cfg in _warmupConfigs) + { + _maxCounts[cfg.AddressKey] = cfg.MaxCount; + await WarmupSingleAsync(cfg.AddressKey, cfg.InitialCount); + } + } + + private async Task WarmupSingleAsync(string addressKey, int count) + { + var prefab = await Addressables.LoadAssetAsync(addressKey).Task; + _prefabCache[addressKey] = prefab; + + if (!_pools.ContainsKey(addressKey)) _pools[addressKey] = new Queue(count); + if (!_alive.ContainsKey(addressKey)) _alive[addressKey] = new List(); + + for (int i = 0; i < count; i++) + { + var go = Instantiate(prefab); + var po = go.GetComponent(); + po?.Setup(addressKey, this); + go.SetActive(false); + _pools[addressKey].Enqueue(po); // 直接存 PooledObject,Spawn 时无需 GetComponent + } + } + + // ── 取出 ───────────────────────────────────────────────────────── + public T Spawn(string addressKey, Vector3 position, Quaternion rotation) where T : Component + { + var po = SpawnInternal(addressKey, position, rotation); + return po?.GetComponentCached(); // PooledObject 可缓存常用 Component,减少 GetComponent + } + + public GameObject Spawn(string addressKey, Vector3 position, Quaternion rotation) + => SpawnInternal(addressKey, position, rotation)?.gameObject; + + private PooledObject SpawnInternal(string addressKey, Vector3 pos, Quaternion rot) + { + if (!_pools.TryGetValue(addressKey, out var queue)) + { + Debug.LogError($"[ObjectPool] {addressKey} not warmed up!"); + return null; + } + + PooledObject po; + + if (queue.Count > 0) + { + po = queue.Dequeue(); + } + else + { + // 池空处理:优先检查 MaxCount 上限 + int maxCount = _maxCounts.GetValueOrDefault(addressKey, 0); + var aliveList = GetAliveList(addressKey); + + if (maxCount > 0 && aliveList.Count >= maxCount) + { + // 已达上限:回收最早 Spawn 的活跃对象(LRU) + po = aliveList[0]; + aliveList.RemoveAt(0); + po.ForceReturnToPool(); // PooledObject 调用 OnDespawn + SetActive(false) + Debug.LogWarning($"[ObjectPool] {addressKey} at MaxCount={maxCount}, recycling oldest."); + } + else + { + // 未达上限(或无上限):同步实例化一个,并触发后台补池 + if (!_prefabCache.TryGetValue(addressKey, out var pfx)) + { + Debug.LogError($"[ObjectPool] {addressKey} prefab not cached!"); + return null; + } + var go = Instantiate(pfx); + po = go.GetComponent(); + po?.Setup(addressKey, this); + // 异步后台补池(不阻塞当前帧) + BackgroundRefillAsync(addressKey, 1).Forget(); + } + } + + var t = po.transform; + t.SetPositionAndRotation(pos, rot); + po.gameObject.SetActive(true); + po.OnSpawn(); // 直接调用,已缓存引用,无 GetComponent + + GetAliveList(addressKey).Add(po); + return po; + } + + // ── 归还 ───────────────────────────────────────────────────────── + public void Despawn(string addressKey, PooledObject po) + { + int maxCount = _maxCounts.GetValueOrDefault(addressKey, 0); + int queueSize = _pools.TryGetValue(addressKey, out var queue) ? queue.Count : 0; + var aliveList = GetAliveList(addressKey); + + aliveList.Remove(po); + po.gameObject.SetActive(false); + po.OnDespawn(); // 直接调用,已缓存引用 + + // 超过 MaxCount(池中空闲 + 活跃)时销毁而非入队 + if (maxCount > 0 && queueSize + aliveList.Count >= maxCount) + { + Destroy(po.gameObject); + return; + } + + if (queue == null) { _pools[addressKey] = queue = new Queue(); } + queue.Enqueue(po); + } + + // ── 后台补池(UniTask,不阻塞主线程)──────────────────────────── + private async UniTaskVoid BackgroundRefillAsync(string addressKey, int count) + { + if (!_prefabCache.TryGetValue(addressKey, out var pfx)) yield break; + // 分帧实例化,避免单帧 GC 峰值 + for (int i = 0; i < count; i++) + { + await UniTask.Yield(PlayerLoopTiming.LastUpdate); + var go = Instantiate(pfx); + var po = go.GetComponent(); + po?.Setup(addressKey, this); + go.SetActive(false); + if (_pools.TryGetValue(addressKey, out var q)) q.Enqueue(po); + } + } + + // ── 清空(场景卸载时)──────────────────────────────────────────── + public void ClearPool(string addressKey) + { + if (_pools.TryGetValue(addressKey, out var queue)) + { + while (queue.Count > 0) + { + var po = queue.Dequeue(); + if (po != null) Destroy(po.gameObject); + } + _pools.Remove(addressKey); + } + _alive.Remove(addressKey); + if (_prefabCache.TryGetValue(addressKey, out var pfx)) + { + Addressables.Release(pfx); + _prefabCache.Remove(addressKey); + } + } + + private List GetAliveList(string addressKey) + { + if (!_alive.TryGetValue(addressKey, out var list)) + _alive[addressKey] = list = new List(); + return list; + } +} +``` + +--- + +## 4. PooledObject 组件 + +```csharp +// 路径: Assets/Scripts/Core/Pool/PooledObject.cs +// 挂在每个可池化 Prefab 根节点上 +public class PooledObject : MonoBehaviour +{ + public string AddressKey { get; private set; } + private GlobalObjectPool _pool; + + public void Setup(string key, GlobalObjectPool pool) + { + AddressKey = key; + _pool = pool; + } + + // 子类/组件可覆盖(实现 IPoolable 接口) + public virtual void OnSpawn() { } + public virtual void OnDespawn(){ } + + // 便利方法:自归还 + public void ReturnToPool() => _pool?.Despawn(AddressKey, this); + + // LRU 强制回收(由 GlobalObjectPool 在 MaxCount 限制触发,不应由业务代码调用) + internal void ForceReturnToPool() + { + OnDespawn(); + gameObject.SetActive(false); + } + + // 延迟归还 + public void ReturnToPoolDelayed(float delay) => StartCoroutine(DelayedReturn(delay)); + private IEnumerator DelayedReturn(float delay) + { + yield return new WaitForSeconds(delay); + ReturnToPool(); + } + + // 缓存常用组件(业务可在 Setup 时调用 CacheComponent,后续通过 GetComponentCached 避免 GetComponent) + private readonly Dictionary _componentCache = new(); + public T GetComponentCached() where T : Component + { + if (!_componentCache.TryGetValue(typeof(T), out var cached)) + _componentCache[typeof(T)] = cached = GetComponent(); + return (T)cached; + } +} +``` + +--- + +## 5. AssetLoader + +```csharp +// 路径: Assets/Scripts/Core/Assets/AssetLoader.cs +// 通用异步资产加载工具(非 Prefab 资产:SO、Sprite、AudioClip 等) +public static class AssetLoader +{ + private static readonly Dictionary _handles = new(); + + public static async Task LoadAsync(string addressKey) where T : UnityEngine.Object + { + if (_handles.TryGetValue(addressKey, out var existing) && existing.IsValid()) + return (T)existing.Result; + + var handle = Addressables.LoadAssetAsync(addressKey); + _handles[addressKey] = handle; + return await handle.Task; + } + + // UniTask 版本(推荐用于需要 CancellationToken 的场景) + public static async UniTask LoadAsync(string addressKey, CancellationToken ct) + where T : UnityEngine.Object + { + if (_handles.TryGetValue(addressKey, out var existing) && existing.IsValid()) + return (T)existing.Result; + + var handle = Addressables.LoadAssetAsync(addressKey); + _handles[addressKey] = handle; + return await handle.WithCancellation(ct); // Cysharp.Threading.Tasks UniTask 扩展 + } + + public static void Release(string addressKey) + { + if (_handles.TryGetValue(addressKey, out var handle) && handle.IsValid()) + { + Addressables.Release(handle); + _handles.Remove(addressKey); + } + } + + public static void ReleaseAll() + { + foreach (var h in _handles.Values) + if (h.IsValid()) Addressables.Release(h); + _handles.Clear(); + } +} +``` + +--- + +## 6. 对象池预热流程 + +``` +[SceneLoader.LoadSceneCoroutine 步骤 4] + → GlobalObjectPool.Instance.WarmupAsync() + → 遍历 _warmupConfigs 数组 + → 对每项:Addressables.LoadAssetAsync(key) + → Instantiate × InitialCount + → go.SetActive(false) → 入队 + → 完成后:SceneLoader 继续后续步骤(加载进度 60% → 90%) +``` + +**预热配置约定**(`_warmupConfigs` 数组在 Inspector 配置): + +| AddressKey | InitialCount | MaxCount | +|-----------|:---:|:---:| +| `VFX_HitSpark` | 20 | 40 | +| `VFX_BloodSplat` | 10 | 20 | +| `VFX_Explosion` | 5 | 10 | +| `PROJ_Arrow` | 10 | 30 | +| `PROJ_SoulBall` | 8 | 20 | +| `COL_Geo` | 30 | 60 | +| `COL_HPOrb` | 10 | 20 | +| `UI_FloatingDamageText` | 15 | 30 | +| `ENM_GruntWarrior` | 5 | 10 | + +--- + +## 7. Addressables 资产分组策略 + +| 分组名 | 内容 | Bundle 模式 | 加载时机 | +|--------|------|------------|---------| +| `Default_LocalGroup` | 核心启动资产(Persistent 场景、InputReaderSO 等)| Pack Together | 游戏启动时常驻 | +| `UI` | 所有 UI Prefab 和 Sprite | Pack Together | 启动时预加载 | +| `Enemies_Poolable` | 所有可池化敌人 Prefab | Pack Together | 进入区域前预加载 | +| `Bosses` | Boss Prefab | Pack Separately | Boss 战开始前加载 | +| `VFX_Poolable` | 所有 VFX 粒子 Prefab | Pack Together | 游戏启动时全量预热 | +| `Projectiles_Poolable` | 弹射物 Prefab | Pack Together | 游戏启动时全量预热 | +| `Scene_{RegionName}` | 区域内场景、敌人、道具 Prefab | Pack Separately | 进入对应区域时加载 | +| `Audio_BGM` | BGM AudioClip | Pack Separately | Streaming,按区域切换 | +| `Audio_SFX` | 所有 SFX AudioClip | Pack Together | 压缩后常驻 | +| `Data_Charms` | CharmSO(数量极多时走 Addressable 路线)| Pack Together | 按需批量加载 | + +**Bundle 模式说明**: +- `Pack Together`:同类小资产批量打包,减少请求数 +- `Pack Separately`:大资产(场景、BGM)各自独立包,按需加载 + +--- + +## 8. AssetReleaseTracker + +```csharp +// 路径: Assets/Scripts/Core/Assets/AssetReleaseTracker.cs +// 场景卸载时自动释放对应的 Addressable 资产和对象池 +public class AssetReleaseTracker : MonoBehaviour +{ + [Header("Event Channels")] + [SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; + + private string _lastLoadedScene; + + private void OnEnable() + => _onSceneLoadRequest.OnEventRaised += OnSceneLoadRequested; + private void OnDisable() + => _onSceneLoadRequest.OnEventRaised -= OnSceneLoadRequested; + + private void OnSceneLoadRequested(SceneLoadRequest req) + { + if (!string.IsNullOrEmpty(_lastLoadedScene)) + { + // 清除旧场景的敌人/VFX 对象池 + GlobalObjectPool.Instance.ClearPool(AddressKeys.PrefabEnemyGrunt); + // ... 其他场景对象 + } + _lastLoadedScene = req.SceneName; + } +} +``` + +--- + +## 9. AddressKeyRegistry — 运行时动态注册 + +> **痛点**:`AddressKeys` 是纯静态常量类,无法在运行时注册新的地址键——DLC 内容或模组扩展时,新 Prefab 的地址字符串只能硬编码或通过外部 JSON 注入,导致对象池无法热扩展。 +> +> `AddressKeyRegistry` 在静态常量之上提供一个运行时注册层,同时保持对已有代码的完全向后兼容(`AddressKeys.*` 常量仍是首选)。 + +```csharp +// 路径: Assets/Scripts/Core/Assets/AddressKeyRegistry.cs +// 命名空间: BaseGames.Core.Assets +// 运行时 Key 注册表(对 AddressKeys 静态常量的补充,不替代) +public class AddressKeyRegistry : MonoBehaviour +{ + public static AddressKeyRegistry Instance { get; private set; } + + // 运行时注册的 key → Addressable 地址映射 + // (静态常量中 key == address,此表支持别名映射) + private readonly Dictionary _registered = new(); + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + } + + /// + /// 注册一个运行时 key(如 DLC 内容)。 + /// key 不得与 AddressKeys 静态常量冲突(由 RegisterSafe 检查)。 + /// + public bool TryRegister(string key, string addressableAddress) + { + if (_registered.ContainsKey(key)) + { + Debug.LogWarning($"[AddressKeyRegistry] Key '{key}' already registered."); + return false; + } + _registered[key] = addressableAddress; + return true; + } + + /// 解析 key 到实际的 Addressable 地址。静态常量 key 原样返回。 + public string Resolve(string key) + => _registered.TryGetValue(key, out var addr) ? addr : key; + + /// 判断 key 是否已注册(静态常量或运行时注册均算) + public bool IsKnown(string key) + => _registered.ContainsKey(key) || IsStaticKey(key); + + // ── DLC 内容注册示例(由 DLC 包在 SceneLoaded 后调用)──────────── + // AddressKeyRegistry.Instance.TryRegister("DLC1_PrefabBossWraith", "dlc1/ENM_BossWraith"); + // GlobalObjectPool.Instance.AddressKey = Resolve(key) 即可透明接入对象池预热 + + // ── Editor Only:验证注册 key 不与静态常量冲突 ──────────────────── + private static bool IsStaticKey(string key) + { + // 反射 AddressKeys 常量字段(仅 Editor / 开发版使用,Release Build 可裁剪) +#if UNITY_EDITOR || DEVELOPMENT_BUILD + return typeof(AddressKeys).GetFields( + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static) + .Any(f => f.IsLiteral && (string)f.GetRawConstantValue() == key); +#else + return false; +#endif + } +} +``` + +**GlobalObjectPool 集成**(透明支持 Registry):在 `WarmupSingleAsync` 和 `SpawnInternal` 中将原始 `addressKey` 先经过 `AddressKeyRegistry.Instance?.Resolve(addressKey) ?? addressKey` 转换为真实 Addressable 地址,其余逻辑不变。 + +--- + +## 10. AddressKeyValidator — 构建前常量合法性校验 + +> **路径**:`Assets/Editor/Assets/AddressKeyValidator.cs`(Editor-only,不进入 Runtime) +> **目标**:防止 `AddressKeys` 常量与实际 Addressable Labels 脱节,运行时才发现 Key 失效。 + +### 触发时机 + +| 时机 | 触发方式 | 说明 | +|------|---------|------| +| 打包前 | `IPreprocessBuildWithReport` | 正式 Build 自动运行,校验失败则中断出包 | +| 资产导入后 | `AssetPostprocessor.OnPostprocessAllAssets` | 仅当 Addressable 分组 `.asset` 被修改时触发 | +| 菜单手动 | `Tools > Validate AddressKeys` | 开发中随时按需运行 | + +```csharp +// 路径: Assets/Editor/Assets/AddressKeyValidator.cs +using UnityEditor; +using UnityEditor.AddressableAssets; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; +using System.Collections.Generic; +using System.Reflection; + +public class AddressKeyValidator : IPreprocessBuildWithReport +{ + public int callbackOrder => 0; + + public void OnPreprocessBuild(BuildReport report) + { + var errors = Validate(); + if (errors.Count > 0) + throw new BuildFailedException( + $"[AddressKeyValidator] {errors.Count} 个 AddressKey 无效,构建中止:\n" + + string.Join("\n", errors)); + } + + // 菜单入口 + [MenuItem("Tools/Validate AddressKeys")] + public static void ValidateMenu() + { + var errors = Validate(); + if (errors.Count == 0) + UnityEngine.Debug.Log("[AddressKeyValidator] ✅ 所有 AddressKey 均有效。"); + else + UnityEngine.Debug.LogError( + $"[AddressKeyValidator] ❌ 发现 {errors.Count} 个失效 Key:\n" + + string.Join("\n", errors)); + } + + private static List Validate() + { + // ── 1. 收集实际 Addressable 地址 ───────────────────────────── + var settings = AddressableAssetSettingsDefaultObject.Settings; + var validAddresses = new HashSet(); + foreach (var group in settings.groups) + foreach (var entry in group.entries) + validAddresses.Add(entry.address); + + // ── 2. 反射 AddressKeys 所有 public const string 字段 ──────── + var errors = new List(); + var fields = typeof(AddressKeys) + .GetFields(BindingFlags.Public | BindingFlags.Static) + .Where(f => f.IsLiteral && f.FieldType == typeof(string)); + + foreach (var field in fields) + { + var key = (string)field.GetRawConstantValue(); + if (!validAddresses.Contains(key)) + errors.Add($" AddressKeys.{field.Name} = \"{key}\" → 在 Addressable 中未找到"); + } + + return errors; + } +} + +/// 资产导入后检查(仅当 Addressable 分组文件变更时) +public class AddressKeyImportWatcher : AssetPostprocessor +{ + static void OnPostprocessAllAssets( + string[] imported, string[] deleted, string[] moved, string[] movedFrom) + { + bool affectsAddressables = System.Array.Exists(imported, + p => p.Contains("AddressableAssetSettings") || p.Contains("AssetGroups")); + if (affectsAddressables) + AddressKeyValidator.ValidateMenu(); + } +} +``` + +**使用流程**: +1. 新增/重命名 Addressable 条目后 → 同步更新 `AddressKeys` 常量 +2. 若忘记同步 → 资产导入时控制台自动报 ❌,不会等到运行时崩溃 +3. 打包时若有失效 Key → `BuildFailedException` 阻断出包,保护 Release 质量 + +--- + +## 11. AddressReferenceGraphWindow — Addressables 依赖图工具 + +> **P3 优化**:项目中 `AddressKeys` 常量越来越多,部分 Key 在重构后可能已无使用者(孤儿 Key),但不报错也不被 Validator 检测。本工具扫描全代码库,构建 **Key → 使用方** 反向图,高亮孤儿 Key,辅助清理无效资产引用。 + +### 11.1 功能规格 + +| 功能 | 说明 | +|------|------| +| **全量扫描** | 扫描所有 `.cs` 文件(排除 `Library/`、`Packages/`),找出 `AddressKeys.XXX` 使用点 | +| **图节点** | 每个 `AddressKeys` 常量字段 = 一个节点;被引用的 MonoBehaviour / SO 名 = 边 | +| **孤儿检测** | 引用计数 = 0 的 Key 标红;只有 1 处引用的 Key 标黄 | +| **快速定位** | 双击节点 → `EditorGUIUtility.PingObject()` 高亮 Project 中对应 .cs 文件 | +| **导出报告** | 点击 "导出 CSV" → 输出 `AddressKeys使用报告.csv` 到项目根目录 | + +### 11.2 实现规范 + +```csharp +// 路径: Assets/Editor/Assets/AddressReferenceGraphWindow.cs +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; + +namespace BaseGames.Editor.Assets +{ + public class AddressReferenceGraphWindow : EditorWindow + { + [MenuItem("BaseGames/Tools/Asset Reference Graph")] + public static void Open() => GetWindow("资产引用图"); + + // ── 数据模型 ────────────────────────────────────────────────────── + private struct KeyNode + { + public string ConstName; // e.g. "VFX_HitSpark" + public string FullKey; // AddressKeys 中对应的字符串值(如 "VFX/HitSpark") + public List UsedBy; // 使用此 Key 的文件名列表 + } + + private List _nodes = new(); + private Vector2 _scroll; + private bool _scanning = false; + private string _filterText = ""; + private bool _orphanOnly = false; + + private static readonly Color ColOrphan = new(1f, 0.3f, 0.3f, 1f); + private static readonly Color ColSingle = new(1f, 0.85f, 0.2f, 1f); + private static readonly Color ColNormal = new(0.8f, 1f, 0.8f, 1f); + + // ── GUI ────────────────────────────────────────────────────────── + private void OnGUI() + { + DrawToolbar(); + if (_nodes.Count == 0) + { + EditorGUILayout.HelpBox("点击 「扫描」 开始分析 AddressKeys 使用情况。", + MessageType.Info); + return; + } + DrawNodeList(); + } + + private void DrawToolbar() + { + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); + if (GUILayout.Button("扫描", EditorStyles.toolbarButton, GUILayout.Width(48))) + Scan(); + GUILayout.Label("过滤:", GUILayout.Width(36)); + _filterText = EditorGUILayout.TextField(_filterText, GUILayout.Width(180)); + _orphanOnly = GUILayout.Toggle(_orphanOnly, "仅显示孤儿 Key", + EditorStyles.toolbarButton, GUILayout.Width(100)); + GUILayout.FlexibleSpace(); + if (_nodes.Count > 0) + { + GUILayout.Label($"共 {_nodes.Count} 个 Key | " + + $"🔴 孤儿 {_nodes.Count(n => n.UsedBy.Count == 0)} " + + $"🟡 单引用 {_nodes.Count(n => n.UsedBy.Count == 1)}", + EditorStyles.toolbarLabel); + } + if (GUILayout.Button("导出 CSV", EditorStyles.toolbarButton, GUILayout.Width(68))) + ExportCsv(); + EditorGUILayout.EndHorizontal(); + } + + private void DrawNodeList() + { + _scroll = EditorGUILayout.BeginScrollView(_scroll); + foreach (var node in _nodes) + { + if (!string.IsNullOrEmpty(_filterText) && + !node.ConstName.Contains(_filterText, System.StringComparison.OrdinalIgnoreCase)) + continue; + if (_orphanOnly && node.UsedBy.Count > 0) + continue; + + Color col = node.UsedBy.Count == 0 ? ColOrphan + : node.UsedBy.Count == 1 ? ColSingle + : ColNormal; + + EditorGUILayout.BeginHorizontal(); + var labelStyle = new GUIStyle(EditorStyles.label) + { normal = { textColor = col }, fontStyle = FontStyle.Bold }; + GUILayout.Label($" {node.ConstName}", labelStyle, GUILayout.Width(260)); + GUILayout.Label($"引用: {node.UsedBy.Count}", + EditorStyles.miniLabel, GUILayout.Width(56)); + + if (node.UsedBy.Count > 0) + GUILayout.Label(string.Join(", ", node.UsedBy.Take(3)) + + (node.UsedBy.Count > 3 ? $" +{node.UsedBy.Count - 3}" : ""), + EditorStyles.miniLabel); + EditorGUILayout.EndHorizontal(); + } + EditorGUILayout.EndScrollView(); + } + + // ── 扫描逻辑 ────────────────────────────────────────────────────── + private void Scan() + { + _nodes.Clear(); + + // 1. 反射获取 AddressKeys 所有 const string 字段 + var addressKeysType = System.Type.GetType( + "BaseGames.Assets.AddressKeys, Assembly-CSharp"); + if (addressKeysType == null) + { + Debug.LogError("[AssetRefGraph] 未找到 AddressKeys 类型,请确认命名空间正确。"); + return; + } + + var fields = addressKeysType.GetFields( + System.Reflection.BindingFlags.Public | + System.Reflection.BindingFlags.Static) + .Where(f => f.IsLiteral && f.FieldType == typeof(string)) + .ToList(); + + // 2. 扫描 Assets/Scripts 下所有 .cs 文件 + var csFiles = Directory.GetFiles( + Path.Combine(Application.dataPath, "Scripts"), + "*.cs", SearchOption.AllDirectories); + + // 按文件缓存文本(避免重复读) + var fileTexts = csFiles.ToDictionary(f => f, File.ReadAllText); + + // 3. 构建引用图 + foreach (var field in fields) + { + var constName = field.Name; + var node = new KeyNode + { + ConstName = constName, + FullKey = (string)field.GetRawConstantValue(), + UsedBy = new List() + }; + + var pattern = new Regex($@"\bAddressKeys\.{Regex.Escape(constName)}\b"); + foreach (var (filePath, text) in fileTexts) + { + if (pattern.IsMatch(text)) + node.UsedBy.Add(Path.GetFileNameWithoutExtension(filePath)); + } + + _nodes.Add(node); + } + + // 4. 按引用数升序(孤儿在最前) + _nodes.Sort((a, b) => a.UsedBy.Count.CompareTo(b.UsedBy.Count)); + Repaint(); + + Debug.Log($"[AssetRefGraph] 扫描完成:{_nodes.Count} 个 Key," + + $"{_nodes.Count(n => n.UsedBy.Count == 0)} 个孤儿 Key。"); + } + + // ── CSV 导出 ────────────────────────────────────────────────────── + private void ExportCsv() + { + if (_nodes.Count == 0) { Debug.LogWarning("请先扫描。"); return; } + + var sb = new System.Text.StringBuilder(); + sb.AppendLine("ConstName,FullKey,ReferenceCount,UsedBy"); + foreach (var n in _nodes) + sb.AppendLine($"{n.ConstName},{n.FullKey},{n.UsedBy.Count}," + + $"\"{string.Join("|", n.UsedBy)}\""); + + string path = Path.Combine( + Path.GetDirectoryName(Application.dataPath)!, + "AddressKeys使用报告.csv"); + File.WriteAllText(path, sb.ToString(), System.Text.Encoding.UTF8); + Debug.Log($"[AssetRefGraph] CSV 已导出到:{path}"); + EditorUtility.RevealInFinder(path); + } + } +} +#endif +``` + +**孤儿 Key 处理决策**: + +| 引用数 | 显示颜色 | 建议操作 | +|--------|----------|----------| +| 0(孤儿)| 🔴 红色 | 确认后从 `AddressKeys` 和 Addressable Groups 中删除 | +| 1 | 🟡 黄色 | 确认是否仅测试代码引用;若是,评估是否保留 | +| ≥ 2 | 🟢 绿色 | 正常,无需处理 | + +--- + +## 12. WarmupManifestSO — Addressables 预热策略 + +> **P1 优化**:当前对象池没有集中化预热配置,进入新场景则运行时临时担贿 +> Addressables 异步加载 + 首张 Instantiate 的单帧卡顿。 +> `WarmupManifestSO` 将预热列表外化为每个场景可配置的资产,由 `SceneService` +> 在加载场景的 Loading 阶段自动分帧预热,消除入场卡顿。 +> +> **交叉引用**:`SceneService.LoadSceneAsync()`(规范见 `03_CoreModule.md §13`)内调用: +> `await ServiceLocator.Get().WarmupFromManifestAsync(_warmupManifest, ct);` + +### 12.1 数据结构 + +```csharp +// 路径: Assets/Scripts/Core/Pool/WarmupManifestSO.cs +[CreateAssetMenu(menuName = "Core/Pool/Warmup Manifest")] +public class WarmupManifestSO : ScriptableObject +{ + [System.Serializable] + public struct WarmupEntry + { + [Tooltip("Addressable 地址,对应 AddressKeys 中的常量字符串")] + public string AddressKey; // 如 AddressKeys.ENEMY_CRAWLER + + [Tooltip("初始预热数量(对象池内初始容量)")] + public int InitialCount; // 如 3 + + [Tooltip("分类,可用于过滤或分层加载")] + public WarmupCategory Category; + } + + public enum WarmupCategory + { + Enemy = 0, + Projectile = 1, + VFX = 2, + UI = 3, + Other = 99, + } + + [Header("预热列表")] + public WarmupEntry[] Entries; + + [Header("帧预算(每帧最多预热实例数量)")] + [Range(1, 20)] + public int InstancesPerFrame = 5; // 默认每帧预热 5 个,拟地阶段是 30 帧内完成 +} +``` + +### 12.2 场景专用 Manifest 示例 + +``` +Assets/Data/Pool/Warmup/ +├── Global_Warmup.asset ← 全局常住(玩家子弹、核心 VFX,每个场景均需要) +├── Crossroads_Warmup.asset ← 十字路场景的所有敌人 + Boss +├── ForgottenHollow_Warmup.asset +└── TitleScreen_Warmup.asset ← UI 元素,革底冲債脚本展示用 + +# Crossroads_Warmup.asset 内容示例 +# Entries: +# - AddressKey: ENEMY_CRAWLER InitialCount: 4 Category: Enemy +# - AddressKey: ENEMY_SHIELDER InitialCount: 2 Category: Enemy +# - AddressKey: PROJ_SPIT InitialCount: 8 Category: Projectile +# - AddressKey: VFX_HIT_LIGHT InitialCount: 6 Category: VFX +``` + +### 12.3 GlobalObjectPool.WarmupFromManifestAsync + +```csharp +// GlobalObjectPool.cs — 新增方法 +public async UniTask WarmupFromManifestAsync(WarmupManifestSO manifest, + CancellationToken ct) +{ + if (manifest == null) return; + + int frameCounter = 0; + + foreach (var entry in manifest.Entries) + { + for (int i = 0; i < entry.InitialCount; i++) + { + ct.ThrowIfCancellationRequested(); + + // 预加载并将实例放回池(不激活) + await PrewarmOneAsync(entry.AddressKey, ct); + + frameCounter++; + if (frameCounter >= manifest.InstancesPerFrame) + { + frameCounter = 0; + await UniTask.Yield(PlayerLoopTiming.LastUpdate, ct); // 让出当前帧 + } + } + } +} + +private async UniTask PrewarmOneAsync(string addressKey, CancellationToken ct) +{ + // 1. 异步加载 Prefab + var prefab = await Addressables.LoadAssetAsync(addressKey) + .ToUniTask(cancellationToken: ct); + + // 2. Instantiate,不激活 + var go = Object.Instantiate(prefab); + go.SetActive(false); + + // 3. 注册到内部字典(等待请求时直接取出) + if (!_pools.ContainsKey(addressKey)) + _pools[addressKey] = new Stack(); + _pools[addressKey].Push(go); +} +``` + +### 12.4 SceneService 集成 + +```csharp +// SceneService.cs — LoadSceneAsync 内的预热阶段(见 03_CoreModule.md §13) +// SceneService 的场景 manifest 映射通过 Inspector 配置: + +[Header("预热 Manifest 映射")] +[SerializeField] private WarmupManifestSO _globalManifest; // 常驻预热 +[SerializeField] private SceneWarmupMapSO _sceneWarmupMap; // 场景 → Manifest 映射 + +// LoadSceneAsync 内预热项(在进度条用5%-95%阶段执行) +var pool = ServiceLocator.Get(); +if (_globalManifest != null) await pool.WarmupFromManifestAsync(_globalManifest, ct); +if (_sceneWarmupMap != null) +{ + var sceneManifest = _sceneWarmupMap.Get(sceneAddress); + if (sceneManifest != null) await pool.WarmupFromManifestAsync(sceneManifest, ct); +} +``` + +**`SceneWarmupMapSO`**:场景地址 → `WarmupManifestSO` 的字典包装,简单 SO: + +```csharp +// Assets/Scripts/Core/Pool/SceneWarmupMapSO.cs +[CreateAssetMenu(menuName = "Core/Pool/Scene Warmup Map")] +public class SceneWarmupMapSO : ScriptableObject +{ + [System.Serializable] + public struct Entry + { + public string SceneAddress; // Addressable 场景地址 + public WarmupManifestSO Manifest; + } + public Entry[] Entries; + + public WarmupManifestSO Get(string sceneAddress) + { + foreach (var e in Entries) + if (e.SceneAddress == sceneAddress) return e.Manifest; + return null; + } +} +``` + +### 12.5 预热时序与帧预算 + +``` +加载场景时序(全程在 LoadingOverlay 革盖下): + + [0%] Addressables.LoadSceneAsync(目标场景) + [10%] 场景资产加载完成 + [20%] 全局 Manifest 预热开始 + [40%] 场景专用 Manifest 预热开始 + [80%] 预热完成 + [95%] 场景激活(SetActive true) + [100%] 隐藏 Loading Overlay + +帧预算规则 (InstancesPerFrame = 5): + - 场景有 30 个 Warmup 实例 → 分 6 帧完成 ≈ 0.1s 额外延迟(在 Loading 鵠 屏内) + - 不占游戏运行时帧时间,玩家没有感知 +``` + +### 12.6 度量指标 + +| 指标 | 目标 | +|------|------| +| 入场后首次 Spawn 列长 | ≤ 0.5ms | +| Loading 阶段 GC 分配 | ≤ 1 MB | +| 预热完成率 | 入场前 100% 所需实例就绪 | + +### 12.7 WarmupManifestSO 自定义 Inspector — 帧预算预估 + +> **设计师工具**:配置完 `Entries` 数组后,Inspector 自动显示: +> - 总实例数、预计帧数、各 Category 实例占比饼图 +> - 当 `InstancesPerFrame` 过低(预计 > 30 帧)时显示橙色警告 + +```csharp +// 路径: Assets/Editor/Pool/WarmupManifestSOEditor.cs +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; +using System.Linq; + +[CustomEditor(typeof(WarmupManifestSO))] +public class WarmupManifestSOEditor : Editor +{ + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + + var manifest = (WarmupManifestSO)target; + if (manifest.Entries == null || manifest.Entries.Length == 0) return; + + EditorGUILayout.Space(8); + EditorGUILayout.LabelField("── 帧预算预估 ──", EditorStyles.boldLabel); + + int totalInstances = manifest.Entries.Sum(e => e.InitialCount); + int ipf = Mathf.Max(1, manifest.InstancesPerFrame); + int estimatedFrames = Mathf.CeilToInt((float)totalInstances / ipf); + float estimatedMs = estimatedFrames * (1000f / 60f); // 按 60fps 估算 + + EditorGUILayout.LabelField($"总实例数:{totalInstances}"); + EditorGUILayout.LabelField($"每帧预热:{ipf}"); + + // 超过 30 帧时显示橙色警告 + var style = new GUIStyle(EditorStyles.label); + if (estimatedFrames > 30) + { + style.normal.textColor = new Color(1f, 0.6f, 0f); // 橙色 + EditorGUILayout.LabelField( + $"⚠️ 预计帧数:{estimatedFrames} 帧 ≈ {estimatedMs:F0}ms — 建议提高 InstancesPerFrame", + style); + } + else + { + EditorGUILayout.LabelField($"预计帧数:{estimatedFrames} 帧 ≈ {estimatedMs:F0}ms ✅"); + } + + // 各 Category 实例分布 + EditorGUILayout.Space(4); + EditorGUILayout.LabelField("Category 分布:", EditorStyles.miniLabel); + var groups = manifest.Entries + .GroupBy(e => e.Category) + .OrderByDescending(g => g.Sum(e => e.InitialCount)); + foreach (var g in groups) + { + int count = g.Sum(e => e.InitialCount); + float pct = totalInstances > 0 ? (float)count / totalInstances * 100f : 0f; + EditorGUI.ProgressBar( + EditorGUILayout.GetControlRect(false, 16), + pct / 100f, + $"{g.Key}: {count} ({pct:F0}%)"); + } + } +} +#endif +``` diff --git a/Docs/Architecture/14_NarrativeModule.md b/Docs/Architecture/14_NarrativeModule.md new file mode 100644 index 0000000..487a30a --- /dev/null +++ b/Docs/Architecture/14_NarrativeModule.md @@ -0,0 +1,1199 @@ +# 14 · 叙事模块 + +> **命名空间** `BaseGames.Dialogue`、`BaseGames.Cutscene`、`BaseGames.EventChain`、`BaseGames.World`(IInteractable、WorldStateRegistry) +> **程序集** `BaseGames.Dialogue`、`BaseGames.Cutscene`、`BaseGames.EventChain` +> **路径** `Assets/Scripts/Dialogue/`、`Assets/Scripts/Cutscene/`、`Assets/Scripts/EventChain/` +> **依赖** `BaseGames.Core.Events`、`BaseGames.Input`(Action Map 切换)、`BaseGames.World`(SaveManager) + +--- + +## 目录 + +1. [IInteractable 接口](#1-iinteractable-接口) +2. [InteractionPromptController(交互提示 UI)](#2-interactionpromptcontroller) +3. [DialogueLineSO 与 DialogueSequenceSO](#3-dialoguelineso-与-dialoguesequenceso) +4. [DialogueManager](#4-dialoguemanager) +5. [DialogueUI(对话框组件)](#5-dialogueui) +6. [InteractableNPC](#6-interactablenpc) +7. [NarrativeNPC(条件对话 NPC)](#7-narrativenpcc) +8. [WorldStateRegistry](#8-worldstateregistry) +9. [EventChain(世界事件链)](#9-eventchain) +10. [EventChainManager](#10-eventchainmanager) +11. [CutsceneManager(Timeline 封装)](#11-cutscenemanager) +12. [叙事事件频道清单](#12-叙事事件频道清单) + +--- + +## 1. IInteractable 接口 + +```csharp +// 路径: Assets/Scripts/World/IInteractable.cs +namespace BaseGames.World +{ + public interface IInteractable + { + bool CanInteract { get; } + string InteractPrompt { get; } + void Interact(Transform player); + void OnPlayerEnterRange(Transform player); + void OnPlayerExitRange(); + } +} +``` + +**已实现 IInteractable 的组件**:`SavePoint`、`InteractableNPC`、`ShopNPC`、`AbilityUnlock`、`Sign`(告示牌) + +--- + +## 2. InteractionPromptController(交互提示 UI) + +当玩家进入 `IInteractable` 的交互范围时,在物件上方显示交互提示图标: + +```csharp +// 路径: Assets/Scripts/Dialogue/InteractionPromptController.cs +// 挂载:每个 IInteractable GameObject 下挂载一个子节点(Prefab 实例),默认隐藏 +public class InteractionPromptController : MonoBehaviour +{ + [SerializeField] GameObject _promptRoot; + [SerializeField] Image _icon; + [SerializeField] Sprite _keyboardIcon; + [SerializeField] Sprite _gamepadIcon; + + public void Show() + { + _promptRoot.SetActive(true); + // 根据当前活跃输入设备切换图标 + bool isGamepad = InputSystem.devices.OfType().Any(g => g.enabled); + _icon.sprite = isGamepad ? _gamepadIcon : _keyboardIcon; + } + + public void Hide() => _promptRoot.SetActive(false); +} +``` + +**检测范围**:独立的 `CircleCollider2D`(Trigger),半径约 1.5 单位,检测 `Player` 层,由 `InteractableDetector` 统一驱动 Show/Hide。 + +--- + +## 3. DialogueLineSO 与 DialogueSequenceSO + +```csharp +// 路径: Assets/Scripts/Dialogue/DialogueLineSO.cs +// 单行对话数据 +[System.Serializable] +public class DialogueLine +{ + public string SpeakerNameKey; // 本地化 Key(""=无说话人) + [TextArea(2, 6)] + public string TextKey; // 本地化 Key 或直接文本 + public Sprite PortraitSprite; // 可选说话人头像 + public float TypewriterDelay = 0.03f; // 每字符延迟(秒) +} + +// 路径: Assets/Scripts/Dialogue/DialogueSequenceSO.cs +[CreateAssetMenu(menuName = "Dialogue/DialogueSequence")] +public class DialogueSequenceSO : ScriptableObject +{ + public string sequenceId; // 全局唯一 + public DialogueLine[] Lines; + + // 条件对话(按游戏进程选择) + [System.Serializable] + public struct ConditionalVariant + { + public string ConditionFlag; // WorldStateRegistry 中的 flag key + public DialogueSequenceSO Sequence; // 满足条件时用此序列替换 + } + public ConditionalVariant[] Variants; +} +``` + +**资产路径**:`Assets/ScriptableObjects/Dialogue/` +**命名规范**:`DLG_{NpcId}_{Context}.asset` + +--- + +## 4. DialogueManager + +```csharp +// 路径: Assets/Scripts/Dialogue/DialogueManager.cs +public class DialogueManager : MonoBehaviour +{ + [SerializeField] private DialogueBox _dialogueBox; // Canvas_Overlay 下的 UI + [SerializeField] private InputReaderSO _inputReader; + + [Header("Event Channels")] + [SerializeField] private VoidEventChannelSO _onDialogueStarted; + [SerializeField] private VoidEventChannelSO _onDialogueEnded; + [SerializeField] private StringEventChannelSO _onNpcDialogueCompleted; // → EVT_NpcDialogueCompleted(npcId,QuestManager 订阅) + [SerializeField] private GameStateEventChannelSO _onGameStateChanged; + + public bool IsDialogueActive { get; private set; } // ECS_Dialogue.Execute 使用 + private bool _skipRequested; + + // 由 InteractableNPC 调用(主动开始对话) + public void StartDialogue(DialogueSequenceSO sequence); + // 1. 若 IsDialogueActive → 返回 + // 2. 选择 ConditionalVariant(查询 WorldStateRegistry) + // 3. _dialogueBox.Show() + // 4. 切换 InputReader Action Map → UI + // 5. _onDialogueStarted.Raise() + // 6. StartCoroutine(PlaySequence(sequence)) + + // 玩家按下 Submit 键时(InputReaderSO.SubmitEvent) + private void OnSubmit() => _skipRequested = true; + + private IEnumerator PlaySequence(DialogueSequenceSO sequence) + { + foreach (var line in sequence.Lines) + { + _skipRequested = false; + yield return _dialogueBox.TypeText(line.TextKey, line.TypewriterDelay); + // 等待玩家按 Submit 继续 + yield return new WaitUntil(() => _skipRequested); + } + EndDialogue(); + } + + private void EndDialogue() + { + _dialogueBox.Hide(); + IsDialogueActive = false; + // 恢复 Action Map → Gameplay + _onDialogueEnded.Raise(); + } +} +``` + +--- + +## 5. DialogueUI(对话框组件) + +挂载在 `Canvas_Overlay` 下的 `DialogueBox` 子对象(见 [10_UISystem.md §2](./10_UISystem.md)): + +```csharp +// 路径: Assets/Scripts/Dialogue/DialogueUI.cs +public class DialogueUI : MonoBehaviour +{ + [SerializeField] GameObject _rootPanel; + [SerializeField] TMP_Text _speakerNameText; + [SerializeField] TMP_Text _dialogueText; + [SerializeField] GameObject _speakerNamePanel; // 无名称时隐藏整个名称框 + [SerializeField] GameObject _continuePrompt; // "▼" 图标,打字完成后显示 + [SerializeField] Image _speakerPortrait; // P1:人物头像框 + + Coroutine _typingCoroutine; + DialogueLine _currentLine; + public bool IsTyping { get; private set; } + + public void ShowLine(DialogueLine line) + { + _currentLine = line; + _rootPanel.SetActive(true); + _continuePrompt.SetActive(false); + + bool hasSpeaker = !string.IsNullOrEmpty(line.SpeakerNameKey); + _speakerNamePanel.SetActive(hasSpeaker); + if (hasSpeaker) _speakerNameText.text = line.SpeakerNameKey; + + if (_typingCoroutine != null) StopCoroutine(_typingCoroutine); + _typingCoroutine = StartCoroutine(TypeLine(line)); + } + + IEnumerator TypeLine(DialogueLine line) + { + IsTyping = true; + // 性能:使用 StringBuilder 避免每帧字符串分配(O(n²) → O(n)) + var sb = new System.Text.StringBuilder(line.TextKey.Length); + _dialogueText.text = ""; + foreach (char c in line.TextKey) + { + sb.Append(c); + _dialogueText.SetText(sb); // TMP SetText(StringBuilder) 零分配 + yield return new WaitForSecondsRealtime(line.TypewriterDelay); + } + IsTyping = false; + _continuePrompt.SetActive(true); + } + + public void SkipTyping() + { + if (_typingCoroutine != null) StopCoroutine(_typingCoroutine); + _dialogueText.text = _currentLine?.TextKey ?? ""; + IsTyping = false; + _continuePrompt.SetActive(true); + } + + public void Hide() => _rootPanel.SetActive(false); +} +``` + +--- + +## 6. InteractableNPC + +```csharp +// 路径: Assets/Scripts/Dialogue/InteractableNPC.cs +public class InteractableNPC : MonoBehaviour, IInteractable +{ + [SerializeField] private string _npcId; + [SerializeField] private DialogueSequenceSO _defaultDialogue; + [SerializeField] private float _interactRadius = 1.5f; + + private DialogueManager _dialogueManager; // 通过场景中 Find 或注入 + + // ── IInteractable ───────────────────────────────────────── + public bool CanInteract => true; + public string InteractPrompt => "对话"; + + public void Interact(Transform player) + { + Interact_Internal(player); // 子类扩展钩子(如 QuestGiver) + _dialogueManager.StartDialogue(GetCurrentDialogue()); // 启动对话 + } + + /// 子类覆盖此方法以在对话前注入额外逻辑(如接受/完成任务)。 + protected virtual void Interact_Internal(Transform player) { } + + /// 子类覆盖此方法以根据游戏状态返回不同的对话 SO(见 NarrativeNPC)。 + protected virtual DialogueSequenceSO GetCurrentDialogue() => _defaultDialogue; + + public void OnPlayerEnterRange(Transform player) { } // 交互提示 UI 由 InteractableDetector 统一发布 + public void OnPlayerExitRange() { } // 交互提示 UI 由 InteractableDetector 统一发布 +} +``` + +--- + +## 7. NarrativeNPC(条件对话 NPC) + +扩展 `InteractableNPC`,支持根据 `WorldStateRegistry` 标志动态选择对话版本: + +```csharp +// 路径: Assets/Scripts/Dialogue/NarrativeNPC.cs +public class NarrativeNPC : InteractableNPC +{ + [Header("台词版本集(从高到低优先级排列)")] + [SerializeField] DialogueVersion[] _dialogueVersions; + [SerializeField] DialogueSequenceSO _defaultDialogue; // 无条件满足时的默认台词 + [SerializeField] WorldStateRegistry _worldState; // SO 注入 + + protected virtual DialogueSequenceSO GetCurrentDialogue() + { + foreach (var version in _dialogueVersions) + { + if (version.CheckConditions(_worldState)) + return version.dialogue; + } + return _defaultDialogue; + } +} + +[System.Serializable] +public class DialogueVersion +{ + public string versionLabel; // 编辑器显示名(如"森林Boss击败后") + public DialogueSequenceSO dialogue; + public string[] requiredFlags; // 全部满足才激活此版本(AND 关系) + public string[] blockedByFlags; // 有任意一个 = 此版本不激活(NOT 关系) + + public bool CheckConditions(WorldStateRegistry registry) + { + foreach (var f in requiredFlags) + if (!registry.HasFlag(f)) return false; + foreach (var f in blockedByFlags) + if (registry.HasFlag(f)) return false; + return true; + } +} +``` + +--- + +## 8. WorldStateRegistry + +全局世界状态注册表(SO 形式,零耦合注入),存储所有已激活的世界状态标志。 + +**P1 优化:二级命名空间索引**,替代原单一 `HashSet`,支持 DLC 子集按命名空间卸载,防止键名冲突: + +```csharp +// 路径: Assets/Scripts/World/Narrative/WorldStateRegistry.cs +namespace BaseGames.World +{ + [CreateAssetMenu(menuName = "Narrative/WorldStateRegistry")] + public class WorldStateRegistry : ScriptableObject + { + // 二级索引:namespace → flags + // namespace 约定 = 区域/模块前缀,如 "Forest"、"DLC_Abyss"、"Quest" + private readonly Dictionary> _nsFlags = new(); + + // ── 写入 ────────────────────────────────────────────────────────── + /// + /// 设置标志。
+ /// 格式:Namespace_Object_State(如 Boss_SpiderGuard_Defeated)。 + /// Namespace 取第一段;若无下划线则归入 "Global"。 + ///
+ public void SetFlag(string flagKey, bool value = true) + { + var (ns, local) = Split(flagKey); + if (!_nsFlags.TryGetValue(ns, out var set)) + _nsFlags[ns] = set = new HashSet(); + if (value) set.Add(local); + else set.Remove(local); + } + + // ── 读取 ────────────────────────────────────────────────────────── + /// 查询标志(任意命名空间或全限定 key 均可查)。 + public bool HasFlag(string flagKey) + { + var (ns, local) = Split(flagKey); + return _nsFlags.TryGetValue(ns, out var set) && set.Contains(local); + } + + // ── 命名空间级操作(DLC 卸载用)──────────────────────────────── + /// 卸载指定命名空间的所有标志(DLC 退出时调用)。 + public void ClearNamespace(string ns) => _nsFlags.Remove(ns); + + public IEnumerable GetFlagsInNamespace(string ns) + => _nsFlags.TryGetValue(ns, out var s) ? (IEnumerable)s + : System.Array.Empty(); + + // ── 存档 I/O ────────────────────────────────────────────────────── + /// 从存档恢复(传入全限定 key 列表)。 + public void LoadFromSave(IEnumerable flags) + { + _nsFlags.Clear(); + foreach (var f in flags) SetFlag(f); + } + + /// 序列化为全限定 key 列表(存档用)。 + public IEnumerable GetAllFlags() + { + foreach (var (ns, set) in _nsFlags) + foreach (var local in set) + yield return $"{ns}_{local}"; + } + + // ── 内部 ────────────────────────────────────────────────────────── + private static (string ns, string local) Split(string key) + { + int idx = key.IndexOf('_'); + return idx > 0 + ? (key[..idx], key[(idx + 1)..]) + : ("Global", key); + } + } +} +``` + +**标志命名规范**:`__` + +| Namespace | 示例 key | 说明 | +|-----------|----------|------| +| `Boss` | `Boss_SpiderGuard_Defeated` | Boss 击败状态 | +| `NPC` | `NPC_MerchantA_Migrated` | NPC 状态变更 | +| `Quest` | `Quest_ForestMystery_Completed` | 任务完成标记 | +| `World` | `World_ForestBridge_Opened` | 世界对象状态 | +| `DLC_*` | `DLC_Abyss_BossFirst_Defeated` | DLC 专属命名空间(卸载时可整体清除)| +| `Global` | `TutorialCompleted` | 无命名空间回退 | + +--- + +## 9. EventChain(世界事件链) + +```csharp +// 路径: Assets/Scripts/EventChain/EventChainSO.cs +namespace BaseGames.EventChain +{ + // EventChainSO:描述"当全部 Condition 满足时,依次执行 Actions" + // 策划纯数据配置,无需程序员介入 + [CreateAssetMenu(menuName = "EventChain/EventChain")] + public class EventChainSO : ScriptableObject + { + [Header("基础")] + public string chainId; // 全局唯一,如 "Chain_BossForest_Defeated" + public bool repeatable; // false = 只触发一次(触发后 SaveData 记录) + public float actionDelay = 0f; // 各 action 之间的延迟(秒),0 = 紧接着执行 + + [Header("触发条件(全部满足才触发)")] + public ChainCondition[] conditions; + + [Header("执行动作(顺序执行)")] + public ChainAction[] actions; + } + + // ChainCondition 抽象基类:Strategy + Observer 混合 + // Register/Unregister 向 EventChainManager 的中继 C# 事件挂钩, + // IsMet() 被 EvaluateAll() 调用以检验是否满足触发条件 + public abstract class ChainCondition : ScriptableObject + { + public abstract void Register(EventChainManager manager); + public abstract void Unregister(EventChainManager manager); + public abstract bool IsMet(); + } + + // ── 内置条件实现 ────────────────────────────────────────── + + [CreateAssetMenu(menuName = "EventChain/Condition/BossDefeated")] + public class BossDefeatedCondition : ChainCondition + { + public string bossId; + bool _met; + public override void Register(EventChainManager m) => m.OnBossDefeated += Check; + public override void Unregister(EventChainManager m) => m.OnBossDefeated -= Check; + public override bool IsMet() => _met; + void Check(string id) { if (id == bossId) _met = true; } + } + + [CreateAssetMenu(menuName = "EventChain/Condition/FlagSet")] + public class FlagSetCondition : ChainCondition + { + public string flagId; + public override void Register(EventChainManager m) { } // 无需订阅事件,持续轮询 + public override void Unregister(EventChainManager m) { } + public override bool IsMet() => SaveManager.Instance.GetFlag(flagId); + } + + [CreateAssetMenu(menuName = "EventChain/Condition/AbilityUnlocked")] + public class AbilityUnlockedCondition : ChainCondition + { + public string abilityId; // 匹配 EVT_AbilityUnlocked(StringEventChannelSO)传来的 abilityId + bool _met; + public override void Register(EventChainManager m) => m.OnAbilityUnlocked += Check; + public override void Unregister(EventChainManager m) => m.OnAbilityUnlocked -= Check; + public override bool IsMet() => _met; + void Check(string id) { if (id == abilityId) _met = true; } + } + + [CreateAssetMenu(menuName = "EventChain/Condition/CollectibleCollected")] + public class CollectibleCollectedCondition : ChainCondition + { + public string itemId; + bool _met; + public override void Register(EventChainManager m) => m.OnCollectiblePickedUp += Check; + public override void Unregister(EventChainManager m) => m.OnCollectiblePickedUp -= Check; + public override bool IsMet() => _met; + void Check(string id) { if (id == itemId) _met = true; } + } + + [CreateAssetMenu(menuName = "EventChain/Condition/RoomEntered")] + public class RoomEnteredCondition : ChainCondition + { + public string sceneName; + bool _met; + public override void Register(EventChainManager m) => m.OnRoomEntered += Check; + public override void Unregister(EventChainManager m) => m.OnRoomEntered -= Check; + public override bool IsMet() => _met; + void Check(string id) { if (id == sceneName) _met = true; } + } + + [CreateAssetMenu(menuName = "EventChain/Condition/DialogueCompleted")] + public class DialogueCompletedCondition : ChainCondition + { + public string npcId; + public string sequenceId; // 额外过滤;OnDialogueCompleted 传递 npcId + bool _met; + public override void Register(EventChainManager m) => m.OnDialogueCompleted += Check; + public override void Unregister(EventChainManager m) => m.OnDialogueCompleted -= Check; + public override bool IsMet() => _met; + void Check(string id) { if (id == npcId) _met = true; } + } + + [CreateAssetMenu(menuName = "EventChain/Condition/ChainCompleted")] + public class ChainCompletedCondition : ChainCondition + { + public string chainId; + bool _met; + public override void Register(EventChainManager m) => m.OnChainCompleted += Check; + public override void Unregister(EventChainManager m) => m.OnChainCompleted -= Check; + public override bool IsMet() => _met; + void Check(string id) { if (id == chainId) _met = true; } + } + + // ChainAction 抽象基类:ExecuteAsync 可即时返回或协程等待 + public abstract class ChainAction : ScriptableObject + { + public abstract IEnumerator ExecuteAsync(MonoBehaviour runner); + } + + // ── 内置动作实现 ────────────────────────────────────────── + + [CreateAssetMenu(menuName = "EventChain/Action/OpenDoor")] + public class OpenDoorAction : ChainAction + { + public string doorId; + [SerializeField] StringEventChannelSO _onDoorOpened; // EVT_DoorOpened + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + _onDoorOpened.Raise(doorId); + yield break; + } + } + + [CreateAssetMenu(menuName = "EventChain/Action/SetFlag")] + public class SetFlagAction : ChainAction + { + public string flagId; + public bool value; + [SerializeField] StringEventChannelSO _onFlagChanged; // EVT_FlagChanged + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + SaveManager.Instance.SetFlag(flagId, value); + _onFlagChanged.Raise(flagId); + yield break; + } + } + + [CreateAssetMenu(menuName = "EventChain/Action/UpdateMap")] + public class UpdateMapAction : ChainAction + { + public string regionId; + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + MapManager.Instance.RevealRegion(regionId); + yield break; + } + } + + [CreateAssetMenu(menuName = "EventChain/Action/PlayCutscene")] + public class PlayCutsceneAction : ChainAction + { + public string cutsceneId; + [SerializeField] StringEventChannelSO _onPlayCutscene; // → CutsceneManager.PlayById + [SerializeField] VoidEventChannelSO _onCutsceneEnded; // ← CutsceneManager 播完时 Raise + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + bool done = false; + _onCutsceneEnded.OnEventRaised += OnDone; + _onPlayCutscene.Raise(cutsceneId); + yield return new WaitUntil(() => done); + _onCutsceneEnded.OnEventRaised -= OnDone; + void OnDone() => done = true; + } + } + + [CreateAssetMenu(menuName = "EventChain/Action/ChangeNPCDialogue")] + public class ChangeNPCDialogueAction : ChainAction + { + public string npcId; + public string newSequenceId; + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + NPCRegistry.Instance.SetDialogueSequence(npcId, newSequenceId); + yield break; + } + } + + [CreateAssetMenu(menuName = "EventChain/Action/SpawnObject")] + public class SpawnObjectAction : ChainAction + { + public GameObject prefab; + public Vector3 position; + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + Object.Instantiate(prefab, position, Quaternion.identity); + yield break; + } + } + + [CreateAssetMenu(menuName = "EventChain/Action/Wait")] + public class WaitAction : ChainAction + { + public float seconds; + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + => new WaitForSeconds(seconds) as IEnumerator; + } + + [CreateAssetMenu(menuName = "EventChain/Action/RaiseEvent")] + public class RaiseEventAction : ChainAction + { + [SerializeField] VoidEventChannelSO eventChannelSO; + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + eventChannelSO.Raise(); + yield break; + } + } + + [CreateAssetMenu(menuName = "EventChain/Action/UnlockAbility")] + public class UnlockAbilityAction : ChainAction + { + public string abilityId; + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + PlayerStats.Instance.UnlockAbility(abilityId); + yield break; + } + } + + [CreateAssetMenu(menuName = "EventChain/Action/PlayAudio")] + public class PlayAudioAction : ChainAction + { + [SerializeField] StringEventChannelSO _onPlayBGM; // EVT_PlayBGM + public string bgmKey; + public override IEnumerator ExecuteAsync(MonoBehaviour runner) + { + _onPlayBGM.Raise(bgmKey); + yield break; + } + } +} +``` + +--- + +## 10. EventChainManager + +```csharp +// 路径: Assets/Scripts/EventChain/EventChainManager.cs +namespace BaseGames.EventChain +{ + public class EventChainManager : MonoBehaviour + { + [Header("所有事件链")] + [SerializeField] EventChainSO[] _chains; + + [Header("事件频道(中继)")] + [SerializeField] StringEventChannelSO _onBossDefeated; // EVT_EnemyDied (bossId) + [SerializeField] StringEventChannelSO _onCollectiblePickedUp; // EVT_CollectiblePickup + [SerializeField] StringEventChannelSO _onAbilityUnlocked; // EVT_AbilityUnlocked(StringEventChannelSO) + [SerializeField] StringEventChannelSO _onRoomEntered; // EVT_SceneLoaded + [SerializeField] StringEventChannelSO _onDialogueCompleted; // EVT_NpcDialogueCompleted + + // 中继 C# 事件,供 ChainCondition.Register() 订阅 + public event Action OnBossDefeated; + public event Action OnCollectiblePickedUp; + public event Action OnAbilityUnlocked; + public event Action OnRoomEntered; + public event Action OnDialogueCompleted; + public event Action OnChainCompleted; // 链完成时广播 chainId(供 ChainCompletedCondition) + + readonly HashSet _completedChains = new(); + + void Awake() + { + // 从 SaveData 恢复已完成链 ID + foreach (var id in SaveManager.Instance.GetCompletedChains()) + _completedChains.Add(id); + } + + void OnEnable() + { + _onBossDefeated.OnEventRaised += id => { OnBossDefeated?.Invoke(id); EvaluateAll(); }; + _onCollectiblePickedUp.OnEventRaised += id => { OnCollectiblePickedUp?.Invoke(id); EvaluateAll(); }; + _onAbilityUnlocked.OnEventRaised += id => { OnAbilityUnlocked?.Invoke(id); EvaluateAll(); }; + _onRoomEntered.OnEventRaised += id => { OnRoomEntered?.Invoke(id); EvaluateAll(); }; + _onDialogueCompleted.OnEventRaised += id => { OnDialogueCompleted?.Invoke(id); EvaluateAll(); }; + + // 向每个 Condition 注册中继事件 + foreach (var chain in _chains) + foreach (var cond in chain.conditions) + cond.Register(this); + } + + void OnDisable() + { + foreach (var chain in _chains) + foreach (var cond in chain.conditions) + cond.Unregister(this); + } + + void EvaluateAll() + { + foreach (var chain in _chains) + { + if (!chain.repeatable && _completedChains.Contains(chain.chainId)) + continue; // 一次性链已执行,跳过 + + if (Array.TrueForAll(chain.conditions, c => c.IsMet())) + StartCoroutine(ExecuteChain(chain)); + } + } + + IEnumerator ExecuteChain(EventChainSO chain) + { + // 防止同一链重入 + if (!chain.repeatable) + _completedChains.Add(chain.chainId); + + foreach (var action in chain.actions) + { + yield return action.ExecuteAsync(this); + + if (chain.actionDelay > 0f) + yield return new WaitForSeconds(chain.actionDelay); + } + + SaveManager.Instance.SetChainCompleted(chain.chainId); + OnChainCompleted?.Invoke(chain.chainId); + } + } +} +``` + +### 6.1 EventChain SaveData 集成 + +`eventChains` 字段已加入统一 SaveData 结构(参见 [12_SaveModule.md](12_SaveModule.md)): + +```json +"eventChains": { + "completedChains": ["Chain_BossForest_Defeated", "Chain_Forest_DoorOpened"], + "flags": { "ForestBossDefeated": true, "AbyssUnlocked": false } +} +``` + +```csharp +// SaveManager 扩展方法(参见 12_SaveModule.md §SaveData 结构) +public IEnumerable GetCompletedChains(); +public void SetChainCompleted(string chainId); +public bool GetFlag(string flagId); +public void SetFlag(string flagId, bool value); +``` + +--- + +## 11. CutsceneManager + +```csharp +// 路径: Assets/Scripts/Cutscene/CutsceneManager.cs +// Unity Timeline 封装 +[RequireComponent(typeof(PlayableDirector))] +public class CutsceneManager : MonoBehaviour +{ + [SerializeField] private InputReaderSO _inputReader; + + private PlayableDirector _director; + public bool IsPlaying => _director.state == PlayState.Playing; + + [Header("Event Channels")] + [SerializeField] private VoidEventChannelSO _onCutsceneStarted; + [SerializeField] private VoidEventChannelSO _onCutsceneEnded; + + private void Awake() => _director = GetComponent(); + + public void PlayCutscene(CutsceneSO cutscene) + { + if (cutscene == null) return; + _director.playableAsset = cutscene.Timeline; + + // 应用 Track → GameObject 绑定 + foreach (var binding in cutscene.Bindings) + { + var track = cutscene.Timeline.GetOutputTrack( + System.Array.FindIndex(cutscene.Bindings, b => b.trackName == binding.trackName)); + if (track != null && binding.target != null) + _director.SetGenericBinding(track, binding.target); + } + + _director.stopped += OnCutsceneStopped; + _director.Play(); + _onCutsceneStarted.Raise(); + // 禁用 Gameplay 输入(切换到 UI Action Map) + } + + public void StopCutscene() + { + _director.Stop(); + } + + private void OnCutsceneStopped(PlayableDirector d) + { + _director.stopped -= OnCutsceneStopped; + _onCutsceneEnded.Raise(); + // 恢复 Gameplay 输入 + } +} +``` + +--- + +## 11.5 CutsceneSO 与 CutsceneTrigger + +```csharp +// 路径: Assets/Scripts/Cutscene/CutsceneSO.cs +// 过场动画数据资产:定义一段完整的过场内容 +[CreateAssetMenu(menuName = "Cutscene/Cutscene")] +public class CutsceneSO : ScriptableObject +{ + [Header("Identity")] + public string cutsceneId; // 全局唯一,用于存档去重 + public string displayName; // 编辑器/UI 中显示的可读名称 + public bool playOnlyOnce; // true → 仅首次播放(后续触发跳过) + public bool isSkippable = true; // 是否允许玩家跳过 + public Sprite thumbnail; // 过场预览图(美术库 / 剧情重放 UI 用) + + [Header("Timeline")] + public TimelineAsset Timeline; // Unity Timeline 资产 + + [Header("Timeline Bindings")] + // Track 与场景 GameObject 的绑定关系(避免 Director 硬引用场景对象) + public CutsceneBinding[] Bindings; // 数组长度 = Timeline track 数 + + [Header("Camera")] + public CinemachineBlendDefinition BlendIn; // 进入过场时的 Cinemachine 混合 + public CinemachineBlendDefinition BlendOut; // 退出过场时的混合 + + [Header("Optional Dialogue Overlay")] + // 过场中可叠加播放的对话序列(Timeline 上添加 Marker 触发) + public DialogueSequenceSO[] DialogueLayers; +} + +/// 将一条 Timeline Track(通过名称索引)绑定到运行时场景对象。 +[Serializable] +public struct CutsceneBinding +{ + [Tooltip("Timeline Track 的名称(需与 PlayableDirector 内轨道名一致)")] + public string trackName; + [Tooltip("绑定的目标对象;若为 null 则 CutsceneManager 会从场景中按 tag/name 查找")] + public Object target; // UnityEngine.Object(可以是 GameObject / Component / asset) +} + +// 路径: Assets/Scripts/Cutscene/CutsceneTrigger.cs +// 挂载在场景 GameObject 上,满足条件时自动触发或由玩家交互触发 +public class CutsceneTrigger : MonoBehaviour, IInteractable +{ + public enum TriggerMode + { + OnEnter, // 进入 Trigger 区域(对应 Design OnZoneEnter) + OnInteract, // 玩家主动交互(IInteractable) + OnSceneLoad, // 场景加载完毕(Start) + OnEvent, // 订阅事件频道触发(配合 _triggerEventChannel) + } + + [SerializeField] private CutsceneSO _cutscene; + [SerializeField] private TriggerMode _mode = TriggerMode.OnEnter; + [SerializeField] private CutsceneManager _cutsceneManager; + [SerializeField] private VoidEventChannelSO _triggerEventChannel; // OnEvent 模式使用 + [SerializeField] private WorldStateRegistry _worldState; // SO 注入,用于记录/查询播放状态 + + // ── IInteractable(TriggerMode.OnInteract 模式使用)────────────── + public bool CanInteract => _mode == TriggerMode.OnInteract; + public string InteractPrompt => "查看"; + + public void Interact(Transform player) => TriggerCutscene(); + public void OnPlayerEnterRange(Transform player) { } + public void OnPlayerExitRange() { } + + private void OnEnable() + { + if (_mode == TriggerMode.OnEvent && _triggerEventChannel != null) + _triggerEventChannel.OnEventRaised += TriggerCutscene; + } + + private void OnDisable() + { + if (_mode == TriggerMode.OnEvent && _triggerEventChannel != null) + _triggerEventChannel.OnEventRaised -= TriggerCutscene; + } + + // ── Zone Enter 触发 ────────────────────────────────────────────── + private void OnTriggerEnter2D(Collider2D other) + { + if (_mode != TriggerMode.OnEnter) return; + if (!other.CompareTag("Player")) return; + TriggerCutscene(); + } + + // ── 场景加载触发 ───────────────────────────────────────────────── + private void Start() + { + if (_mode == TriggerMode.OnSceneLoad) TriggerCutscene(); + } + + private void TriggerCutscene() + { + if (_cutscene == null) return; + + // 已播放过且设置为仅播一次 → 跳过 + if (_cutscene.playOnlyOnce && + _worldState != null && _worldState.HasFlag($"cutscene_played_{_cutscene.cutsceneId}")) + return; + + _cutsceneManager.PlayCutscene(_cutscene); + _worldState?.SetFlag($"cutscene_played_{_cutscene.cutsceneId}"); + + // Zone 触发后禁用自身,防止重复触发 + if (_mode == TriggerMode.OnEnter) enabled = false; + } +} +``` + +**资产路径**:`Assets/ScriptableObjects/Cutscene/` +**命名规范**:`CS_{SceneId}_{ContextId}.asset` + +--- + +## 11.6 SignalEmitterClip — Timeline 零耦合事件桥接 + +> **Design 来源**:[18_CutsceneSystem](../Design/18_CutsceneSystem.md) §SignalEmitterClip + +Timeline 过场通过此自定义 `PlayableAsset` 发布 SO 事件频道,Timeline 动画与游戏逻辑不直接引用,保持零耦合原则。 + +```csharp +// 路径: Assets/Scripts/Cutscene/SignalEmitterClip.cs +// 在 Timeline 轨道上放置此 Clip,Clip 播放时向目标事件频道 Raise 一次事件 +[CreateAssetMenu(menuName = "BaseGames/Cutscene/SignalEmitterClip")] +public class SignalEmitterClip : PlayableAsset, ITimelineClipAsset +{ + [SerializeField] private EventChannelBaseSO _targetChannel; // 目标事件频道 SO + + // ITimelineClipAsset + public ClipCaps clipCaps => ClipCaps.None; + + public override Playable CreatePlayable(PlayableGraph graph, GameObject owner) + => ScriptPlayable.Create(graph, + new SignalEmitterBehaviour { Clip = this }); +} + +// 路径: Assets/Scripts/Cutscene/SignalEmitterBehaviour.cs +public class SignalEmitterBehaviour : PlayableBehaviour +{ + public SignalEmitterClip Clip; + private bool _fired; + + public override void OnBehaviourPlay(Playable playable, FrameData info) + { + _fired = false; // 重置,支持 Timeline 循环/重播 + } + + public override void ProcessFrame(Playable playable, FrameData info, object playerData) + { + if (!_fired && Clip._targetChannel != null) + { + Clip._targetChannel.RaiseEvent(); + _fired = true; + } + } +} +``` + +**使用场景示例**: +- 过场第 3 秒播放角色出现 → 触发 `EVT_BossCutscenePhase2` 频道 → BossOrchestrator 切换阶段 +- 过场结束前 0.5 秒 → 触发 `EVT_CutscenePreEnd` → HUD 开始淡入 + +--- + +## 12. 叙事事件频道清单 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_DialogueStarted` | `VoidEventChannelSO` | `DialogueManager` | `InputReaderSO`(切 UI 输入)、`PlayerController`(锁定输入)| +| `EVT_DialogueEnded` | `VoidEventChannelSO` | `DialogueManager` | `InputReaderSO`(切回 Gameplay)| +| `EVT_CutsceneStarted` | `VoidEventChannelSO` | `CutsceneManager` | `HUDController`(隐藏 HUD)、`InputReaderSO` | +| `EVT_CutsceneEnded` | `VoidEventChannelSO` | `CutsceneManager` | `HUDController`(恢复 HUD)| + +--- + +## 13. EventChainEditorWindow — 事件链可视化编辑器 + +> **路径**:`Assets/Editor/Narrative/EventChainEditorWindow.cs`(Editor-only) +> **痛点**:`EventChainSO` 包含多个 `ChainCondition[]` + `ChainAction[]`,在标准 Inspector 以 `[SerializeReference]` 列表展示,10+ 条件/动作时极其冗长;链间依赖关系(`ChainCompletedCondition.chainId`)无可视化。本窗口提供**节点列表式**编辑视图,同时显示运行时执行状态。 + +### 13.1 功能规格 + +| 功能 | 说明 | +|------|------| +| **链总览面板** | 左侧显示所有 `EventChainSO` 资产列表,按区域/命名空间分组(`chainId` 前缀) | +| **条件/动作表格** | 右侧展示选中链的条件(绿/红标记 `IsMet()`)和动作(顺序编号)| +| **运行时状态着色** | Play Mode 下已完成链=绿、进行中=橙、未激活=白 | +| **依赖关系箭头** | `ChainCompletedCondition` 在两条链之间绘制依赖箭头(链间先决条件可视化)| +| **快速定位** | 双击链名 → `EditorGUIUtility.PingObject()` 高亮 Project 中对应资产 | +| **链执行日志** | 底部 Log 面板显示最近 20 条链执行记录(时间戳 + chainId + 成功/失败)| + +### 13.2 实现规范 + +```csharp +// 路径: Assets/Editor/Narrative/EventChainEditorWindow.cs +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; + +namespace BaseGames.Editor.Narrative +{ + public class EventChainEditorWindow : EditorWindow + { + [MenuItem("BaseGames/Tools/Event Chain Viewer")] + public static void Open() => GetWindow("事件链查看器"); + + // ── 状态 ────────────────────────────────────────────────────────── + private List _allChains; + private EventChainSO _selected; + private Vector2 _leftScroll; + private Vector2 _rightScroll; + private string _filterText = ""; + private static readonly List _executionLog = new(); // 最多 20 条 + + // 颜色 + private static readonly Color ColCompleted = new(0.2f, 0.8f, 0.2f, 0.3f); + private static readonly Color ColPending = new(0.8f, 0.7f, 0.1f, 0.3f); + private static readonly Color ColCondMet = new(0.2f, 0.9f, 0.2f, 1f); + private static readonly Color ColCondFail = new(0.9f, 0.3f, 0.3f, 1f); + + private void OnEnable() => RefreshChainList(); + private void OnFocus() => RefreshChainList(); + + private void RefreshChainList() + { + var guids = AssetDatabase.FindAssets("t:EventChainSO"); + _allChains = guids + .Select(g => AssetDatabase.LoadAssetAtPath( + AssetDatabase.GUIDToAssetPath(g))) + .Where(c => c != null) + .OrderBy(c => c.chainId) + .ToList(); + } + + private void OnGUI() + { + DrawToolbar(); + EditorGUILayout.BeginHorizontal(); + DrawLeftPanel(); // 链列表 + DrawRightPanel(); // 条件/动作详情 + EditorGUILayout.EndHorizontal(); + DrawLogPanel(); + } + + // ── 工具栏 ──────────────────────────────────────────────────────── + private void DrawToolbar() + { + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); + GUILayout.Label("过滤:", GUILayout.Width(36)); + _filterText = EditorGUILayout.TextField(_filterText, GUILayout.Width(180)); + if (GUILayout.Button("刷新", EditorStyles.toolbarButton, GUILayout.Width(44))) + RefreshChainList(); + GUILayout.FlexibleSpace(); + if (Application.isPlaying) + GUILayout.Label("● 运行中", new GUIStyle(EditorStyles.toolbarButton) + { normal = { textColor = Color.green } }); + EditorGUILayout.EndHorizontal(); + } + + // ── 左侧:链列表 ────────────────────────────────────────────────── + private void DrawLeftPanel() + { + EditorGUILayout.BeginVertical(GUILayout.Width(220), GUILayout.ExpandHeight(true)); + EditorGUILayout.LabelField("事件链列表", EditorStyles.boldLabel); + _leftScroll = EditorGUILayout.BeginScrollView(_leftScroll); + + // 按 Namespace(chainId 首段)分组 + var groups = _allChains + .Where(c => string.IsNullOrEmpty(_filterText) || + c.chainId.Contains(_filterText, System.StringComparison.OrdinalIgnoreCase)) + .GroupBy(c => c.chainId.Contains('_') ? c.chainId[..c.chainId.IndexOf('_')] : "Global"); + + foreach (var group in groups) + { + EditorGUILayout.LabelField(group.Key, EditorStyles.miniBoldLabel); + foreach (var chain in group) + { + bool isDone = Application.isPlaying && + EventChainManager.Instance != null && + EventChainManager.Instance.IsCompleted(chain.chainId); + + var oldColor = GUI.backgroundColor; + GUI.backgroundColor = isDone ? ColCompleted : ColPending; + + bool selected = GUILayout.Toggle(_selected == chain, + $" {chain.chainId[(chain.chainId.IndexOf('_') + 1)..]}", + "Button"); + GUI.backgroundColor = oldColor; + + if (selected) + { + _selected = chain; + EditorGUIUtility.PingObject(chain); + } + } + } + + EditorGUILayout.EndScrollView(); + EditorGUILayout.EndVertical(); + } + + // ── 右侧:条件 + 动作 ──────────────────────────────────────────── + private void DrawRightPanel() + { + EditorGUILayout.BeginVertical(GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); + if (_selected == null) + { + EditorGUILayout.HelpBox("← 选择左侧的事件链查看详情", MessageType.Info); + EditorGUILayout.EndVertical(); + return; + } + + EditorGUILayout.LabelField(_selected.chainId, EditorStyles.boldLabel); + EditorGUILayout.LabelField( + $"重复触发:{(_selected.repeatable ? "是" : "否")} 动作间隔:{_selected.actionDelay:F1}s", + EditorStyles.miniLabel); + EditorGUILayout.Space(6); + + _rightScroll = EditorGUILayout.BeginScrollView(_rightScroll); + + // 条件列表 + EditorGUILayout.LabelField("触发条件", EditorStyles.boldLabel); + if (_selected.conditions != null) + { + for (int i = 0; i < _selected.conditions.Length; i++) + { + var cond = _selected.conditions[i]; + bool met = Application.isPlaying && cond.IsMet(); + + EditorGUILayout.BeginHorizontal(); + // 运行时绿/红指示灯 + if (Application.isPlaying) + { + var dot = new GUIStyle(EditorStyles.miniLabel) + { normal = { textColor = met ? ColCondMet : ColCondFail } }; + GUILayout.Label(met ? "●" : "○", dot, GUILayout.Width(14)); + } + EditorGUILayout.ObjectField($" {i + 1}.", cond, + typeof(ChainCondition), false); + EditorGUILayout.EndHorizontal(); + } + } + + EditorGUILayout.Space(8); + + // 动作列表 + EditorGUILayout.LabelField("执行动作(顺序)", EditorStyles.boldLabel); + if (_selected.actions != null) + { + for (int i = 0; i < _selected.actions.Length; i++) + { + EditorGUILayout.BeginHorizontal(); + GUILayout.Label($" {i + 1}.", GUILayout.Width(24)); + EditorGUILayout.ObjectField(_selected.actions[i], + typeof(ChainAction), false); + EditorGUILayout.EndHorizontal(); + } + } + + EditorGUILayout.EndScrollView(); + EditorGUILayout.EndVertical(); + } + + // ── 底部:执行日志 ──────────────────────────────────────────────── + private void DrawLogPanel() + { + EditorGUILayout.LabelField("执行日志(最近 20 条)", EditorStyles.boldLabel, + GUILayout.Height(18)); + var logStyle = new GUIStyle(EditorStyles.miniLabel) { wordWrap = false }; + foreach (var line in _executionLog.TakeLast(20)) + EditorGUILayout.LabelField(line, logStyle); + } + + // ── 运行时日志注入(由 EventChainManager 调用)──────────────────── + public static void LogExecution(string chainId, bool success) + { + _executionLog.Add( + $"[{System.DateTime.Now:HH:mm:ss}] {(success ? "✅" : "❌")} {chainId}"); + if (_executionLog.Count > 100) _executionLog.RemoveAt(0); + } + } +} +#endif +``` + +> **EventChainManager 集成**:在 `ExecuteChain` 协程末尾调用 `EventChainEditorWindow.LogExecution(chain.chainId, true)`(仅 `#if UNITY_EDITOR`)即可向窗口注入执行记录,无运行时开销。 diff --git a/Docs/Architecture/15_MapShopModule.md b/Docs/Architecture/15_MapShopModule.md new file mode 100644 index 0000000..90ca0b8 --- /dev/null +++ b/Docs/Architecture/15_MapShopModule.md @@ -0,0 +1,675 @@ +# 15 · 地图与商店模块 + +> **命名空间** `BaseGames.World.Map`、`BaseGames.World.Shop` +> **程序集** `BaseGames.World` +> **路径** `Assets/Scripts/World/Map/`、`Assets/Scripts/World/Shop/` +> **依赖** `BaseGames.Core.Events`、`BaseGames.Core.Save`、`BaseGames.Dialogue`(IInteractable) + +--- + +## 目录 + +1. [地图系统](#1-地图系统) + - [MapRoomDataSO](#11-maproomdataso) + - [MapManager](#12-mapmanager) + - [MapPanel(全屏地图 UI)](#13-mappanel) +2. [商店系统](#2-商店系统) + - [ShopItemSO](#21-shopitemso) + - [ShopInventorySO](#22-shopinventoryso) + - [ShopController](#23-shopcontroller) + - [ShopNPC](#24-shopnpc) +3. [ISaveable 集成](#3-isaveable-集成) +4. [事件频道清单](#4-事件频道清单) + +--- + +## 1. 地图系统 + +### 1.1 MapRoomDataSO + +```csharp +// 路径: Assets/Scripts/World/Map/MapRoomDataSO.cs +[CreateAssetMenu(menuName = "World/Map/RoomData")] +public class MapRoomDataSO : ScriptableObject +{ + [Header("基础信息")] + public string RoomId; // 与场景名一致,如 "Room_Forest_01" + public string RegionId; // 所属区域,如 "Forest" + public string DisplayName; // 可选,地图 Tooltip + + [Header("地图布局(格子坐标,单位:格)")] + public Vector2Int GridPosition; // 左下角坐标 + public Vector2Int GridSize; // 宽×高(格) + + [Header("房间轮廓纹理")] + public Texture2D RoomOutlineTex; // 用于地图 UI 显示房间形状(可空,回退到矩形格子) + + [Header("出口信息")] + public RoomExitData[] Exits; // 该房间所有出口定义 + + [Header("特殊标记")] + public bool IsBossRoom; + public bool IsSavePoint; + public bool IsShop; + public Sprite MapIconOverride; // null = 按 isXxx 自动选择图标 +} + +[Serializable] +public struct RoomExitData +{ + public string TargetRoomId; // 连接的目标房间 ID + public Vector2Int ExitGridPos; // 出口在格子地图上的位置 + public ExitDirection Direction; // 出口方向 +} + +public enum ExitDirection { Up, Down, Left, Right } + +// 全局地图数据库 SO(编辑器配置一次,不重复) +[CreateAssetMenu(menuName = "World/Map/MapDatabase")] +public class MapDatabaseSO : ScriptableObject +{ + public MapRoomDataSO[] AllRooms; + + // 运行时快速查找 + private Dictionary _index; + public MapRoomDataSO GetRoom(string roomId) + { + if (_index == null) + _index = AllRooms.ToDictionary(r => r.RoomId); + _index.TryGetValue(roomId, out var r); + return r; + } +} +``` + +### 1.2 MapManager + +```csharp +// 路径: Assets/Scripts/World/Map/MapManager.cs +[DefaultExecutionOrder(-700)] +public class MapManager : MonoBehaviour, ISaveable +{ + public static MapManager Instance { get; private set; } + + void Awake() + { + if (Instance != null && Instance != this) { Destroy(gameObject); return; } + Instance = this; + } + + [SerializeField] private MapDatabaseSO _database; + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onRoomEntered; // 订阅:房间进入时 + [SerializeField] private StringEventChannelSO _onMapUpdated; // 发布:房间发现时刷新地图 + + // 三级可见性: + // Unknown → 未进入过(默认) + // Explored → 进入过但未购买地图(显示轮廓/格子) + // Mapped → 已完整获取地图信息(显示图标/名称) + private HashSet _exploredRooms = new(); // 玩家踏入过 + private HashSet _mappedRooms = new(); // 完整地图信息(购买 MapFragment 或存档点揭示) + + // ── ISaveable ───────────────────────────────────────────────────── + public void OnSave(SaveData data) + { + data.Map.ExploredRooms = _exploredRooms.ToList(); + data.Map.MappedRooms = _mappedRooms.ToList(); + } + + public void OnLoad(SaveData data) + { + _exploredRooms = new HashSet(data.Map.ExploredRooms ?? new List()); + _mappedRooms = new HashSet(data.Map.MappedRooms ?? new List()); + } + + // ── 事件驱动房间发现 ───────────────────────────────────────────── + private void OnEnable() + => _onRoomEntered.OnEventRaised += OnRoomEntered; + private void OnDisable() + => _onRoomEntered.OnEventRaised -= OnRoomEntered; + + private void OnRoomEntered(string roomId) + { + bool changed = _exploredRooms.Add(roomId); + if (changed) _onMapUpdated.Raise(roomId); + } + + /// 标记为已完整获取地图信息(购买 MapFragment SO 触发)。 + public void SetMapped(string roomId) + { + _exploredRooms.Add(roomId); + if (_mappedRooms.Add(roomId)) + _onMapUpdated.Raise(roomId); + } + + public bool IsExplored(string roomId) => _exploredRooms.Contains(roomId); + public bool IsMapped(string roomId) => _mappedRooms.Contains(roomId); + // 向后兼容:仅检查已探索 + public bool IsDiscovered(string roomId) => _exploredRooms.Contains(roomId); +} +``` + +### 1.3 MapPanel + +```csharp +// 路径: Assets/Scripts/World/Map/MapPanel.cs +// 全屏地图 UI,由 UIManager PanelStack 管理 +public class MapPanel : MonoBehaviour +{ + [SerializeField] private MapDatabaseSO _database; + [SerializeField] private RectTransform _roomContainer; // 格子图放置根节点 + [SerializeField] private MapRoomCellUI _cellPrefab; // 地图格子预制 + + [Header("图标 Sprites")] + [SerializeField] private Sprite _iconSavePoint; + [SerializeField] private Sprite _iconBossRoom; + [SerializeField] private Sprite _iconShop; + [SerializeField] private Sprite _iconPlayerPos; + + [Header("颜色")] + [SerializeField] private Color _colorDiscovered = Color.white; + [SerializeField] private Color _colorUndiscovered = Color.black; + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onMapUpdated; // 房间发现时刷新 + + private Dictionary _cells = new(); + + private void OnEnable() + { + BuildGrid(); + _onMapUpdated.OnEventRaised += OnMapUpdated; + } + + private void OnDisable() + => _onMapUpdated.OnEventRaised -= OnMapUpdated; + + // 根据 MapDatabaseSO 生成格子 UI + private void BuildGrid() + { + foreach (var room in _database.AllRooms) + { + var cell = Instantiate(_cellPrefab, _roomContainer); + cell.Setup(room, MapManager.Instance.IsDiscovered(room.RoomId)); + _cells[room.RoomId] = cell; + } + } + + private void OnMapUpdated(string roomId) + { + if (_cells.TryGetValue(roomId, out var cell)) + cell.SetDiscovered(true); + } +} + +// 单个地图格子 UI 组件 +public class MapRoomCellUI : MonoBehaviour +{ + [SerializeField] private Image _bg; + [SerializeField] private Image _icon; + + public void Setup(MapRoomDataSO room, bool discovered) { /* 设置 grid 位置+颜色 */ } + public void SetDiscovered(bool v) => _bg.color = v ? Color.white : Color.black; +} +``` + +### 1.4 MapPlayerTracker + +```csharp +// 路径: Assets/Scripts/World/Map/MapPlayerTracker.cs +// 将玩家世界坐标转换为地图像素/格子坐标,供 MapPanel 显示玩家位置图标 +public class MapPlayerTracker : MonoBehaviour +{ + [SerializeField] private Transform _playerTransform; + [SerializeField] private MapDatabaseSO _database; + [SerializeField] private MapManager _mapManager; + + [Header("世界坐标 → 格子坐标换算参数")] + [SerializeField] private float _worldUnitsPerCell = 18f; // 1 格 = N 世界单位 + + /// 返回玩家当前所在房间 ID(用于地图高亮当前房间)。 + public string CurrentRoomId { get; private set; } + + /// 玩家在当前格子房间内的归一化坐标(0~1)。 + public Vector2 NormalizedPositionInRoom { get; private set; } + + private void LateUpdate() + { + if (_playerTransform == null) return; + Vector2 worldPos = _playerTransform.position; + Vector2Int cellPos = WorldToCell(worldPos); + + // 遍历已知房间,找到包含该格子的房间 + foreach (var room in _database.AllRooms) + { + var rect = new RectInt(room.GridPosition, room.GridSize); + if (rect.Contains(cellPos)) + { + CurrentRoomId = room.RoomId; + Vector2 inRoom = (Vector2)(cellPos - room.GridPosition); + NormalizedPositionInRoom = new Vector2( + inRoom.x / room.GridSize.x, + inRoom.y / room.GridSize.y); + return; + } + } + } + + private Vector2Int WorldToCell(Vector2 worldPos) + => new Vector2Int( + Mathf.FloorToInt(worldPos.x / _worldUnitsPerCell), + Mathf.FloorToInt(worldPos.y / _worldUnitsPerCell)); +} +``` + +### 1.5 MapPin 系统 + +```csharp +// 路径: Assets/Scripts/World/Map/MapPin.cs +/// 玩家在地图上放置的自定义标记。 +[Serializable] +public class MapPin +{ + public string RoomId; // 所在房间 ID + public Vector2 NormalizedPos; // 房间内归一化位置(0~1) + public PinType Type; + public string Note; // 玩家文字备注(可选,最多 64 字符) +} + +public enum PinType +{ + Marker, // 通用标记 + Chest, // 宝箱/收藏品 + Enemy, // 危险/敌人 + Path, // 路径指引 + Note, // 笔记 +} + +// MapPinManager 负责增删查;存档通过 ISaveable 持久化 +public class MapPinManager : MonoBehaviour, ISaveable +{ + private List _pins = new(); + + public IReadOnlyList Pins => _pins; + + public void AddPin(MapPin pin) => _pins.Add(pin); + public void RemovePin(MapPin pin) => _pins.Remove(pin); + + public void OnSave(SaveData data) => data.Map.Pins = _pins; + public void OnLoad(SaveData data) => _pins = data.Map.Pins ?? new List(); +} +``` + +--- + +## 2. 商店系统 + +### 2.1 ShopItemSO + +```csharp +// 路径: Assets/Scripts/World/Shop/ShopItemSO.cs +[CreateAssetMenu(menuName = "World/Shop/ShopItem")] +public class ShopItemSO : ScriptableObject +{ + [Header("标识")] + public string ItemId; + public string DisplayName; + [TextArea(2, 5)] + public string Description; + public Sprite Icon; + + [Header("价格")] + public int BasePrice; + public bool IsUnique; // 购买一次后永久从库存移除 + + [Header("商品类型")] + public ShopItemType ItemType; + + // 按 ItemType 填写以下字段(其余留空) + public int HealthRestoreAmount; // HealthRestoration + public CharmSO CharmReference; // CharmItem + public string KeyItemId; // KeyItem + public int MaxPurchaseCount = -1; // -1 = 无限 +} + +public enum ShopItemType +{ + HealthRestoration, + CharmItem, + KeyItem, + ConsumableBuff, + MapFragment, +} +``` + +### 2.2 ShopInventorySO + +```csharp +// 路径: Assets/Scripts/World/Shop/ShopInventorySO.cs +[CreateAssetMenu(menuName = "World/Shop/ShopInventory")] +public class ShopInventorySO : ScriptableObject +{ + public string ShopId; // 全局唯一 + public List DefaultInventory; // 初始商品列表 + public int MaxDisplaySlots = 6; // UI 最多同时显示的商品格数 + public RestockPolicy RestockPolicy = RestockPolicy.Never; + public Sprite KeeperPortrait; + public string KeeperName; +} + +/// 库存补货时机策略。 +public enum RestockPolicy +{ + Never, // 永不补货(唯一商品卖完即消失) + OnSavePoint, // 激活存档点时补货 + OnBossDefeat, // 击败 Boss 后补货 + Periodic, // 周期性补货(由 ShopController 定时或条件检查) +} +``` + +### 2.3 ShopController + +```csharp +// 路径: Assets/Scripts/World/Shop/ShopController.cs +public class ShopController : MonoBehaviour, ISaveable +{ + [SerializeField] private ShopInventorySO _inventory; + [SerializeField] private ShopPanel _shopPanel; + + [Header("Event Channels")] + [SerializeField] private StringEventChannelSO _onShopOpen; // Raise 商店开启 + [SerializeField] private ShopPurchaseEventChannelSO _onItemPurchased; // Raise → PlayerStats 扣 Geo + [SerializeField] private StringEventChannelSO _onBossDefeated; // 订阅 → 可能触发补货 + [SerializeField] private VoidEventChannelSO _onSavePointActivated; // 订阅 → 可能触发补货 + + // key = itemId,value = 已购次数 + private Dictionary _purchaseCounts = new(); + private HashSet _soldUniqueItems = new(); + + private void OnEnable() + { + if (_inventory.RestockPolicy == RestockPolicy.OnBossDefeat && _onBossDefeated != null) + _onBossDefeated.OnEventRaised += _ => Restock(); + if (_inventory.RestockPolicy == RestockPolicy.OnSavePoint && _onSavePointActivated != null) + _onSavePointActivated.OnEventRaised += Restock; + } + + private void OnDisable() + { + if (_onBossDefeated != null) _onBossDefeated.OnEventRaised -= _ => Restock(); + if (_onSavePointActivated != null) _onSavePointActivated.OnEventRaised -= Restock; + } + + public void Open() + { + _shopPanel.Show(GetAvailableItems(), this); + _onShopOpen.Raise(_inventory.ShopId); + } + public void Close() => _shopPanel.Hide(); + + public List GetAvailableItems() + { + return _inventory.DefaultInventory + .Take(_inventory.MaxDisplaySlots) + .Where(item => + !_soldUniqueItems.Contains(item.ItemId) && + (item.MaxPurchaseCount < 0 || GetPurchaseCount(item.ItemId) < item.MaxPurchaseCount)) + .ToList(); + } + + /// + /// 按 RestockPolicy 补货:重置非唯一商品的购买次数(唯一商品已售出不恢复)。 + /// + public void Restock() + { + var nonUniqueIds = _inventory.DefaultInventory + .Where(i => !i.IsUnique) + .Select(i => i.ItemId); + + foreach (var id in nonUniqueIds) + _purchaseCounts.Remove(id); + } + + // 由 ShopPanel 的购买按钮调用 + public bool TryPurchase(ShopItemSO item, int playerGeo) + { + if (playerGeo < item.BasePrice) return false; + if (_soldUniqueItems.Contains(item.ItemId)) return false; + + // 扣 Geo(通过事件频道,PlayerStats 监听) + _onItemPurchased.Raise(new ShopPurchaseEvent { Item = item, Price = item.BasePrice }); + + // 更新库存 + _purchaseCounts[item.ItemId] = GetPurchaseCount(item.ItemId) + 1; + if (item.IsUnique) _soldUniqueItems.Add(item.ItemId); + + return true; + } + + private int GetPurchaseCount(string id) + => _purchaseCounts.TryGetValue(id, out var c) ? c : 0; + + // ── ISaveable ──────────────────────────────────────────────────── + public void OnSave(SaveData data) + { + if (!data.Shops.ShopRecords.ContainsKey(_inventory.ShopId)) + data.Shops.ShopRecords[_inventory.ShopId] = new ShopRecord(); + + var record = data.Shops.ShopRecords[_inventory.ShopId]; + record.SoldUniqueItems = _soldUniqueItems.ToList(); + record.PurchaseCounts = new Dictionary(_purchaseCounts); + } + + public void OnLoad(SaveData data) + { + if (data.Shops.ShopRecords.TryGetValue(_inventory.ShopId, out var record)) + { + _soldUniqueItems = new HashSet(record.SoldUniqueItems ?? new List()); + _purchaseCounts = record.PurchaseCounts ?? new Dictionary(); + } + } +} +``` + +### 2.4 ShopNPC + +```csharp +// 路径: Assets/Scripts/World/Shop/ShopNPC.cs +public class ShopNPC : MonoBehaviour, IInteractable +{ + [SerializeField] private ShopController _shopController; + [SerializeField] private DialogueSequenceSO _greetDialogue; // 可选开场白 + [SerializeField] private DialogueManager _dialogueManager; + [SerializeField] private VoidEventChannelSO _onDialogueEnded; // 订阅:对话结束后开商店 + + public bool CanInteract => true; + public string InteractPrompt => "购物"; + + public void Interact(Transform player) + { + if (_greetDialogue != null) + { + _dialogueManager.StartDialogue(_greetDialogue); + // 等对话结束后再 Open Shop:订阅 EVT_DialogueEnded 一次性 + void OpenAfterDialogue() + { + _shopController.Open(); + _onDialogueEnded.OnEventRaised -= OpenAfterDialogue; + } + _onDialogueEnded.OnEventRaised += OpenAfterDialogue; + } + else + { + _shopController.Open(); + } + } + + public void OnPlayerEnterRange(Transform player) { } + public void OnPlayerExitRange() { } +} +``` + +--- + +## 3. ISaveable 集成 + +| 组件 | SaveData 目标字段 | +|------|-----------------| +| `MapManager` | `SaveData.Map.DiscoveredRooms` | +| `ShopController` | `SaveData.ExtensionData["shops"]` (JObject, key=ShopId) | + +--- + +## 4. 事件频道清单 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_RoomEntered` | `StringEventChannelSO` | `RoomController` | `MapManager`(标记发现)| +| `EVT_MapUpdated` | `StringEventChannelSO` | `MapManager` | `MapPanel`(刷新格子)| +| `EVT_ShopOpened` | `StringEventChannelSO`(shopId) | `ShopController.Open()` | `HUDController`(隐藏 HUD)、`InputReaderSO`(切 UI)| +| `EVT_ShopClosed` | `VoidEventChannelSO` | `ShopController` | `HUDController`(恢复 HUD)| +| `EVT_ItemPurchased` | `ShopPurchaseEventChannelSO` | `ShopController` | `PlayerStats`(扣 Geo)、`AchievementManager`(购买成就)| + +--- + +## 5. MapRoomDataEditor — Scene Handles 可视化编辑 + +> **P3 优化**:`MapRoomDataSO` 的 `GridPosition` / `GridSize` 依赖手动输入整数,易与实际场景房间大小错位。`MapRoomDataEditor` 在 Scene View 中叠加可拖拽边界框,直接将世界坐标映射为格子坐标,消除手动对齐误差。 + +```csharp +// 路径: Assets/Editor/Map/MapRoomDataEditor.cs +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace BaseGames.Editor.Map +{ + [CustomEditor(typeof(MapRoomDataSO))] + public class MapRoomDataEditor : UnityEditor.Editor + { + // 每格对应的世界单位大小(与 MapPanel 的 cellSize 一致) + private const float CELL_SIZE = 1f; + + private static readonly Color FillColor = new(0.2f, 0.6f, 1f, 0.15f); + private static readonly Color OutlineColor = new(0.2f, 0.6f, 1f, 0.9f); + private static readonly Color HandleColor = new(1f, 0.85f, 0.2f, 1f); + + private MapRoomDataSO _target; + + private void OnEnable() => _target = (MapRoomDataSO)target; + + // ── Inspector 覆盖:保留默认 Inspector 外加 "Edit in Scene" 按钮 ── + public override void OnInspectorGUI() + { + DrawDefaultInspector(); + EditorGUILayout.Space(8); + + EditorGUILayout.HelpBox( + "在 Scene View 中可直接拖拽房间角点调整 GridPosition / GridSize。\n" + + "需要 Scene View 处于激活状态。", + MessageType.Info); + + if (GUILayout.Button("居中 Scene View 到此房间", GUILayout.Height(28))) + FocusSceneViewOnRoom(); + } + + // ── Scene GUI:绘制可拖拽边界框 ────────────────────────────────── + private void OnSceneGUI() + { + if (_target == null) return; + + var origin = (Vector3)(Vector2)_target.GridPosition * CELL_SIZE; + var size = (Vector3)(Vector2)_target.GridSize * CELL_SIZE; + + // 填充矩形 + Handles.DrawSolidRectangleWithOutline( + new Rect(origin.x, origin.y, size.x, size.y), + FillColor, OutlineColor); + + // 房间 ID 标签(居中) + Handles.Label(origin + size * 0.5f, _target.RoomId, + new GUIStyle(GUI.skin.label) + { + alignment = TextAnchor.MiddleCenter, + fontStyle = FontStyle.Bold, + normal = { textColor = Color.white } + }); + + // ── 四角 FreeMoveHandle ────────────────────────────────────── + EditorGUI.BeginChangeCheck(); + + // 左下角(= GridPosition) + var newBL = DragHandle(origin, "BL"); + // 右上角(= GridPosition + GridSize) + var newTR = DragHandle(origin + size, "TR"); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(_target, "Resize MapRoom"); + + // 保证 BL ≤ TR + var bl = new Vector2( + Mathf.Min(newBL.x, newTR.x), + Mathf.Min(newBL.y, newTR.y)); + var tr = new Vector2( + Mathf.Max(newBL.x, newTR.x), + Mathf.Max(newBL.y, newTR.y)); + + _target.GridPosition = ToGrid(bl); + _target.GridSize = ToGrid(tr) - _target.GridPosition; + // GridSize 最小 1×1 + _target.GridSize = new Vector2Int( + Mathf.Max(1, _target.GridSize.x), + Mathf.Max(1, _target.GridSize.y)); + + EditorUtility.SetDirty(_target); + } + } + + // ── 拖拽把手(黄色圆点)──────────────────────────────────────── + private static Vector3 DragHandle(Vector3 pos, string id) + { + float size = HandleUtility.GetHandleSize(pos) * 0.12f; + var oldColor = Handles.color; + Handles.color = HandleColor; + var result = Handles.FreeMoveHandle(pos, size, Vector3.zero, Handles.DotHandleCap); + Handles.color = oldColor; + return SnapToGrid(result); + } + + // 吸附到格子 + private static Vector3 SnapToGrid(Vector3 world) + => new(Mathf.Round(world.x / CELL_SIZE) * CELL_SIZE, + Mathf.Round(world.y / CELL_SIZE) * CELL_SIZE, + 0f); + + private static Vector2Int ToGrid(Vector2 world) + => new(Mathf.RoundToInt(world.x / CELL_SIZE), + Mathf.RoundToInt(world.y / CELL_SIZE)); + + // ── Scene View 定位 ─────────────────────────────────────────── + private void FocusSceneViewOnRoom() + { + var sv = SceneView.lastActiveSceneView; + if (sv == null) return; + var center = ((Vector2)_target.GridPosition + + (Vector2)_target.GridSize * 0.5f) * CELL_SIZE; + sv.pivot = new Vector3(center.x, center.y, 0f); + sv.size = Mathf.Max(_target.GridSize.x, _target.GridSize.y) * CELL_SIZE * 1.5f; + sv.Repaint(); + } + } +} +#endif +``` + +**工作流**: + +1. 在 Project 面板选中 `MapRoomDataSO` 资产(或在 Inspector 固定它) +2. 打开 Scene View,即可看到蓝色房间边界框 + 黄色角点把手 +3. 拖动左下角把手调整房间起点;拖动右上角把手调整房间大小 +4. 所有拖动操作自动吸附到 1 格精度,并支持 Undo +5. 点击 **"居中 Scene View 到此房间"** 可快速定位视图 + +> **`CELL_SIZE` 配置**:若地图格子实际对应世界坐标不是 1 单位(如 16px 像素游戏 = 0.16 世界单位),修改 `MapRoomDataEditor` 顶部 `const float CELL_SIZE` 即可,无需改运行时代码。 diff --git a/Docs/Architecture/16_SupportingModules.md b/Docs/Architecture/16_SupportingModules.md new file mode 100644 index 0000000..6927419 --- /dev/null +++ b/Docs/Architecture/16_SupportingModules.md @@ -0,0 +1,1183 @@ +# 16 · 支撑模块 + +> **命名空间** `BaseGames.Localization`、`BaseGames.Achievements`、`BaseGames.Debug`、`BaseGames.Accessibility` +> **程序集** 各自独立 asmdef,均为可选模块(`#if UNITY_EDITOR` / `#if PLATFORM_*` 条件编译) +> **路径** `Assets/Scripts/Support/` + +--- + +## 目录 + +1. [LocalizationManager](#1-localizationmanager) +2. [AchievementManager](#2-achievementmanager) +3. [PlatformManager(Steam 集成)](#3-platformmanager) +4. [DebugCheatSystem](#4-debugcheatsystem) +5. [AntiSoftlockSystem](#5-antisoftlocksystem) +6. [AccessibilityManager](#6-accessibilitymanager) +7. [支撑事件频道清单](#7-支撑事件频道清单) + +--- + +## 1. LocalizationManager + +```csharp +// 路径: Assets/Scripts/Support/Localization/LocalizationManager.cs +// Unity Localization 包(com.unity.localization)的轻量封装 +// 游戏内所有文本通过此类获取,不直接引用 LocalizationSettings +public static class LocalizationManager +{ + // 当前语言 + public static Locale ActiveLocale => LocalizationSettings.SelectedLocale; + + // 同步获取本地化字符串(Locale 已完全加载时使用) + public static string Get(string tableKey, string entryKey) + { + var op = LocalizationSettings.StringDatabase.GetLocalizedString(tableKey, entryKey); + return op.IsDone ? op.Result : entryKey; + } + + // 异步获取(在等待 Locale 初始化的场景中使用) + public static async Task GetAsync(string tableKey, string entryKey) + { + var op = LocalizationSettings.StringDatabase.GetLocalizedStringAsync(tableKey, entryKey); + return await op.Task; + } + + // 切换语言(由 SettingsPanelController 的语言下拉框调用) + public static void SetLocale(string localeCode) + { + var locale = LocalizationSettings.AvailableLocales.Locales + .FirstOrDefault(l => l.Identifier.Code == localeCode); + if (locale != null) + LocalizationSettings.SelectedLocale = locale; + } + + // 快捷常量:String Table 名称 + public const string Table_UI = "UI"; + public const string Table_Dialogue = "Dialogue"; + public const string Table_Items = "Items"; + public const string Table_Enemies = "Enemies"; +} +``` + +--- + +## 1.1 LanguageManagerSO — 语言切换 SO 单例 + +> **Design 来源**:[22_LocalizationSystem](../Design/22_LocalizationSystem.md) §4 + +`LocalizationManager`(静态工具类,见 §1)负责文本查询;`LanguageManagerSO` 负责持久化语言偏好并在设置界面切换语言。 + +```csharp +// 路径: Assets/ScriptableObjects/Localization/LanguageManager.asset +// SO 单例:通过 [SerializeField] 注入到语言设置面板等消费组件 +// 消费者:SettingsPanelController、DialogueLocalizationBridge 等 +[CreateAssetMenu(menuName = "Localization/LanguageManager")] +public class LanguageManagerSO : ScriptableObject +{ + // PlayerPrefs 持久化键 + private const string PrefKey = "SelectedLocale"; + + /// 切换语言并持久化选择 + public void SetLocale(string localeCode) + { + var locale = LocalizationSettings.AvailableLocales.Locales + .FirstOrDefault(l => l.Identifier.Code == localeCode); + if (locale != null) + { + LocalizationSettings.SelectedLocale = locale; + PlayerPrefs.SetString(PrefKey, localeCode); + } + } + + /// 获取当前语言代码(默认 zh-CN) + public string GetCurrentLocaleCode() + => LocalizationSettings.SelectedLocale?.Identifier.Code ?? "zh-CN"; + + /// 游戏启动时从 PlayerPrefs 读取上次选择的语言 + public void LoadSavedLocale() + => SetLocale(PlayerPrefs.GetString(PrefKey, "zh-CN")); +} +``` + +> **注意**:静态 `LocalizationManager.SetLocale()` 仅改变运行时语言,不持久化;`LanguageManagerSO.SetLocale()` 两者兼顾,设置界面应使用后者。 + +--- + +## 2. AchievementManager + +### 2.1 AchievementSO — 成就数据 + +```csharp +// 路径: Assets/Scripts/Support/Achievements/AchievementSO.cs +namespace BaseGames.Achievement +{ + [CreateAssetMenu(menuName = "Achievement/Achievement")] + public class AchievementSO : ScriptableObject + { + [Header("基础信息")] + public string achievementId; // 全局唯一 ID,如 "Ach_SlayBoss_Forest" + public string displayName; + [TextArea(2, 5)] + public string description; + [TextArea(2, 5)] + public string hiddenDescription; // 未解锁时显示的提示(空=完全隐藏) + + [Header("外观")] + public Sprite icon; + public Sprite hiddenIcon; // 未解锁时显示的占位图标 + + [Header("分类")] + public AchievementType type; // 故事/收集/挑战/隐藏 + public AchievementTier tier; // 铜/银/金(展示用) + + [Header("解锁条件")] + public AchievementCondition[] conditions; // AND 逻辑:全部满足才解锁 + + [Header("奖励(可选)")] + public bool grantsNotch; // 解锁额外 Notch 槽 + } + + public enum AchievementType { Story, Collection, Challenge, Hidden } + public enum AchievementTier { Bronze, Silver, Gold } +} +``` + +### 2.2 AchievementCondition — ScriptableObject 策略模式 + +```csharp +// 路径: Assets/Scripts/Support/Achievements/AchievementCondition.cs +namespace BaseGames.Achievement +{ + /// + /// 成就解锁条件抽象基类。每种条件一个 SO 子类,可自由组合。 + /// + public abstract class AchievementCondition : ScriptableObject + { + public abstract void RegisterListeners(AchievementManager manager); + public abstract void UnregisterListeners(AchievementManager manager); + public abstract bool IsMet(AchievementRuntimeState state); + } +} +``` + +内置条件类型一览: + +| SO 子类 | 参数 | 说明 | +|---------|------|------| +| `DefeatedBossCondition` | `bossId: string` | 击败指定 Boss | +| `DefeatedAllBossesCondition` | — | 击败全部 Boss | +| `EnteredRegionCondition` | `regionId: RegionId` | 到达特定区域 | +| `MapExplorationCondition` | `minPercent: float` | 探索地图百分比 | +| `CollectedItemCondition` | `itemId: string` | 收集指定物品 | +| `CollectedAllCharmsCondition` | — | 集满全部 Charm | +| `UnlockedAllAbilitiesCondition` | — | 解锁全部能力 | +| `NoHealRunCondition` | — | 不使用治疗通关 | +| `TimedBossKillCondition` | `bossId`, `maxSeconds` | 限时击败 Boss | +| `ParryCountCondition` | `requiredCount: int` | 弹反指定次数 | +| `NailClashCountCondition` | `requiredCount: int` | 拼刀指定次数 | +| `EventTriggeredCondition` | `eventChannelSO` | 监听任意 VoidEvent | + +```csharp +// 示例:DefeatedBossCondition +[CreateAssetMenu(menuName = "Achievement/Condition/DefeatedBoss")] +public class DefeatedBossCondition : AchievementCondition +{ + public string bossId; + + public override void RegisterListeners(AchievementManager manager) + => manager.OnBossDefeated += Evaluate; + public override void UnregisterListeners(AchievementManager manager) + => manager.OnBossDefeated -= Evaluate; + + void Evaluate(string defeatedBossId, AchievementRuntimeState state) + { + if (defeatedBossId == bossId) state.SetConditionMet(this); + } + + public override bool IsMet(AchievementRuntimeState state) + => state.IsConditionMet(this); +} +``` + +### 2.3 AchievementManager — 运行时管理器 + +```csharp +// 路径: Assets/Scripts/Support/Achievements/AchievementManager.cs +namespace BaseGames.Achievement +{ + public class AchievementManager : MonoBehaviour, ISaveable + { + [Header("成就列表")] + [SerializeField] AchievementSO[] _allAchievements; + + [Header("事件频道(订阅)")] + [SerializeField] StringEventChannelSO _onBossDefeated; + [SerializeField] StringEventChannelSO _onCollectiblePickedUp; + [SerializeField] IntEventChannelSO _onAbilityUnlocked; + [SerializeField] StringEventChannelSO _onRoomEntered; + [SerializeField] VoidEventChannelSO _onParrySuccess; + [SerializeField] VoidEventChannelSO _onNailClash; + + [Header("事件频道(发布)")] + [SerializeField] AchievementEventChannelSO _onAchievementUnlocked; + + // 内部中继 C# 事件,供 AchievementCondition 子类订阅 + public event Action OnBossDefeated; + public event Action OnCollectiblePickedUp; + public event Action OnAbilityUnlocked; + public event Action OnRoomEntered; + public event Action OnParrySuccess; + public event Action OnNailClash; + + readonly Dictionary _states = new(); + + void Awake() + { + foreach (var ach in _allAchievements) + _states[ach.achievementId] = new AchievementRuntimeState(ach); + } + + void OnEnable() + { + _onBossDefeated.OnEventRaised += id => { OnBossDefeated?.Invoke(id); EvaluateAll(); }; + _onCollectiblePickedUp.OnEventRaised += id => { OnCollectiblePickedUp?.Invoke(id); EvaluateAll(); }; + _onAbilityUnlocked.OnEventRaised += v => { OnAbilityUnlocked?.Invoke(v); EvaluateAll(); }; + _onRoomEntered.OnEventRaised += id => { OnRoomEntered?.Invoke(id); EvaluateAll(); }; + _onParrySuccess.OnEventRaised += () => { OnParrySuccess?.Invoke(); EvaluateAll(); }; + _onNailClash.OnEventRaised += () => { OnNailClash?.Invoke(); EvaluateAll(); }; + + foreach (var ach in _allAchievements) + foreach (var cond in ach.conditions) + cond.RegisterListeners(this); + } + + void OnDisable() + { + foreach (var ach in _allAchievements) + foreach (var cond in ach.conditions) + cond.UnregisterListeners(this); + } + + void EvaluateAll() + { + foreach (var ach in _allAchievements) + { + var state = _states[ach.achievementId]; + if (state.IsUnlocked) continue; + if (Array.TrueForAll(ach.conditions, c => c.IsMet(state))) + Unlock(ach, state); + } + } + + void Unlock(AchievementSO ach, AchievementRuntimeState state) + { + state.IsUnlocked = true; + _onAchievementUnlocked.Raise(ach); // → AchievementToast + Analytics + + // Steam 平台同步 +#if STEAMWORKS_NET + PlatformManager.UnlockAchievement(ach.achievementId); +#endif + } + + // ── ISaveable ──────────────────────────────────────────────────── + public void OnSave(SaveData data) + { + data.Achievements.Unlocked = _states + .Where(kv => kv.Value.IsUnlocked) + .Select(kv => kv.Key) + .ToList(); + } + + public void OnLoad(SaveData data) + { + foreach (var id in data.Achievements.Unlocked) + if (_states.TryGetValue(id, out var state)) + state.IsUnlocked = true; + } + } + + public class AchievementRuntimeState + { + public bool IsUnlocked { get; set; } + readonly HashSet _metConditions = new(); + + public AchievementRuntimeState(AchievementSO ach) + { + // 由 OnLoad 驱动;Awake 时默认未解锁 + } + + public void SetConditionMet(AchievementCondition cond) => _metConditions.Add(cond); + public bool IsConditionMet(AchievementCondition cond) => _metConditions.Contains(cond); + } +} +``` + +### 2.4 AchievementConditionDrawer — 自定义 PropertyDrawer + +> **痛点**:`AchievementSO.conditions` 是 `AchievementCondition[]`(ScriptableObject 子类数组),默认 Inspector 每个元素仅显示对象引用字段,策划无法在 Inspector 中一眼看出当前配置了哪些条件及其参数。本 Drawer 内联展示各 Condition SO 的关键字段,并在头部显示条件类型的中文名。 + +```csharp +// 路径: Assets/Scripts/Editor/Achievements/AchievementSOEditor.cs +// 程序集: BaseGames.Editor(Editor Only) +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace BaseGames.Editor.Achievements +{ + [CustomEditor(typeof(AchievementSO))] + public class AchievementSOEditor : UnityEditor.Editor + { + private static readonly Dictionary _conditionLabels = new() + { + { typeof(DefeatedBossCondition), "击败 Boss" }, + { typeof(DefeatedAllBossesCondition), "击败全部 Boss" }, + { typeof(EnteredRegionCondition), "到达区域" }, + { typeof(MapExplorationCondition), "地图探索 %" }, + { typeof(CollectedItemCondition), "收集物品" }, + { typeof(CollectedAllCharmsCondition), "集满全部 Charm" }, + { typeof(UnlockedAllAbilitiesCondition), "解锁全部能力" }, + { typeof(NoHealRunCondition), "无治疗通关" }, + { typeof(TimedBossKillCondition), "限时击败 Boss" }, + { typeof(ParryCountCondition), "弹反 N 次" }, + { typeof(NailClashCountCondition), "拼刀 N 次" }, + { typeof(EventTriggeredCondition), "监听事件" }, + }; + + private SerializedProperty _conditionsProp; + + void OnEnable() => _conditionsProp = serializedObject.FindProperty("conditions"); + + public override void OnInspectorGUI() + { + serializedObject.Update(); + DrawPropertiesExcluding(serializedObject, "conditions"); + + EditorGUILayout.Space(8); + EditorGUILayout.LabelField("解锁条件(AND)", EditorStyles.boldLabel); + + for (int i = 0; i < _conditionsProp.arraySize; i++) + { + var elemProp = _conditionsProp.GetArrayElementAtIndex(i); + var condSO = elemProp.objectReferenceValue as AchievementCondition; + string label = condSO != null && _conditionLabels.TryGetValue(condSO.GetType(), out var n) + ? $"{n} [{condSO.name}]" : (condSO?.GetType().Name ?? "(未指定)"); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(label, EditorStyles.boldLabel); + + // 如果是关联 SO,提供快速 Ping 按钮 + if (condSO != null && GUILayout.Button("↗", GUILayout.Width(24))) + EditorGUIUtility.PingObject(condSO); + + // 删除按钮 + if (GUILayout.Button("✕", GUILayout.Width(24))) + { + _conditionsProp.DeleteArrayElementAtIndex(i); + serializedObject.ApplyModifiedProperties(); + break; + } + EditorGUILayout.EndHorizontal(); + + // 内联展开 SO 的可序列化字段(只读) + if (condSO != null) + { + var innerSO = new SerializedObject(condSO); + innerSO.Update(); + var prop = innerSO.GetIterator(); + prop.NextVisible(true); // 跳过 m_Script + while (prop.NextVisible(false)) + EditorGUILayout.PropertyField(prop, true); + innerSO.ApplyModifiedProperties(); + } + else + { + EditorGUILayout.PropertyField(elemProp, GUIContent.none); + } + EditorGUILayout.EndVertical(); + EditorGUILayout.Space(2); + } + + if (GUILayout.Button("+ 添加条件 SO")) + _conditionsProp.arraySize++; + + serializedObject.ApplyModifiedProperties(); + } + } +} +#endif +``` + +--- + +## 3. PlatformManager(ServiceLocator 模式) + +> **参见** Design/46_PlatformIntegration.md §2 — 完整接口规范 + +```csharp +// 路径: Assets/Scripts/Support/Platform/IPlatformService.cs +namespace BaseGames.Platform +{ + /// + /// 平台服务抽象接口。所有游戏逻辑通过此接口调用,不直接引用 Steamworks 等 SDK 类。 + /// + public interface IPlatformService + { + // ── 成就 ───────────────────────────────────────────────────────── + void UnlockAchievement(string achievementId); + bool IsAchievementUnlocked(string achievementId); + + // ── 统计数据(用于成就进度跟踪)────────────────────────────────── + void SetStat(string statId, int value); + void IncrementStat(string statId, int increment = 1); + int GetStat(string statId); + + // ── 云存档 ──────────────────────────────────────────────────────── + Task CloudSaveAsync(string fileName, byte[] data); + Task CloudLoadAsync(string fileName); + bool IsCloudAvailable { get; } + + // ── Rich Presence ──────────────────────────────────────────────── + void SetRichPresence(string key, string value); + void ClearRichPresence(); + + // ── 振动 ────────────────────────────────────────────────────────── + void Rumble(float lowFreq, float highFreq, float duration); + void StopRumble(); + + // ── 生命周期 ────────────────────────────────────────────────────── + void Initialize(); + void RunCallbacks(); // 每帧 Update 中调用,处理 SDK 回调 + void Shutdown(); + } +} +``` + +```csharp +// 路径: Assets/Scripts/Support/Platform/SteamPlatformService.cs +#if UNITY_STANDALONE && STEAMWORKS_NET +namespace BaseGames.Platform +{ + public class SteamPlatformService : IPlatformService + { + public bool IsCloudAvailable => SteamManager.Initialized && SteamRemoteStorage.IsCloudEnabledForApp(); + + // ── 成就 ────────────────────────────────────────────────────── + public void UnlockAchievement(string id) + { + if (!SteamManager.Initialized) return; + SteamUserStats.SetAchievement(id); + SteamUserStats.StoreStats(); + } + public bool IsAchievementUnlocked(string id) + { + SteamUserStats.GetAchievement(id, out bool unlocked); + return unlocked; + } + + // ── 统计 ────────────────────────────────────────────────────── + public void SetStat(string id, int v) + { + if (!SteamManager.Initialized) return; + SteamUserStats.SetStat(id, v); + } + public void IncrementStat(string id, int inc = 1) + { + int cur = GetStat(id); + SetStat(id, cur + inc); + } + public int GetStat(string id) + { + SteamUserStats.GetStat(id, out int v); + return v; + } + + // ── 云存档(二进制,UTF-8 序列化在 SaveSystem 层完成)────────── + public async Task CloudSaveAsync(string fileName, byte[] data) + { + if (!IsCloudAvailable) return false; + return await Task.Run(() => + SteamRemoteStorage.FileWrite(fileName, data, data.Length)); + } + public async Task CloudLoadAsync(string fileName) + { + if (!IsCloudAvailable || !SteamRemoteStorage.FileExists(fileName)) + return null; + int size = SteamRemoteStorage.GetFileSize(fileName); + var buf = new byte[size]; + await Task.Run(() => SteamRemoteStorage.FileRead(fileName, buf, size)); + return buf; + } + + // ── Rich Presence ────────────────────────────────────────────── + public void SetRichPresence(string k, string v) => SteamFriends.SetRichPresence(k, v); + public void ClearRichPresence() => SteamFriends.ClearRichPresence(); + + // ── 振动 ────────────────────────────────────────────────────── + public void Rumble(float l, float h, float dur) + { + ushort lo = (ushort)(l * 65535); + ushort hi = (ushort)(h * 65535); + SteamController.TriggerVibration(SteamController.GetConnectedControllers()[0], lo, hi); + } + public void StopRumble() => Rumble(0f, 0f, 0f); + + // ── 生命周期 ─────────────────────────────────────────────────── + public void Initialize() => SteamAPI.Init(); + public void RunCallbacks() => SteamAPI.RunCallbacks(); + public void Shutdown() => SteamAPI.Shutdown(); + } +} +#endif +``` + +```csharp +// 路径: Assets/Scripts/Support/Platform/NullPlatformService.cs +namespace BaseGames.Platform +{ + public class NullPlatformService : IPlatformService + { + public bool IsCloudAvailable => false; + public void UnlockAchievement(string id) => Debug.Log($"[Platform:Null] Achievement: {id}"); + public bool IsAchievementUnlocked(string id) => false; + public void SetStat(string id, int v) { } + public void IncrementStat(string id, int inc = 1) { } + public int GetStat(string id) => 0; + public Task CloudSaveAsync(string f, byte[] d) => Task.FromResult(false); + public Task CloudLoadAsync(string f) => Task.FromResult(null); + public void SetRichPresence(string k, string v) { } + public void ClearRichPresence() { } + public void Rumble(float l, float h, float dur) { } + public void StopRumble() { } + public void Initialize() { } + public void RunCallbacks() { } + public void Shutdown() { } + } +} +``` + +```csharp +// 路径: Assets/Scripts/Support/Platform/PlatformBootstrap.cs +// 挂载在 Persistent 场景的 Bootstrap GameObject +public class PlatformBootstrap : MonoBehaviour +{ + void Awake() + { + IPlatformService service; +#if UNITY_STANDALONE && STEAMWORKS_NET + service = new SteamPlatformService(); +#elif UNITY_SWITCH + service = new SwitchPlatformService(); // 预留,Switch 构建时接入 +#else + service = new NullPlatformService(); +#endif + service.Initialize(); + ServiceLocator.Register(service); + } + + void Update() => ServiceLocator.Get()?.RunCallbacks(); + void OnApplicationQuit() => ServiceLocator.Get()?.Shutdown(); +} +``` + +--- + +## 4. DebugCheatSystem + +```csharp +// 路径: Assets/Scripts/Support/Debug/DebugCheatSystem.cs +// 仅在 Editor 或 Development Build 中编译 +#if UNITY_EDITOR || DEVELOPMENT_BUILD +public class DebugCheatSystem : MonoBehaviour +{ + [Header("快捷键")] + [SerializeField] private KeyCode _toggleConsoleKey = KeyCode.BackQuote; + + // ⚠️ SceneLoader 无 Instance 单例(Architecture 03 §3,事件驱动);通过事件频道触发加载 + [SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; + + private bool _consoleOpen; + private string _input = ""; + + private void Update() + { + if (Input.GetKeyDown(_toggleConsoleKey)) _consoleOpen = !_consoleOpen; + } + + private void OnGUI() + { + if (!_consoleOpen) return; + _input = GUI.TextField(new Rect(10, 10, 400, 30), _input); + if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Return) + { + ExecuteCommand(_input.Trim()); + _input = ""; + } + } + + private void ExecuteCommand(string cmd) + { + // ⚠️ PlayerController 无 Instance 单例(Architecture 05 §2);Debug 上下文用 FindObjectOfType + var player = FindObjectOfType(); + var parts = cmd.Split(' '); + switch (parts[0].ToLower()) + { + case "godmode": + player?.Stats.SetGodMode(true); + break; + case "addgeo" when parts.Length > 1 && int.TryParse(parts[1], out var geo): + player?.Stats.AddGeo(geo); + break; + case "teleport" when parts.Length > 1: + // ⚠️ 通过事件频道触发(SceneLoader 无 Instance;Architecture 03 §3) + _onSceneLoadRequest.Raise(new SceneLoadRequest + { SceneName = parts[1], EntryTransitionId = "Default" }); + break; + case "unlock" when parts.Length > 1: + player?.OnAbilityUnlocked(parts[1]); + break; + case "killall": + // ⚠️ DamageInfo 无单参数构造函数(Architecture 06 §1);必须使用 Builder 模式 + var killDmg = new DamageInfo.Builder().SetRaw(99999).Build(); + foreach (var e in FindObjectsOfType()) e.TakeDamage(killDmg); + break; + default: + Debug.Log($"[Cheat] 未知命令: {cmd}"); + break; + } + } +} +#endif +``` + +--- + +## 5. AntiSoftlockSystem + +```csharp +// 路径: Assets/Scripts/Support/AntiSoftlock/AntiSoftlockSystem.cs +// 检测卡关(玩家长时间静止 + 无法移动 + 无法交互)→ 提示 / 传送 +public class AntiSoftlockSystem : MonoBehaviour +{ + [SerializeField] private float _softlockDetectionTime = 60f; // 无任何输入的秒数 + [SerializeField] private InputReaderSO _inputReader; + [SerializeField] private VoidEventChannelSO _onSoftlockDetected; // 发布:检测到卡关 + // ⚠️ SceneLoader 无 Instance 单例(Architecture 03 §3,事件驱动);通过事件频道触发加载 + [SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest; + + private float _idleTime; + private Vector2 _lastPlayerPos; + private bool _promptShown; + + private void Update() + { + // ⚠️ PlayerController 无 Instance(Architecture 05 §2);AntiSoftlock 在 Persistent 场景, + // 通过 FindObjectOfType 获取(Debug/支撑系统可接受,非热路径) + var player = FindObjectOfType(); + if (player == null) return; + var playerPos = (Vector2)player.transform.position; + if (Vector2.Distance(playerPos, _lastPlayerPos) > 0.1f) + { + _lastPlayerPos = playerPos; + _idleTime = 0f; + _promptShown = false; + return; + } + _idleTime += Time.deltaTime; + if (_idleTime >= _softlockDetectionTime && !_promptShown) + { + _promptShown = true; + _onSoftlockDetected.Raise(); // UIManager 显示"是否传送到最近存档点"对话框 + } + } + + // 由 UI 确认按钮调用 + public void TeleportToLastSavePoint() + { + // ⚠️ 通过事件频道触发(SceneLoader 无 Instance;Architecture 03 §3) + _onSceneLoadRequest.Raise(new SceneLoadRequest + { + SceneName = SaveManager.LastCheckpointScene, + EntryTransitionId = SaveManager.LastCheckpointSpawnId, + IsRespawn = true + }); + } +} +``` + +### 5.1 RoomEscapeInfoSO — 设计时房间逃离配置 + +每个房间场景在设计时必须挂载此 SO,记录"最低能力集合即可离开此房间"。 +编辑器工具自动验证可达性,如发现无法逃离的死局则标红警告。 + +```csharp +// 路径: Assets/Scripts/Support/AntiSoftlock/RoomEscapeInfoSO.cs +namespace BaseGames.Progression +{ + [CreateAssetMenu(menuName = "Progression/RoomEscapeInfo")] + public class RoomEscapeInfoSO : ScriptableObject + { + [Header("房间标识")] + public string sceneAddress; // 对应 Addressable 场景地址 + + [Header("逃离要求(满足任一路线即视为可逃离)")] + public EscapeRoute[] escapeRoutes; + + [Header("单向入口警告")] + public bool hasOneWayEntry; // 是否有单向进入点(如跌落入口) + [TextArea(1, 3)] + public string designerNotes; + + [Serializable] + public class EscapeRoute + { + public string routeLabel; // 如 "向左回到 Forest_Main" + public string targetSceneAddress; // 逃离到达的目标房间 + public AbilityType[] requiredAbilities; // 空 = 无需任何能力即可离开 + } + } +} +``` + +### 5.2 HardAbilityGate — 增强型能力门(Sequence Break 防护) + +```csharp +// 路径: Assets/Scripts/Support/AntiSoftlock/HardAbilityGate.cs +namespace BaseGames.Progression +{ + /// + /// 增强型能力门:除了检查能力标志,还检测玩家是否"物理上真的能做到"。 + /// 用于防止玩家用精准时机绕过只检查标志的 AbilityGate(见 Design/49 §4.2)。 + /// + public class HardAbilityGate : AbilityGate + { + [Header("额外物理验证")] + [SerializeField] bool _requirePhysicalValidation = false; + + // 编辑器工具标记"此门已验证可能被绕过" + [SerializeField] bool _sequenceBreakRisk = false; + + protected override bool EvaluateAccess() + { + if (!base.EvaluateAccess()) return false; + if (!_requirePhysicalValidation) return true; + + // 检查能力实际已激活(非仅标志为 true) + return _playerStats != null + && _playerStats.IsAbilityActuallyUnlocked(_requiredAbility); + } + } +} +``` + +--- + +## 6. AccessibilityManager + +> **参见** Design/62_Accessibility_System.md — 完整规范 +> **重要声明**:无障碍功能 ≠ 简单模式。无障碍选项服务于有不同能力需求的玩家,与难度系统**独立运作**。 + +### AccessibilitySettingsSO(数据容器) + +```csharp +// 路径: Assets/ScriptableObjects/Accessibility/AccessibilitySettings.asset +[CreateAssetMenu(menuName = "Accessibility/AccessibilitySettings")] +public class AccessibilitySettingsSO : ScriptableObject +{ + // ── 视觉无障碍 ──────────────────────────────────────────────────────── + [Header("色盲模式")] + public ColorBlindMode colorBlindMode = ColorBlindMode.None; + public bool highContrastMode = false; + public float gameContrastBoost = 0f; // 0~1.0 + + // ── 运动无障碍 ──────────────────────────────────────────────────────── + [Header("运动敏感度")] + public bool disableScreenShake = false; + public bool disableCameraMotion = false; + public float cameraMotionScale = 1f; // 0~1.0(0 = 完全关闭) + public bool reduceParticleEffects = false; // 减少粒子密度 50% + public bool disableFlashingEffects = false; // 禁止 > 3Hz 的闪烁 + public int flashFrequencyLimit = 3; // 光敏保护:最大闪光频率(Hz) + + // ── 字幕 ────────────────────────────────────────────────────────────── + [Header("字幕系统")] + public bool subtitlesEnabled = false; + public bool sfxSubtitlesEnabled = false; // 环境音/危险音效文字提示 + public float subtitleFontSizeMultiplier = 1f; // 0.75~2.0 + public bool subtitleBackgroundEnabled = true; + public float subtitleBackgroundOpacity = 0.7f; + public bool speakerNameEnabled = true; + + // ── 输入辅助 ────────────────────────────────────────────────────────── + [Header("输入辅助")] + public bool autoParryAssist = false; // 自动弹反辅助 + public float parryWindowExtension = 0f; // 弹反窗口扩展(秒),0~0.2 + public bool holdToMash = false; // 长按替代连按(QTE 逃脱等) + public bool stickyJump = false; // 跳跃键释放容忍(松手后 0.1s 仍可截断可变跳高) + public bool autoClimb = false; // 接触墙面自动开始攀爬 + + // ── 音频无障碍 ──────────────────────────────────────────────────────── + [Header("音频无障碍")] + public bool monoAudio = false; // 单声道模式 + public float leftRightBalance = 0f; // -1~+1 + public bool visualDangerIndicator = false; // 视觉危险提示(代替音效提示) +} + +public enum ColorBlindMode +{ + None, // 无(默认) + Protanopia, // 红色盲 + Deuteranopia, // 绿色盲 + Tritanopia, // 蓝黄色盲 + Achromatopsia, // 全色盲(高对比灰度) +} +``` + +### AccessibilityManager + +```csharp +// 路径: Assets/Scripts/Support/Accessibility/AccessibilityManager.cs +public class AccessibilityManager : MonoBehaviour +{ + public static AccessibilityManager Instance { get; private set; } + + [SerializeField] private AccessibilitySettingsSO _settings; + public AccessibilitySettingsSO Settings => _settings; + + // ── Event Channels(Raise 方)─────────────────────────────────────── + [SerializeField] private ColorBlindModeEventChannelSO _onColorBlindModeChanged; + [SerializeField] private BoolEventChannelSO _onHighContrastChanged; + [SerializeField] private BoolEventChannelSO _onSubtitlesChanged; + [SerializeField] private BoolEventChannelSO _onScreenShakeChanged; + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + DontDestroyOnLoad(gameObject); + } + + // SettingsPanelController 调用的公开 API + public void ApplySettings() + { + _onColorBlindModeChanged.Raise(_settings.colorBlindMode); + _onHighContrastChanged.Raise(_settings.highContrastMode); + _onSubtitlesChanged.Raise(_settings.subtitlesEnabled); + _onScreenShakeChanged.Raise(!_settings.disableScreenShake); + // 传递给 NiceVibrations(由 Settings 全局开关控制) + // HapticController 无直接字段;通过 Feel 的 Haptics 全局开关处理 + } + + // 各具体操作方法(由 UI 控件调用后触发 ApplySettings) + public void SetColorBlindMode(ColorBlindMode mode) { _settings.colorBlindMode = mode; ApplySettings(); } + public void SetAutoParryAssist(bool v) { _settings.autoParryAssist = v; ApplySettings(); } + public void SetParryWindowExtension(float sec) { _settings.parryWindowExtension = sec; ApplySettings(); } + public void SetDisableScreenShake(bool v) { _settings.disableScreenShake = v; ApplySettings(); } + public void SetCameraMotionScale(float s) { _settings.cameraMotionScale = s; ApplySettings(); } + public void SetMonoAudio(bool v) { _settings.monoAudio = v; ApplySettings(); } + public void SetVisualDangerIndicator(bool v) { _settings.visualDangerIndicator = v; ApplySettings(); } + // ... 其余选项同理 + + // 供 FeedbackSystem 查询屏幕震动权限 + public static bool CanPlayScreenShake() + => Instance == null || !Instance.Settings.disableScreenShake; +} +``` + +### ColorBlindFilter(URP Renderer Feature) + +```csharp +// 路径: Assets/Scripts/Accessibility/ColorBlindFilter.cs +// URP 2D 后处理:最终合成阶段应用色彩矩阵变换 +public class ColorBlindFilter : ScriptableRendererFeature +{ + [SerializeField] ColorBlindMode _mode; + + // 色彩矩阵(3×3,基于 Brettel et al. 1997 算法) + private static readonly Dictionary _matrices = new() + { + [ColorBlindMode.Protanopia] = new Matrix4x4(/*...*/), + [ColorBlindMode.Deuteranopia] = new Matrix4x4(/*...*/), + [ColorBlindMode.Tritanopia] = new Matrix4x4(/*...*/), + [ColorBlindMode.Achromatopsia]= new Matrix4x4(/*...*/), + }; + + public override void Create() { /* 初始化 RenderPass */ } + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + if (_mode == ColorBlindMode.None) return; + renderer.EnqueuePass(new ColorBlindPass(_matrices[_mode])); + } + + // AccessibilityManager 调用以切换模式 + public void SetMode(ColorBlindMode mode) => _mode = mode; +} +``` + +**资产位置**:在 URP 2D Renderer Data(`Assets/Settings/URP2DRenderer.asset`)中添加此 Feature。 + +> **`parryWindowExtension` 集成**:`ParrySystem` 在计算弹反窗口时需读取此值: +> `float window = _config.ParryWindowDuration + (AccessibilityManager.Instance?.Settings.parryWindowExtension ?? 0f);` + +--- + +## 7. 支撑事件频道清单 + +| 资产名 | 类型 | Raise 方 | Subscribe 方 | +|--------|------|---------|-------------| +| `EVT_AchievementUnlocked` | `AchievementEventChannelSO` | `AchievementManager` | `ToastManager`(显示成就 Toast)| +| `EVT_SoftlockDetected` | `VoidEventChannelSO` | `AntiSoftlockSystem` | `UIManager`(显示确认对话框)| +| `EVT_ColorBlindModeChanged` | `ColorBlindModeEventChannelSO` | `AccessibilityManager` | `ColorBlindFilter` URP Renderer Feature | +| `EVT_HighContrastChanged` | `BoolEventChannelSO` | `AccessibilityManager` | `UIManager`(高对比度 Theme)+ `OutlinePass` | +| `EVT_SubtitlesChanged` | `BoolEventChannelSO` | `AccessibilityManager` | `DialogueBox`(字幕显隐)| +| `EVT_ScreenShakeChanged` | `BoolEventChannelSO` | `AccessibilityManager` | `FeedbackSystem`(MMF 震动开关)| + +--- + +## 8. AnalyticsManager + +```csharp +// 路径: Assets/Scripts/Support/Analytics/AnalyticsManager.cs +// 游戏行为数据收集(开发用途:热点图、死亡统计、卡关点分析) +// 正式发布版无网络上报;仅写入本地日志供开发分析 +public class AnalyticsManager : MonoBehaviour +{ + [SerializeField] private bool _enabledInRelease = false; // 正式包默认关闭 + [SerializeField] private string _logPath; // 本地日志路径 + + private StreamWriter _writer; + + private void Awake() + { +#if !UNITY_EDITOR && !DEVELOPMENT_BUILD + if (!_enabledInRelease) { enabled = false; return; } +#endif + var path = string.IsNullOrEmpty(_logPath) + ? Path.Combine(Application.persistentDataPath, "analytics.jsonl") + : _logPath; + _writer = new StreamWriter(path, append: true); + } + + private void OnDestroy() => _writer?.Close(); + + // 记录一条分析事件(JSONL 格式) + public void Track(string eventName, Dictionary properties = null) + { + if (!enabled) return; + + var payload = new Dictionary + { + ["event"] = eventName, + ["timestamp"] = DateTime.UtcNow.ToString("o"), + ["session"] = Time.realtimeSinceStartup + }; + if (properties != null) + foreach (var kv in properties) payload[kv.Key] = kv.Value; + + _writer?.WriteLine(JsonConvert.SerializeObject(payload)); + } + + // ── 常用跟踪快捷方法 ──────────────────────────────────────────── + public void TrackDeath(string sceneName, Vector2 position, string cause) + => Track("player_death", new() + { + ["scene"] = sceneName, + ["pos_x"] = position.x, + ["pos_y"] = position.y, + ["cause"] = cause + }); + + public void TrackBossDefeated(string bossId, float elapsedSeconds) + => Track("boss_defeated", new() + { + ["boss_id"] = bossId, + ["time_s"] = elapsedSeconds + }); + + public void TrackAbilityUnlocked(string abilityId) + => Track("ability_unlocked", new() { ["ability"] = abilityId }); +} +``` + +--- + +## 9. SpeedrunTimer + +```csharp +// 路径: Assets/Scripts/Support/Speedrun/SpeedrunTimer.cs +// 游戏内时间(IGT)计时器:排除加载、过场、暂停时间 +// 在 HUD 角落显示(仅当 Settings 中开启时) +public class SpeedrunTimer : MonoBehaviour, ISaveable +{ + [SerializeField] private BoolEventChannelSO _onGameplayActive; // Gameplay 状态 = 计时 + [SerializeField] private TMP_Text _display; // HUD 角落 Text(可隐藏) + [SerializeField] private GlobalSettingsSO _settings; + + private float _igt; // 累计 In-Game Time(秒) + private bool _isRunning; + + private void OnEnable() + { + _onGameplayActive.OnEventRaised += SetRunning; + UpdateDisplay(); + } + + private void OnDisable() => _onGameplayActive.OnEventRaised -= SetRunning; + + private void SetRunning(bool active) + { + _isRunning = active; + if (_display != null) + _display.gameObject.SetActive(active && _settings.ShowSpeedrunTimer); + } + + private void Update() + { + if (!_isRunning) return; + _igt += Time.unscaledDeltaTime; // 不受 timeScale 影响(暂停 timeScale=0 时不计时) + UpdateDisplay(); + } + + private void UpdateDisplay() + { + if (_display == null) return; + var ts = TimeSpan.FromSeconds(_igt); + _display.text = $"{ts.Hours:D2}:{ts.Minutes:D2}:{ts.Seconds:D2}.{ts.Milliseconds / 10:D2}"; + } + + public float TotalSeconds => _igt; + + // ── ISaveable ──────────────────────────────────────────────────── + public void OnSave(SaveData data) => data.Stats.DistanceTraveled = _igt; // 复用字段(或扩展 StatsSaveData) + public void OnLoad(SaveData data) { _igt = data.Stats.DistanceTraveled; UpdateDisplay(); } +} +``` + +**GlobalSettingsSO 新增字段**(追加至 §6 AccessibilityManager 的补充字段): +```csharp +public bool ShowSpeedrunTimer = false; // 默认隐藏,由设置界面开关控制 +``` + +--- + +## 10. SOValidationRunner — SO 数据合法性全局校验 + +> **路径**:`Assets/Editor/Validation/SOValidationRunner.cs`(Editor-only) +> **动机**:`[Range]` / `[Min]` Attribute 在 Inspector 手动输入时有效,但脚本赋值、JSON 导入或复制粘贴时无约束;统一校验工具在构建前 / 按需运行时捕获数据异常。 + +### IValidatable 接口 + +```csharp +// 路径: Assets/Scripts/Core/Validation/IValidatable.cs +// 任何 ScriptableObject 或 MonoBehaviour 可选择性实现此接口,声明自身合法性规则 +namespace BaseGames.Core +{ + public interface IValidatable + { + /// + /// 返回验证失败信息列表;列表为空表示数据合法。 + /// + System.Collections.Generic.IEnumerable Validate(); + } +} +``` + +**实现示例**(`DifficultyScalerSO` 扩展): + +```csharp +// DifficultyScalerSO 新增(已有代码末尾追加接口声明) +public class DifficultyScalerSO : ScriptableObject, IValidatable +{ + // ... 现有字段 ... + + public IEnumerable Validate() + { + if (PlayerMaxHPMultiplier <= 0) + yield return $"[{name}] PlayerMaxHPMultiplier 必须 > 0"; + if (EnemyDamageMultiplier <= 0) + yield return $"[{name}] EnemyDamageMultiplier 必须 > 0"; + if (level == DifficultyLevel.SteelSoul && !InstantDeathOnZeroHP) + yield return $"[{name}] SteelSoul 难度必须 InstantDeathOnZeroHP = true"; + } +} +``` + +### SOValidationRunner 实现 + +```csharp +// 路径: Assets/Editor/Validation/SOValidationRunner.cs +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; +using System.Collections.Generic; + +public class SOValidationRunner : IPreprocessBuildWithReport +{ + public int callbackOrder => 1; // 在 AddressKeyValidator(0) 之后 + + public void OnPreprocessBuild(BuildReport report) + { + var (errors, warnings) = RunAll(); + if (errors.Count > 0) + throw new BuildFailedException( + $"[SOValidationRunner] {errors.Count} 处 SO 数据错误,构建中止:\n" + + string.Join("\n", errors)); + foreach (var w in warnings) + UnityEngine.Debug.LogWarning(w); + } + + [MenuItem("Tools/Validate All ScriptableObjects")] + public static void ValidateMenu() + { + var (errors, warnings) = RunAll(); + + if (errors.Count == 0 && warnings.Count == 0) + { + UnityEngine.Debug.Log("[SOValidationRunner] ✅ 所有 SO 数据均合法。"); + return; + } + foreach (var w in warnings) UnityEngine.Debug.LogWarning(w); + foreach (var e in errors) UnityEngine.Debug.LogError(e); + + UnityEngine.Debug.Log( + $"[SOValidationRunner] 校验完成:{errors.Count} 错误,{warnings.Count} 警告。"); + } + + private static (List errors, List warnings) RunAll() + { + var errors = new List(); + var warnings = new List(); + + // 查找 AssetDatabase 中所有实现 IValidatable 的 ScriptableObject + var guids = AssetDatabase.FindAssets("t:ScriptableObject"); + foreach (var guid in guids) + { + var path = AssetDatabase.GUIDToAssetPath(guid); + var so = AssetDatabase.LoadAssetAtPath(path); + if (so is IValidatable validatable) + { + foreach (var msg in validatable.Validate()) + { + bool isError = msg.StartsWith("[") && msg.Contains("必须"); + if (isError) errors.Add($"❌ {msg} ({path})"); + else warnings.Add($"⚠️ {msg} ({path})"); + } + } + } + return (errors, warnings); + } +} +``` + +**扩展约定**: + +| SO 类型 | 建议校验项 | +|---------|-----------| +| `DamageSourceSO` | `BaseDamage > 0`, `DamageMultiplier > 0` | +| `DifficultyScalerSO` | 各倍率 > 0,SteelSoul 规则一致性 | +| `AttackPatternSO` | 至少 1 个 AttackEntry,Weight > 0 | +| `CharmSO` | Effects 不为空,Slot 编号不重复 | +| `QuestSO` | Objectives 不为空,所有 Objective 有唯一 ID | diff --git a/Docs/Architecture/17_CameraModule.md b/Docs/Architecture/17_CameraModule.md new file mode 100644 index 0000000..1a2b0ae --- /dev/null +++ b/Docs/Architecture/17_CameraModule.md @@ -0,0 +1,921 @@ +# 17 · 相机模块(Camera Module) + +> **命名空间** `BaseGames.Camera` +> **程序集** `BaseGames.Camera`(`Assets/Scripts/Camera/`) +> **依赖** Cinemachine 3 · `BaseGames.Core.Events` +> **Design 来源** [02_CameraSystem](../Design/02_CameraSystem.md) + +--- + +## 目录 + +1. [模块职责](#1-模块职责) +2. [场景结构与 Prefab 层级](#2-场景结构与-prefab-层级) +3. [CameraStateController](#3-camerastatecontroller) +4. [RoomVisibleArea](#4-roomvisiblearea) +5. [CameraTriggerZone](#5-cameratriggerzone) +6. [RoomCamera(可选)](#6-roomcamera可选) +7. [CameraConfigSO](#7-cameraconfigso) +8. [CameraBlendProfileSO](#8-camerablendprofileso) +9. [镜头震动集成](#9-镜头震动集成) +10. [Pixel Perfect 集成](#10-pixel-perfect-集成) +11. [事件频道](#11-事件频道) +12. [房间切换时序](#12-房间切换时序) + +--- + +## 1. 模块职责 + +- 所有镜头行为由 **Cinemachine 3** 驱动,禁止手动操作 `Camera.transform` +- **全局 A/B 双机交替复用**:避免 Confiner 跳变 +- **触发区域驱动切换**:`CameraTriggerZone` Collider2D 触发镜头切换 +- **房间专用相机可选**:挂载 `RoomCamera` 组件时自动优先 + +--- + +## 2. 场景结构与 Prefab 层级 + +### Persistent 场景(`CameraRig` Prefab) + +``` +[CameraRig] +├── Main Camera +│ ├── Camera.cs +│ ├── CinemachineBrain ← defaultBlend 通过代码动态赋值 +│ ├── PixelPerfectCamera ← Unity 2D Pixel Perfect +│ └── CinemachinePixelPerfect ← 消除亚像素抖动 +│ +├── VCam_Global_A ← Priority 10(初始活跃) +│ ├── CinemachineCamera +│ ├── CinemachinePositionComposer ← 跟随玩家 + 偏移/阻尼 +│ ├── CinemachineConfiner2D ← BoundingShape2D 动态更换 +│ ├── CinemachineImpulseListener +│ └── CinemachinePixelPerfect +│ +├── VCam_Global_B ← Priority 9(待机) +│ └── (结构同 A) +│ +├── [SpecialCameras] ← 特殊状态相机(独立 GameObject 组) +│ ├── VCam_Boss ← Priority 30(Boss 战激活) +│ │ ├── CinemachineCamera(_lookaheadTime=0, _orthographicSize 由 ConfigSO 驱动) +│ │ ├── CinemachineConfiner2D +│ │ └── CinemachineImpulseListener +│ ├── VCam_Death ← Priority 50(死亡时激活,慢速 ZoomIn) +│ │ └── CinemachineCamera +│ └── VCam_Cutscene ← Priority 40(CutsceneManager 注册后激活) +│ └── CinemachineCamera(剧情用,位置由 Timeline/CutsceneManager 控制) +│ +└── CameraStateController.cs ← 全局相机控制器 +``` + +### 房间场景(可选) + +``` +[VCam_Room_XXX] ← Priority 15(高于全局) +├── CinemachineCamera +├── CinemachineConfiner2D +├── CinemachineImpulseListener +└── RoomCamera.cs +``` + +--- + +## 3. CameraStateController + +```csharp +namespace BaseGames.Camera +{ + /// + /// 全局相机状态控制器,挂在 CameraRig GameObject 上。 + /// 管理全局 A/B 双机切换和房间专用相机注册。 + /// + public class CameraStateController : MonoBehaviour + { + // ── Inspector References ─────────────────────────────── + [SerializeField] CinemachineCamera _vcamA; + [SerializeField] CinemachineCamera _vcamB; + [SerializeField] CinemachineBrain _brain; + [SerializeField] CameraConfigSO _defaultConfig; + + [Header("特殊状态相机")] + [SerializeField] CinemachineCamera _vcamBoss; // Priority 30 + [SerializeField] CinemachineCamera _vcamDeath; // Priority 50 + [SerializeField] CinemachineCamera _vcamCutscene; // Priority 40 + + [Header("Event Channels")] + [SerializeField] BoolEventChannelSO _onBossFightToggled; // true=开始 false=结束 + [SerializeField] VoidEventChannelSO _onPlayerDied; + [SerializeField] VoidEventChannelSO _onPlayerRespawned; + [SerializeField] GameStateEventChannelSO _onGameStateChanged; + + // ── Runtime State ────────────────────────────────────── + CinemachineCamera _activeCam; + CinemachineCamera _inactiveCam; + RoomCamera _currentRoomCam; // null = 使用全局双机 + + // ── Singleton ───────────────────────────────────────── + public static CameraStateController Instance { get; private set; } + + void Awake() + { + Instance = this; + _activeCam = _vcamA; + _inactiveCam = _vcamB; + } + + void OnEnable() + { + _onBossFightToggled.OnEventRaised += OnBossFightToggled; + _onPlayerDied.OnEventRaised += OnPlayerDied; + _onPlayerRespawned.OnEventRaised += OnPlayerRespawned; + } + void OnDisable() + { + _onBossFightToggled.OnEventRaised -= OnBossFightToggled; + _onPlayerDied.OnEventRaised -= OnPlayerDied; + _onPlayerRespawned.OnEventRaised -= OnPlayerRespawned; + } + + private void OnBossFightToggled(bool started) + { + _vcamBoss.Priority = started ? 30 : 0; // 升/降优先级 + if (started) _brain.DefaultBlend = + new CinemachineBlendDefinition(CinemachineBlendDefinition.Style.EaseIn, 0.8f); + else _brain.DefaultBlend = new CinemachineBlendDefinition( + _defaultConfig.DefaultBlendStyle, _defaultConfig.DefaultBlendDuration); + } + + private void OnPlayerDied() + { + _vcamDeath.Priority = 50; // 死亡相机接管,1.0s EaseIn + _brain.DefaultBlend = + new CinemachineBlendDefinition(CinemachineBlendDefinition.Style.EaseIn, 1.0f); + } + + private void OnPlayerRespawned() + { + _vcamDeath.Priority = 0; + _brain.DefaultBlend = new CinemachineBlendDefinition( + _defaultConfig.DefaultBlendStyle, _defaultConfig.DefaultBlendDuration); + } + + // ── 公共 API ────────────────────────────────────────── + + /// + /// 切换到新房间(由 RoomTransition 调用)。 + /// + public void SwitchRoom(RoomCameraData data) + { + if (_currentRoomCam != null) return; // 房间专用相机接管时,全局切换延迟 + + // 1. 更新 inactive 机 + var confiner = _inactiveCam.GetComponent(); + confiner.BoundingShape2D = data.ConfinerCollider; + _inactiveCam.GetCinemachineComponent() + .TargetOffset = data.CameraOffset; + + // 2. 应用混合配置 + if (data.BlendProfile != null) + _brain.DefaultBlend = data.BlendProfile.ToBlendDefinition(); + + // 3. 升高 inactive 机优先级触发 Blend + _inactiveCam.Priority = _activeCam.Priority + 1; + + // 4. Blend 完成后交换引用(通过 CinemachineBrain 回调) + _brain.BlendFinished += OnBlendFinished; + } + + void OnBlendFinished(ICinemachineCamera _) + { + _brain.BlendFinished -= OnBlendFinished; + _activeCam.Priority = 9; + (_activeCam, _inactiveCam) = (_inactiveCam, _activeCam); + } + + /// + /// 房间专用相机注册(由 RoomCamera.OnEnable 调用)。 + /// + public void RegisterRoomCamera(RoomCamera rc) + { + _currentRoomCam = rc; + // 房间相机 Priority=15,自动接管全局相机 + } + + /// + /// 房间专用相机注销(由 RoomCamera.OnDisable 调用)。 + /// + public void UnregisterRoomCamera(RoomCamera rc) + { + if (_currentRoomCam == rc) + _currentRoomCam = null; + } + + /// + /// 发布镜头震动冲量(由 IFeedbackPlayer 调用)。 + /// + public void TriggerImpulse(CameraShakePreset preset) + { + var impulse = _activeCam.GetComponent(); + impulse.m_ImpulseDefinition.m_AmplitudeGain = preset.Amplitude; + impulse.GenerateImpulse(Vector3.down * preset.Force); + } + } + + /// + /// 房间切换时传入的相机参数包。 + /// + public struct RoomCameraData + { + public Collider2D ConfinerCollider; // 房间 RoomVisibleArea 的 Collider2D + public Vector3 CameraOffset; // 镜头偏移(可用于房间内向上/向下偏移) + public CameraBlendProfileSO BlendProfile; // null = 使用全局默认 + } +} +``` + +--- + +## 4. RoomVisibleArea + +> **所见即所得原则**:设计者在 Scene 视图中绘制的矩形 = 玩家运行时实际能看到的总区域。 +> 组件内部自动按 `confinerSize = roomSize − viewportSize` 公式将"房间可视区域"转换为 +> Cinemachine Confiner2D 所需的"相机中心约束多边形",无需手动调整 Collider 顶点。 + +```csharp +// 路径: Assets/Scripts/Camera/RoomVisibleArea.cs +namespace BaseGames.Camera +{ + /// + /// 定义一个房间的相机可视区域。 + /// _roomSize = 玩家可见的总矩形(世界单位)。 + /// Gizmo 在 Scene 视图中实时预览: + /// 绿色线框 = 房间边界(_roomSize) + /// 青色填充 = 相机视口(_viewportSize)= 运行时实际画面 + /// 当 roomSize == viewportSize 时为固定相机(锁定不滚动)。 + /// + [ExecuteAlways] + [RequireComponent(typeof(PolygonCollider2D))] + public class RoomVisibleArea : MonoBehaviour + { + [Header("可视区域(所见即所得)")] + [Tooltip("玩家能看到的总矩形(世界单位)。Scene 中绿色框即为此范围。")] + [SerializeField] private Vector2 _roomSize = new(20f, 11.25f); // 默认一屏 320×180 / 16 PPU + [Tooltip("相机视口尺寸(世界单位),需与 PixelPerfectCamera 设置一致。" + + "建议由 CameraConfigSO 统一管理后注入,或手动填写。")] + [SerializeField] private Vector2 _viewportSize = new(20f, 11.25f); // 320×180 / 16 PPU + + // ── 派生属性 ─────────────────────────────────────────────────── + /// true = 单屏固定相机(房间不超过一个视口)。 + public bool IsFixedCamera + => _roomSize.x <= _viewportSize.x + 0.01f + && _roomSize.y <= _viewportSize.y + 0.01f; + + /// Confiner2D 使用的 Collider(自动维护)。 + public Collider2D Collider { get; private set; } + + // ── 生命周期 ─────────────────────────────────────────────────── + private void Awake() => Collider = GetComponent(); + private void OnValidate() => RebuildCollider(); // Inspector 修改时实时重建 + + // ── 核心:将"房间可视区"换算为"相机中心约束多边形" ────────────── + private void RebuildCollider() + { + var col = GetComponent(); + if (col == null) return; + + // Cinemachine Confiner2D 约束的是相机「中心」,不是相机边缘 + // 因此约束区域 = 房间尺寸 - 相机视口尺寸(最小为零,即固定相机) + var confiner = Vector2.Max(Vector2.zero, _roomSize - _viewportSize); + var h = confiner * 0.5f; + + col.SetPath(0, new Vector2[] + { + new(-h.x, -h.y), + new( h.x, -h.y), + new( h.x, h.y), + new(-h.x, h.y), + }); + } + + // ── Editor Gizmo(所见即所得可视化)────────────────────────────── +#if UNITY_EDITOR + private static readonly Color _roomColor = new(0.2f, 1f, 0.2f, 0.9f); // 绿 + private static readonly Color _viewFill = new(0f, 0.8f, 1f, 0.08f); // 青色半透明填充 + private static readonly Color _viewBorder = new(0f, 0.8f, 1f, 0.85f); // 青色边框 + private static readonly Color _fixedColor = new(1f, 0.9f, 0f, 0.9f); // 黄色(固定相机) + + private void OnDrawGizmos() + { + var center = (Vector2)transform.position; + + // 1. 绘制房间边界(绿色) + Gizmos.color = _roomColor; + DrawWireRect(center, _roomSize); + + // 2. 绘制相机视口预览(青色)= 运行时玩家实际看到的画面大小 + // 视口锚定在房间中心(如需偏移可在 CameraOffset 中调整) + Gizmos.color = _viewFill; + Gizmos.DrawCube(center, new Vector3(_viewportSize.x, _viewportSize.y, 0f)); + Gizmos.color = IsFixedCamera ? _fixedColor : _viewBorder; + DrawWireRect(center, _viewportSize); + + // 3. 固定相机标注:用黄色虚线框 + 标签区分 + if (IsFixedCamera) + { + // 用黄色加粗边框覆盖提示"此房间为固定单屏相机" + Gizmos.color = _fixedColor; + DrawWireRect(center + Vector2.up * (_roomSize.y * 0.5f + 0.05f), + new Vector2(_roomSize.x, 0.1f)); + } + } + + private static void DrawWireRect(Vector2 center, Vector2 size) + { + var h = size * 0.5f; + var bl = center + new Vector2(-h.x, -h.y); + var br = center + new Vector2( h.x, -h.y); + var tr = center + new Vector2( h.x, h.y); + var tl = center + new Vector2(-h.x, h.y); + Gizmos.DrawLine(bl, br); + Gizmos.DrawLine(br, tr); + Gizmos.DrawLine(tr, tl); + Gizmos.DrawLine(tl, bl); + } +#endif + } +} +``` + +### RoomVisibleAreaEditor(Editor 脚本) + +```csharp +// 路径: Assets/Editor/Camera/RoomVisibleAreaEditor.cs +// Scene 视图内直接拖动 8 个控制点调整房间大小,无需修改 Inspector 数字 +#if UNITY_EDITOR +using UnityEditor; + +namespace BaseGames.Camera.Editor +{ + [CustomEditor(typeof(RoomVisibleArea))] + public class RoomVisibleAreaEditor : UnityEditor.Editor + { + private SerializedProperty _roomSize; + private SerializedProperty _viewportSize; + + private void OnEnable() + { + _roomSize = serializedObject.FindProperty("_roomSize"); + _viewportSize = serializedObject.FindProperty("_viewportSize"); + } + + private void OnSceneGUI() + { + var area = (RoomVisibleArea)target; + var center = (Vector2)area.transform.position; + var size = _roomSize.vector2Value; + var h = size * 0.5f; + + EditorGUI.BeginChangeCheck(); + Handles.color = new Color(0.2f, 1f, 0.2f, 0.9f); + + // 8 个控制点:四角 + 四边中点 + Vector2 newSize = size; + newSize = DragHandle(center + new Vector2( h.x, 0f ), size, center, HandleDir.Right); + newSize = DragHandle(center + new Vector2(-h.x, 0f ), newSize, center, HandleDir.Left); + newSize = DragHandle(center + new Vector2( 0f, h.y ), newSize, center, HandleDir.Up); + newSize = DragHandle(center + new Vector2( 0f, -h.y ), newSize, center, HandleDir.Down); + newSize = DragHandle(center + new Vector2( h.x, h.y ), newSize, center, HandleDir.TR); + newSize = DragHandle(center + new Vector2(-h.x, h.y ), newSize, center, HandleDir.TL); + newSize = DragHandle(center + new Vector2( h.x, -h.y ), newSize, center, HandleDir.BR); + newSize = DragHandle(center + new Vector2(-h.x, -h.y ), newSize, center, HandleDir.BL); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(area, "Resize RoomVisibleArea"); + _roomSize.vector2Value = Vector2.Max(newSize, _viewportSize.vector2Value); + serializedObject.ApplyModifiedProperties(); + } + } + + private enum HandleDir { Right, Left, Up, Down, TR, TL, BR, BL } + + private Vector2 DragHandle(Vector2 worldPos, Vector2 currentSize, + Vector2 center, HandleDir dir) + { + float size = HandleUtility.GetHandleSize(worldPos) * 0.12f; + var newPos = (Vector2)Handles.FreeMoveHandle(worldPos, size, + Vector3.zero, Handles.RectangleHandleCap); + if (newPos == worldPos) return currentSize; + + var delta = newPos - worldPos; + return dir switch + { + HandleDir.Right => currentSize + new Vector2( delta.x * 2, 0), + HandleDir.Left => currentSize + new Vector2(-delta.x * 2, 0), + HandleDir.Up => currentSize + new Vector2(0, delta.y * 2), + HandleDir.Down => currentSize + new Vector2(0, -delta.y * 2), + HandleDir.TR => currentSize + new Vector2( delta.x * 2, delta.y * 2), + HandleDir.TL => currentSize + new Vector2(-delta.x * 2, delta.y * 2), + HandleDir.BR => currentSize + new Vector2( delta.x * 2, -delta.y * 2), + HandleDir.BL => currentSize + new Vector2(-delta.x * 2, -delta.y * 2), + _ => currentSize + }; + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + var area = (RoomVisibleArea)target; + + EditorGUILayout.PropertyField(_roomSize, + new GUIContent("房间可视区域", "玩家能看到的总区域(世界单位)。Scene 中绿色框。")); + EditorGUILayout.PropertyField(_viewportSize, + new GUIContent("相机视口尺寸", "运行时相机实际画面尺寸(世界单位)。青色框。\n" + + "= 参考分辨率 / PPU(例:320×180 / 16PPU = 20×11.25)")); + + EditorGUILayout.Space(4); + var style = new GUIStyle(EditorStyles.helpBox) { richText = true }; + string msg = area.IsFixedCamera + ? "■ 固定相机:房间 = 单屏,相机锁定不滚动。" + : $"■ 可滚动:" + + $"滚动范围 {_roomSize.vector2Value - _viewportSize.vector2Value:F2} 世界单位。"; + EditorGUILayout.LabelField(msg, style); + + serializedObject.ApplyModifiedProperties(); + } + } +} +#endif +``` + +### Gizmo 图例 + +``` +Scene 视图中的显示效果: + +┌──────────────────────────────────────┐ ← 绿色框:_roomSize(房间总可视区) +│ │ +│ ┌────────────────────┐ │ ← 青色框:_viewportSize(相机视口) +│ │░░░░░░░░░░░░░░░░░░░░│ │ 青色填充 = 运行时玩家看到的画面 +│ │░░░ 玩家实际画面 ░░░│ │ +│ │░░░░░░░░░░░░░░░░░░░░│ │ +│ └────────────────────┘ │ +│ ← 滚动空间 → │ +└──────────────────────────────────────┘ + +当 roomSize == viewportSize(固定相机): +╔══════════════════════╗ ← 黄色框(双框叠合 = 锁定提示) +║░░░░░░░░░░░░░░░░░░░░░░║ +║░░ 房间 = 相机视口 ░░║ +╚══════════════════════╝ +``` + +### 视口尺寸换算 + +| 参考分辨率 | PPU | viewportSize(宽 × 高,世界单位) | +|-----------|-----|----------------------------------| +| 320 × 180 | 16 | 20.00 × 11.25 | +| 320 × 180 | 32 | 10.00 × 5.625 | +| 640 × 360 | 16 | 40.00 × 22.50 | + +> `viewportSize = (referenceResolution / PPU)` +> 建议在 `CameraConfigSO` 中暴露 `ViewportSizeInWorldUnits` 属性,让所有 `RoomVisibleArea` 实例引用同一个数值。 + +--- + +## 5. CameraTriggerZone + +> **独立可编辑原则**:触发区域的形状与位置由自身 `_center`/`_size` 决定, +> 与 `RoomVisibleArea` 完全解耦——一个房间可以有多个入口方向的触发线, +> 同一个触发线也可以指向不同的目标房间(双向过渡)。 + +```csharp +// 路径: Assets/Scripts/Camera/CameraTriggerZone.cs +namespace BaseGames.Camera +{ + /// + /// 独立的相机切换触发区域,与房间可视区域(RoomVisibleArea)解耦。 + /// 形状由 _center/_size 控制,[ExecuteAlways] 实时同步至 BoxCollider2D。 + /// Scene 视图中显示黄色矩形(触发范围)+ 青色箭头(指向目标房间)。 + /// + [ExecuteAlways] + [RequireComponent(typeof(BoxCollider2D))] + public class CameraTriggerZone : MonoBehaviour + { + // ── 触发区域形状(WYSIWYG,与房间区域无关)──────────────────────── + [Header("触发区域(独立编辑)")] + [Tooltip("触发区域中心(相对于 GameObject 原点的局部偏移)")] + [SerializeField] private Vector2 _center = Vector2.zero; + [Tooltip("触发区域尺寸(世界单位)。典型值:入口竖线 = (0.5, 4)")] + [SerializeField] private Vector2 _size = new(0.5f, 4f); + + // ── 切换目标 ────────────────────────────────────────────────────── + [Header("切换目标")] + [Tooltip("玩家进入后切换至此房间的可视区域")] + [SerializeField] private RoomVisibleArea _targetRoom; + [Tooltip("相机偏移(可选,微调构图)")] + [SerializeField] private Vector3 _cameraOffset; + [Tooltip("混合配置覆盖(null = 使用全局默认)")] + [SerializeField] private CameraBlendProfileSO _blendOverride; + + // ── 触发行为 ────────────────────────────────────────────────────── + [Header("触发行为")] + [Tooltip("true = 只触发一次(单向过渡);false = 玩家来回均触发(区段分割线)")] + [SerializeField] private bool _triggerOnce = false; + + private bool _triggered; + + // ── 生命周期 ────────────────────────────────────────────────────── + private void OnValidate() => SyncCollider(); + + private void SyncCollider() + { + var col = GetComponent(); + if (col == null) return; + col.isTrigger = true; + col.offset = _center; + col.size = _size; + } + + private void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + if (_triggerOnce && _triggered) return; + if (_targetRoom == null) return; + + _triggered = true; + CameraStateController.Instance.SwitchRoom(new RoomCameraData + { + ConfinerCollider = _targetRoom.Collider, + CameraOffset = _cameraOffset, + BlendProfile = _blendOverride, + }); + } + + // ── Editor Gizmo ────────────────────────────────────────────────── +#if UNITY_EDITOR + private static readonly Color _triggerColor = new(1f, 0.85f, 0f, 0.9f); // 黄 + private static readonly Color _triggerFill = new(1f, 0.85f, 0f, 0.06f); + private static readonly Color _arrowColor = new(0f, 0.8f, 1f, 0.9f); // 青 + private static readonly Color _triggeredColor = new(0.5f,0.5f, 0.5f,0.5f); // 灰(已触发) + + private void OnDrawGizmos() + { + var worldCenter = (Vector2)transform.position + _center; + + // 触发矩形 + bool fired = Application.isPlaying && _triggerOnce && _triggered; + Gizmos.color = fired ? _triggeredColor : _triggerFill; + Gizmos.DrawCube(worldCenter, new Vector3(_size.x, _size.y, 0f)); + Gizmos.color = fired ? _triggeredColor : _triggerColor; + DrawWireRect(worldCenter, _size); + + // 箭头:指向目标房间 + if (_targetRoom != null) + { + Gizmos.color = _arrowColor; + var dest = (Vector2)_targetRoom.transform.position; + Gizmos.DrawLine(worldCenter, dest); + Gizmos.DrawSphere(dest, 0.2f); + } + } + + private static void DrawWireRect(Vector2 center, Vector2 size) + { + var h = size * 0.5f; + var bl = center + new Vector2(-h.x, -h.y); + var br = center + new Vector2( h.x, -h.y); + var tr = center + new Vector2( h.x, h.y); + var tl = center + new Vector2(-h.x, h.y); + Gizmos.DrawLine(bl, br); Gizmos.DrawLine(br, tr); + Gizmos.DrawLine(tr, tl); Gizmos.DrawLine(tl, bl); + } +#endif + } +} +``` + +### CameraTriggerZoneEditor(Editor 脚本) + +```csharp +// 路径: Assets/Editor/Camera/CameraTriggerZoneEditor.cs +// Scene 内拖动 8 个控制点调整触发区域,支持整体平移(中心点) +#if UNITY_EDITOR +using UnityEditor; + +namespace BaseGames.Camera.Editor +{ + [CustomEditor(typeof(CameraTriggerZone))] + public class CameraTriggerZoneEditor : UnityEditor.Editor + { + private SerializedProperty _center; + private SerializedProperty _size; + private SerializedProperty _targetRoom; + + private void OnEnable() + { + _center = serializedObject.FindProperty("_center"); + _size = serializedObject.FindProperty("_size"); + _targetRoom = serializedObject.FindProperty("_targetRoom"); + } + + private void OnSceneGUI() + { + var zone = (CameraTriggerZone)target; + var worldPos = (Vector2)zone.transform.position; + var center = worldPos + _center.vector2Value; + var size = _size.vector2Value; + var h = size * 0.5f; + + EditorGUI.BeginChangeCheck(); + Handles.color = new Color(1f, 0.85f, 0f, 0.9f); + + // ① 中心点:整体平移 + float dotSize = HandleUtility.GetHandleSize(center) * 0.12f; + var newCenter = (Vector2)Handles.FreeMoveHandle( + center, dotSize, Vector3.zero, Handles.CircleHandleCap); + + // ② 8 个边缘控制点:缩放 + Vector2 newSize = size; + newSize = DragEdge(center + new Vector2( h.x, 0 ), newSize, center, 1, 0); + newSize = DragEdge(center + new Vector2(-h.x, 0 ), newSize, center, -1, 0); + newSize = DragEdge(center + new Vector2( 0, h.y ), newSize, center, 0, 1); + newSize = DragEdge(center + new Vector2( 0, -h.y ), newSize, center, 0, -1); + newSize = DragCorner(center + new Vector2( h.x, h.y), newSize, center, 1, 1); + newSize = DragCorner(center + new Vector2(-h.x, h.y), newSize, center, -1, 1); + newSize = DragCorner(center + new Vector2( h.x, -h.y), newSize, center, 1, -1); + newSize = DragCorner(center + new Vector2(-h.x, -h.y), newSize, center, -1, -1); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(zone, "Edit CameraTriggerZone"); + _center.vector2Value = newCenter - worldPos; + _size.vector2Value = Vector2.Max(newSize, new Vector2(0.1f, 0.1f)); + serializedObject.ApplyModifiedProperties(); + } + } + + private Vector2 DragEdge(Vector2 wp, Vector2 size, Vector2 center, + int signX, int signY) + { + float s = HandleUtility.GetHandleSize(wp) * 0.1f; + var newWp = (Vector2)Handles.FreeMoveHandle(wp, s, + Vector3.zero, Handles.RectangleHandleCap); + if (newWp == wp) return size; + var delta = newWp - wp; + return size + new Vector2(signX * delta.x * 2, signY * delta.y * 2); + } + + private Vector2 DragCorner(Vector2 wp, Vector2 size, Vector2 center, + int signX, int signY) + { + float s = HandleUtility.GetHandleSize(wp) * 0.1f; + var newWp = (Vector2)Handles.FreeMoveHandle(wp, s, + Vector3.zero, Handles.RectangleHandleCap); + if (newWp == wp) return size; + var delta = newWp - wp; + return size + new Vector2(signX * delta.x * 2, signY * delta.y * 2); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + DrawDefaultInspector(); + + var zone = (CameraTriggerZone)target; + if (_targetRoom.objectReferenceValue == null) + { + EditorGUILayout.HelpBox( + "未指定目标房间(_targetRoom),触发后不会切换相机。", MessageType.Warning); + } + serializedObject.ApplyModifiedProperties(); + } + } +} +#endif +``` + +### 独立编辑 vs 绑定房间的区别 + +``` +旧设计(绑定房间): + RoomA ──→ CameraTriggerZone(Collider 尺寸手动管理,无 WYSIWYG) + └── 依赖 BoxCollider2D 自带编辑,无法直观预览触发与房间的关系 + +新设计(独立编辑): + 场景层级示例: + [Room_A] + ├── RoomVisibleArea ← 绿色框:房间可视区域 + │ + [TriggerZone_A→B] ← 独立 GameObject,不挂在任何房间下 + ├── CameraTriggerZone ← 黄色框:触发区域(可自由移动/缩放) + │ ├── _targetRoom → RoomB.RoomVisibleArea + │ └── _size = (0.5, 4) ← 入口竖线,覆盖通道高度 + + [TriggerZone_B→A] ← 反向触发(指向 RoomA,_triggerOnce=false) + └── CameraTriggerZone + +同一房间多个入口示例: + TriggerZone_A_Left → RoomA (从左侧进入) + TriggerZone_A_Right → RoomA (从右侧进入) + TriggerZone_A_Down → RoomA (从上方坠入) +``` + +### 常见尺寸约定 + +| 触发线类型 | `_size` 建议值 | 备注 | +|-----------|:-------------:|------| +| 竖向门洞(窄走廊)| `(0.5, 3.0)` | 宽 = 0.5 ≤ 玩家宽,高覆盖通道 | +| 横向过渡(上下层)| `(8.0, 0.5)` | 宽覆盖平台,高 = 0.5 | +| 大区域入口 | `(2.0, 4.0)` | 宽松触发,允许斜角进入 | + +--- + +## 6. RoomCamera(可选) + +```csharp +namespace BaseGames.Camera +{ + /// + /// 挂在房间场景中的 VCam_Room_XXX 上。 + /// 存在时 Priority=15,自动优先于全局双机。 + /// + public class RoomCamera : MonoBehaviour + { + [SerializeField] CinemachineCamera _vcam; + [SerializeField] RoomVisibleArea _visibleArea; + [SerializeField] CameraBlendProfileSO _enterBlend; // 可留空 + + void OnEnable() + { + _vcam.Priority = 15; + CameraStateController.Instance.RegisterRoomCamera(this); + } + + void OnDisable() + { + _vcam.Priority = 0; + CameraStateController.Instance.UnregisterRoomCamera(this); + } + + public CinemachineCamera Vcam => _vcam; + public RoomVisibleArea VisibleArea => _visibleArea; + public CameraBlendProfileSO EnterBlend => _enterBlend; + } +} +``` + +--- + +## 7. CameraConfigSO + +```csharp +[CreateAssetMenu(menuName = "Camera/CameraConfig")] +public class CameraConfigSO : ScriptableObject +{ + [Header("探索跟随")] + public Vector3 DefaultFollowOffset = new(0f, 1f, -10f); // 玩家偏移 + [Range(0f, 5f)] + public float HorizontalDamping = 0.5f; + [Range(0f, 5f)] + public float VerticalDamping = 0.3f; + public float ExploreAheadDistance = 2.5f; // 向移动方向前瞻距离(世界单位) + public float ExploreLookUpOffset = 1.5f; // 玩家向上按键时额外偏移(如查看头顶) + public float ExploreLookDownOffset = 0.5f; // 玩家向下按键时额外偏移 + + [Header("战斗模式")] + public float CombatZoomOut = 1.2f; // 战斗时镜头拉远倍数 + public float CombatForwardOffset = 1.0f; // 朝敌人方向的额外偏移 + + [Header("Boss 战")] + public float BossZoomLevel = 6.0f; // Boss 相机正交尺寸(世界单位半高) + + [Header("默认混合")] + public float DefaultBlendDuration = 0.5f; + public CinemachineBlendDefinition.Style DefaultBlendStyle + = CinemachineBlendDefinition.Style.EaseInOut; + + [Header("Pixel Perfect")] + public int ReferenceResolutionX = 480; // 参考分辨率宽 + public int ReferenceResolutionY = 270; // 参考分辨率高 + public int PixelsPerUnit = 32; // PPU,与 SpriteImportSettings 一致 + public bool CropFrameX = false; + public bool CropFrameY = false; + public bool UpscaleRenderTexture = true; + + /// + /// 正交尺寸公式:OrthographicSize = RefResHeight / (2 × PPU) + /// 例:270 / (2 × 32) = 4.21875 + /// + public float OrthographicSize + => (float)ReferenceResolutionY / (2f * PixelsPerUnit); + + /// + /// 相机视口的世界单位尺寸(供 RoomVisibleArea 引用,保证所有房间使用一致的视口基准)。 + /// = ReferenceResolution / PixelsPerUnit + /// 例:480×270 / 32PPU = 15×8.4375 + /// + public Vector2 ViewportSizeInWorldUnits + => new Vector2((float)ReferenceResolutionX / PixelsPerUnit, + (float)ReferenceResolutionY / PixelsPerUnit); + + [Header("大房间滚动限制")] + public bool EnableScrollClamp = false; + public float MaxScrollSpeed = 8f; // 像素/秒 +} +``` + +**资产路径**:`Assets/ScriptableObjects/Camera/Camera_Config.asset` + +--- + +## 8. CameraBlendProfileSO + +```csharp +[CreateAssetMenu(menuName = "Camera/BlendProfile")] +public class CameraBlendProfileSO : ScriptableObject +{ + public float Duration = 0.5f; + public CinemachineBlendDefinition.Style Style + = CinemachineBlendDefinition.Style.EaseInOut; + + public CinemachineBlendDefinition ToBlendDefinition() + => new CinemachineBlendDefinition(Style, Duration); +} +``` + +**内置预设(`Assets/ScriptableObjects/Camera/Blends/`)**: + +| 资产名 | 用途 | 混合风格 | Duration | +|--------|------|---------|:---:| +| `Blend_Default.asset` | 正常房间切换 | EaseInOut | 0.5s | +| `Blend_Instant.asset` | 传送点、剧情跳切 | Cut | 0s | +| `Blend_Slow.asset` | Boss 房间进入 | EaseIn | 1.0s | +| `Blend_BossExit.asset` | Boss 击败后退出 | EaseOut | 0.8s | +| `Blend_Boss.asset` | Boss 战切换(OnBossFightToggled) | EaseIn | 0.8s | +| `Blend_Death.asset` | 玩家死亡 | EaseIn | 1.0s | +| `Blend_Cutscene.asset` | 进入剧情镜头(Cut 接管) | Cut | 0s | +| `Blend_CutsceneExit.asset` | 剧情结束恢复探索 | EaseOut | 0.3s | + +--- + +## 9. 镜头震动集成 + +`CinemachineImpulseSource` 挂在 `VCam_Global_A/B` 上,通过 `CameraStateController.TriggerImpulse()` 调用: + +```csharp +/// +/// 镜头震动预设(数值来自 FeedbackConfigSO 中配置)。 +/// +public struct CameraShakePreset +{ + public float Amplitude; // 震动幅度 + public float Force; // 冲量强度 + public float Duration; // Impulse Duration(在 CinemachineImpulseDefinition 设置) +} +``` + +**与 Feel 集成**:`MMF_CinemachineImpulse` feedback 直接操作 `CinemachineImpulseSource`,不经过 `CameraStateController`(二者不冲突,Feel 仍走标准 Cinemachine 管线)。 + +--- + +## 10. Pixel Perfect 集成 + +- `PixelPerfectCamera` 挂在 Main Camera,设置 `ReferenceResolutionX/Y = 320×180` +- `CinemachinePixelPerfect` 扩展组件挂在每个 `CinemachineCamera` 上,使 Cinemachine 跟随位置对齐到像素网格 +- 禁用 Anti-aliasing(与像素风格不兼容) + +--- + +## 11. 接口调用(直接调用,不使用事件频道) + +Camera 模块采用 **直接调用** 而非事件频道: + +| 调用者 | 调用方法 | 被调用方 | +|--------|---------|---------| +| `CameraTriggerZone` | `CameraStateController.Instance.SwitchRoom(RoomCameraData)` | `CameraStateController` | +| `IFeedbackPlayer`(`PlayerFeedback`、`EnemyFeedback`) | `CameraStateController.Instance.TriggerImpulse(CameraShakePreset)` | `CameraStateController` | +| `RoomCamera.OnEnable` | `CameraStateController.Instance.RegisterRoomCamera(rc)` | `CameraStateController` | +| `RoomCamera.OnDisable` | `CameraStateController.Instance.UnregisterRoomCamera(rc)` | `CameraStateController` | + +> **设计决策**:相机切换对延迟敏感(GC 压力影响帧率),使用 Singleton 直接调用而非 EventChannelSO。 + +--- + +## 12. 房间切换时序 + +``` +玩家穿过 CameraTriggerZone + │ + ▼ +CameraStateController.SwitchRoom(RoomCameraData) + │ + ├─ 1. inactive 机更新 Confiner + Offset + ├─ 2. brain.DefaultBlend ← BlendProfile + ├─ 3. inactive.Priority = active.Priority + 1 + │ → CinemachineBrain 自动 Blend + └─ 4. BlendFinished → 交换 active/inactive 引用 + active.Priority = 9 +``` + +**大房间(超出单屏)**:在同一房间内放置多个 `CameraTriggerZone` 指向相同 `RoomVisibleArea`,并调整 `CameraOffset` 实现子区域镜头引导,不切换 Confiner。 diff --git a/Docs/Architecture/18_VFXFeedbackModule.md b/Docs/Architecture/18_VFXFeedbackModule.md new file mode 100644 index 0000000..e185a89 --- /dev/null +++ b/Docs/Architecture/18_VFXFeedbackModule.md @@ -0,0 +1,823 @@ +# 18 · VFX 与反馈模块(VFX & Feedback Module) + +> **命名空间** `BaseGames.VFX` / `BaseGames.Feedback` +> **程序集** `BaseGames.VFX`(`Assets/Scripts/VFX/`) +> **依赖** Feel v4.3 · `BaseGames.Core`(GlobalObjectPool)· `BaseGames.Combat`(HitFxType · DamageInfo)· `BaseGames.Camera`(CameraStateController) +> **Design 来源** [41_VFXArchitecture](../Design/41_VFXArchitecture.md) · [07_FeedbackSystem](../Design/07_FeedbackSystem.md) + +--- + +## 目录 + +1. [模块职责](#1-模块职责) +2. [IFeedbackPlayer 接口](#2-ifeedbackplayer-接口) +3. [PlayerFeedback](#3-playerfeedback) +4. [EnemyFeedback](#4-enemyfeedback) +5. [FeedbackConfigSO](#5-feedbackconfigso) +6. [VFXPool — 粒子对象池](#6-vfxpool--粒子对象池) +7. [VFXCatalogSO — VFX 映射字典](#7-vfxcatalogso--vfx-映射字典) +8. [HitFXSpawner](#8-hitfxspawner) +9. [HurtFlashController](#9-hurtflashcontroller) +10. [PaletteSwapSystem](#10-paletteswapsystem) +11. [PostProcessManager](#11-postprocessmanager) +12. [RegionLightController](#12-regionlightcontroller) +13. [事件频道](#13-事件频道) +14. [VFX 分类与生命周期策略](#14-vfx-分类与生命周期策略) +15. [VFX 性能约束](#15-vfx-性能约束) +16. [MMF_Player 命名规范](#16-mmf_player-命名规范) + +--- + +## 1. 模块职责 + +``` +VFX & Feedback 模块职责: + ├─ IFeedbackPlayer → 反馈抽象接口(GameLogic 依赖此接口,不依赖 Feel) + ├─ PlayerFeedback → 玩家侧 MMF_Player 聚合,实现 IFeedbackPlayer + ├─ EnemyFeedback → 敌人侧 MMF_Player 聚合 + ├─ FeedbackConfigSO → 全局反馈参数(冻帧时长、震屏强度等) + ├─ VFXPool → ParticleSystem 专用对象池 + ├─ VFXCatalogSO → HitFxType → VFX Prefab AddressKey 映射 + ├─ HitFXSpawner → 监听 OnHitConfirmed,路由命中特效 + ├─ HurtFlashController → Shader 属性块驱动的受击白闪 + └─ PaletteSwapSystem → 形态切换时精灵调色板替换 +``` + +**零耦合**:`HitFXSpawner` 通过 `EVT_HitConfirmed` 事件频道获取命中信息,不直接引用战斗系统。 + +--- + +## 2. IFeedbackPlayer 接口 + +```csharp +namespace BaseGames.Feedback +{ + /// + /// 反馈执行器的抽象接口。 + /// GameLogic(PlayerCombat / EnemyBase)依赖此接口,不依赖 Feel 资产。 + /// 测试时可替换为 NullFeedbackPlayer。 + /// + public interface IFeedbackPlayer + { + void PlayHit(HitWeight weight); // 命中反馈(轻/中/重) + void PlayParrySuccess(); // 弹反成功 + void PlayTakeHit(); // 玩家/敌人受击 + void PlayDeath(); // 死亡演出 + void PlayHeal(); // 治疗 + void PlayLandImpact(); // 落地冲击 + void PlayAttackWhoosh(); // 攻击挥动音效 + void PlayJumpLaunch(); // 起跳 + void TriggerPreset(string presetId); // 通过 ID 触发任意预设(AnimEvent 用) + void PlaySFXById(string sfxId); // 通过 ID 播放音效(AnimEvent 用) + } + + /// 空实现,用于测试和无反馈需求场景。 + public class NullFeedbackPlayer : IFeedbackPlayer + { + public void PlayHit(HitWeight w) { } + public void PlayParrySuccess() { } + public void PlayTakeHit() { } + public void PlayDeath() { } + public void PlayHeal() { } + public void PlayLandImpact() { } + public void PlayAttackWhoosh() { } + public void PlayJumpLaunch() { } + public void TriggerPreset(string id) { } + public void PlaySFXById(string id) { } + } + + public enum HitWeight { Light, Medium, Heavy } +} +``` + +--- + +## 3. PlayerFeedback + +```csharp +namespace BaseGames.Feedback +{ + /// + /// 挂在 Player Prefab 根节点下的 [Feedback] 子 GameObject 上。 + /// 实现 IFeedbackPlayer,聚合所有玩家相关 MMF_Player。 + /// + public class PlayerFeedback : MonoBehaviour, IFeedbackPlayer + { + // ── MMF_Player 引用(Inspector 配置)──────────────── + [Header("命中反馈")] + [SerializeField] MMF_Player _onHitLight; + [SerializeField] MMF_Player _onHitMedium; + [SerializeField] MMF_Player _onHitHeavy; + + [Header("战斗反馈")] + [SerializeField] MMF_Player _onParrySuccess; + [SerializeField] MMF_Player _onTakeHit; + [SerializeField] MMF_Player _onDeath; + + [Header("移动反馈")] + [SerializeField] MMF_Player _onHeal; + [SerializeField] MMF_Player _onLandImpact; + [SerializeField] MMF_Player _onAttackWhoosh; + [SerializeField] MMF_Player _onJumpLaunch; + + [Header("配置")] + [SerializeField] FeedbackConfigSO _config; + + // ── Dictionary 预设(runtime,用于 TriggerPreset)─── + Dictionary _presetMap; + + void Awake() + { + _presetMap = new Dictionary + { + { "HitLight", _onHitLight }, + { "HitMedium", _onHitMedium }, + { "HitHeavy", _onHitHeavy }, + { "ParrySuccess", _onParrySuccess }, + { "TakeHit", _onTakeHit }, + { "Death", _onDeath }, + { "LandImpact", _onLandImpact }, + }; + } + + // ── IFeedbackPlayer 实现 ───────────────────────────── + public void PlayHit(HitWeight weight) + { + switch (weight) + { + case HitWeight.Light: _onHitLight?.PlayFeedbacks(); break; + case HitWeight.Medium: _onHitMedium?.PlayFeedbacks(); break; + case HitWeight.Heavy: _onHitHeavy?.PlayFeedbacks(); break; + } + } + public void PlayParrySuccess() => _onParrySuccess?.PlayFeedbacks(); + public void PlayTakeHit() => _onTakeHit?.PlayFeedbacks(); + public void PlayDeath() => _onDeath?.PlayFeedbacks(); + public void PlayHeal() => _onHeal?.PlayFeedbacks(); + public void PlayLandImpact() => _onLandImpact?.PlayFeedbacks(); + public void PlayAttackWhoosh() => _onAttackWhoosh?.PlayFeedbacks(); + public void PlayJumpLaunch() => _onJumpLaunch?.PlayFeedbacks(); + + public void TriggerPreset(string presetId) + { + if (_presetMap.TryGetValue(presetId, out var player)) + player?.PlayFeedbacks(); + } + + public void PlaySFXById(string sfxId) + { + // ⚠️ AudioManager.PlaySFX 接受 AudioClip(非 string)(架构 11_AudioModule §2) + // sfxId → AudioClip 解析需通过 SFX 目录;此处留空实现待扩展 + // 具体用法:持有 SFXCatalogSO 引用,查表后调用 AudioManager.Instance.PlaySFX(clip) + } + } +} +``` + +**Player Prefab 层级**: + +``` +[Player] +└── [Feedback] + ├── PlayerFeedback.cs + ├── MMF_Player_OnHitLight + ├── MMF_Player_OnHitMedium + ├── MMF_Player_OnHitHeavy + ├── MMF_Player_OnParrySuccess + ├── MMF_Player_OnTakeHit + ├── MMF_Player_OnDeath + ├── MMF_Player_OnHeal + ├── MMF_Player_OnLandImpact + ├── MMF_Player_OnAttackWhoosh + └── MMF_Player_OnJumpLaunch +``` + +--- + +## 4. EnemyFeedback + +```csharp +namespace BaseGames.Feedback +{ + /// + /// 挂在 EnemyBase Prefab 下的 [Feedback] 子 GameObject 上。 + /// EnemyBase 通过 [SerializeField] EnemyFeedback _feedback 引用。 + /// + public class EnemyFeedback : MonoBehaviour, IFeedbackPlayer + { + [SerializeField] MMF_Player _onTakeHit; + [SerializeField] MMF_Player _onDeath; + [SerializeField] MMF_Player _onHitLight; + [SerializeField] MMF_Player _onHitMedium; + [SerializeField] MMF_Player _onHitHeavy; + + // IFeedbackPlayer 实现(敌人侧只需命中/受击/死亡) + public void PlayHit(HitWeight weight) + { + switch (weight) + { + case HitWeight.Light: _onHitLight?.PlayFeedbacks(); break; + case HitWeight.Medium: _onHitMedium?.PlayFeedbacks(); break; + case HitWeight.Heavy: _onHitHeavy?.PlayFeedbacks(); break; + } + } + public void PlayTakeHit() => _onTakeHit?.PlayFeedbacks(); + public void PlayDeath() => _onDeath?.PlayFeedbacks(); + + // 未使用的接口方法(空实现) + public void PlayParrySuccess() { } + public void PlayHeal() { } + public void PlayLandImpact() { } + public void PlayAttackWhoosh() { } + public void PlayJumpLaunch() { } + public void TriggerPreset(string id) { } + public void PlaySFXById(string id) { } + } +} +``` + +--- + +## 5. FeedbackConfigSO + +```csharp +namespace BaseGames.Feedback +{ + [CreateAssetMenu(menuName = "Feedback/FeedbackConfig")] + public class FeedbackConfigSO : ScriptableObject + { + [Header("冻帧")] + [Range(0f, 0.2f)] + public float FreezeFrameDuration = 0.033f; // 默认 2 帧(60fps) + [Range(0f, 0.2f)] + public float ParryFreezeFrameDuration = 0.067f; // 弹反冻帧更长 + + [Header("子弹时间")] + [Range(0.01f, 1f)] + public float BulletTimeScale = 0.15f; + [Range(0f, 1f)] + public float BulletTimeDuration = 0.3f; + + [Header("镜头震动强度")] + public float ShakeLightForce = 0.2f; + public float ShakeMediumForce = 0.5f; + public float ShakeHeavyForce = 1.0f; + public float ShakeParryForce = 0.8f; + + [Header("受击白闪")] + public Color HurtFlashColor = Color.white; + [Range(0f, 0.5f)] + public float HurtFlashDuration = 0.15f; + } +} +``` + +**资产路径**:`Assets/ScriptableObjects/Feedback/Feedback_Config.asset` + +--- + +## 6. VFXPool — 粒子对象池 + +```csharp +namespace BaseGames.VFX +{ + /// + /// ParticleSystem 专用对象池,挂在 Persistent 场景 [VFXPool] GameObject 上。 + /// 粒子播放完成(或超过 MaxLifetime)后自动回池,调用方无需手动归还。 + /// + public class VFXPool : MonoBehaviour + { + public static VFXPool Instance { get; private set; } + + /// + /// 全局兜底超时(秒)。单个特效可在 Prefab 的 VFXPoolEntry 组件上覆盖。 + /// 防止循环粒子或异常长时间特效永不回池导致内存膨胀。 + /// + [SerializeField, Min(1f)] private float _globalMaxLifetime = 10f; + + readonly Dictionary> _pools = new(); + + void Awake() => Instance = this; + + /// + /// 在世界坐标播放一次特效。Fire-and-forget(UniTask 自动回池)。 + /// + /// + /// > 0 时覆盖全局超时;≤ 0 时使用 。 + /// + public async UniTaskVoid Play(AssetReferenceGameObject vfxRef, + Vector3 position, + Quaternion rotation = default, + float maxLifetime = 0f) + { + var ps = await GetOrCreateAsync(vfxRef); + float limit = maxLifetime > 0f ? maxLifetime : _globalMaxLifetime; + + ps.transform.SetPositionAndRotation(position, rotation); + ps.gameObject.SetActive(true); + ps.Play(); + + // 双重退出条件:粒子自然结束 OR 超时强制回收 + using var cts = new System.Threading.CancellationTokenSource( + System.TimeSpan.FromSeconds(limit)); + try + { + await UniTask.WaitUntil(() => !ps.IsAlive(true), + cancellationToken: cts.Token); + } + catch (System.OperationCanceledException) + { + // 超时:强制停止 + ps.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear); + Debug.LogWarning( + $"[VFXPool] '{vfxRef.RuntimeKey}' 超过 {limit:F1}s 强制回收。" + + "请检查粒子是否设为 Loop 或 Duration 过长。"); + } + + ps.gameObject.SetActive(false); + _pools[vfxRef].Enqueue(ps); + } + + /// + /// 预热:预先创建若干实例避免首次播放卡顿。 + /// + public async UniTask WarmupAsync(AssetReferenceGameObject vfxRef, int count) + { + for (int i = 0; i < count; i++) + { + var go = await Addressables.InstantiateAsync(vfxRef, transform).Task; + var ps = go.GetComponent(); + ps.gameObject.SetActive(false); + if (!_pools.ContainsKey(vfxRef)) _pools[vfxRef] = new Queue(); + _pools[vfxRef].Enqueue(ps); + } + } + + async UniTask GetOrCreateAsync(AssetReferenceGameObject vfxRef) + { + if (_pools.TryGetValue(vfxRef, out var q) && q.Count > 0) + return q.Dequeue(); + + // 池不存在时初始化 + if (!_pools.ContainsKey(vfxRef)) + _pools[vfxRef] = new Queue(); + + var go = await Addressables.InstantiateAsync(vfxRef, transform).Task; + return go.GetComponent(); + } + } +} +``` + +**`maxLifetime` 使用指南**: + +| 特效类型 | 建议 `maxLifetime` | 说明 | +|----------|-------------------|------| +| 命中火花 / 数字 | 默认(3s) | 时长已知,无需覆盖 | +| 爆炸 / 大范围 | `5f` | 稍长,粒子散逸需时间 | +| Boss 相位特效 | `15f` | 长动画,须显式指定 | +| 环境氛围循环粒子 | **不使用 VFXPool** | Loop 粒子应手动管理生命周期 | + +--- + +## 7. VFXCatalogSO — VFX 映射字典 + +```csharp +namespace BaseGames.VFX +{ + [CreateAssetMenu(menuName = "VFX/VFXCatalog")] + public class VFXCatalogSO : ScriptableObject + { + [Header("命中特效映射")] + public VFXEntry[] hitEffects; // HitFxType → VFX Prefab + + [Header("预热配置")] + public VFXWarmupEntry[] warmups; + + private Dictionary _map; + + /// 在 GameManager.OnGameplayStarted 中调用,建立快速查表字典。 + public void Initialize() + { + _map = new Dictionary(); + foreach (var e in hitEffects) _map[e.type] = e.vfxRef; + } + + /// 根据 HitFxType 查找对应的 VFX Prefab 引用。 + public bool TryGetHitFX(HitFxType type, out AssetReferenceGameObject vfxRef) + { + if (_map != null) return _map.TryGetValue(type, out vfxRef); + // 未初始化时回退至线性查找 + foreach (var e in hitEffects) + { + if (e.type == type) { vfxRef = e.vfxRef; return true; } + } + vfxRef = default; + return false; + } + } + + [Serializable] + public struct VFXEntry + { + public HitFxType type; + public AssetReferenceGameObject vfxRef; + } + + [Serializable] + public struct VFXWarmupEntry + { + public AssetReferenceGameObject vfxRef; + [Min(1)] public int warmupCount; // 建议 3~5 + } +} +``` + +**资产路径**:`Assets/ScriptableObjects/VFX/VFX_Catalog.asset` + +--- + +## 8. HitFXSpawner + +```csharp +namespace BaseGames.VFX +{ + /// + /// 监听 EVT_HitConfirmed 事件频道,从 VFXPool 取粒子播放命中特效。 + /// 挂在 Persistent 场景 [VFXSystem] GameObject 上。 + /// + public class HitFXSpawner : MonoBehaviour + { + [SerializeField] HitConfirmedEventChannelSO _onHitConfirmed; + [SerializeField] VFXCatalogSO _catalog; + + void OnEnable() => _onHitConfirmed.OnEventRaised += HandleHit; + void OnDisable() => _onHitConfirmed.OnEventRaised -= HandleHit; + + void HandleHit(HitInfo info) + { + if (_catalog.TryGetHitFX(info.DamageInfo.HitFxType, out var vfxRef)) + VFXPool.Instance.Play(vfxRef, info.HitPoint).Forget(); + } + } +} +``` + +--- + +## 9. HurtFlashController + +```csharp +namespace BaseGames.VFX +{ + /// + /// 受击白闪效果,通过 Material Property Block 修改 Shader 参数。 + /// 挂在玩家/敌人的 SpriteRenderer 所在 GameObject 上。 + /// 不复制 Material(避免 GC),通过 MaterialPropertyBlock 实现。 + /// + public class HurtFlashController : MonoBehaviour + { + [SerializeField] SpriteRenderer _renderer; + [SerializeField] FeedbackConfigSO _config; + + static readonly int FlashColorID = Shader.PropertyToID("_FlashColor"); + static readonly int FlashAmountID = Shader.PropertyToID("_FlashAmount"); + + MaterialPropertyBlock _block; + + void Awake() => _block = new MaterialPropertyBlock(); + + /// 触发一次受击白闪(由 IFeedbackPlayer.PlayTakeHit 间接调用)。 + public async UniTaskVoid Flash(CancellationToken ct = default) + { + _renderer.GetPropertyBlock(_block); + _block.SetColor(FlashColorID, _config.HurtFlashColor); + _block.SetFloat(FlashAmountID, 1f); + _renderer.SetPropertyBlock(_block); + + await UniTask.Delay( + TimeSpan.FromSeconds(_config.HurtFlashDuration), + cancellationToken: ct); + + _block.SetFloat(FlashAmountID, 0f); + _renderer.SetPropertyBlock(_block); + } + } +} +``` + +**Shader 要求**:`SpriteRenderer` 所用 Shader 需支持 `_FlashColor`(Color)和 `_FlashAmount`(float 0~1)属性(URP Sprite-Lit-Flash 变体)。 + +--- + +## 10. PaletteSwapSystem + +```csharp +namespace BaseGames.VFX +{ + /// + /// 形态切换时替换玩家精灵调色板。 + /// 通过 Texture2D 查找表(LUT)Shader 实现,不换 Sprite 资产。 + /// 挂在玩家 SpriteRenderer 所在 GameObject 上。 + /// + public class PaletteSwapSystem : MonoBehaviour + { + [SerializeField] SpriteRenderer _renderer; + [SerializeField] PaletteCatalogSO _catalog; + + static readonly int PaletteTexID = Shader.PropertyToID("_PaletteTex"); + + MaterialPropertyBlock _block; + + void Awake() => _block = new MaterialPropertyBlock(); + + /// 切换到指定形态的调色板。由 FormController 调用。 + public void ApplyPalette(FormType form) + { + if (!_catalog.TryGetPalette(form, out var tex)) return; + _renderer.GetPropertyBlock(_block); + _block.SetTexture(PaletteTexID, tex); + _renderer.SetPropertyBlock(_block); + } + } + + [CreateAssetMenu(menuName = "VFX/PaletteCatalog")] + public class PaletteCatalogSO : ScriptableObject + { + public PaletteEntry[] entries; + + public bool TryGetPalette(FormType form, out Texture2D tex) + { + foreach (var e in entries) + { + if (e.form == form) { tex = e.paletteLUT; return true; } + } + tex = null; + return false; + } + } + + [Serializable] + public struct PaletteEntry + { + public FormType form; + public Texture2D paletteLUT; // 1D 查找表纹理(256×1 px) + } +} +``` + +--- + +## 11. PostProcessManager + +```csharp +namespace BaseGames.VFX +{ + /// + /// 后处理 Volume 分区管理器,挂在 Persistent 场景 [PostProcess] GameObject 上。 + /// 通过 DOTween 平滑 blend Weight,监听游戏状态事件。 + /// + public class PostProcessManager : MonoBehaviour + { + [Header("Volume 引用(Persistent 场景内)")] + [SerializeField] Volume _underwaterVolume; // Priority=10 + [SerializeField] Volume _bossArenaVolume; // Priority=10 + [SerializeField] Volume _deathVolume; // Priority=20 + [SerializeField] Volume _victoryVolume; // Priority=10 + + [Header("事件频道")] + [SerializeField] VoidEventChannelSO _onLiquidEntered; + [SerializeField] VoidEventChannelSO _onLiquidExited; + [SerializeField] VoidEventChannelSO _onBossFightStarted; + [SerializeField] VoidEventChannelSO _onBossFightEnded; + [SerializeField] VoidEventChannelSO _onPlayerDied; + [SerializeField] VoidEventChannelSO _onPlayerRespawned; + [SerializeField] VoidEventChannelSO _onBossDefeated; + + [SerializeField] float _blendDuration = 0.4f; + + private Volume[] _nonDefaultVolumes; + + private void Awake() + { + _nonDefaultVolumes = new[] { _underwaterVolume, _bossArenaVolume, _deathVolume, _victoryVolume }; + } + + private void OnEnable() + { + _onLiquidEntered.OnEventRaised += () => BlendTo(_underwaterVolume); + _onLiquidExited.OnEventRaised += ResetAll; + _onBossFightStarted.OnEventRaised += () => BlendTo(_bossArenaVolume); + _onBossFightEnded.OnEventRaised += ResetAll; + _onPlayerDied.OnEventRaised += () => BlendTo(_deathVolume); + _onPlayerRespawned.OnEventRaised += ResetAll; + _onBossDefeated.OnEventRaised += () => BlendTo(_victoryVolume); + } + + private void OnDisable() + { + _onLiquidEntered.OnEventRaised -= () => BlendTo(_underwaterVolume); + _onLiquidExited.OnEventRaised -= ResetAll; + _onBossFightStarted.OnEventRaised -= () => BlendTo(_bossArenaVolume); + _onBossFightEnded.OnEventRaised -= ResetAll; + _onPlayerDied.OnEventRaised -= () => BlendTo(_deathVolume); + _onPlayerRespawned.OnEventRaised -= ResetAll; + _onBossDefeated.OnEventRaised -= () => BlendTo(_victoryVolume); + } + + private void BlendTo(Volume target) + { + foreach (var v in _nonDefaultVolumes) + DOTween.To(() => v.weight, x => v.weight = x, 0f, _blendDuration) + .SetAutoKill(true).SetLink(gameObject); + + DOTween.To(() => target.weight, x => target.weight = x, 1f, _blendDuration) + .SetAutoKill(true).SetLink(gameObject); + } + + private void ResetAll() + { + foreach (var v in _nonDefaultVolumes) + DOTween.To(() => v.weight, x => v.weight = x, 0f, _blendDuration) + .SetAutoKill(true).SetLink(gameObject); + } + } +} +``` + +### Volume 结构与 Profile 参数 + +``` +Persistent 场景 [PostProcess]: + ├── Volume_Default Priority=0 Weight=1.0(始终生效基础 Profile) + ├── Volume_Underwater Priority=10 Weight=0(进水时 blend 到 1.0) + ├── Volume_BossArena Priority=10 Weight=0(Boss 战开始时 blend 到 1.0) + ├── Volume_Death Priority=20 Weight=0(玩家死亡时 blend 到 1.0) + └── Volume_Victory Priority=10 Weight=0(Boss 击败时 blend 到 1.0) +``` + +| Volume | Bloom | Color Grading | Vignette | Chromatic Aberration | +|--------|-------|--------------|----------|---------------------| +| Default | Intensity 0.3 | 正常 | 0.2 | 关闭 | +| Underwater | 0.1 | 青绿 Filter -0.3 | 0.45 | 0.4 | +| BossArena | 0.5 | 饱和度 +20% | 0.35 | 0.15 | +| Death | 0 | 去饱和度 -80% | 0.7(黑色)| 0.8 | +| Victory | 0.8(白色)| 亮度 +0.4 | 0 | 0 | + +> **DOTween 规范**:所有 `DOTween.To()` 必须链式调用 `.SetAutoKill(true).SetLink(gameObject)`;禁止使用 `DOTween.KillAll()`。 + +--- + +## 12. RegionLightController + +```csharp +namespace BaseGames.VFX +{ + /// + /// 区域进出时平滑切换 Global Light 2D 颜色和强度。 + /// 挂在 Persistent 场景 [Lighting] GameObject 上,监听 OnRegionEntered 事件频道。 + /// + public class RegionLightController : MonoBehaviour + { + [SerializeField] Light2D _globalLight; + [SerializeField] RegionLightCatalogSO _catalog; // RegionId → 颜色 + 强度 + [SerializeField] StringEventChannelSO _onRegionEntered; + [SerializeField] float _transitionDuration = 1.5f; + + private void OnEnable() => _onRegionEntered.OnEventRaised += OnRegionEntered; + private void OnDisable() => _onRegionEntered.OnEventRaised -= OnRegionEntered; + + private void OnRegionEntered(string regionId) + { + if (!_catalog.TryGet(regionId, out var config)) return; + DOTween.To(() => _globalLight.color, + x => _globalLight.color = x, + config.Color, _transitionDuration) + .SetAutoKill(true).SetLink(gameObject); + DOTween.To(() => _globalLight.intensity, + x => _globalLight.intensity = x, + config.Intensity, _transitionDuration) + .SetAutoKill(true).SetLink(gameObject); + } + } + + [CreateAssetMenu(menuName = "VFX/RegionLightCatalog")] + public class RegionLightCatalogSO : ScriptableObject + { + [Serializable] + public struct RegionLightConfig + { + public string regionId; + public Color Color; + [Range(0f, 1f)] public float Intensity; + } + + [SerializeField] RegionLightConfig[] _entries; + + public bool TryGet(string regionId, out RegionLightConfig cfg) + { + foreach (var e in _entries) + { + if (e.regionId == regionId) { cfg = e; return true; } + } + cfg = default; + return false; + } + } +} +``` + +### URP 2D 光照层(Light Layer)规范 + +| Light Layer | 名称 | 用途 | +|------------|------|------| +| 0 | `Default` | 全局环境光(所有对象默认受光)| +| 1 | `Environment` | 蜡烛、火把、发光水晶等环境光源 | +| 2 | `PlayerLight` | 玩家携带光源(如灵力发光)| +| 3 | `EnemyLight` | Boss 爆炸闪光、特殊敌人发光体 | +| 4 | `FXOnly` | 仅特效 ParticleSystem 受此层光照 | +| 5–7 | _预留_ | 未来扩展 | + +**规则**:地形 Tilemap 仅勾选 Layer 0;粒子特效勾选 Layer 0 + 4;敌人勾选 Layer 0 + 3。 + +### 区域 Global Light 2D 参数速查 + +| 区域 | 颜色 | 强度 | +|------|------|------| +| Forest(扎根森林)| `#C8E8D0`(淡绿)| 0.8 | +| Cave(腐蚀洞穴)| `#1A0A2E`(深紫)| 0.2 | +| Ruins(坍塌废墟)| `#3D3028`(暖褐)| 0.5 | +| Abyss(深渊裂隙)| `#000820`(极暗蓝)| 0.1 | +| Core(核心熔炉)| `#4A1800`(暗红橙)| 0.6 | + +--- + +## 13. 事件频道 + +| 频道 SO | Payload | 发布者 | 订阅者 | +|--------|---------|--------|--------| +| `EVT_HitConfirmed` | `HitInfo` | `HurtBox.ReceiveDamage` | `HitFXSpawner`、`AudioManager`、`PlayerFeedback`(受击方) | +| `EVT_RegionEntered` | `string regionId` | `RegionTrigger` | `RegionLightController`、`AudioManager` | + +> 注:`HurtFlashController.Flash()` 和 `CameraStateController.TriggerImpulse()` 均由 `IFeedbackPlayer`(`PlayerFeedback`)通过直接调用触发,不使用独立事件频道。 + +--- + +## 14. VFX 分类与生命周期策略 + +| 分类 | 示例 | 生命周期策略 | 说明 | +|------|------|------------|------| +| **命中特效** | 刀击火花、魔法爆炸 | 对象池(VFXPool)| 频繁触发,必须池化 | +| **状态特效** | 持续燃烧、中毒气泡 | Prefab 跟随目标 Transform | 随目标销毁,不需要池 | +| **环境特效** | 灰尘、落叶、水泡 | 场景内预放置,常驻播放 | 不产生运行时 Instantiate | +| **能力特效** | 冲刺残影、双跳光圈 | 对象池(VFXPool)| 中等频率,建议池化 | +| **死亡特效** | 敌人爆裂、Boss 死亡烟花 | Addressables.InstantiateAsync | 低频但复杂,不值得池化 | +| **UI 特效** | 升级闪光、货币飞入 | Timeline Signal / MMF_Player | 在 UI Canvas 子层用 UI Particle | + +**原则**:帧内可能多次触发(命中、脚步等)→ 池化;每关卡最多触发数次 → Addressables 按需加载。 + +### HitFxType 枚举值速查 + +| 枚举值 | 特效 | 建议粒子数 | +|-------|------|----------| +| `Spark` | 金属碰撞火花 | ≤ 8 | +| `Blood` | 敌人受击血迹 | ≤ 12 | +| `Magic` | 法术命中光环 | ≤ 15 | +| `Crit` | 暴击大爆炸 | ≤ 20 | +| `Void` | 深渊伤害涟漪 | ≤ 10 | +| `Heal` | 治疗绿光粒子 | ≤ 8 | +| `Parry` | 弹反白光爆散 | ≤ 20 | + +--- + +## 15. VFX 性能约束 + +| 约束项 | 限制 | 备注 | +|--------|------|------| +| 同屏活跃粒子总数 | ≤ 500 | 超过时 GPU 帧时上升 | +| 单次命中特效粒子数 | ≤ 20 | HitFxType 表格已约束 | +| 同屏 Light 2D 数量 | ≤ 16 | 超过时触发 URP 2D 光照降级 | +| Shadow Caster 2D 数量 | ≤ 32 | Composite 模式下 1 Tilemap = 1 | +| 新增 VFX Prefab | 必须通过 VFXPool 统一管理 | PR Review 清单检查项 | +| `Material.SetXxx()` 直接调用 | 禁止 | 一律用 MaterialPropertyBlock | +| `Instantiate(ParticleSystem)` 运行时调用 | 禁止 | 一律从 VFXPool.Play() 取 | + +--- + +## 16. MMF_Player 命名规范 + +| 格式 | 示例 | +|------|------| +| `MMF_{Owner}_{EventName}` | `MMF_Player_OnTakeHit`、`MMF_Enemy_OnDeath`、`MMF_Boss_OnPhaseChange` | + +**常用 Feedback 类型速查**: + +| Feel Feedback | 用途 | 关键参数 | +|--------------|------|---------| +| `MMF_Flash` | Sprite 受击白闪 | `FlashColor`, `Duration` | +| `MMF_FreezeFrame` | 命中冻帧 | `FreezeDuration`(来自 FeedbackConfigSO) | +| `MMF_TimeScale` | 子弹时间 | `TimeScale`, `Duration` | +| `MMF_CinemachineImpulse` | 镜头震动 | `ImpulseSource`, `Velocity` | +| `MMF_Particles` | 命中粒子 | `ParticleSystem` 引用 | +| `MMF_AudioSource` | 音效 | `AudioClip`, `PitchVariance` | +| `MMF_TextMeshPro` | 伤害数字弹出 | 浮动文字动画 | diff --git a/Docs/Architecture/19_DifficultyModule.md b/Docs/Architecture/19_DifficultyModule.md new file mode 100644 index 0000000..32a7bba --- /dev/null +++ b/Docs/Architecture/19_DifficultyModule.md @@ -0,0 +1,328 @@ +# 19 · 难度系统模块(Difficulty Module) + +> **命名空间** `BaseGames.Core` +> **程序集** `BaseGames.Core`(`Assets/Scripts/Core/`,并入核心程序集) +> **依赖** `BaseGames.Core.Events` · `BaseGames.Player`(PlayerStats)· `BaseGames.Enemies`(EnemyStats) +> **Design 来源** [29_DifficultyModesGuide](../Design/29_DifficultyModesGuide.md) + +--- + +## 目录 + +1. [模块职责](#1-模块职责) +2. [DifficultyLevel 枚举](#2-difficultylevel-枚举) +3. [DifficultyScalerSO](#3-difficultyscalerso) +4. [DifficultyManager](#4-difficultymanager) +5. [各系统集成钩子](#5-各系统集成钩子) +6. [钢铁之魂模式特殊规则](#6-钢铁之魂模式特殊规则) +7. [SaveData 集成](#7-savedata-集成) +8. [事件频道](#8-事件频道) +9. [资产路径](#9-资产路径) + +--- + +## 1. 模块职责 + +``` +难度系统职责: + ├─ DifficultyLevel enum → 四档难度标识 + ├─ DifficultyScalerSO → 各难度的数值缩放配置(四份资产,分别对应四档) + ├─ DifficultyManager → 常驻 Persistent 场景,持有当前难度,广播变更 + └─ 系统集成钩子 → PlayerStats / EnemyStats / ShopController + 在 Initialize 时注入缩放系数 +``` + +**零耦合原则**:各系统**不持有** `DifficultyManager` 引用,只在初始化时读取对应难度的 `DifficultyScalerSO`,或订阅 `EVT_DifficultyChanged` 事件频道动态更新。 + +--- + +## 2. DifficultyLevel 枚举 + +```csharp +namespace BaseGames.Core +{ + public enum DifficultyLevel + { + Easy = 0, // 协助模式 + Normal = 1, // 标准模式(默认) + Hard = 2, // 穿刺模式 + SteelSoul = 3, // 钢铁之魂(一命,选择后不可降级) + } +} +``` + +--- + +## 3. DifficultyScalerSO + +```csharp +namespace BaseGames.Core +{ + [CreateAssetMenu(menuName = "Core/DifficultyScaler")] + public class DifficultyScalerSO : ScriptableObject + { + [Header("标识")] + public DifficultyLevel level; + + [Header("玩家属性缩放")] + [Range(0.1f, 3.0f)] + public float PlayerMaxHPMultiplier = 1.0f; // 最大 HP 倍率 + [Range(0.1f, 3.0f)] + public float PlayerDamageMultiplier = 1.0f; // 玩家造成的伤害倍率 + [Range(0.0f, 2.0f)] + public float InvincibilityFrameScale = 1.0f; // 无敌帧时长倍率 + + [Header("敌人属性缩放")] + [Range(0.1f, 3.0f)] + public float EnemyDamageMultiplier = 1.0f; // 敌人造成的伤害倍率 + [Range(0.1f, 3.0f)] + public float EnemyHPMultiplier = 1.0f; // 敌人 HP 倍率 + [Range(0.1f, 3.0f)] + public float BossDamageMultiplier = 1.0f; // Boss 伤害单独控制 + [Range(0.1f, 3.0f)] + public float BossHPMultiplier = 1.0f; + + [Header("商店价格")] + [Range(0.5f, 2.0f)] + public float ShopPriceMultiplier = 1.0f; // 商品价格倍率(Easy 可折扣) + + [Header("游戏规则")] + public bool CanReviveWithGeoLoss = true; // 死亡时 Geo 掉落至遗骸 + public bool InstantDeathOnZeroHP = false; // SteelSoul:HP 归零直接清档 + public bool GeoPenaltyOnDeath = true; // false = Easy 无 Geo 损失 + + [Header("AI 行为(Behavior Designer 黑板变量名)")] + public float EnemyAttackIntervalScale = 1.0f; // 攻击间隔倍率(Hard < 1 = 更频繁) + public float EnemyAggroRangeScale = 1.0f; // 感知范围倍率 + [Range(0.3f, 2.0f)] + public float EnemyReactionTimeScale = 1.0f; // 反应时间倍率(>1 = 更慢 = 更简单) + [Range(0, 5)] + public int EnemyAggressionLevel = 2; // 0=被动 … 5=全力出击(影响 BT 决策权重) + + [Header("掉落与奖励")] + [Range(0.0f, 3.0f)] + public float GeoDropMultiplier = 1.0f; // Geo 掉落量倍率(Easy 可给更多) + } +} +``` + +**四档预设资产**(`Assets/ScriptableObjects/Core/Difficulty/`): + +| 资产 | 玩家HP | 玩家伤害 | 敌人伤害 | 敌人HP | 反应时间 | 侵略等级 | Geo倍率 | 规则 | +|------|:---:|:---:|:---:|:---:|:---:|:---:|:---:|------| +| `Difficulty_Easy.asset` | ×1.5 | ×1.0 | ×0.7 | ×0.9 | ×1.4 | 1 | ×1.2 | 无 Geo 损失 | +| `Difficulty_Normal.asset` | ×1.0 | ×1.0 | ×1.0 | ×1.0 | ×1.0 | 2 | ×1.0 | 标准 | +| `Difficulty_Hard.asset` | ×0.75 | ×1.0 | ×1.3 | ×1.2 | ×0.7 | 3 | ×1.0 | 攻击间隔 ×0.8 | +| `Difficulty_SteelSoul.asset` | ×1.2 | ×1.0 | ×1.5 | ×1.5 | ×0.6 | 4 | ×1.0 | `InstantDeathOnZeroHP=true` | + +--- + +## 4. DifficultyManager + +```csharp +namespace BaseGames.Core +{ + /// + /// 全局难度管理器,挂在 Persistent 场景 [GameManagers] 下。 + /// 持有当前难度 ScalerSO,提供静态访问入口,广播难度变更事件。 + /// DefaultExecutionOrder(-900):确保在 PlayerStats(-800)/EnemyStats(-800) 的 + /// Awake 之前完成初始化,使它们能在 Start 时通过 DifficultyManager.Instance.CurrentScaler + /// 读取到正确的难度系数(无需等待 EVT_DifficultyChanged 广播)。 + /// + [DefaultExecutionOrder(-900)] + public class DifficultyManager : MonoBehaviour + { + // ── Inspector ──────────────────────────────────────── + [SerializeField] DifficultyScalerSO[] _allScalers; // 4 档资产 + [SerializeField] DifficultyChangedEventChannel _onDifficultyChanged; + + // ── Singleton ──────────────────────────────────────── + public static DifficultyManager Instance { get; private set; } + + // ── Runtime State ──────────────────────────────────── + public DifficultyLevel CurrentLevel { get; private set; } = DifficultyLevel.Normal; + public DifficultyScalerSO CurrentScaler { get; private set; } + + void Awake() + { + Instance = this; + // 默认初始化为 Normal;SaveData 加载后由 GameManager.Start 调用 Apply(saveData.DifficultyLevel) + // 注意:因 DefaultExecutionOrder(-900) 早于 PlayerStats(-800)/EnemyStats(-800), + // 它们的 Awake 执行时 DifficultyManager.Instance 已就绪,可直接读取 CurrentScaler。 + Apply(DifficultyLevel.Normal); + } + + /// + /// 应用难度。新游戏开始/读档时由 GameManager 调用。 + /// + public void Apply(DifficultyLevel level) + { + // SteelSoul 不可降级 + if (CurrentLevel == DifficultyLevel.SteelSoul && level != DifficultyLevel.SteelSoul) + { + Debug.LogWarning("[DifficultyManager] SteelSoul 模式不可降级"); + return; + } + + CurrentLevel = level; + CurrentScaler = GetScaler(level); + _onDifficultyChanged.Raise(CurrentScaler); + } + + public DifficultyScalerSO GetScaler(DifficultyLevel level) + { + foreach (var s in _allScalers) + if (s.level == level) return s; + + Debug.LogError($"[DifficultyManager] 找不到 {level} 的 ScalerSO"); + return _allScalers[0]; // fallback + } + + /// + /// 游戏进行中切换难度(仅允许 Easy ↔ Normal ↔ Hard)。 + /// + public void ChangeDifficulty(DifficultyLevel newLevel) + { + if (newLevel == DifficultyLevel.SteelSoul) + { + Debug.LogWarning("[DifficultyManager] 游戏进行中不可切换到 SteelSoul"); + return; + } + Apply(newLevel); + } + } +} +``` + +--- + +## 5. 各系统集成钩子 + +### PlayerStats + +> ⚠️ `PlayerStats` **无** `Initialize(PlayerStatsSO, DifficultyScalerSO)` 方法。 +> `PlayerStatsSO _config` 通过 Inspector `[SerializeField]` 注入(见 `05_PlayerModule §4`)。 +> 难度集成**纯事件驱动**:订阅 `_onDifficultyChanged` 频道,在回调中按比例调整 HP 等属性。 + +```csharp +// PlayerStats.cs(见 05_PlayerModule §4): +// _config 为 Inspector 注入的 PlayerStatsSO,无 Initialize 方法 + +[SerializeField] DifficultyChangedEventChannel _onDifficultyChanged; + +void OnEnable() => _onDifficultyChanged.OnEventRaised += OnDifficultyChanged; +void OnDisable() => _onDifficultyChanged.OnEventRaised -= OnDifficultyChanged; + +void OnDifficultyChanged(DifficultyScalerSO scaler) +{ + // 按比例调整当前 HP + float hpRatio = (float)CurrentHP / MaxHP; + MaxHP = Mathf.RoundToInt(_config.BaseMaxHP * scaler.PlayerMaxHPMultiplier); + CurrentHP = Mathf.RoundToInt(MaxHP * hpRatio); + _damageMultiplier = scaler.PlayerDamageMultiplier; + _iFrameScale = scaler.InvincibilityFrameScale; +} +``` + +### EnemyStats + +> ⚠️ `EnemyStats.Initialize` 签名为 `Initialize(EnemyStatsSO so)`(仅 1 个参数,见 `07_EnemyModule §2`)。 +> 难度缩放通过订阅 `_onDifficultyChanged` 事件频道动态应用,**不通过 Initialize 注入 scaler**。 + +```csharp +// EnemyStats.cs(见 07_EnemyModule §2): +// Initialize 签名:public void Initialize(EnemyStatsSO so); + +[SerializeField] DifficultyChangedEventChannel _onDifficultyChanged; + +void OnEnable() => _onDifficultyChanged.OnEventRaised += OnDifficultyChanged; +void OnDisable() => _onDifficultyChanged.OnEventRaised -= OnDifficultyChanged; + +void OnDifficultyChanged(DifficultyScalerSO scaler) +{ + MaxHP = Mathf.RoundToInt(_config.BaseHP * scaler.EnemyHPMultiplier); + CurrentHP = Mathf.Min(CurrentHP, MaxHP); + // AI 黑板变量(AttackIntervalScale) + _behaviorTree.SetVariableValue("AttackIntervalScale", scaler.EnemyAttackIntervalScale); +} +``` + +### ShopController + +```csharp +// ShopController.GetPrice() 中: +public int GetPrice(ShopItemSO item) +{ + var scaler = DifficultyManager.Instance.CurrentScaler; + return Mathf.RoundToInt(item.BasePrice * scaler.ShopPriceMultiplier); +} +``` + +--- + +## 6. 钢铁之魂模式特殊规则 + +| 规则 | 实现位置 | +|------|---------| +| HP 归零立即清档(删除存档文件) | `GameManager.HandlePlayerDeath()` 检查 `DifficultyScalerSO.InstantDeathOnZeroHP` | +| 死亡界面显示"钢铁之魂终结"专属 UI | `DeathScreen` 读取 `DifficultyManager.CurrentLevel` 选择显示内容 | +| 存档 UI 显示钢铁之魂徽章 | `SaveSlotUI` 读取 `SaveData.DifficultyLevel` | +| 不可降级 | `DifficultyManager.Apply()` 中强制校验 | + +**SteelSoul 死亡流程(GameManager)**: + +```csharp +// GameManager.HandlePlayerDeath()(伪码) +if (DifficultyManager.Instance.CurrentScaler.InstantDeathOnZeroHP) +{ + // 1. 黑屏淡出(CameraStateController 广播黑屏事件) + _onPlayerDied.Raise(); + + // 2. 等待动画结束(UniTask) + await UniTask.Delay(TimeSpan.FromSeconds(2f), cancellationToken: _cts.Token); + + // 3. 删除存档文件 + SaveManager.Instance.DeleteSave(SaveManager.Instance.CurrentSlotIndex); + + // 4. 返回主菜单(SceneLoader) + SceneLoader.Instance.LoadScene("MainMenu"); +} +else +{ + // 普通死亡:显示死亡 UI,等待复活 + _onPlayerDied.Raise(); +} +``` + +--- + +## 7. SaveData 集成 + +`SaveData.DifficultyLevel`(`int`,存枚举原始值)在 `GameManager.LoadGame` 后调用: + +```csharp +DifficultyManager.Instance.Apply((DifficultyLevel)saveData.DifficultyLevel); +``` + +新游戏开始时(角色创建界面选择难度后)同样调用 `Apply()`。 + +--- + +## 8. 事件频道 + +| 频道 SO | Payload | 发布者 | 订阅者 | +|--------|---------|--------|--------| +| `EVT_DifficultyChanged` | `DifficultyScalerSO` | `DifficultyManager` | `PlayerStats`、`EnemyStats`(动态调整)、`HUDController`(刷新难度标识) | + +--- + +## 9. 资产路径 + +``` +Assets/ScriptableObjects/Core/ +└── Difficulty/ + ├── Difficulty_Easy.asset + ├── Difficulty_Normal.asset + ├── Difficulty_Hard.asset + └── Difficulty_SteelSoul.asset +``` diff --git a/Docs/Architecture/20_ShieldModule.md b/Docs/Architecture/20_ShieldModule.md new file mode 100644 index 0000000..291dffb --- /dev/null +++ b/Docs/Architecture/20_ShieldModule.md @@ -0,0 +1,388 @@ +# 20 · 护盾模块(Shield Module) + +> **命名空间** `BaseGames.Player.Shield` +> **程序集** `BaseGames.Player`(并入玩家程序集) +> **依赖** `BaseGames.Core.Events` · `BaseGames.Combat`(DamageInfo · HurtBox)· `BaseGames.UI`(HUDController) +> **Design 来源** [30_ShieldMechanicsSystem](../Design/30_ShieldMechanicsSystem.md) + +--- + +## 目录 + +1. [模块职责](#1-模块职责) +2. [伤害管道修正](#2-伤害管道修正) +3. [ShieldConfigSO](#3-shieldconfigso) +4. [ShieldComponent](#4-shieldcomponent) +5. [IShieldable 接口](#5-ishieldable-接口) +6. [护盾恢复机制](#6-护盾恢复机制) +7. [护盾 UI 集成](#7-护盾-ui-集成) +8. [弹反集成(P1)](#8-弹反集成p1) +9. [SaveData 集成](#9-savedata-集成) +10. [事件频道](#10-事件频道) + +--- + +## 1. 模块职责 + +护盾是独立于玩家 HP 之外的**第二道防御层**: + +``` +伤害输入(来自 HurtBox) + │ + ▼ +ShieldComponent.AbsorbDamage(incomingDamage) + ├─ 护盾耐久 > 0 且未破碎 + │ ├─ 吸收 = damage × DamageAbsorptionRatio + │ ├─ 扣除护盾耐久 + │ ├─ 耐久归零 → 触发护盾破碎(EVT_ShieldBroken) + │ └─ 返回穿透量 → HurtBox 直接调用 _damageable.TakeDamage(passInfo) + │ + └─ 护盾已破碎或耐久 = 0 + └─ HurtBox 走原始伤害流程(直接 TakeDamage) +``` + +**零耦合**:`ShieldComponent.AbsorbDamage()` 只返回穿透量,不持有 `PlayerStats` 引用。穿透伤害由 `HurtBox.ReceiveDamage()` 负责转交给 `IDamageable.TakeDamage()`(见 §2)。 + +--- + +## 2. 伤害管道修正 + +`HurtBox.ReceiveDamage()` 需要在调用 `IDamageable.TakeDamage` 之前检查护盾: + +```csharp +// HurtBox.cs(修改 06_CombatModule §2 的实现) +public void ReceiveDamage(DamageInfo info) +{ + if (!_isActive) return; + if (_shieldable != null && _shieldable.HasShield) + { + // 护盾优先拦截:AbsorbDamage 返回穿透伤害剧量 + int passThrough = _shieldable.AbsorbDamage(info.Amount); + if (passThrough > 0) + { + var passInfo = info; + passInfo.Amount = passThrough; + _damageable?.TakeDamage(passInfo); + } + // ShieldComponent 内部已通过事件频道更新 ShieldBarUI + return; + } + // 无护盾或已穿透,走原始流程 + _damageable?.TakeDamage(info); + _onDamageDealt.Raise(info); // EVT_DamageDealt(AnalyticsManager) + _onHitConfirmed.Raise(new HitInfo { DamageInfo = info, HitPoint = transform.position }); +} +``` + +`PlayerController` 在 Awake 时将 `ShieldComponent` 注入 `HurtBox._shieldable`: + +```csharp +// PlayerController.Awake() +_hurtBox.SetShieldable(_shieldComponent); +``` + +--- + +## 3. ShieldConfigSO + +```csharp +namespace BaseGames.Player.Shield +{ + [CreateAssetMenu(menuName = "Player/ShieldConfig")] + public class ShieldConfigSO : ScriptableObject + { + [Header("耐久")] + [Min(1)] + public int MaxShieldHP = 60; + [Range(0f, 1f)] + public float DamageAbsorptionRatio = 1.0f; // 1.0 = 完全吸收 + + [Header("恢复")] + [Min(0f)] + public float RechargeDelay = 2.5f; // 最后一次受击后延迟恢复的秒数 + [Min(0f)] + public float RechargeRate = 20f; // 每秒恢复耐久点数 + public bool FullRechargeOnSavePoint = true; // 激活存档点时护盾立即满值 + + [Header("破碎惩罚")] + [Min(0f)] + public float BrokenPenaltyDuration = 3.0f; // 护盾破碎后无法恢复的时间 + + [Header("弹反加成(P1)")] + [Range(0f, 1f)] + public float ParryRestoreRatio = 0.3f; // 成功格挡时恢复护盾耐久比例 + } +} +``` + +**资产路径**:`Assets/ScriptableObjects/Player/Shield_Config.asset` + +--- + +## 4. ShieldComponent + +```csharp +namespace BaseGames.Player.Shield +{ + /// + /// 挂在 PlayerController 子节点 [Shield] 上。 + /// 在 HurtBox 和 IDamageable(PlayerStats)之间担当拦截层。 + /// + [DefaultExecutionOrder(-40)] + public class ShieldComponent : MonoBehaviour, IShieldable + { + // ── Inspector ─────────────────────────────────────── + [SerializeField] ShieldConfigSO _config; + [SerializeField] IntEventChannelSO _onShieldHPChanged; // 广播当前耐久整数 + [SerializeField] VoidEventChannelSO _onShieldBroken; + [SerializeField] VoidEventChannelSO _onShieldRestored; + [SerializeField] DifficultyChangedEventChannel _onDifficultyChanged; + + // ── Runtime State ──────────────────────────────────── + int _currentShieldHP; + bool _isBroken; + float _timeSinceLastHit; + float _brokenTimer; + + // ── IShieldable ───────────────────────────────────── + public bool HasShield => _currentShieldHP > 0 && !_isBroken; + public int CurrentShieldHP => _currentShieldHP; + public int MaxShieldHP => _config.MaxShieldHP; + + void Awake() => _currentShieldHP = _config.MaxShieldHP; + + void OnEnable() + { + _onDifficultyChanged.OnEventRaised += OnDifficultyChanged; + } + + void OnDisable() + { + _onDifficultyChanged.OnEventRaised -= OnDifficultyChanged; + } + + void Update() + { + if (_isBroken) + { + _brokenTimer += Time.deltaTime; + if (_brokenTimer >= _config.BrokenPenaltyDuration) + { + _isBroken = false; + _brokenTimer = 0f; + } + return; + } + + if (_currentShieldHP < _config.MaxShieldHP) + { + _timeSinceLastHit += Time.deltaTime; + if (_timeSinceLastHit >= _config.RechargeDelay) + { + _currentShieldHP = Mathf.Min( + _config.MaxShieldHP, + _currentShieldHP + Mathf.RoundToInt(_config.RechargeRate * Time.deltaTime) + ); + } + } + } + + /// + /// 护盾拦截伤害。由 HurtBox.ReceiveDamage 调用。 + /// 返回剩余穿透伤害値(0 = 完全吸收)。 + /// 通过 EVT_ShieldHPChanged 更新 ShieldBarUI,不直接修改 DamageInfo。 + /// + public int AbsorbDamage(int incomingDamage) + { + _timeSinceLastHit = 0f; + + int absorbed = Mathf.RoundToInt(incomingDamage * _config.DamageAbsorptionRatio); + int passThrough = incomingDamage - absorbed; + + _currentShieldHP -= absorbed; + + if (_currentShieldHP <= 0) + { + // 护盾破碎:多余伤害穿透 + passThrough += Mathf.Abs(_currentShieldHP); + _currentShieldHP = 0; + _isBroken = true; + _brokenTimer = 0f; + _onShieldBroken.Raise(); + } + + _onShieldHPChanged.Raise(_currentShieldHP); // 更新 ShieldBarUI + + return passThrough; + } + + /// 存档点激活时调用(若配置允许)。 + public void FullRecharge() + { + if (!_config.FullRechargeOnSavePoint) return; + _currentShieldHP = _config.MaxShieldHP; + _isBroken = false; + _brokenTimer = 0f; + _onShieldRestored.Raise(); + } + + /// 存档加载时恢复护盾状态。由 PlayerController.LoadFromSaveData() 调用。 + public void SetShieldHP(int hp, bool isBroken) + { + _currentShieldHP = Mathf.Clamp(hp, 0, _config.MaxShieldHP); + _isBroken = isBroken; + _brokenTimer = 0f; + _timeSinceLastHit = 0f; + } + + /// 弹反成功时恢复护盾(P1)。 + public void OnParrySuccess() + { + int restore = Mathf.RoundToInt(_config.MaxShieldHP * _config.ParryRestoreRatio); + _currentShieldHP = Mathf.Min(_config.MaxShieldHP, _currentShieldHP + restore); + } + + void OnDifficultyChanged(DifficultyScalerSO scaler) + { + // 难度变更时按比例调整护盾(可选,若 ShieldConfigSO 有难度钩子字段则使用) + } + } +} +``` + +--- + +## 5. IShieldable 接口 + +```csharp +namespace BaseGames.Player.Shield +{ + /// + /// 可拥有护盾的实体接口。HurtBox 持有此接口引用,在受击时优先检查护盾。 + /// + public interface IShieldable + { + bool HasShield { get; } + int CurrentShieldHP { get; } + int MaxShieldHP { get; } + /// 拦截 incomingDamage,返回剩余穿透伤害(0 = 完全吸收)。 + int AbsorbDamage(int incomingDamage); + void FullRecharge(); + void OnParrySuccess(); + } +} +``` + +--- + +## 6. 护盾恢复机制 + +| 时机 | 行为 | +|------|------| +| 最后一次受击后 `RechargeDelay` 秒 | 开始按 `RechargeRate/s` 线性恢复 | +| 护盾破碎后 `BrokenPenaltyDuration` 秒 | 破碎状态结束,恢复计时重新开始 | +| 激活存档点 | `SavePoint.Activate()` → `ShieldComponent.FullRecharge()`(若配置为 true) | +| 弹反成功 | `ParrySystem.OnParrySuccess` → `ShieldComponent.OnParrySuccess()` | + +--- + +## 7. 护盾 UI 集成 + +护盾 UI 显示在 HUD 的 HP 条上方(或并列): + +```csharp +// HUDController 中订阅护盾变化 +// ShieldBarUI 组件,与 HP Bar 类似设计 +public class ShieldBarUI : MonoBehaviour +{ + [SerializeField] Image _fill; + [SerializeField] ShieldComponent _shield; + [SerializeField] GameObject _brokenIndicator; // 护盾破碎时显示红色图标 + + [Header("Event Channels")] + [SerializeField] IntEventChannelSO _onShieldHPChanged; // 订阅耐久变化 + [SerializeField] VoidEventChannelSO _onShieldBroken; + [SerializeField] VoidEventChannelSO _onShieldRestored; + + void OnEnable() + { + _onShieldHPChanged.OnEventRaised += RefreshFill; + _onShieldBroken.OnEventRaised += ShowBroken; + _onShieldRestored.OnEventRaised += HideBroken; + } + + void OnDisable() + { + _onShieldHPChanged.OnEventRaised -= RefreshFill; + _onShieldBroken.OnEventRaised -= ShowBroken; + _onShieldRestored.OnEventRaised -= HideBroken; + } + + private void RefreshFill(int currentHP) + { + _fill.fillAmount = _shield.MaxShieldHP > 0 + ? (float)currentHP / _shield.MaxShieldHP : 0f; + } + + private void ShowBroken() => _brokenIndicator.SetActive(true); + private void HideBroken() => _brokenIndicator.SetActive(false); +} +``` + +--- + +## 8. 弹反集成(P1) + +弹反成功时,`ParrySystem.HandleSuccessfulParry()` 末尾调用(见 06_CombatModule §8): + +```csharp +if (_controller.TryGetComponent(out var shield)) + shield.OnParrySuccess(); +``` + +此处 `HandleSuccessfulParry()` 是 `ParrySystem` 中处理弹反成功后统一逻辑的方法,同时负责广播 `_onParrySuccess`(`ParryInfoEventChannelSO`)事件、奖励灵力、触发子弹时间。`ShieldComponent.OnParrySuccess()` 通过直接调用(而非事件订阅)接收通知,以保证执行顺序。 + +--- + +## 9. SaveData 集成 + +`PlayerSaveData` 中新增字段: + +```csharp +public int ShieldHP; // 当前护盾耐久(-1 = 使用最大值,即满护盾) +public bool ShieldIsBroken; // 是否处于破碎状态 +``` + +**加载时**(`PlayerController.LoadFromSaveData`): +```csharp +if (saveData.ShieldHP >= 0) + _shield.SetShieldHP(saveData.ShieldHP, saveData.ShieldIsBroken); +else + _shield.FullRecharge(); +``` + +--- + +## 10. 事件频道 + +| 频道 SO | Payload | 发布者 | 订阅者 | +|--------|---------|--------|--------| +| `EVT_ShieldHPChanged` | `int`(当前耐久值) | `ShieldComponent` | `ShieldBarUI`(更新护盾条填充) | +| `EVT_ShieldBroken` | void | `ShieldComponent` | `PlayerFeedback`(破碎音效/特效)、`HUDController`(护盾破碎 UI) | +| `EVT_ShieldRestored` | void | `ShieldComponent` | `HUDController`(护盾恢复 UI) | + +## Player Prefab 层级更新 + +``` +[Player] +├── PlayerController.cs +│ └── [SerializeField] ShieldComponent _shield ← 新增 +│ +├── [Combat] +│ ├── HurtBox.cs +│ │ └── [SerializeField] IShieldable _shieldable ← 由 PlayerController.Awake() 注入 +│ └── HitBox.cs +│ +└── [Shield] ← 新增子节点 + └── ShieldComponent.cs +``` diff --git a/Docs/Architecture/21_LiquidPuzzleModule.md b/Docs/Architecture/21_LiquidPuzzleModule.md new file mode 100644 index 0000000..11758df --- /dev/null +++ b/Docs/Architecture/21_LiquidPuzzleModule.md @@ -0,0 +1,927 @@ +# 21 · 液体与谜题模块(Liquid & Puzzle Module) + +> **命名空间** `BaseGames.World.Liquid` / `BaseGames.Puzzle` / `BaseGames.World.Navigation` / `BaseGames.Tutorial` +> **程序集** `BaseGames.World`(并入世界程序集) +> **依赖** `BaseGames.Core.Events` · `BaseGames.Player`(PlayerController · FSM)· `BaseGames.World`(HazardZone · IInteractable) +> **Design 来源** [40_LiquidSwimSystem](../Design/40_LiquidSwimSystem.md) · [35_PuzzleArchitecture](../Design/35_PuzzleArchitecture.md) · [36_NavigationHintSystem](../Design/36_NavigationHintSystem.md) · [45_TutorialSystem](../Design/45_TutorialSystem.md) + +--- + +## 目录 + +### Part A — 液体与游泳 + +1. [液体系统职责](#1-液体系统职责) +2. [LiquidType 枚举](#2-liquidtype-枚举) +3. [LiquidPhysicsConfigSO](#3-liquidphysicsconfigso) +4. [LiquidZone](#4-liquidzone) +5. [SwimState(FSM 状态)](#5-swimstate-fsm-状态) +6. [玩家进出液体流程](#6-玩家进出液体流程) + +### Part B — 谜题架构 + +7. [谜题系统职责](#7-谜题系统职责) +8. [核心接口](#8-核心接口) +9. [PuzzleSwitch](#9-puzzleswitch) +10. [PuzzleReceiver](#10-puzzlereceiver) +11. [PuzzleWire](#11-puzzlewire) +12. [事件频道](#12-事件频道) + +### Part C — 导航提示与教程 + +13. [导航提示系统职责(§NavHint)](#13-导航提示系统职责-navhint) +14. [WorldMarker](#14-worldmarker) +15. [BreadcrumbTracker](#15-breadcrumbtracker) +16. [教程系统职责(§Tutorial)](#16-教程系统职责-tutorial) +17. [TutorialManager](#17-tutorialmanager) +18. [ContextualHintTrigger](#18-contextualhinttrigger) + +--- + +## Part A — 液体与游泳 + +--- + +## 1. 液体系统职责 + +``` +液体系统职责: + ├─ LiquidType enum → Water / Acid / Lava + ├─ LiquidPhysicsConfigSO → 浮力、水下速度、进出溅水参数 + ├─ LiquidZone → 标记液态区域、触发进出事件 + └─ SwimState → PlayerController FSM 中的游泳状态 +``` + +**零耦合**:`LiquidZone` 通过 SO 事件频道广播进出事件,`PlayerController` 订阅后自行切换 FSM 状态。 + +--- + +## 2. LiquidType 枚举 + +```csharp +namespace BaseGames.World.Liquid +{ + public enum LiquidType + { + Water, // 可游泳(需 swim 能力) + ShallowWater, // 浅水(水中慢走,无需游泳能力,速度 ×0.65) + Mud, // 泥水(移动极慢,无需游泳能力,速度 ×0.50) + Acid, // 接触即死(HazardZone 处理) + Lava, // 接触即死(HazardZone 处理) + } +} +``` + +--- + +## 3. LiquidPhysicsConfigSO + +```csharp +namespace BaseGames.World.Liquid +{ + [CreateAssetMenu(menuName = "World/LiquidPhysicsConfig")] + public class LiquidPhysicsConfigSO : ScriptableObject + { + [Header("水下物理")] + [Range(0f, 1f)] + public float GravityScale = 0.3f; // 水下重力系数(越小越漂浮) + [Range(0f, 1f)] + public float BuoyancyForce = 0.5f; // 上浮力(每帧施加的向上力) + public float MaxSwimSpeed = 4.0f; // 最大游泳速度 (m/s) + public float SwimAcceleration = 8.0f; // 游泳加速度 + public float SurfaceExitSpeed = 5.0f; // 跃出水面时的冲量 + public float SinkSpeed = 2.0f; // 无游泳能力时自然下沉速度 (m/s) + public float DiveSpeedMultiplier = 1.5f; // 主动下潜时的速度倍率 + + [Header("浅水/泥水速度缩放")] + [Range(0.1f, 1.0f)] + public float ShallowSpeedScale = 0.65f; // ShallowWater 类型水平移动泥幕 + [Range(0.1f, 1.0f)] + public float MudSpeedScale = 0.50f; // Mud 类型水平移动泥幕 + + [Header("溺死计时(无游泳能力时)")] + public float DrownTime = 3.0f; // 屏气倒计时(秒),倒计时结束则触发死亡 + + [Header("进出液体")] + public float SplashEntryDelay = 0.05f; // 溅水特效延迟(配合动画) + public float DragCoefficient = 3.0f; // 水下阻力系数(减缓水平移动) + + [Header("视觉")] + public VolumeProfile WaterVolumeProfile; // 水下后处理 Profile(可为 null) + } +} +``` + +**资产路径**:`Assets/ScriptableObjects/World/Liquid_Physics_Config.asset` + +--- + +## 4. LiquidZone + +```csharp +namespace BaseGames.World.Liquid +{ + /// + /// 挂在液态区域根 GameObject 上。 + /// 子物件 [Surface] 的水面触发器触发溅水;[Body] 的主触发器触发进出事件。 + /// 酸液/熔岩时需同时挂载 HazardZone(InstantKill 类型)。 + /// + [RequireComponent(typeof(Collider2D))] + public class LiquidZone : MonoBehaviour + { + [Header("液体类型")] + [SerializeField] LiquidType _liquidType = LiquidType.Water; + + [Header("伤害(Water 类型专用,Acid/Lava 由 HazardZone 处理)")] + /// + /// 未解锁 Swim 能力时,玩家在 Water 中是否持续受到溺水伤害。 + /// Acid/Lava 类型的即死效果由子节点 HazardZone.cs (InstantKill) 处理,与此字段无关。 + /// + [SerializeField] bool _dealsDrowningDamage = false; + [SerializeField] float _drowningDamagePerSecond = 5f; // 每秒扣减 HP + + [Header("物理配置")] + [SerializeField] LiquidPhysicsConfigSO _physicsConfig; + + [Header("事件频道")] + [SerializeField] LiquidEventChannelSO _onPlayerEntered; + [SerializeField] LiquidEventChannelSO _onPlayerExited; + + [Header("视觉反馈")] + [SerializeField] MMF_Player _splashEnterFeedback; + [SerializeField] MMF_Player _splashExitFeedback; + + public LiquidType Type => _liquidType; + public LiquidPhysicsConfigSO Physics => _physicsConfig; + + void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + _splashEnterFeedback?.PlayFeedbacks(); + _onPlayerEntered.Raise(this); + } + + void OnTriggerExit2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + _splashExitFeedback?.PlayFeedbacks(); + _onPlayerExited.Raise(this); + } + } +} +``` + +### LiquidZone Prefab 层级 + +``` +[LiquidZone_River_01] +├── SpriteRenderer(水体精灵,带流动 Shader) +├── PolygonCollider2D (IsTrigger) ← 主区域触发器 +├── LiquidZone.cs +├── [Surface] +│ ├── BoxCollider2D (IsTrigger, 高度 ~4px) +│ └── WaterSurfaceEffect.cs ← 溅水粒子 + 音效 +└── [Hazard](仅酸液/熔岩时存在) + └── HazardZone.cs (InstantKill) +``` + +--- + +## 5. SwimState(FSM 状态) + +在 `05_PlayerModule.md` §12 状态列表中补充的第 18 个状态: + +```csharp +namespace BaseGames.Player.States +{ + /// + /// 游泳状态:玩家在液体中时使用。 + /// 需要 AbilityType.Swim 已解锁;若未解锁则自动切换到溺水/死亡流程。 + /// + public class SwimState : PlayerStateBase + { + [SerializeField] LiquidPhysicsConfigSO _physics; // 由 LiquidZone 注入 + [SerializeField] ClipTransition _swimIdleClip; + [SerializeField] ClipTransition _swimMoveClip; + + LiquidZone _currentZone; + float _originalGravity; + + public void SetLiquidZone(LiquidZone zone) => _currentZone = zone; + + public override void OnEnter() + { + _originalGravity = RB.gravityScale; + RB.gravityScale = _currentZone?.Physics.GravityScale ?? 0.3f; + Animancer.Play(_swimIdleClip); + } + + public override void OnExit() + { + RB.gravityScale = _originalGravity; + } + + public override void OnUpdate() + { + var input = Input.Move; + if (input != Vector2.zero) + { + var targetVel = input * (_currentZone?.Physics.MaxSwimSpeed ?? 4f); + RB.linearVelocity = Vector2.MoveTowards( + RB.linearVelocity, targetVel, + (_currentZone?.Physics.SwimAcceleration ?? 8f) * Time.deltaTime + ); + Animancer.Play(_swimMoveClip); + } + else + { + // 水下浮力(持续向上的微弱力) + RB.AddForce(Vector2.up * (_currentZone?.Physics.BuoyancyForce ?? 0.5f), + ForceMode2D.Force); + Animancer.Play(_swimIdleClip); + } + + // 跳跃键 = 跃出水面 + if (Input.JumpPressed) + { + RB.AddForce(Vector2.up * (_currentZone?.Physics.SurfaceExitSpeed ?? 5f), + ForceMode2D.Impulse); + } + + // 施加水阻 + RB.linearVelocity *= 1f - _currentZone?.Physics.DragCoefficient * Time.deltaTime ?? 0f; + } + + public override PlayerStateBase GetNextState() + { + // 离开液体区域由 PlayerController 订阅 EVT_LiquidExited 后切换 + return null; + } + } +} +``` + +--- + +## 6. 玩家进出液体流程 + +``` +玩家碰到 LiquidZone.PolygonCollider2D + │ + ▼ +LiquidZone.OnTriggerEnter2D + → EVT_LiquidEntered.Raise(liquidZone) + │ + ▼ +PlayerController(订阅 EVT_LiquidEntered) + ├─ 检查 abilities.swim == true + │ ├─ true → swimState.SetLiquidZone(zone) + │ │ FSM.TransitionTo(swimState) + │ └─ false → 检查 liquidType + │ Water → 无法游泳,自然沉底;若 zone._dealsDrowningDamage == true, + │ 每帧通过 DamageInfo(DamageTag: Drowning)对 PlayerStats + │ 施加 zone._drowningDamagePerSecond 伤害(忽略无敌帧) + │ Acid/Lava → HazardZone 已处理 InstantKill(与 _dealsDrowningDamage 无关) + │ +玩家离开 LiquidZone + → EVT_LiquidExited.Raise(liquidZone) + │ + ▼ +PlayerController → FSM.TransitionTo(fallState / idleState) +``` + +--- + +## Part B — 谜题架构 + +--- + +## 7. 谜题系统职责 + +``` +谜题架构职责: + ├─ ISwitchable → 可被切换激活/停用的物件接口 + ├─ IMovable → 可被玩家推动的物件接口 + ├─ IActivatable → 接受激活信号的物件接口 + ├─ PuzzleSwitch → 通用开关(玩家交互/踩踏触发) + ├─ PuzzleReceiver → 接收器(门/平台/机关挂载) + └─ PuzzleWire → 连接 Switch → Receiver,支持 AND/OR/XOR 逻辑 +``` + +--- + +## 8. 核心接口 + +```csharp +namespace BaseGames.Puzzle +{ + /// 任何可被切换激活/停用状态的谜题元素。 + public interface ISwitchable + { + bool IsActive { get; } + event Action OnStateChanged; + void ForceState(bool active); // SaveData 恢复时调用 + } + + /// 可被玩家推动的物件(需 Rigidbody2D)。 + public interface IMovable + { + bool CanBePushed { get; } + void OnPushStart(Vector2 direction); + void OnPushEnd(); + } + + /// 接受激活信号后改变自身状态的物件。 + public interface IActivatable + { + void Activate(); + void Deactivate(); + bool IsActivated { get; } + } +} +``` + +--- + +## 9. PuzzleSwitch + +```csharp +namespace BaseGames.Puzzle +{ + /// + /// 通用谜题开关,支持三种触发模式。 + /// 实现 ISwitchable + IInteractable(玩家手动触发)。 + /// + [RequireComponent(typeof(Collider2D))] + public class PuzzleSwitch : MonoBehaviour, ISwitchable, IInteractable + { + [Header("触发模式")] + [SerializeField] SwitchTriggerMode _mode = SwitchTriggerMode.InteractOnce; + + [Header("状态")] + [SerializeField] bool _startsActive = false; + [SerializeField] string _switchId; // 持久化唯一 ID(存档用,空串则不持久化) + + [Header("视觉")] + [SerializeField] AnimancerComponent _animancer; // 开关动画(On/Off 状态) + [SerializeField] AnimationClip _activeClip; + [SerializeField] AnimationClip _inactiveClip; + [SerializeField] MMF_Player _activateFeedback; + + bool _isActive; + public bool IsActive => _isActive; + public event Action OnStateChanged; + + void Start() => _isActive = _startsActive; + + // IInteractable + public string InteractPrompt => _mode == SwitchTriggerMode.Hold ? "按住交互" : "交互"; + public bool CanInteract => true; + + public void Interact(Transform player) + { + if (_mode == SwitchTriggerMode.InteractOnce && _isActive) return; + SetState(!_isActive); + } + + public void OnPlayerEnterRange(Transform player) { } + public void OnPlayerExitRange() { } + + // ISwitchable + public void ForceState(bool active) => SetState(active); + + // 压板模式:OnTriggerEnter2D / OnTriggerExit2D + void OnTriggerEnter2D(Collider2D col) + { + if (_mode != SwitchTriggerMode.Pressure) return; + if (col.CompareTag("Player") || col.CompareTag("PushBox")) + SetState(true); + } + + void OnTriggerExit2D(Collider2D col) + { + if (_mode != SwitchTriggerMode.Pressure) return; + if (col.CompareTag("Player") || col.CompareTag("PushBox")) + SetState(false); + } + + void SetState(bool active) + { + if (_isActive == active) return; + _isActive = active; + if (active) _animancer?.Play(_activeClip); + else _animancer?.Play(_inactiveClip); + _activateFeedback?.PlayFeedbacks(); + OnStateChanged?.Invoke(active); + // 持久化到 WorldStateRegistry(跨场景/存档恢复开关状态) + if (!string.IsNullOrEmpty(_switchId)) + WorldStateRegistry.Instance.SetFlag("switch_" + _switchId, active); + } + } + + public enum SwitchTriggerMode + { + InteractOnce, // 玩家交互一次,永久激活 + InteractToggle, // 玩家交互切换开关 + Pressure, // 踩上激活,离开停用 + Hold, // 按住交互键持续激活 + } +} +``` + +--- + +## 10. PuzzleReceiver + +```csharp +namespace BaseGames.Puzzle +{ + /// + /// 谜题接收器,由 PuzzleWire 驱动。 + /// 挂在谜题目标物件上(门/平台等),实现 IActivatable。 + /// + public class PuzzleReceiver : MonoBehaviour, IActivatable + { + [SerializeField] bool _startsActivated = false; + [SerializeField] string _receiverId; // 持久化唯一 ID(存档用,空串则不持久化) + [SerializeField] MMF_Player _activateFeedback; + [SerializeField] MMF_Player _deactivateFeedback; + + bool _isActivated; + public bool IsActivated => _isActivated; + + void Start() + { + _isActivated = _startsActivated; + if (_isActivated) Activate(); + } + + public void Activate() + { + if (_isActivated) return; + _isActivated = true; + _activateFeedback?.PlayFeedbacks(); + OnActivate(); + if (!string.IsNullOrEmpty(_receiverId)) + WorldStateRegistry.Instance.SetFlag("receiver_" + _receiverId, true); + } + + public void Deactivate() + { + if (!_isActivated) return; + _isActivated = false; + _deactivateFeedback?.PlayFeedbacks(); + OnDeactivate(); + if (!string.IsNullOrEmpty(_receiverId)) + WorldStateRegistry.Instance.SetFlag("receiver_" + _receiverId, false); + } + + // 子类覆写具体行为(门打开、平台移动等) + protected virtual void OnActivate() { } + protected virtual void OnDeactivate() { } + } + + // 常见子类示例 + public class PuzzleDoor : PuzzleReceiver + { + [SerializeField] AnimancerComponent _animancer; + [SerializeField] AnimationClip _openClip; + [SerializeField] AnimationClip _closeClip; + + protected override void OnActivate() => _animancer.Play(_openClip); + protected override void OnDeactivate() => _animancer.Play(_closeClip); + } + public class MovingPlatform : PuzzleReceiver { /* DOTween 路径移动 */ } + public class PuzzleSpikeTrap : PuzzleReceiver { /* 启用/禁用 HazardZone */ } +} +``` + +--- + +## 11. PuzzleWire + +```csharp +namespace BaseGames.Puzzle +{ + /// + /// 连接一个或多个 PuzzleSwitch 到 PuzzleReceiver。 + /// 支持 AND / OR / XOR 激活逻辑。 + /// 关卡设计师在 Inspector 中配置,无需编写代码。 + /// + public class PuzzleWire : MonoBehaviour + { + [Header("输入开关")] + [SerializeField] PuzzleSwitch[] _switches; + + [Header("激活逻辑")] + [SerializeField] LogicType _logic = LogicType.AND; + + [Header("目标接收器")] + [SerializeField] PuzzleReceiver _receiver; + + void Start() + { + foreach (var sw in _switches) + sw.OnStateChanged += _ => Evaluate(); + Evaluate(); // 初始求值 + } + + void Evaluate() + { + bool shouldActivate = _logic switch + { + LogicType.AND => System.Array.TrueForAll(_switches, s => s.IsActive), + LogicType.OR => System.Array.Exists(_switches, s => s.IsActive), + LogicType.XOR => _switches.Count(s => s.IsActive) % 2 == 1, + _ => false, + }; + + if (shouldActivate) _receiver.Activate(); + else _receiver.Deactivate(); + } + } + + public enum LogicType { AND, OR, XOR } +} +``` + +--- + +## 12. WaterDangerState — 溺水倒计时 + +当玩家进入 `Water` 类型液体且**未解锁游泳能力**时,触发溺水危险状态: + +```csharp +namespace BaseGames.World.Liquid +{ + /// + /// 挂在 PlayerController 子节点 [WaterDanger] 上。 + /// 由 LiquidZone 的 EVT_LiquidEntered 触发,在无游泳能力时开始倒计时。 + /// + public class WaterDangerState : MonoBehaviour + { + [SerializeField] private LiquidPhysicsConfigSO _config; + [SerializeField] private AbilityInventorySO _abilityInventory; // 检查 swim 能力 + [SerializeField] private FloatEventChannelSO _onDrownProgress; // 0~1 倒计时进度(HUD 用) + [SerializeField] private VoidEventChannelSO _onPlayerDrowned; // 触发死亡 + + private float _drownTimer; + private bool _isActive; + + public void OnEnterLiquid(LiquidZone zone) + { + if (zone.Type != LiquidType.Water) return; + if (_abilityInventory.HasAbility(AbilityType.Swim)) return; + _isActive = true; + _drownTimer = _config.DrownTime; + } + + public void OnExitLiquid() + { + _isActive = false; + _drownTimer = _config.DrownTime; + _onDrownProgress.Raise(0f); + } + + private void Update() + { + if (!_isActive) return; + _drownTimer -= Time.deltaTime; + _onDrownProgress.Raise(1f - (_drownTimer / _config.DrownTime)); + + if (_drownTimer <= 0f) + { + _isActive = false; + _onPlayerDrowned.Raise(); + } + } + } +} +``` + +--- + +## 13. UnderwaterPostProcessingController + +```csharp +namespace BaseGames.World.Liquid +{ + /// + /// 控制水下全屏后处理效果(颜色滤镜、色差、暗角)。 + /// 订阅 EVT_LiquidEntered / EVT_LiquidExited 事件,启用/停用 Water Volume Profile。 + /// + public class UnderwaterPostProcessingController : MonoBehaviour + { + [SerializeField] private Volume _underwaterVolume; // 水下专属 Volume + [SerializeField] private float _blendInDuration = 0.3f; + [SerializeField] private float _blendOutDuration = 0.3f; + + [Header("Event Channels")] + [SerializeField] private LiquidZoneEventChannelSO _onLiquidEntered; + [SerializeField] private VoidEventChannelSO _onLiquidExited; + + private Coroutine _blendCoroutine; + + private void OnEnable() + { + _onLiquidEntered.OnEventRaised += OnLiquidEntered; + _onLiquidExited.OnEventRaised += OnLiquidExited; + } + + private void OnDisable() + { + _onLiquidEntered.OnEventRaised -= OnLiquidEntered; + _onLiquidExited.OnEventRaised -= OnLiquidExited; + } + + private void OnLiquidEntered(LiquidZone zone) + { + if (zone.Type != LiquidType.Water) return; + BlendVolume(1f, _blendInDuration); + } + + private void OnLiquidExited() + { + BlendVolume(0f, _blendOutDuration); + } + + private void BlendVolume(float target, float duration) + { + if (_blendCoroutine != null) StopCoroutine(_blendCoroutine); + _blendCoroutine = StartCoroutine(BlendRoutine(target, duration)); + } + + private IEnumerator BlendRoutine(float target, float duration) + { + float start = _underwaterVolume.weight; + float elapsed = 0f; + while (elapsed < duration) + { + elapsed += Time.deltaTime; + _underwaterVolume.weight = Mathf.Lerp(start, target, elapsed / duration); + yield return null; + } + _underwaterVolume.weight = target; + } + } +} +``` + +--- + +## 14. 事件频道 + +| 频道 SO | Payload | 发布者 | 订阅者 | +|--------|---------|--------|--------| +| `EVT_LiquidEntered` | `LiquidZone` | `LiquidZone` | `PlayerController`(切换 SwimState)、`WaterDangerState`、`UnderwaterPostProcessingController` | +| `EVT_LiquidExited` | `void` | `LiquidZone` | `PlayerController`(退出 SwimState)、`WaterDangerState`、`UnderwaterPostProcessingController` | +| `EVT_DrownProgress` | `float(0~1)` | `WaterDangerState` | `HUDController`(显示溺水进度条) | +| `EVT_PlayerDrowned` | `void` | `WaterDangerState` | `GameManager`(触发死亡流程) | + +> **⚠️ 谜题状态持久化说明**:PuzzleSwitch / PuzzleReceiver 使用 **直接调用** `WorldStateRegistry.Instance.SetFlag()` 记录持久状态(同 DestructibleTile 模式),而非 SO 事件频道。SO 事件频道仅用于跨模块的松耦合通知,不适用于纯持久化场景。 + +--- + +## Part C — 导航提示与教程 + +--- + +## 13. 导航提示系统职责(§NavHint) + +``` +导航提示系统职责: + ├─ WorldMarker → 场景内的标记点,用于地图/HUD 指引 + └─ BreadcrumbTracker → 记录玩家行进路径,辅助引导迷路玩家 +``` + +**零耦合**:`WorldMarker` 通过 SO 事件频道向 `HUDController`/`MapManager` 报告标记状态;`BreadcrumbTracker` 仅写本地数据,UI 层订阅读取。 + +--- + +## 14. WorldMarker + +```csharp +namespace BaseGames.World.Navigation +{ + /// + /// 场景内导航标记点。 + /// 可标记为目标地点、NPC 位置、兴趣点等,通过 EVT_WorldMarkerUpdated 广播给地图/HUD。 + /// + public class WorldMarker : MonoBehaviour + { + [Header("标记信息")] + [SerializeField] string _markerId; // 唯一 ID(与 MapDataSO 匹配) + [SerializeField] WorldMarkerType _markerType; // 类型(见枚举) + [SerializeField] string _labelKey; // 本地化显示名称 key + + [Header("可见性")] + [SerializeField] bool _visibleOnMap = true; + [SerializeField] bool _visibleOnHUD = false; // 在 HUD 显示箭头指引 + + [Header("事件频道")] + [SerializeField] WorldMarkerEventChannelSO _onMarkerActivated; + [SerializeField] WorldMarkerEventChannelSO _onMarkerDeactivated; + + bool _isActive = false; + + void Start() + { + if (_visibleOnMap || _visibleOnHUD) + Activate(); + } + + public void Activate() + { + _isActive = true; + _onMarkerActivated?.Raise(this); + } + + public void Deactivate() + { + _isActive = false; + _onMarkerDeactivated?.Raise(this); + } + + public string MarkerId => _markerId; + public WorldMarkerType MarkerType => _markerType; + public string LabelKey => _labelKey; + public bool IsActive => _isActive; + public bool VisibleOnHUD => _visibleOnHUD; + } + + public enum WorldMarkerType + { + Objective, // 当前主线目标 + NPC, // NPC 位置 + PointOfInterest,// 兴趣点 + Exit, // 出口/传送点 + Secret, // 隐藏区域(解锁后显示) + } +} +``` + +--- + +## 15. BreadcrumbTracker + +```csharp +namespace BaseGames.World.Navigation +{ + /// + /// 追踪玩家最近的行进路径(面包屑)。 + /// 用于辅助迷路玩家找到回头路;数据不持久化(每次游戏重置)。 + /// + public class BreadcrumbTracker : MonoBehaviour + { + [Header("追踪参数")] + [SerializeField] float _recordInterval = 2.0f; // 每隔多少秒记录一次位置 + [SerializeField] int _maxCrumbs = 20; // 最多保留多少个历史位置 + [SerializeField] float _minMoveDistance = 1.0f; // 移动距离低于此值不记录 + + readonly Queue _crumbs = new(); + float _timer = 0f; + Vector2 _lastPos; + + public IReadOnlyCollection Crumbs => _crumbs; + + void Start() + { + _lastPos = transform.position; + } + + void Update() + { + _timer += Time.deltaTime; + if (_timer < _recordInterval) return; + _timer = 0f; + + Vector2 current = transform.position; + if (Vector2.Distance(current, _lastPos) < _minMoveDistance) return; + + _crumbs.Enqueue(current); + if (_crumbs.Count > _maxCrumbs) + _crumbs.Dequeue(); + + _lastPos = current; + } + + /// 获取最近 N 个面包屑位置(用于地图渲染)。 + public Vector2[] GetRecentCrumbs(int count) + => System.Linq.Enumerable.TakeLast(_crumbs, count).ToArray(); + } +} +``` + +--- + +## 16. 教程系统职责(§Tutorial) + +``` +教程系统职责: + ├─ TutorialManager → 追踪已完成的教程步骤,驱动提示显示/隐藏 + └─ ContextualHintTrigger → 场景中的教程触发器,条件满足时激活提示 +``` + +**显示策略**:提示只显示一次(`TutorialManager` 持久化已完成 ID),同一提示触发后不再重复显示。 + +--- + +## 17. TutorialManager + +```csharp +namespace BaseGames.Tutorial +{ + /// + /// 管理所有教程提示的显示/完成状态,挂在 Persistent 场景 [GameManagers] 下。 + /// + public class TutorialManager : MonoBehaviour, ISaveable + { + [SerializeField] TutorialHintUI _hintUI; // HUD 上的提示 UI 组件 + + readonly HashSet _completedHints = new(); + + public static TutorialManager Instance { get; private set; } + + void Awake() => Instance = this; + + /// 显示提示。若已完成则跳过。 + public void ShowHint(string hintId, string localizedText, float duration = 3f) + { + if (_completedHints.Contains(hintId)) return; + _hintUI.Show(localizedText, duration); + } + + /// 标记提示为已完成,不再显示。 + public void CompleteHint(string hintId) + { + _completedHints.Add(hintId); + } + + public bool IsCompleted(string hintId) => _completedHints.Contains(hintId); + + // ── ISaveable ───────────────────────────────────────────── + public void OnSave(SaveData data) + { + data.Tutorial.CompletedHintIds = new List(_completedHints); + } + + public void OnLoad(SaveData data) + { + _completedHints.Clear(); + if (data.Tutorial?.CompletedHintIds != null) + foreach (var id in data.Tutorial.CompletedHintIds) + _completedHints.Add(id); + } + } +} +``` + +--- + +## 18. ContextualHintTrigger + +```csharp +namespace BaseGames.Tutorial +{ + /// + /// 场景内的教程触发器。 + /// 玩家进入触发区域时,向 TutorialManager 请求显示对应提示。 + /// + [RequireComponent(typeof(Collider2D))] + public class ContextualHintTrigger : MonoBehaviour + { + [Header("提示配置")] + [SerializeField] string _hintId; // 唯一 ID,对应 TutorialManager 的完成记录 + [SerializeField] string _hintTextKey; // 本地化 key(通过 LocalizationManager 解析) + [SerializeField] float _displayDuration = 3f; + + [Header("触发条件(可选)")] + // ⚠️ AbilityType 枚举(Architecture 09 §1)无 None 值;用 bool 标记是否要求能力 + [SerializeField] bool _requiresAbility = false; + [SerializeField] AbilityType _requiredAbility; + [SerializeField] bool _onlyOnce = true; // 只触发一次(建议保持 true) + + void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + + // 检查能力条件(仅当 _requiresAbility = true 时) + if (_requiresAbility) + { + var stats = other.GetComponent(); + if (stats == null || !stats.HasAbility(_requiredAbility)) return; + } + + var text = LocalizationManager.Get(LocalizationManager.Table_UI, _hintTextKey); + TutorialManager.Instance.ShowHint(_hintId, text, _displayDuration); + + if (_onlyOnce) + { + TutorialManager.Instance.CompleteHint(_hintId); + gameObject.SetActive(false); // 触发后禁用自身,避免重复 + } + } + } +} +``` + diff --git a/Docs/Architecture/22_QuestChallengeModule.md b/Docs/Architecture/22_QuestChallengeModule.md new file mode 100644 index 0000000..8dacbd1 --- /dev/null +++ b/Docs/Architecture/22_QuestChallengeModule.md @@ -0,0 +1,746 @@ +# 22 · 任务与挑战房间模块(Quest & Challenge Module) + +> **命名空间** `BaseGames.Quest` / `BaseGames.Challenge` +> **程序集** `BaseGames.Quest`(`Assets/Scripts/Quest/`) +> **依赖** `BaseGames.Core.Events` · `BaseGames.Dialogue`(InteractableNPC)· `BaseGames.World`(SaveManager · SceneLoader)· `BaseGames.Player`(PlayerStats) +> **Design 来源** [38_QuestSystem](../Design/38_QuestSystem.md) · [39_ChallengeRoomSystem](../Design/39_ChallengeRoomSystem.md) + +--- + +## 目录 + +### Part A — 任务系统 + +1. [任务系统职责](#1-任务系统职责) +2. [QuestSO](#2-questso) +3. [QuestObjectiveSO](#3-questobjectiveso) +4. [RewardSO](#4-rewardso) +5. [QuestManager](#5-questmanager) +6. [QuestGiver](#6-questgiver) +7. [SaveData 集成(任务)](#7-savedata-集成任务) + +### Part B — 挑战房间 + +8. [挑战房间系统职责](#8-挑战房间系统职责) +9. [ChallengeRoomSO](#9-challengeroomso) +10. [ChallengeEncounterSO](#10-challengeencounterso) +11. [BossRushSequenceSO](#11-bossrushsequenceso) +12. [ChallengeRoomManager](#12-challengeroommanager) +13. [ChallengeRoomTrigger](#13-challengeroomtrigger) +14. [事件频道](#14-事件频道) + +--- + +## Part A — 任务系统 + +--- + +## 1. 任务系统职责 + +``` +任务系统职责: + ├─ QuestSO → 任务定义(目标链/奖励/分支/前置条件) + ├─ QuestObjectiveSO → 单步目标(对话/击败/收集/到达) + ├─ RewardSO → 奖励配置(Geo/物品/好感度/能力) + ├─ QuestManager → 运行时追踪所有任务状态,事件驱动推进进度 + └─ QuestGiver → 扩展 InteractableNPC,发布/完成任务,切换对话 +``` + +**状态机**:`Unavailable → Available → Active → Completed / Failed`(只进不退) + +**事件驱动**:`QuestManager` 只订阅事件频道(击败敌人/收集物品/到达地点),不主动轮询。 + +--- + +## 2. QuestSO + +```csharp +namespace BaseGames.Quest +{ + [CreateAssetMenu(menuName = "Quest/Quest")] + public class QuestSO : ScriptableObject + { + [Header("标识")] + public string questId; // 唯一 ID,如 "Quest_FindMushroom" + public string displayName; + [TextArea(2, 6)] + public string description; + public Sprite icon; + + [Header("目标链")] + public QuestObjectiveSO[] objectives; // 按顺序完成,全部完成 = 可交完 + + [Header("前置条件")] + public string[] prerequisiteQuestIds; // 所有前置任务 Completed 后才可接 + public int minAffinityToAccept; // NPC 好感度门槛(0 = 无限制) + + [Header("奖励")] + public RewardSO reward; + + [Header("失败条件(可选)")] + public bool canFail; + public QuestObjectiveSO failCondition; + + [Header("完成后续任务(分支)")] + public QuestBranch[] branches; + } + + [Serializable] + public class QuestBranch + { + public string conditionQuestId; // 若此任务已完成 → 走本分支(空 = 默认) + public QuestSO nextQuest; + public string npcDialogueKey; // 触发 NPC 对话 key + } +} +``` + +--- + +## 3. QuestObjectiveSO(多态目标体系) + +每种目标类型使用独立的子类 SO,便于策划在 Inspector 中配置且无需修改代码即可扩展: + +```csharp +namespace BaseGames.Quest +{ + /// + /// 任务目标基类(抽象)。所有具体目标类型均继承此类。 + /// 策划通过各子类的 CreateAssetMenu 创建具体目标资产。 + /// + public abstract class QuestObjectiveSO : ScriptableObject + { + [Header("标识")] + public string objectiveId; + [TextArea(1, 4)] + public string displayText; // 任务日志中显示的文本 + public bool IsOptional; // 可选目标(完成加奖励但不阻塞任务) + + /// 注册监听(由 QuestManager 在任务激活时调用)。 + public abstract void RegisterListeners(IQuestObjectiveListener listener); + /// 注销监听(由 QuestManager 在任务完成/失败时调用)。 + public abstract void UnregisterListeners(IQuestObjectiveListener listener); + /// 根据当前进度判断目标是否完成。 + public abstract bool EvaluateCompletion(QuestObjectiveState state); + } + + // ── 具体目标类型 ────────────────────────────────────────────── + + [CreateAssetMenu(menuName = "Quest/Objective/TalkToNPC")] + public class TalkToNPCObjective : QuestObjectiveSO + { + public string targetNpcId; + + public override void RegisterListeners(IQuestObjectiveListener l) => l.RegisterListeners(this); + public override void UnregisterListeners(IQuestObjectiveListener l) => l.UnregisterListeners(this); + public override bool EvaluateCompletion(QuestObjectiveState s) => s.progressCount >= 1; + } + + [CreateAssetMenu(menuName = "Quest/Objective/Defeat")] + public class DefeatEnemyObjective : QuestObjectiveSO + { + public string targetEnemyId; + [Min(1)] public int defeatCount = 1; + + public override void RegisterListeners(IQuestObjectiveListener l) => l.RegisterListeners(this); + public override void UnregisterListeners(IQuestObjectiveListener l) => l.UnregisterListeners(this); + public override bool EvaluateCompletion(QuestObjectiveState s) => s.progressCount >= defeatCount; + } + + [CreateAssetMenu(menuName = "Quest/Objective/Collect")] + public class CollectItemObjective : QuestObjectiveSO + { + public string itemId; + [Min(1)] public int collectCount = 1; + + public override void RegisterListeners(IQuestObjectiveListener l) => l.RegisterListeners(this); + public override void UnregisterListeners(IQuestObjectiveListener l) => l.UnregisterListeners(this); + public override bool EvaluateCompletion(QuestObjectiveState s) => s.progressCount >= collectCount; + } + + [CreateAssetMenu(menuName = "Quest/Objective/Reach")] + public class ReachAreaObjective : QuestObjectiveSO + { + public string sceneName; // 需到达的场景 + public string markerTag; // 场景内的目标标记 Tag + + public override void RegisterListeners(IQuestObjectiveListener l) => l.RegisterListeners(this); + public override void UnregisterListeners(IQuestObjectiveListener l) => l.UnregisterListeners(this); + public override bool EvaluateCompletion(QuestObjectiveState s) => s.progressCount >= 1; + } + + [CreateAssetMenu(menuName = "Quest/Objective/UseSkill")] + public class UseSkillObjective : QuestObjectiveSO + { + public AbilityType requiredAbility; + [Min(1)] public int useCount = 1; + + public override void RegisterListeners(IQuestObjectiveListener l) => l.RegisterListeners(this); + public override void UnregisterListeners(IQuestObjectiveListener l) => l.UnregisterListeners(this); + public override bool EvaluateCompletion(QuestObjectiveState s) => s.progressCount >= useCount; + } +} +``` + +**扩展方式**:继承 `QuestObjectiveSO`,实现三个抽象方法,标注 `[CreateAssetMenu]`,无需修改 `QuestManager`。 + +--- + +## 4. RewardSO + +```csharp +namespace BaseGames.Quest +{ + [CreateAssetMenu(menuName = "Quest/Reward")] + public class RewardSO : ScriptableObject + { + public int geo; // Geo 奖励 + public int soulBonus; // 灵魂槽扩展(+max) + public string[] itemIds; // 物品/护符 ID 列表 + public int affinityBonus; // 对发布 NPC 的好感度增量 + public string unlockDialogueKey; // 解锁 NPC 新台词集合 key + public bool unlocksAbility = false; // ⚠️ AbilityType 无 None 值,用 bool 标识是否解锁能力(架构 09 §1) + public AbilityType unlockedAbility; // 仅当 unlocksAbility == true 时有效 + + /// 将奖励应用到游戏状态(由 QuestManager.CompleteQuest 调用)。 + public void Apply(PlayerStats player) + { + if (geo > 0) player.AddGeo(geo); + if (soulBonus > 0) player.ExtendSoulMax(soulBonus); + if (unlocksAbility) // ⚠️ 替代 AbilityType.None 判断 + player.UnlockAbility(unlockedAbility); + // 物品/护符通过 InventoryManager 发放 + foreach (var id in itemIds) + InventoryManager.Instance.AddItem(id); + } + } +} +``` + +--- + +## 5. QuestManager + +```csharp +namespace BaseGames.Quest +{ + /// + /// 运行时任务管理器,挂在 Persistent 场景 [GameManagers] 下。 + /// 通过事件频道追踪目标进度,不主动轮询。 + /// + public class QuestManager : MonoBehaviour + { + // ── Inspector ──────────────────────────────────────── + [SerializeField] QuestSO[] _allQuests; // 所有任务 SO + [SerializeField] TransformEventChannelSO _onEnemyDied; // EVT_EnemyDied → 通过 Transform.GetComponent 获取敌人类型 + [SerializeField] StringEventChannelSO _onCollectiblePickup; // EVT_CollectiblePickup(itemId) + [SerializeField] StringEventChannelSO _onSceneLoaded; // EVT_SceneLoaded(sceneName) + [SerializeField] StringEventChannelSO _onNpcDialogueCompleted; // EVT_NpcDialogueCompleted(npcId) + + // 分拆为粒度更细的事件频道(替代旧 _onQuestStateChanged 单频道) + [SerializeField] StringEventChannelSO _onQuestStarted; // Raise:questId + [SerializeField] StringEventChannelSO _onQuestCompleted; // Raise:questId + [SerializeField] StringEventChannelSO _onQuestFailed; // Raise:questId + [SerializeField] QuestObjectiveEventChannelSO _onObjectiveUpdated; // Raise:objectiveId + progress + + // ── Runtime State ──────────────────────────────────── + readonly Dictionary _questStates = new(); + readonly Dictionary _objectiveStates = new(); // objectiveId → 状态 + + public static QuestManager Instance { get; private set; } + + /// 向后兼容:保留任务开始事件频道公开属性(供 QuestGiver/QuestLogUI 订阅)。 + public StringEventChannelSO OnQuestStarted => _onQuestStarted; + public StringEventChannelSO OnQuestCompleted => _onQuestCompleted; + + void Awake() => Instance = this; + + void OnEnable() + { + _onEnemyDied.OnEventRaised += HandleEnemyDefeated; + _onCollectiblePickup.OnEventRaised += HandleItemCollected; + _onSceneLoaded.OnEventRaised += HandleSceneLoaded; + _onNpcDialogueCompleted.OnEventRaised += HandleNpcDialogue; + } + + void OnDisable() + { + _onEnemyDied.OnEventRaised -= HandleEnemyDefeated; + _onCollectiblePickup.OnEventRaised -= HandleItemCollected; + _onSceneLoaded.OnEventRaised -= HandleSceneLoaded; + _onNpcDialogueCompleted.OnEventRaised -= HandleNpcDialogue; + } + + // ── 公共 API ────────────────────────────────────────── + + /// NPC 接受任务时调用。 + public void AcceptQuest(string questId) + { + if (!CanAccept(questId)) return; + _questStates[questId] = QuestState.Active; + _onQuestStarted.Raise(questId); + } + + /// NPC 完成任务时调用。 + public void CompleteQuest(string questId, PlayerStats player) + { + if (!IsReadyToComplete(questId)) return; + var quest = GetQuestSO(questId); + quest.reward?.Apply(player); + _questStates[questId] = QuestState.Completed; + _onQuestCompleted.Raise(questId); + + // 解锁后续任务 + foreach (var branch in quest.branches) + { + if (string.IsNullOrEmpty(branch.conditionQuestId) || + GetState(branch.conditionQuestId) == QuestState.Completed) + { + if (branch.nextQuest != null) + _questStates[branch.nextQuest.questId] = QuestState.Available; + break; + } + } + } + + public QuestState GetState(string questId) + => _questStates.TryGetValue(questId, out var s) ? s : QuestState.Unavailable; + + public bool IsReadyToComplete(string questId) + { + var quest = GetQuestSO(questId); + if (quest == null || GetState(questId) != QuestState.Active) return false; + foreach (var obj in quest.objectives) + { + if (!obj.IsOptional && !IsObjectiveComplete(obj)) return false; + } + return true; + } + + // ── 私有 ───────────────────────────────────────────── + + bool CanAccept(string questId) + { + if (GetState(questId) != QuestState.Available) return false; + var quest = GetQuestSO(questId); + foreach (var pre in quest.prerequisiteQuestIds) + if (GetState(pre) != QuestState.Completed) return false; + return true; + } + + bool IsObjectiveComplete(QuestObjectiveSO obj) + { + _objectiveStates.TryGetValue(obj.objectiveId, out var s); + s ??= new QuestObjectiveState(); + return obj.EvaluateCompletion(s); // 多态:各子类自行判断完成条件 + } + + void HandleEnemyDefeated(Transform enemyTransform) + { + // 通过 Transform 获取敌人 ID(EnemyBase.EnemyId 属性) + var enemyBase = enemyTransform.GetComponent(); + if (enemyBase == null) return; + string enemyId = enemyBase.EnemyId; + foreach (var (qid, state) in _questStates) + { + if (state != QuestState.Active) continue; + var quest = GetQuestSO(qid); + foreach (var obj in quest.objectives) + { + if (obj.type == ObjectiveType.Defeat && obj.targetEnemyId == enemyId) + IncrementProgress(obj.objectiveId); + } + } + } + + void HandleItemCollected(string itemId) { /* 同上,匹配 Collect 目标 */ } + void HandleNpcDialogue(string npcId) { /* 同上,匹配 TalkTo 目标 */ } + void HandleSceneLoaded(string sceneName) { /* 同上,匹配 Reach 目标 */ } + + void IncrementProgress(string objectiveId) + { + if (!_objectiveStates.TryGetValue(objectiveId, out var s)) + s = _objectiveStates[objectiveId] = new QuestObjectiveState(); + s.progressCount++; + _onObjectiveUpdated.Raise(new QuestObjectiveEvent { ObjectiveId = objectiveId, Progress = s.progressCount }); + } + + QuestSO GetQuestSO(string id) => System.Array.Find(_allQuests, q => q.questId == id); + } + + public enum QuestState { Unavailable, Available, Active, Completed, Failed } + + /// 记录单个目标的运行时进度。 + public class QuestObjectiveState + { + public bool completed = false; + public int progressCount = 0; + } + + /// + /// 实现此接口的 MonoBehaviour 可自行注册/注销目标监听, + /// 由 QuestManager.RegisterObjectiveListeners() 自动调用。 + /// + public interface IQuestObjectiveListener + { + void RegisterListeners(QuestManager manager); + void UnregisterListeners(QuestManager manager); + } +} +``` + +--- + +## 6. QuestGiver + +```csharp +namespace BaseGames.Quest +{ + /// + /// 继承 InteractableNPC,负责发布/完成任务并根据任务状态切换对话版本。 + /// 不依赖 [RequireComponent],直接通过继承获得 Interact 流程。 + /// + public class QuestGiver : InteractableNPC + { + [Header("任务")] + [SerializeField] QuestSO[] _offeredQuests; // 该 NPC 可提供的所有任务(按优先级排列) + + [Header("对话版本(根据任务状态切换)")] + [SerializeField] DialogueSequenceSO _availableDialogue; // 任务可接时 + [SerializeField] DialogueSequenceSO _activeDialogue; // 任务进行中 + [SerializeField] DialogueSequenceSO _readyDialogue; // 完成条件满足时 + [SerializeField] DialogueSequenceSO _completedDialogue; // 任务已完成后 + + // ── Interact_Internal 覆盖(在启动对话前处理任务逻辑)──────── + protected override void Interact_Internal(Transform player) + { + var quest = GetCurrentQuest(); + if (quest == null) return; + + var state = QuestManager.Instance.GetState(quest.questId); + if (state == QuestState.Available) + QuestManager.Instance.AcceptQuest(quest.questId); + else if (QuestManager.Instance.IsReadyToComplete(quest.questId)) + QuestManager.Instance.CompleteQuest(quest.questId, + player.GetComponent()?.Stats); + } + + // ── 返回与当前最高优先级任务状态匹配的对话 SO ────────────────── + protected override DialogueSequenceSO GetCurrentDialogue() + { + var quest = GetCurrentQuest(); + if (quest == null) return base.GetCurrentDialogue(); + + return QuestManager.Instance.GetState(quest.questId) switch + { + QuestState.Available => _availableDialogue, + QuestState.Active => QuestManager.Instance.IsReadyToComplete(quest.questId) + ? _readyDialogue : _activeDialogue, + QuestState.Completed => _completedDialogue, + _ => base.GetCurrentDialogue(), + }; + } + + // 返回当前处于 Available 或 Active 状态的第一个任务 + QuestSO GetCurrentQuest() + { + if (_offeredQuests == null) return null; + foreach (var q in _offeredQuests) + { + var s = QuestManager.Instance.GetState(q.questId); + if (s == QuestState.Available || s == QuestState.Active) return q; + } + return null; + } + } +} +``` + +--- + +## 7. SaveData 集成(任务) + +`SaveData.Quests.QuestStates`(已在 `12_SaveModule.md` 中定义)读写: + +```csharp +// 存档时(SaveManager.GatherSaveData) +foreach (var (id, state) in QuestManager.Instance.QuestStates) + saveData.Quests.QuestStates[id] = (int)state; + +// 读档时(QuestManager.LoadFromSaveData) +public void LoadFromSaveData(QuestSaveData data) +{ + _questStates.Clear(); + foreach (var (id, stateInt) in data.QuestStates) + _questStates[id] = (QuestState)stateInt; + foreach (var (id, progress) in data.ObjectiveProgress) + { + if (!_objectiveStates.TryGetValue(id, out var s)) + s = _objectiveStates[id] = new QuestObjectiveState(); + s.progressCount = progress; + } +} +``` + +--- + +## Part B — 挑战房间 + +--- + +## 8. 挑战房间系统职责 + +``` +挑战房间系统职责: + ├─ ChallengeRoomSO → 挑战定义(波次/时限/奖励) + ├─ ChallengeEncounterSO → 单波敌人配置 + ├─ BossRushSequenceSO → Boss Rush 序列数据 + ├─ ChallengeRoomManager → 运行时流程管理(开始/推进/成功/失败) + └─ ChallengeRoomTrigger → 场景组件,触发进入挑战 +``` + +--- + +## 9. ChallengeRoomSO + +```csharp +namespace BaseGames.Challenge +{ + [CreateAssetMenu(menuName = "Challenge/ChallengeRoom")] + public class ChallengeRoomSO : ScriptableObject + { + [Header("标识")] + public string challengeId; + public string displayName; + public ChallengeType challengeType; + + [Header("波次(非 BossRush)")] + public ChallengeEncounterSO[] encounters; + + [Header("Boss Rush(BossRush 类型专用)")] + public BossRushSequenceSO bossRushSequence; + + [Header("限制条件")] + public float timeLimit; // 0 = 无时限 + public bool requireNoHit; + public int minComboRequired; // 0 = 无要求 + + [Header("奖励")] + public RewardSO firstClearReward; // 首次通关奖励 + public RewardSO repeatedReward; // 重复通关奖励 + + [Header("解锁条件")] + public string[] prerequisiteBossIds; // 需击败的 Boss ID + } + + public enum ChallengeType { Survival, TimeTrial, BossRush, NoHit } +} +``` + +--- + +## 10. ChallengeEncounterSO + +```csharp +namespace BaseGames.Challenge +{ + [CreateAssetMenu(menuName = "Challenge/Encounter")] + public class ChallengeEncounterSO : ScriptableObject + { + [Serializable] + public struct SpawnEntry + { + public string enemyAddressKey; // Addressables key + public Transform spawnPoint; + public int count; + } + + public SpawnEntry[] enemies; + public float waveDelay; // 上波清空后等待多少秒生成本波 + } +} +``` + +--- + +## 11. BossRushSequenceSO + +```csharp +namespace BaseGames.Challenge +{ + [CreateAssetMenu(menuName = "Challenge/BossRushSequence")] + public class BossRushSequenceSO : ScriptableObject + { + [Serializable] + public struct BossEntry + { + public string bossSceneName; // Boss 所在场景(Additive 加载) + public string bossId; + public float hpRestoreRatio; // 击败本 Boss 后玩家恢复 HP 比例(默认 0.3) + } + + public BossEntry[] bosses; + } +} +``` + +--- + +## 12. ChallengeRoomManager + +```csharp +namespace BaseGames.Challenge +{ + /// + /// 挑战房间流程管理器,挂在挑战房间场景的 [ChallengeManager] GameObject 上。 + /// 场景加载时自动启动挑战。 + /// + public class ChallengeRoomManager : MonoBehaviour + { + [SerializeField] ChallengeRoomSO _challengeData; + [SerializeField] StringEventChannelSO _onChallengeCompleted; // → EVT_ChallengeCompleted(challengeId) + [SerializeField] StringEventChannelSO _onChallengeFailed; // → EVT_ChallengeFailed(challengeId) + // ⚠️ PlayerController 无 Instance(Architecture 05 §2);挑战房间场景持有引用 + [SerializeField] PlayerController _player; + + int _currentEncounterIndex; + int _remainingEnemies; + float _elapsedTime; + bool _isRunning; + bool _noHitViolated; + + void Start() => StartChallenge(); + + void Update() + { + if (!_isRunning) return; + _elapsedTime += Time.deltaTime; + + // 超时失败 + if (_challengeData.timeLimit > 0 && _elapsedTime >= _challengeData.timeLimit) + FailChallenge(); + } + + void StartChallenge() + { + // 自动存档当前位置(挑战失败后读档) + SaveManager.Instance.QuickSave(); + _isRunning = true; + _currentEncounterIndex = 0; + SpawnWave(_currentEncounterIndex); + } + + void SpawnWave(int index) + { + var enc = _challengeData.encounters[index]; + _remainingEnemies = 0; + foreach (var entry in enc.enemies) + { + for (int i = 0; i < entry.count; i++) + { + _remainingEnemies++; + // Addressables 加载并生成敌人 + Addressables.InstantiateAsync(entry.enemyAddressKey, entry.spawnPoint.position, Quaternion.identity) + .Completed += handle => + { + if (handle.Result.TryGetComponent(out var enemy)) + enemy.OnDied += OnEnemyDefeated; + }; + } + } + } + + void OnEnemyDefeated() + { + _remainingEnemies--; + if (_remainingEnemies > 0) return; + + _currentEncounterIndex++; + if (_currentEncounterIndex >= _challengeData.encounters.Length) + CompleteChallenge(); + else + StartCoroutine(DelayedNextWave(_challengeData.encounters[_currentEncounterIndex].waveDelay)); + } + + IEnumerator DelayedNextWave(float delay) + { + yield return new WaitForSeconds(delay); + SpawnWave(_currentEncounterIndex); + } + + void CompleteChallenge() + { + _isRunning = false; + var reward = SaveManager.Instance.IsFirstClear(_challengeData.challengeId) + ? _challengeData.firstClearReward + : _challengeData.repeatedReward; + reward?.Apply(_player.Stats); + _onChallengeCompleted.Raise(_challengeData.challengeId); + } + + void FailChallenge() + { + _isRunning = false; + _onChallengeFailed.Raise(_challengeData.challengeId); + // 自动读档回挑战入口 + SaveManager.Instance.QuickLoad(); + } + } +} +``` + +--- + +## 13. ChallengeRoomTrigger + +```csharp +namespace BaseGames.Challenge +{ + /// + /// 放置在挑战房间入口处,玩家交互后加载挑战场景。 + /// + [RequireComponent(typeof(Collider2D))] + public class ChallengeRoomTrigger : MonoBehaviour, IInteractable + { + [SerializeField] ChallengeRoomSO _challengeData; + [SerializeField] string _challengeSceneName; + [SerializeField] SceneLoadRequestEventChannelSO _onSceneLoadRequest; // ⚠️ 通过事件频道触发加载(SceneLoader 无 Instance;架构 03 §3) + + public string InteractPrompt => $"进入挑战:{_challengeData.displayName}"; + public bool CanInteract => IsUnlocked(); + + public void Interact(Transform player) + { + if (!IsUnlocked()) return; + // ⚠️ 通过 EVT_SceneLoadRequest 频道触发(不直接调用 SceneLoader,架构 03 §3 接口为 RequestLoad) + _onSceneLoadRequest.Raise(new SceneLoadRequest + { + SceneName = _challengeSceneName, + EntryTransitionId = string.Empty, + ShowLoadingScreen = false, + IsRespawn = false, + }); + } + + public void OnPlayerEnterRange(Transform player) { } + public void OnPlayerExitRange() { } + + bool IsUnlocked() + { + foreach (var bossId in _challengeData.prerequisiteBossIds) + if (!SaveManager.Instance.IsBossDefeated(bossId)) return false; + return true; + } + } +} +``` + +--- + +## 14. 事件频道 + +| 频道 SO | Payload | 发布者 | 订阅者 | +|--------|---------|--------|--------| +| `EVT_QuestStateChanged` | `(string questId, QuestState)` | `QuestManager` | `QuestGiver`(刷新对话)、`QuestLogUI`(刷新日志) | +| `EVT_ChallengeCompleted` | `string challengeId` | `ChallengeRoomManager` | `HUDController`(结算界面)、`AchievementManager` | +| `EVT_ChallengeFailed` | `string challengeId` | `ChallengeRoomManager` | `SaveManager`(触发读档)、`HUDController` | diff --git a/Docs/Architecture/23_BossSkillModule.md b/Docs/Architecture/23_BossSkillModule.md new file mode 100644 index 0000000..e029159 --- /dev/null +++ b/Docs/Architecture/23_BossSkillModule.md @@ -0,0 +1,841 @@ +# 23 · Boss 技能模块(Boss Skill Module) + +> **命名空间** `BaseGames.Boss` +> **程序集** `BaseGames.Enemy`(并入敌人程序集) +> **依赖** `BaseGames.Core.Events` · `BaseGames.Combat`(DamageInfo · HitBox)· `BaseGames.AI`(BossOrchestrator · BehaviorDesigner)· `Kybernetik.Animancer` +> **Design 来源** [47_BossSkillSystem](../Design/47_BossSkillSystem.md) + +--- + +## 目录 + +1. [模块职责与层级](#1-模块职责与层级) +2. [BossSkillType 枚举](#2-bossskilltype-枚举) +3. [VulnerabilityWindow](#3-vulnerabilitywindow) +4. [BossSkillSO](#4-bossskillso) +5. [AttackPatternSO](#5-attackpatternso) +6. [SkillSequenceSO](#6-skillsequenceso) +7. [BossSkillExecutor](#7-bossskillexecutor) +8. [WeakPointSystem](#8-weakpointsystem) +9. [BossOrchestrator 集成](#9-bossorchestrator-集成) +10. [设计规则一览](#10-设计规则一览) +11. [事件频道](#11-事件频道) + +--- + +## 1. 模块职责与层级 + +``` +数据层(ScriptableObject): + ┌─────────────────────────────────────────────────┐ + │ BossSkillSO │ + │ ├─ 技能元信息(类型/弱点窗口/互动标签) │ + │ └─ SkillSequenceSO[] 伤害序列 │ + │ └─ AttackPatternSO[] 单个攻击图案 │ + └─────────────────────────────────────────────────┘ + +运行时层(MonoBehaviour / UniTask): + BossOrchestrator(AI 决策,Behavior Designer 树) + └─ BossSkillExecutor(执行技能序列,处理 VulnerabilityWindow) + ├─ WeakPointSystem(弱点 HurtBox 激活管理) + └─ HitBox[](输出伤害) + +设计原则: + ① 伤害值只写在 AttackPatternSO,不在 BossSkillSO 重复 + ② 每个技能必须有 ≥1 VulnerabilityWindow(后摇 ≥0.5s 或专属弱点) + ③ 技能顺序由 BossOrchestrator 决定,BossSkillExecutor 只负责执行 +``` + +--- + +## 2. BossSkillCategory 和 BossSkillType 枚举 + +```csharp +namespace BaseGames.Boss +{ + /// 高层技能分类(平衡框架用)。 + public enum BossSkillCategory + { + Melee, Ranged, Charge, AoE, Environmental, Summon, + Buff, Debuff, Phase, Passive, Reactive + } + + /// 具体技能类型(战斗设计用)。 + public enum BossSkillType + { + // 基础攻击 + MeleeSlash, // 近战斩击 + ChargeAttack, // 冲刺撞击 + LeapSlam, // 跳起落地震 + ProjectileVolley, // 弹幕齐射 + LaserBeam, // 激光扫射 + + // 阶段技能 + PhaseTransition, // 阶段切换(无攻击,触发动画/护盾等) + SummonMinion, // 召唤小兵 + + // 特殊 + ArenaTrap, // 改变战斗区域地形 + SpeedBurst, // 速度爆发(数帧内免疫/高速) + DefensiveShell, // 防御壳(需攻击弱点) + } + + /// 互动标签:定义玩家可以对该技能执行哪些反制操作。 + [Flags] + public enum InteractionTag + { + None = 0, + Parryable = 1 << 0, // 可弹反 + PerfectParryOnly = 1 << 1, // 仅完美弹反有效 + DodgeWindow = 1 << 2, // 打开逃避窗口 + Unblockable = 1 << 3, // 无法拦截 + CanBeReflected = 1 << 4, // 弹幕可被反射 + ExposesWeakPoint = 1 << 5, // 暴露弱点 + GrantsPlayerReso = 1 << 6, // 多典:命中后给予玩家资源 + ArenaHazard = 1 << 7, // 场地危机(环境相关) + PhaseGate = 1 << 8, // 阶段门关(必须触发才进入下一阶段) + } +} +``` + +--- + +## 3. VulnerabilityWindow + +```csharp +namespace BaseGames.Boss +{ + /// 弱点出现时机类型。 + public enum VulnTriggerType + { + OnAttackRecovery, // 攻击后摇 + OnParriedSuccess, // 弹反成功 + OnCounterSkillHit, // 计算技能命中 + OnPhaseTransition, // 阶段切换时 + OnHazardBackfire, // 场地尃8个 + OnSummonDefeated, // 召唤物被击败 + Manual, // BossSkillExecutor 手动触发 + } + + /// 弱点位置类型。 + public enum WeakPointType + { + FullBody, // 主体全身都是弱点 + HeadOnly, // 仅头部 + BackOnly, // 仅背部 + CoreExposed, // 核心暴露(展开中心 HurtBox) + CustomPoint, // 自定义弱点 HurtBox + } + + [Serializable] + public struct VulnerabilityWindow + { + [Tooltip("弱点触发方式")] + public VulnTriggerType TriggerType; + + [Tooltip("触发后延迟出现(秒)")] + [Min(0f)] + public float TriggerDelay; + + [Tooltip("弱点持续时长(秒,设计约定 ≥0.5s)")] + [Min(0.1f)] + public float Duration; + + [Tooltip("弱点位置类型")] + public WeakPointType WeakPointType; + + [Tooltip("弱点激活时 Boss 的受击乘数(1 = 正常,>1 = 额外伤害)")] + [Min(0.1f)] + public float DamageMultiplier; + + [Tooltip("命中后强制驰恶")] + public bool ForceStagger; + + [Tooltip("驰恶时间(秒),ForceStagger=true 时生效")] + [Min(0f)] + public float StaggerDuration; + + [Tooltip("弱点开启时播放的 Feedback(光效等)")] + public MMF_Player OpenFeedback; + + [Tooltip("弱点关闭时播放的 Feedback")] + public MMF_Player CloseFeedback; + + [Tooltip("弱点激活时的高亮颜色(指示玩家该攻击哪里)")] + public Color HighlightColor; + + // 与旧字段对应(保留为展示用) + public bool ActivateWeakPointHurtBox => WeakPointType != WeakPointType.FullBody; + } +} +``` + +--- + +## 4. BossSkillSO + +```csharp +namespace BaseGames.Boss +{ + [CreateAssetMenu(menuName = "Boss/BossSkill")] + public class BossSkillSO : ScriptableObject + { + [Header("元信息")] + public string skillId; + public string displayName; + [TextArea(1, 4)] + public string designNote; // 设计师注释(不进游戏) + + [Header("技能分类")] + public BossSkillCategory category; // 高层分类(Melee/Ranged 等) + public BossSkillType skillType; // 具体技能类型 + + [Header("阶段可用性")] + [Tooltip("和数据层 BossPhaseConfigSO.PhaseIndex 对应;空 = 全阶段可用")] + public int[] availablePhaseIndices; // 空数组 = 全阶段可用 + + [Header("核心攻击动作引用")] + [Tooltip("构成此技能的 AttackPatternSO 序列(单个技能 = 长度 1;连击/多段 = 多个)")] + public AttackPatternSO[] attackPatterns; // 按执行顺序排列 + + [Header("弱点窗口(至少 1 个)")] + public VulnerabilityWindow[] vulnerabilityWindows; + + [Header("互动标签(与谜题/道具联动)")] + public InteractionTag interactionTags; // [Flags] 枚举,替代旧 string interactionTag + + [Header("连段(执行中的子序列)")] + public SkillSequenceSO sequenceOnHit; // 被玩家攻击弱点时触发的序列(可空) + public SkillSequenceSO sequenceOnMiss; // 弱点未被攻击时触发(可空) + + [Header("玩家反制接口")] + [Tooltip("被不同玩家行为反制时 Boss 的应激反应(见 §4.1)")] + public PlayerCounterResponse[] counterResponses; + + [Header("场景联动")] + [Tooltip("此技能执行时触发的场景事件(见 §4.2)")] + public ArenaEventTrigger[] arenaEvents; + + [Header("Boss 资源")] + [Tooltip("使用此技能消耗的 Boss 自身资源(见 §7)")] + public BossResourceCost resourceCost; + [Tooltip("使用此技能后是否积累愤怒值")] + public bool buildsRage; + + [Header("霸体配置")] + [Tooltip("此技能执行期间的霸体窗口(见 54_PoiseSystem §8);None = 可被打断")] + public PoiseWindowConfig poiseWindow; + + [Header("动画")] + public ClipTransition skillAnimation; // Animancer ClipTransition(技能播放动画) + + [Header("冷却")] + [Min(0f)] + public float cooldown; // 秒,0 = 无冷却(由 BossOrchestrator 决策层管理) + } +} +``` + +### 4.1 PlayerCounterResponse — 玩家反制接口 + +```csharp +namespace BaseGames.Boss +{ + [Serializable] + public struct PlayerCounterResponse + { + [Header("反制条件")] + public CounterType counterType; // 玩家用什么行为触发反制 + public string requiredSkillId; // counterType = SpecificSkill 时填写技能 ID + + [Header("反制效果(对 Boss)")] + public float bossStaggerDuration; // 强制硬直时长(秒,0 = 不强制) + public float bossDamageBonus; // 对 Boss 的额外伤害倍率(0 = 不额外) + public bool openVulnWindow; // 是否触发 VulnerabilityWindow + public bool interruptSkill; // 是否打断 Boss 当前技能 + + [Header("反制收益(对玩家)")] + public int soulPowerGrant; // 给予玩家的灵力数量 + public int spiritPowerGrant; // 给予玩家的魄元数量 + public MMF_Player counterFeedback; // 成功反制的特效/音效反馈 + } + + public enum CounterType + { + Parry, // 弹反成功 + PerfectParry, // 完美弹反 + DodgeThrough, // 冲刺穿越攻击(无敌帧通过) + SpecificSkill, // 使用特定玩家技能(填 requiredSkillId) + WeakPointHit, // 命中暴露的弱点 + HazardBackfire, // 利用场景危险伤到 Boss + SummonKill, // 击败召唤物 + } +} +``` + +### 4.2 ArenaEventTrigger — 场景联动 + +```csharp +namespace BaseGames.Boss +{ + [Serializable] + public struct ArenaEventTrigger + { + public string targetArenaObjectId; // 要影响的场景物件 ID(空 = 广播给所有) + public ArenaEventType eventType; + public float delay; // 从技能触发到场景事件的延迟(秒) + public ArenaEventParams parameters; + } + + public enum ArenaEventType + { + DestroyPlatform, // 破坏指定平台 + ActivateHazard, // 激活陷阱(如喷火管) + DeactivateHazard, // 关闭陷阱 + SpawnHazardArea, // 生成持续危险区域(熔岩/毒液) + ShakeArena, // 场景震动 + ToggleLighting, // 切换场景光照 + SpawnPlatform, // 生成新平台(阶段 2 变化) + TriggerCutscene, // 触发小型过场 + } + + [Serializable] + public struct ArenaEventParams + { + public float duration; // 效果持续时间(0 = 永久) + public float intensity; // 强度(震动幅度、危险区域半径等) + public bool revertsOnPhaseEnd; // 阶段结束时是否恢复 + } + + [Serializable] + public struct ArenaEventData + { + public ArenaEventType type; + public ArenaEventParams parameters; + public string sourceSkillId; // 来源技能 ID(供场景物件做条件判断) + } + + /// + /// 场景中可被 Boss 技能交互的对象实现此接口。 + /// Boss 通过 ArenaEventBus 广播,场景物件监听并响应。 + /// + public interface IArenaInteractable + { + string ArenaObjectId { get; } + void OnBossArenaEvent(ArenaEventData data); + } +} +``` + +### 4.3 BossResourceCost — Boss 资源消耗 + +```csharp +namespace BaseGames.Boss +{ + [Serializable] + public struct BossResourceCost + { + public string resourceId; // 对应 BossResourceConfigSO.resourceId(如 "Rage") + public float cost; // 消耗量(0 = 不消耗资源) + public float minRequired; // 使用此技能的最低资源要求 + } + + [CreateAssetMenu(menuName = "Boss/ResourceConfig")] + public class BossResourceConfigSO : ScriptableObject + { + public string resourceId; // 如 "Rage" / "PhaseCharge" + public string displayName; + public float maxValue; + public float startValue; // 初始值(通常 0) + + [Header("自动变化")] + public float passiveRate; // 每秒自动变化量(正=增长/负=衰减,0=不变) + public float onTakeDamageGain; // 每受到 1 点伤害积累量 + public float onSkillUseGain; // 每使用一次技能积累量 + + [Header("满值效果")] + public bool autoTriggerOnFull; + public BossSkillSO fullTriggerSkill; + public float resetValueAfterTrigger; + } +} +``` + +--- + +## 5. AttackPatternSO + +```csharp +namespace BaseGames.Boss +{ + /// + /// 单个攻击图案的数据。 + /// 存放伤害/速度等实际参数,BossSkillSO 不存参数。 + /// + [CreateAssetMenu(menuName = "Boss/AttackPattern")] + public class AttackPatternSO : ScriptableObject + { + [Header("输出")] + public DamageSourceSO DamageSource; // ⚠️ HitBox.Activate() 需要 DamageSourceSO(架构 06 §4) + public float KnockbackAngle; // 击退角度(度)(基础击退力由 DamageSourceSO 内配置) + + [Header("弹幕(若为弹幕类型)")] + public AssetReferenceGameObject ProjectilePrefab; + public int ProjectileCount = 1; + public float SpreadAngle = 0f; // 散射角(度) + public float ProjectileSpeed = 8f; + + [Header("范围攻击(若为 AoE 类型)")] + public float AoERadius; + public Vector2 AoEOffset; // 相对于 Boss 的偏移 + + [Header("时序")] + public float WindupDuration; // 预备动作时间 + public float ActiveDuration; // HitBox 激活时长 + public float RecoveryDuration; // 后摇时长(VulnerabilityWindow 通常在此段) + } +} +``` + +--- + +## 6. SkillSequenceSO + +```csharp +namespace BaseGames.Boss +{ + /// + /// 有序攻击序列(一个技能内的多段连段)。 + /// + [CreateAssetMenu(menuName = "Boss/SkillSequence")] + public class SkillSequenceSO : ScriptableObject + { + [Serializable] + public struct SequenceStep + { + public AttackPatternSO pattern; + public float delayBeforeStep; // 执行本步前等待的秒数 + } + + public SequenceStep[] steps; + + [Header("序列完成后的行为")] + public bool RepeatIfPlayerInRange; // 若玩家仍在范围内则重复(Survival 关卡用) + public float RepeatDelay; + [Range(0, 10)] + public int MaxRepeatCount; // 0 = 无限 + } +} +``` + +--- + +## 7. BossSkillExecutor + +```csharp +namespace BaseGames.Boss +{ + /// + /// 挂在 Boss GameObject 上。 + /// 接收 BossOrchestrator 的指令,执行指定 BossSkillSO。 + /// 管理 VulnerabilityWindow 计时和 WeakPointSystem 激活。 + /// + public class BossSkillExecutor : MonoBehaviour + { + [SerializeField] HitBox[] _hitBoxes; // Boss 身上的所有 HitBox + [SerializeField] WeakPointSystem _weakPointSystem; + [SerializeField] AnimancerComponent _animancer; + [SerializeField] private string _bossId; // Boss 资产唯一 ID + [SerializeField] private BossSkillEventChannelSO _onBossSkillStarted; // 发布:技能开始 + [SerializeField] private BossSkillEventChannelSO _onBossSkillEnded; // 发布:技能结束 + // ⚠️ PlayerController 无 Instance(Architecture 05 §2);Boss 居小场景持有玩家 Transform 引用 + [SerializeField] private Transform _playerTransform; // 由 Inspector 指定玩家 Transform + + BossSkillSO _currentSkill; + AnimancerState _currentState; + bool _isExecuting; + CancellationTokenSource _cts; + + public bool IsExecuting => _isExecuting; + + // ── 公共 API ─────────────────────────────────────────────── + public async UniTask ExecuteSkill(BossSkillSO skill, CancellationToken ct) + { + if (_isExecuting) return; + _isExecuting = true; + _currentSkill = skill; + _onBossSkillStarted?.Raise(new BossSkillEvent { BossId = _bossId, SkillId = skill.skillId }); + + // 播放技能动画(Animancer ClipTransition,直接从 BossSkillSO 引用) + _currentState = _animancer.Play(skill.skillAnimation); + + // 执行 SkillSequenceSO(若挂载 sequenceOnMiss) + if (skill.sequenceOnMiss != null) + await ExecuteSequence(skill.sequenceOnMiss, ct); + + _isExecuting = false; + _onBossSkillEnded?.Raise(new BossSkillEvent { BossId = _bossId, SkillId = skill.skillId }); + } + + async UniTask ExecuteSequence(SkillSequenceSO seq, CancellationToken ct) + { + int repeatCount = 0; + do + { + foreach (var step in seq.steps) + { + ct.ThrowIfCancellationRequested(); + await UniTask.WaitForSeconds(step.delayBeforeStep, cancellationToken: ct); + await ExecutePattern(step.pattern, ct); + } + repeatCount++; + if (seq.RepeatDelay > 0) + await UniTask.WaitForSeconds(seq.RepeatDelay, cancellationToken: ct); + } + while (seq.RepeatIfPlayerInRange + && repeatCount < seq.MaxRepeatCount + && IsPlayerInRange() + && !ct.IsCancellationRequested); + } + + async UniTask ExecutePattern(AttackPatternSO pattern, CancellationToken ct) + { + // 预备 + await UniTask.WaitForSeconds(pattern.WindupDuration, cancellationToken: ct); + + // 激活 HitBox(⚠️ 以架构 06_CombatModule §4 为准:Activate(DamageSourceSO, Transform)) + foreach (var hb in _hitBoxes) + hb.Activate(pattern.DamageSource, transform); + + await UniTask.WaitForSeconds(pattern.ActiveDuration, cancellationToken: ct); + + // 关闭 HitBox + foreach (var hb in _hitBoxes) hb.Deactivate(); + + // 后摇(VulnerabilityWindow 由动画事件配合 VulnerabilityWindow 数据触发) + await UniTask.WaitForSeconds(pattern.RecoveryDuration, cancellationToken: ct); + } + + // ── VulnerabilityWindow 激活(由 ExecuteSkill 协程驱动)───── + // 注意:新版 VulnerabilityWindow 改用绝对时间(TriggerDelay + Duration), + // 而非归一化时间,故弃用 Update 轮询,改为 UniTask 序列激活。 + async UniTask ActivateVulnerabilityWindows(BossSkillSO skill, CancellationToken ct) + { + foreach (var window in skill.vulnerabilityWindows) + { + // 等待触发延迟 + await UniTask.Delay( + TimeSpan.FromSeconds(window.TriggerDelay), + cancellationToken: ct); + + // 激活弱点 + bool isCustom = window.ActivateWeakPointHurtBox; + _weakPointSystem.SetActive(true, window.DamageMultiplier, isCustom); + window.OpenFeedback?.PlayFeedbacks(); + + // 持续弱点窗口 + await UniTask.Delay( + TimeSpan.FromSeconds(window.Duration), + cancellationToken: ct); + + // 关闭弱点 + _weakPointSystem.SetActive(false, 1f, isCustom); + window.CloseFeedback?.PlayFeedbacks(); + } + } + + bool IsPlayerInRange() => + _playerTransform != null && + Vector2.Distance(transform.position, _playerTransform.position) < 8f; + } +} +``` + +--- + +## 8. WeakPointSystem + +```csharp +namespace BaseGames.Boss +{ + /// + /// 管理 Boss 的专属弱点 HurtBox(如核心、眼睛等)。 + /// 弱点激活期间受到的伤害会乘以 DamageMultiplier。 + /// + public class WeakPointSystem : MonoBehaviour + { + [Serializable] + public struct WeakPoint + { + public HurtBox hurtBox; + public GameObject visualIndicator; // 弱点亮光/标记(可为 null) + } + + [SerializeField] WeakPoint[] _weakPoints; + [SerializeField] private string _bossId; // Boss 资产唯一 ID + [SerializeField] private StringEventChannelSO _onVulnerabilityWindowOpened; // 发布:弱点窗口开启 + + float _damageMultiplier = 1f; + + public void SetActive(bool active, float multiplier = 1f) + { + _damageMultiplier = multiplier; + foreach (var wp in _weakPoints) + { + wp.hurtBox.gameObject.SetActive(active); + if (wp.visualIndicator != null) + wp.visualIndicator.SetActive(active); + } + if (active) _onVulnerabilityWindowOpened?.Raise(_bossId); + } + + /// + /// 弱点 HurtBox 受击时,由 BossStats 调用此方法获取最终伤害系数。 + /// + public float GetDamageMultiplier() => _damageMultiplier; + } +} +``` + +--- + +## 9. BossOrchestrator 集成 + +`BossOrchestrator` 是 Behavior Designer 的宿主 MonoBehaviour,持有 `BossSkillExecutor` 引用: + +```csharp +// BossOrchestrator 片段(供 BD 节点调用) +public class BossOrchestrator : MonoBehaviour +{ + [SerializeField] BossSkillSO[] _phaseOneSkills; + [SerializeField] BossSkillSO[] _phaseTwoSkills; + [SerializeField] BossSkillExecutor _executor; + + int _currentPhase = 1; + CancellationTokenSource _cts; + + // BD Task 节点调用:ExecuteSkill(skillId) + public async UniTask ExecuteSkillById(string skillId) + { + var skills = _currentPhase == 1 ? _phaseOneSkills : _phaseTwoSkills; + var skill = System.Array.Find(skills, s => s.skillId == skillId); + if (skill == null) return; + + _cts?.Cancel(); + _cts = new CancellationTokenSource(); + await _executor.ExecuteSkill(skill, _cts.Token); + } + + public void EnterPhaseTwo() + { + _currentPhase = 2; + _cts?.Cancel(); // 打断当前技能 + } +} +``` + +--- + +## 10. 设计规则一览 + +| 规则 | 说明 | +|------|------| +| 每个技能 ≥1 VulnerabilityWindow | 后摇窗口 ≥0.5s(归一化时长约 0.15~0.4) | +| 伤害参数只在 AttackPatternSO | BossSkillSO 不存 BaseDamage 等参数 | +| 技能冷却由 BossOrchestrator 管理 | BossSkillExecutor 只执行,不维护冷却 | +| VulnerabilityWindow 在编辑器中校验 | 自定义 Validator Tool 检查 DurationNormalized ≥ 0.1 | +| Boss 阶段切换打断当前技能 | `_cts.Cancel()` 终止 UniTask 序列 | + +--- + +## 11. 事件频道 + +| 频道 SO | Payload | 发布者 | 订阅者 | +|--------|---------|--------|--------| +| `EVT_BossSkillStarted` | `(string bossId, string skillId)` | `BossSkillExecutor` | `BossHUD`(显示技能名)(震动通过 `CameraStateController.Instance.TriggerImpulse()` 直接调用,不订阅事件)| +| `EVT_BossSkillEnded` | `(string bossId, string skillId)` | `BossSkillExecutor` | `BossOrchestrator`(BD 决策推进) | +| `EVT_BossVulnerabilityWindowOpened` | `string bossId` | `WeakPointSystem` | `PlayerFeedback`(提示音效)、`HUDController` | +| `EVT_BossPhaseChanged` | `(string bossId, int phase)` | `BossBase.EnterPhase()` | `BossHUD`(相机切换通过 `CameraStateController.Instance` 直接调用,不订阅事件)| + +--- + +## 12. BossSkillSequenceEditorWindow — 技能序列可视化 + +> **痛点**:`SkillSequenceSO` 包含多个 `SequenceStep[]`(每步:AttackPatternSO + delayBeforeStep),但 Inspector 中只能逐字段查看数字,策划无法直觉感受技能序列的节奏感——哪段是攻击前摇、哪段是弱点窗口、总时长是否合理,全部要靠心算。本 EditorWindow 以 **甘特图(Gantt Chart)** 方式将时间线可视化。 + +### 12.1 功能规格 + +| 功能 | 说明 | +|------|------| +| 时间轴刻度 | 横轴为时间(秒),最大显示 `SkillSequenceSO.TotalDuration`,刻度精度 0.1s | +| 攻击阶段条 | 每个 `AttackPatternSO` 渲染为蓝色横条,长度 = `pattern.Duration` | +| 延迟段 | `delayBeforeStep` 渲染为灰色空隙 | +| 弱点窗口 | `VulnerabilityWindow`(`startNormalized`~`endNormalized`)渲染为绿色覆盖条 | +| 选中高亮 | 点击任一条可选中对应 `AttackPatternSO`,Inspector 同步 Ping | +| 验证警告 | `VulnerabilityWindow.DurationNormalized < 0.1` 时对应条变红 + Tooltip 提示 | +| SO 拖放 | 将 `SkillSequenceSO` 资产拖入窗口即可加载 | + +### 12.2 实现规范 + +```csharp +// 路径: Assets/Scripts/Editor/BossSkill/BossSkillSequenceWindow.cs +// 程序集: BaseGames.Editor(Editor Only) +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; +using System.Collections.Generic; + +namespace BaseGames.Editor.BossSkill +{ + public class BossSkillSequenceWindow : EditorWindow + { + [MenuItem("BaseGames/Tools/Boss Skill Sequence Viewer")] + public static void Open() => GetWindow("技能序列查看器"); + + // ── 状态 ────────────────────────────────────────────────────────────── + private SkillSequenceSO _target; + private Vector2 _scroll; + private float _zoom = 100f; // 像素/秒 + private const float TrackHeight = 28f; + private const float LabelWidth = 140f; + private const float HeaderHeight = 30f; + + // 颜色 + private static readonly Color ColDelay = new(0.3f, 0.3f, 0.3f, 0.5f); + private static readonly Color ColAttack = new(0.2f, 0.5f, 1.0f, 0.8f); + private static readonly Color ColVulnOk = new(0.2f, 0.8f, 0.3f, 0.6f); + private static readonly Color ColVulnWarn = new(1.0f, 0.3f, 0.3f, 0.7f); + + private void OnGUI() + { + DrawToolbar(); + if (_target == null) + { + EditorGUILayout.HelpBox("将 SkillSequenceSO 拖到此处或从 Toolbar 选择", MessageType.Info); + HandleDragDrop(); + return; + } + DrawTimeline(); + } + + private void DrawToolbar() + { + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); + _target = (SkillSequenceSO)EditorGUILayout.ObjectField( + "技能序列", _target, typeof(SkillSequenceSO), false, + GUILayout.Width(300)); + GUILayout.Label($"缩放: {_zoom:0}px/s"); + _zoom = GUILayout.HorizontalSlider(_zoom, 30f, 300f, GUILayout.Width(100)); + EditorGUILayout.EndHorizontal(); + } + + private void DrawTimeline() + { + float totalSeconds = _target.TotalDuration; + float timelineWidth = totalSeconds * _zoom + LabelWidth + 20f; + + _scroll = EditorGUILayout.BeginScrollView(_scroll); + Rect viewRect = EditorGUILayout.GetControlRect(false, + HeaderHeight + _target.Steps.Length * (TrackHeight + 4f), + GUILayout.Width(timelineWidth)); + + DrawRuler(viewRect, totalSeconds); + + float trackY = viewRect.y + HeaderHeight; + float cursor = 0f; // 当前时间游标(秒) + + for (int i = 0; i < _target.Steps.Length; i++) + { + var step = _target.Steps[i]; + Rect trackRect = new(viewRect.x, trackY + i * (TrackHeight + 4f), + viewRect.width, TrackHeight); + + // 标签 + Rect labelRect = new(trackRect.x, trackRect.y, LabelWidth, TrackHeight); + GUI.Label(labelRect, step.Pattern?.name ?? "—", EditorStyles.miniLabel); + + // 延迟段 + if (step.DelayBeforeStep > 0f) + { + Rect delayRect = TimeToRect(trackRect, cursor, step.DelayBeforeStep); + EditorGUI.DrawRect(delayRect, ColDelay); + cursor += step.DelayBeforeStep; + } + + // 攻击段 + float patternDur = step.Pattern?.Duration ?? 0f; + if (patternDur > 0f) + { + Rect atkRect = TimeToRect(trackRect, cursor, patternDur); + EditorGUI.DrawRect(atkRect, ColAttack); + GUI.Label(atkRect, step.Pattern?.name ?? "", EditorStyles.centeredGreyMiniLabel); + + // 弱点窗口覆盖层 + DrawVulnerabilityWindows(atkRect, cursor, patternDur, step.Pattern); + cursor += patternDur; + } + } + + EditorGUILayout.EndScrollView(); + } + + private void DrawVulnerabilityWindows(Rect atkRect, float patternStart, + float patternDur, AttackPatternSO pattern) + { + if (pattern?.VulnerabilityWindows == null) return; + foreach (var vw in pattern.VulnerabilityWindows) + { + float wStart = vw.StartNormalized * patternDur; + float wDur = (vw.EndNormalized - vw.StartNormalized) * patternDur; + bool warn = vw.DurationNormalized < 0.1f; + Color col = warn ? ColVulnWarn : ColVulnOk; + + Rect wRect = TimeToRect(atkRect, patternStart + wStart, wDur); + EditorGUI.DrawRect(wRect, col); + if (warn) + GUI.Label(wRect, "⚠", new GUIStyle { fontSize = 10, + normal = { textColor = Color.white }, alignment = TextAnchor.MiddleCenter }); + } + } + + private Rect TimeToRect(Rect trackRect, float startSec, float durSec) + { + float x = trackRect.x + LabelWidth + startSec * _zoom; + float w = Mathf.Max(2f, durSec * _zoom); + return new Rect(x, trackRect.y + 2f, w, trackRect.height - 4f); + } + + private void DrawRuler(Rect viewRect, float totalSeconds) + { + float step = _zoom >= 80f ? 0.5f : 1f; + for (float t = 0; t <= totalSeconds; t += step) + { + float x = viewRect.x + LabelWidth + t * _zoom; + EditorGUI.DrawRect(new Rect(x, viewRect.y, 1f, HeaderHeight), Color.gray); + GUI.Label(new Rect(x + 2f, viewRect.y, 40f, 16f), $"{t:0.0}s", + EditorStyles.miniLabel); + } + } + + private void HandleDragDrop() + { + var evt = Event.current; + if (evt.type == EventType.DragUpdated || evt.type == EventType.DragPerform) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + if (evt.type == EventType.DragPerform) + { + DragAndDrop.AcceptDrag(); + foreach (var obj in DragAndDrop.objectReferences) + if (obj is SkillSequenceSO seq) { _target = seq; break; } + } + evt.Use(); + } + } + } +} +#endif +``` + +> **打开方式**:菜单 `BaseGames → Tools → Boss Skill Sequence Viewer`,将 `SkillSequenceSO` 资产拖入即可。时间轴缩放通过 Toolbar 滑条控制;弱点窗口 `DurationNormalized < 0.1` 时变红警告,对应设计规则(§10 Validator 等价)。 + diff --git a/Docs/Architecture/24_AnimEventModule.md b/Docs/Architecture/24_AnimEventModule.md new file mode 100644 index 0000000..546b7ad --- /dev/null +++ b/Docs/Architecture/24_AnimEventModule.md @@ -0,0 +1,602 @@ +# 24 · 动画事件模块(Animation Event Module) + +> **命名空间** `BaseGames.Animation` +> **程序集** `BaseGames.Player` + `BaseGames.Enemy`(各自引用,共享接口) +> **依赖** `Animancer Pro`(ClipTransition · Events API)· `BaseGames.Core.Events` · `BaseGames.Combat`(HitBox · HurtBox) +> **Design 来源** [20_AnimationEventSystem](../Design/20_AnimationEventSystem.md) + +--- + +## 目录 + +1. [模块职责](#1-模块职责) +2. [AnimationEventType 枚举](#2-animationeventtype-枚举) +3. [AnimationEventConfigSO](#3-animationeventconfigso) +4. [Animancer 事件注册模式](#4-animancer-事件注册模式) +5. [PlayerAnimationEvents](#5-playeranimationevents) +6. [EnemyAnimationEvents](#6-enemyanimationevents) +7. [AnimationEventBinder](#7-animationeventbinder) +8. [脚步系统](#8-脚步系统) +9. [可取消帧窗口(Cancel Window)](#9-可取消帧窗口cancel-window) +10. [编辑器工具:EventConfigEditor](#10-编辑器工具eventconfigeditor) + +--- + +## 1. 模块职责 + +``` +动画事件模块职责: + ├─ AnimationEventType → 统一事件类型枚举(替代字符串 AnimationEvent) + ├─ AnimationEventConfigSO → 每个 ClipTransition 的事件时机配置(给设计师调整) + ├─ AnimationEventBinder → 读取 Config,向 Animancer ClipTransition 注册回调 + ├─ PlayerAnimationEvents → 玩家侧统一派发器(HitBox/HurtBox/音效/特效 的单一入口) + └─ EnemyAnimationEvents → 敌人侧统一派发器 +``` + +**核心原则**: +- **不使用** Unity 传统 `AnimationEvent`(字符串反射调用) +- **使用** Animancer `ClipTransition.Events.SetCallback(normalizedTime, callback)` — 类型安全 +- 所有时机值由 `AnimationEventConfigSO` 管理,设计师可调整而无需修改代码 + +--- + +## 2. AnimationEventType 枚举 + +```csharp +namespace BaseGames.Animation +{ + public enum AnimationEventType + { + // 战斗 - HitBox + EnableHitBox, // 开启 HitBox(攻击帧开始) + DisableHitBox, // 关闭 HitBox(攻击帧结束) + AttackImpact, // 攻击命中反馈(音效/特效时机) + + // 战斗 - 弹反窗口(由 ParrySystem 监听) + EnableParryWindow, // 开启可弹反时间窗(ParrySystem.OpenWindow()) + DisableParryWindow, // 关闭可弹反时间窗(ParrySystem.CloseWindow()) + + // 玩家 + EnableIFrame, // 开启无敌帧(翻滚/受击恢复) + DisableIFrame, // 关闭无敌帧 + Footstep, // 脚步落地(替代旧 FootstepLeft/Right,由 data 区分面) + LandImpact, // 落地震动(落地音效/特效) + JumpLaunch, // 起跳(跳跃音效/特效) + EnableInteract, // 动画帧触发互动(如 NPC 握手时机) + + // 反馈派发 + TriggerFeedback, // 触发 MMF_Player 预设(data = Feedback 名称) + PlaySFX, // 播放音效(data = AudioEventSO Address key) + + // 敌人 + SpawnProjectile, // 生成弹幕(替代旧 SummonProjectile) + RoarStart, // 怒吼开始(AI 警觉) + RoarEnd, // 怒吼结束 + PhaseTwoStart, // 二阶段开始(Boss 过渡) + + // 通用 + CancelWindowOpen, // 可取消帧窗口开始 + CancelWindowClose, // 可取消帧窗口结束 + StateTransition, // 动画驱动状态机转移(data = 目标状态名) + AnimationComplete, // 动画播完(一次性动画通知) + } +} +``` + +--- + +## 3. AnimationEventConfigSO + +```csharp +namespace BaseGames.Animation +{ + [CreateAssetMenu(menuName = "Animation/EventConfig")] + public class AnimationEventConfigSO : ScriptableObject + { + [Serializable] + public struct EventEntry + { + public AnimationEventType eventType; + [Range(0f, 1f)] + public float normalizedTime; // 触发帧在整个动画中的归一化位置 + [Tooltip("附加数据(可空):如 HitBox 编号、音频 key 等")] + public string data; + } + + [Header("绑定的动画片段(类型安全引用,替代旧 clipName 字符串)")] + public AnimationClip targetClip; // 用于 GetNormalizedTime 查询 + + [Header("事件时机列表")] + public EventEntry[] events; + + /// 按时机顺序排序,方便 Binder 批量注册。 + public IEnumerable SortedEvents => + events.OrderBy(e => e.normalizedTime); + + /// 查询指定事件类型的触发帧(工具/编辑器用)。 + public float GetNormalizedTime(AnimationEventType eventType) + { + foreach (var e in events) + if (e.eventType == eventType) return e.normalizedTime; + return -1f; // 未找到 + } + } +} +``` + +--- + +## 4. Animancer 事件注册模式 + +```csharp +// AnimationEventBinder.Bind(ClipTransition, AnimationEventConfigSO, IAnimationEventHandler) +// 将 Config 中的事件条目全部注册到指定 ClipTransition 上。 + +namespace BaseGames.Animation +{ + public static class AnimationEventBinder + { + /// + /// 将 SO 配置的所有事件绑定到 ClipTransition。 + /// 由 PlayerAnimationEvents / EnemyAnimationEvents 在 Awake 时调用。 + /// + public static void Bind( + ClipTransition clip, + AnimationEventConfigSO config, + IAnimationEventHandler receiver) + { + if (config == null) return; + foreach (var entry in config.SortedEvents) + { + var captured = entry; // 闭包捕获 + clip.Events.SetCallback(captured.normalizedTime, () => + receiver.HandleEvent(captured.eventType, captured.data)); + } + } + } + + /// 实现此接口的 MonoBehaviour 可接收动画事件回调。 + public interface IAnimationEventHandler + { + void HandleEvent(AnimationEventType type, string payload); + } +} +``` + +--- + +## 5. PlayerAnimationEvents + +```csharp +namespace BaseGames.Animation +{ + /// + /// 挂在 PlayerController 上(或其 [Animation] 子节点)。 + /// 是玩家所有动画事件的唯一派发入口。 + /// + public class PlayerAnimationEvents : MonoBehaviour, IAnimationEventHandler + { + [Header("战斗组件")] + [SerializeField] HitBox[] _hitBoxes; // 玩家身上所有 HitBox + [SerializeField] HurtBox _hurtBox; + + [Header("能力组件")] + [SerializeField] PlayerStats _playerStats; // 用于开关无敌帧 + [SerializeField] PlayerMovement _mover; // ⚠️ 类型为 PlayerMovement(架构 05_PlayerModule §3) + [SerializeField] ParrySystem _parrySystem; // 弹反窗口控制(20_ShieldModule §1) + + [Header("特效/音效")] + [SerializeField] IFeedbackPlayer _feedback; // 通过 GetComponent 注入 + + [Header("事件配置(与 ClipTransition 一一对应)")] + [SerializeField] EventBinding[] _bindings; + + [Serializable] + struct EventBinding + { + public ClipTransition clip; + public AnimationEventConfigSO config; + } + + void Awake() + { + _feedback = GetComponentInParent(); + foreach (var b in _bindings) + AnimationEventBinder.Bind(b.clip, b.config, this); + } + + public void HandleEvent(AnimationEventType type, string payload) + { + switch (type) + { + case AnimationEventType.EnableHitBox: + EnableHitBoxById(payload); + break; + + case AnimationEventType.DisableHitBox: + DisableHitBoxById(payload); + break; + + case AnimationEventType.AttackImpact: + _feedback?.PlayAttackWhoosh(); + break; + + case AnimationEventType.EnableIFrame: + _hurtBox.SetInvincible(true); + break; + + case AnimationEventType.DisableIFrame: + _hurtBox.SetInvincible(false); + break; + + case AnimationEventType.Footstep: + FootstepSystem.Play(_mover.CurrentSurface, transform.position); + break; + + case AnimationEventType.LandImpact: + _feedback?.PlayLandImpact(); + break; + + case AnimationEventType.JumpLaunch: + _feedback?.PlayJumpLaunch(); + break; + + case AnimationEventType.EnableParryWindow: + _parrySystem?.OpenWindow(); + break; + + case AnimationEventType.DisableParryWindow: + _parrySystem?.CloseWindow(); + break; + + case AnimationEventType.CancelWindowOpen: + _mover.SetCancelWindowOpen(true); + break; + + case AnimationEventType.CancelWindowClose: + _mover.SetCancelWindowOpen(false); + break; + + case AnimationEventType.TriggerFeedback: + _feedback?.TriggerPreset(payload); // IFeedbackPlayer.TriggerPreset(见 18_VFXFeedbackModule §2) + break; + + case AnimationEventType.PlaySFX: + // payload = AudioEventSO Address key(IFeedbackPlayer.PlaySFXById 内部查表后播放) + _feedback?.PlaySFXById(payload); // IFeedbackPlayer.PlaySFXById(见 18_VFXFeedbackModule §2) + break; + } + } + + // ── 辅助 ────────────────────────────────────────────────── + void EnableHitBoxById(string id) + { + foreach (var hb in _hitBoxes) + if (hb.Id == id || string.IsNullOrEmpty(id)) hb.Activate(); // ⚠️ HitBox.Activate(),无参数(架构 06 §4 参数均可空) + } + + void DisableHitBoxById(string id) + { + foreach (var hb in _hitBoxes) + if (hb.Id == id || string.IsNullOrEmpty(id)) hb.Deactivate(); // ⚠️ HitBox.Deactivate()(架构 06 §4) + } + } +} +``` + +--- + +## 6. EnemyAnimationEvents + +```csharp +namespace BaseGames.Animation +{ + /// + /// 挂在 EnemyBase 上(或其 [Animation] 子节点)。 + /// 与 PlayerAnimationEvents 结构相同,处理敌人侧事件。 + /// + public class EnemyAnimationEvents : MonoBehaviour, IAnimationEventHandler + { + [SerializeField] HitBox[] _hitBoxes; + [SerializeField] EnemyFeedback _feedback; + [SerializeField] EnemyBase _enemy; + + [SerializeField] EventBinding[] _bindings; + + [Serializable] + struct EventBinding + { + public ClipTransition clip; + public AnimationEventConfigSO config; + } + + void Awake() + { + foreach (var b in _bindings) + AnimationEventBinder.Bind(b.clip, b.config, this); + } + + public void HandleEvent(AnimationEventType type, string payload) + { + switch (type) + { + case AnimationEventType.EnableHitBox: + foreach (var hb in _hitBoxes) + if (hb.Id == payload || string.IsNullOrEmpty(payload)) hb.Activate(); // ⚠️ HitBox.Activate()(架构 06 §4) + break; + + case AnimationEventType.DisableHitBox: + foreach (var hb in _hitBoxes) + if (hb.Id == payload || string.IsNullOrEmpty(payload)) hb.Deactivate(); // ⚠️ HitBox.Deactivate()(架构 06 §4) + break; + + case AnimationEventType.SpawnProjectile: + _enemy.SpawnProjectile(payload); + break; + + case AnimationEventType.RoarStart: + case AnimationEventType.RoarEnd: + // 通知 AI Blackboard + _enemy.Blackboard.SetVariableValue("IsRoaring", + type == AnimationEventType.RoarStart); + break; + + case AnimationEventType.PhaseTwoStart: + _enemy.TriggerPhaseTwo(); + break; + + case AnimationEventType.AnimationComplete: + _enemy.OnAnimationComplete(payload); + break; + } + } + } +} +``` + +--- + +## 7. AnimationEventBinder + +> 已在 §4 完整定义(`static Bind(ClipTransition, Config, Receiver)`)。 + +**使用示例(PlayerAnimationEvents.Awake 之外的独立绑定)**: + +```csharp +// 在需要运行时动态替换 Config 的场合 +AnimationEventBinder.Bind(_slashClip, _hardModeConfig, this); +``` + +--- + +## 8. 脚步系统 + +```csharp +namespace BaseGames.Animation +{ + /// + /// 静态工具类,根据地面材质播放对应的脚步音效/特效。 + /// + public static class FootstepSystem + { + static FootstepCatalogSO _catalog; + + // 禁止使用 Resources.Load。 + // 在游戏启动时由 BootstrapLoader(或 PersistentScene)调用 InitAsync 预加载。 + public static async UniTask InitAsync() + { + _catalog = await Addressables + .LoadAssetAsync(AddressKeys.SO_FootstepCatalog).Task; + } + + public static void Play(SurfaceType surface, Vector3 position) + { + var entry = _catalog.GetEntry(surface); + if (entry == null) return; + // 播放音效(通过 AudioManager)——使用 AudioClip 引用,API 与 11_AudioModule §2 一致 + AudioManager.Instance.PlaySFXAtPosition(entry.audioClip, position); + // 播放粒子(通过 VFXPool) + if (entry.dustParticlePrefab.RuntimeKeyIsValid()) + VFXPool.Instance.Play(entry.dustParticlePrefab, position); + } + } + + // FootstepCatalogSO 与 FootstepEntry 见 Assets/ScriptableObjects/Audio/FootstepCatalog.asset + [CreateAssetMenu(menuName = "Audio/FootstepCatalog")] + public class FootstepCatalogSO : ScriptableObject + { + [Serializable] + public struct FootstepEntry + { + public SurfaceType surface; + public AudioClip audioClip; // ⚠️ AudioClip 引用,非 string key(11_AudioModule §2:PlaySFXAtPosition(AudioClip, Vector2)) + public AssetReferenceGameObject dustParticlePrefab; + } + + [SerializeField] FootstepEntry[] _entries; + + public FootstepEntry? GetEntry(SurfaceType surface) + { + foreach (var e in _entries) + if (e.surface == surface) return e; + return null; + } + } + + public enum SurfaceType { Stone, Wood, Dirt, Water, Metal, Grass } +} +``` + +--- + +## 9. 可取消帧窗口(Cancel Window) + +```csharp +// PlayerMovement.cs 中的 Cancel Window 字段(见架构 05_PlayerModule §3) +bool _cancelWindowOpen = false; +public bool CancelWindowOpen => _cancelWindowOpen; +public void SetCancelWindowOpen(bool open) => _cancelWindowOpen = open; + +// 玩家 FSM:在 AttackState.OnUpdate() 末尾检查 +public override PlayerStateBase GetNextState() +{ + // 只有在 CancelWindowOpen 时才接受新输入转换状态 + if (!_mover.CancelWindowOpen) return null; + if (Input.AttackPressed) return _nextAttackState; + if (Input.DashPressed) return _dashState; + if (Input.JumpPressed) return _jumpState; + return null; +} +``` + +**流程**: +``` +AttackClip 播放 + ├─ NormalizedTime = 0.6 → AnimationEventType.CancelWindowOpen → PlayerMovement._cancelWindowOpen = true + ├─ 玩家可输入 → FSM 允许取消进入其他状态 + └─ NormalizedTime = 0.9 → AnimationEventType.CancelWindowClose → PlayerMover._cancelWindowOpen = false +``` + +--- + +## 10. 编辑器工具:EventConfigEditor + +> **路径**:`Assets/Editor/Animation/EventConfigEditor.cs` +> **目标用户**:动画师 / 战斗设计师(调整攻击命中帧、特效触发时机无需对照文本数值) + +### 功能特性 + +| 功能 | 说明 | +|------|------| +| **时间轴可视化** | 按 `normalizedTime` 绘制可拖拽标记点,直观感受帧时机 | +| **Clip 漂移检测** | Clip 长度与记录值偏差 > 5 帧时显示橙色警告,通知动画师同步确认 | +| **Auto-detect** | 从 `AnimationClip` 自动读取 FPS/Duration,写入 `ExpectedClipLength` | +| **事件类型着色** | 不同 `AnimationEventType` 使用不同颜色(HitBox=红, IFrame=绿, SFX=蓝)| +| **越界保护** | `normalizedTime < 0 || > 1` 时显示红色错误行 | + +### AnimationEventConfigSO 新增字段 + +```csharp +// 路径: Assets/Scripts/Animation/AnimationEventConfigSO.cs(新增字段) +[HideInInspector] public float ExpectedClipLength = -1f; // 帧数;-1=未记录;Auto-detect 写入 +``` + +### EventConfigEditor 实现 + +```csharp +// 路径: Assets/Editor/Animation/EventConfigEditor.cs +[CustomEditor(typeof(AnimationEventConfigSO))] +public class EventConfigEditor : UnityEditor.Editor +{ + private static readonly Dictionary _typeColors = new() + { + { AnimationEventType.EnableHitBox, new Color(1f, 0.3f, 0.3f) }, // 红 - 攻击激活 + { AnimationEventType.DisableHitBox, new Color(0.8f, 0.2f, 0.2f) }, + { AnimationEventType.EnableIFrame, new Color(0.3f, 0.9f, 0.3f) }, // 绿 - 无敌帧 + { AnimationEventType.DisableIFrame, new Color(0.2f, 0.7f, 0.2f) }, + { AnimationEventType.EnableParryWindow, new Color(0.9f, 0.8f, 0.1f) }, // 黄 - 弹反窗口 + { AnimationEventType.Footstep, new Color(0.7f, 0.7f, 0.7f) }, // 灰 - 音效 + { AnimationEventType.PlaySFX, new Color(0.4f, 0.7f, 1f) }, // 蓝 - 音效 + { AnimationEventType.TriggerFeedback, new Color(0.8f, 0.5f, 1f) }, // 紫 - Feel + { AnimationEventType.CancelWindowOpen, new Color(1f, 0.7f, 0.3f) }, // 橙 - 取消窗口 + }; + + public override void OnInspectorGUI() + { + var config = (AnimationEventConfigSO)target; + var prop = serializedObject; + prop.Update(); + + // ── Clip 引用 + Auto-detect ─────────────────────────────────────── + EditorGUILayout.PropertyField(prop.FindProperty("targetClip")); + + if (config.targetClip != null) + { + float currentLen = config.targetClip.length * config.targetClip.frameRate; + float expected = config.ExpectedClipLength; + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField($"Clip: {currentLen:F0}帧 / {config.targetClip.length:F3}s", + EditorStyles.miniLabel); + + if (GUILayout.Button("Auto-detect", GUILayout.Width(90))) + { + config.ExpectedClipLength = currentLen; + EditorUtility.SetDirty(config); + } + EditorGUILayout.EndHorizontal(); + + // 漂移检测:偏差 > 5 帧警告 + if (expected > 0 && Mathf.Abs(currentLen - expected) > 5f) + { + EditorGUILayout.HelpBox( + $"⚠️ Clip 长度已变更(原 {expected:F0} 帧 → 当前 {currentLen:F0} 帧)\n" + + "请检查各事件 normalizedTime 时机是否需要同步调整。", + MessageType.Warning); + } + } + + EditorGUILayout.Space(8); + + // ── 时间轴可视化 ───────────────────────────────────────────────── + EditorGUILayout.LabelField("事件时间轴", EditorStyles.boldLabel); + + // 时间轴背景条(全宽) + var timelineRect = GUILayoutUtility.GetRect(0, 24, GUILayout.ExpandWidth(true)); + EditorGUI.DrawRect(timelineRect, new Color(0.15f, 0.15f, 0.15f)); + + // 每个事件绘制一条竖线标记 + if (config.events != null) + { + foreach (var entry in config.events) + { + float t = Mathf.Clamp01(entry.normalizedTime); + float x = timelineRect.x + t * timelineRect.width; + var lineRect = new Rect(x - 1, timelineRect.y, 2, timelineRect.height); + + Color c = _typeColors.TryGetValue(entry.eventType, out var col) + ? col : Color.white; + EditorGUI.DrawRect(lineRect, c); + } + } + + EditorGUILayout.Space(4); + + // ── 事件列表(含越界红色标记) ────────────────────────────────── + var eventsProp = prop.FindProperty("events"); + EditorGUILayout.PropertyField(eventsProp, new GUIContent("事件条目"), true); + + // 遍历检测越界 + if (config.events != null) + { + foreach (var e in config.events) + { + if (e.normalizedTime < 0f || e.normalizedTime > 1f) + EditorGUILayout.HelpBox( + $"❌ [{e.eventType}] normalizedTime={e.normalizedTime:F3} 超出 [0, 1] 范围!", + MessageType.Error); + } + } + + prop.ApplyModifiedProperties(); + } +} +``` + +--- + +## Player Prefab 层级更新 + +``` +[Player] +├── PlayerController.cs +├── [Animation] ← 新增子节点 +│ ├── PlayerAnimationEvents.cs +│ │ ├── _hitBoxes: [HitBox] 引用 +│ │ ├── _hurtBox: HurtBox 引用 +│ │ └── _bindings: ClipTransition → AnimationEventConfigSO 映射 +│ └── AnimancerComponent.cs +└── [Combat] + ├── HitBox.cs(id 字段,由 AnimationEventConfig 的 data 匹配) + └── HurtBox.cs +``` diff --git a/Docs/Architecture/README.md b/Docs/Architecture/README.md new file mode 100644 index 0000000..97b992f --- /dev/null +++ b/Docs/Architecture/README.md @@ -0,0 +1,108 @@ +# Architecture · 代码框架设计文档集 + +> **作用层**:本文档集位于 `Docs/Architecture/`,是 `Docs/Design/`(游戏设计文档)与实际代码实现之间的桥梁层。 +> **读者**:程序员。描述"代码如何组织",不涉及具体剧情、关卡数值、叙事内容。 +> **输出物**:可直接作为实施计划(Sprint Backlog)的输入,每个模块文档对应一个或多个可独立实现的代码单元。 + +--- + +## 文档列表 + +| 编号 | 文档 | 覆盖内容 | 关联 Design 文档 | +|------|------|---------|----------------| +| [01](./01_ProjectStructure.md) | 项目结构与规范 | 文件夹布局、Assembly Definitions、命名规范、SO 资产路径、代码规范 | 00 | +| [02](./02_EventSystem.md) | SO 事件系统 | 所有事件频道类型、泛型基类、发布/订阅模式、全局事件频道列表 | 00 | +| [03](./03_CoreModule.md) | Core 核心模块 | GameManager、SceneLoader、ObjectPoolManager、SettingsManager | 00、11、43 | +| [04](./04_InputModule.md) | 输入模块 | InputReaderSO、InputBuffer、Action Map 定义、按键重绑定 | 01、25 | +| [05](./05_PlayerModule.md) | 玩家模块 | PlayerController、PlayerMovement、PlayerStats、PlayerCombat、FormController、FSM States | 03、05、14、21、53、54 | +| [06](./06_CombatModule.md) | 战斗模块 | DamageInfo、HitBox、HurtBox、Parry、Projectile、StatusEffects | 04、05、13、30、54 | +| [07](./07_EnemyModule.md) | 敌人模块 | EnemyBase、EnemyStats、AI Tasks、Navigation、Boss Patterns、Telegraph | 06、19、47、48 | +| [08](./08_WorldModule.md) | 世界模块 | 场景结构、RoomTransition、SavePoint、Collectible、HazardZone、WorldStateRegistry | 08、34、49 | +| [09](./09_ProgressionModule.md) | 进度模块 | AbilityGate、Equipment/Charms、Skills/Spells、Quest、Challenge | 14、17、21、37、38、39 | +| [10](./10_UIModule.md) | UI 模块 | UIManager、HUD、PauseMenu、DeathScreen、Panel 层级、UI Toolkit 规范 | 10、53_HUDSpec 参考 74 | +| [11](./11_AudioModule.md) | 音频模块 | AudioManager、BGMController、SFX Pool、AudioZone、FMOD 集成 | 12、63 | +| [12](./12_SaveModule.md) | 存档模块 | SaveData schema(C# 完整结构)、SaveManager、ISaveStorage、SaveMigrator、Checksum | 31 | +| [13](./13_AssetPoolModule.md) | 资源与对象池 | Addressables 工作流、ObjectPoolManager、预热策略、释放规范 | 43 | +| [14](./14_NarrativeModule.md) | 叙事模块 | DialogueManager、CutsceneManager、IInteractable NPC、EventChain | 15、18、34、50 | +| [15](./15_MapShopModule.md) | 地图与商店模块 | MapManager、RoomReveal、FastTravel、ShopController、ShopInventorySO | 16、28 | +| [16](./16_SupportingModules.md) | 支撑模块 | Localization、Platform Integration、Analytics、Achievement、Tutorial、Debug | 22、32、42、45、46、55 | +| [17](./17_CameraModule.md) | 摄像机模块 | CameraStateController、Cinemachine 虚拟相机、Zone-based 切换、CameraBounds | 03、26 | +| [18](./18_VFXFeedbackModule.md) | VFX 与反馈模块 | FeedbackPresetSO、IFeedbackPlayer、HitFxPool、ScreenShake、FeedbackEventChannelSO | 04、12 | +| [19](./19_DifficultyModule.md) | 难度模块 | DifficultySettingsSO、DifficultyManager、IScalable、SteelSoul 模式 | 11 | +| [20](./20_ShieldModule.md) | 护盾模块 | ShieldComponent、ShieldConfigSO、IShieldable、护盾破碎/恢复管道 | 05、13 | +| [21](./21_LiquidPuzzleModule.md) | 液体谜题模块 | LiquidSimulator、LiquidTile、LiquidTriggerZone、SwimState、HazardLiquid | 08、41 | +| [22](./22_QuestChallengeModule.md) | 任务与挑战模块 | QuestManager、QuestSO、QuestObjectiveSO、ChallengeRoom、QuestEventChannelSO | 37、38、39 | +| [23](./23_BossSkillModule.md) | Boss 技能模块 | BossSkillSO、BossSkillExecutor、SkillSequenceSO、VulnerabilityWindow、BossPhaseController | 19、47、48 | +| [24](./24_AnimEventModule.md) | 动画事件模块 | PlayerAnimationEvents、EnemyAnimationEvents、AnimEventBridge、Animancer 事件回调 | 03 | + +--- + +## 架构全景图 + +``` +┌────────────────────────────────────────────────────────────────────────┐ +│ Unity 引擎层 │ +│ Addressables │ Cinemachine │ InputSystem │ UI Toolkit │ Animancer │ +│ PathBerserker2d │ Behavior Designer │ Feel │ FMOD │ Timeline │ +└───────────────────────────┬────────────────────────────────────────────┘ + │ +┌───────────────────────────▼────────────────────────────────────────────┐ +│ BaseGames.Core(核心层) │ +│ GameManager │ SceneLoader │ ObjectPoolManager │ SettingsManager │ +│ SO 事件系统(BaseEventChannel)│ AddressKeys │ +└───────────────────────────┬────────────────────────────────────────────┘ + │ + ┌───────────────────┼───────────────────┐ + │ │ │ +┌───────▼───────┐ ┌────────▼──────┐ ┌─────────▼──────────┐ +│ Input 层 │ │ World 层 │ │ Combat 层 │ +│ InputReaderSO │ │ RoomTransition│ │ DamageInfo │ +│ InputBuffer │ │ SavePoint │ │ HitBox / HurtBox │ +└───────┬───────┘ │ Collectible │ │ Projectile │ + │ └───────────────┘ │ StatusEffectManager │ + │ └─────────┬───────────┘ + │ │ +┌───────▼──────────────────────────────────────▼──────────────┐ +│ Player 层 │ +│ PlayerController(协调器) │ +│ PlayerMovement │ PlayerStats │ PlayerCombat │ FormController │ +│ ParrySystem │ SkillManager │ WeaponManager │ SpringSystem │ +│ FSM States(Idle/Run/Jump/Dash/Attack/Hurt/Dead/...) │ +└───────────────────────────────┬──────────────────────────────┘ + │ + ┌───────────────────────┼──────────────────────┐ + │ │ │ +┌───────▼──────┐ ┌─────────▼──────┐ ┌─────────▼──────────┐ +│ Enemy 层 │ │ Progression 层│ │ Narrative 层 │ +│ EnemyBase │ │ AbilityGate │ │ DialogueManager │ +│ AI Tasks │ │ Equipment │ │ CutsceneManager │ +│ BossPatterns│ │ SkillSO │ │ EventChain │ +└──────────────┘ │ QuestManager │ └─────────────────────┘ + └────────────────┘ + │ +┌───────────────────────────────▼──────────────────────────────────┐ +│ 上层服务层 │ +│ UIManager │ AudioManager │ MapManager │ ShopController │ +│ SaveManager │ LocalizationManager │ PlatformService │ Analytics │ +└──────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 模块间通信规则(三种合法方式) + +| 方式 | 适用场景 | 示例 | +|------|---------|------| +| **SO 事件频道** | 跨模块异步通知 | `_onPlayerDied.Raise()` → AudioManager 响应 | +| **接口注入** | 同 Prefab 内组件间调用 | `PlayerController` 调用 `_movement.Move()` | +| **Inspector 序列化引用** | 同一 Prefab 层级内组件 | `[SerializeField] PlayerMovement _movement` | + +**禁止**:`FindObjectOfType`、`GetComponent` 跨 GameObject、静态单例暴露子系统引用。 + +--- + +## 版本说明 + +| 版本 | 日期 | 说明 | +|------|------|------| +| v1.0 | 2026-04 | 初版,覆盖全部核心系统 | diff --git a/Docs/Architecture_Review.md b/Docs/Architecture_Review.md new file mode 100644 index 0000000..ac9b900 --- /dev/null +++ b/Docs/Architecture_Review.md @@ -0,0 +1,378 @@ +# Architecture vs Design 全面审查报告 + +> **审查日期**:2025-01 +> **审查范围**:`Docs/Architecture/`(24 份文档)← → `Docs/Design/`(74 份文档) +> **审查方法**:人工逐节比对核心模块,重点覆盖战斗、弹反、霸体、护盾、玩家、墙壁力学 +> **结论**:`00_CoverageIndex.md` 声称"架构完整度 100%"与实际不符,存在若干**严重错误**、**内部矛盾**和**实现细节缺失** + +--- + +## 一、总体评估 + +| 维度 | 声称状态 | 实际状态 | +|------|----------|----------| +| 内容覆盖(所有 Design 文档均有对应章节) | ✅ 100% | ✅ 基本完整,极少遗漏 | +| 技术数值/枚举值准确性 | ✅ 完整 | 🔴 多处**严重错误** | +| 架构文档内部一致性 | ✅ 完整 | 🔴 存在**互相矛盾**的代码片段 | +| 与 Design 意图对齐(设计意图传达) | ✅ 完整 | 🟠 3 个系统**根本设计不同** | +| 实现细节充分度 | ✅ 完整 | 🟡 部分模块**细节不足** | + +--- + +## 二、🔴 严重错误(Critical)—— 必须修正,按此实现将产生 Bug + +--- + +### D-01 · PoiseSystem 根本设计不同 + +**位置**:`06_CombatModule.md §13` vs `Design/54_PoiseSystem.md` + +Architecture 描述的是**数值耐久条系统**,Design 定义的是**等级比较系统**——两者是完全不同的机制。 + +| 对比项 | Architecture 06 §13 | Design 54(正确版本)| +|--------|---------------------|----------------------| +| 系统类型 | 数值耐久(`int _currentPoise -= X`) | 等级比较(`(int)breakLevel >= (int)poiseLevel`)| +| 适用对象 | **仅敌人**(注释"玩家不使用霸体系统")| **玩家和敌人**均有霸体 | +| 玩家霸体 | 不存在 | `IPoiseSource` 接口,`PlayerController` 实现,攻击/技能期间激活 | +| 枚举结构 | 单一 `BreakLevel` 枚举 | **两个独立枚举**:`PoiseLevel`(承受方)和 `BreakLevel`(攻击方)| +| 时间窗口 | 无 | `PoiseWindowConfig` struct,可为每个状态/技能配置时间窗口 | +| 精细规则 | `GetPoiseBreakAmount(info)` 隐式处理 | `PoiseOverrideTableSO` — 显式配置 sourceId 对特定目标的精细规则 | + +**Architecture BreakLevel 枚举值错误**(影响伤害管线中所有使用 BreakLevel 的比较逻辑): + +```csharp +// Architecture 06 §2(错误) +public enum BreakLevel +{ + Light = 0, // 值错误 + Heavy = 1, // 值错误 + Super = 2, // 名称错误(Design 中无此值) + Unbreakable = 99, // 值错误 +} + +// Design 54(正确) +public enum BreakLevel { None=0, Light=1, Medium=2, Heavy=3, Breaker=4 } +public enum PoiseLevel { None=0, Light=1, Medium=2, Heavy=3, Unbreakable=100 } +``` + +**缺少的关键组件**: +- `IPoiseSource` 接口(`PlayerController` 实现,提供 `CurrentPoiseLevel` 和 `GetPoiseWindow()`) +- `PoiseWindowConfig` 结构体(每个动画状态/技能的霸体等级 + 起止时间窗口) +- `PoiseOverrideTableSO`(游戏资产,细粒度控制特定来源 vs 特定目标的打断规则) +- `DamageSourceSO` 中的 `BreakLevel` 字段应对应正确的枚举值范围 + +--- + +### D-02 · ParryConfigSO 数值与字段全部错误 + +**位置**:`06_CombatModule.md §9` vs `Design/05_ParrySystem.md §9` + +```csharp +// Architecture 06 §9(错误) +public class ParryConfigSO : ScriptableObject +{ + public float ParryWindowDuration = 0.4f; // ❌ 应为 WindowDuration = 0.28s + public float PerfectParryWindow = 0.1f; // ❌ 字段名不符,且设计无此独立字段 + public float ParryCooldown = 0.3f; // ⚠️ 设计未定义此字段 + public int SoulPowerOnParry = 20; // ❌ 应为 SoulGainOnParry = 33 + public int SoulPowerOnPerfect = 40; // ❌ 应为 +50(Perfect 额外奖励) + public float PerfectParryCounterDmg = 1.5f; // ❌ 应为 ParryCounterMultiplier = 3.0 + // ❌ 缺少以下字段: + // StartupDuration = 0.05f 弹反启动前摇 + // EndlagDuration = 0.10f 弹反后摇 + // CounterWindowDuration = 0.5f 弹反成功后的反击窗口 + // BulletTimeScale = 0.25f 成功弹反时的子弹时间倍率 + // BulletTimeDuration = 0.2f 子弹时间持续 + // StaggerDuration = 0.8f 被弹反敌人的硬直时长 +} +``` + +| 字段 | Architecture | Design(正确值)| +|------|-------------|-----------------| +| 弹反窗口 | 0.4f | **0.28s** | +| 普通弹反灵力 | 20 | **33** | +| 完美弹反灵力 | 40 | **+50**(累计 83)| +| 完美弹反伤害倍率 | 1.5× | **3.0×** | +| 启动前摇 | 缺失 | **0.05s** | +| 后摇 | 缺失 | **0.10s** | +| 反击窗口 | 缺失 | **0.5s** | +| 子弹时间倍率 | 缺失 | **0.25** | + +--- + +### D-03 · HurtBox.ReceiveDamage() 存在两个互相矛盾的版本 + +**位置**:`06_CombatModule.md §5` vs `20_ShieldModule.md §2` + +两个文档对同一方法有不同定义,行为**互相不兼容**: + +**版本 A(06_CombatModule §5)**: +```csharp +// 护盾处理后,若 Amount > 0,HurtBox 继续调用 _owner.TakeDamage +if (_shieldable != null && _shieldable.HasShield) +{ + _shieldable.AbsorbDamage(ref info); + if (info.Amount <= 0) return; // 完全吸收才退出 +} +int finalDamage = Mathf.Max(1, info.Amount - _owner.Defense); +_owner.TakeDamage(info); // 穿透伤害由 HurtBox 直接调用 TakeDamage +``` + +**版本 B(20_ShieldModule §2,标注为"修改 06_CombatModule §2 的实现")**: +```csharp +// 护盾处理后总是 return,穿透伤害通过事件传递 +if (_shieldable != null && _shieldable.HasShield) +{ + _shieldable.AbsorbDamage(ref info); + return; // 总是退出!穿透由 ShieldComponent 内部触发 _onDamagePassedThrough 事件 +} +_damageable?.TakeDamage(info); // 无护盾时才直接调用 +``` + +**冲突后果**:若使用版本 A,当护盾未完全吸收时,HurtBox 直接调用 `TakeDamage`,同时 `ShieldComponent.AbsorbDamage` 也触发 `_onDamagePassedThrough` 事件通知 `PlayerStats`——**玩家受到双倍穿透伤害**。 + +版本 B(ShieldModule 提供)才是正确的"护盾总线"设计,版本 A 需要移除护盾后的穿透处理逻辑。 + +**附加差异**:版本 A 有无敌帧检查,版本 B 没有;版本 B 有 `if (!_isActive) return;` 保护,版本 A 没有。 + +--- + +## 三、🟠 重要问题(High)—— 实现时需要大量补充或会导致功能不完整 + +--- + +### D-04 · ParrySystem 缺少完整状态机 + +**位置**:`06_CombatModule.md §8` vs `Design/05_ParrySystem.md` + +Architecture 的 `ParrySystem` 仅有一个 `bool _isParrying` + 单计时器,Design 定义了**5 阶段状态机**: + +``` +Design 05 正确状态机: +Inactive → Startup(0.05s) → Active(0.28s) → ParrySuccess → CounterWindow(0.5s) → Inactive + +Architecture 06 实现: +_isParrying = true/false + _parryWindowTimer(单一计时器,无阶段区分) +``` + +缺少的阶段及行为: +- **Startup(前摇)**:0.05s,期间无法弹反但玩家进入弹反动画,给予视觉反馈 +- **EndLag(后摇)**:弹反结束后 0.1s,防止立即连续弹反 +- **CounterWindow(反击窗口)**:弹反成功后 0.5s,玩家可使用强化攻击(×3 倍率) +- `_isParrying > _config.PerfectParryWindow` 的"完美弹反"判定逻辑依赖 Startup 计时,但 Architecture 未建模 + +--- + +### D-05 · HandleSuccessfulParry() 方法不存在 + +**位置**:`20_ShieldModule.md §8` 引用 vs `06_CombatModule.md §8` + +`20_ShieldModule.md §8 弹反集成` 第 311 行写道: +> `ParrySystem.HandleSuccessfulParry()` 末尾调用:`shield.OnParrySuccess();` + +但 `06_CombatModule.md §8 ParrySystem` 中,该类只有: +- `TryActivateParry()` +- `TryParryDamage(DamageInfo info)` +- `ApplyPerfectParryEffect(DamageInfo info)` +- `EndParry(bool success)` + +**`HandleSuccessfulParry()` 方法在架构中未定义**,两个文档引用的不是同一个 API。 + +同时,`ShieldComponent.OnParrySuccess()` 的调用路径也有两个版本: +- `20_ShieldModule §6 表格`:"弹反成功 | `ParrySystem.OnParrySuccess`(SO 事件)→ `ShieldComponent.OnParrySuccess()`" +- `20_ShieldModule §8 代码`:`ParrySystem.HandleSuccessfulParry()` 内直接 `TryGetComponent()` 调用 + +两种集成方式并存,需要统一。 + +--- + +### D-06 · OnParrySuccess 事件频道类型错误 + +**位置**:`06_CombatModule.md §8` vs `Design/05_ParrySystem.md §10` + +```csharp +// Architecture 06 §8(错误) +[SerializeField] private VoidEventChannelSO _onParrySuccess; +// 仅广播"发生了弹反",无附加数据 + +// Design 05 §10(正确) +// OnParrySuccess 应为 DamageInfoEventChannelSO +// 携带 DamageInfo payload,下游系统根据 info 计算反击伤害量、特效强度等 +``` + +`VoidEventChannelSO` 不携带 `DamageInfo`,导致: +1. `CounterWindow` 期间的反击伤害无法基于原始攻击力计算(×3 倍率) +2. `ParryableProjectile.HandleParry(ParryInfo parry)` 签名中的 `ParryInfo` 结构在其他地方未定义 + +--- + +### D-07 · HurtBox 流程图声称有霸体检查但代码没有实现 + +**位置**:`06_CombatModule.md §6 伤害流水线`(流程图)vs §5 HurtBox 代码 + +`§6` 流程图文字: +``` +→ HurtBox.ReceiveDamage(info) + → 检查无敌帧(IgnoreIFrame flag) + → 检查霸体(BreakLevel vs Poise) ← 流程图列出此步骤 + → 计算 FinalDamage = RawDamage - Defense(最低 1) +``` + +但 `§5` 的 `HurtBox.ReceiveDamage()` 代码**完全没有霸体检查逻辑**,直接从无敌帧检查跳到护盾检查。 + +按 Design 54,霸体检查(PoiseLevel vs BreakLevel)应该在 HurtBox 中完成,而不是在 `EnemyBase.TakeDamage()` 内部。 + +--- + +## 四、🟡 中等问题(Medium)—— 存在缺失或不清晰,实现时需补充 + +--- + +### D-08 · 墙壁力学实现细节严重不足 + +**位置**:`05_PlayerModule.md §3 + §12 FSM 表格` vs `Design/26_WallMechanicsSystem.md` + +Architecture 在 FSM 表格中列出了 `WallSlideState`、`WallJumpState`,但**没有任何详细实现描述**。 + +| 功能 | Architecture | Design 26(要求实现)| +|------|-------------|---------------------| +| 墙面检测 | §3:每侧**单射线**(`CheckWalls()`) | **双射线**(TopRay + BottomRay),防止卡角 | +| 墙壁抓取 | 未提及 | `WallGrab` 机制——碰墙后自动抓取,**不需要持续按键** | +| 高度记录 | 未提及 | `wallGrabY` 记录抓取时 Y 坐标,防止无限蹬墙高度增益 | +| 跳墙类型 | 未说明 | 两种:**背墙跳**(同方向弹出)和**对墙跳**(反方向飞离),有不同速度向量 | +| 专用组件 | 无 | `PlayerWallDetector` 组件(独立,保持 PlayerMovement 干净)| +| 配置 SO | §15 中有 `WallSlideSpeed`、`WallJumpForce` 等 | 应独立为 `WallMechanicsConfigSO` | + +`WallSlideState` 和 `WallJumpState` 的 `OnStateEnter`、`OnStateUpdate`、`OnStateExit` 实现**完全缺失**。 + +--- + +### D-09 · ParryableProjectile 订阅机制未说明清楚 + +**位置**:`06_CombatModule.md §7` + +代码中出现两种订阅机制: +- `ParrySystem.OnParrySuccess += HandleParry`(C# 静态事件或实例委托) +- `ParrySystem` 类中 `_onParrySuccess` 是 `VoidEventChannelSO`(ScriptableObject 事件频道) + +架构文档没有说明 `ParrySystem.OnParrySuccess` 是一个 C# 事件而非 SO 频道,且与 `_onParrySuccess` 字段的关系未交代。`HandleParry(ParryInfo parry)` 的 `ParryInfo` 结构体在整个架构文档中均未定义。 + +--- + +### D-10 · DamageInfo 与 Design 定义不完全对齐 + +**位置**:`06_CombatModule.md §1` vs `Design/04_CombatSystem.md §2` + +| 对比项 | Architecture | Design | +|--------|-------------|--------| +| 结构特性 | `struct`,有可变 `Amount` 字段 | "**只读值类型**,不可修改" | +| 中间值字段 | 添加了 `Amount`(流水线中间量)| 无 `Amount`,只有 `RawDamage` / `FinalDamage` | +| `SkillId` 字段 | 有 | 无(Design 版本较简洁)| + +Architecture 的版本**更详细**(Builder 模式、`Amount` 流水线字段、`SkillId`),技术上是对 Design 的合理扩展,但与 Design 声称的"不可修改"矛盾。需要明确说明这是架构层面的有意设计决策。 + +--- + +## 五、🔵 轻微问题(Minor)—— 不影响实现正确性,但影响文档准确性 + +--- + +### D-11 · 覆盖率索引节号标注错误 + +**位置**:`00_CoverageIndex.md` 中关于 `16_SupportingModules` 的引用 + +| 覆盖索引声称 | 实际节号(`16_SupportingModules.md`)| +|-------------|--------------------------------------| +| §7 = AnalyticsManager | **错误** — §7 是"支撑事件频道清单" | +| §8 = SpeedrunTimer | **错误** — §8 是 AnalyticsManager | +| — | §9 = SpeedrunTimer(索引中未提及)| + +--- + +### D-12 · ShieldComponent.AbsorbDamage 签名与 Design 不同 + +**位置**:`20_ShieldModule.md §5 IShieldable` vs `Design/30_ShieldMechanicsSystem.md` + +- **Architecture**:`void AbsorbDamage(ref DamageInfo info)`(通过 ref 修改 Amount,穿透走事件总线) +- **Design**:返回 `int`(穿透量),由调用方处理 + +Architecture 版本是更符合 C# 规范的架构设计,但应在文档中注明这是对 Design 的有意修改,而非与 Design 保持一致。 + +--- + +## 六、✅ 经人工核实正确的内容 + +以下内容经过手动比对,与对应 Design 文档基本一致: + +| 架构文档 | 核实内容 | +|----------|----------| +| `07_EnemyModule.md §14` | LootSystem:`LootTableSO`、`LootResolver`、`LootPickup` 均完整定义 | +| `09_ProgressionModule.md §2` | `AbilityGate` 系统存在且逻辑完整 | +| `09_ProgressionModule.md §7.5` | `ToolSlotManager`、`ToolHUD` 存在 | +| `14_NarrativeModule.md §5-7` | `EventChainSO`、`EventChainManager`、`CutsceneSO`、`CutsceneTrigger` 均完整 | +| `16_SupportingModules.md §4` | `DebugCheatSystem`、`DebugCheatOverlay` 均存在 | +| `16_SupportingModules.md §8-9` | `AnalyticsManager`、`SpeedrunTimer` 均存在 | +| `20_ShieldModule.md §1-9` | 整体架构完整(IShieldable、ShieldComponent、ShieldConfigSO、SaveData 集成)| +| `21_LiquidPuzzleModule.md` | LiquidZone/SwimState、PuzzleSwitch/PuzzleReceiver/PuzzleWire、TutorialManager 均完整 | +| `06_CombatModule.md §3` | `DamageSourceSO` 结构完整,含 `sourceId`、`skillId`、`ComboWindowDuration` | +| `06_CombatModule.md §4` | `HitBox` 寄宿规则(武器/技能 Prefab 子节点)设计合理,与 Design 一致 | +| `06_CombatModule.md §14` | `IBreakable`/`BreakConditionSO` 机关交互系统设计完整 | + +--- + +## 七、未能全面核实的文档 + +以下架构文档在本次审查中未进行深度手动比对,结论依赖 `00_CoverageIndex.md` 的自评: + +| 架构文档 | 对应 Design 文档 | 风险评估 | +|----------|-----------------|---------| +| `08_WorldModule.md` | Design 08, 10, 17, 27, 29, 32, 34, 37, 42-44, 46, 48, 50, 52(多达 14 份) | ⚠️ 范围最广,建议优先补充核实 | +| `10_UIModule.md` | Design 11, 21-25, 33, 53, 57, 70 | ⚠️ UI 相关 Design 较多,节号/字段有错误风险 | +| `11_AudioModule.md` | Design 12_AudioSystem | 🟢 FMOD 集成逻辑相对独立,风险较低 | +| `12_SaveModule.md` | Design 31_SaveDataSchema_Unified | ⚠️ SaveMigrator 细节值得核实 | +| `17_CameraModule.md` | Design 02_CameraSystem | 🟢 Cinemachine 配置,风险较低 | +| `18_VFXFeedbackModule.md` | Design 07_FeedbackSystem, 41_VFXArchitecture | ⚠️ Feel/MoreMountains 集成,参数可能有出入 | +| `22_QuestChallengeModule.md` | Design 38_QuestSystem, 39_ChallengeRoomSystem | ⚠️ 建议核实 | +| `23_BossSkillModule.md` | Design 19_BossPatternLibrary, 47_BossSkillSystem | ⚠️ Boss 技能系统复杂,建议核实 | +| `24_AnimEventModule.md` | Design 20_AnimationEventSystem | 🟢 事件名称列表性质,风险较低 | + +--- + +## 八、修正优先级与行动计划 + +### P0(立即修正,影响一切基于此的实现) + +1. **修正 `06_CombatModule.md §2 BreakLevel` 枚举**:按 Design 54 改为 `{None=0, Light=1, Medium=2, Heavy=3, Breaker=4}`,并新增独立的 `PoiseLevel {None=0, Light=1, Medium=2, Heavy=3, Unbreakable=100}` 枚举 +2. **重写 `06_CombatModule.md §13 PoiseSystem`**:按 Design 54 改为等级比较系统,覆盖玩家和敌人,新增 `IPoiseSource`、`PoiseWindowConfig`、`PoiseOverrideTableSO` +3. **统一 `HurtBox.ReceiveDamage()` 版本**:确定以 `20_ShieldModule §2` 版本为准(护盾命中总 return,穿透走事件),删除 `06_CombatModule §5` 中护盾后的直接 TakeDamage 路径 + +### P1(高优先级修正,影响弹反/战斗核心功能) + +4. **修正 `06_CombatModule.md §9 ParryConfigSO`**:更新所有数值(窗口 0.28s,灵力 33/+50,反击倍率 3.0),添加 Startup/EndLag/CounterWindow/BulletTime 字段 +5. **扩展 `06_CombatModule.md §8 ParrySystem`**:添加 5 阶段状态机(Startup→Active→ParrySuccess→CounterWindow→Inactive),定义 `HandleSuccessfulParry()` 方法或统一为 `TryParryDamage()` 路径 +6. **修正 `_onParrySuccess` 事件类型**:从 `VoidEventChannelSO` 改为 `DamageInfoEventChannelSO` +7. **修正 `20_ShieldModule.md §8`**:将 `HandleSuccessfulParry()` 改为架构中实际存在的方法名 + +### P2(中优先级,实现时需补充) + +8. **补充 `05_PlayerModule.md` 墙壁力学实现细节**:添加 `WallSlideState`/`WallJumpState` 的详细实现,双射线检测,`WallGrab` 机制,`wallGrabY` 高度记录,两种跳墙方式,`PlayerWallDetector` 组件 +9. **在 `06_CombatModule.md §5 HurtBox` 代码中补充霸体检查逻辑**(使其与 §6 流程图一致) +10. **定义 `ParryInfo` 结构体**(供 `ParryableProjectile.HandleParry` 使用) + +### P3(轻微,不影响实现) + +11. **修正 `00_CoverageIndex.md` 节号**:`§7` 为事件频道清单,`§8` 为 AnalyticsManager,`§9` 为 SpeedrunTimer +12. **在架构文档中注明** `DamageInfo.Amount` 字段和 `AbsorbDamage(ref DamageInfo)` 签名是对 Design 的有意架构决策(而非错误) + +--- + +## 九、审查结论 + +`Docs/Architecture/` 在**覆盖广度**上基本达到 Design 文档的全部技术范围,但**"架构完整度 100%"的自评不符合实际**: + +- **战斗核心三角**(HurtBox 伤害流水线 × 弹反系统 × 霸体系统)存在**多处相互矛盾或错误**的定义 +- **PoiseSystem** 是最严重的设计偏差——Architecture 和 Design 是两套根本不同的机制,直接影响玩家霸体、攻击打断、Boss 超甲等核心手感 +- **ParryConfigSO** 的所有数值均错误,弹反手感将完全不符合设计意图 +- **HurtBox 双版本矛盾**是最危险的隐患——如不统一,护盾命中将产生双倍伤害 Bug + +建议在正式开始实现战斗模块之前,完成 P0 和 P1 级别的修正。 diff --git a/Docs/Design/00_Overview.md b/Docs/Design/00_Overview.md new file mode 100644 index 0000000..7af41b9 --- /dev/null +++ b/Docs/Design/00_Overview.md @@ -0,0 +1,656 @@ +# 00 · 总览与架构原则 + +> **所属文档集** [← 返回索引](./README.md) +> **关联文档** 全部子文档均以本文规则为基准 + +--- + +## 目录 + +1. [游戏定位](#1-游戏定位) +2. [核心设计哲学](#2-核心设计哲学) +3. [命名空间规范](#3-命名空间规范) +4. [程序集定义(Assembly Definitions)](#4-程序集定义) +5. [系统依赖图](#5-系统依赖图) +6. [零耦合通信:ScriptableObject 事件频道](#6-零耦合通信scriptableobject-事件频道) +7. [数据驱动:ScriptableObject 配置资产](#7-数据驱动scriptableobject-配置资产) +8. [帧执行顺序](#8-帧执行顺序) +9. [项目目录结构](#9-项目目录结构) +10. [插件职责边界](#10-插件职责边界) +11. [功能优先级总表](#11-功能优先级总表) + +--- + +## 1. 游戏定位 + +| 项目 | 内容 | +|------|------| +| **类型** | 2D 横板像素风类银河恶魔城 | +| **参考** | Hollow Knight: Silksong 核心功能集 | +| **新增机制** | 弹反系统(Parry)| +| **引擎** | Unity 2022.3 LTS | +| **渲染管线** | Universal Render Pipeline (URP) + 2D Renderer | +| **输入** | Unity Input System (New) | +| **镜头** | Cinemachine 3 | +| **像素渲染** | Pixel Perfect Camera (com.unity.2d.pixel-perfect) | + +--- + +## 2. 核心设计哲学 + +### 2.1 零耦合原则 + +系统间**不持有彼此的直接引用**,通过以下三种机制通信: + +``` +┌──────────────┐ ScriptableObject 事件频道 ┌──────────────┐ +│ 系统 A │ ──────────────────────────────────► │ 系统 B │ +│ (发送方) │ 触发 Channel.Raise(payload) │ (监听方) │ +└──────────────┘ └──────────────┘ + +┌──────────────┐ MMEventManager 广播 ┌──────────────┐ +│ 系统 A │ ──────────────────────────────────► │ 系统 C │ +│ (触发方) │ TriggerEvent(struct event) │ (任意监听) │ +└──────────────┘ └──────────────┘ + +┌──────────────┐ UnityEvent / C# Action ┌──────────────┐ +│ 系统 A │ ──────────────────────────────────► │ 同 GO 组件 │ +│ (持有方) │ Inspector 中绑定,限同一 Prefab │ (本地回调) │ +└──────────────┘ └──────────────┘ +``` + +**禁止的依赖方式**: +- `FindObjectOfType()` — 运行时搜索,性能差且隐藏依赖 +- `GameObject.Find()` — 同上 +- 跨系统的 `[SerializeField]` 直接引用(仅允许同一 Prefab 层级内) +- 静态全局单例持有具体系统引用(`GameManager` 仅管理生命周期,不暴露子系统) + +### 2.2 数据驱动原则 + +- 所有**可配置数值**存放在 `ScriptableObject` 资产中,不在 MonoBehaviour 中硬编码 +- 策划可在 Inspector 调整数值,无需修改代码、无需重新编译 +- 动画配置、战斗参数、敌人属性、弹反参数均为独立 SO 资产 + +### 2.3 编辑器友好原则 + +- 每个系统提供自定义 Inspector(`[CustomEditor]` + `CreateInspectorGUI()`,UI Toolkit 实现),折叠分组,带工具按钮 +- 关键运行时状态在 Inspector 中实时可见(只读显示) +- 场景中的 HitBox / HurtBox / NavLink 等用 Gizmos 可视化 +- 提供 EditorWindow 工具辅助关卡搭建(敌人配置、房间连接检查),一律使用 UI Toolkit `CreateGUI()` 实现 + +### 2.4 资源管理原则(Addressables) + +- **统一使用 Addressable Asset System**,禁止使用 `Resources/` 文件夹和 `Resources.Load()` +- 运行时动态加载资源(Prefab、Sprite、SO、Scene)一律通过 `Addressables.LoadAssetAsync` / `Addressables.InstantiateAsync` +- 场景加载通过 `Addressables.LoadSceneAsync(address, LoadSceneMode.Additive)` 而非 `SceneManager.LoadSceneAsync` +- Prefab 引用字段使用 `AssetReferenceGameObject`(或 `AssetReference`),而非裸 `GameObject` 序列化引用 +- 所有 Addressable 地址(Address)与 Label 在 `AddressKeys` 静态类中集中定义,禁止代码中出现魔法字符串 + +```csharp +// Assets/Scripts/Core/AddressKeys.cs +public static class AddressKeys +{ + // 场景 + public const string ScenePersistent = "Scene_Persistent"; + public const string SceneMainMenu = "Scene_MainMenu"; + + // 通用标签 + public const string LabelEnemy = "Enemy"; + public const string LabelPoolable = "Poolable"; + public const string LabelBGM = "BGM"; +} +``` + +- **释放规则**:`Addressables.InstantiateAsync` 产生的实例通过 `Addressables.ReleaseInstance` 释放;`LoadAssetAsync` 的 Handle 由加载方持有,场景卸载时统一 `Release` +- 对象池中的 Prefab 在游戏启动时预加载到内存,预热完成后 Handle 保留(不 Release),池销毁时统一 Release + +### 2.5 单一职责原则 + +- 每个 MonoBehaviour 只负责一件事 +- `PlayerController` 是**协调器**,不包含具体逻辑 +- 具体逻辑分散在各 State、各独立组件中 + +--- + +## 3. 命名空间规范 + +所有自定义代码均在 `BaseGames` 根命名空间下,按系统划分: + +| 命名空间 | 对应目录 | 说明 | +|---------|---------|------| +| `BaseGames.Core` | `Scripts/Core/` | 全局管理:GameManager、SaveSystem、SceneLoader | +| `BaseGames.Core.Events` | `Scripts/Core/Events/` | SO 事件频道定义 | +| `BaseGames.Input` | `Scripts/Input/` | InputReaderSO、输入缓冲 | +| `BaseGames.Camera` | `Scripts/Camera/` | 镜头状态管理、房间约束 | +| `BaseGames.Player` | `Scripts/Player/` | PlayerController、PlayerStats | +| `BaseGames.Player.States` | `Scripts/Player/States/` | 所有玩家 FSM 状态 | +| `BaseGames.Combat` | `Scripts/Combat/` | DamageInfo、HitBox、HurtBox | +| `BaseGames.Combat.StatusEffects` | `Scripts/Combat/StatusEffects/` | FireEffect、PoisonEffect、StatusEffectManager | +| `BaseGames.Parry` | `Scripts/Parry/` | ParrySystem、ParryConfigSO | +| `BaseGames.Enemies` | `Scripts/Enemies/` | EnemyBase、EnemyStats | +| `BaseGames.Enemies.AI` | `Scripts/Enemies/AI/` | BehaviorDesigner Tasks | +| `BaseGames.Enemies.Boss.Patterns` | `Scripts/Enemies/Boss/Patterns/` | AttackPatternSO、BossOrchestrator、TelegraphSystem | +| `BaseGames.Enemies.Navigation` | `Scripts/Enemies/Navigation/` | EnemyNavAgent 封装 | +| `BaseGames.Feedback` | `Scripts/Feedback/` | PlayerFeedback、EnemyFeedback、IFeedbackPlayer | +| `BaseGames.World` | `Scripts/World/` | SavePoint、RoomTransition、Collectible | +| `BaseGames.World.Map` | `Scripts/World/Map/` | MapManager、MapRoomDataSO、地图渲染 | +| `BaseGames.World.Shop` | `Scripts/World/Shop/` | ShopController、ShopItemSO、ShopInventorySO | +| `BaseGames.UI` | `Scripts/UI/` | UIManager、HUD 组件、Canvas 管理、LoadingScreenManager | +| `BaseGames.Audio` | `Scripts/Audio/` | AudioManager、BGMController、AudioZone | +| `BaseGames.Progression` | `Scripts/Progression/` | AbilityGate、ProgressLock、HP 容器升级 | +| `BaseGames.Dialogue` | `Scripts/Dialogue/` | DialogueManager、InteractableNPC、IInteractable | +| `BaseGames.Equipment` | `Scripts/Equipment/` | EquipmentManager、CharmSO、ICharmEffect | +| `BaseGames.Cutscene` | `Scripts/Cutscene/` | CutsceneManager、CutsceneTrigger、CutsceneSO | +| `BaseGames.Animation` | `Scripts/Animation/` | AnimationEventConfigSO、FootstepSystem、CancelWindow | +| `BaseGames.Spells` | `Scripts/Spells/` | SoulSpellSO、SpellCaster、SpellModifierSnapshot | +| `BaseGames.Localization` | `Scripts/Localization/` | LanguageManagerSO、LocalizationKeys、DialogueLocalizationBridge | +| `BaseGames.Tutorial` | `Scripts/Tutorial/` | ContextualHintTrigger、FirstTimeTrigger、TutorialManager、AbilityTutorialSequence | +| `BaseGames.Platform` | `Scripts/Platform/` | IPlatformService、SteamPlatformService、NullPlatformService、PlatformBootstrap | +| `BaseGames.Editor` | `Scripts/Editor/` | 编辑器扩展(Editor Only)| + +> **规则**:第三方插件代码保持其原始命名空间,不修改。 + +--- + +## 4. 程序集定义 + +通过 Assembly Definition(`.asmdef`)强制隔离依赖,避免循环引用,加速编译: + +``` +BaseGames.Core.asmdef + └── 依赖: Unity.InputSystem, MoreMountains.Feedbacks + +BaseGames.Input.asmdef + └── 依赖: Unity.InputSystem + +BaseGames.Camera.asmdef + └── 依赖: Cinemachine + +BaseGames.Player.asmdef + └── 依赖: BaseGames.Core, BaseGames.Input, BaseGames.Combat, + BaseGames.Parry, Kybernetik.Animancer + +BaseGames.Combat.asmdef + └── 依赖: BaseGames.Core + +BaseGames.Parry.asmdef + └── 依赖: BaseGames.Core, BaseGames.Combat, MoreMountains.Feedbacks + +BaseGames.Enemies.asmdef + └── 依赖: BaseGames.Core, BaseGames.Combat, + Kybernetik.Animancer, PathBerserker2d + +BaseGames.Enemies.AI.asmdef + └── 依赖: BaseGames.Enemies, BehaviorDesigner.Runtime + +BaseGames.Feedback.asmdef + └── 依赖: BaseGames.Core, MoreMountains.Feedbacks, Cinemachine + +BaseGames.World.asmdef + └── 依赖: BaseGames.Core, BaseGames.Feedback + +BaseGames.UI.asmdef + └── 依赖: BaseGames.Core, BaseGames.Combat (BossHP 需要 DamageInfo) + +BaseGames.Audio.asmdef + └── 依赖: BaseGames.Core + +BaseGames.Progression.asmdef + └── 依赖: BaseGames.Core, BaseGames.World + +BaseGames.Dialogue.asmdef + └── 依赖: BaseGames.Core, BaseGames.UI, BaseGames.Input + +BaseGames.Map.asmdef + └── 依赖: BaseGames.Core, BaseGames.World, BaseGames.UI + +BaseGames.Equipment.asmdef + └── 依赖: BaseGames.Core, BaseGames.Combat, BaseGames.Player + +BaseGames.Combat.StatusEffects.asmdef + └── 依赖: BaseGames.Core, BaseGames.Combat + +BaseGames.Cutscene.asmdef + └── 依赖: BaseGames.Core, BaseGames.UI, BaseGames.Input, + BaseGames.Dialogue, Unity.Timeline, Cinemachine + +BaseGames.Enemies.Boss.Patterns.asmdef + └── 依赖: BaseGames.Core, BaseGames.Enemies, BaseGames.Enemies.AI + +BaseGames.Animation.asmdef + └── 依赖: BaseGames.Core, BaseGames.Audio, Kybernetik.Animancer + +BaseGames.Spells.asmdef + └── 依赖: BaseGames.Core, BaseGames.Combat, BaseGames.Player + +BaseGames.Localization.asmdef + └── 依赖: BaseGames.Core, BaseGames.Dialogue, Unity.Localization + +BaseGames.Tutorial.asmdef + └── 依赖: BaseGames.Core, BaseGames.Input, BaseGames.UI, BaseGames.Player + 命名空间: BaseGames.Tutorial → Scripts/Tutorial/ + 内容: ContextualHintTrigger, FirstTimeTrigger, TutorialManager, AbilityTutorialSequence + +BaseGames.Platform.asmdef + └── 依赖: BaseGames.Core, BaseGames.Audio + 外部条件依赖: Steamworks.NET(#if STEAMWORKS_NET) + 命名空间: BaseGames.Platform → Scripts/Platform/ + 内容: IPlatformService, SteamPlatformService, NullPlatformService, PlatformBootstrap + +BaseGames.Editor.asmdef [Editor Only] + └── 依赖: 全部上述 asmdef +``` + +--- + +## 5. 系统依赖图 + +箭头方向为"依赖方 → 被依赖方",**不存在反向箭头**(禁止循环依赖): + +``` + ┌─────────────────────┐ + │ Core 核心 │ + │ GameManager(§11) │ + │ SaveSystem │ + │ ObjectPoolManager │ + │ SettingsManager │ + └──────────┬──────────┘ + ┌───────────────────┼──────────────────────────┐ + │ │ │ + ┌─────▼──────┐ ┌─────────▼──────┐ ┌────────▼───────┐ + │ Input │ │ Combat │ │ World │ + │ InputReader│ │ DamageInfo │ │ SavePoint │ + │ SO │ │ HitBox/HurtBox │ │ RoomTransition│ + └─────┬──────┘ │ Projectile(§13)│ │ Collectible │ + │ └─────────┬───────┘ └────────────────┘ + │ │ + ┌─────▼──────────┬─────────▼──────┐ + │ Player │ Parry │ + │ Controller │ System │ + │ States (FSM) │ WindowSO │ + └────────────────┴──────┬──────────┘ + │ + ┌─────────────────┼─────────────────┐ + │ │ │ + ┌─────▼───┐ ┌──────────▼──┐ ┌───────────▼───┐ + │ Camera │ │ Feedback │ │ Enemies │ + │Cinemachine│ │ Feel │ │ EnemyBase │ + │ States │ │ MMF_Player │ │ AI Tasks │ + └─────────┘ └─────────────┘ │ Navigation │ + └───────────────┘ + ↑ ↑ ↑ + ┌─────┴────┐ ┌────────┴────┐ ┌──────┴──────────┐ + │ UI │ │ Audio │ │ Progression │ + │ §10 │ │ §12 │ │ §14 │ + │ UIManager│ │AudioManager │ │ AbilityGate │ + │ HUD │ │BGMController│ │ ProgressLock │ + └──────────┘ └─────────────┘ └─────────────────┘ + ↑ + ┌──────┴──────────┐ + │ Dialogue │ + │ §15 │ + │DialogueManager │ + │InteractableNPC │ + └─────────────────┘ +``` + +--- + +## 6. 零耦合通信:ScriptableObject 事件频道 + +### 6.1 频道类型 + +所有事件频道均为 `ScriptableObject`,存放于 `Assets/ScriptableObjects/Events/`: + +| 频道类型 | 泛型参数 | 用途举例 | +|---------|---------|---------| +| `VoidEventChannelSO` | — | 玩家死亡、游戏暂停、场景加载完成 | +| `IntEventChannelSO` | `int` | HP 变化、Geo 变化、Soul 变化 | +| `FloatEventChannelSO` | `float` | 时间缩放变更 | +| `Vector2EventChannelSO` | `Vector2` | 玩家位置更新 | +| `TransformEventChannelSO` | `Transform` | 摄像机跟踪目标切换 | +| `StringEventChannelSO` | `string` | 场景名称加载请求 | +| `DamageInfoEventChannelSO` | `DamageInfo` | 命中事件广播 | +| `BoolEventChannelSO` | `bool` | Boss 战开始/结束 | + +### 6.2 关键频道实例 + +``` +Assets/ScriptableObjects/Events/ +├── Player/ +│ ├── OnPlayerDied.asset (VoidEventChannelSO) +│ ├── OnPlayerHPChanged.asset (IntEventChannelSO) +│ ├── OnPlayerSoulChanged.asset (IntEventChannelSO) +│ ├── OnPlayerGeoChanged.asset (IntEventChannelSO) +│ └── OnPlayerParrySuccess.asset (DamageInfoEventChannelSO) +│ +├── Combat/ +│ ├── OnHitConfirmed.asset (DamageInfoEventChannelSO) +│ ├── OnParryWindowOpened.asset (VoidEventChannelSO) +│ └── OnParryableProjectileParried.asset (VoidEventChannelSO) +│ +├── Camera/ +│ ├── OnRoomEntered.asset (TransformEventChannelSO) +│ └── OnBossFightToggled.asset (BoolEventChannelSO) +│ +├── World/ +│ ├── LoadScene.asset (StringEventChannelSO) +│ ├── OnSavePointActivated.asset (VoidEventChannelSO) +│ ├── OnCollectiblePickedUp.asset (StringEventChannelSO) +│ ├── OnDestructibleDestroyed.asset (StringEventChannelSO) +│ ├── OnDestructibleRespawned.asset (StringEventChannelSO) +│ └── OnMechanismTriggered.asset (StringEventChannelSO) +│ +├── Game/ +│ ├── OnGameStateChanged.asset (GameStateEventChannelSO) +│ ├── OnGamePaused.asset (BoolEventChannelSO) +│ ├── OnTimeScaleChanged.asset (FloatEventChannelSO) +│ ├── OnPlayerRespawned.asset (VoidEventChannelSO) +│ ├── OnBossDefeated.asset (StringEventChannelSO) +│ ├── OnBossPhaseChanged.asset (IntEventChannelSO) +│ ├── OnFastTravelRequested.asset (StringEventChannelSO) +│ └── OnQuitToMainMenu.asset (VoidEventChannelSO) +│ +├── Audio/ +│ └── OnRegionEntered.asset (StringEventChannelSO) +│ +├── Progression/ +│ ├── OnAbilityUnlocked.asset (StringEventChannelSO) +│ ├── OnRegionUnlocked.asset (StringEventChannelSO) +│ ├── OnMaxHPChanged.asset (IntEventChannelSO) +│ └── OnProgressLockOpened.asset (StringEventChannelSO) +│ +├── UI/ +│ ├── OnBossHPChanged.asset (IntEventChannelSO) +│ ├── OnBossNameSet.asset (StringEventChannelSO) +│ └── OnBossHPMaxSet.asset (IntEventChannelSO) +│ +└── Dialogue/ + ├── OnDialogueStarted.asset (VoidEventChannelSO) + └── OnDialogueEnded.asset (VoidEventChannelSO) +``` + +### 6.3 频道使用规范 + +**发送方**:持有频道 SO 引用,调用 `channel.Raise(payload)` — 仅需知道频道,不知道谁在监听。 + +**接收方**:持有频道 SO 引用,在 `OnEnable` 订阅 `channel.OnEventRaised`,在 `OnDisable` 取消订阅 — 仅需知道频道,不知道谁在发送。 + +--- + +## 7. 数据驱动:ScriptableObject 配置资产 + +所有可配置数据均为 SO 资产,策划直接在 Inspector 中调整: + +``` +Assets/ScriptableObjects/Config/ +├── Player/ +│ ├── PlayerMovementConfigSO.asset # 移动速度、跳跃力、冲刺参数 +│ ├── PlayerCombatConfigSO.asset # 攻击伤害、连击窗口时长 +│ ├── PlayerAnimationConfigSO.asset # 所有 ClipTransition +│ └── PlayerStatsSO.asset # 初始 HP、Soul上限、Geo +│ +├── Parry/ +│ └── ParryConfigSO.asset # 弹反窗口、子弹时间、反击参数 +│ +├── Enemies/ +│ ├── SpiderScoutStatsSO.asset +│ ├── KnightEliteStatsSO.asset +│ └── ... +│ +├── Camera/ +│ └── CameraConfigSO.asset # 偏移、跟随阻尼、镜头切换参数 +│ +└── World/ + └── GameSettingsSO.asset # 全局游戏设置 +``` + +--- + +## 8. 帧执行顺序 + +通过 `DefaultExecutionOrder` 特性保证更新顺序: + +| 顺序值 | 系统 | 说明 | +|--------|------|------| +| `-5000` | `AnimancerComponent` | Playable Graph 最先更新(Animancer 内置)| +| `-200` | `CameraStateController` | 镜头状态在物理前锁定 | +| `-100` | `InputReaderSO` 消费者 | 输入采集优先于逻辑处理 | +| `0` | `PlayerController` | FSM 状态机驱动(默认顺序)| +| `0` | BehaviorDesigner ECS SystemGroup | 敌人 AI 决策(ECS 驱动,与默认同批次)| +| `0` | `EnemyNavAgent` | PathBerserker2d 事件回调 | +| `+100` | `PlayerFeedback` / `EnemyFeedback` | 反馈在逻辑后触发 | + +**FixedUpdate 顺序**(物理帧): + +| 顺序 | 系统 | 说明 | +|------|------|------| +| 先 | `PlayerController.FixedUpdate` | 通过当前 State 设置 Rigidbody2D 速度 | +| 先 | `EnemyNavAgent.FixedUpdate` | 根据 NavAgent 事件设置敌人 Rigidbody2D 速度 | +| 后 | Unity Physics2D | 执行物理模拟 | + +--- + +## 9. 项目目录结构 + +``` +Assets/ +│ +├── Scripts/ +│ ├── Core/ +│ │ ├── Events/ # SO 事件频道基类定义 +│ │ ├── GameManager.cs +│ │ ├── SaveSystem.cs +│ │ └── SceneLoader.cs +│ │ +│ ├── Input/ +│ │ ├── InputReaderSO.cs # SO:封装 Input Actions,发布输入事件 +│ │ └── InputBuffer.cs # 输入缓冲:跳跃/攻击/弹反 +│ │ +│ ├── Camera/ +│ │ ├── CameraStateController.cs # Cinemachine 虚拟相机状态切换 +│ │ ├── RoomCameraBounds.cs # 房间约束区域(Cinemachine Confiner2D 配置) +│ │ └── CameraConfigSO.cs # 镜头参数配置 +│ │ +│ ├── Player/ +│ │ ├── PlayerController.cs # 协调器:不含业务逻辑 +│ │ ├── PlayerStats.cs # 运行时属性(监听 SO 配置) +│ │ ├── PlayerMovement.cs # 物理移动计算(Rigidbody2D) +│ │ ├── PlayerCombat.cs # HitBox 开关、连击链管理 +│ │ └── States/ +│ │ ├── PlayerStateBase.cs # 抽象基类(Animancer.FSM.StateBehaviour) +│ │ ├── PlayerIdleState.cs +│ │ ├── PlayerRunState.cs +│ │ ├── PlayerAirState.cs # 跳跃/双跳/墙跳/下落 合一 +│ │ ├── PlayerDashState.cs +│ │ ├── PlayerAttackState.cs # Layer 1 上半身攻击 +│ │ ├── PlayerParryState.cs # 弹反窗口 + 反击 +│ │ ├── PlayerHurtState.cs # 受击 + 死亡 +│ │ ├── PlayerSpringState.cs # 灵泉使用 +│ │ ├── PlayerInteractState.cs +│ │ └── PlayerSwimState.cs # P1:解锁后可用 +│ │ +│ ├── Combat/ +│ │ ├── DamageInfo.cs # 纯数据结构(struct) +│ │ ├── HitBox.cs # 攻击判定(Collider2D + AnimationEvent) +│ │ ├── HurtBox.cs # 受击区域(路由 DamageInfo 给 Owner) +│ │ ├── Projectile.cs # 抛射物(P1) +│ │ └── ProjectilePool.cs # 对象池(P1) +│ │ +│ ├── Parry/ +│ │ ├── ParrySystem.cs # 弹反状态机:窗口/成功/反击 +│ │ └── ParryConfigSO.cs # 弹反参数配置 SO +│ │ +│ ├── Enemies/ +│ │ ├── EnemyBase.cs # 基类:持有 Animancer + BT + NavAgent +│ │ ├── EnemyStatsSO.cs # 敌人属性 SO(每种敌人一个实例) +│ │ ├── EnemyAnimationConfigSO.cs # 动画配置 SO +│ │ ├── Boss/ +│ │ │ ├── BossBase.cs # 继承 EnemyBase,增加阶段管理 +│ │ │ └── BossPhaseConfig.cs # 阶段配置(阶段切换 HP 阈值) +│ │ ├── Concrete/ # 具体敌人实现(继承 EnemyBase) +│ │ │ ├── SpiderScout.cs +│ │ │ └── KnightElite.cs +│ │ ├── AI/ # BehaviorDesigner 自定义 Tasks +│ │ │ ├── Actions/ +│ │ │ └── Conditions/ +│ │ └── Navigation/ +│ │ └── EnemyNavAgent.cs # PathBerserker2d NavAgent 封装 +│ │ +│ ├── Feedback/ +│ │ ├── PlayerFeedback.cs # 玩家 MMF_Player 集中管理 +│ │ └── EnemyFeedback.cs # 敌人 MMF_Player 集中管理 +│ │ +│ ├── World/ +│ │ ├── SavePoint.cs +│ │ ├── RoomTransition.cs +│ │ ├── HazardZone.cs +│ │ ├── Collectible.cs +│ │ ├── AbilityUnlock.cs +│ │ ├── Interactables/ +│ │ │ ├── IInteractable.cs +│ │ │ ├── Sign.cs +│ │ │ ├── DirectionalInteractable.cs +│ │ │ └── AbilityGateInteractable.cs +│ │ └── ShopNPC.cs +│ │ +│ ├── UI/ # 见 10_UISystem.md +│ │ ├── UIManager.cs +│ │ ├── HUD/ +│ │ │ ├── HPContainer.cs +│ │ │ ├── SoulGauge.cs +│ │ │ ├── GeoCounter.cs +│ │ │ └── BossHPBar.cs +│ │ ├── Menus/ +│ │ │ ├── MainMenuPanel.cs +│ │ │ ├── PauseMenuPanel.cs +│ │ │ └── DeathScreenPanel.cs +│ │ ├── Overlays/ +│ │ │ └── LoadingOverlay.cs +│ │ └── Settings/ +│ │ └── SettingsPanel.cs +│ │ +│ ├── Audio/ # 见 12_AudioSystem.md +│ │ ├── AudioManager.cs +│ │ ├── BGMController.cs +│ │ ├── AudioZone.cs +│ │ ├── GlobalSFXPlayer.cs +│ │ └── SettingsManager.cs +│ │ +│ ├── Progression/ # 见 14_ProgressionSystem.md +│ │ ├── AbilityGate.cs +│ │ ├── ProgressLock.cs +│ │ ├── BossProgressTracker.cs +│ │ ├── HPContainerPickup.cs +│ │ └── RegionDefinitionSO.cs +│ │ +│ ├── Dialogue/ # 见 15_DialogueSystem.md +│ │ ├── DialogueManager.cs +│ │ ├── DialogueUI.cs +│ │ ├── DialogueSequenceSO.cs +│ │ ├── InteractableNPC.cs +│ │ ├── InteractionPromptController.cs +│ │ └── ShopNPC.cs +│ │ +│ └── Editor/ # 编辑器扩展(Editor Only) +│ ├── Inspectors/ # 自定义 Inspector +│ ├── Windows/ # EditorWindow 工具 +│ └── Gizmos/ # 场景 Gizmos 辅助绘制 +│ +├── ScriptableObjects/ +│ ├── Events/ # SO 事件频道实例 +│ │ ├── Player/ +│ │ ├── Combat/ +│ │ ├── Camera/ +│ │ ├── World/ +│ │ ├── Game/ +│ │ ├── Audio/ +│ │ ├── Progression/ +│ │ ├── UI/ +│ │ └── Dialogue/ +│ ├── Config/ # 游戏配置 SO 实例 +│ └── Dialogue/ # DialogueSequenceSO 资产 +│ +├── Art/ +│ ├── Sprites/ +│ └── Animations/ +│ +├── Audio/ +│ ├── SFX/ +│ └── BGM/ +│ +└── Prefabs/ + ├── Player/ + ├── Enemies/ + └── World/ +``` + +--- + +## 10. 插件职责边界 + +| 插件 | 命名空间 | 在本项目中的职责 | 明确不负责 | +|------|---------|----------------|-----------| +| **Animancer Pro v8.3** | `Animancer`, `Animancer.FSM` | 玩家 & 敌人的全部动画播放;玩家 FSM 骨架(`StateMachine`)| AI 决策、寻路、反馈效果 | +| **Behavior Designer Pro v2.1** | `BehaviorDesigner.Runtime.Tasks` | 敌人 AI 决策树;黑板变量(`SharedVariable`);BOSS 阶段切换 | 实际移动(交给 NavAgent)、动画(交给 Animancer)| +| **PathBerserker2d** | `PathBerserker2d` | 2D 平台寻路(`NavSurface` 烘焙 + `NavAgent` A*);跳跃/下落 `NavLink` | 移动决策(交给 BT)、反馈(交给 Feel)| +| **Feel v4.3** | `MoreMountains.Feedbacks`, `MoreMountains.Tools` | 全部视听触觉反馈(`MMF_Player`);子弹时间(`MMTimeManager`);事件广播(`MMEventManager`)| 逻辑判断、动画、寻路 | +| **Cinemachine 3** | `Unity.Cinemachine` | 虚拟相机、房间约束(`CinemachineConfiner2D`)、镜头震动(`CinemachineImpulseSource`)| 游戏逻辑 | +| **Input System** | `UnityEngine.InputSystem` | 原始输入采集,封装到 `InputReaderSO` | 游戏逻辑决策 | + +--- + +## 11. 功能优先级总表 + +### P0 — 核心可玩(里程碑 1) + +| 功能 | 涉及文档 | +|------|---------| +| 横版移动(跑/跳/双跳/墙跳/冲刺)| [03_PlayerSystem](./03_PlayerSystem.md) | +| 基础攻击(3连击 + 空中下斩 + 上挑)| [04_CombatSystem](./04_CombatSystem.md) | +| **弹反机制**(弹反窗口 + 子弹时间 + 反击)| [05_ParrySystem](./05_ParrySystem.md) | +| 受击 / 死亡 / 无敌帧 | [03](./03_PlayerSystem.md), [04](./04_CombatSystem.md) | +| HP / Soul / Geo 属性 | [03_PlayerSystem](./03_PlayerSystem.md) | +| 治疗(消耗 Soul)| [03_PlayerSystem](./03_PlayerSystem.md) | +| 基础敌人 AI(巡逻 / 追击 / 攻击)| [06_EnemySystem](./06_EnemySystem.md) | +| Boss 战(2阶段)+ 攻击模式库 ✅ | [06_EnemySystem](./06_EnemySystem.md), [19_BossPatternLibrary](./19_BossPatternLibrary.md) | +| 存档点 | [08_WorldSystem](./08_WorldSystem.md) | +| 房间切换 | [08_WorldSystem](./08_WorldSystem.md) | +| 危险区域 | [08_WorldSystem](./08_WorldSystem.md) | +| 能力解锁 | [08_WorldSystem](./08_WorldSystem.md) | +| 视听反馈(命中/弹反/受伤/死亡)| [07_FeedbackSystem](./07_FeedbackSystem.md) | +| 动画事件(HitBox/脚步/取消窗口)✅ | [20_AnimationEventSystem](./20_AnimationEventSystem.md) | +| 镜头:房间约束 + 战斗偏移 | [02_CameraSystem](./02_CameraSystem.md) | + +### P1 — 完整体验(里程碑 2) + +| 功能 | 涉及文档 | +|------|---------| +| GameState 状态机 + 死亡复活流程 | [11_GameManager](./11_GameManager.md) | +| HUD(HP 心形/Soul/Geo) | [10_UISystem](./10_UISystem.md) | +| Boss HP 条 + 主菜单 + Pause 菜单 | [10_UISystem](./10_UISystem.md) | +| 加载画面 + 无障碍选项 | [10_UISystem](./10_UISystem.md) | +| 自适应音乐(探索/Boss/胜利) | [12_AudioSystem](./12_AudioSystem.md) | +| 弹射物系统 + 对象池 | [13_ProjectileSystem](./13_ProjectileSystem.md) | +| 区域进程 + AbilityGate + ProgressLock | [14_ProgressionSystem](./14_ProgressionSystem.md) | +| NPC 对话系统 + IInteractable 接口 | [15_DialogueSystem](./15_DialogueSystem.md) | +| 地图系统 | [16_MapSystem](./16_MapSystem.md) | +| 商人 NPC | [15_DialogueSystem](./15_DialogueSystem.md) | +| 精英敌人(多阶段行为树)| [06_EnemySystem](./06_EnemySystem.md) | +| 移动平台 + NavLinkCluster | [06_EnemySystem](./06_EnemySystem.md) | +| Boss 战(专属 Cinemachine 镜头)| [02_CameraSystem](./02_CameraSystem.md) | +| 本地化(中/英/日) | [22_LocalizationSystem](./22_LocalizationSystem.md) | + +### P2 — 丰富度(里程碑 3) + +| 功能 | 涉及文档 | +|------|------| +| 护符系统 | [17_EquipmentSystem](./17_EquipmentSystem.md) | +| 法术系统(SoulSpell) | [21_SpellSystem](./21_SpellSystem.md) | +| 触觉反馈(手柄震动)| [07_FeedbackSystem](./07_FeedbackSystem.md) | +| 对话分支(P1 级条件对话)| [15_DialogueSystem](./15_DialogueSystem.md) | +| 快速旅行(Bench 传送)| [11_GameManager](./11_GameManager.md) | +| 过场动画(Timeline)| [18_CutsceneSystem](./18_CutsceneSystem.md) | +| 游泳 | [03_PlayerSystem](./03_PlayerSystem.md) | +| 编辑器工具完善(9.1–9.8)| [09_EditorExtensions](./09_EditorExtensions.md) | +| 游戏手感微调(参数参考)| [23_GameFeelTuningGuide](./23_GameFeelTuningGuide.md) | diff --git a/Docs/Design/01_InputSystem.md b/Docs/Design/01_InputSystem.md new file mode 100644 index 0000000..6b4adc4 --- /dev/null +++ b/Docs/Design/01_InputSystem.md @@ -0,0 +1,264 @@ +# 01 · 输入系统 + +> **命名空间** `BaseGames.Input` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** Unity Input System · `BaseGames.Core.Events` + +--- + +## 目录 + +1. [设计目标](#1-设计目标) +2. [核心架构:InputReaderSO](#2-核心架构inputreaderso) +3. [Input Actions 资产结构](#3-input-actions-资产结构) +4. [InputBuffer — 输入缓冲](#4-inputbuffer--输入缓冲) +5. [Coyote Time](#5-coyote-time) +6. [输入数据流](#6-输入数据流) +7. [设备切换与多平台支持](#7-设备切换与多平台支持) +8. [编辑器友好设计](#8-编辑器友好设计) + +--- + +## 1. 设计目标 + +- **零耦合**:游戏系统不直接引用 `PlayerInput` 组件,通过 `InputReaderSO`(ScriptableObject)订阅输入事件 +- **可测试**:`InputReaderSO` 可在测试代码中手动触发事件,无需模拟硬件 +- **可重映射**:Input Actions Asset 支持运行时重映射,配合 UI 设置页面 +- **输入宽容**:提供输入缓冲(Buffer)和 Coyote Time,提升手感 + +--- + +## 2. 核心架构:InputReaderSO + +`InputReaderSO` 是整个输入系统的**唯一门面**,封装 Input Actions,以 C# Action 事件对外暴露: + +``` +InputReaderSO (ScriptableObject) +│ +├── 内部持有: PlayerInputActions (生成的 C# 类) +│ +├── 移动输入 +│ ├── event MoveEvent(Vector2 direction) +│ └── Vector2 MoveInput { get; } ← 当前帧移动向量(持续值) +│ +├── 跳跃输入 +│ ├── event JumpStartedEvent() ← 按下(用于触发跳跃) +│ └── event JumpCancelledEvent() ← 松开(用于可变跳跃高度) +│ +├── 攻击输入 +│ └── event AttackEvent() ← 按下 +│ +├── 弹反输入 +│ └── event ParryEvent() ← 按下 +│ +├── 冲刺输入 +│ └── event DashEvent() ← 按下 +│ +├── 灵泉输入 +│ └── event UseSpringEvent() ← 按下(消耗灵泉使用次数) +│ +├── 形态切换输入 +│ ├── event SwitchSkyFormEvent() ← 切换天魂姿态 +│ ├── event SwitchEarthFormEvent() ← 切换地魂姿态 +│ └── event SwitchDeathFormEvent() ← 切换命魂姿态 +│ +├── 技能输入 +│ ├── event SoulSkillEvent() ← 当前形态魂技能(消耗灵力) +│ ├── event SpiritSkill1StartedEvent() ← 魄技能 1 按下 +│ ├── event SpiritSkill1CancelledEvent() ← 魄技能 1 松开(蓄力型技能用) +│ ├── event SpiritSkill2StartedEvent() ← 魄技能 2 按下 +│ └── event SpiritSkill2CancelledEvent() ← 魄技能 2 松开(蓄力型技能用) +│ +├── 交互输入 +│ └── event InteractEvent() ← 按下 +│ +├── UI 输入 +│ ├── event PauseEvent() +│ ├── event NavigateEvent(Vector2 dir) +│ └── event SubmitEvent() +│ +└── Action Map 切换 + ├── EnableGameplayInput() ← 进入游戏时启用 + ├── EnableUIInput() ← 进入 UI 时启用 + └── DisableAllInput() ← 过场动画/加载时禁用 +``` + +**所有使用输入的系统**仅需在 Inspector 中拖入 `InputReaderSO` 资产,订阅所需事件: + +``` +系统 A: [SerializeField] InputReaderSO _input; + OnEnable → _input.JumpStartedEvent += HandleJump; + OnDisable → _input.JumpStartedEvent -= HandleJump; +``` + +--- + +## 3. Input Actions 资产结构 + +`PlayerInputActions.inputactions` 包含以下 Action Maps: + +### Gameplay Action Map + +| Action 名称 | 类型 | 绑定(默认键盘)| 绑定(手柄)| +|------------|------|---------------|------------| +| `Move` | Value (Vector2) | WASD / Arrow Keys | 左摇杆 | +| `Jump` | Button | Space | South Button (×/A) | +| `Attack` | Button | J / Z | West Button (□/X) | +| `Parry` | Button | K / X | Right Bumper (R1/RB) | +| `Dash` | Button | L-Shift / C | East Button (○/B) | +| `UseSpring` | Button | G / Tab | Right Trigger (R2/RT) | +| `Interact` | Button | F / E | North Button (△/Y) | +| `SwitchSkyForm` | Button | 1 | D-Pad Left | +| `SwitchEarthForm` | Button | 2 | D-Pad Down | +| `SwitchDeathForm` | Button | 3 | D-Pad Right | +| `SoulSkill` | Button | Q | Left Trigger (L2/LT) | +| `SpiritSkill1` | Button | E | D-Pad Up | +| `SpiritSkill2` | Button | R | Left Trigger (L2/LT)(双击或组合)| +| `Pause` | Button | Escape | Start / Menu | + +### UI Action Map + +| Action 名称 | 类型 | 说明 | +|------------|------|------| +| `Navigate` | Value (Vector2) | UI 导航方向 | +| `Submit` | Button | 确认 | +| `Cancel` | Button | 返回 | +| `Point` | Value (Vector2) | 鼠标/触摸位置(UI 点击)| + +### 重映射配置 + +- 使用 `PlayerInput` 组件的 `SaveBindingOverridesAsJson()` 持久化重映射到 PlayerPrefs +- 启动时调用 `LoadBindingOverridesFromJson()` 恢复 + +--- + +## 4. InputBuffer — 输入缓冲 + +`InputBuffer` 是一个**轻量计时器**组件,解决"输入早于判断条件成立"问题: + +### 缓冲时长配置 + +| 输入动作 | 缓冲时长 | 说明 | +|---------|---------|------| +| 跳跃 | 0.15s | 落地前提前按跳跃,落地即起跳 | +| 攻击 | 0.12s | 前一段攻击结束前输入,自动接续下一击 | +| 弹反 | 0.0s | 不缓冲(弹反必须精准,缓冲会降低挑战性)| +| 冲刺 | 0.1s | 小量缓冲,避免帧率不稳定导致失手 | +| UseSpring | 0.0s | 不缓冲(消耗资源,防误操作)| +| SoulSkill | 0.1s | 小量缓冲,允许攻击后衔接技能 | +| SpiritSkill1/2 | 0.0s | 不缓冲(蓄力型技能按下即生效)| + +### 缓冲工作原理 + +``` +玩家按下跳跃键 + → InputBuffer 记录 jumpBufferTimer = 0.15s + → 每帧 jumpBufferTimer -= deltaTime + ↓ +PlayerAirState 进入(落地) + → 查询 InputBuffer.HasBufferedJump() + ├── 若 jumpBufferTimer > 0 → true → 立即起跳 → 消费缓冲 + └── 若 jumpBufferTimer ≤ 0 → false → 不起跳 +``` + +### 缓冲接口 + +``` +InputBuffer +├── bool HasBufferedJump() → 消费性查询(调用后清除) +├── bool HasBufferedAttack() → 消费性查询 +├── bool HasBufferedDash() → 消费性查询 +├── void ConsumeJump() → 手动消费 +├── void ConsumeAttack() +└── void ConsumeDash() +``` + +--- + +## 5. Coyote Time + +Coyote Time 让玩家在**走出平台边缘后的短暂时间内**仍可起跳,提升平台跳跃手感: + +``` +玩家离开地面 + → PlayerAirState 记录 coyoteTimer = 0.12s(当离地原因是走下而非跳跃时) + → 每帧 coyoteTimer -= deltaTime + ↓ +玩家按下跳跃键(此时仍在 coyoteTimer > 0) + → 视为地面跳跃(速度叠加正常跳跃力) + → 消耗 coyoteTimer(不可再次触发) +``` + +**Coyote Time 不生效的情况**: +- 玩家主动跳跃后进入空中(不是走落) +- 已经触发过一次 Coyote Jump +- 玩家正在执行冲刺(DashState 期间禁用 Coyote) + +| 参数 | 值 | 位置 | +|------|-----|------| +| `CoyoteTimeDuration` | 0.12s | `PlayerMovementConfigSO` | +| `JumpBufferDuration` | 0.15s | `PlayerMovementConfigSO` | + +--- + +## 6. 输入数据流 + +``` +硬件设备(键盘/手柄) + ↓ +Input System Runtime + ↓ +PlayerInputActions(生成类,内嵌在 InputReaderSO) + ↓ +InputReaderSO.OnJumpPerformed() → 触发 JumpStartedEvent + ↓ +InputBuffer.RecordJump(timestamp) + ↓ +PlayerAirState.OnStateUpdate() + └── InputBuffer.HasBufferedJump() → true → 起跳 +``` + +**Action Map 切换时序**: + +``` +游戏启动 → EnableGameplayInput() +打开暂停菜单 → EnableUIInput() (游戏逻辑冻结,输入切换到 UI) +关闭暂停菜单 → EnableGameplayInput() +进入过场动画 → DisableAllInput() +过场动画结束 → EnableGameplayInput() +``` + +--- + +## 7. 设备切换与多平台支持 + +`InputReaderSO` 监听 `InputSystem.onActionChange`,检测当前活跃设备类型,发布 `DeviceChangedEvent(DeviceType)`,UI 系统根据此事件切换图标(键盘图标 / 手柄图标)。 + +| DeviceType | 说明 | +|-----------|------| +| `KeyboardMouse` | 键盘 + 鼠标 | +| `Gamepad` | 手柄(PS / Xbox)| +| `Touch` | 触屏(移动端扩展,P2)| + +--- + +## 8. 编辑器友好设计 + +### InputReaderSO Inspector + +自定义 Inspector(`BaseGames.Editor`)提供: + +- **实时事件监控**(Play Mode):每个 Action 上方显示"上次触发时间" +- **手动触发按钮**:在 Inspector 中点击"Simulate Jump"等按钮,无需按实体键,方便调试 FSM 状态 + +### Input 配置可视化 + +`InputBuffer` 在 Inspector 中以进度条显示各缓冲的剩余时间(只读),方便调试缓冲窗口: + +``` +┌─ InputBuffer ──────────────────────────────┐ +│ Jump Buffer [████░░░░░░░] 0.08s / 0.15s │ +│ Attack Buffer [░░░░░░░░░░░] 0.00s / 0.12s │ +│ Dash Buffer [░░░░░░░░░░░] 0.00s / 0.10s │ +└────────────────────────────────────────────┘ +``` diff --git a/Docs/Design/02_CameraSystem.md b/Docs/Design/02_CameraSystem.md new file mode 100644 index 0000000..b4e7a55 --- /dev/null +++ b/Docs/Design/02_CameraSystem.md @@ -0,0 +1,643 @@ +# 02 · 镜头系统 + +> **命名空间** `BaseGames.Camera` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** Cinemachine 3 · `BaseGames.Core.Events` + +--- + +## 目录 + +1. [设计目标](#1-设计目标) +2. [Cinemachine 3 核心组件](#2-cinemachine-3-核心组件) +3. [虚拟相机架构](#3-虚拟相机架构) + - 3.1 全局双机(Global A/B) + - 3.2 房间专用相机(可选) + - 3.3 特殊状态相机 +4. [CameraStateController](#4-camerastatecontroller) +5. [可视区域与触发区域](#5-可视区域与触发区域) + - 5.1 可视区域(RoomVisibleArea) + - 5.2 切换触发区域(CameraTriggerZone) +6. [过渡效果:CameraBlendProfileSO](#6-过渡效果camerablendprofileso) +7. [镜头震动:CinemachineImpulse](#7-镜头震动cinemachineimpulse) +8. [像素对齐:Pixel Perfect 集成](#8-像素对齐pixel-perfect-集成) +9. [CameraConfigSO — 配置资产](#9-cameraconfigso--配置资产) +10. [场景搭建规范](#10-场景搭建规范) +11. [编辑器友好设计](#11-编辑器友好设计) +12. [大房间相机处理](#12-大房间相机处理) + - 12.1 竖向/横向无缝滚动房间 + - 12.2 子区域相机分段 + - 12.3 滚动限制模式 + +--- + +## 1. 设计目标 + +- 镜头行为**完全由 Cinemachine 3 驱动**,不手动操作 `Camera.transform` +- **全局 A/B 双机交替复用**:切换房间时将 inactive 的全局相机预设好新边界再切过去,彻底消除 Confiner 跳变 +- **房间专用相机(可选)**:每个房间可配置专属 `VCam_Room`,存在时自动优先使用;不配置则回退到全局双机 +- **触发区域驱动切换**:`CameraTriggerZone` Trigger Collider 控制镜头切换时机,可在 Scene 视图中可视化编辑 +- **可视区域独立编辑**:`RoomVisibleArea` 的 `PolygonCollider2D` 在 Scene 视图可直接拖拽顶点,Gizmo 实时预览视野 +- **过渡效果可配置**:`CameraBlendProfileSO` 资产,可逐触发区域覆盖全局默认混合风格与时长 +- 镜头震动通过 `CinemachineImpulseSource` 发布,与 Feel 的 `MMF_CinemachineImpulse` 集成 +- 像素艺术风格保持亚像素锁定,防止渲染模糊 + +--- + +## 2. Cinemachine 3 核心组件 + +| 组件 | 挂载位置 | 说明 | +|------|---------|------| +| `CinemachineBrain` | Main Camera | 统一调度所有虚拟相机,同一时刻激活优先级最高者 | +| `CinemachineCamera` | 虚拟相机 GO | Cinemachine 3 的虚拟相机基础组件(取代旧版 `CinemachineVirtualCamera`)| +| `CinemachinePositionComposer` | 虚拟相机组件 | 控制跟随目标偏移与阻尼(探索镜头用)| +| `CinemachineOrbitalFollow` | 虚拟相机组件 | Boss 战镜头围绕目标(可选)| +| `CinemachineConfiner2D` | 虚拟相机组件 | 房间边界约束(每个房间设置独立 `Collider2D`)| +| `CinemachineImpulseSource` | 虚拟相机 GO | 发布震动冲量(与 Feel 集成)| +| `CinemachineImpulseListener` | 虚拟相机组件 | 接收并响应冲量(震屏强度系数)| +| `CinemachinePixelPerfect` | 虚拟相机组件 | 与 `PixelPerfectCamera` 协同,消除亚像素抖动 | + +--- + +## 3. 虚拟相机架构 + +### 3.1 全局双机(Global A/B) + +Persistent 场景中预置两台全局虚拟相机,同一时刻仅一台处于"热"优先级。切换房间时将 inactive 机预配置好新 Confiner,再升高其优先级触发 Blend,Blend 结束后互换角色。 + +| 虚拟相机 | 默认 Priority | 说明 | +|---------|:---:|------| +| `VCam_Global_A` | 10 | 初始活跃,跟踪玩家 | +| `VCam_Global_B` | 9 | 待机,切换时接管 | + +**房间切换时序(无房间专用相机):** + +``` +玩家穿过 CameraTriggerZone + │ + ▼ +CameraStateController.SwitchRoom(data) + │ + ├─ 1. 更新 inactive 机(如 VCam_B) + │ · BoundingShape2D ← 新房间 RoomVisibleArea.Collider2D + │ · FollowTarget ← 玩家 Transform(不变) + │ · PositionOffset ← data.cameraOffset + │ + ├─ 2. 将 data.blendProfile 写入 CinemachineBrain.DefaultBlend + │ + ├─ 3. inactiveCam.Priority = activeCam.Priority + 1 + │ → CinemachineBrain 自动开始 Blend + │ + └─ 4. Blend 结束(CinemachineBrain.BlendFinished 回调) + activeCam.Priority = 9 + swap _activeCam / _inactiveCam 引用 +``` + +### 3.2 房间专用相机(可选) + +每个房间场景可以放置一个带 `RoomCamera` 组件的虚拟相机。若存在,则优先级高于全局双机;全局双机继续在后台保持配置,以便专用相机卸载时无缝接管。 + +| 情况 | 使用相机 | Priority | +|------|---------|:---:| +| 房间无专用相机 | 全局 A/B 中的 active 方 | 10 | +| 房间有 `RoomCamera` | 房间专用虚拟相机 | 15 | + +```csharp +// RoomCamera.cs — 挂在房间场景的 VCam_Room_XXX 上 +public class RoomCamera : MonoBehaviour +{ + [SerializeField] CinemachineCamera _vcam; + [SerializeField] RoomVisibleArea _visibleArea; // 本房间可视区域 + [SerializeField] CameraBlendProfileSO _enterBlend; // 进入时的过渡(可留空) + + void OnEnable() => CameraStateController.Instance.RegisterRoomCamera(this); + void OnDisable() => CameraStateController.Instance.UnregisterRoomCamera(this); + + public CinemachineCamera Vcam => _vcam; + public RoomVisibleArea VisibleArea => _visibleArea; + public CameraBlendProfileSO EnterBlend => _enterBlend; +} +``` + +> 房间专用相机注册时,`CameraStateController` 同步将全局双机的 Confiner 也设置为同一区域,确保专用相机卸载后全局机能无缝接管。 + +### 3.3 特殊状态相机 + +以下相机覆盖所有普通相机,由 `CameraStateController` 响应事件频道激活: + +| 虚拟相机 | Priority | 激活条件 | 默认 Blend | +|---------|:---:|---------|---------| +| `VCam_Boss` | 30 | `OnBossFightToggled.Raise(true)` | 0.8 s EaseIn | +| `VCam_Cutscene` | 40 | `OnCutsceneStarted` | 0.0 s Cut | +| `VCam_Death` | 50 | `OnPlayerDied` | 1.0 s EaseIn | + +--- + +## 4. CameraStateController + +`CameraStateController`(`MonoBehaviour`,挂在 CameraRig GO 上,`DefaultExecutionOrder(-200)`)负责维护全局双机状态、响应事件频道、协调房间专用相机: + +```csharp +public class CameraStateController : MonoBehaviour +{ + public static CameraStateController Instance { get; private set; } + + [Header("全局双机")] + [SerializeField] CinemachineCamera _globalA; + [SerializeField] CinemachineCamera _globalB; + + [Header("特殊状态机")] + [SerializeField] CinemachineCamera _vcamBoss; + [SerializeField] CinemachineCamera _vcamCutscene; + [SerializeField] CinemachineCamera _vcamDeath; + + [Header("默认过渡效果")] + [SerializeField] CameraBlendProfileSO _defaultRoomBlend; + + [Header("事件频道")] + [SerializeField] BoolEventChannelSO _onBossFightToggled; + [SerializeField] VoidEventChannelSO _onPlayerDied; + [SerializeField] VoidEventChannelSO _onCutsceneStarted; + [SerializeField] VoidEventChannelSO _onCutsceneEnded; + + CinemachineCamera _activeCam; // 当前"热"全局机 + CinemachineCamera _inactiveCam; // 待机全局机 + RoomCamera _currentRoomCam; + + // 切换到新房间(由 CameraTriggerZone 调用) + public void SwitchRoom(CameraTriggerZone.SwitchData data) { ... } + + // 房间专用相机注册/反注册(由 RoomCamera.OnEnable/OnDisable 调用) + public void RegisterRoomCamera(RoomCamera cam) { ... } + public void UnregisterRoomCamera(RoomCamera cam) { ... } +} +``` + +**默认 Blend 查找顺序(优先级从高到低):** + +``` +触发区域 CameraTriggerZone._blendOverride (最高优先) + ↓ 为空时 +目标房间 RoomCamera._enterBlend + ↓ 为空时 +CameraStateController._defaultRoomBlend (全局兜底) +``` + +**特殊状态 Blend(固定值,不受 BlendProfile 影响):** + +| 切换 | 时长 | 风格 | 说明 | +|------|------|------|------| +| 任意 → Boss | 0.8 s | EaseIn | 慢推入强调 Boss 出场 | +| Boss → 探索 | 0.5 s | EaseOut | 退场恢复 | +| 任意 → Death | 1.0 s | EaseIn | 慢推营造悲剧感 | +| 任意 → Cutscene | 0.0 s | Cut | 过场硬切 | +| Cutscene → 探索 | 0.3 s | EaseOut | 过场结束柔和恢复 | + +--- + +## 5. 可视区域与触发区域 + +### 5.1 可视区域(RoomVisibleArea) + +定义该房间允许相机移动的边界,驱动 `CinemachineConfiner2D`。每个房间场景(或同房间不同区段)放置一个: + +``` +Scene: Room_Forest_01 +└── [VisibleArea_Main] (GameObject) + ├── PolygonCollider2D (IsTrigger = false) ← Confiner 要求非 Trigger + └── RoomVisibleArea.cs + ├── [SerializeField] string areaId // 唯一 ID("Room_Forest_01_Main") + ├── [SerializeField] Vector2 cameraOffset // 此区域相机跟随偏移 + └── [SerializeField] bool hideOnPlay // 运行时隐藏 Gizmo +``` + +> **重要**:`CinemachineConfiner2D` 要求 `PolygonCollider2D.IsTrigger = false`。如需同一位置同时做触发检测,在子 GO 上另挂一个 Trigger Collider(`CameraTriggerZone` 使用独立 GO)。 + +**边界约束参数**(`CameraConfigSO`): + +| 参数 | 推荐值 | 说明 | +|------|:------:|------| +| `ConfinerDamping` | 0.0 | 到达边界时的阻尼(0 = 硬停止)| +| `SlowingDistance` | 0.5 | 靠近边界时开始减速的距离 | + +一个大房间可以配置**多个 `RoomVisibleArea`**(如上下层、分支路线),由不同的 `CameraTriggerZone` 分别引用。 + +--- + +### 5.2 切换触发区域(CameraTriggerZone) + +`CameraTriggerZone` 是驱动相机切换的入口,通过 Trigger Collider 检测玩家进入: + +``` +Scene: Room_Forest_01 +└── [CameraTrigger_Entry] (GameObject) + ├── BoxCollider2D (IsTrigger = true) ← 放在入口门洞处,可视化编辑 + └── CameraTriggerZone.cs + ├── [SerializeField] RoomVisibleArea _targetVisibleArea // 切换到哪个可视区域 + ├── [SerializeField] RoomCamera _targetRoomCamera // 可留空(使用全局双机) + ├── [SerializeField] CameraBlendProfileSO _blendOverride // 可留空(使用全局默认) + ├── [SerializeField] Vector2 _cameraOffset // 可覆盖 VisibleArea 的偏移 + └── [SerializeField] bool _triggerOnce // true = 仅触发一次 +``` + +```csharp +public class CameraTriggerZone : MonoBehaviour +{ + public struct SwitchData + { + public RoomVisibleArea visibleArea; + public RoomCamera roomCamera; // null = 使用全局双机 + public CameraBlendProfileSO blendProfile; // null = 查找上级默认 + public Vector2 cameraOffset; + } + + void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + if (_triggerOnce && _triggered) return; + _triggered = true; + + CameraStateController.Instance.SwitchRoom(new SwitchData + { + visibleArea = _targetVisibleArea, + roomCamera = _targetRoomCamera, + blendProfile = _blendOverride, + cameraOffset = _cameraOffset != Vector2.zero + ? _cameraOffset + : _targetVisibleArea.CameraOffset + }); + } + bool _triggered; +} +``` + +**典型放置方式**:在房间入口门洞处放置细长 `BoxCollider2D`(宽约 0.5 单位,高覆盖整个通道),确保玩家穿越时必然触发。`_triggerOnce = false` 时,玩家来回穿越可双向切换(适合同一大房间内的区段分割线)。 + +--- + +## 6. 过渡效果:CameraBlendProfileSO + +`CameraBlendProfileSO` 是一个轻量配置资产,封装 `CinemachineBlendDefinition`,可在 Inspector 中独立编辑并在多个触发区域之间复用: + +```csharp +[CreateAssetMenu(menuName = "Camera/BlendProfile")] +public class CameraBlendProfileSO : ScriptableObject +{ + [Tooltip("过渡风格:Cut / EaseInOut / EaseIn / EaseOut / HardIn / HardOut / Linear")] + public CinemachineBlendDefinition.Styles style = CinemachineBlendDefinition.Styles.EaseInOut; + + [Range(0f, 3f)] + public float duration = 0.4f; + + public CinemachineBlendDefinition ToBlendDefinition() + => new CinemachineBlendDefinition(style, duration); +} +``` + +**资产存放路径**:`Assets/ScriptableObjects/Config/Camera/Blends/` + +**预置资产(建议创建):** + +| 资产名 | Style | Duration | 典型用途 | +|--------|-------|:--------:|----------| +| `Blend_Room_Default.asset` | EaseInOut | 0.4 s | 普通房间切换(全局兜底)| +| `Blend_Room_Snap.asset` | Cut | 0.0 s | 重生/传送等硬切 | +| `Blend_Room_Slow.asset` | EaseIn | 0.8 s | 进入特殊区域(如 Boss 前厅)| +| `Blend_Room_Fast.asset` | Linear | 0.15 s | 快速连续的密集小房间 | + +--- + +## 7. 镜头震动:CinemachineImpulse + +### 震动类型设计 + +| 类型 | 触发来源 | 强度 | 时长 | 说明 | +|------|---------|------|------|------| +| `Light` | 玩家攻击命中普通敌人 | 0.2 | 0.1s | 轻微点击感 | +| `Medium` | 玩家受击 | 0.5 | 0.25s | 明显震动 | +| `Heavy` | 玩家死亡 / Boss 重击 | 1.0 | 0.4s | 强烈震动 | +| `Parry` | 弹反成功 | 0.7 | 0.2s | 带方向性(从敌人方向弹开)| +| `Landing` | 高空落地 | 0.3 | 0.15s | 垂直向下震动 | + +### 震动集成方式 + +Feel 的 `MMF_CinemachineImpulse` Feedback 内部持有 `CinemachineImpulseSource`: +- 命中时由 `PlayerFeedback` / `EnemyFeedback` 中的 `MMF_Player` 触发 +- `CinemachineImpulseListener`(挂在虚拟相机上)响应冲量,配置强度缩放系数 + +**CinemachineImpulseSource 配置**(Inspector): + +| 参数 | 推荐值 | 说明 | +|------|--------|------| +| `ImpulseDefinition.ImpulseType` | `Uniform` | 各方向均匀(普通)/ `Directional`(带方向性震动)| +| `ImpulseDefinition.ImpulseShape` | 自定义曲线 | 快速衰减曲线(前 20% 满强度,后 80% 指数衰减)| +| `DefaultVelocity` | (0.5, -0.5, 0) | 默认震动方向(右斜下)| + +--- + +## 8. 像素对齐:Pixel Perfect 集成 + +像素艺术游戏要求相机位置锁定到整数像素,否则 Sprite 会出现模糊/闪烁: + +### 组件配置链 + +``` +Main Camera +├── PixelPerfectCamera (com.unity.2d.pixel-perfect) +│ ├── Assets Pixels Per Unit: 32 +│ ├── Reference Resolution: 480 × 270 (16:9 基准) +│ ├── Crop Frame X/Y: 关闭(允许缩放而非裁剪) +│ └── Upscale Render Texture: 开启(低分辨率渲染再放大) +│ +└── CinemachineBrain + └── Update Method: Fixed Update(与物理帧同步,消除抖动) +``` + +### 虚拟相机配置 + +每个虚拟相机上添加 `CinemachinePixelPerfect` Extension: +- 此 Extension 自动将相机位置对齐到像素网格 +- 与 `PixelPerfectCamera` 配合,确保最终渲染无亚像素误差 + +### Orthographic Size 计算 + +$$\text{Orthographic Size} = \frac{\text{Reference Resolution Height}}{2 \times \text{PPU}} = \frac{270}{2 \times 32} = 4.21875$$ + +> 使用 `PixelPerfectCamera` 时,Orthographic Size 由组件自动管理,勿手动设置。 + +--- + +## 9. CameraConfigSO — 配置资产 + +`CameraConfigSO` 集中管理所有可调节的镜头参数,存放于: +`Assets/ScriptableObjects/Config/Camera/CameraConfigSO.asset` + +### 探索镜头参数 + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `ExploreFollowDamping` | `Vector2` | (0.2, 0.2) | XY 轴跟随阻尼 | +| `ExploreAheadDistance` | `float` | 2.0 | 朝移动方向的前瞻偏移量 | +| `ExploreAheadSmoothing` | `float` | 0.5 | 前瞻平滑时间 | +| `ExploreLookUpOffset` | `float` | 1.5 | 长按上看时的额外 Y 偏移 | +| `ExploreLookDownOffset` | `float` | -1.0 | 长按下看时的额外 Y 偏移 | +| `ExploreFOV` | `float` | 4.22 | Orthographic Size(像素对齐)| + +### 战斗镜头参数 + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `CombatZoomOut` | `float` | +0.5 | 战斗时 Orthographic Size 增量(拉远)| +| `CombatForwardOffset` | `float` | 1.0 | 朝敌人方向额外偏移 | +| `CombatFollowDamping` | `Vector2` | (0.3, 0.3) | 战斗时更高阻尼(稳定)| + +### Boss 镜头参数 + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `BossRoomCenter` | `Vector2` | 由 Boss 房间配置 | Boss 房间固定镜头中心 | +| `BossZoomLevel` | `float` | 6.0 | Boss 战 Orthographic Size | + +--- + +## 10. 场景搭建规范 + +### Persistent 场景:CameraRig 层级结构 + +``` +[CameraRig] (Prefab — DontDestroyOnLoad,放入 Persistent 场景) +│ +├── Main Camera +│ ├── PixelPerfectCamera +│ └── CinemachineBrain +│ └── DefaultBlend ← 运行时由 CameraStateController 动态写入 +│ +├── [GlobalCameras] ← 全局双机,永远存在 +│ ├── VCam_Global_A (CinemachineCamera, Priority 10) +│ │ ├── CinemachinePositionComposer (Follow = Player) +│ │ ├── CinemachineConfiner2D ← BoundingShape2D 运行时设置 +│ │ ├── CinemachineImpulseListener +│ │ └── CinemachinePixelPerfect +│ └── VCam_Global_B (CinemachineCamera, Priority 9) +│ ├── CinemachinePositionComposer (Follow = Player) +│ ├── CinemachineConfiner2D +│ ├── CinemachineImpulseListener +│ └── CinemachinePixelPerfect +│ +├── [SpecialCameras] ← 特殊状态机,默认 Priority 0 +│ ├── VCam_Boss (CinemachineCamera) +│ │ ├── CinemachineConfiner2D ← Boss 房间专属 Confiner(运行时设置) +│ │ └── CinemachinePixelPerfect +│ ├── VCam_Death (CinemachineCamera) +│ │ └── CinemachinePixelPerfect +│ └── VCam_Cutscene (CinemachineCamera) +│ └── CinemachinePixelPerfect +│ +├── [ImpulseSources] +│ ├── ImpulseSource_Light +│ ├── ImpulseSource_Medium +│ ├── ImpulseSource_Heavy +│ ├── ImpulseSource_Parry +│ └── ImpulseSource_Landing +│ +└── CameraStateController.cs +``` + +### 房间场景中的标准配置 + +``` +Room_XXX (Scene) +│ +├── [VisibleArea_Main] (GameObject) ← 必须,定义主可视区域 +│ ├── PolygonCollider2D (IsTrigger = false) +│ └── RoomVisibleArea.cs +│ └── areaId = "Room_XXX_Main" +│ +├── [VisibleArea_Sub] (GameObject) ← 可选,房间有多段时使用 +│ ├── PolygonCollider2D (IsTrigger = false) +│ └── RoomVisibleArea.cs +│ +├── [CameraTrigger_Entry] (GameObject) ← 房间入口触发器 +│ ├── BoxCollider2D (IsTrigger = true) ← 放在入口门洞处 +│ └── CameraTriggerZone.cs +│ ├── _targetVisibleArea = VisibleArea_Main +│ ├── _targetRoomCamera = (留空→使用全局双机) +│ └── _blendOverride = (留空→全局默认) +│ +└── [VCam_Room_XXX] (GameObject) ← 可选,房间专用相机 + ├── CinemachineCamera (Priority 15) + │ ├── CinemachinePositionComposer + │ ├── CinemachineConfiner2D + │ └── CinemachinePixelPerfect + └── RoomCamera.cs + ├── _visibleArea = VisibleArea_Main + └── _enterBlend = Blend_Room_Slow (可选) +``` + +--- + +## 11. 编辑器友好设计 + +### RoomVisibleArea — Scene 视图 + +- `PolygonCollider2D` 内置**Edit Collider** 按钮,可直接在 Scene 视图拖拽顶点编辑边界形状 +- `RoomVisibleArea` 始终绘制 **青色轮廓线 + 半透明青色填充**,表示 Confiner 边界 +- 叠加绘制 **白色虚线矩形** 表示当前 Orthographic Size 对应的实际视野范围,方便确认边界是否足够 +- Inspector 中自动检测:若 PolygonCollider2D 包围盒小于摄像机视野,显示红色警告: + `⚠ 可视区域小于摄像机视野,镜头将无法移动!` + +### CameraTriggerZone — Scene 视图 + +- 触发区域 Collider2D 始终绘制 **黄色轮廓**(即使未选中 GO) +- 选中时:绘制从触发区域中心指向 `_targetVisibleArea` 中心的 **橙色箭头**,直观显示切换目标 +- 若 `_targetRoomCamera` 不为空,额外绘制 **紫色细线** 指向专用相机位置 +- Inspector 中 `_blendOverride` 字段旁显示当前生效的 Blend 描述(含回退链说明): + ``` + 生效 Blend: [触发区域覆盖] EaseIn 0.8s + 或 + 生效 Blend: [全局兜底] EaseInOut 0.4s + ``` + +### CameraStateController — 运行时监控 + +Play Mode 下 Inspector 显示: + +``` +┌─ CameraStateController ──────────────────────────────────────────┐ +│ Active Global : VCam_Global_A (Priority 10) │ +│ Inactive Global: VCam_Global_B (Priority 9) │ +│ Room Camera : VCam_Room_Forest01 (Priority 15) │ +│ Blend Progress : ████████████░░░░ 75% │ +│ Current Area : Room_Forest_01_Main │ +│ ─────────────────────────────────────────────────────────────── │ +│ [触发房间切换] [触发 Boss] [触发死亡] [强制 Snap] │ +└──────────────────────────────────────────────────────────────────┘ +``` + +### Scene 视图 Gizmos 汇总 + +| 组件 | Gizmo 颜色 | 内容 | +|------|-----------|------| +| `RoomVisibleArea` | 青色 | Confiner 边界轮廓 + 当前视野矩形 | +| `CameraTriggerZone` | 黄色 | 触发 Collider 轮廓 | +| `CameraTriggerZone`(选中) | 橙色箭头 | 指向目标 VisibleArea | +| `RoomCamera` | 紫色 | VCam 视锥(Frustum)轮廓 | +| `CinemachineImpulseSource` | 红色箭头 | 震动方向,长度表示强度 | +| `LargeRoomBoundary` | 绿色粗线框 | 大房间整体边界 | +| `SubRegionTrigger`(选中) | 青绿箭头 | 指向该子区域激活的 VCam | + +--- + +## 12. 大房间相机处理 + +银河恶魔城中存在若干**大型房间**(Boss 房、竖井、长廊),单个 Confiner 配合全局相机会导致视野移动范围过大、失去房间感。本节说明三种处理策略。 + +### 12.1 竖向/横向无缝滚动房间 + +**适用**:长廊(横向滚动)、竖井(纵向滚动)、Boss 前庭。 + +做法:创建宽/高尺寸匹配房间的 `RoomVisibleArea`(PolygonCollider2D),全局相机的 Confiner 直接限制在这块大 Confiner 里自由滑动。 + +``` +房间宽度 60 单位、高度 12 单位(横向长廊): + RoomVisibleArea: + PolygonCollider2D 顶点: (-30,-6), (30,-6), (30,6), (-30,6) + 全局相机 Confiner2D → 绑定这个 Collider + 结果: 镜头可以横向自由跟随,纵向锁死在房间高度内 +``` + +**锁轴配置**(在 `RoomVisibleArea` 上附加 `CameraAxisLock`): + +```csharp +public class CameraAxisLock : MonoBehaviour +{ + public enum LockMode { None, LockX, LockY } + + [SerializeField] LockMode _lock = LockMode.None; + [SerializeField] float _lockedValue; // LockX 时为固定 X 坐标,LockY 时为固定 Y 坐标 + + // CameraStateController 在读取 RoomVisibleArea 时检查是否挂载了此组件 + // 若存在,则在 LateUpdate 中强制修正相机位置 + public void ApplyLock(CinemachineBrain brain) + { + var pos = brain.transform.position; + switch (_lock) + { + case LockMode.LockX: brain.transform.position = new Vector3(_lockedValue, pos.y, pos.z); break; + case LockMode.LockY: brain.transform.position = new Vector3(pos.x, _lockedValue, pos.z); break; + } + } +} +``` + +### 12.2 子区域相机分段 + +**适用**:Boss 房(进入 Boss 房后锁定在 Boss 战视角)、多功能大厅(不同区域有不同镜头高度)。 + +策略:在大房间内放置若干 `SubRegionTrigger`,每个子区域激活专属 `RoomCamera`(更高 Priority): + +``` +大房间层级: +├── LargeRoom_BossArena +│ ├── RoomVisibleArea_Global ← 整体边界(兜底 Confiner) +│ ├── SubRegionTrigger_Entrance ← 入口区,激活 VCam_Entrance(低焦) +│ ├── SubRegionTrigger_Arena ← 战斗区,激活 VCam_Arena(剧院视角) +│ └── SubRegionTrigger_Exit ← 出口区,激活 VCam_Exit(低焦) +``` + +```csharp +/// +/// 挂载在子区域触发 Collider 上,玩家进入时激活指定 RoomCamera,离开时还原。 +/// 可与 §3.2 RoomCamera 逻辑复用,SubRegionTrigger 本质是 CameraTriggerZone 的轻量别名。 +/// +[RequireComponent(typeof(Collider2D))] +public class SubRegionTrigger : MonoBehaviour +{ + [SerializeField] CinemachineCamera _subCamera; // 子区域专用 VCam + [SerializeField] CameraBlendProfileSO _blendIn; // 进入时的 Blend + [SerializeField] CameraBlendProfileSO _blendOut; // 离开时的 Blend(可为 null,用全局兜底) + + void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + CameraStateController.Instance.ActivateSubRegion(_subCamera, _blendIn); + } + + void OnTriggerExit2D(Collider2D other) + { + if (!other.CompareTag("Player")) return; + CameraStateController.Instance.DeactivateSubRegion(_subCamera, _blendOut); + } +} +``` + +`CameraStateController` 新增方法: + +```csharp +public void ActivateSubRegion(CinemachineCamera subCam, CameraBlendProfileSO blend) +{ + if (blend != null) + ApplyBlendOverride(subCam, blend); + subCam.Priority = _roomCameraBasePriority + 5; // 高于普通房间相机 +} + +public void DeactivateSubRegion(CinemachineCamera subCam, CameraBlendProfileSO blend) +{ + if (blend != null) + ApplyBlendOverride(subCam, blend); + subCam.Priority = 0; +} +``` + +### 12.3 滚动限制模式 + +针对特定大型场景需要限制某轴的相机运动: + +| 模式 | 典型场景 | 配置 | +|------|---------|------| +| **横向自由 + 纵轴锁定** | 横向长廊、横向 Boss 房 | `CameraAxisLock.LockY` | +| **纵向自由 + 横轴锁定** | 竖井、电梯通道 | `CameraAxisLock.LockX` | +| **双轴自由** | 大型开放场景、探索大厅 | 无 Lock,Confiner 覆盖整个区域 | +| **双轴锁定(静止镜头)** | 剧场演出、特定剧情房间 | 使用固定位置 VCam,Priority 最高 | + +**锁轴时的边缘提示**:当房间宽度/高度接近相机视野的 1.5× 以内时,`RoomVisibleArea` 的 Gizmo 会在相应轴方向上绘制红色警告线,提示设计师考虑是否需要 `CameraAxisLock`。 diff --git a/Docs/Design/03_PlayerSystem.md b/Docs/Design/03_PlayerSystem.md new file mode 100644 index 0000000..7cf88e7 --- /dev/null +++ b/Docs/Design/03_PlayerSystem.md @@ -0,0 +1,952 @@ +# 03 · 玩家系统 + +> **命名空间** `BaseGames.Player` · `BaseGames.Player.States` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** `BaseGames.Input` · `BaseGames.Combat` · `BaseGames.Parry` · Animancer Pro + +--- + +## 目录 + +1. [系统总览](#1-系统总览) +2. [PlayerController — 协调器](#2-playercontroller--协调器) +3. [PlayerMovement — 物理移动](#3-playermovement--物理移动) +4. [PlayerStats — 属性系统](#4-playerstats--属性系统) +5. [PlayerCombat — 战斗管理](#5-playercombat--战斗管理) +6. [FormController — 形态系统](#6-formcontroller--形态系统) +7. [Animancer 双层动画系统](#7-animancer-双层动画系统) +8. [PlayerAnimationConfigSO](#8-playeranimationconfigso) +9. [FSM 状态体系](#9-fsm-状态体系) +10. [状态详细设计](#10-状态详细设计) +11. [能力解锁系统](#11-能力解锁系统) +12. [PlayerMovementConfigSO](#12-playermovementconfigso) +13. [编辑器友好设计](#13-编辑器友好设计) +14. [空中冲刺(Aerial Dash)](#14-空中冲刺aerialDash) + +--- + +## 1. 系统总览 + +``` +Player Prefab +├── PlayerController ← 协调器(无业务逻辑) +│ ├── PlayerMovement ← 物理移动(Rigidbody2D) +│ ├── PlayerStats ← 属性:HP/灵力/魄元/灵泉/Geo/能力 +│ ├── PlayerCombat ← HitBox 开关、连击链(读取 WeaponManager) +│ ├── FormController ← 形态管理(天魂/地魂/命魂,见 §6) +│ ├── WeaponManager ← 武器切换管理,形态联动(见 53_WeaponSystem) +│ ├── SkillModifierRegistry← 技能修改器(见 21_SpellSystem §5) +│ ├── SkillManager ← 魂技能/魄技能执行(见 21_SkillSystem) +│ ├── SpringSystem ← 灵泉使用次数管理(见 §4.3) +│ ├── ParrySystem ← 弹反状态(见 05_ParrySystem) +│ └── AnimancerComponent ← Animancer 动画主入口 +│ +├── HurtBox ← 受击区域(路由 DamageInfo 给 PlayerController) +├── HitBox_Ground ← 地面水平攻击判定 +├── HitBox_Up ← 上劈攻击判定 +├── HitBox_Down ← 下劈攻击判定(Pogo) +├── HitBox_Air ← 空中攻击判定(各形态独立闸题) +├── PlayerFeedback ← Feel MMF_Player 集合 +└── SpriteRenderer +``` + +**设计要点**:`PlayerController` 是**纯协调器**,只负责: +1. 初始化并持有子组件引用 +2. 维护 Animancer FSM(当前状态切换) +3. 在受击时调用 `ForceState(HurtState)` +4. 在死亡时触发 `OnPlayerDied` 事件频道 + +所有具体行为(移动计算、攻击判定、弹反逻辑)委托给各子组件或各 State。 + +--- + +## 2. PlayerController — 协调器 + +### 持有引用(Inspector 序列化) + +| 字段 | 类型 | 说明 | +|------|------|------| +| `_inputReader` | `InputReaderSO` | 输入频道(SO,全局共享)| +| `_movementConfig` | `PlayerMovementConfigSO` | 移动参数配置 | +| `_animConfig` | `PlayerAnimationConfigSO` | 动画配置 | +| `_statsConfig` | `PlayerStatsSO` | 初始属性配置 | +| `_formConfig` | `FormConfigSO` | 形态配置(天魂/地魂/命魂 SO 引用)| +| `_onPlayerDied` | `VoidEventChannelSO` | 死仪事件频道(SO)| +| `_onHPChanged` | `IntEventChannelSO` | HP 变化频道(SO)| + +### 公开接口(供外部调用) + +| 方法/属性 | 调用方 | 说明 | +|----------|--------|------| +| `ForceState(PlayerStateBase)` | HurtBox / ParrySystem | 强制切换状态(受击/死亡)| +| `TryTransitionState(PlayerStateBase)` | 各 State 内部 | 正常状态转换(带优先级检查)| +| `IsGrounded` | 各 State | 地面检测结果(只读)| +| `FacingDirection` | 各 State / PlayerCombat | 当前朝向 (+1 右 / -1 左)| +| `Rb` | PlayerMovement / 各 State | Rigidbody2D 引用 | +| `Animancer` | 各 State | AnimancerComponent 引用 | + +--- + +## 3. PlayerMovement — 物理移动 + +`PlayerMovement` 封装所有 `Rigidbody2D` 操作,各 State 通过调用其方法间接控制物理: + +### 移动接口 + +| 方法 | 调用时机 | 说明 | +|------|---------|------| +| `Move(float speedX)` | `RunState.OnStateFixedUpdate` | 设置水平速度 | +| `Jump(bool isVariable)` | `AirState.OnStateEnter` | 施加跳跃冲量 | +| `CutJump()` | `AirState`(松开跳跃键)| 减半垂直速度(可变跳跃高度)| +| `Dash(Vector2 direction)` | `DashState.OnStateEnter` | 施加冲刺速度 | +| `ApplyKnockback(DamageInfo)` | `HurtState.OnStateEnter` | 根据 DamageInfo 施加击退 | +| `ZeroVelocity()` | `IdleState.OnStateEnter` | 清零速度 | +| `ZeroHorizontalVelocity()` | `HurtState` 等 | 仅清零水平速度 | + +### 地面检测 + +- 使用 `Physics2D.OverlapBox` 在脚部检测 Ground Layer +- 结果每帧更新,通过 `PlayerController.IsGrounded` 对外暴露 +- 支持单向平台(`OneWayPlatform` Layer,向下跳跃时临时忽略) + +### 墙壁检测 + +- 左右两侧各一个 `Physics2D.Raycast` 检测 Wall Layer +- `IsWallLeft` / `IsWallRight` 供 `AirState` 判断墙跳/墙滑 + +--- + +## 4. PlayerStats — 属性系统 + +`PlayerStats` 持有玩家当前**运行时属性**,初始值来自 `PlayerStatsSO`,通过事件频道对外广播变化: + +### 属性表 + +| 属性 | 类型 | 初始值 | 说明 | +|------|------|--------|------| +| `CurrentHP` | `int` | `StatsSO.MaxHP` | 当前生命值 | +| `MaxHP` | `int` | 配置 SO | 最大生命值(心脏容器增加)| +| `CurrentSoulPower` | `int` | 0 | 当前灵力(0-100),近战命中积累,用于魂技能 | +| `MaxSoulPower` | `int` | 100 | 灵力上限 | +| `CurrentSpiritPower` | `int` | `StatsSO.MaxSpiritPower` | 当前魄元(0-100),随时间自动回复,用于魄技能 | +| `MaxSpiritPower` | `int` | 配置 SO | 魄元上限 | +| `CurrentSpringCharges` | `int` | `StatsSO.MaxSpringCharges` | 当前灵泉使用次数,击杀敌人积累点数达阙后增加 | +| `MaxSpringCharges` | `int` | 配置 SO | 灵泉次数上限(探索可升级)| +| `SpringKillPoints` | `int` | 0 | 当前击杀点数(达阙后清零)| +| `SpringKillThreshold` | `int` | 配置 SO | 增加 1 次灵泉所需击杀点数 | +| `CurrentGeo` | `int` | 0 | 当前货币 | +| `InvincibleTimer` | `float` | 0 | 无敌帧剩余时间 | +| `IsInvincible` | `bool` | false | 是否处于无敌状态 | +| `CurrentGeo` | `int` | 0 | 当前货币 | +| `InvincibleTimer` | `float` | 0 | 无敌帧剩余时间 | +| `IsInvincible` | `bool` | false | 是否处于无敌状态 | + +### 方法(供外部调用) + +| 方法 | 调用方 | 说明 | +|------|--------|------| +| `TakeDamage(int amount)` | `HurtBox` → `PlayerController` | 扣血,触发 `OnHPChanged` 频道 | +| `HealHP(int amount)` | `SpringState` | 回血,触发频道 | +| `AddSoulPower(int amount)` | 攻击命中调用 | 增加灵力(上限 MaxSoulPower)| +| `ConsumeSoulPower(int amount)` | `SkillManager`(魂技能) | 消耗灵力,返回 bool 表示是否成功 | +| `AddSpiritPower(int amount)` | 自动恢复计时器 | 增加魄元 | +| `ConsumeSpiritPower(int amount)` | `SkillManager`(魄技能) | 消耗魄元,返回 bool | +| `AddKillPoints(int points)` | 敌人死亡调用 | 增加击杀点数,自动检查是否增加灵泉次数 | +| `UseSpring()` | `SpringState` | 消耗 1 次灵泉,返回 bool | +| `RestoreSpringCharges()` | `SavePoint` 交互 | 恢复灵泉次数至上限 | +| `AddGeo(int amount)` | `Collectible.OnPickup` | 增加 Geo,触发频道 | +| `BeginInvincibility(float duration)` | `HurtState` / `DashState` | 开始无敌帧(带计时)| +| `HasAbility(AbilityType)` | 各 State | 检查能力是否解锁 | +| `UnlockAbility(AbilityType)` | `AbilityUnlock` 世界物件 | 解锁能力 | + +### Soul 获取规则 + +> **灵力**:近战技能驱动资源 + +| 来源 | 灵力增量 | +|------|----------| +| 攻击命中普通敌人 | +10 | +| 攻击命中 Boss | +5 | +| 弹反成功 | +20 | +| 受到伤害 | +0 | + +> **魄元**:自动回复资源 + +| 回复时机 | 魄元回复量 | +|---------|----------| +| 每秒自动回复 | +`SpiritRegenRate`(配置 SO)| +| 使用魄技能 | -技能消耗 | + +> **灵泉使用次数**:击杀驱动资源 + +| 来源 | 点数 | +|------|------| +| 击杀景通敌人 | +1 点 | +| 击杀精英怪 | +3 点 | +| 击杀 Boss | +5 点 | +点数积累至 `SpringKillThreshold` 后自动+1次灵泉使用次数,点数清零。 + +### 三资源生命周期总览 + +``` +┌──────────────────────────────────────────────────────────────────┐ +│ 灵力(SoulPower) 资源性质:近战积累,不自动恢复 │ +├──────────────────────────────────────────────────────────────────┤ +│ 增加来源: │ +│ 近战命中普通敌人 +10 (PlayerCombat → OnHitBoxTriggered) │ +│ 近战命中 Boss +5 (PlayerCombat → OnHitBoxTriggered) │ +│ 弹反成功 +33 (ParrySystem → OnParrySuccess) │ +│ 消耗: │ +│ 魂技能施放 −技能 baseCost (SkillManager.TryCastSoul) │ +│ 重置为 0: │ +│ 玩家死亡 (HurtState Death 进入时) │ +│ 存档点读取时按 SaveData 恢复 │ +└──────────────────────────────────────────────────────────────────┘ + +┌──────────────────────────────────────────────────────────────────┐ +│ 魄元(SpiritPower) 资源性质:自动恢复,持续消耗 │ +├──────────────────────────────────────────────────────────────────┤ +│ 增加来源: │ +│ 时间自动恢复 +SpiritRegenRate/s (PlayerStats.Update) │ +│ 消耗: │ +│ 魄技能 1/2 施放 −技能 baseCost (SkillManager.TryCastSpirit) │ +│ 重置为最大: │ +│ 死亡复活(返回最近存档点) │ +│ 存档点交互(同时恢复灵泉) │ +│ 不受影响: │ +│ 受伤不消耗魄元 │ +└──────────────────────────────────────────────────────────────────┘ + +┌──────────────────────────────────────────────────────────────────┐ +│ 灵泉次数(SpringCharges) 资源性质:击杀驱动,有限次数 │ +├──────────────────────────────────────────────────────────────────┤ +│ 增加来源(击杀点数): │ +│ 击杀普通敌人 +1 pt → 积累到阈值 → +1次 (PlayerStats) │ +│ 击杀精英怪 +3 pt → 积累到阈值 → +1次 │ +│ 击杀 Boss +5 pt → 积累到阈值 → +1次 │ +│ 消耗: │ +│ 使用灵泉(按键) −1次 (SpringState → PlayerStats.UseSpring) │ +│ 恢复为最大: │ +│ 与存档点(SavePoint)交互 │ +│ 死亡复活(不恢复,死亡惩罚的一部分) │ +│ 上限升级: │ +│ 拾取"灵泉上限容器"(类 Hollow Knight 心脏容器) │ +│ → PlayerStats.MaxSpringCharges++ │ +└──────────────────────────────────────────────────────────────────┘ + +三资源联动规则: + 灵力满格(100)→ 魂技能可用(SkillManager 检查 CurrentSoulPower ≥ baseCost) + 魄元满格(100)→ 魄技能可多次连用(无额外奖励,数值设计时注意不要让满魄元过强) + 灵泉耗尽(0) → UseSpring 输入被 PlayerStats.UseSpring() 拒绝(返回 false), + SpringState 不进入 +``` + +--- + +## 5. PlayerCombat — 战斗管理 + +`PlayerCombat` 管理攻击**连击题**和 **HitBox 开关**,并考虑**当前形态**的攻击动画适配: + +### 连击状态机 + +``` +ComboState 枚举: + None → Attack1 → Attack2 → Attack3 → None (重置) + ↑____连击窗口内输入_____| (各形态均 3 连击,岗開/动作组各形态独立) +``` + +| 连击段 | 触发方式 | HitBox | 伤害倍率 | 说明 | +|--------|---------|--------|---------|------| +| `Attack1` | 第一次攻击输入 | `HitBox_Ground` | ×1 | 水平支行(各形态动画不同)| +| `Attack2` | 连击窗口内再按攻击 | `HitBox_Ground` | ×1 | 连击第 2 击 | +| `Attack3` | 连击窗口内再按攻击 | `HitBox_Ground` | ×2 | 第 3 击(重击)| +| `AirAttack` | 空中攻击 | `HitBox_Air` | ×1 | 空中水平支行 | +| `UpAttack` | MoveY > 0.5 时攻击 | `HitBox_Up` | ×1 | 上劈,角色微小下移 | +| `DownAttack` | 空中 + MoveY < -0.5 | `HitBox_Down` | ×1 | 下劈,命中弹起(Pogo)| +| `ParryCounter` | 弹反成功后攻击 | `HitBox_Ground` | ×3 | 不可被弹反 | + +### 形态攻击适配 + +各形态的连击段数和功能一致(3 连击 + 空中/上/下),但动作组、HitBox 尺寸、伤害数值完全不同。`PlayerCombat` 订阅 `WeaponManager.OnWeaponChanged`,形态切换时自动刷新所有攻击数据: + +```csharp +// PlayerCombat 监听武器切换事件(形态切换 → WeaponManager → PlayerCombat) +_weaponManager.OnWeaponChanged += RefreshWeaponData; + +// RefreshWeaponData:刷新动画片段 + DamageSource + HitBox 尺寸 + ResetCombo() +// 详见 53_WeaponSystem §5 +``` + +### 连击窗口时长 + +| 参数 | 值 | 位置 | +|------|-----|------| +| `ComboWindowDuration` | 0.5s | `PlayerCombatConfigSO` | +| `ComboResetDelay` | 0.3s(Attack3 后)| `PlayerCombatConfigSO` | + +连击窗口由 `AttackState.OnAttackAnimationComplete` 事件触发开启,超时后 `ComboState` 回到 `None`。 + +--- + +## 6. FormController — 形态系统 + +`FormController` 管理三种形态的切换、当前形态的技能居子、以及形态切换过渡。 + +### FormSO — 形态数据 + +```csharp +[CreateAssetMenu(menuName = "Player/Form")] +public class FormSO : ScriptableObject +{ + [Header("形态标识")] + public string formId; // 存档 + 识别 ID,如 "SkyForm"(替代枚举,彻底数据驱动) + public string displayName; // "天魂" + public Sprite formIcon; // HUD 图标 + public Color formAccentColor; // HUD/动画特效色调 + + [Header("默认武器")] + /// 该形态绑定的默认武器 SO(替代旧 FormAttackConfig 内联结构体) + public WeaponSO defaultWeapon; // 连击动画 + DamageSources + HitBox 配置,见 53_WeaponSystem + + [Header("技能配置")] + public FormSkillSO soulSkill; // 魂技能(消耗灵力) + public FormSkillSO spiritSkill1; // 魄技能 1(消耗魄元) + public FormSkillSO spiritSkill2; // 魄技能 2(消耗魄元) +} +// 注:FormType 枚举已移除。使用 formId 字符串识别形态。 +// 新增形态只需:① 创建新 FormSO 资产 ② 加入 FormConfigSO.forms[] ③ 配置对应输入槽 +// FormAttackConfig 已废弃——其所有字段已迁移至 WeaponSO(见 53_WeaponSystem §2)。 +``` + +### FormController 组件 + +```csharp +namespace BaseGames.Player +{ + /// + /// 形态控制器。通过 FormConfigSO 持有所有可用形态, + /// 不硬编码具体形态数量——新增形态只需创建新 FormSO 并加入 FormConfigSO.forms[]。 + /// + public class FormController : MonoBehaviour + { + [SerializeField] FormConfigSO _config; // 持有所有可用形态的配置 SO + [SerializeField] InputReaderSO _input; + + [Header("事件频道—发布")] + [SerializeField] FormEventChannelSO _onFormChanged; // HUD、动画层监听 + + public FormSO CurrentForm { get; private set; } + public FormSO[] AllForms => _config.forms; // WeaponManager 全形态枚举时使用 + public event Action OnFormChanged; + + void Awake() + { + // 默认激活第一个形态(Index 0 = 天魂) + if (_config.forms.Length > 0) + CurrentForm = _config.forms[0]; + } + + void OnEnable() + { + // 形态切换按固定槽位 Index 映射输入事件: + // Slot 0 (SkyForm) → SwitchSkyFormEvent (键 1 / D-Pad Left) + // Slot 1 (EarthForm) → SwitchEarthFormEvent (键 2 / D-Pad Down) + // Slot 2 (DeathForm) → SwitchDeathFormEvent (键 3 / D-Pad Right) + // 若未来扩展第 4 形态,只需在 InputReaderSO 中增加 SwitchForm4Event 并绑定此处 + _input.SwitchSkyFormEvent += () => SwitchToIndex(0); + _input.SwitchEarthFormEvent += () => SwitchToIndex(1); + _input.SwitchDeathFormEvent += () => SwitchToIndex(2); + } + + void OnDisable() + { + _input.SwitchSkyFormEvent -= () => SwitchToIndex(0); + _input.SwitchEarthFormEvent -= () => SwitchToIndex(1); + _input.SwitchDeathFormEvent -= () => SwitchToIndex(2); + } + + void SwitchToIndex(int index) + { + if (index < 0 || index >= _config.forms.Length) return; + SwitchForm(_config.forms[index]); + } + + void SwitchForm(FormSO newForm) + { + if (newForm == null || newForm == CurrentForm) return; + CurrentForm = newForm; + _onFormChanged.Raise(newForm); + OnFormChanged?.Invoke(); + } + } +} +``` + +### FormConfigSO — 形态配置容器 + +```csharp +/// +/// 持有全部可用形态的有序列表。 +/// Index 对应输入槽(0 = SkyForm, 1 = EarthForm, 2 = DeathForm …)。 +/// 新增形态时:① 创建 FormSO ② 加入此数组尾部 ③ 配置新输入槽,无需改动 FormController。 +/// +[CreateAssetMenu(menuName = "Player/FormConfig")] +public class FormConfigSO : ScriptableObject +{ + public FormSO[] forms; // 有序列表,Index 即输入槽编号 +} +``` + +**资产存放**:`Assets/ScriptableObjects/Player/FormConfig.asset` +**检验规范**:Custom Inspector 在 `forms.Length == 0` 时显示黄色警告框。 + +### FormEventChannelSO + +```csharp +[CreateAssetMenu(menuName = "Events/FormEventChannel")] +public class FormEventChannelSO : ScriptableObject +{ + public event Action OnEventRaised; + public void Raise(FormSO form) => OnEventRaised?.Invoke(form); +} +``` + +### HUD 形态切换预设效果 + +形态切换本身**无前摇**(不中断当前动作),下一次攻击/技能输入时输出新形态动作。如需前摇,在 `FormSO.SwitchInAnimation`(可选)中配置。 + +--- +``` + +| 连击段 | 触发方式 | HitBox | 伤害倍率 | 说明 | +|--------|---------|--------|---------|------| +| `Attack1` | 第一次攻击输入 | `HitBox_Ground` | ×1 | 横向挥击 | +| `Attack2` | 连击窗口内再按攻击 | `HitBox_Ground` | ×1 | 斜上挥击 | +| `Attack3` | 连击窗口内再按攻击 | `HitBox_Ground` | ×2 | 下砸重击 | +| `AirAttack` | 空中攻击 | `HitBox_Air` | ×1 | 下斩 | +| `UpAttack` | MoveY > 0.5 时攻击 | `HitBox_Up` | ×1 | 上挑 | +| `ParryCounter` | 弹反成功后攻击 | `HitBox_Ground` | ×3 | 不可被弹反 | + +### 连击窗口时长 + +| 参数 | 值 | 位置 | +|------|-----|------| +| `ComboWindowDuration` | 0.5s | `PlayerCombatConfigSO` | +| `ComboResetDelay` | 0.3s(Attack3 后)| `PlayerCombatConfigSO` | + +连击窗口由 `AttackState.OnAttackAnimationComplete` 事件触发开启,超时后 `ComboState` 回到 `None`。 + +--- + +## 7. Animancer 双层动画系统 + +``` +AnimancerComponent +├── Layer[0] — 全身动画 +│ 权重: 1.0,AvatarMask: 全身 +│ 播放: Idle / Run / Fall / Land / Hurt / Death / Dash / UseSpring / Interact / WallGrab +│ +└── Layer[1] — 上半身覆盖(攻击/弹反/技能) + 权重: 0.0 → 1.0(攻击/技能时),结束后淡出回 0.0 + AvatarMask: UpperBody(脊椎以上所有骨骼) + IsAdditive: false(覆盖模式) + 播放: Attack1/2/3 / AirAttack / UpAttack / DownAttack / SoulSkill / SpiritSkill1 / SpiritSkill2 + / ParryPose / ParrySuccess / ParryCounter +``` + +**双层动画效果**: + +| 玩家状态 | Layer[0] | Layer[1] | 视觉效果 | +|---------|---------|---------|---------| +| 奔跑 | Run | 无(权重=0)| 仅奔跑 | +| 奔跑时攻击 | Run(继续)| Attack1 | 腿部奔跑 + 上身攻击 | +| 空中攻击 | Fall | AirAttack | 下落姿态 + 下斩动作 | +| 弹反 | ParryPose(全身)| 无 | 弹反姿态(全身,Layer[1]关闭)| + +--- + +## 7. PlayerAnimationConfigSO + +`PlayerAnimationConfigSO` 存放所有 `ClipTransition`,Inspector 中拖入对应 AnimationClip: + +### Layer[0] 全身动画 + +| 字段名 | Fade 时长 | 说明 | +|--------|----------|------| +| `Idle` | 0.2s | 待机循环 | +| `Run` | 0.1s | 奔跑循环 | +| `JumpRise` | 0.05s | 跳跃上升 | +| `JumpFall` | 0.15s | 下落 | +| `Land` | 0.05s | 落地(接 Idle/Run)| +| `Dash` | 0.05s | 冲刺 | +| `Hurt` | 0.05s | 受击 | +| `Death` | 0.1s | 死亡(不循环)| +| `Interact` | 0.1s | 交互动作 | +| `WallSlide` | 0.1s | 墙壁滑行(解锁后)| +| `Swim` | 0.2s | 游泳循环(P1,解锁后)| + +### Layer[1] 上半身动画 + +| 字段名 | Fade 时长 | AnimationEvent | 说明 | +|--------|----------|---------------|------| +| `Attack1` | 0.05s | `EnableHitBox` Frame 3, `DisableHitBox` Frame 8 | 第1击 | +| `Attack2` | 0.05s | `EnableHitBox` Frame 3, `DisableHitBox` Frame 7 | 第2击 | +| `Attack3` | 0.05s | `EnableHitBox` Frame 2, `DisableHitBox` Frame 10 | 第3击(重)| +| `AirAttack` | 0.05s | `EnableHitBox` Frame 2, `DisableHitBox` Frame 8 | 空中下斩 | +| `UpAttack` | 0.05s | `EnableHitBox` Frame 3, `DisableHitBox` Frame 7 | 上挑 | +| `ParryPose` | 0.08s | — | 弹反等待姿态(Layer[0]) | +| `ParrySuccess` | 0.05s | — | 弹反成功(Layer[0])| +| `ParryCounter` | 0.05s | `EnableHitBox` Frame 2 | 弹反反击 | + +--- + +## 9. FSM 状态体系 + +使用 `Animancer.FSM.StateMachine` 作为 FSM 骨架: + +### 状态优先级(数字越高越优先抢占) + +| 优先级 | 状态 | 说明 | +|--------|------|------| +| 100 | `HurtState` (Death) | 死亡,不可被打断 | +| 90 | `HurtState` (Alive) | 受击,只能被死亡打断 | +| 80 | `DashState` | 冲刺无敌,只能被受伤死亡打断 | +| 75 | `SoulSkillState` | 魂技能前摇,可被冲刺/受伤打断 | +| 72 | `SpiritSkillState` | 魄技能前摇,可被冲刺/受伤打断 | +| 70 | `ParryState` | 弹反,可被受伤打断 | +| 60 | `AttackState` | 攻击(Layer[1]),可被弹反/受伤打断 | +| 55 | `SpringState` | 用灵泉(前摇可打断)| +| 40 | `InteractState` | 交互,可被大多数行为打断 | +| 35 | `WallGrabState` | 抓墙悬挂,可被冲刺/技能打断 | +| 30 | `AirState` | 空中,可被攻击/弹反/冲刺打断 | +| 20 | `RunState` | 奔跑 | +| 10 | `SwimState` | 游泳(P1)| +| 0 | `IdleState` | 待机(最低)| + +### 状态转换规则 + +``` +任意状态 + ├─ 受击(HP > 0) → HurtState (Alive) [强制 ForceState] + ├─ 受击(HP = 0) → HurtState (Death) [强制 ForceState] + └─ (具体见下方状态详细设计) + +IdleState + ├─ 移动输入 → RunState + ├─ 跳跃输入 → AirState + ├─ 攻击输入 → AttackState (Layer 1) + ├─ 弹反输入 → ParryState + ├─ 冲刺输入 → DashState + ├─ SoulSkill + 灵力足够 → SoulSkillState + ├─ SpiritSkill1/2 + 魄元足够 → SpiritSkillState + ├─ UseSpring + 灵泉次数≥1 → SpringState + └─ 交互输入 + 有互动目标 → InteractState + +RunState + ├─ 无移动输入 → IdleState + ├─ 跳跃输入 → AirState + ├─ 攻击输入 → AttackState (Layer 1)(保持 RunState,Layer[1] 叠加) + ├─ 弹反输入 → ParryState + ├─ 冲刺输入 → DashState + ├─ SoulSkill/SpiritSkill → 对应技能 State + └─ UseSpring → SpringState + +AirState(统一处理跳跃/双跳/下落) + ├─ 落地 → IdleState 或 RunState(视水平输入) + ├─ 跳跃输入(双跳可用)→ 重置 AirState(在 AirState 内部处理,不切换状态) + ├─ 贴墙 + 朝墙输入 → WallGrabState(见 26_WallMechanicsSystem) + ├─ 攻击输入 → AttackState (Layer 1) + ├─ 弹反输入 → ParryState + └─ 冲刺输入 + 冲刺可用 → DashState + +WallGrabState(抓墙悬挂,见 26_WallMechanicsSystem) + ├─ 跳跃输入 → 蹬墙跳(背墙/对墙,内部判断)→ AirState + ├─ 按反方向键或落地 → AirState / IdleState + ├─ 冲刺输入 → DashState + └─ 技能输入 → 对应技能 State + +DashState + ├─ 冲刺时长结束 → AirState 或 IdleState/RunState + └─ (冲刺无敌,忽略受击) + +AttackState(Layer[1] 叠加,Layer[0] 保持原状态) + ├─ 动画结束 → Layer[1] 淡出,恢复原状态(Idle/Run/Air) + ├─ 连击窗口内攻击输入 → 切换至下一连击段 + └─ 弹反输入 → ParryState(打断攻击,Layer[1] 立即淡出) + +SoulSkillState / SpiritSkillState(Layer[1] 叠加) + ├─ 前摇动画结束 → 执行技能效果 + └─ 冲刺/受伤打断 → DashState / HurtState(技能费用已扣除) + +SpringState + ├─ 前摇完成 → 立即回血,进入后摇 + ├─ 前摇被打断 → IdleState(灵泉次数已扣,不返还) + └─ 后摇结束 → IdleState/RunState + +ParryState + ├─ 弹反成功 → 播放 ParrySuccess,开启反击窗口 + │ ↓ 反击窗口内攻击 → AttackState (ParryCounter) + │ ↓ 反击窗口超时 → IdleState/RunState + └─ 弹反超时 → IdleState/RunState + +HurtState + └─ 硬直时长结束 → IdleState +``` + +--- + +## 10. 状态详细设计 + +### PlayerAirState — 空中状态 + +AirState 内部管理多种空中子行为(不拆分为多个 State,避免频繁切换): + +| 空中行为 | 触发条件 | 说明 | +|---------|---------|------| +| **初始跳跃** | 地面按下跳跃 / Coyote Time | 施加 `JumpForce` 冲量 | +| **可变跳跃高度** | 松开跳跃键时速度仍向上 | `CutJump()`:垂直速度截断 | +| **双跳** | 空中按下跳跃 + `HasDoubleJump` + 未使用过 | 重置垂直速度 + 施加 `DoubleJumpForce` | +| **跳跃顶点缓降** | 上升速度接近 0 | 重力系数降低,轻盈漂浮感 | +| **下垂加速** | 垂直速度 < 0 | 额外重力 × `FallMultiplier` | +| **抑制单向平台** | 下方输入 + 跳跃键 | 临时忽略 `OneWayPlatform` Layer | + +### PlayerDashState — 冲刺状态 + +| 参数 | 值 | 位置 | +|------|-----|------| +| `DashSpeed` | 18 units/s | `PlayerMovementConfigSO` | +| `DashDuration` | 0.18s | `PlayerMovementConfigSO` | +| `DashCooldown` | 0.5s | `PlayerMovementConfigSO` | +| `InvincibleDuringDash` | true | 冲刺全程无敌帧 | +| `CanDashInAir` | false(P0) / true(解锁后)| `PlayerStats.HasAerialDash` | + +### PlayerHurtState — 受击/死亡状态 + +``` +OnStateEnter(DamageInfo info) + 1. 播放 Hurt 动画(Layer[0]) + 2. PlayerMovement.ApplyKnockback(info) + 3. PlayerStats.BeginInvincibility(IFrameDuration) + 4. PlayerFeedback.OnTakeHit() + ↓ +若 HP = 0: + 5. 播放 Death 动画 + 6. 禁用所有输入(InputReader.DisableAllInput) + 7. 延迟 1.2s 后触发 OnPlayerDied 事件频道 +``` + +--- + +## 11. 能力解锁系统 + +`AbilityType` 枚举定义所有可解锁能力,`PlayerStats.HasAbility(type)` 在各 State 中查询: + +| 能力枚举值 | 触发状态改变 | 说明 | +|-----------|-----------|------| +| `DoubleJump` | `AirState`:允许双跳 | 默认锁定 | +| `WallGrab` | `WallGrabState`:允许抓墙 | 默认**解锁**(基础能力)| +| `AerialDash` | `DashState`:允许空中冲刺 | 默认锁定 | +| `InvincibleDash` | `DashState`:冲刺全程无敌 | 默认锁定(升级冲刺)| +| `Swim` | 接触水体不死亡,进入 `SwimState` | 默认锁定(P1)| +| `Parry` | `ParryState`:弹反可用 | 默认**解锁** | + +能力解锁通过 `AbilityUnlock` 世界物件(见 `08_WorldSystem`)触发,调用 `PlayerStats.UnlockAbility(type)`,同步到 `SaveData`。 + +## 12. PlayerMovementConfigSO + +所有移动相关数值,策划友好配置: + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `WalkSpeed` | `float` | 6 | 地面行走速度(units/s)| +| `RunSpeed` | `float` | 9 | 奔跑速度(触发加速后)| +| `JumpForce` | `float` | 16 | 跳跃冲量 | +| `DoubleJumpForce` | `float` | 14 | 双跳冲量 | +| `WallJumpAwayHForce` | `float` | 10 | 蓬墙跳—背墙跳水平分量 | +| `WallJumpTowardHForce` | `float` | 3 | 蓬墙跳—对墙跳水平分量 | +| `WallJumpAwayHForce` | `float` | 10 | 蓬墙跳—背墙跳水平分量 | +| `WallJumpTowardHForce` | `float` | 3 | 蓬墙跳—对墙跳水平分量 | +| `WallJumpVerticalForce` | `float` | 15 | 蓬墙跳垂直分量(两种共用)| +| `WallGrabSlideSpeed` | `float` | 2 | 抓墙超出高度记忆值时强制下滑速度 |记忆值时强制下滑速度 | +| `DashSpeed` | `float` | 18 | 冲刺速度 | +| `DashDuration` | `float` | 0.18 | 冲刺持续时间 | +| `DashCooldown` | `float` | 0.5 | 冲刺冷却 | +| `FallMultiplier` | `float` | 2.5 | 下坠额外重力倍率 | +| `LowJumpMultiplier` | `float` | 2.0 | 短跳额外重力倍率 | +| `CoyoteTimeDuration` | `float` | 0.12 | 土狼时间 | +| `JumpBufferDuration` | `float` | 0.15 | 跳跃缓冲窗口 | +| `GroundCheckDistance` | `float` | 0.05 | 地面检测距离 | +| `InvincibleAfterHit` | `float` | 1.2 | 受击无敌帧时长 | + +--- + +## 12. 编辑器友好设计 + +### PlayerController 自定义 Inspector + +Play Mode 下显示完整运行时状态: + +``` +┌─ PlayerController ─────────────────────────────┐ +│ Current State : WallGrabState │ +│ 形态 : 天魂 [Sky] │ +│ HP : ████████████░░ 8 / 10 │ +│ 灵力 : ███████░░░░░░░ 70 / 100 │ +│ 魄元 : ████████████░░ 85 / 100 │ +│ 灵泉 : 3 / 5 次 │ +│ Geo : 340 │ +│ IsGrounded : ✓ │ +│ FacingDir : → (+1) │ +│ Invincible : ░░░░░░░░░░ (0.00s) │ +│ ─────────────────────────────────────────────── │ +│ Abilities: [DoubleJump ✓] [WallGrab ✓] │ +│ [AerialDash ✗] [InvDash ✗] │ +│ ─────────────────────────────────────────────── │ +│ [强制 Idle] [强制 Run] [强制 Air] [Hurt 2] │ +│ [AerialDash ✗] [InvDash ✗] │ +│ ─────────────────────────────────────────────── │ +│ [强制 Idle] [强制 Run] [强制 Air] [Hurt 2] │ +└───────────────────────────────────────────────┘ +``` + +### Scene 视图 Gizmos + +- **地面检测区域**:绘制绿色/红色矩形(绿=接触地面,红=空中) +- **HitBox 范围**:绘制各方向 HitBox 橙色矩形(仅激活时显示) +- **墙体检测 Raycast**:绘制左右两侧蓝色射线 + +--- + +## 14. 空中冲刺(Aerial Dash) + +> **依赖能力**:`AbilityType.AerialDash`(默认锁定,探索解锁) + +空中冲刺是《丝之歌》的核心移动机制:玩家在空中获得一次额外冲刺机会,大幅扩展垂直与横向移动自由度。 + +### 13.1 设计参数 + +| 参数 | 值 | 位置 | +|------|-----|------| +| `AerialDashSpeed` | 15 units/s(地面冲刺的 83%)| `PlayerMovementConfigSO` | +| `AerialDashDuration` | 0.20s | `PlayerMovementConfigSO` | +| `AerialDashCooldown` | 独立计次(见下方)| — | +| `InvincibleDuringAerialDash` | true(与地面冲刺相同)| — | +| `AerialDashCharges` | 1(固定,护符可扩展至 2)| `PlayerStats` | +| `AerialDashDirection` | 8 方向(左摇杆/键盘方向)| `PlayerMovement` | + +### 13.2 充能重置条件 + +空中冲刺充能(Charge)在以下情况**重置为最大值**: + +| 条件 | 说明 | +|------|------| +| 落地 | 触地瞬间立即恢复 | +| 墙跳触发后 | 墙跳给予新的空中冲刺机会(允许垂直攀升)| +| 命中敌人(HitBox 触发有效命中)| 《丝之歌》核心机制:攻击命中即恢复(鼓励进攻性空中移动)| +| 弹反成功 | 弹反也视为"命中",给予充能恢复 | + +```csharp +// PlayerStats 追踪充能 +int _aerialDashChargesRemaining; + +public void OnAerialDashUsed() => _aerialDashChargesRemaining--; +public void ResetAerialDashCharges() => _aerialDashChargesRemaining = MaxAerialDashCharges; +public bool HasAerialDashCharge => _aerialDashChargesRemaining > 0 + && HasAbility(AbilityType.AerialDash); +``` + +```csharp +// PlayerCombat:有效命中时通知充能重置 +void OnHitBoxTriggered(HurtInfo hurt) +{ + if (hurt.hitCount > 0) // 有效命中(不是空挥) + _stats.ResetAerialDashCharges(); +} +``` + +### 13.3 DashState 扩展(空中冲刺分支) + +`DashState` 内部区分地面冲刺和空中冲刺: + +```csharp +public class DashState : PlayerStateBase +{ + bool _isAerialDash; + + public override void OnStateEnter() + { + var isGrounded = _movement.IsGrounded; + _isAerialDash = !isGrounded; + + float speed = _isAerialDash ? _config.AerialDashSpeed : _config.DashSpeed; + float duration = _isAerialDash ? _config.AerialDashDuration : _config.DashDuration; + + // 方向:空中冲刺支持 8 方向;地面冲刺仅水平 + Vector2 dir = _isAerialDash + ? GetAerialDashDirection() + : new Vector2(_movement.FacingDir, 0); + + _movement.BeginDash(dir, speed, duration); + _stats.BeginInvincibility(duration); + + if (_isAerialDash) + _stats.OnAerialDashUsed(); + + PlayDashAnimation(_isAerialDash, dir); + } + + Vector2 GetAerialDashDirection() + { + var input = _inputReader.MoveInput; + // 若无输入,默认朝向当前面朝方向(水平) + return input.sqrMagnitude > 0.01f + ? GetClosest8Direction(input) + : new Vector2(_movement.FacingDir, 0); + } + + // 将任意输入方向量化为 8 个标准方向之一 + static Vector2 GetClosest8Direction(Vector2 input) + { + float angle = Mathf.Atan2(input.y, input.x) * Mathf.Rad2Deg; + float snapped = Mathf.Round(angle / 45f) * 45f; + float rad = snapped * Mathf.Deg2Rad; + return new Vector2(Mathf.Cos(rad), Mathf.Sin(rad)).normalized; + } +} +``` + +### 13.4 可进入 DashState 的新条件 + +在 FSM 转换中,`AirState` 现增加额外判断: + +``` +AirState + ...(原有转换) + └─ 冲刺输入 + HasAerialDashCharge → DashState(空中冲刺) +``` + +`CanDashInAir` 由 `PlayerStats.HasAerialDashCharge` 替代,原 `CanDashInAir` bool 参数废弃。 + +### 13.5 视觉反馈 + +| 阶段 | 效果 | 组件 | +|------|------|------| +| 空中冲刺激活 | 冲刺拖影颜色变为蓝紫色(区别于地面冲刺白色)| `TrailRenderer` 参数切换 | +| 充能耗尽 | HitBox 周围短暂显示灰色粒子(无充能警示)| `OnAerialDashUsed` 调用 Feel FB | +| 充能恢复(命中)| 玩家周围一圈蓝色闪光 | `OnHitBoxTriggered` 调用 Feel FB | +| 落地恢复 | 轻微光环扩散 | `OnLand` 事件触发(可选,避免频繁播放)| + +### 13.6 参数更新(PlayerMovementConfigSO) + +在 §11 参数表末尾新增: + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `AerialDashSpeed` | `float` | 15 | 空中冲刺速度 | +| `AerialDashDuration` | `float` | 0.20 | 空中冲刺持续时间 | +| `MaxAerialDashCharges` | `int` | 1 | 默认最大充能(护符扩展至 2)| + +--- + +## 14. 下冲(Plunge / Down Dash) + +> **依赖能力**:无(基础能力) +> **触发条件**:空中 + 向下输入 + 冲刺键 + +下冲是垂直向下的特殊冲刺,落地时产生冲击波效果,可对地面敌人造成 AoE 伤害。 + +### 14.1 设计参数 + +| 参数 | 值 | 说明 | +|------|-----|------| +| `PlungeSpeed` | 28 units/s | 下冲速度(比空中冲刺更快)| +| `PlungeImpactRadius` | 2.0 units | 落地冲击波范围 | +| `PlungeImpactDamage` | `BaseDamage × 2.0` | 冲击波伤害 | +| `PlungeStagger` | 强硬直(0.8s)| 范围内所有敌人 | +| `PlungeInvincible` | true(下冲全程)| 无敌帧 | +| `PlungeConsumesDash` | true | 消耗冲刺充能(与空中冲刺互斥,同一次空中只能选一个)| + +### 14.2 触发条件与优先级 + +``` +AirState 内部判断(优先级从高到低): + 1. 向下输入 + 冲刺键 + 非下落过快 → PlungeState(下冲) + 2. 任意方向输入 + 冲刺键 + HasAerialDashCharge → DashState(空中冲刺) + 3. 冲刺键(无方向输入) + HasAerialDashCharge → DashState(水平空中冲刺) +``` + +### 14.3 PlungeState 实现 + +```csharp +public class PlungeState : PlayerStateBase +{ + bool _hasLanded; + + public override void OnStateEnter() + { + _hasLanded = false; + // 取消垂直速度,施加极大向下速度 + _movement.SetVelocity(new Vector2(_movement.Velocity.x * 0.2f, -_config.PlungeSpeed)); + _stats.BeginInvincibility(_config.PlungeDuration); + _stats.OnAerialDashUsed(); // 消耗充能(共用空中冲刺充能) + PlayAnimation("Plunge_Descend"); + } + + public override void OnStateFixedUpdate() + { + if (_hasLanded) return; + if (_movement.IsGrounded) + TriggerImpact(); + } + + void TriggerImpact() + { + _hasLanded = true; + PlayAnimation("Plunge_Impact"); + + // 冲击波 AoE + var hits = Physics2D.OverlapCircleAll( + _movement.transform.position, + _config.PlungeImpactRadius, + _enemyLayer); + + foreach (var hit in hits) + { + if (hit.TryGetComponent(out var target)) + target.TakeDamage(new DamageInfo + { + damage = _combat.CalculateDamage(_config.PlungeImpactDamage), + knockback = (hit.transform.position - _movement.transform.position).normalized * 5f, + isParryable = false, // 落地冲击不可弹反 + staggerDuration = 0.8f, + }); + } + + // 演出 + _feedback.PlayFeedbacks("PlungeImpact"); + + // 轻微回弹(保持手感) + _movement.SetVelocity(new Vector2(_movement.Velocity.x, 4f)); + + // 延迟后转换到 Idle/Run + StartCoroutine(ExitAfterDelay(0.15f)); + } + + IEnumerator ExitAfterDelay(float delay) + { + yield return new WaitForSeconds(delay); + _fsm.TrySetState(_movement.IsGrounded + ? (PlayerStateBase)_idle + : _air); + } +} +``` + +### 14.4 视觉反馈 + +| 阶段 | 效果 | +|------|------| +| 下冲开始 | 玩家 Sprite 变形(向上拉伸 × 1.3,Feel Squash) | +| 下冲中 | 速度线粒子(向上冒出)| +| 落地冲击 | 地面冲击圈(白色扩散环)+ 屏幕震动(Feel Shake Camera)+ 尘土粒子 | +| 冲击范围可视(仅 Debug)| Gizmos 绘制绿色圆圈 | diff --git a/Docs/Design/04_CombatSystem.md b/Docs/Design/04_CombatSystem.md new file mode 100644 index 0000000..7c23ad2 --- /dev/null +++ b/Docs/Design/04_CombatSystem.md @@ -0,0 +1,680 @@ +# 04 · 战斗系统 + +> **命名空间** `BaseGames.Combat` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** `BaseGames.Player` · `BaseGames.Enemies` · `BaseGames.Feedback` +> **参见** [54_PoiseSystem](./54_PoiseSystem.md) — 霸体 / 打断等级系统 + +--- + +## 目录 + +1. [系统总览](#1-系统总览) +2. [DamageInfo — 伤害信息结构](#2-damageinfo--伤害信息结构) +3. [HitBox — 攻击判定](#3-hitbox--攻击判定) +4. [HurtBox — 受击响应](#4-hurtbox--受击响应) +5. [伤害流水线](#5-伤害流水线) +6. [击退计算](#6-击退计算) +7. [连击链与攻击属性](#7-连击链与攻击属性) +8. [伤害层级与 Layer 矩阵](#8-伤害层级与-layer-矩阵) +9. [事件频道集成](#9-事件频道集成) +10. [CombatConfigSO](#10-combatconfigso) +11. [编辑器友好设计](#11-编辑器友好设计) +12. [状态效果系统(StatusEffect / DoT)](#12-状态效果系统statuseffect--dot) +13. [拼刀系统(Nail Clash)](#13-拼刀系统nail-clash) + +--- + +## 1. 系统总览 + +战斗系统的核心原则是**数据驱动 + 物理解耦**: + +- 伤害以 `DamageInfo` 结构体传递,不通过直接引用获取对象 +- `HitBox` 和 `HurtBox` 通过 `Collider2D` 触发器交互,互不直接引用对方 Owner +- 伤害路由全部通过 `OnHitConfirmed` 事件频道广播 +- 击退方向、硬直时长、格挡属性全部封装在 `DamageInfo` 中 + +``` +攻击方 受击方 +────── ────── +AttackState + └─ AnimationEvent: EnableHitBox + └─ HitBox.Activate() + └─ OnTriggerEnter2D(HurtBox) + └─ HurtBox.ReceiveDamage(DamageInfo) + ├─ 本地响应(HP扣减、硬直) + └─ 广播 OnHitConfirmed 频道 + ├─ PlayerStats.AddSoul(+10) + ├─ EnemyFeedback.OnHit() + └─ (其他侦听者) +``` + +--- + +## 2. DamageInfo — 伤害信息结构 + +`DamageInfo` 是**只读值类型**(Struct),在整个伤害流水线中传递,不可修改: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `RawDamage` | `int` | 基础伤害量 | +| `FinalDamage` | `int` | 经过加成/减免后的最终伤害(由 HurtBox 计算)| +| `KnockbackDirection` | `Vector2` | 归一化击退方向 | +| `KnockbackForce` | `float` | 击退力度 | +| `HitStunDuration` | `float` | 受击硬直时长(秒)| +| `DamageType` | `DamageType` | 伤害类型(Normal / Fire / Poison / True)| +| `DamageFlags` | `DamageFlags` | 属性标记(BitFlags,见下方)| +| `SourcePosition` | `Vector2` | 攻击来源世界位置(用于计算击退方向)| +| `SourceLayer` | `int` | 发起攻击的 GameObject Layer(敌人/玩家/环境)| +| `HitFxType` | `HitFxType` | 期望产生的命中特效类型(Spark / Blood / Magic 等)| +| `BreakLevel` | `BreakLevel` | 此次攻击的打断等级(决定能打断多高的霸体,见 [54_PoiseSystem](./54_PoiseSystem.md))| +| `SourceId` | `string` | 攻击来源 ID(DamageSourceSO.sourceId),用于 PoiseOverrideTable 精细规则查询 | + +### DamageFlags(位标记) + +| Flag | 说明 | +|------|------| +| `Unblockable` | 无法被弹反、无法被格挡 | +| `CanBeParried` | 可被弹反 | +| `IgnoreIFrame` | 忽略无敌帧 | +| `PerfectParryOnly` | 只能被完美弹反(高难度攻击)| +| `IsProjectile` | 来自弹射物(影响部分弹反判定)| +| `CanClash` | 近战武器攻击可参与拼刀检测;弹射物、环境伤害、DoT 无此标记 | +| `ForceBreak` | 强制打断目标当前动作,无视霸体等级(`Unbreakable` 除外)| +| `NoKnockback` | 打断时不施加击退,仅进入 HurtState 硬直 | + +### DamageType 说明 + +| 类型 | 说明 | +|------|------| +| `Normal` | 物理攻击,可弹反 | +| `True` | 真实伤害,绕过所有减免,不可弹反 | +| `Fire` | 持续灼烧(P1)| +| `Poison` | 持续中毒(P1)| + +--- + +## 3. HitBox — 攻击判定 + +`HitBox` 是挂在攻击者身上的**触发器组件**,在 AnimationEvent 驱动下激活/关闭: + +### 组件结构 + +``` +[HitBox_Ground] +├── Collider2D (BoxCollider2D,IsTrigger = true) +│ └── Layer: "PlayerAttack" 或 "EnemyAttack" +├── HitBox.cs +│ ├── _damageSource: DamageSourceSO ← 攻击配置(基础伤害/属性) +│ ├── _attackerTransform: Transform ← 用于计算击退方向 +│ ├── _hitCooldown: float ← 同一 HitBox 对同一目标的命中冷却(防多帧重复) +│ └── _canClash: bool ← 是否参与拼刀检测(近战武器 = true,弹射物/环境 = false) +└── (由 PlayerCombat 调用 Activate/Deactivate) +``` + +### HitBox 工作流程 + +1. `AttackState` 初始化时,将攻击属性注入 `HitBox`(`SetDamageSource(DamageSourceSO)`) +2. AnimationEvent `EnableHitBox` 触发 → `HitBox.Activate()`(碰撞体 enabled = true) +3. `OnTriggerEnter2D` 检测碰撞层: + - **HurtBox Layer** → 构建 `DamageInfo`,传递给 `HurtBox.ReceiveDamage(DamageInfo)` + - **对立 HitBox Layer**(PlayerAttack ↔ EnemyAttack)且对方 `_canClash == true` → 路由到 `ClashResolver.ResolveClash(this, other)`,中止伤害处理 +4. 记录命中目标,在冷却时间内不重复命中 +5. AnimationEvent `DisableHitBox` 触发 → `HitBox.Deactivate()`(碰撞体 enabled = false) + +### DamageSourceSO — 攻击属性配置 + +每种攻击有独立 `DamageSourceSO`,存放于 `Assets/ScriptableObjects/Combat/DamageSources/`: + +| 字段 | 类型 | 示例值 | 说明 | +|------|------|--------|------| +| `BaseDamage` | `int` | 5 | 基础伤害 | +| `DamageMultiplier` | `float` | 1.0 | 连击倍率(Attack3 = 2.0)| +| `KnockbackForce` | `float` | 8.0 | 击退力度 | +| `HitStunDuration` | `float` | 0.3s | 目标硬直时长 | +| `DamageType` | `DamageType` | Normal | 伤害类型 | +| `DamageFlags` | `DamageFlags` | CanBeParried | 属性标记 | +| `HitFxType` | `HitFxType` | Spark | 命中特效 | +| `breakLevel` | `BreakLevel` | Light | 此攻击的霸体打断等级(见 [54_PoiseSystem](./54_PoiseSystem.md))| +| `forceBreak` | `bool` | false | 强制打断(无视霸体等级,`Unbreakable` 除外)| + +--- + +## 4. HurtBox — 受击响应 + +`HurtBox` 挂在可受击单位身上,接收 `DamageInfo` 并触发本地响应: + +### 组件结构 + +``` +[HurtBox] +├── Collider2D (BoxCollider2D,IsTrigger = true) +│ └── Layer: "PlayerHurtBox" 或 "EnemyHurtBox" +├── HurtBox.cs +│ ├── _owner: MonoBehaviour ← 宿主(PlayerController 或 EnemyBase) +│ ├── _defenseStat: int ← 防御减免(0 = 无减免) +│ └── UnityEvent OnHurt ← 本地事件,供 Inspector 直接绑定反馈 +└── 调用链: HurtBox → _owner.TakeDamage(DamageInfo) +``` + +### 伤害减免计算 + +$$\text{FinalDamage} = \max(1,\ \text{RawDamage} - \text{DefenseStat})$$ + +> `True` 类型伤害跳过此计算,`FinalDamage = RawDamage` + +--- + +## 5. 伤害流水线 + +``` +AnimationEvent: EnableHitBox + │ + ▼ +HitBox.OnTriggerEnter2D(HurtBox) + │ + ├─ 构建 DamageInfo + │ ├─ RawDamage = DamageSourceSO.BaseDamage × DamageMultiplier + │ ├─ Direction = (HurtBox.position - Attacker.position).normalized + │ ├─ Knockback = DamageSourceSO.KnockbackForce + │ └─ HitStun = DamageSourceSO.HitStunDuration + │ + ▼ +HurtBox.ReceiveDamage(DamageInfo info) + │ + ├─ [检查无敌帧] → 若 IsInvincible && !IgnoreIFrame → 直接返回 + ├─ [检查弹反] → 若 CanBeParried && ParrySystem.IsInParryWindow → 触发弹反流程 + ├─ [计算最终伤害] FinalDamage = max(1, RawDamage - DefenseStat) + ├─ [霸体打断检查] → 查询 PoiseOverrideTable / ForceBreak / 数值比较 → 决定是否打断(见 54_PoiseSystem §5) + ├─ 调用 Owner.TakeDamage(FinalDamage) + ├─ 广播 OnHitConfirmed 事件频道(DamageInfoEventChannelSO) + ├─ 若打断:Owner.ApplyKnockback(info) + Owner.ForceState(HurtState) + ├─ 若不打断:Owner.PlayHitFlash()(仅视觉反馈,动作不中断) + └─ 触发本地 UnityEvent OnHurt +``` + +--- + +## 6. 击退计算 + +击退方向由 `DamageInfo.SourcePosition` 和受击位置共同决定: + +$$\vec{Knockback} = \text{normalize}(\text{HurtPos} - \text{SourcePos}) \times \text{KnockbackForce}$$ + +**特殊情况处理**: + +| 情况 | 处理方式 | +|------|---------| +| 玩家被正下方攻击(如地刺)| 方向强制为 `(0, 1)` 向上 | +| 玩家贴墙被打 | 水平分量减为 50%,保留垂直分量 | +| Boss 击退 | 使用 `DamageInfo` 中的固定方向,不动态计算 | + +--- + +## 7. 连击链与攻击属性 + +### 攻击属性 SO 资产列表 + +存放于 `Assets/ScriptableObjects/Combat/DamageSources/Player/`: + +| 资产名 | BaseDamage | Multiplier | KnockbackForce | Flags | +|--------|-----------|-----------|---------------|-------| +| `DS_Player_Attack1.asset` | 5 | ×1.0 | 5 | CanBeParried | +| `DS_Player_Attack2.asset` | 5 | ×1.0 | 5 | CanBeParried | +| `DS_Player_Attack3.asset` | 5 | ×2.0 | 10 | CanBeParried | +| `DS_Player_AirAttack.asset` | 5 | ×1.0 | 6 | CanBeParried | +| `DS_Player_UpAttack.asset` | 5 | ×1.0 | 8 | CanBeParried | +| `DS_Player_ParryCounter.asset` | 5 | ×3.0 | 15 | Unblockable | + +> 弹反反击 `ParryCounter` 标记为 `Unblockable`,不可再被弹反,且击退力度最大。 + +### 连击命中音效与特效 + +`HitFxType` 枚举控制命中时产生的特效类型,由 `PlayerFeedback` 中对应 `MMF_Player` 响应: + +| HitFxType | 特效 | 音效 | 说明 | +|-----------|------|------|------| +| `Spark` | 金属火花 Particle | SFX_Hit_Spark | 金属敌人 | +| `Slash` | 挥斩光轨特效 | SFX_Hit_Slash | 通用普攻 | +| `Heavy` | 大范围冲击波 | SFX_Hit_Heavy | Attack3 / ParryCounter | +| `Magic` | 魔法闪光 | SFX_Hit_Magic | 魔法攻击(P1)| + +--- + +## 8. 伤害层级与 Layer 矩阵 + +**Physics 2D Layer Collision Matrix 配置**(ProjectSettings → Physics2D): + +| 攻击方 Layer | 可命中 Layer | 不可命中 Layer | +|-------------|------------|--------------| +| `PlayerAttack` | `EnemyHurtBox`, `BreakableObject`, `EnemyAttack`(拼刀)| `PlayerHurtBox`, `PlayerAttack` | +| `EnemyAttack` | `PlayerHurtBox`, `PlayerAttack`(拼刀)| `EnemyHurtBox`, `EnemyAttack` | +| `Projectile_Player` | `EnemyHurtBox`, `Wall`, `BreakableObject` | `PlayerHurtBox` | +| `Projectile_Enemy` | `PlayerHurtBox`, `Wall` | `EnemyHurtBox` | +| `Environment` | `PlayerHurtBox`, `EnemyHurtBox` | — | + +--- + +## 9. 事件频道集成 + +战斗系统发布/订阅的 SO 事件频道: + +| 频道资产 | 类型 | 发布方 | 主要订阅方 | +|---------|------|--------|----------| +| `OnHitConfirmed.asset` | `DamageInfoEventChannelSO` | `HurtBox` | `PlayerStats`(+Soul)、`FeedbackSystem`(特效)、`UI`(伤害数字)| +| `OnPlayerHPChanged.asset` | `IntEventChannelSO` | `PlayerStats` | `HUD`(血条)、`PlayerFeedback`(受伤反馈)| +| `OnEnemyDied.asset` | `TransformEventChannelSO` | `EnemyBase` | `WorldSystem`(掉落物)、`FeedbackSystem`(死亡特效)| +| `OnParrySuccess.asset` | `DamageInfoEventChannelSO` | `ParrySystem` | `PlayerStats`(+33 Soul)、`PlayerFeedback`(弹反反馈)、`EnemySystem`(Stagger)| +| `OnNailClash.asset` | `VoidEventChannelSO` | `ClashResolver` | `PlayerFeedback`(拼刀特效/音效)、`EnemyFeedback`(拼刀反馈)、`CameraSystem`(轻微 Impulse)| + +--- + +## 10. CombatConfigSO + +存放于 `Assets/ScriptableObjects/Config/Combat/CombatConfigSO.asset`: + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `HitCooldownPerTarget` | `float` | 0.05s | HitBox 对同一目标命中冷却 | +| `ComboWindowDuration` | `float` | 0.5s | 连击窗口(攻击动画结束后)| +| `ComboResetDelay` | `float` | 0.3s | 连击链完成后重置延迟 | +| `SoulOnHitEnemy` | `int` | 10 | 命中普通敌人获得 Soul | +| `SoulOnHitBoss` | `int` | 5 | 命中 Boss 获得 Soul | +| `HitFreezeFrames` | `int` | 2 | 命中暂停帧数(Hitstop,以帧为单位)| +| `HitFreezeDuration` | `float` | 0.033s | 命中暂停时长(约 2 帧)| + +--- + +## 11. 编辑器友好设计 + +### HitBox Scene 视图 Gizmos + +- **激活时**:绘制橙色实心矩形(不透明度 50%) +- **未激活时**:绘制橙色虚线矩形(不透明度 20%) +- 鼠标悬停时,显示浮窗:`BaseDamage: 5 | KnockbackForce: 8 | Flags: CanBeParried` + +### HurtBox Scene 视图 Gizmos + +- **正常状态**:绘制绿色半透明矩形 +- **无敌帧中**:绘制黄色闪烁矩形 +- **受击时**:绘制红色矩形(持续 0.1s) + +### DamageSourceSO 自定义 Inspector + +| 区域 | 内容 | +|------|------| +| 基础伤害预览 | 显示 `BaseDamage × Multiplier = FinalDamage` 计算结果 | +| 击退预览 | 绘制箭头示意击退方向和力度 | +| 属性标记 | 颜色标签显示 DamageFlags | +| 伤害测试 | Play Mode 下"模拟命中"按钮,立即触发一次伤害流水线 | + +--- + +## 12. 状态效果系统(StatusEffect / DoT) + +> **命名空间** `BaseGames.Combat.StatusEffects` + +状态效果(DoT,Damage over Time)让 DamageType 中的 `Fire`、`Poison` 等属性真正生效,为战斗增加策略层次。 + +### 12.1 StatusEffect 基类 + +```csharp +namespace BaseGames.Combat.StatusEffects +{ + public abstract class StatusEffect + { + public abstract StatusEffectType EffectType { get; } + public abstract int MaxStacks { get; } // 最大叠加层数(1 = 不可叠加) + + public int StackCount { get; protected set; } = 1; + public float Duration { get; protected set; } // 当前剩余持续时间 + public float TickInterval { get; protected set; } // 每次 Tick 的间隔秒数 + float _tickTimer; + + protected StatusEffectManager Owner; // 宿主(PlayerStats 或 EnemyStats) + + public virtual void OnApply(StatusEffectManager owner) + { + Owner = owner; + Duration = GetBaseDuration(); + } + + public virtual void OnStack() // 已有时再次施加 → 刷新/叠层 + { + Duration = GetBaseDuration(); // 默认刷新持续时间 + StackCount = Mathf.Min(StackCount + 1, MaxStacks); + } + + public virtual void OnTick() { } // 每次 TickInterval 触发一次 + + public virtual void OnExpire() { } // 持续时间归零时触发 + + public virtual bool IsExpired => Duration <= 0f; + + public void Update(float delta) + { + Duration -= delta; + _tickTimer += delta; + if (_tickTimer >= TickInterval) + { + _tickTimer -= TickInterval; + OnTick(); + } + } + + protected abstract float GetBaseDuration(); + public abstract string GetDisplayName(); + } + + public enum StatusEffectType { Fire, Poison, Freeze, Stun } +} +``` + +### 12.2 FireEffect — 燃烧 + +```csharp +public class FireEffect : StatusEffect +{ + public override StatusEffectType EffectType => StatusEffectType.Fire; + public override int MaxStacks => 1; // 不可叠加,触发时刷新持续时间 + + protected override float GetBaseDuration() => 3.0f; // 燃烧 3 秒 + // TickInterval = 0.5f → 每秒 2 次 Tick,每次 1 点伤害 = 2 DPS + + public FireEffect() => TickInterval = 0.5f; + + public override void OnApply(StatusEffectManager owner) + { + base.OnApply(owner); + owner.SetShaderParam("_FireGlow", 1f); // 橙色光晕 Shader 参数 + } + + public override void OnTick() + { + // 构造 True 类型伤害(跳过防御,不触发 IFrame) + var info = new DamageInfo( + attacker: null, + damage: 1, + type: DamageType.True, + flags: DamageFlags.IgnoreIFrame | DamageFlags.IsDoT + ); + Owner.ApplyDirectDamage(info); + } + + public override void OnExpire() + => Owner.SetShaderParam("_FireGlow", 0f); // 关闭光晕 + + public override string GetDisplayName() => "燃烧"; +} +``` + +### 12.3 PoisonEffect — 毒素 + +```csharp +public class PoisonEffect : StatusEffect +{ + public override StatusEffectType EffectType => StatusEffectType.Poison; + public override int MaxStacks => 3; // 最多叠加 3 层 + + protected override float GetBaseDuration() => 5.0f; // 每层独立计时 5 秒 + // TickInterval = 1.0f → 1 DPS,3 层叠加时 3 DPS + + public PoisonEffect() => TickInterval = 1.0f; + + public override void OnApply(StatusEffectManager owner) + { + base.OnApply(owner); + UpdateShader(); + } + + public override void OnStack() + { + base.OnStack(); + UpdateShader(); + } + + public override void OnTick() + { + var info = new DamageInfo( + attacker: null, + damage: StackCount, // 伤害随叠层数增加 + type: DamageType.True, + flags: DamageFlags.IgnoreIFrame | DamageFlags.IsDoT + ); + Owner.ApplyDirectDamage(info); + } + + public override void OnExpire() + { + StackCount = 0; + Owner.SetShaderParam("_PoisonGlow", 0f); + } + + void UpdateShader() + => Owner.SetShaderParam("_PoisonGlow", StackCount / (float)MaxStacks); + + public override string GetDisplayName() => $"中毒 x{StackCount}"; +} +``` + +### 12.4 StatusEffectManager — 宿主组件 + +挂载在 **PlayerController** 和 **EnemyBase** 上,管理所有状态效果。 + +**性能注意**:状态效果列表通常不超过 4–5 个并发 entry,`List` 遍历的绝对开销极小(< 1μs/帧)。但为避免每帧 `FirstOrDefault` LINQ 分配,`ApplyEffect` / `CleanseEffect` 改用 `Dictionary` 作为 O(1) 查找结构,同时保留 `List` 作为有序更新序列: + +```csharp +namespace BaseGames.Combat.StatusEffects +{ + [RequireComponent(typeof(SpriteRenderer))] + public class StatusEffectManager : MonoBehaviour + { + [Header("事件频道")] + [SerializeField] StatusEffectEventChannelSO _onStatusEffectApplied; + [SerializeField] StatusEffectEventChannelSO _onStatusEffectExpired; + + // 双结构:List 用于有序 Update 遍历;Dictionary 用于 O(1) 查找 + readonly List _activeList = new(); + readonly Dictionary _activeIndex = new(); + + SpriteRenderer _renderer; + MaterialPropertyBlock _propBlock; + + void Awake() + { + _renderer = GetComponent(); + _propBlock = new MaterialPropertyBlock(); + } + + void Update() + { + // 倒序遍历 List,避免 RemoveAt 移位问题 + for (int i = _activeList.Count - 1; i >= 0; i--) + { + var effect = _activeList[i]; + effect.Update(Time.deltaTime); + if (effect.IsExpired) + { + effect.OnExpire(); + _activeIndex.Remove(effect.EffectType); + _activeList.RemoveAt(i); + _onStatusEffectExpired.Raise(effect.EffectType); + } + } + } + + /// 施加状态效果。已有相同类型时叠层/刷新。O(1) 查找。 + public void ApplyEffect(StatusEffect newEffect) + { + if (_activeIndex.TryGetValue(newEffect.EffectType, out var existing)) + { + existing.OnStack(); + } + else + { + newEffect.OnApply(this); + _activeList.Add(newEffect); + _activeIndex[newEffect.EffectType] = newEffect; + _onStatusEffectApplied.Raise(newEffect.EffectType); + } + } + + /// 净化指定类型的状态效果。O(1) 查找。 + public void CleanseEffect(StatusEffectType type) + { + if (!_activeIndex.TryGetValue(type, out var effect)) return; + effect.OnExpire(); + _activeIndex.Remove(type); + _activeList.Remove(effect); // List.Remove 是 O(n),但列表极短,可接受 + _onStatusEffectExpired.Raise(type); + } + + public void CleanseAll() + { + foreach (var e in _activeList) e.OnExpire(); + _activeList.Clear(); + _activeIndex.Clear(); + } + + /// 由状态效果调用,直接扣减 HP(True 伤害,绕过 HurtBox)。 + public void ApplyDirectDamage(DamageInfo info) + => GetComponent()?.TakeDamage(info.FinalDamage); + + /// 由状态效果调用,设置 Shader 参数(材质属性块,不修改共享材质)。 + public void SetShaderParam(string param, float value) + { + _renderer.GetPropertyBlock(_propBlock); + _propBlock.SetFloat(param, value); + _renderer.SetPropertyBlock(_propBlock); + } + + /// O(1) 查找。 + public bool HasEffect(StatusEffectType type) + => _activeIndex.ContainsKey(type); + } +} +``` + +### 12.5 状态效果触发方式 + +状态效果由以下几种方式触发: + +| 触发方式 | 说明 | +|---------|------| +| `DamageInfo.DamageType == Fire/Poison` | 伤害流水线在 `HurtBox.ReceiveDamage` 中检测,触发 `StatusEffectManager.ApplyEffect` | +| `OnHitEffect`(魅力效果)| 命中时以概率施加(见 `17_EquipmentSystem.md §4.3`)| +| 环境接触 | `HazardZone` 配置为 DoT 类型时,每帧发布带 `DamageType.Poison` 的 `DamageInfo` | + +**HurtBox 集成**(在现有伤害流水线末尾添加): + +```csharp +// HurtBox.ReceiveDamage 末尾追加: +if (info.DamageType == DamageType.Fire) + Owner.GetComponent()?.ApplyEffect(new FireEffect()); +else if (info.DamageType == DamageType.Poison) + Owner.GetComponent()?.ApplyEffect(new PoisonEffect()); +``` + +### 12.6 净化条件 + +| 效果 | 净化方式 | +|------|---------| +| `Fire` | 进入水域(`WaterZone` 触发 `CleanseEffect(Fire)`)| +| `Poison` | 装备「解毒魅」(`OnEquip` 时订阅 `OnStatusEffectApplied`,自动触发净化)| +| 所有效果 | 在存档点激活时,`SavePoint.OnInteract` 调用 `CleanseAll()` | + +### 12.7 视觉效果汇总 + +| 状态 | Shader 参数 | 效果描述 | +|------|------------|---------| +| `Fire` | `_FireGlow: 0→1` | 角色轮廓橙红色自发光,强度随时间衰减 | +| `Poison x1` | `_PoisonGlow: 0.33` | 轻微绿色色调叠加 | +| `Poison x3` | `_PoisonGlow: 1.0` | 强绿色,角色变色明显 | +| `Stun` | `_StunFlash: 1` | 黄白色闪烁(0.1s 间隔)| + +> Shader 参数通过 `MaterialPropertyBlock` 修改,**不影响共享材质**,场景中多个同材质角色各自独立显示。 + +--- + +## 13. 拼刀系统(Nail Clash) + +当**玩家与敌人的近战 HitBox 同时激活并相互重叠**时触发拼刀:双方武器碰撞,均不扣血,各自弹开,播放拼刀特效与音效。 + +> 仅携带 `CanClash` 标记的 HitBox 才参与拼刀检测(近战武器)。弹射物、环境伤害、DoT 无此标记,永远不触发拼刀。 + +### 13.1 检测架构 + +``` +Physics Layer 配置: + PlayerAttack Layer ↔ EnemyAttack Layer → 开启碰撞检测 + +HitBox.OnTriggerEnter2D(Collider2D other) + │ + ├─ other.Layer == HurtBox → 正常伤害流水线 + │ + └─ other.Layer == 对立 HitBox Layer + └─ TryGetComponent(other, out rivalHitBox) + └─ rivalHitBox.IsActive && rivalHitBox.CanClash && this.CanClash + └─ ClashResolver.ResolveClash(this, rivalHitBox) + → 中止伤害,触发拼刀效果 +``` + +### 13.2 ClashResolver + +`ClashResolver` 是场景中的单例服务(`GameManager` 持有),接收两个 HitBox 引用并处理拼刀逻辑: + +```csharp +public class ClashResolver : MonoBehaviour +{ + [SerializeField] VoidEventChannelSO _onNailClash; + [SerializeField] ClashConfigSO _config; + + // 防止同一碰撞在同帧被双方 HitBox 各触发一次(去重) + readonly HashSet _processedThisFrame = new(); + + void LateUpdate() => _processedThisFrame.Clear(); + + public void ResolveClash(HitBox playerHitBox, HitBox enemyHitBox) + { + int key = playerHitBox.GetInstanceID() ^ enemyHitBox.GetInstanceID(); + if (!_processedThisFrame.Add(key)) return; // 本帧已处理 + + // 1. 拼刀 HitStop(1 帧,比普通命中的 2 帧更短) + HitStopManager.FreezeFrames(_config.ClashFreezeFrames); + + // 2. 双方弹开 + ApplyClashKnockback(playerHitBox.OwnerRigidbody, enemyHitBox.transform.position); + ApplyClashKnockback(enemyHitBox.OwnerRigidbody, playerHitBox.transform.position); + + // 3. 广播事件 + _onNailClash.Raise(); + } + + void ApplyClashKnockback(Rigidbody2D rb, Vector2 oppositePos) + { + var dir = ((Vector2)rb.transform.position - oppositePos).normalized; + rb.AddForce(dir * _config.ClashKnockbackForce, ForceMode2D.Impulse); + } +} +``` + +### 13.3 ClashConfigSO + +存放于 `Assets/ScriptableObjects/Config/Combat/ClashConfigSO.asset`: + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `ClashFreezeFrames` | `int` | 1 | 拼刀冻帧(比命中的 2 帧更短,避免卡顿感)| +| `ClashKnockbackForce` | `float` | 6.0 | 拼刀弹开力度 | +| `ClashImpulseStrength` | `float` | 0.3 | Cinemachine Impulse 强度(轻微)| + +### 13.4 拼刀判定规则 + +| 情况 | 结果 | +|------|------| +| 双方 HitBox 均激活 + 均 `CanClash = true` | 触发拼刀,双方弹开,不扣血 | +| 仅玩家 HitBox 激活,敌人 HitBox 未激活 | 正常命中敌人 HurtBox | +| 敌人攻击标记为 `CanClash = false`(如 Boss 重击)| 不触发拼刀,正常伤害玩家 | +| 同帧多次碰撞 | `HashSet` 去重,每对 HitBox 每帧只触发一次 | + +> **设计意图**:普通近战攻击默认 `CanClash = true`,让拼刀自然发生。Boss 特殊重击设 `CanClash = false`,迫使玩家闪避而非硬拼。 diff --git a/Docs/Design/05_ParrySystem.md b/Docs/Design/05_ParrySystem.md new file mode 100644 index 0000000..6599d76 --- /dev/null +++ b/Docs/Design/05_ParrySystem.md @@ -0,0 +1,503 @@ +# 05 · 弹反系统 + +> **命名空间** `BaseGames.Parry` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** `BaseGames.Player` · `BaseGames.Combat` · `BaseGames.Feedback` · Feel `MMTimeManager` + +--- + +## 目录 + +1. [设计目标与核心体验](#1-设计目标与核心体验) +2. [弹反状态机](#2-弹反状态机) +3. [时间流完整流水线](#3-时间流完整流水线) +4. [弹反判定窗口](#4-弹反判定窗口) +5. [子弹时间(Bullet Time)](#5-子弹时间bullet-time) +6. [反击窗口(Counter Window)](#6-反击窗口counter-window) +7. [敌人 Stagger](#7-敌人-stagger) +8. [Soul 增益](#8-soul-增益) +9. [ParryConfigSO — 配置资产](#9-parryconfigso--配置资产) +10. [事件频道](#10-事件频道) +11. [完美弹反(P1)](#11-完美弹反p1) +12. [编辑器友好设计](#12-编辑器友好设计) +13. [帧嵌入式弹反窗口](#13-帧嵌入式弹反窗口skill-frame-parry) + +--- + +## 1. 设计目标与核心体验 + +弹反是游戏**最核心的爽点机制**,设计目标: + +| 目标 | 实现方式 | +|------|---------| +| **打击感强烈** | 成功弹反瞬间冻帧(2帧)+ 子弹时间 0.25× + Cinemachine Impulse | +| **高风险高回报** | 弹反窗口 0.28s,需要精确预判 | +| **战术价值** | 成功后 +33 Soul(1/3 满格)+ 3× 反击伤害 + 使敌人 Stagger | +| **失败可控** | 错误弹反(弹反窗口前受伤)不会有额外惩罚 | +| **视觉清晰** | 弹反姿态动画清晰可辨,成功闪光明显 | + +--- + +## 2. 弹反状态机 + +`ParrySystem` 是独立组件(挂在玩家身上),与 `PlayerStateMachine` 协作: + +``` +[ParrySystem 内部状态枚举] + +Inactive + │ + ├─ 玩家进入 ParryState(按弹反键) + ▼ +Startup(弹反前摇,不可受益) + │ 持续: ParryStartupDuration (0.05s) + ▼ +Active(弹反窗口,可弹反) ← IsInParryWindow = true + │ 持续: ParryWindowDuration (0.28s) + │ + ├─ 受到带 CanBeParried 的 DamageInfo → 弹反成功 → + │ ▼ + │ ParrySuccess(成功处理) + │ ├─ 冻帧 (2frames) + │ ├─ 启动子弹时间 + │ ├─ +33 Soul + │ ├─ 触发 OnParrySuccess 事件频道 + │ └─ 进入 CounterWindow + │ │ 持续: CounterWindowDuration (0.5s) + │ ├─ 攻击输入 → AttackState (ParryCounter) + │ └─ 超时/其他输入 → 返回 Inactive + │ + └─ 窗口超时(无攻击命中)→ 进入 Endlag + │ 持续: ParryEndlagDuration (0.1s) + ▼ + Inactive(返回,玩家恢复控制) +``` + +> **帧嵌入弹反(Skill-Frame Parry)第二触发路径**: +> `AnimationEvent EnableParryWindow` 调用 `ParrySystem.OpenWindow()`,直接进入 **Active** 状态,跳过 Startup/Endlag。窗口关闭由 `AnimationEvent DisableParryWindow` 驱动,时长由动画帧间隔决定。详见 §13。 + +--- + +## 3. 时间流完整流水线 + +``` +玩家按下 Parry 键 + │ + ▼ +InputReader.OnParryPerformed + │ + ▼ +PlayerController → ForceState(ParryState) + │ + ├─ 播放 ParryPose 动画 + └─ ParrySystem.BeginParry() + │ + [Startup 0.05s] + │ + [Active Window 0.28s] ←── 受到攻击 + │ │ + │ HurtBox.ReceiveDamage(DamageInfo) + │ │ + │ 检测到 IsInParryWindow == true + │ │ + │ && DamageInfo.Flags.HasFlag(CanBeParried) + │ │ + ├────────────────────────┘ + │ + ▼ + ParrySystem.TriggerParrySuccess(DamageInfo) + │ + ├─ 1. 播放 ParrySuccess 动画 + ├─ 2. HitStopManager.FreezeFrames(2) + ├─ 3. MMTimeManager.SetTimescale(0.25, 0.2s) + ├─ 4. CinemachineImpulseSource_Parry.GenerateImpulse() + ├─ 5. PlayerStats.AddSoul(+33) + ├─ 6. 触发 OnParrySuccess 事件频道(附带原 DamageInfo) + └─ 7. 进入 CounterWindow 状态 +``` + +--- + +## 4. 弹反判定窗口 + +``` +时间轴(从按下弹反键开始): + +├─[0ms]──[50ms]──────[330ms]──[430ms]─────────────► + 按键 结束 窗口 Endlag + Startup Active 结束 + + ◄── 0.05s ──►◄──── 0.28s ────►◄── 0.1s ──► + Startup 可弹反窗口 Endlag +``` + +**弹反成功条件**(同时满足): + +1. `ParrySystem.State == Active`(在弹反窗口内) +2. `DamageInfo.Flags.HasFlag(CanBeParried)` 为 true +3. 玩家当前**未处于无敌帧**(无敌帧中收不到 DamageInfo 触发弹反) + +**弹反失败情况**: + +| 情况 | 结果 | +|------|------| +| Startup 期间受攻击 | 正常受击(无弹反,无额外惩罚)| +| Active 窗口超时 | 进入 Endlag,返回 Inactive | +| 受到 `Unblockable` 攻击 | 无法弹反,正常受击 | +| 受到 `PerfectParryOnly` 攻击 | 仅限完美弹反(P1 特性)| + +--- + +## 5. 子弹时间(Bullet Time) + +弹反成功后立即通过 Feel `MMTimeManager` 降低全局时间缩放: + +### 配置参数 + +| 参数 | 值 | 说明 | +|------|-----|------| +| `BulletTimeScale` | 0.25 | 时间缩放倍率(原速 25%)| +| `BulletTimeDuration` | 0.2s(**非缩放时间**)| 子弹时间持续时长 | +| `BulletTimeChannel` | `MMTimeManager` Channel 0 | Feel 时间管理频道 | + +### 影响范围 + +- `Time.timeScale = 0.25`: + - 影响所有 Update(物理帧、AI 决策、动画) + - 敌人 AI 决策频率降低 + - 玩家动画也会减速(营造英雄感) + +- **不受影响**(使用 `Time.unscaledDeltaTime`): + - 镜头震动计时 + - UI 动画 + - 音频(正常速度播放) + +### MMTimeScaleEvent 广播 + +Feel 的 `MMTimeManager` 接收 `MMTimeScaleEvent`: + +| 参数 | 值 | +|------|-----| +| `TimeScale` | 0.25 | +| `Duration` | 0.2 | +| `Lerp` | true | +| `LerpSpeed` | 20(快速进入,快速恢复)| +| `Infinite` | false | + +--- + +## 6. 反击窗口(Counter Window) + +子弹时间内(以及结束后的短暂时间),玩家处于反击窗口: + +``` +弹反成功时刻 + │ + ├─ 子弹时间开始(0.25×, 0.2s 非缩放时长) + │ + └─ CounterWindow 开始(0.5s 非缩放时长) + │ + ├─ 玩家攻击输入 → AttackState(ParryCounter) + │ └─ 使用 DS_Player_ParryCounter.asset(×3 伤害,Unblockable) + │ + └─ 0.5s 超时 → 反击窗口关闭 + └─ 子弹时间已提前恢复(0.2s < 0.5s) +``` + +**反击窗口关闭条件**(任意一个触发): + +- CounterWindow 计时超过 0.5s +- 玩家执行了 ParryCounter 攻击 +- 玩家受到伤害 +- 玩家再次进入弹反状态 + +--- + +## 7. 敌人 Stagger + +`OnParrySuccess` 事件频道触发后,被弹反的敌人进入 Stagger 状态: + +| 参数 | 值 | 说明 | +|------|-----|------| +| `StaggerDuration` | 0.8s | 敌人硬直时长(缩放时间)| +| `StaggerKnockback` | (0.5× 原击退力) | 弹反后敌人轻微后退 | + +**Stagger 流程**: + +``` +OnParrySuccess 事件频道(DamageInfo) + │ + └─ EnemyBase.OnParrySuccessHandler(DamageInfo) + ├─ 检查 DamageInfo.SourceLayer 是否为此敌人攻击 + │ (防止误触发其他敌人) + ├─ ForceState(EnemyStaggerState) + └─ EnemyFeedback.OnParriedByPlayer() + └─ MMF_Player: Flash + ImpulseSource_Light +``` + +--- + +## 8. Soul 增益 + +| 弹反结果 | Soul 增量 | +|---------|---------| +| 弹反成功(任意攻击)| +33(满格的 1/3)| +| 弹反成功(完美弹反,P1)| +50(满格的 1/2)| +| 弹反失败(窗口超时)| +0 | +| 弹反中受伤 | +0(按正常受击处理)| + +--- + +## 9. ParryConfigSO — 配置资产 + +`ParryConfigSO` 存放于 `Assets/ScriptableObjects/Config/Parry/ParryConfigSO.asset`: + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `StartupDuration` | `float` | 0.05s | 弹反前摇时长 | +| `WindowDuration` | `float` | 0.28s | 弹反判定窗口 | +| `EndlagDuration` | `float` | 0.10s | 弹反后摇 | +| `CounterWindowDuration` | `float` | 0.5s(非缩放)| 反击窗口时长 | +| `BulletTimeScale` | `float` | 0.25 | 子弹时间缩放比 | +| `BulletTimeDuration` | `float` | 0.2s(非缩放)| 子弹时间时长 | +| `StaggerDuration` | `float` | 0.8s | 敌人 Stagger 时长 | +| `SoulGainOnParry` | `int` | 33 | 弹反成功 Soul 增量 | +| `ParryCounterMultiplier` | `float` | 3.0 | 弹反反击伤害倍率 | + +--- + +## 10. 事件频道 + +| 频道资产 | 类型 | 发布时机 | 主要订阅方 | +|---------|------|---------|----------| +| `OnParrySuccess.asset` | `DamageInfoEventChannelSO` | 弹反成功瞬间 | `PlayerStats`(+Soul)、`EnemyBase`(Stagger)、`PlayerFeedback`(视觉/音效)、`CameraSystem`(Impulse)| +| `OnParryWindowOpened.asset` | `VoidEventChannelSO` | 进入弹反 Active 窗口 | `PlayerFeedback`(弹反姿态特效)| +| `OnParryWindowClosed.asset` | `VoidEventChannelSO` | 弹反窗口关闭(超时/成功)| `PlayerFeedback`(恢复正常 Shader)| + +--- + +## 11. 完美弹反(P1) + +> **优先级 P1,当前版本不实现** + +完美弹反在弹反窗口的**前 1/3 时间(约 0.09s)**内触发,额外效果: + +- Soul 增量提升至 +50(满格 1/2) +- 无需消耗攻击次数即恢复连击链 +- 使 Boss 进入更长时间的 Stagger(1.5s) +- 触发独立的 `PerfectParryFeedback`(更强烈的视觉/音效) + +--- + +## 12. 编辑器友好设计 + +### ParrySystem 运行时 Inspector + +``` +┌─ ParrySystem ──────────────────────────────────┐ +│ State : Active │ +│ Window Timer : █████████░░░░ 0.19s / 0.28s │ +│ Counter Timer : ██████░░░░░░░ 0.30s / 0.50s │ +│ Soul on Parry : +33 │ +│ ─────────────────────────────────────────────│ +│ Bullet Time : 0.25× for 0.2s (unscaled) │ +│ ─────────────────────────────────────────────│ +│ [测试弹反成功] [测试弹反失败] [重置状态] │ +└────────────────────────────────────────────────┘ +``` + +### Scene 视图调试 + +- 弹反窗口 Active 时:在玩家身上绘制**黄色光圈动画**(仅 Scene 视图,不影响游戏画面) +- 反击窗口 Counter 时:绘制**绿色扇形**表示反击可用时间剩余 + +--- + +## 13. 帧嵌入式弹反窗口(Skill-Frame Parry) + +除专用弹反按键(`PlayerParryState`)外,部分技能动作的**特定帧自动携带弹反判定**,无需玩家额外输入。 + +### 13.1 两种弹反触发路径对比 + +| | 专用弹反(PlayerParryState)| 帧嵌入式弹反 | +|---|---|---| +| **触发方式** | 玩家按 Parry 键 | 技能动作特定帧自动开启 | +| **FSM 状态变化** | 切换到 `PlayerParryState` | **不切换状态**,在当前技能状态内 | +| **驱动方式** | `ParrySystem.BeginParry()`(代码计时器)| `AnimationEvent EnableParryWindow / DisableParryWindow` | +| **窗口时序** | Startup (0.05s) → Active (0.28s) → Endlag (0.1s) | 直接 Active,时长 = 两事件帧间隔 | +| **玩家控制** | 主动意图(精确输入)| 被动奖励(攻击中顺带)| +| **代表场景** | 格挡反击 | Attack2/Attack3 前摇帧、部分特殊技能 | + +### 13.2 ParrySystem 双接口设计 + +```csharp +public class ParrySystem : MonoBehaviour +{ + // ── 专用弹反接口(由 PlayerParryState.OnEnter 调用)── + /// 启动完整时序:Startup → Active → Endlag(代码计时器驱动)。 + public void BeginParry() { ... } + + // ── 帧嵌入式弹反接口(由 AnimationEvent 调用)── + /// 直接进入 Active 状态,窗口时长由 DisableParryWindow 事件关闭。 + public void OpenWindow() + { + if (State != ParryState.Inactive) return; // 避免与专用弹反冲突 + State = ParryState.Active; + } + + /// 直接退出 Active 状态(仅在帧嵌入模式下有效)。 + public void CloseWindow() + { + if (State == ParryState.Active) State = ParryState.Inactive; + } + + public bool IsInParryWindow => State == ParryState.Active; +} +``` + +> `OpenWindow()` 检查当前状态为 `Inactive` 才执行,避免在专用 `PlayerParryState` 已通过 `BeginParry()` 激活的情况下冲突。 + +### 13.3 携带弹反帧的技能列表 + +| 技能 | 弹反帧位置(归一化时间)| 设计意图 | +|------|---------------------|----------| +| 攻击2(Attack2)| 0.05 ~ 0.18(前摇蓄力阶段)| 挥剑准备期可反击近身攻击 | +| 攻击3(Attack3)| 0.05 ~ 0.12(大幅前摇阶段)| 终结技前摇明显,高风险高回报 | +| (预留)特殊技能 | 由技能设计决定 | 护符/解锁技能可扩展此列表 | + +> 攻击1 节奏最快,不携带弹反帧。 + +### 13.4 帧嵌入弹反的后续处理 + +弹反成功后走相同的 `ParrySystem.TriggerParrySuccess()` 流程(子弹时间 + Soul +33 + 反击窗口),不区分来源。唯一区别:帧嵌入弹反成功时玩家处于攻击动画中,反击窗口的 `ParryCounter` 攻击会从当前状态直接切换,而非从 `PlayerParryState` 切换。 + +--- + +## 14. 弹反冲突解决(Parry Conflict Resolution) + +> 本节定义边界情况下弹反系统的决策优先级,确保不出现"吃弹反"或"双重消耗"问题。 + +### 14.1 ParryResolveResult 枚举 + +```csharp +public enum ParryResolveResult +{ + Parried, // 弹反成功,伤害被消除 + Blocked_ByIFrame, // 玩家处于无敌帧,弹反未触发(伤害也被无敌帧吸收) + Failed_OutsideWindow, // 弹反窗口关闭,伤害正常生效 + Consumed, // 同帧首次弹反已消耗,后续相同帧的弹反触发失败 + Rejected_NotParryable,// 攻击来源标记为不可弹反 +} +``` + +### 14.2 同帧多伤害处理 + +在同一 FixedUpdate 帧内,多个伤害实体可能同时命中玩家(如群体爆炸、多段敌人攻击)。规则如下: + +``` +同帧伤害解决顺序(按命中顺序): + 第 1 次伤害(可弹反)→ 触发弹反 → ParryResolveResult.Parried + 第 2 次伤害(可弹反)→ 弹反已消耗 → ParryResolveResult.Consumed → 作为普通伤害处理 + 第 N 次伤害 → 同上,普通伤害 +``` + +实现方式:在 `ParrySystem` 内部维护 `_parriedThisFrame` 布尔标志,于 `LateUpdate` 重置: + +```csharp +public class ParrySystem : MonoBehaviour +{ + bool _parriedThisFrame; + + void LateUpdate() => _parriedThisFrame = false; + + // 修改后的 TryConsumeParry(): + public ParryResolveResult TryConsumeParry(DamageInfo info) + { + // 优先级 1:不可弹反的攻击 + if (!info.isParryable) + return ParryResolveResult.Rejected_NotParryable; + + // 优先级 2:无敌帧中(无敌帧由受击/冲刺触发) + if (_playerStats.IsInvincible) + return ParryResolveResult.Blocked_ByIFrame; + + // 优先级 3:弹反窗口未激活 + if (State != ParryState.Active) + return ParryResolveResult.Failed_OutsideWindow; + + // 优先级 4:同帧已消耗弹反 + if (_parriedThisFrame) + return ParryResolveResult.Consumed; + + // 弹反成功 + _parriedThisFrame = true; + TriggerParrySuccess(); + return ParryResolveResult.Parried; + } +} +``` + +### 14.3 无敌帧期间的弹反输入 + +| 场景 | 行为 | 原因 | +|------|------|------| +| 受击无敌帧内敌人攻击到达 | 无敌帧优先吸收,弹反**不被消耗** | 避免惩罚玩家在受击后立刻进行输入 | +| 冲刺无敌帧内敌人攻击到达 | 同上,无敌帧优先,弹反不消耗 | 冲刺是主动规避,不触发弹反 | +| 弹反 Active 窗口中玩家主动触发无敌(护符等)| 以进入无敌时的状态为准:若先进弹反再进无敌,弹反窗口继续有效;若先进无敌再有伤害到来,无敌优先 | 明确时序,避免双重规避 | + +> **关键规则**:无敌帧 (`_playerStats.IsInvincible`) 的检查优先于弹反窗口检查,且无敌帧不会消耗弹反计数。 + +### 14.4 弹反成功后的 Stagger 优先级 + +弹反成功时,目标敌人可能处于不同状态。解决规则: + +| 敌人状态 | 弹反后行为 | +|---------|-----------| +| 普通攻击动画中 | 立即打断 → 强制进入 `EnemyStaggerState` | +| 普通 AI 行为(移动/待机)| 同上,强制 Stagger | +| Boss 普通攻击 | 打断并触发 Stagger,持续时间 = 普通 Boss Stagger(约 0.6s)| +| Boss 阶段技能(标记为 `UnInterruptible`)| 弹反成功(玩家获得 Soul 和反击窗口),但 **Boss 不进入 Stagger**,攻击继续 | +| 远程弹射物(不可弹反,弹射物反向)| 弹射物速度取反,标记命中敌人为 `ReflectedProjectile`;不触发 Stagger | + +```csharp +void ApplyParryStagger(IDamageable target, DamageInfo info) +{ + // 弹射物弹反:不对 Boss 施加 Stagger,仅反射弹射物 + if (info.isProjectile) + { + info.projectile.Reflect(); + return; + } + + // Boss 阶段技能:不可打断 + if (target is BossBase boss && boss.IsCurrentAttackUninterruptible) + return; + + // 普通情况:施加 Stagger + target.ApplyStagger(info.parriedStaggerDuration); +} +``` + +### 14.5 完整决策树 + +``` +玩家受到攻击(DamageInfo 到达 PlayerHurtBox) + │ + ├─ info.isParryable == false + │ → 按普通伤害处理(HP 扣减) + │ + ├─ _playerStats.IsInvincible == true + │ → 无敌帧吸收(HP 不变,弹反不消耗) + │ + ├─ ParrySystem.State != Active + │ → 按普通伤害处理(HP 扣减,弹反未激活) + │ + ├─ _parriedThisFrame == true(同帧已弹反) + │ → 伤害仍然生效(弹反 "已消耗" 提示:ParryResolveResult.Consumed) + │ + └─ 弹反成功(Parried) + → TriggerParrySuccess():子弹时间 + Soul +33 + → ApplyParryStagger(attacker, info) + → 开启 CounterWindow(反击窗口) + → _parriedThisFrame = true +``` diff --git a/Docs/Design/06_EnemySystem.md b/Docs/Design/06_EnemySystem.md new file mode 100644 index 0000000..868d128 --- /dev/null +++ b/Docs/Design/06_EnemySystem.md @@ -0,0 +1,410 @@ +# 06 · 敌人系统 + +> **命名空间** `BaseGames.Enemies` · `BaseGames.Enemies.AI` · `BaseGames.Enemies.Navigation` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** `BaseGames.Combat` · Behavior Designer Pro · PathBerserker2d + +--- + +## 目录 + +1. [系统总览](#1-系统总览) +2. [EnemyBase — 敌人基础组件](#2-enemybase--敌人基础组件) +3. [EnemyStatsSO — 敌人属性配置](#3-enemystatsso--敌人属性配置) +4. [敌人状态机](#4-敌人状态机) +5. [Behavior Designer 任务目录](#5-behavior-designer-任务目录) +6. [标准行为树模板](#6-标准行为树模板) +7. [Boss 行为树模板](#7-boss-行为树模板) +8. [PathBerserker2d 导航集成](#8-pathberserker2d-导航集成) +9. [BossBase — Boss 特化设计](#9-bossbase--boss-特化设计) +10. [敌人 Prefab 层级结构](#10-敌人-prefab-层级结构) +11. [EnemyAnimationConfigSO](#11-enemyanimationconfigso) +12. [编辑器友好设计](#12-编辑器友好设计) + +--- + +## 1. 系统总览 + +敌人系统由三个层次组成: + +``` +EnemyBase(MonoBehaviour,协调器) +├── EnemyStats ← 运行时属性(HP、防御等) +├── EnemyMovement ← Rigidbody2D 移动封装 +├── EnemyAnimator ← Animancer 动画(单层) +├── EnemyCombat ← HitBox 管理 +├── EnemyNavAgent ← PathBerserker2d 寻路封装 +└── BehaviorTree ← Behavior Designer 行为树(AI 决策) + +组件关系: + BehaviorTree(What to do) → EnemyBase接口 → EnemyMovement/EnemyCombat/EnemyNavAgent(How to do it) + BD 任务通过 SharedVariable 访问 EnemyBase 接口,不直接操作 Rigidbody2D +``` + +--- + +## 2. EnemyBase — 敌人基础组件 + +`EnemyBase` 是所有敌人的基础,暴露给 BD 任务的**接口列表**: + +### 移动接口 + +| 方法 | 调用方(BD任务) | 说明 | +|------|---------------|------| +| `MoveTo(Vector2 target)` | `BD_MoveTo` | 通过 NavAgent 移动到目标点 | +| `MoveInDirection(float dir)` | `BD_Patrol` | 直接控制水平移动方向(无寻路)| +| `StopMovement()` | `BD_StopMovement` | 立即停止移动 | +| `JumpTo(Vector2 target)` | `BD_Jump` | 施加跳跃冲量朝向目标 | +| `Knockback(DamageInfo)` | HurtBox | 受击击退(不由 BD 控制)| +| `FacePlayer()` | `BD_FaceTarget` | 翻转 SpriteRenderer 朝向玩家 | + +### 战斗接口 + +| 方法 | 调用方(BD任务)| 说明 | +|------|--------------|------| +| `BeginAttack(AttackType type)` | `BD_Attack` | 开始攻击(激活对应 HitBox)| +| `CanAttack()` | `BD_CanAttack` | 检查攻击是否冷却完毕 | +| `IsPlayerInRange(float range)` | `BD_IsInRange` | 检测玩家是否在攻击范围内 | +| `IsPlayerVisible()` | `BD_IsVisible` | Raycast 检测玩家是否可见 | + +### 状态接口 + +| 方法/属性 | 说明 | +|----------|------| +| `ForceState(EnemyStateType)` | 强制切换敌人状态(Stagger/Death 等)| +| `TakeDamage(DamageInfo)` | 接受伤害(由 HurtBox 调用)| +| `IsDead` | 是否已死亡(只读)| +| `IsStaggered` | 是否处于硬直中(只读)| +| `CurrentHP` | 当前 HP(只读,供 BD Conditional 使用)| + +--- + +## 3. EnemyStatsSO — 敌人属性配置 + +`EnemyStatsSO` 继承自 `ScriptableObject`,每类敌人一份资产: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `DisplayName` | `string` | 敌人名称(UI显示)| +| `MaxHP` | `int` | 最大生命值 | +| `DefenseStat` | `int` | 防御减免值 | +| `WalkSpeed` | `float` | 行走速度 | +| `RunSpeed` | `float` | 追击速度 | +| `DetectionRange` | `float` | 玩家检测半径 | +| `AttackRange` | `float` | 攻击触发范围 | +| `AttackCooldown` | `float` | 攻击冷却时间 | +| `GeoDropAmount` | `int` | 死亡时掉落 Geo | +| `GeoDropVariance` | `int` | Geo 掉落随机浮动量 | +| `StaggerResistance` | `float` | Stagger 抗性(0=正常,1=免疫)| +| `PatrolDistance` | `float` | 巡逻范围(从出生点起)| + +### 资产存放路径 + +`Assets/ScriptableObjects/Enemies/Stats/` + +命名规范:`ES_{EnemyName}.asset`,如 `ES_GruntWarrior.asset`、`ES_SkullArcher.asset`。 + +--- + +## 4. 敌人状态机 + +`EnemyBase` 内部维护轻量状态枚举(不使用 Animancer FSM,BD 行为树处理大部分逻辑): + +| 状态 | 说明 | 优先级 | +|------|------|--------| +| `Dead` | 已死亡,所有系统停用 | 最高 | +| `Stagger` | 弹反/强击后硬直 | 90 | +| `Hurt` | 受击硬直 | 80 | +| `Controlled` | BD 行为树正常控制 | 10 | + +当 `EnemyBase.State != Controlled` 时,BehaviorTree 暂停执行(调用 `BehaviorTree.DisableBehavior()`)。 + +--- + +## 5. Behavior Designer 任务目录 + +### Action Tasks + +| 任务类名 | 命名空间 | 说明 | +|---------|---------|------| +| `BD_MoveTo` | `BaseGames.Enemies.AI` | 通过 NavAgent 移动到 `SharedTransform target` | +| `BD_MoveToPlayer` | `BaseGames.Enemies.AI` | 持续追踪玩家位置 | +| `BD_Patrol` | `BaseGames.Enemies.AI` | 在巡逻区间来回移动(非寻路,直接控制速度)| +| `BD_FacePlayer` | `BaseGames.Enemies.AI` | 翻转 Sprite 朝向玩家 | +| `BD_Wait` | `BaseGames.Enemies.AI` | 等待 `SharedFloat duration` 秒(`Success` 后)| +| `BD_WaitRandom` | `BaseGames.Enemies.AI` | 随机等待 min~max 秒 | +| `BD_Attack` | `BaseGames.Enemies.AI` | 执行攻击(激活 HitBox,播放攻击动画)| +| `BD_PlayAnimation` | `BaseGames.Enemies.AI` | 播放指定 AnimancerState | +| `BD_StopMovement` | `BaseGames.Enemies.AI` | 立即停止移动 | +| `BD_SetAlert` | `BaseGames.Enemies.AI` | 设置 SharedBool `isAlerted` 为 true,触发警觉动画 | +| `BD_SpawnProjectile` | `BaseGames.Enemies.AI` | 从挂载点生成弹射物 | +| `BD_TeleportTo` | `BaseGames.Enemies.AI` | 瞬移到指定位置(Boss 特殊移动)| + +### Conditional Tasks + +| 任务类名 | 说明 | 返回值 | +|---------|------|--------| +| `BD_IsPlayerInRange` | 玩家是否在攻击范围内 | `Success` / `Failure` | +| `BD_IsPlayerVisible` | Raycast 检测玩家可见性 | `Success` / `Failure` | +| `BD_CanAttack` | 攻击是否冷却完毕 | `Success` / `Failure` | +| `BD_IsHPBelow` | HP 是否低于阈值(`SharedFloat threshold`)| `Success` / `Failure` | +| `BD_IsPlayerOnSamePlatform` | 玩家是否在同一平台上 | `Success` / `Failure` | +| `BD_IsPatrolComplete` | 巡逻是否到达端点 | `Success` / `Failure` | +| `BD_IsAlerted` | 是否处于警觉状态 | `Success` / `Failure` | + +### BD SharedVariables 规范 + +所有 BD 行为树中使用的 SharedVariable 命名约定(保持所有敌人一致): + +| 变量名 | 类型 | 说明 | +|--------|------|------| +| `playerTransform` | `SharedTransform` | 玩家 Transform(由 EnemyBase 注入)| +| `selfTransform` | `SharedTransform` | 自身 Transform | +| `patrolPointA` | `SharedVector2` | 巡逻起点 | +| `patrolPointB` | `SharedVector2` | 巡逻终点 | +| `isAlerted` | `SharedBool` | 是否警觉 | +| `targetPosition` | `SharedVector2` | 当前寻路目标 | +| `hpThreshold` | `SharedFloat` | HP 百分比阈值(Boss 换相用)| + +--- + +## 6. 标准行为树模板 + +### 模板 A:巡逻-警觉-追击-攻击(近战普通敌人) + +``` +[Selector] + │ + ├─ [Sequence] — 死亡检测(优先级最高) + │ └─ [Conditional] BD_IsHPBelow(0) → Running(触发 Dead 状态,BD 暂停) + │ + ├─ [Sequence] — 追击并攻击 + │ ├─ [Conditional] BD_IsPlayerVisible + │ ├─ [Action] BD_FacePlayer + │ ├─ [Selector] — 攻击或追击 + │ │ ├─ [Sequence] — 攻击 + │ │ │ ├─ [Conditional] BD_IsPlayerInRange + │ │ │ ├─ [Conditional] BD_CanAttack + │ │ │ ├─ [Action] BD_StopMovement + │ │ │ └─ [Action] BD_Attack + │ │ └─ [Action] BD_MoveToPlayer — 追击 + │ └─ [Action] BD_SetAlert + │ + └─ [Sequence] — 巡逻 + ├─ [Action] BD_Patrol + └─ [Action] BD_WaitRandom(1.0, 2.5) +``` + +### 模板 B:弓箭手(远程攻击) + +``` +[Selector] + ├─ [Sequence] — 远程攻击 + │ ├─ [Conditional] BD_IsPlayerVisible + │ ├─ [Action] BD_FacePlayer + │ ├─ [Action] BD_StopMovement + │ ├─ [Conditional] BD_CanAttack + │ └─ [Action] BD_SpawnProjectile + │ + ├─ [Sequence] — 保持距离 + │ ├─ [Conditional] BD_IsPlayerInRange(3.0) ← 太近则后退 + │ └─ [Action] BD_MoveInDirection(-1) ← 后退 + │ + └─ [Action] BD_Patrol +``` + +--- + +## 7. Boss 行为树模板 + +Boss 使用多阶段结构,`BD_IsHPBelow` 控制阶段切换: + +``` +[Selector] + │ + ├─ [Sequence] — 阶段二(HP < 40%) + │ ├─ [Conditional] BD_IsHPBelow(0.4) + │ └─ [Subtree] BossPhase2BehaviorTree + │ + ├─ [Sequence] — 阶段一(默认) + │ └─ [Subtree] BossPhase1BehaviorTree + │ + └─ [Action] BD_Wait(99) ← 异常保底(不应到达) +``` + +**BossPhase1BehaviorTree(子树)**: + +``` +[Selector] + ├─ [Sequence] — 近距攻击 + │ ├─ [Conditional] BD_IsPlayerInRange(2.5) + │ ├─ [Conditional] BD_CanAttack + │ └─ [Action] BD_Attack(AttackType.MeleeCombo) + │ + ├─ [Sequence] — 远程技能 + │ ├─ [Conditional] BD_CanAttack + │ ├─ [Action] BD_StopMovement + │ └─ [Action] BD_Attack(AttackType.RangedSkill) + │ + └─ [Action] BD_MoveToPlayer +``` + +--- + +## 8. PathBerserker2d 导航集成 + +`EnemyNavAgent` 是对 PathBerserker2d `NavAgent` 的封装,向 BD 任务提供简洁接口: + +### NavSurface 场景配置 + +每个场景必须配置: + +``` +[NavMesh] (Scene Root GameObject) +├── NavSurface ← PathBerserker2d 导航面 +│ ├── Layer Mask: Ground, Platform, OneWayPlatform +│ └── Agent Radius: 0.3(按最小敌人尺寸) +└── NavLink_Platform_01 ← 平台跳跃链接(手动放置) + NavLink_Platform_02 + ... +``` + +**NavSurface 烘焙时机**: + +- 编辑时(静态场景):在 Unity Editor 中提前烘焙并保存 +- 运行时(动态场景,P1):调用 `NavSurface.BuildNavMesh()` 动态重烘焙 + +### NavLink 类型规范 + +| NavLink 类型 | 使用场景 | 配置参数 | +|-------------|---------|---------| +| `Jump` | 从平台跳到下方平台 | `MaxFallHeight`、`JumpForce` | +| `DropDown` | 穿越单向平台下落 | `OneWayPlatformLayer` | +| `LedgeGrab` | 抓爬台阶(P1)| `ClimbHeight` | + +### EnemyNavAgent 封装接口 + +| 方法 | 说明 | +|------|------| +| `RequestMoveTo(Vector2 dest)` | 请求寻路到目标,异步开始 | +| `StopNavigation()` | 停止寻路,清空路径 | +| `IsAtDestination()` | 是否到达目标点(误差 < 0.2 units)| +| `OnNavPathFailed` | UnityEvent:寻路失败时触发(切换为直接追击)| + +**寻路失败容错**:若 `PathBerserker2d` 无法找到路径,`EnemyNavAgent.OnNavPathFailed` 触发,BD 行为树退化为简单的水平追击(`BD_MoveInDirection`)。 + +--- + +## 9. BossBase — Boss 特化设计 + +`BossBase` 继承 `EnemyBase`,新增以下机制: + +### BossPhaseConfigSO + +每个 Boss 阶段独立 SO 资产,便于策划调整: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `PhaseIndex` | `int` | 阶段编号(从1开始)| +| `HPThreshold` | `float` | 进入此阶段的 HP 百分比(0~1)| +| `BehaviorTreeAsset` | `ExternalBehaviorTree` | 该阶段使用的 BD 行为树资产 | +| `MusicTrack` | `AudioClip` | 阶段背景音乐 | +| `PhaseTransitionFeedback` | `MMF_Player` | 换相时播放的 Feel 反馈(特效/震动)| + +### 血量分段显示 + +`BossHPBar` 根据 `BossPhaseConfigSO[]` 绘制血量分段线,玩家可在 UI 中预判换相位置。 + +### BossArena 配置 + +``` +[BossArena] (Scene GameObject) +├── ArenaCollider ← PolygonCollider2D,限制玩家退出 Boss 房间 +├── BossSpawnPoint ← Boss 出生点 +├── [CameraBounds_Boss] ← 专属 Cinemachine Confiner(固定大视野) +└── BossRoomTrigger ← OnTriggerEnter2D 触发 Boss 战开始 + └─ 发布 OnBossFightStarted 事件频道 +``` + +--- + +## 10. 敌人 Prefab 层级结构 + +``` +[Enemy_GruntWarrior] (Prefab) +├── SpriteRenderer +├── AnimancerComponent +├── Rigidbody2D (Body Type: Dynamic, Freeze Rotation Z) +├── CapsuleCollider2D (物理碰撞) +│ +├── [HurtBox] +│ ├── BoxCollider2D (IsTrigger, Layer: EnemyHurtBox) +│ └── HurtBox.cs +│ +├── [HitBox_Melee] +│ ├── BoxCollider2D (IsTrigger, Layer: EnemyAttack) +│ └── HitBox.cs +│ └── _damageSource: ES_GruntWarrior_Melee.asset +│ +├── [DetectionRange] +│ └── CircleCollider2D (IsTrigger, 半径 = DetectionRange) +│ +├── EnemyBase.cs +├── EnemyStats.cs ← 持有 EnemyStatsSO 引用 +├── EnemyMovement.cs +├── EnemyAnimator.cs +├── EnemyCombat.cs +├── EnemyNavAgent.cs ← 持有 NavAgent 引用 +├── BehaviorTree.cs ← 持有 BehaviorTreeAsset 引用 +└── EnemyFeedback.cs ← 持有 MMF_Player 引用 +``` + +--- + +## 11. EnemyAnimationConfigSO + +每类敌人配置独立的 `EnemyAnimationConfigSO`(存放于 `Assets/ScriptableObjects/Enemies/Animations/`): + +| 字段名 | 说明 | +|--------|------| +| `Idle` | 待机循环动画 | +| `Walk` | 行走循环 | +| `Run` | 奔跑循环 | +| `Alert` | 警觉动画(发现玩家时)| +| `Attack_Melee` | 近战攻击 | +| `Attack_Ranged` | 远程攻击(弓箭手/法师)| +| `Hurt` | 受击动画 | +| `Stagger` | 弹反硬直 | +| `Death` | 死亡动画(播放一次后保持最后帧)| + +--- + +## 12. 编辑器友好设计 + +### EnemyBase 自定义 Inspector + +``` +┌─ EnemyBase ─────────────────────────────────────┐ +│ State : Controlled │ +│ HP : █████████░░░ 75 / 100 │ +│ Alerted : ✓ │ +│ Nav Path : Active → Room_Forest_01 (0.8m) │ +│ ───────────────────────────────────────────── │ +│ BD Tree : [GruntWarrior_Patrol.asset] │ +│ [当前执行节点: BD_MoveToPlayer] │ +│ ───────────────────────────────────────────── │ +│ [强制Stagger 0.8s] [强制Death] [重置HP] [重置BD]│ +└─────────────────────────────────────────────────┘ +``` + +### Scene 视图 Gizmos + +| Gizmo | 颜色 | 说明 | +|-------|------|------| +| 检测范围 | 黄色圆圈 | `DetectionRange` 球形范围 | +| 攻击范围 | 红色圆圈 | `AttackRange` 球形范围 | +| 巡逻路径 | 蓝色线段 | `patrolPointA` ↔ `patrolPointB` 连线 | +| 寻路目标 | 绿色箭头 | 指向当前 NavAgent 目标点 | +| HitBox | 橙色矩形 | 攻击判定区域(激活时实心,未激活时虚线)| +| HurtBox | 绿色矩形 | 受击区域 | +| 视线检测 | 青色射线 | `IsPlayerVisible` 使用的 Raycast | diff --git a/Docs/Design/07_FeedbackSystem.md b/Docs/Design/07_FeedbackSystem.md new file mode 100644 index 0000000..6d843d3 --- /dev/null +++ b/Docs/Design/07_FeedbackSystem.md @@ -0,0 +1,351 @@ +# 07 · 反馈系统 + +> **命名空间** `BaseGames.Feedback` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** Feel v4.3 · `BaseGames.Core.Events` · `BaseGames.Combat` + +--- + +## 目录 + +1. [设计原则](#1-设计原则) +2. [Feel MMF_Player 体系](#2-feel-mmf_player-体系) +3. [PlayerFeedback — 玩家反馈配置](#3-playerfeedback--玩家反馈配置) +4. [EnemyFeedback — 敌人反馈配置](#4-enemyfeedback--敌人反馈配置) +5. [时间管理:子弹时间集成](#5-时间管理子弹时间集成) +6. [镜头震动集成](#6-镜头震动集成) +7. [音效管理](#7-音效管理) +8. [粒子特效规范](#8-粒子特效规范) +9. [UI 反馈](#9-ui-反馈) +10. [事件频道驱动的全局反馈](#10-事件频道驱动的全局反馈) +11. [FeedbackConfigSO](#11-feedbackconfigso) +12. [编辑器友好设计](#12-编辑器友好设计) + +--- + +## 1. 设计原则 + +- **零耦合**:所有反馈通过**事件频道**或 `UnityEvent` 触发,GameLogic 不直接调用 Feedback +- **数据驱动**:每种反馈配置为独立 `MMF_Player` 资产,可在 Inspector 中调节,无需修改代码 +- **分层设计**:本地反馈(HitBox 命中瞬间)→ 全局反馈(OnHitConfirmed 频道)→ 时间管理(ParrySuccess) +- **像素风格适配**:优先使用 Shader 闪光(Flash)而非粒子,减少视觉噪声 + +--- + +## 2. Feel MMF_Player 体系 + +### MMF_Player 命名规范 + +所有 `MMF_Player` GameObject 命名格式:`MMF_{Owner}_{EventName}` + +示例: +- `MMF_Player_OnHit`(玩家受击) +- `MMF_Player_OnAttackHit`(玩家攻击命中) +- `MMF_Player_OnParrySuccess`(弹反成功) +- `MMF_Enemy_OnHit`(敌人受击) +- `MMF_Enemy_OnDeath`(敌人死亡) + +### MMF_Player Feedback 类型速查 + +| Feel Feedback 类型 | 常用场景 | 关键参数 | +|-------------------|---------|---------| +| `MMF_Flash` | Sprite 受击白闪 | `FlashColor`, `Duration` | +| `MMF_SpriteRenderer` | 闪烁/变色 | `Color`, `Blink Duration` | +| `MMF_Particles` | 命中粒子特效 | `ParticleSystem` 引用 | +| `MMF_AudioSource` | 播放音效 | `AudioClip`, `Volume`, `Pitch Variance` | +| `MMF_CinemachineImpulse` | 镜头震动 | `ImpulseSource`, `Velocity` | +| `MMF_FreezeFrame` | 命中冻帧 | `FreezeDuration` | +| `MMF_TimeScale` | 子弹时间 | `TimeScale`, `Duration` | +| `MMF_TextMeshPro` | 伤害数字弹出 | `Value`, `Animation Curve` | +| `MMF_Position` | 物体位移(扑克震动)| `Displacement`, `Curve` | +| `MMF_Scale` | 冲击缩放(南瓜弹)| `Scale`, `Duration` | +| `MMF_Enable` | 启用/禁用 GameObject | `Target` | + +--- + +## 3. IFeedbackPlayer 接口 — 反馈抽象层 + +为了让游戏逻辑(`PlayerCombat`、`EnemyBase`)与具体的 Feel/MMF_Player 实现零耦合,所有反馈调用必须通过 `IFeedbackPlayer` 接口进行: + +```csharp +/// +/// 反馈执行器的抽象接口。 +/// GameLogic 依赖此接口,而非具体的 MMF_Player 引用。 +/// +public interface IFeedbackPlayer +{ + void PlayHit(HitWeight weight); // 命中反馈(轻/中/重) + void PlayParrySuccess(); // 弹反成功 + void PlayTakeHit(); // 玩家受击 + void PlayDeath(); // 死亡演出 + void PlayHeal(); // 治疗 + void PlayLandImpact(); // 落地冲击 + void PlayAttackWhoosh(); // 攻击挥动音效 + void PlayJumpLaunch(); // 起跳 + void TriggerPreset(string presetId); // 通过 ID 触发任意预设(动画事件用) + void PlaySFXById(string sfxId); // 通过 ID 播放音效(动画事件用) +} +``` + +**使用规范**: +- `PlayerCombat`、`PlayerMovement` 等逻辑组件持有 `IFeedbackPlayer _feedback`(通过 Inspector 注入) +- 测试时可替换为 `NullFeedbackPlayer`(空实现),完全不需要 Feel 资产 +- 新增反馈类型时先在接口声明,再在 `PlayerFeedback` 中实现,保持单一变更点 + +--- + +## 4. PlayerFeedback — 玩家反馈配置 + +`PlayerFeedback` 组件挂载在 Player Prefab 下,实现 `IFeedbackPlayer` 接口,聚合所有玩家相关 `MMF_Player`: + +### 受击反馈(OnTakeHit) + +| Feedback | 参数 | 视觉效果 | +|----------|------|---------| +| `MMF_Flash` | 白色,0.15s | Sprite 白闪(经典受击感)| +| `MMF_AudioSource` | SFX_Player_Hurt | 受伤音效(随机 Pitch 0.9~1.1)| +| `MMF_CinemachineImpulse` | Medium,0.5强度 | 镜头震动 | +| `MMF_FreezeFrame` | 0.033s | 2帧冻帧 | +| `MMF_Position` | 朝击退反方向 1 unit | 玩家轻微弹开 | + +### 攻击命中反馈(OnAttackHit) + +| Feedback | 参数 | 说明 | +|----------|------|------| +| `MMF_Particles` | HitSpark Prefab,命中点生成 | 金属火花粒子 | +| `MMF_AudioSource` | SFX_Attack_Hit(随机 3 个变体之一)| 命中音效 | +| `MMF_FreezeFrame` | 0.033s(2帧)| 命中停顿感 | +| `MMF_CinemachineImpulse` | Light,0.2强度 | 轻微镜头震 | + +### 弹反成功反馈(OnParrySuccess) + +| Feedback | 参数 | 说明 | +|----------|------|------| +| `MMF_Flash` | 金色,0.1s | Sprite 金光闪烁 | +| `MMF_Particles` | ParryFlash Prefab(全屏金色光圈)| 弹反标志性特效 | +| `MMF_AudioSource` | SFX_Parry_Success(金属碰撞音)| 清脆弹反音效 | +| `MMF_CinemachineImpulse` | Parry,0.7强度,带方向 | 有方向性震动 | +| `MMF_TimeScale` | 0.25×,0.2s | 子弹时间(与 ParrySystem 同步)| +| `MMF_FreezeFrame` | 0.066s(4帧)| 更长冻帧强调击中感 | + +### 治疗反馈(OnHeal) + +| Feedback | 参数 | 说明 | +|----------|------|------| +| `MMF_Flash` | 蓝色,0.2s | 恢复光效 | +| `MMF_Particles` | HealParticle Prefab | 向上飘散的蓝色粒子 | +| `MMF_AudioSource` | SFX_Heal | 回血音效 | + +### 死亡反馈(OnDeath) + +| Feedback | 参数 | 说明 | +|----------|------|------| +| `MMF_AudioSource` | SFX_Player_Death | 死亡音效 | +| `MMF_CinemachineImpulse` | Heavy,1.0强度 | 强烈震动 | +| `MMF_FreezeFrame` | 0.1s(6帧)| 死亡冻帧 | +| `MMF_Enable` | 禁用 HurtBox | 防止死亡后继续受击 | + +--- + +## 4. EnemyFeedback — 敌人反馈配置 + +`EnemyFeedback` 挂在每个敌人 Prefab 下: + +### 受击反馈(OnHit) + +| Feedback | 参数 | 说明 | +|----------|------|------| +| `MMF_Flash` | 白色,0.1s | 受击白闪 | +| `MMF_AudioSource` | SFX_Enemy_Hurt(按敌人类型变体)| 受伤音效 | +| `MMF_Particles` | HitSpark(命中位置)| 命中粒子 | + +### 被弹反反馈(OnParried) + +| Feedback | 参数 | 说明 | +|----------|------|------| +| `MMF_Flash` | 金色,0.15s | 与玩家弹反视觉对应 | +| `MMF_SpriteRenderer` | 扭曲/Shader 效果 | 硬直视觉反馈 | +| `MMF_AudioSource` | SFX_Parry_Impact | 被弹反音效 | +| `MMF_Position` | 小幅后退 | 轻微击退特效 | + +### 死亡反馈(OnDeath) + +| Feedback | 参数 | 说明 | +|----------|------|------| +| `MMF_AudioSource` | SFX_Enemy_Death | 死亡音效 | +| `MMF_Particles` | DeathParticle Prefab | 死亡解体粒子 | +| `MMF_Enable` | 禁用 Rigidbody2D / Colliders | 防止尸体物理继续 | +| `MMF_FreezeFrame` | 0.05s(3帧)| 击杀冻帧 | + +--- + +## 5. 时间管理:子弹时间集成 + +子弹时间通过两套系统协调: + +### Feel MMTimeManager(主要) + +- 注册所有 `MMTimeManager` Listener +- `ParrySystem.TriggerParrySuccess()` → `MMTimeScaleEvent` 广播 +- `MMTimeManager` 接收后修改 `Time.timeScale` +- 时间恢复:Lerp 方式平滑还原(`LerpSpeed = 20`) + +### 与 Animancer 的配合 + +- Animancer 动画默认使用 `Time.timeScale`(跟随子弹时间减速) +- 特例:UI 动画、音频播放必须用 `Time.unscaledDeltaTime` +- 检测敌人动画速率被子弹时间自动降低(无需额外配置) + +--- + +## 6. 镜头震动集成 + +详见 [02_CameraSystem](./02_CameraSystem.md#6-镜头震动cinemachineimpulse)。 + +### Feel 与 Cinemachine Impulse 的桥接 + +Feel `MMF_CinemachineImpulse` → 内部调用 `CinemachineImpulseSource.GenerateImpulse()` → `CinemachineImpulseListener` 响应。 + +**PlayerFeedback 中每种震动类型对应 ImpulseSource**(Inspector 中拖入引用): + +| 震动类型 | 来源 ImpulseSource | 说明 | +|---------|-------------------|------| +| Light | `ImpulseSource_Light` | 普通命中 | +| Medium | `ImpulseSource_Medium` | 玩家受伤 | +| Heavy | `ImpulseSource_Heavy` | 玩家死亡 / Boss 重击 | +| Parry | `ImpulseSource_Parry` | 弹反成功(带方向性)| + +--- + +## 7. 音效管理 + +### 音效 SO 资产结构 + +`AudioEventSO` 封装音效播放参数(非特定 AudioSource),通过事件频道解耦: + +| 字段 | 类型 | 说明 | +|------|------|------| +| `Clips` | `AudioClip[]` | 随机选取其中一个播放 | +| `Volume` | `float` | 基础音量(0~1)| +| `PitchMin` | `float` | Pitch 随机范围最小值 | +| `PitchMax` | `float` | Pitch 随机范围最大值 | +| `MixerGroup` | `AudioMixerGroup` | SFX / Music / UI 混音组 | + +所有 `MMF_AudioSource` 通过 `AudioEventSO` 播放音效(而非直接引用 `AudioClip`),实现随机音调变化。 + +### 音效资产路径 + +``` +Assets/Audio/SFX/ +├── Player/ +│ ├── SFX_Player_Hurt.asset +│ ├── SFX_Player_Death.asset +│ ├── SFX_Attack_Hit.asset ← 含3个变体Clip +│ ├── SFX_Parry_Success.asset +│ └── SFX_Heal.asset +├── Enemies/ +│ ├── SFX_Enemy_Hurt_Generic.asset +│ └── SFX_Enemy_Death_Generic.asset +└── World/ + ├── SFX_Footstep.asset + └── SFX_Landing.asset +``` + +--- + +## 8. 粒子特效规范 + +| 特效 Prefab | 触发来源 | 生命周期 | 说明 | +|-------------|---------|---------|------| +| `FX_HitSpark` | 攻击命中 | 0.3s 后自销毁 | 金属火花(4~6 粒子)| +| `FX_ParryFlash` | 弹反成功 | 0.5s 后自销毁 | 金色光圈(全屏扩散)| +| `FX_HealParticle` | 玩家治疗 | 1.0s 后自销毁 | 蓝色粒子上飘 | +| `FX_EnemyDeath` | 敌人死亡 | 1.5s 后自销毁 | 解体粒子(按敌人主题色)| +| `FX_DustCloud` | 玩家落地 | 0.5s 后自销毁 | 落地灰尘 | +| `FX_DashTrail` | 玩家冲刺 | 0.4s 后自销毁 | 冲刺残影(Sprite Fade)| + +**像素风格适配**:所有粒子使用 `Render Mode: Billboard`,粒子贴图与角色 PPU(32 PPU)保持一致,避免模糊。 + +--- + +## 9. UI 反馈 + +### 伤害数字(FloatingText) + +- 触发:`OnHitConfirmed` 事件频道 +- 从对象池中取 `FloatingText` Prefab,在命中位置生成 +- 数字内容:`DamageInfo.FinalDamage` +- 弹反反击:数字显示为金色 + 粗体(`FinalDamage` 为 3× 时额外标记) +- 动画:向上飘 0.8s + 淡出 + +### HP 血条动画 + +- `OnPlayerHPChanged` 事件频道驱动 +- 满格 HP 以绿色实心显示,扣除部分以红色渐出动画表示(延迟 0.2s 开始缩短,视觉缓冲) + +### Soul 槽动画 + +- `OnSoulChanged` 事件频道驱动 +- 弹反成功 +33 时,Soul 槽显示**扫光动画**(金色高亮流过 1/3 槽) + +--- + +## 10. 事件频道驱动的全局反馈 + +`GlobalFeedbackController` 组件(单例,挂在 `[Managers]` GO 上)监听全局频道并触发对应 `MMF_Player`: + +| 频道 | 触发反馈 | +|------|---------| +| `OnPlayerDied` | 停止音乐、播放死亡演出(慢慢音量淡出,画面泛红)| +| `OnBossFightStarted` | 停止环境音乐、淡入 Boss 战BGM | +| `OnBossFightEnded` | Boss 死亡演出(震动+特效+音乐过渡)| +| `OnRoomEntered` | 淡出 → 淡入(场景切换遮罩)| + +--- + +## 11. FeedbackConfigSO + +`FeedbackConfigSO` 全局配置,存放于 `Assets/ScriptableObjects/Config/FeedbackConfigSO.asset`: + +| 参数 | 类型 | 推荐值 | 说明 | +|------|------|--------|------| +| `HitFreezeFrames` | `int` | 2 | 命中冻帧帧数 | +| `ParryFreezeFrames` | `int` | 4 | 弹反冻帧帧数 | +| `SfxVolumeMaster` | `float` | 1.0 | SFX 总音量(0~1)| +| `HapticsEnabled` | `bool` | true | 手柄震动开关(P2)| +| `FloatingTextPoolSize` | `int` | 20 | 伤害数字对象池大小 | +| `ParticlePoolSize` | `int` | 30 | 粒子特效对象池大小 | + +--- + +## 12. 编辑器友好设计 + +### MMF_Player 预览支持 + +Feel 原生支持在 Editor 非 Play Mode 下预览 `MMF_Player`: + +- Inspector 底部的"▶ Play"按钮可单独预览每组反馈 +- `Preview in Editor` 模式下验证视觉效果,无需进入 Play Mode + +### FX 对象池监控(Play Mode Inspector) + +``` +┌─ GlobalFeedbackController ──────────────────────┐ +│ FloatingText Pool: 14 / 20 available │ +│ Particle Pool : 28 / 30 available │ +│ ───────────────────────────────────────────── │ +│ [Test: Player Hurt] [Test: Parry Success] │ +│ [Test: Enemy Hit ] [Test: Boss Phase Change] │ +└────────────────────────────────────────────────┘ +``` + +### 反馈效果全局开关(调试用) + +`FeedbackDebugOverlay`(编辑器 Play Mode 下叠加): + +- `[Toggle Screen Shake]`:开关镜头震动 +- `[Toggle Freeze Frames]`:开关冻帧 +- `[Toggle Particles]`:开关粒子特效 +- `[Toggle Bullet Time]`:开关子弹时间 + +方便策划/美术人员单独调试某类反馈。 diff --git a/Docs/Design/08_WorldSystem.md b/Docs/Design/08_WorldSystem.md new file mode 100644 index 0000000..cd99f36 --- /dev/null +++ b/Docs/Design/08_WorldSystem.md @@ -0,0 +1,1515 @@ +# 08 · 世界系统 + +> **命名空间** `BaseGames.World` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** `BaseGames.Core.Events` · `BaseGames.Player` · PathBerserker2d(NavSurface) + +--- + +## 目录 + +1. [系统总览](#1-系统总览) +2. [场景结构规范](#2-场景结构规范) +3. [房间过渡系统](#3-房间过渡系统) +4. [存档系统](#4-存档系统) +5. [SaveData JSON Schema](#5-savedata-json-schema) +6. [危险区域](#6-危险区域) +7. [可收集物](#7-可收集物) +8. [能力解锁物件](#8-能力解锁物件) +9. [可交互环境](#9-可交互环境) +10. [地图系统(P1)](#10-地图系统p1) +11. [商店 NPC](#11-商店-npc) +12. [死亡遗骸(DeathShade)](#12-死亡遗骸deathshade) +13. [世界事件频道](#13-世界事件频道) +14. [编辑器友好设计](#14-编辑器友好设计) +15. [Tilemap 与物理材质配置](#15-tilemap-与物理材质配置) + +--- + +## 1. 系统总览 + +``` +世界系统职责: + ├─ 场景(房间)结构规范 → 所有关卡按统一层级组织 + ├─ 房间过渡(门/传送) → RoomTransition 组件 + ├─ 存档/读档(JSON 持久化) → SaveManager + ├─ 危险区域(即死/恢复) → HazardZone + ├─ 可收集物(Geo/物品) → Collectible + ├─ 能力解锁物件 → AbilityUnlock + ├─ 地图系统(P1) → MapManager / RoomReveal + └─ 商店 NPC(P1) → ShopNPC +``` + +**零耦合原则**:世界物件通过 SO 事件频道通知玩家系统,不直接持有 `PlayerController` 引用。 + +--- + +## 2. 场景结构规范 + +### 场景文件命名 + +``` +Room_{Region}_{Index} 示例: Room_Forest_01, Room_Cave_03 +Boss_{Region} 示例: Boss_Forest, Boss_Ruins +Hub_Town 示例: 休息营地/镇子 +Persistent 常驻场景(GameManager, AudioManager, InputReader 等) +``` + +### 标准房间场景层级结构 + +``` +Scene: Room_Forest_01 +│ +├── [Persistent] ← 多场景共享,使用 Additive Load +│ └─ 见 Persistent 场景说明 +│ +├── [Level] +│ ├── Tilemap_Ground Layer: Ground +│ ├── Tilemap_Background Layer: Background(非碰撞) +│ ├── Tilemap_Foreground Layer: Foreground(非碰撞) +│ ├── Tilemap_OneWay Layer: OneWayPlatform +│ ├── Tilemap_Destructible Layer: Ground(Intact 态同 Ground;Destroyed 后禁用 Renderer) +│ ├── Tilemap_SoftGround Layer: Ground(地行术松软地面;挂载 SoftTerrain Marker 组件) +│ └── Tilemap_MagicWall Layer: MagicWall(太虚斩/地行术 Ghost 层可穿越) +│ +├── [NavMesh] +│ ├── NavSurface ← PathBerserker2d 导航面(提前烘焙) +│ ├── NavLink_01 ← 平台跳跃链接 +│ └── NavLink_02 +│ +├── [Enemies] +│ ├── Enemy_GruntWarrior_01 (Prefab实例) +│ └── Enemy_SkullArcher_01 (Prefab实例) +│ +├── [Interactables] +│ ├── SavePoint_01 ← 存档点 +│ ├── Door_To_Forest_02 ← 房间出口 +│ ├── Collectible_Geo_01 ← 掉落物 +│ ├── MovingPlatform_01 ← 移动平台(见 §9.3) +│ ├── DestructibleWall_01 ← 可破坏地形(见 §9.4) +│ ├── Switch_01 ← 单向可交互机关(见 §9.6) +│ ├── CrumblePlatform_01 ← 碎裂平台(见 §9.7) +│ ├── FalseWall_01 ← 假墙/秘密通道(见 §9.8) +│ ├── MagicWall_01 ← 魔法障壁(见 §9.10,Layer: MagicWall) +│ └── PhantomPlate_01 ← 幻影机关(见 §9.11,残阴术灵体可触发) +│ +├── [Hazards] +│ └── HazardZone_Spikes_01 +│ +├── [CameraBounds] +│ ├── PolygonCollider2D ← 镜头约束 +│ └── RoomCameraBounds.cs +│ +└── [Audio] + └── AudioZone_Forest ← 环境音区域(P1) +``` + +### Persistent 常驻场景 + +``` +Scene: Persistent (Additive,始终加载) +├── [Managers] +│ ├── GameManager.cs ← 游戏状态(MainMenu/Gameplay/Pause/GameOver) +│ ├── SaveManager.cs ← 存档管理 +│ └── GlobalFeedbackController.cs +│ +├── [Input] +│ └── InputReaderSO 实例 ← 事实上是 SO 资产,在 Managers 中注册事件 +│ +├── [Camera] +│ └── CameraRig (Prefab) ← 见 02_CameraSystem +│ +└── [UI] + └── HUD_Canvas +``` + +--- + +## 3. 房间过渡系统 + +### RoomTransition 组件 + +`RoomTransition` 挂在房间的"门"或"出口触发器"上: + +``` +[Door_To_Forest_02] +├── BoxCollider2D (IsTrigger) +└── RoomTransition.cs + ├── _targetScene: string ← 目标场景名 + ├── _spawnPointId: string ← 目标场景的玩家出生点 ID + ├── _transitionType: TransitionType ← Door / Fall / Teleport + └── _onRoomEntered: TransformEventChannelSO ← 过渡完成后发布 +``` + +### 过渡流程(LoadScene 事件频道) + +``` +玩家进入 RoomTransition 触发器 + │ + ▼ +RoomTransition → 发布 LoadSceneEvent(targetScene, spawnPointId) + │ + ▼ +GameManager.OnLoadSceneRequested(LoadSceneEvent) + │ + ├─ 1. 触发过渡动画(遮罩淡入) + ├─ 2. AsyncOperation: LoadSceneAsync(targetScene, Additive) + ├─ 3. 卸载旧场景: UnloadSceneAsync(currentScene) + ├─ 4. 在新场景中找到 SpawnPoint(spawnPointId) + ├─ 5. 移动玩家到 SpawnPoint 位置 + ├─ 6. 触发 OnRoomEntered 事件频道(新房间 Transform) + └─ 7. 过渡动画淡出 +``` + +### SpawnPoint 组件 + +``` +[SpawnPoint_Entry_From_Forest_01] +├── SpawnPoint.cs +│ └── _id: string ← 与 RoomTransition._spawnPointId 对应 +└── (Scene 视图中绿色旗帜 Gizmo) +``` + +--- + +## 4. 存档系统 + +### SaveManager 职责 + +- 在玩家触发存档点时,序列化 `SaveData` 并写入本地 JSON +- 游戏启动时自动读取并反序列化 `SaveData` +- 多存档槽支持(最多 3 个) + +### 存档触发流程 + +``` +玩家与 SavePoint 交互 + │ + ▼ +SavePoint.OnInteract() + │ + ├─ 播放存档动画(发光/点亮) + ├─ PlayerStats.FullHeal()(存档点满血) + ├─ 发布 OnSavePointActivated 事件频道 + └─ SaveManager.Save() +``` + +### 读档时机 + +- 玩家死亡后:自动读取最近存档,恢复 `SaveData` 并加载存档点所在场景 +- 返回主菜单后继续游戏:加载 `SaveData.LastSaveSceneName` + +--- + +## 5. SaveData JSON Schema + +```json +{ + "version": "1.0", + "slotIndex": 0, + "lastSaveTimestamp": "2024-01-01T00:00:00Z", + "lastSaveScene": "Room_Forest_01", + "lastSavePointId": "SP_Forest_01_Entry", + + "player": { + "maxHP": 5, + "currentHP": 5, + "maxSoul": 99, + "currentGeo": 340, + "position": { "x": 12.5, "y": -3.0 } + }, + + "abilities": { + "doubleJump": true, + "wallGrab": false, + "aerialDash": false, + "swim": false, + "parry": true + }, + + "items": { + "healthContainersCollected": ["HC_Forest_01", "HC_Cave_02"], + "keyItems": ["Key_RuinsGate"] + }, + + "world": { + "discoveredRooms": ["Room_Forest_01", "Room_Forest_02", "Room_Cave_01"], + "clearedRooms": ["Room_Forest_01"], + "collectiblesPickedUp": ["Geo_Forest_01_Cluster", "HealthContainer_Cave_01"], + "defeatedBosses": [], + "openedDoors": ["Door_Forest_To_Cave"], + "activatedSavePoints": ["SP_Forest_01_Entry", "SP_Forest_02_Main"], + "destroyedTerrain": ["DT_Forest_01_WallA", "DT_Cave_02_FloorB"], + "triggeredMechanisms": ["Switch_Forest_01", "Lever_Cave_03"] + }, + + "settings": { + "sfxVolume": 1.0, + "musicVolume": 0.8, + "hapticsEnabled": true + } +} +``` + +### 持久化路径 + +| 平台 | 路径 | +|------|------| +| Windows | `%APPDATA%/Zeling/Saves/Slot{n}.json` | +| macOS | `~/Library/Application Support/Zeling/Saves/Slot{n}.json` | +| Android/iOS | `Application.persistentDataPath/Saves/Slot{n}.json` | + +### 安全考量 + +- JSON 文件写入使用**原子写入**:先写临时文件,完成后 rename,防止写入中断导致存档损坏 +- 不使用 `PlayerPrefs` 存储敏感游戏数据 + +--- + +## 6. 危险区域 + +`HazardZone` 处理即死/持续伤害区域: + +``` +[HazardZone_Spikes] +├── BoxCollider2D (IsTrigger) +└── HazardZone.cs + ├── _hazardType: HazardType ← InstantKill / DamagePerSecond + ├── _damageAmount: int ← DamagePerSecond 时的每秒伤害 + ├── _respawnType: RespawnType ← AtLastSavePoint / AtRoomEntry + └── (生成特殊 DamageInfo,DamageType = True,IgnoreIFrame 标记) +``` + +| HazardType | 行为 | +|-----------|------| +| `InstantKill` | 接触即触发 `OnPlayerDied`(不经过 HP 扣减,真实伤害 = MaxHP)| +| `DamagePerSecond` | 每秒生成 DamageInfo(通过 HurtBox 正常流程处理)| + +--- + +## 7. 可收集物 + +`Collectible` 处理场景中可拾取的物件: + +``` +[Collectible_Geo_Cluster] +├── SpriteRenderer(旋转动画) +├── CircleCollider2D (IsTrigger) +└── Collectible.cs + ├── _collectibleType: CollectibleType ← Geo / SmallGeo / HealthOrb / SoulOrb + ├── _value: int ← 数值 + ├── _collectibleId: string ← 唯一ID,用于 SaveData 记录 + └── _onCollected: VoidEventChannelSO ← 触发后发布 +``` + +### Collectible 类型 + +| 类型 | 效果 | 说明 | +|------|------|------| +| `Geo` | 增加 `value` 货币 | 固定位置掉落(Scene 中放置)| +| `SmallGeo` | 增加少量货币(1~3)| 敌人死亡时随机生成(ObjectPool)| +| `HealthOrb` | 恢复 1 HP | 大型敌人/Boss 死亡掉落 | +| `SoulOrb` | 恢复 33 Soul | 特定地点放置 | + +--- + +## 8. 能力解锁物件 + +`AbilityUnlock` 是隐藏在关卡中的特殊物件,玩家交互后永久解锁能力: + +``` +[AbilityUnlock_DoubleJump] +├── SpriteRenderer(特殊图标/动画) +├── BoxCollider2D (IsTrigger) +└── AbilityUnlock.cs + ├── _abilityType: AbilityType ← DoubleJump / WallJump / etc. + ├── _unlockId: string ← 唯一ID,存入 SaveData + ├── _acquisitionFeedback: MMF_Player ← 获取演出(特效/音效) + └── _onAbilityUnlocked: ...EventChannel ← 发布解锁事件 +``` + +**解锁流程**: + +``` +玩家接触 AbilityUnlock 触发器 + → AbilityUnlock.OnTriggerEnter2D + → PlayerStats.UnlockAbility(abilityType) + → SaveManager.MarkCollected(unlockId) + → 播放 acquisitionFeedback(演出:画面特写、动画、音乐节拍) + → GameObject 设为 inactive(存档后不再出现) +``` + +--- + +## 9. 可交互环境 + +> **命名空间** `BaseGames.World.Interactables` + +### 9.1 类型总览 + +| 类型 | 组件 | 持久化 | 地图联动(P1)| +|------|------|--------|-------------| +| 单向平台 | `PlatformEffector2D`(Unity 内置)| 否 | 否 | +| 移动平台 | `MovingPlatform` | 否(重进房间重置)| 否 | +| 可破坏地形 | `DestructibleTile` | ✓(`isPermanent = true` 时)| ✓ | +| 单向可破坏墙体 | `DirectionalDestructible` | ✓(同上)| ✓ | +| 单向可交互机关 | `DirectionalInteractable` | ✓(`isOneShot = true` 时)| ✓(机关态)| +| 碎裂平台 | `CrumblePlatform` | 否(重进房间重置)| 否 | +| 假墙 / 秘密通道 | `FalseWall` | ✓(揭示后写入 SaveData)| ✓(显示为通道)| +| **魔法障壁** | `MagicWall` | 否(障壁本身不销毁)| 否 | +| **松软地面** | `SoftTerrain`(Marker 组件)| 否 | 否 | +| **幻影机关** | `PhantomInteractable` | ✓(`isOneShot = true` 时)| ✓(同 DirectionalInteractable)| + +**零耦合原则**:所有可交互环境物件通过 SO 事件频道通知其他系统,不直接持有 `PlayerController` / `SaveManager` 引用。 + +--- + +### 9.2 单向平台 (OneWayPlatform) + +单向平台使用 Unity 内置 `PlatformEffector2D` 实现,置于独立的 `Tilemap_OneWay` 层(已在场景层级规范中定义)。 + +**组件配置**: + +``` +Tilemap_OneWay +└── TilemapCollider2D + CompositeCollider2D + PlatformEffector2D + ├── useOneWay = true + ├── surfaceArc = 170° ← 允许从侧面和底部穿透 + └── rotationalOffset = 0 ← 上表面为有效碰撞面 +``` + +**下穿逻辑**(在 `PlayerMovement` 侧处理,平台自身无额外代码): +按下 ↓ + Jump(处于 InputBuffer 窗口内)→ `PlayerMovement` 临时调用 `Physics2D.IgnoreLayerCollision(Player, OneWayPlatform, true)`,持续 0.2s 后恢复。 + +**NavLink 集成**:PathBerserker2d 对 `OneWayPlatform` 层 Tilemap 自动生成 `DropDown` 类型 NavLink;`BD_DropDown` Action Task 驱动敌人下穿。 + +--- + +### 9.3 移动平台 (MovingPlatform) + +``` +[MovingPlatform_AB_01] +├── SpriteRenderer +├── Rigidbody2D (Kinematic) +├── CompositeCollider2D(平台碰撞体) +├── BoxCollider2D (IsTrigger,乘客检测,覆盖顶面上方一像素) +└── MovingPlatform.cs + ├── _moveType: MoveType ← LinearAB / WayPoints / TriggeredLinear + ├── _wayPoints: Transform[] ← 路径点列表(LinearAB 仅用 [0][1]) + ├── _speed: float ← 移动速度(u/s,默认 3.0) + ├── _waitAtEndpoint: float ← 端点停留时间(默认 0.5s) + └── _activationChannel: VoidEventChannelSO ← TriggeredLinear 模式监听此频道 +``` + +**乘客处理**(Passenger Pattern): +- 乘客检测器(IsTrigger)检测到 `Player` 或 `Enemy` 层时,将乘客 `transform.SetParent(this.transform)` 跟随平台位移 +- 平台停止/到达终点时解除父子关系,乘客速度继承平台当前速度 + +**MoveType 说明**: + +| 类型 | 行为 | +|------|------| +| `LinearAB` | `_wayPoints[0]` ↔ `_wayPoints[1]` 往返循环 | +| `WayPoints` | 按 `_wayPoints[]` 顺序环形循环 | +| `TriggeredLinear` | 收到 `_activationChannel` 信号后单程 [0]→[1],到达后停止 | + +**NavSurface 联动**:每个移动平台挂载独立 `LocalNavSurface`(局部坐标系烘焙),附着其上的敌人 NavAgent 使用该局部 NavSurface 进行寻路。 + +--- + +### 9.4 可破坏地形 (DestructibleTile) + +``` +[DestructibleWall_Forest_01] +├── SpriteRenderer(Sprite 图集:Intact / Cracked / Destroyed 三帧) +├── BoxCollider2D(Intact 时启用;Destroyed 后禁用) +├── HurtBox.cs(接受伤害,将 DamageInfo 转发至 DestructibleTile) +└── DestructibleTile.cs + ├── _destructibleId: string ← 全局唯一 ID(如 "DT_Forest_01_WallA") + ├── _destroyTrigger: DestroyTrigger ← AnyAttack / SpecificAbility / Interact + ├── _requiredAbility: AbilityType ← SpecificAbility 模式所需能力 + ├── _isPermanent: bool ← true = 破坏后写入 SaveData,持久化 + ├── _respawnDelay: float ← 0 = 永久消失;> 0 = N 秒后复原 + ├── _onDestroyed: StringEventChannelSO ← 广播 _destructibleId + ├── _onRespawned: StringEventChannelSO ← 广播 _destructibleId(仅 respawn 型) + └── _destroyFeedback: MMF_Player ← 碎裂粒子 + 音效 +``` + +**破坏判定流程**: + +``` +HurtBox 收到 DamageInfo + → DestructibleTile.CheckDestroyCondition(info) + ├─ 检查 _destroyTrigger(攻击类型 / 玩家携带能力 / 交互键) + ├─ [不满足] → 播放受击晃动,无破坏效果 + └─ [满足] → 播放碎裂帧序列(Cracked → Destroyed) + → 禁用 BoxCollider2D + SpriteRenderer + → 发布 OnDestructibleDestroyed(_destructibleId) + ├─ SaveManager:若 _isPermanent,追加到 destroyedTerrain[] + └─ MapManager(P1):刷新地图显示 + → 若 _respawnDelay > 0:启动 Coroutine, + 倒计时后恢复 Intact 并发布 OnDestructibleRespawned +``` + +**房间加载时恢复永久破坏状态**: + +``` +DestructibleTile.Start() + → 查询 SaveData.world.destroyedTerrain.Contains(_destructibleId) + → 若已记录 → 直接跳过动画,静默设为 Destroyed 状态(禁用 Collider + Renderer) +``` + +**DestroyTrigger 类型**: + +| 类型 | 示例用途 | +|------|----------| +| `AnyAttack` | 薄土墙、木板、装饰性障碍物 | +| `SpecificAbility` | 需解锁"冲击跺地"能力才能砸碎石板 | +| `Interact` | 玩家按交互键推倒、踢开的遮挡物 | + +--- + +### 9.5 单向可破坏墙体 (DirectionalDestructible) + +继承 `DestructibleTile`,在其基础上增加**攻击方向校验**: + +``` +DirectionalDestructible.cs(: DestructibleTile) +└── _validAttackSide: AttackSide ← Left / Right / Top / Bottom / Any + override CheckDestroyCondition(DamageInfo info): + attackDir = normalize(info.SourcePosition - transform.position) + 仅当 attackDir 与 _validAttackSide 方向匹配时, + 调用 base.CheckDestroyCondition(info) +``` + +**典型用例**: + +| 场景 | 配置 | +|------|------| +| 地板薄板:只能从下方攻击打穿 | `_validAttackSide = Bottom` | +| 密室单向封墙:仅能从房间内向外打开 | `_validAttackSide = Right` | +| 伪装暗道:内侧任意攻击可破坏,外侧无效 | `_validAttackSide = Left`(依据朝向配置)| + +**Gizmo**:Scene 视图在可破坏面上叠加橙色半透明箭头,标注有效攻击方向;无效方向绘制灰色叉号。 + +--- + +### 9.6 单向可交互机关 (DirectionalInteractable) + +``` +[Switch_Forest_01] +├── SpriteRenderer(Inactive / Active 两态动画) +├── BoxCollider2D(IsTrigger 用于玩家接触;或挂 HurtBox 接受攻击触发) +└── DirectionalInteractable.cs + ├── _interactableId: string ← 全局唯一 ID + ├── _triggerSide: TriggerSide ← Left / Right / Top / Any + ├── _triggerCondition: TriggerCondition ← PlayerAttack / PlayerBody / InteractKey + ├── _isOneShot: bool ← true = 一次性,触发后永久激活 + ├── _activationChannel: VoidEventChannelSO ← 触发时发布(关卡受体订阅此频道) + ├── _deactivationChannel: VoidEventChannelSO ← 非 OneShot 时,玩家离开后发布 + └── _activateFeedback: MMF_Player +``` + +**零耦合关卡连接**(通过共享同一 SO 频道资产): + +``` +Switch_Forest_01._activationChannel ──► MovingPlatform._activationChannel + ──► Door_Locked._openChannel + ──► HazardZone_Spikes._disableChannel +``` + +机关自身**只发布事件**,受体自行订阅同一 SO 资产,关卡逻辑完全解耦,无脚本间直接引用。 + +**OneShot 持久化流程**: + +``` +触发 → 发布 _activationChannel + → 发布 OnMechanismTriggered(_interactableId) + └─ SaveManager:写入 triggeredMechanisms[] + +读档时:DirectionalInteractable.Start() + → 检查 SaveData.world.triggeredMechanisms.Contains(_interactableId) + → 若已记录:直接设为激活态,静默发布 _activationChannel(恢复关卡联动状态) +``` + +--- + +### 9.7 碎裂平台 (CrumblePlatform) + +``` +[CrumblePlatform_Cave_01] +├── SpriteRenderer(4 帧图集:Idle / Warning / Crumbling / Gone) +├── BoxCollider2D(Idle/Warning 时启用;Crumbling/Gone 时禁用) +├── PlatformEffector2D(可选,配置为单向踩踏) +├── BoxCollider2D (IsTrigger,乘客检测,覆盖顶面上方一像素) +└── CrumblePlatform.cs + ├── _warningDuration: float ← 踩上后抖动警告时间(默认 0.6s) + ├── _crumbleDuration: float ← 碎裂下落动画时长(默认 0.3s) + ├── _respawnDelay: float ← 碎裂后等待复原时长(默认 3.0s;0 = 永久消失) + ├── _isOneShot: bool ← true = 碎裂后永久消失,不复原 + └── _crumbleFeedback: MMF_Player ← 预警震动 + 碎裂粒子 + 音效 +``` + +**状态机**: + +``` + [乘客检测到 Player] +Idle ────────────────────► Warning ──[warningDuration]──► Crumbling ──[动画完成]──► Gone + │ │ + 抖动动画 ──[respawnDelay,非 OneShot]──► Idle + 预警音效 (恢复 Collider + Renderer) +``` + +**NavAgent 联动**: +- 进入 `Gone` 状态 → 对应 `NavLink.enabled = false`(PathBerserker2d 路径重算,AI 不走此链接) +- 恢复 `Idle` → `NavLink.enabled = true` + +--- + +### 9.8 假墙 / 秘密通道 (FalseWall) + +假墙外观与普通墙体几乎相同,但玩家可以**穿越**或**攻击揭示**通往秘密区域的隐藏通道。 +与 `DestructibleTile` 的区别:FalseWall 不销毁,只是使碰撞体进入"允许穿透"状态。 + +``` +[FalseWall_Forest_01] +├── SpriteRenderer(2 帧:Normal / Revealed,透明度过渡) +├── PolygonCollider2D(实心态时 enabled = true;穿透态时 enabled = false) +└── FalseWall.cs + ├── _wallId: string ← SaveData 持久化键,如 "FW_Forest_01_SecretA" + ├── _revealCondition: RevealCondition + │ • Proximity ← 玩家进入 _proximityRadius 范围内自动揭示(仅视觉,通道需攻击) + │ • AttackOnce ← 玩家攻击一次后碰撞体禁用,可穿越 + │ • AlwaysOpen ← 已无碰撞,天生可穿越(仅用于返程单向暗门) + ├── _revealOnProximity: bool ← true = Proximity 范围内仅播放 Shimmer,不启用穿透 + ├── _proximityRadius: float ← 默认 2.0f(Unity Unit) + ├── _passThrough: bool ← 当前是否可穿越(运行时状态) + └── _revealFeedback: MMF_Player ← Shimmer粒子 + 空洞回声音效 +``` + +**状态机**: + +``` +Normal(碰撞启用) + │ + ├──[RevealCondition = Proximity,玩家进入 proximityRadius]──► Shimmer(仅视觉暗示,碰撞仍启用) + │ │ + │ [玩家离开 radius]◄──┘ + │ + ├──[RevealCondition = AttackOnce,玩家攻击命中]──► Revealed(碰撞禁用,可穿越,永久) + │ + └──[RevealCondition = AlwaysOpen]──────────────────────────── Revealed(初始即穿透) +``` + +**视觉设计三原则**(配合 44_LevelDesignGuide §6.3): + +| 层级 | 实现方式 | +|------|---------| +| 外观暗示 | `Normal` 帧 Sprite 含细微色差/裂纹变体 Tile(与周围 90% 相似)| +| 近距暗示 | Proximity 触发 `_revealFeedback` 播放轻微 Shimmer 粒子 | +| 音效暗示 | 玩家攻击 FalseWall 时播放空洞回声(与普通地形攻击声不同)| + +**SaveData 持久化**: + +```csharp +// SaveData.world 新增字段(已并入 §5 JSON Schema) +"revealedFalseWalls": ["FW_Forest_01_SecretA", "FW_Cave_03_ShortcutB"] + +// FalseWall.Start() 读档恢复: +bool revealed = SaveManager.CurrentSave.world.revealedFalseWalls.Contains(_wallId); +if (revealed) SetPassThroughImmediate(); // 静默恢复,不播放演出 +``` + +**地图联动**:已揭示的 FalseWall 在 MapUI 显示为"通道"(虚线缺口),未揭示则与普通墙线相同。 + +**Gizmos(Scene 视图)**: +- `Normal` 态:紫色虚线矩形框(区别于绿色 HazardZone) +- `proximityRadius` 范围:紫色半透明圆形 +- 鼠标悬停显示 `_wallId` + +--- + +### 9.9 魔法障壁 (MagicWall) + +> **关联技能**:太虚斩(命魂 SoulSkill) · **架构实现**:见 [08_WorldModule §15.1](../Architecture/08_WorldModule.md#151-magicwall--魔法障壁太虚斩专属) + +魔法障壁是**只能被太虚斩穿越**的特殊墙体。太虚斩施放期间玩家切换至 `Ghost` 物理层,`MagicWall` 对 `Ghost` 层无碰撞,完全由 Physics Layer Matrix 实现——**无代码逻辑**,设计师只需摆放 Prefab 并确认 Layer 正确。 + +``` +[MagicWall_Ruins_01] +├── SpriteRenderer(半透明紫色光晕外观) +├── BoxCollider2D / TilemapCollider2D Layer: MagicWall +└── MagicWall.cs(仅 Gizmo,无运行时逻辑) +``` + +**层矩阵配置要求**(见 [57_PhysicsLayerMatrix §Ghost/MagicWall](./57_PhysicsLayerMatrix.md)): + +| 层 A | 层 B | 碰撞 | +|------|------|------| +| `Player` | `MagicWall` | ✅ 实体阻挡 | +| `Ghost` | `MagicWall` | ❌ 穿越 | +| `Enemy` | `MagicWall` | ✅ 实体阻挡 | + +**关卡设计用途**: + +| 场景 | 说明 | +|------|------| +| 命魂专属捷径 | 仅解锁命魂形态的玩家才能穿越 | +| Boss 前魔法门 | 未获得太虚斩前无法进入 Boss 房间(进度锁)| +| 解谜障壁 | 需在障壁另一侧完成某操作,再太虚斩穿越取物 | + +**Gizmo(Scene 视图)**:紫色实线矩形;鼠标悬停显示"MagicWall — Ghost 层可穿越"标注。 + +--- + +### 9.10 松软地面 (SoftTerrain) + +> **关联技能**:地行术(地魂 SoulSkill) · **架构实现**:见 [08_WorldModule §15.2](../Architecture/08_WorldModule.md#152-softterrain--松软地面地行术专属) + +松软地面是配合**地行术**的特殊地块:进入 `GroundDive` 状态后,若玩家脚下为松软地面,灵力消耗速率降为 0(普通地面正常消耗),且移动速度不减。 + +``` +Tilemap_SoftGround +├── TilemapCollider2D + CompositeCollider2D Layer: Ground(普通碰撞) +└── SoftTerrain.cs(Marker 组件,无运行时逻辑) +``` + +**铺设规则**: +- 使用独立 `Tilemap_SoftGround` 层,Tile 外观为黄褐色沙粒/软土纹理 +- 地行术穿行时,`GroundDiveState` 每帧 `Physics2D.OverlapPoint()` 检测脚下 Tilemap,命中带 `SoftTerrain` 组件的 → 暂停灵力消耗 +- 普通行走时 `SoftTerrain` 与 `Ground` 完全相同(正常站立、摩擦) + +**关卡设计用途**: + +| 场景 | 说明 | +|------|------| +| 地行术专属路径 | 长段软土连接隐藏区域,仅地行术可无消耗穿越 | +| 技能养成奖励 | 在松软地面采集/打怪更划算,激励玩家探索 | +| 危险区绕路 | 利用软土潜行绕过大量敌人 | + +**Gizmo(Scene 视图)**:Tilemap_SoftGround 在 Scene 视图叠加黄色半透明填充,区别于普通 Ground(灰色)。 + +--- + +### 9.11 幻影机关 (PhantomInteractable) + +> **关联技能**:残阴术(命魂 SpiritSkill1) · **架构实现**:见 [08_WorldModule §15.3](../Architecture/08_WorldModule.md#153-phantominteractable--幻影机关残阴术专属) + +幻影机关继承 `DirectionalInteractable`,**额外响应残阴术灵体**(`PhantomBody` 层)触发。玩家可留下灵体持续踩住压板,自己在别处完成其他操作。 + +``` +[PhantomPlate_Cave_01] +├── SpriteRenderer(特殊发光压板外观,区别于普通 PressurePlate) +├── BoxCollider2D (IsTrigger) ← 同时检测 Player 和 PhantomBody 层 +└── PhantomInteractable.cs(: DirectionalInteractable) + ├── 继承所有 DirectionalInteractable 字段 + └── 额外在 OnTriggerEnter2D 中响应 PhantomBody 层 +``` + +**典型谜题流程**: + +``` +① 玩家面对幻影压板 ─ 施放残阴术 ─ 留下灵体踩住压板 ─ 关联门打开 +② 玩家(本体)快速通过门洞 +③ 残阴术持续时间结束 ─ 灵体消失 ─ 压板失活 ─ 门关闭(若非 OneShot) +``` + +**零耦合连接**(同 DirectionalInteractable): + +``` +PhantomPlate_Cave_01._activationChannel ──► Door._openChannel + ──► Elevator._activationChannel +``` + +**设计约束**: +- 残阴术持续时间(`SpiritSkill1.duration`)决定谜题的时间压力,设计时需留足通过时间 +- `_isOneShot = true` 时灵体触发一次即永久解锁,适合进度节点 +- `_isOneShot = false` 时门/机关随灵体消失而复位,适合 Boss 前危机通道 + +**Gizmo(Scene 视图)**:青色填充压板轮廓 + 灵体图标标注,区别于普通黄色 DirectionalInteractable。 + +--- + +### 9.12 与地图系统联动 + +> 地图系统为 P1 优先级;联动接口在此定义,P1 实现时直接对接,**无需修改运行时代码**。 + +**SaveData `world` 新增字段**(已并入 §5 JSON Schema): + +```json +"destroyedTerrain": ["DT_Forest_01_WallA", "DT_Cave_02_FloorB"], +"triggeredMechanisms": ["Switch_Forest_01", "Lever_Cave_03"] +``` + +**地图显示规则**: + +| 地形类型与状态 | 地图显示 | +|--------------|----------| +| `DestructibleTile` 完好 | 实心墙线(同普通墙,灰色)| +| `DestructibleTile` 已破坏 | 缺口/通道(断线 + 橙色边框)| +| `DirectionalDestructible` 完好 | 实心墙 + 橙色单向箭头图标 | +| `DirectionalDestructible` 已破坏 | 缺口(同普通破坏态)| +| `DirectionalInteractable` OneShot 未触发 | 黄色问号图标 | +| `DirectionalInteractable` OneShot 已触发 | 白色齿轮图标 | + +**`MapRoomData` SO 扩展(P1 实现时)**: + +``` +MapRoomData(SO) +├── _roomId: string +├── _destructibleIds: string[] ← 本房间所有可破坏地形 ID(Edit Time 填写) +├── _mechanismIds: string[] ← 本房间所有机关 ID +└── _roomOutlineTexture: Texture2D ← Edit Time 预烘焙轮廓贴图 +``` + +`MapUI` 渲染时,对照 `SaveData.world.destroyedTerrain` / `triggeredMechanisms` 列表,在房间轮廓图上叠加状态图标层。 + +--- + +## 10. 地图系统(P1) + +> **优先级 P1,当前版本不实现** +> 可破坏地形与机关的地图联动设计详见 **[§9.8 与地图系统联动](#98-与地图系统联动)** + +### RoomReveal 机制 + +- 每个房间 GameObject 含 `RoomRevealData`(SO):房间名称、区域、是否已探索 +- `OnRoomEntered` 事件触发后,`MapManager.RevealRoom(roomId)` 记录已探索 +- 已探索房间在 `MapUI` 中显示轮廓;未探索的显示为黑色 + +### 地图UI + +- 按 Map 键打开地图(独立 Scene Overlay UI) +- 房间以矩形格子排列,已探索显示地形轮廓,Boss 房间特殊标记 +- 玩家当前位置显示小图标(实时更新) + +--- + +## 11. 商店 NPC + +> **命名空间** `BaseGames.World.Shop` + +### 11.1 场景结构 + +``` +[ShopNPC_Seer] +├── SpriteRenderer + Animator(NPC 动画) +├── BoxCollider2D (IsTrigger,交互范围) +├── InteractableNPC.cs ← 对话系统(DialogueGraph SO 驱动,见 15_DialogueSystem.md) +├── ShopController.cs ← 商店逻辑(接收交互事件,打开 UI) +└── ShopInventorySO ← 商品列表资产(每个 NPC 独立配置) +``` + +### 11.2 ShopItemSO — 商品数据 + +```csharp +[CreateAssetMenu(menuName = "World/Shop/ShopItem")] +public class ShopItemSO : ScriptableObject +{ + [Header("基础信息")] + public string itemId; // 唯一 ID,存入 SaveData 已购列表 + public string displayName; + [TextArea(2, 4)] + public string description; + public Sprite icon; + + [Header("价格")] + public int cost; // Geo 价格 + public bool isBuyOnce; // true = 购买后从商店消失(如能力解锁) + + [Header("解锁条件")] + public string unlockConditionId; // 空 = 始终可购;否则查询 SaveData.defeatedBosses + + [Header("购买效果")] + [SerializeReference] + public IShopItemEffect effect; // 购买时执行的效果 +} +``` + +### 11.3 IShopItemEffect — 购买效果接口 + +```csharp +public interface IShopItemEffect +{ + void OnPurchased(ShopContext ctx); + string GetEffectDescription(); +} + +public struct ShopContext +{ + public PlayerStats Stats; + public EquipmentManager Equipment; + public SaveManager Save; + public EventChannelRegistry Events; +} +``` + +**内置效果实现**: + +| 效果类 | 说明 | +|--------|------| +| `GiveCharmEffect` | 将 `CharmSO` 添加到玩家魅力库(`EquipmentManager.AddCollected`)| +| `GiveToolEffect` | 增加工具持有数量 | +| `UpgradeNotchEffect` | 调用 `EquipmentManager.AddNotchCapacity(1)` | +| `UpgradeMaxHPEffect` | `PlayerStats.AddMaxHP(1)` | +| `GiveMapDataEffect` | 解锁某个区域地图(`MapManager.RevealRegion`)| +| `GiveAbilityEffect` | 解锁能力(`PlayerStats.UnlockAbility`)| + +### 11.4 ShopInventorySO — 商品列表 + +```csharp +[CreateAssetMenu(menuName = "World/Shop/Inventory")] +public class ShopInventorySO : ScriptableObject +{ + public ShopItemSO[] items; + + public IEnumerable GetAvailableItems(SaveData saveData) + => items.Where(item => + (!item.isBuyOnce || !saveData.world.purchasedItems.Contains(item.itemId)) + && (string.IsNullOrEmpty(item.unlockConditionId) + || saveData.world.defeatedBosses.Contains(item.unlockConditionId))); +} +``` + +### 11.5 购买流程 + +``` +玩家与 ShopNPC 交互 + │ + ▼ +InteractableNPC.OnInteract() + ├─ 播放开场对话(DialogueGraph → DialogueManager) + └─ 对话结束后 → ShopController.OpenShop() + │ + ▼ + ShopUI 显示商品列表 + │ + 玩家选择商品 → 确认购买 + │ + ├─ 检查 PlayerStats.CurrentGeo >= item.cost + │ └─ [不足] → 显示"Geo 不足"提示,闪烁 Geo 数字 + │ + ├─ 发布 OnGeoSpent(item.cost) + ├─ 执行 item.effect.OnPurchased(ctx) + ├─ 若 isBuyOnce:SaveManager.MarkPurchased(item.itemId) + ├─ 刷新商品列表(隐藏已购一次性商品) + └─ 播放购买反馈(MMF_Player: 硬币音效 + 金光特效) +``` + +### 11.6 商店 UI 结构 + +``` +Canvas_Shop (Sorting Order: 30) +└── ShopPanel + ├── NpcPortrait (左侧 NPC 立绘) + ├── ItemGrid (ScrollView,商品列表) + │ └── ShopItemCell(图标 + 名称 + 价格 + 售罄标签) + ├── DetailPanel (右侧选中商品详情) + │ ├── ItemIcon (大图) + │ ├── ItemName + CostText (Geo 图标 + 数字) + │ ├── DescriptionText + │ ├── EffectText (IShopItemEffect.GetEffectDescription()) + │ └── BuyButton / SoldOutLabel + ├── PlayerGeoDisplay (当前持有 Geo,实时更新) + └── CloseButton(或按 B / Esc 关闭) +``` + +--- + +## 12. 死亡遗骸(DeathShade) + +> **命名空间** `BaseGames.World` + +死亡遗骸是银河恶魔城游戏的核心死亡惩罚机制:玩家死亡后 Geo 清零,遗骸(影子)留在死亡位置;回到死亡地点击败遗骸可取回全部 Geo。 + +### 12.1 死亡遗骸数据 + +```csharp +[Serializable] +public struct DeathShadeData +{ + public bool hasShade; // 是否存在遗骸 + public int geo; // 遗骸携带的 Geo + public Vector2 worldPosition; // 遗骸世界坐标 + public string sceneName; // 遗骸所在场景 +} +``` + +SaveData 扩展(在 §5 JSON Schema 基础上新增 `deathShade` 字段): + +```json +"deathShade": { + "hasShade": true, + "geo": 340, + "worldPosition": { "x": 12.5, "y": -3.0 }, + "sceneName": "Room_Forest_02" +} +``` + +### 12.2 DeathShadeManager + +```csharp +namespace BaseGames.World +{ + public class DeathShadeManager : MonoBehaviour + { + [Header("事件频道")] + [SerializeField] VoidEventChannelSO _onPlayerDied; + [SerializeField] StringEventChannelSO _onRoomEntered; + [SerializeField] IntEventChannelSO _onGeoChanged; + [SerializeField] IntEventChannelSO _onGeoRecovered; // 发布,通知 PlayerStats + + [Header("遗骸预制件")] + [SerializeField] GameObject _shadePrefab; + + DeathShadeData _shadeData; + GameObject _activeShade; + int _lastKnownGeo; + + void OnEnable() + { + _onPlayerDied.OnEventRaised += HandlePlayerDied; + _onRoomEntered.OnEventRaised += HandleRoomEntered; + _onGeoChanged.OnEventRaised += geo => _lastKnownGeo = geo; + } + + void OnDisable() + { + _onPlayerDied.OnEventRaised -= HandlePlayerDied; + _onRoomEntered.OnEventRaised -= HandleRoomEntered; + } + + void HandlePlayerDied() + { + // 旧遗骸被新死亡覆盖,旧 Geo 丢失 + if (_shadeData.hasShade) + DestroyActiveShade(); + + _shadeData = new DeathShadeData + { + hasShade = true, + geo = _lastKnownGeo, + worldPosition = PlayerPositionCache.Instance.LastPosition, + sceneName = SceneManager.GetActiveScene().name + }; + SaveManager.Instance.SetDeathShadeData(_shadeData); + } + + void HandleRoomEntered(string sceneName) + { + DestroyActiveShade(); // 清理上一场景残留 + if (_shadeData.hasShade && _shadeData.sceneName == sceneName) + SpawnShade(); + } + + void SpawnShade() + { + _activeShade = Instantiate(_shadePrefab, _shadeData.worldPosition, Quaternion.identity); + _activeShade.GetComponent().Initialize(_shadeData.geo, OnShadeDefeated); + } + + void OnShadeDefeated(int geo) + { + _onGeoRecovered.Raise(geo); // PlayerStats 增加 Geo + _shadeData = default; + SaveManager.Instance.SetDeathShadeData(_shadeData); + _activeShade = null; + } + + void DestroyActiveShade() + { + if (_activeShade != null) { Destroy(_activeShade); _activeShade = null; } + } + } +} +``` + +### 12.3 DeathShade 组件(遗骸 Prefab) + +``` +[DeathShade_Prefab] +├── SpriteRenderer(透明度 60%,蓝灰色 Shader 参数) +├── Animator(浮动/脉冲动画循环) +├── BoxCollider2D(可接受伤害) +├── HurtBox.cs(接受玩家攻击) +└── DeathShade.cs + ├── _geo: int ← 由 Manager 注入 + ├── _onDefeated: Action ← 回调至 Manager + └── _defeatedFeedback: MMF_Player +``` + +```csharp +public class DeathShade : MonoBehaviour +{ + int _geo; + Action _onDefeated; + bool _isDefeated; + + public void Initialize(int geo, Action onDefeated) + => (_geo, _onDefeated) = (geo, onDefeated); + + // HurtBox.OnHurt UnityEvent 绑定到此方法 + public void OnHurt(DamageInfo _) + { + if (_isDefeated) return; + _isDefeated = true; + _defeatedFeedback.PlayFeedbacks(); + _onDefeated?.Invoke(_geo); + Destroy(gameObject, 0.5f); + } +} +``` + +### 12.4 死亡流程完整时序 + +``` +玩家 HP 降至 0 + → PlayerStats.OnDied() + → 发布 OnPlayerDied + ├─ DeathShadeManager:写入 DeathShadeData,清零玩家 Geo + ├─ PlayerFeedback:死亡演出(变暗/震屏/音效) + └─ GameManager:延迟 1s 后,读档重生 + + → GameManager.LoadLastSave() + → 玩家 HP 满血、Geo = 0 重生于最近存档点 + → 若遗骸在当前场景:自动生成 DeathShade + +玩家击败遗骸 + → DeathShade.OnHurt → _onDefeated(geo) + → DeathShadeManager → 发布 OnGeoRecovered(geo) + → PlayerStats.AddGeo(geo) → 发布 OnGeoChanged + → SaveData 清除 deathShade +``` + +### 12.5 特殊规则 + +| 规则 | 说明 | +|------|------| +| 再次死亡 | 新遗骸覆盖旧遗骸,旧 Geo 永久丢失 | +| 即死危险区域 | 与普通死亡相同流程 | +| 遗骸在 Boss 房间 | Boss 门开启后正常返回取回 | +| 读档时遗骸不在当前场景 | 进入遗骸场景时自动生成 | + +### 12.6 遗骸吸引系统(DeathShadePuller) + +**设计目标**:玩家进入遗骸所在房间时,遗骸对玩家产生微弱的"召唤感",辅助玩家找到遗骸位置(尤其在大型房间)。 + +```csharp +/// +/// 附加在 DeathShade Prefab 上,当玩家进入感应范围时施加轻柔吸引力。 +/// 吸引力不影响实际物理移动(仅视觉/音频暗示),避免影响游戏感。 +/// +public class DeathShadePuller : MonoBehaviour +{ + [SerializeField] float _pullRadius = 12f; // 开始显示视觉提示的距离 + [SerializeField] float _audioFadeRadius = 20f; // 开始播放 Ghost 音效的距离 + [SerializeField] AudioClip _ghostHum; // 低频幽灵嗡鸣(3D 音效,随距离衰减) + + [SerializeField] ParticleSystem _echoParticles; // 向玩家方向飘散的粒子 + [SerializeField] AudioSource _audioSource; + + Transform _player; + bool _isActive; + + void Update() + { + if (_player == null) return; + + float dist = Vector2.Distance(transform.position, _player.position); + + // 音频淡入(距离越近越响) + float audioVol = Mathf.InverseLerp(_audioFadeRadius, _pullRadius * 0.5f, dist); + _audioSource.volume = audioVol; + + // 粒子方向朝向玩家(不影响物理) + if (dist < _pullRadius && !_isActive) + { + _isActive = true; + _echoParticles.Play(); + } + else if (dist >= _pullRadius && _isActive) + { + _isActive = false; + _echoParticles.Stop(); + } + + if (_isActive) + { + // 粒子朝向玩家方向 + var dir = (_player.position - transform.position).normalized; + var main = _echoParticles.main; + _echoParticles.transform.rotation = Quaternion.LookRotation(Vector3.forward, + new Vector3(dir.x, dir.y, 0)); + } + } + + public void SetPlayer(Transform player) => _player = player; +} +``` + +**GhostEchoFeedback(玩家侧)**: + +当玩家与遗骸距离 < `pullRadius` 时,在玩家 Sprite 边缘叠加一层半透明蓝色轮廓(Shader Outline),强度随距离增加: + +```csharp +// 在 DeathShadeManager.SpawnShade() 中调用: +void SpawnShade() +{ + _activeShade = Instantiate(_shadePrefab, _shadeData.worldPosition, Quaternion.identity); + var shade = _activeShade.GetComponent(); + var puller = _activeShade.GetComponent(); + + shade.Initialize(_shadeData.geo, OnShadeDefeated); + puller.SetPlayer(_playerTransform); +} +``` + +### 12.7 遗骸地图标记 + +地图系统(§10)在 `deathShade.hasShade == true` 时,在地图上对应位置显示**闪烁的骷髅图标**: + +```csharp +// MapManager.RefreshDeathShadeMarker() 由 OnRoomEntered 事件触发 +void RefreshDeathShadeMarker() +{ + var data = SaveManager.Instance.GetDeathShadeData(); + _deathShadeMarker.gameObject.SetActive(data.hasShade); + + if (data.hasShade) + { + _deathShadeMarker.rectTransform.anchoredPosition = + WorldToMapPosition(data.worldPosition, data.sceneName); + + // 骷髅图标闪烁(DOTween) + _deathShadeMarker.DOFade(0.3f, 0.8f) + .SetLoops(-1, LoopType.Yoyo) + .SetId("ShadeMarkerBlink"); + } + else + { + DOTween.Kill("ShadeMarkerBlink"); + } +} +``` + +### 12.8 取回遗骸演出 + +`OnShadeDefeated` 触发时,播放完整取回演出(Feel FB 链): + +``` +DeathShadeRecoveryFeedback(MMF_Player 序列): + [0] 屏幕闪白(0.05s → 淡出 0.3s) + [1] 玩家周围爆发蓝色粒子环(SpawnParticle: ShadePop_VFX) + [2] UI:Geo 数字跳动动画(FloatingText "+" + geo数量) + [3] 音效:Soul_Recovery_Heavy.wav + [4] 相机震动(轻度,0.1s,振幅 0.3) + [5] HUD 金币数字闪烁(高亮 0.5s) +``` + +--- + +## 13. 世界事件频道 + +| 频道资产 | 类型 | 发布方 | 主要订阅方 | +|---------|------|--------|----------| +| `LoadScene.asset` | `LoadSceneEventChannelSO` | `RoomTransition` | `GameManager` | +| `OnRoomEntered.asset` | `TransformEventChannelSO` | `RoomTransition(完成后)` | `CameraStateController`、`NavSurface(重新配置)` | +| `OnSavePointActivated.asset` | `VoidEventChannelSO` | `SavePoint` | `SaveManager`、`HUD` | +| `OnAbilityUnlocked.asset` | `IntEventChannelSO`(存 AbilityType) | `AbilityUnlock` | `PlayerStats`、`HUD`(提示)| +| `OnCollectiblePickedUp.asset` | `StringEventChannelSO`(存 ID) | `Collectible` | `SaveManager` | +| `OnBossFightStarted.asset` | `VoidEventChannelSO` | `BossRoomTrigger` | `CameraStateController`、`AudioManager` | +| `OnBossFightEnded.asset` | `VoidEventChannelSO` | `BossBase`(死亡时)| `GameManager`、`AudioManager`、`Door(开门)` | +| `OnDestructibleDestroyed.asset` | `StringEventChannelSO`(存 ID)| `DestructibleTile` | `SaveManager`、`MapManager(P1)` | +| `OnDestructibleRespawned.asset` | `StringEventChannelSO`(存 ID)| `DestructibleTile` | `MapManager(P1)` | +| `OnMechanismTriggered.asset` | `StringEventChannelSO`(存 ID)| `DirectionalInteractable` | `SaveManager` | +| `OnPlayerDied.asset` | `VoidEventChannelSO` | `PlayerStats` | `DeathShadeManager`、`GameManager`(触发读档)| +| `OnGeoRecovered.asset` | `IntEventChannelSO`(Geo 数值)| `DeathShadeManager` | `PlayerStats`(增加 Geo)| +| `OnGeoSpent.asset` | `IntEventChannelSO`(花费量)| `ShopController` | `PlayerStats`(扣减 Geo)| +| `OnShopOpened.asset` | `VoidEventChannelSO` | `ShopController` | `InputReader`(切 ActionMap)、`ShopUI` | +| `OnShopClosed.asset` | `VoidEventChannelSO` | `ShopUI` | `InputReader`(恢复 ActionMap)| + +--- + +## 14. 编辑器友好设计 + +### SaveManager 调试工具(Play Mode Inspector) + +``` +┌─ SaveManager ──────────────────────────────────┐ +│ Slot : 0 │ +│ Scene : Room_Forest_01 │ +│ SavePoint: SP_Forest_01_Entry │ +│ HP : 5/5 | Geo: 340 | Soul: 66/99 │ +│ ─────────────────────────────────────────────│ +│ [强制存档] [强制读档] [清除存档] [打开存档文件]│ +│ [解锁全部能力] [设置HP: ___] [添加Geo: ___] │ +└────────────────────────────────────────────────┘ +``` + +### SpawnPoint Gizmos + +- Scene 视图中每个 `SpawnPoint` 显示绿色旗帜 + `[ID]` 文字标注 +- `RoomTransition` 在 Scene 视图绘制箭头指向 `targetScene`(文字标注目标场景名) + +### 房间加载测试 + +`RoomTransition` 自定义 Inspector 底部: + +``` +[预览目标场景: Room_Forest_02] [立即传送(Editor Play Mode)] +``` + +点击"立即传送"后,不经过过渡动画直接加载目标场景(用于快速测试特定房间)。 + +### SaveData JSON Viewer + +编辑器菜单:`BaseGames > World > Open SaveData Viewer` + +- 显示当前存档文件的格式化 JSON +- 支持直接在编辑器内修改值并保存(调试 / 关卡测试用) + +--- + +## 15. Tilemap 与物理材质配置 + +### Tilemap 层级规范 + +``` +场景根节点 +└── Tilemaps + ├── Ground → 主地面(Tilemap Collider 2D,Composite Collider 2D) + ├── Platforms → 单向平台(PlatformEffector2D,rotationalOffset 180°) + ├── Hazards → 即死刺/熔岩(仅触发器,无 HazardZone 的场景装饰) + ├── SoftGround → 松软地面(Layer: Ground,挂 SoftTerrain Marker 组件;地行术无消耗穿行) + ├── MagicWall → 魔法障壁(Layer: MagicWall;Ghost 层可穿越,见 §9.9) + ├── Background_A → 近景装饰(无碰撞) + ├── Background_B → 远景装饰(无碰撞,Scale 略小实现视差) + └── Foreground → 最前景遮罩(无碰撞,遮挡玩家) +``` + +**渲染层(Sorting Layer)顺序**(从后到前): +``` +Background_Far (-300) +Background_Mid (-200) +Background_Near (-100) +Ground (0) +Objects (100) +Player (200) +Enemies (200) +Foreground (500) +UI (1000) +``` + +### 物理材质(Physics Material 2D)配置 + +| 材质名 | 摩擦力 | 弹性 | 适用 Tilemap | 说明 | +|--------|--------|------|-------------|------| +| `PM_Ground_Stone` | 0.4 | 0.0 | Ground(石地)| 标准摩擦,落地不弹起 | +| `PM_Ground_Ice` | 0.02 | 0.0 | 冰面区域 | 极低摩擦,滑行感 | +| `PM_Ground_Mud` | 0.8 | 0.0 | 泥地区域 | 高摩擦,减速效果 | +| `PM_Platform` | 0.0 | 0.0 | Platforms | 零摩擦(PlatformEffector 处理)| +| `PM_Wall_Climbable` | 0.5 | 0.0 | 可攀爬墙壁 | 高于0摩擦使壁滑减速 | +| `PM_Bouncy` | 0.0 | 0.6 | 弹跳台 | 0.6 弹性让玩家弹起 | + +**赋值方式**:将 Physics Material 2D 资产拖到 Composite Collider 2D 的 `Material` 字段(整体地面共用一个材质,不需要每块 tile 单独设置)。 + +### PlatformEffector2D 配置规范 + +``` +PlatformEffector2D(附加在 Platforms Tilemap 的 Composite Collider 上): + Use One Way: ✓(从下方可穿过) + Use One Way Grouping: ✓(同一 Collider 下所有平台联动) + Surface Arc: 180°(标准单向平台) + Rotational Offset: 180°(确保碰撞面朝上) + Use Friction: ✗(由玩家自身 Physics Material 控制) +``` + +**下蹲穿平台实现**(在 `PlayerMovement` 中): + +```csharp +void DropThroughPlatform() +{ + // 短暂禁用 Player 与 Platforms 层的碰撞 + Physics2D.IgnoreLayerCollision( + LayerMask.NameToLayer("Player"), + LayerMask.NameToLayer("Platforms"), + true + ); + DOVirtual.DelayedCall(0.3f, () => + Physics2D.IgnoreLayerCollision( + LayerMask.NameToLayer("Player"), + LayerMask.NameToLayer("Platforms"), + false + ) + ); +} +``` + +### Tile 表面标签(用于脚步音效系统) + +在 Tilemap 的 Collider 所在 GameObject 上挂载 `SurfaceTag` 组件(见 [20_AnimationEventSystem §7](./20_AnimationEventSystem.md#7-脚步声系统)): + +``` +Ground(石头) → SurfaceTag.surfaceType = Stone +Ground(泥土区域) → SurfaceTag.surfaceType = Dirt(需单独 Tilemap 或 Collider2D 区域) +Water Area → SurfaceTag.surfaceType = Water +Crystal Cave → SurfaceTag.surfaceType = Crystal +``` + + +--- + +## 16. 房间内存管理(Room Streaming) + +> **问题**:累加式场景加载(Additive Loading)若无卸载策略,长时间游戏后内存持续增长,最终导致 OOM 崩溃或严重帧率下降。 + +### 16.1 RoomStreamingManager + +```csharp +namespace BaseGames.World +{ + /// + /// 管理房间的预加载与卸载,确保内存中仅保留 "当前 + 相邻" 房间。 + /// 挂载于常驻场景(PersistentScene)。 + /// + public class RoomStreamingManager : MonoBehaviour + { + [Header("事件频道")] + [SerializeField] StringEventChannelSO _onRoomEntered; + + [Header("配置")] + [SerializeField] int _keepAroundHops = 1; // 保留当前房间 ±1 跳的邻近房间 + + readonly HashSet _loadedScenes = new(); + readonly HashSet _preloadingScenes = new(); + string _currentScene; + + void OnEnable() => _onRoomEntered.OnEventRaised += HandleRoomEntered; + void OnDisable() => _onRoomEntered.OnEventRaised -= HandleRoomEntered; + + async void HandleRoomEntered(string newScene) + { + _currentScene = newScene; + _loadedScenes.Add(newScene); + + var toKeep = GetNeighborScenes(newScene, _keepAroundHops); + toKeep.Add(newScene); + + var toUnload = new List(_loadedScenes); + foreach (var s in toUnload) + if (!toKeep.Contains(s)) + await UnloadSceneAsync(s); + } + + /// 由 RoomTransition 在玩家靠近出口时调用,触发预加载。 + public async void PreloadScene(string targetScene) + { + if (_loadedScenes.Contains(targetScene)) return; + if (_preloadingScenes.Contains(targetScene)) return; + + _preloadingScenes.Add(targetScene); + var op = SceneManager.LoadSceneAsync(targetScene, LoadSceneMode.Additive); + op.allowSceneActivation = false; + await UniTask.WaitUntil(() => op.progress >= 0.9f); + op.allowSceneActivation = true; + await UniTask.WaitUntil(() => op.isDone); + _loadedScenes.Add(targetScene); + _preloadingScenes.Remove(targetScene); + } + + async UniTask UnloadSceneAsync(string sceneName) + { + _loadedScenes.Remove(sceneName); + await SceneManager.UnloadSceneAsync(sceneName).ToUniTask(); + } + + HashSet GetNeighborScenes(string sceneId, int hops) + => RoomGraphSO.Instance.GetNeighbors(sceneId, hops); + } +} +``` + +### 16.2 Addressables 场景卸载规范 + +当场景通过 `Addressables.LoadSceneAsync` 加载时,必须通过对应句柄卸载,否则引用计数不归零: + +```csharp +readonly Dictionary> _addressableHandles = new(); + +async UniTask LoadSceneAdditiveAddressable(string address) +{ + var handle = Addressables.LoadSceneAsync(address, LoadSceneMode.Additive, activateOnLoad: false); + _addressableHandles[address] = handle; + await handle.Task; + handle.Result.ActivateAsync(); +} + +async UniTask UnloadSceneAddressable(string address) +{ + if (!_addressableHandles.TryGetValue(address, out var handle)) return; + await Addressables.UnloadSceneAsync(handle).Task; + _addressableHandles.Remove(address); +} +``` + +> **关键规则**:每次 `Addressables.LoadSceneAsync` 必须配对 `Addressables.UnloadSceneAsync`。直接使用 `SceneManager.UnloadSceneAsync` 卸载 Addressables 场景会导致引用计数泄漏。 + +### 16.3 RoomGraphSO — 房间邻接表 + +```csharp +[CreateAssetMenu(menuName = "World/RoomGraph")] +public class RoomGraphSO : ScriptableObject +{ + public static RoomGraphSO Instance; + + [Serializable] + public class RoomNode + { + public string sceneId; + public string[] neighbors; // 直接相邻(1 跳) + } + + public RoomNode[] rooms; + readonly Dictionary _graph = new(); + + void OnEnable() + { + Instance = this; + foreach (var r in rooms) + _graph[r.sceneId] = r.neighbors; + } + + /// BFS,返回 hops 跳以内的所有邻居 ID。 + public HashSet GetNeighbors(string sceneId, int hops) + { + var result = new HashSet(); + var queue = new Queue<(string id, int depth)>(); + queue.Enqueue((sceneId, 0)); + while (queue.Count > 0) + { + var (id, depth) = queue.Dequeue(); + if (depth >= hops) continue; + if (!_graph.TryGetValue(id, out var neighbors)) continue; + foreach (var n in neighbors) + if (result.Add(n)) + queue.Enqueue((n, depth + 1)); + } + return result; + } +} +``` + +**维护方式**:在 Inspector 手动填写邻接表,或使用编辑器工具从场景 `RoomTransition` 组件自动生成(`BaseGames > World > Generate RoomGraph`)。 + +### 16.4 内存预算参考 + +| 场景类型 | 预估内存 | 典型场景 | +|---------|---------|---------| +| 小型过渡房间 | ~8 MB | 普通走廊 | +| 标准探索房间 | ~20 MB | 含敌人/机关 | +| 大型区域房间 | ~45 MB | 含 Boss 前厅 | +| Boss 房间 | ~60 MB | 含 Boss Prefab 和特效 | + +**目标上限(移动端)**:全局 350 MB;常驻场景约 30 MB;`keepAroundHops = 1` 最坏约 255 MB,留有安全余量。 + +> Boss 战期间可将 `_keepAroundHops` 临时降至 0,战后恢复 1,避免大型 Boss 场景与多邻居同时驻留超预算。 diff --git a/Docs/Design/09_EditorExtensions.md b/Docs/Design/09_EditorExtensions.md new file mode 100644 index 0000000..b770f28 --- /dev/null +++ b/Docs/Design/09_EditorExtensions.md @@ -0,0 +1,558 @@ +# 09 · 编辑器扩展 + +> **命名空间** `BaseGames.Editor` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **程序集** `BaseGames.Editor.asmdef`(Editor-only,不打包进 Runtime) + +--- + +## 目录 + +1. [设计原则](#1-设计原则) +2. [自定义 Inspector 列表](#2-自定义-inspector-列表) +3. [EditorWindow 工具列表](#3-editorwindow-工具列表) +4. [Scene 视图 Gizmos 汇总](#4-scene-视图-gizmos-汇总) +5. [Play Mode 调试叠加层](#5-play-mode-调试叠加层) +6. [ContextMenu 工具](#6-contextmenu-工具) +7. [编辑器菜单结构](#7-编辑器菜单结构) +8. [自动化检查工具](#8-自动化检查工具) +9. [高级工具集(补充)](#9-高级工具集补充) + +--- + +## 1. 设计原则 + +- **编辑器扩展与运行时代码完全分离**:所有编辑器扩展代码置于 `Editor/` 文件夹,使用独立 `.asmdef` +- **工具服务于制作流程**:每个工具针对具体的制作痛点,不做泛用性过度设计 +- **视觉化优先**:Gizmos 和自定义 Inspector 的目标是"**看一眼就知道配置是否正确**" +- **不破坏运行时行为**:所有 Inspector 修改通过 `SerializedObject.ApplyModifiedProperties()` 标准流程,支持撤销(Undo) +- **UI 技术选型**:所有编辑器扩展统一使用 **Unity UI Toolkit(UIElements)**,不使用 IMGUI(`OnGUI` / `EditorGUILayout`) + +### UI Toolkit 统一规范 + +**自定义 Inspector** — 使用 `CreateInspectorGUI()` + `BindProperty()`: + +```csharp +[CustomEditor(typeof(PlayerController))] +public class PlayerControllerEditor : Editor +{ + public override VisualElement CreateInspectorGUI() + { + var root = new VisualElement(); + + // 默认字段绑定(替代 DrawDefaultInspector) + InspectorElement.FillDefaultInspector(root, serializedObject, this); + + // 自定义运行时状态区 + var statusFoldout = new Foldout { text = "运行时状态(Play Mode)" }; + var stateLabel = new Label(); + stateLabel.schedule.Execute(() => + { + if (!EditorApplication.isPlaying) return; + var t = target as PlayerController; + stateLabel.text = $"State: {t.CurrentStateName} HP: {t.HP}/{t.MaxHP}"; + }).Every(100); // 100ms 轮询 + statusFoldout.Add(stateLabel); + + // 调试按钮(Play Mode only) + var debugGroup = new VisualElement(); + debugGroup.SetEnabled(false); + EditorApplication.playModeStateChanged += state => + debugGroup.SetEnabled(state == PlayModeStateChange.EnteredPlayMode); + var hurtBtn = new Button(() => (target as PlayerController)?.TakeDamage(2)) { text = "Hurt 2" }; + debugGroup.Add(hurtBtn); + + root.Add(statusFoldout); + root.Add(debugGroup); + return root; + } +} +``` + +**EditorWindow** — 使用 `CreateGUI()` + 内置控件: + +```csharp +public class MyTool : EditorWindow +{ + [MenuItem("BaseGames/My Tool")] + public static void Open() => GetWindow("My Tool"); + + public void CreateGUI() + { + var splitView = new TwoPaneSplitView(0, 260f, TwoPaneSplitViewOrientation.Horizontal); + var left = new ScrollView(); + var right = new VisualElement(); + splitView.Add(left); + splitView.Add(right); + rootVisualElement.Add(splitView); + } +} +``` + +**§2–§9 各工具使用的关键 UI Toolkit 控件**: + +| 工具 | 关键控件 | 说明 | +|------|---------|------| +| §2.x 自定义 Inspector | `ProgressBar`、`Foldout`、`Button`、`Label` | `CreateInspectorGUI()` 替代 `OnInspectorGUI()` | +| §2.3 ParrySystem(时间轴)| 自绘 `VisualElement`(`generateVisualContent` + `Painter2D`)| 替代 `GUI.Box` 手绘条 | +| §3.1–3.4 简单 EditorWindow | `ListView`、`Button`、`TextField` | `CreateGUI()` 替代 `OnGUI()` | +| §9.1 BT 验证器 | `TreeView` | 原生树形控件 | +| §9.2 进程流程图 | `GraphView`(`UnityEditor.Experimental.GraphView`)| 节点图;见注意事项 | +| §9.3 GameState 分析器 | `MultiColumnListView` | 矩阵视图 | +| §9.4 伤害模拟器 | `TwoPaneSplitView` + 自绘直方图(`Painter2D`)| 参数面板 + 分布图 | +| §9.7 装备预览 | `TwoPaneSplitView` + `DropdownField` | 响应式分栏 | +| §9.8 构建验证器 | `MultiColumnListView` + 可点击 `Label` | 多列结果 + 跳转 | + +> **GraphView 注意**:`UnityEditor.Experimental.GraphView` 标注为 Experimental,API 可能在 Unity 版本间变动。如遇稳定性问题,9.2 进程流程图可改为 `VisualElement` 手绘节点(`generateVisualContent` + `Painter2D.DrawBezierCurve`),无需依赖 Experimental API。 + +**USS 样式文件存放**:`Assets/Editor/UI/USS/` — 统一样式变量(颜色、间距、字体大小),通过 `styleSheets.Add()` 挂载。 + +--- + +## 2. 自定义 Inspector 列表 + +### 2.1 PlayerController Inspector + +**目标**:Play Mode 下直观监控玩家状态,快速触发测试。 + +**布局规划**: + +``` +┌─ PlayerController ─────────────────────────────────┐ +│ ◈ 状态信息 │ +│ ┌──────────────────────────────────────────────┐ │ +│ │ Current State RunState │ │ +│ │ HP ████████████░░ 8 / 10 │ │ +│ │ Soul ███████░░░░░░░ 66 / 99 │ │ +│ │ Geo 340 │ │ +│ │ IsGrounded ✓ FacingDir → (+1) │ │ +│ │ Invincible ░░░░░░░░░░ (0.00s remaining) │ │ +│ └──────────────────────────────────────────────┘ │ +│ ◈ 已解锁能力 │ +│ ┌──────────────────────────────────────────────┐ │ +│ │ [✓ Parry] [✓ DoubleJump] [✗ WallJump] │ │ +│ │ [✗ AerialDash] [✗ Swim] │ │ +│ └──────────────────────────────────────────────┘ │ +│ ◈ 调试工具(Play Mode Only) │ +│ [Force Idle] [Force Run] [Force Air] │ +│ [Deal Damage: 2] [Deal Damage: 10] [Instant Kill] │ +│ [Add Soul: 33] [Add Geo: 100] │ +│ [Unlock All Abilities] [Lock All Abilities] │ +└────────────────────────────────────────────────────┘ +``` + +**实现方式**:继承 `Editor`,重写 `CreateInspectorGUI()` 返回 `VisualElement` 树。进度条使用 UI Toolkit `ProgressBar` 控件;Play Mode 限定区域通过 `debugGroup.SetEnabled(EditorApplication.isPlaying)` + `EditorApplication.playModeStateChanged` 回调控制显隐。 + +--- + +### 2.2 EnemyBase Inspector + +**目标**:快速查看敌人 AI 状态,测试战斗参数。 + +``` +┌─ EnemyBase ──────────────────────────────────────┐ +│ ◈ 运行时状态(Play Mode) │ +│ State: Controlled HP: █████████░ 90/100 │ +│ BD Node: BD_MoveToPlayer (Running) │ +│ Nav Status: Moving → (12.5, -3.0) [0.8m left] │ +│ ◈ 属性配置 │ +│ Stats SO: [ES_GruntWarrior ▼] │ +│ AnimCfg : [EA_GruntWarrior ▼] │ +│ ◈ 调试工具(Play Mode Only) │ +│ [Force Stagger] [Force Death] [Reset HP] │ +│ [Disable BD] [Enable BD] [Reload BD Tree] │ +└──────────────────────────────────────────────────┘ +``` + +--- + +### 2.3 ParrySystem Inspector + +**目标**:可视化弹反时间轴,测试弹反参数。 + +``` +┌─ ParrySystem ────────────────────────────────────┐ +│ ◈ 时间轴预览 │ +│ [▌ Startup ▌▌▌▌▌▌▌ Active Window ▌▌ Endlag ▌] │ +│ 0.05s 0.28s 0.10s │ +│ ◈ 运行时状态(Play Mode) │ +│ State: Active Timer: 0.19s / 0.28s │ +│ Window: ████████████░░░ 68% │ +│ CounterW: ────────────── (Inactive) │ +│ ◈ 调试工具 │ +│ [Trigger Parry Success] [Trigger Parry Fail] │ +│ [Open Counter Window] [Reset] │ +└──────────────────────────────────────────────────┘ +``` + +**时间轴预览** 在 Edit Mode 下也可显示(根据 `ParryConfigSO` 参数计算比例),方便策划调整数值时直观预览窗口比例。 + +--- + +### 2.4 RoomCameraBounds Inspector + +**目标**:防止镜头边界配置错误。 + +``` +┌─ RoomCameraBounds ───────────────────────────────┐ +│ ◈ 边界检查 │ +│ Bounds Size: (32.0, 18.0) │ +│ Camera View (4.22 OrthoSize): (29.9, 16.8) │ +│ Status: ✓ 边界大于镜头视野 │ +│ ─────────────────────────────────────────────── │ +│ [Preview Camera View in Scene] │ +│ [自动调整 PolygonCollider2D 至最小安全尺寸] │ +└──────────────────────────────────────────────────┘ +``` + +--- + +### 2.5 DamageSourceSO Inspector + +**目标**:策划配置攻击参数时,即时预览伤害计算和属性。 + +``` +┌─ DamageSourceSO ─────────────────────────────────┐ +│ ◈ 伤害预览 │ +│ BaseDamage × Multiplier = Final │ +│ 5 × 1.0 = 5 │ +│ ◈ 击退预览 │ +│ KnockbackForce: 8.0 Direction: → │ +│ HitStun: 0.30s │ +│ ◈ 属性标记 │ +│ [CanBeParried ✓] [Unblockable ✗] [IgnoreIFrame ✗]│ +│ ◈ 伤害类型 │ +│ Type: Normal (物理) │ +│ HitFxType: Slash │ +└──────────────────────────────────────────────────┘ +``` + +--- + +## 3. EditorWindow 工具列表 + +### 3.1 房间连接验证工具 + +**菜单路径**:`BaseGames > World > Room Connection Validator` + +**功能**: + +``` +┌─ Room Connection Validator ──────────────────────────────────────┐ +│ 扫描所有 Room_*.unity 场景中的 RoomTransition 组件 │ +│ │ +│ 房间 出口ID 目标场景 │ +│ ────────────────────────────────────────────────────────────── │ +│ Room_Forest_01 Door_To_Forest_02 ✓ Room_Forest_02 存在 │ +│ Room_Forest_02 Door_To_Cave_01 ✓ Room_Cave_01 存在 │ +│ Room_Cave_01 Door_To_Boss ✗ Boss_Cave 不存在 ⚠ │ +│ │ +│ SpawnPoint 检查: │ +│ Room_Forest_02 缺少 SpawnPoint "SP_From_Forest_01_Door" ⚠ │ +│ │ +│ [重新扫描] [选中有错误的场景] [导出验证报告.md] │ +└──────────────────────────────────────────────────────────────────┘ +``` + +--- + +### 3.2 SO 事件频道监视器 + +**菜单路径**:`BaseGames > Core > Event Channel Monitor` + +**功能**:Play Mode 下实时监听所有 SO 事件频道的触发情况。 + +``` +┌─ Event Channel Monitor ──────────────────────────────────────────┐ +│ [▶ Play Mode Only] [清除日志] [暂停记录] │ +│ │ +│ 时间 事件频道 数据 │ +│ ────────────────────────────────────────────────────────────── │ +│ 0.012s OnPlayerHPChanged value: 8 │ +│ 0.013s OnHitConfirmed DMG:5, Knockback:8.0 │ +│ 1.245s OnParrySuccess DMG:5, Flags: CanBeParried │ +│ 1.248s OnPlayerHPChanged value: 8 (no change) │ +│ 2.001s OnRoomEntered Transform: Room_Forest_01 │ +│ │ +│ [筛选频道: ___________] [仅显示Player] [仅显示Combat] │ +└──────────────────────────────────────────────────────────────────┘ +``` + +--- + +### 3.3 NavSurface 快速烘焙工具 + +**菜单路径**:`BaseGames > Navigation > Quick Bake All Rooms` + +一键遍历所有场景中的 `NavSurface`,按顺序烘焙 PathBerserker2d 导航网格并保存场景: + +``` +┌─ NavSurface Bake Tool ──────────────────────────────────────────┐ +│ 扫描到 NavSurface 数量: 12 │ +│ │ +│ Room_Forest_01: ✓ 已烘焙 (2024-01-01 12:00) │ +│ Room_Forest_02: ⚠ 需要重新烘焙(场景已修改) │ +│ Room_Cave_01: ✓ 已烘焙 │ +│ │ +│ [烘焙全部] [仅烘焙已修改] [验证所有路径连通性] │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +### 3.4 SaveData 查看器 + +**菜单路径**:`BaseGames > World > SaveData Viewer` + +``` +┌─ SaveData Viewer ───────────────────────────────────────────────┐ +│ Slot 0 | Slot 1 | Slot 2 │ +│ ───────────────────────────────────────────────────────────── │ +│ Player: HP 5/5 | Geo 340 | Soul 66/99 │ +│ Scene: Room_Forest_01 @ SP_Forest_01_Entry │ +│ Abilities: Parry✓ DoubleJump✓ WallJump✗ Dash✗ Swim✗ │ +│ Discovered: 3 rooms | Cleared: 1 | Bosses Defeated: 0 │ +│ ───────────────────────────────────────────────────────────── │ +│ [JSON 原始视图] [编辑并保存] [删除此存档] │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 4. Scene 视图 Gizmos 汇总 + +| 组件 | Gizmo 形状 | 颜色 | 说明 | +|------|-----------|------|------| +| `HitBox` | BoxWire | 橙色(激活:实心50%透明)| 攻击判定区域 | +| `HurtBox` | BoxWire | 绿色(受击中:红色闪烁)| 受击区域 | +| `SpawnPoint` | 旗帜Icon + 文字 | 绿色 | 玩家出生点标识 | +| `RoomTransition` | 箭头 → 目标场景文字 | 蓝色 | 房间出口方向 | +| `RoomCameraBounds` | Polygon + 内层相机视野矩形 | 青色 | 镜头约束范围 | +| `EnemyBase` 检测范围 | 圆圈 | 黄色 | 玩家检测半径 | +| `EnemyBase` 攻击范围 | 圆圈 | 红色(实线)| 攻击触发范围 | +| `EnemyBase` 巡逻路径 | 线段 + 端点 | 蓝色虚线 | 巡逻 A~B 路径 | +| `EnemyBase` 寻路目标 | 箭头 | 绿色 | 当前导航目标 | +| `EnemyBase` 视线检测 | 射线 | 青色(遮挡:红色)| Raycast 视线 | +| `NavLink` | 弧形箭头 | 紫色 | 导航跳跃链接 | +| `HazardZone` | BoxWire | 红色(实心30%透明)| 危险区域范围 | +| `AbilityUnlock` | 星形Icon | 金色 | 能力解锁物件标识 | +| `SavePoint` | 旗帜Icon(已激活/未激活)| 蓝色/灰色 | 存档点状态 | +| `ParrySystem`(窗口中)| 圆圈动画 | 黄色 | 弹反窗口激活指示 | + +--- + +## 5. Play Mode 调试叠加层 + +`DebugOverlayWindow`:按 F1 键(仅 Development Build 和 Editor 中)显示调试叠加层。 + +### 叠加层布局 + +``` +┌─────────────────────────────────────────────────────────────────┐ +│ [F1 关闭] FPS: 144 │ +│ │ +│ Player State: RunState HP: 8/10 Soul: 66 Geo: 340 │ +│ IsGrounded: ✓ Facing: → Invincible: ✗ │ +│ │ +│ Active Camera: VCam_Explore Blend: Complete │ +│ Current Room: Room_Forest_01 │ +│ │ +│ Enemies in Scene: 2 Alive: 1 Dead: 1 │ +│ │ +│ ─────────── 快捷键 ─────────────────────────────────────── │ +│ F2 切换无敌 F3 加满 Soul F4 下一检查点 F5 重新加载场景 │ +│ F6 切换 Gizmos F7 切换碰撞体显示 F8 切换 AI 暂停 │ +└─────────────────────────────────────────────────────────────────┘ +``` + +--- + +## 6. ContextMenu 工具 + +通过 Inspector 右键菜单(`[ContextMenu]`)调用,无需进入 Play Mode: + +| 组件 | 右键菜单项 | 说明 | +|------|----------|------| +| `EnemyStatsSO` | `Print Stats Summary` | Console 打印该敌人完整属性表 | +| `DamageSourceSO` | `Calculate DPS` | Console 打印理论 DPS(BaseDamage / AttackCooldown)| +| `RoomCameraBounds` | `Fit to Room Tilemap` | 自动调整 PolygonCollider2D 以包裹 Tilemap 边界 | +| `NavSurface` | `Bake NavMesh` | 立即烘焙此 NavSurface | +| `SavePoint` | `Mark As Activated` | 设置 SavePoint 为已激活状态(用于测试继续游戏场景)| +| `RoomTransition` | `Validate Target Scene` | 检查目标场景是否存在于 BuildSettings | + +--- + +## 7. 编辑器菜单结构 + +Unity 菜单栏 `BaseGames/` 下的所有工具入口: + +``` +BaseGames/ +├── Core/ +│ └── Event Channel Monitor → EventChannelMonitorWindow +│ +├── World/ +│ ├── Room Connection Validator → RoomConnectionValidatorWindow +│ ├── SaveData Viewer → SaveDataViewerWindow +│ └── Rebuild All Spawn Points → 扫描并重新生成 SpawnPoint ID 索引 +│ +├── Navigation/ +│ ├── Quick Bake All Rooms → NavSurfaceBakeTool +│ └── Validate Path Connectivity → 检查所有房间 NavLink 连通性 +│ +├── Combat/ +│ └── DPS Calculator → 输入 DamageSourceSO + AttackCooldown,输出 DPS 表格 +│ +└── Settings/ + ├── Open Project Layer Matrix → 快速跳转到 ProjectSettings > Physics2D Layer Matrix + └── Validate Assembly Definitions → 检查 .asmdef 依赖关系是否符合零耦合原则 +``` + +--- + +## 8. 自动化检查工具 + +### 场景验证检查(保存场景时自动运行) + +`SceneValidationProcessor`(继承 `AssetModificationProcessor`),在保存场景时自动检查: + +| 检查项 | 错误级别 | 说明 | +|--------|---------|------| +| 场景是否有 `RoomCameraBounds` | Warning | 遗漏镜头约束 | +| 场景是否有 `NavSurface` | Warning | 有敌人的场景必须有 NavSurface | +| 所有 `RoomTransition` 目标场景是否在 BuildSettings | Error | 目标场景不存在 | +| 所有 `HitBox` 是否有对应 `DamageSourceSO` | Error | 攻击参数未配置 | +| 所有 `EnemyBase` 是否有 `EnemyStatsSO` | Error | 敌人属性未配置 | + +检查结果在 Console 窗口输出,并在 `Scene Validation` 浮窗中汇总。 + +### Assembly Definition 依赖校验 + +`BaseGames > Settings > Validate Assembly Definitions` 检查 `.asmdef` 是否遵循零耦合原则(如 `BaseGames.Player` 不应直接依赖 `BaseGames.Enemies`),输出依赖图 Mermaid 格式并在 Console 报警。 + +--- + +## 9. 高级工具集(补充) + +### 9.1 Behavior Tree 验证器 + +`Tools > Zeling > BT Validator`(`BaseGames.Editor.BehaviorTreeValidator`): + +扫描 `Assets/` 下所有 Behavior Designer `.asset` 文件,检测: + +| 检查项 | 级别 | 说明 | +|--------|------|------| +| 孤立节点(无父节点且非根)| Warning | 表示悬空的设计草稿节点 | +| 缺失 TaskName 的 Action/Condition | Error | 会导致 BD 无法编译 | +| SharedVariable 引用为空 | Warning | 运行时会 NullRef | +| Action 节点最大深度 > 12 | Warning | 过深 BT 建议拆分子树 | +| 同一 Agent 上同时存在多个 BehaviorTree 组件 | Error | 会互相覆盖 | + +输出到 Console,双击跳转到对应 BD 资产。 + +### 9.2 进程流程图(Progression Flow Graph) + +`Tools > Zeling > Progression Flow Graph`(EditorWindow): + +``` +┌─ Progression Flow Graph ─────────────────────────────────────┐ +│ [刷新] [导出为 PNG] [高亮未实现节点] │ +│ │ +│ ┌Forest──────┐ ─击败SpiderGuard→ ┌Cave───────────────┐ │ +│ │SP_Forest_01│ │SP_Cave_01 │ │ +│ │HP+2 Heart │ │WallJump Unlock │ │ +│ └────────────┘ └───────────────────┘ │ +│ │ │ │ +│ └──────── 需要 Dash ─────────────────┘ │ +└──────────────────────────────────────────────────────────────┘ +``` + +- 自动读取所有 `ProgressLock`/`AbilityGate` SO 及 `BossProgressTracker` 配置 +- 用 Bezier 曲线绘制依赖关系(红色=未解锁,绿色=已解锁) +- 右键节点 → "模拟解锁" → 在 Editor 中测试后续节点是否变绿 + +### 9.3 GameState 转换分析器 + +`Tools > Zeling > GameState Analyzer`(EditorWindow): + +- 列出 `GameManager` 中所有 `GameState` 枚举值 +- 显示每个状态下:允许的输入 Action Map、哪些 SO 频道被监听 +- 矩阵视图:行 = 事件频道,列 = 当前状态;标注"会触发"/"被忽略" +- 辅助排查"暂停状态下攻击事件仍被响应"等逻辑漏洞 + +### 9.4 伤害模拟器(Damage Simulator) + +`DamageSourceSO` 右键菜单 → `Simulate Damage`,弹出快速面板: + +``` +┌─ Damage Simulator: DamageSource_PlayerAttack1 ──┐ +│ 目标防御: 0 [ ] 格 受伤类型: Normal │ +│ CharmBonus: × 1.5 + 12(剑尖魅力) │ +│ 弱点: × 1.0 [✓] 骑士弱点(十字架) │ +│ ───────────────────────────────────────────── │ +│ 最终伤害: 14(基础 9 × 1.5 + 1 向上取整) │ +│ [运行 1000 次随机伤害分布图] │ +└─────────────────────────────────────────────────┘ +``` + +不需要进入 Play Mode 即可快速验证伤害数值设计。 + +### 9.5 地图贴图验证器(Map Texture Validator) + +`Tools > Zeling > Map Texture Validator`: + +- 读取 `MapRoomDataSO.roomOutlineTexture` 与对应场景的实际 Tilemap 边界 +- 对比边界框是否对齐(允许 ± 1 tile 误差) +- 检测 Texture 是否以 `Read/Write` 导入(SetPixels 需要) +- 批量输出不匹配的房间列表 + 截图预览 + +### 9.6 音频导入预处理器(Audio Import Preprocessor) + +`BaseGames.Editor.AudioImportPreprocessor`(继承 `AssetPostprocessor`): + +规则表(`AudioImportRulesSO`,可在 Inspector 配置): + +| 文件名前缀 | 平台 | 采样率 | 压缩格式 | Load Type | +|-----------|------|--------|---------|-----------| +| `BGM_` | All | 44100 | Vorbis(q=0.4)| Streaming | +| `SFX_` | All | 22050 | ADPCM | CompressedInMemory | +| `AMB_` | All | 22050 | Vorbis(q=0.3)| Streaming | +| `Voice_` | All | 22050 | Vorbis(q=0.6)| CompressedInMemory | + +导入音频时自动按文件名前缀应用对应设置,Console 输出 `[AudioPreprocessor] Applied: SFX rule → SFX_Player_Hurt.wav`。 + +### 9.7 装备预览工具(Equip Preview) + +`Tools > Zeling > Equip Preview`(EditorWindow): + +``` +┌─ Equip Preview ──────────────────────────────────────────────┐ +│ 选择魅力组合(最多 4 个槽位): │ +│ 槽1: [剑之力量魅力 ▼] 槽2: [灵魂强化魅力 ▼] │ +│ 槽3: [无 ] 槽4: [无 ] │ +│ ───────────────────────────────────────────────────────── │ +│ 最终属性: │ +│ 攻击力: 9 × 1.5 = 13 法术消耗: 33 × 0.67 = 22 │ +│ 弹反 Soul: 10 → 10 法术弹数: 3 → 3 │ +│ 路径成本: 4 个通知(EquipmentManager.Apply × 4) │ +│ [复制配置 JSON] [应用到 Player(Play Mode)] │ +└──────────────────────────────────────────────────────────────┘ +``` + +### 9.8 构建验证器(Build Validator) + +`Tools > Zeling > Validate Build`,在正式打包前执行完整检测: + +| 检测项 | 级别 | +|--------|------| +| 所有场景已加入 Build Settings | Error | +| 所有 `AudioImportRulesSO` 规则已应用 | Warning | +| 所有 `AnimationEventConfigSO` 无超出范围的事件时间 | Error | +| 所有 `AbilityGate` 引用的能力 ID 存在于 `AbilityType` 枚举 | Error | +| 所有 `LocalizationKeys` 常量在 zh-CN StringTable 中有对应条目 | Warning | +| Player Prefab 已注册为 Addressable(address = `"Player"`,不使用 `Resources/`)| Error | +| 所有 Addressable Group 无缺失引用(Missing Reference)| Error | +| `SaveData` JSON Schema 与当前字段一致(版本检查)| Warning | +| 构建目标平台 Build Target 与发布目标匹配 | Warning | + +输出结果为 Build Validation Report(Text + 每项跳转链接),只有零 Error 才允许继续打包。 diff --git a/Docs/Design/10_UISystem.md b/Docs/Design/10_UISystem.md new file mode 100644 index 0000000..4b4d63e --- /dev/null +++ b/Docs/Design/10_UISystem.md @@ -0,0 +1,1699 @@ +# 10 · UI 系统 + +> **命名空间** `BaseGames.UI` +> **所属文档集** [← 返回索引](./README.md) · [总览](./00_Overview.md) +> **依赖** `BaseGames.Core.Events` · `BaseGames.Combat`(Boss HP)· TextMeshPro · DOTween(P1 过渡动画) + +--- + +## 目录 + +1. [设计原则](#1-设计原则) +2. [Canvas 架构](#2-canvas-架构) +3. [UIManager](#3-uimanager) +4. [HUD 组件](#4-hud-组件) +5. [Boss HP 条](#5-boss-hp-条) +6. [主菜单(MainMenu)](#6-主菜单mainmenu) +7. [Pause 菜单](#7-pause-菜单) +8. [死亡画面](#8-死亡画面) +9. [加载过渡遮罩](#9-加载过渡遮罩) +10. [设置菜单](#10-设置菜单) +11. [UI 事件频道](#11-ui-事件频道) +12. [编辑器友好设计](#12-编辑器友好设计) +13. [加载画面(Loading Screen)](#13-加载画面loading-screen) +14. [无障碍设计(Accessibility)](#14-无障碍设计accessibility) +15. [UIManager 解耦改进说明](#15-uimanager-解耦改进说明) +16. [存档点交互 & 存档槽选择界面](#16-存档点交互--存档槽选择界面) +17. [存档进行中指示(Save Indicator)](#17-存档进行中指示save-indicator) +18. [通知系统(Toast / 成就 / 任务)](#18-通知系统toast--成就--任务) +19. [HUD 扩展:工具槽 & 形态指示](#19-hud-扩展工具槽--形态指示) +20. [全屏功能界面索引](#20-全屏功能界面索引) +21. [UI 音效系统](#21-ui-音效系统) +22. [控制器导航 & 面板栈](#22-控制器导航--面板栈) +23. [输入设备图标自动切换](#23-输入设备图标自动切换) +24. [浮动战斗文字(伤害数字)](#24-浮动战斗文字伤害数字) +25. [HUD 自适应可见性 & 过场隐藏](#25-hud-自适应可见性--过场隐藏) +26. [安全区(Safe Area)适配](#26-安全区safe-area适配) +27. [首次启动序列(Logo & 法务公告)](#27-首次启动序列logo--法务公告) +28. [PC 平台光标管理](#28-pc-平台光标管理) +29. [本地化深度集成](#29-本地化深度集成) + +--- + +## 1. 设计原则 + +- **状态驱动**:`UIManager` 监听 `GameState` 变化,自动激活/隐藏对应 Canvas Root,由中央管理器决定何时显示什么 +- **像素风适配**:UI 字体使用 TextMeshPro + 像素字体,UI 元素整数像素对齐,Canvas Scaler 使用 `Scale With Screen Size`(参考分辨率 1920×1080) +- **零耦合**:HUD 只订阅事件频道(`OnPlayerHPChanged`、`OnPlayerSoulChanged`),不持有 `PlayerStats` 直接引用 +- **分层 Canvas**:HUD / Menu / Overlay 三个独立 Canvas,各自管理 Sorting Order,互不干扰 + +--- + +## 2. Canvas 架构 + +所有 UI Canvas 挂载在 **Persistent 场景**中,随游戏全程常驻: + +``` +[UI Root] ← Persistent 场景内 +├── Canvas_HUD Sorting Order: 10 (Screen Space - Overlay) +├── Canvas_Menu Sorting Order: 20 (Screen Space - Overlay) +└── Canvas_Overlay Sorting Order: 30 (Screen Space - Overlay,最顶层) +``` + +### Canvas_HUD 子结构 + +``` +Canvas_HUD +├── HUDPanel (RectTransform: 全屏铺满) +│ ├── HPContainer (左上角,心形容器列表,水平布局组) +│ ├── SoulGauge (下方居中,弧形灵魂槽) +│ ├── GeoCounter (右上角,Geo 图标 + TextMeshPro 数字) +│ └── AbilityHint (右下角,P1:当前解锁能力图标列) +└── BossHPBar (下方居中,默认隐藏,Boss 战激活) + ├── BossNameText (TextMeshPro) + ├── HPBarBackground (Image) + ├── HPBarFill (Image,FillAmount 驱动) + └── PhaseMarkers (P1:阶段分割线列表) +``` + +### Canvas_Menu 子结构 + +``` +Canvas_Menu +├── MainMenuPanel (默认激活) +│ ├── TitleImage +│ ├── MenuButtonGroup (垂直布局) +│ └── VersionText +├── PauseMenuPanel (默认隐藏) +├── DeathScreenPanel (默认隐藏) +└── SettingsPanel (默认隐藏,从主菜单/暂停菜单叠加打开) +``` + +### Canvas_Overlay 子结构 + +``` +Canvas_Overlay +├── LoadingOverlay (黑色全屏 Image,默认 alpha=0) +│ └── LoadingSpinner (P1:旋转加载动画) +└── DialogueBox (底部,默认隐藏;见 15_DialogueSystem.md) + ├── SpeakerNameText + ├── DialogueText + └── ContinuePrompt +``` + +--- + +## 3. UIManager + +`UIManager` 常驻 Persistent 场景,订阅 `GameState` 变化事件并驱动 Canvas 显隐。 + +### 类结构 + +```csharp +namespace BaseGames.UI +{ + [DefaultExecutionOrder(+50)] + public class UIManager : MonoBehaviour + { + [Header("Canvas Roots")] + [SerializeField] GameObject _hudRoot; + [SerializeField] GameObject _pauseMenuRoot; + [SerializeField] GameObject _mainMenuRoot; + [SerializeField] GameObject _deathScreenRoot; + [SerializeField] GameObject _settingsPanel; + [SerializeField] LoadingOverlay _loadingOverlay; + + [Header("Event Channels")] + [SerializeField] GameStateEventChannelSO _onGameStateChanged; + + // 公开接口(供 GameManager Coroutine 调用) + public IEnumerator FadeIn() => _loadingOverlay.FadeIn(); + public IEnumerator FadeOut() => _loadingOverlay.FadeOut(); + public void OpenSettings() => _settingsPanel.SetActive(true); + public void CloseSettings() => _settingsPanel.SetActive(false); + + void OnEnable() => _onGameStateChanged.OnEventRaised += HandleGameStateChanged; + void OnDisable() => _onGameStateChanged.OnEventRaised -= HandleGameStateChanged; + + void HandleGameStateChanged(GameState newState) + { + _hudRoot.SetActive(newState is GameState.Gameplay or GameState.BossFight); + _pauseMenuRoot.SetActive(newState == GameState.Paused); + _mainMenuRoot.SetActive(newState == GameState.MainMenu); + _deathScreenRoot.SetActive(newState == GameState.Dead); + } + } +} +``` + +### GameStateEventChannelSO + +新增事件频道类型(`BaseGames.Core.Events`): + +```csharp +[CreateAssetMenu(menuName = "Events/GameState Channel")] +public class GameStateEventChannelSO : ScriptableObject +{ + public event Action OnEventRaised; + public void Raise(GameState state) => OnEventRaised?.Invoke(state); +} +``` + +--- + +## 4. HUD 组件 + +### 4.1 HP 心形容器(HPContainer) + +HP 以**心形图标列**表示,而非连续血条(像素风标准做法): + +```csharp +public class HPContainer : MonoBehaviour +{ + [SerializeField] IntEventChannelSO _onHPChanged; + [SerializeField] IntEventChannelSO _onMaxHPChanged; + [SerializeField] GameObject _heartPrefab; // 完整心 Sprite + [SerializeField] Sprite _heartEmptySprite; // 空心 Sprite(替换 Image.sprite) + + // Start() → 根据 SaveData.maxHP 生成心形图标列表 + // OnHPChanged(int newHP) → 更新填充/空心数量,对应位置播放消失动画 + // OnMaxHPChanged(int newMax) → 动态添加新心形图标(Heart Container 升级时) +} +``` + +| 状态 | 显示 | 动画 | +|------|------|------| +| `HP == MaxHP` | 全部填充心 | 无 | +| `HP < MaxHP` | 右侧显示空心 | 受伤时对应心图标 Shake(`MMF_Position`)| +| `HP == 0` | 全部空心 | 最后一颗心 Scale 缩小到 0(`MMF_Scale`)| +| MaxHP 增加 | 新心从右侧弹入 | 弹入动画(`MMF_Scale` 0→1)| + +行宽规则:最多 8 个心/行,超出自动换行(最多 3 行,即 MaxHP 上限 24)。 + +--- + +### 4.2 Soul 灵魂槽(SoulGauge) + +弧形进度条,`Image.type = Filled`,`Fill Method = Radial 360`: + +``` +SoulGauge (Image) + fillAmount = Soul / MaxSoul(0.0 ~ 1.0) + 颜色渐变: 0% → 深蓝灰 (#1A1A2E) + 50% → 蓝色 (#4A90E2) + 100% → 亮蓝白 (#8BE8FF) + 满槽特效: MMF_Flash 白色光晕 0.1s(订阅 OnPlayerSoulChanged 满时触发) +``` + +订阅 `OnPlayerSoulChanged.asset (IntEventChannelSO)`,每帧不直接 Lerp,而是在收到事件时**立即更新** fillAmount(像素风不需要血条追尾)。 + +--- + +### 4.3 Geo 计数器(GeoCounter) + +``` +GeoCounter +├── GeoIcon (Sprite Image,Geo 硬币图标) +└── GeoText (TextMeshPro,白色 + 黑色描边,像素字体) + +拾取弹出:FloatingText("+N")从 GeoIcon 位置飞出并淡出(ObjectPool 驱动) +数字更新:直接 SetText,不做 Tween(像素风即时更新风格) +``` + +订阅 `OnPlayerGeoChanged.asset (IntEventChannelSO)`。 + +--- + +## 5. Boss HP 条 + +Boss 战开始时从屏幕下方滑入,Boss 死亡后延迟 1s 淡出隐藏: + +```csharp +public class BossHPBar : MonoBehaviour +{ + [SerializeField] BoolEventChannelSO _onBossFightToggled; // true=开始,false=结束 + [SerializeField] IntEventChannelSO _onBossHPChanged; + [SerializeField] StringEventChannelSO _onBossNameSet; + + [SerializeField] Image _hpBarFill; + [SerializeField] TMP_Text _bossNameText; + [SerializeField] RectTransform _barRoot; + + int _maxHP; + + void OnBossFightToggled(bool started) + { + if (started) StartCoroutine(SlideIn()); // barRoot.anchoredPosition.y: -80 → 0(0.4s) + else StartCoroutine(SlideOut()); // 延迟 1s → y: 0 → -80(0.3s) + } + + void OnBossHPChanged(int hp) => _hpBarFill.fillAmount = (float)hp / _maxHP; +} +``` + +**P1 扩展**:`PhaseMarkers`——根据 `BossPhaseConfigSO` 的 HP 阈值在 HP 条上绘制分割竖线(`UI.Image` 子对象,按比例定位)。 + +--- + +## 6. 主菜单(MainMenu) + +### 布局 + +``` +MainMenuPanel +├── TitleImage (像素艺术标题图,居中偏上) +├── MenuButtonGroup (垂直布局,居中) +│ ├── Button_NewGame +│ ├── Button_Continue (无存档时 interactable=false,颜色变灰) +│ ├── Button_Settings +│ └── Button_Quit +└── VersionText (右下角,TextMeshPro 小字) +``` + +### 存档槽选择 + +点击 Continue 时,若存在多存档槽(最多 3 个),弹出存档槽选择面板: + +``` +SaveSlotPanel (叠在 MainMenuPanel 上方) +├── SaveSlot_01 [区域名 | 游戏时长 | HP容器数 | 进度%] +├── SaveSlot_02 +├── SaveSlot_03 +└── Button_Back +``` + +单存档模式(MVP):只有 1 个槽,Continue 直接加载,不弹面板。 + +### 按钮响应 + +``` +Button_NewGame → SaveManager.DeleteSave() → GameManager.StartNewGame() +Button_Continue → GameManager.LoadGame(slotIndex) +Button_Settings → UIManager.OpenSettings() +Button_Quit → Application.Quit() +``` + +--- + +## 7. Pause 菜单 + +通过 `InputReaderSO.PauseEvent`(`Escape` / 手柄 `Start`)触发: + +``` +PauseMenuPanel +├── PauseTitle ("- PAUSED -",像素字体) +├── ButtonGroup +│ ├── Button_Resume → GameManager.ResumeGame() +│ ├── Button_Settings → UIManager.OpenSettings() +│ └── Button_QuitToMenu → 弹出确认对话框 → GameManager.QuitToMainMenu() +└── InputHints (底部图标提示:"[ESC] 继续 [Q] 退出") +``` + +**时间缩放**:Pause 时 `Time.timeScale = 0`。所有菜单 `MMF_Player` 设置 `TimescaleIndependent = true`(Feel 已内置该选项),保证菜单弹入动画不受暂停影响。 + +--- + +## 8. 死亡画面 + +``` +DeathScreenPanel (全屏黑底 CanvasGroup,alpha 从 0 渐入到 1) +├── DeathText ("你死了",像素大字,慢速淡入,delay 0.3s) +├── GeoLostText ("遗失 {N} Geo",有 Shade 机制时显示;P1) +└── PromptText ("按任意键继续",1s 延迟后出现,闪烁循环) +``` + +**时序由 GameManager 协程控制**(详见 [11_GameManager.md §5](./11_GameManager.md)): + +| 时刻 | 事件 | +|------|------| +| 0.0s | `OnPlayerDied` 触发,`GameState → Dead`,DeathScreenPanel 开始渐入 | +| 1.2s | 玩家死亡动画结束 | +| 2.0s | DeathScreenPanel 完全可见(alpha=1) | +| 2.0s~ | 等待玩家按键(或 3s 超时自动继续) | +| +0.3s | LoadingOverlay 淡入遮盖 → 场景加载 → 淡出 | + +--- + +## 9. 加载过渡遮罩 + +`LoadingOverlay` 是 `Canvas_Overlay` 下的全黑 `Image`,通过 `CanvasGroup.alpha` 控制淡入淡出: + +```csharp +public class LoadingOverlay : MonoBehaviour +{ + [SerializeField] CanvasGroup _canvasGroup; + [SerializeField] float _fadeDuration = 0.3f; + + public IEnumerator FadeIn() + { + _canvasGroup.gameObject.SetActive(true); + float t = 0f; + while (t < _fadeDuration) + { + _canvasGroup.alpha = t / _fadeDuration; + t += Time.unscaledDeltaTime; // 使用 unscaledDeltaTime,暂停/死亡时也能工作 + yield return null; + } + _canvasGroup.alpha = 1f; + } + + public IEnumerator FadeOut() + { + float t = _fadeDuration; + while (t > 0f) + { + _canvasGroup.alpha = t / _fadeDuration; + t -= Time.unscaledDeltaTime; + yield return null; + } + _canvasGroup.alpha = 0f; + _canvasGroup.gameObject.SetActive(false); + } +} +``` + +**使用方**:`SceneLoader` 在异步加载前调用 `yield return FadeIn()`,场景激活后调用 `yield return FadeOut()`。不由 `UIManager` 直接驱动,而是由 `GameManager` 协程在特定时序中显式调用。 + +--- + +## 10. 设置菜单 + +`SettingsPanel` 叠加在 MainMenuPanel 或 PauseMenuPanel 上方(Sorting Order 相同,z-order 靠后): + +``` +SettingsPanel +├── Tab_Audio +│ ├── Slider_MasterVolume (0.0 ~ 1.0,初始值读自 SettingsManager) +│ ├── Slider_BGMVolume +│ ├── Slider_SFXVolume +│ └── Toggle_Haptics +├── Tab_Controls (P1:键位重映射) +│ └── KeyBindingsList (InputSystem PlayerInput rebind API) +├── Tab_Display (P1) +│ ├── Toggle_PixelPerfect +│ └── Dropdown_Resolution +└── Button_Back → UIManager.CloseSettings(),保存设置 +``` + +### 音量应用逻辑 + +```csharp +// SettingsUI.cs +// Slider.onValueChanged → AudioManager.SetBGMVolume(value) +// → audioMixer.SetFloat("BGMVolume", LinearToDecibel(value)) +// +// 线性值 → 分贝转换: +float LinearToDecibel(float linear) + => linear > 0.0001f ? 20f * Mathf.Log10(linear) : -80f; +``` + +设置持久化通过 `SettingsManager`(独立于存档,写入 `Application.persistentDataPath/settings.json`)。 + +--- + +## 11. UI 事件频道 + +新增频道(存放于 `Assets/ScriptableObjects/Events/UI/`): + +| 资产名 | 类型 | 用途 | +|--------|------|------| +| `OnGameStateChanged.asset` | `GameStateEventChannelSO` | UIManager 监听,驱动 Canvas 切换 | +| `OnMaxHPChanged.asset` | `IntEventChannelSO` | HPContainer 增加心形图标 | +| `OnBossHPChanged.asset` | `IntEventChannelSO` | BossHPBar 更新 fillAmount | +| `OnBossNameSet.asset` | `StringEventChannelSO` | BossHPBar 显示 Boss 名称 | +| `OnBossHPMaxSet.asset` | `IntEventChannelSO` | BossHPBar 初始化 MaxHP | + +> `OnBossFightToggled.asset`(BoolEventChannelSO)已存在于 `Events/Camera/`,BossHPBar 直接复用。 + +--- + +## 12. 编辑器友好设计 + +- `UIManager` Custom Inspector:实时显示当前 GameState 文字标签 + 各 Canvas Root 激活状态(绿/红标记) +- Editor Only 测试按钮(UI Toolkit `Button` + `Toggle`,`CreateInspectorGUI()` 中实现): + - `[Simulate: Gameplay]` — 模拟进入 Gameplay 状态(测试 HUD 显示) + - `[Simulate: Dead]` — 模拟死亡(测试 DeathScreen 渐入) + - `[Simulate: Boss Start]` — 模拟 Boss 战开始(测试 BossHPBar 滑入) +- UI Prefab 存放:`Assets/Prefabs/UI/` 按模块分子文件夹(HUD / Menus / Overlays) +- RectTransform 规范:按设计区域固定锚点(左上/居中/右上),禁止拉伸式动态布局,防止不同分辨率下错位 + +--- + +## 13. 加载画面(Loading Screen) + +### 13.1 组件布局 + +``` +Canvas_Overlay +└── LoadingScreen(默认 SetActive(false)) + ├── Background_Art → 黑色基底 + 加载时随机区域概念图(Sprite) + ├── ProgressBar + │ ├── ProgressBarBG → 灰色底条 + │ └── ProgressBarFill→ 白色填充(Image.fillAmount) + ├── TipText → TextMeshPro,显示游戏技巧 + └── LoadingIcon → 旋转的像素风齿轮(DOTween Rotate 无限) +``` + +### 13.2 LoadingScreenManager + +```csharp +public class LoadingScreenManager : MonoBehaviour +{ + [SerializeField] GameObject _root; + [SerializeField] Image _progressFill; + [SerializeField] TMP_Text _tipText; + [SerializeField] Sprite[] _backgroundArts; // 各区域概念图 + [SerializeField] string[] _tipKeys; // LocalizationKeys(游戏技巧) + + [SerializeField] VoidEventChannelSO _onLoadingStarted; + [SerializeField] VoidEventChannelSO _onLoadingComplete; + [SerializeField] FloatEventChannelSO _onLoadingProgressUpdated; + [SerializeField] LanguageManagerSO _langMgr; + + void OnEnable() + { + _onLoadingStarted.OnEventRaised += Show; + _onLoadingComplete.OnEventRaised += Hide; + _onLoadingProgressUpdated.OnEventRaised += UpdateProgress; + } + + void OnDisable() + { + _onLoadingStarted.OnEventRaised -= Show; + _onLoadingComplete.OnEventRaised -= Hide; + _onLoadingProgressUpdated.OnEventRaised -= UpdateProgress; + } + + void Show() + { + _root.SetActive(true); + // 随机背景 + _root.GetComponentInChildren().sprite = + _backgroundArts[Random.Range(0, _backgroundArts.Length)]; + // 随机提示 + string key = _tipKeys[Random.Range(0, _tipKeys.Length)]; + _tipText.text = _langMgr.Get(key, "UI_Table"); + _progressFill.fillAmount = 0f; + } + + void Hide() + { + // 先确保进度条跑满再淡出 + DOTween.To(() => _progressFill.fillAmount, v => _progressFill.fillAmount = v, 1f, 0.2f) + .OnComplete(() => _root.SetActive(false)); + } + + void UpdateProgress(float progress) + => _progressFill.fillAmount = progress; +} +``` + +### 13.3 游戏技巧文本(Localization) + +提示字符串统一放在 `UI_Table` 中,键名格式 `ui.loading.tip.{index}`(0~19): + +``` +ui.loading.tip.0 = "弹反成功可以回复灵魂值" +ui.loading.tip.1 = "按住方向键向下可以穿过单向平台" +ui.loading.tip.2 = "冥影会守护你离开的地方——记得取回你的 Geo" +ui.loading.tip.3 = "壁跳需要连续交替踩两侧墙壁才能持续上升" +// ... 更多提示 +``` + +--- + +## 14. 无障碍设计(Accessibility) + +### 14.1 色盲模式 + +提供三种色盲辅助模式,通过 URP 后处理 Volume 切换: + +| 模式 | Volume Override | 说明 | +|------|----------------|------| +| 关闭(默认) | None | 原始色彩 | +| 色盲模式 A(红绿色盲)| `CC_Deuteranopia.asset` | 使用蓝黄色调区分敌我 | +| 色盲模式 B(蓝黄色盲)| `CC_Tritanopia.asset` | 使用红绿色调区分 | +| 高对比度 | `CC_HighContrast.asset` | 边缘增强 + 提高对比度 | + +```csharp +public class AccessibilityManager : MonoBehaviour +{ + [SerializeField] Volume[] _colorBlindVolumes; // 索引对应 AccessibilityMode 枚举 + [SerializeField] AccessibilitySettingsSO _settings; + + public void SetColorBlindMode(int modeIndex) + { + for (int i = 0; i < _colorBlindVolumes.Length; i++) + _colorBlindVolumes[i].weight = (i == modeIndex) ? 1f : 0f; + + _settings.colorBlindMode = modeIndex; + PlayerPrefs.SetInt("ColorBlindMode", modeIndex); + } +} +``` + +### 14.2 难度辅助选项 + +| 选项 | 默认 | 说明 | +|------|------|------| +| 无敌帧时长 | 1.8s(正常) | 可调至 2.5s(辅助)| +| 土狼时间 | 0.15s | 可调至 0.25s(辅助)| +| 弹反窗口 | 0.28s | 可调至 0.45s(辅助)| +| 输入缓冲 | 见 §23 | 可整体 +50%(辅助)| +| 死亡惩罚 | 掉落 Geo + 生成 Shade | 可设"仅重生无其他惩罚"(辅助)| + +这些选项存储于 `AccessibilitySettingsSO`,不写入存档(账户级设置),通过 `PlayerPrefs` 持久化。 + +### 14.3 字幕与文本 + +- 对话中 NPC 名称用颜色区分(色盲模式下替换为形状图标区分) +- 字体大小可在设置页调整(Small/Normal/Large,对应 TMP 字体大小 × 0.85 / 1.0 / 1.2) +- 所有 UI 动画支持"减少动态效果"选项(关闭非关键过渡动画,仅保留淡入淡出) + +### 14.4 手柄震动控制 + +``` +设置 > 游戏手感 > 手柄震动 + 整体震动强度: [0% ─────────●────── 100%](默认 80%) + 攻击命中: [✓] 开启 + 受到伤害: [✓] 开启 + BOSS 演出: [✓] 开启 + 行走震动: [ ] 关闭(默认关闭,避免疲劳) +``` + +震动设置乘以 `PlayerPrefs.GetFloat("VibrationMultiplier", 0.8f)` 后传入 Lofelt Nice Vibrations API。 + +### 14.5 键位自定义(控制重映射) + +`10_UISystem §10` 的设置菜单扩展: + +``` +设置 > 按键设置 > 控制器 / 键鼠 + [按下想要修改的操作,然后按目标按键/键位...] + + 操作 当前绑定 默认绑定 + 攻击 [J] [Z] + 跳跃 [K] [X] + 冲刺 [L] [C] + 弹反 [U] [A] + ... + [恢复默认] +``` + +通过 `PlayerInput` 的 `InputActionRebindingExtensions.PerformInteractiveRebinding()` 实现,绑定存储于 `PlayerPrefs["InputBindings_Controller"]`(JSON 格式)。 + +--- + +## 15. UIManager 解耦改进说明 + +### 15.1 当前依赖关系与问题 + +`UIManager` 目前通过 `asmdef` 依赖 `BaseGames.Combat`,原因是 **BossHP 条需要读取 `DamageInfo`**(当前 HP / Max HP 来自 Boss 的 `EnemyStats`)。 + +``` +BaseGames.UI.asmdef + └── 依赖: BaseGames.Core · BaseGames.Combat ← 仅为 BossHP 条 +``` + +这带来潜在风险:若 UI 层将来需要引用 Dialogue、Equipment 等系统,可能形成循环依赖(Combat 不应反向依赖 UI)。 + +### 15.2 改进方案:IBossHPProvider 接口 + +将 Boss HP 信息通过接口隔离,UI 只依赖接口,不依赖 Combat 层: + +```csharp +// Assets/Scripts/Core/Interfaces/IBossHPProvider.cs +// 归属: BaseGames.Core.asmdef(接口层,所有系统均可访问) +namespace BaseGames.Core +{ + public interface IBossHPProvider + { + int CurrentHP { get; } + int MaxHP { get; } + int PhaseCount { get; } + int CurrentPhase { get; } + float NormalizedHP => (float)CurrentHP / MaxHP; + + event System.Action OnHPChanged; // (current, max) + event System.Action OnPhaseChanged; + } +} +``` + +```csharp +// EnemyBase(Combat 层)实现接口 +public class EnemyBase : MonoBehaviour, IBossHPProvider { /* ... */ } + +// BossHPBar(UI 层)仅依赖接口,不 using BaseGames.Combat +public class BossHPBar : MonoBehaviour +{ + IBossHPProvider _boss; + + // 由 BossEventChannelSO 传入(泛型参数改为 IBossHPProvider) + [SerializeField] BossEventChannelSO _onBossFightStarted; + + void OnEnable() + => _onBossFightStarted.OnEventRaised += RegisterBoss; + + void RegisterBoss(IBossHPProvider boss) + { + _boss = boss; + _boss.OnHPChanged += UpdateBar; + } +} +``` + +### 15.3 迁移路径 + +改动成本较低,分两步完成: + +| 步骤 | 操作 | 影响范围 | +|------|------|---------| +| 1 | 在 `BaseGames.Core.asmdef` 中新增 `IBossHPProvider` 接口文件 | 仅新增文件 | +| 2 | `EnemyBase` 实现 `IBossHPProvider`,`BossHPBar` 改为依赖接口 | `EnemyBase.cs` + `BossHPBar.cs` 各约 10 行改动 | +| 3 | `BaseGames.UI.asmdef` 的依赖列表中移除 `BaseGames.Combat` | 编辑 `.asmdef` 文件 | + +> **P2 优先级**:当前 Combat → UI 路径并未造成循环依赖,改进非紧急。仅在 UI 层需要引入新的跨层依赖前执行。 + +--- + +## 16. 存档点交互 & 存档槽选择界面 + +### 16.1 存档点交互提示(InteractPrompt) + +玩家靠近存档点时,在存档点上方显示交互提示气泡: + +``` +Canvas_Overlay +└── SavePointPrompt (World Space Canvas,跟随存档点世界坐标) + ├── PromptIcon (键盘图标 [E] / 手柄图标 [South Button]) + └── PromptText ("存档",本地化键 ui.savepoint.interact) +``` + +交互后播放存档动画(主角坐下动画由 Animancer 控制),存档完成后显示"已保存"指示(见 §17)。 + +### 16.2 存档槽选择面板(SaveSlotPanel) + +**触发时机**:主菜单点击「继续游戏」且存在多个有效存档槽时弹出。 +**Canvas 层级**:`Canvas_Menu`(Sorting Order 20),叠在 `MainMenuPanel` 上方。 + +``` +SaveSlotPanel +├── Title ("选择存档",像素字体) +├── SlotList (垂直布局,3 个 SaveSlotCard) +│ ├── SaveSlotCard_0 +│ ├── SaveSlotCard_1 +│ └── SaveSlotCard_2 +└── Button_Back +``` + +#### SaveSlotCard 布局 + +``` +SaveSlotCard +├── BgImage (Image;异步加载 savePointBgImageKey Sprite;加载中显示占位色块) +│ └── BgDimOverlay (半透明黑色蒙层,确保文字可读) +├── SlotEmptyPanel (无存档时显示:"空槽" + "[新游戏]" 按钮) +└── SlotDataPanel (有存档时显示) + ├── SavePointNameText (TMP,查 savePointLocKey 本地化) + ├── HPContainer (心形图标列,只读展示) + ├── PlaytimeText ("游玩 Xh Xm",由 playtime 秒格式化) + ├── LastSavedText ("最后存档:yyyy-MM-dd HH:mm",UTC→本地时区转换) + ├── NgPlusBadge (仅 ngPlusCount > 0 时显示,"◆ NG+N" 金色标签) + └── DeleteButton (默认隐藏;长按 0.5s 触发确认弹窗) +``` + +#### SaveSlotCard C# 实现骨架 + +```csharp +public class SaveSlotCard : MonoBehaviour +{ + [SerializeField] Image _bgImage; + [SerializeField] TMP_Text _savePointName; + [SerializeField] HPContainer _hpDisplay; // 复用 HUD HPContainer(只读模式) + [SerializeField] TMP_Text _playtimeText; + [SerializeField] TMP_Text _lastSavedText; + [SerializeField] GameObject _ngPlusBadge; + [SerializeField] TMP_Text _ngPlusText; + [SerializeField] GameObject _emptyPanel; + [SerializeField] GameObject _dataPanel; + [SerializeField] LanguageManagerSO _lang; + + public async void Bind(SaveSlotSummary summary) + { + if (summary == null) + { + _emptyPanel.SetActive(true); + _dataPanel.SetActive(false); + return; + } + + _emptyPanel.SetActive(false); + _dataPanel.SetActive(true); + + // 存档点名称(本地化) + _savePointName.text = _lang.Get(summary.Meta.SavePointLocKey, "UI_Table"); + + // 游玩时长格式化 + int totalMin = (int)(summary.Meta.Playtime / 60); + _playtimeText.text = $"游玩 {totalMin / 60}h {totalMin % 60}m"; + + // 最后存档时间(UTC → 本地时区) + if (DateTimeOffset.TryParse(summary.Meta.LastSaved, out var dt)) + _lastSavedText.text = $"最后存档:{dt.LocalDateTime:yyyy-MM-dd HH:mm}"; + + // HP 展示 + _hpDisplay.SetReadOnly(summary.Player.CurrentHP, summary.Player.MaxHP); + + // NG+ 标记 + bool isNgPlus = summary.Meta.NgPlusCount > 0; + _ngPlusBadge.SetActive(isNgPlus); + if (isNgPlus) _ngPlusText.text = $"NG+{summary.Meta.NgPlusCount}"; + + // 背景图(Addressable 异步加载,不阻塞主线程) + if (!string.IsNullOrEmpty(summary.Meta.SavePointBgImageKey)) + { + var handle = Addressables.LoadAssetAsync(summary.Meta.SavePointBgImageKey); + _bgImage.sprite = await handle.Task; + } + } +} +``` + +**删除确认弹窗**: + +``` +ConfirmDeleteDialog +├── TitleText ("确认删除存档?此操作不可撤销") +├── Button_Yes → SaveManager.DeleteSlotAsync(slot) → RefreshPanel() +└── Button_Cancel +``` + +--- + +## 17. 存档进行中指示(Save Indicator) + +存档触发(存档点交互 / `WriteDirty`)后,在 HUD 右下角显示短暂存档状态动画: + +``` +Canvas_HUD +└── SaveIndicator (右下角,默认 CanvasGroup.alpha=0) + ├── SaveIcon (旋转像素风图标,DOTween 持续旋转) + └── SaveText ("正在保存..." / "已保存") +``` + +```csharp +public class SaveIndicator : MonoBehaviour +{ + [SerializeField] CanvasGroup _cg; + [SerializeField] TMP_Text _text; + [SerializeField] RectTransform _icon; + + [SerializeField] BoolEventChannelSO _onSaveStateChanged; // true=成功 + + void OnEnable() => _onSaveStateChanged.OnEventRaised += OnSaveState; + void OnDisable() => _onSaveStateChanged.OnEventRaised -= OnSaveState; + + public void ShowSaving() + { + _text.text = "正在保存..."; + _cg.DOFade(1f, 0.15f); + _icon.DORotate(new Vector3(0, 0, -360f), 1f, RotateMode.FastBeyond360) + .SetLoops(-1).SetEase(Ease.Linear); + } + + void OnSaveState(bool success) + { + _icon.DOKill(); + _text.text = success ? "已保存" : "保存失败"; + DOTween.Sequence() + .AppendInterval(1.2f) + .Append(_cg.DOFade(0f, 0.3f)); + } +} +``` + +`SaveManager.SaveAsync` 开始前通过 `OnSaveStarted`(`VoidEventChannelSO`)触发 `ShowSaving()`,结束后通过 `OnSaveStateChanged` 传递成功/失败结果。 + +--- + +## 18. 通知系统(Toast / 成就 / 任务) + +### 18.1 架构 + +``` +Canvas_Overlay +└── NotificationArea (右上角,垂直布局,最多 3 条并排) + └── [NotificationCard] (动态生成,ObjectPool 管理) + ├── IconImage + ├── TitleText + └── BodyText +``` + +### 18.2 通知类型与持续时间 + +| 类型 | 触发时机 | 持续时间 | +|------|---------|--------| +| `SaveComplete` | 存档成功后 | 1.5s | +| `Achievement` | 成就解锁 | 4s | +| `QuestNew` | 接取新任务 | 3s | +| `QuestUpdate` | 任务目标推进 | 2.5s | +| `QuestComplete` | 任务完成 | 3.5s | +| `SystemWarning` | 存档失败等错误 | 5s | + +### 18.3 NotificationManager + +```csharp +[DefaultExecutionOrder(+60)] +public class NotificationManager : MonoBehaviour +{ + [SerializeField] NotificationCard _cardPrefab; + [SerializeField] Transform _area; + [SerializeField] int _maxVisible = 3; + + [SerializeField] BoolEventChannelSO _onSaveStateChanged; + [SerializeField] StringEventChannelSO _onAchievementUnlocked; + [SerializeField] StringEventChannelSO _onQuestNew; + [SerializeField] StringEventChannelSO _onQuestUpdated; + [SerializeField] StringEventChannelSO _onQuestCompleted; + + readonly Queue _queue = new(); + + void OnEnable() + { + _onSaveStateChanged.OnEventRaised += ok => + Enqueue(ok ? NotificationType.SaveComplete : NotificationType.SystemWarning, + ok ? "已保存" : "存档失败"); + _onAchievementUnlocked.OnEventRaised += id => Enqueue(NotificationType.Achievement, id); + _onQuestNew.OnEventRaised += id => Enqueue(NotificationType.QuestNew, id); + _onQuestUpdated.OnEventRaised += id => Enqueue(NotificationType.QuestUpdate, id); + _onQuestCompleted.OnEventRaised += id => Enqueue(NotificationType.QuestComplete, id); + } + + void Enqueue(NotificationType type, string payload) + { + _queue.Enqueue(new(type, payload)); + TryShowNext(); + } + + void TryShowNext() + { + if (_area.childCount >= _maxVisible || _queue.Count == 0) return; + var card = Instantiate(_cardPrefab, _area); + card.Show(_queue.Dequeue(), OnCardDismissed); + } + + void OnCardDismissed() => TryShowNext(); +} +``` + +### 18.4 NotificationCard 动画 + +右侧滑入 → 停留 → 淡出右侧退出: + +```csharp +public void Show(NotificationData data, Action onDone) +{ + _icon.sprite = IconLibrary.Get(data.Type); + _titleText.text = LocalizationHelper.GetNotificationTitle(data); + _bodyText.text = LocalizationHelper.GetNotificationBody(data); + + DOTween.Sequence() + .Append(transform.DOLocalMoveX(0, 0.2f).From(220f).SetEase(Ease.OutCubic)) + .AppendInterval(NotificationDurations[data.Type]) + .Append(_cg.DOFade(0f, 0.25f)) + .OnComplete(() => { onDone?.Invoke(); Destroy(gameObject); }); +} +``` + +--- + +## 19. HUD 扩展:工具槽 & 形态指示 + +### 19.1 工具槽 HUD(ToolSlotHUD) + +详细设计见 [37_ToolSystem](./37_ToolSystem.md)。Canvas 挂载: + +``` +Canvas_HUD +└── ToolSlotHUD (右下角,水平布局) + ├── ToolSlot_0 + │ ├── ToolIconBg (槽位背景框) + │ ├── ToolIcon (当前工具图标;空槽显示占位图) + │ └── CooldownOverlay (圆形 FillAmount 冷却覆盖层) + └── ToolSlot_1 + └── ... +``` + +- 订阅 `OnToolEquipped(int slot, string toolId)` 更新图标 +- 订阅 `OnToolCooldownChanged(int slot, float normalized)` 更新冷却蒙层 +- 当前激活槽白色描边高亮,非激活槽降低亮度 + +### 19.2 形态切换指示(FormIndicator) + +详细设计见 [21_SpellSystem](./21_SpellSystem.md)。Canvas 挂载: + +``` +Canvas_HUD +└── FormIndicator (左下角,灵魂槽右侧) + ├── FormIconCurrent (当前形态图标,全亮,Scale 略大) + └── FormIconRow (已解锁形态小图标列,切换时高亮目标) +``` + +- 订阅 `OnFormChanged(string formId)` 切换高亮图标 +- 形态图标资产命名规范:`{formId}_Icon.png`,存放于 `Assets/Sprites/UI/Forms/` +- 切换时 Scale 0.8→1.0 脉冲动画(0.15s DOTween) + +--- + +## 20. 全屏功能界面索引 + +以下全屏功能界面各有专属文档,本文档仅说明挂载点和打开方式: + +| 界面 | 文档 | 打开方式 | Canvas 挂载 | +|------|------|---------|------------| +| **地图** | [16_MapSystem](./16_MapSystem.md) | 暂停内 / 快捷键 `M` | `Canvas_Menu` | +| **护符/装备** | [17_EquipmentSystem](./17_EquipmentSystem.md) | 暂停内 / 快捷键 `C` | `Canvas_Menu` | +| **技能/形态** | [21_SpellSystem](./21_SpellSystem.md) | 暂停内 | `Canvas_Menu` | +| **任务日志** | [38_QuestSystem](./38_QuestSystem.md) §QuestLogUI | 暂停内 / 快捷键 `J` | `Canvas_Menu` | +| **商店** | [28_ShopSystem](./28_ShopSystem.md) | NPC 交互触发 | `Canvas_Menu` | +| **对话框** | [15_DialogueSystem](./15_DialogueSystem.md) | 对话事件触发 | `Canvas_Overlay` | +| **挑战房间结算** | [39_ChallengeRoomSystem](./39_ChallengeRoomSystem.md) | 挑战完成事件 | `Canvas_Overlay` | +| **难度选择** | [29_DifficultyModesGuide](./29_DifficultyModesGuide.md) §9 | 新游戏流程 | `Canvas_Menu` | + +**全屏界面统一规范**: + +- 打开时 `Time.timeScale = 0`(对话框除外,对话框在游戏运行中叠加) +- 背景使用 `FullscreenDimOverlay`(`Canvas_Overlay` 下,`CanvasGroup.alpha = 0.65f`) +- 关闭时发送 `OnGameStateChanged(GameState.Gameplay)` 恢复时间缩放 +- 所有全屏界面支持 `Escape` / 手柄 `East Button (B)` 关闭 + +--- + +## 21. UI 音效系统 + +所有 UI 交互均需音效反馈。统一通过 `UIAudioManager`(订阅 UI 事件频道)发声,**不在各 UI 组件中内嵌 AudioSource**,保证集中管理和统一调节。 + +### 21.1 音效事件表 + +| 触发时机 | 音效分类 | 资产键示例 | 备注 | +|---------|---------|----------|------| +| 按钮 Hover(鼠标 / 导航移入)| `ui_hover` | `SFX_UI_Hover` | 音量较小,避免密集重复刺耳 | +| 按钮 Click(确认)| `ui_confirm` | `SFX_UI_Confirm` | | +| 按钮 Click(取消/返回)| `ui_cancel` | `SFX_UI_Cancel` | | +| 面板 Open | `ui_panel_open` | `SFX_UI_PanelOpen` | | +| 面板 Close | `ui_panel_close` | `SFX_UI_PanelClose` | | +| 错误操作(不可用按钮)| `ui_error` | `SFX_UI_Error` | | +| 存档成功 | `ui_save_done` | `SFX_UI_SaveDone` | 轻柔提示音 | +| 成就解锁 | `ui_achievement` | `SFX_Achievement` | 较隆重的提示音 | +| Pause 开启 | `ui_pause` | `SFX_UI_Pause` | 时间停止感 | +| 死亡画面淡入 | `ui_death` | `SFX_UI_Death` | | + +### 21.2 UIAudioManager + +```csharp +[DefaultExecutionOrder(+55)] +public class UIAudioManager : MonoBehaviour +{ + [SerializeField] AudioSource _uiAudioSource; // 独立 AudioMixer Group: UI + [SerializeField] UISoundLibrarySO _library; // ScriptableObject,键→AudioClip 映射 + + // 事件频道订阅 + [SerializeField] StringEventChannelSO _onUISound; // payload = 音效键名 + + void OnEnable() => _onUISound.OnEventRaised += Play; + void OnDisable() => _onUISound.OnEventRaised -= Play; + + public void Play(string key) + { + if (_library.TryGet(key, out var clip)) + _uiAudioSource.PlayOneShot(clip); + } +} +``` + +### 21.3 Button 组件扩展 + +```csharp +// UIButton.cs — 替换所有 UI 中的普通 Button 使用 +[RequireComponent(typeof(Button))] +public class UIButton : MonoBehaviour, ISelectHandler, IPointerEnterHandler +{ + [SerializeField] string _hoverSound = "ui_hover"; + [SerializeField] string _confirmSound = "ui_confirm"; + [SerializeField] StringEventChannelSO _onUISound; + + void Awake() => GetComponent